@openziti/ziti-console-lib 0.6.8 → 0.7.1
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/scripts/components/codemirror/codemirror.css +25 -25
- package/assets/scripts/components/codemirror/modes/addons/show-hint.css +8 -8
- package/assets/scripts/components/column.css +28 -28
- package/assets/scripts/components/leaflet/leaflet.css +94 -94
- package/assets/scripts/components/network/vis-network.css +209 -209
- package/assets/scripts/components/network/vis-network.min.css +1 -1
- package/assets/styles/chart.min.css +1 -1
- package/assets/styles/dark.css +12 -2
- package/assets/styles/datetimepicker.css +1 -1
- package/assets/styles/forms.css +119 -119
- package/assets/styles/global.scss +268 -238
- package/assets/styles/growler.css +50 -50
- package/assets/styles/header.css +65 -65
- package/assets/styles/navigation.css +45 -45
- package/assets/styles/select2.css +84 -84
- package/assets/styles/spectrum.css +79 -79
- package/assets/styles/tables.css +118 -118
- package/assets/styles/tooltip.css +18 -18
- package/assets/styles/ziti.css +736 -730
- package/esm2022/lib/features/card/card.component.mjs +2 -2
- package/esm2022/lib/features/card-list/card-list.component.mjs +2 -2
- package/esm2022/lib/features/confirm/confirm.component.mjs +2 -2
- package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +2 -2
- package/esm2022/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.mjs +2 -2
- package/esm2022/lib/features/data-table/cells/table-cell-name/table-cell-name.component.mjs +2 -2
- package/esm2022/lib/features/data-table/cells/table-cell-select/table-cell-select.component.mjs +2 -2
- package/esm2022/lib/features/data-table/column-headers/table-column-default/table-column-default.component.mjs +2 -2
- package/esm2022/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.mjs +2 -2
- package/esm2022/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.mjs +2 -2
- package/esm2022/lib/features/data-table/column-headers/table-column-select/table-column-select.component.mjs +2 -2
- package/esm2022/lib/features/data-table/data-table.component.mjs +12 -29
- package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +2 -2
- package/esm2022/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.mjs +2 -2
- package/esm2022/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.mjs +2 -2
- package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.mjs +2 -2
- package/esm2022/lib/features/dynamic-widgets/number/number-input.component.mjs +2 -2
- package/esm2022/lib/features/dynamic-widgets/object/object.component.mjs +2 -2
- package/esm2022/lib/features/dynamic-widgets/password/password-input.component.mjs +9 -7
- package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +2 -2
- package/esm2022/lib/features/dynamic-widgets/selector/selector-input.component.mjs +2 -2
- package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +11 -9
- package/esm2022/lib/features/json-view/json-view.component.mjs +2 -2
- package/esm2022/lib/features/list-page-features/list-page-form/list-page-form.component.mjs +2 -2
- package/esm2022/lib/features/list-page-features/list-page-header/list-page-header.component.mjs +2 -2
- package/esm2022/lib/features/loading-indicator/loading-indicator.component.mjs +2 -2
- package/esm2022/lib/features/messaging/growler.component.mjs +2 -2
- package/esm2022/lib/features/multi-action-button/multi-action-button.component.mjs +2 -2
- package/esm2022/lib/features/no-items/no-items.component.mjs +2 -2
- package/esm2022/lib/features/overrides/overrides.component.mjs +2 -2
- package/esm2022/lib/features/preview-list/preview-list.component.mjs +2 -2
- package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.mjs +2 -2
- 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 +3 -3
- package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +18 -3
- package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +2 -2
- package/esm2022/lib/features/qr-code/qr-code.component.mjs +2 -2
- package/esm2022/lib/features/reset-enrollment/reset-enrollment.component.mjs +2 -2
- package/esm2022/lib/features/side-modal/side-modal.component.mjs +2 -2
- package/esm2022/lib/features/sidebars/side-banner/side-banner.component.mjs +2 -2
- package/esm2022/lib/features/sidebars/side-navbar/side-navbar.component.mjs +2 -2
- package/esm2022/lib/features/sidebars/side-toolbar/side-toolbar.component.mjs +2 -2
- package/esm2022/lib/features/tag-selector/tag-selector.component.mjs +2 -2
- package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.component.mjs +2 -2
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.component.mjs +32 -15
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.helper.mjs +164 -267
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.mjs +12 -12
- package/esm2022/lib/pages/configurations/configurations-page.component.mjs +36 -3
- package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +2 -2
- package/esm2022/lib/pages/identities/identities-page.component.mjs +10 -3
- package/esm2022/lib/pages/jwt-signers/jwt-signers-page.component.mjs +2 -2
- package/esm2022/lib/pages/services/services-page.component.mjs +2 -2
- package/esm2022/lib/shared/list-page-component.class.mjs +1 -1
- package/esm2022/lib/shared/list-page-service.class.mjs +17 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/openziti-ziti-console-lib.mjs +411 -440
- package/fesm2022/openziti-ziti-console-lib.mjs.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/dynamic-widgets/password/password-input.component.d.ts +2 -0
- package/lib/features/dynamic-widgets/password/password-input.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/string/string-input.component.d.ts +2 -0
- package/lib/features/dynamic-widgets/string/string-input.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +1 -0
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +1 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts +1 -0
- package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts.map +1 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts.map +1 -1
- package/lib/pages/configurations/configurations-page.component.d.ts +1 -0
- package/lib/pages/configurations/configurations-page.component.d.ts.map +1 -1
- package/lib/pages/identities/identities-page.component.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 +1 -0
- package/lib/shared/list-page-service.class.d.ts.map +1 -1
- package/package.json +1 -1
package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.mjs
CHANGED
|
@@ -48,15 +48,15 @@ class TreeNodeProcessor {
|
|
|
48
48
|
const paging = this.getPagingObject(pagesize);
|
|
49
49
|
const erChailds = new Children();
|
|
50
50
|
erChailds.id = this.createId();
|
|
51
|
-
erChailds.name = 'Associated Routers';
|
|
52
|
-
erChailds.type = '
|
|
51
|
+
erChailds.name = 'Associated Edge Routers';
|
|
52
|
+
erChailds.type = 'Edge Routers';
|
|
53
53
|
const associatedRoutersPromise = await zitiService.get(url, paging, [])
|
|
54
54
|
.then((result) => {
|
|
55
55
|
result.data.forEach((re) => {
|
|
56
56
|
const tmp = new ERouter();
|
|
57
57
|
tmp.id = this.createId();
|
|
58
58
|
tmp.name = re.name;
|
|
59
|
-
tmp.type = 'Router';
|
|
59
|
+
tmp.type = 'Edge Router';
|
|
60
60
|
erChailds.children.push(tmp);
|
|
61
61
|
});
|
|
62
62
|
});
|
|
@@ -352,14 +352,14 @@ class TreeNodeProcessor {
|
|
|
352
352
|
const erOb = new ERouter();
|
|
353
353
|
erOb.id = this.createId();
|
|
354
354
|
erOb.name = er.name;
|
|
355
|
-
er.type = 'Router';
|
|
355
|
+
er.type = 'Edge Router';
|
|
356
356
|
associatedRouters.push(erOb);
|
|
357
357
|
});
|
|
358
358
|
}
|
|
359
359
|
});
|
|
360
360
|
const tmp = new Children();
|
|
361
|
-
tmp.name = "Associated Routers(" + associatedRouters.length + ')';
|
|
362
|
-
tmp.type = "Routers";
|
|
361
|
+
tmp.name = "Associated Edge Routers(" + associatedRouters.length + ')';
|
|
362
|
+
tmp.type = "Edge Routers";
|
|
363
363
|
tmp.children = associatedRouters;
|
|
364
364
|
tmp.id = this.createId();
|
|
365
365
|
serviceNode.data.children.push(tmp);
|
|
@@ -547,7 +547,7 @@ class TreeNodeProcessor {
|
|
|
547
547
|
policy.id = this.createId();
|
|
548
548
|
policy.uuid = pol.id;
|
|
549
549
|
policy.name = pol.name;
|
|
550
|
-
policy.type = 'Router Policy';
|
|
550
|
+
policy.type = 'Edge Router Policy';
|
|
551
551
|
policy.isSystem = pol.isSystem;
|
|
552
552
|
policy.semantic = pol.semantic;
|
|
553
553
|
policy.rootNode = 'No';
|
|
@@ -726,8 +726,8 @@ class TreeNodeProcessor {
|
|
|
726
726
|
let associatedRouters = [];
|
|
727
727
|
const paging = this.getPagingObject(pagesize);
|
|
728
728
|
const erChailds = new Children();
|
|
729
|
-
erChailds.name = 'Associated Routers';
|
|
730
|
-
erChailds.type = '
|
|
729
|
+
erChailds.name = 'Associated Edge Routers';
|
|
730
|
+
erChailds.type = 'Edge Routers';
|
|
731
731
|
erChailds.id = this.createId();
|
|
732
732
|
const associatedRoutersPromise = await zitiService.get(er_url, paging, [])
|
|
733
733
|
.then((result) => {
|
|
@@ -735,7 +735,7 @@ class TreeNodeProcessor {
|
|
|
735
735
|
const tmp = new ERouter();
|
|
736
736
|
tmp.id = this.createId();
|
|
737
737
|
tmp.name = er.name;
|
|
738
|
-
tmp.type = 'Router';
|
|
738
|
+
tmp.type = 'Edge Router';
|
|
739
739
|
tmp.verified = er.isVerified ? 'Yes' : 'No';
|
|
740
740
|
tmp.online = er.isOnline ? 'Yes' : 'No';
|
|
741
741
|
tmp.disabled = er.disabled ? 'Yes' : 'No';
|
|
@@ -823,7 +823,7 @@ class TreeNodeProcessor {
|
|
|
823
823
|
idOb.type = 'Edge Router';
|
|
824
824
|
erChilds.children.push(idOb);
|
|
825
825
|
});
|
|
826
|
-
erChilds.name = "
|
|
826
|
+
erChilds.name = "Edge Routers(" + erChilds.children.length + ')';
|
|
827
827
|
serviceErPolicyNode.data.children.push(erChilds);
|
|
828
828
|
});
|
|
829
829
|
});
|
|
@@ -881,4 +881,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
881
881
|
providedIn: 'root',
|
|
882
882
|
}]
|
|
883
883
|
}] });
|
|
884
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay12aXN1YWxpemVyLnRyZWVub2RlcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Zpc3VhbGl6ZXIvbmV0d29yay12aXN1YWxpemVyL25ldHdvcmstdmlzdWFsaXplci50cmVlbm9kZXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFFdEksTUFHYSxpQkFBaUI7SUFIOUI7UUFJSSxXQUFNLEdBQUcsQ0FBQyxDQUFDO0tBeTlCZDtJQXg5QkcsZUFBZSxDQUFDLFFBQVE7UUFDdEIsTUFBTSxNQUFNLEdBQUc7WUFDYixRQUFRLEVBQUUsTUFBTTtZQUNoQixRQUFRLEVBQUUsS0FBSztZQUNmLE1BQU0sRUFBRSxFQUFFO1lBQ1YsS0FBSyxFQUFFLFFBQVE7WUFDZixJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDO1FBQ0YsT0FBUSxNQUFNLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyw2QkFBNkIsQ0FDL0IsWUFBWSxFQUNaLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLFdBQVcsRUFDWCxPQUFPO1FBRVgsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLE9BQU8sQ0FBRSxLQUFLLEVBQUUsT0FBTyxF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QyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLElB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LEVBQUUsVUFBVSxFQUFFO1lBQ3ZELE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxNQUFNOytHQXo5QkMsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGZCxNQUFNO0VBNDlCcEIsZUFBZTtTQTE5QkosaUJBQWlCOzRGQUFqQixpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFNlcnZpY2VQb2xpY3ksIEF0dHJpYnV0ZSwgQ2hpbGRyZW4sIElkZW50aXR5LCBFUm91dGVyLCBFUlBvbGljeSwgR3JvdXAsIFNlcnZpY2UsIENvbmZpZyB9IGZyb20gJy4vbmV0d29yay12aXN1YWxpemVyLmhlbHBlcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVOb2RlUHJvY2Vzc29yIHtcbiAgICB1bmlxSWQgPSAwO1xuICAgIGdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSkge1xuICAgICAgY29uc3QgcGFnaW5nID0ge1xuICAgICAgICBzZWFyY2hPbjogJ25hbWUnLFxuICAgICAgICBub1NlYXJjaDogZmFsc2UsXG4gICAgICAgIGZpbHRlcjogJycsXG4gICAgICAgIHRvdGFsOiBwYWdlc2l6ZSxcbiAgICAgICAgcGFnZTogMSxcbiAgICAgICAgc29ydDogJ25hbWUnLFxuICAgICAgICBvcmRlcjogJ2FzYycsXG4gICAgICB9O1xuICAgICAgcmV0dXJuICBwYWdpbmc7XG4gICAgfVxuXG4gICAgYXN5bmMgcHJvY2Vzc0lkZW50aXRpZXNGb3JOb2RlQ2xpY2soXG4gICAgICAgIGlkZW50aXR5Tm9kZSxcbiAgICAgICAgbmV0d29ya0dyYXBoLFxuICAgICAgICByYXdFbmRwb2ludHMsXG4gICAgICAgIHVuaXFJZCxcbiAgICAgICAgeml0aVNlcnZpY2UsXG4gICAgICAgIGNvbmZpZ3NcbiAgICApIHtcbiAgICBjb25zdCBteVByb21pc2UgPSBhd2FpdCBuZXcgUHJvbWlzZSggYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgIGNvbnN0IHdhaXRfcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgdGhpcy51bmlxSWQgPSB1bmlxSWQ7XG4gICAgICAgIGNvbnN0IHJhd0VwID0gdGhpcy5maW5kUmF3RW5kcG9pbnQoaWRlbnRpdHlOb2RlLmRhdGEubmFtZSwgcmF3RW5kcG9pbnRzKTtcbiAgICAgICAgbGV0IHJhd0VwQXR0cmlidXRlcyA9IFtdO1xuICAgICAgICBpZiAocmF3RXAucm9sZUF0dHJpYnV0ZXMpIHtyYXdFcEF0dHJpYnV0ZXMgPSByYXdFcC5yb2xlQXR0cmlidXRlc307XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdFcEF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gbmV3IEF0dHJpYnV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZS5uYW1lID0gcmF3RXBBdHRyaWJ1dGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUudHlwZSA9ICdJZGVudGl0eSBBdHRyaWJ1dGUnO1xuICAgICAgICAgICAgICAgICAgICBpZGVudGl0eU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGF0dHJpYnV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICBjb25zdCBiaW5kU2VydmljZXMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgIGNvbnN0IGRpYWxTZXJ2aWNlcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgYmluZFNlcnZpY2VzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgZGlhbFNlcnZpY2VzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgbGV0IGlkZW50aXR5U2VydmljZVBvbGljaWVzID0gW107XG4gICAgICBjb25zdCBwYWdlc2l6ZSA9IDUwMDtcbiAgICAvLyBmZXRjaCBhc3NvY2lhdGVkIHJvdXRlcnNcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKHJhd0VwLCAnZWRnZS1yb3V0ZXJzJykucmVwbGFjZSgnLi8nLCAnJyk7XG4gICAgICBsZXQgYXNzb2NpYXRlZFJvdXRlcnMgPSBbXTtcbiAgICAgIGNvbnN0IHBhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgIGNvbnN0IGVyQ2hhaWxkcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICBlckNoYWlsZHMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgIGVyQ2hhaWxkcy5uYW1lPSAnQXNzb2NpYXRlZCBSb3V0ZXJzJztcbiAgICAgICAgZXJDaGFpbGRzLnR5cGU9ICdBc3NvY2lhdGVkIFJvdXRlcnMnO1xuICAgICAgY29uc3QgYXNzb2NpYXRlZFJvdXRlcnNQcm9taXNlID0gIGF3YWl0IHppdGlTZXJ2aWNlLmdldCh1cmwsIHBhZ2luZywgW10pXG4gICAgICAgICAgIC50aGVuKCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgcmVzdWx0LmRhdGEuZm9yRWFjaCggKHJlKSA9PiB7XG4gICAgICAgICAgICAgICBjb25zdCB0bXAgPSBuZXcgRVJvdXRlcigpO1xuICAgICAgICAgICAgICAgICAgIHRtcC5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICAgICB0bXAubmFtZSA9IHJlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgdG1wLnR5cGUgPSAnUm91dGVyJztcbiAgICAgICAgICAgICAgICAgICBlckNoYWlsZHMuY2hpbGRyZW4ucHVzaCh0bXApO1xuICAgICAgICAgICAgIH0gKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwb2xpY2llc191cmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShyYXdFcCwgJ3NlcnZpY2UtcG9saWNpZXMnKS5yZXBsYWNlKCcuLycsICcnKTtcbiAgICAgIGNvbnN0IHBvbGljaWVzX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgIGNvbnN0IGZpcnN0UHJvbWlzZSA9ICBhd2FpdCB6aXRpU2VydmljZVxuICAgICAgICAgICAgICAuZ2V0KHBvbGljaWVzX3VybCwgcG9saWNpZXNfcGFnaW5nLCBbXSlcbiAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlkZW50aXR5U2VydmljZVBvbGljaWVzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICBpZGVudGl0eVNlcnZpY2VQb2xpY2llcy5mb3JFYWNoKCAoc3ApID0+IHtcbiAgICAgICAgICAgICBjb25zdCBub2RlQXJyYXkgPSAgdGhpcy5nZXRTZXJ2aWNlc0ZvckFTZXJ2aWNlUG9saWN5KHNwLCB6aXRpU2VydmljZSwgNTAwKTtcbiAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKG5vZGVBcnJheSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCAobm9kZUFycmF5KSA9PiB7XG4gICAgICAgICAgICAgbm9kZUFycmF5LmZvckVhY2goIChhck9iKSA9PiB7XG4gICAgICAgICAgICAgIGlmKGFyT2JbMF0gPT09ICdCaW5kJyApIHtcbiAgICAgICAgICAgICAgICAgYmluZFNlcnZpY2VzLmNoaWxkcmVuID0gdGhpcy5hcnJheU9iamVjdENvcHlSaWdodFRvTGVmdChiaW5kU2VydmljZXMuY2hpbGRyZW4sIGFyT2JbMV0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICBkaWFsU2VydmljZXMuY2hpbGRyZW4gPSB0aGlzLmFycmF5T2JqZWN0Q29weVJpZ2h0VG9MZWZ0KGRpYWxTZXJ2aWNlcy5jaGlsZHJlbiwgYXJPYlsxXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICB9ICk7XG4gICAgICAgIH0pO1xuXG4gICAgICBQcm9taXNlLmFsbCh3YWl0X3Byb21pc2VzKS50aGVuKCAoKSA9PiB7XG4gICAgICAgIGlmIChlckNoYWlsZHMuY2hpbGRyZW4ubGVuZ3RoID4wICkge1xuICAgICAgICAgICAgIGVyQ2hhaWxkcy5uYW1lID0gZXJDaGFpbGRzLm5hbWUrJygnK2VyQ2hhaWxkcy5jaGlsZHJlbi5sZW5ndGgrJyknO1xuICAgICAgICAgICAgIGlkZW50aXR5Tm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goZXJDaGFpbGRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZihiaW5kU2VydmljZXMuY2hpbGRyZW4ubGVuZ3RoPjApIHtcbiAgICAgICAgICAgICAgYmluZFNlcnZpY2VzLm5hbWUgPSAnQmluZC1TZXJ2aWNlcygnK2JpbmRTZXJ2aWNlcy5jaGlsZHJlbi5sZW5ndGgrJyknO1xuICAgICAgICAgICAgICBpZGVudGl0eU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGJpbmRTZXJ2aWNlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoZGlhbFNlcnZpY2VzLmNoaWxkcmVuLmxlbmd0aD4wKSB7XG4gICAgICAgICAgICAgIGRpYWxTZXJ2aWNlcy5uYW1lID0gJ0RpYWwtU2VydmljZXMoJytkaWFsU2VydmljZXMuY2hpbGRyZW4ubGVuZ3RoKycpJztcbiAgICAgICAgICAgICAgaWRlbnRpdHlOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChkaWFsU2VydmljZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoJ3RoaXMgaXMgYSBwcm9taXNlJyk7XG4gICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgIG5ldHdvcmtHcmFwaCA9IGQzLmhpZXJhcmNoeShuZXR3b3JrR3JhcGguZGF0YSwgZnVuY3Rpb24gKG5kKSB7XG4gICAgICAgICAgcmV0dXJuIG5kLmNoaWxkcmVuO1xuICAgICB9KTtcbiAgICAgICAgIHJldHVybiBbbmV0d29ya0dyYXBoLCB0aGlzLnVuaXFJZF07XG4gICAgfSAvLyBlbmQgb2YgZnVuY3Rpb25cblxuICAgIGNyZWF0ZUlkKCkge1xuICAgICAgICArK3RoaXMudW5pcUlkO1xuICAgICAgICByZXR1cm4gdGhpcy51bmlxSWQ7XG4gICAgfVxuXG4gICBjcmVhdGVTZXJ2aWNlTm9kZSggc3IpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZU9iID0gbmV3IFNlcnZpY2UoKTtcbiAgICAgICAgIHNlcnZpY2VPYi5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgIHNlcnZpY2VPYi51dWlkID0gc3IuaWQ7XG4gICAgICAgICBzZXJ2aWNlT2IubmFtZSA9IHNyLm5hbWU7XG4gICAgICAgICBzZXJ2aWNlT2IudHlwZSA9ICdTZXJ2aWNlJztcbiAgICAgICByZXR1cm4gc2VydmljZU9iO1xuICAgfVxuXG4gICBhcnJheU9iamVjdENvcHlSaWdodFRvTGVmdChsZWZ0QXJyLHJpZ2h0QXJyKSB7XG4gICAgIGNvbnN0IGxlZnRBcnJJZHMgPSBbXTtcbiAgICAgbGVmdEFyci5mb3JFYWNoKCAob2IpID0+IHtcbiAgICAgICBsZWZ0QXJySWRzLnB1c2gob2IuaWQpO1xuICAgICB9ICk7XG5cbiAgICAgcmlnaHRBcnIuZm9yRWFjaCggKG9iKSA9PiB7XG4gICAgICBpZiAoIWxlZnRBcnIuaW5jbHVkZXMob2IuaWQpKSB7XG4gICAgICAgICAgIGxlZnRBcnIucHVzaChvYik7XG4gICAgICB9XG4gICAgIH0gKTtcblxuICAgIHJldHVybiBsZWZ0QXJyO1xuICAgfVxuXG4gIGFkZEl0ZW1Ub0FycmF5KElkbmV0aXRpZXMsIG9iKSB7XG4gICAgaWYgKCBvYi5uYW1lICYmICFJZG5ldGl0aWVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0udXVpZCA9PT0gb2IuaWQpKSB7XG4gICAgICBJZG5ldGl0aWVzLnB1c2godGhpcy5jcmVhdGVJZGVudGl0eShvYikpO1xuICAgIH1cbiAgICByZXR1cm4gSWRuZXRpdGllcztcbiAgfVxuICBjcmVhdGVJZGVudGl0eShvYikge1xuICAgICAgY29uc3QgZW5kcG9pbnQgPSBuZXcgSWRlbnRpdHkoKTtcbiAgICAgICBlbmRwb2ludC5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICBlbmRwb2ludC51dWlkID0gb2IuaWQ7XG4gICAgICAgZW5kcG9pbnQubmFtZSA9IG9iLm5hbWU7XG4gICAgICAgZW5kcG9pbnQub25saW5lID0gb2IuaGFzQXBpU2Vzc2lvbiA9PT0gdHJ1ZSA/ICdZZXMnOiAnTm8nO1xuICAgICAgIGVuZHBvaW50LnR5cGUgPSAnSWRlbnRpdHknO1xuICAgICAgIGVuZHBvaW50LnN0YXR1cyA9IG9iLnNka0luZm8gIT09IG51bGwgPyAnUmVnaXN0ZXJlZCc6ICdOb3QgUmVnaXN0ZXJlZCc7XG4gICAgICAgaWYgKG9iLnNka0luZm8pIHtcbiAgICAgICAgICAgZW5kcG9pbnQub3MgPSBvYi5zZGtJbmZvLnR5cGU/IG9iLnNka0luZm8udHlwZTogb2Iuc2RrSW5mby5hcHBJZDtcbiAgICAgICAgICAgZW5kcG9pbnQub3NWZXJzaW9uID0gb2Iuc2RrSW5mby52ZXJzaW9uO1xuICAgICAgIH1cbiAgICAgICBpZiAob2IuYXV0aFBvbGljeSAmJiBvYi5hdXRoUG9saWN5Lm5hbWUuaW5jbHVkZXMoXCJCcm93WmVyXCIpKSB7XG4gICAgICAgICAgIGVuZHBvaW50LnR5cGUgPSAnQnJvd1plciBJZGVudGl0eSc7XG4gICAgICAgfVxuICAgICAgIGVuZHBvaW50LmNyZWF0ZWRBdCA9IG9iLmNyZWF0ZWRBdDtcbiAgICAgICBlbmRwb2ludC51cGRhdGVkQXQgPSBvYi51cGRhdGVkQXQ7XG5cbiAgICAgcmV0dXJuIGVuZHBvaW50O1xuICB9XG4gIGdldExpbmtGb3JSZXNvdXJjZShvYiwgcmVzb3VyY2UpIHtcbiAgICByZXR1cm4gb2JbJ19saW5rcyddW3Jlc291cmNlXVsnaHJlZiddO1xuICB9XG5cbiAgICBmaW5kU2VydmljZXNIb3N0ZWRPbkVuZHBvaW50KHJhd0VwLCBzZXJ2aWNlcywgc2VydmljZVBvbGljaWVzLCB6aXRpU2VydmljZSkge1xuICAgICAgIGNvbnN0IHNlcnZpY2VzQXJyID0gW107XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuTm9Hcm91cHMgPSBbXTtcbiAgICAgICAgY29uc3QgZW5kcG9pbnRBdHRyID0gcmF3RXAucm9sZUF0dHJpYnV0ZXM/IHJhd0VwLnJvbGVBdHRyaWJ1dGVzOiBbXTtcbiAgICAgICAgZW5kcG9pbnRBdHRyLnB1c2goJ0AnK3Jhd0VwLmlkKTtcblxuICAgICAgICBsZXQgZGlhbFNlcnZpY2VBdHRycyA9IFtdO1xuICAgICAgICBsZXQgYmluZFNlcnZpY2VBdHRycyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGJpbmRQb2xpY2llcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICBiaW5kUG9saWNpZXMubmFtZSA9ICdCaW5kLVBvbGljaWVzJztcbiAgICAgICAgY29uc3QgZGlhbFBvbGljaWVzID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgICAgICBkaWFsUG9saWNpZXMubmFtZSA9ICdEaWFsLVBvbGljaWVzJztcblxuICAgICAgICBiaW5kUG9saWNpZXMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgIGRpYWxQb2xpY2llcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcblxuICAgICAgICBzZXJ2aWNlUG9saWNpZXMuZmluZCggKHNwKSA9PiB7XG4gICAgICAgICAgc3AuaWRlbnRpdHlSb2xlcy5maW5kKCAoYXR0cikgPT4ge1xuICAgICAgICAgICAgICBpZiAoZW5kcG9pbnRBdHRyLmluY2x1ZGVzKGF0dHIpICkge1xuICAgICAgICAgICAgICAgaWYgKHNwLnR5cGUgPT09ICdCaW5kJykge1xuICAgICAgICAgICAgICAgICAgIGNvbnN0IHNQb2xpY3kgPSBuZXcgU2VydmljZVBvbGljeSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgIHNQb2xpY3kuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgc1BvbGljeS5uYW1lID0gc3AubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICBzUG9saWN5LnR5cGUgPSBzcC50eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgIHNQb2xpY3kuY2hpbGRyZW4gPSB0aGlzLmdldFNlcnZpY2VzRm9yUG9saWN5KHNlcnZpY2VzLCBzcCk7XG4gICAgICAgICAgICAgICAgICAgYmluZFBvbGljaWVzLmNoaWxkcmVuLnB1c2goc3ApO1xuICAgICAgICAgICAgICAgICAgIGJpbmRTZXJ2aWNlQXR0cnMgPSBmaWxsQXJyYXkoYmluZFNlcnZpY2VBdHRycywgc3Auc2VydmljZVJvbGVzKTtcbiAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgIGNvbnN0IHNQb2xpY3kgPSBuZXcgU2VydmljZVBvbGljeSgpO1xuICAgICAgICAgICAgICAgICAgICAgc1BvbGljeS5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICAgICAgIHNQb2xpY3kubmFtZSA9IHNwLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICBzUG9saWN5LnR5cGUgPSBzcC50eXBlO1xuICAgICAgICAgICAgICAgICAgICAgc1BvbGljeS5jaGlsZHJlbiA9IHRoaXMuZ2V0U2VydmljZXNGb3JQb2xpY3koc2VydmljZXMsIHNwKSA7XG4gICAgICAgICAgICAgICAgIGRpYWxQb2xpY2llcy5jaGlsZHJlbi5wdXNoKHNQb2xpY3kpO1xuICAgICAgICAgICAgICAgIGRpYWxTZXJ2aWNlQXR0cnMgPSBmaWxsQXJyYXkoZGlhbFNlcnZpY2VBdHRycywgc3Auc2VydmljZVJvbGVzKTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9ICk7XG5cbiAgICAgICAgZnVuY3Rpb24gZmlsbEFycmF5KGFycjEsIGFycjIpIHtcbiAgICAgICAgICBhcnIyLmZvckVhY2goIChpdGVtKSA9PiB7XG4gICAgICAgICAgIGFycjEucHVzaChpdGVtKTtcbiAgICAgICAgICB9ICk7XG4gICAgICAgICAgcmV0dXJuIGFycjE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiaW5kU2VydmljZXMgPSBbXTtcbiAgICAgICAgY29uc3QgZGlhbFNlcnZpY2VzID0gW107XG5cbiAgICAgICAgc2VydmljZXMgJiYgc2VydmljZXMuZm9yRWFjaCggKHNyKSA9PiB7XG4gICAgICAgICAgc3Iucm9sZUF0dHJpYnV0ZXMgJiYgc3Iucm9sZUF0dHJpYnV0ZXMuZm9yRWFjaCggKGF0dHIpID0+IHtcbiAgICAgICAgICAgICBpZiAoZGlhbFNlcnZpY2VBdHRycy5pbmNsdWRlcyhhdHRyKSApIHtcbiAgICAgICAgICAgICAgIGRpYWxTZXJ2aWNlcy5wdXNoKHRoaXMuY3JlYXRlU2VydmljZU5vZGUoc3IpICk7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgICAgIGlmIChiaW5kU2VydmljZUF0dHJzLmluY2x1ZGVzKGF0dHIpICkge1xuICAgICAgICAgICAgICAgIGJpbmRTZXJ2aWNlcy5wdXNoKCB0aGlzLmNyZWF0ZVNlcnZpY2VOb2RlKHNyKSApO1xuICAgICAgICAgICAgIH1cbiAgICAgICAgICB9ICk7XG4gICAgICAgIH0pO1xuICAgICAgIGlmIChkaWFsU2VydmljZXMubGVuZ3RoID4wICkge1xuICAgICAgICAgIGNvbnN0IGRpYWxHcm91cCA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgIGRpYWxHcm91cC5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICBkaWFsR3JvdXAubmFtZSA9ICdTZXJ2aWNlcy1EaWFsJztcbiAgICAgICAgICBkaWFsR3JvdXAuY2hpbGRyZW4gPSBkaWFsU2VydmljZXM7XG4gICAgICAgICAgc2VydmljZXNBcnIucHVzaChkaWFsR3JvdXApO1xuICAgICAgIH1cbiAgICAgICBpZiAoYmluZFNlcnZpY2VzLmxlbmd0aCA+MCApIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRHcm91cCA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICAgYmluZEdyb3VwLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgYmluZEdyb3VwLm5hbWUgPSAnU2VydmljZXMtQmluZCc7XG4gICAgICAgICAgICBiaW5kR3JvdXAuY2hpbGRyZW4gPSBiaW5kU2VydmljZXM7XG4gICAgICAgICAgICBzZXJ2aWNlc0Fyci5wdXNoKGJpbmRHcm91cCk7XG4gICAgICAgfVxuICAgICByZXR1cm4gc2VydmljZXNBcnI7XG5cblxuICAgIH0gLy8gZW5kIG9mIGZpbmQgc2VydmljZXNIb3N0ZWRPbkVuZHBvaW50XG5cbiAgIGdldFNlcnZpY2VzRm9yUG9saWN5KHNlcnZpY2VzLCBzcE9iKSB7XG4gICAgIGNvbnN0IHNlcnZpY2VzRm90UG9saWN5ID0gW107XG4gICAgIHNlcnZpY2VzICYmIHNlcnZpY2VzLmZvckVhY2goIChzcikgPT4ge1xuICAgICAgICAgY29uc3QgYXR0cnMgPSBzci5yb2xlQXR0cmlidXRlcyA/IHNyLnJvbGVBdHRyaWJ1dGVzOiBbXTtcbiAgICAgICAgIGF0dHJzLnB1c2goJ0AnK3NwT2IuaWQpO1xuICAgICAgICAgYXR0cnMuZmluZCggKGF0cikgPT4ge1xuICAgICAgICAgICAgaWYoc3BPYi5zZXJ2aWNlUm9sZXMuaW5jbHVkZXMoYXRyKSApe1xuICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZU5vZGUgPSBuZXcgU2VydmljZSgpO1xuICAgICAgICAgICAgICAgc2VydmljZU5vZGUuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICBzZXJ2aWNlTm9kZS5uYW1lID0gc3IubmFtZTtcbiAgICAgICAgICAgICAgIHNlcnZpY2VOb2RlLnR5cGUgPSAnU2VydmljZSc7XG4gICAgICAgICAgICAgc2VydmljZXNGb3RQb2xpY3kucHVzaChzZXJ2aWNlTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICB9KTtcbiAgICAgfSk7XG4gICAgcmV0dXJuIHNlcnZpY2VzRm90UG9saWN5O1xuICAgfVxuXG4gICAgZmluZFJhd0VuZHBvaW50KGVwTmFtZSwgZW5kcG9pbnRzKSB7XG4gICAgICAgcmV0dXJuIGVuZHBvaW50cy5maW5kKChlcCkgPT4gZXAubmFtZSA9PT0gZXBOYW1lKTtcbiAgICB9XG5cbiAgc2VydmljZUNvbmZpZ0FsaWFzKGNvbmZpZ3MpIHtcbiAgICAgbGV0IGludGVyY2VwdCA9IFtdO1xuICAgICBfLmlzQXJyYXkoY29uZmlncykgJiYgY29uZmlncy5mb3JFYWNoKCAoY29uZikgPT4ge1xuICAgICAgICAgICBsZXQgYWRkcmVzc2VzID0gJyc7XG4gICAgICAgICAgIGxldCBwb3J0cyA9ICcnO1xuICAgICAgICAgIGlmIChjb25mLmRhdGEuYWRkcmVzc2VzKSB7XG4gICAgICAgICAgICAgYWRkcmVzc2VzID0gY29uZi5kYXRhLmFkZHJlc3Nlcy50b1N0cmluZygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgYWRkcmVzc2VzID0gY29uZi5kYXRhLmFkZHJlc3M7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF8uaXNBcnJheShjb25mLmRhdGEucG9ydFJhbmdlcykgKSB7XG4gICAgICAgICAgICAgIGNvbmYuZGF0YS5wb3J0UmFuZ2VzLmZvckVhY2goIChwb3J0c0pzb24pID0+IHtcbiAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHBvcnRzSnNvbikge1xuICAgICAgICAgICAgICAgICAgcG9ydHMgPSBwb3J0cyArIGtleSArJzonK3BvcnRzSnNvbltrZXldICsnICcgO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICBwb3J0cyA9IHBvcnRzICsgJzsnO1xuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBvcnRzID0gIGNvbmYuZGF0YS5wb3J0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnRlcmNlcHQucHVzaChhZGRyZXNzZXMpO1xuICAgICAgICAgIGludGVyY2VwdC5wdXNoKHBvcnRzKTtcbiAgICAgfSk7XG4gICAgIHJldHVybiBpbnRlcmNlcHQ7XG4gIH1cblxuICBhc3luYyBwcm9jZXNzU2VydmljZXNGb3JOb2RlQ2xpY2soc2VydmljZU5vZGUsIG5ldHdvcmtHcmFwaCwgc2VydmljZXMsIHVuaXFJZCwgeml0aVNlcnZpY2UpIHtcbiAgICAgY29uc3QgbXlQcm9taXNlID0gYXdhaXQgbmV3IFByb21pc2UoIGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgd2FpdF9wcm9taXNlcyA9IFtdO1xuICAgICAgICB0aGlzLnVuaXFJZCA9IHVuaXFJZDtcbiAgICAgICAgY29uc3QgcmF3U2VydmljZU9iaiA9IHNlcnZpY2VzLmZpbmQoKHMpID0+IHMubmFtZSA9PT0gc2VydmljZU5vZGUuZGF0YS5uYW1lKTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlc3dpdGhOYW1lID0gW107XG5cbiAgICAgICAgcmF3U2VydmljZU9iai5yb2xlQXR0cmlidXRlcyAmJiByYXdTZXJ2aWNlT2JqLnJvbGVBdHRyaWJ1dGVzLmZpbmQoKHNyYXR0cikgPT4ge1xuICAgICAgICAgICAgYXR0cmlidXRlc3dpdGhOYW1lLnB1c2goc3JhdHRyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VBdHRyaWJ1dGVzID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIHNlcnZpY2VBdHRyaWJ1dGVzLm5hbWUgPSAnQXR0cmlidXRlcyc7XG4gICAgICAgIHNlcnZpY2VBdHRyaWJ1dGVzLnR5cGUgPSAnQXR0cmlidXRlcyc7XG4gICAgICAgIHNlcnZpY2VBdHRyaWJ1dGVzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGF0dHJpYnV0ZXN3aXRoTmFtZS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgY29uc3QgYXR0ck9iID0gbmV3IEF0dHJpYnV0ZSgpO1xuICAgICAgICAgICAgYXR0ck9iLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgYXR0ck9iLm5hbWUgPSBhdHRyaWJ1dGVzd2l0aE5hbWVba107XG4gICAgICAgICAgICBhdHRyT2IudHlwZSA9ICdBdHRyaWJ1dGUnO1xuXG4gICAgICAgICAgICBzZXJ2aWNlQXR0cmlidXRlcy5jaGlsZHJlbi5wdXNoKGF0dHJPYik7XG4gICAgICAgIH0gLy8gZW5kIGlubmVyIGZvciBsb29wXG4gICAgICAgIGlmIChzZXJ2aWNlQXR0cmlidXRlcy5jaGlsZHJlbi5sZW5ndGggPjAgKSB7XG4gICAgICAgICAgIHNlcnZpY2VBdHRyaWJ1dGVzLm5hbWUgPSBzZXJ2aWNlQXR0cmlidXRlcy5uYW1lKycoJysgc2VydmljZUF0dHJpYnV0ZXMuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICBzZXJ2aWNlTm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goc2VydmljZUF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlcnZpY2VfY29uZmlncyA9IFtdO1xuICAgICAgICBjb25zdCBjb25maWdzX3VybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKHJhd1NlcnZpY2VPYmosICdjb25maWdzJyk7XG4gICAgICAgIGNvbnN0IHBhZ2VzaXplID0gNTAwO1xuICAgICAgICBjb25zdCBwYWdpbmdPYiA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgICAgY29uc3QgY29uZmlnUHJvbWlzZSA9IGF3YWl0IHppdGlTZXJ2aWNlXG4gICAgICAgICAuZ2V0KGNvbmZpZ3NfdXJsLCBwYWdpbmdPYiwgW10pXG4gICAgICAgICAudGhlbigoY29uZmlncykgPT4ge1xuICAgICAgICAgICBzZXJ2aWNlX2NvbmZpZ3MgPSBjb25maWdzICYmIGNvbmZpZ3MuZGF0YSA/IGNvbmZpZ3MuZGF0YSA6IFtdO1xuICAgICAgICAgICBjb25zdCBjaGlsZHMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgICAgY2hpbGRzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICBjaGlsZHMubmFtZSA9ICdTZXJ2aWNlIENvbmZpZ3MnO1xuICAgICAgICAgICBjaGlsZHMudHlwZSA9ICdTZXJ2aWNlIENvbmZpZ3MnO1xuICAgICAgICAgICBjb25zdCBzZXJ2aWNlX2NvbmZpZ3NfQXJyID0gW107XG4gICAgICAgICAgIHNlcnZpY2VfY29uZmlncy5mb3JFYWNoKCAoY2ZnKSA9PiB7XG4gICAgICAgICAgICAgY29uc3Qgb2JqID0gbmV3IENvbmZpZygpO1xuICAgICAgICAgICAgIG9iai5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICBvYmoubmFtZSA9IGNmZy5uYW1lO1xuICAgICAgICAgICAgIG9iai51dWlkID0gY2ZnLnV1aWQ7XG4gICAgICAgICAgICAgb2JqLmRhdGEgPSBKU09OLnN0cmluZ2lmeShjZmcuZGF0YSk7XG4gICAgICAgICAgICAgc2VydmljZV9jb25maWdzX0Fyci5wdXNoKG9iaik7XG4gICAgICAgICAgIH0gKTtcblxuICAgICAgICAgICBpZiAoc2VydmljZV9jb25maWdzX0Fyci5sZW5ndGggPjAgKSB7XG4gICAgICAgICAgICAgIGNoaWxkcy5jaGlsZHJlbiA9IHNlcnZpY2VfY29uZmlnc19BcnI7XG4gICAgICAgICAgICAgIGNoaWxkcy5uYW1lID0gY2hpbGRzLm5hbWUgKycoJytjaGlsZHMuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICBzZXJ2aWNlTm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goY2hpbGRzKTtcbiAgICAgICAgICAgICAgc2VydmljZU5vZGUuZGF0YS5pbnRlcmNlcHQgPSB0aGlzLnNlcnZpY2VDb25maWdBbGlhcyhzZXJ2aWNlX2NvbmZpZ3MpO1xuICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKGNvbmZpZ1Byb21pc2UpO1xuICAgICAgIGNvbnN0IHNlcnZpY2VfZWRnZV9yb3V0ZXJfcG9saWNpZXNfdXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UoXG4gICAgICAgICByYXdTZXJ2aWNlT2JqLFxuICAgICAgICAnc2VydmljZS1lZGdlLXJvdXRlci1wb2xpY2llcydcbiAgICAgICApO1xuICAgICAgIGxldCBzZXJ2aWNlX3JvdXRlcnNfdXJscyA9IFtdO1xuICAgICAgIGNvbnN0IHNlcl9wcm9tc2UgPSAgYXdhaXQgeml0aVNlcnZpY2VcbiAgICAgICAgICAgICAuZ2V0KHNlcnZpY2VfZWRnZV9yb3V0ZXJfcG9saWNpZXNfdXJsLnJlcGxhY2UoJy4vJywgJycpLCBwYWdpbmdPYiwgW10pXG4gICAgICAgICAgICAgLnRoZW4oIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5kYXRhLmZvckVhY2goIChzZXJwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2Vfcm91dGVyc191cmxzLnB1c2goIHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKHNlcnAsJ2VkZ2Utcm91dGVycycpICk7XG4gICAgICAgICAgICAgICAgICB9ICk7O1xuICAgICAgICAgICAgIH0pO1xuICAgICAgIHdhaXRfcHJvbWlzZXMucHVzaChzZXJfcHJvbXNlKTtcbiAgICAgICBsZXQgc2VycF9wYWdlX1Byb21pc2VzID0gW107XG4gICAgICAgc2VydmljZV9yb3V0ZXJzX3VybHMuZm9yRWFjaCgoZXJfdXJsKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJvbXNlID0gIHppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldChlcl91cmwucmVwbGFjZSgnLi8nLCAnJyksIHBhZ2luZ09iLCBbXSk7XG4gICAgICAgICAgICAgICAgLy8gLnRoZW4ocmVzdWx0ID0+IFtwb2xpY3kudHlwZSwgcmVzdWx0XSk7XG4gICAgICAgICAgc2VycF9wYWdlX1Byb21pc2VzLnB1c2gocHJvbXNlKTtcbiAgICAgICB9KTtcbiAgICAgICBsZXQgYXNzb2NpYXRlZFJvdXRlcnMgPSBbXTtcbiAgICAgICBhd2FpdCBQcm9taXNlLmFsbChzZXJwX3BhZ2VfUHJvbWlzZXMpLnRoZW4oICh2YWx1ZXM6YW55KSA9PiB7XG4gICAgICAgICB2YWx1ZXMgJiYgdmFsdWVzLmZvckVhY2goKHJlczphbnkpID0+IHtcbiAgICAgICAgICAgICBpZiAocmVzICYmIHJlcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXMuZGF0YS5mb3JFYWNoKCAoZXIpPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZXJPYiA9IG5ldyBFUm91dGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlck9iLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJPYi5uYW1lID0gICBlci5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXIudHlwZSA9ICdSb3V0ZXInO1xuICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlZFJvdXRlcnMucHVzaChlck9iKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICB9XG4gICAgICAgICB9KVxuICAgICAgICAgY29uc3QgdG1wID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgdG1wLm5hbWUgPSBcIkFzc29jaWF0ZWQgUm91dGVycyhcIiArIGFzc29jaWF0ZWRSb3V0ZXJzLmxlbmd0aCArJyknO1xuICAgICAgICAgICAgIHRtcC50eXBlID0gXCJSb3V0ZXJzXCI7XG4gICAgICAgICAgICAgdG1wLmNoaWxkcmVuID0gYXNzb2NpYXRlZFJvdXRlcnM7XG4gICAgICAgICAgICAgdG1wLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgIHNlcnZpY2VOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaCh0bXApO1xuICAgICAgIH0pO1xuXG4gICAgICAgY29uc3Qgc2VydmljZV9wb2xpY2llc191cmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShcbiAgICAgICAgcmF3U2VydmljZU9iaixcbiAgICAgICAgJ3NlcnZpY2UtcG9saWNpZXMnXG4gICAgICAgKS5yZXBsYWNlKCcuLycsICcnKTsgLy8gZGlhbCwgQmluZCBpbmZvXG5cbiAgICAgICBsZXQgYmluZFBvbGljaWVzID0gW107XG4gICAgICAgbGV0IGJpbmRJZG5ldGl0aWVzID0gW107XG4gICAgICAgbGV0IGRpYWxJZG5ldGl0aWVzID0gW107XG5cbiAgICAgICBjb25zdCBwcm9taXNlMiA9IGF3YWl0IHppdGlTZXJ2aWNlXG4gICAgICAgLmdldChzZXJ2aWNlX3BvbGljaWVzX3VybCwgcGFnaW5nT2IsIFtdKVxuICAgICAgIC50aGVuKChwb2xpY2llcykgPT4ge1xuICAgICAgICAgYmluZFBvbGljaWVzID0gcG9saWNpZXMuZGF0YTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwYWdlUHJvbWlzZXMgPSBbXTtcbiAgICAgIGJpbmRQb2xpY2llcy5mb3JFYWNoKCAgKHBvbGljeSkgPT4ge1xuICAgICAgICAgY29uc3QgYmluZElkZW50aXRpZXNVcmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShcbiAgICAgICAgICAgIHBvbGljeSxcbiAgICAgICAgICAgICdpZGVudGl0aWVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgcHJvbXNlID0gIHppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldChiaW5kSWRlbnRpdGllc1VybC5yZXBsYWNlKCcuLycsICcnKSwgcGFnaW5nT2IsIFtdKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiBbcG9saWN5LnR5cGUsIHJlc3VsdF0pO1xuICAgICAgICAgIHBhZ2VQcm9taXNlcy5wdXNoKHByb21zZSk7XG4gICAgICB9KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHBhZ2VQcm9taXNlcykudGhlbiggKHZhbHVlczphbnkpID0+IHtcbiAgICAgICAgICB2YWx1ZXMgJiYgdmFsdWVzLmZvckVhY2goKHJlczphbnkpID0+IHtcbiAgICAgICAgICAgaWYgKHJlcyAmJiByZXNbMV0uZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJlc1sxXS5kYXRhLmZvckVhY2goKHJzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYocmVzWzBdID09PSAnQmluZCcpIHtcbiAgICAgICAgICAgICAgICAgYmluZElkbmV0aXRpZXMgPSB0aGlzLmFkZEl0ZW1Ub0FycmF5KGJpbmRJZG5ldGl0aWVzLCBycyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKHJlc1swXSA9PT0gJ0RpYWwnKXtcbiAgICAgICAgICAgICAgICAgZGlhbElkbmV0aXRpZXMgPSB0aGlzLmFkZEl0ZW1Ub0FycmF5KGRpYWxJZG5ldGl0aWVzLCBycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgIGlmKHJlc1swXSA9PT0gJ0JpbmQnKSB7XG4gICAgICAgICAgICAgICAgIGJpbmRJZG5ldGl0aWVzID0gdGhpcy5hZGRJdGVtVG9BcnJheShiaW5kSWRuZXRpdGllcywgcmVzWzFdLmRhdGEpO1xuICAgICAgICAgICAgICAgfSBlbHNlIGlmKHJlc1swXSA9PT0gJ0RpYWwnKXtcbiAgICAgICAgICAgICAgICAgZGlhbElkbmV0aXRpZXMgPSB0aGlzLmFkZEl0ZW1Ub0FycmF5KGRpYWxJZG5ldGl0aWVzLCByZXNbMV0uZGF0YSk7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgIH1cblxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgIGNvbnN0IHRtcCA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICAgIHRtcC5uYW1lID0gXCJCaW5kIElkZW50aXRpZXMoXCIgKyBiaW5kSWRuZXRpdGllcy5sZW5ndGggKycpJztcbiAgICAgICAgICAgICB0bXAudHlwZSA9IFwiSWRlbnRpdGllc1wiO1xuICAgICAgICAgICAgIHRtcC5jaGlsZHJlbiA9IGJpbmRJZG5ldGl0aWVzO1xuICAgICAgICAgICAgIHRtcC5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICBzZXJ2aWNlTm9kZS5kYXRhLmNoaWxkcmVuLnB1c2godG1wKTtcbiAgICAgICAgICAgY29uc3QgdG1wRGlhbCA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICAgIHRtcERpYWwubmFtZSA9IFwiRGlhbCBJZGVudGl0aWVzKFwiICsgZGlhbElkbmV0aXRpZXMubGVuZ3RoICsnKSc7XG4gICAgICAgICAgICAgdG1wRGlhbC50eXBlID0gXCJJZGVudGl0aWVzXCI7XG4gICAgICAgICAgICAgdG1wRGlhbC5jaGlsZHJlbiA9IGRpYWxJZG5ldGl0aWVzO1xuICAgICAgICAgICAgIHRtcERpYWwuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgc2VydmljZU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKHRtcERpYWwpO1xuICAgICAgICAgcmVzb2x2ZSgndGhpcyBpcyBhIHByb21pc2UnKTtcbiAgICAgIH0pO1xuICAgICAgIFByb21pc2UuYWxsKHdhaXRfcHJvbWlzZXMpLnRoZW4oICgpID0+IHsgfSk7XG4gICAgfSk7IC8vIGVuZCBvZiBteXByb21pc2VcblxuICAgICBuZXR3b3JrR3JhcGggPSBkMy5oaWVyYXJjaHkobmV0d29ya0dyYXBoLmRhdGEsIGZ1bmN0aW9uIChuZCkge1xuICAgICAgICByZXR1cm4gbmQuY2hpbGRyZW47XG4gICAgIH0pO1xuICAgICAgcmV0dXJuIFtuZXR3b3JrR3JhcGgsIHRoaXMudW5pcUlkXTtcbiAgfSAvLyBlbmQgb2YgcHJvY2Vzc1NlcnZpY2VzRm9yTm9kZUNsaWNrXG5cblxuICBhc3luYyBwcm9jZXNzU2VydmljZVBvbGljaWVzRm9yTm9kZUNsaWNrKHBvbGljeU5vZGUsIG5ldHdvcmtHcmFwaCwgIHNlcnZpY2VQb2xpY2llcywgdW5pcUlkLCB6aXRpU2VydmljZSkge1xuICAgICBjb25zdCBteVByb21pc2UgPSBhd2FpdCBuZXcgUHJvbWlzZSggYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB3YWl0X3Byb21pc2VzID0gW107XG4gICAgICAgIHRoaXMudW5pcUlkID0gdW5pcUlkO1xuICAgICAgICBjb25zdCByYXdTUG9saWN5ID0gc2VydmljZVBvbGljaWVzLmZpbmQoKHMpID0+IHMubmFtZSA9PT0gcG9saWN5Tm9kZS5kYXRhLm5hbWUpO1xuICAgICAgICBjb25zdCBjaGlsZHMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgIGNoaWxkcy5uYW1lID0gXCJBdHRyaWJ1dGVzXCI7XG4gICAgICAgICBjaGlsZHMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG5cbiAgICAgICAgcmF3U1BvbGljeS5zZXJ2aWNlUm9sZXMgJiYgcmF3U1BvbGljeS5zZXJ2aWNlUm9sZXMuZm9yRWFjaCggKG9iKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXR0ciA9IG5ldyBBdHRyaWJ1dGUoKTtcbiAgICAgICAgICAgIGF0dHIubmFtZSA9IG9iO1xuICAgICAgICAgICAgYXR0ci5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgIGF0dHIudHlwZSA9IFwiU2VydmljZSBBdHRyaWJ1dGVcIjtcbiAgICAgICAgICBjaGlsZHMuY2hpbGRyZW4ucHVzaChhdHRyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJhd1NQb2xpY3kuaWRlbnRpdHlSb2xlcyAmJiByYXdTUG9saWN5LmlkZW50aXR5Um9sZXMuZm9yRWFjaCggKG9iKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXR0ciA9IG5ldyBBdHRyaWJ1dGUoKTtcbiAgICAgICAgICAgYXR0ci5uYW1lID0gb2I7XG4gICAgICAgICAgIGF0dHIuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgIGF0dHIudHlwZSA9IFwiSWRlbnRpdHkgQXR0cmlidXRlXCI7XG4gICAgICAgICAgY2hpbGRzLmNoaWxkcmVuLnB1c2goYXR0cik7XG4gICAgICAgIH0pO1xuICAgICAgICBjaGlsZHMubmFtZSA9IGNoaWxkcy5uYW1lICsgJygnKyBjaGlsZHMuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgcG9saWN5Tm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goY2hpbGRzKTtcblxuICAgICAgICBjb25zdCBwYWdlc2l6ZSA9IDUwMDtcbiAgICAgICAgY29uc3QgaWRlbnRpdGllc19wYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgICAgIGNvbnN0IGJpbmRJZGVudGl0aWVzVXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UoIHJhd1NQb2xpY3ksICdpZGVudGl0aWVzJyApO1xuICAgICAgICAvLyB0aGlzLmxvZ2dlci5pbmZvKCdiaW5kSWRlbnRpdGllc1VybCcsYmluZElkZW50aXRpZXNVcmwpO1xuICAgICAgICBjb25zdCBzcF9wcm9taXNlID0gYXdhaXQgeml0aVNlcnZpY2UuZ2V0KGJpbmRJZGVudGl0aWVzVXJsLCBpZGVudGl0aWVzX3BhZ2luZywgW10pXG4gICAgICAgLnRoZW4oKGlkcykgPT4ge1xuICAgICAgICAgY29uc3QgY2hpbGRzID1uZXcgQ2hpbGRyZW4oKVxuICAgICAgICAgY2hpbGRzLm5hbWUgPSByYXdTUG9saWN5LnR5cGUrICctSWRlbnRpdGllcyc7XG4gICAgICAgICBjaGlsZHMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICBpZHMuZGF0YS5mb3JFYWNoKCAoaWRPYikgPT4ge1xuICAgICAgICAgICBjaGlsZHMuY2hpbGRyZW4ucHVzaCh0aGlzLmNyZWF0ZUlkZW50aXR5KGlkT2IpICk7XG4gICAgICAgICB9KTtcbiAgICAgICAgIGNoaWxkcy5uYW1lID0gY2hpbGRzLm5hbWUgKyAnKCcgKyBjaGlsZHMuY2hpbGRyZW4ubGVuZ3RoKycpJztcbiAgICAgICAgIHBvbGljeU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGNoaWxkcyk7XG4gICAgICAgfSk7XG4gICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKHNwX3Byb21pc2UpO1xuXG4gICAgICAgY29uc3Qgc2VydmljZXNfcGFnaW5nID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuICAgICAgIGNvbnN0IGJpbmRTZXJ2aWNlc1VybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKCByYXdTUG9saWN5LCAnc2VydmljZXMnICk7ICAvLyBwdWxsIHNlcnZpY2VzXG4gICAgICAgY29uc3QgX3Byb21pc2UgPSBhd2FpdCB6aXRpU2VydmljZS5nZXQoYmluZFNlcnZpY2VzVXJsLCBzZXJ2aWNlc19wYWdpbmcsIFtdKVxuICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgIGNvbnN0IGNoaWxkcyA9bmV3IENoaWxkcmVuKClcbiAgICAgICAgIGNoaWxkcy5uYW1lID0gcmF3U1BvbGljeS50eXBlKyAnLVNlcnZpY2VzJztcbiAgICAgICAgIGNoaWxkcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgIHJlc3VsdC5kYXRhLmZvckVhY2goIChpZE9iKSA9PiB7XG4gICAgICAgICAgIGNvbnN0IHNwID0gbmV3IFNlcnZpY2UoKTtcbiAgICAgICAgICAgIHNwLmlkID0gaWRPYi5pZDtcbiAgICAgICAgICAgIHNwLm5hbWUgPSBpZE9iLm5hbWU7XG4gICAgICAgICAgICBzcC50eXBlID0gJ1NlcnZpY2UnO1xuICAgICAgICAgICAgY2hpbGRzLmNoaWxkcmVuLnB1c2goc3ApO1xuICAgICAgICAgfSk7XG4gICAgICAgICBjaGlsZHMubmFtZSA9IGNoaWxkcy5uYW1lICsgJygnICsgY2hpbGRzLmNoaWxkcmVuLmxlbmd0aCsnKSc7XG4gICAgICAgICBwb2xpY3lOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChjaGlsZHMpO1xuICAgICAgIH0pO1xuXG4gICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKF9wcm9taXNlKTtcblxuICAgICAgICBQcm9taXNlLmFsbCh3YWl0X3Byb21pc2VzKS50aGVuKCAoKSA9PiB7XG4gICAgICAgICAgIHJlc29sdmUoJ3Jlc29sdmUuJyk7XG4gICAgICAgIH0pO1xuXG4gICAgIH0pOyAvLyBlbmQgbXlwcm9taXNlXG4gICAgICAgIG5ldHdvcmtHcmFwaCA9IGQzLmhpZXJhcmNoeShuZXR3b3JrR3JhcGguZGF0YSwgZnVuY3Rpb24gKG5kKSB7XG4gICAgICAgICAgICByZXR1cm4gbmQuY2hpbGRyZW47XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gW25ldHdvcmtHcmFwaCwgdGhpcy51bmlxSWRdO1xuICAgIH1cblxuICAgYXN5bmMgZ2V0U2VydmljZXNGb3JBU2VydmljZVBvbGljeShwb2xpY3lPYmplY3QsIHppdGlTZXJ2aWNlLCBwYWdlc2l6ZT01MDApIHtcbiAgICAgICBjb25zdCBjaGlsZHMgPSBbXTtcbiAgICAgICBjb25zdCBzZXJ2aWNlc19wYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgICAgY29uc3QgYmluZFNlcnZpY2VzVXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UoIHBvbGljeU9iamVjdCwgJ3NlcnZpY2VzJyApO1xuICAgICAgIGNvbnN0IF9wcm9taXNlID0gYXdhaXQgeml0aVNlcnZpY2UuZ2V0KGJpbmRTZXJ2aWNlc1VybCwgc2VydmljZXNfcGFnaW5nLCBbXSlcbiAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICByZXN1bHQuZGF0YS5mb3JFYWNoKCAoaWRPYikgPT4ge1xuICAgICAgICAgICBjb25zdCBzcCA9IG5ldyBTZXJ2aWNlKCk7XG4gICAgICAgICAgICBzcC5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgIHNwLnV1aWQgPSBpZE9iLmlkO1xuICAgICAgICAgICAgc3AubmFtZSA9IGlkT2IubmFtZTtcbiAgICAgICAgICAgIHNwLnR5cGUgPSAnU2VydmljZSc7XG4gICAgICAgICAgICBjaGlsZHMucHVzaChzcCk7XG4gICAgICAgICB9KTtcbiAgICAgICB9KTtcbiAgICAgICByZXR1cm4gW3BvbGljeU9iamVjdC50eXBlLCBjaGlsZHNdO1xuICAgfVxuXG4gICBhc3luYyBwcm9jZXNzRWRnZXJvdXRlcnNGb3JOb2RlQ2xpY2soXG4gICAgICAgIGVkZ2Vyb3V0ZXJOb2RlLFxuICAgICAgICBuZXR3b3JrR3JhcGgsXG4gICAgICAgIGVkZ2Vyb3V0ZXJzLFxuICAgICAgICB1bmlxSWQsXG4gICAgICAgIHppdGlTZXJ2aWNlXG4gICAgKVxuICAgIHtcbiAgICAgY29uc3QgbWFpblByb21pc2UgPSBhd2FpdCBuZXcgUHJvbWlzZSggYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB3YWl0X3Byb21pc2VzID0gW107XG4gICAgICAgIHRoaXMudW5pcUlkID0gdW5pcUlkO1xuICAgICAgICBjb25zdCBlciA9IGVkZ2Vyb3V0ZXJzLmZpbmQoKHMpID0+IHMubmFtZSA9PT0gZWRnZXJvdXRlck5vZGUuZGF0YS5uYW1lKTtcbiAgICAgICAgY29uc3QgZXJBdHRyaWJ1dGVzID0gZXIucm9sZUF0dHJpYnV0ZXM/IGVyLnJvbGVBdHRyaWJ1dGVzOiBbXTtcblxuICAgICAgICAgZXJBdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF0dCA9IG5ldyBBdHRyaWJ1dGUoKTtcbiAgICAgICAgICAgIGF0dC5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgIGF0dC5uYW1lID0gYXR0cjtcbiAgICAgICAgICAgIGF0dC50eXBlID0gJ0VkZ2UgUm91dGVyIEF0dHJpYnV0ZSc7XG4gICAgICAgICAgICBlZGdlcm91dGVyTm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goYXR0KTtcbiAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHBhZ2VzaXplID0gNTAwO1xuICAgICAgICAgIGNvbnN0IHNlcnZpY2VzX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgICBjb25zdCBlcnBvbGljaWVzVXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UoZXIsICdlZGdlLXJvdXRlci1wb2xpY2llcycpO1xuICAgICAgIGxldCBlcnBvbGljaWVzRm9yRVIgPSBbXTtcbiAgICAgICBjb25zdCBlcnBvbGljaWVzcHJvbWlzZSA9IGF3YWl0IHppdGlTZXJ2aWNlLmdldChlcnBvbGljaWVzVXJsLCBzZXJ2aWNlc19wYWdpbmcsIFtdKVxuICAgICAgIC50aGVuKCBhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgZXJwb2xpY2llc0ZvckVSID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwocmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IC8gcGFnZXNpemUpO1xuICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgICAgIGZvciAobGV0IHBhZ2UgPSAyOyBwYWdlIDw9IHBhZ2VzOyBwYWdlKyspIHtcbiAgICAgICAgICAgICAgc2VydmljZXNfcGFnaW5nLnBhZ2UgPSBwYWdlO1xuICAgICAgICAgICAgICBjb25zdCB0bXBfcHJvbWlzZSA9IGF3YWl0IHppdGlTZXJ2aWNlLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnBvbGljaWVzVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICkgLnRoZW4oKHBhZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgIHBhZ2VSZXN1bHQuZGF0YS5mb3JFYWNoKChzZXJ2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycG9saWNpZXNGb3JFUi5wdXNoKHNlcnYpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHByb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgICB3YWl0X3Byb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICB9IC8vIGVuZCBmb3IgbG9vcFxuICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgY29uc3QgZXJwb2xDaGlsZHMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgICAgICBlcnBvbENoaWxkcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICBlcnBvbGljaWVzRm9yRVIuZm9yRWFjaCggKHBvbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvbGljeSA9IG5ldyBFUlBvbGljeSgpO1xuICAgICAgICAgICAgICAgIHBvbGljeS5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBwb2xpY3kudXVpZCA9IHBvbC5pZDtcbiAgICAgICAgICAgICAgICBwb2xpY3kubmFtZSA9IHBvbC5uYW1lO1xuICAgICAgICAgICAgICAgIHBvbGljeS50eXBlID0gJ1JvdXRlciBQb2xpY3knO1xuICAgICAgICAgICAgICAgIHBvbGljeS5pc1N5c3RlbSA9IHBvbC5pc1N5c3RlbTtcbiAgICAgICAgICAgICAgICBwb2xpY3kuc2VtYW50aWMgPSBwb2wuc2VtYW50aWM7XG4gICAgICAgICAgICAgICAgcG9saWN5LnJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgICAgICAgICBlcnBvbENoaWxkcy5jaGlsZHJlbi5wdXNoKHBvbGljeSk7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICBlcnBvbENoaWxkcy5uYW1lID0gXCJFZGdlIFJvdXRlciBQb2xpY2llcyhcIisgZXJwb2xDaGlsZHMuY2hpbGRyZW4ubGVuZ3RoICsnKSc7XG4gICAgICAgICAgICAgICBlZGdlcm91dGVyTm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goZXJwb2xDaGlsZHMpO1xuICAgICAgICAgICB9KTtcbiAgICAgICB9KTtcbiAgICAgICB3YWl0X3Byb21pc2VzLnB1c2goZXJwb2xpY2llc3Byb21pc2UpO1xuXG4gICAgICAgUHJvbWlzZS5hbGwod2FpdF9wcm9taXNlcykudGhlbiggKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoJ3RoaXMgaXMgYSBwcm9taXNlJyk7XG4gICAgICAgfSk7XG4gICAgIH0pO1xuICAgICAgICBuZXR3b3JrR3JhcGggPSBkMy5oaWVyYXJjaHkobmV0d29ya0dyYXBoLmRhdGEsIGZ1bmN0aW9uIChuZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5kLmNoaWxkcmVuO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFtuZXR3b3JrR3JhcGgsIHRoaXMudW5pcUlkXTtcbiAgIH1cblxuICAgIHNlcnZpY2VHcm91cGluZyhzZXJ2aWNlc0NoaWxkcmVuLCBzZXJ2aWNlc3RyZWUpIHtcbiAgICAgICAgY29uc3QgcHJvdG9jb2xSRFBHcnAgPSBuZXcgR3JvdXAoXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUlkKCksXG4gICAgICAgICAgICAnU2VydmljZXMgW3Byb3RvY29sLVJEUF0nLFxuICAgICAgICAgICAgJ1NlcnZpY2VzIGNyZWF0ZWQgZm9yIFJEUCBwcm90b2NvbCdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcHJvdG9jb2xIVFRQU0dycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICdTZXJ2aWNlcyBbcHJvdG9jb2wtSFRUUFNdJyxcbiAgICAgICAgICAgICdTZXJ2aWNlIGNyZWF0ZWQgZm9yIEhUVFBTIHByb3RvY29sJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBwcm90b2NvbEhUVFBHcnAgPSBuZXcgR3JvdXAoXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUlkKCksXG4gICAgICAgICAgICAnU2VydmljZXMgW3Byb3RvY29sLUhUVFBdJyxcbiAgICAgICAgICAgICdTZXJ2aWNlIGNyZWF0ZWQgZm9yIEhUVFAgcHJvdG9jb2wnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHByb3RvY29sRlRQR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgdGhpcy5jcmVhdGVJZCgpLFxuICAgICAgICAgICAgJ1NlcnZpY2VzIFtwcm90b2NvbC1GVFBdJyxcbiAgICAgICAgICAgICdTZXJ2aWNlIGNyZWF0ZWQgZm9yIEZUUCBwcm90b2NvbCdcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBhYmNkR3JwID0gbmV3IEdyb3VwKHRoaXMuY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtBLURdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBBIHRvIEQnKTtcbiAgICAgICAgY29uc3QgZWZnaEdycCA9IG5ldyBHcm91cCh0aGlzLmNyZWF0ZUlkKCksICdTZXJ2aWNlcyBbRS1IXScsICdTZXJ2aWNlIG5hbWUgc3RhcnRzIHdpdGggRSB0byBIJyk7XG4gICAgICAgIGNvbnN0IGlqa2xHcnAgPSBuZXcgR3JvdXAodGhpcy5jcmVhdGVJZCgpLCAnU2VydmljZXMgW0ktTF0nLCAnU2VydmljZSBuYW1lIHN0YXJ0cyB3aXRoIEkgdG8gTCcpO1xuICAgICAgICBjb25zdCBtbm9wR3JwID0gbmV3IEdyb3VwKHRoaXMuY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtNLVBdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBNIHRvIFAnKTtcbiAgICAgICAgY29uc3QgcXJzdEdycCA9IG5ldyBHcm91cCh0aGlzLmNyZWF0ZUlkKCksICdTZXJ2aWNlcyBbRy1UXScsICdTZXJ2aWNlIG5hbWUgc3RhcnRzIHdpdGggUSB0byBUJyk7XG4gICAgICAgIGNvbnN0IHV2d3hHcnAgPSBuZXcgR3JvdXAodGhpcy5jcmVhdGVJZCgpLCAnU2VydmljZXMgW1UtWF0nLCAnU2VydmljZSBuYW1lIHN0YXJ0cyB3aXRoIFUgdG8gWCcpO1xuICAgICAgICBjb25zdCB5ekdycCA9IG5ldyBHcm91cCh0aGlzLmNyZWF0ZUlkKCksICdTZXJ2aWNlcyBbWS1aXScsICdTZXJ2aWNlIG5hbWUgc3RhcnRzIHdpdGggWSBhbmQgWicpO1xuICAgICAgICBjb25zdCBvbmVUbzlHcnAgPSBuZXcgR3JvdXAodGhpcy5jcmVhdGVJZCgpLCAnU2VydmljZXMgWzEtOV0nLCAnU2VydmljZSBuYW1lIHN0YXJ0cyB3aXRoIDAgdG8gOScpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VydmljZXN0cmVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlb2JqID0gc2VydmljZXN0cmVlW2ldO1xuICAgICAgICAgICAgY29uc3QgY2hhID0gc2VydmljZW9iai5uYW1lLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICBpZiAoc2VydmljZW9iai5wcm90b2NvbCA9PT0gJ3JkcCcpIHtcbiAgICAgICAgICAgICAgICBwcm90b2NvbFJEUEdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzZXJ2aWNlb2JqLnByb3RvY29sID09PSAnaHR0cHMnKSB7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQU0dycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzZXJ2aWNlb2JqLnByb3RvY29sID09PSAnaHR0cCcpIHtcbiAgICAgICAgICAgICAgICBwcm90b2NvbEhUVFBHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VydmljZW9iai5wcm90b2NvbCA9PT0gJ2Z0cCcpIHtcbiAgICAgICAgICAgICAgICBwcm90b2NvbEZUUEdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdhJyB8fCBjaGEgPT09ICdiJyB8fCBjaGEgPT09ICdjJyB8fCBjaGEgPT09ICdkJykge1xuICAgICAgICAgICAgICAgIGFiY2RHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAnZScgfHwgY2hhID09PSAnZicgfHwgY2hhID09PSAnZycgfHwgY2hhID09PSAnaCcpIHtcbiAgICAgICAgICAgICAgICBlZmdoR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ2knIHx8IGNoYSA9PT0gJ2onIHx8IGNoYSA9PT0gJ2snIHx8IGNoYSA9PT0gJ2wnKSB7XG4gICAgICAgICAgICAgICAgaWprbEdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdtJyB8fCBjaGEgPT09ICduJyB8fCBjaGEgPT09ICdvJyB8fCBjaGEgPT09ICdwJykge1xuICAgICAgICAgICAgICAgIG1ub3BHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAncScgfHwgY2hhID09PSAncicgfHwgY2hhID09PSAncycgfHwgY2hhID09PSAndCcpIHtcbiAgICAgICAgICAgICAgICBxcnN0R3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ3UnIHx8IGNoYSA9PT0gJ3YnIHx8IGNoYSA9PT0gJ3cnIHx8IGNoYSA9PT0gJ3gnKSB7XG4gICAgICAgICAgICAgICAgdXZ3eEdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICd5JyB8fCBjaGEgPT09ICd6Jykge1xuICAgICAgICAgICAgICAgIHl6R3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIGNoYSA9PT0gJzAnIHx8XG4gICAgICAgICAgICAgICAgY2hhID09PSAnMScgfHxcbiAgICAgICAgICAgICAgICBjaGEgPT09ICcyJyB8fFxuICAgICAgICAgICAgICAgIGNoYSA9PT0gJzMnIHx8XG4gICAgICAgICAgICAgICAgY2hhID09PSAnNCcgfHxcbiAgICAgICAgICAgICAgICBjaGEgPT09ICc1JyB8fFxuICAgICAgICAgICAgICAgIGNoYSA9PT0gJzYnIHx8XG4gICAgICAgICAgICAgICAgY2hhID09PSAnNycgfHxcbiAgICAgICAgICAgICAgICBjaGEgPT09ICc4JyB8fFxuICAgICAgICAgICAgICAgIGNoYSA9PT0gJzknXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBvbmVUbzlHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBlbmQgbWFpbiBmb3IgbG9vcFxuXG4gICAgICAgIGlmIChwcm90b2NvbFJEUEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwcm90b2NvbFJEUEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByb3RvY29sUkRQR3JwLm5hbWUgPSBwcm90b2NvbFJEUEdycC5uYW1lICsgJygnICsgcHJvdG9jb2xSRFBHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sUkRQR3JwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm90b2NvbEhUVFBTR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHByb3RvY29sSFRUUFNHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcm90b2NvbEhUVFBTR3JwLm5hbWUgPSBwcm90b2NvbEhUVFBTR3JwLm5hbWUgKyAnKCcgKyBwcm90b2NvbEhUVFBTR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChwcm90b2NvbEhUVFBTR3JwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvdG9jb2xIVFRQR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHByb3RvY29sSFRUUEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByb3RvY29sSFRUUEdycC5uYW1lID0gcHJvdG9jb2xIVFRQR3JwLm5hbWUgKyAnKCcgKyBwcm90b2NvbEhUVFBHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sSFRUUEdycCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3RvY29sRlRQR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHByb3RvY29sRlRQR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJvdG9jb2xGVFBHcnAubmFtZSA9IHByb3RvY29sRlRQR3JwLm5hbWUgKyAnKCcgKyBwcm90b2NvbEZUUEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2gocHJvdG9jb2xGVFBHcnApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhYmNkR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGFiY2RHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhYmNkR3JwLm5hbWUgPSBhYmNkR3JwLm5hbWUgKyAnKCcgKyBhYmNkR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChhYmNkR3JwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWZnaEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlZmdoR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWZnaEdycC5uYW1lID0gZWZnaEdycC5uYW1lICsgJygnICsgZWZnaEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2goZWZnaEdycCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlqa2xHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWprbEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlqa2xHcnAubmFtZSA9IGlqa2xHcnAubmFtZSArICcoJyArIGlqa2xHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGlqa2xHcnApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtbm9wR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG1ub3BHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBtbm9wR3JwLm5hbWUgPSBtbm9wR3JwLm5hbWUgKyAnKCcgKyBtbm9wR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChtbm9wR3JwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocXJzdEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBxcnN0R3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcXJzdEdycC5uYW1lID0gcXJzdEdycC5uYW1lICsgJygnICsgcXJzdEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2gocXJzdEdycCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHV2d3hHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdXZ3eEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHV2d3hHcnAubmFtZSA9IHV2d3hHcnAubmFtZSArICcoJyArIHV2d3hHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHV2d3hHcnApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh5ekdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB5ekdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHl6R3JwLm5hbWUgPSB5ekdycC5uYW1lICsgJygnICsgeXpHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHl6R3JwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob25lVG85R3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG9uZVRvOUdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG9uZVRvOUdycC5uYW1lID0gb25lVG85R3JwLm5hbWUgKyAnKCcgKyBvbmVUbzlHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKG9uZVRvOUdycCk7XG4gICAgICAgIH1cbiAgICAgICAgc2VydmljZXNDaGlsZHJlbi5uYW1lID0gc2VydmljZXNDaGlsZHJlbi5uYW1lICsgJygnICsgc2VydmljZXN0cmVlLmxlbmd0aCArICcpJztcbiAgICAgICAgcmV0dXJuIHNlcnZpY2VzQ2hpbGRyZW47XG4gICAgfVxuXG4gICAgYXN5bmMgcHJvY2Vzc0VkZ2VSb3V0ZXJQb2xpY2llc0Zvck5vZGVDbGljayhcbiAgICAgICAgZXJQb2xpY3lOb2RlLFxuICAgICAgICBuZXR3b3JrR3JhcGgsXG4gICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgdW5pcUlkLFxuICAgICAgICB6aXRpU2VydmljZVxuICAgICkge1xuICAgICAgIGNvbnN0IG15UHJvbWlzZSA9IGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCB3YWl0X3Byb21pc2VzID0gW107XG4gICAgICAgICAgdGhpcy51bmlxSWQgPSB1bmlxSWQ7XG4gICAgICAgICAgY29uc3QgcmF3RVJQb2xpY3kgPSBlZGdlUm91dGVyUG9saWNpZXMuZmluZCgocykgPT4gcy5uYW1lID09PSBlclBvbGljeU5vZGUuZGF0YS5uYW1lKTtcbiAgICAgICAgICBjb25zdCBwYWdlc2l6ZSA9IDUwMDtcblxuICAgICAgY29uc3QgZXJfdXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UocmF3RVJQb2xpY3ksICdlZGdlLXJvdXRlcnMnKS5yZXBsYWNlKCcuLycsICcnKTtcbiAgICAgIGxldCBhc3NvY2lhdGVkUm91dGVycyA9IFtdO1xuICAgICAgY29uc3QgcGFnaW5nID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuICAgICAgY29uc3QgZXJDaGFpbGRzID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIGVyQ2hhaWxkcy5uYW1lPSAnQXNzb2NpYXRlZCBSb3V0ZXJzJztcbiAgICAgICAgZXJDaGFpbGRzLnR5cGU9ICdBc3NvY2lhdGVkIFJvdXRlcnMnO1xuICAgICAgICBlckNoYWlsZHMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICBjb25zdCBhc3NvY2lhdGVkUm91dGVyc1Byb21pc2UgPSAgYXdhaXQgeml0aVNlcnZpY2UuZ2V0KGVyX3VybCwgcGFnaW5nLCBbXSlcbiAgICAgICAgICAgLnRoZW4oIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICByZXN1bHQuZGF0YS5mb3JFYWNoKCAoZXIpID0+IHtcbiAgICAgICAgICAgICAgIGNvbnN0IHRtcCA9IG5ldyBFUm91dGVyKCk7XG4gICAgICAgICAgICAgICAgICAgdG1wLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgICAgIHRtcC5uYW1lID0gZXIubmFtZTtcbiAgICAgICAgICAgICAgICAgICB0bXAudHlwZSA9ICdSb3V0ZXInO1xuICAgICAgICAgICAgICAgICAgIHRtcC52ZXJpZmllZCA9IGVyLmlzVmVyaWZpZWQ/ICdZZXMnOiAnTm8nO1xuICAgICAgICAgICAgICAgICAgIHRtcC5vbmxpbmUgPSBlci5pc09ubGluZT8gJ1llcyc6ICdObyc7XG4gICAgICAgICAgICAgICAgICAgdG1wLmRpc2FibGVkID0gZXIuZGlzYWJsZWQ/ICdZZXMnOiAnTm8nO1xuICAgICAgICAgICAgICAgICAgIHRtcC5yb290Tm9kZSA9ICdZZXMnO1xuICAgICAgICAgICAgICAgICAgIHRtcC50dW5uZWxlckVuYWJsZWQgPSBlci50dW5uZWxlckVuYWJsZWQ/IGVyLnR1bm5lbGVyRW5hYmxlZDonTm8nO1xuICAgICAgICAgICAgICAgICAgIHRtcC5zeW5jU3RhdHVzID0gZXIuc3luY1N0YXR1cz8gZXIuc3luY1N0YXR1czogJ05vJztcbiAgICAgICAgICAgICAgICAgICB0bXAuY3JlYXRlZEF0ID0gZXIuY3JlYXRlZEF0O1xuICAgICAgICAgICAgICAgICAgIHRtcC51cGRhdGVkQXQgPSBlci51cGRhdGVkQXQ7XG4gICAgICAgICAgICAgICAgICAgZXJDaGFpbGRzLmNoaWxkcmVuLnB1c2godG1wKTtcbiAgICAgICAgICAgICB9ICk7XG4gICAgICAgICAgIGVyQ2hhaWxkcy5uYW1lID0gZXJDaGFpbGRzLm5hbWUgKycoJysgZXJDaGFpbGRzLmNoaWxkcmVuLmxlbmd0aCArJyknO1xuICAgICAgICAgICBlclBvbGljeU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGVyQ2hhaWxkcyk7XG4gICAgICB9KTtcbiAgICAgICAgICB3YWl0X3Byb21pc2VzLnB1c2goYXNzb2NpYXRlZFJvdXRlcnNQcm9taXNlKTtcblxuICAgICAgICAgIGNvbnN0IHNlcnZpY2VzX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShyYXdFUlBvbGljeSwgJ2lkZW50aXRpZXMnKTtcbiAgICAgICAgICBsZXQgaWRzID0gW107XG4gICAgICAgICAgY29uc3QgaWRwcm9taXNlID0geml0aVNlcnZpY2UuZ2V0KHVybCwgc2VydmljZXNfcGFnaW5nLCBbXSlcbiAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZHMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKHJlc3VsdC5tZXRhLnBhZ2luYXRpb24udG90YWxDb3VudCAvIHBhZ2VzaXplKTtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMjsgcGFnZSA8PSBwYWdlczsgcGFnZSsrKSB7XG4gICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZy5wYWdlID0gcGFnZTtcbiAgICAgICAgICAgICAgY29uc3QgdG1wX3Byb21pc2UgPSB6aXRpU2VydmljZS5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICkgLnRoZW4oKHBhZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgIHBhZ2VSZXN1bHQuZGF0YS5mb3JFYWNoKChzZXJ2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlkcy5wdXNoKHNlcnYpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHByb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgICB3YWl0X3Byb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgfSAvLyBlbmQgZm9yIGxvb3BcbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICBjb25zdCBpZENoaWxkcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICAgIGlkQ2hpbGRzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgIGlkcy5mb3JFYWNoKCAoaWRPYikgPT4ge1xuICAgICAgICAgICAgICAgIGlkQ2hpbGRzLmNoaWxkcmVuLnB1c2godGhpcy5jcmVhdGVJZGVudGl0eShpZE9iKSk7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlkQ2hpbGRzLm5hbWUgPSBcIkFjY2Vzc2libGUgSWRlbnRpdGllcyhcIisgaWRDaGlsZHMuY2hpbGRyZW4ubGVuZ3RoICsnKSc7XG4gICAgICAgICAgICAgICBlclBvbGljeU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGlkQ2hpbGRzKTtcbiAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgIHdhaXRfcHJvbWlzZXMucHVzaChpZHByb21pc2UpO1xuICAgICAgICAgUHJvbWlzZS5hbGwod2FpdF9wcm9taXNlcykudGhlbiggKCkgPT4ge1xuICAgICAgICAgICAgIHJlc29sdmUoJ3RoaXMgaXMgYSBwcm9taXNlJyk7XG4gICAgICAgICB9ICk7XG5cbiAgICAgICB9KTtcblxuICAgICAgICBuZXR3b3JrR3JhcGggPSBkMy5oaWVyYXJjaHkobmV0d29ya0dyYXBoLmRhdGEsIGZ1bmN0aW9uIChuZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5kLmNoaWxkcmVuO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gW25ldHdvcmtHcmFwaCwgdGhpcy51bmlxSWRdO1xuICAgIH0gLy8gZW5kXG5cbiAgYXN5bmMgcHJvY2Vzc1NlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNGb3JOb2RlQ2xpY2soXG4gICAgICAgIHNlcnZpY2VFclBvbGljeU5vZGUsXG4gICAgICAgIG5ldHdvcmtHcmFwaCxcbiAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgdW5pcUlkLFxuICAgICAgICB6aXRpU2VydmljZVxuICAgICkge1xuICAgICAgIGNvbnN0IG15UHJvbWlzZSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICB0aGlzLnVuaXFJZCA9IHVuaXFJZDtcbiAgICAgICAgICBjb25zdCB3YWl0X3Byb21pc2VzID0gW107XG4gICAgICAgICAgY29uc3QgcmF3U2VydmljZUVSUG9saWN5ID0gc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llcy5maW5kKChzKSA9PiBzLm5hbWUgPT09IHNlcnZpY2VFclBvbGljeU5vZGUuZGF0YS5uYW1lKTtcbiAgICAgICAgICBjb25zdCBwYWdlc2l6ZSA9IDUwMDtcbiAgICAgICAgICBjb25zdCBzZXJ2aWNlc19wYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UocmF3U2VydmljZUVSUG9saWN5LCAnZWRnZS1yb3V0ZXJzJyk7XG4gICAgICAgICAgbGV0IHJvdXRlcnMgPSBbXTtcbiAgICAgICAgICBjb25zdCBlcnByb21pc2UgPSB6aXRpU2VydmljZS5nZXQodXJsLCBzZXJ2aWNlc19wYWdpbmcsIFtdKVxuICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHJvdXRlcnMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKHJlc3VsdC5tZXRhLnBhZ2luYXRpb24udG90YWxDb3VudCAvIHBhZ2VzaXplKTtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMjsgcGFnZSA8PSBwYWdlczsgcGFnZSsrKSB7XG4gICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZy5wYWdlID0gcGFnZTtcbiAgICAgICAgICAgICAgY29uc3QgdG1wX3Byb21pc2UgPSB6aXRpU2VydmljZS5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICkgLnRoZW4oKHBhZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgIHBhZ2VSZXN1bHQuZGF0YS5mb3JFYWNoKChzZXJ2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJvdXRlcnMucHVzaChzZXJ2KTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRtcF9wcm9taXNlKTtcbiAgICAgICAgICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKHRtcF9wcm9taXNlKTtcbiAgICAgICAgICAgIH0gLy8gZW5kIGZvciBsb29wXG4gICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgY29uc3QgZXJDaGlsZHMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgICAgICBlckNoaWxkcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICByb3V0ZXJzLmZvckVhY2goIChlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkT2IgPSBuZXcgRVJvdXRlcigpO1xuICAgICAgICAgICAgICAgIGlkT2IuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgaWRPYi51dWlkID0gZXIuaWQ7XG4gICAgICAgICAgICAgICAgaWRPYi5uYW1lID0gZXIubmFtZTtcbiAgICAgICAgICAgICAgICBpZE9iLnR5cGUgPSAnRWRnZSBSb3V0ZXInO1xuICAgICAgICAgICAgICAgIGVyQ2hpbGRzLmNoaWxkcmVuLnB1c2goaWRPYik7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICBlckNoaWxkcy5uYW1lID0gXCJFZGdlUm91dGVycyhcIisgZXJDaGlsZHMuY2hpbGRyZW4ubGVuZ3RoICsnKSc7XG4gICAgICAgICAgICAgICBzZXJ2aWNlRXJQb2xpY3lOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChlckNoaWxkcyk7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKGVycHJvbWlzZSk7XG5cbiAgICAgICAgICBjb25zdCBzZXJ2aWNlc19wYWdpbmdCID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuXG4gICAgICAgICAgY29uc3QgdXJsQiA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKHJhd1NlcnZpY2VFUlBvbGljeSwgJ3NlcnZpY2VzJyk7XG4gICAgICAgICAgbGV0IHNlckFycmF5ID0gW107XG4gICAgICAgICAgY29uc3Qgc2VycHJvbWlzZSA9IHppdGlTZXJ2aWNlLmdldCh1cmxCLCBzZXJ2aWNlc19wYWdpbmdCLCBbXSlcbiAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBzZXJBcnJheSA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwocmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IC8gcGFnZXNpemUpO1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXNCID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMjsgcGFnZSA8PSBwYWdlczsgcGFnZSsrKSB7XG4gICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZ0IucGFnZSA9IHBhZ2U7XG4gICAgICAgICAgICAgIGNvbnN0IHRtcF9wcm9taXNlQiA9IHppdGlTZXJ2aWNlLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxCLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZ0IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICAgICApIC50aGVuKChwYWdlUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBwYWdlUmVzdWx0LmRhdGEuZm9yRWFjaCgoc2VydikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXJBcnJheS5wdXNoKHNlcnYpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHByb21pc2VzQi5wdXNoKHRtcF9wcm9taXNlQik7XG4gICAgICAgICAgICAgIHdhaXRfcHJvbWlzZXMucHVzaCh0bXBfcHJvbWlzZUIpO1xuICAgICAgICAgICAgfSAvLyBlbmQgZm9yIGxvb3BcbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzQikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgY29uc3Qgc3JDaGlsZHMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgICAgICBzckNoaWxkcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICBzZXJBcnJheS5mb3JFYWNoKCAoc3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzck9iID0gbmV3IFNlcnZpY2UoKTtcbiAgICAgICAgICAgICAgICBzck9iLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgIHNyT2IudXVpZCA9IHNyLmlkO1xuICAgICAgICAgICAgICAgIHNyT2IubmFtZSA9IHNyLm5hbWU7XG4gICAgICAgICAgICAgICAgc3JPYi50eXBlID0gJ1NlcnZpY2UnO1xuICAgICAgICAgICAgICAgIHNyQ2hpbGRzLmNoaWxkcmVuLnB1c2goc3JPYik7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHNyQ2hpbGRzLm5hbWUgPSBcIlNlcnZpY2VzKFwiKyBzckNoaWxkcy5jaGlsZHJlbi5sZW5ndGggKycpJztcbiAgICAgICAgICAgICAgc2VydmljZUVyUG9saWN5Tm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goc3JDaGlsZHMpO1xuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKHNlcnByb21pc2UpO1xuXG4gICAgICAgICBQcm9taXNlLmFsbCh3YWl0X3Byb21pc2VzKS50aGVuKCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKCdEb25lJyk7XG4gICAgICAgICB9ICk7XG5cbiAgICAgICB9KTtcblxuICAgICAgICBuZXR3b3JrR3JhcGggPSBkMy5oaWVyYXJjaHkobmV0d29ya0dyYXBoLmRhdGEsIGZ1bmN0aW9uIChuZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5kLmNoaWxkcmVuO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFtuZXR3b3JrR3JhcGgsIHRoaXMudW5pcUlkXTtcbiAgICB9IC8vIGVuZFxufSAvLyBlbmQgb2YgY2xhc3NcbiJdfQ==
|
|
884
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay12aXN1YWxpemVyLnRyZWVub2RlcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Zpc3VhbGl6ZXIvbmV0d29yay12aXN1YWxpemVyL25ldHdvcmstdmlzdWFsaXplci50cmVlbm9kZXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFFdEksTUFHYSxpQkFBaUI7SUFIOUI7UUFJSSxXQUFNLEdBQUcsQ0FBQyxDQUFDO0tBeTlCZDtJQXg5QkcsZUFBZSxDQUFDLFFBQVE7UUFDdEIsTUFBTSxNQUFNLEdBQUc7WUFDYixRQUFRLEVBQUUsTUFBTTtZQUNoQixRQUFRLEVBQUUsS0FBSztZQUNmLE1BQU0sRUFBRSxFQUFFO1lBQ1YsS0FBSyxFQUFFLFFBQVE7WUFDZixJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDO1FBQ0YsT0FBUSxNQUFNLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyw2QkFBNkIsQ0FDL0IsWUFBWSxFQUNaLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLFdBQVcsRUFDWCxPQUFPO1FBRVgsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLE9BQU8sQ0FBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzVELE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3pFLElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7Z0JBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUE7YUFBQztZQUFBLENBQUM7WUFFbkUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9DLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQzlCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMvQixTQUFTLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEMsU0FBUyxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztnQkFDdEMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ2hEO1lBRUgsTUFBTSxZQUFZLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNwQyxNQUFNLFlBQVksR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLFlBQVksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLFlBQVksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLElBQUksdUJBQXVCLEdBQUcsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUN2QiwyQkFBMkI7WUFDekIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLElBQUksaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1lBQzNCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMvQixTQUFTLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvQixTQUFTLENBQUMsSUFBSSxHQUFFLHlCQUF5QixDQUFDO1lBQzFDLFNBQVMsQ0FBQyxJQUFJLEdBQUUsY0FBYyxDQUFDO1lBQ2pDLE1BQU0sd0JBQXdCLEdBQUksTUFBTSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDO2lCQUNsRSxJQUFJLENBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtvQkFDMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDdEIsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3pCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztvQkFDbkIsR0FBRyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7b0JBQ3pCLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLENBQUUsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2RCxNQUFNLFlBQVksR0FBSSxNQUFNLFdBQVc7aUJBQzlCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQztpQkFDdEMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2YsdUJBQXVCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUN2QyxDQUFDLENBQUMsQ0FBQztZQUVWLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNwQix1QkFBdUIsQ0FBQyxPQUFPLENBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQkFDbkMsTUFBTSxTQUFTLEdBQUksSUFBSSxDQUFDLDRCQUE0QixDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzNFLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFFLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQzNDLFNBQVMsQ0FBQyxPQUFPLENBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDM0IsSUFBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFHO3dCQUNyQixZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUMxRjt5QkFBTTt3QkFDSixZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUMxRjtnQkFDRixDQUFDLENBQUUsQ0FBQztZQUNULENBQUMsQ0FBQyxDQUFDO1lBRUwsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUUsR0FBRyxFQUFFO2dCQUNwQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFFLENBQUMsRUFBRztvQkFDOUIsU0FBUyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxHQUFDLEdBQUcsR0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBQyxHQUFHLENBQUM7b0JBQ2xFLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDL0M7Z0JBQ0QsSUFBRyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUU7b0JBQzdCLFlBQVksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLEdBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUMsR0FBRyxDQUFDO29CQUN0RSxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ25EO2dCQUNELElBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFFO29CQUM3QixZQUFZLENBQUMsSUFBSSxHQUFHLGdCQUFnQixHQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFDLEdBQUcsQ0FBQztvQkFDdEUsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUNuRDtnQkFDRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUMsQ0FBQztRQUVMLENBQUMsQ0FBQyxDQUFDO1FBRUYsWUFBWSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDdEQsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBQ0MsT0FBTyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDLGtCQUFrQjtJQUVwQixRQUFRO1FBQ0osRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRixpQkFBaUIsQ0FBRSxFQUFFO1FBQ2hCLE1BQU0sU0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDL0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0IsU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztRQUN6QixTQUFTLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUM3QixPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQsMEJBQTBCLENBQUMsT0FBTyxFQUFDLFFBQVE7UUFDekMsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxPQUFPLENBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUN0QixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUUsQ0FBQztRQUVKLFFBQVEsQ0FBQyxPQUFPLENBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDckI7UUFDRixDQUFDLENBQUUsQ0FBQztRQUVMLE9BQU8sT0FBTyxDQUFDO0lBQ2hCLENBQUM7SUFFRixjQUFjLENBQUMsVUFBVSxFQUFFLEVBQUU7UUFDM0IsSUFBSyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDL0QsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDMUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsY0FBYyxDQUFDLEVBQUU7UUFDYixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQy9CLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0QixRQUFRLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDeEIsUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDMUQsUUFBUSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7UUFDM0IsUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFBLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2RSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUU7WUFDWixRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDakUsUUFBUSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUMzQztRQUNELElBQUksRUFBRSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDekQsUUFBUSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQztTQUN0QztRQUNELFFBQVEsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUNsQyxRQUFRLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFFcEMsT0FBTyxRQUFRLENBQUM7SUFDbkIsQ0FBQztJQUNELGtCQUFrQixDQUFDLEVBQUUsRUFBRSxRQUFRO1FBQzdCLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFQyw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxXQUFXO1FBQ3ZFLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUM1QixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFBLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFBLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEUsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWhDLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBRTFCLE1BQU0sWUFBWSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDakMsWUFBWSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7UUFDdkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNoQyxZQUFZLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztRQUV4QyxZQUFZLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxZQUFZLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVsQyxlQUFlLENBQUMsSUFBSSxDQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDM0IsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFHO29CQUNqQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO3dCQUNwQixNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO3dCQUM5QixPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDN0IsT0FBTyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO3dCQUN2QixPQUFPLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ3ZCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDakUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQy9CLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7cUJBQ25FO3lCQUFNO3dCQUNMLE1BQU0sT0FBTyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7d0JBQ2hDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUM3QixPQUFPLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ3ZCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDdkIsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFFO3dCQUNoRSxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDckMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztxQkFDaEU7aUJBQ0Q7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBRSxDQUFDO1FBRUosU0FBUyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUk7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pCLENBQUMsQ0FBRSxDQUFDO1lBQ0osT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUV4QixRQUFRLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ25DLEVBQUUsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDdEQsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUc7b0JBQ3BDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFFLENBQUM7aUJBQ2hEO2dCQUNELElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFHO29CQUNuQyxZQUFZLENBQUMsSUFBSSxDQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBRSxDQUFDO2lCQUNsRDtZQUNKLENBQUMsQ0FBRSxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUUsQ0FBQyxFQUFHO1lBQzFCLE1BQU0sU0FBUyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7WUFDakMsU0FBUyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDL0IsU0FBUyxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7WUFDakMsU0FBUyxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUM7WUFDbEMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM5QjtRQUNELElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRSxDQUFDLEVBQUc7WUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNqQyxTQUFTLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvQixTQUFTLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztZQUNqQyxTQUFTLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztZQUNsQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0gsT0FBTyxXQUFXLENBQUM7SUFHcEIsQ0FBQyxDQUFDLHVDQUF1QztJQUUxQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsSUFBSTtRQUNqQyxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM3QixRQUFRLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNqQixJQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNqQyxNQUFNLFdBQVcsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNsQyxXQUFXLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDakMsV0FBVyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO29CQUMzQixXQUFXLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztvQkFDL0IsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUNwQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSixPQUFPLGlCQUFpQixDQUFDO0lBQzFCLENBQUM7SUFFQSxlQUFlLENBQUMsTUFBTSxFQUFFLFNBQVM7UUFDOUIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFSCxrQkFBa0IsQ0FBQyxPQUFPO1FBQ3ZCLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMxQyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDbkIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3RCLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUM3QztpQkFBTTtnQkFDSixTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDaEM7WUFFRCxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRztnQkFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFFLENBQUMsU0FBUyxFQUFFLEVBQUU7b0JBQzNDLEtBQUssTUFBTSxHQUFHLElBQUksU0FBUyxFQUFFO3dCQUMxQixLQUFLLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRSxHQUFHLEdBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLEdBQUcsQ0FBRTtxQkFDaEQ7b0JBQ0MsS0FBSyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2FBQ0w7aUJBQU07Z0JBQ0gsS0FBSyxHQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQzNCO1lBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQixTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxTQUFTLENBQUM7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVztRQUN2RixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksT0FBTyxDQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDNUQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3JCLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3RSxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztZQUU5QixhQUFhLENBQUMsY0FBYyxJQUFJLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ3pFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0saUJBQWlCLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUN6QyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO1lBQ3RDLGlCQUFpQixDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7WUFDdEMsaUJBQWlCLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUMvQixNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEMsTUFBTSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7Z0JBRTFCLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDM0MsQ0FBQyxxQkFBcUI7WUFDdkIsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFFLENBQUMsRUFBRztnQkFDeEMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDLElBQUksR0FBQyxHQUFHLEdBQUUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7Z0JBQzdGLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQ3BEO1lBRUQsSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdEUsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO1lBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsTUFBTSxhQUFhLEdBQUcsTUFBTSxXQUFXO2lCQUNyQyxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7aUJBQzlCLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNoQixlQUFlLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ2hDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO2dCQUMvQixlQUFlLENBQUMsT0FBTyxDQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQy9CLE1BQU0sR0FBRyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ3pCLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN6QixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQ3BCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztvQkFDcEIsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDcEMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQyxDQUFDLENBQUUsQ0FBQztnQkFFSixJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRSxDQUFDLEVBQUc7b0JBQ2pDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsbUJBQW1CLENBQUM7b0JBQ3RDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRSxHQUFHLEdBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO29CQUM1RCxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3ZDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDeEU7WUFDSixDQUFDLENBQUMsQ0FBQztZQUVKLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEMsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQzlELGFBQWEsRUFDZCw4QkFBOEIsQ0FDOUIsQ0FBQztZQUNGLElBQUksb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1lBQzlCLE1BQU0sVUFBVSxHQUFJLE1BQU0sV0FBVztpQkFDOUIsR0FBRyxDQUFDLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztpQkFDckUsSUFBSSxDQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDNUIsb0JBQW9CLENBQUMsSUFBSSxDQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUMsY0FBYyxDQUFDLENBQUUsQ0FBQztnQkFDNUUsQ0FBQyxDQUFFLENBQUM7Z0JBQUEsQ0FBQztZQUNWLENBQUMsQ0FBQyxDQUFDO1lBQ1QsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQixJQUFJLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztZQUM1QixvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDckMsTUFBTSxNQUFNLEdBQUksV0FBVztxQkFDcEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDN0MsMENBQTBDO2dCQUNoRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztZQUMzQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUUsQ0FBQyxNQUFVLEVBQUUsRUFBRTtnQkFDekQsTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFPLEVBQUUsRUFBRTtvQkFDakMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBRSxDQUFDLEVBQUUsRUFBQyxFQUFFOzRCQUN0QixNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDOzRCQUNyQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzs0QkFDMUIsSUFBSSxDQUFDLElBQUksR0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDOzRCQUN0QixFQUFFLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQzs0QkFDOUIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUMvQixDQUFDLENBQUMsQ0FBQztxQkFDTDtnQkFDTCxDQUFDLENBQUMsQ0FBQTtnQkFDRixNQUFNLEdBQUcsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUN2QixHQUFHLENBQUMsSUFBSSxHQUFHLDBCQUEwQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sR0FBRSxHQUFHLENBQUM7Z0JBQ3RFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDO2dCQUMxQixHQUFHLENBQUMsUUFBUSxHQUFHLGlCQUFpQixDQUFDO2dCQUNqQyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDekIsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQ25ELGFBQWEsRUFDYixrQkFBa0IsQ0FDbEIsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCO1lBRXZDLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUM7WUFDeEIsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBRXhCLE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVztpQkFDakMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7aUJBQ3ZDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN4QixZQUFZLENBQUMsT0FBTyxDQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQy9CLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUM5QyxNQUFNLEVBQ04sWUFBWSxDQUNiLENBQUM7Z0JBQ0YsTUFBTSxNQUFNLEdBQUksV0FBVztxQkFDcEIsR0FBRyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztxQkFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQzdDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFFLENBQUMsTUFBVSxFQUFFLEVBQUU7Z0JBQ2pELE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBTyxFQUFFLEVBQUU7b0JBQ3BDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTs0QkFDekIsSUFBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFO2dDQUNyQixjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7NkJBQ3pEO2lDQUFNLElBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBQztnQ0FDM0IsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzZCQUN6RDt3QkFDSCxDQUFDLENBQUMsQ0FBQztxQkFDTDt5QkFBTTt3QkFDSCxJQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUU7NEJBQ3BCLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ25FOzZCQUFNLElBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBQzs0QkFDMUIsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDbkU7cUJBQ0o7Z0JBRUYsQ0FBQyxDQUFDLENBQUM7Z0JBRUYsTUFBTSxHQUFHLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDekIsR0FBRyxDQUFDLElBQUksR0FBRyxrQkFBa0IsR0FBRyxjQUFjLENBQUMsTUFBTSxHQUFFLEdBQUcsQ0FBQztnQkFDM0QsR0FBRyxDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7Z0JBQ3hCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO2dCQUM5QixHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDekIsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixPQUFPLENBQUMsSUFBSSxHQUFHLGtCQUFrQixHQUFHLGNBQWMsQ0FBQyxNQUFNLEdBQUUsR0FBRyxDQUFDO2dCQUMvRCxPQUFPLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztnQkFDNUIsT0FBTyxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUM7Z0JBQ2xDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzVDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7UUFFdEIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDeEQsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLHFDQUFxQztJQUd2QyxLQUFLLENBQUMsa0NBQWtDLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRyxlQUFlLEVBQUUsTUFBTSxFQUFFLFdBQVc7UUFDckcsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLE9BQU8sQ0FBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzVELE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNyQixNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEYsTUFBTSxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM3QixNQUFNLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztZQUMzQixNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUU3QixVQUFVLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7Z0JBQ2pFLE1BQU0sSUFBSSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDO2dCQUNsQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztZQUNILFVBQVUsQ0FBQyxhQUFhLElBQUksVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQkFDbkUsTUFBTSxJQUFJLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLENBQUM7Z0JBQ2xDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDN0QsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXZDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNyQixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUUsVUFBVSxFQUFFLFlBQVksQ0FBRSxDQUFDO1lBQzlFLDJEQUEyRDtZQUMzRCxNQUFNLFVBQVUsR0FBRyxNQUFNLFdBQVcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO2lCQUNsRixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDWixNQUFNLE1BQU0sR0FBRSxJQUFJLFFBQVEsRUFBRSxDQUFBO2dCQUM1QixNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEdBQUUsYUFBYSxDQUFDO2dCQUM3QyxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDekIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBRSxDQUFDO2dCQUNuRCxDQUFDLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFDLEdBQUcsQ0FBQztnQkFDN0QsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUUvQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBRSxVQUFVLEVBQUUsVUFBVSxDQUFFLENBQUMsQ0FBRSxnQkFBZ0I7WUFDNUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDO2lCQUMzRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDZixNQUFNLE1BQU0sR0FBRSxJQUFJLFFBQVEsRUFBRSxDQUFBO2dCQUM1QixNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEdBQUUsV0FBVyxDQUFDO2dCQUMzQyxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDNUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDeEIsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNoQixFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ3BCLEVBQUUsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO29CQUNwQixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBQyxHQUFHLENBQUM7Z0JBQzdELFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4QyxDQUFDLENBQUMsQ0FBQztZQUVILGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUUsR0FBRyxFQUFFO2dCQUNuQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFTixDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtRQUNqQixZQUFZLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUN2RCxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUYsS0FBSyxDQUFDLDRCQUE0QixDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsUUFBUSxHQUFDLEdBQUc7UUFDdEUsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFFLFlBQVksRUFBRSxVQUFVLENBQUUsQ0FBQztRQUM1RSxNQUFNLFFBQVEsR0FBRyxNQUFNLFdBQVcsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxFQUFFLENBQUM7YUFDM0UsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUM1QixNQUFNLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUN4QixFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDeEIsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNsQixFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3BCLEVBQUUsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO2dCQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25CLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsS0FBSyxDQUFDLDhCQUE4QixDQUMvQixjQUFjLEVBQ2QsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sV0FBVztRQUdkLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUM5RCxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDckIsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUU3RCxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3hCLE1BQU0sR0FBRyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQzVCLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN6QixHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDaEIsR0FBRyxDQUFDLElBQUksR0FBRyx1QkFBdUIsQ0FBQztnQkFDbkMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1lBQ0YsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO1lBQ3JCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1lBQzFFLElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUN6QixNQUFNLGlCQUFpQixHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQztpQkFDbEYsSUFBSSxDQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDckIsZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDO2dCQUN0RSxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7Z0JBQ25CLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7b0JBQ3ZDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUM1QixNQUFNLFdBQVcsR0FBRyxNQUFNLFdBQVcsQ0FBQyxHQUFHLENBQ3hCLGFBQWEsRUFDYixlQUFlLEVBQ2YsRUFBRSxDQUNoQixDQUFFLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO3dCQUNyQixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFOzRCQUMvQixlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUM3QixDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztvQkFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUMzQixhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUNsQyxDQUFDLGVBQWU7Z0JBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDOUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDbkMsV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2pDLGVBQWUsQ0FBQyxPQUFPLENBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTt3QkFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQzt3QkFDOUIsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQzVCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDckIsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO3dCQUN2QixNQUFNLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDO3dCQUNuQyxNQUFNLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7d0JBQy9CLE1BQU0sQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQzt3QkFDL0IsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNyQyxDQUFDLENBQUMsQ0FBQztvQkFDRCxXQUFXLENBQUMsSUFBSSxHQUFHLHVCQUF1QixHQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFFLEdBQUcsQ0FBQztvQkFDN0UsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNuRCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1lBQ0gsYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBRXRDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFFLEdBQUcsRUFBRTtnQkFDbkMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNBLFlBQVksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3ZELE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFQSxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsWUFBWTtRQUMxQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEtBQUssQ0FDNUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUNmLHlCQUF5QixFQUN6QixtQ0FBbUMsQ0FDdEMsQ0FBQztRQUNGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxLQUFLLENBQzlCLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFDZiwyQkFBMkIsRUFDM0Isb0NBQW9DLENBQ3ZDLENBQUM7UUFDRixNQUFNLGVBQWUsR0FBRyxJQUFJLEtBQUssQ0FDN0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUNmLDBCQUEwQixFQUMxQixtQ0FBbUMsQ0FDdEMsQ0FBQztRQUNGLE1BQU0sY0FBYyxHQUFHLElBQUksS0FBSyxDQUM1QixJQUFJLENBQUMsUUFBUSxFQUFFLEVBQ2YseUJBQXlCLEVBQ3pCLGtDQUFrQyxDQUNyQyxDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGdCQUFnQixFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDaEcsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGdCQUFnQixFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDaEcsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGdCQUFnQixFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDaEcsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGdCQUFnQixFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDaEcsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGdCQUFnQixFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDaEcsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGdCQUFnQixFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDaEcsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGdCQUFnQixFQUFFLGtDQUFrQyxDQUFDLENBQUM7UUFDL0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGdCQUFnQixFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFFbEcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRXBELElBQUksVUFBVSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7Z0JBQy9CLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzVDO2lCQUFNLElBQUksVUFBVSxDQUFDLFFBQVEsS0FBSyxPQUFPLEVBQUU7Z0JBQ3hDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDOUM7aUJBQU0sSUFBSSxVQUFVLENBQUMsUUFBUSxLQUFLLE1BQU0sRUFBRTtnQkFDdkMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDN0M7aUJBQU0sSUFBSSxVQUFVLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtnQkFDdEMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDNUM7aUJBQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFO2dCQUNqRSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNyQztpQkFBTSxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUU7Z0JBQ2pFLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3JDO2lCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtnQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDckM7aUJBQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFO2dCQUNqRSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNyQztpQkFBTSxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUU7Z0JBQ2pFLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3JDO2lCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtnQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDckM7aUJBQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUU7Z0JBQ25DLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ25DO2lCQUFNLElBQ0gsR0FBRyxLQUFLLEdBQUc7Z0JBQ1gsR0FBRyxLQUFLLEdBQUc7Z0JBQ1gsR0FBRyxLQUFLLEdBQUc7Z0JBQ1gsR0FBRyxLQUFLLEdBQUc7Z0JBQ1gsR0FBRyxLQUFLLEdBQUc7Z0JBQ1gsR0FBRyxLQUFLLEdBQUc7Z0JBQ1gsR0FBRyxLQUFLLEdBQUc7Z0JBQ1gsR0FBRyxLQUFLLEdBQUc7Z0JBQ1gsR0FBRyxLQUFLLEdBQUc7Z0JBQ1gsR0FBRyxLQUFLLEdBQUcsRUFDYjtnQkFDRSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN2QztTQUNKLENBQUMsb0JBQW9CO1FBRXRCLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsY0FBYyxDQUFDLElBQUksR0FBRyxjQUFjLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDdkYsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNsRDtRQUVELElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdEMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxDQUFDLENBQUMsQ0FBQztZQUNILGdCQUFnQixDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1lBQzdGLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUNwRDtRQUNELElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsZUFBZSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDMUYsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNuRDtRQUNELElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsY0FBYyxDQUFDLElBQUksR0FBRyxjQUFjLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDdkYsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNsRDtRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLElB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QUFFLFVBQVUsRUFBRTtZQUN2RCxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUMsTUFBTTsrR0F6OUJDLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmQsTUFBTTtFQTQ5QnBCLGVBQWU7U0ExOUJKLGlCQUFpQjs0RkFBakIsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTZXJ2aWNlUG9saWN5LCBBdHRyaWJ1dGUsIENoaWxkcmVuLCBJZGVudGl0eSwgRVJvdXRlciwgRVJQb2xpY3ksIEdyb3VwLCBTZXJ2aWNlLCBDb25maWcgfSBmcm9tICcuL25ldHdvcmstdmlzdWFsaXplci5oZWxwZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBUcmVlTm9kZVByb2Nlc3NvciB7XG4gICAgdW5pcUlkID0gMDtcbiAgICBnZXRQYWdpbmdPYmplY3QocGFnZXNpemUpIHtcbiAgICAgIGNvbnN0IHBhZ2luZyA9IHtcbiAgICAgICAgc2VhcmNoT246ICduYW1lJyxcbiAgICAgICAgbm9TZWFyY2g6IGZhbHNlLFxuICAgICAgICBmaWx0ZXI6ICcnLFxuICAgICAgICB0b3RhbDogcGFnZXNpemUsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIHNvcnQ6ICduYW1lJyxcbiAgICAgICAgb3JkZXI6ICdhc2MnLFxuICAgICAgfTtcbiAgICAgIHJldHVybiAgcGFnaW5nO1xuICAgIH1cblxuICAgIGFzeW5jIHByb2Nlc3NJZGVudGl0aWVzRm9yTm9kZUNsaWNrKFxuICAgICAgICBpZGVudGl0eU5vZGUsXG4gICAgICAgIG5ldHdvcmtHcmFwaCxcbiAgICAgICAgcmF3RW5kcG9pbnRzLFxuICAgICAgICB1bmlxSWQsXG4gICAgICAgIHppdGlTZXJ2aWNlLFxuICAgICAgICBjb25maWdzXG4gICAgKSB7XG4gICAgY29uc3QgbXlQcm9taXNlID0gYXdhaXQgbmV3IFByb21pc2UoIGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICBjb25zdCB3YWl0X3Byb21pc2VzID0gW107XG4gICAgICAgIHRoaXMudW5pcUlkID0gdW5pcUlkO1xuICAgICAgICBjb25zdCByYXdFcCA9IHRoaXMuZmluZFJhd0VuZHBvaW50KGlkZW50aXR5Tm9kZS5kYXRhLm5hbWUsIHJhd0VuZHBvaW50cyk7XG4gICAgICAgIGxldCByYXdFcEF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgaWYgKHJhd0VwLnJvbGVBdHRyaWJ1dGVzKSB7cmF3RXBBdHRyaWJ1dGVzID0gcmF3RXAucm9sZUF0dHJpYnV0ZXN9O1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3RXBBdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gbmV3IEF0dHJpYnV0ZSgpO1xuICAgICAgICAgICAgICBhdHRyaWJ1dGUuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZS5uYW1lID0gcmF3RXBBdHRyaWJ1dGVzW2ldO1xuICAgICAgICAgICAgICBhdHRyaWJ1dGUudHlwZSA9ICdJZGVudGl0eSBBdHRyaWJ1dGUnO1xuICAgICAgICAgICAgICBpZGVudGl0eU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGF0dHJpYnV0ZSk7XG4gICAgICAgIH1cblxuICAgICAgY29uc3QgYmluZFNlcnZpY2VzID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICBjb25zdCBkaWFsU2VydmljZXMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgIGJpbmRTZXJ2aWNlcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgIGRpYWxTZXJ2aWNlcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgIGxldCBpZGVudGl0eVNlcnZpY2VQb2xpY2llcyA9IFtdO1xuICAgICAgY29uc3QgcGFnZXNpemUgPSA1MDA7XG4gICAgLy8gZmV0Y2ggYXNzb2NpYXRlZCByb3V0ZXJzXG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShyYXdFcCwgJ2VkZ2Utcm91dGVycycpLnJlcGxhY2UoJy4vJywgJycpO1xuICAgICAgbGV0IGFzc29jaWF0ZWRSb3V0ZXJzID0gW107XG4gICAgICBjb25zdCBwYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgICBjb25zdCBlckNoYWlsZHMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgZXJDaGFpbGRzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICBlckNoYWlsZHMubmFtZT0gJ0Fzc29jaWF0ZWQgRWRnZSBSb3V0ZXJzJztcbiAgICAgICAgZXJDaGFpbGRzLnR5cGU9ICdFZGdlIFJvdXRlcnMnO1xuICAgICAgY29uc3QgYXNzb2NpYXRlZFJvdXRlcnNQcm9taXNlID0gIGF3YWl0IHppdGlTZXJ2aWNlLmdldCh1cmwsIHBhZ2luZywgW10pXG4gICAgICAgICAgIC50aGVuKCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgcmVzdWx0LmRhdGEuZm9yRWFjaCggKHJlKSA9PiB7XG4gICAgICAgICAgICAgICBjb25zdCB0bXAgPSBuZXcgRVJvdXRlcigpO1xuICAgICAgICAgICAgICAgICAgIHRtcC5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICAgICB0bXAubmFtZSA9IHJlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgdG1wLnR5cGUgPSAnRWRnZSBSb3V0ZXInO1xuICAgICAgICAgICAgICAgICAgIGVyQ2hhaWxkcy5jaGlsZHJlbi5wdXNoKHRtcCk7XG4gICAgICAgICAgICAgfSApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHBvbGljaWVzX3VybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKHJhd0VwLCAnc2VydmljZS1wb2xpY2llcycpLnJlcGxhY2UoJy4vJywgJycpO1xuICAgICAgY29uc3QgcG9saWNpZXNfcGFnaW5nID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuICAgICAgY29uc3QgZmlyc3RQcm9taXNlID0gIGF3YWl0IHppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgIC5nZXQocG9saWNpZXNfdXJsLCBwb2xpY2llc19wYWdpbmcsIFtdKVxuICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWRlbnRpdHlTZXJ2aWNlUG9saWNpZXMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIGlkZW50aXR5U2VydmljZVBvbGljaWVzLmZvckVhY2goIChzcCkgPT4ge1xuICAgICAgICAgICAgIGNvbnN0IG5vZGVBcnJheSA9ICB0aGlzLmdldFNlcnZpY2VzRm9yQVNlcnZpY2VQb2xpY3koc3AsIHppdGlTZXJ2aWNlLCA1MDApO1xuICAgICAgICAgICAgIHByb21pc2VzLnB1c2gobm9kZUFycmF5KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oIChub2RlQXJyYXkpID0+IHtcbiAgICAgICAgICAgICBub2RlQXJyYXkuZm9yRWFjaCggKGFyT2IpID0+IHtcbiAgICAgICAgICAgICAgaWYoYXJPYlswXSA9PT0gJ0JpbmQnICkge1xuICAgICAgICAgICAgICAgICBiaW5kU2VydmljZXMuY2hpbGRyZW4gPSB0aGlzLmFycmF5T2JqZWN0Q29weVJpZ2h0VG9MZWZ0KGJpbmRTZXJ2aWNlcy5jaGlsZHJlbiwgYXJPYlsxXSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgIGRpYWxTZXJ2aWNlcy5jaGlsZHJlbiA9IHRoaXMuYXJyYXlPYmplY3RDb3B5UmlnaHRUb0xlZnQoZGlhbFNlcnZpY2VzLmNoaWxkcmVuLCBhck9iWzFdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0gKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIFByb21pc2UuYWxsKHdhaXRfcHJvbWlzZXMpLnRoZW4oICgpID0+IHtcbiAgICAgICAgaWYgKGVyQ2hhaWxkcy5jaGlsZHJlbi5sZW5ndGggPjAgKSB7XG4gICAgICAgICAgICAgZXJDaGFpbGRzLm5hbWUgPSBlckNoYWlsZHMubmFtZSsnKCcrZXJDaGFpbGRzLmNoaWxkcmVuLmxlbmd0aCsnKSc7XG4gICAgICAgICAgICAgaWRlbnRpdHlOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChlckNoYWlsZHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmKGJpbmRTZXJ2aWNlcy5jaGlsZHJlbi5sZW5ndGg+MCkge1xuICAgICAgICAgICAgICBiaW5kU2VydmljZXMubmFtZSA9ICdCaW5kLVNlcnZpY2VzKCcrYmluZFNlcnZpY2VzLmNoaWxkcmVuLmxlbmd0aCsnKSc7XG4gICAgICAgICAgICAgIGlkZW50aXR5Tm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goYmluZFNlcnZpY2VzKTtcbiAgICAgICAgfVxuICAgICAgICBpZihkaWFsU2VydmljZXMuY2hpbGRyZW4ubGVuZ3RoPjApIHtcbiAgICAgICAgICAgICAgZGlhbFNlcnZpY2VzLm5hbWUgPSAnRGlhbC1TZXJ2aWNlcygnK2RpYWxTZXJ2aWNlcy5jaGlsZHJlbi5sZW5ndGgrJyknO1xuICAgICAgICAgICAgICBpZGVudGl0eU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGRpYWxTZXJ2aWNlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgndGhpcyBpcyBhIHByb21pc2UnKTtcbiAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICAgbmV0d29ya0dyYXBoID0gZDMuaGllcmFyY2h5KG5ldHdvcmtHcmFwaC5kYXRhLCBmdW5jdGlvbiAobmQpIHtcbiAgICAgICAgICByZXR1cm4gbmQuY2hpbGRyZW47XG4gICAgIH0pO1xuICAgICAgICAgcmV0dXJuIFtuZXR3b3JrR3JhcGgsIHRoaXMudW5pcUlkXTtcbiAgICB9IC8vIGVuZCBvZiBmdW5jdGlvblxuXG4gICAgY3JlYXRlSWQoKSB7XG4gICAgICAgICsrdGhpcy51bmlxSWQ7XG4gICAgICAgIHJldHVybiB0aGlzLnVuaXFJZDtcbiAgICB9XG5cbiAgIGNyZWF0ZVNlcnZpY2VOb2RlKCBzcikge1xuICAgICAgICBjb25zdCBzZXJ2aWNlT2IgPSBuZXcgU2VydmljZSgpO1xuICAgICAgICAgc2VydmljZU9iLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgc2VydmljZU9iLnV1aWQgPSBzci5pZDtcbiAgICAgICAgIHNlcnZpY2VPYi5uYW1lID0gc3IubmFtZTtcbiAgICAgICAgIHNlcnZpY2VPYi50eXBlID0gJ1NlcnZpY2UnO1xuICAgICAgIHJldHVybiBzZXJ2aWNlT2I7XG4gICB9XG5cbiAgIGFycmF5T2JqZWN0Q29weVJpZ2h0VG9MZWZ0KGxlZnRBcnIscmlnaHRBcnIpIHtcbiAgICAgY29uc3QgbGVmdEFycklkcyA9IFtdO1xuICAgICBsZWZ0QXJyLmZvckVhY2goIChvYikgPT4ge1xuICAgICAgIGxlZnRBcnJJZHMucHVzaChvYi5pZCk7XG4gICAgIH0gKTtcblxuICAgICByaWdodEFyci5mb3JFYWNoKCAob2IpID0+IHtcbiAgICAgIGlmICghbGVmdEFyci5pbmNsdWRlcyhvYi5pZCkpIHtcbiAgICAgICAgICAgbGVmdEFyci5wdXNoKG9iKTtcbiAgICAgIH1cbiAgICAgfSApO1xuXG4gICAgcmV0dXJuIGxlZnRBcnI7XG4gICB9XG5cbiAgYWRkSXRlbVRvQXJyYXkoSWRuZXRpdGllcywgb2IpIHtcbiAgICBpZiAoIG9iLm5hbWUgJiYgIUlkbmV0aXRpZXMuZmluZCgoaXRlbSkgPT4gaXRlbS51dWlkID09PSBvYi5pZCkpIHtcbiAgICAgIElkbmV0aXRpZXMucHVzaCh0aGlzLmNyZWF0ZUlkZW50aXR5KG9iKSk7XG4gICAgfVxuICAgIHJldHVybiBJZG5ldGl0aWVzO1xuICB9XG4gIGNyZWF0ZUlkZW50aXR5KG9iKSB7XG4gICAgICBjb25zdCBlbmRwb2ludCA9IG5ldyBJZGVudGl0eSgpO1xuICAgICAgIGVuZHBvaW50LmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgIGVuZHBvaW50LnV1aWQgPSBvYi5pZDtcbiAgICAgICBlbmRwb2ludC5uYW1lID0gb2IubmFtZTtcbiAgICAgICBlbmRwb2ludC5vbmxpbmUgPSBvYi5oYXNBcGlTZXNzaW9uID09PSB0cnVlID8gJ1llcyc6ICdObyc7XG4gICAgICAgZW5kcG9pbnQudHlwZSA9ICdJZGVudGl0eSc7XG4gICAgICAgZW5kcG9pbnQuc3RhdHVzID0gb2Iuc2RrSW5mbyAhPT0gbnVsbCA/ICdSZWdpc3RlcmVkJzogJ05vdCBSZWdpc3RlcmVkJztcbiAgICAgICBpZiAob2Iuc2RrSW5mbykge1xuICAgICAgICAgICBlbmRwb2ludC5vcyA9IG9iLnNka0luZm8udHlwZT8gb2Iuc2RrSW5mby50eXBlOiBvYi5zZGtJbmZvLmFwcElkO1xuICAgICAgICAgICBlbmRwb2ludC5vc1ZlcnNpb24gPSBvYi5zZGtJbmZvLnZlcnNpb247XG4gICAgICAgfVxuICAgICAgIGlmIChvYi5hdXRoUG9saWN5ICYmIG9iLmF1dGhQb2xpY3kubmFtZS5pbmNsdWRlcyhcIkJyb3daZXJcIikpIHtcbiAgICAgICAgICAgZW5kcG9pbnQudHlwZSA9ICdCcm93WmVyIElkZW50aXR5JztcbiAgICAgICB9XG4gICAgICAgZW5kcG9pbnQuY3JlYXRlZEF0ID0gb2IuY3JlYXRlZEF0O1xuICAgICAgIGVuZHBvaW50LnVwZGF0ZWRBdCA9IG9iLnVwZGF0ZWRBdDtcblxuICAgICByZXR1cm4gZW5kcG9pbnQ7XG4gIH1cbiAgZ2V0TGlua0ZvclJlc291cmNlKG9iLCByZXNvdXJjZSkge1xuICAgIHJldHVybiBvYlsnX2xpbmtzJ11bcmVzb3VyY2VdWydocmVmJ107XG4gIH1cblxuICAgIGZpbmRTZXJ2aWNlc0hvc3RlZE9uRW5kcG9pbnQocmF3RXAsIHNlcnZpY2VzLCBzZXJ2aWNlUG9saWNpZXMsIHppdGlTZXJ2aWNlKSB7XG4gICAgICAgY29uc3Qgc2VydmljZXNBcnIgPSBbXTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5Ob0dyb3VwcyA9IFtdO1xuICAgICAgICBjb25zdCBlbmRwb2ludEF0dHIgPSByYXdFcC5yb2xlQXR0cmlidXRlcz8gcmF3RXAucm9sZUF0dHJpYnV0ZXM6IFtdO1xuICAgICAgICBlbmRwb2ludEF0dHIucHVzaCgnQCcrcmF3RXAuaWQpO1xuXG4gICAgICAgIGxldCBkaWFsU2VydmljZUF0dHJzID0gW107XG4gICAgICAgIGxldCBiaW5kU2VydmljZUF0dHJzID0gW107XG5cbiAgICAgICAgY29uc3QgYmluZFBvbGljaWVzID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgICAgIGJpbmRQb2xpY2llcy5uYW1lID0gJ0JpbmQtUG9saWNpZXMnO1xuICAgICAgICBjb25zdCBkaWFsUG9saWNpZXMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgICAgIGRpYWxQb2xpY2llcy5uYW1lID0gJ0RpYWwtUG9saWNpZXMnO1xuXG4gICAgICAgIGJpbmRQb2xpY2llcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgZGlhbFBvbGljaWVzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuXG4gICAgICAgIHNlcnZpY2VQb2xpY2llcy5maW5kKCAoc3ApID0+IHtcbiAgICAgICAgICBzcC5pZGVudGl0eVJvbGVzLmZpbmQoIChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChlbmRwb2ludEF0dHIuaW5jbHVkZXMoYXR0cikgKSB7XG4gICAgICAgICAgICAgICBpZiAoc3AudHlwZSA9PT0gJ0JpbmQnKSB7XG4gICAgICAgICAgICAgICAgICAgY29uc3Qgc1BvbGljeSA9IG5ldyBTZXJ2aWNlUG9saWN5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgc1BvbGljeS5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICBzUG9saWN5Lm5hbWUgPSBzcC5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgIHNQb2xpY3kudHlwZSA9IHNwLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgc1BvbGljeS5jaGlsZHJlbiA9IHRoaXMuZ2V0U2VydmljZXNGb3JQb2xpY3koc2VydmljZXMsIHNwKTtcbiAgICAgICAgICAgICAgICAgICBiaW5kUG9saWNpZXMuY2hpbGRyZW4ucHVzaChzcCk7XG4gICAgICAgICAgICAgICAgICAgYmluZFNlcnZpY2VBdHRycyA9IGZpbGxBcnJheShiaW5kU2VydmljZUF0dHJzLCBzcC5zZXJ2aWNlUm9sZXMpO1xuICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgY29uc3Qgc1BvbGljeSA9IG5ldyBTZXJ2aWNlUG9saWN5KCk7XG4gICAgICAgICAgICAgICAgICAgICBzUG9saWN5LmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgICAgICAgc1BvbGljeS5uYW1lID0gc3AubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgIHNQb2xpY3kudHlwZSA9IHNwLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICBzUG9saWN5LmNoaWxkcmVuID0gdGhpcy5nZXRTZXJ2aWNlc0ZvclBvbGljeShzZXJ2aWNlcywgc3ApIDtcbiAgICAgICAgICAgICAgICAgZGlhbFBvbGljaWVzLmNoaWxkcmVuLnB1c2goc1BvbGljeSk7XG4gICAgICAgICAgICAgICAgZGlhbFNlcnZpY2VBdHRycyA9IGZpbGxBcnJheShkaWFsU2VydmljZUF0dHJzLCBzcC5zZXJ2aWNlUm9sZXMpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gKTtcblxuICAgICAgICBmdW5jdGlvbiBmaWxsQXJyYXkoYXJyMSwgYXJyMikge1xuICAgICAgICAgIGFycjIuZm9yRWFjaCggKGl0ZW0pID0+IHtcbiAgICAgICAgICAgYXJyMS5wdXNoKGl0ZW0pO1xuICAgICAgICAgIH0gKTtcbiAgICAgICAgICByZXR1cm4gYXJyMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJpbmRTZXJ2aWNlcyA9IFtdO1xuICAgICAgICBjb25zdCBkaWFsU2VydmljZXMgPSBbXTtcblxuICAgICAgICBzZXJ2aWNlcyAmJiBzZXJ2aWNlcy5mb3JFYWNoKCAoc3IpID0+IHtcbiAgICAgICAgICBzci5yb2xlQXR0cmlidXRlcyAmJiBzci5yb2xlQXR0cmlidXRlcy5mb3JFYWNoKCAoYXR0cikgPT4ge1xuICAgICAgICAgICAgIGlmIChkaWFsU2VydmljZUF0dHJzLmluY2x1ZGVzKGF0dHIpICkge1xuICAgICAgICAgICAgICAgZGlhbFNlcnZpY2VzLnB1c2godGhpcy5jcmVhdGVTZXJ2aWNlTm9kZShzcikgKTtcbiAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgaWYgKGJpbmRTZXJ2aWNlQXR0cnMuaW5jbHVkZXMoYXR0cikgKSB7XG4gICAgICAgICAgICAgICAgYmluZFNlcnZpY2VzLnB1c2goIHRoaXMuY3JlYXRlU2VydmljZU5vZGUoc3IpICk7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgIH0gKTtcbiAgICAgICAgfSk7XG4gICAgICAgaWYgKGRpYWxTZXJ2aWNlcy5sZW5ndGggPjAgKSB7XG4gICAgICAgICAgY29uc3QgZGlhbEdyb3VwID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgICAgZGlhbEdyb3VwLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgIGRpYWxHcm91cC5uYW1lID0gJ1NlcnZpY2VzLURpYWwnO1xuICAgICAgICAgIGRpYWxHcm91cC5jaGlsZHJlbiA9IGRpYWxTZXJ2aWNlcztcbiAgICAgICAgICBzZXJ2aWNlc0Fyci5wdXNoKGRpYWxHcm91cCk7XG4gICAgICAgfVxuICAgICAgIGlmIChiaW5kU2VydmljZXMubGVuZ3RoID4wICkge1xuICAgICAgICAgICAgY29uc3QgYmluZEdyb3VwID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgICAgICBiaW5kR3JvdXAuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICBiaW5kR3JvdXAubmFtZSA9ICdTZXJ2aWNlcy1CaW5kJztcbiAgICAgICAgICAgIGJpbmRHcm91cC5jaGlsZHJlbiA9IGJpbmRTZXJ2aWNlcztcbiAgICAgICAgICAgIHNlcnZpY2VzQXJyLnB1c2goYmluZEdyb3VwKTtcbiAgICAgICB9XG4gICAgIHJldHVybiBzZXJ2aWNlc0FycjtcblxuXG4gICAgfSAvLyBlbmQgb2YgZmluZCBzZXJ2aWNlc0hvc3RlZE9uRW5kcG9pbnRcblxuICAgZ2V0U2VydmljZXNGb3JQb2xpY3koc2VydmljZXMsIHNwT2IpIHtcbiAgICAgY29uc3Qgc2VydmljZXNGb3RQb2xpY3kgPSBbXTtcbiAgICAgc2VydmljZXMgJiYgc2VydmljZXMuZm9yRWFjaCggKHNyKSA9PiB7XG4gICAgICAgICBjb25zdCBhdHRycyA9IHNyLnJvbGVBdHRyaWJ1dGVzID8gc3Iucm9sZUF0dHJpYnV0ZXM6IFtdO1xuICAgICAgICAgYXR0cnMucHVzaCgnQCcrc3BPYi5pZCk7XG4gICAgICAgICBhdHRycy5maW5kKCAoYXRyKSA9PiB7XG4gICAgICAgICAgICBpZihzcE9iLnNlcnZpY2VSb2xlcy5pbmNsdWRlcyhhdHIpICl7XG4gICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlTm9kZSA9IG5ldyBTZXJ2aWNlKCk7XG4gICAgICAgICAgICAgICBzZXJ2aWNlTm9kZS5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgIHNlcnZpY2VOb2RlLm5hbWUgPSBzci5uYW1lO1xuICAgICAgICAgICAgICAgc2VydmljZU5vZGUudHlwZSA9ICdTZXJ2aWNlJztcbiAgICAgICAgICAgICBzZXJ2aWNlc0ZvdFBvbGljeS5wdXNoKHNlcnZpY2VOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgIH0pO1xuICAgICB9KTtcbiAgICByZXR1cm4gc2VydmljZXNGb3RQb2xpY3k7XG4gICB9XG5cbiAgICBmaW5kUmF3RW5kcG9pbnQoZXBOYW1lLCBlbmRwb2ludHMpIHtcbiAgICAgICByZXR1cm4gZW5kcG9pbnRzLmZpbmQoKGVwKSA9PiBlcC5uYW1lID09PSBlcE5hbWUpO1xuICAgIH1cblxuICBzZXJ2aWNlQ29uZmlnQWxpYXMoY29uZmlncykge1xuICAgICBsZXQgaW50ZXJjZXB0ID0gW107XG4gICAgIF8uaXNBcnJheShjb25maWdzKSAmJiBjb25maWdzLmZvckVhY2goIChjb25mKSA9PiB7XG4gICAgICAgICAgIGxldCBhZGRyZXNzZXMgPSAnJztcbiAgICAgICAgICAgbGV0IHBvcnRzID0gJyc7XG4gICAgICAgICAgaWYgKGNvbmYuZGF0YS5hZGRyZXNzZXMpIHtcbiAgICAgICAgICAgICBhZGRyZXNzZXMgPSBjb25mLmRhdGEuYWRkcmVzc2VzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICBhZGRyZXNzZXMgPSBjb25mLmRhdGEuYWRkcmVzcztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXy5pc0FycmF5KGNvbmYuZGF0YS5wb3J0UmFuZ2VzKSApIHtcbiAgICAgICAgICAgICAgY29uZi5kYXRhLnBvcnRSYW5nZXMuZm9yRWFjaCggKHBvcnRzSnNvbikgPT4ge1xuICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcG9ydHNKc29uKSB7XG4gICAgICAgICAgICAgICAgICBwb3J0cyA9IHBvcnRzICsga2V5ICsnOicrcG9ydHNKc29uW2tleV0gKycgJyA7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgIHBvcnRzID0gcG9ydHMgKyAnOyc7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcG9ydHMgPSAgY29uZi5kYXRhLnBvcnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGludGVyY2VwdC5wdXNoKGFkZHJlc3Nlcyk7XG4gICAgICAgICAgaW50ZXJjZXB0LnB1c2gocG9ydHMpO1xuICAgICB9KTtcbiAgICAgcmV0dXJuIGludGVyY2VwdDtcbiAgfVxuXG4gIGFzeW5jIHByb2Nlc3NTZXJ2aWNlc0Zvck5vZGVDbGljayhzZXJ2aWNlTm9kZSwgbmV0d29ya0dyYXBoLCBzZXJ2aWNlcywgdW5pcUlkLCB6aXRpU2VydmljZSkge1xuICAgICBjb25zdCBteVByb21pc2UgPSBhd2FpdCBuZXcgUHJvbWlzZSggYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB3YWl0X3Byb21pc2VzID0gW107XG4gICAgICAgIHRoaXMudW5pcUlkID0gdW5pcUlkO1xuICAgICAgICBjb25zdCByYXdTZXJ2aWNlT2JqID0gc2VydmljZXMuZmluZCgocykgPT4gcy5uYW1lID09PSBzZXJ2aWNlTm9kZS5kYXRhLm5hbWUpO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzd2l0aE5hbWUgPSBbXTtcblxuICAgICAgICByYXdTZXJ2aWNlT2JqLnJvbGVBdHRyaWJ1dGVzICYmIHJhd1NlcnZpY2VPYmoucm9sZUF0dHJpYnV0ZXMuZmluZCgoc3JhdHRyKSA9PiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzd2l0aE5hbWUucHVzaChzcmF0dHIpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2VydmljZUF0dHJpYnV0ZXMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgc2VydmljZUF0dHJpYnV0ZXMubmFtZSA9ICdBdHRyaWJ1dGVzJztcbiAgICAgICAgc2VydmljZUF0dHJpYnV0ZXMudHlwZSA9ICdBdHRyaWJ1dGVzJztcbiAgICAgICAgc2VydmljZUF0dHJpYnV0ZXMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgYXR0cmlidXRlc3dpdGhOYW1lLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRyT2IgPSBuZXcgQXR0cmlidXRlKCk7XG4gICAgICAgICAgICBhdHRyT2IuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICBhdHRyT2IubmFtZSA9IGF0dHJpYnV0ZXN3aXRoTmFtZVtrXTtcbiAgICAgICAgICAgIGF0dHJPYi50eXBlID0gJ0F0dHJpYnV0ZSc7XG5cbiAgICAgICAgICAgIHNlcnZpY2VBdHRyaWJ1dGVzLmNoaWxkcmVuLnB1c2goYXR0ck9iKTtcbiAgICAgICAgfSAvLyBlbmQgaW5uZXIgZm9yIGxvb3BcbiAgICAgICAgaWYgKHNlcnZpY2VBdHRyaWJ1dGVzLmNoaWxkcmVuLmxlbmd0aCA+MCApIHtcbiAgICAgICAgICAgc2VydmljZUF0dHJpYnV0ZXMubmFtZSA9IHNlcnZpY2VBdHRyaWJ1dGVzLm5hbWUrJygnKyBzZXJ2aWNlQXR0cmlidXRlcy5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgIHNlcnZpY2VOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChzZXJ2aWNlQXR0cmlidXRlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2VydmljZV9jb25maWdzID0gW107XG4gICAgICAgIGNvbnN0IGNvbmZpZ3NfdXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UocmF3U2VydmljZU9iaiwgJ2NvbmZpZ3MnKTtcbiAgICAgICAgY29uc3QgcGFnZXNpemUgPSA1MDA7XG4gICAgICAgIGNvbnN0IHBhZ2luZ09iID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuICAgICAgICBjb25zdCBjb25maWdQcm9taXNlID0gYXdhaXQgeml0aVNlcnZpY2VcbiAgICAgICAgIC5nZXQoY29uZmlnc191cmwsIHBhZ2luZ09iLCBbXSlcbiAgICAgICAgIC50aGVuKChjb25maWdzKSA9PiB7XG4gICAgICAgICAgIHNlcnZpY2VfY29uZmlncyA9IGNvbmZpZ3MgJiYgY29uZmlncy5kYXRhID8gY29uZmlncy5kYXRhIDogW107XG4gICAgICAgICAgIGNvbnN0IGNoaWxkcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICBjaGlsZHMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgIGNoaWxkcy5uYW1lID0gJ1NlcnZpY2UgQ29uZmlncyc7XG4gICAgICAgICAgIGNoaWxkcy50eXBlID0gJ1NlcnZpY2UgQ29uZmlncyc7XG4gICAgICAgICAgIGNvbnN0IHNlcnZpY2VfY29uZmlnc19BcnIgPSBbXTtcbiAgICAgICAgICAgc2VydmljZV9jb25maWdzLmZvckVhY2goIChjZmcpID0+IHtcbiAgICAgICAgICAgICBjb25zdCBvYmogPSBuZXcgQ29uZmlnKCk7XG4gICAgICAgICAgICAgb2JqLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgIG9iai5uYW1lID0gY2ZnLm5hbWU7XG4gICAgICAgICAgICAgb2JqLnV1aWQgPSBjZmcudXVpZDtcbiAgICAgICAgICAgICBvYmouZGF0YSA9IEpTT04uc3RyaW5naWZ5KGNmZy5kYXRhKTtcbiAgICAgICAgICAgICBzZXJ2aWNlX2NvbmZpZ3NfQXJyLnB1c2gob2JqKTtcbiAgICAgICAgICAgfSApO1xuXG4gICAgICAgICAgIGlmIChzZXJ2aWNlX2NvbmZpZ3NfQXJyLmxlbmd0aCA+MCApIHtcbiAgICAgICAgICAgICAgY2hpbGRzLmNoaWxkcmVuID0gc2VydmljZV9jb25maWdzX0FycjtcbiAgICAgICAgICAgICAgY2hpbGRzLm5hbWUgPSBjaGlsZHMubmFtZSArJygnK2NoaWxkcy5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgIHNlcnZpY2VOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChjaGlsZHMpO1xuICAgICAgICAgICAgICBzZXJ2aWNlTm9kZS5kYXRhLmludGVyY2VwdCA9IHRoaXMuc2VydmljZUNvbmZpZ0FsaWFzKHNlcnZpY2VfY29uZmlncyk7XG4gICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICB3YWl0X3Byb21pc2VzLnB1c2goY29uZmlnUHJvbWlzZSk7XG4gICAgICAgY29uc3Qgc2VydmljZV9lZGdlX3JvdXRlcl9wb2xpY2llc191cmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShcbiAgICAgICAgIHJhd1NlcnZpY2VPYmosXG4gICAgICAgICdzZXJ2aWNlLWVkZ2Utcm91dGVyLXBvbGljaWVzJ1xuICAgICAgICk7XG4gICAgICAgbGV0IHNlcnZpY2Vfcm91dGVyc191cmxzID0gW107XG4gICAgICAgY29uc3Qgc2VyX3Byb21zZSA9ICBhd2FpdCB6aXRpU2VydmljZVxuICAgICAgICAgICAgIC5nZXQoc2VydmljZV9lZGdlX3JvdXRlcl9wb2xpY2llc191cmwucmVwbGFjZSgnLi8nLCAnJyksIHBhZ2luZ09iLCBbXSlcbiAgICAgICAgICAgICAudGhlbiggKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0LmRhdGEuZm9yRWFjaCggKHNlcnApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZV9yb3V0ZXJzX3VybHMucHVzaCggdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2Uoc2VycCwnZWRnZS1yb3V0ZXJzJykgKTtcbiAgICAgICAgICAgICAgICAgIH0gKTs7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKHNlcl9wcm9tc2UpO1xuICAgICAgIGxldCBzZXJwX3BhZ2VfUHJvbWlzZXMgPSBbXTtcbiAgICAgICBzZXJ2aWNlX3JvdXRlcnNfdXJscy5mb3JFYWNoKChlcl91cmwpID0+IHtcbiAgICAgICAgICBjb25zdCBwcm9tc2UgPSAgeml0aVNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0KGVyX3VybC5yZXBsYWNlKCcuLycsICcnKSwgcGFnaW5nT2IsIFtdKTtcbiAgICAgICAgICAgICAgICAvLyAudGhlbihyZXN1bHQgPT4gW3BvbGljeS50eXBlLCByZXN1bHRdKTtcbiAgICAgICAgICBzZXJwX3BhZ2VfUHJvbWlzZXMucHVzaChwcm9tc2UpO1xuICAgICAgIH0pO1xuICAgICAgIGxldCBhc3NvY2lhdGVkUm91dGVycyA9IFtdO1xuICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHNlcnBfcGFnZV9Qcm9taXNlcykudGhlbiggKHZhbHVlczphbnkpID0+IHtcbiAgICAgICAgIHZhbHVlcyAmJiB2YWx1ZXMuZm9yRWFjaCgocmVzOmFueSkgPT4ge1xuICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJlcy5kYXRhLmZvckVhY2goIChlcik9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBlck9iID0gbmV3IEVSb3V0ZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVyT2IuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlck9iLm5hbWUgPSAgIGVyLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBlci50eXBlID0gJ0VkZ2UgUm91dGVyJztcbiAgICAgICAgICAgICAgICAgIGFzc29jaWF0ZWRSb3V0ZXJzLnB1c2goZXJPYik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgfSlcbiAgICAgICAgIGNvbnN0IHRtcCA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICAgIHRtcC5uYW1lID0gXCJBc3NvY2lhdGVkIEVkZ2UgUm91dGVycyhcIiArIGFzc29jaWF0ZWRSb3V0ZXJzLmxlbmd0aCArJyknO1xuICAgICAgICAgICAgIHRtcC50eXBlID0gXCJFZGdlIFJvdXRlcnNcIjtcbiAgICAgICAgICAgICB0bXAuY2hpbGRyZW4gPSBhc3NvY2lhdGVkUm91dGVycztcbiAgICAgICAgICAgICB0bXAuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgc2VydmljZU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKHRtcCk7XG4gICAgICAgfSk7XG5cbiAgICAgICBjb25zdCBzZXJ2aWNlX3BvbGljaWVzX3VybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKFxuICAgICAgICByYXdTZXJ2aWNlT2JqLFxuICAgICAgICAnc2VydmljZS1wb2xpY2llcydcbiAgICAgICApLnJlcGxhY2UoJy4vJywgJycpOyAvLyBkaWFsLCBCaW5kIGluZm9cblxuICAgICAgIGxldCBiaW5kUG9saWNpZXMgPSBbXTtcbiAgICAgICBsZXQgYmluZElkbmV0aXRpZXMgPSBbXTtcbiAgICAgICBsZXQgZGlhbElkbmV0aXRpZXMgPSBbXTtcblxuICAgICAgIGNvbnN0IHByb21pc2UyID0gYXdhaXQgeml0aVNlcnZpY2VcbiAgICAgICAuZ2V0KHNlcnZpY2VfcG9saWNpZXNfdXJsLCBwYWdpbmdPYiwgW10pXG4gICAgICAgLnRoZW4oKHBvbGljaWVzKSA9PiB7XG4gICAgICAgICBiaW5kUG9saWNpZXMgPSBwb2xpY2llcy5kYXRhO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHBhZ2VQcm9taXNlcyA9IFtdO1xuICAgICAgYmluZFBvbGljaWVzLmZvckVhY2goICAocG9saWN5KSA9PiB7XG4gICAgICAgICBjb25zdCBiaW5kSWRlbnRpdGllc1VybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKFxuICAgICAgICAgICAgcG9saWN5LFxuICAgICAgICAgICAgJ2lkZW50aXRpZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBwcm9tc2UgPSAgeml0aVNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0KGJpbmRJZGVudGl0aWVzVXJsLnJlcGxhY2UoJy4vJywgJycpLCBwYWdpbmdPYiwgW10pXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IFtwb2xpY3kudHlwZSwgcmVzdWx0XSk7XG4gICAgICAgICAgcGFnZVByb21pc2VzLnB1c2gocHJvbXNlKTtcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocGFnZVByb21pc2VzKS50aGVuKCAodmFsdWVzOmFueSkgPT4ge1xuICAgICAgICAgIHZhbHVlcyAmJiB2YWx1ZXMuZm9yRWFjaCgocmVzOmFueSkgPT4ge1xuICAgICAgICAgICBpZiAocmVzICYmIHJlc1sxXS5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcmVzWzFdLmRhdGEuZm9yRWFjaCgocnMpID0+IHtcbiAgICAgICAgICAgICAgICBpZihyZXNbMF0gPT09ICdCaW5kJykge1xuICAgICAgICAgICAgICAgICBiaW5kSWRuZXRpdGllcyA9IHRoaXMuYWRkSXRlbVRvQXJyYXkoYmluZElkbmV0aXRpZXMsIHJzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYocmVzWzBdID09PSAnRGlhbCcpe1xuICAgICAgICAgICAgICAgICBkaWFsSWRuZXRpdGllcyA9IHRoaXMuYWRkSXRlbVRvQXJyYXkoZGlhbElkbmV0aXRpZXMsIHJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgaWYocmVzWzBdID09PSAnQmluZCcpIHtcbiAgICAgICAgICAgICAgICAgYmluZElkbmV0aXRpZXMgPSB0aGlzLmFkZEl0ZW1Ub0FycmF5KGJpbmRJZG5ldGl0aWVzLCByZXNbMV0uZGF0YSk7XG4gICAgICAgICAgICAgICB9IGVsc2UgaWYocmVzWzBdID09PSAnRGlhbCcpe1xuICAgICAgICAgICAgICAgICBkaWFsSWRuZXRpdGllcyA9IHRoaXMuYWRkSXRlbVRvQXJyYXkoZGlhbElkbmV0aXRpZXMsIHJlc1sxXS5kYXRhKTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgY29uc3QgdG1wID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgdG1wLm5hbWUgPSBcIkJpbmQgSWRlbnRpdGllcyhcIiArIGJpbmRJZG5ldGl0aWVzLmxlbmd0aCArJyknO1xuICAgICAgICAgICAgIHRtcC50eXBlID0gXCJJZGVudGl0aWVzXCI7XG4gICAgICAgICAgICAgdG1wLmNoaWxkcmVuID0gYmluZElkbmV0aXRpZXM7XG4gICAgICAgICAgICAgdG1wLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgIHNlcnZpY2VOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaCh0bXApO1xuICAgICAgICAgICBjb25zdCB0bXBEaWFsID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgdG1wRGlhbC5uYW1lID0gXCJEaWFsIElkZW50aXRpZXMoXCIgKyBkaWFsSWRuZXRpdGllcy5sZW5ndGggKycpJztcbiAgICAgICAgICAgICB0bXBEaWFsLnR5cGUgPSBcIklkZW50aXRpZXNcIjtcbiAgICAgICAgICAgICB0bXBEaWFsLmNoaWxkcmVuID0gZGlhbElkbmV0aXRpZXM7XG4gICAgICAgICAgICAgdG1wRGlhbC5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICBzZXJ2aWNlTm9kZS5kYXRhLmNoaWxkcmVuLnB1c2godG1wRGlhbCk7XG4gICAgICAgICByZXNvbHZlKCd0aGlzIGlzIGEgcHJvbWlzZScpO1xuICAgICAgfSk7XG4gICAgICAgUHJvbWlzZS5hbGwod2FpdF9wcm9taXNlcykudGhlbiggKCkgPT4geyB9KTtcbiAgICB9KTsgLy8gZW5kIG9mIG15cHJvbWlzZVxuXG4gICAgIG5ldHdvcmtHcmFwaCA9IGQzLmhpZXJhcmNoeShuZXR3b3JrR3JhcGguZGF0YSwgZnVuY3Rpb24gKG5kKSB7XG4gICAgICAgIHJldHVybiBuZC5jaGlsZHJlbjtcbiAgICAgfSk7XG4gICAgICByZXR1cm4gW25ldHdvcmtHcmFwaCwgdGhpcy51bmlxSWRdO1xuICB9IC8vIGVuZCBvZiBwcm9jZXNzU2VydmljZXNGb3JOb2RlQ2xpY2tcblxuXG4gIGFzeW5jIHByb2Nlc3NTZXJ2aWNlUG9saWNpZXNGb3JOb2RlQ2xpY2socG9saWN5Tm9kZSwgbmV0d29ya0dyYXBoLCAgc2VydmljZVBvbGljaWVzLCB1bmlxSWQsIHppdGlTZXJ2aWNlKSB7XG4gICAgIGNvbnN0IG15UHJvbWlzZSA9IGF3YWl0IG5ldyBQcm9taXNlKCBhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHdhaXRfcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgdGhpcy51bmlxSWQgPSB1bmlxSWQ7XG4gICAgICAgIGNvbnN0IHJhd1NQb2xpY3kgPSBzZXJ2aWNlUG9saWNpZXMuZmluZCgocykgPT4gcy5uYW1lID09PSBwb2xpY3lOb2RlLmRhdGEubmFtZSk7XG4gICAgICAgIGNvbnN0IGNoaWxkcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgY2hpbGRzLm5hbWUgPSBcIkF0dHJpYnV0ZXNcIjtcbiAgICAgICAgIGNoaWxkcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcblxuICAgICAgICByYXdTUG9saWN5LnNlcnZpY2VSb2xlcyAmJiByYXdTUG9saWN5LnNlcnZpY2VSb2xlcy5mb3JFYWNoKCAob2IpID0+IHtcbiAgICAgICAgICBjb25zdCBhdHRyID0gbmV3IEF0dHJpYnV0ZSgpO1xuICAgICAgICAgICAgYXR0ci5uYW1lID0gb2I7XG4gICAgICAgICAgICBhdHRyLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgYXR0ci50eXBlID0gXCJTZXJ2aWNlIEF0dHJpYnV0ZVwiO1xuICAgICAgICAgIGNoaWxkcy5jaGlsZHJlbi5wdXNoKGF0dHIpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmF3U1BvbGljeS5pZGVudGl0eVJvbGVzICYmIHJhd1NQb2xpY3kuaWRlbnRpdHlSb2xlcy5mb3JFYWNoKCAob2IpID0+IHtcbiAgICAgICAgICBjb25zdCBhdHRyID0gbmV3IEF0dHJpYnV0ZSgpO1xuICAgICAgICAgICBhdHRyLm5hbWUgPSBvYjtcbiAgICAgICAgICAgYXR0ci5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgYXR0ci50eXBlID0gXCJJZGVudGl0eSBBdHRyaWJ1dGVcIjtcbiAgICAgICAgICBjaGlsZHMuY2hpbGRyZW4ucHVzaChhdHRyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNoaWxkcy5uYW1lID0gY2hpbGRzLm5hbWUgKyAnKCcrIGNoaWxkcy5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICBwb2xpY3lOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChjaGlsZHMpO1xuXG4gICAgICAgIGNvbnN0IHBhZ2VzaXplID0gNTAwO1xuICAgICAgICBjb25zdCBpZGVudGl0aWVzX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgICAgY29uc3QgYmluZElkZW50aXRpZXNVcmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZSggcmF3U1BvbGljeSwgJ2lkZW50aXRpZXMnICk7XG4gICAgICAgIC8vIHRoaXMubG9nZ2VyLmluZm8oJ2JpbmRJZGVudGl0aWVzVXJsJyxiaW5kSWRlbnRpdGllc1VybCk7XG4gICAgICAgIGNvbnN0IHNwX3Byb21pc2UgPSBhd2FpdCB6aXRpU2VydmljZS5nZXQoYmluZElkZW50aXRpZXNVcmwsIGlkZW50aXRpZXNfcGFnaW5nLCBbXSlcbiAgICAgICAudGhlbigoaWRzKSA9PiB7XG4gICAgICAgICBjb25zdCBjaGlsZHMgPW5ldyBDaGlsZHJlbigpXG4gICAgICAgICBjaGlsZHMubmFtZSA9IHJhd1NQb2xpY3kudHlwZSsgJy1JZGVudGl0aWVzJztcbiAgICAgICAgIGNoaWxkcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgIGlkcy5kYXRhLmZvckVhY2goIChpZE9iKSA9PiB7XG4gICAgICAgICAgIGNoaWxkcy5jaGlsZHJlbi5wdXNoKHRoaXMuY3JlYXRlSWRlbnRpdHkoaWRPYikgKTtcbiAgICAgICAgIH0pO1xuICAgICAgICAgY2hpbGRzLm5hbWUgPSBjaGlsZHMubmFtZSArICcoJyArIGNoaWxkcy5jaGlsZHJlbi5sZW5ndGgrJyknO1xuICAgICAgICAgcG9saWN5Tm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goY2hpbGRzKTtcbiAgICAgICB9KTtcbiAgICAgICB3YWl0X3Byb21pc2VzLnB1c2goc3BfcHJvbWlzZSk7XG5cbiAgICAgICBjb25zdCBzZXJ2aWNlc19wYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgICAgY29uc3QgYmluZFNlcnZpY2VzVXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UoIHJhd1NQb2xpY3ksICdzZXJ2aWNlcycgKTsgIC8vIHB1bGwgc2VydmljZXNcbiAgICAgICBjb25zdCBfcHJvbWlzZSA9IGF3YWl0IHppdGlTZXJ2aWNlLmdldChiaW5kU2VydmljZXNVcmwsIHNlcnZpY2VzX3BhZ2luZywgW10pXG4gICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgY29uc3QgY2hpbGRzID1uZXcgQ2hpbGRyZW4oKVxuICAgICAgICAgY2hpbGRzLm5hbWUgPSByYXdTUG9saWN5LnR5cGUrICctU2VydmljZXMnO1xuICAgICAgICAgY2hpbGRzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgcmVzdWx0LmRhdGEuZm9yRWFjaCggKGlkT2IpID0+IHtcbiAgICAgICAgICAgY29uc3Qgc3AgPSBuZXcgU2VydmljZSgpO1xuICAgICAgICAgICAgc3AuaWQgPSBpZE9iLmlkO1xuICAgICAgICAgICAgc3AubmFtZSA9IGlkT2IubmFtZTtcbiAgICAgICAgICAgIHNwLnR5cGUgPSAnU2VydmljZSc7XG4gICAgICAgICAgICBjaGlsZHMuY2hpbGRyZW4ucHVzaChzcCk7XG4gICAgICAgICB9KTtcbiAgICAgICAgIGNoaWxkcy5uYW1lID0gY2hpbGRzLm5hbWUgKyAnKCcgKyBjaGlsZHMuY2hpbGRyZW4ubGVuZ3RoKycpJztcbiAgICAgICAgIHBvbGljeU5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGNoaWxkcyk7XG4gICAgICAgfSk7XG5cbiAgICAgICB3YWl0X3Byb21pc2VzLnB1c2goX3Byb21pc2UpO1xuXG4gICAgICAgIFByb21pc2UuYWxsKHdhaXRfcHJvbWlzZXMpLnRoZW4oICgpID0+IHtcbiAgICAgICAgICAgcmVzb2x2ZSgncmVzb2x2ZS4nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgfSk7IC8vIGVuZCBteXByb21pc2VcbiAgICAgICAgbmV0d29ya0dyYXBoID0gZDMuaGllcmFyY2h5KG5ldHdvcmtHcmFwaC5kYXRhLCBmdW5jdGlvbiAobmQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZC5jaGlsZHJlbjtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBbbmV0d29ya0dyYXBoLCB0aGlzLnVuaXFJZF07XG4gICAgfVxuXG4gICBhc3luYyBnZXRTZXJ2aWNlc0ZvckFTZXJ2aWNlUG9saWN5KHBvbGljeU9iamVjdCwgeml0aVNlcnZpY2UsIHBhZ2VzaXplPTUwMCkge1xuICAgICAgIGNvbnN0IGNoaWxkcyA9IFtdO1xuICAgICAgIGNvbnN0IHNlcnZpY2VzX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgICBjb25zdCBiaW5kU2VydmljZXNVcmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZSggcG9saWN5T2JqZWN0LCAnc2VydmljZXMnICk7XG4gICAgICAgY29uc3QgX3Byb21pc2UgPSBhd2FpdCB6aXRpU2VydmljZS5nZXQoYmluZFNlcnZpY2VzVXJsLCBzZXJ2aWNlc19wYWdpbmcsIFtdKVxuICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgIHJlc3VsdC5kYXRhLmZvckVhY2goIChpZE9iKSA9PiB7XG4gICAgICAgICAgIGNvbnN0IHNwID0gbmV3IFNlcnZpY2UoKTtcbiAgICAgICAgICAgIHNwLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgc3AudXVpZCA9IGlkT2IuaWQ7XG4gICAgICAgICAgICBzcC5uYW1lID0gaWRPYi5uYW1lO1xuICAgICAgICAgICAgc3AudHlwZSA9ICdTZXJ2aWNlJztcbiAgICAgICAgICAgIGNoaWxkcy5wdXNoKHNwKTtcbiAgICAgICAgIH0pO1xuICAgICAgIH0pO1xuICAgICAgIHJldHVybiBbcG9saWN5T2JqZWN0LnR5cGUsIGNoaWxkc107XG4gICB9XG5cbiAgIGFzeW5jIHByb2Nlc3NFZGdlcm91dGVyc0Zvck5vZGVDbGljayhcbiAgICAgICAgZWRnZXJvdXRlck5vZGUsXG4gICAgICAgIG5ldHdvcmtHcmFwaCxcbiAgICAgICAgZWRnZXJvdXRlcnMsXG4gICAgICAgIHVuaXFJZCxcbiAgICAgICAgeml0aVNlcnZpY2VcbiAgICApXG4gICAge1xuICAgICBjb25zdCBtYWluUHJvbWlzZSA9IGF3YWl0IG5ldyBQcm9taXNlKCBhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHdhaXRfcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgdGhpcy51bmlxSWQgPSB1bmlxSWQ7XG4gICAgICAgIGNvbnN0IGVyID0gZWRnZXJvdXRlcnMuZmluZCgocykgPT4gcy5uYW1lID09PSBlZGdlcm91dGVyTm9kZS5kYXRhLm5hbWUpO1xuICAgICAgICBjb25zdCBlckF0dHJpYnV0ZXMgPSBlci5yb2xlQXR0cmlidXRlcz8gZXIucm9sZUF0dHJpYnV0ZXM6IFtdO1xuXG4gICAgICAgICBlckF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXR0ID0gbmV3IEF0dHJpYnV0ZSgpO1xuICAgICAgICAgICAgYXR0LmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgYXR0Lm5hbWUgPSBhdHRyO1xuICAgICAgICAgICAgYXR0LnR5cGUgPSAnRWRnZSBSb3V0ZXIgQXR0cmlidXRlJztcbiAgICAgICAgICAgIGVkZ2Vyb3V0ZXJOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChhdHQpO1xuICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgcGFnZXNpemUgPSA1MDA7XG4gICAgICAgICAgY29uc3Qgc2VydmljZXNfcGFnaW5nID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuICAgICAgIGNvbnN0IGVycG9saWNpZXNVcmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShlciwgJ2VkZ2Utcm91dGVyLXBvbGljaWVzJyk7XG4gICAgICAgbGV0IGVycG9saWNpZXNGb3JFUiA9IFtdO1xuICAgICAgIGNvbnN0IGVycG9saWNpZXNwcm9taXNlID0gYXdhaXQgeml0aVNlcnZpY2UuZ2V0KGVycG9saWNpZXNVcmwsIHNlcnZpY2VzX3BhZ2luZywgW10pXG4gICAgICAgLnRoZW4oIGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICBlcnBvbGljaWVzRm9yRVIgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICBjb25zdCBwYWdlcyA9IE1hdGguY2VpbChyZXN1bHQubWV0YS5wYWdpbmF0aW9uLnRvdGFsQ291bnQgLyBwYWdlc2l6ZSk7XG4gICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgZm9yIChsZXQgcGFnZSA9IDI7IHBhZ2UgPD0gcGFnZXM7IHBhZ2UrKykge1xuICAgICAgICAgICAgICBzZXJ2aWNlc19wYWdpbmcucGFnZSA9IHBhZ2U7XG4gICAgICAgICAgICAgIGNvbnN0IHRtcF9wcm9taXNlID0gYXdhaXQgeml0aVNlcnZpY2UuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycG9saWNpZXNVcmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXNfcGFnaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdXG4gICAgICAgICAgICAgICAgKSAudGhlbigocGFnZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcGFnZVJlc3VsdC5kYXRhLmZvckVhY2goKHNlcnYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXJwb2xpY2llc0ZvckVSLnB1c2goc2Vydik7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0bXBfcHJvbWlzZSk7XG4gICAgICAgICAgICAgIHdhaXRfcHJvbWlzZXMucHVzaCh0bXBfcHJvbWlzZSk7XG4gICAgICAgICAgIH0gLy8gZW5kIGZvciBsb29wXG4gICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICBjb25zdCBlcnBvbENoaWxkcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICAgIGVycG9sQ2hpbGRzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgIGVycG9saWNpZXNGb3JFUi5mb3JFYWNoKCAocG9sKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9saWN5ID0gbmV3IEVSUG9saWN5KCk7XG4gICAgICAgICAgICAgICAgcG9saWN5LmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgIHBvbGljeS51dWlkID0gcG9sLmlkO1xuICAgICAgICAgICAgICAgIHBvbGljeS5uYW1lID0gcG9sLm5hbWU7XG4gICAgICAgICAgICAgICAgcG9saWN5LnR5cGUgPSAnRWRnZSBSb3V0ZXIgUG9saWN5JztcbiAgICAgICAgICAgICAgICBwb2xpY3kuaXNTeXN0ZW0gPSBwb2wuaXNTeXN0ZW07XG4gICAgICAgICAgICAgICAgcG9saWN5LnNlbWFudGljID0gcG9sLnNlbWFudGljO1xuICAgICAgICAgICAgICAgIHBvbGljeS5yb290Tm9kZSA9ICdObyc7XG4gICAgICAgICAgICAgICAgZXJwb2xDaGlsZHMuY2hpbGRyZW4ucHVzaChwb2xpY3kpO1xuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgZXJwb2xDaGlsZHMubmFtZSA9IFwiRWRnZSBSb3V0ZXIgUG9saWNpZXMoXCIrIGVycG9sQ2hpbGRzLmNoaWxkcmVuLmxlbmd0aCArJyknO1xuICAgICAgICAgICAgICAgZWRnZXJvdXRlck5vZGUuZGF0YS5jaGlsZHJlbi5wdXNoKGVycG9sQ2hpbGRzKTtcbiAgICAgICAgICAgfSk7XG4gICAgICAgfSk7XG4gICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKGVycG9saWNpZXNwcm9taXNlKTtcblxuICAgICAgIFByb21pc2UuYWxsKHdhaXRfcHJvbWlzZXMpLnRoZW4oICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCd0aGlzIGlzIGEgcHJvbWlzZScpO1xuICAgICAgIH0pO1xuICAgICB9KTtcbiAgICAgICAgbmV0d29ya0dyYXBoID0gZDMuaGllcmFyY2h5KG5ldHdvcmtHcmFwaC5kYXRhLCBmdW5jdGlvbiAobmQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZC5jaGlsZHJlbjtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBbbmV0d29ya0dyYXBoLCB0aGlzLnVuaXFJZF07XG4gICB9XG5cbiAgICBzZXJ2aWNlR3JvdXBpbmcoc2VydmljZXNDaGlsZHJlbiwgc2VydmljZXN0cmVlKSB7XG4gICAgICAgIGNvbnN0IHByb3RvY29sUkRQR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgdGhpcy5jcmVhdGVJZCgpLFxuICAgICAgICAgICAgJ1NlcnZpY2VzIFtwcm90b2NvbC1SRFBdJyxcbiAgICAgICAgICAgICdTZXJ2aWNlcyBjcmVhdGVkIGZvciBSRFAgcHJvdG9jb2wnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHByb3RvY29sSFRUUFNHcnAgPSBuZXcgR3JvdXAoXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUlkKCksXG4gICAgICAgICAgICAnU2VydmljZXMgW3Byb3RvY29sLUhUVFBTXScsXG4gICAgICAgICAgICAnU2VydmljZSBjcmVhdGVkIGZvciBIVFRQUyBwcm90b2NvbCdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcHJvdG9jb2xIVFRQR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgdGhpcy5jcmVhdGVJZCgpLFxuICAgICAgICAgICAgJ1NlcnZpY2VzIFtwcm90b2NvbC1IVFRQXScsXG4gICAgICAgICAgICAnU2VydmljZSBjcmVhdGVkIGZvciBIVFRQIHByb3RvY29sJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBwcm90b2NvbEZUUEdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICdTZXJ2aWNlcyBbcHJvdG9jb2wtRlRQXScsXG4gICAgICAgICAgICAnU2VydmljZSBjcmVhdGVkIGZvciBGVFAgcHJvdG9jb2wnXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgYWJjZEdycCA9IG5ldyBHcm91cCh0aGlzLmNyZWF0ZUlkKCksICdTZXJ2aWNlcyBbQS1EXScsICdTZXJ2aWNlIG5hbWUgc3RhcnRzIHdpdGggQSB0byBEJyk7XG4gICAgICAgIGNvbnN0IGVmZ2hHcnAgPSBuZXcgR3JvdXAodGhpcy5jcmVhdGVJZCgpLCAnU2VydmljZXMgW0UtSF0nLCAnU2VydmljZSBuYW1lIHN0YXJ0cyB3aXRoIEUgdG8gSCcpO1xuICAgICAgICBjb25zdCBpamtsR3JwID0gbmV3IEdyb3VwKHRoaXMuY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtJLUxdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBJIHRvIEwnKTtcbiAgICAgICAgY29uc3QgbW5vcEdycCA9IG5ldyBHcm91cCh0aGlzLmNyZWF0ZUlkKCksICdTZXJ2aWNlcyBbTS1QXScsICdTZXJ2aWNlIG5hbWUgc3RhcnRzIHdpdGggTSB0byBQJyk7XG4gICAgICAgIGNvbnN0IHFyc3RHcnAgPSBuZXcgR3JvdXAodGhpcy5jcmVhdGVJZCgpLCAnU2VydmljZXMgW0ctVF0nLCAnU2VydmljZSBuYW1lIHN0YXJ0cyB3aXRoIFEgdG8gVCcpO1xuICAgICAgICBjb25zdCB1dnd4R3JwID0gbmV3IEdyb3VwKHRoaXMuY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtVLVhdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBVIHRvIFgnKTtcbiAgICAgICAgY29uc3QgeXpHcnAgPSBuZXcgR3JvdXAodGhpcy5jcmVhdGVJZCgpLCAnU2VydmljZXMgW1ktWl0nLCAnU2VydmljZSBuYW1lIHN0YXJ0cyB3aXRoIFkgYW5kIFonKTtcbiAgICAgICAgY29uc3Qgb25lVG85R3JwID0gbmV3IEdyb3VwKHRoaXMuY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFsxLTldJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCAwIHRvIDknKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcnZpY2VzdHJlZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VydmljZW9iaiA9IHNlcnZpY2VzdHJlZVtpXTtcbiAgICAgICAgICAgIGNvbnN0IGNoYSA9IHNlcnZpY2VvYmoubmFtZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgaWYgKHNlcnZpY2VvYmoucHJvdG9jb2wgPT09ICdyZHAnKSB7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xSRFBHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VydmljZW9iai5wcm90b2NvbCA9PT0gJ2h0dHBzJykge1xuICAgICAgICAgICAgICAgIHByb3RvY29sSFRUUFNHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VydmljZW9iai5wcm90b2NvbCA9PT0gJ2h0dHAnKSB7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlcnZpY2VvYmoucHJvdG9jb2wgPT09ICdmdHAnKSB7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xGVFBHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAnYScgfHwgY2hhID09PSAnYicgfHwgY2hhID09PSAnYycgfHwgY2hhID09PSAnZCcpIHtcbiAgICAgICAgICAgICAgICBhYmNkR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ2UnIHx8IGNoYSA9PT0gJ2YnIHx8IGNoYSA9PT0gJ2cnIHx8IGNoYSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICAgICAgZWZnaEdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdpJyB8fCBjaGEgPT09ICdqJyB8fCBjaGEgPT09ICdrJyB8fCBjaGEgPT09ICdsJykge1xuICAgICAgICAgICAgICAgIGlqa2xHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAnbScgfHwgY2hhID09PSAnbicgfHwgY2hhID09PSAnbycgfHwgY2hhID09PSAncCcpIHtcbiAgICAgICAgICAgICAgICBtbm9wR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ3EnIHx8IGNoYSA9PT0gJ3InIHx8IGNoYSA9PT0gJ3MnIHx8IGNoYSA9PT0gJ3QnKSB7XG4gICAgICAgICAgICAgICAgcXJzdEdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICd1JyB8fCBjaGEgPT09ICd2JyB8fCBjaGEgPT09ICd3JyB8fCBjaGEgPT09ICd4Jykge1xuICAgICAgICAgICAgICAgIHV2d3hHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAneScgfHwgY2hhID09PSAneicpIHtcbiAgICAgICAgICAgICAgICB5ekdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBjaGEgPT09ICcwJyB8fFxuICAgICAgICAgICAgICAgIGNoYSA9PT0gJzEnIHx8XG4gICAgICAgICAgICAgICAgY2hhID09PSAnMicgfHxcbiAgICAgICAgICAgICAgICBjaGEgPT09ICczJyB8fFxuICAgICAgICAgICAgICAgIGNoYSA9PT0gJzQnIHx8XG4gICAgICAgICAgICAgICAgY2hhID09PSAnNScgfHxcbiAgICAgICAgICAgICAgICBjaGEgPT09ICc2JyB8fFxuICAgICAgICAgICAgICAgIGNoYSA9PT0gJzcnIHx8XG4gICAgICAgICAgICAgICAgY2hhID09PSAnOCcgfHxcbiAgICAgICAgICAgICAgICBjaGEgPT09ICc5J1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb25lVG85R3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gLy8gZW5kIG1haW4gZm9yIGxvb3BcblxuICAgICAgICBpZiAocHJvdG9jb2xSRFBHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcHJvdG9jb2xSRFBHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcm90b2NvbFJEUEdycC5uYW1lID0gcHJvdG9jb2xSRFBHcnAubmFtZSArICcoJyArIHByb3RvY29sUkRQR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChwcm90b2NvbFJEUEdycCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvdG9jb2xIVFRQU0dycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwcm90b2NvbEhUVFBTR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJvdG9jb2xIVFRQU0dycC5uYW1lID0gcHJvdG9jb2xIVFRQU0dycC5uYW1lICsgJygnICsgcHJvdG9jb2xIVFRQU0dycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2gocHJvdG9jb2xIVFRQU0dycCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3RvY29sSFRUUEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwcm90b2NvbEhUVFBHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcm90b2NvbEhUVFBHcnAubmFtZSA9IHByb3RvY29sSFRUUEdycC5uYW1lICsgJygnICsgcHJvdG9jb2xIVFRQR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChwcm90b2NvbEhUVFBHcnApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm90b2NvbEZUUEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwcm90b2NvbEZUUEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByb3RvY29sRlRQR3JwLm5hbWUgPSBwcm90b2NvbEZUUEdycC5uYW1lICsgJygnICsgcHJvdG9jb2xGVFBHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sRlRQR3JwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWJjZEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhYmNkR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYWJjZEdycC5uYW1lID0gYWJjZEdycC5uYW1lICsgJygnICsgYWJjZEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2goYWJjZEdycCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVmZ2hHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZWZnaEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVmZ2hHcnAubmFtZSA9IGVmZ2hHcnAubmFtZSArICcoJyArIGVmZ2hHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGVmZ2hHcnApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpamtsR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlqa2xHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpamtsR3JwLm5hbWUgPSBpamtsR3JwLm5hbWUgKyAnKCcgKyBpamtsR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChpamtsR3JwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW5vcEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBtbm9wR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbW5vcEdycC5uYW1lID0gbW5vcEdycC5uYW1lICsgJygnICsgbW5vcEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2gobW5vcEdycCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHFyc3RHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcXJzdEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHFyc3RHcnAubmFtZSA9IHFyc3RHcnAubmFtZSArICcoJyArIHFyc3RHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHFyc3RHcnApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1dnd4R3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHV2d3hHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB1dnd4R3JwLm5hbWUgPSB1dnd4R3JwLm5hbWUgKyAnKCcgKyB1dnd4R3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaCh1dnd4R3JwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeXpHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgeXpHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB5ekdycC5uYW1lID0geXpHcnAubmFtZSArICcoJyArIHl6R3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaCh5ekdycCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uZVRvOUdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBvbmVUbzlHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvbmVUbzlHcnAubmFtZSA9IG9uZVRvOUdycC5uYW1lICsgJygnICsgb25lVG85R3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChvbmVUbzlHcnApO1xuICAgICAgICB9XG4gICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4ubmFtZSA9IHNlcnZpY2VzQ2hpbGRyZW4ubmFtZSArICcoJyArIHNlcnZpY2VzdHJlZS5sZW5ndGggKyAnKSc7XG4gICAgICAgIHJldHVybiBzZXJ2aWNlc0NoaWxkcmVuO1xuICAgIH1cblxuICAgIGFzeW5jIHByb2Nlc3NFZGdlUm91dGVyUG9saWNpZXNGb3JOb2RlQ2xpY2soXG4gICAgICAgIGVyUG9saWN5Tm9kZSxcbiAgICAgICAgbmV0d29ya0dyYXBoLFxuICAgICAgICBlZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgIHVuaXFJZCxcbiAgICAgICAgeml0aVNlcnZpY2VcbiAgICApIHtcbiAgICAgICBjb25zdCBteVByb21pc2UgPSBhd2FpdCBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgY29uc3Qgd2FpdF9wcm9taXNlcyA9IFtdO1xuICAgICAgICAgIHRoaXMudW5pcUlkID0gdW5pcUlkO1xuICAgICAgICAgIGNvbnN0IHJhd0VSUG9saWN5ID0gZWRnZVJvdXRlclBvbGljaWVzLmZpbmQoKHMpID0+IHMubmFtZSA9PT0gZXJQb2xpY3lOb2RlLmRhdGEubmFtZSk7XG4gICAgICAgICAgY29uc3QgcGFnZXNpemUgPSA1MDA7XG5cbiAgICAgIGNvbnN0IGVyX3VybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKHJhd0VSUG9saWN5LCAnZWRnZS1yb3V0ZXJzJykucmVwbGFjZSgnLi8nLCAnJyk7XG4gICAgICBsZXQgYXNzb2NpYXRlZFJvdXRlcnMgPSBbXTtcbiAgICAgIGNvbnN0IHBhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgIGNvbnN0IGVyQ2hhaWxkcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICBlckNoYWlsZHMubmFtZT0gJ0Fzc29jaWF0ZWQgRWRnZSBSb3V0ZXJzJztcbiAgICAgICAgZXJDaGFpbGRzLnR5cGU9ICdFZGdlIFJvdXRlcnMnO1xuICAgICAgICBlckNoYWlsZHMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICBjb25zdCBhc3NvY2lhdGVkUm91dGVyc1Byb21pc2UgPSAgYXdhaXQgeml0aVNlcnZpY2UuZ2V0KGVyX3VybCwgcGFnaW5nLCBbXSlcbiAgICAgICAgICAgLnRoZW4oIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICByZXN1bHQuZGF0YS5mb3JFYWNoKCAoZXIpID0+IHtcbiAgICAgICAgICAgICAgIGNvbnN0IHRtcCA9IG5ldyBFUm91dGVyKCk7XG4gICAgICAgICAgICAgICAgICAgdG1wLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgICAgIHRtcC5uYW1lID0gZXIubmFtZTtcbiAgICAgICAgICAgICAgICAgICB0bXAudHlwZSA9ICdFZGdlIFJvdXRlcic7XG4gICAgICAgICAgICAgICAgICAgdG1wLnZlcmlmaWVkID0gZXIuaXNWZXJpZmllZD8gJ1llcyc6ICdObyc7XG4gICAgICAgICAgICAgICAgICAgdG1wLm9ubGluZSA9IGVyLmlzT25saW5lPyAnWWVzJzogJ05vJztcbiAgICAgICAgICAgICAgICAgICB0bXAuZGlzYWJsZWQgPSBlci5kaXNhYmxlZD8gJ1llcyc6ICdObyc7XG4gICAgICAgICAgICAgICAgICAgdG1wLnJvb3ROb2RlID0gJ1llcyc7XG4gICAgICAgICAgICAgICAgICAgdG1wLnR1bm5lbGVyRW5hYmxlZCA9IGVyLnR1bm5lbGVyRW5hYmxlZD8gZXIudHVubmVsZXJFbmFibGVkOidObyc7XG4gICAgICAgICAgICAgICAgICAgdG1wLnN5bmNTdGF0dXMgPSBlci5zeW5jU3RhdHVzPyBlci5zeW5jU3RhdHVzOiAnTm8nO1xuICAgICAgICAgICAgICAgICAgIHRtcC5jcmVhdGVkQXQgPSBlci5jcmVhdGVkQXQ7XG4gICAgICAgICAgICAgICAgICAgdG1wLnVwZGF0ZWRBdCA9IGVyLnVwZGF0ZWRBdDtcbiAgICAgICAgICAgICAgICAgICBlckNoYWlsZHMuY2hpbGRyZW4ucHVzaCh0bXApO1xuICAgICAgICAgICAgIH0gKTtcbiAgICAgICAgICAgZXJDaGFpbGRzLm5hbWUgPSBlckNoYWlsZHMubmFtZSArJygnKyBlckNoYWlsZHMuY2hpbGRyZW4ubGVuZ3RoICsnKSc7XG4gICAgICAgICAgIGVyUG9saWN5Tm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goZXJDaGFpbGRzKTtcbiAgICAgIH0pO1xuICAgICAgICAgIHdhaXRfcHJvbWlzZXMucHVzaChhc3NvY2lhdGVkUm91dGVyc1Byb21pc2UpO1xuXG4gICAgICAgICAgY29uc3Qgc2VydmljZXNfcGFnaW5nID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKHJhd0VSUG9saWN5LCAnaWRlbnRpdGllcycpO1xuICAgICAgICAgIGxldCBpZHMgPSBbXTtcbiAgICAgICAgICBjb25zdCBpZHByb21pc2UgPSB6aXRpU2VydmljZS5nZXQodXJsLCBzZXJ2aWNlc19wYWdpbmcsIFtdKVxuICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlkcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwocmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IC8gcGFnZXNpemUpO1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IHBhZ2UgPSAyOyBwYWdlIDw9IHBhZ2VzOyBwYWdlKyspIHtcbiAgICAgICAgICAgICAgc2VydmljZXNfcGFnaW5nLnBhZ2UgPSBwYWdlO1xuICAgICAgICAgICAgICBjb25zdCB0bXBfcHJvbWlzZSA9IHppdGlTZXJ2aWNlLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXNfcGFnaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdXG4gICAgICAgICAgICAgICAgKSAudGhlbigocGFnZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcGFnZVJlc3VsdC5kYXRhLmZvckVhY2goKHNlcnYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWRzLnB1c2goc2Vydik7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0bXBfcHJvbWlzZSk7XG4gICAgICAgICAgICAgIHdhaXRfcHJvbWlzZXMucHVzaCh0bXBfcHJvbWlzZSk7XG4gICAgICAgICAgICB9IC8vIGVuZCBmb3IgbG9vcFxuICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgIGNvbnN0IGlkQ2hpbGRzID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgaWRDaGlsZHMuaWQgPSB0aGlzLmNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgaWRzLmZvckVhY2goIChpZE9iKSA9PiB7XG4gICAgICAgICAgICAgICAgaWRDaGlsZHMuY2hpbGRyZW4ucHVzaCh0aGlzLmNyZWF0ZUlkZW50aXR5KGlkT2IpKTtcbiAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWRDaGlsZHMubmFtZSA9IFwiQWNjZXNzaWJsZSBJZGVudGl0aWVzKFwiKyBpZENoaWxkcy5jaGlsZHJlbi5sZW5ndGggKycpJztcbiAgICAgICAgICAgICAgIGVyUG9saWN5Tm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goaWRDaGlsZHMpO1xuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKGlkcHJvbWlzZSk7XG4gICAgICAgICBQcm9taXNlLmFsbCh3YWl0X3Byb21pc2VzKS50aGVuKCAoKSA9PiB7XG4gICAgICAgICAgICAgcmVzb2x2ZSgndGhpcyBpcyBhIHByb21pc2UnKTtcbiAgICAgICAgIH0gKTtcblxuICAgICAgIH0pO1xuXG4gICAgICAgIG5ldHdvcmtHcmFwaCA9IGQzLmhpZXJhcmNoeShuZXR3b3JrR3JhcGguZGF0YSwgZnVuY3Rpb24gKG5kKSB7XG4gICAgICAgICAgICByZXR1cm4gbmQuY2hpbGRyZW47XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBbbmV0d29ya0dyYXBoLCB0aGlzLnVuaXFJZF07XG4gICAgfSAvLyBlbmRcblxuICBhc3luYyBwcm9jZXNzU2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc0Zvck5vZGVDbGljayhcbiAgICAgICAgc2VydmljZUVyUG9saWN5Tm9kZSxcbiAgICAgICAgbmV0d29ya0dyYXBoLFxuICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzLFxuICAgICAgICB1bmlxSWQsXG4gICAgICAgIHppdGlTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgY29uc3QgbXlQcm9taXNlID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHRoaXMudW5pcUlkID0gdW5pcUlkO1xuICAgICAgICAgIGNvbnN0IHdhaXRfcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICBjb25zdCByYXdTZXJ2aWNlRVJQb2xpY3kgPSBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzLmZpbmQoKHMpID0+IHMubmFtZSA9PT0gc2VydmljZUVyUG9saWN5Tm9kZS5kYXRhLm5hbWUpO1xuICAgICAgICAgIGNvbnN0IHBhZ2VzaXplID0gNTAwO1xuICAgICAgICAgIGNvbnN0IHNlcnZpY2VzX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShyYXdTZXJ2aWNlRVJQb2xpY3ksICdlZGdlLXJvdXRlcnMnKTtcbiAgICAgICAgICBsZXQgcm91dGVycyA9IFtdO1xuICAgICAgICAgIGNvbnN0IGVycHJvbWlzZSA9IHppdGlTZXJ2aWNlLmdldCh1cmwsIHNlcnZpY2VzX3BhZ2luZywgW10pXG4gICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgcm91dGVycyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwocmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IC8gcGFnZXNpemUpO1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IHBhZ2UgPSAyOyBwYWdlIDw9IHBhZ2VzOyBwYWdlKyspIHtcbiAgICAgICAgICAgICAgc2VydmljZXNfcGFnaW5nLnBhZ2UgPSBwYWdlO1xuICAgICAgICAgICAgICBjb25zdCB0bXBfcHJvbWlzZSA9IHppdGlTZXJ2aWNlLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXNfcGFnaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdXG4gICAgICAgICAgICAgICAgKSAudGhlbigocGFnZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcGFnZVJlc3VsdC5kYXRhLmZvckVhY2goKHNlcnYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcm91dGVycy5wdXNoKHNlcnYpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHByb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgICB3YWl0X3Byb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgfSAvLyBlbmQgZm9yIGxvb3BcbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICBjb25zdCBlckNoaWxkcyA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICAgICAgIGVyQ2hpbGRzLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgIHJvdXRlcnMuZm9yRWFjaCggKGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWRPYiA9IG5ldyBFUm91dGVyKCk7XG4gICAgICAgICAgICAgICAgaWRPYi5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBpZE9iLnV1aWQgPSBlci5pZDtcbiAgICAgICAgICAgICAgICBpZE9iLm5hbWUgPSBlci5uYW1lO1xuICAgICAgICAgICAgICAgIGlkT2IudHlwZSA9ICdFZGdlIFJvdXRlcic7XG4gICAgICAgICAgICAgICAgZXJDaGlsZHMuY2hpbGRyZW4ucHVzaChpZE9iKTtcbiAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgIGVyQ2hpbGRzLm5hbWUgPSBcIkVkZ2UgUm91dGVycyhcIisgZXJDaGlsZHMuY2hpbGRyZW4ubGVuZ3RoICsnKSc7XG4gICAgICAgICAgICAgICBzZXJ2aWNlRXJQb2xpY3lOb2RlLmRhdGEuY2hpbGRyZW4ucHVzaChlckNoaWxkcyk7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKGVycHJvbWlzZSk7XG5cbiAgICAgICAgICBjb25zdCBzZXJ2aWNlc19wYWdpbmdCID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuXG4gICAgICAgICAgY29uc3QgdXJsQiA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKHJhd1NlcnZpY2VFUlBvbGljeSwgJ3NlcnZpY2VzJyk7XG4gICAgICAgICAgbGV0IHNlckFycmF5ID0gW107XG4gICAgICAgICAgY29uc3Qgc2VycHJvbWlzZSA9IHppdGlTZXJ2aWNlLmdldCh1cmxCLCBzZXJ2aWNlc19wYWdpbmdCLCBbXSlcbiAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBzZXJBcnJheSA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwocmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IC8gcGFnZXNpemUpO1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXNCID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMjsgcGFnZSA8PSBwYWdlczsgcGFnZSsrKSB7XG4gICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZ0IucGFnZSA9IHBhZ2U7XG4gICAgICAgICAgICAgIGNvbnN0IHRtcF9wcm9taXNlQiA9IHppdGlTZXJ2aWNlLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxCLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZ0IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICAgICApIC50aGVuKChwYWdlUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBwYWdlUmVzdWx0LmRhdGEuZm9yRWFjaCgoc2VydikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXJBcnJheS5wdXNoKHNlcnYpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHByb21pc2VzQi5wdXNoKHRtcF9wcm9taXNlQik7XG4gICAgICAgICAgICAgIHdhaXRfcHJvbWlzZXMucHVzaCh0bXBfcHJvbWlzZUIpO1xuICAgICAgICAgICAgfSAvLyBlbmQgZm9yIGxvb3BcbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzQikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgY29uc3Qgc3JDaGlsZHMgPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgICAgICBzckNoaWxkcy5pZCA9IHRoaXMuY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICBzZXJBcnJheS5mb3JFYWNoKCAoc3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzck9iID0gbmV3IFNlcnZpY2UoKTtcbiAgICAgICAgICAgICAgICBzck9iLmlkID0gdGhpcy5jcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgIHNyT2IudXVpZCA9IHNyLmlkO1xuICAgICAgICAgICAgICAgIHNyT2IubmFtZSA9IHNyLm5hbWU7XG4gICAgICAgICAgICAgICAgc3JPYi50eXBlID0gJ1NlcnZpY2UnO1xuICAgICAgICAgICAgICAgIHNyQ2hpbGRzLmNoaWxkcmVuLnB1c2goc3JPYik7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHNyQ2hpbGRzLm5hbWUgPSBcIlNlcnZpY2VzKFwiKyBzckNoaWxkcy5jaGlsZHJlbi5sZW5ndGggKycpJztcbiAgICAgICAgICAgICAgc2VydmljZUVyUG9saWN5Tm9kZS5kYXRhLmNoaWxkcmVuLnB1c2goc3JDaGlsZHMpO1xuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgd2FpdF9wcm9taXNlcy5wdXNoKHNlcnByb21pc2UpO1xuXG4gICAgICAgICBQcm9taXNlLmFsbCh3YWl0X3Byb21pc2VzKS50aGVuKCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKCdEb25lJyk7XG4gICAgICAgICB9ICk7XG5cbiAgICAgICB9KTtcblxuICAgICAgICBuZXR3b3JrR3JhcGggPSBkMy5oaWVyYXJjaHkobmV0d29ya0dyYXBoLmRhdGEsIGZ1bmN0aW9uIChuZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5kLmNoaWxkcmVuO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFtuZXR3b3JrR3JhcGgsIHRoaXMudW5pcUlkXTtcbiAgICB9IC8vIGVuZFxufSAvLyBlbmQgb2YgY2xhc3NcbiJdfQ==
|