@valtimo/dossier-management 11.3.2 → 12.0.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/esm2022/lib/components/dossier-management-assignee/dossier-management-assignee.component.mjs +7 -7
- package/esm2022/lib/components/dossier-management-connect-modal/dossier-management-connect-modal.component.mjs +7 -7
- package/esm2022/lib/components/dossier-management-create/dossier-management-create.component.mjs +119 -0
- package/esm2022/lib/components/dossier-management-detail/dossier-management-detail.component.mjs +34 -12
- package/esm2022/lib/components/dossier-management-detail-container/dossier-management-detail-container.component.mjs +111 -36
- package/esm2022/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.component.mjs +159 -0
- package/esm2022/lib/components/dossier-management-document-definition/dossier-management-document-definition.component.mjs +147 -0
- package/esm2022/lib/components/dossier-management-list/dossier-management-list.component.mjs +33 -16
- package/esm2022/lib/components/dossier-management-list-columns/dossier-management-list-columns.component.mjs +12 -11
- package/esm2022/lib/components/dossier-management-processes/dossier-management-processes.component.mjs +7 -7
- package/esm2022/lib/components/dossier-management-remove-modal/dossier-management-remove-modal.component.mjs +7 -7
- package/esm2022/lib/components/dossier-management-search-fields/dossier-management-search-fields.component.mjs +50 -29
- package/esm2022/lib/components/dossier-management-statuses/dossier-management-status-modal/dossier-management-status-modal.component.mjs +285 -0
- package/esm2022/lib/components/dossier-management-statuses/dossier-management-statuses.component.mjs +154 -0
- package/esm2022/lib/components/dossier-management-tabs/dossier-management-add-tab-modal/dossier-management-add-tab-modal.component.mjs +10 -9
- package/esm2022/lib/components/dossier-management-tabs/dossier-management-edit-tab-modal/dossier-management-edit-tab-modal.component.mjs +10 -9
- package/esm2022/lib/components/dossier-management-tabs/dossier-management-tabs.component.mjs +7 -7
- package/esm2022/lib/components/dossier-management-tabs/tab-form/tab-form.component.mjs +7 -7
- package/esm2022/lib/components/dossier-management-upload/dossier-management-upload.component.mjs +14 -17
- package/esm2022/lib/components/dossier-management-upload/dossier-management-upload.constants.mjs +16 -1
- package/esm2022/lib/components/dossier-management-upload/step/dossier-management-upload-step.component.mjs +20 -5
- package/esm2022/lib/dossier-management-routing.module.mjs +10 -8
- package/esm2022/lib/dossier-management.module.mjs +33 -18
- package/esm2022/lib/models/index.mjs +3 -2
- package/esm2022/lib/models/list-column.model.mjs +2 -2
- package/esm2022/lib/models/status.model.mjs +17 -0
- package/esm2022/lib/models/tab.enum.mjs +3 -2
- package/esm2022/lib/services/dossier-detail.service.mjs +18 -11
- package/esm2022/lib/services/dossier-export.service.mjs +7 -7
- package/esm2022/lib/services/dossier-management.service.mjs +38 -0
- package/esm2022/lib/services/index.mjs +2 -2
- package/esm2022/lib/services/tab-management.service.mjs +5 -5
- package/esm2022/lib/services/tab.service.mjs +25 -8
- package/esm2022/public-api.mjs +2 -2
- package/fesm2022/valtimo-dossier-management.mjs +1238 -473
- package/fesm2022/valtimo-dossier-management.mjs.map +1 -1
- package/lib/components/dossier-management-create/dossier-management-create.component.d.ts +26 -0
- package/lib/components/dossier-management-create/dossier-management-create.component.d.ts.map +1 -0
- package/lib/components/dossier-management-detail/dossier-management-detail.component.d.ts +9 -3
- package/lib/components/dossier-management-detail/dossier-management-detail.component.d.ts.map +1 -1
- package/lib/components/dossier-management-detail-container/dossier-management-detail-container.component.d.ts +27 -14
- package/lib/components/dossier-management-detail-container/dossier-management-detail-container.component.d.ts.map +1 -1
- package/lib/components/dossier-management-detail-container-actions/{dossier-management-detail-container-actions.d.ts → dossier-management-detail-container-actions.component.d.ts} +9 -3
- package/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.component.d.ts.map +1 -0
- package/lib/components/dossier-management-document-definition/dossier-management-document-definition.component.d.ts +48 -0
- package/lib/components/dossier-management-document-definition/dossier-management-document-definition.component.d.ts.map +1 -0
- package/lib/components/dossier-management-list/dossier-management-list.component.d.ts +7 -4
- package/lib/components/dossier-management-list/dossier-management-list.component.d.ts.map +1 -1
- package/lib/components/dossier-management-list-columns/dossier-management-list-columns.component.d.ts +2 -2
- package/lib/components/dossier-management-list-columns/dossier-management-list-columns.component.d.ts.map +1 -1
- package/lib/components/dossier-management-search-fields/dossier-management-search-fields.component.d.ts +10 -4
- package/lib/components/dossier-management-search-fields/dossier-management-search-fields.component.d.ts.map +1 -1
- package/lib/components/dossier-management-statuses/dossier-management-status-modal/dossier-management-status-modal.component.d.ts +77 -0
- package/lib/components/dossier-management-statuses/dossier-management-status-modal/dossier-management-status-modal.component.d.ts.map +1 -0
- package/lib/components/dossier-management-statuses/dossier-management-statuses.component.d.ts +47 -0
- package/lib/components/dossier-management-statuses/dossier-management-statuses.component.d.ts.map +1 -0
- package/lib/components/dossier-management-upload/dossier-management-upload.component.d.ts +3 -5
- package/lib/components/dossier-management-upload/dossier-management-upload.component.d.ts.map +1 -1
- package/lib/components/dossier-management-upload/dossier-management-upload.constants.d.ts.map +1 -1
- package/lib/components/dossier-management-upload/step/dossier-management-upload-step.component.d.ts.map +1 -1
- package/lib/dossier-management-routing.module.d.ts.map +1 -1
- package/lib/dossier-management.module.d.ts +24 -22
- package/lib/dossier-management.module.d.ts.map +1 -1
- package/lib/models/index.d.ts +1 -0
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/status.model.d.ts +4 -0
- package/lib/models/status.model.d.ts.map +1 -0
- package/lib/models/tab.enum.d.ts +2 -1
- package/lib/models/tab.enum.d.ts.map +1 -1
- package/lib/services/dossier-detail.service.d.ts +4 -1
- package/lib/services/dossier-detail.service.d.ts.map +1 -1
- package/lib/services/{dossier-import.service.d.ts → dossier-management.service.d.ts} +4 -4
- package/lib/services/dossier-management.service.d.ts.map +1 -0
- package/lib/services/tab.service.d.ts +9 -4
- package/lib/services/tab.service.d.ts.map +1 -1
- package/package.json +3 -3
- package/esm2022/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.mjs +0 -152
- package/esm2022/lib/components/dossier-management-document-definition/dossier-management-document-definition.mjs +0 -48
- package/esm2022/lib/components/dossier-management-link-process/dossier-management-link-process.component.mjs +0 -84
- package/esm2022/lib/services/dossier-import.service.mjs +0 -38
- package/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.d.ts.map +0 -1
- package/lib/components/dossier-management-document-definition/dossier-management-document-definition.d.ts +0 -15
- package/lib/components/dossier-management-document-definition/dossier-management-document-definition.d.ts.map +0 -1
- package/lib/components/dossier-management-link-process/dossier-management-link-process.component.d.ts +0 -27
- package/lib/components/dossier-management-link-process/dossier-management-link-process.component.d.ts.map +0 -1
- package/lib/services/dossier-import.service.d.ts.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright 2015-
|
|
2
|
+
* Copyright 2015-2024 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.
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { Component, EventEmitter, Output,
|
|
16
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Output, } from '@angular/core';
|
|
17
17
|
import { ArrowDown16, ArrowUp16 } from '@carbon/icons';
|
|
18
|
-
import { MoveRowDirection, ViewType, } from '@valtimo/components';
|
|
18
|
+
import { CARBON_CONSTANTS, MoveRowDirection, ViewType, } from '@valtimo/components';
|
|
19
19
|
import { BehaviorSubject, combineLatest, distinctUntilChanged, filter, map, of, Subscription, switchMap, take, tap, } from 'rxjs';
|
|
20
20
|
import * as i0 from "@angular/core";
|
|
21
21
|
import * as i1 from "@valtimo/document";
|
|
@@ -37,12 +37,21 @@ export class DossierManagementSearchFieldsComponent {
|
|
|
37
37
|
this.downloadUrl$ = new BehaviorSubject(undefined);
|
|
38
38
|
this.disableInput$ = new BehaviorSubject(false);
|
|
39
39
|
this.selectedSearchField$ = new BehaviorSubject(undefined);
|
|
40
|
+
this.selectedDeleteSearchField$ = new BehaviorSubject(undefined);
|
|
40
41
|
this.formData$ = new BehaviorSubject(null);
|
|
41
42
|
this.valid$ = new BehaviorSubject(false);
|
|
43
|
+
this.showFields$ = new BehaviorSubject(false);
|
|
44
|
+
this.modalShowing$ = new BehaviorSubject(false);
|
|
45
|
+
this.showDeleteModal$ = new BehaviorSubject(false);
|
|
42
46
|
this._subscriptions = new Subscription();
|
|
43
47
|
this.actionItems = [
|
|
44
48
|
{
|
|
45
|
-
|
|
49
|
+
label: 'interface.edit',
|
|
50
|
+
callback: this.showEditModal.bind(this),
|
|
51
|
+
type: 'normal',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
callback: this.showDeleteModal.bind(this),
|
|
46
55
|
label: 'interface.delete',
|
|
47
56
|
type: 'danger',
|
|
48
57
|
},
|
|
@@ -96,7 +105,9 @@ export class DossierManagementSearchFieldsComponent {
|
|
|
96
105
|
'datetime',
|
|
97
106
|
'boolean',
|
|
98
107
|
];
|
|
99
|
-
this.dataTypeItems$ = this.translateService
|
|
108
|
+
this.dataTypeItems$ = this.translateService
|
|
109
|
+
.stream('key')
|
|
110
|
+
.pipe(map(() => this.DATA_TYPES.map(dataType => ({
|
|
100
111
|
id: dataType,
|
|
101
112
|
text: this.translateService.instant(`searchFields.${dataType}`),
|
|
102
113
|
}))));
|
|
@@ -141,14 +152,13 @@ export class DossierManagementSearchFieldsComponent {
|
|
|
141
152
|
}))));
|
|
142
153
|
this.documentDefinitionName$ = this.route.params.pipe(map(params => params.name || ''), filter(docDefName => !!docDefName), tap((documentDefinitionName) => (this._documentDefinitionName = documentDefinitionName)));
|
|
143
154
|
this.loadingSearchFields = true;
|
|
144
|
-
this.showSearchFieldsForm = false;
|
|
145
155
|
this.refreshSearchFields$ = new BehaviorSubject(null);
|
|
146
156
|
this.searchFields$ = combineLatest([
|
|
147
157
|
this.documentDefinitionName$,
|
|
148
158
|
this.refreshSearchFields$,
|
|
149
159
|
]).pipe(switchMap(([documentDefinitionName]) => this.documentService.getDocumentSearchFields(documentDefinitionName)), tap(searchFields => {
|
|
150
160
|
this.documentDefinitionName$.pipe(take(1)).subscribe(documentDefinitionName => {
|
|
151
|
-
if (searchFields && Array.isArray(searchFields) && searchFields
|
|
161
|
+
if (searchFields && Array.isArray(searchFields) && searchFields?.length > 0) {
|
|
152
162
|
this.setDownload(documentDefinitionName, searchFields);
|
|
153
163
|
}
|
|
154
164
|
});
|
|
@@ -216,6 +226,7 @@ export class DossierManagementSearchFieldsComponent {
|
|
|
216
226
|
fieldTypeIsDropdown &&
|
|
217
227
|
!!formData?.dropdownDataProvider &&
|
|
218
228
|
this.dropdownDataProviderSupportsUpdates(formData?.dropdownDataProvider)));
|
|
229
|
+
this.CARBON_THEME = 'white';
|
|
219
230
|
this.iconService.registerAll([ArrowDown16, ArrowUp16]);
|
|
220
231
|
}
|
|
221
232
|
ngOnInit() {
|
|
@@ -232,7 +243,8 @@ export class DossierManagementSearchFieldsComponent {
|
|
|
232
243
|
if (!inputDisabled) {
|
|
233
244
|
this.searchFieldActionTypeIsAdd = searchFieldActionTypeIsAdd;
|
|
234
245
|
const searchFieldToSelect = this.cachedSearchFields.find(field => field.key === searchField.key);
|
|
235
|
-
this.selectedSearchField$.next(searchFieldToSelect);
|
|
246
|
+
this.selectedSearchField$.next(searchFieldToSelect || {});
|
|
247
|
+
this.showModal();
|
|
236
248
|
}
|
|
237
249
|
});
|
|
238
250
|
}
|
|
@@ -256,21 +268,21 @@ export class DossierManagementSearchFieldsComponent {
|
|
|
256
268
|
const searchFieldIndex = searchFields.findIndex(field => field.key === searchFieldRow.key);
|
|
257
269
|
const foundSearchField = { ...searchFields[searchFieldIndex] };
|
|
258
270
|
const filteredSearchFields = searchFields.filter(field => field.key !== searchFieldRow.key);
|
|
259
|
-
const multipleSearchFields = searchFields
|
|
271
|
+
const multipleSearchFields = searchFields?.length > 1;
|
|
260
272
|
if (multipleSearchFields && moveUp && searchFieldIndex > 0) {
|
|
261
273
|
const searchFieldBeforeKey = `${searchFields[searchFieldIndex - 1].key}`;
|
|
262
274
|
const searchFieldBeforeIndex = filteredSearchFields.findIndex(field => field.key === searchFieldBeforeKey);
|
|
263
275
|
filteredSearchFields.splice(searchFieldBeforeIndex, 0, foundSearchField);
|
|
264
276
|
this.updateSearchFields(documentDefinitionName, filteredSearchFields);
|
|
265
277
|
}
|
|
266
|
-
else if (multipleSearchFields && !moveUp && searchFieldIndex < searchFields
|
|
278
|
+
else if (multipleSearchFields && !moveUp && searchFieldIndex < searchFields?.length) {
|
|
267
279
|
const searchFieldAfterKey = `${searchFields[searchFieldIndex + 1].key}`;
|
|
268
280
|
const searchFieldAfterIndex = filteredSearchFields.findIndex(field => field.key === searchFieldAfterKey);
|
|
269
281
|
filteredSearchFields.splice(searchFieldAfterIndex + 1, 0, foundSearchField);
|
|
270
282
|
this.updateSearchFields(documentDefinitionName, filteredSearchFields);
|
|
271
283
|
}
|
|
272
284
|
}
|
|
273
|
-
|
|
285
|
+
onDeleteSelectedSearchFieldConfirm(selectedSearchField) {
|
|
274
286
|
this.disableInput();
|
|
275
287
|
if (this.dropdownDataProviderSupportsUpdates(selectedSearchField?.dropdownDataProvider)) {
|
|
276
288
|
this.documentService
|
|
@@ -346,6 +358,9 @@ export class DossierManagementSearchFieldsComponent {
|
|
|
346
358
|
this.enableInput();
|
|
347
359
|
});
|
|
348
360
|
}
|
|
361
|
+
onModalClose() {
|
|
362
|
+
this.hideModal();
|
|
363
|
+
}
|
|
349
364
|
nextIfChanged(behaviourSubject$, value) {
|
|
350
365
|
if (JSON.stringify(behaviourSubject$.value) !== JSON.stringify(value)) {
|
|
351
366
|
behaviourSubject$.next(value);
|
|
@@ -360,7 +375,8 @@ export class DossierManagementSearchFieldsComponent {
|
|
|
360
375
|
data.dataType &&
|
|
361
376
|
validMatchType &&
|
|
362
377
|
validDropdownDataProvider &&
|
|
363
|
-
data.path
|
|
378
|
+
data.path &&
|
|
379
|
+
data.fieldType);
|
|
364
380
|
const keyIsUnique = !this.searchFieldActionTypeIsAdd ||
|
|
365
381
|
this.cachedSearchFields.findIndex(field => field.key === data.key) === -1;
|
|
366
382
|
return containsAllValues && keyIsUnique;
|
|
@@ -372,21 +388,22 @@ export class DossierManagementSearchFieldsComponent {
|
|
|
372
388
|
return dropdownDataProvider === 'dropdownDatabaseDataProvider';
|
|
373
389
|
}
|
|
374
390
|
openSelectedSearchFieldSubscription() {
|
|
375
|
-
this._subscriptions.add(this.selectedSearchField$.subscribe(
|
|
376
|
-
|
|
391
|
+
this._subscriptions.add(this.selectedSearchField$.subscribe(selectedSearchField => {
|
|
392
|
+
if (selectedSearchField)
|
|
393
|
+
this.showModal();
|
|
377
394
|
}));
|
|
378
395
|
}
|
|
379
396
|
openModalShowingSubscription() {
|
|
380
|
-
this._subscriptions.add(this.
|
|
397
|
+
this._subscriptions.add(this.modalShowing$.subscribe(modalShowing => {
|
|
381
398
|
if (modalShowing) {
|
|
382
399
|
setTimeout(() => {
|
|
383
|
-
this.
|
|
400
|
+
this.showFields$.next(true);
|
|
384
401
|
}, 0);
|
|
385
402
|
}
|
|
386
403
|
else {
|
|
387
404
|
setTimeout(() => {
|
|
388
|
-
this.
|
|
389
|
-
},
|
|
405
|
+
this.showFields$.next(false);
|
|
406
|
+
}, CARBON_CONSTANTS.modalAnimationMs);
|
|
390
407
|
}
|
|
391
408
|
}));
|
|
392
409
|
}
|
|
@@ -402,24 +419,28 @@ export class DossierManagementSearchFieldsComponent {
|
|
|
402
419
|
this.disableInput$.next(false);
|
|
403
420
|
}
|
|
404
421
|
showModal() {
|
|
405
|
-
this.
|
|
422
|
+
this.modalShowing$.next(true);
|
|
406
423
|
}
|
|
407
424
|
hideModal() {
|
|
408
|
-
this.
|
|
425
|
+
this.modalShowing$.next(false);
|
|
409
426
|
}
|
|
410
427
|
refreshSearchFields() {
|
|
411
428
|
this.refreshSearchFields$.next(null);
|
|
412
429
|
}
|
|
413
|
-
|
|
414
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DossierManagementSearchFieldsComponent, selector: "valtimo-dossier-management-search-fields", outputs: { searchField: "searchField" }, viewQueries: [{ 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 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=\"list; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"modal; context: {obs: obs}\"></ng-container>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <div class=\"dossier-management-search-fields__buttons\">\n <a\n cdsLink\n class=\"center-link\"\n [disabled]=\"\n !obs.downloadUrl || !obs.downloadName || obs.searchFields.length <= 0 || obs.disableInput\n \"\n [download]=\"obs.downloadName\"\n [href]=\"obs.downloadUrl\"\n >\n {{ 'searchFields.downloadButtonText' | translate }}\n </a>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"loadingSearchFields || obs.disableInput\"\n (click)=\"searchFieldClicked($event, true)\"\n >\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'searchFieldsOverview.addRow' | translate }}\n </button>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [fields]=\"fields\"\n [header]=\"false\"\n [items]=\"obs.searchFields\"\n [loading]=\"!obs.searchFields\"\n [movingRowsEnabled]=\"true\"\n (rowClicked)=\"searchFieldClicked($event, false)\"\n (moveRow)=\"onMoveRowClick($event, obs.documentDefinitionName)\"\n >\n <ng-container\n carbonToolbarContent\n *ngTemplateOutlet=\"buttons; context: {obs: obs}\"\n ></ng-container>\n </valtimo-carbon-list>\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 <valtimo-carbon-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 </valtimo-carbon-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(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", 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)}.dossier-management-search-fields__buttons{display:flex;gap:16px}.dossier-management-search-fields__buttons .center-link{display:flex;align-items:center}.dossier-management-search-fields__move-buttons{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.dossier-management-search-fields__move-buttons button:not(:last-child){margin-right:8px}.list-actions{width:1px}.modal-header::ng-deep{background-color:#f3f4f7}::ng-deep .tab-container{min-height:unset!important}::ng-deep .cds--tab-content{padding-top:0!important}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.ModalComponent, selector: "valtimo-modal", inputs: ["elementId", "title", "subtitle", "templateBelowSubtitle", "showFooter"] }, { kind: "component", type: i7.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "clearText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin", "carbonTheme"], outputs: ["selectedChange"] }, { 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$", "carbonTheme", "placeholder"], outputs: ["valueChange"] }, { kind: "component", type: i7.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "directive", type: i5.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i5.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i7.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["name", "title", "titleTranslationKey", "type", "initialAmountOfRows", "minimumAmountOfRows", "maxRows", "addRowText", "addRowTranslationKey", "deleteRowText", "deleteRowTranslationKey", "disabled", "defaultValues", "margin", "tooltip", "required", "keyColumnTitle", "valueColumnTitle", "dropdownColumnTitle", "hideDeleteButton", "hideAddButton", "dropdownItems", "dropdownWidth", "fullWidth"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "directive", type: i5.Link, selector: "[cdsLink], [ibmLink]", inputs: ["inline", "disabled"] }, { kind: "component", type: i7.TableComponent, selector: "v-table", inputs: ["items", "columns", "loading", "showEditButtons", "showPagination", "editButtonTranslationKey", "itemsTranslationKey", "noResultsTranslationKey", "mobileBreakpointPx", "amountOfLoadingRows", "collectionSize", "page", "size"], outputs: ["editButtonClicked", "paginationSizeSet", "paginationPageSet"] }, { kind: "component", type: i7.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
|
|
430
|
+
showDeleteModal(searchField) {
|
|
431
|
+
this.selectedDeleteSearchField$.next(searchField);
|
|
432
|
+
this.showDeleteModal$.next(true);
|
|
433
|
+
}
|
|
434
|
+
showEditModal(searchField) {
|
|
435
|
+
this.searchFieldClicked(searchField, false);
|
|
436
|
+
}
|
|
437
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DossierManagementSearchFieldsComponent, deps: [{ token: i1.DocumentService }, { token: i2.ActivatedRoute }, { token: i3.TranslateService }, { token: i4.DomSanitizer }, { token: i5.IconService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
438
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: DossierManagementSearchFieldsComponent, selector: "valtimo-dossier-management-search-fields", outputs: { searchField: "searchField" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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 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=\"list; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"modal; context: {obs: obs}\"></ng-container>\n</ng-container>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"dossierManagement.statuses.deleteText\"\n [outputOnConfirm]=\"selectedDeleteSearchField$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDeleteSelectedSearchFieldConfirm($event)\"\n></valtimo-confirmation-modal>\n\n<ng-template #buttons let-obs=\"obs\">\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n [disabled]=\"\n !obs.downloadUrl || !obs.downloadName || obs.searchFields?.length <= 0 || obs.disableInput\n \"\n [download]=\"obs.downloadName\"\n [href]=\"obs.downloadUrl\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"download\" size=\"16\"></svg>\n </button>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"loadingSearchFields || obs.disableInput\"\n (click)=\"searchFieldClicked($event, true)\"\n >\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'searchFieldsOverview.addRow' | translate }}\n </button>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [fields]=\"fields\"\n [header]=\"false\"\n [items]=\"obs.searchFields\"\n [loading]=\"!obs.searchFields\"\n [movingRowsEnabled]=\"true\"\n (rowClicked)=\"searchFieldClicked($event, false)\"\n (moveRow)=\"onMoveRowClick($event, obs.documentDefinitionName)\"\n >\n <ng-container\n carbonToolbarContent\n *ngTemplateOutlet=\"buttons; context: {obs: obs}\"\n ></ng-container>\n\n <valtimo-no-results\n [title]=\"'searchFieldsOverview.noSearchfieldsTitle' | translate\"\n [description]=\"'searchFieldsOverview.noSearchfieldsDescription' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #modal let-obs=\"obs\">\n <cds-modal\n valtimoCdsModal\n [title]=\"\n searchFieldActionTypeIsAdd\n ? ('searchFieldsOverview.addRow' | translate)\n : ('searchFieldsOverview.edit' | translate)\n \"\n [open]=\"modalShowing$ | async\"\n [showFooter]=\"true\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onModalClose()\">\n <h3 cdsModalHeaderHeading>\n {{\n (searchFieldActionTypeIsAdd ? 'searchFieldsOverview.addRow' : 'searchFieldsOverview.edit')\n | translate\n }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"\n (showFields$ | async) && {\n searchField: selectedSearchField$ | async\n } as searchObs\n \"\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 [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\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 [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\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 [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\n <v-select\n *ngIf=\"dataTypeItems$ | async as dataTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\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 [carbonTheme]=\"CARBON_THEME\"\n ></v-select>\n\n <v-select\n *ngIf=\"(showMatchTypes$ | async) && (matchTypeItems$ | async) as matchTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\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 [carbonTheme]=\"CARBON_THEME\"\n ></v-select>\n\n <v-select\n *ngIf=\"fieldTypeItems$ | async as fieldTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\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 [carbonTheme]=\"CARBON_THEME\"\n ></v-select>\n\n <v-select\n *ngIf=\"\n (fieldTypeIsDropdown$ | async) &&\n (dropdownDataProviderNames$ | async) as dropdownDataProviderNames\n \"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\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 [carbonTheme]=\"CARBON_THEME\"\n ></v-select>\n\n <valtimo-carbon-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 [carbonTheme]=\"CARBON_THEME\"\n >\n </valtimo-carbon-multi-input>\n\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 [carbonTheme]=\"CARBON_THEME\"\n ></v-table>\n </v-form>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"buttonsFooterModal; context: {obs: obs}\"></ng-container>\n </cds-modal-footer>\n </cds-modal>\n</ng-template>\n\n<ng-template #buttonsFooterModal let-obs=\"obs\">\n <button cdsButton=\"secondary\" (click)=\"onModalClose()\" [disabled]=\"obs.disableInput\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"obs.disableInput || !obs.valid\"\n (click)=\"saveSearchField(obs.documentDefinitionName)\"\n >\n {{ 'searchFieldsOverview.submit' | translate }}\n </button>\n</ng-template>\n", styles: ["valtimo-list::ng-deep table{border-top:1px solid rgba(0,0,0,.125)}.dossier-management-search-fields__buttons{display:flex;gap:16px}.dossier-management-search-fields__buttons .center-link{display:flex;align-items:center}.dossier-management-search-fields__move-buttons{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.dossier-management-search-fields__move-buttons button:not(:last-child){margin-right:8px}.list-actions{width:1px}.modal-header::ng-deep{background-color:#f3f4f7}::ng-deep .tab-container{min-height:unset!important}::ng-deep .cds--tab-content{padding-top:0!important}\n/*!\n * Copyright 2015-2024 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: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "disabled", "dropUp", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "clearText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin", "carbonTheme", "appendInline"], outputs: ["selectedChange"] }, { 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$", "carbonTheme", "placeholder"], outputs: ["valueChange"] }, { kind: "component", type: i7.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "directive", type: i5.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i5.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i5.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i5.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i5.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i5.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i5.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "component", type: i7.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["name", "title", "titleTranslationKey", "type", "arbitraryValueAmount", "arbitraryAmountTitles", "initialAmountOfRows", "minimumAmountOfRows", "maxRows", "addRowText", "addRowTranslationKey", "deleteRowText", "deleteRowTranslationKey", "disabled", "defaultValues", "margin", "tooltip", "required", "keyColumnTitle", "valueColumnTitle", "dropdownColumnTitle", "hideDeleteButton", "hideAddButton", "dropdownItems", "dropdownWidth", "fullWidth", "carbonTheme"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: i7.TableComponent, selector: "v-table", inputs: ["items", "columns", "loading", "showEditButtons", "showPagination", "editButtonTranslationKey", "itemsTranslationKey", "noResultsTranslationKey", "mobileBreakpointPx", "amountOfLoadingRows", "collectionSize", "page", "size"], outputs: ["editButtonClicked", "paginationSizeSet", "paginationPageSet"] }, { kind: "directive", type: i7.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]" }, { kind: "component", type: i7.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i7.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
415
439
|
}
|
|
416
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
440
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DossierManagementSearchFieldsComponent, decorators: [{
|
|
417
441
|
type: Component,
|
|
418
|
-
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 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=\"list; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"modal; context: {obs: obs}\"></ng-container>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <div class=\"dossier-management-search-fields__buttons\">\n <a\n cdsLink\n class=\"center-link\"\n [disabled]=\"\n !obs.downloadUrl || !obs.downloadName || obs.searchFields.length <= 0 || obs.disableInput\n \"\n [download]=\"obs.downloadName\"\n [href]=\"obs.downloadUrl\"\n >\n {{ 'searchFields.downloadButtonText' | translate }}\n </a>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"loadingSearchFields || obs.disableInput\"\n (click)=\"searchFieldClicked($event, true)\"\n >\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'searchFieldsOverview.addRow' | translate }}\n </button>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [fields]=\"fields\"\n [header]=\"false\"\n [items]=\"obs.searchFields\"\n [loading]=\"!obs.searchFields\"\n [movingRowsEnabled]=\"true\"\n (rowClicked)=\"searchFieldClicked($event, false)\"\n (moveRow)=\"onMoveRowClick($event, obs.documentDefinitionName)\"\n >\n <ng-container\n carbonToolbarContent\n *ngTemplateOutlet=\"buttons; context: {obs: obs}\"\n ></ng-container>\n </valtimo-carbon-list>\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 <valtimo-carbon-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 </valtimo-carbon-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(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", 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)}.dossier-management-search-fields__buttons{display:flex;gap:16px}.dossier-management-search-fields__buttons .center-link{display:flex;align-items:center}.dossier-management-search-fields__move-buttons{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.dossier-management-search-fields__move-buttons button:not(:last-child){margin-right:8px}.list-actions{width:1px}.modal-header::ng-deep{background-color:#f3f4f7}::ng-deep .tab-container{min-height:unset!important}::ng-deep .cds--tab-content{padding-top:0!important}\n"] }]
|
|
419
|
-
}], ctorParameters:
|
|
420
|
-
type: ViewChild,
|
|
421
|
-
args: ['searchFieldModal']
|
|
422
|
-
}], searchField: [{
|
|
442
|
+
args: [{ selector: 'valtimo-dossier-management-search-fields', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 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 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=\"list; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"modal; context: {obs: obs}\"></ng-container>\n</ng-container>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"dossierManagement.statuses.deleteText\"\n [outputOnConfirm]=\"selectedDeleteSearchField$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDeleteSelectedSearchFieldConfirm($event)\"\n></valtimo-confirmation-modal>\n\n<ng-template #buttons let-obs=\"obs\">\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n [disabled]=\"\n !obs.downloadUrl || !obs.downloadName || obs.searchFields?.length <= 0 || obs.disableInput\n \"\n [download]=\"obs.downloadName\"\n [href]=\"obs.downloadUrl\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"download\" size=\"16\"></svg>\n </button>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"loadingSearchFields || obs.disableInput\"\n (click)=\"searchFieldClicked($event, true)\"\n >\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'searchFieldsOverview.addRow' | translate }}\n </button>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [fields]=\"fields\"\n [header]=\"false\"\n [items]=\"obs.searchFields\"\n [loading]=\"!obs.searchFields\"\n [movingRowsEnabled]=\"true\"\n (rowClicked)=\"searchFieldClicked($event, false)\"\n (moveRow)=\"onMoveRowClick($event, obs.documentDefinitionName)\"\n >\n <ng-container\n carbonToolbarContent\n *ngTemplateOutlet=\"buttons; context: {obs: obs}\"\n ></ng-container>\n\n <valtimo-no-results\n [title]=\"'searchFieldsOverview.noSearchfieldsTitle' | translate\"\n [description]=\"'searchFieldsOverview.noSearchfieldsDescription' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #modal let-obs=\"obs\">\n <cds-modal\n valtimoCdsModal\n [title]=\"\n searchFieldActionTypeIsAdd\n ? ('searchFieldsOverview.addRow' | translate)\n : ('searchFieldsOverview.edit' | translate)\n \"\n [open]=\"modalShowing$ | async\"\n [showFooter]=\"true\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onModalClose()\">\n <h3 cdsModalHeaderHeading>\n {{\n (searchFieldActionTypeIsAdd ? 'searchFieldsOverview.addRow' : 'searchFieldsOverview.edit')\n | translate\n }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"\n (showFields$ | async) && {\n searchField: selectedSearchField$ | async\n } as searchObs\n \"\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 [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\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 [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\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 [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\n <v-select\n *ngIf=\"dataTypeItems$ | async as dataTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\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 [carbonTheme]=\"CARBON_THEME\"\n ></v-select>\n\n <v-select\n *ngIf=\"(showMatchTypes$ | async) && (matchTypeItems$ | async) as matchTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\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 [carbonTheme]=\"CARBON_THEME\"\n ></v-select>\n\n <v-select\n *ngIf=\"fieldTypeItems$ | async as fieldTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\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 [carbonTheme]=\"CARBON_THEME\"\n ></v-select>\n\n <v-select\n *ngIf=\"\n (fieldTypeIsDropdown$ | async) &&\n (dropdownDataProviderNames$ | async) as dropdownDataProviderNames\n \"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\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 [carbonTheme]=\"CARBON_THEME\"\n ></v-select>\n\n <valtimo-carbon-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 [carbonTheme]=\"CARBON_THEME\"\n >\n </valtimo-carbon-multi-input>\n\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 [carbonTheme]=\"CARBON_THEME\"\n ></v-table>\n </v-form>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"buttonsFooterModal; context: {obs: obs}\"></ng-container>\n </cds-modal-footer>\n </cds-modal>\n</ng-template>\n\n<ng-template #buttonsFooterModal let-obs=\"obs\">\n <button cdsButton=\"secondary\" (click)=\"onModalClose()\" [disabled]=\"obs.disableInput\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"obs.disableInput || !obs.valid\"\n (click)=\"saveSearchField(obs.documentDefinitionName)\"\n >\n {{ 'searchFieldsOverview.submit' | translate }}\n </button>\n</ng-template>\n", styles: ["valtimo-list::ng-deep table{border-top:1px solid rgba(0,0,0,.125)}.dossier-management-search-fields__buttons{display:flex;gap:16px}.dossier-management-search-fields__buttons .center-link{display:flex;align-items:center}.dossier-management-search-fields__move-buttons{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.dossier-management-search-fields__move-buttons button:not(:last-child){margin-right:8px}.list-actions{width:1px}.modal-header::ng-deep{background-color:#f3f4f7}::ng-deep .tab-container{min-height:unset!important}::ng-deep .cds--tab-content{padding-top:0!important}\n/*!\n * Copyright 2015-2024 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"] }]
|
|
443
|
+
}], ctorParameters: () => [{ type: i1.DocumentService }, { type: i2.ActivatedRoute }, { type: i3.TranslateService }, { type: i4.DomSanitizer }, { type: i5.IconService }], propDecorators: { searchField: [{
|
|
423
444
|
type: Output
|
|
424
445
|
}] } });
|
|
425
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUdaLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUlMLGdCQUFnQixFQU1oQixRQUFRLEdBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQVM3QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLEdBQUcsRUFFSCxFQUFFLEVBQ0YsWUFBWSxFQUNaLFNBQVMsRUFDVCxJQUFJLEVBQ0osR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7QUFPZCxNQUFNLE9BQU8sc0NBQXNDO0lBa1FqRCxZQUNtQixlQUFnQyxFQUNoQyxLQUFxQixFQUNyQixnQkFBa0MsRUFDbEMsU0FBdUIsRUFDdkIsV0FBd0I7UUFKeEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hD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QUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDOytHQXRoQlUsc0NBQXNDO21HQUF0QyxzQ0FBc0Msb09DcEVuRCx5MlJBK09BOzs0RkQzS2Esc0NBQXNDO2tCQUxsRCxTQUFTOytCQUNFLDBDQUEwQzt1TkFLckIsS0FBSztzQkFBbkMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBRW5CLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEb21TYW5pdGl6ZXIsIFNhZmVVcmx9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7QXJyb3dEb3duMTYsIEFycm93VXAxNn0gZnJvbSAnQGNhcmJvbi9pY29ucyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWN0aW9uSXRlbSxcbiAgQ29sdW1uQ29uZmlnLFxuICBNb2RhbENvbXBvbmVudCxcbiAgTW92ZVJvd0RpcmVjdGlvbixcbiAgTW92ZVJvd0V2ZW50LFxuICBNdWx0aUlucHV0T3V0cHV0LFxuICBNdWx0aUlucHV0VmFsdWVzLFxuICBTZWxlY3RJdGVtLFxuICBUYWJsZUNvbHVtbixcbiAgVmlld1R5cGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgU2VhcmNoRmllbGQsXG4gIFNlYXJjaEZpZWxkRGF0YVR5cGUsXG4gIFNlYXJjaEZpZWxkRmllbGRUeXBlLFxuICBTZWFyY2hGaWVsZE1hdGNoVHlwZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge0ljb25TZXJ2aWNlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyTWFuYWdlbWVudFNlYXJjaEZpZWxkc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoRmllbGRNb2RhbCcpIG1vZGFsOiBNb2RhbENvbXBvbmVudDtcblxuICBAT3V0cHV0KCkgc2VhcmNoRmllbGQ6IEV2ZW50RW1pdHRlcjxTZWFyY2hGaWVsZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvd25sb2FkTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgcmVhZG9ubHkgZG93bmxvYWRVcmwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTYWZlVXJsIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZUlucHV0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRTZWFyY2hGaWVsZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlYXJjaEZpZWxkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybURhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hGaWVsZCB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsaWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgYWN0aW9uSXRlbXM6IEFjdGlvbkl0ZW1bXSA9IFtcbiAgICB7XG4gICAgICBjYWxsYmFjazogdGhpcy5kZWxldGVTZWxlY3RlZFNlYXJjaEZpZWxkLmJpbmQodGhpcyksXG4gICAgICBsYWJlbDogJ2ludGVyZmFjZS5kZWxldGUnLFxuICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgfSxcbiAgXTtcbiAgcHVibGljIHJlYWRvbmx5IGZpZWxkczogQ29sdW1uQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgdmlld1R5cGU6IFZpZXdUeXBlLlRFWFQsXG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICBrZXk6ICd0aXRsZScsXG4gICAgICBsYWJlbDogJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnRpdGxlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5URVhULFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAga2V5OiAna2V5JyxcbiAgICAgIGxhYmVsOiAnc2VhcmNoRmllbGRzT3ZlcnZpZXcua2V5JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5URVhULFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAga2V5OiAncGF0aCcsXG4gICAgICBsYWJlbDogJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnBhdGgnLFxuICAgIH0sXG4gICAge1xuICAgICAgdmlld1R5cGU6IFZpZXdUeXBlLlRFWFQsXG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICBrZXk6ICdkYXRhVHlwZScsXG4gICAgICBsYWJlbDogJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmRhdGFUeXBlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5URVhULFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAga2V5OiAnZmllbGRUeXBlJyxcbiAgICAgIGxhYmVsOiAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuZmllbGRUeXBlJyxcbiAgICB9LFxuICBdO1xuXG4gIHJlYWRvbmx5IGRyb3Bkb3duQ29sdW1ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PFRhYmxlQ29sdW1uPj4oW1xuICAgIHtcbiAgICAgIGxhYmVsVHJhbnNsYXRpb25LZXk6ICdzZWFyY2hGaWVsZHNPdmVydmlldy5pZCcsXG4gICAgICBkYXRhS2V5OiAna2V5JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsVHJhbnNsYXRpb25LZXk6ICdzZWFyY2hGaWVsZHNPdmVydmlldy50ZXh0JyxcbiAgICAgIGRhdGFLZXk6ICd2YWx1ZScsXG4gICAgfSxcbiAgXSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBEQVRBX1RZUEVTOiBBcnJheTxTZWFyY2hGaWVsZERhdGFUeXBlPiA9IFtcbiAgICAndGV4dCcsXG4gICAgJ251bWJlcicsXG4gICAgJ2RhdGUnLFxuICAgICdkYXRldGltZScsXG4gICAgJ2Jvb2xlYW4nLFxuICBdO1xuICByZWFkb25seSBkYXRhVHlwZUl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKS5waXBlKFxuICAgIG1hcCgoKSA9PlxuICAgICAgdGhpcy5EQVRBX1RZUEVTLm1hcChkYXRhVHlwZSA9PiAoe1xuICAgICAgICBpZDogZGF0YVR5cGUsXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHMuJHtkYXRhVHlwZX1gKSxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBkYXRhVHlwZUlzQm9vbGVhbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhVHlwZUlzVGV4dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBBTExfRklFTERfVFlQRVM6IEFycmF5PFNlYXJjaEZpZWxkRmllbGRUeXBlPiA9IFtcbiAgICAnc2luZ2xlJyxcbiAgICAncmFuZ2UnLFxuICAgICdzaW5nbGUtc2VsZWN0LWRyb3Bkb3duJyxcbiAgICAnbXVsdGktc2VsZWN0LWRyb3Bkb3duJyxcbiAgXTtcbiAgcHJpdmF0ZSByZWFkb25seSBOT05fVEVYVF9GSUVMRF9UWVBFUzogQXJyYXk8U2VhcmNoRmllbGRGaWVsZFR5cGU+ID0gWydzaW5nbGUnLCAncmFuZ2UnXTtcbiAgcHJpdmF0ZSByZWFkb25seSBCT09MRUFOX0ZJRUxEX1RZUEVTOiBBcnJheTxTZWFyY2hGaWVsZEZpZWxkVHlwZT4gPSBbJ3NpbmdsZSddO1xuICByZWFkb25seSBmaWVsZFR5cGVJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8U2VsZWN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kYXRhVHlwZUlzQm9vbGVhbiQsXG4gICAgdGhpcy5kYXRhVHlwZUlzVGV4dCQsXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbZGF0YVR5cGVJc0Jvb2xlYW4sIGRhdGFUeXBlSXNUZXh0XSkgPT4ge1xuICAgICAgaWYgKGRhdGFUeXBlSXNCb29sZWFuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLkJPT0xFQU5fRklFTERfVFlQRVMubWFwKGZpZWxkVHlwZSA9PiAoe1xuICAgICAgICAgIGlkOiBmaWVsZFR5cGUsXG4gICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7ZmllbGRUeXBlfWApLFxuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2UgaWYgKCFkYXRhVHlwZUlzVGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5OT05fVEVYVF9GSUVMRF9UWVBFUy5tYXAoZmllbGRUeXBlID0+ICh7XG4gICAgICAgICAgaWQ6IGZpZWxkVHlwZSxcbiAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRzT3ZlcnZpZXcuJHtmaWVsZFR5cGV9YCksXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuQUxMX0ZJRUxEX1RZUEVTLm1hcChmaWVsZFR5cGUgPT4gKHtcbiAgICAgICAgaWQ6IGZpZWxkVHlwZSxcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7ZmllbGRUeXBlfWApLFxuICAgICAgfSkpO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBNQVRDSF9UWVBFUzogQXJyYXk8U2VhcmNoRmllbGRNYXRjaFR5cGU+ID0gWydleGFjdCcsICdsaWtlJ107XG4gIHJlYWRvbmx5IG1hdGNoVHlwZUl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAuc3RyZWFtKCdrZXknKVxuICAgIC5waXBlKFxuICAgICAgbWFwKCgpID0+XG4gICAgICAgIHRoaXMuTUFUQ0hfVFlQRVMubWFwKG1hdGNoVHlwZSA9PiAoe1xuICAgICAgICAgIGlkOiBtYXRjaFR5cGUsXG4gICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7bWF0Y2hUeXBlfWApLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICApO1xuXG4gIHByaXZhdGUgX2RvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZG9jdW1lbnREZWZpbml0aW9uTmFtZSQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMucm91dGUucGFyYW1zLnBpcGUoXG4gICAgbWFwKHBhcmFtcyA9PiBwYXJhbXMubmFtZSB8fCAnJyksXG4gICAgZmlsdGVyKGRvY0RlZk5hbWUgPT4gISFkb2NEZWZOYW1lKSxcbiAgICB0YXAoKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZykgPT4gKHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUgPSBkb2N1bWVudERlZmluaXRpb25OYW1lKSlcbiAgKTtcblxuICBwcml2YXRlIGNhY2hlZFNlYXJjaEZpZWxkcyE6IEFycmF5PFNlYXJjaEZpZWxkPjtcbiAgc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGQ6IGJvb2xlYW47XG4gIGxvYWRpbmdTZWFyY2hGaWVsZHMgPSB0cnVlO1xuICBzaG93U2VhcmNoRmllbGRzRm9ybSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVmcmVzaFNlYXJjaEZpZWxkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VhcmNoRmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxTZWFyY2hGaWVsZD4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJCxcbiAgICB0aGlzLnJlZnJlc2hTZWFyY2hGaWVsZHMkLFxuICBdKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoW2RvY3VtZW50RGVmaW5pdGlvbk5hbWVdKSA9PlxuICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnRTZWFyY2hGaWVsZHMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICApLFxuICAgIHRhcChzZWFyY2hGaWVsZHMgPT4ge1xuICAgICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShkb2N1bWVudERlZmluaXRpb25OYW1lID0+IHtcbiAgICAgICAgaWYgKHNlYXJjaEZpZWxkcyAmJiBBcnJheS5pc0FycmF5KHNlYXJjaEZpZWxkcykgJiYgc2VhcmNoRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnNldERvd25sb2FkKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIHNlYXJjaEZpZWxkcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pLFxuICAgIHRhcChzZWFyY2hGaWVsZHMgPT4ge1xuICAgICAgdGhpcy5jYWNoZWRTZWFyY2hGaWVsZHMgPSBzZWFyY2hGaWVsZHM7XG4gICAgICB0aGlzLmxvYWRpbmdTZWFyY2hGaWVsZHMgPSBmYWxzZTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IHRyYW5zbGF0ZWRTZWFyY2hGaWVsZHMkOiBPYnNlcnZhYmxlPEFycmF5PFNlYXJjaEZpZWxkPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnNlYXJjaEZpZWxkcyQsXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbc2VhcmNoRmllbGRzXSkgPT5cbiAgICAgIHNlYXJjaEZpZWxkcy5tYXAoc2VhcmNoRmllbGQgPT4gKHtcbiAgICAgICAgLi4uc2VhcmNoRmllbGQsXG4gICAgICAgIHRpdGxlOiBzZWFyY2hGaWVsZC50aXRsZSA/IHNlYXJjaEZpZWxkLnRpdGxlIDogJycsXG4gICAgICAgIGRhdGFUeXBlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRzLiR7c2VhcmNoRmllbGQuZGF0YVR5cGV9YCksXG4gICAgICAgIG1hdGNoVHlwZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7c2VhcmNoRmllbGQubWF0Y2hUeXBlfWApLFxuICAgICAgICBmaWVsZFR5cGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHNPdmVydmlldy4ke3NlYXJjaEZpZWxkLmZpZWxkVHlwZX1gKSxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBmaWVsZFR5cGVJc0Ryb3Bkb3duJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHJlYWRvbmx5IGRyb3Bkb3duRGF0YVByb3ZpZGVyTmFtZXMkOiBPYnNlcnZhYmxlPEFycmF5PFNlbGVjdEl0ZW0+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldERyb3Bkb3duRGF0YVByb3ZpZGVycygpLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW3Byb3ZpZGVyc10pID0+XG4gICAgICBwcm92aWRlcnMubWFwKHByb3ZpZGVyID0+ICh7XG4gICAgICAgIGlkOiBwcm92aWRlcixcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7cHJvdmlkZXJ9YCksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtb2RpZmllZERyb3Bkb3duVmFsdWVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TXVsdGlJbnB1dFZhbHVlcz4oW10pO1xuXG4gIHJlYWRvbmx5IGluaXRpYWxEcm9wZG93blZhbHVlcyQ6IE9ic2VydmFibGU8TXVsdGlJbnB1dFZhbHVlcz4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLFxuICAgIHRoaXMuZm9ybURhdGEkLFxuICBdKS5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxuICAgICAgKFtwcmV2RG9jdW1lbnREZWZpbml0aW9uTmFtZSwgcHJldkZvcm1EYXRhXSwgW2N1cnJEb2N1bWVudERlZmluaXRpb25OYW1lLCBjdXJyRm9ybURhdGFdKSA9PlxuICAgICAgICBwcmV2RG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PT0gY3VyckRvY3VtZW50RGVmaW5pdGlvbk5hbWUgJiZcbiAgICAgICAgcHJldkZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlciA9PT0gY3VyckZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlciAmJlxuICAgICAgICBwcmV2Rm9ybURhdGE/LmtleSA9PT0gY3VyckZvcm1EYXRhPy5rZXlcbiAgICApLFxuICAgIHN3aXRjaE1hcCgoW2RvY3VtZW50RGVmaW5pdGlvbk5hbWUsIGZvcm1EYXRhXSkgPT4ge1xuICAgICAgaWYgKCFmb3JtRGF0YSB8fCAhZm9ybURhdGEuZHJvcGRvd25EYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAgIC5nZXREcm9wZG93bkRhdGEoZm9ybURhdGEuZHJvcGRvd25EYXRhUHJvdmlkZXIsIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIGZvcm1EYXRhLmtleSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKGRyb3Bkb3duRGF0YSA9PiB7XG4gICAgICAgICAgICBpZiAoZHJvcGRvd25EYXRhKSB7XG4gICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhkcm9wZG93bkRhdGEpLm1hcChkcm9wZG93bkZpZWxkS2V5ID0+ICh7XG4gICAgICAgICAgICAgICAga2V5OiBkcm9wZG93bkZpZWxkS2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBkcm9wZG93bkRhdGFbZHJvcGRvd25GaWVsZEtleV0sXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBzaG93TWF0Y2hUeXBlcyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRhdGFUeXBlSXNUZXh0JCxcbiAgICB0aGlzLmZpZWxkVHlwZUlzRHJvcGRvd24kLFxuICBdKS5waXBlKG1hcCgoW2RhdGFUeXBlSXNUZXh0LCBmaWVsZFR5cGVJc0Ryb3Bkb3duXSkgPT4gZGF0YVR5cGVJc1RleHQgJiYgIWZpZWxkVHlwZUlzRHJvcGRvd24pKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1JlYWRvbmx5RHJvcGRvd25UYWJsZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRhdGFUeXBlSXNUZXh0JCxcbiAgICB0aGlzLmZpZWxkVHlwZUlzRHJvcGRvd24kLFxuICAgIHRoaXMuZm9ybURhdGEkLFxuICBdKS5waXBlKFxuICAgIG1hcChcbiAgICAgIChbZGF0YVR5cGVJc1RleHQsIGZpZWxkVHlwZUlzRHJvcGRvd24sIGZvcm1EYXRhXSkgPT5cbiAgICAgICAgZGF0YVR5cGVJc1RleHQgJiZcbiAgICAgICAgZmllbGRUeXBlSXNEcm9wZG93biAmJlxuICAgICAgICAhIWZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlciAmJlxuICAgICAgICAhdGhpcy5kcm9wZG93bkRhdGFQcm92aWRlclN1cHBvcnRzVXBkYXRlcyhmb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXIpXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzaG93SW5wdXREcm9wZG93blRhYmxlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZGF0YVR5cGVJc1RleHQkLFxuICAgIHRoaXMuZmllbGRUeXBlSXNEcm9wZG93biQsXG4gICAgdGhpcy5mb3JtRGF0YSQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFtkYXRhVHlwZUlzVGV4dCwgZmllbGRUeXBlSXNEcm9wZG93biwgZm9ybURhdGFdKSA9PlxuICAgICAgICBkYXRhVHlwZUlzVGV4dCAmJlxuICAgICAgICBmaWVsZFR5cGVJc0Ryb3Bkb3duICYmXG4gICAgICAgICEhZm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyICYmXG4gICAgICAgIHRoaXMuZHJvcGRvd25EYXRhUHJvdmlkZXJTdXBwb3J0c1VwZGF0ZXMoZm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyKVxuICAgIClcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaWNvblNlcnZpY2UucmVnaXN0ZXJBbGwoW0Fycm93RG93bjE2LCBBcnJvd1VwMTZdKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5TZWxlY3RlZFNlYXJjaEZpZWxkU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3Blbk1vZGFsU2hvd2luZ1N1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2hGaWVsZENsaWNrZWQoc2VhcmNoRmllbGQ6IFNlYXJjaEZpZWxkLCBzZWFyY2hGaWVsZEFjdGlvblR5cGVJc0FkZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShpbnB1dERpc2FibGVkID0+IHtcbiAgICAgIGlmICghaW5wdXREaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkID0gc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGQ7XG4gICAgICAgIGNvbnN0IHNlYXJjaEZpZWxkVG9TZWxlY3QgPSB0aGlzLmNhY2hlZFNlYXJjaEZpZWxkcy5maW5kKFxuICAgICAgICAgIGZpZWxkID0+IGZpZWxkLmtleSA9PT0gc2VhcmNoRmllbGQua2V5XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hGaWVsZCQubmV4dChzZWFyY2hGaWVsZFRvU2VsZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtVmFsdWVDaGFuZ2UoZGF0YTogU2VhcmNoRmllbGQpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubmV4dElmQ2hhbmdlZCh0aGlzLmRhdGFUeXBlSXNUZXh0JCwgZGF0YS5kYXRhVHlwZSA9PT0gJ3RleHQnKTtcbiAgICAgIHRoaXMubmV4dElmQ2hhbmdlZCh0aGlzLmRhdGFUeXBlSXNCb29sZWFuJCwgZGF0YS5kYXRhVHlwZSA9PT0gJ2Jvb2xlYW4nKTtcbiAgICAgIHRoaXMubmV4dElmQ2hhbmdlZCh0aGlzLmZpZWxkVHlwZUlzRHJvcGRvd24kLCB0aGlzLmlzRmllbGRUeXBlRHJvcGRvd24oZGF0YS5maWVsZFR5cGUpKTtcbiAgICAgIHRoaXMubmV4dElmQ2hhbmdlZCh0aGlzLmZvcm1EYXRhJCwgZGF0YSk7XG4gICAgICB0aGlzLm5leHRJZkNoYW5nZWQodGhpcy52YWxpZCQsIHRoaXMuaXNWYWxpZChkYXRhKSk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwdWJsaWMgZHJvcGRvd25EYXRhbGlzdENoYW5nZShkYXRhOiBNdWx0aUlucHV0T3V0cHV0KTogdm9pZCB7XG4gICAgdGhpcy5tb2RpZmllZERyb3Bkb3duVmFsdWVzJC5uZXh0KGRhdGEgYXMgTXVsdGlJbnB1dFZhbHVlcyk7XG4gIH1cblxuICBwdWJsaWMgb25Nb3ZlUm93Q2xpY2sobW92ZUV2ZW50OiBNb3ZlUm93RXZlbnQsIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHtpbmRleCwgZGlyZWN0aW9ufSA9IG1vdmVFdmVudDtcbiAgICBjb25zdCBtb3ZlVXAgPSBkaXJlY3Rpb24gPT09IE1vdmVSb3dEaXJlY3Rpb24uVVA7XG4gICAgY29uc3Qgc2VhcmNoRmllbGRzID0gWy4uLnRoaXMuY2FjaGVkU2VhcmNoRmllbGRzXTtcbiAgICBjb25zdCBzZWFyY2hGaWVsZFJvdyA9IHNlYXJjaEZpZWxkc1tpbmRleF07XG5cbiAgICBjb25zdCBzZWFyY2hGaWVsZEluZGV4ID0gc2VhcmNoRmllbGRzLmZpbmRJbmRleChmaWVsZCA9PiBmaWVsZC5rZXkgPT09IHNlYXJjaEZpZWxkUm93LmtleSk7XG4gICAgY29uc3QgZm91bmRTZWFyY2hGaWVsZCA9IHsuLi5zZWFyY2hGaWVsZHNbc2VhcmNoRmllbGRJbmRleF19O1xuICAgIGNvbnN0IGZpbHRlcmVkU2VhcmNoRmllbGRzID0gc2VhcmNoRmllbGRzLmZpbHRlcihmaWVsZCA9PiBmaWVsZC5rZXkgIT09IHNlYXJjaEZpZWxkUm93LmtleSk7XG4gICAgY29uc3QgbXVsdGlwbGVTZWFyY2hGaWVsZHMgPSBzZWFyY2hGaWVsZHMubGVuZ3RoID4gMTtcblxuICAgIGlmIChtdWx0aXBsZVNlYXJjaEZpZWxkcyAmJiBtb3ZlVXAgJiYgc2VhcmNoRmllbGRJbmRleCA+IDApIHtcbiAgICAgIGNvbnN0IHNlYXJjaEZpZWxkQmVmb3JlS2V5ID0gYCR7c2VhcmNoRmllbGRzW3NlYXJjaEZpZWxkSW5kZXggLSAxXS5rZXl9YDtcbiAgICAgIGNvbnN0IHNlYXJjaEZpZWxkQmVmb3JlSW5kZXggPSBmaWx0ZXJlZFNlYXJjaEZpZWxkcy5maW5kSW5kZXgoXG4gICAgICAgIGZpZWxkID0+IGZpZWxkLmtleSA9PT0gc2VhcmNoRmllbGRCZWZvcmVLZXlcbiAgICAgICk7XG4gICAgICBmaWx0ZXJlZFNlYXJjaEZpZWxkcy5zcGxpY2Uoc2VhcmNoRmllbGRCZWZvcmVJbmRleCwgMCwgZm91bmRTZWFyY2hGaWVsZCk7XG4gICAgICB0aGlzLnVwZGF0ZVNlYXJjaEZpZWxkcyhkb2N1bWVudERlZmluaXRpb25OYW1lLCBmaWx0ZXJlZFNlYXJjaEZpZWxkcyk7XG4gICAgfSBlbHNlIGlmIChtdWx0aXBsZVNlYXJjaEZpZWxkcyAmJiAhbW92ZVVwICYmIHNlYXJjaEZpZWxkSW5kZXggPCBzZWFyY2hGaWVsZHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBzZWFyY2hGaWVsZEFmdGVyS2V5ID0gYCR7c2VhcmNoRmllbGRzW3NlYXJjaEZpZWxkSW5kZXggKyAxXS5rZXl9YDtcbiAgICAgIGNvbnN0IHNlYXJjaEZpZWxkQWZ0ZXJJbmRleCA9IGZpbHRlcmVkU2VhcmNoRmllbGRzLmZpbmRJbmRleChcbiAgICAgICAgZmllbGQgPT4gZmllbGQua2V5ID09PSBzZWFyY2hGaWVsZEFmdGVyS2V5XG4gICAgICApO1xuICAgICAgZmlsdGVyZWRTZWFyY2hGaWVsZHMuc3BsaWNlKHNlYXJjaEZpZWxkQWZ0ZXJJbmRleCArIDEsIDAsIGZvdW5kU2VhcmNoRmllbGQpO1xuICAgICAgdGhpcy51cGRhdGVTZWFyY2hGaWVsZHMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgZmlsdGVyZWRTZWFyY2hGaWVsZHMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVTZWxlY3RlZFNlYXJjaEZpZWxkKHNlbGVjdGVkU2VhcmNoRmllbGQ6IFNlYXJjaEZpZWxkKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlSW5wdXQoKTtcblxuICAgIGlmICh0aGlzLmRyb3Bkb3duRGF0YVByb3ZpZGVyU3VwcG9ydHNVcGRhdGVzKHNlbGVjdGVkU2VhcmNoRmllbGQ/LmRyb3Bkb3duRGF0YVByb3ZpZGVyKSkge1xuICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgICAgLmRlbGV0ZURyb3Bkb3duRGF0YShcbiAgICAgICAgICBzZWxlY3RlZFNlYXJjaEZpZWxkPy5kcm9wZG93bkRhdGFQcm92aWRlciA/PyAnJyxcbiAgICAgICAgICB0aGlzLl9kb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgICAgIHNlbGVjdGVkU2VhcmNoRmllbGQua2V5XG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAuZGVsZXRlRG9jdW1lbnRTZWFyY2godGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgc2VsZWN0ZWRTZWFyY2hGaWVsZC5rZXkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgICAgICB0aGlzLmhpZGVNb2RhbCgpO1xuICAgICAgICAgIHRoaXMucmVmcmVzaFNlYXJjaEZpZWxkcygpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNhdmVTZWFyY2hGaWVsZChkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVJbnB1dCgpO1xuXG4gICAgdGhpcy5mb3JtRGF0YSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZm9ybURhdGEgPT4ge1xuICAgICAgaWYgKCFmb3JtRGF0YSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBtYXBwZWRGb3JtRGF0YTogU2VhcmNoRmllbGQgPSB7XG4gICAgICAgIC4uLmZvcm1EYXRhLFxuICAgICAgICBtYXRjaFR5cGU6XG4gICAgICAgICAgIXRoaXMuaXNGaWVsZFR5cGVEcm9wZG93bihmb3JtRGF0YT8uZmllbGRUeXBlKSAmJiBmb3JtRGF0YT8uZGF0YVR5cGUgPT09ICd0ZXh0J1xuICAgICAgICAgICAgPyBmb3JtRGF0YS5tYXRjaFR5cGVcbiAgICAgICAgICAgIDogJ2V4YWN0JyxcbiAgICAgICAgZmllbGRUeXBlOiBmb3JtRGF0YS5kYXRhVHlwZSAhPT0gJ2Jvb2xlYW4nID8gZm9ybURhdGEuZmllbGRUeXBlIDogJ3NpbmdsZScsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwcmV2Rm9ybURhdGEgPSB0aGlzLnNlbGVjdGVkU2VhcmNoRmllbGQkLnZhbHVlO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmRyb3Bkb3duRGF0YVByb3ZpZGVyU3VwcG9ydHNVcGRhdGVzKHByZXZGb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXIpICYmXG4gICAgICAgIHByZXZGb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXIgIT09IG1hcHBlZEZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlclxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAgICAgLmRlbGV0ZURyb3Bkb3duRGF0YShcbiAgICAgICAgICAgIHByZXZGb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXIgPz8gJycsXG4gICAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgICAgICAgcHJldkZvcm1EYXRhPy5rZXkgPz8gJydcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5kcm9wZG93bkRhdGFQcm92aWRlclN1cHBvcnRzVXBkYXRlcyhtYXBwZWRGb3JtRGF0YS5kcm9wZG93bkRhdGFQcm92aWRlcikpIHtcbiAgICAgICAgdGhpcy5tb2RpZmllZERyb3Bkb3duVmFsdWVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShkcm9wZG93blZhbHVlcyA9PiB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGRyb3Bkb3duVmFsdWVzLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIGtleVZhbHVlKSA9PiAoey4uLmFjYywgW2tleVZhbHVlLmtleV06IGtleVZhbHVlLnZhbHVlfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgICAgICAgIC5wb3N0RHJvcGRvd25EYXRhKFxuICAgICAgICAgICAgICBtYXBwZWRGb3JtRGF0YS5kcm9wZG93bkRhdGFQcm92aWRlciA/PyAnJyxcbiAgICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICAgICAgbWFwcGVkRm9ybURhdGEua2V5LFxuICAgICAgICAgICAgICByZXF1ZXN0XG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zZWFyY2hGaWVsZEFjdGlvblR5cGVJc0FkZCkge1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5wb3N0RG9jdW1lbnRTZWFyY2goZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgbWFwcGVkRm9ybURhdGEpLnN1YnNjcmliZShcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICAgICAgICB0aGlzLmhpZGVNb2RhbCgpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoU2VhcmNoRmllbGRzKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3RmllbGRzID0gWy4uLnRoaXMuY2FjaGVkU2VhcmNoRmllbGRzXTtcbiAgICAgICAgY29uc3QgaW5kZXhUb1JlcGxhY2UgPSBuZXdGaWVsZHMuZmluZEluZGV4KGZpZWxkID0+IGZpZWxkLmtleSA9PT0gbWFwcGVkRm9ybURhdGEua2V5KTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmtleSAhPT0gbWFwcGVkRm9ybURhdGEua2V5KTtcblxuICAgICAgICBmaWx0ZXJlZEZpZWxkcy5zcGxpY2UoaW5kZXhUb1JlcGxhY2UsIDAsIG1hcHBlZEZvcm1EYXRhKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWFyY2hGaWVsZHMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgZmlsdGVyZWRGaWVsZHMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVNlYXJjaEZpZWxkcyhcbiAgICBkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcsXG4gICAgbmV3U2VhcmNoRmllbGRzOiBBcnJheTxTZWFyY2hGaWVsZD5cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlSW5wdXQoKTtcblxuICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnB1dERvY3VtZW50U2VhcmNoKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIG5ld1NlYXJjaEZpZWxkcykuc3Vic2NyaWJlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICAgIHRoaXMuaGlkZU1vZGFsKCk7XG4gICAgICAgIHRoaXMucmVmcmVzaFNlYXJjaEZpZWxkcygpO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5lbmFibGVJbnB1dCgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG5leHRJZkNoYW5nZWQoYmVoYXZpb3VyU3ViamVjdCQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+LCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KGJlaGF2aW91clN1YmplY3QkLnZhbHVlKSAhPT0gSlNPTi5zdHJpbmdpZnkodmFsdWUpKSB7XG4gICAgICBiZWhhdmlvdXJTdWJqZWN0JC5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWQoZGF0YTogU2VhcmNoRmllbGQpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWxpZE1hdGNoVHlwZSA9XG4gICAgICBkYXRhLmRhdGFUeXBlID09PSAndGV4dCcgJiYgIXRoaXMuaXNGaWVsZFR5cGVEcm9wZG93bihkYXRhLmZpZWxkVHlwZSkgPyBkYXRhLm1hdGNoVHlwZSA6IHRydWU7XG4gICAgY29uc3QgdmFsaWREcm9wZG93bkRhdGFQcm92aWRlciA9IHRoaXMuaXNGaWVsZFR5cGVEcm9wZG93bihkYXRhLmZpZWxkVHlwZSlcbiAgICAgID8gZGF0YS5kcm9wZG93bkRhdGFQcm92aWRlclxuICAgICAgOiB0cnVlO1xuICAgIGNvbnN0IGNvbnRhaW5zQWxsVmFsdWVzID0gISEoXG4gICAgICBkYXRhLmtleSAmJlxuICAgICAgZGF0YS5kYXRhVHlwZSAmJlxuICAgICAgdmFsaWRNYXRjaFR5cGUgJiZcbiAgICAgIHZhbGlkRHJvcGRvd25EYXRhUHJvdmlkZXIgJiZcbiAgICAgIGRhdGEucGF0aFxuICAgICk7XG4gICAgY29uc3Qga2V5SXNVbmlxdWUgPVxuICAgICAgIXRoaXMuc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGQgfHxcbiAgICAgIHRoaXMuY2FjaGVkU2VhcmNoRmllbGRzLmZpbmRJbmRleChmaWVsZCA9PiBmaWVsZC5rZXkgPT09IGRhdGEua2V5KSA9PT0gLTE7XG5cbiAgICByZXR1cm4gY29udGFpbnNBbGxWYWx1ZXMgJiYga2V5SXNVbmlxdWU7XG4gIH1cblxuICBwcml2YXRlIGlzRmllbGRUeXBlRHJvcGRvd24oZmllbGRUeXBlPzogU2VhcmNoRmllbGRGaWVsZFR5cGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmllbGRUeXBlID09PSAnc2luZ2xlLXNlbGVjdC1kcm9wZG93bicgfHwgZmllbGRUeXBlID09PSAnbXVsdGktc2VsZWN0LWRyb3Bkb3duJztcbiAgfVxuXG4gIHByaXZhdGUgZHJvcGRvd25EYXRhUHJvdmlkZXJTdXBwb3J0c1VwZGF0ZXMoZHJvcGRvd25EYXRhUHJvdmlkZXI/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZHJvcGRvd25EYXRhUHJvdmlkZXIgPT09ICdkcm9wZG93bkRhdGFiYXNlRGF0YVByb3ZpZGVyJztcbiAgfVxuXG4gIHByaXZhdGUgb3BlblNlbGVjdGVkU2VhcmNoRmllbGRTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoRmllbGQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd01vZGFsKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Nb2RhbFNob3dpbmdTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm1vZGFsLm1vZGFsU2hvd2luZyQuc3Vic2NyaWJlKG1vZGFsU2hvd2luZyA9PiB7XG4gICAgICAgIGlmIChtb2RhbFNob3dpbmcpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1NlYXJjaEZpZWxkc0Zvcm0gPSB0cnVlO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93U2VhcmNoRmllbGRzRm9ybSA9IGZhbHNlO1xuICAgICAgICAgIH0sIDE1MCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RG93bmxvYWQoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLCBzZWFyY2hGaWVsZHM6IEFycmF5PFNlYXJjaEZpZWxkPik6IHZvaWQge1xuICAgIHRoaXMuZG93bmxvYWROYW1lJC5uZXh0KGAke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9Lmpzb25gKTtcbiAgICB0aGlzLmRvd25sb2FkVXJsJC5uZXh0KFxuICAgICAgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChcbiAgICAgICAgJ2RhdGE6dGV4dC9qc29uO2NoYXJzZXQ9VVRGLTgsJyArXG4gICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHtzZWFyY2hGaWVsZHN9LCBudWxsLCAyKSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlSW5wdXQkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZUlucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0JC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd01vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWw/LnNob3coKTtcbiAgfVxuXG4gIHByaXZhdGUgaGlkZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWw/LmhpZGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaFNlYXJjaEZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLnJlZnJlc2hTZWFyY2hGaWVsZHMkLm5leHQobnVsbCk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIntcbiAgICBzZWFyY2hGaWVsZHM6IHRyYW5zbGF0ZWRTZWFyY2hGaWVsZHMkIHwgYXN5bmMsXG4gICAgZG93bmxvYWRVcmw6IGRvd25sb2FkVXJsJCB8IGFzeW5jLFxuICAgIGRvd25sb2FkTmFtZTogZG93bmxvYWROYW1lJCB8IGFzeW5jLFxuICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkIHwgYXN5bmMsXG4gICAgdmFsaWQ6IHZhbGlkJCB8IGFzeW5jLFxuICAgIGRpc2FibGVJbnB1dDogZGlzYWJsZUlucHV0JCB8IGFzeW5jXG4gIH0gYXMgb2JzXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3Q7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kYWw7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbnMgbGV0LW9icz1cIm9ic1wiPlxuICA8ZGl2IGNsYXNzPVwiZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHNfX2J1dHRvbnNcIj5cbiAgICA8YVxuICAgICAgY2RzTGlua1xuICAgICAgY2xhc3M9XCJjZW50ZXItbGlua1wiXG4gICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICFvYnMuZG93bmxvYWRVcmwgfHwgIW9icy5kb3dubG9hZE5hbWUgfHwgb2JzLnNlYXJjaEZpZWxkcy5sZW5ndGggPD0gMCB8fCBvYnMuZGlzYWJsZUlucHV0XG4gICAgICBcIlxuICAgICAgW2Rvd25sb2FkXT1cIm9icy5kb3dubG9hZE5hbWVcIlxuICAgICAgW2hyZWZdPVwib2JzLmRvd25sb2FkVXJsXCJcbiAgICA+XG4gICAgICB7eyAnc2VhcmNoRmllbGRzLmRvd25sb2FkQnV0dG9uVGV4dCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2E+XG5cbiAgICA8YnV0dG9uXG4gICAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nU2VhcmNoRmllbGRzIHx8IG9icy5kaXNhYmxlSW5wdXRcIlxuICAgICAgKGNsaWNrKT1cInNlYXJjaEZpZWxkQ2xpY2tlZCgkZXZlbnQsIHRydWUpXCJcbiAgICA+XG4gICAgICA8c3ZnIGNkc0ljb249XCJhZGRcIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+PC9zdmc+XG5cbiAgICAgIHt7ICdzZWFyY2hGaWVsZHNPdmVydmlldy5hZGRSb3cnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsaXN0IGxldC1vYnM9XCJvYnNcIj5cbiAgPHZhbHRpbW8tY2FyYm9uLWxpc3RcbiAgICBbYWN0aW9uSXRlbXNdPVwiYWN0aW9uSXRlbXNcIlxuICAgIFtmaWVsZHNdPVwiZmllbGRzXCJcbiAgICBbaGVhZGVyXT1cImZhbHNlXCJcbiAgICBbaXRlbXNdPVwib2JzLnNlYXJjaEZpZWxkc1wiXG4gICAgW2xvYWRpbmddPVwiIW9icy5zZWFyY2hGaWVsZHNcIlxuICAgIFttb3ZpbmdSb3dzRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAocm93Q2xpY2tlZCk9XCJzZWFyY2hGaWVsZENsaWNrZWQoJGV2ZW50LCBmYWxzZSlcIlxuICAgIChtb3ZlUm93KT1cIm9uTW92ZVJvd0NsaWNrKCRldmVudCwgb2JzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgIGNhcmJvblRvb2xiYXJDb250ZW50XG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnM7IGNvbnRleHQ6IHtvYnM6IG9ic31cIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC92YWx0aW1vLWNhcmJvbi1saXN0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb2RhbCBsZXQtb2JzPVwib2JzXCI+XG4gIDx2YWx0aW1vLW1vZGFsXG4gICAgI3NlYXJjaEZpZWxkTW9kYWxcbiAgICBlbGVtZW50SWQ9XCJzZWFyY2hGaWVsZE1vZGFsXCJcbiAgICBbdGl0bGVdPVwiXG4gICAgICBzZWFyY2hGaWVsZEFjdGlvblR5cGVJc0FkZFxuICAgICAgICA/ICgnc2VhcmNoRmllbGRzT3ZlcnZpZXcuYWRkUm93JyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgOiAoJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmVkaXQnIHwgdHJhbnNsYXRlKVxuICAgIFwiXG4gICAgW3Nob3dGb290ZXJdPVwidHJ1ZVwiXG4gID5cbiAgICA8ZGl2IGJvZHkgY2xhc3M9XCJtdC0yXCI+XG4gICAgICA8di1mb3JtXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJmb3JtVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICpuZ0lmPVwic2hvd1NlYXJjaEZpZWxkc0Zvcm0gJiYge3NlYXJjaEZpZWxkOiBzZWxlY3RlZFNlYXJjaEZpZWxkJCB8IGFzeW5jfSBhcyBzZWFyY2hPYnNcIlxuICAgICAgPlxuICAgICAgICA8di1pbnB1dFxuICAgICAgICAgIG5hbWU9XCJ0aXRsZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy50aXRsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFttYXJnaW5dPVwidHJ1ZVwiXG4gICAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJzZWFyY2hPYnMuc2VhcmNoRmllbGQ/LnRpdGxlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cImZhbHNlXCJcbiAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC92LWlucHV0PlxuICAgICAgICA8di1pbnB1dFxuICAgICAgICAgIG5hbWU9XCJrZXlcIlxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcua2V5JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbZGVmYXVsdFZhbHVlXT1cInNlYXJjaE9icy5zZWFyY2hGaWVsZD8ua2V5XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dCB8fCAhc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGRcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICBbd2lkdGhQeF09XCIyMDBcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLmtleScgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgIDwvdi1pbnB1dD5cbiAgICAgICAgPHYtaW5wdXRcbiAgICAgICAgICBuYW1lPVwicGF0aFwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5wYXRoJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbZGVmYXVsdFZhbHVlXT1cInNlYXJjaE9icy5zZWFyY2hGaWVsZD8ucGF0aFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlSW5wdXRcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLnBhdGgnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICA8L3YtaW5wdXQ+XG4gICAgICAgIDx2LXNlbGVjdFxuICAgICAgICAgICpuZ0lmPVwiZGF0YVR5cGVJdGVtcyQgfCBhc3luYyBhcyBkYXRhVHlwZUl0ZW1zXCJcbiAgICAgICAgICBbaXRlbXNdPVwiZGF0YVR5cGVJdGVtc1wiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5kYXRhVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICBuYW1lPVwiZGF0YVR5cGVcIlxuICAgICAgICAgIFtkZWZhdWx0U2VsZWN0aW9uSWRdPVwic2VhcmNoT2JzLnNlYXJjaEZpZWxkPy5kYXRhVHlwZVwiXG4gICAgICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLmRhdGFUeXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID48L3Ytc2VsZWN0PlxuICAgICAgICA8di1zZWxlY3RcbiAgICAgICAgICAqbmdJZj1cIihzaG93TWF0Y2hUeXBlcyQgfCBhc3luYykgJiYgKG1hdGNoVHlwZUl0ZW1zJCB8IGFzeW5jKSBhcyBtYXRjaFR5cGVJdGVtc1wiXG4gICAgICAgICAgW2l0ZW1zXT1cIm1hdGNoVHlwZUl0ZW1zXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnNlYXJjaEZpZWxkUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3Lm1hdGNoVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICBuYW1lPVwibWF0Y2hUeXBlXCJcbiAgICAgICAgICBbZGVmYXVsdFNlbGVjdGlvbklkXT1cInNlYXJjaE9icy5zZWFyY2hGaWVsZD8ubWF0Y2hUeXBlXCJcbiAgICAgICAgICBbd2lkdGhJblB4XT1cIjIwMFwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMubWF0Y2hUeXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID48L3Ytc2VsZWN0PlxuICAgICAgICA8di1zZWxlY3RcbiAgICAgICAgICAqbmdJZj1cImZpZWxkVHlwZUl0ZW1zJCB8IGFzeW5jIGFzIGZpZWxkVHlwZUl0ZW1zXCJcbiAgICAgICAgICBbaXRlbXNdPVwiZmllbGRUeXBlSXRlbXNcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcuc2VhcmNoRmllbGRQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcuZmllbGRUeXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlSW5wdXRcIlxuICAgICAgICAgIFttYXJnaW5dPVwidHJ1ZVwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgIG5hbWU9XCJmaWVsZFR5cGVcIlxuICAgICAgICAgIFtkZWZhdWx0U2VsZWN0aW9uSWRdPVwic2VhcmNoT2JzLnNlYXJjaEZpZWxkPy5maWVsZFR5cGVcIlxuICAgICAgICAgIFt3aWR0aEluUHhdPVwiMjAwXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5maWVsZFR5cGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPjwvdi1zZWxlY3Q+XG4gICAgICAgIDx2LXNlbGVjdFxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAoZmllbGRUeXBlSXNEcm9wZG93biQgfCBhc3luYykgJiZcbiAgICAgICAgICAgIChkcm9wZG93bkRhdGFQcm92aWRlck5hbWVzJCB8IGFzeW5jKSBhcyBkcm9wZG93bkRhdGFQcm92aWRlck5hbWVzXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbaXRlbXNdPVwiZHJvcGRvd25EYXRhUHJvdmlkZXJOYW1lc1wiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5kcm9wZG93bkRhdGFQcm92aWRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJmYWxzZVwiXG4gICAgICAgICAgbmFtZT1cImRyb3Bkb3duRGF0YVByb3ZpZGVyXCJcbiAgICAgICAgICBbZGVmYXVsdFNlbGVjdGlvbklkXT1cInNlYXJjaE9icy5zZWFyY2hGaWVsZD8uZHJvcGRvd25EYXRhUHJvdmlkZXJcIlxuICAgICAgICAgIFt3aWR0aEluUHhdPVwiMjAwXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5kcm9wZG93bkRhdGFQcm92aWRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+PC92LXNlbGVjdD5cbiAgICAgICAgPHZhbHRpbW8tY2FyYm9uLW11bHRpLWlucHV0XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIChzaG93SW5wdXREcm9wZG93blRhYmxlJCB8IGFzeW5jKSAmJlxuICAgICAgICAgICAgKGluaXRpYWxEcm9wZG93blZhbHVlcyQgfCBhc3luYykgYXMgaW5pdGlhbERyb3Bkb3duVmFsdWVzXG4gICAgICAgICAgXCJcbiAgICAgICAgICBuYW1lPVwiZHJvcGRvd25WYWx1ZXNcIlxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcuZHJvcGRvd25MaXN0VmFsdWVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgdHlwZT1cImtleVZhbHVlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW2RlZmF1bHRWYWx1ZXNdPVwiaW5pdGlhbERyb3Bkb3duVmFsdWVzXCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJmYWxzZVwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMuZHJvcGRvd25MaXN0VmFsdWVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImRyb3Bkb3duRGF0YWxpc3RDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC92YWx0aW1vLWNhcmJvbi1tdWx0aS1pbnB1dD5cbiAgICAgICAgPHYtdGFibGVcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKHNob3dSZWFkb25seURyb3Bkb3duVGFibGUkIHwgYXN5bmMpICYmXG4gICAgICAgICAgICAoaW5pdGlhbERyb3Bkb3duVmFsdWVzJCB8IGFzeW5jKSBhcyBpbml0aWFsRHJvcGRvd25WYWx1ZXNcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtpdGVtc109XCJpbml0aWFsRHJvcGRvd25WYWx1ZXNcIlxuICAgICAgICAgIFtjb2x1bW5zXT1cImRyb3Bkb3duQ29sdW1ucyQgfCBhc3luY1wiXG4gICAgICAgICAgW3Nob3dFZGl0QnV0dG9uc109XCJmYWxzZVwiXG4gICAgICAgICAgW2l0ZW1zVHJhbnNsYXRpb25LZXldPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3J1wiXG4gICAgICAgICAgW3Nob3dQYWdpbmF0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbbW9iaWxlQnJlYWtwb2ludFB4XT1cIjIwMFwiXG4gICAgICAgID48L3YtdGFibGU+XG4gICAgICA8L3YtZm9ybT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGZvb3Rlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcC0wXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zRm9vdGVyTW9kYWw7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3ZhbHRpbW8tbW9kYWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbnNGb290ZXJNb2RhbCBsZXQtb2JzPVwib2JzXCI+XG4gIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiICpuZ0lmPVwie3NlYXJjaEZpZWxkOiBzZWxlY3RlZFNlYXJjaEZpZWxkJCB8IGFzeW5jfSBhcyBzZWFyY2hPYnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHQtYnV0dG9uc1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tc3BhY2UgYnRuLXNlY29uZGFyeVwiXG4gICAgICAgICpuZ0lmPVwiIXNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlSW5wdXRcIlxuICAgICAgICAoY2xpY2spPVwiZGVsZXRlU2VsZWN0ZWRTZWFyY2hGaWVsZChzZWFyY2hPYnMuc2VhcmNoRmllbGQpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmRlbGV0ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2F2ZVNlYXJjaEZpZWxkKG9icy5kb2N1bWVudERlZmluaXRpb25OYW1lKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc3BhY2UgbXItMFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0IHx8ICFvYnMudmFsaWRcIlxuICAgICAgPlxuICAgICAgICB7eyAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuc3VibWl0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
446
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFHWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUVMLGdCQUFnQixFQUVoQixnQkFBZ0IsRUFNaEIsUUFBUSxHQUNULE1BQU0scUJBQXFCLENBQUM7QUFTN0IsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBRUgsRUFBRSxFQUNGLFlBQVksRUFDWixTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBUWQsTUFBTSxPQUFPLHNDQUFzQztJQWdSakQsWUFDbUIsZUFBZ0MsRUFDaEMsS0FBcUIsRUFDckIsZ0JBQWtDLEVBQ2xDLFNBQXVCLEVBQ3ZCLFdBQXdCO1FBSnhCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFwUmpDLGdCQUFXLEdBQThCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFdEQsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUNoRCxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFzQixTQUFTLENBQUMsQ0FBQztRQUNuRSxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3BELHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUEwQixTQUFTLENBQUMsQ0FBQztRQUMvRSwrQkFBMEIsR0FBRyxJQUFJLGVBQWUsQ0FDOUQsU0FBUyxDQUNWLENBQUM7UUFDYyxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQXFCLElBQUksQ0FBQyxDQUFDO1FBQzFELFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM3QyxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2xELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDcEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFL0QsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTVCLGdCQUFXLEdBQWlCO1lBQzFDO2dCQUNFLEtBQUssRUFBRSxnQkFBZ0I7Z0JBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksRUFBRSxRQUFRO2FBQ2Y7WUFDRDtnQkFDRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUN6QyxLQUFLLEVBQUUsa0JBQWtCO2dCQUN6QixJQUFJLEVBQUUsUUFBUTthQUNmO1NBQ0YsQ0FBQztRQUNjLFdBQU0sR0FBbUI7WUFDdkM7Z0JBQ0UsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUN2QixRQUFRLEVBQUUsS0FBSztnQkFDZixHQUFHLEVBQUUsT0FBTztnQkFDWixLQUFLLEVBQUUsNEJBQTRCO2FBQ3BDO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUN2QixRQUFRLEVBQUUsS0FBSztnQkFDZixHQUFHLEVBQUUsS0FBSztnQkFDVixLQUFLLEVBQUUsMEJBQTBCO2FBQ2xDO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUN2QixRQUFRLEVBQUUsS0FBSztnQkFDZixHQUFHLEVBQUUsTUFBTTtnQkFDWCxLQUFLLEVBQUUsMkJBQTJCO2FBQ25DO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUN2QixRQUFRLEVBQUUsS0FBSztnQkFDZixHQUFHLEVBQUUsVUFBVTtnQkFDZixLQUFLLEVBQUUsK0JBQStCO2FBQ3ZDO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUN2QixRQUFRLEVBQUUsS0FBSztnQkFDZixHQUFHLEVBQUUsV0FBVztnQkFDaEIsS0FBSyxFQUFFLGdDQUFnQzthQUN4QztTQUNGLENBQUM7UUFFYyxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBcUI7WUFDekU7Z0JBQ0UsbUJBQW1CLEVBQUUseUJBQXlCO2dCQUM5QyxPQUFPLEVBQUUsS0FBSzthQUNmO1lBQ0Q7Z0JBQ0UsbUJBQW1CLEVBQUUsMkJBQTJCO2dCQUNoRCxPQUFPLEVBQUUsT0FBTzthQUNqQjtTQUNGLENBQUMsQ0FBQztRQUVjLGVBQVUsR0FBK0I7WUFDeEQsTUFBTTtZQUNOLFFBQVE7WUFDUixNQUFNO1lBQ04sVUFBVTtZQUNWLFNBQVM7U0FDVixDQUFDO1FBRWMsbUJBQWMsR0FBa0MsSUFBSSxDQUFDLGdCQUFnQjthQUNsRixNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ2IsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FDUCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0IsRUFBRSxFQUFFLFFBQVE7WUFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsUUFBUSxFQUFFLENBQUM7U0FDaEUsQ0FBQyxDQUFDLENBQ0osQ0FDRixDQUFDO1FBRVksdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDeEQsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN0RCxvQkFBZSxHQUFnQztZQUM5RCxRQUFRO1lBQ1IsT0FBTztZQUNQLHdCQUF3QjtZQUN4Qix1QkFBdUI7U0FDeEIsQ0FBQztRQUNlLHlCQUFvQixHQUFnQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4RSx3QkFBbUIsR0FBZ0MsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvRCxvQkFBZSxHQUFrQyxhQUFhLENBQUM7WUFDN0UsSUFBSSxDQUFDLGtCQUFrQjtZQUN2QixJQUFJLENBQUMsZUFBZTtZQUNwQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNwQyxDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRTtZQUMxQyxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2hELEVBQUUsRUFBRSxTQUFTO29CQUNiLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLHdCQUF3QixTQUFTLEVBQUUsQ0FBQztpQkFDekUsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO2lCQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDakQsRUFBRSxFQUFFLFNBQVM7b0JBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLFNBQVMsRUFBRSxDQUFDO2lCQUN6RSxDQUFDLENBQUMsQ0FBQztZQUNOLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDNUMsRUFBRSxFQUFFLFNBQVM7Z0JBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLFNBQVMsRUFBRSxDQUFDO2FBQ3pFLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVlLGdCQUFXLEdBQWdDLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlELG9CQUFlLEdBQWtDLElBQUksQ0FBQyxnQkFBZ0I7YUFDbkYsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUNiLElBQUksQ0FDSCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLEVBQUUsRUFBRSxTQUFTO1lBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLFNBQVMsRUFBRSxDQUFDO1NBQ3pFLENBQUMsQ0FBQyxDQUNKLENBQ0YsQ0FBQztRQUdZLDRCQUF1QixHQUF1QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2xGLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEVBQ2hDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFDbEMsR0FBRyxDQUFDLENBQUMsc0JBQThCLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLHNCQUFzQixDQUFDLENBQUMsQ0FDakcsQ0FBQztRQUtLLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUVqQix5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBTyxJQUFJLENBQUMsQ0FBQztRQUV2RCxrQkFBYSxHQUFtQyxhQUFhLENBQUM7WUFDN0UsSUFBSSxDQUFDLHVCQUF1QjtZQUM1QixJQUFJLENBQUMsb0JBQW9CO1NBQzFCLENBQUMsQ0FBQyxJQUFJLENBQ0wsU0FBUyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEVBQUUsQ0FDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUNyRSxFQUNELEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO2dCQUM1RSxJQUFJLFlBQVksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLFlBQVksRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzVFLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3pELENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsWUFBWSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVjLDRCQUF1QixHQUFtQyxhQUFhLENBQUM7WUFDdEYsSUFBSSxDQUFDLGFBQWE7WUFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDcEMsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FDckIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0IsR0FBRyxXQUFXO1lBQ2QsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDakQsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3pGLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLHdCQUF3QixXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDMUYsQ0FBQyxDQUFDLENBQ0osQ0FDRixDQUFDO1FBRWMseUJBQW9CLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFM0QsK0JBQTBCLEdBQWtDLGFBQWEsQ0FBQztZQUN4RixJQUFJLENBQUMsZUFBZSxDQUFDLHdCQUF3QixFQUFFO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ3BDLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQ2xCLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLEVBQUUsRUFBRSxRQUFRO1lBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLFFBQVEsRUFBRSxDQUFDO1NBQ3hFLENBQUMsQ0FBQyxDQUNKLENBQ0YsQ0FBQztRQUVlLDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUFtQixFQUFFLENBQUMsQ0FBQztRQUVyRSwyQkFBc0IsR0FBaUMsYUFBYSxDQUFDO1lBQ25GLElBQUksQ0FBQyx1QkFBdUI7WUFDNUIsSUFBSSxDQUFDLFNBQVM7U0FDZixDQUFDLENBQUMsSUFBSSxDQUNMLG9CQUFvQixDQUNsQixDQUFDLENBQUMsMEJBQTBCLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFLENBQ3pGLDBCQUEwQixLQUFLLDBCQUEwQjtZQUN6RCxZQUFZLEVBQUUsb0JBQW9CLEtBQUssWUFBWSxFQUFFLG9CQUFvQjtZQUN6RSxZQUFZLEVBQUUsR0FBRyxLQUFLLFlBQVksRUFBRSxHQUFHLENBQzFDLEVBQ0QsU0FBUyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQy9DLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDaEQsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEIsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLGVBQWU7aUJBQ3hCLGVBQWUsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQztpQkFDcEYsSUFBSSxDQUNILEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDakIsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDakIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDeEQsR0FBRyxFQUFFLGdCQUFnQjt3QkFDckIsS0FBSyxFQUFFLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztxQkFDdEMsQ0FBQyxDQUFDLENBQUM7Z0JBQ04sQ0FBQztnQkFFRCxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDTixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRWMsb0JBQWUsR0FBd0IsYUFBYSxDQUFDO1lBQ25FLElBQUksQ0FBQyxlQUFlO1lBQ3BCLElBQUksQ0FBQyxvQkFBb0I7U0FDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxjQUFjLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFFaEYsK0JBQTBCLEdBQXdCLGFBQWEsQ0FBQztZQUM5RSxJQUFJLENBQUMsZUFBZTtZQUNwQixJQUFJLENBQUMsb0JBQW9CO1lBQ3pCLElBQUksQ0FBQyxTQUFTO1NBQ2YsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQ0QsQ0FBQyxDQUFDLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQ2xELGNBQWM7WUFDZCxtQkFBbUI7WUFDbkIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxvQkFBb0I7WUFDaEMsQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLENBQzVFLENBQ0YsQ0FBQztRQUVjLDRCQUF1QixHQUF3QixhQUFhLENBQUM7WUFDM0UsSUFBSSxDQUFDLGVBQWU7WUFDcEIsSUFBSSxDQUFDLG9CQUFvQjtZQUN6QixJQUFJLENBQUMsU0FBUztTQUNmLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUNELENBQUMsQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUNsRCxjQUFjO1lBQ2QsbUJBQW1CO1lBQ25CLENBQUMsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CO1lBQ2hDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLENBQUMsQ0FDM0UsQ0FDRixDQUFDO1FBRWMsaUJBQVksR0FBRyxPQUFPLENBQUM7UUFTckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFTSxlQUFlO1FBQ3BCLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVNLGtCQUFrQixDQUFDLFdBQXdCLEVBQUUsMEJBQW1DO1FBQ3JGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUN6RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQywwQkFBMEIsR0FBRywwQkFBMEIsQ0FBQztnQkFDN0QsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUN0RCxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxDQUFDLEdBQUcsQ0FDdkMsQ0FBQztnQkFDRixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFLLEVBQWtCLENBQUMsQ0FBQztnQkFDM0UsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxlQUFlLENBQUMsSUFBaUI7UUFDdEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUM7WUFDekUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RELENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxJQUFzQjtRQUNsRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQXdCLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU0sY0FBYyxDQUFDLFNBQXVCLEVBQUUsc0JBQThCO1FBQzNFLE1BQU0sRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFDLEdBQUcsU0FBUyxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLFNBQVMsS0FBSyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7UUFDakQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQyxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRixNQUFNLGdCQUFnQixHQUFHLEVBQUMsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsRUFBQyxDQUFDO1FBQzdELE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFdEQsSUFBSSxvQkFBb0IsSUFBSSxNQUFNLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0QsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6RSxNQUFNLHNCQUFzQixHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FDM0QsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLG9CQUFvQixDQUM1QyxDQUFDO1lBQ0Ysb0JBQW9CLENBQUMsTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7YUFBTSxJQUFJLG9CQUFvQixJQUFJLENBQUMsTUFBTSxJQUFJLGdCQUFnQixHQUFHLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUN0RixNQUFNLG1CQUFtQixHQUFHLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3hFLE1BQU0scUJBQXFCLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxDQUMxRCxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssbUJBQW1CLENBQzNDLENBQUM7WUFDRixvQkFBb0IsQ0FBQyxNQUFNLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDSCxDQUFDO0lBRU0sa0NBQWtDLENBQUMsbUJBQWdDO1FBQ3hFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQixJQUFJLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxtQkFBbUIsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7WUFDeEYsSUFBSSxDQUFDLGVBQWU7aUJBQ2pCLGtCQUFrQixDQUNqQixtQkFBbUIsRUFBRSxvQkFBb0IsSUFBSSxFQUFFLEVBQy9DLElBQUksQ0FBQyx1QkFBdUIsRUFDNUIsbUJBQW1CLENBQUMsR0FBRyxDQUN4QjtpQkFDQSxTQUFTLEVBQUUsQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxDQUFDLGVBQWU7YUFDakIsb0JBQW9CLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLG1CQUFtQixDQUFDLEdBQUcsQ0FBQzthQUMzRSxTQUFTLENBQUM7WUFDVCxJQUFJLEVBQUUsR0FBRyxFQUFFO2dCQUNULElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxlQUFlLENBQUMsc0JBQThCO1FBQ25ELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDaEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNkLE9BQU87WUFDVCxDQUFDO1lBQ0QsTUFBTSxjQUFjLEdBQWdCO2dCQUNsQyxHQUFHLFFBQVE7Z0JBQ1gsU0FBUyxFQUNQLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsSUFBSSxRQUFRLEVBQUUsUUFBUSxLQUFLLE1BQU07b0JBQzdFLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUztvQkFDcEIsQ0FBQyxDQUFDLE9BQU87Z0JBQ2IsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO2FBQzNFLENBQUM7WUFFRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDO1lBQ3JELElBQ0UsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLFlBQVksRUFBRSxvQkFBb0IsQ0FBQztnQkFDNUUsWUFBWSxFQUFFLG9CQUFvQixLQUFLLGNBQWMsRUFBRSxvQkFBb0IsRUFDM0UsQ0FBQztnQkFDRCxJQUFJLENBQUMsZUFBZTtxQkFDakIsa0JBQWtCLENBQ2pCLFlBQVksRUFBRSxvQkFBb0IsSUFBSSxFQUFFLEVBQ3hDLHNCQUFzQixFQUN0QixZQUFZLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FDeEI7cUJBQ0EsU0FBUyxFQUFFLENBQUM7WUFDakIsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLG1DQUFtQyxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xGLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFO29CQUNwRSxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsTUFBTSxDQUNuQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFDLENBQUMsRUFDN0QsRUFBRSxDQUNILENBQUM7b0JBQ0YsSUFBSSxDQUFDLGVBQWU7eUJBQ2pCLGdCQUFnQixDQUNmLGNBQWMsQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLEVBQ3pDLHNCQUFzQixFQUN0QixjQUFjLENBQUMsR0FBRyxFQUNsQixPQUFPLENBQ1I7eUJBQ0EsU0FBUyxFQUFFLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLEVBQUUsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUN2RixHQUFHLEVBQUU7b0JBQ0gsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNuQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUM3QixDQUFDLEVBQ0QsR0FBRyxFQUFFO29CQUNILElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDckIsQ0FBQyxDQUNGLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUMvQyxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RGLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFbkYsY0FBYyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDbEUsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGtCQUFrQixDQUN2QixzQkFBOEIsRUFDOUIsZUFBbUM7UUFFbkMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBCLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLEVBQUUsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUN2RixHQUFHLEVBQUU7WUFDSCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsRUFDRCxHQUFHLEVBQUU7WUFDSCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxpQkFBdUMsRUFBRSxLQUFVO1FBQ3ZFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRU8sT0FBTyxDQUFDLElBQWlCO1FBQy9CLE1BQU0sY0FBYyxHQUNsQixJQUFJLENBQUMsUUFBUSxLQUFLLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNoRyxNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3hFLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CO1lBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUMxQixJQUFJLENBQUMsR0FBRztZQUNSLElBQUksQ0FBQyxRQUFRO1lBQ2IsY0FBYztZQUNkLHlCQUF5QjtZQUN6QixJQUFJLENBQUMsSUFBSTtZQUNULElBQUksQ0FBQyxTQUFTLENBQ2YsQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUNmLENBQUMsSUFBSSxDQUFDLDBCQUEwQjtZQUNoQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFNUUsT0FBTyxpQkFBaUIsSUFBSSxXQUFXLENBQUM7SUFDMUMsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFNBQWdDO1FBQzFELE9BQU8sU0FBUyxLQUFLLHdCQUF3QixJQUFJLFNBQVMsS0FBSyx1QkFBdUIsQ0FBQztJQUN6RixDQUFDO0lBRU8sbUNBQW1DLENBQUMsb0JBQTZCO1FBQ3ZFLE9BQU8sb0JBQW9CLEtBQUssOEJBQThCLENBQUM7SUFDakUsQ0FBQztJQUVPLG1DQUFtQztRQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDckIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQ3hELElBQUksbUJBQW1CO2dCQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLDRCQUE0QjtRQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDMUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakIsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLFdBQVcsQ0FBQyxzQkFBOEIsRUFBRSxZQUFnQztRQUNsRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLHNCQUFzQixPQUFPLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FDbkMsK0JBQStCO1lBQzdCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxZQUFZLEVBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDOUQsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLFdBQVc7UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sU0FBUztRQUNmLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sZUFBZSxDQUFDLFdBQXdCO1FBQzlDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sYUFBYSxDQUFDLFdBQXdCO1FBQzVDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQzs4R0FuakJVLHNDQUFzQztrR0FBdEMsc0NBQXNDLHlIQ3BFbkQsMC9UQXdSQTs7MkZEcE5hLHNDQUFzQztrQkFObEQsU0FBUzsrQkFDRSwwQ0FBMEMsbUJBR25DLHVCQUF1QixDQUFDLE1BQU07cU1BR3JDLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RG9tU2FuaXRpemVyLCBTYWZlVXJsfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0Fycm93RG93bjE2LCBBcnJvd1VwMTZ9IGZyb20gJ0BjYXJib24vaWNvbnMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGlvbkl0ZW0sXG4gIENBUkJPTl9DT05TVEFOVFMsXG4gIENvbHVtbkNvbmZpZyxcbiAgTW92ZVJvd0RpcmVjdGlvbixcbiAgTW92ZVJvd0V2ZW50LFxuICBNdWx0aUlucHV0T3V0cHV0LFxuICBNdWx0aUlucHV0VmFsdWVzLFxuICBTZWxlY3RJdGVtLFxuICBUYWJsZUNvbHVtbixcbiAgVmlld1R5cGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgU2VhcmNoRmllbGQsXG4gIFNlYXJjaEZpZWxkRGF0YVR5cGUsXG4gIFNlYXJjaEZpZWxkRmllbGRUeXBlLFxuICBTZWFyY2hGaWVsZE1hdGNoVHlwZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge0ljb25TZXJ2aWNlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llck1hbmFnZW1lbnRTZWFyY2hGaWVsZHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBPdXRwdXQoKSBzZWFyY2hGaWVsZDogRXZlbnRFbWl0dGVyPFNlYXJjaEZpZWxkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZG93bmxvYWROYW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHB1YmxpYyByZWFkb25seSBkb3dubG9hZFVybCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNhZmVVcmwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSBkaXNhYmxlSW5wdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZFNlYXJjaEZpZWxkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VhcmNoRmllbGQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZERlbGV0ZVNlYXJjaEZpZWxkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VhcmNoRmllbGQgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybURhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hGaWVsZCB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsaWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBzaG93RmllbGRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgbW9kYWxTaG93aW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd0RlbGV0ZU1vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGFjdGlvbkl0ZW1zOiBBY3Rpb25JdGVtW10gPSBbXG4gICAge1xuICAgICAgbGFiZWw6ICdpbnRlcmZhY2UuZWRpdCcsXG4gICAgICBjYWxsYmFjazogdGhpcy5zaG93RWRpdE1vZGFsLmJpbmQodGhpcyksXG4gICAgICB0eXBlOiAnbm9ybWFsJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGNhbGxiYWNrOiB0aGlzLnNob3dEZWxldGVNb2RhbC5iaW5kKHRoaXMpLFxuICAgICAgbGFiZWw6ICdpbnRlcmZhY2UuZGVsZXRlJyxcbiAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgIH0sXG4gIF07XG4gIHB1YmxpYyByZWFkb25seSBmaWVsZHM6IENvbHVtbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5URVhULFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAga2V5OiAndGl0bGUnLFxuICAgICAgbGFiZWw6ICdzZWFyY2hGaWVsZHNPdmVydmlldy50aXRsZScsXG4gICAgfSxcbiAgICB7XG4gICAgICB2aWV3VHlwZTogVmlld1R5cGUuVEVYVCxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIGtleTogJ2tleScsXG4gICAgICBsYWJlbDogJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmtleScsXG4gICAgfSxcbiAgICB7XG4gICAgICB2aWV3VHlwZTogVmlld1R5cGUuVEVYVCxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIGtleTogJ3BhdGgnLFxuICAgICAgbGFiZWw6ICdzZWFyY2hGaWVsZHNPdmVydmlldy5wYXRoJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5URVhULFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAga2V5OiAnZGF0YVR5cGUnLFxuICAgICAgbGFiZWw6ICdzZWFyY2hGaWVsZHNPdmVydmlldy5kYXRhVHlwZScsXG4gICAgfSxcbiAgICB7XG4gICAgICB2aWV3VHlwZTogVmlld1R5cGUuVEVYVCxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIGtleTogJ2ZpZWxkVHlwZScsXG4gICAgICBsYWJlbDogJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmZpZWxkVHlwZScsXG4gICAgfSxcbiAgXTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZHJvcGRvd25Db2x1bW5zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8VGFibGVDb2x1bW4+PihbXG4gICAge1xuICAgICAgbGFiZWxUcmFuc2xhdGlvbktleTogJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmlkJyxcbiAgICAgIGRhdGFLZXk6ICdrZXknLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWxUcmFuc2xhdGlvbktleTogJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnRleHQnLFxuICAgICAgZGF0YUtleTogJ3ZhbHVlJyxcbiAgICB9LFxuICBdKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IERBVEFfVFlQRVM6IEFycmF5PFNlYXJjaEZpZWxkRGF0YVR5cGU+ID0gW1xuICAgICd0ZXh0JyxcbiAgICAnbnVtYmVyJyxcbiAgICAnZGF0ZScsXG4gICAgJ2RhdGV0aW1lJyxcbiAgICAnYm9vbGVhbicsXG4gIF07XG5cbiAgcHVibGljIHJlYWRvbmx5IGRhdGFUeXBlSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PFNlbGVjdEl0ZW0+PiA9IHRoaXMudHJhbnNsYXRlU2VydmljZVxuICAgIC5zdHJlYW0oJ2tleScpXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKCkgPT5cbiAgICAgICAgdGhpcy5EQVRBX1RZUEVTLm1hcChkYXRhVHlwZSA9PiAoe1xuICAgICAgICAgIGlkOiBkYXRhVHlwZSxcbiAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRzLiR7ZGF0YVR5cGV9YCksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRhdGFUeXBlSXNCb29sZWFuJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFUeXBlSXNUZXh0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IEFMTF9GSUVMRF9UWVBFUzogQXJyYXk8U2VhcmNoRmllbGRGaWVsZFR5cGU+ID0gW1xuICAgICdzaW5nbGUnLFxuICAgICdyYW5nZScsXG4gICAgJ3NpbmdsZS1zZWxlY3QtZHJvcGRvd24nLFxuICAgICdtdWx0aS1zZWxlY3QtZHJvcGRvd24nLFxuICBdO1xuICBwcml2YXRlIHJlYWRvbmx5IE5PTl9URVhUX0ZJRUxEX1RZUEVTOiBBcnJheTxTZWFyY2hGaWVsZEZpZWxkVHlwZT4gPSBbJ3NpbmdsZScsICdyYW5nZSddO1xuICBwcml2YXRlIHJlYWRvbmx5IEJPT0xFQU5fRklFTERfVFlQRVM6IEFycmF5PFNlYXJjaEZpZWxkRmllbGRUeXBlPiA9IFsnc2luZ2xlJ107XG4gIHB1YmxpYyByZWFkb25seSBmaWVsZFR5cGVJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8U2VsZWN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kYXRhVHlwZUlzQm9vbGVhbiQsXG4gICAgdGhpcy5kYXRhVHlwZUlzVGV4dCQsXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbZGF0YVR5cGVJc0Jvb2xlYW4sIGRhdGFUeXBlSXNUZXh0XSkgPT4ge1xuICAgICAgaWYgKGRhdGFUeXBlSXNCb29sZWFuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLkJPT0xFQU5fRklFTERfVFlQRVMubWFwKGZpZWxkVHlwZSA9PiAoe1xuICAgICAgICAgIGlkOiBmaWVsZFR5cGUsXG4gICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7ZmllbGRUeXBlfWApLFxuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2UgaWYgKCFkYXRhVHlwZUlzVGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5OT05fVEVYVF9GSUVMRF9UWVBFUy5tYXAoZmllbGRUeXBlID0+ICh7XG4gICAgICAgICAgaWQ6IGZpZWxkVHlwZSxcbiAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRzT3ZlcnZpZXcuJHtmaWVsZFR5cGV9YCksXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuQUxMX0ZJRUxEX1RZUEVTLm1hcChmaWVsZFR5cGUgPT4gKHtcbiAgICAgICAgaWQ6IGZpZWxkVHlwZSxcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7ZmllbGRUeXBlfWApLFxuICAgICAgfSkpO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBNQVRDSF9UWVBFUzogQXJyYXk8U2VhcmNoRmllbGRNYXRjaFR5cGU+ID0gWydleGFjdCcsICdsaWtlJ107XG4gIHB1YmxpYyByZWFkb25seSBtYXRjaFR5cGVJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8U2VsZWN0SXRlbT4+ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgLnN0cmVhbSgna2V5JylcbiAgICAucGlwZShcbiAgICAgIG1hcCgoKSA9PlxuICAgICAgICB0aGlzLk1BVENIX1RZUEVTLm1hcChtYXRjaFR5cGUgPT4gKHtcbiAgICAgICAgICBpZDogbWF0Y2hUeXBlLFxuICAgICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHNPdmVydmlldy4ke21hdGNoVHlwZX1gKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgKTtcblxuICBwcml2YXRlIF9kb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcy5uYW1lIHx8ICcnKSxcbiAgICBmaWx0ZXIoZG9jRGVmTmFtZSA9PiAhIWRvY0RlZk5hbWUpLFxuICAgIHRhcCgoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKSA9PiAodGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpKVxuICApO1xuXG4gIHByaXZhdGUgY2FjaGVkU2VhcmNoRmllbGRzITogQXJyYXk8U2VhcmNoRmllbGQ+O1xuXG4gIHB1YmxpYyBzZWFyY2hGaWVsZEFjdGlvblR5cGVJc0FkZDogYm9vbGVhbjtcbiAgcHVibGljIGxvYWRpbmdTZWFyY2hGaWVsZHMgPSB0cnVlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVmcmVzaFNlYXJjaEZpZWxkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VhcmNoRmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxTZWFyY2hGaWVsZD4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJCxcbiAgICB0aGlzLnJlZnJlc2hTZWFyY2hGaWVsZHMkLFxuICBdKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoW2RvY3VtZW50RGVmaW5pdGlvbk5hbWVdKSA9PlxuICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnRTZWFyY2hGaWVsZHMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICApLFxuICAgIHRhcChzZWFyY2hGaWVsZHMgPT4ge1xuICAgICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShkb2N1bWVudERlZmluaXRpb25OYW1lID0+IHtcbiAgICAgICAgaWYgKHNlYXJjaEZpZWxkcyAmJiBBcnJheS5pc0FycmF5KHNlYXJjaEZpZWxkcykgJiYgc2VhcmNoRmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5zZXREb3dubG9hZChkb2N1bWVudERlZmluaXRpb25OYW1lLCBzZWFyY2hGaWVsZHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KSxcbiAgICB0YXAoc2VhcmNoRmllbGRzID0+IHtcbiAgICAgIHRoaXMuY2FjaGVkU2VhcmNoRmllbGRzID0gc2VhcmNoRmllbGRzO1xuICAgICAgdGhpcy5sb2FkaW5nU2VhcmNoRmllbGRzID0gZmFsc2U7XG4gICAgfSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNsYXRlZFNlYXJjaEZpZWxkcyQ6IE9ic2VydmFibGU8QXJyYXk8U2VhcmNoRmllbGQ+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuc2VhcmNoRmllbGRzJCxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtzZWFyY2hGaWVsZHNdKSA9PlxuICAgICAgc2VhcmNoRmllbGRzLm1hcChzZWFyY2hGaWVsZCA9PiAoe1xuICAgICAgICAuLi5zZWFyY2hGaWVsZCxcbiAgICAgICAgdGl0bGU6IHNlYXJjaEZpZWxkLnRpdGxlID8gc2VhcmNoRmllbGQudGl0bGUgOiAnJyxcbiAgICAgICAgZGF0YVR5cGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHMuJHtzZWFyY2hGaWVsZC5kYXRhVHlwZX1gKSxcbiAgICAgICAgbWF0Y2hUeXBlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRzT3ZlcnZpZXcuJHtzZWFyY2hGaWVsZC5tYXRjaFR5cGV9YCksXG4gICAgICAgIGZpZWxkVHlwZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7c2VhcmNoRmllbGQuZmllbGRUeXBlfWApLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBmaWVsZFR5cGVJc0Ryb3Bkb3duJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyByZWFkb25seSBkcm9wZG93bkRhdGFQcm92aWRlck5hbWVzJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREcm9wZG93bkRhdGFQcm92aWRlcnMoKSxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtwcm92aWRlcnNdKSA9PlxuICAgICAgcHJvdmlkZXJzLm1hcChwcm92aWRlciA9PiAoe1xuICAgICAgICBpZDogcHJvdmlkZXIsXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHNPdmVydmlldy4ke3Byb3ZpZGVyfWApLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbW9kaWZpZWREcm9wZG93blZhbHVlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE11bHRpSW5wdXRWYWx1ZXM+KFtdKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgaW5pdGlhbERyb3Bkb3duVmFsdWVzJDogT2JzZXJ2YWJsZTxNdWx0aUlucHV0VmFsdWVzPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQsXG4gICAgdGhpcy5mb3JtRGF0YSQsXG4gIF0pLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXG4gICAgICAoW3ByZXZEb2N1bWVudERlZmluaXRpb25OYW1lLCBwcmV2Rm9ybURhdGFdLCBbY3VyckRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIGN1cnJGb3JtRGF0YV0pID0+XG4gICAgICAgIHByZXZEb2N1bWVudERlZmluaXRpb25OYW1lID09PSBjdXJyRG9jdW1lbnREZWZpbml0aW9uTmFtZSAmJlxuICAgICAgICBwcmV2Rm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyID09PSBjdXJyRm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyICYmXG4gICAgICAgIHByZXZGb3JtRGF0YT8ua2V5ID09PSBjdXJyRm9ybURhdGE/LmtleVxuICAgICksXG4gICAgc3dpdGNoTWFwKChbZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgZm9ybURhdGFdKSA9PiB7XG4gICAgICBpZiAoIWZvcm1EYXRhIHx8ICFmb3JtRGF0YS5kcm9wZG93bkRhdGFQcm92aWRlcikge1xuICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgICAgLmdldERyb3Bkb3duRGF0YShmb3JtRGF0YS5kcm9wZG93bkRhdGFQcm92aWRlciwgZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgZm9ybURhdGEua2V5KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoZHJvcGRvd25EYXRhID0+IHtcbiAgICAgICAgICAgIGlmIChkcm9wZG93bkRhdGEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGRyb3Bkb3duRGF0YSkubWFwKGRyb3Bkb3duRmllbGRLZXkgPT4gKHtcbiAgICAgICAgICAgICAgICBrZXk6IGRyb3Bkb3duRmllbGRLZXksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGRyb3Bkb3duRGF0YVtkcm9wZG93bkZpZWxkS2V5XSxcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzaG93TWF0Y2hUeXBlcyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRhdGFUeXBlSXNUZXh0JCxcbiAgICB0aGlzLmZpZWxkVHlwZUlzRHJvcGRvd24kLFxuICBdKS5waXBlKG1hcCgoW2RhdGFUeXBlSXNUZXh0LCBmaWVsZFR5cGVJc0Ryb3Bkb3duXSkgPT4gZGF0YVR5cGVJc1RleHQgJiYgIWZpZWxkVHlwZUlzRHJvcGRvd24pKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1JlYWRvbmx5RHJvcGRvd25UYWJsZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRhdGFUeXBlSXNUZXh0JCxcbiAgICB0aGlzLmZpZWxkVHlwZUlzRHJvcGRvd24kLFxuICAgIHRoaXMuZm9ybURhdGEkLFxuICBdKS5waXBlKFxuICAgIG1hcChcbiAgICAgIChbZGF0YVR5cGVJc1RleHQsIGZpZWxkVHlwZUlzRHJvcGRvd24sIGZvcm1EYXRhXSkgPT5cbiAgICAgICAgZGF0YVR5cGVJc1RleHQgJiZcbiAgICAgICAgZmllbGRUeXBlSXNEcm9wZG93biAmJlxuICAgICAgICAhIWZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlciAmJlxuICAgICAgICAhdGhpcy5kcm9wZG93bkRhdGFQcm92aWRlclN1cHBvcnRzVXBkYXRlcyhmb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXIpXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzaG93SW5wdXREcm9wZG93blRhYmxlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZGF0YVR5cGVJc1RleHQkLFxuICAgIHRoaXMuZmllbGRUeXBlSXNEcm9wZG93biQsXG4gICAgdGhpcy5mb3JtRGF0YSQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFtkYXRhVHlwZUlzVGV4dCwgZmllbGRUeXBlSXNEcm9wZG93biwgZm9ybURhdGFdKSA9PlxuICAgICAgICBkYXRhVHlwZUlzVGV4dCAmJlxuICAgICAgICBmaWVsZFR5cGVJc0Ryb3Bkb3duICYmXG4gICAgICAgICEhZm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyICYmXG4gICAgICAgIHRoaXMuZHJvcGRvd25EYXRhUHJvdmlkZXJTdXBwb3J0c1VwZGF0ZXMoZm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgQ0FSQk9OX1RIRU1FID0gJ3doaXRlJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaWNvblNlcnZpY2UucmVnaXN0ZXJBbGwoW0Fycm93RG93bjE2LCBBcnJvd1VwMTZdKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5TZWxlY3RlZFNlYXJjaEZpZWxkU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3Blbk1vZGFsU2hvd2luZ1N1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2hGaWVsZENsaWNrZWQoc2VhcmNoRmllbGQ6IFNlYXJjaEZpZWxkLCBzZWFyY2hGaWVsZEFjdGlvblR5cGVJc0FkZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShpbnB1dERpc2FibGVkID0+IHtcbiAgICAgIGlmICghaW5wdXREaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkID0gc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGQ7XG4gICAgICAgIGNvbnN0IHNlYXJjaEZpZWxkVG9TZWxlY3QgPSB0aGlzLmNhY2hlZFNlYXJjaEZpZWxkcy5maW5kKFxuICAgICAgICAgIGZpZWxkID0+IGZpZWxkLmtleSA9PT0gc2VhcmNoRmllbGQua2V5XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hGaWVsZCQubmV4dChzZWFyY2hGaWVsZFRvU2VsZWN0IHx8ICh7fSBhcyBTZWFyY2hGaWVsZCkpO1xuICAgICAgICB0aGlzLnNob3dNb2RhbCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGZvcm1WYWx1ZUNoYW5nZShkYXRhOiBTZWFyY2hGaWVsZCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5uZXh0SWZDaGFuZ2VkKHRoaXMuZGF0YVR5cGVJc1RleHQkLCBkYXRhLmRhdGFUeXBlID09PSAndGV4dCcpO1xuICAgICAgdGhpcy5uZXh0SWZDaGFuZ2VkKHRoaXMuZGF0YVR5cGVJc0Jvb2xlYW4kLCBkYXRhLmRhdGFUeXBlID09PSAnYm9vbGVhbicpO1xuICAgICAgdGhpcy5uZXh0SWZDaGFuZ2VkKHRoaXMuZmllbGRUeXBlSXNEcm9wZG93biQsIHRoaXMuaXNGaWVsZFR5cGVEcm9wZG93bihkYXRhLmZpZWxkVHlwZSkpO1xuICAgICAgdGhpcy5uZXh0SWZDaGFuZ2VkKHRoaXMuZm9ybURhdGEkLCBkYXRhKTtcbiAgICAgIHRoaXMubmV4dElmQ2hhbmdlZCh0aGlzLnZhbGlkJCwgdGhpcy5pc1ZhbGlkKGRhdGEpKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHB1YmxpYyBkcm9wZG93bkRhdGFsaXN0Q2hhbmdlKGRhdGE6IE11bHRpSW5wdXRPdXRwdXQpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGlmaWVkRHJvcGRvd25WYWx1ZXMkLm5leHQoZGF0YSBhcyBNdWx0aUlucHV0VmFsdWVzKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdmVSb3dDbGljayhtb3ZlRXZlbnQ6IE1vdmVSb3dFdmVudCwgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qge2luZGV4LCBkaXJlY3Rpb259ID0gbW92ZUV2ZW50O1xuICAgIGNvbnN0IG1vdmVVcCA9IGRpcmVjdGlvbiA9PT0gTW92ZVJvd0RpcmVjdGlvbi5VUDtcbiAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBbLi4udGhpcy5jYWNoZWRTZWFyY2hGaWVsZHNdO1xuICAgIGNvbnN0IHNlYXJjaEZpZWxkUm93ID0gc2VhcmNoRmllbGRzW2luZGV4XTtcblxuICAgIGNvbnN0IHNlYXJjaEZpZWxkSW5kZXggPSBzZWFyY2hGaWVsZHMuZmluZEluZGV4KGZpZWxkID0+IGZpZWxkLmtleSA9PT0gc2VhcmNoRmllbGRSb3cua2V5KTtcbiAgICBjb25zdCBmb3VuZFNlYXJjaEZpZWxkID0gey4uLnNlYXJjaEZpZWxkc1tzZWFyY2hGaWVsZEluZGV4XX07XG4gICAgY29uc3QgZmlsdGVyZWRTZWFyY2hGaWVsZHMgPSBzZWFyY2hGaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmtleSAhPT0gc2VhcmNoRmllbGRSb3cua2V5KTtcbiAgICBjb25zdCBtdWx0aXBsZVNlYXJjaEZpZWxkcyA9IHNlYXJjaEZpZWxkcz8ubGVuZ3RoID4gMTtcblxuICAgIGlmIChtdWx0aXBsZVNlYXJjaEZpZWxkcyAmJiBtb3ZlVXAgJiYgc2VhcmNoRmllbGRJbmRleCA+IDApIHtcbiAgICAgIGNvbnN0IHNlYXJjaEZpZWxkQmVmb3JlS2V5ID0gYCR7c2VhcmNoRmllbGRzW3NlYXJjaEZpZWxkSW5kZXggLSAxXS5rZXl9YDtcbiAgICAgIGNvbnN0IHNlYXJjaEZpZWxkQmVmb3JlSW5kZXggPSBmaWx0ZXJlZFNlYXJjaEZpZWxkcy5maW5kSW5kZXgoXG4gICAgICAgIGZpZWxkID0+IGZpZWxkLmtleSA9PT0gc2VhcmNoRmllbGRCZWZvcmVLZXlcbiAgICAgICk7XG4gICAgICBmaWx0ZXJlZFNlYXJjaEZpZWxkcy5zcGxpY2Uoc2VhcmNoRmllbGRCZWZvcmVJbmRleCwgMCwgZm91bmRTZWFyY2hGaWVsZCk7XG4gICAgICB0aGlzLnVwZGF0ZVNlYXJjaEZpZWxkcyhkb2N1bWVudERlZmluaXRpb25OYW1lLCBmaWx0ZXJlZFNlYXJjaEZpZWxkcyk7XG4gICAgfSBlbHNlIGlmIChtdWx0aXBsZVNlYXJjaEZpZWxkcyAmJiAhbW92ZVVwICYmIHNlYXJjaEZpZWxkSW5kZXggPCBzZWFyY2hGaWVsZHM/Lmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2VhcmNoRmllbGRBZnRlcktleSA9IGAke3NlYXJjaEZpZWxkc1tzZWFyY2hGaWVsZEluZGV4ICsgMV0ua2V5fWA7XG4gICAgICBjb25zdCBzZWFyY2hGaWVsZEFmdGVySW5kZXggPSBmaWx0ZXJlZFNlYXJjaEZpZWxkcy5maW5kSW5kZXgoXG4gICAgICAgIGZpZWxkID0+IGZpZWxkLmtleSA9PT0gc2VhcmNoRmllbGRBZnRlcktleVxuICAgICAgKTtcbiAgICAgIGZpbHRlcmVkU2VhcmNoRmllbGRzLnNwbGljZShzZWFyY2hGaWVsZEFmdGVySW5kZXggKyAxLCAwLCBmb3VuZFNlYXJjaEZpZWxkKTtcbiAgICAgIHRoaXMudXBkYXRlU2VhcmNoRmllbGRzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIGZpbHRlcmVkU2VhcmNoRmllbGRzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25EZWxldGVTZWxlY3RlZFNlYXJjaEZpZWxkQ29uZmlybShzZWxlY3RlZFNlYXJjaEZpZWxkOiBTZWFyY2hGaWVsZCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0KCk7XG5cbiAgICBpZiAodGhpcy5kcm9wZG93bkRhdGFQcm92aWRlclN1cHBvcnRzVXBkYXRlcyhzZWxlY3RlZFNlYXJjaEZpZWxkPy5kcm9wZG93bkRhdGFQcm92aWRlcikpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAgIC5kZWxldGVEcm9wZG93bkRhdGEoXG4gICAgICAgICAgc2VsZWN0ZWRTZWFyY2hGaWVsZD8uZHJvcGRvd25EYXRhUHJvdmlkZXIgPz8gJycsXG4gICAgICAgICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICBzZWxlY3RlZFNlYXJjaEZpZWxkLmtleVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgLmRlbGV0ZURvY3VtZW50U2VhcmNoKHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUsIHNlbGVjdGVkU2VhcmNoRmllbGQua2V5KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICAgICAgdGhpcy5oaWRlTW9kYWwoKTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlU2VhcmNoRmllbGQoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlSW5wdXQoKTtcblxuICAgIHRoaXMuZm9ybURhdGEkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGZvcm1EYXRhID0+IHtcbiAgICAgIGlmICghZm9ybURhdGEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbWFwcGVkRm9ybURhdGE6IFNlYXJjaEZpZWxkID0ge1xuICAgICAgICAuLi5mb3JtRGF0YSxcbiAgICAgICAgbWF0Y2hUeXBlOlxuICAgICAgICAgICF0aGlzLmlzRmllbGRUeXBlRHJvcGRvd24oZm9ybURhdGE/LmZpZWxkVHlwZSkgJiYgZm9ybURhdGE/LmRhdGFUeXBlID09PSAndGV4dCdcbiAgICAgICAgICAgID8gZm9ybURhdGEubWF0Y2hUeXBlXG4gICAgICAgICAgICA6ICdleGFjdCcsXG4gICAgICAgIGZpZWxkVHlwZTogZm9ybURhdGEuZGF0YVR5cGUgIT09ICdib29sZWFuJyA/IGZvcm1EYXRhLmZpZWxkVHlwZSA6ICdzaW5nbGUnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcHJldkZvcm1EYXRhID0gdGhpcy5zZWxlY3RlZFNlYXJjaEZpZWxkJC52YWx1ZTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5kcm9wZG93bkRhdGFQcm92aWRlclN1cHBvcnRzVXBkYXRlcyhwcmV2Rm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyKSAmJlxuICAgICAgICBwcmV2Rm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyICE9PSBtYXBwZWRGb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXJcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgICAgIC5kZWxldGVEcm9wZG93bkRhdGEoXG4gICAgICAgICAgICBwcmV2Rm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyID8/ICcnLFxuICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICAgIHByZXZGb3JtRGF0YT8ua2V5ID8/ICcnXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZHJvcGRvd25EYXRhUHJvdmlkZXJTdXBwb3J0c1VwZGF0ZXMobWFwcGVkRm9ybURhdGEuZHJvcGRvd25EYXRhUHJvdmlkZXIpKSB7XG4gICAgICAgIHRoaXMubW9kaWZpZWREcm9wZG93blZhbHVlcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZHJvcGRvd25WYWx1ZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBkcm9wZG93blZhbHVlcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBrZXlWYWx1ZSkgPT4gKHsuLi5hY2MsIFtrZXlWYWx1ZS5rZXldOiBrZXlWYWx1ZS52YWx1ZX0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAgICAgICAucG9zdERyb3Bkb3duRGF0YShcbiAgICAgICAgICAgICAgbWFwcGVkRm9ybURhdGEuZHJvcGRvd25EYXRhUHJvdmlkZXIgPz8gJycsXG4gICAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgICAgIG1hcHBlZEZvcm1EYXRhLmtleSxcbiAgICAgICAgICAgICAgcmVxdWVzdFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGQpIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UucG9zdERvY3VtZW50U2VhcmNoKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIG1hcHBlZEZvcm1EYXRhKS5zdWJzY3JpYmUoXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVJbnB1dCgpO1xuICAgICAgICAgICAgdGhpcy5oaWRlTW9kYWwoKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFNlYXJjaEZpZWxkcygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVJbnB1dCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld0ZpZWxkcyA9IFsuLi50aGlzLmNhY2hlZFNlYXJjaEZpZWxkc107XG4gICAgICAgIGNvbnN0IGluZGV4VG9SZXBsYWNlID0gbmV3RmllbGRzLmZpbmRJbmRleChmaWVsZCA9PiBmaWVsZC5rZXkgPT09IG1hcHBlZEZvcm1EYXRhLmtleSk7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihmaWVsZCA9PiBmaWVsZC5rZXkgIT09IG1hcHBlZEZvcm1EYXRhLmtleSk7XG5cbiAgICAgICAgZmlsdGVyZWRGaWVsZHMuc3BsaWNlKGluZGV4VG9SZXBsYWNlLCAwLCBtYXBwZWRGb3JtRGF0YSk7XG4gICAgICAgIHRoaXMudXBkYXRlU2VhcmNoRmllbGRzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIGZpbHRlcmVkRmllbGRzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVTZWFyY2hGaWVsZHMoXG4gICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLFxuICAgIG5ld1NlYXJjaEZpZWxkczogQXJyYXk8U2VhcmNoRmllbGQ+XG4gICk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0KCk7XG5cbiAgICB0aGlzLmRvY3VtZW50U2VydmljZS5wdXREb2N1bWVudFNlYXJjaChkb2N1bWVudERlZmluaXRpb25OYW1lLCBuZXdTZWFyY2hGaWVsZHMpLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5lbmFibGVJbnB1dCgpO1xuICAgICAgICB0aGlzLmhpZGVNb2RhbCgpO1xuICAgICAgICB0aGlzLnJlZnJlc2hTZWFyY2hGaWVsZHMoKTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uTW9kYWxDbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmhpZGVNb2RhbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0SWZDaGFuZ2VkKGJlaGF2aW91clN1YmplY3QkOiBCZWhhdmlvclN1YmplY3Q8YW55PiwgdmFsdWU6IGFueSkge1xuICAgIGlmIChKU09OLnN0cmluZ2lmeShiZWhhdmlvdXJTdWJqZWN0JC52YWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkge1xuICAgICAgYmVoYXZpb3VyU3ViamVjdCQubmV4dCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkKGRhdGE6IFNlYXJjaEZpZWxkKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsaWRNYXRjaFR5cGUgPVxuICAgICAgZGF0YS5kYXRhVHlwZSA9PT0gJ3RleHQnICYmICF0aGlzLmlzRmllbGRUeXBlRHJvcGRvd24oZGF0YS5maWVsZFR5cGUpID8gZGF0YS5tYXRjaFR5cGUgOiB0cnVlO1xuICAgIGNvbnN0IHZhbGlkRHJvcGRvd25EYXRhUHJvdmlkZXIgPSB0aGlzLmlzRmllbGRUeXBlRHJvcGRvd24oZGF0YS5maWVsZFR5cGUpXG4gICAgICA/IGRhdGEuZHJvcGRvd25EYXRhUHJvdmlkZXJcbiAgICAgIDogdHJ1ZTtcbiAgICBjb25zdCBjb250YWluc0FsbFZhbHVlcyA9ICEhKFxuICAgICAgZGF0YS5rZXkgJiZcbiAgICAgIGRhdGEuZGF0YVR5cGUgJiZcbiAgICAgIHZhbGlkTWF0Y2hUeXBlICYmXG4gICAgICB2YWxpZERyb3Bkb3duRGF0YVByb3ZpZGVyICYmXG4gICAgICBkYXRhLnBhdGggJiZcbiAgICAgIGRhdGEuZmllbGRUeXBlXG4gICAgKTtcbiAgICBjb25zdCBrZXlJc1VuaXF1ZSA9XG4gICAgICAhdGhpcy5zZWFyY2hGaWVsZEFjdGlvblR5cGVJc0FkZCB8fFxuICAgICAgdGhpcy5jYWNoZWRTZWFyY2hGaWVsZHMuZmluZEluZGV4KGZpZWxkID0+IGZpZWxkLmtleSA9PT0gZGF0YS5rZXkpID09PSAtMTtcblxuICAgIHJldHVybiBjb250YWluc0FsbFZhbHVlcyAmJiBrZXlJc1VuaXF1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGaWVsZFR5cGVEcm9wZG93bihmaWVsZFR5cGU/OiBTZWFyY2hGaWVsZEZpZWxkVHlwZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmaWVsZFR5cGUgPT09ICdzaW5nbGUtc2VsZWN0LWRyb3Bkb3duJyB8fCBmaWVsZFR5cGUgPT09ICdtdWx0aS1zZWxlY3QtZHJvcGRvd24nO1xuICB9XG5cbiAgcHJpdmF0ZSBkcm9wZG93bkRhdGFQcm92aWRlclN1cHBvcnRzVXBkYXRlcyhkcm9wZG93bkRhdGFQcm92aWRlcj86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkcm9wZG93bkRhdGFQcm92aWRlciA9PT0gJ2Ryb3Bkb3duRGF0YWJhc2VEYXRhUHJvdmlkZXInO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuU2VsZWN0ZWRTZWFyY2hGaWVsZFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hGaWVsZCQuc3Vic2NyaWJlKHNlbGVjdGVkU2VhcmNoRmllbGQgPT4ge1xuICAgICAgICBpZiAoc2VsZWN0ZWRTZWFyY2hGaWVsZCkgdGhpcy5zaG93TW9kYWwoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb3Blbk1vZGFsU2hvd2luZ1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMubW9kYWxTaG93aW5nJC5zdWJzY3JpYmUobW9kYWxTaG93aW5nID0+IHtcbiAgICAgICAgaWYgKG1vZGFsU2hvd2luZykge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93RmllbGRzJC5uZXh0KHRydWUpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93RmllbGRzJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB9LCBDQVJCT05fQ09OU1RBTlRTLm1vZGFsQW5pbWF0aW9uTXMpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldERvd25sb2FkKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZywgc2VhcmNoRmllbGRzOiBBcnJheTxTZWFyY2hGaWVsZD4pOiB2b2lkIHtcbiAgICB0aGlzLmRvd25sb2FkTmFtZSQubmV4dChgJHtkb2N1bWVudERlZmluaXRpb25OYW1lfS5qc29uYCk7XG4gICAgdGhpcy5kb3dubG9hZFVybCQubmV4dChcbiAgICAgIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoXG4gICAgICAgICdkYXRhOnRleHQvanNvbjtjaGFyc2V0PVVURi04LCcgK1xuICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh7c2VhcmNoRmllbGRzfSwgbnVsbCwgMikpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZUlucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0JC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVJbnB1dCQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsU2hvd2luZyQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgaGlkZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxTaG93aW5nJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaFNlYXJjaEZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLnJlZnJlc2hTZWFyY2hGaWVsZHMkLm5leHQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIHNob3dEZWxldGVNb2RhbChzZWFyY2hGaWVsZDogU2VhcmNoRmllbGQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkRGVsZXRlU2VhcmNoRmllbGQkLm5leHQoc2VhcmNoRmllbGQpO1xuICAgIHRoaXMuc2hvd0RlbGV0ZU1vZGFsJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93RWRpdE1vZGFsKHNlYXJjaEZpZWxkOiBTZWFyY2hGaWVsZCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoRmllbGRDbGlja2VkKHNlYXJjaEZpZWxkLCBmYWxzZSk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIntcbiAgICBzZWFyY2hGaWVsZHM6IHRyYW5zbGF0ZWRTZWFyY2hGaWVsZHMkIHwgYXN5bmMsXG4gICAgZG93bmxvYWRVcmw6IGRvd25sb2FkVXJsJCB8IGFzeW5jLFxuICAgIGRvd25sb2FkTmFtZTogZG93bmxvYWROYW1lJCB8IGFzeW5jLFxuICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkIHwgYXN5bmMsXG4gICAgdmFsaWQ6IHZhbGlkJCB8IGFzeW5jLFxuICAgIGRpc2FibGVJbnB1dDogZGlzYWJsZUlucHV0JCB8IGFzeW5jXG4gIH0gYXMgb2JzXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3Q7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kYWw7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48dmFsdGltby1jb25maXJtYXRpb24tbW9kYWxcbiAgY29uZmlybUJ1dHRvblRleHRUcmFuc2xhdGlvbktleT1cImludGVyZmFjZS5kZWxldGVcIlxuICBjb25maXJtQnV0dG9uVHlwZT1cImRhbmdlclwiXG4gIGNvbnRlbnRUcmFuc2xhdGlvbktleT1cImRvc3NpZXJNYW5hZ2VtZW50LnN0YXR1c2VzLmRlbGV0ZVRleHRcIlxuICBbb3V0cHV0T25Db25maXJtXT1cInNlbGVjdGVkRGVsZXRlU2VhcmNoRmllbGQkIHwgYXN5bmNcIlxuICBbc2hvd01vZGFsU3ViamVjdCRdPVwic2hvd0RlbGV0ZU1vZGFsJFwiXG4gIHRpdGxlVHJhbnNsYXRpb25LZXk9XCJpbnRlcmZhY2UuZGVsZXRlXCJcbiAgKGNvbmZpcm1FdmVudCk9XCJvbkRlbGV0ZVNlbGVjdGVkU2VhcmNoRmllbGRDb25maXJtKCRldmVudClcIlxuPjwvdmFsdGltby1jb25maXJtYXRpb24tbW9kYWw+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9ucyBsZXQtb2JzPVwib2JzXCI+XG4gIDxidXR0b25cbiAgICBjZHNCdXR0b249XCJnaG9zdFwiXG4gICAgaWNvbk9ubHk9XCJ0cnVlXCJcbiAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAhb2JzLmRvd25sb2FkVXJsIHx8ICFvYnMuZG93bmxvYWROYW1lIHx8IG9icy5zZWFyY2hGaWVsZHM/Lmxlbmd0aCA8PSAwIHx8IG9icy5kaXNhYmxlSW5wdXRcbiAgICBcIlxuICAgIFtkb3dubG9hZF09XCJvYnMuZG93bmxvYWROYW1lXCJcbiAgICBbaHJlZl09XCJvYnMuZG93bmxvYWRVcmxcIlxuICA+XG4gICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cImRvd25sb2FkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1NlYXJjaEZpZWxkcyB8fCBvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAoY2xpY2spPVwic2VhcmNoRmllbGRDbGlja2VkKCRldmVudCwgdHJ1ZSlcIlxuICA+XG4gICAgPHN2ZyBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuXG4gICAge3sgJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmFkZFJvdycgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xpc3QgbGV0LW9icz1cIm9ic1wiPlxuICA8dmFsdGltby1jYXJib24tbGlzdFxuICAgIFthY3Rpb25JdGVtc109XCJhY3Rpb25JdGVtc1wiXG4gICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgIFtoZWFkZXJdPVwiZmFsc2VcIlxuICAgIFtpdGVtc109XCJvYnMuc2VhcmNoRmllbGRzXCJcbiAgICBbbG9hZGluZ109XCIhb2JzLnNlYXJjaEZpZWxkc1wiXG4gICAgW21vdmluZ1Jvd3NFbmFibGVkXT1cInRydWVcIlxuICAgIChyb3dDbGlja2VkKT1cInNlYXJjaEZpZWxkQ2xpY2tlZCgkZXZlbnQsIGZhbHNlKVwiXG4gICAgKG1vdmVSb3cpPVwib25Nb3ZlUm93Q2xpY2soJGV2ZW50LCBvYnMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgY2FyYm9uVG9vbGJhckNvbnRlbnRcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uczsgY29udGV4dDoge29iczogb2JzfVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuXG4gICAgPHZhbHRpbW8tbm8tcmVzdWx0c1xuICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5ub1NlYXJjaGZpZWxkc1RpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3Lm5vU2VhcmNoZmllbGRzRGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG4gIDwvdmFsdGltby1jYXJib24tbGlzdD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9kYWwgbGV0LW9icz1cIm9ic1wiPlxuICA8Y2RzLW1vZGFsXG4gICAgdmFsdGltb0Nkc01vZGFsXG4gICAgW3RpdGxlXT1cIlxuICAgICAgc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGRcbiAgICAgICAgPyAoJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmFkZFJvdycgfCB0cmFuc2xhdGUpXG4gICAgICAgIDogKCdzZWFyY2hGaWVsZHNPdmVydmlldy5lZGl0JyB8IHRyYW5zbGF0ZSlcbiAgICBcIlxuICAgIFtvcGVuXT1cIm1vZGFsU2hvd2luZyQgfCBhc3luY1wiXG4gICAgW3Nob3dGb290ZXJdPVwidHJ1ZVwiXG4gID5cbiAgICA8Y2RzLW1vZGFsLWhlYWRlciBbc2hvd0Nsb3NlQnV0dG9uXT1cInRydWVcIiAoY2xvc2VTZWxlY3QpPVwib25Nb2RhbENsb3NlKClcIj5cbiAgICAgIDxoMyBjZHNNb2RhbEhlYWRlckhlYWRpbmc+XG4gICAgICAgIHt7XG4gICAgICAgICAgKHNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkID8gJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmFkZFJvdycgOiAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuZWRpdCcpXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICB9fVxuICAgICAgPC9oMz5cbiAgICA8L2Nkcy1tb2RhbC1oZWFkZXI+XG5cbiAgICA8c2VjdGlvbiBjZHNNb2RhbENvbnRlbnQ+XG4gICAgICA8di1mb3JtXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJmb3JtVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgKHNob3dGaWVsZHMkIHwgYXN5bmMpICYmIHtcbiAgICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWxlY3RlZFNlYXJjaEZpZWxkJCB8IGFzeW5jXG4gICAgICAgICAgfSBhcyBzZWFyY2hPYnNcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHYtaW5wdXRcbiAgICAgICAgICBuYW1lPVwidGl0bGVcIlxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtkZWZhdWx0VmFsdWVdPVwic2VhcmNoT2JzLnNlYXJjaEZpZWxkPy50aXRsZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlSW5wdXRcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJmYWxzZVwiXG4gICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy50aXRsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICA+XG4gICAgICAgIDwvdi1pbnB1dD5cblxuICAgICAgICA8di1pbnB1dFxuICAgICAgICAgIG5hbWU9XCJrZXlcIlxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcua2V5JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbZGVmYXVsdFZhbHVlXT1cInNlYXJjaE9icy5zZWFyY2hGaWVsZD8ua2V5XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dCB8fCAhc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGRcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICBbd2lkdGhQeF09XCIyMDBcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLmtleScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICA+XG4gICAgICAgIDwvdi1pbnB1dD5cblxuICAgICAgICA8di1pbnB1dFxuICAgICAgICAgIG5hbWU9XCJwYXRoXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnBhdGgnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtkZWZhdWx0VmFsdWVdPVwic2VhcmNoT2JzLnNlYXJjaEZpZWxkPy5wYXRoXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMucGF0aCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICA+XG4gICAgICAgIDwvdi1pbnB1dD5cblxuICAgICAgICA8di1zZWxlY3RcbiAgICAgICAgICAqbmdJZj1cImRhdGFUeXBlSXRlbXMkIHwgYXN5bmMgYXMgZGF0YVR5cGVJdGVtc1wiXG4gICAgICAgICAgW2FwcGVuZElubGluZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZHJvcFVwXT1cImZhbHNlXCJcbiAgICAgICAgICBbaXRlbXNdPVwiZGF0YVR5cGVJdGVtc1wiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5kYXRhVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICBuYW1lPVwiZGF0YVR5cGVcIlxuICAgICAgICAgIFtkZWZhdWx0U2VsZWN0aW9uSWRdPVwic2VhcmNoT2JzLnNlYXJjaEZpZWxkPy5kYXRhVHlwZVwiXG4gICAgICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLmRhdGFUeXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2NhcmJvblRoZW1lXT1cIkNBUkJPTl9USEVNRVwiXG4gICAgICAgID48L3Ytc2VsZWN0PlxuXG4gICAgICAgIDx2LXNlbGVjdFxuICAgICAgICAgICpuZ0lmPVwiKHNob3dNYXRjaFR5cGVzJCB8IGFzeW5jKSAmJiAobWF0Y2hUeXBlSXRlbXMkIHwgYXN5bmMpIGFzIG1hdGNoVHlwZUl0ZW1zXCJcbiAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgIFtkcm9wVXBdPVwiZmFsc2VcIlxuICAgICAgICAgIFtpdGVtc109XCJtYXRjaFR5cGVJdGVtc1wiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5tYXRjaFR5cGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgbmFtZT1cIm1hdGNoVHlwZVwiXG4gICAgICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJzZWFyY2hPYnMuc2VhcmNoRmllbGQ/Lm1hdGNoVHlwZVwiXG4gICAgICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLm1hdGNoVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICA+PC92LXNlbGVjdD5cblxuICAgICAgICA8di1zZWxlY3RcbiAgICAgICAgICAqbmdJZj1cImZpZWxkVHlwZUl0ZW1zJCB8IGFzeW5jIGFzIGZpZWxkVHlwZUl0ZW1zXCJcbiAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgIFtkcm9wVXBdPVwiZmFsc2VcIlxuICAgICAgICAgIFtpdGVtc109XCJmaWVsZFR5cGVJdGVtc1wiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5maWVsZFR5cGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgbmFtZT1cImZpZWxkVHlwZVwiXG4gICAgICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJzZWFyY2hPYnMuc2VhcmNoRmllbGQ/LmZpZWxkVHlwZVwiXG4gICAgICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLmZpZWxkVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICA+PC92LXNlbGVjdD5cblxuICAgICAgICA8di1zZWxlY3RcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKGZpZWxkVHlwZUlzRHJvcGRvd24kIHwgYXN5bmMpICYmXG4gICAgICAgICAgICAoZHJvcGRvd25EYXRhUHJvdmlkZXJOYW1lcyQgfCBhc3luYykgYXMgZHJvcGRvd25EYXRhUHJvdmlkZXJOYW1lc1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2FwcGVuZElubGluZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZHJvcFVwXT1cImZhbHNlXCJcbiAgICAgICAgICBbaXRlbXNdPVwiZHJvcGRvd25EYXRhUHJvdmlkZXJOYW1lc1wiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5kcm9wZG93bkRhdGFQcm92aWRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJmYWxzZVwiXG4gICAgICAgICAgbmFtZT1cImRyb3Bkb3duRGF0YVByb3ZpZGVyXCJcbiAgICAgICAgICBbZGVmYXVsdFNlbGVjdGlvbklkXT1cInNlYXJjaE9icy5zZWFyY2hGaWVsZD8uZHJvcGRvd25EYXRhUHJvdmlkZXJcIlxuICAgICAgICAgIFt3aWR0aEluUHhdPVwiMjAwXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5kcm9wZG93bkRhdGFQcm92aWRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICA+PC92LXNlbGVjdD5cblxuICAgICAgICA8dmFsdGltby1jYXJib24tbXVsdGktaW5wdXRcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKHNob3dJbnB1dERyb3Bkb3duVGFibGUkIHwgYXN5bmMpICYmXG4gICAgICAgICAgICAoaW5pdGlhbERyb3Bkb3duVmFsdWVzJCB8IGFzeW5jKSBhcyBpbml0aWFsRHJvcGRvd25WYWx1ZXNcbiAgICAgICAgICBcIlxuICAgICAgICAgIG5hbWU9XCJkcm9wZG93blZhbHVlc1wiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5kcm9wZG93bkxpc3RWYWx1ZXMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICB0eXBlPVwia2V5VmFsdWVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICBbZGVmYXVsdFZhbHVlc109XCJpbml0aWFsRHJvcGRvd25WYWx1ZXNcIlxuICAgICAgICAgIFttYXJnaW5dPVwidHJ1ZVwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cImZhbHNlXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5kcm9wZG93bkxpc3RWYWx1ZXMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZHJvcGRvd25EYXRhbGlzdENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICBbY2FyYm9uVGhlbWVdPVwiQ0FSQk9OX1RIRU1FXCJcbiAgICAgICAgPlxuICAgICAgICA8L3ZhbHRpbW8tY2FyYm9uLW11bHRpLWlucHV0PlxuXG4gICAgICAgIDx2LXRhYmxlXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIChzaG93UmVhZG9ubHlEcm9wZG93blRhYmxlJCB8IGFzeW5jKSAmJlxuICAgICAgICAgICAgKGluaXRpYWxEcm9wZG93blZhbHVlcyQgfCBhc3luYykgYXMgaW5pdGlhbERyb3Bkb3duVmFsdWVzXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbaXRlbXNdPVwiaW5pdGlhbERyb3Bkb3duVmFsdWVzXCJcbiAgICAgICAgICBbY29sdW1uc109XCJkcm9wZG93bkNvbHVtbnMkIHwgYXN5bmNcIlxuICAgICAgICAgIFtzaG93RWRpdEJ1dHRvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgIFtpdGVtc1RyYW5zbGF0aW9uS2V5XT1cIidzZWFyY2hGaWVsZHNPdmVydmlldydcIlxuICAgICAgICAgIFtzaG93UGFnaW5hdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgW21vYmlsZUJyZWFrcG9pbnRQeF09XCIyMDBcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICA+PC92LXRhYmxlPlxuICAgICAgPC92LWZvcm0+XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPGNkcy1tb2RhbC1mb290ZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc0Zvb3Rlck1vZGFsOyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9jZHMtbW9kYWwtZm9vdGVyPlxuICA8L2Nkcy1tb2RhbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uc0Zvb3Rlck1vZGFsIGxldC1vYnM9XCJvYnNcIj5cbiAgPGJ1dHRvbiBjZHNCdXR0b249XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwib25Nb2RhbENsb3NlKClcIiBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiPlxuICAgIHt7ICdpbnRlcmZhY2UuY2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgY2RzQnV0dG9uPVwicHJpbWFyeVwiXG4gICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlSW5wdXQgfHwgIW9icy52YWxpZFwiXG4gICAgKGNsaWNrKT1cInNhdmVTZWFyY2hGaWVsZChvYnMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcIlxuICA+XG4gICAge3sgJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnN1Ym1pdCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
|