@alfresco/adf-content-services 7.0.0-alpha.2 → 7.0.0-alpha.2-10617629626
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/esm2020/lib/tag/tags-creator/tags-creator.component.mjs +11 -5
- package/esm2020/lib/testing/content.testing.module.mjs +10 -12
- package/fesm2015/adf-content-services.mjs +19 -13
- package/fesm2015/adf-content-services.mjs.map +1 -1
- package/fesm2020/adf-content-services.mjs +19 -13
- package/fesm2020/adf-content-services.mjs.map +1 -1
- package/lib/tag/tags-creator/tags-creator.component.scss +4 -0
- package/lib/testing/content.testing.module.d.ts +3 -4
- package/package.json +3 -3
|
@@ -114,7 +114,13 @@ export class TagsCreatorComponent {
|
|
|
114
114
|
}
|
|
115
115
|
ngOnInit() {
|
|
116
116
|
this.tagNameControl.valueChanges
|
|
117
|
-
.pipe(map((name) => name.trim()), distinctUntilChanged(
|
|
117
|
+
.pipe(map((name) => name.trim()), distinctUntilChanged((previous, current) => {
|
|
118
|
+
const valueNotChanged = previous === current;
|
|
119
|
+
if (valueNotChanged) {
|
|
120
|
+
this.exactTagSet$.next();
|
|
121
|
+
}
|
|
122
|
+
return valueNotChanged;
|
|
123
|
+
}), tap((name) => {
|
|
118
124
|
this._typing = true;
|
|
119
125
|
if (name) {
|
|
120
126
|
this._spinnerVisible = true;
|
|
@@ -266,7 +272,7 @@ export class TagsCreatorComponent {
|
|
|
266
272
|
return tagNameControl.value.length && !tagNameControl.value.trim() ? { emptyTag: true } : null;
|
|
267
273
|
}
|
|
268
274
|
validateSpecialCharacters(tagNameControl) {
|
|
269
|
-
const specialSymbolsRegex = /[{}()^':"
|
|
275
|
+
const specialSymbolsRegex = /[{}()^':"\\|<>/?.*]/;
|
|
270
276
|
return tagNameControl.value.length && specialSymbolsRegex.test(tagNameControl.value) ? { specialCharacters: true } : null;
|
|
271
277
|
}
|
|
272
278
|
setTagNameControlErrorMessageKey() {
|
|
@@ -311,7 +317,7 @@ export class TagsCreatorComponent {
|
|
|
311
317
|
}
|
|
312
318
|
}
|
|
313
319
|
TagsCreatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TagsCreatorComponent, deps: [{ token: i1.TagService }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
314
|
-
TagsCreatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TagsCreatorComponent, isStandalone: true, selector: "adf-tags-creator", inputs: { mode: "mode", disabledTagsRemoving: "disabledTagsRemoving", tags: "tags", tagNameControlVisible: "tagNameControlVisible" }, outputs: { existingTagsPanelVisibilityChange: "existingTagsPanelVisibilityChange", tagsChange: "tagsChange" }, host: { properties: { "class.adf-creator-with-existing-tags-panel": "this.hostClass" } }, viewQueries: [{ propertyName: "tagsListElement", first: true, predicate: ["tagsList"], descendants: true }, { propertyName: "tagNameInputElement", first: true, predicate: ["tagNameInput"], descendants: true }], ngImport: i0, template: "<div class=\"adf-tags-creation\">\n <div *ngIf=\"tagNameControlVisible\" class=\"adf-tag-name-field\">\n <input\n #tagNameInput\n class=\"adf-tag-search-field\"\n matInput\n autocomplete=\"off\"\n [formControl]=\"tagNameControl\"\n (keyup.enter)=\"addTag()\"\n adf-auto-focus\n placeholder=\"{{ 'TAG.TAGS_CREATOR.TAG_SEARCH_PLACEHOLDER' | translate }}\"\n />\n <mat-error *ngIf=\"tagNameControl.invalid && tagNameControl.touched\">{{ tagNameErrorMessageKey | translate }} </mat-error>\n </div>\n <p class=\"adf-no-tags-message\" *ngIf=\"showEmptyTagMessage\">\n {{ 'TAG.TAGS_CREATOR.NO_TAGS_CREATED' | translate }}\n </p>\n <div class=\"adf-tags-list\" [class.adf-tags-list-fixed]=\"!tagNameControlVisible\" #tagsList>\n <mat-chip-listbox *ngIf=\"tags.length > 0\">\n <mat-chip
|
|
320
|
+
TagsCreatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TagsCreatorComponent, isStandalone: true, selector: "adf-tags-creator", inputs: { mode: "mode", disabledTagsRemoving: "disabledTagsRemoving", tags: "tags", tagNameControlVisible: "tagNameControlVisible" }, outputs: { existingTagsPanelVisibilityChange: "existingTagsPanelVisibilityChange", tagsChange: "tagsChange" }, host: { properties: { "class.adf-creator-with-existing-tags-panel": "this.hostClass" } }, viewQueries: [{ propertyName: "tagsListElement", first: true, predicate: ["tagsList"], descendants: true }, { propertyName: "tagNameInputElement", first: true, predicate: ["tagNameInput"], descendants: true }], ngImport: i0, template: "<div class=\"adf-tags-creation\">\n <div *ngIf=\"tagNameControlVisible\" class=\"adf-tag-name-field\">\n <input\n #tagNameInput\n class=\"adf-tag-search-field\"\n matInput\n autocomplete=\"off\"\n [formControl]=\"tagNameControl\"\n (keyup.enter)=\"addTag()\"\n adf-auto-focus\n placeholder=\"{{ 'TAG.TAGS_CREATOR.TAG_SEARCH_PLACEHOLDER' | translate }}\"\n />\n <mat-error *ngIf=\"tagNameControl.invalid && tagNameControl.touched\">{{ tagNameErrorMessageKey | translate }} </mat-error>\n </div>\n <p class=\"adf-no-tags-message\" *ngIf=\"showEmptyTagMessage\">\n {{ 'TAG.TAGS_CREATOR.NO_TAGS_CREATED' | translate }}\n </p>\n <div class=\"adf-tags-list\" [class.adf-tags-list-fixed]=\"!tagNameControlVisible\" #tagsList>\n <mat-chip-listbox *ngIf=\"tags.length > 0\">\n <mat-chip *ngFor=\"let tag of tags\" [disableRipple]=\"true\" [title]=\"tag\" class=\"adf-tags-chip\">\n {{ tag }}\n <button\n data-automation-id=\"remove-tag-button\"\n mat-icon-button\n (click)=\"removeTag(tag)\"\n [attr.title]=\"'TAG.TAGS_CREATOR.TOOLTIPS.DELETE_TAG' | translate\"\n [disabled]=\"disabledTagsRemoving\"\n matChipRemove>\n <mat-icon>close</mat-icon>\n </button>\n </mat-chip>\n </mat-chip-listbox>\n </div>\n</div>\n<div class=\"adf-existing-tags-panel\" *ngIf=\"existingTagsPanelVisible\">\n <span\n *ngIf=\"!spinnerVisible || existingTags\"\n class=\"adf-create-tag-label\"\n (click)=\"addTag()\"\n role=\"button\"\n tabindex=\"0\"\n (keyup.enter)=\"addTag()\"\n [hidden]=\"tagNameControl.invalid || typing\"\n >\n {{ 'TAG.TAGS_CREATOR.CREATE_TAG' | translate : { tag: tagNameControl.value } }}\n </span>\n <p *ngIf=\"!spinnerVisible && existingTags\" class=\"adf-existing-tags-label\">\n {{ (isOnlyCreateMode() ? 'TAG.TAGS_CREATOR.EXISTING_TAGS' : 'TAG.TAGS_CREATOR.EXISTING_TAGS_SELECTION') | translate }}\n </p>\n <div class=\"adf-tags-list\">\n <mat-list *ngIf=\"!spinnerVisible && existingTags\" [disabled]=\"isOnlyCreateMode()\">\n <mat-list-item *ngFor=\"let tagRow of existingTags\" class=\"adf-tag\" (click)=\"addExistingTagToTagsToAssign(tagRow)\">\n {{ tagRow.entry.tag }}\n </mat-list-item>\n <p *ngIf=\"!existingTags?.length\">{{ 'TAG.TAGS_CREATOR.NO_EXISTING_TAGS' | translate }}</p>\n </mat-list>\n <mat-spinner\n *ngIf=\"spinnerVisible\"\n class=\"adf-tags-creator-spinner\"\n [diameter]=\"50\"\n [attr.aria-label]=\"'TAG.TAGS_CREATOR.TAGS_LOADING' | translate\"\n >\n </mat-spinner>\n </div>\n</div>\n", styles: ["adf-tags-creator{display:block}adf-tags-creator .adf-no-tags-message{margin-top:28.5px;margin-bottom:0;height:30px}adf-tags-creator .adf-tag-name-field,adf-tags-creator .adf-tag-name-field[hidden]{display:flex;flex-direction:column;margin-right:12px}adf-tags-creator .adf-tag-search-field{background:var(--adf-metadata-buttons-background-color);border-radius:12px;padding:5px 6px;border:none;outline:none;font:inherit;color:currentcolor;margin:0;vertical-align:bottom;text-align:inherit;box-sizing:content-box}adf-tags-creator .adf-create-tag-label{color:var(--theme-primary-color);cursor:pointer;margin-top:-1px;padding-left:12px;overflow-wrap:anywhere;display:inline-block;padding-right:12px;overflow:auto}adf-tags-creator .adf-tags-list{margin-top:8px}adf-tags-creator .adf-tags-chip{height:auto}adf-tags-creator .adf-existing-tags-panel{border-top-left-radius:6px;border-top-right-radius:6px;width:100%}adf-tags-creator .adf-existing-tags-panel .adf-existing-tags-label{font-size:10px;color:var(--theme-secondary-text-color);padding-left:12px;margin-bottom:2px}adf-tags-creator .adf-existing-tags-panel .adf-tags-list{padding-left:12px;margin-top:-2px;padding-right:0;display:flex;flex-direction:column}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag{margin:0;padding:4px;font-size:14px;height:auto;width:unset;background-color:inherit;color:inherit}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag:not(.mdc-list-item--disabled):hover{cursor:pointer;background:var(--adf-theme-mat-grey-color-a200)}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag span{padding:0}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tags-creator-spinner{margin:auto;overflow:unset;min-height:62px}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .mdc-list-item--disabled .mdc-list-item__primary-text{opacity:1}adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden}adf-tags-creator [hidden]{visibility:hidden;display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: AutoFocusDirective, selector: "[adf-auto-focus]" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i8.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "role", "id", "aria-label", "aria-description", "value", "removable", "highlighted"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i8.MatChipListbox, selector: "mat-chip-listbox", inputs: ["tabIndex", "multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "directive", type: i8.MatChipRemove, selector: "[matChipRemove]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i11.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i11.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i12.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
315
321
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TagsCreatorComponent, decorators: [{
|
|
316
322
|
type: Component,
|
|
317
323
|
args: [{ selector: 'adf-tags-creator', standalone: true, imports: [
|
|
@@ -325,7 +331,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
325
331
|
MatIconModule,
|
|
326
332
|
MatListModule,
|
|
327
333
|
MatProgressSpinnerModule
|
|
328
|
-
], encapsulation: ViewEncapsulation.None, template: "<div class=\"adf-tags-creation\">\n <div *ngIf=\"tagNameControlVisible\" class=\"adf-tag-name-field\">\n <input\n #tagNameInput\n class=\"adf-tag-search-field\"\n matInput\n autocomplete=\"off\"\n [formControl]=\"tagNameControl\"\n (keyup.enter)=\"addTag()\"\n adf-auto-focus\n placeholder=\"{{ 'TAG.TAGS_CREATOR.TAG_SEARCH_PLACEHOLDER' | translate }}\"\n />\n <mat-error *ngIf=\"tagNameControl.invalid && tagNameControl.touched\">{{ tagNameErrorMessageKey | translate }} </mat-error>\n </div>\n <p class=\"adf-no-tags-message\" *ngIf=\"showEmptyTagMessage\">\n {{ 'TAG.TAGS_CREATOR.NO_TAGS_CREATED' | translate }}\n </p>\n <div class=\"adf-tags-list\" [class.adf-tags-list-fixed]=\"!tagNameControlVisible\" #tagsList>\n <mat-chip-listbox *ngIf=\"tags.length > 0\">\n <mat-chip
|
|
334
|
+
], encapsulation: ViewEncapsulation.None, template: "<div class=\"adf-tags-creation\">\n <div *ngIf=\"tagNameControlVisible\" class=\"adf-tag-name-field\">\n <input\n #tagNameInput\n class=\"adf-tag-search-field\"\n matInput\n autocomplete=\"off\"\n [formControl]=\"tagNameControl\"\n (keyup.enter)=\"addTag()\"\n adf-auto-focus\n placeholder=\"{{ 'TAG.TAGS_CREATOR.TAG_SEARCH_PLACEHOLDER' | translate }}\"\n />\n <mat-error *ngIf=\"tagNameControl.invalid && tagNameControl.touched\">{{ tagNameErrorMessageKey | translate }} </mat-error>\n </div>\n <p class=\"adf-no-tags-message\" *ngIf=\"showEmptyTagMessage\">\n {{ 'TAG.TAGS_CREATOR.NO_TAGS_CREATED' | translate }}\n </p>\n <div class=\"adf-tags-list\" [class.adf-tags-list-fixed]=\"!tagNameControlVisible\" #tagsList>\n <mat-chip-listbox *ngIf=\"tags.length > 0\">\n <mat-chip *ngFor=\"let tag of tags\" [disableRipple]=\"true\" [title]=\"tag\" class=\"adf-tags-chip\">\n {{ tag }}\n <button\n data-automation-id=\"remove-tag-button\"\n mat-icon-button\n (click)=\"removeTag(tag)\"\n [attr.title]=\"'TAG.TAGS_CREATOR.TOOLTIPS.DELETE_TAG' | translate\"\n [disabled]=\"disabledTagsRemoving\"\n matChipRemove>\n <mat-icon>close</mat-icon>\n </button>\n </mat-chip>\n </mat-chip-listbox>\n </div>\n</div>\n<div class=\"adf-existing-tags-panel\" *ngIf=\"existingTagsPanelVisible\">\n <span\n *ngIf=\"!spinnerVisible || existingTags\"\n class=\"adf-create-tag-label\"\n (click)=\"addTag()\"\n role=\"button\"\n tabindex=\"0\"\n (keyup.enter)=\"addTag()\"\n [hidden]=\"tagNameControl.invalid || typing\"\n >\n {{ 'TAG.TAGS_CREATOR.CREATE_TAG' | translate : { tag: tagNameControl.value } }}\n </span>\n <p *ngIf=\"!spinnerVisible && existingTags\" class=\"adf-existing-tags-label\">\n {{ (isOnlyCreateMode() ? 'TAG.TAGS_CREATOR.EXISTING_TAGS' : 'TAG.TAGS_CREATOR.EXISTING_TAGS_SELECTION') | translate }}\n </p>\n <div class=\"adf-tags-list\">\n <mat-list *ngIf=\"!spinnerVisible && existingTags\" [disabled]=\"isOnlyCreateMode()\">\n <mat-list-item *ngFor=\"let tagRow of existingTags\" class=\"adf-tag\" (click)=\"addExistingTagToTagsToAssign(tagRow)\">\n {{ tagRow.entry.tag }}\n </mat-list-item>\n <p *ngIf=\"!existingTags?.length\">{{ 'TAG.TAGS_CREATOR.NO_EXISTING_TAGS' | translate }}</p>\n </mat-list>\n <mat-spinner\n *ngIf=\"spinnerVisible\"\n class=\"adf-tags-creator-spinner\"\n [diameter]=\"50\"\n [attr.aria-label]=\"'TAG.TAGS_CREATOR.TAGS_LOADING' | translate\"\n >\n </mat-spinner>\n </div>\n</div>\n", styles: ["adf-tags-creator{display:block}adf-tags-creator .adf-no-tags-message{margin-top:28.5px;margin-bottom:0;height:30px}adf-tags-creator .adf-tag-name-field,adf-tags-creator .adf-tag-name-field[hidden]{display:flex;flex-direction:column;margin-right:12px}adf-tags-creator .adf-tag-search-field{background:var(--adf-metadata-buttons-background-color);border-radius:12px;padding:5px 6px;border:none;outline:none;font:inherit;color:currentcolor;margin:0;vertical-align:bottom;text-align:inherit;box-sizing:content-box}adf-tags-creator .adf-create-tag-label{color:var(--theme-primary-color);cursor:pointer;margin-top:-1px;padding-left:12px;overflow-wrap:anywhere;display:inline-block;padding-right:12px;overflow:auto}adf-tags-creator .adf-tags-list{margin-top:8px}adf-tags-creator .adf-tags-chip{height:auto}adf-tags-creator .adf-existing-tags-panel{border-top-left-radius:6px;border-top-right-radius:6px;width:100%}adf-tags-creator .adf-existing-tags-panel .adf-existing-tags-label{font-size:10px;color:var(--theme-secondary-text-color);padding-left:12px;margin-bottom:2px}adf-tags-creator .adf-existing-tags-panel .adf-tags-list{padding-left:12px;margin-top:-2px;padding-right:0;display:flex;flex-direction:column}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag{margin:0;padding:4px;font-size:14px;height:auto;width:unset;background-color:inherit;color:inherit}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag:not(.mdc-list-item--disabled):hover{cursor:pointer;background:var(--adf-theme-mat-grey-color-a200)}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag span{padding:0}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tags-creator-spinner{margin:auto;overflow:unset;min-height:62px}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .mdc-list-item--disabled .mdc-list-item__primary-text{opacity:1}adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden}adf-tags-creator [hidden]{visibility:hidden;display:none}\n"] }]
|
|
329
335
|
}], ctorParameters: function () { return [{ type: i1.TagService }, { type: i2.NotificationService }]; }, propDecorators: { mode: [{
|
|
330
336
|
type: Input
|
|
331
337
|
}], disabledTagsRemoving: [{
|
|
@@ -348,4 +354,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
348
354
|
type: HostBinding,
|
|
349
355
|
args: ['class.adf-creator-with-existing-tags-panel']
|
|
350
356
|
}] } });
|
|
351
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1jcmVhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdGFnL3RhZ3MtY3JlYXRvci90YWdzLWNyZWF0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi90YWcvdGFncy1jcmVhdG9yL3RhZ3MtY3JlYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakosT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBYyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVU5RSxNQUFNLG9CQUFvQixHQUFHO0lBQ3pCLE9BQU8sRUFBRSxLQUFLO0lBQ2QsU0FBUyxFQUFFLEtBQUs7Q0FDbkIsQ0FBQztBQUVGOztHQUVHO0FBb0JILE1BQU0sT0FBTyxvQkFBb0I7SUFlN0I7Ozs7T0FJRztJQUNILElBQ0ksSUFBSSxDQUFDLElBQWM7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzdDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDekM7SUFDTCxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ0osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFDSSxxQkFBcUIsQ0FBQyxxQkFBOEI7UUFDcEQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixDQUFDO1FBQ3BELElBQUkscUJBQXFCLEVBQUU7WUFDdkIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQztZQUN0QyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLENBQUM7Z0JBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDbkIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQztpQkFDcEQ7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsSUFBSSxxQkFBcUI7UUFDckIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDdkMsQ0FBQztJQStDRCxZQUFvQixVQUFzQixFQUFVLG1CQUF3QztRQUF4RSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVUsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQW5HNUY7O1dBRUc7UUFFSCx5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFrRDdCOztXQUVHO1FBRUgsc0NBQWlDLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUNoRTs7V0FFRztRQUVILGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBRWpDLDhCQUF5QixHQUFHLElBQUksR0FBRyxDQUFxQztZQUM3RSxDQUFDLHVCQUF1QixFQUFFLGNBQWMsQ0FBQztZQUN6QyxDQUFDLG9CQUFvQixFQUFFLG1CQUFtQixDQUFDO1lBQzNDLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQztZQUN6QixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7WUFDeEIsQ0FBQyxtQkFBbUIsRUFBRSxvQkFBb0IsQ0FBQztTQUM5QyxDQUFDLENBQUM7UUFFYywwQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFFcEMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ25DLFVBQUssR0FBYSxFQUFFLENBQUM7UUFDckIsb0JBQWUsR0FBRyxJQUFJLFdBQVcsQ0FDckMsRUFBRSxFQUNGLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQUMsRUFDdkgsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDM0MsQ0FBQztRQUNNLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUcvQixlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNqQyw0QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFDN0Isb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQiw4QkFBeUIsR0FBRyxLQUFLLENBQUM7UUFDbEMsK0JBQTBCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQVNzQyxDQUFDO0lBRWhHLFFBQVE7UUFDSixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVk7YUFDM0IsSUFBSSxDQUNELEdBQUcsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQ2xDLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksSUFBSSxFQUFFO2dCQUNOLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO2FBQ3pDO1lBQ0QsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUM5QixDQUFDLENBQUMsRUFDRixRQUFRLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3ZELFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQzdCO2FBQ0EsU0FBUyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV6RSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDO1FBRTVILElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQ0ksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDZCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxtQkFBbUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDbEUsQ0FBQztJQUVELElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLHdCQUF3QjtRQUN4QixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSx3QkFBd0I7UUFDeEIsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU07UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFO1lBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25DO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLEdBQVc7UUFDakIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQywrQ0FBK0MsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDRCQUE0QixDQUFDLFdBQXFCO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZ0JBQWdCO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxNQUFNLENBQUM7SUFDaEQsQ0FBQztJQUVPLDJCQUEyQixDQUFDLElBQVk7UUFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFTyxRQUFRLENBQUMsSUFBWTtRQUN6QixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDNUQsUUFBUSxDQUFDO2dCQUNMLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hELGNBQWMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUM7YUFDL0csQ0FBQztpQkFDRyxJQUFJLENBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxFQUMxQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQ3pDO2lCQUNBLFNBQVMsQ0FDTixDQUFDLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBd0QsRUFBRSxFQUFFO2dCQUN0RixJQUFJLFdBQVcsRUFBRTtvQkFDYixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO29CQUNwQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQ3RELGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDcEQ7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztpQkFDaEM7Z0JBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLENBQUMsRUFDRCxHQUFHLEVBQUU7Z0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUNqQyxDQUFDLENBQ0osQ0FBQztTQUNUO2FBQU07WUFDSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzdCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1NBQ2hDO0lBQ0wsQ0FBQztJQUVPLGdDQUFnQyxDQUFDLGNBQXlCO1FBQzlELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFdkksSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDcEIsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN4RDtJQUNMLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxjQUFtQztRQUNoRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN6QixHQUFHLENBQW9DLEdBQUcsRUFBRSxDQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNySCxFQUNELEtBQUssRUFBRSxDQUNWLENBQUM7SUFDTixDQUFDO0lBRU8seUJBQXlCLENBQUMsY0FBbUM7UUFDakUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN0SCxDQUFDO0lBRU8sV0FBVyxDQUFDLFFBQWlCLEVBQUUsUUFBaUI7UUFDcEQsT0FBTyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdFLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxjQUFtQztRQUN4RCxPQUFPLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNuRyxDQUFDO0lBRU8seUJBQXlCLENBQUMsY0FBbUM7UUFDakUsTUFBTSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztRQUNoRCxPQUFPLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM5SCxDQUFDO0lBRU8sZ0NBQWdDO1FBQ3BDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU87WUFDdEQsQ0FBQyxDQUFDLDJCQUEyQixJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUN6RCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUErQixDQUMzRSxFQUFFO1lBQ0wsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNiLENBQUM7SUFFTyx3QkFBd0I7UUFDNUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1FBQ3ZJLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGtCQUFrQixDQUFJLElBQVMsRUFBRSxHQUFNO1FBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sK0NBQStDLENBQUMsR0FBVztRQUMvRCxNQUFNLDhCQUE4QixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2pILElBQUksOEJBQThCLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsQ0FBQztZQUMxRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDdkIsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7b0JBQ3pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUNsRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7aUJBQ3BEO2FBQ0o7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDM0I7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzVCO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQjtRQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVPLHVCQUF1QixDQUFDLElBQWdCO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFDLENBQUM7O2tIQXBXUSxvQkFBb0I7c0dBQXBCLG9CQUFvQiw4bUJDdEVqQyxzNkZBaUVBLG9zRURWUSxZQUFZLCtQQUNaLGNBQWMsdWNBQ2QsbUJBQW1CLDBrQkFDbkIsa0JBQWtCLDREQUNsQixlQUFlLDJGQUNmLGNBQWMsd2xCQUNkLGVBQWUsMkxBQ2YsYUFBYSxvTEFDYixhQUFhLHlSQUNiLHdCQUF3Qjs0RkFNbkIsb0JBQW9CO2tCQW5CaEMsU0FBUzsrQkFDSSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQO3dCQUNMLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixhQUFhO3dCQUNiLHdCQUF3QjtxQkFDM0IsaUJBR2MsaUJBQWlCLENBQUMsSUFBSTttSUFTckMsSUFBSTtzQkFESCxLQUFLO2dCQU9OLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFTRixJQUFJO3NCQURQLEtBQUs7Z0JBc0JGLHFCQUFxQjtzQkFEeEIsS0FBSztnQkEwQk4saUNBQWlDO3NCQURoQyxNQUFNO2dCQU1QLFVBQVU7c0JBRFQsTUFBTTtnQkFpQ0MsZUFBZTtzQkFEdEIsU0FBUzt1QkFBQyxVQUFVO2dCQUdiLG1CQUFtQjtzQkFEMUIsU0FBUzt1QkFBQyxjQUFjO2dCQXVDckIsU0FBUztzQkFEWixXQUFXO3VCQUFDLDRDQUE0QyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjQgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgVGFnRW50cnksIFRhZ1BhZ2luZyB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbmFsaXplLCBmaXJzdCwgbWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVNUFRZLCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgVGFnc0NyZWF0b3JNb2RlIH0gZnJvbSAnLi90YWdzLWNyZWF0b3ItbW9kZSc7XG5pbXBvcnQgeyBUYWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGFnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgQXV0b0ZvY3VzRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1hdENoaXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdExpc3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9saXN0JztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuXG5pbnRlcmZhY2UgVGFnTmFtZUNvbnRyb2xFcnJvcnMge1xuICAgIGR1cGxpY2F0ZWRFeGlzdGluZ1RhZz86IGJvb2xlYW47XG4gICAgZHVwbGljYXRlZEFkZGVkVGFnPzogYm9vbGVhbjtcbiAgICBlbXB0eVRhZz86IGJvb2xlYW47XG4gICAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICAgIHNwZWNpYWxDaGFyYWN0ZXJzPzogYm9vbGVhbjtcbn1cblxuY29uc3QgREVGQVVMVF9UQUdTX1NPUlRJTkcgPSB7XG4gICAgb3JkZXJCeTogJ3RhZycsXG4gICAgZGlyZWN0aW9uOiAnYXNjJ1xufTtcblxuLyoqXG4gKiBBbGxvd3MgdG8gY3JlYXRlIG11bHRpcGxlIHRhZ3MuIFRoYXQgY29tcG9uZW50IGNvbnRhaW5zIGlucHV0IGFuZCB0d28gbGlzdHMuIFRvcCBsaXN0IGlzIGFsbCBjcmVhdGVkIHRhZ3MsIGJvdHRvbSBsaXN0IGlzIHNlYXJjaGVkIHRhZ3MgYmFzZWQgb24gaW5wdXQncyB2YWx1ZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtdGFncy1jcmVhdG9yJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgQXV0b0ZvY3VzRGlyZWN0aXZlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdENoaXBzTW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIE1hdExpc3RNb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZVxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhZ3MtY3JlYXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFncy1jcmVhdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBUYWdzQ3JlYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBNb2RlIGZvciBjb21wb25lbnQuXG4gICAgICogSW4gQ3JlYXRlIG1vZGUgd2UgY2FuJ3Qgc2VsZWN0IGV4aXN0aW5nIHRhZ3MsIHdlIGNhbiBvbmx5IGNyZWF0ZSB0aGVtLlxuICAgICAqIEluIENyZWF0ZSBhbmQgQXNzaWduIG1vZGUgd2UgY2FuIGJvdGggLSBjcmVhdGUgdGFncyBhbmQgc2VsZWN0IGV4aXN0aW5nIHRhZ3MuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBtb2RlOiBUYWdzQ3JlYXRvck1vZGU7XG5cbiAgICAvKipcbiAgICAgKiBGYWxzZSBpZiB0YWdzIGNhbiBiZSByZW1vdmVkIGZyb20gdG9wIGxpc3QsIHRydWUgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWRUYWdzUmVtb3ZpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgdG9wIGxpc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFncyB0YWdzIHdoaWNoIHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgZGVmYXVsdCB0YWdzIGZvciB0b3AgbGlzdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0YWdzKHRhZ3M6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX3RhZ3MgPSBbLi4udGFnc107XG4gICAgICAgIHRoaXMuX2luaXRpYWxFeGlzdGluZ1RhZ3MgPSBudWxsO1xuICAgICAgICB0aGlzLl9leGlzdGluZ1RhZ3MgPSBudWxsO1xuICAgICAgICB0aGlzLmxvYWRUYWdzKHRoaXMudGFnTmFtZUNvbnRyb2wudmFsdWUpO1xuICAgICAgICB0aGlzLnRhZ05hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgaWYgKHRoaXMudGFnTmFtZUNvbnRyb2wuZXJyb3JzPy5yZXF1aXJlZCkge1xuICAgICAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB0YWdzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVjaWRlcyBpZiBpbnB1dCBmb3IgdGFncyBjcmVhdGlvbi9zZWFyY2hpbmcgc2hvdWxkIGJlIHZpc2libGUuIFdoZW4gaW5wdXQgaXMgaGlkZGVuIHRoZW4gcGFuZWwgb2YgZXhpc3RpbmcgdGFncyBpcyBoaWRkZW4gYXMgd2VsbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdOYW1lQ29udHJvbFZpc2libGUgdHJ1ZSBpZiBpbnB1dCBzaG91bGQgYmUgdmlzaWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRhZ05hbWVDb250cm9sVmlzaWJsZSh0YWdOYW1lQ29udHJvbFZpc2libGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdGFnTmFtZUNvbnRyb2xWaXNpYmxlID0gdGFnTmFtZUNvbnRyb2xWaXNpYmxlO1xuICAgICAgICBpZiAodGFnTmFtZUNvbnRyb2xWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLl9leGlzdGluZ1RhZ3NQYW5lbFZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWdOYW1lSW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50Py5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy50YWdzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ05hbWVJbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9leGlzdGluZ1RhZ3NQYW5lbFZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUYWdOYW1lSW5wdXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4aXN0aW5nVGFnc1BhbmVsVmlzaWJpbGl0eUNoYW5nZS5lbWl0KHRoaXMuZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlKTtcbiAgICB9XG5cbiAgICBnZXQgdGFnTmFtZUNvbnRyb2xWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFnTmFtZUNvbnRyb2xWaXNpYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBib3R0b20gbGlzdCBpcyBzaG93aW5nIG9yIGhpZGluZy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBleGlzdGluZ1RhZ3NQYW5lbFZpc2liaWxpdHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRhZ3MgaW4gdG9wIGxpc3QgYXJlIGNoYW5nZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgdGFnc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgICByZWFkb25seSBuYW1lRXJyb3JNZXNzYWdlc0J5RXJyb3JzID0gbmV3IE1hcDxrZXlvZiBUYWdOYW1lQ29udHJvbEVycm9ycywgc3RyaW5nPihbXG4gICAgICAgIFsnZHVwbGljYXRlZEV4aXN0aW5nVGFnJywgJ0VYSVNUSU5HX1RBRyddLFxuICAgICAgICBbJ2R1cGxpY2F0ZWRBZGRlZFRhZycsICdBTFJFQURZX0FEREVEX1RBRyddLFxuICAgICAgICBbJ2VtcHR5VGFnJywgJ0VNUFRZX1RBRyddLFxuICAgICAgICBbJ3JlcXVpcmVkJywgJ1JFUVVJUkVEJ10sXG4gICAgICAgIFsnc3BlY2lhbENoYXJhY3RlcnMnLCAnU1BFQ0lBTF9DSEFSQUNURVJTJ11cbiAgICBdKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhpc3RpbmdUYWdzTGlzdExpbWl0ID0gMTU7XG5cbiAgICBwcml2YXRlIGV4YWN0VGFnU2V0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBfdGFnczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF90YWdOYW1lQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KFxuICAgICAgICAnJyxcbiAgICAgICAgW3RoaXMudmFsaWRhdGVJZk5vdEFscmVhZHlBZGRlZC5iaW5kKHRoaXMpLCBWYWxpZGF0b3JzLnJlcXVpcmVkLCB0aGlzLnZhbGlkYXRlRW1wdHlUYWcsIHRoaXMudmFsaWRhdGVTcGVjaWFsQ2hhcmFjdGVyc10sXG4gICAgICAgIHRoaXMudmFsaWRhdGVJZk5vdEV4aXN0aW5nVGFnLmJpbmQodGhpcylcbiAgICApO1xuICAgIHByaXZhdGUgX3RhZ05hbWVDb250cm9sVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2V4aXN0aW5nVGFnczogVGFnRW50cnlbXTtcbiAgICBwcml2YXRlIF9pbml0aWFsRXhpc3RpbmdUYWdzOiBUYWdFbnRyeVtdO1xuICAgIHByaXZhdGUgb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBfdGFnTmFtZUVycm9yTWVzc2FnZUtleSA9ICcnO1xuICAgIHByaXZhdGUgX3NwaW5uZXJWaXNpYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfdHlwaW5nID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfdGFnc0xpc3RTY3JvbGxiYXJWaXNpYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBjYW5jZWxFeGlzdGluZ1RhZ3NMb2FkaW5nJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBleGlzdGluZ0V4YWN0VGFnOiBUYWdFbnRyeTtcbiAgICBwcml2YXRlIF9leGlzdGluZ1RhZ3NQYW5lbFZpc2libGU6IGJvb2xlYW47XG5cbiAgICBAVmlld0NoaWxkKCd0YWdzTGlzdCcpXG4gICAgcHJpdmF0ZSB0YWdzTGlzdEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgndGFnTmFtZUlucHV0JylcbiAgICBwcml2YXRlIHRhZ05hbWVJbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhZ1NlcnZpY2U6IFRhZ1NlcnZpY2UsIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSkge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhZ05hbWVDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChuYW1lOiBzdHJpbmcpID0+IG5hbWUudHJpbSgpKSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIHRhcCgobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3R5cGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zcGlubmVyVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9leGlzdGluZ1RhZ3NQYW5lbFZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmlsaXR5Q2hhbmdlLmVtaXQodGhpcy5leGlzdGluZ1RhZ3NQYW5lbFZpc2libGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbEV4aXN0aW5nVGFnc0xvYWRpbmckLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbEV4aXN0aW5nVGFncyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V4aXN0aW5nVGFncyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGVib3VuY2UoKG5hbWU6IHN0cmluZykgPT4gKG5hbWUgPyB0aW1lcigzMDApIDogRU1QVFkpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobmFtZTogc3RyaW5nKSA9PiB0aGlzLm9uVGFnTmFtZUNvbnRyb2xWYWx1ZUNoYW5nZShuYW1lKSk7XG5cbiAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNldFRhZ05hbWVDb250cm9sRXJyb3JNZXNzYWdlS2V5KCkpO1xuXG4gICAgICAgIHRoaXMuc2V0VGFnTmFtZUNvbnRyb2xFcnJvck1lc3NhZ2VLZXkoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuY2FuY2VsRXhpc3RpbmdUYWdzTG9hZGluZyQubmV4dCgpO1xuICAgICAgICB0aGlzLmNhbmNlbEV4aXN0aW5nVGFnc0xvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hZGYtY3JlYXRvci13aXRoLWV4aXN0aW5nLXRhZ3MtcGFuZWwnKVxuICAgIGdldCBob3N0Q2xhc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4aXN0aW5nVGFnc1BhbmVsVmlzaWJsZTtcbiAgICB9XG5cbiAgICBnZXQgdGFnTmFtZUNvbnRyb2woKTogRm9ybUNvbnRyb2w8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWdOYW1lQ29udHJvbDtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRhZ3MgZW1wdHkgYW5kIG5vbiBlZGl0YWJsZSBzdGF0ZSwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBnZXQgc2hvd0VtcHR5VGFnTWVzc2FnZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFncz8ubGVuZ3RoID09PSAwICYmICF0aGlzLnRhZ05hbWVDb250cm9sVmlzaWJsZTtcbiAgICB9XG5cbiAgICBnZXQgZXhpc3RpbmdUYWdzKCk6IFRhZ0VudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhpc3RpbmdUYWdzO1xuICAgIH1cblxuICAgIGdldCB0YWdOYW1lRXJyb3JNZXNzYWdlS2V5KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWdOYW1lRXJyb3JNZXNzYWdlS2V5O1xuICAgIH1cblxuICAgIGdldCBzcGlubmVyVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwaW5uZXJWaXNpYmxlO1xuICAgIH1cblxuICAgIGdldCB0eXBpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBpbmc7XG4gICAgfVxuXG4gICAgZ2V0IHRhZ3NMaXN0U2Nyb2xsYmFyVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhZ3NMaXN0U2Nyb2xsYmFyVmlzaWJsZTtcbiAgICB9XG5cbiAgICBnZXQgZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB0YWdzIHRvIHRvcCBsaXN0IHVzaW5nIHZhbHVlIHdoaWNoIGlzIHNldCBpbiBpbnB1dC4gQWRkaW5nIHRhZyBpcyBub3QgYWxsb3dlZCB3aGVuIHZhbHVlIGluIGlucHV0IGlzIGludmFsaWRcbiAgICAgKiBvciBpZiB1c2VyIGlzIHN0aWxsIHR5cGluZyB3aGF0IG1lYW5zIHRoYXQgdmFsaWRhdGlvbiBmb3IgaW5wdXQgaXMgbm90IGNhbGxlZCB5ZXQuXG4gICAgICovXG4gICAgYWRkVGFnKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3R5cGluZyAmJiAhdGhpcy50YWdOYW1lQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLnRhZ3MucHVzaCh0aGlzLnRhZ05hbWVDb250cm9sLnZhbHVlLnRyaW0oKSk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFnTmFtZUlucHV0KCk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrU2Nyb2xsYmFyVmlzaWJpbGl0eSgpO1xuICAgICAgICAgICAgdGhpcy50YWdzQ2hhbmdlLmVtaXQodGhpcy50YWdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSB0YWcgZnJvbSB0b3AgbGlzdC4gSW4gY2FzZSB0aGF0IHRhZyB3YXMgcGFydCBvZiBzZWFyY2ggcmVzdWx0IHRoZW4gdGhhdCB0YWcgaXMgbW92ZWQgdG8gYm90dG9tIGxpc3RcbiAgICAgKiAobGlzdCBvZiBleGlzdGluZyB0YWdzKSBhZnRlciByZW1vdmluZyBzbyB1c2VyIGNhbiByZXNlbGVjdCBpdCBhZ2FpbiBsYXRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWcgdGFnJ3MgbmFtZSB3aGljaCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRvcCBsaXN0LlxuICAgICAqL1xuICAgIHJlbW92ZVRhZyh0YWc6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZVRhZ0Zyb21BcnJheSh0aGlzLnRhZ3MsIHRhZyk7XG4gICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlRXhpc3RpbmdUYWdzTGlzdE9uUmVtb3ZlRnJvbVRhZ3NUb0NvbmZpcm0odGFnKTtcbiAgICAgICAgdGhpcy5leGFjdFRhZ1NldCQubmV4dCgpO1xuICAgICAgICB0aGlzLmNoZWNrU2Nyb2xsYmFyVmlzaWJpbGl0eSgpO1xuICAgICAgICB0aGlzLnRhZ3NDaGFuZ2UuZW1pdCh0aGlzLnRhZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHVzZXIgc2VsZWN0cyBhbnkgdGFnIGZyb20gbGlzdCBvZiBleGlzdGluZyB0YWdzLiBJdCBtb3ZlcyB0YWcgZnJvbSBleGlzdGluZyB0YWdzIGxpc3QgdG8gdG9wIGxpc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2VsZWN0ZWRUYWcgY2hhbmdlc1xuICAgICAqL1xuICAgIGFkZEV4aXN0aW5nVGFnVG9UYWdzVG9Bc3NpZ24oc2VsZWN0ZWRUYWc6IFRhZ0VudHJ5KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc09ubHlDcmVhdGVNb2RlKCkpIHtcbiAgICAgICAgICAgIHRoaXMudGFncy5wdXNoKHNlbGVjdGVkVGFnLmVudHJ5LnRhZyk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRhZ0Zyb21BcnJheSh0aGlzLmV4aXN0aW5nVGFncywgc2VsZWN0ZWRUYWcpO1xuICAgICAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICB0aGlzLmV4YWN0VGFnU2V0JC5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLnRhZ3NDaGFuZ2UuZW1pdCh0aGlzLnRhZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGNvbXBvbmVudCBpcyBpbiBDcmVhdGUgbW9kZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiBgQ3JlYXRlYCBtb2RlLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBpc09ubHlDcmVhdGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSBUYWdzQ3JlYXRvck1vZGUuQ1JFQVRFO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25UYWdOYW1lQ29udHJvbFZhbHVlQ2hhbmdlKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhZ05hbWVDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5sb2FkVGFncyhuYW1lKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRUYWdzKG5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAobmFtZSAmJiAhdGhpcy50YWdOYW1lQ29udHJvbC5oYXNFcnJvcignc3BlY2lhbENoYXJhY3RlcnMnKSkge1xuICAgICAgICAgICAgZm9ya0pvaW4oe1xuICAgICAgICAgICAgICAgIGV4YWN0UmVzdWx0OiB0aGlzLnRhZ1NlcnZpY2UuZmluZFRhZ0J5TmFtZShuYW1lKSxcbiAgICAgICAgICAgICAgICBzZWFyY2hlZFJlc3VsdDogdGhpcy50YWdTZXJ2aWNlLnNlYXJjaFRhZ3MobmFtZSwgREVGQVVMVF9UQUdTX1NPUlRJTkcsIGZhbHNlLCAwLCB0aGlzLmV4aXN0aW5nVGFnc0xpc3RMaW1pdClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmNhbmNlbEV4aXN0aW5nVGFnc0xvYWRpbmckKSxcbiAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gKHRoaXMuX3R5cGluZyA9IGZhbHNlKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgKHsgZXhhY3RSZXN1bHQsIHNlYXJjaGVkUmVzdWx0IH06IHsgZXhhY3RSZXN1bHQ6IFRhZ0VudHJ5OyBzZWFyY2hlZFJlc3VsdDogVGFnUGFnaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleGFjdFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpc3RpbmdFeGFjdFRhZyA9IGV4YWN0UmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRXhhY3RUYWdGcm9tU2VhcmNoZWRSZXN1bHQoc2VhcmNoZWRSZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaGVkUmVzdWx0Lmxpc3QuZW50cmllcy51bnNoaWZ0KGV4YWN0UmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGlzdGluZ0V4YWN0VGFnID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbEV4aXN0aW5nVGFncyA9IHNlYXJjaGVkUmVzdWx0Lmxpc3QuZW50cmllcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhjbHVkZUFscmVhZHlBZGRlZFRhZ3ModGhpcy5faW5pdGlhbEV4aXN0aW5nVGFncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4YWN0VGFnU2V0JC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zcGlubmVyVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0Vycm9yKCdUQUcuVEFHU19DUkVBVE9SLkVSUk9SUy5GRVRDSF9UQUdTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zcGlubmVyVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhpc3RpbmdFeGFjdFRhZyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9zcGlubmVyVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVFeGFjdFRhZ0Zyb21TZWFyY2hlZFJlc3VsdChzZWFyY2hlZFJlc3VsdDogVGFnUGFnaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4YWN0VGFnSW5kZXggPSBzZWFyY2hlZFJlc3VsdC5saXN0LmVudHJpZXMuZmluZEluZGV4KChyb3cpID0+IHRoaXMuY29tcGFyZVRhZ3Mocm93LmVudHJ5LnRhZywgdGhpcy5leGlzdGluZ0V4YWN0VGFnLmVudHJ5LnRhZykpO1xuXG4gICAgICAgIGlmIChleGFjdFRhZ0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHNlYXJjaGVkUmVzdWx0Lmxpc3QuZW50cmllcy5zcGxpY2UoZXhhY3RUYWdJbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlSWZOb3RFeGlzdGluZ1RhZyh0YWdOYW1lQ29udHJvbDogRm9ybUNvbnRyb2w8c3RyaW5nPik6IE9ic2VydmFibGU8VGFnTmFtZUNvbnRyb2xFcnJvcnMgfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4YWN0VGFnU2V0JC5waXBlKFxuICAgICAgICAgICAgbWFwPHZvaWQsIFRhZ05hbWVDb250cm9sRXJyb3JzIHwgbnVsbD4oKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBhcmVUYWdzKHRhZ05hbWVDb250cm9sLnZhbHVlLCB0aGlzLmV4aXN0aW5nRXhhY3RUYWc/LmVudHJ5Py50YWcpID8geyBkdXBsaWNhdGVkRXhpc3RpbmdUYWc6IHRydWUgfSA6IG51bGxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBmaXJzdCgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUlmTm90QWxyZWFkeUFkZGVkKHRhZ05hbWVDb250cm9sOiBGb3JtQ29udHJvbDxzdHJpbmc+KTogVGFnTmFtZUNvbnRyb2xFcnJvcnMgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFncy5zb21lKCh0YWcpID0+IHRoaXMuY29tcGFyZVRhZ3ModGFnLCB0YWdOYW1lQ29udHJvbC52YWx1ZSkpID8geyBkdXBsaWNhdGVkQWRkZWRUYWc6IHRydWUgfSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wYXJlVGFncyh0YWdOYW1lMT86IHN0cmluZywgdGFnTmFtZTI/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRhZ05hbWUxPy50cmltKCkudG9VcHBlckNhc2UoKSA9PT0gdGFnTmFtZTI/LnRyaW0oKS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVFbXB0eVRhZyh0YWdOYW1lQ29udHJvbDogRm9ybUNvbnRyb2w8c3RyaW5nPik6IFRhZ05hbWVDb250cm9sRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0YWdOYW1lQ29udHJvbC52YWx1ZS5sZW5ndGggJiYgIXRhZ05hbWVDb250cm9sLnZhbHVlLnRyaW0oKSA/IHsgZW1wdHlUYWc6IHRydWUgfSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVNwZWNpYWxDaGFyYWN0ZXJzKHRhZ05hbWVDb250cm9sOiBGb3JtQ29udHJvbDxzdHJpbmc+KTogVGFnTmFtZUNvbnRyb2xFcnJvcnMgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc3BlY2lhbFN5bWJvbHNSZWdleCA9IC9be30oKV4nOlwiXFxcXHw8Pi8/XS87XG4gICAgICAgIHJldHVybiB0YWdOYW1lQ29udHJvbC52YWx1ZS5sZW5ndGggJiYgc3BlY2lhbFN5bWJvbHNSZWdleC50ZXN0KHRhZ05hbWVDb250cm9sLnZhbHVlKSA/IHsgc3BlY2lhbENoYXJhY3RlcnM6IHRydWUgfSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUYWdOYW1lQ29udHJvbEVycm9yTWVzc2FnZUtleSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFnTmFtZUVycm9yTWVzc2FnZUtleSA9IHRoaXMudGFnTmFtZUNvbnRyb2wuaW52YWxpZFxuICAgICAgICAgICAgPyBgVEFHLlRBR1NfQ1JFQVRPUi5FUlJPUlMuJHt0aGlzLm5hbWVFcnJvck1lc3NhZ2VzQnlFcnJvcnMuZ2V0KFxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy50YWdOYW1lQ29udHJvbC5lcnJvcnMpWzBdIGFzIGtleW9mIFRhZ05hbWVDb250cm9sRXJyb3JzXG4gICAgICAgICAgICAgICl9YFxuICAgICAgICAgICAgOiAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrU2Nyb2xsYmFyVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90YWdzTGlzdFNjcm9sbGJhclZpc2libGUgPSB0aGlzLnRhZ3NMaXN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCA+IHRoaXMudGFnc0xpc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVRhZ0Zyb21BcnJheTxUPih0YWdzOiBUW10sIHRhZzogVCkge1xuICAgICAgICB0YWdzLnNwbGljZSh0YWdzLmluZGV4T2YodGFnKSwgMSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVFeGlzdGluZ1RhZ3NMaXN0T25SZW1vdmVGcm9tVGFnc1RvQ29uZmlybSh0YWc6IHN0cmluZykge1xuICAgICAgICBjb25zdCBlbnRyeUZvclRhZ0FkZGVkVG9FeGlzdGluZ1RhZ3MgPSB0aGlzLl9pbml0aWFsRXhpc3RpbmdUYWdzPy5maW5kKCh0YWdFbnRyeSkgPT4gdGFnRW50cnkuZW50cnkudGFnID09PSB0YWcpO1xuICAgICAgICBpZiAoZW50cnlGb3JUYWdBZGRlZFRvRXhpc3RpbmdUYWdzKSB7XG4gICAgICAgICAgICB0aGlzLmV4aXN0aW5nVGFncy51bnNoaWZ0KGVudHJ5Rm9yVGFnQWRkZWRUb0V4aXN0aW5nVGFncyk7XG4gICAgICAgICAgICBpZiAodGhpcy5leGlzdGluZ0V4YWN0VGFnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhZyAhPT0gdGhpcy5leGlzdGluZ0V4YWN0VGFnLmVudHJ5LnRhZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVRhZ0Zyb21BcnJheSh0aGlzLmV4aXN0aW5nVGFncywgdGhpcy5leGlzdGluZ0V4YWN0VGFnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0RXhpc3RpbmdUYWdzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpc3RpbmdUYWdzLnVuc2hpZnQodGhpcy5leGlzdGluZ0V4YWN0VGFnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydEV4aXN0aW5nVGFncygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5leGFjdFRhZ1NldCQubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0RXhpc3RpbmdUYWdzKCkge1xuICAgICAgICB0aGlzLmV4aXN0aW5nVGFncy5zb3J0KCh0YWdFbnRyeTEsIHRhZ0VudHJ5MikgPT4gdGFnRW50cnkxLmVudHJ5LnRhZy5sb2NhbGVDb21wYXJlKHRhZ0VudHJ5Mi5lbnRyeS50YWcpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4Y2x1ZGVBbHJlYWR5QWRkZWRUYWdzKHRhZ3M6IFRhZ0VudHJ5W10pIHtcbiAgICAgICAgdGhpcy5fZXhpc3RpbmdUYWdzID0gdGFncy5maWx0ZXIoKHRhZykgPT4gIXRoaXMudGFncy5pbmNsdWRlcyh0YWcuZW50cnkudGFnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhclRhZ05hbWVJbnB1dCgpIHtcbiAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImFkZi10YWdzLWNyZWF0aW9uXCI+XG4gICAgPGRpdiAqbmdJZj1cInRhZ05hbWVDb250cm9sVmlzaWJsZVwiIGNsYXNzPVwiYWRmLXRhZy1uYW1lLWZpZWxkXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3RhZ05hbWVJbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtdGFnLXNlYXJjaC1maWVsZFwiXG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJ0YWdOYW1lQ29udHJvbFwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYWRkVGFnKClcIlxuICAgICAgICAgICAgYWRmLWF1dG8tZm9jdXNcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1RBRy5UQUdTX0NSRUFUT1IuVEFHX1NFQVJDSF9QTEFDRUhPTERFUicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAvPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwidGFnTmFtZUNvbnRyb2wuaW52YWxpZCAmJiB0YWdOYW1lQ29udHJvbC50b3VjaGVkXCI+e3sgdGFnTmFtZUVycm9yTWVzc2FnZUtleSB8IHRyYW5zbGF0ZSB9fSA8L21hdC1lcnJvcj5cbiAgICA8L2Rpdj5cbiAgICA8cCBjbGFzcz1cImFkZi1uby10YWdzLW1lc3NhZ2VcIiAqbmdJZj1cInNob3dFbXB0eVRhZ01lc3NhZ2VcIj5cbiAgICAgICAge3sgJ1RBRy5UQUdTX0NSRUFUT1IuTk9fVEFHU19DUkVBVEVEJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvcD5cbiAgICA8ZGl2IGNsYXNzPVwiYWRmLXRhZ3MtbGlzdFwiIFtjbGFzcy5hZGYtdGFncy1saXN0LWZpeGVkXT1cIiF0YWdOYW1lQ29udHJvbFZpc2libGVcIiAjdGFnc0xpc3Q+XG4gICAgICAgIDxtYXQtY2hpcC1saXN0Ym94ICpuZ0lmPVwidGFncy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8bWF0LWNoaXAtb3B0aW9uICpuZ0Zvcj1cImxldCB0YWcgb2YgdGFnc1wiIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIiBbdGl0bGVdPVwidGFnXCIgY2xhc3M9XCJhZGYtdGFncy1jaGlwXCI+XG4gICAgICAgICAgICAgICAge3sgdGFnIH19XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJyZW1vdmUtdGFnLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlVGFnKHRhZylcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCInVEFHLlRBR1NfQ1JFQVRPUi5UT09MVElQUy5ERUxFVEVfVEFHJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFRhZ3NSZW1vdmluZ1wiXG4gICAgICAgICAgICAgICAgICAgIG1hdENoaXBSZW1vdmU+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L21hdC1jaGlwLW9wdGlvbj5cbiAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiYWRmLWV4aXN0aW5nLXRhZ3MtcGFuZWxcIiAqbmdJZj1cImV4aXN0aW5nVGFnc1BhbmVsVmlzaWJsZVwiPlxuICAgIDxzcGFuXG4gICAgICAgICpuZ0lmPVwiIXNwaW5uZXJWaXNpYmxlIHx8IGV4aXN0aW5nVGFnc1wiXG4gICAgICAgIGNsYXNzPVwiYWRmLWNyZWF0ZS10YWctbGFiZWxcIlxuICAgICAgICAoY2xpY2spPVwiYWRkVGFnKClcIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImFkZFRhZygpXCJcbiAgICAgICAgW2hpZGRlbl09XCJ0YWdOYW1lQ29udHJvbC5pbnZhbGlkIHx8IHR5cGluZ1wiXG4gICAgPlxuICAgICAgICB7eyAnVEFHLlRBR1NfQ1JFQVRPUi5DUkVBVEVfVEFHJyB8IHRyYW5zbGF0ZSA6IHsgdGFnOiB0YWdOYW1lQ29udHJvbC52YWx1ZSB9IH19XG4gICAgPC9zcGFuPlxuICAgIDxwICpuZ0lmPVwiIXNwaW5uZXJWaXNpYmxlICYmIGV4aXN0aW5nVGFnc1wiIGNsYXNzPVwiYWRmLWV4aXN0aW5nLXRhZ3MtbGFiZWxcIj5cbiAgICAgICAge3sgKGlzT25seUNyZWF0ZU1vZGUoKSA/ICdUQUcuVEFHU19DUkVBVE9SLkVYSVNUSU5HX1RBR1MnIDogJ1RBRy5UQUdTX0NSRUFUT1IuRVhJU1RJTkdfVEFHU19TRUxFQ1RJT04nKSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvcD5cbiAgICA8ZGl2IGNsYXNzPVwiYWRmLXRhZ3MtbGlzdFwiPlxuICAgICAgICA8bWF0LWxpc3QgKm5nSWY9XCIhc3Bpbm5lclZpc2libGUgJiYgZXhpc3RpbmdUYWdzXCIgW2Rpc2FibGVkXT1cImlzT25seUNyZWF0ZU1vZGUoKVwiPlxuICAgICAgICAgICAgPG1hdC1saXN0LWl0ZW0gKm5nRm9yPVwibGV0IHRhZ1JvdyBvZiBleGlzdGluZ1RhZ3NcIiBjbGFzcz1cImFkZi10YWdcIiAoY2xpY2spPVwiYWRkRXhpc3RpbmdUYWdUb1RhZ3NUb0Fzc2lnbih0YWdSb3cpXCI+XG4gICAgICAgICAgICAgICAge3sgdGFnUm93LmVudHJ5LnRhZyB9fVxuICAgICAgICAgICAgPC9tYXQtbGlzdC1pdGVtPlxuICAgICAgICAgICAgPHAgKm5nSWY9XCIhZXhpc3RpbmdUYWdzPy5sZW5ndGhcIj57eyAnVEFHLlRBR1NfQ1JFQVRPUi5OT19FWElTVElOR19UQUdTJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgPC9tYXQtbGlzdD5cbiAgICAgICAgPG1hdC1zcGlubmVyXG4gICAgICAgICAgICAqbmdJZj1cInNwaW5uZXJWaXNpYmxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRhZ3MtY3JlYXRvci1zcGlubmVyXCJcbiAgICAgICAgICAgIFtkaWFtZXRlcl09XCI1MFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidUQUcuVEFHU19DUkVBVE9SLlRBR1NfTE9BRElORycgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgIDwvbWF0LXNwaW5uZXI+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
357
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1jcmVhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdGFnL3RhZ3MtY3JlYXRvci90YWdzLWNyZWF0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi90YWcvdGFncy1jcmVhdG9yL3RhZ3MtY3JlYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakosT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBYyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFB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d0JBQ2IsYUFBYTt3QkFDYix3QkFBd0I7cUJBQzNCLGlCQUdjLGlCQUFpQixDQUFDLElBQUk7bUlBU3JDLElBQUk7c0JBREgsS0FBSztnQkFPTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBU0YsSUFBSTtzQkFEUCxLQUFLO2dCQXNCRixxQkFBcUI7c0JBRHhCLEtBQUs7Z0JBMEJOLGlDQUFpQztzQkFEaEMsTUFBTTtnQkFNUCxVQUFVO3NCQURULE1BQU07Z0JBaUNDLGVBQWU7c0JBRHRCLFNBQVM7dUJBQUMsVUFBVTtnQkFHYixtQkFBbUI7c0JBRDFCLFNBQVM7dUJBQUMsY0FBYztnQkE2Q3JCLFNBQVM7c0JBRFosV0FBVzt1QkFBQyw0Q0FBNEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI0IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFRhZ0VudHJ5LCBUYWdQYWdpbmcgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZGVib3VuY2UsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaW5hbGl6ZSwgZmlyc3QsIG1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFTVBUWSwgZm9ya0pvaW4sIE9ic2VydmFibGUsIFN1YmplY3QsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IFRhZ3NDcmVhdG9yTW9kZSB9IGZyb20gJy4vdGFncy1jcmVhdG9yLW1vZGUnO1xuaW1wb3J0IHsgVGFnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RhZy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IEF1dG9Gb2N1c0RpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRDaGlwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRMaXN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdCc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcblxuaW50ZXJmYWNlIFRhZ05hbWVDb250cm9sRXJyb3JzIHtcbiAgICBkdXBsaWNhdGVkRXhpc3RpbmdUYWc/OiBib29sZWFuO1xuICAgIGR1cGxpY2F0ZWRBZGRlZFRhZz86IGJvb2xlYW47XG4gICAgZW1wdHlUYWc/OiBib29sZWFuO1xuICAgIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgICBzcGVjaWFsQ2hhcmFjdGVycz86IGJvb2xlYW47XG59XG5cbmNvbnN0IERFRkFVTFRfVEFHU19TT1JUSU5HID0ge1xuICAgIG9yZGVyQnk6ICd0YWcnLFxuICAgIGRpcmVjdGlvbjogJ2FzYydcbn07XG5cbi8qKlxuICogQWxsb3dzIHRvIGNyZWF0ZSBtdWx0aXBsZSB0YWdzLiBUaGF0IGNvbXBvbmVudCBjb250YWlucyBpbnB1dCBhbmQgdHdvIGxpc3RzLiBUb3AgbGlzdCBpcyBhbGwgY3JlYXRlZCB0YWdzLCBib3R0b20gbGlzdCBpcyBzZWFyY2hlZCB0YWdzIGJhc2VkIG9uIGlucHV0J3MgdmFsdWUuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLXRhZ3MtY3JlYXRvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIEF1dG9Gb2N1c0RpcmVjdGl2ZSxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBNYXRDaGlwc01vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBNYXRMaXN0TW9kdWxlLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGVcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWdzLWNyZWF0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhZ3MtY3JlYXRvci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgVGFnc0NyZWF0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogTW9kZSBmb3IgY29tcG9uZW50LlxuICAgICAqIEluIENyZWF0ZSBtb2RlIHdlIGNhbid0IHNlbGVjdCBleGlzdGluZyB0YWdzLCB3ZSBjYW4gb25seSBjcmVhdGUgdGhlbS5cbiAgICAgKiBJbiBDcmVhdGUgYW5kIEFzc2lnbiBtb2RlIHdlIGNhbiBib3RoIC0gY3JlYXRlIHRhZ3MgYW5kIHNlbGVjdCBleGlzdGluZyB0YWdzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9kZTogVGFnc0NyZWF0b3JNb2RlO1xuXG4gICAgLyoqXG4gICAgICogRmFsc2UgaWYgdGFncyBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRvcCBsaXN0LCB0cnVlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkVGFnc1JlbW92aW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHRvcCBsaXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ3MgdGFncyB3aGljaCBzaG91bGQgYmUgZGlzcGxheWVkIGFzIGRlZmF1bHQgdGFncyBmb3IgdG9wIGxpc3QuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGFncyh0YWdzOiBzdHJpbmdbXSkge1xuICAgICAgICB0aGlzLl90YWdzID0gWy4uLnRhZ3NdO1xuICAgICAgICB0aGlzLl9pbml0aWFsRXhpc3RpbmdUYWdzID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZXhpc3RpbmdUYWdzID0gbnVsbDtcbiAgICAgICAgdGhpcy5sb2FkVGFncyh0aGlzLnRhZ05hbWVDb250cm9sLnZhbHVlKTtcbiAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIGlmICh0aGlzLnRhZ05hbWVDb250cm9sLmVycm9ycz8ucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdGFncygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlY2lkZXMgaWYgaW5wdXQgZm9yIHRhZ3MgY3JlYXRpb24vc2VhcmNoaW5nIHNob3VsZCBiZSB2aXNpYmxlLiBXaGVuIGlucHV0IGlzIGhpZGRlbiB0aGVuIHBhbmVsIG9mIGV4aXN0aW5nIHRhZ3MgaXMgaGlkZGVuIGFzIHdlbGwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFnTmFtZUNvbnRyb2xWaXNpYmxlIHRydWUgaWYgaW5wdXQgc2hvdWxkIGJlIHZpc2libGUsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0YWdOYW1lQ29udHJvbFZpc2libGUodGFnTmFtZUNvbnRyb2xWaXNpYmxlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3RhZ05hbWVDb250cm9sVmlzaWJsZSA9IHRhZ05hbWVDb250cm9sVmlzaWJsZTtcbiAgICAgICAgaWYgKHRhZ05hbWVDb250cm9sVmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5fZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGFnTmFtZUlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudD8uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGFncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWdOYW1lSW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFnTmFtZUlucHV0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leGlzdGluZ1RhZ3NQYW5lbFZpc2liaWxpdHlDaGFuZ2UuZW1pdCh0aGlzLmV4aXN0aW5nVGFnc1BhbmVsVmlzaWJsZSk7XG4gICAgfVxuXG4gICAgZ2V0IHRhZ05hbWVDb250cm9sVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhZ05hbWVDb250cm9sVmlzaWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gYm90dG9tIGxpc3QgaXMgc2hvd2luZyBvciBoaWRpbmcuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmlsaXR5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0YWdzIGluIHRvcCBsaXN0IGFyZSBjaGFuZ2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHRhZ3NDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuXG4gICAgcmVhZG9ubHkgbmFtZUVycm9yTWVzc2FnZXNCeUVycm9ycyA9IG5ldyBNYXA8a2V5b2YgVGFnTmFtZUNvbnRyb2xFcnJvcnMsIHN0cmluZz4oW1xuICAgICAgICBbJ2R1cGxpY2F0ZWRFeGlzdGluZ1RhZycsICdFWElTVElOR19UQUcnXSxcbiAgICAgICAgWydkdXBsaWNhdGVkQWRkZWRUYWcnLCAnQUxSRUFEWV9BRERFRF9UQUcnXSxcbiAgICAgICAgWydlbXB0eVRhZycsICdFTVBUWV9UQUcnXSxcbiAgICAgICAgWydyZXF1aXJlZCcsICdSRVFVSVJFRCddLFxuICAgICAgICBbJ3NwZWNpYWxDaGFyYWN0ZXJzJywgJ1NQRUNJQUxfQ0hBUkFDVEVSUyddXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGV4aXN0aW5nVGFnc0xpc3RMaW1pdCA9IDE1O1xuXG4gICAgcHJpdmF0ZSBleGFjdFRhZ1NldCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgX3RhZ3M6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfdGFnTmFtZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihcbiAgICAgICAgJycsXG4gICAgICAgIFt0aGlzLnZhbGlkYXRlSWZOb3RBbHJlYWR5QWRkZWQuYmluZCh0aGlzKSwgVmFsaWRhdG9ycy5yZXF1aXJlZCwgdGhpcy52YWxpZGF0ZUVtcHR5VGFnLCB0aGlzLnZhbGlkYXRlU3BlY2lhbENoYXJhY3RlcnNdLFxuICAgICAgICB0aGlzLnZhbGlkYXRlSWZOb3RFeGlzdGluZ1RhZy5iaW5kKHRoaXMpXG4gICAgKTtcbiAgICBwcml2YXRlIF90YWdOYW1lQ29udHJvbFZpc2libGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9leGlzdGluZ1RhZ3M6IFRhZ0VudHJ5W107XG4gICAgcHJpdmF0ZSBfaW5pdGlhbEV4aXN0aW5nVGFnczogVGFnRW50cnlbXTtcbiAgICBwcml2YXRlIG9uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgX3RhZ05hbWVFcnJvck1lc3NhZ2VLZXkgPSAnJztcbiAgICBwcml2YXRlIF9zcGlubmVyVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3R5cGluZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3RhZ3NMaXN0U2Nyb2xsYmFyVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgY2FuY2VsRXhpc3RpbmdUYWdzTG9hZGluZyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgZXhpc3RpbmdFeGFjdFRhZzogVGFnRW50cnk7XG4gICAgcHJpdmF0ZSBfZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlOiBib29sZWFuO1xuXG4gICAgQFZpZXdDaGlsZCgndGFnc0xpc3QnKVxuICAgIHByaXZhdGUgdGFnc0xpc3RFbGVtZW50OiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3RhZ05hbWVJbnB1dCcpXG4gICAgcHJpdmF0ZSB0YWdOYW1lSW5wdXRFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0YWdTZXJ2aWNlOiBUYWdTZXJ2aWNlLCBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobmFtZTogc3RyaW5nKSA9PiBuYW1lLnRyaW0oKSksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlTm90Q2hhbmdlZCA9IHByZXZpb3VzID09PSBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVOb3RDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4YWN0VGFnU2V0JC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlTm90Q2hhbmdlZDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YXAoKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90eXBpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3Bpbm5lclZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXN0aW5nVGFnc1BhbmVsVmlzaWJpbGl0eUNoYW5nZS5lbWl0KHRoaXMuZXhpc3RpbmdUYWdzUGFuZWxWaXNpYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxFeGlzdGluZ1RhZ3NMb2FkaW5nJC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxFeGlzdGluZ1RhZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9leGlzdGluZ1RhZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlKChuYW1lOiBzdHJpbmcpID0+IChuYW1lID8gdGltZXIoMzAwKSA6IEVNUFRZKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKG5hbWU6IHN0cmluZykgPT4gdGhpcy5vblRhZ05hbWVDb250cm9sVmFsdWVDaGFuZ2UobmFtZSkpO1xuXG4gICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZXRUYWdOYW1lQ29udHJvbEVycm9yTWVzc2FnZUtleSgpKTtcblxuICAgICAgICB0aGlzLnNldFRhZ05hbWVDb250cm9sRXJyb3JNZXNzYWdlS2V5KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMub25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmNhbmNlbEV4aXN0aW5nVGFnc0xvYWRpbmckLm5leHQoKTtcbiAgICAgICAgdGhpcy5jYW5jZWxFeGlzdGluZ1RhZ3NMb2FkaW5nJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuYWRmLWNyZWF0b3Itd2l0aC1leGlzdGluZy10YWdzLXBhbmVsJylcbiAgICBnZXQgaG9zdENsYXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leGlzdGluZ1RhZ3NQYW5lbFZpc2libGU7XG4gICAgfVxuXG4gICAgZ2V0IHRhZ05hbWVDb250cm9sKCk6IEZvcm1Db250cm9sPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFnTmFtZUNvbnRyb2w7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0YWdzIGVtcHR5IGFuZCBub24gZWRpdGFibGUgc3RhdGUsIG90aGVyd2lzZSBgZmFsc2VgXG4gICAgICovXG4gICAgZ2V0IHNob3dFbXB0eVRhZ01lc3NhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZ3M/Lmxlbmd0aCA9PT0gMCAmJiAhdGhpcy50YWdOYW1lQ29udHJvbFZpc2libGU7XG4gICAgfVxuXG4gICAgZ2V0IGV4aXN0aW5nVGFncygpOiBUYWdFbnRyeVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4aXN0aW5nVGFncztcbiAgICB9XG5cbiAgICBnZXQgdGFnTmFtZUVycm9yTWVzc2FnZUtleSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFnTmFtZUVycm9yTWVzc2FnZUtleTtcbiAgICB9XG5cbiAgICBnZXQgc3Bpbm5lclZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zcGlubmVyVmlzaWJsZTtcbiAgICB9XG5cbiAgICBnZXQgdHlwaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwaW5nO1xuICAgIH1cblxuICAgIGdldCB0YWdzTGlzdFNjcm9sbGJhclZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWdzTGlzdFNjcm9sbGJhclZpc2libGU7XG4gICAgfVxuXG4gICAgZ2V0IGV4aXN0aW5nVGFnc1BhbmVsVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4aXN0aW5nVGFnc1BhbmVsVmlzaWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgdGFncyB0byB0b3AgbGlzdCB1c2luZyB2YWx1ZSB3aGljaCBpcyBzZXQgaW4gaW5wdXQuIEFkZGluZyB0YWcgaXMgbm90IGFsbG93ZWQgd2hlbiB2YWx1ZSBpbiBpbnB1dCBpcyBpbnZhbGlkXG4gICAgICogb3IgaWYgdXNlciBpcyBzdGlsbCB0eXBpbmcgd2hhdCBtZWFucyB0aGF0IHZhbGlkYXRpb24gZm9yIGlucHV0IGlzIG5vdCBjYWxsZWQgeWV0LlxuICAgICAqL1xuICAgIGFkZFRhZygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl90eXBpbmcgJiYgIXRoaXMudGFnTmFtZUNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy50YWdzLnB1c2godGhpcy50YWdOYW1lQ29udHJvbC52YWx1ZS50cmltKCkpO1xuICAgICAgICAgICAgdGhpcy5jbGVhclRhZ05hbWVJbnB1dCgpO1xuICAgICAgICAgICAgdGhpcy5jaGVja1Njcm9sbGJhclZpc2liaWxpdHkoKTtcbiAgICAgICAgICAgIHRoaXMudGFnc0NoYW5nZS5lbWl0KHRoaXMudGFncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgdGFnIGZyb20gdG9wIGxpc3QuIEluIGNhc2UgdGhhdCB0YWcgd2FzIHBhcnQgb2Ygc2VhcmNoIHJlc3VsdCB0aGVuIHRoYXQgdGFnIGlzIG1vdmVkIHRvIGJvdHRvbSBsaXN0XG4gICAgICogKGxpc3Qgb2YgZXhpc3RpbmcgdGFncykgYWZ0ZXIgcmVtb3Zpbmcgc28gdXNlciBjYW4gcmVzZWxlY3QgaXQgYWdhaW4gbGF0ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFnIHRhZydzIG5hbWUgd2hpY2ggc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0b3AgbGlzdC5cbiAgICAgKi9cbiAgICByZW1vdmVUYWcodGFnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVUYWdGcm9tQXJyYXkodGhpcy50YWdzLCB0YWcpO1xuICAgICAgICB0aGlzLnRhZ05hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZUV4aXN0aW5nVGFnc0xpc3RPblJlbW92ZUZyb21UYWdzVG9Db25maXJtKHRhZyk7XG4gICAgICAgIHRoaXMuZXhhY3RUYWdTZXQkLm5leHQoKTtcbiAgICAgICAgdGhpcy5jaGVja1Njcm9sbGJhclZpc2liaWxpdHkoKTtcbiAgICAgICAgdGhpcy50YWdzQ2hhbmdlLmVtaXQodGhpcy50YWdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB1c2VyIHNlbGVjdHMgYW55IHRhZyBmcm9tIGxpc3Qgb2YgZXhpc3RpbmcgdGFncy4gSXQgbW92ZXMgdGFnIGZyb20gZXhpc3RpbmcgdGFncyBsaXN0IHRvIHRvcCBsaXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNlbGVjdGVkVGFnIGNoYW5nZXNcbiAgICAgKi9cbiAgICBhZGRFeGlzdGluZ1RhZ1RvVGFnc1RvQXNzaWduKHNlbGVjdGVkVGFnOiBUYWdFbnRyeSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNPbmx5Q3JlYXRlTW9kZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnRhZ3MucHVzaChzZWxlY3RlZFRhZy5lbnRyeS50YWcpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVUYWdGcm9tQXJyYXkodGhpcy5leGlzdGluZ1RhZ3MsIHNlbGVjdGVkVGFnKTtcbiAgICAgICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgdGhpcy5leGFjdFRhZ1NldCQubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy50YWdzQ2hhbmdlLmVtaXQodGhpcy50YWdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBjb21wb25lbnQgaXMgaW4gQ3JlYXRlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYENyZWF0ZWAgbW9kZSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaXNPbmx5Q3JlYXRlTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gVGFnc0NyZWF0b3JNb2RlLkNSRUFURTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uVGFnTmFtZUNvbnRyb2xWYWx1ZUNoYW5nZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMubG9hZFRhZ3MobmFtZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkVGFncyhuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG5hbWUgJiYgIXRoaXMudGFnTmFtZUNvbnRyb2wuaGFzRXJyb3IoJ3NwZWNpYWxDaGFyYWN0ZXJzJykpIHtcbiAgICAgICAgICAgIGZvcmtKb2luKHtcbiAgICAgICAgICAgICAgICBleGFjdFJlc3VsdDogdGhpcy50YWdTZXJ2aWNlLmZpbmRUYWdCeU5hbWUobmFtZSksXG4gICAgICAgICAgICAgICAgc2VhcmNoZWRSZXN1bHQ6IHRoaXMudGFnU2VydmljZS5zZWFyY2hUYWdzKG5hbWUsIERFRkFVTFRfVEFHU19TT1JUSU5HLCBmYWxzZSwgMCwgdGhpcy5leGlzdGluZ1RhZ3NMaXN0TGltaXQpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5jYW5jZWxFeGlzdGluZ1RhZ3NMb2FkaW5nJCksXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+ICh0aGlzLl90eXBpbmcgPSBmYWxzZSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICh7IGV4YWN0UmVzdWx0LCBzZWFyY2hlZFJlc3VsdCB9OiB7IGV4YWN0UmVzdWx0OiBUYWdFbnRyeTsgc2VhcmNoZWRSZXN1bHQ6IFRhZ1BhZ2luZyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhhY3RSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXN0aW5nRXhhY3RUYWcgPSBleGFjdFJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUV4YWN0VGFnRnJvbVNlYXJjaGVkUmVzdWx0KHNlYXJjaGVkUmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hlZFJlc3VsdC5saXN0LmVudHJpZXMudW5zaGlmdChleGFjdFJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpc3RpbmdFeGFjdFRhZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxFeGlzdGluZ1RhZ3MgPSBzZWFyY2hlZFJlc3VsdC5saXN0LmVudHJpZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4Y2x1ZGVBbHJlYWR5QWRkZWRUYWdzKHRoaXMuX2luaXRpYWxFeGlzdGluZ1RhZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGFjdFRhZ1NldCQubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3Bpbm5lclZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnNob3dFcnJvcignVEFHLlRBR1NfQ1JFQVRPUi5FUlJPUlMuRkVUQ0hfVEFHUycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3Bpbm5lclZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4aXN0aW5nRXhhY3RUYWcgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fc3Bpbm5lclZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlRXhhY3RUYWdGcm9tU2VhcmNoZWRSZXN1bHQoc2VhcmNoZWRSZXN1bHQ6IFRhZ1BhZ2luZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBleGFjdFRhZ0luZGV4ID0gc2VhcmNoZWRSZXN1bHQubGlzdC5lbnRyaWVzLmZpbmRJbmRleCgocm93KSA9PiB0aGlzLmNvbXBhcmVUYWdzKHJvdy5lbnRyeS50YWcsIHRoaXMuZXhpc3RpbmdFeGFjdFRhZy5lbnRyeS50YWcpKTtcblxuICAgICAgICBpZiAoZXhhY3RUYWdJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBzZWFyY2hlZFJlc3VsdC5saXN0LmVudHJpZXMuc3BsaWNlKGV4YWN0VGFnSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUlmTm90RXhpc3RpbmdUYWcodGFnTmFtZUNvbnRyb2w6IEZvcm1Db250cm9sPHN0cmluZz4pOiBPYnNlcnZhYmxlPFRhZ05hbWVDb250cm9sRXJyb3JzIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leGFjdFRhZ1NldCQucGlwZShcbiAgICAgICAgICAgIG1hcDx2b2lkLCBUYWdOYW1lQ29udHJvbEVycm9ycyB8IG51bGw+KCgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wYXJlVGFncyh0YWdOYW1lQ29udHJvbC52YWx1ZSwgdGhpcy5leGlzdGluZ0V4YWN0VGFnPy5lbnRyeT8udGFnKSA/IHsgZHVwbGljYXRlZEV4aXN0aW5nVGFnOiB0cnVlIH0gOiBudWxsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZmlyc3QoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVJZk5vdEFscmVhZHlBZGRlZCh0YWdOYW1lQ29udHJvbDogRm9ybUNvbnRyb2w8c3RyaW5nPik6IFRhZ05hbWVDb250cm9sRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZ3Muc29tZSgodGFnKSA9PiB0aGlzLmNvbXBhcmVUYWdzKHRhZywgdGFnTmFtZUNvbnRyb2wudmFsdWUpKSA/IHsgZHVwbGljYXRlZEFkZGVkVGFnOiB0cnVlIH0gOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcGFyZVRhZ3ModGFnTmFtZTE/OiBzdHJpbmcsIHRhZ05hbWUyPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0YWdOYW1lMT8udHJpbSgpLnRvVXBwZXJDYXNlKCkgPT09IHRhZ05hbWUyPy50cmltKCkudG9VcHBlckNhc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlRW1wdHlUYWcodGFnTmFtZUNvbnRyb2w6IEZvcm1Db250cm9sPHN0cmluZz4pOiBUYWdOYW1lQ29udHJvbEVycm9ycyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGFnTmFtZUNvbnRyb2wudmFsdWUubGVuZ3RoICYmICF0YWdOYW1lQ29udHJvbC52YWx1ZS50cmltKCkgPyB7IGVtcHR5VGFnOiB0cnVlIH0gOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVTcGVjaWFsQ2hhcmFjdGVycyh0YWdOYW1lQ29udHJvbDogRm9ybUNvbnRyb2w8c3RyaW5nPik6IFRhZ05hbWVDb250cm9sRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHNwZWNpYWxTeW1ib2xzUmVnZXggPSAvW3t9KCleJzpcIlxcXFx8PD4vPy4qXS87XG4gICAgICAgIHJldHVybiB0YWdOYW1lQ29udHJvbC52YWx1ZS5sZW5ndGggJiYgc3BlY2lhbFN5bWJvbHNSZWdleC50ZXN0KHRhZ05hbWVDb250cm9sLnZhbHVlKSA/IHsgc3BlY2lhbENoYXJhY3RlcnM6IHRydWUgfSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUYWdOYW1lQ29udHJvbEVycm9yTWVzc2FnZUtleSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFnTmFtZUVycm9yTWVzc2FnZUtleSA9IHRoaXMudGFnTmFtZUNvbnRyb2wuaW52YWxpZFxuICAgICAgICAgICAgPyBgVEFHLlRBR1NfQ1JFQVRPUi5FUlJPUlMuJHt0aGlzLm5hbWVFcnJvck1lc3NhZ2VzQnlFcnJvcnMuZ2V0KFxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy50YWdOYW1lQ29udHJvbC5lcnJvcnMpWzBdIGFzIGtleW9mIFRhZ05hbWVDb250cm9sRXJyb3JzXG4gICAgICAgICAgICAgICl9YFxuICAgICAgICAgICAgOiAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrU2Nyb2xsYmFyVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90YWdzTGlzdFNjcm9sbGJhclZpc2libGUgPSB0aGlzLnRhZ3NMaXN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCA+IHRoaXMudGFnc0xpc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVRhZ0Zyb21BcnJheTxUPih0YWdzOiBUW10sIHRhZzogVCkge1xuICAgICAgICB0YWdzLnNwbGljZSh0YWdzLmluZGV4T2YodGFnKSwgMSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVFeGlzdGluZ1RhZ3NMaXN0T25SZW1vdmVGcm9tVGFnc1RvQ29uZmlybSh0YWc6IHN0cmluZykge1xuICAgICAgICBjb25zdCBlbnRyeUZvclRhZ0FkZGVkVG9FeGlzdGluZ1RhZ3MgPSB0aGlzLl9pbml0aWFsRXhpc3RpbmdUYWdzPy5maW5kKCh0YWdFbnRyeSkgPT4gdGFnRW50cnkuZW50cnkudGFnID09PSB0YWcpO1xuICAgICAgICBpZiAoZW50cnlGb3JUYWdBZGRlZFRvRXhpc3RpbmdUYWdzKSB7XG4gICAgICAgICAgICB0aGlzLmV4aXN0aW5nVGFncy51bnNoaWZ0KGVudHJ5Rm9yVGFnQWRkZWRUb0V4aXN0aW5nVGFncyk7XG4gICAgICAgICAgICBpZiAodGhpcy5leGlzdGluZ0V4YWN0VGFnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhZyAhPT0gdGhpcy5leGlzdGluZ0V4YWN0VGFnLmVudHJ5LnRhZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVRhZ0Zyb21BcnJheSh0aGlzLmV4aXN0aW5nVGFncywgdGhpcy5leGlzdGluZ0V4YWN0VGFnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0RXhpc3RpbmdUYWdzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpc3RpbmdUYWdzLnVuc2hpZnQodGhpcy5leGlzdGluZ0V4YWN0VGFnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydEV4aXN0aW5nVGFncygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5leGFjdFRhZ1NldCQubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0RXhpc3RpbmdUYWdzKCkge1xuICAgICAgICB0aGlzLmV4aXN0aW5nVGFncy5zb3J0KCh0YWdFbnRyeTEsIHRhZ0VudHJ5MikgPT4gdGFnRW50cnkxLmVudHJ5LnRhZy5sb2NhbGVDb21wYXJlKHRhZ0VudHJ5Mi5lbnRyeS50YWcpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4Y2x1ZGVBbHJlYWR5QWRkZWRUYWdzKHRhZ3M6IFRhZ0VudHJ5W10pIHtcbiAgICAgICAgdGhpcy5fZXhpc3RpbmdUYWdzID0gdGFncy5maWx0ZXIoKHRhZykgPT4gIXRoaXMudGFncy5pbmNsdWRlcyh0YWcuZW50cnkudGFnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhclRhZ05hbWVJbnB1dCgpIHtcbiAgICAgICAgdGhpcy50YWdOYW1lQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgIHRoaXMudGFnTmFtZUNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImFkZi10YWdzLWNyZWF0aW9uXCI+XG4gICAgPGRpdiAqbmdJZj1cInRhZ05hbWVDb250cm9sVmlzaWJsZVwiIGNsYXNzPVwiYWRmLXRhZy1uYW1lLWZpZWxkXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3RhZ05hbWVJbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtdGFnLXNlYXJjaC1maWVsZFwiXG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJ0YWdOYW1lQ29udHJvbFwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYWRkVGFnKClcIlxuICAgICAgICAgICAgYWRmLWF1dG8tZm9jdXNcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1RBRy5UQUdTX0NSRUFUT1IuVEFHX1NFQVJDSF9QTEFDRUhPTERFUicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAvPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwidGFnTmFtZUNvbnRyb2wuaW52YWxpZCAmJiB0YWdOYW1lQ29udHJvbC50b3VjaGVkXCI+e3sgdGFnTmFtZUVycm9yTWVzc2FnZUtleSB8IHRyYW5zbGF0ZSB9fSA8L21hdC1lcnJvcj5cbiAgICA8L2Rpdj5cbiAgICA8cCBjbGFzcz1cImFkZi1uby10YWdzLW1lc3NhZ2VcIiAqbmdJZj1cInNob3dFbXB0eVRhZ01lc3NhZ2VcIj5cbiAgICAgICAge3sgJ1RBRy5UQUdTX0NSRUFUT1IuTk9fVEFHU19DUkVBVEVEJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvcD5cbiAgICA8ZGl2IGNsYXNzPVwiYWRmLXRhZ3MtbGlzdFwiIFtjbGFzcy5hZGYtdGFncy1saXN0LWZpeGVkXT1cIiF0YWdOYW1lQ29udHJvbFZpc2libGVcIiAjdGFnc0xpc3Q+XG4gICAgICAgIDxtYXQtY2hpcC1saXN0Ym94ICpuZ0lmPVwidGFncy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPVwibGV0IHRhZyBvZiB0YWdzXCIgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiIFt0aXRsZV09XCJ0YWdcIiBjbGFzcz1cImFkZi10YWdzLWNoaXBcIj5cbiAgICAgICAgICAgICAgICB7eyB0YWcgfX1cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cInJlbW92ZS10YWctYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVUYWcodGFnKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIidUQUcuVEFHU19DUkVBVE9SLlRPT0xUSVBTLkRFTEVURV9UQUcnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkVGFnc1JlbW92aW5nXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0Q2hpcFJlbW92ZT5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImFkZi1leGlzdGluZy10YWdzLXBhbmVsXCIgKm5nSWY9XCJleGlzdGluZ1RhZ3NQYW5lbFZpc2libGVcIj5cbiAgICA8c3BhblxuICAgICAgICAqbmdJZj1cIiFzcGlubmVyVmlzaWJsZSB8fCBleGlzdGluZ1RhZ3NcIlxuICAgICAgICBjbGFzcz1cImFkZi1jcmVhdGUtdGFnLWxhYmVsXCJcbiAgICAgICAgKGNsaWNrKT1cImFkZFRhZygpXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJhZGRUYWcoKVwiXG4gICAgICAgIFtoaWRkZW5dPVwidGFnTmFtZUNvbnRyb2wuaW52YWxpZCB8fCB0eXBpbmdcIlxuICAgID5cbiAgICAgICAge3sgJ1RBRy5UQUdTX0NSRUFUT1IuQ1JFQVRFX1RBRycgfCB0cmFuc2xhdGUgOiB7IHRhZzogdGFnTmFtZUNvbnRyb2wudmFsdWUgfSB9fVxuICAgIDwvc3Bhbj5cbiAgICA8cCAqbmdJZj1cIiFzcGlubmVyVmlzaWJsZSAmJiBleGlzdGluZ1RhZ3NcIiBjbGFzcz1cImFkZi1leGlzdGluZy10YWdzLWxhYmVsXCI+XG4gICAgICAgIHt7IChpc09ubHlDcmVhdGVNb2RlKCkgPyAnVEFHLlRBR1NfQ1JFQVRPUi5FWElTVElOR19UQUdTJyA6ICdUQUcuVEFHU19DUkVBVE9SLkVYSVNUSU5HX1RBR1NfU0VMRUNUSU9OJykgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3A+XG4gICAgPGRpdiBjbGFzcz1cImFkZi10YWdzLWxpc3RcIj5cbiAgICAgICAgPG1hdC1saXN0ICpuZ0lmPVwiIXNwaW5uZXJWaXNpYmxlICYmIGV4aXN0aW5nVGFnc1wiIFtkaXNhYmxlZF09XCJpc09ubHlDcmVhdGVNb2RlKClcIj5cbiAgICAgICAgICAgIDxtYXQtbGlzdC1pdGVtICpuZ0Zvcj1cImxldCB0YWdSb3cgb2YgZXhpc3RpbmdUYWdzXCIgY2xhc3M9XCJhZGYtdGFnXCIgKGNsaWNrKT1cImFkZEV4aXN0aW5nVGFnVG9UYWdzVG9Bc3NpZ24odGFnUm93KVwiPlxuICAgICAgICAgICAgICAgIHt7IHRhZ1Jvdy5lbnRyeS50YWcgfX1cbiAgICAgICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgICAgICAgICAgIDxwICpuZ0lmPVwiIWV4aXN0aW5nVGFncz8ubGVuZ3RoXCI+e3sgJ1RBRy5UQUdTX0NSRUFUT1IuTk9fRVhJU1RJTkdfVEFHUycgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgIDwvbWF0LWxpc3Q+XG4gICAgICAgIDxtYXQtc3Bpbm5lclxuICAgICAgICAgICAgKm5nSWY9XCJzcGlubmVyVmlzaWJsZVwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZi10YWdzLWNyZWF0b3Itc3Bpbm5lclwiXG4gICAgICAgICAgICBbZGlhbWV0ZXJdPVwiNTBcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVEFHLlRBR1NfQ1JFQVRPUi5UQUdTX0xPQURJTkcnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICA8L21hdC1zcGlubmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -17,26 +17,25 @@
|
|
|
17
17
|
import { NgModule, APP_INITIALIZER } from '@angular/core';
|
|
18
18
|
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
|
19
19
|
import { RouterTestingModule } from '@angular/router/testing';
|
|
20
|
-
import { CoreModule, AlfrescoApiService, AppConfigService,
|
|
20
|
+
import { CoreModule, AlfrescoApiService, AppConfigService, CookieService, AlfrescoApiServiceMock, AppConfigServiceMock, CookieServiceMock, AuthModule, NoopTranslateModule } from '@alfresco/adf-core';
|
|
21
21
|
import { ContentModule } from '../content.module';
|
|
22
|
-
import { TranslateModule } from '@ngx-translate/core';
|
|
23
22
|
import { versionCompatibilityFactory } from '../version-compatibility/version-compatibility-factory';
|
|
24
23
|
import { VersionCompatibilityService } from '../version-compatibility/version-compatibility.service';
|
|
25
24
|
import { MatIconTestingModule } from '@angular/material/icon/testing';
|
|
26
25
|
import * as i0 from "@angular/core";
|
|
27
26
|
import * as i1 from "@alfresco/adf-core";
|
|
28
|
-
import * as i2 from "@ngx-translate/core";
|
|
29
27
|
export class ContentTestingModule {
|
|
30
28
|
}
|
|
31
29
|
ContentTestingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ContentTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
32
30
|
ContentTestingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: ContentTestingModule, imports: [i1.AuthModule, NoopAnimationsModule,
|
|
33
|
-
RouterTestingModule,
|
|
31
|
+
RouterTestingModule,
|
|
32
|
+
CoreModule,
|
|
33
|
+
NoopTranslateModule,
|
|
34
34
|
ContentModule,
|
|
35
|
-
MatIconTestingModule], exports: [NoopAnimationsModule,
|
|
35
|
+
MatIconTestingModule], exports: [NoopAnimationsModule, CoreModule, ContentModule] });
|
|
36
36
|
ContentTestingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ContentTestingModule, providers: [
|
|
37
37
|
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
|
|
38
38
|
{ provide: AppConfigService, useClass: AppConfigServiceMock },
|
|
39
|
-
{ provide: TranslationService, useClass: TranslationMock },
|
|
40
39
|
{ provide: CookieService, useClass: CookieServiceMock },
|
|
41
40
|
{
|
|
42
41
|
provide: APP_INITIALIZER,
|
|
@@ -47,10 +46,10 @@ ContentTestingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", ve
|
|
|
47
46
|
], imports: [AuthModule.forRoot({ useHash: true }),
|
|
48
47
|
NoopAnimationsModule,
|
|
49
48
|
RouterTestingModule,
|
|
50
|
-
TranslateModule.forRoot(),
|
|
51
49
|
CoreModule,
|
|
50
|
+
NoopTranslateModule,
|
|
52
51
|
ContentModule,
|
|
53
|
-
MatIconTestingModule, NoopAnimationsModule,
|
|
52
|
+
MatIconTestingModule, NoopAnimationsModule, CoreModule, ContentModule] });
|
|
54
53
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ContentTestingModule, decorators: [{
|
|
55
54
|
type: NgModule,
|
|
56
55
|
args: [{
|
|
@@ -58,15 +57,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
58
57
|
AuthModule.forRoot({ useHash: true }),
|
|
59
58
|
NoopAnimationsModule,
|
|
60
59
|
RouterTestingModule,
|
|
61
|
-
TranslateModule.forRoot(),
|
|
62
60
|
CoreModule,
|
|
61
|
+
NoopTranslateModule,
|
|
63
62
|
ContentModule,
|
|
64
63
|
MatIconTestingModule
|
|
65
64
|
],
|
|
66
65
|
providers: [
|
|
67
66
|
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
|
|
68
67
|
{ provide: AppConfigService, useClass: AppConfigServiceMock },
|
|
69
|
-
{ provide: TranslationService, useClass: TranslationMock },
|
|
70
68
|
{ provide: CookieService, useClass: CookieServiceMock },
|
|
71
69
|
{
|
|
72
70
|
provide: APP_INITIALIZER,
|
|
@@ -75,7 +73,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
75
73
|
multi: true
|
|
76
74
|
}
|
|
77
75
|
],
|
|
78
|
-
exports: [NoopAnimationsModule,
|
|
76
|
+
exports: [NoopAnimationsModule, CoreModule, ContentModule]
|
|
79
77
|
}]
|
|
80
78
|
}] });
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC50ZXN0aW5nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdGVzdGluZy9jb250ZW50LnRlc3RpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFDSCxVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsVUFBVSxFQUNWLG1CQUFtQixFQUN0QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNyRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNyRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7O0FBeUJ0RSxNQUFNLE9BQU8sb0JBQW9COztrSEFBcEIsb0JBQW9CO21IQUFwQixvQkFBb0IsMkJBcEJ6QixvQkFBb0I7UUFDcEIsbUJBQW1CO1FBQ25CLFVBQVU7UUFDVixtQkFBbUI7UUFDbkIsYUFBYTtRQUNiLG9CQUFvQixhQWFkLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxhQUFhO21IQUVoRCxvQkFBb0IsYUFibEI7UUFDUCxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUU7UUFDakUsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFO1FBQzdELEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUU7UUFDdkQ7WUFDSSxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsMkJBQTJCO1lBQ3ZDLElBQUksRUFBRSxDQUFDLDJCQUEyQixDQUFDO1lBQ25DLEtBQUssRUFBRSxJQUFJO1NBQ2Q7S0FDSixZQWxCRyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3JDLG9CQUFvQjtRQUNwQixtQkFBbUI7UUFDbkIsVUFBVTtRQUNWLG1CQUFtQjtRQUNuQixhQUFhO1FBQ2Isb0JBQW9CLEVBYWQsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLGFBQWE7NEZBRWhELG9CQUFvQjtrQkF2QmhDLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7d0JBQ3JDLG9CQUFvQjt3QkFDcEIsbUJBQW1CO3dCQUNuQixVQUFVO3dCQUNWLG1CQUFtQjt3QkFDbkIsYUFBYTt3QkFDYixvQkFBb0I7cUJBQ3ZCO29CQUNELFNBQVMsRUFBRTt3QkFDUCxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUU7d0JBQ2pFLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRTt3QkFDN0QsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRTt3QkFDdkQ7NEJBQ0ksT0FBTyxFQUFFLGVBQWU7NEJBQ3hCLFVBQVUsRUFBRSwyQkFBMkI7NEJBQ3ZDLElBQUksRUFBRSxDQUFDLDJCQUEyQixDQUFDOzRCQUNuQyxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDO2lCQUM3RCIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjQgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgTmdNb2R1bGUsIEFQUF9JTklUSUFMSVpFUiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9vcEFuaW1hdGlvbnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgUm91dGVyVGVzdGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlci90ZXN0aW5nJztcbmltcG9ydCB7XG4gICAgQ29yZU1vZHVsZSxcbiAgICBBbGZyZXNjb0FwaVNlcnZpY2UsXG4gICAgQXBwQ29uZmlnU2VydmljZSxcbiAgICBDb29raWVTZXJ2aWNlLFxuICAgIEFsZnJlc2NvQXBpU2VydmljZU1vY2ssXG4gICAgQXBwQ29uZmlnU2VydmljZU1vY2ssXG4gICAgQ29va2llU2VydmljZU1vY2ssXG4gICAgQXV0aE1vZHVsZSxcbiAgICBOb29wVHJhbnNsYXRlTW9kdWxlXG59IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBDb250ZW50TW9kdWxlIH0gZnJvbSAnLi4vY29udGVudC5tb2R1bGUnO1xuaW1wb3J0IHsgdmVyc2lvbkNvbXBhdGliaWxpdHlGYWN0b3J5IH0gZnJvbSAnLi4vdmVyc2lvbi1jb21wYXRpYmlsaXR5L3ZlcnNpb24tY29tcGF0aWJpbGl0eS1mYWN0b3J5JztcbmltcG9ydCB7IFZlcnNpb25Db21wYXRpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3ZlcnNpb24tY29tcGF0aWJpbGl0eS92ZXJzaW9uLWNvbXBhdGliaWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBNYXRJY29uVGVzdGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24vdGVzdGluZyc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBBdXRoTW9kdWxlLmZvclJvb3QoeyB1c2VIYXNoOiB0cnVlIH0pLFxuICAgICAgICBOb29wQW5pbWF0aW9uc01vZHVsZSxcbiAgICAgICAgUm91dGVyVGVzdGluZ01vZHVsZSxcbiAgICAgICAgQ29yZU1vZHVsZSxcbiAgICAgICAgTm9vcFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgQ29udGVudE1vZHVsZSxcbiAgICAgICAgTWF0SWNvblRlc3RpbmdNb2R1bGVcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IEFsZnJlc2NvQXBpU2VydmljZSwgdXNlQ2xhc3M6IEFsZnJlc2NvQXBpU2VydmljZU1vY2sgfSxcbiAgICAgICAgeyBwcm92aWRlOiBBcHBDb25maWdTZXJ2aWNlLCB1c2VDbGFzczogQXBwQ29uZmlnU2VydmljZU1vY2sgfSxcbiAgICAgICAgeyBwcm92aWRlOiBDb29raWVTZXJ2aWNlLCB1c2VDbGFzczogQ29va2llU2VydmljZU1vY2sgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogdmVyc2lvbkNvbXBhdGliaWxpdHlGYWN0b3J5LFxuICAgICAgICAgICAgZGVwczogW1ZlcnNpb25Db21wYXRpYmlsaXR5U2VydmljZV0sXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSxcbiAgICBleHBvcnRzOiBbTm9vcEFuaW1hdGlvbnNNb2R1bGUsIENvcmVNb2R1bGUsIENvbnRlbnRNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIENvbnRlbnRUZXN0aW5nTW9kdWxlIHt9XG4iXX0=
|
|
@@ -4,7 +4,7 @@ import * as i4$1 from '@alfresco/js-api';
|
|
|
4
4
|
import { ContentApi, DiscoveryApi, AboutApi, SystemPropertiesApi, UploadApi, NodesApi, VersionsApi, DownloadsApi, TrashcanApi, FileDownloadStatus, SearchApi, SEARCH_LANGUAGE, QueriesApi, CategoriesApi, TagsApi, TagBody, PeopleApi, SitesApi, SharedlinksApi, FavoritesApi, SiteMemberPaging, RenditionsApi, Pagination, SiteEntry, Site, NodePagingList, Node, ContentInfo, UserInfo, Category, ClassesApi, TypesApi, CategoryLinkBody, AspectsApi, GroupsApi, NodeEntry, CommentsApi, SecurityGroupsApi, SecurityMarksApi, AuthorityClearanceApi, PredictionsApi, LegalHoldApi } from '@alfresco/js-api';
|
|
5
5
|
import { Subject, from, throwError, merge, ReplaySubject, timer, EMPTY, BehaviorSubject, Observable, of, forkJoin, Subscription, defer, zip, iif } from 'rxjs';
|
|
6
6
|
import * as i1 from '@alfresco/adf-core';
|
|
7
|
-
import { BpmProductVersionModel, AlfrescoApiService, AppConfigService, TranslationService, FileUtils, NotificationService, EXTENDIBLE_COMPONENT, IconComponent, FileSizePipe, ObjectUtils, DataSorting, BaseEvent, DateFnsUtils, ADF_DATE_FORMATS, ADF_DATETIME_FORMATS, AdfDateFnsAdapter, AdfDateTimeFnsAdapter, UserPreferenceValues, HeaderFilterTemplateDirective, DataTableSchema, ShowHeaderMode, DataTableService, DataColumnListComponent, CustomLoadingContentTemplateDirective, CustomNoPermissionTemplateDirective, CustomEmptyContentTemplateDirective, DataTableComponent, NoContentTemplateDirective, EmptyListComponent, NoPermissionTemplateDirective, LoadingContentTemplateDirective, MainMenuDataTableTemplateDirective, ColumnsSelectorComponent, InfiniteSelectScrollDirective, HighlightDirective, InfinitePaginationComponent, ToolbarTitleComponent, ToolbarComponent, DataColumnComponent, DynamicChipListComponent, SortingPickerComponent, SearchTextInputComponent, HighlightPipe, ConfirmDialogComponent, FileTypePipe, ContextMenuDirective, CardViewTextItemModel, CardViewDateItemModel, UserPreferencesService, LogService, CardViewSelectItemModel, MultiValuePipe, CardViewBoolItemModel, CardViewDatetimeItemModel, CardViewFloatItemModel, DecimalNumberPipe, CardViewLongItemModel, CardViewIntItemModel, CardViewComponent, User, InitialUsernamePipe, LocalizedRolePipe, DateColumnHeaderComponent, EmptyContentComponent, ClipboardDirective, CommentModel, ADF_COMMENTS_SERVICE, CommentsComponent, CloseButtonPosition, ViewUtilService, ViewerToolbarComponent, ViewerSidebarComponent, ViewerToolbarActionsComponent, ViewerMoreActionsComponent, ViewerOpenWithComponent, VIEWER_DIRECTIVES, provideTranslations, CoreModule, AlfrescoApiServiceMock, AppConfigServiceMock,
|
|
7
|
+
import { BpmProductVersionModel, AlfrescoApiService, AppConfigService, TranslationService, FileUtils, NotificationService, EXTENDIBLE_COMPONENT, IconComponent, FileSizePipe, ObjectUtils, DataSorting, BaseEvent, DateFnsUtils, ADF_DATE_FORMATS, ADF_DATETIME_FORMATS, AdfDateFnsAdapter, AdfDateTimeFnsAdapter, UserPreferenceValues, HeaderFilterTemplateDirective, DataTableSchema, ShowHeaderMode, DataTableService, DataColumnListComponent, CustomLoadingContentTemplateDirective, CustomNoPermissionTemplateDirective, CustomEmptyContentTemplateDirective, DataTableComponent, NoContentTemplateDirective, EmptyListComponent, NoPermissionTemplateDirective, LoadingContentTemplateDirective, MainMenuDataTableTemplateDirective, ColumnsSelectorComponent, InfiniteSelectScrollDirective, HighlightDirective, InfinitePaginationComponent, ToolbarTitleComponent, ToolbarComponent, DataColumnComponent, DynamicChipListComponent, SortingPickerComponent, SearchTextInputComponent, HighlightPipe, ConfirmDialogComponent, FileTypePipe, ContextMenuDirective, CardViewTextItemModel, CardViewDateItemModel, UserPreferencesService, LogService, CardViewSelectItemModel, MultiValuePipe, CardViewBoolItemModel, CardViewDatetimeItemModel, CardViewFloatItemModel, DecimalNumberPipe, CardViewLongItemModel, CardViewIntItemModel, CardViewComponent, User, InitialUsernamePipe, LocalizedRolePipe, DateColumnHeaderComponent, EmptyContentComponent, ClipboardDirective, CommentModel, ADF_COMMENTS_SERVICE, CommentsComponent, CloseButtonPosition, ViewUtilService, ViewerToolbarComponent, ViewerSidebarComponent, ViewerToolbarActionsComponent, ViewerMoreActionsComponent, ViewerOpenWithComponent, VIEWER_DIRECTIVES, provideTranslations, CoreModule, NoopTranslateModule, AlfrescoApiServiceMock, AppConfigServiceMock, CookieService, CookieServiceMock, AuthModule } from '@alfresco/adf-core';
|
|
8
8
|
import * as i1$3 from '@angular/material/dialog';
|
|
9
9
|
import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
|
10
10
|
import { takeUntil, filter, take, switchMap, map, catchError, delay, startWith, tap, debounce, debounceTime, retry, mergeMap, distinctUntilChanged, finalize, first, toArray, concatMap } from 'rxjs/operators';
|
|
@@ -13575,7 +13575,13 @@ class TagsCreatorComponent {
|
|
|
13575
13575
|
}
|
|
13576
13576
|
ngOnInit() {
|
|
13577
13577
|
this.tagNameControl.valueChanges
|
|
13578
|
-
.pipe(map((name) => name.trim()), distinctUntilChanged(
|
|
13578
|
+
.pipe(map((name) => name.trim()), distinctUntilChanged((previous, current) => {
|
|
13579
|
+
const valueNotChanged = previous === current;
|
|
13580
|
+
if (valueNotChanged) {
|
|
13581
|
+
this.exactTagSet$.next();
|
|
13582
|
+
}
|
|
13583
|
+
return valueNotChanged;
|
|
13584
|
+
}), tap((name) => {
|
|
13579
13585
|
this._typing = true;
|
|
13580
13586
|
if (name) {
|
|
13581
13587
|
this._spinnerVisible = true;
|
|
@@ -13728,7 +13734,7 @@ class TagsCreatorComponent {
|
|
|
13728
13734
|
return tagNameControl.value.length && !tagNameControl.value.trim() ? { emptyTag: true } : null;
|
|
13729
13735
|
}
|
|
13730
13736
|
validateSpecialCharacters(tagNameControl) {
|
|
13731
|
-
const specialSymbolsRegex = /[{}()^':"
|
|
13737
|
+
const specialSymbolsRegex = /[{}()^':"\\|<>/?.*]/;
|
|
13732
13738
|
return tagNameControl.value.length && specialSymbolsRegex.test(tagNameControl.value) ? { specialCharacters: true } : null;
|
|
13733
13739
|
}
|
|
13734
13740
|
setTagNameControlErrorMessageKey() {
|
|
@@ -13774,7 +13780,7 @@ class TagsCreatorComponent {
|
|
|
13774
13780
|
}
|
|
13775
13781
|
}
|
|
13776
13782
|
TagsCreatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TagsCreatorComponent, deps: [{ token: TagService }, { token: i1.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
13777
|
-
TagsCreatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TagsCreatorComponent, isStandalone: true, selector: "adf-tags-creator", inputs: { mode: "mode", disabledTagsRemoving: "disabledTagsRemoving", tags: "tags", tagNameControlVisible: "tagNameControlVisible" }, outputs: { existingTagsPanelVisibilityChange: "existingTagsPanelVisibilityChange", tagsChange: "tagsChange" }, host: { properties: { "class.adf-creator-with-existing-tags-panel": "this.hostClass" } }, viewQueries: [{ propertyName: "tagsListElement", first: true, predicate: ["tagsList"], descendants: true }, { propertyName: "tagNameInputElement", first: true, predicate: ["tagNameInput"], descendants: true }], ngImport: i0, template: "<div class=\"adf-tags-creation\">\n <div *ngIf=\"tagNameControlVisible\" class=\"adf-tag-name-field\">\n <input\n #tagNameInput\n class=\"adf-tag-search-field\"\n matInput\n autocomplete=\"off\"\n [formControl]=\"tagNameControl\"\n (keyup.enter)=\"addTag()\"\n adf-auto-focus\n placeholder=\"{{ 'TAG.TAGS_CREATOR.TAG_SEARCH_PLACEHOLDER' | translate }}\"\n />\n <mat-error *ngIf=\"tagNameControl.invalid && tagNameControl.touched\">{{ tagNameErrorMessageKey | translate }} </mat-error>\n </div>\n <p class=\"adf-no-tags-message\" *ngIf=\"showEmptyTagMessage\">\n {{ 'TAG.TAGS_CREATOR.NO_TAGS_CREATED' | translate }}\n </p>\n <div class=\"adf-tags-list\" [class.adf-tags-list-fixed]=\"!tagNameControlVisible\" #tagsList>\n <mat-chip-listbox *ngIf=\"tags.length > 0\">\n <mat-chip
|
|
13783
|
+
TagsCreatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TagsCreatorComponent, isStandalone: true, selector: "adf-tags-creator", inputs: { mode: "mode", disabledTagsRemoving: "disabledTagsRemoving", tags: "tags", tagNameControlVisible: "tagNameControlVisible" }, outputs: { existingTagsPanelVisibilityChange: "existingTagsPanelVisibilityChange", tagsChange: "tagsChange" }, host: { properties: { "class.adf-creator-with-existing-tags-panel": "this.hostClass" } }, viewQueries: [{ propertyName: "tagsListElement", first: true, predicate: ["tagsList"], descendants: true }, { propertyName: "tagNameInputElement", first: true, predicate: ["tagNameInput"], descendants: true }], ngImport: i0, template: "<div class=\"adf-tags-creation\">\n <div *ngIf=\"tagNameControlVisible\" class=\"adf-tag-name-field\">\n <input\n #tagNameInput\n class=\"adf-tag-search-field\"\n matInput\n autocomplete=\"off\"\n [formControl]=\"tagNameControl\"\n (keyup.enter)=\"addTag()\"\n adf-auto-focus\n placeholder=\"{{ 'TAG.TAGS_CREATOR.TAG_SEARCH_PLACEHOLDER' | translate }}\"\n />\n <mat-error *ngIf=\"tagNameControl.invalid && tagNameControl.touched\">{{ tagNameErrorMessageKey | translate }} </mat-error>\n </div>\n <p class=\"adf-no-tags-message\" *ngIf=\"showEmptyTagMessage\">\n {{ 'TAG.TAGS_CREATOR.NO_TAGS_CREATED' | translate }}\n </p>\n <div class=\"adf-tags-list\" [class.adf-tags-list-fixed]=\"!tagNameControlVisible\" #tagsList>\n <mat-chip-listbox *ngIf=\"tags.length > 0\">\n <mat-chip *ngFor=\"let tag of tags\" [disableRipple]=\"true\" [title]=\"tag\" class=\"adf-tags-chip\">\n {{ tag }}\n <button\n data-automation-id=\"remove-tag-button\"\n mat-icon-button\n (click)=\"removeTag(tag)\"\n [attr.title]=\"'TAG.TAGS_CREATOR.TOOLTIPS.DELETE_TAG' | translate\"\n [disabled]=\"disabledTagsRemoving\"\n matChipRemove>\n <mat-icon>close</mat-icon>\n </button>\n </mat-chip>\n </mat-chip-listbox>\n </div>\n</div>\n<div class=\"adf-existing-tags-panel\" *ngIf=\"existingTagsPanelVisible\">\n <span\n *ngIf=\"!spinnerVisible || existingTags\"\n class=\"adf-create-tag-label\"\n (click)=\"addTag()\"\n role=\"button\"\n tabindex=\"0\"\n (keyup.enter)=\"addTag()\"\n [hidden]=\"tagNameControl.invalid || typing\"\n >\n {{ 'TAG.TAGS_CREATOR.CREATE_TAG' | translate : { tag: tagNameControl.value } }}\n </span>\n <p *ngIf=\"!spinnerVisible && existingTags\" class=\"adf-existing-tags-label\">\n {{ (isOnlyCreateMode() ? 'TAG.TAGS_CREATOR.EXISTING_TAGS' : 'TAG.TAGS_CREATOR.EXISTING_TAGS_SELECTION') | translate }}\n </p>\n <div class=\"adf-tags-list\">\n <mat-list *ngIf=\"!spinnerVisible && existingTags\" [disabled]=\"isOnlyCreateMode()\">\n <mat-list-item *ngFor=\"let tagRow of existingTags\" class=\"adf-tag\" (click)=\"addExistingTagToTagsToAssign(tagRow)\">\n {{ tagRow.entry.tag }}\n </mat-list-item>\n <p *ngIf=\"!existingTags?.length\">{{ 'TAG.TAGS_CREATOR.NO_EXISTING_TAGS' | translate }}</p>\n </mat-list>\n <mat-spinner\n *ngIf=\"spinnerVisible\"\n class=\"adf-tags-creator-spinner\"\n [diameter]=\"50\"\n [attr.aria-label]=\"'TAG.TAGS_CREATOR.TAGS_LOADING' | translate\"\n >\n </mat-spinner>\n </div>\n</div>\n", styles: ["adf-tags-creator{display:block}adf-tags-creator .adf-no-tags-message{margin-top:28.5px;margin-bottom:0;height:30px}adf-tags-creator .adf-tag-name-field,adf-tags-creator .adf-tag-name-field[hidden]{display:flex;flex-direction:column;margin-right:12px}adf-tags-creator .adf-tag-search-field{background:var(--adf-metadata-buttons-background-color);border-radius:12px;padding:5px 6px;border:none;outline:none;font:inherit;color:currentcolor;margin:0;vertical-align:bottom;text-align:inherit;box-sizing:content-box}adf-tags-creator .adf-create-tag-label{color:var(--theme-primary-color);cursor:pointer;margin-top:-1px;padding-left:12px;overflow-wrap:anywhere;display:inline-block;padding-right:12px;overflow:auto}adf-tags-creator .adf-tags-list{margin-top:8px}adf-tags-creator .adf-tags-chip{height:auto}adf-tags-creator .adf-existing-tags-panel{border-top-left-radius:6px;border-top-right-radius:6px;width:100%}adf-tags-creator .adf-existing-tags-panel .adf-existing-tags-label{font-size:10px;color:var(--theme-secondary-text-color);padding-left:12px;margin-bottom:2px}adf-tags-creator .adf-existing-tags-panel .adf-tags-list{padding-left:12px;margin-top:-2px;padding-right:0;display:flex;flex-direction:column}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag{margin:0;padding:4px;font-size:14px;height:auto;width:unset;background-color:inherit;color:inherit}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag:not(.mdc-list-item--disabled):hover{cursor:pointer;background:var(--adf-theme-mat-grey-color-a200)}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag span{padding:0}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tags-creator-spinner{margin:auto;overflow:unset;min-height:62px}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .mdc-list-item--disabled .mdc-list-item__primary-text{opacity:1}adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden}adf-tags-creator [hidden]{visibility:hidden;display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i7$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: AutoFocusDirective, selector: "[adf-auto-focus]" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i3$2.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "role", "id", "aria-label", "aria-description", "value", "removable", "highlighted"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i3$2.MatChipListbox, selector: "mat-chip-listbox", inputs: ["tabIndex", "multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "directive", type: i3$2.MatChipRemove, selector: "[matChipRemove]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i3$1.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i3$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
13778
13784
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TagsCreatorComponent, decorators: [{
|
|
13779
13785
|
type: Component,
|
|
13780
13786
|
args: [{ selector: 'adf-tags-creator', standalone: true, imports: [
|
|
@@ -13788,7 +13794,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
13788
13794
|
MatIconModule,
|
|
13789
13795
|
MatListModule,
|
|
13790
13796
|
MatProgressSpinnerModule
|
|
13791
|
-
], encapsulation: ViewEncapsulation.None, template: "<div class=\"adf-tags-creation\">\n <div *ngIf=\"tagNameControlVisible\" class=\"adf-tag-name-field\">\n <input\n #tagNameInput\n class=\"adf-tag-search-field\"\n matInput\n autocomplete=\"off\"\n [formControl]=\"tagNameControl\"\n (keyup.enter)=\"addTag()\"\n adf-auto-focus\n placeholder=\"{{ 'TAG.TAGS_CREATOR.TAG_SEARCH_PLACEHOLDER' | translate }}\"\n />\n <mat-error *ngIf=\"tagNameControl.invalid && tagNameControl.touched\">{{ tagNameErrorMessageKey | translate }} </mat-error>\n </div>\n <p class=\"adf-no-tags-message\" *ngIf=\"showEmptyTagMessage\">\n {{ 'TAG.TAGS_CREATOR.NO_TAGS_CREATED' | translate }}\n </p>\n <div class=\"adf-tags-list\" [class.adf-tags-list-fixed]=\"!tagNameControlVisible\" #tagsList>\n <mat-chip-listbox *ngIf=\"tags.length > 0\">\n <mat-chip
|
|
13797
|
+
], encapsulation: ViewEncapsulation.None, template: "<div class=\"adf-tags-creation\">\n <div *ngIf=\"tagNameControlVisible\" class=\"adf-tag-name-field\">\n <input\n #tagNameInput\n class=\"adf-tag-search-field\"\n matInput\n autocomplete=\"off\"\n [formControl]=\"tagNameControl\"\n (keyup.enter)=\"addTag()\"\n adf-auto-focus\n placeholder=\"{{ 'TAG.TAGS_CREATOR.TAG_SEARCH_PLACEHOLDER' | translate }}\"\n />\n <mat-error *ngIf=\"tagNameControl.invalid && tagNameControl.touched\">{{ tagNameErrorMessageKey | translate }} </mat-error>\n </div>\n <p class=\"adf-no-tags-message\" *ngIf=\"showEmptyTagMessage\">\n {{ 'TAG.TAGS_CREATOR.NO_TAGS_CREATED' | translate }}\n </p>\n <div class=\"adf-tags-list\" [class.adf-tags-list-fixed]=\"!tagNameControlVisible\" #tagsList>\n <mat-chip-listbox *ngIf=\"tags.length > 0\">\n <mat-chip *ngFor=\"let tag of tags\" [disableRipple]=\"true\" [title]=\"tag\" class=\"adf-tags-chip\">\n {{ tag }}\n <button\n data-automation-id=\"remove-tag-button\"\n mat-icon-button\n (click)=\"removeTag(tag)\"\n [attr.title]=\"'TAG.TAGS_CREATOR.TOOLTIPS.DELETE_TAG' | translate\"\n [disabled]=\"disabledTagsRemoving\"\n matChipRemove>\n <mat-icon>close</mat-icon>\n </button>\n </mat-chip>\n </mat-chip-listbox>\n </div>\n</div>\n<div class=\"adf-existing-tags-panel\" *ngIf=\"existingTagsPanelVisible\">\n <span\n *ngIf=\"!spinnerVisible || existingTags\"\n class=\"adf-create-tag-label\"\n (click)=\"addTag()\"\n role=\"button\"\n tabindex=\"0\"\n (keyup.enter)=\"addTag()\"\n [hidden]=\"tagNameControl.invalid || typing\"\n >\n {{ 'TAG.TAGS_CREATOR.CREATE_TAG' | translate : { tag: tagNameControl.value } }}\n </span>\n <p *ngIf=\"!spinnerVisible && existingTags\" class=\"adf-existing-tags-label\">\n {{ (isOnlyCreateMode() ? 'TAG.TAGS_CREATOR.EXISTING_TAGS' : 'TAG.TAGS_CREATOR.EXISTING_TAGS_SELECTION') | translate }}\n </p>\n <div class=\"adf-tags-list\">\n <mat-list *ngIf=\"!spinnerVisible && existingTags\" [disabled]=\"isOnlyCreateMode()\">\n <mat-list-item *ngFor=\"let tagRow of existingTags\" class=\"adf-tag\" (click)=\"addExistingTagToTagsToAssign(tagRow)\">\n {{ tagRow.entry.tag }}\n </mat-list-item>\n <p *ngIf=\"!existingTags?.length\">{{ 'TAG.TAGS_CREATOR.NO_EXISTING_TAGS' | translate }}</p>\n </mat-list>\n <mat-spinner\n *ngIf=\"spinnerVisible\"\n class=\"adf-tags-creator-spinner\"\n [diameter]=\"50\"\n [attr.aria-label]=\"'TAG.TAGS_CREATOR.TAGS_LOADING' | translate\"\n >\n </mat-spinner>\n </div>\n</div>\n", styles: ["adf-tags-creator{display:block}adf-tags-creator .adf-no-tags-message{margin-top:28.5px;margin-bottom:0;height:30px}adf-tags-creator .adf-tag-name-field,adf-tags-creator .adf-tag-name-field[hidden]{display:flex;flex-direction:column;margin-right:12px}adf-tags-creator .adf-tag-search-field{background:var(--adf-metadata-buttons-background-color);border-radius:12px;padding:5px 6px;border:none;outline:none;font:inherit;color:currentcolor;margin:0;vertical-align:bottom;text-align:inherit;box-sizing:content-box}adf-tags-creator .adf-create-tag-label{color:var(--theme-primary-color);cursor:pointer;margin-top:-1px;padding-left:12px;overflow-wrap:anywhere;display:inline-block;padding-right:12px;overflow:auto}adf-tags-creator .adf-tags-list{margin-top:8px}adf-tags-creator .adf-tags-chip{height:auto}adf-tags-creator .adf-existing-tags-panel{border-top-left-radius:6px;border-top-right-radius:6px;width:100%}adf-tags-creator .adf-existing-tags-panel .adf-existing-tags-label{font-size:10px;color:var(--theme-secondary-text-color);padding-left:12px;margin-bottom:2px}adf-tags-creator .adf-existing-tags-panel .adf-tags-list{padding-left:12px;margin-top:-2px;padding-right:0;display:flex;flex-direction:column}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag{margin:0;padding:4px;font-size:14px;height:auto;width:unset;background-color:inherit;color:inherit}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag:not(.mdc-list-item--disabled):hover{cursor:pointer;background:var(--adf-theme-mat-grey-color-a200)}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tag span{padding:0}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .adf-tags-creator-spinner{margin:auto;overflow:unset;min-height:62px}adf-tags-creator .adf-existing-tags-panel .adf-tags-list .mdc-list-item--disabled .mdc-list-item__primary-text{opacity:1}adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,adf-tags-creator .mdc-evolution-chip-set .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden}adf-tags-creator [hidden]{visibility:hidden;display:none}\n"] }]
|
|
13792
13798
|
}], ctorParameters: function () { return [{ type: TagService }, { type: i1.NotificationService }]; }, propDecorators: { mode: [{
|
|
13793
13799
|
type: Input
|
|
13794
13800
|
}], disabledTagsRemoving: [{
|
|
@@ -25369,13 +25375,14 @@ class ContentTestingModule {
|
|
|
25369
25375
|
}
|
|
25370
25376
|
ContentTestingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ContentTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
25371
25377
|
ContentTestingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: ContentTestingModule, imports: [i1.AuthModule, NoopAnimationsModule,
|
|
25372
|
-
RouterTestingModule,
|
|
25378
|
+
RouterTestingModule,
|
|
25379
|
+
CoreModule,
|
|
25380
|
+
NoopTranslateModule,
|
|
25373
25381
|
ContentModule,
|
|
25374
|
-
MatIconTestingModule], exports: [NoopAnimationsModule,
|
|
25382
|
+
MatIconTestingModule], exports: [NoopAnimationsModule, CoreModule, ContentModule] });
|
|
25375
25383
|
ContentTestingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ContentTestingModule, providers: [
|
|
25376
25384
|
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
|
|
25377
25385
|
{ provide: AppConfigService, useClass: AppConfigServiceMock },
|
|
25378
|
-
{ provide: TranslationService, useClass: TranslationMock },
|
|
25379
25386
|
{ provide: CookieService, useClass: CookieServiceMock },
|
|
25380
25387
|
{
|
|
25381
25388
|
provide: APP_INITIALIZER,
|
|
@@ -25386,10 +25393,10 @@ ContentTestingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", ve
|
|
|
25386
25393
|
], imports: [AuthModule.forRoot({ useHash: true }),
|
|
25387
25394
|
NoopAnimationsModule,
|
|
25388
25395
|
RouterTestingModule,
|
|
25389
|
-
TranslateModule.forRoot(),
|
|
25390
25396
|
CoreModule,
|
|
25397
|
+
NoopTranslateModule,
|
|
25391
25398
|
ContentModule,
|
|
25392
|
-
MatIconTestingModule, NoopAnimationsModule,
|
|
25399
|
+
MatIconTestingModule, NoopAnimationsModule, CoreModule, ContentModule] });
|
|
25393
25400
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ContentTestingModule, decorators: [{
|
|
25394
25401
|
type: NgModule,
|
|
25395
25402
|
args: [{
|
|
@@ -25397,15 +25404,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
25397
25404
|
AuthModule.forRoot({ useHash: true }),
|
|
25398
25405
|
NoopAnimationsModule,
|
|
25399
25406
|
RouterTestingModule,
|
|
25400
|
-
TranslateModule.forRoot(),
|
|
25401
25407
|
CoreModule,
|
|
25408
|
+
NoopTranslateModule,
|
|
25402
25409
|
ContentModule,
|
|
25403
25410
|
MatIconTestingModule
|
|
25404
25411
|
],
|
|
25405
25412
|
providers: [
|
|
25406
25413
|
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
|
|
25407
25414
|
{ provide: AppConfigService, useClass: AppConfigServiceMock },
|
|
25408
|
-
{ provide: TranslationService, useClass: TranslationMock },
|
|
25409
25415
|
{ provide: CookieService, useClass: CookieServiceMock },
|
|
25410
25416
|
{
|
|
25411
25417
|
provide: APP_INITIALIZER,
|
|
@@ -25414,7 +25420,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
25414
25420
|
multi: true
|
|
25415
25421
|
}
|
|
25416
25422
|
],
|
|
25417
|
-
exports: [NoopAnimationsModule,
|
|
25423
|
+
exports: [NoopAnimationsModule, CoreModule, ContentModule]
|
|
25418
25424
|
}]
|
|
25419
25425
|
}] });
|
|
25420
25426
|
|