@valtimo/dossier-management 10.6.0 → 10.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/dossier-management-assignee/dossier-management-assignee.component.mjs +21 -13
- package/esm2020/lib/dossier-management-connect-modal/dossier-management-connect-modal.component.mjs +4 -4
- package/esm2020/lib/dossier-management-detail-container/dossier-management-detail-container.component.mjs +14 -10
- package/esm2020/lib/dossier-management-detail-container/tabs/dossier-management-detail/dossier-management-detail.component.mjs +4 -4
- package/esm2020/lib/dossier-management-detail-container/tabs/dossier-management-list-columns/dossier-management-list-columns.component.mjs +7 -11
- package/esm2020/lib/dossier-management-detail-container/tabs/dossier-management-search-fields/dossier-management-search-fields.component.mjs +19 -25
- package/esm2020/lib/dossier-management-link-process/dossier-management-link-process.component.mjs +4 -4
- package/esm2020/lib/dossier-management-list/dossier-management-list.component.mjs +4 -4
- package/esm2020/lib/dossier-management-remove-modal/dossier-management-remove-modal.component.mjs +4 -4
- package/esm2020/lib/dossier-management-roles/dossier-management-roles.component.mjs +4 -4
- package/esm2020/lib/dossier-management-routing.module.mjs +6 -6
- package/esm2020/lib/dossier-management-upload/dossier-management-upload.component.mjs +4 -4
- package/esm2020/lib/dossier-management.module.mjs +9 -9
- package/esm2020/lib/tab.service.mjs +4 -4
- package/fesm2015/valtimo-dossier-management.mjs +93 -92
- package/fesm2015/valtimo-dossier-management.mjs.map +1 -1
- package/fesm2020/valtimo-dossier-management.mjs +93 -92
- package/fesm2020/valtimo-dossier-management.mjs.map +1 -1
- package/lib/dossier-management-assignee/dossier-management-assignee.component.d.ts +4 -2
- package/lib/dossier-management-assignee/dossier-management-assignee.component.d.ts.map +1 -1
- package/lib/dossier-management-detail-container/dossier-management-detail-container.component.d.ts +3 -1
- package/lib/dossier-management-detail-container/dossier-management-detail-container.component.d.ts.map +1 -1
- package/lib/dossier-management.module.d.ts +1 -1
- package/package.json +4 -4
|
@@ -117,12 +117,10 @@ export class DossierManagementSearchFieldsComponent {
|
|
|
117
117
|
text: this.translateService.instant(`searchFieldsOverview.${fieldType}`),
|
|
118
118
|
}));
|
|
119
119
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}));
|
|
125
|
-
}
|
|
120
|
+
return this.ALL_FIELD_TYPES.map(fieldType => ({
|
|
121
|
+
id: fieldType,
|
|
122
|
+
text: this.translateService.instant(`searchFieldsOverview.${fieldType}`),
|
|
123
|
+
}));
|
|
126
124
|
}));
|
|
127
125
|
this.MATCH_TYPES = ['exact', 'like'];
|
|
128
126
|
this.matchTypeItems$ = this.translateService
|
|
@@ -183,21 +181,17 @@ export class DossierManagementSearchFieldsComponent {
|
|
|
183
181
|
if (!formData || !formData.dropdownDataProvider) {
|
|
184
182
|
return of([]);
|
|
185
183
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
return [];
|
|
198
|
-
}
|
|
199
|
-
}));
|
|
200
|
-
}
|
|
184
|
+
return this.documentService
|
|
185
|
+
.getDropdownData(formData.dropdownDataProvider, documentDefinitionName, formData.key)
|
|
186
|
+
.pipe(map(dropdownData => {
|
|
187
|
+
if (dropdownData) {
|
|
188
|
+
return Object.keys(dropdownData).map(dropdownFieldKey => ({
|
|
189
|
+
key: dropdownFieldKey,
|
|
190
|
+
value: dropdownData[dropdownFieldKey],
|
|
191
|
+
}));
|
|
192
|
+
}
|
|
193
|
+
return [];
|
|
194
|
+
}));
|
|
201
195
|
}));
|
|
202
196
|
this.showMatchTypes$ = combineLatest([
|
|
203
197
|
this.dataTypeIsText$,
|
|
@@ -406,9 +400,9 @@ export class DossierManagementSearchFieldsComponent {
|
|
|
406
400
|
this.refreshSearchFields$.next(null);
|
|
407
401
|
}
|
|
408
402
|
}
|
|
409
|
-
DossierManagementSearchFieldsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
410
|
-
DossierManagementSearchFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: DossierManagementSearchFieldsComponent, selector: "valtimo-dossier-management-search-fields", outputs: { searchField: "searchField" }, viewQueries: [{ propertyName: "moveRowButtonsTemplateRef", first: true, predicate: ["moveRowButtons"], descendants: true }, { propertyName: "modal", first: true, predicate: ["searchFieldModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n searchFields: translatedSearchFields$ | async,\n fields: fields$ | async,\n downloadUrl: downloadUrl$ | async,\n downloadName: downloadName$ | async,\n documentDefinitionName: documentDefinitionName$ | async,\n valid: valid$ | async,\n disableInput: disableInput$ | async\n } as obs\"\n>\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"modal; context: {obs: obs}\"></ng-container>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <div class=\"btn-group mt-m3px mb-3 pr-2 float-right\">\n <a\n class=\"btn btn-secondary btn-space\"\n [href]=\"obs.downloadUrl\"\n [download]=\"obs.downloadName\"\n [ngClass]=\"{\n disabled:\n !obs.downloadUrl || !obs.downloadName || obs.searchFields.length <= 0 || obs.disableInput\n }\"\n >\n <i class=\"icon mdi mdi-download mr-1\"></i>\n {{ 'searchFields.downloadButtonText' | translate }}\n </a>\n <button\n (click)=\"searchFieldClicked($event, true)\"\n class=\"btn btn-primary btn-space\"\n [ngClass]=\"{disabled: loadingSearchFields || obs.disableInput}\"\n >\n <i class=\"icon mdi mdi-plus mr-1\"></i>\n {{ 'searchFieldsOverview.addRow' | translate }}\n </button>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-list\n [items]=\"obs.searchFields\"\n [fields]=\"obs.fields\"\n [viewMode]=\"false\"\n [header]=\"false\"\n (rowClicked)=\"searchFieldClicked($event, false)\"\n *ngIf=\"obs.searchFields; else loading\"\n [lastColumnTemplate]=\"moveRowButtonsTemplateRef\"\n >\n </valtimo-list>\n</ng-template>\n\n<ng-template #moveRowButtons let-index=\"index\" let-length=\"length\">\n <div\n class=\"move-row-buttons\"\n *ngIf=\"{\n disableInput: disableInput$ | async,\n documentDefinitionName: documentDefinitionName$ | async\n } as obs\"\n >\n <i\n class=\"mdi mdi-arrow-up-bold btn btn-outline-primary mr-1\"\n (click)=\"moveRow(index, true, $event, obs.documentDefinitionName)\"\n [ngClass]=\"{'disabled disabled-move-row-button': index === 0 || obs.disableInput}\"\n ></i>\n <i\n class=\"mdi mdi-arrow-down-bold btn btn-outline-secondary\"\n (click)=\"moveRow(index, false, $event, obs.documentDefinitionName)\"\n [ngClass]=\"{'disabled disabled-move-row-button': index === length - 1 || obs.disableInput}\"\n ></i>\n </div>\n</ng-template>\n\n<ng-template #modal let-obs=\"obs\">\n <valtimo-modal\n #searchFieldModal\n elementId=\"searchFieldModal\"\n [title]=\"\n searchFieldActionTypeIsAdd\n ? ('searchFieldsOverview.addRow' | translate)\n : ('searchFieldsOverview.edit' | translate)\n \"\n [showFooter]=\"true\"\n >\n <div body class=\"mt-2\">\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"showSearchFieldsForm && {searchField: selectedSearchField$ | async} as searchObs\"\n >\n <v-input\n name=\"title\"\n [title]=\"'searchFieldsOverview.title' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.title\"\n [disabled]=\"obs.disableInput\"\n [required]=\"false\"\n [fullWidth]=\"true\"\n [tooltip]=\"'searchFieldsOverviewTooltips.title' | translate\"\n >\n </v-input>\n <v-input\n name=\"key\"\n [title]=\"'searchFieldsOverview.key' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.key\"\n [disabled]=\"obs.disableInput || !searchFieldActionTypeIsAdd\"\n [required]=\"true\"\n [widthPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n >\n </v-input>\n <v-input\n name=\"path\"\n [title]=\"'searchFieldsOverview.path' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.path\"\n [disabled]=\"obs.disableInput\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [tooltip]=\"'searchFieldsOverviewTooltips.path' | translate\"\n >\n </v-input>\n <v-select\n *ngIf=\"dataTypeItems$ | async as dataTypeItems\"\n [items]=\"dataTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dataType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"dataType\"\n [defaultSelectionId]=\"searchObs.searchField?.dataType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dataType' | translate\"\n ></v-select>\n <v-select\n *ngIf=\"(showMatchTypes$ | async) && (matchTypeItems$ | async) as matchTypeItems\"\n [items]=\"matchTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.matchType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"matchType\"\n [defaultSelectionId]=\"searchObs.searchField?.matchType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.matchType' | translate\"\n ></v-select>\n <v-select\n *ngIf=\"fieldTypeItems$ | async as fieldTypeItems\"\n [items]=\"fieldTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.fieldType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"fieldType\"\n [defaultSelectionId]=\"searchObs.searchField?.fieldType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.fieldType' | translate\"\n ></v-select>\n <v-select\n *ngIf=\"\n (fieldTypeIsDropdown$ | async) &&\n (dropdownDataProviderNames$ | async) as dropdownDataProviderNames\n \"\n [items]=\"dropdownDataProviderNames\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dropdownDataProvider' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"false\"\n name=\"dropdownDataProvider\"\n [defaultSelectionId]=\"searchObs.searchField?.dropdownDataProvider\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownDataProvider' | translate\"\n ></v-select>\n <v-multi-input\n *ngIf=\"\n (showInputDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n name=\"dropdownValues\"\n [title]=\"'searchFieldsOverview.dropdownListValues' | translate\"\n type=\"keyValue\"\n [disabled]=\"obs.disableInput\"\n [defaultValues]=\"initialDropdownValues\"\n [margin]=\"true\"\n [required]=\"false\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownListValues' | translate\"\n (valueChange)=\"dropdownDatalistChange($event)\"\n >\n </v-multi-input>\n <v-table\n *ngIf=\"\n (showReadonlyDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n [items]=\"initialDropdownValues\"\n [columns]=\"dropdownColumns$ | async\"\n [showEditButtons]=\"false\"\n [itemsTranslationKey]=\"'searchFieldsOverview'\"\n [showPagination]=\"false\"\n [mobileBreakpointPx]=\"200\"\n ></v-table>\n </v-form>\n </div>\n <div footer>\n <div class=\"col-12 p-0\">\n <ng-container *ngTemplateOutlet=\"buttonsFooterModal; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n </valtimo-modal>\n</ng-template>\n\n<ng-template #buttonsFooterModal let-obs=\"obs\">\n <div class=\"buttons-container\" *ngIf=\"{searchField: selectedSearchField$ | async} as searchObs\">\n <div class=\"right-buttons\">\n <button\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"!searchFieldActionTypeIsAdd\"\n [disabled]=\"obs.disableInput\"\n (click)=\"deleteSelectedSearchField(obs.documentDefinitionName, searchObs.searchField)\"\n >\n {{ 'searchFieldsOverview.delete' | translate }}\n </button>\n <button\n (click)=\"saveSearchField(obs.documentDefinitionName)\"\n type=\"button\"\n class=\"btn btn-primary btn-space mr-0\"\n [disabled]=\"obs.disableInput || !obs.valid\"\n >\n {{ 'searchFieldsOverview.submit' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"mb-3\">\n <valtimo-spinner></valtimo-spinner>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */valtimo-list::ng-deep table{border-top:1px solid rgba(0,0,0,.125)}.modal-header::ng-deep{background-color:#f3f4f7}::ng-deep .disabled-move-row-button{cursor:default!important;filter:grayscale(1);opacity:.5}::ng-deep .move-row-buttons{display:flex;flex-direction:row;justify-content:flex-end;padding-right:13px}::ng-deep .tab-container{min-height:unset!important}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.ListComponent, selector: "valtimo-list", inputs: ["items", "fields", "pagination", "viewMode", "isSearchable", "header", "actions", "paginationIdentifier", "initialSortState", "lastColumnTemplate"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged"] }, { kind: "component", type: i6.ModalComponent, selector: "valtimo-modal", inputs: ["elementId", "title", "subtitle", "templateBelowSubtitle", "showFooter"] }, { kind: "component", type: i7.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "clearable", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin"], outputs: ["selectedChange", "clear"] }, { kind: "component", type: i6.SpinnerComponent, selector: "valtimo-spinner", inputs: ["useBootstrapSpinner", "name", "type", "size", "color", "bdColor", "fullScreen", "noMarginTop"] }, { kind: "component", type: i7.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$"], outputs: ["valueChange"] }, { kind: "component", type: i7.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "component", type: i7.MultiInputComponent, selector: "v-multi-input", inputs: ["name", "title", "titleTranslationKey", "type", "initialAmountOfRows", "minimumAmountOfRows", "maxRows", "addRowText", "addRowTranslationKey", "deleteRowText", "deleteRowTranslationKey", "disabled", "defaultValues", "margin", "tooltip", "required"], outputs: ["valueChange"] }, { kind: "component", type: i7.TableComponent, selector: "v-table", inputs: ["items", "columns", "loading", "showEditButtons", "showPagination", "editButtonTranslationKey", "itemsTranslationKey", "noResultsTranslationKey", "mobileBreakpointPx", "amountOfLoadingRows", "collectionSize", "maxPaginationItemSize", "page", "size"], outputs: ["editButtonClicked", "paginationSizeSet", "paginationPageSet"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
|
|
411
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
403
|
+
DossierManagementSearchFieldsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DossierManagementSearchFieldsComponent, deps: [{ token: i1.DocumentService }, { token: i2.ActivatedRoute }, { token: i3.TranslateService }, { token: i4.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
404
|
+
DossierManagementSearchFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DossierManagementSearchFieldsComponent, selector: "valtimo-dossier-management-search-fields", outputs: { searchField: "searchField" }, viewQueries: [{ propertyName: "moveRowButtonsTemplateRef", first: true, predicate: ["moveRowButtons"], descendants: true }, { propertyName: "modal", first: true, predicate: ["searchFieldModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n searchFields: translatedSearchFields$ | async,\n fields: fields$ | async,\n downloadUrl: downloadUrl$ | async,\n downloadName: downloadName$ | async,\n documentDefinitionName: documentDefinitionName$ | async,\n valid: valid$ | async,\n disableInput: disableInput$ | async\n } as obs\"\n>\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"modal; context: {obs: obs}\"></ng-container>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <div class=\"btn-group mt-m3px mb-3 pr-2 float-right\">\n <a\n class=\"btn btn-secondary btn-space\"\n [href]=\"obs.downloadUrl\"\n [download]=\"obs.downloadName\"\n [ngClass]=\"{\n disabled:\n !obs.downloadUrl || !obs.downloadName || obs.searchFields.length <= 0 || obs.disableInput\n }\"\n >\n <i class=\"icon mdi mdi-download mr-1\"></i>\n {{ 'searchFields.downloadButtonText' | translate }}\n </a>\n <button\n (click)=\"searchFieldClicked($event, true)\"\n class=\"btn btn-primary btn-space\"\n [ngClass]=\"{disabled: loadingSearchFields || obs.disableInput}\"\n >\n <i class=\"icon mdi mdi-plus mr-1\"></i>\n {{ 'searchFieldsOverview.addRow' | translate }}\n </button>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-list\n [items]=\"obs.searchFields\"\n [fields]=\"obs.fields\"\n [viewMode]=\"false\"\n [header]=\"false\"\n (rowClicked)=\"searchFieldClicked($event, false)\"\n *ngIf=\"obs.searchFields; else loading\"\n [lastColumnTemplate]=\"moveRowButtonsTemplateRef\"\n >\n </valtimo-list>\n</ng-template>\n\n<ng-template #moveRowButtons let-index=\"index\" let-length=\"length\">\n <div\n class=\"move-row-buttons\"\n *ngIf=\"{\n disableInput: disableInput$ | async,\n documentDefinitionName: documentDefinitionName$ | async\n } as obs\"\n >\n <i\n class=\"mdi mdi-arrow-up-bold btn btn-outline-primary mr-1\"\n (click)=\"moveRow(index, true, $event, obs.documentDefinitionName)\"\n [ngClass]=\"{'disabled disabled-move-row-button': index === 0 || obs.disableInput}\"\n ></i>\n <i\n class=\"mdi mdi-arrow-down-bold btn btn-outline-secondary\"\n (click)=\"moveRow(index, false, $event, obs.documentDefinitionName)\"\n [ngClass]=\"{'disabled disabled-move-row-button': index === length - 1 || obs.disableInput}\"\n ></i>\n </div>\n</ng-template>\n\n<ng-template #modal let-obs=\"obs\">\n <valtimo-modal\n #searchFieldModal\n elementId=\"searchFieldModal\"\n [title]=\"\n searchFieldActionTypeIsAdd\n ? ('searchFieldsOverview.addRow' | translate)\n : ('searchFieldsOverview.edit' | translate)\n \"\n [showFooter]=\"true\"\n >\n <div body class=\"mt-2\">\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"showSearchFieldsForm && {searchField: selectedSearchField$ | async} as searchObs\"\n >\n <v-input\n name=\"title\"\n [title]=\"'searchFieldsOverview.title' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.title\"\n [disabled]=\"obs.disableInput\"\n [required]=\"false\"\n [fullWidth]=\"true\"\n [tooltip]=\"'searchFieldsOverviewTooltips.title' | translate\"\n >\n </v-input>\n <v-input\n name=\"key\"\n [title]=\"'searchFieldsOverview.key' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.key\"\n [disabled]=\"obs.disableInput || !searchFieldActionTypeIsAdd\"\n [required]=\"true\"\n [widthPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n >\n </v-input>\n <v-input\n name=\"path\"\n [title]=\"'searchFieldsOverview.path' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.path\"\n [disabled]=\"obs.disableInput\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [tooltip]=\"'searchFieldsOverviewTooltips.path' | translate\"\n >\n </v-input>\n <v-select\n *ngIf=\"dataTypeItems$ | async as dataTypeItems\"\n [items]=\"dataTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dataType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"dataType\"\n [defaultSelectionId]=\"searchObs.searchField?.dataType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dataType' | translate\"\n ></v-select>\n <v-select\n *ngIf=\"(showMatchTypes$ | async) && (matchTypeItems$ | async) as matchTypeItems\"\n [items]=\"matchTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.matchType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"matchType\"\n [defaultSelectionId]=\"searchObs.searchField?.matchType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.matchType' | translate\"\n ></v-select>\n <v-select\n *ngIf=\"fieldTypeItems$ | async as fieldTypeItems\"\n [items]=\"fieldTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.fieldType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"fieldType\"\n [defaultSelectionId]=\"searchObs.searchField?.fieldType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.fieldType' | translate\"\n ></v-select>\n <v-select\n *ngIf=\"\n (fieldTypeIsDropdown$ | async) &&\n (dropdownDataProviderNames$ | async) as dropdownDataProviderNames\n \"\n [items]=\"dropdownDataProviderNames\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dropdownDataProvider' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"false\"\n name=\"dropdownDataProvider\"\n [defaultSelectionId]=\"searchObs.searchField?.dropdownDataProvider\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownDataProvider' | translate\"\n ></v-select>\n <v-multi-input\n *ngIf=\"\n (showInputDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n name=\"dropdownValues\"\n [title]=\"'searchFieldsOverview.dropdownListValues' | translate\"\n type=\"keyValue\"\n [disabled]=\"obs.disableInput\"\n [defaultValues]=\"initialDropdownValues\"\n [margin]=\"true\"\n [required]=\"false\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownListValues' | translate\"\n (valueChange)=\"dropdownDatalistChange($event)\"\n >\n </v-multi-input>\n <v-table\n *ngIf=\"\n (showReadonlyDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n [items]=\"initialDropdownValues\"\n [columns]=\"dropdownColumns$ | async\"\n [showEditButtons]=\"false\"\n [itemsTranslationKey]=\"'searchFieldsOverview'\"\n [showPagination]=\"false\"\n [mobileBreakpointPx]=\"200\"\n ></v-table>\n </v-form>\n </div>\n <div footer>\n <div class=\"col-12 p-0\">\n <ng-container *ngTemplateOutlet=\"buttonsFooterModal; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n </valtimo-modal>\n</ng-template>\n\n<ng-template #buttonsFooterModal let-obs=\"obs\">\n <div class=\"buttons-container\" *ngIf=\"{searchField: selectedSearchField$ | async} as searchObs\">\n <div class=\"right-buttons\">\n <button\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"!searchFieldActionTypeIsAdd\"\n [disabled]=\"obs.disableInput\"\n (click)=\"deleteSelectedSearchField(obs.documentDefinitionName, searchObs.searchField)\"\n >\n {{ 'searchFieldsOverview.delete' | translate }}\n </button>\n <button\n (click)=\"saveSearchField(obs.documentDefinitionName)\"\n type=\"button\"\n class=\"btn btn-primary btn-space mr-0\"\n [disabled]=\"obs.disableInput || !obs.valid\"\n >\n {{ 'searchFieldsOverview.submit' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"mb-3\">\n <valtimo-spinner></valtimo-spinner>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */valtimo-list::ng-deep table{border-top:1px solid rgba(0,0,0,.125)}.modal-header::ng-deep{background-color:#f3f4f7}::ng-deep .disabled-move-row-button{cursor:default!important;filter:grayscale(1);opacity:.5}::ng-deep .move-row-buttons{display:flex;flex-direction:row;justify-content:flex-end;padding-right:13px}::ng-deep .tab-container{min-height:unset!important}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.ListComponent, selector: "valtimo-list", inputs: ["items", "fields", "pagination", "viewMode", "isSearchable", "header", "actions", "paginationIdentifier", "initialSortState", "lastColumnTemplate"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged"] }, { kind: "component", type: i6.ModalComponent, selector: "valtimo-modal", inputs: ["elementId", "title", "subtitle", "templateBelowSubtitle", "showFooter"] }, { kind: "component", type: i7.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "clearable", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin"], outputs: ["selectedChange", "clear"] }, { kind: "component", type: i6.SpinnerComponent, selector: "valtimo-spinner", inputs: ["useBootstrapSpinner", "name", "type", "size", "color", "bdColor", "fullScreen", "noMarginTop"] }, { kind: "component", type: i7.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$"], outputs: ["valueChange"] }, { kind: "component", type: i7.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "component", type: i7.MultiInputComponent, selector: "v-multi-input", inputs: ["name", "title", "titleTranslationKey", "type", "initialAmountOfRows", "minimumAmountOfRows", "maxRows", "addRowText", "addRowTranslationKey", "deleteRowText", "deleteRowTranslationKey", "disabled", "defaultValues", "margin", "tooltip", "required"], outputs: ["valueChange"] }, { kind: "component", type: i7.TableComponent, selector: "v-table", inputs: ["items", "columns", "loading", "showEditButtons", "showPagination", "editButtonTranslationKey", "itemsTranslationKey", "noResultsTranslationKey", "mobileBreakpointPx", "amountOfLoadingRows", "collectionSize", "maxPaginationItemSize", "page", "size"], outputs: ["editButtonClicked", "paginationSizeSet", "paginationPageSet"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
|
|
405
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DossierManagementSearchFieldsComponent, decorators: [{
|
|
412
406
|
type: Component,
|
|
413
407
|
args: [{ selector: 'valtimo-dossier-management-search-fields', template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n searchFields: translatedSearchFields$ | async,\n fields: fields$ | async,\n downloadUrl: downloadUrl$ | async,\n downloadName: downloadName$ | async,\n documentDefinitionName: documentDefinitionName$ | async,\n valid: valid$ | async,\n disableInput: disableInput$ | async\n } as obs\"\n>\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"modal; context: {obs: obs}\"></ng-container>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <div class=\"btn-group mt-m3px mb-3 pr-2 float-right\">\n <a\n class=\"btn btn-secondary btn-space\"\n [href]=\"obs.downloadUrl\"\n [download]=\"obs.downloadName\"\n [ngClass]=\"{\n disabled:\n !obs.downloadUrl || !obs.downloadName || obs.searchFields.length <= 0 || obs.disableInput\n }\"\n >\n <i class=\"icon mdi mdi-download mr-1\"></i>\n {{ 'searchFields.downloadButtonText' | translate }}\n </a>\n <button\n (click)=\"searchFieldClicked($event, true)\"\n class=\"btn btn-primary btn-space\"\n [ngClass]=\"{disabled: loadingSearchFields || obs.disableInput}\"\n >\n <i class=\"icon mdi mdi-plus mr-1\"></i>\n {{ 'searchFieldsOverview.addRow' | translate }}\n </button>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-list\n [items]=\"obs.searchFields\"\n [fields]=\"obs.fields\"\n [viewMode]=\"false\"\n [header]=\"false\"\n (rowClicked)=\"searchFieldClicked($event, false)\"\n *ngIf=\"obs.searchFields; else loading\"\n [lastColumnTemplate]=\"moveRowButtonsTemplateRef\"\n >\n </valtimo-list>\n</ng-template>\n\n<ng-template #moveRowButtons let-index=\"index\" let-length=\"length\">\n <div\n class=\"move-row-buttons\"\n *ngIf=\"{\n disableInput: disableInput$ | async,\n documentDefinitionName: documentDefinitionName$ | async\n } as obs\"\n >\n <i\n class=\"mdi mdi-arrow-up-bold btn btn-outline-primary mr-1\"\n (click)=\"moveRow(index, true, $event, obs.documentDefinitionName)\"\n [ngClass]=\"{'disabled disabled-move-row-button': index === 0 || obs.disableInput}\"\n ></i>\n <i\n class=\"mdi mdi-arrow-down-bold btn btn-outline-secondary\"\n (click)=\"moveRow(index, false, $event, obs.documentDefinitionName)\"\n [ngClass]=\"{'disabled disabled-move-row-button': index === length - 1 || obs.disableInput}\"\n ></i>\n </div>\n</ng-template>\n\n<ng-template #modal let-obs=\"obs\">\n <valtimo-modal\n #searchFieldModal\n elementId=\"searchFieldModal\"\n [title]=\"\n searchFieldActionTypeIsAdd\n ? ('searchFieldsOverview.addRow' | translate)\n : ('searchFieldsOverview.edit' | translate)\n \"\n [showFooter]=\"true\"\n >\n <div body class=\"mt-2\">\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"showSearchFieldsForm && {searchField: selectedSearchField$ | async} as searchObs\"\n >\n <v-input\n name=\"title\"\n [title]=\"'searchFieldsOverview.title' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.title\"\n [disabled]=\"obs.disableInput\"\n [required]=\"false\"\n [fullWidth]=\"true\"\n [tooltip]=\"'searchFieldsOverviewTooltips.title' | translate\"\n >\n </v-input>\n <v-input\n name=\"key\"\n [title]=\"'searchFieldsOverview.key' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.key\"\n [disabled]=\"obs.disableInput || !searchFieldActionTypeIsAdd\"\n [required]=\"true\"\n [widthPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n >\n </v-input>\n <v-input\n name=\"path\"\n [title]=\"'searchFieldsOverview.path' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.path\"\n [disabled]=\"obs.disableInput\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [tooltip]=\"'searchFieldsOverviewTooltips.path' | translate\"\n >\n </v-input>\n <v-select\n *ngIf=\"dataTypeItems$ | async as dataTypeItems\"\n [items]=\"dataTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dataType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"dataType\"\n [defaultSelectionId]=\"searchObs.searchField?.dataType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dataType' | translate\"\n ></v-select>\n <v-select\n *ngIf=\"(showMatchTypes$ | async) && (matchTypeItems$ | async) as matchTypeItems\"\n [items]=\"matchTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.matchType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"matchType\"\n [defaultSelectionId]=\"searchObs.searchField?.matchType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.matchType' | translate\"\n ></v-select>\n <v-select\n *ngIf=\"fieldTypeItems$ | async as fieldTypeItems\"\n [items]=\"fieldTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.fieldType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"fieldType\"\n [defaultSelectionId]=\"searchObs.searchField?.fieldType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.fieldType' | translate\"\n ></v-select>\n <v-select\n *ngIf=\"\n (fieldTypeIsDropdown$ | async) &&\n (dropdownDataProviderNames$ | async) as dropdownDataProviderNames\n \"\n [items]=\"dropdownDataProviderNames\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dropdownDataProvider' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"false\"\n name=\"dropdownDataProvider\"\n [defaultSelectionId]=\"searchObs.searchField?.dropdownDataProvider\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownDataProvider' | translate\"\n ></v-select>\n <v-multi-input\n *ngIf=\"\n (showInputDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n name=\"dropdownValues\"\n [title]=\"'searchFieldsOverview.dropdownListValues' | translate\"\n type=\"keyValue\"\n [disabled]=\"obs.disableInput\"\n [defaultValues]=\"initialDropdownValues\"\n [margin]=\"true\"\n [required]=\"false\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownListValues' | translate\"\n (valueChange)=\"dropdownDatalistChange($event)\"\n >\n </v-multi-input>\n <v-table\n *ngIf=\"\n (showReadonlyDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n [items]=\"initialDropdownValues\"\n [columns]=\"dropdownColumns$ | async\"\n [showEditButtons]=\"false\"\n [itemsTranslationKey]=\"'searchFieldsOverview'\"\n [showPagination]=\"false\"\n [mobileBreakpointPx]=\"200\"\n ></v-table>\n </v-form>\n </div>\n <div footer>\n <div class=\"col-12 p-0\">\n <ng-container *ngTemplateOutlet=\"buttonsFooterModal; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n </valtimo-modal>\n</ng-template>\n\n<ng-template #buttonsFooterModal let-obs=\"obs\">\n <div class=\"buttons-container\" *ngIf=\"{searchField: selectedSearchField$ | async} as searchObs\">\n <div class=\"right-buttons\">\n <button\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"!searchFieldActionTypeIsAdd\"\n [disabled]=\"obs.disableInput\"\n (click)=\"deleteSelectedSearchField(obs.documentDefinitionName, searchObs.searchField)\"\n >\n {{ 'searchFieldsOverview.delete' | translate }}\n </button>\n <button\n (click)=\"saveSearchField(obs.documentDefinitionName)\"\n type=\"button\"\n class=\"btn btn-primary btn-space mr-0\"\n [disabled]=\"obs.disableInput || !obs.valid\"\n >\n {{ 'searchFieldsOverview.submit' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"mb-3\">\n <valtimo-spinner></valtimo-spinner>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */valtimo-list::ng-deep table{border-top:1px solid rgba(0,0,0,.125)}.modal-header::ng-deep{background-color:#f3f4f7}::ng-deep .disabled-move-row-button{cursor:default!important;filter:grayscale(1);opacity:.5}::ng-deep .move-row-buttons{display:flex;flex-direction:row;justify-content:flex-end;padding-right:13px}::ng-deep .tab-container{min-height:unset!important}\n"] }]
|
|
414
408
|
}], ctorParameters: function () { return [{ type: i1.DocumentService }, { type: i2.ActivatedRoute }, { type: i3.TranslateService }, { type: i4.DomSanitizer }]; }, propDecorators: { moveRowButtonsTemplateRef: [{
|
|
@@ -420,4 +414,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
420
414
|
}], searchField: [{
|
|
421
415
|
type: Output
|
|
422
416
|
}] } });
|
|
423
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyLW1hbmFnZW1lbnQvc3JjL2xpYi9kb3NzaWVyLW1hbmFnZW1lbnQtZGV0YWlsLWNvbnRhaW5lci90YWJzL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvZG9zc2llci1tYW5hZ2VtZW50LWRldGFpbC1jb250YWluZXIvdGFicy9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUdaLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBRUgsRUFBRSxFQUNGLFlBQVksRUFDWixTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBbUJkLE1BQU0sT0FBTyxzQ0FBc0M7SUFzUWpELFlBQ21CLGVBQWdDLEVBQ2hDLEtBQXFCLEVBQ3JCLGdCQUFrQyxFQUNsQyxTQUF1QjtRQUh2QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFr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LFNBQVM7K0JBQ0UsMENBQTBDOzZMQUtoQix5QkFBeUI7c0JBQTVELFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNJLEtBQUs7c0JBQW5DLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUVuQixXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFN1YnNjcmlwdGlvbixcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7TGlzdEZpZWxkLCBNb2RhbENvbXBvbmVudH0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgRGVmaW5pdGlvbkNvbHVtbixcbiAgU2VhcmNoRmllbGQsXG4gIFNlYXJjaEZpZWxkRGF0YVR5cGUsXG4gIFNlYXJjaEZpZWxkRmllbGRUeXBlLFxuICBTZWFyY2hGaWVsZE1hdGNoVHlwZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7RG9tU2FuaXRpemVyLCBTYWZlVXJsfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7TXVsdGlJbnB1dE91dHB1dCwgTXVsdGlJbnB1dFZhbHVlcywgU2VsZWN0SXRlbSwgVGFibGVDb2x1bW59IGZyb20gJ0B2YWx0aW1vL3VzZXItaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERvc3NpZXJNYW5hZ2VtZW50U2VhcmNoRmllbGRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCdtb3ZlUm93QnV0dG9ucycpIHB1YmxpYyBtb3ZlUm93QnV0dG9uc1RlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdzZWFyY2hGaWVsZE1vZGFsJykgbW9kYWw6IE1vZGFsQ29tcG9uZW50O1xuXG4gIEBPdXRwdXQoKSBzZWFyY2hGaWVsZDogRXZlbnRFbWl0dGVyPFNlYXJjaEZpZWxkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICByZWFkb25seSBkb3dubG9hZE5hbWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgZG93bmxvYWRVcmwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTYWZlVXJsPih1bmRlZmluZWQpO1xuICByZWFkb25seSBkaXNhYmxlSW5wdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkU2VhcmNoRmllbGQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hGaWVsZCB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBmb3JtRGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlYXJjaEZpZWxkPihudWxsKTtcbiAgcmVhZG9ubHkgdmFsaWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgQ09MVU1OUzogQXJyYXk8RGVmaW5pdGlvbkNvbHVtbj4gPSBbXG4gICAge1xuICAgICAgdmlld1R5cGU6ICdzdHJpbmcnLFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgcHJvcGVydHlOYW1lOiAndGl0bGUnLFxuICAgICAgdHJhbnNsYXRpb25LZXk6ICd0aXRsZScsXG4gICAgfSxcbiAgICB7XG4gICAgICB2aWV3VHlwZTogJ3N0cmluZycsXG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICBwcm9wZXJ0eU5hbWU6ICdrZXknLFxuICAgICAgdHJhbnNsYXRpb25LZXk6ICdrZXknLFxuICAgIH0sXG4gICAge1xuICAgICAgdmlld1R5cGU6ICdzdHJpbmcnLFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgcHJvcGVydHlOYW1lOiAncGF0aCcsXG4gICAgICB0cmFuc2xhdGlvbktleTogJ3BhdGgnLFxuICAgIH0sXG4gICAge1xuICAgICAgdmlld1R5cGU6ICdzdHJpbmcnLFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgcHJvcGVydHlOYW1lOiAnZGF0YVR5cGUnLFxuICAgICAgdHJhbnNsYXRpb25LZXk6ICdkYXRhVHlwZScsXG4gICAgfSxcbiAgICB7XG4gICAgICB2aWV3VHlwZTogJ3N0cmluZycsXG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICBwcm9wZXJ0eU5hbWU6ICdmaWVsZFR5cGUnLFxuICAgICAgdHJhbnNsYXRpb25LZXk6ICdmaWVsZFR5cGUnLFxuICAgIH0sXG4gIF07XG5cbiAgcmVhZG9ubHkgZHJvcGRvd25Db2x1bW5zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8VGFibGVDb2x1bW4+PihbXG4gICAge1xuICAgICAgbGFiZWxUcmFuc2xhdGlvbktleTogJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmlkJyxcbiAgICAgIGRhdGFLZXk6ICdrZXknLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWxUcmFuc2xhdGlvbktleTogJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnRleHQnLFxuICAgICAgZGF0YUtleTogJ3ZhbHVlJyxcbiAgICB9LFxuICBdKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IERBVEFfVFlQRVM6IEFycmF5PFNlYXJjaEZpZWxkRGF0YVR5cGU+ID0gW1xuICAgICd0ZXh0JyxcbiAgICAnbnVtYmVyJyxcbiAgICAnZGF0ZScsXG4gICAgJ2RhdGV0aW1lJyxcbiAgICAnYm9vbGVhbicsXG4gIF07XG4gIHJlYWRvbmx5IGRhdGFUeXBlSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PFNlbGVjdEl0ZW0+PiA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLnBpcGUoXG4gICAgbWFwKCgpID0+XG4gICAgICB0aGlzLkRBVEFfVFlQRVMubWFwKGRhdGFUeXBlID0+ICh7XG4gICAgICAgIGlkOiBkYXRhVHlwZSxcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkcy4ke2RhdGFUeXBlfWApLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGFUeXBlSXNCb29sZWFuJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFUeXBlSXNUZXh0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IEFMTF9GSUVMRF9UWVBFUzogQXJyYXk8U2VhcmNoRmllbGRGaWVsZFR5cGU+ID0gW1xuICAgICdzaW5nbGUnLFxuICAgICdyYW5nZScsXG4gICAgJ3NpbmdsZS1zZWxlY3QtZHJvcGRvd24nLFxuICAgICdtdWx0aS1zZWxlY3QtZHJvcGRvd24nLFxuICBdO1xuICBwcml2YXRlIHJlYWRvbmx5IE5PTl9URVhUX0ZJRUxEX1RZUEVTOiBBcnJheTxTZWFyY2hGaWVsZEZpZWxkVHlwZT4gPSBbJ3NpbmdsZScsICdyYW5nZSddO1xuICBwcml2YXRlIHJlYWRvbmx5IEJPT0xFQU5fRklFTERfVFlQRVM6IEFycmF5PFNlYXJjaEZpZWxkRmllbGRUeXBlPiA9IFsnc2luZ2xlJ107XG4gIHJlYWRvbmx5IGZpZWxkVHlwZUl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRhdGFUeXBlSXNCb29sZWFuJCxcbiAgICB0aGlzLmRhdGFUeXBlSXNUZXh0JCxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtkYXRhVHlwZUlzQm9vbGVhbiwgZGF0YVR5cGVJc1RleHRdKSA9PiB7XG4gICAgICBpZiAoZGF0YVR5cGVJc0Jvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQk9PTEVBTl9GSUVMRF9UWVBFUy5tYXAoZmllbGRUeXBlID0+ICh7XG4gICAgICAgICAgaWQ6IGZpZWxkVHlwZSxcbiAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRzT3ZlcnZpZXcuJHtmaWVsZFR5cGV9YCksXG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSBpZiAoIWRhdGFUeXBlSXNUZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLk5PTl9URVhUX0ZJRUxEX1RZUEVTLm1hcChmaWVsZFR5cGUgPT4gKHtcbiAgICAgICAgICBpZDogZmllbGRUeXBlLFxuICAgICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHNPdmVydmlldy4ke2ZpZWxkVHlwZX1gKSxcbiAgICAgICAgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQUxMX0ZJRUxEX1RZUEVTLm1hcChmaWVsZFR5cGUgPT4gKHtcbiAgICAgICAgICBpZDogZmllbGRUeXBlLFxuICAgICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHNPdmVydmlldy4ke2ZpZWxkVHlwZX1gKSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBNQVRDSF9UWVBFUzogQXJyYXk8U2VhcmNoRmllbGRNYXRjaFR5cGU+ID0gWydleGFjdCcsICdsaWtlJ107XG4gIHJlYWRvbmx5IG1hdGNoVHlwZUl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAuc3RyZWFtKCdrZXknKVxuICAgIC5waXBlKFxuICAgICAgbWFwKCgpID0+XG4gICAgICAgIHRoaXMuTUFUQ0hfVFlQRVMubWFwKG1hdGNoVHlwZSA9PiAoe1xuICAgICAgICAgIGlkOiBtYXRjaFR5cGUsXG4gICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7bWF0Y2hUeXBlfWApLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICApO1xuXG4gIHJlYWRvbmx5IGZpZWxkcyQ6IE9ic2VydmFibGU8QXJyYXk8TGlzdEZpZWxkPj4gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKS5waXBlKFxuICAgIG1hcCgoKSA9PlxuICAgICAgdGhpcy5DT0xVTU5TLm1hcChjb2x1bW4gPT4gKHtcbiAgICAgICAga2V5OiBjb2x1bW4ucHJvcGVydHlOYW1lLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7Y29sdW1uLnRyYW5zbGF0aW9uS2V5fWApLFxuICAgICAgICBzb3J0YWJsZTogY29sdW1uLnNvcnRhYmxlLFxuICAgICAgICAuLi4oY29sdW1uLnZpZXdUeXBlICYmIHt2aWV3VHlwZTogY29sdW1uLnZpZXdUeXBlfSksXG4gICAgICAgIC4uLihjb2x1bW4uZW51bSAmJiB7ZW51bTogY29sdW1uLmVudW19KSxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcy5uYW1lIHx8ICcnKSxcbiAgICBmaWx0ZXIoZG9jRGVmTmFtZSA9PiAhIWRvY0RlZk5hbWUpXG4gICk7XG5cbiAgcHJpdmF0ZSBjYWNoZWRTZWFyY2hGaWVsZHMhOiBBcnJheTxTZWFyY2hGaWVsZD47XG4gIHNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkOiBib29sZWFuO1xuICBsb2FkaW5nU2VhcmNoRmllbGRzID0gdHJ1ZTtcbiAgc2hvd1NlYXJjaEZpZWxkc0Zvcm0gPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJlZnJlc2hTZWFyY2hGaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudWxsPihudWxsKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNlYXJjaEZpZWxkcyQ6IE9ic2VydmFibGU8QXJyYXk8U2VhcmNoRmllbGQ+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQsXG4gICAgdGhpcy5yZWZyZXNoU2VhcmNoRmllbGRzJCxcbiAgXSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKFtkb2N1bWVudERlZmluaXRpb25OYW1lXSkgPT5cbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldERvY3VtZW50U2VhcmNoRmllbGRzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgKSxcbiAgICB0YXAoc2VhcmNoRmllbGRzID0+IHtcbiAgICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiB7XG4gICAgICAgIGlmIChzZWFyY2hGaWVsZHMgJiYgQXJyYXkuaXNBcnJheShzZWFyY2hGaWVsZHMpICYmIHNlYXJjaEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5zZXREb3dubG9hZChkb2N1bWVudERlZmluaXRpb25OYW1lLCBzZWFyY2hGaWVsZHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KSxcbiAgICB0YXAoc2VhcmNoRmllbGRzID0+IHtcbiAgICAgIHRoaXMuY2FjaGVkU2VhcmNoRmllbGRzID0gc2VhcmNoRmllbGRzO1xuICAgICAgdGhpcy5sb2FkaW5nU2VhcmNoRmllbGRzID0gZmFsc2U7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSB0cmFuc2xhdGVkU2VhcmNoRmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxTZWFyY2hGaWVsZD4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5zZWFyY2hGaWVsZHMkLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW3NlYXJjaEZpZWxkc10pID0+XG4gICAgICBzZWFyY2hGaWVsZHMubWFwKHNlYXJjaEZpZWxkID0+ICh7XG4gICAgICAgIC4uLnNlYXJjaEZpZWxkLFxuICAgICAgICB0aXRsZTogc2VhcmNoRmllbGQudGl0bGUgPyBzZWFyY2hGaWVsZC50aXRsZSA6ICcnLFxuICAgICAgICBkYXRhVHlwZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkcy4ke3NlYXJjaEZpZWxkLmRhdGFUeXBlfWApLFxuICAgICAgICBtYXRjaFR5cGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHNPdmVydmlldy4ke3NlYXJjaEZpZWxkLm1hdGNoVHlwZX1gKSxcbiAgICAgICAgZmllbGRUeXBlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRzT3ZlcnZpZXcuJHtzZWFyY2hGaWVsZC5maWVsZFR5cGV9YCksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgZmllbGRUeXBlSXNEcm9wZG93biQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSBkcm9wZG93bkRhdGFQcm92aWRlck5hbWVzJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREcm9wZG93bkRhdGFQcm92aWRlcnMoKSxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtwcm92aWRlcnNdKSA9PlxuICAgICAgcHJvdmlkZXJzLm1hcChwcm92aWRlciA9PiAoe1xuICAgICAgICBpZDogcHJvdmlkZXIsXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHNPdmVydmlldy4ke3Byb3ZpZGVyfWApLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbW9kaWZpZWREcm9wZG93blZhbHVlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE11bHRpSW5wdXRWYWx1ZXM+KFtdKTtcblxuICByZWFkb25seSBpbml0aWFsRHJvcGRvd25WYWx1ZXMkOiBPYnNlcnZhYmxlPE11bHRpSW5wdXRWYWx1ZXM+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJCxcbiAgICB0aGlzLmZvcm1EYXRhJCxcbiAgXSkucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChcbiAgICAgIChbcHJldkRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIHByZXZGb3JtRGF0YV0sIFtjdXJyRG9jdW1lbnREZWZpbml0aW9uTmFtZSwgY3VyckZvcm1EYXRhXSkgPT5cbiAgICAgICAgcHJldkRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT09IGN1cnJEb2N1bWVudERlZmluaXRpb25OYW1lICYmXG4gICAgICAgIHByZXZGb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXIgPT09IGN1cnJGb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXIgJiZcbiAgICAgICAgcHJldkZvcm1EYXRhPy5rZXkgPT09IGN1cnJGb3JtRGF0YT8ua2V5XG4gICAgKSxcbiAgICBzd2l0Y2hNYXAoKFtkb2N1bWVudERlZmluaXRpb25OYW1lLCBmb3JtRGF0YV0pID0+IHtcbiAgICAgIGlmICghZm9ybURhdGEgfHwgIWZvcm1EYXRhLmRyb3Bkb3duRGF0YVByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgICAgICAuZ2V0RHJvcGRvd25EYXRhKGZvcm1EYXRhLmRyb3Bkb3duRGF0YVByb3ZpZGVyLCBkb2N1bWVudERlZmluaXRpb25OYW1lLCBmb3JtRGF0YS5rZXkpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoZHJvcGRvd25EYXRhID0+IHtcbiAgICAgICAgICAgICAgaWYgKGRyb3Bkb3duRGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhkcm9wZG93bkRhdGEpLm1hcChkcm9wZG93bkZpZWxkS2V5ID0+ICh7XG4gICAgICAgICAgICAgICAgICBrZXk6IGRyb3Bkb3duRmllbGRLZXksXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogZHJvcGRvd25EYXRhW2Ryb3Bkb3duRmllbGRLZXldLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IHNob3dNYXRjaFR5cGVzJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZGF0YVR5cGVJc1RleHQkLFxuICAgIHRoaXMuZmllbGRUeXBlSXNEcm9wZG93biQsXG4gIF0pLnBpcGUobWFwKChbZGF0YVR5cGVJc1RleHQsIGZpZWxkVHlwZUlzRHJvcGRvd25dKSA9PiBkYXRhVHlwZUlzVGV4dCAmJiAhZmllbGRUeXBlSXNEcm9wZG93bikpO1xuXG4gIHJlYWRvbmx5IHNob3dSZWFkb25seURyb3Bkb3duVGFibGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kYXRhVHlwZUlzVGV4dCQsXG4gICAgdGhpcy5maWVsZFR5cGVJc0Ryb3Bkb3duJCxcbiAgICB0aGlzLmZvcm1EYXRhJCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW2RhdGFUeXBlSXNUZXh0LCBmaWVsZFR5cGVJc0Ryb3Bkb3duLCBmb3JtRGF0YV0pID0+XG4gICAgICAgIGRhdGFUeXBlSXNUZXh0ICYmXG4gICAgICAgIGZpZWxkVHlwZUlzRHJvcGRvd24gJiZcbiAgICAgICAgZm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyICYmXG4gICAgICAgICF0aGlzLmRyb3Bkb3duRGF0YVByb3ZpZGVyU3VwcG9ydHNVcGRhdGVzKGZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlcilcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgc2hvd0lucHV0RHJvcGRvd25UYWJsZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRhdGFUeXBlSXNUZXh0JCxcbiAgICB0aGlzLmZpZWxkVHlwZUlzRHJvcGRvd24kLFxuICAgIHRoaXMuZm9ybURhdGEkLFxuICBdKS5waXBlKFxuICAgIG1hcChcbiAgICAgIChbZGF0YVR5cGVJc1RleHQsIGZpZWxkVHlwZUlzRHJvcGRvd24sIGZvcm1EYXRhXSkgPT5cbiAgICAgICAgZGF0YVR5cGVJc1RleHQgJiZcbiAgICAgICAgZmllbGRUeXBlSXNEcm9wZG93biAmJlxuICAgICAgICBmb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXIgJiZcbiAgICAgICAgdGhpcy5kcm9wZG93bkRhdGFQcm92aWRlclN1cHBvcnRzVXBkYXRlcyhmb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXIpXG4gICAgKVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3BlblNlbGVjdGVkU2VhcmNoRmllbGRTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5Nb2RhbFNob3dpbmdTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgc2VhcmNoRmllbGRDbGlja2VkKHNlYXJjaEZpZWxkOiBTZWFyY2hGaWVsZCwgc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVJbnB1dCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoaW5wdXREaXNhYmxlZCA9PiB7XG4gICAgICBpZiAoIWlucHV0RGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hGaWVsZEFjdGlvblR5cGVJc0FkZCA9IHNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkO1xuICAgICAgICBjb25zdCBzZWFyY2hGaWVsZFRvU2VsZWN0ID0gdGhpcy5jYWNoZWRTZWFyY2hGaWVsZHMuZmluZChcbiAgICAgICAgICBmaWVsZCA9PiBmaWVsZC5rZXkgPT09IHNlYXJjaEZpZWxkLmtleVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoRmllbGQkLm5leHQoc2VhcmNoRmllbGRUb1NlbGVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmb3JtVmFsdWVDaGFuZ2UoZGF0YTogU2VhcmNoRmllbGQpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubmV4dElmQ2hhbmdlZCh0aGlzLmRhdGFUeXBlSXNUZXh0JCwgZGF0YS5kYXRhVHlwZSA9PT0gJ3RleHQnKTtcbiAgICAgIHRoaXMubmV4dElmQ2hhbmdlZCh0aGlzLmRhdGFUeXBlSXNCb29sZWFuJCwgZGF0YS5kYXRhVHlwZSA9PT0gJ2Jvb2xlYW4nKTtcbiAgICAgIHRoaXMubmV4dElmQ2hhbmdlZCh0aGlzLmZpZWxkVHlwZUlzRHJvcGRvd24kLCB0aGlzLmlzRmllbGRUeXBlRHJvcGRvd24oZGF0YS5maWVsZFR5cGUpKTtcbiAgICAgIHRoaXMubmV4dElmQ2hhbmdlZCh0aGlzLmZvcm1EYXRhJCwgZGF0YSk7XG4gICAgICB0aGlzLm5leHRJZkNoYW5nZWQodGhpcy52YWxpZCQsIHRoaXMuaXNWYWxpZChkYXRhKSk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBkcm9wZG93bkRhdGFsaXN0Q2hhbmdlKGRhdGE6IE11bHRpSW5wdXRPdXRwdXQpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGlmaWVkRHJvcGRvd25WYWx1ZXMkLm5leHQoZGF0YSBhcyBNdWx0aUlucHV0VmFsdWVzKTtcbiAgfVxuXG4gIG1vdmVSb3coXG4gICAgc2VhcmNoRmllbGRSb3dJbmRleDogbnVtYmVyLFxuICAgIG1vdmVVcDogYm9vbGVhbixcbiAgICBjbGlja0V2ZW50OiBNb3VzZUV2ZW50LFxuICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBbLi4udGhpcy5jYWNoZWRTZWFyY2hGaWVsZHNdO1xuICAgIGNvbnN0IHNlYXJjaEZpZWxkUm93ID0gc2VhcmNoRmllbGRzW3NlYXJjaEZpZWxkUm93SW5kZXhdO1xuXG4gICAgY2xpY2tFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHNlYXJjaEZpZWxkSW5kZXggPSBzZWFyY2hGaWVsZHMuZmluZEluZGV4KGZpZWxkID0+IGZpZWxkLmtleSA9PT0gc2VhcmNoRmllbGRSb3cua2V5KTtcbiAgICBjb25zdCBmb3VuZFNlYXJjaEZpZWxkID0gey4uLnNlYXJjaEZpZWxkc1tzZWFyY2hGaWVsZEluZGV4XX07XG4gICAgY29uc3QgZmlsdGVyZWRTZWFyY2hGaWVsZHMgPSBzZWFyY2hGaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmtleSAhPT0gc2VhcmNoRmllbGRSb3cua2V5KTtcbiAgICBjb25zdCBtdWx0aXBsZVNlYXJjaEZpZWxkcyA9IHNlYXJjaEZpZWxkcy5sZW5ndGggPiAxO1xuXG4gICAgaWYgKG11bHRpcGxlU2VhcmNoRmllbGRzICYmIG1vdmVVcCAmJiBzZWFyY2hGaWVsZEluZGV4ID4gMCkge1xuICAgICAgY29uc3Qgc2VhcmNoRmllbGRCZWZvcmVLZXkgPSBgJHtzZWFyY2hGaWVsZHNbc2VhcmNoRmllbGRJbmRleCAtIDFdLmtleX1gO1xuICAgICAgY29uc3Qgc2VhcmNoRmllbGRCZWZvcmVJbmRleCA9IGZpbHRlcmVkU2VhcmNoRmllbGRzLmZpbmRJbmRleChcbiAgICAgICAgZmllbGQgPT4gZmllbGQua2V5ID09PSBzZWFyY2hGaWVsZEJlZm9yZUtleVxuICAgICAgKTtcbiAgICAgIGZpbHRlcmVkU2VhcmNoRmllbGRzLnNwbGljZShzZWFyY2hGaWVsZEJlZm9yZUluZGV4LCAwLCBmb3VuZFNlYXJjaEZpZWxkKTtcbiAgICAgIHRoaXMudXBkYXRlU2VhcmNoRmllbGRzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIGZpbHRlcmVkU2VhcmNoRmllbGRzKTtcbiAgICB9IGVsc2UgaWYgKG11bHRpcGxlU2VhcmNoRmllbGRzICYmICFtb3ZlVXAgJiYgc2VhcmNoRmllbGRJbmRleCA8IHNlYXJjaEZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNlYXJjaEZpZWxkQWZ0ZXJLZXkgPSBgJHtzZWFyY2hGaWVsZHNbc2VhcmNoRmllbGRJbmRleCArIDFdLmtleX1gO1xuICAgICAgY29uc3Qgc2VhcmNoRmllbGRBZnRlckluZGV4ID0gZmlsdGVyZWRTZWFyY2hGaWVsZHMuZmluZEluZGV4KFxuICAgICAgICBmaWVsZCA9PiBmaWVsZC5rZXkgPT09IHNlYXJjaEZpZWxkQWZ0ZXJLZXlcbiAgICAgICk7XG4gICAgICBmaWx0ZXJlZFNlYXJjaEZpZWxkcy5zcGxpY2Uoc2VhcmNoRmllbGRBZnRlckluZGV4ICsgMSwgMCwgZm91bmRTZWFyY2hGaWVsZCk7XG4gICAgICB0aGlzLnVwZGF0ZVNlYXJjaEZpZWxkcyhkb2N1bWVudERlZmluaXRpb25OYW1lLCBmaWx0ZXJlZFNlYXJjaEZpZWxkcyk7XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlU2VsZWN0ZWRTZWFyY2hGaWVsZChcbiAgICBkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcsXG4gICAgc2VsZWN0ZWRTZWFyY2hGaWVsZDogU2VhcmNoRmllbGRcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlSW5wdXQoKTtcblxuICAgIGlmICh0aGlzLmRyb3Bkb3duRGF0YVByb3ZpZGVyU3VwcG9ydHNVcGRhdGVzKHNlbGVjdGVkU2VhcmNoRmllbGQ/LmRyb3Bkb3duRGF0YVByb3ZpZGVyKSkge1xuICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgICAgLmRlbGV0ZURyb3Bkb3duRGF0YShcbiAgICAgICAgICBzZWxlY3RlZFNlYXJjaEZpZWxkLmRyb3Bkb3duRGF0YVByb3ZpZGVyLFxuICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgc2VsZWN0ZWRTZWFyY2hGaWVsZC5rZXlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgIC5kZWxldGVEb2N1bWVudFNlYXJjaChkb2N1bWVudERlZmluaXRpb25OYW1lLCBzZWxlY3RlZFNlYXJjaEZpZWxkLmtleSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICAgICAgdGhpcy5oaWRlTW9kYWwoKTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHNhdmVTZWFyY2hGaWVsZChkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVJbnB1dCgpO1xuXG4gICAgdGhpcy5mb3JtRGF0YSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZm9ybURhdGEgPT4ge1xuICAgICAgY29uc3QgbWFwcGVkRm9ybURhdGE6IFNlYXJjaEZpZWxkID0ge1xuICAgICAgICAuLi5mb3JtRGF0YSxcbiAgICAgICAgbWF0Y2hUeXBlOlxuICAgICAgICAgICF0aGlzLmlzRmllbGRUeXBlRHJvcGRvd24oZm9ybURhdGEuZmllbGRUeXBlKSAmJiBmb3JtRGF0YS5kYXRhVHlwZSA9PT0gJ3RleHQnXG4gICAgICAgICAgICA/IGZvcm1EYXRhLm1hdGNoVHlwZVxuICAgICAgICAgICAgOiAnZXhhY3QnLFxuICAgICAgICBmaWVsZFR5cGU6IGZvcm1EYXRhLmRhdGFUeXBlICE9PSAnYm9vbGVhbicgPyBmb3JtRGF0YS5maWVsZFR5cGUgOiAnc2luZ2xlJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHByZXZGb3JtRGF0YSA9IHRoaXMuc2VsZWN0ZWRTZWFyY2hGaWVsZCQudmFsdWU7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuZHJvcGRvd25EYXRhUHJvdmlkZXJTdXBwb3J0c1VwZGF0ZXMocHJldkZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlcikgJiZcbiAgICAgICAgcHJldkZvcm1EYXRhLmRyb3Bkb3duRGF0YVByb3ZpZGVyICE9PSBtYXBwZWRGb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXJcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgICAgIC5kZWxldGVEcm9wZG93bkRhdGEoXG4gICAgICAgICAgICBwcmV2Rm9ybURhdGEuZHJvcGRvd25EYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgICAgICAgcHJldkZvcm1EYXRhLmtleVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kcm9wZG93bkRhdGFQcm92aWRlclN1cHBvcnRzVXBkYXRlcyhtYXBwZWRGb3JtRGF0YS5kcm9wZG93bkRhdGFQcm92aWRlcikpIHtcbiAgICAgICAgdGhpcy5tb2RpZmllZERyb3Bkb3duVmFsdWVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShkcm9wZG93blZhbHVlcyA9PiB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGRyb3Bkb3duVmFsdWVzLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIGtleVZhbHVlKSA9PiAoey4uLmFjYywgW2tleVZhbHVlLmtleV06IGtleVZhbHVlLnZhbHVlfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgICAgICAgIC5wb3N0RHJvcGRvd25EYXRhKFxuICAgICAgICAgICAgICBtYXBwZWRGb3JtRGF0YS5kcm9wZG93bkRhdGFQcm92aWRlcixcbiAgICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICAgICAgbWFwcGVkRm9ybURhdGEua2V5LFxuICAgICAgICAgICAgICByZXF1ZXN0XG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zZWFyY2hGaWVsZEFjdGlvblR5cGVJc0FkZCkge1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5wb3N0RG9jdW1lbnRTZWFyY2goZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgbWFwcGVkRm9ybURhdGEpLnN1YnNjcmliZShcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICAgICAgICB0aGlzLmhpZGVNb2RhbCgpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoU2VhcmNoRmllbGRzKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3RmllbGRzID0gWy4uLnRoaXMuY2FjaGVkU2VhcmNoRmllbGRzXTtcbiAgICAgICAgY29uc3QgaW5kZXhUb1JlcGxhY2UgPSBuZXdGaWVsZHMuZmluZEluZGV4KGZpZWxkID0+IGZpZWxkLmtleSA9PT0gbWFwcGVkRm9ybURhdGEua2V5KTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmtleSAhPT0gbWFwcGVkRm9ybURhdGEua2V5KTtcblxuICAgICAgICBmaWx0ZXJlZEZpZWxkcy5zcGxpY2UoaW5kZXhUb1JlcGxhY2UsIDAsIG1hcHBlZEZvcm1EYXRhKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWFyY2hGaWVsZHMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgZmlsdGVyZWRGaWVsZHMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlU2VhcmNoRmllbGRzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZywgbmV3U2VhcmNoRmllbGRzOiBBcnJheTxTZWFyY2hGaWVsZD4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVJbnB1dCgpO1xuXG4gICAgdGhpcy5kb2N1bWVudFNlcnZpY2UucHV0RG9jdW1lbnRTZWFyY2goZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgbmV3U2VhcmNoRmllbGRzKS5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgICAgdGhpcy5oaWRlTW9kYWwoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoU2VhcmNoRmllbGRzKCk7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dElmQ2hhbmdlZChiZWhhdmlvdXJTdWJqZWN0JDogQmVoYXZpb3JTdWJqZWN0PGFueT4sIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkoYmVoYXZpb3VyU3ViamVjdCQudmFsdWUpICE9PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpIHtcbiAgICAgIGJlaGF2aW91clN1YmplY3QkLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZChkYXRhOiBTZWFyY2hGaWVsZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbGlkTWF0Y2hUeXBlID1cbiAgICAgIGRhdGEuZGF0YVR5cGUgPT09ICd0ZXh0JyAmJiAhdGhpcy5pc0ZpZWxkVHlwZURyb3Bkb3duKGRhdGEuZmllbGRUeXBlKSA/IGRhdGEubWF0Y2hUeXBlIDogdHJ1ZTtcbiAgICBjb25zdCB2YWxpZERyb3Bkb3duRGF0YVByb3ZpZGVyID0gdGhpcy5pc0ZpZWxkVHlwZURyb3Bkb3duKGRhdGEuZmllbGRUeXBlKVxuICAgICAgPyBkYXRhLmRyb3Bkb3duRGF0YVByb3ZpZGVyXG4gICAgICA6IHRydWU7XG4gICAgY29uc3QgY29udGFpbnNBbGxWYWx1ZXMgPSAhIShcbiAgICAgIGRhdGEua2V5ICYmXG4gICAgICBkYXRhLmRhdGFUeXBlICYmXG4gICAgICB2YWxpZE1hdGNoVHlwZSAmJlxuICAgICAgdmFsaWREcm9wZG93bkRhdGFQcm92aWRlciAmJlxuICAgICAgZGF0YS5wYXRoXG4gICAgKTtcbiAgICBjb25zdCBrZXlJc1VuaXF1ZSA9XG4gICAgICAhdGhpcy5zZWFyY2hGaWVsZEFjdGlvblR5cGVJc0FkZCB8fFxuICAgICAgdGhpcy5jYWNoZWRTZWFyY2hGaWVsZHMuZmluZEluZGV4KGZpZWxkID0+IGZpZWxkLmtleSA9PT0gZGF0YS5rZXkpID09PSAtMTtcblxuICAgIHJldHVybiBjb250YWluc0FsbFZhbHVlcyAmJiBrZXlJc1VuaXF1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGaWVsZFR5cGVEcm9wZG93bihmaWVsZFR5cGU/OiBTZWFyY2hGaWVsZEZpZWxkVHlwZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmaWVsZFR5cGUgPT09ICdzaW5nbGUtc2VsZWN0LWRyb3Bkb3duJyB8fCBmaWVsZFR5cGUgPT09ICdtdWx0aS1zZWxlY3QtZHJvcGRvd24nO1xuICB9XG5cbiAgcHJpdmF0ZSBkcm9wZG93bkRhdGFQcm92aWRlclN1cHBvcnRzVXBkYXRlcyhkcm9wZG93bkRhdGFQcm92aWRlcj86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkcm9wZG93bkRhdGFQcm92aWRlciA9PT0gJ2Ryb3Bkb3duRGF0YWJhc2VEYXRhUHJvdmlkZXInO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuU2VsZWN0ZWRTZWFyY2hGaWVsZFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaEZpZWxkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dNb2RhbCgpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuTW9kYWxTaG93aW5nU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm1vZGFsLm1vZGFsU2hvd2luZyQuc3Vic2NyaWJlKG1vZGFsU2hvd2luZyA9PiB7XG4gICAgICAgIGlmIChtb2RhbFNob3dpbmcpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1NlYXJjaEZpZWxkc0Zvcm0gPSB0cnVlO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93U2VhcmNoRmllbGRzRm9ybSA9IGZhbHNlO1xuICAgICAgICAgIH0sIDE1MCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RG93bmxvYWQoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLCBzZWFyY2hGaWVsZHM6IEFycmF5PFNlYXJjaEZpZWxkPik6IHZvaWQge1xuICAgIHRoaXMuZG93bmxvYWROYW1lJC5uZXh0KGAke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9Lmpzb25gKTtcbiAgICB0aGlzLmRvd25sb2FkVXJsJC5uZXh0KFxuICAgICAgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChcbiAgICAgICAgJ2RhdGE6dGV4dC9qc29uO2NoYXJzZXQ9VVRGLTgsJyArXG4gICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHtzZWFyY2hGaWVsZHN9LCBudWxsLCAyKSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlSW5wdXQkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZUlucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0JC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd01vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWw/LnNob3coKTtcbiAgfVxuXG4gIHByaXZhdGUgaGlkZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWw/LmhpZGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaFNlYXJjaEZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLnJlZnJlc2hTZWFyY2hGaWVsZHMkLm5leHQobnVsbCk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIntcbiAgICBzZWFyY2hGaWVsZHM6IHRyYW5zbGF0ZWRTZWFyY2hGaWVsZHMkIHwgYXN5bmMsXG4gICAgZmllbGRzOiBmaWVsZHMkIHwgYXN5bmMsXG4gICAgZG93bmxvYWRVcmw6IGRvd25sb2FkVXJsJCB8IGFzeW5jLFxuICAgIGRvd25sb2FkTmFtZTogZG93bmxvYWROYW1lJCB8IGFzeW5jLFxuICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkIHwgYXN5bmMsXG4gICAgdmFsaWQ6IHZhbGlkJCB8IGFzeW5jLFxuICAgIGRpc2FibGVJbnB1dDogZGlzYWJsZUlucHV0JCB8IGFzeW5jXG4gIH0gYXMgb2JzXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnM7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3Q7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1vZGFsOyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNidXR0b25zIGxldC1vYnM9XCJvYnNcIj5cbiAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBtdC1tM3B4IG1iLTMgcHItMiBmbG9hdC1yaWdodFwiPlxuICAgIDxhXG4gICAgICBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zcGFjZVwiXG4gICAgICBbaHJlZl09XCJvYnMuZG93bmxvYWRVcmxcIlxuICAgICAgW2Rvd25sb2FkXT1cIm9icy5kb3dubG9hZE5hbWVcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICBkaXNhYmxlZDpcbiAgICAgICAgICAhb2JzLmRvd25sb2FkVXJsIHx8ICFvYnMuZG93bmxvYWROYW1lIHx8IG9icy5zZWFyY2hGaWVsZHMubGVuZ3RoIDw9IDAgfHwgb2JzLmRpc2FibGVJbnB1dFxuICAgICAgfVwiXG4gICAgPlxuICAgICAgPGkgY2xhc3M9XCJpY29uIG1kaSBtZGktZG93bmxvYWQgbXItMVwiPjwvaT5cbiAgICAgIHt7ICdzZWFyY2hGaWVsZHMuZG93bmxvYWRCdXR0b25UZXh0JyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYT5cbiAgICA8YnV0dG9uXG4gICAgICAoY2xpY2spPVwic2VhcmNoRmllbGRDbGlja2VkKCRldmVudCwgdHJ1ZSlcIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNwYWNlXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogbG9hZGluZ1NlYXJjaEZpZWxkcyB8fCBvYnMuZGlzYWJsZUlucHV0fVwiXG4gICAgPlxuICAgICAgPGkgY2xhc3M9XCJpY29uIG1kaSBtZGktcGx1cyBtci0xXCI+PC9pPlxuICAgICAge3sgJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmFkZFJvdycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xpc3QgbGV0LW9icz1cIm9ic1wiPlxuICA8dmFsdGltby1saXN0XG4gICAgW2l0ZW1zXT1cIm9icy5zZWFyY2hGaWVsZHNcIlxuICAgIFtmaWVsZHNdPVwib2JzLmZpZWxkc1wiXG4gICAgW3ZpZXdNb2RlXT1cImZhbHNlXCJcbiAgICBbaGVhZGVyXT1cImZhbHNlXCJcbiAgICAocm93Q2xpY2tlZCk9XCJzZWFyY2hGaWVsZENsaWNrZWQoJGV2ZW50LCBmYWxzZSlcIlxuICAgICpuZ0lmPVwib2JzLnNlYXJjaEZpZWxkczsgZWxzZSBsb2FkaW5nXCJcbiAgICBbbGFzdENvbHVtblRlbXBsYXRlXT1cIm1vdmVSb3dCdXR0b25zVGVtcGxhdGVSZWZcIlxuICA+XG4gIDwvdmFsdGltby1saXN0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb3ZlUm93QnV0dG9ucyBsZXQtaW5kZXg9XCJpbmRleFwiIGxldC1sZW5ndGg9XCJsZW5ndGhcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwibW92ZS1yb3ctYnV0dG9uc1wiXG4gICAgKm5nSWY9XCJ7XG4gICAgICBkaXNhYmxlSW5wdXQ6IGRpc2FibGVJbnB1dCQgfCBhc3luYyxcbiAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkIHwgYXN5bmNcbiAgICB9IGFzIG9ic1wiXG4gID5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJtZGkgbWRpLWFycm93LXVwLWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbXItMVwiXG4gICAgICAoY2xpY2spPVwibW92ZVJvdyhpbmRleCwgdHJ1ZSwgJGV2ZW50LCBvYnMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcIlxuICAgICAgW25nQ2xhc3NdPVwieydkaXNhYmxlZCBkaXNhYmxlZC1tb3ZlLXJvdy1idXR0b24nOiBpbmRleCA9PT0gMCB8fCBvYnMuZGlzYWJsZUlucHV0fVwiXG4gICAgPjwvaT5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJtZGkgbWRpLWFycm93LWRvd24tYm9sZCBidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcbiAgICAgIChjbGljayk9XCJtb3ZlUm93KGluZGV4LCBmYWxzZSwgJGV2ZW50LCBvYnMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcIlxuICAgICAgW25nQ2xhc3NdPVwieydkaXNhYmxlZCBkaXNhYmxlZC1tb3ZlLXJvdy1idXR0b24nOiBpbmRleCA9PT0gbGVuZ3RoIC0gMSB8fCBvYnMuZGlzYWJsZUlucHV0fVwiXG4gICAgPjwvaT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vZGFsIGxldC1vYnM9XCJvYnNcIj5cbiAgPHZhbHRpbW8tbW9kYWxcbiAgICAjc2VhcmNoRmllbGRNb2RhbFxuICAgIGVsZW1lbnRJZD1cInNlYXJjaEZpZWxkTW9kYWxcIlxuICAgIFt0aXRsZV09XCJcbiAgICAgIHNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkXG4gICAgICAgID8gKCdzZWFyY2hGaWVsZHNPdmVydmlldy5hZGRSb3cnIHwgdHJhbnNsYXRlKVxuICAgICAgICA6ICgnc2VhcmNoRmllbGRzT3ZlcnZpZXcuZWRpdCcgfCB0cmFuc2xhdGUpXG4gICAgXCJcbiAgICBbc2hvd0Zvb3Rlcl09XCJ0cnVlXCJcbiAgPlxuICAgIDxkaXYgYm9keSBjbGFzcz1cIm10LTJcIj5cbiAgICAgIDx2LWZvcm1cbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImZvcm1WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKm5nSWY9XCJzaG93U2VhcmNoRmllbGRzRm9ybSAmJiB7c2VhcmNoRmllbGQ6IHNlbGVjdGVkU2VhcmNoRmllbGQkIHwgYXN5bmN9IGFzIHNlYXJjaE9ic1wiXG4gICAgICA+XG4gICAgICAgIDx2LWlucHV0XG4gICAgICAgICAgbmFtZT1cInRpdGxlXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbZGVmYXVsdFZhbHVlXT1cInNlYXJjaE9icy5zZWFyY2hGaWVsZD8udGl0bGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiZmFsc2VcIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICA8L3YtaW5wdXQ+XG4gICAgICAgIDx2LWlucHV0XG4gICAgICAgICAgbmFtZT1cImtleVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5rZXknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtkZWZhdWx0VmFsdWVdPVwic2VhcmNoT2JzLnNlYXJjaEZpZWxkPy5rZXlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0IHx8ICFzZWFyY2hGaWVsZEFjdGlvblR5cGVJc0FkZFwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgIFt3aWR0aFB4XT1cIjIwMFwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMua2V5JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC92LWlucHV0PlxuICAgICAgICA8di1pbnB1dFxuICAgICAgICAgIG5hbWU9XCJwYXRoXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnBhdGgnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtkZWZhdWx0VmFsdWVdPVwic2VhcmNoT2JzLnNlYXJjaEZpZWxkPy5wYXRoXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMucGF0aCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgIDwvdi1pbnB1dD5cbiAgICAgICAgPHYtc2VsZWN0XG4gICAgICAgICAgKm5nSWY9XCJkYXRhVHlwZUl0ZW1zJCB8IGFzeW5jIGFzIGRhdGFUeXBlSXRlbXNcIlxuICAgICAgICAgIFtpdGVtc109XCJkYXRhVHlwZUl0ZW1zXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnNlYXJjaEZpZWxkUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmRhdGFUeXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlSW5wdXRcIlxuICAgICAgICAgIFttYXJnaW5dPVwidHJ1ZVwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgIG5hbWU9XCJkYXRhVHlwZVwiXG4gICAgICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJzZWFyY2hPYnMuc2VhcmNoRmllbGQ/LmRhdGFUeXBlXCJcbiAgICAgICAgICBbd2lkdGhJblB4XT1cIjIwMFwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMuZGF0YVR5cGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPjwvdi1zZWxlY3Q+XG4gICAgICAgIDx2LXNlbGVjdFxuICAgICAgICAgICpuZ0lmPVwiKHNob3dNYXRjaFR5cGVzJCB8IGFzeW5jKSAmJiAobWF0Y2hUeXBlSXRlbXMkIHwgYXN5bmMpIGFzIG1hdGNoVHlwZUl0ZW1zXCJcbiAgICAgICAgICBbaXRlbXNdPVwibWF0Y2hUeXBlSXRlbXNcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcuc2VhcmNoRmllbGRQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcubWF0Y2hUeXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlSW5wdXRcIlxuICAgICAgICAgIFttYXJnaW5dPVwidHJ1ZVwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgIG5hbWU9XCJtYXRjaFR5cGVcIlxuICAgICAgICAgIFtkZWZhdWx0U2VsZWN0aW9uSWRdPVwic2VhcmNoT2JzLnNlYXJjaEZpZWxkPy5tYXRjaFR5cGVcIlxuICAgICAgICAgIFt3aWR0aEluUHhdPVwiMjAwXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5tYXRjaFR5cGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPjwvdi1zZWxlY3Q+XG4gICAgICAgIDx2LXNlbGVjdFxuICAgICAgICAgICpuZ0lmPVwiZmllbGRUeXBlSXRlbXMkIHwgYXN5bmMgYXMgZmllbGRUeXBlSXRlbXNcIlxuICAgICAgICAgIFtpdGVtc109XCJmaWVsZFR5cGVJdGVtc1wiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5maWVsZFR5cGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgbmFtZT1cImZpZWxkVHlwZVwiXG4gICAgICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJzZWFyY2hPYnMuc2VhcmNoRmllbGQ/LmZpZWxkVHlwZVwiXG4gICAgICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLmZpZWxkVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+PC92LXNlbGVjdD5cbiAgICAgICAgPHYtc2VsZWN0XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIChmaWVsZFR5cGVJc0Ryb3Bkb3duJCB8IGFzeW5jKSAmJlxuICAgICAgICAgICAgKGRyb3Bkb3duRGF0YVByb3ZpZGVyTmFtZXMkIHwgYXN5bmMpIGFzIGRyb3Bkb3duRGF0YVByb3ZpZGVyTmFtZXNcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtpdGVtc109XCJkcm9wZG93bkRhdGFQcm92aWRlck5hbWVzXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnNlYXJjaEZpZWxkUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmRyb3Bkb3duRGF0YVByb3ZpZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlSW5wdXRcIlxuICAgICAgICAgIFttYXJnaW5dPVwidHJ1ZVwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cImZhbHNlXCJcbiAgICAgICAgICBuYW1lPVwiZHJvcGRvd25EYXRhUHJvdmlkZXJcIlxuICAgICAgICAgIFtkZWZhdWx0U2VsZWN0aW9uSWRdPVwic2VhcmNoT2JzLnNlYXJjaEZpZWxkPy5kcm9wZG93bkRhdGFQcm92aWRlclwiXG4gICAgICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLmRyb3Bkb3duRGF0YVByb3ZpZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID48L3Ytc2VsZWN0PlxuICAgICAgICA8di1tdWx0aS1pbnB1dFxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAoc2hvd0lucHV0RHJvcGRvd25UYWJsZSQgfCBhc3luYykgJiZcbiAgICAgICAgICAgIChpbml0aWFsRHJvcGRvd25WYWx1ZXMkIHwgYXN5bmMpIGFzIGluaXRpYWxEcm9wZG93blZhbHVlc1xuICAgICAgICAgIFwiXG4gICAgICAgICAgbmFtZT1cImRyb3Bkb3duVmFsdWVzXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmRyb3Bkb3duTGlzdFZhbHVlcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIHR5cGU9XCJrZXlWYWx1ZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlSW5wdXRcIlxuICAgICAgICAgIFtkZWZhdWx0VmFsdWVzXT1cImluaXRpYWxEcm9wZG93blZhbHVlc1wiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiZmFsc2VcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLmRyb3Bkb3duTGlzdFZhbHVlcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJkcm9wZG93bkRhdGFsaXN0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvdi1tdWx0aS1pbnB1dD5cbiAgICAgICAgPHYtdGFibGVcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKHNob3dSZWFkb25seURyb3Bkb3duVGFibGUkIHwgYXN5bmMpICYmXG4gICAgICAgICAgICAoaW5pdGlhbERyb3Bkb3duVmFsdWVzJCB8IGFzeW5jKSBhcyBpbml0aWFsRHJvcGRvd25WYWx1ZXNcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtpdGVtc109XCJpbml0aWFsRHJvcGRvd25WYWx1ZXNcIlxuICAgICAgICAgIFtjb2x1bW5zXT1cImRyb3Bkb3duQ29sdW1ucyQgfCBhc3luY1wiXG4gICAgICAgICAgW3Nob3dFZGl0QnV0dG9uc109XCJmYWxzZVwiXG4gICAgICAgICAgW2l0ZW1zVHJhbnNsYXRpb25LZXldPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3J1wiXG4gICAgICAgICAgW3Nob3dQYWdpbmF0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbbW9iaWxlQnJlYWtwb2ludFB4XT1cIjIwMFwiXG4gICAgICAgID48L3YtdGFibGU+XG4gICAgICA8L3YtZm9ybT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGZvb3Rlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcC0wXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zRm9vdGVyTW9kYWw7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3ZhbHRpbW8tbW9kYWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbnNGb290ZXJNb2RhbCBsZXQtb2JzPVwib2JzXCI+XG4gIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiICpuZ0lmPVwie3NlYXJjaEZpZWxkOiBzZWxlY3RlZFNlYXJjaEZpZWxkJCB8IGFzeW5jfSBhcyBzZWFyY2hPYnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHQtYnV0dG9uc1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tc3BhY2UgYnRuLXNlY29uZGFyeVwiXG4gICAgICAgICpuZ0lmPVwiIXNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlSW5wdXRcIlxuICAgICAgICAoY2xpY2spPVwiZGVsZXRlU2VsZWN0ZWRTZWFyY2hGaWVsZChvYnMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgc2VhcmNoT2JzLnNlYXJjaEZpZWxkKVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdzZWFyY2hGaWVsZHNPdmVydmlldy5kZWxldGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cInNhdmVTZWFyY2hGaWVsZChvYnMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNwYWNlIG1yLTBcIlxuICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dCB8fCAhb2JzLnZhbGlkXCJcbiAgICAgID5cbiAgICAgICAge3sgJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnN1Ym1pdCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICA8dmFsdGltby1zcGlubmVyPjwvdmFsdGltby1zcGlubmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
417
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyLW1hbmFnZW1lbnQvc3JjL2xpYi9kb3NzaWVyLW1hbmFnZW1lbnQtZGV0YWlsLWNvbnRhaW5lci90YWJzL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvZG9zc2llci1tYW5hZ2VtZW50LWRldGFpbC1jb250YWluZXIvdGFicy9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUdaLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBRUgsRUFBRSxFQUNGLFlBQVksRUFDWixTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBbUJkLE1BQU0sT0FBTyxzQ0FBc0M7SUFzUWpELFlBQ21CLGVBQWdDLEVBQ2hDLEtBQXFCLEVBQ3JCLGdCQUFrQyxFQUNsQyxTQUF1QjtRQUh2QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFr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RCxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDSSxLQUFLO3NCQUFuQyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFFbkIsV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RvY3VtZW50U2VydmljZX0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0xpc3RGaWVsZCwgTW9kYWxDb21wb25lbnR9IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIERlZmluaXRpb25Db2x1bW4sXG4gIFNlYXJjaEZpZWxkLFxuICBTZWFyY2hGaWVsZERhdGFUeXBlLFxuICBTZWFyY2hGaWVsZEZpZWxkVHlwZSxcbiAgU2VhcmNoRmllbGRNYXRjaFR5cGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge0RvbVNhbml0aXplciwgU2FmZVVybH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge011bHRpSW5wdXRPdXRwdXQsIE11bHRpSW5wdXRWYWx1ZXMsIFNlbGVjdEl0ZW0sIFRhYmxlQ29sdW1ufSBmcm9tICdAdmFsdGltby91c2VyLWludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyTWFuYWdlbWVudFNlYXJjaEZpZWxkc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgnbW92ZVJvd0J1dHRvbnMnKSBwdWJsaWMgbW92ZVJvd0J1dHRvbnNUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoRmllbGRNb2RhbCcpIG1vZGFsOiBNb2RhbENvbXBvbmVudDtcblxuICBAT3V0cHV0KCkgc2VhcmNoRmllbGQ6IEV2ZW50RW1pdHRlcjxTZWFyY2hGaWVsZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcmVhZG9ubHkgZG93bmxvYWROYW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2FmZVVybD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZGlzYWJsZUlucHV0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBzZWxlY3RlZFNlYXJjaEZpZWxkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VhcmNoRmllbGQgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgZm9ybURhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hGaWVsZD4obnVsbCk7XG4gIHJlYWRvbmx5IHZhbGlkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IENPTFVNTlM6IEFycmF5PERlZmluaXRpb25Db2x1bW4+ID0gW1xuICAgIHtcbiAgICAgIHZpZXdUeXBlOiAnc3RyaW5nJyxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIHByb3BlcnR5TmFtZTogJ3RpdGxlJyxcbiAgICAgIHRyYW5zbGF0aW9uS2V5OiAndGl0bGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgdmlld1R5cGU6ICdzdHJpbmcnLFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgcHJvcGVydHlOYW1lOiAna2V5JyxcbiAgICAgIHRyYW5zbGF0aW9uS2V5OiAna2V5JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZpZXdUeXBlOiAnc3RyaW5nJyxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIHByb3BlcnR5TmFtZTogJ3BhdGgnLFxuICAgICAgdHJhbnNsYXRpb25LZXk6ICdwYXRoJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZpZXdUeXBlOiAnc3RyaW5nJyxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIHByb3BlcnR5TmFtZTogJ2RhdGFUeXBlJyxcbiAgICAgIHRyYW5zbGF0aW9uS2V5OiAnZGF0YVR5cGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgdmlld1R5cGU6ICdzdHJpbmcnLFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgcHJvcGVydHlOYW1lOiAnZmllbGRUeXBlJyxcbiAgICAgIHRyYW5zbGF0aW9uS2V5OiAnZmllbGRUeXBlJyxcbiAgICB9LFxuICBdO1xuXG4gIHJlYWRvbmx5IGRyb3Bkb3duQ29sdW1ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PFRhYmxlQ29sdW1uPj4oW1xuICAgIHtcbiAgICAgIGxhYmVsVHJhbnNsYXRpb25LZXk6ICdzZWFyY2hGaWVsZHNPdmVydmlldy5pZCcsXG4gICAgICBkYXRhS2V5OiAna2V5JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsVHJhbnNsYXRpb25LZXk6ICdzZWFyY2hGaWVsZHNPdmVydmlldy50ZXh0JyxcbiAgICAgIGRhdGFLZXk6ICd2YWx1ZScsXG4gICAgfSxcbiAgXSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBEQVRBX1RZUEVTOiBBcnJheTxTZWFyY2hGaWVsZERhdGFUeXBlPiA9IFtcbiAgICAndGV4dCcsXG4gICAgJ251bWJlcicsXG4gICAgJ2RhdGUnLFxuICAgICdkYXRldGltZScsXG4gICAgJ2Jvb2xlYW4nLFxuICBdO1xuICByZWFkb25seSBkYXRhVHlwZUl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKS5waXBlKFxuICAgIG1hcCgoKSA9PlxuICAgICAgdGhpcy5EQVRBX1RZUEVTLm1hcChkYXRhVHlwZSA9PiAoe1xuICAgICAgICBpZDogZGF0YVR5cGUsXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHMuJHtkYXRhVHlwZX1gKSxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBkYXRhVHlwZUlzQm9vbGVhbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhVHlwZUlzVGV4dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBBTExfRklFTERfVFlQRVM6IEFycmF5PFNlYXJjaEZpZWxkRmllbGRUeXBlPiA9IFtcbiAgICAnc2luZ2xlJyxcbiAgICAncmFuZ2UnLFxuICAgICdzaW5nbGUtc2VsZWN0LWRyb3Bkb3duJyxcbiAgICAnbXVsdGktc2VsZWN0LWRyb3Bkb3duJyxcbiAgXTtcbiAgcHJpdmF0ZSByZWFkb25seSBOT05fVEVYVF9GSUVMRF9UWVBFUzogQXJyYXk8U2VhcmNoRmllbGRGaWVsZFR5cGU+ID0gWydzaW5nbGUnLCAncmFuZ2UnXTtcbiAgcHJpdmF0ZSByZWFkb25seSBCT09MRUFOX0ZJRUxEX1RZUEVTOiBBcnJheTxTZWFyY2hGaWVsZEZpZWxkVHlwZT4gPSBbJ3NpbmdsZSddO1xuICByZWFkb25seSBmaWVsZFR5cGVJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8U2VsZWN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kYXRhVHlwZUlzQm9vbGVhbiQsXG4gICAgdGhpcy5kYXRhVHlwZUlzVGV4dCQsXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbZGF0YVR5cGVJc0Jvb2xlYW4sIGRhdGFUeXBlSXNUZXh0XSkgPT4ge1xuICAgICAgaWYgKGRhdGFUeXBlSXNCb29sZWFuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLkJPT0xFQU5fRklFTERfVFlQRVMubWFwKGZpZWxkVHlwZSA9PiAoe1xuICAgICAgICAgIGlkOiBmaWVsZFR5cGUsXG4gICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7ZmllbGRUeXBlfWApLFxuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2UgaWYgKCFkYXRhVHlwZUlzVGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5OT05fVEVYVF9GSUVMRF9UWVBFUy5tYXAoZmllbGRUeXBlID0+ICh7XG4gICAgICAgICAgaWQ6IGZpZWxkVHlwZSxcbiAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRzT3ZlcnZpZXcuJHtmaWVsZFR5cGV9YCksXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuQUxMX0ZJRUxEX1RZUEVTLm1hcChmaWVsZFR5cGUgPT4gKHtcbiAgICAgICAgaWQ6IGZpZWxkVHlwZSxcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7ZmllbGRUeXBlfWApLFxuICAgICAgfSkpO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBNQVRDSF9UWVBFUzogQXJyYXk8U2VhcmNoRmllbGRNYXRjaFR5cGU+ID0gWydleGFjdCcsICdsaWtlJ107XG4gIHJlYWRvbmx5IG1hdGNoVHlwZUl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAuc3RyZWFtKCdrZXknKVxuICAgIC5waXBlKFxuICAgICAgbWFwKCgpID0+XG4gICAgICAgIHRoaXMuTUFUQ0hfVFlQRVMubWFwKG1hdGNoVHlwZSA9PiAoe1xuICAgICAgICAgIGlkOiBtYXRjaFR5cGUsXG4gICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7bWF0Y2hUeXBlfWApLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICApO1xuXG4gIHJlYWRvbmx5IGZpZWxkcyQ6IE9ic2VydmFibGU8QXJyYXk8TGlzdEZpZWxkPj4gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKS5waXBlKFxuICAgIG1hcCgoKSA9PlxuICAgICAgdGhpcy5DT0xVTU5TLm1hcChjb2x1bW4gPT4gKHtcbiAgICAgICAga2V5OiBjb2x1bW4ucHJvcGVydHlOYW1lLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7Y29sdW1uLnRyYW5zbGF0aW9uS2V5fWApLFxuICAgICAgICBzb3J0YWJsZTogY29sdW1uLnNvcnRhYmxlLFxuICAgICAgICAuLi4oY29sdW1uLnZpZXdUeXBlICYmIHt2aWV3VHlwZTogY29sdW1uLnZpZXdUeXBlfSksXG4gICAgICAgIC4uLihjb2x1bW4uZW51bSAmJiB7ZW51bTogY29sdW1uLmVudW19KSxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcy5uYW1lIHx8ICcnKSxcbiAgICBmaWx0ZXIoZG9jRGVmTmFtZSA9PiAhIWRvY0RlZk5hbWUpXG4gICk7XG5cbiAgcHJpdmF0ZSBjYWNoZWRTZWFyY2hGaWVsZHMhOiBBcnJheTxTZWFyY2hGaWVsZD47XG4gIHNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkOiBib29sZWFuO1xuICBsb2FkaW5nU2VhcmNoRmllbGRzID0gdHJ1ZTtcbiAgc2hvd1NlYXJjaEZpZWxkc0Zvcm0gPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJlZnJlc2hTZWFyY2hGaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudWxsPihudWxsKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNlYXJjaEZpZWxkcyQ6IE9ic2VydmFibGU8QXJyYXk8U2VhcmNoRmllbGQ+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQsXG4gICAgdGhpcy5yZWZyZXNoU2VhcmNoRmllbGRzJCxcbiAgXSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKFtkb2N1bWVudERlZmluaXRpb25OYW1lXSkgPT5cbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldERvY3VtZW50U2VhcmNoRmllbGRzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgKSxcbiAgICB0YXAoc2VhcmNoRmllbGRzID0+IHtcbiAgICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiB7XG4gICAgICAgIGlmIChzZWFyY2hGaWVsZHMgJiYgQXJyYXkuaXNBcnJheShzZWFyY2hGaWVsZHMpICYmIHNlYXJjaEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5zZXREb3dubG9hZChkb2N1bWVudERlZmluaXRpb25OYW1lLCBzZWFyY2hGaWVsZHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KSxcbiAgICB0YXAoc2VhcmNoRmllbGRzID0+IHtcbiAgICAgIHRoaXMuY2FjaGVkU2VhcmNoRmllbGRzID0gc2VhcmNoRmllbGRzO1xuICAgICAgdGhpcy5sb2FkaW5nU2VhcmNoRmllbGRzID0gZmFsc2U7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSB0cmFuc2xhdGVkU2VhcmNoRmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxTZWFyY2hGaWVsZD4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5zZWFyY2hGaWVsZHMkLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW3NlYXJjaEZpZWxkc10pID0+XG4gICAgICBzZWFyY2hGaWVsZHMubWFwKHNlYXJjaEZpZWxkID0+ICh7XG4gICAgICAgIC4uLnNlYXJjaEZpZWxkLFxuICAgICAgICB0aXRsZTogc2VhcmNoRmllbGQudGl0bGUgPyBzZWFyY2hGaWVsZC50aXRsZSA6ICcnLFxuICAgICAgICBkYXRhVHlwZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkcy4ke3NlYXJjaEZpZWxkLmRhdGFUeXBlfWApLFxuICAgICAgICBtYXRjaFR5cGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHNPdmVydmlldy4ke3NlYXJjaEZpZWxkLm1hdGNoVHlwZX1gKSxcbiAgICAgICAgZmllbGRUeXBlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRzT3ZlcnZpZXcuJHtzZWFyY2hGaWVsZC5maWVsZFR5cGV9YCksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgZmllbGRUeXBlSXNEcm9wZG93biQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSBkcm9wZG93bkRhdGFQcm92aWRlck5hbWVzJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREcm9wZG93bkRhdGFQcm92aWRlcnMoKSxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtwcm92aWRlcnNdKSA9PlxuICAgICAgcHJvdmlkZXJzLm1hcChwcm92aWRlciA9PiAoe1xuICAgICAgICBpZDogcHJvdmlkZXIsXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHNPdmVydmlldy4ke3Byb3ZpZGVyfWApLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbW9kaWZpZWREcm9wZG93blZhbHVlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE11bHRpSW5wdXRWYWx1ZXM+KFtdKTtcblxuICByZWFkb25seSBpbml0aWFsRHJvcGRvd25WYWx1ZXMkOiBPYnNlcnZhYmxlPE11bHRpSW5wdXRWYWx1ZXM+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJCxcbiAgICB0aGlzLmZvcm1EYXRhJCxcbiAgXSkucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChcbiAgICAgIChbcHJldkRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIHByZXZGb3JtRGF0YV0sIFtjdXJyRG9jdW1lbnREZWZpbml0aW9uTmFtZSwgY3VyckZvcm1EYXRhXSkgPT5cbiAgICAgICAgcHJldkRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT09IGN1cnJEb2N1bWVudERlZmluaXRpb25OYW1lICYmXG4gICAgICAgIHByZXZGb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXIgPT09IGN1cnJGb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXIgJiZcbiAgICAgICAgcHJldkZvcm1EYXRhPy5rZXkgPT09IGN1cnJGb3JtRGF0YT8ua2V5XG4gICAgKSxcbiAgICBzd2l0Y2hNYXAoKFtkb2N1bWVudERlZmluaXRpb25OYW1lLCBmb3JtRGF0YV0pID0+IHtcbiAgICAgIGlmICghZm9ybURhdGEgfHwgIWZvcm1EYXRhLmRyb3Bkb3duRGF0YVByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgICAuZ2V0RHJvcGRvd25EYXRhKGZvcm1EYXRhLmRyb3Bkb3duRGF0YVByb3ZpZGVyLCBkb2N1bWVudERlZmluaXRpb25OYW1lLCBmb3JtRGF0YS5rZXkpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcChkcm9wZG93bkRhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKGRyb3Bkb3duRGF0YSkge1xuICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZHJvcGRvd25EYXRhKS5tYXAoZHJvcGRvd25GaWVsZEtleSA9PiAoe1xuICAgICAgICAgICAgICAgIGtleTogZHJvcGRvd25GaWVsZEtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZHJvcGRvd25EYXRhW2Ryb3Bkb3duRmllbGRLZXldLFxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgc2hvd01hdGNoVHlwZXMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kYXRhVHlwZUlzVGV4dCQsXG4gICAgdGhpcy5maWVsZFR5cGVJc0Ryb3Bkb3duJCxcbiAgXSkucGlwZShtYXAoKFtkYXRhVHlwZUlzVGV4dCwgZmllbGRUeXBlSXNEcm9wZG93bl0pID0+IGRhdGFUeXBlSXNUZXh0ICYmICFmaWVsZFR5cGVJc0Ryb3Bkb3duKSk7XG5cbiAgcmVhZG9ubHkgc2hvd1JlYWRvbmx5RHJvcGRvd25UYWJsZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRhdGFUeXBlSXNUZXh0JCxcbiAgICB0aGlzLmZpZWxkVHlwZUlzRHJvcGRvd24kLFxuICAgIHRoaXMuZm9ybURhdGEkLFxuICBdKS5waXBlKFxuICAgIG1hcChcbiAgICAgIChbZGF0YVR5cGVJc1RleHQsIGZpZWxkVHlwZUlzRHJvcGRvd24sIGZvcm1EYXRhXSkgPT5cbiAgICAgICAgZGF0YVR5cGVJc1RleHQgJiZcbiAgICAgICAgZmllbGRUeXBlSXNEcm9wZG93biAmJlxuICAgICAgICBmb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXIgJiZcbiAgICAgICAgIXRoaXMuZHJvcGRvd25EYXRhUHJvdmlkZXJTdXBwb3J0c1VwZGF0ZXMoZm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBzaG93SW5wdXREcm9wZG93blRhYmxlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZGF0YVR5cGVJc1RleHQkLFxuICAgIHRoaXMuZmllbGRUeXBlSXNEcm9wZG93biQsXG4gICAgdGhpcy5mb3JtRGF0YSQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFtkYXRhVHlwZUlzVGV4dCwgZmllbGRUeXBlSXNEcm9wZG93biwgZm9ybURhdGFdKSA9PlxuICAgICAgICBkYXRhVHlwZUlzVGV4dCAmJlxuICAgICAgICBmaWVsZFR5cGVJc0Ryb3Bkb3duICYmXG4gICAgICAgIGZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlciAmJlxuICAgICAgICB0aGlzLmRyb3Bkb3duRGF0YVByb3ZpZGVyU3VwcG9ydHNVcGRhdGVzKGZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlcilcbiAgICApXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuU2VsZWN0ZWRTZWFyY2hGaWVsZFN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3Blbk1vZGFsU2hvd2luZ1N1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzZWFyY2hGaWVsZENsaWNrZWQoc2VhcmNoRmllbGQ6IFNlYXJjaEZpZWxkLCBzZWFyY2hGaWVsZEFjdGlvblR5cGVJc0FkZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShpbnB1dERpc2FibGVkID0+IHtcbiAgICAgIGlmICghaW5wdXREaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkID0gc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGQ7XG4gICAgICAgIGNvbnN0IHNlYXJjaEZpZWxkVG9TZWxlY3QgPSB0aGlzLmNhY2hlZFNlYXJjaEZpZWxkcy5maW5kKFxuICAgICAgICAgIGZpZWxkID0+IGZpZWxkLmtleSA9PT0gc2VhcmNoRmllbGQua2V5XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hGaWVsZCQubmV4dChzZWFyY2hGaWVsZFRvU2VsZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZvcm1WYWx1ZUNoYW5nZShkYXRhOiBTZWFyY2hGaWVsZCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5uZXh0SWZDaGFuZ2VkKHRoaXMuZGF0YVR5cGVJc1RleHQkLCBkYXRhLmRhdGFUeXBlID09PSAndGV4dCcpO1xuICAgICAgdGhpcy5uZXh0SWZDaGFuZ2VkKHRoaXMuZGF0YVR5cGVJc0Jvb2xlYW4kLCBkYXRhLmRhdGFUeXBlID09PSAnYm9vbGVhbicpO1xuICAgICAgdGhpcy5uZXh0SWZDaGFuZ2VkKHRoaXMuZmllbGRUeXBlSXNEcm9wZG93biQsIHRoaXMuaXNGaWVsZFR5cGVEcm9wZG93bihkYXRhLmZpZWxkVHlwZSkpO1xuICAgICAgdGhpcy5uZXh0SWZDaGFuZ2VkKHRoaXMuZm9ybURhdGEkLCBkYXRhKTtcbiAgICAgIHRoaXMubmV4dElmQ2hhbmdlZCh0aGlzLnZhbGlkJCwgdGhpcy5pc1ZhbGlkKGRhdGEpKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIGRyb3Bkb3duRGF0YWxpc3RDaGFuZ2UoZGF0YTogTXVsdGlJbnB1dE91dHB1dCk6IHZvaWQge1xuICAgIHRoaXMubW9kaWZpZWREcm9wZG93blZhbHVlcyQubmV4dChkYXRhIGFzIE11bHRpSW5wdXRWYWx1ZXMpO1xuICB9XG5cbiAgbW92ZVJvdyhcbiAgICBzZWFyY2hGaWVsZFJvd0luZGV4OiBudW1iZXIsXG4gICAgbW92ZVVwOiBib29sZWFuLFxuICAgIGNsaWNrRXZlbnQ6IE1vdXNlRXZlbnQsXG4gICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHNlYXJjaEZpZWxkcyA9IFsuLi50aGlzLmNhY2hlZFNlYXJjaEZpZWxkc107XG4gICAgY29uc3Qgc2VhcmNoRmllbGRSb3cgPSBzZWFyY2hGaWVsZHNbc2VhcmNoRmllbGRSb3dJbmRleF07XG5cbiAgICBjbGlja0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3Qgc2VhcmNoRmllbGRJbmRleCA9IHNlYXJjaEZpZWxkcy5maW5kSW5kZXgoZmllbGQgPT4gZmllbGQua2V5ID09PSBzZWFyY2hGaWVsZFJvdy5rZXkpO1xuICAgIGNvbnN0IGZvdW5kU2VhcmNoRmllbGQgPSB7Li4uc2VhcmNoRmllbGRzW3NlYXJjaEZpZWxkSW5kZXhdfTtcbiAgICBjb25zdCBmaWx0ZXJlZFNlYXJjaEZpZWxkcyA9IHNlYXJjaEZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGQua2V5ICE9PSBzZWFyY2hGaWVsZFJvdy5rZXkpO1xuICAgIGNvbnN0IG11bHRpcGxlU2VhcmNoRmllbGRzID0gc2VhcmNoRmllbGRzLmxlbmd0aCA+IDE7XG5cbiAgICBpZiAobXVsdGlwbGVTZWFyY2hGaWVsZHMgJiYgbW92ZVVwICYmIHNlYXJjaEZpZWxkSW5kZXggPiAwKSB7XG4gICAgICBjb25zdCBzZWFyY2hGaWVsZEJlZm9yZUtleSA9IGAke3NlYXJjaEZpZWxkc1tzZWFyY2hGaWVsZEluZGV4IC0gMV0ua2V5fWA7XG4gICAgICBjb25zdCBzZWFyY2hGaWVsZEJlZm9yZUluZGV4ID0gZmlsdGVyZWRTZWFyY2hGaWVsZHMuZmluZEluZGV4KFxuICAgICAgICBmaWVsZCA9PiBmaWVsZC5rZXkgPT09IHNlYXJjaEZpZWxkQmVmb3JlS2V5XG4gICAgICApO1xuICAgICAgZmlsdGVyZWRTZWFyY2hGaWVsZHMuc3BsaWNlKHNlYXJjaEZpZWxkQmVmb3JlSW5kZXgsIDAsIGZvdW5kU2VhcmNoRmllbGQpO1xuICAgICAgdGhpcy51cGRhdGVTZWFyY2hGaWVsZHMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgZmlsdGVyZWRTZWFyY2hGaWVsZHMpO1xuICAgIH0gZWxzZSBpZiAobXVsdGlwbGVTZWFyY2hGaWVsZHMgJiYgIW1vdmVVcCAmJiBzZWFyY2hGaWVsZEluZGV4IDwgc2VhcmNoRmllbGRzLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2VhcmNoRmllbGRBZnRlcktleSA9IGAke3NlYXJjaEZpZWxkc1tzZWFyY2hGaWVsZEluZGV4ICsgMV0ua2V5fWA7XG4gICAgICBjb25zdCBzZWFyY2hGaWVsZEFmdGVySW5kZXggPSBmaWx0ZXJlZFNlYXJjaEZpZWxkcy5maW5kSW5kZXgoXG4gICAgICAgIGZpZWxkID0+IGZpZWxkLmtleSA9PT0gc2VhcmNoRmllbGRBZnRlcktleVxuICAgICAgKTtcbiAgICAgIGZpbHRlcmVkU2VhcmNoRmllbGRzLnNwbGljZShzZWFyY2hGaWVsZEFmdGVySW5kZXggKyAxLCAwLCBmb3VuZFNlYXJjaEZpZWxkKTtcbiAgICAgIHRoaXMudXBkYXRlU2VhcmNoRmllbGRzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIGZpbHRlcmVkU2VhcmNoRmllbGRzKTtcbiAgICB9XG4gIH1cblxuICBkZWxldGVTZWxlY3RlZFNlYXJjaEZpZWxkKFxuICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyxcbiAgICBzZWxlY3RlZFNlYXJjaEZpZWxkOiBTZWFyY2hGaWVsZFxuICApOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVJbnB1dCgpO1xuXG4gICAgaWYgKHRoaXMuZHJvcGRvd25EYXRhUHJvdmlkZXJTdXBwb3J0c1VwZGF0ZXMoc2VsZWN0ZWRTZWFyY2hGaWVsZD8uZHJvcGRvd25EYXRhUHJvdmlkZXIpKSB7XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgICAuZGVsZXRlRHJvcGRvd25EYXRhKFxuICAgICAgICAgIHNlbGVjdGVkU2VhcmNoRmllbGQuZHJvcGRvd25EYXRhUHJvdmlkZXIsXG4gICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICBzZWxlY3RlZFNlYXJjaEZpZWxkLmtleVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgLmRlbGV0ZURvY3VtZW50U2VhcmNoKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIHNlbGVjdGVkU2VhcmNoRmllbGQua2V5KVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgICAgICB0aGlzLmhpZGVNb2RhbCgpO1xuICAgICAgICAgIHRoaXMucmVmcmVzaFNlYXJjaEZpZWxkcygpO1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbmFibGVJbnB1dCgpO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgc2F2ZVNlYXJjaEZpZWxkKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0KCk7XG5cbiAgICB0aGlzLmZvcm1EYXRhJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShmb3JtRGF0YSA9PiB7XG4gICAgICBjb25zdCBtYXBwZWRGb3JtRGF0YTogU2VhcmNoRmllbGQgPSB7XG4gICAgICAgIC4uLmZvcm1EYXRhLFxuICAgICAgICBtYXRjaFR5cGU6XG4gICAgICAgICAgIXRoaXMuaXNGaWVsZFR5cGVEcm9wZG93bihmb3JtRGF0YS5maWVsZFR5cGUpICYmIGZvcm1EYXRhLmRhdGFUeXBlID09PSAndGV4dCdcbiAgICAgICAgICAgID8gZm9ybURhdGEubWF0Y2hUeXBlXG4gICAgICAgICAgICA6ICdleGFjdCcsXG4gICAgICAgIGZpZWxkVHlwZTogZm9ybURhdGEuZGF0YVR5cGUgIT09ICdib29sZWFuJyA/IGZvcm1EYXRhLmZpZWxkVHlwZSA6ICdzaW5nbGUnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcHJldkZvcm1EYXRhID0gdGhpcy5zZWxlY3RlZFNlYXJjaEZpZWxkJC52YWx1ZTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5kcm9wZG93bkRhdGFQcm92aWRlclN1cHBvcnRzVXBkYXRlcyhwcmV2Rm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyKSAmJlxuICAgICAgICBwcmV2Rm9ybURhdGEuZHJvcGRvd25EYXRhUHJvdmlkZXIgIT09IG1hcHBlZEZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlclxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAgICAgLmRlbGV0ZURyb3Bkb3duRGF0YShcbiAgICAgICAgICAgIHByZXZGb3JtRGF0YS5kcm9wZG93bkRhdGFQcm92aWRlcixcbiAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgICBwcmV2Rm9ybURhdGEua2V5XG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRyb3Bkb3duRGF0YVByb3ZpZGVyU3VwcG9ydHNVcGRhdGVzKG1hcHBlZEZvcm1EYXRhLmRyb3Bkb3duRGF0YVByb3ZpZGVyKSkge1xuICAgICAgICB0aGlzLm1vZGlmaWVkRHJvcGRvd25WYWx1ZXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGRyb3Bkb3duVmFsdWVzID0+IHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gZHJvcGRvd25WYWx1ZXMucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywga2V5VmFsdWUpID0+ICh7Li4uYWNjLCBba2V5VmFsdWUua2V5XToga2V5VmFsdWUudmFsdWV9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgICAgICAgLnBvc3REcm9wZG93bkRhdGEoXG4gICAgICAgICAgICAgIG1hcHBlZEZvcm1EYXRhLmRyb3Bkb3duRGF0YVByb3ZpZGVyLFxuICAgICAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgICAgICAgICBtYXBwZWRGb3JtRGF0YS5rZXksXG4gICAgICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkKSB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnBvc3REb2N1bWVudFNlYXJjaChkb2N1bWVudERlZmluaXRpb25OYW1lLCBtYXBwZWRGb3JtRGF0YSkuc3Vic2NyaWJlKFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgICAgICAgIHRoaXMuaGlkZU1vZGFsKCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdGaWVsZHMgPSBbLi4udGhpcy5jYWNoZWRTZWFyY2hGaWVsZHNdO1xuICAgICAgICBjb25zdCBpbmRleFRvUmVwbGFjZSA9IG5ld0ZpZWxkcy5maW5kSW5kZXgoZmllbGQgPT4gZmllbGQua2V5ID09PSBtYXBwZWRGb3JtRGF0YS5rZXkpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEZpZWxkcyA9IG5ld0ZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGQua2V5ICE9PSBtYXBwZWRGb3JtRGF0YS5rZXkpO1xuXG4gICAgICAgIGZpbHRlcmVkRmllbGRzLnNwbGljZShpbmRleFRvUmVwbGFjZSwgMCwgbWFwcGVkRm9ybURhdGEpO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaEZpZWxkcyhkb2N1bWVudERlZmluaXRpb25OYW1lLCBmaWx0ZXJlZEZpZWxkcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVTZWFyY2hGaWVsZHMoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLCBuZXdTZWFyY2hGaWVsZHM6IEFycmF5PFNlYXJjaEZpZWxkPik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0KCk7XG5cbiAgICB0aGlzLmRvY3VtZW50U2VydmljZS5wdXREb2N1bWVudFNlYXJjaChkb2N1bWVudERlZmluaXRpb25OYW1lLCBuZXdTZWFyY2hGaWVsZHMpLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5lbmFibGVJbnB1dCgpO1xuICAgICAgICB0aGlzLmhpZGVNb2RhbCgpO1xuICAgICAgICB0aGlzLnJlZnJlc2hTZWFyY2hGaWVsZHMoKTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0SWZDaGFuZ2VkKGJlaGF2aW91clN1YmplY3QkOiBCZWhhdmlvclN1YmplY3Q8YW55PiwgdmFsdWU6IGFueSkge1xuICAgIGlmIChKU09OLnN0cmluZ2lmeShiZWhhdmlvdXJTdWJqZWN0JC52YWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkge1xuICAgICAgYmVoYXZpb3VyU3ViamVjdCQubmV4dCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkKGRhdGE6IFNlYXJjaEZpZWxkKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsaWRNYXRjaFR5cGUgPVxuICAgICAgZGF0YS5kYXRhVHlwZSA9PT0gJ3RleHQnICYmICF0aGlzLmlzRmllbGRUeXBlRHJvcGRvd24oZGF0YS5maWVsZFR5cGUpID8gZGF0YS5tYXRjaFR5cGUgOiB0cnVlO1xuICAgIGNvbnN0IHZhbGlkRHJvcGRvd25EYXRhUHJvdmlkZXIgPSB0aGlzLmlzRmllbGRUeXBlRHJvcGRvd24oZGF0YS5maWVsZFR5cGUpXG4gICAgICA/IGRhdGEuZHJvcGRvd25EYXRhUHJvdmlkZXJcbiAgICAgIDogdHJ1ZTtcbiAgICBjb25zdCBjb250YWluc0FsbFZhbHVlcyA9ICEhKFxuICAgICAgZGF0YS5rZXkgJiZcbiAgICAgIGRhdGEuZGF0YVR5cGUgJiZcbiAgICAgIHZhbGlkTWF0Y2hUeXBlICYmXG4gICAgICB2YWxpZERyb3Bkb3duRGF0YVByb3ZpZGVyICYmXG4gICAgICBkYXRhLnBhdGhcbiAgICApO1xuICAgIGNvbnN0IGtleUlzVW5pcXVlID1cbiAgICAgICF0aGlzLnNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkIHx8XG4gICAgICB0aGlzLmNhY2hlZFNlYXJjaEZpZWxkcy5maW5kSW5kZXgoZmllbGQgPT4gZmllbGQua2V5ID09PSBkYXRhLmtleSkgPT09IC0xO1xuXG4gICAgcmV0dXJuIGNvbnRhaW5zQWxsVmFsdWVzICYmIGtleUlzVW5pcXVlO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpZWxkVHlwZURyb3Bkb3duKGZpZWxkVHlwZT86IFNlYXJjaEZpZWxkRmllbGRUeXBlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZpZWxkVHlwZSA9PT0gJ3NpbmdsZS1zZWxlY3QtZHJvcGRvd24nIHx8IGZpZWxkVHlwZSA9PT0gJ211bHRpLXNlbGVjdC1kcm9wZG93bic7XG4gIH1cblxuICBwcml2YXRlIGRyb3Bkb3duRGF0YVByb3ZpZGVyU3VwcG9ydHNVcGRhdGVzKGRyb3Bkb3duRGF0YVByb3ZpZGVyPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRyb3Bkb3duRGF0YVByb3ZpZGVyID09PSAnZHJvcGRvd25EYXRhYmFzZURhdGFQcm92aWRlcic7XG4gIH1cblxuICBwcml2YXRlIG9wZW5TZWxlY3RlZFNlYXJjaEZpZWxkU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoRmllbGQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd01vZGFsKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Nb2RhbFNob3dpbmdTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMubW9kYWwubW9kYWxTaG93aW5nJC5zdWJzY3JpYmUobW9kYWxTaG93aW5nID0+IHtcbiAgICAgICAgaWYgKG1vZGFsU2hvd2luZykge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93U2VhcmNoRmllbGRzRm9ybSA9IHRydWU7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dTZWFyY2hGaWVsZHNGb3JtID0gZmFsc2U7XG4gICAgICAgICAgfSwgMTUwKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREb3dubG9hZChkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcsIHNlYXJjaEZpZWxkczogQXJyYXk8U2VhcmNoRmllbGQ+KTogdm9pZCB7XG4gICAgdGhpcy5kb3dubG9hZE5hbWUkLm5leHQoYCR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX0uanNvbmApO1xuICAgIHRoaXMuZG93bmxvYWRVcmwkLm5leHQoXG4gICAgICB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFxuICAgICAgICAnZGF0YTp0ZXh0L2pzb247Y2hhcnNldD1VVEYtOCwnICtcbiAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoe3NlYXJjaEZpZWxkc30sIG51bGwsIDIpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGVJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVJbnB1dCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlSW5wdXQkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93TW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbD8uc2hvdygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWRlTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbD8uaGlkZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoU2VhcmNoRmllbGRzKCk6IHZvaWQge1xuICAgIHRoaXMucmVmcmVzaFNlYXJjaEZpZWxkcyQubmV4dChudWxsKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48bmctY29udGFpbmVyXG4gICpuZ0lmPVwie1xuICAgIHNlYXJjaEZpZWxkczogdHJhbnNsYXRlZFNlYXJjaEZpZWxkcyQgfCBhc3luYyxcbiAgICBmaWVsZHM6IGZpZWxkcyQgfCBhc3luYyxcbiAgICBkb3dubG9hZFVybDogZG93bmxvYWRVcmwkIHwgYXN5bmMsXG4gICAgZG93bmxvYWROYW1lOiBkb3dubG9hZE5hbWUkIHwgYXN5bmMsXG4gICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgfCBhc3luYyxcbiAgICB2YWxpZDogdmFsaWQkIHwgYXN5bmMsXG4gICAgZGlzYWJsZUlucHV0OiBkaXNhYmxlSW5wdXQkIHwgYXN5bmNcbiAgfSBhcyBvYnNcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uczsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdDsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kYWw7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbnMgbGV0LW9icz1cIm9ic1wiPlxuICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIG10LW0zcHggbWItMyBwci0yIGZsb2F0LXJpZ2h0XCI+XG4gICAgPGFcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNwYWNlXCJcbiAgICAgIFtocmVmXT1cIm9icy5kb3dubG9hZFVybFwiXG4gICAgICBbZG93bmxvYWRdPVwib2JzLmRvd25sb2FkTmFtZVwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgIGRpc2FibGVkOlxuICAgICAgICAgICFvYnMuZG93bmxvYWRVcmwgfHwgIW9icy5kb3dubG9hZE5hbWUgfHwgb2JzLnNlYXJjaEZpZWxkcy5sZW5ndGggPD0gMCB8fCBvYnMuZGlzYWJsZUlucHV0XG4gICAgICB9XCJcbiAgICA+XG4gICAgICA8aSBjbGFzcz1cImljb24gbWRpIG1kaS1kb3dubG9hZCBtci0xXCI+PC9pPlxuICAgICAge3sgJ3NlYXJjaEZpZWxkcy5kb3dubG9hZEJ1dHRvblRleHQnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9hPlxuICAgIDxidXR0b25cbiAgICAgIChjbGljayk9XCJzZWFyY2hGaWVsZENsaWNrZWQoJGV2ZW50LCB0cnVlKVwiXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc3BhY2VcIlxuICAgICAgW25nQ2xhc3NdPVwie2Rpc2FibGVkOiBsb2FkaW5nU2VhcmNoRmllbGRzIHx8IG9icy5kaXNhYmxlSW5wdXR9XCJcbiAgICA+XG4gICAgICA8aSBjbGFzcz1cImljb24gbWRpIG1kaS1wbHVzIG1yLTFcIj48L2k+XG4gICAgICB7eyAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuYWRkUm93JyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbGlzdCBsZXQtb2JzPVwib2JzXCI+XG4gIDx2YWx0aW1vLWxpc3RcbiAgICBbaXRlbXNdPVwib2JzLnNlYXJjaEZpZWxkc1wiXG4gICAgW2ZpZWxkc109XCJvYnMuZmllbGRzXCJcbiAgICBbdmlld01vZGVdPVwiZmFsc2VcIlxuICAgIFtoZWFkZXJdPVwiZmFsc2VcIlxuICAgIChyb3dDbGlja2VkKT1cInNlYXJjaEZpZWxkQ2xpY2tlZCgkZXZlbnQsIGZhbHNlKVwiXG4gICAgKm5nSWY9XCJvYnMuc2VhcmNoRmllbGRzOyBlbHNlIGxvYWRpbmdcIlxuICAgIFtsYXN0Q29sdW1uVGVtcGxhdGVdPVwibW92ZVJvd0J1dHRvbnNUZW1wbGF0ZVJlZlwiXG4gID5cbiAgPC92YWx0aW1vLWxpc3Q+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vdmVSb3dCdXR0b25zIGxldC1pbmRleD1cImluZGV4XCIgbGV0LWxlbmd0aD1cImxlbmd0aFwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJtb3ZlLXJvdy1idXR0b25zXCJcbiAgICAqbmdJZj1cIntcbiAgICAgIGRpc2FibGVJbnB1dDogZGlzYWJsZUlucHV0JCB8IGFzeW5jLFxuICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgfCBhc3luY1xuICAgIH0gYXMgb2JzXCJcbiAgPlxuICAgIDxpXG4gICAgICBjbGFzcz1cIm1kaSBtZGktYXJyb3ctdXAtYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBtci0xXCJcbiAgICAgIChjbGljayk9XCJtb3ZlUm93KGluZGV4LCB0cnVlLCAkZXZlbnQsIG9icy5kb2N1bWVudERlZmluaXRpb25OYW1lKVwiXG4gICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGVkIGRpc2FibGVkLW1vdmUtcm93LWJ1dHRvbic6IGluZGV4ID09PSAwIHx8IG9icy5kaXNhYmxlSW5wdXR9XCJcbiAgICA+PC9pPlxuICAgIDxpXG4gICAgICBjbGFzcz1cIm1kaSBtZGktYXJyb3ctZG93bi1ib2xkIGJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIlxuICAgICAgKGNsaWNrKT1cIm1vdmVSb3coaW5kZXgsIGZhbHNlLCAkZXZlbnQsIG9icy5kb2N1bWVudERlZmluaXRpb25OYW1lKVwiXG4gICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGVkIGRpc2FibGVkLW1vdmUtcm93LWJ1dHRvbic6IGluZGV4ID09PSBsZW5ndGggLSAxIHx8IG9icy5kaXNhYmxlSW5wdXR9XCJcbiAgICA+PC9pPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9kYWwgbGV0LW9icz1cIm9ic1wiPlxuICA8dmFsdGltby1tb2RhbFxuICAgICNzZWFyY2hGaWVsZE1vZGFsXG4gICAgZWxlbWVudElkPVwic2VhcmNoRmllbGRNb2RhbFwiXG4gICAgW3RpdGxlXT1cIlxuICAgICAgc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGRcbiAgICAgICAgPyAoJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmFkZFJvdycgfCB0cmFuc2xhdGUpXG4gICAgICAgIDogKCdzZWFyY2hGaWVsZHNPdmVydmlldy5lZGl0JyB8IHRyYW5zbGF0ZSlcbiAgICBcIlxuICAgIFtzaG93Rm9vdGVyXT1cInRydWVcIlxuICA+XG4gICAgPGRpdiBib2R5IGNsYXNzPVwibXQtMlwiPlxuICAgICAgPHYtZm9ybVxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZm9ybVZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAqbmdJZj1cInNob3dTZWFyY2hGaWVsZHNGb3JtICYmIHtzZWFyY2hGaWVsZDogc2VsZWN0ZWRTZWFyY2hGaWVsZCQgfCBhc3luY30gYXMgc2VhcmNoT2JzXCJcbiAgICAgID5cbiAgICAgICAgPHYtaW5wdXRcbiAgICAgICAgICBuYW1lPVwidGl0bGVcIlxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtkZWZhdWx0VmFsdWVdPVwic2VhcmNoT2JzLnNlYXJjaEZpZWxkPy50aXRsZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlSW5wdXRcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJmYWxzZVwiXG4gICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy50aXRsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgIDwvdi1pbnB1dD5cbiAgICAgICAgPHYtaW5wdXRcbiAgICAgICAgICBuYW1lPVwia2V5XCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmtleScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFttYXJnaW5dPVwidHJ1ZVwiXG4gICAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJzZWFyY2hPYnMuc2VhcmNoRmllbGQ/LmtleVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlSW5wdXQgfHwgIXNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgW3dpZHRoUHhdPVwiMjAwXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5rZXknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICA8L3YtaW5wdXQ+XG4gICAgICAgIDx2LWlucHV0XG4gICAgICAgICAgbmFtZT1cInBhdGhcIlxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcucGF0aCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFttYXJnaW5dPVwidHJ1ZVwiXG4gICAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJzZWFyY2hPYnMuc2VhcmNoRmllbGQ/LnBhdGhcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5wYXRoJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC92LWlucHV0PlxuICAgICAgICA8di1zZWxlY3RcbiAgICAgICAgICAqbmdJZj1cImRhdGFUeXBlSXRlbXMkIHwgYXN5bmMgYXMgZGF0YVR5cGVJdGVtc1wiXG4gICAgICAgICAgW2l0ZW1zXT1cImRhdGFUeXBlSXRlbXNcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcuc2VhcmNoRmllbGRQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcuZGF0YVR5cGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgbmFtZT1cImRhdGFUeXBlXCJcbiAgICAgICAgICBbZGVmYXVsdFNlbGVjdGlvbklkXT1cInNlYXJjaE9icy5zZWFyY2hGaWVsZD8uZGF0YVR5cGVcIlxuICAgICAgICAgIFt3aWR0aEluUHhdPVwiMjAwXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5kYXRhVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+PC92LXNlbGVjdD5cbiAgICAgICAgPHYtc2VsZWN0XG4gICAgICAgICAgKm5nSWY9XCIoc2hvd01hdGNoVHlwZXMkIHwgYXN5bmMpICYmIChtYXRjaFR5cGVJdGVtcyQgfCBhc3luYykgYXMgbWF0Y2hUeXBlSXRlbXNcIlxuICAgICAgICAgIFtpdGVtc109XCJtYXRjaFR5cGVJdGVtc1wiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5tYXRjaFR5cGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgbmFtZT1cIm1hdGNoVHlwZVwiXG4gICAgICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJzZWFyY2hPYnMuc2VhcmNoRmllbGQ/Lm1hdGNoVHlwZVwiXG4gICAgICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLm1hdGNoVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+PC92LXNlbGVjdD5cbiAgICAgICAgPHYtc2VsZWN0XG4gICAgICAgICAgKm5nSWY9XCJmaWVsZFR5cGVJdGVtcyQgfCBhc3luYyBhcyBmaWVsZFR5cGVJdGVtc1wiXG4gICAgICAgICAgW2l0ZW1zXT1cImZpZWxkVHlwZUl0ZW1zXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnNlYXJjaEZpZWxkUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmZpZWxkVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICBuYW1lPVwiZmllbGRUeXBlXCJcbiAgICAgICAgICBbZGVmYXVsdFNlbGVjdGlvbklkXT1cInNlYXJjaE9icy5zZWFyY2hGaWVsZD8uZmllbGRUeXBlXCJcbiAgICAgICAgICBbd2lkdGhJblB4XT1cIjIwMFwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMuZmllbGRUeXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID48L3Ytc2VsZWN0PlxuICAgICAgICA8di1zZWxlY3RcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKGZpZWxkVHlwZUlzRHJvcGRvd24kIHwgYXN5bmMpICYmXG4gICAgICAgICAgICAoZHJvcGRvd25EYXRhUHJvdmlkZXJOYW1lcyQgfCBhc3luYykgYXMgZHJvcGRvd25EYXRhUHJvdmlkZXJOYW1lc1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2l0ZW1zXT1cImRyb3Bkb3duRGF0YVByb3ZpZGVyTmFtZXNcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcuc2VhcmNoRmllbGRQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcuZHJvcGRvd25EYXRhUHJvdmlkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiZmFsc2VcIlxuICAgICAgICAgIG5hbWU9XCJkcm9wZG93bkRhdGFQcm92aWRlclwiXG4gICAgICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJzZWFyY2hPYnMuc2VhcmNoRmllbGQ/LmRyb3Bkb3duRGF0YVByb3ZpZGVyXCJcbiAgICAgICAgICBbd2lkdGhJblB4XT1cIjIwMFwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMuZHJvcGRvd25EYXRhUHJvdmlkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPjwvdi1zZWxlY3Q+XG4gICAgICAgIDx2LW11bHRpLWlucHV0XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIChzaG93SW5wdXREcm9wZG93blRhYmxlJCB8IGFzeW5jKSAmJlxuICAgICAgICAgICAgKGluaXRpYWxEcm9wZG93blZhbHVlcyQgfCBhc3luYykgYXMgaW5pdGlhbERyb3Bkb3duVmFsdWVzXG4gICAgICAgICAgXCJcbiAgICAgICAgICBuYW1lPVwiZHJvcGRvd25WYWx1ZXNcIlxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcuZHJvcGRvd25MaXN0VmFsdWVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgdHlwZT1cImtleVZhbHVlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW2RlZmF1bHRWYWx1ZXNdPVwiaW5pdGlhbERyb3Bkb3duVmFsdWVzXCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJmYWxzZVwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMuZHJvcGRvd25MaXN0VmFsdWVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImRyb3Bkb3duRGF0YWxpc3RDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC92LW11bHRpLWlucHV0PlxuICAgICAgICA8di10YWJsZVxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAoc2hvd1JlYWRvbmx5RHJvcGRvd25UYWJsZSQgfCBhc3luYykgJiZcbiAgICAgICAgICAgIChpbml0aWFsRHJvcGRvd25WYWx1ZXMkIHwgYXN5bmMpIGFzIGluaXRpYWxEcm9wZG93blZhbHVlc1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2l0ZW1zXT1cImluaXRpYWxEcm9wZG93blZhbHVlc1wiXG4gICAgICAgICAgW2NvbHVtbnNdPVwiZHJvcGRvd25Db2x1bW5zJCB8IGFzeW5jXCJcbiAgICAgICAgICBbc2hvd0VkaXRCdXR0b25zXT1cImZhbHNlXCJcbiAgICAgICAgICBbaXRlbXNUcmFuc2xhdGlvbktleV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcnXCJcbiAgICAgICAgICBbc2hvd1BhZ2luYXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgIFttb2JpbGVCcmVha3BvaW50UHhdPVwiMjAwXCJcbiAgICAgICAgPjwvdi10YWJsZT5cbiAgICAgIDwvdi1mb3JtPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZm9vdGVyPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBwLTBcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnNGb290ZXJNb2RhbDsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvdmFsdGltby1tb2RhbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uc0Zvb3Rlck1vZGFsIGxldC1vYnM9XCJvYnNcIj5cbiAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCIgKm5nSWY9XCJ7c2VhcmNoRmllbGQ6IHNlbGVjdGVkU2VhcmNoRmllbGQkIHwgYXN5bmN9IGFzIHNlYXJjaE9ic1wiPlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodC1idXR0b25zXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zcGFjZSBidG4tc2Vjb25kYXJ5XCJcbiAgICAgICAgKm5nSWY9XCIhc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgIChjbGljayk9XCJkZWxldGVTZWxlY3RlZFNlYXJjaEZpZWxkKG9icy5kb2N1bWVudERlZmluaXRpb25OYW1lLCBzZWFyY2hPYnMuc2VhcmNoRmllbGQpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmRlbGV0ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2F2ZVNlYXJjaEZpZWxkKG9icy5kb2N1bWVudERlZmluaXRpb25OYW1lKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc3BhY2UgbXItMFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0IHx8ICFvYnMudmFsaWRcIlxuICAgICAgPlxuICAgICAgICB7eyAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuc3VibWl0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxuICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgIDx2YWx0aW1vLXNwaW5uZXI+PC92YWx0aW1vLXNwaW5uZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
package/esm2020/lib/dossier-management-link-process/dossier-management-link-process.component.mjs
CHANGED
|
@@ -75,10 +75,10 @@ export class DossierManagementLinkProcessComponent {
|
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
-
DossierManagementLinkProcessComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
79
|
-
DossierManagementLinkProcessComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
|
|
80
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
78
|
+
DossierManagementLinkProcessComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DossierManagementLinkProcessComponent, deps: [{ token: i1.ConfigService }, { token: i2.ProcessService }, { token: i3.ActivatedRoute }, { token: i4.DocumentService }], target: i0.ɵɵFactoryTarget.Component });
|
|
79
|
+
DossierManagementLinkProcessComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DossierManagementLinkProcessComponent, selector: "valtimo-dossier-management-link-process", ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"documentenApiUploadProvider\">\n <h2 class=\"mb-4 mt-6\">{{ 'dossierManagement.linkProcess.title' | translate }}</h2>\n <v-paragraph [margin]=\"true\">{{\n 'dossierManagement.linkProcess.description' | translate\n }}</v-paragraph>\n <ng-container\n *ngIf=\"{\n processItems: processItems$ | async,\n disabled: disabled$ | async,\n defaultSelectionId: selectionId$ | async\n } as obs\"\n >\n <v-select\n *ngIf=\"obs.processItems\"\n (selectedChange)=\"selectProcess($event)\"\n [defaultSelectionId]=\"obs.defaultSelectionId\"\n [disabled]=\"obs.disabled\"\n [items]=\"obs.processItems\"\n [loading]=\"!obs.processItems\"\n [margin]=\"true\"\n [required]=\"false\"\n ></v-select>\n </ng-container>\n</ng-container>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic", "loading"] }, { kind: "component", type: i6.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "clearable", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin"], outputs: ["selectedChange", "clear"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
|
|
80
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DossierManagementLinkProcessComponent, decorators: [{
|
|
81
81
|
type: Component,
|
|
82
82
|
args: [{ selector: 'valtimo-dossier-management-link-process', template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"documentenApiUploadProvider\">\n <h2 class=\"mb-4 mt-6\">{{ 'dossierManagement.linkProcess.title' | translate }}</h2>\n <v-paragraph [margin]=\"true\">{{\n 'dossierManagement.linkProcess.description' | translate\n }}</v-paragraph>\n <ng-container\n *ngIf=\"{\n processItems: processItems$ | async,\n disabled: disabled$ | async,\n defaultSelectionId: selectionId$ | async\n } as obs\"\n >\n <v-select\n *ngIf=\"obs.processItems\"\n (selectedChange)=\"selectProcess($event)\"\n [defaultSelectionId]=\"obs.defaultSelectionId\"\n [disabled]=\"obs.disabled\"\n [items]=\"obs.processItems\"\n [loading]=\"!obs.processItems\"\n [margin]=\"true\"\n [required]=\"false\"\n ></v-select>\n </ng-container>\n</ng-container>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
83
83
|
}], ctorParameters: function () { return [{ type: i1.ConfigService }, { type: i2.ProcessService }, { type: i3.ActivatedRoute }, { type: i4.DocumentService }]; } });
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LWxpbmstcHJvY2Vzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXItbWFuYWdlbWVudC9zcmMvbGliL2Rvc3NpZXItbWFuYWdlbWVudC1saW5rLXByb2Nlc3MvZG9zc2llci1tYW5hZ2VtZW50LWxpbmstcHJvY2Vzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXItbWFuYWdlbWVudC9zcmMvbGliL2Rvc3NpZXItbWFuYWdlbWVudC1saW5rLXByb2Nlc3MvZG9zc2llci1tYW5hZ2VtZW50LWxpbmstcHJvY2Vzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxTQUFTLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFnQixjQUFjLEVBQWdCLE1BQU0saUJBQWlCLENBQUM7QUFDN0UsT0FBTyxFQUFDLGVBQWUsRUFBRSxHQUFHLEVBQWEsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQVd0RCxNQUFNLE9BQU8scUNBQXFDO0lBV2hELFlBQ21CLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLEtBQXFCLEVBQ3JCLGVBQWdDO1FBSGhDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFibkQsMkJBQXNCLEdBQWtCLElBQUksQ0FBQztRQUVwQyxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLGtCQUFhLEdBQWtDLElBQUksQ0FBQyxjQUFjO2FBQ3hFLHFCQUFxQixFQUFFO2FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwRixjQUFTLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFRdkQsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQ3BDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxvQkFBNEI7UUFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hELElBQUksb0JBQW9CLElBQUksb0JBQW9CLEtBQUssa0JBQWtCLEVBQUU7WUFDdkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWU7aUJBQ2pCLHlCQUF5QixDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxvQkFBb0IsQ0FBQztpQkFDNUUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU8sZ0NBQWdDLENBQUMsTUFBcUI7UUFDNUQsSUFBSSxDQUFDLDJCQUEyQixHQUFHLE1BQU0sQ0FBQyxjQUFjLEtBQUssY0FBYyxDQUFDLGNBQWMsQ0FBQztJQUM3RixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxlQUFlO2FBQ2pCLHNCQUFzQixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQzthQUNuRCxTQUFTLENBQUMsbUJBQW1CLENBQUMsRUFBRTtZQUMvQixJQUFJLG1CQUFtQixFQUFFO2dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2FBQ2xFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztrSUF6RFUscUNBQXFDO3NIQUFyQyxxQ0FBcUMsK0VDNUJsRCw4N0NBd0NBOzJGRFphLHFDQUFxQztrQkFMakQsU0FBUzsrQkFDRSx5Q0FBeUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2UsIFVwbG9hZFByb3ZpZGVyLCBWYWx0aW1vQ29uZmlnfSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIG1hcCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1NlbGVjdEl0ZW19IGZyb20gJ0B2YWx0aW1vL3VzZXItaW50ZXJmYWNlJztcbmltcG9ydCB7UHJvY2Vzc1NlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3Byb2Nlc3MnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LWxpbmstcHJvY2VzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3NzaWVyLW1hbmFnZW1lbnQtbGluay1wcm9jZXNzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9zc2llci1tYW5hZ2VtZW50LWxpbmstcHJvY2Vzcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyTWFuYWdlbWVudExpbmtQcm9jZXNzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZG9jdW1lbnRlbkFwaVVwbG9hZFByb3ZpZGVyITogYm9vbGVhbjtcbiAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgcmVhZG9ubHkgc2VsZWN0aW9uSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgcHJvY2Vzc0l0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSB0aGlzLnByb2Nlc3NTZXJ2aWNlXG4gICAgLmdldFByb2Nlc3NEZWZpbml0aW9ucygpXG4gICAgLnBpcGUobWFwKHByb2Nlc3NlcyA9PiBwcm9jZXNzZXMubWFwKHByb2Nlc3MgPT4gKHt0ZXh0OiBwcm9jZXNzLm5hbWUsIGlkOiBwcm9jZXNzLmtleX0pKSkpO1xuXG4gIHJlYWRvbmx5IGRpc2FibGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NTZXJ2aWNlOiBQcm9jZXNzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc2V0RG9jdW1lbnRlbkFwaVVwbG9hZGVyUHJvdmlkZXIoY29uZmlnU2VydmljZS5jb25maWcpO1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCduYW1lJyk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kb2N1bWVudGVuQXBpVXBsb2FkUHJvdmlkZXIpIHtcbiAgICAgIHRoaXMuZ2V0RGVmYXVsdFNlbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFByb2Nlc3MocHJvY2Vzc0RlZmluaXRpb25LZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQkLm5leHQodHJ1ZSk7XG4gICAgY29uc3QgY3VycmVudFNlbGVjdGlvbklkID0gdGhpcy5zZWxlY3Rpb25JZCQuZ2V0VmFsdWUoKTtcbiAgICBpZiAocHJvY2Vzc0RlZmluaXRpb25LZXkgJiYgcHJvY2Vzc0RlZmluaXRpb25LZXkgIT09IGN1cnJlbnRTZWxlY3Rpb25JZCkge1xuICAgICAgdGhpcy5kaXNhYmxlZCQubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAgIC51cGRhdGVMaW5rZWRVcGxvYWRQcm9jZXNzKHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgcHJvY2Vzc0RlZmluaXRpb25LZXkpXG4gICAgICAgIC5zdWJzY3JpYmUocHJvY2Vzc0xpbmsgPT4ge1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSWQkLm5leHQocHJvY2Vzc0xpbmsucHJvY2Vzc0RlZmluaXRpb25LZXkpO1xuICAgICAgICAgIHRoaXMuZGlzYWJsZWQkLm5leHQoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFwcm9jZXNzRGVmaW5pdGlvbktleSkge1xuICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZGVsZXRlTGlua2VkVXBsb2FkUHJvY2Vzcyh0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQkLm5leHQoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXREb2N1bWVudGVuQXBpVXBsb2FkZXJQcm92aWRlcihjb25maWc6IFZhbHRpbW9Db25maWcpOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50ZW5BcGlVcGxvYWRQcm92aWRlciA9IGNvbmZpZy51cGxvYWRQcm92aWRlciA9PT0gVXBsb2FkUHJvdmlkZXIuRE9DVU1FTlRFTl9BUEk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgIC5nZXRMaW5rZWRVcGxvYWRQcm9jZXNzKHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICAgIC5zdWJzY3JpYmUobGlua2VkVXBsb2FkUHJvY2VzcyA9PiB7XG4gICAgICAgIGlmIChsaW5rZWRVcGxvYWRQcm9jZXNzKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JZCQubmV4dChsaW5rZWRVcGxvYWRQcm9jZXNzLnByb2Nlc3NEZWZpbml0aW9uS2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvY3VtZW50ZW5BcGlVcGxvYWRQcm92aWRlclwiPlxuICA8aDIgY2xhc3M9XCJtYi00IG10LTZcIj57eyAnZG9zc2llck1hbmFnZW1lbnQubGlua1Byb2Nlc3MudGl0bGUnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgPHYtcGFyYWdyYXBoIFttYXJnaW5dPVwidHJ1ZVwiPnt7XG4gICAgJ2Rvc3NpZXJNYW5hZ2VtZW50LmxpbmtQcm9jZXNzLmRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVxuICB9fTwvdi1wYXJhZ3JhcGg+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIntcbiAgICAgIHByb2Nlc3NJdGVtczogcHJvY2Vzc0l0ZW1zJCB8IGFzeW5jLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkJCB8IGFzeW5jLFxuICAgICAgZGVmYXVsdFNlbGVjdGlvbklkOiBzZWxlY3Rpb25JZCQgfCBhc3luY1xuICAgIH0gYXMgb2JzXCJcbiAgPlxuICAgIDx2LXNlbGVjdFxuICAgICAgKm5nSWY9XCJvYnMucHJvY2Vzc0l0ZW1zXCJcbiAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJzZWxlY3RQcm9jZXNzKCRldmVudClcIlxuICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJvYnMuZGVmYXVsdFNlbGVjdGlvbklkXCJcbiAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWRcIlxuICAgICAgW2l0ZW1zXT1cIm9icy5wcm9jZXNzSXRlbXNcIlxuICAgICAgW2xvYWRpbmddPVwiIW9icy5wcm9jZXNzSXRlbXNcIlxuICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgIFtyZXF1aXJlZF09XCJmYWxzZVwiXG4gICAgPjwvdi1zZWxlY3Q+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|