ontimize-web-ngx 15.6.0-next.3 → 15.6.0-next.5

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 (44) hide show
  1. package/esm2020/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.mjs +19 -3
  2. package/esm2020/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.mjs +17 -4
  3. package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +7 -5
  4. package/esm2020/lib/components/form/navigation/o-form-navigation.component.mjs +27 -16
  5. package/esm2020/lib/components/grid/o-grid.component.mjs +17 -16
  6. package/esm2020/lib/components/grid/skeketon/o-grid-skeleton.component.mjs +12 -15
  7. package/esm2020/lib/components/index.mjs +2 -1
  8. package/esm2020/lib/components/list/o-list.component.mjs +24 -13
  9. package/esm2020/lib/components/list/skeleton/o-list-skeleton.component.mjs +12 -15
  10. package/esm2020/lib/components/o-repeatable-skeleton.component.mjs +33 -0
  11. package/esm2020/lib/components/o-service-base-component.class.mjs +2 -2
  12. package/esm2020/lib/components/o-skeleton.component.mjs +15 -6
  13. package/esm2020/lib/components/table/extensions/skeleton/o-table-skeleton.component.mjs +5 -19
  14. package/esm2020/lib/components/table/o-table.component.mjs +11 -2
  15. package/esm2020/lib/injection-tokens/index.mjs +2 -1
  16. package/esm2020/lib/interfaces/index.mjs +2 -1
  17. package/esm2020/lib/layouts/app-layout/o-app-layout-base.class.mjs +1 -1
  18. package/esm2020/lib/layouts/app-layout/o-app-layout.component.mjs +26 -9
  19. package/esm2020/lib/services/factories.mjs +7 -2
  20. package/esm2020/lib/util/codes.mjs +3 -1
  21. package/fesm2015/ontimize-web-ngx.mjs +288 -182
  22. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  23. package/fesm2020/ontimize-web-ngx.mjs +287 -182
  24. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  25. package/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.d.ts +3 -0
  26. package/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.d.ts +1 -0
  27. package/lib/components/app-sidenav/o-app-sidenav.component.d.ts +2 -1
  28. package/lib/components/form/navigation/o-form-navigation.component.d.ts +6 -4
  29. package/lib/components/grid/skeketon/o-grid-skeleton.component.d.ts +4 -7
  30. package/lib/components/index.d.ts +1 -0
  31. package/lib/components/list/o-list.component.d.ts +2 -0
  32. package/lib/components/list/skeleton/o-list-skeleton.component.d.ts +4 -7
  33. package/lib/components/o-repeatable-skeleton.component.d.ts +9 -0
  34. package/lib/components/o-skeleton.component.d.ts +10 -5
  35. package/lib/components/table/extensions/header/o-table-header-components.d.ts +2 -2
  36. package/lib/components/table/extensions/skeleton/o-table-skeleton.component.d.ts +1 -10
  37. package/lib/components/table/o-table.component.d.ts +1 -0
  38. package/lib/injection-tokens/index.d.ts +2 -0
  39. package/lib/interfaces/index.d.ts +1 -0
  40. package/lib/layouts/app-layout/o-app-layout-base.class.d.ts +1 -1
  41. package/lib/layouts/app-layout/o-app-layout.component.d.ts +7 -3
  42. package/lib/util/codes.d.ts +3 -0
  43. package/package.json +1 -1
  44. package/theme.scss +69 -69
@@ -10,6 +10,7 @@ import { OTranslateService } from '../../../services/translate/o-translate.servi
10
10
  import { PermissionsUtils } from '../../../util/permissions';
11
11
  import { Util } from '../../../util/util';
12
12
  import { OAppSidenavBase } from '../o-app-sidenav-base.class';
13
+ import { OAppLayoutBase } from '../../../layouts/app-layout/o-app-layout-base.class';
13
14
  import * as i0 from "@angular/core";
14
15
  import * as i1 from "@angular/common";
15
16
  import * as i2 from "@angular/flex-layout/flex";
