@microsoft/windows-admin-center-sdk 2.298.0 → 2.301.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/angular/assets/strings/cs-CZ/strings.json +1 -1
- package/angular/assets/strings/de-DE/strings.json +1 -1
- package/angular/assets/strings/es-ES/strings.json +1 -1
- package/angular/assets/strings/fr-FR/strings.json +1 -1
- package/angular/assets/strings/hu-HU/strings.json +1 -1
- package/angular/assets/strings/it-IT/strings.json +1 -1
- package/angular/assets/strings/ja-JP/strings.json +1 -1
- package/angular/assets/strings/ko-KR/strings.json +1 -1
- package/angular/assets/strings/nl-NL/strings.json +1 -1
- package/angular/assets/strings/pl-PL/strings.json +1 -1
- package/angular/assets/strings/pt-BR/strings.json +1 -1
- package/angular/assets/strings/pt-PT/strings.json +1 -1
- package/angular/assets/strings/ru-RU/strings.json +1 -1
- package/angular/assets/strings/strings.json +1 -1
- package/angular/assets/strings/sv-SE/strings.json +1 -1
- package/angular/assets/strings/tr-TR/strings.json +1 -1
- package/angular/assets/strings/zh-CN/strings.json +1 -1
- package/angular/assets/strings/zh-TW/strings.json +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +239 -568
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +2 -2
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
- package/angular/esm2015/src/controls/actions/containers/action-bar/action-bar.component.js +2 -7
- package/angular/esm2015/src/controls/alert-bar/alert-bar.component.js +5 -5
- package/angular/esm2015/src/controls/common/base.component.js +1 -8
- package/angular/esm2015/src/controls/data-table/data-table.component.js +9 -39
- package/angular/esm2015/src/controls/form/form-field/checklist/checklist-form-field.component.js +8 -11
- package/angular/esm2015/src/controls/form/form-field/combobox/combobox-form-field.component.js +9 -8
- package/angular/esm2015/src/controls/form/form-field/file/file-form-field.component.js +2 -14
- package/angular/esm2015/src/controls/form/form-field/form-field.component.js +2 -9
- package/angular/esm2015/src/controls/layout/layout-definition.component.js +2 -9
- package/angular/esm2015/src/controls/layout/layout.component.js +2 -11
- package/angular/esm2015/src/controls/master-view/master-view.component.js +5 -32
- package/angular/esm2015/src/controls/page-alert-bar/models/index.js +1 -1
- package/angular/esm2015/src/controls/pivot/pivot-tab.component.js +1 -1
- package/angular/esm2015/src/controls/pivot/pivot.component.js +4 -21
- package/angular/esm2015/src/controls/property-grid/property-grid-item.component.js +2 -50
- package/angular/esm2015/src/controls/property-grid/property-grid.component.js +60 -73
- package/angular/esm2015/src/controls/property-grid/property-grid.module.js +1 -5
- package/angular/esm2015/src/controls/settings/common-settings/common-settings.component.js +70 -151
- package/angular/esm2015/src/controls/settings/settings.component.js +8 -48
- package/angular/esm2015/src/controls/settings/settings.module.js +9 -21
- package/angular/esm2015/src/controls/wizard/wizard.component.js +65 -55
- package/angular/esm2015/src/generated/strings.js +1 -1
- package/angular/esm2015/src/service/app-context.service.js +1 -3
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +239 -545
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
- package/angular/package.json +0 -2
- package/angular/src/controls/common/base.component.d.ts +0 -5
- package/angular/src/controls/data-table/data-table.component.d.ts +0 -15
- package/angular/src/controls/form/form-field/checklist/checklist-form-field.component.d.ts +0 -1
- package/angular/src/controls/form/form-field/file/file-form-field.component.d.ts +0 -4
- package/angular/src/controls/layout/layout-definition.component.d.ts +1 -6
- package/angular/src/controls/master-view/master-view.component.d.ts +2 -118
- package/angular/src/controls/page-alert-bar/models/index.d.ts +1 -1
- package/angular/src/controls/pivot/pivot-tab.component.d.ts +1 -0
- package/angular/src/controls/pivot/pivot.component.d.ts +0 -7
- package/angular/src/controls/property-grid/property-grid-item.component.d.ts +3 -53
- package/angular/src/controls/property-grid/property-grid.component.d.ts +2 -1
- package/angular/src/controls/property-grid/property-grid.module.d.ts +3 -4
- package/angular/src/controls/settings/common-settings/common-settings.component.d.ts +1 -32
- package/angular/src/controls/settings/settings.component.d.ts +1 -18
- package/angular/src/controls/settings/settings.module.d.ts +1 -3
- package/angular/src/generated/strings.d.ts +0 -3
- package/core/base/environment.d.ts +0 -10
- package/core/base/environment.js.map +1 -1
- package/core/data/gateway-connection.d.ts +0 -34
- package/core/data/gateway-connection.js +2 -59
- package/core/data/gateway-connection.js.map +1 -1
- package/core/data/node-connection.d.ts +0 -4
- package/core/data/node-connection.js.map +1 -1
- package/core/data/powershell.d.ts +0 -4
- package/core/data/powershell.js +0 -1
- package/core/data/powershell.js.map +1 -1
- package/core/diagnostics/sme-web-telemetry-models.d.ts +3 -20
- package/core/diagnostics/sme-web-telemetry-models.js +2 -6
- package/core/diagnostics/sme-web-telemetry-models.js.map +1 -1
- package/core/diagnostics/sme-web-telemetry.d.ts +1 -13
- package/core/diagnostics/sme-web-telemetry.js +11 -51
- package/core/diagnostics/sme-web-telemetry.js.map +1 -1
- package/core/generated/powershell-scripts.d.ts +0 -4
- package/core/generated/powershell-scripts.js +0 -4
- package/core/generated/powershell-scripts.js.map +1 -1
- package/core/index.d.ts +0 -2
- package/core/index.js +0 -1
- package/core/index.js.map +1 -1
- package/core/manifest/environment-modules.js +0 -10
- package/core/manifest/environment-modules.js.map +1 -1
- package/core/notification/powershell-notification.js +1 -1
- package/core/notification/powershell-notification.js.map +1 -1
- package/core/performance/performance-tracker.d.ts +0 -67
- package/core/performance/performance-tracker.js +4 -211
- package/core/performance/performance-tracker.js.map +1 -1
- package/core/rpc/credssp/rpc-credssp-model.d.ts +2 -27
- package/core/rpc/credssp/rpc-credssp-model.js +0 -10
- package/core/rpc/credssp/rpc-credssp-model.js.map +1 -1
- package/core/security/credssp-manager.d.ts +1 -15
- package/core/security/credssp-manager.js +0 -28
- package/core/security/credssp-manager.js.map +1 -1
- package/core/shared/gateway-inventory/gateway-inventory.d.ts +0 -10
- package/core/shared/gateway-inventory/gateway-inventory.js +0 -11
- package/core/shared/gateway-inventory/gateway-inventory.js.map +1 -1
- package/e2e/assets/strings/cs-CZ/strings.json +1 -1
- package/e2e/assets/strings/de-DE/strings.json +1 -1
- package/e2e/assets/strings/es-ES/strings.json +1 -1
- package/e2e/assets/strings/fr-FR/strings.json +1 -1
- package/e2e/assets/strings/hu-HU/strings.json +1 -1
- package/e2e/assets/strings/it-IT/strings.json +1 -1
- package/e2e/assets/strings/ja-JP/strings.json +1 -1
- package/e2e/assets/strings/ko-KR/strings.json +1 -1
- package/e2e/assets/strings/nl-NL/strings.json +1 -1
- package/e2e/assets/strings/pl-PL/strings.json +1 -1
- package/e2e/assets/strings/pt-BR/strings.json +1 -1
- package/e2e/assets/strings/pt-PT/strings.json +1 -1
- package/e2e/assets/strings/ru-RU/strings.json +1 -1
- package/e2e/assets/strings/strings.json +1 -1
- package/e2e/assets/strings/sv-SE/strings.json +1 -1
- package/e2e/assets/strings/tr-TR/strings.json +1 -1
- package/e2e/assets/strings/zh-CN/strings.json +1 -1
- package/e2e/assets/strings/zh-TW/strings.json +1 -1
- package/package.json +3 -5
- package/styles/css/main.css +1 -1
- package/tools/module-template/gulpfile.ts/index.ts +1 -1
- package/tools/package-lock.json +975 -14946
- package/tools/wac-cli/src/create/main.d.ts +3 -6
- package/tools/wac-cli/src/create/main.js +35 -87
- package/tools/wac-cli/src/create/main.js.map +1 -1
- package/tools/wac-cli/src/index.js +2 -2
- package/tools/wac-cli/src/index.js.map +1 -1
- package/tools/wac-cli/templates/{solution/manifest.json → manifest/solution-manifest.json} +0 -19
- package/tools/wac-cli/templates/{wac-template/src/manifest.json → manifest/tool-manifest.json} +0 -0
- package/tools/wac-cli/templates/wac-template/angular.json +2 -2
- package/tools/wac-cli/templates/wac-template/gulpfile.ts/config-data.ts +1 -1
- package/tools/wac-cli/templates/wac-template/package.json +8 -0
- package/tools/wac-cli/templates/wac-template/src/app/app-routing.module.ts +1 -1
- package/tools/wac-cli/templates/wac-template/src/main.ts +0 -2
- package/tools/wac-cli/templates/wac-template/src/polyfills.ts +1 -1
- package/tools/wac-cli/templates/wac-template/src/test.ts +2 -2
- package/core/data/gateway-status.d.ts +0 -24
- package/core/data/gateway-status.js +0 -3
- package/core/data/gateway-status.js.map +0 -1
- package/core/data/wdac-operations.d.ts +0 -123
- package/core/data/wdac-operations.js +0 -144
- package/core/data/wdac-operations.js.map +0 -1
- package/tools/wac-cli/templates/internal/npmrc.txt +0 -6
- package/tools/wac-cli/templates/internal/package.json +0 -101
- package/tools/wac-cli/templates/solution/strings.resjson +0 -16
- package/tools/wac-cli/templates/wac-template/src/version.ts +0 -3
- package/tools/wac-cli/templates/wac-template/version.json +0 -5
|
@@ -12,9 +12,9 @@ import { WizardBuilder } from './wizard-builder';
|
|
|
12
12
|
import { WizardNavigationInformation } from './wizard-navigation-information';
|
|
13
13
|
import * as i0 from "@angular/core";
|
|
14
14
|
import * as i1 from "../../service/app-context.service";
|
|
15
|
-
import * as i2 from "
|
|
16
|
-
import * as i3 from "
|
|
17
|
-
import * as i4 from "
|
|
15
|
+
import * as i2 from "../../directives/telemetry/telemetry.directive";
|
|
16
|
+
import * as i3 from "@angular/common";
|
|
17
|
+
import * as i4 from "../badge/preview-badge.component";
|
|
18
18
|
import * as i5 from "../tooltip/tooltip.directive";
|
|
19
19
|
import * as i6 from "../page-alert-bar/page-alert-bar.component";
|
|
20
20
|
import * as i7 from "../loading-wheel/loading-wheel.component";
|
|
@@ -36,26 +36,31 @@ function WizardComponent_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
|
36
36
|
i0.ɵɵadvance(1);
|
|
37
37
|
i0.ɵɵproperty("ngIf", ctx_r0.isInPreview);
|
|
38
38
|
} }
|
|
39
|
-
const _c0 = function (a0, a1, a2) { return { "sme-wizard-stage-completed": a0, "sme-wizard-stage-clicked": a1, "sme-wizard-stage-active": a2 }; };
|
|
39
|
+
const _c0 = function (a0, a1, a2, a3) { return { "sme-wizard-stage-completed": a0, "sme-wizard-stage-clicked": a1, "sme-wizard-stage-active": a2, "sme-disabled": a3 }; };
|
|
40
40
|
const _c1 = function (a0) { return { "sme-icon sme-icon-accept sme-icon-size-xxs": a0 }; };
|
|
41
41
|
const _c2 = function (a0, a1, a2) { return { "sme-font-emphasis1 sme-wizard-stage-active": a0, "sme-wizard-stage-completed": a1, "sme-margin-left-xs": a2 }; };
|
|
42
|
-
function
|
|
42
|
+
function WizardComponent_ul_2_li_1_Template(rf, ctx) { if (rf & 1) {
|
|
43
43
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
44
|
-
i0.ɵɵelementStart(0, "
|
|
45
|
-
i0.ɵɵlistener("click", function
|
|
46
|
-
i0.ɵɵelementStart(1, "
|
|
47
|
-
i0.ɵɵ
|
|
44
|
+
i0.ɵɵelementStart(0, "li", 16);
|
|
45
|
+
i0.ɵɵlistener("click", function WizardComponent_ul_2_li_1_Template_li_click_0_listener() { i0.ɵɵrestoreView(_r11); const val_r9 = ctx.index; const ctx_r10 = i0.ɵɵnextContext(2); return ctx_r10.onStageClick(val_r9); });
|
|
46
|
+
i0.ɵɵelementStart(1, "button", 17);
|
|
47
|
+
i0.ɵɵelementStart(2, "span", 18);
|
|
48
|
+
i0.ɵɵtext(3);
|
|
49
|
+
i0.ɵɵelementEnd();
|
|
50
|
+
i0.ɵɵelementStart(4, "span", 19);
|
|
51
|
+
i0.ɵɵtext(5);
|
|
48
52
|
i0.ɵɵelementEnd();
|
|
49
|
-
i0.ɵɵelementStart(3, "span", 18);
|
|
50
|
-
i0.ɵɵtext(4);
|
|
51
53
|
i0.ɵɵelementEnd();
|
|
52
54
|
i0.ɵɵelementEnd();
|
|
53
55
|
} if (rf & 2) {
|
|
54
56
|
const stage_r8 = ctx.$implicit;
|
|
55
57
|
const val_r9 = ctx.index;
|
|
56
58
|
const ctx_r7 = i0.ɵɵnextContext(2);
|
|
57
|
-
i0.ɵɵ
|
|
58
|
-
i0.ɵɵ
|
|
59
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction4(17, _c0, stage_r8.completed, val_r9 === ctx_r7.stagesArrayIndex, stage_r8.active, val_r9 !== ctx_r7.stagesArrayIndex));
|
|
60
|
+
i0.ɵɵattribute("aria-selected", val_r9 === ctx_r7.stagesArrayIndex);
|
|
61
|
+
i0.ɵɵadvance(1);
|
|
62
|
+
i0.ɵɵclassProp("sme-active", val_r9 === ctx_r7.stagesArrayIndex)("sme-selected", val_r9 === ctx_r7.stagesArrayIndex)("sme-wizard-stage-focus", val_r9 === ctx_r7.stagesArrayIndex);
|
|
63
|
+
i0.ɵɵproperty("smeTelemetryDataBlob", ctx_r7.telemetryData)("smeTelemetryId", "wizardStage" + (val_r9 + 1))("disabled", ctx_r7.stageIndexDisabled(stage_r8, val_r9))("smeTelemetryDisableElement", ctx_r7.stageIndexDisabled(stage_r8, val_r9));
|
|
59
64
|
i0.ɵɵattribute("aria-label", stage_r8.name);
|
|
60
65
|
i0.ɵɵadvance(1);
|
|
61
66
|
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(22, _c1, stage_r8.completed));
|
|
@@ -66,17 +71,17 @@ function WizardComponent_div_2_button_1_Template(rf, ctx) { if (rf & 1) {
|
|
|
66
71
|
i0.ɵɵadvance(1);
|
|
67
72
|
i0.ɵɵtextInterpolate1(" ", stage_r8.name, " ");
|
|
68
73
|
} }
|
|
69
|
-
function
|
|
70
|
-
i0.ɵɵelementStart(0, "
|
|
71
|
-
i0.ɵɵtemplate(1,
|
|
74
|
+
function WizardComponent_ul_2_Template(rf, ctx) { if (rf & 1) {
|
|
75
|
+
i0.ɵɵelementStart(0, "ul", 14);
|
|
76
|
+
i0.ɵɵtemplate(1, WizardComponent_ul_2_li_1_Template, 6, 28, "li", 15);
|
|
72
77
|
i0.ɵɵelementEnd();
|
|
73
78
|
} if (rf & 2) {
|
|
74
79
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
75
80
|
i0.ɵɵadvance(1);
|
|
76
81
|
i0.ɵɵproperty("ngForOf", ctx_r1.stages);
|
|
77
82
|
} }
|
|
78
|
-
function
|
|
79
|
-
i0.ɵɵelementStart(0, "span",
|
|
83
|
+
function WizardComponent_div_4_ul_1_li_1_span_4_Template(rf, ctx) { if (rf & 1) {
|
|
84
|
+
i0.ɵɵelementStart(0, "span", 31);
|
|
80
85
|
i0.ɵɵtext(1);
|
|
81
86
|
i0.ɵɵelementEnd();
|
|
82
87
|
} if (rf & 2) {
|
|
@@ -84,47 +89,52 @@ function WizardComponent_div_4_div_1_button_1_span_3_Template(rf, ctx) { if (rf
|
|
|
84
89
|
i0.ɵɵadvance(1);
|
|
85
90
|
i0.ɵɵtextInterpolate(step_r14.name);
|
|
86
91
|
} }
|
|
87
|
-
const _c3 = function (a0) { return { "sme-
|
|
88
|
-
function
|
|
92
|
+
const _c3 = function (a0) { return { "sme-scheme-nav-list-item sme-active sme-color-base-5": a0 }; };
|
|
93
|
+
const _c4 = function (a0) { return { "sme-step-active": a0 }; };
|
|
94
|
+
function WizardComponent_div_4_ul_1_li_1_Template(rf, ctx) { if (rf & 1) {
|
|
89
95
|
const _r19 = i0.ɵɵgetCurrentView();
|
|
90
|
-
i0.ɵɵelementStart(0, "
|
|
91
|
-
i0.ɵɵlistener("click", function
|
|
92
|
-
i0.ɵɵelementStart(1, "
|
|
93
|
-
i0.ɵɵ
|
|
96
|
+
i0.ɵɵelementStart(0, "li", 27);
|
|
97
|
+
i0.ɵɵlistener("click", function WizardComponent_div_4_ul_1_li_1_Template_li_click_0_listener() { i0.ɵɵrestoreView(_r19); const index_r15 = ctx.index; const ctx_r18 = i0.ɵɵnextContext(3); return ctx_r18.onStepClick(index_r15); });
|
|
98
|
+
i0.ɵɵelementStart(1, "button", 28);
|
|
99
|
+
i0.ɵɵelementStart(2, "span", 29);
|
|
100
|
+
i0.ɵɵtext(3);
|
|
101
|
+
i0.ɵɵelementEnd();
|
|
102
|
+
i0.ɵɵtemplate(4, WizardComponent_div_4_ul_1_li_1_span_4_Template, 2, 1, "span", 30);
|
|
94
103
|
i0.ɵɵelementEnd();
|
|
95
|
-
i0.ɵɵtemplate(3, WizardComponent_div_4_div_1_button_1_span_3_Template, 2, 1, "span", 28);
|
|
96
104
|
i0.ɵɵelementEnd();
|
|
97
105
|
} if (rf & 2) {
|
|
98
106
|
const step_r14 = ctx.$implicit;
|
|
99
107
|
const index_r15 = ctx.index;
|
|
100
108
|
const ctx_r13 = i0.ɵɵnextContext(3);
|
|
101
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(
|
|
102
|
-
i0.ɵɵattribute("aria-label", ctx_r13.isExpanded ? null : step_r14.name);
|
|
109
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(12, _c3, index_r15 === ctx_r13.stepIndex))("title", ctx_r13.isExpanded ? null : step_r14.name);
|
|
110
|
+
i0.ɵɵattribute("aria-selected", index_r15 === ctx_r13.stepIndex)("aria-label", ctx_r13.isExpanded ? null : step_r14.name);
|
|
111
|
+
i0.ɵɵadvance(1);
|
|
112
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(14, _c4, index_r15 === ctx_r13.stepIndex))("disabled", ctx_r13.stepIndexDisabled(step_r14, index_r15))("smeTelemetryDisableElement", ctx_r13.stepIndexDisabled(step_r14, index_r15))("smeTelemetryDataBlob", ctx_r13.telemetryData)("smeTelemetryId", "wizardStep" + (index_r15 + 1));
|
|
103
113
|
i0.ɵɵadvance(2);
|
|
104
114
|
i0.ɵɵtextInterpolate2("", ctx_r13.stagesArrayIndex + 1, ".", index_r15 + 1, "");
|
|
105
115
|
i0.ɵɵadvance(1);
|
|
106
116
|
i0.ɵɵproperty("ngIf", ctx_r13.isExpanded);
|
|
107
117
|
} }
|
|
108
|
-
const
|
|
109
|
-
function
|
|
110
|
-
i0.ɵɵelementStart(0, "
|
|
111
|
-
i0.ɵɵtemplate(1,
|
|
118
|
+
const _c5 = function (a0) { return { "sme-layout-minwidth-sm": a0 }; };
|
|
119
|
+
function WizardComponent_div_4_ul_1_Template(rf, ctx) { if (rf & 1) {
|
|
120
|
+
i0.ɵɵelementStart(0, "ul", 25);
|
|
121
|
+
i0.ɵɵtemplate(1, WizardComponent_div_4_ul_1_li_1_Template, 5, 16, "li", 26);
|
|
112
122
|
i0.ɵɵelementEnd();
|
|
113
123
|
} if (rf & 2) {
|
|
114
124
|
const ctx_r12 = i0.ɵɵnextContext(2);
|
|
115
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2,
|
|
125
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c5, ctx_r12.isExpanded));
|
|
116
126
|
i0.ɵɵadvance(1);
|
|
117
127
|
i0.ɵɵproperty("ngForOf", ctx_r12.getStepsForStage());
|
|
118
128
|
} }
|
|
119
|
-
const
|
|
129
|
+
const _c6 = function (a0, a1) { return { "sme-icon-chevronLeft": a0, "sme-icon-chevronRight": a1 }; };
|
|
120
130
|
function WizardComponent_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
121
131
|
const _r21 = i0.ɵɵgetCurrentView();
|
|
122
|
-
i0.ɵɵelementStart(0, "div",
|
|
123
|
-
i0.ɵɵtemplate(1,
|
|
124
|
-
i0.ɵɵelementStart(2, "div",
|
|
125
|
-
i0.ɵɵelementStart(3, "button",
|
|
132
|
+
i0.ɵɵelementStart(0, "div", 20);
|
|
133
|
+
i0.ɵɵtemplate(1, WizardComponent_div_4_ul_1_Template, 2, 4, "ul", 21);
|
|
134
|
+
i0.ɵɵelementStart(2, "div", 22);
|
|
135
|
+
i0.ɵɵelementStart(3, "button", 23);
|
|
126
136
|
i0.ɵɵlistener("click", function WizardComponent_div_4_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r21); const ctx_r20 = i0.ɵɵnextContext(); return ctx_r20.togglePane(); });
|
|
127
|
-
i0.ɵɵelement(4, "span",
|
|
137
|
+
i0.ɵɵelement(4, "span", 24);
|
|
128
138
|
i0.ɵɵelementEnd();
|
|
129
139
|
i0.ɵɵelementEnd();
|
|
130
140
|
i0.ɵɵelementEnd();
|
|
@@ -136,11 +146,11 @@ function WizardComponent_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
|
136
146
|
i0.ɵɵproperty("title", ctx_r2.isExpanded ? ctx_r2.strings.MsftSmeShell.Angular.Wizard.collapseStepsList : ctx_r2.strings.MsftSmeShell.Angular.Wizard.expandStepsList);
|
|
137
147
|
i0.ɵɵattribute("aria-expanded", ctx_r2.isExpanded)("aria-label", ctx_r2.isExpanded ? ctx_r2.strings.MsftSmeShell.Angular.Wizard.collapseStepsList : ctx_r2.strings.MsftSmeShell.Angular.Wizard.expandStepsList);
|
|
138
148
|
i0.ɵɵadvance(1);
|
|
139
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(5,
|
|
149
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(5, _c6, ctx_r2.isExpanded, !ctx_r2.isExpanded));
|
|
140
150
|
} }
|
|
141
151
|
function WizardComponent_div_6_Template(rf, ctx) { if (rf & 1) {
|
|
142
152
|
i0.ɵɵelementStart(0, "div");
|
|
143
|
-
i0.ɵɵelement(1, "sme-page-alert-bar",
|
|
153
|
+
i0.ɵɵelement(1, "sme-page-alert-bar", 32);
|
|
144
154
|
i0.ɵɵelementEnd();
|
|
145
155
|
} if (rf & 2) {
|
|
146
156
|
const ctx_r3 = i0.ɵɵnextContext();
|
|
@@ -148,29 +158,29 @@ function WizardComponent_div_6_Template(rf, ctx) { if (rf & 1) {
|
|
|
148
158
|
i0.ɵɵproperty("alert", ctx_r3.alert);
|
|
149
159
|
} }
|
|
150
160
|
function WizardComponent_div_9_div_6_Template(rf, ctx) { if (rf & 1) {
|
|
151
|
-
i0.ɵɵelementStart(0, "div",
|
|
152
|
-
i0.ɵɵelement(1, "sme-loading-wheel",
|
|
161
|
+
i0.ɵɵelementStart(0, "div", 40);
|
|
162
|
+
i0.ɵɵelement(1, "sme-loading-wheel", 41);
|
|
153
163
|
i0.ɵɵelementEnd();
|
|
154
164
|
} }
|
|
155
165
|
function WizardComponent_div_9_Template(rf, ctx) { if (rf & 1) {
|
|
156
166
|
const _r24 = i0.ɵɵgetCurrentView();
|
|
157
|
-
i0.ɵɵelementStart(0, "div",
|
|
158
|
-
i0.ɵɵelementStart(1, "div",
|
|
159
|
-
i0.ɵɵelementStart(2, "button",
|
|
167
|
+
i0.ɵɵelementStart(0, "div", 33);
|
|
168
|
+
i0.ɵɵelementStart(1, "div", 34);
|
|
169
|
+
i0.ɵɵelementStart(2, "button", 35);
|
|
160
170
|
i0.ɵɵlistener("click", function WizardComponent_div_9_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(); return ctx_r23.onBackClick(); });
|
|
161
171
|
i0.ɵɵtext(3);
|
|
162
172
|
i0.ɵɵelementEnd();
|
|
163
|
-
i0.ɵɵelementStart(4, "button",
|
|
173
|
+
i0.ɵɵelementStart(4, "button", 36);
|
|
164
174
|
i0.ɵɵlistener("click", function WizardComponent_div_9_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r24); const ctx_r25 = i0.ɵɵnextContext(); return ctx_r25.onNextClick(); });
|
|
165
175
|
i0.ɵɵtext(5);
|
|
166
176
|
i0.ɵɵelementEnd();
|
|
167
|
-
i0.ɵɵtemplate(6, WizardComponent_div_9_div_6_Template, 2, 0, "div",
|
|
177
|
+
i0.ɵɵtemplate(6, WizardComponent_div_9_div_6_Template, 2, 0, "div", 37);
|
|
168
178
|
i0.ɵɵelementEnd();
|
|
169
|
-
i0.ɵɵelementStart(7, "button",
|
|
179
|
+
i0.ɵɵelementStart(7, "button", 38);
|
|
170
180
|
i0.ɵɵlistener("click", function WizardComponent_div_9_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r24); const ctx_r26 = i0.ɵɵnextContext(); return ctx_r26.onSkipClick(); });
|
|
171
181
|
i0.ɵɵtext(8);
|
|
172
182
|
i0.ɵɵelementEnd();
|
|
173
|
-
i0.ɵɵelementStart(9, "button",
|
|
183
|
+
i0.ɵɵelementStart(9, "button", 39);
|
|
174
184
|
i0.ɵɵlistener("click", function WizardComponent_div_9_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r24); const ctx_r27 = i0.ɵɵnextContext(); return ctx_r27.onExitClick(); });
|
|
175
185
|
i0.ɵɵtext(10);
|
|
176
186
|
i0.ɵɵelementEnd();
|
|
@@ -200,7 +210,7 @@ function WizardComponent_div_9_Template(rf, ctx) { if (rf & 1) {
|
|
|
200
210
|
i0.ɵɵadvance(1);
|
|
201
211
|
i0.ɵɵtextInterpolate(ctx_r5.exitButtonText());
|
|
202
212
|
} }
|
|
203
|
-
const
|
|
213
|
+
const _c7 = function (a0) { return { "sme-padding-inset-lg": a0 }; };
|
|
204
214
|
/**
|
|
205
215
|
* Whatever state the wizard is in
|
|
206
216
|
*/
|
|
@@ -877,10 +887,10 @@ export class WizardComponent extends DynamicComponentBase {
|
|
|
877
887
|
}
|
|
878
888
|
}
|
|
879
889
|
/** @nocollapse */ WizardComponent.ɵfac = function WizardComponent_Factory(t) { return new (t || WizardComponent)(i0.ɵɵdirectiveInject(i1.AppContextService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ComponentFactoryResolver)); };
|
|
880
|
-
/** @nocollapse */ WizardComponent.ɵcmp = i0.ɵɵdefineComponent({ type: WizardComponent, selectors: [["sme-wizard"]], inputs: { model: "model", wizardBuilder: "wizardBuilder" }, outputs: { modelChange: "modelChange", exit: "exit", stepSubmitted: "stepSubmitted", stepChanged: "stepChanged", stepInvalidated: "stepInvalidated", finished: "finished" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 10, vars: 8, consts: [[1, "sme-wizard", "sme-layout-absolute", "sme-arrange-stack-v", "sme-position-inset-none"], ["class", "sme-arrange-stack-h sme-position-flex-none sme-padding-vertical-sm sme-padding-horizontal-lg sme-border-bottom-sm sme-border-bottom-color-base-80", 4, "ngIf"], ["role", "tablist", "class", "sme-arrange-stack-h sme-position-flex-none sme-padding-horizontal-lg sme-border-bottom-sm sme-border-bottom-color-base-80 sme-focus-zone", 4, "ngIf"], [1, "sme-arrange-stack-h", "sme-arrange-overflow-auto", "sme-position-flex-auto"], ["class", "sme-arrange-stack-v sme-position-flex-none sme-focus-zone\n sme-border-right-sm sme-border-right-color-base-80", 4, "ngIf"], [1, "sme-focus-zone", "sme-layout-relative", "sme-position-stretch", "sme-arrange-overflow-auto", 3, "ngClass"], [4, "ngIf"], ["id", "dynamic-content-container"], ["container", ""], ["class", "sme-layout-relative sme-position-flex-none sme-border-top-sm sme-border-top-color-base-80 sme-padding-vertical-sm sme-padding-horizontal-lg sme-focus-zone", 4, "ngIf"], [1, "sme-arrange-stack-h", "sme-position-flex-none", "sme-padding-vertical-sm", "sme-padding-horizontal-lg", "sme-border-bottom-sm", "sme-border-bottom-color-base-80"], ["id", "sme-shell-wizard-heading-id"], ["type", "preview", "class", "sme-margin-left-xs", 4, "ngIf"], ["type", "preview", 1, "sme-margin-left-xs"], ["role", "tablist", 1, "sme-arrange-stack-h", "sme-position-flex-none", "sme-padding-horizontal-lg", "sme-border-bottom-sm", "sme-border-bottom-color-base-80", "sme-focus-zone"], ["
|
|
890
|
+
/** @nocollapse */ WizardComponent.ɵcmp = i0.ɵɵdefineComponent({ type: WizardComponent, selectors: [["sme-wizard"]], inputs: { model: "model", wizardBuilder: "wizardBuilder" }, outputs: { modelChange: "modelChange", exit: "exit", stepSubmitted: "stepSubmitted", stepChanged: "stepChanged", stepInvalidated: "stepInvalidated", finished: "finished" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 10, vars: 8, consts: [["smeTelemetryId", "sme-wizard", "smeTelemetryArea", "WizardComponent", 1, "sme-wizard", "sme-layout-absolute", "sme-arrange-stack-v", "sme-position-inset-none"], ["class", "sme-arrange-stack-h sme-position-flex-none sme-padding-vertical-sm sme-padding-horizontal-lg sme-border-bottom-sm sme-border-bottom-color-base-80", 4, "ngIf"], ["role", "tablist", "class", "sme-arrange-stack-h sme-position-flex-none sme-padding-horizontal-lg sme-border-bottom-sm sme-border-bottom-color-base-80 sme-focus-zone", 4, "ngIf"], [1, "sme-arrange-stack-h", "sme-arrange-overflow-auto", "sme-position-flex-auto"], ["class", "sme-arrange-stack-v sme-position-flex-none sme-focus-zone\n sme-border-right-sm sme-border-right-color-base-80", 4, "ngIf"], [1, "sme-focus-zone", "sme-layout-relative", "sme-position-stretch", "sme-arrange-overflow-auto", 3, "ngClass"], [4, "ngIf"], ["id", "dynamic-content-container"], ["container", ""], ["class", "sme-layout-relative sme-position-flex-none sme-border-top-sm sme-border-top-color-base-80 sme-padding-vertical-sm sme-padding-horizontal-lg sme-focus-zone", 4, "ngIf"], [1, "sme-arrange-stack-h", "sme-position-flex-none", "sme-padding-vertical-sm", "sme-padding-horizontal-lg", "sme-border-bottom-sm", "sme-border-bottom-color-base-80"], ["id", "sme-shell-wizard-heading-id"], ["type", "preview", "class", "sme-margin-left-xs", 4, "ngIf"], ["type", "preview", 1, "sme-margin-left-xs"], ["role", "tablist", 1, "sme-arrange-stack-h", "sme-position-flex-none", "sme-padding-horizontal-lg", "sme-border-bottom-sm", "sme-border-bottom-color-base-80", "sme-focus-zone"], ["class", "sme-wizard-stage sme-arrange-stack-h sme-margin-right-md", "role", "tab", 3, "ngClass", "click", 4, "ngFor", "ngForOf"], ["role", "tab", 1, "sme-wizard-stage", "sme-arrange-stack-h", "sme-margin-right-md", 3, "ngClass", "click"], ["tabindex", "0", "aria-live", "polite", "type", "button", 1, "sme-button-trigger", "sme-wizard-button-item", "sme-padding-vertical-sm", "sme-padding-horizontal-none", "sme-button-auto-width", 3, "smeTelemetryDataBlob", "smeTelemetryId", "disabled", "smeTelemetryDisableElement"], [1, "sme-wizard-stage-index", "sme-position-flex-none", 3, "ngClass"], [1, "sme-position-flex-auto", "sme-font-body", 3, "ngClass"], [1, "sme-arrange-stack-v", "sme-position-flex-none", "sme-focus-zone", "sme-border-right-sm", "sme-border-right-color-base-80"], ["role", "tablist", "class", "sme-padding-vertical-sm sme-position-flex-auto", 3, "ngClass", 4, "ngIf"], [1, "sme-position-flex-none", "sme-focus-zone"], [1, "split-view-toggle", "sme-button-trigger", "sme-button-auto-width", "sme-position-flex-none", "sme-layout-float-right", 3, "title", "click"], [1, "sme-icon", 3, "ngClass"], ["role", "tablist", 1, "sme-padding-vertical-sm", "sme-position-flex-auto", 3, "ngClass"], ["role", "tab", "tabindex", "0", "class", "sme-arrange-stack-h sme-padding-left-lg sme-padding-right-xs", "aria-live", "polite", 3, "ngClass", "title", "click", 4, "ngFor", "ngForOf"], ["role", "tab", "tabindex", "0", "aria-live", "polite", 1, "sme-arrange-stack-h", "sme-padding-left-lg", "sme-padding-right-xs", 3, "ngClass", "title", "click"], ["type", "button", 1, "sme-wizard-step", "sme-button-trigger", "sme-wizard-button-item", "sme-padding-horizontal-none", "sme-padding-vertical-xs", "sme-button-auto-width", 3, "ngClass", "disabled", "smeTelemetryDisableElement", "smeTelemetryDataBlob", "smeTelemetryId"], [1, "sme-position-flex-none", "sme-margin-right-xs"], ["class", "sme-position-flex-none", 4, "ngIf"], [1, "sme-position-flex-none"], [3, "alert"], [1, "sme-layout-relative", "sme-position-flex-none", "sme-border-top-sm", "sme-border-top-color-base-80", "sme-padding-vertical-sm", "sme-padding-horizontal-lg", "sme-focus-zone"], [1, "sme-layout-float-left"], ["type", "button", "smeTelemetryId", "wizardPrev", 1, "sme-focus-zone", 3, "smeTelemetryDataBlob", "disabled", "click"], ["type", "button", "smeTelemetryId", "wizardNext", 1, "sme-focus-zone", "sme-button-primary", 3, "smeTelemetryDataBlob", "disabled", "smeTelemetryDisableElement", "click"], ["class", "sme-layout-relative sme-layout-float-right sme-padding-left-xl sme-padding-top-md", 4, "ngIf"], ["type", "button", "smeTelemetryId", "wizardSkip", 1, "sme-focus-zone", 3, "smeTelemetryDataBlob", "click"], ["type", "button", "smeTelemetryId", "wizardExit", 1, "sme-focus-zone", "sme-layout-float-right", 3, "smeTelemetryDataBlob", "click"], [1, "sme-layout-relative", "sme-layout-float-right", "sme-padding-left-xl", "sme-padding-top-md"], ["size", "small"]], template: function WizardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
881
891
|
i0.ɵɵelementStart(0, "div", 0);
|
|
882
892
|
i0.ɵɵtemplate(1, WizardComponent_div_1_Template, 4, 3, "div", 1);
|
|
883
|
-
i0.ɵɵtemplate(2,
|
|
893
|
+
i0.ɵɵtemplate(2, WizardComponent_ul_2_Template, 2, 1, "ul", 2);
|
|
884
894
|
i0.ɵɵelementStart(3, "div", 3);
|
|
885
895
|
i0.ɵɵtemplate(4, WizardComponent_div_4_Template, 5, 8, "div", 4);
|
|
886
896
|
i0.ɵɵelementStart(5, "div", 5);
|
|
@@ -898,12 +908,12 @@ export class WizardComponent extends DynamicComponentBase {
|
|
|
898
908
|
i0.ɵɵadvance(2);
|
|
899
909
|
i0.ɵɵproperty("ngIf", !ctx.wizardIsFinished && !ctx.hideStepsListSidePane);
|
|
900
910
|
i0.ɵɵadvance(1);
|
|
901
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(6,
|
|
911
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(6, _c7, ctx.currentStepComponent.padContents));
|
|
902
912
|
i0.ɵɵadvance(1);
|
|
903
913
|
i0.ɵɵproperty("ngIf", ctx.currentStepComponent.disabled);
|
|
904
914
|
i0.ɵɵadvance(3);
|
|
905
915
|
i0.ɵɵproperty("ngIf", !ctx.wizardIsFinished);
|
|
906
|
-
} }, directives: [i2.NgIf,
|
|
916
|
+
} }, directives: [i2.TelemetryDirective, i3.NgIf, i3.NgClass, i4.PreviewBadgeComponent, i3.NgForOf, i5.TooltipDirective, i6.PageAlertBarComponent, i7.LoadingWheelComponent], encapsulation: 2 });
|
|
907
917
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WizardComponent, [{
|
|
908
918
|
type: Component,
|
|
909
919
|
args: [{
|
|
@@ -927,4 +937,4 @@ export class WizardComponent extends DynamicComponentBase {
|
|
|
927
937
|
}], finished: [{
|
|
928
938
|
type: Output
|
|
929
939
|
}] }); })();
|
|
930
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3dpemFyZC93aXphcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvd2l6YXJkL3dpemFyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDMUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUN6RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrRUFBK0UsQ0FBQztBQUNySCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUsxRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFhLE1BQU0scUNBQXFDLENBQUM7QUFPckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7O0lDekIxRSxnQ0FBcUY7OztJQUh2RiwrQkFDNEo7SUFDMUosOEJBQXFDO0lBQUEsWUFBYTtJQUFBLGlCQUFLO0lB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QUFNO1lBT1MsV0FBVztrQkFEMUIsTUFBTTtZQU9TLGVBQWU7a0JBRDlCLE1BQU07WUFPUyxRQUFRO2tCQUR2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUnhqc0xpZmV0aW1lTWFuYWdlciB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9yeGpzLWxpZmV0aW1lLW1hbmFnZXInO1xyXG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2dnaW5nJztcclxuaW1wb3J0IHsgU21lV2ViVGVsZW1ldHJ5IH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9zbWUtd2ViLXRlbGVtZXRyeSc7XHJcbmltcG9ydCB7IFRlbGVtZXRyeUFjdGlvblR5cGVzIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9zbWUtd2ViLXRlbGVtZXRyeS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudE1vZHVsZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvbWFuaWZlc3QvZW52aXJvbm1lbnQtbW9kdWxlcyc7XHJcbmltcG9ydCB7XHJcbiAgICBScGNEaWFsb2dDb25maXJtYXRpb25SZXF1ZXN0LFxyXG4gICAgUnBjRGlhbG9nTWVzc2FnZVJlcXVlc3RcclxufSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9kaWFsb2cvcnBjLWRpYWxvZy1tb2RlbCc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi9nZW5lcmF0ZWQvU3RyaW5ncyc7XHJcbmltcG9ydCB7IEFwcENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hcHAtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9jb21tb24vZHluYW1pYy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIZWFsdGhBbGVydFNldmVyaXR5LCBQYWdlQWxlcnQgfSBmcm9tICcuLi9wYWdlLWFsZXJ0LWJhci9tb2RlbHMvcGFnZS1hbGVydCc7XHJcbmltcG9ydCB7IFdpemFyZE1vZGVsIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLW1vZGVsJztcclxuaW1wb3J0IHsgV2l6YXJkTmF2aWdhdGlvbkludGVyZmFjZSB9IGZyb20gJy4vbW9kZWxzL3dpemFyZC1uYXZpZ2F0aW9uLWludGVyZmFjZSc7XHJcbmltcG9ydCB7IFdpemFyZFN0YWdlIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLXN0YWdlJztcclxuaW1wb3J0IHsgV2l6YXJkU3RlcCB9IGZyb20gJy4vbW9kZWxzL3dpemFyZC1zdGVwJztcclxuaW1wb3J0IHsgV2l6YXJkU3RlcENoYW5nZWRFdmVudCB9IGZyb20gJy4vbW9kZWxzL3dpemFyZC1zdGVwLWNoYW5nZWQtZXZlbnQnO1xyXG5pbXBvcnQgeyBXaXphcmRTdGVwVmFsaWRhdGlvbiB9IGZyb20gJy4vbW9kZWxzL3dpemFyZC1zdGVwLXZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBXaXphcmRCdWlsZGVyIH0gZnJvbSAnLi93aXphcmQtYnVpbGRlcic7XHJcbmltcG9ydCB7IFdpemFyZE5hdmlnYXRpb25JbmZvcm1hdGlvbiB9IGZyb20gJy4vd2l6YXJkLW5hdmlnYXRpb24taW5mb3JtYXRpb24nO1xyXG5pbXBvcnQgeyBHZW5lcmljV2l6YXJkU3RlcENvbXBvbmVudCB9IGZyb20gJy4vd2l6YXJkLXN0ZXAvd2l6YXJkLXN0ZXAuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBXaGF0ZXZlciBzdGF0ZSB0aGUgd2l6YXJkIGlzIGluXHJcbiAqL1xyXG5lbnVtIFdpemFyZFN0YXRlIHtcclxuICAgIEV4aXQgPSAnRXhpdCcsXHJcbiAgICBFbnRyeSA9ICdFbnRyeScsXHJcbiAgICBGaW5pc2hlZCA9ICdGaW5pc2hlZCcsXHJcbiAgICBBY3RpdmUgPSAnQWN0aXZlJ1xyXG59XHJcblxyXG4vKipcclxuICogRGF0YSB0byBjb2xsZWN0IGluIHdpemFyZFxyXG4gKi9cclxuY2xhc3MgV2l6YXJkVGVsZW1ldHJ5RGF0YSB7XHJcbiAgICBzdGVwSW5kZXhOdW1iZXI6IHN0cmluZztcclxuICAgIHN0ZXBOYW1lOiBzdHJpbmc7XHJcbiAgICBzdGVwSW5kZXhTdGFydFRpbWU6IHN0cmluZztcclxuICAgIGVudHJ5UG9pbnQ/OiBzdHJpbmc7XHJcbiAgICB3aXphcmRUeXBlPzogc3RyaW5nO1xyXG4gICAgd2l6YXJkSWQ/OiBzdHJpbmc7XHJcbiAgICBzdGF0ZT86IFdpemFyZFN0YXRlO1xyXG59XHJcblxyXG4vKipcclxuICogQHNtZURvYyB7QGxhYmVsIFdpemFyZCBAaWQgc21lLXdpemFyZH1cclxuICpcclxuICogQG92ZXJ2aWV3XHJcbiAqIEBmaWxlIHtAZmlsZXBhdGggLi9leGFtcGxlcy9vdmVydmlldy5tZH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBFeGFtcGxlIFdpemFyZCBAaWQgc2ltcGxlLXdpemFyZH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy93aXphcmQtZXhhbXBsZS5jb21wb25lbnQuaHRtbH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvd2l6YXJkLWV4YW1wbGUuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGRhdGEtbW9kZWwudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZXhhbXBsZS1tb2RlbC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBmaW5pc2gtY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2ZpbmlzaC5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgZmluaXNoLWNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2ZpbmlzaC5jb21wb25lbnQuaHRtbH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBzaW1wbGUtc3RhdGljLXRleHQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9zaW1wbGUtc3RhdGljLXRleHQuY29tcG9uZW50Lmh0bWx9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgc2ltcGxlLXN0YXRpYy10ZXh0LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NpbXBsZS1zdGF0aWMtdGV4dC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBzaW1wbGUtdGV4dC1pbnB1dC5jb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9zaW1wbGUtdGV4dC1pbnB1dC5jb21wb25lbnQuaHRtbH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBzaW1wbGUtdGV4dC1pbnB1dC5jb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2ltcGxlLXRleHQtaW5wdXQuY29tcG9uZW50LnRzfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgY29tcG9uZW50IGNsYXNzIGRlZmluaXRpb24gZm9yIHRoZSB3aXphcmQgY29tcG9uZW50LlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS13aXphcmQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3dpemFyZC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFdpemFyZENvbXBvbmVudDxUTW9kZWwgZXh0ZW5kcyBXaXphcmRNb2RlbD5cclxuICAgIGV4dGVuZHMgRHluYW1pY0NvbXBvbmVudEJhc2U8R2VuZXJpY1dpemFyZFN0ZXBDb21wb25lbnQ8VE1vZGVsPj5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBXaXphcmROYXZpZ2F0aW9uSW50ZXJmYWNlIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGRhdGEgbW9kZWwgZm9yIHNoYXJpbmcgZGF0YSBhY3Jvc3MgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgbW9kZWwodmFsdWU6IFRNb2RlbCkge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxNb2RlbCA9IHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50Lm9uV2l6YXJkTW9kZWxDaGFuZ2VkKHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGRhdGEgbW9kZWwgZm9yIHNoYXJpbmcgZGF0YSBhY3Jvc3MgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBtb2RlbCgpOiBUTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsTW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYmFja2luZyBzdG9yZSBmb3IgdGhlIG1vZGVsIHByb3BlcnR5XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW50ZXJuYWxNb2RlbDogVE1vZGVsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgY29weSBvZiBtb2RlbCB0byByb2xsYmFjayB0byB3aGVuIHRoZVxyXG4gICAgICogY3VycmVudCBzdGVwIGlzIHNraXBwZWQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3VycmVudFN0ZXBNb2RlbENvcHk6IFRNb2RlbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB3aXphcmRCdWlsZGVyIHVzZWQgdG8gaW5zdGFudGlhdGUgdGhlIGtleSB3aXphcmQgcHJvcGVydGllcy5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB3aXphcmRCdWlsZGVyOiBXaXphcmRCdWlsZGVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHN0YWdlcyBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhZ2VzOiBXaXphcmRTdGFnZVtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhlYWRpbmcgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGhlYWRpbmc6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aXRsZSBvZiB0aGUgZXhpdCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleGl0QnV0dG9uVGl0bGU6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aXRsZSBvZiB0aGUgZmluaXNoIGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbmlzaEJ1dHRvblRpdGxlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZmluaXNoIHZpZXcgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbmlzaFZpZXc6IFdpemFyZFN0ZXA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRoZSBzdGVwcyBsaXN0IHNpZGUgcGFuZSB3aWxsIGJlIHZpc2libGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoaWRlU3RlcHNMaXN0U2lkZVBhbmU6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIGEgY29uZmlybWF0aW9uIGRpYWxvZyB3aWxsIGJlIHNob3duIHVwb24gJ0V4aXQnIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93RXhpdENvbmZpcm1hdGlvbkRpYWxvZzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIGlzIGluIHByZXZpZXcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0luUHJldmlldzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIHdpemFyZCBjYW4gbmF2aWdhdGUgdG8gYSBwcmV2aW91cyBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbGVtZXRyeSBkYXRhIGNvbGxlY3RlZCB3aGlsZSBuYXZpZ2F0aW5nIHRocm91Z2ggd2l6YXJkLiBCeSBkZWZhdWx0LCBzdGFydCBhdCAxLjEgc3RlcCBpbmRleCBhbmRcclxuICAgICAqIEVudHJ5IHN0YXRlLlxyXG4gICAgICogS2VlcCBzYW1lIGZvcm1hdCBhcyB0ZWxlbWV0cnkgZXZlbnQgdGltZXN0YW1wXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0ZWxlbWV0cnlEYXRhOiBXaXphcmRUZWxlbWV0cnlEYXRhID0ge1xyXG4gICAgICAgIHN0ZXBJbmRleE51bWJlcjogJzEuMScsXHJcbiAgICAgICAgc3RlcE5hbWU6ICcnLFxyXG4gICAgICAgIHN0ZXBJbmRleFN0YXJ0VGltZTogKG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgZW50cnlQb2ludDogRW52aXJvbm1lbnRNb2R1bGUuY3JlYXRlRW50cnlwb2ludElkKE1zZnRTbWUuc2VsZigpLkluaXQubW9kdWxlTmFtZSxcclxuICAgICAgICAgICAgTXNmdFNtZS5zZWxmKCkuSW5pdC5lbnRyeVBvaW50TmFtZSksXHJcbiAgICAgICAgc3RhdGU6IFdpemFyZFN0YXRlLkVudHJ5XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBPY2N1cnMgd2hlbiB0aGUgd2l6YXJkIG1vZGVsIGNoYW5nZXNcclxuICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPFRNb2RlbD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgd2hlbiB0aGUgd2l6YXJkIGlzIGV4aXRlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZXhpdDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW5ldmVyIGEgc3RlcCBpcyBzdWJtaXR0ZWQuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IHN0ZXBTdWJtaXR0ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyB3aGVuZXZlciBhIHN0ZXAgaW5kZXggaXMgY2hhbmdlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RlcENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxXaXphcmRTdGVwQ2hhbmdlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8V2l6YXJkU3RlcENoYW5nZWRFdmVudD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyB3aGVuZXZlciBzdGVwIHZhbGlkYXRpb24gZmFpbHNcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RlcEludmFsaWRhdGVkOiBFdmVudEVtaXR0ZXI8V2l6YXJkU3RlcFZhbGlkYXRpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxXaXphcmRTdGVwVmFsaWRhdGlvbj4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyB3aGVuIHRoZSB3aXphcmQgaXMgZmluaXNoZWRcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmluaXNoZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc291cmNlIHN0cmluZ3MgZm9yIHRoZSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdHJpbmdzOiBTdHJpbmdzID0gTXNmdFNtZS5nZXRTdHJpbmdzPFN0cmluZ3M+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgd2l6YXJkIGlzIHZhbGlkYXRpbmcgaW5wdXQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB2YWxpZGF0aW5nOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciBvciBub3QgYWxsIG9mIHRoZSB3aXphcmQncyBzdGVwcyBhcmUgY29tcGxldGUgJiAnRmluaXNoJyBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgd2l6YXJkSXNGaW5pc2hlZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdpemFyZCBuYXZpZ2F0aW9uIGluZm9ybWF0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmF2aWdhdGlvbkluZm9ybWF0aW9uOiBXaXphcmROYXZpZ2F0aW9uSW5mb3JtYXRpb247XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYWxlcnQgZm9yIGEgZGlzYWJsZWQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFsZXJ0OiBQYWdlQWxlcnQgPSB7XHJcbiAgICAgICAgc2V2ZXJpdHk6IEhlYWx0aEFsZXJ0U2V2ZXJpdHkuSW5mbyxcclxuICAgICAgICBtZXNzYWdlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLmRpc2FibGVkU3RlcEFsZXJ0LFxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNpZGUgcGFuZSB0b2dnbGUgc3RhdGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzRXhwYW5kZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbmRleDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHN0YWdlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0YWdlSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByeGpzIGxpZmV0aW1lIG1hbmFnZXIgZm9yIHRoZSBjdXJyZW50IHN0ZXBcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50U3RlcFJ4anNMaWZldGltZTogUnhqc0xpZmV0aW1lTWFuYWdlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBXaXphcmRDb21wb25lbnQgY2xhc3MuXHJcbiAgICAgKiBAcGFyYW0gYXBwQ29udGV4dCAtIFRoZSBhcHBsaWNhdGlvbiBjb250ZXh0IHNlcnZpY2UgY2xhc3MuXHJcbiAgICAgKiBAcGFyYW0gY2hhbmdlRGV0ZWN0b3JSZWYgLSBUaGUgY2hhbmdlIGRldGVjdG9yLlxyXG4gICAgICogQHBhcmFtIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlciAtIFRoZSBjb21wb25lbnQgZmFjdG9yeSByZXNvbHZlci5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBhcHBDb250ZXh0OiBBcHBDb250ZXh0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKTtcclxuICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUTW9kZWw+KCk7XHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHRlbGVtZXRyeSBldmVudCBzdHJ1Y3R1cmUgZm9yIHdpemFyZCB0ZWxlbWV0cnkuIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGFueSBhdXRvbWF0aWNcclxuICAgICAqIGFjdGlvbnMgbm90IHRyaWdnZXJlZCBieSBhIERPTSBpbnRlcmFjdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB3aXphcmRUZWxlbWV0cnlFdmVudEJsb2IoKTogYW55IHtcclxuICAgICAgICBjb25zdCB3aXphcmRUZWxlbWV0cnlCYXNlID0ge1xyXG4gICAgICAgICAgICBjb250ZW50SWQ6ICdzbWUtd2l6YXJkJyxcclxuICAgICAgICAgICAgYXJlYU5hbWU6ICdXaXphcmRDb21wb25lbnQnXHJcbiAgICAgICAgfTtcclxuICAgICAgICBNc2Z0U21lLmRlZXBBc3NpZ24od2l6YXJkVGVsZW1ldHJ5QmFzZSwgdGhpcy50ZWxlbWV0cnlEYXRhKTtcclxuICAgICAgICByZXR1cm4gd2l6YXJkVGVsZW1ldHJ5QmFzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHN0YWdlIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc3RhZ2VzQXJyYXlJbmRleCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YWdlSW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGVwIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc3RlcEluZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHN0YWdlIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFN0YWdlKCk6IFdpemFyZFN0YWdlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGFnZXNbdGhpcy5zdGFnZXNBcnJheUluZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RlcCBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRTdGVwKCk6IFdpemFyZFN0ZXAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGFnZS5zdGVwc1t0aGlzLnN0ZXBJbmRleF07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBmaW5pc2ggdmlldyBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGZpbmlzaFN0ZXAoKTogV2l6YXJkU3RlcCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVmlldztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RlcHMgZm9yIHRoZSBjdXJyZW50IHN0YWdlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0U3RlcHNGb3JTdGFnZSgpOiBXaXphcmRTdGVwW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGFnZS5zdGVwcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGR5bmFtaWNhbGx5IHJlbmRlcmVkIGNvbXBvbmVudCBvZiB0aGUgY3VycmVudCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRTdGVwQ29tcG9uZW50KCk6IEdlbmVyaWNXaXphcmRTdGVwQ29tcG9uZW50PFRNb2RlbD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZiA/IHRoaXMucmVmLmluc3RhbmNlIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG9uTGFzdFN0ZXBPZlN0YWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGFnZS5zdGVwcy5sZW5ndGggLSAxID09PSB0aGlzLnN0ZXBJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG9uTGFzdFN0YWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YWdlcy5sZW5ndGggLSAxID09PSB0aGlzLnN0YWdlSW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBvbkxhc3RTdGVwT2ZMYXN0U3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub25MYXN0U3RhZ2UgJiYgdGhpcy5vbkxhc3RTdGVwT2ZTdGFnZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgc3RhZ2UgaXMgZGlzYWJsZWQgb3Igbm90LlxyXG4gICAgcHVibGljIHN0YWdlSW5kZXhEaXNhYmxlZChzdGFnZTogV2l6YXJkU3RhZ2UsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXN0YWdlLmNvbXBsZXRlZCAmJiBpbmRleCAhPT0gdGhpcy5zdGFnZXNBcnJheUluZGV4ICYmICFzdGFnZS5hY3RpdmU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIHN0ZXAgaXMgZGlzYWJsZWQgb3Igbm90LlxyXG4gICAgcHVibGljIHN0ZXBJbmRleERpc2FibGVkKHN0ZXA6IFdpemFyZFN0ZXAsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXN0ZXAuY29tcGxldGVkICYmIGluZGV4ICE9PSB0aGlzLnN0ZXBJbmRleCAmJiAhc3RlcC5kaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRleHQgZm9yIHRoZSBuZXh0IGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5leHRCdXR0b25UZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleF0uc3RlcHMubGVuZ3RoIC0gMSA9PT0gdGhpcy5zdGVwSW5kZXgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhZ2VJbmRleCA9PT0gdGhpcy5zdGFnZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoQnV0dG9uVGl0bGUgPyB0aGlzLmZpbmlzaEJ1dHRvblRpdGxlIDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5maW5pc2g7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5zdGFnZU5hbWUuZm9ybWF0KHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleCArIDFdLm5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24ubmV4dDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB0ZXh0IGZvciB0aGUgZXhpdC9maW5pc2ggYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXhpdEJ1dHRvblRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5leGl0QnV0dG9uVGl0bGUgPyB0aGlzLmV4aXRCdXR0b25UaXRsZSA6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uZXhpdDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogR2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIHdpemFyZCBidXR0b25zXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGdldCBkaXNhYmxlQmFja0J1dHRvbigpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc3RhZ2VzQXJyYXlJbmRleCA9PT0gMCAmJiB0aGlzLnN0ZXBJbmRleCA9PT0gMCkgfHwgdGhpcy52YWxpZGF0aW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZU5leHRCdXR0b24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC52YWxpZCB8fCB0aGlzLnZhbGlkYXRpbmcgfHwgdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5pc0J1c3k7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgc2hvd1NraXBCdXR0b24oKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLm9uTGFzdFN0ZXBPZkxhc3RTdGFnZSAmJiB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmNhbkJlU2tpcHBlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHN0ZXAgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBzdGVwSW5kZXgodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50U3RhZ2Uuc3RlcHNbdmFsdWVdKSB7XHJcbiAgICAgICAgICAgIExvZ2dpbmcubG9nRXJyb3IoJ1dpemFyZENvbXBvbmVudC5zdGVwSW5kZXggc2V0dGVyJywgJ0F0dGVtcHRlZCB0byBzZXQgc3RlcEluZGV4IHRvIGludmFsaWQgdmFsdWUuJywge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0SW5kZXg6IHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgc3RlcHM6IHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2xlYW5Db21wb25lbnQoKTtcclxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRUeXBlID0gdGhpcy5jdXJyZW50U3RlcC5keW5hbWljU3RlcENvbXBvbmVudDtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVDb21wb25lbnQoKTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcmVzZXJ2ZU1vZGVsRm9yQ3VycmVudFN0ZXAoKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RhZ2Ugb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBzdGFnZXNBcnJheUluZGV4KHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhZ2VzW3ZhbHVlXSkge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZ0Vycm9yKCdXaXphcmRDb21wb25lbnQuc3RhZ2VTdGVwSW5kZXggc2V0dGVyJywgJ0F0dGVtcHRlZCB0byBzZXQgc3RhZ2VzQXJyYXlJbmRleCB0byBpbnZhbGlkIHZhbHVlLicsIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldEluZGV4OiB2YWx1ZSxcclxuICAgICAgICAgICAgICAgIHN0ZXBzOiB0aGlzLnN0YWdlc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YWdlSW5kZXggPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrcyB0aGUgY3VycmVudCBzdGFnZSBvZiB0aGUgd2l6YXJkIGFzIGNvbXBsZXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0YWdlIHdhcyBjb21wbGV0ZWQgYW5kIGZhbHNlIGlmIG5vdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbXBsZXRlQ3VycmVudFN0YWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGFnZS5jb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLmNvbXBsZXRlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBjdXJyZW50IHN0ZXAgb2YgdGhlIHdpemFyZCBhcyBjb21wbGV0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdGVwIHdhcyBjb21wbGV0ZWQgYW5kIGZhbHNlIGlmIG5vdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbXBsZXRlQ3VycmVudFN0ZXAoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0ZXAgJiYgIXRoaXMuY3VycmVudFN0ZXAuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcC5jb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0ZXAuY29tcGxldGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFya3MgdGhlIGN1cnJlbnQgc3RlcCBvZiB0aGUgd2l6YXJkIGFzIGluY29tcGxldGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RlcCB3YXMgZmFpbGVkIGFuZCBmYWxzZSBpZiBub3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmYWlsQ3VycmVudFN0ZXAoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0ZXApIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcC5mYWlsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gIXRoaXMuY3VycmVudFN0ZXAuY29tcGxldGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgdGhlIHdpemFyZCB0byB0aGUgbmV4dCB2aXNpYmxlIHN0ZXAgaW4gdGhlIGxpc3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtb3ZlVG9OZXh0U3RlcCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRlVG9OZXh0U3RlcCgpO1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAuZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vbkxhc3RTdGVwT2ZMYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmluaXNoTmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb05leHRTdGVwKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy50ZWxlbWV0cnlEYXRhLnN0YXRlID09PSBXaXphcmRTdGF0ZS5FbnRyeSkge1xyXG4gICAgICAgICAgICAvLyBTd2l0Y2ggdG8gYWN0aXZlIGFmdGVyIG91ciBmaXJzdCBtb3ZlIHRvIG5leHQgb3IgcHJldmlvdXMgc3RlcFxyXG4gICAgICAgICAgICAvLyBNYW51YWxseSBjYWxsIGl0IGhlcmUgYi9jIHNvbWUgbW9kdWxlcyB3aWxsIHVwZGF0ZSBzdGVwSW5kZXggYWZ0ZXIgbG9hZGluZywgd2hpY2ggdHJpZ2dlcnMgZW1pdFN0ZXBDaGFuZ2VkLlxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRlbGVtZXRyeVRhZ3MoV2l6YXJkU3RhdGUuQWN0aXZlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgdGhlIGluZGV4aW5nIGZvciBtb3ZpbmcgdG8gdGhlIG5leHQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5hdmlnYXRlVG9OZXh0U3RlcCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMub25MYXN0U3RlcE9mU3RhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXgrKztcclxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9uTGFzdFN0YWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleCsrO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleF0uc3RlcHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWdlSW5kZXgrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgdGhlIHdpemFyZCB0byB0aGUgcHJldmlvdXMgKHZpc2libGUpIHN0ZXAgaW4gdGhlIGxpc3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtb3ZlVG9QcmV2aW91c1N0ZXAoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvUHJldmlvdXNTdGVwKCk7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvUHJldmlvdXNTdGVwKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGUgPT09IFdpemFyZFN0YXRlLkVudHJ5KSB7XHJcbiAgICAgICAgICAgIC8vIFN3aXRjaCB0byBhY3RpdmUgYWZ0ZXIgb3VyIGZpcnN0IG1vdmUgdG8gbmV4dCBvciBwcmV2aW91cyBzdGVwXHJcbiAgICAgICAgICAgIHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZSA9IFdpemFyZFN0YXRlLkFjdGl2ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIHRoZSBpbmRleGluZyBmb3IgbW92aW5nIGJhY2sgdG8gbGFzdCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmF2aWdhdGVUb1ByZXZpb3VzU3RlcCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5zdGVwSW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhZ2VJbmRleCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleC0tO1xyXG5cclxuICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLnN0YWdlc1t0aGlzLnN0YWdlSW5kZXhdLnN0ZXBzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleC0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc3RlcEluZGV4ID0gdGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5zdGVwcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5jb21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcEluZGV4LS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdFN0ZXBDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFRoZSBtZXRob2QgdGhhdCBmb2N1c2VzIG9uIGFuIGFjdGl2ZSBzdGVwIG9yIHN0YWdlXHJcbiAgICAqL1xyXG5cclxuICAgIHByaXZhdGUgZm9jdXNPbkFjdGl2ZVN0ZXAoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmhpZGVTdGVwc0xpc3RTaWRlUGFuZSA/ICdzbWUtd2l6YXJkLXN0YWdlLWZvY3VzJyA6ICdzbWUtc3RlcC1hY3RpdmUnO1xyXG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoc2VsZWN0b3IpO1xyXG4gICAgICAgIGlmIChmb2N1c2FibGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAoPEhUTUxJbnB1dEVsZW1lbnQ+Zm9jdXNhYmxlWzBdKS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdG8gcnVuIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsaXplZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkluZm9ybWF0aW9uID0gbmV3IFdpemFyZE5hdmlnYXRpb25JbmZvcm1hdGlvbih0aGlzLCB0aGlzLndpemFyZEJ1aWxkZXIpO1xyXG4gICAgICAgIHRoaXMuc3RhZ2VzID0gdGhpcy53aXphcmRCdWlsZGVyLnN0YWdlcztcclxuICAgICAgICB0aGlzLmhlYWRpbmcgPSB0aGlzLndpemFyZEJ1aWxkZXIuaGVhZGluZztcclxuICAgICAgICB0aGlzLmV4aXRCdXR0b25UaXRsZSA9IHRoaXMud2l6YXJkQnVpbGRlci5leGl0QnV0dG9uVGl0bGU7XHJcbiAgICAgICAgdGhpcy5maW5pc2hCdXR0b25UaXRsZSA9IHRoaXMud2l6YXJkQnVpbGRlci5maW5pc2hCdXR0b25UaXRsZTtcclxuICAgICAgICB0aGlzLmZpbmlzaFZpZXcgPSB0aGlzLndpemFyZEJ1aWxkZXIuZmluaXNoVmlldztcclxuICAgICAgICB0aGlzLmhpZGVTdGVwc0xpc3RTaWRlUGFuZSA9IHRoaXMud2l6YXJkQnVpbGRlci5oaWRlU3RlcHNMaXN0U2lkZVBhbmU7XHJcbiAgICAgICAgdGhpcy5zaG93RXhpdENvbmZpcm1hdGlvbkRpYWxvZyA9IHRoaXMud2l6YXJkQnVpbGRlci5zaG93RXhpdENvbmZpcm1hdGlvbkRpYWxvZztcclxuICAgICAgICB0aGlzLmlzSW5QcmV2aWV3ID0gdGhpcy53aXphcmRCdWlsZGVyLmlzSW5QcmV2aWV3U3RhdGU7XHJcbiAgICAgICAgdGhpcy5jYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwID0gdGhpcy53aXphcmRCdWlsZGVyLmNhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXA7XHJcbiAgICAgICAgdGhpcy5zdGFnZXNBcnJheUluZGV4ID0gMDtcclxuICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IDA7XHJcblxyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zdGFnZXMpIHtcclxuICAgICAgICAgICAgTG9nZ2luZy5sb2dFcnJvcignV2l6YXJkQ29tcG9uZW50Lm5nT25Jbml0JywgYFRoZSAnc3RhZ2VzJyBhcnJheSBpcyBub3QgdmFsaWQhLmAsIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzOiB0aGlzLnN0YWdlc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tb2RlbCkge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZ0Vycm9yKCdXaXphcmRDb21wb25lbnQubmdPbkluaXQnLCBgVGhlICdtb2RlbCcgYXR0cmlidXRlIGlzIG5vdCB2YWxpZC5gLCB7XHJcbiAgICAgICAgICAgICAgICBtb2RlbDogdGhpcy5tb2RlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsaWRhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMud2l6YXJkSXNGaW5pc2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmFjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGxlZE1vZGVsID0gdGhpcy5pbnRlcm5hbE1vZGVsIGFzIGFueTtcclxuICAgICAgICBpZiAoZmlsbGVkTW9kZWwud2l6YXJkSWQpIHtcclxuICAgICAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLndpemFyZElkID0gZmlsbGVkTW9kZWwud2l6YXJkSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWxsZWRNb2RlbC53aXphcmRUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVsZW1ldHJ5RGF0YS53aXphcmRUeXBlID0gZmlsbGVkTW9kZWwud2l6YXJkVHlwZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkluZm9ybWF0aW9uLnJlc2V0SGlzdG9yeSgpO1xyXG4gICAgICAgIC8vIHVwZGF0ZSBoZXJlIGZpcnN0IHRvIGdldCB1cGRhdGVkIHRlbGVtZXRyeSBpbmZvXHJcbiAgICAgICAgdGhpcy51cGRhdGVUZWxlbWV0cnlUYWdzKCk7XHJcblxyXG4gICAgICAgIFNtZVdlYlRlbGVtZXRyeS50cmFjZUFjdGlvbihudWxsLCB7IGNvbnRlbnQ6IHRoaXMud2l6YXJkVGVsZW1ldHJ5RXZlbnRCbG9iLCBhY3Rpb25UeXBlOiBUZWxlbWV0cnlBY3Rpb25UeXBlcy5BdXRvbWF0aWMgfSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUZWxlbWV0cnlUYWdzKFdpemFyZFN0YXRlLkFjdGl2ZSk7XHJcblxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZSAhPT0gV2l6YXJkU3RhdGUuRmluaXNoZWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIG1hbnVhbGx5IHNldCBhdCB0aGlzIHBvaW50IGIvYyB2aWV3IGlzIGRlc3RydWN0ZWQuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGUgPSBXaXphcmRTdGF0ZS5FeGl0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGFjdGlvblR5cGUgQSBmb3IgQXV0byAoYWNjb3JkaW5nIHRvIEFXQSBkaWN0aW9uYXJ5KSB0byBkaWZmZXJlbnRpYXRlIGZyb20gQ0xcclxuICAgICAgICAgICAgU21lV2ViVGVsZW1ldHJ5LnRyYWNlQWN0aW9uKG51bGwsIHsgY29udGVudDogdGhpcy53aXphcmRUZWxlbWV0cnlFdmVudEJsb2IsIGFjdGlvblR5cGU6IFRlbGVtZXRyeUFjdGlvblR5cGVzLkF1dG9tYXRpYyB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW4gb3IgY2xvc2Ugc2lkZSBwYW5lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0b2dnbGVQYW5lKCkge1xyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBiYWNrIGJ1dHRvbiBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25CYWNrQ2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zaG93RGlhbG9nSWZCdXN5T3JKdXN0Q29tcGxldGUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW92ZVRvUHJldmlvdXNTdGVwKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbkFjdGl2ZVN0ZXAoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIHNraXAgYnV0dG9uIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblNraXBDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dEaWFsb2dJZkJ1c3lPckp1c3RDb21wbGV0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZU1vZGVsRm9yQ3VycmVudFN0ZXAoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpbmlzaE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTmV4dE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgRXhpdCAvIEZpbmlzaCBidXR0b24gaXMgY2xpY2tlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRXhpdENsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwQ29udGV4dC5mcmFtZS5zaG93RGlhbG9nQ29uZmlybWF0aW9uKDxScGNEaWFsb2dDb25maXJtYXRpb25SZXF1ZXN0PntcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24ubm8sXHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi55ZXMsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkV4aXQuRGlhbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5FeGl0LkRpYWxvZy50aXRsZVxyXG4gICAgICAgICAgICB9KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb25maXJtZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXQuZW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmV4aXQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdGhhdCBoYW5kbGVzIGNvbXBsZXRpb24gb2YgdGhlIHdpemFyZCxcclxuICAgICAqIGFuZCByZW5kZXJzIHRoZSBmaW5pc2hWaWV3IGlmIHByb3ZpZGVkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGhhbmRsZUZpbmlzaE5hdmlnYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZUN1cnJlbnRTdGVwKCk7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZUN1cnJlbnRTdGFnZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVGVsZW1ldHJ5VGFncyhXaXphcmRTdGF0ZS5GaW5pc2hlZCk7XHJcblxyXG4gICAgICAgIHRoaXMuZmluaXNoZWQuZW1pdCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmZpbmlzaFZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy53aXphcmRJc0ZpbmlzaGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2xlYW5Db21wb25lbnQoKTtcclxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRUeXBlID0gdGhpcy5maW5pc2hWaWV3LmR5bmFtaWNTdGVwQ29tcG9uZW50O1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBuZXh0IGJ1dHRvbiBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25OZXh0Q2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgLy8gaWYgZmluaXNoaW5nXHJcbiAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5TdGVwVmFsaWRhdGlvbigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5pc2hOYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudFN0ZXAuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucnVuU3RlcFZhbGlkYXRpb24oKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTmV4dE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0ZXBTdWJtaXR0ZWQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdGhhdCB2YWxpZGF0ZXMgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBydW5TdGVwVmFsaWRhdGlvbigpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQudmFsaWRhdGUoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKHZhbGlkYXRpb25SZXN1bHQ6IFdpemFyZFN0ZXBWYWxpZGF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5pc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmluaXNoTmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTmV4dE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFpbEN1cnJlbnRTdGVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwSW52YWxpZGF0ZWQuZW1pdCh2YWxpZGF0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdGhhdCBoYW5kbGVzIGluZGV4ZXMgYW5kXHJcbiAgICAgKiBzdGVwIGFuZCBzdGFnZSBjb21wbGV0aW9uIGZvciB0aGUgTmV4dCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaGFuZGxlTmV4dE5hdmlnYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZUN1cnJlbnRTdGVwKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9uTGFzdFN0ZXBPZlN0YWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVDdXJyZW50U3RhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tb3ZlVG9OZXh0U3RlcCgpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5mb2N1c09uQWN0aXZlU3RlcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd1ByZXZpb3VzU3RlcERpYWxvZygpIHtcclxuICAgICAgICB0aGlzLmFwcENvbnRleHQuZnJhbWUuc2hvd0RpYWxvZ01lc3NhZ2UoPFJwY0RpYWxvZ01lc3NhZ2VSZXF1ZXN0PntcclxuICAgICAgICAgICAgYnV0dG9uVGV4dDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5PSy5hZmZpcm1hdGl2ZSxcclxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5QcmV2aW91c1N0ZXAuRGlhbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLlByZXZpb3VzU3RlcC5EaWFsb2cudGl0bGVcclxuICAgICAgICB9KS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd0RpYWxvZ0lmQnVzeU9ySnVzdENvbXBsZXRlKG9uQ29uZmlybWF0aW9uQ2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcclxuICAgICAgICBjb25zdCBpc0J1c3kgPSB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmlzQnVzeTtcclxuICAgICAgICBjb25zdCBidXN5TWVzc2FnZSA9IHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuYnVzeU1lc3NhZ2U7XHJcbiAgICAgICAgaWYgKGlzQnVzeSkge1xyXG4gICAgICAgICAgICB0aGlzLmFwcENvbnRleHQuZnJhbWUuc2hvd0RpYWxvZ0NvbmZpcm1hdGlvbig8UnBjRGlhbG9nQ29uZmlybWF0aW9uUmVxdWVzdD57XHJcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLm5vLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24ueWVzLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYnVzeU1lc3NhZ2UgPyBidXN5TWVzc2FnZSA6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuQnVzeS5EaWFsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkJ1c3kuRGlhbG9nLnRpdGxlXHJcbiAgICAgICAgICAgIH0pLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY29uZmlybWVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybWF0aW9uQ2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvbkNvbmZpcm1hdGlvbkNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiBhIHN0YWdlIGlzIGNsaWNrZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNsaWNrZWRTdGVwSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGNsaWNrZWQgc3RhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblN0YWdlQ2xpY2soY2xpY2tlZFN0YWdlSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFN0YWdlID0gdGhpcy5zdGFnZXNbY2xpY2tlZFN0YWdlSW5kZXhdO1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwICYmIGNsaWNrZWRTdGFnZUluZGV4IDw9IHRoaXMuc3RhZ2VJbmRleCkge1xyXG4gICAgICAgICAgICAvLyBzaG93IGRpYWxvZyB3aGVuIG9ubHkgY2xpY2tpbmcgYSBwcmV2aW91cyBzdGFnZVxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0U3RhZ2UuY29tcGxldGVkICYmIHRoaXMuc3RhZ2VJbmRleCAhPT0gY2xpY2tlZFN0YWdlSW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1ByZXZpb3VzU3RlcERpYWxvZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRTdGFnZS5jb21wbGV0ZWQgfHwgdGFyZ2V0U3RhZ2UuYWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0RpYWxvZ0lmQnVzeU9ySnVzdENvbXBsZXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleCA9IGNsaWNrZWRTdGFnZUluZGV4O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleF0uY29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFnZUluZGV4ICsgMTsgaSA8IHRoaXMuc3RhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbaV0uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbaV0uY29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gYSBzdGVwIGlzIGNsaWNrZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNsaWNrZWRTdGVwSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGNsaWNrZWQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uU3RlcENsaWNrKGNsaWNrZWRTdGVwSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHN0ZXBJc0FjdGl2ZSA9IHRoaXMuc3RlcEluZGV4ID09PSBjbGlja2VkU3RlcEluZGV4O1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFN0ZXAgPSB0aGlzLmN1cnJlbnRTdGFnZS5zdGVwc1tjbGlja2VkU3RlcEluZGV4XTtcclxuICAgICAgICBpZiAoIXRoaXMuY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcCAmJiBjbGlja2VkU3RlcEluZGV4IDw9IHRoaXMuc3RlcEluZGV4KSB7XHJcbiAgICAgICAgICAgIC8vIHNob3cgZGlhbG9nIHdoZW4gb25seSBjbGlja2luZyBhIHByZXZpb3VzIHN0ZXBcclxuICAgICAgICAgICAgaWYgKCFzdGVwSXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1ByZXZpb3VzU3RlcERpYWxvZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRhcmdldFN0ZXAgJiYgIXN0ZXBJc0FjdGl2ZSAmJiAodGFyZ2V0U3RlcC5jb21wbGV0ZWQgfHwgdGFyZ2V0U3RlcC5kaXNhYmxlZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RpYWxvZ0lmQnVzeU9ySnVzdENvbXBsZXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXggPSBjbGlja2VkU3RlcEluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdFN0ZXBDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ29tcG9uZW50KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICgodGhpcy5jdXJyZW50U3RlcCB8fCB0aGlzLmZpbmlzaFN0ZXApICYmICghdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudCkpIHtcclxuICAgICAgICAgICAgc3VwZXIuY3JlYXRlQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBSeGpzTGlmZXRpbWUgPSBuZXcgUnhqc0xpZmV0aW1lTWFuYWdlcigpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwUnhqc0xpZmV0aW1lLmFkZFN1YnNjcmlwdGlvbnMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LnN1Ym1pdHRlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbk5leHRDbGljaygpKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQubW9kZWxDaGFuZ2VkLnN1YnNjcmliZShuZXdWYWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbE1vZGVsID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5vbldpemFyZE1vZGVsQ2hhbmdlZCh0aGlzLm1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNsZWFuQ29tcG9uZW50KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLmNsZWFuQ29tcG9uZW50KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0ZXBSeGpzTGlmZXRpbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcFJ4anNMaWZldGltZS5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBSeGpzTGlmZXRpbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNhdmVzIHRoZSBzdGF0ZSBvZiB0aGUgbW9kZWwgYXQgdGhlIGJlZ2lubmluZ1xyXG4gICAgICogb2YgdGhlIGN1cnJlbnQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBwcmVzZXJ2ZU1vZGVsRm9yQ3VycmVudFN0ZXAoKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RlcE1vZGVsQ29weSA9IE1zZnRTbWUuZGVlcENvcHkodGhpcy5pbnRlcm5hbE1vZGVsIHx8IHt9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGUgbW9kZWwgYmFjayB0byB0aGUgc3RhdGUgYXQgdGhlXHJcbiAgICAgKiBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZXN0b3JlTW9kZWxGb3JDdXJyZW50U3RlcCgpIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5jdXJyZW50U3RlcE1vZGVsQ29weTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwTW9kZWxDb3B5ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGVtaXRTdGVwQ2hhbmdlZCgpIHtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5uYXZpZ2F0aW9uSW5mb3JtYXRpb24ucHVzaEhpc3RvcnkoeyBzdGFnZTogdGhpcy5zdGFnZUluZGV4LCBzdGVwOiB0aGlzLnN0ZXBJbmRleCB9KTtcclxuXHJcbiAgICAgICAgLy8gZW1pdCBvbmx5IHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UuXHJcbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVUZWxlbWV0cnlUYWdzKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0ZXBDaGFuZ2VkLmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgc3RhZ2VJbmRleDogdGhpcy5zdGFnZUluZGV4LFxyXG4gICAgICAgICAgICAgICAgc3RhZ2VOYW1lOiB0aGlzLmN1cnJlbnRTdGFnZSA/IHRoaXMuY3VycmVudFN0YWdlLm5hbWUgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3RlcEluZGV4OiB0aGlzLnN0ZXBJbmRleCxcclxuICAgICAgICAgICAgICAgIHN0ZXBOYW1lOiB0aGlzLmN1cnJlbnRTdGVwID8gdGhpcy5jdXJyZW50U3RlcC5uYW1lIDogbnVsbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGVsZW1ldHJ5IHN0cmluZyB1c2VkIHRvIHBvcHVsYXRlIHRlbGVtZXRyeSBhY3Rpb24gZXZlbnRzLiBVcGRhdGVzIHdpemFyZCBzdGF0ZSwgc3RlcCBpbmRleCwgYW5kIHRpbWUgc3RlcCBpbmRleCBzdGFydGVkLlxyXG4gICAgICogU3RlcCBpbmRleCBzdGFydCB0aW1lIHNob3VsZCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggZXZlbnQgdGltZXN0YW1wIHRvIG1vcmUgZWFzaWx5IGNhbGN1bGF0ZSB0aW1lIHNwZW50IGluIHN0YWdlLlxyXG4gICAgICogQHBhcmFtIHN0YXRlIFRoZSBzdGF0ZSB0byBjaGFuZ2UgdG8sIGlmIHByb3ZpZGVkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHVwZGF0ZVRlbGVtZXRyeVRhZ3Moc3RhdGU/OiBXaXphcmRTdGF0ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZSA9IHN0YXRlID8gc3RhdGUgOiB0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGU7XHJcbiAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0ZXBJbmRleE51bWJlciA9IGAke3RoaXMuc3RhZ2VJbmRleCArIDF9LiR7dGhpcy5zdGVwSW5kZXggKyAxfWA7XHJcbiAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0ZXBOYW1lID0gYCR7dGhpcy5jdXJyZW50U3RhZ2UubmFtZX0uJHt0aGlzLmN1cnJlbnRTdGVwLm5hbWV9YDtcclxuICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RlcEluZGV4U3RhcnRUaW1lID0gKG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCk7IC8vIGtlZXAgc2FtZSBmb3JtYXQgYXMgZXZlbnQgdGltZXN0YW1wXHJcblxyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzbWUtd2l6YXJkIHNtZS1sYXlvdXQtYWJzb2x1dGUgc21lLWFycmFuZ2Utc3RhY2stdiBzbWUtcG9zaXRpb24taW5zZXQtbm9uZVwiPlxyXG4gIDwhLS0gSGVhZGluZyAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiaGVhZGluZyAmJiAhd2l6YXJkSXNGaW5pc2hlZFwiIFthdHRyLmFyaWEtcmVhZG9ubHldPXRydWVcclxuICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLWJvcmRlci1ib3R0b20tc20gc21lLWJvcmRlci1ib3R0b20tY29sb3ItYmFzZS04MFwiPlxyXG4gICAgPGgzIGlkPVwic21lLXNoZWxsLXdpemFyZC1oZWFkaW5nLWlkXCI+e3sgaGVhZGluZyB9fTwvaDM+XHJcbiAgICA8c21lLWJhZGdlIHR5cGU9XCJwcmV2aWV3XCIgKm5nSWY9XCJpc0luUHJldmlld1wiIGNsYXNzPVwic21lLW1hcmdpbi1sZWZ0LXhzXCI+PC9zbWUtYmFkZ2U+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gU3RhZ2VzIC0tPlxyXG4gIDxkaXYgcm9sZT1cInRhYmxpc3RcIiAqbmdJZj1cIiF3aXphcmRJc0ZpbmlzaGVkXCJcclxuICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLWJvcmRlci1ib3R0b20tc20gc21lLWJvcmRlci1ib3R0b20tY29sb3ItYmFzZS04MCBzbWUtZm9jdXMtem9uZVwiPlxyXG4gICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgc3RhZ2Ugb2Ygc3RhZ2VzOyBsZXQgdmFsID0gaW5kZXhcIlxyXG4gICAgICByb2xlPVwidGFiXCIgdGFiaW5kZXg9XCIwXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJzdGFnZS5uYW1lXCIgYXJpYS1saXZlPVwicG9saXRlXCIgdHlwZT1cImJ1dHRvblwiIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgW3NtZVRlbGVtZXRyeUlkXT1cIid3aXphcmRTdGFnZScgKyAodmFsICsgMSlcIlxyXG4gICAgICBbY2xhc3Muc21lLWFjdGl2ZV09XCJ2YWwgPT09IHN0YWdlc0FycmF5SW5kZXhcIlxyXG4gICAgICBbY2xhc3Muc21lLXNlbGVjdGVkXT1cInZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleFwiXHJcbiAgICAgIFtjbGFzcy5hcmlhLXNlbGVjdGVkXT1cInZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleFwiXHJcbiAgICAgIFtjbGFzcy5zbWUtd2l6YXJkLXN0YWdlLWZvY3VzXT1cInZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJ0aGlzLnN0YWdlSW5kZXhEaXNhYmxlZChzdGFnZSwgdmFsKVwiIFtzbWVUZWxlbWV0cnlEaXNhYmxlRWxlbWVudF0gPSBcInRoaXMuc3RhZ2VJbmRleERpc2FibGVkKHN0YWdlLCB2YWwpXCJcclxuICAgICAgY2xhc3M9XCJzbWUtd2l6YXJkLXN0YWdlIHNtZS1idXR0b24tdHJpZ2dlciBzbWUtd2l6YXJkLWJ1dHRvbi1pdGVtIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbm9uZSBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLW1hcmdpbi1yaWdodC1tZFwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsnc21lLXdpemFyZC1zdGFnZS1jb21wbGV0ZWQnOiBzdGFnZS5jb21wbGV0ZWQsICdzbWUtd2l6YXJkLXN0YWdlLWNsaWNrZWQnOiB2YWwgPT09IHN0YWdlc0FycmF5SW5kZXgsICdzbWUtd2l6YXJkLXN0YWdlLWFjdGl2ZSc6IHN0YWdlLmFjdGl2ZX1cIlxyXG4gICAgICAoY2xpY2spPVwib25TdGFnZUNsaWNrKHZhbClcIj5cclxuICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieydzbWUtaWNvbiBzbWUtaWNvbi1hY2NlcHQgc21lLWljb24tc2l6ZS14eHMnOiBzdGFnZS5jb21wbGV0ZWR9XCJcclxuICAgICAgICBjbGFzcz1cInNtZS13aXphcmQtc3RhZ2UtaW5kZXggc21lLXBvc2l0aW9uLWZsZXgtbm9uZVwiPlxyXG4gICAgICAgIHt7ICFzdGFnZS5jb21wbGV0ZWQgPyB2YWwgKyAxIDogJycgfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8c3BhblxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnc21lLWZvbnQtZW1waGFzaXMxIHNtZS13aXphcmQtc3RhZ2UtYWN0aXZlJzogdmFsID09PSBzdGFnZXNBcnJheUluZGV4IHx8IHN0YWdlLmFjdGl2ZSwgJ3NtZS13aXphcmQtc3RhZ2UtY29tcGxldGVkJzogc3RhZ2UuY29tcGxldGVkLCAnc21lLW1hcmdpbi1sZWZ0LXhzJzogIXN0YWdlLmNvbXBsZXRlZH1cIlxyXG4gICAgICAgIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtZm9udC1ib2R5XCI+XHJcbiAgICAgICAge3tzdGFnZS5uYW1lfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1hcnJhbmdlLW92ZXJmbG93LWF1dG8gc21lLXBvc2l0aW9uLWZsZXgtYXV0b1wiPlxyXG4gICAgPGRpdiAqbmdJZj1cIiF3aXphcmRJc0ZpbmlzaGVkICYmICFoaWRlU3RlcHNMaXN0U2lkZVBhbmVcIlxyXG4gICAgICBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLXYgc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtZm9jdXMtem9uZVxyXG4gICAgICBzbWUtYm9yZGVyLXJpZ2h0LXNtIHNtZS1ib3JkZXItcmlnaHQtY29sb3ItYmFzZS04MFwiPlxyXG4gICAgICA8ZGl2IHJvbGU9XCJ0YWJsaXN0XCIgKm5nSWY9XCIhd2l6YXJkSXNGaW5pc2hlZCAmJiAhaGlkZVN0ZXBzTGlzdFNpZGVQYW5lXCJcclxuICAgICAgICBjbGFzcz1cInNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtIHNtZS1wb3NpdGlvbi1mbGV4LWF1dG9cIiBbbmdDbGFzc109XCJ7J3NtZS1sYXlvdXQtbWlud2lkdGgtc20nOiBpc0V4cGFuZGVkfVwiPlxyXG4gICAgICAgIDxidXR0b24gcm9sZT1cInRhYlwiICpuZ0Zvcj1cImxldCBzdGVwIG9mIGdldFN0ZXBzRm9yU3RhZ2UoKTsgbGV0IGluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFtuZ0NsYXNzXT1cInsnc21lLXN0ZXAtYWN0aXZlIHNtZS1zY2hlbWUtbmF2LWxpc3QtaXRlbSBzbWUtYWN0aXZlIHNtZS1jb2xvci1iYXNlLTUnOiBpbmRleCA9PT0gc3RlcEluZGV4fVwiXHJcbiAgICAgICAgICBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWggc21lLXdpemFyZC1zdGVwIHNtZS1idXR0b24tdHJpZ2dlciBzbWUtd2l6YXJkLWJ1dHRvbi1pdGVtIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbm9uZVxyXG4gICAgICAgICAgc21lLXBvc2l0aW9uLXN0cmV0Y2gtaCBzbWUtcGFkZGluZy12ZXJ0aWNhbC14cyBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLXBhZGRpbmctbGVmdC1sZyBzbWUtcGFkZGluZy1yaWdodC14c1wiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidGhpcy5zdGVwSW5kZXhEaXNhYmxlZChzdGVwLCBpbmRleClcIiBbc21lVGVsZW1ldHJ5RGlzYWJsZUVsZW1lbnRdPVwidGhpcy5zdGVwSW5kZXhEaXNhYmxlZChzdGVwLCBpbmRleClcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU3RlcENsaWNrKGluZGV4KVwiIFxyXG4gICAgICAgICAgW3NtZVRlbGVtZXRyeURhdGFCbG9iXT1cInRlbGVtZXRyeURhdGFcIiBbc21lVGVsZW1ldHJ5SWRdPVwiJ3dpemFyZFN0ZXAnICsgKGluZGV4ICsgMSlcIlxyXG4gICAgICAgICAgW3RpdGxlXT1cImlzRXhwYW5kZWQgPyBudWxsIDogc3RlcC5uYW1lXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXNFeHBhbmRlZCA/IG51bGwgOiBzdGVwLm5hbWVcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiA+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLW1hcmdpbi1yaWdodC14c1wiPnt7IHN0YWdlc0FycmF5SW5kZXggKyAxIH19Lnt7IGluZGV4ICsgMSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZVwiICpuZ0lmPVwiaXNFeHBhbmRlZFwiPnt7IHN0ZXAubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1mb2N1cy16b25lXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJzcGxpdC12aWV3LXRvZ2dsZSBzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWxheW91dC1mbG9hdC1yaWdodFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFuZSgpXCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0V4cGFuZGVkXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXNFeHBhbmRlZCA/IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLmNvbGxhcHNlU3RlcHNMaXN0IDogc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuZXhwYW5kU3RlcHNMaXN0XCJcclxuICAgICAgICAgIFt0aXRsZV09XCJpc0V4cGFuZGVkID8gc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuY29sbGFwc2VTdGVwc0xpc3QgOiBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5leHBhbmRTdGVwc0xpc3RcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb25cIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzbWUtaWNvbi1jaGV2cm9uTGVmdCc6IGlzRXhwYW5kZWQsICdzbWUtaWNvbi1jaGV2cm9uUmlnaHQnOiAhaXNFeHBhbmRlZCB9XCI+PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gU3RlcCBjb250ZW50IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1mb2N1cy16b25lIHNtZS1sYXlvdXQtcmVsYXRpdmUgc21lLXBvc2l0aW9uLXN0cmV0Y2ggc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0b1wiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsnc21lLXBhZGRpbmctaW5zZXQtbGcnOiBjdXJyZW50U3RlcENvbXBvbmVudC5wYWRDb250ZW50c31cIj5cclxuICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnRTdGVwQ29tcG9uZW50LmRpc2FibGVkXCI+XHJcbiAgICAgICAgPHNtZS1wYWdlLWFsZXJ0LWJhciBbYWxlcnRdPVwiYWxlcnRcIj48L3NtZS1wYWdlLWFsZXJ0LWJhcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gRG9uJ3QgcmVtb3ZlIHRoaXMgbGluZSEgLS0+XHJcbiAgICAgIDwhLS0gVGhlIGR5bmFtaWNhbGx5IHJlbmRlcmVkIGNvbXBvbmVudCBsb29rcyBmb3IgI2NvbnRhaW5lciB0byByZW5kZXIgaXRzZWxmIGFzIHRoZSBzaWJsaW5nLiEgLS0+XHJcbiAgICAgIDxkaXYgaWQ9XCJkeW5hbWljLWNvbnRlbnQtY29udGFpbmVyXCIgI2NvbnRhaW5lcj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gRm9vdGVyIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCIhd2l6YXJkSXNGaW5pc2hlZFwiXHJcbiAgICBjbGFzcz1cInNtZS1sYXlvdXQtcmVsYXRpdmUgc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtYm9yZGVyLXRvcC1zbSBzbWUtYm9yZGVyLXRvcC1jb2xvci1iYXNlLTgwIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLWZvY3VzLXpvbmVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtbGF5b3V0LWZsb2F0LWxlZnRcIiBbY2xhc3Muc21lLXBhZGRpbmctcmlnaHQteGxdPVwiIXZhbGlkYXRpbmdcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInNtZS1mb2N1cy16b25lXCIgdHlwZT1cImJ1dHRvblwiIHNtZVRlbGVtZXRyeUlkPVwid2l6YXJkUHJldlwiIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgKGNsaWNrKT1cIm9uQmFja0NsaWNrKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZUJhY2tCdXR0b25cIlxyXG4gICAgICAgIFtjbGFzcy5zbWUtbGF5b3V0LW5vbmVdPVwiIWNhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXBcIj57e3N0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLmJhY2t9fTwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInNtZS1mb2N1cy16b25lIHNtZS1idXR0b24tcHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiBzbWVUZWxlbWV0cnlJZD1cIndpemFyZE5leHRcIiBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiIChjbGljayk9XCJvbk5leHRDbGljaygpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZU5leHRCdXR0b25cIiBbc21lVGVsZW1ldHJ5RGlzYWJsZUVsZW1lbnRdPVwiZGlzYWJsZU5leHRCdXR0b25cIj57eyBuZXh0QnV0dG9uVGV4dCgpIH19PC9idXR0b24+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJ2YWxpZGF0aW5nXCIgY2xhc3M9XCJzbWUtbGF5b3V0LXJlbGF0aXZlIHNtZS1sYXlvdXQtZmxvYXQtcmlnaHQgc21lLXBhZGRpbmctbGVmdC14bCBzbWUtcGFkZGluZy10b3AtbWRcIj5cclxuICAgICAgICA8c21lLWxvYWRpbmctd2hlZWwgc2l6ZT1cInNtYWxsXCI+PC9zbWUtbG9hZGluZy13aGVlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJzbWUtZm9jdXMtem9uZVwiIHR5cGU9XCJidXR0b25cIiBzbWVUZWxlbWV0cnlJZD1cIndpemFyZFNraXBcIiBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiIChjbGljayk9XCJvblNraXBDbGljaygpXCJcclxuICAgICAgW2NsYXNzLnNtZS1sYXlvdXQtbm9uZV09XCIhc2hvd1NraXBCdXR0b25cIj57e3N0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLnNraXB9fTwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInNtZS1mb2N1cy16b25lIHNtZS1sYXlvdXQtZmxvYXQtcmlnaHRcIiB0eXBlPVwiYnV0dG9uXCIgc21lVGVsZW1ldHJ5SWQ9XCJ3aXphcmRFeGl0XCIgW3NtZVRlbGVtZXRyeURhdGFCbG9iXT1cInRlbGVtZXRyeURhdGFcIlxyXG4gICAgICAoY2xpY2spPVwib25FeGl0Q2xpY2soKVwiPnt7IGV4aXRCdXR0b25UZXh0KCkgfX08L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
940
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3dpemFyZC93aXphcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvd2l6YXJkL3dpemFyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDMUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUN6RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrRUFBK0UsQ0FBQztBQUNySCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUsxRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFhLE1BQU0scUNBQXFDLENBQUM7QUFPckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7O0lDekIxRSxnQ0FBcUY7OztJQUh2RiwrQkFDNEo7SUFDMUosOEJBQXFDO0lBQUEsWUFBYTtJQUFBLGlCQUFLO0lB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SUFTYyxLQUFLO2tCQURmLEtBQUs7WUErQkMsYUFBYTtrQkFEbkIsS0FBSztZQWtFVSxXQUFXO2tCQUQxQixNQUFNO1lBT1MsSUFBSTtrQkFEbkIsTUFBTTtZQU9TLGFBQWE7a0JBRDVCLE1BQU07WUFPUyxXQUFXO2tCQUQxQixNQUFNO1lBT1MsZUFBZTtrQkFEOUIsTUFBTTtZQU9TLFFBQVE7a0JBRHZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSeGpzTGlmZXRpbWVNYW5hZ2VyIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL3J4anMtbGlmZXRpbWUtbWFuYWdlcic7XHJcbmltcG9ydCB7IExvZ2dpbmcgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RpYWdub3N0aWNzL2xvZ2dpbmcnO1xyXG5pbXBvcnQgeyBTbWVXZWJUZWxlbWV0cnkgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RpYWdub3N0aWNzL3NtZS13ZWItdGVsZW1ldHJ5JztcclxuaW1wb3J0IHsgVGVsZW1ldHJ5QWN0aW9uVHlwZXMgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RpYWdub3N0aWNzL3NtZS13ZWItdGVsZW1ldHJ5LW1vZGVscyc7XHJcbmltcG9ydCB7IEVudmlyb25tZW50TW9kdWxlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9tYW5pZmVzdC9lbnZpcm9ubWVudC1tb2R1bGVzJztcclxuaW1wb3J0IHtcclxuICAgIFJwY0RpYWxvZ0NvbmZpcm1hdGlvblJlcXVlc3QsXHJcbiAgICBScGNEaWFsb2dNZXNzYWdlUmVxdWVzdFxyXG59IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvcnBjL2RpYWxvZy9ycGMtZGlhbG9nLW1vZGVsJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU3RyaW5ncyB9IGZyb20gJy4uLy4uL2dlbmVyYXRlZC9TdHJpbmdzJztcclxuaW1wb3J0IHsgQXBwQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2FwcC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uL2NvbW1vbi9keW5hbWljLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEhlYWx0aEFsZXJ0U2V2ZXJpdHksIFBhZ2VBbGVydCB9IGZyb20gJy4uL3BhZ2UtYWxlcnQtYmFyL21vZGVscy9wYWdlLWFsZXJ0JztcclxuaW1wb3J0IHsgV2l6YXJkTW9kZWwgfSBmcm9tICcuL21vZGVscy93aXphcmQtbW9kZWwnO1xyXG5pbXBvcnQgeyBXaXphcmROYXZpZ2F0aW9uSW50ZXJmYWNlIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLW5hdmlnYXRpb24taW50ZXJmYWNlJztcclxuaW1wb3J0IHsgV2l6YXJkU3RhZ2UgfSBmcm9tICcuL21vZGVscy93aXphcmQtc3RhZ2UnO1xyXG5pbXBvcnQgeyBXaXphcmRTdGVwIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLXN0ZXAnO1xyXG5pbXBvcnQgeyBXaXphcmRTdGVwQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLXN0ZXAtY2hhbmdlZC1ldmVudCc7XHJcbmltcG9ydCB7IFdpemFyZFN0ZXBWYWxpZGF0aW9uIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLXN0ZXAtdmFsaWRhdGlvbic7XHJcbmltcG9ydCB7IFdpemFyZEJ1aWxkZXIgfSBmcm9tICcuL3dpemFyZC1idWlsZGVyJztcclxuaW1wb3J0IHsgV2l6YXJkTmF2aWdhdGlvbkluZm9ybWF0aW9uIH0gZnJvbSAnLi93aXphcmQtbmF2aWdhdGlvbi1pbmZvcm1hdGlvbic7XHJcbmltcG9ydCB7IEdlbmVyaWNXaXphcmRTdGVwQ29tcG9uZW50IH0gZnJvbSAnLi93aXphcmQtc3RlcC93aXphcmQtc3RlcC5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIFdoYXRldmVyIHN0YXRlIHRoZSB3aXphcmQgaXMgaW5cclxuICovXHJcbmVudW0gV2l6YXJkU3RhdGUge1xyXG4gICAgRXhpdCA9ICdFeGl0JyxcclxuICAgIEVudHJ5ID0gJ0VudHJ5JyxcclxuICAgIEZpbmlzaGVkID0gJ0ZpbmlzaGVkJyxcclxuICAgIEFjdGl2ZSA9ICdBY3RpdmUnXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEYXRhIHRvIGNvbGxlY3QgaW4gd2l6YXJkXHJcbiAqL1xyXG5jbGFzcyBXaXphcmRUZWxlbWV0cnlEYXRhIHtcclxuICAgIHN0ZXBJbmRleE51bWJlcjogc3RyaW5nO1xyXG4gICAgc3RlcE5hbWU6IHN0cmluZztcclxuICAgIHN0ZXBJbmRleFN0YXJ0VGltZTogc3RyaW5nO1xyXG4gICAgZW50cnlQb2ludD86IHN0cmluZztcclxuICAgIHdpemFyZFR5cGU/OiBzdHJpbmc7XHJcbiAgICB3aXphcmRJZD86IHN0cmluZztcclxuICAgIHN0YXRlPzogV2l6YXJkU3RhdGU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAc21lRG9jIHtAbGFiZWwgV2l6YXJkIEBpZCBzbWUtd2l6YXJkfVxyXG4gKlxyXG4gKiBAb3ZlcnZpZXdcclxuICogQGZpbGUge0BmaWxlcGF0aCAuL2V4YW1wbGVzL292ZXJ2aWV3Lm1kfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIEV4YW1wbGUgV2l6YXJkIEBpZCBzaW1wbGUtd2l6YXJkfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3dpemFyZC1leGFtcGxlLmNvbXBvbmVudC5odG1sfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy93aXphcmQtZXhhbXBsZS5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgZGF0YS1tb2RlbC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9leGFtcGxlLW1vZGVsLnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGZpbmlzaC1jb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZmluaXNoLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBmaW5pc2gtY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZmluaXNoLmNvbXBvbmVudC5odG1sfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIHNpbXBsZS1zdGF0aWMtdGV4dC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NpbXBsZS1zdGF0aWMtdGV4dC5jb21wb25lbnQuaHRtbH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBzaW1wbGUtc3RhdGljLXRleHQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2ltcGxlLXN0YXRpYy10ZXh0LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIHNpbXBsZS10ZXh0LWlucHV0LmNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NpbXBsZS10ZXh0LWlucHV0LmNvbXBvbmVudC5odG1sfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIHNpbXBsZS10ZXh0LWlucHV0LmNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9zaW1wbGUtdGV4dC1pbnB1dC5jb21wb25lbnQudHN9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBjb21wb25lbnQgY2xhc3MgZGVmaW5pdGlvbiBmb3IgdGhlIHdpemFyZCBjb21wb25lbnQuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLXdpemFyZCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vd2l6YXJkLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgV2l6YXJkQ29tcG9uZW50PFRNb2RlbCBleHRlbmRzIFdpemFyZE1vZGVsPlxyXG4gICAgZXh0ZW5kcyBEeW5hbWljQ29tcG9uZW50QmFzZTxHZW5lcmljV2l6YXJkU3RlcENvbXBvbmVudDxUTW9kZWw+PlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIFdpemFyZE5hdmlnYXRpb25JbnRlcmZhY2Uge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZGF0YSBtb2RlbCBmb3Igc2hhcmluZyBkYXRhIGFjcm9zcyB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBtb2RlbCh2YWx1ZTogVE1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbE1vZGVsID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQub25XaXphcmRNb2RlbENoYW5nZWQodGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZGF0YSBtb2RlbCBmb3Igc2hhcmluZyBkYXRhIGFjcm9zcyB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCk6IFRNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxNb2RlbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBiYWNraW5nIHN0b3JlIGZvciB0aGUgbW9kZWwgcHJvcGVydHlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbE1vZGVsOiBUTW9kZWw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBjb3B5IG9mIG1vZGVsIHRvIHJvbGxiYWNrIHRvIHdoZW4gdGhlXHJcbiAgICAgKiBjdXJyZW50IHN0ZXAgaXMgc2tpcHBlZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50U3RlcE1vZGVsQ29weTogVE1vZGVsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHdpemFyZEJ1aWxkZXIgdXNlZCB0byBpbnN0YW50aWF0ZSB0aGUga2V5IHdpemFyZCBwcm9wZXJ0aWVzLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHdpemFyZEJ1aWxkZXI6IFdpemFyZEJ1aWxkZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc3RhZ2VzIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGFnZXM6IFdpemFyZFN0YWdlW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaGVhZGluZyBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGVhZGluZzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRpdGxlIG9mIHRoZSBleGl0IGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGV4aXRCdXR0b25UaXRsZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRpdGxlIG9mIHRoZSBmaW5pc2ggYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmluaXNoQnV0dG9uVGl0bGU6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBmaW5pc2ggdmlldyBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmluaXNoVmlldzogV2l6YXJkU3RlcDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIHN0ZXBzIGxpc3Qgc2lkZSBwYW5lIHdpbGwgYmUgdmlzaWJsZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGhpZGVTdGVwc0xpc3RTaWRlUGFuZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgYSBjb25maXJtYXRpb24gZGlhbG9nIHdpbGwgYmUgc2hvd24gdXBvbiAnRXhpdCcgY2xpY2tlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGUgYXBwbGljYXRpb24gaXMgaW4gcHJldmlldy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzSW5QcmV2aWV3OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGUgd2l6YXJkIGNhbiBuYXZpZ2F0ZSB0byBhIHByZXZpb3VzIHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVsZW1ldHJ5IGRhdGEgY29sbGVjdGVkIHdoaWxlIG5hdmlnYXRpbmcgdGhyb3VnaCB3aXphcmQuIEJ5IGRlZmF1bHQsIHN0YXJ0IGF0IDEuMSBzdGVwIGluZGV4IGFuZFxyXG4gICAgICogRW50cnkgc3RhdGUuXHJcbiAgICAgKiBLZWVwIHNhbWUgZm9ybWF0IGFzIHRlbGVtZXRyeSBldmVudCB0aW1lc3RhbXBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHRlbGVtZXRyeURhdGE6IFdpemFyZFRlbGVtZXRyeURhdGEgPSB7XHJcbiAgICAgICAgc3RlcEluZGV4TnVtYmVyOiAnMS4xJyxcclxuICAgICAgICBzdGVwTmFtZTogJycsXHJcbiAgICAgICAgc3RlcEluZGV4U3RhcnRUaW1lOiAobmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcclxuICAgICAgICBlbnRyeVBvaW50OiBFbnZpcm9ubWVudE1vZHVsZS5jcmVhdGVFbnRyeXBvaW50SWQoTXNmdFNtZS5zZWxmKCkuSW5pdC5tb2R1bGVOYW1lLFxyXG4gICAgICAgICAgICBNc2Z0U21lLnNlbGYoKS5Jbml0LmVudHJ5UG9pbnROYW1lKSxcclxuICAgICAgICBzdGF0ZTogV2l6YXJkU3RhdGUuRW50cnlcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE9jY3VycyB3aGVuIHRoZSB3aXphcmQgbW9kZWwgY2hhbmdlc1xyXG4gICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VE1vZGVsPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyB3aGVuIHRoZSB3aXphcmQgaXMgZXhpdGVkLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBleGl0OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgd2hlbmV2ZXIgYSBzdGVwIGlzIHN1Ym1pdHRlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RlcFN1Ym1pdHRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW5ldmVyIGEgc3RlcCBpbmRleCBpcyBjaGFuZ2VkLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBzdGVwQ2hhbmdlZDogRXZlbnRFbWl0dGVyPFdpemFyZFN0ZXBDaGFuZ2VkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxXaXphcmRTdGVwQ2hhbmdlZEV2ZW50PigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW5ldmVyIHN0ZXAgdmFsaWRhdGlvbiBmYWlsc1xyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBzdGVwSW52YWxpZGF0ZWQ6IEV2ZW50RW1pdHRlcjxXaXphcmRTdGVwVmFsaWRhdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPFdpemFyZFN0ZXBWYWxpZGF0aW9uPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW4gdGhlIHdpemFyZCBpcyBmaW5pc2hlZFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBmaW5pc2hlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzb3VyY2Ugc3RyaW5ncyBmb3IgdGhlIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0cmluZ3M6IFN0cmluZ3MgPSBNc2Z0U21lLmdldFN0cmluZ3M8U3RyaW5ncz4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSB3aXphcmQgaXMgdmFsaWRhdGluZyBpbnB1dC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHZhbGlkYXRpbmc6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCBhbGwgb2YgdGhlIHdpemFyZCdzIHN0ZXBzIGFyZSBjb21wbGV0ZSAmICdGaW5pc2gnIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB3aXphcmRJc0ZpbmlzaGVkOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2l6YXJkIG5hdmlnYXRpb24gaW5mb3JtYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuYXZpZ2F0aW9uSW5mb3JtYXRpb246IFdpemFyZE5hdmlnYXRpb25JbmZvcm1hdGlvbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhbGVydCBmb3IgYSBkaXNhYmxlZCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWxlcnQ6IFBhZ2VBbGVydCA9IHtcclxuICAgICAgICBzZXZlcml0eTogSGVhbHRoQWxlcnRTZXZlcml0eS5JbmZvLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuZGlzYWJsZWRTdGVwQWxlcnQsXHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2lkZSBwYW5lIHRvZ2dsZSBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNFeHBhbmRlZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RhZ2UuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhZ2VJbmRleDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJ4anMgbGlmZXRpbWUgbWFuYWdlciBmb3IgdGhlIGN1cnJlbnQgc3RlcFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGN1cnJlbnRTdGVwUnhqc0xpZmV0aW1lOiBSeGpzTGlmZXRpbWVNYW5hZ2VyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFdpemFyZENvbXBvbmVudCBjbGFzcy5cclxuICAgICAqIEBwYXJhbSBhcHBDb250ZXh0IC0gVGhlIGFwcGxpY2F0aW9uIGNvbnRleHQgc2VydmljZSBjbGFzcy5cclxuICAgICAqIEBwYXJhbSBjaGFuZ2VEZXRlY3RvclJlZiAtIFRoZSBjaGFuZ2UgZGV0ZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0gY29tcG9uZW50RmFjdG9yeVJlc29sdmVyIC0gVGhlIGNvbXBvbmVudCBmYWN0b3J5IHJlc29sdmVyLlxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGFwcENvbnRleHQ6IEFwcENvbnRleHRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpO1xyXG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRNb2RlbD4oKTtcclxuICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgdGVsZW1ldHJ5IGV2ZW50IHN0cnVjdHVyZSBmb3Igd2l6YXJkIHRlbGVtZXRyeS4gVGhpcyBjYW4gYmUgdXNlZCBmb3IgYW55IGF1dG9tYXRpY1xyXG4gICAgICogYWN0aW9ucyBub3QgdHJpZ2dlcmVkIGJ5IGEgRE9NIGludGVyYWN0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHdpemFyZFRlbGVtZXRyeUV2ZW50QmxvYigpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IHdpemFyZFRlbGVtZXRyeUJhc2UgPSB7XHJcbiAgICAgICAgICAgIGNvbnRlbnRJZDogJ3NtZS13aXphcmQnLFxyXG4gICAgICAgICAgICBhcmVhTmFtZTogJ1dpemFyZENvbXBvbmVudCdcclxuICAgICAgICB9O1xyXG4gICAgICAgIE1zZnRTbWUuZGVlcEFzc2lnbih3aXphcmRUZWxlbWV0cnlCYXNlLCB0aGlzLnRlbGVtZXRyeURhdGEpO1xyXG4gICAgICAgIHJldHVybiB3aXphcmRUZWxlbWV0cnlCYXNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RhZ2Ugb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzdGFnZXNBcnJheUluZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhZ2VJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHN0ZXAgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzdGVwSW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RhZ2Ugb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjdXJyZW50U3RhZ2UoKTogV2l6YXJkU3RhZ2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YWdlc1t0aGlzLnN0YWdlc0FycmF5SW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBzdGVwIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFN0ZXAoKTogV2l6YXJkU3RlcCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzW3RoaXMuc3RlcEluZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGZpbmlzaCB2aWV3IG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZmluaXNoU3RlcCgpOiBXaXphcmRTdGVwIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hWaWV3O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBzdGVwcyBmb3IgdGhlIGN1cnJlbnQgc3RhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTdGVwc0ZvclN0YWdlKCk6IFdpemFyZFN0ZXBbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZHluYW1pY2FsbHkgcmVuZGVyZWQgY29tcG9uZW50IG9mIHRoZSBjdXJyZW50IHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFN0ZXBDb21wb25lbnQoKTogR2VuZXJpY1dpemFyZFN0ZXBDb21wb25lbnQ8VE1vZGVsPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmID8gdGhpcy5yZWYuaW5zdGFuY2UgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgb25MYXN0U3RlcE9mU3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzLmxlbmd0aCAtIDEgPT09IHRoaXMuc3RlcEluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgb25MYXN0U3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhZ2VzLmxlbmd0aCAtIDEgPT09IHRoaXMuc3RhZ2VJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG9uTGFzdFN0ZXBPZkxhc3RTdGFnZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbkxhc3RTdGFnZSAmJiB0aGlzLm9uTGFzdFN0ZXBPZlN0YWdlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBzdGFnZSBpcyBkaXNhYmxlZCBvciBub3QuXHJcbiAgICBwdWJsaWMgc3RhZ2VJbmRleERpc2FibGVkKHN0YWdlOiBXaXphcmRTdGFnZSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhc3RhZ2UuY29tcGxldGVkICYmIGluZGV4ICE9PSB0aGlzLnN0YWdlc0FycmF5SW5kZXggJiYgIXN0YWdlLmFjdGl2ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgc3RlcCBpcyBkaXNhYmxlZCBvciBub3QuXHJcbiAgICBwdWJsaWMgc3RlcEluZGV4RGlzYWJsZWQoc3RlcDogV2l6YXJkU3RlcCwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhc3RlcC5jb21wbGV0ZWQgJiYgaW5kZXggIT09IHRoaXMuc3RlcEluZGV4ICYmICFzdGVwLmRpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdGV4dCBmb3IgdGhlIG5leHQgYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmV4dEJ1dHRvblRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5zdGVwcy5sZW5ndGggLSAxID09PSB0aGlzLnN0ZXBJbmRleCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGFnZUluZGV4ID09PSB0aGlzLnN0YWdlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hCdXR0b25UaXRsZSA/IHRoaXMuZmluaXNoQnV0dG9uVGl0bGUgOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLmZpbmlzaDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLnN0YWdlTmFtZS5mb3JtYXQodGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4ICsgMV0ubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5uZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRleHQgZm9yIHRoZSBleGl0L2ZpbmlzaCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleGl0QnV0dG9uVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4aXRCdXR0b25UaXRsZSA/IHRoaXMuZXhpdEJ1dHRvblRpdGxlIDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5leGl0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBHZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgd2l6YXJkIGJ1dHRvbnNcclxuICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVCYWNrQnV0dG9uKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zdGFnZXNBcnJheUluZGV4ID09PSAwICYmIHRoaXMuc3RlcEluZGV4ID09PSAwKSB8fCB0aGlzLnZhbGlkYXRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkaXNhYmxlTmV4dEJ1dHRvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LnZhbGlkIHx8IHRoaXMudmFsaWRhdGluZyB8fCB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmlzQnVzeTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzaG93U2tpcEJ1dHRvbigpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlICYmIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuY2FuQmVTa2lwcGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RlcCBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHN0ZXBJbmRleCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTdGFnZS5zdGVwc1t2YWx1ZV0pIHtcclxuICAgICAgICAgICAgTG9nZ2luZy5sb2dFcnJvcignV2l6YXJkQ29tcG9uZW50LnN0ZXBJbmRleCBzZXR0ZXInLCAnQXR0ZW1wdGVkIHRvIHNldCBzdGVwSW5kZXggdG8gaW52YWxpZCB2YWx1ZS4nLCB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRJbmRleDogdmFsdWUsXHJcbiAgICAgICAgICAgICAgICBzdGVwczogdGhpcy5jdXJyZW50U3RhZ2Uuc3RlcHNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbmRleCA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbGVhbkNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFR5cGUgPSB0aGlzLmN1cnJlbnRTdGVwLmR5bmFtaWNTdGVwQ29tcG9uZW50O1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByZXNlcnZlTW9kZWxGb3JDdXJyZW50U3RlcCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGFnZSBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHN0YWdlc0FycmF5SW5kZXgodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghdGhpcy5zdGFnZXNbdmFsdWVdKSB7XHJcbiAgICAgICAgICAgIExvZ2dpbmcubG9nRXJyb3IoJ1dpemFyZENvbXBvbmVudC5zdGFnZVN0ZXBJbmRleCBzZXR0ZXInLCAnQXR0ZW1wdGVkIHRvIHNldCBzdGFnZXNBcnJheUluZGV4IHRvIGludmFsaWQgdmFsdWUuJywge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0SW5kZXg6IHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgc3RlcHM6IHRoaXMuc3RhZ2VzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBjdXJyZW50IHN0YWdlIG9mIHRoZSB3aXphcmQgYXMgY29tcGxldGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RhZ2Ugd2FzIGNvbXBsZXRlZCBhbmQgZmFsc2UgaWYgbm90LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29tcGxldGVDdXJyZW50U3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0YWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RhZ2UuY29tcGxldGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFya3MgdGhlIGN1cnJlbnQgc3RlcCBvZiB0aGUgd2l6YXJkIGFzIGNvbXBsZXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0ZXAgd2FzIGNvbXBsZXRlZCBhbmQgZmFsc2UgaWYgbm90LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29tcGxldGVDdXJyZW50U3RlcCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCAmJiAhdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RlcC5jb21wbGV0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrcyB0aGUgY3VycmVudCBzdGVwIG9mIHRoZSB3aXphcmQgYXMgaW5jb21wbGV0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdGVwIHdhcyBmYWlsZWQgYW5kIGZhbHNlIGlmIG5vdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZhaWxDdXJyZW50U3RlcCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmZhaWwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAhdGhpcy5jdXJyZW50U3RlcC5jb21wbGV0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlcyB0aGUgd2l6YXJkIHRvIHRoZSBuZXh0IHZpc2libGUgc3RlcCBpbiB0aGUgbGlzdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1vdmVUb05leHRTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVUb05leHRTdGVwKCk7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9uTGFzdFN0ZXBPZkxhc3RTdGFnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5pc2hOYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTmV4dFN0ZXAoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGUgPT09IFdpemFyZFN0YXRlLkVudHJ5KSB7XHJcbiAgICAgICAgICAgIC8vIFN3aXRjaCB0byBhY3RpdmUgYWZ0ZXIgb3VyIGZpcnN0IG1vdmUgdG8gbmV4dCBvciBwcmV2aW91cyBzdGVwXHJcbiAgICAgICAgICAgIC8vIE1hbnVhbGx5IGNhbGwgaXQgaGVyZSBiL2Mgc29tZSBtb2R1bGVzIHdpbGwgdXBkYXRlIHN0ZXBJbmRleCBhZnRlciBsb2FkaW5nLCB3aGljaCB0cmlnZ2VycyBlbWl0U3RlcENoYW5nZWQuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGVsZW1ldHJ5VGFncyhXaXphcmRTdGF0ZS5BY3RpdmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0aGUgaW5kZXhpbmcgZm9yIG1vdmluZyB0byB0aGUgbmV4dCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmF2aWdhdGVUb05leHRTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5vbkxhc3RTdGVwT2ZTdGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCsrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub25MYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4Kys7XHJcblxyXG4gICAgICAgICAgICB3aGlsZSAodGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5zdGVwcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleCsrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdFN0ZXBDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlcyB0aGUgd2l6YXJkIHRvIHRoZSBwcmV2aW91cyAodmlzaWJsZSkgc3RlcCBpbiB0aGUgbGlzdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1vdmVUb1ByZXZpb3VzU3RlcCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRlVG9QcmV2aW91c1N0ZXAoKTtcclxuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9QcmV2aW91c1N0ZXAoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZSA9PT0gV2l6YXJkU3RhdGUuRW50cnkpIHtcclxuICAgICAgICAgICAgLy8gU3dpdGNoIHRvIGFjdGl2ZSBhZnRlciBvdXIgZmlyc3QgbW92ZSB0byBuZXh0IG9yIHByZXZpb3VzIHN0ZXBcclxuICAgICAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0YXRlID0gV2l6YXJkU3RhdGUuQWN0aXZlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgdGhlIGluZGV4aW5nIGZvciBtb3ZpbmcgYmFjayB0byBsYXN0IHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuYXZpZ2F0ZVRvUHJldmlvdXNTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnN0ZXBJbmRleCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGFnZUluZGV4ICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWdlc1t0aGlzLnN0YWdlSW5kZXhdLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4LS07XHJcblxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleF0uc3RlcHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4LS07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXggPSB0aGlzLnN0YWdlc1t0aGlzLnN0YWdlSW5kZXhdLnN0ZXBzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWdlc1t0aGlzLnN0YWdlSW5kZXhdLmNvbXBsZXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXgtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogVGhlIG1ldGhvZCB0aGF0IGZvY3VzZXMgb24gYW4gYWN0aXZlIHN0ZXAgb3Igc3RhZ2VcclxuICAgICovXHJcblxyXG4gICAgcHJpdmF0ZSBmb2N1c09uQWN0aXZlU3RlcCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuaGlkZVN0ZXBzTGlzdFNpZGVQYW5lID8gJ3NtZS13aXphcmQtc3RhZ2UtZm9jdXMnIDogJ3NtZS1zdGVwLWFjdGl2ZSc7XHJcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShzZWxlY3Rvcik7XHJcbiAgICAgICAgaWYgKGZvY3VzYWJsZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICg8SFRNTElucHV0RWxlbWVudD5mb2N1c2FibGVbMF0pLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0byBydW4gd2hlbiB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxpemVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uSW5mb3JtYXRpb24gPSBuZXcgV2l6YXJkTmF2aWdhdGlvbkluZm9ybWF0aW9uKHRoaXMsIHRoaXMud2l6YXJkQnVpbGRlcik7XHJcbiAgICAgICAgdGhpcy5zdGFnZXMgPSB0aGlzLndpemFyZEJ1aWxkZXIuc3RhZ2VzO1xyXG4gICAgICAgIHRoaXMuaGVhZGluZyA9IHRoaXMud2l6YXJkQnVpbGRlci5oZWFkaW5nO1xyXG4gICAgICAgIHRoaXMuZXhpdEJ1dHRvblRpdGxlID0gdGhpcy53aXphcmRCdWlsZGVyLmV4aXRCdXR0b25UaXRsZTtcclxuICAgICAgICB0aGlzLmZpbmlzaEJ1dHRvblRpdGxlID0gdGhpcy53aXphcmRCdWlsZGVyLmZpbmlzaEJ1dHRvblRpdGxlO1xyXG4gICAgICAgIHRoaXMuZmluaXNoVmlldyA9IHRoaXMud2l6YXJkQnVpbGRlci5maW5pc2hWaWV3O1xyXG4gICAgICAgIHRoaXMuaGlkZVN0ZXBzTGlzdFNpZGVQYW5lID0gdGhpcy53aXphcmRCdWlsZGVyLmhpZGVTdGVwc0xpc3RTaWRlUGFuZTtcclxuICAgICAgICB0aGlzLnNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nID0gdGhpcy53aXphcmRCdWlsZGVyLnNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nO1xyXG4gICAgICAgIHRoaXMuaXNJblByZXZpZXcgPSB0aGlzLndpemFyZEJ1aWxkZXIuaXNJblByZXZpZXdTdGF0ZTtcclxuICAgICAgICB0aGlzLmNhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXAgPSB0aGlzLndpemFyZEJ1aWxkZXIuY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcDtcclxuICAgICAgICB0aGlzLnN0YWdlc0FycmF5SW5kZXggPSAwO1xyXG4gICAgICAgIHRoaXMuc3RlcEluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YWdlcykge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZ0Vycm9yKCdXaXphcmRDb21wb25lbnQubmdPbkluaXQnLCBgVGhlICdzdGFnZXMnIGFycmF5IGlzIG5vdCB2YWxpZCEuYCwge1xyXG4gICAgICAgICAgICAgICAgc3RlcHM6IHRoaXMuc3RhZ2VzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsKSB7XHJcbiAgICAgICAgICAgIExvZ2dpbmcubG9nRXJyb3IoJ1dpemFyZENvbXBvbmVudC5uZ09uSW5pdCcsIGBUaGUgJ21vZGVsJyBhdHRyaWJ1dGUgaXMgbm90IHZhbGlkLmAsIHtcclxuICAgICAgICAgICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy53aXphcmRJc0ZpbmlzaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhZ2UuYWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsbGVkTW9kZWwgPSB0aGlzLmludGVybmFsTW9kZWwgYXMgYW55O1xyXG4gICAgICAgIGlmIChmaWxsZWRNb2RlbC53aXphcmRJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEud2l6YXJkSWQgPSBmaWxsZWRNb2RlbC53aXphcmRJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbGxlZE1vZGVsLndpemFyZFR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLndpemFyZFR5cGUgPSBmaWxsZWRNb2RlbC53aXphcmRUeXBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uSW5mb3JtYXRpb24ucmVzZXRIaXN0b3J5KCk7XHJcbiAgICAgICAgLy8gdXBkYXRlIGhlcmUgZmlyc3QgdG8gZ2V0IHVwZGF0ZWQgdGVsZW1ldHJ5IGluZm9cclxuICAgICAgICB0aGlzLnVwZGF0ZVRlbGVtZXRyeVRhZ3MoKTtcclxuXHJcbiAgICAgICAgU21lV2ViVGVsZW1ldHJ5LnRyYWNlQWN0aW9uKG51bGwsIHsgY29udGVudDogdGhpcy53aXphcmRUZWxlbWV0cnlFdmVudEJsb2IsIGFjdGlvblR5cGU6IFRlbGVtZXRyeUFjdGlvblR5cGVzLkF1dG9tYXRpYyB9KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVRlbGVtZXRyeVRhZ3MoV2l6YXJkU3RhdGUuQWN0aXZlKTtcclxuXHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50ZWxlbWV0cnlEYXRhLnN0YXRlICE9PSBXaXphcmRTdGF0ZS5GaW5pc2hlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gbWFudWFsbHkgc2V0IGF0IHRoaXMgcG9pbnQgYi9jIHZpZXcgaXMgZGVzdHJ1Y3RlZC5cclxuICAgICAgICAgICAgICAgIHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZSA9IFdpemFyZFN0YXRlLkV4aXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gYWN0aW9uVHlwZSBBIGZvciBBdXRvIChhY2NvcmRpbmcgdG8gQVdBIGRpY3Rpb25hcnkpIHRvIGRpZmZlcmVudGlhdGUgZnJvbSBDTFxyXG4gICAgICAgICAgICBTbWVXZWJUZWxlbWV0cnkudHJhY2VBY3Rpb24obnVsbCwgeyBjb250ZW50OiB0aGlzLndpemFyZFRlbGVtZXRyeUV2ZW50QmxvYiwgYWN0aW9uVHlwZTogVGVsZW1ldHJ5QWN0aW9uVHlwZXMuQXV0b21hdGljIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiBvciBjbG9zZSBzaWRlIHBhbmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvZ2dsZVBhbmUoKSB7XHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIGJhY2sgYnV0dG9uIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkJhY2tDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dEaWFsb2dJZkJ1c3lPckp1c3RDb21wbGV0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhZ2UuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3ZlVG9QcmV2aW91c1N0ZXAoKTtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c09uQWN0aXZlU3RlcCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgc2tpcCBidXR0b24gaXMgY2xpY2tlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uU2tpcENsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2hvd0RpYWxvZ0lmQnVzeU9ySnVzdENvbXBsZXRlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXN0b3JlTW9kZWxGb3JDdXJyZW50U3RlcCgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vbkxhc3RTdGVwT2ZMYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmluaXNoTmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOZXh0TmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBFeGl0IC8gRmluaXNoIGJ1dHRvbiBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25FeGl0Q2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0V4aXRDb25maXJtYXRpb25EaWFsb2cpIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBDb250ZXh0LmZyYW1lLnNob3dEaWFsb2dDb25maXJtYXRpb24oPFJwY0RpYWxvZ0NvbmZpcm1hdGlvblJlcXVlc3Q+e1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5ubyxcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLnllcyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuRXhpdC5EaWFsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkV4aXQuRGlhbG9nLnRpdGxlXHJcbiAgICAgICAgICAgIH0pLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNvbmZpcm1lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpdC5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhpdC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IGhhbmRsZXMgY29tcGxldGlvbiBvZiB0aGUgd2l6YXJkLFxyXG4gICAgICogYW5kIHJlbmRlcnMgdGhlIGZpbmlzaFZpZXcgaWYgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaGFuZGxlRmluaXNoTmF2aWdhdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbXBsZXRlQ3VycmVudFN0ZXAoKTtcclxuICAgICAgICB0aGlzLmNvbXBsZXRlQ3VycmVudFN0YWdlKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUZWxlbWV0cnlUYWdzKFdpemFyZFN0YXRlLkZpbmlzaGVkKTtcclxuXHJcbiAgICAgICAgdGhpcy5maW5pc2hlZC5lbWl0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZmluaXNoVmlldykge1xyXG4gICAgICAgICAgICB0aGlzLndpemFyZElzRmluaXNoZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbGVhbkNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFR5cGUgPSB0aGlzLmZpbmlzaFZpZXcuZHluYW1pY1N0ZXBDb21wb25lbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIG5leHQgYnV0dG9uIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbk5leHRDbGljaygpOiB2b2lkIHtcclxuICAgICAgICAvLyBpZiBmaW5pc2hpbmdcclxuICAgICAgICBpZiAodGhpcy5vbkxhc3RTdGVwT2ZMYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTdGVwLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJ1blN0ZXBWYWxpZGF0aW9uKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpbmlzaE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5TdGVwVmFsaWRhdGlvbigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOZXh0TmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcFN1Ym1pdHRlZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IHZhbGlkYXRlcyBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJ1blN0ZXBWYWxpZGF0aW9uKCkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC52YWxpZGF0ZSgpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAodmFsaWRhdGlvblJlc3VsdDogV2l6YXJkU3RlcFZhbGlkYXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmlzVmFsaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vbkxhc3RTdGVwT2ZMYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5pc2hOYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOZXh0TmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWlsQ3VycmVudFN0ZXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBJbnZhbGlkYXRlZC5lbWl0KHZhbGlkYXRpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IGhhbmRsZXMgaW5kZXhlcyBhbmRcclxuICAgICAqIHN0ZXAgYW5kIHN0YWdlIGNvbXBsZXRpb24gZm9yIHRoZSBOZXh0IGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoYW5kbGVOZXh0TmF2aWdhdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbXBsZXRlQ3VycmVudFN0ZXAoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mU3RhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZUN1cnJlbnRTdGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1vdmVUb05leHRTdGVwKCk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhZ2UuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvY3VzT25BY3RpdmVTdGVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93UHJldmlvdXNTdGVwRGlhbG9nKCkge1xyXG4gICAgICAgIHRoaXMuYXBwQ29udGV4dC5mcmFtZS5zaG93RGlhbG9nTWVzc2FnZSg8UnBjRGlhbG9nTWVzc2FnZVJlcXVlc3Q+e1xyXG4gICAgICAgICAgICBidXR0b25UZXh0OiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLk9LLmFmZmlybWF0aXZlLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLlByZXZpb3VzU3RlcC5EaWFsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuUHJldmlvdXNTdGVwLkRpYWxvZy50aXRsZVxyXG4gICAgICAgIH0pLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93RGlhbG9nSWZCdXN5T3JKdXN0Q29tcGxldGUob25Db25maXJtYXRpb25DYWxsYmFjazogKCkgPT4gdm9pZCkge1xyXG4gICAgICAgIGNvbnN0IGlzQnVzeSA9IHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuaXNCdXN5O1xyXG4gICAgICAgIGNvbnN0IGJ1c3lNZXNzYWdlID0gdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5idXN5TWVzc2FnZTtcclxuICAgICAgICBpZiAoaXNCdXN5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwQ29udGV4dC5mcmFtZS5zaG93RGlhbG9nQ29uZmlybWF0aW9uKDxScGNEaWFsb2dDb25maXJtYXRpb25SZXF1ZXN0PntcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24ubm8sXHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi55ZXMsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBidXN5TWVzc2FnZSA/IGJ1c3lNZXNzYWdlIDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5CdXN5LkRpYWxvZy5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuQnVzeS5EaWFsb2cudGl0bGVcclxuICAgICAgICAgICAgfSkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb25maXJtZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtYXRpb25DYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9uQ29uZmlybWF0aW9uQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIGEgc3RhZ2UgaXMgY2xpY2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY2xpY2tlZFN0ZXBJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgY2xpY2tlZCBzdGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uU3RhZ2VDbGljayhjbGlja2VkU3RhZ2VJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0U3RhZ2UgPSB0aGlzLnN0YWdlc1tjbGlja2VkU3RhZ2VJbmRleF07XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXAgJiYgY2xpY2tlZFN0YWdlSW5kZXggPD0gdGhpcy5zdGFnZUluZGV4KSB7XHJcbiAgICAgICAgICAgIC8vIHNob3cgZGlhbG9nIHdoZW4gb25seSBjbGlja2luZyBhIHByZXZpb3VzIHN0YWdlXHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRTdGFnZS5jb21wbGV0ZWQgJiYgdGhpcy5zdGFnZUluZGV4ICE9PSBjbGlja2VkU3RhZ2VJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UHJldmlvdXNTdGVwRGlhbG9nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFN0YWdlLmNvbXBsZXRlZCB8fCB0YXJnZXRTdGFnZS5hY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93RGlhbG9nSWZCdXN5T3JKdXN0Q29tcGxldGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4ID0gY2xpY2tlZFN0YWdlSW5kZXg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5jb21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YWdlSW5kZXggKyAxOyBpIDwgdGhpcy5zdGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWdlc1tpXS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWdlc1tpXS5jb21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiBhIHN0ZXAgaXMgY2xpY2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY2xpY2tlZFN0ZXBJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgY2xpY2tlZCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25TdGVwQ2xpY2soY2xpY2tlZFN0ZXBJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc3RlcElzQWN0aXZlID0gdGhpcy5zdGVwSW5kZXggPT09IGNsaWNrZWRTdGVwSW5kZXg7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0U3RlcCA9IHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzW2NsaWNrZWRTdGVwSW5kZXhdO1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwICYmIGNsaWNrZWRTdGVwSW5kZXggPD0gdGhpcy5zdGVwSW5kZXgpIHtcclxuICAgICAgICAgICAgLy8gc2hvdyBkaWFsb2cgd2hlbiBvbmx5IGNsaWNraW5nIGEgcHJldmlvdXMgc3RlcFxyXG4gICAgICAgICAgICBpZiAoIXN0ZXBJc0FjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UHJldmlvdXNTdGVwRGlhbG9nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0U3RlcCAmJiAhc3RlcElzQWN0aXZlICYmICh0YXJnZXRTdGVwLmNvbXBsZXRlZCB8fCB0YXJnZXRTdGVwLmRpc2FibGVkKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RGlhbG9nSWZCdXN5T3JKdXN0Q29tcGxldGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IGNsaWNrZWRTdGVwSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBjcmVhdGVDb21wb25lbnQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCh0aGlzLmN1cnJlbnRTdGVwIHx8IHRoaXMuZmluaXNoU3RlcCkgJiYgKCF0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50KSkge1xyXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVDb21wb25lbnQoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcFJ4anNMaWZldGltZSA9IG5ldyBSeGpzTGlmZXRpbWVNYW5hZ2VyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBSeGpzTGlmZXRpbWUuYWRkU3Vic2NyaXB0aW9ucyhcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuc3VibWl0dGVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uTmV4dENsaWNrKCkpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5tb2RlbENoYW5nZWQuc3Vic2NyaWJlKG5ld1ZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsTW9kZWwgPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50Lm9uV2l6YXJkTW9kZWxDaGFuZ2VkKHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY2xlYW5Db21wb25lbnQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIuY2xlYW5Db21wb25lbnQoKTtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcFJ4anNMaWZldGltZSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwUnhqc0xpZmV0aW1lLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcFJ4anNMaWZldGltZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZXMgdGhlIHN0YXRlIG9mIHRoZSBtb2RlbCBhdCB0aGUgYmVnaW5uaW5nXHJcbiAgICAgKiBvZiB0aGUgY3VycmVudCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHByZXNlcnZlTW9kZWxGb3JDdXJyZW50U3RlcCgpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwTW9kZWxDb3B5ID0gTXNmdFNtZS5kZWVwQ29weSh0aGlzLmludGVybmFsTW9kZWwgfHwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXRzIHRoZSBtb2RlbCBiYWNrIHRvIHRoZSBzdGF0ZSBhdCB0aGVcclxuICAgICAqIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlc3RvcmVNb2RlbEZvckN1cnJlbnRTdGVwKCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLmN1cnJlbnRTdGVwTW9kZWxDb3B5O1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0ZXBNb2RlbENvcHkgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZW1pdFN0ZXBDaGFuZ2VkKCkge1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLm5hdmlnYXRpb25JbmZvcm1hdGlvbi5wdXNoSGlzdG9yeSh7IHN0YWdlOiB0aGlzLnN0YWdlSW5kZXgsIHN0ZXA6IHRoaXMuc3RlcEluZGV4IH0pO1xyXG5cclxuICAgICAgICAvLyBlbWl0IG9ubHkgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZS5cclxuICAgICAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRlbGVtZXRyeVRhZ3MoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RlcENoYW5nZWQuZW1pdCh7XHJcbiAgICAgICAgICAgICAgICBzdGFnZUluZGV4OiB0aGlzLnN0YWdlSW5kZXgsXHJcbiAgICAgICAgICAgICAgICBzdGFnZU5hbWU6IHRoaXMuY3VycmVudFN0YWdlID8gdGhpcy5jdXJyZW50U3RhZ2UubmFtZSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzdGVwSW5kZXg6IHRoaXMuc3RlcEluZGV4LFxyXG4gICAgICAgICAgICAgICAgc3RlcE5hbWU6IHRoaXMuY3VycmVudFN0ZXAgPyB0aGlzLmN1cnJlbnRTdGVwLm5hbWUgOiBudWxsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0ZWxlbWV0cnkgc3RyaW5nIHVzZWQgdG8gcG9wdWxhdGUgdGVsZW1ldHJ5IGFjdGlvbiBldmVudHMuIFVwZGF0ZXMgd2l6YXJkIHN0YXRlLCBzdGVwIGluZGV4LCBhbmQgdGltZSBzdGVwIGluZGV4IHN0YXJ0ZWQuXHJcbiAgICAgKiBTdGVwIGluZGV4IHN0YXJ0IHRpbWUgc2hvdWxkIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBldmVudCB0aW1lc3RhbXAgdG8gbW9yZSBlYXNpbHkgY2FsY3VsYXRlIHRpbWUgc3BlbnQgaW4gc3RhZ2UuXHJcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIHN0YXRlIHRvIGNoYW5nZSB0bywgaWYgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlVGVsZW1ldHJ5VGFncyhzdGF0ZT86IFdpemFyZFN0YXRlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0YXRlID0gc3RhdGUgPyBzdGF0ZSA6IHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZTtcclxuICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RlcEluZGV4TnVtYmVyID0gYCR7dGhpcy5zdGFnZUluZGV4ICsgMX0uJHt0aGlzLnN0ZXBJbmRleCArIDF9YDtcclxuICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RlcE5hbWUgPSBgJHt0aGlzLmN1cnJlbnRTdGFnZS5uYW1lfS4ke3RoaXMuY3VycmVudFN0ZXAubmFtZX1gO1xyXG4gICAgICAgIHRoaXMudGVsZW1ldHJ5RGF0YS5zdGVwSW5kZXhTdGFydFRpbWUgPSAobmV3IERhdGUoKSkudG9JU09TdHJpbmcoKTsgLy8ga2VlcCBzYW1lIGZvcm1hdCBhcyBldmVudCB0aW1lc3RhbXBcclxuXHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInNtZS13aXphcmQgc21lLWxheW91dC1hYnNvbHV0ZSBzbWUtYXJyYW5nZS1zdGFjay12IHNtZS1wb3NpdGlvbi1pbnNldC1ub25lXCIgc21lVGVsZW1ldHJ5SWQ9J3NtZS13aXphcmQnIHNtZVRlbGVtZXRyeUFyZWE9XCJXaXphcmRDb21wb25lbnRcIj5cclxuICA8IS0tIEhlYWRpbmcgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImhlYWRpbmcgJiYgIXdpemFyZElzRmluaXNoZWRcIiBbYXR0ci5hcmlhLXJlYWRvbmx5XT10cnVlXHJcbiAgICBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWggc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtcGFkZGluZy12ZXJ0aWNhbC1zbSBzbWUtcGFkZGluZy1ob3Jpem9udGFsLWxnIHNtZS1ib3JkZXItYm90dG9tLXNtIHNtZS1ib3JkZXItYm90dG9tLWNvbG9yLWJhc2UtODBcIj5cclxuICAgIDxoMyBpZD1cInNtZS1zaGVsbC13aXphcmQtaGVhZGluZy1pZFwiPnt7IGhlYWRpbmcgfX08L2gzPlxyXG4gICAgPHNtZS1iYWRnZSB0eXBlPVwicHJldmlld1wiICpuZ0lmPVwiaXNJblByZXZpZXdcIiBjbGFzcz1cInNtZS1tYXJnaW4tbGVmdC14c1wiPjwvc21lLWJhZGdlPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIFN0YWdlcyAtLT5cclxuICA8dWwgcm9sZT1cInRhYmxpc3RcIiAqbmdJZj1cIiF3aXphcmRJc0ZpbmlzaGVkXCJcclxuICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLWJvcmRlci1ib3R0b20tc20gc21lLWJvcmRlci1ib3R0b20tY29sb3ItYmFzZS04MCBzbWUtZm9jdXMtem9uZVwiPlxyXG4gICAgPGxpXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsnc21lLXdpemFyZC1zdGFnZS1jb21wbGV0ZWQnOiBzdGFnZS5jb21wbGV0ZWQsICdzbWUtd2l6YXJkLXN0YWdlLWNsaWNrZWQnOiB2YWwgPT09IHN0YWdlc0FycmF5SW5kZXgsICdzbWUtd2l6YXJkLXN0YWdlLWFjdGl2ZSc6IHN0YWdlLmFjdGl2ZSwgJ3NtZS1kaXNhYmxlZCc6IHZhbCAhPT0gc3RhZ2VzQXJyYXlJbmRleH1cIlxyXG4gICAgICBjbGFzcz1cInNtZS13aXphcmQtc3RhZ2Ugc21lLWFycmFuZ2Utc3RhY2staCBzbWUtbWFyZ2luLXJpZ2h0LW1kXCIgcm9sZT1cInRhYlwiXHJcbiAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwidmFsID09PSBzdGFnZXNBcnJheUluZGV4XCJcclxuICAgICAgKm5nRm9yPVwibGV0IHN0YWdlIG9mIHN0YWdlczsgbGV0IHZhbCA9IGluZGV4XCIgKGNsaWNrKT1cIm9uU3RhZ2VDbGljayh2YWwpXCI+XHJcbiAgICAgIDxidXR0b24gdGFiaW5kZXg9XCIwXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJzdGFnZS5uYW1lXCIgYXJpYS1saXZlPVwicG9saXRlXCIgdHlwZT1cImJ1dHRvblwiIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgW3NtZVRlbGVtZXRyeUlkXT1cIid3aXphcmRTdGFnZScgKyAodmFsICsgMSlcIlxyXG4gICAgICAgIFtjbGFzcy5zbWUtYWN0aXZlXT1cInZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleFwiXHJcbiAgICAgICAgW2NsYXNzLnNtZS1zZWxlY3RlZF09XCJ2YWwgPT09IHN0YWdlc0FycmF5SW5kZXhcIlxyXG4gICAgICAgIFtjbGFzcy5zbWUtd2l6YXJkLXN0YWdlLWZvY3VzXT1cInZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleFwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cInRoaXMuc3RhZ2VJbmRleERpc2FibGVkKHN0YWdlLCB2YWwpXCIgW3NtZVRlbGVtZXRyeURpc2FibGVFbGVtZW50XSA9IFwidGhpcy5zdGFnZUluZGV4RGlzYWJsZWQoc3RhZ2UsIHZhbClcIlxyXG4gICAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS13aXphcmQtYnV0dG9uLWl0ZW0gc21lLXBhZGRpbmctdmVydGljYWwtc20gc21lLXBhZGRpbmctaG9yaXpvbnRhbC1ub25lIHNtZS1idXR0b24tYXV0by13aWR0aFwiPlxyXG4gICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInsnc21lLWljb24gc21lLWljb24tYWNjZXB0IHNtZS1pY29uLXNpemUteHhzJzogc3RhZ2UuY29tcGxldGVkfVwiXHJcbiAgICAgICAgICBjbGFzcz1cInNtZS13aXphcmQtc3RhZ2UtaW5kZXggc21lLXBvc2l0aW9uLWZsZXgtbm9uZVwiPlxyXG4gICAgICAgICAge3sgIXN0YWdlLmNvbXBsZXRlZCA/IHZhbCArIDEgOiAnJyB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c3BhblxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydzbWUtZm9udC1lbXBoYXNpczEgc21lLXdpemFyZC1zdGFnZS1hY3RpdmUnOiB2YWwgPT09IHN0YWdlc0FycmF5SW5kZXggfHwgc3RhZ2UuYWN0aXZlLCAnc21lLXdpemFyZC1zdGFnZS1jb21wbGV0ZWQnOiBzdGFnZS5jb21wbGV0ZWQsICdzbWUtbWFyZ2luLWxlZnQteHMnOiAhc3RhZ2UuY29tcGxldGVkfVwiXHJcbiAgICAgICAgICBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLWZvbnQtYm9keVwiPlxyXG4gICAgICAgICAge3tzdGFnZS5uYW1lfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9saT5cclxuICA8L3VsPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtYXJyYW5nZS1vdmVyZmxvdy1hdXRvIHNtZS1wb3NpdGlvbi1mbGV4LWF1dG9cIj5cclxuICAgIDxkaXYgKm5nSWY9XCIhd2l6YXJkSXNGaW5pc2hlZCAmJiAhaGlkZVN0ZXBzTGlzdFNpZGVQYW5lXCJcclxuICAgICAgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay12IHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWZvY3VzLXpvbmVcclxuICAgICAgc21lLWJvcmRlci1yaWdodC1zbSBzbWUtYm9yZGVyLXJpZ2h0LWNvbG9yLWJhc2UtODBcIj5cclxuICAgICAgPHVsIHJvbGU9XCJ0YWJsaXN0XCIgKm5nSWY9XCIhd2l6YXJkSXNGaW5pc2hlZCAmJiAhaGlkZVN0ZXBzTGlzdFNpZGVQYW5lXCJcclxuICAgICAgICBjbGFzcz1cInNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtIHNtZS1wb3NpdGlvbi1mbGV4LWF1dG9cIiBbbmdDbGFzc109XCJ7J3NtZS1sYXlvdXQtbWlud2lkdGgtc20nOiBpc0V4cGFuZGVkfVwiPlxyXG4gICAgICAgIDxsaSByb2xlPVwidGFiXCIgdGFiaW5kZXg9XCIwXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc21lLXNjaGVtZS1uYXYtbGlzdC1pdGVtIHNtZS1hY3RpdmUgc21lLWNvbG9yLWJhc2UtNSc6IGluZGV4ID09PSBzdGVwSW5kZXh9XCJcclxuICAgICAgICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtcGFkZGluZy1sZWZ0LWxnIHNtZS1wYWRkaW5nLXJpZ2h0LXhzXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaW5kZXggPT09IHN0ZXBJbmRleFwiICpuZ0Zvcj1cImxldCBzdGVwIG9mIGdldFN0ZXBzRm9yU3RhZ2UoKTsgbGV0IGluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU3RlcENsaWNrKGluZGV4KVwiIFt0aXRsZV09XCJpc0V4cGFuZGVkID8gbnVsbCA6IHN0ZXAubmFtZVwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzRXhwYW5kZWQgPyBudWxsIDogc3RlcC5uYW1lXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbbmdDbGFzc109XCJ7J3NtZS1zdGVwLWFjdGl2ZSc6IGluZGV4ID09PSBzdGVwSW5kZXh9XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzbWUtd2l6YXJkLXN0ZXAgc21lLWJ1dHRvbi10cmlnZ2VyIHNtZS13aXphcmQtYnV0dG9uLWl0ZW0gc21lLXBhZGRpbmctaG9yaXpvbnRhbC1ub25lIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXhzIHNtZS1idXR0b24tYXV0by13aWR0aFwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzLnN0ZXBJbmRleERpc2FibGVkKHN0ZXAsIGluZGV4KVwiIFtzbWVUZWxlbWV0cnlEaXNhYmxlRWxlbWVudF09XCJ0aGlzLnN0ZXBJbmRleERpc2FibGVkKHN0ZXAsIGluZGV4KVwiXHJcbiAgICAgICAgICAgIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgW3NtZVRlbGVtZXRyeUlkXT1cIid3aXphcmRTdGVwJyArIChpbmRleCArIDEpXCIgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLW1hcmdpbi1yaWdodC14c1wiPnt7IHN0YWdlc0FycmF5SW5kZXggKyAxIH19Lnt7IGluZGV4ICsgMSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lXCIgKm5nSWY9XCJpc0V4cGFuZGVkXCI+e3sgc3RlcC5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC91bD5cclxuICAgICAgPGRpdiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWZvY3VzLXpvbmVcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cInNwbGl0LXZpZXctdG9nZ2xlIHNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtbGF5b3V0LWZsb2F0LXJpZ2h0XCJcclxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVQYW5lKClcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzRXhwYW5kZWRcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpc0V4cGFuZGVkID8gc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuY29sbGFwc2VTdGVwc0xpc3QgOiBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5leHBhbmRTdGVwc0xpc3RcIlxyXG4gICAgICAgICAgW3RpdGxlXT1cImlzRXhwYW5kZWQgPyBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5jb2xsYXBzZVN0ZXBzTGlzdCA6IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLmV4cGFuZFN0ZXBzTGlzdFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvblwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3NtZS1pY29uLWNoZXZyb25MZWZ0JzogaXNFeHBhbmRlZCwgJ3NtZS1pY29uLWNoZXZyb25SaWdodCc6ICFpc0V4cGFuZGVkIH1cIj48L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBTdGVwIGNvbnRlbnQgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwic21lLWZvY3VzLXpvbmUgc21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tc3RyZXRjaCBzbWUtYXJyYW5nZS1vdmVyZmxvdy1hdXRvXCJcclxuICAgICAgW25nQ2xhc3NdPVwieydzbWUtcGFkZGluZy1pbnNldC1sZyc6IGN1cnJlbnRTdGVwQ29tcG9uZW50LnBhZENvbnRlbnRzfVwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFN0ZXBDb21wb25lbnQuZGlzYWJsZWRcIj5cclxuICAgICAgICA8c21lLXBhZ2UtYWxlcnQtYmFyIFthbGVydF09XCJhbGVydFwiPjwvc21lLXBhZ2UtYWxlcnQtYmFyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBEb24ndCByZW1vdmUgdGhpcyBsaW5lISAtLT5cclxuICAgICAgPCEtLSBUaGUgZHluYW1pY2FsbHkgcmVuZGVyZWQgY29tcG9uZW50IGxvb2tzIGZvciAjY29udGFpbmVyIHRvIHJlbmRlciBpdHNlbGYgYXMgdGhlIHNpYmxpbmcuISAtLT5cclxuICAgICAgPGRpdiBpZD1cImR5bmFtaWMtY29udGVudC1jb250YWluZXJcIiAjY29udGFpbmVyPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSBGb290ZXIgLS0+XHJcbiAgPGRpdiAqbmdJZj1cIiF3aXphcmRJc0ZpbmlzaGVkXCJcclxuICAgIGNsYXNzPVwic21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1ib3JkZXItdG9wLXNtIHNtZS1ib3JkZXItdG9wLWNvbG9yLWJhc2UtODAgc21lLXBhZGRpbmctdmVydGljYWwtc20gc21lLXBhZGRpbmctaG9yaXpvbnRhbC1sZyBzbWUtZm9jdXMtem9uZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1sYXlvdXQtZmxvYXQtbGVmdFwiIFtjbGFzcy5zbWUtcGFkZGluZy1yaWdodC14bF09XCIhdmFsaWRhdGluZ1wiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwic21lLWZvY3VzLXpvbmVcIiB0eXBlPVwiYnV0dG9uXCIgc21lVGVsZW1ldHJ5SWQ9XCJ3aXphcmRQcmV2XCIgW3NtZVRlbGVtZXRyeURhdGFCbG9iXT1cInRlbGVtZXRyeURhdGFcIiAoY2xpY2spPVwib25CYWNrQ2xpY2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlQmFja0J1dHRvblwiXHJcbiAgICAgICAgW2NsYXNzLnNtZS1sYXlvdXQtbm9uZV09XCIhY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcFwiPnt7c3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uYmFja319PC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwic21lLWZvY3VzLXpvbmUgc21lLWJ1dHRvbi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIHNtZVRlbGVtZXRyeUlkPVwid2l6YXJkTmV4dFwiIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgKGNsaWNrKT1cIm9uTmV4dENsaWNrKClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlTmV4dEJ1dHRvblwiIFtzbWVUZWxlbWV0cnlEaXNhYmxlRWxlbWVudF09XCJkaXNhYmxlTmV4dEJ1dHRvblwiPnt7IG5leHRCdXR0b25UZXh0KCkgfX08L2J1dHRvbj5cclxuICAgICAgPGRpdiAqbmdJZj1cInZhbGlkYXRpbmdcIiBjbGFzcz1cInNtZS1sYXlvdXQtcmVsYXRpdmUgc21lLWxheW91dC1mbG9hdC1yaWdodCBzbWUtcGFkZGluZy1sZWZ0LXhsIHNtZS1wYWRkaW5nLXRvcC1tZFwiPlxyXG4gICAgICAgIDxzbWUtbG9hZGluZy13aGVlbCBzaXplPVwic21hbGxcIj48L3NtZS1sb2FkaW5nLXdoZWVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInNtZS1mb2N1cy16b25lXCIgdHlwZT1cImJ1dHRvblwiIHNtZVRlbGVtZXRyeUlkPVwid2l6YXJkU2tpcFwiIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgKGNsaWNrKT1cIm9uU2tpcENsaWNrKClcIlxyXG4gICAgICBbY2xhc3Muc21lLWxheW91dC1ub25lXT1cIiFzaG93U2tpcEJ1dHRvblwiPnt7c3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uc2tpcH19PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwic21lLWZvY3VzLXpvbmUgc21lLWxheW91dC1mbG9hdC1yaWdodFwiIHR5cGU9XCJidXR0b25cIiBzbWVUZWxlbWV0cnlJZD1cIndpemFyZEV4aXRcIiBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiXHJcbiAgICAgIChjbGljayk9XCJvbkV4aXRDbGljaygpXCI+e3sgZXhpdEJ1dHRvblRleHQoKSB9fTwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|