@byuhbll/components 4.0.0-alpha.15 → 4.0.0-alpha.17

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.
Files changed (30) hide show
  1. package/esm2022/lib/animations/animations.mjs +5 -5
  2. package/esm2022/lib/checkbox/checkbox.component.mjs +15 -0
  3. package/esm2022/lib/expand-collapse/expand-collapse.component.mjs +3 -3
  4. package/esm2022/lib/hbll-header/hbll-header.component.mjs +19 -5
  5. package/esm2022/lib/hbll-header/nav-bar/nav-bar.component.mjs +255 -229
  6. package/esm2022/lib/hbll-header/nav-bar-dropdown/nav-bar-dropdown.component.mjs +3 -3
  7. package/esm2022/lib/header-with-impersonation/header-with-impersonation.component.mjs +38 -0
  8. package/esm2022/lib/impersonate-modal/impersonate-modal.component.mjs +5 -3
  9. package/esm2022/lib/impersonation-banner/impersonation-banner.component.mjs +1 -2
  10. package/esm2022/lib/multi-select/multi-select.component.mjs +115 -0
  11. package/esm2022/lib/ss-search-bar/advanced-search/advanced-search.component.mjs +5 -5
  12. package/esm2022/lib/ss-search-bar/ss-search-bar.component.mjs +2 -2
  13. package/esm2022/lib/utils.mjs +2 -3
  14. package/esm2022/public-api.mjs +2 -1
  15. package/fesm2022/byuhbll-components.mjs +489 -416
  16. package/fesm2022/byuhbll-components.mjs.map +1 -1
  17. package/lib/{hbll-checkbox/hbll-checkbox.component.d.ts → checkbox/checkbox.component.d.ts} +1 -1
  18. package/lib/hbll-header/hbll-header.component.d.ts +5 -1
  19. package/lib/hbll-header/nav-bar/nav-bar.component.d.ts +5 -3
  20. package/lib/header-with-impersonation/header-with-impersonation.component.d.ts +19 -0
  21. package/lib/impersonate-modal/impersonate-modal.component.d.ts +2 -0
  22. package/lib/impersonation-banner/impersonation-banner.component.d.ts +1 -2
  23. package/lib/{hbll-multi-select/hbll-multi-select.component.d.ts → multi-select/multi-select.component.d.ts} +1 -1
  24. package/lib/ss-search-bar/advanced-search/advanced-search.component.d.ts +4 -1
  25. package/package.json +1 -1
  26. package/public-api.d.ts +1 -0
  27. package/styles/scss/_vars.scss +1 -0
  28. package/styles/scss/shared.scss +7 -0
  29. package/esm2022/lib/hbll-checkbox/hbll-checkbox.component.mjs +0 -15
  30. package/esm2022/lib/hbll-multi-select/hbll-multi-select.component.mjs +0 -115
@@ -18,12 +18,12 @@ export class NavBarDropdownComponent {
18
18
  };
19
19
  }
