@openziti/ziti-console-lib 0.12.9 → 0.12.10
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/assets/styles/global.scss +1 -0
- package/esm2022/lib/features/data-table/cells/table-cell-select/table-cell-select.component.mjs +18 -5
- package/esm2022/lib/features/data-table/data-table.component.mjs +5 -3
- package/esm2022/lib/features/preview-list/preview-list.component.mjs +13 -3
- package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +3 -1
- package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +16 -4
- package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +51 -12
- package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +11 -5
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +3 -1
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +4 -2
- package/esm2022/lib/features/projectable-forms/session/session-form.component.mjs +3 -3
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.component.mjs +6 -1
- package/esm2022/lib/pages/identities/identities-page.component.mjs +3 -9
- package/esm2022/lib/pages/identities/identities-page.service.mjs +50 -1
- package/esm2022/lib/pages/services/services-page.component.mjs +2 -13
- package/esm2022/lib/pages/services/services-page.service.mjs +35 -2
- package/esm2022/lib/pages/terminators/terminators-page.component.mjs +7 -5
- package/esm2022/lib/services/ziti-controller-data.service.mjs +4 -4
- package/esm2022/lib/services/ziti-data.service.mjs +1 -1
- package/esm2022/lib/shared/list-page-component.class.mjs +4 -1
- package/esm2022/lib/shared/list-page-service.class.mjs +5 -2
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/openziti-ziti-console-lib.mjs +227 -64
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/lib/features/data-table/cells/table-cell-select/table-cell-select.component.d.ts +2 -6
- package/lib/features/data-table/cells/table-cell-select/table-cell-select.component.d.ts.map +1 -1
- package/lib/features/data-table/data-table.component.d.ts +1 -0
- package/lib/features/data-table/data-table.component.d.ts.map +1 -1
- package/lib/features/preview-list/preview-list.component.d.ts +3 -1
- package/lib/features/preview-list/preview-list.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/service-form.service.d.ts +9 -3
- package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +1 -5
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +1 -1
- package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts.map +1 -1
- package/lib/pages/identities/identities-page.component.d.ts +0 -2
- package/lib/pages/identities/identities-page.component.d.ts.map +1 -1
- package/lib/pages/identities/identities-page.service.d.ts +3 -0
- package/lib/pages/identities/identities-page.service.d.ts.map +1 -1
- package/lib/pages/services/services-page.component.d.ts +0 -3
- package/lib/pages/services/services-page.component.d.ts.map +1 -1
- package/lib/pages/services/services-page.service.d.ts +2 -0
- package/lib/pages/services/services-page.service.d.ts.map +1 -1
- package/lib/services/ziti-controller-data.service.d.ts +1 -1
- package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
- package/lib/services/ziti-data.service.d.ts +1 -1
- package/lib/services/ziti-data.service.d.ts.map +1 -1
- package/lib/shared/list-page-component.class.d.ts.map +1 -1
- package/lib/shared/list-page-service.class.d.ts.map +1 -1
- package/package.json +1 -1
package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import { SERVICE_EXTENSION_SERVICE } from "../service-form.service";
|
|
|
5
5
|
import { ZITI_DATA_SERVICE } from "../../../../services/ziti-data.service";
|
|
6
6
|
import { GrowlerModel } from "../../../messaging/growler.model";
|
|
7
7
|
import { CreationSummaryDialogComponent } from "../../../creation-summary-dialog/creation-summary-dialog.component";
|
|
8
|
-
import { isEmpty, isNil, isNaN, unset, cloneDeep, isEqual, set } from 'lodash';
|
|
8
|
+
import { isEmpty, isNil, isNaN, unset, cloneDeep, isEqual, set, get } from 'lodash';
|
|
9
9
|
import { ConfirmComponent } from "../../../confirm/confirm.component";
|
|
10
10
|
import { URLS } from "../../../../urls";
|
|
11
11
|
import { BehaviorSubject } from "rxjs";
|
|
@@ -114,9 +114,7 @@ class SimpleServiceComponent extends ProjectableForm {
|
|
|
114
114
|
this.bindDataChange = false;
|
|
115
115
|
this.identitiesInit = new BehaviorSubject(false);
|
|
116
116
|
this.entitiesInit = false;
|
|
117
|
-
this.multiActions = [
|
|
118
|
-
{ id: 'convert-to-advanced', label: 'Convert to Advanced', hidden: false },
|
|
119
|
-
];
|
|
117
|
+
this.multiActions = [];
|
|
120
118
|
this.entityType = 'services';
|
|
121
119
|
this.close = new EventEmitter();
|
|
122
120
|
this.selected = new EventEmitter();
|
|
@@ -129,6 +127,14 @@ class SimpleServiceComponent extends ProjectableForm {
|
|
|
129
127
|
this.svc.formData = data;
|
|
130
128
|
if (!isEmpty(data?.id)) {
|
|
131
129
|
this.initAssociatedData();
|
|
130
|
+
if (get(this.formData, 'tags.service-type') === 'simple') {
|
|
131
|
+
this.multiActions = [
|
|
132
|
+
{ id: 'convert-to-advanced', label: 'Convert to Advanced', hidden: false }
|
|
133
|
+
];
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
this.multiActions = [];
|
|
137
|
+
}
|
|
132
138
|
}
|
|
133
139
|
}
|
|
134
140
|
get formData() {
|
|
@@ -989,4 +995,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
989
995
|
}], formData: [{
|
|
990
996
|
type: Input
|
|
991
997
|
}] } });
|
|
992
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXNlcnZpY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL3NlcnZpY2Uvc2ltcGxlLXNlcnZpY2Uvc2ltcGxlLXNlcnZpY2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL3NlcnZpY2Uvc2ltcGxlLXNlcnZpY2Uvc2ltcGxlLXNlcnZpY2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBa0IsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RixPQUFPLEVBQUMseUJBQXlCLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFDLGlCQUFpQixFQUFrQixNQUFNLHdDQUF3QyxDQUFDO0FBRzFGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUU5RCxPQUFPLEVBQUMsOEJBQThCLEVBQUMsTUFBTSxvRUFBb0UsQ0FBQztBQUNsSCxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQVcsR0FBRyxFQUFNLE1BQU0sUUFBUSxDQUFDO0FBSzNGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE9BQU8sRUFBQyxJQUFJLEVBQUMs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b3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UHJvamVjdGFibGVGb3JtfSBmcm9tIFwiLi4vLi4vcHJvamVjdGFibGUtZm9ybS5jbGFzc1wiO1xuaW1wb3J0IHtTRVRUSU5HU19TRVJWSUNFLCBTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlXCI7XG5pbXBvcnQge1NFUlZJQ0VfRVhURU5TSU9OX1NFUlZJQ0UsIFNlcnZpY2VGb3JtU2VydmljZX0gZnJvbSBcIi4uL3NlcnZpY2UtZm9ybS5zZXJ2aWNlXCI7XG5pbXBvcnQge1pJVElfREFUQV9TRVJWSUNFLCBaaXRpRGF0YVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy96aXRpLWRhdGEuc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7RXh0ZW5zaW9uU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7R3Jvd2xlck1vZGVsfSBmcm9tIFwiLi4vLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIubW9kZWxcIjtcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQge0NyZWF0aW9uU3VtbWFyeURpYWxvZ0NvbXBvbmVudH0gZnJvbSBcIi4uLy4uLy4uL2NyZWF0aW9uLXN1bW1hcnktZGlhbG9nL2NyZWF0aW9uLXN1bW1hcnktZGlhbG9nLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtpc0VtcHR5LCBpc05pbCwgaXNOYU4sIHVuc2V0LCBjbG9uZURlZXAsIGlzRXF1YWwsIGZvckVhY2gsIHNldCwgZ2V0fSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtWYWxpZGF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7U2VydmljZXNQYWdlU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3BhZ2VzL3NlcnZpY2VzL3NlcnZpY2VzLXBhZ2Uuc2VydmljZVwiO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge0ZpbHRlck9ian0gZnJvbSBcIi4uLy4uLy4uL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHtDb25maXJtQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vLi4vY29uZmlybS9jb25maXJtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtVUkxTfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXJsc1wiO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZn0gZnJvbSBcInJ4anNcIjtcblxuLy8gQHRzLWlnbm9yZVxuY29uc3Qge2FwcH0gPSB3aW5kb3c7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zaW1wbGUtc2VydmljZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zaW1wbGUtc2VydmljZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NpbXBsZS1zZXJ2aWNlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2ltcGxlU2VydmljZUNvbXBvbmVudCBleHRlbmRzIFByb2plY3RhYmxlRm9ybSB7XG4gIEBJbnB1dCgpIHNlcnZpY2VSb2xlQXR0cmlidXRlczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaWRlbnRpdHlSb2xlQXR0cmlidXRlczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXM6IGFueVtdID0gW107XG5cbiAgZGF0YUluaXQgPSBmYWxzZTtcbiAgc2hvd0Zvcm0gPSB0cnVlO1xuICBmb3JtVmlldyA9ICdzaW1wbGUnO1xuICBjb250cm9sbGVyRG9tYWluID0gJyc7XG4gIHppdGlTZXNzaW9uSWQ7XG4gIGludGVyY2VwdFBvcnQ7XG4gIGhvc3RQcm90b2NvbCA9ICd0Y3AnO1xuICBzZXJ2aWNlQ2xpQ29tbWFuZCA9ICcnO1xuICBpbnRlcmNlcHRDb25maWdDbGlDb21tYW5kID0gJyc7XG4gIGhvc3RDb25maWdDbGlDb21tYW5kID0gJyc7XG4gIGRpYWxQb2xpY3lDbGlDb21tYW5kID0gJyc7XG4gIGJpbmRQb2xpY3lDbGlDb21tYW5kID0gJyc7XG4gIHNlcnZpY2VBcGlVcmwgPSAnJztcbiAgaW50ZXJjZXB0Q29uZmlnQXBpVXJsID0gJyc7XG4gIGhvc3RDb25maWdBcGlVcmwgPSAnJztcbiAgZGlhbFBvbGljeUFwaVVybCA9ICcnO1xuICBiaW5kUG9saWN5QXBpVXJsID0gJyc7XG4gIGluaXRTZXJ2aWNlQXBpRGF0YSA9IHtcbiAgICBuYW1lOiBcIlwiLFxuICAgIHJvbGVBdHRyaWJ1dGVzOiBbXSxcbiAgICBjb25maWdzOiBbXSxcbiAgICBlbmNyeXB0aW9uUmVxdWlyZWQ6IHRydWVcbiAgfTtcbiAgaW5pdEludGVyY2VwdENvbmZpZ0FwaURhdGEgPSB7XG4gICAgbmFtZTogXCJcIixcbiAgICBjb25maWdUeXBlSWQ6XCJnN2NJV2JjR2dcIixcbiAgICBkYXRhOiB7XG4gICAgICBwb3J0UmFuZ2VzOiBbXSxcbiAgICAgIGFkZHJlc3NlczogW10sXG4gICAgICBwcm90b2NvbHM6IFsndGNwJywgJ3VkcCddXG4gICAgfVxuICB9O1xuICBpbml0SG9zdENvbmZpZ0FwaURhdGEgPSB7XG4gICAgbmFtZTogJycsXG4gICAgY29uZmlnVHlwZUlkOiBcIk5INXA0RnBHUlwiLFxuICAgIGRhdGE6IHtcbiAgICAgIGFkZHJlc3M6IFwiXCIsXG4gICAgICBwb3J0OiB1bmRlZmluZWQsXG4gICAgICBmb3J3YXJkUHJvdG9jb2w6IHRydWUsXG4gICAgICBhbGxvd2VkUHJvdG9jb2xzOiBbJ3RjcCddXG4gICAgfVxuICB9O1xuICBpbml0RGlhbFBvbGljeUFwaURhdGEgPSB7XG4gICAgbmFtZTogXCJcIixcbiAgICB0eXBlOiBcIkRpYWxcIixcbiAgICBzZW1hbnRpYzogXCJBbnlPZlwiLFxuICAgIHNlcnZpY2VSb2xlczogW10sXG4gICAgaWRlbnRpdHlSb2xlczogW11cbiAgfTtcbiAgaW5pdEJpbmRQb2xpY3lBcGlEYXRhID0ge1xuICAgIG5hbWU6IFwiXCIsXG4gICAgdHlwZTogXCJCaW5kXCIsXG4gICAgc2VtYW50aWM6IFwiQW55T2ZcIixcbiAgICBzZXJ2aWNlUm9sZXM6IFtdLFxuICAgIGlkZW50aXR5Um9sZXM6IFtdXG4gIH07XG4gIHNlcnZpY2VBcGlEYXRhO1xuICBpbnRlcmNlcHRDb25maWdBcGlEYXRhO1xuICBob3N0Q29uZmlnQXBpRGF0YTtcbiAgZGlhbFBvbGljeUFwaURhdGE7XG4gIGJpbmRQb2xpY3lBcGlEYXRhO1xuICBkaWFsUG9saWN5TmFtZWRBdHRyaWJ1dGVzID0gW107XG4gIGRpYWxQb2xpY3lSb2xlQXR0cmlidXRlcyA9IFtdO1xuICBiaW5kUG9saWN5TmFtZWRBdHRyaWJ1dGVzID0gW107XG4gIGJpbmRQb2xpY3lSb2xlQXR0cmlidXRlcyA9IFtdO1xuICBpZGVudGl0aWVzTmFtZUlkTWFwID0ge307XG4gIGlkZW50aXRpZXNJZE5hbWVNYXAgPSB7fTtcbiAgaW50ZXJjZXB0Q29uZmlnSWQ7XG4gIGhvc3RDb25maWdJZDtcbiAgc2VydmljZUlkO1xuICBzZGtPbmx5RGlhbCA9IGZhbHNlO1xuICBzZGtPbmx5QmluZCA9IGZhbHNlO1xuICBkaWFsb2dSZWY6IGFueTtcblxuICBpbnRlcmNlcHRJbmNyZW1lbnQgPSAtMTtcbiAgaG9zdEluY3JlbWVudCA9IC0xO1xuICBzZXJ2aWNlSW5jcmVtZW50ID0gLTE7XG4gIGRpYWxJbmNyZW1lbnQgPSAtMTtcbiAgYmluZEluY3JlbWVudCA9IC0xO1xuXG4gIHNlcnZpY2VEYXRhQ2hhbmdlID0gZmFsc2U7XG4gIGludGVyY2VwdERhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgaG9zdERhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgZGlhbERhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgYmluZERhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgaWRlbnRpdGllc0luaXQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KGZhbHNlKTtcbiAgZW50aXRpZXNJbml0ID0gZmFsc2U7XG5cbiAgbXVsdGlBY3Rpb25zID0gW1xuICAgIHtpZDogJ2NvbnZlcnQtdG8tYWR2YW5jZWQnLCBsYWJlbDogJ0NvbnZlcnQgdG8gQWR2YW5jZWQnLCBoaWRkZW46IGZhbHNlfSxcbiAgXTtcblxuICBvdmVycmlkZSBlbnRpdHlUeXBlID0gJ3NlcnZpY2VzJztcblxuICBAT3V0cHV0KCkgY2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIEBJbmplY3QoU0VUVElOR1NfU0VSVklDRSkgcHJvdGVjdGVkIG92ZXJyaWRlIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgcHVibGljIHN2YzogU2VydmljZUZvcm1TZXJ2aWNlLFxuICAgICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgb3ZlcnJpZGUgeml0aVNlcnZpY2U6IFppdGlEYXRhU2VydmljZSxcbiAgICAgIGdyb3dsZXJTZXJ2aWNlOiBHcm93bGVyU2VydmljZSxcbiAgICAgIEBJbmplY3QoU0VSVklDRV9FWFRFTlNJT05fU0VSVklDRSkgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgIHByaXZhdGUgZGlhbG9nRm9ybTogTWF0RGlhbG9nLFxuICAgICAgcHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgICBwcml2YXRlIHNlcnZpY2VzUGFnZVNlcnZpY2U6IFNlcnZpY2VzUGFnZVNlcnZpY2UsXG4gICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgbG9jYXRpb246IExvY2F0aW9uXG4gICkge1xuICAgIHN1cGVyKGdyb3dsZXJTZXJ2aWNlLCBleHRTZXJ2aWNlLCB6aXRpU2VydmljZSwgcm91dGVyLCByb3V0ZSwgbG9jYXRpb24sIHNldHRpbmdzU2VydmljZSk7XG4gICAgdGhpcy5mb3JtRGF0YSA9IHt9O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZvcm1EYXRhKGRhdGEpIHtcbiAgICBpZiAoIWRhdGE/LmNvbmZpZ3MpIHtcbiAgICAgIGRhdGEuY29uZmlncyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnN2Yy5mb3JtRGF0YSA9IGRhdGE7XG4gICAgaWYgKCFpc0VtcHR5KGRhdGE/LmlkKSkge1xuICAgICAgdGhpcy5pbml0QXNzb2NpYXRlZERhdGEoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZm9ybURhdGEoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5zdmM/LmZvcm1EYXRhO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLmNvbnRyb2xsZXJEb21haW4gPSB0aGlzLnNldHRpbmdzU2VydmljZT8uc2V0dGluZ3M/LnNlbGVjdGVkRWRnZUNvbnRyb2xsZXI7XG4gICAgdGhpcy56aXRpU2Vzc2lvbklkID0gdGhpcy5zZXR0aW5nc1NlcnZpY2U/LnNldHRpbmdzPy5zZXNzaW9uPy5pZDtcbiAgICB0aGlzLmluaXRGb3JtRGF0YSgpO1xuICAgIHRoaXMuZ2V0SWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMoKTtcbiAgfVxuXG4gIGluaXRGb3JtRGF0YSgpIHtcbiAgICB0aGlzLnNlcnZpY2VBcGlVcmwgPSBgJHt0aGlzLmNvbnRyb2xsZXJEb21haW59L2VkZ2UvbWFuYWdlbWVudC92MS9zZXJ2aWNlc2A7XG4gICAgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlVcmwgPSBgJHt0aGlzLmNvbnRyb2xsZXJEb21haW59L2VkZ2UvbWFuYWdlbWVudC92MS9jb25maWdzYDtcbiAgICB0aGlzLmhvc3RDb25maWdBcGlVcmwgPSBgJHt0aGlzLmNvbnRyb2xsZXJEb21haW59L2VkZ2UvbWFuYWdlbWVudC92MS9jb25maWdzYDtcbiAgICB0aGlzLmRpYWxQb2xpY3lBcGlVcmwgPSBgJHt0aGlzLmNvbnRyb2xsZXJEb21haW59L2VkZ2UvbWFuYWdlbWVudC92MS9zZXJ2aWNlLXBvbGljaWVzYDtcbiAgICB0aGlzLmJpbmRQb2xpY3lBcGlVcmwgPSBgJHt0aGlzLmNvbnRyb2xsZXJEb21haW59L2VkZ2UvbWFuYWdlbWVudC92MS9zZXJ2aWNlLXBvbGljaWVzYDtcbiAgICB0aGlzLnNlcnZpY2VDbGlDb21tYW5kID0gJyc7XG4gICAgdGhpcy5pbnRlcmNlcHRDb25maWdDbGlDb21tYW5kID0gJyc7XG4gICAgdGhpcy5ob3N0Q29uZmlnQ2xpQ29tbWFuZCA9ICcnO1xuICAgIHRoaXMuZGlhbFBvbGljeUNsaUNvbW1hbmQgPSAnJztcbiAgICB0aGlzLmJpbmRQb2xpY3lDbGlDb21tYW5kID0gJyc7XG4gICAgdGhpcy5pbnRlcmNlcHRDb25maWdJZCA9ICcnO1xuICAgIHRoaXMuaG9zdENvbmZpZ0lkID0gJyc7XG4gICAgdGhpcy5zZXJ2aWNlSWQgPSAnJztcbiAgICB0aGlzLnNka09ubHlEaWFsID0gZmFsc2U7XG4gICAgdGhpcy5zZGtPbmx5QmluZCA9IGZhbHNlO1xuICAgIHRoaXMuaW50ZXJjZXB0UG9ydCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRpYWxQb2xpY3lOYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICB0aGlzLmRpYWxQb2xpY3lSb2xlQXR0cmlidXRlcyA9IFtdO1xuICAgIHRoaXMuYmluZFBvbGljeU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICAgIHRoaXMuYmluZFBvbGljeVJvbGVBdHRyaWJ1dGVzID0gW107XG4gICAgdGhpcy5zZXJ2aWNlQXBpRGF0YSA9IGNsb25lRGVlcCh0aGlzLmluaXRTZXJ2aWNlQXBpRGF0YSk7XG4gICAgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhID0gY2xvbmVEZWVwKHRoaXMuaW5pdEludGVyY2VwdENvbmZpZ0FwaURhdGEpO1xuICAgIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEgPSBjbG9uZURlZXAodGhpcy5pbml0SG9zdENvbmZpZ0FwaURhdGEpO1xuICAgIHRoaXMuZGlhbFBvbGljeUFwaURhdGEgPSBjbG9uZURlZXAodGhpcy5pbml0RGlhbFBvbGljeUFwaURhdGEpO1xuICAgIHRoaXMuYmluZFBvbGljeUFwaURhdGEgPSBjbG9uZURlZXAodGhpcy5pbml0QmluZFBvbGljeUFwaURhdGEpO1xuICAgIHRoaXMuc2VydmljZXNQYWdlU2VydmljZS5nZXRTZXJ2aWNlUm9sZUF0dHJpYnV0ZXMoKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIHRoaXMuc2VydmljZVJvbGVBdHRyaWJ1dGVzID0gcmVzdWx0LmRhdGE7XG4gICAgfSk7XG4gICAgdGhpcy5zZXJ2aWNlc1BhZ2VTZXJ2aWNlLmdldElkZW50aXR5Um9sZUF0dHJpYnV0ZXMoKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIHRoaXMuaWRlbnRpdHlSb2xlQXR0cmlidXRlcyA9IHJlc3VsdC5kYXRhO1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdEFzc29jaWF0ZWREYXRhKCkge1xuICAgIGlmICh0aGlzLmVudGl0aWVzSW5pdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVudGl0aWVzSW5pdCA9IHRydWU7XG4gICAgdGhpcy5zZXJ2aWNlQXBpRGF0YSA9IHRoaXMuc3ZjLmZvcm1EYXRhO1xuICAgIHRoaXMuaWRlbnRpdGllc0luaXQuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgY29uZmlnc1Byb21pc2UgPSB0aGlzLmdldEFzc29jaWF0ZWRDb25maWdzKCk7XG4gICAgICAgIGNvbnN0IHBvbGljaWVzUHJvbWlzZSA9IHRoaXMuZ2V0QXNzb2NhaXRlZFBvbGljaWVzKCk7XG4gICAgICAgIFByb21pc2UuYWxsKFtjb25maWdzUHJvbWlzZSwgcG9saWNpZXNQcm9taXNlXSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhSW5pdCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0QXNzb2NpYXRlZENvbmZpZ3MoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKCdzZXJ2aWNlcycsIHRoaXMuZm9ybURhdGEuaWQsICdjb25maWdzJykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGFzc29jaWF0ZWRDb25maWdzID0gcmVzdWx0LmRhdGE7XG4gICAgICBhc3NvY2lhdGVkQ29uZmlncy5mb3JFYWNoKChjb25maWcpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZy5jb25maWdUeXBlSWQgPT0gdGhpcy5pbml0SW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5jb25maWdUeXBlSWQpIHtcbiAgICAgICAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEgPSBjb25maWc7XG4gICAgICAgICAgY29uc3QgcG9ydFJhbmdlID0gdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEucG9ydFJhbmdlc1swXTtcbiAgICAgICAgICB0aGlzLmludGVyY2VwdFBvcnQgPSBwb3J0UmFuZ2U/LmhpZ2g7XG4gICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLmNvbmZpZ1R5cGVJZCA9PSB0aGlzLmluaXRIb3N0Q29uZmlnQXBpRGF0YS5jb25maWdUeXBlSWQpIHtcbiAgICAgICAgICB0aGlzLmhvc3RDb25maWdBcGlEYXRhID0gY29uZmlnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFzc29jYWl0ZWRQb2xpY2llcygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLmdldFN1YmRhdGEoJ3NlcnZpY2VzJywgdGhpcy5mb3JtRGF0YS5pZCwgJ3NlcnZpY2UtcG9saWNpZXMnKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcy5mb3JFYWNoKChwb2xpY3kpID0+IHtcbiAgICAgICAgaWYgKHBvbGljeS50eXBlPy50b0xvd2VyQ2FzZSgpID09ICdkaWFsJykge1xuICAgICAgICAgIHRoaXMuZGlhbFBvbGljeUFwaURhdGEgPSBwb2xpY3k7XG4gICAgICAgICAgY29uc3Qgcm9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICBjb25zdCBuYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICBwb2xpY3kuaWRlbnRpdHlSb2xlcy5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXR0ci5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICAgICAgICByb2xlQXR0cmlidXRlcy5wdXNoKGF0dHIuc2xpY2UoMSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG4gICAgICAgICAgICAgIG5hbWVkQXR0cmlidXRlcy5wdXNoKHRoaXMuaWRlbnRpdGllc0lkTmFtZU1hcFthdHRyLnNsaWNlKDEpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5kaWFsUG9saWN5Um9sZUF0dHJpYnV0ZXMgPSByb2xlQXR0cmlidXRlcztcbiAgICAgICAgICB0aGlzLmRpYWxQb2xpY3lOYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgICAgIH0gZWxzZSBpZiAocG9saWN5LnR5cGU/LnRvTG93ZXJDYXNlKCkgPT0gJ2JpbmQnKSB7XG4gICAgICAgICAgY29uc3Qgcm9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICBjb25zdCBuYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICBwb2xpY3kuaWRlbnRpdHlSb2xlcy5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXR0ci5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICAgICAgICByb2xlQXR0cmlidXRlcy5wdXNoKGF0dHIuc2xpY2UoMSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG4gICAgICAgICAgICAgIG5hbWVkQXR0cmlidXRlcy5wdXNoKHRoaXMuaWRlbnRpdGllc0lkTmFtZU1hcFthdHRyLnNsaWNlKDEpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5iaW5kUG9saWN5Um9sZUF0dHJpYnV0ZXMgPSByb2xlQXR0cmlidXRlcztcbiAgICAgICAgICB0aGlzLmJpbmRQb2xpY3lOYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgICAgICAgdGhpcy5iaW5kUG9saWN5QXBpRGF0YSA9IHBvbGljeTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSlcbiAgfVxuXG4gIGdldElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKGZpbHRlcj8pIHtcbiAgICBjb25zdCBwYWdpbmcgPSB7XG4gICAgICBzZWFyY2hPbjogJ25hbWUnLFxuICAgICAgZmlsdGVyOiBmaWx0ZXIgfHwgJycsXG4gICAgICB0b3RhbDogMzAsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc29ydDogJ25hbWUnLFxuICAgICAgb3JkZXI6ICdhc2MnXG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJzID0gW107XG4gICAgaWYgKCFpc0VtcHR5KGZpbHRlcikpIHtcbiAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgIGZpbHRlck5hbWU6ICduYW1lJyxcbiAgICAgICAgY29sdW1uSWQ6ICduYW1lJyxcbiAgICAgICAgdmFsdWU6IGZpbHRlciB8fCAnJScsXG4gICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgdHlwZTogJ1RFWFRJTlBVVCcsXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy56aXRpU2VydmljZS5nZXQoJ2lkZW50aXRpZXMnLCBwYWdpbmcsIGZpbHRlcnMpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgbmFtZWRBdHRyaWJ1dGVzID0gcmVzdWx0LmRhdGEubWFwKChpZGVudGl0eSkgPT4ge1xuICAgICAgICB0aGlzLmlkZW50aXRpZXNOYW1lSWRNYXBbaWRlbnRpdHkubmFtZV0gPSBpZGVudGl0eS5pZDtcbiAgICAgICAgdGhpcy5pZGVudGl0aWVzSWROYW1lTWFwW2lkZW50aXR5LmlkXSA9IGlkZW50aXR5Lm5hbWU7XG4gICAgICAgIHRoaXMuaWRlbnRpdGllc0luaXQubmV4dCh0cnVlKTtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5Lm5hbWU7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgfSk7XG4gIH1cblxuICBtdWx0aUFjdGlvblJlcXVlc3RlZChhY3Rpb24pIHtcbiAgICBzd2l0Y2goYWN0aW9uLmlkKSB7XG4gICAgICBjYXNlICdzYXZlJzpcbiAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY29udmVydC10by1hZHZhbmNlZCc6XG4gICAgICAgIHRoaXMuY29udmVydFRvQWR2YW5jZWQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaGVhZGVyQWN0aW9uUmVxdWVzdGVkKGFjdGlvbikge1xuICAgIHN3aXRjaChhY3Rpb24ubmFtZSkge1xuICAgICAgY2FzZSAnc2F2ZSc6XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Nsb3NlJzpcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0KSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXI/Lm5hdmlnYXRlQnlVcmwoVVJMUy5aSVRJX1NFUlZJQ0VTKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJvdXRlcj8ubmF2aWdhdGVCeVVybChVUkxTLlpJVElfU0VSVklDRV9TRUxFQ1QpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9nZ2xlLXZpZXcnOlxuICAgICAgICB0aGlzLmZvcm1WaWV3ID0gYWN0aW9uLmRhdGE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVNka09ubHlEaWFsKCkge1xuICAgIHRoaXMuc2RrT25seURpYWwgPSAhdGhpcy5zZGtPbmx5RGlhbDtcbiAgfVxuXG4gIHRvZ2dsZVNka09ubHlCaW5kKCkge1xuICAgIHRoaXMuc2RrT25seUJpbmQgPSAhdGhpcy5zZGtPbmx5QmluZDtcbiAgfVxuXG4gIHNlcnZpY2VOYW1lQ2hhbmdlZChldmVudCkge1xuICAgIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5uYW1lID0gYCR7dGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lfS1pbnRlcmNlcHQtY29uZmlnYFxuICAgIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEubmFtZSA9IGAke3RoaXMuc2VydmljZUFwaURhdGEubmFtZX0taG9zdC1jb25maWdgXG4gICAgdGhpcy5kaWFsUG9saWN5QXBpRGF0YS5uYW1lID0gYCR7dGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lfS1kaWFsLXBvbGljeWBcbiAgICB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhLm5hbWUgPSBgJHt0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWV9LWJpbmQtcG9saWN5YFxuICB9XG5cbiAgaW50ZXJjZXB0UG9ydENoYW5nZWQoJGV2ZW50KSB7XG4gICAgaWYgKGlzTmlsKHRoaXMuaW50ZXJjZXB0UG9ydCkgfHwgaXNOYU4odGhpcy5pbnRlcmNlcHRQb3J0KSkge1xuICAgICAgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEucG9ydFJhbmdlcyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YS5wb3J0UmFuZ2VzWzBdID0ge1xuICAgICAgaGlnaDogdGhpcy5pbnRlcmNlcHRQb3J0LFxuICAgICAgbG93OiB0aGlzLmludGVyY2VwdFBvcnRcbiAgICB9O1xuICB9XG5cbiAgaG9zdFByb3RvY29sc0NoYW5nZWQoJGV2ZW50KSB7XG4gICAgc3dpdGNoICh0aGlzLmhvc3RQcm90b2NvbCkge1xuICAgICAgY2FzZSAnYm90aCc6XG4gICAgICAgIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEuZGF0YS5hbGxvd2VkUHJvdG9jb2xzID0gWyd0Y3AnLCAndWRwJ11cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEuYWxsb3dlZFByb3RvY29scyA9IFt0aGlzLmhvc3RQcm90b2NvbF07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmUocmVmcmVzaD8pIHtcbiAgICB0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWUgPSB0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWUudHJpbSgpO1xuICAgIGlmICghdGhpcy52YWxpZGF0ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzTmV3U2VydmljZSA9IGlzRW1wdHkodGhpcy5zZXJ2aWNlQXBpRGF0YT8uaWQpO1xuICAgIGlmIChpc05ld1NlcnZpY2UpIHtcbiAgICAgIGNvbnN0IGhhc0NvbmZsaWN0czogYW55ID0gYXdhaXQgdGhpcy5jaGVja05hbWVDb25mbGljdHMoKTtcbiAgICAgIGlmIChoYXNDb25mbGljdHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN1bW1hcnlEYXRhID0gdGhpcy5zaG93U3VtbWFyeSgpO1xuICAgIHRoaXMuc2VydmljZUFwaURhdGEuY29uZmlncyA9IFtdO1xuXG4gICAgY29uc3QgaW50ZXJjZXB0Q2ZnUHJvbWlzZSA9IGF3YWl0IHRoaXMuc2F2ZUludGVyY2VwdENvbmZpZyhzdW1tYXJ5RGF0YSk7XG4gICAgY29uc3QgaG9zdENmZ1Byb21pc2UgPSBhd2FpdCB0aGlzLnNhdmVIb3N0Q29uZmlnKHN1bW1hcnlEYXRhKTtcbiAgICBjb25zdCBzZXJ2aWNlUHJvbWlzZSA9IGF3YWl0IHRoaXMuc2F2ZVNlcnZpY2Uoc3VtbWFyeURhdGEpO1xuICAgIGNvbnN0IGRpYWxQb2xpY3lQcm9taXNlID0gYXdhaXQgdGhpcy5zYXZlUG9saWN5KHN1bW1hcnlEYXRhLCAnRGlhbCcpO1xuICAgIGNvbnN0IGJpbmRQb2xpY3lQcm9taXNlID0gYXdhaXQgdGhpcy5zYXZlUG9saWN5KHN1bW1hcnlEYXRhLCAnQmluZCcpO1xuXG4gICAgc3VtbWFyeURhdGE/LmZvckVhY2goKGVudGl0eVR5cGUpID0+IHtcbiAgICAgIGVudGl0eVR5cGUuZW50aXRpZXM/LmZvckVhY2goKGVudGl0eSkgPT4ge1xuICAgICAgICBpZiAoZW50aXR5LnR5cGUgPT09ICdzZXJ2aWNlcycpIHtcbiAgICAgICAgICBlbnRpdHkuY2xpQ29tbWFuZCA9IHRoaXMuc2VydmljZUNsaUNvbW1hbmQ7XG4gICAgICAgICAgZW50aXR5LmFwaVJlcXVlc3QgPSB0aGlzLmdldFNlcnZpY2VzQXBpUmVxdWVzdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGVudGl0eS50eXBlID09PSAnY29uZmlncycgJiYgZW50aXR5LnN1YnR5cGUgPT09ICdpbnRlcmNlcHQnKSB7XG4gICAgICAgICAgZW50aXR5LmNsaUNvbW1hbmQgPSB0aGlzLmludGVyY2VwdENvbmZpZ0NsaUNvbW1hbmQ7XG4gICAgICAgICAgZW50aXR5LmFwaVJlcXVlc3QgPSB0aGlzLmdldEludGVyY2VwdENvbmZpZ0FwaVJlcXVlc3QoKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbnRpdHkudHlwZSA9PT0gJ2NvbmZpZ3MnICYmIGVudGl0eS5zdWJ0eXBlID09PSAnaG9zdCcpIHtcbiAgICAgICAgICBlbnRpdHkuY2xpQ29tbWFuZCA9IHRoaXMuaG9zdENvbmZpZ0NsaUNvbW1hbmQ7XG4gICAgICAgICAgZW50aXR5LmFwaVJlcXVlc3QgPSB0aGlzLmdldEhvc3RDb25maWdBcGlSZXF1ZXN0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZW50aXR5LnR5cGUgPT09ICdzZXJ2aWNlLXBvbGljaWVzJyAmJiBlbnRpdHkuc3VidHlwZSA9PT0gJ2RpYWwnKSB7XG4gICAgICAgICAgZW50aXR5LmNsaUNvbW1hbmQgPSB0aGlzLmRpYWxQb2xpY3lDbGlDb21tYW5kO1xuICAgICAgICAgIGVudGl0eS5hcGlSZXF1ZXN0ID0gdGhpcy5nZXREaWFsQXBpUmVxdWVzdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGVudGl0eS50eXBlID09PSAnc2VydmljZS1wb2xpY2llcycgJiYgZW50aXR5LnN1YnR5cGUgPT09ICdiaW5kJykge1xuICAgICAgICAgIGVudGl0eS5jbGlDb21tYW5kID0gdGhpcy5iaW5kUG9saWN5Q2xpQ29tbWFuZDtcbiAgICAgICAgICBlbnRpdHkuYXBpUmVxdWVzdCA9IHRoaXMuZ2V0QmluZEFwaVJlcXVlc3QoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzaG93U3VtbWFyeSgpIHtcbiAgICBjb25zdCBpbnRlcmNlcHRTdW1tYXJ5ID0ge1xuICAgICAgbmFtZTogdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLm5hbWUsXG4gICAgICB0eXBlOiAnY29uZmlncycsXG4gICAgICBzdWJ0eXBlOiAnaW50ZXJjZXB0JyxcbiAgICAgIGFwaURhdGE6IHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YSxcbiAgICAgIGNsaUNvbW1hbmQ6IHRoaXMuaW50ZXJjZXB0Q29uZmlnQ2xpQ29tbWFuZCxcbiAgICAgIGFwaVJlcXVlc3Q6ICcnLFxuICAgICAgYXBpVXJsOiB0aGlzLmludGVyY2VwdENvbmZpZ0FwaVVybCxcbiAgICAgIHN0YXR1czogJ2xvYWRpbmcnLFxuICAgICAgcmV0cnk6IHRoaXMuc2F2ZUludGVyY2VwdENvbmZpZy5iaW5kKHRoaXMpLFxuICAgIH07XG4gICAgY29uc3QgaG9zdFN1bW1hcnkgPSB7XG4gICAgICBuYW1lOiB0aGlzLmhvc3RDb25maWdBcGlEYXRhLm5hbWUsXG4gICAgICB0eXBlOiAnY29uZmlncycsXG4gICAgICBzdWJ0eXBlOiAnaG9zdCcsXG4gICAgICBhcGlEYXRhOiB0aGlzLmhvc3RDb25maWdBcGlEYXRhLFxuICAgICAgY2xpQ29tbWFuZDogdGhpcy5ob3N0Q29uZmlnQ2xpQ29tbWFuZCxcbiAgICAgIGFwaVJlcXVlc3Q6ICcnLFxuICAgICAgYXBpVXJsOiB0aGlzLmhvc3RDb25maWdBcGlVcmwsXG4gICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgIHJldHJ5OiB0aGlzLnNhdmVIb3N0Q29uZmlnLmJpbmQodGhpcylcbiAgICB9O1xuICAgIGNvbnN0IHN1bW1hcnlEYXRhOiBhbnkgPSBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnU2VydmljZXMnLFxuICAgICAgICBlbnRpdGllczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuc2VydmljZUFwaURhdGEubmFtZSxcbiAgICAgICAgICAgIHR5cGU6ICdzZXJ2aWNlcycsXG4gICAgICAgICAgICBhcGlEYXRhOiB0aGlzLnNlcnZpY2VBcGlEYXRhLFxuICAgICAgICAgICAgY2xpQ29tbWFuZDogdGhpcy5zZXJ2aWNlQ2xpQ29tbWFuZCxcbiAgICAgICAgICAgIGFwaVJlcXVlc3Q6ICcnLFxuICAgICAgICAgICAgYXBpVXJsOiB0aGlzLnNlcnZpY2VBcGlVcmwsXG4gICAgICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgICAgICAgIHJldHJ5OiB0aGlzLnNhdmVTZXJ2aWNlLmJpbmQodGhpcylcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnU2VydmljZSBQb2xpY2llcycsXG4gICAgICAgIGVudGl0aWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5kaWFsUG9saWN5QXBpRGF0YS5uYW1lLFxuICAgICAgICAgICAgdHlwZTogJ3NlcnZpY2UtcG9saWNpZXMnLFxuICAgICAgICAgICAgc3VidHlwZTogJ2RpYWwnLFxuICAgICAgICAgICAgYXBpRGF0YTogdGhpcy5kaWFsUG9saWN5QXBpRGF0YSxcbiAgICAgICAgICAgIGNsaUNvbW1hbmQ6IHRoaXMuZGlhbFBvbGljeUNsaUNvbW1hbmQsXG4gICAgICAgICAgICBhcGlSZXF1ZXN0OiAnJyxcbiAgICAgICAgICAgIGFwaVVybDogdGhpcy5kaWFsUG9saWN5QXBpVXJsLFxuICAgICAgICAgICAgc3RhdHVzOiAnbG9hZGluZycsXG4gICAgICAgICAgICByZXRyeTogKHN1bW1hcnlEYXRhKSA9PiB7IHRoaXMuc2F2ZVBvbGljeShzdW1tYXJ5RGF0YSwgJ0RpYWwnKSB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiAnc2VydmljZS1wb2xpY2llcycsXG4gICAgICAgICAgICBzdWJ0eXBlOiAnYmluZCcsXG4gICAgICAgICAgICBhcGlEYXRhOiB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhLFxuICAgICAgICAgICAgY2xpQ29tbWFuZDogdGhpcy5iaW5kUG9saWN5Q2xpQ29tbWFuZCxcbiAgICAgICAgICAgIGFwaVJlcXVlc3Q6ICcnLFxuICAgICAgICAgICAgYXBpVXJsOiB0aGlzLmJpbmRQb2xpY3lBcGlVcmwsXG4gICAgICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgICAgICAgIHJldHJ5OiAoc3VtbWFyeURhdGEpID0+IHsgdGhpcy5zYXZlUG9saWN5KHN1bW1hcnlEYXRhLCAnQmluZCcpIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdO1xuICAgIGlmICghdGhpcy5zZGtPbmx5RGlhbCAmJiAhdGhpcy5zZGtPbmx5QmluZCkge1xuICAgICAgc3VtbWFyeURhdGEuc3BsaWNlKDAsMCx7XG4gICAgICAgIHRpdGxlOiAnQ29uZmlndXJhdGlvbnMnLFxuICAgICAgICBlbnRpdGllczogW2ludGVyY2VwdFN1bW1hcnksIGhvc3RTdW1tYXJ5XVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5zZGtPbmx5RGlhbCkge1xuICAgICAgc3VtbWFyeURhdGEuc3BsaWNlKDAsMCx7XG4gICAgICAgIHRpdGxlOiAnQ29uZmlndXJhdGlvbnMnLFxuICAgICAgICBlbnRpdGllczogW2ludGVyY2VwdFN1bW1hcnldXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNka09ubHlCaW5kKSB7XG4gICAgICBzdW1tYXJ5RGF0YS5zcGxpY2UoMCwwLHtcbiAgICAgICAgdGl0bGU6ICdDb25maWd1cmF0aW9ucycsXG4gICAgICAgIGVudGl0aWVzOiBbaG9zdFN1bW1hcnldXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIHN1bW1hcnlEYXRhOiBzdW1tYXJ5RGF0YSxcbiAgICAgIGlzRWRpdDogdGhpcy5pc0VkaXRcbiAgICB9O1xuICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dGb3JtLm9wZW4oQ3JlYXRpb25TdW1tYXJ5RGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnbmV3Jykge1xuICAgICAgICB0aGlzLmluaXRGb3JtRGF0YSgpO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09ICdjYW5jZWwnKSB7XG4gICAgICAgIC8vLyBEbyBub3RoaW5nLCBzdGF5IG9uIHBhZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5pdERhdGFNb2RlbHMoKTtcbiAgICAgICAgdGhpcy5fZGF0YUNoYW5nZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJvdXRlcj8ubmF2aWdhdGVCeVVybChgJHt0aGlzLmJhc2VQYXRofWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzdW1tYXJ5RGF0YTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrTmFtZUNvbmZsaWN0cygpIHtcbiAgICBjb25zdCBmaWx0ZXI6IEZpbHRlck9iaiA9IHtcbiAgICAgIGZpbHRlck5hbWU6ICduYW1lJyxcbiAgICAgIGNvbHVtbklkOiAnbmFtZScsXG4gICAgICB2YWx1ZTogdGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgdHlwZTogJ1RFWFRJTlBVVCcsXG4gICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgdmVyYjogJz0nXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0czogYW55ID0ge1xuICAgICAgc2VydmljZUNvbmZsaWN0OiBmYWxzZSxcbiAgICAgIGludGVyY2VwdENvbmZsaWN0OiBmYWxzZSxcbiAgICAgIGhvc3RDb25mbGljdDogZmFsc2UsXG4gICAgICBkaWFsUG9saWN5Q29uZmxpY3Q6IGZhbHNlLFxuICAgICAgYmluZFBvbGljeUNvbmZsaWN0OiBmYWxzZSxcbiAgICAgIG5hbWVzOiBbXVxuICAgIH07XG4gICAgY29uc3QgcGFnaW5nID0gY2xvbmVEZWVwKHRoaXMueml0aVNlcnZpY2UuREVGQVVMVF9QQUdJTkcpO1xuICAgIHBhZ2luZy5ub1NlYXJjaCA9IGZhbHNlO1xuICAgIGNvbnN0IHNlcnZpY2VQcm9tID0gdGhpcy56aXRpU2VydmljZS5nZXQoJ3NlcnZpY2VzJywgcGFnaW5nLCBbZmlsdGVyXSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0cy5zZXJ2aWNlQ29uZmxpY3QgPSB0cnVlO1xuICAgICAgICByZXN1bHRzLm5hbWVzLnB1c2godGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmaWx0ZXIudmFsdWUgPSB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEubmFtZTtcbiAgICBjb25zdCBpbnRlcmNlcHRQcm9tID0gdGhpcy56aXRpU2VydmljZS5nZXQoJ2NvbmZpZ3MnLCBwYWdpbmcsIFtmaWx0ZXJdKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuZGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHRzLmludGVyY2VwdENvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0cy5uYW1lcy5wdXNoKHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5uYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmaWx0ZXIudmFsdWUgPSB0aGlzLmhvc3RDb25maWdBcGlEYXRhLm5hbWU7XG4gICAgY29uc3QgaG9zdFByb20gPSB0aGlzLnppdGlTZXJ2aWNlLmdldCgnY29uZmlncycsIHBhZ2luZywgW2ZpbHRlcl0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5kYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdHMuaG9zdENvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0cy5uYW1lcy5wdXNoKHRoaXMuaG9zdENvbmZpZ0FwaURhdGEubmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZmlsdGVyLnZhbHVlID0gdGhpcy5kaWFsUG9saWN5QXBpRGF0YS5uYW1lO1xuICAgIGNvbnN0IGRpYWxQcm9tID0gdGhpcy56aXRpU2VydmljZS5nZXQoJ3NlcnZpY2UtcG9saWNpZXMnLCBwYWdpbmcsIFtmaWx0ZXJdKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuZGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHRzLmRpYWxQb2xpY3lDb25mbGljdCA9IHRydWU7XG4gICAgICAgIHJlc3VsdHMubmFtZXMucHVzaCh0aGlzLmRpYWxQb2xpY3lBcGlEYXRhLm5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZpbHRlci52YWx1ZSA9IHRoaXMuYmluZFBvbGljeUFwaURhdGEubmFtZTtcbiAgICBjb25zdCBiaW5kUHJvbSA9IHRoaXMueml0aVNlcnZpY2UuZ2V0KCdzZXJ2aWNlLXBvbGljaWVzJywgcGFnaW5nLCBbZmlsdGVyXSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0cy5iaW5kUG9saWN5Q29uZmxpY3QgPSB0cnVlO1xuICAgICAgICByZXN1bHRzLm5hbWVzLnB1c2godGhpcy5iaW5kUG9saWN5QXBpRGF0YS5uYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbc2VydmljZVByb20sIGludGVyY2VwdFByb20sIGhvc3RQcm9tLCBkaWFsUHJvbSwgYmluZFByb21dKS50aGVuKCgpID0+IHtcbiAgICAgIGxldCBoYXNDb25mbGljdCA9IHJlc3VsdHMubmFtZXMubGVuZ3RoID4gMDtcbiAgICAgIGlmIChoYXNDb25mbGljdCkge1xuICAgICAgICB0aGlzLmVycm9ycy5uYW1lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Q29uZmxpY3RXYXJuaW5nKHJlc3VsdHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0NvbmZsaWN0O1xuICAgIH0pO1xuICB9XG5cbiAgc2hvd0NvbmZsaWN0V2FybmluZyhjb25mbGljdERhdGEpIHtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhcHBlbmRJZDogJ1NpbXBsZVNlcnZpY2VDb25mbGljdHMnLFxuICAgICAgdGl0bGU6ICdOYW1lIENvbmZsaWN0JyxcbiAgICAgIG1lc3NhZ2U6IGBUaGUgbmFtZSB5b3UgaGF2ZSBlbnRlcmVkIGhhcyBjb25mbGljdHMgZm9yIHRoZSBmb2xsb3dpbmcgZW50aXRpZXNgLFxuICAgICAgYnVsbGV0TGlzdDogY29uZmxpY3REYXRhLm5hbWVzLFxuICAgICAgc3VibWVzc2FnZTogYFBsZWFzZSB1cGRhdGUgdGhlIGVudGVyZWQgbmFtZSBhbmQgdHJ5IGFnYWluLmAsXG4gICAgICBjb25maXJtTGFiZWw6ICdSZXR1cm4nLFxuICAgICAgc2hvd0NhbmNlbExpbms6IGZhbHNlLFxuICAgICAgaW1hZ2VVcmw6ICcuLi8uLi9hc3NldHMvc3Zncy9Hcm93bF9FcnJvci5zdmcnXG4gICAgfTtcbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nRm9ybS5vcGVuKENvbmZpcm1Db21wb25lbnQsIHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRoaXMuZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCgpID0+IHtcbiAgICAgIHRoaXMubmFtZUZpZWxkSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0pXG4gIH1cblxuICBhc3luYyBzYXZlSW50ZXJjZXB0Q29uZmlnKHN1bW1hcnlEYXRhKSB7XG4gICAgY29uc3QgaXNOZXdDb25maWcgPSBpc0VtcHR5KHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YT8uaWQpO1xuXG4gICAgLy8gQ29uZGl0aW9uYWwgRGVsZXRpb24gKElkZW50aWNhbCBMb2dpYylcbiAgICBpZiAodGhpcy5zZGtPbmx5RGlhbCAmJiAhaXNOZXdDb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLmRlbGV0ZSgnY29uZmlncycsIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5pZCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNka09ubHlEaWFsICYmIGlzTmV3Q29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVXNlIHRoZSBIZWxwZXIgRnVuY3Rpb25cbiAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgdGhpcy5zYXZlQ29uZmlnKFxuICAgICAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEsXG4gICAgICAgICdpbnRlcmNlcHRJbmNyZW1lbnQnLFxuICAgICAgICAnaW50ZXJjZXB0Q29uZmlnSWQnLFxuICAgICAgICAnaW50ZXJjZXB0Q29uZmlnQ2xpQ29tbWFuZCdcbiAgICApO1xuXG4gICAgLy8gQXBwbHkgZmluYWwgc3RhdHVzIGxvZ2ljXG4gICAgc3VtbWFyeURhdGFbMF0uZW50aXRpZXNbMF0uc3RhdHVzID0gc3RhdHVzO1xuICB9XG5cbiAgYXN5bmMgc2F2ZUhvc3RDb25maWcoc3VtbWFyeURhdGEpIHtcbiAgICBjb25zdCBpc05ld0NvbmZpZyA9IGlzRW1wdHkodGhpcy5ob3N0Q29uZmlnQXBpRGF0YT8uaWQpO1xuXG4gICAgLy8gQ29uZGl0aW9uYWwgRGVsZXRpb24gKElkZW50aWNhbCBMb2dpYylcbiAgICBpZiAodGhpcy5zZGtPbmx5RGlhbCAmJiAhaXNOZXdDb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLmRlbGV0ZSgnY29uZmlncycsIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEuaWQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZGtPbmx5RGlhbCAmJiBpc05ld0NvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFVzZSB0aGUgSGVscGVyIEZ1bmN0aW9uXG4gICAgY29uc3QgeyBzdGF0dXMsIGNvbmZpZ0FwaURhdGEgfSA9IGF3YWl0IHRoaXMuc2F2ZUNvbmZpZyhcbiAgICAgICAgdGhpcy5ob3N0Q29uZmlnQXBpRGF0YSxcbiAgICAgICAgJ2hvc3RJbmNyZW1lbnQnLFxuICAgICAgICAnaG9zdENvbmZpZ0lkJyxcbiAgICAgICAgJ2hvc3RDb25maWdDbGlDb21tYW5kJ1xuICAgICk7XG5cbiAgICAvLyBBcHBseSBmaW5hbCBzdGF0dXMgbG9naWMgKHNsaWdodGx5IGRpZmZlcmVudCB0aGFuIGludGVyY2VwdClcbiAgICBpZiAodGhpcy5zZGtPbmx5RGlhbCkge1xuICAgICAgc3VtbWFyeURhdGFbMF0uZW50aXRpZXNbMF0uc3RhdHVzID0gc3RhdHVzO1xuICAgICAgc3VtbWFyeURhdGFbMF0uZW50aXRpZXNbMF0uYXBpRGF0YSA9IGNvbmZpZ0FwaURhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1bW1hcnlEYXRhWzBdLmVudGl0aWVzWzFdLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgIHN1bW1hcnlEYXRhWzBdLmVudGl0aWVzWzBdLmFwaURhdGEgPSBjb25maWdBcGlEYXRhO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVDb25maWcoXG4gICAgICBjb25maWdBcGlEYXRhOiBhbnksICAgICAgLy8gZS5nLiwgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhXG4gICAgICBpbmNyZW1lbnRlcjogc3RyaW5nLCAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIGluY3JlbWVudGVyIHByb3BlcnR5ICgnaW50ZXJjZXB0SW5jcmVtZW50JyBvciAnaG9zdEluY3JlbWVudCcpXG4gICAgICBjb25maWdJZFByb3A6IHN0cmluZywgICAgLy8gVGhlIG5hbWUgb2YgdGhlIElEIHByb3BlcnR5ICgnaW50ZXJjZXB0Q29uZmlnSWQnIG9yICdob3N0Q29uZmlnSWQnKVxuICAgICAgY2xpQ29tbWFuZFByb3A6IHN0cmluZyAgIC8vIFRoZSBuYW1lIG9mIHRoZSBDTEkgY29tbWFuZCBwcm9wZXJ0eSAoJ2ludGVyY2VwdENvbmZpZ0NsaUNvbW1hbmQnIG9yICdob3N0Q29uZmlnQ2xpQ29tbWFuZCcpXG4gICk6IFByb21pc2U8YW55PiB7XG5cbiAgICBjb25zdCBpc05ld0NvbmZpZyA9IGlzRW1wdHkoY29uZmlnQXBpRGF0YT8uaWQpO1xuICAgIGNvbnN0IGluY3JlbWVudFZhbHVlID0gdGhpc1tpbmNyZW1lbnRlcl0gYXMgbnVtYmVyOyAvLyBHZXQgY3VycmVudCBpbmNyZW1lbnQgdmFsdWVcbiAgICBsZXQgc3RhdHVzOiBzdHJpbmc7XG4gICAgbGV0IGNvbmZpZ1Jlc3VsdDogYW55O1xuXG4gICAgaWYgKGlzTmV3Q29uZmlnKSB7XG4gICAgICB0aGlzW2luY3JlbWVudGVyXSA9IGluY3JlbWVudFZhbHVlICsgMTsgLy8gSW5jcmVtZW50IGZvciBuYW1pbmdcblxuICAgICAgbGV0IHBvc3RGaXggPSAnJztcbiAgICAgIGlmICh0aGlzW2luY3JlbWVudGVyXSA+IDApIHtcbiAgICAgICAgcG9zdEZpeCA9ICdfJyArIHRoaXNbaW5jcmVtZW50ZXJdO1xuICAgICAgfVxuXG4gICAgICBjb25maWdBcGlEYXRhLm5hbWUgPSBjb25maWdBcGlEYXRhLm5hbWUgKyBwb3N0Rml4O1xuXG4gICAgICBjb25maWdSZXN1bHQgPSBhd2FpdCB0aGlzLnNhdmVFbnRpdHkoJ2NvbmZpZ3MnLCBjb25maWdBcGlEYXRhKS5jYXRjaCgocmVzdWx0KSA9PiByZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWdSZXN1bHQgPSBhd2FpdCB0aGlzLnVwZGF0ZUVudGl0eSgnY29uZmlncycsIGNvbmZpZ0FwaURhdGEpLmNhdGNoKChyZXN1bHQpID0+IHJlc3VsdCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ1Jlc3VsdC5lcnJvcikge1xuICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2V0IHRoZSBjb25maWcgSUQgcHJvcGVydHkgZHluYW1pY2FsbHkgKGUuZy4sIHRoaXMuaW50ZXJjZXB0Q29uZmlnSWQpXG4gICAgICB0aGlzW2NvbmZpZ0lkUHJvcF0gPSBjb25maWdBcGlEYXRhLmlkIHx8IGNvbmZpZ1Jlc3VsdC5pZCB8fCBjb25maWdSZXN1bHQuZGF0YS5pZDtcblxuICAgICAgLy8gQWRkIHRoZSBuZXcgY29uZmlnIElEIHRvIHNlcnZpY2VBcGlEYXRhIChhc3N1bWluZyBzZXJ2aWNlQXBpRGF0YSBpcyBhY2Nlc3NpYmxlIHZpYSAndGhpcycpXG4gICAgICB0aGlzLnNlcnZpY2VBcGlEYXRhLmNvbmZpZ3MucHVzaCh0aGlzW2NvbmZpZ0lkUHJvcF0pO1xuXG4gICAgICAvLyBTZXQgdGhlIENMSSBjb21tYW5kIGR5bmFtaWNhbGx5XG4gICAgICB0aGlzW2NsaUNvbW1hbmRQcm9wXSA9IGB6aXRpIGVkZ2UgY3JlYXRlIGNvbmZpZyAnJHtjb25maWdBcGlEYXRhLm5hbWV9JyAnJHtjb25maWdBcGlEYXRhLmNvbmZpZ1R5cGVJZH0nICcke0pTT04uc3RyaW5naWZ5KGNvbmZpZ0FwaURhdGEuZGF0YSl9J2A7XG5cbiAgICAgIHN0YXR1cyA9ICdkb25lJztcbiAgICAgIHRoaXNbaW5jcmVtZW50ZXJdID0gLTE7IC8vIFJlc2V0IGluY3JlbWVudGVyXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhdHVzLCBjb25maWdSZXN1bHQsIGNvbmZpZ0FwaURhdGEgfTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVTZXJ2aWNlKHN1bW1hcnlEYXRhKSB7XG4gICAgY29uc3QgaXNOZXdTZXJ2aWNlID0gaXNFbXB0eSh0aGlzLnNlcnZpY2VBcGlEYXRhPy5pZCk7XG5cbiAgICBsZXQgc2VydmljZVJlc3VsdDtcbiAgICBpZiAoaXNOZXdTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnNlcnZpY2VJbmNyZW1lbnQrKztcbiAgICAgIGxldCBwb3N0Rml4ID0gJyc7XG4gICAgICBpZiAodGhpcy5zZXJ2aWNlSW5jcmVtZW50ID4gMCkge1xuICAgICAgICBwb3N0Rml4ID0gJ18nICsgdGhpcy5zZXJ2aWNlSW5jcmVtZW50O1xuICAgICAgfVxuICAgICAgdGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lID0gdGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lICsgcG9zdEZpeDtcbiAgICAgIHNldCh0aGlzLnNlcnZpY2VBcGlEYXRhLCAndGFncy5zZXJ2aWNlLXR5cGUnLCAnc2ltcGxlJyk7XG4gICAgICBzZXJ2aWNlUmVzdWx0ID0gYXdhaXQgdGhpcy5zYXZlRW50aXR5KCdzZXJ2aWNlcycsIHRoaXMuc2VydmljZUFwaURhdGEpLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXJ2aWNlUmVzdWx0ID0gYXdhaXQgdGhpcy51cGRhdGVFbnRpdHkoJ3NlcnZpY2VzJywgdGhpcy5zZXJ2aWNlQXBpRGF0YSkuY2F0Y2goKHJlc3VsdCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IHNlcnZpY2VTdGF0dXM7XG4gICAgaWYgKHNlcnZpY2VSZXN1bHQuZXJyb3IpIHtcbiAgICAgIHNlcnZpY2VTdGF0dXMgPSAnZXJyb3InO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlcnZpY2VJZCA9IHRoaXMuc2VydmljZUFwaURhdGEuaWQgPyB0aGlzLnNlcnZpY2VBcGlEYXRhLmlkIDogKHNlcnZpY2VSZXN1bHQuaWQgPyBzZXJ2aWNlUmVzdWx0LmlkIDogc2VydmljZVJlc3VsdC5kYXRhLmlkKTtcbiAgICAgIHNlcnZpY2VTdGF0dXMgPSAnZG9uZSc7XG4gICAgICBsZXQgY2xpQ29uZmlnSWRzID0gJyc7XG4gICAgICBpZiAoIXRoaXMuc2RrT25seURpYWwgJiYgIXRoaXMuc2RrT25seUJpbmQpIHtcbiAgICAgICAgY2xpQ29uZmlnSWRzID0gYC0tY29uZmlncyAnJHt0aGlzLmludGVyY2VwdENvbmZpZ0lkfSwke3RoaXMuaG9zdENvbmZpZ0lkfSdgO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5zZGtPbmx5QmluZCAmJiB0aGlzLnNka09ubHlCaW5kKSB7XG4gICAgICAgIGNsaUNvbmZpZ0lkcyA9IGAtLWNvbmZpZ3MgJyR7dGhpcy5pbnRlcmNlcHRDb25maWdJZH0nYDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZGtPbmx5QmluZCAmJiAhdGhpcy5zZGtPbmx5QmluZCkge1xuICAgICAgICBjbGlDb25maWdJZHMgPSBgLS1jb25maWdzICcke3RoaXMuaW50ZXJjZXB0Q29uZmlnSWR9J2A7XG4gICAgICB9XG4gICAgICB0aGlzLnNlcnZpY2VDbGlDb21tYW5kID0gYHppdGkgZWRnZSBjcmVhdGUgc2VydmljZSAnJHt0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWV9JyAke2NsaUNvbmZpZ0lkc31gXG4gICAgICB0aGlzLnNlcnZpY2VJbmNyZW1lbnQgPSAtMTtcbiAgICB9XG4gICAgY29uc3Qgc3VtbWFyeUluZGV4ID0gKHRoaXMuc2RrT25seURpYWwgJiYgdGhpcy5zZGtPbmx5QmluZCkgPyAwIDogMTtcbiAgICBzdW1tYXJ5RGF0YVtzdW1tYXJ5SW5kZXhdLmVudGl0aWVzWzBdLnN0YXR1cyA9IHNlcnZpY2VTdGF0dXM7XG4gIH1cblxuICBhc3luYyBzYXZlUG9saWN5KHN1bW1hcnlEYXRhLCB0eXBlID0gJ0RpYWwnKSB7XG4gICAgY29uc3QgaXNOZXdQb2xpY3kgPSBpc0VtcHR5KHRoaXMuc2VydmljZUFwaURhdGE/LmlkKTtcblxuICAgIGxldCBwb2xpY3lBcGlEYXRhLCBwb2xpY3lSZXN1bHQsIHJvbGVBdHRyaWJ1dGVzLCBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgbGV0IGNsaVJvbGVzID0gJyc7XG4gICAgbGV0IHN0YXR1cyA9ICcnO1xuICAgIGlmIChpc05ld1BvbGljeSkge1xuICAgICAgaWYgKHR5cGUgPT09ICdEaWFsJykge1xuICAgICAgICB0aGlzLmRpYWxJbmNyZW1lbnQrKztcbiAgICAgICAgbGV0IHBvc3RGaXggPSAnJztcbiAgICAgICAgaWYgKHRoaXMuZGlhbEluY3JlbWVudCA+IDApIHtcbiAgICAgICAgICBwb3N0Rml4ID0gJ18nICsgdGhpcy5kaWFsSW5jcmVtZW50O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlhbFBvbGljeUFwaURhdGEubmFtZSA9IHRoaXMuZGlhbFBvbGljeUFwaURhdGEubmFtZSArIHBvc3RGaXg7XG4gICAgICAgIHBvbGljeUFwaURhdGEgPSB0aGlzLmRpYWxQb2xpY3lBcGlEYXRhO1xuICAgICAgICByb2xlQXR0cmlidXRlcyA9IHRoaXMuZGlhbFBvbGljeVJvbGVBdHRyaWJ1dGVzO1xuICAgICAgICBuYW1lZEF0dHJpYnV0ZXMgPSB0aGlzLmRpYWxQb2xpY3lOYW1lZEF0dHJpYnV0ZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJpbmRJbmNyZW1lbnQrKztcbiAgICAgICAgbGV0IHBvc3RGaXggPSAnJztcbiAgICAgICAgaWYgKHRoaXMuYmluZEluY3JlbWVudCA+IDApIHtcbiAgICAgICAgICBwb3N0Rml4ID0gJ18nICsgdGhpcy5iaW5kSW5jcmVtZW50O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmluZFBvbGljeUFwaURhdGEubmFtZSA9IHRoaXMuYmluZFBvbGljeUFwaURhdGEubmFtZSArIHBvc3RGaXg7XG4gICAgICAgIHBvbGljeUFwaURhdGEgPSB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhO1xuICAgICAgICByb2xlQXR0cmlidXRlcyA9IHRoaXMuYmluZFBvbGljeVJvbGVBdHRyaWJ1dGVzO1xuICAgICAgICBuYW1lZEF0dHJpYnV0ZXMgPSB0aGlzLmJpbmRQb2xpY3lOYW1lZEF0dHJpYnV0ZXM7XG4gICAgICB9XG4gICAgICBwb2xpY3lBcGlEYXRhLnNlcnZpY2VSb2xlcyA9IFtgQCR7dGhpcy5zZXJ2aWNlSWR9YF07XG4gICAgICBwb2xpY3lBcGlEYXRhLmlkZW50aXR5Um9sZXMgPSBuYW1lZEF0dHJpYnV0ZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICAgIGNsaVJvbGVzICs9ICdAJyArIHRoaXMuaWRlbnRpdGllc05hbWVJZE1hcFtuYW1lXSArICcsJztcbiAgICAgICAgcmV0dXJuICdAJyArIHRoaXMuaWRlbnRpdGllc05hbWVJZE1hcFtuYW1lXTtcbiAgICAgIH0pO1xuICAgICAgcG9saWN5QXBpRGF0YS5pZGVudGl0eVJvbGVzID0gWy4uLnBvbGljeUFwaURhdGEuaWRlbnRpdHlSb2xlcywgLi4ucm9sZUF0dHJpYnV0ZXMubWFwKChyb2xlKSA9PiB7XG4gICAgICAgIGNsaVJvbGVzICs9ICcjJyArIHJvbGUgKyAnLCc7XG4gICAgICAgIHJldHVybiAnIycgKyByb2xlO1xuICAgICAgfSldO1xuICAgICAgY2xpUm9sZXMgPSBjbGlSb2xlcy5zbGljZSgwLCAtMSk7XG4gICAgICBwb2xpY3lSZXN1bHQgPSBhd2FpdCB0aGlzLnNhdmVFbnRpdHkoJ3NlcnZpY2UtcG9saWNpZXMnLCBwb2xpY3lBcGlEYXRhKS5jYXRjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGUgPT09ICdEaWFsJykge1xuICAgICAgICBwb2xpY3lBcGlEYXRhID0gdGhpcy5kaWFsUG9saWN5QXBpRGF0YTtcbiAgICAgICAgcm9sZUF0dHJpYnV0ZXMgPSB0aGlzLmRpYWxQb2xpY3lSb2xlQXR0cmlidXRlcztcbiAgICAgICAgbmFtZWRBdHRyaWJ1dGVzID0gdGhpcy5kaWFsUG9saWN5TmFtZWRBdHRyaWJ1dGVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9saWN5QXBpRGF0YSA9IHRoaXMuYmluZFBvbGljeUFwaURhdGE7XG4gICAgICAgIHJvbGVBdHRyaWJ1dGVzID0gdGhpcy5iaW5kUG9saWN5Um9sZUF0dHJpYnV0ZXM7XG4gICAgICAgIG5hbWVkQXR0cmlidXRlcyA9IHRoaXMuYmluZFBvbGljeU5hbWVkQXR0cmlidXRlcztcbiAgICAgIH1cbiAgICAgIHBvbGljeUFwaURhdGEuc2VydmljZVJvbGVzID0gW2BAJHt0aGlzLnNlcnZpY2VJZH1gXTtcbiAgICAgIHBvbGljeUFwaURhdGEuaWRlbnRpdHlSb2xlcyA9IG5hbWVkQXR0cmlidXRlcy5tYXAoKG5hbWUpID0+IHtcbiAgICAgICAgY2xpUm9sZXMgKz0gJ0AnICsgdGhpcy5pZGVudGl0aWVzTmFtZUlkTWFwW25hbWVdICsgJywnO1xuICAgICAgICByZXR1cm4gJ0AnICsgdGhpcy5pZGVudGl0aWVzTmFtZUlkTWFwW25hbWVdO1xuICAgICAgfSk7XG4gICAgICBwb2xpY3lBcGlEYXRhLmlkZW50aXR5Um9sZXMgPSBbLi4ucG9saWN5QXBpRGF0YS5pZGVudGl0eVJvbGVzLCAuLi5yb2xlQXR0cmlidXRlcy5tYXAoKHJvbGUpID0+IHtcbiAgICAgICAgY2xpUm9sZXMgKz0gJyMnICsgcm9sZSArICcsJztcbiAgICAgICAgcmV0dXJuICcjJyArIHJvbGU7XG4gICAgICB9KV07XG4gICAgICBjbGlSb2xlcyA9IGNsaVJvbGVzLnNsaWNlKDAsIC0xKTtcbiAgICAgIHBvbGljeVJlc3VsdCA9IGF3YWl0IHRoaXMudXBkYXRlRW50aXR5KCdzZXJ2aWNlLXBvbGljaWVzJywgcG9saWN5QXBpRGF0YSkuY2F0Y2goKHJlc3VsdCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHBvbGljeVJlc3VsdC5lcnJvcikge1xuICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdHVzID0gJ2RvbmUnO1xuICAgIH1cbiAgICBjb25zdCBzdW1tYXJ5SW5kZXggPSAodGhpcy5zZGtPbmx5RGlhbCAmJiB0aGlzLnNka09ubHlCaW5kKSA/IDEgOiAyO1xuICAgIGNvbnN0IGVudGl0eUluZGV4ID0gdHlwZSA9PT0gJ0RpYWwnID8gMCA6IDE7XG4gICAgc3VtbWFyeURhdGFbc3VtbWFyeUluZGV4XS5lbnRpdGllc1tlbnRpdHlJbmRleF0uc3RhdHVzID0gc3RhdHVzO1xuICAgIGNvbnN0IGNsaUNvbW1hbmQgPSBgeml0aSBlZGdlIGNyZWF0ZSBzZXJ2aWNlLXBvbGljeSAnJHtwb2xpY3lBcGlEYXRhLm5hbWV9JyAke3R5cGV9IC0tc2VtYW50aWMgQW55T2YgLS1zZXJ2aWNlLXJvbGVzICdAJHt0aGlzLnNlcnZpY2VJZH0nIC0taWRlbnRpdHktcm9sZXMgJyR7Y2xpUm9sZXN9J2A7XG4gICAgaWYgKHR5cGUgPT09ICdEaWFsJykge1xuICAgICAgdGhpcy5kaWFsUG9saWN5Q2xpQ29tbWFuZCA9IGNsaUNvbW1hbmQ7XG4gICAgICBpZiAoc3RhdHVzID09PSAnZG9uZScpIHtcbiAgICAgICAgdGhpcy5kaWFsSW5jcmVtZW50ID0gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJpbmRJbmNyZW1lbnQgPSAtMTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iaW5kUG9saWN5Q2xpQ29tbWFuZCA9IGNsaUNvbW1hbmQ7XG4gICAgfVxuICB9XG5cbiAgc2F2ZUVudGl0eSh0eXBlLCBkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UucG9zdCh0eXBlLCBkYXRhLCB0cnVlKTtcbiAgfVxuXG4gIHVwZGF0ZUVudGl0eSh0eXBlLCBkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UucGF0Y2godHlwZSwgZGF0YSwgZGF0YS5pZCwgdHJ1ZSk7XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICB0aGlzLmVycm9ycyA9IHt9O1xuICAgIHRoaXMudmFsaWRhdGVTZXJ2aWNlTmFtZSgpO1xuICAgIHRoaXMudmFsaWRhdGVJbnRlcmNlcHRBZGRyZXNzKCk7XG4gICAgdGhpcy52YWxpZGF0ZUludGVyY2VwdFBvcnQoKTtcbiAgICB0aGlzLnZhbGlkYXRlSG9zdEFkZHJlc3MoKTtcbiAgICB0aGlzLnZhbGlkYXRlSG9zdFBvcnQoKTtcbiAgICB0aGlzLnZhbGlkYXRlRGlhbElkZW50aXRpZXMoKVxuICAgIHRoaXMudmFsaWRhdGVCaW5kSWRlbnRpdGllcygpO1xuICAgIHJldHVybiBpc0VtcHR5KHRoaXMuZXJyb3JzKTtcbiAgfVxuXG4gIHZhbGlkYXRlU2VydmljZU5hbWUoKSB7XG4gICAgaWYgKGlzRW1wdHkodGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lKSkge1xuICAgICAgdGhpcy5lcnJvcnMubmFtZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnbmFtZScpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlSW50ZXJjZXB0QWRkcmVzcygpIHtcbiAgICBpZiAodGhpcy5zZGtPbmx5RGlhbCkge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdpbnRlcmNlcHRBZGRyZXNzJyk7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2ludGVyY2VwdEFkZHJlc3NGb3JtYXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzRW1wdHkodGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEuYWRkcmVzc2VzKSB8fCBpc0VtcHR5KHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3Nlc1swXSkpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmludGVyY2VwdEFkZHJlc3MgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuaXNWYWxpZEludGVyY2VwdEhvc3QodGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEuYWRkcmVzc2VzWzBdKSkge1xuICAgICAgdGhpcy5lcnJvcnMuaW50ZXJjZXB0QWRkcmVzcyA9IHRydWU7XG4gICAgICB0aGlzLmVycm9ycy5pbnRlcmNlcHRBZGRyZXNzRm9ybWF0ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdpbnRlcmNlcHRBZGRyZXNzJyk7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2ludGVyY2VwdEFkZHJlc3NGb3JtYXQnKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUludGVyY2VwdFBvcnQoKSB7XG4gICAgaWYgKHRoaXMuc2RrT25seURpYWwpIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaW50ZXJjZXB0UG9ydCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNFbXB0eSh0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YS5wb3J0UmFuZ2VzKSkge1xuICAgICAgdGhpcy5lcnJvcnMuaW50ZXJjZXB0UG9ydCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlUG9ydFJhbmdlcyh0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YS5wb3J0UmFuZ2VzKSkge1xuICAgICAgdGhpcy5lcnJvcnMuaW50ZXJjZXB0UG9ydCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaW50ZXJjZXB0UG9ydCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlSG9zdEFkZHJlc3MoKSB7XG4gICAgaWYgKCF0aGlzLnNka09ubHlCaW5kICYmIGlzRW1wdHkodGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3MpKSB7XG4gICAgICB0aGlzLmVycm9ycy5ob3N0QWRkcmVzcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaG9zdEFkZHJlc3MnKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUhvc3RQb3J0KCkge1xuICAgIGlmICh0aGlzLnNka09ubHlCaW5kKSB7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2hvc3RQb3J0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc05pbCh0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEucG9ydCkgfHwgaXNOYU4odGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhLnBvcnQpKSB7XG4gICAgICB0aGlzLmVycm9ycy5ob3N0UG9ydCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghdGhpcy52YWxpZGF0aW9uU2VydmljZS5pc1ZhbGlkUG9ydCh0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEucG9ydCkpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmhvc3RQb3J0ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdob3N0UG9ydCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlRGlhbElkZW50aXRpZXMoKSB7XG4gICAgaWYgKGlzRW1wdHkoWy4uLnRoaXMuZGlhbFBvbGljeU5hbWVkQXR0cmlidXRlcywgLi4udGhpcy5kaWFsUG9saWN5Um9sZUF0dHJpYnV0ZXNdKSkge1xuICAgICAgdGhpcy5lcnJvcnMuZGlhbElkZW50aXRpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2RpYWxJZGVudGl0aWVzJyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVCaW5kSWRlbnRpdGllcygpIHtcbiAgICBpZiAoaXNFbXB0eShbLi4udGhpcy5iaW5kUG9saWN5TmFtZWRBdHRyaWJ1dGVzLCAuLi50aGlzLmJpbmRQb2xpY3lSb2xlQXR0cmlidXRlc10pKSB7XG4gICAgICB0aGlzLmVycm9ycy5iaW5kSWRlbnRpdGllcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnYmluZElkZW50aXRpZXMnKTtcbiAgICB9XG4gIH1cblxuICBnZXRTZXJ2aWNlc0FwaVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIGBjdXJsICcke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL3NlcnZpY2VzJyBcXFxcXG4gICAgICAtSCAnYWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonIFxcXFxcbiAgICAgIC1IICdjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb24nIFxcXFxcbiAgICAgIC1IICd6dC1zZXNzaW9uOiAke3RoaXMueml0aVNlc3Npb25JZH0nIFxcXFxcbiAgICAgIC0tZGF0YS1yYXcgJyR7SlNPTi5zdHJpbmdpZnkodGhpcy5zZXJ2aWNlQXBpRGF0YSl9JyBcXFxcYFxuICB9XG5cbiAgZ2V0SW50ZXJjZXB0Q29uZmlnQXBpUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gYGN1cmwgJyR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvY29uZmlncycgXFxcXFxuICAgICAgLUggJ2FjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyBcXFxcXG4gICAgICAtSCAnY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gICAgICAtSCAnenQtc2Vzc2lvbjogJHt0aGlzLnppdGlTZXNzaW9uSWR9JyBcXFxcXG4gICAgICAtLWRhdGEtcmF3ICcke0pTT04uc3RyaW5naWZ5KHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YSl9JyBcXFxcYFxuICB9XG5cbiAgZ2V0SG9zdENvbmZpZ0FwaVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIGBjdXJsICcke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL2NvbmZpZ3MnIFxcXFxcbiAgICAgIC1IICdhY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicgXFxcXFxuICAgICAgLUggJ2NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vanNvbicgXFxcXFxuICAgICAgLUggJ3p0LXNlc3Npb246ICR7dGhpcy56aXRpU2Vzc2lvbklkfScgXFxcXFxuICAgICAgLS1kYXRhLXJhdyAnJHtKU09OLnN0cmluZ2lmeSh0aGlzLmhvc3RDb25maWdBcGlEYXRhKX0nIFxcXFxgXG4gIH1cblxuICBnZXREaWFsQXBpUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gYGN1cmwgJyR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvc2VydmljZS1wb2xpY2llcycgXFxcXFxuICAgICAgLUggJ2FjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyBcXFxcXG4gICAgICAtSCAnY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gICAgICAtSCAnenQtc2Vzc2lvbjogJHt0aGlzLnppdGlTZXNzaW9uSWR9JyBcXFxcXG4gICAgICAtLWRhdGEtcmF3ICcke0pTT04uc3RyaW5naWZ5KHRoaXMuZGlhbFBvbGljeUFwaURhdGEpfScgXFxcXGA7XG4gIH1cblxuICBnZXRCaW5kQXBpUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gYGN1cmwgJyR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvc2VydmljZS1wb2xpY2llcycgXFxcXFxuICAgICAgLUggJ2FjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyBcXFxcXG4gICAgICAtSCAnY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gICAgICAtSCAnenQtc2Vzc2lvbjogJHt0aGlzLnppdGlTZXNzaW9uSWR9JyBcXFxcXG4gICAgICAtLWRhdGEtcmF3ICcke0pTT04uc3RyaW5naWZ5KHRoaXMuYmluZFBvbGljeUFwaURhdGEpfScgXFxcXGA7XG4gIH1cblxuICBpbml0RGF0YU1vZGVscygpIHtcbiAgICB0aGlzLnNlcnZpY2VBcGlEYXRhID0gdGhpcy5pbml0U2VydmljZUFwaURhdGE7XG4gICAgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEgPSB0aGlzLmluaXRJbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGE7XG4gICAgdGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhID0gdGhpcy5pbml0SG9zdENvbmZpZ0FwaURhdGEuZGF0YTtcbiAgICB0aGlzLmRpYWxQb2xpY3lBcGlEYXRhID0gdGhpcy5pbml0RGlhbFBvbGljeUFwaURhdGE7XG4gICAgdGhpcy5iaW5kUG9saWN5QXBpRGF0YSA9IHRoaXMuaW5pdEJpbmRQb2xpY3lBcGlEYXRhO1xuICB9XG5cbiAgY29udmVydFRvQWR2YW5jZWQoKSB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFwcGVuZElkOiAnQ29udmVydFNpbXBsZVNlcnZpY2UnLFxuICAgICAgdGl0bGU6ICdDb252ZXJ0IFNlcnZpY2UnLFxuICAgICAgbWVzc2FnZTogYEFyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byBjb252ZXJ0IHRoaXMgc2ltcGxlIHNlcnZpY2UgdG8gYW4gYWR2YW5jZWQgc2VydmljZT8gVGhpcyBjaGFuZ2UgY2Fubm90IGJlIHVuZG9uZS5gLFxuICAgICAgYnVsbGV0TGlzdDogW10sXG4gICAgICBjb25maXJtTGFiZWw6ICdZZXMnLFxuICAgICAgY2FuY2VsTGFiZWw6ICdPb3BzLCBubyBnZXQgbWUgb3V0IG9mIGhlcmUnLFxuICAgICAgaW1hZ2VVcmw6ICcuLi8uLi9hc3NldHMvc3Zncy9Hcm93bF9XYXJuaW5nLnN2ZycsXG4gICAgICBzaG93Q2FuY2VsTGluazogdHJ1ZVxuICAgIH07XG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ0Zvcm0ub3BlbihDb25maXJtQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0Py5jb25maXJtZWQpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlQXBpRGF0YS50YWdzWydzZXJ2aWNlLXR5cGUnXSA9ICdhZHZhbmNlZCc7XG4gICAgICAgIHRoaXMudXBkYXRlRW50aXR5KCdzZXJ2aWNlcycsIHRoaXMuc2VydmljZUFwaURhdGEpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAnU3VjY2VzcycsXG4gICAgICAgICAgICAgICAgYFNlcnZpY2UgVXBkYXRlZGAsXG4gICAgICAgICAgICAgICAgYFN1Y2Nlc3NmdWxseSBjb252ZXJ0ZWQgJHt0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWV9IHRvIGFuIGFkdmFuY2VkIHNlcnZpY2UuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1VSTFMuWklUSV9BRFZBTkNFRF9TRVJWSUNFICsgJy8nICsgdGhpcy5zZXJ2aWNlQXBpRGF0YS5pZF0pO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgICAgICAgYEZhaWxlZCB0byBVcGRhdGUgU2VydmljZWAsXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byBjb252ZXJ0ICR7dGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lfSB0byBhbiBhZHZhbmNlZCBzZXJ2aWNlLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgb3ZlcnJpZGUgY2hlY2tEYXRhQ2hhbmdlKCkge1xuICAgIGNvbnN0IHNlcnZpY2VEYXRhQ2hhbmdlID0gIWlzRXF1YWwodGhpcy5pbml0U2VydmljZUFwaURhdGEsIHRoaXMuc2VydmljZUFwaURhdGEpO1xuICAgIGNvbnN0IGludGVyY2VwdERhdGFDaGFuZ2UgPSAhaXNFcXVhbCh0aGlzLmluaXRJbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEsIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhKTtcbiAgICBjb25zdCBob3N0RGF0YUNoYW5nZSA9ICFpc0VxdWFsKHRoaXMuaW5pdEhvc3RDb25maWdBcGlEYXRhLmRhdGEsIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEuZGF0YSk7XG4gICAgY29uc3QgZGlhbERhdGFDaGFuZ2UgPSAhaXNFcXVhbCh0aGlzLmluaXREaWFsUG9saWN5QXBpRGF0YSwgdGhpcy5kaWFsUG9saWN5QXBpRGF0YSk7XG4gICAgY29uc3QgYmluZERhdGFDaGFuZ2UgPSAhaXNFcXVhbCh0aGlzLmluaXRCaW5kUG9saWN5QXBpRGF0YSwgdGhpcy5iaW5kUG9saWN5QXBpRGF0YSk7XG4gICAgY29uc3QgZGF0YUNoYW5nZSA9IHNlcnZpY2VEYXRhQ2hhbmdlICE9PSB0aGlzLnNlcnZpY2VEYXRhQ2hhbmdlIHx8IGludGVyY2VwdERhdGFDaGFuZ2UgIT09IHRoaXMuaW50ZXJjZXB0RGF0YUNoYW5nZSB8fCBob3N0RGF0YUNoYW5nZSAhPT0gdGhpcy5ob3N0RGF0YUNoYW5nZSB8fFxuICAgICAgICBkaWFsRGF0YUNoYW5nZSAhPT0gdGhpcy5kaWFsRGF0YUNoYW5nZSB8fCBiaW5kRGF0YUNoYW5nZSAhPT0gdGhpcy5iaW5kRGF0YUNoYW5nZTtcbiAgICBpZiAoZGF0YUNoYW5nZSkge1xuICAgICAgdGhpcy5zZXJ2aWNlRGF0YUNoYW5nZSA9IHNlcnZpY2VEYXRhQ2hhbmdlO1xuICAgICAgdGhpcy5pbnRlcmNlcHREYXRhQ2hhbmdlID0gaW50ZXJjZXB0RGF0YUNoYW5nZTtcbiAgICAgIHRoaXMuaG9zdERhdGFDaGFuZ2UgPSBob3N0RGF0YUNoYW5nZTtcbiAgICAgIHRoaXMuZGlhbERhdGFDaGFuZ2UgPSBkaWFsRGF0YUNoYW5nZTtcbiAgICAgIHRoaXMuYmluZERhdGFDaGFuZ2UgPSBiaW5kRGF0YUNoYW5nZTtcbiAgICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KGRhdGFDaGFuZ2UpO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhQ2hhbmdlID0gc2VydmljZURhdGFDaGFuZ2UgfHwgaW50ZXJjZXB0RGF0YUNoYW5nZSB8fCBob3N0RGF0YUNoYW5nZSB8fCBkaWFsRGF0YUNoYW5nZSB8fCBiaW5kRGF0YUNoYW5nZTtcbiAgICBhcHAuaXNEaXJ0eSA9IGZhbHNlO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwcm9qZWN0YWJsZS1mb3JtLXdyYXBwZXIgc2ltcGxlLXNlcnZpY2Utd3JhcHBlclwiXG4gICAgIChrZXl1cC5lbnRlcik9XCJzYXZlKCRldmVudClcIlxuICAgICAoa2V5dXAuZXNjYXBlKT1cImNsb3NlTW9kYWwodHJ1ZSwgZmFsc2UsICdjYXJkcycsICRldmVudClcIlxuICAgICB0YWJpbmRleD1cIjBcIlxuPlxuICAgIDxsaWItZm9ybS1oZWFkZXJcbiAgICAgICAgICAgIFtkYXRhXT1cImZvcm1EYXRhXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJpc0VkaXQgPyAnRWRpdCBTaW1wbGUgU2VydmljZScgOiAnQ3JlYXRlIGEgU2ltcGxlIFNlcnZpY2UnXCJcbiAgICAgICAgICAgIFthY3Rpb25CdXR0b25UZXh0XT1cIidTYXZlJ1wiXG4gICAgICAgICAgICBbbXVsdGlBY3Rpb25zXT1cIm11bHRpQWN0aW9uc1wiXG4gICAgICAgICAgICAoYWN0aW9uUmVxdWVzdGVkKT1cImhlYWRlckFjdGlvblJlcXVlc3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChtdWx0aUFjdGlvblJlcXVlc3RlZCk9XCJtdWx0aUFjdGlvblJlcXVlc3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFsoZm9ybVZpZXcpXT1cImZvcm1WaWV3XCJcbiAgICAgICAgICAgIFttb3JlQWN0aW9uc109XCJtb3JlQWN0aW9uc1wiXG4gICAgPjwvbGliLWZvcm0taGVhZGVyPlxuXG4gICAgPGRpdiBjbGFzcz1cInNpbXBsZS1zZXJ2aWNlLWZvcm0tY29udGFpbmVyIHByb2plY3RhYmxlLWZvcm0tY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLWNvbHVtbiB0aHJlZS1maWZ0aHNcIiAqbmdJZj1cInNob3dGb3JtXCI+XG4gICAgICAgICAgICA8ZGl2ICBpZD1cIklubGluZVNlcnZpY2VBcmVhXCIgY2xhc3M9XCJhbnlhZGRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ltcGxlLXNlcnZpY2UtaW5wdXRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXIgW3RpdGxlXT1cIidTZXJ2aWNlIERldGFpbHMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1pbnB1dC1ncm91cCBzZXJ2aWNlLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tZmllbGQtdGl0bGVcIj5TZXJ2aWNlIE5hbWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk5hbWUgdGhpcyBzZXJ2aWNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9mb2N1c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI25hbWVGaWVsZElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9ycy5uYW1lfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlcnZpY2VBcGlEYXRhLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInNlcnZpY2VOYW1lQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidmFsaWRhdGVTZXJ2aWNlTmFtZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1zdWItZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC10aXRsZVwiPlNFTEVDVCBPUiBDUkVBVEUgU0VSVklDRSBBVFRSSUJVVEVTPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi10YWctc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyldPVwic2VydmljZUFwaURhdGEucm9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZVJvbGVBdHRyaWJ1dGVzXT1cInNlcnZpY2VSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0FkZCBhdHRyaWJ1dGVzIHRvIGdyb3VwIHNlcnZpY2VzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2xpYi10YWctc2VsZWN0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaW1wbGUtc2VydmljZS1jZW50ZXItY29udGVudFwiICpuZ0lmPVwic2hvd0Zvcm1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQUNDRVNTSU5HIENPTkZJR1VSQVRJT04nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50U3R5bGVdPVwiJ3otaW5kZXg6IDEwMDAxJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGVscFRleHRdPVwiJ0hvdyB3aWxsIGNsaWVudCBhcHBsaWNhdGlvbnMgdXNlIHRoaXMgc2VydmljZT8gU3BlY2lmeSBhIGhvc3RuYW1lL0lQIGFuZCBwb3J0LCBvciB1c2UgdGhlICZxdW90O1NESyBPbmx5JnF1b3Q7IHRvZ2dsZSBmb3IgYW4gYXBwbGljYXRpb24gZW1iZWRkZWQgY29uZmlndXJhdGlvbi4nXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0LWdyb3VwIGFjY2Vzc2luZy1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+V2hhdCBpZGVudGl0aWVzIGNhbiBhY2Nlc3MgdGhpcyBzZXJ2aWNlPzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXRhZy1zZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZE5hbWVkQXR0cmlidXRlcyldPVwiZGlhbFBvbGljeU5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMpXT1cImRpYWxQb2xpY3lSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTmFtZWRBdHRyaWJ1dGVzXT1cImlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVSb2xlQXR0cmlidXRlc109XCJpZGVudGl0eVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IGlkZW50aXR5IGF0dHJpYnV0ZXMgdG8gZ3JhbnQgYWNjZXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGFzRXJyb3JdPVwiZXJyb3JzLmRpYWxJZGVudGl0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZE5hbWVkQXR0cmlidXRlc0NoYW5nZSk9XCJ2YWxpZGF0ZURpYWxJZGVudGl0aWVzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXNDaGFuZ2UpPVwidmFsaWRhdGVEaWFsSWRlbnRpdGllcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiZ2V0SWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbGliLXRhZy1zZWxlY3Rvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+SG93IHdpbGwgdGhlIHNlcnZpY2UgYmUgYWNjZXNzZWQ/PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGFkZHJlc3NQb3J0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaXRlbS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZmlnLWl0ZW0tbGFiZWxcIj5TREsgT05MWTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGstdG9nZ2xlIGZvcm0tZmllbGQtdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoR3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2RrT25seURpYWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgb246IHNka09ubHlEaWFsIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCIhc2RrT25seURpYWxcIiBjbGFzcz1cIm9uLWxhYmVsXCI+WUVTPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwic2RrT25seURpYWxcIiBjbGFzcz1cIm9mZi1sYWJlbFwiPk5PPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2hcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogc2RrT25seURpYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWhvc3RuYW1lLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maWctaXRlbS1sYWJlbFwiPkhPU1ROQU1FIC8gSVA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtaW5mbyBpbmZvaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBY2Nlc3NpbmcgaG9zdG5hbWVzIG11c3QgaW5jbHVkZSBhICcuJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJlcnJvcnMuaW50ZXJjZXB0QWRkcmVzc0Zvcm1hdFwiIGNsYXNzPVwiZXJyb3ItbGFiZWxcIj5BY2Nlc3NpbmcgaG9zdG5hbWVzIG11c3QgaW5jbHVkZSBhICcuJzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiSG93VG9cIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjEwMFwiIGRhdGEtaTE4bj1cIkVnSG9zdFwiIChjaGFuZ2UpPVwidmFsaWRhdGVJbnRlcmNlcHRBZGRyZXNzKClcIiBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9ycy5pbnRlcmNlcHRBZGRyZXNzfVwiIFtwbGFjZWhvbGRlcl09XCJzZGtPbmx5RGlhbCA/ICcnIDogJ2UuZy4gbXlzZXJ2aWNlLnppdGknXCIgWyhuZ01vZGVsKV09XCJzZGtPbmx5RGlhbCA/ICcnIDogaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3Nlc1swXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogc2RrT25seURpYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmZpZy1pdGVtLWxhYmVsXCI+UE9SVDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cIkhvd1RvUG9ydFwiIHR5cGU9XCJudW1iZXJcIiBtYXhsZW5ndGg9XCIxMFwiIChjaGFuZ2UpPVwidmFsaWRhdGVJbnRlcmNlcHRQb3J0KClcIiBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9ycy5pbnRlcmNlcHRQb3J0fVwiIFtwbGFjZWhvbGRlcl09XCJzZGtPbmx5RGlhbCA/ICcnIDogNDQzXCIgKGtleXVwKT1cImludGVyY2VwdFBvcnRDaGFuZ2VkKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInNka09ubHlEaWFsID8gJycgOiBpbnRlcmNlcHRQb3J0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInSE9TVElORyBDT05GSUdVUkFUSU9OJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudFN0eWxlXT1cIid6LWluZGV4OiAxMDAwMCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidXaGVyZSBzaG91bGQgdHJhZmZpYyBmb3IgdGhpcyBzZXJ2aWNlIGJlIHNlbnQ/IFNwZWNpZnkgYSBwcm90b2NvbCwgaG9zdG5hbWUvSVAsIGFuZCBwb3J0LCBvciB1c2UgdGhlICZxdW90O1NESyBPbmx5JnF1b3Q7IHRvZ2dsZSBmb3IgYW4gYXBwbGljYXRpb24gZW1iZWRkZWQgY29uZmlndXJhdGlvbi4nXCJcblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXQtZ3JvdXAgaG9zdGluZy1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+V2hhdCBpZGVudGl0aWVzIGNhbiBob3N0IHRoaXMgc2VydmljZT88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi10YWctc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMpXT1cImJpbmRQb2xpY3lOYW1lZEF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzKV09XCJiaW5kUG9saWN5Um9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZU5hbWVkQXR0cmlidXRlc109XCJpZGVudGl0eU5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlUm9sZUF0dHJpYnV0ZXNdPVwiaWRlbnRpdHlSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBpZGVudGl0eSBhdHRyaWJ1dGVzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGFzRXJyb3JdPVwiZXJyb3JzLmJpbmRJZGVudGl0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZE5hbWVkQXR0cmlidXRlc0NoYW5nZSk9XCJ2YWxpZGF0ZUJpbmRJZGVudGl0aWVzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXNDaGFuZ2UpPVwidmFsaWRhdGVCaW5kSWRlbnRpdGllcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiZ2V0SWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbGliLXRhZy1zZWxlY3Rvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+V2hlcmUgc2hvdWxkIHRyYWZmaWMgYmUgc2VudD88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgYWRkcmVzc0Z1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maWctaXRlbS1sYWJlbFwiPlNESyBPTkxZPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNkay10b2dnbGUgZm9ybS1maWVsZC10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2hHcmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZGtPbmx5QmluZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBvbjogc2RrT25seUJpbmQgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cIiFzZGtPbmx5QmluZFwiIGNsYXNzPVwib24tbGFiZWxcIj5ZRVM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCJzZGtPbmx5QmluZFwiIGNsYXNzPVwib2ZmLWxhYmVsXCI+Tk88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN3aXRjaFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWl0ZW0tY29udGFpbmVyXCIgW25nQ2xhc3NdPVwie2Rpc2FibGVkOiBzZGtPbmx5QmluZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZmlnLWl0ZW0tbGFiZWxcIj5QUk9UT0NPTDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJIb3N0ZWRQcm90b2NvbFwiIChjaGFuZ2UpPVwiaG9zdFByb3RvY29sc0NoYW5nZWQoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwic2RrT25seUJpbmQgPyAnJyA6IGhvc3RQcm90b2NvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ0Y3BcIj5UQ1A8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidWRwXCIgPlVEUDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJib3RoXCIgPlRDUC9VRFA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogc2RrT25seUJpbmR9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmZpZy1pdGVtLWxhYmVsXCI+SE9TVE5BTUUgLyBJUDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cIkhvc3RlZEhvc3RcIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjEwMFwiIGRhdGEtaTE4bj1cIkVnSG9zdFwiIChjaGFuZ2UpPVwidmFsaWRhdGVIb3N0QWRkcmVzcygpXCIgW25nQ2xhc3NdPVwie2Vycm9yOiBlcnJvcnMuaG9zdEFkZHJlc3N9XCIgW3BsYWNlaG9sZGVyXT1cInNka09ubHlCaW5kID8gJycgOiAnZS5nLiBteXNlcnZpY2Uueml0aSdcIiBbKG5nTW9kZWwpXT1cInNka09ubHlCaW5kID8gJycgOiBob3N0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaXRlbS1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7ZGlzYWJsZWQ6IHNka09ubHlCaW5kfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maWctaXRlbS1sYWJlbFwiPlBPUlQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJIb3N0ZWRQb3J0XCIgdHlwZT1cIm51bWJlclwiIG1heGxlbmd0aD1cIjEwXCIgKGNoYW5nZSk9XCJ2YWxpZGF0ZUhvc3RQb3J0KClcIiBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9ycy5ob3N0UG9ydH1cIiBbcGxhY2Vob2xkZXJdPVwic2RrT25seUJpbmQgPyAnJyA6IDQ0M1wiIFsobmdNb2RlbCldPVwic2RrT25seUJpbmQgPyAnJyA6IGhvc3RDb25maWdBcGlEYXRhLmRhdGEucG9ydFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpYi1mb3JtLWZpZWxkLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
998
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXNlcnZpY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL3NlcnZpY2Uvc2ltcGxlLXNlcnZpY2Uvc2ltcGxlLXNlcnZpY2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL3NlcnZpY2Uvc2ltcGxlLXNlcnZpY2Uvc2ltcGxlLXNlcnZpY2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBa0IsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RixPQUFPLEVBQUMseUJBQXlCLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFDLGlCQUFpQixFQUFrQixNQUFNLHdDQUF3QyxDQUFDO0FBRzFGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUU5RCxPQUFPLEVBQUMsOEJBQThCLEVBQUMsTUFBTSxvRUFBb0UsQ0FBQztBQUNsSCxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQVcsR0FBRyxFQUFFLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUszRixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUVwRSxPQUFPLEVBQUMs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K01BeEc1QixxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkE4RkksS0FBSztzQkFBZCxNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBbUJNLFFBQVE7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQcm9qZWN0YWJsZUZvcm19IGZyb20gXCIuLi8uLi9wcm9qZWN0YWJsZS1mb3JtLmNsYXNzXCI7XG5pbXBvcnQge1NFVFRJTkdTX1NFUlZJQ0UsIFNldHRpbmdzU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2VcIjtcbmltcG9ydCB7U0VSVklDRV9FWFRFTlNJT05fU0VSVklDRSwgU2VydmljZUZvcm1TZXJ2aWNlfSBmcm9tIFwiLi4vc2VydmljZS1mb3JtLnNlcnZpY2VcIjtcbmltcG9ydCB7WklUSV9EQVRBX1NFUlZJQ0UsIFppdGlEYXRhU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL3ppdGktZGF0YS5zZXJ2aWNlXCI7XG5pbXBvcnQge0dyb3dsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIuc2VydmljZVwiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vZXh0ZW5kYWJsZS9leHRlbnNpb25zLW5vb3Auc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyTW9kZWx9IGZyb20gXCIuLi8uLi8uLi9tZXNzYWdpbmcvZ3Jvd2xlci5tb2RlbFwiO1xuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcbmltcG9ydCB7Q3JlYXRpb25TdW1tYXJ5RGlhbG9nQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vLi4vY3JlYXRpb24tc3VtbWFyeS1kaWFsb2cvY3JlYXRpb24tc3VtbWFyeS1kaWFsb2cuY29tcG9uZW50XCI7XG5pbXBvcnQge2lzRW1wdHksIGlzTmlsLCBpc05hTiwgdW5zZXQsIGNsb25lRGVlcCwgaXNFcXVhbCwgZm9yRWFjaCwgc2V0LCBnZXR9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1ZhbGlkYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtTZXJ2aWNlc1BhZ2VTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vLi4vcGFnZXMvc2VydmljZXMvc2VydmljZXMtcGFnZS5zZXJ2aWNlXCI7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7RmlsdGVyT2JqfSBmcm9tIFwiLi4vLi4vLi4vZGF0YS10YWJsZS9kYXRhLXRhYmxlLWZpbHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQge0NvbmZpcm1Db21wb25lbnR9IGZyb20gXCIuLi8uLi8uLi9jb25maXJtL2NvbmZpcm0uY29tcG9uZW50XCI7XG5pbXBvcnQge0xvY2F0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1VSTFN9IGZyb20gXCIuLi8uLi8uLi8uLi91cmxzXCI7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mfSBmcm9tIFwicnhqc1wiO1xuXG4vLyBAdHMtaWdub3JlXG5jb25zdCB7YXBwfSA9IHdpbmRvdztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXNpbXBsZS1zZXJ2aWNlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NpbXBsZS1zZXJ2aWNlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2ltcGxlLXNlcnZpY2UuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTaW1wbGVTZXJ2aWNlQ29tcG9uZW50IGV4dGVuZHMgUHJvamVjdGFibGVGb3JtIHtcbiAgQElucHV0KCkgc2VydmljZVJvbGVBdHRyaWJ1dGVzOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBpZGVudGl0eVJvbGVBdHRyaWJ1dGVzOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBpZGVudGl0eU5hbWVkQXR0cmlidXRlczogYW55W10gPSBbXTtcblxuICBkYXRhSW5pdCA9IGZhbHNlO1xuICBzaG93Rm9ybSA9IHRydWU7XG4gIGZvcm1WaWV3ID0gJ3NpbXBsZSc7XG4gIGNvbnRyb2xsZXJEb21haW4gPSAnJztcbiAgeml0aVNlc3Npb25JZDtcbiAgaW50ZXJjZXB0UG9ydDtcbiAgaG9zdFByb3RvY29sID0gJ3RjcCc7XG4gIHNlcnZpY2VDbGlDb21tYW5kID0gJyc7XG4gIGludGVyY2VwdENvbmZpZ0NsaUNvbW1hbmQgPSAnJztcbiAgaG9zdENvbmZpZ0NsaUNvbW1hbmQgPSAnJztcbiAgZGlhbFBvbGljeUNsaUNvbW1hbmQgPSAnJztcbiAgYmluZFBvbGljeUNsaUNvbW1hbmQgPSAnJztcbiAgc2VydmljZUFwaVVybCA9ICcnO1xuICBpbnRlcmNlcHRDb25maWdBcGlVcmwgPSAnJztcbiAgaG9zdENvbmZpZ0FwaVVybCA9ICcnO1xuICBkaWFsUG9saWN5QXBpVXJsID0gJyc7XG4gIGJpbmRQb2xpY3lBcGlVcmwgPSAnJztcbiAgaW5pdFNlcnZpY2VBcGlEYXRhID0ge1xuICAgIG5hbWU6IFwiXCIsXG4gICAgcm9sZUF0dHJpYnV0ZXM6IFtdLFxuICAgIGNvbmZpZ3M6IFtdLFxuICAgIGVuY3J5cHRpb25SZXF1aXJlZDogdHJ1ZVxuICB9O1xuICBpbml0SW50ZXJjZXB0Q29uZmlnQXBpRGF0YSA9IHtcbiAgICBuYW1lOiBcIlwiLFxuICAgIGNvbmZpZ1R5cGVJZDpcImc3Y0lXYmNHZ1wiLFxuICAgIGRhdGE6IHtcbiAgICAgIHBvcnRSYW5nZXM6IFtdLFxuICAgICAgYWRkcmVzc2VzOiBbXSxcbiAgICAgIHByb3RvY29sczogWyd0Y3AnLCAndWRwJ11cbiAgICB9XG4gIH07XG4gIGluaXRIb3N0Q29uZmlnQXBpRGF0YSA9IHtcbiAgICBuYW1lOiAnJyxcbiAgICBjb25maWdUeXBlSWQ6IFwiTkg1cDRGcEdSXCIsXG4gICAgZGF0YToge1xuICAgICAgYWRkcmVzczogXCJcIixcbiAgICAgIHBvcnQ6IHVuZGVmaW5lZCxcbiAgICAgIGZvcndhcmRQcm90b2NvbDogdHJ1ZSxcbiAgICAgIGFsbG93ZWRQcm90b2NvbHM6IFsndGNwJ11cbiAgICB9XG4gIH07XG4gIGluaXREaWFsUG9saWN5QXBpRGF0YSA9IHtcbiAgICBuYW1lOiBcIlwiLFxuICAgIHR5cGU6IFwiRGlhbFwiLFxuICAgIHNlbWFudGljOiBcIkFueU9mXCIsXG4gICAgc2VydmljZVJvbGVzOiBbXSxcbiAgICBpZGVudGl0eVJvbGVzOiBbXVxuICB9O1xuICBpbml0QmluZFBvbGljeUFwaURhdGEgPSB7XG4gICAgbmFtZTogXCJcIixcbiAgICB0eXBlOiBcIkJpbmRcIixcbiAgICBzZW1hbnRpYzogXCJBbnlPZlwiLFxuICAgIHNlcnZpY2VSb2xlczogW10sXG4gICAgaWRlbnRpdHlSb2xlczogW11cbiAgfTtcbiAgc2VydmljZUFwaURhdGE7XG4gIGludGVyY2VwdENvbmZpZ0FwaURhdGE7XG4gIGhvc3RDb25maWdBcGlEYXRhO1xuICBkaWFsUG9saWN5QXBpRGF0YTtcbiAgYmluZFBvbGljeUFwaURhdGE7XG4gIGRpYWxQb2xpY3lOYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgZGlhbFBvbGljeVJvbGVBdHRyaWJ1dGVzID0gW107XG4gIGJpbmRQb2xpY3lOYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgYmluZFBvbGljeVJvbGVBdHRyaWJ1dGVzID0gW107XG4gIGlkZW50aXRpZXNOYW1lSWRNYXAgPSB7fTtcbiAgaWRlbnRpdGllc0lkTmFtZU1hcCA9IHt9O1xuICBpbnRlcmNlcHRDb25maWdJZDtcbiAgaG9zdENvbmZpZ0lkO1xuICBzZXJ2aWNlSWQ7XG4gIHNka09ubHlEaWFsID0gZmFsc2U7XG4gIHNka09ubHlCaW5kID0gZmFsc2U7XG4gIGRpYWxvZ1JlZjogYW55O1xuXG4gIGludGVyY2VwdEluY3JlbWVudCA9IC0xO1xuICBob3N0SW5jcmVtZW50ID0gLTE7XG4gIHNlcnZpY2VJbmNyZW1lbnQgPSAtMTtcbiAgZGlhbEluY3JlbWVudCA9IC0xO1xuICBiaW5kSW5jcmVtZW50ID0gLTE7XG5cbiAgc2VydmljZURhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgaW50ZXJjZXB0RGF0YUNoYW5nZSA9IGZhbHNlO1xuICBob3N0RGF0YUNoYW5nZSA9IGZhbHNlO1xuICBkaWFsRGF0YUNoYW5nZSA9IGZhbHNlO1xuICBiaW5kRGF0YUNoYW5nZSA9IGZhbHNlO1xuICBpZGVudGl0aWVzSW5pdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oZmFsc2UpO1xuICBlbnRpdGllc0luaXQgPSBmYWxzZTtcblxuICBtdWx0aUFjdGlvbnMgPSBbXTtcblxuICBvdmVycmlkZSBlbnRpdHlUeXBlID0gJ3NlcnZpY2VzJztcblxuICBAT3V0cHV0KCkgY2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIEBJbmplY3QoU0VUVElOR1NfU0VSVklDRSkgcHJvdGVjdGVkIG92ZXJyaWRlIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgcHVibGljIHN2YzogU2VydmljZUZvcm1TZXJ2aWNlLFxuICAgICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgb3ZlcnJpZGUgeml0aVNlcnZpY2U6IFppdGlEYXRhU2VydmljZSxcbiAgICAgIGdyb3dsZXJTZXJ2aWNlOiBHcm93bGVyU2VydmljZSxcbiAgICAgIEBJbmplY3QoU0VSVklDRV9FWFRFTlNJT05fU0VSVklDRSkgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgIHByaXZhdGUgZGlhbG9nRm9ybTogTWF0RGlhbG9nLFxuICAgICAgcHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgICBwcml2YXRlIHNlcnZpY2VzUGFnZVNlcnZpY2U6IFNlcnZpY2VzUGFnZVNlcnZpY2UsXG4gICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgbG9jYXRpb246IExvY2F0aW9uXG4gICkge1xuICAgIHN1cGVyKGdyb3dsZXJTZXJ2aWNlLCBleHRTZXJ2aWNlLCB6aXRpU2VydmljZSwgcm91dGVyLCByb3V0ZSwgbG9jYXRpb24sIHNldHRpbmdzU2VydmljZSk7XG4gICAgdGhpcy5mb3JtRGF0YSA9IHt9O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZvcm1EYXRhKGRhdGEpIHtcbiAgICBpZiAoIWRhdGE/LmNvbmZpZ3MpIHtcbiAgICAgIGRhdGEuY29uZmlncyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnN2Yy5mb3JtRGF0YSA9IGRhdGE7XG4gICAgaWYgKCFpc0VtcHR5KGRhdGE/LmlkKSkge1xuICAgICAgdGhpcy5pbml0QXNzb2NpYXRlZERhdGEoKTtcbiAgICAgIGlmIChnZXQodGhpcy5mb3JtRGF0YSwgJ3RhZ3Muc2VydmljZS10eXBlJykgPT09ICdzaW1wbGUnKSB7XG4gICAgICAgIHRoaXMubXVsdGlBY3Rpb25zID0gW1xuICAgICAgICAgIHtpZDogJ2NvbnZlcnQtdG8tYWR2YW5jZWQnLCBsYWJlbDogJ0NvbnZlcnQgdG8gQWR2YW5jZWQnLCBoaWRkZW46IGZhbHNlfVxuICAgICAgICBdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm11bHRpQWN0aW9ucyA9IFtdXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZvcm1EYXRhKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuc3ZjPy5mb3JtRGF0YTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5jb250cm9sbGVyRG9tYWluID0gdGhpcy5zZXR0aW5nc1NlcnZpY2U/LnNldHRpbmdzPy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyO1xuICAgIHRoaXMueml0aVNlc3Npb25JZCA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlPy5zZXR0aW5ncz8uc2Vzc2lvbj8uaWQ7XG4gICAgdGhpcy5pbml0Rm9ybURhdGEoKTtcbiAgICB0aGlzLmdldElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKCk7XG4gIH1cblxuICBpbml0Rm9ybURhdGEoKSB7XG4gICAgdGhpcy5zZXJ2aWNlQXBpVXJsID0gYCR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvc2VydmljZXNgO1xuICAgIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpVXJsID0gYCR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvY29uZmlnc2A7XG4gICAgdGhpcy5ob3N0Q29uZmlnQXBpVXJsID0gYCR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvY29uZmlnc2A7XG4gICAgdGhpcy5kaWFsUG9saWN5QXBpVXJsID0gYCR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvc2VydmljZS1wb2xpY2llc2A7XG4gICAgdGhpcy5iaW5kUG9saWN5QXBpVXJsID0gYCR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvc2VydmljZS1wb2xpY2llc2A7XG4gICAgdGhpcy5zZXJ2aWNlQ2xpQ29tbWFuZCA9ICcnO1xuICAgIHRoaXMuaW50ZXJjZXB0Q29uZmlnQ2xpQ29tbWFuZCA9ICcnO1xuICAgIHRoaXMuaG9zdENvbmZpZ0NsaUNvbW1hbmQgPSAnJztcbiAgICB0aGlzLmRpYWxQb2xpY3lDbGlDb21tYW5kID0gJyc7XG4gICAgdGhpcy5iaW5kUG9saWN5Q2xpQ29tbWFuZCA9ICcnO1xuICAgIHRoaXMuaW50ZXJjZXB0Q29uZmlnSWQgPSAnJztcbiAgICB0aGlzLmhvc3RDb25maWdJZCA9ICcnO1xuICAgIHRoaXMuc2VydmljZUlkID0gJyc7XG4gICAgdGhpcy5zZGtPbmx5RGlhbCA9IGZhbHNlO1xuICAgIHRoaXMuc2RrT25seUJpbmQgPSBmYWxzZTtcbiAgICB0aGlzLmludGVyY2VwdFBvcnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kaWFsUG9saWN5TmFtZWRBdHRyaWJ1dGVzID0gW107XG4gICAgdGhpcy5kaWFsUG9saWN5Um9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgICB0aGlzLmJpbmRQb2xpY3lOYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICB0aGlzLmJpbmRQb2xpY3lSb2xlQXR0cmlidXRlcyA9IFtdO1xuICAgIHRoaXMuc2VydmljZUFwaURhdGEgPSBjbG9uZURlZXAodGhpcy5pbml0U2VydmljZUFwaURhdGEpO1xuICAgIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YSA9IGNsb25lRGVlcCh0aGlzLmluaXRJbnRlcmNlcHRDb25maWdBcGlEYXRhKTtcbiAgICB0aGlzLmhvc3RDb25maWdBcGlEYXRhID0gY2xvbmVEZWVwKHRoaXMuaW5pdEhvc3RDb25maWdBcGlEYXRhKTtcbiAgICB0aGlzLmRpYWxQb2xpY3lBcGlEYXRhID0gY2xvbmVEZWVwKHRoaXMuaW5pdERpYWxQb2xpY3lBcGlEYXRhKTtcbiAgICB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhID0gY2xvbmVEZWVwKHRoaXMuaW5pdEJpbmRQb2xpY3lBcGlEYXRhKTtcbiAgICB0aGlzLnNlcnZpY2VzUGFnZVNlcnZpY2UuZ2V0U2VydmljZVJvbGVBdHRyaWJ1dGVzKCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICB0aGlzLnNlcnZpY2VSb2xlQXR0cmlidXRlcyA9IHJlc3VsdC5kYXRhO1xuICAgIH0pO1xuICAgIHRoaXMuc2VydmljZXNQYWdlU2VydmljZS5nZXRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzKCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICB0aGlzLmlkZW50aXR5Um9sZUF0dHJpYnV0ZXMgPSByZXN1bHQuZGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRBc3NvY2lhdGVkRGF0YSgpIHtcbiAgICBpZiAodGhpcy5lbnRpdGllc0luaXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbnRpdGllc0luaXQgPSB0cnVlO1xuICAgIHRoaXMuc2VydmljZUFwaURhdGEgPSB0aGlzLnN2Yy5mb3JtRGF0YTtcbiAgICB0aGlzLmlkZW50aXRpZXNJbml0LnN1YnNjcmliZSgodmFsKSA9PiB7XG4gICAgICBpZiAodmFsID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3NQcm9taXNlID0gdGhpcy5nZXRBc3NvY2lhdGVkQ29uZmlncygpO1xuICAgICAgICBjb25zdCBwb2xpY2llc1Byb21pc2UgPSB0aGlzLmdldEFzc29jYWl0ZWRQb2xpY2llcygpO1xuICAgICAgICBQcm9taXNlLmFsbChbY29uZmlnc1Byb21pc2UsIHBvbGljaWVzUHJvbWlzZV0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YUluaXQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldEFzc29jaWF0ZWRDb25maWdzKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UuZ2V0U3ViZGF0YSgnc2VydmljZXMnLCB0aGlzLmZvcm1EYXRhLmlkLCAnY29uZmlncycpLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBjb25zdCBhc3NvY2lhdGVkQ29uZmlncyA9IHJlc3VsdC5kYXRhO1xuICAgICAgYXNzb2NpYXRlZENvbmZpZ3MuZm9yRWFjaCgoY29uZmlnKSA9PiB7XG4gICAgICAgIGlmIChjb25maWcuY29uZmlnVHlwZUlkID09IHRoaXMuaW5pdEludGVyY2VwdENvbmZpZ0FwaURhdGEuY29uZmlnVHlwZUlkKSB7XG4gICAgICAgICAgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhID0gY29uZmlnO1xuICAgICAgICAgIGNvbnN0IHBvcnRSYW5nZSA9IHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLnBvcnRSYW5nZXNbMF07XG4gICAgICAgICAgdGhpcy5pbnRlcmNlcHRQb3J0ID0gcG9ydFJhbmdlPy5oaWdoO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5jb25maWdUeXBlSWQgPT0gdGhpcy5pbml0SG9zdENvbmZpZ0FwaURhdGEuY29uZmlnVHlwZUlkKSB7XG4gICAgICAgICAgdGhpcy5ob3N0Q29uZmlnQXBpRGF0YSA9IGNvbmZpZztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRBc3NvY2FpdGVkUG9saWNpZXMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKCdzZXJ2aWNlcycsIHRoaXMuZm9ybURhdGEuaWQsICdzZXJ2aWNlLXBvbGljaWVzJykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXMgPSByZXN1bHQuZGF0YTtcbiAgICAgIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXMuZm9yRWFjaCgocG9saWN5KSA9PiB7XG4gICAgICAgIGlmIChwb2xpY3kudHlwZT8udG9Mb3dlckNhc2UoKSA9PSAnZGlhbCcpIHtcbiAgICAgICAgICB0aGlzLmRpYWxQb2xpY3lBcGlEYXRhID0gcG9saWN5O1xuICAgICAgICAgIGNvbnN0IHJvbGVBdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgY29uc3QgbmFtZWRBdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgcG9saWN5LmlkZW50aXR5Um9sZXMuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICAgICAgaWYgKGF0dHIuY2hhckF0KDApID09PSAnIycpIHtcbiAgICAgICAgICAgICAgcm9sZUF0dHJpYnV0ZXMucHVzaChhdHRyLnNsaWNlKDEpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0ci5jaGFyQXQoMCkgPT09ICdAJykge1xuICAgICAgICAgICAgICBuYW1lZEF0dHJpYnV0ZXMucHVzaCh0aGlzLmlkZW50aXRpZXNJZE5hbWVNYXBbYXR0ci5zbGljZSgxKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZGlhbFBvbGljeVJvbGVBdHRyaWJ1dGVzID0gcm9sZUF0dHJpYnV0ZXM7XG4gICAgICAgICAgdGhpcy5kaWFsUG9saWN5TmFtZWRBdHRyaWJ1dGVzID0gbmFtZWRBdHRyaWJ1dGVzO1xuICAgICAgICB9IGVsc2UgaWYgKHBvbGljeS50eXBlPy50b0xvd2VyQ2FzZSgpID09ICdiaW5kJykge1xuICAgICAgICAgIGNvbnN0IHJvbGVBdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgY29uc3QgbmFtZWRBdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgcG9saWN5LmlkZW50aXR5Um9sZXMuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICAgICAgaWYgKGF0dHIuY2hhckF0KDApID09PSAnIycpIHtcbiAgICAgICAgICAgICAgcm9sZUF0dHJpYnV0ZXMucHVzaChhdHRyLnNsaWNlKDEpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0ci5jaGFyQXQoMCkgPT09ICdAJykge1xuICAgICAgICAgICAgICBuYW1lZEF0dHJpYnV0ZXMucHVzaCh0aGlzLmlkZW50aXRpZXNJZE5hbWVNYXBbYXR0ci5zbGljZSgxKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuYmluZFBvbGljeVJvbGVBdHRyaWJ1dGVzID0gcm9sZUF0dHJpYnV0ZXM7XG4gICAgICAgICAgdGhpcy5iaW5kUG9saWN5TmFtZWRBdHRyaWJ1dGVzID0gbmFtZWRBdHRyaWJ1dGVzO1xuICAgICAgICAgIHRoaXMuYmluZFBvbGljeUFwaURhdGEgPSBwb2xpY3k7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pXG4gIH1cblxuICBnZXRJZGVudGl0eU5hbWVkQXR0cmlidXRlcyhmaWx0ZXI/KSB7XG4gICAgY29uc3QgcGFnaW5nID0ge1xuICAgICAgc2VhcmNoT246ICduYW1lJyxcbiAgICAgIGZpbHRlcjogZmlsdGVyIHx8ICcnLFxuICAgICAgdG90YWw6IDMwLFxuICAgICAgcGFnZTogMSxcbiAgICAgIHNvcnQ6ICduYW1lJyxcbiAgICAgIG9yZGVyOiAnYXNjJ1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVycyA9IFtdO1xuICAgIGlmICghaXNFbXB0eShmaWx0ZXIpKSB7XG4gICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICBmaWx0ZXJOYW1lOiAnbmFtZScsXG4gICAgICAgIGNvbHVtbklkOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmaWx0ZXIgfHwgJyUnLFxuICAgICAgICBsYWJlbDogJycsXG4gICAgICAgIHR5cGU6ICdURVhUSU5QVVQnLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0KCdpZGVudGl0aWVzJywgcGFnaW5nLCBmaWx0ZXJzKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IG5hbWVkQXR0cmlidXRlcyA9IHJlc3VsdC5kYXRhLm1hcCgoaWRlbnRpdHkpID0+IHtcbiAgICAgICAgdGhpcy5pZGVudGl0aWVzTmFtZUlkTWFwW2lkZW50aXR5Lm5hbWVdID0gaWRlbnRpdHkuaWQ7XG4gICAgICAgIHRoaXMuaWRlbnRpdGllc0lkTmFtZU1hcFtpZGVudGl0eS5pZF0gPSBpZGVudGl0eS5uYW1lO1xuICAgICAgICB0aGlzLmlkZW50aXRpZXNJbml0Lm5leHQodHJ1ZSk7XG4gICAgICAgIHJldHVybiBpZGVudGl0eS5uYW1lO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzID0gbmFtZWRBdHRyaWJ1dGVzO1xuICAgIH0pO1xuICB9XG5cbiAgbXVsdGlBY3Rpb25SZXF1ZXN0ZWQoYWN0aW9uKSB7XG4gICAgc3dpdGNoKGFjdGlvbi5pZCkge1xuICAgICAgY2FzZSAnc2F2ZSc6XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NvbnZlcnQtdG8tYWR2YW5jZWQnOlxuICAgICAgICB0aGlzLmNvbnZlcnRUb0FkdmFuY2VkKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGhlYWRlckFjdGlvblJlcXVlc3RlZChhY3Rpb24pIHtcbiAgICBzd2l0Y2goYWN0aW9uLm5hbWUpIHtcbiAgICAgIGNhc2UgJ3NhdmUnOlxuICAgICAgICB0aGlzLnNhdmUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjbG9zZSc6XG4gICAgICAgIGlmICh0aGlzLmlzRWRpdCkge1xuICAgICAgICAgIHRoaXMucm91dGVyPy5uYXZpZ2F0ZUJ5VXJsKFVSTFMuWklUSV9TRVJWSUNFUyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXI/Lm5hdmlnYXRlQnlVcmwoVVJMUy5aSVRJX1NFUlZJQ0VfU0VMRUNUKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvZ2dsZS12aWV3JzpcbiAgICAgICAgdGhpcy5mb3JtVmlldyA9IGFjdGlvbi5kYXRhO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB0b2dnbGVTZGtPbmx5RGlhbCgpIHtcbiAgICB0aGlzLnNka09ubHlEaWFsID0gIXRoaXMuc2RrT25seURpYWw7XG4gIH1cblxuICB0b2dnbGVTZGtPbmx5QmluZCgpIHtcbiAgICB0aGlzLnNka09ubHlCaW5kID0gIXRoaXMuc2RrT25seUJpbmQ7XG4gIH1cblxuICBzZXJ2aWNlTmFtZUNoYW5nZWQoZXZlbnQpIHtcbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEubmFtZSA9IGAke3RoaXMuc2VydmljZUFwaURhdGEubmFtZX0taW50ZXJjZXB0LWNvbmZpZ2BcbiAgICB0aGlzLmhvc3RDb25maWdBcGlEYXRhLm5hbWUgPSBgJHt0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWV9LWhvc3QtY29uZmlnYFxuICAgIHRoaXMuZGlhbFBvbGljeUFwaURhdGEubmFtZSA9IGAke3RoaXMuc2VydmljZUFwaURhdGEubmFtZX0tZGlhbC1wb2xpY3lgXG4gICAgdGhpcy5iaW5kUG9saWN5QXBpRGF0YS5uYW1lID0gYCR7dGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lfS1iaW5kLXBvbGljeWBcbiAgfVxuXG4gIGludGVyY2VwdFBvcnRDaGFuZ2VkKCRldmVudCkge1xuICAgIGlmIChpc05pbCh0aGlzLmludGVyY2VwdFBvcnQpIHx8IGlzTmFOKHRoaXMuaW50ZXJjZXB0UG9ydCkpIHtcbiAgICAgIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLnBvcnRSYW5nZXMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEucG9ydFJhbmdlc1swXSA9IHtcbiAgICAgIGhpZ2g6IHRoaXMuaW50ZXJjZXB0UG9ydCxcbiAgICAgIGxvdzogdGhpcy5pbnRlcmNlcHRQb3J0XG4gICAgfTtcbiAgfVxuXG4gIGhvc3RQcm90b2NvbHNDaGFuZ2VkKCRldmVudCkge1xuICAgIHN3aXRjaCAodGhpcy5ob3N0UHJvdG9jb2wpIHtcbiAgICAgIGNhc2UgJ2JvdGgnOlxuICAgICAgICB0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEuYWxsb3dlZFByb3RvY29scyA9IFsndGNwJywgJ3VkcCddXG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhLmFsbG93ZWRQcm90b2NvbHMgPSBbdGhpcy5ob3N0UHJvdG9jb2xdO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlKHJlZnJlc2g/KSB7XG4gICAgdGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lID0gdGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lLnRyaW0oKTtcbiAgICBpZiAoIXRoaXMudmFsaWRhdGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc05ld1NlcnZpY2UgPSBpc0VtcHR5KHRoaXMuc2VydmljZUFwaURhdGE/LmlkKTtcbiAgICBpZiAoaXNOZXdTZXJ2aWNlKSB7XG4gICAgICBjb25zdCBoYXNDb25mbGljdHM6IGFueSA9IGF3YWl0IHRoaXMuY2hlY2tOYW1lQ29uZmxpY3RzKCk7XG4gICAgICBpZiAoaGFzQ29uZmxpY3RzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdW1tYXJ5RGF0YSA9IHRoaXMuc2hvd1N1bW1hcnkoKTtcbiAgICB0aGlzLnNlcnZpY2VBcGlEYXRhLmNvbmZpZ3MgPSBbXTtcblxuICAgIGNvbnN0IGludGVyY2VwdENmZ1Byb21pc2UgPSBhd2FpdCB0aGlzLnNhdmVJbnRlcmNlcHRDb25maWcoc3VtbWFyeURhdGEpO1xuICAgIGNvbnN0IGhvc3RDZmdQcm9taXNlID0gYXdhaXQgdGhpcy5zYXZlSG9zdENvbmZpZyhzdW1tYXJ5RGF0YSk7XG4gICAgY29uc3Qgc2VydmljZVByb21pc2UgPSBhd2FpdCB0aGlzLnNhdmVTZXJ2aWNlKHN1bW1hcnlEYXRhKTtcbiAgICBjb25zdCBkaWFsUG9saWN5UHJvbWlzZSA9IGF3YWl0IHRoaXMuc2F2ZVBvbGljeShzdW1tYXJ5RGF0YSwgJ0RpYWwnKTtcbiAgICBjb25zdCBiaW5kUG9saWN5UHJvbWlzZSA9IGF3YWl0IHRoaXMuc2F2ZVBvbGljeShzdW1tYXJ5RGF0YSwgJ0JpbmQnKTtcblxuICAgIHN1bW1hcnlEYXRhPy5mb3JFYWNoKChlbnRpdHlUeXBlKSA9PiB7XG4gICAgICBlbnRpdHlUeXBlLmVudGl0aWVzPy5mb3JFYWNoKChlbnRpdHkpID0+IHtcbiAgICAgICAgaWYgKGVudGl0eS50eXBlID09PSAnc2VydmljZXMnKSB7XG4gICAgICAgICAgZW50aXR5LmNsaUNvbW1hbmQgPSB0aGlzLnNlcnZpY2VDbGlDb21tYW5kO1xuICAgICAgICAgIGVudGl0eS5hcGlSZXF1ZXN0ID0gdGhpcy5nZXRTZXJ2aWNlc0FwaVJlcXVlc3QoKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbnRpdHkudHlwZSA9PT0gJ2NvbmZpZ3MnICYmIGVudGl0eS5zdWJ0eXBlID09PSAnaW50ZXJjZXB0Jykge1xuICAgICAgICAgIGVudGl0eS5jbGlDb21tYW5kID0gdGhpcy5pbnRlcmNlcHRDb25maWdDbGlDb21tYW5kO1xuICAgICAgICAgIGVudGl0eS5hcGlSZXF1ZXN0ID0gdGhpcy5nZXRJbnRlcmNlcHRDb25maWdBcGlSZXF1ZXN0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZW50aXR5LnR5cGUgPT09ICdjb25maWdzJyAmJiBlbnRpdHkuc3VidHlwZSA9PT0gJ2hvc3QnKSB7XG4gICAgICAgICAgZW50aXR5LmNsaUNvbW1hbmQgPSB0aGlzLmhvc3RDb25maWdDbGlDb21tYW5kO1xuICAgICAgICAgIGVudGl0eS5hcGlSZXF1ZXN0ID0gdGhpcy5nZXRIb3N0Q29uZmlnQXBpUmVxdWVzdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGVudGl0eS50eXBlID09PSAnc2VydmljZS1wb2xpY2llcycgJiYgZW50aXR5LnN1YnR5cGUgPT09ICdkaWFsJykge1xuICAgICAgICAgIGVudGl0eS5jbGlDb21tYW5kID0gdGhpcy5kaWFsUG9saWN5Q2xpQ29tbWFuZDtcbiAgICAgICAgICBlbnRpdHkuYXBpUmVxdWVzdCA9IHRoaXMuZ2V0RGlhbEFwaVJlcXVlc3QoKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbnRpdHkudHlwZSA9PT0gJ3NlcnZpY2UtcG9saWNpZXMnICYmIGVudGl0eS5zdWJ0eXBlID09PSAnYmluZCcpIHtcbiAgICAgICAgICBlbnRpdHkuY2xpQ29tbWFuZCA9IHRoaXMuYmluZFBvbGljeUNsaUNvbW1hbmQ7XG4gICAgICAgICAgZW50aXR5LmFwaVJlcXVlc3QgPSB0aGlzLmdldEJpbmRBcGlSZXF1ZXN0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc2hvd1N1bW1hcnkoKSB7XG4gICAgY29uc3QgaW50ZXJjZXB0U3VtbWFyeSA9IHtcbiAgICAgIG5hbWU6IHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5uYW1lLFxuICAgICAgdHlwZTogJ2NvbmZpZ3MnLFxuICAgICAgc3VidHlwZTogJ2ludGVyY2VwdCcsXG4gICAgICBhcGlEYXRhOiB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEsXG4gICAgICBjbGlDb21tYW5kOiB0aGlzLmludGVyY2VwdENvbmZpZ0NsaUNvbW1hbmQsXG4gICAgICBhcGlSZXF1ZXN0OiAnJyxcbiAgICAgIGFwaVVybDogdGhpcy5pbnRlcmNlcHRDb25maWdBcGlVcmwsXG4gICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgIHJldHJ5OiB0aGlzLnNhdmVJbnRlcmNlcHRDb25maWcuYmluZCh0aGlzKSxcbiAgICB9O1xuICAgIGNvbnN0IGhvc3RTdW1tYXJ5ID0ge1xuICAgICAgbmFtZTogdGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5uYW1lLFxuICAgICAgdHlwZTogJ2NvbmZpZ3MnLFxuICAgICAgc3VidHlwZTogJ2hvc3QnLFxuICAgICAgYXBpRGF0YTogdGhpcy5ob3N0Q29uZmlnQXBpRGF0YSxcbiAgICAgIGNsaUNvbW1hbmQ6IHRoaXMuaG9zdENvbmZpZ0NsaUNvbW1hbmQsXG4gICAgICBhcGlSZXF1ZXN0OiAnJyxcbiAgICAgIGFwaVVybDogdGhpcy5ob3N0Q29uZmlnQXBpVXJsLFxuICAgICAgc3RhdHVzOiAnbG9hZGluZycsXG4gICAgICByZXRyeTogdGhpcy5zYXZlSG9zdENvbmZpZy5iaW5kKHRoaXMpXG4gICAgfTtcbiAgICBjb25zdCBzdW1tYXJ5RGF0YTogYW55ID0gW1xuICAgICAge1xuICAgICAgICB0aXRsZTogJ1NlcnZpY2VzJyxcbiAgICAgICAgZW50aXRpZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiAnc2VydmljZXMnLFxuICAgICAgICAgICAgYXBpRGF0YTogdGhpcy5zZXJ2aWNlQXBpRGF0YSxcbiAgICAgICAgICAgIGNsaUNvbW1hbmQ6IHRoaXMuc2VydmljZUNsaUNvbW1hbmQsXG4gICAgICAgICAgICBhcGlSZXF1ZXN0OiAnJyxcbiAgICAgICAgICAgIGFwaVVybDogdGhpcy5zZXJ2aWNlQXBpVXJsLFxuICAgICAgICAgICAgc3RhdHVzOiAnbG9hZGluZycsXG4gICAgICAgICAgICByZXRyeTogdGhpcy5zYXZlU2VydmljZS5iaW5kKHRoaXMpXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ1NlcnZpY2UgUG9saWNpZXMnLFxuICAgICAgICBlbnRpdGllczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuZGlhbFBvbGljeUFwaURhdGEubmFtZSxcbiAgICAgICAgICAgIHR5cGU6ICdzZXJ2aWNlLXBvbGljaWVzJyxcbiAgICAgICAgICAgIHN1YnR5cGU6ICdkaWFsJyxcbiAgICAgICAgICAgIGFwaURhdGE6IHRoaXMuZGlhbFBvbGljeUFwaURhdGEsXG4gICAgICAgICAgICBjbGlDb21tYW5kOiB0aGlzLmRpYWxQb2xpY3lDbGlDb21tYW5kLFxuICAgICAgICAgICAgYXBpUmVxdWVzdDogJycsXG4gICAgICAgICAgICBhcGlVcmw6IHRoaXMuZGlhbFBvbGljeUFwaVVybCxcbiAgICAgICAgICAgIHN0YXR1czogJ2xvYWRpbmcnLFxuICAgICAgICAgICAgcmV0cnk6IChzdW1tYXJ5RGF0YSkgPT4geyB0aGlzLnNhdmVQb2xpY3koc3VtbWFyeURhdGEsICdEaWFsJykgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5iaW5kUG9saWN5QXBpRGF0YS5uYW1lLFxuICAgICAgICAgICAgdHlwZTogJ3NlcnZpY2UtcG9saWNpZXMnLFxuICAgICAgICAgICAgc3VidHlwZTogJ2JpbmQnLFxuICAgICAgICAgICAgYXBpRGF0YTogdGhpcy5iaW5kUG9saWN5QXBpRGF0YSxcbiAgICAgICAgICAgIGNsaUNvbW1hbmQ6IHRoaXMuYmluZFBvbGljeUNsaUNvbW1hbmQsXG4gICAgICAgICAgICBhcGlSZXF1ZXN0OiAnJyxcbiAgICAgICAgICAgIGFwaVVybDogdGhpcy5iaW5kUG9saWN5QXBpVXJsLFxuICAgICAgICAgICAgc3RhdHVzOiAnbG9hZGluZycsXG4gICAgICAgICAgICByZXRyeTogKHN1bW1hcnlEYXRhKSA9PiB7IHRoaXMuc2F2ZVBvbGljeShzdW1tYXJ5RGF0YSwgJ0JpbmQnKSB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXTtcbiAgICBpZiAoIXRoaXMuc2RrT25seURpYWwgJiYgIXRoaXMuc2RrT25seUJpbmQpIHtcbiAgICAgIHN1bW1hcnlEYXRhLnNwbGljZSgwLDAse1xuICAgICAgICB0aXRsZTogJ0NvbmZpZ3VyYXRpb25zJyxcbiAgICAgICAgZW50aXRpZXM6IFtpbnRlcmNlcHRTdW1tYXJ5LCBob3N0U3VtbWFyeV1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuc2RrT25seURpYWwpIHtcbiAgICAgIHN1bW1hcnlEYXRhLnNwbGljZSgwLDAse1xuICAgICAgICB0aXRsZTogJ0NvbmZpZ3VyYXRpb25zJyxcbiAgICAgICAgZW50aXRpZXM6IFtpbnRlcmNlcHRTdW1tYXJ5XVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5zZGtPbmx5QmluZCkge1xuICAgICAgc3VtbWFyeURhdGEuc3BsaWNlKDAsMCx7XG4gICAgICAgIHRpdGxlOiAnQ29uZmlndXJhdGlvbnMnLFxuICAgICAgICBlbnRpdGllczogW2hvc3RTdW1tYXJ5XVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBzdW1tYXJ5RGF0YTogc3VtbWFyeURhdGEsXG4gICAgICBpc0VkaXQ6IHRoaXMuaXNFZGl0XG4gICAgfTtcbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nRm9ybS5vcGVuKENyZWF0aW9uU3VtbWFyeURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgfSk7XG4gICAgdGhpcy5kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ25ldycpIHtcbiAgICAgICAgdGhpcy5pbml0Rm9ybURhdGEoKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSAnY2FuY2VsJykge1xuICAgICAgICAvLy8gRG8gbm90aGluZywgc3RheSBvbiBwYWdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmluaXREYXRhTW9kZWxzKCk7XG4gICAgICAgIHRoaXMuX2RhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yb3V0ZXI/Lm5hdmlnYXRlQnlVcmwoYCR7dGhpcy5iYXNlUGF0aH1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc3VtbWFyeURhdGE7XG4gIH1cblxuICBhc3luYyBjaGVja05hbWVDb25mbGljdHMoKSB7XG4gICAgY29uc3QgZmlsdGVyOiBGaWx0ZXJPYmogPSB7XG4gICAgICBmaWx0ZXJOYW1lOiAnbmFtZScsXG4gICAgICBjb2x1bW5JZDogJ25hbWUnLFxuICAgICAgdmFsdWU6IHRoaXMuc2VydmljZUFwaURhdGEubmFtZSxcbiAgICAgIGxhYmVsOiAnJyxcbiAgICAgIHR5cGU6ICdURVhUSU5QVVQnLFxuICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgIHZlcmI6ICc9J1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdHM6IGFueSA9IHtcbiAgICAgIHNlcnZpY2VDb25mbGljdDogZmFsc2UsXG4gICAgICBpbnRlcmNlcHRDb25mbGljdDogZmFsc2UsXG4gICAgICBob3N0Q29uZmxpY3Q6IGZhbHNlLFxuICAgICAgZGlhbFBvbGljeUNvbmZsaWN0OiBmYWxzZSxcbiAgICAgIGJpbmRQb2xpY3lDb25mbGljdDogZmFsc2UsXG4gICAgICBuYW1lczogW11cbiAgICB9O1xuICAgIGNvbnN0IHBhZ2luZyA9IGNsb25lRGVlcCh0aGlzLnppdGlTZXJ2aWNlLkRFRkFVTFRfUEFHSU5HKTtcbiAgICBwYWdpbmcubm9TZWFyY2ggPSBmYWxzZTtcbiAgICBjb25zdCBzZXJ2aWNlUHJvbSA9IHRoaXMueml0aVNlcnZpY2UuZ2V0KCdzZXJ2aWNlcycsIHBhZ2luZywgW2ZpbHRlcl0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5kYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdHMuc2VydmljZUNvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0cy5uYW1lcy5wdXNoKHRoaXMuc2VydmljZUFwaURhdGEubmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZmlsdGVyLnZhbHVlID0gdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLm5hbWU7XG4gICAgY29uc3QgaW50ZXJjZXB0UHJvbSA9IHRoaXMueml0aVNlcnZpY2UuZ2V0KCdjb25maWdzJywgcGFnaW5nLCBbZmlsdGVyXSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0cy5pbnRlcmNlcHRDb25mbGljdCA9IHRydWU7XG4gICAgICAgIHJlc3VsdHMubmFtZXMucHVzaCh0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEubmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZmlsdGVyLnZhbHVlID0gdGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5uYW1lO1xuICAgIGNvbnN0IGhvc3RQcm9tID0gdGhpcy56aXRpU2VydmljZS5nZXQoJ2NvbmZpZ3MnLCBwYWdpbmcsIFtmaWx0ZXJdKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuZGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHRzLmhvc3RDb25mbGljdCA9IHRydWU7XG4gICAgICAgIHJlc3VsdHMubmFtZXMucHVzaCh0aGlzLmhvc3RDb25maWdBcGlEYXRhLm5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZpbHRlci52YWx1ZSA9IHRoaXMuZGlhbFBvbGljeUFwaURhdGEubmFtZTtcbiAgICBjb25zdCBkaWFsUHJvbSA9IHRoaXMueml0aVNlcnZpY2UuZ2V0KCdzZXJ2aWNlLXBvbGljaWVzJywgcGFnaW5nLCBbZmlsdGVyXSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0cy5kaWFsUG9saWN5Q29uZmxpY3QgPSB0cnVlO1xuICAgICAgICByZXN1bHRzLm5hbWVzLnB1c2godGhpcy5kaWFsUG9saWN5QXBpRGF0YS5uYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmaWx0ZXIudmFsdWUgPSB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhLm5hbWU7XG4gICAgY29uc3QgYmluZFByb20gPSB0aGlzLnppdGlTZXJ2aWNlLmdldCgnc2VydmljZS1wb2xpY2llcycsIHBhZ2luZywgW2ZpbHRlcl0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5kYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdHMuYmluZFBvbGljeUNvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0cy5uYW1lcy5wdXNoKHRoaXMuYmluZFBvbGljeUFwaURhdGEubmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3NlcnZpY2VQcm9tLCBpbnRlcmNlcHRQcm9tLCBob3N0UHJvbSwgZGlhbFByb20sIGJpbmRQcm9tXSkudGhlbigoKSA9PiB7XG4gICAgICBsZXQgaGFzQ29uZmxpY3QgPSByZXN1bHRzLm5hbWVzLmxlbmd0aCA+IDA7XG4gICAgICBpZiAoaGFzQ29uZmxpY3QpIHtcbiAgICAgICAgdGhpcy5lcnJvcnMubmFtZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0NvbmZsaWN0V2FybmluZyhyZXN1bHRzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNDb25mbGljdDtcbiAgICB9KTtcbiAgfVxuXG4gIHNob3dDb25mbGljdFdhcm5pbmcoY29uZmxpY3REYXRhKSB7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYXBwZW5kSWQ6ICdTaW1wbGVTZXJ2aWNlQ29uZmxpY3RzJyxcbiAgICAgIHRpdGxlOiAnTmFtZSBDb25mbGljdCcsXG4gICAgICBtZXNzYWdlOiBgVGhlIG5hbWUgeW91IGhhdmUgZW50ZXJlZCBoYXMgY29uZmxpY3RzIGZvciB0aGUgZm9sbG93aW5nIGVudGl0aWVzYCxcbiAgICAgIGJ1bGxldExpc3Q6IGNvbmZsaWN0RGF0YS5uYW1lcyxcbiAgICAgIHN1Ym1lc3NhZ2U6IGBQbGVhc2UgdXBkYXRlIHRoZSBlbnRlcmVkIG5hbWUgYW5kIHRyeSBhZ2Fpbi5gLFxuICAgICAgY29uZmlybUxhYmVsOiAnUmV0dXJuJyxcbiAgICAgIHNob3dDYW5jZWxMaW5rOiBmYWxzZSxcbiAgICAgIGltYWdlVXJsOiAnLi4vLi4vYXNzZXRzL3N2Z3MvR3Jvd2xfRXJyb3Iuc3ZnJ1xuICAgIH07XG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ0Zvcm0ub3BlbihDb25maXJtQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgoKSA9PiB7XG4gICAgICB0aGlzLm5hbWVGaWVsZElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgc2F2ZUludGVyY2VwdENvbmZpZyhzdW1tYXJ5RGF0YSkge1xuICAgIGNvbnN0IGlzTmV3Q29uZmlnID0gaXNFbXB0eSh0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGE/LmlkKTtcblxuICAgIC8vIENvbmRpdGlvbmFsIERlbGV0aW9uIChJZGVudGljYWwgTG9naWMpXG4gICAgaWYgKHRoaXMuc2RrT25seURpYWwgJiYgIWlzTmV3Q29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5kZWxldGUoJ2NvbmZpZ3MnLCB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuaWQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZGtPbmx5RGlhbCAmJiBpc05ld0NvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFVzZSB0aGUgSGVscGVyIEZ1bmN0aW9uXG4gICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHRoaXMuc2F2ZUNvbmZpZyhcbiAgICAgICAgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLFxuICAgICAgICAnaW50ZXJjZXB0SW5jcmVtZW50JyxcbiAgICAgICAgJ2ludGVyY2VwdENvbmZpZ0lkJyxcbiAgICAgICAgJ2ludGVyY2VwdENvbmZpZ0NsaUNvbW1hbmQnXG4gICAgKTtcblxuICAgIC8vIEFwcGx5IGZpbmFsIHN0YXR1cyBsb2dpY1xuICAgIHN1bW1hcnlEYXRhWzBdLmVudGl0aWVzWzBdLnN0YXR1cyA9IHN0YXR1cztcbiAgfVxuXG4gIGFzeW5jIHNhdmVIb3N0Q29uZmlnKHN1bW1hcnlEYXRhKSB7XG4gICAgY29uc3QgaXNOZXdDb25maWcgPSBpc0VtcHR5KHRoaXMuaG9zdENvbmZpZ0FwaURhdGE/LmlkKTtcblxuICAgIC8vIENvbmRpdGlvbmFsIERlbGV0aW9uIChJZGVudGljYWwgTG9naWMpXG4gICAgaWYgKHRoaXMuc2RrT25seURpYWwgJiYgIWlzTmV3Q29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5kZWxldGUoJ2NvbmZpZ3MnLCB0aGlzLmhvc3RDb25maWdBcGlEYXRhLmlkKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2RrT25seURpYWwgJiYgaXNOZXdDb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBVc2UgdGhlIEhlbHBlciBGdW5jdGlvblxuICAgIGNvbnN0IHsgc3RhdHVzLCBjb25maWdBcGlEYXRhIH0gPSBhd2FpdCB0aGlzLnNhdmVDb25maWcoXG4gICAgICAgIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEsXG4gICAgICAgICdob3N0SW5jcmVtZW50JyxcbiAgICAgICAgJ2hvc3RDb25maWdJZCcsXG4gICAgICAgICdob3N0Q29uZmlnQ2xpQ29tbWFuZCdcbiAgICApO1xuXG4gICAgLy8gQXBwbHkgZmluYWwgc3RhdHVzIGxvZ2ljIChzbGlnaHRseSBkaWZmZXJlbnQgdGhhbiBpbnRlcmNlcHQpXG4gICAgaWYgKHRoaXMuc2RrT25seURpYWwpIHtcbiAgICAgIHN1bW1hcnlEYXRhWzBdLmVudGl0aWVzWzBdLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgIHN1bW1hcnlEYXRhWzBdLmVudGl0aWVzWzBdLmFwaURhdGEgPSBjb25maWdBcGlEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdW1tYXJ5RGF0YVswXS5lbnRpdGllc1sxXS5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICBzdW1tYXJ5RGF0YVswXS5lbnRpdGllc1swXS5hcGlEYXRhID0gY29uZmlnQXBpRGF0YTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlQ29uZmlnKFxuICAgICAgY29uZmlnQXBpRGF0YTogYW55LCAgICAgIC8vIGUuZy4sIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YVxuICAgICAgaW5jcmVtZW50ZXI6IHN0cmluZywgICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBpbmNyZW1lbnRlciBwcm9wZXJ0eSAoJ2ludGVyY2VwdEluY3JlbWVudCcgb3IgJ2hvc3RJbmNyZW1lbnQnKVxuICAgICAgY29uZmlnSWRQcm9wOiBzdHJpbmcsICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBJRCBwcm9wZXJ0eSAoJ2ludGVyY2VwdENvbmZpZ0lkJyBvciAnaG9zdENvbmZpZ0lkJylcbiAgICAgIGNsaUNvbW1hbmRQcm9wOiBzdHJpbmcgICAvLyBUaGUgbmFtZSBvZiB0aGUgQ0xJIGNvbW1hbmQgcHJvcGVydHkgKCdpbnRlcmNlcHRDb25maWdDbGlDb21tYW5kJyBvciAnaG9zdENvbmZpZ0NsaUNvbW1hbmQnKVxuICApOiBQcm9taXNlPGFueT4ge1xuXG4gICAgY29uc3QgaXNOZXdDb25maWcgPSBpc0VtcHR5KGNvbmZpZ0FwaURhdGE/LmlkKTtcbiAgICBjb25zdCBpbmNyZW1lbnRWYWx1ZSA9IHRoaXNbaW5jcmVtZW50ZXJdIGFzIG51bWJlcjsgLy8gR2V0IGN1cnJlbnQgaW5jcmVtZW50IHZhbHVlXG4gICAgbGV0IHN0YXR1czogc3RyaW5nO1xuICAgIGxldCBjb25maWdSZXN1bHQ6IGFueTtcblxuICAgIGlmIChpc05ld0NvbmZpZykge1xuICAgICAgdGhpc1tpbmNyZW1lbnRlcl0gPSBpbmNyZW1lbnRWYWx1ZSArIDE7IC8vIEluY3JlbWVudCBmb3IgbmFtaW5nXG5cbiAgICAgIGxldCBwb3N0Rml4ID0gJyc7XG4gICAgICBpZiAodGhpc1tpbmNyZW1lbnRlcl0gPiAwKSB7XG4gICAgICAgIHBvc3RGaXggPSAnXycgKyB0aGlzW2luY3JlbWVudGVyXTtcbiAgICAgIH1cblxuICAgICAgY29uZmlnQXBpRGF0YS5uYW1lID0gY29uZmlnQXBpRGF0YS5uYW1lICsgcG9zdEZpeDtcblxuICAgICAgY29uZmlnUmVzdWx0ID0gYXdhaXQgdGhpcy5zYXZlRW50aXR5KCdjb25maWdzJywgY29uZmlnQXBpRGF0YSkuY2F0Y2goKHJlc3VsdCkgPT4gcmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnUmVzdWx0ID0gYXdhaXQgdGhpcy51cGRhdGVFbnRpdHkoJ2NvbmZpZ3MnLCBjb25maWdBcGlEYXRhKS5jYXRjaCgocmVzdWx0KSA9PiByZXN1bHQpO1xuICAgIH1cblxuICAgIGlmIChjb25maWdSZXN1bHQuZXJyb3IpIHtcbiAgICAgIHN0YXR1cyA9ICdlcnJvcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNldCB0aGUgY29uZmlnIElEIHByb3BlcnR5IGR5bmFtaWNhbGx5IChlLmcuLCB0aGlzLmludGVyY2VwdENvbmZpZ0lkKVxuICAgICAgdGhpc1tjb25maWdJZFByb3BdID0gY29uZmlnQXBpRGF0YS5pZCB8fCBjb25maWdSZXN1bHQuaWQgfHwgY29uZmlnUmVzdWx0LmRhdGEuaWQ7XG5cbiAgICAgIC8vIEFkZCB0aGUgbmV3IGNvbmZpZyBJRCB0byBzZXJ2aWNlQXBpRGF0YSAoYXNzdW1pbmcgc2VydmljZUFwaURhdGEgaXMgYWNjZXNzaWJsZSB2aWEgJ3RoaXMnKVxuICAgICAgdGhpcy5zZXJ2aWNlQXBpRGF0YS5jb25maWdzLnB1c2godGhpc1tjb25maWdJZFByb3BdKTtcblxuICAgICAgLy8gU2V0IHRoZSBDTEkgY29tbWFuZCBkeW5hbWljYWxseVxuICAgICAgdGhpc1tjbGlDb21tYW5kUHJvcF0gPSBgeml0aSBlZGdlIGNyZWF0ZSBjb25maWcgJyR7Y29uZmlnQXBpRGF0YS5uYW1lfScgJyR7Y29uZmlnQXBpRGF0YS5jb25maWdUeXBlSWR9JyAnJHtKU09OLnN0cmluZ2lmeShjb25maWdBcGlEYXRhLmRhdGEpfSdgO1xuXG4gICAgICBzdGF0dXMgPSAnZG9uZSc7XG4gICAgICB0aGlzW2luY3JlbWVudGVyXSA9IC0xOyAvLyBSZXNldCBpbmNyZW1lbnRlclxuICAgIH1cblxuICAgIHJldHVybiB7IHN0YXR1cywgY29uZmlnUmVzdWx0LCBjb25maWdBcGlEYXRhIH07XG4gIH1cblxuICBhc3luYyBzYXZlU2VydmljZShzdW1tYXJ5RGF0YSkge1xuICAgIGNvbnN0IGlzTmV3U2VydmljZSA9IGlzRW1wdHkodGhpcy5zZXJ2aWNlQXBpRGF0YT8uaWQpO1xuXG4gICAgbGV0IHNlcnZpY2VSZXN1bHQ7XG4gICAgaWYgKGlzTmV3U2VydmljZSkge1xuICAgICAgdGhpcy5zZXJ2aWNlSW5jcmVtZW50Kys7XG4gICAgICBsZXQgcG9zdEZpeCA9ICcnO1xuICAgICAgaWYgKHRoaXMuc2VydmljZUluY3JlbWVudCA+IDApIHtcbiAgICAgICAgcG9zdEZpeCA9ICdfJyArIHRoaXMuc2VydmljZUluY3JlbWVudDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VydmljZUFwaURhdGEubmFtZSA9IHRoaXMuc2VydmljZUFwaURhdGEubmFtZSArIHBvc3RGaXg7XG4gICAgICBzZXQodGhpcy5zZXJ2aWNlQXBpRGF0YSwgJ3RhZ3Muc2VydmljZS10eXBlJywgJ3NpbXBsZScpO1xuICAgICAgc2VydmljZVJlc3VsdCA9IGF3YWl0IHRoaXMuc2F2ZUVudGl0eSgnc2VydmljZXMnLCB0aGlzLnNlcnZpY2VBcGlEYXRhKS5jYXRjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VydmljZVJlc3VsdCA9IGF3YWl0IHRoaXMudXBkYXRlRW50aXR5KCdzZXJ2aWNlcycsIHRoaXMuc2VydmljZUFwaURhdGEpLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBzZXJ2aWNlU3RhdHVzO1xuICAgIGlmIChzZXJ2aWNlUmVzdWx0LmVycm9yKSB7XG4gICAgICBzZXJ2aWNlU3RhdHVzID0gJ2Vycm9yJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXJ2aWNlSWQgPSB0aGlzLnNlcnZpY2VBcGlEYXRhLmlkID8gdGhpcy5zZXJ2aWNlQXBpRGF0YS5pZCA6IChzZXJ2aWNlUmVzdWx0LmlkID8gc2VydmljZVJlc3VsdC5pZCA6IHNlcnZpY2VSZXN1bHQuZGF0YS5pZCk7XG4gICAgICBzZXJ2aWNlU3RhdHVzID0gJ2RvbmUnO1xuICAgICAgbGV0IGNsaUNvbmZpZ0lkcyA9ICcnO1xuICAgICAgaWYgKCF0aGlzLnNka09ubHlEaWFsICYmICF0aGlzLnNka09ubHlCaW5kKSB7XG4gICAgICAgIGNsaUNvbmZpZ0lkcyA9IGAtLWNvbmZpZ3MgJyR7dGhpcy5pbnRlcmNlcHRDb25maWdJZH0sJHt0aGlzLmhvc3RDb25maWdJZH0nYDtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc2RrT25seUJpbmQgJiYgdGhpcy5zZGtPbmx5QmluZCkge1xuICAgICAgICBjbGlDb25maWdJZHMgPSBgLS1jb25maWdzICcke3RoaXMuaW50ZXJjZXB0Q29uZmlnSWR9J2A7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2RrT25seUJpbmQgJiYgIXRoaXMuc2RrT25seUJpbmQpIHtcbiAgICAgICAgY2xpQ29uZmlnSWRzID0gYC0tY29uZmlncyAnJHt0aGlzLmludGVyY2VwdENvbmZpZ0lkfSdgO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXJ2aWNlQ2xpQ29tbWFuZCA9IGB6aXRpIGVkZ2UgY3JlYXRlIHNlcnZpY2UgJyR7dGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lfScgJHtjbGlDb25maWdJZHN9YFxuICAgICAgdGhpcy5zZXJ2aWNlSW5jcmVtZW50ID0gLTE7XG4gICAgfVxuICAgIGNvbnN0IHN1bW1hcnlJbmRleCA9ICh0aGlzLnNka09ubHlEaWFsICYmIHRoaXMuc2RrT25seUJpbmQpID8gMCA6IDE7XG4gICAgc3VtbWFyeURhdGFbc3VtbWFyeUluZGV4XS5lbnRpdGllc1swXS5zdGF0dXMgPSBzZXJ2aWNlU3RhdHVzO1xuICB9XG5cbiAgYXN5bmMgc2F2ZVBvbGljeShzdW1tYXJ5RGF0YSwgdHlwZSA9ICdEaWFsJykge1xuICAgIGNvbnN0IGlzTmV3UG9saWN5ID0gaXNFbXB0eSh0aGlzLnNlcnZpY2VBcGlEYXRhPy5pZCk7XG5cbiAgICBsZXQgcG9saWN5QXBpRGF0YSwgcG9saWN5UmVzdWx0LCByb2xlQXR0cmlidXRlcywgbmFtZWRBdHRyaWJ1dGVzO1xuICAgIGxldCBjbGlSb2xlcyA9ICcnO1xuICAgIGxldCBzdGF0dXMgPSAnJztcbiAgICBpZiAoaXNOZXdQb2xpY3kpIHtcbiAgICAgIGlmICh0eXBlID09PSAnRGlhbCcpIHtcbiAgICAgICAgdGhpcy5kaWFsSW5jcmVtZW50Kys7XG4gICAgICAgIGxldCBwb3N0Rml4ID0gJyc7XG4gICAgICAgIGlmICh0aGlzLmRpYWxJbmNyZW1lbnQgPiAwKSB7XG4gICAgICAgICAgcG9zdEZpeCA9ICdfJyArIHRoaXMuZGlhbEluY3JlbWVudDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpYWxQb2xpY3lBcGlEYXRhLm5hbWUgPSB0aGlzLmRpYWxQb2xpY3lBcGlEYXRhLm5hbWUgKyBwb3N0Rml4O1xuICAgICAgICBwb2xpY3lBcGlEYXRhID0gdGhpcy5kaWFsUG9saWN5QXBpRGF0YTtcbiAgICAgICAgcm9sZUF0dHJpYnV0ZXMgPSB0aGlzLmRpYWxQb2xpY3lSb2xlQXR0cmlidXRlcztcbiAgICAgICAgbmFtZWRBdHRyaWJ1dGVzID0gdGhpcy5kaWFsUG9saWN5TmFtZWRBdHRyaWJ1dGVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5iaW5kSW5jcmVtZW50Kys7XG4gICAgICAgIGxldCBwb3N0Rml4ID0gJyc7XG4gICAgICAgIGlmICh0aGlzLmJpbmRJbmNyZW1lbnQgPiAwKSB7XG4gICAgICAgICAgcG9zdEZpeCA9ICdfJyArIHRoaXMuYmluZEluY3JlbWVudDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhLm5hbWUgPSB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhLm5hbWUgKyBwb3N0Rml4O1xuICAgICAgICBwb2xpY3lBcGlEYXRhID0gdGhpcy5iaW5kUG9saWN5QXBpRGF0YTtcbiAgICAgICAgcm9sZUF0dHJpYnV0ZXMgPSB0aGlzLmJpbmRQb2xpY3lSb2xlQXR0cmlidXRlcztcbiAgICAgICAgbmFtZWRBdHRyaWJ1dGVzID0gdGhpcy5iaW5kUG9saWN5TmFtZWRBdHRyaWJ1dGVzO1xuICAgICAgfVxuICAgICAgcG9saWN5QXBpRGF0YS5zZXJ2aWNlUm9sZXMgPSBbYEAke3RoaXMuc2VydmljZUlkfWBdO1xuICAgICAgcG9saWN5QXBpRGF0YS5pZGVudGl0eVJvbGVzID0gbmFtZWRBdHRyaWJ1dGVzLm1hcCgobmFtZSkgPT4ge1xuICAgICAgICBjbGlSb2xlcyArPSAnQCcgKyB0aGlzLmlkZW50aXRpZXNOYW1lSWRNYXBbbmFtZV0gKyAnLCc7XG4gICAgICAgIHJldHVybiAnQCcgKyB0aGlzLmlkZW50aXRpZXNOYW1lSWRNYXBbbmFtZV07XG4gICAgICB9KTtcbiAgICAgIHBvbGljeUFwaURhdGEuaWRlbnRpdHlSb2xlcyA9IFsuLi5wb2xpY3lBcGlEYXRhLmlkZW50aXR5Um9sZXMsIC4uLnJvbGVBdHRyaWJ1dGVzLm1hcCgocm9sZSkgPT4ge1xuICAgICAgICBjbGlSb2xlcyArPSAnIycgKyByb2xlICsgJywnO1xuICAgICAgICByZXR1cm4gJyMnICsgcm9sZTtcbiAgICAgIH0pXTtcbiAgICAgIGNsaVJvbGVzID0gY2xpUm9sZXMuc2xpY2UoMCwgLTEpO1xuICAgICAgcG9saWN5UmVzdWx0ID0gYXdhaXQgdGhpcy5zYXZlRW50aXR5KCdzZXJ2aWNlLXBvbGljaWVzJywgcG9saWN5QXBpRGF0YSkuY2F0Y2goKHJlc3VsdCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlID09PSAnRGlhbCcpIHtcbiAgICAgICAgcG9saWN5QXBpRGF0YSA9IHRoaXMuZGlhbFBvbGljeUFwaURhdGE7XG4gICAgICAgIHJvbGVBdHRyaWJ1dGVzID0gdGhpcy5kaWFsUG9saWN5Um9sZUF0dHJpYnV0ZXM7XG4gICAgICAgIG5hbWVkQXR0cmlidXRlcyA9IHRoaXMuZGlhbFBvbGljeU5hbWVkQXR0cmlidXRlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvbGljeUFwaURhdGEgPSB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhO1xuICAgICAgICByb2xlQXR0cmlidXRlcyA9IHRoaXMuYmluZFBvbGljeVJvbGVBdHRyaWJ1dGVzO1xuICAgICAgICBuYW1lZEF0dHJpYnV0ZXMgPSB0aGlzLmJpbmRQb2xpY3lOYW1lZEF0dHJpYnV0ZXM7XG4gICAgICB9XG4gICAgICBwb2xpY3lBcGlEYXRhLnNlcnZpY2VSb2xlcyA9IFtgQCR7dGhpcy5zZXJ2aWNlSWR9YF07XG4gICAgICBwb2xpY3lBcGlEYXRhLmlkZW50aXR5Um9sZXMgPSBuYW1lZEF0dHJpYnV0ZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICAgIGNsaVJvbGVzICs9ICdAJyArIHRoaXMuaWRlbnRpdGllc05hbWVJZE1hcFtuYW1lXSArICcsJztcbiAgICAgICAgcmV0dXJuICdAJyArIHRoaXMuaWRlbnRpdGllc05hbWVJZE1hcFtuYW1lXTtcbiAgICAgIH0pO1xuICAgICAgcG9saWN5QXBpRGF0YS5pZGVudGl0eVJvbGVzID0gWy4uLnBvbGljeUFwaURhdGEuaWRlbnRpdHlSb2xlcywgLi4ucm9sZUF0dHJpYnV0ZXMubWFwKChyb2xlKSA9PiB7XG4gICAgICAgIGNsaVJvbGVzICs9ICcjJyArIHJvbGUgKyAnLCc7XG4gICAgICAgIHJldHVybiAnIycgKyByb2xlO1xuICAgICAgfSldO1xuICAgICAgY2xpUm9sZXMgPSBjbGlSb2xlcy5zbGljZSgwLCAtMSk7XG4gICAgICBwb2xpY3lSZXN1bHQgPSBhd2FpdCB0aGlzLnVwZGF0ZUVudGl0eSgnc2VydmljZS1wb2xpY2llcycsIHBvbGljeUFwaURhdGEpLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwb2xpY3lSZXN1bHQuZXJyb3IpIHtcbiAgICAgIHN0YXR1cyA9ICdlcnJvcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXR1cyA9ICdkb25lJztcbiAgICB9XG4gICAgY29uc3Qgc3VtbWFyeUluZGV4ID0gKHRoaXMuc2RrT25seURpYWwgJiYgdGhpcy5zZGtPbmx5QmluZCkgPyAxIDogMjtcbiAgICBjb25zdCBlbnRpdHlJbmRleCA9IHR5cGUgPT09ICdEaWFsJyA/IDAgOiAxO1xuICAgIHN1bW1hcnlEYXRhW3N1bW1hcnlJbmRleF0uZW50aXRpZXNbZW50aXR5SW5kZXhdLnN0YXR1cyA9IHN0YXR1cztcbiAgICBjb25zdCBjbGlDb21tYW5kID0gYHppdGkgZWRnZSBjcmVhdGUgc2VydmljZS1wb2xpY3kgJyR7cG9saWN5QXBpRGF0YS5uYW1lfScgJHt0eXBlfSAtLXNlbWFudGljIEFueU9mIC0tc2VydmljZS1yb2xlcyAnQCR7dGhpcy5zZXJ2aWNlSWR9JyAtLWlkZW50aXR5LXJvbGVzICcke2NsaVJvbGVzfSdgO1xuICAgIGlmICh0eXBlID09PSAnRGlhbCcpIHtcbiAgICAgIHRoaXMuZGlhbFBvbGljeUNsaUNvbW1hbmQgPSBjbGlDb21tYW5kO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gJ2RvbmUnKSB7XG4gICAgICAgIHRoaXMuZGlhbEluY3JlbWVudCA9IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5iaW5kSW5jcmVtZW50ID0gLTE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmluZFBvbGljeUNsaUNvbW1hbmQgPSBjbGlDb21tYW5kO1xuICAgIH1cbiAgfVxuXG4gIHNhdmVFbnRpdHkodHlwZSwgZGF0YSkge1xuICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLnBvc3QodHlwZSwgZGF0YSwgdHJ1ZSk7XG4gIH1cblxuICB1cGRhdGVFbnRpdHkodHlwZSwgZGF0YSkge1xuICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLnBhdGNoKHR5cGUsIGRhdGEsIGRhdGEuaWQsIHRydWUpO1xuICB9XG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgdGhpcy5lcnJvcnMgPSB7fTtcbiAgICB0aGlzLnZhbGlkYXRlU2VydmljZU5hbWUoKTtcbiAgICB0aGlzLnZhbGlkYXRlSW50ZXJjZXB0QWRkcmVzcygpO1xuICAgIHRoaXMudmFsaWRhdGVJbnRlcmNlcHRQb3J0KCk7XG4gICAgdGhpcy52YWxpZGF0ZUhvc3RBZGRyZXNzKCk7XG4gICAgdGhpcy52YWxpZGF0ZUhvc3RQb3J0KCk7XG4gICAgdGhpcy52YWxpZGF0ZURpYWxJZGVudGl0aWVzKClcbiAgICB0aGlzLnZhbGlkYXRlQmluZElkZW50aXRpZXMoKTtcbiAgICByZXR1cm4gaXNFbXB0eSh0aGlzLmVycm9ycyk7XG4gIH1cblxuICB2YWxpZGF0ZVNlcnZpY2VOYW1lKCkge1xuICAgIGlmIChpc0VtcHR5KHRoaXMuc2VydmljZUFwaURhdGEubmFtZSkpIHtcbiAgICAgIHRoaXMuZXJyb3JzLm5hbWUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ25hbWUnKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUludGVyY2VwdEFkZHJlc3MoKSB7XG4gICAgaWYgKHRoaXMuc2RrT25seURpYWwpIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaW50ZXJjZXB0QWRkcmVzcycpO1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdpbnRlcmNlcHRBZGRyZXNzRm9ybWF0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0VtcHR5KHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3NlcykgfHwgaXNFbXB0eSh0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YS5hZGRyZXNzZXNbMF0pKSB7XG4gICAgICB0aGlzLmVycm9ycy5pbnRlcmNlcHRBZGRyZXNzID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmlzVmFsaWRJbnRlcmNlcHRIb3N0KHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3Nlc1swXSkpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmludGVyY2VwdEFkZHJlc3MgPSB0cnVlO1xuICAgICAgdGhpcy5lcnJvcnMuaW50ZXJjZXB0QWRkcmVzc0Zvcm1hdCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaW50ZXJjZXB0QWRkcmVzcycpO1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdpbnRlcmNlcHRBZGRyZXNzRm9ybWF0Jyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVJbnRlcmNlcHRQb3J0KCkge1xuICAgIGlmICh0aGlzLnNka09ubHlEaWFsKSB7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2ludGVyY2VwdFBvcnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzRW1wdHkodGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEucG9ydFJhbmdlcykpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmludGVyY2VwdFBvcnQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZVBvcnRSYW5nZXModGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEucG9ydFJhbmdlcykpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmludGVyY2VwdFBvcnQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2ludGVyY2VwdFBvcnQnKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUhvc3RBZGRyZXNzKCkge1xuICAgIGlmICghdGhpcy5zZGtPbmx5QmluZCAmJiBpc0VtcHR5KHRoaXMuaG9zdENvbmZpZ0FwaURhdGEuZGF0YS5hZGRyZXNzKSkge1xuICAgICAgdGhpcy5lcnJvcnMuaG9zdEFkZHJlc3MgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2hvc3RBZGRyZXNzJyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVIb3N0UG9ydCgpIHtcbiAgICBpZiAodGhpcy5zZGtPbmx5QmluZCkge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdob3N0UG9ydCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNOaWwodGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhLnBvcnQpIHx8IGlzTmFOKHRoaXMuaG9zdENvbmZpZ0FwaURhdGEuZGF0YS5wb3J0KSkge1xuICAgICAgdGhpcy5lcnJvcnMuaG9zdFBvcnQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuaXNWYWxpZFBvcnQodGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhLnBvcnQpKSB7XG4gICAgICB0aGlzLmVycm9ycy5ob3N0UG9ydCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaG9zdFBvcnQnKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZURpYWxJZGVudGl0aWVzKCkge1xuICAgIGlmIChpc0VtcHR5KFsuLi50aGlzLmRpYWxQb2xpY3lOYW1lZEF0dHJpYnV0ZXMsIC4uLnRoaXMuZGlhbFBvbGljeVJvbGVBdHRyaWJ1dGVzXSkpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmRpYWxJZGVudGl0aWVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdkaWFsSWRlbnRpdGllcycpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlQmluZElkZW50aXRpZXMoKSB7XG4gICAgaWYgKGlzRW1wdHkoWy4uLnRoaXMuYmluZFBvbGljeU5hbWVkQXR0cmlidXRlcywgLi4udGhpcy5iaW5kUG9saWN5Um9sZUF0dHJpYnV0ZXNdKSkge1xuICAgICAgdGhpcy5lcnJvcnMuYmluZElkZW50aXRpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2JpbmRJZGVudGl0aWVzJyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2VydmljZXNBcGlSZXF1ZXN0KCkge1xuICAgIHJldHVybiBgY3VybCAnJHt0aGlzLmNvbnRyb2xsZXJEb21haW59L2VkZ2UvbWFuYWdlbWVudC92MS9zZXJ2aWNlcycgXFxcXFxuICAgICAgLUggJ2FjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyBcXFxcXG4gICAgICAtSCAnY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gICAgICAtSCAnenQtc2Vzc2lvbjogJHt0aGlzLnppdGlTZXNzaW9uSWR9JyBcXFxcXG4gICAgICAtLWRhdGEtcmF3ICcke0pTT04uc3RyaW5naWZ5KHRoaXMuc2VydmljZUFwaURhdGEpfScgXFxcXGBcbiAgfVxuXG4gIGdldEludGVyY2VwdENvbmZpZ0FwaVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIGBjdXJsICcke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL2NvbmZpZ3MnIFxcXFxcbiAgICAgIC1IICdhY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicgXFxcXFxuICAgICAgLUggJ2NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vanNvbicgXFxcXFxuICAgICAgLUggJ3p0LXNlc3Npb246ICR7dGhpcy56aXRpU2Vzc2lvbklkfScgXFxcXFxuICAgICAgLS1kYXRhLXJhdyAnJHtKU09OLnN0cmluZ2lmeSh0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEpfScgXFxcXGBcbiAgfVxuXG4gIGdldEhvc3RDb25maWdBcGlSZXF1ZXN0KCkge1xuICAgIHJldHVybiBgY3VybCAnJHt0aGlzLmNvbnRyb2xsZXJEb21haW59L2VkZ2UvbWFuYWdlbWVudC92MS9jb25maWdzJyBcXFxcXG4gICAgICAtSCAnYWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonIFxcXFxcbiAgICAgIC1IICdjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb24nIFxcXFxcbiAgICAgIC1IICd6dC1zZXNzaW9uOiAke3RoaXMueml0aVNlc3Npb25JZH0nIFxcXFxcbiAgICAgIC0tZGF0YS1yYXcgJyR7SlNPTi5zdHJpbmdpZnkodGhpcy5ob3N0Q29uZmlnQXBpRGF0YSl9JyBcXFxcYFxuICB9XG5cbiAgZ2V0RGlhbEFwaVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIGBjdXJsICcke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL3NlcnZpY2UtcG9saWNpZXMnIFxcXFxcbiAgICAgIC1IICdhY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicgXFxcXFxuICAgICAgLUggJ2NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vanNvbicgXFxcXFxuICAgICAgLUggJ3p0LXNlc3Npb246ICR7dGhpcy56aXRpU2Vzc2lvbklkfScgXFxcXFxuICAgICAgLS1kYXRhLXJhdyAnJHtKU09OLnN0cmluZ2lmeSh0aGlzLmRpYWxQb2xpY3lBcGlEYXRhKX0nIFxcXFxgO1xuICB9XG5cbiAgZ2V0QmluZEFwaVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIGBjdXJsICcke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL3NlcnZpY2UtcG9saWNpZXMnIFxcXFxcbiAgICAgIC1IICdhY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicgXFxcXFxuICAgICAgLUggJ2NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vanNvbicgXFxcXFxuICAgICAgLUggJ3p0LXNlc3Npb246ICR7dGhpcy56aXRpU2Vzc2lvbklkfScgXFxcXFxuICAgICAgLS1kYXRhLXJhdyAnJHtKU09OLnN0cmluZ2lmeSh0aGlzLmJpbmRQb2xpY3lBcGlEYXRhKX0nIFxcXFxgO1xuICB9XG5cbiAgaW5pdERhdGFNb2RlbHMoKSB7XG4gICAgdGhpcy5zZXJ2aWNlQXBpRGF0YSA9IHRoaXMuaW5pdFNlcnZpY2VBcGlEYXRhO1xuICAgIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhID0gdGhpcy5pbml0SW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhO1xuICAgIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEuZGF0YSA9IHRoaXMuaW5pdEhvc3RDb25maWdBcGlEYXRhLmRhdGE7XG4gICAgdGhpcy5kaWFsUG9saWN5QXBpRGF0YSA9IHRoaXMuaW5pdERpYWxQb2xpY3lBcGlEYXRhO1xuICAgIHRoaXMuYmluZFBvbGljeUFwaURhdGEgPSB0aGlzLmluaXRCaW5kUG9saWN5QXBpRGF0YTtcbiAgfVxuXG4gIGNvbnZlcnRUb0FkdmFuY2VkKCkge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhcHBlbmRJZDogJ0NvbnZlcnRTaW1wbGVTZXJ2aWNlJyxcbiAgICAgIHRpdGxlOiAnQ29udmVydCBTZXJ2aWNlJyxcbiAgICAgIG1lc3NhZ2U6IGBBcmUgeW91IHN1cmUgeW91IHdvdWxkIGxpa2UgdG8gY29udmVydCB0aGlzIHNpbXBsZSBzZXJ2aWNlIHRvIGFuIGFkdmFuY2VkIHNlcnZpY2U/IFRoaXMgY2hhbmdlIGNhbm5vdCBiZSB1bmRvbmUuYCxcbiAgICAgIGJ1bGxldExpc3Q6IFtdLFxuICAgICAgY29uZmlybUxhYmVsOiAnWWVzJyxcbiAgICAgIGNhbmNlbExhYmVsOiAnT29wcywgbm8gZ2V0IG1lIG91dCBvZiBoZXJlJyxcbiAgICAgIGltYWdlVXJsOiAnLi4vLi4vYXNzZXRzL3N2Z3MvR3Jvd2xfV2FybmluZy5zdmcnLFxuICAgICAgc2hvd0NhbmNlbExpbms6IHRydWVcbiAgICB9O1xuICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dGb3JtLm9wZW4oQ29uZmlybUNvbXBvbmVudCwge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgfSk7XG4gICAgdGhpcy5kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdD8uY29uZmlybWVkKSB7XG4gICAgICAgIHRoaXMuc2VydmljZUFwaURhdGEudGFnc1snc2VydmljZS10eXBlJ10gPSAnYWR2YW5jZWQnO1xuICAgICAgICB0aGlzLnVwZGF0ZUVudGl0eSgnc2VydmljZXMnLCB0aGlzLnNlcnZpY2VBcGlEYXRhKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgIGBTZXJ2aWNlIFVwZGF0ZWRgLFxuICAgICAgICAgICAgICAgIGBTdWNjZXNzZnVsbHkgY29udmVydGVkICR7dGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lfSB0byBhbiBhZHZhbmNlZCBzZXJ2aWNlLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtVUkxTLlpJVElfQURWQU5DRURfU0VSVklDRSArICcvJyArIHRoaXMuc2VydmljZUFwaURhdGEuaWRdKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAnRXJyb3InLFxuICAgICAgICAgICAgICAgIGBGYWlsZWQgdG8gVXBkYXRlIFNlcnZpY2VgLFxuICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gY29udmVydCAke3RoaXMuc2VydmljZUFwaURhdGEubmFtZX0gdG8gYW4gYWR2YW5jZWQgc2VydmljZS5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgfVxuXG4gIG92ZXJyaWRlIGNoZWNrRGF0YUNoYW5nZSgpIHtcbiAgICBjb25zdCBzZXJ2aWNlRGF0YUNoYW5nZSA9ICFpc0VxdWFsKHRoaXMuaW5pdFNlcnZpY2VBcGlEYXRhLCB0aGlzLnNlcnZpY2VBcGlEYXRhKTtcbiAgICBjb25zdCBpbnRlcmNlcHREYXRhQ2hhbmdlID0gIWlzRXF1YWwodGhpcy5pbml0SW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLCB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YSk7XG4gICAgY29uc3QgaG9zdERhdGFDaGFuZ2UgPSAhaXNFcXVhbCh0aGlzLmluaXRIb3N0Q29uZmlnQXBpRGF0YS5kYXRhLCB0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEpO1xuICAgIGNvbnN0IGRpYWxEYXRhQ2hhbmdlID0gIWlzRXF1YWwodGhpcy5pbml0RGlhbFBvbGljeUFwaURhdGEsIHRoaXMuZGlhbFBvbGljeUFwaURhdGEpO1xuICAgIGNvbnN0IGJpbmREYXRhQ2hhbmdlID0gIWlzRXF1YWwodGhpcy5pbml0QmluZFBvbGljeUFwaURhdGEsIHRoaXMuYmluZFBvbGljeUFwaURhdGEpO1xuICAgIGNvbnN0IGRhdGFDaGFuZ2UgPSBzZXJ2aWNlRGF0YUNoYW5nZSAhPT0gdGhpcy5zZXJ2aWNlRGF0YUNoYW5nZSB8fCBpbnRlcmNlcHREYXRhQ2hhbmdlICE9PSB0aGlzLmludGVyY2VwdERhdGFDaGFuZ2UgfHwgaG9zdERhdGFDaGFuZ2UgIT09IHRoaXMuaG9zdERhdGFDaGFuZ2UgfHxcbiAgICAgICAgZGlhbERhdGFDaGFuZ2UgIT09IHRoaXMuZGlhbERhdGFDaGFuZ2UgfHwgYmluZERhdGFDaGFuZ2UgIT09IHRoaXMuYmluZERhdGFDaGFuZ2U7XG4gICAgaWYgKGRhdGFDaGFuZ2UpIHtcbiAgICAgIHRoaXMuc2VydmljZURhdGFDaGFuZ2UgPSBzZXJ2aWNlRGF0YUNoYW5nZTtcbiAgICAgIHRoaXMuaW50ZXJjZXB0RGF0YUNoYW5nZSA9IGludGVyY2VwdERhdGFDaGFuZ2U7XG4gICAgICB0aGlzLmhvc3REYXRhQ2hhbmdlID0gaG9zdERhdGFDaGFuZ2U7XG4gICAgICB0aGlzLmRpYWxEYXRhQ2hhbmdlID0gZGlhbERhdGFDaGFuZ2U7XG4gICAgICB0aGlzLmJpbmREYXRhQ2hhbmdlID0gYmluZERhdGFDaGFuZ2U7XG4gICAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdChkYXRhQ2hhbmdlKTtcbiAgICB9XG4gICAgdGhpcy5fZGF0YUNoYW5nZSA9IHNlcnZpY2VEYXRhQ2hhbmdlIHx8IGludGVyY2VwdERhdGFDaGFuZ2UgfHwgaG9zdERhdGFDaGFuZ2UgfHwgZGlhbERhdGFDaGFuZ2UgfHwgYmluZERhdGFDaGFuZ2U7XG4gICAgYXBwLmlzRGlydHkgPSBmYWxzZTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicHJvamVjdGFibGUtZm9ybS13cmFwcGVyIHNpbXBsZS1zZXJ2aWNlLXdyYXBwZXJcIlxuICAgICAoa2V5dXAuZW50ZXIpPVwic2F2ZSgkZXZlbnQpXCJcbiAgICAgKGtleXVwLmVzY2FwZSk9XCJjbG9zZU1vZGFsKHRydWUsIGZhbHNlLCAnY2FyZHMnLCAkZXZlbnQpXCJcbiAgICAgdGFiaW5kZXg9XCIwXCJcbj5cbiAgICA8bGliLWZvcm0taGVhZGVyXG4gICAgICAgICAgICBbZGF0YV09XCJmb3JtRGF0YVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiaXNFZGl0ID8gJ0VkaXQgU2ltcGxlIFNlcnZpY2UnIDogJ0NyZWF0ZSBhIFNpbXBsZSBTZXJ2aWNlJ1wiXG4gICAgICAgICAgICBbYWN0aW9uQnV0dG9uVGV4dF09XCInU2F2ZSdcIlxuICAgICAgICAgICAgW211bHRpQWN0aW9uc109XCJtdWx0aUFjdGlvbnNcIlxuICAgICAgICAgICAgKGFjdGlvblJlcXVlc3RlZCk9XCJoZWFkZXJBY3Rpb25SZXF1ZXN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAobXVsdGlBY3Rpb25SZXF1ZXN0ZWQpPVwibXVsdGlBY3Rpb25SZXF1ZXN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbKGZvcm1WaWV3KV09XCJmb3JtVmlld1wiXG4gICAgICAgICAgICBbbW9yZUFjdGlvbnNdPVwibW9yZUFjdGlvbnNcIlxuICAgID48L2xpYi1mb3JtLWhlYWRlcj5cblxuICAgIDxkaXYgY2xhc3M9XCJzaW1wbGUtc2VydmljZS1mb3JtLWNvbnRhaW5lciBwcm9qZWN0YWJsZS1mb3JtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1jb2x1bW4gdGhyZWUtZmlmdGhzXCIgKm5nSWY9XCJzaG93Rm9ybVwiPlxuICAgICAgICAgICAgPGRpdiAgaWQ9XCJJbmxpbmVTZXJ2aWNlQXJlYVwiIGNsYXNzPVwiYW55YWRkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbXBsZS1zZXJ2aWNlLWlucHV0c1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyIFt0aXRsZV09XCInU2VydmljZSBEZXRhaWxzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXQtZ3JvdXAgc2VydmljZS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLXN1Yi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLXRpdGxlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+U2VydmljZSBOYW1lPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJOYW1lIHRoaXMgc2VydmljZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNuYW1lRmllbGRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie2Vycm9yOiBlcnJvcnMubmFtZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZXJ2aWNlQXBpRGF0YS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJzZXJ2aWNlTmFtZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInZhbGlkYXRlU2VydmljZU5hbWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tZmllbGQtdGl0bGVcIj5TRUxFQ1QgT1IgQ1JFQVRFIFNFUlZJQ0UgQVRUUklCVVRFUzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItdGFnLXNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMpXT1cInNlcnZpY2VBcGlEYXRhLnJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVSb2xlQXR0cmlidXRlc109XCJzZXJ2aWNlUm9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidBZGQgYXR0cmlidXRlcyB0byBncm91cCBzZXJ2aWNlcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9saWItdGFnLXNlbGVjdG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2ltcGxlLXNlcnZpY2UtY2VudGVyLWNvbnRlbnRcIiAqbmdJZj1cInNob3dGb3JtXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIj5cbiAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FDQ0VTU0lORyBDT05GSUdVUkFUSU9OJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudFN0eWxlXT1cIid6LWluZGV4OiAxMDAwMSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidIb3cgd2lsbCBjbGllbnQgYXBwbGljYXRpb25zIHVzZSB0aGlzIHNlcnZpY2U/IFNwZWNpZnkgYSBob3N0bmFtZS9JUCBhbmQgcG9ydCwgb3IgdXNlIHRoZSAmcXVvdDtTREsgT25seSZxdW90OyB0b2dnbGUgZm9yIGFuIGFwcGxpY2F0aW9uIGVtYmVkZGVkIGNvbmZpZ3VyYXRpb24uJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1pbnB1dC1ncm91cCBhY2Nlc3NpbmctZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLXN1Yi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC10aXRsZVwiPldoYXQgaWRlbnRpdGllcyBjYW4gYWNjZXNzIHRoaXMgc2VydmljZT88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi10YWctc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMpXT1cImRpYWxQb2xpY3lOYW1lZEF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzKV09XCJkaWFsUG9saWN5Um9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZU5hbWVkQXR0cmlidXRlc109XCJpZGVudGl0eU5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlUm9sZUF0dHJpYnV0ZXNdPVwiaWRlbnRpdHlSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBpZGVudGl0eSBhdHRyaWJ1dGVzIHRvIGdyYW50IGFjY2VzcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hhc0Vycm9yXT1cImVycm9ycy5kaWFsSWRlbnRpdGllc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXNDaGFuZ2UpPVwidmFsaWRhdGVEaWFsSWRlbnRpdGllcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzQ2hhbmdlKT1cInZhbGlkYXRlRGlhbElkZW50aXRpZXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsdGVyQ2hhbmdlKT1cImdldElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2xpYi10YWctc2VsZWN0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLXN1Yi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC10aXRsZVwiPkhvdyB3aWxsIHRoZSBzZXJ2aWNlIGJlIGFjY2Vzc2VkPzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBhZGRyZXNzUG9ydFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWl0ZW0tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmZpZy1pdGVtLWxhYmVsXCI+U0RLIE9OTFk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2RrLXRvZ2dsZSBmb3JtLWZpZWxkLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN3aXRjaEdyaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNka09ubHlEaWFsKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IG9uOiBzZGtPbmx5RGlhbCB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwiIXNka09ubHlEaWFsXCIgY2xhc3M9XCJvbi1sYWJlbFwiPllFUzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cInNka09ubHlEaWFsXCIgY2xhc3M9XCJvZmYtbGFiZWxcIj5OTzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaXRlbS1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7ZGlzYWJsZWQ6IHNka09ubHlEaWFsfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1ob3N0bmFtZS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZmlnLWl0ZW0tbGFiZWxcIj5IT1NUTkFNRSAvIElQPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkLWluZm8gaW5mb2ljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQWNjZXNzaW5nIGhvc3RuYW1lcyBtdXN0IGluY2x1ZGUgYSAnLidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZXJyb3JzLmludGVyY2VwdEFkZHJlc3NGb3JtYXRcIiBjbGFzcz1cImVycm9yLWxhYmVsXCI+QWNjZXNzaW5nIGhvc3RuYW1lcyBtdXN0IGluY2x1ZGUgYSAnLic8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cIkhvd1RvXCIgdHlwZT1cInRleHRcIiBtYXhsZW5ndGg9XCIxMDBcIiBkYXRhLWkxOG49XCJFZ0hvc3RcIiAoY2hhbmdlKT1cInZhbGlkYXRlSW50ZXJjZXB0QWRkcmVzcygpXCIgW25nQ2xhc3NdPVwie2Vycm9yOiBlcnJvcnMuaW50ZXJjZXB0QWRkcmVzc31cIiBbcGxhY2Vob2xkZXJdPVwic2RrT25seURpYWwgPyAnJyA6ICdlLmcuIG15c2VydmljZS56aXRpJ1wiIFsobmdNb2RlbCldPVwic2RrT25seURpYWwgPyAnJyA6IGludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YS5hZGRyZXNzZXNbMF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaXRlbS1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7ZGlzYWJsZWQ6IHNka09ubHlEaWFsfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maWctaXRlbS1sYWJlbFwiPlBPUlQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJIb3dUb1BvcnRcIiB0eXBlPVwibnVtYmVyXCIgbWF4bGVuZ3RoPVwiMTBcIiAoY2hhbmdlKT1cInZhbGlkYXRlSW50ZXJjZXB0UG9ydCgpXCIgW25nQ2xhc3NdPVwie2Vycm9yOiBlcnJvcnMuaW50ZXJjZXB0UG9ydH1cIiBbcGxhY2Vob2xkZXJdPVwic2RrT25seURpYWwgPyAnJyA6IDQ0M1wiIChrZXl1cCk9XCJpbnRlcmNlcHRQb3J0Q2hhbmdlZCgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJzZGtPbmx5RGlhbCA/ICcnIDogaW50ZXJjZXB0UG9ydFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpYi1mb3JtLWZpZWxkLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0hPU1RJTkcgQ09ORklHVVJBVElPTidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRTdHlsZV09XCInei1pbmRleDogMTAwMDAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtoZWxwVGV4dF09XCInV2hlcmUgc2hvdWxkIHRyYWZmaWMgZm9yIHRoaXMgc2VydmljZSBiZSBzZW50PyBTcGVjaWZ5IGEgcHJvdG9jb2wsIGhvc3RuYW1lL0lQLCBhbmQgcG9ydCwgb3IgdXNlIHRoZSAmcXVvdDtTREsgT25seSZxdW90OyB0b2dnbGUgZm9yIGFuIGFwcGxpY2F0aW9uIGVtYmVkZGVkIGNvbmZpZ3VyYXRpb24uJ1wiXG5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0LWdyb3VwIGhvc3RpbmctZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLXN1Yi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC10aXRsZVwiPldoYXQgaWRlbnRpdGllcyBjYW4gaG9zdCB0aGlzIHNlcnZpY2U/PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItdGFnLXNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzKV09XCJiaW5kUG9saWN5TmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyldPVwiYmluZFBvbGljeVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVOYW1lZEF0dHJpYnV0ZXNdPVwiaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZVJvbGVBdHRyaWJ1dGVzXT1cImlkZW50aXR5Um9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgaWRlbnRpdHkgYXR0cmlidXRlcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hhc0Vycm9yXT1cImVycm9ycy5iaW5kSWRlbnRpdGllc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXNDaGFuZ2UpPVwidmFsaWRhdGVCaW5kSWRlbnRpdGllcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzQ2hhbmdlKT1cInZhbGlkYXRlQmluZElkZW50aXRpZXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsdGVyQ2hhbmdlKT1cImdldElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2xpYi10YWctc2VsZWN0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLXN1Yi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC10aXRsZVwiPldoZXJlIHNob3VsZCB0cmFmZmljIGJlIHNlbnQ/PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGFkZHJlc3NGdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaXRlbS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZmlnLWl0ZW0tbGFiZWxcIj5TREsgT05MWTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGstdG9nZ2xlIGZvcm0tZmllbGQtdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoR3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2RrT25seUJpbmQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgb246IHNka09ubHlCaW5kIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCIhc2RrT25seUJpbmRcIiBjbGFzcz1cIm9uLWxhYmVsXCI+WUVTPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwic2RrT25seUJpbmRcIiBjbGFzcz1cIm9mZi1sYWJlbFwiPk5PPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2hcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogc2RrT25seUJpbmR9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmZpZy1pdGVtLWxhYmVsXCI+UFJPVE9DT0w8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwiSG9zdGVkUHJvdG9jb2xcIiAoY2hhbmdlKT1cImhvc3RQcm90b2NvbHNDaGFuZ2VkKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInNka09ubHlCaW5kID8gJycgOiBob3N0UHJvdG9jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidGNwXCI+VENQPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInVkcFwiID5VRFA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYm90aFwiID5UQ1AvVURQPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaXRlbS1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7ZGlzYWJsZWQ6IHNka09ubHlCaW5kfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maWctaXRlbS1sYWJlbFwiPkhPU1ROQU1FIC8gSVA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJIb3N0ZWRIb3N0XCIgdHlwZT1cInRleHRcIiBtYXhsZW5ndGg9XCIxMDBcIiBkYXRhLWkxOG49XCJFZ0hvc3RcIiAoY2hhbmdlKT1cInZhbGlkYXRlSG9zdEFkZHJlc3MoKVwiIFtuZ0NsYXNzXT1cIntlcnJvcjogZXJyb3JzLmhvc3RBZGRyZXNzfVwiIFtwbGFjZWhvbGRlcl09XCJzZGtPbmx5QmluZCA/ICcnIDogJ2UuZy4gbXlzZXJ2aWNlLnppdGknXCIgWyhuZ01vZGVsKV09XCJzZGtPbmx5QmluZCA/ICcnIDogaG9zdENvbmZpZ0FwaURhdGEuZGF0YS5hZGRyZXNzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWl0ZW0tY29udGFpbmVyXCIgW25nQ2xhc3NdPVwie2Rpc2FibGVkOiBzZGtPbmx5QmluZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZmlnLWl0ZW0tbGFiZWxcIj5QT1JUPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiSG9zdGVkUG9ydFwiIHR5cGU9XCJudW1iZXJcIiBtYXhsZW5ndGg9XCIxMFwiIChjaGFuZ2UpPVwidmFsaWRhdGVIb3N0UG9ydCgpXCIgW25nQ2xhc3NdPVwie2Vycm9yOiBlcnJvcnMuaG9zdFBvcnR9XCIgW3BsYWNlaG9sZGVyXT1cInNka09ubHlCaW5kID8gJycgOiA0NDNcIiBbKG5nTW9kZWwpXT1cInNka09ubHlCaW5kID8gJycgOiBob3N0Q29uZmlnQXBpRGF0YS5kYXRhLnBvcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|