@ngrdt/menu 0.0.14 → 0.0.15

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.
@@ -30,7 +30,7 @@ export class RdtMenuBarComponent extends RdtMenuBaseComponent {
30
30
  provide: RdtMenuBaseComponent,
31
31
  useExisting: RdtMenuBarComponent,
32
32
  },
33
- ], viewQueries: [{ propertyName: "buttonContainerRef", first: true, predicate: ["buttonContainer"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ul class=\"menu-bar-item-container\" role=\"presentation\" #buttonContainer>\r\n @for(item of parsedItems; track item; let i = $index) {\r\n <li\r\n class=\"menu-bar-item\"\r\n role=\"presentation\"\r\n rdtAnyRouteActive=\"menu-bar-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n #anchorEl\r\n >\r\n @if(!item.routerLink && !item.externalLink) {\r\n <button\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild?.item\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n @if(item.shortcut) {\r\n <span class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n }\r\n <!-- TODO\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"expand_more\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n -->\r\n @if(item.items) {\r\n <span class=\"menu-bar-item-icon rdt-menu-icon-down\"></span>\r\n }\r\n </div>\r\n </button>\r\n }\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n @if(item.shortcut) {\r\n <span class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n }\r\n <!--\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n @if(item.routerLink) {\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [target]=\"item.target!\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n } @if(item.externalLink) {\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n } @if (item.items) {\r\n <rdt-menu-overlay\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild?.item\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n }\r\n </li>\r\n }\r\n</ul>\r\n", styles: ["a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu-bar{-webkit-user-select:none;user-select:none;pointer-events:none;padding:var(--rdt-menu-bar-padding)}.menu-bar-item-container{display:flex;list-style-type:none;margin-bottom:0;margin-top:0;margin-block-start:0;margin-block-end:0;padding-left:0}.menu-bar-item{pointer-events:all;margin:var(--rdt-menu-bar-item-margin);position:relative;display:flex;align-items:center;justify-content:center}.menu-bar-item.menu-bar-item-route-active .menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-route-active-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-route-active-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-route-active-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-route-active-outline)}.menu-bar-item [aria-expanded=true].menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-expanded-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-expanded-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-expanded-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-expanded-outline)}.menu-bar-item-content{cursor:pointer;display:flex;align-items:center;overflow:hidden;padding:var(--rdt-menu-bar-item-padding);border-radius:var(--rdt-menu-bar-item-border-radius);border:var(--rdt-menu-bar-item-border);background-color:var(--rdt-menu-bar-item-background);color:var(--rdt-menu-bar-item-text-color);outline:var(--rdt-menu-bar-item-outline);font-size:inherit}.menu-bar-item-content:hover{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-hover-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-hover-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-hover-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-hover-outline)}.menu-bar-item .menu-bar-item-content.focus-visible:focus,.menu-bar-item .menu-bar-item-content:focus-visible{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-focus-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-focus-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-focus-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-focus-outline)}.menu-bar-item-icon.rdt-menu-icon-down{width:0;height:0;border-left:var(--rdt-menu-default-icon-size) solid transparent;border-right:var(--rdt-menu-default-icon-size) solid transparent;border-top:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-bar-item-text-color)}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RdtAnyRouteActiveDirective, selector: "[rdtAnyRouteActive]", inputs: ["rdtAnyRouteActive", "watchedRoutes", "anyRouteActiveOptions", "ariaCurrentWhenActive"] }, { kind: "directive", type: i4.RdtKeyListenerDirective, selector: "[rdtKeyListener]", outputs: ["rdtKeyListener"] }, { kind: "component", type: i5.RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: ["item", "level", "preferredHorizontalDir", "preferredVerticalDir", "expanded", "autofocusItem", "anchorElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
33
+ ], viewQueries: [{ propertyName: "buttonContainerRef", first: true, predicate: ["buttonContainer"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ul class=\"menu-bar-item-container\" role=\"presentation\" #buttonContainer>\r\n @for(item of parsedItems; track item; let i = $index) {\r\n <li\r\n class=\"menu-bar-item\"\r\n role=\"presentation\"\r\n rdtAnyRouteActive=\"menu-bar-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n #anchorEl\r\n >\r\n @if(!item.routerLink && !item.externalLink) {\r\n <button\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild?.item\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n @if(item.shortcut) {\r\n <span class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n }\r\n <!-- TODO\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"expand_more\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n -->\r\n @if(item.items) {\r\n <span class=\"menu-bar-item-icon rdt-menu-icon-down\"></span>\r\n }\r\n </div>\r\n </button>\r\n }\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n @if(item.shortcut) {\r\n <span class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n }\r\n <!--\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n @if(item.routerLink) {\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [target]=\"item.target!\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n } @if(item.externalLink) {\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n } @if (item.items) {\r\n <rdt-menu-overlay\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild?.item\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n }\r\n </li>\r\n }\r\n</ul>\r\n", styles: ["@charset \"UTF-8\";a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}:root{--windows-95-hover-blue: rgb(0, 0, 123);--windows-95-background-grey: rgb(190, 190, 190);--windows-95-top-left-border-grey: rgb(170, 170, 170);--windows-95-bottom-right-border-grey: rgb(250, 250, 250);--active-border: 1px inset #eee;--hover-border: 1px outset #fff;--rdt-menu-min-width: 0;--rdt-menu-border-radius: 0;--rdt-menu-background: var(--windows-95-background-grey);--rdt-menu-padding-horizontal-padding: 0;--rdt-menu-box-shadow: 2px 2px 0px 0px #000;--rdt-menu-overlay-margin-x: 1px;--rdt-menu-overlay-margin-y: 2px;--rdt-menu-default-icon-size: .3rem;--rdt-menu-item-background: transparent;--rdt-menu-item-text-color: black;--rdt-menu-item-padding: .25em 1.5em .25em 1.5em;--rdt-menu-item-border: none;--rdt-menu-item-hover-background: var(--windows-95-hover-blue);--rdt-menu-item-hover-text-color: #fff;--rdt-menu-item-hover-border: none;--rdt-menu-item-expanded-background: var(--windows-95-hover-blue);--rdt-menu-item-expanded-text-color: #fff;--rdt-menu-item-expanded-border: none;--rdt-menu-item-focus-background: var(--windows-95-hover-blue);--rdt-menu-item-focus-text-color: #fff;--rdt-menu-item-focus-border: none;--rdt-menu-item-focus-outline: none;--rdt-menu-item-route-active-background: var(--windows-95-hover-blue);--rdt-menu-item-route-active-text-color: #fff;--rdt-menu-item-route-active-border: none;--rdt-menu-bar-padding: 3px 0;--rdt-menu-bar-item-background: transparent;--rdt-menu-bar-item-text-color: black;--rdt-menu-bar-item-padding: 3px 5px;--rdt-menu-bar-item-border-radius: 0;--rdt-menu-bar-item-border: none;--rdt-menu-bar-item-margin: 0 1px;--rdt-menu-bar-item-hover-background: var(--windows-95-background-grey);--rdt-menu-bar-item-hover-text-color: #000;--rdt-menu-bar-item-hover-outline: var(--hover-border);--rdt-menu-bar-item-expanded-background: var(--windows-95-background-grey);--rdt-menu-bar-item-expanded-text-color: #000;--rdt-menu-bar-item-expanded-outline: var(--active-border);--rdt-menu-bar-item-focus-background: var(--windows-95-background-grey);--rdt-menu-bar-item-focus-text-color: #000;--rdt-menu-bar-item-focus-outline: var(--hover-border);--rdt-menu-bar-item-route-active-background: var( --windows-95-background-grey );--rdt-menu-bar-item-route-active-text-color: #000;--rdt-menu-bar-item-route-active-text-outline: var(--active-border)}rdt-menu-bar{background-color:var(--windows-95-background-grey)}rdt-menu-overlay .menu-item-content,rdt-menu-bar{font-family:\\ff2d\\ff33 \\ff30\\30b4\\30b7\\30c3\\30af,Tahoma,Helvetica,Arial,sans-serif;font-size:12px}rdt-menu-overlay{outline:var(--hover-border);border:var(--active-border)}.rdt-menu-icon-right{margin-right:-1em}rdt-menu-bar{-webkit-user-select:none;user-select:none;pointer-events:none;padding:var(--rdt-menu-bar-padding)}.menu-bar-item-container{display:flex;list-style-type:none;margin-bottom:0;margin-top:0;margin-block-start:0;margin-block-end:0;padding-left:0}.menu-bar-item{pointer-events:all;margin:var(--rdt-menu-bar-item-margin);position:relative;display:flex;align-items:center;justify-content:center}.menu-bar-item.menu-bar-item-route-active .menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-route-active-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-route-active-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-route-active-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-route-active-outline)}.menu-bar-item [aria-expanded=true].menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-expanded-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-expanded-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-expanded-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-expanded-outline)}.menu-bar-item-content{cursor:pointer;display:flex;align-items:center;overflow:hidden;padding:var(--rdt-menu-bar-item-padding);border-radius:var(--rdt-menu-bar-item-border-radius);border:var(--rdt-menu-bar-item-border);background-color:var(--rdt-menu-bar-item-background);color:var(--rdt-menu-bar-item-text-color);outline:var(--rdt-menu-bar-item-outline);font-size:inherit}.menu-bar-item-content:hover{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-hover-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-hover-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-hover-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-hover-outline)}.menu-bar-item .menu-bar-item-content.focus-visible:focus,.menu-bar-item .menu-bar-item-content:focus-visible{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-focus-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-focus-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-focus-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-focus-outline)}.menu-bar-item-icon.rdt-menu-icon-down{width:0;height:0;border-left:var(--rdt-menu-default-icon-size) solid transparent;border-right:var(--rdt-menu-default-icon-size) solid transparent;border-top:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-bar-item-text-color)}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RdtAnyRouteActiveDirective, selector: "[rdtAnyRouteActive]", inputs: ["rdtAnyRouteActive", "watchedRoutes", "anyRouteActiveOptions", "ariaCurrentWhenActive"] }, { kind: "directive", type: i4.RdtKeyListenerDirective, selector: "[rdtKeyListener]", outputs: ["rdtKeyListener"] }, { kind: "component", type: i5.RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: ["item", "level", "preferredHorizontalDir", "preferredVerticalDir", "expanded", "autofocusItem", "anchorElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
34
34
  }
35
35
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuBarComponent, decorators: [{
36
36
  type: Component,
@@ -39,7 +39,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
39
39
  provide: RdtMenuBaseComponent,
40
40
  useExisting: RdtMenuBarComponent,
41
41
  },
42
- ], template: "<ul class=\"menu-bar-item-container\" role=\"presentation\" #buttonContainer>\r\n @for(item of parsedItems; track item; let i = $index) {\r\n <li\r\n class=\"menu-bar-item\"\r\n role=\"presentation\"\r\n rdtAnyRouteActive=\"menu-bar-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n #anchorEl\r\n >\r\n @if(!item.routerLink && !item.externalLink) {\r\n <button\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild?.item\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n @if(item.shortcut) {\r\n <span class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n }\r\n <!-- TODO\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"expand_more\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n -->\r\n @if(item.items) {\r\n <span class=\"menu-bar-item-icon rdt-menu-icon-down\"></span>\r\n }\r\n </div>\r\n </button>\r\n }\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n @if(item.shortcut) {\r\n <span class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n }\r\n <!--\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n @if(item.routerLink) {\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [target]=\"item.target!\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n } @if(item.externalLink) {\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n } @if (item.items) {\r\n <rdt-menu-overlay\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild?.item\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n }\r\n </li>\r\n }\r\n</ul>\r\n", styles: ["a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu-bar{-webkit-user-select:none;user-select:none;pointer-events:none;padding:var(--rdt-menu-bar-padding)}.menu-bar-item-container{display:flex;list-style-type:none;margin-bottom:0;margin-top:0;margin-block-start:0;margin-block-end:0;padding-left:0}.menu-bar-item{pointer-events:all;margin:var(--rdt-menu-bar-item-margin);position:relative;display:flex;align-items:center;justify-content:center}.menu-bar-item.menu-bar-item-route-active .menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-route-active-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-route-active-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-route-active-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-route-active-outline)}.menu-bar-item [aria-expanded=true].menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-expanded-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-expanded-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-expanded-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-expanded-outline)}.menu-bar-item-content{cursor:pointer;display:flex;align-items:center;overflow:hidden;padding:var(--rdt-menu-bar-item-padding);border-radius:var(--rdt-menu-bar-item-border-radius);border:var(--rdt-menu-bar-item-border);background-color:var(--rdt-menu-bar-item-background);color:var(--rdt-menu-bar-item-text-color);outline:var(--rdt-menu-bar-item-outline);font-size:inherit}.menu-bar-item-content:hover{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-hover-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-hover-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-hover-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-hover-outline)}.menu-bar-item .menu-bar-item-content.focus-visible:focus,.menu-bar-item .menu-bar-item-content:focus-visible{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-focus-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-focus-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-focus-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-focus-outline)}.menu-bar-item-icon.rdt-menu-icon-down{width:0;height:0;border-left:var(--rdt-menu-default-icon-size) solid transparent;border-right:var(--rdt-menu-default-icon-size) solid transparent;border-top:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-bar-item-text-color)}\n"] }]
42
+ ], template: "<ul class=\"menu-bar-item-container\" role=\"presentation\" #buttonContainer>\r\n @for(item of parsedItems; track item; let i = $index) {\r\n <li\r\n class=\"menu-bar-item\"\r\n role=\"presentation\"\r\n rdtAnyRouteActive=\"menu-bar-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n #anchorEl\r\n >\r\n @if(!item.routerLink && !item.externalLink) {\r\n <button\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild?.item\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n @if(item.shortcut) {\r\n <span class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n }\r\n <!-- TODO\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"expand_more\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n -->\r\n @if(item.items) {\r\n <span class=\"menu-bar-item-icon rdt-menu-icon-down\"></span>\r\n }\r\n </div>\r\n </button>\r\n }\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n @if(item.shortcut) {\r\n <span class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n }\r\n <!--\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n @if(item.routerLink) {\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [target]=\"item.target!\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n } @if(item.externalLink) {\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n } @if (item.items) {\r\n <rdt-menu-overlay\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild?.item\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n }\r\n </li>\r\n }\r\n</ul>\r\n", styles: ["@charset \"UTF-8\";a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}:root{--windows-95-hover-blue: rgb(0, 0, 123);--windows-95-background-grey: rgb(190, 190, 190);--windows-95-top-left-border-grey: rgb(170, 170, 170);--windows-95-bottom-right-border-grey: rgb(250, 250, 250);--active-border: 1px inset #eee;--hover-border: 1px outset #fff;--rdt-menu-min-width: 0;--rdt-menu-border-radius: 0;--rdt-menu-background: var(--windows-95-background-grey);--rdt-menu-padding-horizontal-padding: 0;--rdt-menu-box-shadow: 2px 2px 0px 0px #000;--rdt-menu-overlay-margin-x: 1px;--rdt-menu-overlay-margin-y: 2px;--rdt-menu-default-icon-size: .3rem;--rdt-menu-item-background: transparent;--rdt-menu-item-text-color: black;--rdt-menu-item-padding: .25em 1.5em .25em 1.5em;--rdt-menu-item-border: none;--rdt-menu-item-hover-background: var(--windows-95-hover-blue);--rdt-menu-item-hover-text-color: #fff;--rdt-menu-item-hover-border: none;--rdt-menu-item-expanded-background: var(--windows-95-hover-blue);--rdt-menu-item-expanded-text-color: #fff;--rdt-menu-item-expanded-border: none;--rdt-menu-item-focus-background: var(--windows-95-hover-blue);--rdt-menu-item-focus-text-color: #fff;--rdt-menu-item-focus-border: none;--rdt-menu-item-focus-outline: none;--rdt-menu-item-route-active-background: var(--windows-95-hover-blue);--rdt-menu-item-route-active-text-color: #fff;--rdt-menu-item-route-active-border: none;--rdt-menu-bar-padding: 3px 0;--rdt-menu-bar-item-background: transparent;--rdt-menu-bar-item-text-color: black;--rdt-menu-bar-item-padding: 3px 5px;--rdt-menu-bar-item-border-radius: 0;--rdt-menu-bar-item-border: none;--rdt-menu-bar-item-margin: 0 1px;--rdt-menu-bar-item-hover-background: var(--windows-95-background-grey);--rdt-menu-bar-item-hover-text-color: #000;--rdt-menu-bar-item-hover-outline: var(--hover-border);--rdt-menu-bar-item-expanded-background: var(--windows-95-background-grey);--rdt-menu-bar-item-expanded-text-color: #000;--rdt-menu-bar-item-expanded-outline: var(--active-border);--rdt-menu-bar-item-focus-background: var(--windows-95-background-grey);--rdt-menu-bar-item-focus-text-color: #000;--rdt-menu-bar-item-focus-outline: var(--hover-border);--rdt-menu-bar-item-route-active-background: var( --windows-95-background-grey );--rdt-menu-bar-item-route-active-text-color: #000;--rdt-menu-bar-item-route-active-text-outline: var(--active-border)}rdt-menu-bar{background-color:var(--windows-95-background-grey)}rdt-menu-overlay .menu-item-content,rdt-menu-bar{font-family:\\ff2d\\ff33 \\ff30\\30b4\\30b7\\30c3\\30af,Tahoma,Helvetica,Arial,sans-serif;font-size:12px}rdt-menu-overlay{outline:var(--hover-border);border:var(--active-border)}.rdt-menu-icon-right{margin-right:-1em}rdt-menu-bar{-webkit-user-select:none;user-select:none;pointer-events:none;padding:var(--rdt-menu-bar-padding)}.menu-bar-item-container{display:flex;list-style-type:none;margin-bottom:0;margin-top:0;margin-block-start:0;margin-block-end:0;padding-left:0}.menu-bar-item{pointer-events:all;margin:var(--rdt-menu-bar-item-margin);position:relative;display:flex;align-items:center;justify-content:center}.menu-bar-item.menu-bar-item-route-active .menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-route-active-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-route-active-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-route-active-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-route-active-outline)}.menu-bar-item [aria-expanded=true].menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-expanded-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-expanded-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-expanded-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-expanded-outline)}.menu-bar-item-content{cursor:pointer;display:flex;align-items:center;overflow:hidden;padding:var(--rdt-menu-bar-item-padding);border-radius:var(--rdt-menu-bar-item-border-radius);border:var(--rdt-menu-bar-item-border);background-color:var(--rdt-menu-bar-item-background);color:var(--rdt-menu-bar-item-text-color);outline:var(--rdt-menu-bar-item-outline);font-size:inherit}.menu-bar-item-content:hover{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-hover-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-hover-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-hover-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-hover-outline)}.menu-bar-item .menu-bar-item-content.focus-visible:focus,.menu-bar-item .menu-bar-item-content:focus-visible{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-focus-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-focus-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-focus-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-focus-outline)}.menu-bar-item-icon.rdt-menu-icon-down{width:0;height:0;border-left:var(--rdt-menu-default-icon-size) solid transparent;border-right:var(--rdt-menu-default-icon-size) solid transparent;border-top:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-bar-item-text-color)}\n"] }]
43
43
  }], propDecorators: { buttonContainerRef: [{
44
44
  type: ViewChild,
45
45
  args: ['buttonContainer', { static: true }]
@@ -410,7 +410,7 @@ export class RdtMenuBaseComponent {
410
410
  boxes.push({
411
411
  rect: overlay.box,
412
412
  fixed: fixed,
413
- close: () => overlay.closeSelf(),
413
+ close: () => overlay.closeSelf(false),
414
414
  });
415
415
  return fixed;
416
416
  }
@@ -455,4 +455,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
455
455
  type: HostListener,
456
456
  args: ['document:click', ['$event']]
457
457
  }] } });
458
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL21lbnUtYmFzZS9yZHQtbWVudS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEVBR2YsU0FBUyxFQUNULFNBQVMsRUFFVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBWSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQWUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsT0FBTyxFQUVQLGNBQWMsR0FFZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxHQUNiLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDckYsT0FBTyxFQUNMLDJCQUEyQixFQUMzQix5QkFBeUIsRUFDekIsb0NBQW9DLEVBQ3BDLGtDQUFrQyxFQUNsQyxtQ0FBbUMsRUFDbkMsaUNBQWlDLEVBQ2pDLG1CQUFtQixHQUNwQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBR0wsbUJBQW1CLEdBQ3BCLE1BQU0s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RGQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFJdEMsV0FBVztzQkFEVixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUl0QyxZQUFZO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQWMzQixRQUFRO3NCQURqQixZQUFZO3VCQUFDLHVCQUF1QjtnQkFJM0IsaUJBQWlCO3NCQUQxQixZQUFZO3VCQUFDLGVBQWU7Z0JBTTdCLE9BQU87c0JBRE4sV0FBVzt1QkFBQyxPQUFPO2dCQXNSVixhQUFhO3NCQUR0QixZQUFZO3VCQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW1CcEMsa0JBQWtCO3NCQUQzQixZQUFZO3VCQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWNqQyxlQUFlO3NCQUR4QixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBEZXN0cm95UmVmLFxyXG4gIERpcmVjdGl2ZSxcclxuICBFbGVtZW50UmVmLFxyXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIGluamVjdCxcclxuICBJbnB1dCxcclxuICBudW1iZXJBdHRyaWJ1dGUsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uSW5pdCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFJkdFJvdXRlLCBSZHRSb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnQG5ncmR0L3JvdXRlcic7XHJcbmltcG9ydCB7IFJkdFNob3J0Y3V0LCBSZHRTaG9ydGN1dFNlcnZpY2UgfSBmcm9tICdAbmdyZHQvc2hvcnRjdXRzJztcclxuaW1wb3J0IHtcclxuICBLQl9DT0RFLFxyXG4gIFJkdEhvcml6b250YWxEaXJlY3Rpb24sXHJcbiAgUmR0U3RyaW5nVXRpbHMsXHJcbiAgUmR0VmVydGljYWxEaXJlY3Rpb24sXHJcbn0gZnJvbSAnQG5ncmR0L3V0aWxzJztcclxuaW1wb3J0IHtcclxuICBhbmltYXRpb25GcmFtZVNjaGVkdWxlcixcclxuICBmcm9tRXZlbnQsXHJcbiAgU3Vic2NyaXB0aW9uLFxyXG4gIHRocm90dGxlVGltZSxcclxufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmR0TWVudU92ZXJsYXlDb21wb25lbnQgfSBmcm9tICcuLi9tZW51LW92ZXJsYXkvcmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIERFRkFVTFRfTUVOVV9IT1JJWk9OVEFMX0RJUixcclxuICBERUZBVUxUX01FTlVfVkVSVElDQUxfRElSLFxyXG4gIFJEVF9NRU5VX01BUkdJTl9CT1RUT01fUFJPUEVSVFlfTkFNRSxcclxuICBSRFRfTUVOVV9NQVJHSU5fTEVGVF9QUk9QRVJUWV9OQU1FLFxyXG4gIFJEVF9NRU5VX01BUkdJTl9SSUdIVF9QUk9QRVJUWV9OQU1FLFxyXG4gIFJEVF9NRU5VX01BUkdJTl9UT1BfUFJPUEVSVFlfTkFNRSxcclxuICBSZHRNZW51U2hvcnRjdXRNb2RlLFxyXG59IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgUGFyc2VkUmR0TWVudUl0ZW0sXHJcbiAgUmR0TWVudUV4cGFuZGVkQ2hpbGQsXHJcbiAgUmR0TWVudUV4cGFuZFNvdXJjZSxcclxufSBmcm9tICcuLi9wcml2YXRlLW1vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgZmluZE5leHRJdGVtV2l0aFByZWZpeCxcclxuICBGT0NVU19WSVNJQkxFLFxyXG4gIGdldENoaWxkUm91dGVzTWFwLFxyXG4gIGdldE1lbnVJdGVtc1Nob3J0Y3V0cyxcclxuICBtZW51SXRlbUhhc0NoaWxkcmVuLFxyXG4gIG1lbnVJdGVtSGFzUm91dGUsXHJcbiAgUGFyc2VkUmR0TWVudUl0ZW1XaXRoU2hvcnRjdXQsXHJcbiAgU2l6ZSxcclxufSBmcm9tICcuLi91dGlscyc7XHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJkdE1lbnVCYXNlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdFxyXG57XHJcbiAgQElucHV0KClcclxuICBwcmVmZXJyZWRWZXJ0aWNhbERpcjogUmR0VmVydGljYWxEaXJlY3Rpb24gPSBERUZBVUxUX01FTlVfVkVSVElDQUxfRElSO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHByZWZlcnJlZEhvcml6b250YWxEaXI6IFJkdEhvcml6b250YWxEaXJlY3Rpb24gPSBERUZBVUxUX01FTlVfSE9SSVpPTlRBTF9ESVI7XHJcblxyXG4gIC8vIE1vZGUgb25seSBtYXR0ZXJzIGlmIGl0ZW0gaGFzIHNob3J0Y3V0IGFuZCBvbmx5IGNoaWxkcmVuLCBubyBjb21tYW5kIG5vciByb3V0ZXJMaW5rXHJcbiAgLy8gRk9DVVNfSVRFTSB3aWxsIHB1dCBmb2N1cyBvbiBpdGVtIHdpdGggc2hvcnRjdXRcclxuICAvLyBPUEVOX1NVQk1FTlUgd2lsbCBvcGVuIGl0cyBzdWJtZW51IGFuZCBwdXQgZm9jdXMgb24gdGhlIGZpcnN0IGl0ZW0gaW4gaXRcclxuICAvLyBJZiBpdGVtIGhhcyBjb21tYW5kIG9yIHJvdXRlckxpbmssIGl0IHdpbGwgYWx3YXlzIGJlIGFjdGl2YXRlZCBhbmQgZXZlcnl0aGluZyBjbG9zZWRcclxuICBASW5wdXQoKVxyXG4gIHNob3J0Y3V0TW9kZTogJ2ZvY3VzLWl0ZW0nIHwgJ29wZW4tc3VibWVudScgPVxyXG4gICAgUmR0TWVudVNob3J0Y3V0TW9kZS5PUEVOX1NVQk1FTlU7XHJcblxyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxyXG4gIGNsb3NlT25Gb2N1c091dCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcclxuICBvcGVuT25Ib3ZlciA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxyXG4gIGhpdGJveE1hcmdpbiA9IDEwO1xyXG5cclxuICByZWFkb25seSBjZCA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmR0Um91dGVyID0gaW5qZWN0KFJkdFJvdXRlclNlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBlbFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gPSBpbmplY3QoRWxlbWVudFJlZik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3J0Y3V0U2VydmljZSA9IGluamVjdChSZHRTaG9ydGN1dFNlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBpbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihSZHRNZW51T3ZlcmxheUNvbXBvbmVudClcclxuICBwcm90ZWN0ZWQgY2hpbGRyZW4hOiBRdWVyeUxpc3Q8UmR0TWVudU92ZXJsYXlDb21wb25lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdmb2N1c2FibGVJdGVtJylcclxuICBwcm90ZWN0ZWQgZm9jdXNhYmxlRWxlbWVudHMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xyXG5cclxuICBhYnN0cmFjdCBnZXQgYnV0dG9uQ29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcclxuICBjbGFzc2VzID0gJ3JkdC1tZW51LWJhc2UnO1xyXG5cclxuICBleHBhbmRlZENoaWxkOiBSZHRNZW51RXhwYW5kZWRDaGlsZCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcm90ZWN0ZWQgYXV0b2ZvY3VzU3VibWVudUl0ZW06ICdmaXJzdCcgfCAnbGFzdCcgfCBudWxsID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgcGFyc2VkSXRlbXMhOiBQYXJzZWRSZHRNZW51SXRlbVtdO1xyXG5cclxuICBnZXQgY2xpZW50U2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jbGllbnRTaXplO1xyXG4gIH1cclxuICBwcml2YXRlIF9jbGllbnRTaXplITogU2l6ZTtcclxuXHJcbiAgZ2V0IGJvZHlNYXJnaW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYm9keU1hcmdpbjtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYm9keU1hcmdpbiE6IHtcclxuICAgIHRvcDogbnVtYmVyO1xyXG4gICAgYm90dG9tOiBudW1iZXI7XHJcbiAgICBsZWZ0OiBudW1iZXI7XHJcbiAgICByaWdodDogbnVtYmVyO1xyXG4gIH07XHJcblxyXG4gIGdldCBidXR0b25Db250YWluZXJSZWN0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2J1dHRvbkNvbnRhaW5lclJlY3Q7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2J1dHRvbkNvbnRhaW5lclJlY3Q/OiBET01SZWN0O1xyXG5cclxuICBwcm90ZWN0ZWQgYWxsUGFyc2VkSXRlbXMhOiBQYXJzZWRSZHRNZW51SXRlbVtdO1xyXG4gIHByb3RlY3RlZCBjaGlsZFJvdXRlc01hcDogTWFwPFBhcnNlZFJkdE1lbnVJdGVtLCBzdHJpbmdbXVtdPiA9IG5ldyBNYXAoKTtcclxuICBwcm90ZWN0ZWQgc2hvcnRjdXRTdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgcHJvdGVjdGVkIHNob3J0Y3V0TWFwOiBSZWNvcmQ8c3RyaW5nLCBQYXJzZWRSZHRNZW51SXRlbVtdPiA9IHt9O1xyXG5cclxuICByZWFkb25seSBrZXlBY3Rpb25zID0ge1xyXG4gICAgW0tCX0NPREUuQVJST1cuTEVGVF06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmZvY3VzUHJldkl0ZW0oaW5kZXgpLFxyXG4gICAgW0tCX0NPREUuQVJST1cuUklHSFRdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5mb2N1c05leHRJdGVtKGluZGV4KSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLkRPV05dOiAoaW5kZXg6IG51bWJlcikgPT5cclxuICAgICAgdGhpcy5vcGVuU3VibWVudShpbmRleCwgJ2ZpcnN0JywgUmR0TWVudUV4cGFuZFNvdXJjZS5TaG9ydGN1dCksXHJcbiAgICBbS0JfQ09ERS5BUlJPVy5VUF06IChpbmRleDogbnVtYmVyKSA9PlxyXG4gICAgICB0aGlzLm9wZW5TdWJtZW51KGluZGV4LCAnbGFzdCcsIFJkdE1lbnVFeHBhbmRTb3VyY2UuU2hvcnRjdXQpLFxyXG4gICAgW0tCX0NPREUuSE9NRV06ICgpID0+IHRoaXMuZm9jdXNJdGVtKDApLFxyXG4gICAgW0tCX0NPREUuRU5EXTogKCkgPT4gdGhpcy5mb2N1c0l0ZW0odGhpcy5wYXJzZWRJdGVtcy5sZW5ndGggLSAxKSxcclxuICAgIFtLQl9DT0RFLkVOVEVSXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuaW52b2tlSXRlbUNsaWNrQnlJbmRleChpbmRleCksXHJcbiAgICBbS0JfQ09ERS5TUEFDRUJBUl06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmludm9rZUl0ZW1DbGlja0J5SW5kZXgoaW5kZXgpLFxyXG4gIH07XHJcblxyXG4gIC8vIFJldHVybnMgYWxsIHJvdXRlcyBhc29jaWF0ZWQgd2l0aCBpdGVtIG9yIGl0cyBzdWJpdGVtcy5cclxuICBnZXRDaGlsZFJvdXRlcyhpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRSb3V0ZXNNYXAuZ2V0KGl0ZW0pID8/IFtdO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnJkdFJvdXRlci5uYXZpZ2F0aW9uRW5kJFxyXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcclxuICAgICAgLnN1YnNjcmliZSgoZXYpID0+IHRoaXMuZmlsdGVySXRlbXMoKSk7XHJcbiAgICB0aGlzLm1lYXN1cmUoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmICh0aGlzLmNoaWxkcmVuKSB7XHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVDaGlsZHJlbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5saXN0ZW5XaW5kb3dSZXNpemUoKTtcclxuXHJcbiAgICAvLyBOb3QgdXNpbmcgdGltZW91dCByZXN1bHRzIGluIGhvcml6b250YWwgb3ZlcmZsb3cgb24gaHRtbCBlbGVtZW50XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5tZWFzdXJlKCk7XHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVDaGlsZHJlbigpO1xyXG4gICAgfSwgNTApO1xyXG4gIH1cclxuXHJcbiAgcmVjYWxjdWxhdGVDaGlsZHJlbigpIHtcclxuICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgY2hpbGQucmVjYWxjdWxhdGVQb3NpdGlvbihcclxuICAgICAgICB0aGlzLnByZWZlcnJlZEhvcml6b250YWxEaXIsXHJcbiAgICAgICAgdGhpcy5wcmVmZXJyZWRWZXJ0aWNhbERpclxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVN1Ym1lbnVzKGZvY3VzRXhwYW5kZWQgPSBmYWxzZSkge1xyXG4gICAgaWYgKGZvY3VzRXhwYW5kZWQgJiYgdGhpcy5leHBhbmRlZENoaWxkKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKHRoaXMuZXhwYW5kZWRDaGlsZC5pdGVtKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IG51bGw7XHJcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uSXRlbUNsaWNrKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIChtZW51SXRlbUhhc0NoaWxkcmVuKGl0ZW0pICYmIHRoaXMuZXhwYW5kZWRDaGlsZD8uaXRlbSAhPT0gaXRlbSkgfHxcclxuICAgICAgKHRoaXMub3Blbk9uSG92ZXIgJiZcclxuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQ/LnNyYyA9PT0gUmR0TWVudUV4cGFuZFNvdXJjZS5Ib3ZlcilcclxuICAgICkge1xyXG4gICAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gbnVsbDtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0geyBpdGVtLCBzcmM6IFJkdE1lbnVFeHBhbmRTb3VyY2UuQ2xpY2sgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGl0ZW0uY29tbWFuZCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBpdGVtLmNvbW1hbmQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbkl0ZW1Qb2ludGVyRW50ZXIoaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGlmICh0aGlzLm9wZW5PbkhvdmVyKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBtZW51SXRlbUhhc0NoaWxkcmVuKGl0ZW0pICYmXHJcbiAgICAgICAgdGhpcy5leHBhbmRlZENoaWxkPy5zcmMgIT09IFJkdE1lbnVFeHBhbmRTb3VyY2UuQ2xpY2tcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0geyBpdGVtLCBzcmM6IFJkdE1lbnVFeHBhbmRTb3VyY2UuSG92ZXIgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25LZXlEb3duKGl0ZW1JbmRleDogbnVtYmVyLCBldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgY29uc3QgaGFzQWN0aW9uID0gZXZlbnQuY29kZSBpbiB0aGlzLmtleUFjdGlvbnM7XHJcbiAgICBjb25zdCBpc0xldHRlciA9XHJcbiAgICAgIFJkdFN0cmluZ1V0aWxzLmlzQWxwaGFiZXRDaGFyYWN0ZXIoZXZlbnQua2V5KSB8fFxyXG4gICAgICBSZHRTdHJpbmdVdGlscy5pc051bWVyaWNDaGFyYWN0ZXIoZXZlbnQua2V5KTtcclxuXHJcbiAgICBpZiAoaGFzQWN0aW9uIHx8IGlzTGV0dGVyKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc0FjdGlvbikge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGFzQWN0aW9uKSB7XHJcbiAgICAgIHRoaXMua2V5QWN0aW9uc1tldmVudC5jb2RlXShpdGVtSW5kZXgpO1xyXG4gICAgfSBlbHNlIGlmIChpc0xldHRlcikge1xyXG4gICAgICBjb25zdCBuZXh0ID0gZmluZE5leHRJdGVtV2l0aFByZWZpeChcclxuICAgICAgICB0aGlzLnBhcnNlZEl0ZW1zLFxyXG4gICAgICAgIGl0ZW1JbmRleCxcclxuICAgICAgICBldmVudC5rZXlcclxuICAgICAgKTtcclxuICAgICAgaWYgKG5leHQgIT09IG51bGwpIHtcclxuICAgICAgICB0aGlzLmZvY3VzSXRlbShuZXh0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGludm9rZUl0ZW1DbGljayhpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgaWYgKG1lbnVJdGVtSGFzUm91dGUoaXRlbSkgJiYgaXRlbS5yb3V0ZXJMaW5rKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKGl0ZW0ucm91dGVyTGluayk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uSXRlbUNsaWNrKGl0ZW0pO1xyXG4gICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9ICdmaXJzdCc7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZmlsdGVySXRlbXMoKSB7XHJcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5yZHRSb3V0ZXIucGFyc2VBYnNvbHV0ZVVybCgpO1xyXG4gICAgaWYgKCFjdXJyZW50KSB7XHJcbiAgICAgIHRoaXMucGFyc2VkSXRlbXMgPSB0aGlzLmFsbFBhcnNlZEl0ZW1zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wYXJzZWRJdGVtcyA9IHRoaXMuZmlsdGVyUmVjKHRoaXMuYWxsUGFyc2VkSXRlbXMsIGN1cnJlbnQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGlsZFJvdXRlc01hcCA9IGdldENoaWxkUm91dGVzTWFwKHRoaXMucGFyc2VkSXRlbXMpO1xyXG4gICAgdGhpcy5saXN0ZW5TaG9ydGN1dHMoKTtcclxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZmlsdGVyUmVjKFxyXG4gICAgaXRlbXM6IFBhcnNlZFJkdE1lbnVJdGVtW10sXHJcbiAgICBjdXJyZW50OiB7IHJvdXRlOiBSZHRSb3V0ZTsgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH1cclxuICApOiBQYXJzZWRSZHRNZW51SXRlbVtdIHtcclxuICAgIGxldCBjdXJyZW50UGFyZW50ID0gY3VycmVudC5yb3V0ZTtcclxuICAgIGNvbnN0IGN1cnJlbnRQYXJhbXMgPSBjdXJyZW50LnBhcmFtcztcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJlZCA9IGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAoIWl0ZW0ucmVxdWlyZWRQYXJlbnQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCByZXF1aXJlZCA9IGl0ZW0ucmVxdWlyZWRQYXJlbnQ7XHJcbiAgICAgIHdoaWxlIChjdXJyZW50UGFyZW50LmFic29sdXRlUGF0aCAhPT0gcmVxdWlyZWQuYWJzb2x1dGVQYXRoKSB7XHJcbiAgICAgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRQYXJlbnQucGFyZW50ITtcclxuICAgICAgICBpZiAoIWN1cnJlbnRQYXJlbnQpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHJlcXVpcmVkUGFyZW50OiBSZHRSb3V0ZSB8IG51bGwgPSByZXF1aXJlZDtcclxuICAgICAgZG8ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSByZXF1aXJlZFBhcmVudC5hYnNvbHV0ZVBhdGg7XHJcbiAgICAgICAgaWYgKHBhdGggaW4gY3VycmVudFBhcmFtcykge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVxdWlyZWRQYXJlbnQuc3RhdGljUGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50UGFyYW1zW3BhdGhdW2tleV0gIT09IHJlcXVpcmVkUGFyZW50LnN0YXRpY1BhcmFtc1trZXldKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcXVpcmVkUGFyZW50ID0gcmVxdWlyZWRQYXJlbnQucGFyZW50O1xyXG4gICAgICB9IHdoaWxlIChyZXF1aXJlZFBhcmVudCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGZpbHRlcmVkLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAoaXRlbS5pdGVtcykge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgaXRlbXM6IHRoaXMuZmlsdGVyUmVjKGl0ZW0uaXRlbXMsIGN1cnJlbnQpLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGludm9rZUl0ZW1DbGlja0J5SW5kZXgoaXRlbUluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2l0ZW1JbmRleF07XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbnZva2VJdGVtQ2xpY2soaXRlbSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb3BlblN1Ym1lbnUoXHJcbiAgICBpdGVtSW5kZXg6IG51bWJlcixcclxuICAgIHZpc2libGVGb2N1czogJ2ZpcnN0JyB8ICdsYXN0JyxcclxuICAgIHNyYzogUmR0TWVudUV4cGFuZFNvdXJjZVxyXG4gICkge1xyXG4gICAgaWYgKFxyXG4gICAgICBpdGVtSW5kZXggPCB0aGlzLnBhcnNlZEl0ZW1zLmxlbmd0aCAmJlxyXG4gICAgICBtZW51SXRlbUhhc0NoaWxkcmVuKHRoaXMucGFyc2VkSXRlbXNbaXRlbUluZGV4XSlcclxuICAgICkge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tpdGVtSW5kZXhdO1xyXG4gICAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gdmlzaWJsZUZvY3VzO1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSB7IGl0ZW0sIHNyYyB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZvY3VzSXRlbShpdGVtOiBudW1iZXIgfCBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgbGV0IGl0ZW1JbmRleDogbnVtYmVyO1xyXG5cclxuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgaXRlbUluZGV4ID0gaXRlbTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGl0ZW1JbmRleCA9IHRoaXMucGFyc2VkSXRlbXMuaW5kZXhPZihpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXRlbUluZGV4ID49IDAgJiYgaXRlbUluZGV4IDwgdGhpcy5mb2N1c2FibGVFbGVtZW50cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5ibHVyQWxsRm9jdXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuZm9jdXNGb2N1c2FibGUoaXRlbUluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmb2N1c05leHRJdGVtKGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBuZXh0ID0gKGl0ZW1JbmRleCArIDEpICUgdGhpcy5wYXJzZWRJdGVtcy5sZW5ndGg7XHJcbiAgICB0aGlzLmZvY3VzSXRlbShuZXh0KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmb2N1c1ByZXZJdGVtKGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBwcmV2ID1cclxuICAgICAgKGl0ZW1JbmRleCAtIDEgKyB0aGlzLnBhcnNlZEl0ZW1zLmxlbmd0aCkgJSB0aGlzLnBhcnNlZEl0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuZm9jdXNJdGVtKHByZXYpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGJsdXJBbGxGb2N1c2FibGUoKSB7XHJcbiAgICB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmZvckVhY2goKGVsKSA9PlxyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsLm5hdGl2ZUVsZW1lbnQsIEZPQ1VTX1ZJU0lCTEUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZvY3VzRm9jdXNhYmxlKGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBlbFJlZiA9IHRoaXMuZm9jdXNhYmxlRWxlbWVudHMuZ2V0KGl0ZW1JbmRleCk7XHJcbiAgICBpZiAoZWxSZWYpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbFJlZi5uYXRpdmVFbGVtZW50LCBGT0NVU19WSVNJQkxFKTtcclxuICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnBvaW50ZXJtb3ZlJywgWyckZXZlbnQnXSlcclxuICBwcm90ZWN0ZWQgb25Qb2ludGVyTW92ZShldmVudDogUG9pbnRlckV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5vcGVuT25Ib3ZlciAmJiB0aGlzLmV4cGFuZGVkQ2hpbGQpIHtcclxuICAgICAgY29uc3QgaGl0Ym94ZXMgPSB0aGlzLmdldEhpdGJveGVzKCk7XHJcbiAgICAgIGNvbnN0IGlzSW5zaWRlID0gaGl0Ym94ZXMuc29tZSgoaGl0Ym94KSA9PlxyXG4gICAgICAgIHRoaXMuaXNQb2ludGVySW5zaWRlSGl0Ym94KGhpdGJveC5yZWN0LCBldmVudClcclxuICAgICAgKTtcclxuICAgICAgZm9yIChsZXQgaSA9IGhpdGJveGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgY29uc3QgaGl0Ym94ID0gaGl0Ym94ZXNbaV07XHJcbiAgICAgICAgaWYgKCFoaXRib3guZml4ZWQgJiYgIWlzSW5zaWRlKSB7XHJcbiAgICAgICAgICBoaXRib3guY2xvc2UoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQ2xvc2VzIG1lbnUgaWYgdXNlciBuYXZpZ2F0ZXMgb3V0c2lkZSBpdCB1c2luZyBUYWIuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmZvY3Vzb3V0JywgWyckZXZlbnQnXSlcclxuICBwcm90ZWN0ZWQgY2hlY2tBY3RpdmVFbGVtZW50KGV2ZW50OiBGb2N1c0V2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5jbG9zZU9uRm9jdXNPdXQgJiYgIXRoaXMub3Blbk9uSG92ZXIpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2ZvY3Vzb3V0JywgZXZlbnQpO1xyXG5cclxuICAgICAgY29uc3QgdGhpc0VsID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xyXG4gICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHwgIXRoaXNFbC5jb250YWlucyh0YXJnZXQpKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIHByb3RlY3RlZCBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgY29uc3QgZWxSZWYgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoIWVsUmVmLmNvbnRhaW5zKHRhcmdldCkpIHtcclxuICAgICAgdGhpcy5jbG9zZVN1Ym1lbnVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbWVhc3VyZSgpIHtcclxuICAgIHRoaXMubWVhc3VyZUJ1dHRvbkNvbnRhaW5lcigpO1xyXG4gICAgdGhpcy5tZWFzdXJlQ2xpZW50U2l6ZSgpO1xyXG4gICAgdGhpcy5yZWFkTWFyZ2luKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVhZE1hcmdpbigpIHtcclxuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICBjb25zdCB0b3BWYWwgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXHJcbiAgICAgIFJEVF9NRU5VX01BUkdJTl9UT1BfUFJPUEVSVFlfTkFNRVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGJvdHRvbVZhbCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcclxuICAgICAgUkRUX01FTlVfTUFSR0lOX0JPVFRPTV9QUk9QRVJUWV9OQU1FXHJcbiAgICApO1xyXG4gICAgY29uc3QgbGVmdFZhbCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcclxuICAgICAgUkRUX01FTlVfTUFSR0lOX0xFRlRfUFJPUEVSVFlfTkFNRVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJpZ2h0VmFsID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFxyXG4gICAgICBSRFRfTUVOVV9NQVJHSU5fUklHSFRfUFJPUEVSVFlfTkFNRVxyXG4gICAgKTtcclxuICAgIHRoaXMuX2JvZHlNYXJnaW4gPSB7XHJcbiAgICAgIHRvcDogcGFyc2VJbnQodG9wVmFsKSB8fCAwLFxyXG4gICAgICBib3R0b206IHBhcnNlSW50KGJvdHRvbVZhbCkgfHwgMCxcclxuICAgICAgbGVmdDogcGFyc2VJbnQobGVmdFZhbCkgfHwgMCxcclxuICAgICAgcmlnaHQ6IHBhcnNlSW50KHJpZ2h0VmFsKSB8fCAwLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtZWFzdXJlQ2xpZW50U2l6ZSgpIHtcclxuICAgIHRoaXMuX2NsaWVudFNpemUgPSB7XHJcbiAgICAgIHdpZHRoOiB0aGlzLmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgsXHJcbiAgICAgIGhlaWdodDogdGhpcy5kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbWVhc3VyZUJ1dHRvbkNvbnRhaW5lcigpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5idXR0b25Db250YWluZXI7XHJcbiAgICBpZiAoZWwpIHtcclxuICAgICAgdGhpcy5fYnV0dG9uQ29udGFpbmVyUmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fYnV0dG9uQ29udGFpbmVyUmVjdCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBsaXN0ZW5XaW5kb3dSZXNpemUoKSB7XHJcbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGhyb3R0bGVUaW1lKDAsIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCB7IHRyYWlsaW5nOiB0cnVlIH0pLFxyXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZWFzdXJlKCk7XHJcbiAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZUNoaWxkcmVuKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGxpc3RlblNob3J0Y3V0cygpIHtcclxuICAgIGNvbnN0IGl0ZW1zV2l0aFNob3J0Y3V0cyA9IGdldE1lbnVJdGVtc1Nob3J0Y3V0cyh0aGlzLnBhcnNlZEl0ZW1zKTtcclxuICAgIGNvbnN0IHNob3J0Y3V0czogUmR0U2hvcnRjdXRbXSA9IGl0ZW1zV2l0aFNob3J0Y3V0cy5tYXAoXHJcbiAgICAgIChpdCkgPT4gaXQuc2hvcnRjdXRcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zaG9ydGN1dE1hcCA9IHRoaXMuZ2V0U2hvcnRjdXRNYXAoaXRlbXNXaXRoU2hvcnRjdXRzKTtcclxuICAgIHRoaXMuc2hvcnRjdXRTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuc2hvcnRjdXRTdWIgPSB0aGlzLnNob3J0Y3V0U2VydmljZVxyXG4gICAgICAubGlzdGVuKHNob3J0Y3V0cylcclxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGV2dCkgPT4gdGhpcy5vblNob3J0Y3V0KGV2dC5zaG9ydGN1dCkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldFNob3J0Y3V0TWFwKFxyXG4gICAgaXRlbXNXaXRoU2hvcnRjdXRzOiBQYXJzZWRSZHRNZW51SXRlbVdpdGhTaG9ydGN1dFtdXHJcbiAgKSB7XHJcbiAgICBjb25zdCBzaG9ydGN1dE1hcDogUmVjb3JkPHN0cmluZywgUGFyc2VkUmR0TWVudUl0ZW1bXT4gPSB7fTtcclxuICAgIGl0ZW1zV2l0aFNob3J0Y3V0cy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIHNob3J0Y3V0TWFwW2l0ZW0uc2hvcnRjdXQuaG90a2V5c1ZhbHVlXSA9IGl0ZW0ucGF0aDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHNob3J0Y3V0TWFwO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uU2hvcnRjdXQoc2hvcnRjdXQ6IFJkdFNob3J0Y3V0KSB7XHJcbiAgICBjb25zdCBwYXRoID0gdGhpcy5zaG9ydGN1dE1hcFtzaG9ydGN1dC5ob3RrZXlzVmFsdWVdO1xyXG4gICAgaWYgKCFwYXRoKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgTWVudSBzaG9ydGN1dCAke3Nob3J0Y3V0LmhvdGtleXNWYWx1ZX0gd2FzIGRldGVjdGVkLCBidXQgdGhlcmUgaXMgbm8gcGF0aCBhc3NvY2lhdGVkIHdpdGggaXQuYCxcclxuICAgICAgICB0aGlzLnNob3J0Y3V0TWFwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsYXN0ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xyXG4gICAgY29uc3QgaGFzUm91dGUgPSBtZW51SXRlbUhhc1JvdXRlKGxhc3QpO1xyXG4gICAgY29uc3QgaGFzQ29tbWFuZCA9IHR5cGVvZiBsYXN0LmNvbW1hbmQgPT09ICdmdW5jdGlvbic7XHJcbiAgICBpZiAoaGFzUm91dGUgfHwgaGFzQ29tbWFuZCkge1xyXG4gICAgICB0aGlzLmNsb3NlU3VibWVudXMoZmFsc2UpO1xyXG4gICAgICBpZiAoaGFzQ29tbWFuZCkge1xyXG4gICAgICAgIGxhc3QuY29tbWFuZCEoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaGFzUm91dGUpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShsYXN0LnJvdXRlckxpbmshKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hY3RpdmF0ZUl0ZW1SZWN1cnNpdmVseShwYXRoLCBSZHRNZW51RXhwYW5kU291cmNlLlNob3J0Y3V0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhY3RpdmF0ZUl0ZW1SZWN1cnNpdmVseShcclxuICAgIHBhdGg6IFBhcnNlZFJkdE1lbnVJdGVtW10sXHJcbiAgICBzcmM6IFJkdE1lbnVFeHBhbmRTb3VyY2VcclxuICApIHtcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gWy4uLnBhdGhdO1xyXG5cclxuICAgIGlmICh0aGlzLnNob3J0Y3V0TW9kZSA9PT0gUmR0TWVudVNob3J0Y3V0TW9kZS5PUEVOX1NVQk1FTlUpIHtcclxuICAgICAgY29uc3QgbGFzdCA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdO1xyXG4gICAgICBpZiAobWVudUl0ZW1IYXNDaGlsZHJlbihsYXN0KSAmJiBsYXN0Lml0ZW1zWzBdKSB7XHJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChsYXN0Lml0ZW1zWzBdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRoaXNJdGVtID0gY2hpbGRyZW4uc2hpZnQoKSE7XHJcblxyXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0geyBpdGVtOiB0aGlzSXRlbSwgc3JjIH07XHJcbiAgICAgIGNvbnN0IG92ZXJsYXkgPSB0aGlzLmNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5pdGVtID09PSB0aGlzSXRlbSk7XHJcbiAgICAgIG92ZXJsYXkhLmZvY3VzSXRlbVJlY3Vyc2l2ZWx5KGNoaWxkcmVuKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKHRoaXNJdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzUG9pbnRlckluc2lkZUhpdGJveChoaXRib3g6IERPTVJlY3QsIGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIGNvbnN0IHJlY3QgPSBoaXRib3g7XHJcbiAgICBjb25zdCB4ID0gZXZlbnQuY2xpZW50WDtcclxuICAgIGNvbnN0IHkgPSBldmVudC5jbGllbnRZO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIHggPj0gcmVjdC5sZWZ0IC0gdGhpcy5oaXRib3hNYXJnaW4gJiZcclxuICAgICAgeCA8PSByZWN0LnJpZ2h0ICsgdGhpcy5oaXRib3hNYXJnaW4gJiZcclxuICAgICAgeSA+PSByZWN0LnRvcCAtIHRoaXMuaGl0Ym94TWFyZ2luICYmXHJcbiAgICAgIHkgPD0gcmVjdC5ib3R0b20gKyB0aGlzLmhpdGJveE1hcmdpblxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldEhpdGJveGVzKCk6IHsgcmVjdDogRE9NUmVjdDsgZml4ZWQ6IGJvb2xlYW47IGNsb3NlOiAoKSA9PiB2b2lkIH1bXSB7XHJcbiAgICBjb25zdCBib3hlcyA9IHRoaXMuZ2V0T3Blbk1lbnVCb3VuZGluZ0JveGVzKCk7XHJcbiAgICBjb25zdCBidXR0b25Db250YWluZXJSZWN0ID0gdGhpcy5idXR0b25Db250YWluZXJSZWN0O1xyXG4gICAgaWYgKGJ1dHRvbkNvbnRhaW5lclJlY3QpIHtcclxuICAgICAgYm94ZXMucHVzaCh7IHJlY3Q6IGJ1dHRvbkNvbnRhaW5lclJlY3QsIGZpeGVkOiB0cnVlLCBjbG9zZTogKCkgPT4ge30gfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYm94ZXM7XHJcbiAgfVxyXG5cclxuICBnZXRPcGVuTWVudUJvdW5kaW5nQm94ZXMoKSB7XHJcbiAgICBjb25zdCBib3hlczogeyByZWN0OiBET01SZWN0OyBmaXhlZDogYm9vbGVhbjsgY2xvc2U6ICgpID0+IHZvaWQgfVtdID0gW107XHJcbiAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKG92ZXJsYXkpID0+IHtcclxuICAgICAgdGhpcy5nZXRPcGVuTWVudUJvdW5kaW5nQm94ZXNSZWMob3ZlcmxheSwgYm94ZXMpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYm94ZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE9wZW5NZW51Qm91bmRpbmdCb3hlc1JlYyhcclxuICAgIG92ZXJsYXk6IFJkdE1lbnVPdmVybGF5Q29tcG9uZW50LFxyXG4gICAgYm94ZXM6IHsgcmVjdDogRE9NUmVjdDsgZml4ZWQ6IGJvb2xlYW47IGNsb3NlOiAoKSA9PiB2b2lkIH1bXVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKG92ZXJsYXkuZXhwYW5kZWQpIHtcclxuICAgICAgbGV0IHNvbWVCeUNsaWNrID0gZmFsc2U7XHJcbiAgICAgIG92ZXJsYXkuY2hpbGRyZW4uZm9yRWFjaChcclxuICAgICAgICAoY2hpbGQpID0+XHJcbiAgICAgICAgICAoc29tZUJ5Q2xpY2sgfHw9IHRoaXMuZ2V0T3Blbk1lbnVCb3VuZGluZ0JveGVzUmVjKGNoaWxkLCBib3hlcykpXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGZpeGVkID1cclxuICAgICAgICBzb21lQnlDbGljayB8fCBvdmVybGF5LnNlbGZFeHBhbmRTcmMgPT09IFJkdE1lbnVFeHBhbmRTb3VyY2UuQ2xpY2s7XHJcbiAgICAgIGJveGVzLnB1c2goe1xyXG4gICAgICAgIHJlY3Q6IG92ZXJsYXkuYm94LFxyXG4gICAgICAgIGZpeGVkOiBmaXhlZCxcclxuICAgICAgICBjbG9zZTogKCkgPT4gb3ZlcmxheS5jbG9zZVNlbGYoKSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBmaXhlZDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIl19
458
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL21lbnUtYmFzZS9yZHQtbWVudS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEVBR2YsU0FBUyxFQUNULFNBQVMsRUFFVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBWSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQWUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsT0FBTyxFQUVQLGNBQWMsR0FFZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxHQUNiLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDckYsT0FBTyxFQUNMLDJCQUEyQixFQUMzQix5QkFBeUIsRUFDekIsb0NBQW9DLEVBQ3BDLGtDQUFrQyxFQUNsQyxtQ0FBbUMsRUFDbkMsaUNBQWlDLEVBQ2pDLG1CQUFtQixHQUNwQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBR0wsbUJBQW1CLEdBQ3BCLE1BQU0s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TixlQUFlO3NCQURkLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSXRDLFdBQVc7c0JBRFYsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFJdEMsWUFBWTtzQkFEWCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFjM0IsUUFBUTtzQkFEakIsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBSTNCLGlCQUFpQjtzQkFEMUIsWUFBWTt1QkFBQyxlQUFlO2dCQU03QixPQUFPO3NCQUROLFdBQVc7dUJBQUMsT0FBTztnQkFzUlYsYUFBYTtzQkFEdEIsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFtQnBDLGtCQUFrQjtzQkFEM0IsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFjakMsZUFBZTtzQkFEeEIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgRGVzdHJveVJlZixcclxuICBEaXJlY3RpdmUsXHJcbiAgRWxlbWVudFJlZixcclxuICBFbnZpcm9ubWVudEluamVjdG9yLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBpbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgbnVtYmVyQXR0cmlidXRlLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZHJlbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRSb3V0ZSwgUmR0Um91dGVyU2VydmljZSB9IGZyb20gJ0BuZ3JkdC9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRTaG9ydGN1dCwgUmR0U2hvcnRjdXRTZXJ2aWNlIH0gZnJvbSAnQG5ncmR0L3Nob3J0Y3V0cyc7XHJcbmltcG9ydCB7XHJcbiAgS0JfQ09ERSxcclxuICBSZHRIb3Jpem9udGFsRGlyZWN0aW9uLFxyXG4gIFJkdFN0cmluZ1V0aWxzLFxyXG4gIFJkdFZlcnRpY2FsRGlyZWN0aW9uLFxyXG59IGZyb20gJ0BuZ3JkdC91dGlscyc7XHJcbmltcG9ydCB7XHJcbiAgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsXHJcbiAgZnJvbUV2ZW50LFxyXG4gIFN1YnNjcmlwdGlvbixcclxuICB0aHJvdHRsZVRpbWUsXHJcbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJkdE1lbnVPdmVybGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS1vdmVybGF5L3JkdC1tZW51LW92ZXJsYXkuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBERUZBVUxUX01FTlVfSE9SSVpPTlRBTF9ESVIsXHJcbiAgREVGQVVMVF9NRU5VX1ZFUlRJQ0FMX0RJUixcclxuICBSRFRfTUVOVV9NQVJHSU5fQk9UVE9NX1BST1BFUlRZX05BTUUsXHJcbiAgUkRUX01FTlVfTUFSR0lOX0xFRlRfUFJPUEVSVFlfTkFNRSxcclxuICBSRFRfTUVOVV9NQVJHSU5fUklHSFRfUFJPUEVSVFlfTkFNRSxcclxuICBSRFRfTUVOVV9NQVJHSU5fVE9QX1BST1BFUlRZX05BTUUsXHJcbiAgUmR0TWVudVNob3J0Y3V0TW9kZSxcclxufSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIFBhcnNlZFJkdE1lbnVJdGVtLFxyXG4gIFJkdE1lbnVFeHBhbmRlZENoaWxkLFxyXG4gIFJkdE1lbnVFeHBhbmRTb3VyY2UsXHJcbn0gZnJvbSAnLi4vcHJpdmF0ZS1tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIGZpbmROZXh0SXRlbVdpdGhQcmVmaXgsXHJcbiAgRk9DVVNfVklTSUJMRSxcclxuICBnZXRDaGlsZFJvdXRlc01hcCxcclxuICBnZXRNZW51SXRlbXNTaG9ydGN1dHMsXHJcbiAgbWVudUl0ZW1IYXNDaGlsZHJlbixcclxuICBtZW51SXRlbUhhc1JvdXRlLFxyXG4gIFBhcnNlZFJkdE1lbnVJdGVtV2l0aFNob3J0Y3V0LFxyXG4gIFNpemUsXHJcbn0gZnJvbSAnLi4vdXRpbHMnO1xyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZHRNZW51QmFzZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXRcclxue1xyXG4gIEBJbnB1dCgpXHJcbiAgcHJlZmVycmVkVmVydGljYWxEaXI6IFJkdFZlcnRpY2FsRGlyZWN0aW9uID0gREVGQVVMVF9NRU5VX1ZFUlRJQ0FMX0RJUjtcclxuXHJcbiAgQElucHV0KClcclxuICBwcmVmZXJyZWRIb3Jpem9udGFsRGlyOiBSZHRIb3Jpem9udGFsRGlyZWN0aW9uID0gREVGQVVMVF9NRU5VX0hPUklaT05UQUxfRElSO1xyXG5cclxuICAvLyBNb2RlIG9ubHkgbWF0dGVycyBpZiBpdGVtIGhhcyBzaG9ydGN1dCBhbmQgb25seSBjaGlsZHJlbiwgbm8gY29tbWFuZCBub3Igcm91dGVyTGlua1xyXG4gIC8vIEZPQ1VTX0lURU0gd2lsbCBwdXQgZm9jdXMgb24gaXRlbSB3aXRoIHNob3J0Y3V0XHJcbiAgLy8gT1BFTl9TVUJNRU5VIHdpbGwgb3BlbiBpdHMgc3VibWVudSBhbmQgcHV0IGZvY3VzIG9uIHRoZSBmaXJzdCBpdGVtIGluIGl0XHJcbiAgLy8gSWYgaXRlbSBoYXMgY29tbWFuZCBvciByb3V0ZXJMaW5rLCBpdCB3aWxsIGFsd2F5cyBiZSBhY3RpdmF0ZWQgYW5kIGV2ZXJ5dGhpbmcgY2xvc2VkXHJcbiAgQElucHV0KClcclxuICBzaG9ydGN1dE1vZGU6ICdmb2N1cy1pdGVtJyB8ICdvcGVuLXN1Ym1lbnUnID1cclxuICAgIFJkdE1lbnVTaG9ydGN1dE1vZGUuT1BFTl9TVUJNRU5VO1xyXG5cclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcclxuICBjbG9zZU9uRm9jdXNPdXQgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXHJcbiAgb3Blbk9uSG92ZXIgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcclxuICBoaXRib3hNYXJnaW4gPSAxMDtcclxuXHJcbiAgcmVhZG9ubHkgY2QgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJkdFJvdXRlciA9IGluamVjdChSZHRSb3V0ZXJTZXJ2aWNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZWxSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBzaG9ydGN1dFNlcnZpY2UgPSBpbmplY3QoUmR0U2hvcnRjdXRTZXJ2aWNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oUmR0TWVudU92ZXJsYXlDb21wb25lbnQpXHJcbiAgcHJvdGVjdGVkIGNoaWxkcmVuITogUXVlcnlMaXN0PFJkdE1lbnVPdmVybGF5Q29tcG9uZW50PjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignZm9jdXNhYmxlSXRlbScpXHJcbiAgcHJvdGVjdGVkIGZvY3VzYWJsZUVsZW1lbnRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PjtcclxuXHJcbiAgYWJzdHJhY3QgZ2V0IGJ1dHRvbkNvbnRhaW5lcigpOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXHJcbiAgY2xhc3NlcyA9ICdyZHQtbWVudS1iYXNlJztcclxuXHJcbiAgZXhwYW5kZWRDaGlsZDogUmR0TWVudUV4cGFuZGVkQ2hpbGQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJvdGVjdGVkIGF1dG9mb2N1c1N1Ym1lbnVJdGVtOiAnZmlyc3QnIHwgJ2xhc3QnIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHBhcnNlZEl0ZW1zITogUGFyc2VkUmR0TWVudUl0ZW1bXTtcclxuXHJcbiAgZ2V0IGNsaWVudFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50U2l6ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY2xpZW50U2l6ZSE6IFNpemU7XHJcblxyXG4gIGdldCBib2R5TWFyZ2luKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JvZHlNYXJnaW47XHJcbiAgfVxyXG4gIHByaXZhdGUgX2JvZHlNYXJnaW4hOiB7XHJcbiAgICB0b3A6IG51bWJlcjtcclxuICAgIGJvdHRvbTogbnVtYmVyO1xyXG4gICAgbGVmdDogbnVtYmVyO1xyXG4gICAgcmlnaHQ6IG51bWJlcjtcclxuICB9O1xyXG5cclxuICBnZXQgYnV0dG9uQ29udGFpbmVyUmVjdCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9idXR0b25Db250YWluZXJSZWN0O1xyXG4gIH1cclxuICBwcml2YXRlIF9idXR0b25Db250YWluZXJSZWN0PzogRE9NUmVjdDtcclxuXHJcbiAgcHJvdGVjdGVkIGFsbFBhcnNlZEl0ZW1zITogUGFyc2VkUmR0TWVudUl0ZW1bXTtcclxuICBwcm90ZWN0ZWQgY2hpbGRSb3V0ZXNNYXA6IE1hcDxQYXJzZWRSZHRNZW51SXRlbSwgc3RyaW5nW11bXT4gPSBuZXcgTWFwKCk7XHJcbiAgcHJvdGVjdGVkIHNob3J0Y3V0U3ViID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIHByb3RlY3RlZCBzaG9ydGN1dE1hcDogUmVjb3JkPHN0cmluZywgUGFyc2VkUmR0TWVudUl0ZW1bXT4gPSB7fTtcclxuXHJcbiAgcmVhZG9ubHkga2V5QWN0aW9ucyA9IHtcclxuICAgIFtLQl9DT0RFLkFSUk9XLkxFRlRdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5mb2N1c1ByZXZJdGVtKGluZGV4KSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLlJJR0hUXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuZm9jdXNOZXh0SXRlbShpbmRleCksXHJcbiAgICBbS0JfQ09ERS5BUlJPVy5ET1dOXTogKGluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgIHRoaXMub3BlblN1Ym1lbnUoaW5kZXgsICdmaXJzdCcsIFJkdE1lbnVFeHBhbmRTb3VyY2UuU2hvcnRjdXQpLFxyXG4gICAgW0tCX0NPREUuQVJST1cuVVBdOiAoaW5kZXg6IG51bWJlcikgPT5cclxuICAgICAgdGhpcy5vcGVuU3VibWVudShpbmRleCwgJ2xhc3QnLCBSZHRNZW51RXhwYW5kU291cmNlLlNob3J0Y3V0KSxcclxuICAgIFtLQl9DT0RFLkhPTUVdOiAoKSA9PiB0aGlzLmZvY3VzSXRlbSgwKSxcclxuICAgIFtLQl9DT0RFLkVORF06ICgpID0+IHRoaXMuZm9jdXNJdGVtKHRoaXMucGFyc2VkSXRlbXMubGVuZ3RoIC0gMSksXHJcbiAgICBbS0JfQ09ERS5FTlRFUl06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmludm9rZUl0ZW1DbGlja0J5SW5kZXgoaW5kZXgpLFxyXG4gICAgW0tCX0NPREUuU1BBQ0VCQVJdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5pbnZva2VJdGVtQ2xpY2tCeUluZGV4KGluZGV4KSxcclxuICB9O1xyXG5cclxuICAvLyBSZXR1cm5zIGFsbCByb3V0ZXMgYXNvY2lhdGVkIHdpdGggaXRlbSBvciBpdHMgc3ViaXRlbXMuXHJcbiAgZ2V0Q2hpbGRSb3V0ZXMoaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkUm91dGVzTWFwLmdldChpdGVtKSA/PyBbXTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5yZHRSb3V0ZXIubmF2aWdhdGlvbkVuZCRcclxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGV2KSA9PiB0aGlzLmZpbHRlckl0ZW1zKCkpO1xyXG4gICAgdGhpcy5tZWFzdXJlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAodGhpcy5jaGlsZHJlbikge1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQ2hpbGRyZW4oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMubGlzdGVuV2luZG93UmVzaXplKCk7XHJcblxyXG4gICAgLy8gTm90IHVzaW5nIHRpbWVvdXQgcmVzdWx0cyBpbiBob3Jpem9udGFsIG92ZXJmbG93IG9uIGh0bWwgZWxlbWVudFxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubWVhc3VyZSgpO1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQ2hpbGRyZW4oKTtcclxuICAgIH0sIDUwKTtcclxuICB9XHJcblxyXG4gIHJlY2FsY3VsYXRlQ2hpbGRyZW4oKSB7XHJcbiAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcbiAgICAgIGNoaWxkLnJlY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICAgICAgdGhpcy5wcmVmZXJyZWRIb3Jpem9udGFsRGlyLFxyXG4gICAgICAgIHRoaXMucHJlZmVycmVkVmVydGljYWxEaXJcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VTdWJtZW51cyhmb2N1c0V4cGFuZGVkID0gZmFsc2UpIHtcclxuICAgIGlmIChmb2N1c0V4cGFuZGVkICYmIHRoaXMuZXhwYW5kZWRDaGlsZCkge1xyXG4gICAgICB0aGlzLmZvY3VzSXRlbSh0aGlzLmV4cGFuZGVkQ2hpbGQuaXRlbSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBudWxsO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbkl0ZW1DbGljayhpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgaWYgKFxyXG4gICAgICAobWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKSAmJiB0aGlzLmV4cGFuZGVkQ2hpbGQ/Lml0ZW0gIT09IGl0ZW0pIHx8XHJcbiAgICAgICh0aGlzLm9wZW5PbkhvdmVyICYmXHJcbiAgICAgICAgdGhpcy5leHBhbmRlZENoaWxkPy5zcmMgPT09IFJkdE1lbnVFeHBhbmRTb3VyY2UuSG92ZXIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IG51bGw7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IHsgaXRlbSwgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlLkNsaWNrIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBpdGVtLmNvbW1hbmQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgaXRlbS5jb21tYW5kKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25JdGVtUG9pbnRlckVudGVyKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAodGhpcy5vcGVuT25Ib3Zlcikge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKSAmJlxyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZD8uc3JjICE9PSBSZHRNZW51RXhwYW5kU291cmNlLkNsaWNrXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IHsgaXRlbSwgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlLkhvdmVyIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uS2V5RG93bihpdGVtSW5kZXg6IG51bWJlciwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGNvbnN0IGhhc0FjdGlvbiA9IGV2ZW50LmNvZGUgaW4gdGhpcy5rZXlBY3Rpb25zO1xyXG4gICAgY29uc3QgaXNMZXR0ZXIgPVxyXG4gICAgICBSZHRTdHJpbmdVdGlscy5pc0FscGhhYmV0Q2hhcmFjdGVyKGV2ZW50LmtleSkgfHxcclxuICAgICAgUmR0U3RyaW5nVXRpbHMuaXNOdW1lcmljQ2hhcmFjdGVyKGV2ZW50LmtleSk7XHJcblxyXG4gICAgaWYgKGhhc0FjdGlvbiB8fCBpc0xldHRlcikge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNBY3Rpb24pIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc0FjdGlvbikge1xyXG4gICAgICB0aGlzLmtleUFjdGlvbnNbZXZlbnQuY29kZV0oaXRlbUluZGV4KTtcclxuICAgIH0gZWxzZSBpZiAoaXNMZXR0ZXIpIHtcclxuICAgICAgY29uc3QgbmV4dCA9IGZpbmROZXh0SXRlbVdpdGhQcmVmaXgoXHJcbiAgICAgICAgdGhpcy5wYXJzZWRJdGVtcyxcclxuICAgICAgICBpdGVtSW5kZXgsXHJcbiAgICAgICAgZXZlbnQua2V5XHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChuZXh0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0obmV4dCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpbnZva2VJdGVtQ2xpY2soaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGlmIChtZW51SXRlbUhhc1JvdXRlKGl0ZW0pICYmIGl0ZW0ucm91dGVyTGluaykge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShpdGVtLnJvdXRlckxpbmspO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkl0ZW1DbGljayhpdGVtKTtcclxuICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSAnZmlyc3QnO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZpbHRlckl0ZW1zKCkge1xyXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMucmR0Um91dGVyLnBhcnNlQWJzb2x1dGVVcmwoKTtcclxuICAgIGlmICghY3VycmVudCkge1xyXG4gICAgICB0aGlzLnBhcnNlZEl0ZW1zID0gdGhpcy5hbGxQYXJzZWRJdGVtcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFyc2VkSXRlbXMgPSB0aGlzLmZpbHRlclJlYyh0aGlzLmFsbFBhcnNlZEl0ZW1zLCBjdXJyZW50KTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hpbGRSb3V0ZXNNYXAgPSBnZXRDaGlsZFJvdXRlc01hcCh0aGlzLnBhcnNlZEl0ZW1zKTtcclxuICAgIHRoaXMubGlzdGVuU2hvcnRjdXRzKCk7XHJcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZpbHRlclJlYyhcclxuICAgIGl0ZW1zOiBQYXJzZWRSZHRNZW51SXRlbVtdLFxyXG4gICAgY3VycmVudDogeyByb3V0ZTogUmR0Um91dGU7IHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55PiB9XHJcbiAgKTogUGFyc2VkUmR0TWVudUl0ZW1bXSB7XHJcbiAgICBsZXQgY3VycmVudFBhcmVudCA9IGN1cnJlbnQucm91dGU7XHJcbiAgICBjb25zdCBjdXJyZW50UGFyYW1zID0gY3VycmVudC5wYXJhbXM7XHJcblxyXG4gICAgY29uc3QgZmlsdGVyZWQgPSBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKCFpdGVtLnJlcXVpcmVkUGFyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcmVxdWlyZWQgPSBpdGVtLnJlcXVpcmVkUGFyZW50O1xyXG4gICAgICB3aGlsZSAoY3VycmVudFBhcmVudC5hYnNvbHV0ZVBhdGggIT09IHJlcXVpcmVkLmFic29sdXRlUGF0aCkge1xyXG4gICAgICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50UGFyZW50LnBhcmVudCE7XHJcbiAgICAgICAgaWYgKCFjdXJyZW50UGFyZW50KSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGxldCByZXF1aXJlZFBhcmVudDogUmR0Um91dGUgfCBudWxsID0gcmVxdWlyZWQ7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICBjb25zdCBwYXRoID0gcmVxdWlyZWRQYXJlbnQuYWJzb2x1dGVQYXRoO1xyXG4gICAgICAgIGlmIChwYXRoIGluIGN1cnJlbnRQYXJhbXMpIHtcclxuICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJlcXVpcmVkUGFyZW50LnN0YXRpY1BhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFBhcmFtc1twYXRoXVtrZXldICE9PSByZXF1aXJlZFBhcmVudC5zdGF0aWNQYXJhbXNba2V5XSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXF1aXJlZFBhcmVudCA9IHJlcXVpcmVkUGFyZW50LnBhcmVudDtcclxuICAgICAgfSB3aGlsZSAocmVxdWlyZWRQYXJlbnQpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKGl0ZW0uaXRlbXMpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgIGl0ZW1zOiB0aGlzLmZpbHRlclJlYyhpdGVtLml0ZW1zLCBjdXJyZW50KSxcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpbnZva2VJdGVtQ2xpY2tCeUluZGV4KGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tpdGVtSW5kZXhdO1xyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaW52b2tlSXRlbUNsaWNrKGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9wZW5TdWJtZW51KFxyXG4gICAgaXRlbUluZGV4OiBudW1iZXIsXHJcbiAgICB2aXNpYmxlRm9jdXM6ICdmaXJzdCcgfCAnbGFzdCcsXHJcbiAgICBzcmM6IFJkdE1lbnVFeHBhbmRTb3VyY2VcclxuICApIHtcclxuICAgIGlmIChcclxuICAgICAgaXRlbUluZGV4IDwgdGhpcy5wYXJzZWRJdGVtcy5sZW5ndGggJiZcclxuICAgICAgbWVudUl0ZW1IYXNDaGlsZHJlbih0aGlzLnBhcnNlZEl0ZW1zW2l0ZW1JbmRleF0pXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMucGFyc2VkSXRlbXNbaXRlbUluZGV4XTtcclxuICAgICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IHZpc2libGVGb2N1cztcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0geyBpdGVtLCBzcmMgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmb2N1c0l0ZW0oaXRlbTogbnVtYmVyIHwgUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGxldCBpdGVtSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdudW1iZXInKSB7XHJcbiAgICAgIGl0ZW1JbmRleCA9IGl0ZW07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpdGVtSW5kZXggPSB0aGlzLnBhcnNlZEl0ZW1zLmluZGV4T2YoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGl0ZW1JbmRleCA+PSAwICYmIGl0ZW1JbmRleCA8IHRoaXMuZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuYmx1ckFsbEZvY3VzYWJsZSgpO1xyXG4gICAgICB0aGlzLmZvY3VzRm9jdXNhYmxlKGl0ZW1JbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZm9jdXNOZXh0SXRlbShpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgbmV4dCA9IChpdGVtSW5kZXggKyAxKSAlIHRoaXMucGFyc2VkSXRlbXMubGVuZ3RoO1xyXG4gICAgdGhpcy5mb2N1c0l0ZW0obmV4dCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZm9jdXNQcmV2SXRlbShpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgcHJldiA9XHJcbiAgICAgIChpdGVtSW5kZXggLSAxICsgdGhpcy5wYXJzZWRJdGVtcy5sZW5ndGgpICUgdGhpcy5wYXJzZWRJdGVtcy5sZW5ndGg7XHJcbiAgICB0aGlzLmZvY3VzSXRlbShwcmV2KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBibHVyQWxsRm9jdXNhYmxlKCkge1xyXG4gICAgdGhpcy5mb2N1c2FibGVFbGVtZW50cy5mb3JFYWNoKChlbCkgPT5cclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbC5uYXRpdmVFbGVtZW50LCBGT0NVU19WSVNJQkxFKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmb2N1c0ZvY3VzYWJsZShpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgZWxSZWYgPSB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmdldChpdGVtSW5kZXgpO1xyXG4gICAgaWYgKGVsUmVmKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxSZWYubmF0aXZlRWxlbWVudCwgRk9DVVNfVklTSUJMRSk7XHJcbiAgICAgIGVsUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpwb2ludGVybW92ZScsIFsnJGV2ZW50J10pXHJcbiAgcHJvdGVjdGVkIG9uUG9pbnRlck1vdmUoZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xyXG4gICAgaWYgKHRoaXMub3Blbk9uSG92ZXIgJiYgdGhpcy5leHBhbmRlZENoaWxkKSB7XHJcbiAgICAgIGNvbnN0IGhpdGJveGVzID0gdGhpcy5nZXRIaXRib3hlcygpO1xyXG4gICAgICBjb25zdCBpc0luc2lkZSA9IGhpdGJveGVzLnNvbWUoKGhpdGJveCkgPT5cclxuICAgICAgICB0aGlzLmlzUG9pbnRlckluc2lkZUhpdGJveChoaXRib3gucmVjdCwgZXZlbnQpXHJcbiAgICAgICk7XHJcbiAgICAgIGZvciAobGV0IGkgPSBoaXRib3hlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGNvbnN0IGhpdGJveCA9IGhpdGJveGVzW2ldO1xyXG4gICAgICAgIGlmICghaGl0Ym94LmZpeGVkICYmICFpc0luc2lkZSkge1xyXG4gICAgICAgICAgaGl0Ym94LmNsb3NlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIENsb3NlcyBtZW51IGlmIHVzZXIgbmF2aWdhdGVzIG91dHNpZGUgaXQgdXNpbmcgVGFiLlxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpmb2N1c291dCcsIFsnJGV2ZW50J10pXHJcbiAgcHJvdGVjdGVkIGNoZWNrQWN0aXZlRWxlbWVudChldmVudDogRm9jdXNFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuY2xvc2VPbkZvY3VzT3V0ICYmICF0aGlzLm9wZW5PbkhvdmVyKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdmb2N1c291dCcsIGV2ZW50KTtcclxuXHJcbiAgICAgIGNvbnN0IHRoaXNFbCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcclxuICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHx8ICF0aGlzRWwuY29udGFpbnModGFyZ2V0KSkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBwcm90ZWN0ZWQgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IGVsUmVmID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKCFlbFJlZi5jb250YWlucyh0YXJnZXQpKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VTdWJtZW51cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG1lYXN1cmUoKSB7XHJcbiAgICB0aGlzLm1lYXN1cmVCdXR0b25Db250YWluZXIoKTtcclxuICAgIHRoaXMubWVhc3VyZUNsaWVudFNpemUoKTtcclxuICAgIHRoaXMucmVhZE1hcmdpbigpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRNYXJnaW4oKSB7XHJcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgY29uc3QgdG9wVmFsID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFxyXG4gICAgICBSRFRfTUVOVV9NQVJHSU5fVE9QX1BST1BFUlRZX05BTUVcclxuICAgICk7XHJcbiAgICBjb25zdCBib3R0b21WYWwgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXHJcbiAgICAgIFJEVF9NRU5VX01BUkdJTl9CT1RUT01fUFJPUEVSVFlfTkFNRVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGxlZnRWYWwgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXHJcbiAgICAgIFJEVF9NRU5VX01BUkdJTl9MRUZUX1BST1BFUlRZX05BTUVcclxuICAgICk7XHJcbiAgICBjb25zdCByaWdodFZhbCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcclxuICAgICAgUkRUX01FTlVfTUFSR0lOX1JJR0hUX1BST1BFUlRZX05BTUVcclxuICAgICk7XHJcbiAgICB0aGlzLl9ib2R5TWFyZ2luID0ge1xyXG4gICAgICB0b3A6IHBhcnNlSW50KHRvcFZhbCkgfHwgMCxcclxuICAgICAgYm90dG9tOiBwYXJzZUludChib3R0b21WYWwpIHx8IDAsXHJcbiAgICAgIGxlZnQ6IHBhcnNlSW50KGxlZnRWYWwpIHx8IDAsXHJcbiAgICAgIHJpZ2h0OiBwYXJzZUludChyaWdodFZhbCkgfHwgMCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbWVhc3VyZUNsaWVudFNpemUoKSB7XHJcbiAgICB0aGlzLl9jbGllbnRTaXplID0ge1xyXG4gICAgICB3aWR0aDogdGhpcy5kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRoaXMuZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG1lYXN1cmVCdXR0b25Db250YWluZXIoKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuYnV0dG9uQ29udGFpbmVyO1xyXG4gICAgaWYgKGVsKSB7XHJcbiAgICAgIHRoaXMuX2J1dHRvbkNvbnRhaW5lclJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2J1dHRvbkNvbnRhaW5lclJlY3QgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbGlzdGVuV2luZG93UmVzaXplKCkge1xyXG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRocm90dGxlVGltZSgwLCBhbmltYXRpb25GcmFtZVNjaGVkdWxlciwgeyB0cmFpbGluZzogdHJ1ZSB9KSxcclxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVhc3VyZSgpO1xyXG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGVDaGlsZHJlbigpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBsaXN0ZW5TaG9ydGN1dHMoKSB7XHJcbiAgICBjb25zdCBpdGVtc1dpdGhTaG9ydGN1dHMgPSBnZXRNZW51SXRlbXNTaG9ydGN1dHModGhpcy5wYXJzZWRJdGVtcyk7XHJcbiAgICBjb25zdCBzaG9ydGN1dHM6IFJkdFNob3J0Y3V0W10gPSBpdGVtc1dpdGhTaG9ydGN1dHMubWFwKFxyXG4gICAgICAoaXQpID0+IGl0LnNob3J0Y3V0XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc2hvcnRjdXRNYXAgPSB0aGlzLmdldFNob3J0Y3V0TWFwKGl0ZW1zV2l0aFNob3J0Y3V0cyk7XHJcbiAgICB0aGlzLnNob3J0Y3V0U3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnNob3J0Y3V0U3ViID0gdGhpcy5zaG9ydGN1dFNlcnZpY2VcclxuICAgICAgLmxpc3RlbihzaG9ydGN1dHMpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAuc3Vic2NyaWJlKChldnQpID0+IHRoaXMub25TaG9ydGN1dChldnQuc2hvcnRjdXQpKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRTaG9ydGN1dE1hcChcclxuICAgIGl0ZW1zV2l0aFNob3J0Y3V0czogUGFyc2VkUmR0TWVudUl0ZW1XaXRoU2hvcnRjdXRbXVxyXG4gICkge1xyXG4gICAgY29uc3Qgc2hvcnRjdXRNYXA6IFJlY29yZDxzdHJpbmcsIFBhcnNlZFJkdE1lbnVJdGVtW10+ID0ge307XHJcbiAgICBpdGVtc1dpdGhTaG9ydGN1dHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBzaG9ydGN1dE1hcFtpdGVtLnNob3J0Y3V0LmhvdGtleXNWYWx1ZV0gPSBpdGVtLnBhdGg7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzaG9ydGN1dE1hcDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvblNob3J0Y3V0KHNob3J0Y3V0OiBSZHRTaG9ydGN1dCkge1xyXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuc2hvcnRjdXRNYXBbc2hvcnRjdXQuaG90a2V5c1ZhbHVlXTtcclxuICAgIGlmICghcGF0aCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYE1lbnUgc2hvcnRjdXQgJHtzaG9ydGN1dC5ob3RrZXlzVmFsdWV9IHdhcyBkZXRlY3RlZCwgYnV0IHRoZXJlIGlzIG5vIHBhdGggYXNzb2NpYXRlZCB3aXRoIGl0LmAsXHJcbiAgICAgICAgdGhpcy5zaG9ydGN1dE1hcFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGFzdCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcclxuICAgIGNvbnN0IGhhc1JvdXRlID0gbWVudUl0ZW1IYXNSb3V0ZShsYXN0KTtcclxuICAgIGNvbnN0IGhhc0NvbW1hbmQgPSB0eXBlb2YgbGFzdC5jb21tYW5kID09PSAnZnVuY3Rpb24nO1xyXG4gICAgaWYgKGhhc1JvdXRlIHx8IGhhc0NvbW1hbmQpIHtcclxuICAgICAgdGhpcy5jbG9zZVN1Ym1lbnVzKGZhbHNlKTtcclxuICAgICAgaWYgKGhhc0NvbW1hbmQpIHtcclxuICAgICAgICBsYXN0LmNvbW1hbmQhKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGhhc1JvdXRlKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUobGFzdC5yb3V0ZXJMaW5rISk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aXZhdGVJdGVtUmVjdXJzaXZlbHkocGF0aCwgUmR0TWVudUV4cGFuZFNvdXJjZS5TaG9ydGN1dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYWN0aXZhdGVJdGVtUmVjdXJzaXZlbHkoXHJcbiAgICBwYXRoOiBQYXJzZWRSZHRNZW51SXRlbVtdLFxyXG4gICAgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlXHJcbiAgKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IFsuLi5wYXRoXTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG9ydGN1dE1vZGUgPT09IFJkdE1lbnVTaG9ydGN1dE1vZGUuT1BFTl9TVUJNRU5VKSB7XHJcbiAgICAgIGNvbnN0IGxhc3QgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXTtcclxuICAgICAgaWYgKG1lbnVJdGVtSGFzQ2hpbGRyZW4obGFzdCkgJiYgbGFzdC5pdGVtc1swXSkge1xyXG4gICAgICAgIGNoaWxkcmVuLnB1c2gobGFzdC5pdGVtc1swXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0aGlzSXRlbSA9IGNoaWxkcmVuLnNoaWZ0KCkhO1xyXG5cclxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IHsgaXRlbTogdGhpc0l0ZW0sIHNyYyB9O1xyXG4gICAgICBjb25zdCBvdmVybGF5ID0gdGhpcy5jaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQuaXRlbSA9PT0gdGhpc0l0ZW0pO1xyXG4gICAgICBvdmVybGF5IS5mb2N1c0l0ZW1SZWN1cnNpdmVseShjaGlsZHJlbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBudWxsO1xyXG4gICAgICB0aGlzLmZvY3VzSXRlbSh0aGlzSXRlbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc1BvaW50ZXJJbnNpZGVIaXRib3goaGl0Ym94OiBET01SZWN0LCBldmVudDogUG9pbnRlckV2ZW50KSB7XHJcbiAgICBjb25zdCByZWN0ID0gaGl0Ym94O1xyXG4gICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFg7XHJcbiAgICBjb25zdCB5ID0gZXZlbnQuY2xpZW50WTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB4ID49IHJlY3QubGVmdCAtIHRoaXMuaGl0Ym94TWFyZ2luICYmXHJcbiAgICAgIHggPD0gcmVjdC5yaWdodCArIHRoaXMuaGl0Ym94TWFyZ2luICYmXHJcbiAgICAgIHkgPj0gcmVjdC50b3AgLSB0aGlzLmhpdGJveE1hcmdpbiAmJlxyXG4gICAgICB5IDw9IHJlY3QuYm90dG9tICsgdGhpcy5oaXRib3hNYXJnaW5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRIaXRib3hlcygpOiB7IHJlY3Q6IERPTVJlY3Q7IGZpeGVkOiBib29sZWFuOyBjbG9zZTogKCkgPT4gdm9pZCB9W10ge1xyXG4gICAgY29uc3QgYm94ZXMgPSB0aGlzLmdldE9wZW5NZW51Qm91bmRpbmdCb3hlcygpO1xyXG4gICAgY29uc3QgYnV0dG9uQ29udGFpbmVyUmVjdCA9IHRoaXMuYnV0dG9uQ29udGFpbmVyUmVjdDtcclxuICAgIGlmIChidXR0b25Db250YWluZXJSZWN0KSB7XHJcbiAgICAgIGJveGVzLnB1c2goeyByZWN0OiBidXR0b25Db250YWluZXJSZWN0LCBmaXhlZDogdHJ1ZSwgY2xvc2U6ICgpID0+IHt9IH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJveGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3Blbk1lbnVCb3VuZGluZ0JveGVzKCkge1xyXG4gICAgY29uc3QgYm94ZXM6IHsgcmVjdDogRE9NUmVjdDsgZml4ZWQ6IGJvb2xlYW47IGNsb3NlOiAoKSA9PiB2b2lkIH1bXSA9IFtdO1xyXG4gICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChvdmVybGF5KSA9PiB7XHJcbiAgICAgIHRoaXMuZ2V0T3Blbk1lbnVCb3VuZGluZ0JveGVzUmVjKG92ZXJsYXksIGJveGVzKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGJveGVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRPcGVuTWVudUJvdW5kaW5nQm94ZXNSZWMoXHJcbiAgICBvdmVybGF5OiBSZHRNZW51T3ZlcmxheUNvbXBvbmVudCxcclxuICAgIGJveGVzOiB7IHJlY3Q6IERPTVJlY3Q7IGZpeGVkOiBib29sZWFuOyBjbG9zZTogKCkgPT4gdm9pZCB9W11cclxuICApOiBib29sZWFuIHtcclxuICAgIGlmIChvdmVybGF5LmV4cGFuZGVkKSB7XHJcbiAgICAgIGxldCBzb21lQnlDbGljayA9IGZhbHNlO1xyXG4gICAgICBvdmVybGF5LmNoaWxkcmVuLmZvckVhY2goXHJcbiAgICAgICAgKGNoaWxkKSA9PlxyXG4gICAgICAgICAgKHNvbWVCeUNsaWNrIHx8PSB0aGlzLmdldE9wZW5NZW51Qm91bmRpbmdCb3hlc1JlYyhjaGlsZCwgYm94ZXMpKVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBmaXhlZCA9XHJcbiAgICAgICAgc29tZUJ5Q2xpY2sgfHwgb3ZlcmxheS5zZWxmRXhwYW5kU3JjID09PSBSZHRNZW51RXhwYW5kU291cmNlLkNsaWNrO1xyXG4gICAgICBib3hlcy5wdXNoKHtcclxuICAgICAgICByZWN0OiBvdmVybGF5LmJveCxcclxuICAgICAgICBmaXhlZDogZml4ZWQsXHJcbiAgICAgICAgY2xvc2U6ICgpID0+IG92ZXJsYXkuY2xvc2VTZWxmKGZhbHNlKSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBmaXhlZDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIl19