@c8y/ngx-components 1021.22.95 → 1021.22.99

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.
@@ -68,10 +68,10 @@ export class CookieBannerComponent {
68
68
  this.cookieBannerService.isCookieBannerShowed$.next(shouldShow);
69
69
  }
70
70
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CookieBannerComponent, deps: [{ token: i1.BsModalService }, { token: i2.CookieBannerService }], target: i0.ɵɵFactoryTarget.Component }); }
71
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: CookieBannerComponent, selector: "c8y-cookie-banner", ngImport: i0, template: "<div class=\"c8y-cookie-banner\">\n <div class=\"container\">\n <div class=\"row p-t-16 p-b-16\" *ngIf=\"showBanner\">\n <div class=\"col-md-2\" *ngIf=\"settings.cookieBannerTitle\">\n <h3>{{ settings.cookieBannerTitle | translate }}</h3>\n <div class=\"p-b-16 visible-sm visible-xs\"></div>\n </div>\n <div class=\"col-md-7\">\n <div class=\"cookie-banner-content text-pre-line\">\n {{ settings.cookieBannerText | translate }}\n <a\n href=\"{{ settings.policyUrl }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n *ngIf=\"settings.policyUrl\"\n class=\"text-primary\"\n >\n {{ 'See also our Privacy Notice.' | translate }}\n </a>\n </div>\n </div>\n <div class=\"col-md-3\">\n <div class=\"row\">\n <div class=\"col-sm-6 col-md-12\">\n <div class=\"p-b-16 visible-sm visible-xs\"></div>\n <button\n class=\"btn btn-primary btn-block\"\n (click)=\"acceptCookies()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Agree and proceed' | translate }}\n </button>\n </div>\n <div class=\"col-sm-6 col-md-12\" *ngIf=\"!!cookiePreferences\">\n <div class=\"p-b-16\"></div>\n <button\n class=\"btn btn-primary btn-block\"\n (click)=\"rejectCookies()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Reject all`cookies`' | translate }}\n </button>\n </div>\n <div class=\"col-sm-6 col-md-12\" *ngIf=\"!!cookiePreferences\">\n <div class=\"p-b-16\"></div>\n <button\n class=\"btn btn-default btn-block\"\n (click)=\"onConfigurePreferences()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Configure preferences' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }] }); }
71
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: CookieBannerComponent, selector: "c8y-cookie-banner", ngImport: i0, template: "<div class=\"c8y-cookie-banner\">\n <div class=\"container\">\n <div class=\"row p-t-16 p-b-16\" *ngIf=\"showBanner\">\n <div class=\"col-md-2\" *ngIf=\"settings.cookieBannerTitle\">\n <h3>{{ settings.cookieBannerTitle | translate }}</h3>\n <div class=\"p-b-16 visible-sm visible-xs\"></div>\n </div>\n <div class=\"col-md-7\">\n <div class=\"cookie-banner-content text-pre-line\">\n {{ settings.cookieBannerText | translate }}\n <a\n href=\"{{ settings.policyUrl }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n *ngIf=\"settings.policyUrl\"\n \n >\n {{ 'See also our Privacy Notice.' | translate }}\n </a>\n </div>\n </div>\n <div class=\"col-md-3\">\n <div class=\"row\">\n <div class=\"col-sm-6 col-md-12\">\n <div class=\"p-b-16 visible-sm visible-xs\"></div>\n <button\n class=\"btn btn-primary btn-block\"\n (click)=\"acceptCookies()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Agree and proceed' | translate }}\n </button>\n </div>\n <div class=\"col-sm-6 col-md-12\" *ngIf=\"!!cookiePreferences\">\n <div class=\"p-b-16\"></div>\n <button\n class=\"btn btn-primary btn-block\"\n (click)=\"rejectCookies()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Reject all`cookies`' | translate }}\n </button>\n </div>\n <div class=\"col-sm-6 col-md-12\" *ngIf=\"!!cookiePreferences\">\n <div class=\"p-b-16\"></div>\n <button\n class=\"btn btn-default btn-block\"\n (click)=\"onConfigurePreferences()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Configure preferences' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }] }); }
72
72
  }