20
20
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NavBarDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
21
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: NavBarDropdownComponent, isStandalone: true, selector: "lib-nav-bar-dropdown", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, isSmallScreen: { classPropertyName: "isSmallScreen", publicName: "isSmallScreen", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openEvent: "openEvent" }, ngImport: i0, template: "<span\n class=\"dropdown-wrapper\"\n data-testid=\"wrapper\"\n [ngClass]=\"{ desktop: !isSmallScreen() }\"\n (mouseenter)=\"!isSmallScreen() && (this.isOpen = true)\"\n (mouseleave)=\"!isSmallScreen() && (this.isOpen = false)\"\n>\n <button (click)=\"handleClick()\" data-testid=\"btn\">\n {{ title() }}\n <span class=\"material-symbols-outlined icon\">\n {{ 'keyboard_arrow_' + (isOpen ? 'up' : 'down') }}\n </span>\n </button>\n @if (!isSmallScreen()) {\n @if (isOpen) {\n <div class=\"dropdown\" data-testid=\"dropdown\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n }\n } @else {\n <lib-expand-collapse [isExpanded]=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </lib-expand-collapse>\n }\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: [".dropdown-wrapper.desktop button{color:#002e5d;background-color:#fff;display:flex;justify-content:center;align-items:center;font-size:1.1em;font-weight:500;border:none;padding:.4em 1em;line-height:1.4em}.dropdown-wrapper.desktop button .icon{font-size:1.3em;margin-bottom:-.1em}.dropdown-wrapper.desktop button:hover{background-color:#0047ba;color:#fff}*{box-sizing:border-box}.dropdown-wrapper button{justify-content:flex-end;font-size:1.3em;color:#fff;display:flex;align-items:center;width:100%;padding:.6em;border-bottom:1px solid rgba(255,255,255,.3)}.dropdown-wrapper button .icon{margin-left:.2em}.dropdown-wrapper.desktop:hover button{background-color:#0047ba;color:#fff}.dropdown-wrapper.desktop .dropdown{position:absolute;z-index:11;width:100%;top:100%;left:0;background-color:#0047ba}\n"], dependencies: [{ kind: "component", type: ExpandCollapseComponent, selector: "lib-expand-collapse", inputs: ["isExpanded"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
21
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: NavBarDropdownComponent, isStandalone: true, selector: "lib-nav-bar-dropdown", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, isSmallScreen: { classPropertyName: "isSmallScreen", publicName: "isSmallScreen", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openEvent: "openEvent" }, ngImport: i0, template: "<span\n class=\"hbll-header-dropdown-wrapper\"\n data-testid=\"wrapper\"\n [ngClass]=\"{ 'hbll-header-desktop': !isSmallScreen() }\"\n (mouseenter)=\"!isSmallScreen() && (this.isOpen = true)\"\n (mouseleave)=\"!isSmallScreen() && (this.isOpen = false)\"\n>\n <button (click)=\"handleClick()\" data-testid=\"btn\">\n {{ title() }}\n <span class=\"material-symbols-outlined hbll-header-icon\">\n {{ 'keyboard_arrow_' + (isOpen ? 'up' : 'down') }}\n </span>\n </button>\n @if (!isSmallScreen()) {\n @if (isOpen) {\n <div class=\"hbll-header-dropdown\" data-testid=\"dropdown\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n }\n } @else {\n <lib-expand-collapse [isExpanded]=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </lib-expand-collapse>\n }\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: [".hbll-header-dropdown-wrapper.hbll-header-desktop button{color:#002e5d;background-color:#fff;display:flex;justify-content:center;align-items:center;font-size:1.1em;font-weight:500;border:none;padding:.4em 1em;line-height:1.4em}.hbll-header-dropdown-wrapper.hbll-header-desktop button .hbll-header-icon{font-size:1.3em;margin-bottom:-.1em}.hbll-header-dropdown-wrapper.hbll-header-desktop button:hover{background-color:#0047ba;color:#fff}*{box-sizing:border-box;text-decoration:none}*:not(.material-symbols-outlined){font-family:inherit}.hbll-header-dropdown-wrapper button{justify-content:flex-end;font-size:1.3em;color:#fff;display:flex;align-items:center;background-color:#0047ba;width:100%;padding:.6em;border-bottom:1px solid rgba(255,255,255,.3);border-left:none;border-right:none;border-top:none;white-space:nowrap;cursor:pointer}.hbll-header-dropdown-wrapper button .hbll-header-icon{margin-left:.2em}.hbll-header-dropdown-wrapper.hbll-header-desktop:hover button{background-color:#0047ba;color:#fff}.hbll-header-dropdown-wrapper.hbll-header-desktop .hbll-header-dropdown{position:absolute;z-index:11;width:100%;top:100%;left:0;background-color:#0047ba}\n"], dependencies: [{ kind: "component", type: ExpandCollapseComponent, selector: "lib-expand-collapse", inputs: ["isExpanded"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
22
22
  }
23
23
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NavBarDropdownComponent, decorators: [{
24
24
  type: Component,
25
- args: [{ selector: 'lib-nav-bar-dropdown', standalone: true, imports: [ExpandCollapseComponent, CommonModule], template: "<span\n class=\"dropdown-wrapper\"\n data-testid=\"wrapper\"\n [ngClass]=\"{ desktop: !isSmallScreen() }\"\n (mouseenter)=\"!isSmallScreen() && (this.isOpen = true)\"\n (mouseleave)=\"!isSmallScreen() && (this.isOpen = false)\"\n>\n <button (click)=\"handleClick()\" data-testid=\"btn\">\n {{ title() }}\n <span class=\"material-symbols-outlined icon\">\n {{ 'keyboard_arrow_' + (isOpen ? 'up' : 'down') }}\n </span>\n </button>\n @if (!isSmallScreen()) {\n @if (isOpen) {\n <div class=\"dropdown\" data-testid=\"dropdown\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n }\n } @else {\n <lib-expand-collapse [isExpanded]=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </lib-expand-collapse>\n }\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: [".dropdown-wrapper.desktop button{color:#002e5d;background-color:#fff;display:flex;justify-content:center;align-items:center;font-size:1.1em;font-weight:500;border:none;padding:.4em 1em;line-height:1.4em}.dropdown-wrapper.desktop button .icon{font-size:1.3em;margin-bottom:-.1em}.dropdown-wrapper.desktop button:hover{background-color:#0047ba;color:#fff}*{box-sizing:border-box}.dropdown-wrapper button{justify-content:flex-end;font-size:1.3em;color:#fff;display:flex;align-items:center;width:100%;padding:.6em;border-bottom:1px solid rgba(255,255,255,.3)}.dropdown-wrapper button .icon{margin-left:.2em}.dropdown-wrapper.desktop:hover button{background-color:#0047ba;color:#fff}.dropdown-wrapper.desktop .dropdown{position:absolute;z-index:11;width:100%;top:100%;left:0;background-color:#0047ba}\n"] }]
25
+ args: [{ selector: 'lib-nav-bar-dropdown', standalone: true, imports: [ExpandCollapseComponent, CommonModule], template: "<span\n class=\"hbll-header-dropdown-wrapper\"\n data-testid=\"wrapper\"\n [ngClass]=\"{ 'hbll-header-desktop': !isSmallScreen() }\"\n (mouseenter)=\"!isSmallScreen() && (this.isOpen = true)\"\n (mouseleave)=\"!isSmallScreen() && (this.isOpen = false)\"\n>\n <button (click)=\"handleClick()\" data-testid=\"btn\">\n {{ title() }}\n <span class=\"material-symbols-outlined hbll-header-icon\">\n {{ 'keyboard_arrow_' + (isOpen ? 'up' : 'down') }}\n </span>\n </button>\n @if (!isSmallScreen()) {\n @if (isOpen) {\n <div class=\"hbll-header-dropdown\" data-testid=\"dropdown\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n }\n } @else {\n <lib-expand-collapse [isExpanded]=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </lib-expand-collapse>\n }\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: [".hbll-header-dropdown-wrapper.hbll-header-desktop button{color:#002e5d;background-color:#fff;display:flex;justify-content:center;align-items:center;font-size:1.1em;font-weight:500;border:none;padding:.4em 1em;line-height:1.4em}.hbll-header-dropdown-wrapper.hbll-header-desktop button .hbll-header-icon{font-size:1.3em;margin-bottom:-.1em}.hbll-header-dropdown-wrapper.hbll-header-desktop button:hover{background-color:#0047ba;color:#fff}*{box-sizing:border-box;text-decoration:none}*:not(.material-symbols-outlined){font-family:inherit}.hbll-header-dropdown-wrapper button{justify-content:flex-end;font-size:1.3em;color:#fff;display:flex;align-items:center;background-color:#0047ba;width:100%;padding:.6em;border-bottom:1px solid rgba(255,255,255,.3);border-left:none;border-right:none;border-top:none;white-space:nowrap;cursor:pointer}.hbll-header-dropdown-wrapper button .hbll-header-icon{margin-left:.2em}.hbll-header-dropdown-wrapper.hbll-header-desktop:hover button{background-color:#0047ba;color:#fff}.hbll-header-dropdown-wrapper.hbll-header-desktop .hbll-header-dropdown{position:absolute;z-index:11;width:100%;top:100%;left:0;background-color:#0047ba}\n"] }]
26
26
  }], propDecorators: { openEvent: [{
27
27
  type: Output
28
28
  }] } });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWJhci1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvaGJsbC1oZWFkZXIvbmF2LWJhci1kcm9wZG93bi9uYXYtYmFyLWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9oYmxsLWhlYWRlci9uYXYtYmFyLWRyb3Bkb3duL25hdi1iYXItZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saURBQWlELENBQUM7OztBQVMxRixNQUFNLE9BQU8sdUJBQXVCO0lBUHBDO1FBUUksVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNqQyxrQkFBYSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVqRCxzQ0FBc0M7UUFDdEMsa0JBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFFbEMsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLGdCQUFXLEdBQUcsR0FBRyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMvQixDQUFDLENBQUM7S0FDTDs4R0FiWSx1QkFBdUI7a0dBQXZCLHVCQUF1Qix3WUNYcEMsODhCQTZCQSx1MUJEdEJjLHVCQUF1Qix1RkFBRSxZQUFZOzsyRkFJdEMsdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNJLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyx1QkFBdUIsRUFBRSxZQUFZLENBQUM7OEJBT3RDLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEV4cGFuZENvbGxhcHNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZXhwYW5kLWNvbGxhcHNlL2V4cGFuZC1jb2xsYXBzZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1uYXYtYmFyLWRyb3Bkb3duJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtFeHBhbmRDb2xsYXBzZUNvbXBvbmVudCwgQ29tbW9uTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmF2LWJhci1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL25hdi1iYXItZHJvcGRvd24uY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBOYXZCYXJEcm9wZG93bkNvbXBvbmVudCB7XG4gICAgdGl0bGUgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gICAgaXNTbWFsbFNjcmVlbiA9IGlucHV0KHRydWUpO1xuICAgIEBPdXRwdXQoKSBvcGVuRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8vIFB1YmxpYyB0byBiZSBjYWxsZWQgYnkgcGFyZW50IGNvbXAuXG4gICAgY2xvc2VEcm9wZG93biA9ICgpID0+ICh0aGlzLmlzT3BlbiA9IGZhbHNlKTtcblxuICAgIHByb3RlY3RlZCBpc09wZW4gPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHRoaXMub3BlbkV2ZW50LmVtaXQodGhpcy50aXRsZSgpKTtcbiAgICAgICAgdGhpcy5pc09wZW4gPSAhdGhpcy5pc09wZW47XG4gICAgfTtcbn1cbiIsIjxzcGFuXG4gICAgY2xhc3M9XCJkcm9wZG93bi13cmFwcGVyXCJcbiAgICBkYXRhLXRlc3RpZD1cIndyYXBwZXJcIlxuICAgIFtuZ0NsYXNzXT1cInsgZGVza3RvcDogIWlzU21hbGxTY3JlZW4oKSB9XCJcbiAgICAobW91c2VlbnRlcik9XCIhaXNTbWFsbFNjcmVlbigpICYmICh0aGlzLmlzT3BlbiA9IHRydWUpXCJcbiAgICAobW91c2VsZWF2ZSk9XCIhaXNTbWFsbFNjcmVlbigpICYmICh0aGlzLmlzT3BlbiA9IGZhbHNlKVwiXG4+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlQ2xpY2soKVwiIGRhdGEtdGVzdGlkPVwiYnRuXCI+XG4gICAgICAgIHt7IHRpdGxlKCkgfX1cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb25cIj5cbiAgICAgICAgICAgIHt7ICdrZXlib2FyZF9hcnJvd18nICsgKGlzT3BlbiA/ICd1cCcgOiAnZG93bicpIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICBAaWYgKCFpc1NtYWxsU2NyZWVuKCkpIHtcbiAgICAgICAgQGlmIChpc09wZW4pIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiIGRhdGEtdGVzdGlkPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPGxpYi1leHBhbmQtY29sbGFwc2UgW2lzRXhwYW5kZWRdPVwiaXNPcGVuXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2xpYi1leHBhbmQtY29sbGFwc2U+XG4gICAgfVxuPC9zcGFuPlxuXG48bmctdGVtcGxhdGUgI2NvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWJhci1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvaGJsbC1oZWFkZXIvbmF2LWJhci1kcm9wZG93bi9uYXYtYmFyLWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9oYmxsLWhlYWRlci9uYXYtYmFyLWRyb3Bkb3duL25hdi1iYXItZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saURBQWlELENBQUM7OztBQVMxRixNQUFNLE9BQU8sdUJBQXVCO0lBUHBDO1FBUUksVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNqQyxrQkFBYSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVqRCxzQ0FBc0M7UUFDdEMsa0JBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFFbEMsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLGdCQUFXLEdBQUcsR0FBRyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMvQixDQUFDLENBQUM7S0FDTDs4R0FiWSx1QkFBdUI7a0dBQXZCLHVCQUF1Qix3WUNYcEMsZ2dDQTZCQSxvc0NEdEJjLHVCQUF1Qix1RkFBRSxZQUFZOzsyRkFJdEMsdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNJLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyx1QkFBdUIsRUFBRSxZQUFZLENBQUM7OEJBT3RDLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEV4cGFuZENvbGxhcHNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZXhwYW5kLWNvbGxhcHNlL2V4cGFuZC1jb2xsYXBzZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1uYXYtYmFyLWRyb3Bkb3duJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtFeHBhbmRDb2xsYXBzZUNvbXBvbmVudCwgQ29tbW9uTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmF2LWJhci1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL25hdi1iYXItZHJvcGRvd24uY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBOYXZCYXJEcm9wZG93bkNvbXBvbmVudCB7XG4gICAgdGl0bGUgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gICAgaXNTbWFsbFNjcmVlbiA9IGlucHV0KHRydWUpO1xuICAgIEBPdXRwdXQoKSBvcGVuRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8vIFB1YmxpYyB0byBiZSBjYWxsZWQgYnkgcGFyZW50IGNvbXAuXG4gICAgY2xvc2VEcm9wZG93biA9ICgpID0+ICh0aGlzLmlzT3BlbiA9IGZhbHNlKTtcblxuICAgIHByb3RlY3RlZCBpc09wZW4gPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHRoaXMub3BlbkV2ZW50LmVtaXQodGhpcy50aXRsZSgpKTtcbiAgICAgICAgdGhpcy5pc09wZW4gPSAhdGhpcy5pc09wZW47XG4gICAgfTtcbn1cbiIsIjxzcGFuXG4gICAgY2xhc3M9XCJoYmxsLWhlYWRlci1kcm9wZG93bi13cmFwcGVyXCJcbiAgICBkYXRhLXRlc3RpZD1cIndyYXBwZXJcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ2hibGwtaGVhZGVyLWRlc2t0b3AnOiAhaXNTbWFsbFNjcmVlbigpIH1cIlxuICAgIChtb3VzZWVudGVyKT1cIiFpc1NtYWxsU2NyZWVuKCkgJiYgKHRoaXMuaXNPcGVuID0gdHJ1ZSlcIlxuICAgIChtb3VzZWxlYXZlKT1cIiFpc1NtYWxsU2NyZWVuKCkgJiYgKHRoaXMuaXNPcGVuID0gZmFsc2UpXCJcbj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJoYW5kbGVDbGljaygpXCIgZGF0YS10ZXN0aWQ9XCJidG5cIj5cbiAgICAgICAge3sgdGl0bGUoKSB9fVxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaGJsbC1oZWFkZXItaWNvblwiPlxuICAgICAgICAgICAge3sgJ2tleWJvYXJkX2Fycm93XycgKyAoaXNPcGVuID8gJ3VwJyA6ICdkb3duJykgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIEBpZiAoIWlzU21hbGxTY3JlZW4oKSkge1xuICAgICAgICBAaWYgKGlzT3Blbikge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhibGwtaGVhZGVyLWRyb3Bkb3duXCIgZGF0YS10ZXN0aWQ9XCJkcm9wZG93blwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8bGliLWV4cGFuZC1jb2xsYXBzZSBbaXNFeHBhbmRlZF09XCJpc09wZW5cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbGliLWV4cGFuZC1jb2xsYXBzZT5cbiAgICB9XG48L3NwYW4+XG5cbjxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,38 @@
1
+ import { Component, computed, EventEmitter, input, Output } from '@angular/core';
2
+ import { HbllHeaderComponent } from '../hbll-header/hbll-header.component';
3
+ import { ImpersonationBannerComponent } from '../impersonation-banner/impersonation-banner.component';
4
+ import { defaultOidcBaseUri, defaultOidcDefaultIdp, ImpersonateModalComponent, } from '../impersonate-modal/impersonate-modal.component';
5
+ import { jwtDecode } from 'jwt-decode';
6
+ import * as i0 from "@angular/core";
7
+ export class HeaderWithImpersonationComponent {
8
+ constructor() {
9
+ this.accessTokenPayload = input.required();
10
+ this.oidcBaseUri = input(defaultOidcBaseUri);
11
+ this.oidcDefaultIdp = input(defaultOidcDefaultIdp);
12
+ this.login = new EventEmitter();
13
+ this.logout = new EventEmitter();
14
+ this.endImpersonation = new EventEmitter();
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ this.parsedToken = computed(() => this.accessTokenPayload().token ? jwtDecode(this.accessTokenPayload().token) : null);
17
+ this.name = computed(() => (this.parsedToken() ? this.parsedToken()['given_name'] : ''));
18
+ this.showImpersonateButton = computed(() => this.parsedToken()
19
+ ? !!(!this.isImpersonating() &&
20
+ this.parsedToken()['resource_access']['realm-management']?.['roles']?.includes('impersonation'))
21
+ : false);
22
+ this.showImpersonationModal = false;
23
+ this.isImpersonating = computed(() => !!this.parsedToken()?.['impersonator']);
24
+ }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HeaderWithImpersonationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: HeaderWithImpersonationComponent, isStandalone: true, selector: "lib-header-with-impersonation", inputs: { accessTokenPayload: { classPropertyName: "accessTokenPayload", publicName: "accessTokenPayload", isSignal: true, isRequired: true, transformFunction: null }, oidcBaseUri: { classPropertyName: "oidcBaseUri", publicName: "oidcBaseUri", isSignal: true, isRequired: false, transformFunction: null }, oidcDefaultIdp: { classPropertyName: "oidcDefaultIdp", publicName: "oidcDefaultIdp", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { login: "login", logout: "logout", endImpersonation: "endImpersonation" }, ngImport: i0, template: "<lib-impersonation-banner\n [accessTokenPayload]=\"accessTokenPayload()\"\n (endImpersonation)=\"endImpersonation.emit()\"\n></lib-impersonation-banner>\n<lib-hbll-header\n [name]=\"name()\"\n [showImpersonateButton]=\"showImpersonateButton()\"\n (openImpersonationModal)=\"showImpersonationModal = true\"\n (login)=\"login.emit()\"\n (logout)=\"logout.emit()\"\n/>\n<lib-impersonate-modal\n [showModal]=\"showImpersonationModal\"\n [oidcBaseUri]=\"oidcBaseUri()\"\n [oidcDefaultIdp]=\"oidcDefaultIdp()\"\n [accessTokenPayload]=\"accessTokenPayload()\"\n (dismiss)=\"showImpersonationModal = false\"\n (init)=\"showImpersonationModal = true\"\n></lib-impersonate-modal>\n", styles: [""], dependencies: [{ kind: "component", type: HbllHeaderComponent, selector: "lib-hbll-header", inputs: ["name", "mainsitebaseurl", "showImpersonateButton"], outputs: ["openImpersonationModal", "login", "logout"] }, { kind: "component", type: ImpersonationBannerComponent, selector: "lib-impersonation-banner", inputs: ["accessTokenPayload", "personBaseUri", "libraryApiBaseUri"], outputs: ["endImpersonation"] }, { kind: "component", type: ImpersonateModalComponent, selector: "lib-impersonate-modal", inputs: ["showModal", "oidcBaseUri", "oidcDefaultIdp", "accessTokenPayload"], outputs: ["dismiss", "init"] }] }); }
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HeaderWithImpersonationComponent, decorators: [{
29
+ type: Component,
30
+ args: [{ selector: 'lib-header-with-impersonation', standalone: true, imports: [HbllHeaderComponent, ImpersonationBannerComponent, ImpersonateModalComponent], template: "<lib-impersonation-banner\n [accessTokenPayload]=\"accessTokenPayload()\"\n (endImpersonation)=\"endImpersonation.emit()\"\n></lib-impersonation-banner>\n<lib-hbll-header\n [name]=\"name()\"\n [showImpersonateButton]=\"showImpersonateButton()\"\n (openImpersonationModal)=\"showImpersonationModal = true\"\n (login)=\"login.emit()\"\n (logout)=\"logout.emit()\"\n/>\n<lib-impersonate-modal\n [showModal]=\"showImpersonationModal\"\n [oidcBaseUri]=\"oidcBaseUri()\"\n [oidcDefaultIdp]=\"oidcDefaultIdp()\"\n [accessTokenPayload]=\"accessTokenPayload()\"\n (dismiss)=\"showImpersonationModal = false\"\n (init)=\"showImpersonationModal = true\"\n></lib-impersonate-modal>\n" }]
31
+ }], propDecorators: { login: [{
32
+ type: Output
33
+ }], logout: [{
34
+ type: Output
35
+ }], endImpersonation: [{
36
+ type: Output
37
+ }] } });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLXdpdGgtaW1wZXJzb25hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvaGVhZGVyLXdpdGgtaW1wZXJzb25hdGlvbi9oZWFkZXItd2l0aC1pbXBlcnNvbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9oZWFkZXItd2l0aC1pbXBlcnNvbmF0aW9uL2hlYWRlci13aXRoLWltcGVyc29uYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDdEcsT0FBTyxFQUNILGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIseUJBQXlCLEdBQzVCLE1BQU0sa0RBQWtELENBQUM7QUFFMUQsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLFlBQVksQ0FBQzs7QUFTbkQsTUFBTSxPQUFPLGdDQUFnQztJQVA3QztRQVFJLHVCQUFrQixHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWdCLENBQUM7UUFDcEQsZ0JBQVcsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN4QyxtQkFBYyxHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3BDLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ2pDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ2xDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdEQsOERBQThEO1FBQ3BELGdCQUFXLEdBQXNELFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDckYsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdEYsQ0FBQztRQUNRLFNBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRiwwQkFBcUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQzVDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDZCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ0UsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUN2QixJQUFJLENBQUMsV0FBVyxFQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUMzRSxlQUFlLENBQ2xCLENBQ0o7WUFDSCxDQUFDLENBQUMsS0FBSyxDQUNkLENBQUM7UUFDUSwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDakMsb0JBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7S0FDcEY7OEdBekJZLGdDQUFnQztrR0FBaEMsZ0NBQWdDLHFuQkNsQjdDLHdzQkFtQkEsMERETGMsbUJBQW1CLGtMQUFFLDRCQUE0QiwwS0FBRSx5QkFBeUI7OzJGQUk3RSxnQ0FBZ0M7a0JBUDVDLFNBQVM7K0JBQ0ksK0JBQStCLGNBQzdCLElBQUksV0FDUCxDQUFDLG1CQUFtQixFQUFFLDRCQUE0QixFQUFFLHlCQUF5QixDQUFDOzhCQVE3RSxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIEV2ZW50RW1pdHRlciwgaW5wdXQsIE91dHB1dCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIYmxsSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vaGJsbC1oZWFkZXIvaGJsbC1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEltcGVyc29uYXRpb25CYW5uZXJDb21wb25lbnQgfSBmcm9tICcuLi9pbXBlcnNvbmF0aW9uLWJhbm5lci9pbXBlcnNvbmF0aW9uLWJhbm5lci5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBkZWZhdWx0T2lkY0Jhc2VVcmksXG4gICAgZGVmYXVsdE9pZGNEZWZhdWx0SWRwLFxuICAgIEltcGVyc29uYXRlTW9kYWxDb21wb25lbnQsXG59IGZyb20gJy4uL2ltcGVyc29uYXRlLW1vZGFsL2ltcGVyc29uYXRlLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2tlblBheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvdG9rZW4tcGF5bG9hZCc7XG5pbXBvcnQgeyBqd3REZWNvZGUsIEp3dFBheWxvYWQgfSBmcm9tICdqd3QtZGVjb2RlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItaGVhZGVyLXdpdGgtaW1wZXJzb25hdGlvbicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbSGJsbEhlYWRlckNvbXBvbmVudCwgSW1wZXJzb25hdGlvbkJhbm5lckNvbXBvbmVudCwgSW1wZXJzb25hdGVNb2RhbENvbXBvbmVudF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hlYWRlci13aXRoLWltcGVyc29uYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9oZWFkZXItd2l0aC1pbXBlcnNvbmF0aW9uLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgSGVhZGVyV2l0aEltcGVyc29uYXRpb25Db21wb25lbnQge1xuICAgIGFjY2Vzc1Rva2VuUGF5bG9hZCA9IGlucHV0LnJlcXVpcmVkPFRva2VuUGF5bG9hZD4oKTtcbiAgICBvaWRjQmFzZVVyaSA9IGlucHV0KGRlZmF1bHRPaWRjQmFzZVVyaSk7XG4gICAgb2lkY0RlZmF1bHRJZHAgPSBpbnB1dChkZWZhdWx0T2lkY0RlZmF1bHRJZHApO1xuICAgIEBPdXRwdXQoKSBsb2dpbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgbG9nb3V0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBlbmRJbXBlcnNvbmF0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcm90ZWN0ZWQgcGFyc2VkVG9rZW46IFNpZ25hbDwoSnd0UGF5bG9hZCAmIFJlY29yZDxzdHJpbmcsIGFueT4pIHwgbnVsbD4gPSBjb21wdXRlZCgoKSA9PlxuICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuUGF5bG9hZCgpLnRva2VuID8gand0RGVjb2RlKHRoaXMuYWNjZXNzVG9rZW5QYXlsb2FkKCkudG9rZW4pIDogbnVsbCxcbiAgICApO1xuICAgIHByb3RlY3RlZCBuYW1lID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMucGFyc2VkVG9rZW4oKSA/IHRoaXMucGFyc2VkVG9rZW4oKSFbJ2dpdmVuX25hbWUnXSA6ICcnKSk7XG4gICAgcHJvdGVjdGVkIHNob3dJbXBlcnNvbmF0ZUJ1dHRvbiA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgIHRoaXMucGFyc2VkVG9rZW4oKVxuICAgICAgICAgICAgPyAhIShcbiAgICAgICAgICAgICAgICAgICF0aGlzLmlzSW1wZXJzb25hdGluZygpICYmXG4gICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlZFRva2VuKCkhWydyZXNvdXJjZV9hY2Nlc3MnXVsncmVhbG0tbWFuYWdlbWVudCddPy5bJ3JvbGVzJ10/LmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICdpbXBlcnNvbmF0aW9uJyxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBmYWxzZSxcbiAgICApO1xuICAgIHByb3RlY3RlZCBzaG93SW1wZXJzb25hdGlvbk1vZGFsID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc0ltcGVyc29uYXRpbmcgPSBjb21wdXRlZCgoKSA9PiAhIXRoaXMucGFyc2VkVG9rZW4oKT8uWydpbXBlcnNvbmF0b3InXSk7XG59XG4iLCI8bGliLWltcGVyc29uYXRpb24tYmFubmVyXG4gICAgW2FjY2Vzc1Rva2VuUGF5bG9hZF09XCJhY2Nlc3NUb2tlblBheWxvYWQoKVwiXG4gICAgKGVuZEltcGVyc29uYXRpb24pPVwiZW5kSW1wZXJzb25hdGlvbi5lbWl0KClcIlxuPjwvbGliLWltcGVyc29uYXRpb24tYmFubmVyPlxuPGxpYi1oYmxsLWhlYWRlclxuICAgIFtuYW1lXT1cIm5hbWUoKVwiXG4gICAgW3Nob3dJbXBlcnNvbmF0ZUJ1dHRvbl09XCJzaG93SW1wZXJzb25hdGVCdXR0b24oKVwiXG4gICAgKG9wZW5JbXBlcnNvbmF0aW9uTW9kYWwpPVwic2hvd0ltcGVyc29uYXRpb25Nb2RhbCA9IHRydWVcIlxuICAgIChsb2dpbik9XCJsb2dpbi5lbWl0KClcIlxuICAgIChsb2dvdXQpPVwibG9nb3V0LmVtaXQoKVwiXG4vPlxuPGxpYi1pbXBlcnNvbmF0ZS1tb2RhbFxuICAgIFtzaG93TW9kYWxdPVwic2hvd0ltcGVyc29uYXRpb25Nb2RhbFwiXG4gICAgW29pZGNCYXNlVXJpXT1cIm9pZGNCYXNlVXJpKClcIlxuICAgIFtvaWRjRGVmYXVsdElkcF09XCJvaWRjRGVmYXVsdElkcCgpXCJcbiAgICBbYWNjZXNzVG9rZW5QYXlsb2FkXT1cImFjY2Vzc1Rva2VuUGF5bG9hZCgpXCJcbiAgICAoZGlzbWlzcyk9XCJzaG93SW1wZXJzb25hdGlvbk1vZGFsID0gZmFsc2VcIlxuICAgIChpbml0KT1cInNob3dJbXBlcnNvbmF0aW9uTW9kYWwgPSB0cnVlXCJcbj48L2xpYi1pbXBlcnNvbmF0ZS1tb2RhbD5cbiJdfQ==
@@ -9,6 +9,8 @@ import { CommonModule } from '@angular/common';
9
9
  import { toSignal } from '@angular/core/rxjs-interop';
10
10
  import * as i0 from "@angular/core";
11
11
  import * as i1 from "@angular/forms";
12
+ export const defaultOidcBaseUri = 'https://keycloak.lib.byu.edu/';
13
+ export const defaultOidcDefaultIdp = 'byu-realm';
12
14
  export class ImpersonateUserPipe {
13
15
  transform(user) {
14
16
  return `${user.name} (${user.netId || 'Unknown'})${user.restricted ? ' — Restricted' : ''}`;
@@ -30,8 +32,8 @@ export class ImpersonateModalComponent {
30
32
  this.http = inject(HttpClient);
31
33
  this.fb = inject(FormBuilder);
32
34
  this.eref = inject(ElementRef);
33
- this.oidcBaseUri = input('https://keycloak.lib.byu.edu/');
34
- this.oidcDefaultIdp = input('byu-realm');
35
+ this.oidcBaseUri = input(defaultOidcBaseUri);
36
+ this.oidcDefaultIdp = input(defaultOidcDefaultIdp);
35
37
  // Require an object here so that access tokens are not visible/extractable from the DOM in consuming applications. Instead they are only stored in memory.
36
38
  this.accessTokenPayload = input.required();
37
39
  this.dismiss = new EventEmitter();
@@ -185,4 +187,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
185
187
  type: HostListener,
186
188
  args: ['document:keydown', ['$event']]
187
189
  }] } });
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wZXJzb25hdGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2ltcGVyc29uYXRlLW1vZGFsL2ltcGVyc29uYXRlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9pbXBlcnNvbmF0ZS1tb2RhbC9pbXBlcnNvbmF0ZS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sSUFBSSxFQUVKLE1BQU0sRUFDTixLQUFLLEdBQ1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBT3RELE1BQU0sT0FBTyxtQkFBbUI7SUFDNUIsU0FBUyxDQUFDLElBQTZCO1FBQ25DLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFL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QUM7WUFDUCx3RUFBd0U7WUFDeEUsNkJBQTZCO1lBQzdCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDMUYsQ0FBQztJQUNMLENBQUM7SUFtRCtDLFlBQVksQ0FBQyxLQUFpQjtRQUMxRSxJQUFLLEtBQUssQ0FBQyxNQUFzQixFQUFFLEVBQUUsS0FBSyxlQUFlLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsQ0FBQztJQUNMLENBQUM7SUEwQkQsV0FBVztRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUIsQ0FBQzs4R0EvRlEseUJBQXlCO2tHQUF6Qix5QkFBeUIsZzBCQ3REdEMsMmdLQTBHQSxxOEhEMURjLFlBQVksOEJBQUUsbUJBQW1CLHc4QkFyQmxDLG1CQUFtQiwwQ0F5QmhCLENBQUMsZ0JBQWdCLENBQUM7OzJGQUVyQix5QkFBeUI7a0JBUnJDLFNBQVM7aUNBQ00sSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDLFlBQ3ZELHVCQUF1QixjQUdyQixDQUFDLGdCQUFnQixDQUFDOzhCQU9qQixTQUFTO3NCQUFyQixLQUFLO2dCQVlJLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQTZDeUMsWUFBWTtzQkFBM0QsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNQSxhQUFhO3NCQUExRCxZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUGlwZSxcbiAgICBQaXBlVHJhbnNmb3JtLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBsaWJIYmxsRmFkZUluT3V0IH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9hbmltYXRpb25zJztcbmltcG9ydCB1cmxjYXQgZnJvbSAndXJsY2F0JztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBUb2tlblBheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvdG9rZW4tcGF5bG9hZCc7XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnaW1wZXJzb25hdGVVc2VyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBJbXBlcnNvbmF0ZVVzZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKHVzZXI6IEltcGVyc29uYXRlU2VhcmNoUmVzdWx0KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3VzZXIubmFtZX0gKCR7dXNlci5uZXRJZCB8fCAnVW5rbm93bid9KSR7dXNlci5yZXN0cmljdGVkID8gJyDigJQgUmVzdHJpY3RlZCcgOiAnJ31gO1xuICAgIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgSW1wZXJzb25hdGVTZWFyY2hSZXN1bHQge1xuICAgIG5ldElkOiBzdHJpbmc7XG4gICAgaW5zdGl0dXRpb246IHN0cmluZztcbiAgICB1c2VybmFtZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwcmVmZXJyZWROYW1lOiBzdHJpbmc7XG4gICAgZ2l2ZW5OYW1lOiBzdHJpbmc7XG4gICAgc3VybmFtZTogc3RyaW5nO1xuICAgIHJlc3RyaWN0ZWQ6IGJvb2xlYW47XG59XG5cbmNvbnN0IFNFQVJDSF9VU0VSU19QQVRIID0gJy9pbXBlcnNvbmF0ZS9hcGkvc2VhcmNoLyc7XG5jb25zdCBTVEFSVF9JTVBFUlNPTkFURV9QQVRIID0gJy9pbXBlcnNvbmF0ZS86dXNlcm5hbWUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEltcGVyc29uYXRlVXNlclBpcGVdLFxuICAgIHNlbGVjdG9yOiAnbGliLWltcGVyc29uYXRlLW1vZGFsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaW1wZXJzb25hdGUtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ltcGVyc29uYXRlLW1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgYW5pbWF0aW9uczogW2xpYkhibGxGYWRlSW5PdXRdLFxufSlcbmV4cG9ydCBjbGFzcyBJbXBlcnNvbmF0ZU1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlcmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gICAgQElucHV0KCkgc2V0IHNob3dNb2RhbChvcGVuOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gb3BlbjtcbiAgICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgICAgIC8vIFNldCBmb2N1cyBvbiBzZWFyY2ggaW5wdXQgc2hvcnRseSBhZnRlciBvcGVuaW5nIG1vZGFsIHNvIHVzZXIgbm90aWNlc1xuICAgICAgICAgICAgLy8gdGhlIGlucHV0IHJlY2VpdmluZyBmb2N1cy5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5lcmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI3NlYXJjaElucHV0Jyk/LmZvY3VzKCksIDI1MCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb2lkY0Jhc2VVcmkgPSBpbnB1dCgnaHR0cHM6Ly9rZXljbG9hay5saWIuYnl1LmVkdS8nKTtcbiAgICBvaWRjRGVmYXVsdElkcCA9IGlucHV0KCdieXUtcmVhbG0nKTtcbiAgICAvLyBSZXF1aXJlIGFuIG9iamVjdCBoZXJlIHNvIHRoYXQgYWNjZXNzIHRva2VucyBhcmUgbm90IHZpc2libGUvZXh0cmFjdGFibGUgZnJvbSB0aGUgRE9NIGluIGNvbnN1bWluZyBhcHBsaWNhdGlvbnMuIEluc3RlYWQgdGhleSBhcmUgb25seSBzdG9yZWQgaW4gbWVtb3J5LlxuICAgIGFjY2Vzc1Rva2VuUGF5bG9hZCA9IGlucHV0LnJlcXVpcmVkPFRva2VuUGF5bG9hZD4oKTtcbiAgICBAT3V0cHV0KCkgZGlzbWlzcyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgaW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHByb3RlY3RlZCBpc09wZW4gPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgZm9ybSA9IHRoaXMuZmIubm9uTnVsbGFibGUuZ3JvdXAoe1xuICAgICAgICBzZWFyY2g6IHRoaXMuZmIuY29udHJvbCgnJywgeyB2YWxpZGF0b3JzOiBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSB9KSxcbiAgICB9KTtcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRVc2VybmFtZT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBsb2FkaW5nID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIGhhbmRsZVNlYXJjaFN1YmplY3QgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIHByb3RlY3RlZCByZXN1bHRzID0gdG9TaWduYWwoXG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5zZWFyY2gudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKHNlYXJjaCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNlYXJjaFN1YmplY3QucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKChoYW5kbGVTZWFyY2gpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VybmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzRXJyb3IgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2ggfHwgIWhhbmRsZVNlYXJjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLnNlYXJjaFVzZXJzKHNlYXJjaCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIHByaXZhdGUgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50J10pIG91dHNpZGVDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LmlkID09PSAnbW9kYWxCYWNrZHJvcCcpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKSBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlICdFc2MnOlxuICAgICAgICAgICAgY2FzZSAnRXNjYXBlJzoge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0knOlxuICAgICAgICAgICAgY2FzZSAnaSc6IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0LmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vicy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBSZWRpcmVjdCB0byBLZXljbG9hayBpbXBlcnNvbmF0ZSBwYWdlLCB3aGljaCB3aWxsIHJlZGlyZWN0IGJhY2tcbiAgICAgKiBhZnRlciBpbXBlcnNvbmF0aW9uIGJlZ2lucy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc3RhcnRJbXBlcnNvbmF0aW9uID0gKHVzZXJuYW1lPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IF91c2VybmFtZSA9IHVzZXJuYW1lID8/IHRoaXMuc2VsZWN0ZWRVc2VybmFtZTtcbiAgICAgICAgaWYgKCFfdXNlcm5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSB1cmxjYXQodGhpcy5vaWRjQmFzZVVyaSgpLCBTVEFSVF9JTVBFUlNPTkFURV9QQVRILCB7XG4gICAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICAgIHJldHVyblVyaTogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICAgICAgICBkZWZhdWx0SWRwOiB0aGlzLm9pZGNEZWZhdWx0SWRwKCksXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlcGxhY2VVcmwodXJsKTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGhhbmRsZVNlbGVjdFVzZXIgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VybmFtZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBjbGVhclNlYXJjaCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBjbG9zZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5kaXNtaXNzLmVtaXQoKTtcbiAgICAgICAgdGhpcy5jbGVhclNlYXJjaCgpO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRm9ybVN1Ym1pdCA9IChldmVudDogU3VibWl0RXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWFyY2hTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGhhbmRsZVNlYXJjaEtleVByZXNzID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghWydBcnJvd0Rvd24nLCAnRG93biddLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5yZXN1bHRzKCk/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RSZXN1bHQgPSB0aGlzLmVyZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjcmVzdWx0XzBgKTtcbiAgICAgICAgICAgIGZpcnN0UmVzdWx0Py5jbGljaygpO1xuICAgICAgICAgICAgZmlyc3RSZXN1bHQ/LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGhhbmRsZVJlc3VsdEtleVByZXNzID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIFsnQXJyb3dVcCcsICdVcCddLmluY2x1ZGVzKGV2ZW50LmtleSkgJiZcbiAgICAgICAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LmlkID09PSAncmVzdWx0XzAnXG4gICAgICAgICkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuZXJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWFyY2hJbnB1dCcpPy5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRJbXBlcnNvbmF0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIFNlYXJjaCBLZXljbG9hayB1c2VycyB1c2luZyBhIGdlbmVyaWMgc2VhcmNoIHF1ZXJ5LiAqL1xuICAgIHByaXZhdGUgc2VhcmNoVXNlcnMgPSAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB1cmkgPSB1cmxjYXQodGhpcy5vaWRjQmFzZVVyaSgpLCBTRUFSQ0hfVVNFUlNfUEFUSCwge1xuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEltcGVyc29uYXRlU2VhcmNoUmVzdWx0W10+KHVyaSwge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmFjY2Vzc1Rva2VuUGF5bG9hZCgpLnRva2VufWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZXBsYWNlVXJsID0gKHVybDogc3RyaW5nKSA9PiB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh1cmwpO1xufVxuIiwiQGlmIChpc09wZW4pIHtcbiAgICA8ZGl2IEBsaWJIYmxsRmFkZUluT3V0IGNsYXNzPVwibW9kYWwtd3JhcHBlclwiIGlkPVwibW9kYWxCYWNrZHJvcFwiIGRhdGEtdGVzdGlkPVwiYmFja2Ryb3BcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRhaW5lclwiIGRhdGEtdGVzdGlkPVwibW9kYWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDI+SW1wZXJzb25hdGU8L2gyPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjbG9zZSgpXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgZGF0YS10ZXN0aWQ9XCJjbG9zZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1jbG9zZVwiPiBjbG9zZSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwiaGFuZGxlRm9ybVN1Ym1pdCgkZXZlbnQpXCIgZGF0YS10ZXN0aWQ9XCJzZWFyY2hGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY29uZGFyeVwiIFtjbGFzcy5kaXNhYmxlZF09XCIhZm9ybS52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrZXlib2FyZC1rZXlcIj5FbnRlcjwvc3Bhbj4gdG8gc2VhcmNoXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBmb3I9XCJzZWFyY2hJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaW52YWxpZF09XCJmb3JtLmludmFsaWQgJiYgZm9ybS5kaXJ0eVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1zZWFyY2hcIj4gc2VhcmNoIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNlYXJjaElucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggcGF0cm9ucy4uLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVTZWFyY2hLZXlQcmVzcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICNzZWFyY2hCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwic2VhcmNoSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKCEhc2VhcmNoQm94LnZhbHVlICYmIGZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLWNoZWNrbWFya1wiPiBjaGVjayA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzZWFyY2hCb3gudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGliSGJsbEZhZGVJbk91dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLWNsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDxmaWVsZHNldFxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLXJlc3VsdHMtd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgaWQ9XCJyZXN1bHRzU2Nyb2xsQ29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVNlbGVjdFVzZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmICghbG9hZGluZyAmJiByZXN1bHRzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAodXNlciBvZiByZXN1bHRzKCk7IHRyYWNrIHVzZXIubmV0SWQ7IGxldCBpZHggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlc3VsdC1maWVsZCByZXN1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mb2N1c109XCJ1c2VyLnVzZXJuYW1lID09PSBzZWxlY3RlZFVzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cInJlc3VsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ3Jlc3VsdF8nICsgaWR4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLndhcm5pbmddPVwidXNlci5yZXN0cmljdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJzZWxlY3RlZFVzZXJuYW1lID0gdXNlci51c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHVzZXIucmVzdHJpY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb25cIj4gd2FybmluZyA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb25cIj4gcGVyc29uIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFt0aXRsZV09XCJ1c2VyXCIgZGF0YS10ZXN0aWQ9XCJyZXN1bHRUZXh0XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgfCBpbXBlcnNvbmF0ZVVzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ1c2VyLnVzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCIncmVzdWx0XycgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJlc3VsdFNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVSZXN1bHRLZXlQcmVzcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbXBlcnNvbmF0ZS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImltcGVyc29uYXRlQnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0SW1wZXJzb25hdGlvbih1c2VyLnVzZXJuYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbXBlcnNvbmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVtcHR5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyByZXN1bHRzLiBUcnkgc2VhcmNoaW5nIGJ5IE5ldCBJRCBvciBCWVUgSUQuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYi1zcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHQtZmllbGRcIj5Tb21ldGhpbmcgd2VudCB3cm9uZy4gV2UnbGwga2VlcCB0cnlpbmcuPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG59XG4iXX0=
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wZXJzb25hdGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2ltcGVyc29uYXRlLW1vZGFsL2ltcGVyc29uYXRlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9pbXBlcnNvbmF0ZS1tb2RhbC9pbXBlcnNvbmF0ZS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sSUFBSSxFQUVKLE1BQU0sRUFDTixLQUFLLEdBQ1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBR3RELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLCtCQUErQixDQUFDO0FBQ2xFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLFdB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b25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUGlwZSxcbiAgICBQaXBlVHJhbnNmb3JtLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBsaWJIYmxsRmFkZUluT3V0IH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9hbmltYXRpb25zJztcbmltcG9ydCB1cmxjYXQgZnJvbSAndXJsY2F0JztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBUb2tlblBheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvdG9rZW4tcGF5bG9hZCc7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0T2lkY0Jhc2VVcmkgPSAnaHR0cHM6Ly9rZXljbG9hay5saWIuYnl1LmVkdS8nO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRPaWRjRGVmYXVsdElkcCA9ICdieXUtcmVhbG0nO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2ltcGVyc29uYXRlVXNlcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSW1wZXJzb25hdGVVc2VyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybSh1c2VyOiBJbXBlcnNvbmF0ZVNlYXJjaFJlc3VsdCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt1c2VyLm5hbWV9ICgke3VzZXIubmV0SWQgfHwgJ1Vua25vd24nfSkke3VzZXIucmVzdHJpY3RlZCA/ICcg4oCUIFJlc3RyaWN0ZWQnIDogJyd9YDtcbiAgICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIEltcGVyc29uYXRlU2VhcmNoUmVzdWx0IHtcbiAgICBuZXRJZDogc3RyaW5nO1xuICAgIGluc3RpdHV0aW9uOiBzdHJpbmc7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcHJlZmVycmVkTmFtZTogc3RyaW5nO1xuICAgIGdpdmVuTmFtZTogc3RyaW5nO1xuICAgIHN1cm5hbWU6IHN0cmluZztcbiAgICByZXN0cmljdGVkOiBib29sZWFuO1xufVxuXG5jb25zdCBTRUFSQ0hfVVNFUlNfUEFUSCA9ICcvaW1wZXJzb25hdGUvYXBpL3NlYXJjaC8nO1xuY29uc3QgU1RBUlRfSU1QRVJTT05BVEVfUEFUSCA9ICcvaW1wZXJzb25hdGUvOnVzZXJuYW1lJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBJbXBlcnNvbmF0ZVVzZXJQaXBlXSxcbiAgICBzZWxlY3RvcjogJ2xpYi1pbXBlcnNvbmF0ZS1tb2RhbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ltcGVyc29uYXRlLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9pbXBlcnNvbmF0ZS1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICAgIGFuaW1hdGlvbnM6IFtsaWJIYmxsRmFkZUluT3V0XSxcbn0pXG5leHBvcnQgY2xhc3MgSW1wZXJzb25hdGVNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAgIEBJbnB1dCgpIHNldCBzaG93TW9kYWwob3BlbjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzT3BlbiA9IG9wZW47XG4gICAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgICAgICAvLyBTZXQgZm9jdXMgb24gc2VhcmNoIGlucHV0IHNob3J0bHkgYWZ0ZXIgb3BlbmluZyBtb2RhbCBzbyB1c2VyIG5vdGljZXNcbiAgICAgICAgICAgIC8vIHRoZSBpbnB1dCByZWNlaXZpbmcgZm9jdXMuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZXJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWFyY2hJbnB1dCcpPy5mb2N1cygpLCAyNTApO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9pZGNCYXNlVXJpID0gaW5wdXQoZGVmYXVsdE9pZGNCYXNlVXJpKTtcbiAgICBvaWRjRGVmYXVsdElkcCA9IGlucHV0KGRlZmF1bHRPaWRjRGVmYXVsdElkcCk7XG4gICAgLy8gUmVxdWlyZSBhbiBvYmplY3QgaGVyZSBzbyB0aGF0IGFjY2VzcyB0b2tlbnMgYXJlIG5vdCB2aXNpYmxlL2V4dHJhY3RhYmxlIGZyb20gdGhlIERPTSBpbiBjb25zdW1pbmcgYXBwbGljYXRpb25zLiBJbnN0ZWFkIHRoZXkgYXJlIG9ubHkgc3RvcmVkIGluIG1lbW9yeS5cbiAgICBhY2Nlc3NUb2tlblBheWxvYWQgPSBpbnB1dC5yZXF1aXJlZDxUb2tlblBheWxvYWQ+KCk7XG4gICAgQE91dHB1dCgpIGRpc21pc3MgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIGluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBwcm90ZWN0ZWQgaXNPcGVuID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIGhhc0Vycm9yID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIGZvcm0gPSB0aGlzLmZiLm5vbk51bGxhYmxlLmdyb3VwKHtcbiAgICAgICAgc2VhcmNoOiB0aGlzLmZiLmNvbnRyb2woJycsIHsgdmFsaWRhdG9yczogVmFsaWRhdG9ycy5taW5MZW5ndGgoMykgfSksXG4gICAgfSk7XG4gICAgcHJvdGVjdGVkIHNlbGVjdGVkVXNlcm5hbWU/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgbG9hZGluZyA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBoYW5kbGVTZWFyY2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcm90ZWN0ZWQgcmVzdWx0cyA9IHRvU2lnbmFsKFxuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuc2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChzZWFyY2gpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWFyY2hTdWJqZWN0LnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChmYWxzZSksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoaGFuZGxlU2VhcmNoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcm5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0Vycm9yID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VhcmNoIHx8ICFoYW5kbGVTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5zZWFyY2hVc2VycyhzZWFyY2gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICk7XG5cbiAgICBwcml2YXRlIHN1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZWRvd24nLCBbJyRldmVudCddKSBvdXRzaWRlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5pZCA9PT0gJ21vZGFsQmFja2Ryb3AnKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSkgaGFuZGxlS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnRXNjJzpcbiAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdJJzpcbiAgICAgICAgICAgIGNhc2UgJ2knOiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogUmVkaXJlY3QgdG8gS2V5Y2xvYWsgaW1wZXJzb25hdGUgcGFnZSwgd2hpY2ggd2lsbCByZWRpcmVjdCBiYWNrXG4gICAgICogYWZ0ZXIgaW1wZXJzb25hdGlvbiBiZWdpbnMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHN0YXJ0SW1wZXJzb25hdGlvbiA9ICh1c2VybmFtZT86IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBfdXNlcm5hbWUgPSB1c2VybmFtZSA/PyB0aGlzLnNlbGVjdGVkVXNlcm5hbWU7XG4gICAgICAgIGlmICghX3VzZXJuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJsID0gdXJsY2F0KHRoaXMub2lkY0Jhc2VVcmkoKSwgU1RBUlRfSU1QRVJTT05BVEVfUEFUSCwge1xuICAgICAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgICAgICByZXR1cm5Vcmk6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgICAgICAgZGVmYXVsdElkcDogdGhpcy5vaWRjRGVmYXVsdElkcCgpLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXBsYWNlVXJsKHVybCk7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBoYW5kbGVTZWxlY3RVc2VyID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcm5hbWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgY2xlYXJTZWFyY2ggPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgY2xvc2UgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzbWlzcy5lbWl0KCk7XG4gICAgICAgIHRoaXMuY2xlYXJTZWFyY2goKTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGhhbmRsZUZvcm1TdWJtaXQgPSAoZXZlbnQ6IFN1Ym1pdEV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VhcmNoU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBoYW5kbGVTZWFyY2hLZXlQcmVzcyA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBpZiAoIVsnQXJyb3dEb3duJywgJ0Rvd24nXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0cygpPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVzdWx0ID0gdGhpcy5lcmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgI3Jlc3VsdF8wYCk7XG4gICAgICAgICAgICBmaXJzdFJlc3VsdD8uY2xpY2soKTtcbiAgICAgICAgICAgIGZpcnN0UmVzdWx0Py5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBoYW5kbGVSZXN1bHRLZXlQcmVzcyA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBbJ0Fycm93VXAnLCAnVXAnXS5pbmNsdWRlcyhldmVudC5rZXkpICYmXG4gICAgICAgICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpPy5pZCA9PT0gJ3Jlc3VsdF8wJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmVyZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjc2VhcmNoSW5wdXQnKT8uZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SW1wZXJzb25hdGlvbigpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKiBTZWFyY2ggS2V5Y2xvYWsgdXNlcnMgdXNpbmcgYSBnZW5lcmljIHNlYXJjaCBxdWVyeS4gKi9cbiAgICBwcml2YXRlIHNlYXJjaFVzZXJzID0gKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgdXJpID0gdXJsY2F0KHRoaXMub2lkY0Jhc2VVcmkoKSwgU0VBUkNIX1VTRVJTX1BBVEgsIHtcbiAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJbXBlcnNvbmF0ZVNlYXJjaFJlc3VsdFtdPih1cmksIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5hY2Nlc3NUb2tlblBheWxvYWQoKS50b2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVwbGFjZVVybCA9ICh1cmw6IHN0cmluZykgPT4gd2luZG93LmxvY2F0aW9uLnJlcGxhY2UodXJsKTtcbn1cbiIsIkBpZiAoaXNPcGVuKSB7XG4gICAgPGRpdiBAbGliSGJsbEZhZGVJbk91dCBjbGFzcz1cIm1vZGFsLXdyYXBwZXJcIiBpZD1cIm1vZGFsQmFja2Ryb3BcIiBkYXRhLXRlc3RpZD1cImJhY2tkcm9wXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250YWluZXJcIiBkYXRhLXRlc3RpZD1cIm1vZGFsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGgyPkltcGVyc29uYXRlPC9oMj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xvc2UoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGRhdGEtdGVzdGlkPVwiY2xvc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb24tY2xvc2VcIj4gY2xvc2UgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cImhhbmRsZUZvcm1TdWJtaXQoJGV2ZW50KVwiIGRhdGEtdGVzdGlkPVwic2VhcmNoRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWNvbmRhcnlcIiBbY2xhc3MuZGlzYWJsZWRdPVwiIWZvcm0udmFsaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwia2V5Ym9hcmQta2V5XCI+RW50ZXI8L3NwYW4+IHRvIHNlYXJjaFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgZm9yPVwic2VhcmNoSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmludmFsaWRdPVwiZm9ybS5pbnZhbGlkICYmIGZvcm0uZGlydHlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb24tc2VhcmNoXCI+IHNlYXJjaCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzZWFyY2hJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIHBhdHJvbnMuLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlU2VhcmNoS2V5UHJlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAjc2VhcmNoQm94XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cInNlYXJjaElucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghIXNlYXJjaEJveC52YWx1ZSAmJiBmb3JtLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1jaGVja21hcmtcIj4gY2hlY2sgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2VhcmNoQm94LnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxpYkhibGxGYWRlSW5PdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1jbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8ZmllbGRzZXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1yZXN1bHRzLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgIGlkPVwicmVzdWx0c1Njcm9sbENvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVTZWxlY3RVc2VyKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZiAoIWxvYWRpbmcgJiYgcmVzdWx0cygpKSB7XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHVzZXIgb2YgcmVzdWx0cygpOyB0cmFjayB1c2VyLm5ldElkOyBsZXQgaWR4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXN1bHQtZmllbGQgcmVzdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZm9jdXNdPVwidXNlci51c2VybmFtZSA9PT0gc2VsZWN0ZWRVc2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJyZXN1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidyZXN1bHRfJyArIGlkeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy53YXJuaW5nXT1cInVzZXIucmVzdHJpY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwic2VsZWN0ZWRVc2VybmFtZSA9IHVzZXIudXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICh1c2VyLnJlc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uXCI+IHdhcm5pbmcgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uXCI+IHBlcnNvbiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7ICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwidXNlclwiIGRhdGEtdGVzdGlkPVwicmVzdWx0VGV4dFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIHwgaW1wZXJzb25hdGVVc2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidXNlci51c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ3Jlc3VsdF8nICsgaWR4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZXN1bHRTZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlUmVzdWx0S2V5UHJlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1wZXJzb25hdGUtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJpbXBlcnNvbmF0ZUJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdGFydEltcGVyc29uYXRpb24odXNlci51c2VybmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wZXJzb25hdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9IEBlbXB0eSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdWx0LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gcmVzdWx0cy4gVHJ5IHNlYXJjaGluZyBieSBOZXQgSUQgb3IgQllVIElELlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWItc3Bpbm5lclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdWx0LWZpZWxkXCI+U29tZXRoaW5nIHdlbnQgd3JvbmcuIFdlJ2xsIGtlZXAgdHJ5aW5nLjwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxufVxuIl19
@@ -115,7 +115,6 @@ export class ImpersonationBannerComponent {
115
115
  return accountStatuses;
116
116
  }));
