tnx-shared 5.3.83 → 5.3.84

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.
@@ -150,7 +150,7 @@ export class CommonAppComponentComponent {
150
150
  this._entityMetadataService.setupSyncCacheEntityMetadata();
151
151
  this._router.config.forEach(route => this.addGuard(route));
152
152
  const checkFirstLogin = this.environment.authenticationSettings.isCheckFirstTimeLogin && this.rootData.currentUser.isFirstLogin;
153
- const checkExpirationPassword = this.environment.authenticationSettings.isCheckExpirationPassword && this.rootData.currentUser.isExpirationPassword;
153
+ const checkExpirationPassword = this.rootData.currentUser.isExpirationPassword;
154
154
  if (checkFirstLogin || checkExpirationPassword) {
155
155
  const domain = this.environment.clientDomain.appDomain;
156
156
  let subPath = '/user';
@@ -908,4 +908,4 @@ CommonAppComponentComponent.propDecorators = {
908
908
  onUserLoaded: [{ type: Output }],
909
909
  handleShowPopupPermissionUtils: [{ type: HostListener, args: ['document:keypress', ['$event'],] }]
910
910
  };
911
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWFwcC1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9jb21tb24tYXBwLWNvbXBvbmVudC9jb21tb24tYXBwLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFHSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFTLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEtBQUssTUFBTSxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTNGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVB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LG1CQUFtQjtZQWpCRSxjQUFjO1lBQW5DLG1CQUFtQjtZQWdCbkIsV0FBVztZQWhCMEIsYUFBYTtZQXNCbEQsY0FBYztZQUhkLGlCQUFpQjtZQVJqQixrQkFBa0I7Ozt1QkEwQnRCLFNBQVMsU0FBQyxVQUFVOzJCQUNwQixTQUFTLFNBQUMsY0FBYzswQkFDeEIsU0FBUyxTQUFDLGFBQWE7MkJBQ3ZCLFNBQVMsU0FBQyxjQUFjOzJCQUN4QixTQUFTLFNBQUMsY0FBYzswQkFDeEIsU0FBUyxTQUFDLGFBQWE7MEJBQ3ZCLFNBQVMsU0FBQyxvQkFBb0I7NEJBQzlCLFNBQVMsU0FBQyxXQUFXO3VCQUNyQixZQUFZLFNBQUMsV0FBVzs0QkFFeEIsS0FBSzs2QkFDTCxLQUFLOzZCQUNMLEtBQUs7MkJBRUwsTUFBTTs2Q0E0NUJOLFlBQVksU0FBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEF1dGhDb25maWcsIE9BdXRoU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xuaW1wb3J0ICogYXMgSGFtbWVyIGZyb20gJ2hhbW1lcmpzJztcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZSwgUHJpbWVOR0NvbmZpZyB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XG5cbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9hcHBsaWNhdGlvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgRW51bUFwcFN3aXRjaGVyQ29kZSwgRW51bVR5cGVTcGxhc2gsIEVudW1Vc2VyU291cmNlIH0gZnJvbSAnLi4vLi4vZW51bXMvY29tbW9uJztcbmltcG9ydCB7IENvbW1hbmRUeXBlLCBUbkNsaWVudENvbW1hbmQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdG4tY2xpZW50LWNvbW1hbmQnO1xuaW1wb3J0IHsgQXV0aGVuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGhlbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBDb3JlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvcmUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tUm91dGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2N1c3RvbS1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21pemVVaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXN0b21pemUtdWkuc2VydmljZSc7XG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktbWV0YWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBHZW5lcmljR3VhcmRDaGlsZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nZW5lcmljLWd1YXJkLWNoaWxkLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2VuZXJpY0d1YXJkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dlbmVyaWMtZ3VhcmQuc2VydmljZSc7XG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWVudVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGVybWlzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNpZ25hbFJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2lnbmFsci5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JhZ2VVcGRhdGVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2UtdXBkYXRlZC5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRuQ2xpZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RuLWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFF1ZXVlQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVwb3J0LXF1ZXVlL3JlcG9ydC1xdWV1ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG5DdXN0b21TY3JvbGxiYXJDb21wb25lbnQgfSBmcm9tICcuLi90bi1jdXN0b20tc2Nyb2xsYmFyL3RuLWN1c3RvbS1zY3JvbGxiYXIuY29tcG9uZW50JztcblxuZGVjbGFyZSBsZXQgdGlueW1jZTogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2NvbW1vbi1hcHAtY29tcG9uZW50JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tbW9uLWFwcC1jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY29tbW9uLWFwcC1jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlLCBFbnRpdHlNZXRhZGF0YVNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIENvbW1vbkFwcENvbXBvbmVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICBAVmlld0NoaWxkKCdva0J1dHRvbicpIG9rQnV0dG9uOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2NhbmNlbEJ1dHRvbicpIGNhbmNlbEJ1dHRvbjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdxdWlja05vdGVCdCcpIHF1aWNrTm90ZUJ0OiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3F1aWNrTm90ZUJ0MScpIHF1aWNrTm90ZUJ0MTogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdxdWlja05vdGVCdDInKSBxdWlja05vdGVCdDI6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgncGlubmVkTm90ZXMnKSBwaW5uZWROb3RlczogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKFJlcG9ydFF1ZXVlQ29tcG9uZW50KSByZXBvcnRRdWV1ZTogUmVwb3J0UXVldWVDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnc2Nyb2xsYmFyJykgc2Nyb2xsQmFyTWVudTogVG5DdXN0b21TY3JvbGxiYXJDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZHJlbihUZW1wbGF0ZVJlZikgY2hpbGRyZW46IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIEBJbnB1dCgpIHNob3dRdWlja05vdGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIGFsbG93QW5vbnltb3VzID0gZmFsc2U7XG4gICAgQElucHV0KCkgYXV0b1JlbmRlck1lbnUgPSB0cnVlO1xuXG4gICAgQE91dHB1dCgpIG9uVXNlckxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG5cbiAgICBwcml2YXRlIF91bnN1YnNjcmliZUFsbDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIC8vIHJvb3RWZXJzaW9uRGVwbG95ID0gJzEuMyc7XG4gICAgY3VycmVudFJvdXRlID0gJyc7XG4gICAgcGFnZUxvYWRlZCA9IGZhbHNlO1xuICAgIGZpcnN0VGltZUxvZ2luID0gZmFsc2U7XG4gICAgc2hvd0FkZE5vdGVGb3JtID0gZmFsc2U7XG4gICAgcGlubmVkTm90ZURhdGE6IGFueTtcbiAgICBwaW5uZWROb3Rlc01pbmltaXplU3RhdHVzID0gZmFsc2U7XG4gICAgcGlubmVkTm90ZXNNYXhpbWl6ZVN0YXR1cyA9IG51bGw7XG4gICAgZW52aXJvbm1lbnQ6IGFueTtcbiAgICBjYXB0dXJlTW9kZSA9IGZhbHNlO1xuICAgIHAwOiBhbnk7XG4gICAgcDE6IGFueTtcbiAgICBsb2dnZWRJbiA9IGZhbHNlO1xuICAgIHN1YnNjcmlibGU6IFN1YnNjcmlwdGlvbjtcbiAgICBvbmx5U2hvd01haW5Db250ZW50ID0gZmFsc2U7XG5cbiAgICBhcHBDb2RlID0gJyc7XG5cbiAgICBzZWFyY2hNZW51UmVzdWx0OiBhbnlbXTtcbiAgICBzZWFyY2hNZW51SW5wdXQ6IHN0cmluZztcblxuICAgIHNob3dQaW5uZWRNZW51ID0gZmFsc2U7XG4gICAgaXNJblBpbm5lZE1lbnUgPSBmYWxzZTtcbiAgICBpc1NlYXJjaE1lbnVJbnB1dEZvY3VzID0gZmFsc2U7XG4gICAgbWVudU1vZGVsOiBhbnk7XG4gICAgd2FpdGluZyA9IGZhbHNlO1xuICAgIG1lc3NhZ2VXYWl0aW5nOiBzdHJpbmdbXSA9IFtdO1xuICAgIHNob3dSZWplY3RDb25maXJtID0gdHJ1ZTtcblxuICAgIHJlYWRvbmx5IGtleVByZXNzUGVybWlzc2lvblV0aWxzID0gJ3BwcHBwcHBwcCc7XG4gICAgY3VycmVudEtleVByZXNzSW5kZXggPSAwO1xuICAgIHJvb3REYXRhOiBhbnk7XG5cbiAgICBFbnVtVHlwZVNwbGFzaCA9IEVudW1UeXBlU3BsYXNoO1xuICAgIGxheW91dExvYWRpbmdQYWdlOiBzdHJpbmcgPSBFbnVtVHlwZVNwbGFzaC5ORVdfVjE7XG4gICAgZmF2SWNvbjogSFRNTExpbmtFbGVtZW50ID0gdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYXBwRmF2aWNvbicpO1xuICAgIGljb24gPSAnJztcbiAgICBzaG93TWVudUljb25JbmFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQsXG4gICAgICAgIHB1YmxpYyBfZ2xvYmFsU2VydmljZTogR2xvYmFsU2VydmljZSxcbiAgICAgICAgcHVibGljIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX29hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9hdXRoZW5TZXJ2aWNlOiBBdXRoZW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIF90aXRsZTogVGl0bGUsXG4gICAgICAgIHByaXZhdGUgX3NpZ25hbFJTZXJ2aWNlOiBTaWduYWxSU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfc3RvcmFnZVVwZGF0ZWRTZXJ2aWNlOiBTdG9yYWdlVXBkYXRlZFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2N1c3RvbVJvdXRlU2VydmljZTogQ3VzdG9tUm91dGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfYXBwbGljYXRpb25Db250ZXh0OiBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlOiBDb21wb25lbnRDb250ZXh0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwdWJsaWMgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX3RuQ2xpZW50U2VydmljZTogVG5DbGllbnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jb3JlQ29uZmlnU2VydmljZTogQ29yZUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2VudGl0eU1ldGFkYXRhU2VydmljZTogRW50aXR5TWV0YWRhdGFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NvbmZpcm1TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9tZW51U2VydmljZTogTWVudVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3ByaW1lbmdDb25maWc6IFByaW1lTkdDb25maWcsXG4gICAgICAgIHByaXZhdGUgX3N0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jdXN0b21pemVVaVNlcnZpY2U6IEN1c3RvbWl6ZVVpU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcbiAgICAgICAgdGhpcy5hcHBDb2RlID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5hcHBDb2RlO1xuICAgICAgICB0aGlzLmljb24gPSB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4uZmF2aWNvbjtcbiAgICAgICAgaWYgKHRoaXMuZmF2SWNvbikge1xuICAgICAgICAgICAgdGhpcy5mYXZJY29uLmhyZWYgPSB0aGlzLmljb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMpIHtcbiAgICAgICAgICAgIHRoaXMua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMgPSB0aGlzLmVudmlyb25tZW50LmtleVByZXNzUGVybWlzc2lvblV0aWxzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuc3RvcmFnZSA9PT0gJ3Nlc3Npb25TdG9yYWdlJykge1xuICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0U3RvcmFnZShzZXNzaW9uU3RvcmFnZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRTdG9yYWdlKGxvY2FsU3RvcmFnZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcmltZW5nQ29uZmlnLnNldFRyYW5zbGF0aW9uKHtcbiAgICAgICAgICAgIGRheU5hbWVzOiBbJ0No4bunIG5o4bqtdCcsICdUaOG7qSAyJywgJ1Ro4bupIDMnLCAnVGjhu6kgNCcsICdUaOG7qSA1JywgJ1Ro4bupIDYnLCAnVGjhu6kgNyddLFxuICAgICAgICAgICAgZGF5TmFtZXNTaG9ydDogWydDTicsICdUaDInLCAnVGgzJywgJ1RoNCcsICdUaDUnLCAnVGg2JywgJ1RoNyddLFxuICAgICAgICAgICAgZGF5TmFtZXNNaW46IFsnQ04nLCAnVGgyJywgJ1RoMycsICdUaDQnLCAnVGg1JywgJ1RoNicsICdUaDcnXSxcbiAgICAgICAgICAgIG1vbnRoTmFtZXM6IFtcbiAgICAgICAgICAgICAgICAnVGjDoW5nIDEnLCAnVGjDoW5nIDInLCAnVGjDoW5nIDMnLCAnVGjDoW5nIDQnLCAnVGjDoW5nIDUnLCAnVGjDoW5nIDYnLCAnVGjDoW5nIDcnLCAnVGjDoW5nIDgnLCAnVGjDoW5nIDknLCAnVGjDoW5nIDEwJywgJ1Row6FuZyAxMScsICdUaMOhbmcgMTInXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ1QxJywgJ1QyJywgJ1QzJywgJ1Q0JywgJ1Q1JywgJ1Q2JywgJ1Q3JywgJ1Q4JywgJ1Q5JywgJ1QxMCcsICdUMTEnLCAnVDEyJ10sXG4gICAgICAgICAgICB0b2RheTogJ0jDtG0gbmF5JyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuY3VzdG9taXplVWkpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1c3RvbWl6ZVVpU2VydmljZS5zZXRDdXN0b21pemUodGhpcy5lbnZpcm9ubWVudC5jdXN0b21pemVVaSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2V0U2VydmljZSh7XG4gICAgICAgIC8vICAgICBlbnY6IHRoaXMuZW52aXJvbm1lbnQsXG4gICAgICAgIC8vICAgICB0cmFuc2xhdGVTZXJ2aWNlOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAvLyAgICAgbWVzc2FnZVNlcnZpY2U6IF9tZXNzYWdlU2VydmljZSxcbiAgICAgICAgLy8gICAgIGNvbmZpcm1TZXJ2aWNlOiBfY29uZmlybVNlcnZpY2VcbiAgICAgICAgLy8gfSk7XG5cbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmFkZFJvb3RDb250ZXh0KFxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UsXG4gICAgICAgICAgICBfYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fdGl0bGUuc2V0VGl0bGUodGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5tYWluLm93bmVyKTtcblxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5zZXREZWZhdWx0TGFuZygndm4nKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKCd2bicpO1xuXG4gICAgICAgIHRoaXMuaW5pdFRpbnlNY2UoKTtcblxuICAgICAgICBjb25zdCBjZmcgPSB0aGlzLmdldENvbmZpZ0F1dGhlbigpO1xuICAgICAgICAvLyBDaHV54buDbiBzYW5nIHNlc3Npb24gc3RvcmFnZSwgbuG6v3Ug4buVbiB0aMOsIHjDs2EgZMOybmcgbsOgeSDEkWlcbiAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLnNldFN0b3JhZ2UodGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0U3RvcmFnZSgpKTtcbiAgICAgICAgdGhpcy5pbmplY3RDb25maWcoY2ZnKTtcblxuICAgICAgICB0aGlzLmNvbmZpZ3VyZVdpdGhOZXdDb25maWdBcGkoKTtcblxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplID0gdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0T2JqZWN0QW55KCdwZXJzb25hbGl6ZScpO1xuICAgICAgICBpZiAoIXRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2hvd01lbnVJY29uSW5hY3RpdmUgPSB0aGlzLmVudmlyb25tZW50LnNob3dNZW51SWNvbkluYWN0aXZlID8/IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnJlcGxheVN1YnNjcmliZShcbiAgICAgICAgICAgIENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfTE9BREVELFxuICAgICAgICAgICAgYXN5bmMgKHJzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2Uuc2V0dXBTeW5jQ2FjaGVFbnRpdHlNZXRhZGF0YSgpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLmNvbmZpZy5mb3JFYWNoKHJvdXRlID0+IHRoaXMuYWRkR3VhcmQocm91dGUpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVja0ZpcnN0TG9naW4gPSB0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuaXNDaGVja0ZpcnN0VGltZUxvZ2luICYmIHRoaXMucm9vdERhdGEuY3VycmVudFVzZXIuaXNGaXJzdExvZ2luO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrRXhwaXJhdGlvblBhc3N3b3JkID0gdGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmlzQ2hlY2tFeHBpcmF0aW9uUGFzc3dvcmQgJiYgdGhpcy5yb290RGF0YS5jdXJyZW50VXNlci5pc0V4cGlyYXRpb25QYXNzd29yZDtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tGaXJzdExvZ2luIHx8IGNoZWNrRXhwaXJhdGlvblBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbWFpbiA9IHRoaXMuZW52aXJvbm1lbnQuY2xpZW50RG9tYWluLmFwcERvbWFpbjtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1YlBhdGggPSAnL3VzZXInO1xuICAgICAgICAgICAgICAgICAgICAvLyB2w6wgREhHVFZUIGTDuW5nIMSR4buTbmcgdGjhu51pIHVzZXJ2NSB2w6AgdXNlcnY0XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50Lm1hVHJ1b25nID09ICdESEdUVlQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJQYXRoID0gJy91c2VydjUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmtSZWRpcmVjdCA9IGAke2RvbWFpbn0ke3N1YlBhdGh9L2NoYW5nZS1wYXNzd29yZGA7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRvY3VtZW50LmxvY2F0aW9uLmhyZWYgIT0gbGlua1JlZGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tGaXJzdExvZ2luKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybSgnQuG6oW4gdnVpIGzDsm5nIMSR4buVaSBt4bqtdCBraOG6qXUgbeG6t2MgxJHhu4tuaCB0cm9uZyBs4bqnbiDEkcSDbmcgbmjhuq1wIMSR4bqndSB0acOqbiDEkeG7gyB0xINuZyB0w61uaCBi4bqjbyBt4bqtdCBj4bunYSBo4buHIHRo4buRbmchJykudGhlbihhc3luYyAocnM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmNoYW5nZUZpcnN0VGltZUxvZ2luKHRoaXMucm9vdERhdGEuY3VycmVudFVzZXIudXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9JTkZPX0NIQU5HRUQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IGxpbmtSZWRpcmVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrRXhwaXJhdGlvblBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybShgTeG6rXQga2jhuql1IMSRw6MgcXXDoSAke3RoaXMuZW52aXJvbm1lbnQuYXV0aGVudGljYXRpb25TZXR0aW5ncy5leHBpcmF0aW9uUGFzc3dvcmRNb250aCA/PyA2fSB0aMOhbmcgY2jGsGEgdGhheSDEkeG7lWkuIELhuqFuIHZ1aSBsw7JuZyDEkeG7lWkgbeG6rXQga2jhuql1IMSR4buDIHTEg25nIHTDrW5oIGLhuqNvIG3huq10IGPhu6dhIGjhu4cgdGjhu5FuZyFgKS50aGVuKGFzeW5jIChyczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gbGlua1JlZGlyZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maXJzdFRpbWVMb2dpbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBs4bqnbiDEkeG6p3UgxJHEg25nIG5o4bqtcCB0aMOsIHbDoG8gdHJhbmcgbeG6t2MgxJHhu4tuaFxuICAgICAgICAgICAgICAgICAgICAvLyBpZiAodGhpcy5yb290VmVyc2lvbkRlcGxveSkge1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgndmVyc2lvbkRlcGxveScsIHRoaXMucm9vdFZlcnNpb25EZXBsb3kpO1xuICAgICAgICAgICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGjDqm0gdsOgbyDEkeG7gyDEkcOhbmggZOG6pXUgbOG6p24gZOG6p3UgbG9naW4gPT4gxJHhu4MgeOG7rSBsw71cbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlckEgxJFhZyDhu58gbcOgbiBow6xuaCAxID0+IMSRxINuZyB4deG6pXQgPT4gxJHEg25nIG5o4bqtcCB2w6BvIHTDoGkga2hv4bqjbiBVc2VyQiBraMO0bmcgY8OzIHF1eeG7gW4gbcOgbiBow6xuaCAxID0+IHJlZGlyZWN0IHbhu4EgXCIvXCJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgnY3VycmVudF91c2VyX2luZm8nKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgnZmlyc3RUaW1lTG9naW4nLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2xkVXJsID0gdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnY3VycmVudFVybCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbGRVcmwgJiYgb2xkVXJsICE9IHRvcC5sb2NhdGlvbi5ocmVmICsgJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRVcmwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gYCR7b2xkVXJsfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdjdXJyZW50VXJsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50Py51c2luZ0RlZmF1bHRSZWRpcmVjdEJ5U291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwU3dpdGNoZXIgPSB0aGlzLmVudmlyb25tZW50Py5hcHBNZXRhZGF0YT8uYXBwU3dpdGNoZXIgPz8gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucm9vdERhdGEuY3VycmVudFVzZXIuc291cmNlID09IEVudW1Vc2VyU291cmNlLkhPQ19WSUVOKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmdIb2NWaWVuID0gYXBwU3dpdGNoZXIuZmluZCh4ID0+IHguY29kZS50b1VwcGVyQ2FzZSgpID09IEVudW1BcHBTd2l0Y2hlckNvZGUuQ09OR05HVU9JRFVORyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25nSG9jVmllbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wLmxvY2F0aW9uLmhyZWYgPSBgJHtjb25nSG9jVmllbi51cmx9LyR7Y29uZ0hvY1ZpZW4uZGVmYXVsdFJlZGlyZWN0fWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFJlZGlyZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gdmFyIHZlcnNpb25EZXBsb3kgPSB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCd2ZXJzaW9uRGVwbG95Jyk7XG4gICAgICAgICAgICAgICAgLy8gbGV0IHZlcnNpb25Gcm9tQXBwbGljYXRpb24gPSB0aGlzLnJvb3RWZXJzaW9uRGVwbG95O1xuICAgICAgICAgICAgICAgIC8vIGlmICh2ZXJzaW9uRnJvbUFwcGxpY2F0aW9uICYmIHZlcnNpb25EZXBsb3kgJiYgKCt2ZXJzaW9uRGVwbG95KSA8ICgrdmVyc2lvbkZyb21BcHBsaWNhdGlvbikpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgndmVyc2lvbkRlcGxveScsIHZlcnNpb25Gcm9tQXBwbGljYXRpb24pO1xuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmxvZ291dCgpO1xuICAgICAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGlubmVkTm90ZXMoKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWduYWxSU2VydmljZS5pbml0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWduYWxSU2VydmljZS5zdGFydChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2lzdGVuY3lIdWInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCcm9hZGNhc3RNZXNzYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQXV0aG9yaXplQ2FjaGUuYmluZCh0aGlzKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsUlNlcnZpY2Uuc3RhcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05vdGlmaWNhdGlvbkh1YicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZnJlc2hGb3JVcGRhdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5hcHBDb2RlcyAmJiBkYXRhLmFwcENvZGVzLnNvbWUoeCA9PiB4LnRvVXBwZXJDYXNlKCkgPT0gdGhpcy5hcHBDb2RlLnRvVXBwZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5GT1JDRV9SRUxPQUQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRNb2R1bGVQYWdlcyA9IHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUuZGVmYXVsdE1vZHVsZVBhZ2VzO1xuICAgICAgICBpZiAoZGVmYXVsdE1vZHVsZVBhZ2VzICYmIGRlZmF1bHRNb2R1bGVQYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXIuZm9yRWFjaChtID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdlID0gZGVmYXVsdE1vZHVsZVBhZ2VzLmZpbmQocCA9PiBwLmNvZGUgPT0gbS5jb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAocGFnZSAmJiBwYWdlLmRlZmF1bHRQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIG0udXJsID0gcGFnZS5kZWZhdWx0UGFnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBIYW1tZXIuZGVmYXVsdHMuY3NzUHJvcHMudXNlclNlbGVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZSgnUVVJQ0tfTk9URV9QT1BVUC5DTE9TRV9QT1BVUCcsIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZWRpdEZvcm1Nb2RlbC5zaG93UXVpY2tOb3RlRm9ybSA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoJ0dPX0hPTUUnLCBkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJyk7XG4gICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoJ1RPR0dMRV9MQVlPVVQnLCBkYXRhID0+IHtcbiAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLm9ubHlTaG93TWFpbkNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IGRhdGEub25seVNob3dNYWluQ29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKCdNQUlOX0NPTlRFTlRfT05MWScsIHJzID0+IHtcbiAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHJzO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuU0hPV19SRUpFQ1RfQ09ORklSTSwgZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dSZWplY3RDb25maXJtID0gZGF0YTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpcy5lbnZpcm9ubWVudC5zcGxhc2hTY3JlZW4gfHwgdGhpcy5lbnZpcm9ubWVudC5zcGxhc2hTY3JlZW4gPT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0TG9hZGluZ1BhZ2UgPSBFbnVtVHlwZVNwbGFzaC5ERUZBVUxUO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRMb2FkaW5nUGFnZSA9IHRoaXMuZW52aXJvbm1lbnQuc3BsYXNoU2NyZWVuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZm9yY2UgbG9nb3V0IGlmIGFjY2VzcyB0b2tlbiBpcyBpc3N1ZWQgYmVmb3JlIHRpbWVcbiAgICAgICAgLy8gdGhpcy5mb3JjZUxvZ291dElmSW52YWxpZGF0ZSgpO1xuICAgICAgICAvLyB0aGlzLnRlbXBvcmFyeUZpeEVycm9yTm90TG9nZ2VkT3V0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmFtTkggRml4IHThuqFtIMSR4buDIHjhu60gbMO9IGzhu5dpIMSR4buZaSBoZW1pcyBraGkgxJHEg25nIHh14bqldCBuaMawbmcga2jDtG5nIG5o4bqjeSDEkcaw4bujYyBzYW5nIHRyYW5nIMSRxINuZyBuaOG6rXAsIHPhur0gdMOsbSBoaeG7g3UgdsOgIHjhu60gbMO9IHRyaeG7h3QgxJHhu4Mgc2F1XG4gICAgICovXG4gICAgcHJpdmF0ZSB0ZW1wb3JhcnlGaXhFcnJvck5vdExvZ2dlZE91dCgpIHtcbiAgICAgICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWNjZXNUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhY2Nlc3NfdG9rZW4nKTtcbiAgICAgICAgICAgIGlmICghYWNjZXNUb2tlbiAmJiB0b3AubG9jYXRpb24uaHJlZi5pbmRleE9mKCc/Y29kZT0nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndGVtcG9yYXJ5IGZpeCBlcnJvciBub3QgbG9nZ2VkIG91dCBieSBhdXRvIHJlZnJlc2ggaWYgbm90IGhhdmUgYWNjZXNzIHRva2VuJyk7XG4gICAgICAgICAgICAgICAgdG9wLmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAxMDAwKTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgZm9yY2VMb2dvdXRJZkludmFsaWRhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY2hlY2sgbG9naWMgaW52YWxpZGF0ZSBhY2Nlc3N0b2tlbiBieSBjb25maWd1cmF0aW9uIScpO1xuICAgICAgICAgICAgY29uc3QgZGVvY29kZWQgPSB0aGlzLl91c2VyU2VydmljZS5nZXRKd3REZWNvZGVkKCk7XG4gICAgICAgICAgICBjb25zdCBuYmYgPSBkZW9jb2RlZFsnbmJmJ107XG4gICAgICAgICAgICBjb25zdCBuYmZDb25maWcgPSB0aGlzLmVudmlyb25tZW50Lm5iZjtcbiAgICAgICAgICAgIC8vIE7hur91IHRo4budaSBnaWFuIG5vdCBiZWZvcmUgdHJvbmcgY+G6pXUgaMOsbmggbcOgIGzhu5tuIGjGoW4gbm90IGJlZm9yZSB0cm9uZyBhY2Nlc3MgdGjDrCBsb2dvdXQgKGxvZ291dCB04bqldCBj4bqjIGPDoWMgYWNjZXNzIHRva2VuIMSRxrDhu6NjIGPhuqVwIHRyxrDhu5tjIHRo4budaSDEkWnhu4NtIHRyb25nIGPhuqV1IGjDrG5oKVxuICAgICAgICAgICAgaWYgKG5iZkNvbmZpZyAmJiBuYmZDb25maWcgPiBuYmYpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndG9rZW4gaXMgaW52YWxpZCwgcmVsb2FkIGJyb3dzZXIgbm93IScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnSOG7hyB0aOG7kW5nIHbhu6thIGPhuq1wIG5o4bqtdCBwaGnDqm4gYuG6o24gbeG7m2ksIHPhur0ga2jhu59pIMSR4buZbmcgbOG6oWkgc2F1IDJzJyk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGhhcmQgcmVsb2FzZCBmb3JjZSBsb2dvdXRcbiAgICAgICAgICAgICAgICAgICAgdG9wLmxvY2F0aW9uLmhyZWYgPSAnL3VzZXIvbWFpbi9mb3JjZS11c2VyLWxvZ291dCc7XG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndXNlciBpcyB2YWxpZCEnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gU2V0IGR5bmFtaWMgYWxsIGNoaWxkcmVuXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKTtcbiAgICAgICAgdGhpcy5yb290RGF0YSA9IHJvb3QuZGF0YTtcbiAgICAgICAgcm9vdC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YSA9IHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXIuZmluZCh4ID0+IHguY29kZS50b0xvd2VyQ2FzZSgpID09IHRoaXMuYXBwQ29kZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgcm9vdC5kYXRhLmFwcE9yaWdpbiA9IHRoaXMuZW52aXJvbm1lbnQuZW5hYmxlQmFzZUhyZWYgPyBgLyR7cm9vdC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YS5jb2RlLnRvTG93ZXJDYXNlKCl9L2AgOiAnLyc7XG4gICAgICAgIHJvb3QuZGF0YS5hbGxvd0Fub255bW91cyA9IHRoaXMuYWxsb3dBbm9ueW1vdXM7XG4gICAgICAgIC8vIGdldCBjdXJyZW50IFVzZXJcbiAgICAgICAgdGhpcy5fdXNlclNlcnZpY2UucG9wdWxhdGVDdXJyZW50VXNlcigpO1xuICAgICAgICB0aGlzLm9uVXNlckxvYWRlZC5lbWl0KCk7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5ORUVEX0NMRUFSX1BFUk1JU1NJT05fQ0FDSEUsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlLmNsZWFyUGVybWlzc2lvbkNhY2hlKFtdKTtcbiAgICAgICAgICAgIGlmICghcmVzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB0cm9uZyBsw7pjIGNsZWFyIGNhY2hlIHBow6JuIHF1eeG7gW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlLmdldEFsbEJhc2VQZXJtaXNzaW9uKCk7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5maXJlUmVwbGF5RXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9MT0FERUQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULktFWV9ET1dOX0FSUk9XTEVGVCwgKGUpID0+IHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmNhbmNlbEJ1dHRvbi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9BUlJPV1JJR0hULCAoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9rQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLm9rQnV0dG9uLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbEJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuUEVSU09OQUxJWkVfVVBEQVRFRCwgKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhLnNob3dRdWlja05vdGVCdXR0b25PblNjcmVlbikge1xuICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBzZW5kIGN1cnJlbnQgdmVyc2lvbiB0byB0biBjbGllbnRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90bkNsaWVudFNlcnZpY2Uuc2VuZENvbW1hbmQoPFRuQ2xpZW50Q29tbWFuZD57XG4gICAgICAgICAgICAgICAgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLlN5bmNWZXJpb25UbkNsaWVudCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246IHRoaXMuZW52aXJvbm1lbnQuc2lnbmFsci52ZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludDogdGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW4uYXBwRG9tYWluICsgJy8nICsgdGhpcy5lbnZpcm9ubWVudC5zaWduYWxyLmVuZHBvaW50VXBkYXRlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBrZXk6IHRoaXMuZW52aXJvbm1lbnQuc2lnbmFsci5jbGllbnRLZXlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAxMDAwKTtcblxuXG4gICAgICAgIC8vIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuQ09NTU9OLkNMT1NFX0VESVRfRk9STSwgKGRhdGEpID0+IHtcbiAgICAgICAgLy8gICAgIHRoaXMuc2hvd0FkZE5vdGVGb3JtID0gZmFsc2U7XG4gICAgICAgIC8vIH0pO1xuXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnJlcGxheVN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5RVUlDS19OT1RFX1BJTiwgKCkgPT4ge1xuICAgICAgICAgICAgLy8gc2V0IHBpbm5lZCBub3RlIGxvY2F0aW9uIGFmdGVyIGNsaWNrIHBpblxuICAgICAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Bpbm5lZE5vdGVzTG9jYXRpb24nLCB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAocmVjdC5sZWZ0KSxcbiAgICAgICAgICAgICAgICAgICAgbWluaW1pemU6IHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGlubmVkTm90ZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UucmVwbGF5U3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlFVSUNLX05PVEVfVU5QSU4sICgpID0+IHtcbiAgICAgICAgICAgIC8vIHNldCBwaW5uZWQgbm90ZSBsb2NhdGlvbiBhZnRlciBjbGljayB1cHBpblxuICAgICAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Bpbm5lZE5vdGVzTG9jYXRpb24nLCB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAocmVjdC5sZWZ0KSxcbiAgICAgICAgICAgICAgICAgICAgbWluaW1pemU6IHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGlubmVkTm90ZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5lZGl0Rm9ybU1vZGVsID0gW107XG5cbiAgICAgICAgLy8gc3Vic2NyaWJlIGNoYW5nZSBlbnRpdHkgbWV0YWRhdGFcbiAgICAgICAgdGhpcy5fc3RvcmFnZVVwZGF0ZWRTZXJ2aWNlLnN1YnNjcmliZUNoYW5nZWRMb2NhbFN0b3JhZ2UoJ0tFWV9FTlRJVFlfTUVUREFUQV9VUERBVEVEJywgKHJzKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZW50aXR5IG1ldGFkYXRhIGNoYW5nZWQnLCBycyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHRyaWdnZXIgdXBkYXRlIHN0b3JhZ2Uga2V5XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5TSE9XX1dBSVRfQk9YLCBkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMud2FpdGluZyA9IGRhdGEuc2hvdztcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVdhaXRpbmcgPSBbLi4uZGF0YS5tZXNzYWdlXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm9vdERhdGEuaHR0cFJlcXVlc3RMaXN0ID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIG7hur91IGFsbG93IGFub255bW91cyB0aMOsIGxvYWQgcmEgY8OhYyBwaMOibiBo4buHIGNobyBwaMOpcCB2w6BvIGtow7RuZyBj4bqnbiDEkcSDbmcgbmjhuq1wXG4gICAgICAgIGlmICh0aGlzLmFsbG93QW5vbnltb3VzKSB7XG4gICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnBhZ2VMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gdHJ1ZTtcblxuICAgICAgICAgICAgcm9vdC5zdWJzY3JpYmUoJ0xPR0lOJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5sb2FkRGlzY292ZXJ5RG9jdW1lbnRBbmRUcnlMb2dpbigpLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5pbml0TG9naW5GbG93KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dBbm9ueW1vdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5pbml0TG9naW5GbG93KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLl9jZC5kZXRhY2goKTtcbiAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcXVpY2tOb3RlQnRMb2NhdGlvbiA9IHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldE9iamVjdEFueSgncXVpY2tOb3RlQnRMb2NhdGlvbicpO1xuICAgICAgICAgICAgaWYgKHF1aWNrTm90ZUJ0TG9jYXRpb24gJiYgdGhpcy5xdWlja05vdGVCdCkge1xuICAgICAgICAgICAgICAgIGlmIChxdWlja05vdGVCdExvY2F0aW9uLmJvdHRvbSA8IHdpbmRvdy5pbm5lckhlaWdodCAtIDUwICYmIHF1aWNrTm90ZUJ0TG9jYXRpb24ucmlnaHQgPCB3aW5kb3cuaW5uZXJXaWR0aCAtIDUwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5ib3R0b20gPSBxdWlja05vdGVCdExvY2F0aW9uLmJvdHRvbSArICdweCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9IHF1aWNrTm90ZUJ0TG9jYXRpb24ucmlnaHQgKyAncHgnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5wZXJzb25hbGl6ZS5zaG93UXVpY2tOb3RlQnV0dG9uT25TY3JlZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5xdWlja05vdGVCdCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplLnNob3dRdWlja05vdGVCdXR0b25PblNjcmVlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBpbm5lZE5vdGVzTG9jYXRpb24gPSB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRPYmplY3RBbnkoJ3Bpbm5lZE5vdGVzTG9jYXRpb24nKTtcbiAgICAgICAgICAgIGlmIChwaW5uZWROb3Rlc0xvY2F0aW9uICYmIHRoaXMucGlubmVkTm90ZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGlmIChwaW5uZWROb3Rlc0xvY2F0aW9uLmJvdHRvbSA8IHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QuaGVpZ2h0ICYmIHBpbm5lZE5vdGVzTG9jYXRpb24ubGVmdCA8IHdpbmRvdy5pbm5lcldpZHRoIC0gMjUwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5zdHlsZS5ib3R0b20gPSBwaW5uZWROb3Rlc0xvY2F0aW9uLmJvdHRvbSArICdweCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gcGlubmVkTm90ZXNMb2NhdGlvbi5sZWZ0ICsgJ3B4JztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXMgPSBwaW5uZWROb3Rlc0xvY2F0aW9uLm1pbmltaXplO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBpbm5lZE5vdGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXMgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5waW5uZWROb3RlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS50aXRsZVBhZGRpbmdCb3R0b20gPSAnMHB4JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0uY29udGVudERpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnBpbm5lZE5vdGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLnRpdGxlUGFkZGluZ0JvdHRvbSA9ICc2cHgnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS5jb250ZW50RGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnBpbm5lZE5vdGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAxMDAwKTtcblxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCk7XG4gICAgICAgIHJvb3QucmVwb3J0UXVldWUgPSB0aGlzLnJlcG9ydFF1ZXVlO1xuICAgICAgICB0aGlzLm1lbnVNb2RlbCA9IHRoaXMuX21lbnVTZXJ2aWNlLmdldE1lbnVJdGVtcygpO1xuICAgIH1cblxuICAgIGRlZmF1bHRSZWRpcmVjdCgpIHtcbiAgICAgICAgLy8gY2hlY2sgZGVmYXVsdCByZWRpcmVjdFxuICAgICAgICBpZiAodGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xuICAgICAgICAgICAgY29uc3QgYXBwU2V0dGluZyA9IHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmRhdGEuY3VycmVudEFwcE1ldGFkYXRhO1xuICAgICAgICAgICAgaWYgKCFhcHBTZXR0aW5nICYmIHRoaXMuZW52aXJvbm1lbnQuY2xpZW50RG9tYWluLmRlZmF1bHRSZWRpcmVjdCAmJiB0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpbi5kZWZhdWx0UmVkaXJlY3RcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGF0aFRvQ2hlY2sgPSB0aGlzLmVudmlyb25tZW50LmVuYWJsZUJhc2VIcmVmID8gYC8ke2FwcFNldHRpbmcuY29kZS50b0xvd2VyQ2FzZSgpfS9gIDogJy8nO1xuXG4gICAgICAgICAgICBpZiAoKGxvY2F0aW9uLnBhdGhuYW1lID09PSAnLycgfHwgbG9jYXRpb24ucGF0aG5hbWUgPT09ICcnIHx8IGxvY2F0aW9uLnBhdGhuYW1lID09PSBwYXRoVG9DaGVjaykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3VzZXIgbm90IHZhbGlkIHRva2VuJywgdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnYWNjZXNzX3Rva2VuJykpO1xuICAgICAgICAgICAgLy8gVE9ETzogTmFtTkggWOG7rSBsw70gdOG6oW0gY2hvIHRyxrDhu51uZyBo4bujcCDEkcSDbmcgbmjhuq1wIGzhuqduIMSR4bqndSBuaMawbmcgY2jhuqF5IMSR4bq/biDEkcOieSBtw6AgYWNjZXNzIHRva2VuIHbhuqtuIGtow7RuZyBo4bujcCBs4buHXG4gICAgICAgICAgICAvLyBY4butIGzDvSB0cmnhu4d0IMSR4buDIGLhurFuZyBjw6FjaCB0w6xtIFBBIGLhuq90IGV2ZW50IGPhu6dhIGFuZ3VsYXIyIG9pZGMgxJHhu4MgeOG7rSBsw70gdHLGsOG7m2Mga2hpIMSR4bq/biBixrDhu5tjIGRlZmF1bHQgcmVkaXJlY3RcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRvcC5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NkWydkZXN0cm95ZWQnXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2V4Y2VwdGlvbiBvbiBkZXRlY3QgY2hhbmdlJywgZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSwgMTApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJBdXRob3JpemVDYWNoZSgpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoc2Vzc2lvblN0b3JhZ2UpXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gL15BVVRIT1JJWkFUSU9OLy50ZXN0KGl0ZW0pKVxuICAgICAgICAgICAgLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvY3VzVHJhcChldmVudCwgZGlyZWN0KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChkaXJlY3QpIHtcbiAgICAgICAgICAgIHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdFRpbnlNY2UoKSB7XG4gICAgICAgIHRpbnltY2UuYmFzZVVSTCA9ICcvYXNzZXRzL3ZlbmRvci90aW55bWNlJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbmZpZ3VyZVdpdGhOZXdDb25maWdBcGkoKSB7XG4gICAgICAgIC8vIGZvciBmaXJzdCBsb2dpblxuICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuZXZlbnRzLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGV2dC50eXBlID09ICd0b2tlbl9yZWNlaXZlZCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RUaW1lTG9naW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UuY2xlYW51cExvY2FsU3RvcmFnZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UuY2xlYW51cFNlc3Npb25TdG9yYWdlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVVwZGF0ZWRTZXJ2aWNlLmNsZWFudXBTdG9yYWdlU2VydmljZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVSZXBsYXlFdmVudChcbiAgICAgICAgICAgICAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9SRUFEWSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2dpblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldnQudHlwZSA9PT0gJ3Rva2VuX2V4cGlyZXMnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLnRyeUxvZ2luKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldnQudHlwZSA9PT0gJ2xvZ291dCcpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHN0b3JhZ2VcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmNsZWFudXBMb2NhbFN0b3JhZ2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmNsZWFudXBTZXNzaW9uU3RvcmFnZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UuY2xlYXJMb2NhbFRva2VuKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVVwZGF0ZWRTZXJ2aWNlLmNsZWFudXBTdG9yYWdlU2VydmljZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5yZXZva2VUb2tlbkFuZExvZ291dChudWxsLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC50eXBlID09ICdzZXNzaW9uX3Rlcm1pbmF0ZWQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgnY3VycmVudF91c2VyX2luZm8nKTtcbiAgICAgICAgICAgICAgICAvLyBsb2dvdXRcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmxvZ291dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LnR5cGUgPT0gJ2Rpc2NvdmVyeV9kb2N1bWVudF9sb2FkZWQnKSB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldnQudHlwZSA9PSAndG9rZW5fcmVmcmVzaGVkJykge1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2xvZ2luIGV2ZW50JywgZXZ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudCgpO1xuICAgICAgICBpZiAodGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZVJlcGxheUV2ZW50KFxuICAgICAgICAgICAgICAgIENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfUkVBRFksXG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2dpblxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuYXV0aGVudGljYXRpb25TZXR0aW5ncy5lbmFibGVTaWxlbnRSZWZyZXNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLnNldHVwQXV0b21hdGljU2lsZW50UmVmcmVzaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdjdXJyZW50VXJsJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdjdXJyZW50VXJsJywgdG9wLmxvY2F0aW9uLmhyZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudEFuZFRyeUxvZ2luKCkudGhlbihycyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd0Fub255bW91cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmluaXRMb2dpbkZsb3coKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFsbG93QW5vbnltb3VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5pbml0TG9naW5GbG93KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB04buVbmcgaOG7o3AgYmnhur9uIHBvc2l0aW9uXG4gICAgICAgIGlmICh0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdteWl0ZW0nKSkge1xuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZUV2ZW50KCdQT1NJVElPTl9MT0FERUQnLCB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdteWl0ZW0nKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBn4buNaSBhcGkgxJHhu4MgdOG7lW5nIGjhu6NwIGThu68gbGl1ZWplLi4uXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlRXZlbnQoJ1BPU0lUSU9OX0xPQURFRCcsIHt9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5qZWN0Q29uZmlnKGNmZzogQXV0aENvbmZpZykge1xuICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuY29uZmlndXJlKGNmZyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb25maWdBdXRoZW4oKSB7XG4gICAgICAgIGNvbnN0IGNmZyA9IHRoaXMuX2NvcmVDb25maWdTZXJ2aWNlLmdldEF1dGhDb25maWcoKTtcbiAgICAgICAgY29uc3QgdHlwZUxvZ2luID0gdGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmF1dGhlblR5cGU7XG4gICAgICAgIGlmICh0eXBlTG9naW4gJiYgdHlwZUxvZ2luLmluY2x1ZGVzKCdpbXBsaWNpdCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2ZnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2ZnLnJlc3BvbnNlVHlwZSA9ICdjb2RlJztcbiAgICAgICAgICAgIHJldHVybiBjZmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVNZW51QWN0aXZlKHRvcCkge1xuICAgICAgICB0aGlzLnNjcm9sbEJhck1lbnUuc2Nyb2xsVG9Ub3AodG9wKTtcbiAgICB9XG5cbiAgICBxdWlja05vdGVEcm9wcGVkKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3F1aWNrTm90ZUJ0TG9jYXRpb24nLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBib3R0b206ICh3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LnRvcCAtIDUwKSwgcmlnaHQ6ICh3aW5kb3cuaW5uZXJXaWR0aCAtIHJlY3QubGVmdCAtIDUwKVxuICAgICAgICB9KSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVNb3ZpbmcgPSBmYWxzZTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICB9XG5cbiAgICBxdWlja05vdGVTdGFydGVkKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucXVpY2tOb3RlTW92aW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBxdWlja05vdGVQcmVzcyhldmVudCkge1xuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnF1aWNrTm90ZVByZXNzaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5xdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKHRydWUpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmVPbmNlKENvbUN0eENvbnN0YW50cy5ST09ULkJPRFlfTU9VU0VfRE9XTiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5xdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcXVpY2tOb3RlUHJlc3NVcChldmVudCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucXVpY2tOb3RlUHJlc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICB9XG5cbiAgICBxdWlja05vdGVBZGROb3RlKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucXVpY2tOb3RlTW92aW5nXG4gICAgICAgICAgICAmJiAhdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVQcmVzc2luZykge1xuICAgICAgICAgICAgdGhpcy5xdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEubm90ZURhdGFNb2RlbCA9IDxhbnk+e1xuICAgICAgICAgICAgICAgIGVkaXRGb3JtTW9kZWw6IDxhbnk+eyBzaG93UXVpY2tOb3RlRm9ybTogdHJ1ZSwgcG9wdXBTaXplOiA8YW55Pnt9LCBkYXRhOiA8YW55Pnt9IH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmVkaXRGb3JtTW9kZWwuc2hvd1F1aWNrTm90ZUZvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tOb3RlU2hvd0FsbE5vdGVzKCkge1xuICAgICAgICB0aGlzLnF1aWNrTm90ZVRvZ2dsZVN1YkJ1dHRvbnMoZmFsc2UpO1xuICAgICAgICB0b3AubG9jYXRpb24uaHJlZiA9IGAke3RoaXMuZ2V0QXBwU3dpdGNoZXJVcmwoJ3VzZXInKX0vbWFpbi9xdWljay1ub3RlYDtcbiAgICB9XG5cbiAgICBxdWlja05vdGVTaG93U2V0dGluZ3MoKSB7XG4gICAgICAgIHRoaXMucXVpY2tOb3RlVG9nZ2xlU3ViQnV0dG9ucyhmYWxzZSk7XG4gICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gYCR7dGhpcy5nZXRBcHBTd2l0Y2hlclVybCgndXNlcicpfS9tYWluL3BlcnNvbmFsaXplYDtcbiAgICB9XG5cbiAgICBxdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKHNob3cpIHtcbiAgICAgICAgaWYgKHNob3cpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0MS5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzU1cHgnO1xuICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQyLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSAnMTAwcHgnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdDEubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9ICc2NXB4JztcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Mi5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzEyMHB4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQxLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSAnNXB4JztcbiAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQyLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSAnNXB4JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBpbm5lZCBOb3RlXG4gICAgZ2V0UGlubmVkTm90ZXMoKSB7XG5cblxuICAgIH1cblxuICAgIHBpbm5lZE5vdGVzRHJvcHBlZChldmVudCkge1xuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdwaW5uZWROb3Rlc0xvY2F0aW9uJywgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgYm90dG9tOiAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC50b3AgLSByZWN0LmhlaWdodCksXG4gICAgICAgICAgICBsZWZ0OiAocmVjdC5sZWZ0KSxcbiAgICAgICAgICAgIG1pbmltaXplOiB0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXNcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5waW5uZWROb3Rlc01vdmluZyA9IGZhbHNlO1xuICAgICAgICB9LCA1MDApO1xuICAgIH1cblxuICAgIHBpbm5lZE5vdGVzU3RhcnRlZChldmVudCkge1xuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnBpbm5lZE5vdGVzTW92aW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwaW5uZWROb3Rlc01pbmltaXplKGRhdGE6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5waW5uZWROb3Rlc01pbmltaXplU3RhdHVzID0gIWRhdGE7XG5cbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgncGlubmVkTm90ZXNMb2NhdGlvbicsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLFxuICAgICAgICAgICAgbGVmdDogKHJlY3QubGVmdCksXG4gICAgICAgICAgICBtaW5pbWl6ZTogdGhpcy5waW5uZWROb3Rlc01pbmltaXplU3RhdHVzXG4gICAgICAgIH0pKTtcblxuICAgICAgICBpZiAodGhpcy5waW5uZWROb3RlRGF0YSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9PSB0cnVlKSB7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnBpbm5lZE5vdGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS50aXRsZVBhZGRpbmdCb3R0b20gPSAnMHB4JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLmNvbnRlbnREaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucGlubmVkTm90ZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLnRpdGxlUGFkZGluZ0JvdHRvbSA9ICc2cHgnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0uY29udGVudERpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVuUGluTm90ZShyb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgcm93RGF0YS5pc1Bpbm5lZCA9IGZhbHNlO1xuXG4gICAgfVxuXG4gICAgY29tcGxldGVOb3RlKHJvd0RhdGE6IGFueSkge1xuICAgICAgICByb3dEYXRhLmlzQ29tcGxldGVkID0gdHJ1ZTtcblxuICAgIH1cblxuICAgIGluQ29tcGxldGVOb3RlKHJvd0RhdGE6IGFueSkge1xuICAgICAgICByb3dEYXRhLmlzQ29tcGxldGVkID0gZmFsc2U7XG5cbiAgICB9XG5cbiAgICBjbG9zZVRhYldpbmRvdygpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2Nsb3NlVGFiV2luZG93Jyk7XG4gICAgfVxuXG4gICAgZ2V0QXBwU3dpdGNoZXJVcmwoYXBwQ29kZSkge1xuICAgICAgICBjb25zdCBhcHAgPSB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLmFwcFN3aXRjaGVyLmZpbmQoeCA9PiB4LmNvZGUudG9Mb3dlckNhc2UoKSA9PSBhcHBDb2RlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoYXBwKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwLnVybDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB1c2UtbGlmZS1jeWNsZS1pbnRlcmZhY2VcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5ERVNUUk9ZX1RBU0tfREVUQUlMX0NPTVBPTkVOVCk7XG4gICAgfVxuXG4gICAgLy8gc2VhcmNoIG1lbnVcbiAgICBvblNlYXJjaE1lbnUoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hNZW51UmVzdWx0ID0gW107XG5cbiAgICAgICAgaWYgKCFldmVudCB8fCAhZXZlbnQucXVlcnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VhcmNoTWVudVJlc3VsdCA9IHRoaXMuZ2V0U2VhcmNoTWVudVJlc3VsdChldmVudC5xdWVyeSk7XG4gICAgfVxuXG4gICAgZ2V0U2VhcmNoTWVudVJlc3VsdChrZXl3b3JkKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIHRoaXMucmVncm91cFNlYXJjaE1lbnVSZXN1bHQoa2V5d29yZCwgdGhpcy5tZW51TW9kZWwsIHJlc3VsdCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ3JvdXBTZWFyY2hNZW51UmVzdWx0KGtleXdvcmQ6IHN0cmluZywgbGlzdFRvR2V0OiBhbnlbXSwgbGlzdFRvUHVzaDogYW55W10pIHtcbiAgICAgICAgbGlzdFRvR2V0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5pdGVtcyAmJiBpdGVtLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVncm91cFNlYXJjaE1lbnVSZXN1bHQoa2V5d29yZCwgaXRlbS5pdGVtcywgbGlzdFRvUHVzaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgodGhpcy5ub25BY2NlbnRWaWV0bmFtZXNlKGl0ZW0ubGFiZWwpLmluZGV4T2YodGhpcy5ub25BY2NlbnRWaWV0bmFtZXNlKGtleXdvcmQpKSA+PSAwKSkge1xuICAgICAgICAgICAgICAgIGxpc3RUb1B1c2gucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBub25BY2NlbnRWaWV0bmFtZXNlKHN0cikge1xuICAgICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgLy8gICAgIFdlIGNhbiBhbHNvIHVzZSB0aGlzIGluc3RlYWQgb2YgZnJvbSBsaW5lIDExIHRvIGxpbmUgMTdcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEUwfFxcdTAwRTF8XFx1MUVBMXxcXHUxRUEzfFxcdTAwRTN8XFx1MDBFMnxcXHUxRUE3fFxcdTFFQTV8XFx1MUVBRHxcXHUxRUE5fFxcdTFFQUJ8XFx1MDEwM3xcXHUxRUIxfFxcdTFFQUZ8XFx1MUVCN3xcXHUxRUIzfFxcdTFFQjUvZywgXCJhXCIpO1xuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRTh8XFx1MDBFOXxcXHUxRUI5fFxcdTFFQkJ8XFx1MUVCRHxcXHUwMEVBfFxcdTFFQzF8XFx1MUVCRnxcXHUxRUM3fFxcdTFFQzN8XFx1MUVDNS9nLCBcImVcIik7XG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDBFQ3xcXHUwMEVEfFxcdTFFQ0J8XFx1MUVDOXxcXHUwMTI5L2csIFwiaVwiKTtcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEYyfFxcdTAwRjN8XFx1MUVDRHxcXHUxRUNGfFxcdTAwRjV8XFx1MDBGNHxcXHUxRUQzfFxcdTFFRDF8XFx1MUVEOXxcXHUxRUQ1fFxcdTFFRDd8XFx1MDFBMXxcXHUxRUREfFxcdTFFREJ8XFx1MUVFM3xcXHUxRURGfFxcdTFFRTEvZywgXCJvXCIpO1xuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRjl8XFx1MDBGQXxcXHUxRUU1fFxcdTFFRTd8XFx1MDE2OXxcXHUwMUIwfFxcdTFFRUJ8XFx1MUVFOXxcXHUxRUYxfFxcdTFFRUR8XFx1MUVFRi9nLCBcInVcIik7XG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MUVGM3xcXHUwMEZEfFxcdTFFRjV8XFx1MUVGN3xcXHUxRUY5L2csIFwieVwiKTtcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMTExL2csIFwiZFwiKTtcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL8OgfMOhfOG6oXzhuqN8w6N8w6J84bqnfOG6pXzhuq184bqpfOG6q3zEg3zhurF84bqvfOG6t3zhurN84bq1L2csICdhJyk7XG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DqHzDqXzhurl84bq7fOG6vXzDqnzhu4F84bq/fOG7h3zhu4N84buFL2csICdlJyk7XG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DrHzDrXzhu4t84buJfMSpL2csICdpJyk7XG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DsnzDs3zhu4184buPfMO1fMO0fOG7k3zhu5F84buZfOG7lXzhu5d8xqF84budfOG7m3zhu6N84buffOG7oS9nLCAnbycpO1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvw7l8w7p84bulfOG7p3zFqXzGsHzhu6t84bupfOG7sXzhu6184buvL2csICd1Jyk7XG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/hu7N8w7184bu1fOG7t3zhu7kvZywgJ3knKTtcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL8SRL2csICdkJyk7XG4gICAgICAgIC8vIFNvbWUgc3lzdGVtIGVuY29kZSB2aWV0bmFtZXNlIGNvbWJpbmluZyBhY2NlbnQgYXMgaW5kaXZpZHVhbCB1dGYtOCBjaGFyYWN0ZXJzXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMzAwfFxcdTAzMDF8XFx1MDMwM3xcXHUwMzA5fFxcdTAzMjMvZywgJycpOyAvLyBIdXnhu4FuIHPhuq9jIGjhu49pIG5nw6MgbuG6t25nXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMkM2fFxcdTAzMDZ8XFx1MDMxQi9nLCAnJyk7IC8vIMOCLCDDiiwgxIIsIMagLCDGr1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIG9uU2VsZWN0TWVudVN1Z2dlc3Rpb24obWVudUl0ZW1PYmopIHtcbiAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwobWVudUl0ZW1PYmoucm91dGVyTGluayk7XG4gICAgICAgIHRoaXMuc2VhcmNoTWVudUlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnNob3dQaW5uZWRNZW51ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25CbHVyU2VhcmNoTWVudUlucHV0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNTZWFyY2hNZW51SW5wdXRGb2N1cyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5pc0luUGlubmVkTWVudSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2hNZW51SW5wdXQgPSAnJztcbiAgICAgICAgdGhpcy5zaG93UGlubmVkTWVudSA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uRm9jdXNTZWFyY2hNZW51SW5wdXQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5pc1NlYXJjaE1lbnVJbnB1dEZvY3VzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93UGlubmVkTWVudSA9IHRydWU7XG4gICAgfVxuXG4gICAgc2VhcmNoSWNvbkNsaWNrKCkge1xuICAgICAgICBpZiAodGhpcy5fY29tbW9uU2VydmljZS5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZW51LWJ1dHRvbicpLmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlwcmVzcycsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlU2hvd1BvcHVwUGVybWlzc2lvblV0aWxzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmtleVByZXNzUGVybWlzc2lvblV0aWxzW3RoaXMuY3VycmVudEtleVByZXNzSW5kZXhdID09PSBldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4ID09IHRoaXMua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEtleVByZXNzSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMucm9vdERhdGEuc2hvd1Blcm1pc3Npb25VdGlscyA9IHRydWU7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEtleVByZXNzSW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEtleVByZXNzSW5kZXggPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRHdWFyZChyb3V0ZTogUm91dGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHJvdXRlLnBhdGggPT09ICcnIHx8IHJvdXRlLnBhdGggPT09ICcvJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJvdXRlLmxvYWRDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHJvdXRlLmNhbkFjdGl2YXRlQ2hpbGQgPSByb3V0ZS5jYW5BY3RpdmF0ZUNoaWxkID8gcm91dGUuY2FuQWN0aXZhdGVDaGlsZCA6IFtHZW5lcmljR3VhcmRDaGlsZFNlcnZpY2VdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcm91dGUuY2FuQWN0aXZhdGUgPSByb3V0ZS5jYW5BY3RpdmF0ZSA/IHJvdXRlLmNhbkFjdGl2YXRlIDogW0dlbmVyaWNHdWFyZFNlcnZpY2VdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
911
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWFwcC1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9jb21tb24tYXBwLWNvbXBvbmVudC9jb21tb24tYXBwLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFHSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFTLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEtBQUssTUFBTSxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTNGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVB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WUFoQjBCLGFBQWE7WUFzQmxELGNBQWM7WUFIZCxpQkFBaUI7WUFSakIsa0JBQWtCOzs7dUJBMEJ0QixTQUFTLFNBQUMsVUFBVTsyQkFDcEIsU0FBUyxTQUFDLGNBQWM7MEJBQ3hCLFNBQVMsU0FBQyxhQUFhOzJCQUN2QixTQUFTLFNBQUMsY0FBYzsyQkFDeEIsU0FBUyxTQUFDLGNBQWM7MEJBQ3hCLFNBQVMsU0FBQyxhQUFhOzBCQUN2QixTQUFTLFNBQUMsb0JBQW9COzRCQUM5QixTQUFTLFNBQUMsV0FBVzt1QkFDckIsWUFBWSxTQUFDLFdBQVc7NEJBRXhCLEtBQUs7NkJBQ0wsS0FBSzs2QkFDTCxLQUFLOzJCQUVMLE1BQU07NkNBNDVCTixZQUFZLFNBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25TdGFydCwgUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBdXRoQ29uZmlnLCBPQXV0aFNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcbmltcG9ydCAqIGFzIEhhbW1lciBmcm9tICdoYW1tZXJqcyc7XG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgTWVzc2FnZVNlcnZpY2UsIFByaW1lTkdDb25maWcgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xuXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcbmltcG9ydCB7IEVudW1BcHBTd2l0Y2hlckNvZGUsIEVudW1UeXBlU3BsYXNoLCBFbnVtVXNlclNvdXJjZSB9IGZyb20gJy4uLy4uL2VudW1zL2NvbW1vbic7XG5pbXBvcnQgeyBDb21tYW5kVHlwZSwgVG5DbGllbnRDb21tYW5kIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RuLWNsaWVudC1jb21tYW5kJztcbmltcG9ydCB7IEF1dGhlblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoZW4uc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29yZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb3JlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXN0b20tcm91dGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9taXplVWlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3VzdG9taXplLXVpLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW50aXR5TWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LW1ldGFkYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2VuZXJpY0d1YXJkQ2hpbGRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ2VuZXJpYy1ndWFyZC1jaGlsZC5zZXJ2aWNlJztcbmltcG9ydCB7IEdlbmVyaWNHdWFyZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nZW5lcmljLWd1YXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcbmltcG9ydCB7IE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZSc7XG5pbXBvcnQgeyBTaWduYWxSU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NpZ25hbHIuc2VydmljZSc7XG5pbXBvcnQgeyBTdG9yYWdlVXBkYXRlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLXVwZGF0ZWQuc2VydmljZSc7XG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBUbkNsaWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90bi1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRRdWV1ZUNvbXBvbmVudCB9IGZyb20gJy4uL3JlcG9ydC1xdWV1ZS9yZXBvcnQtcXVldWUuY29tcG9uZW50JztcbmltcG9ydCB7IFRuQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vdG4tY3VzdG9tLXNjcm9sbGJhci90bi1jdXN0b20tc2Nyb2xsYmFyLmNvbXBvbmVudCc7XG5cbmRlY2xhcmUgbGV0IHRpbnltY2U6IGFueTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjb21tb24tYXBwLWNvbXBvbmVudCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbW1vbi1hcHAtY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NvbW1vbi1hcHAtY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZSwgRW50aXR5TWV0YWRhdGFTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBDb21tb25BcHBDb21wb25lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgQFZpZXdDaGlsZCgnb2tCdXR0b24nKSBva0J1dHRvbjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdjYW5jZWxCdXR0b24nKSBjYW5jZWxCdXR0b246IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgncXVpY2tOb3RlQnQnKSBxdWlja05vdGVCdDogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdxdWlja05vdGVCdDEnKSBxdWlja05vdGVCdDE6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgncXVpY2tOb3RlQnQyJykgcXVpY2tOb3RlQnQyOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3Bpbm5lZE5vdGVzJykgcGlubmVkTm90ZXM6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZChSZXBvcnRRdWV1ZUNvbXBvbmVudCkgcmVwb3J0UXVldWU6IFJlcG9ydFF1ZXVlQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ3Njcm9sbGJhcicpIHNjcm9sbEJhck1lbnU6IFRuQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGRyZW4oVGVtcGxhdGVSZWYpIGNoaWxkcmVuOiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBASW5wdXQoKSBzaG93UXVpY2tOb3RlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBhbGxvd0Fub255bW91cyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGF1dG9SZW5kZXJNZW51ID0gdHJ1ZTtcblxuICAgIEBPdXRwdXQoKSBvblVzZXJMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuXG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVBbGw6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICAvLyByb290VmVyc2lvbkRlcGxveSA9ICcxLjMnO1xuICAgIGN1cnJlbnRSb3V0ZSA9ICcnO1xuICAgIHBhZ2VMb2FkZWQgPSBmYWxzZTtcbiAgICBmaXJzdFRpbWVMb2dpbiA9IGZhbHNlO1xuICAgIHNob3dBZGROb3RlRm9ybSA9IGZhbHNlO1xuICAgIHBpbm5lZE5vdGVEYXRhOiBhbnk7XG4gICAgcGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9IGZhbHNlO1xuICAgIHBpbm5lZE5vdGVzTWF4aW1pemVTdGF0dXMgPSBudWxsO1xuICAgIGVudmlyb25tZW50OiBhbnk7XG4gICAgY2FwdHVyZU1vZGUgPSBmYWxzZTtcbiAgICBwMDogYW55O1xuICAgIHAxOiBhbnk7XG4gICAgbG9nZ2VkSW4gPSBmYWxzZTtcbiAgICBzdWJzY3JpYmxlOiBTdWJzY3JpcHRpb247XG4gICAgb25seVNob3dNYWluQ29udGVudCA9IGZhbHNlO1xuXG4gICAgYXBwQ29kZSA9ICcnO1xuXG4gICAgc2VhcmNoTWVudVJlc3VsdDogYW55W107XG4gICAgc2VhcmNoTWVudUlucHV0OiBzdHJpbmc7XG5cbiAgICBzaG93UGlubmVkTWVudSA9IGZhbHNlO1xuICAgIGlzSW5QaW5uZWRNZW51ID0gZmFsc2U7XG4gICAgaXNTZWFyY2hNZW51SW5wdXRGb2N1cyA9IGZhbHNlO1xuICAgIG1lbnVNb2RlbDogYW55O1xuICAgIHdhaXRpbmcgPSBmYWxzZTtcbiAgICBtZXNzYWdlV2FpdGluZzogc3RyaW5nW10gPSBbXTtcbiAgICBzaG93UmVqZWN0Q29uZmlybSA9IHRydWU7XG5cbiAgICByZWFkb25seSBrZXlQcmVzc1Blcm1pc3Npb25VdGlscyA9ICdwcHBwcHBwcHAnO1xuICAgIGN1cnJlbnRLZXlQcmVzc0luZGV4ID0gMDtcbiAgICByb290RGF0YTogYW55O1xuXG4gICAgRW51bVR5cGVTcGxhc2ggPSBFbnVtVHlwZVNwbGFzaDtcbiAgICBsYXlvdXRMb2FkaW5nUGFnZTogc3RyaW5nID0gRW51bVR5cGVTcGxhc2guTkVXX1YxO1xuICAgIGZhdkljb246IEhUTUxMaW5rRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2FwcEZhdmljb24nKTtcbiAgICBpY29uID0gJyc7XG4gICAgc2hvd01lbnVJY29uSW5hY3RpdmUgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50LFxuICAgICAgICBwdWJsaWMgX2dsb2JhbFNlcnZpY2U6IEdsb2JhbFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9vYXV0aFNlcnZpY2U6IE9BdXRoU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfYXV0aGVuU2VydmljZTogQXV0aGVuU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBfdGl0bGU6IFRpdGxlLFxuICAgICAgICBwcml2YXRlIF9zaWduYWxSU2VydmljZTogU2lnbmFsUlNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3N0b3JhZ2VVcGRhdGVkU2VydmljZTogU3RvcmFnZVVwZGF0ZWRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jdXN0b21Sb3V0ZVNlcnZpY2U6IEN1c3RvbVJvdXRlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2FwcGxpY2F0aW9uQ29udGV4dDogQXBwbGljYXRpb25Db250ZXh0U2VydmljZSxcbiAgICAgICAgcHVibGljIF9jb21wb25lbnRDb250ZXh0U2VydmljZTogQ29tcG9uZW50Q29udGV4dFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHVibGljIF9kZXZpY2VEZXRlY3RvclNlcnZpY2U6IERldmljZURldGVjdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF90bkNsaWVudFNlcnZpY2U6IFRuQ2xpZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY29yZUNvbmZpZ1NlcnZpY2U6IENvcmVDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9lbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jb25maXJtU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9wcmltZW5nQ29uZmlnOiBQcmltZU5HQ29uZmlnLFxuICAgICAgICBwcml2YXRlIF9zdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3Blcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY3VzdG9taXplVWlTZXJ2aWNlOiBDdXN0b21pemVVaVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQ7XG4gICAgICAgIHRoaXMuYXBwQ29kZSA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwQ29kZTtcbiAgICAgICAgdGhpcy5pY29uID0gdGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5tYWluLmZhdmljb247XG4gICAgICAgIGlmICh0aGlzLmZhdkljb24pIHtcbiAgICAgICAgICAgIHRoaXMuZmF2SWNvbi5ocmVmID0gdGhpcy5pY29uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmtleVByZXNzUGVybWlzc2lvblV0aWxzKSB7XG4gICAgICAgICAgICB0aGlzLmtleVByZXNzUGVybWlzc2lvblV0aWxzID0gdGhpcy5lbnZpcm9ubWVudC5rZXlQcmVzc1Blcm1pc3Npb25VdGlscztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnN0b3JhZ2UgPT09ICdzZXNzaW9uU3RvcmFnZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldFN0b3JhZ2Uoc2Vzc2lvblN0b3JhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0U3RvcmFnZShsb2NhbFN0b3JhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcHJpbWVuZ0NvbmZpZy5zZXRUcmFuc2xhdGlvbih7XG4gICAgICAgICAgICBkYXlOYW1lczogWydDaOG7pyBuaOG6rXQnLCAnVGjhu6kgMicsICdUaOG7qSAzJywgJ1Ro4bupIDQnLCAnVGjhu6kgNScsICdUaOG7qSA2JywgJ1Ro4bupIDcnXSxcbiAgICAgICAgICAgIGRheU5hbWVzU2hvcnQ6IFsnQ04nLCAnVGgyJywgJ1RoMycsICdUaDQnLCAnVGg1JywgJ1RoNicsICdUaDcnXSxcbiAgICAgICAgICAgIGRheU5hbWVzTWluOiBbJ0NOJywgJ1RoMicsICdUaDMnLCAnVGg0JywgJ1RoNScsICdUaDYnLCAnVGg3J10sXG4gICAgICAgICAgICBtb250aE5hbWVzOiBbXG4gICAgICAgICAgICAgICAgJ1Row6FuZyAxJywgJ1Row6FuZyAyJywgJ1Row6FuZyAzJywgJ1Row6FuZyA0JywgJ1Row6FuZyA1JywgJ1Row6FuZyA2JywgJ1Row6FuZyA3JywgJ1Row6FuZyA4JywgJ1Row6FuZyA5JywgJ1Row6FuZyAxMCcsICdUaMOhbmcgMTEnLCAnVGjDoW5nIDEyJ1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1vbnRoTmFtZXNTaG9ydDogWydUMScsICdUMicsICdUMycsICdUNCcsICdUNScsICdUNicsICdUNycsICdUOCcsICdUOScsICdUMTAnLCAnVDExJywgJ1QxMiddLFxuICAgICAgICAgICAgdG9kYXk6ICdIw7RtIG5heScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmN1c3RvbWl6ZVVpKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXN0b21pemVVaVNlcnZpY2Uuc2V0Q3VzdG9taXplKHRoaXMuZW52aXJvbm1lbnQuY3VzdG9taXplVWkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNldFNlcnZpY2Uoe1xuICAgICAgICAvLyAgICAgZW52OiB0aGlzLmVudmlyb25tZW50LFxuICAgICAgICAvLyAgICAgdHJhbnNsYXRlU2VydmljZTogdGhpcy5fdHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgLy8gICAgIG1lc3NhZ2VTZXJ2aWNlOiBfbWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIC8vICAgICBjb25maXJtU2VydmljZTogX2NvbmZpcm1TZXJ2aWNlXG4gICAgICAgIC8vIH0pO1xuXG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5hZGRSb290Q29udGV4dChcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLFxuICAgICAgICAgICAgX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3RpdGxlLnNldFRpdGxlKHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi5vd25lcik7XG5cbiAgICAgICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcoJ3ZuJyk7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZSgndm4nKTtcblxuICAgICAgICB0aGlzLmluaXRUaW55TWNlKCk7XG5cbiAgICAgICAgY29uc3QgY2ZnID0gdGhpcy5nZXRDb25maWdBdXRoZW4oKTtcbiAgICAgICAgLy8gQ2h1eeG7g24gc2FuZyBzZXNzaW9uIHN0b3JhZ2UsIG7hur91IOG7lW4gdGjDrCB4w7NhIGTDsm5nIG7DoHkgxJFpXG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5zZXRTdG9yYWdlKHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldFN0b3JhZ2UoKSk7XG4gICAgICAgIHRoaXMuaW5qZWN0Q29uZmlnKGNmZyk7XG5cbiAgICAgICAgdGhpcy5jb25maWd1cmVXaXRoTmV3Q29uZmlnQXBpKCk7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5wZXJzb25hbGl6ZSA9IHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldE9iamVjdEFueSgncGVyc29uYWxpemUnKTtcbiAgICAgICAgaWYgKCF0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplKSB7XG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplID0ge307XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dNZW51SWNvbkluYWN0aXZlID0gdGhpcy5lbnZpcm9ubWVudC5zaG93TWVudUljb25JbmFjdGl2ZSA/PyBmYWxzZTtcblxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5yZXBsYXlTdWJzY3JpYmUoXG4gICAgICAgICAgICBDb21DdHhDb25zdGFudHMuUk9PVC5VU0VSX0xPQURFRCxcbiAgICAgICAgICAgIGFzeW5jIChyczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlLnNldHVwU3luY0NhY2hlRW50aXR5TWV0YWRhdGEoKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3JvdXRlci5jb25maWcuZm9yRWFjaChyb3V0ZSA9PiB0aGlzLmFkZEd1YXJkKHJvdXRlKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hlY2tGaXJzdExvZ2luID0gdGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmlzQ2hlY2tGaXJzdFRpbWVMb2dpbiAmJiB0aGlzLnJvb3REYXRhLmN1cnJlbnRVc2VyLmlzRmlyc3RMb2dpbjtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVja0V4cGlyYXRpb25QYXNzd29yZCA9IHRoaXMucm9vdERhdGEuY3VycmVudFVzZXIuaXNFeHBpcmF0aW9uUGFzc3dvcmQ7XG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrRmlyc3RMb2dpbiB8fCBjaGVja0V4cGlyYXRpb25QYXNzd29yZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkb21haW4gPSB0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpbi5hcHBEb21haW47XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdWJQYXRoID0gJy91c2VyJztcbiAgICAgICAgICAgICAgICAgICAgLy8gdsOsIERIR1RWVCBkw7luZyDEkeG7k25nIHRo4budaSB1c2VydjUgdsOgIHVzZXJ2NFxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5tYVRydW9uZyA9PSAnREhHVFZUJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ViUGF0aCA9ICcvdXNlcnY1JztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5rUmVkaXJlY3QgPSBgJHtkb21haW59JHtzdWJQYXRofS9jaGFuZ2UtcGFzc3dvcmRgO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kb2N1bWVudC5sb2NhdGlvbi5ocmVmICE9IGxpbmtSZWRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrRmlyc3RMb2dpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0oJ0LhuqFuIHZ1aSBsw7JuZyDEkeG7lWkgbeG6rXQga2jhuql1IG3hurdjIMSR4buLbmggdHJvbmcgbOG6p24gxJHEg25nIG5o4bqtcCDEkeG6p3UgdGnDqm4gxJHhu4MgdMSDbmcgdMOtbmggYuG6o28gbeG6rXQgY+G7p2EgaOG7hyB0aOG7kW5nIScpLnRoZW4oYXN5bmMgKHJzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl91c2VyU2VydmljZS5jaGFuZ2VGaXJzdFRpbWVMb2dpbih0aGlzLnJvb3REYXRhLmN1cnJlbnRVc2VyLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfSU5GT19DSEFOR0VELCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSBsaW5rUmVkaXJlY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja0V4cGlyYXRpb25QYXNzd29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0oYE3huq10IGto4bqpdSDEkcOjIHF1w6EgJHt0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuZXhwaXJhdGlvblBhc3N3b3JkTW9udGggPz8gNn0gdGjDoW5nIGNoxrBhIHRoYXkgxJHhu5VpLiBC4bqhbiB2dWkgbMOybmcgxJHhu5VpIG3huq10IGto4bqpdSDEkeG7gyB0xINuZyB0w61uaCBi4bqjbyBt4bqtdCBj4bunYSBo4buHIHRo4buRbmchYCkudGhlbihhc3luYyAocnM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IGxpbmtSZWRpcmVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlyc3RUaW1lTG9naW4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbOG6p24gxJHhuqd1IMSRxINuZyBuaOG6rXAgdGjDrCB2w6BvIHRyYW5nIG3hurdjIMSR4buLbmhcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKHRoaXMucm9vdFZlcnNpb25EZXBsb3kpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3ZlcnNpb25EZXBsb3knLCB0aGlzLnJvb3RWZXJzaW9uRGVwbG95KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRow6ptIHbDoG8gxJHhu4MgxJHDoW5oIGThuqV1IGzhuqduIGThuqd1IGxvZ2luID0+IMSR4buDIHjhu60gbMO9XG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZXJBIMSRYWcg4bufIG3DoG4gaMOsbmggMSA9PiDEkcSDbmcgeHXhuqV0ID0+IMSRxINuZyBuaOG6rXAgdsOgbyB0w6BpIGtob+G6o24gVXNlckIga2jDtG5nIGPDsyBxdXnhu4FuIG3DoG4gaMOsbmggMSA9PiByZWRpcmVjdCB24buBIFwiL1wiXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRfdXNlcl9pbmZvJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ2ZpcnN0VGltZUxvZ2luJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZFVybCA9IHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2N1cnJlbnRVcmwnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAob2xkVXJsICYmIG9sZFVybCAhPSB0b3AubG9jYXRpb24uaHJlZiArICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdjdXJyZW50VXJsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AubG9jYXRpb24uaHJlZiA9IGAke29sZFVybH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2dpbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgnY3VycmVudFVybCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudD8udXNpbmdEZWZhdWx0UmVkaXJlY3RCeVNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcFN3aXRjaGVyID0gdGhpcy5lbnZpcm9ubWVudD8uYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyID8/IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvb3REYXRhLmN1cnJlbnRVc2VyLnNvdXJjZSA9PSBFbnVtVXNlclNvdXJjZS5IT0NfVklFTikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25nSG9jVmllbiA9IGFwcFN3aXRjaGVyLmZpbmQoeCA9PiB4LmNvZGUudG9VcHBlckNhc2UoKSA9PSBFbnVtQXBwU3dpdGNoZXJDb2RlLkNPTkdOR1VPSURVTkcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZ0hvY1ZpZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gYCR7Y29uZ0hvY1ZpZW4udXJsfS8ke2NvbmdIb2NWaWVuLmRlZmF1bHRSZWRpcmVjdH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRSZWRpcmVjdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHZhciB2ZXJzaW9uRGVwbG95ID0gdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgndmVyc2lvbkRlcGxveScpO1xuICAgICAgICAgICAgICAgIC8vIGxldCB2ZXJzaW9uRnJvbUFwcGxpY2F0aW9uID0gdGhpcy5yb290VmVyc2lvbkRlcGxveTtcbiAgICAgICAgICAgICAgICAvLyBpZiAodmVyc2lvbkZyb21BcHBsaWNhdGlvbiAmJiB2ZXJzaW9uRGVwbG95ICYmICgrdmVyc2lvbkRlcGxveSkgPCAoK3ZlcnNpb25Gcm9tQXBwbGljYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3ZlcnNpb25EZXBsb3knLCB2ZXJzaW9uRnJvbUFwcGxpY2F0aW9uKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmdldFBpbm5lZE5vdGVzKCk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsUlNlcnZpY2UuaW5pdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsUlNlcnZpY2Uuc3RhcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNpc3RlbmN5SHViJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQnJvYWRjYXN0TWVzc2FnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckF1dGhvcml6ZUNhY2hlLmJpbmQodGhpcylcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZ25hbFJTZXJ2aWNlLnN0YXJ0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOb3RpZmljYXRpb25IdWInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZWZyZXNoRm9yVXBkYXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuYXBwQ29kZXMgJiYgZGF0YS5hcHBDb2Rlcy5zb21lKHggPT4geC50b1VwcGVyQ2FzZSgpID09IHRoaXMuYXBwQ29kZS50b1VwcGVyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5DT01NT04uRk9SQ0VfUkVMT0FEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBkZWZhdWx0TW9kdWxlUGFnZXMgPSB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplLmRlZmF1bHRNb2R1bGVQYWdlcztcbiAgICAgICAgaWYgKGRlZmF1bHRNb2R1bGVQYWdlcyAmJiBkZWZhdWx0TW9kdWxlUGFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLmFwcFN3aXRjaGVyLmZvckVhY2gobSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZSA9IGRlZmF1bHRNb2R1bGVQYWdlcy5maW5kKHAgPT4gcC5jb2RlID09IG0uY29kZSk7XG4gICAgICAgICAgICAgICAgaWYgKHBhZ2UgJiYgcGFnZS5kZWZhdWx0UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICBtLnVybCA9IHBhZ2UuZGVmYXVsdFBhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XG4gICAgICAgICAgICBkZWxldGUgSGFtbWVyLmRlZmF1bHRzLmNzc1Byb3BzLnVzZXJTZWxlY3Q7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoJ1FVSUNLX05PVEVfUE9QVVAuQ0xPU0VfUE9QVVAnLCByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmVkaXRGb3JtTW9kZWwuc2hvd1F1aWNrTm90ZUZvcm0gPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKCdHT19IT01FJywgZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycpO1xuICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gdHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKCdUT0dHTEVfTEFZT1VUJywgZGF0YSA9PiB7XG4gICAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5vbmx5U2hvd01haW5Db250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSBkYXRhLm9ubHlTaG93TWFpbkNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZSgnTUFJTl9DT05URU5UX09OTFknLCBycyA9PiB7XG4gICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSBycztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlNIT1dfUkVKRUNUX0NPTkZJUk0sIGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UmVqZWN0Q29uZmlybSA9IGRhdGE7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXRoaXMuZW52aXJvbm1lbnQuc3BsYXNoU2NyZWVuIHx8IHRoaXMuZW52aXJvbm1lbnQuc3BsYXNoU2NyZWVuID09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dExvYWRpbmdQYWdlID0gRW51bVR5cGVTcGxhc2guREVGQVVMVDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0TG9hZGluZ1BhZ2UgPSB0aGlzLmVudmlyb25tZW50LnNwbGFzaFNjcmVlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZvcmNlIGxvZ291dCBpZiBhY2Nlc3MgdG9rZW4gaXMgaXNzdWVkIGJlZm9yZSB0aW1lXG4gICAgICAgIC8vIHRoaXMuZm9yY2VMb2dvdXRJZkludmFsaWRhdGUoKTtcbiAgICAgICAgLy8gdGhpcy50ZW1wb3JhcnlGaXhFcnJvck5vdExvZ2dlZE91dCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hbU5IIEZpeCB04bqhbSDEkeG7gyB44butIGzDvSBs4buXaSDEkeG7mWkgaGVtaXMga2hpIMSRxINuZyB4deG6pXQgbmjGsG5nIGtow7RuZyBuaOG6o3kgxJHGsOG7o2Mgc2FuZyB0cmFuZyDEkcSDbmcgbmjhuq1wLCBz4bq9IHTDrG0gaGnhu4N1IHbDoCB44butIGzDvSB0cmnhu4d0IMSR4buDIHNhdVxuICAgICAqL1xuICAgIHByaXZhdGUgdGVtcG9yYXJ5Rml4RXJyb3JOb3RMb2dnZWRPdXQoKSB7XG4gICAgICAgIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjY2VzVG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYWNjZXNzX3Rva2VuJyk7XG4gICAgICAgICAgICBpZiAoIWFjY2VzVG9rZW4gJiYgdG9wLmxvY2F0aW9uLmhyZWYuaW5kZXhPZignP2NvZGU9JykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3RlbXBvcmFyeSBmaXggZXJyb3Igbm90IGxvZ2dlZCBvdXQgYnkgYXV0byByZWZyZXNoIGlmIG5vdCBoYXZlIGFjY2VzcyB0b2tlbicpO1xuICAgICAgICAgICAgICAgIHRvcC5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMCk7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIGZvcmNlTG9nb3V0SWZJbnZhbGlkYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NoZWNrIGxvZ2ljIGludmFsaWRhdGUgYWNjZXNzdG9rZW4gYnkgY29uZmlndXJhdGlvbiEnKTtcbiAgICAgICAgICAgIGNvbnN0IGRlb2NvZGVkID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Snd0RGVjb2RlZCgpO1xuICAgICAgICAgICAgY29uc3QgbmJmID0gZGVvY29kZWRbJ25iZiddO1xuICAgICAgICAgICAgY29uc3QgbmJmQ29uZmlnID0gdGhpcy5lbnZpcm9ubWVudC5uYmY7XG4gICAgICAgICAgICAvLyBO4bq/dSB0aOG7nWkgZ2lhbiBub3QgYmVmb3JlIHRyb25nIGPhuqV1IGjDrG5oIG3DoCBs4bubbiBoxqFuIG5vdCBiZWZvcmUgdHJvbmcgYWNjZXNzIHRow6wgbG9nb3V0IChsb2dvdXQgdOG6pXQgY+G6oyBjw6FjIGFjY2VzcyB0b2tlbiDEkcaw4bujYyBj4bqlcCB0csaw4bubYyB0aOG7nWkgxJFp4buDbSB0cm9uZyBj4bqldSBow6xuaClcbiAgICAgICAgICAgIGlmIChuYmZDb25maWcgJiYgbmJmQ29uZmlnID4gbmJmKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3Rva2VuIGlzIGludmFsaWQsIHJlbG9hZCBicm93c2VyIG5vdyEnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0jhu4cgdGjhu5FuZyB24burYSBj4bqtcCBuaOG6rXQgcGhpw6puIGLhuqNuIG3hu5tpLCBz4bq9IGto4bufaSDEkeG7mW5nIGzhuqFpIHNhdSAycycpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBoYXJkIHJlbG9hc2QgZm9yY2UgbG9nb3V0XG4gICAgICAgICAgICAgICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gJy91c2VyL21haW4vZm9yY2UtdXNlci1sb2dvdXQnO1xuICAgICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3VzZXIgaXMgdmFsaWQhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIFNldCBkeW5hbWljIGFsbCBjaGlsZHJlblxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBjb25zdCByb290ID0gdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCk7XG4gICAgICAgIHRoaXMucm9vdERhdGEgPSByb290LmRhdGE7XG4gICAgICAgIHJvb3QuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEgPSB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLmFwcFN3aXRjaGVyLmZpbmQoeCA9PiB4LmNvZGUudG9Mb3dlckNhc2UoKSA9PSB0aGlzLmFwcENvZGUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHJvb3QuZGF0YS5hcHBPcmlnaW4gPSB0aGlzLmVudmlyb25tZW50LmVuYWJsZUJhc2VIcmVmID8gYC8ke3Jvb3QuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEuY29kZS50b0xvd2VyQ2FzZSgpfS9gIDogJy8nO1xuICAgICAgICByb290LmRhdGEuYWxsb3dBbm9ueW1vdXMgPSB0aGlzLmFsbG93QW5vbnltb3VzO1xuICAgICAgICAvLyBnZXQgY3VycmVudCBVc2VyXG4gICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlLnBvcHVsYXRlQ3VycmVudFVzZXIoKTtcbiAgICAgICAgdGhpcy5vblVzZXJMb2FkZWQuZW1pdCgpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuTkVFRF9DTEVBUl9QRVJNSVNTSU9OX0NBQ0hFLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5jbGVhclBlcm1pc3Npb25DYWNoZShbXSk7XG4gICAgICAgICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgdHJvbmcgbMO6YyBjbGVhciBjYWNoZSBwaMOibiBxdXnhu4FuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5nZXRBbGxCYXNlUGVybWlzc2lvbigpO1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZmlyZVJlcGxheUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfTE9BREVEKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9BUlJPV0xFRlQsIChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuS0VZX0RPV05fQVJST1dSSUdIVCwgKGUpID0+IHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmNhbmNlbEJ1dHRvbi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlBFUlNPTkFMSVpFX1VQREFURUQsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YS5zaG93UXVpY2tOb3RlQnV0dG9uT25TY3JlZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gc2VuZCBjdXJyZW50IHZlcnNpb24gdG8gdG4gY2xpZW50XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdG5DbGllbnRTZXJ2aWNlLnNlbmRDb21tYW5kKDxUbkNsaWVudENvbW1hbmQ+e1xuICAgICAgICAgICAgICAgIGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5TeW5jVmVyaW9uVG5DbGllbnQsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLmVudmlyb25tZW50LnNpZ25hbHIudmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQ6IHRoaXMuZW52aXJvbm1lbnQuY2xpZW50RG9tYWluLmFwcERvbWFpbiArICcvJyArIHRoaXMuZW52aXJvbm1lbnQuc2lnbmFsci5lbmRwb2ludFVwZGF0ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAga2V5OiB0aGlzLmVudmlyb25tZW50LnNpZ25hbHIuY2xpZW50S2V5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMTAwMCk7XG5cblxuICAgICAgICAvLyB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5DTE9TRV9FRElUX0ZPUk0sIChkYXRhKSA9PiB7XG4gICAgICAgIC8vICAgICB0aGlzLnNob3dBZGROb3RlRm9ybSA9IGZhbHNlO1xuICAgICAgICAvLyB9KTtcblxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5yZXBsYXlTdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuUVVJQ0tfTk9URV9QSU4sICgpID0+IHtcbiAgICAgICAgICAgIC8vIHNldCBwaW5uZWQgbm90ZSBsb2NhdGlvbiBhZnRlciBjbGljayBwaW5cbiAgICAgICAgICAgIGlmICh0aGlzLnBpbm5lZE5vdGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdwaW5uZWROb3Rlc0xvY2F0aW9uJywge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206ICh3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LnRvcCAtIHJlY3QuaGVpZ2h0KSxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogKHJlY3QubGVmdCksXG4gICAgICAgICAgICAgICAgICAgIG1pbmltaXplOiB0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBpbm5lZE5vdGVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnJlcGxheVN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5RVUlDS19OT1RFX1VOUElOLCAoKSA9PiB7XG4gICAgICAgICAgICAvLyBzZXQgcGlubmVkIG5vdGUgbG9jYXRpb24gYWZ0ZXIgY2xpY2sgdXBwaW5cbiAgICAgICAgICAgIGlmICh0aGlzLnBpbm5lZE5vdGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdwaW5uZWROb3Rlc0xvY2F0aW9uJywge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206ICh3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LnRvcCAtIHJlY3QuaGVpZ2h0KSxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogKHJlY3QubGVmdCksXG4gICAgICAgICAgICAgICAgICAgIG1pbmltaXplOiB0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBpbm5lZE5vdGVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZWRpdEZvcm1Nb2RlbCA9IFtdO1xuXG4gICAgICAgIC8vIHN1YnNjcmliZSBjaGFuZ2UgZW50aXR5IG1ldGFkYXRhXG4gICAgICAgIHRoaXMuX3N0b3JhZ2VVcGRhdGVkU2VydmljZS5zdWJzY3JpYmVDaGFuZ2VkTG9jYWxTdG9yYWdlKCdLRVlfRU5USVRZX01FVERBVEFfVVBEQVRFRCcsIChycykgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2VudGl0eSBtZXRhZGF0YSBjaGFuZ2VkJywgcnMpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyB0cmlnZ2VyIHVwZGF0ZSBzdG9yYWdlIGtleVxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuU0hPV19XQUlUX0JPWCwgZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLndhaXRpbmcgPSBkYXRhLnNob3c7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VXYWl0aW5nID0gWy4uLmRhdGEubWVzc2FnZV07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3JvdXRlci5ldmVudHMuc3Vic2NyaWJlKHggPT4ge1xuICAgICAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3REYXRhLmh0dHBSZXF1ZXN0TGlzdCA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBu4bq/dSBhbGxvdyBhbm9ueW1vdXMgdGjDrCBsb2FkIHJhIGPDoWMgcGjDom4gaOG7hyBjaG8gcGjDqXAgdsOgbyBraMO0bmcgY+G6p24gxJHEg25nIG5o4bqtcFxuICAgICAgICBpZiAodGhpcy5hbGxvd0Fub255bW91cykge1xuICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2dpbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XG5cbiAgICAgICAgICAgIHJvb3Quc3Vic2NyaWJlKCdMT0dJTicsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UubG9hZERpc2NvdmVyeURvY3VtZW50QW5kVHJ5TG9naW4oKS50aGVuKHJzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFsbG93QW5vbnltb3VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5fY2QuZGV0YWNoKCk7XG4gICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHF1aWNrTm90ZUJ0TG9jYXRpb24gPSB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRPYmplY3RBbnkoJ3F1aWNrTm90ZUJ0TG9jYXRpb24nKTtcbiAgICAgICAgICAgIGlmIChxdWlja05vdGVCdExvY2F0aW9uICYmIHRoaXMucXVpY2tOb3RlQnQpIHtcbiAgICAgICAgICAgICAgICBpZiAocXVpY2tOb3RlQnRMb2NhdGlvbi5ib3R0b20gPCB3aW5kb3cuaW5uZXJIZWlnaHQgLSA1MCAmJiBxdWlja05vdGVCdExvY2F0aW9uLnJpZ2h0IDwgd2luZG93LmlubmVyV2lkdGggLSA1MCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuYm90dG9tID0gcXVpY2tOb3RlQnRMb2NhdGlvbi5ib3R0b20gKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSBxdWlja05vdGVCdExvY2F0aW9uLnJpZ2h0ICsgJ3B4JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUuc2hvd1F1aWNrTm90ZUJ1dHRvbk9uU2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucXVpY2tOb3RlQnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5wZXJzb25hbGl6ZS5zaG93UXVpY2tOb3RlQnV0dG9uT25TY3JlZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwaW5uZWROb3Rlc0xvY2F0aW9uID0gdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0T2JqZWN0QW55KCdwaW5uZWROb3Rlc0xvY2F0aW9uJyk7XG4gICAgICAgICAgICBpZiAocGlubmVkTm90ZXNMb2NhdGlvbiAmJiB0aGlzLnBpbm5lZE5vdGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBpZiAocGlubmVkTm90ZXNMb2NhdGlvbi5ib3R0b20gPCB3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LmhlaWdodCAmJiBwaW5uZWROb3Rlc0xvY2F0aW9uLmxlZnQgPCB3aW5kb3cuaW5uZXJXaWR0aCAtIDI1MCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuc3R5bGUuYm90dG9tID0gcGlubmVkTm90ZXNMb2NhdGlvbi5ib3R0b20gKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IHBpbm5lZE5vdGVzTG9jYXRpb24ubGVmdCArICdweCc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3Rlc01pbmltaXplU3RhdHVzID0gcGlubmVkTm90ZXNMb2NhdGlvbi5taW5pbWl6ZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5waW5uZWROb3RlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5waW5uZWROb3Rlc01pbmltaXplU3RhdHVzID09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucGlubmVkTm90ZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0udGl0bGVQYWRkaW5nQm90dG9tID0gJzBweCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLmNvbnRlbnREaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5waW5uZWROb3RlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS50aXRsZVBhZGRpbmdCb3R0b20gPSAnNnB4JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0uY29udGVudERpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5waW5uZWROb3Rlcykge1xuICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMCk7XG5cbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xuICAgICAgICByb290LnJlcG9ydFF1ZXVlID0gdGhpcy5yZXBvcnRRdWV1ZTtcbiAgICAgICAgdGhpcy5tZW51TW9kZWwgPSB0aGlzLl9tZW51U2VydmljZS5nZXRNZW51SXRlbXMoKTtcbiAgICB9XG5cbiAgICBkZWZhdWx0UmVkaXJlY3QoKSB7XG4gICAgICAgIC8vIGNoZWNrIGRlZmF1bHQgcmVkaXJlY3RcbiAgICAgICAgaWYgKHRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFwcFNldHRpbmcgPSB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YTtcbiAgICAgICAgICAgIGlmICghYXBwU2V0dGluZyAmJiB0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpbi5kZWZhdWx0UmVkaXJlY3QgJiYgdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW4uZGVmYXVsdFJlZGlyZWN0XG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhdGhUb0NoZWNrID0gdGhpcy5lbnZpcm9ubWVudC5lbmFibGVCYXNlSHJlZiA/IGAvJHthcHBTZXR0aW5nLmNvZGUudG9Mb3dlckNhc2UoKX0vYCA6ICcvJztcblxuICAgICAgICAgICAgaWYgKChsb2NhdGlvbi5wYXRobmFtZSA9PT0gJy8nIHx8IGxvY2F0aW9uLnBhdGhuYW1lID09PSAnJyB8fCBsb2NhdGlvbi5wYXRobmFtZSA9PT0gcGF0aFRvQ2hlY2spKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd1c2VyIG5vdCB2YWxpZCB0b2tlbicsIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2FjY2Vzc190b2tlbicpKTtcbiAgICAgICAgICAgIC8vIFRPRE86IE5hbU5IIFjhu60gbMO9IHThuqFtIGNobyB0csaw4budbmcgaOG7o3AgxJHEg25nIG5o4bqtcCBs4bqnbiDEkeG6p3UgbmjGsG5nIGNo4bqheSDEkeG6v24gxJHDonkgbcOgIGFjY2VzcyB0b2tlbiB24bqrbiBraMO0bmcgaOG7o3AgbOG7h1xuICAgICAgICAgICAgLy8gWOG7rSBsw70gdHJp4buHdCDEkeG7gyBi4bqxbmcgY8OhY2ggdMOsbSBQQSBi4bqvdCBldmVudCBj4bunYSBhbmd1bGFyMiBvaWRjIMSR4buDIHjhu60gbMO9IHRyxrDhu5tjIGtoaSDEkeG6v24gYsaw4bubYyBkZWZhdWx0IHJlZGlyZWN0XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0b3AubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGRldGVjdENoYW5nZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jZFsnZGVzdHJveWVkJ10pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdleGNlcHRpb24gb24gZGV0ZWN0IGNoYW5nZScsIGUpO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0sIDEwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyQXV0aG9yaXplQ2FjaGUoKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHNlc3Npb25TdG9yYWdlKVxuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IC9eQVVUSE9SSVpBVElPTi8udGVzdChpdGVtKSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmb2N1c1RyYXAoZXZlbnQsIGRpcmVjdCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoZGlyZWN0KSB7XG4gICAgICAgICAgICB0aGlzLm9rQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRUaW55TWNlKCkge1xuICAgICAgICB0aW55bWNlLmJhc2VVUkwgPSAnL2Fzc2V0cy92ZW5kb3IvdGlueW1jZSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25maWd1cmVXaXRoTmV3Q29uZmlnQXBpKCkge1xuICAgICAgICAvLyBmb3IgZmlyc3QgbG9naW5cbiAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmV2ZW50cy5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBldnQudHlwZSA9PSAndG9rZW5fcmVjZWl2ZWQnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmNsZWFudXBMb2NhbFN0b3JhZ2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmNsZWFudXBTZXNzaW9uU3RvcmFnZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VVcGRhdGVkU2VydmljZS5jbGVhbnVwU3RvcmFnZVNlcnZpY2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlUmVwbGF5RXZlbnQoXG4gICAgICAgICAgICAgICAgICAgIENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfUkVBRFksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RUaW1lTG9naW5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LnR5cGUgPT09ICd0b2tlbl9leHBpcmVzJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS50cnlMb2dpbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LnR5cGUgPT09ICdsb2dvdXQnKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCBzdG9yYWdlXG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5jbGVhbnVwTG9jYWxTdG9yYWdlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5jbGVhbnVwU2Vzc2lvblN0b3JhZ2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmNsZWFyTG9jYWxUb2tlbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VVcGRhdGVkU2VydmljZS5jbGVhbnVwU3RvcmFnZVNlcnZpY2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UucmV2b2tlVG9rZW5BbmRMb2dvdXQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldnQudHlwZSA9PSAnc2Vzc2lvbl90ZXJtaW5hdGVkJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRfdXNlcl9pbmZvJyk7XG4gICAgICAgICAgICAgICAgLy8gbG9nb3V0XG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC50eXBlID09ICdkaXNjb3ZlcnlfZG9jdW1lbnRfbG9hZGVkJykge1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LnR5cGUgPT0gJ3Rva2VuX3JlZnJlc2hlZCcpIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdsb2dpbiBldmVudCcsIGV2dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5sb2FkRGlzY292ZXJ5RG9jdW1lbnQoKTtcbiAgICAgICAgaWYgKHRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVSZXBsYXlFdmVudChcbiAgICAgICAgICAgICAgICBDb21DdHhDb25zdGFudHMuUk9PVC5VU0VSX1JFQURZLFxuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RUaW1lTG9naW5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuZW5hYmxlU2lsZW50UmVmcmVzaCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5zZXR1cEF1dG9tYXRpY1NpbGVudFJlZnJlc2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnY3VycmVudFVybCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgnY3VycmVudFVybCcsIHRvcC5sb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5sb2FkRGlzY292ZXJ5RG9jdW1lbnRBbmRUcnlMb2dpbigpLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dBbm9ueW1vdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5pbml0TG9naW5GbG93KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd0Fub255bW91cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdOG7lW5nIGjhu6NwIGJp4bq/biBwb3NpdGlvblxuICAgICAgICBpZiAodGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnbXlpdGVtJykpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVFdmVudCgnUE9TSVRJT05fTE9BREVEJywgdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnbXlpdGVtJykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZ+G7jWkgYXBpIMSR4buDIHThu5VuZyBo4bujcCBk4buvIGxpdWVqZS4uLlxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZUV2ZW50KCdQT1NJVElPTl9MT0FERUQnLCB7fSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluamVjdENvbmZpZyhjZmc6IEF1dGhDb25maWcpIHtcbiAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmNvbmZpZ3VyZShjZmcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29uZmlnQXV0aGVuKCkge1xuICAgICAgICBjb25zdCBjZmcgPSB0aGlzLl9jb3JlQ29uZmlnU2VydmljZS5nZXRBdXRoQ29uZmlnKCk7XG4gICAgICAgIGNvbnN0IHR5cGVMb2dpbiA9IHRoaXMuZW52aXJvbm1lbnQuYXV0aGVudGljYXRpb25TZXR0aW5ncy5hdXRoZW5UeXBlO1xuICAgICAgICBpZiAodHlwZUxvZ2luICYmIHR5cGVMb2dpbi5pbmNsdWRlcygnaW1wbGljaXQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNmZztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNmZy5yZXNwb25zZVR5cGUgPSAnY29kZSc7XG4gICAgICAgICAgICByZXR1cm4gY2ZnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlTWVudUFjdGl2ZSh0b3ApIHtcbiAgICAgICAgdGhpcy5zY3JvbGxCYXJNZW51LnNjcm9sbFRvVG9wKHRvcCk7XG4gICAgfVxuXG4gICAgcXVpY2tOb3RlRHJvcHBlZChldmVudCkge1xuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdxdWlja05vdGVCdExvY2F0aW9uJywgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgYm90dG9tOiAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC50b3AgLSA1MCksIHJpZ2h0OiAod2luZG93LmlubmVyV2lkdGggLSByZWN0LmxlZnQgLSA1MClcbiAgICAgICAgfSkpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucXVpY2tOb3RlTW92aW5nID0gZmFsc2U7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgfVxuXG4gICAgcXVpY2tOb3RlU3RhcnRlZChldmVudCkge1xuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnF1aWNrTm90ZU1vdmluZyA9IHRydWU7XG4gICAgfVxuXG4gICAgcXVpY2tOb3RlUHJlc3MoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVQcmVzc2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMucXVpY2tOb3RlVG9nZ2xlU3ViQnV0dG9ucyh0cnVlKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlT25jZShDb21DdHhDb25zdGFudHMuUk9PVC5CT0RZX01PVVNFX0RPV04sICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlVG9nZ2xlU3ViQnV0dG9ucyhmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHF1aWNrTm90ZVByZXNzVXAoZXZlbnQpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnF1aWNrTm90ZVByZXNzaW5nID0gZmFsc2U7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgfVxuXG4gICAgcXVpY2tOb3RlQWRkTm90ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnF1aWNrTm90ZU1vdmluZ1xuICAgICAgICAgICAgJiYgIXRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucXVpY2tOb3RlUHJlc3NpbmcpIHtcbiAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlVG9nZ2xlU3ViQnV0dG9ucyhmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLm5vdGVEYXRhTW9kZWwgPSA8YW55PntcbiAgICAgICAgICAgICAgICBlZGl0Rm9ybU1vZGVsOiA8YW55Pnsgc2hvd1F1aWNrTm90ZUZvcm06IHRydWUsIHBvcHVwU2l6ZTogPGFueT57fSwgZGF0YTogPGFueT57fSB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5lZGl0Rm9ybU1vZGVsLnNob3dRdWlja05vdGVGb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrTm90ZVNob3dBbGxOb3RlcygpIHtcbiAgICAgICAgdGhpcy5xdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKGZhbHNlKTtcbiAgICAgICAgdG9wLmxvY2F0aW9uLmhyZWYgPSBgJHt0aGlzLmdldEFwcFN3aXRjaGVyVXJsKCd1c2VyJyl9L21haW4vcXVpY2stbm90ZWA7XG4gICAgfVxuXG4gICAgcXVpY2tOb3RlU2hvd1NldHRpbmdzKCkge1xuICAgICAgICB0aGlzLnF1aWNrTm90ZVRvZ2dsZVN1YkJ1dHRvbnMoZmFsc2UpO1xuICAgICAgICB0b3AubG9jYXRpb24uaHJlZiA9IGAke3RoaXMuZ2V0QXBwU3dpdGNoZXJVcmwoJ3VzZXInKX0vbWFpbi9wZXJzb25hbGl6ZWA7XG4gICAgfVxuXG4gICAgcXVpY2tOb3RlVG9nZ2xlU3ViQnV0dG9ucyhzaG93KSB7XG4gICAgICAgIGlmIChzaG93KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdDEubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9ICc1NXB4JztcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Mi5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzEwMHB4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQxLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSAnNjVweCc7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdDIubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9ICcxMjBweCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0MS5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzVweCc7XG4gICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Mi5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzVweCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQaW5uZWQgTm90ZVxuICAgIGdldFBpbm5lZE5vdGVzKCkge1xuXG5cbiAgICB9XG5cbiAgICBwaW5uZWROb3Rlc0Ryb3BwZWQoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgncGlubmVkTm90ZXNMb2NhdGlvbicsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLFxuICAgICAgICAgICAgbGVmdDogKHJlY3QubGVmdCksXG4gICAgICAgICAgICBtaW5pbWl6ZTogdGhpcy5waW5uZWROb3Rlc01pbmltaXplU3RhdHVzXG4gICAgICAgIH0pKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucGlubmVkTm90ZXNNb3ZpbmcgPSBmYWxzZTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICB9XG5cbiAgICBwaW5uZWROb3Rlc1N0YXJ0ZWQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5waW5uZWROb3Rlc01vdmluZyA9IHRydWU7XG4gICAgfVxuXG4gICAgcGlubmVkTm90ZXNNaW5pbWl6ZShkYXRhOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9ICFkYXRhO1xuXG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Bpbm5lZE5vdGVzTG9jYXRpb24nLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBib3R0b206ICh3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LnRvcCAtIHJlY3QuaGVpZ2h0KSxcbiAgICAgICAgICAgIGxlZnQ6IChyZWN0LmxlZnQpLFxuICAgICAgICAgICAgbWluaW1pemU6IHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1xuICAgICAgICB9KSk7XG5cbiAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZURhdGEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXMgPT0gdHJ1ZSkge1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5waW5uZWROb3RlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0udGl0bGVQYWRkaW5nQm90dG9tID0gJzBweCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS5jb250ZW50RGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnBpbm5lZE5vdGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS50aXRsZVBhZGRpbmdCb3R0b20gPSAnNnB4JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLmNvbnRlbnREaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1blBpbk5vdGUocm93RGF0YTogYW55KSB7XG4gICAgICAgIHJvd0RhdGEuaXNQaW5uZWQgPSBmYWxzZTtcblxuICAgIH1cblxuICAgIGNvbXBsZXRlTm90ZShyb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgcm93RGF0YS5pc0NvbXBsZXRlZCA9IHRydWU7XG5cbiAgICB9XG5cbiAgICBpbkNvbXBsZXRlTm90ZShyb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgcm93RGF0YS5pc0NvbXBsZXRlZCA9IGZhbHNlO1xuXG4gICAgfVxuXG4gICAgY2xvc2VUYWJXaW5kb3coKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjbG9zZVRhYldpbmRvdycpO1xuICAgIH1cblxuICAgIGdldEFwcFN3aXRjaGVyVXJsKGFwcENvZGUpIHtcbiAgICAgICAgY29uc3QgYXBwID0gdGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5hcHBTd2l0Y2hlci5maW5kKHggPT4geC5jb2RlLnRvTG93ZXJDYXNlKCkgPT0gYXBwQ29kZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKGFwcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFwcC51cmw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdXNlLWxpZmUtY3ljbGUtaW50ZXJmYWNlXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYWxsIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwubmV4dCgpO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuREVTVFJPWV9UQVNLX0RFVEFJTF9DT01QT05FTlQpO1xuICAgIH1cblxuICAgIC8vIHNlYXJjaCBtZW51XG4gICAgb25TZWFyY2hNZW51KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2VhcmNoTWVudVJlc3VsdCA9IFtdO1xuXG4gICAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnF1ZXJ5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlYXJjaE1lbnVSZXN1bHQgPSB0aGlzLmdldFNlYXJjaE1lbnVSZXN1bHQoZXZlbnQucXVlcnkpO1xuICAgIH1cblxuICAgIGdldFNlYXJjaE1lbnVSZXN1bHQoa2V5d29yZCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgICAgICB0aGlzLnJlZ3JvdXBTZWFyY2hNZW51UmVzdWx0KGtleXdvcmQsIHRoaXMubWVudU1vZGVsLCByZXN1bHQpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdyb3VwU2VhcmNoTWVudVJlc3VsdChrZXl3b3JkOiBzdHJpbmcsIGxpc3RUb0dldDogYW55W10sIGxpc3RUb1B1c2g6IGFueVtdKSB7XG4gICAgICAgIGxpc3RUb0dldC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uaXRlbXMgJiYgaXRlbS5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZ3JvdXBTZWFyY2hNZW51UmVzdWx0KGtleXdvcmQsIGl0ZW0uaXRlbXMsIGxpc3RUb1B1c2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKHRoaXMubm9uQWNjZW50VmlldG5hbWVzZShpdGVtLmxhYmVsKS5pbmRleE9mKHRoaXMubm9uQWNjZW50VmlldG5hbWVzZShrZXl3b3JkKSkgPj0gMCkpIHtcbiAgICAgICAgICAgICAgICBsaXN0VG9QdXNoLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbm9uQWNjZW50VmlldG5hbWVzZShzdHIpIHtcbiAgICAgICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIC8vICAgICBXZSBjYW4gYWxzbyB1c2UgdGhpcyBpbnN0ZWFkIG9mIGZyb20gbGluZSAxMSB0byBsaW5lIDE3XG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDBFMHxcXHUwMEUxfFxcdTFFQTF8XFx1MUVBM3xcXHUwMEUzfFxcdTAwRTJ8XFx1MUVBN3xcXHUxRUE1fFxcdTFFQUR8XFx1MUVBOXxcXHUxRUFCfFxcdTAxMDN8XFx1MUVCMXxcXHUxRUFGfFxcdTFFQjd8XFx1MUVCM3xcXHUxRUI1L2csIFwiYVwiKTtcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEU4fFxcdTAwRTl8XFx1MUVCOXxcXHUxRUJCfFxcdTFFQkR8XFx1MDBFQXxcXHUxRUMxfFxcdTFFQkZ8XFx1MUVDN3xcXHUxRUMzfFxcdTFFQzUvZywgXCJlXCIpO1xuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRUN8XFx1MDBFRHxcXHUxRUNCfFxcdTFFQzl8XFx1MDEyOS9nLCBcImlcIik7XG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDBGMnxcXHUwMEYzfFxcdTFFQ0R8XFx1MUVDRnxcXHUwMEY1fFxcdTAwRjR8XFx1MUVEM3xcXHUxRUQxfFxcdTFFRDl8XFx1MUVENXxcXHUxRUQ3fFxcdTAxQTF8XFx1MUVERHxcXHUxRURCfFxcdTFFRTN8XFx1MUVERnxcXHUxRUUxL2csIFwib1wiKTtcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEY5fFxcdTAwRkF8XFx1MUVFNXxcXHUxRUU3fFxcdTAxNjl8XFx1MDFCMHxcXHUxRUVCfFxcdTFFRTl8XFx1MUVGMXxcXHUxRUVEfFxcdTFFRUYvZywgXCJ1XCIpO1xuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTFFRjN8XFx1MDBGRHxcXHUxRUY1fFxcdTFFRjd8XFx1MUVGOS9nLCBcInlcIik7XG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDExMS9nLCBcImRcIik7XG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DoHzDoXzhuqF84bqjfMOjfMOifOG6p3zhuqV84bqtfOG6qXzhuqt8xIN84bqxfOG6r3zhurd84bqzfOG6tS9nLCAnYScpO1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvw6h8w6l84bq5fOG6u3zhur18w6p84buBfOG6v3zhu4d84buDfOG7hS9nLCAnZScpO1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvw6x8w6184buLfOG7iXzEqS9nLCAnaScpO1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvw7J8w7N84buNfOG7j3zDtXzDtHzhu5N84buRfOG7mXzhu5V84buXfMahfOG7nXzhu5t84bujfOG7n3zhu6EvZywgJ28nKTtcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL8O5fMO6fOG7pXzhu6d8xal8xrB84burfOG7qXzhu7F84butfOG7ry9nLCAndScpO1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgv4buzfMO9fOG7tXzhu7d84bu5L2csICd5Jyk7XG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/EkS9nLCAnZCcpO1xuICAgICAgICAvLyBTb21lIHN5c3RlbSBlbmNvZGUgdmlldG5hbWVzZSBjb21iaW5pbmcgYWNjZW50IGFzIGluZGl2aWR1YWwgdXRmLTggY2hhcmFjdGVyc1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDMwMHxcXHUwMzAxfFxcdTAzMDN8XFx1MDMwOXxcXHUwMzIzL2csICcnKTsgLy8gSHV54buBbiBz4bqvYyBo4buPaSBuZ8OjIG7hurduZ1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDJDNnxcXHUwMzA2fFxcdTAzMUIvZywgJycpOyAvLyDDgiwgw4osIMSCLCDGoCwgxq9cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICBvblNlbGVjdE1lbnVTdWdnZXN0aW9uKG1lbnVJdGVtT2JqKSB7XG4gICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKG1lbnVJdGVtT2JqLnJvdXRlckxpbmspO1xuICAgICAgICB0aGlzLnNlYXJjaE1lbnVJbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zaG93UGlubmVkTWVudSA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uQmx1clNlYXJjaE1lbnVJbnB1dChldmVudCkge1xuICAgICAgICB0aGlzLmlzU2VhcmNoTWVudUlucHV0Rm9jdXMgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuaXNJblBpbm5lZE1lbnUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VhcmNoTWVudUlucHV0ID0gJyc7XG4gICAgICAgIHRoaXMuc2hvd1Bpbm5lZE1lbnUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvbkZvY3VzU2VhcmNoTWVudUlucHV0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNTZWFyY2hNZW51SW5wdXRGb2N1cyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd1Bpbm5lZE1lbnUgPSB0cnVlO1xuICAgIH1cblxuICAgIHNlYXJjaEljb25DbGljaygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbW1vblNlcnZpY2Uuc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVudS1idXR0b24nKS5jbGljaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5cHJlc3MnLCBbJyRldmVudCddKVxuICAgIGhhbmRsZVNob3dQb3B1cFBlcm1pc3Npb25VdGlscyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5rZXlQcmVzc1Blcm1pc3Npb25VdGlsc1t0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4XSA9PT0gZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50S2V5UHJlc3NJbmRleCA9PSB0aGlzLmtleVByZXNzUGVybWlzc2lvblV0aWxzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4ID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3REYXRhLnNob3dQZXJtaXNzaW9uVXRpbHMgPSB0cnVlO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4ID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkR3VhcmQocm91dGU6IFJvdXRlKTogdm9pZCB7XG4gICAgICAgIGlmIChyb3V0ZS5wYXRoID09PSAnJyB8fCByb3V0ZS5wYXRoID09PSAnLycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyb3V0ZS5sb2FkQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICByb3V0ZS5jYW5BY3RpdmF0ZUNoaWxkID0gcm91dGUuY2FuQWN0aXZhdGVDaGlsZCA/IHJvdXRlLmNhbkFjdGl2YXRlQ2hpbGQgOiBbR2VuZXJpY0d1YXJkQ2hpbGRTZXJ2aWNlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJvdXRlLmNhbkFjdGl2YXRlID0gcm91dGUuY2FuQWN0aXZhdGUgPyByb3V0ZS5jYW5BY3RpdmF0ZSA6IFtHZW5lcmljR3VhcmRTZXJ2aWNlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -28739,7 +28739,7 @@ class CommonAppComponentComponent {
28739
28739
  this._entityMetadataService.setupSyncCacheEntityMetadata();
28740
28740
  this._router.config.forEach(route => this.addGuard(route));
28741
28741
  const checkFirstLogin = this.environment.authenticationSettings.isCheckFirstTimeLogin && this.rootData.currentUser.isFirstLogin;
28742
- const checkExpirationPassword = this.environment.authenticationSettings.isCheckExpirationPassword && this.rootData.currentUser.isExpirationPassword;
28742
+ const checkExpirationPassword = this.rootData.currentUser.isExpirationPassword;
28743
28743
  if (checkFirstLogin || checkExpirationPassword) {
28744
28744
  const domain = this.environment.clientDomain.appDomain;
28745
28745
  let subPath = '/user';