@colijnit/homedecorator 255.1.2 → 255.1.3
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/app/core/model/homedecorator-settings-options.d.ts +1 -0
- package/app/core/service/homedecorator-connector-adapter.service.d.ts +1 -1
- package/app/core/service/utils.service.d.ts +1 -0
- package/app/plugins/core3d/components/ar-gui/ar-gui-root/ar-gui-elements/ar-gui-buttons/ar-gui-buttons.component.scss +2 -4
- package/app/plugins/core3d/items/floor-plane-item.d.ts +8 -1
- package/app/plugins/core3d/items/metadata.d.ts +2 -0
- package/app/plugins/core3d/service/ar.service.d.ts +1 -0
- package/app/plugins/core3d/service/floor-pattern.service.d.ts +26 -0
- package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +25 -0
- package/app/plugins/core3d/service/outline.service.d.ts +1 -2
- package/app/plugins/core3d/service/post-processing.service.d.ts +6 -0
- package/app/plugins/core3d/service/scene.service.d.ts +4 -1
- package/app/plugins/core3d/service/ssr.service.d.ts +18 -0
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +40 -3
- package/app/plugins/render/service/new-render.service.d.ts +1 -0
- package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +10 -1
- package/app/plugins/threedselector/threedselector/threedselector.component.d.ts +1 -0
- package/app/plugins/toolbar/toolbar.module.d.ts +2 -1
- package/app/shared/pdf-export/pdf-export.component.d.ts +20 -0
- package/app/shared/pdf-export/pdf-export.component.scss +19 -0
- package/app/shared/pdf-export/pdf-export.module.d.ts +11 -0
- package/assets/icons/pen-ruler.svg +1 -0
- package/assets/icons/xmark_regular.svg +1 -0
- package/bundles/colijnit-homedecorator.umd.js +1195 -174
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/colijnit-homedecorator-255.1.2.tgz +0 -0
- package/esm2015/app/app.version.js +4 -4
- package/esm2015/app/core/model/homedecorator-settings-options.js +2 -1
- package/esm2015/app/core/model/light-preset.js +11 -7
- package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +4 -6
- package/esm2015/app/core/service/homedecorator-connector.service.js +3 -1
- package/esm2015/app/core/service/utils.service.js +16 -1
- package/esm2015/app/plugins/core3d/components/ar-gui/ar-gui-root/ar-gui-elements/ar-gui-buttons/ar-gui-buttons.component.js +2 -2
- package/esm2015/app/plugins/core3d/items/floor-plane-item.js +25 -2
- package/esm2015/app/plugins/core3d/items/metadata.js +1 -1
- package/esm2015/app/plugins/core3d/service/ar.service.js +14 -1
- package/esm2015/app/plugins/core3d/service/floor-pattern.service.js +156 -0
- package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +122 -0
- package/esm2015/app/plugins/core3d/service/floor.service.js +5 -2
- package/esm2015/app/plugins/core3d/service/outline.service.js +9 -8
- package/esm2015/app/plugins/core3d/service/post-processing.service.js +77 -22
- package/esm2015/app/plugins/core3d/service/scene.service.js +30 -13
- package/esm2015/app/plugins/core3d/service/ssr.service.js +53 -0
- package/esm2015/app/plugins/lite-selector/lite-selector/component/selections-summary/selections-summary.component.js +3 -3
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +335 -79
- package/esm2015/app/plugins/model-uploader/model-uploader/model-uploader.component.js +3 -2
- package/esm2015/app/plugins/product-catalog/product-catalog/product-catalog.component.js +3 -2
- package/esm2015/app/plugins/render/service/new-render.service.js +37 -13
- package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +135 -5
- package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +34 -8
- package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +9 -25
- package/esm2015/app/plugins/toolbar/toolbar.module.js +8 -4
- package/esm2015/app/shared/pdf-export/pdf-export.component.js +86 -0
- package/esm2015/app/shared/pdf-export/pdf-export.module.js +38 -0
- package/fesm2015/colijnit-homedecorator.js +1156 -181
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/package.json +2 -2
- package/assets/hdri/ground_MASK.jpg +0 -0
|
Binary file
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT!
|
|
2
2
|
/* tslint:disable */
|
|
3
3
|
export const VersionInfo = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
application: "Homedecorator",
|
|
5
|
+
appVersion: "255.1.2",
|
|
6
|
+
revision: "111614"
|
|
7
7
|
};
|
|
8
8
|
/* tslint:enable */
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnZlcnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9hcHAudmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnRUFBZ0U7QUFDaEUsb0JBQW9CO0FBQ3BCLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRztJQUMzQixXQUFXLEVBQUUsZUFBZTtJQUMxQixVQUFVLEVBQUUsU0FBUztJQUNyQixRQUFRLEVBQUUsUUFBUTtDQUNuQixDQUFBO0FBQ0QsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSU1QT1JUQU5UOiBUSElTIEZJTEUgSVMgQVVUTyBHRU5FUkFURUQhIERPIE5PVCBNQU5VQUxMWSBFRElUIVxuLyogdHNsaW50OmRpc2FibGUgKi9cbmV4cG9ydCBjb25zdCBWZXJzaW9uSW5mbyA9IHtcbmFwcGxpY2F0aW9uOiBcIkhvbWVkZWNvcmF0b3JcIixcbiAgYXBwVmVyc2lvbjogXCIyNTUuMS4yXCIsXG4gIHJldmlzaW9uOiBcIjExMTYxNFwiXG59XG4vKiB0c2xpbnQ6ZW5hYmxlICovXG4iXX0=
|
|
@@ -43,7 +43,8 @@ export class HomedecoratorSettingsOptions {
|
|
|
43
43
|
this.useRenderWebsocket = false;
|
|
44
44
|
this.productRenderSceneAssetId = 'scene_studio_eevee';
|
|
45
45
|
this.pathTracer = false;
|
|
46
|
+
this.ssrEnabled = false;
|
|
46
47
|
this.maxRenderSamples = 100;
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWRlY29yYXRvci1zZXR0aW5ncy1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvY29yZS9tb2RlbC9ob21lZGVjb3JhdG9yLXNldHRpbmdzLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLDRCQUE0QjtJQUF6QztRQUNTLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5Qix5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1Qiw2QkFBd0IsR0FBWSxLQUFLLENBQUM7UUFDMUMscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLDJCQUFzQixHQUFZLElBQUksQ0FBQztRQUN2Qyx5QkFBb0IsR0FBWSxJQUFJLENBQUMsQ0FBQyxvQkFBb0I7UUFDMUQseUJBQW9CLEdBQVksSUFBSSxDQUFDLENBQUMsYUFBYTtRQUNuRCx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFDcEMsMkJBQXNCLEdBQVksS0FBSyxDQUFDO1FBQ3hDLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUN4Qyx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDckMsb0NBQStCLEdBQVksS0FBSyxDQUFDO1FBQ2pELHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUVsQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUN4QyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUN4QyxZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUNyQywyQkFBc0IsR0FBWSxJQUFJLENBQUM7UUFDdkMsK0JBQTBCLEdBQVksSUFBSSxDQUFDO1FBQzNDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ2hDLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUN0Qyx5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBQ3BDLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBQy9CLGtEQUE2QyxHQUFZLEtBQUssQ0FBQztRQUMvRCxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5Qix1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFDcEMsOEJBQXlCLEdBQVcsb0JBQW9CLENBQUM7UUFDekQsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLHFCQUFnQixHQUFXLEdBQUcsQ0FBQztJQUN4QyxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgSG9tZWRlY29yYXRvclNldHRpbmdzT3B0aW9ucyB7XHJcbiAgcHVibGljIHNob3dTdG9ja1N0YXR1czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93M0RXYXRlcm1hcms6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1pvb21CdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1RhZ0ZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93QXNDb25maWd1cmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRldmVsb3BtZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlubGluZUFuc3dlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0FyQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dDYXB0aW9uQWRkQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGluc3RhbnRSZXBsYWNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGJvdHRvbUFuc3dlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgb25seVRocmVlRDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93UmVuZGVyQ29ubmVjdGlvbkluZm86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZm9yY2VBZGp1c3RhYmxlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93Um9vbURvd25sb2FkQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgc2hvd1Jvb21SZW5kZXJCdXR0b246IGJvb2xlYW4gPSB0cnVlOyAvLyAzRE0gcmVuZGVyIGJ1dHRvblxyXG4gIHB1YmxpYyBzaG93T3duQ2F0YWxvZ0J1dHRvbjogYm9vbGVhbiA9IHRydWU7IC8vIEhESCBvcHRpb25cclxuICBwdWJsaWMgc2hvd0Rvd25sb2FkQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dPbmx5SG9tZURlY29GaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd01lYXN1cmVtZW50c0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjYW1lcmFQb3NpdGlvbkZpeGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGNhbWVyYVBvc2l0aW9uRml4ZWRBbmRTY3JvbGxiYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaGFuZGxlUGFyYW1ldHJpYzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgYXJFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dTdGFuZGFsb25lQVJCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdnJFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHF1YWxpdHlTZXR0aW5nc0VuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgeHJEZWJ1ZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VTdGFuZGFsb25lRmxvb3JzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHVzZVN0YW5kYWxvbmVIaWdoTGlnaHQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBzaG93RWRpdFBlbmNpbENvbmZpZ3VyYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGluc3RhbnRFZGl0TWVudTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBhbmltYXRpb25CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBjdXN0b21pemF0aW9uRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VQbGFjZW1lbnRTbmFwcGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VWYXJpYXRpb25PblBhcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0Zvcm1EaWFsb2c6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBzaG93T25seUxhc3RBbnN3ZXJEZXNjcmlwdGlvbkdlbmVyaWNTZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZW5hYmxlM0RJblBob3RvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHVzZU5ld1JlbmRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VSZW5kZXJXZWJzb2NrZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcHJvZHVjdFJlbmRlclNjZW5lQXNzZXRJZDogc3RyaW5nID0gJ3NjZW5lX3N0dWRpb19lZXZlZSc7XHJcbiAgcHVibGljIHBhdGhUcmFjZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc3NyRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBtYXhSZW5kZXJTYW1wbGVzOiBudW1iZXIgPSAxMDA7XHJcbn1cclxuIl19
|
|
@@ -35,12 +35,16 @@ export class LightPreset {
|
|
|
35
35
|
model.standalone = modelInterface.standalone;
|
|
36
36
|
model.group = modelInterface.group;
|
|
37
37
|
model.navigatorType = modelInterface.navigatorType;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
if (Array.from(shadowMapTypesMap.entries()).find((key, value) => key[1] === modelInterface.shadowMapType)) {
|
|
39
|
+
model.shadowMapType = modelInterface.shadowMapType ?
|
|
40
|
+
Array.from(shadowMapTypesMap.entries()).find((key, value) => key[1] === modelInterface.shadowMapType)[0] :
|
|
41
|
+
ShadowMapLocalType.PCFSoftShadowMap;
|
|
42
|
+
}
|
|
43
|
+
if (Array.from(outputEncodingMap.entries()).find((key, value) => key[1] === modelInterface.outputEncoding)) {
|
|
44
|
+
model.outputEncoding = modelInterface.outputEncoding ?
|
|
45
|
+
Array.from(outputEncodingMap.entries()).find((key, value) => key[1] === modelInterface.outputEncoding)[0] :
|
|
46
|
+
OutputEncoding.SRGBColorSpace;
|
|
47
|
+
}
|
|
44
48
|
model.shadowRadius = modelInterface.shadowRadius;
|
|
45
49
|
model.toneMappingExposure = modelInterface.toneMappingExposure ? modelInterface.toneMappingExposure : 1;
|
|
46
50
|
model.physicallyCorrectLights = modelInterface.physicallyCorrectLights ? modelInterface.physicallyCorrectLights : false;
|
|
@@ -56,4 +60,4 @@ export class LightPreset {
|
|
|
56
60
|
return s4() + s4() + s4();
|
|
57
61
|
}
|
|
58
62
|
}
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHQtcHJlc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvY29yZS9tb2RlbC9saWdodC1wcmVzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUNMLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsWUFBWSxFQUNaLGdCQUFnQixFQUFpQixjQUFjLEVBQy9DLFlBQVksRUFDYixNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUc1RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFJbkQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQTJDLElBQUksR0FBRyxDQUFDO0lBQy9FLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQztJQUNuRCxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUM7SUFDL0MsQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQztJQUN2RCxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUM7Q0FDaEQsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQW9DLElBQUksR0FBRyxDQUFDO0lBQ3hFLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLG9CQUFvQixDQUFDO0lBQzNELENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUM7Q0FDaEQsQ0FBQyxDQUFDO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUFldEI7UUFiTyxTQUFJLEdBQVcsVUFBVSxDQUFDO1FBRTFCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUU1QixrQkFBYSxHQUF1QixrQkFBa0IsQ0FB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U0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsU0FBUyxFQUFFO1lBQ1QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztpQkFDN0MsUUFBUSxDQUFDLEVBQUUsQ0FBQztpQkFDWixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUVELE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDNUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTaGFkb3dNYXBMb2NhbFR5cGV9IGZyb20gJy4uL2VudW0vc2hhZG93LW1hcC10eXBlLmVudW0nO1xyXG5pbXBvcnQge1xyXG4gIEJhc2ljU2hhZG93TWFwLFxyXG4gIExpbmVhclNSR0JDb2xvclNwYWNlLFxyXG4gIFBDRlNoYWRvd01hcCxcclxuICBQQ0ZTb2Z0U2hhZG93TWFwLCBTaGFkb3dNYXBUeXBlLCBTUkdCQ29sb3JTcGFjZSxcclxuICBWU01TaGFkb3dNYXBcclxufSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7T3V0cHV0RW5jb2Rpbmd9IGZyb20gJy4uL2VudW0vb3V0cHV0LWVuY29kaW5nLmVudW0nO1xyXG5pbXBvcnQge05hdmlnYXRvclR5cGV9IGZyb20gJy4uLy4uL3NoYXJlZC9zY3JlZW4tc2l6ZS1hbmFseXNpcy9uYXZpZ2F0b3ItdHlwZS5lbnVtJztcclxuaW1wb3J0IHtMaWdodFByZXNldEludGVyZmFjZX0gZnJvbSAnLi4vaW50ZXJmYWNlL2xpZ2h0LXByZXNldC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0xpZ2h0UHJvcGVydGllc30gZnJvbSAnLi9saWdodC1wcm9wZXJ0aWVzJztcclxuaW1wb3J0IHtDb2xvclNwYWNlfSBmcm9tICd0aHJlZS9zcmMvY29uc3RhbnRzJztcclxuXHJcblxyXG5leHBvcnQgY29uc3Qgc2hhZG93TWFwVHlwZXNNYXA6IE1hcDxTaGFkb3dNYXBMb2NhbFR5cGUsIFNoYWRvd01hcFR5cGU+ID0gbmV3IE1hcChbXHJcbiAgW1NoYWRvd01hcExvY2FsVHlwZS5CYXNpY1NoYWRvd01hcCwgQmFzaWNTaGFkb3dNYXBdLFxyXG4gIFtTaGFkb3dNYXBMb2NhbFR5cGUuUENGU2hhZG93TWFwLCBQQ0ZTaGFkb3dNYXBdLFxyXG4gIFtTaGFkb3dNYXBMb2NhbFR5cGUuUENGU29mdFNoYWRvd01hcCwgUENGU29mdFNoYWRvd01hcF0sXHJcbiAgW1NoYWRvd01hcExvY2FsVHlwZS5WU01TaGFkb3dNYXAsIFZTTVNoYWRvd01hcF1cclxuXSk7XHJcblxyXG5leHBvcnQgY29uc3Qgb3V0cHV0RW5jb2RpbmdNYXA6IE1hcDxPdXRwdXRFbmNvZGluZywgQ29sb3JTcGFjZT4gPSBuZXcgTWFwKFtcclxuICBbT3V0cHV0RW5jb2RpbmcuTGluZWFyU1JHQkNvbG9yU3BhY2UsIExpbmVhclNSR0JDb2xvclNwYWNlXSxcclxuICBbT3V0cHV0RW5jb2RpbmcuU1JHQkNvbG9yU3BhY2UsIFNSR0JDb2xvclNwYWNlXVxyXG5dKTtcclxuXHJcbmV4cG9ydCBjbGFzcyBMaWdodFByZXNldCB7XHJcbiAgcHVibGljIGlkOiBzdHJpbmc7XHJcbiAgcHVibGljIG5hbWU6IHN0cmluZyA9ICduYWFtbG9vcyc7XHJcbiAgcHVibGljIG5hdmlnYXRvclR5cGU6IE5hdmlnYXRvclR5cGU7XHJcbiAgcHVibGljIGRlZmF1bHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc3RhbmRhbG9uZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBncm91cDogc3RyaW5nO1xyXG4gIHB1YmxpYyBzaGFkb3dNYXBUeXBlOiBTaGFkb3dNYXBMb2NhbFR5cGUgPSBTaGFkb3dNYXBMb2NhbFR5cGUuUENGU29mdFNoYWRvd01hcDtcclxuICBwdWJsaWMgb3V0cHV0RW5jb2Rpbmc6IE91dHB1dEVuY29kaW5nID0gT3V0cHV0RW5jb2RpbmcuTGluZWFyU1JHQkNvbG9yU3BhY2U7XHJcbiAgcHVibGljIHNoYWRvd1JhZGl1czogbnVtYmVyO1xyXG4gIHB1YmxpYyB0b25lTWFwcGluZ0V4cG9zdXJlOiBudW1iZXIgPSAxO1xyXG4gIHB1YmxpYyBwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBsaWdodHM6IExpZ2h0UHJvcGVydGllc1tdID0gW107XHJcbiAgcHVibGljIGRpcnR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5pZCA9IHRoaXMuX2dlbmVyYXRlVW5pcXVlSWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgQ3JlYXRlTW9kZWxGcm9tSW50ZXJmYWNlKG1vZGVsSW50ZXJmYWNlOiBMaWdodFByZXNldEludGVyZmFjZSk6IExpZ2h0UHJlc2V0IHtcclxuICAgIGNvbnN0IG1vZGVsOiBMaWdodFByZXNldCA9IG5ldyBMaWdodFByZXNldCgpO1xyXG4gICAgaWYgKG1vZGVsSW50ZXJmYWNlLmlkKSB7XHJcbiAgICAgIG1vZGVsLmlkID0gbW9kZWxJbnRlcmZhY2UuaWQ7XHJcbiAgICB9XHJcbiAgICBtb2RlbC5uYW1lID0gbW9kZWxJbnRlcmZhY2UubmFtZTtcclxuICAgIG1vZGVsLmRlZmF1bHQgPSBtb2RlbEludGVyZmFjZS5kZWZhdWx0O1xyXG4gICAgbW9kZWwuc3RhbmRhbG9uZSA9IG1vZGVsSW50ZXJmYWNlLnN0YW5kYWxvbmU7XHJcbiAgICBtb2RlbC5ncm91cCA9IG1vZGVsSW50ZXJmYWNlLmdyb3VwO1xyXG4gICAgbW9kZWwubmF2aWdhdG9yVHlwZSA9IG1vZGVsSW50ZXJmYWNlLm5hdmlnYXRvclR5cGU7XHJcbiAgICBpZiAoQXJyYXkuZnJvbShzaGFkb3dNYXBUeXBlc01hcC5lbnRyaWVzKCkpLmZpbmQoKGtleSwgdmFsdWUpID0+IGtleVsxXSA9PT0gbW9kZWxJbnRlcmZhY2Uuc2hhZG93TWFwVHlwZSkpIHtcclxuICAgICAgbW9kZWwuc2hhZG93TWFwVHlwZSA9IG1vZGVsSW50ZXJmYWNlLnNoYWRvd01hcFR5cGUgP1xyXG4gICAgICAgIEFycmF5LmZyb20oc2hhZG93TWFwVHlwZXNNYXAuZW50cmllcygpKS5maW5kKChrZXksIHZhbHVlKSA9PiBrZXlbMV0gPT09IG1vZGVsSW50ZXJmYWNlLnNoYWRvd01hcFR5cGUpWzBdIDpcclxuICAgICAgICBTaGFkb3dNYXBMb2NhbFR5cGUuUENGU29mdFNoYWRvd01hcDtcclxuICAgIH1cclxuICAgIGlmIChBcnJheS5mcm9tKG91dHB1dEVuY29kaW5nTWFwLmVudHJpZXMoKSkuZmluZCgoa2V5LCB2YWx1ZSkgPT4ga2V5WzFdID09PSBtb2RlbEludGVyZmFjZS5vdXRwdXRFbmNvZGluZykpIHtcclxuICAgICAgbW9kZWwub3V0cHV0RW5jb2RpbmcgPSBtb2RlbEludGVyZmFjZS5vdXRwdXRFbmNvZGluZyA/XHJcbiAgICAgICAgQXJyYXkuZnJvbShvdXRwdXRFbmNvZGluZ01hcC5lbnRyaWVzKCkpLmZpbmQoKGtleSwgdmFsdWUpID0+IGtleVsxXSA9PT0gbW9kZWxJbnRlcmZhY2Uub3V0cHV0RW5jb2RpbmcpWzBdIDpcclxuICAgICAgICBPdXRwdXRFbmNvZGluZy5TUkdCQ29sb3JTcGFjZTtcclxuICAgIH1cclxuICAgIG1vZGVsLnNoYWRvd1JhZGl1cyA9IG1vZGVsSW50ZXJmYWNlLnNoYWRvd1JhZGl1cztcclxuICAgIG1vZGVsLnRvbmVNYXBwaW5nRXhwb3N1cmUgPSBtb2RlbEludGVyZmFjZS50b25lTWFwcGluZ0V4cG9zdXJlID8gbW9kZWxJbnRlcmZhY2UudG9uZU1hcHBpbmdFeHBvc3VyZSA6IDE7XHJcbiAgICBtb2RlbC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyA9IG1vZGVsSW50ZXJmYWNlLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzID8gbW9kZWxJbnRlcmZhY2UucGh5c2ljYWxseUNvcnJlY3RMaWdodHMgOiBmYWxzZTtcclxuICAgIG1vZGVsSW50ZXJmYWNlLmxpZ2h0cy5mb3JFYWNoKChsaWdodDogTGlnaHRQcm9wZXJ0aWVzKSA9PiBtb2RlbC5saWdodHMucHVzaChMaWdodFByb3BlcnRpZXMuQ3JlYXRlTmV3KGxpZ2h0KSkpO1xyXG4gICAgcmV0dXJuIG1vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2VuZXJhdGVVbmlxdWVJZCgpOiBzdHJpbmcge1xyXG4gICAgZnVuY3Rpb24gczQoKSB7XHJcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKVxyXG4gICAgICAgIC50b1N0cmluZygxNilcclxuICAgICAgICAuc3Vic3RyaW5nKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzNCgpICsgczQoKSArIHM0KCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -344,9 +344,7 @@ export class HomedecoratorConnectorAdapterService {
|
|
|
344
344
|
}
|
|
345
345
|
store3DModelCDN(filename, fileContents) {
|
|
346
346
|
return __awaiter(this, void 0, void 0, function* () {
|
|
347
|
-
|
|
348
|
-
const int8Array = new Int8Array(fileContents);
|
|
349
|
-
const response = yield this.mainApi.uploadModelToCDN(filename, int8Array);
|
|
347
|
+
const response = yield this.mainApi.uploadModelToCDN(filename, fileContents);
|
|
350
348
|
if (response && response.validationResult && response.validationResult.success) {
|
|
351
349
|
return response.resultObject;
|
|
352
350
|
}
|
|
@@ -357,7 +355,7 @@ export class HomedecoratorConnectorAdapterService {
|
|
|
357
355
|
}
|
|
358
356
|
getCatalogDefinitionsList() {
|
|
359
357
|
return __awaiter(this, void 0, void 0, function* () {
|
|
360
|
-
const response = yield this.
|
|
358
|
+
const response = yield this.articleApi.getCatalogDefinitions().catch(e => {
|
|
361
359
|
return new DataServiceResponseData();
|
|
362
360
|
});
|
|
363
361
|
if (response && response.validationResult && response.validationResult.success) {
|
|
@@ -373,7 +371,7 @@ export class HomedecoratorConnectorAdapterService {
|
|
|
373
371
|
if (!externalSourceId) {
|
|
374
372
|
return null;
|
|
375
373
|
}
|
|
376
|
-
const response = yield this.
|
|
374
|
+
const response = yield this.articleApi.getExternalSource(externalSourceId);
|
|
377
375
|
if (response && response.validationResult && response.validationResult.success) {
|
|
378
376
|
if (response.resultObject) {
|
|
379
377
|
return this._boFactory.makeWithRawBackendData(ExternalSource, response.resultObject);
|
|
@@ -451,4 +449,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
451
449
|
providedIn: 'root'
|
|
452
450
|
}]
|
|
453
451
|
}], ctorParameters: function () { return [{ type: i1.HomedecoratorAppEventService }]; } });
|
|
454
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHN0IsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBRTFFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUMvRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDdEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUd0RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFHdkQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBQ3ZHLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdURBQXVELENBQUM7QUFDbEYsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFDcEcsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBRTNFLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBRTFHLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHdEQUF3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QUksQ0FBQyxFQUFFO1lBQzlDLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuRDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7a0lBblpVLG9DQUFvQztzSUFBcEMsb0NBQW9DLGNBRm5DLE1BQU07NEZBRVAsb0NBQW9DO2tCQUhoRCxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge0Fuc3dlcn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hbnN3ZXInO1xyXG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9zZWxlY3Rpb24nO1xyXG5pbXBvcnQge1F1ZXN0aW9ufSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL3F1ZXN0aW9uJztcclxuaW1wb3J0IHtBbnN3ZXJQcmljZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hbnN3ZXItcHJpY2UnO1xyXG5pbXBvcnQge0FydGljbGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZSc7XHJcbmltcG9ydCB7RGVjb05vZGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvZGVjby1ub2RlJztcclxuaW1wb3J0IHtTa2lwQnV0dG9uSW5mb30gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9za2lwLWJ1dHRvbi1pbmZvJztcclxuaW1wb3J0IHtDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnR9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvY29uZmlndXJhdG9yLXN0YXRpc3RpY3MtZW52aXJvbm1lbnQnO1xyXG5pbXBvcnQge09wdGlvbnN9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL29wdGlvbnMnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRvcn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaSc7XHJcbmltcG9ydCB7SW50ZXJuYWxQYXJhbX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvZW51bS9pbnRlcm5hbC1wYXJhbS5lbnVtJztcclxuaW1wb3J0IHtRdWVzdGlvbkFuZEFuc3dlcnN9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvcXVlc3Rpb24tYW5kLWFuc3dlcnMnO1xyXG5pbXBvcnQge01haW5BcGl9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpJztcclxuaW1wb3J0IHtEYXRhU2VydmljZVJlc3BvbnNlRGF0YX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvZGF0YS1zZXJ2aWNlLXJlc3BvbnNlLWRhdGEnO1xyXG5pbXBvcnQge0FydGljbGVzfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9hcnRpY2xlcyc7XHJcbmltcG9ydCB7QXJ0aWNsZVRleHR9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS10ZXh0LmJvJztcclxuaW1wb3J0IHtCdXNpbmVzc09iamVjdEZhY3Rvcnl9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL3NlcnZpY2UvYnVzaW5lc3Mtb2JqZWN0LWZhY3RvcnknO1xyXG5pbXBvcnQge0ltYWdlVXRpbHN9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL3V0aWxzL2ltYWdlLXV0aWxzJztcclxuaW1wb3J0IHtFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mb1JlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2V4dGVybmFsLWNhdGFsb2ctc3RhcnR1cC1pbmZvLXJlcXVlc3QnO1xyXG5pbXBvcnQge0V4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1jYXRhbG9nLXN0YXJ0dXAtaW5mbyc7XHJcbmltcG9ydCB7TG9naW5SZXNwb25zZX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvbG9naW4tcmVzcG9uc2UnO1xyXG5pbXBvcnQge0NhdGFsb2dEZWZpbml0aW9ufSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9jYXRhbG9nLWRlZmluaXRpb24uYm8nO1xyXG5pbXBvcnQge0V4dGVybmFsU291cmNlfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1zb3VyY2UuYm8nO1xyXG5pbXBvcnQge0FydGljbGVGdWxsT2JqZWN0fSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWZ1bGwtb2JqZWN0JztcclxuaW1wb3J0IHtBcnRpY2xlQ2F0ZWdvcnl9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1jYXRlZ29yeSc7XHJcbmltcG9ydCB7QXJ0aWNsZUZsYXR9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZmxhdC5ibyc7XHJcbmltcG9ydCB7VXNlclJvbGVUeXBlfSBmcm9tICcuLi9lbnVtL3VzZXItcm9sZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2V9IGZyb20gJy4vaG9tZWRlY29yYXRvci1hcHAtZXZlbnQuc2VydmljZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXh0ZXJuYWxDb25uZWN0b3Ige1xyXG4gIHB1YmxpYyBsb2dpblJlc3BvbnNlOiBMb2dpblJlc3BvbnNlO1xyXG4gIHB1YmxpYyBjb25uZWN0b3I6IENvbm5lY3RvcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3Ige1xyXG4gIGNvbm5lY3Rvcj86IENvbmZpZ3VyYXRvcjtcclxuICBhcnRpY2xlQXBpPzogQXJ0aWNsZXM7XHJcbiAgbWFpbkFwaT86IE1haW5BcGk7XHJcbn1cclxuXHJcbi8vIFNvbGUgcmVzcG9uc2liaWxpdHkgaXMgc2ltcGx5IHRvIHdyYXAgYXJvdW5kIGEgY29saWpuLkNvbm5lY3RvciB0byBjcmVhdGUgYSBzdGFibGUgaW5uZXIgaW50ZXJmYWNlIHRvIHRoZSBsaWJyYXJ5IGluIGEgMToxIG1ldGhvZCB3YXkuXHJcbi8vIE9ubHkgdG8gYmUgdXNlZCBieSB0aGUgSU9uZUNvbnRyb2xsZXJTZXJ2aWNlLlxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2Uge1xyXG4gIHB1YmxpYyByZWFkb25seSBxdWVzdGlvblJlY2VpdmVkOiBTdWJqZWN0PFF1ZXN0aW9uPiA9IG5ldyBTdWJqZWN0PFF1ZXN0aW9uPigpO1xyXG4gIHB1YmxpYyByZWFkb25seSBzaG93TG9hZGVyOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvblJlc2V0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfcHVibGljYXRpb25Db2RlRm9yVXNlclJvbGU6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPihbXHJcbiAgICBbVXNlclJvbGVUeXBlLkN1c3RvbWVyLCAxNl0sXHJcbiAgICBbVXNlclJvbGVUeXBlLkVtcGxveWVlLCAxXVxyXG4gIF0pO1xyXG5cclxuICBwdWJsaWMgZ2V0IGNvbm5lY3RvcigpOiBDb25maWd1cmF0b3Ige1xyXG4gICAgaWYgKCF0aGlzLmV4dGVybmFsU291cmNlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3I7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3JzW3RoaXMuZXh0ZXJuYWxTb3VyY2VdLmNvbm5lY3Rvci5jb25uZWN0b3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFydGljbGVBcGkoKTogQXJ0aWNsZXMge1xyXG4gICAgaWYgKCF0aGlzLmV4dGVybmFsU291cmNlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9hcnRpY2xlQXBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yc1t0aGlzLmV4dGVybmFsU291cmNlXS5jb25uZWN0b3IuYXJ0aWNsZUFwaTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbWFpbkFwaSgpOiBNYWluQXBpIHtcclxuICAgIGlmICghdGhpcy5leHRlcm5hbFNvdXJjZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fbWFpbkFwaTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RvcnNbdGhpcy5leHRlcm5hbFNvdXJjZV0uY29ubmVjdG9yLm1haW5BcGk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29ubmVjdG9yczogRXh0ZXJuYWxDb25uZWN0b3IgPSBuZXcgRXh0ZXJuYWxDb25uZWN0b3IoKTtcclxuICBwdWJsaWMgZXh0ZXJuYWxTb3VyY2U6IHN0cmluZztcclxuICBwdWJsaWMgbG9naW5SZXNwb25zZTogTG9naW5SZXNwb25zZTtcclxuICBwcml2YXRlIF9jb25uZWN0b3I/OiBDb25maWd1cmF0b3I7XHJcbiAgcHJpdmF0ZSBfYXJ0aWNsZUFwaTogQXJ0aWNsZXM7XHJcbiAgcHJpdmF0ZSBfbWFpbkFwaTogTWFpbkFwaTtcclxuICBwcml2YXRlIF9ib0ZhY3Rvcnk6IEJ1c2luZXNzT2JqZWN0RmFjdG9yeSA9IG5ldyBCdXNpbmVzc09iamVjdEZhY3RvcnkoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9hcHBFdmVudFNlcnZpY2U6IEhvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0Q29ubmVjdG9yKG9wdGlvbnM6IE9wdGlvbnMsIGV4dGVybmFsU291cmNlPzogc3RyaW5nLCBmb3JjZVJlbG9hZD86IGJvb2xlYW4sIGV4dGVybmFsU291cmNlSWQ/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChleHRlcm5hbFNvdXJjZSA9PT0gdW5kZWZpbmVkIHx8IGV4dGVybmFsU291cmNlID09PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IHJlbmV3Q29ubmVjdG9yOiBib29sZWFuID0gKHRoaXMuX2Nvbm5lY3RvciA/IHRoaXMuX2Nvbm5lY3Rvci51cmwgIT09IG9wdGlvbnMudXJsIDogZmFsc2UpIHx8IGZvcmNlUmVsb2FkO1xyXG4gICAgICBpZiAoIXRoaXMuX2Nvbm5lY3RvciB8fCByZW5ld0Nvbm5lY3Rvcikge1xyXG4gICAgICAgIHRoaXMuX2Nvbm5lY3RvciA9IG5ldyBDb25maWd1cmF0b3Iob3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5sb2dpblJlc3BvbnNlID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmNvbm5lY3QoKTtcclxuICAgICAgICB0aGlzLl9jb25uZWN0b3Iuc2hvd0xvYWRlci5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5zaG93TG9hZGVyLm5leHQodmFsdWUpKTtcclxuICAgICAgICB0aGlzLl9jb25uZWN0b3IuY29ubmVjdGlvblJlc2V0SW5hY3Rpdml0eS5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5jb25uZWN0aW9uUmVzZXQubmV4dCgpKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuX2FydGljbGVBcGkgfHwgcmVuZXdDb25uZWN0b3IpIHtcclxuICAgICAgICB0aGlzLl9hcnRpY2xlQXBpID0gbmV3IEFydGljbGVzKG9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5fbWFpbkFwaSB8fCByZW5ld0Nvbm5lY3Rvcikge1xyXG4gICAgICAgIHRoaXMuX21haW5BcGkgPSBuZXcgTWFpbkFwaShvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmV4dGVybmFsU291cmNlID0gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLmNvbm5lY3RvcnMuaGFzT3duUHJvcGVydHkoZXh0ZXJuYWxTb3VyY2UpKSB7XHJcbiAgICAgICAgaWYgKGV4dGVybmFsU291cmNlSWQgIT09IG51bGwpIHtcclxuICAgICAgICAgIGNvbnN0IGV4dGVybmFsU291cmNlRGF0YTogRXh0ZXJuYWxTb3VyY2UgPSBhd2FpdCB0aGlzLmdldEV4dGVybmFsU291cmNlKGV4dGVybmFsU291cmNlSWQpO1xyXG4gICAgICAgICAgaWYgKGV4dGVybmFsU291cmNlRGF0YSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZXh0ZXJuYWxTb3VyY2VEYXRhLnBhc3N3b3JkICE9PSB1bmRlZmluZWQgJiYgZXh0ZXJuYWxTb3VyY2VEYXRhLnVzZXJuYW1lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICBvcHRpb25zLnBhc3N3b3JkID0gZXh0ZXJuYWxTb3VyY2VEYXRhLnBhc3N3b3JkO1xyXG4gICAgICAgICAgICAgIG9wdGlvbnMudXNlcm5hbWUgPSBleHRlcm5hbFNvdXJjZURhdGEudXNlcm5hbWU7XHJcbiAgICAgICAgICAgICAgb3B0aW9ucy51c2VMb2dpbkVuY3J5cHRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGV4dGVybmFsTWFpbkFwaTogTWFpbkFwaSA9IG5ldyBNYWluQXBpKG9wdGlvbnMpO1xyXG4gICAgICAgIGNvbnN0IGV4dGVybmFsVmVyc2lvbjogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCBleHRlcm5hbE1haW5BcGkuZ2V0UHVibGljUGFyYW1zKCtvcHRpb25zLnNjaGVtYSkuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChleHRlcm5hbFZlcnNpb24gJiYgZXh0ZXJuYWxWZXJzaW9uWydjYXRhbG9nU2V0dGluZ3MnXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBjb25zdCBjYXRhbG9nU2V0dGluZ3MgPSBKU09OLnBhcnNlKGV4dGVybmFsVmVyc2lvblsnY2F0YWxvZ1NldHRpbmdzJ10pO1xyXG4gICAgICAgICAgb3B0aW9ucy52ZXJzaW9uID0gY2F0YWxvZ1NldHRpbmdzLnZlcnNpb247XHJcbiAgICAgICAgICBjb25zdCBleHRlcm5hbENvbmZpZ3VyYXRvcjogQ29uZmlndXJhdG9yID0gbmV3IENvbmZpZ3VyYXRvcihvcHRpb25zKTtcclxuICAgICAgICAgIGNvbnN0IGxvZ2luUmVzcG9uc2U6IExvZ2luUmVzcG9uc2UgPSBhd2FpdCBleHRlcm5hbENvbmZpZ3VyYXRvci5jb25uZWN0KCkuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGxvZ2luUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgZXh0ZXJuYWxBcnRpY2xlQXBpOiBBcnRpY2xlcyA9IG5ldyBBcnRpY2xlcyhvcHRpb25zKTtcclxuICAgICAgICAgICAgZXh0ZXJuYWxDb25maWd1cmF0b3Iuc2hvd0xvYWRlci5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5zaG93TG9hZGVyLm5leHQodmFsdWUpKTtcclxuICAgICAgICAgICAgZXh0ZXJuYWxDb25maWd1cmF0b3IuY29ubmVjdGlvblJlc2V0SW5hY3Rpdml0eS5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5jb25uZWN0aW9uUmVzZXQubmV4dCgpKTtcclxuICAgICAgICAgICAgY29uc3QgZXh0ZXJuYWxDb25uZWN0b3I6IEV4dGVybmFsQ29ubmVjdG9yID0gbmV3IEV4dGVybmFsQ29ubmVjdG9yKCk7XHJcbiAgICAgICAgICAgIGV4dGVybmFsQ29ubmVjdG9yLmxvZ2luUmVzcG9uc2UgPSBsb2dpblJlc3BvbnNlO1xyXG4gICAgICAgICAgICBleHRlcm5hbENvbm5lY3Rvci5jb25uZWN0b3IgPSB7Y29ubmVjdG9yOiBleHRlcm5hbENvbmZpZ3VyYXRvciwgbWFpbkFwaTogZXh0ZXJuYWxNYWluQXBpLCBhcnRpY2xlQXBpOiBleHRlcm5hbEFydGljbGVBcGl9O1xyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RvcnNbZXh0ZXJuYWxTb3VyY2VdID0gZXh0ZXJuYWxDb25uZWN0b3I7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxTb3VyY2UgPSBleHRlcm5hbFNvdXJjZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2dPdXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3Rvci5sb2dPdXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQdWJsaWNhdGlvbkNvZGVCYXNlZE9uTG9naW4oKTogbnVtYmVyIHtcclxuICAgIGxldCByb2w6IHN0cmluZztcclxuICAgIGlmICh0aGlzLmV4dGVybmFsU291cmNlKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbm5lY3RvcnMuaGFzT3duUHJvcGVydHkodGhpcy5leHRlcm5hbFNvdXJjZSkpIHtcclxuICAgICAgICBjb25zdCBleHRlcm5hbENvbm5lY3RvciA9IHRoaXMuY29ubmVjdG9yc1t0aGlzLmV4dGVybmFsU291cmNlXTtcclxuICAgICAgICBpZiAoZXh0ZXJuYWxDb25uZWN0b3IgJiYgZXh0ZXJuYWxDb25uZWN0b3IubG9naW5SZXNwb25zZSkge1xyXG4gICAgICAgICAgcm9sID0gZXh0ZXJuYWxDb25uZWN0b3IubG9naW5SZXNwb25zZS5yb2w7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5sb2dpblJlc3BvbnNlKSB7XHJcbiAgICAgICAgcm9sID0gdGhpcy5sb2dpblJlc3BvbnNlLnJvbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJvbCkge1xyXG4gICAgICBjb25zdCBwdWJDb2RlOiBudW1iZXIgPSB0aGlzLl9nZXRQdWJsaWNhdGlvbkNvZGVGb3JSb2xlKHJvbCk7XHJcbiAgICAgIGlmIChwdWJDb2RlICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHB1YkNvZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFdlYlZpZXdTdGFydHVwSW5mbyhyZXF1ZXN0OiBFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mb1JlcXVlc3QpOiBQcm9taXNlPEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvPiB7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVBcGkuZ2V0V2Vidmlld1N0YXJ0dXBJbmZvKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mbywgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0R29vZElkRnJvbUFydGljbGVOcihza3U6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVBcGkuZ2V0R29vZElkRnJvbUFydGljbGVOcihza3UpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0Tm9kZUluc3RhbmNlKGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5pbml0Tm9kZUluc3RhbmNlKGdvb2RJZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hhbmdlQ29ubmVjdGlvbihpbnN0YW5jZUlkOiBzdHJpbmcsIG9sZENvbm5lY3Rpb246IHN0cmluZywgbmV3Q29ubmVjdGlvbjogc3RyaW5nKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNoYW5nZUNvbm5lY3Rpb24oaW5zdGFuY2VJZCwgb2xkQ29ubmVjdGlvbiwgbmV3Q29ubmVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29weUluc3RhbmNlKGluc3RhbmNlSWQ6IHN0cmluZywgc2hvdWxkU2F2ZUN1cnJlbnRJbnN0YW5jZUlkOiBib29sZWFuKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNvcHlJbnN0YW5jZShpbnN0YW5jZUlkLCBzaG91bGRTYXZlQ3VycmVudEluc3RhbmNlSWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNhdmVDb25maWd1cmF0aW9ucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGF3YWl0IHRoaXMuY29ubmVjdG9yLnNhdmVDb25maWd1cmF0aW9ucygpLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0pO1xyXG4gICAgLy8gc2F2ZSBleHRlcm5hbCBzb3VyY2VzXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbm5lY3RvcnMpIHtcclxuICAgICAgaWYgKHRoaXMuY29ubmVjdG9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgY29uc3QgY29ubmVjdG9yID0gdGhpcy5jb25uZWN0b3JzW2tleV0uY29ubmVjdG9yLmNvbm5lY3RvcjtcclxuICAgICAgICBhd2FpdCBjb25uZWN0b3Iuc2F2ZUNvbmZpZ3VyYXRpb25zKCkuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyBAcmV0dXJucyBUaGUgaW5pdGlhbCBhcnRpY2xlXHJcbiAgcHVibGljIGFzeW5jIGdldEFydGljbGUoc2t1OiBzdHJpbmcsIGJyYW5jaDogc3RyaW5nKTogUHJvbWlzZTxBcnRpY2xlPiB7XHJcbiAgICBjb25zdCBnb29kSWQ6IG51bWJlciA9IGF3YWl0IHRoaXMuZ2V0R29vZElkRnJvbUFydGljbGVOcihza3UpO1xyXG4gICAgaWYgKGdvb2RJZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRBcnRpY2xlUXVpY2tTZWwoZ29vZElkLCBicmFuY2gpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZVF1aWNrU2VsKGdvb2RJZDogbnVtYmVyLCBicmFuY2g6IHN0cmluZyk6IFByb21pc2U8QXJ0aWNsZT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQXBpLmdldEFydGljbGVRdWlja1NlbChnb29kSWQsIGJyYW5jaCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGUsIHJlc3BvbnNlLnJlc3VsdE9iamVjdC5vQXJ0aWNsZVswXSkgYXMgQXJ0aWNsZTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIGxvYWRTZWxlY3Rpb25zKCk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5jb25uZWN0b3IuZ2V0U2VsZWN0aW9ucygpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHVibGljIGdldFF1ZXN0aW9uQW5kQW5zd2VycygpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMuY29ubmVjdG9yLmdldFF1ZXN0aW9uQW5kQW5zd2VycygpO1xyXG4gIC8vIH1cclxuXHJcbiAgcHVibGljIGdldFF1ZXN0aW9uQW5kQW5zd2Vyc0FzeW5jKCk6IFByb21pc2U8UXVlc3Rpb25BbmRBbnN3ZXJzPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2VsZWN0aW9uc0FzeW5jKCk6IFByb21pc2U8U2VsZWN0aW9uW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFNlbGVjdGlvbnMoKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoU2VsZWN0aW9uLCByZXNwb25zZS5yZXN1bHRPYmplY3RzKSBhcyBTZWxlY3Rpb25bXTtcclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZWNvc0FzeW5jKCk6IFByb21pc2U8RGVjb05vZGVbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0RGVjb3MoKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoRGVjb05vZGUsIHJlc3BvbnNlLnJlc3VsdE9iamVjdHMpIGFzIERlY29Ob2RlW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QW5zd2VyUHJpY2VzKCk6IFByb21pc2U8QW5zd2VyUHJpY2VbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0QW5zd2Vyc1ByaWNlcygpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShBbnN3ZXJQcmljZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0cykgYXMgQW5zd2VyUHJpY2VbXTtcclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRKc29uQ29uZmlndXJlZEFydGljbGVzKGdvb2RJZDogbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvb2RUeXBlOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IG51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TG9hZGVyOiBib29sZWFuID0gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUlkPzogbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3M/OiBDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnQpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYXJ0aWNsZUFwaS5nZXRKc29uQXJ0aWNsZUZsYXRUcmVlKGdvb2RJZCwgZ29vZFR5cGUsIHF1YW50aXR5LCBzaG93TG9hZGVyLCBpbnN0YW5jZUlkLCBjb25maWd1cmF0b3JTdGF0aXN0aWNzKTtcclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyBnZXRKc29uTWF0Y2hUYWJsZUFydGljbGVzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEpzb25NYXRjaFRhYmxlQXJ0aWNsZXMoKTtcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRJbnN0YW5jZVRvQ29uZmlndXJlKGlkOiBzdHJpbmcpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICBpZiAoaWQgIT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnNldEluc3RhbmNlVG9Db25maWd1cmUoaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG5ldyBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNlbGVjdEFuc3dlcihhbnN3ZXI6IEFuc3dlciwgdXNlcklucHV0Pzogc3RyaW5nKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnNlbGVjdEFuc3dlcihhbnN3ZXIsIGZhbHNlLCB1c2VySW5wdXQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEFuc3dlcihnZXRBbnN3ZXJzQW5kUXVlc3Rpb246IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNhbmNlbEFuc3dlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFNlbGVjdGlvbihcclxuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uLCBmb3JjZUJhY2tUb05vZGU/OiBib29sZWFuLCBhZnRlcj86IGJvb2xlYW4sIGNvbm5lY3Rvcj86IHN0cmluZyk6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5zZWxlY3RTZWxlY3Rpb24oc2VsZWN0aW9uLCBmYWxzZSwgZm9yY2VCYWNrVG9Ob2RlLCBhZnRlciwgY29ubmVjdG9yKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVwbGFjZVNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbik6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5yZXBsYWNlU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0SW1hZ2VGb3JBbnN3ZXJPclNlbGVjdGlvbihcclxuICAgIGFuc3dlck9yU2VsZWN0aW9uOiBBbnN3ZXIgfCBTZWxlY3Rpb24sIHB1YmxpY2F0aW9uOiBudW1iZXIsIHRodW1iTmFpbDogYm9vbGVhbiA9IHRydWUsIHNob3dMb2FkZXI6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUFwaS5nZXRTaW5nbGVJbWFnZShhbnN3ZXJPclNlbGVjdGlvbi5ub2RlSWQsIHB1YmxpY2F0aW9uLCB0cnVlLCB0aHVtYk5haWwpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzICYmIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkge1xyXG4gICAgICBpZiAocmVzcG9uc2UucmVzdWx0T2JqZWN0LmZpbGVQYXRoICE9PSBudWxsICYmIHJlc3BvbnNlLnJlc3VsdE9iamVjdC5maWxlUGF0aCAhPT0gdW5kZWZpbmVkICYmIHJlc3BvbnNlLnJlc3VsdE9iamVjdC5maWxlUGF0aCAhPT0gJycpIHtcclxuICAgICAgICByZXR1cm4gSW1hZ2VVdGlscy5nZXRGaXhlZEltYWdlRmlsZXBhdGhVcmwocmVzcG9uc2UucmVzdWx0T2JqZWN0LmZpbGVQYXRoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gSW1hZ2VVdGlscy5nZXREb2NCb2R5V2l0aE1pbWVUeXBlRGVmaW5pdGlvbihyZXNwb25zZS5yZXN1bHRPYmplY3QuZmlsZU5hbWUsXHJcbiAgICAgICAgICB0aHVtYk5haWwgPyByZXNwb25zZS5yZXN1bHRPYmplY3QudGh1bWJuYWlsQm9keSA6IHJlc3BvbnNlLnJlc3VsdE9iamVjdC5kb2N1bWVudEJvZHkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2tpcEJ1dHRvbkltYWdlQW5kVGV4dChnb29kSWQ/OiBudW1iZXIpOiBQcm9taXNlPFNraXBCdXR0b25JbmZvPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRTa2lwQnV0dG9uSW1hZ2VBbmRUZXh0KGdvb2RJZCwgZmFsc2UpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShTa2lwQnV0dG9uSW5mbywgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyBTa2lwQnV0dG9uSW5mbztcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE1vb2RJbWFnZUZvckFuc3dlclNlbGVjdGlvbihhbnN3ZXJPclNlbGVjdGlvbjogQW5zd2VyIHwgU2VsZWN0aW9uLCB0aHVtYk5haWw6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLmdldEltYWdlRm9yQW5zd2VyT3JTZWxlY3Rpb24oYW5zd2VyT3JTZWxlY3Rpb24sIDMyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRBbnN3ZXJJbmZvKGFuc3dlcjogQW5zd2VyKTogUHJvbWlzZTxBcnRpY2xlVGV4dFtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRBbnN3ZXJUZXh0cyhhbnN3ZXIubm9kZUlkLCBmYWxzZSk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KEFydGljbGVUZXh0LCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIEFydGljbGVUZXh0W107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0SW50ZXJuYWxQYXJhbWV0ZXIocGFyYW1ldGVyOiBJbnRlcm5hbFBhcmFtKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMubWFpbkFwaS5nZXRJbnRlcm5hbFBhcmFtZXRlclZhbHVlKHBhcmFtZXRlcik7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzdG9yZTNETW9kZWxDRE4oZmlsZW5hbWU6IHN0cmluZywgZmlsZUNvbnRlbnRzOiBBcnJheUJ1ZmZlcik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAvLyBjb252ZXJ0IEFycmF5QnVmZmVyIHRvIEludDhBcnJheSBzbyB0aGUgbWlkZGxldGllciB1bmRlcnN0YW5kIGl0XHJcbiAgICBjb25zdCBpbnQ4QXJyYXk6IEludDhBcnJheSA9IG5ldyBJbnQ4QXJyYXkoZmlsZUNvbnRlbnRzKTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMubWFpbkFwaS51cGxvYWRNb2RlbFRvQ0ROKGZpbGVuYW1lLCBpbnQ4QXJyYXkpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Q2F0YWxvZ0RlZmluaXRpb25zTGlzdCgpOiBQcm9taXNlPENhdGFsb2dEZWZpbml0aW9uW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuX2FydGljbGVBcGkuZ2V0Q2F0YWxvZ0RlZmluaXRpb25zKCkuY2F0Y2goZSA9PiB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0YVNlcnZpY2VSZXNwb25zZURhdGEoKTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShDYXRhbG9nRGVmaW5pdGlvbiwgcmVzcG9uc2UucmVzdWx0T2JqZWN0cykgYXMgQ2F0YWxvZ0RlZmluaXRpb25bXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IocmVzcG9uc2UudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEV4dGVybmFsU291cmNlKGV4dGVybmFsU291cmNlSWQ6IG51bWJlcik6IFByb21pc2U8RXh0ZXJuYWxTb3VyY2U+IHtcclxuICAgIGlmICghZXh0ZXJuYWxTb3VyY2VJZCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuX2FydGljbGVBcGkuZ2V0RXh0ZXJuYWxTb3VyY2UoZXh0ZXJuYWxTb3VyY2VJZCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdE9iamVjdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShFeHRlcm5hbFNvdXJjZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyBFeHRlcm5hbFNvdXJjZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihyZXNwb25zZSAmJiByZXNwb25zZS5tZXNzYWdlID8gcmVzcG9uc2UubWVzc2FnZSA6ICdFcnJvciByZXRyaWV2aW5nIGV4dGVybmFsIHNvdXJjZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlRnVsbE9iamVjdD4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUFwaS5nZXRBcnRpY2xlRnVsbE9iamVjdChnb29kSWQpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGVGdWxsT2JqZWN0LCByZXN1bHQucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIEFydGljbGVGdWxsT2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEFydGljbGVDYXRlZ29yaWVzKHB1YmxpY2F0aW9uQ29kZTogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlQ2F0ZWdvcnlbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUFwaS5nZXRBcnRpY2xlQ2F0ZWdvcmllcyhwdWJsaWNhdGlvbkNvZGUpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KEFydGljbGVDYXRlZ29yeSwgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgQXJ0aWNsZUNhdGVnb3J5W107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIHB1YmxpYyBhc3luYyBnZXRBcnRpY2xlRmxhdChza3U6IHN0cmluZyk6IFByb21pc2U8QXJ0aWNsZUZsYXQ+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVBcGkuZ2V0QXJ0aWNsZUZsYXQoc2t1KTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShBcnRpY2xlRmxhdCwgcmVzdWx0LnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBBcnRpY2xlRmxhdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyBhc3luYyBhZGRUb0NhcnQoZ29vZElkOiBudW1iZXIsIGdvb2RUeXBlOiBHb29kVHlwZSwgaW5zdGFuY2VJZDogbnVtYmVyLCBzZXNzaW9uSWQ6IHN0cmluZywgcXVhbnRpdHk6IG51bWJlciA9IDEpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAvLyAgIGNvbnN0IGpzb246IHN0cmluZyA9IGF3YWl0IHRoaXMuX2dldEpTT05Gcm9tQXJ0aWNsZU9iamVjdChnb29kSWQsIGdvb2RUeXBlLCBpbnN0YW5jZUlkLCBzZXNzaW9uSWQsIHF1YW50aXR5KTtcclxuICAvLyAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5hZGRUb0NhcnQubmV4dCh7YXJ0aWNsZToganNvbiwgcXVhbnRpdHk6IDF9KTtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyBwcml2YXRlIGFzeW5jIF9nZXRKU09ORnJvbUFydGljbGVPYmplY3QoZ29vZElkOiBudW1iZXIsIGdvb2RUeXBlOiBHb29kVHlwZSwgaW5zdGFuY2VJZDogbnVtYmVyLCBzZXNzaW9uSWQ6IHN0cmluZywgcXVhbnRpdHk6IG51bWJlciA9IDEpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gIC8vICAgY29uc3QgY29uZmlndXJhdG9yU3RhdGlzdGljcyA9IG5ldyBDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnQoKTtcclxuICAvLyAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3MudXNlclR5cGUgPSAnSG9tZWRlY29yYXRvcic7XHJcbiAgLy8gICBjb25maWd1cmF0b3JTdGF0aXN0aWNzLnRyYW5zYWN0aW9uVHlwZSA9ICdTYWxlcyc7XHJcbiAgLy8gICBjb25maWd1cmF0b3JTdGF0aXN0aWNzLmFjdGlvbkRvbWFpbiA9ICdIb21lZGVjb3JhdG9yJztcclxuICAvLyAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3Muc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xyXG4gIC8vICAgY29uZmlndXJhdG9yU3RhdGlzdGljcy53ZWJIb3N0ID0gd2luZG93LmxvY2F0aW9uLmhvc3Q7XHJcbiAgLy8gICBjb25maWd1cmF0b3JTdGF0aXN0aWNzLmJ1bmRsZUhvc3QgPSB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuICAvLyAgIHJldHVybiBhd2FpdCB0aGlzLmFydGljbGVBcGkuZ2V0SnNvbkFydGljbGVGbGF0VHJlZShnb29kSWQsIGdvb2RUeXBlLCBxdWFudGl0eSwgdHJ1ZSwgaW5zdGFuY2VJZCwgY29uZmlndXJhdG9yU3RhdGlzdGljcyk7XHJcbiAgLy8gfVxyXG5cclxuICBwcml2YXRlIF9nZXRQdWJsaWNhdGlvbkNvZGVGb3JSb2xlKHJvbGU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5fcHVibGljYXRpb25Db2RlRm9yVXNlclJvbGUuaGFzKHJvbGUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9wdWJsaWNhdGlvbkNvZGVGb3JVc2VyUm9sZS5nZXQocm9sZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn1cclxuIl19
|
|
452
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHN0IsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBRTFFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUMvRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDdEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUd0RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFHdkQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBQ3ZHLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdURBQXVELENBQUM7QUFDbEYsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFDcEcsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBRTNFLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBRTFHLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHdEQUF3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QyxDQUFDO1NBQ25EO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztrSUFqWlUsb0NBQW9DO3NJQUFwQyxvQ0FBb0MsY0FGbkMsTUFBTTs0RkFFUCxvQ0FBb0M7a0JBSGhELFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7QW5zd2VyfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Fuc3dlcic7XHJcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL3NlbGVjdGlvbic7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvcXVlc3Rpb24nO1xyXG5pbXBvcnQge0Fuc3dlclByaWNlfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Fuc3dlci1wcmljZSc7XHJcbmltcG9ydCB7QXJ0aWNsZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hcnRpY2xlJztcclxuaW1wb3J0IHtEZWNvTm9kZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9kZWNvLW5vZGUnO1xyXG5pbXBvcnQge1NraXBCdXR0b25JbmZvfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL3NraXAtYnV0dG9uLWluZm8nO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRvclN0YXRpc3RpY3NFbnZpcm9ubWVudH0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9jb25maWd1cmF0b3Itc3RhdGlzdGljcy1lbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7T3B0aW9uc30gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvb3B0aW9ucyc7XHJcbmltcG9ydCB7Q29uZmlndXJhdG9yfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpJztcclxuaW1wb3J0IHtJbnRlcm5hbFBhcmFtfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9lbnVtL2ludGVybmFsLXBhcmFtLmVudW0nO1xyXG5pbXBvcnQge1F1ZXN0aW9uQW5kQW5zd2Vyc30gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9xdWVzdGlvbi1hbmQtYW5zd2Vycyc7XHJcbmltcG9ydCB7TWFpbkFwaX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGknO1xyXG5pbXBvcnQge0RhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhfSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC9kYXRhLXNlcnZpY2UtcmVzcG9uc2UtZGF0YSc7XHJcbmltcG9ydCB7QXJ0aWNsZXN9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2FydGljbGVzJztcclxuaW1wb3J0IHtBcnRpY2xlVGV4dH0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLXRleHQuYm8nO1xyXG5pbXBvcnQge0J1c2luZXNzT2JqZWN0RmFjdG9yeX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvc2VydmljZS9idXNpbmVzcy1vYmplY3QtZmFjdG9yeSc7XHJcbmltcG9ydCB7SW1hZ2VVdGlsc30gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvdXRpbHMvaW1hZ2UtdXRpbHMnO1xyXG5pbXBvcnQge0V4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZXh0ZXJuYWwtY2F0YWxvZy1zdGFydHVwLWluZm8tcmVxdWVzdCc7XHJcbmltcG9ydCB7RXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm99IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2V4dGVybmFsLWNhdGFsb2ctc3RhcnR1cC1pbmZvJztcclxuaW1wb3J0IHtMb2dpblJlc3BvbnNlfSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC9sb2dpbi1yZXNwb25zZSc7XHJcbmltcG9ydCB7Q2F0YWxvZ0RlZmluaXRpb259IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2NhdGFsb2ctZGVmaW5pdGlvbi5ibyc7XHJcbmltcG9ydCB7RXh0ZXJuYWxTb3VyY2V9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2V4dGVybmFsLXNvdXJjZS5ibyc7XHJcbmltcG9ydCB7QXJ0aWNsZUZ1bGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZnVsbC1vYmplY3QnO1xyXG5pbXBvcnQge0FydGljbGVDYXRlZ29yeX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWNhdGVnb3J5JztcclxuaW1wb3J0IHtBcnRpY2xlRmxhdH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1mbGF0LmJvJztcclxuaW1wb3J0IHtVc2VyUm9sZVR5cGV9IGZyb20gJy4uL2VudW0vdXNlci1yb2xlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZX0gZnJvbSAnLi9ob21lZGVjb3JhdG9yLWFwcC1ldmVudC5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFeHRlcm5hbENvbm5lY3RvciB7XHJcbiAgcHVibGljIGxvZ2luUmVzcG9uc2U6IExvZ2luUmVzcG9uc2U7XHJcbiAgcHVibGljIGNvbm5lY3RvcjogQ29ubmVjdG9yO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvciB7XHJcbiAgY29ubmVjdG9yPzogQ29uZmlndXJhdG9yO1xyXG4gIGFydGljbGVBcGk/OiBBcnRpY2xlcztcclxuICBtYWluQXBpPzogTWFpbkFwaTtcclxufVxyXG5cclxuLy8gU29sZSByZXNwb25zaWJpbGl0eSBpcyBzaW1wbHkgdG8gd3JhcCBhcm91bmQgYSBjb2xpam4uQ29ubmVjdG9yIHRvIGNyZWF0ZSBhIHN0YWJsZSBpbm5lciBpbnRlcmZhY2UgdG8gdGhlIGxpYnJhcnkgaW4gYSAxOjEgbWV0aG9kIHdheS5cclxuLy8gT25seSB0byBiZSB1c2VkIGJ5IHRoZSBJT25lQ29udHJvbGxlclNlcnZpY2UuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEhvbWVkZWNvcmF0b3JDb25uZWN0b3JBZGFwdGVyU2VydmljZSB7XHJcbiAgcHVibGljIHJlYWRvbmx5IHF1ZXN0aW9uUmVjZWl2ZWQ6IFN1YmplY3Q8UXVlc3Rpb24+ID0gbmV3IFN1YmplY3Q8UXVlc3Rpb24+KCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNob3dMb2FkZXI6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uUmVzZXQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBwcml2YXRlIF9wdWJsaWNhdGlvbkNvZGVGb3JVc2VyUm9sZTogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KFtcclxuICAgIFtVc2VyUm9sZVR5cGUuQ3VzdG9tZXIsIDE2XSxcclxuICAgIFtVc2VyUm9sZVR5cGUuRW1wbG95ZWUsIDFdXHJcbiAgXSk7XHJcblxyXG4gIHB1YmxpYyBnZXQgY29ubmVjdG9yKCk6IENvbmZpZ3VyYXRvciB7XHJcbiAgICBpZiAoIXRoaXMuZXh0ZXJuYWxTb3VyY2UpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3RvcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RvcnNbdGhpcy5leHRlcm5hbFNvdXJjZV0uY29ubmVjdG9yLmNvbm5lY3RvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYXJ0aWNsZUFwaSgpOiBBcnRpY2xlcyB7XHJcbiAgICBpZiAoIXRoaXMuZXh0ZXJuYWxTb3VyY2UpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2FydGljbGVBcGk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3JzW3RoaXMuZXh0ZXJuYWxTb3VyY2VdLmNvbm5lY3Rvci5hcnRpY2xlQXBpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBtYWluQXBpKCk6IE1haW5BcGkge1xyXG4gICAgaWYgKCF0aGlzLmV4dGVybmFsU291cmNlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9tYWluQXBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yc1t0aGlzLmV4dGVybmFsU291cmNlXS5jb25uZWN0b3IubWFpbkFwaTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25uZWN0b3JzOiBFeHRlcm5hbENvbm5lY3RvciA9IG5ldyBFeHRlcm5hbENvbm5lY3RvcigpO1xyXG4gIHB1YmxpYyBleHRlcm5hbFNvdXJjZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBsb2dpblJlc3BvbnNlOiBMb2dpblJlc3BvbnNlO1xyXG4gIHByaXZhdGUgX2Nvbm5lY3Rvcj86IENvbmZpZ3VyYXRvcjtcclxuICBwcml2YXRlIF9hcnRpY2xlQXBpOiBBcnRpY2xlcztcclxuICBwcml2YXRlIF9tYWluQXBpOiBNYWluQXBpO1xyXG4gIHByaXZhdGUgX2JvRmFjdG9yeTogQnVzaW5lc3NPYmplY3RGYWN0b3J5ID0gbmV3IEJ1c2luZXNzT2JqZWN0RmFjdG9yeSgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2FwcEV2ZW50U2VydmljZTogSG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXRDb25uZWN0b3Iob3B0aW9uczogT3B0aW9ucywgZXh0ZXJuYWxTb3VyY2U/OiBzdHJpbmcsIGZvcmNlUmVsb2FkPzogYm9vbGVhbiwgZXh0ZXJuYWxTb3VyY2VJZD86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKGV4dGVybmFsU291cmNlID09PSB1bmRlZmluZWQgfHwgZXh0ZXJuYWxTb3VyY2UgPT09IG51bGwpIHtcclxuICAgICAgY29uc3QgcmVuZXdDb25uZWN0b3I6IGJvb2xlYW4gPSAodGhpcy5fY29ubmVjdG9yID8gdGhpcy5fY29ubmVjdG9yLnVybCAhPT0gb3B0aW9ucy51cmwgOiBmYWxzZSkgfHwgZm9yY2VSZWxvYWQ7XHJcbiAgICAgIGlmICghdGhpcy5fY29ubmVjdG9yIHx8IHJlbmV3Q29ubmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy5fY29ubmVjdG9yID0gbmV3IENvbmZpZ3VyYXRvcihvcHRpb25zKTtcclxuICAgICAgICB0aGlzLmxvZ2luUmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9jb25uZWN0b3IuY29ubmVjdCgpO1xyXG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rvci5zaG93TG9hZGVyLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLnNob3dMb2FkZXIubmV4dCh2YWx1ZSkpO1xyXG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rvci5jb25uZWN0aW9uUmVzZXRJbmFjdGl2aXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLmNvbm5lY3Rpb25SZXNldC5uZXh0KCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5fYXJ0aWNsZUFwaSB8fCByZW5ld0Nvbm5lY3Rvcikge1xyXG4gICAgICAgIHRoaXMuX2FydGljbGVBcGkgPSBuZXcgQXJ0aWNsZXMob3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLl9tYWluQXBpIHx8IHJlbmV3Q29ubmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy5fbWFpbkFwaSA9IG5ldyBNYWluQXBpKG9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxTb3VyY2UgPSB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMuY29ubmVjdG9ycy5oYXNPd25Qcm9wZXJ0eShleHRlcm5hbFNvdXJjZSkpIHtcclxuICAgICAgICBpZiAoZXh0ZXJuYWxTb3VyY2VJZCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgY29uc3QgZXh0ZXJuYWxTb3VyY2VEYXRhOiBFeHRlcm5hbFNvdXJjZSA9IGF3YWl0IHRoaXMuZ2V0RXh0ZXJuYWxTb3VyY2UoZXh0ZXJuYWxTb3VyY2VJZCk7XHJcbiAgICAgICAgICBpZiAoZXh0ZXJuYWxTb3VyY2VEYXRhICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChleHRlcm5hbFNvdXJjZURhdGEucGFzc3dvcmQgIT09IHVuZGVmaW5lZCAmJiBleHRlcm5hbFNvdXJjZURhdGEudXNlcm5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIG9wdGlvbnMucGFzc3dvcmQgPSBleHRlcm5hbFNvdXJjZURhdGEucGFzc3dvcmQ7XHJcbiAgICAgICAgICAgICAgb3B0aW9ucy51c2VybmFtZSA9IGV4dGVybmFsU291cmNlRGF0YS51c2VybmFtZTtcclxuICAgICAgICAgICAgICBvcHRpb25zLnVzZUxvZ2luRW5jcnlwdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxNYWluQXBpOiBNYWluQXBpID0gbmV3IE1haW5BcGkob3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxWZXJzaW9uOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IGV4dGVybmFsTWFpbkFwaS5nZXRQdWJsaWNQYXJhbXMoK29wdGlvbnMuc2NoZW1hKS5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICByZXR1cm4gbmV3IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGV4dGVybmFsVmVyc2lvbiAmJiBleHRlcm5hbFZlcnNpb25bJ2NhdGFsb2dTZXR0aW5ncyddICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGNhdGFsb2dTZXR0aW5ncyA9IEpTT04ucGFyc2UoZXh0ZXJuYWxWZXJzaW9uWydjYXRhbG9nU2V0dGluZ3MnXSk7XHJcbiAgICAgICAgICBvcHRpb25zLnZlcnNpb24gPSBjYXRhbG9nU2V0dGluZ3MudmVyc2lvbjtcclxuICAgICAgICAgIGNvbnN0IGV4dGVybmFsQ29uZmlndXJhdG9yOiBDb25maWd1cmF0b3IgPSBuZXcgQ29uZmlndXJhdG9yKG9wdGlvbnMpO1xyXG4gICAgICAgICAgY29uc3QgbG9naW5SZXNwb25zZTogTG9naW5SZXNwb25zZSA9IGF3YWl0IGV4dGVybmFsQ29uZmlndXJhdG9yLmNvbm5lY3QoKS5jYXRjaChlID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAobG9naW5SZXNwb25zZSkge1xyXG4gICAgICAgICAgICBjb25zdCBleHRlcm5hbEFydGljbGVBcGk6IEFydGljbGVzID0gbmV3IEFydGljbGVzKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBleHRlcm5hbENvbmZpZ3VyYXRvci5zaG93TG9hZGVyLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLnNob3dMb2FkZXIubmV4dCh2YWx1ZSkpO1xyXG4gICAgICAgICAgICBleHRlcm5hbENvbmZpZ3VyYXRvci5jb25uZWN0aW9uUmVzZXRJbmFjdGl2aXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLmNvbm5lY3Rpb25SZXNldC5uZXh0KCkpO1xyXG4gICAgICAgICAgICBjb25zdCBleHRlcm5hbENvbm5lY3RvcjogRXh0ZXJuYWxDb25uZWN0b3IgPSBuZXcgRXh0ZXJuYWxDb25uZWN0b3IoKTtcclxuICAgICAgICAgICAgZXh0ZXJuYWxDb25uZWN0b3IubG9naW5SZXNwb25zZSA9IGxvZ2luUmVzcG9uc2U7XHJcbiAgICAgICAgICAgIGV4dGVybmFsQ29ubmVjdG9yLmNvbm5lY3RvciA9IHtjb25uZWN0b3I6IGV4dGVybmFsQ29uZmlndXJhdG9yLCBtYWluQXBpOiBleHRlcm5hbE1haW5BcGksIGFydGljbGVBcGk6IGV4dGVybmFsQXJ0aWNsZUFwaX07XHJcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdG9yc1tleHRlcm5hbFNvdXJjZV0gPSBleHRlcm5hbENvbm5lY3RvcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5leHRlcm5hbFNvdXJjZSA9IGV4dGVybmFsU291cmNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvZ091dCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuY29ubmVjdG9yLmxvZ091dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFB1YmxpY2F0aW9uQ29kZUJhc2VkT25Mb2dpbigpOiBudW1iZXIge1xyXG4gICAgbGV0IHJvbDogc3RyaW5nO1xyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxTb3VyY2UpIHtcclxuICAgICAgaWYgKHRoaXMuY29ubmVjdG9ycy5oYXNPd25Qcm9wZXJ0eSh0aGlzLmV4dGVybmFsU291cmNlKSkge1xyXG4gICAgICAgIGNvbnN0IGV4dGVybmFsQ29ubmVjdG9yID0gdGhpcy5jb25uZWN0b3JzW3RoaXMuZXh0ZXJuYWxTb3VyY2VdO1xyXG4gICAgICAgIGlmIChleHRlcm5hbENvbm5lY3RvciAmJiBleHRlcm5hbENvbm5lY3Rvci5sb2dpblJlc3BvbnNlKSB7XHJcbiAgICAgICAgICByb2wgPSBleHRlcm5hbENvbm5lY3Rvci5sb2dpblJlc3BvbnNlLnJvbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmxvZ2luUmVzcG9uc2UpIHtcclxuICAgICAgICByb2wgPSB0aGlzLmxvZ2luUmVzcG9uc2Uucm9sO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocm9sKSB7XHJcbiAgICAgIGNvbnN0IHB1YkNvZGU6IG51bWJlciA9IHRoaXMuX2dldFB1YmxpY2F0aW9uQ29kZUZvclJvbGUocm9sKTtcclxuICAgICAgaWYgKHB1YkNvZGUgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gcHViQ29kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIDI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0V2ViVmlld1N0YXJ0dXBJbmZvKHJlcXVlc3Q6IEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvUmVxdWVzdCk6IFByb21pc2U8RXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm8+IHtcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUFwaS5nZXRXZWJ2aWV3U3RhcnR1cEluZm8ocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvLCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgRXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm87XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRHb29kSWRGcm9tQXJ0aWNsZU5yKHNrdTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUFwaS5nZXRHb29kSWRGcm9tQXJ0aWNsZU5yKHNrdSk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGluaXROb2RlSW5zdGFuY2UoZ29vZElkOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmluaXROb2RlSW5zdGFuY2UoZ29vZElkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGFuZ2VDb25uZWN0aW9uKGluc3RhbmNlSWQ6IHN0cmluZywgb2xkQ29ubmVjdGlvbjogc3RyaW5nLCBuZXdDb25uZWN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuY2hhbmdlQ29ubmVjdGlvbihpbnN0YW5jZUlkLCBvbGRDb25uZWN0aW9uLCBuZXdDb25uZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb3B5SW5zdGFuY2UoaW5zdGFuY2VJZDogc3RyaW5nLCBzaG91bGRTYXZlQ3VycmVudEluc3RhbmNlSWQ6IGJvb2xlYW4pOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuY29weUluc3RhbmNlKGluc3RhbmNlSWQsIHNob3VsZFNhdmVDdXJyZW50SW5zdGFuY2VJZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2F2ZUNvbmZpZ3VyYXRpb25zKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgYXdhaXQgdGhpcy5jb25uZWN0b3Iuc2F2ZUNvbmZpZ3VyYXRpb25zKCkuY2F0Y2goKGUpID0+IHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgICAvLyBzYXZlIGV4dGVybmFsIHNvdXJjZXNcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuY29ubmVjdG9ycykge1xyXG4gICAgICBpZiAodGhpcy5jb25uZWN0b3JzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICBjb25zdCBjb25uZWN0b3IgPSB0aGlzLmNvbm5lY3RvcnNba2V5XS5jb25uZWN0b3IuY29ubmVjdG9yO1xyXG4gICAgICAgIGF3YWl0IGNvbm5lY3Rvci5zYXZlQ29uZmlndXJhdGlvbnMoKS5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIEByZXR1cm5zIFRoZSBpbml0aWFsIGFydGljbGVcclxuICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZShza3U6IHN0cmluZywgYnJhbmNoOiBzdHJpbmcpOiBQcm9taXNlPEFydGljbGU+IHtcclxuICAgIGNvbnN0IGdvb2RJZDogbnVtYmVyID0gYXdhaXQgdGhpcy5nZXRHb29kSWRGcm9tQXJ0aWNsZU5yKHNrdSk7XHJcbiAgICBpZiAoZ29vZElkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldEFydGljbGVRdWlja1NlbChnb29kSWQsIGJyYW5jaCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRBcnRpY2xlUXVpY2tTZWwoZ29vZElkOiBudW1iZXIsIGJyYW5jaDogc3RyaW5nKTogUHJvbWlzZTxBcnRpY2xlPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVBcGkuZ2V0QXJ0aWNsZVF1aWNrU2VsKGdvb2RJZCwgYnJhbmNoKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQXJ0aWNsZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0Lm9BcnRpY2xlWzBdKSBhcyBBcnRpY2xlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyBwdWJsaWMgbG9hZFNlbGVjdGlvbnMoKTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLmNvbm5lY3Rvci5nZXRTZWxlY3Rpb25zKCk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBwdWJsaWMgZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzKCk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5jb25uZWN0b3IuZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzKCk7XHJcbiAgLy8gfVxyXG5cclxuICBwdWJsaWMgZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzQXN5bmMoKTogUHJvbWlzZTxRdWVzdGlvbkFuZEFuc3dlcnM+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRRdWVzdGlvbkFuZEFuc3dlcnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRTZWxlY3Rpb25zQXN5bmMoKTogUHJvbWlzZTxTZWxlY3Rpb25bXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0U2VsZWN0aW9ucygpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShTZWxlY3Rpb24sIHJlc3BvbnNlLnJlc3VsdE9iamVjdHMpIGFzIFNlbGVjdGlvbltdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERlY29zQXN5bmMoKTogUHJvbWlzZTxEZWNvTm9kZVtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWNvcygpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShEZWNvTm9kZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0cykgYXMgRGVjb05vZGVbXTtcclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRBbnN3ZXJQcmljZXMoKTogUHJvbWlzZTxBbnN3ZXJQcmljZVtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRBbnN3ZXJzUHJpY2VzKCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KEFuc3dlclByaWNlLCByZXNwb25zZS5yZXN1bHRPYmplY3RzKSBhcyBBbnN3ZXJQcmljZVtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEpzb25Db25maWd1cmVkQXJ0aWNsZXMoZ29vZElkOiBudW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29vZFR5cGU6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dMb2FkZXI6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlSWQ/OiBudW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdG9yU3RhdGlzdGljcz86IENvbmZpZ3VyYXRvclN0YXRpc3RpY3NFbnZpcm9ubWVudCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5hcnRpY2xlQXBpLmdldEpzb25BcnRpY2xlRmxhdFRyZWUoZ29vZElkLCBnb29kVHlwZSwgcXVhbnRpdHksIHNob3dMb2FkZXIsIGluc3RhbmNlSWQsIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3MpO1xyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIGdldEpzb25NYXRjaFRhYmxlQXJ0aWNsZXMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0SnNvbk1hdGNoVGFibGVBcnRpY2xlcygpO1xyXG4gIC8vIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldEluc3RhbmNlVG9Db25maWd1cmUoaWQ6IHN0cmluZyk6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcclxuICAgIGlmIChpZCAhPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3Iuc2V0SW5zdGFuY2VUb0NvbmZpZ3VyZShpZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbmV3IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2VsZWN0QW5zd2VyKGFuc3dlcjogQW5zd2VyLCB1c2VySW5wdXQ/OiBzdHJpbmcpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3Iuc2VsZWN0QW5zd2VyKGFuc3dlciwgZmFsc2UsIHVzZXJJbnB1dCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsQW5zd2VyKGdldEFuc3dlcnNBbmRRdWVzdGlvbjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuY2FuY2VsQW5zd2VyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0U2VsZWN0aW9uKFxyXG4gICAgc2VsZWN0aW9uOiBTZWxlY3Rpb24sIGZvcmNlQmFja1RvTm9kZT86IGJvb2xlYW4sIGFmdGVyPzogYm9vbGVhbiwgY29ubmVjdG9yPzogc3RyaW5nKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnNlbGVjdFNlbGVjdGlvbihzZWxlY3Rpb24sIGZhbHNlLCBmb3JjZUJhY2tUb05vZGUsIGFmdGVyLCBjb25uZWN0b3IpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbik6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5kZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXBsYWNlU2VsZWN0aW9uKHNlbGVjdGlvbjogU2VsZWN0aW9uKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnJlcGxhY2VTZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRJbWFnZUZvckFuc3dlck9yU2VsZWN0aW9uKFxyXG4gICAgYW5zd2VyT3JTZWxlY3Rpb246IEFuc3dlciB8IFNlbGVjdGlvbiwgcHVibGljYXRpb246IG51bWJlciwgdGh1bWJOYWlsOiBib29sZWFuID0gdHJ1ZSwgc2hvd0xvYWRlcjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQXBpLmdldFNpbmdsZUltYWdlKGFuc3dlck9yU2VsZWN0aW9uLm5vZGVJZCwgcHVibGljYXRpb24sIHRydWUsIHRodW1iTmFpbCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MgJiYgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5yZXN1bHRPYmplY3QuZmlsZVBhdGggIT09IG51bGwgJiYgcmVzcG9uc2UucmVzdWx0T2JqZWN0LmZpbGVQYXRoICE9PSB1bmRlZmluZWQgJiYgcmVzcG9uc2UucmVzdWx0T2JqZWN0LmZpbGVQYXRoICE9PSAnJykge1xyXG4gICAgICAgIHJldHVybiBJbWFnZVV0aWxzLmdldEZpeGVkSW1hZ2VGaWxlcGF0aFVybChyZXNwb25zZS5yZXN1bHRPYmplY3QuZmlsZVBhdGgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBJbWFnZVV0aWxzLmdldERvY0JvZHlXaXRoTWltZVR5cGVEZWZpbml0aW9uKHJlc3BvbnNlLnJlc3VsdE9iamVjdC5maWxlTmFtZSxcclxuICAgICAgICAgIHRodW1iTmFpbCA/IHJlc3BvbnNlLnJlc3VsdE9iamVjdC50aHVtYm5haWxCb2R5IDogcmVzcG9uc2UucmVzdWx0T2JqZWN0LmRvY3VtZW50Qm9keSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRTa2lwQnV0dG9uSW1hZ2VBbmRUZXh0KGdvb2RJZD86IG51bWJlcik6IFByb21pc2U8U2tpcEJ1dHRvbkluZm8+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFNraXBCdXR0b25JbWFnZUFuZFRleHQoZ29vZElkLCBmYWxzZSk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFNraXBCdXR0b25JbmZvLCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIFNraXBCdXR0b25JbmZvO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0TW9vZEltYWdlRm9yQW5zd2VyU2VsZWN0aW9uKGFuc3dlck9yU2VsZWN0aW9uOiBBbnN3ZXIgfCBTZWxlY3Rpb24sIHRodW1iTmFpbDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0SW1hZ2VGb3JBbnN3ZXJPclNlbGVjdGlvbihhbnN3ZXJPclNlbGVjdGlvbiwgMzIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEFuc3dlckluZm8oYW5zd2VyOiBBbnN3ZXIpOiBQcm9taXNlPEFydGljbGVUZXh0W10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEFuc3dlclRleHRzKGFuc3dlci5ub2RlSWQsIGZhbHNlKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoQXJ0aWNsZVRleHQsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkgYXMgQXJ0aWNsZVRleHRbXTtcclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRJbnRlcm5hbFBhcmFtZXRlcihwYXJhbWV0ZXI6IEludGVybmFsUGFyYW0pOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5tYWluQXBpLmdldEludGVybmFsUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHN0b3JlM0RNb2RlbENETihmaWxlbmFtZTogc3RyaW5nLCBmaWxlQ29udGVudHM6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLm1haW5BcGkudXBsb2FkTW9kZWxUb0NETihmaWxlbmFtZSwgZmlsZUNvbnRlbnRzKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldENhdGFsb2dEZWZpbml0aW9uc0xpc3QoKTogUHJvbWlzZTxDYXRhbG9nRGVmaW5pdGlvbltdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVBcGkuZ2V0Q2F0YWxvZ0RlZmluaXRpb25zKCkuY2F0Y2goZSA9PiB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0YVNlcnZpY2VSZXNwb25zZURhdGEoKTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShDYXRhbG9nRGVmaW5pdGlvbiwgcmVzcG9uc2UucmVzdWx0T2JqZWN0cykgYXMgQ2F0YWxvZ0RlZmluaXRpb25bXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IocmVzcG9uc2UudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEV4dGVybmFsU291cmNlKGV4dGVybmFsU291cmNlSWQ6IG51bWJlcik6IFByb21pc2U8RXh0ZXJuYWxTb3VyY2U+IHtcclxuICAgIGlmICghZXh0ZXJuYWxTb3VyY2VJZCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUFwaS5nZXRFeHRlcm5hbFNvdXJjZShleHRlcm5hbFNvdXJjZUlkKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICBpZiAocmVzcG9uc2UucmVzdWx0T2JqZWN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEV4dGVybmFsU291cmNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIEV4dGVybmFsU291cmNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKHJlc3BvbnNlICYmIHJlc3BvbnNlLm1lc3NhZ2UgPyByZXNwb25zZS5tZXNzYWdlIDogJ0Vycm9yIHJldHJpZXZpbmcgZXh0ZXJuYWwgc291cmNlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZUZ1bGxPYmplY3QoZ29vZElkOiBudW1iZXIpOiBQcm9taXNlPEFydGljbGVGdWxsT2JqZWN0PiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQXBpLmdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZCk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQXJ0aWNsZUZ1bGxPYmplY3QsIHJlc3VsdC5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgQXJ0aWNsZUZ1bGxPYmplY3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZUNhdGVnb3JpZXMocHVibGljYXRpb25Db2RlOiBudW1iZXIpOiBQcm9taXNlPEFydGljbGVDYXRlZ29yeVtdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQXBpLmdldEFydGljbGVDYXRlZ29yaWVzKHB1YmxpY2F0aW9uQ29kZSk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoQXJ0aWNsZUNhdGVnb3J5LCByZXN1bHQucmVzdWx0T2JqZWN0cykgYXMgdW5rbm93biBhcyBBcnRpY2xlQ2F0ZWdvcnlbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vXHJcbiAgcHVibGljIGFzeW5jIGdldEFydGljbGVGbGF0KHNrdTogc3RyaW5nKTogUHJvbWlzZTxBcnRpY2xlRmxhdD4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUFwaS5nZXRBcnRpY2xlRmxhdChza3UpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGVGbGF0LCByZXN1bHQucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIEFydGljbGVGbGF0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIGFzeW5jIGFkZFRvQ2FydChnb29kSWQ6IG51bWJlciwgZ29vZFR5cGU6IEdvb2RUeXBlLCBpbnN0YW5jZUlkOiBudW1iZXIsIHNlc3Npb25JZDogc3RyaW5nLCBxdWFudGl0eTogbnVtYmVyID0gMSk6IFByb21pc2U8dm9pZD4ge1xyXG4gIC8vICAgY29uc3QganNvbjogc3RyaW5nID0gYXdhaXQgdGhpcy5fZ2V0SlNPTkZyb21BcnRpY2xlT2JqZWN0KGdvb2RJZCwgZ29vZFR5cGUsIGluc3RhbmNlSWQsIHNlc3Npb25JZCwgcXVhbnRpdHkpO1xyXG4gIC8vICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLmFkZFRvQ2FydC5uZXh0KHthcnRpY2xlOiBqc29uLCBxdWFudGl0eTogMX0pO1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIHByaXZhdGUgYXN5bmMgX2dldEpTT05Gcm9tQXJ0aWNsZU9iamVjdChnb29kSWQ6IG51bWJlciwgZ29vZFR5cGU6IEdvb2RUeXBlLCBpbnN0YW5jZUlkOiBudW1iZXIsIHNlc3Npb25JZDogc3RyaW5nLCBxdWFudGl0eTogbnVtYmVyID0gMSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgLy8gICBjb25zdCBjb25maWd1cmF0b3JTdGF0aXN0aWNzID0gbmV3IENvbmZpZ3VyYXRvclN0YXRpc3RpY3NFbnZpcm9ubWVudCgpO1xyXG4gIC8vICAgY29uZmlndXJhdG9yU3RhdGlzdGljcy51c2VyVHlwZSA9ICdIb21lZGVjb3JhdG9yJztcclxuICAvLyAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3MudHJhbnNhY3Rpb25UeXBlID0gJ1NhbGVzJztcclxuICAvLyAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3MuYWN0aW9uRG9tYWluID0gJ0hvbWVkZWNvcmF0b3InO1xyXG4gIC8vICAgY29uZmlndXJhdG9yU3RhdGlzdGljcy5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XHJcbiAgLy8gICBjb25maWd1cmF0b3JTdGF0aXN0aWNzLndlYkhvc3QgPSB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuICAvLyAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3MuYnVuZGxlSG9zdCA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gIC8vICAgcmV0dXJuIGF3YWl0IHRoaXMuYXJ0aWNsZUFwaS5nZXRKc29uQXJ0aWNsZUZsYXRUcmVlKGdvb2RJZCwgZ29vZFR5cGUsIHF1YW50aXR5LCB0cnVlLCBpbnN0YW5jZUlkLCBjb25maWd1cmF0b3JTdGF0aXN0aWNzKTtcclxuICAvLyB9XHJcblxyXG4gIHByaXZhdGUgX2dldFB1YmxpY2F0aW9uQ29kZUZvclJvbGUocm9sZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLl9wdWJsaWNhdGlvbkNvZGVGb3JVc2VyUm9sZS5oYXMocm9sZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3B1YmxpY2F0aW9uQ29kZUZvclVzZXJSb2xlLmdldChyb2xlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=
|