117
117
  })));
118
- this.STATUSES = AccessStatus;
119
118
  }
120
119
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ImpersonationBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
121
120
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ImpersonationBannerComponent, isStandalone: true, selector: "lib-impersonation-banner", inputs: { accessTokenPayload: { classPropertyName: "accessTokenPayload", publicName: "accessTokenPayload", isSignal: true, isRequired: true, transformFunction: null }, personBaseUri: { classPropertyName: "personBaseUri", publicName: "personBaseUri", isSignal: true, isRequired: false, transformFunction: null }, libraryApiBaseUri: { classPropertyName: "libraryApiBaseUri", publicName: "libraryApiBaseUri", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { endImpersonation: "endImpersonation" }, ngImport: i0, template: "@if (isImpersonating()) {\n <div class=\"banner-padding\"></div>\n <div class=\"top-banner\" data-testid=\"banner\">\n <div class=\"banner-group profile-name-container\">\n <div class=\"profile-avatar\">\n <div class=\"profile-image\">\n <img\n [src]=\"userPhotoUrl()\"\n [alt]=\"userFullName()\"\n alt=\"user photo\"\n onerror=\"this.remove()\"\n />\n </div>\n <span class=\"material-symbols-outlined profile-icon\"> person </span>\n </div>\n <div class=\"profile-name-group\">\n <span class=\"soft\">Impersonating</span>\n <div class=\"profile-name-wrapper\">\n <span class=\"profile-name\">{{ userFullName() }}</span>\n @if (accountStatuses()) {\n <div class=\"application-status-bar\">\n @if (accountStatuses()!.ok.length) {\n <div class=\"application-status-indicator\">\n <span class=\"application-status-ok application-status\">\n <span class=\"material-symbols-outlined icon-checkmark\">\n check\n </span>\n <span class=\"application-count\">{{\n accountStatuses()!.ok.length\n }}</span>\n </span>\n <div class=\"status-tooltip-container\">\n <div class=\"status-tooltip\">\n OK Applications\n <hr />\n @for (\n application of accountStatuses()!.ok;\n track application.label\n ) {\n <div class=\"application-status\">\n <span\n class=\"material-symbols-outlined icon-checkmark\"\n >\n check\n </span>\n <span>{{ application.label }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n }\n @if (accountStatuses()!.blocked.length) {\n <div class=\"application-status-indicator\">\n <span class=\"application-status-blocked application-status\">\n <span class=\"material-symbols-outlined icon-warning\">\n warning\n </span>\n <span class=\"application-count\">{{\n accountStatuses()!.blocked.length\n }}</span>\n </span>\n <div class=\"status-tooltip-container\">\n <div class=\"status-tooltip\">\n Blocked Applications\n <hr />\n @for (\n application of accountStatuses()!.blocked;\n track application.code\n ) {\n <div class=\"application-status\">\n <span\n class=\"material-symbols-outlined icon-warning\"\n >\n warning\n </span>\n <span>{{ application.label }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n }\n @if (accountStatuses()!.none.length) {\n <div class=\"application-status-indicator\">\n <span class=\"application-status-none application-status\">\n <span class=\"material-symbols-outlined icon-lock\">\n lock\n </span>\n <span class=\"application-count\">{{\n accountStatuses()!.none.length\n }}</span>\n </span>\n <div class=\"status-tooltip-container\">\n <div class=\"status-tooltip\">\n No Account\n <hr />\n @for (\n application of accountStatuses()!.none;\n track application.label\n ) {\n <div class=\"application-status\">\n <span\n class=\"material-symbols-outlined icon-lock\"\n >\n lock\n </span>\n <span>{{ application.label }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n <div class=\"profile-details-container banner-group\">\n @for (detail of userInfoTabs() | keyvalue; track detail.key) {\n <div class=\"profile-detail\">\n <span class=\"soft label\">{{ detail.key }}</span>\n <lib-copy-tooltip [copyText]=\"detail.value\">\n <div class=\"profile-detail-tag white-tag clickable\">\n {{ detail.value || 'Unknown' }}\n </div>\n </lib-copy-tooltip>\n </div>\n }\n </div>\n <div class=\"profile-details-container banner-group\">\n <div class=\"profile-detail\">\n <span class=\"soft label\">Status</span>\n <div class=\"multiple-detail-tags\">\n <div\n class=\"profile-detail-tag color-tag\"\n title=\"{{ employeeStatusDescription() }}\"\n >\n {{ user()?.primary_position_type_display ?? 'Non-employee' }}\n @if (activityStatus()) {\n <span\n class=\"profile-status-circle\"\n [class.status-active]=\"activityStatus() === 'active'\"\n [class.status-inactive]=\"activityStatus() === 'inactive'\"\n [class.status-retired]=\"activityStatus() === 'retired'\"\n ></span>\n }\n </div>\n <div class=\"profile-detail-tag color-tag\">\n {{ (user()?.undergrad_graduate_status | titlecase) || 'Non-student' }}\n </div>\n <div class=\"profile-detail-tag color-tag\">\n {{ independentStudyStatus() ? 'Independent Study' : 'No Ind. Study' }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"spacer\"></div>\n <button class=\"end-impersonation-button shadow\" (click)=\"this.endImpersonation.emit()\">\n <span class=\"material-symbols-outlined icon\"> close </span>\n <span class=\"exit-text\">Exit</span>\n </button>\n </div>\n @if (isRestricted()) {\n <div class=\"restricted-bar-padding\"></div>\n <div class=\"restricted-bar\">\n <span class=\"title\">restricted person</span>\n <span class=\"text\">\n If anyone asks about this person, you are instructed to respond,\n <span class=\"emphasize\">\"We have no records for this person.\"</span>\n </span>\n </div>\n }\n <div class=\"right-border\"></div>\n <div class=\"bottom-border\"></div>\n <div class=\"left-border\"></div>\n}\n", styles: ["*{box-sizing:border-box}.top-banner,.bottom-border,.right-border,.left-border{background-color:#9070bf;border:none;position:fixed;box-sizing:border-box;z-index:1000}lib-copy-tooltip{z-index:10000;display:block}.top-banner,.bottom-border{left:0;right:0}.right-border,.left-border{width:7px;top:0;bottom:0}.bottom-border{bottom:0;height:7px}.right-border{right:0}.left-border{left:0}.banner-padding{padding-top:5em}.restricted-bar-padding{padding-top:40px}.restricted-bar{position:fixed;top:5em;left:7px;right:7px;height:40px;display:flex;align-items:center;color:#f3f3f3;background:repeating-linear-gradient(315deg,#c23737,#c23737 35px,#c25050 35px 70px);z-index:6000;font-size:1.6em}.restricted-bar .title{text-transform:uppercase;font-weight:600;margin:0 2em}.restricted-bar .text{margin:0 1em}.restricted-bar .text .emphasize{font-weight:600;font-style:italic}.top-banner{top:0;height:5em;display:flex;justify-content:space-between;width:100%;align-items:center;padding:2.5em;color:#f3f3f3;font-size:1em}.top-banner .banner-group{display:flex;margin-right:1.6em}.top-banner .profile-details-container{height:2.4em;display:flex;min-width:0}.top-banner .profile-details-container .profile-detail{display:flex;flex-flow:column nowrap;align-items:flex-start;justify-content:space-between;margin-right:.6em;font-weight:600;min-width:0;position:relative;z-index:6001}.top-banner .profile-details-container .profile-detail .label{font-size:.75em;white-space:nowrap;min-width:0;max-width:100%}.top-banner .profile-details-container .profile-detail .profile-detail-tag{font-size:.8em;padding:.2em .4em;border-radius:5px;display:inline-flex;align-items:center;gap:.5em;white-space:nowrap;min-width:0;max-width:100%}.top-banner .profile-details-container .profile-detail .profile-detail-tag:hover{min-width:max-content;z-index:1000}.top-banner .profile-details-container .profile-detail .profile-detail-tag:last-of-type{margin-right:0}.top-banner .profile-details-container .profile-detail .profile-detail-tag .profile-status-circle{font-size:1em;width:10px;height:10px;border-radius:50%;flex-shrink:0}.top-banner .profile-details-container .profile-detail .profile-detail-tag .status-active{background-color:#00e732}.top-banner .profile-details-container .profile-detail .profile-detail-tag .status-retired{background-color:#ffba38}.top-banner .profile-details-container .profile-detail .profile-detail-tag .status-inactive{border:2px white solid}.top-banner .profile-details-container .profile-detail .multiple-detail-tags{display:flex;flex-flow:row nowrap;min-width:0;max-width:100%}.top-banner .profile-details-container .profile-detail .multiple-detail-tags .profile-detail-tag{margin-right:.6em}.top-banner .profile-name-container{display:flex;align-items:center}.top-banner .profile-name-container .profile-avatar{border-radius:50%;background-color:#fff;padding:0;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;color:#a9a9a9;align-self:center;font-size:15px;overflow:hidden;height:3.5em;width:3.5em;margin-right:.6em;flex-shrink:0}.top-banner .profile-name-container .profile-avatar .profile-icon{margin:-.25em}.top-banner .profile-name-container .profile-avatar .profile-image{height:100%;width:100%;object-fit:cover;font-size:1em}.top-banner .profile-name-container .profile-avatar .profile-image+.profile-icon{display:none;font-size:3.5em}.top-banner .profile-name-container .profile-avatar .profile-image:empty{display:none}.top-banner .profile-name-container .profile-avatar .profile-image:empty+.profile-icon{display:block}.top-banner .profile-name-container .profile-name-group{font-size:1em;font-weight:600}.top-banner .profile-name-container .profile-name-group .profile-name-wrapper{display:flex;align-items:center;white-space:nowrap}.top-banner .profile-name-container .profile-name-group .profile-name-wrapper .profile-name{font-size:1.6em;line-height:1em}.top-banner .profile-name-container .profile-name-group .profile-name-wrapper .application-status-bar{margin-left:1em;opacity:1;display:flex;align-items:center}.top-banner .profile-name-container .profile-name-group .profile-name-wrapper .application-status-bar .application-status-indicator{position:relative;margin-right:.8em}.top-banner .profile-name-container .profile-name-group .profile-name-wrapper .application-status-bar .application-status-indicator .application-count{margin-left:.5em;vertical-align:middle}.top-banner .profile-name-container .profile-name-group .profile-name-wrapper .application-status-bar .application-status-indicator:last-child{margin-right:0}.top-banner .profile-name-container .profile-name-group .profile-name-wrapper .application-status-bar .application-status:hover+.status-tooltip-container{display:block}.top-banner .profile-name-container .profile-name-group .profile-name-wrapper .application-status-bar .application-status-ok{color:#87ed8f}.top-banner .profile-name-container .profile-name-group .profile-name-wrapper .application-status-bar .application-status-ok .icon-checkmark{background-color:#87ed8f;color:#9070bf;border-radius:50%;padding:.2em;font-size:1em;vertical-align:middle}.top-banner .profile-name-container .profile-name-group .profile-name-wrapper .application-status-bar .application-status-blocked{color:#e9ce34}.top-banner .profile-name-container .profile-name-group .profile-name-wrapper .application-status-bar .application-status-blocked .icon-warning{font-size:1.7em;vertical-align:middle}.top-banner .profile-name-container .profile-name-group .profile-name-wrapper .application-status-bar .application-status-blocked .application-count{margin-left:.1em}.top-banner .profile-name-container .profile-name-group .profile-name-wrapper .application-status-bar .application-status-none{color:#f4785b}.top-banner .profile-name-container .profile-name-group .profile-name-wrapper .application-status-bar .application-status-none .icon-lock{background-color:#f4785b;color:#9070bf;border-radius:50%;padding:.2em;font-size:1em;vertical-align:middle}.top-banner .soft{opacity:.7}.top-banner .end-impersonation-button{height:2.4em;cursor:pointer;border-radius:2em;font-size:1em;padding:0 1.4em 0 1em;border:none;outline:none;flex-shrink:0;background-color:#fff;color:#c63d3d;font-weight:600;transition:box-shadow .2s;display:flex;align-items:center}.top-banner .end-impersonation-button:hover{box-shadow:#0003 0 8px 10px}.top-banner .end-impersonation-button .icon{font-size:1.2em;margin-right:.2em}.top-banner .spacer{flex-grow:1}.top-banner .shadow{box-shadow:#0003 0 2px 10px}.top-banner .white-tag{cursor:pointer;background-color:#ffffff26}.top-banner .white-tag:hover{background-color:#614979}.top-banner .color-tag:nth-of-type(1){background-color:#26acffcc}.top-banner .color-tag:nth-of-type(2){background-color:#9394ffcc}.top-banner .color-tag:nth-of-type(3){background-color:#a28ceecc}.top-banner .status-tooltip-container{color:#fff;background-color:#2e2e2e;display:none;transition:all .1s ease-in-out;position:absolute;top:calc(100% + 1em);left:50%;transform:translate(-50%);border-radius:.4em}.top-banner .status-tooltip-container:before{content:\"\";position:absolute;top:-.5em;left:50%;transform:translate(-50%);border-style:solid;border-width:0 1em 1em 1em;border-color:transparent transparent rgb(46,46,46) transparent}.top-banner .status-tooltip{text-align:left;padding:.8em;line-height:2em;font-weight:700}.top-banner .status-tooltip .application-status{display:flex;align-items:center;font-weight:400}.top-banner .status-tooltip .application-status [class*=icon-]{font-size:1.2em;margin-right:.2em}.top-banner .status-tooltip .application-status .icon-checkmark{color:#87ed8f}.top-banner .status-tooltip .application-status .icon-warning{color:#e9ce34}.top-banner .status-tooltip .application-status .icon-lock{color:#f4785b}@media screen and (max-width: 1100px){.top-banner .profile-name-group .soft{font-size:.7em}.top-banner .profile-name-group .profile-name{font-size:1.3em}.top-banner .end-impersonation-button{border-radius:50%;height:auto;padding:.6em}.top-banner .end-impersonation-button .icon{margin:0}.top-banner .end-impersonation-button .exit-text{display:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }, { kind: "component", type: CopyTooltipComponent, selector: "lib-copy-tooltip", inputs: ["position", "copyText"] }] }); }
@@ -126,4 +125,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
126
125
  }], propDecorators: { endImpersonation: [{
127
126
  type: Output
128
127
  }] } });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wZXJzb25hdGlvbi1iYW5uZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2ltcGVyc29uYXRpb24tYmFubmVyL2ltcGVyc29uYXRpb24tYmFubmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9pbXBlcnNvbmF0aW9uLWJhbm5lci9pbXBlcnNvbmF0aW9uLWJhbm5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQ0gsWUFBWSxHQUdmLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxZQUFZLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7QUFFOUUsTUFBTSxjQUFjLEdBQUcsNERBQTRELENBQUM7QUFDcEYsTUFBTSxtQkFBbUIsR0FBRyxzQkFBc0IsQ0FBQztBQUNuRCxNQUFNLCtCQUErQixHQUFHLGdDQUFn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QUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIGlucHV0LCBPdXRwdXQsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIEFjY2Vzc1N0YXR1cyxcbiAgICBBY2NvdW50c1Jlc3BvbnNlLFxuICAgIHR5cGUgQXBwbGljYXRpb25BY2Nlc3MsXG59IGZyb20gJy4vbW9kZWxzL2FwcGxpY2F0aW9uLWFjY2Vzcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVG9rZW5QYXlsb2FkIH0gZnJvbSAnLi4vbW9kZWxzL3Rva2VuLXBheWxvYWQnO1xuaW1wb3J0IHsgand0RGVjb2RlLCBKd3RQYXlsb2FkIH0gZnJvbSAnand0LWRlY29kZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluZGVwZW5kZW50U3R1ZHlSZXNwb25zZSwgUGVyc29uU3VtbWFyeSB9IGZyb20gJy4vbW9kZWxzL3BlcnNvbi1zdW1tYXJ5JztcbmltcG9ydCB1cmxjYXQgZnJvbSAndXJsY2F0JztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb3B5VG9vbHRpcENvbXBvbmVudCB9IGZyb20gJy4uL2NvcHktdG9vbHRpcC9jb3B5LXRvb2x0aXAuY29tcG9uZW50JztcblxuY29uc3QgVVNFUl9QSE9UT19VUkwgPSAnaHR0cHM6Ly95LmJ5dS5lZHUvcnkvYWUvcHJvZC9wZXJzb24vY2dpL3BlcnNvblBob3RvLmNnaT9uPSc7XG5jb25zdCBQRVJTT05fU1VNTUFSWV9QQVRIID0gJy9zdW1tYXJ5LzpsaWJyYXJ5SWQvJztcbmNvbnN0IElOREVQRU5ERU5UX1NUVURZX1JFU1BPTlNFX1BBVEggPSAnL2luZGVwZW5kZW50LXN0dWR5LzpsaWJyYXJ5SWQvJztcbmNvbnN0IFBBVFJPTl9BQ0NPVU5UU19QQVRIID0gJy9wYXRyb24vYWNjb3VudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIENvcHlUb29sdGlwQ29tcG9uZW50XSxcbiAgICBzZWxlY3RvcjogJ2xpYi1pbXBlcnNvbmF0aW9uLWJhbm5lcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ltcGVyc29uYXRpb24tYmFubmVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9pbXBlcnNvbmF0aW9uLWJhbm5lci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBJbXBlcnNvbmF0aW9uQmFubmVyQ29tcG9uZW50IHtcbiAgICBwcml2YXRlIGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gICAgYWNjZXNzVG9rZW5QYXlsb2FkID0gaW5wdXQucmVxdWlyZWQ8VG9rZW5QYXlsb2FkPigpO1xuICAgIHBlcnNvbkJhc2VVcmkgPSBpbnB1dCgnaHR0cHM6Ly9hcHBzLmxpYi5ieXUuZWR1L3BlcnNvbi92Mi8nKTtcbiAgICBsaWJyYXJ5QXBpQmFzZVVyaSA9IGlucHV0KCdodHRwczovL3N0YWdpbmcubGliLmJ5dS5lZHUvdjEnKTtcbiAgICBAT3V0cHV0KCkgZW5kSW1wZXJzb25hdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHByb3RlY3RlZCBwYXJzZWRUb2tlbjogU2lnbmFsPEp3dFBheWxvYWQgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgIHRoaXMuYWNjZXNzVG9rZW5QYXlsb2FkKCkudG9rZW4gPyBqd3REZWNvZGUodGhpcy5hY2Nlc3NUb2tlblBheWxvYWQoKS50b2tlbikgOiB7fSxcbiAgICApO1xuICAgIHByb3RlY3RlZCBpc0ltcGVyc29uYXRpbmcgPSBjb21wdXRlZCgoKSA9PiAhIXRoaXMucGFyc2VkVG9rZW4oKVsnaW1wZXJzb25hdG9yJ10pO1xuICAgIHByb3RlY3RlZCBsaWJyYXJ5SWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBhcnNlZFRva2VuKClbJ2xpYnJhcnlfaWQnXSk7XG4gICAgcHJvdGVjdGVkIHVzZXIgPSB0b1NpZ25hbChcbiAgICAgICAgY29tYmluZUxhdGVzdChbdG9PYnNlcnZhYmxlKHRoaXMubGlicmFyeUlkKSwgdG9PYnNlcnZhYmxlKHRoaXMuaXNJbXBlcnNvbmF0aW5nKV0pLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKFtsaWJyYXJ5SWQsIGlzSW1wZXJzb25hdGluZ10pID0+XG4gICAgICAgICAgICAgICAgbGlicmFyeUlkICYmIGlzSW1wZXJzb25hdGluZ1xuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuaHR0cC5nZXQ8UGVyc29uU3VtbWFyeT4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVybGNhdCh0aGlzLnBlcnNvbkJhc2VVcmkoKSwgUEVSU09OX1NVTU1BUllfUEFUSCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmFjY2Vzc1Rva2VuUGF5bG9hZCgpLnRva2VufWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiBvZihudWxsKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgKTtcbiAgICBwcm90ZWN0ZWQgdXNlckZ1bGxOYW1lID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgdGhpcy5wYXJzZWRUb2tlbigpWydnaXZlbl9uYW1lJ11cbiAgICAgICAgICAgID8gYCR7dGhpcy5wYXJzZWRUb2tlbigpWydnaXZlbl9uYW1lJ119ICR7dGhpcy5wYXJzZWRUb2tlbigpWydmYW1pbHlfbmFtZSddfWBcbiAgICAgICAgICAgIDogJ1Vua25vd24nLFxuICAgICk7XG4gICAgcHJvdGVjdGVkIGlzUmVzdHJpY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMudXNlcigpPy5yZXN0cmljdGVkKTtcbiAgICBwcm90ZWN0ZWQgdXNlckluZm9UYWJzID0gY29tcHV0ZWQoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICBuZXcgTWFwKFtcbiAgICAgICAgICAgICAgICBbJ05ldCBJRCcsIHRoaXMucGFyc2VkVG9rZW4oKVsnbmV0X2lkJ10gPz8gJyddLFxuICAgICAgICAgICAgICAgIFsnQllVIElEJywgdGhpcy5wYXJzZWRUb2tlbigpWydieXVfaWQnXSA/PyAnJ10sXG4gICAgICAgICAgICAgICAgWydFbWFpbCcsIHRoaXMucGFyc2VkVG9rZW4oKVsnZW1haWwnXSA/PyAnJ10sXG4gICAgICAgICAgICBdKSxcbiAgICApO1xuICAgIHByb3RlY3RlZCB1c2VyUGhvdG9VcmwgPSBjb21wdXRlZCgoKSA9PlxuICAgICAgICB0aGlzLnBhcnNlZFRva2VuKClbJ25ldF9pZCddID8gVVNFUl9QSE9UT19VUkwgKyB0aGlzLnBhcnNlZFRva2VuKClbJ25ldF9pZCddIDogJycsXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCBhY3Rpdml0eVN0YXR1cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudXNlcigpPy5pc19yZXRpcmVkKSByZXR1cm4gJ3JldGlyZWQnO1xuICAgICAgICBlbHNlIGlmICh0aGlzLnVzZXIoKT8uaXNfZW1wbG95ZWUpIHJldHVybiAnYWN0aXZlJztcbiAgICAgICAgZWxzZSBpZiAodGhpcy51c2VyKCk/LnByaW1hcnlfcG9zaXRpb25fdHlwZSkgcmV0dXJuICdpbmFjdGl2ZSc7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuXG4gICAgcHJvdGVjdGVkIGVtcGxveWVlU3RhdHVzRGVzY3JpcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy51c2VyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRlc2NyaXB0aW9uID0gJyc7XG4gICAgICAgIGlmICh0aGlzLnVzZXIoKSEuaXNfcmV0aXJlZCkge1xuICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAnUmV0aXJlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy51c2VyKCkhLmlzX2VtcGxveWVlKSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICdBY3RpdmUnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNlcigpIS5wcmltYXJ5X3Bvc2l0aW9uX3R5cGUpIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gJ0luYWN0aXZlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnVzZXIoKSEucHJpbWFyeV9wb3NpdGlvbl90eXBlX2Rpc3BsYXkpIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uICs9IGAgJHt0aGlzLnVzZXIoKSEucHJpbWFyeV9wb3NpdGlvbl90eXBlX2Rpc3BsYXl9IEVtcGxveWVlYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZXNjcmlwdGlvbiA/PyBudWxsO1xuICAgIH0pO1xuXG4gICAgcHJvdGVjdGVkIGluZGVwZW5kZW50U3R1ZHlTdGF0dXMgPSB0b1NpZ25hbChcbiAgICAgICAgY29tYmluZUxhdGVzdChbdG9PYnNlcnZhYmxlKHRoaXMubGlicmFyeUlkKSwgdG9PYnNlcnZhYmxlKHRoaXMuaXNJbXBlcnNvbmF0aW5nKV0pLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKFtsaWJyYXJ5SWQsIGlzSW1wZXJzb25hdGluZ10pID0+XG4gICAgICAgICAgICAgICAgbGlicmFyeUlkICYmIGlzSW1wZXJzb25hdGluZ1xuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0PEluZGVwZW5kZW50U3R1ZHlSZXNwb25zZT4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxjYXQodGhpcy5wZXJzb25CYXNlVXJpKCksIElOREVQRU5ERU5UX1NUVURZX1JFU1BPTlNFX1BBVEgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmFjY2Vzc1Rva2VuUGF5bG9hZCgpLnRva2VufWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2U/LmlzX2Vucm9sbGVkKSlcbiAgICAgICAgICAgICAgICAgICAgOiBvZihudWxsKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgKTtcbiAgICBwcm90ZWN0ZWQgYWNjb3VudFN0YXR1c2VzID0gdG9TaWduYWwoXG4gICAgICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmlzSW1wZXJzb25hdGluZykucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoaXNJbXBlcnNvbmF0aW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0ltcGVyc29uYXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAgICAgICAgIC5nZXQ8QWNjb3VudHNSZXNwb25zZT4odXJsY2F0KHRoaXMubGlicmFyeUFwaUJhc2VVcmkoKSwgUEFUUk9OX0FDQ09VTlRTX1BBVEgpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuYWNjZXNzVG9rZW5QYXlsb2FkKCkudG9rZW59YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChhY2NvdW50cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjY291bnRTdGF0dXNlcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2s6IFtdIGFzIEFwcGxpY2F0aW9uQWNjZXNzW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrZWQ6IFtdIGFzIEFwcGxpY2F0aW9uQWNjZXNzW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmU6IFtdIGFzIEFwcGxpY2F0aW9uQWNjZXNzW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoYWNjb3VudHMuYXBwbGljYXRpb25zKS5mb3JFYWNoKChhcHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcHAuYWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc1N0YXR1cy5PSzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50U3RhdHVzZXMub2sucHVzaChhcHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NTdGF0dXMuQkxPQ0tFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50U3RhdHVzZXMuYmxvY2tlZC5wdXNoKGFwcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc1N0YXR1cy5OT05FOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnRTdGF0dXNlcy5ub25lLnB1c2goYXBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjY291bnRTdGF0dXNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCBTVEFUVVNFUyA9IEFjY2Vzc1N0YXR1cztcbn1cbiIsIkBpZiAoaXNJbXBlcnNvbmF0aW5nKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiYmFubmVyLXBhZGRpbmdcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidG9wLWJhbm5lclwiIGRhdGEtdGVzdGlkPVwiYmFubmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYW5uZXItZ3JvdXAgcHJvZmlsZS1uYW1lLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2ZpbGUtYXZhdGFyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2ZpbGUtaW1hZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJ1c2VyUGhvdG9VcmwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWx0XT1cInVzZXJGdWxsTmFtZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cInVzZXIgcGhvdG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25lcnJvcj1cInRoaXMucmVtb3ZlKClcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBwcm9maWxlLWljb25cIj4gcGVyc29uIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2ZpbGUtbmFtZS1ncm91cFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic29mdFwiPkltcGVyc29uYXRpbmc8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2ZpbGUtbmFtZS13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvZmlsZS1uYW1lXCI+e3sgdXNlckZ1bGxOYW1lKCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoYWNjb3VudFN0YXR1c2VzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHBsaWNhdGlvbi1zdGF0dXMtYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhY2NvdW50U3RhdHVzZXMoKSEub2subGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHBsaWNhdGlvbi1zdGF0dXMtaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFwcGxpY2F0aW9uLXN0YXR1cy1vayBhcHBsaWNhdGlvbi1zdGF0dXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1jaGVja21hcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHBsaWNhdGlvbi1jb3VudFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnRTdGF0dXNlcygpIS5vay5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtdG9vbHRpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0sgQXBwbGljYXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxociAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIG9mIGFjY291bnRTdGF0dXNlcygpIS5vaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIGFwcGxpY2F0aW9uLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcGxpY2F0aW9uLXN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLWNoZWNrbWFya1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBhcHBsaWNhdGlvbi5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYWNjb3VudFN0YXR1c2VzKCkhLmJsb2NrZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHBsaWNhdGlvbi1zdGF0dXMtaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFwcGxpY2F0aW9uLXN0YXR1cy1ibG9ja2VkIGFwcGxpY2F0aW9uLXN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLXdhcm5pbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFwcGxpY2F0aW9uLWNvdW50XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudFN0YXR1c2VzKCkhLmJsb2NrZWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLXRvb2x0aXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1cy10b29sdGlwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrZWQgQXBwbGljYXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxociAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIG9mIGFjY291bnRTdGF0dXNlcygpIS5ibG9ja2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgYXBwbGljYXRpb24uY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHBsaWNhdGlvbi1zdGF0dXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi13YXJuaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgYXBwbGljYXRpb24ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjY291bnRTdGF0dXNlcygpIS5ub25lLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwbGljYXRpb24tc3RhdHVzLWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHBsaWNhdGlvbi1zdGF0dXMtbm9uZSBhcHBsaWNhdGlvbi1zdGF0dXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1sb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHBsaWNhdGlvbi1jb3VudFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnRTdGF0dXNlcygpIS5ub25lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1cy10b29sdGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtdG9vbHRpcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBBY2NvdW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxociAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIG9mIGFjY291bnRTdGF0dXNlcygpIS5ub25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgYXBwbGljYXRpb24ubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwbGljYXRpb24tc3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb24tbG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGFwcGxpY2F0aW9uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZmlsZS1kZXRhaWxzLWNvbnRhaW5lciBiYW5uZXItZ3JvdXBcIj5cbiAgICAgICAgICAgIEBmb3IgKGRldGFpbCBvZiB1c2VySW5mb1RhYnMoKSB8IGtleXZhbHVlOyB0cmFjayBkZXRhaWwua2V5KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2ZpbGUtZGV0YWlsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic29mdCBsYWJlbFwiPnt7IGRldGFpbC5rZXkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItY29weS10b29sdGlwIFtjb3B5VGV4dF09XCJkZXRhaWwudmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9maWxlLWRldGFpbC10YWcgd2hpdGUtdGFnIGNsaWNrYWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRldGFpbC52YWx1ZSB8fCAnVW5rbm93bicgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2xpYi1jb3B5LXRvb2x0aXA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZmlsZS1kZXRhaWxzLWNvbnRhaW5lciBiYW5uZXItZ3JvdXBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9maWxlLWRldGFpbFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic29mdCBsYWJlbFwiPlN0YXR1czwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXVsdGlwbGUtZGV0YWlsLXRhZ3NcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9maWxlLWRldGFpbC10YWcgY29sb3ItdGFnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgZW1wbG95ZWVTdGF0dXNEZXNjcmlwdGlvbigpIH19XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgdXNlcigpPy5wcmltYXJ5X3Bvc2l0aW9uX3R5cGVfZGlzcGxheSA/PyAnTm9uLWVtcGxveWVlJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhY3Rpdml0eVN0YXR1cygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9maWxlLXN0YXR1cy1jaXJjbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc3RhdHVzLWFjdGl2ZV09XCJhY3Rpdml0eVN0YXR1cygpID09PSAnYWN0aXZlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zdGF0dXMtaW5hY3RpdmVdPVwiYWN0aXZpdHlTdGF0dXMoKSA9PT0gJ2luYWN0aXZlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zdGF0dXMtcmV0aXJlZF09XCJhY3Rpdml0eVN0YXR1cygpID09PSAncmV0aXJlZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZmlsZS1kZXRhaWwtdGFnIGNvbG9yLXRhZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgKHVzZXIoKT8udW5kZXJncmFkX2dyYWR1YXRlX3N0YXR1cyB8IHRpdGxlY2FzZSkgfHwgJ05vbi1zdHVkZW50JyB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2ZpbGUtZGV0YWlsLXRhZyBjb2xvci10YWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGluZGVwZW5kZW50U3R1ZHlTdGF0dXMoKSA/ICdJbmRlcGVuZGVudCBTdHVkeScgOiAnTm8gSW5kLiBTdHVkeScgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZXJcIj48L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImVuZC1pbXBlcnNvbmF0aW9uLWJ1dHRvbiBzaGFkb3dcIiAoY2xpY2spPVwidGhpcy5lbmRJbXBlcnNvbmF0aW9uLmVtaXQoKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb25cIj4gY2xvc2UgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJleGl0LXRleHRcIj5FeGl0PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICBAaWYgKGlzUmVzdHJpY3RlZCgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0cmljdGVkLWJhci1wYWRkaW5nXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0cmljdGVkLWJhclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPnJlc3RyaWN0ZWQgcGVyc29uPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0XCI+XG4gICAgICAgICAgICAgICAgSWYgYW55b25lIGFza3MgYWJvdXQgdGhpcyBwZXJzb24sIHlvdSBhcmUgaW5zdHJ1Y3RlZCB0byByZXNwb25kLFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZW1waGFzaXplXCI+XCJXZSBoYXZlIG5vIHJlY29yZHMgZm9yIHRoaXMgcGVyc29uLlwiPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0LWJvcmRlclwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJib3R0b20tYm9yZGVyXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImxlZnQtYm9yZGVyXCI+PC9kaXY+XG59XG4iXX0=
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wZXJzb25hdGlvbi1iYW5uZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2ltcGVyc29uYXRpb24tYmFubmVyL2ltcGVyc29uYXRpb24tYmFubmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9pbXBlcnNvbmF0aW9uLWJhbm5lci9pbXBlcnNvbmF0aW9uLWJhbm5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQ0gsWUFBWSxHQUdmLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxZQUFZLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7QUFFOUUsTUFBTSxjQUFjLEdBQUcsNERBQTRELENBQUM7QUFDcEYsTUFBTSxtQkFBbUIsR0FBRyxzQkFBc0IsQ0FBQztBQUNuRCxNQUFNLCtCQUErQixHQUFHLGdDQUFn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cG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBpbnB1dCwgT3V0cHV0LCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBBY2Nlc3NTdGF0dXMsXG4gICAgQWNjb3VudHNSZXNwb25zZSxcbiAgICB0eXBlIEFwcGxpY2F0aW9uQWNjZXNzLFxufSBmcm9tICcuL21vZGVscy9hcHBsaWNhdGlvbi1hY2Nlc3MnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRva2VuUGF5bG9hZCB9IGZyb20gJy4uL21vZGVscy90b2tlbi1wYXlsb2FkJztcbmltcG9ydCB7IGp3dERlY29kZSwgSnd0UGF5bG9hZCB9IGZyb20gJ2p3dC1kZWNvZGUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmRlcGVuZGVudFN0dWR5UmVzcG9uc2UsIFBlcnNvblN1bW1hcnkgfSBmcm9tICcuL21vZGVscy9wZXJzb24tc3VtbWFyeSc7XG5pbXBvcnQgdXJsY2F0IGZyb20gJ3VybGNhdCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29weVRvb2x0aXBDb21wb25lbnQgfSBmcm9tICcuLi9jb3B5LXRvb2x0aXAvY29weS10b29sdGlwLmNvbXBvbmVudCc7XG5cbmNvbnN0IFVTRVJfUEhPVE9fVVJMID0gJ2h0dHBzOi8veS5ieXUuZWR1L3J5L2FlL3Byb2QvcGVyc29uL2NnaS9wZXJzb25QaG90by5jZ2k/bj0nO1xuY29uc3QgUEVSU09OX1NVTU1BUllfUEFUSCA9ICcvc3VtbWFyeS86bGlicmFyeUlkLyc7XG5jb25zdCBJTkRFUEVOREVOVF9TVFVEWV9SRVNQT05TRV9QQVRIID0gJy9pbmRlcGVuZGVudC1zdHVkeS86bGlicmFyeUlkLyc7XG5jb25zdCBQQVRST05fQUNDT1VOVFNfUEFUSCA9ICcvcGF0cm9uL2FjY291bnRzJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDb3B5VG9vbHRpcENvbXBvbmVudF0sXG4gICAgc2VsZWN0b3I6ICdsaWItaW1wZXJzb25hdGlvbi1iYW5uZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9pbXBlcnNvbmF0aW9uLWJhbm5lci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vaW1wZXJzb25hdGlvbi1iYW5uZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgSW1wZXJzb25hdGlvbkJhbm5lckNvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICAgIGFjY2Vzc1Rva2VuUGF5bG9hZCA9IGlucHV0LnJlcXVpcmVkPFRva2VuUGF5bG9hZD4oKTtcbiAgICBwZXJzb25CYXNlVXJpID0gaW5wdXQoJ2h0dHBzOi8vYXBwcy5saWIuYnl1LmVkdS9wZXJzb24vdjIvJyk7XG4gICAgbGlicmFyeUFwaUJhc2VVcmkgPSBpbnB1dCgnaHR0cHM6Ly9zdGFnaW5nLmxpYi5ieXUuZWR1L3YxJyk7XG4gICAgQE91dHB1dCgpIGVuZEltcGVyc29uYXRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcm90ZWN0ZWQgcGFyc2VkVG9rZW46IFNpZ25hbDxKd3RQYXlsb2FkICYgUmVjb3JkPHN0cmluZywgYW55Pj4gPSBjb21wdXRlZCgoKSA9PlxuICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuUGF5bG9hZCgpLnRva2VuID8gand0RGVjb2RlKHRoaXMuYWNjZXNzVG9rZW5QYXlsb2FkKCkudG9rZW4pIDoge30sXG4gICAgKTtcbiAgICBwcm90ZWN0ZWQgaXNJbXBlcnNvbmF0aW5nID0gY29tcHV0ZWQoKCkgPT4gISF0aGlzLnBhcnNlZFRva2VuKClbJ2ltcGVyc29uYXRvciddKTtcbiAgICBwcm90ZWN0ZWQgbGlicmFyeUlkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wYXJzZWRUb2tlbigpWydsaWJyYXJ5X2lkJ10pO1xuICAgIHByb3RlY3RlZCB1c2VyID0gdG9TaWduYWwoXG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW3RvT2JzZXJ2YWJsZSh0aGlzLmxpYnJhcnlJZCksIHRvT2JzZXJ2YWJsZSh0aGlzLmlzSW1wZXJzb25hdGluZyldKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChbbGlicmFyeUlkLCBpc0ltcGVyc29uYXRpbmddKSA9PlxuICAgICAgICAgICAgICAgIGxpYnJhcnlJZCAmJiBpc0ltcGVyc29uYXRpbmdcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmh0dHAuZ2V0PFBlcnNvblN1bW1hcnk+KFxuICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxjYXQodGhpcy5wZXJzb25CYXNlVXJpKCksIFBFUlNPTl9TVU1NQVJZX1BBVEgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5hY2Nlc3NUb2tlblBheWxvYWQoKS50b2tlbn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogb2YobnVsbCksXG4gICAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICk7XG4gICAgcHJvdGVjdGVkIHVzZXJGdWxsTmFtZSA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgIHRoaXMucGFyc2VkVG9rZW4oKVsnZ2l2ZW5fbmFtZSddXG4gICAgICAgICAgICA/IGAke3RoaXMucGFyc2VkVG9rZW4oKVsnZ2l2ZW5fbmFtZSddfSAke3RoaXMucGFyc2VkVG9rZW4oKVsnZmFtaWx5X25hbWUnXX1gXG4gICAgICAgICAgICA6ICdVbmtub3duJyxcbiAgICApO1xuICAgIHByb3RlY3RlZCBpc1Jlc3RyaWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnVzZXIoKT8ucmVzdHJpY3RlZCk7XG4gICAgcHJvdGVjdGVkIHVzZXJJbmZvVGFicyA9IGNvbXB1dGVkKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgbmV3IE1hcChbXG4gICAgICAgICAgICAgICAgWydOZXQgSUQnLCB0aGlzLnBhcnNlZFRva2VuKClbJ25ldF9pZCddID8/ICcnXSxcbiAgICAgICAgICAgICAgICBbJ0JZVSBJRCcsIHRoaXMucGFyc2VkVG9rZW4oKVsnYnl1X2lkJ10gPz8gJyddLFxuICAgICAgICAgICAgICAgIFsnRW1haWwnLCB0aGlzLnBhcnNlZFRva2VuKClbJ2VtYWlsJ10gPz8gJyddLFxuICAgICAgICAgICAgXSksXG4gICAgKTtcbiAgICBwcm90ZWN0ZWQgdXNlclBob3RvVXJsID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgdGhpcy5wYXJzZWRUb2tlbigpWyduZXRfaWQnXSA/IFVTRVJfUEhPVE9fVVJMICsgdGhpcy5wYXJzZWRUb2tlbigpWyduZXRfaWQnXSA6ICcnLFxuICAgICk7XG5cbiAgICBwcm90ZWN0ZWQgYWN0aXZpdHlTdGF0dXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnVzZXIoKT8uaXNfcmV0aXJlZCkgcmV0dXJuICdyZXRpcmVkJztcbiAgICAgICAgZWxzZSBpZiAodGhpcy51c2VyKCk/LmlzX2VtcGxveWVlKSByZXR1cm4gJ2FjdGl2ZSc7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMudXNlcigpPy5wcmltYXJ5X3Bvc2l0aW9uX3R5cGUpIHJldHVybiAnaW5hY3RpdmUnO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcblxuICAgIHByb3RlY3RlZCBlbXBsb3llZVN0YXR1c0Rlc2NyaXB0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMudXNlcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkZXNjcmlwdGlvbiA9ICcnO1xuICAgICAgICBpZiAodGhpcy51c2VyKCkhLmlzX3JldGlyZWQpIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gJ1JldGlyZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNlcigpIS5pc19lbXBsb3llZSkge1xuICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAnQWN0aXZlJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVzZXIoKSEucHJpbWFyeV9wb3NpdGlvbl90eXBlKSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICdJbmFjdGl2ZSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy51c2VyKCkhLnByaW1hcnlfcG9zaXRpb25fdHlwZV9kaXNwbGF5KSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbiArPSBgICR7dGhpcy51c2VyKCkhLnByaW1hcnlfcG9zaXRpb25fdHlwZV9kaXNwbGF5fSBFbXBsb3llZWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVzY3JpcHRpb24gPz8gbnVsbDtcbiAgICB9KTtcblxuICAgIHByb3RlY3RlZCBpbmRlcGVuZGVudFN0dWR5U3RhdHVzID0gdG9TaWduYWwoXG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW3RvT2JzZXJ2YWJsZSh0aGlzLmxpYnJhcnlJZCksIHRvT2JzZXJ2YWJsZSh0aGlzLmlzSW1wZXJzb25hdGluZyldKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChbbGlicmFyeUlkLCBpc0ltcGVyc29uYXRpbmddKSA9PlxuICAgICAgICAgICAgICAgIGxpYnJhcnlJZCAmJiBpc0ltcGVyc29uYXRpbmdcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmh0dHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldDxJbmRlcGVuZGVudFN0dWR5UmVzcG9uc2U+KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsY2F0KHRoaXMucGVyc29uQmFzZVVyaSgpLCBJTkRFUEVOREVOVF9TVFVEWV9SRVNQT05TRV9QQVRILCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5hY2Nlc3NUb2tlblBheWxvYWQoKS50b2tlbn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlPy5pc19lbnJvbGxlZCkpXG4gICAgICAgICAgICAgICAgICAgIDogb2YobnVsbCksXG4gICAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICk7XG4gICAgcHJvdGVjdGVkIGFjY291bnRTdGF0dXNlcyA9IHRvU2lnbmFsKFxuICAgICAgICB0b09ic2VydmFibGUodGhpcy5pc0ltcGVyc29uYXRpbmcpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKGlzSW1wZXJzb25hdGluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNJbXBlcnNvbmF0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgICAgICAuZ2V0PEFjY291bnRzUmVzcG9uc2U+KHVybGNhdCh0aGlzLmxpYnJhcnlBcGlCYXNlVXJpKCksIFBBVFJPTl9BQ0NPVU5UU19QQVRIKSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmFjY2Vzc1Rva2VuUGF5bG9hZCgpLnRva2VufWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoYWNjb3VudHMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY2NvdW50U3RhdHVzZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rOiBbXSBhcyBBcHBsaWNhdGlvbkFjY2Vzc1tdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja2VkOiBbXSBhcyBBcHBsaWNhdGlvbkFjY2Vzc1tdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25lOiBbXSBhcyBBcHBsaWNhdGlvbkFjY2Vzc1tdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKGFjY291bnRzLmFwcGxpY2F0aW9ucykuZm9yRWFjaCgoYXBwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXBwLmFjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NTdGF0dXMuT0s6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudFN0YXR1c2VzLm9rLnB1c2goYXBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQWNjZXNzU3RhdHVzLkJMT0NLRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudFN0YXR1c2VzLmJsb2NrZWQucHVzaChhcHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NTdGF0dXMuTk9ORTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50U3RhdHVzZXMubm9uZS5wdXNoKGFwcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2NvdW50U3RhdHVzZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICk7XG59XG4iLCJAaWYgKGlzSW1wZXJzb25hdGluZygpKSB7XG4gICAgPGRpdiBjbGFzcz1cImJhbm5lci1wYWRkaW5nXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRvcC1iYW5uZXJcIiBkYXRhLXRlc3RpZD1cImJhbm5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmFubmVyLWdyb3VwIHByb2ZpbGUtbmFtZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9maWxlLWF2YXRhclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9maWxlLWltYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwidXNlclBob3RvVXJsKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FsdF09XCJ1c2VyRnVsbE5hbWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJ1c2VyIHBob3RvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uZXJyb3I9XCJ0aGlzLnJlbW92ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgcHJvZmlsZS1pY29uXCI+IHBlcnNvbiA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9maWxlLW5hbWUtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNvZnRcIj5JbXBlcnNvbmF0aW5nPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9maWxlLW5hbWUtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByb2ZpbGUtbmFtZVwiPnt7IHVzZXJGdWxsTmFtZSgpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGFjY291bnRTdGF0dXNlcygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwbGljYXRpb24tc3RhdHVzLWJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYWNjb3VudFN0YXR1c2VzKCkhLm9rLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwbGljYXRpb24tc3RhdHVzLWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHBsaWNhdGlvbi1zdGF0dXMtb2sgYXBwbGljYXRpb24tc3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb24tY2hlY2ttYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXBwbGljYXRpb24tY291bnRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50U3RhdHVzZXMoKSEub2subGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLXRvb2x0aXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1cy10b29sdGlwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9LIEFwcGxpY2F0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBvZiBhY2NvdW50U3RhdHVzZXMoKSEub2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayBhcHBsaWNhdGlvbi5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHBsaWNhdGlvbi1zdGF0dXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1jaGVja21hcmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgYXBwbGljYXRpb24ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjY291bnRTdGF0dXNlcygpIS5ibG9ja2VkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwbGljYXRpb24tc3RhdHVzLWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHBsaWNhdGlvbi1zdGF0dXMtYmxvY2tlZCBhcHBsaWNhdGlvbi1zdGF0dXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi13YXJuaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHBsaWNhdGlvbi1jb3VudFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnRTdGF0dXNlcygpIS5ibG9ja2VkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1cy10b29sdGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtdG9vbHRpcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja2VkIEFwcGxpY2F0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBvZiBhY2NvdW50U3RhdHVzZXMoKSEuYmxvY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIGFwcGxpY2F0aW9uLmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwbGljYXRpb24tc3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb24td2FybmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGFwcGxpY2F0aW9uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhY2NvdW50U3RhdHVzZXMoKSEubm9uZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcGxpY2F0aW9uLXN0YXR1cy1pbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXBwbGljYXRpb24tc3RhdHVzLW5vbmUgYXBwbGljYXRpb24tc3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb24tbG9ja1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXBwbGljYXRpb24tY291bnRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50U3RhdHVzZXMoKSEubm9uZS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtdG9vbHRpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gQWNjb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBvZiBhY2NvdW50U3RhdHVzZXMoKSEubm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIGFwcGxpY2F0aW9uLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcGxpY2F0aW9uLXN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLWxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBhcHBsaWNhdGlvbi5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2ZpbGUtZGV0YWlscy1jb250YWluZXIgYmFubmVyLWdyb3VwXCI+XG4gICAgICAgICAgICBAZm9yIChkZXRhaWwgb2YgdXNlckluZm9UYWJzKCkgfCBrZXl2YWx1ZTsgdHJhY2sgZGV0YWlsLmtleSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9maWxlLWRldGFpbFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNvZnQgbGFiZWxcIj57eyBkZXRhaWwua2V5IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWNvcHktdG9vbHRpcCBbY29weVRleHRdPVwiZGV0YWlsLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZmlsZS1kZXRhaWwtdGFnIHdoaXRlLXRhZyBjbGlja2FibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkZXRhaWwudmFsdWUgfHwgJ1Vua25vd24nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9saWItY29weS10b29sdGlwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2ZpbGUtZGV0YWlscy1jb250YWluZXIgYmFubmVyLWdyb3VwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZmlsZS1kZXRhaWxcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNvZnQgbGFiZWxcIj5TdGF0dXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpcGxlLWRldGFpbC10YWdzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZmlsZS1kZXRhaWwtdGFnIGNvbG9yLXRhZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7IGVtcGxveWVlU3RhdHVzRGVzY3JpcHRpb24oKSB9fVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHVzZXIoKT8ucHJpbWFyeV9wb3NpdGlvbl90eXBlX2Rpc3BsYXkgPz8gJ05vbi1lbXBsb3llZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYWN0aXZpdHlTdGF0dXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZmlsZS1zdGF0dXMtY2lyY2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnN0YXR1cy1hY3RpdmVdPVwiYWN0aXZpdHlTdGF0dXMoKSA9PT0gJ2FjdGl2ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc3RhdHVzLWluYWN0aXZlXT1cImFjdGl2aXR5U3RhdHVzKCkgPT09ICdpbmFjdGl2ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc3RhdHVzLXJldGlyZWRdPVwiYWN0aXZpdHlTdGF0dXMoKSA9PT0gJ3JldGlyZWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2ZpbGUtZGV0YWlsLXRhZyBjb2xvci10YWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICh1c2VyKCk/LnVuZGVyZ3JhZF9ncmFkdWF0ZV9zdGF0dXMgfCB0aXRsZWNhc2UpIHx8ICdOb24tc3R1ZGVudCcgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9maWxlLWRldGFpbC10YWcgY29sb3ItdGFnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpbmRlcGVuZGVudFN0dWR5U3RhdHVzKCkgPyAnSW5kZXBlbmRlbnQgU3R1ZHknIDogJ05vIEluZC4gU3R1ZHknIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2VyXCI+PC9kaXY+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJlbmQtaW1wZXJzb25hdGlvbi1idXR0b24gc2hhZG93XCIgKGNsaWNrKT1cInRoaXMuZW5kSW1wZXJzb25hdGlvbi5lbWl0KClcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uXCI+IGNsb3NlIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXhpdC10ZXh0XCI+RXhpdDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgQGlmIChpc1Jlc3RyaWN0ZWQoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdHJpY3RlZC1iYXItcGFkZGluZ1wiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdHJpY3RlZC1iYXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5yZXN0cmljdGVkIHBlcnNvbjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dFwiPlxuICAgICAgICAgICAgICAgIElmIGFueW9uZSBhc2tzIGFib3V0IHRoaXMgcGVyc29uLCB5b3UgYXJlIGluc3RydWN0ZWQgdG8gcmVzcG9uZCxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVtcGhhc2l6ZVwiPlwiV2UgaGF2ZSBubyByZWNvcmRzIGZvciB0aGlzIHBlcnNvbi5cIjwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJyaWdodC1ib3JkZXJcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYm90dG9tLWJvcmRlclwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0LWJvcmRlclwiPjwvZGl2PlxufVxuIl19