ngx-histaff-alpha 2.7.4 → 2.7.6

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.
@@ -102,7 +102,7 @@ export class CoreOrgTreeComponent extends CoreFormControlBaseComponent {
102
102
  }
103
103
  }
104
104
  ngOnInit() {
105
- this.layoutService.leftbarOpen$.next(false);
105
+ //this.layoutService.leftbarOpen$.next(false);
106
106
  this.instanceNumber = new Date().getTime();
107
107
  const newInstance = {
108
108
  instanceNumber: this.instanceNumber,
@@ -454,4 +454,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
454
454
  type: ViewChild,
455
455
  args: ['reducedIconWrapper']
456
456
  }] } });
457
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1vcmctdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1vcmctdHJlZS9jb3JlLW9yZy10cmVlL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtb3JnLXRyZWUvY29yZS1vcmctdHJlZS9jb3JlLW9yZy10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQW9DLEtBQUssRUFBYyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBOEMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZMLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFnQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQztBQVF0SCxPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzdHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDbEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFN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QXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVpQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ08sY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ00sa0JBQWtCO3NCQUFsRCxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIElucHV0LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBzd2l0Y2hNYXAsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBSZWN1cnNpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVjdXJzaXZlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlT3JnVHJlZVNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLW9yZy10cmVlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IElPcmdUcmVlSXRlbSwgSU9yZ1RyZWVMaW5lckl0ZW0gfSBmcm9tICcuL0lPcmdUcmVlSXRlbSc7XHJcblxyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtLWNvbnRyb2wtYmFzZS9jb3JlLWZvcm0tY29udHJvbC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IElDb3JlT3JnVHJlZUluc3RhbmNlLCBPcmdhbml6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnYW5pemF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBhbGVydE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYWxlcnRPcHRpb25zJztcclxuaW1wb3J0IHsgbGluZXJfdG9fbmVzdGVkX2FycmF5X3NjcmlwdCB9IGZyb20gJy4uLy4uLy4uLy4uL2Fzc2V0cy9qcy9yZXNjdXNpdmVfd2snXHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvcmVDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtY2hlY2tib3gvY29yZS1jaGVja2JveC9jb3JlLWNoZWNrYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBDb3JlTG9hZGluZ1N1cmZhY2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWxvYWRpbmctc3VyZmFjZS9jb3JlLWxvYWRpbmctc3VyZmFjZS9jb3JlLWxvYWRpbmctc3VyZmFjZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlUmVkdWNlckljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXJlZHVjZXItaWNvbi9jb3JlLXJlZHVjZXItaWNvbi9jb3JlLXJlZHVjZXItaWNvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZSc7XHJcblxyXG5leHBvcnQgZW51bSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlIHtcclxuICBBQ1RJVkFURURfU0lOR0xFID0gJ0FDVElWQVRFRF9TSU5HTEUnLFxyXG4gIEFDVElWQVRFRF9JTkhFUklUQU5DRSA9ICdBQ1RJVkFURURfSU5IRVJJVEFOQ0UnLFxyXG4gIENIRUNLRUQgPSAnQ0hFQ0tFRCcsXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS1vcmctdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCxcclxuICAgIENvcmVDaGVja2JveENvbXBvbmVudCxcclxuICAgIENvcmVSZWR1Y2VySWNvbkNvbXBvbmVudCxcclxuICAgIFRyYW5zbGF0ZVBpcGUsXHJcbiAgICBUb29sdGlwRGlyZWN0aXZlLFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogQ29yZU9yZ1RyZWVDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlT3JnVHJlZUNvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgQElucHV0KCkgbGluZUNvbG9yOiBzdHJpbmcgPSAndHJhbnNwYXJlbnQnO1xyXG4gIEBJbnB1dCgpIGZ1bGxXaWR0aE1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGFjY2Vzc29yTW9kZSE6IEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGU7XHJcbiAgQElucHV0KCkgZnVsbFJlbmRlcmluZyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGVpZ2h0ITogbnVtYmVyOyAvLyBDaGnhu4F1IGNhbyBj4bunYSBDb3JlT3JnVHJlZSBj4bqnbiDEkcaw4bujYyB0cnV54buBbiB2w6BvIVxyXG4gIEBJbnB1dCgpIGRpc2FibGVkTG9vcEV4cGFuZCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd0NoZWNrSW5oZXJpdGFuY2UhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGV4Y2x1ZGVkSWRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyW10+KFtdKTsgLy8gMjAyNC0wNS0xMDogdG8gYmUgaW1wbGVtZW50ZWRcclxuXHJcbiAgQE91dHB1dCgpIGl0ZW1Eb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2Rpc3BsYXlDb250ZW50JykgZGlzcGxheUNvbnRlbnQhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3JlZHVjZWRJY29uV3JhcHBlcicpIHJlZHVjZWRJY29uV3JhcHBlciE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIG92ZXJyaWRlIHZhbHVlITogbnVtYmVyW107XHJcblxyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUob2JqOiBudW1iZXJbXSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IG9iajtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuYWNjZXNzb3JNb2RlKSB7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5DSEVDS0VEOlxyXG4gICAgICAgIGlmICghIW9iaikge1xyXG4gICAgICAgICAgY29uc3QgY2hlY2tlZEtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICB0aGlzLmNoZWNrZWRJZHMgPSBvYmo7IC8vIDw9PT0gMjQvMTAvMjAyM1xyXG4gICAgICAgICAgb2JqLm1hcCh4ID0+IGNoZWNrZWRLZXlzLnB1c2goeC50b1N0cmluZygpKSk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlLndyaXRlVmFsdWVDaGVja2VkKGNoZWNrZWRLZXlzLCB0aGlzLmRhdGEsIHRoaXMuZGlzYWJsZWRMb29wRXhwYW5kKS5zdWJzY3JpYmUoXyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoISF0aGlzLmRhdGEgJiYgISF0aGlzLmRhdGE/Lmxlbmd0aCkgdGhpcy5kYXRhWzBdLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX1NJTkdMRTpcclxuICAgICAgY2FzZSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkFDVElWQVRFRF9JTkhFUklUQU5DRTpcclxuICAgICAgICBpZiAoISFvYmopIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGl2YXRlZEtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICBvYmoubWFwKHggPT4gYWN0aXZhdGVkS2V5cy5wdXNoKHgudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucmVjdXJzaXZlU2VydmljZS53cml0ZVZhbHVlQWN0aXZhdGVkKGFjdGl2YXRlZEtleXMsIHRoaXMuZGF0YSwgdGhpcy5kaXNhYmxlZExvb3BFeHBhbmQpLnN1YnNjcmliZShfID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YSAmJiAhIXRoaXMuZGF0YT8ubGVuZ3RoKSB0aGlzLmRhdGFbMF0udHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmICh0aGlzLmFjY2Vzc29yTW9kZSA9PT0gRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5DSEVDS0VEKSB7XHJcblxyXG4gICAgfSBlbHNlIC8qIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX1NJTkdMRSBvciBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkFDVElWQVRFRF9JTkhFUklUQU5DRSAqLyB7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZlSWRzOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICBjaGVja2VkSWRzOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICAvLyBmb3IgZGVidWdnaW5nXHJcbiAgLy8gYWN0aXZlSWRzU3RyaW5nITogc3RyaW5nOyAgXHJcbiAgZGF0YSE6IElPcmdUcmVlSXRlbVtdO1xyXG4gIGxvYWRpbmchOiBib29sZWFuO1xyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgbGlubmVyT3JnQXJyYXkhOiBJT3JnVHJlZUxpbmVySXRlbVtdO1xyXG4gIHNlYXJjaCE6IHN0cmluZztcclxuICBzZWFyY2gkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHJlZHVjZWQhOiBib29sZWFuO1xyXG4gIHNlYXJjaFBsYWNlaG9sZGVyID0gRW51bVRyYW5zbGF0ZUtleS5VSV9DT01NT05fUExBQ0VfSE9MREVSX1NFQVJDSF9PUkc7XHJcblxyXG4gIGluaXRpYWxpemluZyE6IGJvb2xlYW47XHJcbiAgY2hlY2tJbmhlcml0YW5jZTogYm9vbGVhbiA9IHRydWU7IC8vIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZVxyXG4gIHNob3dEaXNzb2x2ZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZVxyXG4gIHNlbGVjdGVkS2V5ITogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHNlbGVjdGVkSXRlbSE6IElPcmdUcmVlTGluZXJJdGVtO1xyXG4gIGxhbmchOiBzdHJpbmc7XHJcbiAgLy9yZWR1Y2VkJCE6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcclxuXHJcbiAgaW5zdGFuY2VOdW1iZXIhOiBudW1iZXI7XHJcbiAgc2Nyb2xsQ29udGFpbmVySGVpZ2h0ITogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vcHVibGljIG92ZXJyaWRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWN1cnNpdmVTZXJ2aWNlOiBSZWN1cnNpdmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHVibGljIGxheW91dFNlcnZpY2U6IExheW91dFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVPcmdUcmVlU2VydmljZTogQ29yZU9yZ1RyZWVTZXJ2aWNlLFxyXG4gICAgLy8gcHJpdmF0ZSBjb3JlT3JnVHJlZVN0YXRlOiBDb3JlT3JnVHJlZVN0YXRlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHB1YmxpYyBvcmdhbml6YXRpb25TZXJ2aWNlOiBPcmdhbml6YXRpb25TZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgc3VwZXIoLyppbmplY3RvciovKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6aW5nID0gdHJ1ZTtcclxuXHJcbiAgICAvLyB0aGlzLnJlZHVjZWQkID0gdGhpcy5jb3JlT3JnVHJlZVN0YXRlLmNvcmVPcmdUcmVlUmVkdWNlZCQ7XHJcblxyXG4gICAgdGhpcy5pbml0aWFsaXppbmcgPSBmYWxzZTtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snaGVpZ2h0J10pIHtcclxuICAgICAgdGhpcy5yZXNpemVIZWlnaHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMubGF5b3V0U2VydmljZS5sZWZ0YmFyT3BlbiQubmV4dChmYWxzZSk7XHJcblxyXG4gICAgdGhpcy5pbnN0YW5jZU51bWJlciA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgY29uc3QgbmV3SW5zdGFuY2U6IElDb3JlT3JnVHJlZUluc3RhbmNlID0ge1xyXG4gICAgICBpbnN0YW5jZU51bWJlcjogdGhpcy5pbnN0YW5jZU51bWJlcixcclxuICAgICAgc2VsZWN0ZWRLZXkkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKSxcclxuICAgICAgYWN0aXZlS2V5cyQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKSxcclxuICAgICAgY2hlY2tlZEtleXMkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSksXHJcbiAgICAgIGV4cGFuZGVkS2V5cyQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKSxcclxuICAgICAgY2hlY2tJbmhlcml0YW5jZSQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSlcclxuICAgIH1cclxuICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5pbnN0YW5jZXMucHVzaChuZXdJbnN0YW5jZSlcclxuXHJcbiAgICAvLyBDaGVjayB4ZW0gY2hp4buBdSBjYW8gaGVpZ2h0IGPDsyDEkcaw4bujYyB0cnV54buBbiB2w6BvIGhheSBraMO0bmdcclxuICAgIGlmICh0aGlzLmhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm4oXCJDb3JlT3JnVHJlZSBraMO0bmcgbmjhuq1uIMSRxrDhu6NjIGNoaeG7gXUgY2FvIChoZWlnaHQpIHRydXnhu4FuIHbDoG8gdOG7qyBs4bubcCBuZ2/DoGkuIENoaeG7gXUgY2FvIG3hurdjIMSR4buLbmggc+G6vSDEkcaw4bujYyB0w61uaCB0b8OhbiBk4buxYSB2w6BvIGLhu5EgY+G7pWMgY2jDrW5oLlwiLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5jb250ZW50Q29udGFpbmVySGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAvLyBiYXNpY1NwYWNpbmcgbMOgIHBhZGRpbmdCb3R0b20gY+G7p2EgbOG7m3AgY29udGVudC1jb250YWluZXJcclxuICAgICAgICAgIHRoaXMuaGVpZ2h0ID0geCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmc7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2UubGluZXJEYXRhJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLmxpbm5lck9yZ0FycmF5ID0geDtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhcInRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkIGNoYW5nZXNcIiwgeClcclxuXHJcbiAgICAgICAgY29uc3QgbmV3QWN0aXZlSWRzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgICAgIHguYWN0aXZlS2V5cy5tYXAoKGspID0+IHtcclxuICAgICAgICAgIG5ld0FjdGl2ZUlkcy5wdXNoKE51bWJlcihrKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVJZHMgPSBuZXdBY3RpdmVJZHM7XHJcbiAgICAgICAgaWYgKHRoaXMuYWNjZXNzb3JNb2RlICE9PSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkNIRUNLRUQpIHtcclxuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmFjdGl2ZUlkcztcclxuICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5hY3RpdmVJZHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkS2V5ID0geC5zZWxlY3RlZEtleTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuc2VhcmNoJFxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZmlsdGVyKCh4KSA9PiB4ICE9PSBudWxsKSxcclxuICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgodGV4dCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc3dpdGNoTWFwIHdvcmtzJyk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2UuZmluZEl0ZW0odGV4dCwgdGhpcy5kYXRhKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkXHJcbiAgICAgICAgLnBpcGUoZmlsdGVyKCh2YWx1ZSkgPT4gISEhdGhpcy5pbml0aWFsaXppbmcgJiYgISF2YWx1ZSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCEhbG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjb3JlT3JnVHJlZVN0YXR1cycsIEpTT04uc3RyaW5naWZ5KHgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSgoeCkgPT4gKHRoaXMubGFuZyA9IHgpKSk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemVIZWlnaHQoKTogdm9pZCB7XHJcblxyXG4gICAgLy8gaGVpZ2h0IGlzIG5vdCBnaXZlbiBhbmQgdGhlIHRyZWUgcmVzaXplIGFzIHN0YW5kYXJkXHJcbiAgICBpZiAoISEhdGhpcy5oZWlnaHQpIHtcclxuICAgICAgY29uc3Qgc2l6ZUhlYWRlckhlaWdodCA9IE51bWJlcihcclxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtaGVhZGVyLWhlaWdodCcpXHJcbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICAgKTtcclxuICAgICAgY29uc3Qgc2l6ZUNvcmVQYWdlSGVhZGVySGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1jb3JlLXBhZ2UtaGVhZGVyLWhlaWdodCcpXHJcbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHNpemVIZWFkZXJIZWlnaHQgLSBzaXplQ29yZVBhZ2VIZWFkZXJIZWlnaHQ7XHJcblxyXG4gICAgICBjb25zdCBwYWdlSGVhZGVySGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1jb3JlLXBhZ2UtaGVhZGVyLWhlaWdodCcpXHJcbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IHBhZ2luYXRpb25IZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtcGFnaW5hdGlvbi1oZWlnaHQnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHNpemVNYXJnaW5Db3JlUGFnaW5hdGlvbkZ1bGwgPSBOdW1iZXIoXHJcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLW1hcmdpbi1jb3JlLXBhZ2luYXRpb24nKVxyXG4gICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICk7XHJcblxyXG5cclxuICAgICAgY29uc3QgaGVpZ2h0ID0gY29udGFpbmVySGVpZ2h0IC0gcGFnZUhlYWRlckhlaWdodCAtIHBhZ2luYXRpb25IZWlnaHQgKyBzaXplTWFyZ2luQ29yZVBhZ2luYXRpb25GdWxsO1xyXG4gICAgICBjb25zb2xlLmxvZyhoZWlnaHQpO1xyXG5cclxuICAgICAgdGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgJy0taGVpZ2h0JywgaGVpZ2h0ICsgJ3B4J1xyXG4gICAgICApO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyPy5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAgICctLWhlaWdodCcsIHRoaXMuaGVpZ2h0ICsgJ3B4J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5vcmdUcmVlRGF0YSQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRhdGEgPSB4O1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJuZXcgRGF0YSBjb21pbmdcIiwgdGhpcy5kYXRhLCBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcclxuICAgICAgICAgIGlmICghIXRoaXMuZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoISF0aGlzLmRhdGEubGVuZ3RoKSB0aGlzLmRhdGFbMF0udHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvbkl0ZW1DbGlja0xvY2FsKGU6IElPcmdUcmVlSXRlbSk6IHZvaWQge1xyXG4gICAgdGhpcy5saW5uZXJPcmdBcnJheS5tYXAoKHgpID0+ICh4LmFjdGl2ZSA9IGZhbHNlKSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYnVpbGRUcmVlRGF0YSgpKTtcclxuICB9XHJcblxyXG4gIG9uVG9nZ2xlSXRlbShlOiBJT3JnVHJlZUl0ZW0pIHtcclxuICAgIGNvbnN0IGNsb25lQ29weTogSU9yZ1RyZWVMaW5lckl0ZW1bXSA9IEpTT04ucGFyc2UoXHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMubGlubmVyT3JnQXJyYXkpXHJcbiAgICApO1xyXG4gICAgY29uc3QgZmlsdGVyID0gY2xvbmVDb3B5LmZpbHRlcigoeCkgPT4geC5pZCA9PT0gZS5pZCk7XHJcblxyXG4gICAgaWYgKGZpbHRlci5sZW5ndGggPT09IDEpIHtcclxuICAgICAgZmlsdGVyWzBdLmV4cGFuZCA9ICEhIWUuZXhwYW5kO1xyXG4gICAgfVxyXG4gICAgdGhpcy5saW5uZXJPcmdBcnJheSA9IGNsb25lQ29weTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5idWlsZFRyZWVEYXRhKCkpO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRUcmVlRGF0YSgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgY2xvbmVDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmxpbm5lck9yZ0FycmF5KSk7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIC8vIENyZWF0ZSBhIG5ld1xyXG5cclxuICAgICAgY29uc29sZS5sb2coXCLwn5+i8J+foiBXb3JrZXIgd29ya3NcIik7XHJcblxyXG4gICAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKGxpbmVyX3RvX25lc3RlZF9hcnJheV9zY3JpcHQpO1xyXG4gICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsICh7IGRhdGEgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGEubGlzdDtcclxuICAgICAgICBpZiAoISF0aGlzLmRhdGEgJiYgISF0aGlzLmRhdGE/Lmxlbmd0aCkgdGhpcy5kYXRhWzBdLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgbGlzdDogY2xvbmVDb3B5LFxyXG4gICAgICAgIGtleUZpZWxkOiAnaWQnLFxyXG4gICAgICAgIHRpdGxlRmllbGQ6ICduYW1lJyxcclxuICAgICAgICBwYXJlbnRGaWVsZDogJ3BhcmVudElkJyxcclxuICAgICAgICBhY3RpdmVGaWVsZDogJ2FjdGl2ZScsXHJcbiAgICAgICAgLy9pbmhlcml0YW50QWN0aXZlRmllbGQ6ICdpbmhlcml0YW50QWN0aXZlJyxcclxuICAgICAgICBjaGVja2VkRmllbGQ6ICdjaGVja2VkJyxcclxuICAgICAgICBleHBhbmRlZEZpZWxkOiAnZXhwYW5kJyxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBXZWIgd29ya2VycyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGVudmlyb25tZW50LlxyXG4gICAgICAvLyBZb3Ugc2hvdWxkIGFkZCBhIGZhbGxiYWNrIHNvIHRoYXQgeW91ciBwcm9ncmFtIHN0aWxsIGV4ZWN1dGVzIGNvcnJlY3RseS5cclxuICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWU7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMucmVjdXJzaXZlU2VydmljZVxyXG4gICAgICAgICAgLmxpbmVyQXJyYXlUb05lc3RlZEFycmF5KFxyXG4gICAgICAgICAgICBjbG9uZUNvcHksXHJcbiAgICAgICAgICAgICdpZCcsXHJcbiAgICAgICAgICAgICduYW1lJyxcclxuICAgICAgICAgICAgJ3BhcmVudElkJyxcclxuICAgICAgICAgICAgJ2FjdGl2ZScsXHJcbiAgICAgICAgICAgICdjaGVja2VkJyxcclxuICAgICAgICAgICAgJ2V4cGFuZCcsXHJcbiAgICAgICAgICAgIC8vc3RhdHVzXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChvYmopID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gb2JqLmxpc3Q7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YSAmJiAhIXRoaXMuZGF0YT8ubGVuZ3RoKSB0aGlzLmRhdGFbMF0udHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRXhwYW5kVG9nZ2xlckNsaWNrKGU6IElPcmdUcmVlSXRlbSwgZXZlbnQ6IGFueSk6IHZvaWQge1xyXG5cclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IG5ld1ZhbHVlID0gIWUudHJlZSRFeHBhbmRlZDtcclxuICAgIGUudHJlZSRFeHBhbmRlZCA9IG5ld1ZhbHVlO1xyXG5cclxuICAgIC8vIHVwZGF0aW5nIHN0YXR1cyB3aXRoIG5ld1ZhbHVlXHJcbiAgICBjb25zdCBjdXJyZW50RXhwYW5kZWRJZHMgPVxyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC52YWx1ZT8uZXhwYW5kZWRLZXlzO1xyXG4gICAgbGV0IG5ld0V4cGFuZGVkSWRzID0gY3VycmVudEV4cGFuZGVkSWRzPy5maWx0ZXIoXHJcbiAgICAgIChfKSA9PiAhISFjdXJyZW50RXhwYW5kZWRJZHMuaW5jbHVkZXMoZS5pZC50b1N0cmluZygpKVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAobmV3VmFsdWUpIHtcclxuICAgICAgbmV3RXhwYW5kZWRJZHM/LnB1c2goZS5pZC50b1N0cmluZygpKTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdFeHBhbmRlZElkcz8uc29ydCgpO1xyXG5cclxuICAgIGNvbnN0IG5ld0V4cGFuZGVkS2V5czogc3RyaW5nW10gPSBbXTtcclxuICAgIG5ld0V4cGFuZGVkSWRzLm1hcCgoeCkgPT4gbmV3RXhwYW5kZWRLZXlzLnB1c2goeC50b1N0cmluZygpKSk7XHJcblxyXG4gICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQubmV4dCh7XHJcbiAgICAgIC4uLnRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLnZhbHVlISxcclxuICAgICAgZXhwYW5kZWRLZXlzOiBuZXdFeHBhbmRlZEtleXMsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uSXRlbUNoZWNrKGU6IElPcmdUcmVlSXRlbSwgbmV3VmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaXRlbUNsaWNrPy5lbWl0KGUpO1xyXG4gICAgaWYgKHRoaXMuYWNjZXNzb3JNb2RlICE9PSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkNIRUNLRUQpIHJldHVybjtcclxuXHJcbiAgICAvLyBXZSBoYXZlIHRoaXMgdmFyIHRvIGhvbGQgbm9kZXMgdGhhdCBhcmUgYmVpbmcgY2hhbmdlZFxyXG4gICAgbGV0IHRvZ2dsZWRJZHM6IG51bWJlcltdO1xyXG4gICAgLy8gV2Ugc2hvdWxkIGNhbGN1bGF0ZSBhIG5ldyBzdGF0ZSBpbnRvIHRoaXMgdmFyOiBcclxuICAgIGNvbnN0IG5ld0NoZWNrZWRJZHM6IG51bWJlcltdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNoZWNrZWRJZHMpKTtcclxuXHJcbiAgICAvLyBXZSB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiBhZnRlciB0b2dnbGVkSWRzIGNoYW5nZWRcclxuICAgIGNvbnN0IGNoYW5nZVZhbHVlID0gKCkgPT4ge1xyXG5cclxuICAgICAgLy8gSWYgbmV3VmFsdWUgPT09IHRydWUsIHdlIHdpbGwgZGlzY3RpbnRseSBwdXNoIGNoYW5nZWQgaWRzIHRvIHRoZSBzdGF0ZVxyXG4gICAgICAvLyBPdGhlcndpc2Ugd2Ugd2lsbCByZW1vdmUgdGhlbSBmcm9tIHRoZSBzdGF0ZVxyXG4gICAgICBpZiAoISFuZXdWYWx1ZSkge1xyXG4gICAgICAgIHRvZ2dsZWRJZHMubWFwKHggPT4ge1xyXG4gICAgICAgICAgaWYgKCEhIW5ld0NoZWNrZWRJZHMuaW5jbHVkZXMoeCkpIHtcclxuICAgICAgICAgICAgbmV3Q2hlY2tlZElkcy5wdXNoKHgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLy8gVGhlbiBhc2lnbiB0aGUgc3RhdGUgdG8gdGhlIG5ld0NoZWNrZWRJZHNcclxuICAgICAgICB0aGlzLmNoZWNrZWRJZHMgPSBuZXdDaGVja2VkSWRzO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXdDaGVja2VkSWRzLmZpbHRlcih4ID0+ICEhIXRvZ2dsZWRJZHMuaW5jbHVkZXMoeCkpXHJcbiAgICAgICAgLy8gVGhlbiBhc2lnbiB0aGUgc3RhdGUgdG8gdGhlIGZpbHRlclxyXG4gICAgICAgIHRoaXMuY2hlY2tlZElkcyA9IGZpbHRlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQWZ0ZXIgdGhlIGNhc2VzIG9mIGlmL2Vsc2UsIG1ha2UgdGhlIGNvbnRyb2wgY2hhbmdlIHdpdGggb25DaGFuZ2VcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY2hlY2tlZElkcztcclxuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmNoZWNrZWRJZHMpO1xyXG4gICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiBzdGFydDogVEhJUyBDT0RFIFNDT1BFIGNhbGN1bGF0ZXMgdG9nZ2xlZElkcyAqL1xyXG4gICAgaWYgKHRoaXMuY2hlY2tJbmhlcml0YW5jZSkge1xyXG4gICAgICAvLyBJZiB0cnVlLCBhbGwgdGhlIG5lc3RlZCBpdGVtcyB3aWxsIGJlIGNoZWNrZWQvdW5jaGVja2VkXHJcbiAgICAgIHRoaXMucmVjdXJzaXZlU2VydmljZVxyXG4gICAgICAgIC5uZXN0ZWRUb2dnbGVDaGVjayhlLCBuZXdWYWx1ZSlcclxuICAgICAgICAudGhlbigoeCkgPT4ge1xyXG5cclxuICAgICAgICAgIC8vIFRoZSBpZHMgaGF2ZSBiZWVuIGNoYW5nZWRcclxuICAgICAgICAgIHRvZ2dsZWRJZHMgPSB4O1xyXG5cclxuICAgICAgICAgIC8vIE5vdyB0b2dnbGVkSWRzIHdlcmUgc2V0LiBXZSBjYWxsIHRoZSBmdW5jdGlvbiB3ZSBkZWNsYXJlZFxyXG4gICAgICAgICAgY2hhbmdlVmFsdWUoKTtcclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKHg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcih4KTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE90aGVyd2lzZSB3ZSBzaW1wbHkgdG9nZ2xlIGNoZWNrIGZvciBjdXJyZW50IGl0ZW0gb25seVxyXG4gICAgICB0b2dnbGVkSWRzID0gW2UuaWRdO1xyXG5cclxuICAgICAgLy8gTm93IHRvZ2dsZWRJZHMgd2VyZSBzZXQuIFdlIGNhbGwgdGhlIGZ1bmN0aW9uIHdlIGRlY2xhcmVkXHJcbiAgICAgIGNoYW5nZVZhbHVlKCk7XHJcblxyXG4gICAgfVxyXG4gICAgLyogZW5kOiBUSElTIENPREUgU0NPUEUgY2FsY3VsYXRlcyB0b2dnbGVkSWRzICovXHJcblxyXG4gICAgLy8gVGhhdCBpcy4gSGFwcHkgZGVidWdnaW5nIVxyXG5cclxuICB9XHJcblxyXG4gIG9uQ2hlY2tJbmNsdWRlRGlzc29sdmVkQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uQ2hlY2tJbmNsdWRlRGlzc29sdmVkQ2hhbmdlXCIsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIG9uQ2hlY2tJbmhlcml0YW5jZUNoYW5nZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQubmV4dCh7XHJcbiAgICAgIC4uLnRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLnZhbHVlISxcclxuICAgICAgY2hlY2tJbmhlcml0YW5jZTogdmFsdWUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uT2JqZWN0Q2xpY2soZTogSU9yZ1RyZWVJdGVtLCBldmVudDogYW55KTogdm9pZCB7XHJcblxyXG4gICAgLy8gcmVtb3ZlIGhpZ2hsaWdodCBjbGFzc1xyXG4gICAgLy8gVE8gRE9cclxuXHJcbiAgICBpZiAoISFlLnByb3RlY3RlZCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuaXRlbUNsaWNrPy5lbWl0KGUpO1xyXG5cclxuICAgIGlmICh0aGlzLmFjY2Vzc29yTW9kZSA9PT0gRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5DSEVDS0VEKSByZXR1cm47XHJcbiAgICBsZXQgYWN0aXZlSWRzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgdGhpcy5kYXRhLm1hcCgoaXRlbSkgPT4gKGl0ZW0uYWN0aXZlID0gZmFsc2UpKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5hY2Nlc3Nvck1vZGUgPT09XHJcbiAgICAgIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX0lOSEVSSVRBTkNFIHx8XHJcbiAgICAgICEhIXRoaXMuYWNjZXNzb3JNb2RlXHJcbiAgICApIHtcclxuICAgICAgLy8gSWYgdHJ1ZSwgYWxsIHRoZSBuZXN0ZWQgaXRlbXMgd2lsbCBiZSBhY3RpdmUsIHRoZSBvdGhlcnMgYXJlIGluYWN0aXZlXHJcbiAgICAgIHRoaXMucmVjdXJzaXZlU2VydmljZVxyXG4gICAgICAgIC5uZXN0ZWRSZXNldEFjdGl2ZShlLCB0cnVlKVxyXG4gICAgICAgIC50aGVuKCh4KSA9PiB7XHJcbiAgICAgICAgICBhY3RpdmVJZHMgPSB4O1xyXG4gICAgICAgICAgYWN0aXZlSWRzLnNvcnQoKTtcclxuICAgICAgICAgIGNvbnN0IG5ld0FjdGl2ZUtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICBhY3RpdmVJZHMubWFwKCh4KSA9PiBuZXdBY3RpdmVLZXlzLnB1c2goeC50b1N0cmluZygpKSk7XHJcbiAgICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC5uZXh0KHtcclxuICAgICAgICAgICAgLi4udGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWUhLFxyXG4gICAgICAgICAgICBhY3RpdmVLZXlzOiBuZXdBY3RpdmVLZXlzLFxyXG4gICAgICAgICAgICBzZWxlY3RlZEtleTogZS5pZC50b1N0cmluZygpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlSWRzID0gYWN0aXZlSWRzO1xyXG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy5hY3RpdmVJZHMpO1xyXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZShhY3RpdmVJZHMpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBBQ1RJVkFURURfU0lOR0xFXHJcbiAgICAgIC8vIE90aGVyd2lzZSB3ZSBzaW1wbHkgc2V0IGN1cnJlbnQgaXRlbSB0byBiZSBhY3RpdmUgb25seVxyXG4gICAgICBhY3RpdmVJZHMgPSBbZS5pZF07XHJcbiAgICAgIHRoaXMuYWN0aXZlSWRzID0gYWN0aXZlSWRzO1xyXG5cclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQubmV4dCh7XHJcbiAgICAgICAgLi4udGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWUhLFxyXG4gICAgICAgIGFjdGl2ZUtleXM6IFtlLmlkLnRvU3RyaW5nKCldLFxyXG4gICAgICAgIHNlbGVjdGVkS2V5OiBlLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5vbkNoYW5nZShhY3RpdmVJZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHsgZGV0YWlsIH0gPSBldmVudDtcclxuXHJcbiAgICBpZiAoZGV0YWlsID09PSAyKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdUaGlzIHdhcyBhIGRibGNsaWNrJyk7XHJcbiAgICAgIHRoaXMuaXRlbURvdWJsZUNsaWNrLmVtaXQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBlO1xyXG5cclxuICB9XHJcblxyXG4gIG9uU2VhcmNoQ2hhbmdlKHRleHQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2gkLm5leHQodGV4dCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm5nQWZ0ZXJDb250ZW50SW5pdFwiKVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMubWFwKCh4KSA9PiB4Py51bnN1YnNjcmliZSgpKTtcclxuXHJcbiAgICBpZiAoISF0aGlzLmluc3RhbmNlTnVtYmVyKSB7XHJcbiAgICAgIGNvbnN0IHRyeVRvRmluZCA9IHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKFxyXG4gICAgICAgICh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmluc3RhbmNlTnVtYmVyXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoISF0cnlUb0ZpbmQubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgbmV3SW5zdGFuY2VzID0gdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT4geC5pbnN0YW5jZU51bWJlciAhPT0gdGhpcy5pbnN0YW5jZU51bWJlclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLmluc3RhbmNlcyA9IG5ld0luc3RhbmNlcztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLW9yZy10cmVlLWNvbnRhaW5lclwiIFtjbGFzcy5mdWxsLXdpZHRoXT1cIiEhZnVsbFdpZHRoTW9kZVwiICpuZ0lmPVwiISFkYXRhXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgIHBvc2l0aW9uIDogJ3JlbGF0aXZlJyxcclxuICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgIGhlaWdodDogaGVpZ2h0ICsgJ3B4J1xyXG4gICAgfVwiPlxyXG4gICAgPGRpdiAjZGlzcGxheUNvbnRlbnQgY2xhc3M9XCJjdXN0b20tb3JnLXRyZWVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29yZS1vcmctdHJlZS1oZWFkZXIgZC1mbGV4LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm01XCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwic2VhcmNoXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2hDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlOiBsYW5nXCIgW2NsYXNzLmZ1bGwtd2lkdGhdPVwiISFmdWxsV2lkdGhNb2RlXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPGRpdiAjc2Nyb2xsQ29udGFpbmVyIGNsYXNzPVwic2Nyb2xsLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0IC0gbGF5b3V0U2VydmljZS5jb3JlT3JnVHJlZVRvcEhlaWdodCAtIGxheW91dFNlcnZpY2UuY29yZU9yZ1RyZWVCb3R0b21IZWlnaHQgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdzY3JvbGwnXHJcbiAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICA8Y29yZS1sb2FkaW5nLXN1cmZhY2UgW2xvYWRpbmddPVwibG9hZGluZ1wiIFtoZWlnaHRdPVwic2Nyb2xsQ29udGFpbmVySGVpZ2h0XCI+PC9jb3JlLWxvYWRpbmctc3VyZmFjZT5cclxuICAgICAgICAgICAgICAgIEBmb3IgKHJvb3Qgb2YgZGF0YTsgdHJhY2sgcm9vdCkge1xyXG5cclxuICAgICAgICAgICAgICAgIEBkZWZlcihvbiB2aWV3cG9ydChzY3JvbGxDb250YWluZXIpKSB7XHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJyb290XCIgW2NsYXNzLmNvbGxhcHNlZF09XCIhISFyb290LnRyZWUkRXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbTsgY29udGV4dDogeyBjb250ZXh0OiByb290IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICB9IEBwbGFjZWhvbGRlcigpIHtcclxuICAgICAgICAgICAgICAgIFBsYWNlaG9sZGVyLi4uXHJcbiAgICAgICAgICAgICAgICB9IEBsb2FkaW5nKCkge1xyXG4gICAgICAgICAgICAgICAgTG9hZGluZy4uLlxyXG4gICAgICAgICAgICAgICAgfSBAZXJyb3IoKSB7XHJcbiAgICAgICAgICAgICAgICBFcnJvci4uLlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxyXG4gICAgICAgICAgICAgICAgYm90dG9tOiAnMHB4JyxcclxuICAgICAgICAgICAgICAgIGxlZnQ6ICcwcHgnLFxyXG4gICAgICAgICAgICAgICAgcmlnaHQ6ICcwcHgnLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBsYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0ICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiBsYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZyArICdweCcsXHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IGxheW91dFNlcnZpY2UuYmFzaWNTcGFjaW5nICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IGxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodCArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbidcclxuICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29yZS1jaGVja2JveCBbKG5nTW9kZWwpXT1cInNob3dEaXNzb2x2ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGVja0luY2x1ZGVEaXNzb2x2ZWRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCInVUkuQ09SRV9PUkdfVFJFRS5TSE9XX09VVERBVEVEX1VOSVRTX0FCQlJFVklBVEVEJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInVUkuQ09SRV9PUkdfVFJFRS5TSE9XX09VVERBVEVEX1VOSVRTJ1wiIHRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCI+PC9jb3JlLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1pbmhlcml0YW5jZS13cmFwcGVyXCIgKm5nSWY9XCJhY2Nlc3Nvck1vZGUgPT09ICdDSEVDS0VEJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29yZS1jaGVja2JveCAqbmdJZj1cInNob3dDaGVja0luaGVyaXRhbmNlXCIgWyhuZ01vZGVsKV09XCJjaGVja0luaGVyaXRhbmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hlY2tJbmhlcml0YW5jZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidVSS5DT1JFX09SR19UUkVFLkNIRUNLX0lOSEVSSVRBTkNFJ1wiPjwvY29yZS1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXRlbSBsZXQtY29udGV4dD1cImNvbnRleHRcIiBsZXQtaWQ9XCJjb250ZXh0LmlkXCIgbGV0LXRpdGxlPVwiY29udGV4dC50cmVlJFRpdGxlXCJcclxuICAgICAgICAgICAgICAgIGxldC1oaWdobGlnaHRlZD1cImNvbnRleHQudHJlZSRIaWdobGlnaHRlZFwiIGxldC1oYXNDaGlsZHJlbj1cImNvbnRleHQudHJlZSRIYXNDaGlsZHJlblwiXHJcbiAgICAgICAgICAgICAgICBsZXQtaGFzQWN0aXZlQ2hpbGRyZW49XCJjb250ZXh0LnRyZWUkSGFzQWN0aXZlQ2hpbGRyZW5cIiBsZXQtY2hpbGRyZW49XCJjb250ZXh0LnRyZWUkQ2hpbGRyZW5cIlxyXG4gICAgICAgICAgICAgICAgbGV0LWV4cGFuZGVkPVwiY29udGV4dC50cmVlJEV4cGFuZGVkXCIgbGV0LWlzQWN0aXZlPVwiY29udGV4dC5pc0FjdGl2ZVwiIGxldC1hY3RpdmU9XCJjb250ZXh0LnRyZWUkQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgIGxldC1jaGVja2VkPVwiY29udGV4dC50cmVlJENoZWNrZWRcIiBsZXQtcHJvdGVjdGVkPVwiY29udGV4dC5wcm90ZWN0ZWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICBAaWYgKCghc2hvd0Rpc3NvbHZlZCAmJiAhIWlzQWN0aXZlKSB8fCAoISFzaG93RGlzc29sdmVkKSkge1xyXG4gICAgICAgICAgICAgICAgPGxpIFtjbGFzcy5oYXMtY2hpbGRyZW5dPVwiISFoYXNDaGlsZHJlblwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiISFoYXNDaGlsZHJlbiAmJiAhISFleHBhbmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gKGNsaWNrKT1cImFjY2Vzc29yTW9kZSAhPT0gJ0NIRUNLRUQnID8gb25PYmplY3RDbGljayhjb250ZXh0LCAkZXZlbnQpIDogJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib25PYmplY3RDbGljayhjb250ZXh0LCAkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoKCEhc2hvd0Rpc3NvbHZlZCAmJiAhIWhhc0NoaWxkcmVuKSB8fCAoIXNob3dEaXNzb2x2ZWQgJiYgISFoYXNBY3RpdmVDaGlsZHJlbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJleHBhbmQtdG9nZ2xlciBjdXN0b20taWNvbi1wYXJlbnQtZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FeHBhbmRUb2dnbGVyQ2xpY2soY29udGV4dCwgJGV2ZW50KVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjY2Vzc29yTW9kZSA9PT0gJ0NIRUNLRUQnICYmICFwcm90ZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvcmUtY2hlY2tib3ggKG9uQ2xpY2spPVwib25JdGVtQ2hlY2soY29udGV4dCwgJGV2ZW50KVwiIFtpbnB1dFZhbHVlXT1cImNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+PC9jb3JlLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvYmplY3QgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZEtleT09PWlkLnRvU3RyaW5nKClcIiBbY2xhc3MuaGlnaGxpZ2h0ZWRdPVwiaGlnaGxpZ2h0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc3NvbHZlZF09XCIhaXNBY3RpdmVcIiBbY2xhc3MucHJvdGVjdGVkXT1cInByb3RlY3RlZFwiIFthcHBUb29sdGlwXT1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L29iamVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmICghIWNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBbY2xhc3MuY29sbGFwc2VkXT1cIiAhISFleHBhbmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjaGlsZCBvZiBjaGlsZHJlbjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISFleHBhbmRlZCB8fCAhIWZ1bGxSZW5kZXJpbmcpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtOyBjb250ZXh0OiB7IGNvbnRleHQ6IGNoaWxkIH1cIj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
457
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1vcmctdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1vcmctdHJlZS9jb3JlLW9yZy10cmVlL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtb3JnLXRyZWUvY29yZS1vcmctdHJlZS9jb3JlLW9yZy10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQW9DLEtBQUssRUFBYyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBOEMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZMLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFnQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQztBQVF0SCxPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzdHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDbEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFN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QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVpQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ08sY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ00sa0JBQWtCO3NCQUFsRCxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIElucHV0LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBzd2l0Y2hNYXAsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBSZWN1cnNpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVjdXJzaXZlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlT3JnVHJlZVNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLW9yZy10cmVlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IElPcmdUcmVlSXRlbSwgSU9yZ1RyZWVMaW5lckl0ZW0gfSBmcm9tICcuL0lPcmdUcmVlSXRlbSc7XHJcblxyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtLWNvbnRyb2wtYmFzZS9jb3JlLWZvcm0tY29udHJvbC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IElDb3JlT3JnVHJlZUluc3RhbmNlLCBPcmdhbml6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnYW5pemF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBhbGVydE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYWxlcnRPcHRpb25zJztcclxuaW1wb3J0IHsgbGluZXJfdG9fbmVzdGVkX2FycmF5X3NjcmlwdCB9IGZyb20gJy4uLy4uLy4uLy4uL2Fzc2V0cy9qcy9yZXNjdXNpdmVfd2snXHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvcmVDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtY2hlY2tib3gvY29yZS1jaGVja2JveC9jb3JlLWNoZWNrYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBDb3JlTG9hZGluZ1N1cmZhY2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWxvYWRpbmctc3VyZmFjZS9jb3JlLWxvYWRpbmctc3VyZmFjZS9jb3JlLWxvYWRpbmctc3VyZmFjZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlUmVkdWNlckljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXJlZHVjZXItaWNvbi9jb3JlLXJlZHVjZXItaWNvbi9jb3JlLXJlZHVjZXItaWNvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZSc7XHJcblxyXG5leHBvcnQgZW51bSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlIHtcclxuICBBQ1RJVkFURURfU0lOR0xFID0gJ0FDVElWQVRFRF9TSU5HTEUnLFxyXG4gIEFDVElWQVRFRF9JTkhFUklUQU5DRSA9ICdBQ1RJVkFURURfSU5IRVJJVEFOQ0UnLFxyXG4gIENIRUNLRUQgPSAnQ0hFQ0tFRCcsXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS1vcmctdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCxcclxuICAgIENvcmVDaGVja2JveENvbXBvbmVudCxcclxuICAgIENvcmVSZWR1Y2VySWNvbkNvbXBvbmVudCxcclxuICAgIFRyYW5zbGF0ZVBpcGUsXHJcbiAgICBUb29sdGlwRGlyZWN0aXZlLFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogQ29yZU9yZ1RyZWVDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlT3JnVHJlZUNvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgQElucHV0KCkgbGluZUNvbG9yOiBzdHJpbmcgPSAndHJhbnNwYXJlbnQnO1xyXG4gIEBJbnB1dCgpIGZ1bGxXaWR0aE1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGFjY2Vzc29yTW9kZSE6IEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGU7XHJcbiAgQElucHV0KCkgZnVsbFJlbmRlcmluZyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGVpZ2h0ITogbnVtYmVyOyAvLyBDaGnhu4F1IGNhbyBj4bunYSBDb3JlT3JnVHJlZSBj4bqnbiDEkcaw4bujYyB0cnV54buBbiB2w6BvIVxyXG4gIEBJbnB1dCgpIGRpc2FibGVkTG9vcEV4cGFuZCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd0NoZWNrSW5oZXJpdGFuY2UhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGV4Y2x1ZGVkSWRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyW10+KFtdKTsgLy8gMjAyNC0wNS0xMDogdG8gYmUgaW1wbGVtZW50ZWRcclxuXHJcbiAgQE91dHB1dCgpIGl0ZW1Eb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2Rpc3BsYXlDb250ZW50JykgZGlzcGxheUNvbnRlbnQhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3JlZHVjZWRJY29uV3JhcHBlcicpIHJlZHVjZWRJY29uV3JhcHBlciE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIG92ZXJyaWRlIHZhbHVlITogbnVtYmVyW107XHJcblxyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUob2JqOiBudW1iZXJbXSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IG9iajtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuYWNjZXNzb3JNb2RlKSB7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5DSEVDS0VEOlxyXG4gICAgICAgIGlmICghIW9iaikge1xyXG4gICAgICAgICAgY29uc3QgY2hlY2tlZEtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICB0aGlzLmNoZWNrZWRJZHMgPSBvYmo7IC8vIDw9PT0gMjQvMTAvMjAyM1xyXG4gICAgICAgICAgb2JqLm1hcCh4ID0+IGNoZWNrZWRLZXlzLnB1c2goeC50b1N0cmluZygpKSk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlLndyaXRlVmFsdWVDaGVja2VkKGNoZWNrZWRLZXlzLCB0aGlzLmRhdGEsIHRoaXMuZGlzYWJsZWRMb29wRXhwYW5kKS5zdWJzY3JpYmUoXyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoISF0aGlzLmRhdGEgJiYgISF0aGlzLmRhdGE/Lmxlbmd0aCkgdGhpcy5kYXRhWzBdLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX1NJTkdMRTpcclxuICAgICAgY2FzZSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkFDVElWQVRFRF9JTkhFUklUQU5DRTpcclxuICAgICAgICBpZiAoISFvYmopIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGl2YXRlZEtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICBvYmoubWFwKHggPT4gYWN0aXZhdGVkS2V5cy5wdXNoKHgudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucmVjdXJzaXZlU2VydmljZS53cml0ZVZhbHVlQWN0aXZhdGVkKGFjdGl2YXRlZEtleXMsIHRoaXMuZGF0YSwgdGhpcy5kaXNhYmxlZExvb3BFeHBhbmQpLnN1YnNjcmliZShfID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YSAmJiAhIXRoaXMuZGF0YT8ubGVuZ3RoKSB0aGlzLmRhdGFbMF0udHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmICh0aGlzLmFjY2Vzc29yTW9kZSA9PT0gRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5DSEVDS0VEKSB7XHJcblxyXG4gICAgfSBlbHNlIC8qIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX1NJTkdMRSBvciBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkFDVElWQVRFRF9JTkhFUklUQU5DRSAqLyB7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZlSWRzOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICBjaGVja2VkSWRzOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICAvLyBmb3IgZGVidWdnaW5nXHJcbiAgLy8gYWN0aXZlSWRzU3RyaW5nITogc3RyaW5nOyAgXHJcbiAgZGF0YSE6IElPcmdUcmVlSXRlbVtdO1xyXG4gIGxvYWRpbmchOiBib29sZWFuO1xyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgbGlubmVyT3JnQXJyYXkhOiBJT3JnVHJlZUxpbmVySXRlbVtdO1xyXG4gIHNlYXJjaCE6IHN0cmluZztcclxuICBzZWFyY2gkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHJlZHVjZWQhOiBib29sZWFuO1xyXG4gIHNlYXJjaFBsYWNlaG9sZGVyID0gRW51bVRyYW5zbGF0ZUtleS5VSV9DT01NT05fUExBQ0VfSE9MREVSX1NFQVJDSF9PUkc7XHJcblxyXG4gIGluaXRpYWxpemluZyE6IGJvb2xlYW47XHJcbiAgY2hlY2tJbmhlcml0YW5jZTogYm9vbGVhbiA9IHRydWU7IC8vIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZVxyXG4gIHNob3dEaXNzb2x2ZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZVxyXG4gIHNlbGVjdGVkS2V5ITogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHNlbGVjdGVkSXRlbSE6IElPcmdUcmVlTGluZXJJdGVtO1xyXG4gIGxhbmchOiBzdHJpbmc7XHJcbiAgLy9yZWR1Y2VkJCE6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcclxuXHJcbiAgaW5zdGFuY2VOdW1iZXIhOiBudW1iZXI7XHJcbiAgc2Nyb2xsQ29udGFpbmVySGVpZ2h0ITogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vcHVibGljIG92ZXJyaWRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWN1cnNpdmVTZXJ2aWNlOiBSZWN1cnNpdmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHVibGljIGxheW91dFNlcnZpY2U6IExheW91dFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVPcmdUcmVlU2VydmljZTogQ29yZU9yZ1RyZWVTZXJ2aWNlLFxyXG4gICAgLy8gcHJpdmF0ZSBjb3JlT3JnVHJlZVN0YXRlOiBDb3JlT3JnVHJlZVN0YXRlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHB1YmxpYyBvcmdhbml6YXRpb25TZXJ2aWNlOiBPcmdhbml6YXRpb25TZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgc3VwZXIoLyppbmplY3RvciovKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6aW5nID0gdHJ1ZTtcclxuXHJcbiAgICAvLyB0aGlzLnJlZHVjZWQkID0gdGhpcy5jb3JlT3JnVHJlZVN0YXRlLmNvcmVPcmdUcmVlUmVkdWNlZCQ7XHJcblxyXG4gICAgdGhpcy5pbml0aWFsaXppbmcgPSBmYWxzZTtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snaGVpZ2h0J10pIHtcclxuICAgICAgdGhpcy5yZXNpemVIZWlnaHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIC8vdGhpcy5sYXlvdXRTZXJ2aWNlLmxlZnRiYXJPcGVuJC5uZXh0KGZhbHNlKTtcclxuXHJcbiAgICB0aGlzLmluc3RhbmNlTnVtYmVyID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICBjb25zdCBuZXdJbnN0YW5jZTogSUNvcmVPcmdUcmVlSW5zdGFuY2UgPSB7XHJcbiAgICAgIGluc3RhbmNlTnVtYmVyOiB0aGlzLmluc3RhbmNlTnVtYmVyLFxyXG4gICAgICBzZWxlY3RlZEtleSQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpLFxyXG4gICAgICBhY3RpdmVLZXlzJDogbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pLFxyXG4gICAgICBjaGVja2VkS2V5cyQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKSxcclxuICAgICAgZXhwYW5kZWRLZXlzJDogbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pLFxyXG4gICAgICBjaGVja0luaGVyaXRhbmNlJDogbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKVxyXG4gICAgfVxyXG4gICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLmluc3RhbmNlcy5wdXNoKG5ld0luc3RhbmNlKVxyXG5cclxuICAgIC8vIENoZWNrIHhlbSBjaGnhu4F1IGNhbyBoZWlnaHQgY8OzIMSRxrDhu6NjIHRydXnhu4FuIHbDoG8gaGF5IGtow7RuZ1xyXG4gICAgaWYgKHRoaXMuaGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uud2FybihcIkNvcmVPcmdUcmVlIGtow7RuZyBuaOG6rW4gxJHGsOG7o2MgY2hp4buBdSBjYW8gKGhlaWdodCkgdHJ1eeG7gW4gdsOgbyB04burIGzhu5twIG5nb8OgaS4gQ2hp4buBdSBjYW8gbeG6t2MgxJHhu4tuaCBz4bq9IMSRxrDhu6NjIHTDrW5oIHRvw6FuIGThu7FhIHbDoG8gYuG7kSBj4bulYyBjaMOtbmguXCIsIGFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5sYXlvdXRTZXJ2aWNlLmNvbnRlbnRDb250YWluZXJIZWlnaHQkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIC8vIGJhc2ljU3BhY2luZyBsw6AgcGFkZGluZ0JvdHRvbSBj4bunYSBs4bubcCBjb250ZW50LWNvbnRhaW5lclxyXG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSB4IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZztcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5saW5lckRhdGEkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMubGlubmVyT3JnQXJyYXkgPSB4O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQgY2hhbmdlc1wiLCB4KVxyXG5cclxuICAgICAgICBjb25zdCBuZXdBY3RpdmVJZHM6IG51bWJlcltdID0gW107XHJcbiAgICAgICAgeC5hY3RpdmVLZXlzLm1hcCgoaykgPT4ge1xyXG4gICAgICAgICAgbmV3QWN0aXZlSWRzLnB1c2goTnVtYmVyKGspKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFjdGl2ZUlkcyA9IG5ld0FjdGl2ZUlkcztcclxuICAgICAgICBpZiAodGhpcy5hY2Nlc3Nvck1vZGUgIT09IEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRCkge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuYWN0aXZlSWRzO1xyXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmFjdGl2ZUlkcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSB4LnNlbGVjdGVkS2V5O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5zZWFyY2gkXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBmaWx0ZXIoKHgpID0+IHggIT09IG51bGwpLFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXHJcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKCh0ZXh0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzd2l0Y2hNYXAgd29ya3MnKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVjdXJzaXZlU2VydmljZS5maW5kSXRlbSh0ZXh0LCB0aGlzLmRhdGEpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyRcclxuICAgICAgICAucGlwZShmaWx0ZXIoKHZhbHVlKSA9PiAhISF0aGlzLmluaXRpYWxpemluZyAmJiAhIXZhbHVlKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICBpZiAoISFsb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NvcmVPcmdUcmVlU3RhdHVzJywgSlNPTi5zdHJpbmdpZnkoeCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKCh4KSA9PiAodGhpcy5sYW5nID0geCkpKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZUhlaWdodCgpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBoZWlnaHQgaXMgbm90IGdpdmVuIGFuZCB0aGUgdHJlZSByZXNpemUgYXMgc3RhbmRhcmRcclxuICAgIGlmICghISF0aGlzLmhlaWdodCkge1xyXG4gICAgICBjb25zdCBzaXplSGVhZGVySGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1oZWFkZXItaGVpZ2h0JylcclxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBzaXplQ29yZVBhZ2VIZWFkZXJIZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtcGFnZS1oZWFkZXItaGVpZ2h0JylcclxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gc2l6ZUhlYWRlckhlaWdodCAtIHNpemVDb3JlUGFnZUhlYWRlckhlaWdodDtcclxuXHJcbiAgICAgIGNvbnN0IHBhZ2VIZWFkZXJIZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtcGFnZS1oZWFkZXItaGVpZ2h0JylcclxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgcGFnaW5hdGlvbkhlaWdodCA9IE51bWJlcihcclxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS1wYWdpbmF0aW9uLWhlaWdodCcpXHJcbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICAgKTtcclxuICAgICAgY29uc3Qgc2l6ZU1hcmdpbkNvcmVQYWdpbmF0aW9uRnVsbCA9IE51bWJlcihcclxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtbWFyZ2luLWNvcmUtcGFnaW5hdGlvbicpXHJcbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICAgKTtcclxuXHJcblxyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjb250YWluZXJIZWlnaHQgLSBwYWdlSGVhZGVySGVpZ2h0IC0gcGFnaW5hdGlvbkhlaWdodCArIHNpemVNYXJnaW5Db3JlUGFnaW5hdGlvbkZ1bGw7XHJcbiAgICAgIGNvbnNvbGUubG9nKGhlaWdodCk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgICAnLS1oZWlnaHQnLCBoZWlnaHQgKyAncHgnXHJcbiAgICAgICk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgJy0taGVpZ2h0JywgdGhpcy5oZWlnaHQgKyAncHgnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLm9yZ1RyZWVEYXRhJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGF0YSA9IHg7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm5ldyBEYXRhIGNvbWluZ1wiLCB0aGlzLmRhdGEsIG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxyXG4gICAgICAgICAgaWYgKCEhdGhpcy5kYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YS5sZW5ndGgpIHRoaXMuZGF0YVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG9uSXRlbUNsaWNrTG9jYWwoZTogSU9yZ1RyZWVJdGVtKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpbm5lck9yZ0FycmF5Lm1hcCgoeCkgPT4gKHguYWN0aXZlID0gZmFsc2UpKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5idWlsZFRyZWVEYXRhKCkpO1xyXG4gIH1cclxuXHJcbiAgb25Ub2dnbGVJdGVtKGU6IElPcmdUcmVlSXRlbSkge1xyXG4gICAgY29uc3QgY2xvbmVDb3B5OiBJT3JnVHJlZUxpbmVySXRlbVtdID0gSlNPTi5wYXJzZShcclxuICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5saW5uZXJPcmdBcnJheSlcclxuICAgICk7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSBjbG9uZUNvcHkuZmlsdGVyKCh4KSA9PiB4LmlkID09PSBlLmlkKTtcclxuXHJcbiAgICBpZiAoZmlsdGVyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBmaWx0ZXJbMF0uZXhwYW5kID0gISEhZS5leHBhbmQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxpbm5lck9yZ0FycmF5ID0gY2xvbmVDb3B5O1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmJ1aWxkVHJlZURhdGEoKSk7XHJcbiAgfVxyXG5cclxuICBidWlsZFRyZWVEYXRhKCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBjbG9uZUNvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMubGlubmVyT3JnQXJyYXkpKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgLy8gQ3JlYXRlIGEgbmV3XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhcIvCfn6Lwn5+iIFdvcmtlciB3b3Jrc1wiKTtcclxuXHJcbiAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobGluZXJfdG9fbmVzdGVkX2FycmF5X3NjcmlwdCk7XHJcbiAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgKHsgZGF0YSB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YS5saXN0O1xyXG4gICAgICAgIGlmICghIXRoaXMuZGF0YSAmJiAhIXRoaXMuZGF0YT8ubGVuZ3RoKSB0aGlzLmRhdGFbMF0udHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICBsaXN0OiBjbG9uZUNvcHksXHJcbiAgICAgICAga2V5RmllbGQ6ICdpZCcsXHJcbiAgICAgICAgdGl0bGVGaWVsZDogJ25hbWUnLFxyXG4gICAgICAgIHBhcmVudEZpZWxkOiAncGFyZW50SWQnLFxyXG4gICAgICAgIGFjdGl2ZUZpZWxkOiAnYWN0aXZlJyxcclxuICAgICAgICAvL2luaGVyaXRhbnRBY3RpdmVGaWVsZDogJ2luaGVyaXRhbnRBY3RpdmUnLFxyXG4gICAgICAgIGNoZWNrZWRGaWVsZDogJ2NoZWNrZWQnLFxyXG4gICAgICAgIGV4cGFuZGVkRmllbGQ6ICdleHBhbmQnLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFdlYiB3b3JrZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuXHJcbiAgICAgIC8vIFlvdSBzaG91bGQgYWRkIGEgZmFsbGJhY2sgc28gdGhhdCB5b3VyIHByb2dyYW0gc3RpbGwgZXhlY3V0ZXMgY29ycmVjdGx5LlxyXG4gICAgICBjb25zdCBzdGF0dXMgPSB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC52YWx1ZTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlXHJcbiAgICAgICAgICAubGluZXJBcnJheVRvTmVzdGVkQXJyYXkoXHJcbiAgICAgICAgICAgIGNsb25lQ29weSxcclxuICAgICAgICAgICAgJ2lkJyxcclxuICAgICAgICAgICAgJ25hbWUnLFxyXG4gICAgICAgICAgICAncGFyZW50SWQnLFxyXG4gICAgICAgICAgICAnYWN0aXZlJyxcclxuICAgICAgICAgICAgJ2NoZWNrZWQnLFxyXG4gICAgICAgICAgICAnZXhwYW5kJyxcclxuICAgICAgICAgICAgLy9zdGF0dXNcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKG9iaikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBvYmoubGlzdDtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5kYXRhICYmICEhdGhpcy5kYXRhPy5sZW5ndGgpIHRoaXMuZGF0YVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25FeHBhbmRUb2dnbGVyQ2xpY2soZTogSU9yZ1RyZWVJdGVtLCBldmVudDogYW55KTogdm9pZCB7XHJcblxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgbmV3VmFsdWUgPSAhZS50cmVlJEV4cGFuZGVkO1xyXG4gICAgZS50cmVlJEV4cGFuZGVkID0gbmV3VmFsdWU7XHJcblxyXG4gICAgLy8gdXBkYXRpbmcgc3RhdHVzIHdpdGggbmV3VmFsdWVcclxuICAgIGNvbnN0IGN1cnJlbnRFeHBhbmRlZElkcyA9XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLnZhbHVlPy5leHBhbmRlZEtleXM7XHJcbiAgICBsZXQgbmV3RXhwYW5kZWRJZHMgPSBjdXJyZW50RXhwYW5kZWRJZHM/LmZpbHRlcihcclxuICAgICAgKF8pID0+ICEhIWN1cnJlbnRFeHBhbmRlZElkcy5pbmNsdWRlcyhlLmlkLnRvU3RyaW5nKCkpXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChuZXdWYWx1ZSkge1xyXG4gICAgICBuZXdFeHBhbmRlZElkcz8ucHVzaChlLmlkLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld0V4cGFuZGVkSWRzPy5zb3J0KCk7XHJcblxyXG4gICAgY29uc3QgbmV3RXhwYW5kZWRLZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgbmV3RXhwYW5kZWRJZHMubWFwKCh4KSA9PiBuZXdFeHBhbmRlZEtleXMucHVzaCh4LnRvU3RyaW5nKCkpKTtcclxuXHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC5uZXh0KHtcclxuICAgICAgLi4udGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWUhLFxyXG4gICAgICBleHBhbmRlZEtleXM6IG5ld0V4cGFuZGVkS2V5cyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25JdGVtQ2hlY2soZTogSU9yZ1RyZWVJdGVtLCBuZXdWYWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pdGVtQ2xpY2s/LmVtaXQoZSk7XHJcbiAgICBpZiAodGhpcy5hY2Nlc3Nvck1vZGUgIT09IEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIFdlIGhhdmUgdGhpcyB2YXIgdG8gaG9sZCBub2RlcyB0aGF0IGFyZSBiZWluZyBjaGFuZ2VkXHJcbiAgICBsZXQgdG9nZ2xlZElkczogbnVtYmVyW107XHJcbiAgICAvLyBXZSBzaG91bGQgY2FsY3VsYXRlIGEgbmV3IHN0YXRlIGludG8gdGhpcyB2YXI6IFxyXG4gICAgY29uc3QgbmV3Q2hlY2tlZElkczogbnVtYmVyW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY2hlY2tlZElkcykpO1xyXG5cclxuICAgIC8vIFdlIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyIHRvZ2dsZWRJZHMgY2hhbmdlZFxyXG4gICAgY29uc3QgY2hhbmdlVmFsdWUgPSAoKSA9PiB7XHJcblxyXG4gICAgICAvLyBJZiBuZXdWYWx1ZSA9PT0gdHJ1ZSwgd2Ugd2lsbCBkaXNjdGludGx5IHB1c2ggY2hhbmdlZCBpZHMgdG8gdGhlIHN0YXRlXHJcbiAgICAgIC8vIE90aGVyd2lzZSB3ZSB3aWxsIHJlbW92ZSB0aGVtIGZyb20gdGhlIHN0YXRlXHJcbiAgICAgIGlmICghIW5ld1ZhbHVlKSB7XHJcbiAgICAgICAgdG9nZ2xlZElkcy5tYXAoeCA9PiB7XHJcbiAgICAgICAgICBpZiAoISEhbmV3Q2hlY2tlZElkcy5pbmNsdWRlcyh4KSkge1xyXG4gICAgICAgICAgICBuZXdDaGVja2VkSWRzLnB1c2goeCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAvLyBUaGVuIGFzaWduIHRoZSBzdGF0ZSB0byB0aGUgbmV3Q2hlY2tlZElkc1xyXG4gICAgICAgIHRoaXMuY2hlY2tlZElkcyA9IG5ld0NoZWNrZWRJZHM7XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ld0NoZWNrZWRJZHMuZmlsdGVyKHggPT4gISEhdG9nZ2xlZElkcy5pbmNsdWRlcyh4KSlcclxuICAgICAgICAvLyBUaGVuIGFzaWduIHRoZSBzdGF0ZSB0byB0aGUgZmlsdGVyXHJcbiAgICAgICAgdGhpcy5jaGVja2VkSWRzID0gZmlsdGVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBBZnRlciB0aGUgY2FzZXMgb2YgaWYvZWxzZSwgbWFrZSB0aGUgY29udHJvbCBjaGFuZ2Ugd2l0aCBvbkNoYW5nZVxyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5jaGVja2VkSWRzO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuY2hlY2tlZElkcyk7XHJcbiAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIHN0YXJ0OiBUSElTIENPREUgU0NPUEUgY2FsY3VsYXRlcyB0b2dnbGVkSWRzICovXHJcbiAgICBpZiAodGhpcy5jaGVja0luaGVyaXRhbmNlKSB7XHJcbiAgICAgIC8vIElmIHRydWUsIGFsbCB0aGUgbmVzdGVkIGl0ZW1zIHdpbGwgYmUgY2hlY2tlZC91bmNoZWNrZWRcclxuICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlXHJcbiAgICAgICAgLm5lc3RlZFRvZ2dsZUNoZWNrKGUsIG5ld1ZhbHVlKVxyXG4gICAgICAgIC50aGVuKCh4KSA9PiB7XHJcblxyXG4gICAgICAgICAgLy8gVGhlIGlkcyBoYXZlIGJlZW4gY2hhbmdlZFxyXG4gICAgICAgICAgdG9nZ2xlZElkcyA9IHg7XHJcblxyXG4gICAgICAgICAgLy8gTm93IHRvZ2dsZWRJZHMgd2VyZSBzZXQuIFdlIGNhbGwgdGhlIGZ1bmN0aW9uIHdlIGRlY2xhcmVkXHJcbiAgICAgICAgICBjaGFuZ2VWYWx1ZSgpO1xyXG5cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jYXRjaCgoeDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gT3RoZXJ3aXNlIHdlIHNpbXBseSB0b2dnbGUgY2hlY2sgZm9yIGN1cnJlbnQgaXRlbSBvbmx5XHJcbiAgICAgIHRvZ2dsZWRJZHMgPSBbZS5pZF07XHJcblxyXG4gICAgICAvLyBOb3cgdG9nZ2xlZElkcyB3ZXJlIHNldC4gV2UgY2FsbCB0aGUgZnVuY3Rpb24gd2UgZGVjbGFyZWRcclxuICAgICAgY2hhbmdlVmFsdWUoKTtcclxuXHJcbiAgICB9XHJcbiAgICAvKiBlbmQ6IFRISVMgQ09ERSBTQ09QRSBjYWxjdWxhdGVzIHRvZ2dsZWRJZHMgKi9cclxuXHJcbiAgICAvLyBUaGF0IGlzLiBIYXBweSBkZWJ1Z2dpbmchXHJcblxyXG4gIH1cclxuXHJcbiAgb25DaGVja0luY2x1ZGVEaXNzb2x2ZWRDaGFuZ2UodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGNvbnNvbGUubG9nKFwib25DaGVja0luY2x1ZGVEaXNzb2x2ZWRDaGFuZ2VcIiwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25DaGVja0luaGVyaXRhbmNlQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC5uZXh0KHtcclxuICAgICAgLi4udGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWUhLFxyXG4gICAgICBjaGVja0luaGVyaXRhbmNlOiB2YWx1ZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25PYmplY3RDbGljayhlOiBJT3JnVHJlZUl0ZW0sIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuXHJcbiAgICAvLyByZW1vdmUgaGlnaGxpZ2h0IGNsYXNzXHJcbiAgICAvLyBUTyBET1xyXG5cclxuICAgIGlmICghIWUucHJvdGVjdGVkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5pdGVtQ2xpY2s/LmVtaXQoZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuYWNjZXNzb3JNb2RlID09PSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkNIRUNLRUQpIHJldHVybjtcclxuICAgIGxldCBhY3RpdmVJZHM6IG51bWJlcltdID0gW107XHJcbiAgICB0aGlzLmRhdGEubWFwKChpdGVtKSA9PiAoaXRlbS5hY3RpdmUgPSBmYWxzZSkpO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmFjY2Vzc29yTW9kZSA9PT1cclxuICAgICAgRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5BQ1RJVkFURURfSU5IRVJJVEFOQ0UgfHxcclxuICAgICAgISEhdGhpcy5hY2Nlc3Nvck1vZGVcclxuICAgICkge1xyXG4gICAgICAvLyBJZiB0cnVlLCBhbGwgdGhlIG5lc3RlZCBpdGVtcyB3aWxsIGJlIGFjdGl2ZSwgdGhlIG90aGVycyBhcmUgaW5hY3RpdmVcclxuICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlXHJcbiAgICAgICAgLm5lc3RlZFJlc2V0QWN0aXZlKGUsIHRydWUpXHJcbiAgICAgICAgLnRoZW4oKHgpID0+IHtcclxuICAgICAgICAgIGFjdGl2ZUlkcyA9IHg7XHJcbiAgICAgICAgICBhY3RpdmVJZHMuc29ydCgpO1xyXG4gICAgICAgICAgY29uc3QgbmV3QWN0aXZlS2V5czogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgIGFjdGl2ZUlkcy5tYXAoKHgpID0+IG5ld0FjdGl2ZUtleXMucHVzaCh4LnRvU3RyaW5nKCkpKTtcclxuICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLm5leHQoe1xyXG4gICAgICAgICAgICAuLi50aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC52YWx1ZSEsXHJcbiAgICAgICAgICAgIGFjdGl2ZUtleXM6IG5ld0FjdGl2ZUtleXMsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkS2V5OiBlLmlkLnRvU3RyaW5nKClcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVJZHMgPSBhY3RpdmVJZHM7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmFjdGl2ZUlkcyk7XHJcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGFjdGl2ZUlkcyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKHg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcih4KTtcclxuICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIC8vIEFDVElWQVRFRF9TSU5HTEVcclxuICAgICAgLy8gT3RoZXJ3aXNlIHdlIHNpbXBseSBzZXQgY3VycmVudCBpdGVtIHRvIGJlIGFjdGl2ZSBvbmx5XHJcbiAgICAgIGFjdGl2ZUlkcyA9IFtlLmlkXTtcclxuICAgICAgdGhpcy5hY3RpdmVJZHMgPSBhY3RpdmVJZHM7XHJcblxyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC5uZXh0KHtcclxuICAgICAgICAuLi50aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC52YWx1ZSEsXHJcbiAgICAgICAgYWN0aXZlS2V5czogW2UuaWQudG9TdHJpbmcoKV0sXHJcbiAgICAgICAgc2VsZWN0ZWRLZXk6IGUuaWQudG9TdHJpbmcoKSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLm9uQ2hhbmdlKGFjdGl2ZUlkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgeyBkZXRhaWwgfSA9IGV2ZW50O1xyXG5cclxuICAgIGlmIChkZXRhaWwgPT09IDIpIHtcclxuICAgICAgY29uc29sZS5sb2coJ1RoaXMgd2FzIGEgZGJsY2xpY2snKTtcclxuICAgICAgdGhpcy5pdGVtRG91YmxlQ2xpY2suZW1pdChlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGU7XHJcblxyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hDaGFuZ2UodGV4dDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaCQubmV4dCh0ZXh0KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwibmdBZnRlckNvbnRlbnRJbml0XCIpXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5tYXAoKHgpID0+IHg/LnVuc3Vic2NyaWJlKCkpO1xyXG5cclxuICAgIGlmICghIXRoaXMuaW5zdGFuY2VOdW1iZXIpIHtcclxuICAgICAgY29uc3QgdHJ5VG9GaW5kID0gdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoXHJcbiAgICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuaW5zdGFuY2VOdW1iZXJcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghIXRyeVRvRmluZC5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBuZXdJbnN0YW5jZXMgPSB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyICE9PSB0aGlzLmluc3RhbmNlTnVtYmVyXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2UuaW5zdGFuY2VzID0gbmV3SW5zdGFuY2VzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImNvcmUtb3JnLXRyZWUtY29udGFpbmVyXCIgW2NsYXNzLmZ1bGwtd2lkdGhdPVwiISFmdWxsV2lkdGhNb2RlXCIgKm5nSWY9XCIhIWRhdGFcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgcG9zaXRpb24gOiAncmVsYXRpdmUnLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQgKyAncHgnXHJcbiAgICB9XCI+XHJcbiAgICA8ZGl2ICNkaXNwbGF5Q29udGVudCBjbGFzcz1cImN1c3RvbS1vcmctdHJlZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb3JlLW9yZy10cmVlLWhlYWRlciBkLWZsZXgtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibTVcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hcIiAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGU6IGxhbmdcIiBbY2xhc3MuZnVsbC13aWR0aF09XCIhIWZ1bGxXaWR0aE1vZGVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICNzY3JvbGxDb250YWluZXIgY2xhc3M9XCJzY3JvbGwtY29udGFpbmVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLSBsYXlvdXRTZXJ2aWNlLmNvcmVPcmdUcmVlVG9wSGVpZ2h0IC0gbGF5b3V0U2VydmljZS5jb3JlT3JnVHJlZUJvdHRvbUhlaWdodCArICdweCcsXHJcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ3Njcm9sbCdcclxuICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIDxjb3JlLWxvYWRpbmctc3VyZmFjZSBbbG9hZGluZ109XCJsb2FkaW5nXCIgW2hlaWdodF09XCJzY3JvbGxDb250YWluZXJIZWlnaHRcIj48L2NvcmUtbG9hZGluZy1zdXJmYWNlPlxyXG4gICAgICAgICAgICAgICAgQGZvciAocm9vdCBvZiBkYXRhOyB0cmFjayByb290KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgQGRlZmVyKG9uIHZpZXdwb3J0KHNjcm9sbENvbnRhaW5lcikpIHtcclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInJvb3RcIiBbY2xhc3MuY29sbGFwc2VkXT1cIiEhIXJvb3QudHJlZSRFeHBhbmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtOyBjb250ZXh0OiB7IGNvbnRleHQ6IHJvb3QgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIH0gQHBsYWNlaG9sZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgUGxhY2Vob2xkZXIuLi5cclxuICAgICAgICAgICAgICAgIH0gQGxvYWRpbmcoKSB7XHJcbiAgICAgICAgICAgICAgICBMb2FkaW5nLi4uXHJcbiAgICAgICAgICAgICAgICB9IEBlcnJvcigpIHtcclxuICAgICAgICAgICAgICAgIEVycm9yLi4uXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXHJcbiAgICAgICAgICAgICAgICBib3R0b206ICcwcHgnLFxyXG4gICAgICAgICAgICAgICAgbGVmdDogJzBweCcsXHJcbiAgICAgICAgICAgICAgICByaWdodDogJzBweCcsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IGxheW91dFNlcnZpY2UuYmFzaWNTcGFjaW5nICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogbGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmcgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgbGluZUhlaWdodDogbGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodCArICdweCcsXHJcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbidcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBsYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0ICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJ1xyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb3JlLWNoZWNrYm94IFsobmdNb2RlbCldPVwic2hvd0Rpc3NvbHZlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoZWNrSW5jbHVkZURpc3NvbHZlZENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidVSS5DT1JFX09SR19UUkVFLlNIT1dfT1VUREFURURfVU5JVFNfQUJCUkVWSUFURUQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidVSS5DT1JFX09SR19UUkVFLlNIT1dfT1VUREFURURfVU5JVFMnXCIgdG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj48L2NvcmUtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWluaGVyaXRhbmNlLXdyYXBwZXJcIiAqbmdJZj1cImFjY2Vzc29yTW9kZSA9PT0gJ0NIRUNLRUQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb3JlLWNoZWNrYm94ICpuZ0lmPVwic2hvd0NoZWNrSW5oZXJpdGFuY2VcIiBbKG5nTW9kZWwpXT1cImNoZWNrSW5oZXJpdGFuY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGVja0luaGVyaXRhbmNlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ1VJLkNPUkVfT1JHX1RSRUUuQ0hFQ0tfSU5IRVJJVEFOQ0UnXCI+PC9jb3JlLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpdGVtIGxldC1jb250ZXh0PVwiY29udGV4dFwiIGxldC1pZD1cImNvbnRleHQuaWRcIiBsZXQtdGl0bGU9XCJjb250ZXh0LnRyZWUkVGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgbGV0LWhpZ2hsaWdodGVkPVwiY29udGV4dC50cmVlJEhpZ2hsaWdodGVkXCIgbGV0LWhhc0NoaWxkcmVuPVwiY29udGV4dC50cmVlJEhhc0NoaWxkcmVuXCJcclxuICAgICAgICAgICAgICAgIGxldC1oYXNBY3RpdmVDaGlsZHJlbj1cImNvbnRleHQudHJlZSRIYXNBY3RpdmVDaGlsZHJlblwiIGxldC1jaGlsZHJlbj1cImNvbnRleHQudHJlZSRDaGlsZHJlblwiXHJcbiAgICAgICAgICAgICAgICBsZXQtZXhwYW5kZWQ9XCJjb250ZXh0LnRyZWUkRXhwYW5kZWRcIiBsZXQtaXNBY3RpdmU9XCJjb250ZXh0LmlzQWN0aXZlXCIgbGV0LWFjdGl2ZT1cImNvbnRleHQudHJlZSRBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgbGV0LWNoZWNrZWQ9XCJjb250ZXh0LnRyZWUkQ2hlY2tlZFwiIGxldC1wcm90ZWN0ZWQ9XCJjb250ZXh0LnByb3RlY3RlZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIEBpZiAoKCFzaG93RGlzc29sdmVkICYmICEhaXNBY3RpdmUpIHx8ICghIXNob3dEaXNzb2x2ZWQpKSB7XHJcbiAgICAgICAgICAgICAgICA8bGkgW2NsYXNzLmhhcy1jaGlsZHJlbl09XCIhIWhhc0NoaWxkcmVuXCIgW2NsYXNzLmNvbGxhcHNlZF09XCIhIWhhc0NoaWxkcmVuICYmICEhIWV4cGFuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAoY2xpY2spPVwiYWNjZXNzb3JNb2RlICE9PSAnQ0hFQ0tFRCcgPyBvbk9iamVjdENsaWNrKGNvbnRleHQsICRldmVudCkgOiAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvbk9iamVjdENsaWNrKGNvbnRleHQsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICgoISFzaG93RGlzc29sdmVkICYmICEhaGFzQ2hpbGRyZW4pIHx8ICghc2hvd0Rpc3NvbHZlZCAmJiAhIWhhc0FjdGl2ZUNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImV4cGFuZC10b2dnbGVyIGN1c3RvbS1pY29uLXBhcmVudC1kb3duXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkV4cGFuZFRvZ2dsZXJDbGljayhjb250ZXh0LCAkZXZlbnQpXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYWNjZXNzb3JNb2RlID09PSAnQ0hFQ0tFRCcgJiYgIXByb3RlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29yZS1jaGVja2JveCAob25DbGljayk9XCJvbkl0ZW1DaGVjayhjb250ZXh0LCAkZXZlbnQpXCIgW2lucHV0VmFsdWVdPVwiY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj48L2NvcmUtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9iamVjdCBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkS2V5PT09aWQudG9TdHJpbmcoKVwiIFtjbGFzcy5oaWdobGlnaHRlZF09XCJoaWdobGlnaHRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzc29sdmVkXT1cIiFpc0FjdGl2ZVwiIFtjbGFzcy5wcm90ZWN0ZWRdPVwicHJvdGVjdGVkXCIgW2FwcFRvb2x0aXBdPVwidGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRpdGxlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb2JqZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICBAaWYgKCEhY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIFtjbGFzcy5jb2xsYXBzZWRdPVwiICEhIWV4cGFuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGNoaWxkcmVuOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghIWV4cGFuZGVkIHx8ICEhZnVsbFJlbmRlcmluZykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW07IGNvbnRleHQ6IHsgY29udGV4dDogY2hpbGQgfVwiPjwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==