@cqa-lib/cqa-ui 1.1.492 → 1.1.494
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/mixed-variable-input/mixed-variable-input.component.mjs +372 -98
- package/esm2020/lib/step-builder/template-variables-form/template-variables-form.component.mjs +31 -3
- package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +7 -3
- package/esm2020/lib/test-case-details/loop-step/loop-step.component.mjs +7 -3
- package/esm2020/lib/test-case-details/normal-step/normal-step.component.mjs +7 -3
- package/esm2020/lib/test-case-details/step-group/step-group.component.mjs +7 -3
- package/esm2020/lib/test-case-details/test-case-details-renderer/test-case-details-renderer.component.mjs +8 -3
- package/fesm2015/cqa-lib-cqa-ui.mjs +441 -110
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +435 -112
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/mixed-variable-input/mixed-variable-input.component.d.ts +30 -3
- package/lib/step-builder/template-variables-form/template-variables-form.component.d.ts +7 -0
- package/lib/test-case-details/condition-step/condition-step.component.d.ts +3 -1
- package/lib/test-case-details/loop-step/loop-step.component.d.ts +3 -1
- package/lib/test-case-details/normal-step/normal-step.component.d.ts +3 -1
- package/lib/test-case-details/step-group/step-group.component.d.ts +3 -1
- package/lib/test-case-details/test-case-details-renderer/test-case-details-renderer.component.d.ts +3 -1
- package/package.json +1 -1
- package/styles.css +1 -1
|
@@ -17,6 +17,8 @@ export class TestCaseDetailsRendererComponent {
|
|
|
17
17
|
this.nestingLevel = 0;
|
|
18
18
|
/** When true, enables drag-and-drop reordering and shows drag handle icon instead of checkbox */
|
|
19
19
|
this.isReorder = false;
|
|
20
|
+
/** True when any ancestor step is skipped; used to cascade skipped styling to nested rows. */
|
|
21
|
+
this.isParentSkipped = false;
|
|
20
22
|
/** Global duplicate-in-progress state used to disable duplicate actions and show loading feedback. */
|
|
21
23
|
this.isDuplicating = false;
|
|
22
24
|
/** Show "Add Step Between" button above the step */
|
|
@@ -99,7 +101,7 @@ export class TestCaseDetailsRendererComponent {
|
|
|
99
101
|
}
|
|
100
102
|
ngOnChanges(changes) {
|
|
101
103
|
const structuralChange = changes['step'] || changes['index'] || changes['isNested'] || changes['isInsideLoop'] || changes['isInsideForLoop'] ||
|
|
102
|
-
changes['isInsideStepGroup'] || changes['isReorder'] || changes['editable'];
|
|
104
|
+
changes['isInsideStepGroup'] || changes['isReorder'] || changes['editable'] || changes['isParentSkipped'];
|
|
103
105
|
const optionsOnlyChange = (changes['dataProfileOptions'] || changes['hasMoreDataProfiles'] || changes['isLoadingDataProfiles'] ||
|
|
104
106
|
changes['naturalTextActionsOptions'] || changes['setConditionTemplateVariables']) && !structuralChange;
|
|
105
107
|
if (structuralChange) {
|
|
@@ -210,6 +212,7 @@ export class TestCaseDetailsRendererComponent {
|
|
|
210
212
|
instance.nestingLevel = this.nestingLevel;
|
|
211
213
|
instance.isDuplicating = this.isDuplicating;
|
|
212
214
|
instance.editable = this.editable !== false;
|
|
215
|
+
instance.isParentSkipped = this.isParentSkipped;
|
|
213
216
|
Object.keys(this.step).forEach((key) => {
|
|
214
217
|
if (key !== 'stepType' && key !== 'nestedSteps' && key !== 'branches') {
|
|
215
218
|
instance[key] = this.step[key];
|
|
@@ -434,7 +437,7 @@ export class TestCaseDetailsRendererComponent {
|
|
|
434
437
|
}
|
|
435
438
|
}
|
|
436
439
|
TestCaseDetailsRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseDetailsRendererComponent, deps: [{ token: TEST_CASE_STEP_COMPONENT_MAP }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
437
|
-
TestCaseDetailsRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestCaseDetailsRendererComponent, selector: "cqa-test-case-details-renderer", inputs: { step: "step", index: "index", isNested: "isNested", isInsideLoop: "isInsideLoop", isInsideForLoop: "isInsideForLoop", isInsideStepGroup: "isInsideStepGroup", nestingLevel: "nestingLevel", branch: "branch", isReorder: "isReorder", selected: "selected", isDuplicating: "isDuplicating", addStepBetweenAbove: "addStepBetweenAbove", addStepBetweenBelow: "addStepBetweenBelow", addStepBetween: "addStepBetween", editable: "editable", currentTestCaseId: "currentTestCaseId", testCaseTestDataId: "testCaseTestDataId", dataProfileOptions: "dataProfileOptions", hasMoreDataProfiles: "hasMoreDataProfiles", isLoadingDataProfiles: "isLoadingDataProfiles", naturalTextActionsOptions: "naturalTextActionsOptions", setConditionTemplateVariables: "setConditionTemplateVariables" }, outputs: { nestedStepChange: "nestedStepChange", addStep: "addStep", deleteStep: "deleteStep", toggleExpanded: "toggleExpanded", groupNameChange: "groupNameChange", descriptionChange: "descriptionChange", reusableChange: "reusableChange", openExternal: "openExternal", edit: "edit", link: "link", duplicate: "duplicate", delete: "delete", viewDetails: "viewDetails", selectionChange: "selectionChange", conditionChange: "conditionChange", branchStepChange: "branchStepChange", addStepForBranch: "addStepForBranch", addStepForLoop: "addStepForLoop", deleteStepWithBranch: "deleteStepWithBranch", addBranch: "addBranch", addElse: "addElse", deleteBranch: "deleteBranch", testDataProfileChange: "testDataProfileChange", startStepChange: "startStepChange", endStepChange: "endStepChange", maxIterationsChange: "maxIterationsChange", eventTypeChange: "eventTypeChange", parameterChange: "parameterChange", clickAction: "clickAction", dndDropInZone: "dndDropInZone", loadMoreDataProfiles: "loadMoreDataProfiles", searchDataProfiles: "searchDataProfiles", stepUpdate: "stepUpdate", addStepBetweenClick: "addStepBetweenClick", editInDepth: "editInDepth" }, host: { classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "stepHost", first: true, predicate: ["stepHost"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-relative cqa-step-renderer-hover-container\">\n <button *ngIf=\"editable && !isReorder && (addStepBetweenAbove && addStepBetween)\"\n class=\"cqa-absolute cqa-top-[calc(0 - 12px)] cqa-left-[50%] cqa-translate-x-[-50%] cqa-p-0 cqa-z-[1] cqa-add-step-between-btn\"\n style=\"top: -12px;\" (click)=\"addStepBetweenClick.emit({step: step, index: index, position: 'ABOVE'})\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" fill=\"white\" />\n <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" stroke=\"#3F43EE\" stroke-width=\"2\" />\n <path d=\"M8.5 12H15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M12 8.5V15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n <div class=\"cqa-step-host-wrapper\">\n <ng-container #stepHost></ng-container>\n </div>\n <button *ngIf=\"editable && !isReorder && (addStepBetweenBelow && addStepBetween)\"\n class=\"cqa-absolute cqa-top-[calc(100%-12px)] cqa-left-[50%] cqa-translate-x-[-50%] cqa-p-0 cqa-z-[1] cqa-add-step-between-btn\"\n (click)=\"addStepBetweenClick.emit({step: step, index: index, position: 'BELOW'})\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" fill=\"white\" />\n <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" stroke=\"#3F43EE\" stroke-width=\"2\" />\n <path d=\"M8.5 12H15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M12 8.5V15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n</div>", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
440
|
+
TestCaseDetailsRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestCaseDetailsRendererComponent, selector: "cqa-test-case-details-renderer", inputs: { step: "step", index: "index", isNested: "isNested", isInsideLoop: "isInsideLoop", isInsideForLoop: "isInsideForLoop", isInsideStepGroup: "isInsideStepGroup", nestingLevel: "nestingLevel", branch: "branch", isReorder: "isReorder", isParentSkipped: "isParentSkipped", selected: "selected", isDuplicating: "isDuplicating", addStepBetweenAbove: "addStepBetweenAbove", addStepBetweenBelow: "addStepBetweenBelow", addStepBetween: "addStepBetween", editable: "editable", currentTestCaseId: "currentTestCaseId", testCaseTestDataId: "testCaseTestDataId", dataProfileOptions: "dataProfileOptions", hasMoreDataProfiles: "hasMoreDataProfiles", isLoadingDataProfiles: "isLoadingDataProfiles", naturalTextActionsOptions: "naturalTextActionsOptions", setConditionTemplateVariables: "setConditionTemplateVariables" }, outputs: { nestedStepChange: "nestedStepChange", addStep: "addStep", deleteStep: "deleteStep", toggleExpanded: "toggleExpanded", groupNameChange: "groupNameChange", descriptionChange: "descriptionChange", reusableChange: "reusableChange", openExternal: "openExternal", edit: "edit", link: "link", duplicate: "duplicate", delete: "delete", viewDetails: "viewDetails", selectionChange: "selectionChange", conditionChange: "conditionChange", branchStepChange: "branchStepChange", addStepForBranch: "addStepForBranch", addStepForLoop: "addStepForLoop", deleteStepWithBranch: "deleteStepWithBranch", addBranch: "addBranch", addElse: "addElse", deleteBranch: "deleteBranch", testDataProfileChange: "testDataProfileChange", startStepChange: "startStepChange", endStepChange: "endStepChange", maxIterationsChange: "maxIterationsChange", eventTypeChange: "eventTypeChange", parameterChange: "parameterChange", clickAction: "clickAction", dndDropInZone: "dndDropInZone", loadMoreDataProfiles: "loadMoreDataProfiles", searchDataProfiles: "searchDataProfiles", stepUpdate: "stepUpdate", addStepBetweenClick: "addStepBetweenClick", editInDepth: "editInDepth" }, host: { classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "stepHost", first: true, predicate: ["stepHost"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-relative cqa-step-renderer-hover-container\">\n <button *ngIf=\"editable && !isReorder && (addStepBetweenAbove && addStepBetween)\"\n class=\"cqa-absolute cqa-top-[calc(0 - 12px)] cqa-left-[50%] cqa-translate-x-[-50%] cqa-p-0 cqa-z-[1] cqa-add-step-between-btn\"\n style=\"top: -12px;\" (click)=\"addStepBetweenClick.emit({step: step, index: index, position: 'ABOVE'})\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" fill=\"white\" />\n <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" stroke=\"#3F43EE\" stroke-width=\"2\" />\n <path d=\"M8.5 12H15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M12 8.5V15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n <div class=\"cqa-step-host-wrapper\">\n <ng-container #stepHost></ng-container>\n </div>\n <button *ngIf=\"editable && !isReorder && (addStepBetweenBelow && addStepBetween)\"\n class=\"cqa-absolute cqa-top-[calc(100%-12px)] cqa-left-[50%] cqa-translate-x-[-50%] cqa-p-0 cqa-z-[1] cqa-add-step-between-btn\"\n (click)=\"addStepBetweenClick.emit({step: step, index: index, position: 'BELOW'})\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" fill=\"white\" />\n <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" stroke=\"#3F43EE\" stroke-width=\"2\" />\n <path d=\"M8.5 12H15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M12 8.5V15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n</div>", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
438
441
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseDetailsRendererComponent, decorators: [{
|
|
439
442
|
type: Component,
|
|
440
443
|
args: [{ selector: 'cqa-test-case-details-renderer', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-relative cqa-step-renderer-hover-container\">\n <button *ngIf=\"editable && !isReorder && (addStepBetweenAbove && addStepBetween)\"\n class=\"cqa-absolute cqa-top-[calc(0 - 12px)] cqa-left-[50%] cqa-translate-x-[-50%] cqa-p-0 cqa-z-[1] cqa-add-step-between-btn\"\n style=\"top: -12px;\" (click)=\"addStepBetweenClick.emit({step: step, index: index, position: 'ABOVE'})\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" fill=\"white\" />\n <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" stroke=\"#3F43EE\" stroke-width=\"2\" />\n <path d=\"M8.5 12H15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M12 8.5V15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n <div class=\"cqa-step-host-wrapper\">\n <ng-container #stepHost></ng-container>\n </div>\n <button *ngIf=\"editable && !isReorder && (addStepBetweenBelow && addStepBetween)\"\n class=\"cqa-absolute cqa-top-[calc(100%-12px)] cqa-left-[50%] cqa-translate-x-[-50%] cqa-p-0 cqa-z-[1] cqa-add-step-between-btn\"\n (click)=\"addStepBetweenClick.emit({step: step, index: index, position: 'BELOW'})\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" fill=\"white\" />\n <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" stroke=\"#3F43EE\" stroke-width=\"2\" />\n <path d=\"M8.5 12H15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M12 8.5V15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n</div>" }]
|
|
@@ -462,6 +465,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
462
465
|
type: Input
|
|
463
466
|
}], isReorder: [{
|
|
464
467
|
type: Input
|
|
468
|
+
}], isParentSkipped: [{
|
|
469
|
+
type: Input
|
|
465
470
|
}], selected: [{
|
|
466
471
|
type: Input
|
|
467
472
|
}], isDuplicating: [{
|
|
@@ -559,4 +564,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
559
564
|
}], editInDepth: [{
|
|
560
565
|
type: Output
|
|
561
566
|
}] } });
|
|
562
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlci90ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULGdCQUFnQixFQUVoQixZQUFZLEVBRVosTUFBTSxHQU1QLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSw0QkFBNEIsRUFBNEIsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RyxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLHNCQUFzQixHQUd2QixNQUFNLDBCQUEwQixDQUFDOzs7QUFPbEMsTUFBTSxPQUFPLGdDQUFnQztJQTBGM0MsWUFDZ0QsWUFBc0MsRUFDNUUsR0FBc0I7UUFEZ0IsaUJBQVksR0FBWixZQUFZLENBQTBCO1FBQzVFLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBdkZ2QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQ3ZDLG1GQUFtRjtRQUMxRSxvQkFB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QUFiLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFFRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxhQUFhO3NCQUF0QixNQUFNO2dCQUVFLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUVHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFFRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBRUksb0JBQW9CO3NCQUE3QixNQUFNO2dCQUVHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFFRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2UsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEluamVjdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRG9DaGVjayxcbiAgT25EZXN0cm95LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50UmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRFU1RfQ0FTRV9TVEVQX0NPTVBPTkVOVF9NQVAsIFRlc3RDYXNlU3RlcENvbXBvbmVudE1hcCB9IGZyb20gJy4uL3Rlc3QtY2FzZS1zdGVwLWNvbXBvbmVudHMudG9rZW4nO1xuaW1wb3J0IHtcbiAgVGVzdENhc2VTdGVwQ29uZmlnLFxuICBpc1N0ZXBHcm91cENvbmZpZyxcbiAgaXNDb25kaXRpb25TdGVwQ29uZmlnLFxuICBpc0xvb3BTdGVwQ29uZmlnLFxuICBpc05vcm1hbFN0ZXBDb25maWcsXG4gIGlzQXBpU3RlcENvbmZpZyxcbiAgaXNEYXRhYmFzZVN0ZXBDb25maWcsXG4gIGlzQWlBZ2VudFN0ZXBDb25maWcsXG4gIGlzQWlWZXJpZnlTdGVwQ29uZmlnLFxuICBpc1VwbG9hZFN0ZXBDb25maWcsXG4gIGlzU2NyZWVuc2hvdFN0ZXBDb25maWcsXG4gIGlzU2Nyb2xsU3RlcENvbmZpZyxcbiAgaXNWZXJpZnlVcmxTdGVwQ29uZmlnLFxuICBpc1Jlc3RvcmVTZXNzaW9uU3RlcENvbmZpZyxcbiAgaXNDdXN0b21Db2RlU3RlcENvbmZpZyxcbiAgQ29uZGl0aW9uQnJhbmNoLFxuICBMb29wU3RlcENvbmZpZyxcbn0gZnJvbSAnLi4vdGVzdC1jYXNlLXN0ZXAubW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXRlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBUZXN0Q2FzZURldGFpbHNSZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgRG9DaGVjaywgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnc3RlcEhvc3QnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgc3RlcEhvc3QhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIEBJbnB1dCgpIHN0ZXAhOiBUZXN0Q2FzZVN0ZXBDb25maWc7XG4gIEBJbnB1dCgpIGluZGV4ITogbnVtYmVyO1xuICBASW5wdXQoKSBpc05lc3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0luc2lkZUxvb3A6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFRydWUgd2hlbiB0aGlzIHN0ZXAgaXMgbmVzdGVkIChhdCBhbnkgZGVwdGgpIGluc2lkZSBhIEZPUiBsb29wIHNwZWNpZmljYWxseS4gKi9cbiAgQElucHV0KCkgaXNJbnNpZGVGb3JMb29wOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBXaGVuIHRydWUsIHN0ZXAgaXMgcmVuZGVyZWQgaW5zaWRlIGEgc3RlcC1ncm91cDsgcm93IGFjdGlvbnMgKEVkaXQvRHVwbGljYXRlL0RlbGV0ZSkgYXJlIGhpZGRlbi4gKi9cbiAgQElucHV0KCkgaXNJbnNpZGVTdGVwR3JvdXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFZpc3VhbCBpbmRlbnRhdGlvbiBsZXZlbCBmb3IgbmVzdGVkIHN0cnVjdHVyZXMgKGxvb3BzL3N0ZXAtZ3JvdXBzL2NvbmRpdGlvbnMpLiAqL1xuICBASW5wdXQoKSBuZXN0aW5nTGV2ZWw6IG51bWJlciA9IDA7XG4gIC8qKiBXaGVuIHJlbmRlcmluZyBhIHN0ZXAgaW5zaWRlIGEgY29uZGl0aW9uIGJyYW5jaCwgdGhlIGJyYW5jaCBjb250ZXh0IChmb3IgYWRkU3RlcEZvckJyYW5jaCAvIGRlbGV0ZVN0ZXBXaXRoQnJhbmNoKS4gKi9cbiAgQElucHV0KCkgYnJhbmNoPzogQ29uZGl0aW9uQnJhbmNoO1xuICAvKiogV2hlbiB0cnVlLCBlbmFibGVzIGRyYWctYW5kLWRyb3AgcmVvcmRlcmluZyBhbmQgc2hvd3MgZHJhZyBoYW5kbGUgaWNvbiBpbnN0ZWFkIG9mIGNoZWNrYm94ICovXG4gIEBJbnB1dCgpIGlzUmVvcmRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogQ3VycmVudCBzZWxlY3Rpb24gc3RhdGU7IHdoZW4gY2hhbmdlZCAoZS5nLiBmcm9tIFNlbGVjdCBhbGwpLCB0aGUgY3JlYXRlZCBzdGVwIGNvbXBvbmVudCBpcyB1cGRhdGVkIHNvIHRoZSBjaGVja2JveCByZWZsZWN0cyBpdCAqL1xuICBASW5wdXQoKSBzZWxlY3RlZD86IGJvb2xlYW47XG4gIC8qKiBHbG9iYWwgZHVwbGljYXRlLWluLXByb2dyZXNzIHN0YXRlIHVzZWQgdG8gZGlzYWJsZSBkdXBsaWNhdGUgYWN0aW9ucyBhbmQgc2hvdyBsb2FkaW5nIGZlZWRiYWNrLiAqL1xuICBASW5wdXQoKSBpc0R1cGxpY2F0aW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBTaG93IFwiQWRkIFN0ZXAgQmV0d2VlblwiIGJ1dHRvbiBhYm92ZSB0aGUgc3RlcCAqL1xuICBASW5wdXQoKSBhZGRTdGVwQmV0d2VlbkFib3ZlOiBib29sZWFuID0gdHJ1ZTtcbiAgLyoqIFNob3cgXCJBZGQgU3RlcCBCZXR3ZWVuXCIgYnV0dG9uIGJlbG93IHRoZSBzdGVwICovXG4gIEBJbnB1dCgpIGFkZFN0ZXBCZXR3ZWVuQmVsb3c6IGJvb2xlYW4gPSB0cnVlO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIGFkZFN0ZXBCZXR3ZWVuQWJvdmUgYW5kIGFkZFN0ZXBCZXR3ZWVuQmVsb3cgaW5zdGVhZC4gSWYgc2V0LCBhcHBsaWVzIHRvIGJvdGggYnV0dG9ucy4gKi9cbiAgQElucHV0KCkgYWRkU3RlcEJldHdlZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFdoZW4gZmFsc2UsIGhpZGVzIGVkaXQvZHVwbGljYXRlL2RlbGV0ZSBhY3Rpb25zIGFuZCBhZGQtc3RlcC1iZXR3ZWVuIGJ1dHRvbnMgb24gc3RlcHMgKGUuZy4gZm9yIHRyYXNoZWQgdGVzdCBjYXNlcykuICovXG4gIEBJbnB1dCgpIGVkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgLyoqIEN1cnJlbnQgdGVzdCBjYXNlIGlkIChwb3J0YWwpLiBVc2VkIHNvIHJldXNhYmxlIHN0ZXAgZ3JvdXBzIGNhbiBoaWRlIHRoZSBcImVkaXQgaW4gc291cmNlIHRlc3QgY2FzZVwiIGhpbnQgd2hlbiBhbHJlYWR5IHZpZXdpbmcgdGhhdCBzdGVwIGdyb3VwJ3MgdGVzdCBjYXNlLiAqL1xuICBASW5wdXQoKSBjdXJyZW50VGVzdENhc2VJZD86IG51bWJlciB8IHN0cmluZztcbiAgLyoqIFRlc3QgY2FzZSdzIGRlZmF1bHQgdGVzdCBkYXRhIHByb2ZpbGUgaWQgKHRlc3RDYXNlLnRlc3REYXRhSWQpLiBGb3J3YXJkZWQgdG8gbmVzdGVkIGxvb3Agc3RlcHMuICovXG4gIEBJbnB1dCgpIHRlc3RDYXNlVGVzdERhdGFJZD86IG51bWJlciB8IHN0cmluZztcblxuICBAT3V0cHV0KCkgbmVzdGVkU3RlcENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWc7IGluZGV4OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgpIGFkZFN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVTdGVwID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSB0b2dnbGVFeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbiB8IHtjb25maWc6IFRlc3RDYXNlU3RlcENvbmZpZywgZXhwYW5kZWQ6IGJvb2xlYW59PigpO1xuICBAT3V0cHV0KCkgZ3JvdXBOYW1lQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBkZXNjcmlwdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcmV1c2FibGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBvcGVuRXh0ZXJuYWwgPSBuZXcgRXZlbnRFbWl0dGVyPHtzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWd9PigpO1xuICBAT3V0cHV0KCkgZWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8e3N0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZywgaW5kZXg6IG51bWJlcn0+KCk7XG4gIEBPdXRwdXQoKSBsaW5rID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZHVwbGljYXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyB9IHwgdm9pZD4oKTtcbiAgQE91dHB1dCgpIHZpZXdEZXRhaWxzID0gbmV3IEV2ZW50RW1pdHRlcjxpbXBvcnQoJy4uL3N0ZXAtZGV0YWlscy1tb2RhbC9zdGVwLWRldGFpbHMtbW9kYWwtZGF0YScpLlZpZXdEZXRhaWxzUGF5bG9hZD4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIGNvbmRpdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgYnJhbmNoU3RlcENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBicmFuY2g6IENvbmRpdGlvbkJyYW5jaDsgc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnOyBzdGVwSW5kZXg6IG51bWJlciB9PigpO1xuICBAT3V0cHV0KCkgYWRkU3RlcEZvckJyYW5jaCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBicmFuY2g6IENvbmRpdGlvbkJyYW5jaCB9PigpO1xuICAvKiogRW1pdHRlZCB3aGVuIGVtcHR5IGxvb3Agc3RlcCBwbHVzIGlzIGNsaWNrZWQ7IHNhbWUgYmVoYXZpb3VyIGFzIGFkZC1zdGVwLWJldHdlZW4gKHBhcmVudElkID0gbG9vcCBzdGVwIGlkKS4gKi9cbiAgQE91dHB1dCgpIGFkZFN0ZXBGb3JMb29wID0gbmV3IEV2ZW50RW1pdHRlcjx7IGxvb3BTdGVwQ29uZmlnOiBMb29wU3RlcENvbmZpZyB9PigpO1xuICBAT3V0cHV0KCkgZGVsZXRlU3RlcFdpdGhCcmFuY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHsgYnJhbmNoOiBDb25kaXRpb25CcmFuY2g7IHN0ZXBJbmRleDogbnVtYmVyIH0+KCk7XG4gIEBPdXRwdXQoKSBhZGRCcmFuY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgXCJBZGQgRWxzZVwiIGluIGEgY29uZGl0aW9uIHN0ZXA7IHBhcmVudCBzaG91bGQgY2FsbCBQT1NUIHRlc3Rfc3RlcHMgd2l0aCBjb25kaXRpb25UeXBlIENPTkRJVElPTl9FTFNFICovXG4gIEBPdXRwdXQoKSBhZGRFbHNlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGNvbmRpdGlvblN0ZXBDb25maWc6IFRlc3RDYXNlU3RlcENvbmZpZyB9PigpO1xuICBAT3V0cHV0KCkgZGVsZXRlQnJhbmNoID0gbmV3IEV2ZW50RW1pdHRlcjxDb25kaXRpb25CcmFuY2g+KCk7XG4gIEBPdXRwdXQoKSB0ZXN0RGF0YVByb2ZpbGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHN0YXJ0U3RlcENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgZW5kU3RlcENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgbWF4SXRlcmF0aW9uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgZXZlbnRUeXBlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBwYXJhbWV0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNsaWNrQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBNb3VzZUV2ZW50OyBzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcgfT4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiBhIHN0ZXAgaXMgZHJvcHBlZCBpbiBhIG5lc3RlZCBkcm9wem9uZSAoc3RlcC1ncm91cCwgbG9vcCwgY29uZGl0aW9uKS4gUGF5bG9hZDogeyBldmVudCwgdGFyZ2V0TGlzdCB9LiAqL1xuICBAT3V0cHV0KCkgZG5kRHJvcEluWm9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogYW55OyB0YXJnZXRMaXN0OiBUZXN0Q2FzZVN0ZXBDb25maWdbXSB9PigpO1xuICAvKiogRGF0YSBwcm9maWxlIG9wdGlvbnMgZm9yIGxvb3Agc3RlcHMgKi9cbiAgQElucHV0KCkgZGF0YVByb2ZpbGVPcHRpb25zOiBhbnlbXSA9IFtdO1xuICAvKiogSW5kaWNhdGVzIGlmIG1vcmUgZGF0YSBwcm9maWxlcyBhcmUgYXZhaWxhYmxlIGZvciBsb2FkaW5nICovXG4gIEBJbnB1dCgpIGhhc01vcmVEYXRhUHJvZmlsZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIExvYWRpbmcgc3RhdGUgZm9yIGRhdGEgcHJvZmlsZXMgKi9cbiAgQElucHV0KCkgaXNMb2FkaW5nRGF0YVByb2ZpbGVzOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBOYXR1cmFsIHRleHQgYWN0aW9ucyBvcHRpb25zIGZvciB3aGlsZSBsb29wIGNvbmRpdGlvbiAqL1xuICBASW5wdXQoKSBuYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zOiBhbnlbXSA9IFtdO1xuICAvKiogRnVuY3Rpb24gdG8gcHJvY2VzcyB0ZW1wbGF0ZSB2YXJpYWJsZXMgZm9yIGNvbmRpdGlvbiBzdGVwcyAqL1xuICBASW5wdXQoKSBzZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlczogKHRlbXBsYXRlOiBhbnkpID0+IGFueVtdID0gKCkgPT4gW107XG4gIC8qKiBFbWl0IHdoZW4gbW9yZSBkYXRhIHByb2ZpbGVzIG5lZWQgdG8gYmUgbG9hZGVkICovXG4gIEBPdXRwdXQoKSBsb2FkTW9yZURhdGFQcm9maWxlcyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogRW1pdCB3aGVuIGRhdGEgcHJvZmlsZSBzZWFyY2ggcXVlcnkgY2hhbmdlcyAqL1xuICBAT3V0cHV0KCkgc2VhcmNoRGF0YVByb2ZpbGVzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIC8qKiBFbWl0IHdoZW4gYSBzdGVwIGlzIHVwZGF0ZWQgKGUuZy4sIEFwcGx5IGJ1dHRvbiBjbGlja2VkIGluIGxvb3Atc3RlcCBlZGl0IG1vZGUpICovXG4gIEBPdXRwdXQoKSBzdGVwVXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUZXN0Q2FzZVN0ZXBDb25maWc+KCk7XG4gIEBPdXRwdXQoKSBhZGRTdGVwQmV0d2VlbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7c3RlcDogVGVzdENhc2VTdGVwQ29uZmlnLCBpbmRleDogbnVtYmVyLCBwb3NpdGlvbjogJ0FCT1ZFJyB8ICdCRUxPVyd9PigpO1xuICAvKiogRW1pdCB3aGVuIHVzZXIgY2xpY2tzIFwiRWRpdCBJbiBkZXB0aFwiIGluIGNvbmRpdGlvbi1zdGVwIChvciBvdGhlciBzdGVwcyB0aGF0IHN1cHBvcnQgaXQpICovXG4gIEBPdXRwdXQoKSBlZGl0SW5EZXB0aCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWc7IGluZGV4OiBudW1iZXI7IHRlbXBsYXRlT3ZlcnJpZGU/OiBhbnk7IGlzQ3JlYXRlTW9kZT86IGJvb2xlYW47IGNyZWF0ZU1vZGVCcmFuY2hEYXRhPzogYW55IH0+KCk7XG5cbiAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbGFzdFN5bmNlZFN0ZXBOdW1iZXI6IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFRFU1RfQ0FTRV9TVEVQX0NPTVBPTkVOVF9NQVApIHByaXZhdGUgY29tcG9uZW50TWFwOiBUZXN0Q2FzZVN0ZXBDb21wb25lbnRNYXAsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJTdGVwKCk7XG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgLy8gU3RlcCBudW1iZXJzIGFyZSBmcmVxdWVudGx5IHJlY29tcHV0ZWQgaW4tcGxhY2Ugb24gZXhpc3Rpbmcgc3RlcCBvYmplY3RzLlxuICAgIC8vIEZvciBkeW5hbWljYWxseSBjcmVhdGVkIGNoaWxkIGNvbXBvbmVudHMsIHRoYXQgZG9lc24ndCB0cmlnZ2VyIG5nT25DaGFuZ2VzLFxuICAgIC8vIHNvIGtlZXAgdGhlIHJlbmRlcmVkIHN0ZXBOdW1iZXIgaW5wdXQgaW4gc3luYyBtYW51YWxseS5cbiAgICBpZiAoIXRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSB8fCAhdGhpcy5zdGVwKSByZXR1cm47XG4gICAgY29uc3QgbGF0ZXN0U3RlcE51bWJlciA9ICh0aGlzLnN0ZXAgYXMgYW55KS5zdGVwTnVtYmVyO1xuICAgIGlmICh0aGlzLmxhc3RTeW5jZWRTdGVwTnVtYmVyICE9PSBsYXRlc3RTdGVwTnVtYmVyKSB7XG4gICAgICAodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KS5zdGVwTnVtYmVyID0gbGF0ZXN0U3RlcE51bWJlcjtcbiAgICAgIHRoaXMubGFzdFN5bmNlZFN0ZXBOdW1iZXIgPSBsYXRlc3RTdGVwTnVtYmVyO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBzdHJ1Y3R1cmFsQ2hhbmdlID0gY2hhbmdlc1snc3RlcCddIHx8IGNoYW5nZXNbJ2luZGV4J10gfHwgY2hhbmdlc1snaXNOZXN0ZWQnXSB8fCBjaGFuZ2VzWydpc0luc2lkZUxvb3AnXSB8fCBjaGFuZ2VzWydpc0luc2lkZUZvckxvb3AnXSB8fFxuICAgICAgICBjaGFuZ2VzWydpc0luc2lkZVN0ZXBHcm91cCddIHx8IGNoYW5nZXNbJ2lzUmVvcmRlciddIHx8IGNoYW5nZXNbJ2VkaXRhYmxlJ107XG4gICAgY29uc3Qgb3B0aW9uc09ubHlDaGFuZ2UgPSAoY2hhbmdlc1snZGF0YVByb2ZpbGVPcHRpb25zJ10gfHwgY2hhbmdlc1snaGFzTW9yZURhdGFQcm9maWxlcyddIHx8IGNoYW5nZXNbJ2lzTG9hZGluZ0RhdGFQcm9maWxlcyddIHx8XG4gICAgICAgIGNoYW5nZXNbJ25hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMnXSB8fCBjaGFuZ2VzWydzZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyddKSAmJiAhc3RydWN0dXJhbENoYW5nZTtcblxuICAgIGlmIChzdHJ1Y3R1cmFsQ2hhbmdlKSB7XG4gICAgICB0aGlzLnJlbmRlclN0ZXAoKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnNPbmx5Q2hhbmdlICYmIHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSAhPSBudWxsICYmIHRoaXMuc3RlcCAhPSBudWxsKSB7XG4gICAgICAvLyBVcGRhdGUgb25seSBwcm9maWxlL29wdGlvbnMgaW5wdXRzIHNvIHdlIGRvbid0IGRlc3Ryb3kgdGhlIHN0ZXAgKGUuZy4gb3BlbmluZyBkYXRhIHByb2ZpbGUgZHJvcGRvd25cbiAgICAgIC8vIGxvYWRzIG9wdGlvbnMgYW5kIHdvdWxkIG90aGVyd2lzZSByZWNyZWF0ZSB0aGUgY29tcG9uZW50IGFuZCBjb2xsYXBzZSBpbmxpbmUgZWRpdClcbiAgICAgIHRoaXMudXBkYXRlT3B0aW9uc0lucHV0cyh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2VzWydzZWxlY3RlZCddICYmIHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICAodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KS5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQ7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2VzWydpc0R1cGxpY2F0aW5nJ10gJiYgdGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpLmlzRHVwbGljYXRpbmcgPSB0aGlzLmlzRHVwbGljYXRpbmc7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2VzWydjdXJyZW50VGVzdENhc2VJZCddICYmIHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSAhPSBudWxsICYmXG4gICAgICAgIChpc1N0ZXBHcm91cENvbmZpZyh0aGlzLnN0ZXAhKSB8fCBpc0xvb3BTdGVwQ29uZmlnKHRoaXMuc3RlcCEpIHx8IGlzQ29uZGl0aW9uU3RlcENvbmZpZyh0aGlzLnN0ZXAhKSkpIHtcbiAgICAgICh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpLmN1cnJlbnRUZXN0Q2FzZUlkID0gdGhpcy5jdXJyZW50VGVzdENhc2VJZDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICAvKiogVXBkYXRlIG9ubHkgZGF0YSBwcm9maWxlIC8gb3B0aW9ucyBpbnB1dHMgb24gZXhpc3RpbmcgaW5zdGFuY2UgKGF2b2lkcyBmdWxsIHJlY3JlYXRlIGFuZCBsb3NpbmcgaXNFZGl0aW5nKS4gKi9cbiAgcHJpdmF0ZSB1cGRhdGVPcHRpb25zSW5wdXRzKGluc3RhbmNlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoaXNMb29wU3RlcENvbmZpZyh0aGlzLnN0ZXAhKSB8fCBpc0NvbmRpdGlvblN0ZXBDb25maWcodGhpcy5zdGVwISkgfHwgaXNTdGVwR3JvdXBDb25maWcodGhpcy5zdGVwISkpIHtcbiAgICAgIGNvbnN0IHByZXZPcHRpb25zID0gKGluc3RhbmNlIGFzIGFueSkuZGF0YVByb2ZpbGVPcHRpb25zO1xuICAgICAgY29uc3QgcHJldkhhc01vcmUgPSAoaW5zdGFuY2UgYXMgYW55KS5oYXNNb3JlRGF0YVByb2ZpbGVzO1xuICAgICAgY29uc3QgcHJldkxvYWRpbmcgPSAoaW5zdGFuY2UgYXMgYW55KS5pc0xvYWRpbmdEYXRhUHJvZmlsZXM7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5kYXRhUHJvZmlsZU9wdGlvbnMgPSB0aGlzLmRhdGFQcm9maWxlT3B0aW9ucztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmhhc01vcmVEYXRhUHJvZmlsZXMgPSB0aGlzLmhhc01vcmVEYXRhUHJvZmlsZXM7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5pc0xvYWRpbmdEYXRhUHJvZmlsZXMgPSB0aGlzLmlzTG9hZGluZ0RhdGFQcm9maWxlcztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMgPSB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnM7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5hZGRTdGVwQmV0d2VlbkFib3ZlID0gdGhpcy5hZGRTdGVwQmV0d2VlbkFib3ZlO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuYWRkU3RlcEJldHdlZW5CZWxvdyA9IHRoaXMuYWRkU3RlcEJldHdlZW5CZWxvdztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmFkZFN0ZXBCZXR3ZWVuID0gdGhpcy5hZGRTdGVwQmV0d2VlbjtcbiAgICAgIC8vIFRyaWdnZXIgbmdPbkNoYW5nZXMgc28gdGhlIHN0ZXAgdXBkYXRlcyBpdHMgVGVzdCBEYXRhIHByb2ZpbGUgc2VsZWN0IGNvbmZpZyAoc2VhcmNoL2xvYWQgbW9yZSBvcHRpb25zKS5cbiAgICAgIC8vIER5bmFtaWNhbGx5IGNyZWF0ZWQgY29tcG9uZW50cyBkbyBub3QgZ2V0IEBJbnB1dCgpIGNoYW5nZSBkZXRlY3Rpb24gZnJvbSB0aGUgdGVtcGxhdGUuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLm5nT25DaGFuZ2VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMgPSB7XG4gICAgICAgICAgZGF0YVByb2ZpbGVPcHRpb25zOiBuZXcgU2ltcGxlQ2hhbmdlKHByZXZPcHRpb25zLCB0aGlzLmRhdGFQcm9maWxlT3B0aW9ucywgZmFsc2UpLFxuICAgICAgICAgIGhhc01vcmVEYXRhUHJvZmlsZXM6IG5ldyBTaW1wbGVDaGFuZ2UocHJldkhhc01vcmUsIHRoaXMuaGFzTW9yZURhdGFQcm9maWxlcywgZmFsc2UpLFxuICAgICAgICAgIGlzTG9hZGluZ0RhdGFQcm9maWxlczogbmV3IFNpbXBsZUNoYW5nZShwcmV2TG9hZGluZywgdGhpcy5pc0xvYWRpbmdEYXRhUHJvZmlsZXMsIGZhbHNlKSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdGFuY2UubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc0xvb3BTdGVwQ29uZmlnKHRoaXMuc3RlcCEpKSB7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMgPSB0aGlzLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzO1xuICAgIH1cbiAgICBpZiAoaXNDb25kaXRpb25TdGVwQ29uZmlnKHRoaXMuc3RlcCEpKSB7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMgPSB0aGlzLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tcG9uZW50VHlwZShzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcpOiBhbnkge1xuICAgIGlmIChpc1N0ZXBHcm91cENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnN0ZXBHcm91cDtcbiAgICBpZiAoaXNDb25kaXRpb25TdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuY29uZGl0aW9uU3RlcDtcbiAgICBpZiAoaXNMb29wU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmxvb3BTdGVwO1xuICAgIGlmIChpc0FwaVN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5hcGlTdGVwO1xuICAgIGlmIChpc0RhdGFiYXNlU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmRhdGFiYXNlU3RlcDtcbiAgICBpZiAoaXNBaUFnZW50U3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmFpQWdlbnRTdGVwO1xuICAgIGlmIChpc0FpVmVyaWZ5U3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmFpVmVyaWZ5U3RlcDtcbiAgICBpZiAoaXNVcGxvYWRTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAudXBsb2FkU3RlcDtcbiAgICBpZiAoaXNTY3JlZW5zaG90U3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnNjcmVlbnNob3RTdGVwO1xuICAgIGlmIChpc1Njcm9sbFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5zY3JvbGxTdGVwO1xuICAgIGlmIChpc1ZlcmlmeVVybFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC52ZXJpZnlVcmxTdGVwO1xuICAgIGlmIChpc1Jlc3RvcmVTZXNzaW9uU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnJlc3RvcmVTZXNzaW9uU3RlcDtcbiAgICBpZiAoaXNDdXN0b21Db2RlU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmN1c3RvbUNvZGVTdGVwO1xuICAgIGlmIChpc05vcm1hbFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5ub3JtYWxTdGVwO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJTdGVwKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdGVwSG9zdCB8fCAhdGhpcy5zdGVwKSByZXR1cm47XG5cbiAgICBjb25zdCBjb21wb25lbnRUeXBlID0gdGhpcy5nZXRDb21wb25lbnRUeXBlKHRoaXMuc3RlcCk7XG4gICAgaWYgKCFjb21wb25lbnRUeXBlKSByZXR1cm47XG5cbiAgICB0aGlzLnN0ZXBIb3N0LmNsZWFyKCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLnN0ZXBIb3N0LmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlO1xuXG4gICAgaW5zdGFuY2UuY29uZmlnID0gdGhpcy5zdGVwO1xuICAgIGluc3RhbmNlLnN0ZXBOdW1iZXIgPSAodGhpcy5zdGVwIGFzIGFueSkuc3RlcE51bWJlcjtcbiAgICB0aGlzLmxhc3RTeW5jZWRTdGVwTnVtYmVyID0gKHRoaXMuc3RlcCBhcyBhbnkpLnN0ZXBOdW1iZXI7XG4gICAgKGluc3RhbmNlIGFzIGFueSkuaW5kZXggPSB0aGlzLmluZGV4OyAvLyBDb3JyZWN0IGVkaXQtaW4tZGVwdGggZm9yIGFsbCBzdGVwIHR5cGVzIChzdGVwTnVtYmVyIFwiMTAuM1wiIHBhcnNlcyB3cm9uZylcbiAgICBpbnN0YW5jZS5pc05lc3RlZCA9IHRoaXMuaXNOZXN0ZWQ7XG4gICAgaW5zdGFuY2UuaXNJbnNpZGVMb29wID0gdGhpcy5pc0luc2lkZUxvb3A7XG4gICAgKGluc3RhbmNlIGFzIGFueSkuaXNJbnNpZGVGb3JMb29wID0gdGhpcy5pc0luc2lkZUZvckxvb3A7XG4gICAgaW5zdGFuY2UuaXNJbnNpZGVTdGVwR3JvdXAgPSB0aGlzLmlzSW5zaWRlU3RlcEdyb3VwO1xuICAgIGluc3RhbmNlLmlzUmVvcmRlciA9IHRoaXMuaXNSZW9yZGVyO1xuICAgIChpbnN0YW5jZSBhcyBhbnkpLm5lc3RpbmdMZXZlbCA9IHRoaXMubmVzdGluZ0xldmVsO1xuICAgIChpbnN0YW5jZSBhcyBhbnkpLmlzRHVwbGljYXRpbmcgPSB0aGlzLmlzRHVwbGljYXRpbmc7XG4gICAgKGluc3RhbmNlIGFzIGFueSkuZWRpdGFibGUgPSB0aGlzLmVkaXRhYmxlICE9PSBmYWxzZTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLnN0ZXApLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleSAhPT0gJ3N0ZXBUeXBlJyAmJiBrZXkgIT09ICduZXN0ZWRTdGVwcycgJiYga2V5ICE9PSAnYnJhbmNoZXMnKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpW2tleV0gPSAodGhpcy5zdGVwIGFzIGFueSlba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoKHRoaXMuc3RlcCBhcyBhbnkpLm5lc3RlZFN0ZXBzKSAoaW5zdGFuY2UgYXMgYW55KS5uZXN0ZWRTdGVwcyA9ICh0aGlzLnN0ZXAgYXMgYW55KS5uZXN0ZWRTdGVwcztcbiAgICBpZiAoKHRoaXMuc3RlcCBhcyBhbnkpLmJyYW5jaGVzKSAoaW5zdGFuY2UgYXMgYW55KS5icmFuY2hlcyA9ICh0aGlzLnN0ZXAgYXMgYW55KS5icmFuY2hlcztcblxuICAgIC8vIFBhc3MgZGF0YSBwcm9maWxlIGlucHV0cyB0byBzdGVwIGluc3RhbmNlcyB0aGF0IGNhbiBjb250YWluIG5lc3RlZCBsb29wIHN0ZXBzXG4gICAgaWYgKGlzTG9vcFN0ZXBDb25maWcodGhpcy5zdGVwKSB8fCBpc0NvbmRpdGlvblN0ZXBDb25maWcodGhpcy5zdGVwKSB8fCBpc1N0ZXBHcm91cENvbmZpZyh0aGlzLnN0ZXApKSB7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5jdXJyZW50VGVzdENhc2VJZCA9IHRoaXMuY3VycmVudFRlc3RDYXNlSWQ7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS50ZXN0Q2FzZVRlc3REYXRhSWQgPSB0aGlzLnRlc3RDYXNlVGVzdERhdGFJZDtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmRhdGFQcm9maWxlT3B0aW9ucyA9IHRoaXMuZGF0YVByb2ZpbGVPcHRpb25zO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuaGFzTW9yZURhdGFQcm9maWxlcyA9IHRoaXMuaGFzTW9yZURhdGFQcm9maWxlcztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmlzTG9hZGluZ0RhdGFQcm9maWxlcyA9IHRoaXMuaXNMb2FkaW5nRGF0YVByb2ZpbGVzO1xuICAgICAgLy8gQWxzbyBwYXNzIG5hdHVyYWwgdGV4dCBhY3Rpb25zIG9wdGlvbnMgKGZvciBuZXN0ZWQgbG9vcCBzdGVwcyB3aXRoIHdoaWxlIGxvb3AgYW5kIGNvbmRpdGlvbiBzdGVwcylcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMgPSB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnM7XG4gICAgICAvLyBQYXNzIGFkZFN0ZXBCZXR3ZWVuIGlucHV0cyB0byBuZXN0ZWQgc3RlcCBjb21wb25lbnRzXG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5hZGRTdGVwQmV0d2VlbkFib3ZlID0gdGhpcy5hZGRTdGVwQmV0d2VlbkFib3ZlO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuYWRkU3RlcEJldHdlZW5CZWxvdyA9IHRoaXMuYWRkU3RlcEJldHdlZW5CZWxvdztcbiAgICAgIC8vIEtlZXAgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGRlcHJlY2F0ZWQgYWRkU3RlcEJldHdlZW5cbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmFkZFN0ZXBCZXR3ZWVuID0gdGhpcy5hZGRTdGVwQmV0d2VlbjtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmVkaXRhYmxlID0gdGhpcy5lZGl0YWJsZSAhPT0gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIC8vIFBhc3MgbmF0dXJhbCB0ZXh0IGFjdGlvbnMgb3B0aW9ucyBhbmQgdGVtcGxhdGUgdmFyaWFibGVzIGZ1bmN0aW9uIHRvIGxvb3Agc3RlcHMgKGZvciB3aGlsZSBsb29wIGNvbmRpdGlvbiwgc2FtZSBhcyBjb25kaXRpb24tc3RlcClcbiAgICBpZiAoaXNMb29wU3RlcENvbmZpZyh0aGlzLnN0ZXApKSB7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMgPSB0aGlzLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzO1xuICAgIH1cbiAgICBcbiAgICAvLyBQYXNzIG5hdHVyYWwgdGV4dCBhY3Rpb25zIG9wdGlvbnMgYW5kIHRlbXBsYXRlIHZhcmlhYmxlcyBmdW5jdGlvbiB0byBjb25kaXRpb24gc3RlcHNcbiAgICBpZiAoaXNDb25kaXRpb25TdGVwQ29uZmlnKHRoaXMuc3RlcCkpIHtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMgPSB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnM7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyA9IHRoaXMuc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXM7XG4gICAgfVxuXG4gICAgdGhpcy53aXJlT3V0cHV0cyhpbnN0YW5jZSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB3aXJlT3V0cHV0cyhpbnN0YW5jZTogYW55KTogdm9pZCB7XG4gICAgLy8gU3RvcmUgc3Vic2NyaXB0aW9ucyBvbiB0aGUgaW5zdGFuY2UgdG8gcHJldmVudCBkdXBsaWNhdGVzXG4gICAgaWYgKCEoaW5zdGFuY2UgYXMgYW55KS5fY3FhU3Vic2NyaXB0aW9ucykge1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuX2NxYVN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICAgIH1cbiAgICBjb25zdCBzdWJzY3JpcHRpb25zID0gKGluc3RhbmNlIGFzIGFueSkuX2NxYVN1YnNjcmlwdGlvbnM7XG4gICAgXG4gICAgY29uc3Qgd2lyZSA9IChrZXk6IHN0cmluZywgZW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4pID0+IHtcbiAgICAgIGlmIChpbnN0YW5jZVtrZXldICYmIHR5cGVvZiBpbnN0YW5jZVtrZXldLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBVbnN1YnNjcmliZSBmcm9tIHByZXZpb3VzIHN1YnNjcmlwdGlvbiBpZiBleGlzdHNcbiAgICAgICAgY29uc3QgZXhpc3RpbmdTdWIgPSBzdWJzY3JpcHRpb25zLmdldChrZXkpO1xuICAgICAgICBpZiAoZXhpc3RpbmdTdWIpIHtcbiAgICAgICAgICBleGlzdGluZ1N1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBDcmVhdGUgbmV3IHN1YnNjcmlwdGlvblxuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBpbnN0YW5jZVtrZXldLnN1YnNjcmliZSgodjogYW55KSA9PiB7XG4gICAgICAgICAgZW1pdHRlci5lbWl0KHYpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3Vic2NyaXB0aW9ucy5zZXQoa2V5LCBzdWJzY3JpcHRpb24pO1xuICAgICAgfVxuICAgIH07XG4gICAgd2lyZSgnbmVzdGVkU3RlcENoYW5nZScsIHRoaXMubmVzdGVkU3RlcENoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2FkZFN0ZXAnLCB7XG4gICAgICBlbWl0OiAodjogYW55KSA9PiB7XG4gICAgICAgIGlmICh2ICE9IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICdicmFuY2gnIGluIHYpIHRoaXMuYWRkU3RlcEZvckJyYW5jaC5lbWl0KHYpO1xuICAgICAgICBlbHNlIGlmICh2ICE9IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICdsb29wU3RlcENvbmZpZycgaW4gdikgdGhpcy5hZGRTdGVwRm9yTG9vcC5lbWl0KHYpO1xuICAgICAgICBlbHNlIHRoaXMuYWRkU3RlcC5lbWl0KHYpO1xuICAgICAgfSxcbiAgICB9IGFzIGFueSk7XG4gICAgd2lyZSgnZGVsZXRlU3RlcCcsIHtcbiAgICAgIGVtaXQ6ICh2OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHYgIT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgJ2JyYW5jaCcgaW4gdiAmJiAnc3RlcEluZGV4JyBpbiB2KSB0aGlzLmRlbGV0ZVN0ZXBXaXRoQnJhbmNoLmVtaXQodik7XG4gICAgICAgIGVsc2UgdGhpcy5kZWxldGVTdGVwLmVtaXQodik7XG4gICAgICB9LFxuICAgIH0gYXMgYW55KTtcbiAgICB3aXJlKCd0b2dnbGVFeHBhbmRlZCcsIHtcbiAgICAgIGVtaXQ6ICh2OiBhbnkpID0+IHtcbiAgICAgICAgLy8gSGFuZGxlIGJvdGggYm9vbGVhbiBhbmQgb2JqZWN0IGZvcm1hdHNcbiAgICAgICAgLy8gSWYgaXQncyBhbiBvYmplY3Qgd2l0aCBjb25maWcgYW5kIGV4cGFuZGVkLCBlbWl0IGl0IGFzLWlzXG4gICAgICAgIC8vIElmIGl0J3MganVzdCBhIGJvb2xlYW4sIGVtaXQgaXQgYXMtaXNcbiAgICAgICAgdGhpcy50b2dnbGVFeHBhbmRlZC5lbWl0KHYpO1xuICAgICAgfSxcbiAgICB9IGFzIGFueSk7XG4gICAgd2lyZSgnZ3JvdXBOYW1lQ2hhbmdlJywgdGhpcy5ncm91cE5hbWVDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdkZXNjcmlwdGlvbkNoYW5nZScsIHRoaXMuZGVzY3JpcHRpb25DaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdyZXVzYWJsZUNoYW5nZScsIHRoaXMucmV1c2FibGVDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdvcGVuRXh0ZXJuYWwnLCB0aGlzLm9wZW5FeHRlcm5hbCBhcyBhbnkpO1xuICAgIHdpcmUoJ2VkaXQnLCB7XG4gICAgICBlbWl0OiAodjogYW55KSA9PiB7XG4gICAgICAgIC8vIElmIGNoaWxkIGNvbXBvbmVudCBlbWl0cyB2b2lkIG9yIG5vdGhpbmcsIHVzZSBjdXJyZW50IHN0ZXAgYW5kIGluZGV4XG4gICAgICAgIC8vIElmIGNoaWxkIGNvbXBvbmVudCBhbHJlYWR5IGVtaXRzIGFuIG9iamVjdCwgbWVyZ2UgaXQgd2l0aCBzdGVwIGFuZCBpbmRleFxuICAgICAgICBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAnc3RlcCcgaW4gdiAmJiAnaW5kZXgnIGluIHYpIHtcbiAgICAgICAgICAvLyBBbHJlYWR5IGhhcyBzdGVwIGFuZCBpbmRleCwgZW1pdCBhcy1pc1xuICAgICAgICAgIHRoaXMuZWRpdC5lbWl0KHYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEVtaXQgd2l0aCBjdXJyZW50IHN0ZXAgYW5kIGluZGV4XG4gICAgICAgICAgdGhpcy5lZGl0LmVtaXQoeyBzdGVwOiB0aGlzLnN0ZXAsIGluZGV4OiB0aGlzLmluZGV4IH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0gYXMgYW55KTtcbiAgICB3aXJlKCdsaW5rJywgdGhpcy5saW5rIGFzIGFueSk7XG4gICAgd2lyZSgnZHVwbGljYXRlJywgdGhpcy5kdXBsaWNhdGUgYXMgYW55KTtcbiAgICAvLyBXaXJlIGRlbGV0ZSBldmVudCAtIGludGVyY2VwdCBhbmQgZW1pdCB3aXRoIHN0ZXAgZGF0YSAoZm9yd2FyZCBwYXlsb2FkIHdoZW4gY2hpbGQgZW1pdHMgeyBzdGVwIH0gZm9yIG5lc3RlZCBkZWxldGVzKVxuICAgIGlmIChpbnN0YW5jZS5kZWxldGUgJiYgdHlwZW9mIGluc3RhbmNlLmRlbGV0ZS5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nU3ViID0gc3Vic2NyaXB0aW9ucy5nZXQoJ2RlbGV0ZScpO1xuICAgICAgaWYgKGV4aXN0aW5nU3ViKSB7XG4gICAgICAgIGV4aXN0aW5nU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBkZWxldGVTdWIgPSBpbnN0YW5jZS5kZWxldGUuc3Vic2NyaWJlKCh2OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHYgIT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdi5zdGVwKSB7XG4gICAgICAgICAgLy8gQSBuZXN0ZWQgc3RlcCBpcyBwcm9wYWdhdGluZyBpdHMgb3duIGRlbGV0aW9uIChlLmcuIG5vcm1hbCBzdGVwIGluc2lkZSBhIGxvb3AgaW5zaWRlIGEgYnJhbmNoKS5cbiAgICAgICAgICAvLyBGb3J3YXJkIGl0IHNvIGl0IGJ1YmJsZXMgdXAgdG8gc3RlcC1saXN0IGZvciBjb3JyZWN0IHNpbmdsZS1zdGVwIGRlbGV0aW9uLCBkbyBOT1QgdHJlYXQgYXMgcGFyZW50IHN0ZXAgZGVsZXRpb24uXG4gICAgICAgICAgdGhpcy5kZWxldGUuZW1pdCh2KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJyYW5jaCAhPSBudWxsICYmIHRoaXMuaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoZSBjdXJyZW50IHN0ZXAgKGRpcmVjdGx5IGluc2lkZSBhIGNvbmRpdGlvbiBicmFuY2gpIGlzIGRlbGV0aW5nIGl0c2VsZi5cbiAgICAgICAgICB0aGlzLmRlbGV0ZVN0ZXBXaXRoQnJhbmNoLmVtaXQoeyBicmFuY2g6IHRoaXMuYnJhbmNoLCBzdGVwSW5kZXg6IHRoaXMuaW5kZXggfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kZWxldGUuZW1pdCh7IHN0ZXA6IHRoaXMuc3RlcCB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzdWJzY3JpcHRpb25zLnNldCgnZGVsZXRlJywgZGVsZXRlU3ViKTtcbiAgICB9XG4gICAgd2lyZSgndmlld0RldGFpbHMnLCB0aGlzLnZpZXdEZXRhaWxzIGFzIGFueSk7XG4gICAgd2lyZSgnc2VsZWN0aW9uQ2hhbmdlJywgdGhpcy5zZWxlY3Rpb25DaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdjb25kaXRpb25DaGFuZ2UnLCB0aGlzLmNvbmRpdGlvbkNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2JyYW5jaFN0ZXBDaGFuZ2UnLCB0aGlzLmJyYW5jaFN0ZXBDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdhZGRTdGVwRm9yQnJhbmNoJywgdGhpcy5hZGRTdGVwRm9yQnJhbmNoIGFzIGFueSk7XG4gICAgd2lyZSgnZGVsZXRlU3RlcFdpdGhCcmFuY2gnLCB0aGlzLmRlbGV0ZVN0ZXBXaXRoQnJhbmNoIGFzIGFueSk7XG4gICAgd2lyZSgnYWRkQnJhbmNoJywgdGhpcy5hZGRCcmFuY2ggYXMgYW55KTtcbiAgICB3aXJlKCdhZGRFbHNlJywgdGhpcy5hZGRFbHNlIGFzIGFueSk7XG4gICAgd2lyZSgnZGVsZXRlQnJhbmNoJywgdGhpcy5kZWxldGVCcmFuY2ggYXMgYW55KTtcbiAgICB3aXJlKCdhZGRTdGVwRm9yTG9vcCcsIHRoaXMuYWRkU3RlcEZvckxvb3AgYXMgYW55KTtcbiAgICB3aXJlKCd0ZXN0RGF0YVByb2ZpbGVDaGFuZ2UnLCB0aGlzLnRlc3REYXRhUHJvZmlsZUNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ3N0YXJ0U3RlcENoYW5nZScsIHRoaXMuc3RhcnRTdGVwQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnZW5kU3RlcENoYW5nZScsIHRoaXMuZW5kU3RlcENoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ21heEl0ZXJhdGlvbnNDaGFuZ2UnLCB0aGlzLm1heEl0ZXJhdGlvbnNDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdldmVudFR5cGVDaGFuZ2UnLCB0aGlzLmV2ZW50VHlwZUNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ3BhcmFtZXRlckNoYW5nZScsIHRoaXMucGFyYW1ldGVyQ2hhbmdlIGFzIGFueSk7XG4gICAgLy8gV2lyZSBjbGlja0FjdGlvbiAtIHdyYXAgTW91c2VFdmVudCB3aXRoIHN0ZXAgZGF0YVxuICAgIGlmIChpbnN0YW5jZS5jbGlja0FjdGlvbiAmJiB0eXBlb2YgaW5zdGFuY2UuY2xpY2tBY3Rpb24uc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1N1YiA9IHN1YnNjcmlwdGlvbnMuZ2V0KCdjbGlja0FjdGlvbicpO1xuICAgICAgaWYgKGV4aXN0aW5nU3ViKSB7XG4gICAgICAgIGV4aXN0aW5nU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGlja0FjdGlvblN1YiA9IGluc3RhbmNlLmNsaWNrQWN0aW9uLnN1YnNjcmliZSgodjogYW55KSA9PiB7XG4gICAgICAgIC8vIElmIGNoaWxkIGNvbXBvbmVudCBlbWl0cyBhbiBvYmplY3Qgd2l0aCBldmVudCBhbmQgc3RlcCwgdXNlIGl0OyBvdGhlcndpc2Ugd3JhcCBNb3VzZUV2ZW50IHdpdGggY3VycmVudCBzdGVwXG4gICAgICAgIGlmICh2ICE9IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICdldmVudCcgaW4gdiAmJiAnc3RlcCcgaW4gdikge1xuICAgICAgICAgIHRoaXMuY2xpY2tBY3Rpb24uZW1pdCh2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBc3N1bWUgdiBpcyBhIE1vdXNlRXZlbnQsIHdyYXAgaXQgd2l0aCBjdXJyZW50IHN0ZXBcbiAgICAgICAgICB0aGlzLmNsaWNrQWN0aW9uLmVtaXQoeyBldmVudDogdiBhcyBNb3VzZUV2ZW50LCBzdGVwOiB0aGlzLnN0ZXAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc3Vic2NyaXB0aW9ucy5zZXQoJ2NsaWNrQWN0aW9uJywgY2xpY2tBY3Rpb25TdWIpO1xuICAgIH1cbiAgICB3aXJlKCdkbmREcm9wSW5ab25lJywgdGhpcy5kbmREcm9wSW5ab25lIGFzIGFueSk7XG4gICAgd2lyZSgnbG9hZE1vcmVEYXRhUHJvZmlsZXMnLCB0aGlzLmxvYWRNb3JlRGF0YVByb2ZpbGVzIGFzIGFueSk7XG4gICAgd2lyZSgnc2VhcmNoRGF0YVByb2ZpbGVzJywgdGhpcy5zZWFyY2hEYXRhUHJvZmlsZXMgYXMgYW55KTtcbiAgICB3aXJlKCdhZGRTdGVwQmV0d2VlbkNsaWNrJywgdGhpcy5hZGRTdGVwQmV0d2VlbkNsaWNrIGFzIGFueSk7XG4gICAgLy8gV2lyZSBlZGl0SW5EZXB0aCAtIGNoZWNrIGlmIGl0IGV4aXN0cyBvbiBpbnN0YW5jZVxuICAgIGlmIChpbnN0YW5jZS5lZGl0SW5EZXB0aCAmJiB0eXBlb2YgaW5zdGFuY2UuZWRpdEluRGVwdGguc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1N1YiA9IHN1YnNjcmlwdGlvbnMuZ2V0KCdlZGl0SW5EZXB0aCcpO1xuICAgICAgaWYgKGV4aXN0aW5nU3ViKSB7XG4gICAgICAgIGV4aXN0aW5nU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBlZGl0SW5EZXB0aFN1YiA9IGluc3RhbmNlLmVkaXRJbkRlcHRoLnN1YnNjcmliZSgodjogYW55KSA9PiB7XG4gICAgICAgIC8vIElmIGNoaWxkIGNvbXBvbmVudCBlbWl0cyBhbiBvYmplY3Qgd2l0aCBzdGVwLCB1c2UgaXQ7IG90aGVyd2lzZSB1c2UgY3VycmVudCBzdGVwIGFuZCBpbmRleFxuICAgICAgICBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAnc3RlcCcgaW4gdikge1xuICAgICAgICAgIGNvbnN0IHBheWxvYWQ6IHsgc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnOyBpbmRleDogbnVtYmVyOyB0ZW1wbGF0ZU92ZXJyaWRlPzogYW55OyBpc0NyZWF0ZU1vZGU/OiBib29sZWFuOyBjcmVhdGVNb2RlQnJhbmNoRGF0YT86IGFueSB9ID0ge1xuICAgICAgICAgICAgc3RlcDogdi5zdGVwLFxuICAgICAgICAgICAgaW5kZXg6IHYuaW5kZXggPz8gdGhpcy5pbmRleCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh2LnRlbXBsYXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgIHBheWxvYWQudGVtcGxhdGVPdmVycmlkZSA9IHYudGVtcGxhdGVPdmVycmlkZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHYuaXNDcmVhdGVNb2RlKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzQ3JlYXRlTW9kZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2LmNyZWF0ZU1vZGVCcmFuY2hEYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgIHBheWxvYWQuY3JlYXRlTW9kZUJyYW5jaERhdGEgPSB2LmNyZWF0ZU1vZGVCcmFuY2hEYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmVkaXRJbkRlcHRoLmVtaXQocGF5bG9hZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lZGl0SW5EZXB0aC5lbWl0KHsgc3RlcDogdGhpcy5zdGVwLCBpbmRleDogdGhpcy5pbmRleCB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzdWJzY3JpcHRpb25zLnNldCgnZWRpdEluRGVwdGgnLCBlZGl0SW5EZXB0aFN1Yik7XG4gICAgfVxuICAgIC8vIFdpcmUgc3RlcFVwZGF0ZSAtIGNoZWNrIGlmIGl0IGV4aXN0cyBvbiBpbnN0YW5jZVxuICAgIGlmIChpbnN0YW5jZS5zdGVwVXBkYXRlKSB7XG4gICAgICBjb25zb2xlLmxvZygnUmVuZGVyZXI6IEZvdW5kIHN0ZXBVcGRhdGUgRXZlbnRFbWl0dGVyLCB3aXJpbmcgaXQnKTtcbiAgICAgIHdpcmUoJ3N0ZXBVcGRhdGUnLCB0aGlzLnN0ZXBVcGRhdGUgYXMgYW55KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdSZW5kZXJlcjogc3RlcFVwZGF0ZSBFdmVudEVtaXR0ZXIgbm90IGZvdW5kIG9uIGluc3RhbmNlIGR1cmluZyB3aXJlT3V0cHV0cycsIHtcbiAgICAgICAgc3RlcElkOiB0aGlzLnN0ZXA/LmlkLFxuICAgICAgICBzdGVwVHlwZTogdGhpcy5zdGVwPy5zdGVwVHlwZSxcbiAgICAgICAgaW5zdGFuY2VLZXlzOiBPYmplY3Qua2V5cyhpbnN0YW5jZSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIENsZWFuIHVwIHN1YnNjcmlwdGlvbnMgd2hlbiBjb21wb25lbnQgaXMgZGVzdHJveWVkXG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSkge1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9ICh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpLl9jcWFTdWJzY3JpcHRpb25zO1xuICAgICAgaWYgKHN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWI6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChzdWIgJiYgdHlwZW9mIHN1Yi51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3Vic2NyaXB0aW9ucy5jbGVhcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLXJlbGF0aXZlIGNxYS1zdGVwLXJlbmRlcmVyLWhvdmVyLWNvbnRhaW5lclwiPlxuICAgIDxidXR0b24gKm5nSWY9XCJlZGl0YWJsZSAmJiAhaXNSZW9yZGVyICYmIChhZGRTdGVwQmV0d2VlbkFib3ZlICYmIGFkZFN0ZXBCZXR3ZWVuKVwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWFic29sdXRlIGNxYS10b3AtW2NhbGMoMCAtIDEycHgpXSBjcWEtbGVmdC1bNTAlXSBjcWEtdHJhbnNsYXRlLXgtWy01MCVdIGNxYS1wLTAgY3FhLXotWzFdIGNxYS1hZGQtc3RlcC1iZXR3ZWVuLWJ0blwiXG4gICAgICAgIHN0eWxlPVwidG9wOiAtMTJweDtcIiAoY2xpY2spPVwiYWRkU3RlcEJldHdlZW5DbGljay5lbWl0KHtzdGVwOiBzdGVwLCBpbmRleDogaW5kZXgsIHBvc2l0aW9uOiAnQUJPVkUnfSlcIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cmVjdCB4PVwiMVwiIHk9XCIxXCIgd2lkdGg9XCIyMS4xODIyXCIgaGVpZ2h0PVwiMjJcIiByeD1cIjEwLjU5MTFcIiBmaWxsPVwid2hpdGVcIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjFcIiB5PVwiMVwiIHdpZHRoPVwiMjEuMTgyMlwiIGhlaWdodD1cIjIyXCIgcng9XCIxMC41OTExXCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS13aWR0aD1cIjJcIiAvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk04LjUgMTJIMTUuNVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMiA4LjVWMTUuNVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICA8L3N2Zz5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXN0ZXAtaG9zdC13cmFwcGVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgI3N0ZXBIb3N0PjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gKm5nSWY9XCJlZGl0YWJsZSAmJiAhaXNSZW9yZGVyICYmIChhZGRTdGVwQmV0d2VlbkJlbG93ICYmIGFkZFN0ZXBCZXR3ZWVuKVwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWFic29sdXRlIGNxYS10b3AtW2NhbGMoMTAwJS0xMnB4KV0gY3FhLWxlZnQtWzUwJV0gY3FhLXRyYW5zbGF0ZS14LVstNTAlXSBjcWEtcC0wIGNxYS16LVsxXSBjcWEtYWRkLXN0ZXAtYmV0d2Vlbi1idG5cIlxuICAgICAgICAoY2xpY2spPVwiYWRkU3RlcEJldHdlZW5DbGljay5lbWl0KHtzdGVwOiBzdGVwLCBpbmRleDogaW5kZXgsIHBvc2l0aW9uOiAnQkVMT1cnfSlcIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cmVjdCB4PVwiMVwiIHk9XCIxXCIgd2lkdGg9XCIyMS4xODIyXCIgaGVpZ2h0PVwiMjJcIiByeD1cIjEwLjU5MTFcIiBmaWxsPVwid2hpdGVcIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjFcIiB5PVwiMVwiIHdpZHRoPVwiMjEuMTgyMlwiIGhlaWdodD1cIjIyXCIgcng9XCIxMC41OTExXCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS13aWR0aD1cIjJcIiAvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk04LjUgMTJIMTUuNVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMiA4LjVWMTUuNVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICA8L3N2Zz5cbiAgICA8L2J1dHRvbj5cbjwvZGl2PiJdfQ==
|
|
567
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlci90ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULGdCQUFnQixFQUVoQixZQUFZLEVBRVosTUFBTSxHQU1QLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSw0QkFBNEIsRUFBNEIsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RyxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLHNCQUFzQixHQUd2QixNQUFNLDBCQUEwQixDQUFDOzs7QUFPbEMsTUFBTSxPQUFPLGdDQUFnQztJQTRGM0MsWUFDZ0QsWUFBc0MsRUFDNUUsR0FBc0I7UUFEZ0IsaUJBQVksR0FBWixZQUFZLENBQTBCO1FBQzVFLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBekZ2QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQ3ZDLG1GQUFtRjtRQUMxRSxvQkFB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bnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgSW5qZWN0LFxuICBBZnRlclZpZXdJbml0LFxuICBEb0NoZWNrLFxuICBPbkRlc3Ryb3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVEVTVF9DQVNFX1NURVBfQ09NUE9ORU5UX01BUCwgVGVzdENhc2VTdGVwQ29tcG9uZW50TWFwIH0gZnJvbSAnLi4vdGVzdC1jYXNlLXN0ZXAtY29tcG9uZW50cy50b2tlbic7XG5pbXBvcnQge1xuICBUZXN0Q2FzZVN0ZXBDb25maWcsXG4gIGlzU3RlcEdyb3VwQ29uZmlnLFxuICBpc0NvbmRpdGlvblN0ZXBDb25maWcsXG4gIGlzTG9vcFN0ZXBDb25maWcsXG4gIGlzTm9ybWFsU3RlcENvbmZpZyxcbiAgaXNBcGlTdGVwQ29uZmlnLFxuICBpc0RhdGFiYXNlU3RlcENvbmZpZyxcbiAgaXNBaUFnZW50U3RlcENvbmZpZyxcbiAgaXNBaVZlcmlmeVN0ZXBDb25maWcsXG4gIGlzVXBsb2FkU3RlcENvbmZpZyxcbiAgaXNTY3JlZW5zaG90U3RlcENvbmZpZyxcbiAgaXNTY3JvbGxTdGVwQ29uZmlnLFxuICBpc1ZlcmlmeVVybFN0ZXBDb25maWcsXG4gIGlzUmVzdG9yZVNlc3Npb25TdGVwQ29uZmlnLFxuICBpc0N1c3RvbUNvZGVTdGVwQ29uZmlnLFxuICBDb25kaXRpb25CcmFuY2gsXG4gIExvb3BTdGVwQ29uZmlnLFxufSBmcm9tICcuLi90ZXN0LWNhc2Utc3RlcC5tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtdGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG59KVxuZXhwb3J0IGNsYXNzIFRlc3RDYXNlRGV0YWlsc1JlbmRlcmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBEb0NoZWNrLCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdzdGVwSG9zdCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBzdGVwSG9zdCE6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgQElucHV0KCkgc3RlcCE6IFRlc3RDYXNlU3RlcENvbmZpZztcbiAgQElucHV0KCkgaW5kZXghOiBudW1iZXI7XG4gIEBJbnB1dCgpIGlzTmVzdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzSW5zaWRlTG9vcDogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgc3RlcCBpcyBuZXN0ZWQgKGF0IGFueSBkZXB0aCkgaW5zaWRlIGEgRk9SIGxvb3Agc3BlY2lmaWNhbGx5LiAqL1xuICBASW5wdXQoKSBpc0luc2lkZUZvckxvb3A6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFdoZW4gdHJ1ZSwgc3RlcCBpcyByZW5kZXJlZCBpbnNpZGUgYSBzdGVwLWdyb3VwOyByb3cgYWN0aW9ucyAoRWRpdC9EdXBsaWNhdGUvRGVsZXRlKSBhcmUgaGlkZGVuLiAqL1xuICBASW5wdXQoKSBpc0luc2lkZVN0ZXBHcm91cDogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogVmlzdWFsIGluZGVudGF0aW9uIGxldmVsIGZvciBuZXN0ZWQgc3RydWN0dXJlcyAobG9vcHMvc3RlcC1ncm91cHMvY29uZGl0aW9ucykuICovXG4gIEBJbnB1dCgpIG5lc3RpbmdMZXZlbDogbnVtYmVyID0gMDtcbiAgLyoqIFdoZW4gcmVuZGVyaW5nIGEgc3RlcCBpbnNpZGUgYSBjb25kaXRpb24gYnJhbmNoLCB0aGUgYnJhbmNoIGNvbnRleHQgKGZvciBhZGRTdGVwRm9yQnJhbmNoIC8gZGVsZXRlU3RlcFdpdGhCcmFuY2gpLiAqL1xuICBASW5wdXQoKSBicmFuY2g/OiBDb25kaXRpb25CcmFuY2g7XG4gIC8qKiBXaGVuIHRydWUsIGVuYWJsZXMgZHJhZy1hbmQtZHJvcCByZW9yZGVyaW5nIGFuZCBzaG93cyBkcmFnIGhhbmRsZSBpY29uIGluc3RlYWQgb2YgY2hlY2tib3ggKi9cbiAgQElucHV0KCkgaXNSZW9yZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBUcnVlIHdoZW4gYW55IGFuY2VzdG9yIHN0ZXAgaXMgc2tpcHBlZDsgdXNlZCB0byBjYXNjYWRlIHNraXBwZWQgc3R5bGluZyB0byBuZXN0ZWQgcm93cy4gKi9cbiAgQElucHV0KCkgaXNQYXJlbnRTa2lwcGVkOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBDdXJyZW50IHNlbGVjdGlvbiBzdGF0ZTsgd2hlbiBjaGFuZ2VkIChlLmcuIGZyb20gU2VsZWN0IGFsbCksIHRoZSBjcmVhdGVkIHN0ZXAgY29tcG9uZW50IGlzIHVwZGF0ZWQgc28gdGhlIGNoZWNrYm94IHJlZmxlY3RzIGl0ICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkPzogYm9vbGVhbjtcbiAgLyoqIEdsb2JhbCBkdXBsaWNhdGUtaW4tcHJvZ3Jlc3Mgc3RhdGUgdXNlZCB0byBkaXNhYmxlIGR1cGxpY2F0ZSBhY3Rpb25zIGFuZCBzaG93IGxvYWRpbmcgZmVlZGJhY2suICovXG4gIEBJbnB1dCgpIGlzRHVwbGljYXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFNob3cgXCJBZGQgU3RlcCBCZXR3ZWVuXCIgYnV0dG9uIGFib3ZlIHRoZSBzdGVwICovXG4gIEBJbnB1dCgpIGFkZFN0ZXBCZXR3ZWVuQWJvdmU6IGJvb2xlYW4gPSB0cnVlO1xuICAvKiogU2hvdyBcIkFkZCBTdGVwIEJldHdlZW5cIiBidXR0b24gYmVsb3cgdGhlIHN0ZXAgKi9cbiAgQElucHV0KCkgYWRkU3RlcEJldHdlZW5CZWxvdzogYm9vbGVhbiA9IHRydWU7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgYWRkU3RlcEJldHdlZW5BYm92ZSBhbmQgYWRkU3RlcEJldHdlZW5CZWxvdyBpbnN0ZWFkLiBJZiBzZXQsIGFwcGxpZXMgdG8gYm90aCBidXR0b25zLiAqL1xuICBASW5wdXQoKSBhZGRTdGVwQmV0d2VlbjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogV2hlbiBmYWxzZSwgaGlkZXMgZWRpdC9kdXBsaWNhdGUvZGVsZXRlIGFjdGlvbnMgYW5kIGFkZC1zdGVwLWJldHdlZW4gYnV0dG9ucyBvbiBzdGVwcyAoZS5nLiBmb3IgdHJhc2hlZCB0ZXN0IGNhc2VzKS4gKi9cbiAgQElucHV0KCkgZWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAvKiogQ3VycmVudCB0ZXN0IGNhc2UgaWQgKHBvcnRhbCkuIFVzZWQgc28gcmV1c2FibGUgc3RlcCBncm91cHMgY2FuIGhpZGUgdGhlIFwiZWRpdCBpbiBzb3VyY2UgdGVzdCBjYXNlXCIgaGludCB3aGVuIGFscmVhZHkgdmlld2luZyB0aGF0IHN0ZXAgZ3JvdXAncyB0ZXN0IGNhc2UuICovXG4gIEBJbnB1dCgpIGN1cnJlbnRUZXN0Q2FzZUlkPzogbnVtYmVyIHwgc3RyaW5nO1xuICAvKiogVGVzdCBjYXNlJ3MgZGVmYXVsdCB0ZXN0IGRhdGEgcHJvZmlsZSBpZCAodGVzdENhc2UudGVzdERhdGFJZCkuIEZvcndhcmRlZCB0byBuZXN0ZWQgbG9vcCBzdGVwcy4gKi9cbiAgQElucHV0KCkgdGVzdENhc2VUZXN0RGF0YUlkPzogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBuZXN0ZWRTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZzsgaW5kZXg6IG51bWJlciB9PigpO1xuICBAT3V0cHV0KCkgYWRkU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZVN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHRvZ2dsZUV4cGFuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuIHwge2NvbmZpZzogVGVzdENhc2VTdGVwQ29uZmlnLCBleHBhbmRlZDogYm9vbGVhbn0+KCk7XG4gIEBPdXRwdXQoKSBncm91cE5hbWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGRlc2NyaXB0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSByZXVzYWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIG9wZW5FeHRlcm5hbCA9IG5ldyBFdmVudEVtaXR0ZXI8e3N0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZ30+KCk7XG4gIEBPdXRwdXQoKSBlZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjx7c3RlcDogVGVzdENhc2VTdGVwQ29uZmlnLCBpbmRleDogbnVtYmVyfT4oKTtcbiAgQE91dHB1dCgpIGxpbmsgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBkdXBsaWNhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnIH0gfCB2b2lkPigpO1xuICBAT3V0cHV0KCkgdmlld0RldGFpbHMgPSBuZXcgRXZlbnRFbWl0dGVyPGltcG9ydCgnLi4vc3RlcC1kZXRhaWxzLW1vZGFsL3N0ZXAtZGV0YWlscy1tb2RhbC1kYXRhJykuVmlld0RldGFpbHNQYXlsb2FkPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgY29uZGl0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBicmFuY2hTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoOyBzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWc7IHN0ZXBJbmRleDogbnVtYmVyIH0+KCk7XG4gIEBPdXRwdXQoKSBhZGRTdGVwRm9yQnJhbmNoID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoIH0+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gZW1wdHkgbG9vcCBzdGVwIHBsdXMgaXMgY2xpY2tlZDsgc2FtZSBiZWhhdmlvdXIgYXMgYWRkLXN0ZXAtYmV0d2VlbiAocGFyZW50SWQgPSBsb29wIHN0ZXAgaWQpLiAqL1xuICBAT3V0cHV0KCkgYWRkU3RlcEZvckxvb3AgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbG9vcFN0ZXBDb25maWc6IExvb3BTdGVwQ29uZmlnIH0+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVTdGVwV2l0aEJyYW5jaCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBicmFuY2g6IENvbmRpdGlvbkJyYW5jaDsgc3RlcEluZGV4OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgpIGFkZEJyYW5jaCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBcIkFkZCBFbHNlXCIgaW4gYSBjb25kaXRpb24gc3RlcDsgcGFyZW50IHNob3VsZCBjYWxsIFBPU1QgdGVzdF9zdGVwcyB3aXRoIGNvbmRpdGlvblR5cGUgQ09ORElUSU9OX0VMU0UgKi9cbiAgQE91dHB1dCgpIGFkZEVsc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29uZGl0aW9uU3RlcENvbmZpZzogVGVzdENhc2VTdGVwQ29uZmlnIH0+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVCcmFuY2ggPSBuZXcgRXZlbnRFbWl0dGVyPENvbmRpdGlvbkJyYW5jaD4oKTtcbiAgQE91dHB1dCgpIHRlc3REYXRhUHJvZmlsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgc3RhcnRTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBlbmRTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBtYXhJdGVyYXRpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBldmVudFR5cGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHBhcmFtZXRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY2xpY2tBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnQ6IE1vdXNlRXZlbnQ7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyB9PigpO1xuICAvKiogRW1pdHRlZCB3aGVuIGEgc3RlcCBpcyBkcm9wcGVkIGluIGEgbmVzdGVkIGRyb3B6b25lIChzdGVwLWdyb3VwLCBsb29wLCBjb25kaXRpb24pLiBQYXlsb2FkOiB7IGV2ZW50LCB0YXJnZXRMaXN0IH0uICovXG4gIEBPdXRwdXQoKSBkbmREcm9wSW5ab25lID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBhbnk7IHRhcmdldExpc3Q6IFRlc3RDYXNlU3RlcENvbmZpZ1tdIH0+KCk7XG4gIC8qKiBEYXRhIHByb2ZpbGUgb3B0aW9ucyBmb3IgbG9vcCBzdGVwcyAqL1xuICBASW5wdXQoKSBkYXRhUHJvZmlsZU9wdGlvbnM6IGFueVtdID0gW107XG4gIC8qKiBJbmRpY2F0ZXMgaWYgbW9yZSBkYXRhIHByb2ZpbGVzIGFyZSBhdmFpbGFibGUgZm9yIGxvYWRpbmcgKi9cbiAgQElucHV0KCkgaGFzTW9yZURhdGFQcm9maWxlczogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogTG9hZGluZyBzdGF0ZSBmb3IgZGF0YSBwcm9maWxlcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdEYXRhUHJvZmlsZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIE5hdHVyYWwgdGV4dCBhY3Rpb25zIG9wdGlvbnMgZm9yIHdoaWxlIGxvb3AgY29uZGl0aW9uICovXG4gIEBJbnB1dCgpIG5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnM6IGFueVtdID0gW107XG4gIC8qKiBGdW5jdGlvbiB0byBwcm9jZXNzIHRlbXBsYXRlIHZhcmlhYmxlcyBmb3IgY29uZGl0aW9uIHN0ZXBzICovXG4gIEBJbnB1dCgpIHNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzOiAodGVtcGxhdGU6IGFueSkgPT4gYW55W10gPSAoKSA9PiBbXTtcbiAgLyoqIEVtaXQgd2hlbiBtb3JlIGRhdGEgcHJvZmlsZXMgbmVlZCB0byBiZSBsb2FkZWQgKi9cbiAgQE91dHB1dCgpIGxvYWRNb3JlRGF0YVByb2ZpbGVzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIC8qKiBFbWl0IHdoZW4gZGF0YSBwcm9maWxlIHNlYXJjaCBxdWVyeSBjaGFuZ2VzICovXG4gIEBPdXRwdXQoKSBzZWFyY2hEYXRhUHJvZmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXQgd2hlbiBhIHN0ZXAgaXMgdXBkYXRlZCAoZS5nLiwgQXBwbHkgYnV0dG9uIGNsaWNrZWQgaW4gbG9vcC1zdGVwIGVkaXQgbW9kZSkgKi9cbiAgQE91dHB1dCgpIHN0ZXBVcGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRlc3RDYXNlU3RlcENvbmZpZz4oKTtcbiAgQE91dHB1dCgpIGFkZFN0ZXBCZXR3ZWVuQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHtzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcsIGluZGV4OiBudW1iZXIsIHBvc2l0aW9uOiAnQUJPVkUnIHwgJ0JFTE9XJ30+KCk7XG4gIC8qKiBFbWl0IHdoZW4gdXNlciBjbGlja3MgXCJFZGl0IEluIGRlcHRoXCIgaW4gY29uZGl0aW9uLXN0ZXAgKG9yIG90aGVyIHN0ZXBzIHRoYXQgc3VwcG9ydCBpdCkgKi9cbiAgQE91dHB1dCgpIGVkaXRJbkRlcHRoID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZzsgaW5kZXg6IG51bWJlcjsgdGVtcGxhdGVPdmVycmlkZT86IGFueTsgaXNDcmVhdGVNb2RlPzogYm9vbGVhbjsgY3JlYXRlTW9kZUJyYW5jaERhdGE/OiBhbnkgfT4oKTtcblxuICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsYXN0U3luY2VkU3RlcE51bWJlcjogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoVEVTVF9DQVNFX1NURVBfQ09NUE9ORU5UX01BUCkgcHJpdmF0ZSBjb21wb25lbnRNYXA6IFRlc3RDYXNlU3RlcENvbXBvbmVudE1hcCxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlclN0ZXAoKTtcbiAgfVxuXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICAvLyBTdGVwIG51bWJlcnMgYXJlIGZyZXF1ZW50bHkgcmVjb21wdXRlZCBpbi1wbGFjZSBvbiBleGlzdGluZyBzdGVwIG9iamVjdHMuXG4gICAgLy8gRm9yIGR5bmFtaWNhbGx5IGNyZWF0ZWQgY2hpbGQgY29tcG9uZW50cywgdGhhdCBkb2Vzbid0IHRyaWdnZXIgbmdPbkNoYW5nZXMsXG4gICAgLy8gc28ga2VlcCB0aGUgcmVuZGVyZWQgc3RlcE51bWJlciBpbnB1dCBpbiBzeW5jIG1hbnVhbGx5LlxuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlIHx8ICF0aGlzLnN0ZXApIHJldHVybjtcbiAgICBjb25zdCBsYXRlc3RTdGVwTnVtYmVyID0gKHRoaXMuc3RlcCBhcyBhbnkpLnN0ZXBOdW1iZXI7XG4gICAgaWYgKHRoaXMubGFzdFN5bmNlZFN0ZXBOdW1iZXIgIT09IGxhdGVzdFN0ZXBOdW1iZXIpIHtcbiAgICAgICh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpLnN0ZXBOdW1iZXIgPSBsYXRlc3RTdGVwTnVtYmVyO1xuICAgICAgdGhpcy5sYXN0U3luY2VkU3RlcE51bWJlciA9IGxhdGVzdFN0ZXBOdW1iZXI7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHN0cnVjdHVyYWxDaGFuZ2UgPSBjaGFuZ2VzWydzdGVwJ10gfHwgY2hhbmdlc1snaW5kZXgnXSB8fCBjaGFuZ2VzWydpc05lc3RlZCddIHx8IGNoYW5nZXNbJ2lzSW5zaWRlTG9vcCddIHx8IGNoYW5nZXNbJ2lzSW5zaWRlRm9yTG9vcCddIHx8XG4gICAgICAgIGNoYW5nZXNbJ2lzSW5zaWRlU3RlcEdyb3VwJ10gfHwgY2hhbmdlc1snaXNSZW9yZGVyJ10gfHwgY2hhbmdlc1snZWRpdGFibGUnXSB8fCBjaGFuZ2VzWydpc1BhcmVudFNraXBwZWQnXTtcbiAgICBjb25zdCBvcHRpb25zT25seUNoYW5nZSA9IChjaGFuZ2VzWydkYXRhUHJvZmlsZU9wdGlvbnMnXSB8fCBjaGFuZ2VzWydoYXNNb3JlRGF0YVByb2ZpbGVzJ10gfHwgY2hhbmdlc1snaXNMb2FkaW5nRGF0YVByb2ZpbGVzJ10gfHxcbiAgICAgICAgY2hhbmdlc1snbmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyddIHx8IGNoYW5nZXNbJ3NldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzJ10pICYmICFzdHJ1Y3R1cmFsQ2hhbmdlO1xuXG4gICAgaWYgKHN0cnVjdHVyYWxDaGFuZ2UpIHtcbiAgICAgIHRoaXMucmVuZGVyU3RlcCgpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9uc09ubHlDaGFuZ2UgJiYgdGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlICE9IG51bGwgJiYgdGhpcy5zdGVwICE9IG51bGwpIHtcbiAgICAgIC8vIFVwZGF0ZSBvbmx5IHByb2ZpbGUvb3B0aW9ucyBpbnB1dHMgc28gd2UgZG9uJ3QgZGVzdHJveSB0aGUgc3RlcCAoZS5nLiBvcGVuaW5nIGRhdGEgcHJvZmlsZSBkcm9wZG93blxuICAgICAgLy8gbG9hZHMgb3B0aW9ucyBhbmQgd291bGQgb3RoZXJ3aXNlIHJlY3JlYXRlIHRoZSBjb21wb25lbnQgYW5kIGNvbGxhcHNlIGlubGluZSBlZGl0KVxuICAgICAgdGhpcy51cGRhdGVPcHRpb25zSW5wdXRzKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZXNbJ3NlbGVjdGVkJ10gJiYgdGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpLnNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZXNbJ2lzRHVwbGljYXRpbmcnXSAmJiB0aGlzLmNvbXBvbmVudFJlZj8uaW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIGFueSkuaXNEdXBsaWNhdGluZyA9IHRoaXMuaXNEdXBsaWNhdGluZztcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZXNbJ2N1cnJlbnRUZXN0Q2FzZUlkJ10gJiYgdGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlICE9IG51bGwgJiZcbiAgICAgICAgKGlzU3RlcEdyb3VwQ29uZmlnKHRoaXMuc3RlcCEpIHx8IGlzTG9vcFN0ZXBDb25maWcodGhpcy5zdGVwISkgfHwgaXNDb25kaXRpb25TdGVwQ29uZmlnKHRoaXMuc3RlcCEpKSkge1xuICAgICAgKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIGFueSkuY3VycmVudFRlc3RDYXNlSWQgPSB0aGlzLmN1cnJlbnRUZXN0Q2FzZUlkO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBVcGRhdGUgb25seSBkYXRhIHByb2ZpbGUgLyBvcHRpb25zIGlucHV0cyBvbiBleGlzdGluZyBpbnN0YW5jZSAoYXZvaWRzIGZ1bGwgcmVjcmVhdGUgYW5kIGxvc2luZyBpc0VkaXRpbmcpLiAqL1xuICBwcml2YXRlIHVwZGF0ZU9wdGlvbnNJbnB1dHMoaW5zdGFuY2U6IGFueSk6IHZvaWQge1xuICAgIGlmIChpc0xvb3BTdGVwQ29uZmlnKHRoaXMuc3RlcCEpIHx8IGlzQ29uZGl0aW9uU3RlcENvbmZpZyh0aGlzLnN0ZXAhKSB8fCBpc1N0ZXBHcm91cENvbmZpZyh0aGlzLnN0ZXAhKSkge1xuICAgICAgY29uc3QgcHJldk9wdGlvbnMgPSAoaW5zdGFuY2UgYXMgYW55KS5kYXRhUHJvZmlsZU9wdGlvbnM7XG4gICAgICBjb25zdCBwcmV2SGFzTW9yZSA9IChpbnN0YW5jZSBhcyBhbnkpLmhhc01vcmVEYXRhUHJvZmlsZXM7XG4gICAgICBjb25zdCBwcmV2TG9hZGluZyA9IChpbnN0YW5jZSBhcyBhbnkpLmlzTG9hZGluZ0RhdGFQcm9maWxlcztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmRhdGFQcm9maWxlT3B0aW9ucyA9IHRoaXMuZGF0YVByb2ZpbGVPcHRpb25zO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuaGFzTW9yZURhdGFQcm9maWxlcyA9IHRoaXMuaGFzTW9yZURhdGFQcm9maWxlcztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmlzTG9hZGluZ0RhdGFQcm9maWxlcyA9IHRoaXMuaXNMb2FkaW5nRGF0YVByb2ZpbGVzO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmFkZFN0ZXBCZXR3ZWVuQWJvdmUgPSB0aGlzLmFkZFN0ZXBCZXR3ZWVuQWJvdmU7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5hZGRTdGVwQmV0d2VlbkJlbG93ID0gdGhpcy5hZGRTdGVwQmV0d2VlbkJlbG93O1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuYWRkU3RlcEJldHdlZW4gPSB0aGlzLmFkZFN0ZXBCZXR3ZWVuO1xuICAgICAgLy8gVHJpZ2dlciBuZ09uQ2hhbmdlcyBzbyB0aGUgc3RlcCB1cGRhdGVzIGl0cyBUZXN0IERhdGEgcHJvZmlsZSBzZWxlY3QgY29uZmlnIChzZWFyY2gvbG9hZCBtb3JlIG9wdGlvbnMpLlxuICAgICAgLy8gRHluYW1pY2FsbHkgY3JlYXRlZCBjb21wb25lbnRzIGRvIG5vdCBnZXQgQElucHV0KCkgY2hhbmdlIGRldGVjdGlvbiBmcm9tIHRoZSB0ZW1wbGF0ZS5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UubmdPbkNoYW5nZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlczogU2ltcGxlQ2hhbmdlcyA9IHtcbiAgICAgICAgICBkYXRhUHJvZmlsZU9wdGlvbnM6IG5ldyBTaW1wbGVDaGFuZ2UocHJldk9wdGlvbnMsIHRoaXMuZGF0YVByb2ZpbGVPcHRpb25zLCBmYWxzZSksXG4gICAgICAgICAgaGFzTW9yZURhdGFQcm9maWxlczogbmV3IFNpbXBsZUNoYW5nZShwcmV2SGFzTW9yZSwgdGhpcy5oYXNNb3JlRGF0YVByb2ZpbGVzLCBmYWxzZSksXG4gICAgICAgICAgaXNMb2FkaW5nRGF0YVByb2ZpbGVzOiBuZXcgU2ltcGxlQ2hhbmdlKHByZXZMb2FkaW5nLCB0aGlzLmlzTG9hZGluZ0RhdGFQcm9maWxlcywgZmFsc2UpLFxuICAgICAgICB9O1xuICAgICAgICBpbnN0YW5jZS5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzTG9vcFN0ZXBDb25maWcodGhpcy5zdGVwISkpIHtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMgPSB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnM7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyA9IHRoaXMuc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXM7XG4gICAgfVxuICAgIGlmIChpc0NvbmRpdGlvblN0ZXBDb25maWcodGhpcy5zdGVwISkpIHtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMgPSB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnM7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyA9IHRoaXMuc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXM7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb21wb25lbnRUeXBlKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IGFueSB7XG4gICAgaWYgKGlzU3RlcEdyb3VwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuc3RlcEdyb3VwO1xuICAgIGlmIChpc0NvbmRpdGlvblN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5jb25kaXRpb25TdGVwO1xuICAgIGlmIChpc0xvb3BTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAubG9vcFN0ZXA7XG4gICAgaWYgKGlzQXBpU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmFwaVN0ZXA7XG4gICAgaWYgKGlzRGF0YWJhc2VTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuZGF0YWJhc2VTdGVwO1xuICAgIGlmIChpc0FpQWdlbnRTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuYWlBZ2VudFN0ZXA7XG4gICAgaWYgKGlzQWlWZXJpZnlTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuYWlWZXJpZnlTdGVwO1xuICAgIGlmIChpc1VwbG9hZFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC51cGxvYWRTdGVwO1xuICAgIGlmIChpc1NjcmVlbnNob3RTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuc2NyZWVuc2hvdFN0ZXA7XG4gICAgaWYgKGlzU2Nyb2xsU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnNjcm9sbFN0ZXA7XG4gICAgaWYgKGlzVmVyaWZ5VXJsU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnZlcmlmeVVybFN0ZXA7XG4gICAgaWYgKGlzUmVzdG9yZVNlc3Npb25TdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAucmVzdG9yZVNlc3Npb25TdGVwO1xuICAgIGlmIChpc0N1c3RvbUNvZGVTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuY3VzdG9tQ29kZVN0ZXA7XG4gICAgaWYgKGlzTm9ybWFsU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLm5vcm1hbFN0ZXA7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclN0ZXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnN0ZXBIb3N0IHx8ICF0aGlzLnN0ZXApIHJldHVybjtcblxuICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSB0aGlzLmdldENvbXBvbmVudFR5cGUodGhpcy5zdGVwKTtcbiAgICBpZiAoIWNvbXBvbmVudFR5cGUpIHJldHVybjtcblxuICAgIHRoaXMuc3RlcEhvc3QuY2xlYXIoKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMuc3RlcEhvc3QuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGUpO1xuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2U7XG5cbiAgICBpbnN0YW5jZS5jb25maWcgPSB0aGlzLnN0ZXA7XG4gICAgaW5zdGFuY2Uuc3RlcE51bWJlciA9ICh0aGlzLnN0ZXAgYXMgYW55KS5zdGVwTnVtYmVyO1xuICAgIHRoaXMubGFzdFN5bmNlZFN0ZXBOdW1iZXIgPSAodGhpcy5zdGVwIGFzIGFueSkuc3RlcE51bWJlcjtcbiAgICAoaW5zdGFuY2UgYXMgYW55KS5pbmRleCA9IHRoaXMuaW5kZXg7IC8vIENvcnJlY3QgZWRpdC1pbi1kZXB0aCBmb3IgYWxsIHN0ZXAgdHlwZXMgKHN0ZXBOdW1iZXIgXCIxMC4zXCIgcGFyc2VzIHdyb25nKVxuICAgIGluc3RhbmNlLmlzTmVzdGVkID0gdGhpcy5pc05lc3RlZDtcbiAgICBpbnN0YW5jZS5pc0luc2lkZUxvb3AgPSB0aGlzLmlzSW5zaWRlTG9vcDtcbiAgICAoaW5zdGFuY2UgYXMgYW55KS5pc0luc2lkZUZvckxvb3AgPSB0aGlzLmlzSW5zaWRlRm9yTG9vcDtcbiAgICBpbnN0YW5jZS5pc0luc2lkZVN0ZXBHcm91cCA9IHRoaXMuaXNJbnNpZGVTdGVwR3JvdXA7XG4gICAgaW5zdGFuY2UuaXNSZW9yZGVyID0gdGhpcy5pc1Jlb3JkZXI7XG4gICAgKGluc3RhbmNlIGFzIGFueSkubmVzdGluZ0xldmVsID0gdGhpcy5uZXN0aW5nTGV2ZWw7XG4gICAgKGluc3RhbmNlIGFzIGFueSkuaXNEdXBsaWNhdGluZyA9IHRoaXMuaXNEdXBsaWNhdGluZztcbiAgICAoaW5zdGFuY2UgYXMgYW55KS5lZGl0YWJsZSA9IHRoaXMuZWRpdGFibGUgIT09IGZhbHNlO1xuICAgIChpbnN0YW5jZSBhcyBhbnkpLmlzUGFyZW50U2tpcHBlZCA9IHRoaXMuaXNQYXJlbnRTa2lwcGVkO1xuICAgIE9iamVjdC5rZXlzKHRoaXMuc3RlcCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoa2V5ICE9PSAnc3RlcFR5cGUnICYmIGtleSAhPT0gJ25lc3RlZFN0ZXBzJyAmJiBrZXkgIT09ICdicmFuY2hlcycpIHtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSlba2V5XSA9ICh0aGlzLnN0ZXAgYXMgYW55KVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICgodGhpcy5zdGVwIGFzIGFueSkubmVzdGVkU3RlcHMpIChpbnN0YW5jZSBhcyBhbnkpLm5lc3RlZFN0ZXBzID0gKHRoaXMuc3RlcCBhcyBhbnkpLm5lc3RlZFN0ZXBzO1xuICAgIGlmICgodGhpcy5zdGVwIGFzIGFueSkuYnJhbmNoZXMpIChpbnN0YW5jZSBhcyBhbnkpLmJyYW5jaGVzID0gKHRoaXMuc3RlcCBhcyBhbnkpLmJyYW5jaGVzO1xuXG4gICAgLy8gUGFzcyBkYXRhIHByb2ZpbGUgaW5wdXRzIHRvIHN0ZXAgaW5zdGFuY2VzIHRoYXQgY2FuIGNvbnRhaW4gbmVzdGVkIGxvb3Agc3RlcHNcbiAgICBpZiAoaXNMb29wU3RlcENvbmZpZyh0aGlzLnN0ZXApIHx8IGlzQ29uZGl0aW9uU3RlcENvbmZpZyh0aGlzLnN0ZXApIHx8IGlzU3RlcEdyb3VwQ29uZmlnKHRoaXMuc3RlcCkpIHtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmN1cnJlbnRUZXN0Q2FzZUlkID0gdGhpcy5jdXJyZW50VGVzdENhc2VJZDtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnRlc3RDYXNlVGVzdERhdGFJZCA9IHRoaXMudGVzdENhc2VUZXN0RGF0YUlkO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuZGF0YVByb2ZpbGVPcHRpb25zID0gdGhpcy5kYXRhUHJvZmlsZU9wdGlvbnM7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5oYXNNb3JlRGF0YVByb2ZpbGVzID0gdGhpcy5oYXNNb3JlRGF0YVByb2ZpbGVzO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuaXNMb2FkaW5nRGF0YVByb2ZpbGVzID0gdGhpcy5pc0xvYWRpbmdEYXRhUHJvZmlsZXM7XG4gICAgICAvLyBBbHNvIHBhc3MgbmF0dXJhbCB0ZXh0IGFjdGlvbnMgb3B0aW9ucyAoZm9yIG5lc3RlZCBsb29wIHN0ZXBzIHdpdGggd2hpbGUgbG9vcCBhbmQgY29uZGl0aW9uIHN0ZXBzKVxuICAgICAgKGluc3RhbmNlIGFzIGFueSkubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucztcbiAgICAgIC8vIFBhc3MgYWRkU3RlcEJldHdlZW4gaW5wdXRzIHRvIG5lc3RlZCBzdGVwIGNvbXBvbmVudHNcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmFkZFN0ZXBCZXR3ZWVuQWJvdmUgPSB0aGlzLmFkZFN0ZXBCZXR3ZWVuQWJvdmU7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5hZGRTdGVwQmV0d2VlbkJlbG93ID0gdGhpcy5hZGRTdGVwQmV0d2VlbkJlbG93O1xuICAgICAgLy8gS2VlcCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggZGVwcmVjYXRlZCBhZGRTdGVwQmV0d2VlblxuICAgICAgKGluc3RhbmNlIGFzIGFueSkuYWRkU3RlcEJldHdlZW4gPSB0aGlzLmFkZFN0ZXBCZXR3ZWVuO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuZWRpdGFibGUgPSB0aGlzLmVkaXRhYmxlICE9PSBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgLy8gUGFzcyBuYXR1cmFsIHRleHQgYWN0aW9ucyBvcHRpb25zIGFuZCB0ZW1wbGF0ZSB2YXJpYWJsZXMgZnVuY3Rpb24gdG8gbG9vcCBzdGVwcyAoZm9yIHdoaWxlIGxvb3AgY29uZGl0aW9uLCBzYW1lIGFzIGNvbmRpdGlvbi1zdGVwKVxuICAgIGlmIChpc0xvb3BTdGVwQ29uZmlnKHRoaXMuc3RlcCkpIHtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMgPSB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnM7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyA9IHRoaXMuc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXM7XG4gICAgfVxuICAgIFxuICAgIC8vIFBhc3MgbmF0dXJhbCB0ZXh0IGFjdGlvbnMgb3B0aW9ucyBhbmQgdGVtcGxhdGUgdmFyaWFibGVzIGZ1bmN0aW9uIHRvIGNvbmRpdGlvbiBzdGVwc1xuICAgIGlmIChpc0NvbmRpdGlvblN0ZXBDb25maWcodGhpcy5zdGVwKSkge1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzID0gdGhpcy5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcztcbiAgICB9XG5cbiAgICB0aGlzLndpcmVPdXRwdXRzKGluc3RhbmNlKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIHdpcmVPdXRwdXRzKGluc3RhbmNlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBTdG9yZSBzdWJzY3JpcHRpb25zIG9uIHRoZSBpbnN0YW5jZSB0byBwcmV2ZW50IGR1cGxpY2F0ZXNcbiAgICBpZiAoIShpbnN0YW5jZSBhcyBhbnkpLl9jcWFTdWJzY3JpcHRpb25zKSB7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5fY3FhU3Vic2NyaXB0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgfVxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSAoaW5zdGFuY2UgYXMgYW55KS5fY3FhU3Vic2NyaXB0aW9ucztcbiAgICBcbiAgICBjb25zdCB3aXJlID0gKGtleTogc3RyaW5nLCBlbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PikgPT4ge1xuICAgICAgaWYgKGluc3RhbmNlW2tleV0gJiYgdHlwZW9mIGluc3RhbmNlW2tleV0uc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gcHJldmlvdXMgc3Vic2NyaXB0aW9uIGlmIGV4aXN0c1xuICAgICAgICBjb25zdCBleGlzdGluZ1N1YiA9IHN1YnNjcmlwdGlvbnMuZ2V0KGtleSk7XG4gICAgICAgIGlmIChleGlzdGluZ1N1Yikge1xuICAgICAgICAgIGV4aXN0aW5nU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIENyZWF0ZSBuZXcgc3Vic2NyaXB0aW9uXG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGluc3RhbmNlW2tleV0uc3Vic2NyaWJlKCh2OiBhbnkpID0+IHtcbiAgICAgICAgICBlbWl0dGVyLmVtaXQodik7XG4gICAgICAgIH0pO1xuICAgICAgICBzdWJzY3JpcHRpb25zLnNldChrZXksIHN1YnNjcmlwdGlvbik7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aXJlKCduZXN0ZWRTdGVwQ2hhbmdlJywgdGhpcy5uZXN0ZWRTdGVwQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnYWRkU3RlcCcsIHtcbiAgICAgIGVtaXQ6ICh2OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHYgIT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgJ2JyYW5jaCcgaW4gdikgdGhpcy5hZGRTdGVwRm9yQnJhbmNoLmVtaXQodik7XG4gICAgICAgIGVsc2UgaWYgKHYgIT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgJ2xvb3BTdGVwQ29uZmlnJyBpbiB2KSB0aGlzLmFkZFN0ZXBGb3JMb29wLmVtaXQodik7XG4gICAgICAgIGVsc2UgdGhpcy5hZGRTdGVwLmVtaXQodik7XG4gICAgICB9LFxuICAgIH0gYXMgYW55KTtcbiAgICB3aXJlKCdkZWxldGVTdGVwJywge1xuICAgICAgZW1pdDogKHY6IGFueSkgPT4ge1xuICAgICAgICBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAnYnJhbmNoJyBpbiB2ICYmICdzdGVwSW5kZXgnIGluIHYpIHRoaXMuZGVsZXRlU3RlcFdpdGhCcmFuY2guZW1pdCh2KTtcbiAgICAgICAgZWxzZSB0aGlzLmRlbGV0ZVN0ZXAuZW1pdCh2KTtcbiAgICAgIH0sXG4gICAgfSBhcyBhbnkpO1xuICAgIHdpcmUoJ3RvZ2dsZUV4cGFuZGVkJywge1xuICAgICAgZW1pdDogKHY6IGFueSkgPT4ge1xuICAgICAgICAvLyBIYW5kbGUgYm90aCBib29sZWFuIGFuZCBvYmplY3QgZm9ybWF0c1xuICAgICAgICAvLyBJZiBpdCdzIGFuIG9iamVjdCB3aXRoIGNvbmZpZyBhbmQgZXhwYW5kZWQsIGVtaXQgaXQgYXMtaXNcbiAgICAgICAgLy8gSWYgaXQncyBqdXN0IGEgYm9vbGVhbiwgZW1pdCBpdCBhcy1pc1xuICAgICAgICB0aGlzLnRvZ2dsZUV4cGFuZGVkLmVtaXQodik7XG4gICAgICB9LFxuICAgIH0gYXMgYW55KTtcbiAgICB3aXJlKCdncm91cE5hbWVDaGFuZ2UnLCB0aGlzLmdyb3VwTmFtZUNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2Rlc2NyaXB0aW9uQ2hhbmdlJywgdGhpcy5kZXNjcmlwdGlvbkNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ3JldXNhYmxlQ2hhbmdlJywgdGhpcy5yZXVzYWJsZUNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ29wZW5FeHRlcm5hbCcsIHRoaXMub3BlbkV4dGVybmFsIGFzIGFueSk7XG4gICAgd2lyZSgnZWRpdCcsIHtcbiAgICAgIGVtaXQ6ICh2OiBhbnkpID0+IHtcbiAgICAgICAgLy8gSWYgY2hpbGQgY29tcG9uZW50IGVtaXRzIHZvaWQgb3Igbm90aGluZywgdXNlIGN1cnJlbnQgc3RlcCBhbmQgaW5kZXhcbiAgICAgICAgLy8gSWYgY2hpbGQgY29tcG9uZW50IGFscmVhZHkgZW1pdHMgYW4gb2JqZWN0LCBtZXJnZSBpdCB3aXRoIHN0ZXAgYW5kIGluZGV4XG4gICAgICAgIGlmICh2ICE9IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICdzdGVwJyBpbiB2ICYmICdpbmRleCcgaW4gdikge1xuICAgICAgICAgIC8vIEFscmVhZHkgaGFzIHN0ZXAgYW5kIGluZGV4LCBlbWl0IGFzLWlzXG4gICAgICAgICAgdGhpcy5lZGl0LmVtaXQodik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRW1pdCB3aXRoIGN1cnJlbnQgc3RlcCBhbmQgaW5kZXhcbiAgICAgICAgICB0aGlzLmVkaXQuZW1pdCh7IHN0ZXA6IHRoaXMuc3RlcCwgaW5kZXg6IHRoaXMuaW5kZXggfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSBhcyBhbnkpO1xuICAgIHdpcmUoJ2xpbmsnLCB0aGlzLmxpbmsgYXMgYW55KTtcbiAgICB3aXJlKCdkdXBsaWNhdGUnLCB0aGlzLmR1cGxpY2F0ZSBhcyBhbnkpO1xuICAgIC8vIFdpcmUgZGVsZXRlIGV2ZW50IC0gaW50ZXJjZXB0IGFuZCBlbWl0IHdpdGggc3RlcCBkYXRhIChmb3J3YXJkIHBheWxvYWQgd2hlbiBjaGlsZCBlbWl0cyB7IHN0ZXAgfSBmb3IgbmVzdGVkIGRlbGV0ZXMpXG4gICAgaWYgKGluc3RhbmNlLmRlbGV0ZSAmJiB0eXBlb2YgaW5zdGFuY2UuZGVsZXRlLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgZXhpc3RpbmdTdWIgPSBzdWJzY3JpcHRpb25zLmdldCgnZGVsZXRlJyk7XG4gICAgICBpZiAoZXhpc3RpbmdTdWIpIHtcbiAgICAgICAgZXhpc3RpbmdTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRlbGV0ZVN1YiA9IGluc3RhbmNlLmRlbGV0ZS5zdWJzY3JpYmUoKHY6IGFueSkgPT4ge1xuICAgICAgICBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2LnN0ZXApIHtcbiAgICAgICAgICAvLyBBIG5lc3RlZCBzdGVwIGlzIHByb3BhZ2F0aW5nIGl0cyBvd24gZGVsZXRpb24gKGUuZy4gbm9ybWFsIHN0ZXAgaW5zaWRlIGEgbG9vcCBpbnNpZGUgYSBicmFuY2gpLlxuICAgICAgICAgIC8vIEZvcndhcmQgaXQgc28gaXQgYnViYmxlcyB1cCB0byBzdGVwLWxpc3QgZm9yIGNvcnJlY3Qgc2luZ2xlLXN0ZXAgZGVsZXRpb24sIGRvIE5PVCB0cmVhdCBhcyBwYXJlbnQgc3RlcCBkZWxldGlvbi5cbiAgICAgICAgICB0aGlzLmRlbGV0ZS5lbWl0KHYpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYnJhbmNoICE9IG51bGwgJiYgdGhpcy5pbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhlIGN1cnJlbnQgc3RlcCAoZGlyZWN0bHkgaW5zaWRlIGEgY29uZGl0aW9uIGJyYW5jaCkgaXMgZGVsZXRpbmcgaXRzZWxmLlxuICAgICAgICAgIHRoaXMuZGVsZXRlU3RlcFdpdGhCcmFuY2guZW1pdCh7IGJyYW5jaDogdGhpcy5icmFuY2gsIHN0ZXBJbmRleDogdGhpcy5pbmRleCB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRlbGV0ZS5lbWl0KHsgc3RlcDogdGhpcy5zdGVwIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHN1YnNjcmlwdGlvbnMuc2V0KCdkZWxldGUnLCBkZWxldGVTdWIpO1xuICAgIH1cbiAgICB3aXJlKCd2aWV3RGV0YWlscycsIHRoaXMudmlld0RldGFpbHMgYXMgYW55KTtcbiAgICB3aXJlKCdzZWxlY3Rpb25DaGFuZ2UnLCB0aGlzLnNlbGVjdGlvbkNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2NvbmRpdGlvbkNoYW5nZScsIHRoaXMuY29uZGl0aW9uQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnYnJhbmNoU3RlcENoYW5nZScsIHRoaXMuYnJhbmNoU3RlcENoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2FkZFN0ZXBGb3JCcmFuY2gnLCB0aGlzLmFkZFN0ZXBGb3JCcmFuY2ggYXMgYW55KTtcbiAgICB3aXJlKCdkZWxldGVTdGVwV2l0aEJyYW5jaCcsIHRoaXMuZGVsZXRlU3RlcFdpdGhCcmFuY2ggYXMgYW55KTtcbiAgICB3aXJlKCdhZGRCcmFuY2gnLCB0aGlzLmFkZEJyYW5jaCBhcyBhbnkpO1xuICAgIHdpcmUoJ2FkZEVsc2UnLCB0aGlzLmFkZEVsc2UgYXMgYW55KTtcbiAgICB3aXJlKCdkZWxldGVCcmFuY2gnLCB0aGlzLmRlbGV0ZUJyYW5jaCBhcyBhbnkpO1xuICAgIHdpcmUoJ2FkZFN0ZXBGb3JMb29wJywgdGhpcy5hZGRTdGVwRm9yTG9vcCBhcyBhbnkpO1xuICAgIHdpcmUoJ3Rlc3REYXRhUHJvZmlsZUNoYW5nZScsIHRoaXMudGVzdERhdGFQcm9maWxlQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnc3RhcnRTdGVwQ2hhbmdlJywgdGhpcy5zdGFydFN0ZXBDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdlbmRTdGVwQ2hhbmdlJywgdGhpcy5lbmRTdGVwQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnbWF4SXRlcmF0aW9uc0NoYW5nZScsIHRoaXMubWF4SXRlcmF0aW9uc0NoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2V2ZW50VHlwZUNoYW5nZScsIHRoaXMuZXZlbnRUeXBlQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgncGFyYW1ldGVyQ2hhbmdlJywgdGhpcy5wYXJhbWV0ZXJDaGFuZ2UgYXMgYW55KTtcbiAgICAvLyBXaXJlIGNsaWNrQWN0aW9uIC0gd3JhcCBNb3VzZUV2ZW50IHdpdGggc3RlcCBkYXRhXG4gICAgaWYgKGluc3RhbmNlLmNsaWNrQWN0aW9uICYmIHR5cGVvZiBpbnN0YW5jZS5jbGlja0FjdGlvbi5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nU3ViID0gc3Vic2NyaXB0aW9ucy5nZXQoJ2NsaWNrQWN0aW9uJyk7XG4gICAgICBpZiAoZXhpc3RpbmdTdWIpIHtcbiAgICAgICAgZXhpc3RpbmdTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWNrQWN0aW9uU3ViID0gaW5zdGFuY2UuY2xpY2tBY3Rpb24uc3Vic2NyaWJlKCh2OiBhbnkpID0+IHtcbiAgICAgICAgLy8gSWYgY2hpbGQgY29tcG9uZW50IGVtaXRzIGFuIG9iamVjdCB3aXRoIGV2ZW50IGFuZCBzdGVwLCB1c2UgaXQ7IG90aGVyd2lzZSB3cmFwIE1vdXNlRXZlbnQgd2l0aCBjdXJyZW50IHN0ZXBcbiAgICAgICAgaWYgKHYgIT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgJ2V2ZW50JyBpbiB2ICYmICdzdGVwJyBpbiB2KSB7XG4gICAgICAgICAgdGhpcy5jbGlja0FjdGlvbi5lbWl0KHYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFzc3VtZSB2IGlzIGEgTW91c2VFdmVudCwgd3JhcCBpdCB3aXRoIGN1cnJlbnQgc3RlcFxuICAgICAgICAgIHRoaXMuY2xpY2tBY3Rpb24uZW1pdCh7IGV2ZW50OiB2IGFzIE1vdXNlRXZlbnQsIHN0ZXA6IHRoaXMuc3RlcCB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzdWJzY3JpcHRpb25zLnNldCgnY2xpY2tBY3Rpb24nLCBjbGlja0FjdGlvblN1Yik7XG4gICAgfVxuICAgIHdpcmUoJ2RuZERyb3BJblpvbmUnLCB0aGlzLmRuZERyb3BJblpvbmUgYXMgYW55KTtcbiAgICB3aXJlKCdsb2FkTW9yZURhdGFQcm9maWxlcycsIHRoaXMubG9hZE1vcmVEYXRhUHJvZmlsZXMgYXMgYW55KTtcbiAgICB3aXJlKCdzZWFyY2hEYXRhUHJvZmlsZXMnLCB0aGlzLnNlYXJjaERhdGFQcm9maWxlcyBhcyBhbnkpO1xuICAgIHdpcmUoJ2FkZFN0ZXBCZXR3ZWVuQ2xpY2snLCB0aGlzLmFkZFN0ZXBCZXR3ZWVuQ2xpY2sgYXMgYW55KTtcbiAgICAvLyBXaXJlIGVkaXRJbkRlcHRoIC0gY2hlY2sgaWYgaXQgZXhpc3RzIG9uIGluc3RhbmNlXG4gICAgaWYgKGluc3RhbmNlLmVkaXRJbkRlcHRoICYmIHR5cGVvZiBpbnN0YW5jZS5lZGl0SW5EZXB0aC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nU3ViID0gc3Vic2NyaXB0aW9ucy5nZXQoJ2VkaXRJbkRlcHRoJyk7XG4gICAgICBpZiAoZXhpc3RpbmdTdWIpIHtcbiAgICAgICAgZXhpc3RpbmdTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVkaXRJbkRlcHRoU3ViID0gaW5zdGFuY2UuZWRpdEluRGVwdGguc3Vic2NyaWJlKCh2OiBhbnkpID0+IHtcbiAgICAgICAgLy8gSWYgY2hpbGQgY29tcG9uZW50IGVtaXRzIGFuIG9iamVjdCB3aXRoIHN0ZXAsIHVzZSBpdDsgb3RoZXJ3aXNlIHVzZSBjdXJyZW50IHN0ZXAgYW5kIGluZGV4XG4gICAgICAgIGlmICh2ICE9IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICdzdGVwJyBpbiB2KSB7XG4gICAgICAgICAgY29uc3QgcGF5bG9hZDogeyBzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWc7IGluZGV4OiBudW1iZXI7IHRlbXBsYXRlT3ZlcnJpZGU/OiBhbnk7IGlzQ3JlYXRlTW9kZT86IGJvb2xlYW47IGNyZWF0ZU1vZGVCcmFuY2hEYXRhPzogYW55IH0gPSB7XG4gICAgICAgICAgICBzdGVwOiB2LnN0ZXAsXG4gICAgICAgICAgICBpbmRleDogdi5pbmRleCA/PyB0aGlzLmluZGV4LFxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHYudGVtcGxhdGVPdmVycmlkZSkge1xuICAgICAgICAgICAgcGF5bG9hZC50ZW1wbGF0ZU92ZXJyaWRlID0gdi50ZW1wbGF0ZU92ZXJyaWRlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodi5pc0NyZWF0ZU1vZGUpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNDcmVhdGVNb2RlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHYuY3JlYXRlTW9kZUJyYW5jaERhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgcGF5bG9hZC5jcmVhdGVNb2RlQnJhbmNoRGF0YSA9IHYuY3JlYXRlTW9kZUJyYW5jaERhdGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZWRpdEluRGVwdGguZW1pdChwYXlsb2FkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVkaXRJbkRlcHRoLmVtaXQoeyBzdGVwOiB0aGlzLnN0ZXAsIGluZGV4OiB0aGlzLmluZGV4IH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHN1YnNjcmlwdGlvbnMuc2V0KCdlZGl0SW5EZXB0aCcsIGVkaXRJbkRlcHRoU3ViKTtcbiAgICB9XG4gICAgLy8gV2lyZSBzdGVwVXBkYXRlIC0gY2hlY2sgaWYgaXQgZXhpc3RzIG9uIGluc3RhbmNlXG4gICAgaWYgKGluc3RhbmNlLnN0ZXBVcGRhdGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdSZW5kZXJlcjogRm91bmQgc3RlcFVwZGF0ZSBFdmVudEVtaXR0ZXIsIHdpcmluZyBpdCcpO1xuICAgICAgd2lyZSgnc3RlcFVwZGF0ZScsIHRoaXMuc3RlcFVwZGF0ZSBhcyBhbnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1JlbmRlcmVyOiBzdGVwVXBkYXRlIEV2ZW50RW1pdHRlciBub3QgZm91bmQgb24gaW5zdGFuY2UgZHVyaW5nIHdpcmVPdXRwdXRzJywge1xuICAgICAgICBzdGVwSWQ6IHRoaXMuc3RlcD8uaWQsXG4gICAgICAgIHN0ZXBUeXBlOiB0aGlzLnN0ZXA/LnN0ZXBUeXBlLFxuICAgICAgICBpbnN0YW5jZUtleXM6IE9iamVjdC5rZXlzKGluc3RhbmNlKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gQ2xlYW4gdXAgc3Vic2NyaXB0aW9ucyB3aGVuIGNvbXBvbmVudCBpcyBkZXN0cm95ZWRcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlKSB7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb25zID0gKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIGFueSkuX2NxYVN1YnNjcmlwdGlvbnM7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9ucykge1xuICAgICAgICBzdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHN1YiAmJiB0eXBlb2Ygc3ViLnVuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzdWJzY3JpcHRpb25zLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtcmVsYXRpdmUgY3FhLXN0ZXAtcmVuZGVyZXItaG92ZXItY29udGFpbmVyXCI+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRhYmxlICYmICFpc1Jlb3JkZXIgJiYgKGFkZFN0ZXBCZXR3ZWVuQWJvdmUgJiYgYWRkU3RlcEJldHdlZW4pXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLXRvcC1bY2FsYygwIC0gMTJweCldIGNxYS1sZWZ0LVs1MCVdIGNxYS10cmFuc2xhdGUteC1bLTUwJV0gY3FhLXAtMCBjcWEtei1bMV0gY3FhLWFkZC1zdGVwLWJldHdlZW4tYnRuXCJcbiAgICAgICAgc3R5bGU9XCJ0b3A6IC0xMnB4O1wiIChjbGljayk9XCJhZGRTdGVwQmV0d2VlbkNsaWNrLmVtaXQoe3N0ZXA6IHN0ZXAsIGluZGV4OiBpbmRleCwgcG9zaXRpb246ICdBQk9WRSd9KVwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxyZWN0IHg9XCIxXCIgeT1cIjFcIiB3aWR0aD1cIjIxLjE4MjJcIiBoZWlnaHQ9XCIyMlwiIHJ4PVwiMTAuNTkxMVwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PVwiMVwiIHk9XCIxXCIgd2lkdGg9XCIyMS4xODIyXCIgaGVpZ2h0PVwiMjJcIiByeD1cIjEwLjU5MTFcIiBzdHJva2U9XCIjM0Y0M0VFXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTguNSAxMkgxNS41XCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDguNVYxNS41XCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtc3RlcC1ob3N0LXdyYXBwZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjc3RlcEhvc3Q+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRhYmxlICYmICFpc1Jlb3JkZXIgJiYgKGFkZFN0ZXBCZXR3ZWVuQmVsb3cgJiYgYWRkU3RlcEJldHdlZW4pXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLXRvcC1bY2FsYygxMDAlLTEycHgpXSBjcWEtbGVmdC1bNTAlXSBjcWEtdHJhbnNsYXRlLXgtWy01MCVdIGNxYS1wLTAgY3FhLXotWzFdIGNxYS1hZGQtc3RlcC1iZXR3ZWVuLWJ0blwiXG4gICAgICAgIChjbGljayk9XCJhZGRTdGVwQmV0d2VlbkNsaWNrLmVtaXQoe3N0ZXA6IHN0ZXAsIGluZGV4OiBpbmRleCwgcG9zaXRpb246ICdCRUxPVyd9KVwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxyZWN0IHg9XCIxXCIgeT1cIjFcIiB3aWR0aD1cIjIxLjE4MjJcIiBoZWlnaHQ9XCIyMlwiIHJ4PVwiMTAuNTkxMVwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PVwiMVwiIHk9XCIxXCIgd2lkdGg9XCIyMS4xODIyXCIgaGVpZ2h0PVwiMjJcIiByeD1cIjEwLjU5MTFcIiBzdHJva2U9XCIjM0Y0M0VFXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTguNSAxMkgxNS41XCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDguNVYxNS41XCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+Il19
|