@tsi-developpement/tsi-shared-ui 1.8.19 → 1.8.21
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/end-points/endpoints.mjs +1 -1
- package/esm2022/lib/end-points/shared-endpoint.mjs +1 -2
- package/esm2022/lib/models/common/event-schema.mjs +1 -1
- package/esm2022/lib/models/entity-info/entity-info.mjs +1 -1
- package/esm2022/lib/models/index.mjs +1 -2
- package/esm2022/lib/services/currentUser/currentUser.service.mjs +1 -1
- package/esm2022/lib/services/notification/tsi-confirmation.service.mjs +1 -1
- package/esm2022/lib/services/status/entityStatus.service.mjs +1 -1
- package/esm2022/lib/tsi-base/components/tsi-form-base/tsi-form-base.component.mjs +11 -6
- package/esm2022/lib/tsi-components/create-or-edit-entity-informations/create-or-edit-entity-informations.component.mjs +3 -3
- package/esm2022/lib/tsi-components/input-components/tsi-checkbox/tsi-checkbox.component.mjs +3 -3
- package/esm2022/lib/tsi-components/input-components/tsi-date-picker/tsi-date-picker.component.mjs +3 -3
- package/esm2022/lib/tsi-components/manage-import-export/manage-import-export.component.mjs +1 -1
- package/esm2022/lib/tsi-components/manage-reporting/manage-reporting.component.mjs +1 -1
- package/esm2022/lib/tsi-components/modal-component/modal.component.mjs +1 -1
- package/esm2022/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.mjs +43 -16
- package/esm2022/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.mjs +3 -5
- package/esm2022/lib/tsi-components/tsi-action-erp-list/tsi-action-erp-list.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-calender/tsi-calender.component.mjs +9 -2
- package/esm2022/lib/tsi-components/tsi-dynamic-form/dynamic-form-list/dynamic-form-list.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-form/tsi-form.component.mjs +25 -15
- package/esm2022/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.mjs +14 -14
- package/esm2022/lib/tsi-components/tsi-notes-grid/tsi-notes-grid.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-popup-text-viewer/tsi-popup-text-viewer.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-upload-grid/tsi-upload-grid.component.mjs +1 -1
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +158 -112
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
- package/lib/consts/app-providers.d.ts +1 -1
- package/lib/models/common/event-schema.d.ts +1 -1
- package/lib/models/entity-info/entity-info.d.ts +2 -0
- package/lib/models/index.d.ts +0 -1
- package/lib/tsi-base/components/tsi-form-base/tsi-form-base.component.d.ts +4 -2
- package/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.d.ts +12 -6
- package/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.d.ts +2 -3
- package/lib/tsi-components/tsi-calender/tsi-calender.component.d.ts +1 -1
- package/lib/tsi-components/tsi-form/tsi-form.component.d.ts +9 -4
- package/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.d.ts +10 -9
- package/package.json +1 -1
|
@@ -3,16 +3,16 @@ import { firstValueFrom } from 'rxjs';
|
|
|
3
3
|
import { formType } from '../../consts/form-type';
|
|
4
4
|
import { AdministrationEndpoints } from '../../end-points/endpoints';
|
|
5
5
|
import { Modes } from '../../enums';
|
|
6
|
+
import { isNullOrEmpty } from '../../functions';
|
|
6
7
|
import { Fichier, updateEntityWorkflowInformation, workflowInstanceInformationResponse } from '../../models';
|
|
7
8
|
import { ColonnePersonnaliseeData } from '../../models/dynamic-form/colonne-personnalisee';
|
|
8
9
|
import { LocalizePipe } from '../../pipes/localize.pipe';
|
|
10
|
+
import { EntityConfigurationService } from '../../services/configuration/entity-configuration.service';
|
|
9
11
|
import { DynamicFormService } from '../../services/dynamic-form/dynamic-form.service';
|
|
10
|
-
import { TsiModalFooterComponent } from '../tsi-modal-footer/tsi-modal-footer.component';
|
|
11
|
-
import { TsiModalHeaderComponent } from '../tsi-modal-header/tsi-modal-header.component';
|
|
12
12
|
import { FormulaireService } from '../../services/dynamic-form/formulaire.service';
|
|
13
|
-
import { isNullOrEmpty } from '../../functions';
|
|
14
|
-
import { EntityConfigurationService } from '../../services/configuration/entity-configuration.service';
|
|
15
13
|
import { RequestTrackerService } from '../../services/request-management/request-tracker.service';
|
|
14
|
+
import { TsiModalFooterComponent } from '../tsi-modal-footer/tsi-modal-footer.component';
|
|
15
|
+
import { TsiModalHeaderComponent } from '../tsi-modal-header/tsi-modal-header.component';
|
|
16
16
|
import * as i0 from "@angular/core";
|
|
17
17
|
import * as i1 from "../../services/status/entityStatus.service";
|
|
18
18
|
import * as i2 from "../../services/status/status-color.service";
|
|
@@ -48,6 +48,13 @@ export class TsiFormComponent {
|
|
|
48
48
|
this.isDescriminatorValueSet = true;
|
|
49
49
|
this.calculateFormsInfos();
|
|
50
50
|
}
|
|
51
|
+
applyAllowedStatusFilter() {
|
|
52
|
+
let statusesFetched = [...this._allEntityStatuses];
|
|
53
|
+
if (this._allowedStatus?.length) {
|
|
54
|
+
statusesFetched = statusesFetched.filter(x => x.key != null && this._allowedStatus.includes(x.key));
|
|
55
|
+
}
|
|
56
|
+
this.entityStatusList = statusesFetched;
|
|
57
|
+
}
|
|
51
58
|
get formEndpoint() {
|
|
52
59
|
return this._formEndpoint;
|
|
53
60
|
}
|
|
@@ -95,6 +102,13 @@ export class TsiFormComponent {
|
|
|
95
102
|
this._status = value;
|
|
96
103
|
this.onStatusChange.emit(this._status);
|
|
97
104
|
}
|
|
105
|
+
set allowedStatus(value) {
|
|
106
|
+
this._allowedStatus = value;
|
|
107
|
+
this.applyAllowedStatusFilter();
|
|
108
|
+
}
|
|
109
|
+
get allowedStatus() {
|
|
110
|
+
return this._allowedStatus;
|
|
111
|
+
}
|
|
98
112
|
set mode(value) {
|
|
99
113
|
this._mode = value;
|
|
100
114
|
this.showActionButton = this.mode != Modes.create;
|
|
@@ -147,6 +161,7 @@ export class TsiFormComponent {
|
|
|
147
161
|
this._descriminatorValue = undefined;
|
|
148
162
|
this.entityStatusList = [];
|
|
149
163
|
this.statusColumnName = '';
|
|
164
|
+
this._allEntityStatuses = [];
|
|
150
165
|
this.isDragOver = false;
|
|
151
166
|
this.messagePosition = { x: 0, y: 0 };
|
|
152
167
|
this.dragEnterCount = 0;
|
|
@@ -235,8 +250,6 @@ export class TsiFormComponent {
|
|
|
235
250
|
get workflowInformation() {
|
|
236
251
|
return this._workflowInformation;
|
|
237
252
|
}
|
|
238
|
-
// #endregion
|
|
239
|
-
//#region handle Lifecycle Hooks
|
|
240
253
|
ngOnInit() {
|
|
241
254
|
this.cudComponent = this.config?.data?.cudComponent;
|
|
242
255
|
this.configData = this.config;
|
|
@@ -324,8 +337,6 @@ export class TsiFormComponent {
|
|
|
324
337
|
}
|
|
325
338
|
this.formRefChange.emit(this.formRef);
|
|
326
339
|
}
|
|
327
|
-
//#endregion
|
|
328
|
-
//#region handle events
|
|
329
340
|
handleFormSubmit(event) {
|
|
330
341
|
if (this.hasActiveRequests)
|
|
331
342
|
return;
|
|
@@ -337,7 +348,6 @@ export class TsiFormComponent {
|
|
|
337
348
|
this.onSubmit.emit(event);
|
|
338
349
|
}
|
|
339
350
|
}
|
|
340
|
-
//#endregion
|
|
341
351
|
syncDynamicColumnDataToDynamicFormService() {
|
|
342
352
|
const existingUids = new Set(this.dynamicFormService.colonnesPersonnaliseeData.map(x => x.colonnePersonnaliseeUid));
|
|
343
353
|
this.colonnesPersonnaliseeGrouped.forEach(cpg => {
|
|
@@ -354,7 +364,6 @@ export class TsiFormComponent {
|
|
|
354
364
|
});
|
|
355
365
|
console.log("this.dynamicFormService.colonnesPersonnaliseeData => ", this.dynamicFormService.colonnesPersonnaliseeData);
|
|
356
366
|
}
|
|
357
|
-
// #region workflow
|
|
358
367
|
confirmUpdateWorkflowEtat(event) {
|
|
359
368
|
console.log(event);
|
|
360
369
|
if (event) {
|
|
@@ -401,7 +410,6 @@ export class TsiFormComponent {
|
|
|
401
410
|
},
|
|
402
411
|
});
|
|
403
412
|
}
|
|
404
|
-
//#region Entity status
|
|
405
413
|
getEntityStatus() {
|
|
406
414
|
this.entityStatusService.getEntityStatus(this.businessClass).subscribe({
|
|
407
415
|
next: (data) => {
|
|
@@ -409,15 +417,17 @@ export class TsiFormComponent {
|
|
|
409
417
|
return;
|
|
410
418
|
this.statusColumnName = data.statusColumnName ?? "";
|
|
411
419
|
if (data.entityStatus && Array.isArray(data.entityStatus)) {
|
|
412
|
-
this.
|
|
420
|
+
this._allEntityStatuses = data.entityStatus;
|
|
421
|
+
this.applyAllowedStatusFilter();
|
|
413
422
|
}
|
|
414
|
-
if (this.mode === Modes.create &&
|
|
423
|
+
if (this.mode === Modes.create &&
|
|
424
|
+
isNullOrEmpty(this.status) &&
|
|
425
|
+
!isNullOrEmpty(data.defaultStatus)) {
|
|
415
426
|
this.status = data.defaultStatus;
|
|
416
427
|
}
|
|
417
428
|
},
|
|
418
429
|
});
|
|
419
430
|
}
|
|
420
|
-
//#endregion
|
|
421
431
|
onDragOver(event) {
|
|
422
432
|
event.preventDefault();
|
|
423
433
|
event.stopPropagation();
|
|
@@ -640,4 +650,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
640
650
|
type: ViewChildren,
|
|
641
651
|
args: ['dynamicFooterContainer', { read: ViewContainerRef }]
|
|
642
652
|
}] } });
|
|
643
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL3RzaS1mb3JtL3RzaS1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktZm9ybS90c2ktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBSUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGNBQWMsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEMsT0FBTyxFQUE0QixPQUFPLEVBQW1DLCtCQUErQixFQUFFLG1DQUFtQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hLLE9BQU8sRUFBRSx3QkFBd0IsRUFBdUMsTUFBTSxpREFBaUQsQ0FBQztBQUVoSSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFVdEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFsRyxNQUFNLE9BQU8sZ0JBQWdCO0lBeUIzQixJQUFJLGtCQUFrQixLQUF5QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDakYsSUFBSSxrQkFBa0IsQ0FBQyxLQUF5QjtRQUM5QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7UUFDcEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQVdELElBQ0ksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxZQUFZLENBQUMsS0FBeUI7UUFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxLQUF5QjtRQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFRRCwyQkFBMkI7SUFDM0IsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCwyQkFBMkI7SUFDM0IsSUFBSSxhQUFhLENBQUMsS0FBeUI7UUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUUvQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsSUFBSSxFQUFFO1FBQ0osT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsSUFBSSxFQUFFLENBQUMsS0FBeUI7UUFDOUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDakIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixJQUFJLE1BQU0sQ0FBQyxLQUF5QjtRQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLEtBQXlCO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDbEQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUE7SUFDbkMsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFDSSwwQkFBMEI7UUFDNUIsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksMEJBQTBCLENBQUMsS0FBYztRQUMzQyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO0lBQzNDLENBQUM7SUEwQkQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQTtJQUN6QyxDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsS0FBeUI7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQU1ELElBQUksYUFBYSxLQUFjLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsSUFBSSxhQUFhLENBQUMsS0FBYztRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBZUQsY0FBYztJQUNkLFlBQ1UsbUJBQXdDLEVBQ3hDLGtCQUFzQyxFQUN2QyxlQUErQixFQUM5Qiw0QkFBeUQsRUFDekQsa0JBQTBDLEVBQzFDLHVCQUErQyxFQUMvQyxJQUF1QixFQUN2QixvQkFBeUMsRUFDMUMsNEJBQTBELEVBQzFELDRCQUF5RCxFQUN4RCxpQkFBb0MsRUFDckMsR0FBc0IsRUFDdEIsTUFBNEI7UUFaM0Isd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3ZDLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUM5QixpQ0FBNEIsR0FBNUIsNEJBQTRCLENBQTZCO1FBQ3pELHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBd0I7UUFDMUMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF3QjtRQUMvQyxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUN2Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQzFDLGlDQUE0QixHQUE1Qiw0QkFBNEIsQ0FBOEI7UUFDMUQsaUNBQTRCLEdBQTVCLDRCQUE0QixDQUE2QjtRQUN4RCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3JDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQXNCO1FBcE05QixhQUFRLEdBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBRXZDLHdCQUF3QjtRQUNoQixnQ0FBMkIsR0FBWSxLQUFLLENBQUM7UUFVNUMsaUJBQVksR0FBVyxLQUFLLENBQUM7UUFLN0IsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixjQUFTLEdBQVksS0FBSyxDQUFDO1FBRTFCLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRW5DLHdCQUFtQixHQUF1QixTQUFTLENBQUM7UUFRNUQscUJBQWdCLEdBQW1DLEVBQUUsQ0FBQztRQUN0RCxxQkFBZ0IsR0FBVyxFQUFFLENBQUE7UUFHN0IsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixvQkFBZSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDekIsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUEwRmxCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRXZDLFlBQVk7UUFFWixpQkFBaUI7UUFDUCxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdEQsc0NBQWlDLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDL0Usa0JBQWEsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNqRSxtQkFBYyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBd0I1RSxpQ0FBNEIsR0FBMEMsRUFBRSxDQUFDO1FBQ3pFLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLHlCQUFvQixHQUFVLEVBQUUsQ0FBQztRQUN6QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQU94Qyw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFDekMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBQ3BDLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUN4Qyx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDckMsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBR25DLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hELHNCQUFpQixHQUF1QixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsRSwrQkFBMEIsR0FBZ0MsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDN0YsMEJBQXFCLEdBQTJCLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzlFLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQXVDbEMsWUFBWTtRQUVaLG1CQUFtQjtRQUNYLHlCQUFvQixHQUF3QyxJQUFJLG1DQUFtQyxFQUFFLENBQUM7UUF5QzlHLGtDQUE2QixHQUMzQix1QkFBdUIsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1FBQzFELHlDQUFvQyxHQUFHLEVBQUUsQ0FBQztRQUUxQyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLHVCQUFrQixHQUFHLDZCQUE2QixDQUFDO1FBaUNuRCxhQUFRLEdBQUcsUUFBUSxDQUFDO0lBekdoQixDQUFDO0lBRUwscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFdEIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsb0NBQW9DLEVBQUUsQ0FBQztnQkFDckcsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQ0FBb0MsR0FBRyxLQUFLLENBQUE7WUFDaEUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQzFDLENBQUM7UUFFRCxJQUFHLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyRCxDQUFDO0lBQ0gsQ0FBQztJQUtELElBQUksbUJBQW1CLENBQUMsS0FBMEM7UUFDaEUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQTtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3pCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUN4RSxJQUFJLENBQUMsb0NBQW9DLEdBQUcsdUJBQXVCLENBQUMsb0NBQW9DLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ2pKLENBQUM7SUFDSCxDQUFDO0lBRUQsbUhBQW1IO0lBQ25ILHNDQUFzQztJQUN0QyxNQUFNO0lBQ04scUNBQXFDO0lBQ3JDLGNBQWM7SUFDZCxNQUFNO0lBQ04sVUFBVTtJQUNWLHdHQUF3RztJQUN4Ryx3Q0FBd0M7SUFDeEMsb0NBQW9DO0lBQ3BDLDhEQUE4RDtJQUM5RCxvRUFBb0U7SUFDcEUsMkRBQTJEO0lBQzNELHdJQUF3STtJQUN4SSx3RUFBd0U7SUFDeEUsc0NBQXNDO0lBQ3RDLGlHQUFpRztJQUNqRyx1RUFBdUU7SUFDdkUsZ0NBQWdDO0lBQ2hDLG1GQUFtRjtJQUNuRiw2SEFBNkg7SUFDN0gsVUFBVTtJQUNWLFFBQVE7SUFDUixNQUFNO0lBQ04sb0JBQW9CO0lBQ3BCLDJCQUEyQjtJQUMzQixNQUFNO0lBQ04sSUFBSTtJQUVKLElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFBO0lBQ2xDLENBQUM7SUFZRCxhQUFhO0lBRWIsZ0NBQWdDO0lBQ2hDLFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQztRQUNwRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7UUFDN0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixJQUFJLElBQUksbUNBQW1DLEVBQUUsQ0FBQTtRQUM5RyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO1FBQ2hFLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUN4RSxJQUFJLENBQUMsb0NBQW9DLEdBQUcsdUJBQXVCLENBQUMsb0NBQW9DLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ2pKLENBQUM7UUFDRCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCO2FBQ2hELG1CQUFtQixDQUFDLFNBQVMsQ0FDNUIsS0FBSyxFQUFFLElBQVMsRUFBRSxFQUFFO1lBQ2xCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLHlCQUF5QixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHlCQUF5QjtxQkFDOUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQTtnQkFDbkMsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUE7WUFDdEksQ0FBQztRQUNILENBQUMsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUdPLHVCQUF1QjtRQUM3QixJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNsRCxDQUFDO2FBQ0ksSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzNELENBQUM7SUFDSCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsYUFBcUIsRUFBRSxFQUFXO1FBQ2hFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMzRixJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDWixHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNoQixHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTt3QkFDeEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQzs0QkFDYixFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksd0JBQXdCLENBQ3BDLFNBQVMsRUFDVCxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQ2YsU0FBUyxFQUFFLFNBQVMsRUFDcEIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsU0FBUyxFQUFFLFNBQVMsQ0FDckIsQ0FBQzt3QkFDSixDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO2dCQUVMLENBQUMsQ0FBQyxDQUFBO2dCQUNGLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxHQUFHLENBQUM7Z0JBRXhDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7Z0JBQzVCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUVSLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixPQUFPLENBQUMsR0FBRyxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBVTtRQUN6QixnREFBZ0Q7UUFDaEQsdURBQXVEO1FBRXZELHFCQUFxQjtRQUNyQixnREFBZ0Q7UUFDaEQsNEVBQTRFO1FBRTVFLDJFQUEyRTtRQUMzRSw4Q0FBOEM7UUFDOUMsbURBQW1EO1FBQ25ELDBEQUEwRDtRQUMxRCxNQUFNO0lBQ1IsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzFELFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQixNQUFNLE9BQU8sR0FBMEMsU0FBUyxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBRTFHLE9BQU8sQ0FBQyxRQUFRLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGVBQWdCLENBQUMscUJBQXFCLENBQUM7WUFDckYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWdCLENBQUMsVUFBVSxDQUFDO1lBRS9ELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDMUQsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xCLE1BQU0sT0FBTyxHQUEwQyxTQUFTLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDMUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLGlCQUFpQixDQUFBO1lBQzVFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDckUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQztZQUVsRCxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUNyRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO1lBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsWUFBWTtJQUVaLHVCQUF1QjtJQUN2QixnQkFBZ0IsQ0FBQyxLQUFVO1FBQ3pCLElBQUcsSUFBSSxDQUFDLGlCQUFpQjtZQUFFLE9BQU87UUFFbEMsSUFBSSxJQUFJLENBQUMsNEJBQTRCLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUMvRCxJQUFJLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3BELENBQUM7YUFDSSxDQUFDO1lBQ0osSUFBSSxDQUFDLHlDQUF5QyxFQUFFLENBQUE7WUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFDRCxZQUFZO0lBRVoseUNBQXlDO1FBQ3ZDLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQ3RGLENBQUM7UUFFRixJQUFJLENBQUMsNEJBQTRCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzlDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDYixFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksd0JBQXdCLENBQ3BDLFNBQVMsRUFDVCxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQ2YsU0FBUyxFQUFFLFNBQVMsRUFDcEIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsU0FBUyxFQUFFLFNBQVMsQ0FDckIsQ0FBQztvQkFDSixDQUFDO29CQUVELE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQXdCLENBQzFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLFNBQVMsRUFDMUIsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDLEVBQUUsRUFDOUIsRUFBRSxDQUFDLEdBQUcsRUFDTixFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFDckIsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQ2pCLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUNyQixFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFDcEIsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQ3BCLEVBQUUsQ0FBQyxXQUFXLENBQ2YsQ0FBQztvQkFFRixJQUFJLENBQUMsa0JBQWtCLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUVoRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLHVEQUF1RCxFQUNqRSxJQUFJLENBQUMsa0JBQWtCLENBQUMseUJBQXlCLENBQ2xELENBQUE7SUFFSCxDQUFDO0lBRUQsbUJBQW1CO0lBR25CLHlCQUF5QixDQUFDLEtBQVU7UUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNsQixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxzQ0FBc0MsRUFBRSxtQ0FBbUMsRUFDekcsQ0FBQyxNQUFlLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDWCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtvQkFDckIsSUFBSSxPQUFPLEdBQUcsSUFBSSwrQkFBK0IsRUFBRSxDQUFBO29CQUNuRCxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7b0JBQ3hDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQTtvQkFDNUIsT0FBTyxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztvQkFDbEMsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxDQUFDO29CQUN6RCxPQUFPLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUE7b0JBQzVELE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUE7b0JBQzNFLE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFlBQVksQ0FBQTtvQkFDN0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtvQkFDcEIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLCtCQUErQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FDbEY7d0JBQ0UsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7NEJBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTs0QkFFakIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUUsQ0FBQztnQ0FDNUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFBOzRCQUMzQixDQUFDOzRCQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO3dCQUN4QixDQUFDO3dCQUNELEtBQUssRUFBRSxDQUFDLEtBQXdCLEVBQUUsRUFBRTs0QkFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTs0QkFDbEIsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQTs0QkFDbkMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7NEJBQ2hELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO3dCQUN4QixDQUFDO3FCQUNGLENBQ0YsQ0FBQTtnQkFDSCxDQUFDO3FCQUNJLENBQUM7b0JBQ0osSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQTtnQkFDckMsQ0FBQztZQUNILENBQUMsQ0FDRixDQUFBO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFLTyxxQkFBcUI7UUFFM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHdDQUF3QyxDQUFDLElBQUksQ0FBQyxhQUFjLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDOUYsSUFBSSxFQUFFLENBQUMsSUFBNEIsRUFBRSxFQUFFO2dCQUNyQyxJQUFJLENBQUMsSUFBSTtvQkFBRSxPQUFPO2dCQUNsQixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1lBQ3hDLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsdUJBQXVCO0lBQ2YsZUFBZTtRQUNyQixJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDckUsSUFBSSxFQUFFLENBQUMsSUFBOEIsRUFBRSxFQUFFO2dCQUN2QyxJQUFJLENBQUMsSUFBSTtvQkFBRSxPQUFPO2dCQUVsQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztnQkFFcEQsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7b0JBQzFELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUM1QyxDQUFDO2dCQUVELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsTUFBTSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7b0JBQ25HLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDbkMsQ0FBQztZQUNILENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsWUFBWTtJQUVaLFVBQVUsQ0FBQyxLQUFnQjtRQUN6QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWdCO1FBQ3JCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUM7UUFDeEMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3RFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQVUsRUFBRSxhQUFxQjtRQUNsRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUE0QixFQUFFLEVBQUU7WUFDL0MsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFxQixDQUFDO1lBQ3BELElBQUksQ0FBQyxXQUFXO2dCQUFFLE9BQU87WUFFekIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTVELE1BQU0sYUFBYSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7WUFDcEMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM5QixhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN6QixhQUFhLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM1QyxhQUFhLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUMvQixhQUFhLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQztZQUN0QyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDN0MsYUFBYSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFBO1lBRXZDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDbkQsSUFBSSxFQUFFLEdBQUcsRUFBRTtvQkFDVCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDckIsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxRQUEyQixFQUFFLEVBQUU7b0JBQ3JDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDL0QsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBbUI7UUFDckMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxDQUFDLEdBQVM7UUFDWixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7WUFDOUMsSUFBSSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDdEIsQ0FBQztpQkFDSSxDQUFDO2dCQUNKLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELENBQUMsQ0FBQyxHQUFXO1FBQ1gsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUk7ZUFDcEIsSUFBSSxDQUFDLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNoQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGVBQWU7aUJBQ2pCLHlCQUF5QixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO2lCQUN4QyxTQUFTLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQzlCLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsUUFBMkIsRUFBRSxFQUFFO29CQUNyQyxnRUFBZ0U7b0JBQ2hFLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLEVBQUUsUUFBUSxDQUFDLENBQUE7Z0JBQ3hFLENBQUM7YUFDRixDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFnQjtRQUMxQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWlCO1FBQzNCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxlQUFlLEdBQUc7Z0JBQ3JCLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUM7Z0JBQ3BCLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUM7YUFDckIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWdCO1FBQzFCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsS0FBZ0I7UUFDekMsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQixDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDO1lBQ3BCLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUM7U0FDckIsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZTtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBRWhDLElBQUksQ0FBQztZQUNILElBQUksVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUVsRyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLElBQUksQ0FBQyxVQUFVLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDO2dCQUNqRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFaEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDO2FBQzNGLFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNkLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFBRSxPQUFPO2dCQUNoRSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUM1QixDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVPLDBCQUEwQixLQUFLLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUVsSSxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsc0JBQXNCO1lBQUUsT0FBTztRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QjtZQUFFLE9BQU87UUFFbkcsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztJQUNyQyxDQUFDO0lBRU8sMENBQTBDO1FBQ2hELElBQUksQ0FBQywrQkFBK0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsMEJBQTBCO1FBQ3hCLElBQUcsSUFBSSxDQUFDLGVBQWUsRUFBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUE7UUFDdkMsQ0FBQztJQUNILENBQUM7K0dBM3NCVSxnQkFBZ0I7bUdBQWhCLGdCQUFnQixnbEJBNEliLHVCQUF1QixrRkFFdkIsdUJBQXVCLCthQUVZLGdCQUFnQixnSEFHakIsZ0JBQWdCLDZCQ3pNbEUseWhRQXNLTzs7NEZEaEhNLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxVQUFVO29nQkFZRSxPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBQ08sWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUloQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFJRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNO2dCQW9CSCxZQUFZO3NCQURmLEtBQUs7Z0JBV0YsUUFBUTtzQkFEWCxLQUFLO2dCQXFFRiwwQkFBMEI7c0JBRDdCLEtBQUs7Z0JBU0csWUFBWTtzQkFBcEIsS0FBSztnQkFLSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGlDQUFpQztzQkFBMUMsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBR3VCLGtCQUFrQjtzQkFBL0MsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ1csZUFBZTtzQkFBckQsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBRUUsZUFBZTtzQkFBckQsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBR3JDLHdCQUF3QjtzQkFEdkIsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFJbkUsd0JBQXdCO3NCQUR2QixZQUFZO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRSZWYsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBpbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZm9ybVR5cGUgfSBmcm9tICcuLi8uLi9jb25zdHMvZm9ybS10eXBlJztcclxuaW1wb3J0IHsgQWRtaW5pc3RyYXRpb25FbmRwb2ludHMgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzL2VuZHBvaW50cyc7XHJcbmltcG9ydCB7IE1vZGVzIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBJTW9kYWxTaXplIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEVudGl0eVByb3BlcnRpZXNSZXNwb25zZSwgRmljaGllciwgS2V5VmFsdWVQYWlyLCBPcHRpb25hbEVuZHBvaW50cywgdXBkYXRlRW50aXR5V29ya2Zsb3dJbmZvcm1hdGlvbiwgd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb2xvbm5lUGVyc29ubmFsaXNlZURhdGEsIENvbG9ubmVQZXJzb25uYWxpc2VlR3JvdXBlZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2R5bmFtaWMtZm9ybS9jb2xvbm5lLXBlcnNvbm5hbGlzZWUnO1xyXG5pbXBvcnQgeyBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3N0YXR1cy9jb2xvci1zdGF0dXMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9sb2NhbGl6ZS5waXBlJztcclxuaW1wb3J0IHsgQ29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHluYW1pYy1mb3JtL2NvbG9ubmUtcGVyc29ubmFsaXNlZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHluYW1pY0Zvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmljaGllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWNoaWVyL2ZpY2hpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IExheW91dEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sYXlvdXQvbGF5b3V0LWhlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL2Vycm9yLXJlc3BvbnNlLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaUNvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vdHNpLWNvbmZpcm1hdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRpdHlTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdHVzL2VudGl0eVN0YXR1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RhdHVzQ29sb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdHVzL3N0YXR1cy1jb2xvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dvcmtmbG93L3dvcmtmbG93LWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFJlcG9ydGluZ0NvbXBvbmVudCB9IGZyb20gJy4uL3JlcG9ydGluZy9yZXBvcnRpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpTW9kYWxGb290ZXJDb21wb25lbnQgfSBmcm9tICcuLi90c2ktbW9kYWwtZm9vdGVyL3RzaS1tb2RhbC1mb290ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpTW9kYWxIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi90c2ktbW9kYWwtaGVhZGVyL3RzaS1tb2RhbC1oZWFkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybXVsYWlyZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9keW5hbWljLWZvcm0vZm9ybXVsYWlyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgaXNOdWxsT3JFbXB0eSB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlndXJhdGlvbi9lbnRpdHktY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVxdWVzdFRyYWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVxdWVzdC1tYW5hZ2VtZW50L3JlcXVlc3QtdHJhY2tlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybVN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0vZm9ybS1zdGF0ZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHNpLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHNpLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudENoZWNrZWQge1xyXG4gIHB1YmxpYyBsb2NhbGl6ZT8gPSBpbmplY3QoTG9jYWxpemVQaXBlKVxyXG5cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBmaWVsZHNcclxuICBwcml2YXRlIF9pc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gcHJvcGVydGllc1xyXG4gIEBWaWV3Q2hpbGQoJ2Zvcm1SZWYnKSBmb3JtUmVmPzogTmdGb3JtO1xyXG4gIEBWaWV3Q2hpbGQoXCJyZXBvcnRpbmdBcHBcIikgcmVwb3J0aW5nQXBwPzogUmVwb3J0aW5nQ29tcG9uZW50XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBpbnB1dHNcclxuICBASW5wdXQoKSBjbGFzcz86IHN0cmluZztcclxuICBASW5wdXQoKSBhdXRvY29tcGxldGU6IHN0cmluZyA9ICdvZmYnO1xyXG4gIC8vIEBJbnB1dCgpIGZvcm1OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLy8gQElucHV0KCkgZm9ybUVuZHBvaW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpIG9wdGlvbmFsRW5kcG9pbnRzPzogT3B0aW9uYWxFbmRwb2ludHM7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBtb2RhbFNpemU/OiBJTW9kYWxTaXplO1xyXG4gIEBPdXRwdXQoKSBvblNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfZGVzY3JpbWluYXRvclZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgZ2V0IGRlc2NyaW1pbmF0b3JWYWx1ZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fZGVzY3JpbWluYXRvclZhbHVlOyB9XHJcbiAgc2V0IGRlc2NyaW1pbmF0b3JWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9kZXNjcmltaW5hdG9yVmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuaXNEZXNjcmltaW5hdG9yVmFsdWVTZXQgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjdWxhdGVGb3Jtc0luZm9zKCk7XHJcbiAgfVxyXG5cclxuICBlbnRpdHlTdGF0dXNMaXN0OiBLZXlWYWx1ZVBhaXI8c3RyaW5nLCBzdHJpbmc+W10gPSBbXTtcclxuICBzdGF0dXNDb2x1bW5OYW1lOiBzdHJpbmcgPSAnJ1xyXG5cclxuICBub21icmVEb2N1bWVudHM6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICBpc0RyYWdPdmVyID0gZmFsc2U7XHJcbiAgbWVzc2FnZVBvc2l0aW9uID0geyB4OiAwLCB5OiAwIH07XHJcbiAgcHJpdmF0ZSBkcmFnRW50ZXJDb3VudCA9IDA7XHJcbiAgcHJpdmF0ZSBfZm9ybU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgZm9ybUVuZHBvaW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybUVuZHBvaW50O1xyXG4gIH1cclxuXHJcbiAgc2V0IGZvcm1FbmRwb2ludCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9mb3JtRW5kcG9pbnQgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBmb3JtTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1OYW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZvcm1OYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2Zvcm1OYW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYnVzaW5lc3NDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfbW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2Zvcm1FbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX3N0YXR1czogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvLyBHZXR0ZXIgZm9yIGJ1c2luZXNzQ2xhc3NcclxuICBnZXQgYnVzaW5lc3NDbGFzcygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2J1c2luZXNzQ2xhc3M7XHJcbiAgfVxyXG5cclxuICAvLyBTZXR0ZXIgZm9yIGJ1c2luZXNzQ2xhc3NcclxuICBzZXQgYnVzaW5lc3NDbGFzcyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9idXNpbmVzc0NsYXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLmlzQnVzaW5lc3NDbGFzc1NldCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5nZXRDb2xvbm5lUGVyc29ubmFsaXNlZSgpO1xyXG4gICAgdGhpcy5nZXRFbnRpdHlTdGF0dXMoKTtcclxuICAgIHRoaXMuZ2V0U3RhdHVzTWV0YUZvckNvbWJvKCk7XHJcbiAgICB0aGlzLmNoZWNrRW50aXR5SW5mbygpO1xyXG4gICAgdGhpcy5jYWxjdWxhdGVGb3Jtc0luZm9zKCk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXR0ZXIgZm9yIGlkXHJcbiAgZ2V0IGlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5faWQ7XHJcbiAgfVxyXG5cclxuICAvLyBTZXR0ZXIgZm9yIGlkXHJcbiAgc2V0IGlkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2lkID0gdmFsdWU7XHJcbiAgICB0aGlzLmdldENvbG9ubmVQZXJzb25uYWxpc2VlKCk7XHJcbiAgICB0aGlzLmdldE5vbWJyZUZpY2hpZXIoKTtcclxuICB9XHJcblxyXG4gIC8vIEdldHRlciBmb3Igc3RhdHVzXHJcbiAgZ2V0IHN0YXR1cygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cztcclxuICB9XHJcblxyXG4gIC8vIFNldHRlciBmb3Igc3RhdHVzXHJcbiAgc2V0IHN0YXR1cyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9zdGF0dXMgPSB2YWx1ZTtcclxuICAgIHRoaXMub25TdGF0dXNDaGFuZ2UuZW1pdCh0aGlzLl9zdGF0dXMpO1xyXG4gIH1cclxuXHJcbiAgc2V0IG1vZGUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fbW9kZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5zaG93QWN0aW9uQnV0dG9uID0gdGhpcy5tb2RlICE9IE1vZGVzLmNyZWF0ZTtcclxuICAgIHRoaXMuZ2V0Q29sb25uZVBlcnNvbm5hbGlzZWUoKTtcclxuICAgIHRoaXMucmVjYWxjdWxhdGVGb3Jtc1Zpc2liaWxpdHkoKTtcclxuICAgIHRoaXMudXBkYXRlTW9kZUluVHNpTW9kYWxGb290ZXIoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IG1vZGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9tb2RlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2lzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBpc0NyZWF0ZU9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBvdXRwdXRzXHJcbiAgQE91dHB1dCgpIG9uU3VibWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBvblN1Ym1pdEZvcm1Xb3JrZmxvd0NvbmZpZ3VyYXRpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGZvcm1SZWZDaGFuZ2U6IEV2ZW50RW1pdHRlcjxOZ0Zvcm0+ID0gbmV3IEV2ZW50RW1pdHRlcjxOZ0Zvcm0+KCk7XHJcbiAgQE91dHB1dCgpIG9uU3RhdHVzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBAVmlld0NoaWxkKCd0b29sYmFyVGVtcGxhdGUnKSB0b29sYmFyVGVtcGxhdGVSZWYgITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKFRzaU1vZGFsSGVhZGVyQ29tcG9uZW50KSBtb2RhbEhlYWRlckNvbXA/OiBUc2lNb2RhbEhlYWRlckNvbXBvbmVudDtcclxuXHJcbiAgQENvbnRlbnRDaGlsZChUc2lNb2RhbEZvb3RlckNvbXBvbmVudCkgbW9kYWxGb290ZXJDb21wPzogVHNpTW9kYWxGb290ZXJDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ2R5bmFtaWNUb29sYmFyQ29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgZHluYW1pY1Rvb2xiYXJDb250YWluZXJzITogUXVlcnlMaXN0PFZpZXdDb250YWluZXJSZWY+O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdkeW5hbWljRm9vdGVyQ29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgZHluYW1pY0Zvb3RlcnNDb250YWluZXJzITogUXVlcnlMaXN0PFZpZXdDb250YWluZXJSZWY+O1xyXG5cclxuICBwcml2YXRlIF9pbnB1dFRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIGdldCBpbnB1dFRpdGxlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RhbEhlYWRlckNvbXA/LmlucHV0VGl0bGVcclxuICB9XHJcblxyXG4gIHNldCBpbnB1dFRpdGxlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2lucHV0VGl0bGUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGNvbG9ubmVzUGVyc29ubmFsaXNlZUdyb3VwZWQ6IENvbG9ubmVQZXJzb25uYWxpc2VlR3JvdXBlZFJlc3BvbnNlW10gPSBbXTtcclxuICBjYW5TaG93Rm9ybXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmb3Jtc09mQnVzaW5lc3NDbGFzczogYW55W10gPSBbXTtcclxuICBwcml2YXRlIF9kb2VzSGF2ZUZvcm1zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2V0IGRvZXNIYXZlRm9ybXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9kb2VzSGF2ZUZvcm1zOyB9XHJcbiAgc2V0IGRvZXNIYXZlRm9ybXModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2RvZXNIYXZlRm9ybXMgPSB2YWx1ZTtcclxuICAgIHRoaXMucmVjYWxjdWxhdGVGb3Jtc1Zpc2liaWxpdHkoKTtcclxuICB9XHJcblxyXG4gIGlzRGVzY3JpbWluYXRvclZhbHVlU2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNCdXNpbmVzc0NsYXNzU2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNGb3Jtc0luZm9zQ2FsY3VsYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlnbm9yZURlc2NyaW1pbmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoYXNBY3RpdmVSZXF1ZXN0czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcmVxdWVzdFRyYWNrZXJTdGF0ZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgZHluYW1pY0Zvcm1TZXJ2aWNlID0gaW5qZWN0KER5bmFtaWNGb3JtU2VydmljZSk7XHJcbiAgZm9ybXVsYWlyZVNlcnZpY2UgOiBGb3JtdWxhaXJlU2VydmljZSA9IGluamVjdChGb3JtdWxhaXJlU2VydmljZSk7XHJcbiAgZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UgOiBFbnRpdHlDb25maWd1cmF0aW9uU2VydmljZSA9IGluamVjdChFbnRpdHlDb25maWd1cmF0aW9uU2VydmljZSk7XHJcbiAgcmVxdWVzdFRyYWNrZXJTZXJ2aWNlIDogUmVxdWVzdFRyYWNrZXJTZXJ2aWNlID0gaW5qZWN0KFJlcXVlc3RUcmFja2VyU2VydmljZSk7XHJcbiAgc2hvd0FjdGlvbkJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyNyZWdpb24gY3RvclxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbnRpdHlTdGF0dXNTZXJ2aWNlOiBFbnRpdHlTdGF0dXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdGF0dXNDb2xvclNlcnZpY2U6IFN0YXR1c0NvbG9yU2VydmljZSxcclxuICAgIHB1YmxpYyBfZmljaGllclNlcnZpY2U6IEZpY2hpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlOiBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90c2lDb25maXJtU2VydmljZTogVHNpQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RzaU5vdGlmaWNhdGlvblNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfbGF5b3V0SGVscGVyU2VydmljZTogTGF5b3V0SGVscGVyU2VydmljZSxcclxuICAgIHB1YmxpYyB3b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBXb3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHVibGljIF9jb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2U6IENvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Zvcm1TdGF0ZVNlcnZpY2UgOiBGb3JtU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIHJlZj86IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICBwdWJsaWMgY29uZmlnPzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGlmICh0aGlzLnJlcG9ydGluZ0FwcCkge1xyXG5cclxuICAgICAgaWYgKHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuaXNEZXNpZ25Nb2RlICYmIHRoaXMucmVwb3J0aW5nQXBwLnNob3dQcmVzZW50YXRpb25EZXNpZ25lckNvbmZpZ0J1dHRvbikge1xyXG4gICAgICAgIHRoaXMucmVwb3J0aW5nQXBwLnNob3dQcmVzZW50YXRpb25EZXNpZ25lckNvbmZpZ0J1dHRvbiA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2F2ZWREYXRhU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc2F2ZWREYXRhU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLnJlcXVlc3RUcmFja2VyU3RhdGVTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5yZXF1ZXN0VHJhY2tlclN0YXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gdmFyaWFibGVzXHJcbiAgcHJpdmF0ZSBfd29ya2Zsb3dJbmZvcm1hdGlvbjogd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UgPSBuZXcgd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UoKTtcclxuICBzZXQgd29ya2Zsb3dJbmZvcm1hdGlvbih2YWx1ZTogd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UpIHtcclxuICAgIHRoaXMuX3dvcmtmbG93SW5mb3JtYXRpb24gPSB2YWx1ZVxyXG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gICAgaWYgKHRoaXMubW9kZSAhPSBNb2Rlcy5jcmVhdGUgJiYgdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd0V0YXQpIHtcclxuICAgICAgdGhpcy5nZXRXb3JrZmxvd0V0YXRTdWl2YW50QXNLZXlWYWx1ZVBhaXIgPSBBZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRXb3JrZmxvd0V0YXRTdWl2YW50QnlXb3JrZmxvd0V0YXQodGhpcy53b3JrZmxvd0luZm9ybWF0aW9uLndvcmtmbG93RXRhdClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFzeW5jIGdldFdvcmtmbG93RW50aXR5SW5mb3JtYXRpb24oYnVzaW5lc3NDbGFzczogc3RyaW5nLCB1aWRPYmplY3Q/OiBzdHJpbmcsIGRpc2NyaW1pbmF0b3JDbGFzc05hbWUgPzogc3RyaW5nLCBcclxuICAvLyBkaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lID86IHN0cmluZ1xyXG4gIC8vICkge1xyXG4gIC8vICAgaWYgKHRoaXMubW9kZSAhPSBNb2Rlcy5jcmVhdGUpIHtcclxuICAvLyAgICAgcmV0dXJuO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgdHJ5IHtcclxuICAvLyAgICAgbGV0IHJlcXVlc3Q6IEdldFdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlcXVlc3QgPSBuZXcgR2V0V29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVxdWVzdCgpO1xyXG4gIC8vICAgICByZXF1ZXN0LmNsYXNzTmFtZSA9IGJ1c2luZXNzQ2xhc3NcclxuICAvLyAgICAgcmVxdWVzdC51aWRPYmpldCA9IHVpZE9iamVjdDtcclxuICAvLyAgICAgcmVxdWVzdC5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lID0gZGlzY3JpbWluYXRvckNsYXNzTmFtZVxyXG4gIC8vICAgICByZXF1ZXN0LmRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWUgPSBkaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lXHJcbiAgLy8gICAgIHJlcXVlc3QuZGlzY3JpbWluYXRvclZhbHVlID0gdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAvLyAgICAgdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlXb3JrbGZvd0luc3RhbmNlSW5mb3JtYXRpb24ocmVxdWVzdCkpXHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKFwidGhpcy53b3JrZmxvd0luZm9ybWF0aW9uXCIsIHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbilcclxuICAvLyAgICAgaWYgKHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbikge1xyXG4gIC8vICAgICAgIGxldCB3b3JrZmxvd0V0YXRGb3JtID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS53b3JrZmxvd0V0YXRGb3JtRm9yQ3VycmVudEZvcm1cclxuICAvLyAgICAgICAgID8uZmluZCh4ID0+IHgudWlkID09IHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbj8ud29ya2Zsb3dFdGF0KVxyXG4gIC8vICAgICAgIGlmICh3b3JrZmxvd0V0YXRGb3JtKSB7XHJcbiAgLy8gICAgICAgICB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLndvcmtmbG93RXRhdEZvckZvckN1cnJlbnRFbnRpdHlGb3JtID1cclxuICAvLyAgICAgICAgICAgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5tYXBXb3JrZmxvd0V0YXRGb3JtVG9QcmVzZW50YXRpb25TZXR0aW5nKHdvcmtmbG93RXRhdEZvcm0ud29ya2Zsb3dFdGF0c0Zvcm1zKVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBnZXQgd29ya2Zsb3dJbmZvcm1hdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl93b3JrZmxvd0luZm9ybWF0aW9uXHJcbiAgfVxyXG4gIGdldFdvcmtmbG93RXRhdEFzS2V5VmFsdWVQYWlyID1cclxuICAgIEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldFdvcmtmbG93RXRhdEFzS2V5VmFsdWVQYWlyKCk7XHJcbiAgZ2V0V29ya2Zsb3dFdGF0U3VpdmFudEFzS2V5VmFsdWVQYWlyID0gJyc7XHJcbiAgc2VsZWN0ZWRXb3JrZmxvd0V0YXRVaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGw7XHJcbiAgaXNDb21ib0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZm9ybU1vZGVzID0gTW9kZXM7XHJcblxyXG4gIGNvbmZpZ01vZGVCdXR0b25JZCA9IFwiY29uZmctbW9kZS1idXR0b24tZnJvbS1mb3JtXCI7XHJcbiAgY3VkQ29tcG9uZW50OiBhbnlcclxuICBjb25maWdEYXRhOiBhbnlcclxuICBzYXZlZERhdGFTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb25cclxuICAvLyAjZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBoYW5kbGUgTGlmZWN5Y2xlIEhvb2tzXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1ZENvbXBvbmVudCA9IHRoaXMuY29uZmlnPy5kYXRhPy5jdWRDb21wb25lbnQ7XHJcbiAgICB0aGlzLmNvbmZpZ0RhdGEgPSB0aGlzLmNvbmZpZ1xyXG4gICAgdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uID0gdGhpcy5jb25maWc/LmRhdGE/LndvcmtmbG93SW5mb3JtYXRpb24gPz8gbmV3IHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlKClcclxuICAgIGNvbnNvbGUubG9nKFwid29ya2Zsb3dJbmZvcm1hdGlvbiA9PiBcIiwgdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uKVxyXG4gICAgaWYgKHRoaXMubW9kZSAhPSBNb2Rlcy5jcmVhdGUgJiYgdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd0V0YXQpIHtcclxuICAgICAgdGhpcy5nZXRXb3JrZmxvd0V0YXRTdWl2YW50QXNLZXlWYWx1ZVBhaXIgPSBBZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRXb3JrZmxvd0V0YXRTdWl2YW50QnlXb3JrZmxvd0V0YXQodGhpcy53b3JrZmxvd0luZm9ybWF0aW9uLndvcmtmbG93RXRhdClcclxuICAgIH1cclxuICAgIHRoaXMuX2luaXRGb3JtU2F2ZVN1YnNjcmlwdGlvbigpO1xyXG5cclxuICAgIHRoaXMuX2luaXRpYWxpemVSZXF1ZXN0VHJhY2tlclN0YXRlU3Vic2NyaXB0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0Rm9ybVNhdmVTdWJzY3JpcHRpb24oKSB7XHJcbiAgICB0aGlzLnNhdmVkRGF0YVN1YnNjcmlwdGlvbiA9IHRoaXMuX2Zvcm1TdGF0ZVNlcnZpY2VcclxuICAgICAgLmRhdGFTYXZlZE9ic2VydmFibGUuc3Vic2NyaWJlKFxyXG4gICAgICAgIGFzeW5jIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5jb2xvbm5lc1BlcnNvbm5hbGlzZWVEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljRm9ybVNlcnZpY2UuY29sb25uZXNQZXJzb25uYWxpc2VlRGF0YVxyXG4gICAgICAgICAgICAgIC5mb3JFYWNoKHggPT4geC5vY2N1cmVuY2UgPSBkYXRhKVxyXG4gICAgICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2UuYWRkT3JVcGRhdGVGb3JtdWxhaXJlRGF0YSh0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5jb2xvbm5lc1BlcnNvbm5hbGlzZWVEYXRhKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICB9XHJcblxyXG4gIGZvcm1UeXBlID0gZm9ybVR5cGU7XHJcbiAgcHJpdmF0ZSBnZXRDb2xvbm5lUGVyc29ubmFsaXNlZSgpIHtcclxuICAgIGlmICh0aGlzLmJ1c2luZXNzQ2xhc3MgJiYgdGhpcy5tb2RlID09IE1vZGVzLmNyZWF0ZSkge1xyXG4gICAgICB0aGlzLl9nZXRDb2xvbm5lUGVyc29ubmFsaXNlKHRoaXMuYnVzaW5lc3NDbGFzcylcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcyAmJiB0aGlzLm1vZGUgIT0gTW9kZXMuY3JlYXRlICYmIHRoaXMuaWQpIHtcclxuICAgICAgdGhpcy5fZ2V0Q29sb25uZVBlcnNvbm5hbGlzZSh0aGlzLmJ1c2luZXNzQ2xhc3MsIHRoaXMuaWQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRDb2xvbm5lUGVyc29ubmFsaXNlKGJ1c2luZXNzQ2xhc3M6IHN0cmluZywgaWQ/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2NvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZS5nZXRDb2xvbm5lc1BlcnNvbm5hbGlzZWUoYnVzaW5lc3NDbGFzcywgdGhpcy5pZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIHJlcy5mb3JFYWNoKGNwZyA9PiB7XHJcbiAgICAgICAgICBjcGcuY29sb25uZXMuZm9yRWFjaChjcCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghY3AuZGF0YSkge1xyXG4gICAgICAgICAgICAgIGNwLmRhdGEgPSBuZXcgQ29sb25uZVBlcnNvbm5hbGlzZWVEYXRhKFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5pZCwgY3AudWlkLFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jb2xvbm5lc1BlcnNvbm5hbGlzZWVHcm91cGVkID0gcmVzO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3Byb2Nlc3NEeW5hbWljVGFicygpXHJcbiAgICAgICAgfSwgMCk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3Igd2hlbiBnZXR0aW5nIGxpc3Qgb2YgY29sb25uZSBwZXJzb25uYWxpc2VlXCIsIGVycik7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB0b2dnbGVEZXNpZ25Nb2RlKGV2ZW50OiBhbnkpIHtcclxuICAgIC8vIHRoaXMuY29uZmlnRGF0YS5kYXRhLmN1ZENvbXBvbmVudCA9IHVuZGVmaW5lZFxyXG4gICAgLy8gdGhpcy5jb25maWdEYXRhLmRhdGEud29ya2Zsb3dJbmZvcm1hdGlvbiA9IHVuZGVmaW5lZFxyXG5cclxuICAgIC8vIHRoaXMucmVmPy5jbG9zZSgpO1xyXG4gICAgLy8gdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgPSB0cnVlXHJcbiAgICAvLyB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmN1cnJlbnRGb3JtTmFtZSA9IHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpXHJcblxyXG4gICAgLy8gdGhpcy5yZWYgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5jdWRDb21wb25lbnQsIHRoaXMuY29uZmlnRGF0YSk7XHJcbiAgICAvLyB0aGlzLnJlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuaXNEZXNpZ25Nb2RlID0gZmFsc2VcclxuICAgIC8vICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5jdXJyZW50Rm9ybU5hbWUgPSB1bmRlZmluZWRcclxuICAgIC8vIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJvY2Vzc0R5bmFtaWNUYWJzKCkge1xyXG4gICAgdGhpcy5keW5hbWljVG9vbGJhckNvbnRhaW5lcnMudG9BcnJheSgpLmZvckVhY2goY29udGFpbmVyID0+IHtcclxuICAgICAgY29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICAgIGNvbnN0IGNvbXBSZWY6IENvbXBvbmVudFJlZjxUc2lNb2RhbEhlYWRlckNvbXBvbmVudD4gPSBjb250YWluZXIuY3JlYXRlQ29tcG9uZW50KFRzaU1vZGFsSGVhZGVyQ29tcG9uZW50KTtcclxuXHJcbiAgICAgIGNvbXBSZWYuaW5zdGFuY2UudG9vbGJhclRlbXBsYXRlSGVhZGVyID0gdGhpcy5tb2RhbEhlYWRlckNvbXAhLnRvb2xiYXJUZW1wbGF0ZUhlYWRlcjtcclxuICAgICAgY29tcFJlZi5pbnN0YW5jZS5pbnB1dFRpdGxlID0gdGhpcy5tb2RhbEhlYWRlckNvbXAhLmlucHV0VGl0bGU7XHJcblxyXG4gICAgICBjb21wUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZHluYW1pY0Zvb3RlcnNDb250YWluZXJzLnRvQXJyYXkoKS5mb3JFYWNoKGNvbnRhaW5lciA9PiB7XHJcbiAgICAgIGNvbnRhaW5lci5jbGVhcigpO1xyXG4gICAgICBjb25zdCBjb21wUmVmOiBDb21wb25lbnRSZWY8VHNpTW9kYWxGb290ZXJDb21wb25lbnQ+ID0gY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChUc2lNb2RhbEZvb3RlckNvbXBvbmVudCk7XHJcbiAgICAgIGNvbXBSZWYuaW5zdGFuY2UuZm9vdGVyVGVtcGxhdGVSZWYgPSB0aGlzLm1vZGFsRm9vdGVyQ29tcD8uZm9vdGVyVGVtcGxhdGVSZWZcclxuICAgICAgY29tcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudG9vbGJhclRlbXBsYXRlUmVmICYmIHRoaXMubW9kYWxIZWFkZXJDb21wKSB7XHJcbiAgICAgIHRoaXMubW9kYWxIZWFkZXJDb21wLnRvb2xiYXJUZW1wbGF0ZUhlYWRlciA9IHRoaXMudG9vbGJhclRlbXBsYXRlUmVmO1xyXG4gICAgICB0aGlzLmlucHV0VGl0bGUgPSB0aGlzLm1vZGFsSGVhZGVyQ29tcC5pbnB1dFRpdGxlO1xyXG5cclxuICAgICAgdGhpcy5tb2RhbEhlYWRlckNvbXAudG9vbGJhclRlbXBsYXRlSGVhZGVyID0gdGhpcy50b29sYmFyVGVtcGxhdGVSZWY7XHJcbiAgICAgIHRoaXMuaW5wdXRUaXRsZSA9IHRoaXMubW9kYWxIZWFkZXJDb21wLmlucHV0VGl0bGU7XHJcbiAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb3JtUmVmQ2hhbmdlLmVtaXQodGhpcy5mb3JtUmVmKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBoYW5kbGUgZXZlbnRzXHJcbiAgaGFuZGxlRm9ybVN1Ym1pdChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZih0aGlzLmhhc0FjdGl2ZVJlcXVlc3RzKSByZXR1cm47XHJcbiAgICBcclxuICAgIGlmICh0aGlzLndvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgIHRoaXMub25TdWJtaXRGb3JtV29ya2Zsb3dDb25maWd1cmF0aW9uLmVtaXQoZXZlbnQpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zeW5jRHluYW1pY0NvbHVtbkRhdGFUb0R5bmFtaWNGb3JtU2VydmljZSgpXHJcbiAgICAgIHRoaXMub25TdWJtaXQuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBzeW5jRHluYW1pY0NvbHVtbkRhdGFUb0R5bmFtaWNGb3JtU2VydmljZSgpIHtcclxuICAgIGNvbnN0IGV4aXN0aW5nVWlkcyA9IG5ldyBTZXQoXHJcbiAgICAgIHRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmNvbG9ubmVzUGVyc29ubmFsaXNlZURhdGEubWFwKHggPT4geC5jb2xvbm5lUGVyc29ubmFsaXNlZVVpZClcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jb2xvbm5lc1BlcnNvbm5hbGlzZWVHcm91cGVkLmZvckVhY2goY3BnID0+IHtcclxuICAgICAgY3BnLmNvbG9ubmVzLmZvckVhY2goY3AgPT4ge1xyXG4gICAgICAgIGlmICghZXhpc3RpbmdVaWRzLmhhcyhjcC51aWQpKSB7XHJcbiAgICAgICAgICBpZiAoIWNwLmRhdGEpIHtcclxuICAgICAgICAgICAgY3AuZGF0YSA9IG5ldyBDb2xvbm5lUGVyc29ubmFsaXNlZURhdGEoXHJcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIHRoaXMuaWQsIGNwLnVpZCxcclxuICAgICAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IG5ld0RhdGEgPSBuZXcgQ29sb25uZVBlcnNvbm5hbGlzZWVEYXRhKFxyXG4gICAgICAgICAgICBjcD8uZGF0YT8udWlkID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgY3A/LmRhdGE/Lm9jY3VyZW5jZSA/PyB0aGlzLmlkLFxyXG4gICAgICAgICAgICBjcC51aWQsXHJcbiAgICAgICAgICAgIGNwLmRhdGEudmFsZXVyQm9vbGVhbixcclxuICAgICAgICAgICAgY3AuZGF0YS52YWxldXJJbnQsXHJcbiAgICAgICAgICAgIGNwLmRhdGEudmFsZXVyRGVjaW1hbCxcclxuICAgICAgICAgICAgY3AuZGF0YS52YWxldXJTdHJpbmcsXHJcbiAgICAgICAgICAgIGNwLmRhdGEudmFsZXVyQmluYXJ5LFxyXG4gICAgICAgICAgICBjcC5vYnNlcnZhdGlvblxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5jb2xvbm5lc1BlcnNvbm5hbGlzZWVEYXRhLnB1c2gobmV3RGF0YSk7XHJcblxyXG4gICAgICAgICAgZXhpc3RpbmdVaWRzLmFkZChjcC51aWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcInRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmNvbG9ubmVzUGVyc29ubmFsaXNlZURhdGEgPT4gXCIsXHJcbiAgICAgIHRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmNvbG9ubmVzUGVyc29ubmFsaXNlZURhdGFcclxuICAgIClcclxuXHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIHdvcmtmbG93XHJcblxyXG5cclxuICBjb25maXJtVXBkYXRlV29ya2Zsb3dFdGF0KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGV2ZW50KVxyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuX3RzaUNvbmZpcm1TZXJ2aWNlLmNvbmZpcm0oXCJhZG1pbmlzdHJhdGlvbl9jb25maXJtX3N0YXR1c19jaGFuZ2VcIiwgXCJhZG1pbmlzdHJhdGlvbl9jb25maXJtYXRpb25fdGl0bGVcIixcclxuICAgICAgICAocmVzdWx0OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZVxyXG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyB1cGRhdGVFbnRpdHlXb3JrZmxvd0luZm9ybWF0aW9uKClcclxuICAgICAgICAgICAgcmVxdWVzdC5jbGFzc05hbWUgPSB0aGlzLl9idXNpbmVzc0NsYXNzO1xyXG4gICAgICAgICAgICByZXF1ZXN0LnVpZE9iamVjdCA9IHRoaXMuX2lkXHJcbiAgICAgICAgICAgIHJlcXVlc3QubmV3V29ya2Zsb3dTdGF0dXMgPSBldmVudDtcclxuICAgICAgICAgICAgcmVxdWVzdC53b3JrZmxvdyA9IHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbj8ud29ya2Zsb3dVaWQ7XHJcbiAgICAgICAgICAgIHJlcXVlc3Qud29ya2Zsb3dFdGF0ID0gdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uLndvcmtmbG93RXRhdFxyXG4gICAgICAgICAgICByZXF1ZXN0LndvcmtmbG93SW5zdGFuY2VVaWQgPSB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93SW5zdGFuY2VVaWRcclxuICAgICAgICAgICAgcmVxdWVzdC53b3JrZmxvd0V0YXQgPSB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93RXRhdFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXF1ZXN0KVxyXG4gICAgICAgICAgICB0aGlzLndvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UudXBkYXRlRW50aXR5V29ya2Zsb3dJbmZvcm1hdGlvbihyZXF1ZXN0KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSlcclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEuc3RhdHVzICE9IG51bGwgJiYgZGF0YS5zdGF0dXMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBkYXRhLnN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd0V0YXRVaWQgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3RzaU5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoZXJyb3I/LmVycm9yKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93RXRhdFVpZCA9IG51bGxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHN0YXR1c01ldGFkYXRhQ29tYm9TdGF0dXM/OiBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlO1xyXG5cclxuICBwcml2YXRlIGdldFN0YXR1c01ldGFGb3JDb21ibygpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLnN0YXR1c0NvbG9yU2VydmljZS5nZXRTdGF0dXNDb2xvckRldGFpbHNCeUJ1c2luZXNzQ2xhc3NOYW1lKHRoaXMuYnVzaW5lc3NDbGFzcyEpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChkYXRhOiBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKCFkYXRhKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zdGF0dXNNZXRhZGF0YUNvbWJvU3RhdHVzID0gZGF0YTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEVudGl0eSBzdGF0dXNcclxuICBwcml2YXRlIGdldEVudGl0eVN0YXR1cygpOiB2b2lkIHtcclxuICAgIHRoaXMuZW50aXR5U3RhdHVzU2VydmljZS5nZXRFbnRpdHlTdGF0dXModGhpcy5idXNpbmVzc0NsYXNzKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogRW50aXR5UHJvcGVydGllc1Jlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKCFkYXRhKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdHVzQ29sdW1uTmFtZSA9IGRhdGEuc3RhdHVzQ29sdW1uTmFtZSA/PyBcIlwiO1xyXG5cclxuICAgICAgICBpZiAoZGF0YS5lbnRpdHlTdGF0dXMgJiYgQXJyYXkuaXNBcnJheShkYXRhLmVudGl0eVN0YXR1cykpIHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5U3RhdHVzTGlzdCA9IGRhdGEuZW50aXR5U3RhdHVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSBNb2Rlcy5jcmVhdGUgJiYgaXNOdWxsT3JFbXB0eSh0aGlzLnN0YXR1cykgJiYgIWlzTnVsbE9yRW1wdHkoZGF0YS5kZWZhdWx0U3RhdHVzKSkge1xyXG4gICAgICAgICAgdGhpcy5zdGF0dXMgPSBkYXRhLmRlZmF1bHRTdGF0dXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuc2V0TWVzc2FnZVBvc2l0aW9uKGV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xyXG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdO1xyXG4gICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCk/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XHJcbiAgICAgIHRoaXMuaXNEcmFnT3ZlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnVwbG9hZEZpbGUoZmlsZSwgZmlsZUV4dGVuc2lvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwbG9hZEZpbGUoZmlsZTogRmlsZSwgZmlsZUV4dGVuc2lvbjogc3RyaW5nKSB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgcmVhZGVyLm9ubG9hZCA9IChlOiBQcm9ncmVzc0V2ZW50PEZpbGVSZWFkZXI+KSA9PiB7XHJcbiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gZS50YXJnZXQ/LnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcclxuICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgYmFzZTY0Q29udGVudCA9IHRoaXMuYXJyYXlCdWZmZXJUb0Jhc2U2NChhcnJheUJ1ZmZlcik7XHJcblxyXG4gICAgICBjb25zdCBmaWNoaWVyVG9TZW5kID0gbmV3IEZpY2hpZXIoKTtcclxuICAgICAgZmljaGllclRvU2VuZC5kYXRlRmljaGllciA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQubm9tID0gZmlsZS5uYW1lO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLm9iamV0ID0gJyc7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQubm9tRmljaGllckNvbXBsZXQgPSBmaWxlLm5hbWU7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQuZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgZmljaGllclRvU2VuZC5jb250ZW51ID0gYmFzZTY0Q29udGVudDtcclxuICAgICAgZmljaGllclRvU2VuZC50YWJsZUxpZWUgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQucGtleSA9IHRoaXMuaWQ/LnRvU3RyaW5nKCk7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQuZXh0ZW5zaW9uID0gZmlsZUV4dGVuc2lvblxyXG5cclxuICAgICAgdGhpcy5fZmljaGllclNlcnZpY2UuY3JlYXRlKGZpY2hpZXJUb1NlbmQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5nZXROb21icmVGaWNoaWVyKCk7XHJcbiAgICAgICAgICB0aGlzLl90c2lOb3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXCJmaWNoaWVyX2pvaW50XCIpO1xyXG4gICAgICAgICAgdGhpcy5vblNhdmUuZW1pdCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XHJcbiAgfVxyXG5cclxuICBhcnJheUJ1ZmZlclRvQmFzZTY0KGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGJpbmFyeSA9ICcnO1xyXG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgY29uc3QgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ0b2EoYmluYXJ5KTtcclxuICB9XHJcblxyXG4gIGhpZGUodmFsPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5yZWYgIT0gbnVsbCAmJiB0aGlzLnJlZiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHZhbCA9PSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMucmVmPy5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZWY/LmNsb3NlKHZhbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGwoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMubG9jYWxpemUgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLmxvY2FsaXplICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oa2V5KTtcclxuICAgIH1cclxuICAgIHJldHVybiBrZXk7XHJcbiAgfVxyXG5cclxuICBnZXROb21icmVGaWNoaWVyKCkge1xyXG4gICAgaWYgKHRoaXMuaWQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9maWNoaWVyU2VydmljZVxyXG4gICAgICAgIC5HZXROb21icmVGaWNoaWVySm9pbnRCeUlkKHRoaXMuaWQgPz8gXCJcIilcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubm9tYnJlRG9jdW1lbnRzID0gZGF0YTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAvLyB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB0byBnZXQgbnVtYmVyIG9mIGZpbGVzIG9uIHRoaXMgcmVjb3JkXCIsIHJlc3BvbnNlKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRHJhZ0VudGVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmRyYWdFbnRlckNvdW50Kys7XHJcblxyXG4gICAgdGhpcy5pc0RyYWdPdmVyID0gdHJ1ZTtcclxuICAgIHRoaXMuc2V0TWVzc2FnZVBvc2l0aW9uKGV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0RyYWdPdmVyKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVBvc2l0aW9uID0ge1xyXG4gICAgICAgIHg6IGV2ZW50LmNsaWVudFggKyA1LFxyXG4gICAgICAgIHk6IGV2ZW50LmNsaWVudFkgKyA1XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5kcmFnRW50ZXJDb3VudC0tO1xyXG5cclxuICAgIGlmICh0aGlzLmRyYWdFbnRlckNvdW50IDw9IDApIHtcclxuICAgICAgdGhpcy5pc0RyYWdPdmVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZHJhZ0VudGVyQ291bnQgPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRNZXNzYWdlUG9zaXRpb24oZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5tZXNzYWdlUG9zaXRpb24gPSB7XHJcbiAgICAgIHg6IGV2ZW50LmNsaWVudFggKyA1LFxyXG4gICAgICB5OiBldmVudC5jbGllbnRZICsgNSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNoZWNrRW50aXR5SW5mbygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSByZXR1cm47XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGVudGl0eUluZm8gPSBhd2FpdCB0aGlzLmVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEVudGl0eUluZm9Gcm9tQ2FjaGUodGhpcy5idXNpbmVzc0NsYXNzKTtcclxuXHJcbiAgICAgIGlmICghZW50aXR5SW5mbyB8fCAoIWVudGl0eUluZm8uZGlzY3JpbWluYXRvckNsYXNzTmFtZSAmJiAhZW50aXR5SW5mby5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lKSkge1xyXG4gICAgICAgIHRoaXMuaWdub3JlRGVzY3JpbWluYXRvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVGb3Jtc0luZm9zKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QWxsRm9ybXNPZkJ1c2luZXNzQ2xhc3MoKSB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZm9ybXVsYWlyZVNlcnZpY2UuZ2V0QWxsRm9ybXNPZkJ1c2luZXNzQ2xhc3ModGhpcy5idXNpbmVzc0NsYXNzLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPCAxKSByZXR1cm47XHJcbiAgICAgICAgICB0aGlzLmZvcm1zT2ZCdXNpbmVzc0NsYXNzID0gdmFsdWU7XHJcbiAgICAgICAgICB0aGlzLmRvZXNIYXZlRm9ybXMgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZUZvcm1zVmlzaWJpbGl0eSgpIHsgdGhpcy5jYW5TaG93Rm9ybXMgPSB0aGlzLmRvZXNIYXZlRm9ybXMgJiYgIWlzTnVsbE9yRW1wdHkodGhpcy5tb2RlKSAmJiB0aGlzLm1vZGUgIT0gTW9kZXMuY3JlYXRlOyB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlRm9ybXNJbmZvcygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRm9ybXNJbmZvc0NhbGN1bGF0ZWQpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc0J1c2luZXNzQ2xhc3NTZXQgfHwgIXRoaXMuaWdub3JlRGVzY3JpbWluYXRvciAmJiAhdGhpcy5pc0Rlc2NyaW1pbmF0b3JWYWx1ZVNldCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZ2V0QWxsRm9ybXNPZkJ1c2luZXNzQ2xhc3MoKTtcclxuICAgIHRoaXMuaXNGb3Jtc0luZm9zQ2FsY3VsYXRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0aWFsaXplUmVxdWVzdFRyYWNrZXJTdGF0ZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMucmVxdWVzdFRyYWNrZXJTdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMucmVxdWVzdFRyYWNrZXJTZXJ2aWNlLnJlcXVlc3RTdGF0ZSQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICB0aGlzLmhhc0FjdGl2ZVJlcXVlc3RzID0gdmFsdWUuaGFzQWN0aXZlUmVxdWVzdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTW9kZUluVHNpTW9kYWxGb290ZXIoKXtcclxuICAgIGlmKHRoaXMubW9kYWxGb290ZXJDb21wKXtcclxuICAgICAgdGhpcy5tb2RhbEZvb3RlckNvbXAubW9kZSA9IHRoaXMubW9kZVxyXG4gICAgfVxyXG4gIH1cclxufSIsIjxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKG5nU3VibWl0KT1cImhhbmRsZUZvcm1TdWJtaXQoJGV2ZW50KVwiICNmb3JtUmVmPVwibmdGb3JtXCI+XHJcbiAgPG5nLXRlbXBsYXRlICN0b29sYmFyVGVtcGxhdGU+XHJcbiAgICA8cC10b29sYmFyICpuZ0lmPVwiZm9ybUVuZHBvaW50XCIgc3R5bGVDbGFzcz1cIm1iLTEgZ2FwLTJcIiBjbGFzcz1cInctZnVsbFwiIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxyXG4gICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiIChkcmFnZW50ZXIpPVwib25EcmFnRW50ZXIoJGV2ZW50KVwiIChkcmFnbGVhdmUpPVwib25EcmFnTGVhdmUoJGV2ZW50KVwiPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMSBtbC0yXCI+XHJcbiAgICAgICAgICB7eyBpbnB1dFRpdGxlIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMSBtci0yXCI+XHJcbiAgICAgICAgICA8YXBwLXJlcG9ydGluZyAqbmdJZj1cImZvcm1FbmRwb2ludFwiIFtmcm9tVHNpRm9ybV09XCJ0cnVlXCIgW2lkXT1cInRoaXMuaWRcIiBbZm9ybUVuZHBvaW50XT1cImZvcm1FbmRwb2ludFwiXHJcbiAgICAgICAgICAgIFtmb3JtTmFtZV09XCJmb3JtTmFtZVwiIFtyZXBvcnREaXNjcmltaW5hdG9yXT1cImRlc2NyaW1pbmF0b3JWYWx1ZVwiIFtpc0Zvcm1FbmRwb2ludFBhZ2VkXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbbm9tYnJlRG9jdW1lbnRzSm9pbnRzXT1cIm5vbWJyZURvY3VtZW50c1wiIFtjb25maWdNb2RlQnV0dG9uSWRdPVwiY29uZmlnTW9kZUJ1dHRvbklkXCJcclxuICAgICAgICAgICAgW2lzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCIgKHRvZ2dsZURlc2lnbk1vZGUpPVwidG9nZ2xlRGVzaWduTW9kZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2J1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc1wiIChjbG9zZWRNb2RhbEZpbGVVcGxvYWQpPVwiZ2V0Tm9tYnJlRmljaGllcigpXCJcclxuICAgICAgICAgICAgW3Nob3dJbXBvcnRFeHBvcnRCdXR0b25dPVwiZmFsc2VcIiBbc2hvd0FjdGlvbkJ1dHRvbl09XCJzaG93QWN0aW9uQnV0dG9uXCIgI3JlcG9ydGluZ0FwcFxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2FwcC1yZXBvcnRpbmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNEcmFnT3ZlclwiIFtuZ1N0eWxlXT1cInsgbGVmdDogbWVzc2FnZVBvc2l0aW9uLnggKyAncHgnLCB0b3A6IG1lc3NhZ2VQb3NpdGlvbi55ICsgJ3B4JyB9XCJcclxuICAgICAgICBjbGFzcz1cImRyYWctbWVzc2FnZSBjdXJzb3ItZm9sbG93XCI+XHJcbiAgICAgICAge3sgXCJKb2ludHVyZVwiIHwgbG9jYWxpemUgfX1cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9wLXRvb2xiYXI+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPGRpdiAqYnVzeT1cImlzTG9hZGluZyB8fCBoYXNBY3RpdmVSZXF1ZXN0c1wiPjwvZGl2PlxyXG5cclxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtclwiPlxyXG4gICAgICA8cC10YWJWaWV3PlxyXG5cclxuICAgICAgICA8cC10YWJQYW5lbCBoZWFkZXI9XCJcIiBcclxuICAgICAgICBbaGVhZGVyU3R5bGVdPVwiY29sb25uZXNQZXJzb25uYWxpc2VlR3JvdXBlZC5sZW5ndGggPT09IDAgJiYgIWNhblNob3dGb3Jtc1xyXG4gICAgICA/IHsgZGlzcGxheTogJ25vbmUnIH0gXHJcbiAgICAgIDogbnVsbFwiPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWhvbWUgbXItMlwiPjwvaT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFpbi10YWItdGV4dFwiPnt7ICdzaGFyZWRfZm9ybV9tYWludGFiVGl0bGUnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9wLXRhYlBhbmVsPlxyXG5cclxuICAgICAgICA8IS0tIER5bmFtaWMgdGFicyAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sb25uZXNQZXJzb25uYWxpc2VlR3JvdXBlZC5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICA8cC10YWJQYW5lbCAqbmdGb3I9XCJsZXQgZ3JwIG9mIGNvbG9ubmVzUGVyc29ubmFsaXNlZUdyb3VwZWRcIiBbaGVhZGVyXT1cImdycC5ncm91cGVcIj5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZHluYW1pY1Rvb2xiYXJDb250YWluZXI+PC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBncmlkIGZvcm0tcm93XCIgKm5nRm9yPVwibGV0IGNvbCBvZiBncnAuY29sb25uZXNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBmb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgW2xhYmVsVmFsdWVdPVwiY29sLm5vbVwiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBTdHJpbmcgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTggZm9ybS1pbnB1dFwiICpuZ0lmPVwiY29sLnR5cGUgPT09IGZvcm1UeXBlLnN0cmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggWyhpbnB1dEZpZWxkKV09XCJjb2wuZGF0YS52YWxldXJTdHJpbmdcIj48L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIEludCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOCBmb3JtLWlucHV0XCIgKm5nSWY9XCJjb2wudHlwZSA9PT0gZm9ybVR5cGUuaW50XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1JbnRlZ2VyIFsoaW5wdXRGaWVsZCldPVwiY29sLmRhdGEudmFsZXVySW50XCI+PC9Uc2ktSW50ZWdlcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIERlY2ltYWwgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTggZm9ybS1pbnB1dFwiICpuZ0lmPVwiY29sLnR5cGUgPT09IGZvcm1UeXBlLmRlY2ltYWxcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLURlY2ltYWwtSW5wdXQgWyhpbnB1dEZpZWxkKV09XCJjb2wuZGF0YS52YWxldXJEZWNpbWFsXCI+PC9Uc2ktRGVjaW1hbC1JbnB1dD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIEJvb2xlYW4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTggZm9ybS1pbnB1dFwiICpuZ0lmPVwiY29sLnR5cGUgPT09IGZvcm1UeXBlLmJvb2xlYW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLUNoZWNrQm94IFtpc0JpbmFyeV09XCJmYWxzZVwiIFsoaW5wdXRGaWVsZCldPVwiY29sLmRhdGEudmFsZXVyQm9vbGVhblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gQmluYXJ5IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04IGZvcm0taW5wdXRcIiAqbmdJZj1cImNvbC50eXBlID09PSBmb3JtVHlwZS5iaW5hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgYmluYXJ5IGlucHV0IChub3QgaGFuZGxlZCB5ZXQpXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkeW5hbWljRm9vdGVyQ29udGFpbmVyPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L3AtdGFiUGFuZWw+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYW5TaG93Rm9ybXNcIj5cclxuICAgICAgICAgIDxwLXRhYlBhbmVsIFtoZWFkZXJdPVwiJ3NoYXJlZF9mb3JtX2R5bmFtaWNGb3Jtc1RhYl9UaXRsZScgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGVudFwiPlxyXG4gICAgICAgICAgICAgIDxzaGFyZWQtZHluYW1pYy1mb3JtLWxpc3RcclxuICAgICAgICAgICAgICBbb2NjdXJlbmNlXT1cImlkXCJcclxuICAgICAgICAgICAgICBbb2NjdXJlbmNlQnVzaW5lc3NDbGFzc109XCJidXNpbmVzc0NsYXNzXCJcclxuICAgICAgICAgICAgICBbb2NjdXJlbmNlRGlzY3JpbWluYXRvclZhbHVlXT1cImRlc2NyaW1pbmF0b3JWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgW2lnbm9yZURpYWxvZ0NvbmZpZ109XCJ0cnVlXCIgLz5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvcC10YWJQYW5lbD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwvcC10YWJWaWV3PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9maWVsZHNldD5cclxuXHJcbiAgPGRpdiAqbmdJZj1cIihidXNpbmVzc0NsYXNzICYmIGVudGl0eVN0YXR1c0xpc3QubGVuZ3RoID4gMCkgfHxcclxuICAgICAgICB3b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd1VpZCB8fFxyXG4gICAgICAgIHdvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93XCIgY2xhc3M9XCJteC00IHB4LTIgbXktMSBzaGFyZWQtZm9vdGVyLWJhclwiPlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJidXNpbmVzc0NsYXNzICYmIGVudGl0eVN0YXR1c0xpc3QgJiYgZW50aXR5U3RhdHVzTGlzdC5sZW5ndGggPiAwXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiIHByZXNlbnRhdGlvbkRlc2lnbmVyPVwic2hhcmVkX2NydWRfc3RhdHVzXCI+XHJcbiAgICAgICAgPFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX2NydWRfc3RhdHVzJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIFtpZC1maWVsZF09XCIna2V5J1wiIFtsYWJlbC1maWVsZF09XCIndmFsdWUnXCIgW2RhdGFzb3VyY2VdPVwiZW50aXR5U3RhdHVzTGlzdFwiIFsoYmluZCldPVwic3RhdHVzXCJcclxuICAgICAgICAgIFtjb21ib1R5cGVdPVwiJ3N0YXR1cydcIiBbc3RhdHVzTWV0YWRhdGFdPVwic3RhdHVzTWV0YWRhdGFDb21ib1N0YXR1c1wiIFtpbnB1dE5hbWVdPVwic3RhdHVzQ29sdW1uTmFtZVwiXHJcbiAgICAgICAgICBbc2hvd0FkZEJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICBbc2hvd1NlYXJjaEJ1dHRvbl09XCJmYWxzZVwiPjwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJ3b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd1VpZCB8fCB3b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvd1wiXHJcbiAgICAgIGNsYXNzPVwiZmxleCBjb2wtMTBcIj5cclxuICAgICAgPGRpdiBwcmVzZW50YXRpb25EZXNpZ25lcj1cInNoYXJlZF93b3JrZmxvd05hbWVcIiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGNvbC00XCI+XHJcbiAgICAgICAgPFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fd29ya2Zsb3dfd29ya2Zsb3cnfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgIDwvVHNpLUxhYmVsPlxyXG4gICAgICAgIDxUc2ktVGV4dC1Cb3ggW2Rpc2FibGVkXT1cInRydWVcIiBbaW5wdXROYW1lXT1cIid3b3JrZmxvd05hbWUnXCIgWyhpbnB1dEZpZWxkKV09XCJ3b3JrZmxvd0luZm9ybWF0aW9uLndvcmtmbG93TmFtZVwiPlxyXG4gICAgICAgIDwvVHNpLVRleHQtQm94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBwcmVzZW50YXRpb25EZXNpZ25lcj1cImFkbWluaXN0cmF0aW9uX3dvcmtmbG93X3dvcmtmbG93X2N1cnJlbnRfc3RhdHVzXCJcclxuICAgICAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGNvbC00XCI+XHJcbiAgICAgICAgPFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fd29ya2Zsb3dfd29ya2Zsb3dfY3VycmVudF9zdGF0dXMnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJ3LTdcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICBbYmluZF09XCJ3b3JrZmxvd0luZm9ybWF0aW9uLndvcmtmbG93RXRhdFwiIFtpc0ZpbHRlcmVkXT1cInRydWVcIiBbaW5wdXROYW1lXT1cIidXb3JrZmxvd0V0YXQnXCJcclxuICAgICAgICAgIFtlbGVtZW50U291cmNlVXJsXT1cImdldFdvcmtmbG93RXRhdEFzS2V5VmFsdWVQYWlyXCIgW2xpc3RTb3VyY2VVcmxdPVwiZ2V0V29ya2Zsb3dFdGF0U3VpdmFudEFzS2V5VmFsdWVQYWlyXCJcclxuICAgICAgICAgIFtzaG93QWRkQnV0dG9uXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtzaG93U2VhcmNoQnV0dG9uXT1cImZhbHNlXCI+XHJcbiAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIm1vZGUgIT0gZm9ybU1vZGVzLmNyZWF0ZSB8fCB3b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvd1wiXHJcbiAgICAgICAgICBwcmVzZW50YXRpb25EZXNpZ25lcj1cImFkbWluaXN0cmF0aW9uX3dvcmtmbG93X3dvcmtmbG93X25leHRfc3RhdHVzXCJcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIgbm8tYm9yZGVyXCI+XHJcbiAgICAgICAgICA8VHNpLUxhYmVsIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl93b3JrZmxvd193b3JrZmxvd19uZXh0X3N0YXR1cydcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIGNsYXNzPVwidy03XCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCIgWyhiaW5kKV09XCJzZWxlY3RlZFdvcmtmbG93RXRhdFVpZFwiXHJcbiAgICAgICAgICAgIFtpc0ZpbHRlcmVkXT1cInRydWVcIiBbZWxlbWVudFNvdXJjZVVybF09XCJnZXRXb3JrZmxvd0V0YXRBc0tleVZhbHVlUGFpclwiIFtpbnB1dE5hbWVdPVwiJ1dvcmtmbG93RXRhdCdcIlxyXG4gICAgICAgICAgICBbbGlzdFNvdXJjZVVybF09XCJnZXRXb3JrZmxvd0V0YXRTdWl2YW50QXNLZXlWYWx1ZVBhaXJcIiAoYmluZENoYW5nZSk9XCJjb25maXJtVXBkYXRlV29ya2Zsb3dFdGF0KCRldmVudClcIlxyXG4gICAgICAgICAgICBbc2hvd0FkZEJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtzaG93U2VhcmNoQnV0dG9uXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT4iXX0=
|
|
653
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL3RzaS1mb3JtL3RzaS1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktZm9ybS90c2ktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBSUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGNBQWMsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE9BQU8sRUFBNEIsT0FBTyxFQUFtQywrQkFBK0IsRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4SyxPQUFPLEVBQUUsd0JBQXdCLEVBQXVDLE1BQU0saURBQWlELENBQUM7QUFFaEksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBRXZHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxpQkFBaUIsRUFB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d0JBQXdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudFJlZixcclxuICBDb250ZW50Q2hpbGQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdDb250YWluZXJSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmb3JtVHlwZSB9IGZyb20gJy4uLy4uL2NvbnN0cy9mb3JtLXR5cGUnO1xyXG5pbXBvcnQgeyBBZG1pbmlzdHJhdGlvbkVuZHBvaW50cyB9IGZyb20gJy4uLy4uL2VuZC1wb2ludHMvZW5kcG9pbnRzJztcclxuaW1wb3J0IHsgTW9kZXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IGlzTnVsbE9yRW1wdHkgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBJTW9kYWxTaXplIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEVudGl0eVByb3BlcnRpZXNSZXNwb25zZSwgRmljaGllciwgS2V5VmFsdWVQYWlyLCBPcHRpb25hbEVuZHBvaW50cywgdXBkYXRlRW50aXR5V29ya2Zsb3dJbmZvcm1hdGlvbiwgd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb2xvbm5lUGVyc29ubmFsaXNlZURhdGEsIENvbG9ubmVQZXJzb25uYWxpc2VlR3JvdXBlZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2R5bmFtaWMtZm9ybS9jb2xvbm5lLXBlcnNvbm5hbGlzZWUnO1xyXG5pbXBvcnQgeyBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3N0YXR1cy9jb2xvci1zdGF0dXMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9sb2NhbGl6ZS5waXBlJztcclxuaW1wb3J0IHsgRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uL2VudGl0eS1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9keW5hbWljLWZvcm0vY29sb25uZS1wZXJzb25uYWxpc2VlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEeW5hbWljRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9keW5hbWljLWZvcm0vZHluYW1pYy1mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtdWxhaXJlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2R5bmFtaWMtZm9ybS9mb3JtdWxhaXJlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWNoaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpY2hpZXIvZmljaGllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybVN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0vZm9ybS1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGF5b3V0SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xheW91dC9sYXlvdXQtaGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vZXJyb3ItcmVzcG9uc2UtbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpQ29uZmlybWF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktY29uZmlybWF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL3RzaS1ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFJlcXVlc3RUcmFja2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcXVlc3QtbWFuYWdlbWVudC9yZXF1ZXN0LXRyYWNrZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eVN0YXR1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0dXMvZW50aXR5U3RhdHVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGF0dXNDb2xvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0dXMvc3RhdHVzLWNvbG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd29ya2Zsb3cvd29ya2Zsb3ctY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVwb3J0aW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVwb3J0aW5nL3JlcG9ydGluZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lNb2RhbEZvb3RlckNvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1tb2RhbC1mb290ZXIvdHNpLW1vZGFsLWZvb3Rlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lNb2RhbEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1tb2RhbC1oZWFkZXIvdHNpLW1vZGFsLWhlYWRlci5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0c2ktZm9ybScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktZm9ybS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHNpRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XHJcbiAgcHVibGljIGxvY2FsaXplPyA9IGluamVjdChMb2NhbGl6ZVBpcGUpXHJcblxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIGZpZWxkc1xyXG4gIHByaXZhdGUgX2lzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBwcm9wZXJ0aWVzXHJcbiAgQFZpZXdDaGlsZCgnZm9ybVJlZicpIGZvcm1SZWY/OiBOZ0Zvcm07XHJcbiAgQFZpZXdDaGlsZChcInJlcG9ydGluZ0FwcFwiKSByZXBvcnRpbmdBcHA/OiBSZXBvcnRpbmdDb21wb25lbnRcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGlucHV0c1xyXG4gIEBJbnB1dCgpIGNsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGF1dG9jb21wbGV0ZTogc3RyaW5nID0gJ29mZic7XHJcbiAgLy8gQElucHV0KCkgZm9ybU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvLyBASW5wdXQoKSBmb3JtRW5kcG9pbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KCkgb3B0aW9uYWxFbmRwb2ludHM/OiBPcHRpb25hbEVuZHBvaW50cztcclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1vZGFsU2l6ZT86IElNb2RhbFNpemU7XHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBwcml2YXRlIF9kZXNjcmltaW5hdG9yVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBnZXQgZGVzY3JpbWluYXRvclZhbHVlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9kZXNjcmltaW5hdG9yVmFsdWU7IH1cclxuICBzZXQgZGVzY3JpbWluYXRvclZhbHVlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2Rlc2NyaW1pbmF0b3JWYWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5pc0Rlc2NyaW1pbmF0b3JWYWx1ZVNldCA9IHRydWU7XHJcbiAgICB0aGlzLmNhbGN1bGF0ZUZvcm1zSW5mb3MoKTtcclxuICB9XHJcblxyXG4gIGVudGl0eVN0YXR1c0xpc3Q6IEtleVZhbHVlUGFpcjxzdHJpbmcsIHN0cmluZz5bXSA9IFtdO1xyXG4gIHN0YXR1c0NvbHVtbk5hbWU6IHN0cmluZyA9ICcnXHJcbiAgcHJpdmF0ZSBfYWxsRW50aXR5U3RhdHVzZXM6IEtleVZhbHVlUGFpcjxzdHJpbmcsIHN0cmluZz5bXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIGFwcGx5QWxsb3dlZFN0YXR1c0ZpbHRlcigpOiB2b2lkIHtcclxuXHJcbiAgICBsZXQgc3RhdHVzZXNGZXRjaGVkID0gWy4uLnRoaXMuX2FsbEVudGl0eVN0YXR1c2VzXTtcclxuXHJcbiAgICBpZiAodGhpcy5fYWxsb3dlZFN0YXR1cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHN0YXR1c2VzRmV0Y2hlZCA9IHN0YXR1c2VzRmV0Y2hlZC5maWx0ZXIoXHJcbiAgICAgICAgeCA9PiB4LmtleSAhPSBudWxsICYmIHRoaXMuX2FsbG93ZWRTdGF0dXMhLmluY2x1ZGVzKHgua2V5KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW50aXR5U3RhdHVzTGlzdCA9IHN0YXR1c2VzRmV0Y2hlZDtcclxuICB9XHJcblxyXG5cclxuICBub21icmVEb2N1bWVudHM6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICBpc0RyYWdPdmVyID0gZmFsc2U7XHJcbiAgbWVzc2FnZVBvc2l0aW9uID0geyB4OiAwLCB5OiAwIH07XHJcbiAgcHJpdmF0ZSBkcmFnRW50ZXJDb3VudCA9IDA7XHJcbiAgcHJpdmF0ZSBfZm9ybU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgZm9ybUVuZHBvaW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybUVuZHBvaW50O1xyXG4gIH1cclxuXHJcbiAgc2V0IGZvcm1FbmRwb2ludCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9mb3JtRW5kcG9pbnQgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBmb3JtTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1OYW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZvcm1OYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2Zvcm1OYW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYnVzaW5lc3NDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfbW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2Zvcm1FbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX3N0YXR1czogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2FsbG93ZWRTdGF0dXM/OiBzdHJpbmdbXTtcclxuXHJcblxyXG4gIC8vIEdldHRlciBmb3IgYnVzaW5lc3NDbGFzc1xyXG4gIGdldCBidXNpbmVzc0NsYXNzKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnVzaW5lc3NDbGFzcztcclxuICB9XHJcblxyXG4gIC8vIFNldHRlciBmb3IgYnVzaW5lc3NDbGFzc1xyXG4gIHNldCBidXNpbmVzc0NsYXNzKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2J1c2luZXNzQ2xhc3MgPSB2YWx1ZTtcclxuICAgIHRoaXMuaXNCdXNpbmVzc0NsYXNzU2V0ID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmdldENvbG9ubmVQZXJzb25uYWxpc2VlKCk7XHJcbiAgICB0aGlzLmdldEVudGl0eVN0YXR1cygpO1xyXG4gICAgdGhpcy5nZXRTdGF0dXNNZXRhRm9yQ29tYm8oKTtcclxuICAgIHRoaXMuY2hlY2tFbnRpdHlJbmZvKCk7XHJcbiAgICB0aGlzLmNhbGN1bGF0ZUZvcm1zSW5mb3MoKTtcclxuICB9XHJcblxyXG4gIC8vIEdldHRlciBmb3IgaWRcclxuICBnZXQgaWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9pZDtcclxuICB9XHJcblxyXG4gIC8vIFNldHRlciBmb3IgaWRcclxuICBzZXQgaWQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5faWQgPSB2YWx1ZTtcclxuICAgIHRoaXMuZ2V0Q29sb25uZVBlcnNvbm5hbGlzZWUoKTtcclxuICAgIHRoaXMuZ2V0Tm9tYnJlRmljaGllcigpO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0dGVyIGZvciBzdGF0dXNcclxuICBnZXQgc3RhdHVzKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgLy8gU2V0dGVyIGZvciBzdGF0dXNcclxuICBzZXQgc3RhdHVzKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3N0YXR1cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5vblN0YXR1c0NoYW5nZS5lbWl0KHRoaXMuX3N0YXR1cyk7XHJcbiAgfVxyXG5cclxuICBzZXQgYWxsb3dlZFN0YXR1cyh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2FsbG93ZWRTdGF0dXMgPSB2YWx1ZTtcclxuICAgIHRoaXMuYXBwbHlBbGxvd2VkU3RhdHVzRmlsdGVyKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYWxsb3dlZFN0YXR1cygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dlZFN0YXR1cztcclxuICB9XHJcblxyXG4gIHNldCBtb2RlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX21vZGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuc2hvd0FjdGlvbkJ1dHRvbiA9IHRoaXMubW9kZSAhPSBNb2Rlcy5jcmVhdGU7XHJcbiAgICB0aGlzLmdldENvbG9ubmVQZXJzb25uYWxpc2VlKCk7XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlRm9ybXNWaXNpYmlsaXR5KCk7XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVJblRzaU1vZGFsRm9vdGVyKClcclxuICB9XHJcblxyXG4gIGdldCBtb2RlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgc2V0IGlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgaXNDcmVhdGVPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gb3V0cHV0c1xyXG4gIEBPdXRwdXQoKSBvblN1Ym1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgb25TdWJtaXRGb3JtV29ya2Zsb3dDb25maWd1cmF0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtUmVmQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TmdGb3JtPiA9IG5ldyBFdmVudEVtaXR0ZXI8TmdGb3JtPigpO1xyXG4gIEBPdXRwdXQoKSBvblN0YXR1c0NoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhclRlbXBsYXRlJykgdG9vbGJhclRlbXBsYXRlUmVmICE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChUc2lNb2RhbEhlYWRlckNvbXBvbmVudCkgbW9kYWxIZWFkZXJDb21wPzogVHNpTW9kYWxIZWFkZXJDb21wb25lbnQ7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoVHNpTW9kYWxGb290ZXJDb21wb25lbnQpIG1vZGFsRm9vdGVyQ29tcD86IFRzaU1vZGFsRm9vdGVyQ29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdkeW5hbWljVG9vbGJhckNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIGR5bmFtaWNUb29sYmFyQ29udGFpbmVycyE6IFF1ZXJ5TGlzdDxWaWV3Q29udGFpbmVyUmVmPjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignZHluYW1pY0Zvb3RlckNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIGR5bmFtaWNGb290ZXJzQ29udGFpbmVycyE6IFF1ZXJ5TGlzdDxWaWV3Q29udGFpbmVyUmVmPjtcclxuXHJcbiAgcHJpdmF0ZSBfaW5wdXRUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICBnZXQgaW5wdXRUaXRsZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kYWxIZWFkZXJDb21wPy5pbnB1dFRpdGxlXHJcbiAgfVxyXG5cclxuICBzZXQgaW5wdXRUaXRsZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9pbnB1dFRpdGxlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBjb2xvbm5lc1BlcnNvbm5hbGlzZWVHcm91cGVkOiBDb2xvbm5lUGVyc29ubmFsaXNlZUdyb3VwZWRSZXNwb25zZVtdID0gW107XHJcbiAgY2FuU2hvd0Zvcm1zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZm9ybXNPZkJ1c2luZXNzQ2xhc3M6IGFueVtdID0gW107XHJcbiAgcHJpdmF0ZSBfZG9lc0hhdmVGb3JtczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdldCBkb2VzSGF2ZUZvcm1zKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fZG9lc0hhdmVGb3JtczsgfVxyXG4gIHNldCBkb2VzSGF2ZUZvcm1zKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kb2VzSGF2ZUZvcm1zID0gdmFsdWU7XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlRm9ybXNWaXNpYmlsaXR5KCk7XHJcbiAgfVxyXG5cclxuICBpc0Rlc2NyaW1pbmF0b3JWYWx1ZVNldDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzQnVzaW5lc3NDbGFzc1NldDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzRm9ybXNJbmZvc0NhbGN1bGF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpZ25vcmVEZXNjcmltaW5hdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGFzQWN0aXZlUmVxdWVzdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHJlcXVlc3RUcmFja2VyU3RhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGR5bmFtaWNGb3JtU2VydmljZSA9IGluamVjdChEeW5hbWljRm9ybVNlcnZpY2UpO1xyXG4gIGZvcm11bGFpcmVTZXJ2aWNlIDogRm9ybXVsYWlyZVNlcnZpY2UgPSBpbmplY3QoRm9ybXVsYWlyZVNlcnZpY2UpO1xyXG4gIGVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlIDogRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UgPSBpbmplY3QoRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UpO1xyXG4gIHJlcXVlc3RUcmFja2VyU2VydmljZSA6IFJlcXVlc3RUcmFja2VyU2VydmljZSA9IGluamVjdChSZXF1ZXN0VHJhY2tlclNlcnZpY2UpO1xyXG4gIHNob3dBY3Rpb25CdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8jcmVnaW9uIGN0b3JcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZW50aXR5U3RhdHVzU2VydmljZTogRW50aXR5U3RhdHVzU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RhdHVzQ29sb3JTZXJ2aWNlOiBTdGF0dXNDb2xvclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgX2ZpY2hpZXJTZXJ2aWNlOiBGaWNoaWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZTogRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdHNpQ29uZmlybVNlcnZpY2U6IFRzaUNvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90c2lOb3RpZmljYXRpb25TZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX2xheW91dEhlbHBlclNlcnZpY2U6IExheW91dEhlbHBlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZTogV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHB1YmxpYyBfY29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlOiBDb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mb3JtU3RhdGVTZXJ2aWNlIDogRm9ybVN0YXRlU2VydmljZSxcclxuICAgIHB1YmxpYyByZWY/OiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgcHVibGljIGNvbmZpZz86IER5bmFtaWNEaWFsb2dDb25maWcsXHJcblxyXG4gICkgeyB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBpZiAodGhpcy5yZXBvcnRpbmdBcHApIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSAmJiB0aGlzLnJlcG9ydGluZ0FwcC5zaG93UHJlc2VudGF0aW9uRGVzaWduZXJDb25maWdCdXR0b24pIHtcclxuICAgICAgICB0aGlzLnJlcG9ydGluZ0FwcC5zaG93UHJlc2VudGF0aW9uRGVzaWduZXJDb25maWdCdXR0b24gPSBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNhdmVkRGF0YVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnNhdmVkRGF0YVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5yZXF1ZXN0VHJhY2tlclN0YXRlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMucmVxdWVzdFRyYWNrZXJTdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIHZhcmlhYmxlc1xyXG4gIHByaXZhdGUgX3dvcmtmbG93SW5mb3JtYXRpb246IHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlID0gbmV3IHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlKCk7XHJcbiAgc2V0IHdvcmtmbG93SW5mb3JtYXRpb24odmFsdWU6IHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlKSB7XHJcbiAgICB0aGlzLl93b3JrZmxvd0luZm9ybWF0aW9uID0gdmFsdWVcclxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKClcclxuICAgIGlmICh0aGlzLm1vZGUgIT0gTW9kZXMuY3JlYXRlICYmIHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbj8ud29ya2Zsb3dFdGF0KSB7XHJcbiAgICAgIHRoaXMuZ2V0V29ya2Zsb3dFdGF0U3VpdmFudEFzS2V5VmFsdWVQYWlyID0gQWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0V29ya2Zsb3dFdGF0U3VpdmFudEJ5V29ya2Zsb3dFdGF0KHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbi53b3JrZmxvd0V0YXQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBhc3luYyBnZXRXb3JrZmxvd0VudGl0eUluZm9ybWF0aW9uKGJ1c2luZXNzQ2xhc3M6IHN0cmluZywgdWlkT2JqZWN0Pzogc3RyaW5nLCBkaXNjcmltaW5hdG9yQ2xhc3NOYW1lID86IHN0cmluZywgXHJcbiAgLy8gZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSA/OiBzdHJpbmdcclxuICAvLyApIHtcclxuICAvLyAgIGlmICh0aGlzLm1vZGUgIT0gTW9kZXMuY3JlYXRlKSB7XHJcbiAgLy8gICAgIHJldHVybjtcclxuICAvLyAgIH1cclxuICAvLyAgIHRyeSB7XHJcbiAgLy8gICAgIGxldCByZXF1ZXN0OiBHZXRXb3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXF1ZXN0ID0gbmV3IEdldFdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlcXVlc3QoKTtcclxuICAvLyAgICAgcmVxdWVzdC5jbGFzc05hbWUgPSBidXNpbmVzc0NsYXNzXHJcbiAgLy8gICAgIHJlcXVlc3QudWlkT2JqZXQgPSB1aWRPYmplY3Q7XHJcbiAgLy8gICAgIHJlcXVlc3QuZGlzY3JpbWluYXRvckNsYXNzTmFtZSA9IGRpc2NyaW1pbmF0b3JDbGFzc05hbWVcclxuICAvLyAgICAgcmVxdWVzdC5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lID0gZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZVxyXG4gIC8vICAgICByZXF1ZXN0LmRpc2NyaW1pbmF0b3JWYWx1ZSA9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgLy8gICAgIHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbiA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5V29ya2xmb3dJbnN0YW5jZUluZm9ybWF0aW9uKHJlcXVlc3QpKVxyXG4gIC8vICAgICBjb25zb2xlLmxvZyhcInRoaXMud29ya2Zsb3dJbmZvcm1hdGlvblwiLCB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24pXHJcbiAgLy8gICAgIGlmICh0aGlzLndvcmtmbG93SW5mb3JtYXRpb24pIHtcclxuICAvLyAgICAgICBsZXQgd29ya2Zsb3dFdGF0Rm9ybSA9IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2Uud29ya2Zsb3dFdGF0Rm9ybUZvckN1cnJlbnRGb3JtXHJcbiAgLy8gICAgICAgICA/LmZpbmQoeCA9PiB4LnVpZCA9PSB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93RXRhdClcclxuICAvLyAgICAgICBpZiAod29ya2Zsb3dFdGF0Rm9ybSkge1xyXG4gIC8vICAgICAgICAgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS53b3JrZmxvd0V0YXRGb3JGb3JDdXJyZW50RW50aXR5Rm9ybSA9XHJcbiAgLy8gICAgICAgICAgIHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UubWFwV29ya2Zsb3dFdGF0Rm9ybVRvUHJlc2VudGF0aW9uU2V0dGluZyh3b3JrZmxvd0V0YXRGb3JtLndvcmtmbG93RXRhdHNGb3JtcylcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyAgIGNhdGNoIChlcnJvcikge1xyXG4gIC8vICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgZ2V0IHdvcmtmbG93SW5mb3JtYXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fd29ya2Zsb3dJbmZvcm1hdGlvblxyXG4gIH1cclxuICBnZXRXb3JrZmxvd0V0YXRBc0tleVZhbHVlUGFpciA9XHJcbiAgICBBZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRXb3JrZmxvd0V0YXRBc0tleVZhbHVlUGFpcigpO1xyXG4gIGdldFdvcmtmbG93RXRhdFN1aXZhbnRBc0tleVZhbHVlUGFpciA9ICcnO1xyXG4gIHNlbGVjdGVkV29ya2Zsb3dFdGF0VWlkOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsO1xyXG4gIGlzQ29tYm9EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGZvcm1Nb2RlcyA9IE1vZGVzO1xyXG5cclxuICBjb25maWdNb2RlQnV0dG9uSWQgPSBcImNvbmZnLW1vZGUtYnV0dG9uLWZyb20tZm9ybVwiO1xyXG4gIGN1ZENvbXBvbmVudDogYW55XHJcbiAgY29uZmlnRGF0YTogYW55XHJcbiAgc2F2ZWREYXRhU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uXHJcblxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VkQ29tcG9uZW50ID0gdGhpcy5jb25maWc/LmRhdGE/LmN1ZENvbXBvbmVudDtcclxuICAgIHRoaXMuY29uZmlnRGF0YSA9IHRoaXMuY29uZmlnXHJcbiAgICB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24gPSB0aGlzLmNvbmZpZz8uZGF0YT8ud29ya2Zsb3dJbmZvcm1hdGlvbiA/PyBuZXcgd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UoKVxyXG4gICAgY29uc29sZS5sb2coXCJ3b3JrZmxvd0luZm9ybWF0aW9uID0+IFwiLCB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24pXHJcbiAgICBpZiAodGhpcy5tb2RlICE9IE1vZGVzLmNyZWF0ZSAmJiB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93RXRhdCkge1xyXG4gICAgICB0aGlzLmdldFdvcmtmbG93RXRhdFN1aXZhbnRBc0tleVZhbHVlUGFpciA9IEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldFdvcmtmbG93RXRhdFN1aXZhbnRCeVdvcmtmbG93RXRhdCh0aGlzLndvcmtmbG93SW5mb3JtYXRpb24ud29ya2Zsb3dFdGF0KVxyXG4gICAgfVxyXG4gICAgdGhpcy5faW5pdEZvcm1TYXZlU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5faW5pdGlhbGl6ZVJlcXVlc3RUcmFja2VyU3RhdGVTdWJzY3JpcHRpb24oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRGb3JtU2F2ZVN1YnNjcmlwdGlvbigpIHtcclxuICAgIHRoaXMuc2F2ZWREYXRhU3Vic2NyaXB0aW9uID0gdGhpcy5fZm9ybVN0YXRlU2VydmljZVxyXG4gICAgICAuZGF0YVNhdmVkT2JzZXJ2YWJsZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgYXN5bmMgKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmNvbG9ubmVzUGVyc29ubmFsaXNlZURhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5jb2xvbm5lc1BlcnNvbm5hbGlzZWVEYXRhXHJcbiAgICAgICAgICAgICAgLmZvckVhY2goeCA9PiB4Lm9jY3VyZW5jZSA9IGRhdGEpXHJcbiAgICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2NvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZS5hZGRPclVwZGF0ZUZvcm11bGFpcmVEYXRhKHRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmNvbG9ubmVzUGVyc29ubmFsaXNlZURhdGEpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gIH1cclxuXHJcbiAgZm9ybVR5cGUgPSBmb3JtVHlwZTtcclxuICBwcml2YXRlIGdldENvbG9ubmVQZXJzb25uYWxpc2VlKCkge1xyXG4gICAgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcyAmJiB0aGlzLm1vZGUgPT0gTW9kZXMuY3JlYXRlKSB7XHJcbiAgICAgIHRoaXMuX2dldENvbG9ubmVQZXJzb25uYWxpc2UodGhpcy5idXNpbmVzc0NsYXNzKVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5idXNpbmVzc0NsYXNzICYmIHRoaXMubW9kZSAhPSBNb2Rlcy5jcmVhdGUgJiYgdGhpcy5pZCkge1xyXG4gICAgICB0aGlzLl9nZXRDb2xvbm5lUGVyc29ubmFsaXNlKHRoaXMuYnVzaW5lc3NDbGFzcywgdGhpcy5pZClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldENvbG9ubmVQZXJzb25uYWxpc2UoYnVzaW5lc3NDbGFzczogc3RyaW5nLCBpZD86IHN0cmluZykge1xyXG4gICAgdGhpcy5fY29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlLmdldENvbG9ubmVzUGVyc29ubmFsaXNlZShidXNpbmVzc0NsYXNzLCB0aGlzLmlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgcmVzLmZvckVhY2goY3BnID0+IHtcclxuICAgICAgICAgIGNwZy5jb2xvbm5lcy5mb3JFYWNoKGNwID0+IHtcclxuICAgICAgICAgICAgaWYgKCFjcC5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgY3AuZGF0YSA9IG5ldyBDb2xvbm5lUGVyc29ubmFsaXNlZURhdGEoXHJcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlkLCBjcC51aWQsXHJcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmNvbG9ubmVzUGVyc29ubmFsaXNlZUdyb3VwZWQgPSByZXM7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fcHJvY2Vzc0R5bmFtaWNUYWJzKClcclxuICAgICAgICB9LCAwKTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJlcnJvciB3aGVuIGdldHRpbmcgbGlzdCBvZiBjb2xvbm5lIHBlcnNvbm5hbGlzZWVcIiwgZXJyKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHRvZ2dsZURlc2lnbk1vZGUoZXZlbnQ6IGFueSkge1xyXG4gICAgLy8gdGhpcy5jb25maWdEYXRhLmRhdGEuY3VkQ29tcG9uZW50ID0gdW5kZWZpbmVkXHJcbiAgICAvLyB0aGlzLmNvbmZpZ0RhdGEuZGF0YS53b3JrZmxvd0luZm9ybWF0aW9uID0gdW5kZWZpbmVkXHJcblxyXG4gICAgLy8gdGhpcy5yZWY/LmNsb3NlKCk7XHJcbiAgICAvLyB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSA9IHRydWVcclxuICAgIC8vIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuY3VycmVudEZvcm1OYW1lID0gdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKClcclxuXHJcbiAgICAvLyB0aGlzLnJlZiA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLmN1ZENvbXBvbmVudCwgdGhpcy5jb25maWdEYXRhKTtcclxuICAgIC8vIHRoaXMucmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHtcclxuICAgIC8vICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgPSBmYWxzZVxyXG4gICAgLy8gICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmN1cnJlbnRGb3JtTmFtZSA9IHVuZGVmaW5lZFxyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcm9jZXNzRHluYW1pY1RhYnMoKSB7XHJcbiAgICB0aGlzLmR5bmFtaWNUb29sYmFyQ29udGFpbmVycy50b0FycmF5KCkuZm9yRWFjaChjb250YWluZXIgPT4ge1xyXG4gICAgICBjb250YWluZXIuY2xlYXIoKTtcclxuICAgICAgY29uc3QgY29tcFJlZjogQ29tcG9uZW50UmVmPFRzaU1vZGFsSGVhZGVyQ29tcG9uZW50PiA9IGNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoVHNpTW9kYWxIZWFkZXJDb21wb25lbnQpO1xyXG5cclxuICAgICAgY29tcFJlZi5pbnN0YW5jZS50b29sYmFyVGVtcGxhdGVIZWFkZXIgPSB0aGlzLm1vZGFsSGVhZGVyQ29tcCEudG9vbGJhclRlbXBsYXRlSGVhZGVyO1xyXG4gICAgICBjb21wUmVmLmluc3RhbmNlLmlucHV0VGl0bGUgPSB0aGlzLm1vZGFsSGVhZGVyQ29tcCEuaW5wdXRUaXRsZTtcclxuXHJcbiAgICAgIGNvbXBSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5keW5hbWljRm9vdGVyc0NvbnRhaW5lcnMudG9BcnJheSgpLmZvckVhY2goY29udGFpbmVyID0+IHtcclxuICAgICAgY29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICAgIGNvbnN0IGNvbXBSZWY6IENvbXBvbmVudFJlZjxUc2lNb2RhbEZvb3RlckNvbXBvbmVudD4gPSBjb250YWluZXIuY3JlYXRlQ29tcG9uZW50KFRzaU1vZGFsRm9vdGVyQ29tcG9uZW50KTtcclxuICAgICAgY29tcFJlZi5pbnN0YW5jZS5mb290ZXJUZW1wbGF0ZVJlZiA9IHRoaXMubW9kYWxGb290ZXJDb21wPy5mb290ZXJUZW1wbGF0ZVJlZlxyXG4gICAgICBjb21wUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50b29sYmFyVGVtcGxhdGVSZWYgJiYgdGhpcy5tb2RhbEhlYWRlckNvbXApIHtcclxuICAgICAgdGhpcy5tb2RhbEhlYWRlckNvbXAudG9vbGJhclRlbXBsYXRlSGVhZGVyID0gdGhpcy50b29sYmFyVGVtcGxhdGVSZWY7XHJcbiAgICAgIHRoaXMuaW5wdXRUaXRsZSA9IHRoaXMubW9kYWxIZWFkZXJDb21wLmlucHV0VGl0bGU7XHJcblxyXG4gICAgICB0aGlzLm1vZGFsSGVhZGVyQ29tcC50b29sYmFyVGVtcGxhdGVIZWFkZXIgPSB0aGlzLnRvb2xiYXJUZW1wbGF0ZVJlZjtcclxuICAgICAgdGhpcy5pbnB1dFRpdGxlID0gdGhpcy5tb2RhbEhlYWRlckNvbXAuaW5wdXRUaXRsZTtcclxuICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm1SZWZDaGFuZ2UuZW1pdCh0aGlzLmZvcm1SZWYpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRm9ybVN1Ym1pdChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZih0aGlzLmhhc0FjdGl2ZVJlcXVlc3RzKSByZXR1cm47XHJcbiAgICBcclxuICAgIGlmICh0aGlzLndvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgIHRoaXMub25TdWJtaXRGb3JtV29ya2Zsb3dDb25maWd1cmF0aW9uLmVtaXQoZXZlbnQpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zeW5jRHluYW1pY0NvbHVtbkRhdGFUb0R5bmFtaWNGb3JtU2VydmljZSgpXHJcbiAgICAgIHRoaXMub25TdWJtaXQuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzeW5jRHluYW1pY0NvbHVtbkRhdGFUb0R5bmFtaWNGb3JtU2VydmljZSgpIHtcclxuICAgIGNvbnN0IGV4aXN0aW5nVWlkcyA9IG5ldyBTZXQoXHJcbiAgICAgIHRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmNvbG9ubmVzUGVyc29ubmFsaXNlZURhdGEubWFwKHggPT4geC5jb2xvbm5lUGVyc29ubmFsaXNlZVVpZClcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jb2xvbm5lc1BlcnNvbm5hbGlzZWVHcm91cGVkLmZvckVhY2goY3BnID0+IHtcclxuICAgICAgY3BnLmNvbG9ubmVzLmZvckVhY2goY3AgPT4ge1xyXG4gICAgICAgIGlmICghZXhpc3RpbmdVaWRzLmhhcyhjcC51aWQpKSB7XHJcbiAgICAgICAgICBpZiAoIWNwLmRhdGEpIHtcclxuICAgICAgICAgICAgY3AuZGF0YSA9IG5ldyBDb2xvbm5lUGVyc29ubmFsaXNlZURhdGEoXHJcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIHRoaXMuaWQsIGNwLnVpZCxcclxuICAgICAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IG5ld0RhdGEgPSBuZXcgQ29sb25uZVBlcnNvbm5hbGlzZWVEYXRhKFxyXG4gICAgICAgICAgICBjcD8uZGF0YT8udWlkID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgY3A/LmRhdGE/Lm9jY3VyZW5jZSA/PyB0aGlzLmlkLFxyXG4gICAgICAgICAgICBjcC51aWQsXHJcbiAgICAgICAgICAgIGNwLmRhdGEudmFsZXVyQm9vbGVhbixcclxuICAgICAgICAgICAgY3AuZGF0YS52YWxldXJJbnQsXHJcbiAgICAgICAgICAgIGNwLmRhdGEudmFsZXVyRGVjaW1hbCxcclxuICAgICAgICAgICAgY3AuZGF0YS52YWxldXJTdHJpbmcsXHJcbiAgICAgICAgICAgIGNwLmRhdGEudmFsZXVyQmluYXJ5LFxyXG4gICAgICAgICAgICBjcC5vYnNlcnZhdGlvblxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5jb2xvbm5lc1BlcnNvbm5hbGlzZWVEYXRhLnB1c2gobmV3RGF0YSk7XHJcblxyXG4gICAgICAgICAgZXhpc3RpbmdVaWRzLmFkZChjcC51aWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcInRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmNvbG9ubmVzUGVyc29ubmFsaXNlZURhdGEgPT4gXCIsXHJcbiAgICAgIHRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmNvbG9ubmVzUGVyc29ubmFsaXNlZURhdGFcclxuICAgIClcclxuXHJcbiAgfVxyXG5cclxuICBjb25maXJtVXBkYXRlV29ya2Zsb3dFdGF0KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGV2ZW50KVxyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuX3RzaUNvbmZpcm1TZXJ2aWNlLmNvbmZpcm0oXCJhZG1pbmlzdHJhdGlvbl9jb25maXJtX3N0YXR1c19jaGFuZ2VcIiwgXCJhZG1pbmlzdHJhdGlvbl9jb25maXJtYXRpb25fdGl0bGVcIixcclxuICAgICAgICAocmVzdWx0OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZVxyXG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyB1cGRhdGVFbnRpdHlXb3JrZmxvd0luZm9ybWF0aW9uKClcclxuICAgICAgICAgICAgcmVxdWVzdC5jbGFzc05hbWUgPSB0aGlzLl9idXNpbmVzc0NsYXNzO1xyXG4gICAgICAgICAgICByZXF1ZXN0LnVpZE9iamVjdCA9IHRoaXMuX2lkXHJcbiAgICAgICAgICAgIHJlcXVlc3QubmV3V29ya2Zsb3dTdGF0dXMgPSBldmVudDtcclxuICAgICAgICAgICAgcmVxdWVzdC53b3JrZmxvdyA9IHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbj8ud29ya2Zsb3dVaWQ7XHJcbiAgICAgICAgICAgIHJlcXVlc3Qud29ya2Zsb3dFdGF0ID0gdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uLndvcmtmbG93RXRhdFxyXG4gICAgICAgICAgICByZXF1ZXN0LndvcmtmbG93SW5zdGFuY2VVaWQgPSB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93SW5zdGFuY2VVaWRcclxuICAgICAgICAgICAgcmVxdWVzdC53b3JrZmxvd0V0YXQgPSB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93RXRhdFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXF1ZXN0KVxyXG4gICAgICAgICAgICB0aGlzLndvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UudXBkYXRlRW50aXR5V29ya2Zsb3dJbmZvcm1hdGlvbihyZXF1ZXN0KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSlcclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEuc3RhdHVzICE9IG51bGwgJiYgZGF0YS5zdGF0dXMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBkYXRhLnN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd0V0YXRVaWQgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3RzaU5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoZXJyb3I/LmVycm9yKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93RXRhdFVpZCA9IG51bGxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXR1c01ldGFkYXRhQ29tYm9TdGF0dXM/OiBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlO1xyXG5cclxuICBwcml2YXRlIGdldFN0YXR1c01ldGFGb3JDb21ibygpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLnN0YXR1c0NvbG9yU2VydmljZS5nZXRTdGF0dXNDb2xvckRldGFpbHNCeUJ1c2luZXNzQ2xhc3NOYW1lKHRoaXMuYnVzaW5lc3NDbGFzcyEpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChkYXRhOiBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKCFkYXRhKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zdGF0dXNNZXRhZGF0YUNvbWJvU3RhdHVzID0gZGF0YTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFbnRpdHlTdGF0dXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVudGl0eVN0YXR1c1NlcnZpY2UuZ2V0RW50aXR5U3RhdHVzKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGE6IEVudGl0eVByb3BlcnRpZXNSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXR1c0NvbHVtbk5hbWUgPSBkYXRhLnN0YXR1c0NvbHVtbk5hbWUgPz8gXCJcIjtcclxuXHJcbiAgICAgICAgaWYgKGRhdGEuZW50aXR5U3RhdHVzICYmIEFycmF5LmlzQXJyYXkoZGF0YS5lbnRpdHlTdGF0dXMpKSB7XHJcblxyXG4gICAgICAgICAgdGhpcy5fYWxsRW50aXR5U3RhdHVzZXMgPSBkYXRhLmVudGl0eVN0YXR1cztcclxuXHJcbiAgICAgICAgICB0aGlzLmFwcGx5QWxsb3dlZFN0YXR1c0ZpbHRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSBNb2Rlcy5jcmVhdGUgJiZcclxuICAgICAgICAgICAgaXNOdWxsT3JFbXB0eSh0aGlzLnN0YXR1cykgJiZcclxuICAgICAgICAgICAgIWlzTnVsbE9yRW1wdHkoZGF0YS5kZWZhdWx0U3RhdHVzKSkge1xyXG4gICAgICAgICAgdGhpcy5zdGF0dXMgPSBkYXRhLmRlZmF1bHRTdGF0dXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuc2V0TWVzc2FnZVBvc2l0aW9uKGV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xyXG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdO1xyXG4gICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCk/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XHJcbiAgICAgIHRoaXMuaXNEcmFnT3ZlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnVwbG9hZEZpbGUoZmlsZSwgZmlsZUV4dGVuc2lvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwbG9hZEZpbGUoZmlsZTogRmlsZSwgZmlsZUV4dGVuc2lvbjogc3RyaW5nKSB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgcmVhZGVyLm9ubG9hZCA9IChlOiBQcm9ncmVzc0V2ZW50PEZpbGVSZWFkZXI+KSA9PiB7XHJcbiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gZS50YXJnZXQ/LnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcclxuICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgYmFzZTY0Q29udGVudCA9IHRoaXMuYXJyYXlCdWZmZXJUb0Jhc2U2NChhcnJheUJ1ZmZlcik7XHJcblxyXG4gICAgICBjb25zdCBmaWNoaWVyVG9TZW5kID0gbmV3IEZpY2hpZXIoKTtcclxuICAgICAgZmljaGllclRvU2VuZC5kYXRlRmljaGllciA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQubm9tID0gZmlsZS5uYW1lO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLm9iamV0ID0gJyc7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQubm9tRmljaGllckNvbXBsZXQgPSBmaWxlLm5hbWU7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQuZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgZmljaGllclRvU2VuZC5jb250ZW51ID0gYmFzZTY0Q29udGVudDtcclxuICAgICAgZmljaGllclRvU2VuZC50YWJsZUxpZWUgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQucGtleSA9IHRoaXMuaWQ/LnRvU3RyaW5nKCk7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQuZXh0ZW5zaW9uID0gZmlsZUV4dGVuc2lvblxyXG5cclxuICAgICAgdGhpcy5fZmljaGllclNlcnZpY2UuY3JlYXRlKGZpY2hpZXJUb1NlbmQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5nZXROb21icmVGaWNoaWVyKCk7XHJcbiAgICAgICAgICB0aGlzLl90c2lOb3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXCJmaWNoaWVyX2pvaW50XCIpO1xyXG4gICAgICAgICAgdGhpcy5vblNhdmUuZW1pdCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XHJcbiAgfVxyXG5cclxuICBhcnJheUJ1ZmZlclRvQmFzZTY0KGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGJpbmFyeSA9ICcnO1xyXG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgY29uc3QgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ0b2EoYmluYXJ5KTtcclxuICB9XHJcblxyXG4gIGhpZGUodmFsPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5yZWYgIT0gbnVsbCAmJiB0aGlzLnJlZiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHZhbCA9PSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMucmVmPy5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZWY/LmNsb3NlKHZhbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGwoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMubG9jYWxpemUgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLmxvY2FsaXplICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oa2V5KTtcclxuICAgIH1cclxuICAgIHJldHVybiBrZXk7XHJcbiAgfVxyXG5cclxuICBnZXROb21icmVGaWNoaWVyKCkge1xyXG4gICAgaWYgKHRoaXMuaWQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9maWNoaWVyU2VydmljZVxyXG4gICAgICAgIC5HZXROb21icmVGaWNoaWVySm9pbnRCeUlkKHRoaXMuaWQgPz8gXCJcIilcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubm9tYnJlRG9jdW1lbnRzID0gZGF0YTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAvLyB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB0byBnZXQgbnVtYmVyIG9mIGZpbGVzIG9uIHRoaXMgcmVjb3JkXCIsIHJlc3BvbnNlKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRHJhZ0VudGVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmRyYWdFbnRlckNvdW50Kys7XHJcblxyXG4gICAgdGhpcy5pc0RyYWdPdmVyID0gdHJ1ZTtcclxuICAgIHRoaXMuc2V0TWVzc2FnZVBvc2l0aW9uKGV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0RyYWdPdmVyKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVBvc2l0aW9uID0ge1xyXG4gICAgICAgIHg6IGV2ZW50LmNsaWVudFggKyA1LFxyXG4gICAgICAgIHk6IGV2ZW50LmNsaWVudFkgKyA1XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5kcmFnRW50ZXJDb3VudC0tO1xyXG5cclxuICAgIGlmICh0aGlzLmRyYWdFbnRlckNvdW50IDw9IDApIHtcclxuICAgICAgdGhpcy5pc0RyYWdPdmVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZHJhZ0VudGVyQ291bnQgPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRNZXNzYWdlUG9zaXRpb24oZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5tZXNzYWdlUG9zaXRpb24gPSB7XHJcbiAgICAgIHg6IGV2ZW50LmNsaWVudFggKyA1LFxyXG4gICAgICB5OiBldmVudC5jbGllbnRZICsgNSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNoZWNrRW50aXR5SW5mbygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSByZXR1cm47XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGVudGl0eUluZm8gPSBhd2FpdCB0aGlzLmVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEVudGl0eUluZm9Gcm9tQ2FjaGUodGhpcy5idXNpbmVzc0NsYXNzKTtcclxuXHJcbiAgICAgIGlmICghZW50aXR5SW5mbyB8fCAoIWVudGl0eUluZm8uZGlzY3JpbWluYXRvckNsYXNzTmFtZSAmJiAhZW50aXR5SW5mby5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lKSkge1xyXG4gICAgICAgIHRoaXMuaWdub3JlRGVzY3JpbWluYXRvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVGb3Jtc0luZm9zKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QWxsRm9ybXNPZkJ1c2luZXNzQ2xhc3MoKSB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZm9ybXVsYWlyZVNlcnZpY2UuZ2V0QWxsRm9ybXNPZkJ1c2luZXNzQ2xhc3ModGhpcy5idXNpbmVzc0NsYXNzLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPCAxKSByZXR1cm47XHJcbiAgICAgICAgICB0aGlzLmZvcm1zT2ZCdXNpbmVzc0NsYXNzID0gdmFsdWU7XHJcbiAgICAgICAgICB0aGlzLmRvZXNIYXZlRm9ybXMgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZUZvcm1zVmlzaWJpbGl0eSgpIHsgdGhpcy5jYW5TaG93Rm9ybXMgPSB0aGlzLmRvZXNIYXZlRm9ybXMgJiYgIWlzTnVsbE9yRW1wdHkodGhpcy5tb2RlKSAmJiB0aGlzLm1vZGUgIT0gTW9kZXMuY3JlYXRlOyB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlRm9ybXNJbmZvcygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRm9ybXNJbmZvc0NhbGN1bGF0ZWQpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc0J1c2luZXNzQ2xhc3NTZXQgfHwgIXRoaXMuaWdub3JlRGVzY3JpbWluYXRvciAmJiAhdGhpcy5pc0Rlc2NyaW1pbmF0b3JWYWx1ZVNldCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZ2V0QWxsRm9ybXNPZkJ1c2luZXNzQ2xhc3MoKTtcclxuICAgIHRoaXMuaXNGb3Jtc0luZm9zQ2FsY3VsYXRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0aWFsaXplUmVxdWVzdFRyYWNrZXJTdGF0ZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMucmVxdWVzdFRyYWNrZXJTdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMucmVxdWVzdFRyYWNrZXJTZXJ2aWNlLnJlcXVlc3RTdGF0ZSQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICB0aGlzLmhhc0FjdGl2ZVJlcXVlc3RzID0gdmFsdWUuaGFzQWN0aXZlUmVxdWVzdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTW9kZUluVHNpTW9kYWxGb290ZXIoKXtcclxuICAgIGlmKHRoaXMubW9kYWxGb290ZXJDb21wKXtcclxuICAgICAgdGhpcy5tb2RhbEZvb3RlckNvbXAubW9kZSA9IHRoaXMubW9kZVxyXG4gICAgfVxyXG4gIH1cclxufSIsIjxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKG5nU3VibWl0KT1cImhhbmRsZUZvcm1TdWJtaXQoJGV2ZW50KVwiICNmb3JtUmVmPVwibmdGb3JtXCI+XHJcbiAgPG5nLXRlbXBsYXRlICN0b29sYmFyVGVtcGxhdGU+XHJcbiAgICA8cC10b29sYmFyICpuZ0lmPVwiZm9ybUVuZHBvaW50XCIgc3R5bGVDbGFzcz1cIm1iLTEgZ2FwLTJcIiBjbGFzcz1cInctZnVsbFwiIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxyXG4gICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiIChkcmFnZW50ZXIpPVwib25EcmFnRW50ZXIoJGV2ZW50KVwiIChkcmFnbGVhdmUpPVwib25EcmFnTGVhdmUoJGV2ZW50KVwiPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMSBtbC0yXCI+XHJcbiAgICAgICAgICB7eyBpbnB1dFRpdGxlIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMSBtci0yXCI+XHJcbiAgICAgICAgICA8YXBwLXJlcG9ydGluZyAqbmdJZj1cImZvcm1FbmRwb2ludFwiIFtmcm9tVHNpRm9ybV09XCJ0cnVlXCIgW2lkXT1cInRoaXMuaWRcIiBbZm9ybUVuZHBvaW50XT1cImZvcm1FbmRwb2ludFwiXHJcbiAgICAgICAgICAgIFtmb3JtTmFtZV09XCJmb3JtTmFtZVwiIFtyZXBvcnREaXNjcmltaW5hdG9yXT1cImRlc2NyaW1pbmF0b3JWYWx1ZVwiIFtpc0Zvcm1FbmRwb2ludFBhZ2VkXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbbm9tYnJlRG9jdW1lbnRzSm9pbnRzXT1cIm5vbWJyZURvY3VtZW50c1wiIFtjb25maWdNb2RlQnV0dG9uSWRdPVwiY29uZmlnTW9kZUJ1dHRvbklkXCJcclxuICAgICAgICAgICAgW2lzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCIgKHRvZ2dsZURlc2lnbk1vZGUpPVwidG9nZ2xlRGVzaWduTW9kZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2J1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc1wiIChjbG9zZWRNb2RhbEZpbGVVcGxvYWQpPVwiZ2V0Tm9tYnJlRmljaGllcigpXCJcclxuICAgICAgICAgICAgW3Nob3dJbXBvcnRFeHBvcnRCdXR0b25dPVwiZmFsc2VcIiBbc2hvd0FjdGlvbkJ1dHRvbl09XCJzaG93QWN0aW9uQnV0dG9uXCIgI3JlcG9ydGluZ0FwcFxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2FwcC1yZXBvcnRpbmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNEcmFnT3ZlclwiIFtuZ1N0eWxlXT1cInsgbGVmdDogbWVzc2FnZVBvc2l0aW9uLnggKyAncHgnLCB0b3A6IG1lc3NhZ2VQb3NpdGlvbi55ICsgJ3B4JyB9XCJcclxuICAgICAgICBjbGFzcz1cImRyYWctbWVzc2FnZSBjdXJzb3ItZm9sbG93XCI+XHJcbiAgICAgICAge3sgXCJKb2ludHVyZVwiIHwgbG9jYWxpemUgfX1cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9wLXRvb2xiYXI+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPGRpdiAqYnVzeT1cImlzTG9hZGluZyB8fCBoYXNBY3RpdmVSZXF1ZXN0c1wiPjwvZGl2PlxyXG5cclxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtclwiPlxyXG4gICAgICA8cC10YWJWaWV3PlxyXG5cclxuICAgICAgICA8cC10YWJQYW5lbCBoZWFkZXI9XCJcIiBcclxuICAgICAgICBbaGVhZGVyU3R5bGVdPVwiY29sb25uZXNQZXJzb25uYWxpc2VlR3JvdXBlZC5sZW5ndGggPT09IDAgJiYgIWNhblNob3dGb3Jtc1xyXG4gICAgICA/IHsgZGlzcGxheTogJ25vbmUnIH0gXHJcbiAgICAgIDogbnVsbFwiPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWhvbWUgbXItMlwiPjwvaT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFpbi10YWItdGV4dFwiPnt7ICdzaGFyZWRfZm9ybV9tYWludGFiVGl0bGUnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9wLXRhYlBhbmVsPlxyXG5cclxuICAgICAgICA8IS0tIER5bmFtaWMgdGFicyAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sb25uZXNQZXJzb25uYWxpc2VlR3JvdXBlZC5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICA8cC10YWJQYW5lbCAqbmdGb3I9XCJsZXQgZ3JwIG9mIGNvbG9ubmVzUGVyc29ubmFsaXNlZUdyb3VwZWRcIiBbaGVhZGVyXT1cImdycC5ncm91cGVcIj5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZHluYW1pY1Rvb2xiYXJDb250YWluZXI+PC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBncmlkIGZvcm0tcm93XCIgKm5nRm9yPVwibGV0IGNvbCBvZiBncnAuY29sb25uZXNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBmb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgW2xhYmVsVmFsdWVdPVwiY29sLm5vbVwiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBTdHJpbmcgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTggZm9ybS1pbnB1dFwiICpuZ0lmPVwiY29sLnR5cGUgPT09IGZvcm1UeXBlLnN0cmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggWyhpbnB1dEZpZWxkKV09XCJjb2wuZGF0YS52YWxldXJTdHJpbmdcIj48L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIEludCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOCBmb3JtLWlucHV0XCIgKm5nSWY9XCJjb2wudHlwZSA9PT0gZm9ybVR5cGUuaW50XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1JbnRlZ2VyIFsoaW5wdXRGaWVsZCldPVwiY29sLmRhdGEudmFsZXVySW50XCI+PC9Uc2ktSW50ZWdlcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIERlY2ltYWwgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTggZm9ybS1pbnB1dFwiICpuZ0lmPVwiY29sLnR5cGUgPT09IGZvcm1UeXBlLmRlY2ltYWxcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLURlY2ltYWwtSW5wdXQgWyhpbnB1dEZpZWxkKV09XCJjb2wuZGF0YS52YWxldXJEZWNpbWFsXCI+PC9Uc2ktRGVjaW1hbC1JbnB1dD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIEJvb2xlYW4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTggZm9ybS1pbnB1dFwiICpuZ0lmPVwiY29sLnR5cGUgPT09IGZvcm1UeXBlLmJvb2xlYW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLUNoZWNrQm94IFtpc0JpbmFyeV09XCJmYWxzZVwiIFsoaW5wdXRGaWVsZCldPVwiY29sLmRhdGEudmFsZXVyQm9vbGVhblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gQmluYXJ5IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04IGZvcm0taW5wdXRcIiAqbmdJZj1cImNvbC50eXBlID09PSBmb3JtVHlwZS5iaW5hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgYmluYXJ5IGlucHV0IChub3QgaGFuZGxlZCB5ZXQpXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkeW5hbWljRm9vdGVyQ29udGFpbmVyPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L3AtdGFiUGFuZWw+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYW5TaG93Rm9ybXNcIj5cclxuICAgICAgICAgIDxwLXRhYlBhbmVsIFtoZWFkZXJdPVwiJ3NoYXJlZF9mb3JtX2R5bmFtaWNGb3Jtc1RhYl9UaXRsZScgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGVudFwiPlxyXG4gICAgICAgICAgICAgIDxzaGFyZWQtZHluYW1pYy1mb3JtLWxpc3RcclxuICAgICAgICAgICAgICBbb2NjdXJlbmNlXT1cImlkXCJcclxuICAgICAgICAgICAgICBbb2NjdXJlbmNlQnVzaW5lc3NDbGFzc109XCJidXNpbmVzc0NsYXNzXCJcclxuICAgICAgICAgICAgICBbb2NjdXJlbmNlRGlzY3JpbWluYXRvclZhbHVlXT1cImRlc2NyaW1pbmF0b3JWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgW2lnbm9yZURpYWxvZ0NvbmZpZ109XCJ0cnVlXCIgLz5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvcC10YWJQYW5lbD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwvcC10YWJWaWV3PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9maWVsZHNldD5cclxuXHJcbiAgPGRpdiAqbmdJZj1cIihidXNpbmVzc0NsYXNzICYmIGVudGl0eVN0YXR1c0xpc3QubGVuZ3RoID4gMCkgfHxcclxuICAgICAgICB3b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd1VpZCB8fFxyXG4gICAgICAgIHdvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93XCIgY2xhc3M9XCJteC00IHB4LTIgbXktMSBzaGFyZWQtZm9vdGVyLWJhclwiPlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJidXNpbmVzc0NsYXNzICYmIGVudGl0eVN0YXR1c0xpc3QgJiYgZW50aXR5U3RhdHVzTGlzdC5sZW5ndGggPiAwXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiIHByZXNlbnRhdGlvbkRlc2lnbmVyPVwic2hhcmVkX2NydWRfc3RhdHVzXCI+XHJcbiAgICAgICAgPFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX2NydWRfc3RhdHVzJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIFtpZC1maWVsZF09XCIna2V5J1wiIFtsYWJlbC1maWVsZF09XCIndmFsdWUnXCIgW2RhdGFzb3VyY2VdPVwiZW50aXR5U3RhdHVzTGlzdFwiIFsoYmluZCldPVwic3RhdHVzXCJcclxuICAgICAgICAgIFtjb21ib1R5cGVdPVwiJ3N0YXR1cydcIiBbc3RhdHVzTWV0YWRhdGFdPVwic3RhdHVzTWV0YWRhdGFDb21ib1N0YXR1c1wiIFtpbnB1dE5hbWVdPVwic3RhdHVzQ29sdW1uTmFtZVwiXHJcbiAgICAgICAgICBbc2hvd0FkZEJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICBbc2hvd1NlYXJjaEJ1dHRvbl09XCJmYWxzZVwiPjwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJ3b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd1VpZCB8fCB3b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvd1wiXHJcbiAgICAgIGNsYXNzPVwiZmxleCBjb2wtMTBcIj5cclxuICAgICAgPGRpdiBwcmVzZW50YXRpb25EZXNpZ25lcj1cInNoYXJlZF93b3JrZmxvd05hbWVcIiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGNvbC00XCI+XHJcbiAgICAgICAgPFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fd29ya2Zsb3dfd29ya2Zsb3cnfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgIDwvVHNpLUxhYmVsPlxyXG4gICAgICAgIDxUc2ktVGV4dC1Cb3ggW2Rpc2FibGVkXT1cInRydWVcIiBbaW5wdXROYW1lXT1cIid3b3JrZmxvd05hbWUnXCIgWyhpbnB1dEZpZWxkKV09XCJ3b3JrZmxvd0luZm9ybWF0aW9uLndvcmtmbG93TmFtZVwiPlxyXG4gICAgICAgIDwvVHNpLVRleHQtQm94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBwcmVzZW50YXRpb25EZXNpZ25lcj1cImFkbWluaXN0cmF0aW9uX3dvcmtmbG93X3dvcmtmbG93X2N1cnJlbnRfc3RhdHVzXCJcclxuICAgICAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGNvbC00XCI+XHJcbiAgICAgICAgPFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fd29ya2Zsb3dfd29ya2Zsb3dfY3VycmVudF9zdGF0dXMnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJ3LTdcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICBbYmluZF09XCJ3b3JrZmxvd0luZm9ybWF0aW9uLndvcmtmbG93RXRhdFwiIFtpc0ZpbHRlcmVkXT1cInRydWVcIiBbaW5wdXROYW1lXT1cIidXb3JrZmxvd0V0YXQnXCJcclxuICAgICAgICAgIFtlbGVtZW50U291cmNlVXJsXT1cImdldFdvcmtmbG93RXRhdEFzS2V5VmFsdWVQYWlyXCIgW2xpc3RTb3VyY2VVcmxdPVwiZ2V0V29ya2Zsb3dFdGF0U3VpdmFudEFzS2V5VmFsdWVQYWlyXCJcclxuICAgICAgICAgIFtzaG93QWRkQnV0dG9uXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtzaG93U2VhcmNoQnV0dG9uXT1cImZhbHNlXCI+XHJcbiAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIm1vZGUgIT0gZm9ybU1vZGVzLmNyZWF0ZSB8fCB3b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvd1wiXHJcbiAgICAgICAgICBwcmVzZW50YXRpb25EZXNpZ25lcj1cImFkbWluaXN0cmF0aW9uX3dvcmtmbG93X3dvcmtmbG93X25leHRfc3RhdHVzXCJcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIgbm8tYm9yZGVyXCI+XHJcbiAgICAgICAgICA8VHNpLUxhYmVsIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl93b3JrZmxvd193b3JrZmxvd19uZXh0X3N0YXR1cydcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIGNsYXNzPVwidy03XCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCIgWyhiaW5kKV09XCJzZWxlY3RlZFdvcmtmbG93RXRhdFVpZFwiXHJcbiAgICAgICAgICAgIFtpc0ZpbHRlcmVkXT1cInRydWVcIiBbZWxlbWVudFNvdXJjZVVybF09XCJnZXRXb3JrZmxvd0V0YXRBc0tleVZhbHVlUGFpclwiIFtpbnB1dE5hbWVdPVwiJ1dvcmtmbG93RXRhdCdcIlxyXG4gICAgICAgICAgICBbbGlzdFNvdXJjZVVybF09XCJnZXRXb3JrZmxvd0V0YXRTdWl2YW50QXNLZXlWYWx1ZVBhaXJcIiAoYmluZENoYW5nZSk9XCJjb25maXJtVXBkYXRlV29ya2Zsb3dFdGF0KCRldmVudClcIlxyXG4gICAgICAgICAgICBbc2hvd0FkZEJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtzaG93U2VhcmNoQnV0dG9uXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT4iXX0=
|