@valtimo/dossier-management 10.4.0 → 10.5.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 +18 -3
- 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 +4 -4
- 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 +4 -4
- package/esm2020/lib/dossier-management-detail-container/tabs/dossier-management-search-fields/dossier-management-search-fields.component.mjs +4 -4
- 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 +2 -2
- package/esm2020/lib/dossier-management-upload/dossier-management-upload.component.mjs +4 -4
- package/esm2020/lib/dossier-management.module.mjs +2 -2
- package/esm2020/lib/models/index.mjs +16 -1
- package/esm2020/lib/models/list-column.model.mjs +16 -1
- package/esm2020/lib/tab.enum.mjs +16 -1
- package/esm2020/lib/tab.service.mjs +2 -2
- package/esm2020/public-api.mjs +2 -2
- package/fesm2015/valtimo-dossier-management.mjs +82 -36
- package/fesm2015/valtimo-dossier-management.mjs.map +1 -1
- package/fesm2020/valtimo-dossier-management.mjs +98 -36
- package/fesm2020/valtimo-dossier-management.mjs.map +1 -1
- package/lib/dossier-management-assignee/dossier-management-assignee.component.d.ts.map +1 -1
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/list-column.model.d.ts.map +1 -1
- package/lib/tab.enum.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright 2015-
|
|
2
|
+
* Copyright 2015-2023 Ritense BV, the Netherlands.
|
|
3
3
|
*
|
|
4
4
|
* Licensed under EUPL, Version 1.2 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -407,10 +407,10 @@ export class DossierManagementSearchFieldsComponent {
|
|
|
407
407
|
}
|
|
408
408
|
}
|
|
409
409
|
DossierManagementSearchFieldsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DossierManagementSearchFieldsComponent, deps: [{ token: i1.DocumentService }, { token: i2.ActivatedRoute }, { token: i3.TranslateService }, { token: i4.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
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-2022 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: ["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"], 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" }] });
|
|
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
411
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DossierManagementSearchFieldsComponent, decorators: [{
|
|
412
412
|
type: Component,
|
|
413
|
-
args: [{ selector: 'valtimo-dossier-management-search-fields', template: "<!--\n ~ Copyright 2015-2022 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: ["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"] }]
|
|
413
|
+
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
414
|
}], ctorParameters: function () { return [{ type: i1.DocumentService }, { type: i2.ActivatedRoute }, { type: i3.TranslateService }, { type: i4.DomSanitizer }]; }, propDecorators: { moveRowButtonsTemplateRef: [{
|
|
415
415
|
type: ViewChild,
|
|
416
416
|
args: ['moveRowButtons']
|
|
@@ -420,4 +420,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
420
420
|
}], searchField: [{
|
|
421
421
|
type: Output
|
|
422
422
|
}] } });
|
|
423
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyLW1hbmFnZW1lbnQvc3JjL2xpYi9kb3NzaWVyLW1hbmFnZW1lbnQtZGV0YWlsLWNvbnRhaW5lci90YWJzL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvZG9zc2llci1tYW5hZ2VtZW50LWRldGFpbC1jb250YWluZXIvdGFicy9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUdaLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBRUgsRUFBRSxFQUNGLFlBQVksRUFDWixTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBbUJkLE1BQU0sT0FBTyxzQ0FBc0M7SUFzUWpELFlBQ21CLGVBQWdDLEVBQ2hDLEtBQXFCLEVBQ3JCLGdCQUFrQyxFQUNsQyxTQUF1QjtRQUh2QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFr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LFNBQVM7K0JBQ0UsMENBQTBDOzZMQUtoQix5QkFBeUI7c0JBQTVELFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNJLEtBQUs7c0JBQW5DLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUVuQixXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjIgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFN1YnNjcmlwdGlvbixcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7TGlzdEZpZWxkLCBNb2RhbENvbXBvbmVudH0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgRGVmaW5pdGlvbkNvbHVtbixcbiAgU2VhcmNoRmllbGQsXG4gIFNlYXJjaEZpZWxkRGF0YVR5cGUsXG4gIFNlYXJjaEZpZWxkRmllbGRUeXBlLFxuICBTZWFyY2hGaWVsZE1hdGNoVHlwZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7RG9tU2FuaXRpemVyLCBTYWZlVXJsfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7TXVsdGlJbnB1dE91dHB1dCwgTXVsdGlJbnB1dFZhbHVlcywgU2VsZWN0SXRlbSwgVGFibGVDb2x1bW59IGZyb20gJ0B2YWx0aW1vL3VzZXItaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERvc3NpZXJNYW5hZ2VtZW50U2VhcmNoRmllbGRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCdtb3ZlUm93QnV0dG9ucycpIHB1YmxpYyBtb3ZlUm93QnV0dG9uc1RlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+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/LmhpZGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaFNlYXJjaEZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLnJlZnJlc2hTZWFyY2hGaWVsZHMkLm5leHQobnVsbCk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDIyIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+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=
|
|
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=
|
package/esm2020/lib/dossier-management-link-process/dossier-management-link-process.component.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright 2015-
|
|
2
|
+
* Copyright 2015-2023 Ritense BV, the Netherlands.
|
|
3
3
|
*
|
|
4
4
|
* Licensed under EUPL, Version 1.2 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -76,9 +76,9 @@ export class DossierManagementLinkProcessComponent {
|
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
DossierManagementLinkProcessComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", 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.2.12", type: DossierManagementLinkProcessComponent, selector: "valtimo-dossier-management-link-process", ngImport: i0, template: "<!--\n ~ Copyright 2015-
|
|
79
|
+
DossierManagementLinkProcessComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", 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 (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
80
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DossierManagementLinkProcessComponent, decorators: [{
|
|
81
81
|
type: Component,
|
|
82
|
-
args: [{ selector: 'valtimo-dossier-management-link-process', template: "<!--\n ~ Copyright 2015-
|
|
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 (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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LWxpbmstcHJvY2Vzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXItbWFuYWdlbWVudC9zcmMvbGliL2Rvc3NpZXItbWFuYWdlbWVudC1saW5rLXByb2Nlc3MvZG9zc2llci1tYW5hZ2VtZW50LWxpbmstcHJvY2Vzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXItbWFuYWdlbWVudC9zcmMvbGliL2Rvc3NpZXItbWFuYWdlbWVudC1saW5rLXByb2Nlc3MvZG9zc2llci1tYW5hZ2VtZW50LWxpbmstcHJvY2Vzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxTQUFTLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFnQixjQUFjLEVBQWdCLE1BQU0saUJBQWlCLENBQUM7QUFDN0UsT0FBTyxFQUFDLGVBQWUsRUFBRSxHQUFHLEVBQWEsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQVd0RCxNQUFNLE9BQU8scUNBQXFDO0lBV2hELFlBQ21CLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLEtBQXFCLEVBQ3JCLGVBQWdDO1FBSGhDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFibkQsMkJBQXNCLEdBQWtCLElBQUksQ0FBQztRQUVwQyxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLGtCQUFhLEdBQWtDLElBQUksQ0FBQyxjQUFjO2FBQ3hFLHFCQUFxQixFQUFFO2FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwRixjQUFTLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFRdkQsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQ3BDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxvQkFBNEI7UUFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hELElBQUksb0JBQW9CLElBQUksb0JBQW9CLEtBQUssa0JBQWtCLEVBQUU7WUFDdkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWU7aUJBQ2pCLHlCQUF5QixDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxvQkFBb0IsQ0FBQztpQkFDNUUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU8sZ0NBQWdDLENBQUMsTUFBcUI7UUFDNUQsSUFBSSxDQUFDLDJCQUEyQixHQUFHLE1BQU0sQ0FBQyxjQUFjLEtBQUssY0FBYyxDQUFDLGNBQWMsQ0FBQztJQUM3RixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxlQUFlO2FBQ2pCLHNCQUFzQixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQzthQUNuRCxTQUFTLENBQUMsbUJBQW1CLENBQUMsRUFBRTtZQUMvQixJQUFJLG1CQUFtQixFQUFFO2dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2FBQ2xFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzttSUF6RFUscUNBQXFDO3VIQUFyQyxxQ0FBcUMsK0VDNUJsRCw0NUNBdUNBOzRGRFhhLHFDQUFxQztrQkFMakQsU0FBUzsrQkFDRSx5Q0FBeUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2UsIFVwbG9hZFByb3ZpZGVyLCBWYWx0aW1vQ29uZmlnfSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIG1hcCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1NlbGVjdEl0ZW19IGZyb20gJ0B2YWx0aW1vL3VzZXItaW50ZXJmYWNlJztcbmltcG9ydCB7UHJvY2Vzc1NlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3Byb2Nlc3MnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LWxpbmstcHJvY2VzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3NzaWVyLW1hbmFnZW1lbnQtbGluay1wcm9jZXNzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9zc2llci1tYW5hZ2VtZW50LWxpbmstcHJvY2Vzcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyTWFuYWdlbWVudExpbmtQcm9jZXNzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZG9jdW1lbnRlbkFwaVVwbG9hZFByb3ZpZGVyITogYm9vbGVhbjtcbiAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgcmVhZG9ubHkgc2VsZWN0aW9uSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgcHJvY2Vzc0l0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSB0aGlzLnByb2Nlc3NTZXJ2aWNlXG4gICAgLmdldFByb2Nlc3NEZWZpbml0aW9ucygpXG4gICAgLnBpcGUobWFwKHByb2Nlc3NlcyA9PiBwcm9jZXNzZXMubWFwKHByb2Nlc3MgPT4gKHt0ZXh0OiBwcm9jZXNzLm5hbWUsIGlkOiBwcm9jZXNzLmtleX0pKSkpO1xuXG4gIHJlYWRvbmx5IGRpc2FibGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NTZXJ2aWNlOiBQcm9jZXNzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc2V0RG9jdW1lbnRlbkFwaVVwbG9hZGVyUHJvdmlkZXIoY29uZmlnU2VydmljZS5jb25maWcpO1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCduYW1lJyk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kb2N1bWVudGVuQXBpVXBsb2FkUHJvdmlkZXIpIHtcbiAgICAgIHRoaXMuZ2V0RGVmYXVsdFNlbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFByb2Nlc3MocHJvY2Vzc0RlZmluaXRpb25LZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQkLm5leHQodHJ1ZSk7XG4gICAgY29uc3QgY3VycmVudFNlbGVjdGlvbklkID0gdGhpcy5zZWxlY3Rpb25JZCQuZ2V0VmFsdWUoKTtcbiAgICBpZiAocHJvY2Vzc0RlZmluaXRpb25LZXkgJiYgcHJvY2Vzc0RlZmluaXRpb25LZXkgIT09IGN1cnJlbnRTZWxlY3Rpb25JZCkge1xuICAgICAgdGhpcy5kaXNhYmxlZCQubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAgIC51cGRhdGVMaW5rZWRVcGxvYWRQcm9jZXNzKHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgcHJvY2Vzc0RlZmluaXRpb25LZXkpXG4gICAgICAgIC5zdWJzY3JpYmUocHJvY2Vzc0xpbmsgPT4ge1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSWQkLm5leHQocHJvY2Vzc0xpbmsucHJvY2Vzc0RlZmluaXRpb25LZXkpO1xuICAgICAgICAgIHRoaXMuZGlzYWJsZWQkLm5leHQoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFwcm9jZXNzRGVmaW5pdGlvbktleSkge1xuICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZGVsZXRlTGlua2VkVXBsb2FkUHJvY2Vzcyh0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQkLm5leHQoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXREb2N1bWVudGVuQXBpVXBsb2FkZXJQcm92aWRlcihjb25maWc6IFZhbHRpbW9Db25maWcpOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50ZW5BcGlVcGxvYWRQcm92aWRlciA9IGNvbmZpZy51cGxvYWRQcm92aWRlciA9PT0gVXBsb2FkUHJvdmlkZXIuRE9DVU1FTlRFTl9BUEk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgIC5nZXRMaW5rZWRVcGxvYWRQcm9jZXNzKHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICAgIC5zdWJzY3JpYmUobGlua2VkVXBsb2FkUHJvY2VzcyA9PiB7XG4gICAgICAgIGlmIChsaW5rZWRVcGxvYWRQcm9jZXNzKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JZCQubmV4dChsaW5rZWRVcGxvYWRQcm9jZXNzLnByb2Nlc3NEZWZpbml0aW9uS2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvY3VtZW50ZW5BcGlVcGxvYWRQcm92aWRlclwiPlxuICA8aDIgY2xhc3M9XCJtYi00IG10LTZcIj57eyAnZG9zc2llck1hbmFnZW1lbnQubGlua1Byb2Nlc3MudGl0bGUnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgPHYtcGFyYWdyYXBoIFttYXJnaW5dPVwidHJ1ZVwiPnt7XG4gICAgJ2Rvc3NpZXJNYW5hZ2VtZW50LmxpbmtQcm9jZXNzLmRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVxuICB9fTwvdi1wYXJhZ3JhcGg+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIntcbiAgICAgIHByb2Nlc3NJdGVtczogcHJvY2Vzc0l0ZW1zJCB8IGFzeW5jLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkJCB8IGFzeW5jLFxuICAgICAgZGVmYXVsdFNlbGVjdGlvbklkOiBzZWxlY3Rpb25JZCQgfCBhc3luY1xuICAgIH0gYXMgb2JzXCJcbiAgPlxuICAgIDx2LXNlbGVjdFxuICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cInNlbGVjdFByb2Nlc3MoJGV2ZW50KVwiXG4gICAgICBbZGVmYXVsdFNlbGVjdGlvbklkXT1cIm9icy5kZWZhdWx0U2VsZWN0aW9uSWRcIlxuICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZFwiXG4gICAgICBbaXRlbXNdPVwib2JzLnByb2Nlc3NJdGVtc1wiXG4gICAgICBbbG9hZGluZ109XCIhb2JzLnByb2Nlc3NJdGVtc1wiXG4gICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgW3JlcXVpcmVkXT1cImZhbHNlXCJcbiAgICA+PC92LXNlbGVjdD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|