@smarterplan/ngx-smarterplan-core 1.0.10 → 1.0.11
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/esm2020/lib/services/models/plan.service.mjs +5 -5
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +4 -4
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +4 -4
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/lib/services/models/plan.service.d.ts +2 -3
- package/package.json +1 -1
|
@@ -318,7 +318,7 @@ export class PlanService {
|
|
|
318
318
|
});
|
|
319
319
|
}
|
|
320
320
|
}
|
|
321
|
-
this.addListenersToButton(button, url,
|
|
321
|
+
this.addListenersToButton(button, url, tagService);
|
|
322
322
|
this.updateRotation(this.lastRotation);
|
|
323
323
|
}
|
|
324
324
|
}
|
|
@@ -405,7 +405,7 @@ export class PlanService {
|
|
|
405
405
|
button.style.backgroundSize = 'contain';
|
|
406
406
|
button.style.backgroundRepeat = 'no-repeat';
|
|
407
407
|
}
|
|
408
|
-
addListenersToButton(button, url,
|
|
408
|
+
addListenersToButton(button, url, tagService = null) {
|
|
409
409
|
button.addEventListener('mouseenter', async (event) => {
|
|
410
410
|
const contentForButton = this.htmlContentToInject.find((object) => object.elementID === button.id);
|
|
411
411
|
this.btnTagIsHover = true;
|
|
@@ -433,8 +433,8 @@ export class PlanService {
|
|
|
433
433
|
const ImageFullscreenBtn = content.querySelector('#image-footer');
|
|
434
434
|
if (ImageFullscreenBtn) {
|
|
435
435
|
ImageFullscreenBtn.addEventListener('click', function () {
|
|
436
|
-
if (
|
|
437
|
-
tagService.onActionImageClick(
|
|
436
|
+
if (tagService) {
|
|
437
|
+
tagService.onActionImageClick(contentForButton.elementID);
|
|
438
438
|
}
|
|
439
439
|
});
|
|
440
440
|
}
|
|
@@ -643,4 +643,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
643
643
|
type: Inject,
|
|
644
644
|
args: ['currentAPIService']
|
|
645
645
|
}] }, { type: i1.ZoneService }, { type: i2.NavigationService }, { type: i3.ViewerService }, { type: i4.Router }, { type: i5.MatterportService }, { type: i6.BaseVisibilityService }, { type: i7.ContentService }]; } });
|
|
646
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvcGxhbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5RCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFpQixPQUFPLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFFekQsT0FBTyxFQUNMLFdBQVcsRUFFWCxXQUFXLEVBRVgsT0FBTyxHQUVSLE1BQU0scUJBQXFCLENBQUM7QUFNN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7QUFNeEQsTUFBTSxPQUFPLFdBQVc7SUE0RXRCLFlBQytCLFdBQWdCLEVBQ3JDLFdBQXdCLEVBQ3hCLGlCQUFvQztJQUM1Qyw4QkFBOEI7SUFDdEIsYUFBNEIsRUFDNUIsTUFBYyxFQUNkLGlCQUFvQztJQUM1Qyw2QkFBNkI7SUFDckIsaUJBQXdDLEVBQ3hDLGNBQThCO1FBUjlCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFFcEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFFcEMsc0JBQWlCLEdB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QUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQztRQUM1RSxxQkFBcUI7UUFFckIsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDeEQsQ0FBQzs7d0dBdnlCVSxXQUFXLGtCQTZFWixtQkFBbUI7NEdBN0VsQixXQUFXLGNBRlYsTUFBTTsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBOEVJLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgZnVuYy1uYW1lcyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBnZXREb2N1bWVudCwgR2xvYmFsV29ya2VyT3B0aW9ucyB9IGZyb20gJ3BkZmpzLWRpc3QnO1xyXG5pbXBvcnQgcGFuem9vbSBmcm9tICdwYW56b29tJztcclxuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7XHJcbiAgQ29tbWVudFR5cGUsXHJcbiAgRGJPYmplY3RUeXBlLFxyXG4gIEZlYXR1cmVUeXBlLFxyXG4gIFBsYW4sXHJcbiAgUG9pVHlwZSxcclxuICBab25lLFxyXG59IGZyb20gJy4uLy4uL3R5cGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlVmlzaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi9iYXNlVmlzaWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0dGVycG9ydFNlcnZpY2UgfSBmcm9tICcuLi9tYXR0ZXJwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWaWV3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdmlld2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gJy4vem9uZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuL25hdmlnYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IGdldFNpZ25lZEZpbGUsIHVwbG9hZEZpbGVUb1MzIH0gZnJvbSAnLi4vczMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VUYWdTZXJ2aWNlIH0gZnJvbSAnLi4vdGFnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maWcgfSBmcm9tICcuLi8uLi9jb25maWcnO1xyXG5pbXBvcnQgeyBnZXRDb2VmZmljaWVudHNGb3JJbWFnZSB9IGZyb20gJy4uL3pvbmUtZHJhd2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBnZXRNZXRhRm9ySW1hZ2UgfSBmcm9tICcuLi8uLi9oZWxwZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb250ZW50U2VydmljZSB9IGZyb20gJy4uL2NvbnRlbnQuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGxhblNlcnZpY2Uge1xyXG4gIGNob3NlblBsYW46IFBsYW47XHJcblxyXG4gIGN1cnJlbnRQbGFuOiBQbGFuO1xyXG5cclxuICBjdXJyZW50U3dlZXA6IHN0cmluZztcclxuXHJcbiAgcGxhbkZpbGVDYWNoZTogRmlsZTtcclxuXHJcbiAgcGxhbkNhbnZhczogYW55O1xyXG5cclxuICBwbGFuRGl2OiBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQ7XHJcbiAgcGxhbkRpdkNvbnRlbnQ6IEhUTUxFbGVtZW50O1xyXG5cclxuICBwYW56b29tOiBhbnk7XHJcblxyXG4gIGlzUmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgdXNlclBvc2l0aW9uQnRuOiBIVE1MQnV0dG9uRWxlbWVudDtcclxuXHJcbiAgY29lZmZQbGFuWDogbnVtYmVyO1xyXG5cclxuICBjb2VmZlBsYW5ZOiBudW1iZXI7XHJcblxyXG4gIGNhbGlicmF0aW9uUGxhbjogYW55O1xyXG5cclxuICBkZXRhaWxUYWdEaXY6IEhUTUxFbGVtZW50O1xyXG5cclxuICBkZXRhaWxUYWdEaXZJc0hvdmVyID0gZmFsc2U7XHJcblxyXG4gIGJ0blRhZ0lzSG92ZXIgPSBmYWxzZTtcclxuXHJcbiAgcmVzaXplUGxhblN1YnNjcmlwdGlvbiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gIGltZ1BsYW46IEhUTUxJbWFnZUVsZW1lbnQ7XHJcblxyXG4gIGxhc3RUb3VjaFRpbWUgPSAwO1xyXG5cclxuICBkZWxheURibFRvdWNoID0gNTAwO1xyXG5cclxuICBsYXN0Um90YXRpb246IG51bWJlciA9IDA7XHJcblxyXG4gIHRhZ1NlcnZpY2U6IEJhc2VUYWdTZXJ2aWNlO1xyXG5cclxuICBodG1sQ29udGVudFRvSW5qZWN0OiB7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgY29udGVudDogc3RyaW5nO1xyXG4gICAgZWxlbWVudElEOiBzdHJpbmc7XHJcbiAgICB5OiBudW1iZXI7XHJcbiAgICB4OiBudW1iZXI7XHJcbiAgICB0YWdJY29uOiBzdHJpbmc7XHJcbiAgICB1cmw6IHN0cmluZztcclxuICB9W10gPSBbXTtcclxuXHJcbiAgY2FjaGU6IHtcclxuICAgIGVxdWlwSURzOiBzdHJpbmdbXTtcclxuICAgIHRpY2tldElEczogc3RyaW5nW107XHJcbiAgICBtZWFzdXJlbWVudHNJRHM6IHN0cmluZ1tdO1xyXG4gICAgZmVhdHVyZUlEczogc3RyaW5nW107XHJcbiAgICB6b25lSUQ6IHN0cmluZztcclxuICAgIHBsYW46IFBsYW47XHJcbiAgICBodG1sQ29udGVudDoge1xyXG4gICAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgICBjb250ZW50OiBzdHJpbmc7XHJcbiAgICAgIGVsZW1lbnRJRDogc3RyaW5nO1xyXG4gICAgICB5OiBudW1iZXI7XHJcbiAgICAgIHg6IG51bWJlcjtcclxuICAgICAgdGFnSWNvbjogc3RyaW5nO1xyXG4gICAgICB1cmw6IHN0cmluZztcclxuICAgIH1bXTtcclxuICB9O1xyXG5cclxuICBmb2N1c01vdXNlVGFnRGl2OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEFQSTogYW55OyAvL0FXU1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueSxcclxuICAgIHByaXZhdGUgem9uZVNlcnZpY2U6IFpvbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAvLyB0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZSxcclxuICAgIHByaXZhdGUgdmlld2VyU2VydmljZTogVmlld2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIG1hdHRlcnBvcnRTZXJ2aWNlOiBNYXR0ZXJwb3J0U2VydmljZSxcclxuICAgIC8vIHByaXZhdGUgY29uZmlnOiBBcHBDb25maWcsXHJcbiAgICBwcml2YXRlIHZpc2liaWxpdHlTZXJ2aWNlOiBCYXNlVmlzaWJpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbnRlbnRTZXJ2aWNlOiBDb250ZW50U2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5BUEkgPSBhcGlJbmplY3RlZDtcclxuICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuY3VycmVudENhbWVyYVBvc2Uuc3Vic2NyaWJlKChwb3NlKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlUm90YXRpb24ocG9zZS5yb3RhdGlvbi55KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY3JlYXRlUGxhbihwbGFuSW5wdXQ6IFBsYW4pOiBQcm9taXNlPFBsYW4+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlUGxhbihwbGFuSW5wdXQpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGVsZXRlUGxhbihwbGFuOiBQbGFuKTogUHJvbWlzZTxQbGFuPiB7XHJcbiAgICAvLyBhd2FpdCBkZWxldGVGcm9tUzMocGxhbi5hbm5leGUpO1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5EZWxldGVQbGFuKHsgaWQ6IHBsYW4uaWQgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRQbGFuc0ZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8UGxhbltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fXHJcbiAgICAgIC5QbGFuc0J5U3BhY2Uoc3BhY2VJRClcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5pdGVtcyk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRQbGFuc0ZvclpvbmUoem9uZUlEOiBzdHJpbmcpOiBQcm9taXNlPFBsYW5bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xyXG4gICAgICAuUGxhbnNCeVpvbmUoem9uZUlEKVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLml0ZW1zKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFNpbmdlZFBsYW5zRm9yU3BhY2Uoc3BhY2VJRDogc3RyaW5nKTogUHJvbWlzZTxQbGFuW10+IHtcclxuICAgIGNvbnN0IHBsYW5zRnJvbURCID0gYXdhaXQgdGhpcy5nZXRQbGFuc0ZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgLy8gY29uc29sZS5sb2cocGxhbnNGcm9tREIpO1xyXG4gICAgY29uc3QgcGxhbnMgPSBbXTtcclxuICAgIGlmIChwbGFuc0Zyb21EQi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIHBsYW5zRnJvbURCLm1hcChhc3luYyAocGxhbikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcGxhbk9iamVjdCA9IHsgLi4ucGxhbiB9IGFzIFBsYW47XHJcbiAgICAgICAgICAvLyBhbm5leGUgbG9va3MgbGlrZSB2aXNpdHMvbW9kZWxJRC9wbGFucy9maWxlLmV4dGVuc2lvblxyXG4gICAgICAgICAgY29uc3Qgc2lnbmVkID0gYXdhaXQgZ2V0U2lnbmVkRmlsZShwbGFuLmFubmV4ZSk7XHJcbiAgICAgICAgICBpZiAoc2lnbmVkKSB7XHJcbiAgICAgICAgICAgIHBsYW5PYmplY3QuZmlsZXBhdGggPSBzaWduZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocGxhbi5hbm5leGUpIHtcclxuICAgICAgICAgICAgY29uc3QgWywgbW9kZWxJRCwgLCBmaWxlbmFtZVdpdGhFeHRlbnNpb25dID0gcGxhbi5hbm5leGUuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgY29uc3QgWywgZXh0ZW50aW9uXSA9IGZpbGVuYW1lV2l0aEV4dGVuc2lvbi5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICBwbGFuT2JqZWN0Lm1vZGVsM2QgPSBtb2RlbElEO1xyXG4gICAgICAgICAgICBwbGFuT2JqZWN0LmV4dGVuc2lvbiA9IGV4dGVudGlvbjtcclxuICAgICAgICAgICAgcGxhbnMucHVzaChwbGFuT2JqZWN0KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvciBwbGFuIGhhdmUgbm90IGFubmV4ZSA9PiBgKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocGxhbi5pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwbGFucztcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFBsYW5zV2l0aFpvbmVzRm9yU3BhY2Uoc3BhY2VJRDogc3RyaW5nKTogUHJvbWlzZTxQbGFuW10+IHtcclxuICAgIGNvbnN0IHBsYW5zID0gYXdhaXQgdGhpcy5nZXRQbGFuc0ZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgY29uc3QgcGxhbnNab25lcyA9IHBsYW5zLmZpbHRlcigocGxhbikgPT4gcGxhbi56b25lICYmIHBsYW4uY2FsaWJyYXRpb24pO1xyXG4gICAgcmV0dXJuIHBsYW5zWm9uZXM7XHJcbiAgfVxyXG5cclxuICBzZXRDaG9zZW5QbGFuKGNob3NlblBsYW46IFBsYW4pIHtcclxuICAgIHRoaXMuY2hvc2VuUGxhbiA9IGNob3NlblBsYW47XHJcbiAgfVxyXG5cclxuICBnZXRDaG9zZW5QbGFuKCk6IFBsYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hvc2VuUGxhbjtcclxuICB9XHJcblxyXG4gIHNldFBsYW5GaWxlQ2FjaGUocGxhbkZpbGVDYWNoZTogRmlsZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5wbGFuRmlsZUNhY2hlID0gcGxhbkZpbGVDYWNoZTtcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICB9XHJcblxyXG4gIGdldFBsYW5GaWxlQ2FjaGUoKTogRmlsZSB7XHJcbiAgICByZXR1cm4gdGhpcy5wbGFuRmlsZUNhY2hlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY3JlYXRlUGxhbldpdGhBbm5leGUocGxhbjogUGxhbiwgZmlsZTogRmlsZSk6IFByb21pc2U8UGxhbj4ge1xyXG4gICAgY29uc3QgY3JlYXRlZFBsYW4gPSBhd2FpdCB0aGlzLmNyZWF0ZVBsYW4ocGxhbik7XHJcbiAgICBjb25zdCBtb2RlbDNEID0gYXdhaXQgdGhpcy56b25lU2VydmljZS5nZXRNb2RlbDNERm9yWm9uZShwbGFuLnpvbmVJRCk7XHJcbiAgICBjb25zdCB1cmwgPSBhd2FpdCB1cGxvYWRGaWxlVG9TMyhcclxuICAgICAgYHZpc2l0cy8ke21vZGVsM0R9L3BsYW5zL2AsXHJcbiAgICAgIGZpbGUsXHJcbiAgICAgIGNyZWF0ZWRQbGFuLmlkXHJcbiAgICApO1xyXG4gICAgaWYgKHVybCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLlVwZGF0ZVBsYW4oeyBpZDogY3JlYXRlZFBsYW4uaWQsIGFubmV4ZTogdXJsIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNyZWF0ZWRQbGFuO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlUGxhbihwbGFuOiBhbnkpOiBQcm9taXNlPFBsYW4+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlUGxhbihwbGFuKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZVBsYW5GaWxlKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBpZiAodGhpcy5jaG9zZW5QbGFuICYmIHRoaXMucGxhbkZpbGVDYWNoZSkge1xyXG4gICAgICBjb25zdCBtb2RlbDNEID0gYXdhaXQgdGhpcy56b25lU2VydmljZS5nZXRNb2RlbDNERm9yWm9uZShcclxuICAgICAgICB0aGlzLmNob3NlblBsYW4uem9uZUlEXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiB1cGxvYWRGaWxlVG9TMyhcclxuICAgICAgICBgdmlzaXRzLyR7bW9kZWwzRH0vcGxhbnMvYCxcclxuICAgICAgICB0aGlzLnBsYW5GaWxlQ2FjaGUsXHJcbiAgICAgICAgdGhpcy5jaG9zZW5QbGFuLmlkXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNldEFsbFBsYW5zRm9yWm9uZU5vdEN1cnJlbnQoem9uZUlEOiBzdHJpbmcsIGN1cnJlbnRQbGFuSUQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgcGxhbnMgPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uTGlzdFBsYW5zKHtcclxuICAgICAgem9uZUlEOiB7IGVxOiB6b25lSUQgfSxcclxuICAgIH0pO1xyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHBsYW5zLml0ZW1zLm1hcChhc3luYyAocGxhbikgPT4ge1xyXG4gICAgICAgIGlmIChwbGFuLmlzQ3VycmVudEZvclpvbmUgJiYgcGxhbi5pZCAhPT0gY3VycmVudFBsYW5JRCkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVQbGFuKHtcclxuICAgICAgICAgICAgaWQ6IHBsYW4uaWQsXHJcbiAgICAgICAgICAgIGlzQ3VycmVudEZvclpvbmU6IGZhbHNlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbmZpZ3VyZVBsYW4oXHJcbiAgICBjdXJyZW50UGxhbjogUGxhbixcclxuICAgIGRpdklkOiBzdHJpbmcgPSAncGxhbkRpdlBhbmUnLFxyXG4gICAgZGl2Q29udGVudElkOiBzdHJpbmcgPSAncGxhbkRpdlBhbmVDb250ZW50J1xyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc29sZS5sb2coJzw+IENPbmZpZ3VyZSBQTEFOIDogJywgY3VycmVudFBsYW4sIGRpdklkLCBkaXZDb250ZW50SWQpO1xyXG4gICAgdGhpcy5pc1JlYWR5ID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXMuZGV0YWlsVGFnRGl2KSB7XHJcbiAgICAgIHRoaXMuZGV0YWlsVGFnRGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICBgI2RldGFpbFRhZ0RpdmBcclxuICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIH1cclxuICAgIHRoaXMuZGV0YWlsVGFnRGl2LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuZm9jdXNNb3VzZVRhZ0RpdiA9IHRydWU7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGV0YWlsVGFnRGl2LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuYnRuVGFnSXNIb3ZlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmRldGFpbFRhZ0Rpdi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICB0aGlzLmZvY3VzTW91c2VUYWdEaXYgPSBmYWxzZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuID0gSlNPTi5wYXJzZShjdXJyZW50UGxhbi5jYWxpYnJhdGlvbik7XHJcbiAgICB0aGlzLmN1cnJlbnRQbGFuID0gY3VycmVudFBsYW47XHJcbiAgICB0aGlzLnBsYW5EaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtkaXZJZH1gKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIHRoaXMucGxhbkRpdkNvbnRlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICBgIyR7ZGl2Q29udGVudElkfWBcclxuICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgdGhpcy5wbGFuRGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLmhhbmRsZVRvdWNoLmJpbmQodGhpcykpO1xyXG4gICAgdGhpcy5wbGFuRGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgdGhpcy5vbkRibENsaWNrUGxhbi5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICBpZiAoIWN1cnJlbnRQbGFuLmFubmV4ZS5pbmNsdWRlcygncGRmJykpIHtcclxuICAgICAgdGhpcy5pbWdQbGFuID0gYXdhaXQgZ2V0TWV0YUZvckltYWdlKGN1cnJlbnRQbGFuLmZpbGVwYXRoKTtcclxuICAgICAgLy9SZWN0IHVzZSBvZmZzZXRXaWR0aCA6IGhlaWdodCwgbm90IGFjdHVhbCBib3VuZGluZ0NsaWVudFJlY3QgYmVjYXVzZSB3aWxsIGJlIG1vZGlmaWVkIGJ5IHRoZSB6b29tLlxyXG4gICAgICBjb25zdCByZWN0ID0ge1xyXG4gICAgICAgIHdpZHRoOiB0aGlzLnBsYW5EaXZDb250ZW50Lm9mZnNldFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogdGhpcy5wbGFuRGl2Q29udGVudC5vZmZzZXRIZWlnaHQsXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IHsgY29lZmZYLCBjb2VmZlkgfSA9IGdldENvZWZmaWNpZW50c0ZvckltYWdlKHRoaXMuaW1nUGxhbiwgcmVjdCk7XHJcbiAgICAgIHRoaXMuY29lZmZQbGFuWCA9IGNvZWZmWDtcclxuICAgICAgdGhpcy5jb2VmZlBsYW5ZID0gY29lZmZZO1xyXG5cclxuICAgICAgdGhpcy5wbGFuRGl2Q29udGVudC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKCR7Y3VycmVudFBsYW4uZmlsZXBhdGh9KWA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhd2FpdCB0aGlzLmRyYXdQZGYoY3VycmVudFBsYW4pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wbGFuRGl2Q29udGVudC5zdHlsZS5iYWNrZ3JvdW5kU2l6ZSA9ICdjb250YWluJztcclxuICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUuYmFja2dyb3VuZFJlcGVhdCA9ICduby1yZXBlYXQnO1xyXG5cclxuICAgIHRoaXMucGFuem9vbSA9IHBhbnpvb20odGhpcy5wbGFuRGl2LCB7XHJcbiAgICAgIGJvdW5kczogdHJ1ZSxcclxuICAgICAgYm91bmRzUGFkZGluZzogMCxcclxuICAgICAgbWF4Wm9vbTogNCxcclxuICAgICAgem9vbURvdWJsZUNsaWNrU3BlZWQ6IDEsIC8vZGlzYWJsZXMgZG91YmxlIGNsaWNrIHpvb21cclxuICAgICAgLy9pbml0aWFsWm9vbTogNFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnBhbnpvb20uem9vbUFicygwLCAwLCA0KTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZVJvdGF0aW9uKHRoaXMubGFzdFJvdGF0aW9uKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNsZWFyUGxhbkltYWdlKCkge1xyXG4gICAgaWYgKHRoaXMucGxhbkRpdkNvbnRlbnQpIHtcclxuICAgICAgdGhpcy5wbGFuRGl2Q29udGVudC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd1BkZihjdXJyZW50UGxhbjogUGxhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpIGFzIEhUTUxDYW52YXNFbGVtZW50O1xyXG5cclxuICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcclxuICAgICAgY29uc3QgcGRmanNXb3JrZXIgPSBhd2FpdCBpbXBvcnQoJ3BkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlci5lbnRyeScpO1xyXG5cclxuICAgICAgR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSBwZGZqc1dvcmtlcjtcclxuICAgICAgY29uc3QgcGRmID0gYXdhaXQgZ2V0RG9jdW1lbnQoY3VycmVudFBsYW4uZmlsZXBhdGgpLnByb21pc2U7XHJcbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBwZGYuZ2V0UGFnZSgxKTtcclxuXHJcbiAgICAgIGNvbnN0IHZpZXdQb3J0UGFyYW1ldGVycyA9IHsgc2NhbGU6IDEuNSB9O1xyXG4gICAgICBjb25zdCB2aWV3cG9ydCA9IHBhZ2UuZ2V0Vmlld3BvcnQodmlld1BvcnRQYXJhbWV0ZXJzKTtcclxuXHJcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQ7XHJcbiAgICAgIGNhbnZhcy53aWR0aCA9IHZpZXdwb3J0LndpZHRoO1xyXG4gICAgICBjb25zdCByZW5kZXJDb250ZXh0ID0ge1xyXG4gICAgICAgIGNhbnZhc0NvbnRleHQ6IGNvbnRleHQsXHJcbiAgICAgICAgdmlld3BvcnQsXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IHJlbmRlclRhc2sgPSBwYWdlLnJlbmRlcihyZW5kZXJDb250ZXh0KS5wcm9taXNlO1xyXG4gICAgICByZW5kZXJUYXNrLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGltZ1VybCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xyXG4gICAgICAgIHRoaXMuaW1nUGxhbiA9IGF3YWl0IGdldE1ldGFGb3JJbWFnZShpbWdVcmwpO1xyXG4gICAgICAgIGNvbnN0IHJlY3QgPSB7XHJcbiAgICAgICAgICB3aWR0aDogdGhpcy5wbGFuRGl2Q29udGVudC5vZmZzZXRXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogdGhpcy5wbGFuRGl2Q29udGVudC5vZmZzZXRIZWlnaHQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCB7IGNvZWZmWCwgY29lZmZZIH0gPSBnZXRDb2VmZmljaWVudHNGb3JJbWFnZSh0aGlzLmltZ1BsYW4sIHJlY3QpO1xyXG4gICAgICAgIHRoaXMuY29lZmZQbGFuWCA9IGNvZWZmWDtcclxuICAgICAgICB0aGlzLmNvZWZmUGxhblkgPSBjb2VmZlk7XHJcbiAgICAgICAgdGhpcy5wbGFuRGl2LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoJHtpbWdVcmx9KWA7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0VsZW1lbnQoXHJcbiAgICBlbGVtZW50OiBhbnksXHJcbiAgICB0YWdUeXBlOiBQb2lUeXBlLFxyXG4gICAgY3VycmVudFBsYW46IFBsYW4sXHJcbiAgICB0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZSxcclxuICAgIGNvbmZpZzogQ29uZmlnXHJcbiAgKSB7XHJcbiAgICBjb25zdCBbcG9pXSA9IGVsZW1lbnQucG9pcy5pdGVtcztcclxuICAgIGlmIChwb2kgJiYgcG9pLmNvb3JkaW5hdGUgJiYgY3VycmVudFBsYW4pIHtcclxuICAgICAgY29uc3QgeyB6b25lIH0gPSBjdXJyZW50UGxhbjtcclxuICAgICAgaWYgKHpvbmUpIHtcclxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IEpTT04ucGFyc2UocG9pLmNvb3JkaW5hdGUpO1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG4gICAgICAgIGxldCBlbGVtZW50VGl0bGU6IHN0cmluZztcclxuICAgICAgICBjb25zdCB1cmwgPSB0YWdTZXJ2aWNlLmdldFVybEZvclNlZURldGFpbHMoZWxlbWVudCwgdGFnVHlwZSk7XHJcbiAgICAgICAgbGV0IHRhZ0ljb25JbWFnZTogc3RyaW5nO1xyXG4gICAgICAgIHN3aXRjaCAodGFnVHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBQb2lUeXBlLlRJQ0tFVDoge1xyXG4gICAgICAgICAgICB0YWdJY29uSW1hZ2UgPSBjb25maWcubXlfY29uZmlnLmljb25fdGlja2V0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgUG9pVHlwZS5FUVVJUE1FTlQ6IHtcclxuICAgICAgICAgICAgdGFnSWNvbkltYWdlID0gY29uZmlnLm15X2NvbmZpZy5pY29uX2VxdWlwbWVudDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlIFBvaVR5cGUuTUVBU1VSRTpcclxuICAgICAgICAgICAgdGFnSWNvbkltYWdlID0gY29uZmlnLm15X2NvbmZpZy5pY29uX21lYXN1cmU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBQb2lUeXBlLkRBVEE6XHJcbiAgICAgICAgICAgIHRhZ0ljb25JbWFnZSA9IGNvbmZpZy5teV9jb25maWcuaWNvbl9kYXRhO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgUG9pVHlwZS5ERVNLOlxyXG4gICAgICAgICAgICB0YWdJY29uSW1hZ2UgPSBjb25maWcubXlfY29uZmlnLmljb25fZGF0YTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwb2kudGFnSWNvbikge1xyXG4gICAgICAgICAgY29uc3QgdGFnSWNvbiA9IEpTT04ucGFyc2UocG9pLnRhZ0ljb24pO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0YWdUeXBlID09PSBQb2lUeXBlLkRBVEEgJiZcclxuICAgICAgICAgICAgZWxlbWVudC50eXBlID09PSBGZWF0dXJlVHlwZS5JTkRJQ0FUT1JfVEVNUFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRhZ0ljb24uc3JjID0gdGFnU2VydmljZS5nZXRJY29uVGFnSW1hZ2VGb3JGZWF0dXJlKGVsZW1lbnQsIHBvaSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBwb2kudGFnSWNvbiA9IHRhZ0ljb247XHJcblxyXG4gICAgICAgICAgaWYgKHRhZ0ljb24uc3JjKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGF3YWl0IGdldFNpZ25lZEZpbGUodGFnSWNvbi5zcmMpO1xyXG4gICAgICAgICAgICBpZiAoc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgdGFnSWNvbkltYWdlID0gc291cmNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3R5bGVCdXR0b24oYnV0dG9uLCB0YWdJY29uSW1hZ2UpO1xyXG4gICAgICAgIGJ1dHRvbi5pZCA9IGVsZW1lbnQuaWQ7XHJcbiAgICAgICAgdGhpcy5wbGFuRGl2Q29udGVudC5hcHBlbmQoYnV0dG9uKTtcclxuICAgICAgICBsZXQgeDogbnVtYmVyO1xyXG4gICAgICAgIGxldCB5OiBudW1iZXI7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm5ldykge1xyXG4gICAgICAgICAgLy8gYWxlcnQoXCJuZXcgY2FsaWJyYXRpb24gcGxhbjogcG9zaXRpb25pbmcgbm90IHJlYWR5IHlldFwiKTtcclxuICAgICAgICAgIGNvbnN0IHBvc2l0aW9uMkQgPVxyXG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVBvc2l0aW9uM0RGb3JOZXdDYWxpYnJhdGlvbihwb3NpdGlvbik7XHJcbiAgICAgICAgICB4ID0gcG9zaXRpb24yRC54O1xyXG4gICAgICAgICAgeSA9IHBvc2l0aW9uMkQueTtcclxuICAgICAgICAgIGJ1dHRvbi5zdHlsZS50b3AgPSBgJHt5IC8gcG9zaXRpb24yRC5jb2VmZlkgLSA1fXB4YDtcclxuICAgICAgICAgIGJ1dHRvbi5zdHlsZS5sZWZ0ID0gYCR7eCAvIHBvc2l0aW9uMkQuY29lZmZYIC0gNX1weGA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIHRvIHJlbW92ZSB3aGVuIGFsbCBjYWxpYnJhdGlvbnMgYXJlIG5ld1xyXG4gICAgICAgICAgeCA9XHJcbiAgICAgICAgICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFggKyBwb3NpdGlvbi54ICogdGhpcy5jYWxpYnJhdGlvblBsYW4ueDtcclxuICAgICAgICAgIHkgPVxyXG4gICAgICAgICAgICB0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRZICsgcG9zaXRpb24ueiAqIHRoaXMuY2FsaWJyYXRpb25QbGFuLnk7XHJcbiAgICAgICAgICBidXR0b24uc3R5bGUudG9wID0gYCR7eSAvIHRoaXMuY29lZmZQbGFuWSAtIDV9cHhgO1xyXG4gICAgICAgICAgYnV0dG9uLnN0eWxlLmxlZnQgPSBgJHt4IC8gdGhpcy5jb2VmZlBsYW5YIC0gNX1weGA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBodG1sID0gYXdhaXQgdGFnU2VydmljZS5nZXRIdG1sVG9JbmplY3QodGFnVHlwZSwgZWxlbWVudCk7XHJcbiAgICAgICAgaWYgKGh0bWwgIT0gJycpIHtcclxuICAgICAgICAgIHRoaXMuaHRtbENvbnRlbnRUb0luamVjdC5wdXNoKHtcclxuICAgICAgICAgICAgZWxlbWVudElEOiBlbGVtZW50LmlkLFxyXG4gICAgICAgICAgICB0aXRsZTogJycsXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IGh0bWwsXHJcbiAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgIHRhZ0ljb246IHRhZ0ljb25JbWFnZSxcclxuICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIHdoZW4gd2UgZG9uJ3QgaGF2ZSBodG1sID0+IGNhc2Ugb2YgRU1CRUQgQ29tbWVudCB0eXBlXHJcbiAgICAgICAgICBjb25zdCBjb21tZW50RW1iZWQgPSBlbGVtZW50LmNvbW1lbnRzPy5pdGVtcy5maW5kKFxyXG4gICAgICAgICAgICAoY29tKSA9PiBjb20udHlwZSA9PT0gQ29tbWVudFR5cGUuRU1CRUQgJiYgY29tLnNob3duSW5UYWdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoY29tbWVudEVtYmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaHRtbENvbnRlbnRUb0luamVjdC5wdXNoKHtcclxuICAgICAgICAgICAgICBlbGVtZW50SUQ6IGVsZW1lbnQuaWQsXHJcbiAgICAgICAgICAgICAgdGl0bGU6IGVsZW1lbnQudGl0bGUsXHJcbiAgICAgICAgICAgICAgY29udGVudDogYDxpZnJhbWUgc3JjPSR7Y29tbWVudEVtYmVkLmV4dGVybmFsTGlua30gaGVpZ2h0PVwiMjAwcHhcIiB3aWR0aD1cIjEwMCVcIj48L2lmcmFtZT5gLFxyXG4gICAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgICAgeCxcclxuICAgICAgICAgICAgICB0YWdJY29uOiB0YWdJY29uSW1hZ2UsXHJcbiAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYWRkTGlzdGVuZXJzVG9CdXR0b24oYnV0dG9uLCB1cmwsIGVsZW1lbnQsIHRhZ1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUm90YXRpb24odGhpcy5sYXN0Um90YXRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3VXNlclBvc2l0aW9uKGN1cnJlbnRTd2VlcCA9IHRoaXMuY3VycmVudFN3ZWVwKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRTd2VlcCA9IGN1cnJlbnRTd2VlcDtcclxuICAgIGlmICh0aGlzLmNhbGlicmF0aW9uUGxhbiAmJiBjdXJyZW50U3dlZXApIHtcclxuICAgICAgY29uc3QgcG9zaXRpb24gPVxyXG4gICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0Q3VycmVudENhbWVyYVBvc2l0aW9uKCk/LnBvc2l0aW9uO1xyXG4gICAgICBpZiAocG9zaXRpb24pIHtcclxuICAgICAgICBpZiAoIXRoaXMudXNlclBvc2l0aW9uQnRuKSB7XHJcbiAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG4gICAgICAgICAgdGhpcy51c2VyUG9zaXRpb25CdG4uaWQgPSAnY3VycmVudFBvc2l0aW9uJztcclxuICAgICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuYXBwZW5kKHRoaXMudXNlclBvc2l0aW9uQnRuKTtcclxuICAgICAgICAgIHRoaXMudXNlclBvc2l0aW9uQnRuLnRpdGxlID0gJ1lvdSBhcmUgaGVyZSc7XHJcbiAgICAgICAgICB0aGlzLnN0eWxlQnV0dG9uKFxyXG4gICAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0bixcclxuICAgICAgICAgICAgJ2h0dHBzOi8vYXBpLmljb25pZnkuZGVzaWduL2J4OmJ4cy11c2VyLWNpcmNsZS5zdmc/Y29sb3I9Z3JlZW4maGVpZ2h0PTE3JndpZHRoPTE3J1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHg6IG51bWJlcjtcclxuICAgICAgICBsZXQgeTogbnVtYmVyO1xyXG4gICAgICAgIGlmICh0aGlzLmNhbGlicmF0aW9uUGxhbi5uZXcpIHtcclxuICAgICAgICAgIGNvbnN0IHBvc2l0aW9uMkQgPVxyXG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVBvc2l0aW9uM0RGb3JOZXdDYWxpYnJhdGlvbihwb3NpdGlvbik7XHJcbiAgICAgICAgICB4ID0gcG9zaXRpb24yRC54IC8gcG9zaXRpb24yRC5jb2VmZlggLSA1O1xyXG4gICAgICAgICAgeSA9IHBvc2l0aW9uMkQueSAvIHBvc2l0aW9uMkQuY29lZmZZIC0gNTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeCA9XHJcbiAgICAgICAgICAgICh0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRYICtcclxuICAgICAgICAgICAgICBwb3NpdGlvbi54ICogdGhpcy5jYWxpYnJhdGlvblBsYW4ueCkgL1xyXG4gICAgICAgICAgICB0aGlzLmNvZWZmUGxhblg7XHJcbiAgICAgICAgICB5ID1cclxuICAgICAgICAgICAgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFkgK1xyXG4gICAgICAgICAgICAgIHBvc2l0aW9uLnogKiB0aGlzLmNhbGlicmF0aW9uUGxhbi55KSAvXHJcbiAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51c2VyUG9zaXRpb25CdG4uc3R5bGUudG9wID0gYCR7eX1weGA7XHJcbiAgICAgICAgdGhpcy51c2VyUG9zaXRpb25CdG4uc3R5bGUubGVmdCA9IGAke3h9cHhgO1xyXG4gICAgICAgIHRoaXMubW92ZU9uUG9pbnQoeyB4OiB4ICsgNSwgeTogeSArIDUgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENlbnRlciB0aGUgdmlldyBvZiB0aGUgcGxhbiBvbiBjb29yZGluYXRlc1xyXG4gICAqIEBwYXJhbSBjb29yZGluYXRlIENvb3JkaW5hdGUgb24gdGhlIHBsYW5cclxuICAgKi9cclxuICBtb3ZlT25Qb2ludChjb29yZGluYXRlKSB7XHJcbiAgICBpZiAodGhpcy5wbGFuRGl2KSB7XHJcbiAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5wYW56b29tLmdldFRyYW5zZm9ybSgpLnNjYWxlO1xyXG4gICAgICBjb25zdCBtb3ZlWCA9IHRoaXMucGxhbkRpdi5jbGllbnRXaWR0aCAvIDIgLSBjb29yZGluYXRlLnggKiBzY2FsZTtcclxuICAgICAgY29uc3QgbW92ZVkgPSB0aGlzLnBsYW5EaXYuY2xpZW50SGVpZ2h0IC8gMiAtIGNvb3JkaW5hdGUueSAqIHNjYWxlO1xyXG4gICAgICB0aGlzLnBhbnpvb20ubW92ZVRvKG1vdmVYLCBtb3ZlWSk7XHJcbiAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gYCR7Y29vcmRpbmF0ZS54fXB4ICR7Y29vcmRpbmF0ZS55fXB4YDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IGEgcm90YXRpb24gdG8gdGhlIHBsYW5cclxuICAgKiBCdXR0b25zIHdpbGwgcmVtYWluIGluIHRoZSBjb3JyZWN0IHJvdGF0aW9uXHJcbiAgICogQHBhcmFtIHJvdGF0aW9uXHJcbiAgICovXHJcbiAgdXBkYXRlUm90YXRpb24ocm90YXRpb24pIHtcclxuICAgIHRoaXMubGFzdFJvdGF0aW9uID0gcm90YXRpb247XHJcbiAgICBpZiAodGhpcy5wbGFuRGl2Q29udGVudCkge1xyXG4gICAgICB0aGlzLnBsYW5EaXZDb250ZW50LnN0eWxlLnRyYW5zZm9ybSA9IGByb3RhdGUoJHtyb3RhdGlvbn1kZWcpYDtcclxuICAgICAgY29uc3QgYnV0dG9ucyA9IHRoaXMucGxhbkRpdkNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uJyk7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWFycmF5LWZvci1lYWNoXHJcbiAgICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XHJcbiAgICAgICAgYnV0dG9uLnN0eWxlLnRyYW5zZm9ybSA9IGByb3RhdGUoJHstcm90YXRpb259ZGVnKWA7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ3VycmVudFBvc2l0aW9uKCkge1xyXG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2N1cnJlbnRQb3NpdGlvbicpO1xyXG4gICAgaWYgKGJ1dHRvbikge1xyXG4gICAgICBidXR0b24ucmVtb3ZlKCk7XHJcbiAgICAgIHRoaXMudXNlclBvc2l0aW9uQnRuID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0eWxlQnV0dG9uKGJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQsIHVybDogc3RyaW5nKSB7XHJcbiAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYHVybCgke3VybH0pYDtcclxuICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgYnV0dG9uLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgIGJ1dHRvbi5zdHlsZS5ib3JkZXIgPSAnbm9uZSc7XHJcbiAgICBidXR0b24uc3R5bGUud2lkdGggPSAnMTBweCc7XHJcbiAgICBidXR0b24uc3R5bGUuaGVpZ2h0ID0gJzEwcHgnO1xyXG4gICAgYnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZFNpemUgPSAnY29udGFpbic7XHJcbiAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZFJlcGVhdCA9ICduby1yZXBlYXQnO1xyXG4gIH1cclxuXHJcbiAgYWRkTGlzdGVuZXJzVG9CdXR0b24oXHJcbiAgICBidXR0b246IEhUTUxCdXR0b25FbGVtZW50LFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBlbGVtZW50OiBEYk9iamVjdFR5cGUgPSBudWxsLFxyXG4gICAgdGFnU2VydmljZSA9IG51bGxcclxuICApIHtcclxuICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgYXN5bmMgKGV2ZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnRlbnRGb3JCdXR0b24gPSB0aGlzLmh0bWxDb250ZW50VG9JbmplY3QuZmluZChcclxuICAgICAgICAob2JqZWN0KSA9PiBvYmplY3QuZWxlbWVudElEID09PSBidXR0b24uaWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5idG5UYWdJc0hvdmVyID0gdHJ1ZTtcclxuICAgICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjdGl0bGVUYWdEaXZgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKGNvbnRlbnRGb3JCdXR0b24udGl0bGUpIHtcclxuICAgICAgICB0aXRsZS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XHJcbiAgICAgICAgdGl0bGUuaW5uZXJIVE1MID0gY29udGVudEZvckJ1dHRvbi50aXRsZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aXRsZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI2h0bWxUYWdEaXYgYCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuZGV0YWlsVGFnRGl2LnN0eWxlLnRvcCA9IGAke2V2ZW50LmNsaWVudFkgKyAxMH1weGA7XHJcbiAgICAgIHRoaXMuZGV0YWlsVGFnRGl2LnN0eWxlLmxlZnQgPSBgJHtcclxuICAgICAgICBldmVudC5jbGllbnRYIDwgMTIwID8gMCA6IGV2ZW50LmNsaWVudFggLSAxMjBcclxuICAgICAgfXB4YDtcclxuICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKGNvbnRlbnRGb3JCdXR0b24uY29udGVudCk7XHJcbiAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gY29udGVudEZvckJ1dHRvbi5jb250ZW50O1xyXG4gICAgICBjb25zdCBkZXRhaWxCdXR0b24gPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJyNkZXRhaWxCdG4nKTtcclxuICAgICAgaWYgKGRldGFpbEJ1dHRvbikge1xyXG4gICAgICAgIGRldGFpbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgIHRoaXMudmlzaWJpbGl0eVNlcnZpY2UuZGV0YWlsU2hvd2luZy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IEltYWdlRnVsbHNjcmVlbkJ0biA9IGNvbnRlbnQucXVlcnlTZWxlY3RvcignI2ltYWdlLWZvb3RlcicpO1xyXG4gICAgICBpZiAoSW1hZ2VGdWxsc2NyZWVuQnRuKSB7XHJcbiAgICAgICAgSW1hZ2VGdWxsc2NyZWVuQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQgJiYgdGFnU2VydmljZSkge1xyXG4gICAgICAgICAgICB0YWdTZXJ2aWNlLm9uQWN0aW9uSW1hZ2VDbGljayhlbGVtZW50LmlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBib29raW5nQnV0dG9uID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcjYm9va2luZ0J0bicpO1xyXG4gICAgICBpZiAoYm9va2luZ0J1dHRvbikge1xyXG4gICAgICAgIGJvb2tpbmdCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgIC8vIHdlIHdhaXQgaWYgdXNlciBob3ZlcnMgb24gdG8gZGl2IG9mIHRoZSB0YWcgKGNoYW5nZXMgdGhpcy5mb2N1c01vdXNlVGFnRGl2KVxyXG4gICAgICB0aGlzLmJ0blRhZ0lzSG92ZXIgPSBmYWxzZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZvY3VzTW91c2VUYWdEaXYgJiYgIXRoaXMuYnRuVGFnSXNIb3Zlcikge1xyXG4gICAgICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9KTtcclxuICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcclxuICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbl9tb3ZlX3RvX3RhZyhidXR0b24uaWQpO1xyXG4gICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbGVhckJ0bihpZExpc3Q6IGFueVtdKSB7XHJcbiAgICBmb3IgKGNvbnN0IGlkIG9mIGlkTGlzdCkge1xyXG4gICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjXFxcXCR7aWR9YCk7XHJcbiAgICAgIGlmIChidXR0b24pIHtcclxuICAgICAgICBidXR0b24ucmVtb3ZlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyQWxsQnV0dG9ucygpIHtcclxuICAgIGlmICh0aGlzLnBsYW5EaXZDb250ZW50KSB7XHJcbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0aGlzLnBsYW5EaXZDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpO1xyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1hcnJheS1mb3ItZWFjaFxyXG4gICAgICBidXR0b25zLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5yZW1vdmUoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXNlclBvc2l0aW9uQnRuID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUGxhblJlbW92ZSgpIHtcclxuICAgIHRoaXMudXNlclBvc2l0aW9uQnRuID0gbnVsbDtcclxuICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudFN3ZWVwID0gbnVsbDtcclxuICAgIHRoaXMuZGV0YWlsVGFnRGl2ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlc2l6ZVBsYW4oaXNSZW1vdmluZzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5yZXNpemVQbGFuU3Vic2NyaXB0aW9uLm5leHQoZmFsc2UpO1xyXG4gICAgaWYgKGlzUmVtb3ZpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coJ2luIHJlc2l6ZVBsYW4nKTtcclxuICAgIGlmICh0aGlzLnBsYW5EaXYgJiYgdGhpcy5jdXJyZW50U3dlZXApIHtcclxuICAgICAgdGhpcy5wYW56b29tID0gcGFuem9vbSh0aGlzLnBsYW5EaXYsIHtcclxuICAgICAgICBib3VuZHM6IHRydWUsXHJcbiAgICAgICAgYm91bmRzUGFkZGluZzogMCxcclxuICAgICAgICBtYXhab29tOiA0LFxyXG4gICAgICB9KTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVjdCA9IHtcclxuICAgICAgICAgIHdpZHRoOiB0aGlzLnBsYW5EaXZDb250ZW50Lm9mZnNldFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLnBsYW5EaXZDb250ZW50Lm9mZnNldEhlaWdodCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHsgY29lZmZYLCBjb2VmZlkgfSA9IGdldENvZWZmaWNpZW50c0ZvckltYWdlKHRoaXMuaW1nUGxhbiwgcmVjdCk7XHJcbiAgICAgICAgdGhpcy5jb2VmZlBsYW5YID0gY29lZmZYO1xyXG4gICAgICAgIHRoaXMuY29lZmZQbGFuWSA9IGNvZWZmWTtcclxuICAgICAgICB0aGlzLnBhbnpvb20uem9vbUFicygwLCAwLCA0KTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVBsYW5TdWJzY3JpcHRpb24ubmV4dCh0cnVlKTtcclxuICAgICAgfSwgMjAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZVRvdWNoKGV2ZW50KSB7XHJcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgaWYgKG5vdyAtIHRoaXMubGFzdFRvdWNoVGltZSA8IHRoaXMuZGVsYXlEYmxUb3VjaCkge1xyXG4gICAgICB0aGlzLmxhc3RUb3VjaFRpbWUgPSAwO1xyXG4gICAgICAvLyB0aGlzLm9uRGJsQ2xpY2tQbGFuKGV2ZW50KTtcclxuICAgICAgLyoqIFNpbXVsYXRlIGEgZGJsY2xpY2sgZm9yIHBob25lICh3ZSBkb24ndCBnZXQgb2Zmc2V0WC9ZIG9uIHRvdWNoZXZlbnQpICovXHJcbiAgICAgIGNvbnN0IG5ld0V2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnRzJyk7XHJcbiAgICAgIGNvbnN0IHRvdWNoID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XHJcbiAgICAgIG5ld0V2ZW50LmluaXRNb3VzZUV2ZW50KFxyXG4gICAgICAgICdkYmxjbGljaycsXHJcbiAgICAgICAgdHJ1ZSxcclxuICAgICAgICB0cnVlLFxyXG4gICAgICAgIGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgdG91Y2guc2NyZWVuWCxcclxuICAgICAgICB0b3VjaC5zY3JlZW5ZLFxyXG4gICAgICAgIHRvdWNoLmNsaWVudFgsXHJcbiAgICAgICAgdG91Y2guY2xpZW50WSxcclxuICAgICAgICBldmVudC5jdHJsS2V5LFxyXG4gICAgICAgIGV2ZW50LmFsdEtleSxcclxuICAgICAgICBldmVudC5zaGlydEtleSxcclxuICAgICAgICBldmVudC5tZXRhS2V5LFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgbnVsbFxyXG4gICAgICApO1xyXG4gICAgICBldmVudC50YXJnZXQuZGlzcGF0Y2hFdmVudChuZXdFdmVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxhc3RUb3VjaFRpbWUgPSBub3c7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkRibENsaWNrUGxhbihldmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IGNsaWNrWCA9IGV2ZW50Lm9mZnNldFg7XHJcbiAgICBjb25zdCBjbGlja1kgPSBldmVudC5vZmZzZXRZO1xyXG4gICAgY29uc3Qgem9uZVBsYW4gPSB0aGlzLmN1cnJlbnRQbGFuLnpvbmU7XHJcbiAgICBpZiAoem9uZVBsYW4pIHtcclxuICAgICAgY29uc3QgbmF2aWdhdGlvbnM6IGFueSA9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXROYXZpZ2F0aW9uc0ZvclpvbmUoem9uZVBsYW4pO1xyXG4gICAgICBpZiAobmF2aWdhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgbmF2aWdhdGlvbnMubWFwKGFzeW5jIChuYXYpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBKU09OLnBhcnNlKG5hdi5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgIGxldCB4OiBudW1iZXI7XHJcbiAgICAgICAgICAgIGxldCB5OiBudW1iZXI7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGlicmF0aW9uUGxhbi5uZXcpIHtcclxuICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbjJEID1cclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtUG9zaXRpb24zREZvck5ld0NhbGlicmF0aW9uKHBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICB4ID0gcG9zaXRpb24yRC54IC8gcG9zaXRpb24yRC5jb2VmZlg7XHJcbiAgICAgICAgICAgICAgeSA9IHBvc2l0aW9uMkQueSAvIHBvc2l0aW9uMkQuY29lZmZZO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHggPVxyXG4gICAgICAgICAgICAgICAgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFggK1xyXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbi54ICogdGhpcy5jYWxpYnJhdGlvblBsYW4ueCkgL1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5YO1xyXG4gICAgICAgICAgICAgIHkgPVxyXG4gICAgICAgICAgICAgICAgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFkgK1xyXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbi56ICogdGhpcy5jYWxpYnJhdGlvblBsYW4ueSkgL1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5ZO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkaXN0WCA9IE1hdGguYWJzKGNsaWNrWCAtIHgpO1xyXG4gICAgICAgICAgICBjb25zdCBkaXN0WSA9IE1hdGguYWJzKGNsaWNrWSAtIHkpO1xyXG4gICAgICAgICAgICBuYXYuZGlzdCA9IE1hdGguc3FydChNYXRoLnBvdyhkaXN0WCwgMikgKyBNYXRoLnBvdyhkaXN0WSwgMikpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICAgIG5hdmlnYXRpb25zLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgIHJldHVybiBhLmRpc3QgLSBiLmRpc3Q7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fZ29fdG9fc3dlZXAoXHJcbiAgICAgICAgICBuYXZpZ2F0aW9uc1swXS5tYXR0ZXJwb3J0U3dlZXBJRFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbmZpZ3VyZXMgcGxhbiBmcm9tIGNhY2hlIChwcmV2aW91cyBwbGFuKS5cclxuICAgKi9cclxuICBhc3luYyB1cGxvYWRQbGFuRnJvbUNhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5odG1sQ29udGVudFRvSW5qZWN0ID0gdGhpcy5jYWNoZS5odG1sQ29udGVudDtcclxuICAgIGF3YWl0IHRoaXMuY29uZmlndXJlUGxhbih0aGlzLmNhY2hlLnBsYW4pO1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHV0cyBidXR0b25zICh0YWdzKSBmcm9tIGNhY2hlIGFjY29yZGluZyB0byBwYXNzZWQgZWxlbWVudCBJRHMgKGZvciBmaWx0ZXIgaWYgYW55KVxyXG4gICAqIEBwYXJhbSBlbGVtZW50SURzIGVsZW1lbnRzICh0aWNrZXRzLCBlcXVpcG1lbnRzLCBldGMpIHRvIGJlIHNob3duIG9uIHBsYW5cclxuICAgKi9cclxuICB1cGxvYWRUYWdzRnJvbUNhY2hlKCkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJ1cGxvYWRpbmcgdGFncyBmcm9tIGNhY2hlXCIpO1xyXG5cclxuICAgIGZvciAoY29uc3QgY2FjaGVkIG9mIHRoaXMuY2FjaGUuaHRtbENvbnRlbnQpIHtcclxuICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICAgIHRoaXMuc3R5bGVCdXR0b24oYnV0dG9uLCBjYWNoZWQudGFnSWNvbik7XHJcbiAgICAgIGJ1dHRvbi5pZCA9IGNhY2hlZC5lbGVtZW50SUQ7XHJcbiAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuYXBwZW5kKGJ1dHRvbik7XHJcbiAgICAgIGlmICh0aGlzLmNhbGlicmF0aW9uUGxhbi5uZXcpIHtcclxuICAgICAgICBjb25zdCBuZXdDb2VmZlggPVxyXG4gICAgICAgICAgdGhpcy5jb2VmZlBsYW5YIC9cclxuICAgICAgICAgICh0aGlzLmltZ1BsYW4ud2lkdGggLyB0aGlzLmNhbGlicmF0aW9uUGxhbi5pbWdXaWR0aCk7XHJcbiAgICAgICAgY29uc3QgbmV3Q29lZmZZID1cclxuICAgICAgICAgIHRoaXMuY29lZmZQbGFuWSAvXHJcbiAgICAgICAgICAodGhpcy5pbWdQbGFuLmhlaWdodCAvIHRoaXMuY2FsaWJyYXRpb25QbGFuLmltZ0hlaWdodCk7XHJcbiAgICAgICAgYnV0dG9uLnN0eWxlLnRvcCA9IGAke2NhY2hlZC55IC8gbmV3Q29lZmZZIC0gNX1weGA7XHJcbiAgICAgICAgYnV0dG9uLnN0eWxlLmxlZnQgPSBgJHtjYWNoZWQueCAvIG5ld0NvZWZmWCAtIDV9cHhgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJ1dHRvbi5zdHlsZS50b3AgPSBgJHtjYWNoZWQueSAvIHRoaXMuY29lZmZQbGFuWSAtIDV9cHhgO1xyXG4gICAgICAgIGJ1dHRvbi5zdHlsZS5sZWZ0ID0gYCR7Y2FjaGVkLnggLyB0aGlzLmNvZWZmUGxhblggLSA1fXB4YDtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5hZGRMaXN0ZW5lcnNUb0J1dHRvbihidXR0b24sIGNhY2hlZC51cmwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0Q2FsaWJyYXRlZFBsYW5Gb3Jab25lKHpvbmU6IFpvbmUpOiBQcm9taXNlPFBsYW4+IHtcclxuICAgIGxldCBwbGFucyA9IChhd2FpdCB0aGlzLkFQSS5QbGFuc0J5Wm9uZSh6b25lLmlkKSkuaXRlbXM7XHJcbiAgICBsZXQgcGFyZW50Wm9uZSA9IG51bGw7XHJcbiAgICBpZiAocGxhbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIC8vIHRyeSB0byBmaW5kIHBhcmVudCB6b25lXHJcbiAgICAgIHBhcmVudFpvbmUgPSBhd2FpdCB0aGlzLkFQSS5HZXRab25lKHpvbmUucGFyZW50SUQpO1xyXG4gICAgICBwbGFucyA9IChhd2FpdCB0aGlzLkFQSS5QbGFuc0J5Wm9uZSh6b25lLnBhcmVudElEKSkuaXRlbXM7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjYWxpYnJhdGVkUGxhbiA9IHBsYW5zLmZpbmQoXHJcbiAgICAgIChwbGFuKSA9PiBwbGFuLmNhbGlicmF0aW9uICYmIHBsYW4uaXNDdXJyZW50Rm9yWm9uZVxyXG4gICAgKSBhcyBQbGFuO1xyXG4gICAgaWYgKGNhbGlicmF0ZWRQbGFuKSB7XHJcbiAgICAgIGNvbnN0IHNpZ25lZCA9IGF3YWl0IGdldFNpZ25lZEZpbGUoY2FsaWJyYXRlZFBsYW4uYW5uZXhlKTtcclxuICAgICAgaWYgKHNpZ25lZCkge1xyXG4gICAgICAgIGNhbGlicmF0ZWRQbGFuLmZpbGVwYXRoID0gc2lnbmVkO1xyXG4gICAgICB9XHJcbiAgICAgIGNhbGlicmF0ZWRQbGFuLm5hdmlnYXRpb25JRHMgPSBwYXJlbnRab25lXHJcbiAgICAgICAgPyBwYXJlbnRab25lLnN3ZWVwSURzXHJcbiAgICAgICAgOiB6b25lLnN3ZWVwSURzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhbGlicmF0ZWRQbGFuIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1Qb3NpdGlvbjNERm9yTmV3Q2FsaWJyYXRpb24ocG9zaXRpb246IHtcclxuICAgIHg6IG51bWJlcjtcclxuICAgIHk6IG51bWJlcjtcclxuICAgIHo6IG51bWJlcjtcclxuICB9KTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgY29lZmZYOiBudW1iZXI7IGNvZWZmWTogbnVtYmVyIH0ge1xyXG4gICAgY29uc3QgcG9zaXRpb25YID1cclxuICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4ubmFtZVhBeGlzID09PSAneCcgPyBwb3NpdGlvbi54IDogcG9zaXRpb24uejtcclxuICAgIGNvbnN0IHBvc2l0aW9uWSA9XHJcbiAgICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuLm5hbWVZQXhpcyA9PT0gJ3gnID8gcG9zaXRpb24ueCA6IHBvc2l0aW9uLno7XHJcbiAgICBsZXQgeCA9XHJcbiAgICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFggKyBwb3NpdGlvblggKiB0aGlzLmNhbGlicmF0aW9uUGxhbi5zY2FsZVg7XHJcbiAgICBsZXQgeSA9XHJcbiAgICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFkgKyBwb3NpdGlvblkgKiB0aGlzLmNhbGlicmF0aW9uUGxhbi5zY2FsZVk7XHJcbiAgICBjb25zdCBuZXdDb2VmZlggPVxyXG4gICAgICB0aGlzLmNvZWZmUGxhblggLyAodGhpcy5pbWdQbGFuLndpZHRoIC8gdGhpcy5jYWxpYnJhdGlvblBsYW4uaW1nV2lkdGgpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJuZXdDb2VmZlhcIiwgbmV3Q29lZmZYKTtcclxuICAgIGNvbnN0IG5ld0NvZWZmWSA9XHJcbiAgICAgIHRoaXMuY29lZmZQbGFuWSAvICh0aGlzLmltZ1BsYW4uaGVpZ2h0IC8gdGhpcy5jYWxpYnJhdGlvblBsYW4uaW1nSGVpZ2h0KTtcclxuICAgIHggPSAoeCAtIHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFhQbGFuKSAvIHRoaXMuY2FsaWJyYXRpb25QbGFuLnNjYWxlUGxhbjtcclxuXHJcbiAgICB5ID0gKHkgLSB0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRZUGxhbikgLyB0aGlzLmNhbGlicmF0aW9uUGxhbi5zY2FsZVBsYW47XHJcbiAgICAvLyBjb25zb2xlLmxvZyh4LCB5KTtcclxuXHJcbiAgICByZXR1cm4geyB4LCB5LCBjb2VmZlg6IG5ld0NvZWZmWCwgY29lZmZZOiBuZXdDb2VmZlkgfTtcclxuICB9XHJcbn1cclxuIl19
|
|
646
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvcGxhbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5RCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFpQixPQUFPLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFFekQsT0FBTyxFQUNMLFdBQVcsRUFFWCxXQUFXLEVBRVgsT0FBTyxHQUVSLE1BQU0scUJBQXFCLENBQUM7QUFNN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7QUFNeEQsTUFBTSxPQUFPLFdBQVc7SUEwRXRCLFlBQytCLFdBQWdCLEVBQ3JDLFdBQXdCLEVBQ3hCLGlCQUFvQztJQUM1Qyw4QkFBOEI7SUFDdEIsYUFBNEIsRUFDNUIsTUFBYyxFQUNkLGlCQUFvQztJQUM1Qyw2QkFBNkI7SUFDckIsaUJBQXdDLEVBQ3hDLGNBQThCO1FBUjlCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFFcEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFFcEMsc0JBQWlCLEdB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QUFlLENBQUMsU0FBUyxDQUFDO1FBQzVFLHFCQUFxQjtRQUVyQixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUN4RCxDQUFDOzt3R0FweUJVLFdBQVcsa0JBMkVaLG1CQUFtQjs0R0EzRWxCLFdBQVcsY0FGVixNQUFNOzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkE0RUksTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBmdW5jLW5hbWVzICovXHJcbi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGdldERvY3VtZW50LCBHbG9iYWxXb3JrZXJPcHRpb25zIH0gZnJvbSAncGRmanMtZGlzdCc7XHJcbmltcG9ydCBwYW56b29tIGZyb20gJ3Bhbnpvb20nO1xyXG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtcclxuICBDb21tZW50VHlwZSxcclxuICBEYk9iamVjdFR5cGUsXHJcbiAgRmVhdHVyZVR5cGUsXHJcbiAgUGxhbixcclxuICBQb2lUeXBlLFxyXG4gIFpvbmUsXHJcbn0gZnJvbSAnLi4vLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VWaXNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL2Jhc2VWaXNpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXR0ZXJwb3J0U2VydmljZSB9IGZyb20gJy4uL21hdHRlcnBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFZpZXdlclNlcnZpY2UgfSBmcm9tICcuLi92aWV3ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFpvbmVTZXJ2aWNlIH0gZnJvbSAnLi96b25lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vbmF2aWdhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZ2V0U2lnbmVkRmlsZSwgdXBsb2FkRmlsZVRvUzMgfSBmcm9tICcuLi9zMy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVRhZ1NlcnZpY2UgfSBmcm9tICcuLi90YWcuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZyc7XHJcbmltcG9ydCB7IGdldENvZWZmaWNpZW50c0ZvckltYWdlIH0gZnJvbSAnLi4vem9uZS1kcmF3ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IGdldE1ldGFGb3JJbWFnZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vY29udGVudC5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQbGFuU2VydmljZSB7XHJcbiAgY2hvc2VuUGxhbjogUGxhbjtcclxuXHJcbiAgY3VycmVudFBsYW46IFBsYW47XHJcblxyXG4gIGN1cnJlbnRTd2VlcDogc3RyaW5nO1xyXG5cclxuICBwbGFuRmlsZUNhY2hlOiBGaWxlO1xyXG5cclxuICBwbGFuQ2FudmFzOiBhbnk7XHJcblxyXG4gIHBsYW5EaXY6IEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudDtcclxuICBwbGFuRGl2Q29udGVudDogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIHBhbnpvb206IGFueTtcclxuXHJcbiAgaXNSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICB1c2VyUG9zaXRpb25CdG46IEhUTUxCdXR0b25FbGVtZW50O1xyXG5cclxuICBjb2VmZlBsYW5YOiBudW1iZXI7XHJcblxyXG4gIGNvZWZmUGxhblk6IG51bWJlcjtcclxuXHJcbiAgY2FsaWJyYXRpb25QbGFuOiBhbnk7XHJcblxyXG4gIGRldGFpbFRhZ0RpdjogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIGRldGFpbFRhZ0RpdklzSG92ZXIgPSBmYWxzZTtcclxuXHJcbiAgYnRuVGFnSXNIb3ZlciA9IGZhbHNlO1xyXG5cclxuICByZXNpemVQbGFuU3Vic2NyaXB0aW9uID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgaW1nUGxhbjogSFRNTEltYWdlRWxlbWVudDtcclxuXHJcbiAgbGFzdFRvdWNoVGltZSA9IDA7XHJcblxyXG4gIGRlbGF5RGJsVG91Y2ggPSA1MDA7XHJcblxyXG4gIGxhc3RSb3RhdGlvbjogbnVtYmVyID0gMDtcclxuXHJcbiAgaHRtbENvbnRlbnRUb0luamVjdDoge1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIGNvbnRlbnQ6IHN0cmluZztcclxuICAgIGVsZW1lbnRJRDogc3RyaW5nO1xyXG4gICAgeTogbnVtYmVyO1xyXG4gICAgeDogbnVtYmVyO1xyXG4gICAgdGFnSWNvbjogc3RyaW5nO1xyXG4gICAgdXJsOiBzdHJpbmc7XHJcbiAgfVtdID0gW107XHJcblxyXG4gIGNhY2hlOiB7XHJcbiAgICBlcXVpcElEczogc3RyaW5nW107XHJcbiAgICB0aWNrZXRJRHM6IHN0cmluZ1tdO1xyXG4gICAgbWVhc3VyZW1lbnRzSURzOiBzdHJpbmdbXTtcclxuICAgIGZlYXR1cmVJRHM6IHN0cmluZ1tdO1xyXG4gICAgem9uZUlEOiBzdHJpbmc7XHJcbiAgICBwbGFuOiBQbGFuO1xyXG4gICAgaHRtbENvbnRlbnQ6IHtcclxuICAgICAgdGl0bGU6IHN0cmluZztcclxuICAgICAgY29udGVudDogc3RyaW5nO1xyXG4gICAgICBlbGVtZW50SUQ6IHN0cmluZztcclxuICAgICAgeTogbnVtYmVyO1xyXG4gICAgICB4OiBudW1iZXI7XHJcbiAgICAgIHRhZ0ljb246IHN0cmluZztcclxuICAgICAgdXJsOiBzdHJpbmc7XHJcbiAgICB9W107XHJcbiAgfTtcclxuXHJcbiAgZm9jdXNNb3VzZVRhZ0RpdjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBBUEk6IGFueTsgLy9BV1NcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KCdjdXJyZW50QVBJU2VydmljZScpIGFwaUluamVjdGVkOiBhbnksXHJcbiAgICBwcml2YXRlIHpvbmVTZXJ2aWNlOiBab25lU2VydmljZSxcclxuICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgLy8gdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHZpZXdlclNlcnZpY2U6IFZpZXdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBtYXR0ZXJwb3J0U2VydmljZTogTWF0dGVycG9ydFNlcnZpY2UsXHJcbiAgICAvLyBwcml2YXRlIGNvbmZpZzogQXBwQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSB2aXNpYmlsaXR5U2VydmljZTogQmFzZVZpc2liaWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb250ZW50U2VydmljZTogQ29udGVudFNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuQVBJID0gYXBpSW5qZWN0ZWQ7XHJcbiAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmN1cnJlbnRDYW1lcmFQb3NlLnN1YnNjcmliZSgocG9zZSkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZVJvdGF0aW9uKHBvc2Uucm90YXRpb24ueSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNyZWF0ZVBsYW4ocGxhbklucHV0OiBQbGFuKTogUHJvbWlzZTxQbGFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZVBsYW4ocGxhbklucHV0KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRlbGV0ZVBsYW4ocGxhbjogUGxhbik6IFByb21pc2U8UGxhbj4ge1xyXG4gICAgLy8gYXdhaXQgZGVsZXRlRnJvbVMzKHBsYW4uYW5uZXhlKTtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uRGVsZXRlUGxhbih7IGlkOiBwbGFuLmlkIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0UGxhbnNGb3JTcGFjZShzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPFBsYW5bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xyXG4gICAgICAuUGxhbnNCeVNwYWNlKHNwYWNlSUQpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuaXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0UGxhbnNGb3Jab25lKHpvbmVJRDogc3RyaW5nKTogUHJvbWlzZTxQbGFuW10+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX19cclxuICAgICAgLlBsYW5zQnlab25lKHpvbmVJRClcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5pdGVtcyk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRTaW5nZWRQbGFuc0ZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8UGxhbltdPiB7XHJcbiAgICBjb25zdCBwbGFuc0Zyb21EQiA9IGF3YWl0IHRoaXMuZ2V0UGxhbnNGb3JTcGFjZShzcGFjZUlEKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHBsYW5zRnJvbURCKTtcclxuICAgIGNvbnN0IHBsYW5zID0gW107XHJcbiAgICBpZiAocGxhbnNGcm9tREIubGVuZ3RoID4gMCkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBwbGFuc0Zyb21EQi5tYXAoYXN5bmMgKHBsYW4pID0+IHtcclxuICAgICAgICAgIGNvbnN0IHBsYW5PYmplY3QgPSB7IC4uLnBsYW4gfSBhcyBQbGFuO1xyXG4gICAgICAgICAgLy8gYW5uZXhlIGxvb2tzIGxpa2UgdmlzaXRzL21vZGVsSUQvcGxhbnMvZmlsZS5leHRlbnNpb25cclxuICAgICAgICAgIGNvbnN0IHNpZ25lZCA9IGF3YWl0IGdldFNpZ25lZEZpbGUocGxhbi5hbm5leGUpO1xyXG4gICAgICAgICAgaWYgKHNpZ25lZCkge1xyXG4gICAgICAgICAgICBwbGFuT2JqZWN0LmZpbGVwYXRoID0gc2lnbmVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHBsYW4uYW5uZXhlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFssIG1vZGVsSUQsICwgZmlsZW5hbWVXaXRoRXh0ZW5zaW9uXSA9IHBsYW4uYW5uZXhlLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IFssIGV4dGVudGlvbl0gPSBmaWxlbmFtZVdpdGhFeHRlbnNpb24uc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgcGxhbk9iamVjdC5tb2RlbDNkID0gbW9kZWxJRDtcclxuICAgICAgICAgICAgcGxhbk9iamVjdC5leHRlbnNpb24gPSBleHRlbnRpb247XHJcbiAgICAgICAgICAgIHBsYW5zLnB1c2gocGxhbk9iamVjdCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3IgcGxhbiBoYXZlIG5vdCBhbm5leGUgPT4gYCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHBsYW4uaWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGxhbnM7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRQbGFuc1dpdGhab25lc0ZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8UGxhbltdPiB7XHJcbiAgICBjb25zdCBwbGFucyA9IGF3YWl0IHRoaXMuZ2V0UGxhbnNGb3JTcGFjZShzcGFjZUlEKTtcclxuICAgIGNvbnN0IHBsYW5zWm9uZXMgPSBwbGFucy5maWx0ZXIoKHBsYW4pID0+IHBsYW4uem9uZSAmJiBwbGFuLmNhbGlicmF0aW9uKTtcclxuICAgIHJldHVybiBwbGFuc1pvbmVzO1xyXG4gIH1cclxuXHJcbiAgc2V0Q2hvc2VuUGxhbihjaG9zZW5QbGFuOiBQbGFuKSB7XHJcbiAgICB0aGlzLmNob3NlblBsYW4gPSBjaG9zZW5QbGFuO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hvc2VuUGxhbigpOiBQbGFuIHtcclxuICAgIHJldHVybiB0aGlzLmNob3NlblBsYW47XHJcbiAgfVxyXG5cclxuICBzZXRQbGFuRmlsZUNhY2hlKHBsYW5GaWxlQ2FjaGU6IEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMucGxhbkZpbGVDYWNoZSA9IHBsYW5GaWxlQ2FjaGU7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRQbGFuRmlsZUNhY2hlKCk6IEZpbGUge1xyXG4gICAgcmV0dXJuIHRoaXMucGxhbkZpbGVDYWNoZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNyZWF0ZVBsYW5XaXRoQW5uZXhlKHBsYW46IFBsYW4sIGZpbGU6IEZpbGUpOiBQcm9taXNlPFBsYW4+IHtcclxuICAgIGNvbnN0IGNyZWF0ZWRQbGFuID0gYXdhaXQgdGhpcy5jcmVhdGVQbGFuKHBsYW4pO1xyXG4gICAgY29uc3QgbW9kZWwzRCA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0TW9kZWwzREZvclpvbmUocGxhbi56b25lSUQpO1xyXG4gICAgY29uc3QgdXJsID0gYXdhaXQgdXBsb2FkRmlsZVRvUzMoXHJcbiAgICAgIGB2aXNpdHMvJHttb2RlbDNEfS9wbGFucy9gLFxyXG4gICAgICBmaWxlLFxyXG4gICAgICBjcmVhdGVkUGxhbi5pZFxyXG4gICAgKTtcclxuICAgIGlmICh1cmwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5VcGRhdGVQbGFuKHsgaWQ6IGNyZWF0ZWRQbGFuLmlkLCBhbm5leGU6IHVybCB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBjcmVhdGVkUGxhbjtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZVBsYW4ocGxhbjogYW55KTogUHJvbWlzZTxQbGFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLlVwZGF0ZVBsYW4ocGxhbik7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVQbGFuRmlsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgaWYgKHRoaXMuY2hvc2VuUGxhbiAmJiB0aGlzLnBsYW5GaWxlQ2FjaGUpIHtcclxuICAgICAgY29uc3QgbW9kZWwzRCA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0TW9kZWwzREZvclpvbmUoXHJcbiAgICAgICAgdGhpcy5jaG9zZW5QbGFuLnpvbmVJRFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gdXBsb2FkRmlsZVRvUzMoXHJcbiAgICAgICAgYHZpc2l0cy8ke21vZGVsM0R9L3BsYW5zL2AsXHJcbiAgICAgICAgdGhpcy5wbGFuRmlsZUNhY2hlLFxyXG4gICAgICAgIHRoaXMuY2hvc2VuUGxhbi5pZFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzZXRBbGxQbGFuc0ZvclpvbmVOb3RDdXJyZW50KHpvbmVJRDogc3RyaW5nLCBjdXJyZW50UGxhbklEOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHBsYW5zID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkxpc3RQbGFucyh7XHJcbiAgICAgIHpvbmVJRDogeyBlcTogem9uZUlEIH0sXHJcbiAgICB9KTtcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICBwbGFucy5pdGVtcy5tYXAoYXN5bmMgKHBsYW4pID0+IHtcclxuICAgICAgICBpZiAocGxhbi5pc0N1cnJlbnRGb3Jab25lICYmIHBsYW4uaWQgIT09IGN1cnJlbnRQbGFuSUQpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlUGxhbih7XHJcbiAgICAgICAgICAgIGlkOiBwbGFuLmlkLFxyXG4gICAgICAgICAgICBpc0N1cnJlbnRGb3Jab25lOiBmYWxzZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjb25maWd1cmVQbGFuKFxyXG4gICAgY3VycmVudFBsYW46IFBsYW4sXHJcbiAgICBkaXZJZDogc3RyaW5nID0gJ3BsYW5EaXZQYW5lJyxcclxuICAgIGRpdkNvbnRlbnRJZDogc3RyaW5nID0gJ3BsYW5EaXZQYW5lQ29udGVudCdcclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnNvbGUubG9nKCc8PiBDT25maWd1cmUgUExBTiA6ICcsIGN1cnJlbnRQbGFuLCBkaXZJZCwgZGl2Q29udGVudElkKTtcclxuICAgIHRoaXMuaXNSZWFkeSA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzLmRldGFpbFRhZ0Rpdikge1xyXG4gICAgICB0aGlzLmRldGFpbFRhZ0RpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgYCNkZXRhaWxUYWdEaXZgXHJcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRldGFpbFRhZ0Rpdi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLmZvY3VzTW91c2VUYWdEaXYgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRldGFpbFRhZ0Rpdi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLmJ0blRhZ0lzSG92ZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgdGhpcy5mb2N1c01vdXNlVGFnRGl2ID0gZmFsc2U7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbGlicmF0aW9uUGxhbiA9IEpTT04ucGFyc2UoY3VycmVudFBsYW4uY2FsaWJyYXRpb24pO1xyXG4gICAgdGhpcy5jdXJyZW50UGxhbiA9IGN1cnJlbnRQbGFuO1xyXG4gICAgdGhpcy5wbGFuRGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7ZGl2SWR9YCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICB0aGlzLnBsYW5EaXZDb250ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgYCMke2RpdkNvbnRlbnRJZH1gXHJcbiAgICApIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIHRoaXMucGxhbkRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5oYW5kbGVUb3VjaC5iaW5kKHRoaXMpKTtcclxuICAgIHRoaXMucGxhbkRpdi5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsIHRoaXMub25EYmxDbGlja1BsYW4uYmluZCh0aGlzKSk7XHJcblxyXG4gICAgaWYgKCFjdXJyZW50UGxhbi5hbm5leGUuaW5jbHVkZXMoJ3BkZicpKSB7XHJcbiAgICAgIHRoaXMuaW1nUGxhbiA9IGF3YWl0IGdldE1ldGFGb3JJbWFnZShjdXJyZW50UGxhbi5maWxlcGF0aCk7XHJcbiAgICAgIC8vUmVjdCB1c2Ugb2Zmc2V0V2lkdGggOiBoZWlnaHQsIG5vdCBhY3R1YWwgYm91bmRpbmdDbGllbnRSZWN0IGJlY2F1c2Ugd2lsbCBiZSBtb2RpZmllZCBieSB0aGUgem9vbS5cclxuICAgICAgY29uc3QgcmVjdCA9IHtcclxuICAgICAgICB3aWR0aDogdGhpcy5wbGFuRGl2Q29udGVudC5vZmZzZXRXaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMucGxhbkRpdkNvbnRlbnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCB7IGNvZWZmWCwgY29lZmZZIH0gPSBnZXRDb2VmZmljaWVudHNGb3JJbWFnZSh0aGlzLmltZ1BsYW4sIHJlY3QpO1xyXG4gICAgICB0aGlzLmNvZWZmUGxhblggPSBjb2VmZlg7XHJcbiAgICAgIHRoaXMuY29lZmZQbGFuWSA9IGNvZWZmWTtcclxuXHJcbiAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYHVybCgke2N1cnJlbnRQbGFuLmZpbGVwYXRofSlgO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXdhaXQgdGhpcy5kcmF3UGRmKGN1cnJlbnRQbGFuKTtcclxuICAgIH1cclxuICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUuYmFja2dyb3VuZFNpemUgPSAnY29udGFpbic7XHJcbiAgICB0aGlzLnBsYW5EaXZDb250ZW50LnN0eWxlLmJhY2tncm91bmRSZXBlYXQgPSAnbm8tcmVwZWF0JztcclxuXHJcbiAgICB0aGlzLnBhbnpvb20gPSBwYW56b29tKHRoaXMucGxhbkRpdiwge1xyXG4gICAgICBib3VuZHM6IHRydWUsXHJcbiAgICAgIGJvdW5kc1BhZGRpbmc6IDAsXHJcbiAgICAgIG1heFpvb206IDQsXHJcbiAgICAgIHpvb21Eb3VibGVDbGlja1NwZWVkOiAxLCAvL2Rpc2FibGVzIGRvdWJsZSBjbGljayB6b29tXHJcbiAgICAgIC8vaW5pdGlhbFpvb206IDRcclxuICAgIH0pO1xyXG4gICAgdGhpcy5wYW56b29tLnpvb21BYnMoMCwgMCwgNCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVSb3RhdGlvbih0aGlzLmxhc3RSb3RhdGlvbik7XHJcbiAgICB9LCAyMDApO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBjbGVhclBsYW5JbWFnZSgpIHtcclxuICAgIGlmICh0aGlzLnBsYW5EaXZDb250ZW50KSB7XHJcbiAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdQZGYoY3VycmVudFBsYW46IFBsYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSBhcyBIVE1MQ2FudmFzRWxlbWVudDtcclxuXHJcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XHJcbiAgICAgIGNvbnN0IHBkZmpzV29ya2VyID0gYXdhaXQgaW1wb3J0KCdwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIuZW50cnknKTtcclxuXHJcbiAgICAgIEdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjID0gcGRmanNXb3JrZXI7XHJcbiAgICAgIGNvbnN0IHBkZiA9IGF3YWl0IGdldERvY3VtZW50KGN1cnJlbnRQbGFuLmZpbGVwYXRoKS5wcm9taXNlO1xyXG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgcGRmLmdldFBhZ2UoMSk7XHJcblxyXG4gICAgICBjb25zdCB2aWV3UG9ydFBhcmFtZXRlcnMgPSB7IHNjYWxlOiAxLjUgfTtcclxuICAgICAgY29uc3Qgdmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHZpZXdQb3J0UGFyYW1ldGVycyk7XHJcblxyXG4gICAgICBjYW52YXMuaGVpZ2h0ID0gdmlld3BvcnQuaGVpZ2h0O1xyXG4gICAgICBjYW52YXMud2lkdGggPSB2aWV3cG9ydC53aWR0aDtcclxuICAgICAgY29uc3QgcmVuZGVyQ29udGV4dCA9IHtcclxuICAgICAgICBjYW52YXNDb250ZXh0OiBjb250ZXh0LFxyXG4gICAgICAgIHZpZXdwb3J0LFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCByZW5kZXJUYXNrID0gcGFnZS5yZW5kZXIocmVuZGVyQ29udGV4dCkucHJvbWlzZTtcclxuICAgICAgcmVuZGVyVGFzay50aGVuKGFzeW5jICgpID0+IHtcclxuICAgICAgICBjb25zdCBpbWdVcmwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcclxuICAgICAgICB0aGlzLmltZ1BsYW4gPSBhd2FpdCBnZXRNZXRhRm9ySW1hZ2UoaW1nVXJsKTtcclxuICAgICAgICBjb25zdCByZWN0ID0ge1xyXG4gICAgICAgICAgd2lkdGg6IHRoaXMucGxhbkRpdkNvbnRlbnQub2Zmc2V0V2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMucGxhbkRpdkNvbnRlbnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgeyBjb2VmZlgsIGNvZWZmWSB9ID0gZ2V0Q29lZmZpY2llbnRzRm9ySW1hZ2UodGhpcy5pbWdQbGFuLCByZWN0KTtcclxuICAgICAgICB0aGlzLmNvZWZmUGxhblggPSBjb2VmZlg7XHJcbiAgICAgICAgdGhpcy5jb2VmZlBsYW5ZID0gY29lZmZZO1xyXG4gICAgICAgIHRoaXMucGxhbkRpdi5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKCR7aW1nVXJsfSlgO1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdFbGVtZW50KFxyXG4gICAgZWxlbWVudDogYW55LFxyXG4gICAgdGFnVHlwZTogUG9pVHlwZSxcclxuICAgIGN1cnJlbnRQbGFuOiBQbGFuLFxyXG4gICAgdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2UsXHJcbiAgICBjb25maWc6IENvbmZpZ1xyXG4gICkge1xyXG4gICAgY29uc3QgW3BvaV0gPSBlbGVtZW50LnBvaXMuaXRlbXM7XHJcbiAgICBpZiAocG9pICYmIHBvaS5jb29yZGluYXRlICYmIGN1cnJlbnRQbGFuKSB7XHJcbiAgICAgIGNvbnN0IHsgem9uZSB9ID0gY3VycmVudFBsYW47XHJcbiAgICAgIGlmICh6b25lKSB7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKTtcclxuICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuICAgICAgICBsZXQgZWxlbWVudFRpdGxlOiBzdHJpbmc7XHJcbiAgICAgICAgY29uc3QgdXJsID0gdGFnU2VydmljZS5nZXRVcmxGb3JTZWVEZXRhaWxzKGVsZW1lbnQsIHRhZ1R5cGUpO1xyXG4gICAgICAgIGxldCB0YWdJY29uSW1hZ2U6IHN0cmluZztcclxuICAgICAgICBzd2l0Y2ggKHRhZ1R5cGUpIHtcclxuICAgICAgICAgIGNhc2UgUG9pVHlwZS5USUNLRVQ6IHtcclxuICAgICAgICAgICAgdGFnSWNvbkltYWdlID0gY29uZmlnLm15X2NvbmZpZy5pY29uX3RpY2tldDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlIFBvaVR5cGUuRVFVSVBNRU5UOiB7XHJcbiAgICAgICAgICAgIHRhZ0ljb25JbWFnZSA9IGNvbmZpZy5teV9jb25maWcuaWNvbl9lcXVpcG1lbnQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSBQb2lUeXBlLk1FQVNVUkU6XHJcbiAgICAgICAgICAgIHRhZ0ljb25JbWFnZSA9IGNvbmZpZy5teV9jb25maWcuaWNvbl9tZWFzdXJlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgUG9pVHlwZS5EQVRBOlxyXG4gICAgICAgICAgICB0YWdJY29uSW1hZ2UgPSBjb25maWcubXlfY29uZmlnLmljb25fZGF0YTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFBvaVR5cGUuREVTSzpcclxuICAgICAgICAgICAgdGFnSWNvbkltYWdlID0gY29uZmlnLm15X2NvbmZpZy5pY29uX2RhdGE7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocG9pLnRhZ0ljb24pIHtcclxuICAgICAgICAgIGNvbnN0IHRhZ0ljb24gPSBKU09OLnBhcnNlKHBvaS50YWdJY29uKTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGFnVHlwZSA9PT0gUG9pVHlwZS5EQVRBICYmXHJcbiAgICAgICAgICAgIGVsZW1lbnQudHlwZSA9PT0gRmVhdHVyZVR5cGUuSU5ESUNBVE9SX1RFTVBcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0YWdJY29uLnNyYyA9IHRhZ1NlcnZpY2UuZ2V0SWNvblRhZ0ltYWdlRm9yRmVhdHVyZShlbGVtZW50LCBwb2kpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gcG9pLnRhZ0ljb24gPSB0YWdJY29uO1xyXG5cclxuICAgICAgICAgIGlmICh0YWdJY29uLnNyYykge1xyXG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCBnZXRTaWduZWRGaWxlKHRhZ0ljb24uc3JjKTtcclxuICAgICAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgIHRhZ0ljb25JbWFnZSA9IHNvdXJjZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0eWxlQnV0dG9uKGJ1dHRvbiwgdGFnSWNvbkltYWdlKTtcclxuICAgICAgICBidXR0b24uaWQgPSBlbGVtZW50LmlkO1xyXG4gICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuYXBwZW5kKGJ1dHRvbik7XHJcbiAgICAgICAgbGV0IHg6IG51bWJlcjtcclxuICAgICAgICBsZXQgeTogbnVtYmVyO1xyXG4gICAgICAgIGlmICh0aGlzLmNhbGlicmF0aW9uUGxhbi5uZXcpIHtcclxuICAgICAgICAgIC8vIGFsZXJ0KFwibmV3IGNhbGlicmF0aW9uIHBsYW46IHBvc2l0aW9uaW5nIG5vdCByZWFkeSB5ZXRcIik7XHJcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbjJEID1cclxuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Qb3NpdGlvbjNERm9yTmV3Q2FsaWJyYXRpb24ocG9zaXRpb24pO1xyXG4gICAgICAgICAgeCA9IHBvc2l0aW9uMkQueDtcclxuICAgICAgICAgIHkgPSBwb3NpdGlvbjJELnk7XHJcbiAgICAgICAgICBidXR0b24uc3R5bGUudG9wID0gYCR7eSAvIHBvc2l0aW9uMkQuY29lZmZZIC0gNX1weGA7XHJcbiAgICAgICAgICBidXR0b24uc3R5bGUubGVmdCA9IGAke3ggLyBwb3NpdGlvbjJELmNvZWZmWCAtIDV9cHhgO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyB0byByZW1vdmUgd2hlbiBhbGwgY2FsaWJyYXRpb25zIGFyZSBuZXdcclxuICAgICAgICAgIHggPVxyXG4gICAgICAgICAgICB0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRYICsgcG9zaXRpb24ueCAqIHRoaXMuY2FsaWJyYXRpb25QbGFuLng7XHJcbiAgICAgICAgICB5ID1cclxuICAgICAgICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4ub2Zmc2V0WSArIHBvc2l0aW9uLnogKiB0aGlzLmNhbGlicmF0aW9uUGxhbi55O1xyXG4gICAgICAgICAgYnV0dG9uLnN0eWxlLnRvcCA9IGAke3kgLyB0aGlzLmNvZWZmUGxhblkgLSA1fXB4YDtcclxuICAgICAgICAgIGJ1dHRvbi5zdHlsZS5sZWZ0ID0gYCR7eCAvIHRoaXMuY29lZmZQbGFuWCAtIDV9cHhgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGF3YWl0IHRhZ1NlcnZpY2UuZ2V0SHRtbFRvSW5qZWN0KHRhZ1R5cGUsIGVsZW1lbnQpO1xyXG4gICAgICAgIGlmIChodG1sICE9ICcnKSB7XHJcbiAgICAgICAgICB0aGlzLmh0bWxDb250ZW50VG9JbmplY3QucHVzaCh7XHJcbiAgICAgICAgICAgIGVsZW1lbnRJRDogZWxlbWVudC5pZCxcclxuICAgICAgICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICAgICAgICBjb250ZW50OiBodG1sLFxyXG4gICAgICAgICAgICB5LFxyXG4gICAgICAgICAgICB4LFxyXG4gICAgICAgICAgICB0YWdJY29uOiB0YWdJY29uSW1hZ2UsXHJcbiAgICAgICAgICAgIHVybCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyB3aGVuIHdlIGRvbid0IGhhdmUgaHRtbCA9PiBjYXNlIG9mIEVNQkVEIENvbW1lbnQgdHlwZVxyXG4gICAgICAgICAgY29uc3QgY29tbWVudEVtYmVkID0gZWxlbWVudC5jb21tZW50cz8uaXRlbXMuZmluZChcclxuICAgICAgICAgICAgKGNvbSkgPT4gY29tLnR5cGUgPT09IENvbW1lbnRUeXBlLkVNQkVEICYmIGNvbS5zaG93bkluVGFnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKGNvbW1lbnRFbWJlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmh0bWxDb250ZW50VG9JbmplY3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgZWxlbWVudElEOiBlbGVtZW50LmlkLFxyXG4gICAgICAgICAgICAgIHRpdGxlOiBlbGVtZW50LnRpdGxlLFxyXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGA8aWZyYW1lIHNyYz0ke2NvbW1lbnRFbWJlZC5leHRlcm5hbExpbmt9IGhlaWdodD1cIjIwMHB4XCIgd2lkdGg9XCIxMDAlXCI+PC9pZnJhbWU+YCxcclxuICAgICAgICAgICAgICB5LFxyXG4gICAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgICAgdGFnSWNvbjogdGFnSWNvbkltYWdlLFxyXG4gICAgICAgICAgICAgIHVybCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFkZExpc3RlbmVyc1RvQnV0dG9uKGJ1dHRvbiwgdXJsLCB0YWdTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVJvdGF0aW9uKHRoaXMubGFzdFJvdGF0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd1VzZXJQb3NpdGlvbihjdXJyZW50U3dlZXAgPSB0aGlzLmN1cnJlbnRTd2VlcCkge1xyXG4gICAgdGhpcy5jdXJyZW50U3dlZXAgPSBjdXJyZW50U3dlZXA7XHJcbiAgICBpZiAodGhpcy5jYWxpYnJhdGlvblBsYW4gJiYgY3VycmVudFN3ZWVwKSB7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uID1cclxuICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldEN1cnJlbnRDYW1lcmFQb3NpdGlvbigpPy5wb3NpdGlvbjtcclxuICAgICAgaWYgKHBvc2l0aW9uKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVzZXJQb3NpdGlvbkJ0bikge1xyXG4gICAgICAgICAgdGhpcy51c2VyUG9zaXRpb25CdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuICAgICAgICAgIHRoaXMudXNlclBvc2l0aW9uQnRuLmlkID0gJ2N1cnJlbnRQb3NpdGlvbic7XHJcbiAgICAgICAgICB0aGlzLnBsYW5EaXZDb250ZW50LmFwcGVuZCh0aGlzLnVzZXJQb3NpdGlvbkJ0bik7XHJcbiAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0bi50aXRsZSA9ICdZb3UgYXJlIGhlcmUnO1xyXG4gICAgICAgICAgdGhpcy5zdHlsZUJ1dHRvbihcclxuICAgICAgICAgICAgdGhpcy51c2VyUG9zaXRpb25CdG4sXHJcbiAgICAgICAgICAgICdodHRwczovL2FwaS5pY29uaWZ5LmRlc2lnbi9ieDpieHMtdXNlci1jaXJjbGUuc3ZnP2NvbG9yPWdyZWVuJmhlaWdodD0xNyZ3aWR0aD0xNydcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB4OiBudW1iZXI7XHJcbiAgICAgICAgbGV0IHk6IG51bWJlcjtcclxuICAgICAgICBpZiAodGhpcy5jYWxpYnJhdGlvblBsYW4ubmV3KSB7XHJcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbjJEID1cclxuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Qb3NpdGlvbjNERm9yTmV3Q2FsaWJyYXRpb24ocG9zaXRpb24pO1xyXG4gICAgICAgICAgeCA9IHBvc2l0aW9uMkQueCAvIHBvc2l0aW9uMkQuY29lZmZYIC0gNTtcclxuICAgICAgICAgIHkgPSBwb3NpdGlvbjJELnkgLyBwb3NpdGlvbjJELmNvZWZmWSAtIDU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHggPVxyXG4gICAgICAgICAgICAodGhpcy5jYWxpYnJhdGlvblBsYW4ub2Zmc2V0WCArXHJcbiAgICAgICAgICAgICAgcG9zaXRpb24ueCAqIHRoaXMuY2FsaWJyYXRpb25QbGFuLngpIC9cclxuICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5YO1xyXG4gICAgICAgICAgeSA9XHJcbiAgICAgICAgICAgICh0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRZICtcclxuICAgICAgICAgICAgICBwb3NpdGlvbi56ICogdGhpcy5jYWxpYnJhdGlvblBsYW4ueSkgL1xyXG4gICAgICAgICAgICB0aGlzLmNvZWZmUGxhblk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXNlclBvc2l0aW9uQnRuLnN0eWxlLnRvcCA9IGAke3l9cHhgO1xyXG4gICAgICAgIHRoaXMudXNlclBvc2l0aW9uQnRuLnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcclxuICAgICAgICB0aGlzLm1vdmVPblBvaW50KHsgeDogeCArIDUsIHk6IHkgKyA1IH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDZW50ZXIgdGhlIHZpZXcgb2YgdGhlIHBsYW4gb24gY29vcmRpbmF0ZXNcclxuICAgKiBAcGFyYW0gY29vcmRpbmF0ZSBDb29yZGluYXRlIG9uIHRoZSBwbGFuXHJcbiAgICovXHJcbiAgbW92ZU9uUG9pbnQoY29vcmRpbmF0ZSkge1xyXG4gICAgaWYgKHRoaXMucGxhbkRpdikge1xyXG4gICAgICBjb25zdCBzY2FsZSA9IHRoaXMucGFuem9vbS5nZXRUcmFuc2Zvcm0oKS5zY2FsZTtcclxuICAgICAgY29uc3QgbW92ZVggPSB0aGlzLnBsYW5EaXYuY2xpZW50V2lkdGggLyAyIC0gY29vcmRpbmF0ZS54ICogc2NhbGU7XHJcbiAgICAgIGNvbnN0IG1vdmVZID0gdGhpcy5wbGFuRGl2LmNsaWVudEhlaWdodCAvIDIgLSBjb29yZGluYXRlLnkgKiBzY2FsZTtcclxuICAgICAgdGhpcy5wYW56b29tLm1vdmVUbyhtb3ZlWCwgbW92ZVkpO1xyXG4gICAgICB0aGlzLnBsYW5EaXZDb250ZW50LnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IGAke2Nvb3JkaW5hdGUueH1weCAke2Nvb3JkaW5hdGUueX1weGA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBseSBhIHJvdGF0aW9uIHRvIHRoZSBwbGFuXHJcbiAgICogQnV0dG9ucyB3aWxsIHJlbWFpbiBpbiB0aGUgY29ycmVjdCByb3RhdGlvblxyXG4gICAqIEBwYXJhbSByb3RhdGlvblxyXG4gICAqL1xyXG4gIHVwZGF0ZVJvdGF0aW9uKHJvdGF0aW9uKSB7XHJcbiAgICB0aGlzLmxhc3RSb3RhdGlvbiA9IHJvdGF0aW9uO1xyXG4gICAgaWYgKHRoaXMucGxhbkRpdkNvbnRlbnQpIHtcclxuICAgICAgdGhpcy5wbGFuRGl2Q29udGVudC5zdHlsZS50cmFuc2Zvcm0gPSBgcm90YXRlKCR7cm90YXRpb259ZGVnKWA7XHJcbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0aGlzLnBsYW5EaXZDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpO1xyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1hcnJheS1mb3ItZWFjaFxyXG4gICAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xyXG4gICAgICAgIGJ1dHRvbi5zdHlsZS50cmFuc2Zvcm0gPSBgcm90YXRlKCR7LXJvdGF0aW9ufWRlZylgO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUN1cnJlbnRQb3NpdGlvbigpIHtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjdXJyZW50UG9zaXRpb24nKTtcclxuICAgIGlmIChidXR0b24pIHtcclxuICAgICAgYnV0dG9uLnJlbW92ZSgpO1xyXG4gICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0biA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdHlsZUJ1dHRvbihidXR0b246IEhUTUxCdXR0b25FbGVtZW50LCB1cmw6IHN0cmluZykge1xyXG4gICAgYnV0dG9uLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoJHt1cmx9KWA7XHJcbiAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3RyYW5zcGFyZW50JztcclxuICAgIGJ1dHRvbi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICBidXR0b24uc3R5bGUuYm9yZGVyID0gJ25vbmUnO1xyXG4gICAgYnV0dG9uLnN0eWxlLndpZHRoID0gJzEwcHgnO1xyXG4gICAgYnV0dG9uLnN0eWxlLmhlaWdodCA9ICcxMHB4JztcclxuICAgIGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgYnV0dG9uLnN0eWxlLmJhY2tncm91bmRTaXplID0gJ2NvbnRhaW4nO1xyXG4gICAgYnV0dG9uLnN0eWxlLmJhY2tncm91bmRSZXBlYXQgPSAnbm8tcmVwZWF0JztcclxuICB9XHJcblxyXG4gIGFkZExpc3RlbmVyc1RvQnV0dG9uKFxyXG4gICAgYnV0dG9uOiBIVE1MQnV0dG9uRWxlbWVudCxcclxuICAgIHVybDogc3RyaW5nLFxyXG4gICAgdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2UgPSBudWxsXHJcbiAgKSB7XHJcbiAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIGFzeW5jIChldmVudCkgPT4ge1xyXG4gICAgICBjb25zdCBjb250ZW50Rm9yQnV0dG9uID0gdGhpcy5odG1sQ29udGVudFRvSW5qZWN0LmZpbmQoXHJcbiAgICAgICAgKG9iamVjdCkgPT4gb2JqZWN0LmVsZW1lbnRJRCA9PT0gYnV0dG9uLmlkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuYnRuVGFnSXNIb3ZlciA9IHRydWU7XHJcbiAgICAgIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI3RpdGxlVGFnRGl2YCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmIChjb250ZW50Rm9yQnV0dG9uLnRpdGxlKSB7XHJcbiAgICAgICAgdGl0bGUuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnO1xyXG4gICAgICAgIHRpdGxlLmlubmVySFRNTCA9IGNvbnRlbnRGb3JCdXR0b24udGl0bGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGl0bGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNodG1sVGFnRGl2IGApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICB0aGlzLmRldGFpbFRhZ0Rpdi5zdHlsZS50b3AgPSBgJHtldmVudC5jbGllbnRZICsgMTB9cHhgO1xyXG4gICAgICB0aGlzLmRldGFpbFRhZ0Rpdi5zdHlsZS5sZWZ0ID0gYCR7XHJcbiAgICAgICAgZXZlbnQuY2xpZW50WCA8IDEyMCA/IDAgOiBldmVudC5jbGllbnRYIC0gMTIwXHJcbiAgICAgIH1weGA7XHJcbiAgICAgIHRoaXMuZGV0YWlsVGFnRGl2LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhjb250ZW50Rm9yQnV0dG9uLmNvbnRlbnQpO1xyXG4gICAgICBjb250ZW50LmlubmVySFRNTCA9IGNvbnRlbnRGb3JCdXR0b24uY29udGVudDtcclxuICAgICAgY29uc3QgZGV0YWlsQnV0dG9uID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcjZGV0YWlsQnRuJyk7XHJcbiAgICAgIGlmIChkZXRhaWxCdXR0b24pIHtcclxuICAgICAgICBkZXRhaWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBJbWFnZUZ1bGxzY3JlZW5CdG4gPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJyNpbWFnZS1mb290ZXInKTtcclxuICAgICAgaWYgKEltYWdlRnVsbHNjcmVlbkJ0bikge1xyXG4gICAgICAgIEltYWdlRnVsbHNjcmVlbkJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGlmICh0YWdTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRhZ1NlcnZpY2Uub25BY3Rpb25JbWFnZUNsaWNrKGNvbnRlbnRGb3JCdXR0b24uZWxlbWVudElEKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBib29raW5nQnV0dG9uID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcjYm9va2luZ0J0bicpO1xyXG4gICAgICBpZiAoYm9va2luZ0J1dHRvbikge1xyXG4gICAgICAgIGJvb2tpbmdCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgIC8vIHdlIHdhaXQgaWYgdXNlciBob3ZlcnMgb24gdG8gZGl2IG9mIHRoZSB0YWcgKGNoYW5nZXMgdGhpcy5mb2N1c01vdXNlVGFnRGl2KVxyXG4gICAgICB0aGlzLmJ0blRhZ0lzSG92ZXIgPSBmYWxzZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZvY3VzTW91c2VUYWdEaXYgJiYgIXRoaXMuYnRuVGFnSXNIb3Zlcikge1xyXG4gICAgICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9KTtcclxuICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcclxuICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbl9tb3ZlX3RvX3RhZyhidXR0b24uaWQpO1xyXG4gICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbGVhckJ0bihpZExpc3Q6IGFueVtdKSB7XHJcbiAgICBmb3IgKGNvbnN0IGlkIG9mIGlkTGlzdCkge1xyXG4gICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjXFxcXCR7aWR9YCk7XHJcbiAgICAgIGlmIChidXR0b24pIHtcclxuICAgICAgICBidXR0b24ucmVtb3ZlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyQWxsQnV0dG9ucygpIHtcclxuICAgIGlmICh0aGlzLnBsYW5EaXZDb250ZW50KSB7XHJcbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0aGlzLnBsYW5EaXZDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpO1xyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1hcnJheS1mb3ItZWFjaFxyXG4gICAgICBidXR0b25zLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5yZW1vdmUoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXNlclBvc2l0aW9uQnRuID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUGxhblJlbW92ZSgpIHtcclxuICAgIHRoaXMudXNlclBvc2l0aW9uQnRuID0gbnVsbDtcclxuICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudFN3ZWVwID0gbnVsbDtcclxuICAgIHRoaXMuZGV0YWlsVGFnRGl2ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlc2l6ZVBsYW4oaXNSZW1vdmluZzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5yZXNpemVQbGFuU3Vic2NyaXB0aW9uLm5leHQoZmFsc2UpO1xyXG4gICAgaWYgKGlzUmVtb3ZpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coJ2luIHJlc2l6ZVBsYW4nKTtcclxuICAgIGlmICh0aGlzLnBsYW5EaXYgJiYgdGhpcy5jdXJyZW50U3dlZXApIHtcclxuICAgICAgdGhpcy5wYW56b29tID0gcGFuem9vbSh0aGlzLnBsYW5EaXYsIHtcclxuICAgICAgICBib3VuZHM6IHRydWUsXHJcbiAgICAgICAgYm91bmRzUGFkZGluZzogMCxcclxuICAgICAgICBtYXhab29tOiA0LFxyXG4gICAgICB9KTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVjdCA9IHtcclxuICAgICAgICAgIHdpZHRoOiB0aGlzLnBsYW5EaXZDb250ZW50Lm9mZnNldFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLnBsYW5EaXZDb250ZW50Lm9mZnNldEhlaWdodCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHsgY29lZmZYLCBjb2VmZlkgfSA9IGdldENvZWZmaWNpZW50c0ZvckltYWdlKHRoaXMuaW1nUGxhbiwgcmVjdCk7XHJcbiAgICAgICAgdGhpcy5jb2VmZlBsYW5YID0gY29lZmZYO1xyXG4gICAgICAgIHRoaXMuY29lZmZQbGFuWSA9IGNvZWZmWTtcclxuICAgICAgICB0aGlzLnBhbnpvb20uem9vbUFicygwLCAwLCA0KTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVBsYW5TdWJzY3JpcHRpb24ubmV4dCh0cnVlKTtcclxuICAgICAgfSwgMjAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZVRvdWNoKGV2ZW50KSB7XHJcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgaWYgKG5vdyAtIHRoaXMubGFzdFRvdWNoVGltZSA8IHRoaXMuZGVsYXlEYmxUb3VjaCkge1xyXG4gICAgICB0aGlzLmxhc3RUb3VjaFRpbWUgPSAwO1xyXG4gICAgICAvLyB0aGlzLm9uRGJsQ2xpY2tQbGFuKGV2ZW50KTtcclxuICAgICAgLyoqIFNpbXVsYXRlIGEgZGJsY2xpY2sgZm9yIHBob25lICh3ZSBkb24ndCBnZXQgb2Zmc2V0WC9ZIG9uIHRvdWNoZXZlbnQpICovXHJcbiAgICAgIGNvbnN0IG5ld0V2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnRzJyk7XHJcbiAgICAgIGNvbnN0IHRvdWNoID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XHJcbiAgICAgIG5ld0V2ZW50LmluaXRNb3VzZUV2ZW50KFxyXG4gICAgICAgICdkYmxjbGljaycsXHJcbiAgICAgICAgdHJ1ZSxcclxuICAgICAgICB0cnVlLFxyXG4gICAgICAgIGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgdG91Y2guc2NyZWVuWCxcclxuICAgICAgICB0b3VjaC5zY3JlZW5ZLFxyXG4gICAgICAgIHRvdWNoLmNsaWVudFgsXHJcbiAgICAgICAgdG91Y2guY2xpZW50WSxcclxuICAgICAgICBldmVudC5jdHJsS2V5LFxyXG4gICAgICAgIGV2ZW50LmFsdEtleSxcclxuICAgICAgICBldmVudC5zaGlydEtleSxcclxuICAgICAgICBldmVudC5tZXRhS2V5LFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgbnVsbFxyXG4gICAgICApO1xyXG4gICAgICBldmVudC50YXJnZXQuZGlzcGF0Y2hFdmVudChuZXdFdmVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxhc3RUb3VjaFRpbWUgPSBub3c7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkRibENsaWNrUGxhbihldmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IGNsaWNrWCA9IGV2ZW50Lm9mZnNldFg7XHJcbiAgICBjb25zdCBjbGlja1kgPSBldmVudC5vZmZzZXRZO1xyXG4gICAgY29uc3Qgem9uZVBsYW4gPSB0aGlzLmN1cnJlbnRQbGFuLnpvbmU7XHJcbiAgICBpZiAoem9uZVBsYW4pIHtcclxuICAgICAgY29uc3QgbmF2aWdhdGlvbnM6IGFueSA9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXROYXZpZ2F0aW9uc0ZvclpvbmUoem9uZVBsYW4pO1xyXG4gICAgICBpZiAobmF2aWdhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgbmF2aWdhdGlvbnMubWFwKGFzeW5jIChuYXYpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBKU09OLnBhcnNlKG5hdi5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgIGxldCB4OiBudW1iZXI7XHJcbiAgICAgICAgICAgIGxldCB5OiBudW1iZXI7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGlicmF0aW9uUGxhbi5uZXcpIHtcclxuICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbjJEID1cclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtUG9zaXRpb24zREZvck5ld0NhbGlicmF0aW9uKHBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICB4ID0gcG9zaXRpb24yRC54IC8gcG9zaXRpb24yRC5jb2VmZlg7XHJcbiAgICAgICAgICAgICAgeSA9IHBvc2l0aW9uMkQueSAvIHBvc2l0aW9uMkQuY29lZmZZO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHggPVxyXG4gICAgICAgICAgICAgICAgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFggK1xyXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbi54ICogdGhpcy5jYWxpYnJhdGlvblBsYW4ueCkgL1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5YO1xyXG4gICAgICAgICAgICAgIHkgPVxyXG4gICAgICAgICAgICAgICAgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFkgK1xyXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbi56ICogdGhpcy5jYWxpYnJhdGlvblBsYW4ueSkgL1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5ZO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkaXN0WCA9IE1hdGguYWJzKGNsaWNrWCAtIHgpO1xyXG4gICAgICAgICAgICBjb25zdCBkaXN0WSA9IE1hdGguYWJzKGNsaWNrWSAtIHkpO1xyXG4gICAgICAgICAgICBuYXYuZGlzdCA9IE1hdGguc3FydChNYXRoLnBvdyhkaXN0WCwgMikgKyBNYXRoLnBvdyhkaXN0WSwgMikpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICAgIG5hdmlnYXRpb25zLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgIHJldHVybiBhLmRpc3QgLSBiLmRpc3Q7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fZ29fdG9fc3dlZXAoXHJcbiAgICAgICAgICBuYXZpZ2F0aW9uc1swXS5tYXR0ZXJwb3J0U3dlZXBJRFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbmZpZ3VyZXMgcGxhbiBmcm9tIGNhY2hlIChwcmV2aW91cyBwbGFuKS5cclxuICAgKi9cclxuICBhc3luYyB1cGxvYWRQbGFuRnJvbUNhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5odG1sQ29udGVudFRvSW5qZWN0ID0gdGhpcy5jYWNoZS5odG1sQ29udGVudDtcclxuICAgIGF3YWl0IHRoaXMuY29uZmlndXJlUGxhbih0aGlzLmNhY2hlLnBsYW4pO1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHV0cyBidXR0b25zICh0YWdzKSBmcm9tIGNhY2hlIGFjY29yZGluZyB0byBwYXNzZWQgZWxlbWVudCBJRHMgKGZvciBmaWx0ZXIgaWYgYW55KVxyXG4gICAqIEBwYXJhbSBlbGVtZW50SURzIGVsZW1lbnRzICh0aWNrZXRzLCBlcXVpcG1lbnRzLCBldGMpIHRvIGJlIHNob3duIG9uIHBsYW5cclxuICAgKi9cclxuICB1cGxvYWRUYWdzRnJvbUNhY2hlKCkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJ1cGxvYWRpbmcgdGFncyBmcm9tIGNhY2hlXCIpO1xyXG5cclxuICAgIGZvciAoY29uc3QgY2FjaGVkIG9mIHRoaXMuY2FjaGUuaHRtbENvbnRlbnQpIHtcclxuICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICAgIHRoaXMuc3R5bGVCdXR0b24oYnV0dG9uLCBjYWNoZWQudGFnSWNvbik7XHJcbiAgICAgIGJ1dHRvbi5pZCA9IGNhY2hlZC5lbGVtZW50SUQ7XHJcbiAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuYXBwZW5kKGJ1dHRvbik7XHJcbiAgICAgIGlmICh0aGlzLmNhbGlicmF0aW9uUGxhbi5uZXcpIHtcclxuICAgICAgICBjb25zdCBuZXdDb2VmZlggPVxyXG4gICAgICAgICAgdGhpcy5jb2VmZlBsYW5YIC9cclxuICAgICAgICAgICh0aGlzLmltZ1BsYW4ud2lkdGggLyB0aGlzLmNhbGlicmF0aW9uUGxhbi5pbWdXaWR0aCk7XHJcbiAgICAgICAgY29uc3QgbmV3Q29lZmZZID1cclxuICAgICAgICAgIHRoaXMuY29lZmZQbGFuWSAvXHJcbiAgICAgICAgICAodGhpcy5pbWdQbGFuLmhlaWdodCAvIHRoaXMuY2FsaWJyYXRpb25QbGFuLmltZ0hlaWdodCk7XHJcbiAgICAgICAgYnV0dG9uLnN0eWxlLnRvcCA9IGAke2NhY2hlZC55IC8gbmV3Q29lZmZZIC0gNX1weGA7XHJcbiAgICAgICAgYnV0dG9uLnN0eWxlLmxlZnQgPSBgJHtjYWNoZWQueCAvIG5ld0NvZWZmWCAtIDV9cHhgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJ1dHRvbi5zdHlsZS50b3AgPSBgJHtjYWNoZWQueSAvIHRoaXMuY29lZmZQbGFuWSAtIDV9cHhgO1xyXG4gICAgICAgIGJ1dHRvbi5zdHlsZS5sZWZ0ID0gYCR7Y2FjaGVkLnggLyB0aGlzLmNvZWZmUGxhblggLSA1fXB4YDtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5hZGRMaXN0ZW5lcnNUb0J1dHRvbihidXR0b24sIGNhY2hlZC51cmwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0Q2FsaWJyYXRlZFBsYW5Gb3Jab25lKHpvbmU6IFpvbmUpOiBQcm9taXNlPFBsYW4+IHtcclxuICAgIGxldCBwbGFucyA9IChhd2FpdCB0aGlzLkFQSS5QbGFuc0J5Wm9uZSh6b25lLmlkKSkuaXRlbXM7XHJcbiAgICBsZXQgcGFyZW50Wm9uZSA9IG51bGw7XHJcbiAgICBpZiAocGxhbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIC8vIHRyeSB0byBmaW5kIHBhcmVudCB6b25lXHJcbiAgICAgIHBhcmVudFpvbmUgPSBhd2FpdCB0aGlzLkFQSS5HZXRab25lKHpvbmUucGFyZW50SUQpO1xyXG4gICAgICBwbGFucyA9IChhd2FpdCB0aGlzLkFQSS5QbGFuc0J5Wm9uZSh6b25lLnBhcmVudElEKSkuaXRlbXM7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjYWxpYnJhdGVkUGxhbiA9IHBsYW5zLmZpbmQoXHJcbiAgICAgIChwbGFuKSA9PiBwbGFuLmNhbGlicmF0aW9uICYmIHBsYW4uaXNDdXJyZW50Rm9yWm9uZVxyXG4gICAgKSBhcyBQbGFuO1xyXG4gICAgaWYgKGNhbGlicmF0ZWRQbGFuKSB7XHJcbiAgICAgIGNvbnN0IHNpZ25lZCA9IGF3YWl0IGdldFNpZ25lZEZpbGUoY2FsaWJyYXRlZFBsYW4uYW5uZXhlKTtcclxuICAgICAgaWYgKHNpZ25lZCkge1xyXG4gICAgICAgIGNhbGlicmF0ZWRQbGFuLmZpbGVwYXRoID0gc2lnbmVkO1xyXG4gICAgICB9XHJcbiAgICAgIGNhbGlicmF0ZWRQbGFuLm5hdmlnYXRpb25JRHMgPSBwYXJlbnRab25lXHJcbiAgICAgICAgPyBwYXJlbnRab25lLnN3ZWVwSURzXHJcbiAgICAgICAgOiB6b25lLnN3ZWVwSURzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhbGlicmF0ZWRQbGFuIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1Qb3NpdGlvbjNERm9yTmV3Q2FsaWJyYXRpb24ocG9zaXRpb246IHtcclxuICAgIHg6IG51bWJlcjtcclxuICAgIHk6IG51bWJlcjtcclxuICAgIHo6IG51bWJlcjtcclxuICB9KTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgY29lZmZYOiBudW1iZXI7IGNvZWZmWTogbnVtYmVyIH0ge1xyXG4gICAgY29uc3QgcG9zaXRpb25YID1cclxuICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4ubmFtZVhBeGlzID09PSAneCcgPyBwb3NpdGlvbi54IDogcG9zaXRpb24uejtcclxuICAgIGNvbnN0IHBvc2l0aW9uWSA9XHJcbiAgICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuLm5hbWVZQXhpcyA9PT0gJ3gnID8gcG9zaXRpb24ueCA6IHBvc2l0aW9uLno7XHJcbiAgICBsZXQgeCA9XHJcbiAgICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFggKyBwb3NpdGlvblggKiB0aGlzLmNhbGlicmF0aW9uUGxhbi5zY2FsZVg7XHJcbiAgICBsZXQgeSA9XHJcbiAgICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFkgKyBwb3NpdGlvblkgKiB0aGlzLmNhbGlicmF0aW9uUGxhbi5zY2FsZVk7XHJcbiAgICBjb25zdCBuZXdDb2VmZlggPVxyXG4gICAgICB0aGlzLmNvZWZmUGxhblggLyAodGhpcy5pbWdQbGFuLndpZHRoIC8gdGhpcy5jYWxpYnJhdGlvblBsYW4uaW1nV2lkdGgpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJuZXdDb2VmZlhcIiwgbmV3Q29lZmZYKTtcclxuICAgIGNvbnN0IG5ld0NvZWZmWSA9XHJcbiAgICAgIHRoaXMuY29lZmZQbGFuWSAvICh0aGlzLmltZ1BsYW4uaGVpZ2h0IC8gdGhpcy5jYWxpYnJhdGlvblBsYW4uaW1nSGVpZ2h0KTtcclxuICAgIHggPSAoeCAtIHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFhQbGFuKSAvIHRoaXMuY2FsaWJyYXRpb25QbGFuLnNjYWxlUGxhbjtcclxuXHJcbiAgICB5ID0gKHkgLSB0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRZUGxhbikgLyB0aGlzLmNhbGlicmF0aW9uUGxhbi5zY2FsZVBsYW47XHJcbiAgICAvLyBjb25zb2xlLmxvZyh4LCB5KTtcclxuXHJcbiAgICByZXR1cm4geyB4LCB5LCBjb2VmZlg6IG5ld0NvZWZmWCwgY29lZmZZOiBuZXdDb2VmZlkgfTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -7894,7 +7894,7 @@ class PlanService {
|
|
|
7894
7894
|
});
|
|
7895
7895
|
}
|
|
7896
7896
|
}
|
|
7897
|
-
this.addListenersToButton(button, url,
|
|
7897
|
+
this.addListenersToButton(button, url, tagService);
|
|
7898
7898
|
this.updateRotation(this.lastRotation);
|
|
7899
7899
|
}
|
|
7900
7900
|
}
|
|
@@ -7985,7 +7985,7 @@ class PlanService {
|
|
|
7985
7985
|
button.style.backgroundSize = 'contain';
|
|
7986
7986
|
button.style.backgroundRepeat = 'no-repeat';
|
|
7987
7987
|
}
|
|
7988
|
-
addListenersToButton(button, url,
|
|
7988
|
+
addListenersToButton(button, url, tagService = null) {
|
|
7989
7989
|
button.addEventListener('mouseenter', (event) => __awaiter(this, void 0, void 0, function* () {
|
|
7990
7990
|
const contentForButton = this.htmlContentToInject.find((object) => object.elementID === button.id);
|
|
7991
7991
|
this.btnTagIsHover = true;
|
|
@@ -8013,8 +8013,8 @@ class PlanService {
|
|
|
8013
8013
|
const ImageFullscreenBtn = content.querySelector('#image-footer');
|
|
8014
8014
|
if (ImageFullscreenBtn) {
|
|
8015
8015
|
ImageFullscreenBtn.addEventListener('click', function () {
|
|
8016
|
-
if (
|
|
8017
|
-
tagService.onActionImageClick(
|
|
8016
|
+
if (tagService) {
|
|
8017
|
+
tagService.onActionImageClick(contentForButton.elementID);
|
|
8018
8018
|
}
|
|
8019
8019
|
});
|
|
8020
8020
|
}
|