stream-chat-angular 5.5.0 → 5.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/version.d.ts +1 -1
- package/esm2020/assets/version.mjs +2 -2
- package/esm2020/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +16 -12
- package/esm2020/lib/message-input/message-input-config.service.mjs +1 -1
- package/esm2020/lib/message-input/message-input.component.mjs +14 -3
- package/esm2020/lib/message-input/textarea/textarea.component.mjs +13 -9
- package/esm2020/lib/message-input/textarea.directive.mjs +6 -2
- package/esm2020/lib/message-input/textarea.interface.mjs +1 -1
- package/fesm2015/stream-chat-angular.mjs +59 -33
- package/fesm2015/stream-chat-angular.mjs.map +1 -1
- package/fesm2020/stream-chat-angular.mjs +58 -33
- package/fesm2020/stream-chat-angular.mjs.map +1 -1
- package/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.d.ts +6 -4
- package/lib/message-input/message-input-config.service.d.ts +12 -0
- package/lib/message-input/message-input.component.d.ts +1 -0
- package/lib/message-input/textarea/textarea.component.d.ts +10 -4
- package/lib/message-input/textarea.directive.d.ts +2 -1
- package/lib/message-input/textarea.interface.d.ts +1 -0
- package/package.json +1 -1
- package/src/assets/version.ts +1 -1
package/assets/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "5.
|
|
1
|
+
export declare const version = "5.6.0";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '5.
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export const version = '5.6.0';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2Fzc2V0cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmVyc2lvbiA9ICc1LjYuMCc7XG4iXX0=
|
|
@@ -7,22 +7,20 @@ import * as i2 from "../../chat-client.service";
|
|
|
7
7
|
import * as i3 from "../../transliteration.service";
|
|
8
8
|
import * as i4 from "../emoji-input.service";
|
|
9
9
|
import * as i5 from "../../custom-templates.service";
|
|
10
|
-
import * as i6 from "
|
|
11
|
-
import * as i7 from "
|
|
12
|
-
import * as i8 from "
|
|
13
|
-
import * as i9 from "
|
|
14
|
-
import * as i10 from "@ngx-translate/core";
|
|
10
|
+
import * as i6 from "@angular/common";
|
|
11
|
+
import * as i7 from "angular-mentions";
|
|
12
|
+
import * as i8 from "../../avatar-placeholder/avatar-placeholder.component";
|
|
13
|
+
import * as i9 from "@ngx-translate/core";
|
|
15
14
|
/**
|
|
16
15
|
* The `AutocompleteTextarea` component is used by the [`MessageInput`](./MessageInputComponent.mdx) component to display the input HTML element where users can type their message.
|
|
17
16
|
*/
|
|
18
17
|
export class AutocompleteTextareaComponent {
|
|
19
|
-
constructor(channelService, chatClientService, transliterationService, emojiInputService, customTemplatesService,
|
|
18
|
+
constructor(channelService, chatClientService, transliterationService, emojiInputService, customTemplatesService, cdRef) {
|
|
20
19
|
this.channelService = channelService;
|
|
21
20
|
this.chatClientService = chatClientService;
|
|
22
21
|
this.transliterationService = transliterationService;
|
|
23
22
|
this.emojiInputService = emojiInputService;
|
|
24
23
|
this.customTemplatesService = customTemplatesService;
|
|
25
|
-
this.themeService = themeService;
|
|
26
24
|
this.cdRef = cdRef;
|
|
27
25
|
this.class = 'str-chat__textarea str-chat__message-textarea-angular-host';
|
|
28
26
|
/**
|
|
@@ -57,6 +55,10 @@ export class AutocompleteTextareaComponent {
|
|
|
57
55
|
* Emits the array of users that are mentioned in the message, it is updated when a user mentions a new user or deletes a mention.
|
|
58
56
|
*/
|
|
59
57
|
this.userMentions = new EventEmitter();
|
|
58
|
+
/**
|
|
59
|
+
* Emits any paste event that occured inside the textarea
|
|
60
|
+
*/
|
|
61
|
+
this.pasteFromClipboard = new EventEmitter();
|
|
60
62
|
this.autocompleteKey = 'autocompleteLabel';
|
|
61
63
|
this.mentionTriggerChar = '@';
|
|
62
64
|
this.commandTriggerChar = '/';
|
|
@@ -242,12 +244,12 @@ export class AutocompleteTextareaComponent {
|
|
|
242
244
|
}
|
|
243
245
|
}
|
|
244
246
|
}
|
|
245
|
-
AutocompleteTextareaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AutocompleteTextareaComponent, deps: [{ token: i1.ChannelService }, { token: i2.ChatClientService }, { token: i3.TransliterationService }, { token: i4.EmojiInputService }, { token: i5.CustomTemplatesService }, { token:
|
|
246
|
-
AutocompleteTextareaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: AutocompleteTextareaComponent, selector: "stream-autocomplete-textarea", inputs: { value: "value", placeholder: "placeholder", areMentionsEnabled: "areMentionsEnabled", inputMode: "inputMode", mentionScope: "mentionScope", autoFocus: "autoFocus" }, outputs: { valueChange: "valueChange", send: "send", userMentions: "userMentions" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "messageInput", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<textarea\n #input\n data-testid=\"textarea\"\n class=\"rta__textarea str-chat__textarea__textarea str-chat__angular-textarea str-chat__message-textarea\"\n rows=\"1\"\n [value]=\"value || ''\"\n [autofocus]=\"autoFocus\"\n placeholder=\"{{ placeholder | translate }}\"\n [mentionConfig]=\"autocompleteConfig\"\n [mentionListTemplate]=\"autocompleteItem\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"enterHit($event)\"\n (searchTerm)=\"autcompleteSearchTermChanged($event)\"\n (blur)=\"inputLeft()\"\n></textarea>\n<ng-template #autocompleteItem let-item=\"item\">\n <div class=\"rta rta__item str-chat__emojisearch__item\" [ngSwitch]=\"item.type\">\n <div *ngSwitchCase=\"'mention'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionAutocompleteItemTemplate || defaultMentionTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n <div *ngSwitchCase=\"'command'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n commandAutocompleteItemTemplate || defaultCommandTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultCommandTemplate let-item=\"item\">\n <div class=\"str-chat__slash-command\">\n <span class=\"str-chat__slash-command-header\">\n <strong\n class=\"str-chat__slash-command-name\"\n data-testclass=\"command-name\"\n >{{ item.name }}</strong\n >\n <span class=\"str-chat__slash-command-args\"\n >/{{ item.name }} {{ item.args }}</span\n >\n </span>\n <br />\n </div>\n</ng-template>\n\n<ng-template #defaultMentionTemplate let-item=\"item\">\n <div class=\"str-chat__user-item\">\n <stream-avatar-placeholder\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n type=\"user\"\n location=\"autocomplete-item\"\n [imageUrl]=\"item.image || item.user?.image\"\n [name]=\"item.autocompleteLabel\"\n [user]=\"item.user || item\"\n ></stream-avatar-placeholder>\n <span data-testclass=\"username\" class=\"str-chat__user-item--name\">{{\n item.autocompleteLabel\n }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type:
|
|
247
|
+
AutocompleteTextareaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AutocompleteTextareaComponent, deps: [{ token: i1.ChannelService }, { token: i2.ChatClientService }, { token: i3.TransliterationService }, { token: i4.EmojiInputService }, { token: i5.CustomTemplatesService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
248
|
+
AutocompleteTextareaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: AutocompleteTextareaComponent, selector: "stream-autocomplete-textarea", inputs: { value: "value", placeholder: "placeholder", areMentionsEnabled: "areMentionsEnabled", inputMode: "inputMode", mentionScope: "mentionScope", autoFocus: "autoFocus" }, outputs: { valueChange: "valueChange", send: "send", userMentions: "userMentions", pasteFromClipboard: "pasteFromClipboard" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "messageInput", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<textarea\n #input\n data-testid=\"textarea\"\n class=\"rta__textarea str-chat__textarea__textarea str-chat__angular-textarea str-chat__message-textarea\"\n rows=\"1\"\n [value]=\"value || ''\"\n [autofocus]=\"autoFocus\"\n placeholder=\"{{ placeholder | translate }}\"\n [mentionConfig]=\"autocompleteConfig\"\n [mentionListTemplate]=\"autocompleteItem\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"enterHit($event)\"\n (searchTerm)=\"autcompleteSearchTermChanged($event)\"\n (blur)=\"inputLeft()\"\n (paste)=\"pasteFromClipboard.emit($event)\"\n></textarea>\n<ng-template #autocompleteItem let-item=\"item\">\n <div class=\"rta rta__item str-chat__emojisearch__item\" [ngSwitch]=\"item.type\">\n <div *ngSwitchCase=\"'mention'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionAutocompleteItemTemplate || defaultMentionTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n <div *ngSwitchCase=\"'command'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n commandAutocompleteItemTemplate || defaultCommandTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultCommandTemplate let-item=\"item\">\n <div class=\"str-chat__slash-command\">\n <span class=\"str-chat__slash-command-header\">\n <strong\n class=\"str-chat__slash-command-name\"\n data-testclass=\"command-name\"\n >{{ item.name }}</strong\n >\n <span class=\"str-chat__slash-command-args\"\n >/{{ item.name }} {{ item.args }}</span\n >\n </span>\n <br />\n </div>\n</ng-template>\n\n<ng-template #defaultMentionTemplate let-item=\"item\">\n <div class=\"str-chat__user-item\">\n <stream-avatar-placeholder\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n type=\"user\"\n location=\"autocomplete-item\"\n [imageUrl]=\"item.image || item.user?.image\"\n [name]=\"item.autocompleteLabel\"\n [user]=\"item.user || item\"\n ></stream-avatar-placeholder>\n <span data-testclass=\"username\" class=\"str-chat__user-item--name\">{{\n item.autocompleteLabel\n }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i6.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i7.MentionDirective, selector: "[mention], [mentionConfig]", inputs: ["mentionConfig", "mention", "mentionListTemplate"], outputs: ["searchTerm", "itemSelected", "opened", "closed"] }, { kind: "component", type: i8.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "location", "channel", "user", "type", "initialsType", "showOnlineIndicator"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] });
|
|
247
249
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AutocompleteTextareaComponent, decorators: [{
|
|
248
250
|
type: Component,
|
|
249
|
-
args: [{ selector: 'stream-autocomplete-textarea', template: "<textarea\n #input\n data-testid=\"textarea\"\n class=\"rta__textarea str-chat__textarea__textarea str-chat__angular-textarea str-chat__message-textarea\"\n rows=\"1\"\n [value]=\"value || ''\"\n [autofocus]=\"autoFocus\"\n placeholder=\"{{ placeholder | translate }}\"\n [mentionConfig]=\"autocompleteConfig\"\n [mentionListTemplate]=\"autocompleteItem\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"enterHit($event)\"\n (searchTerm)=\"autcompleteSearchTermChanged($event)\"\n (blur)=\"inputLeft()\"\n></textarea>\n<ng-template #autocompleteItem let-item=\"item\">\n <div class=\"rta rta__item str-chat__emojisearch__item\" [ngSwitch]=\"item.type\">\n <div *ngSwitchCase=\"'mention'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionAutocompleteItemTemplate || defaultMentionTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n <div *ngSwitchCase=\"'command'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n commandAutocompleteItemTemplate || defaultCommandTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultCommandTemplate let-item=\"item\">\n <div class=\"str-chat__slash-command\">\n <span class=\"str-chat__slash-command-header\">\n <strong\n class=\"str-chat__slash-command-name\"\n data-testclass=\"command-name\"\n >{{ item.name }}</strong\n >\n <span class=\"str-chat__slash-command-args\"\n >/{{ item.name }} {{ item.args }}</span\n >\n </span>\n <br />\n </div>\n</ng-template>\n\n<ng-template #defaultMentionTemplate let-item=\"item\">\n <div class=\"str-chat__user-item\">\n <stream-avatar-placeholder\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n type=\"user\"\n location=\"autocomplete-item\"\n [imageUrl]=\"item.image || item.user?.image\"\n [name]=\"item.autocompleteLabel\"\n [user]=\"item.user || item\"\n ></stream-avatar-placeholder>\n <span data-testclass=\"username\" class=\"str-chat__user-item--name\">{{\n item.autocompleteLabel\n }}</span>\n </div>\n</ng-template>\n" }]
|
|
250
|
-
}], ctorParameters: function () { return [{ type: i1.ChannelService }, { type: i2.ChatClientService }, { type: i3.TransliterationService }, { type: i4.EmojiInputService }, { type: i5.CustomTemplatesService }, { type:
|
|
251
|
+
args: [{ selector: 'stream-autocomplete-textarea', template: "<textarea\n #input\n data-testid=\"textarea\"\n class=\"rta__textarea str-chat__textarea__textarea str-chat__angular-textarea str-chat__message-textarea\"\n rows=\"1\"\n [value]=\"value || ''\"\n [autofocus]=\"autoFocus\"\n placeholder=\"{{ placeholder | translate }}\"\n [mentionConfig]=\"autocompleteConfig\"\n [mentionListTemplate]=\"autocompleteItem\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"enterHit($event)\"\n (searchTerm)=\"autcompleteSearchTermChanged($event)\"\n (blur)=\"inputLeft()\"\n (paste)=\"pasteFromClipboard.emit($event)\"\n></textarea>\n<ng-template #autocompleteItem let-item=\"item\">\n <div class=\"rta rta__item str-chat__emojisearch__item\" [ngSwitch]=\"item.type\">\n <div *ngSwitchCase=\"'mention'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionAutocompleteItemTemplate || defaultMentionTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n <div *ngSwitchCase=\"'command'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n commandAutocompleteItemTemplate || defaultCommandTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultCommandTemplate let-item=\"item\">\n <div class=\"str-chat__slash-command\">\n <span class=\"str-chat__slash-command-header\">\n <strong\n class=\"str-chat__slash-command-name\"\n data-testclass=\"command-name\"\n >{{ item.name }}</strong\n >\n <span class=\"str-chat__slash-command-args\"\n >/{{ item.name }} {{ item.args }}</span\n >\n </span>\n <br />\n </div>\n</ng-template>\n\n<ng-template #defaultMentionTemplate let-item=\"item\">\n <div class=\"str-chat__user-item\">\n <stream-avatar-placeholder\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n type=\"user\"\n location=\"autocomplete-item\"\n [imageUrl]=\"item.image || item.user?.image\"\n [name]=\"item.autocompleteLabel\"\n [user]=\"item.user || item\"\n ></stream-avatar-placeholder>\n <span data-testclass=\"username\" class=\"str-chat__user-item--name\">{{\n item.autocompleteLabel\n }}</span>\n </div>\n</ng-template>\n" }]
|
|
252
|
+
}], ctorParameters: function () { return [{ type: i1.ChannelService }, { type: i2.ChatClientService }, { type: i3.TransliterationService }, { type: i4.EmojiInputService }, { type: i5.CustomTemplatesService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { class: [{
|
|
251
253
|
type: HostBinding
|
|
252
254
|
}], value: [{
|
|
253
255
|
type: Input
|
|
@@ -267,8 +269,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
267
269
|
type: Output
|
|
268
270
|
}], userMentions: [{
|
|
269
271
|
type: Output
|
|
272
|
+
}], pasteFromClipboard: [{
|
|
273
|
+
type: Output
|
|
270
274
|
}], messageInput: [{
|
|
271
275
|
type: ViewChild,
|
|
272
276
|
args: ['input']
|
|
273
277
|
}] } });
|
|
274
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXRleHRhcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWlucHV0L2F1dG9jb21wbGV0ZS10ZXh0YXJlYS9hdXRvY29tcGxldGUtdGV4dGFyZWEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL21lc3NhZ2UtaW5wdXQvYXV0b2NvbXBsZXRlLXRleHRhcmVhL2F1dG9jb21wbGV0ZS10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFLckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUFNOUM7O0dBRUc7QUFNSCxNQUFNLE9BQU8sNkJBQTZCO0lBeUZ4QyxZQUNVLGNBQThCLEVBQzlCLGlCQUFvQyxFQUNwQyxzQkFBOEMsRUFDOUMsaUJBQW9DLEVBQ3BDLHNCQUE4QyxFQUM5QyxZQUEwQixFQUMxQixLQUF3QjtRQU54QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQTdGbkIsVUFB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UUFDakQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNoQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDM0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFO2dCQUMzRCxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0I7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUkscUJBQXFCLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO1lBQy9ELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQztTQUM3QztJQUNILENBQUM7OzBIQS9TVSw2QkFBNkI7OEdBQTdCLDZCQUE2QixzZkN4QzFDLDh1RUFvRUE7MkZENUJhLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSw4QkFBOEI7MFNBT3pCLEtBQUs7c0JBQW5CLFdBQVc7Z0JBS0gsS0FBSztzQkFBYixLQUFLO2dCQUlHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSUcsWUFBWTtzQkFBcEIsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlhLFdBQVc7c0JBQTdCLE1BQU07Z0JBSVksSUFBSTtzQkFBdEIsTUFBTTtnQkFJWSxZQUFZO3NCQUE5QixNQUFNO2dCQWFxQixZQUFZO3NCQUF2QyxTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWVudGlvbkNvbmZpZywgTWVudGlvbnMgfSBmcm9tICdhbmd1bGFyLW1lbnRpb25zJztcbmltcG9ydCB7XG4gIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtQ29udGV4dCxcbiAgTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW0sXG4gIENvbW1hbmRBdXRvY29tcGxldGVMaXN0SXRlbUNvbnRleHQsXG59IGZyb20gJy4uLy4uL3R5cGVzJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFVzZXJSZXNwb25zZSB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IFRleHRhcmVhSW50ZXJmYWNlIH0gZnJvbSAnLi4vdGV4dGFyZWEuaW50ZXJmYWNlJztcbmltcG9ydCB7IENoYXRDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2hhdC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUcmFuc2xpdGVyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdHJhbnNsaXRlcmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW1vamlJbnB1dFNlcnZpY2UgfSBmcm9tICcuLi9lbW9qaS1pbnB1dC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdGhlbWUuc2VydmljZSc7XG5cbi8qKlxuICogVGhlIGBBdXRvY29tcGxldGVUZXh0YXJlYWAgY29tcG9uZW50IGlzIHVzZWQgYnkgdGhlIFtgTWVzc2FnZUlucHV0YF0oLi9NZXNzYWdlSW5wdXRDb21wb25lbnQubWR4KSBjb21wb25lbnQgdG8gZGlzcGxheSB0aGUgaW5wdXQgSFRNTCBlbGVtZW50IHdoZXJlIHVzZXJzIGNhbiB0eXBlIHRoZWlyIG1lc3NhZ2UuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1hdXRvY29tcGxldGUtdGV4dGFyZWEnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0b2NvbXBsZXRlLXRleHRhcmVhLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlVGV4dGFyZWFDb21wb25lbnRcbiAgaW1wbGVtZW50cyBUZXh0YXJlYUludGVyZmFjZSwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0XG57XG4gIEBIb3N0QmluZGluZygpIGNsYXNzID1cbiAgICAnc3RyLWNoYXRfX3RleHRhcmVhIHN0ci1jaGF0X19tZXNzYWdlLXRleHRhcmVhLWFuZ3VsYXItaG9zdCc7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGlucHV0IEhUTUwgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciBvZiB0aGUgdGV4dGFyZWFcbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCB1c2VycyBjYW4gbWVudGlvbiBvdGhlciB1c2VycyBpbiBtZXNzYWdlcy4gWW91IGNhbiBhbHNvIHNldCB0aGlzIGlucHV0IG9uIHRoZSBbYE1lc3NhZ2VJbnB1dGBdKC4vTWVzc2FnZUlucHV0Q29tcG9uZW50Lm1keC8jaW5wdXRzLWFuZC1vdXRwdXRzKSBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKSBhcmVNZW50aW9uc0VuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB0cnVlO1xuICAvKipcbiAgICogU2VlIFtgTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZWBdKC4uL3NlcnZpY2VzL01lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2UubWR4KSBmb3IgbW9yZSBpbmZvcm1hdGlvblxuICAgKi9cbiAgQElucHV0KCkgaW5wdXRNb2RlITogJ2Rlc2t0b3AnIHwgJ21vYmlsZSc7XG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgZm9yIHVzZXIgbWVudGlvbnMsIGVpdGhlciBtZW1iZXJzIG9mIHRoZSBjdXJyZW50IGNoYW5uZWwgb2YgbWVtYmVycyBvZiB0aGUgYXBwbGljYXRpb24uIFlvdSBjYW4gYWxzbyBzZXQgdGhpcyBpbnB1dCBvbiB0aGUgW2BNZXNzYWdlSW5wdXRgXSguL01lc3NhZ2VJbnB1dENvbXBvbmVudC5tZHgvI2lucHV0cy1hbmQtb3V0cHV0cykgY29tcG9uZW50LlxuICAgKi9cbiAgQElucHV0KCkgbWVudGlvblNjb3BlOiAnY2hhbm5lbCcgfCAnYXBwbGljYXRpb24nID0gJ2NoYW5uZWwnO1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBhdXRvIGZvY3VzIG9uIHRoZSB0ZXh0YXJlYSBlbGVtZW50XG4gICAqL1xuICBASW5wdXQoKSBhdXRvRm9jdXMgPSB0cnVlO1xuICAvKipcbiAgICogRW1pdHMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlucHV0IGVsZW1lbnQgd2hlbiBhIHVzZXIgdHlwZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqXG4gICAqIEVtaXRzIHdoZW4gYSB1c2VyIHRyaWdnZXJzIGEgbWVzc2FnZSBzZW5kIGV2ZW50ICh0aGlzIGhhcHBlbnMgd2hlbiB0aGV5IGhpdCB0aGUgYEVudGVyYCBrZXkpLlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgYXJyYXkgb2YgdXNlcnMgdGhhdCBhcmUgbWVudGlvbmVkIGluIHRoZSBtZXNzYWdlLCBpdCBpcyB1cGRhdGVkIHdoZW4gYSB1c2VyIG1lbnRpb25zIGEgbmV3IHVzZXIgb3IgZGVsZXRlcyBhIG1lbnRpb24uXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgdXNlck1lbnRpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxVc2VyUmVzcG9uc2VbXT4oKTtcbiAgbWVudGlvbkF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZTpcbiAgICB8IFRlbXBsYXRlUmVmPE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtQ29udGV4dD5cbiAgICB8IHVuZGVmaW5lZDtcbiAgY29tbWFuZEF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZTpcbiAgICB8IFRlbXBsYXRlUmVmPENvbW1hbmRBdXRvY29tcGxldGVMaXN0SXRlbUNvbnRleHQ+XG4gICAgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0b2NvbXBsZXRlS2V5ID0gJ2F1dG9jb21wbGV0ZUxhYmVsJztcbiAgcHJpdmF0ZSByZWFkb25seSBtZW50aW9uVHJpZ2dlckNoYXIgPSAnQCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZFRyaWdnZXJDaGFyID0gJy8nO1xuICBhdXRvY29tcGxldGVDb25maWc6IE1lbnRpb25Db25maWcgPSB7XG4gICAgbWVudGlvbnM6IFtdLFxuICB9O1xuICBAVmlld0NoaWxkKCdpbnB1dCcpIHByaXZhdGUgbWVzc2FnZUlucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIG1lbnRpb25lZFVzZXJzOiBVc2VyUmVzcG9uc2VbXSA9IFtdO1xuICBwcml2YXRlIHVzZXJNZW50aW9uQ29uZmlnOiBNZW50aW9ucyA9IHtcbiAgICB0cmlnZ2VyQ2hhcjogdGhpcy5tZW50aW9uVHJpZ2dlckNoYXIsXG4gICAgZHJvcFVwOiB0cnVlLFxuICAgIGxhYmVsS2V5OiB0aGlzLmF1dG9jb21wbGV0ZUtleSxcbiAgICByZXR1cm5UcmlnZ2VyOiB0cnVlLFxuICAgIG1lbnRpb25GaWx0ZXI6IChcbiAgICAgIHNlYXJjaFN0cmluZzogc3RyaW5nLFxuICAgICAgaXRlbXM6IHsgYXV0b2NvbXBsZXRlTGFiZWw6IHN0cmluZyB9W11cbiAgICApID0+IHRoaXMuZmlsdGVyKHNlYXJjaFN0cmluZywgaXRlbXMpLFxuICAgIG1lbnRpb25TZWxlY3Q6IChpdGVtLCB0cmlnZ2VyQ2hhcikgPT5cbiAgICAgIHRoaXMuaXRlbVNlbGVjdGVkRnJvbUF1dG9jb21wbGV0ZUxpc3QoXG4gICAgICAgIGl0ZW0gYXMgTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW0sXG4gICAgICAgIHRyaWdnZXJDaGFyXG4gICAgICApLFxuICB9O1xuICBwcml2YXRlIHNsYXNoQ29tbWFuZENvbmZpZzogTWVudGlvbnMgPSB7XG4gICAgdHJpZ2dlckNoYXI6IHRoaXMuY29tbWFuZFRyaWdnZXJDaGFyLFxuICAgIGRyb3BVcDogdHJ1ZSxcbiAgICBsYWJlbEtleTogJ25hbWUnLFxuICAgIHJldHVyblRyaWdnZXI6IHRydWUsXG4gICAgbWVudGlvbkZpbHRlcjogKFxuICAgICAgc2VhcmNoU3RyaW5nOiBzdHJpbmcsXG4gICAgICBpdGVtczogeyBhdXRvY29tcGxldGVMYWJlbDogc3RyaW5nIH1bXVxuICAgICkgPT4gdGhpcy5maWx0ZXIoc2VhcmNoU3RyaW5nLCBpdGVtcyksXG4gICAgbWVudGlvblNlbGVjdDogKGl0ZW0sIHRyaWdnZXJDaGFyKSA9PlxuICAgICAgdGhpcy5pdGVtU2VsZWN0ZWRGcm9tQXV0b2NvbXBsZXRlTGlzdChcbiAgICAgICAgaXRlbSBhcyBNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbSxcbiAgICAgICAgdHJpZ2dlckNoYXJcbiAgICAgICksXG4gIH07XG4gIHByaXZhdGUgc2VhcmNoVGVybSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIGlzVmlld0luaXRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhdENsaWVudFNlcnZpY2U6IENoYXRDbGllbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsaXRlcmF0aW9uU2VydmljZTogVHJhbnNsaXRlcmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGVtb2ppSW5wdXRTZXJ2aWNlOiBFbW9qaUlucHV0U2VydmljZSxcbiAgICBwcml2YXRlIGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0aGVtZVNlcnZpY2U6IFRoZW1lU2VydmljZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLnNlYXJjaFRlcm0kLnBpcGUoZGVib3VuY2VUaW1lKDMwMCkpLnN1YnNjcmliZSgoc2VhcmNoVGVybSkgPT4ge1xuICAgICAgaWYgKHNlYXJjaFRlcm0uc3RhcnRzV2l0aCh0aGlzLm1lbnRpb25UcmlnZ2VyQ2hhcikpIHtcbiAgICAgICAgdm9pZCB0aGlzLnVwZGF0ZU1lbnRpb25PcHRpb25zKHNlYXJjaFRlcm0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVDaGFubmVsJC5zdWJzY3JpYmUoKGNoYW5uZWwpID0+IHtcbiAgICAgICAgY29uc3QgY29tbWFuZHMgPSBjaGFubmVsPy5nZXRDb25maWcoKT8uY29tbWFuZHMgfHwgW107XG4gICAgICAgIHRoaXMuc2xhc2hDb21tYW5kQ29uZmlnLml0ZW1zID0gY29tbWFuZHMubWFwKChjKSA9PiAoe1xuICAgICAgICAgIC4uLmMsXG4gICAgICAgICAgW3RoaXMuYXV0b2NvbXBsZXRlS2V5XTogYy5uYW1lLFxuICAgICAgICAgIHR5cGU6ICdjb21tYW5kJyxcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLm1lbnRpb25lZFVzZXJzID0gW107XG4gICAgICAgIHRoaXMudXNlck1lbnRpb25zLm5leHQoWy4uLnRoaXMubWVudGlvbmVkVXNlcnNdKTtcbiAgICAgICAgdm9pZCB0aGlzLnVwZGF0ZU1lbnRpb25PcHRpb25zKHRoaXMuc2VhcmNoVGVybSQuZ2V0VmFsdWUoKSk7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmVtb2ppSW5wdXRTZXJ2aWNlLmVtb2ppSW5wdXQkLnN1YnNjcmliZSgoZW1vamkpID0+IHtcbiAgICAgICAgdGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICBjb25zdCB7IHNlbGVjdGlvblN0YXJ0IH0gPSB0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnNldFJhbmdlVGV4dChlbW9qaSk7XG4gICAgICAgIHRoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPVxuICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ISArIGVtb2ppLmxlbmd0aDtcbiAgICAgICAgdGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQgPVxuICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ISArIGVtb2ppLmxlbmd0aDtcbiAgICAgICAgdGhpcy5pbnB1dENoYW5nZWQoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tZW50aW9uQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4gKHRoaXMubWVudGlvbkF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuY29tbWFuZEF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+ICh0aGlzLmNvbW1hbmRBdXRvY29tcGxldGVJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZSlcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnLm1lbnRpb25zID0gW1xuICAgICAgdGhpcy51c2VyTWVudGlvbkNvbmZpZyxcbiAgICAgIHRoaXMuc2xhc2hDb21tYW5kQ29uZmlnLFxuICAgIF07XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuYXJlTWVudGlvbnNFbmFibGVkKSB7XG4gICAgICBpZiAodGhpcy5hcmVNZW50aW9uc0VuYWJsZWQpIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcubWVudGlvbnMgPSBbXG4gICAgICAgICAgdGhpcy51c2VyTWVudGlvbkNvbmZpZyxcbiAgICAgICAgICB0aGlzLnNsYXNoQ29tbWFuZENvbmZpZyxcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcgPSB7IC4uLnRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbmZpZy5tZW50aW9ucyA9IFt0aGlzLnNsYXNoQ29tbWFuZENvbmZpZ107XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnID0geyAuLi50aGlzLmF1dG9jb21wbGV0ZUNvbmZpZyB9O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5tZW50aW9uU2NvcGUpIHtcbiAgICAgIHZvaWQgdGhpcy51cGRhdGVNZW50aW9uT3B0aW9ucyh0aGlzLnNlYXJjaFRlcm0kLmdldFZhbHVlKCkpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy52YWx1ZSAmJiAhdGhpcy52YWx1ZSAmJiB0aGlzLm1lc3NhZ2VJbnB1dCkge1xuICAgICAgdGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlPy5jaGF0Q2xpZW50Py5sb2dnZXI/LihcbiAgICAgICAgJ2luZm8nLFxuICAgICAgICAnW0F1dG9jb21wbGV0ZSB0ZXh0YXJlYV0gVmFsdWUgcmVzZXQsIGFkanVzdGluZyB0ZXh0YXJlYSBoZWlnaHQgdG8gYXV0bydcbiAgICAgICk7XG4gICAgICB0aGlzLnVwZGF0ZU1lbnRpb25lZFVzZXJzRnJvbVRleHQoKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgY2hhbmdlcy52YWx1ZSAmJlxuICAgICAgdGhpcy52YWx1ZSAmJlxuICAgICAgdGhpcy5tZXNzYWdlSW5wdXQgJiZcbiAgICAgIHRoaXMuaXNWaWV3SW5pdGVkXG4gICAgKSB7XG4gICAgICB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlPy5jaGF0Q2xpZW50Py5sb2dnZXI/LihcbiAgICAgICAgJ2luZm8nLFxuICAgICAgICAnW0F1dG9jb21wbGV0ZSB0ZXh0YXJlYV0gVmFsdWUgY2hhbmdlZCdcbiAgICAgICk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gMCkge1xuICAgICAgICAgIHRoaXMuYWRqdXN0VGV4dGFyZWFIZWlnaHQoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNWaWV3SW5pdGVkID0gdHJ1ZTtcbiAgICB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlPy5jaGF0Q2xpZW50Py5sb2dnZXI/LihcbiAgICAgICdpbmZvJyxcbiAgICAgICdbQXV0b2NvbXBsZXRlIHRleHRhcmVhXSBWaWV3IGluaXRlZCdcbiAgICApO1xuICAgIGlmICh0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCA+IDAgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5hZGp1c3RUZXh0YXJlYUhlaWdodCgpO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlcihzZWFyY2hTdHJpbmc6IHN0cmluZywgaXRlbXM6IHsgYXV0b2NvbXBsZXRlTGFiZWw6IHN0cmluZyB9W10pIHtcbiAgICByZXR1cm4gaXRlbXMuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgdGhpcy50cmFuc2xpdGVyYXRlKGl0ZW0uYXV0b2NvbXBsZXRlTGFiZWwudG9Mb3dlckNhc2UoKSkuaW5jbHVkZXMoXG4gICAgICAgIHRoaXMudHJhbnNsaXRlcmF0ZShzZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgaXRlbVNlbGVjdGVkRnJvbUF1dG9jb21wbGV0ZUxpc3QoXG4gICAgaXRlbTogTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW0sXG4gICAgdHJpZ2dlckNoYXIgPSAnJ1xuICApIHtcbiAgICBpZiAodHJpZ2dlckNoYXIgPT09IHRoaXMubWVudGlvblRyaWdnZXJDaGFyKSB7XG4gICAgICB0aGlzLm1lbnRpb25lZFVzZXJzLnB1c2goKGl0ZW0udXNlciA/IGl0ZW0udXNlciA6IGl0ZW0pIGFzIFVzZXJSZXNwb25zZSk7XG4gICAgICB0aGlzLnVzZXJNZW50aW9ucy5uZXh0KFsuLi50aGlzLm1lbnRpb25lZFVzZXJzXSk7XG4gICAgfVxuICAgIHJldHVybiB0cmlnZ2VyQ2hhciArIGl0ZW0uYXV0b2NvbXBsZXRlTGFiZWwgKyAnICc7XG4gIH1cblxuICBhdXRjb21wbGV0ZVNlYXJjaFRlcm1DaGFuZ2VkKHNlYXJjaFRlcm06IHN0cmluZykge1xuICAgIGlmIChzZWFyY2hUZXJtID09PSB0aGlzLm1lbnRpb25UcmlnZ2VyQ2hhcikge1xuICAgICAgdm9pZCB0aGlzLnVwZGF0ZU1lbnRpb25PcHRpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoVGVybSQubmV4dChzZWFyY2hUZXJtKTtcbiAgICB9XG4gIH1cblxuICBpbnB1dENoYW5nZWQoKSB7XG4gICAgdGhpcy5jaGF0Q2xpZW50U2VydmljZT8uY2hhdENsaWVudD8ubG9nZ2VyPy4oXG4gICAgICAnaW5mbycsXG4gICAgICAnW0F1dG9jb21wbGV0ZSB0ZXh0YXJlYV0gSW5wdXQgY2hhbmdlZCdcbiAgICApO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgICB0aGlzLmFkanVzdFRleHRhcmVhSGVpZ2h0KCk7XG4gIH1cblxuICBpbnB1dExlZnQoKSB7XG4gICAgdGhpcy51cGRhdGVNZW50aW9uZWRVc2Vyc0Zyb21UZXh0KCk7XG4gIH1cblxuICBlbnRlckhpdChldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pbnB1dE1vZGUgPT09ICdkZXNrdG9wJyAmJiAhKGV2ZW50IGFzIEtleWJvYXJkRXZlbnQpLmlzQ29tcG9zaW5nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy51cGRhdGVNZW50aW9uZWRVc2Vyc0Zyb21UZXh0KCk7XG4gICAgICB0aGlzLnNlbmQubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRqdXN0VGV4dGFyZWFIZWlnaHQoKSB7XG4gICAgdGhpcy5jaGF0Q2xpZW50U2VydmljZT8uY2hhdENsaWVudD8ubG9nZ2VyPy4oXG4gICAgICAnaW5mbycsXG4gICAgICBgW0F1dG9jb21wbGV0ZSB0ZXh0YXJlYV0gVGV4dGFyZWEgaGVpZ2h0IHNldCBmcm9tICR7dGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHR9IHRvICR7dGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHR9cHhgXG4gICAgKTtcbiAgICB0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9ICcnO1xuICAgIHRoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHR9cHhgO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2xpdGVyYXRlKHM6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnRyYW5zbGl0ZXJhdGlvblNlcnZpY2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGl0ZXJhdGlvblNlcnZpY2UudHJhbnNsaXRlcmF0ZShzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVNZW50aW9uT3B0aW9ucyhzZWFyY2hUZXJtPzogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmFyZU1lbnRpb25zRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZWFyY2hUZXJtID0gc2VhcmNoVGVybT8ucmVwbGFjZSh0aGlzLm1lbnRpb25UcmlnZ2VyQ2hhciwgJycpO1xuICAgIGNvbnN0IHJlcXVlc3QgPVxuICAgICAgdGhpcy5tZW50aW9uU2NvcGUgPT09ICdhcHBsaWNhdGlvbidcbiAgICAgICAgPyAoczogc3RyaW5nKSA9PiB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmF1dG9jb21wbGV0ZVVzZXJzKHMpXG4gICAgICAgIDogKHM6IHN0cmluZykgPT4gdGhpcy5jaGFubmVsU2VydmljZS5hdXRvY29tcGxldGVNZW1iZXJzKHMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcXVlc3Qoc2VhcmNoVGVybSB8fCAnJyk7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmZpbHRlcihcbiAgICAgIHNlYXJjaFRlcm0gfHwgJycsXG4gICAgICByZXN1bHQubWFwKChpKSA9PiB7XG4gICAgICAgIGNvbnN0IHVzZXIgPSAoaS51c2VyID8gaS51c2VyIDogaSkgYXMgVXNlclJlc3BvbnNlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmksXG4gICAgICAgICAgYXV0b2NvbXBsZXRlTGFiZWw6IHVzZXIubmFtZSB8fCB1c2VyLmlkLFxuICAgICAgICAgIHR5cGU6ICdtZW50aW9uJyxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnVzZXJNZW50aW9uQ29uZmlnLml0ZW1zID0gaXRlbXM7XG4gICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcubWVudGlvbnMgPSBbXG4gICAgICB0aGlzLnVzZXJNZW50aW9uQ29uZmlnLFxuICAgICAgdGhpcy5zbGFzaENvbW1hbmRDb25maWcsXG4gICAgXTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbmZpZyA9IHsgLi4udGhpcy5hdXRvY29tcGxldGVDb25maWcgfTtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWVudGlvbmVkVXNlcnNGcm9tVGV4dCgpIHtcbiAgICBjb25zdCB1cGRhdGVkTWVudGlvbmVkVXNlcnM6IFVzZXJSZXNwb25zZVtdID0gW107XG4gICAgdGhpcy5tZW50aW9uZWRVc2Vycy5mb3JFYWNoKCh1KSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1Lm5hbWUgfHwgdS5pZDtcbiAgICAgIGlmICh0aGlzLnZhbHVlLmluY2x1ZGVzKGAke3RoaXMubWVudGlvblRyaWdnZXJDaGFyfSR7a2V5fWApKSB7XG4gICAgICAgIHVwZGF0ZWRNZW50aW9uZWRVc2Vycy5wdXNoKHUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh1cGRhdGVkTWVudGlvbmVkVXNlcnMubGVuZ3RoICE9PSB0aGlzLm1lbnRpb25lZFVzZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy51c2VyTWVudGlvbnMubmV4dChbLi4udXBkYXRlZE1lbnRpb25lZFVzZXJzXSk7XG4gICAgICB0aGlzLm1lbnRpb25lZFVzZXJzID0gdXBkYXRlZE1lbnRpb25lZFVzZXJzO1xuICAgIH1cbiAgfVxufVxuIiwiPHRleHRhcmVhXG4gICNpbnB1dFxuICBkYXRhLXRlc3RpZD1cInRleHRhcmVhXCJcbiAgY2xhc3M9XCJydGFfX3RleHRhcmVhIHN0ci1jaGF0X190ZXh0YXJlYV9fdGV4dGFyZWEgc3RyLWNoYXRfX2FuZ3VsYXItdGV4dGFyZWEgc3RyLWNoYXRfX21lc3NhZ2UtdGV4dGFyZWFcIlxuICByb3dzPVwiMVwiXG4gIFt2YWx1ZV09XCJ2YWx1ZSB8fCAnJ1wiXG4gIFthdXRvZm9jdXNdPVwiYXV0b0ZvY3VzXCJcbiAgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZSB9fVwiXG4gIFttZW50aW9uQ29uZmlnXT1cImF1dG9jb21wbGV0ZUNvbmZpZ1wiXG4gIFttZW50aW9uTGlzdFRlbXBsYXRlXT1cImF1dG9jb21wbGV0ZUl0ZW1cIlxuICAoaW5wdXQpPVwiaW5wdXRDaGFuZ2VkKClcIlxuICAoa2V5ZG93bi5lbnRlcik9XCJlbnRlckhpdCgkZXZlbnQpXCJcbiAgKHNlYXJjaFRlcm0pPVwiYXV0Y29tcGxldGVTZWFyY2hUZXJtQ2hhbmdlZCgkZXZlbnQpXCJcbiAgKGJsdXIpPVwiaW5wdXRMZWZ0KClcIlxuPjwvdGV4dGFyZWE+XG48bmctdGVtcGxhdGUgI2F1dG9jb21wbGV0ZUl0ZW0gbGV0LWl0ZW09XCJpdGVtXCI+XG4gIDxkaXYgY2xhc3M9XCJydGEgcnRhX19pdGVtIHN0ci1jaGF0X19lbW9qaXNlYXJjaF9faXRlbVwiIFtuZ1N3aXRjaF09XCJpdGVtLnR5cGVcIj5cbiAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbWVudGlvbidcIiBjbGFzcz1cInJ0YV9fZW50aXR5XCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgbWVudGlvbkF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZSB8fCBkZWZhdWx0TWVudGlvblRlbXBsYXRlO1xuICAgICAgICAgIGNvbnRleHQ6IHsgaXRlbTogaXRlbSB9XG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2NvbW1hbmQnXCIgY2xhc3M9XCJydGFfX2VudGl0eVwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIGNvbW1hbmRBdXRvY29tcGxldGVJdGVtVGVtcGxhdGUgfHwgZGVmYXVsdENvbW1hbmRUZW1wbGF0ZTtcbiAgICAgICAgICBjb250ZXh0OiB7IGl0ZW06IGl0ZW0gfVxuICAgICAgICBcIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbW1hbmRUZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19zbGFzaC1jb21tYW5kXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fc2xhc2gtY29tbWFuZC1oZWFkZXJcIj5cbiAgICAgIDxzdHJvbmdcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fc2xhc2gtY29tbWFuZC1uYW1lXCJcbiAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJjb21tYW5kLW5hbWVcIlxuICAgICAgICA+e3sgaXRlbS5uYW1lIH19PC9zdHJvbmdcbiAgICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPVwic3RyLWNoYXRfX3NsYXNoLWNvbW1hbmQtYXJnc1wiXG4gICAgICAgID4ve3sgaXRlbS5uYW1lIH19IHt7IGl0ZW0uYXJncyB9fTwvc3BhblxuICAgICAgPlxuICAgIDwvc3Bhbj5cbiAgICA8YnIgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRNZW50aW9uVGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCI+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fdXNlci1pdGVtXCI+XG4gICAgPHN0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXJcbiAgICAgIGRhdGEtdGVzdGNsYXNzPVwiYXZhdGFyXCJcbiAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2F2YXRhciBzdHItY2hhdF9fYXZhdGFyLS1jaXJjbGVcIlxuICAgICAgdHlwZT1cInVzZXJcIlxuICAgICAgbG9jYXRpb249XCJhdXRvY29tcGxldGUtaXRlbVwiXG4gICAgICBbaW1hZ2VVcmxdPVwiaXRlbS5pbWFnZSB8fCBpdGVtLnVzZXI/LmltYWdlXCJcbiAgICAgIFtuYW1lXT1cIml0ZW0uYXV0b2NvbXBsZXRlTGFiZWxcIlxuICAgICAgW3VzZXJdPVwiaXRlbS51c2VyIHx8IGl0ZW1cIlxuICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gICAgPHNwYW4gZGF0YS10ZXN0Y2xhc3M9XCJ1c2VybmFtZVwiIGNsYXNzPVwic3RyLWNoYXRfX3VzZXItaXRlbS0tbmFtZVwiPnt7XG4gICAgICBpdGVtLmF1dG9jb21wbGV0ZUxhYmVsXG4gICAgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXRleHRhcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWlucHV0L2F1dG9jb21wbGV0ZS10ZXh0YXJlYS9hdXRvY29tcGxldGUtdGV4dGFyZWEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL21lc3NhZ2UtaW5wdXQvYXV0b2NvbXBsZXRlLXRleHRhcmVhL2F1dG9jb21wbGV0ZS10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFLckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7OztBQUs5Qzs7R0FFRztBQU1ILE1BQU0sT0FBTyw2QkFBNkI7SUE2RnhDLFlBQ1UsY0FBOEIsRUFDOUIsaUJBQW9DLEVBQ3BDLHNCQUE4QyxFQUM5QyxpQkFBb0MsRUFDcEMsc0JBQThDLEVBQzlDLEtBQXdCO1FBTHhCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBaEduQixVQUFLLEdBQ2xCLDREQUE0RCxDQUFDO1FBQy9EOztXQUVHO1FBQ00sVUFB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bmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lbnRpb25Db25maWcsIE1lbnRpb25zIH0gZnJvbSAnYW5ndWxhci1tZW50aW9ucyc7XG5pbXBvcnQge1xuICBNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbUNvbnRleHQsXG4gIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtLFxuICBDb21tYW5kQXV0b2NvbXBsZXRlTGlzdEl0ZW1Db250ZXh0LFxufSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVc2VyUmVzcG9uc2UgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4uLy4uL2NoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBUZXh0YXJlYUludGVyZmFjZSB9IGZyb20gJy4uL3RleHRhcmVhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDaGF0Q2xpZW50U2VydmljZSB9IGZyb20gJy4uLy4uL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVHJhbnNsaXRlcmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3RyYW5zbGl0ZXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEVtb2ppSW5wdXRTZXJ2aWNlIH0gZnJvbSAnLi4vZW1vamktaW5wdXQuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcblxuLyoqXG4gKiBUaGUgYEF1dG9jb21wbGV0ZVRleHRhcmVhYCBjb21wb25lbnQgaXMgdXNlZCBieSB0aGUgW2BNZXNzYWdlSW5wdXRgXSguL01lc3NhZ2VJbnB1dENvbXBvbmVudC5tZHgpIGNvbXBvbmVudCB0byBkaXNwbGF5IHRoZSBpbnB1dCBIVE1MIGVsZW1lbnQgd2hlcmUgdXNlcnMgY2FuIHR5cGUgdGhlaXIgbWVzc2FnZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLWF1dG9jb21wbGV0ZS10ZXh0YXJlYScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUtdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVUZXh0YXJlYUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIFRleHRhcmVhSW50ZXJmYWNlLCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXRcbntcbiAgQEhvc3RCaW5kaW5nKCkgY2xhc3MgPVxuICAgICdzdHItY2hhdF9fdGV4dGFyZWEgc3RyLWNoYXRfX21lc3NhZ2UtdGV4dGFyZWEtYW5ndWxhci1ob3N0JztcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgSFRNTCBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgdmFsdWUgPSAnJztcbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIG9mIHRoZSB0ZXh0YXJlYVxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcbiAgLyoqXG4gICAqIElmIHRydWUsIHVzZXJzIGNhbiBtZW50aW9uIG90aGVyIHVzZXJzIGluIG1lc3NhZ2VzLiBZb3UgY2FuIGFsc28gc2V0IHRoaXMgaW5wdXQgb24gdGhlIFtgTWVzc2FnZUlucHV0YF0oLi9NZXNzYWdlSW5wdXRDb21wb25lbnQubWR4LyNpbnB1dHMtYW5kLW91dHB1dHMpIGNvbXBvbmVudC5cbiAgICovXG4gIEBJbnB1dCgpIGFyZU1lbnRpb25zRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHRydWU7XG4gIC8qKlxuICAgKiBTZWUgW2BNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlYF0oLi4vc2VydmljZXMvTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZS5tZHgpIGZvciBtb3JlIGluZm9ybWF0aW9uXG4gICAqL1xuICBASW5wdXQoKSBpbnB1dE1vZGUhOiAnZGVza3RvcCcgfCAnbW9iaWxlJztcbiAgLyoqXG4gICAqIFRoZSBzY29wZSBmb3IgdXNlciBtZW50aW9ucywgZWl0aGVyIG1lbWJlcnMgb2YgdGhlIGN1cnJlbnQgY2hhbm5lbCBvZiBtZW1iZXJzIG9mIHRoZSBhcHBsaWNhdGlvbi4gWW91IGNhbiBhbHNvIHNldCB0aGlzIGlucHV0IG9uIHRoZSBbYE1lc3NhZ2VJbnB1dGBdKC4vTWVzc2FnZUlucHV0Q29tcG9uZW50Lm1keC8jaW5wdXRzLWFuZC1vdXRwdXRzKSBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKSBtZW50aW9uU2NvcGU6ICdjaGFubmVsJyB8ICdhcHBsaWNhdGlvbicgPSAnY2hhbm5lbCc7XG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGF1dG8gZm9jdXMgb24gdGhlIHRleHRhcmVhIGVsZW1lbnRcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IHRydWU7XG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaW5wdXQgZWxlbWVudCB3aGVuIGEgdXNlciB0eXBlcy5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKipcbiAgICogRW1pdHMgd2hlbiBhIHVzZXIgdHJpZ2dlcnMgYSBtZXNzYWdlIHNlbmQgZXZlbnQgKHRoaXMgaGFwcGVucyB3aGVuIHRoZXkgaGl0IHRoZSBgRW50ZXJgIGtleSkuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBhcnJheSBvZiB1c2VycyB0aGF0IGFyZSBtZW50aW9uZWQgaW4gdGhlIG1lc3NhZ2UsIGl0IGlzIHVwZGF0ZWQgd2hlbiBhIHVzZXIgbWVudGlvbnMgYSBuZXcgdXNlciBvciBkZWxldGVzIGEgbWVudGlvbi5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB1c2VyTWVudGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPFVzZXJSZXNwb25zZVtdPigpO1xuICAvKipcbiAgICogRW1pdHMgYW55IHBhc3RlIGV2ZW50IHRoYXQgb2NjdXJlZCBpbnNpZGUgdGhlIHRleHRhcmVhXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgcGFzdGVGcm9tQ2xpcGJvYXJkID0gbmV3IEV2ZW50RW1pdHRlcjxDbGlwYm9hcmRFdmVudD4oKTtcbiAgbWVudGlvbkF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZTpcbiAgICB8IFRlbXBsYXRlUmVmPE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtQ29udGV4dD5cbiAgICB8IHVuZGVmaW5lZDtcbiAgY29tbWFuZEF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZTpcbiAgICB8IFRlbXBsYXRlUmVmPENvbW1hbmRBdXRvY29tcGxldGVMaXN0SXRlbUNvbnRleHQ+XG4gICAgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0b2NvbXBsZXRlS2V5ID0gJ2F1dG9jb21wbGV0ZUxhYmVsJztcbiAgcHJpdmF0ZSByZWFkb25seSBtZW50aW9uVHJpZ2dlckNoYXIgPSAnQCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZFRyaWdnZXJDaGFyID0gJy8nO1xuICBhdXRvY29tcGxldGVDb25maWc6IE1lbnRpb25Db25maWcgPSB7XG4gICAgbWVudGlvbnM6IFtdLFxuICB9O1xuICBAVmlld0NoaWxkKCdpbnB1dCcpIHByaXZhdGUgbWVzc2FnZUlucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIG1lbnRpb25lZFVzZXJzOiBVc2VyUmVzcG9uc2VbXSA9IFtdO1xuICBwcml2YXRlIHVzZXJNZW50aW9uQ29uZmlnOiBNZW50aW9ucyA9IHtcbiAgICB0cmlnZ2VyQ2hhcjogdGhpcy5tZW50aW9uVHJpZ2dlckNoYXIsXG4gICAgZHJvcFVwOiB0cnVlLFxuICAgIGxhYmVsS2V5OiB0aGlzLmF1dG9jb21wbGV0ZUtleSxcbiAgICByZXR1cm5UcmlnZ2VyOiB0cnVlLFxuICAgIG1lbnRpb25GaWx0ZXI6IChcbiAgICAgIHNlYXJjaFN0cmluZzogc3RyaW5nLFxuICAgICAgaXRlbXM6IHsgYXV0b2NvbXBsZXRlTGFiZWw6IHN0cmluZyB9W11cbiAgICApID0+IHRoaXMuZmlsdGVyKHNlYXJjaFN0cmluZywgaXRlbXMpLFxuICAgIG1lbnRpb25TZWxlY3Q6IChpdGVtLCB0cmlnZ2VyQ2hhcikgPT5cbiAgICAgIHRoaXMuaXRlbVNlbGVjdGVkRnJvbUF1dG9jb21wbGV0ZUxpc3QoXG4gICAgICAgIGl0ZW0gYXMgTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW0sXG4gICAgICAgIHRyaWdnZXJDaGFyXG4gICAgICApLFxuICB9O1xuICBwcml2YXRlIHNsYXNoQ29tbWFuZENvbmZpZzogTWVudGlvbnMgPSB7XG4gICAgdHJpZ2dlckNoYXI6IHRoaXMuY29tbWFuZFRyaWdnZXJDaGFyLFxuICAgIGRyb3BVcDogdHJ1ZSxcbiAgICBsYWJlbEtleTogJ25hbWUnLFxuICAgIHJldHVyblRyaWdnZXI6IHRydWUsXG4gICAgbWVudGlvbkZpbHRlcjogKFxuICAgICAgc2VhcmNoU3RyaW5nOiBzdHJpbmcsXG4gICAgICBpdGVtczogeyBhdXRvY29tcGxldGVMYWJlbDogc3RyaW5nIH1bXVxuICAgICkgPT4gdGhpcy5maWx0ZXIoc2VhcmNoU3RyaW5nLCBpdGVtcyksXG4gICAgbWVudGlvblNlbGVjdDogKGl0ZW0sIHRyaWdnZXJDaGFyKSA9PlxuICAgICAgdGhpcy5pdGVtU2VsZWN0ZWRGcm9tQXV0b2NvbXBsZXRlTGlzdChcbiAgICAgICAgaXRlbSBhcyBNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbSxcbiAgICAgICAgdHJpZ2dlckNoYXJcbiAgICAgICksXG4gIH07XG4gIHByaXZhdGUgc2VhcmNoVGVybSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIGlzVmlld0luaXRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhdENsaWVudFNlcnZpY2U6IENoYXRDbGllbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsaXRlcmF0aW9uU2VydmljZTogVHJhbnNsaXRlcmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGVtb2ppSW5wdXRTZXJ2aWNlOiBFbW9qaUlucHV0U2VydmljZSxcbiAgICBwcml2YXRlIGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5zZWFyY2hUZXJtJC5waXBlKGRlYm91bmNlVGltZSgzMDApKS5zdWJzY3JpYmUoKHNlYXJjaFRlcm0pID0+IHtcbiAgICAgIGlmIChzZWFyY2hUZXJtLnN0YXJ0c1dpdGgodGhpcy5tZW50aW9uVHJpZ2dlckNoYXIpKSB7XG4gICAgICAgIHZvaWQgdGhpcy51cGRhdGVNZW50aW9uT3B0aW9ucyhzZWFyY2hUZXJtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlQ2hhbm5lbCQuc3Vic2NyaWJlKChjaGFubmVsKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRzID0gY2hhbm5lbD8uZ2V0Q29uZmlnKCk/LmNvbW1hbmRzIHx8IFtdO1xuICAgICAgICB0aGlzLnNsYXNoQ29tbWFuZENvbmZpZy5pdGVtcyA9IGNvbW1hbmRzLm1hcCgoYykgPT4gKHtcbiAgICAgICAgICAuLi5jLFxuICAgICAgICAgIFt0aGlzLmF1dG9jb21wbGV0ZUtleV06IGMubmFtZSxcbiAgICAgICAgICB0eXBlOiAnY29tbWFuZCcsXG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5tZW50aW9uZWRVc2VycyA9IFtdO1xuICAgICAgICB0aGlzLnVzZXJNZW50aW9ucy5uZXh0KFsuLi50aGlzLm1lbnRpb25lZFVzZXJzXSk7XG4gICAgICAgIHZvaWQgdGhpcy51cGRhdGVNZW50aW9uT3B0aW9ucyh0aGlzLnNlYXJjaFRlcm0kLmdldFZhbHVlKCkpO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5lbW9qaUlucHV0U2VydmljZS5lbW9qaUlucHV0JC5zdWJzY3JpYmUoKGVtb2ppKSA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb25TdGFydCB9ID0gdGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zZXRSYW5nZVRleHQoZW1vamkpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID1cbiAgICAgICAgICBzZWxlY3Rpb25TdGFydCEgKyBlbW9qaS5sZW5ndGg7XG4gICAgICAgIHRoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uRW5kID1cbiAgICAgICAgICBzZWxlY3Rpb25TdGFydCEgKyBlbW9qaS5sZW5ndGg7XG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2VkKCk7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubWVudGlvbkF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+ICh0aGlzLm1lbnRpb25BdXRvY29tcGxldGVJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZSlcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLmNvbW1hbmRBdXRvY29tcGxldGVJdGVtVGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHRlbXBsYXRlKSA9PiAodGhpcy5jb21tYW5kQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbmZpZy5tZW50aW9ucyA9IFtcbiAgICAgIHRoaXMudXNlck1lbnRpb25Db25maWcsXG4gICAgICB0aGlzLnNsYXNoQ29tbWFuZENvbmZpZyxcbiAgICBdO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmFyZU1lbnRpb25zRW5hYmxlZCkge1xuICAgICAgaWYgKHRoaXMuYXJlTWVudGlvbnNFbmFibGVkKSB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnLm1lbnRpb25zID0gW1xuICAgICAgICAgIHRoaXMudXNlck1lbnRpb25Db25maWcsXG4gICAgICAgICAgdGhpcy5zbGFzaENvbW1hbmRDb25maWcsXG4gICAgICAgIF07XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnID0geyAuLi50aGlzLmF1dG9jb21wbGV0ZUNvbmZpZyB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcubWVudGlvbnMgPSBbdGhpcy5zbGFzaENvbW1hbmRDb25maWddO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbmZpZyA9IHsgLi4udGhpcy5hdXRvY29tcGxldGVDb25maWcgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXMubWVudGlvblNjb3BlKSB7XG4gICAgICB2b2lkIHRoaXMudXBkYXRlTWVudGlvbk9wdGlvbnModGhpcy5zZWFyY2hUZXJtJC5nZXRWYWx1ZSgpKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMudmFsdWUgJiYgIXRoaXMudmFsdWUgJiYgdGhpcy5tZXNzYWdlSW5wdXQpIHtcbiAgICAgIHRoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgdGhpcy5jaGF0Q2xpZW50U2VydmljZT8uY2hhdENsaWVudD8ubG9nZ2VyPy4oXG4gICAgICAgICdpbmZvJyxcbiAgICAgICAgJ1tBdXRvY29tcGxldGUgdGV4dGFyZWFdIFZhbHVlIHJlc2V0LCBhZGp1c3RpbmcgdGV4dGFyZWEgaGVpZ2h0IHRvIGF1dG8nXG4gICAgICApO1xuICAgICAgdGhpcy51cGRhdGVNZW50aW9uZWRVc2Vyc0Zyb21UZXh0KCk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGNoYW5nZXMudmFsdWUgJiZcbiAgICAgIHRoaXMudmFsdWUgJiZcbiAgICAgIHRoaXMubWVzc2FnZUlucHV0ICYmXG4gICAgICB0aGlzLmlzVmlld0luaXRlZFxuICAgICkge1xuICAgICAgdGhpcy5jaGF0Q2xpZW50U2VydmljZT8uY2hhdENsaWVudD8ubG9nZ2VyPy4oXG4gICAgICAgICdpbmZvJyxcbiAgICAgICAgJ1tBdXRvY29tcGxldGUgdGV4dGFyZWFdIFZhbHVlIGNoYW5nZWQnXG4gICAgICApO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCA+IDApIHtcbiAgICAgICAgICB0aGlzLmFkanVzdFRleHRhcmVhSGVpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzVmlld0luaXRlZCA9IHRydWU7XG4gICAgdGhpcy5jaGF0Q2xpZW50U2VydmljZT8uY2hhdENsaWVudD8ubG9nZ2VyPy4oXG4gICAgICAnaW5mbycsXG4gICAgICAnW0F1dG9jb21wbGV0ZSB0ZXh0YXJlYV0gVmlldyBpbml0ZWQnXG4gICAgKTtcbiAgICBpZiAodGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPiAwICYmIHRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMuYWRqdXN0VGV4dGFyZWFIZWlnaHQoKTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXIoc2VhcmNoU3RyaW5nOiBzdHJpbmcsIGl0ZW1zOiB7IGF1dG9jb21wbGV0ZUxhYmVsOiBzdHJpbmcgfVtdKSB7XG4gICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgIHRoaXMudHJhbnNsaXRlcmF0ZShpdGVtLmF1dG9jb21wbGV0ZUxhYmVsLnRvTG93ZXJDYXNlKCkpLmluY2x1ZGVzKFxuICAgICAgICB0aGlzLnRyYW5zbGl0ZXJhdGUoc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGl0ZW1TZWxlY3RlZEZyb21BdXRvY29tcGxldGVMaXN0KFxuICAgIGl0ZW06IE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtLFxuICAgIHRyaWdnZXJDaGFyID0gJydcbiAgKSB7XG4gICAgaWYgKHRyaWdnZXJDaGFyID09PSB0aGlzLm1lbnRpb25UcmlnZ2VyQ2hhcikge1xuICAgICAgdGhpcy5tZW50aW9uZWRVc2Vycy5wdXNoKChpdGVtLnVzZXIgPyBpdGVtLnVzZXIgOiBpdGVtKSBhcyBVc2VyUmVzcG9uc2UpO1xuICAgICAgdGhpcy51c2VyTWVudGlvbnMubmV4dChbLi4udGhpcy5tZW50aW9uZWRVc2Vyc10pO1xuICAgIH1cbiAgICByZXR1cm4gdHJpZ2dlckNoYXIgKyBpdGVtLmF1dG9jb21wbGV0ZUxhYmVsICsgJyAnO1xuICB9XG5cbiAgYXV0Y29tcGxldGVTZWFyY2hUZXJtQ2hhbmdlZChzZWFyY2hUZXJtOiBzdHJpbmcpIHtcbiAgICBpZiAoc2VhcmNoVGVybSA9PT0gdGhpcy5tZW50aW9uVHJpZ2dlckNoYXIpIHtcbiAgICAgIHZvaWQgdGhpcy51cGRhdGVNZW50aW9uT3B0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaFRlcm0kLm5leHQoc2VhcmNoVGVybSk7XG4gICAgfVxuICB9XG5cbiAgaW5wdXRDaGFuZ2VkKCkge1xuICAgIHRoaXMuY2hhdENsaWVudFNlcnZpY2U/LmNoYXRDbGllbnQ/LmxvZ2dlcj8uKFxuICAgICAgJ2luZm8nLFxuICAgICAgJ1tBdXRvY29tcGxldGUgdGV4dGFyZWFdIElucHV0IGNoYW5nZWQnXG4gICAgKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgdGhpcy5hZGp1c3RUZXh0YXJlYUhlaWdodCgpO1xuICB9XG5cbiAgaW5wdXRMZWZ0KCkge1xuICAgIHRoaXMudXBkYXRlTWVudGlvbmVkVXNlcnNGcm9tVGV4dCgpO1xuICB9XG5cbiAgZW50ZXJIaXQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaW5wdXRNb2RlID09PSAnZGVza3RvcCcgJiYgIShldmVudCBhcyBLZXlib2FyZEV2ZW50KS5pc0NvbXBvc2luZykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMudXBkYXRlTWVudGlvbmVkVXNlcnNGcm9tVGV4dCgpO1xuICAgICAgdGhpcy5zZW5kLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkanVzdFRleHRhcmVhSGVpZ2h0KCkge1xuICAgIHRoaXMuY2hhdENsaWVudFNlcnZpY2U/LmNoYXRDbGllbnQ/LmxvZ2dlcj8uKFxuICAgICAgJ2luZm8nLFxuICAgICAgYFtBdXRvY29tcGxldGUgdGV4dGFyZWFdIFRleHRhcmVhIGhlaWdodCBzZXQgZnJvbSAke3RoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0fSB0byAke3RoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0fXB4YFxuICAgICk7XG4gICAgdGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICB0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3RoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0fXB4YDtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNsaXRlcmF0ZShzOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy50cmFuc2xpdGVyYXRpb25TZXJ2aWNlKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xpdGVyYXRpb25TZXJ2aWNlLnRyYW5zbGl0ZXJhdGUocyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlTWVudGlvbk9wdGlvbnMoc2VhcmNoVGVybT86IHN0cmluZykge1xuICAgIGlmICghdGhpcy5hcmVNZW50aW9uc0VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2VhcmNoVGVybSA9IHNlYXJjaFRlcm0/LnJlcGxhY2UodGhpcy5tZW50aW9uVHJpZ2dlckNoYXIsICcnKTtcbiAgICBjb25zdCByZXF1ZXN0ID1cbiAgICAgIHRoaXMubWVudGlvblNjb3BlID09PSAnYXBwbGljYXRpb24nXG4gICAgICAgID8gKHM6IHN0cmluZykgPT4gdGhpcy5jaGF0Q2xpZW50U2VydmljZS5hdXRvY29tcGxldGVVc2VycyhzKVxuICAgICAgICA6IChzOiBzdHJpbmcpID0+IHRoaXMuY2hhbm5lbFNlcnZpY2UuYXV0b2NvbXBsZXRlTWVtYmVycyhzKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXF1ZXN0KHNlYXJjaFRlcm0gfHwgJycpO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5maWx0ZXIoXG4gICAgICBzZWFyY2hUZXJtIHx8ICcnLFxuICAgICAgcmVzdWx0Lm1hcCgoaSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyID0gKGkudXNlciA/IGkudXNlciA6IGkpIGFzIFVzZXJSZXNwb25zZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5pLFxuICAgICAgICAgIGF1dG9jb21wbGV0ZUxhYmVsOiB1c2VyLm5hbWUgfHwgdXNlci5pZCxcbiAgICAgICAgICB0eXBlOiAnbWVudGlvbicsXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy51c2VyTWVudGlvbkNvbmZpZy5pdGVtcyA9IGl0ZW1zO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnLm1lbnRpb25zID0gW1xuICAgICAgdGhpcy51c2VyTWVudGlvbkNvbmZpZyxcbiAgICAgIHRoaXMuc2xhc2hDb21tYW5kQ29uZmlnLFxuICAgIF07XG4gICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcgPSB7IC4uLnRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnIH07XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1lbnRpb25lZFVzZXJzRnJvbVRleHQoKSB7XG4gICAgY29uc3QgdXBkYXRlZE1lbnRpb25lZFVzZXJzOiBVc2VyUmVzcG9uc2VbXSA9IFtdO1xuICAgIHRoaXMubWVudGlvbmVkVXNlcnMuZm9yRWFjaCgodSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdS5uYW1lIHx8IHUuaWQ7XG4gICAgICBpZiAodGhpcy52YWx1ZS5pbmNsdWRlcyhgJHt0aGlzLm1lbnRpb25UcmlnZ2VyQ2hhcn0ke2tleX1gKSkge1xuICAgICAgICB1cGRhdGVkTWVudGlvbmVkVXNlcnMucHVzaCh1KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodXBkYXRlZE1lbnRpb25lZFVzZXJzLmxlbmd0aCAhPT0gdGhpcy5tZW50aW9uZWRVc2Vycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudXNlck1lbnRpb25zLm5leHQoWy4uLnVwZGF0ZWRNZW50aW9uZWRVc2Vyc10pO1xuICAgICAgdGhpcy5tZW50aW9uZWRVc2VycyA9IHVwZGF0ZWRNZW50aW9uZWRVc2VycztcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZXh0YXJlYVxuICAjaW5wdXRcbiAgZGF0YS10ZXN0aWQ9XCJ0ZXh0YXJlYVwiXG4gIGNsYXNzPVwicnRhX190ZXh0YXJlYSBzdHItY2hhdF9fdGV4dGFyZWFfX3RleHRhcmVhIHN0ci1jaGF0X19hbmd1bGFyLXRleHRhcmVhIHN0ci1jaGF0X19tZXNzYWdlLXRleHRhcmVhXCJcbiAgcm93cz1cIjFcIlxuICBbdmFsdWVdPVwidmFsdWUgfHwgJydcIlxuICBbYXV0b2ZvY3VzXT1cImF1dG9Gb2N1c1wiXG4gIHBsYWNlaG9sZGVyPVwie3sgcGxhY2Vob2xkZXIgfCB0cmFuc2xhdGUgfX1cIlxuICBbbWVudGlvbkNvbmZpZ109XCJhdXRvY29tcGxldGVDb25maWdcIlxuICBbbWVudGlvbkxpc3RUZW1wbGF0ZV09XCJhdXRvY29tcGxldGVJdGVtXCJcbiAgKGlucHV0KT1cImlucHV0Q2hhbmdlZCgpXCJcbiAgKGtleWRvd24uZW50ZXIpPVwiZW50ZXJIaXQoJGV2ZW50KVwiXG4gIChzZWFyY2hUZXJtKT1cImF1dGNvbXBsZXRlU2VhcmNoVGVybUNoYW5nZWQoJGV2ZW50KVwiXG4gIChibHVyKT1cImlucHV0TGVmdCgpXCJcbiAgKHBhc3RlKT1cInBhc3RlRnJvbUNsaXBib2FyZC5lbWl0KCRldmVudClcIlxuPjwvdGV4dGFyZWE+XG48bmctdGVtcGxhdGUgI2F1dG9jb21wbGV0ZUl0ZW0gbGV0LWl0ZW09XCJpdGVtXCI+XG4gIDxkaXYgY2xhc3M9XCJydGEgcnRhX19pdGVtIHN0ci1jaGF0X19lbW9qaXNlYXJjaF9faXRlbVwiIFtuZ1N3aXRjaF09XCJpdGVtLnR5cGVcIj5cbiAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbWVudGlvbidcIiBjbGFzcz1cInJ0YV9fZW50aXR5XCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgbWVudGlvbkF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZSB8fCBkZWZhdWx0TWVudGlvblRlbXBsYXRlO1xuICAgICAgICAgIGNvbnRleHQ6IHsgaXRlbTogaXRlbSB9XG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2NvbW1hbmQnXCIgY2xhc3M9XCJydGFfX2VudGl0eVwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIGNvbW1hbmRBdXRvY29tcGxldGVJdGVtVGVtcGxhdGUgfHwgZGVmYXVsdENvbW1hbmRUZW1wbGF0ZTtcbiAgICAgICAgICBjb250ZXh0OiB7IGl0ZW06IGl0ZW0gfVxuICAgICAgICBcIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbW1hbmRUZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19zbGFzaC1jb21tYW5kXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fc2xhc2gtY29tbWFuZC1oZWFkZXJcIj5cbiAgICAgIDxzdHJvbmdcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fc2xhc2gtY29tbWFuZC1uYW1lXCJcbiAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJjb21tYW5kLW5hbWVcIlxuICAgICAgICA+e3sgaXRlbS5uYW1lIH19PC9zdHJvbmdcbiAgICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPVwic3RyLWNoYXRfX3NsYXNoLWNvbW1hbmQtYXJnc1wiXG4gICAgICAgID4ve3sgaXRlbS5uYW1lIH19IHt7IGl0ZW0uYXJncyB9fTwvc3BhblxuICAgICAgPlxuICAgIDwvc3Bhbj5cbiAgICA8YnIgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRNZW50aW9uVGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCI+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fdXNlci1pdGVtXCI+XG4gICAgPHN0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXJcbiAgICAgIGRhdGEtdGVzdGNsYXNzPVwiYXZhdGFyXCJcbiAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2F2YXRhciBzdHItY2hhdF9fYXZhdGFyLS1jaXJjbGVcIlxuICAgICAgdHlwZT1cInVzZXJcIlxuICAgICAgbG9jYXRpb249XCJhdXRvY29tcGxldGUtaXRlbVwiXG4gICAgICBbaW1hZ2VVcmxdPVwiaXRlbS5pbWFnZSB8fCBpdGVtLnVzZXI/LmltYWdlXCJcbiAgICAgIFtuYW1lXT1cIml0ZW0uYXV0b2NvbXBsZXRlTGFiZWxcIlxuICAgICAgW3VzZXJdPVwiaXRlbS51c2VyIHx8IGl0ZW1cIlxuICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gICAgPHNwYW4gZGF0YS10ZXN0Y2xhc3M9XCJ1c2VybmFtZVwiIGNsYXNzPVwic3RyLWNoYXRfX3VzZXItaXRlbS0tbmFtZVwiPnt7XG4gICAgICBpdGVtLmF1dG9jb21wbGV0ZUxhYmVsXG4gICAgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -40,4 +40,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
40
40
|
providedIn: 'root',
|
|
41
41
|
}]
|
|
42
42
|
}], ctorParameters: function () { return []; } });
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1pbnB1dC1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWlucHV0L21lc3NhZ2UtaW5wdXQtY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHM0M7O0dBRUc7QUFJSCxNQUFNLE9BQU8seUJBQXlCO0lBeUNwQztRQXhDQTs7V0FFRztRQUNILHdCQUFtQixHQUF3QixJQUFJLENBQUM7UUFDaEQ7O1dBRUc7UUFDSCx1QkFBa0IsR0FBd0IsSUFBSSxDQUFDO1FBQy9DOztXQUVHO1FBQ0gsZ0NBQTJCLEdBQXdCLElBQUksQ0FBQztRQUN4RDs7V0FFRztRQUNILGlCQUFZLEdBQTBDLFNBQVMsQ0FBQztRQUNoRTs7V0FFRztRQUNILGNBQVMsR0FBeUIsU0FBUyxDQUFDO1FBQzVDOzs7V0FHRztRQUNILGtDQUE2QixHQUFHLElBQUksQ0FBQztJQWdCdEIsQ0FBQzs7c0hBekNMLHlCQUF5QjswSEFBekIseUJBQXlCLGNBRnhCLE1BQU07MkZBRVAseUJBQXlCO2tCQUhyQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lc3NhZ2VJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vbWVzc2FnZS1pbnB1dC5jb21wb25lbnQnO1xuXG4vKipcbiAqIFRoZSBgTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZWAgaXMgdXNlZCB0byBrZWVwIGEgY29uc2lzdGVudCBjb25maWd1cmF0aW9uIGFtb25nIHRoZSBkaWZmZXJlbnQgW2BNZXNzYWdlSW5wdXRgXSguLi9jb21wb25lbnRzL01lc3NhZ2VJbnB1dENvbXBvbmVudC5tZHgpIGNvbXBvbmVudHMgaWYgeW91ciBVSSBoYXMgbW9yZSB0aGFuIG9uZSBpbnB1dCBjb21wb25lbnQuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIElmIGZpbGUgdXBsb2FkIGlzIGVuYWJsZWQsIHRoZSB1c2VyIGNhbiBvcGVuIGEgZmlsZSBzZWxlY3RvciBmcm9tIHRoZSBpbnB1dC4gUGxlYXNlIG5vdGUgdGhhdCB0aGUgdXNlciBhbHNvIG5lZWRzIHRvIGhhdmUgdGhlIG5lY2Vzc2FyeSBbY2hhbm5lbCBjYXBhYmlsaXR5XShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9jaGFubmVsX2NhcGFiaWxpdGllcy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkuXG4gICAqL1xuICBpc0ZpbGVVcGxvYWRFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdHJ1ZTtcbiAgLyoqXG4gICAqIElmIHRydWUsIHVzZXJzIGNhbiBtZW50aW9uIG90aGVyIHVzZXJzIGluIG1lc3NhZ2VzLiBZb3UgYWxzbyBbbmVlZCB0byB1c2UgdGhlIGBBdXRvY29tcGxldGVUZXh0YXJlYWBdKC4uL2NvbmNlcHRzL29wdC1pbi1hcmNoaXRlY3R1cmUubWR4KSBmb3IgdGhpcyBmZWF0dXJlIHRvIHdvcmsuXG4gICAqL1xuICBhcmVNZW50aW9uc0VuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB0cnVlO1xuICAvKipcbiAgICogSWYgYGZhbHNlYCwgdXNlcnMgY2FuIG9ubHkgdXBsb2FkIG9uZSBhdHRhY2htZW50IHBlciBtZXNzYWdlXG4gICAqL1xuICBpc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB0cnVlO1xuICAvKipcbiAgICogVGhlIHNjb3BlIGZvciB1c2VyIG1lbnRpb25zLCBlaXRoZXIgbWVtYmVycyBvZiB0aGUgY3VycmVudCBjaGFubmVsIG9mIG1lbWJlcnMgb2YgdGhlIGFwcGxpY2F0aW9uXG4gICAqL1xuICBtZW50aW9uU2NvcGU6ICdjaGFubmVsJyB8ICdhcHBsaWNhdGlvbicgfCB1bmRlZmluZWQgPSAnY2hhbm5lbCc7XG4gIC8qKlxuICAgKiBJbiBgZGVza3RvcGAgbW9kZSB0aGUgYEVudGVyYCBrZXkgd2lsbCB0cmlnZ2VyIG1lc3NhZ2Ugc2VuZGluZywgaW4gYG1vYmlsZWAgbW9kZSB0aGUgYEVudGVyYCBrZXkgd2lsbCBpbnNlcnQgYSBuZXcgbGluZSB0byB0aGUgbWVzc2FnZSBpbnB1dC5cbiAgICovXG4gIGlucHV0TW9kZTogJ2Rlc2t0b3AnIHwgJ21vYmlsZScgPSAnZGVza3RvcCc7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAgdGhlIHJlY29yZGluZyB3aWxsIGJlIHNlbnQgYXMgYSBtZXNzYWdlIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSByZWNvcmRpbmcgaXMgY29tcGxldGVkLlxuICAgKiBJZiBgZmFsc2VgLCB0aGUgcmVjb3JkaW5nIHdpbGwgYWRkZWQgdG8gdGhlIGF0dGFjaG1lbnQgcHJldmlldywgYW5kIHVzZXJzIGNhbiBjb250aW51ZSBjb21wb3NpbmcgdGhlIG1lc3NhZ2UuXG4gICAqL1xuICBzZW5kVm9pY2VSZWNvcmRpbmdJbW1lZGlhdGVseSA9IHRydWU7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgbWVzc2FnZSBpbnB1dCdzIGRlZmF1bHQgZXZlbnQgaGFuZGxlciBmb3IgW3Bhc3RlIGV2ZW50c10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvcGFzdGVfZXZlbnQpXG4gICAqXG4gICAqIFRoZSBldmVudCBoYW5kbGVyIHdpbGwgcmVjZWl2ZSB0aGUgZXZlbnQgb2JqZWN0LCBhbmQgdGhlIFttZXNzYWdlIGlucHV0IGNvbXBvbmVudF0oLi4vLi4vY29tcG9uZW50cy9NZXNzYWdlSW5wdXRDb21wb25lbnQpLlxuICAgKlxuICAgKiBZb3UgY2FuIHVzZSB0aGUgcHVibGljIEFQSSBvZiB0aGUgbWVzc2FnZSBpbnB1dCBjb21wb25lbnQgdG8gdXBkYXRlIHRoZSBjb21wb3Nlci4gVHlwaWNhbGx5IHlvdSB3YW50IHRvIHVwZGF0ZSB0aGUgbWVzc2FnZSB0ZXh0IGFuZC9vciBhdHRhY2htZW50cywgdGhpcyBpcyBob3cgeW91IGNhbiBkbyB0aGVzZTpcbiAgICogLSBDaGFuZ2UgbWVzc2FnZSB0ZXh0OiBgaW5wdXRDb21wb25lbnQudGV4dGFyZWFWYWx1ZSA9ICc8bmV3IHZhbHVlPidgXG4gICAqIC0gVXBsb2FkIGZpbGUgb3IgaW1hZ2UgYXR0YWNobWVudHM6IGBpbnB1dENvbXBvbmVudC5hdHRhY2htZW50U2VydmljZS5maWxlc1NlbGVjdGVkKDxmaWxlcz4pYFxuICAgKiAtIFVwbG9hZCBjdXN0b20gYXR0YWNobWVudHM6IGBpbnB1dENvbXBvbmVudC5hdHRhY2htZW50U2VydmljZS5jdXN0b21BdHRhY2htZW50cyQubmV4dCg8Y3VzdG9tIGF0dGFjaG1lbnRzPilgXG4gICAqL1xuICBjdXN0b21QYXN0ZUV2ZW50SGFuZGxlcj86IChcbiAgICBldmVudDogQ2xpcGJvYXJkRXZlbnQsXG4gICAgaW5wdXRDb21wb25lbnQ6IE1lc3NhZ2VJbnB1dENvbXBvbmVudFxuICApID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxufVxuIl19
|