@net7/boilerplate-arianna 5.2.7 → 5.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/data-sources/scheda-image-iiif.ds.mjs +26 -4
- package/esm2022/lib/layouts/scheda-layout/scheda-layout.ds.mjs +4 -2
- package/esm2022/lib/layouts/scheda-layout/scheda-layout.mjs +3 -3
- package/fesm2022/net7-boilerplate-arianna.mjs +29 -6
- package/fesm2022/net7-boilerplate-arianna.mjs.map +1 -1
- package/lib/data-sources/scheda-image-iiif.ds.d.ts +5 -0
- package/package.json +1 -1
|
@@ -1,19 +1,41 @@
|
|
|
1
1
|
import { DataSource } from '@net7/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import Mirador from 'mirador';
|
|
2
4
|
export class AwSchedaImageIiifDS extends DataSource {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
this.instanceLoaded$ = new Subject();
|
|
8
|
+
}
|
|
3
9
|
transform(data) {
|
|
4
10
|
if (!data)
|
|
5
11
|
return null;
|
|
6
12
|
const { libOptions } = this.options;
|
|
7
13
|
const iiifManifestsList = data.items;
|
|
8
|
-
const windows =
|
|
9
|
-
|
|
10
|
-
|
|
14
|
+
const windows = [];
|
|
15
|
+
iiifManifestsList.forEach((manifest) => {
|
|
16
|
+
windows.push({ manifestId: manifest.url });
|
|
17
|
+
if (this.instance) {
|
|
18
|
+
const state = this.instance.store.getState();
|
|
19
|
+
const currentWindowId = state.workspace.windowIds[0];
|
|
20
|
+
this.instance.store.dispatch(Mirador.actions.addWindow({
|
|
21
|
+
manifestId: manifest.url
|
|
22
|
+
}));
|
|
23
|
+
this.instance.store.dispatch(Mirador.actions.removeWindow(currentWindowId));
|
|
24
|
+
}
|
|
25
|
+
});
|
|
11
26
|
return {
|
|
12
27
|
libOptions: {
|
|
13
28
|
...libOptions,
|
|
14
29
|
windows
|
|
15
30
|
},
|
|
31
|
+
_setInstance: (viewer) => {
|
|
32
|
+
this.instance = viewer;
|
|
33
|
+
this.onRender();
|
|
34
|
+
}
|
|
16
35
|
};
|
|
17
36
|
}
|
|
37
|
+
onRender() {
|
|
38
|
+
this.instanceLoaded$.next(this.instance);
|
|
39
|
+
}
|
|
18
40
|
}
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWRhLWltYWdlLWlpaWYuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uNy1ib2lsZXJwbGF0ZS1hcmlhbm5hL3NyYy9saWIvZGF0YS1zb3VyY2VzL3NjaGVkYS1pbWFnZS1paWlmLmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFFOUIsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFVBQVU7SUFBbkQ7O1FBR1Msb0JBQWUsR0FBaUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQXNDdkQsQ0FBQztJQXBDVyxTQUFTLENBQUMsSUFBSTtRQUN0QixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXZCLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3BDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNyQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFbkIsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMzQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdDLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQzFCLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO29CQUN4QixVQUFVLEVBQUUsUUFBUSxDQUFDLEdBQUc7aUJBQ3pCLENBQUMsQ0FDSCxDQUFDO2dCQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQzlFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxVQUFVLEVBQUU7Z0JBQ1YsR0FBRyxVQUFVO2dCQUNiLE9BQU87YUFDUjtZQUNELFlBQVksRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLFFBQVE7UUFDZCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0BuZXQ3L2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IE1pcmFkb3IgZnJvbSAnbWlyYWRvcic7XG5cbmV4cG9ydCBjbGFzcyBBd1NjaGVkYUltYWdlSWlpZkRTIGV4dGVuZHMgRGF0YVNvdXJjZSB7XG4gIHByaXZhdGUgaW5zdGFuY2U7XG5cbiAgcHVibGljIGluc3RhbmNlTG9hZGVkJDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwcm90ZWN0ZWQgdHJhbnNmb3JtKGRhdGEpIHtcbiAgICBpZiAoIWRhdGEpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgeyBsaWJPcHRpb25zIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3QgaWlpZk1hbmlmZXN0c0xpc3QgPSBkYXRhLml0ZW1zO1xuICAgIGNvbnN0IHdpbmRvd3MgPSBbXTtcblxuICAgIGlpaWZNYW5pZmVzdHNMaXN0LmZvckVhY2goKG1hbmlmZXN0KSA9PiB7XG4gICAgICB3aW5kb3dzLnB1c2goeyBtYW5pZmVzdElkOiBtYW5pZmVzdC51cmwgfSk7XG4gICAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuaW5zdGFuY2Uuc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgY29uc3QgY3VycmVudFdpbmRvd0lkID0gc3RhdGUud29ya3NwYWNlLndpbmRvd0lkc1swXTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBNaXJhZG9yLmFjdGlvbnMuYWRkV2luZG93KHtcbiAgICAgICAgICAgIG1hbmlmZXN0SWQ6IG1hbmlmZXN0LnVybFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaW5zdGFuY2Uuc3RvcmUuZGlzcGF0Y2goTWlyYWRvci5hY3Rpb25zLnJlbW92ZVdpbmRvdyhjdXJyZW50V2luZG93SWQpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBsaWJPcHRpb25zOiB7XG4gICAgICAgIC4uLmxpYk9wdGlvbnMsXG4gICAgICAgIHdpbmRvd3NcbiAgICAgIH0sXG4gICAgICBfc2V0SW5zdGFuY2U6ICh2aWV3ZXIpID0+IHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IHZpZXdlcjtcbiAgICAgICAgdGhpcy5vblJlbmRlcigpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG9uUmVuZGVyKCkge1xuICAgIHRoaXMuaW5zdGFuY2VMb2FkZWQkLm5leHQodGhpcy5pbnN0YW5jZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -72,7 +72,9 @@ export class AwSchedaLayoutDS extends LayoutDataSource {
|
|
|
72
72
|
// pdf viewer options
|
|
73
73
|
this.one('aw-scheda-pdf').updateOptions(this.configuration.get(this.configId)['pdf-viewer'] || {});
|
|
74
74
|
// iiif viewer options
|
|
75
|
-
this.
|
|
75
|
+
const imageViewerIiifConfig = this.configuration.get(this.configId)['iiif-viewer'] || {};
|
|
76
|
+
this.hasContextMenu = () => !!imageViewerIiifConfig.libOptions['context-menu'];
|
|
77
|
+
this.one('aw-scheda-image-iiif').updateOptions(imageViewerIiifConfig);
|
|
76
78
|
// check section collapse state
|
|
77
79
|
Object.keys(this.sectionCollapseState).forEach((key) => {
|
|
78
80
|
const storageKey = `${LOCAL_STORAGE_PREFIX}.${key}`;
|
|
@@ -474,4 +476,4 @@ export class AwSchedaLayoutDS extends LayoutDataSource {
|
|
|
474
476
|
}));
|
|
475
477
|
}
|
|
476
478
|
}
|
|
477
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWRhLWxheW91dC5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL243LWJvaWxlcnBsYXRlLWFyaWFubmEvc3JjL2xpYi9sYXlvdXRzL3NjaGVkYS1sYXlvdXQvc2NoZWRhLWxheW91dC5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDOUMsT0FBTyxFQUNMLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFDOUIsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ0wsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQ3hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRCxPQUFPLGNBQWMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLFVBQVUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsTUFBTSxvQkFBb0IsR0FBRyxXQUFXLENBQUM7QUFFekMsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGdCQUFnQjtJQUF0RDs7UUFHVSxlQUFVLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFMUMsMEJBQXFCLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFZdEQsYUFBUSxHQUFHLGVBQWUsQ0FBQztRQVUzQixpQkFBWSxHQUFRLEVBQUUsQ0FBQztRQWdDdkIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFeEIsa0JBQWEsR0FBRyxNQUFNLENBQUM7UUFFdkIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRXpCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FB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LENBQUM7SUFFTyxlQUFlLENBQUMsS0FBSztRQUMzQixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYztRQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDO1lBQzlDLEtBQUs7WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQ3hDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUTtZQUN6RCxXQUFXLEVBQUUsWUFBWTtTQUMxQixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYXlvdXREYXRhU291cmNlIH0gZnJvbSAnQG5ldDcvY29yZSc7XG5pbXBvcnQge1xuICBmcm9tRXZlbnQsIFN1YmplY3QsIG9mLCBtZXJnZSwgT2JzZXJ2YWJsZVxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlbGF5LCBmaXJzdCwgdGFrZVVudGlsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNsb25lLCBnZXQgYXMgX2dldCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBoZWxwZXJzIH0gZnJvbSAnQG5ldDcvYm9pbGVycGxhdGUtY29tbW9uJztcbmltcG9ydCB7IFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgbWV0YWRhdGFIZWxwZXIgZnJvbSAnLi4vLi4vaGVscGVycy9tZXRhZGF0YS5oZWxwZXInO1xuaW1wb3J0IG5vZGVIZWxwZXIgZnJvbSAnLi4vLi4vaGVscGVycy9ub2RlLmhlbHBlcic7XG5pbXBvcnQgeyBnZXRIZWFkVGl0bGUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3RpdGxlLmhlbHBlcic7XG5cbmNvbnN0IExPQ0FMX1NUT1JBR0VfUFJFRklYID0gJ2F3LnNjaGVkYSc7XG5cbmV4cG9ydCBjbGFzcyBBd1NjaGVkYUxheW91dERTIGV4dGVuZHMgTGF5b3V0RGF0YVNvdXJjZSB7XG4gIHN0YXRpYyB0cmVlOiBhbnkgPSBudWxsO1xuXG4gIHByaXZhdGUgZGVzdHJveWVkJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSBzdGlja3lDb250cm9sVHJpZ2dlciQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHByaXZhdGUgY29tbXVuaWNhdGlvbjogYW55O1xuXG4gIHByb3RlY3RlZCBjb25maWd1cmF0aW9uOiBhbnk7XG5cbiAgcHJvdGVjdGVkIG1haW5TdGF0ZTogYW55O1xuXG4gIHByb3RlY3RlZCByb3V0ZXI6IGFueTtcblxuICBwcm90ZWN0ZWQgdGl0bGVTZXJ2aWNlOiBhbnk7XG5cbiAgcHVibGljIGNvbmZpZ0lkID0gJ3NjaGVkYS1sYXlvdXQnO1xuXG4gIHB1YmxpYyBvcHRpb25zOiBhbnk7XG5cbiAgcHJpdmF0ZSBsYXlvdXRDb25maWc7XG5cbiAgcHVibGljIHBhZ2VUaXRsZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBoYXNCcmVhZGNydW1iOiBib29sZWFuO1xuXG4gIHB1YmxpYyBjb250ZW50UGFydHM6IGFueSA9IHt9O1xuXG4gIHB1YmxpYyB0cmVlOiBhbnk7XG5cbiAgcHVibGljIHNpZGViYXJDb2xsYXBzZWQ6IGJvb2xlYW47XG5cbiAgcHVibGljIHJlbGF0ZWRFbnRpdGllc0hlYWRlcjogc3RyaW5nO1xuXG4gIHB1YmxpYyBzaW1pbGFySXRlbXNTZWN0aW9uVGl0bGU6IHN0cmluZztcblxuICBwdWJsaWMgbWV0YWRhdGFTZWN0aW9uVGl0bGU6IHN0cmluZztcblxuICBwdWJsaWMgaGFzTWV0YWRhdGE6IGJvb2xlYW47XG5cbiAgcHVibGljIGhhc1JlbGF0ZWRFbnRpdGllczogYm9vbGVhbjtcblxuICBwdWJsaWMgaGFzU2ltaWxhckl0ZW1zOiBib29sZWFuO1xuXG4gIHB1YmxpYyBoYXNFeHRlbmRlZFRyZWU6IGJvb2xlYW47XG5cbiAgcHVibGljIGhhc0ludGVybmFsU2VhcmNoOiBib29sZWFuO1xuXG4gIHB1YmxpYyBoYXNEaWdpdGFsT2JqZWN0czogYm9vbGVhbjtcblxuICBwdWJsaWMgZGlnaXRhbE9iamVjdHM6IGFueTtcblxuICBwdWJsaWMgY3VycmVudERpZ2l0YWxPYmplY3Q6IGFueTtcblxuICBwdWJsaWMgY3VycmVudERpZ2l0YWxPYmplY3RJbmRleDogbnVtYmVyO1xuXG4gIHB1YmxpYyBpbWFnZVZpZXdlcklzdGFuY2U6IGFueTtcblxuICBwdWJsaWMgc2lkZWJhcklzU3RpY2t5ID0gZmFsc2U7XG5cbiAgcHVibGljIHRyZWVNYXhIZWlnaHQgPSAnMTAwJSc7XG5cbiAgcHVibGljIGNvbnRlbnRJc0xvYWRpbmcgPSBmYWxzZTtcblxuICBwdWJsaWMgY3VycmVudElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgZW1wdHlMYWJlbDogc3RyaW5nO1xuXG4gIC8qKiBTd2l0Y2ggbG9hZGVkLWNvbnRlbnQgYW5kIGxvYWRlZC1lbXB0eSBzdGF0ZXMgKi9cbiAgcHVibGljIGhhc0NvbnRlbnQgPSB0cnVlO1xuXG4gIC8qKiBTdHJpbmcgdG8gcmVuZGVyIGluIHRoZSBsb2FkZWQtZW1wdHkgc3RhdGUgKi9cbiAgcHVibGljIGVtcHR5U3RhdGVTdHJpbmc6IHN0cmluZztcblxuICBwdWJsaWMgZXh0ZXJuYWxVcmxUZXh0OiBzdHJpbmc7XG5cbiAgcHVibGljIGhhc0NvbnRleHRNZW51OiAoKSA9PiBib29sZWFuO1xuXG4gIHB1YmxpYyBleHRlbmRlZFRyZWVQYXJhbXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH0gPSB7fTtcblxuICBwdWJsaWMgaW50ZXJuYWxTZWFyY2hQYXJhbXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH0gPSB7fTtcblxuICBwdWJsaWMgbGFzdFJlc3BvbnNlO1xuXG4gIC8qKiBOYW1lIG9mIHF1ZXJ5IHRoYXQgc2hvdWxkIGJlIHVzZWQgKGNob3NlbiBpbiBjb25maWcpICovXG4gIHByaXZhdGUgZ2V0VHJlZVF1ZXJ5OiAnZ2V0VHJlZScgfCAnZ2V0VHJlZUxpdGUnID0gJ2dldFRyZWUnO1xuXG4gIHB1YmxpYyB0aXRsZU5hdmlnYXRpb246IHtcbiAgICBwcmV2OiB7IGhyZWY6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgfTtcbiAgICBuZXh0OiB7IGhyZWY6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgfTtcbiAgfSA9IG51bGw7XG5cbiAgcHVibGljIHNlY3Rpb25Db2xsYXBzZVN0YXRlID0ge1xuICAgIG1ldGFkYXRhOiBmYWxzZSxcbiAgICAnZXh0ZW5kZWQtdHJlZSc6IGZhbHNlLFxuICAgICdzaW1pbGFyLWl0ZW1zJzogZmFsc2UsXG4gICAgJ3JlbGF0ZWQtZW50aXRpZXMnOiBmYWxzZVxuICB9O1xuXG4gIHB1YmxpYyBkb2N1bWVudFR5cGU6IHtcbiAgICBpY29uOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgfSA9IG51bGw7XG5cbiAgb25Jbml0KHtcbiAgICBjb25maWd1cmF0aW9uLCBtYWluU3RhdGUsIHJvdXRlciwgb3B0aW9ucywgdGl0bGVTZXJ2aWNlLCBjb21tdW5pY2F0aW9uLFxuICB9KSB7XG4gICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgICB0aGlzLmxheW91dENvbmZpZyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQodGhpcy5jb25maWdJZCk7XG4gICAgfVxuICAgIHRoaXMubWFpblN0YXRlID0gbWFpblN0YXRlO1xuICAgIHRoaXMucm91dGVyID0gcm91dGVyO1xuICAgIHRoaXMudGl0bGVTZXJ2aWNlID0gdGl0bGVTZXJ2aWNlO1xuICAgIHRoaXMuY29tbXVuaWNhdGlvbiA9IGNvbW11bmljYXRpb247XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICBpZiAoIXRoaXMuc2lkZWJhckNvbGxhcHNlZCkge1xuICAgICAgdGhpcy5zaWRlYmFyQ29sbGFwc2VkID0gdGhpcy5sYXlvdXRDb25maWcudHJlZS5jb2xsYXBzZWRCeURlZmF1bHQgPz8gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMucmVsYXRlZEVudGl0aWVzSGVhZGVyID0gdGhpcy5sYXlvdXRDb25maWdbJ3JlbGF0ZWQtZW50aXRpZXMnXS50aXRsZTtcbiAgICB0aGlzLnNpbWlsYXJJdGVtc1NlY3Rpb25UaXRsZSA9IHRoaXMubGF5b3V0Q29uZmlnWydyZWxhdGVkLWl0ZW1zJ10udGl0bGU7XG4gICAgdGhpcy5leHRlcm5hbFVybFRleHQgPSB0aGlzLmxheW91dENvbmZpZ1snZXh0ZXJuYWwtdXJsLXRleHQnXTtcbiAgICB0aGlzLm1ldGFkYXRhU2VjdGlvblRpdGxlID0gdGhpcy5nZXRNZXRhZGF0YVNlY3Rpb25UaXRsZSgpO1xuICAgIHRoaXMuaGFzU2ltaWxhckl0ZW1zID0gZmFsc2U7XG4gICAgdGhpcy5vbmUoJ2F3LWNoYXJ0LXRpcHB5JykudXBkYXRlT3B0aW9ucyh7XG4gICAgICBiYXNlUGF0aDogdGhpcy5jb25maWd1cmF0aW9uLmdldCgncGF0aHMnKS5lbnRpdGFCYXNlUGF0aCxcbiAgICB9KTtcbiAgICB0aGlzLmVtcHR5TGFiZWwgPSB0aGlzLmxheW91dENvbmZpZ1snZW1wdHktbGFiZWwnXTtcbiAgICB0aGlzLmVtcHR5U3RhdGVTdHJpbmcgPSB0aGlzLmxheW91dENvbmZpZ1snZW1wdHktaHRtbCddO1xuICAgIHRoaXMub25lKCdhdy10cmVlJykudXBkYXRlT3B0aW9ucyh7IGNvbmZpZzogdGhpcy5jb25maWd1cmF0aW9uLmdldCgnY29uZmlnLWtleXMnKSB9KTtcblxuICAgIC8vIHN3aXRjaCB0aGUgdHJlZSBxdWVyeSB0byB0aGUgc2xpbSB2ZXJzaW9uXG4gICAgaWYgKHRoaXMubGF5b3V0Q29uZmlnPy50cmVlPy5saXRlKSB7XG4gICAgICB0aGlzLmdldFRyZWVRdWVyeSA9ICdnZXRUcmVlTGl0ZSc7XG4gICAgfVxuXG4gICAgdGhpcy5tYWluU3RhdGUudXBkYXRlQ3VzdG9tKCdjdXJyZW50TmF2JywgJ3BhdHJpbW9uaW8nKTtcblxuICAgIC8vIGhlYWQgdGl0bGVcbiAgICB0aGlzLnNldEhlYWRUaXRsZSgpO1xuXG4gICAgLy8gaW1hZ2Ugdmlld2VyIGNvbnRleHQtbWVudSBjaGVja1xuICAgIGNvbnN0IGltYWdlVmlld2VyQ29uZmlnID0gdGhpcy5jb25maWd1cmF0aW9uLmdldCh0aGlzLmNvbmZpZ0lkKVsnaW1hZ2Utdmlld2VyJ10gfHwge307XG4gICAgdGhpcy5oYXNDb250ZXh0TWVudSA9ICgpID0+ICEhaW1hZ2VWaWV3ZXJDb25maWdbJ2NvbnRleHQtbWVudSddO1xuXG4gICAgLy8gcGRmIHZpZXdlciBvcHRpb25zXG4gICAgdGhpcy5vbmUoJ2F3LXNjaGVkYS1wZGYnKS51cGRhdGVPcHRpb25zKHRoaXMuY29uZmlndXJhdGlvbi5nZXQodGhpcy5jb25maWdJZClbJ3BkZi12aWV3ZXInXSB8fCB7fSk7XG5cbiAgICAvLyBpaWlmIHZpZXdlciBvcHRpb25zXG4gICAgdGhpcy5vbmUoJ2F3LXNjaGVkYS1pbWFnZS1paWlmJykudXBkYXRlT3B0aW9ucyh0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KHRoaXMuY29uZmlnSWQpWydpaWlmLXZpZXdlciddIHx8IHt9KTtcblxuICAgIC8vIGNoZWNrIHNlY3Rpb24gY29sbGFwc2Ugc3RhdGVcbiAgICBPYmplY3Qua2V5cyh0aGlzLnNlY3Rpb25Db2xsYXBzZVN0YXRlKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSBgJHtMT0NBTF9TVE9SQUdFX1BSRUZJWH0uJHtrZXl9YDtcbiAgICAgIGNvbnN0IHN0b3JhZ2VWYWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHN0b3JhZ2VLZXkpO1xuICAgICAgdGhpcy5zZWN0aW9uQ29sbGFwc2VTdGF0ZVtrZXldID0gc3RvcmFnZVZhbHVlID8gSlNPTi5wYXJzZShzdG9yYWdlVmFsdWUpIDogZmFsc2U7XG4gICAgfSk7XG5cbiAgICAvLyBzaWRlYmFyIHN0aWNreSBjb250cm9sXG4gICAgdGhpcy5fc2lkZWJhclN0aWNreUNvbnRyb2woKTtcbiAgfVxuXG4gIG9uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICB9XG5cbiAgZ2V0TWV0YWRhdGFTZWN0aW9uVGl0bGUoKSB7XG4gICAgY29uc3QgbGF5b3V0Q29uZmlnID0gdGhpcy5jb25maWd1cmF0aW9uLmdldCh0aGlzLmNvbmZpZ0lkKTtcbiAgICBjb25zdCBtZXRhZGF0YUNvbmZpZyA9IGxheW91dENvbmZpZy5tZXRhZGF0YSB8fCB7fTtcbiAgICByZXR1cm4gbWV0YWRhdGFDb25maWcudGl0bGUgfHwgbnVsbDtcbiAgfVxuXG4gIGdldE5hdmlnYXRpb24oKSB7XG4gICAgaWYgKEF3U2NoZWRhTGF5b3V0RFMudHJlZSkge1xuICAgICAgcmV0dXJuIG9mKEF3U2NoZWRhTGF5b3V0RFMudHJlZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbW11bmljYXRpb24ucmVxdWVzdCQodGhpcy5nZXRUcmVlUXVlcnksIHtcbiAgICAgIG9uRXJyb3I6IChlcnJvcikgPT4gY29uc29sZS5lcnJvcihlcnJvciksXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgb25seUFsOiAhIXRoaXMubGF5b3V0Q29uZmlnWydleHRlbmRlZC10cmVlJ11cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBzZXRUcmVlKHRyZWUpIHtcbiAgICBBd1NjaGVkYUxheW91dERTLnRyZWUgPSB0cmVlO1xuICB9XG5cbiAgZ2V0VHJlZSA9ICgpID0+IEF3U2NoZWRhTGF5b3V0RFMudHJlZTtcblxuICB1cGRhdGVOYXZpZ2F0aW9uKHRleHQpIHtcbiAgICB0aGlzLm9uZSgnYXctc2lkZWJhci1oZWFkZXInKS51cGRhdGUoeyB0ZXh0LCBpc0V4cGFuZGVkOiAhdGhpcy5zaWRlYmFyQ29sbGFwc2VkIH0pO1xuICB9XG5cbiAgbG9hZEl0ZW0oaWQpIHtcbiAgICBjb25zdCBtYXhTaW1pbGFySXRlbXMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KHRoaXMuY29uZmlnSWQpWydyZWxhdGVkLWl0ZW1zJ11bJ21heC1yZWxhdGVkLWl0ZW1zJ107XG4gICAgcmV0dXJuIHRoaXMuY29tbXVuaWNhdGlvbi5yZXF1ZXN0JCgnZ2V0Tm9kZScsIHtcbiAgICAgIG9uRXJyb3I6IChlcnJvcikgPT4gY29uc29sZS5lcnJvcihlcnJvciksXG4gICAgICBwYXJhbXM6IHsgaWQsIG1heFNpbWlsYXJJdGVtcyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb250ZW50IG9mIHRoZSBzZWxlY3RlZCB0cmVlIGl0ZW0gaW4gdGhlIHJpZ2h0IHBvcnRpb24gb2YgdGhlIHZpZXcuXG4gICAqIEBwYXJhbSByZXNwb25zZSBodHRwIHJlc3BvbnNlIGZvciB0aGUgdHJlZSBpdGVtXG4gICAqL1xuICBsb2FkQ29udGVudChyZXNwb25zZSkge1xuICAgIHRoaXMubGFzdFJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAvLyByZXNldFxuICAgICAgdGhpcy5jdXJyZW50RGlnaXRhbE9iamVjdCA9IG51bGw7XG4gICAgICB0aGlzLmN1cnJlbnREaWdpdGFsT2JqZWN0SW5kZXggPSBudWxsO1xuXG4gICAgICBjb25zdCBtZXRhZGF0YUZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKHJlc3BvbnNlKTtcbiAgICAgIHRoaXMuaGFzTWV0YWRhdGEgPSAhIShBcnJheS5pc0FycmF5KG1ldGFkYXRhRmllbGRzKSAmJiBtZXRhZGF0YUZpZWxkcy5sZW5ndGgpO1xuICAgICAgdGhpcy5oYXNTaW1pbGFySXRlbXMgPSAoXG4gICAgICAgICF0aGlzLmxheW91dENvbmZpZ1snZXh0ZW5kZWQtdHJlZSddXG4gICAgICAgICYmIEFycmF5LmlzQXJyYXkocmVzcG9uc2UucmVsYXRlZEl0ZW1zKVxuICAgICAgICAmJiByZXNwb25zZS5yZWxhdGVkSXRlbXMubGVuZ3RoXG4gICAgICApO1xuICAgICAgdGhpcy5oYXNCcmVhZGNydW1iID0gQXJyYXkuaXNBcnJheShyZXNwb25zZS5icmVhZGNydW1icykgJiYgcmVzcG9uc2UuYnJlYWRjcnVtYnMubGVuZ3RoO1xuICAgICAgdGhpcy5oYXNEaWdpdGFsT2JqZWN0cyA9IChcbiAgICAgICAgQXJyYXkuaXNBcnJheShyZXNwb25zZS5kaWdpdGFsT2JqZWN0cylcbiAgICAgICAgJiYgcmVzcG9uc2UuZGlnaXRhbE9iamVjdHMubGVuZ3RoXG4gICAgICApO1xuICAgICAgdGhpcy5oYXNSZWxhdGVkRW50aXRpZXMgPSAoXG4gICAgICAgIEFycmF5LmlzQXJyYXkocmVzcG9uc2UucmVsYXRlZEVudGl0aWVzKVxuICAgICAgICAmJiByZXNwb25zZS5yZWxhdGVkRW50aXRpZXMubGVuZ3RoXG4gICAgICApO1xuICAgICAgdGhpcy5oYXNDb250ZW50ID0gISEoXG4gICAgICAgIHRoaXMuaGFzTWV0YWRhdGFcbiAgICAgICAgfHwgdGhpcy5oYXNTaW1pbGFySXRlbXNcbiAgICAgICAgfHwgdGhpcy5oYXNSZWxhdGVkRW50aXRpZXNcbiAgICAgICAgfHwgdGhpcy5oYXNEaWdpdGFsT2JqZWN0c1xuICAgICAgKTtcblxuICAgICAgdGhpcy5jb250ZW50UGFydHMgPSBbXTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB7IGNvbnRlbnQ6IG51bGwgfTtcblxuICAgICAgaWYgKHJlc3BvbnNlLnRleHQpIHtcbiAgICAgICAgY29udGVudC5jb250ZW50ID0gcmVzcG9uc2UudGV4dDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGVudFBhcnRzLnB1c2goY29udGVudCk7XG5cbiAgICAgIC8vIGRpZ2l0YWwgb2JqZWN0c1xuICAgICAgaWYgKHRoaXMuaGFzRGlnaXRhbE9iamVjdHMpIHtcbiAgICAgICAgcmVzcG9uc2UuZGlnaXRhbE9iamVjdHMgPSB0aGlzLm5vcm1hbGl6ZURpZ2l0YWxPYmplY3RzKHJlc3BvbnNlLmRpZ2l0YWxPYmplY3RzKTtcbiAgICAgICAgLy8gdGhpcy5vbmUoJ2F3LXNjaGVkYS1kaWdpdGFsLW9iamVjdHMnKS51cGRhdGUocmVzcG9uc2UuZGlnaXRhbE9iamVjdHMpO1xuICAgICAgICB0aGlzLm9uZSgnYXctc2NoZWRhLWRyb3Bkb3duJykudXBkYXRlKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5kaWdpdGFsT2JqZWN0cyA9IHJlc3BvbnNlLmRpZ2l0YWxPYmplY3RzO1xuICAgICAgICB0aGlzLmNoYW5nZURpZ2l0YWxPYmplY3QoMCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRpdGxlT2JqID0ge1xuICAgICAgICBpY29uOiByZXNwb25zZS5pY29uLFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgIG1haW46IHtcbiAgICAgICAgICAgIHRleHQ6IHJlc3BvbnNlLnRpdGxlIHx8IHJlc3BvbnNlLmxhYmVsLFxuICAgICAgICAgICAgY2xhc3NlczogJ2JvbGQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHRvb2xzOiByZXNwb25zZS5zdWJUaXRsZSxcbiAgICAgICAgYWN0aW9uczoge30sXG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9uZSgnYXctc2NoZWRhLWlubmVyLXRpdGxlJykudXBkYXRlKHRpdGxlT2JqKTtcbiAgICAgIHRoaXMub25lKCdhdy1zY2hlZGEtbWV0YWRhdGEnKS51cGRhdGUobWV0YWRhdGFGaWVsZHMpO1xuXG4gICAgICAvLyBCcmVhZGNydW1iIHNlY3Rpb25cbiAgICAgIGNvbnN0IGJyZWFkY3J1bWJzID0ge1xuICAgICAgICBpdGVtczogW10sXG4gICAgICB9O1xuXG4gICAgICBpZiAocmVzcG9uc2UuYnJlYWRjcnVtYnMpIHtcbiAgICAgICAgcmVzcG9uc2UuYnJlYWRjcnVtYnMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGJyZWFkY3J1bWJzLml0ZW1zLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IGVsZW1lbnQubGFiZWwsXG4gICAgICAgICAgICBhbmNob3I6IHtcbiAgICAgICAgICAgICAgaHJlZjogW1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ3BhdGhzJykuc2NoZWRhQmFzZVBhdGgsXG4gICAgICAgICAgICAgICAgYCR7ZWxlbWVudC5saW5rfS9gLFxuICAgICAgICAgICAgICAgIGhlbHBlcnMuc2x1Z2lmeShlbGVtZW50LmxhYmVsKSxcbiAgICAgICAgICAgICAgXS5qb2luKCcnKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uZSgnYXctc2NoZWRhLWJyZWFkY3J1bWJzJykudXBkYXRlKGJyZWFkY3J1bWJzKTtcbiAgICAgIH1cblxuICAgICAgLy8gdGl0bGUgcHJldiAvIG5leHQgbmF2aWdhdGlvblxuICAgICAgdGhpcy5sb2FkVGl0bGVOYXZpZ2F0aW9uKCk7XG5cbiAgICAgIC8vIGRvY3VtZW50IHRpdGxlIHR5cGUgKGljb24sIGxhYmVsKVxuICAgICAgdGhpcy5sb2FkRG9jdW1lbnRUeXBlKCk7XG5cbiAgICAgIC8vIHVwZGF0ZSBoZWFkIHRpdGxlXG4gICAgICB0aGlzLnNldEhlYWRUaXRsZShyZXNwb25zZS50aXRsZSB8fCByZXNwb25zZS5sYWJlbCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLnJlbGF0ZWRJdGVtcykge1xuICAgICAgdGhpcy5vbmUoJ2F3LWxpbmtlZC1vYmplY3RzJykudXBkYXRlT3B0aW9ucyh7IGNvbnRleHQ6ICdzY2hlZGEnLCBjb25maWc6IHRoaXMuY29uZmlndXJhdGlvbiB9KTtcbiAgICAgIHRoaXMub25lKCdhdy1saW5rZWQtb2JqZWN0cycpLnVwZGF0ZShyZXNwb25zZSk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZS5yZWxhdGVkRW50aXRpZXMpIHtcbiAgICAgIHJlc3BvbnNlLnJlbGF0ZWRFbnRpdGllcy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHJlc3BvbnNlLnRpdGxlIHx8IHJlc3BvbnNlLmxhYmVsO1xuICAgICAgICBlbC5yZWxhdGlvbk5hbWUgPSBsYWJlbC5sZW5ndGggPiAzMFxuICAgICAgICAgID8gYCR7bGFiZWwuc3Vic3RyKDAsIDMwKX0uLi4gYFxuICAgICAgICAgIDogbGFiZWw7XG4gICAgICB9KTtcbiAgICAgIHRoaXMub25lKCdhdy1yZWxhdGVkLWVudGl0aWVzJykudXBkYXRlT3B0aW9ucyh7XG4gICAgICAgIGNvbnRleHQ6ICdzY2hlZGEnLCBjb25maWc6IHRoaXMuY29uZmlndXJhdGlvbiwgbGlzdDogJ3JlbGF0ZWRFbnRpdGllcycsIHRpdGxlOiByZXNwb25zZS50aXRsZVxuICAgICAgfSk7XG4gICAgICB0aGlzLm9uZSgnYXctcmVsYXRlZC1lbnRpdGllcycpLnVwZGF0ZShyZXNwb25zZS5yZWxhdGVkRW50aXRpZXMpO1xuICAgIH1cblxuICAgIC8vIGNvbnRyb2wgc3RpY2t5XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN0aWNreUNvbnRyb2xUcmlnZ2VyJC5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBsb2FkRXh0ZW5kZWRUcmVlKCkge1xuICAgIGNvbnN0IHBhcmVudFJlc3BvbnNlID0gdGhpcy5sYXN0UmVzcG9uc2U7XG5cbiAgICBpZiAodGhpcy5sYXlvdXRDb25maWdbJ2V4dGVuZGVkLXRyZWUnXSkge1xuICAgICAgY29uc3QgY29uZmlnS2V5cyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ2NvbmZpZy1rZXlzJyk7XG4gICAgICBjb25zdCB3aWRnZXRPcHRpb25zID0gdGhpcy5sYXlvdXRDb25maWdbJ2V4dGVuZGVkLXRyZWUnXTtcbiAgICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgICBpZDogcGFyZW50UmVzcG9uc2UuaWQsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIGxpbWl0OiAxMCxcbiAgICAgICAgcXVlcnk6IG51bGwsXG4gICAgICAgIC4uLnRoaXMuZXh0ZW5kZWRUcmVlUGFyYW1zLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHdpZGdldFBhcmFtcyA9IGNsb25lKHBhcmFtcyk7XG5cbiAgICAgIC8vIG5vcm1hbGl6ZSBwYXJhbXNcbiAgICAgIHBhcmFtcy5vZmZzZXQgPSAocGFyYW1zLnBhZ2UgLSAxKSAqIHBhcmFtcy5saW1pdDtcbiAgICAgIGRlbGV0ZSBwYXJhbXMucGFnZTtcblxuICAgICAgY29uc3QgYmFzZVBhdGggPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdwYXRocycpLnNjaGVkYUJhc2VQYXRoO1xuICAgICAgY29uc3QgcmVxdWVzdCQgPSB0aGlzLmNvbW11bmljYXRpb24ucmVxdWVzdCQoJ2dldE5vZGVDaGlsZHJlbicsIHtcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBvbkVycm9yOiAoZXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgICByZXF1ZXN0JC5zdWJzY3JpYmUoKG5vZGVzUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5oYXNFeHRlbmRlZFRyZWUgPSAoXG4gICAgICAgICAgcGFyYW1zLnF1ZXJ5XG4gICAgICAgICAgfHwgd2lkZ2V0UGFyYW1zLnBhZ2UgPiAxXG4gICAgICAgICAgfHwgISFub2Rlc1Jlc3BvbnNlPy5pdGVtcz8ubGVuZ3RoXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmhhc0V4dGVuZGVkVHJlZSkge1xuICAgICAgICAgIHRoaXMub25lKCdhdy1leHRlbmRlZC10cmVlJykudXBkYXRlT3B0aW9ucyh7XG4gICAgICAgICAgICBiYXNlUGF0aCxcbiAgICAgICAgICAgIGNvbmZpZ0tleXMsXG4gICAgICAgICAgICBwYXJhbXM6IHdpZGdldFBhcmFtcyxcbiAgICAgICAgICAgIC4uLndpZGdldE9wdGlvbnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5vbmUoJ2F3LWV4dGVuZGVkLXRyZWUnKS51cGRhdGUoe1xuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRSZXNwb25zZSxcbiAgICAgICAgICAgIG5vZGVzOiBub2Rlc1Jlc3BvbnNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBmaXggcXVlcnkgaW5wdXQgdXBkYXRlXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUlucHV0OiBIVE1MSW5wdXRFbGVtZW50ID0gZG9jdW1lbnRcbiAgICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5hdy1leHRlbmRlZC10cmVlX19oZWFkZXIgLm43LWlubmVyLXRpdGxlX19zZWFyY2gtYmFyJyk7XG4gICAgICAgICAgICBpZiAocXVlcnlJbnB1dCkge1xuICAgICAgICAgICAgICBxdWVyeUlucHV0LnZhbHVlID0gcGFyYW1zLnF1ZXJ5IHx8ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYXNFeHRlbmRlZFRyZWUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBsb2FkSW50ZXJuYWxTZWFyY2goKSB7XG4gICAgY29uc3QgcGFyZW50UmVzcG9uc2UgPSB0aGlzLmxhc3RSZXNwb25zZTtcblxuICAgIGlmICh0aGlzLmxheW91dENvbmZpZ1snaW50ZXJuYWwtc2VhcmNoJ10pIHtcbiAgICAgIHRoaXMuaGFzSW50ZXJuYWxTZWFyY2ggPSB0cnVlO1xuICAgICAgY29uc3QgY29uZmlnS2V5cyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ2NvbmZpZy1rZXlzJyk7XG4gICAgICBjb25zdCB3aWRnZXRPcHRpb25zID0gdGhpcy5sYXlvdXRDb25maWdbJ2ludGVybmFsLXNlYXJjaCddO1xuICAgICAgY29uc3QgcmF3UGFyYW1zOiBhbnkgPSB7XG4gICAgICAgIGlkOiBwYXJlbnRSZXNwb25zZS5pZCxcbiAgICAgICAgJ3NlYXJjaC1wYWdlJzogMSxcbiAgICAgICAgJ3NlYXJjaC1saW1pdCc6IDEwLFxuICAgICAgICAnc2VhcmNoLXF1ZXJ5JzogbnVsbCxcbiAgICAgICAgYW5jZXN0b3I6IHRydWUsXG4gICAgICAgIC4uLnRoaXMuaW50ZXJuYWxTZWFyY2hQYXJhbXMsXG4gICAgICB9O1xuXG4gICAgICAvLyBzZXQgcGFyYW1zIG9iamVjdCB3aXRob3V0IFwic2VhcmNoLVwiIHByZWZpeFxuICAgICAgY29uc3QgcGFyYW1zOiBQYXJhbXMgPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKHJhd1BhcmFtcykuZm9yRWFjaCgocGFyYW1LZXkpID0+IHtcbiAgICAgICAgcGFyYW1zW3BhcmFtS2V5LnJlcGxhY2UoJ3NlYXJjaC0nLCAnJyldID0gcmF3UGFyYW1zW3BhcmFtS2V5XTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB3aWRnZXRQYXJhbXMgPSBjbG9uZShwYXJhbXMpO1xuXG4gICAgICAvLyBub3JtYWxpemUgcGFyYW1zXG4gICAgICBwYXJhbXMub2Zmc2V0ID0gKHBhcmFtcy5wYWdlIC0gMSkgKiBwYXJhbXMubGltaXQ7XG4gICAgICBkZWxldGUgcGFyYW1zLnBhZ2U7XG5cbiAgICAgIGNvbnN0IGJhc2VQYXRoID0gdGhpcy5jb25maWd1cmF0aW9uLmdldCgncGF0aHMnKS5zY2hlZGFCYXNlUGF0aDtcbiAgICAgIGxldCByZXF1ZXN0JDogT2JzZXJ2YWJsZTxhbnk+ID0gb2YobnVsbCk7XG4gICAgICBpZiAocGFyYW1zLnF1ZXJ5KSB7XG4gICAgICAgIHJlcXVlc3QkID0gdGhpcy5jb21tdW5pY2F0aW9uLnJlcXVlc3QkKCdnZXROb2RlQ2hpbGRyZW4nLCB7XG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgIG9uRXJyb3I6IChlcnJvcikgPT4gY29uc29sZS5lcnJvcihlcnJvciksXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXF1ZXN0JC5zdWJzY3JpYmUoKG5vZGVzUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5vbmUoJ2F3LXNjaGVkYS1zZWFyY2gnKS51cGRhdGVPcHRpb25zKHtcbiAgICAgICAgICBiYXNlUGF0aCxcbiAgICAgICAgICBjb25maWdLZXlzLFxuICAgICAgICAgIHBhcmFtczogd2lkZ2V0UGFyYW1zLFxuICAgICAgICAgIC4uLndpZGdldE9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uZSgnYXctc2NoZWRhLXNlYXJjaCcpLnVwZGF0ZShub2Rlc1Jlc3BvbnNlKTtcblxuICAgICAgICAvLyBmaXggcXVlcnkgaW5wdXQgdXBkYXRlXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHF1ZXJ5SW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgPSBkb2N1bWVudFxuICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5hdy1zY2hlZGEtc2VhcmNoX19pbnB1dCBpbnB1dFt0eXBlPVwidGV4dFwiXScpO1xuICAgICAgICAgIGlmIChxdWVyeUlucHV0KSB7XG4gICAgICAgICAgICBxdWVyeUlucHV0LnZhbHVlID0gcGFyYW1zLnF1ZXJ5IHx8ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYXNJbnRlcm5hbFNlYXJjaCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGxvYWRUaXRsZU5hdmlnYXRpb24oKSB7XG4gICAgLy8gcmVzZXRcbiAgICB0aGlzLnRpdGxlTmF2aWdhdGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBoYXNUaXRsZU5hdiA9IChcbiAgICAgICEhdGhpcy5sYXlvdXRDb25maWdbJ3RpdGxlLW5hdiddPy5lbmFibGVkXG4gICAgICAmJiB0aGlzLmxhc3RSZXNwb25zZS5kb2N1bWVudF90eXBlID09PSAnb2dnZXR0by1jdWx0dXJhbGUnXG4gICAgKTtcbiAgICBpZiAoIWhhc1RpdGxlTmF2KSByZXR1cm47XG5cbiAgICB0aGlzLnRpdGxlTmF2aWdhdGlvbiA9IHsgcHJldjogbnVsbCwgbmV4dDogbnVsbCB9O1xuICAgIGNvbnN0IGJhc2VQYXRoID0gdGhpcy5jb25maWd1cmF0aW9uLmdldCgncGF0aHMnKS5zY2hlZGFCYXNlUGF0aDtcbiAgICBbJ3ByZXYnLCAnbmV4dCddLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMubGFzdFJlc3BvbnNlW2tleV07XG4gICAgICB0aGlzLnRpdGxlTmF2aWdhdGlvbltrZXldID0gaXRlbVxuICAgICAgICA/IHtcbiAgICAgICAgICBocmVmOiBgJHtiYXNlUGF0aH0vJHtpdGVtLmlkfS8ke2hlbHBlcnMuc2x1Z2lmeShpdGVtLmxhYmVsKX1gLFxuICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxuICAgICAgICB9IDogbnVsbDtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWREb2N1bWVudFR5cGUoKSB7XG4gICAgY29uc3QgY29uZmlnS2V5cyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ2NvbmZpZy1rZXlzJyk7XG4gICAgY29uc3QgeyBkb2N1bWVudF90eXBlOiB0eXBlIH0gPSB0aGlzLmxhc3RSZXNwb25zZTtcbiAgICBjb25zdCBpY29uID0gbm9kZUhlbHBlci5nZXROb2RlSWNvbihjb25maWdLZXlzLCB0aGlzLmxhc3RSZXNwb25zZSk7XG4gICAgaWYgKGNvbmZpZ0tleXNbdHlwZV0pIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRUeXBlID0ge1xuICAgICAgICBpY29uLFxuICAgICAgICBsYWJlbDogY29uZmlnS2V5c1t0eXBlXVsnc2luZ3VsYXItbGFiZWwnXVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb2N1bWVudFR5cGUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgYmV0d2VlbiB0aGUgdHJlZSdzIGNvbGxhcHNlZCBvciBleHBhbmRlZCBzdGF0ZS5cbiAgICovXG4gIGNvbGxhcHNlU2lkZWJhcigpIHtcbiAgICAvLyBvdmVyd3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gdG8gcHJldmVudCB1bndhbnRlZCBjaGFuZ2VzIHRvIHRoZSB0cmVlIHN0YXRlLlxuICAgIHRoaXMubGF5b3V0Q29uZmlnLnRyZWUuY29sbGFwc2VkQnlEZWZhdWx0ID0gIXRoaXMubGF5b3V0Q29uZmlnLnRyZWUuY29sbGFwc2VkQnlEZWZhdWx0O1xuICAgIHRoaXMuc2lkZWJhckNvbGxhcHNlZCA9ICF0aGlzLnNpZGViYXJDb2xsYXBzZWQ7XG4gICAgdGhpcy5nZXRXaWRnZXREYXRhU291cmNlKCdhdy1zaWRlYmFyLWhlYWRlcicpLnRvZ2dsZVNpZGViYXIoKTtcbiAgfVxuXG4gIG9uU2VjdGlvbkNvbGxhcHNlKGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlY3Rpb25Db2xsYXBzZVN0YXRlW2lkXSA9ICF0aGlzLnNlY3Rpb25Db2xsYXBzZVN0YXRlW2lkXTtcblxuICAgIC8vIHVwZGF0ZSBzdG9yYWdlXG4gICAgY29uc3Qgc3RvcmFnZUtleSA9IGAke0xPQ0FMX1NUT1JBR0VfUFJFRklYfS4ke2lkfWA7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oc3RvcmFnZUtleSwgdGhpcy5zZWN0aW9uQ29sbGFwc2VTdGF0ZVtpZF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2lkZWJhclN0aWNreUNvbnRyb2woKSB7XG4gICAgLy8gbm8gc3RpY2t5IGZvciBJbnRlcm5ldCBFeHBsb3JlclxuICAgIGlmIChoZWxwZXJzLmJyb3dzZXJJc0lFKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc291cmNlJCA9IGZyb21FdmVudCh3aW5kb3csICdzY3JvbGwnKTtcblxuICAgIG1lcmdlKHNvdXJjZSQsIHRoaXMuc3RpY2t5Q29udHJvbFRyaWdnZXIkKS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3Qgd2luZG93VG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgY29uc3Qgd2luZG93Qm90dG9tID0gd2luZG93LnNjcm9sbFkgKyB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc3RpY2t5LXBhcmVudCcpWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgY29uc3Qgd3JhcHBlclRvcCA9IHdyYXBwZXIub2Zmc2V0VG9wO1xuICAgICAgY29uc3Qgd3JhcHBlckJvdHRvbSA9IHdyYXBwZXJUb3AgKyB3cmFwcGVyLmNsaWVudEhlaWdodDtcblxuICAgICAgdGhpcy5zaWRlYmFySXNTdGlja3kgPSB3cmFwcGVyVG9wIDw9IHdpbmRvd1RvcDtcblxuICAgICAgLy8gdHJlZSBoZWlnaHQgY29udHJvbFxuICAgICAgaWYgKHRoaXMuc2lkZWJhcklzU3RpY2t5ICYmIHdpbmRvd0JvdHRvbSA8IHdyYXBwZXJCb3R0b20pIHtcbiAgICAgICAgdGhpcy50cmVlTWF4SGVpZ2h0ID0gYCR7d2luZG93Qm90dG9tIC0gd2luZG93VG9wIC0gNTB9cHhgO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnNpZGViYXJJc1N0aWNreSAmJiB3aW5kb3dCb3R0b20gPj0gd3JhcHBlckJvdHRvbSkge1xuICAgICAgICB0aGlzLnRyZWVNYXhIZWlnaHQgPSBgJHt3cmFwcGVyQm90dG9tIC0gd2luZG93VG9wIC0gNTB9cHhgO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3dCb3R0b20gPCB3cmFwcGVyQm90dG9tKSB7XG4gICAgICAgIHRoaXMudHJlZU1heEhlaWdodCA9IGAke3dpbmRvd0JvdHRvbSAtIHdyYXBwZXJUb3AgLSA1MH1weGA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRyZWVNYXhIZWlnaHQgPSBgJHt3cmFwcGVyQm90dG9tIC0gd3JhcHBlclRvcCAtIDUwfXB4YDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWVsZHMocmVzcG9uc2UpIHtcbiAgICBjb25zdCB7XG4gICAgICBmaWVsZHMsXG4gICAgICBkb2N1bWVudF90eXBlOiBkdCxcbiAgICAgIGRvY3VtZW50X2NsYXNzaWZpY2F0aW9uOiBkY1xuICAgIH0gPSByZXNwb25zZTtcbiAgICBjb25zdCBwYXRocyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ3BhdGhzJyk7XG4gICAgY29uc3QgbGFiZWxzID0gdGhpcy5jb25maWd1cmF0aW9uLmdldCgnbGFiZWxzJyk7XG4gICAgY29uc3QgZGNTZWdtZW50cyA9IHR5cGVvZiBkYyA9PT0gJ3N0cmluZycgPyBkYy5zcGxpdCgnLicpIDogW107XG4gICAgY29uc3QgZGNMYXN0U2VnbWVudCA9IGRjU2VnbWVudHNbZGNTZWdtZW50cy5sZW5ndGggLSAxXTtcbiAgICBsZXQgbWV0YWRhdGFUb1Nob3cgPSBfZ2V0KHRoaXMuY29uZmlndXJhdGlvbi5nZXQodGhpcy5jb25maWdJZCksICdtZXRhZGF0YS10by1zaG93Jywge30pO1xuICAgIG1ldGFkYXRhVG9TaG93ID0gbWV0YWRhdGFUb1Nob3dbZGNMYXN0U2VnbWVudF0gfHwgbWV0YWRhdGFUb1Nob3dbZHRdIHx8IFtdO1xuXG4gICAgcmV0dXJuIG1ldGFkYXRhSGVscGVyLm5vcm1hbGl6ZSh7XG4gICAgICBmaWVsZHMsXG4gICAgICBwYXRocyxcbiAgICAgIGxhYmVscyxcbiAgICAgIG1ldGFkYXRhVG9TaG93LFxuICAgICAgdHlwZTogZHRcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VEaWdpdGFsT2JqZWN0KHBheWxvYWQpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50RGlnaXRhbE9iamVjdEluZGV4ICE9PSBwYXlsb2FkKSB7XG4gICAgICAvLyBsaW5rIGNoZWNrXG4gICAgICBpZiAodGhpcy5kaWdpdGFsT2JqZWN0c1twYXlsb2FkXS50eXBlID09PSAnZXh0ZXJuYWwnICYmIHRoaXMuY3VycmVudERpZ2l0YWxPYmplY3QpIHtcbiAgICAgICAgd2luZG93Lm9wZW4odGhpcy5kaWdpdGFsT2JqZWN0c1twYXlsb2FkXS51cmwsICdfYmxhbmsnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFsd2F5cyByZXNldCBpbWFnZSB2aWV3ZXJcbiAgICAgICAgY29uc3Qgc2NoZWRhSW1hZ2VEUyA9IHRoaXMuZ2V0V2lkZ2V0RGF0YVNvdXJjZSgnYXctc2NoZWRhLWltYWdlJyk7XG4gICAgICAgIHNjaGVkYUltYWdlRFMucmVzZXQoKTtcblxuICAgICAgICB0aGlzLmN1cnJlbnREaWdpdGFsT2JqZWN0SW5kZXggPSBwYXlsb2FkO1xuICAgICAgICB0aGlzLmN1cnJlbnREaWdpdGFsT2JqZWN0ID0gdGhpcy5kaWdpdGFsT2JqZWN0c1twYXlsb2FkXTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudERpZ2l0YWxPYmplY3QudHlwZSA9PT0gJ2ltYWdlcy1paWlmJykge1xuICAgICAgICAgIHRoaXMub25lKCdhdy1zY2hlZGEtaW1hZ2UtaWlpZicpLnVwZGF0ZSh0aGlzLmN1cnJlbnREaWdpdGFsT2JqZWN0KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnREaWdpdGFsT2JqZWN0LnR5cGUuaW5jbHVkZXMoJ2ltYWdlcycpKSB7XG4gICAgICAgICAgaWYgKHNjaGVkYUltYWdlRFMuaGFzSW5zdGFuY2UoKSkge1xuICAgICAgICAgICAgc2NoZWRhSW1hZ2VEUy51cGRhdGVJbWFnZXModGhpcy5jdXJyZW50RGlnaXRhbE9iamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25lKCdhdy1zY2hlZGEtaW1hZ2UnKS51cGRhdGUodGhpcy5jdXJyZW50RGlnaXRhbE9iamVjdCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaW1hZ2Ugdmlld2VyIG5hdmlnYXRvclxuICAgICAgICAgIGNvbnN0IG5hdmlnYXRvckNvbmZpZyA9IHRoaXMubGF5b3V0Q29uZmlnWydpbWFnZS12aWV3ZXItbmF2J107XG4gICAgICAgICAgaWYgKG5hdmlnYXRvckNvbmZpZz8uZW5hYmxlZCkge1xuICAgICAgICAgICAgc2NoZWRhSW1hZ2VEUy5pbnN0YW5jZUxvYWRlZCQucGlwZShcbiAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgZGVsYXkoMTAwKSAvLyB3YWl0aW5nIGZvciB2aWV3ZXIgaW5zdGFuY2UgdG8gdXBkYXRlXG4gICAgICAgICAgICApLnN1YnNjcmliZSgodmlld2VyKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMub25lKCdhdy1zY2hlZGEtaW1hZ2UtbmF2aWdhdG9yJykudXBkYXRlT3B0aW9ucyhuYXZpZ2F0b3JDb25maWcpO1xuICAgICAgICAgICAgICB0aGlzLm9uZSgnYXctc2NoZWRhLWltYWdlLW5hdmlnYXRvcicpLnVwZGF0ZSh2aWV3ZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudERpZ2l0YWxPYmplY3QudHlwZSA9PT0gJ3BkZicpIHtcbiAgICAgICAgICB0aGlzLm9uZSgnYXctc2NoZWRhLXBkZicpLnVwZGF0ZSh0aGlzLmN1cnJlbnREaWdpdGFsT2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplRGlnaXRhbE9iamVjdHMoZGlnaXRhbE9iamVjdHMpIHtcbiAgICByZXR1cm4gZGlnaXRhbE9iamVjdHMubWFwKCgkZG8pID0+IHtcbiAgICAgIGlmICgkZG8udHlwZS5pbmNsdWRlcygnaW1hZ2VzJykpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDogJ3NjaGVkYS1sYXlvdXQtdmlld2VyJyxcbiAgICAgICAgICB0eXBlOiAkZG8udHlwZSxcbiAgICAgICAgICBsYWJlbDogJGRvLmxhYmVsLFxuICAgICAgICAgIGl0ZW1zOiAkZG8uaXRlbXMubWFwKCh7IHVybCwgaWlpZkltYWdlcyB9KSA9PiAoe1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgaWlpZkltYWdlcyxcbiAgICAgICAgICAgIHR5cGU6ICRkby50eXBlLFxuICAgICAgICAgIH0pKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuICRkbztcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX25vcm1hbGl6ZUl0ZW1zKGl0ZW1zKSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoc2luZ2xlSXRlbSkgPT4gKHsgaXRlbTogeyAuLi5zaW5nbGVJdGVtIH0gfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRIZWFkVGl0bGUobGFiZWw/OiBzdHJpbmcpIHtcbiAgICB0aGlzLm1haW5TdGF0ZS51cGRhdGUoJ2hlYWRUaXRsZScsIGdldEhlYWRUaXRsZSh7XG4gICAgICBsYWJlbCxcbiAgICAgIG5hbWU6IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ2N1c3RvbWVyJyksXG4gICAgICBwYWdlTmFtZTogdGhpcy5jb25maWd1cmF0aW9uLmdldCh0aGlzLmNvbmZpZ0lkKT8ucGFnZU5hbWUsXG4gICAgICBwYWdlRGVmYXVsdDogJ1BhdHJpbW9uaW8nLFxuICAgIH0pKTtcbiAgfVxufVxuIl19
|
|
479
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWRhLWxheW91dC5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL243LWJvaWxlcnBsYXRlLWFyaWFubmEvc3JjL2xpYi9sYXlvdXRzL3NjaGVkYS1sYXlvdXQvc2NoZWRhLWxheW91dC5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDOUMsT0FBTyxFQUNMLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFDOUIsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ0wsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQ3hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRCxPQUFPLGNBQWMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLFVBQVUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsTUFBTSxvQkFBb0IsR0FBRyxXQUFXLENBQUM7QUFFekMsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGdCQUFnQjtJQUF0RDs7UUFHVSxlQUFVLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFMUMsMEJBQXFCLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFZdEQsYUFBUSxHQUFHLGVBQWUsQ0FBQztRQVUzQixpQkFBWSxHQUFRLEVBQUUsQ0FBQztRQWdDdkIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFeEIsa0JBQWEsR0FBRyxNQUFNLENBQUM7UUFFdkIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRXpCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FB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d0JBQ0gsVUFBVTt3QkFDVixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7cUJBQ2YsQ0FBQyxDQUFDO2lCQUNKLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBSztRQUMzQixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYztRQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDO1lBQzlDLEtBQUs7WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQ3hDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUTtZQUN6RCxXQUFXLEVBQUUsWUFBWTtTQUMxQixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYXlvdXREYXRhU291cmNlIH0gZnJvbSAnQG5ldDcvY29yZSc7XG5pbXBvcnQge1xuICBmcm9tRXZlbnQsIFN1YmplY3QsIG9mLCBtZXJnZSwgT2JzZXJ2YWJsZVxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlbGF5LCBmaXJzdCwgdGFrZVVudGlsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNsb25lLCBnZXQgYXMgX2dldCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBoZWxwZXJzIH0gZnJvbSAnQG5ldDcvYm9pbGVycGxhdGUtY29tbW9uJztcbmltcG9ydCB7IFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgbWV0YWRhdGFIZWxwZXIgZnJvbSAnLi4vLi4vaGVscGVycy9tZXRhZGF0YS5oZWxwZXInO1xuaW1wb3J0IG5vZGVIZWxwZXIgZnJvbSAnLi4vLi4vaGVscGVycy9ub2RlLmhlbHBlcic7XG5pbXBvcnQgeyBnZXRIZWFkVGl0bGUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3RpdGxlLmhlbHBlcic7XG5cbmNvbnN0IExPQ0FMX1NUT1JBR0VfUFJFRklYID0gJ2F3LnNjaGVkYSc7XG5cbmV4cG9ydCBjbGFzcyBBd1NjaGVkYUxheW91dERTIGV4dGVuZHMgTGF5b3V0RGF0YVNvdXJjZSB7XG4gIHN0YXRpYyB0cmVlOiBhbnkgPSBudWxsO1xuXG4gIHByaXZhdGUgZGVzdHJveWVkJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSBzdGlja3lDb250cm9sVHJpZ2dlciQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHByaXZhdGUgY29tbXVuaWNhdGlvbjogYW55O1xuXG4gIHByb3RlY3RlZCBjb25maWd1cmF0aW9uOiBhbnk7XG5cbiAgcHJvdGVjdGVkIG1haW5TdGF0ZTogYW55O1xuXG4gIHByb3RlY3RlZCByb3V0ZXI6IGFueTtcblxuICBwcm90ZWN0ZWQgdGl0bGVTZXJ2aWNlOiBhbnk7XG5cbiAgcHVibGljIGNvbmZpZ0lkID0gJ3NjaGVkYS1sYXlvdXQnO1xuXG4gIHB1YmxpYyBvcHRpb25zOiBhbnk7XG5cbiAgcHJpdmF0ZSBsYXlvdXRDb25maWc7XG5cbiAgcHVibGljIHBhZ2VUaXRsZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBoYXNCcmVhZGNydW1iOiBib29sZWFuO1xuXG4gIHB1YmxpYyBjb250ZW50UGFydHM6IGFueSA9IHt9O1xuXG4gIHB1YmxpYyB0cmVlOiBhbnk7XG5cbiAgcHVibGljIHNpZGViYXJDb2xsYXBzZWQ6IGJvb2xlYW47XG5cbiAgcHVibGljIHJlbGF0ZWRFbnRpdGllc0hlYWRlcjogc3RyaW5nO1xuXG4gIHB1YmxpYyBzaW1pbGFySXRlbXNTZWN0aW9uVGl0bGU6IHN0cmluZztcblxuICBwdWJsaWMgbWV0YWRhdGFTZWN0aW9uVGl0bGU6IHN0cmluZztcblxuICBwdWJsaWMgaGFzTWV0YWRhdGE6IGJvb2xlYW47XG5cbiAgcHVibGljIGhhc1JlbGF0ZWRFbnRpdGllczogYm9vbGVhbjtcblxuICBwdWJsaWMgaGFzU2ltaWxhckl0ZW1zOiBib29sZWFuO1xuXG4gIHB1YmxpYyBoYXNFeHRlbmRlZFRyZWU6IGJvb2xlYW47XG5cbiAgcHVibGljIGhhc0ludGVybmFsU2VhcmNoOiBib29sZWFuO1xuXG4gIHB1YmxpYyBoYXNEaWdpdGFsT2JqZWN0czogYm9vbGVhbjtcblxuICBwdWJsaWMgZGlnaXRhbE9iamVjdHM6IGFueTtcblxuICBwdWJsaWMgY3VycmVudERpZ2l0YWxPYmplY3Q6IGFueTtcblxuICBwdWJsaWMgY3VycmVudERpZ2l0YWxPYmplY3RJbmRleDogbnVtYmVyO1xuXG4gIHB1YmxpYyBpbWFnZVZpZXdlcklzdGFuY2U6IGFueTtcblxuICBwdWJsaWMgc2lkZWJhcklzU3RpY2t5ID0gZmFsc2U7XG5cbiAgcHVibGljIHRyZWVNYXhIZWlnaHQgPSAnMTAwJSc7XG5cbiAgcHVibGljIGNvbnRlbnRJc0xvYWRpbmcgPSBmYWxzZTtcblxuICBwdWJsaWMgY3VycmVudElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgZW1wdHlMYWJlbDogc3RyaW5nO1xuXG4gIC8qKiBTd2l0Y2ggbG9hZGVkLWNvbnRlbnQgYW5kIGxvYWRlZC1lbXB0eSBzdGF0ZXMgKi9cbiAgcHVibGljIGhhc0NvbnRlbnQgPSB0cnVlO1xuXG4gIC8qKiBTdHJpbmcgdG8gcmVuZGVyIGluIHRoZSBsb2FkZWQtZW1wdHkgc3RhdGUgKi9cbiAgcHVibGljIGVtcHR5U3RhdGVTdHJpbmc6IHN0cmluZztcblxuICBwdWJsaWMgZXh0ZXJuYWxVcmxUZXh0OiBzdHJpbmc7XG5cbiAgcHVibGljIGhhc0NvbnRleHRNZW51OiAoKSA9PiBib29sZWFuO1xuXG4gIHB1YmxpYyBleHRlbmRlZFRyZWVQYXJhbXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH0gPSB7fTtcblxuICBwdWJsaWMgaW50ZXJuYWxTZWFyY2hQYXJhbXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH0gPSB7fTtcblxuICBwdWJsaWMgbGFzdFJlc3BvbnNlO1xuXG4gIC8qKiBOYW1lIG9mIHF1ZXJ5IHRoYXQgc2hvdWxkIGJlIHVzZWQgKGNob3NlbiBpbiBjb25maWcpICovXG4gIHByaXZhdGUgZ2V0VHJlZVF1ZXJ5OiAnZ2V0VHJlZScgfCAnZ2V0VHJlZUxpdGUnID0gJ2dldFRyZWUnO1xuXG4gIHB1YmxpYyB0aXRsZU5hdmlnYXRpb246IHtcbiAgICBwcmV2OiB7IGhyZWY6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgfTtcbiAgICBuZXh0OiB7IGhyZWY6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgfTtcbiAgfSA9IG51bGw7XG5cbiAgcHVibGljIHNlY3Rpb25Db2xsYXBzZVN0YXRlID0ge1xuICAgIG1ldGFkYXRhOiBmYWxzZSxcbiAgICAnZXh0ZW5kZWQtdHJlZSc6IGZhbHNlLFxuICAgICdzaW1pbGFyLWl0ZW1zJzogZmFsc2UsXG4gICAgJ3JlbGF0ZWQtZW50aXRpZXMnOiBmYWxzZVxuICB9O1xuXG4gIHB1YmxpYyBkb2N1bWVudFR5cGU6IHtcbiAgICBpY29uOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgfSA9IG51bGw7XG5cbiAgb25Jbml0KHtcbiAgICBjb25maWd1cmF0aW9uLCBtYWluU3RhdGUsIHJvdXRlciwgb3B0aW9ucywgdGl0bGVTZXJ2aWNlLCBjb21tdW5pY2F0aW9uLFxuICB9KSB7XG4gICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgICB0aGlzLmxheW91dENvbmZpZyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQodGhpcy5jb25maWdJZCk7XG4gICAgfVxuICAgIHRoaXMubWFpblN0YXRlID0gbWFpblN0YXRlO1xuICAgIHRoaXMucm91dGVyID0gcm91dGVyO1xuICAgIHRoaXMudGl0bGVTZXJ2aWNlID0gdGl0bGVTZXJ2aWNlO1xuICAgIHRoaXMuY29tbXVuaWNhdGlvbiA9IGNvbW11bmljYXRpb247XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICBpZiAoIXRoaXMuc2lkZWJhckNvbGxhcHNlZCkge1xuICAgICAgdGhpcy5zaWRlYmFyQ29sbGFwc2VkID0gdGhpcy5sYXlvdXRDb25maWcudHJlZS5jb2xsYXBzZWRCeURlZmF1bHQgPz8gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMucmVsYXRlZEVudGl0aWVzSGVhZGVyID0gdGhpcy5sYXlvdXRDb25maWdbJ3JlbGF0ZWQtZW50aXRpZXMnXS50aXRsZTtcbiAgICB0aGlzLnNpbWlsYXJJdGVtc1NlY3Rpb25UaXRsZSA9IHRoaXMubGF5b3V0Q29uZmlnWydyZWxhdGVkLWl0ZW1zJ10udGl0bGU7XG4gICAgdGhpcy5leHRlcm5hbFVybFRleHQgPSB0aGlzLmxheW91dENvbmZpZ1snZXh0ZXJuYWwtdXJsLXRleHQnXTtcbiAgICB0aGlzLm1ldGFkYXRhU2VjdGlvblRpdGxlID0gdGhpcy5nZXRNZXRhZGF0YVNlY3Rpb25UaXRsZSgpO1xuICAgIHRoaXMuaGFzU2ltaWxhckl0ZW1zID0gZmFsc2U7XG4gICAgdGhpcy5vbmUoJ2F3LWNoYXJ0LXRpcHB5JykudXBkYXRlT3B0aW9ucyh7XG4gICAgICBiYXNlUGF0aDogdGhpcy5jb25maWd1cmF0aW9uLmdldCgncGF0aHMnKS5lbnRpdGFCYXNlUGF0aCxcbiAgICB9KTtcbiAgICB0aGlzLmVtcHR5TGFiZWwgPSB0aGlzLmxheW91dENvbmZpZ1snZW1wdHktbGFiZWwnXTtcbiAgICB0aGlzLmVtcHR5U3RhdGVTdHJpbmcgPSB0aGlzLmxheW91dENvbmZpZ1snZW1wdHktaHRtbCddO1xuICAgIHRoaXMub25lKCdhdy10cmVlJykudXBkYXRlT3B0aW9ucyh7IGNvbmZpZzogdGhpcy5jb25maWd1cmF0aW9uLmdldCgnY29uZmlnLWtleXMnKSB9KTtcblxuICAgIC8vIHN3aXRjaCB0aGUgdHJlZSBxdWVyeSB0byB0aGUgc2xpbSB2ZXJzaW9uXG4gICAgaWYgKHRoaXMubGF5b3V0Q29uZmlnPy50cmVlPy5saXRlKSB7XG4gICAgICB0aGlzLmdldFRyZWVRdWVyeSA9ICdnZXRUcmVlTGl0ZSc7XG4gICAgfVxuXG4gICAgdGhpcy5tYWluU3RhdGUudXBkYXRlQ3VzdG9tKCdjdXJyZW50TmF2JywgJ3BhdHJpbW9uaW8nKTtcblxuICAgIC8vIGhlYWQgdGl0bGVcbiAgICB0aGlzLnNldEhlYWRUaXRsZSgpO1xuXG4gICAgLy8gaW1hZ2Ugdmlld2VyIGNvbnRleHQtbWVudSBjaGVja1xuICAgIGNvbnN0IGltYWdlVmlld2VyQ29uZmlnID0gdGhpcy5jb25maWd1cmF0aW9uLmdldCh0aGlzLmNvbmZpZ0lkKVsnaW1hZ2Utdmlld2VyJ10gfHwge307XG4gICAgdGhpcy5oYXNDb250ZXh0TWVudSA9ICgpID0+ICEhaW1hZ2VWaWV3ZXJDb25maWdbJ2NvbnRleHQtbWVudSddO1xuXG4gICAgLy8gcGRmIHZpZXdlciBvcHRpb25zXG4gICAgdGhpcy5vbmUoJ2F3LXNjaGVkYS1wZGYnKS51cGRhdGVPcHRpb25zKHRoaXMuY29uZmlndXJhdGlvbi5nZXQodGhpcy5jb25maWdJZClbJ3BkZi12aWV3ZXInXSB8fCB7fSk7XG5cbiAgICAvLyBpaWlmIHZpZXdlciBvcHRpb25zXG4gICAgY29uc3QgaW1hZ2VWaWV3ZXJJaWlmQ29uZmlnID0gdGhpcy5jb25maWd1cmF0aW9uLmdldCh0aGlzLmNvbmZpZ0lkKVsnaWlpZi12aWV3ZXInXSB8fCB7fTtcbiAgICB0aGlzLmhhc0NvbnRleHRNZW51ID0gKCkgPT4gISFpbWFnZVZpZXdlcklpaWZDb25maWcubGliT3B0aW9uc1snY29udGV4dC1tZW51J107XG4gICAgdGhpcy5vbmUoJ2F3LXNjaGVkYS1pbWFnZS1paWlmJykudXBkYXRlT3B0aW9ucyhpbWFnZVZpZXdlcklpaWZDb25maWcpO1xuXG4gICAgLy8gY2hlY2sgc2VjdGlvbiBjb2xsYXBzZSBzdGF0ZVxuICAgIE9iamVjdC5rZXlzKHRoaXMuc2VjdGlvbkNvbGxhcHNlU3RhdGUpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmFnZUtleSA9IGAke0xPQ0FMX1NUT1JBR0VfUFJFRklYfS4ke2tleX1gO1xuICAgICAgY29uc3Qgc3RvcmFnZVZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oc3RvcmFnZUtleSk7XG4gICAgICB0aGlzLnNlY3Rpb25Db2xsYXBzZVN0YXRlW2tleV0gPSBzdG9yYWdlVmFsdWUgPyBKU09OLnBhcnNlKHN0b3JhZ2VWYWx1ZSkgOiBmYWxzZTtcbiAgICB9KTtcblxuICAgIC8vIHNpZGViYXIgc3RpY2t5IGNvbnRyb2xcbiAgICB0aGlzLl9zaWRlYmFyU3RpY2t5Q29udHJvbCgpO1xuICB9XG5cbiAgb25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gIH1cblxuICBnZXRNZXRhZGF0YVNlY3Rpb25UaXRsZSgpIHtcbiAgICBjb25zdCBsYXlvdXRDb25maWcgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KHRoaXMuY29uZmlnSWQpO1xuICAgIGNvbnN0IG1ldGFkYXRhQ29uZmlnID0gbGF5b3V0Q29uZmlnLm1ldGFkYXRhIHx8IHt9O1xuICAgIHJldHVybiBtZXRhZGF0YUNvbmZpZy50aXRsZSB8fCBudWxsO1xuICB9XG5cbiAgZ2V0TmF2aWdhdGlvbigpIHtcbiAgICBpZiAoQXdTY2hlZGFMYXlvdXREUy50cmVlKSB7XG4gICAgICByZXR1cm4gb2YoQXdTY2hlZGFMYXlvdXREUy50cmVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29tbXVuaWNhdGlvbi5yZXF1ZXN0JCh0aGlzLmdldFRyZWVRdWVyeSwge1xuICAgICAgb25FcnJvcjogKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKGVycm9yKSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBvbmx5QWw6ICEhdGhpcy5sYXlvdXRDb25maWdbJ2V4dGVuZGVkLXRyZWUnXVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHNldFRyZWUodHJlZSkge1xuICAgIEF3U2NoZWRhTGF5b3V0RFMudHJlZSA9IHRyZWU7XG4gIH1cblxuICBnZXRUcmVlID0gKCkgPT4gQXdTY2hlZGFMYXlvdXREUy50cmVlO1xuXG4gIHVwZGF0ZU5hdmlnYXRpb24odGV4dCkge1xuICAgIHRoaXMub25lKCdhdy1zaWRlYmFyLWhlYWRlcicpLnVwZGF0ZSh7IHRleHQsIGlzRXhwYW5kZWQ6ICF0aGlzLnNpZGViYXJDb2xsYXBzZWQgfSk7XG4gIH1cblxuICBsb2FkSXRlbShpZCkge1xuICAgIGNvbnN0IG1heFNpbWlsYXJJdGVtcyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQodGhpcy5jb25maWdJZClbJ3JlbGF0ZWQtaXRlbXMnXVsnbWF4LXJlbGF0ZWQtaXRlbXMnXTtcbiAgICByZXR1cm4gdGhpcy5jb21tdW5pY2F0aW9uLnJlcXVlc3QkKCdnZXROb2RlJywge1xuICAgICAgb25FcnJvcjogKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKGVycm9yKSxcbiAgICAgIHBhcmFtczogeyBpZCwgbWF4U2ltaWxhckl0ZW1zIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGNvbnRlbnQgb2YgdGhlIHNlbGVjdGVkIHRyZWUgaXRlbSBpbiB0aGUgcmlnaHQgcG9ydGlvbiBvZiB0aGUgdmlldy5cbiAgICogQHBhcmFtIHJlc3BvbnNlIGh0dHAgcmVzcG9uc2UgZm9yIHRoZSB0cmVlIGl0ZW1cbiAgICovXG4gIGxvYWRDb250ZW50KHJlc3BvbnNlKSB7XG4gICAgdGhpcy5sYXN0UmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIC8vIHJlc2V0XG4gICAgICB0aGlzLmN1cnJlbnREaWdpdGFsT2JqZWN0ID0gbnVsbDtcbiAgICAgIHRoaXMuY3VycmVudERpZ2l0YWxPYmplY3RJbmRleCA9IG51bGw7XG5cbiAgICAgIGNvbnN0IG1ldGFkYXRhRmllbGRzID0gdGhpcy5nZXRGaWVsZHMocmVzcG9uc2UpO1xuICAgICAgdGhpcy5oYXNNZXRhZGF0YSA9ICEhKEFycmF5LmlzQXJyYXkobWV0YWRhdGFGaWVsZHMpICYmIG1ldGFkYXRhRmllbGRzLmxlbmd0aCk7XG4gICAgICB0aGlzLmhhc1NpbWlsYXJJdGVtcyA9IChcbiAgICAgICAgIXRoaXMubGF5b3V0Q29uZmlnWydleHRlbmRlZC10cmVlJ11cbiAgICAgICAgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZS5yZWxhdGVkSXRlbXMpXG4gICAgICAgICYmIHJlc3BvbnNlLnJlbGF0ZWRJdGVtcy5sZW5ndGhcbiAgICAgICk7XG4gICAgICB0aGlzLmhhc0JyZWFkY3J1bWIgPSBBcnJheS5pc0FycmF5KHJlc3BvbnNlLmJyZWFkY3J1bWJzKSAmJiByZXNwb25zZS5icmVhZGNydW1icy5sZW5ndGg7XG4gICAgICB0aGlzLmhhc0RpZ2l0YWxPYmplY3RzID0gKFxuICAgICAgICBBcnJheS5pc0FycmF5KHJlc3BvbnNlLmRpZ2l0YWxPYmplY3RzKVxuICAgICAgICAmJiByZXNwb25zZS5kaWdpdGFsT2JqZWN0cy5sZW5ndGhcbiAgICAgICk7XG4gICAgICB0aGlzLmhhc1JlbGF0ZWRFbnRpdGllcyA9IChcbiAgICAgICAgQXJyYXkuaXNBcnJheShyZXNwb25zZS5yZWxhdGVkRW50aXRpZXMpXG4gICAgICAgICYmIHJlc3BvbnNlLnJlbGF0ZWRFbnRpdGllcy5sZW5ndGhcbiAgICAgICk7XG4gICAgICB0aGlzLmhhc0NvbnRlbnQgPSAhIShcbiAgICAgICAgdGhpcy5oYXNNZXRhZGF0YVxuICAgICAgICB8fCB0aGlzLmhhc1NpbWlsYXJJdGVtc1xuICAgICAgICB8fCB0aGlzLmhhc1JlbGF0ZWRFbnRpdGllc1xuICAgICAgICB8fCB0aGlzLmhhc0RpZ2l0YWxPYmplY3RzXG4gICAgICApO1xuXG4gICAgICB0aGlzLmNvbnRlbnRQYXJ0cyA9IFtdO1xuICAgICAgY29uc3QgY29udGVudCA9IHsgY29udGVudDogbnVsbCB9O1xuXG4gICAgICBpZiAocmVzcG9uc2UudGV4dCkge1xuICAgICAgICBjb250ZW50LmNvbnRlbnQgPSByZXNwb25zZS50ZXh0O1xuICAgICAgfVxuICAgICAgdGhpcy5jb250ZW50UGFydHMucHVzaChjb250ZW50KTtcblxuICAgICAgLy8gZGlnaXRhbCBvYmplY3RzXG4gICAgICBpZiAodGhpcy5oYXNEaWdpdGFsT2JqZWN0cykge1xuICAgICAgICByZXNwb25zZS5kaWdpdGFsT2JqZWN0cyA9IHRoaXMubm9ybWFsaXplRGlnaXRhbE9iamVjdHMocmVzcG9uc2UuZGlnaXRhbE9iamVjdHMpO1xuICAgICAgICAvLyB0aGlzLm9uZSgnYXctc2NoZWRhLWRpZ2l0YWwtb2JqZWN0cycpLnVwZGF0ZShyZXNwb25zZS5kaWdpdGFsT2JqZWN0cyk7XG4gICAgICAgIHRoaXMub25lKCdhdy1zY2hlZGEtZHJvcGRvd24nKS51cGRhdGUocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLmRpZ2l0YWxPYmplY3RzID0gcmVzcG9uc2UuZGlnaXRhbE9iamVjdHM7XG4gICAgICAgIHRoaXMuY2hhbmdlRGlnaXRhbE9iamVjdCgwKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGl0bGVPYmogPSB7XG4gICAgICAgIGljb246IHJlc3BvbnNlLmljb24sXG4gICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgbWFpbjoge1xuICAgICAgICAgICAgdGV4dDogcmVzcG9uc2UudGl0bGUgfHwgcmVzcG9uc2UubGFiZWwsXG4gICAgICAgICAgICBjbGFzc2VzOiAnYm9sZCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdG9vbHM6IHJlc3BvbnNlLnN1YlRpdGxlLFxuICAgICAgICBhY3Rpb25zOiB7fSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub25lKCdhdy1zY2hlZGEtaW5uZXItdGl0bGUnKS51cGRhdGUodGl0bGVPYmopO1xuICAgICAgdGhpcy5vbmUoJ2F3LXNjaGVkYS1tZXRhZGF0YScpLnVwZGF0ZShtZXRhZGF0YUZpZWxkcyk7XG5cbiAgICAgIC8vIEJyZWFkY3J1bWIgc2VjdGlvblxuICAgICAgY29uc3QgYnJlYWRjcnVtYnMgPSB7XG4gICAgICAgIGl0ZW1zOiBbXSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChyZXNwb25zZS5icmVhZGNydW1icykge1xuICAgICAgICByZXNwb25zZS5icmVhZGNydW1icy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgYnJlYWRjcnVtYnMuaXRlbXMucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogZWxlbWVudC5sYWJlbCxcbiAgICAgICAgICAgIGFuY2hvcjoge1xuICAgICAgICAgICAgICBocmVmOiBbXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmdldCgncGF0aHMnKS5zY2hlZGFCYXNlUGF0aCxcbiAgICAgICAgICAgICAgICBgJHtlbGVtZW50Lmxpbmt9L2AsXG4gICAgICAgICAgICAgICAgaGVscGVycy5zbHVnaWZ5KGVsZW1lbnQubGFiZWwpLFxuICAgICAgICAgICAgICBdLmpvaW4oJycpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25lKCdhdy1zY2hlZGEtYnJlYWRjcnVtYnMnKS51cGRhdGUoYnJlYWRjcnVtYnMpO1xuICAgICAgfVxuXG4gICAgICAvLyB0aXRsZSBwcmV2IC8gbmV4dCBuYXZpZ2F0aW9uXG4gICAgICB0aGlzLmxvYWRUaXRsZU5hdmlnYXRpb24oKTtcblxuICAgICAgLy8gZG9jdW1lbnQgdGl0bGUgdHlwZSAoaWNvbiwgbGFiZWwpXG4gICAgICB0aGlzLmxvYWREb2N1bWVudFR5cGUoKTtcblxuICAgICAgLy8gdXBkYXRlIGhlYWQgdGl0bGVcbiAgICAgIHRoaXMuc2V0SGVhZFRpdGxlKHJlc3BvbnNlLnRpdGxlIHx8IHJlc3BvbnNlLmxhYmVsKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UucmVsYXRlZEl0ZW1zKSB7XG4gICAgICB0aGlzLm9uZSgnYXctbGlua2VkLW9iamVjdHMnKS51cGRhdGVPcHRpb25zKHsgY29udGV4dDogJ3NjaGVkYScsIGNvbmZpZzogdGhpcy5jb25maWd1cmF0aW9uIH0pO1xuICAgICAgdGhpcy5vbmUoJ2F3LWxpbmtlZC1vYmplY3RzJykudXBkYXRlKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlLnJlbGF0ZWRFbnRpdGllcykge1xuICAgICAgcmVzcG9uc2UucmVsYXRlZEVudGl0aWVzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gcmVzcG9uc2UudGl0bGUgfHwgcmVzcG9uc2UubGFiZWw7XG4gICAgICAgIGVsLnJlbGF0aW9uTmFtZSA9IGxhYmVsLmxlbmd0aCA+IDMwXG4gICAgICAgICAgPyBgJHtsYWJlbC5zdWJzdHIoMCwgMzApfS4uLiBgXG4gICAgICAgICAgOiBsYWJlbDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5vbmUoJ2F3LXJlbGF0ZWQtZW50aXRpZXMnKS51cGRhdGVPcHRpb25zKHtcbiAgICAgICAgY29udGV4dDogJ3NjaGVkYScsIGNvbmZpZzogdGhpcy5jb25maWd1cmF0aW9uLCBsaXN0OiAncmVsYXRlZEVudGl0aWVzJywgdGl0bGU6IHJlc3BvbnNlLnRpdGxlXG4gICAgICB9KTtcbiAgICAgIHRoaXMub25lKCdhdy1yZWxhdGVkLWVudGl0aWVzJykudXBkYXRlKHJlc3BvbnNlLnJlbGF0ZWRFbnRpdGllcyk7XG4gICAgfVxuXG4gICAgLy8gY29udHJvbCBzdGlja3lcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3RpY2t5Q29udHJvbFRyaWdnZXIkLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRFeHRlbmRlZFRyZWUoKSB7XG4gICAgY29uc3QgcGFyZW50UmVzcG9uc2UgPSB0aGlzLmxhc3RSZXNwb25zZTtcblxuICAgIGlmICh0aGlzLmxheW91dENvbmZpZ1snZXh0ZW5kZWQtdHJlZSddKSB7XG4gICAgICBjb25zdCBjb25maWdLZXlzID0gdGhpcy5jb25maWd1cmF0aW9uLmdldCgnY29uZmlnLWtleXMnKTtcbiAgICAgIGNvbnN0IHdpZGdldE9wdGlvbnMgPSB0aGlzLmxheW91dENvbmZpZ1snZXh0ZW5kZWQtdHJlZSddO1xuICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICAgIGlkOiBwYXJlbnRSZXNwb25zZS5pZCxcbiAgICAgICAgcGFnZTogMSxcbiAgICAgICAgbGltaXQ6IDEwLFxuICAgICAgICBxdWVyeTogbnVsbCxcbiAgICAgICAgLi4udGhpcy5leHRlbmRlZFRyZWVQYXJhbXMsXG4gICAgICB9O1xuICAgICAgY29uc3Qgd2lkZ2V0UGFyYW1zID0gY2xvbmUocGFyYW1zKTtcblxuICAgICAgLy8gbm9ybWFsaXplIHBhcmFtc1xuICAgICAgcGFyYW1zLm9mZnNldCA9IChwYXJhbXMucGFnZSAtIDEpICogcGFyYW1zLmxpbWl0O1xuICAgICAgZGVsZXRlIHBhcmFtcy5wYWdlO1xuXG4gICAgICBjb25zdCBiYXNlUGF0aCA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ3BhdGhzJykuc2NoZWRhQmFzZVBhdGg7XG4gICAgICBjb25zdCByZXF1ZXN0JCA9IHRoaXMuY29tbXVuaWNhdGlvbi5yZXF1ZXN0JCgnZ2V0Tm9kZUNoaWxkcmVuJywge1xuICAgICAgICBwYXJhbXMsXG4gICAgICAgIG9uRXJyb3I6IChlcnJvcikgPT4gY29uc29sZS5lcnJvcihlcnJvciksXG4gICAgICB9KTtcbiAgICAgIHJlcXVlc3QkLnN1YnNjcmliZSgobm9kZXNSZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmhhc0V4dGVuZGVkVHJlZSA9IChcbiAgICAgICAgICBwYXJhbXMucXVlcnlcbiAgICAgICAgICB8fCB3aWRnZXRQYXJhbXMucGFnZSA+IDFcbiAgICAgICAgICB8fCAhIW5vZGVzUmVzcG9uc2U/Lml0ZW1zPy5sZW5ndGhcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuaGFzRXh0ZW5kZWRUcmVlKSB7XG4gICAgICAgICAgdGhpcy5vbmUoJ2F3LWV4dGVuZGVkLXRyZWUnKS51cGRhdGVPcHRpb25zKHtcbiAgICAgICAgICAgIGJhc2VQYXRoLFxuICAgICAgICAgICAgY29uZmlnS2V5cyxcbiAgICAgICAgICAgIHBhcmFtczogd2lkZ2V0UGFyYW1zLFxuICAgICAgICAgICAgLi4ud2lkZ2V0T3B0aW9ucyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLm9uZSgnYXctZXh0ZW5kZWQtdHJlZScpLnVwZGF0ZSh7XG4gICAgICAgICAgICBwYXJlbnQ6IHBhcmVudFJlc3BvbnNlLFxuICAgICAgICAgICAgbm9kZXM6IG5vZGVzUmVzcG9uc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIGZpeCBxdWVyeSBpbnB1dCB1cGRhdGVcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5SW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgPSBkb2N1bWVudFxuICAgICAgICAgICAgICAucXVlcnlTZWxlY3RvcignLmF3LWV4dGVuZGVkLXRyZWVfX2hlYWRlciAubjctaW5uZXItdGl0bGVfX3NlYXJjaC1iYXInKTtcbiAgICAgICAgICAgIGlmIChxdWVyeUlucHV0KSB7XG4gICAgICAgICAgICAgIHF1ZXJ5SW5wdXQudmFsdWUgPSBwYXJhbXMucXVlcnkgfHwgJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhc0V4dGVuZGVkVHJlZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGxvYWRJbnRlcm5hbFNlYXJjaCgpIHtcbiAgICBjb25zdCBwYXJlbnRSZXNwb25zZSA9IHRoaXMubGFzdFJlc3BvbnNlO1xuXG4gICAgaWYgKHRoaXMubGF5b3V0Q29uZmlnWydpbnRlcm5hbC1zZWFyY2gnXSkge1xuICAgICAgdGhpcy5oYXNJbnRlcm5hbFNlYXJjaCA9IHRydWU7XG4gICAgICBjb25zdCBjb25maWdLZXlzID0gdGhpcy5jb25maWd1cmF0aW9uLmdldCgnY29uZmlnLWtleXMnKTtcbiAgICAgIGNvbnN0IHdpZGdldE9wdGlvbnMgPSB0aGlzLmxheW91dENvbmZpZ1snaW50ZXJuYWwtc2VhcmNoJ107XG4gICAgICBjb25zdCByYXdQYXJhbXM6IGFueSA9IHtcbiAgICAgICAgaWQ6IHBhcmVudFJlc3BvbnNlLmlkLFxuICAgICAgICAnc2VhcmNoLXBhZ2UnOiAxLFxuICAgICAgICAnc2VhcmNoLWxpbWl0JzogMTAsXG4gICAgICAgICdzZWFyY2gtcXVlcnknOiBudWxsLFxuICAgICAgICBhbmNlc3RvcjogdHJ1ZSxcbiAgICAgICAgLi4udGhpcy5pbnRlcm5hbFNlYXJjaFBhcmFtcyxcbiAgICAgIH07XG5cbiAgICAgIC8vIHNldCBwYXJhbXMgb2JqZWN0IHdpdGhvdXQgXCJzZWFyY2gtXCIgcHJlZml4XG4gICAgICBjb25zdCBwYXJhbXM6IFBhcmFtcyA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMocmF3UGFyYW1zKS5mb3JFYWNoKChwYXJhbUtleSkgPT4ge1xuICAgICAgICBwYXJhbXNbcGFyYW1LZXkucmVwbGFjZSgnc2VhcmNoLScsICcnKV0gPSByYXdQYXJhbXNbcGFyYW1LZXldO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHdpZGdldFBhcmFtcyA9IGNsb25lKHBhcmFtcyk7XG5cbiAgICAgIC8vIG5vcm1hbGl6ZSBwYXJhbXNcbiAgICAgIHBhcmFtcy5vZmZzZXQgPSAocGFyYW1zLnBhZ2UgLSAxKSAqIHBhcmFtcy5saW1pdDtcbiAgICAgIGRlbGV0ZSBwYXJhbXMucGFnZTtcblxuICAgICAgY29uc3QgYmFzZVBhdGggPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdwYXRocycpLnNjaGVkYUJhc2VQYXRoO1xuICAgICAgbGV0IHJlcXVlc3QkOiBPYnNlcnZhYmxlPGFueT4gPSBvZihudWxsKTtcbiAgICAgIGlmIChwYXJhbXMucXVlcnkpIHtcbiAgICAgICAgcmVxdWVzdCQgPSB0aGlzLmNvbW11bmljYXRpb24ucmVxdWVzdCQoJ2dldE5vZGVDaGlsZHJlbicsIHtcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgb25FcnJvcjogKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKGVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3QkLnN1YnNjcmliZSgobm9kZXNSZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLm9uZSgnYXctc2NoZWRhLXNlYXJjaCcpLnVwZGF0ZU9wdGlvbnMoe1xuICAgICAgICAgIGJhc2VQYXRoLFxuICAgICAgICAgIGNvbmZpZ0tleXMsXG4gICAgICAgICAgcGFyYW1zOiB3aWRnZXRQYXJhbXMsXG4gICAgICAgICAgLi4ud2lkZ2V0T3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25lKCdhdy1zY2hlZGEtc2VhcmNoJykudXBkYXRlKG5vZGVzUmVzcG9uc2UpO1xuXG4gICAgICAgIC8vIGZpeCBxdWVyeSBpbnB1dCB1cGRhdGVcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcXVlcnlJbnB1dDogSFRNTElucHV0RWxlbWVudCA9IGRvY3VtZW50XG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvcignLmF3LXNjaGVkYS1zZWFyY2hfX2lucHV0IGlucHV0W3R5cGU9XCJ0ZXh0XCJdJyk7XG4gICAgICAgICAgaWYgKHF1ZXJ5SW5wdXQpIHtcbiAgICAgICAgICAgIHF1ZXJ5SW5wdXQudmFsdWUgPSBwYXJhbXMucXVlcnkgfHwgJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhc0ludGVybmFsU2VhcmNoID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbG9hZFRpdGxlTmF2aWdhdGlvbigpIHtcbiAgICAvLyByZXNldFxuICAgIHRoaXMudGl0bGVOYXZpZ2F0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGhhc1RpdGxlTmF2ID0gKFxuICAgICAgISF0aGlzLmxheW91dENvbmZpZ1sndGl0bGUtbmF2J10/LmVuYWJsZWRcbiAgICAgICYmIHRoaXMubGFzdFJlc3BvbnNlLmRvY3VtZW50X3R5cGUgPT09ICdvZ2dldHRvLWN1bHR1cmFsZSdcbiAgICApO1xuICAgIGlmICghaGFzVGl0bGVOYXYpIHJldHVybjtcblxuICAgIHRoaXMudGl0bGVOYXZpZ2F0aW9uID0geyBwcmV2OiBudWxsLCBuZXh0OiBudWxsIH07XG4gICAgY29uc3QgYmFzZVBhdGggPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdwYXRocycpLnNjaGVkYUJhc2VQYXRoO1xuICAgIFsncHJldicsICduZXh0J10uZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5sYXN0UmVzcG9uc2Vba2V5XTtcbiAgICAgIHRoaXMudGl0bGVOYXZpZ2F0aW9uW2tleV0gPSBpdGVtXG4gICAgICAgID8ge1xuICAgICAgICAgIGhyZWY6IGAke2Jhc2VQYXRofS8ke2l0ZW0uaWR9LyR7aGVscGVycy5zbHVnaWZ5KGl0ZW0ubGFiZWwpfWAsXG4gICAgICAgICAgbGFiZWw6IGl0ZW0ubGFiZWwsXG4gICAgICAgIH0gOiBudWxsO1xuICAgIH0pO1xuICB9XG5cbiAgbG9hZERvY3VtZW50VHlwZSgpIHtcbiAgICBjb25zdCBjb25maWdLZXlzID0gdGhpcy5jb25maWd1cmF0aW9uLmdldCgnY29uZmlnLWtleXMnKTtcbiAgICBjb25zdCB7IGRvY3VtZW50X3R5cGU6IHR5cGUgfSA9IHRoaXMubGFzdFJlc3BvbnNlO1xuICAgIGNvbnN0IGljb24gPSBub2RlSGVscGVyLmdldE5vZGVJY29uKGNvbmZpZ0tleXMsIHRoaXMubGFzdFJlc3BvbnNlKTtcbiAgICBpZiAoY29uZmlnS2V5c1t0eXBlXSkge1xuICAgICAgdGhpcy5kb2N1bWVudFR5cGUgPSB7XG4gICAgICAgIGljb24sXG4gICAgICAgIGxhYmVsOiBjb25maWdLZXlzW3R5cGVdWydzaW5ndWxhci1sYWJlbCddXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvY3VtZW50VHlwZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBiZXR3ZWVuIHRoZSB0cmVlJ3MgY29sbGFwc2VkIG9yIGV4cGFuZGVkIHN0YXRlLlxuICAgKi9cbiAgY29sbGFwc2VTaWRlYmFyKCkge1xuICAgIC8vIG92ZXJ3cml0ZSB0aGUgY29uZmlndXJhdGlvbiB0byBwcmV2ZW50IHVud2FudGVkIGNoYW5nZXMgdG8gdGhlIHRyZWUgc3RhdGUuXG4gICAgdGhpcy5sYXlvdXRDb25maWcudHJlZS5jb2xsYXBzZWRCeURlZmF1bHQgPSAhdGhpcy5sYXlvdXRDb25maWcudHJlZS5jb2xsYXBzZWRCeURlZmF1bHQ7XG4gICAgdGhpcy5zaWRlYmFyQ29sbGFwc2VkID0gIXRoaXMuc2lkZWJhckNvbGxhcHNlZDtcbiAgICB0aGlzLmdldFdpZGdldERhdGFTb3VyY2UoJ2F3LXNpZGViYXItaGVhZGVyJykudG9nZ2xlU2lkZWJhcigpO1xuICB9XG5cbiAgb25TZWN0aW9uQ29sbGFwc2UoaWQ6IHN0cmluZykge1xuICAgIHRoaXMuc2VjdGlvbkNvbGxhcHNlU3RhdGVbaWRdID0gIXRoaXMuc2VjdGlvbkNvbGxhcHNlU3RhdGVbaWRdO1xuXG4gICAgLy8gdXBkYXRlIHN0b3JhZ2VcbiAgICBjb25zdCBzdG9yYWdlS2V5ID0gYCR7TE9DQUxfU1RPUkFHRV9QUkVGSVh9LiR7aWR9YDtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShzdG9yYWdlS2V5LCB0aGlzLnNlY3Rpb25Db2xsYXBzZVN0YXRlW2lkXSk7XG4gIH1cblxuICBwcml2YXRlIF9zaWRlYmFyU3RpY2t5Q29udHJvbCgpIHtcbiAgICAvLyBubyBzdGlja3kgZm9yIEludGVybmV0IEV4cGxvcmVyXG4gICAgaWYgKGhlbHBlcnMuYnJvd3NlcklzSUUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzb3VyY2UkID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Njcm9sbCcpO1xuXG4gICAgbWVyZ2Uoc291cmNlJCwgdGhpcy5zdGlja3lDb250cm9sVHJpZ2dlciQpLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSxcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCB3aW5kb3dUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgICBjb25zdCB3aW5kb3dCb3R0b20gPSB3aW5kb3cuc2Nyb2xsWSArIHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzdGlja3ktcGFyZW50JylbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCB3cmFwcGVyVG9wID0gd3JhcHBlci5vZmZzZXRUb3A7XG4gICAgICBjb25zdCB3cmFwcGVyQm90dG9tID0gd3JhcHBlclRvcCArIHdyYXBwZXIuY2xpZW50SGVpZ2h0O1xuXG4gICAgICB0aGlzLnNpZGViYXJJc1N0aWNreSA9IHdyYXBwZXJUb3AgPD0gd2luZG93VG9wO1xuXG4gICAgICAvLyB0cmVlIGhlaWdodCBjb250cm9sXG4gICAgICBpZiAodGhpcy5zaWRlYmFySXNTdGlja3kgJiYgd2luZG93Qm90dG9tIDwgd3JhcHBlckJvdHRvbSkge1xuICAgICAgICB0aGlzLnRyZWVNYXhIZWlnaHQgPSBgJHt3aW5kb3dCb3R0b20gLSB3aW5kb3dUb3AgLSA1MH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2lkZWJhcklzU3RpY2t5ICYmIHdpbmRvd0JvdHRvbSA+PSB3cmFwcGVyQm90dG9tKSB7XG4gICAgICAgIHRoaXMudHJlZU1heEhlaWdodCA9IGAke3dyYXBwZXJCb3R0b20gLSB3aW5kb3dUb3AgLSA1MH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvd0JvdHRvbSA8IHdyYXBwZXJCb3R0b20pIHtcbiAgICAgICAgdGhpcy50cmVlTWF4SGVpZ2h0ID0gYCR7d2luZG93Qm90dG9tIC0gd3JhcHBlclRvcCAtIDUwfXB4YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHJlZU1heEhlaWdodCA9IGAke3dyYXBwZXJCb3R0b20gLSB3cmFwcGVyVG9wIC0gNTB9cHhgO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEZpZWxkcyhyZXNwb25zZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGZpZWxkcyxcbiAgICAgIGRvY3VtZW50X3R5cGU6IGR0LFxuICAgICAgZG9jdW1lbnRfY2xhc3NpZmljYXRpb246IGRjXG4gICAgfSA9IHJlc3BvbnNlO1xuICAgIGNvbnN0IHBhdGhzID0gdGhpcy5jb25maWd1cmF0aW9uLmdldCgncGF0aHMnKTtcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdsYWJlbHMnKTtcbiAgICBjb25zdCBkY1NlZ21lbnRzID0gdHlwZW9mIGRjID09PSAnc3RyaW5nJyA/IGRjLnNwbGl0KCcuJykgOiBbXTtcbiAgICBjb25zdCBkY0xhc3RTZWdtZW50ID0gZGNTZWdtZW50c1tkY1NlZ21lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGxldCBtZXRhZGF0YVRvU2hvdyA9IF9nZXQodGhpcy5jb25maWd1cmF0aW9uLmdldCh0aGlzLmNvbmZpZ0lkKSwgJ21ldGFkYXRhLXRvLXNob3cnLCB7fSk7XG4gICAgbWV0YWRhdGFUb1Nob3cgPSBtZXRhZGF0YVRvU2hvd1tkY0xhc3RTZWdtZW50XSB8fCBtZXRhZGF0YVRvU2hvd1tkdF0gfHwgW107XG5cbiAgICByZXR1cm4gbWV0YWRhdGFIZWxwZXIubm9ybWFsaXplKHtcbiAgICAgIGZpZWxkcyxcbiAgICAgIHBhdGhzLFxuICAgICAgbGFiZWxzLFxuICAgICAgbWV0YWRhdGFUb1Nob3csXG4gICAgICB0eXBlOiBkdFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZURpZ2l0YWxPYmplY3QocGF5bG9hZCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnREaWdpdGFsT2JqZWN0SW5kZXggIT09IHBheWxvYWQpIHtcbiAgICAgIC8vIGxpbmsgY2hlY2tcbiAgICAgIGlmICh0aGlzLmRpZ2l0YWxPYmplY3RzW3BheWxvYWRdLnR5cGUgPT09ICdleHRlcm5hbCcgJiYgdGhpcy5jdXJyZW50RGlnaXRhbE9iamVjdCkge1xuICAgICAgICB3aW5kb3cub3Blbih0aGlzLmRpZ2l0YWxPYmplY3RzW3BheWxvYWRdLnVybCwgJ19ibGFuaycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYWx3YXlzIHJlc2V0IGltYWdlIHZpZXdlclxuICAgICAgICBjb25zdCBzY2hlZGFJbWFnZURTID0gdGhpcy5nZXRXaWRnZXREYXRhU291cmNlKCdhdy1zY2hlZGEtaW1hZ2UnKTtcbiAgICAgICAgc2NoZWRhSW1hZ2VEUy5yZXNldCgpO1xuXG4gICAgICAgIHRoaXMuY3VycmVudERpZ2l0YWxPYmplY3RJbmRleCA9IHBheWxvYWQ7XG4gICAgICAgIHRoaXMuY3VycmVudERpZ2l0YWxPYmplY3QgPSB0aGlzLmRpZ2l0YWxPYmplY3RzW3BheWxvYWRdO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50RGlnaXRhbE9iamVjdC50eXBlID09PSAnaW1hZ2VzLWlpaWYnKSB7XG4gICAgICAgICAgdGhpcy5vbmUoJ2F3LXNjaGVkYS1pbWFnZS1paWlmJykudXBkYXRlKHRoaXMuY3VycmVudERpZ2l0YWxPYmplY3QpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudERpZ2l0YWxPYmplY3QudHlwZS5pbmNsdWRlcygnaW1hZ2VzJykpIHtcbiAgICAgICAgICBpZiAoc2NoZWRhSW1hZ2VEUy5oYXNJbnN0YW5jZSgpKSB7XG4gICAgICAgICAgICBzY2hlZGFJbWFnZURTLnVwZGF0ZUltYWdlcyh0aGlzLmN1cnJlbnREaWdpdGFsT2JqZWN0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbmUoJ2F3LXNjaGVkYS1pbWFnZScpLnVwZGF0ZSh0aGlzLmN1cnJlbnREaWdpdGFsT2JqZWN0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpbWFnZSB2aWV3ZXIgbmF2aWdhdG9yXG4gICAgICAgICAgY29uc3QgbmF2aWdhdG9yQ29uZmlnID0gdGhpcy5sYXlvdXRDb25maWdbJ2ltYWdlLXZpZXdlci1uYXYnXTtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yQ29uZmlnPy5lbmFibGVkKSB7XG4gICAgICAgICAgICBzY2hlZGFJbWFnZURTLmluc3RhbmNlTG9hZGVkJC5waXBlKFxuICAgICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgICBkZWxheSgxMDApIC8vIHdhaXRpbmcgZm9yIHZpZXdlciBpbnN0YW5jZSB0byB1cGRhdGVcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKCh2aWV3ZXIpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5vbmUoJ2F3LXNjaGVkYS1pbWFnZS1uYXZpZ2F0b3InKS51cGRhdGVPcHRpb25zKG5hdmlnYXRvckNvbmZpZyk7XG4gICAgICAgICAgICAgIHRoaXMub25lKCdhdy1zY2hlZGEtaW1hZ2UtbmF2aWdhdG9yJykudXBkYXRlKHZpZXdlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50RGlnaXRhbE9iamVjdC50eXBlID09PSAncGRmJykge1xuICAgICAgICAgIHRoaXMub25lKCdhdy1zY2hlZGEtcGRmJykudXBkYXRlKHRoaXMuY3VycmVudERpZ2l0YWxPYmplY3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVEaWdpdGFsT2JqZWN0cyhkaWdpdGFsT2JqZWN0cykge1xuICAgIHJldHVybiBkaWdpdGFsT2JqZWN0cy5tYXAoKCRkbykgPT4ge1xuICAgICAgaWYgKCRkby50eXBlLmluY2x1ZGVzKCdpbWFnZXMnKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkOiAnc2NoZWRhLWxheW91dC12aWV3ZXInLFxuICAgICAgICAgIHR5cGU6ICRkby50eXBlLFxuICAgICAgICAgIGxhYmVsOiAkZG8ubGFiZWwsXG4gICAgICAgICAgaXRlbXM6ICRkby5pdGVtcy5tYXAoKHsgdXJsLCBpaWlmSW1hZ2VzIH0pID0+ICh7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBpaWlmSW1hZ2VzLFxuICAgICAgICAgICAgdHlwZTogJGRvLnR5cGUsXG4gICAgICAgICAgfSkpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gJGRvO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbm9ybWFsaXplSXRlbXMoaXRlbXMpIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChzaW5nbGVJdGVtKSA9PiAoeyBpdGVtOiB7IC4uLnNpbmdsZUl0ZW0gfSB9KSk7XG4gIH1cblxuICBwcml2YXRlIHNldEhlYWRUaXRsZShsYWJlbD86IHN0cmluZykge1xuICAgIHRoaXMubWFpblN0YXRlLnVwZGF0ZSgnaGVhZFRpdGxlJywgZ2V0SGVhZFRpdGxlKHtcbiAgICAgIGxhYmVsLFxuICAgICAgbmFtZTogdGhpcy5jb25maWd1cmF0aW9uLmdldCgnY3VzdG9tZXInKSxcbiAgICAgIHBhZ2VOYW1lOiB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KHRoaXMuY29uZmlnSWQpPy5wYWdlTmFtZSxcbiAgICAgIHBhZ2VEZWZhdWx0OiAnUGF0cmltb25pbycsXG4gICAgfSkpO1xuICB9XG59XG4iXX0=
|