73
73
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CookieBannerComponent, decorators: [{
74
74
  type: Component,
75
- args: [{ selector: 'c8y-cookie-banner', template: "<div class=\"c8y-cookie-banner\">\n <div class=\"container\">\n <div class=\"row p-t-16 p-b-16\" *ngIf=\"showBanner\">\n <div class=\"col-md-2\" *ngIf=\"settings.cookieBannerTitle\">\n <h3>{{ settings.cookieBannerTitle | translate }}</h3>\n <div class=\"p-b-16 visible-sm visible-xs\"></div>\n </div>\n <div class=\"col-md-7\">\n <div class=\"cookie-banner-content text-pre-line\">\n {{ settings.cookieBannerText | translate }}\n <a\n href=\"{{ settings.policyUrl }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n *ngIf=\"settings.policyUrl\"\n class=\"text-primary\"\n >\n {{ 'See also our Privacy Notice.' | translate }}\n </a>\n </div>\n </div>\n <div class=\"col-md-3\">\n <div class=\"row\">\n <div class=\"col-sm-6 col-md-12\">\n <div class=\"p-b-16 visible-sm visible-xs\"></div>\n <button\n class=\"btn btn-primary btn-block\"\n (click)=\"acceptCookies()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Agree and proceed' | translate }}\n </button>\n </div>\n <div class=\"col-sm-6 col-md-12\" *ngIf=\"!!cookiePreferences\">\n <div class=\"p-b-16\"></div>\n <button\n class=\"btn btn-primary btn-block\"\n (click)=\"rejectCookies()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Reject all`cookies`' | translate }}\n </button>\n </div>\n <div class=\"col-sm-6 col-md-12\" *ngIf=\"!!cookiePreferences\">\n <div class=\"p-b-16\"></div>\n <button\n class=\"btn btn-default btn-block\"\n (click)=\"onConfigurePreferences()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Configure preferences' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
75
+ args: [{ selector: 'c8y-cookie-banner', template: "<div class=\"c8y-cookie-banner\">\n <div class=\"container\">\n <div class=\"row p-t-16 p-b-16\" *ngIf=\"showBanner\">\n <div class=\"col-md-2\" *ngIf=\"settings.cookieBannerTitle\">\n <h3>{{ settings.cookieBannerTitle | translate }}</h3>\n <div class=\"p-b-16 visible-sm visible-xs\"></div>\n </div>\n <div class=\"col-md-7\">\n <div class=\"cookie-banner-content text-pre-line\">\n {{ settings.cookieBannerText | translate }}\n <a\n href=\"{{ settings.policyUrl }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n *ngIf=\"settings.policyUrl\"\n \n >\n {{ 'See also our Privacy Notice.' | translate }}\n </a>\n </div>\n </div>\n <div class=\"col-md-3\">\n <div class=\"row\">\n <div class=\"col-sm-6 col-md-12\">\n <div class=\"p-b-16 visible-sm visible-xs\"></div>\n <button\n class=\"btn btn-primary btn-block\"\n (click)=\"acceptCookies()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Agree and proceed' | translate }}\n </button>\n </div>\n <div class=\"col-sm-6 col-md-12\" *ngIf=\"!!cookiePreferences\">\n <div class=\"p-b-16\"></div>\n <button\n class=\"btn btn-primary btn-block\"\n (click)=\"rejectCookies()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Reject all`cookies`' | translate }}\n </button>\n </div>\n <div class=\"col-sm-6 col-md-12\" *ngIf=\"!!cookiePreferences\">\n <div class=\"p-b-16\"></div>\n <button\n class=\"btn btn-default btn-block\"\n (click)=\"onConfigurePreferences()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Configure preferences' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
76
76
  }], ctorParameters: () => [{ type: i1.BsModalService }, { type: i2.CookieBannerService }] });
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLWJhbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb3JlL2Jvb3RzdHJhcC9jb29raWUtYmFubmVyL2Nvb2tpZS1iYW5uZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vY29yZS9ib290c3RyYXAvY29va2llLWJhbm5lci9jb29raWUtYmFubmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDZFQUE2RSxDQUFDO0FBQ3BJLE9BQU8sRUFDTCx3QkFBd0IsRUFHekIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7O0FBTTlELE1BQU0sT0FBTyxxQkFBcUI7SUFLaEMsWUFDVSxjQUE4QixFQUM5QixtQkFBd0M7UUFEeEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFKbEQsa0JBQWEsR0FBRyxLQUFLLENBQUM7SUFLbkIsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDL0UsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLFFBQVEsR0FBRztZQUNmLEdBQUcsd0JBQXdCO1lBQzNCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHVCQUF1QixFQUFFO1NBQ3RELENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsTUFBTSxZQUFZLEdBQUc7WUFDbkIsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtTQUNoRCxDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUU7WUFDL0UsWUFBWTtTQUNiLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLHFCQUF3QyxFQUFFLEVBQUU7WUFDbkYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixJQUFJLHFCQUFxQixFQUFFLENBQUM7Z0JBQzFCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO2dCQUNsRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLHFCQUFxQixFQUFFLGFBQWEsQ0FBQyxDQUFDO2dCQUMxRSxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWE7UUFDWCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUNsRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUNqQyxJQUFJLENBQUMsaUJBQWlCLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQzVDLGFBQWEsQ0FDZCxDQUFDO1FBQ0YsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDbEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FDakM7WUFDRSxRQUFRLEVBQUUsSUFBSTtZQUNkLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLEVBQ0QsYUFBYSxDQUNkLENBQUM7UUFDRixJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU8sY0FBYyxDQUFDLGFBQXNCO1FBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxVQUFtQjtRQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7OEdBOUVVLHFCQUFxQjtrR0FBckIscUJBQXFCLHlEQ2RsQyxrakVBMERBOzsyRkQ1Q2EscUJBQXFCO2tCQUpqQyxTQUFTOytCQUNFLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQ29va2llQmFubmVyUHJlZmVyZW5jZXNNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vY29va2llLWJhbm5lci1wcmVmZXJlbmNlcy1tb2RhbC9jb29raWUtYmFubmVyLXByZWZlcmVuY2VzLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDb29raWVCYW5uZXJEZWZhdWx0VGV4dHMsXG4gIENvb2tpZUJhbm5lclNldHRpbmdzLFxuICBDb29raWVQcmVmZXJlbmNlc1xufSBmcm9tICcuL2Nvb2tpZS1iYW5uZXIubW9kZWwnO1xuaW1wb3J0IHsgQ29va2llQmFubmVyU2VydmljZSB9IGZyb20gJy4vY29va2llLWJhbm5lci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNvb2tpZS1iYW5uZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY29va2llLWJhbm5lci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQ29va2llQmFubmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgc2V0dGluZ3M6IFBhcnRpYWw8Q29va2llQmFubmVyU2V0dGluZ3M+O1xuICBzaG93QmFubmVyOiBib29sZWFuO1xuICBzaG91bGREaXNhYmxlID0gZmFsc2U7XG4gIGNvb2tpZVByZWZlcmVuY2VzOiBDb29raWVQcmVmZXJlbmNlcztcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBic01vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb29raWVCYW5uZXJTZXJ2aWNlOiBDb29raWVCYW5uZXJTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncygpO1xuICAgIHRoaXMuY29va2llUHJlZmVyZW5jZXMgPSB0aGlzLmNvb2tpZUJhbm5lclNlcnZpY2UuZ2V0Q29va2llUHJlZmVyZW5jZXNDb25maWcoKTtcbiAgICB0aGlzLnNob3VsZFNob3dDb29raWVCYW5uZXIoKTtcbiAgfVxuXG4gIGdldFNldHRpbmdzKCk6IFBhcnRpYWw8Q29va2llQmFubmVyU2V0dGluZ3M+IHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHtcbiAgICAgIC4uLkNvb2tpZUJhbm5lckRlZmF1bHRUZXh0cyxcbiAgICAgIC4uLnRoaXMuY29va2llQmFubmVyU2VydmljZS5nZXRDb29raWVCYW5uZXJTZXR0aW5ncygpXG4gICAgfTtcbiAgICByZXR1cm4gc2V0dGluZ3M7XG4gIH1cblxuICBvbkNvbmZpZ3VyZVByZWZlcmVuY2VzKCkge1xuICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnModHJ1ZSk7XG5cbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICBjb25maWdDb29raWVQcmVmZXJlbmNlczogdGhpcy5jb29raWVQcmVmZXJlbmNlc1xuICAgIH07XG5cbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhDb29raWVCYW5uZXJQcmVmZXJlbmNlc01vZGFsQ29tcG9uZW50LCB7XG4gICAgICBpbml0aWFsU3RhdGVcbiAgICB9KTtcblxuICAgIG1vZGFsUmVmLmNvbnRlbnQuY2xvc2VTdWJqZWN0LnN1YnNjcmliZSgodXNlckNvb2tpZVByZWZlcmVuY2VzOiBDb29raWVQcmVmZXJlbmNlcykgPT4ge1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucyhmYWxzZSk7XG4gICAgICBpZiAodXNlckNvb2tpZVByZWZlcmVuY2VzKSB7XG4gICAgICAgIGNvbnN0IHBvbGljeVZlcnNpb24gPSB0aGlzLnNldHRpbmdzLnBvbGljeVZlcnNpb247XG4gICAgICAgIHRoaXMuY29va2llQmFubmVyU2VydmljZS5zZXRDb29raWVzKHVzZXJDb29raWVQcmVmZXJlbmNlcywgcG9saWN5VmVyc2lvbik7XG4gICAgICAgIHRoaXMuc2V0Q29va2llQmFubmVyVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhY2NlcHRDb29raWVzKCkge1xuICAgIGNvbnN0IHBvbGljeVZlcnNpb24gPSB0aGlzLnNldHRpbmdzLnBvbGljeVZlcnNpb247XG4gICAgdGhpcy5jb29raWVCYW5uZXJTZXJ2aWNlLnNldENvb2tpZXMoXG4gICAgICB0aGlzLmNvb2tpZVByZWZlcmVuY2VzIHx8IHsgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgIHBvbGljeVZlcnNpb25cbiAgICApO1xuICAgIHRoaXMuc2V0Q29va2llQmFubmVyVmlzaWJpbGl0eShmYWxzZSk7XG4gIH1cblxuICByZWplY3RDb29raWVzKCkge1xuICAgIGNvbnN0IHBvbGljeVZlcnNpb24gPSB0aGlzLnNldHRpbmdzLnBvbGljeVZlcnNpb247XG4gICAgdGhpcy5jb29raWVCYW5uZXJTZXJ2aWNlLnNldENvb2tpZXMoXG4gICAgICB7XG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBmdW5jdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgbWFya2V0aW5nOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIHBvbGljeVZlcnNpb25cbiAgICApO1xuICAgIHRoaXMuc2V0Q29va2llQmFubmVyVmlzaWJpbGl0eShmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZFNob3dDb29raWVCYW5uZXIoKSB7XG4gICAgdGhpcy5zZXRDb29raWVCYW5uZXJWaXNpYmlsaXR5KHRoaXMuY29va2llQmFubmVyU2VydmljZS5zaG91bGRTaG93Q29va2llQmFubmVyKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlQnV0dG9ucyhzaG91bGREaXNhYmxlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zaG91bGREaXNhYmxlID0gc2hvdWxkRGlzYWJsZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29va2llQmFubmVyVmlzaWJpbGl0eShzaG91bGRTaG93OiBib29sZWFuKSB7XG4gICAgdGhpcy5zaG93QmFubmVyID0gc2hvdWxkU2hvdztcbiAgICB0aGlzLmNvb2tpZUJhbm5lclNlcnZpY2UuaXNDb29raWVCYW5uZXJTaG93ZWQkLm5leHQoc2hvdWxkU2hvdyk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjOHktY29va2llLWJhbm5lclwiPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBwLXQtMTYgcC1iLTE2XCIgKm5nSWY9XCJzaG93QmFubmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIiAqbmdJZj1cInNldHRpbmdzLmNvb2tpZUJhbm5lclRpdGxlXCI+XG4gICAgICAgIDxoMz57eyBzZXR0aW5ncy5jb29raWVCYW5uZXJUaXRsZSB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLWItMTYgdmlzaWJsZS1zbSB2aXNpYmxlLXhzXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtN1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29va2llLWJhbm5lci1jb250ZW50IHRleHQtcHJlLWxpbmVcIj5cbiAgICAgICAgICB7eyBzZXR0aW5ncy5jb29raWVCYW5uZXJUZXh0IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGhyZWY9XCJ7eyBzZXR0aW5ncy5wb2xpY3lVcmwgfX1cIlxuICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJzZXR0aW5ncy5wb2xpY3lVcmxcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdTZWUgYWxzbyBvdXIgUHJpdmFjeSBOb3RpY2UuJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02IGNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtYi0xNiB2aXNpYmxlLXNtIHZpc2libGUteHNcIj48L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWJsb2NrXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjY2VwdENvb2tpZXMoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzaG91bGREaXNhYmxlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ0FncmVlIGFuZCBwcm9jZWVkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02IGNvbC1tZC0xMlwiICpuZ0lmPVwiISFjb29raWVQcmVmZXJlbmNlc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtYi0xNlwiPjwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tYmxvY2tcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVqZWN0Q29va2llcygpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNob3VsZERpc2FibGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnUmVqZWN0IGFsbGBjb29raWVzYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNiBjb2wtbWQtMTJcIiAqbmdJZj1cIiEhY29va2llUHJlZmVyZW5jZXNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWItMTZcIj48L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLWJsb2NrXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ29uZmlndXJlUHJlZmVyZW5jZXMoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzaG91bGREaXNhYmxlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ0NvbmZpZ3VyZSBwcmVmZXJlbmNlcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLWJhbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb3JlL2Jvb3RzdHJhcC9jb29raWUtYmFubmVyL2Nvb2tpZS1iYW5uZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vY29yZS9ib290c3RyYXAvY29va2llLWJhbm5lci9jb29raWUtYmFubmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDZFQUE2RSxDQUFDO0FBQ3BJLE9BQU8sRUFDTCx3QkFBd0IsRUFHekIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7O0FBTTlELE1BQU0sT0FBTyxxQkFBcUI7SUFLaEMsWUFDVSxjQUE4QixFQUM5QixtQkFBd0M7UUFEeEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFKbEQsa0JBQWEsR0FBRyxLQUFLLENBQUM7SUFLbkIsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDL0UsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLFFBQVEsR0FBRztZQUNmLEdBQUcsd0JBQXdCO1lBQzNCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHVCQUF1QixFQUFFO1NBQ3RELENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsTUFBTSxZQUFZLEdBQUc7WUFDbkIsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtTQUNoRCxDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUU7WUFDL0UsWUFBWTtTQUNiLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLHFCQUF3QyxFQUFFLEVBQUU7WUFDbkYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixJQUFJLHFCQUFxQixFQUFFLENBQUM7Z0JBQzFCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO2dCQUNsRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLHFCQUFxQixFQUFFLGFBQWEsQ0FBQyxDQUFDO2dCQUMxRSxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWE7UUFDWCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUNsRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUNqQyxJQUFJLENBQUMsaUJBQWlCLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQzVDLGFBQWEsQ0FDZCxDQUFDO1FBQ0YsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDbEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FDakM7WUFDRSxRQUFRLEVBQUUsSUFBSTtZQUNkLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLEVBQ0QsYUFBYSxDQUNkLENBQUM7UUFDRixJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU8sY0FBYyxDQUFDLGFBQXNCO1FBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxVQUFtQjtRQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7OEdBOUVVLHFCQUFxQjtrR0FBckIscUJBQXFCLHlEQ2RsQywyaEVBMERBOzsyRkQ1Q2EscUJBQXFCO2tCQUpqQyxTQUFTOytCQUNFLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQ29va2llQmFubmVyUHJlZmVyZW5jZXNNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vY29va2llLWJhbm5lci1wcmVmZXJlbmNlcy1tb2RhbC9jb29raWUtYmFubmVyLXByZWZlcmVuY2VzLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDb29raWVCYW5uZXJEZWZhdWx0VGV4dHMsXG4gIENvb2tpZUJhbm5lclNldHRpbmdzLFxuICBDb29raWVQcmVmZXJlbmNlc1xufSBmcm9tICcuL2Nvb2tpZS1iYW5uZXIubW9kZWwnO1xuaW1wb3J0IHsgQ29va2llQmFubmVyU2VydmljZSB9IGZyb20gJy4vY29va2llLWJhbm5lci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNvb2tpZS1iYW5uZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY29va2llLWJhbm5lci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQ29va2llQmFubmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgc2V0dGluZ3M6IFBhcnRpYWw8Q29va2llQmFubmVyU2V0dGluZ3M+O1xuICBzaG93QmFubmVyOiBib29sZWFuO1xuICBzaG91bGREaXNhYmxlID0gZmFsc2U7XG4gIGNvb2tpZVByZWZlcmVuY2VzOiBDb29raWVQcmVmZXJlbmNlcztcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBic01vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb29raWVCYW5uZXJTZXJ2aWNlOiBDb29raWVCYW5uZXJTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncygpO1xuICAgIHRoaXMuY29va2llUHJlZmVyZW5jZXMgPSB0aGlzLmNvb2tpZUJhbm5lclNlcnZpY2UuZ2V0Q29va2llUHJlZmVyZW5jZXNDb25maWcoKTtcbiAgICB0aGlzLnNob3VsZFNob3dDb29raWVCYW5uZXIoKTtcbiAgfVxuXG4gIGdldFNldHRpbmdzKCk6IFBhcnRpYWw8Q29va2llQmFubmVyU2V0dGluZ3M+IHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHtcbiAgICAgIC4uLkNvb2tpZUJhbm5lckRlZmF1bHRUZXh0cyxcbiAgICAgIC4uLnRoaXMuY29va2llQmFubmVyU2VydmljZS5nZXRDb29raWVCYW5uZXJTZXR0aW5ncygpXG4gICAgfTtcbiAgICByZXR1cm4gc2V0dGluZ3M7XG4gIH1cblxuICBvbkNvbmZpZ3VyZVByZWZlcmVuY2VzKCkge1xuICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnModHJ1ZSk7XG5cbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICBjb25maWdDb29raWVQcmVmZXJlbmNlczogdGhpcy5jb29raWVQcmVmZXJlbmNlc1xuICAgIH07XG5cbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhDb29raWVCYW5uZXJQcmVmZXJlbmNlc01vZGFsQ29tcG9uZW50LCB7XG4gICAgICBpbml0aWFsU3RhdGVcbiAgICB9KTtcblxuICAgIG1vZGFsUmVmLmNvbnRlbnQuY2xvc2VTdWJqZWN0LnN1YnNjcmliZSgodXNlckNvb2tpZVByZWZlcmVuY2VzOiBDb29raWVQcmVmZXJlbmNlcykgPT4ge1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucyhmYWxzZSk7XG4gICAgICBpZiAodXNlckNvb2tpZVByZWZlcmVuY2VzKSB7XG4gICAgICAgIGNvbnN0IHBvbGljeVZlcnNpb24gPSB0aGlzLnNldHRpbmdzLnBvbGljeVZlcnNpb247XG4gICAgICAgIHRoaXMuY29va2llQmFubmVyU2VydmljZS5zZXRDb29raWVzKHVzZXJDb29raWVQcmVmZXJlbmNlcywgcG9saWN5VmVyc2lvbik7XG4gICAgICAgIHRoaXMuc2V0Q29va2llQmFubmVyVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhY2NlcHRDb29raWVzKCkge1xuICAgIGNvbnN0IHBvbGljeVZlcnNpb24gPSB0aGlzLnNldHRpbmdzLnBvbGljeVZlcnNpb247XG4gICAgdGhpcy5jb29raWVCYW5uZXJTZXJ2aWNlLnNldENvb2tpZXMoXG4gICAgICB0aGlzLmNvb2tpZVByZWZlcmVuY2VzIHx8IHsgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgIHBvbGljeVZlcnNpb25cbiAgICApO1xuICAgIHRoaXMuc2V0Q29va2llQmFubmVyVmlzaWJpbGl0eShmYWxzZSk7XG4gIH1cblxuICByZWplY3RDb29raWVzKCkge1xuICAgIGNvbnN0IHBvbGljeVZlcnNpb24gPSB0aGlzLnNldHRpbmdzLnBvbGljeVZlcnNpb247XG4gICAgdGhpcy5jb29raWVCYW5uZXJTZXJ2aWNlLnNldENvb2tpZXMoXG4gICAgICB7XG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBmdW5jdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgbWFya2V0aW5nOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIHBvbGljeVZlcnNpb25cbiAgICApO1xuICAgIHRoaXMuc2V0Q29va2llQmFubmVyVmlzaWJpbGl0eShmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZFNob3dDb29raWVCYW5uZXIoKSB7XG4gICAgdGhpcy5zZXRDb29raWVCYW5uZXJWaXNpYmlsaXR5KHRoaXMuY29va2llQmFubmVyU2VydmljZS5zaG91bGRTaG93Q29va2llQmFubmVyKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlQnV0dG9ucyhzaG91bGREaXNhYmxlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zaG91bGREaXNhYmxlID0gc2hvdWxkRGlzYWJsZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29va2llQmFubmVyVmlzaWJpbGl0eShzaG91bGRTaG93OiBib29sZWFuKSB7XG4gICAgdGhpcy5zaG93QmFubmVyID0gc2hvdWxkU2hvdztcbiAgICB0aGlzLmNvb2tpZUJhbm5lclNlcnZpY2UuaXNDb29raWVCYW5uZXJTaG93ZWQkLm5leHQoc2hvdWxkU2hvdyk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjOHktY29va2llLWJhbm5lclwiPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBwLXQtMTYgcC1iLTE2XCIgKm5nSWY9XCJzaG93QmFubmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIiAqbmdJZj1cInNldHRpbmdzLmNvb2tpZUJhbm5lclRpdGxlXCI+XG4gICAgICAgIDxoMz57eyBzZXR0aW5ncy5jb29raWVCYW5uZXJUaXRsZSB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLWItMTYgdmlzaWJsZS1zbSB2aXNpYmxlLXhzXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtN1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29va2llLWJhbm5lci1jb250ZW50IHRleHQtcHJlLWxpbmVcIj5cbiAgICAgICAgICB7eyBzZXR0aW5ncy5jb29raWVCYW5uZXJUZXh0IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGhyZWY9XCJ7eyBzZXR0aW5ncy5wb2xpY3lVcmwgfX1cIlxuICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJzZXR0aW5ncy5wb2xpY3lVcmxcIlxuICAgICAgICAgICBcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyAnU2VlIGFsc28gb3VyIFByaXZhY3kgTm90aWNlLicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNiBjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWItMTYgdmlzaWJsZS1zbSB2aXNpYmxlLXhzXCI+PC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY2NlcHRDb29raWVzKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2hvdWxkRGlzYWJsZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdBZ3JlZSBhbmQgcHJvY2VlZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNiBjb2wtbWQtMTJcIiAqbmdJZj1cIiEhY29va2llUHJlZmVyZW5jZXNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWItMTZcIj48L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWJsb2NrXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlamVjdENvb2tpZXMoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzaG91bGREaXNhYmxlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ1JlamVjdCBhbGxgY29va2llc2AnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTYgY29sLW1kLTEyXCIgKm5nSWY9XCIhIWNvb2tpZVByZWZlcmVuY2VzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1iLTE2XCI+PC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1ibG9ja1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkNvbmZpZ3VyZVByZWZlcmVuY2VzKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2hvdWxkRGlzYWJsZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdDb25maWd1cmUgcHJlZmVyZW5jZXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -21,6 +21,7 @@ export class AssetPropertiesComponent {
21
21
  this.customProperties = [];
22
22
  this.isEdit = false;
23
23
  this.isLoading = false;
24
+ this.POSITION_PROPERTY_KEY = 'c8y_Position';
24
25
  }
25
26
  ngOnChanges(changes) {
26
27
  if (changes.asset) {
@@ -49,6 +50,7 @@ export class AssetPropertiesComponent {
49
50
  if (mo.c8y_JsonSchema) {
50
51
  const [item] = await this.parseItem(mo, mo.c8y_JsonSchema.properties, this.asset);
51
52
  this.setItemRequired(item, mo);
53
+ this.updatePositionKeyLabel(item);
52
54
  properties.push(item);
53
55
  }
54
56
  }
@@ -208,6 +210,11 @@ export class AssetPropertiesComponent {
208
210
  }
209
211
  return model;
210
212
  }
213
+ updatePositionKeyLabel(item) {
214
+ if (item.label === this.POSITION_PROPERTY_KEY) {
215
+ item.label = gettext('Location');
216
+ }
217
+ }
211
218
  setItemRequired(item, mo) {
212
219
  const isAssetPropertyRequired = !!this.assetType?.c8y_IsAssetType?.properties.find(p => p.id === mo.id)?.isRequired;
213
220
  if (!isAssetPropertyRequired) {
@@ -223,11 +230,11 @@ export class AssetPropertiesComponent {
223
230
  }
224
231
  }
225
232
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AssetPropertiesComponent, deps: [{ token: i1.AssetTypesRealtimeService }, { token: i2.InventoryService }, { token: i2.InventoryBinaryService }, { token: i1.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
226
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AssetPropertiesComponent, selector: "c8y-asset-properties", inputs: { asset: "asset", properties: "properties" }, outputs: { assetChange: "assetChange" }, usesOnChanges: true, ngImport: i0, template: "<ng-container>\n <div class=\"card-header bg-inherit separator sticky-top\">\n <h1\n class=\"card-title p-t-4 p-b-4\"\n ngNonBindable\n translate\n [translateParams]=\"{ label: assetType?.label || '' | translate }\"\n >\n {{ label }} properties\n </h1>\n </div>\n <div class=\"card-block\">\n <div\n class=\"text-center\"\n *ngIf=\"isLoading\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <ng-container *ngIf=\"!isLoading\">\n <div\n class=\"card m-b-8\"\n title=\"{{ prop.description | translate }}\"\n *ngFor=\"let prop of customProperties\"\n [ngClass]=\"{ 'card-highlight': prop.isEdit }\"\n >\n <div\n class=\"card-block\"\n [ngClass]=\"{ 'p-b-0': prop.isEdit }\"\n >\n <div\n class=\"d-flex p-b-8 a-i-center\"\n *ngIf=\"!prop.isEdit\"\n >\n <p\n class=\"text-medium text-truncate\"\n title=\"{{ prop?.label | translate }}\"\n >\n {{ prop?.label | translate }}\n </p>\n <button\n class=\"btn btn-dot m-l-auto text-12\"\n [attr.aria-label]=\"'Edit' | translate\"\n tooltip=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"toggleEdit(prop)\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n </div>\n <c8y-asset-properties-item\n #assetProps\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n [complex]=\"prop.complex\"\n [isEdit]=\"prop.isEdit\"\n [jsonSchema]=\"prop.jsonSchema\"\n ></c8y-asset-properties-item>\n <div *ngIf=\"prop.key === 'c8y_Position'\">\n <c8y-asset-location\n [locationMO]=\"asset\"\n [isEdit]=\"prop.isEdit\"\n [form]=\"assetProps.form\"\n ></c8y-asset-location>\n </div>\n </div>\n <div\n class=\"card-footer p-t-0\"\n *ngIf=\"prop.isEdit\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit(prop)\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n [disabled]=\"!assetProps?.form?.valid || !assetProps?.form?.dirty \"\n (click)=\"save(assetProps.form.value, prop)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: i4.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "component", type: i5.AssetPropertiesItemComponent, selector: "c8y-asset-properties-item", inputs: ["key", "value", "label", "type", "file", "complex", "isEdit", "jsonSchema"] }, { kind: "component", type: i6.AssetLocationComponent, selector: "c8y-asset-location", inputs: ["isEdit", "locationMO", "form"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] }); }
233
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AssetPropertiesComponent, selector: "c8y-asset-properties", inputs: { asset: "asset", properties: "properties" }, outputs: { assetChange: "assetChange" }, usesOnChanges: true, ngImport: i0, template: "<ng-container>\n <div class=\"card-header bg-inherit separator sticky-top\">\n <h1\n class=\"card-title p-t-4 p-b-4\"\n ngNonBindable\n translate\n [translateParams]=\"{ label: assetType?.label || '' | translate }\"\n >\n {{ label }} properties\n </h1>\n </div>\n <div class=\"card-block\">\n <div\n class=\"text-center\"\n *ngIf=\"isLoading\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <ng-container *ngIf=\"!isLoading\">\n <div\n class=\"card m-b-8\"\n title=\"{{ prop.description | translate }}\"\n *ngFor=\"let prop of customProperties\"\n [ngClass]=\"{ 'card-highlight': prop.isEdit }\"\n >\n <div\n class=\"card-block\"\n [ngClass]=\"{ 'p-b-0': prop.isEdit }\"\n >\n <div\n class=\"d-flex p-b-8 a-i-center\"\n *ngIf=\"!prop.isEdit\"\n >\n <p\n class=\"text-medium text-truncate\"\n title=\"{{ prop?.label | translate }}\"\n >\n {{ prop?.label | translate }}\n </p>\n <button\n class=\"btn btn-dot m-l-auto text-12\"\n [attr.aria-label]=\"'Edit' | translate\"\n tooltip=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"toggleEdit(prop)\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n </div>\n <c8y-asset-properties-item\n #assetProps\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n [complex]=\"prop.complex\"\n [isEdit]=\"prop.isEdit\"\n [jsonSchema]=\"prop.jsonSchema\"\n ></c8y-asset-properties-item>\n <div *ngIf=\"prop.key === POSITION_PROPERTY_KEY\">\n <c8y-asset-location\n [locationMO]=\"asset\"\n [isEdit]=\"prop.isEdit\"\n [form]=\"assetProps.form\"\n ></c8y-asset-location>\n </div>\n </div>\n <div\n class=\"card-footer p-t-0\"\n *ngIf=\"prop.isEdit\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit(prop)\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n [disabled]=\"!assetProps?.form?.valid || !assetProps?.form?.dirty\"\n (click)=\"save(assetProps.form.value, prop)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: i4.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "component", type: i5.AssetPropertiesItemComponent, selector: "c8y-asset-properties-item", inputs: ["key", "value", "label", "type", "file", "complex", "isEdit", "jsonSchema"] }, { kind: "component", type: i6.AssetLocationComponent, selector: "c8y-asset-location", inputs: ["isEdit", "locationMO", "form"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] }); }
227
234
  }
228
235
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AssetPropertiesComponent, decorators: [{
229
236
  type: Component,
230
- args: [{ selector: 'c8y-asset-properties', template: "<ng-container>\n <div class=\"card-header bg-inherit separator sticky-top\">\n <h1\n class=\"card-title p-t-4 p-b-4\"\n ngNonBindable\n translate\n [translateParams]=\"{ label: assetType?.label || '' | translate }\"\n >\n {{ label }} properties\n </h1>\n </div>\n <div class=\"card-block\">\n <div\n class=\"text-center\"\n *ngIf=\"isLoading\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <ng-container *ngIf=\"!isLoading\">\n <div\n class=\"card m-b-8\"\n title=\"{{ prop.description | translate }}\"\n *ngFor=\"let prop of customProperties\"\n [ngClass]=\"{ 'card-highlight': prop.isEdit }\"\n >\n <div\n class=\"card-block\"\n [ngClass]=\"{ 'p-b-0': prop.isEdit }\"\n >\n <div\n class=\"d-flex p-b-8 a-i-center\"\n *ngIf=\"!prop.isEdit\"\n >\n <p\n class=\"text-medium text-truncate\"\n title=\"{{ prop?.label | translate }}\"\n >\n {{ prop?.label | translate }}\n </p>\n <button\n class=\"btn btn-dot m-l-auto text-12\"\n [attr.aria-label]=\"'Edit' | translate\"\n tooltip=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"toggleEdit(prop)\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n </div>\n <c8y-asset-properties-item\n #assetProps\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n [complex]=\"prop.complex\"\n [isEdit]=\"prop.isEdit\"\n [jsonSchema]=\"prop.jsonSchema\"\n ></c8y-asset-properties-item>\n <div *ngIf=\"prop.key === 'c8y_Position'\">\n <c8y-asset-location\n [locationMO]=\"asset\"\n [isEdit]=\"prop.isEdit\"\n [form]=\"assetProps.form\"\n ></c8y-asset-location>\n </div>\n </div>\n <div\n class=\"card-footer p-t-0\"\n *ngIf=\"prop.isEdit\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit(prop)\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n [disabled]=\"!assetProps?.form?.valid || !assetProps?.form?.dirty \"\n (click)=\"save(assetProps.form.value, prop)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n</ng-container>\n" }]
237
+ args: [{ selector: 'c8y-asset-properties', template: "<ng-container>\n <div class=\"card-header bg-inherit separator sticky-top\">\n <h1\n class=\"card-title p-t-4 p-b-4\"\n ngNonBindable\n translate\n [translateParams]=\"{ label: assetType?.label || '' | translate }\"\n >\n {{ label }} properties\n </h1>\n </div>\n <div class=\"card-block\">\n <div\n class=\"text-center\"\n *ngIf=\"isLoading\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <ng-container *ngIf=\"!isLoading\">\n <div\n class=\"card m-b-8\"\n title=\"{{ prop.description | translate }}\"\n *ngFor=\"let prop of customProperties\"\n [ngClass]=\"{ 'card-highlight': prop.isEdit }\"\n >\n <div\n class=\"card-block\"\n [ngClass]=\"{ 'p-b-0': prop.isEdit }\"\n >\n <div\n class=\"d-flex p-b-8 a-i-center\"\n *ngIf=\"!prop.isEdit\"\n >\n <p\n class=\"text-medium text-truncate\"\n title=\"{{ prop?.label | translate }}\"\n >\n {{ prop?.label | translate }}\n </p>\n <button\n class=\"btn btn-dot m-l-auto text-12\"\n [attr.aria-label]=\"'Edit' | translate\"\n tooltip=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"toggleEdit(prop)\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n </div>\n <c8y-asset-properties-item\n #assetProps\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n [complex]=\"prop.complex\"\n [isEdit]=\"prop.isEdit\"\n [jsonSchema]=\"prop.jsonSchema\"\n ></c8y-asset-properties-item>\n <div *ngIf=\"prop.key === POSITION_PROPERTY_KEY\">\n <c8y-asset-location\n [locationMO]=\"asset\"\n [isEdit]=\"prop.isEdit\"\n [form]=\"assetProps.form\"\n ></c8y-asset-location>\n </div>\n </div>\n <div\n class=\"card-footer p-t-0\"\n *ngIf=\"prop.isEdit\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit(prop)\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n [disabled]=\"!assetProps?.form?.valid || !assetProps?.form?.dirty\"\n (click)=\"save(assetProps.form.value, prop)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n</ng-container>\n" }]
231
238
  }], ctorParameters: () => [{ type: i1.AssetTypesRealtimeService }, { type: i2.InventoryService }, { type: i2.InventoryBinaryService }, { type: i1.AlertService }], propDecorators: { asset: [{
232
239
  type: Input
233
240
  }], assetChange: [{
@@ -235,4 +242,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
235
242
  }], properties: [{
236
243
  type: Input
237
244
  }] } });
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcHJvcGVydGllcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zdWItYXNzZXRzL2Fzc2V0LXByb3BlcnRpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc3ViLWFzc2V0cy9hc3NldC1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFHTCxzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxZQUFZLEVBQUUseUJBQXlCLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHdkYsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQU10QyxNQUFNLE9BQU8sd0JBQXdCO0lBWW5DLFlBQ1UsVUFBcUMsRUFDckMsU0FBMkIsRUFDM0IsZUFBdUMsRUFDdkMsS0FBbUI7UUFIbkIsZUFBVSxHQUFWLFVBQVUsQ0FBMkI7UUFDckMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLFVBQUssR0FBTCxLQUFLLENBQWM7UUFkbkIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUczRCxlQUFVLEdBQXFCLEVBQUUsQ0FBQztRQUdsQyxxQkFBZ0IsR0FBMEIsRUFBRSxDQUFDO1FBQzdDLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixjQUFTLEdBQUcsS0FBSyxDQUFDO0lBT2YsQ0FBQztJQUVKLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FB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T0FBTztRQUNULENBQUM7UUFDRCxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQztRQUNsRCxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDdEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBZ0IsQ0FBQztZQUM1RixlQUFlLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckQsQ0FBQztJQUNILENBQUM7OEdBek9VLHdCQUF3QjtrR0FBeEIsd0JBQXdCLGdMQ2pCckMsKzNGQStGQTs7MkZEOUVhLHdCQUF3QjtrQkFKcEMsU0FBUzsrQkFDRSxzQkFBc0I7NkxBSXZCLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUdQLFVBQVU7c0JBRFQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJTWFuYWdlZE9iamVjdEJpbmFyeSxcbiAgSW52ZW50b3J5QmluYXJ5U2VydmljZSxcbiAgSW52ZW50b3J5U2VydmljZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIEFzc2V0VHlwZXNSZWFsdGltZVNlcnZpY2UsIGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEFzc2V0UHJvcGVydGllc0l0ZW0gfSBmcm9tICcuL2Fzc2V0LXByb3BlcnRpZXMubW9kZWwnO1xuaW1wb3J0IHsgSlNPTlNjaGVtYTcgfSBmcm9tICdqc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBzb3J0QnksIHRvUGFpcnMsIGZyb21QYWlycywgZmluZCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYXNzZXQtcHJvcGVydGllcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NldC1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBc3NldFByb3BlcnRpZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBhc3NldDogSU1hbmFnZWRPYmplY3Q7XG4gIEBPdXRwdXQoKSBhc3NldENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SU1hbmFnZWRPYmplY3Q+KCk7XG5cbiAgQElucHV0KClcbiAgcHJvcGVydGllczogSU1hbmFnZWRPYmplY3RbXSA9IFtdO1xuXG4gIGFzc2V0VHlwZTogSU1hbmFnZWRPYmplY3Q7XG4gIGN1c3RvbVByb3BlcnRpZXM6IEFzc2V0UHJvcGVydGllc0l0ZW1bXSA9IFtdO1xuICBpc0VkaXQgPSBmYWxzZTtcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhc3NldFR5cGVzOiBBc3NldFR5cGVzUmVhbHRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5QmluYXJ5OiBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZVxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmFzc2V0KSB7XG4gICAgICAvLyBCYWNrIGJ1dHRvbiBoYW5kbGluZywgYXMgY29tcG9uZW50IGlzIG5vdCBkZXN0cm95ZWRcbiAgICAgIHRoaXMuYXNzZXRUeXBlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5jdXN0b21Qcm9wZXJ0aWVzID0gW107XG4gICAgICB0aGlzLmxvYWRBc3NldCgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRBc3NldCgpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgY29uc3QgYXNzZXRUeXBlJCA9IHRoaXMuYXNzZXRUeXBlcy5nZXRBc3NldFR5cGVCeU5hbWUkKHRoaXMuYXNzZXQudHlwZSk7XG4gICAgdGhpcy5hc3NldFR5cGUgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShhc3NldFR5cGUkKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gdGhpcy5rZWVwT3JkZXIoXG4gICAgICAgIHRoaXMuYXNzZXRUeXBlPy5jOHlfSXNBc3NldFR5cGU/LnByb3BlcnRpZXMsXG4gICAgICAgIHRoaXMucHJvcGVydGllc1xuICAgICAgKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc29sZS53YXJuKGV4KTtcbiAgICB9XG4gICAgdGhpcy5jdXN0b21Qcm9wZXJ0aWVzID0gYXdhaXQgdGhpcy5yZXNvbHZlQ3VzdG9tUHJvcGVydGllcyh0aGlzLnByb3BlcnRpZXMpO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBhc3luYyByZXNvbHZlQ3VzdG9tUHJvcGVydGllcyhtYW5hZ2VkT2JqZWN0czogSU1hbmFnZWRPYmplY3RbXSkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IG1vIG9mIG1hbmFnZWRPYmplY3RzKSB7XG4gICAgICBpZiAobW8uYzh5X0pzb25TY2hlbWEpIHtcbiAgICAgICAgY29uc3QgW2l0ZW1dID0gYXdhaXQgdGhpcy5wYXJzZUl0ZW0obW8sIG1vLmM4eV9Kc29uU2NoZW1hLnByb3BlcnRpZXMsIHRoaXMuYXNzZXQpO1xuICAgICAgICB0aGlzLnNldEl0ZW1SZXF1aXJlZChpdGVtLCBtbyk7XG4gICAgICAgIHByb3BlcnRpZXMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICBkZWxldGVUaXRsZUZyb21NT0pzb25TY2hlbWEobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3Qgc2NoZW1hUHJvcGVydGllcyA9IG1vPy5jOHlfSnNvblNjaGVtYT8ucHJvcGVydGllcztcbiAgICBjb25zdCBwcm9wZXJ0eSA9IE9iamVjdC5rZXlzKHNjaGVtYVByb3BlcnRpZXMgfHwge30pWzBdO1xuICAgIGRlbGV0ZSAobW8/LmM4eV9Kc29uU2NoZW1hPy5wcm9wZXJ0aWVzW3Byb3BlcnR5XSB8fCB7fSkudGl0bGU7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBvcmRlciB0aGUgY29tcGxleCBwcm9wZXJ0aWVzIGluIHRoZSBvcmRlciBzcGVjaWZpZWQgYnkgdGhlIHVzZXIgaW4gYXNzZXQgcHJvcGVydGllcyBzY3JlZW4uXG4gICAqIEBwYXJhbSBtbyAtIE1hbmFnZWQgb2JqZWN0IG9mIHRoZSBjb21wbGV4IHByb3BlcnR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYXNzZXQuXG4gICAqL1xuICBvcmRlckNvbXBsZXhQcm9wZXJ0aWVzKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGNvbXBsZXhQcm9wZXJ0aWVzID0gbW8uYzh5X0pzb25TY2hlbWEucHJvcGVydGllc1ttby5uYW1lXT8uWydwcm9wZXJ0aWVzJ107XG4gICAgY29uc3Qga2V5VmFsdWVzQXJyYXkgPSB0b1BhaXJzKGNvbXBsZXhQcm9wZXJ0aWVzKTtcbiAgICBjb25zdCBvcmRlcmVkUHJvcGVydGllcyA9IHNvcnRCeShrZXlWYWx1ZXNBcnJheSwgKFssIHZhbHVlXSkgPT4gdmFsdWUub3JkZXIpO1xuICAgIG1vLmM4eV9Kc29uU2NoZW1hLnByb3BlcnRpZXNbbW8ubmFtZV1bJ3Byb3BlcnRpZXMnXSA9IGZyb21QYWlycyhvcmRlcmVkUHJvcGVydGllcyk7XG4gIH1cblxuICBhc3luYyBwYXJzZUl0ZW0obW86IElNYW5hZ2VkT2JqZWN0LCBwcm9wZXJ0aWVzLCBhc3NldCk6IFByb21pc2U8QXNzZXRQcm9wZXJ0aWVzSXRlbVtdPiB7XG4gICAgaWYgKCFhc3NldCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyk7XG4gICAgY29uc3QgaXRlbXM6IEFzc2V0UHJvcGVydGllc0l0ZW1bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgY29uc3QgdHlwZSA9IHByb3BlcnRpZXNba2V5XS50eXBlO1xuICAgICAgY29uc3QgdGl0bGUgPSBwcm9wZXJ0aWVzW2tleV0udGl0bGU7XG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldFR5cGVWYWx1ZSh0eXBlLCBhc3NldFtrZXldKTtcbiAgICAgIGxldCBmaWxlO1xuICAgICAgaWYgKHR5cGUgPT09ICdmaWxlJyAmJiB2YWx1ZSkge1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdmFsdWVbMF0/LmZpbGU/LmlkIDogdmFsdWU7XG4gICAgICAgIGNvbnN0IGZpbGVEYXRhID0gYXdhaXQgdGhpcy5nZXRGaWxlTWFuYWdlZE9iamVjdChmaWxlSWQpO1xuICAgICAgICBmaWxlID0gZmlsZURhdGE7XG4gICAgICAgIHZhbHVlID0gW2ZpbGVEYXRhXTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlRGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgdmFsdWUgPSAhaXNOYU4odmFsdWVEYXRlLmdldFRpbWUoKSkgPyB2YWx1ZURhdGUgOiAnJztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyByZW1vdmUgdGl0bGUgdG8gYXZvaWQgZXhjZXNzaXZlIHByb3BlcnR5IG5hbWUgb24gYXNzZXQgY29tcGxleCBwcm9wZXJ0aWVzIGZvcm1cbiAgICAgICAgdGhpcy5kZWxldGVUaXRsZUZyb21NT0pzb25TY2hlbWEobW8pO1xuICAgICAgICB0aGlzLm9yZGVyQ29tcGxleFByb3BlcnRpZXMobW8pO1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgdmFsdWUgPSB7fTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gcHJvcGVydGllc1trZXldLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHZhbHVlW3Byb3BdID0gdGhpcy5nZXRUeXBlVmFsdWUocHJvcGVydGllc1trZXldLnByb3BlcnRpZXNbcHJvcF0udHlwZSwgbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbGFiZWw6IHRpdGxlIHx8IG1vLmxhYmVsLFxuICAgICAgICB0eXBlLFxuICAgICAgICBkZXNjcmlwdGlvbjogbW8uZGVzY3JpcHRpb24sXG4gICAgICAgIGZpbGUsXG4gICAgICAgIGNvbXBsZXg6XG4gICAgICAgICAgdHlwZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gYXdhaXQgdGhpcy5wYXJzZUl0ZW0obW8sIHByb3BlcnRpZXNba2V5XS5wcm9wZXJ0aWVzLCB2YWx1ZSlcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBpc0VkaXQ6IGZhbHNlLFxuICAgICAgICBqc29uU2NoZW1hOiBtby5jOHlfSnNvblNjaGVtYVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIHRvZ2dsZUVkaXQocHJvcDogQXNzZXRQcm9wZXJ0aWVzSXRlbSkge1xuICAgIHByb3AuaXNFZGl0ID0gIXByb3AuaXNFZGl0O1xuICB9XG5cbiAgYXN5bmMgZ2V0RmlsZU1hbmFnZWRPYmplY3QoaWQ6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChpZCk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlKHByb3BlcnR5VmFsdWUsIHByb3A6IEFzc2V0UHJvcGVydGllc0l0ZW0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHByb3AudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhpcy51cGRhdGVVbmRlZmluZWRUb1Byb3BUeXBlVmFsdWUocHJvcCwgcHJvcGVydHlWYWx1ZVtwcm9wLmtleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGRhdGVVbmRlZmluZWRUb1Byb3BUeXBlVmFsdWUocHJvcCwgcHJvcGVydHlWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHByb3BlcnR5VmFsdWUgPSBhd2FpdCB0aGlzLnVwbG9hZEZpbGVzKHByb3BlcnR5VmFsdWUsIHByb3AudmFsdWUpO1xuXG4gICAgICAvLyBBdm9pZCBtYWtpbmcgYSBQVVQgcmVxdWVzdCBjb250YWluaW5nIGp1c3QgdGhlIGlkLCBhcyByZXNwb25zZSBib2R5IG1pZ2h0IGJlIGluY29tcGxldGVcbiAgICAgIGNvbnN0IGhhc1ZhbHVlcyA9IE9iamVjdC52YWx1ZXMocHJvcGVydHlWYWx1ZSkuc29tZSh2YWx1ZSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIGlmICghaGFzVmFsdWVzKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlRWRpdChwcm9wKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdXBkYXRlZEFzc2V0ID0geyBpZDogdGhpcy5hc3NldC5pZCwgLi4ucHJvcGVydHlWYWx1ZSB9O1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS51cGRhdGUodXBkYXRlZEFzc2V0KTtcbiAgICAgIHRoaXMudG9nZ2xlRWRpdChwcm9wKTtcbiAgICAgIHRoaXMuYXNzZXQgPSBkYXRhO1xuICAgICAgdGhpcy5hc3NldENoYW5nZS5lbWl0KHRoaXMuYXNzZXQpO1xuICAgICAgYXdhaXQgdGhpcy5sb2FkQXNzZXQoKTtcbiAgICAgIHRoaXMuYWxlcnQuc3VjY2VzcyhnZXR0ZXh0KCdBc3NldCBwcm9wZXJ0aWVzIHVwZGF0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgdGhpcy50b2dnbGVFZGl0KHByb3ApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVW5kZWZpbmVkVG9Qcm9wVHlwZVZhbHVlKHByb3AsIHByb3BlcnR5VmFsdWUpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wZXJ0eVZhbHVlKSkge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBwcm9wLmNvbXBsZXggPyBmaW5kKHByb3AuY29tcGxleCwgeyBrZXk6IGtleSB9KSA6IHByb3A7XG4gICAgICBwcm9wZXJ0eVZhbHVlW2tleV0gPSB0aGlzLmdldFR5cGVWYWx1ZShwcm9wZXJ0eS50eXBlLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlVmFsdWUocHJvcFR5cGU6IHN0cmluZywgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgfHwgKHByb3BUeXBlID09PSAnYm9vbGVhbicgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkpIHJldHVybiB2YWx1ZTtcblxuICAgIHN3aXRjaCAocHJvcFR5cGUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuIHZhbHVlIHx8IHZhbHVlID09PSAwID8gdmFsdWUgOiBudWxsO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBrZWVwT3JkZXIoY29ycmVjdE9yZGVyZWRJZHMsIHByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBvcmRlcmVkUHJvcGVydGllcyA9IGNvcnJlY3RPcmRlcmVkSWRzLm1hcCgoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCBmb3VuZFByb3BlcnR5ID0gcHJvcGVydGllcy5maW5kKHByb3BlcnR5ID0+IHByb3BlcnR5LmlkID09PSBpZCk7XG4gICAgICBpZiAoIWZvdW5kUHJvcGVydHkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDdXN0b20gcHJvcGVydHkgbWlzbWF0Y2gnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3VuZFByb3BlcnR5O1xuICAgIH0pO1xuICAgIHJldHVybiBvcmRlcmVkUHJvcGVydGllcztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBsb2FkRmlsZXMobW9kZWw6IG9iamVjdCwgbW9JZD86IElNYW5hZ2VkT2JqZWN0QmluYXJ5W10pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhtb2RlbCk7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWxba2V5XSkgJiYgbW9kZWxba2V5XVswXT8uZmlsZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB1cGxvYWQgPSBhd2FpdCB0aGlzLmludmVudG9yeUJpbmFyeS5jcmVhdGUobW9kZWxba2V5XVswXS5maWxlKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKG1vSWQgJiYgbW9JZFswXSkge1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmludmVudG9yeS5jaGlsZEFkZGl0aW9uc1JlbW92ZShtb0lkWzBdLCB0aGlzLmFzc2V0LmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgfVxuICAgICAgICAgIG1vZGVsW2tleV0gPSB1cGxvYWQuZGF0YS5pZDtcbiAgICAgICAgICBhd2FpdCB0aGlzLmludmVudG9yeS5jaGlsZEFkZGl0aW9uc0FkZCh1cGxvYWQuZGF0YS5pZCwgdGhpcy5hc3NldC5pZCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJdGVtUmVxdWlyZWQoaXRlbTogQXNzZXRQcm9wZXJ0aWVzSXRlbSwgbW86IElNYW5hZ2VkT2JqZWN0KTogdm9pZCB7XG4gICAgY29uc3QgaXNBc3NldFByb3BlcnR5UmVxdWlyZWQgPSAhIXRoaXMuYXNzZXRUeXBlPy5jOHlfSXNBc3NldFR5cGU/LnByb3BlcnRpZXMuZmluZChcbiAgICAgIHAgPT4gcC5pZCA9PT0gbW8uaWRcbiAgICApPy5pc1JlcXVpcmVkO1xuICAgIGlmICghaXNBc3NldFByb3BlcnR5UmVxdWlyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNDb21wbGV4UHJvcGVydHkgPSAhIWl0ZW0/LmNvbXBsZXg/Lmxlbmd0aDtcbiAgICBpZiAoaXNDb21wbGV4UHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IGNvbXBsZXhQcm9wZXJ0eSA9IGl0ZW0uanNvblNjaGVtYT8ucHJvcGVydGllcz8uW21vLmM4eV9Kc29uU2NoZW1hLmtleV0gYXMgSlNPTlNjaGVtYTc7XG4gICAgICBjb21wbGV4UHJvcGVydHkucmVxdWlyZWQgPSBpdGVtLmNvbXBsZXgubWFwKCh7IGtleSB9KSA9PiBrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtLmpzb25TY2hlbWEucmVxdWlyZWQgPSBbbW8uYzh5X0pzb25TY2hlbWEua2V5XTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXI+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBiZy1pbmhlcml0IHNlcGFyYXRvciBzdGlja3ktdG9wXCI+XG4gICAgPGgxXG4gICAgICBjbGFzcz1cImNhcmQtdGl0bGUgcC10LTQgcC1iLTRcIlxuICAgICAgbmdOb25CaW5kYWJsZVxuICAgICAgdHJhbnNsYXRlXG4gICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInsgbGFiZWw6IGFzc2V0VHlwZT8ubGFiZWwgfHwgJycgfCB0cmFuc2xhdGUgfVwiXG4gICAgPlxuICAgICAge3sgbGFiZWwgfX0gcHJvcGVydGllc1xuICAgIDwvaDE+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9ja1wiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXJcIlxuICAgICAgKm5nSWY9XCJpc0xvYWRpbmdcIlxuICAgID5cbiAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgIDwvZGl2PlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjYXJkIG0tYi04XCJcbiAgICAgICAgdGl0bGU9XCJ7eyBwcm9wLmRlc2NyaXB0aW9uIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IHByb3Agb2YgY3VzdG9tUHJvcGVydGllc1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NhcmQtaGlnaGxpZ2h0JzogcHJvcC5pc0VkaXQgfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNhcmQtYmxvY2tcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3AtYi0wJzogcHJvcC5pc0VkaXQgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBwLWItOCBhLWktY2VudGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIXByb3AuaXNFZGl0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cFxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbWVkaXVtIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7IHByb3A/LmxhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgcHJvcD8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCBtLWwtYXV0byB0ZXh0LTEyXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInRWRpdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICB0b29sdGlwPVwie3sgJ0VkaXQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRWRpdChwcm9wKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGM4eUljb249XCJwZW5jaWxcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Yzh5LWFzc2V0LXByb3BlcnRpZXMtaXRlbVxuICAgICAgICAgICAgI2Fzc2V0UHJvcHNcbiAgICAgICAgICAgIFtmaWxlXT1cInByb3AuZmlsZVwiXG4gICAgICAgICAgICBba2V5XT1cInByb3Aua2V5XCJcbiAgICAgICAgICAgIFt0eXBlXT1cInByb3AudHlwZVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwicHJvcC52YWx1ZVwiXG4gICAgICAgICAgICBbY29tcGxleF09XCJwcm9wLmNvbXBsZXhcIlxuICAgICAgICAgICAgW2lzRWRpdF09XCJwcm9wLmlzRWRpdFwiXG4gICAgICAgICAgICBbanNvblNjaGVtYV09XCJwcm9wLmpzb25TY2hlbWFcIlxuICAgICAgICAgID48L2M4eS1hc3NldC1wcm9wZXJ0aWVzLWl0ZW0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3Aua2V5ID09PSAnYzh5X1Bvc2l0aW9uJ1wiPlxuICAgICAgICAgICAgPGM4eS1hc3NldC1sb2NhdGlvblxuICAgICAgICAgICAgICBbbG9jYXRpb25NT109XCJhc3NldFwiXG4gICAgICAgICAgICAgIFtpc0VkaXRdPVwicHJvcC5pc0VkaXRcIlxuICAgICAgICAgICAgICBbZm9ybV09XCJhc3NldFByb3BzLmZvcm1cIlxuICAgICAgICAgICAgPjwvYzh5LWFzc2V0LWxvY2F0aW9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY2FyZC1mb290ZXIgcC10LTBcIlxuICAgICAgICAgICpuZ0lmPVwicHJvcC5pc0VkaXRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRWRpdChwcm9wKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWFzc2V0UHJvcHM/LmZvcm0/LnZhbGlkIHx8ICFhc3NldFByb3BzPy5mb3JtPy5kaXJ0eSBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNhdmUoYXNzZXRQcm9wcy5mb3JtLnZhbHVlLCBwcm9wKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcHJvcGVydGllcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zdWItYXNzZXRzL2Fzc2V0LXByb3BlcnRpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc3ViLWFzc2V0cy9hc3NldC1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFHTCxzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxZQUFZLEVBQUUseUJBQXlCLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHdkYsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQU10QyxNQUFNLE9BQU8sd0JBQXdCO0lBYW5DLFlBQ1UsVUFBcUMsRUFDckMsU0FBMkIsRUFDM0IsZUFBdUMsRUFDdkMsS0FBbUI7UUFIbkIsZUFBVSxHQUFWLFVBQVUsQ0FBMkI7UUFDckMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLFVBQUssR0FBTCxLQUFLLENBQWM7UUFmbkIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUczRCxlQUFVLEdBQXFCLEVBQUUsQ0FBQztRQUdsQyxxQkFBZ0IsR0FBMEIsRUFBRSxDQUFDO1FBQzdDLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLDBCQUFxQixHQUFHLGNBQWMsQ0FBQztJQU9wQyxDQUFDO0lBRUosV0FBVyxD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LGVBQWUsQ0FBQyxJQUF5QixFQUFFLEVBQWtCO1FBQ25FLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQ2hGLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUNwQixFQUFFLFVBQVUsQ0FBQztRQUNkLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQzdCLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUM7UUFDbEQsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQWdCLENBQUM7WUFDNUYsZUFBZSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELENBQUM7SUFDSCxDQUFDOzhHQWpQVSx3QkFBd0I7a0dBQXhCLHdCQUF3QixnTENqQnJDLHE0RkErRkE7OzJGRDlFYSx3QkFBd0I7a0JBSnBDLFNBQVM7K0JBQ0Usc0JBQXNCOzZMQUl2QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFHUCxVQUFVO3NCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBJTWFuYWdlZE9iamVjdCxcbiAgSU1hbmFnZWRPYmplY3RCaW5hcnksXG4gIEludmVudG9yeUJpbmFyeVNlcnZpY2UsXG4gIEludmVudG9yeVNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBBc3NldFR5cGVzUmVhbHRpbWVTZXJ2aWNlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBc3NldFByb3BlcnRpZXNJdGVtIH0gZnJvbSAnLi9hc3NldC1wcm9wZXJ0aWVzLm1vZGVsJztcbmltcG9ydCB7IEpTT05TY2hlbWE3IH0gZnJvbSAnanNvbi1zY2hlbWEnO1xuaW1wb3J0IHsgc29ydEJ5LCB0b1BhaXJzLCBmcm9tUGFpcnMsIGZpbmQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFzc2V0LXByb3BlcnRpZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXNzZXQtcHJvcGVydGllcy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQXNzZXRQcm9wZXJ0aWVzQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgYXNzZXQ6IElNYW5hZ2VkT2JqZWN0O1xuICBAT3V0cHV0KCkgYXNzZXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElNYW5hZ2VkT2JqZWN0PigpO1xuXG4gIEBJbnB1dCgpXG4gIHByb3BlcnRpZXM6IElNYW5hZ2VkT2JqZWN0W10gPSBbXTtcblxuICBhc3NldFR5cGU6IElNYW5hZ2VkT2JqZWN0O1xuICBjdXN0b21Qcm9wZXJ0aWVzOiBBc3NldFByb3BlcnRpZXNJdGVtW10gPSBbXTtcbiAgaXNFZGl0ID0gZmFsc2U7XG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuICBQT1NJVElPTl9QUk9QRVJUWV9LRVkgPSAnYzh5X1Bvc2l0aW9uJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFzc2V0VHlwZXM6IEFzc2V0VHlwZXNSZWFsdGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlCaW5hcnk6IEludmVudG9yeUJpbmFyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlXG4gICkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuYXNzZXQpIHtcbiAgICAgIC8vIEJhY2sgYnV0dG9uIGhhbmRsaW5nLCBhcyBjb21wb25lbnQgaXMgbm90IGRlc3Ryb3llZFxuICAgICAgdGhpcy5hc3NldFR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmN1c3RvbVByb3BlcnRpZXMgPSBbXTtcbiAgICAgIHRoaXMubG9hZEFzc2V0KCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZEFzc2V0KCkge1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBhc3NldFR5cGUkID0gdGhpcy5hc3NldFR5cGVzLmdldEFzc2V0VHlwZUJ5TmFtZSQodGhpcy5hc3NldC50eXBlKTtcbiAgICB0aGlzLmFzc2V0VHlwZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKGFzc2V0VHlwZSQpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnByb3BlcnRpZXMgPSB0aGlzLmtlZXBPcmRlcihcbiAgICAgICAgdGhpcy5hc3NldFR5cGU/LmM4eV9Jc0Fzc2V0VHlwZT8ucHJvcGVydGllcyxcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zb2xlLndhcm4oZXgpO1xuICAgIH1cbiAgICB0aGlzLmN1c3RvbVByb3BlcnRpZXMgPSBhd2FpdCB0aGlzLnJlc29sdmVDdXN0b21Qcm9wZXJ0aWVzKHRoaXMucHJvcGVydGllcyk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHJlc29sdmVDdXN0b21Qcm9wZXJ0aWVzKG1hbmFnZWRPYmplY3RzOiBJTWFuYWdlZE9iamVjdFtdKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IFtdO1xuICAgIGZvciAoY29uc3QgbW8gb2YgbWFuYWdlZE9iamVjdHMpIHtcbiAgICAgIGlmIChtby5jOHlfSnNvblNjaGVtYSkge1xuICAgICAgICBjb25zdCBbaXRlbV0gPSBhd2FpdCB0aGlzLnBhcnNlSXRlbShtbywgbW8uYzh5X0pzb25TY2hlbWEucHJvcGVydGllcywgdGhpcy5hc3NldCk7XG4gICAgICAgIHRoaXMuc2V0SXRlbVJlcXVpcmVkKGl0ZW0sIG1vKTtcbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbktleUxhYmVsKGl0ZW0pO1xuICAgICAgICBwcm9wZXJ0aWVzLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZGVsZXRlVGl0bGVGcm9tTU9Kc29uU2NoZW1hKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IHNjaGVtYVByb3BlcnRpZXMgPSBtbz8uYzh5X0pzb25TY2hlbWE/LnByb3BlcnRpZXM7XG4gICAgY29uc3QgcHJvcGVydHkgPSBPYmplY3Qua2V5cyhzY2hlbWFQcm9wZXJ0aWVzIHx8IHt9KVswXTtcbiAgICBkZWxldGUgKG1vPy5jOHlfSnNvblNjaGVtYT8ucHJvcGVydGllc1twcm9wZXJ0eV0gfHwge30pLnRpdGxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gb3JkZXIgdGhlIGNvbXBsZXggcHJvcGVydGllcyBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyIGluIGFzc2V0IHByb3BlcnRpZXMgc2NyZWVuLlxuICAgKiBAcGFyYW0gbW8gLSBNYW5hZ2VkIG9iamVjdCBvZiB0aGUgY29tcGxleCBwcm9wZXJ0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGFzc2V0LlxuICAgKi9cbiAgb3JkZXJDb21wbGV4UHJvcGVydGllcyhtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCBjb21wbGV4UHJvcGVydGllcyA9IG1vLmM4eV9Kc29uU2NoZW1hLnByb3BlcnRpZXNbbW8ubmFtZV0/LlsncHJvcGVydGllcyddO1xuICAgIGNvbnN0IGtleVZhbHVlc0FycmF5ID0gdG9QYWlycyhjb21wbGV4UHJvcGVydGllcyk7XG4gICAgY29uc3Qgb3JkZXJlZFByb3BlcnRpZXMgPSBzb3J0Qnkoa2V5VmFsdWVzQXJyYXksIChbLCB2YWx1ZV0pID0+IHZhbHVlLm9yZGVyKTtcbiAgICBtby5jOHlfSnNvblNjaGVtYS5wcm9wZXJ0aWVzW21vLm5hbWVdWydwcm9wZXJ0aWVzJ10gPSBmcm9tUGFpcnMob3JkZXJlZFByb3BlcnRpZXMpO1xuICB9XG5cbiAgYXN5bmMgcGFyc2VJdGVtKG1vOiBJTWFuYWdlZE9iamVjdCwgcHJvcGVydGllcywgYXNzZXQpOiBQcm9taXNlPEFzc2V0UHJvcGVydGllc0l0ZW1bXT4ge1xuICAgIGlmICghYXNzZXQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpO1xuICAgIGNvbnN0IGl0ZW1zOiBBc3NldFByb3BlcnRpZXNJdGVtW10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBwcm9wZXJ0aWVzW2tleV0udHlwZTtcbiAgICAgIGNvbnN0IHRpdGxlID0gcHJvcGVydGllc1trZXldLnRpdGxlO1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRUeXBlVmFsdWUodHlwZSwgYXNzZXRba2V5XSk7XG4gICAgICBsZXQgZmlsZTtcbiAgICAgIGlmICh0eXBlID09PSAnZmlsZScgJiYgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlWzBdPy5maWxlPy5pZCA6IHZhbHVlO1xuICAgICAgICBjb25zdCBmaWxlRGF0YSA9IGF3YWl0IHRoaXMuZ2V0RmlsZU1hbmFnZWRPYmplY3QoZmlsZUlkKTtcbiAgICAgICAgZmlsZSA9IGZpbGVEYXRhO1xuICAgICAgICB2YWx1ZSA9IFtmaWxlRGF0YV07XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICBjb25zdCB2YWx1ZURhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIHZhbHVlID0gIWlzTmFOKHZhbHVlRGF0ZS5nZXRUaW1lKCkpID8gdmFsdWVEYXRlIDogJyc7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHRpdGxlIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBwcm9wZXJ0eSBuYW1lIG9uIGFzc2V0IGNvbXBsZXggcHJvcGVydGllcyBmb3JtXG4gICAgICAgIHRoaXMuZGVsZXRlVGl0bGVGcm9tTU9Kc29uU2NoZW1hKG1vKTtcbiAgICAgICAgdGhpcy5vcmRlckNvbXBsZXhQcm9wZXJ0aWVzKG1vKTtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgIHZhbHVlID0ge307XG4gICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHByb3BlcnRpZXNba2V5XS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICB2YWx1ZVtwcm9wXSA9IHRoaXMuZ2V0VHlwZVZhbHVlKHByb3BlcnRpZXNba2V5XS5wcm9wZXJ0aWVzW3Byb3BdLnR5cGUsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGxhYmVsOiB0aXRsZSB8fCBtby5sYWJlbCxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgZGVzY3JpcHRpb246IG1vLmRlc2NyaXB0aW9uLFxuICAgICAgICBmaWxlLFxuICAgICAgICBjb21wbGV4OlxuICAgICAgICAgIHR5cGUgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IGF3YWl0IHRoaXMucGFyc2VJdGVtKG1vLCBwcm9wZXJ0aWVzW2tleV0ucHJvcGVydGllcywgdmFsdWUpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNFZGl0OiBmYWxzZSxcbiAgICAgICAganNvblNjaGVtYTogbW8uYzh5X0pzb25TY2hlbWFcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICB0b2dnbGVFZGl0KHByb3A6IEFzc2V0UHJvcGVydGllc0l0ZW0pIHtcbiAgICBwcm9wLmlzRWRpdCA9ICFwcm9wLmlzRWRpdDtcbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVNYW5hZ2VkT2JqZWN0KGlkOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwoaWQpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZShwcm9wZXJ0eVZhbHVlLCBwcm9wOiBBc3NldFByb3BlcnRpZXNJdGVtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChwcm9wLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVW5kZWZpbmVkVG9Qcm9wVHlwZVZhbHVlKHByb3AsIHByb3BlcnR5VmFsdWVbcHJvcC5rZXldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlVW5kZWZpbmVkVG9Qcm9wVHlwZVZhbHVlKHByb3AsIHByb3BlcnR5VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBwcm9wZXJ0eVZhbHVlID0gYXdhaXQgdGhpcy51cGxvYWRGaWxlcyhwcm9wZXJ0eVZhbHVlLCBwcm9wLnZhbHVlKTtcblxuICAgICAgLy8gQXZvaWQgbWFraW5nIGEgUFVUIHJlcXVlc3QgY29udGFpbmluZyBqdXN0IHRoZSBpZCwgYXMgcmVzcG9uc2UgYm9keSBtaWdodCBiZSBpbmNvbXBsZXRlXG4gICAgICBjb25zdCBoYXNWYWx1ZXMgPSBPYmplY3QudmFsdWVzKHByb3BlcnR5VmFsdWUpLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCk7XG4gICAgICBpZiAoIWhhc1ZhbHVlcykge1xuICAgICAgICB0aGlzLnRvZ2dsZUVkaXQocHJvcCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVwZGF0ZWRBc3NldCA9IHsgaWQ6IHRoaXMuYXNzZXQuaWQsIC4uLnByb3BlcnR5VmFsdWUgfTtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkudXBkYXRlKHVwZGF0ZWRBc3NldCk7XG4gICAgICB0aGlzLnRvZ2dsZUVkaXQocHJvcCk7XG4gICAgICB0aGlzLmFzc2V0ID0gZGF0YTtcbiAgICAgIHRoaXMuYXNzZXRDaGFuZ2UuZW1pdCh0aGlzLmFzc2V0KTtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEFzc2V0KCk7XG4gICAgICB0aGlzLmFsZXJ0LnN1Y2Nlc3MoZ2V0dGV4dCgnQXNzZXQgcHJvcGVydGllcyB1cGRhdGVkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIHRoaXMudG9nZ2xlRWRpdChwcm9wKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVVuZGVmaW5lZFRvUHJvcFR5cGVWYWx1ZShwcm9wLCBwcm9wZXJ0eVZhbHVlKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydHlWYWx1ZSkpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcC5jb21wbGV4ID8gZmluZChwcm9wLmNvbXBsZXgsIHsga2V5OiBrZXkgfSkgOiBwcm9wO1xuICAgICAgcHJvcGVydHlWYWx1ZVtrZXldID0gdGhpcy5nZXRUeXBlVmFsdWUocHJvcGVydHkudHlwZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VHlwZVZhbHVlKHByb3BUeXBlOiBzdHJpbmcsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlIHx8IChwcm9wVHlwZSA9PT0gJ2Jvb2xlYW4nICYmIHZhbHVlICE9PSB1bmRlZmluZWQpKSByZXR1cm4gdmFsdWU7XG5cbiAgICBzd2l0Y2ggKHByb3BUeXBlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiB2YWx1ZSB8fCB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogbnVsbDtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUga2VlcE9yZGVyKGNvcnJlY3RPcmRlcmVkSWRzLCBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3Qgb3JkZXJlZFByb3BlcnRpZXMgPSBjb3JyZWN0T3JkZXJlZElkcy5tYXAoKHsgaWQgfSkgPT4ge1xuICAgICAgY29uc3QgZm91bmRQcm9wZXJ0eSA9IHByb3BlcnRpZXMuZmluZChwcm9wZXJ0eSA9PiBwcm9wZXJ0eS5pZCA9PT0gaWQpO1xuICAgICAgaWYgKCFmb3VuZFByb3BlcnR5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ3VzdG9tIHByb3BlcnR5IG1pc21hdGNoJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm91bmRQcm9wZXJ0eTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3JkZXJlZFByb3BlcnRpZXM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwbG9hZEZpbGVzKG1vZGVsOiBvYmplY3QsIG1vSWQ/OiBJTWFuYWdlZE9iamVjdEJpbmFyeVtdKTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobW9kZWwpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVsW2tleV0pICYmIG1vZGVsW2tleV1bMF0/LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdXBsb2FkID0gYXdhaXQgdGhpcy5pbnZlbnRvcnlCaW5hcnkuY3JlYXRlKG1vZGVsW2tleV1bMF0uZmlsZSk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChtb0lkICYmIG1vSWRbMF0pIHtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNSZW1vdmUobW9JZFswXSwgdGhpcy5hc3NldC5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBtb2RlbFtrZXldID0gdXBsb2FkLmRhdGEuaWQ7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNBZGQodXBsb2FkLmRhdGEuaWQsIHRoaXMuYXNzZXQuaWQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUG9zaXRpb25LZXlMYWJlbChpdGVtOiBBc3NldFByb3BlcnRpZXNJdGVtKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0ubGFiZWwgPT09IHRoaXMuUE9TSVRJT05fUFJPUEVSVFlfS0VZKSB7XG4gICAgICBpdGVtLmxhYmVsID0gZ2V0dGV4dCgnTG9jYXRpb24nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEl0ZW1SZXF1aXJlZChpdGVtOiBBc3NldFByb3BlcnRpZXNJdGVtLCBtbzogSU1hbmFnZWRPYmplY3QpOiB2b2lkIHtcbiAgICBjb25zdCBpc0Fzc2V0UHJvcGVydHlSZXF1aXJlZCA9ICEhdGhpcy5hc3NldFR5cGU/LmM4eV9Jc0Fzc2V0VHlwZT8ucHJvcGVydGllcy5maW5kKFxuICAgICAgcCA9PiBwLmlkID09PSBtby5pZFxuICAgICk/LmlzUmVxdWlyZWQ7XG4gICAgaWYgKCFpc0Fzc2V0UHJvcGVydHlSZXF1aXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc0NvbXBsZXhQcm9wZXJ0eSA9ICEhaXRlbT8uY29tcGxleD8ubGVuZ3RoO1xuICAgIGlmIChpc0NvbXBsZXhQcm9wZXJ0eSkge1xuICAgICAgY29uc3QgY29tcGxleFByb3BlcnR5ID0gaXRlbS5qc29uU2NoZW1hPy5wcm9wZXJ0aWVzPy5bbW8uYzh5X0pzb25TY2hlbWEua2V5XSBhcyBKU09OU2NoZW1hNztcbiAgICAgIGNvbXBsZXhQcm9wZXJ0eS5yZXF1aXJlZCA9IGl0ZW0uY29tcGxleC5tYXAoKHsga2V5IH0pID0+IGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0uanNvblNjaGVtYS5yZXF1aXJlZCA9IFttby5jOHlfSnNvblNjaGVtYS5rZXldO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lcj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJnLWluaGVyaXQgc2VwYXJhdG9yIHN0aWNreS10b3BcIj5cbiAgICA8aDFcbiAgICAgIGNsYXNzPVwiY2FyZC10aXRsZSBwLXQtNCBwLWItNFwiXG4gICAgICBuZ05vbkJpbmRhYmxlXG4gICAgICB0cmFuc2xhdGVcbiAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwieyBsYWJlbDogYXNzZXRUeXBlPy5sYWJlbCB8fCAnJyB8IHRyYW5zbGF0ZSB9XCJcbiAgICA+XG4gICAgICB7eyBsYWJlbCB9fSBwcm9wZXJ0aWVzXG4gICAgPC9oMT5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiXG4gICAgICAqbmdJZj1cImlzTG9hZGluZ1wiXG4gICAgPlxuICAgICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNhcmQgbS1iLThcIlxuICAgICAgICB0aXRsZT1cInt7IHByb3AuZGVzY3JpcHRpb24gfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAqbmdGb3I9XCJsZXQgcHJvcCBvZiBjdXN0b21Qcm9wZXJ0aWVzXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnY2FyZC1oaWdobGlnaHQnOiBwcm9wLmlzRWRpdCB9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY2FyZC1ibG9ja1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAncC1iLTAnOiBwcm9wLmlzRWRpdCB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IHAtYi04IGEtaS1jZW50ZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCIhcHJvcC5pc0VkaXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1tZWRpdW0gdGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgcHJvcD8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBwcm9wPy5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90IG0tbC1hdXRvIHRleHQtMTJcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidFZGl0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnRWRpdCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFZGl0KHByb3ApXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInBlbmNpbFwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxjOHktYXNzZXQtcHJvcGVydGllcy1pdGVtXG4gICAgICAgICAgICAjYXNzZXRQcm9wc1xuICAgICAgICAgICAgW2ZpbGVdPVwicHJvcC5maWxlXCJcbiAgICAgICAgICAgIFtrZXldPVwicHJvcC5rZXlcIlxuICAgICAgICAgICAgW3R5cGVdPVwicHJvcC50eXBlXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJwcm9wLnZhbHVlXCJcbiAgICAgICAgICAgIFtjb21wbGV4XT1cInByb3AuY29tcGxleFwiXG4gICAgICAgICAgICBbaXNFZGl0XT1cInByb3AuaXNFZGl0XCJcbiAgICAgICAgICAgIFtqc29uU2NoZW1hXT1cInByb3AuanNvblNjaGVtYVwiXG4gICAgICAgICAgPjwvYzh5LWFzc2V0LXByb3BlcnRpZXMtaXRlbT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09IFBPU0lUSU9OX1BST1BFUlRZX0tFWVwiPlxuICAgICAgICAgICAgPGM4eS1hc3NldC1sb2NhdGlvblxuICAgICAgICAgICAgICBbbG9jYXRpb25NT109XCJhc3NldFwiXG4gICAgICAgICAgICAgIFtpc0VkaXRdPVwicHJvcC5pc0VkaXRcIlxuICAgICAgICAgICAgICBbZm9ybV09XCJhc3NldFByb3BzLmZvcm1cIlxuICAgICAgICAgICAgPjwvYzh5LWFzc2V0LWxvY2F0aW9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY2FyZC1mb290ZXIgcC10LTBcIlxuICAgICAgICAgICpuZ0lmPVwicHJvcC5pc0VkaXRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRWRpdChwcm9wKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWFzc2V0UHJvcHM/LmZvcm0/LnZhbGlkIHx8ICFhc3NldFByb3BzPy5mb3JtPy5kaXJ0eVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2F2ZShhc3NldFByb3BzLmZvcm0udmFsdWUsIHByb3ApXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -84,7 +84,7 @@ export class AlarmWidgetService {
84
84
  order: order,
85
85
  isRealtime: oldConfig.realtime,
86
86
  device: oldConfig.device,
87
- showAlarmsForChildren: false,
87
+ showAlarmsForChildren: true,
88
88
  severities: oldConfig.options.severity,
89
89
  status: this.allValuesFalse(oldConfig.options.status)
90
90
  ? {
@@ -341,4 +341,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
341
341
  type: Injectable,
342
342
  args: [{ providedIn: 'root' }]
343
343
  }], ctorParameters: () => [{ type: i1.AlarmsViewService }] });
344
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0td2lkZ2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9hbGFybXMvYWxhcm0td2lkZ2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsV0FBVyxFQUVYLFFBQVEsRUFFUixlQUFlLEVBQ2hCLE1BQU0sYUFBYSxDQUFDO0FBR3JCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFDTCxrQkFBa0IsRUFJbEIsdUJBQXVCLEVBQ3hCLE1BQU0sMkJBQTJCLENBQUM7OztBQUVuQyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFHcEMsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixZQUFvQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtJQUFHLENBQUM7SUFFNUQ7Ozs7Ozs7O09BUUc7SUFDSCx5QkFBeUIsQ0FDdkIsSUFBbUQ7UUFFbkQsT0FBTyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCwwQkFBMEIsQ0FBQyxpQkFBMEIsRUFBRSxRQUFpQjtRQUN0RSxPQUFPO1lBQ0wsS0FBSyxFQUFFLGtCQUFrQixDQUFDLFNBQVM7WUFDbkMsVUFBVSxFQUNSLFFBQVEsS0FBSyx1QkFBdUI7Z0JBQ2xDLENBQUMsQ0FBRTtvQkFDQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJO29CQUN6QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJO29CQUN0QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJ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QUFhLEVBQUUsTUFBZ0IsRUFBRSxNQUE2QjtRQUM3RSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxlQUFlLENBQUMsTUFBNkIsRUFBRSxLQUFhO1FBQzFELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUN2RixDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNLLG9CQUFvQixDQUFDLFdBQXFCO1FBQ2hELE9BQU8sWUFBWSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDN0MsQ0FBQzs4R0F0V1Usa0JBQWtCO2tIQUFsQixrQkFBa0IsY0FETCxNQUFNOzsyRkFDbkIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFsYXJtUXVlcnlGaWx0ZXIsXG4gIEFsYXJtU3RhdHVzU2V0dGluZ3MsXG4gIEFsYXJtU3RhdHVzLFxuICBJQWxhcm0sXG4gIFNldmVyaXR5LFxuICBTZXZlcml0eUZpbHRlcixcbiAgU0VWRVJJVFlfTEFCRUxTXG59IGZyb20gJ0BjOHkvY2xpZW50JztcblxuaW1wb3J0IHsgU2V2ZXJpdHlTZXR0aW5ncywgU2V2ZXJpdHlUeXBlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxhcm1zVmlld1NlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FsYXJtcyc7XG5pbXBvcnQge1xuICBBTEFSTV9PUkRFUl9WQUxVRVMsXG4gIEFsYXJtTGlzdFdpZGdldENvbmZpZyxcbiAgQWxhcm1PcmRlclR5cGUsXG4gIExlZ2FjeUFsYXJtTGlzdENvbmZpZyxcbiAgUkVDRU5UX0FMQVJNU19XSURHRVRfSURcbn0gZnJvbSAnLi9hbGFybS1saXN0LXdpZGdldC5tb2RlbCc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1BBR0VfU0laRSA9IDIwO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFsYXJtV2lkZ2V0U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWxhcm1zVmlld1NlcnZpY2U6IEFsYXJtc1ZpZXdTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIGRhdGEgZm9sbG93cyB0aGUgTGVnYWN5QWxhcm1Db25maWcgc3RydWN0dXJlLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgYSBnaXZlbiBkYXRhIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBMZWdhY3lBbGFybUNvbmZpZ1xuICAgKiBieSBjaGVja2luZyBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSAnb3B0aW9ucycgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gICAqIEByZXR1cm5zIC0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGRhdGEgb2JqZWN0IGlzIGEgTGVnYWN5QWxhcm1Db25maWcsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgaXNPbGRBbGFybUNvbmZpZ1N0cnVjdHVyZShcbiAgICBkYXRhOiBMZWdhY3lBbGFybUxpc3RDb25maWcgfCBBbGFybUxpc3RXaWRnZXRDb25maWdcbiAgKTogZGF0YSBpcyBMZWdhY3lBbGFybUxpc3RDb25maWcge1xuICAgIHJldHVybiBkYXRhICE9PSBudWxsICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAnb3B0aW9ucycgaW4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHByZWRlZmluZWQgd2lkZ2V0IGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgbmV3IGNvbmZpZ3VyYXRpb24gb2JqZWN0IGJhc2VkIG9uXG4gICAqIGEgd2lkZ2V0cyBJRCAodGhhdCBkZXRlcm1pbmVzIGlmIGlzIGEgbGVnYWN5IFJlY2VudCBvciBDcml0aWNhbCBhbGFybXMgd2lkZ2V0KS5cbiAgICpcbiAgICogQHBhcmFtIGlzSW50ZXJ2YWxSZWZyZXNoIC0gZGV0ZXJtaW5lcyBhIHR5cGUgb2YgYSByZWZyZXNoLlxuICAgKiBAcGFyYW0gd2lkZ2V0SWQgLSBkZXRlcm1pbmVzIGlmIGEgY29uZmlnIHNob3VsZCBiZSBkb25lIGZvciBSZWNlbnQgb3IgQ3JpdGljYWwgYWxhcm1zIHdpZGdldC5cbiAgICogQHJldHVybnMgVGhlIG5ldywgcHJlZGVmaW5lZCBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICovXG4gIGdldFByZWRlZmluZWRDb25maWd1cmF0aW9uKGlzSW50ZXJ2YWxSZWZyZXNoOiBib29sZWFuLCB3aWRnZXRJZD86IHN0cmluZyk6IEFsYXJtTGlzdFdpZGdldENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9yZGVyOiBBTEFSTV9PUkRFUl9WQUxVRVMuQllfQUNUSVZFLFxuICAgICAgc2V2ZXJpdGllczpcbiAgICAgICAgd2lkZ2V0SWQgPT09IFJFQ0VOVF9BTEFSTVNfV0lER0VUX0lEXG4gICAgICAgICAgPyAoe1xuICAgICAgICAgICAgICBbU2V2ZXJpdHkuQ1JJVElDQUxdOiB0cnVlLFxuICAgICAgICAgICAgICBbU2V2ZXJpdHkuTUFKT1JdOiB0cnVlLFxuICAgICAgICAgICAgICBbU2V2ZXJpdHkuTUlOT1JdOiB0cnVlLFxuICAgICAgICAgICAgICBbU2V2ZXJpdHkuV0FSTklOR106IHRydWVcbiAgICAgICAgICAgIH0gYXMgU2V2ZXJpdHlTZXR0aW5ncylcbiAgICAgICAgICA6ICh7XG4gICAgICAgICAgICAgIFtTZXZlcml0eS5DUklUSUNBTF06IHRydWUsXG4gICAgICAgICAgICAgIFtTZXZlcml0eS5NQUpPUl06IGZhbHNlLFxuICAgICAgICAgICAgICBbU2V2ZXJpdHkuTUlOT1JdOiBmYWxzZSxcbiAgICAgICAgICAgICAgW1NldmVyaXR5LldBUk5JTkddOiBmYWxzZVxuICAgICAgICAgICAgfSBhcyBTZXZlcml0eVNldHRpbmdzKSxcbiAgICAgIHN0YXR1czpcbiAgICAgICAgd2lkZ2V0SWQgPT09IFJFQ0VOVF9BTEFSTVNfV0lER0VUX0lEXG4gICAgICAgICAgPyAoe1xuICAgICAgICAgICAgICBbQWxhcm1TdGF0dXMuQUNLTk9XTEVER0VEXTogdHJ1ZSxcbiAgICAgICAgICAgICAgW0FsYXJtU3RhdHVzLkFDVElWRV06IHRydWUsXG4gICAgICAgICAgICAgIFtBbGFybVN0YXR1cy5DTEVBUkVEXTogdHJ1ZVxuICAgICAgICAgICAgfSBhcyBBbGFybVN0YXR1c1NldHRpbmdzKVxuICAgICAgICAgIDogKHtcbiAgICAgICAgICAgICAgW0FsYXJtU3RhdHVzLkFDS05PV0xFREdFRF06IGZhbHNlLFxuICAgICAgICAgICAgICBbQWxhcm1TdGF0dXMuQUNUSVZFXTogdHJ1ZSxcbiAgICAgICAgICAgICAgW0FsYXJtU3RhdHVzLkNMRUFSRURdOiBmYWxzZVxuICAgICAgICAgICAgfSBhcyBBbGFybVN0YXR1c1NldHRpbmdzKSxcbiAgICAgIHR5cGVzOiBbJyddLFxuICAgICAgaXNSZWFsdGltZTogIWlzSW50ZXJ2YWxSZWZyZXNoLFxuICAgICAgaXNBdXRvUmVmcmVzaEVuYWJsZWQ6IHRydWUsXG4gICAgICByZWZyZXNoSW50ZXJ2YWw6IGlzSW50ZXJ2YWxSZWZyZXNoID8gdGhpcy5hbGFybXNWaWV3U2VydmljZS5ERUZBVUxUX0lOVEVSVkFMX1ZBTFVFIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIGEgTGVnYWN5QWxhcm1Db25maWcgb2JqZWN0IGludG8gYW4gQWxhcm1MaXN0V2lkZ2V0Q29uZmlnIG9iamVjdC5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBtYXBzIHRoZSBwcm9wZXJ0aWVzIGZyb20gYW4gb2xkIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIChMZWdhY3lBbGFybUNvbmZpZylcbiAgICogdG8gYSBuZXcgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKEFsYXJtTGlzdFdpZGdldENvbmZpZykuXG4gICAqXG4gICAqIEBwYXJhbSBvbGRDb25maWcgLSBUaGUgb2xkIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIGJlIHRyYW5zZm9ybWVkLlxuICAgKiBAcmV0dXJucyAtIFRoZSBuZXcgY29uZmlndXJhdGlvbiBvYmplY3QgbWFwcGVkIGZyb20gdGhlIG9sZCBvbmUuXG4gICAqL1xuICBtYXBUb05ld0NvbmZpZ1N0cnVjdHVyZShcbiAgICBvbGRDb25maWc6IExlZ2FjeUFsYXJtTGlzdENvbmZpZyxcbiAgICBpc0ludGVydmFsUmVmcmVzaDogYm9vbGVhblxuICApOiBBbGFybUxpc3RXaWRnZXRDb25maWcge1xuICAgIGNvbnN0IG9yZGVyOiBBbGFybU9yZGVyVHlwZSA9XG4gICAgICBvbGRDb25maWcub3B0aW9ucy5vcmRlck1vZGUgPT09ICdBQ1RJVkVfRklSU1QnXG4gICAgICAgID8gQUxBUk1fT1JERVJfVkFMVUVTLkJZX0FDVElWRVxuICAgICAgICA6IEFMQVJNX09SREVSX1ZBTFVFUy5CWV9TRVZFUklUWTtcblxuICAgIGlmICghdGhpcy5pc0NvbnRhaW5pbmdBbGxTZXZlcml0eVR5cGVzKG9sZENvbmZpZy5vcHRpb25zLnNldmVyaXR5KSkge1xuICAgICAgb2xkQ29uZmlnLm9wdGlvbnMuc2V2ZXJpdHkgPSB0aGlzLmFkZEFsbE1pc3NpbmdTZXZlcml0eVR5cGVzKG9sZENvbmZpZy5vcHRpb25zLnNldmVyaXR5KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3JkZXI6IG9yZGVyLFxuICAgICAgaXNSZWFsdGltZTogb2xkQ29uZmlnLnJlYWx0aW1lLFxuICAgICAgZGV2aWNlOiBvbGRDb25maWcuZGV2aWNlLFxuICAgICAgc2hvd0FsYXJtc0ZvckNoaWxkcmVuOiBmYWxzZSxcbiAgICAgIHNldmVyaXRpZXM6IG9sZENvbmZpZy5vcHRpb25zLnNldmVyaXR5LFxuICAgICAgc3RhdHVzOiB0aGlzLmFsbFZhbHVlc0ZhbHNlKG9sZENvbmZpZy5vcHRpb25zLnN0YXR1cylcbiAgICAgICAgPyAoe1xuICAgICAgICAgICAgW0FsYXJtU3RhdHVzLkFDS05PV0xFREdFRF06IHRydWUsXG4gICAgICAgICAgICBbQWxhcm1TdGF0dXMuQUNUSVZFXTogdHJ1ZSxcbiAgICAgICAgICAgIFtBbGFybVN0YXR1cy5DTEVBUkVEXTogdHJ1ZVxuICAgICAgICAgIH0gYXMgQWxhcm1TdGF0dXNTZXR0aW5ncylcbiAgICAgICAgOiBvbGRDb25maWcub3B0aW9ucy5zdGF0dXMsXG4gICAgICB0eXBlczogb2xkQ29uZmlnLm9wdGlvbnMudHlwZXM/Lmxlbmd0aCA/IG9sZENvbmZpZy5vcHRpb25zLnR5cGVzIDogWycnXSxcbiAgICAgIGlzQXV0b1JlZnJlc2hFbmFibGVkOiB0cnVlLFxuICAgICAgcmVmcmVzaEludGVydmFsOiBpc0ludGVydmFsUmVmcmVzaCA/IHRoaXMuYWxhcm1zVmlld1NlcnZpY2UuREVGQVVMVF9JTlRFUlZBTF9WQUxVRSA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCBzZXZlcml0eSBvYmplY3QgY29udGFpbnMgYWxsIHRoZSBwcmVkZWZpbmVkIHNldmVyaXR5IHR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0gc2V2ZXJpdHkgLSBBIHJlY29yZCBvYmplY3Qgd2hlcmUga2V5cyBhcmUgc2V2ZXJpdHkgdHlwZSBzdHJpbmdzIGFuZCB2YWx1ZXMgYXJlIGJvb2xlYW4uXG4gICAqICAgICAgICAgICAgICAgICAtIFRoaXMgb2JqZWN0IGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgcHJlZGVmaW5lZCBzZXZlcml0eSB0eXBlcy5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIGFsbCBwcmVkZWZpbmVkIHNldmVyaXR5IHR5cGVzIGFyZSBwcmVzZW50IGluIHRoZSBzZXZlcml0eSBvYmplY3Q7IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAgICovXG4gIGlzQ29udGFpbmluZ0FsbFNldmVyaXR5VHlwZXMoc2V2ZXJpdHk6IFNldmVyaXR5RmlsdGVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFNFVkVSSVRZX0xBQkVMUykuZXZlcnkoc2V2ZXJpdHlUeXBlID0+IHNldmVyaXR5VHlwZSBpbiBzZXZlcml0eSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbnkgbWlzc2luZyBzZXZlcml0eSB0eXBlcyB0byB0aGUgcHJvdmlkZWQgc2V2ZXJpdHkgb2JqZWN0IHdpdGggYSBkZWZhdWx0IHZhbHVlIG9mIGBmYWxzZWAuXG4gICAqXG4gICAqIEBwYXJhbSBzZXZlcml0eSAtIEEgcmVjb3JkIG9iamVjdCB3aGVyZSBrZXlzIGFyZSBzZXZlcml0eSB0eXBlIHN0cmluZ3MgYW5kIHZhbHVlcyBhcmUgYm9vbGVhbi5cbiAgICogICAgICAgICAgICAgICAgIC0gTWlzc2luZyBzZXZlcml0eSB0eXBlcyB3aWxsIGJlIGFkZGVkIHRvIHRoaXMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgc2V2ZXJpdHkgb2JqZWN0LCB3aGljaCBpbmNsdWRlcyBhbGwgcHJlZGVmaW5lZCBzZXZlcml0eSB0eXBlcywgYWRkaW5nIGFueVxuICAgKiAgICAgICAgICB0aGF0IHdlcmUgbWlzc2luZyB3aXRoIGEgdmFsdWUgb2YgYGZhbHNlYC5cbiAgICovXG4gIGFkZEFsbE1pc3NpbmdTZXZlcml0eVR5cGVzKHNldmVyaXR5OiBTZXZlcml0eUZpbHRlcik6IFNldmVyaXR5RmlsdGVyIHtcbiAgICBPYmplY3Qua2V5cyhTRVZFUklUWV9MQUJFTFMpLmZvckVhY2goc2V2ZXJpdHlUeXBlID0+IHtcbiAgICAgIGlmICghKHNldmVyaXR5VHlwZSBpbiBzZXZlcml0eSkpIHtcbiAgICAgICAgc2V2ZXJpdHlbc2V2ZXJpdHlUeXBlXSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZXZlcml0eTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIGFuIEFsYXJtTGlzdFdpZGdldENvbmZpZyBvYmplY3QgdG8gYW4gQWxhcm1RdWVyeUZpbHRlci5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgcHJvdmlkZWQgQWxhcm1MaXN0V2lkZ2V0Q29uZmlnIGludG8gYSBmb3JtYXQgc3VpdGFibGUgZm9yIHF1ZXJ5aW5nIGFsYXJtcy5cbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGFsYXJtIGxpc3Qgd2lkZ2V0LlxuICAgKiBAcGFyYW0gcGFnZVNpemUgLSBPcHRpb25hbCBudW1iZXIgc3BlY2lmeWluZyB0aGUgc2l6ZSBvZiB0aGUgcGFnZXMgdG8gYmUgcmV0dXJuZWQgaW4gdGhlIHF1ZXJ5LlxuICAgKiBAcmV0dXJucyAtIFRoZSBxdWVyeSBmaWx0ZXIgb2JqZWN0IGNvbnN0cnVjdGVkIGZyb20gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBtYXBDb25maWdUb1F1ZXJ5RmlsdGVyKGNvbmZpZzogQWxhcm1MaXN0V2lkZ2V0Q29uZmlnLCBwYWdlU2l6ZT86IG51bWJlcik6IEFsYXJtUXVlcnlGaWx0ZXIge1xuICAgIGNvbnN0IGZpbHRlcjogQWxhcm1RdWVyeUZpbHRlciA9IHtcbiAgICAgIHBhZ2VTaXplOiBwYWdlU2l6ZSB8fCBERUZBVUxUX1BBR0VfU0laRSxcbiAgICAgIHF1ZXJ5OiB0aGlzLmdldE9yZGVyUGFyYW1ldGVycyhjb25maWcub3JkZXIpLFxuICAgICAgc2V2ZXJpdHk6IHRoaXMuZXh0cmFjdEZpbHRlclBhcmFtcyhjb25maWcuc2V2ZXJpdGllcyB8fCB7fSksXG4gICAgICBzdGF0dXM6IHRoaXMuZXh0cmFjdEZpbHRlclBhcmFtcyhjb25maWcuc3RhdHVzIHx8IHt9KSxcbiAgICAgIHR5cGU6IChjb25maWcudHlwZXMgfHwgW10pLmpvaW4oJywnKSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcbiAgICBpZiAoY29uZmlnLmRhdGVGaWx0ZXIpIHtcbiAgICAgIGZpbHRlci5sYXN0VXBkYXRlZEZyb20gPVxuICAgICAgICB0eXBlb2YgY29uZmlnLmRhdGVGaWx0ZXJbMF0gPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBjb25maWcuZGF0ZUZpbHRlclswXVxuICAgICAgICAgIDogY29uZmlnLmRhdGVGaWx0ZXJbMF0udG9JU09TdHJpbmcoKTtcbiAgICAgIGZpbHRlci5jcmVhdGVkVG8gPVxuICAgICAgICB0eXBlb2YgY29uZmlnLmRhdGVGaWx0ZXJbMV0gPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBjb25maWcuZGF0ZUZpbHRlclsxXVxuICAgICAgICAgIDogY29uZmlnLmRhdGVGaWx0ZXJbMV0udG9JU09TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5kZXZpY2UpIHtcbiAgICAgIGZpbHRlci5zb3VyY2UgPSBjb25maWcuZGV2aWNlLmlkO1xuICAgICAgZmlsdGVyLndpdGhTb3VyY2VBc3NldHMgPSB0cnVlO1xuICAgICAgZmlsdGVyLndpdGhTb3VyY2VEZXZpY2VzID0gdHJ1ZTtcbiAgICAgIGZpbHRlci53aXRoU291cmNlQXNzZXRzID0gY29uZmlnLnNob3dBbGFybXNGb3JDaGlsZHJlbiA/PyB0cnVlO1xuICAgICAgZmlsdGVyLndpdGhTb3VyY2VEZXZpY2VzID0gY29uZmlnLnNob3dBbGFybXNGb3JDaGlsZHJlbiA/PyB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGFuZCBjb25jYXRlbmF0ZXMgZmlsdGVyIHBhcmFtZXRlcnMgZnJvbSBhIGdpdmVuIG9iamVjdC5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhbiBvYmplY3QgY29udGFpbmluZyBmaWx0ZXIgc2V0dGluZ3MgKGVpdGhlciBTZXZlcml0eUZpbHRlclxuICAgKiBvciBBbGFybVN0YXR1c1NldHRpbmdzKSBhbmQgcmV0dXJucyBhIHN0cmluZyBvZiBhbGwga2V5cyB3aGVyZSB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpcyB0cnVlLlxuICAgKiBJZiB0aGUgb2JqZWN0IGlzIGVtcHR5IG9yIG51bGwsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC5cbiAgICpcbiAgICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgY29udGFpbmluZyBmaWx0ZXIgc2V0dGluZ3MuXG4gICAqIEByZXR1cm5zIC0gQSBjb25jYXRlbmF0ZWQgc3RyaW5nIG9mIGtleXMgd2l0aCB0cnVlIHZhbHVlcywgc2VwYXJhdGVkIGJ5IGNvbW1hcy5cbiAgICovXG4gIGV4dHJhY3RGaWx0ZXJQYXJhbXMob2JqOiBTZXZlcml0eUZpbHRlciB8IEFsYXJtU3RhdHVzU2V0dGluZ3MpOiBzdHJpbmcge1xuICAgIGlmICghb2JqKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhvYmopXG4gICAgICAuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlKVxuICAgICAgLm1hcCgoW2tleV0pID0+IGtleSlcbiAgICAgIC5qb2luKCcsJyk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhbiBpbmNvbWluZyByZWFsLXRpbWUgYWxhcm0gaGFzIGEgZGlmZmVyZW50IHN0YXR1cyB0aGFuIGFuIGV4aXN0aW5nIGFsYXJtLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgcHJvdmlkZWQgaW5jb21pbmcgcmVhbC10aW1lIGFsYXJtJ3Mgc3RhdHVzIGRpZmZlcnNcbiAgICogZnJvbSB0aGF0IG9mIGFuIGV4aXN0aW5nIGFsYXJtIHdpdGggdGhlIHNhbWUgSUQgaW4gdGhlIGdpdmVuIGFycmF5IG9mIGFsYXJtcy5cbiAgICpcbiAgICogQHBhcmFtIGV4aXN0aW5nQWxhcm1zIC0gVGhlIGFycmF5IG9mIGV4aXN0aW5nIGFsYXJtcy5cbiAgICogQHBhcmFtIGluY29taW5nUmVhbHRpbWVBbGFybSAtIFRoZSBpbmNvbWluZyByZWFsLXRpbWUgYWxhcm0gdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIC0gVHJ1ZSBpZiB0aGUgZXhpc3RpbmcgYWxhcm0ncyBzdGF0dXMgaGFzIGNoYW5nZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgICovXG4gIGhhc0V4aXN0aW5nQWxhcm1DaGFuZ2VkU3RhdHVzKGV4aXN0aW5nQWxhcm1zOiBJQWxhcm1bXSwgaW5jb21pbmdSZWFsdGltZUFsYXJtOiBJQWxhcm0pOiBib29sZWFuIHtcbiAgICBjb25zdCBleGlzdGluZ0FsYXJtID0gZXhpc3RpbmdBbGFybXMuZmluZChhbGFybSA9PiBhbGFybS5pZCA9PT0gaW5jb21pbmdSZWFsdGltZUFsYXJtLmlkKTtcbiAgICByZXR1cm4gISFleGlzdGluZ0FsYXJtICYmIGV4aXN0aW5nQWxhcm0uc3RhdHVzICE9PSBpbmNvbWluZ1JlYWx0aW1lQWxhcm0uc3RhdHVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYWxhcm1zIGJhc2VkIG9uIHRoZWlyIHN0YXR1cywgc2V2ZXJpdHksIGFuZCB0eXBlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gYWxhcm0sIGlkZW50aWZpZWQgZWl0aGVyIGJ5IGEgbnVtZXJpYyBJRCBvciBhbiBgSUFsYXJtYCBvYmplY3QsXG4gICAqIG1hdGNoZXMgc3BlY2lmaWMgY3JpdGVyaWEgZGVmaW5lZCBpbiBgYWxhcm1zYCBhbmQgb3B0aW9uYWxseSBgY29uZmlnYC5cbiAgICpcbiAgICogQHBhcmFtIGFsYXJtIC0gVGhlIGFsYXJtIHRvIGNoZWNrLCByZXByZXNlbnRlZCBlaXRoZXIgYnkgYSBudW1lcmljIElEIG9yIGFuIGBJQWxhcm1gIG9iamVjdC5cbiAgICogQHBhcmFtIGFsYXJtcyAtIEFuIGFycmF5IG9mIGBJQWxhcm1gIG9iamVjdHMgYWdhaW5zdCB3aGljaCB0aGUgZ2l2ZW4gYWxhcm0gaXMgZXZhbHVhdGVkLlxuICAgKiBAcGFyYW0gY29uZmlnIC0gT3B0aW9uYWwuIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBhbGFybSBsaXN0IHdpZGdldCwgdXNlZCB0byBkZWZpbmUgYWRkaXRpb25hbFxuICAgKiAgICAgICAgICAgICAgICAgZmlsdGVyaW5nIGNyaXRlcmlhLlxuICAgKlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFsYXJtIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBjcml0ZXJpYTsgb3RoZXJ3aXNlLCBgZmFsc2VgLlxuICAgKiAgICAgICAgICBJZiBgYWxhcm1gIGlzIGEgbnVtYmVyLCBpdCBhbHdheXMgcmV0dXJucyBgZmFsc2VgLlxuICAgKiAgICAgICAgICBJZiBgY29uZmlnYCBpcyBub3QgcHJvdmlkZWQsIGl0IHVzZXMgYSBsZWdhY3kgZmlsdGVyIGZvciBjcml0aWNhbCBhbGFybXMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIC0gV2hlbiBgYWxhcm1gIGlzIGEgbnVtZXJpYyBJRCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGZhbHNlYCBhcyBpdCBjYW5ub3QgbWF0Y2ggYWdhaW5zdCB0eXBlIGFuZCBzZXZlcml0eS5cbiAgICogLSBJZiBgY29uZmlnYCBpcyBub3QgcHJvdmlkZWQsIHRoZSBmdW5jdGlvbiBhc3N1bWVzIGEgbGVnYWN5IHNjZW5hcmlvIGZvciBmaWx0ZXJpbmcgYWxsIGNyaXRpY2FsIGFsYXJtcy5cbiAgICovXG4gIGZpbHRlckFsYXJtc0J5U3RhdHVzU2V2ZXJpdHlBbmRUeXBlKFxuICAgIGFsYXJtOiBudW1iZXIgfCBJQWxhcm0sXG4gICAgYWxhcm1zOiBJQWxhcm1bXSxcbiAgICBjb25maWc/OiBBbGFybUxpc3RXaWRnZXRDb25maWdcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBhbGFybSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pc0FsYXJtTWF0Y2hlZEJ5Q29uZmlnKGFsYXJtLCBhbGFybXMsIGNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhbGwgdmFsdWVzIGluIHRoZSBnaXZlbiBvYmplY3QgYXJlIGZhbHNlLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBldmVyeSB2YWx1ZSBpbiB0aGUgcHJvdmlkZWQgb2JqZWN0IHRvIHNlZSBpZiB0aGV5IGFyZSBhbGwgZmFsc2UuXG4gICAqXG4gICAqIEBwYXJhbSBvYmogLSBBbiBvYmplY3Qgd2l0aCBib29sZWFuIHZhbHVlcy5cbiAgICogQHJldHVybnMgLSBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgdmFsdWVzIGluIHRoZSBvYmplY3QgYXJlIGZhbHNlLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIGFsbFZhbHVlc0ZhbHNlKG9iajogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhvYmopLmV2ZXJ5KHZhbHVlID0+ICF2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIHN0cmluZyBvZiBvcmRlciBwYXJhbWV0ZXJzIGZvciBhIHF1ZXJ5IGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgYWxhcm0gb3JkZXIuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgYW4gYWxhcm0gb3JkZXIgYW5kIG1hcHMgaXQgdG8gYSBjb3JyZXNwb25kaW5nIHNldCBvZiBvcmRlciBwYXJhbWV0ZXJzLlxuICAgKiBJdCBzdXBwb3J0cyBkaWZmZXJlbnQgb3JkZXJpbmcgdHlwZXMsIHN1Y2ggYXMgQllfQUNUSVZFLCBCWV9TRVZFUklUWSwgYW5kIEJZX0RBVEVfQVNDRU5ESU5HLlxuICAgKiBUaGUgb3JkZXIgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBjb25zdHJ1Y3QgYSBxdWVyeSBzdHJpbmcgdGhhdCBkZXRlcm1pbmVzIHRoZSBvcmRlclxuICAgKiBpbiB3aGljaCBhbGFybXMgYXJlIHJldHJpZXZlZCBvciBkaXNwbGF5ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBvcmRlciAtIFRoZSBzcGVjaWZpZWQgb3JkZXIgZm9yIHNvcnRpbmcgYWxhcm1zIChlLmcuLCBCWV9BQ1RJVkUpLlxuICAgKiBAcmV0dXJucyAtIEEgc3RyaW5nIG9mIG9yZGVyIHBhcmFtZXRlcnMgdG8gYmUgdXNlZCBpbiBhIHF1ZXJ5LCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIG9yZGVyIHR5cGUgaXMgdW5yZWNvZ25pemVkLlxuICAgKi9cbiAgZ2V0T3JkZXJQYXJhbWV0ZXJzKG9yZGVyOiBBbGFybU9yZGVyVHlwZSk6IHN0cmluZyB7XG4gICAgbGV0IG9yZGVyUGFyYW1zOiBzdHJpbmdbXTtcblxuICAgIHN3aXRjaCAob3JkZXIpIHtcbiAgICAgIGNhc2UgQUxBUk1fT1JERVJfVkFMVUVTLkJZX0FDVElWRTpcbiAgICAgICAgb3JkZXJQYXJhbXMgPSBbJ3N0YXR1cyBhc2MnLCAnc2V2ZXJpdHkgYXNjJywgJ3RpbWUuZGF0ZSBkZXNjJywgJ3RleHQgYXNjJ107XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkT3JkZXJQYXJhbWV0ZXJzKG9yZGVyUGFyYW1zKTtcbiAgICAgIGNhc2UgQUxBUk1fT1JERVJfVkFMVUVTLkJZX1NFVkVSSVRZOlxuICAgICAgICBvcmRlclBhcmFtcyA9IFsnc2V2ZXJpdHkgYXNjJywgJ3RpbWUuZGF0ZSBkZXNjJywgJ3RleHQgYXNjJ107XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkT3JkZXJQYXJhbWV0ZXJzKG9yZGVyUGFyYW1zKTtcbiAgICAgIGNhc2UgQUxBUk1fT1JERVJfVkFMVUVTLkJZX0RBVEVfQVNDRU5ESU5HOlxuICAgICAgICBvcmRlclBhcmFtcyA9IFsndGltZS5kYXRlIGFzYycsICd0ZXh0IGFzYyddO1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZE9yZGVyUGFyYW1ldGVycyhvcmRlclBhcmFtcyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBvcmRlclBhcmFtcyA9IFsndGltZS5kYXRlIGRlc2MnLCAndGV4dCBhc2MnXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRPcmRlclBhcmFtZXRlcnMob3JkZXJQYXJhbXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGFuIGFsYXJtIGlzIG1hdGNoZWQgYnkgdGhlIHNwZWNpZmllZCB3aWRnZXQgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBldmFsdWF0ZXMgd2hldGhlciBhIGdpdmVuIGFsYXJtIHNob3VsZCBiZSBpbmNsdWRlZCBiYXNlZCBvbiB0aGUgc2V2ZXJpdHksXG4gICAqIHN0YXR1cywgYW5kIHR5cGUgZmlsdGVycyBkZWZpbmVkIGluIHRoZSBBbGFybUxpc3RXaWRnZXRDb25maWcuIEl0IGNoZWNrcyBpZiB0aGUgYWxhcm0nc1xuICAgKiBzZXZlcml0eSBhbmQgc3RhdHVzIG1hdGNoIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFuZCBpZiB0aGUgYWxhcm0ncyB0eXBlIGlzIGluY2x1ZGVkXG4gICAqIGluIHRoZSBjb25maWd1cmF0aW9uJ3MgdHlwZXMgKGlmIHNwZWNpZmllZCkuXG4gICAqXG4gICAqIEBpZ25vcmVcbiAgICogQHBhcmFtIGFsYXJtIC0gVGhlIGFsYXJtIHRvIGV2YWx1YXRlLlxuICAgKiBAcGFyYW0gYWxhcm1zIC0gQW4gYXJyYXkgb2YgZXhpc3RpbmcgYWxhcm1zLCB1c2VkIGZvciBzdGF0dXMgbWF0Y2hpbmcuXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byBtYXRjaCBhZ2FpbnN0LlxuICAgKiBAcmV0dXJucyAtIFJldHVybnMgYHRydWVgIGlmIHRoZSBhbGFybSBtYXRjaGVzIHRoZSBjb25maWd1cmF0aW9uIGNyaXRlcmlhOyBvdGhlcndpc2UsIGBmYWxzZWAuXG4gICAqL1xuICBpc0FsYXJtTWF0Y2hlZEJ5Q29uZmlnKGFsYXJtOiBJQWxhcm0sIGFsYXJtczogSUFsYXJtW10sIGNvbmZpZzogQWxhcm1MaXN0V2lkZ2V0Q29uZmlnKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNTZXZlcml0eU1hdGNoZWQgPSB0aGlzLmlzU2V2ZXJpdHlNYXRjaGluZyhhbGFybS5zZXZlcml0eSwgY29uZmlnKTtcbiAgICBjb25zdCBpc1N0YXR1c01hdGNoZWQgPSB0aGlzLmlzU3RhdHVzTWF0Y2hpbmcoYWxhcm0sIGFsYXJtcywgY29uZmlnKTtcbiAgICBjb25zdCBpc1R5cGVNYXRjaGVkID0gdGhpcy5pc1R5cGVzTWF0Y2hpbmcoY29uZmlnLCBhbGFybSk7XG5cbiAgICByZXR1cm4gaXNTZXZlcml0eU1hdGNoZWQgJiYgaXNTdGF0dXNNYXRjaGVkICYmIGlzVHlwZU1hdGNoZWQ7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgc2V2ZXJpdHkgb2YgYW4gYWxhcm0gbWF0Y2hlcyB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5nLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB0aGUgc2V2ZXJpdHkgb2YgYW4gYWxhcm0gaXMgaW5jbHVkZWQgaW4gdGhlXG4gICAqIHNldmVyaXR5IHNldHRpbmdzIGRlZmluZWQgaW4gdGhlIEFsYXJtTGlzdFdpZGdldENvbmZpZy5cbiAgICpcbiAgICogQGlnbm9yZVxuICAgKiBAcGFyYW0gc2V2ZXJpdHkgLSBUaGUgc2V2ZXJpdHkgb2YgdGhlIGFsYXJtIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gd2l0aCBzZXZlcml0eSBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgLSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYWxhcm0ncyBzZXZlcml0eSBtYXRjaGVzIHRoZSBjb25maWd1cmF0aW9uOyBvdGhlcndpc2UsIGBmYWxzZWAuXG4gICAqL1xuICBpc1NldmVyaXR5TWF0Y2hpbmcoc2V2ZXJpdHk6IFNldmVyaXR5VHlwZSwgY29uZmlnOiBBbGFybUxpc3RXaWRnZXRDb25maWcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFjb25maWcuc2V2ZXJpdGllc1tzZXZlcml0eV07XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGVzIGlmIHRoZSBzdGF0dXMgb2YgYW4gYWxhcm0gbWF0Y2hlcyB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5nIG9yIGhhcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgc3RhdHVzIG9mIGFuIGFsYXJtIGlzIGluY2x1ZGVkIGluIHRoZSBzdGF0dXMgc2V0dGluZ3MgZGVmaW5lZCBpblxuICAgKiB0aGUgQWxhcm1MaXN0V2lkZ2V0Q29uZmlnLCBvciBpZiB0aGUgYWxhcm0ncyBzdGF0dXMgaGFzIGNoYW5nZWQgYmFzZWQgb24gdGhlIGV4aXN0aW5nIGFsYXJtcy5cbiAgICpcbiAgICogQGlnbm9yZVxuICAgKiBAcGFyYW0gYWxhcm0gLSBUaGUgYWxhcm0gd2hvc2Ugc3RhdHVzIGlzIHRvIGJlIGV2YWx1YXRlZC5cbiAgICogQHBhcmFtIGFsYXJtcyAtIEFuIGFycmF5IG9mIGV4aXN0aW5nIGFsYXJtcyB0byBjb21wYXJlIGFnYWluc3QgZm9yIHN0YXR1cyBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gd2l0aCBzdGF0dXMgc2V0dGluZ3MuXG4gICAqIEByZXR1cm5zIC0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFsYXJtJ3Mgc3RhdHVzIG1hdGNoZXMgb3IgaGFzIGNoYW5nZWQgYXMgcGVyIHRoZSBjb25maWd1cmF0aW9uOyBvdGhlcndpc2UsIGBmYWxzZWAuXG4gICAqL1xuICBpc1N0YXR1c01hdGNoaW5nKGFsYXJtOiBJQWxhcm0sIGFsYXJtczogSUFsYXJtW10sIGNvbmZpZzogQWxhcm1MaXN0V2lkZ2V0Q29uZmlnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhY29uZmlnLnN0YXR1c1thbGFybS5zdGF0dXNdIHx8IHRoaXMuaGFzRXhpc3RpbmdBbGFybUNoYW5nZWRTdGF0dXMoYWxhcm1zLCBhbGFybSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjb25maWd1cmF0aW9uJ3MgdHlwZXMgYXJyYXkgY29udGFpbnMgb25seSBlbXB0eSBzdHJpbmcgb3IgaW5jbHVkZXMgYSBzcGVjaWZpYyBhbGFybSB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHdpdGggYSBgdHlwZXNgIHByb3BlcnR5LlxuICAgKiBAcGFyYW0gYWxhcm0gLSBUaGUgYWxhcm0gb2JqZWN0IHdpdGggYSBgdHlwZWAgcHJvcGVydHkgdG8gY2hlY2sgYWdhaW5zdCB0aGUgY29uZmlnJ3MgdHlwZXMuXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgY29uZmlnJ3MgdHlwZXMgYXJyYXkgY29udGFpbnMgb25seSBlbXB0eSBzdHJpbmcgb3IgaW5jbHVkZXMgdGhlIGFsYXJtJ3MgdHlwZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAqL1xuICBpc1R5cGVzTWF0Y2hpbmcoY29uZmlnOiBBbGFybUxpc3RXaWRnZXRDb25maWcsIGFsYXJtOiBJQWxhcm0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjb25maWcudHlwZXMpICYmIGNvbmZpZy50eXBlcy5sZW5ndGggPT09IDEgJiYgY29uZmlnLnR5cGVzWzBdID09PSAnJ1xuICAgICAgPyB0cnVlXG4gICAgICA6IGNvbmZpZy50eXBlcz8uaW5jbHVkZXMoYWxhcm0udHlwZSkgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIHF1ZXJ5IHN0cmluZyBmcm9tIGFuIGFycmF5IG9mIG9yZGVyIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgYW4gYXJyYXkgb2Ygb3JkZXJpbmcgcGFyYW1ldGVycyBhbmQgY29uc3RydWN0cyBhIHF1ZXJ5IHN0cmluZ1xuICAgKiBmb3IgdXNlIGluIGFsYXJtIG9yZGVyaW5nIHF1ZXJpZXMuIFRoZSBwYXJhbWV0ZXJzIGFyZSBjb25jYXRlbmF0ZWQgaW50byBhIHNpbmdsZSBzdHJpbmcsXG4gICAqIHByZWZpeGVkIHdpdGggJyRvcmRlcmJ5PScuXG4gICAqXG4gICAqIEBpZ25vcmVcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIG9yZGVyUGFyYW1zIC0gVGhlIG9yZGVyIHBhcmFtZXRlcnMgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHF1ZXJ5LlxuICAgKiBAcmV0dXJucyAtIEEgcXVlcnkgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgb3JkZXIgcGFyYW1ldGVycy5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRPcmRlclBhcmFtZXRlcnMob3JkZXJQYXJhbXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCRvcmRlcmJ5PSR7b3JkZXJQYXJhbXMuam9pbignLCcpfWA7XG4gIH1cbn1cbiJdfQ==
344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0td2lkZ2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9hbGFybXMvYWxhcm0td2lkZ2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsV0FBVyxFQUVYLFFBQVEsRUFFUixlQUFlLEVBQ2hCLE1BQU0sYUFBYSxDQUFDO0FBR3JCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFDTCxrQkFBa0IsRUFJbEIsdUJBQXVCLEVBQ3hCLE1BQU0sMkJBQTJCLENBQUM7OztBQUVuQyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFHcEMsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixZQUFvQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtJQUFHLENBQUM7SUFFNUQ7Ozs7Ozs7O09BUUc7SUFDSCx5QkFBeUIsQ0FDdkIsSUFBbUQ7UUFFbkQsT0FBTyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCwwQkFBMEIsQ0FBQyxpQkFBMEIsRUFBRSxRQUFpQjtRQUN0RSxPQUFPO1lBQ0wsS0FBSyxFQUFFLGtCQUFrQixDQUFDLFNBQVM7WUFDbkMsVUFBVSxFQUNSLFFBQVEsS0FBSyx1QkFBdUI7Z0JBQ2xDLENBQUMsQ0FBRTtvQkFDQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJO29CQUN6QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJO29CQUN0QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJ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QUFhLEVBQUUsTUFBZ0IsRUFBRSxNQUE2QjtRQUM3RSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxlQUFlLENBQUMsTUFBNkIsRUFBRSxLQUFhO1FBQzFELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUN2RixDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNLLG9CQUFvQixDQUFDLFdBQXFCO1FBQ2hELE9BQU8sWUFBWSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDN0MsQ0FBQzs4R0F0V1Usa0JBQWtCO2tIQUFsQixrQkFBa0IsY0FETCxNQUFNOzsyRkFDbkIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFsYXJtUXVlcnlGaWx0ZXIsXG4gIEFsYXJtU3RhdHVzU2V0dGluZ3MsXG4gIEFsYXJtU3RhdHVzLFxuICBJQWxhcm0sXG4gIFNldmVyaXR5LFxuICBTZXZlcml0eUZpbHRlcixcbiAgU0VWRVJJVFlfTEFCRUxTXG59IGZyb20gJ0BjOHkvY2xpZW50JztcblxuaW1wb3J0IHsgU2V2ZXJpdHlTZXR0aW5ncywgU2V2ZXJpdHlUeXBlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxhcm1zVmlld1NlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FsYXJtcyc7XG5pbXBvcnQge1xuICBBTEFSTV9PUkRFUl9WQUxVRVMsXG4gIEFsYXJtTGlzdFdpZGdldENvbmZpZyxcbiAgQWxhcm1PcmRlclR5cGUsXG4gIExlZ2FjeUFsYXJtTGlzdENvbmZpZyxcbiAgUkVDRU5UX0FMQVJNU19XSURHRVRfSURcbn0gZnJvbSAnLi9hbGFybS1saXN0LXdpZGdldC5tb2RlbCc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1BBR0VfU0laRSA9IDIwO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFsYXJtV2lkZ2V0U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWxhcm1zVmlld1NlcnZpY2U6IEFsYXJtc1ZpZXdTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIGRhdGEgZm9sbG93cyB0aGUgTGVnYWN5QWxhcm1Db25maWcgc3RydWN0dXJlLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgYSBnaXZlbiBkYXRhIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBMZWdhY3lBbGFybUNvbmZpZ1xuICAgKiBieSBjaGVja2luZyBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSAnb3B0aW9ucycgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gICAqIEByZXR1cm5zIC0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGRhdGEgb2JqZWN0IGlzIGEgTGVnYWN5QWxhcm1Db25maWcsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgaXNPbGRBbGFybUNvbmZpZ1N0cnVjdHVyZShcbiAgICBkYXRhOiBMZWdhY3lBbGFybUxpc3RDb25maWcgfCBBbGFybUxpc3RXaWRnZXRDb25maWdcbiAgKTogZGF0YSBpcyBMZWdhY3lBbGFybUxpc3RDb25maWcge1xuICAgIHJldHVybiBkYXRhICE9PSBudWxsICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAnb3B0aW9ucycgaW4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHByZWRlZmluZWQgd2lkZ2V0IGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgbmV3IGNvbmZpZ3VyYXRpb24gb2JqZWN0IGJhc2VkIG9uXG4gICAqIGEgd2lkZ2V0cyBJRCAodGhhdCBkZXRlcm1pbmVzIGlmIGlzIGEgbGVnYWN5IFJlY2VudCBvciBDcml0aWNhbCBhbGFybXMgd2lkZ2V0KS5cbiAgICpcbiAgICogQHBhcmFtIGlzSW50ZXJ2YWxSZWZyZXNoIC0gZGV0ZXJtaW5lcyBhIHR5cGUgb2YgYSByZWZyZXNoLlxuICAgKiBAcGFyYW0gd2lkZ2V0SWQgLSBkZXRlcm1pbmVzIGlmIGEgY29uZmlnIHNob3VsZCBiZSBkb25lIGZvciBSZWNlbnQgb3IgQ3JpdGljYWwgYWxhcm1zIHdpZGdldC5cbiAgICogQHJldHVybnMgVGhlIG5ldywgcHJlZGVmaW5lZCBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICovXG4gIGdldFByZWRlZmluZWRDb25maWd1cmF0aW9uKGlzSW50ZXJ2YWxSZWZyZXNoOiBib29sZWFuLCB3aWRnZXRJZD86IHN0cmluZyk6IEFsYXJtTGlzdFdpZGdldENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9yZGVyOiBBTEFSTV9PUkRFUl9WQUxVRVMuQllfQUNUSVZFLFxuICAgICAgc2V2ZXJpdGllczpcbiAgICAgICAgd2lkZ2V0SWQgPT09IFJFQ0VOVF9BTEFSTVNfV0lER0VUX0lEXG4gICAgICAgICAgPyAoe1xuICAgICAgICAgICAgICBbU2V2ZXJpdHkuQ1JJVElDQUxdOiB0cnVlLFxuICAgICAgICAgICAgICBbU2V2ZXJpdHkuTUFKT1JdOiB0cnVlLFxuICAgICAgICAgICAgICBbU2V2ZXJpdHkuTUlOT1JdOiB0cnVlLFxuICAgICAgICAgICAgICBbU2V2ZXJpdHkuV0FSTklOR106IHRydWVcbiAgICAgICAgICAgIH0gYXMgU2V2ZXJpdHlTZXR0aW5ncylcbiAgICAgICAgICA6ICh7XG4gICAgICAgICAgICAgIFtTZXZlcml0eS5DUklUSUNBTF06IHRydWUsXG4gICAgICAgICAgICAgIFtTZXZlcml0eS5NQUpPUl06IGZhbHNlLFxuICAgICAgICAgICAgICBbU2V2ZXJpdHkuTUlOT1JdOiBmYWxzZSxcbiAgICAgICAgICAgICAgW1NldmVyaXR5LldBUk5JTkddOiBmYWxzZVxuICAgICAgICAgICAgfSBhcyBTZXZlcml0eVNldHRpbmdzKSxcbiAgICAgIHN0YXR1czpcbiAgICAgICAgd2lkZ2V0SWQgPT09IFJFQ0VOVF9BTEFSTVNfV0lER0VUX0lEXG4gICAgICAgICAgPyAoe1xuICAgICAgICAgICAgICBbQWxhcm1TdGF0dXMuQUNLTk9XTEVER0VEXTogdHJ1ZSxcbiAgICAgICAgICAgICAgW0FsYXJtU3RhdHVzLkFDVElWRV06IHRydWUsXG4gICAgICAgICAgICAgIFtBbGFybVN0YXR1cy5DTEVBUkVEXTogdHJ1ZVxuICAgICAgICAgICAgfSBhcyBBbGFybVN0YXR1c1NldHRpbmdzKVxuICAgICAgICAgIDogKHtcbiAgICAgICAgICAgICAgW0FsYXJtU3RhdHVzLkFDS05PV0xFREdFRF06IGZhbHNlLFxuICAgICAgICAgICAgICBbQWxhcm1TdGF0dXMuQUNUSVZFXTogdHJ1ZSxcbiAgICAgICAgICAgICAgW0FsYXJtU3RhdHVzLkNMRUFSRURdOiBmYWxzZVxuICAgICAgICAgICAgfSBhcyBBbGFybVN0YXR1c1NldHRpbmdzKSxcbiAgICAgIHR5cGVzOiBbJyddLFxuICAgICAgaXNSZWFsdGltZTogIWlzSW50ZXJ2YWxSZWZyZXNoLFxuICAgICAgaXNBdXRvUmVmcmVzaEVuYWJsZWQ6IHRydWUsXG4gICAgICByZWZyZXNoSW50ZXJ2YWw6IGlzSW50ZXJ2YWxSZWZyZXNoID8gdGhpcy5hbGFybXNWaWV3U2VydmljZS5ERUZBVUxUX0lOVEVSVkFMX1ZBTFVFIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIGEgTGVnYWN5QWxhcm1Db25maWcgb2JqZWN0IGludG8gYW4gQWxhcm1MaXN0V2lkZ2V0Q29uZmlnIG9iamVjdC5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBtYXBzIHRoZSBwcm9wZXJ0aWVzIGZyb20gYW4gb2xkIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIChMZWdhY3lBbGFybUNvbmZpZylcbiAgICogdG8gYSBuZXcgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKEFsYXJtTGlzdFdpZGdldENvbmZpZykuXG4gICAqXG4gICAqIEBwYXJhbSBvbGRDb25maWcgLSBUaGUgb2xkIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIGJlIHRyYW5zZm9ybWVkLlxuICAgKiBAcmV0dXJucyAtIFRoZSBuZXcgY29uZmlndXJhdGlvbiBvYmplY3QgbWFwcGVkIGZyb20gdGhlIG9sZCBvbmUuXG4gICAqL1xuICBtYXBUb05ld0NvbmZpZ1N0cnVjdHVyZShcbiAgICBvbGRDb25maWc6IExlZ2FjeUFsYXJtTGlzdENvbmZpZyxcbiAgICBpc0ludGVydmFsUmVmcmVzaDogYm9vbGVhblxuICApOiBBbGFybUxpc3RXaWRnZXRDb25maWcge1xuICAgIGNvbnN0IG9yZGVyOiBBbGFybU9yZGVyVHlwZSA9XG4gICAgICBvbGRDb25maWcub3B0aW9ucy5vcmRlck1vZGUgPT09ICdBQ1RJVkVfRklSU1QnXG4gICAgICAgID8gQUxBUk1fT1JERVJfVkFMVUVTLkJZX0FDVElWRVxuICAgICAgICA6IEFMQVJNX09SREVSX1ZBTFVFUy5CWV9TRVZFUklUWTtcblxuICAgIGlmICghdGhpcy5pc0NvbnRhaW5pbmdBbGxTZXZlcml0eVR5cGVzKG9sZENvbmZpZy5vcHRpb25zLnNldmVyaXR5KSkge1xuICAgICAgb2xkQ29uZmlnLm9wdGlvbnMuc2V2ZXJpdHkgPSB0aGlzLmFkZEFsbE1pc3NpbmdTZXZlcml0eVR5cGVzKG9sZENvbmZpZy5vcHRpb25zLnNldmVyaXR5KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3JkZXI6IG9yZGVyLFxuICAgICAgaXNSZWFsdGltZTogb2xkQ29uZmlnLnJlYWx0aW1lLFxuICAgICAgZGV2aWNlOiBvbGRDb25maWcuZGV2aWNlLFxuICAgICAgc2hvd0FsYXJtc0ZvckNoaWxkcmVuOiB0cnVlLFxuICAgICAgc2V2ZXJpdGllczogb2xkQ29uZmlnLm9wdGlvbnMuc2V2ZXJpdHksXG4gICAgICBzdGF0dXM6IHRoaXMuYWxsVmFsdWVzRmFsc2Uob2xkQ29uZmlnLm9wdGlvbnMuc3RhdHVzKVxuICAgICAgICA/ICh7XG4gICAgICAgICAgICBbQWxhcm1TdGF0dXMuQUNLTk9XTEVER0VEXTogdHJ1ZSxcbiAgICAgICAgICAgIFtBbGFybVN0YXR1cy5BQ1RJVkVdOiB0cnVlLFxuICAgICAgICAgICAgW0FsYXJtU3RhdHVzLkNMRUFSRURdOiB0cnVlXG4gICAgICAgICAgfSBhcyBBbGFybVN0YXR1c1NldHRpbmdzKVxuICAgICAgICA6IG9sZENvbmZpZy5vcHRpb25zLnN0YXR1cyxcbiAgICAgIHR5cGVzOiBvbGRDb25maWcub3B0aW9ucy50eXBlcz8ubGVuZ3RoID8gb2xkQ29uZmlnLm9wdGlvbnMudHlwZXMgOiBbJyddLFxuICAgICAgaXNBdXRvUmVmcmVzaEVuYWJsZWQ6IHRydWUsXG4gICAgICByZWZyZXNoSW50ZXJ2YWw6IGlzSW50ZXJ2YWxSZWZyZXNoID8gdGhpcy5hbGFybXNWaWV3U2VydmljZS5ERUZBVUxUX0lOVEVSVkFMX1ZBTFVFIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIHNldmVyaXR5IG9iamVjdCBjb250YWlucyBhbGwgdGhlIHByZWRlZmluZWQgc2V2ZXJpdHkgdHlwZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzZXZlcml0eSAtIEEgcmVjb3JkIG9iamVjdCB3aGVyZSBrZXlzIGFyZSBzZXZlcml0eSB0eXBlIHN0cmluZ3MgYW5kIHZhbHVlcyBhcmUgYm9vbGVhbi5cbiAgICogICAgICAgICAgICAgICAgIC0gVGhpcyBvYmplY3QgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBwcmVkZWZpbmVkIHNldmVyaXR5IHR5cGVzLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYWxsIHByZWRlZmluZWQgc2V2ZXJpdHkgdHlwZXMgYXJlIHByZXNlbnQgaW4gdGhlIHNldmVyaXR5IG9iamVjdDsgb3RoZXJ3aXNlLCBgZmFsc2VgLlxuICAgKi9cbiAgaXNDb250YWluaW5nQWxsU2V2ZXJpdHlUeXBlcyhzZXZlcml0eTogU2V2ZXJpdHlGaWx0ZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoU0VWRVJJVFlfTEFCRUxTKS5ldmVyeShzZXZlcml0eVR5cGUgPT4gc2V2ZXJpdHlUeXBlIGluIHNldmVyaXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFueSBtaXNzaW5nIHNldmVyaXR5IHR5cGVzIHRvIHRoZSBwcm92aWRlZCBzZXZlcml0eSBvYmplY3Qgd2l0aCBhIGRlZmF1bHQgdmFsdWUgb2YgYGZhbHNlYC5cbiAgICpcbiAgICogQHBhcmFtIHNldmVyaXR5IC0gQSByZWNvcmQgb2JqZWN0IHdoZXJlIGtleXMgYXJlIHNldmVyaXR5IHR5cGUgc3RyaW5ncyBhbmQgdmFsdWVzIGFyZSBib29sZWFuLlxuICAgKiAgICAgICAgICAgICAgICAgLSBNaXNzaW5nIHNldmVyaXR5IHR5cGVzIHdpbGwgYmUgYWRkZWQgdG8gdGhpcyBvYmplY3QuXG4gICAqIEByZXR1cm5zIFRoZSBtb2RpZmllZCBzZXZlcml0eSBvYmplY3QsIHdoaWNoIGluY2x1ZGVzIGFsbCBwcmVkZWZpbmVkIHNldmVyaXR5IHR5cGVzLCBhZGRpbmcgYW55XG4gICAqICAgICAgICAgIHRoYXQgd2VyZSBtaXNzaW5nIHdpdGggYSB2YWx1ZSBvZiBgZmFsc2VgLlxuICAgKi9cbiAgYWRkQWxsTWlzc2luZ1NldmVyaXR5VHlwZXMoc2V2ZXJpdHk6IFNldmVyaXR5RmlsdGVyKTogU2V2ZXJpdHlGaWx0ZXIge1xuICAgIE9iamVjdC5rZXlzKFNFVkVSSVRZX0xBQkVMUykuZm9yRWFjaChzZXZlcml0eVR5cGUgPT4ge1xuICAgICAgaWYgKCEoc2V2ZXJpdHlUeXBlIGluIHNldmVyaXR5KSkge1xuICAgICAgICBzZXZlcml0eVtzZXZlcml0eVR5cGVdID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldmVyaXR5O1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgYW4gQWxhcm1MaXN0V2lkZ2V0Q29uZmlnIG9iamVjdCB0byBhbiBBbGFybVF1ZXJ5RmlsdGVyLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBwcm92aWRlZCBBbGFybUxpc3RXaWRnZXRDb25maWcgaW50byBhIGZvcm1hdCBzdWl0YWJsZSBmb3IgcXVlcnlpbmcgYWxhcm1zLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgYWxhcm0gbGlzdCB3aWRnZXQuXG4gICAqIEBwYXJhbSBwYWdlU2l6ZSAtIE9wdGlvbmFsIG51bWJlciBzcGVjaWZ5aW5nIHRoZSBzaXplIG9mIHRoZSBwYWdlcyB0byBiZSByZXR1cm5lZCBpbiB0aGUgcXVlcnkuXG4gICAqIEByZXR1cm5zIC0gVGhlIHF1ZXJ5IGZpbHRlciBvYmplY3QgY29uc3RydWN0ZWQgZnJvbSB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIG1hcENvbmZpZ1RvUXVlcnlGaWx0ZXIoY29uZmlnOiBBbGFybUxpc3RXaWRnZXRDb25maWcsIHBhZ2VTaXplPzogbnVtYmVyKTogQWxhcm1RdWVyeUZpbHRlciB7XG4gICAgY29uc3QgZmlsdGVyOiBBbGFybVF1ZXJ5RmlsdGVyID0ge1xuICAgICAgcGFnZVNpemU6IHBhZ2VTaXplIHx8IERFRkFVTFRfUEFHRV9TSVpFLFxuICAgICAgcXVlcnk6IHRoaXMuZ2V0T3JkZXJQYXJhbWV0ZXJzKGNvbmZpZy5vcmRlciksXG4gICAgICBzZXZlcml0eTogdGhpcy5leHRyYWN0RmlsdGVyUGFyYW1zKGNvbmZpZy5zZXZlcml0aWVzIHx8IHt9KSxcbiAgICAgIHN0YXR1czogdGhpcy5leHRyYWN0RmlsdGVyUGFyYW1zKGNvbmZpZy5zdGF0dXMgfHwge30pLFxuICAgICAgdHlwZTogKGNvbmZpZy50eXBlcyB8fCBbXSkuam9pbignLCcpLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWVcbiAgICB9O1xuICAgIGlmIChjb25maWcuZGF0ZUZpbHRlcikge1xuICAgICAgZmlsdGVyLmxhc3RVcGRhdGVkRnJvbSA9XG4gICAgICAgIHR5cGVvZiBjb25maWcuZGF0ZUZpbHRlclswXSA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IGNvbmZpZy5kYXRlRmlsdGVyWzBdXG4gICAgICAgICAgOiBjb25maWcuZGF0ZUZpbHRlclswXS50b0lTT1N0cmluZygpO1xuICAgICAgZmlsdGVyLmNyZWF0ZWRUbyA9XG4gICAgICAgIHR5cGVvZiBjb25maWcuZGF0ZUZpbHRlclsxXSA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IGNvbmZpZy5kYXRlRmlsdGVyWzFdXG4gICAgICAgICAgOiBjb25maWcuZGF0ZUZpbHRlclsxXS50b0lTT1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmRldmljZSkge1xuICAgICAgZmlsdGVyLnNvdXJjZSA9IGNvbmZpZy5kZXZpY2UuaWQ7XG4gICAgICBmaWx0ZXIud2l0aFNvdXJjZUFzc2V0cyA9IHRydWU7XG4gICAgICBmaWx0ZXIud2l0aFNvdXJjZURldmljZXMgPSB0cnVlO1xuICAgICAgZmlsdGVyLndpdGhTb3VyY2VBc3NldHMgPSBjb25maWcuc2hvd0FsYXJtc0ZvckNoaWxkcmVuID8/IHRydWU7XG4gICAgICBmaWx0ZXIud2l0aFNvdXJjZURldmljZXMgPSBjb25maWcuc2hvd0FsYXJtc0ZvckNoaWxkcmVuID8/IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgYW5kIGNvbmNhdGVuYXRlcyBmaWx0ZXIgcGFyYW1ldGVycyBmcm9tIGEgZ2l2ZW4gb2JqZWN0LlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGFuIG9iamVjdCBjb250YWluaW5nIGZpbHRlciBzZXR0aW5ncyAoZWl0aGVyIFNldmVyaXR5RmlsdGVyXG4gICAqIG9yIEFsYXJtU3RhdHVzU2V0dGluZ3MpIGFuZCByZXR1cm5zIGEgc3RyaW5nIG9mIGFsbCBrZXlzIHdoZXJlIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGlzIHRydWUuXG4gICAqIElmIHRoZSBvYmplY3QgaXMgZW1wdHkgb3IgbnVsbCwgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLlxuICAgKlxuICAgKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCBjb250YWluaW5nIGZpbHRlciBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgLSBBIGNvbmNhdGVuYXRlZCBzdHJpbmcgb2Yga2V5cyB3aXRoIHRydWUgdmFsdWVzLCBzZXBhcmF0ZWQgYnkgY29tbWFzLlxuICAgKi9cbiAgZXh0cmFjdEZpbHRlclBhcmFtcyhvYmo6IFNldmVyaXR5RmlsdGVyIHwgQWxhcm1TdGF0dXNTZXR0aW5ncyk6IHN0cmluZyB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9iailcbiAgICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUpXG4gICAgICAubWFwKChba2V5XSkgPT4ga2V5KVxuICAgICAgLmpvaW4oJywnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGFuIGluY29taW5nIHJlYWwtdGltZSBhbGFybSBoYXMgYSBkaWZmZXJlbnQgc3RhdHVzIHRoYW4gYW4gZXhpc3RpbmcgYWxhcm0uXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBwcm92aWRlZCBpbmNvbWluZyByZWFsLXRpbWUgYWxhcm0ncyBzdGF0dXMgZGlmZmVyc1xuICAgKiBmcm9tIHRoYXQgb2YgYW4gZXhpc3RpbmcgYWxhcm0gd2l0aCB0aGUgc2FtZSBJRCBpbiB0aGUgZ2l2ZW4gYXJyYXkgb2YgYWxhcm1zLlxuICAgKlxuICAgKiBAcGFyYW0gZXhpc3RpbmdBbGFybXMgLSBUaGUgYXJyYXkgb2YgZXhpc3RpbmcgYWxhcm1zLlxuICAgKiBAcGFyYW0gaW5jb21pbmdSZWFsdGltZUFsYXJtIC0gVGhlIGluY29taW5nIHJlYWwtdGltZSBhbGFybSB0byBjaGVjay5cbiAgICogQHJldHVybnMgLSBUcnVlIGlmIHRoZSBleGlzdGluZyBhbGFybSdzIHN0YXR1cyBoYXMgY2hhbmdlZCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKi9cbiAgaGFzRXhpc3RpbmdBbGFybUNoYW5nZWRTdGF0dXMoZXhpc3RpbmdBbGFybXM6IElBbGFybVtdLCBpbmNvbWluZ1JlYWx0aW1lQWxhcm06IElBbGFybSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGV4aXN0aW5nQWxhcm0gPSBleGlzdGluZ0FsYXJtcy5maW5kKGFsYXJtID0+IGFsYXJtLmlkID09PSBpbmNvbWluZ1JlYWx0aW1lQWxhcm0uaWQpO1xuICAgIHJldHVybiAhIWV4aXN0aW5nQWxhcm0gJiYgZXhpc3RpbmdBbGFybS5zdGF0dXMgIT09IGluY29taW5nUmVhbHRpbWVBbGFybS5zdGF0dXM7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhbGFybXMgYmFzZWQgb24gdGhlaXIgc3RhdHVzLCBzZXZlcml0eSwgYW5kIHR5cGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgaWYgYSBnaXZlbiBhbGFybSwgaWRlbnRpZmllZCBlaXRoZXIgYnkgYSBudW1lcmljIElEIG9yIGFuIGBJQWxhcm1gIG9iamVjdCxcbiAgICogbWF0Y2hlcyBzcGVjaWZpYyBjcml0ZXJpYSBkZWZpbmVkIGluIGBhbGFybXNgIGFuZCBvcHRpb25hbGx5IGBjb25maWdgLlxuICAgKlxuICAgKiBAcGFyYW0gYWxhcm0gLSBUaGUgYWxhcm0gdG8gY2hlY2ssIHJlcHJlc2VudGVkIGVpdGhlciBieSBhIG51bWVyaWMgSUQgb3IgYW4gYElBbGFybWAgb2JqZWN0LlxuICAgKiBAcGFyYW0gYWxhcm1zIC0gQW4gYXJyYXkgb2YgYElBbGFybWAgb2JqZWN0cyBhZ2FpbnN0IHdoaWNoIHRoZSBnaXZlbiBhbGFybSBpcyBldmFsdWF0ZWQuXG4gICAqIEBwYXJhbSBjb25maWcgLSBPcHRpb25hbC4gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGFsYXJtIGxpc3Qgd2lkZ2V0LCB1c2VkIHRvIGRlZmluZSBhZGRpdGlvbmFsXG4gICAqICAgICAgICAgICAgICAgICBmaWx0ZXJpbmcgY3JpdGVyaWEuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgYWxhcm0gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhOyBvdGhlcndpc2UsIGBmYWxzZWAuXG4gICAqICAgICAgICAgIElmIGBhbGFybWAgaXMgYSBudW1iZXIsIGl0IGFsd2F5cyByZXR1cm5zIGBmYWxzZWAuXG4gICAqICAgICAgICAgIElmIGBjb25maWdgIGlzIG5vdCBwcm92aWRlZCwgaXQgdXNlcyBhIGxlZ2FjeSBmaWx0ZXIgZm9yIGNyaXRpY2FsIGFsYXJtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogLSBXaGVuIGBhbGFybWAgaXMgYSBudW1lcmljIElELCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgZmFsc2VgIGFzIGl0IGNhbm5vdCBtYXRjaCBhZ2FpbnN0IHR5cGUgYW5kIHNldmVyaXR5LlxuICAgKiAtIElmIGBjb25maWdgIGlzIG5vdCBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIGFzc3VtZXMgYSBsZWdhY3kgc2NlbmFyaW8gZm9yIGZpbHRlcmluZyBhbGwgY3JpdGljYWwgYWxhcm1zLlxuICAgKi9cbiAgZmlsdGVyQWxhcm1zQnlTdGF0dXNTZXZlcml0eUFuZFR5cGUoXG4gICAgYWxhcm06IG51bWJlciB8IElBbGFybSxcbiAgICBhbGFybXM6IElBbGFybVtdLFxuICAgIGNvbmZpZz86IEFsYXJtTGlzdFdpZGdldENvbmZpZ1xuICApOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIGFsYXJtID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmlzQWxhcm1NYXRjaGVkQnlDb25maWcoYWxhcm0sIGFsYXJtcywgY29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGFsbCB2YWx1ZXMgaW4gdGhlIGdpdmVuIG9iamVjdCBhcmUgZmFsc2UuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGV2ZXJ5IHZhbHVlIGluIHRoZSBwcm92aWRlZCBvYmplY3QgdG8gc2VlIGlmIHRoZXkgYXJlIGFsbCBmYWxzZS5cbiAgICpcbiAgICogQHBhcmFtIG9iaiAtIEFuIG9iamVjdCB3aXRoIGJvb2xlYW4gdmFsdWVzLlxuICAgKiBAcmV0dXJucyAtIFJldHVybnMgYHRydWVgIGlmIGFsbCB2YWx1ZXMgaW4gdGhlIG9iamVjdCBhcmUgZmFsc2UsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgYWxsVmFsdWVzRmFsc2Uob2JqOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKG9iaikuZXZlcnkodmFsdWUgPT4gIXZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgc3RyaW5nIG9mIG9yZGVyIHBhcmFtZXRlcnMgZm9yIGEgcXVlcnkgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBhbGFybSBvcmRlci5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhbiBhbGFybSBvcmRlciBhbmQgbWFwcyBpdCB0byBhIGNvcnJlc3BvbmRpbmcgc2V0IG9mIG9yZGVyIHBhcmFtZXRlcnMuXG4gICAqIEl0IHN1cHBvcnRzIGRpZmZlcmVudCBvcmRlcmluZyB0eXBlcywgc3VjaCBhcyBCWV9BQ1RJVkUsIEJZX1NFVkVSSVRZLCBhbmQgQllfREFURV9BU0NFTkRJTkcuXG4gICAqIFRoZSBvcmRlciBwYXJhbWV0ZXJzIGFyZSB1c2VkIHRvIGNvbnN0cnVjdCBhIHF1ZXJ5IHN0cmluZyB0aGF0IGRldGVybWluZXMgdGhlIG9yZGVyXG4gICAqIGluIHdoaWNoIGFsYXJtcyBhcmUgcmV0cmlldmVkIG9yIGRpc3BsYXllZC5cbiAgICpcbiAgICogQHBhcmFtIG9yZGVyIC0gVGhlIHNwZWNpZmllZCBvcmRlciBmb3Igc29ydGluZyBhbGFybXMgKGUuZy4sIEJZX0FDVElWRSkuXG4gICAqIEByZXR1cm5zIC0gQSBzdHJpbmcgb2Ygb3JkZXIgcGFyYW1ldGVycyB0byBiZSB1c2VkIGluIGEgcXVlcnksIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgb3JkZXIgdHlwZSBpcyB1bnJlY29nbml6ZWQuXG4gICAqL1xuICBnZXRPcmRlclBhcmFtZXRlcnMob3JkZXI6IEFsYXJtT3JkZXJUeXBlKTogc3RyaW5nIHtcbiAgICBsZXQgb3JkZXJQYXJhbXM6IHN0cmluZ1tdO1xuXG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgICAgY2FzZSBBTEFSTV9PUkRFUl9WQUxVRVMuQllfQUNUSVZFOlxuICAgICAgICBvcmRlclBhcmFtcyA9IFsnc3RhdHVzIGFzYycsICdzZXZlcml0eSBhc2MnLCAndGltZS5kYXRlIGRlc2MnLCAndGV4dCBhc2MnXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRPcmRlclBhcmFtZXRlcnMob3JkZXJQYXJhbXMpO1xuICAgICAgY2FzZSBBTEFSTV9PUkRFUl9WQUxVRVMuQllfU0VWRVJJVFk6XG4gICAgICAgIG9yZGVyUGFyYW1zID0gWydzZXZlcml0eSBhc2MnLCAndGltZS5kYXRlIGRlc2MnLCAndGV4dCBhc2MnXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRPcmRlclBhcmFtZXRlcnMob3JkZXJQYXJhbXMpO1xuICAgICAgY2FzZSBBTEFSTV9PUkRFUl9WQUxVRVMuQllfREFURV9BU0NFTkRJTkc6XG4gICAgICAgIG9yZGVyUGFyYW1zID0gWyd0aW1lLmRhdGUgYXNjJywgJ3RleHQgYXNjJ107XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkT3JkZXJQYXJhbWV0ZXJzKG9yZGVyUGFyYW1zKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIG9yZGVyUGFyYW1zID0gWyd0aW1lLmRhdGUgZGVzYycsICd0ZXh0IGFzYyddO1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZE9yZGVyUGFyYW1ldGVycyhvcmRlclBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYW4gYWxhcm0gaXMgbWF0Y2hlZCBieSB0aGUgc3BlY2lmaWVkIHdpZGdldCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGV2YWx1YXRlcyB3aGV0aGVyIGEgZ2l2ZW4gYWxhcm0gc2hvdWxkIGJlIGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBzZXZlcml0eSxcbiAgICogc3RhdHVzLCBhbmQgdHlwZSBmaWx0ZXJzIGRlZmluZWQgaW4gdGhlIEFsYXJtTGlzdFdpZGdldENvbmZpZy4gSXQgY2hlY2tzIGlmIHRoZSBhbGFybSdzXG4gICAqIHNldmVyaXR5IGFuZCBzdGF0dXMgbWF0Y2ggdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgYW5kIGlmIHRoZSBhbGFybSdzIHR5cGUgaXMgaW5jbHVkZWRcbiAgICogaW4gdGhlIGNvbmZpZ3VyYXRpb24ncyB0eXBlcyAoaWYgc3BlY2lmaWVkKS5cbiAgICpcbiAgICogQGlnbm9yZVxuICAgKiBAcGFyYW0gYWxhcm0gLSBUaGUgYWxhcm0gdG8gZXZhbHVhdGUuXG4gICAqIEBwYXJhbSBhbGFybXMgLSBBbiBhcnJheSBvZiBleGlzdGluZyBhbGFybXMsIHVzZWQgZm9yIHN0YXR1cyBtYXRjaGluZy5cbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIG1hdGNoIGFnYWluc3QuXG4gICAqIEByZXR1cm5zIC0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFsYXJtIG1hdGNoZXMgdGhlIGNvbmZpZ3VyYXRpb24gY3JpdGVyaWE7IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAgICovXG4gIGlzQWxhcm1NYXRjaGVkQnlDb25maWcoYWxhcm06IElBbGFybSwgYWxhcm1zOiBJQWxhcm1bXSwgY29uZmlnOiBBbGFybUxpc3RXaWRnZXRDb25maWcpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc1NldmVyaXR5TWF0Y2hlZCA9IHRoaXMuaXNTZXZlcml0eU1hdGNoaW5nKGFsYXJtLnNldmVyaXR5LCBjb25maWcpO1xuICAgIGNvbnN0IGlzU3RhdHVzTWF0Y2hlZCA9IHRoaXMuaXNTdGF0dXNNYXRjaGluZyhhbGFybSwgYWxhcm1zLCBjb25maWcpO1xuICAgIGNvbnN0IGlzVHlwZU1hdGNoZWQgPSB0aGlzLmlzVHlwZXNNYXRjaGluZyhjb25maWcsIGFsYXJtKTtcblxuICAgIHJldHVybiBpc1NldmVyaXR5TWF0Y2hlZCAmJiBpc1N0YXR1c01hdGNoZWQgJiYgaXNUeXBlTWF0Y2hlZDtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBzZXZlcml0eSBvZiBhbiBhbGFybSBtYXRjaGVzIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzZXZlcml0eSBvZiBhbiBhbGFybSBpcyBpbmNsdWRlZCBpbiB0aGVcbiAgICogc2V2ZXJpdHkgc2V0dGluZ3MgZGVmaW5lZCBpbiB0aGUgQWxhcm1MaXN0V2lkZ2V0Q29uZmlnLlxuICAgKlxuICAgKiBAaWdub3JlXG4gICAqIEBwYXJhbSBzZXZlcml0eSAtIFRoZSBzZXZlcml0eSBvZiB0aGUgYWxhcm0gdG8gY2hlY2suXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiB3aXRoIHNldmVyaXR5IHNldHRpbmdzLlxuICAgKiBAcmV0dXJucyAtIFJldHVybnMgYHRydWVgIGlmIHRoZSBhbGFybSdzIHNldmVyaXR5IG1hdGNoZXMgdGhlIGNvbmZpZ3VyYXRpb247IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAgICovXG4gIGlzU2V2ZXJpdHlNYXRjaGluZyhzZXZlcml0eTogU2V2ZXJpdHlUeXBlLCBjb25maWc6IEFsYXJtTGlzdFdpZGdldENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWNvbmZpZy5zZXZlcml0aWVzW3NldmVyaXR5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgaWYgdGhlIHN0YXR1cyBvZiBhbiBhbGFybSBtYXRjaGVzIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcgb3IgaGFzIGNoYW5nZWQuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBzdGF0dXMgb2YgYW4gYWxhcm0gaXMgaW5jbHVkZWQgaW4gdGhlIHN0YXR1cyBzZXR0aW5ncyBkZWZpbmVkIGluXG4gICAqIHRoZSBBbGFybUxpc3RXaWRnZXRDb25maWcsIG9yIGlmIHRoZSBhbGFybSdzIHN0YXR1cyBoYXMgY2hhbmdlZCBiYXNlZCBvbiB0aGUgZXhpc3RpbmcgYWxhcm1zLlxuICAgKlxuICAgKiBAaWdub3JlXG4gICAqIEBwYXJhbSBhbGFybSAtIFRoZSBhbGFybSB3aG9zZSBzdGF0dXMgaXMgdG8gYmUgZXZhbHVhdGVkLlxuICAgKiBAcGFyYW0gYWxhcm1zIC0gQW4gYXJyYXkgb2YgZXhpc3RpbmcgYWxhcm1zIHRvIGNvbXBhcmUgYWdhaW5zdCBmb3Igc3RhdHVzIGNoYW5nZXMuXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiB3aXRoIHN0YXR1cyBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgLSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYWxhcm0ncyBzdGF0dXMgbWF0Y2hlcyBvciBoYXMgY2hhbmdlZCBhcyBwZXIgdGhlIGNvbmZpZ3VyYXRpb247IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAgICovXG4gIGlzU3RhdHVzTWF0Y2hpbmcoYWxhcm06IElBbGFybSwgYWxhcm1zOiBJQWxhcm1bXSwgY29uZmlnOiBBbGFybUxpc3RXaWRnZXRDb25maWcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFjb25maWcuc3RhdHVzW2FsYXJtLnN0YXR1c10gfHwgdGhpcy5oYXNFeGlzdGluZ0FsYXJtQ2hhbmdlZFN0YXR1cyhhbGFybXMsIGFsYXJtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGNvbmZpZ3VyYXRpb24ncyB0eXBlcyBhcnJheSBjb250YWlucyBvbmx5IGVtcHR5IHN0cmluZyBvciBpbmNsdWRlcyBhIHNwZWNpZmljIGFsYXJtIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3Qgd2l0aCBhIGB0eXBlc2AgcHJvcGVydHkuXG4gICAqIEBwYXJhbSBhbGFybSAtIFRoZSBhbGFybSBvYmplY3Qgd2l0aCBhIGB0eXBlYCBwcm9wZXJ0eSB0byBjaGVjayBhZ2FpbnN0IHRoZSBjb25maWcncyB0eXBlcy5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBjb25maWcncyB0eXBlcyBhcnJheSBjb250YWlucyBvbmx5IGVtcHR5IHN0cmluZyBvciBpbmNsdWRlcyB0aGUgYWxhcm0ncyB0eXBlLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIGlzVHlwZXNNYXRjaGluZyhjb25maWc6IEFsYXJtTGlzdFdpZGdldENvbmZpZywgYWxhcm06IElBbGFybSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGNvbmZpZy50eXBlcykgJiYgY29uZmlnLnR5cGVzLmxlbmd0aCA9PT0gMSAmJiBjb25maWcudHlwZXNbMF0gPT09ICcnXG4gICAgICA/IHRydWVcbiAgICAgIDogY29uZmlnLnR5cGVzPy5pbmNsdWRlcyhhbGFybS50eXBlKSA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgcXVlcnkgc3RyaW5nIGZyb20gYW4gYXJyYXkgb2Ygb3JkZXIgcGFyYW1ldGVycy5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhbiBhcnJheSBvZiBvcmRlcmluZyBwYXJhbWV0ZXJzIGFuZCBjb25zdHJ1Y3RzIGEgcXVlcnkgc3RyaW5nXG4gICAqIGZvciB1c2UgaW4gYWxhcm0gb3JkZXJpbmcgcXVlcmllcy4gVGhlIHBhcmFtZXRlcnMgYXJlIGNvbmNhdGVuYXRlZCBpbnRvIGEgc2luZ2xlIHN0cmluZyxcbiAgICogcHJlZml4ZWQgd2l0aCAnJG9yZGVyYnk9Jy5cbiAgICpcbiAgICogQGlnbm9yZVxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0gb3JkZXJQYXJhbXMgLSBUaGUgb3JkZXIgcGFyYW1ldGVycyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgcXVlcnkuXG4gICAqIEByZXR1cm5zIC0gQSBxdWVyeSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBvcmRlciBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZE9yZGVyUGFyYW1ldGVycyhvcmRlclBhcmFtczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJG9yZGVyYnk9JHtvcmRlclBhcmFtcy5qb2luKCcsJyl9YDtcbiAgfVxufVxuIl19