@@ -41,6 +42,7 @@ export class OAppSidenavMenuGroupComponent {
41
42
  this.permissionsService = this.injector.get(PermissionsService);
42
43
  this.sidenav = this.injector.get(OAppSidenavBase);
43
44
  this.router = this.injector.get(Router);
45
+ this.oAppLayoutComponent = this.injector.get(OAppLayoutBase);
44
46
  this.routerSubscription = this.router.events.subscribe((event) => {
45
47
  if (event instanceof NavigationEnd && this.appMenuService.isRouteItem(this.menuGroup)) {
46
48
  this.active = this.appMenuService.isItemActive(this.menuGroup);
@@ -51,6 +53,20 @@ export class OAppSidenavMenuGroupComponent {
51
53
  ngOnInit() {
52
54
  this.parsePermissions();
53
55
  }
56
+ get shouldShowTooltip() {
57
+ switch (this.oAppLayoutComponent.tooltipDisplayMode) {
58
+ case 'always':
59
+ return true;
60
+ case 'never':
61
+ return false;
62
+ case 'only-collapsed':
63
+ return !this.sidenavOpened;
64
+ case 'only-expanded':
65
+ return this.sidenavOpened;
66
+ default:
67
+ return false;
68
+ }
69
+ }
54
70
  ngAfterViewInit() {
55
71
  if (this.menuGroup.id === 'user-info' && this.sidenav) {
56
72
  const self = this;
@@ -143,7 +159,7 @@ export class OAppSidenavMenuGroupComponent {
143
159
  }
144
160
  }
145
161
  OAppSidenavMenuGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OAppSidenavMenuGroupComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
146
- OAppSidenavMenuGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OAppSidenavMenuGroupComponent, selector: "o-app-sidenav-menu-group", inputs: { menuGroup: ["menu-group", "menuGroup"], sidenavOpened: ["sidenav-opened", "sidenavOpened"], level: "level" }, outputs: { onItemClick: "onItemClick" }, host: { properties: { "class": "getClass()", "attr.disabled": "disabled" } }, ngImport: i0, template: "<ng-container *ngIf=\"!hidden\">\n <a mat-button mat-button class=\"o-app-sidenav-item o-app-sidenav-menugroup\" [class.opened]=\"menuGroup.opened\" (click)=\"onClick()\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\n <ng-container *ngIf=\"sidenavOpened\">\n <mat-icon *ngIf=\"menuGroup.svgIcon\" [svgIcon]=\"menuGroup.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuGroup.icon\">{{ menuGroup.icon }}</mat-icon>\n <span class=\"o-app-sidenav-menugroup-title\">{{ menuGroup.name | oTranslate }}</span>\n <span class=\"fill-remaining\"></span>\n <ng-container *ngIf=\"appMenuService.isMenuGroupRoute(menuGroup) && menuGroup.opened; else arrowMenuGroupTemplate\">\n <mat-icon class=\"o-app-sidenav-menugroup-arrow\" svgIcon=\"ontimize:keyboard_arrow_right\" (click)=\"toggle($event)\"></mat-icon>\n </ng-container>\n <ng-template #arrowMenuGroupTemplate>\n <mat-icon class=\"o-app-sidenav-menugroup-arrow\" svgIcon=\"ontimize:keyboard_arrow_right\"></mat-icon>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!sidenavOpened\">\n <mat-icon [matTooltip]=\"tooltip\" matTooltipClass=\"menugroup-tooltip\" matTooltipPosition=\"right\" *ngIf=\"menuGroup.svgIcon\"\n [svgIcon]=\"menuGroup.svgIcon\"></mat-icon>\n <mat-icon [matTooltip]=\"tooltip\" matTooltipClass=\"menugroup-tooltip\" matTooltipPosition=\"right\" *ngIf=\"menuGroup.icon\">{{\n menuGroup.icon }}</mat-icon>\n </ng-container>\n </div>\n </a>\n\n <div class=\"o-app-sidenav-menugroup-items-container\">\n <ul [@contentExpansion]=\"contentExpansion\" class=\"o-app-sidenav-menugroup-ul\">\n <ng-container *ngFor=\"let menuItem of menuGroup.items\">\n <ng-container *ngIf=\"appMenuService.isVisible(menuItem)\">\n <o-app-sidenav-menu-item [sidenav-opened]=\"sidenavOpened\" *ngIf=\"!menuItem.items; else menuGroup\" [disabled]=\"disabled\"\n [menu-item]=\"menuItem\" [menu-item-type]=\"appMenuService.getMenuItemType(menuItem)\" (onClick)=\"onMenuItemClick($event)\">\n </o-app-sidenav-menu-item>\n <ng-template #menuGroup>\n <o-app-sidenav-menu-group [menu-group]=\"menuItem\" [sidenav-opened]=\"sidenavOpened\" [level]=\"level + 1\"\n *ngIf=\"appMenuService.getMenuItemType(menuItem) === 'group'\" (onItemClick)=\"onMenuItemClick($event)\">\n </o-app-sidenav-menu-group>\n </ng-template>\n </ng-container>\n </ng-container>\n </ul>\n </div>\n</ng-container>\n", styles: [".o-app-sidenav-menu-group .o-app-sidenav-menugroup.mat-mdc-button{min-width:0}.o-app-sidenav-menu-group[disabled=true] .o-app-sidenav-menugroup{cursor:default}.o-app-sidenav-menu-group .mat-mdc-tooltip.menugroup-tooltip{margin-left:28px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i3.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: OAppSidenavMenuGroupComponent, selector: "o-app-sidenav-menu-group", inputs: ["menu-group", "sidenav-opened", "level"], outputs: ["onItemClick"] }, { kind: "component", type: i6.OAppSidenavMenuItemComponent, selector: "o-app-sidenav-menu-item", inputs: ["menu-item", "menu-item-type", "sidenav-opened", "disabled"], outputs: ["onClick"] }, { kind: "pipe", type: i7.OTranslatePipe, name: "oTranslate" }], animations: [
162
+ OAppSidenavMenuGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OAppSidenavMenuGroupComponent, selector: "o-app-sidenav-menu-group", inputs: { menuGroup: ["menu-group", "menuGroup"], sidenavOpened: ["sidenav-opened", "sidenavOpened"], level: "level" }, outputs: { onItemClick: "onItemClick" }, host: { properties: { "class": "getClass()", "attr.disabled": "disabled" } }, ngImport: i0, template: "<ng-container *ngIf=\"!hidden\">\n <ng-container *ngIf=\"shouldShowTooltip; else noTooltip\">\n <a mat-button mat-button class=\"o-app-sidenav-item o-app-sidenav-menugroup\" [class.opened]=\"menuGroup.opened\" (click)=\"onClick()\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\" [matTooltip]=\"tooltip\" matTooltipClass=\"menugroup-tooltip\"\n matTooltipPosition=\"right\" [matTooltipShowDelay]=\"sidenavOpened?500:0\">\n <ng-container *ngTemplateOutlet=\"contentButton\"></ng-container>\n </a>\n </ng-container>\n\n\n <div class=\"o-app-sidenav-menugroup-items-container\">\n <ul [@contentExpansion]=\"contentExpansion\" class=\"o-app-sidenav-menugroup-ul\">\n <ng-container *ngFor=\"let menuItem of menuGroup.items\">\n <ng-container *ngIf=\"appMenuService.isVisible(menuItem)\">\n <o-app-sidenav-menu-item [sidenav-opened]=\"sidenavOpened\" *ngIf=\"!menuItem.items; else menuGroup\" [disabled]=\"disabled\"\n [menu-item]=\"menuItem\" [menu-item-type]=\"appMenuService.getMenuItemType(menuItem)\" (onClick)=\"onMenuItemClick($event)\">\n </o-app-sidenav-menu-item>\n <ng-template #menuGroup>\n <o-app-sidenav-menu-group [menu-group]=\"menuItem\" [sidenav-opened]=\"sidenavOpened\" [level]=\"level + 1\"\n *ngIf=\"appMenuService.getMenuItemType(menuItem) === 'group'\" (onItemClick)=\"onMenuItemClick($event)\">\n </o-app-sidenav-menu-group>\n </ng-template>\n </ng-container>\n </ng-container>\n </ul>\n </div>\n</ng-container>\n\n<ng-template #noTooltip>\n <a mat-button mat-button class=\"o-app-sidenav-item o-app-sidenav-menugroup\" [class.opened]=\"menuGroup.opened\" (click)=\"onClick()\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <ng-container *ngTemplateOutlet=\"contentButton\"></ng-container>\n </a>\n</ng-template>\n\n<ng-template #contentButton>\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\n <ng-container *ngIf=\"sidenavOpened\">\n <mat-icon *ngIf=\"menuGroup.svgIcon\" [svgIcon]=\"menuGroup.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuGroup.icon\">{{ menuGroup.icon }}</mat-icon>\n <span class=\"o-app-sidenav-menugroup-title\">{{ menuGroup.name | oTranslate }}</span>\n <span class=\"fill-remaining\"></span>\n <ng-container *ngIf=\"appMenuService.isMenuGroupRoute(menuGroup) && menuGroup.opened; else arrowMenuGroupTemplate\">\n <mat-icon [id]=\"'arrow_icon_' + menuGroup.id\" class=\"o-app-sidenav-menugroup-arrow\" svgIcon=\"ontimize:keyboard_arrow_right\"\n (click)=\"toggle($event)\"\n (keydown)=\"toggle($event)\"></mat-icon>\n </ng-container>\n <ng-template #arrowMenuGroupTemplate>\n <mat-icon [id]=\"'arrow_icon_' + menuGroup.id\" class=\"o-app-sidenav-menugroup-arrow\" svgIcon=\"ontimize:keyboard_arrow_right\"></mat-icon>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!sidenavOpened\">\n <mat-icon *ngIf=\"menuGroup.svgIcon\" [svgIcon]=\"menuGroup.svgIcon\"></mat-icon> <mat-icon *ngIf=\"menuGroup.icon\">{{ menuGroup.icon }}</mat-icon>\n </ng-container>\n </div>\n</ng-template>\n", styles: [".o-app-sidenav-menu-group .o-app-sidenav-menugroup.mat-mdc-button{min-width:0}.o-app-sidenav-menu-group[disabled=true] .o-app-sidenav-menugroup{cursor:default}.o-app-sidenav-menu-group .mat-mdc-tooltip.menugroup-tooltip{margin-left:28px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i3.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: OAppSidenavMenuGroupComponent, selector: "o-app-sidenav-menu-group", inputs: ["menu-group", "sidenav-opened", "level"], outputs: ["onItemClick"] }, { kind: "component", type: i6.OAppSidenavMenuItemComponent, selector: "o-app-sidenav-menu-item", inputs: ["menu-item", "menu-item-type", "sidenav-opened", "disabled"], outputs: ["onClick"] }, { kind: "pipe", type: i7.OTranslatePipe, name: "oTranslate" }], animations: [
147
163
  trigger('contentExpansion', [
148
164
  state('collapsed', style({ height: '0px' })),
149
165
  state('expanded', style({ height: '*' })),
@@ -171,6 +187,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
171
187
  ], changeDetection: ChangeDetectionStrategy.OnPush, host: {
172
188
  '[class]': 'getClass()',
173
189
  '[attr.disabled]': 'disabled'
174
- }, template: "<ng-container *ngIf=\"!hidden\">\n <a mat-button mat-button class=\"o-app-sidenav-item o-app-sidenav-menugroup\" [class.opened]=\"menuGroup.opened\" (click)=\"onClick()\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\n <ng-container *ngIf=\"sidenavOpened\">\n <mat-icon *ngIf=\"menuGroup.svgIcon\" [svgIcon]=\"menuGroup.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuGroup.icon\">{{ menuGroup.icon }}</mat-icon>\n <span class=\"o-app-sidenav-menugroup-title\">{{ menuGroup.name | oTranslate }}</span>\n <span class=\"fill-remaining\"></span>\n <ng-container *ngIf=\"appMenuService.isMenuGroupRoute(menuGroup) && menuGroup.opened; else arrowMenuGroupTemplate\">\n <mat-icon class=\"o-app-sidenav-menugroup-arrow\" svgIcon=\"ontimize:keyboard_arrow_right\" (click)=\"toggle($event)\"></mat-icon>\n </ng-container>\n <ng-template #arrowMenuGroupTemplate>\n <mat-icon class=\"o-app-sidenav-menugroup-arrow\" svgIcon=\"ontimize:keyboard_arrow_right\"></mat-icon>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!sidenavOpened\">\n <mat-icon [matTooltip]=\"tooltip\" matTooltipClass=\"menugroup-tooltip\" matTooltipPosition=\"right\" *ngIf=\"menuGroup.svgIcon\"\n [svgIcon]=\"menuGroup.svgIcon\"></mat-icon>\n <mat-icon [matTooltip]=\"tooltip\" matTooltipClass=\"menugroup-tooltip\" matTooltipPosition=\"right\" *ngIf=\"menuGroup.icon\">{{\n menuGroup.icon }}</mat-icon>\n </ng-container>\n </div>\n </a>\n\n <div class=\"o-app-sidenav-menugroup-items-container\">\n <ul [@contentExpansion]=\"contentExpansion\" class=\"o-app-sidenav-menugroup-ul\">\n <ng-container *ngFor=\"let menuItem of menuGroup.items\">\n <ng-container *ngIf=\"appMenuService.isVisible(menuItem)\">\n <o-app-sidenav-menu-item [sidenav-opened]=\"sidenavOpened\" *ngIf=\"!menuItem.items; else menuGroup\" [disabled]=\"disabled\"\n [menu-item]=\"menuItem\" [menu-item-type]=\"appMenuService.getMenuItemType(menuItem)\" (onClick)=\"onMenuItemClick($event)\">\n </o-app-sidenav-menu-item>\n <ng-template #menuGroup>\n <o-app-sidenav-menu-group [menu-group]=\"menuItem\" [sidenav-opened]=\"sidenavOpened\" [level]=\"level + 1\"\n *ngIf=\"appMenuService.getMenuItemType(menuItem) === 'group'\" (onItemClick)=\"onMenuItemClick($event)\">\n </o-app-sidenav-menu-group>\n </ng-template>\n </ng-container>\n </ng-container>\n </ul>\n </div>\n</ng-container>\n", styles: [".o-app-sidenav-menu-group .o-app-sidenav-menugroup.mat-mdc-button{min-width:0}.o-app-sidenav-menu-group[disabled=true] .o-app-sidenav-menugroup{cursor:default}.o-app-sidenav-menu-group .mat-mdc-tooltip.menugroup-tooltip{margin-left:28px}\n"] }]
190
+ }, template: "<ng-container *ngIf=\"!hidden\">\n <ng-container *ngIf=\"shouldShowTooltip; else noTooltip\">\n <a mat-button mat-button class=\"o-app-sidenav-item o-app-sidenav-menugroup\" [class.opened]=\"menuGroup.opened\" (click)=\"onClick()\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\" [matTooltip]=\"tooltip\" matTooltipClass=\"menugroup-tooltip\"\n matTooltipPosition=\"right\" [matTooltipShowDelay]=\"sidenavOpened?500:0\">\n <ng-container *ngTemplateOutlet=\"contentButton\"></ng-container>\n </a>\n </ng-container>\n\n\n <div class=\"o-app-sidenav-menugroup-items-container\">\n <ul [@contentExpansion]=\"contentExpansion\" class=\"o-app-sidenav-menugroup-ul\">\n <ng-container *ngFor=\"let menuItem of menuGroup.items\">\n <ng-container *ngIf=\"appMenuService.isVisible(menuItem)\">\n <o-app-sidenav-menu-item [sidenav-opened]=\"sidenavOpened\" *ngIf=\"!menuItem.items; else menuGroup\" [disabled]=\"disabled\"\n [menu-item]=\"menuItem\" [menu-item-type]=\"appMenuService.getMenuItemType(menuItem)\" (onClick)=\"onMenuItemClick($event)\">\n </o-app-sidenav-menu-item>\n <ng-template #menuGroup>\n <o-app-sidenav-menu-group [menu-group]=\"menuItem\" [sidenav-opened]=\"sidenavOpened\" [level]=\"level + 1\"\n *ngIf=\"appMenuService.getMenuItemType(menuItem) === 'group'\" (onItemClick)=\"onMenuItemClick($event)\">\n </o-app-sidenav-menu-group>\n </ng-template>\n </ng-container>\n </ng-container>\n </ul>\n </div>\n</ng-container>\n\n<ng-template #noTooltip>\n <a mat-button mat-button class=\"o-app-sidenav-item o-app-sidenav-menugroup\" [class.opened]=\"menuGroup.opened\" (click)=\"onClick()\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <ng-container *ngTemplateOutlet=\"contentButton\"></ng-container>\n </a>\n</ng-template>\n\n<ng-template #contentButton>\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\n <ng-container *ngIf=\"sidenavOpened\">\n <mat-icon *ngIf=\"menuGroup.svgIcon\" [svgIcon]=\"menuGroup.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuGroup.icon\">{{ menuGroup.icon }}</mat-icon>\n <span class=\"o-app-sidenav-menugroup-title\">{{ menuGroup.name | oTranslate }}</span>\n <span class=\"fill-remaining\"></span>\n <ng-container *ngIf=\"appMenuService.isMenuGroupRoute(menuGroup) && menuGroup.opened; else arrowMenuGroupTemplate\">\n <mat-icon [id]=\"'arrow_icon_' + menuGroup.id\" class=\"o-app-sidenav-menugroup-arrow\" svgIcon=\"ontimize:keyboard_arrow_right\"\n (click)=\"toggle($event)\"\n (keydown)=\"toggle($event)\"></mat-icon>\n </ng-container>\n <ng-template #arrowMenuGroupTemplate>\n <mat-icon [id]=\"'arrow_icon_' + menuGroup.id\" class=\"o-app-sidenav-menugroup-arrow\" svgIcon=\"ontimize:keyboard_arrow_right\"></mat-icon>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!sidenavOpened\">\n <mat-icon *ngIf=\"menuGroup.svgIcon\" [svgIcon]=\"menuGroup.svgIcon\"></mat-icon> <mat-icon *ngIf=\"menuGroup.icon\">{{ menuGroup.icon }}</mat-icon>\n </ng-container>\n </div>\n</ng-template>\n", styles: [".o-app-sidenav-menu-group .o-app-sidenav-menugroup.mat-mdc-button{min-width:0}.o-app-sidenav-menu-group[disabled=true] .o-app-sidenav-menugroup{cursor:default}.o-app-sidenav-menu-group .mat-mdc-tooltip.menugroup-tooltip{margin-left:28px}\n"] }]
175
191
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { sidenavOpened: [], level: [] } });
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hcHAtc2lkZW5hdi1tZW51LWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2FwcC1zaWRlbmF2L21lbnUtZ3JvdXAvby1hcHAtc2lkZW5hdi1tZW51LWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2FwcC1zaWRlbmF2L21lbnUtZ3JvdXAvby1hcHAtc2lkZW5hdi1tZW51LWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFFBQVEsRUFJUixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRWxHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUVwRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVB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WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdG9yLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVHlwZSxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEJvb2xlYW5JbnB1dENvbnZlcnRlciwgTnVtYmVySW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBNZW51R3JvdXAsIE1lbnVHcm91cFJvdXRlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9hcHAtbWVudS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXBwTWVudVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHAtbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUvby10cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBPUGVybWlzc2lvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9vLXBlcm1pc3Npb25zLnR5cGUnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnNVdGlscyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvcGVybWlzc2lvbnMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPQXBwU2lkZW5hdkJhc2UgfSBmcm9tICcuLi9vLWFwcC1zaWRlbmF2LWJhc2UuY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19BUFBfU0lERU5BVl9NRU5VX0dST1VQID0gW1xuICAnbWVudUdyb3VwIDogbWVudS1ncm91cCcsXG4gICdzaWRlbmF2T3BlbmVkIDogc2lkZW5hdi1vcGVuZWQnLFxuICAnbGV2ZWwnXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fQVBQX1NJREVOQVZfTUVOVV9HUk9VUCA9IFtcbiAgJ29uSXRlbUNsaWNrJ1xuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby1hcHAtc2lkZW5hdi1tZW51LWdyb3VwJyxcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX0FQUF9TSURFTkFWX01FTlVfR1JPVVAsXG4gIG91dHB1dHM6IERFRkFVTFRfT1VUUFVUU19PX0FQUF9TSURFTkFWX01FTlVfR1JPVVAsXG4gIHRlbXBsYXRlVXJsOiAnLi9vLWFwcC1zaWRlbmF2LW1lbnUtZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLWFwcC1zaWRlbmF2LW1lbnUtZ3JvdXAuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2NvbnRlbnRFeHBhbnNpb24nLCBbXG4gICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnIH0pKSxcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxuICAgICAgdHJhbnNpdGlvbignY29sbGFwc2VkID0+IGV4cGFuZGVkJywgYW5pbWF0ZSgnMjAwbXMgZWFzZS1pbicpKSxcbiAgICAgIHRyYW5zaXRpb24oJ2V4cGFuZGVkID0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIwMG1zIGVhc2Utb3V0JykpXG4gICAgXSlcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzXSc6ICdnZXRDbGFzcygpJyxcbiAgICAnW2F0dHIuZGlzYWJsZWRdJzogJ2Rpc2FibGVkJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9BcHBTaWRlbmF2TWVudUdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIHB1YmxpYyBvbkl0ZW1DbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIG9uQ2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogT1RyYW5zbGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZTtcblxuICBwdWJsaWMgYXBwTWVudVNlcnZpY2U6IEFwcE1lbnVTZXJ2aWNlO1xuICBwdWJsaWMgc2lkZW5hdjogT0FwcFNpZGVuYXZCYXNlO1xuICBwcm90ZWN0ZWQgc2lkZW5hdlN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcm90ZWN0ZWQgcGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucztcbiAgcHJvdGVjdGVkIG11dGF0aW9uT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG5cbiAgcHVibGljIG1lbnVHcm91cDogKE1lbnVHcm91cCB8IE1lbnVHcm91cFJvdXRlKTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2lkZW5hdk9wZW5lZDogYm9vbGVhbiA9IHRydWU7XG5cbiAgQE51bWJlcklucHV0Q29udmVydGVyKClcbiAgbGV2ZWw6IG51bWJlciA9IDE7XG5cbiAgaGlkZGVuOiBib29sZWFuO1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIF9jb250ZW50RXhwYW5zaW9uO1xuICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXI7XG4gIHJvdXRlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBhY3RpdmU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChPVHJhbnNsYXRlU2VydmljZSk7XG4gICAgdGhpcy5hcHBNZW51U2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFwcE1lbnVTZXJ2aWNlKTtcbiAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KFBlcm1pc3Npb25zU2VydmljZSk7XG4gICAgdGhpcy5zaWRlbmF2ID0gdGhpcy5pbmplY3Rvci5nZXQoT0FwcFNpZGVuYXZCYXNlKTtcbiAgICB0aGlzLnJvdXRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0PFJvdXRlcj4oUm91dGVyIGFzIFR5cGU8Um91dGVyPik7XG4gICAgdGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCAmJiB0aGlzLmFwcE1lbnVTZXJ2aWNlLmlzUm91dGVJdGVtKHRoaXMubWVudUdyb3VwKSkge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRoaXMuYXBwTWVudVNlcnZpY2UuaXNJdGVtQWN0aXZlKHRoaXMubWVudUdyb3VwIGFzIE1lbnVHcm91cFJvdXRlKTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnBhcnNlUGVybWlzc2lvbnMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5tZW51R3JvdXAuaWQgPT09ICd1c2VyLWluZm8nICYmIHRoaXMuc2lkZW5hdikge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnNpZGVuYXZTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2lkZW5hdi5vblNpZGVuYXZPcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKChvcGVuZWQpID0+IHtcbiAgICAgICAgc2VsZi5kaXNhYmxlZCA9ICgoIW9wZW5lZCAmJiBVdGlsLmlzRGVmaW5lZChvcGVuZWQpKSB8fCAoVXRpbC5pc0RlZmluZWQoc2VsZi5wZXJtaXNzaW9ucykgJiYgc2VsZi5wZXJtaXNzaW9ucyAmJiBzZWxmLnBlcm1pc3Npb25zLmVuYWJsZWQgPT09IGZhbHNlKSk7XG4gICAgICAgIHNlbGYudXBkYXRlQ29udGVudEV4cGFuc2lvbigpO1xuICAgICAgICBzZWxmLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbnRlbnRFeHBhbnNpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnNpZGVuYXZTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2lkZW5hdlN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJvdXRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VQZXJtaXNzaW9ucygpIHtcbiAgICAvLyBpZiBvYXR0ciBpbiBmb3JtLCBpdCBjYW4gaGF2ZSBwZXJtaXNzaW9uc1xuICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRNZW51UGVybWlzc2lvbnModGhpcy5tZW51R3JvdXAuaWQpO1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5wZXJtaXNzaW9ucykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oaWRkZW4gPSB0aGlzLnBlcm1pc3Npb25zLnZpc2libGUgPT09IGZhbHNlO1xuICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLnBlcm1pc3Npb25zLmVuYWJsZWQgPT09IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlciA9IFBlcm1pc3Npb25zVXRpbHMucmVnaXN0ZXJEaXNhYmxlZENoYW5nZXNJbkRvbSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgY2hlY2tTdHJpbmdWYWx1ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DbGljaygpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5hcHBNZW51U2VydmljZS5pc01lbnVHcm91cCh0aGlzLm1lbnVHcm91cCkgfHxcbiAgICAgIHRoaXMuYXBwTWVudVNlcnZpY2UuaXNNZW51R3JvdXBSb3V0ZSh0aGlzLm1lbnVHcm91cCkgJiYgKCF0aGlzLm1lbnVHcm91cC5vcGVuZWQpKSB7XG4gICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIH1cbiAgICB0aGlzLm5hdmlnYXRlKCk7XG4gIH1cblxuICB0b2dnbGUoZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICB0aGlzLm1lbnVHcm91cC5vcGVuZWQgPSAhdGhpcy5tZW51R3JvdXAub3BlbmVkO1xuICAgIHRoaXMuYXBwTWVudVNlcnZpY2Uub25DbGljay5uZXh0KCk7XG4gICAgdGhpcy51cGRhdGVDb250ZW50RXhwYW5zaW9uKCk7XG4gIH1cblxuICBuYXZpZ2F0ZSgpIHtcbiAgICBpZiAodGhpcy5hcHBNZW51U2VydmljZS5pc01lbnVHcm91cFJvdXRlKHRoaXMubWVudUdyb3VwKSkge1xuICAgICAgY29uc3Qgcm91dGUgPSAodGhpcy5tZW51R3JvdXAgYXMgTWVudUdyb3VwUm91dGUpLnJvdXRlO1xuICAgICAgaWYgKHRoaXMucm91dGVyLnVybCAhPT0gcm91dGUpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3JvdXRlXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29udGVudEV4cGFuc2lvbigpIHtcbiAgICBsZXQgaXNPcGVuZWQgPSB0aGlzLm1lbnVHcm91cCAmJiB0aGlzLm1lbnVHcm91cC5vcGVuZWQ7XG4gICAgaWYgKHRoaXMubWVudUdyb3VwLmlkID09PSAndXNlci1pbmZvJykge1xuICAgICAgaXNPcGVuZWQgPSAodGhpcy5zaWRlbmF2ICYmIHRoaXMuc2lkZW5hdi5zaWRlbmF2ICYmIHRoaXMuc2lkZW5hdi5zaWRlbmF2Lm9wZW5lZCkgJiYgaXNPcGVuZWQ7XG4gICAgfVxuICAgIHRoaXMuY29udGVudEV4cGFuc2lvbiA9IGlzT3BlbmVkID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnRFeHBhbnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGVudEV4cGFuc2lvbjtcbiAgfVxuXG4gIHNldCBjb250ZW50RXhwYW5zaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5fY29udGVudEV4cGFuc2lvbiA9IHZhbDtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGdldCB0b29sdGlwKCkge1xuICAgIGxldCByZXN1bHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KHRoaXMubWVudUdyb3VwLm5hbWUpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLm1lbnVHcm91cC50b29sdGlwKSkge1xuICAgICAgcmVzdWx0ICs9ICc6ICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KHRoaXMubWVudUdyb3VwLnRvb2x0aXApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgb25NZW51SXRlbUNsaWNrKGU6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5vbkl0ZW1DbGljay5lbWl0KGUpO1xuICB9XG5cbiAgZ2V0Q2xhc3MoKSB7XG4gICAgbGV0IGNsYXNzTmFtZSA9ICdvLWFwcC1zaWRlbmF2LW1lbnUtZ3JvdXAgby1hcHAtc2lkZW5hdi1tZW51LWdyb3VwLWxldmVsLScgKyB0aGlzLmxldmVsO1xuICAgIGlmICh0aGlzLm1lbnVHcm91cC5jbGFzcykge1xuICAgICAgY2xhc3NOYW1lICs9ICcgJyArIHRoaXMubWVudUdyb3VwLmNsYXNzO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhaGlkZGVuXCI+XG4gIDxhIG1hdC1idXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cIm8tYXBwLXNpZGVuYXYtaXRlbSBvLWFwcC1zaWRlbmF2LW1lbnVncm91cFwiIFtjbGFzcy5vcGVuZWRdPVwibWVudUdyb3VwLm9wZW5lZFwiIChjbGljayk9XCJvbkNsaWNrKClcIlxuICAgIFtjbGFzcy5vLWFwcC1zaWRlbmF2LXZpZXdlci1zaWRlbmF2LWl0ZW0tc2VsZWN0ZWRdPVwiYWN0aXZlXCI+XG4gICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeEZpbGw+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2lkZW5hdk9wZW5lZFwiPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJtZW51R3JvdXAuc3ZnSWNvblwiIFtzdmdJY29uXT1cIm1lbnVHcm91cC5zdmdJY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwibWVudUdyb3VwLmljb25cIj57eyBtZW51R3JvdXAuaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiby1hcHAtc2lkZW5hdi1tZW51Z3JvdXAtdGl0bGVcIj57eyBtZW51R3JvdXAubmFtZSB8IG9UcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsbC1yZW1haW5pbmdcIj48L3NwYW4+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhcHBNZW51U2VydmljZS5pc01lbnVHcm91cFJvdXRlKG1lbnVHcm91cCkgJiYgbWVudUdyb3VwLm9wZW5lZDsgZWxzZSBhcnJvd01lbnVHcm91cFRlbXBsYXRlXCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiby1hcHAtc2lkZW5hdi1tZW51Z3JvdXAtYXJyb3dcIiBzdmdJY29uPVwib250aW1pemU6a2V5Ym9hcmRfYXJyb3dfcmlnaHRcIiAoY2xpY2spPVwidG9nZ2xlKCRldmVudClcIj48L21hdC1pY29uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNhcnJvd01lbnVHcm91cFRlbXBsYXRlPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm8tYXBwLXNpZGVuYXYtbWVudWdyb3VwLWFycm93XCIgc3ZnSWNvbj1cIm9udGltaXplOmtleWJvYXJkX2Fycm93X3JpZ2h0XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzaWRlbmF2T3BlbmVkXCI+XG4gICAgICAgIDxtYXQtaWNvbiBbbWF0VG9vbHRpcF09XCJ0b29sdGlwXCIgbWF0VG9vbHRpcENsYXNzPVwibWVudWdyb3VwLXRvb2x0aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJyaWdodFwiICpuZ0lmPVwibWVudUdyb3VwLnN2Z0ljb25cIlxuICAgICAgICAgIFtzdmdJY29uXT1cIm1lbnVHcm91cC5zdmdJY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPG1hdC1pY29uIFttYXRUb29sdGlwXT1cInRvb2x0aXBcIiBtYXRUb29sdGlwQ2xhc3M9XCJtZW51Z3JvdXAtdG9vbHRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCIgKm5nSWY9XCJtZW51R3JvdXAuaWNvblwiPnt7XG4gICAgICAgICAgbWVudUdyb3VwLmljb24gfX08L21hdC1pY29uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvYT5cblxuICA8ZGl2IGNsYXNzPVwiby1hcHAtc2lkZW5hdi1tZW51Z3JvdXAtaXRlbXMtY29udGFpbmVyXCI+XG4gICAgPHVsIFtAY29udGVudEV4cGFuc2lvbl09XCJjb250ZW50RXhwYW5zaW9uXCIgY2xhc3M9XCJvLWFwcC1zaWRlbmF2LW1lbnVncm91cC11bFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVudUl0ZW0gb2YgbWVudUdyb3VwLml0ZW1zXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhcHBNZW51U2VydmljZS5pc1Zpc2libGUobWVudUl0ZW0pXCI+XG4gICAgICAgICAgPG8tYXBwLXNpZGVuYXYtbWVudS1pdGVtIFtzaWRlbmF2LW9wZW5lZF09XCJzaWRlbmF2T3BlbmVkXCIgKm5nSWY9XCIhbWVudUl0ZW0uaXRlbXM7IGVsc2UgbWVudUdyb3VwXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFttZW51LWl0ZW1dPVwibWVudUl0ZW1cIiBbbWVudS1pdGVtLXR5cGVdPVwiYXBwTWVudVNlcnZpY2UuZ2V0TWVudUl0ZW1UeXBlKG1lbnVJdGVtKVwiIChvbkNsaWNrKT1cIm9uTWVudUl0ZW1DbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgPC9vLWFwcC1zaWRlbmF2LW1lbnUtaXRlbT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI21lbnVHcm91cD5cbiAgICAgICAgICAgIDxvLWFwcC1zaWRlbmF2LW1lbnUtZ3JvdXAgW21lbnUtZ3JvdXBdPVwibWVudUl0ZW1cIiBbc2lkZW5hdi1vcGVuZWRdPVwic2lkZW5hdk9wZW5lZFwiIFtsZXZlbF09XCJsZXZlbCArIDFcIlxuICAgICAgICAgICAgICAqbmdJZj1cImFwcE1lbnVTZXJ2aWNlLmdldE1lbnVJdGVtVHlwZShtZW51SXRlbSkgPT09ICdncm91cCdcIiAob25JdGVtQ2xpY2spPVwib25NZW51SXRlbUNsaWNrKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvby1hcHAtc2lkZW5hdi1tZW51LWdyb3VwPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hcHAtc2lkZW5hdi1tZW51LWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2FwcC1zaWRlbmF2L21lbnUtZ3JvdXAvby1hcHAtc2lkZW5hdi1tZW51LWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2FwcC1zaWRlbmF2L21lbnUtZ3JvdXAvby1hcHAtc2lkZW5hdi1tZW51LWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFFBQVEsRUFJUixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRWxHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUVwRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVB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QUU7NEJBQzFCLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7NEJBQzVDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7NEJBQ3pDLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7NEJBQzdELFVBQVUsQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt5QkFDL0QsQ0FBQztxQkFDSCxtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSixTQUFTLEVBQUUsWUFBWTt3QkFDdkIsaUJBQWlCLEVBQUUsVUFBVTtxQkFDOUI7d0pBbUJELGFBQWEsTUFHYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3RvcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFR5cGUsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIsIE51bWJlcklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgTWVudUdyb3VwLCBNZW51R3JvdXBSb3V0ZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvYXBwLW1lbnUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFwcE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXBwLW1lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IE9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlL28tdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1Blcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvby1wZXJtaXNzaW9ucy50eXBlJztcbmltcG9ydCB7IFBlcm1pc3Npb25zVXRpbHMgfSBmcm9tICcuLi8uLi8uLi91dGlsL3Blcm1pc3Npb25zJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0FwcFNpZGVuYXZCYXNlIH0gZnJvbSAnLi4vby1hcHAtc2lkZW5hdi1iYXNlLmNsYXNzJztcbmltcG9ydCB7IE9BcHBMYXlvdXRCYXNlIH0gZnJvbSAnLi4vLi4vLi4vbGF5b3V0cy9hcHAtbGF5b3V0L28tYXBwLWxheW91dC1iYXNlLmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fQVBQX1NJREVOQVZfTUVOVV9HUk9VUCA9IFtcbiAgJ21lbnVHcm91cCA6IG1lbnUtZ3JvdXAnLFxuICAnc2lkZW5hdk9wZW5lZCA6IHNpZGVuYXYtb3BlbmVkJyxcbiAgJ2xldmVsJ1xuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUUFVUU19PX0FQUF9TSURFTkFWX01FTlVfR1JPVVAgPSBbXG4gICdvbkl0ZW1DbGljaydcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tYXBwLXNpZGVuYXYtbWVudS1ncm91cCcsXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19BUFBfU0lERU5BVl9NRU5VX0dST1VQLFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19BUFBfU0lERU5BVl9NRU5VX0dST1VQLFxuICB0ZW1wbGF0ZVVybDogJy4vby1hcHAtc2lkZW5hdi1tZW51LWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby1hcHAtc2lkZW5hdi1tZW51LWdyb3VwLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdjb250ZW50RXhwYW5zaW9uJywgW1xuICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4JyB9KSksXG4gICAgICBzdGF0ZSgnZXhwYW5kZWQnLCBzdHlsZSh7IGhlaWdodDogJyonIH0pKSxcbiAgICAgIHRyYW5zaXRpb24oJ2NvbGxhcHNlZCA9PiBleHBhbmRlZCcsIGFuaW1hdGUoJzIwMG1zIGVhc2UtaW4nKSksXG4gICAgICB0cmFuc2l0aW9uKCdleHBhbmRlZCA9PiBjb2xsYXBzZWQnLCBhbmltYXRlKCcyMDBtcyBlYXNlLW91dCcpKVxuICAgIF0pXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzc10nOiAnZ2V0Q2xhc3MoKScsXG4gICAgJ1thdHRyLmRpc2FibGVkXSc6ICdkaXNhYmxlZCdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBPQXBwU2lkZW5hdk1lbnVHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgb25JdGVtQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHB1YmxpYyBvbkNsaWNrRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2U6IE9UcmFuc2xhdGVTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2U7XG5cbiAgcHVibGljIGFwcE1lbnVTZXJ2aWNlOiBBcHBNZW51U2VydmljZTtcbiAgcHVibGljIHNpZGVuYXY6IE9BcHBTaWRlbmF2QmFzZTtcbiAgcHJvdGVjdGVkIHNpZGVuYXZTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJvdGVjdGVkIHBlcm1pc3Npb25zOiBPUGVybWlzc2lvbnM7XG4gIHByb3RlY3RlZCBtdXRhdGlvbk9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuXG4gIHB1YmxpYyBtZW51R3JvdXA6IChNZW51R3JvdXAgfCBNZW51R3JvdXBSb3V0ZSk7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNpZGVuYXZPcGVuZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBOdW1iZXJJbnB1dENvbnZlcnRlcigpXG4gIGxldmVsOiBudW1iZXIgPSAxO1xuXG4gIGhpZGRlbjogYm9vbGVhbjtcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBfY29udGVudEV4cGFuc2lvbjtcbiAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyO1xuICByb3V0ZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgYWN0aXZlOiBib29sZWFuO1xuICBvQXBwTGF5b3V0Q29tcG9uZW50OiBPQXBwTGF5b3V0QmFzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBlbFJlZjogRWxlbWVudFJlZixcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLmFwcE1lbnVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoQXBwTWVudVNlcnZpY2UpO1xuICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoUGVybWlzc2lvbnNTZXJ2aWNlKTtcbiAgICB0aGlzLnNpZGVuYXYgPSB0aGlzLmluamVjdG9yLmdldChPQXBwU2lkZW5hdkJhc2UpO1xuICAgIHRoaXMucm91dGVyID0gdGhpcy5pbmplY3Rvci5nZXQ8Um91dGVyPihSb3V0ZXIgYXMgVHlwZTxSb3V0ZXI+KTtcbiAgICB0aGlzLm9BcHBMYXlvdXRDb21wb25lbnQgPSB0aGlzLmluamVjdG9yLmdldDxPQXBwTGF5b3V0QmFzZT4oT0FwcExheW91dEJhc2UgYXMgVHlwZTxPQXBwTGF5b3V0QmFzZT4pO1xuICAgIHRoaXMucm91dGVyU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgJiYgdGhpcy5hcHBNZW51U2VydmljZS5pc1JvdXRlSXRlbSh0aGlzLm1lbnVHcm91cCkpIHtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0aGlzLmFwcE1lbnVTZXJ2aWNlLmlzSXRlbUFjdGl2ZSh0aGlzLm1lbnVHcm91cCBhcyBNZW51R3JvdXBSb3V0ZSk7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5wYXJzZVBlcm1pc3Npb25zKCk7XG4gIH1cblxuICBnZXQgc2hvdWxkU2hvd1Rvb2x0aXAoKSB7XG4gICAgc3dpdGNoICh0aGlzLm9BcHBMYXlvdXRDb21wb25lbnQudG9vbHRpcERpc3BsYXlNb2RlKSB7XG4gICAgICBjYXNlICdhbHdheXMnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ25ldmVyJzpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY2FzZSAnb25seS1jb2xsYXBzZWQnOlxuICAgICAgICByZXR1cm4gIXRoaXMuc2lkZW5hdk9wZW5lZDtcbiAgICAgIGNhc2UgJ29ubHktZXhwYW5kZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5zaWRlbmF2T3BlbmVkO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5tZW51R3JvdXAuaWQgPT09ICd1c2VyLWluZm8nICYmIHRoaXMuc2lkZW5hdikge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnNpZGVuYXZTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2lkZW5hdi5vblNpZGVuYXZPcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKChvcGVuZWQpID0+IHtcbiAgICAgICAgc2VsZi5kaXNhYmxlZCA9ICgoIW9wZW5lZCAmJiBVdGlsLmlzRGVmaW5lZChvcGVuZWQpKSB8fCAoVXRpbC5pc0RlZmluZWQoc2VsZi5wZXJtaXNzaW9ucykgJiYgc2VsZi5wZXJtaXNzaW9ucyAmJiBzZWxmLnBlcm1pc3Npb25zLmVuYWJsZWQgPT09IGZhbHNlKSk7XG4gICAgICAgIHNlbGYudXBkYXRlQ29udGVudEV4cGFuc2lvbigpO1xuICAgICAgICBzZWxmLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbnRlbnRFeHBhbnNpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnNpZGVuYXZTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2lkZW5hdlN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJvdXRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VQZXJtaXNzaW9ucygpIHtcbiAgICAvLyBpZiBvYXR0ciBpbiBmb3JtLCBpdCBjYW4gaGF2ZSBwZXJtaXNzaW9uc1xuICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRNZW51UGVybWlzc2lvbnModGhpcy5tZW51R3JvdXAuaWQpO1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5wZXJtaXNzaW9ucykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oaWRkZW4gPSB0aGlzLnBlcm1pc3Npb25zLnZpc2libGUgPT09IGZhbHNlO1xuICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLnBlcm1pc3Npb25zLmVuYWJsZWQgPT09IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlciA9IFBlcm1pc3Npb25zVXRpbHMucmVnaXN0ZXJEaXNhYmxlZENoYW5nZXNJbkRvbSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgY2hlY2tTdHJpbmdWYWx1ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DbGljaygpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5hcHBNZW51U2VydmljZS5pc01lbnVHcm91cCh0aGlzLm1lbnVHcm91cCkgfHxcbiAgICAgIHRoaXMuYXBwTWVudVNlcnZpY2UuaXNNZW51R3JvdXBSb3V0ZSh0aGlzLm1lbnVHcm91cCkgJiYgKCF0aGlzLm1lbnVHcm91cC5vcGVuZWQpKSB7XG4gICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIH1cbiAgICB0aGlzLm5hdmlnYXRlKCk7XG4gIH1cblxuICB0b2dnbGUoZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICB0aGlzLm1lbnVHcm91cC5vcGVuZWQgPSAhdGhpcy5tZW51R3JvdXAub3BlbmVkO1xuICAgIHRoaXMuYXBwTWVudVNlcnZpY2Uub25DbGljay5uZXh0KCk7XG4gICAgdGhpcy51cGRhdGVDb250ZW50RXhwYW5zaW9uKCk7XG4gIH1cblxuICBuYXZpZ2F0ZSgpIHtcbiAgICBpZiAodGhpcy5hcHBNZW51U2VydmljZS5pc01lbnVHcm91cFJvdXRlKHRoaXMubWVudUdyb3VwKSkge1xuICAgICAgY29uc3Qgcm91dGUgPSAodGhpcy5tZW51R3JvdXAgYXMgTWVudUdyb3VwUm91dGUpLnJvdXRlO1xuICAgICAgaWYgKHRoaXMucm91dGVyLnVybCAhPT0gcm91dGUpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3JvdXRlXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29udGVudEV4cGFuc2lvbigpIHtcbiAgICBsZXQgaXNPcGVuZWQgPSB0aGlzLm1lbnVHcm91cCAmJiB0aGlzLm1lbnVHcm91cC5vcGVuZWQ7XG4gICAgaWYgKHRoaXMubWVudUdyb3VwLmlkID09PSAndXNlci1pbmZvJykge1xuICAgICAgaXNPcGVuZWQgPSAodGhpcy5zaWRlbmF2ICYmIHRoaXMuc2lkZW5hdi5zaWRlbmF2ICYmIHRoaXMuc2lkZW5hdi5zaWRlbmF2Lm9wZW5lZCkgJiYgaXNPcGVuZWQ7XG4gICAgfVxuICAgIHRoaXMuY29udGVudEV4cGFuc2lvbiA9IGlzT3BlbmVkID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnRFeHBhbnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGVudEV4cGFuc2lvbjtcbiAgfVxuXG4gIHNldCBjb250ZW50RXhwYW5zaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5fY29udGVudEV4cGFuc2lvbiA9IHZhbDtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGdldCB0b29sdGlwKCkge1xuICAgIGxldCByZXN1bHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KHRoaXMubWVudUdyb3VwLm5hbWUpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLm1lbnVHcm91cC50b29sdGlwKSkge1xuICAgICAgcmVzdWx0ICs9ICc6ICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KHRoaXMubWVudUdyb3VwLnRvb2x0aXApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgb25NZW51SXRlbUNsaWNrKGU6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5vbkl0ZW1DbGljay5lbWl0KGUpO1xuICB9XG5cbiAgZ2V0Q2xhc3MoKSB7XG4gICAgbGV0IGNsYXNzTmFtZSA9ICdvLWFwcC1zaWRlbmF2LW1lbnUtZ3JvdXAgby1hcHAtc2lkZW5hdi1tZW51LWdyb3VwLWxldmVsLScgKyB0aGlzLmxldmVsO1xuICAgIGlmICh0aGlzLm1lbnVHcm91cC5jbGFzcykge1xuICAgICAgY2xhc3NOYW1lICs9ICcgJyArIHRoaXMubWVudUdyb3VwLmNsYXNzO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhaGlkZGVuXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG91bGRTaG93VG9vbHRpcDsgZWxzZSBub1Rvb2x0aXBcIj5cbiAgICA8YSBtYXQtYnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJvLWFwcC1zaWRlbmF2LWl0ZW0gby1hcHAtc2lkZW5hdi1tZW51Z3JvdXBcIiBbY2xhc3Mub3BlbmVkXT1cIm1lbnVHcm91cC5vcGVuZWRcIiAoY2xpY2spPVwib25DbGljaygpXCJcbiAgICAgIFtjbGFzcy5vLWFwcC1zaWRlbmF2LXZpZXdlci1zaWRlbmF2LWl0ZW0tc2VsZWN0ZWRdPVwiYWN0aXZlXCIgW21hdFRvb2x0aXBdPVwidG9vbHRpcFwiIG1hdFRvb2x0aXBDbGFzcz1cIm1lbnVncm91cC10b29sdGlwXCJcbiAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCIgW21hdFRvb2x0aXBTaG93RGVsYXldPVwic2lkZW5hdk9wZW5lZD81MDA6MFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2E+XG4gIDwvbmctY29udGFpbmVyPlxuXG5cbiAgPGRpdiBjbGFzcz1cIm8tYXBwLXNpZGVuYXYtbWVudWdyb3VwLWl0ZW1zLWNvbnRhaW5lclwiPlxuICAgIDx1bCBbQGNvbnRlbnRFeHBhbnNpb25dPVwiY29udGVudEV4cGFuc2lvblwiIGNsYXNzPVwiby1hcHAtc2lkZW5hdi1tZW51Z3JvdXAtdWxcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1lbnVJdGVtIG9mIG1lbnVHcm91cC5pdGVtc1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXBwTWVudVNlcnZpY2UuaXNWaXNpYmxlKG1lbnVJdGVtKVwiPlxuICAgICAgICAgIDxvLWFwcC1zaWRlbmF2LW1lbnUtaXRlbSBbc2lkZW5hdi1vcGVuZWRdPVwic2lkZW5hdk9wZW5lZFwiICpuZ0lmPVwiIW1lbnVJdGVtLml0ZW1zOyBlbHNlIG1lbnVHcm91cFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbbWVudS1pdGVtXT1cIm1lbnVJdGVtXCIgW21lbnUtaXRlbS10eXBlXT1cImFwcE1lbnVTZXJ2aWNlLmdldE1lbnVJdGVtVHlwZShtZW51SXRlbSlcIiAob25DbGljayk9XCJvbk1lbnVJdGVtQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgIDwvby1hcHAtc2lkZW5hdi1tZW51LWl0ZW0+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNtZW51R3JvdXA+XG4gICAgICAgICAgICA8by1hcHAtc2lkZW5hdi1tZW51LWdyb3VwIFttZW51LWdyb3VwXT1cIm1lbnVJdGVtXCIgW3NpZGVuYXYtb3BlbmVkXT1cInNpZGVuYXZPcGVuZWRcIiBbbGV2ZWxdPVwibGV2ZWwgKyAxXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJhcHBNZW51U2VydmljZS5nZXRNZW51SXRlbVR5cGUobWVudUl0ZW0pID09PSAnZ3JvdXAnXCIgKG9uSXRlbUNsaWNrKT1cIm9uTWVudUl0ZW1DbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L28tYXBwLXNpZGVuYXYtbWVudS1ncm91cD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbm9Ub29sdGlwPlxuICA8YSBtYXQtYnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJvLWFwcC1zaWRlbmF2LWl0ZW0gby1hcHAtc2lkZW5hdi1tZW51Z3JvdXBcIiBbY2xhc3Mub3BlbmVkXT1cIm1lbnVHcm91cC5vcGVuZWRcIiAoY2xpY2spPVwib25DbGljaygpXCJcbiAgICBbY2xhc3Muby1hcHAtc2lkZW5hdi12aWV3ZXItc2lkZW5hdi1pdGVtLXNlbGVjdGVkXT1cImFjdGl2ZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50QnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gIDwvYT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29udGVudEJ1dHRvbj5cbiAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeEZpbGw+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNpZGVuYXZPcGVuZWRcIj5cbiAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm1lbnVHcm91cC5zdmdJY29uXCIgW3N2Z0ljb25dPVwibWVudUdyb3VwLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwibWVudUdyb3VwLmljb25cIj57eyBtZW51R3JvdXAuaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cIm8tYXBwLXNpZGVuYXYtbWVudWdyb3VwLXRpdGxlXCI+e3sgbWVudUdyb3VwLm5hbWUgfCBvVHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJmaWxsLXJlbWFpbmluZ1wiPjwvc3Bhbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhcHBNZW51U2VydmljZS5pc01lbnVHcm91cFJvdXRlKG1lbnVHcm91cCkgJiYgbWVudUdyb3VwLm9wZW5lZDsgZWxzZSBhcnJvd01lbnVHcm91cFRlbXBsYXRlXCI+XG4gICAgICAgIDxtYXQtaWNvbiBbaWRdPVwiJ2Fycm93X2ljb25fJyArIG1lbnVHcm91cC5pZFwiIGNsYXNzPVwiby1hcHAtc2lkZW5hdi1tZW51Z3JvdXAtYXJyb3dcIiBzdmdJY29uPVwib250aW1pemU6a2V5Ym9hcmRfYXJyb3dfcmlnaHRcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJ0b2dnbGUoJGV2ZW50KVwiPjwvbWF0LWljb24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjYXJyb3dNZW51R3JvdXBUZW1wbGF0ZT5cbiAgICAgICAgPG1hdC1pY29uIFtpZF09XCInYXJyb3dfaWNvbl8nICsgbWVudUdyb3VwLmlkXCIgY2xhc3M9XCJvLWFwcC1zaWRlbmF2LW1lbnVncm91cC1hcnJvd1wiIHN2Z0ljb249XCJvbnRpbWl6ZTprZXlib2FyZF9hcnJvd19yaWdodFwiPjwvbWF0LWljb24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2lkZW5hdk9wZW5lZFwiPlxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwibWVudUdyb3VwLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJtZW51R3JvdXAuc3ZnSWNvblwiPjwvbWF0LWljb24+IDxtYXQtaWNvbiAqbmdJZj1cIm1lbnVHcm91cC5pY29uXCI+e3sgbWVudUdyb3VwLmljb24gfX08L21hdC1pY29uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -59,13 +59,26 @@ export class OAppSidenavMenuItemComponent {
59
59
  this.parsePermissions();
60
60
  this.active = this.appMenuService.isItemActive(this.menuItem);
61
61
  }
62
+ get shouldShowTooltip() {
63
+ switch (this.oAppLayoutComponent.tooltipDisplayMode) {
64
+ case 'always':
65
+ return true;
66
+ case 'never':
67
+ return false;
68
+ case 'only-collapsed':
69
+ return !this.sidenavOpened;
70
+ case 'only-expanded':
71
+ return this.sidenavOpened;
72
+ default:
73
+ return false;
74
+ }
75
+ }
62
76
  ngAfterViewInit() {
63
77
  if (this.isUserInfoItem() && this.sidenav) {
64
78
  this.setUserInfoImage();
65
79
  this.appSidenavToggleSubscription.add(this.sidenav.onSidenavOpenedChange.subscribe(() => {
66
80
  if (this.sidenav.sidenav.opened) {
67
81
  this.setUserInfoImage();
68
- this.setUserInfoImage();
69
82
  }
70
83
  }));
71
84
  this.userInfoSubscription = this.oUserInfoService.getUserInfoObservable().subscribe(res => {
@@ -210,7 +223,7 @@ export class OAppSidenavMenuItemComponent {
210
223
  }
211
224
  }
212
225
  OAppSidenavMenuItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OAppSidenavMenuItemComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
213
- OAppSidenavMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OAppSidenavMenuItemComponent, selector: "o-app-sidenav-menu-item", inputs: { menuItem: ["menu-item", "menuItem"], menuItemType: ["menu-item-type", "menuItemType"], sidenavOpened: ["sidenav-opened", "sidenavOpened"], disabled: "disabled" }, outputs: { onClick: "onClick" }, host: { properties: { "class": "getClass()", "attr.disabled": "disabled" } }, ngImport: i0, template: "<ng-container *ngIf=\"sidenavOpened\">\n <li *ngIf=\"!hidden\" class=\"o-app-sidenav-menuitem o-app-sidenav-item\" [class.o-user-info]=\"isUserInfoItem()\" [id]=\"menuItem.id\">\n\n <a mat-button *ngIf=\"!isUserInfoItem() && !isLocaleItem()\" (click)=\"triggerClick($event)\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <mat-icon *ngIf=\"menuItem.svgIcon\" [svgIcon]=\"menuItem.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuItem.icon\">{{ menuItem.icon }}</mat-icon>\n <span class=\"o-app-sidenav-menuitem-title\">{{ menuItem.name | oTranslate }}</span>\n </div>\n </a>\n\n <a mat-button *ngIf=\"isLocaleItem()\" (click)=\"triggerClick($event)\">\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n <mat-icon *ngIf=\"menuItem.svgIcon\" [svgIcon]=\"menuItem.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuItem.icon\">{{ menuItem.icon }}</mat-icon>\n {{ menuItem.name | oTranslate }}\n <mat-icon *ngIf=\"isConfiguredLang()\" class=\"configured-lang\">check_circle</mat-icon>\n </div>\n </a>\n\n <div *ngIf=\"isUserInfoItem()\" fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"o-user-info-menu-item\">\n <div class=\"o-user-info-image\" fxFlexFill></div>\n <div class=\"o-user-info-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxFlexFill>\n <div class=\"o-user-info-name\">{{ menuItem.user }} </div>\n <o-language-selector [use-flag-icons]=\"useFlagIcons\"></o-language-selector>\n </div>\n </div>\n </li>\n</ng-container>\n\n<ng-container *ngIf=\"!sidenavOpened\">\n <li *ngIf=\"!hidden\" class=\"o-app-sidenav-menuitem o-app-sidenav-item\">\n <a [matTooltip]=\"tooltip\" matTooltipClass=\"menuitem-tooltip\" matTooltipPosition=\"right\" mat-button (click)=\"triggerClick($event)\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <mat-icon *ngIf=\"menuItem.svgIcon\" [svgIcon]=\"menuItem.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuItem.icon\">{{ menuItem.icon }}</mat-icon>\n </a>\n </li>\n</ng-container>\n", styles: [".o-app-sidenav-menu-item .o-user-info-menu-item{cursor:default}.o-app-sidenav-menu-item .o-user-info-menu-item .o-user-info-image{background-repeat:no-repeat;background-position:center;background-size:cover;width:100%;height:200px!important}.o-app-sidenav-menu-item .o-user-info-menu-item .o-user-info-item{padding:0 8px 0 16px}.o-app-sidenav-menu-item .o-user-info-menu-item .o-user-info-name{text-transform:uppercase;font-weight:600}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i3.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i6.OLanguageSelectorComponent, selector: "o-language-selector", inputs: ["use-flag-icons"], outputs: ["onChange"] }, { kind: "pipe", type: i7.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
226
+ OAppSidenavMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OAppSidenavMenuItemComponent, selector: "o-app-sidenav-menu-item", inputs: { menuItem: ["menu-item", "menuItem"], menuItemType: ["menu-item-type", "menuItemType"], sidenavOpened: ["sidenav-opened", "sidenavOpened"], disabled: "disabled" }, outputs: { onClick: "onClick" }, host: { properties: { "class": "getClass()", "attr.disabled": "disabled" } }, ngImport: i0, template: "<ng-container *ngIf=\"sidenavOpened\">\n <ng-container *ngIf=\"shouldShowTooltip; else noTooltipOpened\">\n <li *ngIf=\"!hidden\" class=\"o-app-sidenav-menuitem o-app-sidenav-item\" [matTooltip]=\"tooltip\" matTooltipClass=\"menugroup-tooltip\"\n matTooltipPosition=\"right\" matTooltipShowDelay=\"500\" [class.o-user-info]=\"isUserInfoItem()\" [id]=\"menuItem.id\">\n <ng-container *ngTemplateOutlet=\"contentOpened\"></ng-container>\n </li>\n </ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"!sidenavOpened\">\n <li *ngIf=\"!hidden\" class=\"o-app-sidenav-menuitem o-app-sidenav-item\">\n <ng-container *ngIf=\"shouldShowTooltip; else noTooltipClosed\">\n\n <a [matTooltip]=\"tooltip\" matTooltipClass=\"menuitem-tooltip\" matTooltipPosition=\"right\" mat-button (click)=\"triggerClick($event)\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <mat-icon *ngIf=\"menuItem.svgIcon\" [svgIcon]=\"menuItem.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuItem.icon\">{{ menuItem.icon }}</mat-icon>\n </a>\n </ng-container>\n <ng-template #noTooltipClosed>\n <a mat-button (click)=\"triggerClick($event)\" [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <mat-icon *ngIf=\"menuItem.svgIcon\" [svgIcon]=\"menuItem.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuItem.icon\">{{ menuItem.icon }}</mat-icon>\n </a>\n </ng-template>\n </li>\n</ng-container>\n\n<ng-template #noTooltipOpened>\n <li *ngIf=\"!hidden\" class=\"o-app-sidenav-menuitem o-app-sidenav-item\" [class.o-user-info]=\"isUserInfoItem()\" [id]=\"menuItem.id\">\n <ng-container *ngTemplateOutlet=\"contentOpened\"></ng-container>\n </li>\n</ng-template>\n\n<ng-template #contentOpened>\n <a mat-button *ngIf=\"!isUserInfoItem() && !isLocaleItem()\" (click)=\"triggerClick($event)\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <mat-icon *ngIf=\"menuItem.svgIcon\" [svgIcon]=\"menuItem.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuItem.icon\">{{ menuItem.icon }}</mat-icon>\n <span class=\"o-app-sidenav-menuitem-title\">{{\n menuItem.name | oTranslate\n }}</span>\n </div>\n </a>\n\n <a mat-button *ngIf=\"isLocaleItem()\" (click)=\"triggerClick($event)\">\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n <mat-icon *ngIf=\"menuItem.svgIcon\" [svgIcon]=\"menuItem.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuItem.icon\">{{ menuItem.icon }}</mat-icon>\n {{ menuItem.name | oTranslate }}\n <mat-icon *ngIf=\"isConfiguredLang()\" class=\"configured-lang\">check_circle</mat-icon>\n </div>\n </a>\n\n <div *ngIf=\"isUserInfoItem()\" fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"o-user-info-menu-item\">\n <div class=\"o-user-info-image\" fxFlexFill></div>\n <div class=\"o-user-info-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxFlexFill>\n <div class=\"o-user-info-name\">{{ menuItem.user }}</div>\n <o-language-selector [use-flag-icons]=\"useFlagIcons\"></o-language-selector>\n </div>\n </div>\n</ng-template>\n", styles: [".o-app-sidenav-menu-item .o-user-info-menu-item{cursor:default}.o-app-sidenav-menu-item .o-user-info-menu-item .o-user-info-image{background-repeat:no-repeat;background-position:center;background-size:cover;width:100%;height:200px!important}.o-app-sidenav-menu-item .o-user-info-menu-item .o-user-info-item{padding:0 8px 0 16px}.o-app-sidenav-menu-item .o-user-info-menu-item .o-user-info-name{text-transform:uppercase;font-weight:600}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i3.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i6.OLanguageSelectorComponent, selector: "o-language-selector", inputs: ["use-flag-icons"], outputs: ["onChange"] }, { kind: "pipe", type: i7.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
214
227
  __decorate([
215
228
  BooleanInputConverter(),
216
229
  __metadata("design:type", Boolean)
@@ -224,6 +237,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
224
237
  args: [{ selector: 'o-app-sidenav-menu-item', inputs: DEFAULT_INPUTS_O_APP_SIDENAV_MENU_ITEM, outputs: DEFAULT_OUTPUTS_O_APP_SIDENAV_MENU_ITEM, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
225
238
  '[class]': 'getClass()',
226
239
  '[attr.disabled]': 'disabled'
227
- }, template: "<ng-container *ngIf=\"sidenavOpened\">\n <li *ngIf=\"!hidden\" class=\"o-app-sidenav-menuitem o-app-sidenav-item\" [class.o-user-info]=\"isUserInfoItem()\" [id]=\"menuItem.id\">\n\n <a mat-button *ngIf=\"!isUserInfoItem() && !isLocaleItem()\" (click)=\"triggerClick($event)\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <mat-icon *ngIf=\"menuItem.svgIcon\" [svgIcon]=\"menuItem.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuItem.icon\">{{ menuItem.icon }}</mat-icon>\n <span class=\"o-app-sidenav-menuitem-title\">{{ menuItem.name | oTranslate }}</span>\n </div>\n </a>\n\n <a mat-button *ngIf=\"isLocaleItem()\" (click)=\"triggerClick($event)\">\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n <mat-icon *ngIf=\"menuItem.svgIcon\" [svgIcon]=\"menuItem.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuItem.icon\">{{ menuItem.icon }}</mat-icon>\n {{ menuItem.name | oTranslate }}\n <mat-icon *ngIf=\"isConfiguredLang()\" class=\"configured-lang\">check_circle</mat-icon>\n </div>\n </a>\n\n <div *ngIf=\"isUserInfoItem()\" fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"o-user-info-menu-item\">\n <div class=\"o-user-info-image\" fxFlexFill></div>\n <div class=\"o-user-info-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxFlexFill>\n <div class=\"o-user-info-name\">{{ menuItem.user }} </div>\n <o-language-selector [use-flag-icons]=\"useFlagIcons\"></o-language-selector>\n </div>\n </div>\n </li>\n</ng-container>\n\n<ng-container *ngIf=\"!sidenavOpened\">\n <li *ngIf=\"!hidden\" class=\"o-app-sidenav-menuitem o-app-sidenav-item\">\n <a [matTooltip]=\"tooltip\" matTooltipClass=\"menuitem-tooltip\" matTooltipPosition=\"right\" mat-button (click)=\"triggerClick($event)\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <mat-icon *ngIf=\"menuItem.svgIcon\" [svgIcon]=\"menuItem.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuItem.icon\">{{ menuItem.icon }}</mat-icon>\n </a>\n </li>\n</ng-container>\n", styles: [".o-app-sidenav-menu-item .o-user-info-menu-item{cursor:default}.o-app-sidenav-menu-item .o-user-info-menu-item .o-user-info-image{background-repeat:no-repeat;background-position:center;background-size:cover;width:100%;height:200px!important}.o-app-sidenav-menu-item .o-user-info-menu-item .o-user-info-item{padding:0 8px 0 16px}.o-app-sidenav-menu-item .o-user-info-menu-item .o-user-info-name{text-transform:uppercase;font-weight:600}\n"] }]
240
+ }, template: "<ng-container *ngIf=\"sidenavOpened\">\n <ng-container *ngIf=\"shouldShowTooltip; else noTooltipOpened\">\n <li *ngIf=\"!hidden\" class=\"o-app-sidenav-menuitem o-app-sidenav-item\" [matTooltip]=\"tooltip\" matTooltipClass=\"menugroup-tooltip\"\n matTooltipPosition=\"right\" matTooltipShowDelay=\"500\" [class.o-user-info]=\"isUserInfoItem()\" [id]=\"menuItem.id\">\n <ng-container *ngTemplateOutlet=\"contentOpened\"></ng-container>\n </li>\n </ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"!sidenavOpened\">\n <li *ngIf=\"!hidden\" class=\"o-app-sidenav-menuitem o-app-sidenav-item\">\n <ng-container *ngIf=\"shouldShowTooltip; else noTooltipClosed\">\n\n <a [matTooltip]=\"tooltip\" matTooltipClass=\"menuitem-tooltip\" matTooltipPosition=\"right\" mat-button (click)=\"triggerClick($event)\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <mat-icon *ngIf=\"menuItem.svgIcon\" [svgIcon]=\"menuItem.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuItem.icon\">{{ menuItem.icon }}</mat-icon>\n </a>\n </ng-container>\n <ng-template #noTooltipClosed>\n <a mat-button (click)=\"triggerClick($event)\" [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <mat-icon *ngIf=\"menuItem.svgIcon\" [svgIcon]=\"menuItem.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuItem.icon\">{{ menuItem.icon }}</mat-icon>\n </a>\n </ng-template>\n </li>\n</ng-container>\n\n<ng-template #noTooltipOpened>\n <li *ngIf=\"!hidden\" class=\"o-app-sidenav-menuitem o-app-sidenav-item\" [class.o-user-info]=\"isUserInfoItem()\" [id]=\"menuItem.id\">\n <ng-container *ngTemplateOutlet=\"contentOpened\"></ng-container>\n </li>\n</ng-template>\n\n<ng-template #contentOpened>\n <a mat-button *ngIf=\"!isUserInfoItem() && !isLocaleItem()\" (click)=\"triggerClick($event)\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <mat-icon *ngIf=\"menuItem.svgIcon\" [svgIcon]=\"menuItem.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuItem.icon\">{{ menuItem.icon }}</mat-icon>\n <span class=\"o-app-sidenav-menuitem-title\">{{\n menuItem.name | oTranslate\n }}</span>\n </div>\n </a>\n\n <a mat-button *ngIf=\"isLocaleItem()\" (click)=\"triggerClick($event)\">\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n <mat-icon *ngIf=\"menuItem.svgIcon\" [svgIcon]=\"menuItem.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuItem.icon\">{{ menuItem.icon }}</mat-icon>\n {{ menuItem.name | oTranslate }}\n <mat-icon *ngIf=\"isConfiguredLang()\" class=\"configured-lang\">check_circle</mat-icon>\n </div>\n </a>\n\n <div *ngIf=\"isUserInfoItem()\" fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"o-user-info-menu-item\">\n <div class=\"o-user-info-image\" fxFlexFill></div>\n <div class=\"o-user-info-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxFlexFill>\n <div class=\"o-user-info-name\">{{ menuItem.user }}</div>\n <o-language-selector [use-flag-icons]=\"useFlagIcons\"></o-language-selector>\n </div>\n </div>\n</ng-template>\n", styles: [".o-app-sidenav-menu-item .o-user-info-menu-item{cursor:default}.o-app-sidenav-menu-item .o-user-info-menu-item .o-user-info-image{background-repeat:no-repeat;background-position:center;background-size:cover;width:100%;height:200px!important}.o-app-sidenav-menu-item .o-user-info-menu-item .o-user-info-item{padding:0 8px 0 16px}.o-app-sidenav-menu-item .o-user-info-menu-item .o-user-info-name{text-transform:uppercase;font-weight:600}\n"] }]
228
241
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { sidenavOpened: [], disabled: [] } });
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hcHAtc2lkZW5hdi1tZW51LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXNpZGVuYXYvbWVudS1pdGVtL28tYXBwLXNpZGVuYXYtbWVudS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2FwcC1zaWRlbmF2L21lbnUtaXRlbS9vLWFwcC1zaWRlbmF2LW1lbnUtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUlSLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFF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QyxpQkFHakMsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSixTQUFTLEVBQUUsWUFBWTt3QkFDdkIsaUJBQWlCLEVBQUUsVUFBVTtxQkFDOUI7d0pBb0JELGFBQWEsTUFFYixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUeXBlLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgTWVudUl0ZW1BY3Rpb24sIE1lbnVJdGVtTG9jYWxlLCBNZW51SXRlbUxvZ291dCwgTWVudUl0ZW1Sb3V0ZSwgTWVudUl0ZW1Vc2VySW5mbyB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvYXBwLW1lbnUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFwcE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXBwLW1lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1VzZXJJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL28tdXNlci1pbmZvLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBPVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS9vLXRyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9QZXJtaXNzaW9ucyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL28tcGVybWlzc2lvbnMudHlwZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1V0aWxzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9BcHBTaWRlbmF2QmFzZSB9IGZyb20gJy4uL28tYXBwLXNpZGVuYXYtYmFzZS5jbGFzcyc7XG5pbXBvcnQgeyBPQXBwTGF5b3V0QmFzZSB9IGZyb20gJy4uLy4uLy4uL2xheW91dHMvYXBwLWxheW91dC9vLWFwcC1sYXlvdXQtYmFzZS5jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0FQUF9TSURFTkFWX01FTlVfSVRFTSA9IFtcbiAgJ21lbnVJdGVtIDogbWVudS1pdGVtJyxcbiAgJ21lbnVJdGVtVHlwZSA6IG1lbnUtaXRlbS10eXBlJyxcbiAgJ3NpZGVuYXZPcGVuZWQgOiBzaWRlbmF2LW9wZW5lZCcsXG4gICdkaXNhYmxlZCdcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19BUFBfU0lERU5BVl9NRU5VX0lURU0gPSBbXG4gICdvbkNsaWNrJ1xuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby1hcHAtc2lkZW5hdi1tZW51LWl0ZW0nLFxuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fQVBQX1NJREVOQVZfTUVOVV9JVEVNLFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19BUFBfU0lERU5BVl9NRU5VX0lURU0sXG4gIHRlbXBsYXRlVXJsOiAnLi9vLWFwcC1zaWRlbmF2LW1lbnUtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL28tYXBwLXNpZGVuYXYtbWVudS1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzc10nOiAnZ2V0Q2xhc3MoKScsXG4gICAgJ1thdHRyLmRpc2FibGVkXSc6ICdkaXNhYmxlZCdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBPQXBwU2lkZW5hdk1lbnVJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIHB1YmxpYyBvbkNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBPVHJhbnNsYXRlU2VydmljZTtcbiAgcHJvdGVjdGVkIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZTtcbiAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2U7XG4gIHByb3RlY3RlZCBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZTtcbiAgcHJvdGVjdGVkIG9Vc2VySW5mb1NlcnZpY2U6IE9Vc2VySW5mb1NlcnZpY2U7XG4gIHByb3RlY3RlZCBhcHBNZW51U2VydmljZTogQXBwTWVudVNlcnZpY2U7XG4gIHByb3RlY3RlZCB1c2VySW5mb1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByb3RlY3RlZCBzaWRlbmF2OiBPQXBwU2lkZW5hdkJhc2U7XG4gIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcjtcblxuICBtZW51SXRlbTogYW55OyAvLyBUT0RPIE1lbnVSb290SXRlbTtcbiAgbWVudUl0ZW1UeXBlOiBzdHJpbmc7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaWRlbmF2T3BlbmVkOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGFwcFNpZGVuYXZUb2dnbGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJvdGVjdGVkIHJvdXRlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgb0FwcExheW91dENvbXBvbmVudDogT0FwcExheW91dEJhc2U7XG5cbiAgcHJvdGVjdGVkIHBlcm1pc3Npb25zOiBPUGVybWlzc2lvbnM7XG4gIHByb3RlY3RlZCBtdXRhdGlvbk9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuXG4gIGhpZGRlbjogYm9vbGVhbjtcbiAgYWN0aXZlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8T1RyYW5zbGF0ZVNlcnZpY2U+KE9UcmFuc2xhdGVTZXJ2aWNlIGFzIFR5cGU8T1RyYW5zbGF0ZVNlcnZpY2U+KTtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8QXV0aFNlcnZpY2U+KEF1dGhTZXJ2aWNlIGFzIFR5cGU8QXV0aFNlcnZpY2U+KTtcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxEaWFsb2dTZXJ2aWNlPihEaWFsb2dTZXJ2aWNlIGFzIFR5cGU8RGlhbG9nU2VydmljZT4pO1xuICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8UGVybWlzc2lvbnNTZXJ2aWNlPihQZXJtaXNzaW9uc1NlcnZpY2UgYXMgVHlwZTxQZXJtaXNzaW9uc1NlcnZpY2U+KTtcbiAgICB0aGlzLm9Vc2VySW5mb1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxPVXNlckluZm9TZXJ2aWNlPihPVXNlckluZm9TZXJ2aWNlIGFzIFR5cGU8T1VzZXJJbmZvU2VydmljZT4pO1xuICAgIHRoaXMuc2lkZW5hdiA9IHRoaXMuaW5qZWN0b3IuZ2V0PE9BcHBTaWRlbmF2QmFzZT4oT0FwcFNpZGVuYXZCYXNlIGFzIFR5cGU8T0FwcFNpZGVuYXZCYXNlPik7XG4gICAgdGhpcy5vQXBwTGF5b3V0Q29tcG9uZW50ID0gdGhpcy5pbmplY3Rvci5nZXQ8T0FwcExheW91dEJhc2U+KE9BcHBMYXlvdXRCYXNlIGFzIFR5cGU8T0FwcExheW91dEJhc2U+KTtcbiAgICB0aGlzLnJvdXRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0PFJvdXRlcj4oUm91dGVyIGFzIFR5cGU8Um91dGVyPik7XG4gICAgdGhpcy5hcHBNZW51U2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PEFwcE1lbnVTZXJ2aWNlPihBcHBNZW51U2VydmljZSBhcyBUeXBlPEFwcE1lbnVTZXJ2aWNlPik7XG5cbiAgICB0aGlzLnJvdXRlclN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kICYmIHRoaXMuYXBwTWVudVNlcnZpY2UuaXNSb3V0ZUl0ZW0odGhpcy5tZW51SXRlbSkpIHtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0aGlzLmFwcE1lbnVTZXJ2aWNlLmlzSXRlbUFjdGl2ZSh0aGlzLm1lbnVJdGVtIGFzIE1lbnVJdGVtUm91dGUpO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucGFyc2VQZXJtaXNzaW9ucygpO1xuICAgIHRoaXMuYWN0aXZlID0gdGhpcy5hcHBNZW51U2VydmljZS5pc0l0ZW1BY3RpdmUodGhpcy5tZW51SXRlbSBhcyBNZW51SXRlbVJvdXRlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5pc1VzZXJJbmZvSXRlbSgpICYmIHRoaXMuc2lkZW5hdikge1xuICAgICAgdGhpcy5zZXRVc2VySW5mb0ltYWdlKCk7XG4gICAgICB0aGlzLmFwcFNpZGVuYXZUb2dnbGVTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2lkZW5hdi5vblNpZGVuYXZPcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2lkZW5hdi5zaWRlbmF2Lm9wZW5lZCkge1xuICAgICAgICAgIHRoaXMuc2V0VXNlckluZm9JbWFnZSgpO1xuICAgICAgICAgIHRoaXMuc2V0VXNlckluZm9JbWFnZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICB0aGlzLnVzZXJJbmZvU3Vic2NyaXB0aW9uID0gdGhpcy5vVXNlckluZm9TZXJ2aWNlLmdldFVzZXJJbmZvT2JzZXJ2YWJsZSgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQocmVzLmF2YXRhcikgJiYgdGhpcy5zaWRlbmF2LnNpZGVuYXYub3BlbmVkKSB7XG4gICAgICAgICAgKHRoaXMubWVudUl0ZW0gYXMgTWVudUl0ZW1Vc2VySW5mbykuYXZhdGFyID0gcmVzLmF2YXRhcjtcbiAgICAgICAgICB0aGlzLnNldFVzZXJJbmZvSW1hZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuYXBwU2lkZW5hdlRvZ2dsZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5hcHBTaWRlbmF2VG9nZ2xlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJvdXRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubXV0YXRpb25PYnNlcnZlcikge1xuICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlckluZm9TdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudXNlckluZm9TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VQZXJtaXNzaW9ucygpIHtcbiAgICAvLyBpZiBvYXR0ciBpbiBmb3JtLCBpdCBjYW4gaGF2ZSBwZXJtaXNzaW9uc1xuICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRNZW51UGVybWlzc2lvbnModGhpcy5tZW51SXRlbS5pZCk7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLnBlcm1pc3Npb25zKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhpZGRlbiA9IHRoaXMucGVybWlzc2lvbnMudmlzaWJsZSA9PT0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAvLyBpZiB0aGUgZGlzYWJsZWQgaW5wdXQgaXMgdHJ1ZSBpdCBtZWFucyB0aGF0IGl0cyBwYXJlbnQgaXMgZGlzYWJsZWQgdXNpbmcgcGVybWlzc2lvbnNcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLnBlcm1pc3Npb25zLmVuYWJsZWQgPT09IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIgPSBQZXJtaXNzaW9uc1V0aWxzLnJlZ2lzdGVyRGlzYWJsZWRDaGFuZ2VzSW5Eb20odGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgIGNoZWNrU3RyaW5nVmFsdWU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRVc2VySW5mb0ltYWdlKCkge1xuICAgIGNvbnN0IGltZ0VsID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ28tdXNlci1pbmZvLWltYWdlJylbMF07XG4gICAgaWYgKGltZ0VsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLm1lbnVJdGVtIGFzIE1lbnVJdGVtVXNlckluZm87XG4gICAgICBpbWdFbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2JhY2tncm91bmQtaW1hZ2U6IHVybChcXCcnICsgaXRlbS5hdmF0YXIgKyAnXFwnKScpO1xuICAgIH1cbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGV4ZWN1dGVJdGVtQWN0aW9uKCkge1xuICAgIGNvbnN0IGFjdGlvbkl0ZW0gPSAodGhpcy5tZW51SXRlbSBhcyBNZW51SXRlbUFjdGlvbik7XG4gICAgaWYgKFV0aWwucGFyc2VCb29sZWFuKGFjdGlvbkl0ZW0uY29uZmlybSwgZmFsc2UpKSB7XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybSgnQ09ORklSTScsIGFjdGlvbkl0ZW0uY29uZmlybVRleHQgfHwgJ01FU1NBR0VTLkNPTkZJUk1fQUNUSU9OJykudGhlbihyZXN1bHQgPT4gcmVzdWx0ID8gYWN0aW9uSXRlbS5hY3Rpb24oKSA6IG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3Rpb25JdGVtLmFjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpZ3VyZUkxOG4oKSB7XG4gICAgY29uc3QgbG9jYWxlSXRlbSA9ICh0aGlzLm1lbnVJdGVtIGFzIE1lbnVJdGVtTG9jYWxlKTtcbiAgICBpZiAodGhpcy5pc0NvbmZpZ3VyZWRMYW5nKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZSkge1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShsb2NhbGVJdGVtLmxvY2FsZSk7XG4gICAgfVxuICB9XG5cbiAgaXNDb25maWd1cmVkTGFuZygpIHtcbiAgICBjb25zdCBsb2NhbGVJdGVtID0gKHRoaXMubWVudUl0ZW0gYXMgTWVudUl0ZW1Mb2NhbGUpO1xuICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UpIHtcbiAgICAgIHJldHVybiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldEN1cnJlbnRMYW5nKCkgPT09IGxvY2FsZUl0ZW0ubG9jYWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbG9nb3V0KCkge1xuICAgIGNvbnN0IG1lbnVJdGVtID0gKHRoaXMubWVudUl0ZW0gYXMgTWVudUl0ZW1Mb2dvdXQpO1xuICAgIGlmIChVdGlsLnBhcnNlQm9vbGVhbihtZW51SXRlbS5jb25maXJtLCB0cnVlKSkge1xuICAgICAgdGhpcy5hdXRoU2VydmljZS5sb2dvdXRXaXRoQ29uZmlybWF0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UubG9nb3V0KCk7XG4gICAgfVxuICB9XG5cbiAgbmF2aWdhdGUoKSB7XG4gICAgY29uc3Qgcm91dGUgPSAodGhpcy5tZW51SXRlbSBhcyBNZW51SXRlbVJvdXRlKS5yb3V0ZTtcbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsICE9PSByb3V0ZSkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3JvdXRlXSk7XG4gICAgfVxuICB9XG5cbiAgdHJpZ2dlckNsaWNrKGU6IEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hcHBNZW51U2VydmljZS5vbkNsaWNrLm5leHQoKTtcblxuICAgIHN3aXRjaCAodGhpcy5tZW51SXRlbVR5cGUpIHtcbiAgICAgIGNhc2UgJ2FjdGlvbic6XG4gICAgICAgIHRoaXMuZXhlY3V0ZUl0ZW1BY3Rpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsb2NhbGUnOlxuICAgICAgICB0aGlzLmNvbmZpZ3VyZUkxOG4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsb2dvdXQnOlxuICAgICAgICB0aGlzLmxvZ291dCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh0aGlzLmFwcE1lbnVTZXJ2aWNlLmlzUm91dGVJdGVtKHRoaXMubWVudUl0ZW0pKSB7XG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLm9uQ2xpY2suZW1pdChlKTtcbiAgfVxuXG5cblxuICBpc0FjdGlvbkl0ZW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWVudUl0ZW1UeXBlID09PSAnYWN0aW9uJztcbiAgfVxuXG4gIGlzTG9jYWxlSXRlbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tZW51SXRlbVR5cGUgPT09ICdsb2NhbGUnO1xuICB9XG5cbiAgaXNMb2dvdXRJdGVtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1lbnVJdGVtVHlwZSA9PT0gJ2xvZ291dCc7XG4gIH1cblxuICBpc1VzZXJJbmZvSXRlbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tZW51SXRlbVR5cGUgPT09ICd1c2VyLWluZm8nO1xuICB9XG5cbiAgaXNEZWZhdWx0SXRlbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tZW51SXRlbVR5cGUgPT09ICdkZWZhdWx0JztcbiAgfVxuXG4gIGdldCB1c2VGbGFnSWNvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub0FwcExheW91dENvbXBvbmVudCAmJiB0aGlzLm9BcHBMYXlvdXRDb21wb25lbnQudXNlRmxhZ0ljb25zO1xuICB9XG5cbiAgZ2V0IHRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh0aGlzLm1lbnVJdGVtLm5hbWUpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLm1lbnVJdGVtLnRvb2x0aXApKSB7XG4gICAgICByZXN1bHQgKz0gJzogJyArIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQodGhpcy5tZW51SXRlbS50b29sdGlwKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldENsYXNzKCkge1xuICAgIGxldCBjbGFzc05hbWUgPSAnby1hcHAtc2lkZW5hdi1tZW51LWl0ZW0nO1xuICAgIGlmICh0aGlzLm1lbnVJdGVtLmNsYXNzKSB7XG4gICAgICBjbGFzc05hbWUgKz0gJyAnICsgdGhpcy5tZW51SXRlbS5jbGFzcztcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwic2lkZW5hdk9wZW5lZFwiPlxuICA8bGkgKm5nSWY9XCIhaGlkZGVuXCIgY2xhc3M9XCJvLWFwcC1zaWRlbmF2LW1lbnVpdGVtIG8tYXBwLXNpZGVuYXYtaXRlbVwiIFtjbGFzcy5vLXVzZXItaW5mb109XCJpc1VzZXJJbmZvSXRlbSgpXCIgW2lkXT1cIm1lbnVJdGVtLmlkXCI+XG5cbiAgICA8YSBtYXQtYnV0dG9uICpuZ0lmPVwiIWlzVXNlckluZm9JdGVtKCkgJiYgIWlzTG9jYWxlSXRlbSgpXCIgKGNsaWNrKT1cInRyaWdnZXJDbGljaygkZXZlbnQpXCJcbiAgICAgIFtjbGFzcy5vLWFwcC1zaWRlbmF2LXZpZXdlci1zaWRlbmF2LWl0ZW0tc2VsZWN0ZWRdPVwiYWN0aXZlXCI+XG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJtZW51SXRlbS5zdmdJY29uXCIgW3N2Z0ljb25dPVwibWVudUl0ZW0uc3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm1lbnVJdGVtLmljb25cIj57eyBtZW51SXRlbS5pY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJvLWFwcC1zaWRlbmF2LW1lbnVpdGVtLXRpdGxlXCI+e3sgbWVudUl0ZW0ubmFtZSB8IG9UcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG5cbiAgICA8YSBtYXQtYnV0dG9uICpuZ0lmPVwiaXNMb2NhbGVJdGVtKClcIiAoY2xpY2spPVwidHJpZ2dlckNsaWNrKCRldmVudClcIj5cbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwibWVudUl0ZW0uc3ZnSWNvblwiIFtzdmdJY29uXT1cIm1lbnVJdGVtLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJtZW51SXRlbS5pY29uXCI+e3sgbWVudUl0ZW0uaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgIHt7IG1lbnVJdGVtLm5hbWUgfCBvVHJhbnNsYXRlIH19XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImlzQ29uZmlndXJlZExhbmcoKVwiIGNsYXNzPVwiY29uZmlndXJlZC1sYW5nXCI+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cblxuICAgIDxkaXYgKm5nSWY9XCJpc1VzZXJJbmZvSXRlbSgpXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwiby11c2VyLWluZm8tbWVudS1pdGVtXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiby11c2VyLWluZm8taW1hZ2VcIiBmeEZsZXhGaWxsPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm8tdXNlci1pbmZvLWl0ZW1cIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGZ4RmxleEZpbGw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXVzZXItaW5mby1uYW1lXCI+e3sgbWVudUl0ZW0udXNlciB9fSA8L2Rpdj5cbiAgICAgICAgPG8tbGFuZ3VhZ2Utc2VsZWN0b3IgW3VzZS1mbGFnLWljb25zXT1cInVzZUZsYWdJY29uc1wiPjwvby1sYW5ndWFnZS1zZWxlY3Rvcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2xpPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhc2lkZW5hdk9wZW5lZFwiPlxuICA8bGkgKm5nSWY9XCIhaGlkZGVuXCIgY2xhc3M9XCJvLWFwcC1zaWRlbmF2LW1lbnVpdGVtIG8tYXBwLXNpZGVuYXYtaXRlbVwiPlxuICAgIDxhIFttYXRUb29sdGlwXT1cInRvb2x0aXBcIiBtYXRUb29sdGlwQ2xhc3M9XCJtZW51aXRlbS10b29sdGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIiBtYXQtYnV0dG9uIChjbGljayk9XCJ0cmlnZ2VyQ2xpY2soJGV2ZW50KVwiXG4gICAgICBbY2xhc3Muby1hcHAtc2lkZW5hdi12aWV3ZXItc2lkZW5hdi1pdGVtLXNlbGVjdGVkXT1cImFjdGl2ZVwiPlxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwibWVudUl0ZW0uc3ZnSWNvblwiIFtzdmdJY29uXT1cIm1lbnVJdGVtLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwibWVudUl0ZW0uaWNvblwiPnt7IG1lbnVJdGVtLmljb24gfX08L21hdC1pY29uPlxuICAgIDwvYT5cbiAgPC9saT5cbjwvbmctY29udGFpbmVyPlxuIl19
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hcHAtc2lkZW5hdi1tZW51LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXNpZGVuYXYvbWVudS1pdGVtL28tYXBwLXNpZGVuYXYtbWVudS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2FwcC1zaWRlbmF2L21lbnUtaXRlbS9vLWFwcC1zaWRlbmF2LW1lbnUtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUlSLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFF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LEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUN4QztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7O3lIQW5QVSw0QkFBNEI7NkdBQTVCLDRCQUE0QiwyVkN0RHpDLHlwR0ErREE7QURRRTtJQUFDLHFCQUFxQixFQUFFOzttRUFDTTtBQUM5QjtJQUFDLHFCQUFxQixFQUFFOzs4REFDRTsyRkFwQmYsNEJBQTRCO2tCQWJ4QyxTQUFTOytCQUNFLHlCQUF5QixVQUMzQixzQ0FBc0MsV0FDckMsdUNBQXVDLGlCQUdqQyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNKLFNBQVMsRUFBRSxZQUFZO3dCQUN2QixpQkFBaUIsRUFBRSxVQUFVO3FCQUM5Qjt3SkFvQkQsYUFBYSxNQUViLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3RvcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFR5cGUsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBNZW51SXRlbUFjdGlvbiwgTWVudUl0ZW1Mb2NhbGUsIE1lbnVJdGVtTG9nb3V0LCBNZW51SXRlbVJvdXRlLCBNZW51SXRlbVVzZXJJbmZvIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9hcHAtbWVudS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXBwTWVudVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHAtbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBPVXNlckluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvby11c2VyLWluZm8uc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IE9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlL28tdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1Blcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvby1wZXJtaXNzaW9ucy50eXBlJztcbmltcG9ydCB7IFBlcm1pc3Npb25zVXRpbHMgfSBmcm9tICcuLi8uLi8uLi91dGlsL3Blcm1pc3Npb25zJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0FwcFNpZGVuYXZCYXNlIH0gZnJvbSAnLi4vby1hcHAtc2lkZW5hdi1iYXNlLmNsYXNzJztcbmltcG9ydCB7IE9BcHBMYXlvdXRCYXNlIH0gZnJvbSAnLi4vLi4vLi4vbGF5b3V0cy9hcHAtbGF5b3V0L28tYXBwLWxheW91dC1iYXNlLmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fQVBQX1NJREVOQVZfTUVOVV9JVEVNID0gW1xuICAnbWVudUl0ZW0gOiBtZW51LWl0ZW0nLFxuICAnbWVudUl0ZW1UeXBlIDogbWVudS1pdGVtLXR5cGUnLFxuICAnc2lkZW5hdk9wZW5lZCA6IHNpZGVuYXYtb3BlbmVkJyxcbiAgJ2Rpc2FibGVkJ1xuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUUFVUU19PX0FQUF9TSURFTkFWX01FTlVfSVRFTSA9IFtcbiAgJ29uQ2xpY2snXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLWFwcC1zaWRlbmF2LW1lbnUtaXRlbScsXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19BUFBfU0lERU5BVl9NRU5VX0lURU0sXG4gIG91dHB1dHM6IERFRkFVTFRfT1VUUFVUU19PX0FQUF9TSURFTkFWX01FTlVfSVRFTSxcbiAgdGVtcGxhdGVVcmw6ICcuL28tYXBwLXNpZGVuYXYtbWVudS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby1hcHAtc2lkZW5hdi1tZW51LWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzXSc6ICdnZXRDbGFzcygpJyxcbiAgICAnW2F0dHIuZGlzYWJsZWRdJzogJ2Rpc2FibGVkJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9BcHBTaWRlbmF2TWVudUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIG9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2U6IE9UcmFuc2xhdGVTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZTtcbiAgcHJvdGVjdGVkIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgb1VzZXJJbmZvU2VydmljZTogT1VzZXJJbmZvU2VydmljZTtcbiAgcHJvdGVjdGVkIGFwcE1lbnVTZXJ2aWNlOiBBcHBNZW51U2VydmljZTtcbiAgcHJvdGVjdGVkIHVzZXJJbmZvU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJvdGVjdGVkIHNpZGVuYXY6IE9BcHBTaWRlbmF2QmFzZTtcbiAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyO1xuXG4gIG1lbnVJdGVtOiBhbnk7IC8vIFRPRE8gTWVudVJvb3RJdGVtO1xuICBtZW51SXRlbVR5cGU6IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNpZGVuYXZPcGVuZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgYXBwU2lkZW5hdlRvZ2dsZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcm90ZWN0ZWQgcm91dGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBvQXBwTGF5b3V0Q29tcG9uZW50OiBPQXBwTGF5b3V0QmFzZTtcblxuICBwcm90ZWN0ZWQgcGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucztcbiAgcHJvdGVjdGVkIG11dGF0aW9uT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG5cbiAgaGlkZGVuOiBib29sZWFuO1xuICBhY3RpdmU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxPVHJhbnNsYXRlU2VydmljZT4oT1RyYW5zbGF0ZVNlcnZpY2UgYXMgVHlwZTxPVHJhbnNsYXRlU2VydmljZT4pO1xuICAgIHRoaXMuYXV0aFNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxBdXRoU2VydmljZT4oQXV0aFNlcnZpY2UgYXMgVHlwZTxBdXRoU2VydmljZT4pO1xuICAgIHRoaXMuZGlhbG9nU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PERpYWxvZ1NlcnZpY2U+KERpYWxvZ1NlcnZpY2UgYXMgVHlwZTxEaWFsb2dTZXJ2aWNlPik7XG4gICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxQZXJtaXNzaW9uc1NlcnZpY2U+KFBlcm1pc3Npb25zU2VydmljZSBhcyBUeXBlPFBlcm1pc3Npb25zU2VydmljZT4pO1xuICAgIHRoaXMub1VzZXJJbmZvU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PE9Vc2VySW5mb1NlcnZpY2U+KE9Vc2VySW5mb1NlcnZpY2UgYXMgVHlwZTxPVXNlckluZm9TZXJ2aWNlPik7XG4gICAgdGhpcy5zaWRlbmF2ID0gdGhpcy5pbmplY3Rvci5nZXQ8T0FwcFNpZGVuYXZCYXNlPihPQXBwU2lkZW5hdkJhc2UgYXMgVHlwZTxPQXBwU2lkZW5hdkJhc2U+KTtcbiAgICB0aGlzLm9BcHBMYXlvdXRDb21wb25lbnQgPSB0aGlzLmluamVjdG9yLmdldDxPQXBwTGF5b3V0QmFzZT4oT0FwcExheW91dEJhc2UgYXMgVHlwZTxPQXBwTGF5b3V0QmFzZT4pO1xuICAgIHRoaXMucm91dGVyID0gdGhpcy5pbmplY3Rvci5nZXQ8Um91dGVyPihSb3V0ZXIgYXMgVHlwZTxSb3V0ZXI+KTtcbiAgICB0aGlzLmFwcE1lbnVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8QXBwTWVudVNlcnZpY2U+KEFwcE1lbnVTZXJ2aWNlIGFzIFR5cGU8QXBwTWVudVNlcnZpY2U+KTtcblxuICAgIHRoaXMucm91dGVyU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgJiYgdGhpcy5hcHBNZW51U2VydmljZS5pc1JvdXRlSXRlbSh0aGlzLm1lbnVJdGVtKSkge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRoaXMuYXBwTWVudVNlcnZpY2UuaXNJdGVtQWN0aXZlKHRoaXMubWVudUl0ZW0gYXMgTWVudUl0ZW1Sb3V0ZSk7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5wYXJzZVBlcm1pc3Npb25zKCk7XG4gICAgdGhpcy5hY3RpdmUgPSB0aGlzLmFwcE1lbnVTZXJ2aWNlLmlzSXRlbUFjdGl2ZSh0aGlzLm1lbnVJdGVtIGFzIE1lbnVJdGVtUm91dGUpO1xuICB9XG5cbiAgZ2V0IHNob3VsZFNob3dUb29sdGlwKCkge1xuICAgIHN3aXRjaCAodGhpcy5vQXBwTGF5b3V0Q29tcG9uZW50LnRvb2x0aXBEaXNwbGF5TW9kZSkge1xuICAgICAgY2FzZSAnYWx3YXlzJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICduZXZlcic6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNhc2UgJ29ubHktY29sbGFwc2VkJzpcbiAgICAgICAgcmV0dXJuICF0aGlzLnNpZGVuYXZPcGVuZWQ7XG4gICAgICBjYXNlICdvbmx5LWV4cGFuZGVkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2lkZW5hdk9wZW5lZDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuaXNVc2VySW5mb0l0ZW0oKSAmJiB0aGlzLnNpZGVuYXYpIHtcbiAgICAgIHRoaXMuc2V0VXNlckluZm9JbWFnZSgpO1xuICAgICAgdGhpcy5hcHBTaWRlbmF2VG9nZ2xlU3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNpZGVuYXYub25TaWRlbmF2T3BlbmVkQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNpZGVuYXYuc2lkZW5hdi5vcGVuZWQpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXJJbmZvSW1hZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgICAgdGhpcy51c2VySW5mb1N1YnNjcmlwdGlvbiA9IHRoaXMub1VzZXJJbmZvU2VydmljZS5nZXRVc2VySW5mb09ic2VydmFibGUoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHJlcy5hdmF0YXIpICYmIHRoaXMuc2lkZW5hdi5zaWRlbmF2Lm9wZW5lZCkge1xuICAgICAgICAgICh0aGlzLm1lbnVJdGVtIGFzIE1lbnVJdGVtVXNlckluZm8pLmF2YXRhciA9IHJlcy5hdmF0YXI7XG4gICAgICAgICAgdGhpcy5zZXRVc2VySW5mb0ltYWdlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmFwcFNpZGVuYXZUb2dnbGVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuYXBwU2lkZW5hdlRvZ2dsZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucm91dGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm11dGF0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZXJJbmZvU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnVzZXJJbmZvU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlUGVybWlzc2lvbnMoKSB7XG4gICAgLy8gaWYgb2F0dHIgaW4gZm9ybSwgaXQgY2FuIGhhdmUgcGVybWlzc2lvbnNcbiAgICB0aGlzLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuZ2V0TWVudVBlcm1pc3Npb25zKHRoaXMubWVudUl0ZW0uaWQpO1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5wZXJtaXNzaW9ucykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oaWRkZW4gPSB0aGlzLnBlcm1pc3Npb25zLnZpc2libGUgPT09IGZhbHNlO1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgLy8gaWYgdGhlIGRpc2FibGVkIGlucHV0IGlzIHRydWUgaXQgbWVhbnMgdGhhdCBpdHMgcGFyZW50IGlzIGRpc2FibGVkIHVzaW5nIHBlcm1pc3Npb25zXG4gICAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5wZXJtaXNzaW9ucy5lbmFibGVkID09PSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyID0gUGVybWlzc2lvbnNVdGlscy5yZWdpc3RlckRpc2FibGVkQ2hhbmdlc0luRG9tKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwge1xuICAgICAgICBjaGVja1N0cmluZ1ZhbHVlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0VXNlckluZm9JbWFnZSgpIHtcbiAgICBjb25zdCBpbWdFbCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdvLXVzZXItaW5mby1pbWFnZScpWzBdO1xuICAgIGlmIChpbWdFbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5tZW51SXRlbSBhcyBNZW51SXRlbVVzZXJJbmZvO1xuICAgICAgaW1nRWwuc2V0QXR0cmlidXRlKCdzdHlsZScsICdiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFwnJyArIGl0ZW0uYXZhdGFyICsgJ1xcJyknKTtcbiAgICB9XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBleGVjdXRlSXRlbUFjdGlvbigpIHtcbiAgICBjb25zdCBhY3Rpb25JdGVtID0gKHRoaXMubWVudUl0ZW0gYXMgTWVudUl0ZW1BY3Rpb24pO1xuICAgIGlmIChVdGlsLnBhcnNlQm9vbGVhbihhY3Rpb25JdGVtLmNvbmZpcm0sIGZhbHNlKSkge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oJ0NPTkZJUk0nLCBhY3Rpb25JdGVtLmNvbmZpcm1UZXh0IHx8ICdNRVNTQUdFUy5DT05GSVJNX0FDVElPTicpLnRoZW4ocmVzdWx0ID0+IHJlc3VsdCA/IGFjdGlvbkl0ZW0uYWN0aW9uKCkgOiBudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWN0aW9uSXRlbS5hY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBjb25maWd1cmVJMThuKCkge1xuICAgIGNvbnN0IGxvY2FsZUl0ZW0gPSAodGhpcy5tZW51SXRlbSBhcyBNZW51SXRlbUxvY2FsZSk7XG4gICAgaWYgKHRoaXMuaXNDb25maWd1cmVkTGFuZygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UpIHtcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS51c2UobG9jYWxlSXRlbS5sb2NhbGUpO1xuICAgIH1cbiAgfVxuXG4gIGlzQ29uZmlndXJlZExhbmcoKSB7XG4gICAgY29uc3QgbG9jYWxlSXRlbSA9ICh0aGlzLm1lbnVJdGVtIGFzIE1lbnVJdGVtTG9jYWxlKTtcbiAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlKSB7XG4gICAgICByZXR1cm4gKHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXRDdXJyZW50TGFuZygpID09PSBsb2NhbGVJdGVtLmxvY2FsZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxvZ291dCgpIHtcbiAgICBjb25zdCBtZW51SXRlbSA9ICh0aGlzLm1lbnVJdGVtIGFzIE1lbnVJdGVtTG9nb3V0KTtcbiAgICBpZiAoVXRpbC5wYXJzZUJvb2xlYW4obWVudUl0ZW0uY29uZmlybSwgdHJ1ZSkpIHtcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UubG9nb3V0V2l0aENvbmZpcm1hdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ291dCgpO1xuICAgIH1cbiAgfVxuXG4gIG5hdmlnYXRlKCkge1xuICAgIGNvbnN0IHJvdXRlID0gKHRoaXMubWVudUl0ZW0gYXMgTWVudUl0ZW1Sb3V0ZSkucm91dGU7XG4gICAgaWYgKHRoaXMucm91dGVyLnVybCAhPT0gcm91dGUpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZV0pO1xuICAgIH1cbiAgfVxuXG4gIHRyaWdnZXJDbGljayhlOiBFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYXBwTWVudVNlcnZpY2Uub25DbGljay5uZXh0KCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMubWVudUl0ZW1UeXBlKSB7XG4gICAgICBjYXNlICdhY3Rpb24nOlxuICAgICAgICB0aGlzLmV4ZWN1dGVJdGVtQWN0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbG9jYWxlJzpcbiAgICAgICAgdGhpcy5jb25maWd1cmVJMThuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgdGhpcy5sb2dvdXQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAodGhpcy5hcHBNZW51U2VydmljZS5pc1JvdXRlSXRlbSh0aGlzLm1lbnVJdGVtKSkge1xuICAgICAgICAgIHRoaXMubmF2aWdhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5vbkNsaWNrLmVtaXQoZSk7XG4gIH1cblxuXG5cbiAgaXNBY3Rpb25JdGVtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1lbnVJdGVtVHlwZSA9PT0gJ2FjdGlvbic7XG4gIH1cblxuICBpc0xvY2FsZUl0ZW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWVudUl0ZW1UeXBlID09PSAnbG9jYWxlJztcbiAgfVxuXG4gIGlzTG9nb3V0SXRlbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tZW51SXRlbVR5cGUgPT09ICdsb2dvdXQnO1xuICB9XG5cbiAgaXNVc2VySW5mb0l0ZW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWVudUl0ZW1UeXBlID09PSAndXNlci1pbmZvJztcbiAgfVxuXG4gIGlzRGVmYXVsdEl0ZW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWVudUl0ZW1UeXBlID09PSAnZGVmYXVsdCc7XG4gIH1cblxuICBnZXQgdXNlRmxhZ0ljb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9BcHBMYXlvdXRDb21wb25lbnQgJiYgdGhpcy5vQXBwTGF5b3V0Q29tcG9uZW50LnVzZUZsYWdJY29ucztcbiAgfVxuXG4gIGdldCB0b29sdGlwKCk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQodGhpcy5tZW51SXRlbS5uYW1lKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5tZW51SXRlbS50b29sdGlwKSkge1xuICAgICAgcmVzdWx0ICs9ICc6ICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KHRoaXMubWVudUl0ZW0udG9vbHRpcCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXRDbGFzcygpIHtcbiAgICBsZXQgY2xhc3NOYW1lID0gJ28tYXBwLXNpZGVuYXYtbWVudS1pdGVtJztcbiAgICBpZiAodGhpcy5tZW51SXRlbS5jbGFzcykge1xuICAgICAgY2xhc3NOYW1lICs9ICcgJyArIHRoaXMubWVudUl0ZW0uY2xhc3M7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInNpZGVuYXZPcGVuZWRcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZFNob3dUb29sdGlwOyBlbHNlIG5vVG9vbHRpcE9wZW5lZFwiPlxuICAgIDxsaSAqbmdJZj1cIiFoaWRkZW5cIiBjbGFzcz1cIm8tYXBwLXNpZGVuYXYtbWVudWl0ZW0gby1hcHAtc2lkZW5hdi1pdGVtXCIgW21hdFRvb2x0aXBdPVwidG9vbHRpcFwiIG1hdFRvb2x0aXBDbGFzcz1cIm1lbnVncm91cC10b29sdGlwXCJcbiAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiIFtjbGFzcy5vLXVzZXItaW5mb109XCJpc1VzZXJJbmZvSXRlbSgpXCIgW2lkXT1cIm1lbnVJdGVtLmlkXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudE9wZW5lZFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbGk+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhc2lkZW5hdk9wZW5lZFwiPlxuICA8bGkgKm5nSWY9XCIhaGlkZGVuXCIgY2xhc3M9XCJvLWFwcC1zaWRlbmF2LW1lbnVpdGVtIG8tYXBwLXNpZGVuYXYtaXRlbVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG91bGRTaG93VG9vbHRpcDsgZWxzZSBub1Rvb2x0aXBDbG9zZWRcIj5cblxuICAgICAgPGEgW21hdFRvb2x0aXBdPVwidG9vbHRpcFwiIG1hdFRvb2x0aXBDbGFzcz1cIm1lbnVpdGVtLXRvb2x0aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJyaWdodFwiIG1hdC1idXR0b24gKGNsaWNrKT1cInRyaWdnZXJDbGljaygkZXZlbnQpXCJcbiAgICAgICAgW2NsYXNzLm8tYXBwLXNpZGVuYXYtdmlld2VyLXNpZGVuYXYtaXRlbS1zZWxlY3RlZF09XCJhY3RpdmVcIj5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwibWVudUl0ZW0uc3ZnSWNvblwiIFtzdmdJY29uXT1cIm1lbnVJdGVtLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJtZW51SXRlbS5pY29uXCI+e3sgbWVudUl0ZW0uaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICA8L2E+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNub1Rvb2x0aXBDbG9zZWQ+XG4gICAgICA8YSBtYXQtYnV0dG9uIChjbGljayk9XCJ0cmlnZ2VyQ2xpY2soJGV2ZW50KVwiIFtjbGFzcy5vLWFwcC1zaWRlbmF2LXZpZXdlci1zaWRlbmF2LWl0ZW0tc2VsZWN0ZWRdPVwiYWN0aXZlXCI+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm1lbnVJdGVtLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJtZW51SXRlbS5zdmdJY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwibWVudUl0ZW0uaWNvblwiPnt7IG1lbnVJdGVtLmljb24gfX08L21hdC1pY29uPlxuICAgICAgPC9hPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbGk+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNub1Rvb2x0aXBPcGVuZWQ+XG4gIDxsaSAqbmdJZj1cIiFoaWRkZW5cIiBjbGFzcz1cIm8tYXBwLXNpZGVuYXYtbWVudWl0ZW0gby1hcHAtc2lkZW5hdi1pdGVtXCIgW2NsYXNzLm8tdXNlci1pbmZvXT1cImlzVXNlckluZm9JdGVtKClcIiBbaWRdPVwibWVudUl0ZW0uaWRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudE9wZW5lZFwiPjwvbmctY29udGFpbmVyPlxuICA8L2xpPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb250ZW50T3BlbmVkPlxuICA8YSBtYXQtYnV0dG9uICpuZ0lmPVwiIWlzVXNlckluZm9JdGVtKCkgJiYgIWlzTG9jYWxlSXRlbSgpXCIgKGNsaWNrKT1cInRyaWdnZXJDbGljaygkZXZlbnQpXCJcbiAgICBbY2xhc3Muby1hcHAtc2lkZW5hdi12aWV3ZXItc2lkZW5hdi1pdGVtLXNlbGVjdGVkXT1cImFjdGl2ZVwiPlxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XG4gICAgICA8bWF0LWljb24gKm5nSWY9XCJtZW51SXRlbS5zdmdJY29uXCIgW3N2Z0ljb25dPVwibWVudUl0ZW0uc3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgICA8bWF0LWljb24gKm5nSWY9XCJtZW51SXRlbS5pY29uXCI+e3sgbWVudUl0ZW0uaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cIm8tYXBwLXNpZGVuYXYtbWVudWl0ZW0tdGl0bGVcIj57e1xuICAgICAgICBtZW51SXRlbS5uYW1lIHwgb1RyYW5zbGF0ZVxuICAgICAgICB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9hPlxuXG4gIDxhIG1hdC1idXR0b24gKm5nSWY9XCJpc0xvY2FsZUl0ZW0oKVwiIChjbGljayk9XCJ0cmlnZ2VyQ2xpY2soJGV2ZW50KVwiPlxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cbiAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm1lbnVJdGVtLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJtZW51SXRlbS5zdmdJY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm1lbnVJdGVtLmljb25cIj57eyBtZW51SXRlbS5pY29uIH19PC9tYXQtaWNvbj5cbiAgICAgIHt7IG1lbnVJdGVtLm5hbWUgfCBvVHJhbnNsYXRlIH19XG4gICAgICA8bWF0LWljb24gKm5nSWY9XCJpc0NvbmZpZ3VyZWRMYW5nKClcIiBjbGFzcz1cImNvbmZpZ3VyZWQtbGFuZ1wiPmNoZWNrX2NpcmNsZTwvbWF0LWljb24+XG4gICAgPC9kaXY+XG4gIDwvYT5cblxuICA8ZGl2ICpuZ0lmPVwiaXNVc2VySW5mb0l0ZW0oKVwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cIm8tdXNlci1pbmZvLW1lbnUtaXRlbVwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLXVzZXItaW5mby1pbWFnZVwiIGZ4RmxleEZpbGw+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm8tdXNlci1pbmZvLWl0ZW1cIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGZ4RmxleEZpbGw+XG4gICAgICA8ZGl2IGNsYXNzPVwiby11c2VyLWluZm8tbmFtZVwiPnt7IG1lbnVJdGVtLnVzZXIgfX08L2Rpdj5cbiAgICAgIDxvLWxhbmd1YWdlLXNlbGVjdG9yIFt1c2UtZmxhZy1pY29uc109XCJ1c2VGbGFnSWNvbnNcIj48L28tbGFuZ3VhZ2Utc2VsZWN0b3I+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==