@c8y/ngx-components 1018.503.56 → 1018.503.62

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 (50) hide show
  1. package/context-dashboard/context-dashboard.component.d.ts +5 -1
  2. package/context-dashboard/dashboard-detail.component.d.ts +1 -0
  3. package/core/common/common.module.d.ts +2 -1
  4. package/core/common/component-outlet.directive.d.ts +24 -0
  5. package/core/common/index.d.ts +1 -0
  6. package/esm2020/context-dashboard/cockpit-dashboard/cockpit-dashboard.component.mjs +3 -3
  7. package/esm2020/context-dashboard/context-dashboard.component.mjs +9 -2
  8. package/esm2020/context-dashboard/dashboard-availability.component.mjs +3 -3
  9. package/esm2020/context-dashboard/dashboard-detail.component.mjs +3 -3
  10. package/esm2020/context-dashboard/device-info-dashboard/device-info-dashboard.component.mjs +3 -3
  11. package/esm2020/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.mjs +3 -3
  12. package/esm2020/core/action/action-outlet.component.mjs +6 -5
  13. package/esm2020/core/common/common.module.mjs +8 -5
  14. package/esm2020/core/common/component-outlet.directive.mjs +56 -0
  15. package/esm2020/core/common/index.mjs +2 -1
  16. package/esm2020/core/data-grid/column/cell-renderer.component.mjs +5 -4
  17. package/esm2020/core/data-grid/column/filtering-form-renderer.component.mjs +5 -4
  18. package/esm2020/core/docs/help-and-support-outlet/help-and-support-outlet.component.mjs +7 -6
  19. package/esm2020/core/docs/legal-notices-outlet/legal-notices-outlet.component.mjs +6 -5
  20. package/esm2020/core/drawer/drawer-outlet/drawer-outlet.component.mjs +5 -4
  21. package/esm2020/core/navigator/navigator-node.component.mjs +6 -5
  22. package/esm2020/core/stepper/stepper-outlet.component.mjs +8 -7
  23. package/esm2020/core/tabs/tabs-outlet.component.mjs +5 -4
  24. package/esm2020/ecosystem/shared/list-filters/list-filters.component.mjs +3 -3
  25. package/fesm2015/c8y-ngx-components-context-dashboard.mjs +18 -11
  26. package/fesm2015/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  27. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs +2 -2
  28. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  29. package/fesm2015/c8y-ngx-components.mjs +80 -23
  30. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  31. package/fesm2020/c8y-ngx-components-context-dashboard.mjs +18 -11
  32. package/fesm2020/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  33. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs +2 -2
  34. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  35. package/fesm2020/c8y-ngx-components.mjs +79 -23
  36. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  37. package/locales/de.po +6 -0
  38. package/locales/en.po +6 -0
  39. package/locales/es.po +6 -0
  40. package/locales/fr.po +6 -0
  41. package/locales/ja_JP.po +8 -0
  42. package/locales/ko.po +6 -0
  43. package/locales/locales.pot +6 -0
  44. package/locales/nl.po +6 -0
  45. package/locales/pl.po +6 -0
  46. package/locales/pt_BR.po +6 -0
  47. package/locales/ru.po +6 -0
  48. package/locales/zh_CN.po +6 -0
  49. package/locales/zh_TW.po +6 -0
  50. package/package.json +1 -1
@@ -12,8 +12,9 @@ import * as i1 from "@angular/router";
12
12
  import * as i2 from "ngx-bootstrap/collapse";
13
13
  import * as i3 from "../common/icon.directive";
14
14
  import * as i4 from "@angular/common";
15
- import * as i5 from "../modal/popover-confirm.component";
16
- import * as i6 from "../i18n/c8y-translate.pipe";
15
+ import * as i5 from "../common/component-outlet.directive";
16
+ import * as i6 from "../modal/popover-confirm.component";
17
+ import * as i7 from "../i18n/c8y-translate.pipe";
17
18
  /**
18
19
  * Navigator node renderer.
19
20
  */
@@ -160,10 +161,10 @@ export class NavigatorNodeComponent {
160
161
  }
161
162
  }
162
163
  NavigatorNodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NavigatorNodeComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
163
- NavigatorNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: NavigatorNodeComponent, selector: "c8y-navigator-node", inputs: { node: "node", isRoot: "isRoot" }, outputs: { nodeClick: "nodeClick" }, viewQueries: [{ propertyName: "iconSlot", first: true, predicate: ["icon"], descendants: true, read: ViewContainerRef }, { propertyName: "confirm", first: true, predicate: PopoverConfirmComponent, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"node.component\">\n <ng-container *ngComponentOutlet=\"node.component; injector: node.injector\"></ng-container>\n</ng-container>\n\n<div\n class=\"slot\"\n *ngIf=\"!node.component\"\n [hidden]=\"node.hidden\"\n (dragstart)=\"node.dragStart($event)\"\n (dragend)=\"node.dragEnd($event)\"\n (drop)=\"node.drop($event)\"\n [draggable]=\"node.draggable\"\n [ngClass]=\"{ dragged: node.dragged, disabled: node.loading }\"\n>\n <ng-container>\n <div\n class=\"link\"\n tabindex=\"-1\"\n [routerLink]=\"node.canNavigate ? node.path : undefined\"\n [ngClass]=\"{\n active: isActive$ | async,\n 'dragged-hover': node.draggedHover && !node.dragged\n }\"\n (dragover)=\"node.canDrop && $event.preventDefault()\"\n (dragenter)=\"node.canDrop && node.dragEnter($event)\"\n (dragleave)=\"node.canDrop && node.dragLeave($event)\"\n >\n <ng-container *ngTemplateOutlet=\"navicon\"></ng-container>\n <button\n class=\"btn-clean\"\n title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n [attr.aria-expanded]=\"node.hasChildren ? node.open : null\"\n type=\"button\"\n draggable=\"false\"\n [attr.data-cy]=\"node.label\"\n [attr.id]=\"isRoot ? node.id : undefined\"\n (click)=\"click(node.canNavigate ? 'link' : 'expander', $event)\"\n [ngClass]=\"{\n 'root-link': isRoot,\n open: node.open && node.hasChildren,\n parent: node.hasChildren\n }\"\n >\n <ng-container *ngTemplateOutlet=\"inner\"></ng-container>\n </button>\n </div>\n </ng-container>\n\n <div\n class=\"children panel-expand expand\"\n *ngIf=\"node.children.length\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n >\n <c8y-navigator-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n (nodeClick)=\"nodeClick.emit($event)\"\n ></c8y-navigator-node>\n </div>\n</div>\n\n<!-- icon -->\n<ng-template #navicon>\n <!-- loader -->\n <i\n class=\"icon-spin loadingIndicator\"\n [c8yIcon]=\"'circle-o-notch'\"\n style=\"{{ isRoot ? 'padding-left: 16px;' : null }}\"\n *ngIf=\"node.loading && !isRoot\"\n ></i>\n <ng-container #icon></ng-container>\n</ng-template>\n\n<ng-template #inner>\n <!--title -->\n <span>{{ node.translateLabel ? (node.label | translate) : node.label }}</span>\n\n <!--expander -->\n <i\n class=\"expander\"\n [c8yIcon]=\"'chevron-down'\"\n [attr.aria-label]=\"expandTitle\"\n role=\"button\"\n *ngIf=\"node.hasChildren\"\n (click)=\"click('expander', $event)\"\n data-cy=\"c8y-navigator-node--expander\"\n ></i>\n\n <!-- Popover confirm -->\n <c8y-popover-confirm\n triggers=\"focus\"\n containerClass=\"navigator-popover\"\n ></c8y-popover-confirm>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.PopoverConfirmComponent, selector: "c8y-popover-confirm", inputs: ["buttons", "message", "title", "isOpen", "containerClass", "placement", "outsideClick"] }, { kind: "component", type: NavigatorNodeComponent, selector: "c8y-navigator-node", inputs: ["node", "isRoot"], outputs: ["nodeClick"] }, { kind: "pipe", type: i6.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
164
+ NavigatorNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: NavigatorNodeComponent, selector: "c8y-navigator-node", inputs: { node: "node", isRoot: "isRoot" }, outputs: { nodeClick: "nodeClick" }, viewQueries: [{ propertyName: "iconSlot", first: true, predicate: ["icon"], descendants: true, read: ViewContainerRef }, { propertyName: "confirm", first: true, predicate: PopoverConfirmComponent, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"node.component\">\n <ng-container *c8yComponentOutlet=\"node.component; environmentInjector: node.injector\"></ng-container>\n</ng-container>\n\n<div\n class=\"slot\"\n *ngIf=\"!node.component\"\n [hidden]=\"node.hidden\"\n (dragstart)=\"node.dragStart($event)\"\n (dragend)=\"node.dragEnd($event)\"\n (drop)=\"node.drop($event)\"\n [draggable]=\"node.draggable\"\n [ngClass]=\"{ dragged: node.dragged, disabled: node.loading }\"\n>\n <ng-container>\n <div\n class=\"link\"\n tabindex=\"-1\"\n [routerLink]=\"node.canNavigate ? node.path : undefined\"\n [ngClass]=\"{\n active: isActive$ | async,\n 'dragged-hover': node.draggedHover && !node.dragged\n }\"\n (dragover)=\"node.canDrop && $event.preventDefault()\"\n (dragenter)=\"node.canDrop && node.dragEnter($event)\"\n (dragleave)=\"node.canDrop && node.dragLeave($event)\"\n >\n <ng-container *ngTemplateOutlet=\"navicon\"></ng-container>\n <button\n class=\"btn-clean\"\n title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n [attr.aria-expanded]=\"node.hasChildren ? node.open : null\"\n type=\"button\"\n draggable=\"false\"\n [attr.data-cy]=\"node.label\"\n [attr.id]=\"isRoot ? node.id : undefined\"\n (click)=\"click(node.canNavigate ? 'link' : 'expander', $event)\"\n [ngClass]=\"{\n 'root-link': isRoot,\n open: node.open && node.hasChildren,\n parent: node.hasChildren\n }\"\n >\n <ng-container *ngTemplateOutlet=\"inner\"></ng-container>\n </button>\n </div>\n </ng-container>\n\n <div\n class=\"children panel-expand expand\"\n *ngIf=\"node.children.length\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n >\n <c8y-navigator-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n (nodeClick)=\"nodeClick.emit($event)\"\n ></c8y-navigator-node>\n </div>\n</div>\n\n<!-- icon -->\n<ng-template #navicon>\n <!-- loader -->\n <i\n class=\"icon-spin loadingIndicator\"\n [c8yIcon]=\"'circle-o-notch'\"\n style=\"{{ isRoot ? 'padding-left: 16px;' : null }}\"\n *ngIf=\"node.loading && !isRoot\"\n ></i>\n <ng-container #icon></ng-container>\n</ng-template>\n\n<ng-template #inner>\n <!--title -->\n <span>{{ node.translateLabel ? (node.label | translate) : node.label }}</span>\n\n <!--expander -->\n <i\n class=\"expander\"\n [c8yIcon]=\"'chevron-down'\"\n [attr.aria-label]=\"expandTitle\"\n role=\"button\"\n *ngIf=\"node.hasChildren\"\n (click)=\"click('expander', $event)\"\n data-cy=\"c8y-navigator-node--expander\"\n ></i>\n\n <!-- Popover confirm -->\n <c8y-popover-confirm\n triggers=\"focus\"\n containerClass=\"navigator-popover\"\n ></c8y-popover-confirm>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.C8yComponentOutlet, selector: "[c8yComponentOutlet]", inputs: ["c8yComponentOutlet", "c8yComponentOutletInjector", "c8yComponentOutletEnvironmentInjector"] }, { kind: "component", type: i6.PopoverConfirmComponent, selector: "c8y-popover-confirm", inputs: ["buttons", "message", "title", "isOpen", "containerClass", "placement", "outsideClick"] }, { kind: "component", type: NavigatorNodeComponent, selector: "c8y-navigator-node", inputs: ["node", "isRoot"], outputs: ["nodeClick"] }, { kind: "pipe", type: i7.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
164
165
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NavigatorNodeComponent, decorators: [{
165
166
  type: Component,
166
- args: [{ selector: 'c8y-navigator-node', template: "<ng-container *ngIf=\"node.component\">\n <ng-container *ngComponentOutlet=\"node.component; injector: node.injector\"></ng-container>\n</ng-container>\n\n<div\n class=\"slot\"\n *ngIf=\"!node.component\"\n [hidden]=\"node.hidden\"\n (dragstart)=\"node.dragStart($event)\"\n (dragend)=\"node.dragEnd($event)\"\n (drop)=\"node.drop($event)\"\n [draggable]=\"node.draggable\"\n [ngClass]=\"{ dragged: node.dragged, disabled: node.loading }\"\n>\n <ng-container>\n <div\n class=\"link\"\n tabindex=\"-1\"\n [routerLink]=\"node.canNavigate ? node.path : undefined\"\n [ngClass]=\"{\n active: isActive$ | async,\n 'dragged-hover': node.draggedHover && !node.dragged\n }\"\n (dragover)=\"node.canDrop && $event.preventDefault()\"\n (dragenter)=\"node.canDrop && node.dragEnter($event)\"\n (dragleave)=\"node.canDrop && node.dragLeave($event)\"\n >\n <ng-container *ngTemplateOutlet=\"navicon\"></ng-container>\n <button\n class=\"btn-clean\"\n title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n [attr.aria-expanded]=\"node.hasChildren ? node.open : null\"\n type=\"button\"\n draggable=\"false\"\n [attr.data-cy]=\"node.label\"\n [attr.id]=\"isRoot ? node.id : undefined\"\n (click)=\"click(node.canNavigate ? 'link' : 'expander', $event)\"\n [ngClass]=\"{\n 'root-link': isRoot,\n open: node.open && node.hasChildren,\n parent: node.hasChildren\n }\"\n >\n <ng-container *ngTemplateOutlet=\"inner\"></ng-container>\n </button>\n </div>\n </ng-container>\n\n <div\n class=\"children panel-expand expand\"\n *ngIf=\"node.children.length\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n >\n <c8y-navigator-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n (nodeClick)=\"nodeClick.emit($event)\"\n ></c8y-navigator-node>\n </div>\n</div>\n\n<!-- icon -->\n<ng-template #navicon>\n <!-- loader -->\n <i\n class=\"icon-spin loadingIndicator\"\n [c8yIcon]=\"'circle-o-notch'\"\n style=\"{{ isRoot ? 'padding-left: 16px;' : null }}\"\n *ngIf=\"node.loading && !isRoot\"\n ></i>\n <ng-container #icon></ng-container>\n</ng-template>\n\n<ng-template #inner>\n <!--title -->\n <span>{{ node.translateLabel ? (node.label | translate) : node.label }}</span>\n\n <!--expander -->\n <i\n class=\"expander\"\n [c8yIcon]=\"'chevron-down'\"\n [attr.aria-label]=\"expandTitle\"\n role=\"button\"\n *ngIf=\"node.hasChildren\"\n (click)=\"click('expander', $event)\"\n data-cy=\"c8y-navigator-node--expander\"\n ></i>\n\n <!-- Popover confirm -->\n <c8y-popover-confirm\n triggers=\"focus\"\n containerClass=\"navigator-popover\"\n ></c8y-popover-confirm>\n</ng-template>\n" }]
167
+ args: [{ selector: 'c8y-navigator-node', template: "<ng-container *ngIf=\"node.component\">\n <ng-container *c8yComponentOutlet=\"node.component; environmentInjector: node.injector\"></ng-container>\n</ng-container>\n\n<div\n class=\"slot\"\n *ngIf=\"!node.component\"\n [hidden]=\"node.hidden\"\n (dragstart)=\"node.dragStart($event)\"\n (dragend)=\"node.dragEnd($event)\"\n (drop)=\"node.drop($event)\"\n [draggable]=\"node.draggable\"\n [ngClass]=\"{ dragged: node.dragged, disabled: node.loading }\"\n>\n <ng-container>\n <div\n class=\"link\"\n tabindex=\"-1\"\n [routerLink]=\"node.canNavigate ? node.path : undefined\"\n [ngClass]=\"{\n active: isActive$ | async,\n 'dragged-hover': node.draggedHover && !node.dragged\n }\"\n (dragover)=\"node.canDrop && $event.preventDefault()\"\n (dragenter)=\"node.canDrop && node.dragEnter($event)\"\n (dragleave)=\"node.canDrop && node.dragLeave($event)\"\n >\n <ng-container *ngTemplateOutlet=\"navicon\"></ng-container>\n <button\n class=\"btn-clean\"\n title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n [attr.aria-expanded]=\"node.hasChildren ? node.open : null\"\n type=\"button\"\n draggable=\"false\"\n [attr.data-cy]=\"node.label\"\n [attr.id]=\"isRoot ? node.id : undefined\"\n (click)=\"click(node.canNavigate ? 'link' : 'expander', $event)\"\n [ngClass]=\"{\n 'root-link': isRoot,\n open: node.open && node.hasChildren,\n parent: node.hasChildren\n }\"\n >\n <ng-container *ngTemplateOutlet=\"inner\"></ng-container>\n </button>\n </div>\n </ng-container>\n\n <div\n class=\"children panel-expand expand\"\n *ngIf=\"node.children.length\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n >\n <c8y-navigator-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n (nodeClick)=\"nodeClick.emit($event)\"\n ></c8y-navigator-node>\n </div>\n</div>\n\n<!-- icon -->\n<ng-template #navicon>\n <!-- loader -->\n <i\n class=\"icon-spin loadingIndicator\"\n [c8yIcon]=\"'circle-o-notch'\"\n style=\"{{ isRoot ? 'padding-left: 16px;' : null }}\"\n *ngIf=\"node.loading && !isRoot\"\n ></i>\n <ng-container #icon></ng-container>\n</ng-template>\n\n<ng-template #inner>\n <!--title -->\n <span>{{ node.translateLabel ? (node.label | translate) : node.label }}</span>\n\n <!--expander -->\n <i\n class=\"expander\"\n [c8yIcon]=\"'chevron-down'\"\n [attr.aria-label]=\"expandTitle\"\n role=\"button\"\n *ngIf=\"node.hasChildren\"\n (click)=\"click('expander', $event)\"\n data-cy=\"c8y-navigator-node--expander\"\n ></i>\n\n <!-- Popover confirm -->\n <c8y-popover-confirm\n triggers=\"focus\"\n containerClass=\"navigator-popover\"\n ></c8y-popover-confirm>\n</ng-template>\n" }]
167
168
  }], ctorParameters: function () { return [{ type: i1.Router }]; }, propDecorators: { iconSlot: [{
168
169
  type: ViewChild,
169
170
  args: ['icon', { read: ViewContainerRef, static: false }]
@@ -177,4 +178,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
177
178
  type: ViewChild,
178
179
  args: [PopoverConfirmComponent, { static: false }]
179
180
  }] } });
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdG9yLW5vZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9uYXZpZ2F0b3IvbmF2aWdhdG9yLW5vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS9uYXZpZ2F0b3IvbmF2aWdhdG9yLW5vZGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkNBQTJDO0FBQzNDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7QUFReEM7O0dBRUc7QUFLSCxNQUFNLE9BQU8sc0JBQXNCO0lBNERqQyxZQUFvQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQTVDbEM7Ozs7Ozs7V0FPRztRQUNPLGNBQVMsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVMvRDs7V0FFRztRQUNILGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRWhDOztXQUVHO1FBQ0gsY0FBUyxHQUFHLEtBQUssQ0FDZixJ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bnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN1YmplY3QsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFBvcG92ZXJDb25maXJtQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwvcG9wb3Zlci1jb25maXJtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOYXZpZ2F0b3JJY29uQ29tcG9uZW50IH0gZnJvbSAnLi9uYXZpZ2F0b3ItaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2xpY2tPcHRpb25zLCBOYXZpZ2F0b3JOb2RlIH0gZnJvbSAnLi9uYXZpZ2F0b3Itbm9kZSc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmV4cG9ydCBjb25zdCBlbnVtIENsaWNrRXZlbnRTb3VyY2Uge1xuICBJQ09OID0gJ2ljb24nLFxuICBFWFBBTkRFUiA9ICdleHBhbmRlcicsXG4gIExJTksgPSAnbGluaydcbn1cblxuLyoqXG4gKiBOYXZpZ2F0b3Igbm9kZSByZW5kZXJlci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LW5hdmlnYXRvci1ub2RlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25hdmlnYXRvci1ub2RlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBOYXZpZ2F0b3JOb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ2ljb24nLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogZmFsc2UgfSkgaWNvblNsb3Q6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRvciBub2RlLlxuICAgKi9cbiAgQElucHV0KCkgbm9kZTogTmF2aWdhdG9yTm9kZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBuYXZpZ2F0b3Igbm9kZSBpcyBhIHJvb3Qgbm9kZSAodG9wIG5vZGUgaW4gdGhlIGhpZXJhcmNoeSkuXG4gICAqL1xuICBASW5wdXQoKSBpc1Jvb3Q6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZXIgcmVzcG9uc2libGUgZm9yIGJyb2FkY2FzdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBldmVudHM6IFwiaWNvblwiLCBcImV4cGFuZGVyXCIgb3IgXCJsaW5rXCIgYXMgc3RyaW5nIHZhbHVlLlxuICAgKlxuICAgKiBUaGUgdHlwZSBvZiBldmVudCBkZXBlbmRzIG9uIHdoZXJlIHlvdSBjbGljayBvbiB0aGUgbmF2aWdhdG9yIG5vZGU6XG4gICAqICogY2xpY2tpbmcgdGhlIGljb24gd2lsbCBicm9hZGNhc3QgdGhlIGV2ZW50IFwiaWNvblwiLFxuICAgKiAqIGNsaWNraW5nIHRoZSBleHBhbmRlciB3aWxsIGJyb2FkY2FzdCB0aGUgZXZlbnQgXCJleHBhbmRlclwiLFxuICAgKiAqIGNsaWNraW5nIHRoZSBsYWJlbCB3aWxsIGJyb2FkY2FzdCB0aGUgZXZlbnQgXCJsaW5rXCIuXG4gICAqL1xuICBAT3V0cHV0KCkgbm9kZUNsaWNrOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQFZpZXdDaGlsZChQb3BvdmVyQ29uZmlybUNvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pIGNvbmZpcm06IFBvcG92ZXJDb25maXJtQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgdmlld0luaXRUaW1lb3V0O1xuXG4gIC8qKlxuICAgKiBBIHN1YmplY3QgdGhhdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyB0aGUgbmF2aWdhdG9yIG5vZGUgaXMgaW5pdGlhbGl6ZWQuXG4gICAqL1xuICBub2RlSW5pdCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBBIG9ic2VydmFibGUgd2hpY2ggZW1pdHMsIGFzIHNvb24gYXMgdGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgbm9kZSBjaGFuZ2VzLlxuICAgKi9cbiAgaXNBY3RpdmUkID0gbWVyZ2UoXG4gICAgdGhpcy5ub2RlSW5pdCQsXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoZmlsdGVyKGUgPT4gZSBpbnN0YW5jZW9mIEFjdGl2YXRpb25FbmQpKVxuICApLnBpcGUoXG4gICAgbWFwKCgpID0+IHtcbiAgICAgIGlmIChpc1VuZGVmaW5lZCh0aGlzLm5vZGUucGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVyLmlzQWN0aXZlKHRoaXMubm9kZS5wYXRoLCB0aGlzLm5vZGUucm91dGVyTGlua0V4YWN0KTtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHRhcChpc0FjdGl2ZSA9PiB7XG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgdGhpcy5leHBhbmRDb2xsYXBzZSh0cnVlKTtcbiAgICAgICAgdGhpcy5leHBhbmRSZWN1cnNpdmVQYXJlbnQodGhpcy5ub2RlLnBhcmVudHMpO1xuICAgICAgfVxuICAgIH0pXG4gICk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge31cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICghdGhpcy5ub2RlLmNvbXBvbmVudCkge1xuICAgICAgdGhpcy52aWV3SW5pdFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVJY29uKCk7XG4gICAgICAgIHRoaXMubm9kZS5jb25maXJtID0gdGhpcy5jb25maXJtO1xuICAgICAgICB0aGlzLm5vZGVJbml0JC5uZXh0KCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXhwYW5kZXIgdGl0bGUuXG4gICAqL1xuICBnZXQgZXhwYW5kVGl0bGUoKSB7XG4gICAgcmV0dXJuICF0aGlzLm5vZGUub3BlbiA/ICdFeHBhbmQnIDogJ0NvbGxhcHNlJztcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGljayBldmVudCBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZnJvbSBTb3VyY2Ugb2YgdGhlIGNsaWNrIGV2ZW50LlxuICAgKiBAcGFyYW0gZXZlbnQgRE9NIGV2ZW50LlxuICAgKi9cbiAgY2xpY2soZnJvbTogJ2ljb24nIHwgJ2V4cGFuZGVyJyB8ICdsaW5rJyA9ICdsaW5rJywgJGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIGxldCBvcGVuOiBib29sZWFuO1xuICAgIHN3aXRjaCAoZnJvbSkge1xuICAgICAgY2FzZSBDbGlja0V2ZW50U291cmNlLkVYUEFOREVSOlxuICAgICAgICBpZiAoJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIG9wZW4gPSAhdGhpcy5ub2RlLm9wZW47XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDbGlja0V2ZW50U291cmNlLklDT046XG4gICAgICBjYXNlIENsaWNrRXZlbnRTb3VyY2UuTElOSzpcbiAgICAgICAgb3BlbiA9IHRoaXMucm91dGVyLmlzQWN0aXZlKHRoaXMubm9kZS5wYXRoLCB0aGlzLm5vZGUucm91dGVyTGlua0V4YWN0KVxuICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgIDogIXRoaXMubm9kZS5vcGVuO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVFeHBhbmRDb2xsYXBzZShvcGVuLCBmcm9tLCAkZXZlbnQpO1xuICAgIHRoaXMubm9kZUNsaWNrLmVtaXQoZnJvbSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kcyBvciBjb2xsYXBzZXMgdGhlIG5hdmlnYXRvciBub2RlIGFuZCBpdHMgY2hpbGRyZW4gcmVjdXJzaXZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3BlbiBPcGVuIG9yIGNsb3NlIHRoZSBub2RlLlxuICAgKiBAcGFyYW0ge0NsaWNrT3B0aW9uc30gZm9yTm9kZSBDbGljayBvcHRpb25zLlxuICAgKi9cbiAgZXhwYW5kQ29sbGFwc2Uob3BlbiwgZm9yTm9kZTogQ2xpY2tPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm5vZGUub3BlbiA9IG9wZW47XG4gICAgZm9yTm9kZS5vcGVuID0gb3BlbjtcbiAgICB0aGlzLm5vZGUuY2xpY2soZm9yTm9kZSk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudmlld0luaXRUaW1lb3V0KTtcblxuICAgIGlmICh0aGlzLm5vZGUpIHtcbiAgICAgIHRoaXMubm9kZS5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZHMgdGhlIHBhcmVudCBub2RlcyByZWN1cnNpdmVseS5cbiAgICogQHBhcmFtIG5vZGVzIFRoZSBub2RlcyB0aGF0IHNob3VsZCBiZSB0cmllZCB0byBnZXQgb3BlbmVkLlxuICAgKiBAcGFyYW0gY2xpY2tPcHRpb24gVGhlIGNsaWNrIG9wdGlvbnMgdG8gcGVyZm9ybSBvbiB0aGUgcGFyZW50IG5vZGVzLlxuICAgKi9cbiAgZXhwYW5kUmVjdXJzaXZlUGFyZW50KG5vZGVzOiBOYXZpZ2F0b3JOb2RlW10sIGNsaWNrT3B0aW9uOiBDbGlja09wdGlvbnMgPSB7IGV4cGFuZGVyOiB0cnVlIH0pIHtcbiAgICBub2Rlcy5mb3JFYWNoKHBhcmVudE5vZGUgPT4ge1xuICAgICAgaWYgKCFwYXJlbnROb2RlLm9wZW4pIHtcbiAgICAgICAgcGFyZW50Tm9kZS5vcGVuID0gdHJ1ZTtcbiAgICAgICAgcGFyZW50Tm9kZS5jbGljayhjbGlja09wdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLmV4cGFuZFJlY3Vyc2l2ZVBhcmVudChwYXJlbnROb2RlLnBhcmVudHMsIGNsaWNrT3B0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXhwYW5kQ29sbGFwc2Uob3BlbiwgZnJvbSwgJGV2ZW50KSB7XG4gICAgaWYgKFxuICAgICAgb3BlbiA9PT0gdGhpcy5ub2RlLm9wZW4gfHxcbiAgICAgICh0aGlzLm5vZGUucGF0aCAmJiAhb3BlbiAmJiBmcm9tICE9PSBDbGlja0V2ZW50U291cmNlLkVYUEFOREVSKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmV4cGFuZENvbGxhcHNlKG9wZW4sIHsgW2Zyb21dOiB0cnVlLCAkZXZlbnQgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUljb24oKSB7XG4gICAgaWYgKHRoaXMubm9kZS5pY29uVGVtcGxhdGUpIHtcbiAgICAgIHRoaXMudXBkYXRlSWNvblRlbXBsYXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlSWNvbkNvbXBvbmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSWNvbkNvbXBvbmVudCgpIHtcbiAgICBsZXQgY29tcG9uZW50VHlwZSA9IE5hdmlnYXRvckljb25Db21wb25lbnQ7XG4gICAgaWYgKHRoaXMubm9kZSAmJiB0aGlzLm5vZGUuaWNvbkNvbXBvbmVudCkge1xuICAgICAgY29tcG9uZW50VHlwZSA9IHRoaXMubm9kZS5pY29uQ29tcG9uZW50O1xuICAgIH1cbiAgICB0aGlzLmljb25TbG90LmNsZWFyKCk7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5pY29uU2xvdC5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSwge1xuICAgICAgaW5qZWN0b3I6IHRoaXMubm9kZS5pbmplY3RvclxuICAgIH0pO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5ub2RlID0gdGhpcy5ub2RlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJY29uVGVtcGxhdGUoKSB7XG4gICAgdGhpcy5pY29uU2xvdC5jbGVhcigpO1xuICAgIHRoaXMuaWNvblNsb3QuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMubm9kZS5pY29uVGVtcGxhdGUsIHVuZGVmaW5lZCwge1xuICAgICAgaW5qZWN0b3I6IHRoaXMubm9kZS5pbmplY3RvclxuICAgIH0pO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZS5jb21wb25lbnRcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJub2RlLmNvbXBvbmVudDsgaW5qZWN0b3I6IG5vZGUuaW5qZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48ZGl2XG4gIGNsYXNzPVwic2xvdFwiXG4gICpuZ0lmPVwiIW5vZGUuY29tcG9uZW50XCJcbiAgW2hpZGRlbl09XCJub2RlLmhpZGRlblwiXG4gIChkcmFnc3RhcnQpPVwibm9kZS5kcmFnU3RhcnQoJGV2ZW50KVwiXG4gIChkcmFnZW5kKT1cIm5vZGUuZHJhZ0VuZCgkZXZlbnQpXCJcbiAgKGRyb3ApPVwibm9kZS5kcm9wKCRldmVudClcIlxuICBbZHJhZ2dhYmxlXT1cIm5vZGUuZHJhZ2dhYmxlXCJcbiAgW25nQ2xhc3NdPVwieyBkcmFnZ2VkOiBub2RlLmRyYWdnZWQsIGRpc2FibGVkOiBub2RlLmxvYWRpbmcgfVwiXG4+XG4gIDxuZy1jb250YWluZXI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJsaW5rXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgW3JvdXRlckxpbmtdPVwibm9kZS5jYW5OYXZpZ2F0ZSA/IG5vZGUucGF0aCA6IHVuZGVmaW5lZFwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgIGFjdGl2ZTogaXNBY3RpdmUkIHwgYXN5bmMsXG4gICAgICAgICdkcmFnZ2VkLWhvdmVyJzogbm9kZS5kcmFnZ2VkSG92ZXIgJiYgIW5vZGUuZHJhZ2dlZFxuICAgICAgfVwiXG4gICAgICAoZHJhZ292ZXIpPVwibm9kZS5jYW5Ecm9wICYmICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgIChkcmFnZW50ZXIpPVwibm9kZS5jYW5Ecm9wICYmIG5vZGUuZHJhZ0VudGVyKCRldmVudClcIlxuICAgICAgKGRyYWdsZWF2ZSk9XCJub2RlLmNhbkRyb3AgJiYgbm9kZS5kcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5hdmljb25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4tY2xlYW5cIlxuICAgICAgICB0aXRsZT1cInt7IG5vZGUudHJhbnNsYXRlTGFiZWwgPyAobm9kZS5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBub2RlLmxhYmVsIH19XCJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJub2RlLmhhc0NoaWxkcmVuID8gbm9kZS5vcGVuIDogbnVsbFwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBkcmFnZ2FibGU9XCJmYWxzZVwiXG4gICAgICAgIFthdHRyLmRhdGEtY3ldPVwibm9kZS5sYWJlbFwiXG4gICAgICAgIFthdHRyLmlkXT1cImlzUm9vdCA/IG5vZGUuaWQgOiB1bmRlZmluZWRcIlxuICAgICAgICAoY2xpY2spPVwiY2xpY2sobm9kZS5jYW5OYXZpZ2F0ZSA/ICdsaW5rJyA6ICdleHBhbmRlcicsICRldmVudClcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ3Jvb3QtbGluayc6IGlzUm9vdCxcbiAgICAgICAgICBvcGVuOiBub2RlLm9wZW4gJiYgbm9kZS5oYXNDaGlsZHJlbixcbiAgICAgICAgICBwYXJlbnQ6IG5vZGUuaGFzQ2hpbGRyZW5cbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbm5lclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImNoaWxkcmVuIHBhbmVsLWV4cGFuZCBleHBhbmRcIlxuICAgICpuZ0lmPVwibm9kZS5jaGlsZHJlbi5sZW5ndGhcIlxuICAgIFtjb2xsYXBzZV09XCIhbm9kZS5vcGVuXCJcbiAgICBbaXNBbmltYXRlZF09XCJ0cnVlXCJcbiAgPlxuICAgIDxjOHktbmF2aWdhdG9yLW5vZGVcbiAgICAgICpuZ0Zvcj1cImxldCBjaGlsZE5vZGUgb2Ygbm9kZS5jaGlsZHJlblwiXG4gICAgICBbbm9kZV09XCJjaGlsZE5vZGVcIlxuICAgICAgKG5vZGVDbGljayk9XCJub2RlQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICA+PC9jOHktbmF2aWdhdG9yLW5vZGU+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gaWNvbiAtLT5cbjxuZy10ZW1wbGF0ZSAjbmF2aWNvbj5cbiAgPCEtLSBsb2FkZXIgLS0+XG4gIDxpXG4gICAgY2xhc3M9XCJpY29uLXNwaW4gbG9hZGluZ0luZGljYXRvclwiXG4gICAgW2M4eUljb25dPVwiJ2NpcmNsZS1vLW5vdGNoJ1wiXG4gICAgc3R5bGU9XCJ7eyBpc1Jvb3QgPyAncGFkZGluZy1sZWZ0OiAxNnB4OycgOiBudWxsIH19XCJcbiAgICAqbmdJZj1cIm5vZGUubG9hZGluZyAmJiAhaXNSb290XCJcbiAgPjwvaT5cbiAgPG5nLWNvbnRhaW5lciAjaWNvbj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5uZXI+XG4gIDwhLS10aXRsZSAgLS0+XG4gIDxzcGFuPnt7IG5vZGUudHJhbnNsYXRlTGFiZWwgPyAobm9kZS5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBub2RlLmxhYmVsIH19PC9zcGFuPlxuXG4gIDwhLS1leHBhbmRlciAgLS0+XG4gIDxpXG4gICAgY2xhc3M9XCJleHBhbmRlclwiXG4gICAgW2M4eUljb25dPVwiJ2NoZXZyb24tZG93bidcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZXhwYW5kVGl0bGVcIlxuICAgIHJvbGU9XCJidXR0b25cIlxuICAgICpuZ0lmPVwibm9kZS5oYXNDaGlsZHJlblwiXG4gICAgKGNsaWNrKT1cImNsaWNrKCdleHBhbmRlcicsICRldmVudClcIlxuICAgIGRhdGEtY3k9XCJjOHktbmF2aWdhdG9yLW5vZGUtLWV4cGFuZGVyXCJcbiAgPjwvaT5cblxuICA8IS0tICBQb3BvdmVyIGNvbmZpcm0gIC0tPlxuICA8Yzh5LXBvcG92ZXItY29uZmlybVxuICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgIGNvbnRhaW5lckNsYXNzPVwibmF2aWdhdG9yLXBvcG92ZXJcIlxuICA+PC9jOHktcG9wb3Zlci1jb25maXJtPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdG9yLW5vZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9uYXZpZ2F0b3IvbmF2aWdhdG9yLW5vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS9uYXZpZ2F0b3IvbmF2aWdhdG9yLW5vZGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkNBQTJDO0FBQzNDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7O0FBUXhDOztHQUVHO0FBS0gsTUFBTSxPQUFPLHNCQUFzQjtJQTREakMsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUE1Q2xDOzs7Ozs7O1dBT0c7UUFDTyxjQUFTLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFTL0Q7O1dBRUc7UUFDSCxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVoQzs7V0FFRztRQUNILGNBQVMsR0FBRyxLQUFLLENBQ2Ys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b250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJqZWN0LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQb3BvdmVyQ29uZmlybUNvbXBvbmVudCB9IGZyb20gJy4uL21vZGFsL3BvcG92ZXItY29uZmlybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmF2aWdhdG9ySWNvbkNvbXBvbmVudCB9IGZyb20gJy4vbmF2aWdhdG9yLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENsaWNrT3B0aW9ucywgTmF2aWdhdG9yTm9kZSB9IGZyb20gJy4vbmF2aWdhdG9yLW5vZGUnO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgY29uc3QgZW51bSBDbGlja0V2ZW50U291cmNlIHtcbiAgSUNPTiA9ICdpY29uJyxcbiAgRVhQQU5ERVIgPSAnZXhwYW5kZXInLFxuICBMSU5LID0gJ2xpbmsnXG59XG5cbi8qKlxuICogTmF2aWdhdG9yIG5vZGUgcmVuZGVyZXIuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1uYXZpZ2F0b3Itbm9kZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9uYXZpZ2F0b3Itbm9kZS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgTmF2aWdhdG9yTm9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBAVmlld0NoaWxkKCdpY29uJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IGZhbHNlIH0pIGljb25TbG90OiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIC8qKlxuICAgKiBOYXZpZ2F0b3Igbm9kZS5cbiAgICovXG4gIEBJbnB1dCgpIG5vZGU6IE5hdmlnYXRvck5vZGU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgbmF2aWdhdG9yIG5vZGUgaXMgYSByb290IG5vZGUgKHRvcCBub2RlIGluIHRoZSBoaWVyYXJjaHkpLlxuICAgKi9cbiAgQElucHV0KCkgaXNSb290OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVyIHJlc3BvbnNpYmxlIGZvciBicm9hZGNhc3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgZXZlbnRzOiBcImljb25cIiwgXCJleHBhbmRlclwiIG9yIFwibGlua1wiIGFzIHN0cmluZyB2YWx1ZS5cbiAgICpcbiAgICogVGhlIHR5cGUgb2YgZXZlbnQgZGVwZW5kcyBvbiB3aGVyZSB5b3UgY2xpY2sgb24gdGhlIG5hdmlnYXRvciBub2RlOlxuICAgKiAqIGNsaWNraW5nIHRoZSBpY29uIHdpbGwgYnJvYWRjYXN0IHRoZSBldmVudCBcImljb25cIixcbiAgICogKiBjbGlja2luZyB0aGUgZXhwYW5kZXIgd2lsbCBicm9hZGNhc3QgdGhlIGV2ZW50IFwiZXhwYW5kZXJcIixcbiAgICogKiBjbGlja2luZyB0aGUgbGFiZWwgd2lsbCBicm9hZGNhc3QgdGhlIGV2ZW50IFwibGlua1wiLlxuICAgKi9cbiAgQE91dHB1dCgpIG5vZGVDbGljazogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBWaWV3Q2hpbGQoUG9wb3ZlckNvbmZpcm1Db21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KSBjb25maXJtOiBQb3BvdmVyQ29uZmlybUNvbXBvbmVudDtcblxuICBwcml2YXRlIHZpZXdJbml0VGltZW91dDtcblxuICAvKipcbiAgICogQSBzdWJqZWN0IHRoYXQgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgdGhlIG5hdmlnYXRvciBub2RlIGlzIGluaXRpYWxpemVkLlxuICAgKi9cbiAgbm9kZUluaXQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKipcbiAgICogQSBvYnNlcnZhYmxlIHdoaWNoIGVtaXRzLCBhcyBzb29uIGFzIHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIG5vZGUgY2hhbmdlcy5cbiAgICovXG4gIGlzQWN0aXZlJCA9IG1lcmdlKFxuICAgIHRoaXMubm9kZUluaXQkLFxuICAgIHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcihlID0+IGUgaW5zdGFuY2VvZiBBY3RpdmF0aW9uRW5kKSlcbiAgKS5waXBlKFxuICAgIG1hcCgoKSA9PiB7XG4gICAgICBpZiAoaXNVbmRlZmluZWQodGhpcy5ub2RlLnBhdGgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnJvdXRlci5pc0FjdGl2ZSh0aGlzLm5vZGUucGF0aCwgdGhpcy5ub2RlLnJvdXRlckxpbmtFeGFjdCk7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICB0YXAoaXNBY3RpdmUgPT4ge1xuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kQ29sbGFwc2UodHJ1ZSk7XG4gICAgICAgIHRoaXMuZXhwYW5kUmVjdXJzaXZlUGFyZW50KHRoaXMubm9kZS5wYXJlbnRzKTtcbiAgICAgIH1cbiAgICB9KVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHt9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMubm9kZS5jb21wb25lbnQpIHtcbiAgICAgIHRoaXMudmlld0luaXRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlSWNvbigpO1xuICAgICAgICB0aGlzLm5vZGUuY29uZmlybSA9IHRoaXMuY29uZmlybTtcbiAgICAgICAgdGhpcy5ub2RlSW5pdCQubmV4dCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGV4cGFuZGVyIHRpdGxlLlxuICAgKi9cbiAgZ2V0IGV4cGFuZFRpdGxlKCkge1xuICAgIHJldHVybiAhdGhpcy5ub2RlLm9wZW4gPyAnRXhwYW5kJyA6ICdDb2xsYXBzZSc7XG4gIH1cblxuICAvKipcbiAgICogQ2xpY2sgZXZlbnQgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZyb20gU291cmNlIG9mIHRoZSBjbGljayBldmVudC5cbiAgICogQHBhcmFtIGV2ZW50IERPTSBldmVudC5cbiAgICovXG4gIGNsaWNrKGZyb206ICdpY29uJyB8ICdleHBhbmRlcicgfCAnbGluaycgPSAnbGluaycsICRldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICBsZXQgb3BlbjogYm9vbGVhbjtcbiAgICBzd2l0Y2ggKGZyb20pIHtcbiAgICAgIGNhc2UgQ2xpY2tFdmVudFNvdXJjZS5FWFBBTkRFUjpcbiAgICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBvcGVuID0gIXRoaXMubm9kZS5vcGVuO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ2xpY2tFdmVudFNvdXJjZS5JQ09OOlxuICAgICAgY2FzZSBDbGlja0V2ZW50U291cmNlLkxJTks6XG4gICAgICAgIG9wZW4gPSB0aGlzLnJvdXRlci5pc0FjdGl2ZSh0aGlzLm5vZGUucGF0aCwgdGhpcy5ub2RlLnJvdXRlckxpbmtFeGFjdClcbiAgICAgICAgICA/IHRydWVcbiAgICAgICAgICA6ICF0aGlzLm5vZGUub3BlbjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlRXhwYW5kQ29sbGFwc2Uob3BlbiwgZnJvbSwgJGV2ZW50KTtcbiAgICB0aGlzLm5vZGVDbGljay5lbWl0KGZyb20pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZHMgb3IgY29sbGFwc2VzIHRoZSBuYXZpZ2F0b3Igbm9kZSBhbmQgaXRzIGNoaWxkcmVuIHJlY3Vyc2l2ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wZW4gT3BlbiBvciBjbG9zZSB0aGUgbm9kZS5cbiAgICogQHBhcmFtIHtDbGlja09wdGlvbnN9IGZvck5vZGUgQ2xpY2sgb3B0aW9ucy5cbiAgICovXG4gIGV4cGFuZENvbGxhcHNlKG9wZW4sIGZvck5vZGU6IENsaWNrT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5ub2RlLm9wZW4gPSBvcGVuO1xuICAgIGZvck5vZGUub3BlbiA9IG9wZW47XG4gICAgdGhpcy5ub2RlLmNsaWNrKGZvck5vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnZpZXdJbml0VGltZW91dCk7XG5cbiAgICBpZiAodGhpcy5ub2RlKSB7XG4gICAgICB0aGlzLm5vZGUuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmRzIHRoZSBwYXJlbnQgbm9kZXMgcmVjdXJzaXZlbHkuXG4gICAqIEBwYXJhbSBub2RlcyBUaGUgbm9kZXMgdGhhdCBzaG91bGQgYmUgdHJpZWQgdG8gZ2V0IG9wZW5lZC5cbiAgICogQHBhcmFtIGNsaWNrT3B0aW9uIFRoZSBjbGljayBvcHRpb25zIHRvIHBlcmZvcm0gb24gdGhlIHBhcmVudCBub2Rlcy5cbiAgICovXG4gIGV4cGFuZFJlY3Vyc2l2ZVBhcmVudChub2RlczogTmF2aWdhdG9yTm9kZVtdLCBjbGlja09wdGlvbjogQ2xpY2tPcHRpb25zID0geyBleHBhbmRlcjogdHJ1ZSB9KSB7XG4gICAgbm9kZXMuZm9yRWFjaChwYXJlbnROb2RlID0+IHtcbiAgICAgIGlmICghcGFyZW50Tm9kZS5vcGVuKSB7XG4gICAgICAgIHBhcmVudE5vZGUub3BlbiA9IHRydWU7XG4gICAgICAgIHBhcmVudE5vZGUuY2xpY2soY2xpY2tPcHRpb24pO1xuICAgICAgfVxuICAgICAgdGhpcy5leHBhbmRSZWN1cnNpdmVQYXJlbnQocGFyZW50Tm9kZS5wYXJlbnRzLCBjbGlja09wdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUV4cGFuZENvbGxhcHNlKG9wZW4sIGZyb20sICRldmVudCkge1xuICAgIGlmIChcbiAgICAgIG9wZW4gPT09IHRoaXMubm9kZS5vcGVuIHx8XG4gICAgICAodGhpcy5ub2RlLnBhdGggJiYgIW9wZW4gJiYgZnJvbSAhPT0gQ2xpY2tFdmVudFNvdXJjZS5FWFBBTkRFUilcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5leHBhbmRDb2xsYXBzZShvcGVuLCB7IFtmcm9tXTogdHJ1ZSwgJGV2ZW50IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJY29uKCkge1xuICAgIGlmICh0aGlzLm5vZGUuaWNvblRlbXBsYXRlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUljb25UZW1wbGF0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZUljb25Db21wb25lbnQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUljb25Db21wb25lbnQoKSB7XG4gICAgbGV0IGNvbXBvbmVudFR5cGUgPSBOYXZpZ2F0b3JJY29uQ29tcG9uZW50O1xuICAgIGlmICh0aGlzLm5vZGUgJiYgdGhpcy5ub2RlLmljb25Db21wb25lbnQpIHtcbiAgICAgIGNvbXBvbmVudFR5cGUgPSB0aGlzLm5vZGUuaWNvbkNvbXBvbmVudDtcbiAgICB9XG4gICAgdGhpcy5pY29uU2xvdC5jbGVhcigpO1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuaWNvblNsb3QuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGUsIHtcbiAgICAgIGluamVjdG9yOiB0aGlzLm5vZGUuaW5qZWN0b3JcbiAgICB9KTtcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uubm9kZSA9IHRoaXMubm9kZTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSWNvblRlbXBsYXRlKCkge1xuICAgIHRoaXMuaWNvblNsb3QuY2xlYXIoKTtcbiAgICB0aGlzLmljb25TbG90LmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLm5vZGUuaWNvblRlbXBsYXRlLCB1bmRlZmluZWQsIHtcbiAgICAgIGluamVjdG9yOiB0aGlzLm5vZGUuaW5qZWN0b3JcbiAgICB9KTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGUuY29tcG9uZW50XCI+XG4gIDxuZy1jb250YWluZXIgKmM4eUNvbXBvbmVudE91dGxldD1cIm5vZGUuY29tcG9uZW50OyBlbnZpcm9ubWVudEluamVjdG9yOiBub2RlLmluamVjdG9yXCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPGRpdlxuICBjbGFzcz1cInNsb3RcIlxuICAqbmdJZj1cIiFub2RlLmNvbXBvbmVudFwiXG4gIFtoaWRkZW5dPVwibm9kZS5oaWRkZW5cIlxuICAoZHJhZ3N0YXJ0KT1cIm5vZGUuZHJhZ1N0YXJ0KCRldmVudClcIlxuICAoZHJhZ2VuZCk9XCJub2RlLmRyYWdFbmQoJGV2ZW50KVwiXG4gIChkcm9wKT1cIm5vZGUuZHJvcCgkZXZlbnQpXCJcbiAgW2RyYWdnYWJsZV09XCJub2RlLmRyYWdnYWJsZVwiXG4gIFtuZ0NsYXNzXT1cInsgZHJhZ2dlZDogbm9kZS5kcmFnZ2VkLCBkaXNhYmxlZDogbm9kZS5sb2FkaW5nIH1cIlxuPlxuICA8bmctY29udGFpbmVyPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibGlua1wiXG4gICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgIFtyb3V0ZXJMaW5rXT1cIm5vZGUuY2FuTmF2aWdhdGUgPyBub2RlLnBhdGggOiB1bmRlZmluZWRcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICBhY3RpdmU6IGlzQWN0aXZlJCB8IGFzeW5jLFxuICAgICAgICAnZHJhZ2dlZC1ob3Zlcic6IG5vZGUuZHJhZ2dlZEhvdmVyICYmICFub2RlLmRyYWdnZWRcbiAgICAgIH1cIlxuICAgICAgKGRyYWdvdmVyKT1cIm5vZGUuY2FuRHJvcCAmJiAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAoZHJhZ2VudGVyKT1cIm5vZGUuY2FuRHJvcCAmJiBub2RlLmRyYWdFbnRlcigkZXZlbnQpXCJcbiAgICAgIChkcmFnbGVhdmUpPVwibm9kZS5jYW5Ecm9wICYmIG5vZGUuZHJhZ0xlYXZlKCRldmVudClcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuYXZpY29uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuLWNsZWFuXCJcbiAgICAgICAgdGl0bGU9XCJ7eyBub2RlLnRyYW5zbGF0ZUxhYmVsID8gKG5vZGUubGFiZWwgfCB0cmFuc2xhdGUpIDogbm9kZS5sYWJlbCB9fVwiXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwibm9kZS5oYXNDaGlsZHJlbiA/IG5vZGUub3BlbiA6IG51bGxcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgZHJhZ2dhYmxlPVwiZmFsc2VcIlxuICAgICAgICBbYXR0ci5kYXRhLWN5XT1cIm5vZGUubGFiZWxcIlxuICAgICAgICBbYXR0ci5pZF09XCJpc1Jvb3QgPyBub2RlLmlkIDogdW5kZWZpbmVkXCJcbiAgICAgICAgKGNsaWNrKT1cImNsaWNrKG5vZGUuY2FuTmF2aWdhdGUgPyAnbGluaycgOiAnZXhwYW5kZXInLCAkZXZlbnQpXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdyb290LWxpbmsnOiBpc1Jvb3QsXG4gICAgICAgICAgb3Blbjogbm9kZS5vcGVuICYmIG5vZGUuaGFzQ2hpbGRyZW4sXG4gICAgICAgICAgcGFyZW50OiBub2RlLmhhc0NoaWxkcmVuXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5uZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJjaGlsZHJlbiBwYW5lbC1leHBhbmQgZXhwYW5kXCJcbiAgICAqbmdJZj1cIm5vZGUuY2hpbGRyZW4ubGVuZ3RoXCJcbiAgICBbY29sbGFwc2VdPVwiIW5vZGUub3BlblwiXG4gICAgW2lzQW5pbWF0ZWRdPVwidHJ1ZVwiXG4gID5cbiAgICA8Yzh5LW5hdmlnYXRvci1ub2RlXG4gICAgICAqbmdGb3I9XCJsZXQgY2hpbGROb2RlIG9mIG5vZGUuY2hpbGRyZW5cIlxuICAgICAgW25vZGVdPVwiY2hpbGROb2RlXCJcbiAgICAgIChub2RlQ2xpY2spPVwibm9kZUNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgPjwvYzh5LW5hdmlnYXRvci1ub2RlPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIGljb24gLS0+XG48bmctdGVtcGxhdGUgI25hdmljb24+XG4gIDwhLS0gbG9hZGVyIC0tPlxuICA8aVxuICAgIGNsYXNzPVwiaWNvbi1zcGluIGxvYWRpbmdJbmRpY2F0b3JcIlxuICAgIFtjOHlJY29uXT1cIidjaXJjbGUtby1ub3RjaCdcIlxuICAgIHN0eWxlPVwie3sgaXNSb290ID8gJ3BhZGRpbmctbGVmdDogMTZweDsnIDogbnVsbCB9fVwiXG4gICAgKm5nSWY9XCJub2RlLmxvYWRpbmcgJiYgIWlzUm9vdFwiXG4gID48L2k+XG4gIDxuZy1jb250YWluZXIgI2ljb24+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lubmVyPlxuICA8IS0tdGl0bGUgIC0tPlxuICA8c3Bhbj57eyBub2RlLnRyYW5zbGF0ZUxhYmVsID8gKG5vZGUubGFiZWwgfCB0cmFuc2xhdGUpIDogbm9kZS5sYWJlbCB9fTwvc3Bhbj5cblxuICA8IS0tZXhwYW5kZXIgIC0tPlxuICA8aVxuICAgIGNsYXNzPVwiZXhwYW5kZXJcIlxuICAgIFtjOHlJY29uXT1cIidjaGV2cm9uLWRvd24nXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImV4cGFuZFRpdGxlXCJcbiAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAqbmdJZj1cIm5vZGUuaGFzQ2hpbGRyZW5cIlxuICAgIChjbGljayk9XCJjbGljaygnZXhwYW5kZXInLCAkZXZlbnQpXCJcbiAgICBkYXRhLWN5PVwiYzh5LW5hdmlnYXRvci1ub2RlLS1leHBhbmRlclwiXG4gID48L2k+XG5cbiAgPCEtLSAgUG9wb3ZlciBjb25maXJtICAtLT5cbiAgPGM4eS1wb3BvdmVyLWNvbmZpcm1cbiAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICBjb250YWluZXJDbGFzcz1cIm5hdmlnYXRvci1wb3BvdmVyXCJcbiAgPjwvYzh5LXBvcG92ZXItY29uZmlybT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -2,23 +2,24 @@ import { Component, Input } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  import * as i1 from "../common/icon.directive";
4
4
  import * as i2 from "@angular/common";
5
- import * as i3 from "@angular/cdk/stepper";
6
- import * as i4 from "./stepper.component";
7
- import * as i5 from "./stepper-icon.directive";
8
- import * as i6 from "./stepper-buttons.component";
5
+ import * as i3 from "../common/component-outlet.directive";
6
+ import * as i4 from "@angular/cdk/stepper";
7
+ import * as i5 from "./stepper.component";
8
+ import * as i6 from "./stepper-icon.directive";
9
+ import * as i7 from "./stepper-buttons.component";
9
10
  export class StepperOutletComponent {
10
11
  constructor() {
11
12
  this.showDefaultButtons = true;
12
13
  }
13
14
  }
14
15
  StepperOutletComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: StepperOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15
- StepperOutletComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: StepperOutletComponent, selector: "c8y-stepper-outlet", inputs: { steps: "steps", showDefaultButtons: "showDefaultButtons" }, ngImport: i0, template: "<c8y-stepper \n [customClasses]=\"['p-t-32', 'p-b-32', 'm-l-48', 'm-r-48']\" \n class=\"d-flex d-col fit-h\"\n [disableDefaultIcons]=\"{ edit: true, done: false }\"\n>\n <cdk-step\n *ngFor=\"let step of steps\"\n [label]=\"step.label\"\n [state]=\"step.state\"\n [completed]=\"step.completed\"\n [optional]=\"!step.required\"\n >\n <ng-container *ngComponentOutlet=\"step.component; injector: step.injector\"></ng-container>\n <c8y-stepper-buttons *ngIf=\"showDefaultButtons\"></c8y-stepper-buttons>\n <ng-template c8yStepperIcon=\"error\">\n <span c8yIcon=\"error\"></span>\n </ng-template>\n <ng-template c8yStepperIcon=\"warning\">\n <span c8yIcon=\"warning\"></span>\n </ng-template>\n <ng-template c8yStepperIcon=\"done\">\n <span c8yIcon=\"check\"></span>\n </ng-template>\n </cdk-step>\n</c8y-stepper>\n", dependencies: [{ kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.CdkStep, selector: "cdk-step", inputs: ["stepControl", "label", "errorMessage", "aria-label", "aria-labelledby", "state", "editable", "optional", "completed", "hasError"], outputs: ["interacted"], exportAs: ["cdkStep"] }, { kind: "component", type: i4.C8yStepper, selector: "c8y-stepper", inputs: ["disableDefaultIcons", "disableProgressButtons", "customClasses", "hideStepProgress", "useStepLabelsAsTitlesOnly"], outputs: ["onStepChange"] }, { kind: "directive", type: i5.C8yStepperIcon, selector: "ng-template[c8yStepperIcon]", inputs: ["c8yStepperIcon"] }, { kind: "component", type: i6.C8yStepperButtons, selector: "c8y-stepper-buttons", inputs: ["labels", "pending", "disabled", "showButtons"], outputs: ["onCancel", "onNext", "onBack", "onCustom"] }] });
16
+ StepperOutletComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: StepperOutletComponent, selector: "c8y-stepper-outlet", inputs: { steps: "steps", showDefaultButtons: "showDefaultButtons" }, ngImport: i0, template: "<c8y-stepper\n [customClasses]=\"['p-t-32', 'p-b-32', 'm-l-48', 'm-r-48']\"\n class=\"d-flex d-col fit-h\"\n [disableDefaultIcons]=\"{ edit: true, done: false }\"\n>\n <cdk-step\n *ngFor=\"let step of steps\"\n [label]=\"step.label\"\n [state]=\"step.state\"\n [completed]=\"step.completed\"\n [optional]=\"!step.required\"\n >\n <ng-container *c8yComponentOutlet=\"step.component; environmentInjector: step.injector\"></ng-container>\n <c8y-stepper-buttons *ngIf=\"showDefaultButtons\"></c8y-stepper-buttons>\n <ng-template c8yStepperIcon=\"error\">\n <span c8yIcon=\"error\"></span>\n </ng-template>\n <ng-template c8yStepperIcon=\"warning\">\n <span c8yIcon=\"warning\"></span>\n </ng-template>\n <ng-template c8yStepperIcon=\"done\">\n <span c8yIcon=\"check\"></span>\n </ng-template>\n </cdk-step>\n</c8y-stepper>\n", dependencies: [{ kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.C8yComponentOutlet, selector: "[c8yComponentOutlet]", inputs: ["c8yComponentOutlet", "c8yComponentOutletInjector", "c8yComponentOutletEnvironmentInjector"] }, { kind: "component", type: i4.CdkStep, selector: "cdk-step", inputs: ["stepControl", "label", "errorMessage", "aria-label", "aria-labelledby", "state", "editable", "optional", "completed", "hasError"], outputs: ["interacted"], exportAs: ["cdkStep"] }, { kind: "component", type: i5.C8yStepper, selector: "c8y-stepper", inputs: ["disableDefaultIcons", "disableProgressButtons", "customClasses", "hideStepProgress", "useStepLabelsAsTitlesOnly"], outputs: ["onStepChange"] }, { kind: "directive", type: i6.C8yStepperIcon, selector: "ng-template[c8yStepperIcon]", inputs: ["c8yStepperIcon"] }, { kind: "component", type: i7.C8yStepperButtons, selector: "c8y-stepper-buttons", inputs: ["labels", "pending", "disabled", "showButtons"], outputs: ["onCancel", "onNext", "onBack", "onCustom"] }] });
16
17
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: StepperOutletComponent, decorators: [{
17
18
  type: Component,
18
- args: [{ selector: 'c8y-stepper-outlet', template: "<c8y-stepper \n [customClasses]=\"['p-t-32', 'p-b-32', 'm-l-48', 'm-r-48']\" \n class=\"d-flex d-col fit-h\"\n [disableDefaultIcons]=\"{ edit: true, done: false }\"\n>\n <cdk-step\n *ngFor=\"let step of steps\"\n [label]=\"step.label\"\n [state]=\"step.state\"\n [completed]=\"step.completed\"\n [optional]=\"!step.required\"\n >\n <ng-container *ngComponentOutlet=\"step.component; injector: step.injector\"></ng-container>\n <c8y-stepper-buttons *ngIf=\"showDefaultButtons\"></c8y-stepper-buttons>\n <ng-template c8yStepperIcon=\"error\">\n <span c8yIcon=\"error\"></span>\n </ng-template>\n <ng-template c8yStepperIcon=\"warning\">\n <span c8yIcon=\"warning\"></span>\n </ng-template>\n <ng-template c8yStepperIcon=\"done\">\n <span c8yIcon=\"check\"></span>\n </ng-template>\n </cdk-step>\n</c8y-stepper>\n" }]
19
+ args: [{ selector: 'c8y-stepper-outlet', template: "<c8y-stepper\n [customClasses]=\"['p-t-32', 'p-b-32', 'm-l-48', 'm-r-48']\"\n class=\"d-flex d-col fit-h\"\n [disableDefaultIcons]=\"{ edit: true, done: false }\"\n>\n <cdk-step\n *ngFor=\"let step of steps\"\n [label]=\"step.label\"\n [state]=\"step.state\"\n [completed]=\"step.completed\"\n [optional]=\"!step.required\"\n >\n <ng-container *c8yComponentOutlet=\"step.component; environmentInjector: step.injector\"></ng-container>\n <c8y-stepper-buttons *ngIf=\"showDefaultButtons\"></c8y-stepper-buttons>\n <ng-template c8yStepperIcon=\"error\">\n <span c8yIcon=\"error\"></span>\n </ng-template>\n <ng-template c8yStepperIcon=\"warning\">\n <span c8yIcon=\"warning\"></span>\n </ng-template>\n <ng-template c8yStepperIcon=\"done\">\n <span c8yIcon=\"check\"></span>\n </ng-template>\n </cdk-step>\n</c8y-stepper>\n" }]
19
20
  }], propDecorators: { steps: [{
20
21
  type: Input
21
22
  }], showDefaultButtons: [{
22
23
  type: Input
23
24
  }] } });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci1vdXRsZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zdGVwcGVyL3N0ZXBwZXItb3V0bGV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2NvcmUvc3RlcHBlci9zdGVwcGVyLW91dGxldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFPakQsTUFBTSxPQUFPLHNCQUFzQjtJQUpuQztRQVFFLHVCQUFrQixHQUFHLElBQUksQ0FBQztLQUMzQjs7bUhBTFksc0JBQXNCO3VHQUF0QixzQkFBc0IsZ0lDUG5DLHcyQkF5QkE7MkZEbEJhLHNCQUFzQjtrQkFKbEMsU0FBUzsrQkFDRSxvQkFBb0I7OEJBSzlCLEtBQUs7c0JBREosS0FBSztnQkFHTixrQkFBa0I7c0JBRGpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbmRleGVkU3RlcCB9IGZyb20gJy4vc3RlcHBlci5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1zdGVwcGVyLW91dGxldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwcGVyLW91dGxldC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgU3RlcHBlck91dGxldENvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIHN0ZXBzOiBJbmRleGVkU3RlcFtdO1xuICBASW5wdXQoKVxuICBzaG93RGVmYXVsdEJ1dHRvbnMgPSB0cnVlO1xufVxuIiwiPGM4eS1zdGVwcGVyIFxuICBbY3VzdG9tQ2xhc3Nlc109XCJbJ3AtdC0zMicsICdwLWItMzInLCAnbS1sLTQ4JywgJ20tci00OCddXCIgXG4gIGNsYXNzPVwiZC1mbGV4IGQtY29sIGZpdC1oXCJcbiAgW2Rpc2FibGVEZWZhdWx0SWNvbnNdPVwieyBlZGl0OiB0cnVlLCBkb25lOiBmYWxzZSB9XCJcbj5cbiAgPGNkay1zdGVwXG4gICAgKm5nRm9yPVwibGV0IHN0ZXAgb2Ygc3RlcHNcIlxuICAgIFtsYWJlbF09XCJzdGVwLmxhYmVsXCJcbiAgICBbc3RhdGVdPVwic3RlcC5zdGF0ZVwiXG4gICAgW2NvbXBsZXRlZF09XCJzdGVwLmNvbXBsZXRlZFwiXG4gICAgW29wdGlvbmFsXT1cIiFzdGVwLnJlcXVpcmVkXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwic3RlcC5jb21wb25lbnQ7IGluamVjdG9yOiBzdGVwLmluamVjdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgPGM4eS1zdGVwcGVyLWJ1dHRvbnMgKm5nSWY9XCJzaG93RGVmYXVsdEJ1dHRvbnNcIj48L2M4eS1zdGVwcGVyLWJ1dHRvbnM+XG4gICAgPG5nLXRlbXBsYXRlIGM4eVN0ZXBwZXJJY29uPVwiZXJyb3JcIj5cbiAgICAgIDxzcGFuIGM4eUljb249XCJlcnJvclwiPjwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBjOHlTdGVwcGVySWNvbj1cIndhcm5pbmdcIj5cbiAgICAgIDxzcGFuIGM4eUljb249XCJ3YXJuaW5nXCI+PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIGM4eVN0ZXBwZXJJY29uPVwiZG9uZVwiPlxuICAgICAgPHNwYW4gYzh5SWNvbj1cImNoZWNrXCI+PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvY2RrLXN0ZXA+XG48L2M4eS1zdGVwcGVyPlxuIl19
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci1vdXRsZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zdGVwcGVyL3N0ZXBwZXItb3V0bGV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2NvcmUvc3RlcHBlci9zdGVwcGVyLW91dGxldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBT2pELE1BQU0sT0FBTyxzQkFBc0I7SUFKbkM7UUFRRSx1QkFBa0IsR0FBRyxJQUFJLENBQUM7S0FDM0I7O21IQUxZLHNCQUFzQjt1R0FBdEIsc0JBQXNCLGdJQ1BuQyxrM0JBeUJBOzJGRGxCYSxzQkFBc0I7a0JBSmxDLFNBQVM7K0JBQ0Usb0JBQW9COzhCQUs5QixLQUFLO3NCQURKLEtBQUs7Z0JBR04sa0JBQWtCO3NCQURqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW5kZXhlZFN0ZXAgfSBmcm9tICcuL3N0ZXBwZXIubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktc3RlcHBlci1vdXRsZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RlcHBlci1vdXRsZXQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFN0ZXBwZXJPdXRsZXRDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBzdGVwczogSW5kZXhlZFN0ZXBbXTtcbiAgQElucHV0KClcbiAgc2hvd0RlZmF1bHRCdXR0b25zID0gdHJ1ZTtcbn1cbiIsIjxjOHktc3RlcHBlclxuICBbY3VzdG9tQ2xhc3Nlc109XCJbJ3AtdC0zMicsICdwLWItMzInLCAnbS1sLTQ4JywgJ20tci00OCddXCJcbiAgY2xhc3M9XCJkLWZsZXggZC1jb2wgZml0LWhcIlxuICBbZGlzYWJsZURlZmF1bHRJY29uc109XCJ7IGVkaXQ6IHRydWUsIGRvbmU6IGZhbHNlIH1cIlxuPlxuICA8Y2RrLXN0ZXBcbiAgICAqbmdGb3I9XCJsZXQgc3RlcCBvZiBzdGVwc1wiXG4gICAgW2xhYmVsXT1cInN0ZXAubGFiZWxcIlxuICAgIFtzdGF0ZV09XCJzdGVwLnN0YXRlXCJcbiAgICBbY29tcGxldGVkXT1cInN0ZXAuY29tcGxldGVkXCJcbiAgICBbb3B0aW9uYWxdPVwiIXN0ZXAucmVxdWlyZWRcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqYzh5Q29tcG9uZW50T3V0bGV0PVwic3RlcC5jb21wb25lbnQ7IGVudmlyb25tZW50SW5qZWN0b3I6IHN0ZXAuaW5qZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8Yzh5LXN0ZXBwZXItYnV0dG9ucyAqbmdJZj1cInNob3dEZWZhdWx0QnV0dG9uc1wiPjwvYzh5LXN0ZXBwZXItYnV0dG9ucz5cbiAgICA8bmctdGVtcGxhdGUgYzh5U3RlcHBlckljb249XCJlcnJvclwiPlxuICAgICAgPHNwYW4gYzh5SWNvbj1cImVycm9yXCI+PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIGM4eVN0ZXBwZXJJY29uPVwid2FybmluZ1wiPlxuICAgICAgPHNwYW4gYzh5SWNvbj1cIndhcm5pbmdcIj48L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgYzh5U3RlcHBlckljb249XCJkb25lXCI+XG4gICAgICA8c3BhbiBjOHlJY29uPVwiY2hlY2tcIj48L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9jZGstc3RlcD5cbjwvYzh5LXN0ZXBwZXI+XG4iXX0=
@@ -8,7 +8,8 @@ import * as i1 from "@angular/router";
8
8
  import * as i2 from "../header/header.service";
9
9
  import * as i3 from "../common/icon.directive";
10
10
  import * as i4 from "@angular/common";
11
- import * as i5 from "../i18n/c8y-translate.pipe";
11
+ import * as i5 from "../common/component-outlet.directive";
12
+ import * as i6 from "../i18n/c8y-translate.pipe";
12
13
  export class TabsOutletComponent {
13
14
  get isNavigatorOpen() {
14
15
  return this.navigatorOpen;
@@ -100,10 +101,10 @@ export class TabsOutletComponent {
100
101
  }
101
102
  }
102
103
  TabsOutletComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TabsOutletComponent, deps: [{ token: i1.Router }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i2.HeaderService }], target: i0.ɵɵFactoryTarget.Component });
103
- TabsOutletComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: { tabs: "tabs", orientation: "orientation", navigatorOpen: "navigatorOpen" }, host: { properties: { "class.navigator-open": "this.isNavigatorOpen", "class.page-tabs": "this.hasTabs", "class.page-tabs-horizontal": "this.isHorizontal", "class.page-tabs-vertical": "this.isVertical" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef, static: true }, { propertyName: "leftBtn", first: true, predicate: ["left"], descendants: true, read: ElementRef }, { propertyName: "rightBtn", first: true, predicate: ["right"], descendants: true, read: ElementRef }, { propertyName: "tabsContainer", first: true, predicate: ["tabsContainer"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"tabContainer hidden-xs\"\n #container\n>\n <button\n class=\"tabs-slider tabs-slider-left\"\n title=\"{{ 'Scroll to the left' | translate }}\"\n type=\"button\"\n #left\n *ngIf=\"showLeft || showRight\"\n [disabled]=\"!showLeft\"\n (click)=\"scroll('left')\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n </button>\n <button\n class=\"tabs-slider tabs-slider-right\"\n title=\"{{ 'Scroll to the right' | translate }}\"\n type=\"button\"\n #right\n *ngIf=\"showRight || showLeft\"\n [disabled]=\"!showRight\"\n (click)=\"scroll('right')\"\n >\n <i [c8yIcon]=\"'chevron-right'\"></i>\n </button>\n <div\n class=\"nav nav-tabs nav-tabsc8y\"\n role=\"list\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <div\n role=\"listitem\"\n [ngClass]=\"{ active: rla?.isActive }\"\n *ngIf=\"!tab.component\"\n >\n <a\n title=\"{{ tab?.label | translate }}\"\n [routerLink]=\"tab.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n >\n <i\n [c8yIcon]=\"tab?.icon\"\n *ngIf=\"!tab.template && tab?.icon\"\n ></i>\n <span *ngIf=\"!tab.template && !tab.component\">\n {{ tab?.label | translate }}\n </span>\n </a>\n <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n </div>\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </div>\n</div>\n\n<div class=\"visible-xs mobile-tabs\">\n <ul class=\"list-unstyled d-flex m-b-0\">\n <li class=\"c8y-select-wrapper flex-grow\">\n <select\n (change)=\"navigateTo($event.target.value)\"\n #select\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <option\n *ngIf=\"!tab.component\"\n [value]=\"tab.path\"\n [selected]=\"isActive(tab)\"\n >\n {{ tab?.label | translate }}\n </option>\n </ng-container>\n </select>\n </li>\n <ng-container *ngFor=\"let tab of tabs\">\n <ng-container *ngIf=\"tab.component\">\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
104
+ TabsOutletComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: { tabs: "tabs", orientation: "orientation", navigatorOpen: "navigatorOpen" }, host: { properties: { "class.navigator-open": "this.isNavigatorOpen", "class.page-tabs": "this.hasTabs", "class.page-tabs-horizontal": "this.isHorizontal", "class.page-tabs-vertical": "this.isVertical" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef, static: true }, { propertyName: "leftBtn", first: true, predicate: ["left"], descendants: true, read: ElementRef }, { propertyName: "rightBtn", first: true, predicate: ["right"], descendants: true, read: ElementRef }, { propertyName: "tabsContainer", first: true, predicate: ["tabsContainer"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"tabContainer hidden-xs\"\n #container\n>\n <button\n class=\"tabs-slider tabs-slider-left\"\n title=\"{{ 'Scroll to the left' | translate }}\"\n type=\"button\"\n #left\n *ngIf=\"showLeft || showRight\"\n [disabled]=\"!showLeft\"\n (click)=\"scroll('left')\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n </button>\n <button\n class=\"tabs-slider tabs-slider-right\"\n title=\"{{ 'Scroll to the right' | translate }}\"\n type=\"button\"\n #right\n *ngIf=\"showRight || showLeft\"\n [disabled]=\"!showRight\"\n (click)=\"scroll('right')\"\n >\n <i [c8yIcon]=\"'chevron-right'\"></i>\n </button>\n <div\n class=\"nav nav-tabs nav-tabsc8y\"\n role=\"list\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <div\n role=\"listitem\"\n [ngClass]=\"{ active: rla?.isActive }\"\n *ngIf=\"!tab.component\"\n >\n <a\n title=\"{{ tab?.label | translate }}\"\n [routerLink]=\"tab.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n >\n <i\n [c8yIcon]=\"tab?.icon\"\n *ngIf=\"!tab.template && tab?.icon\"\n ></i>\n <span *ngIf=\"!tab.template && !tab.component\">\n {{ tab?.label | translate }}\n </span>\n </a>\n <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n </div>\n <ng-container *c8yComponentOutlet=\"tab.component; environmentInjector: tab.injector\"></ng-container>\n </ng-container>\n </div>\n</div>\n\n<div class=\"visible-xs mobile-tabs\">\n <ul class=\"list-unstyled d-flex m-b-0\">\n <li class=\"c8y-select-wrapper flex-grow\">\n <select\n (change)=\"navigateTo($event.target.value)\"\n #select\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <option\n *ngIf=\"!tab.component\"\n [value]=\"tab.path\"\n [selected]=\"isActive(tab)\"\n >\n {{ tab?.label | translate }}\n </option>\n </ng-container>\n </select>\n </li>\n <ng-container *ngFor=\"let tab of tabs\">\n <ng-container *ngIf=\"tab.component\">\n <ng-container *c8yComponentOutlet=\"tab.component; environmentInjector: tab.injector\"></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.C8yComponentOutlet, selector: "[c8yComponentOutlet]", inputs: ["c8yComponentOutlet", "c8yComponentOutletInjector", "c8yComponentOutletEnvironmentInjector"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: i6.C8yTranslatePipe, name: "translate" }] });
104
105
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TabsOutletComponent, decorators: [{
105
106
  type: Component,
106
- args: [{ selector: 'c8y-tabs-outlet,c8y-ui-tabs', template: "<div\n class=\"tabContainer hidden-xs\"\n #container\n>\n <button\n class=\"tabs-slider tabs-slider-left\"\n title=\"{{ 'Scroll to the left' | translate }}\"\n type=\"button\"\n #left\n *ngIf=\"showLeft || showRight\"\n [disabled]=\"!showLeft\"\n (click)=\"scroll('left')\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n </button>\n <button\n class=\"tabs-slider tabs-slider-right\"\n title=\"{{ 'Scroll to the right' | translate }}\"\n type=\"button\"\n #right\n *ngIf=\"showRight || showLeft\"\n [disabled]=\"!showRight\"\n (click)=\"scroll('right')\"\n >\n <i [c8yIcon]=\"'chevron-right'\"></i>\n </button>\n <div\n class=\"nav nav-tabs nav-tabsc8y\"\n role=\"list\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <div\n role=\"listitem\"\n [ngClass]=\"{ active: rla?.isActive }\"\n *ngIf=\"!tab.component\"\n >\n <a\n title=\"{{ tab?.label | translate }}\"\n [routerLink]=\"tab.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n >\n <i\n [c8yIcon]=\"tab?.icon\"\n *ngIf=\"!tab.template && tab?.icon\"\n ></i>\n <span *ngIf=\"!tab.template && !tab.component\">\n {{ tab?.label | translate }}\n </span>\n </a>\n <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n </div>\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </div>\n</div>\n\n<div class=\"visible-xs mobile-tabs\">\n <ul class=\"list-unstyled d-flex m-b-0\">\n <li class=\"c8y-select-wrapper flex-grow\">\n <select\n (change)=\"navigateTo($event.target.value)\"\n #select\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <option\n *ngIf=\"!tab.component\"\n [value]=\"tab.path\"\n [selected]=\"isActive(tab)\"\n >\n {{ tab?.label | translate }}\n </option>\n </ng-container>\n </select>\n </li>\n <ng-container *ngFor=\"let tab of tabs\">\n <ng-container *ngIf=\"tab.component\">\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</div>\n" }]
107
+ args: [{ selector: 'c8y-tabs-outlet,c8y-ui-tabs', template: "<div\n class=\"tabContainer hidden-xs\"\n #container\n>\n <button\n class=\"tabs-slider tabs-slider-left\"\n title=\"{{ 'Scroll to the left' | translate }}\"\n type=\"button\"\n #left\n *ngIf=\"showLeft || showRight\"\n [disabled]=\"!showLeft\"\n (click)=\"scroll('left')\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n </button>\n <button\n class=\"tabs-slider tabs-slider-right\"\n title=\"{{ 'Scroll to the right' | translate }}\"\n type=\"button\"\n #right\n *ngIf=\"showRight || showLeft\"\n [disabled]=\"!showRight\"\n (click)=\"scroll('right')\"\n >\n <i [c8yIcon]=\"'chevron-right'\"></i>\n </button>\n <div\n class=\"nav nav-tabs nav-tabsc8y\"\n role=\"list\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <div\n role=\"listitem\"\n [ngClass]=\"{ active: rla?.isActive }\"\n *ngIf=\"!tab.component\"\n >\n <a\n title=\"{{ tab?.label | translate }}\"\n [routerLink]=\"tab.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n >\n <i\n [c8yIcon]=\"tab?.icon\"\n *ngIf=\"!tab.template && tab?.icon\"\n ></i>\n <span *ngIf=\"!tab.template && !tab.component\">\n {{ tab?.label | translate }}\n </span>\n </a>\n <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n </div>\n <ng-container *c8yComponentOutlet=\"tab.component; environmentInjector: tab.injector\"></ng-container>\n </ng-container>\n </div>\n</div>\n\n<div class=\"visible-xs mobile-tabs\">\n <ul class=\"list-unstyled d-flex m-b-0\">\n <li class=\"c8y-select-wrapper flex-grow\">\n <select\n (change)=\"navigateTo($event.target.value)\"\n #select\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <option\n *ngIf=\"!tab.component\"\n [value]=\"tab.path\"\n [selected]=\"isActive(tab)\"\n >\n {{ tab?.label | translate }}\n </option>\n </ng-container>\n </select>\n </li>\n <ng-container *ngFor=\"let tab of tabs\">\n <ng-container *ngIf=\"tab.component\">\n <ng-container *c8yComponentOutlet=\"tab.component; environmentInjector: tab.injector\"></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</div>\n" }]
107
108
  }], ctorParameters: function () { return [{ type: i1.Router }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i2.HeaderService }]; }, propDecorators: { tabs: [{
108
109
  type: Input
109
110
  }], orientation: [{
@@ -135,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
135
136
  type: ViewChild,
136
137
  args: ['tabsContainer', { read: ElementRef, static: false }]
137
138
  }] } });
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy1vdXRsZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS90YWJzL3RhYnMtb3V0bGV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2NvcmUvdGFicy90YWJzLW91dGxldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsRUFDVixTQUFTLEVBS1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFnQixlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7OztBQU16RCxNQUFNLE9BQU8sbUJBQW1CO0lBTTlCLElBQXlDLGVBQWU7UUFDdEQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFvQyxPQUFPO1FBQ3pDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1NBQzFEO1FBQ0QsT0FBTyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxJQUErQyxZQUFZO1FBQ3pE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QXNCO2dCQUdDLE9BQU87c0JBQTFDLFdBQVc7dUJBQUMsaUJBQWlCO2dCQU9pQixZQUFZO3NCQUExRCxXQUFXO3VCQUFDLDRCQUE0QjtnQkFHSSxVQUFVO3NCQUF0RCxXQUFXO3VCQUFDLDBCQUEwQjtnQkFHNkIsU0FBUztzQkFBNUUsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ00sT0FBTztzQkFBdEUsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ1csUUFBUTtzQkFBeEUsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRS9DLGFBQWE7c0JBRHBCLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgSG9zdEJpbmRpbmcsXG4gIFJlbmRlcmVyMixcbiAgRWxlbWVudFJlZixcbiAgVmlld0NoaWxkLFxuICBPbkRlc3Ryb3ksXG4gIEFmdGVyQ29udGVudEluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZyb21FdmVudFBhdHRlcm4sIGZyb21FdmVudCwgbWVyZ2UsIFN1YnNjcmlwdGlvbiwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVGFiIH0gZnJvbSAnLi90YWIubW9kZWwnO1xuaW1wb3J0IHsgSGVhZGVyU2VydmljZSB9IGZyb20gJy4uL2hlYWRlci9oZWFkZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS10YWJzLW91dGxldCxjOHktdWktdGFicycsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJzLW91dGxldC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVGFic091dGxldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgdGFiczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgb3JpZW50YXRpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgPSAndmVydGljYWwnO1xuICBASW5wdXQoKSBuYXZpZ2F0b3JPcGVuID0gZmFsc2U7XG4gIHNob3dMZWZ0ID0gZmFsc2U7XG4gIHNob3dSaWdodCA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5hdmlnYXRvci1vcGVuJykgZ2V0IGlzTmF2aWdhdG9yT3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0b3JPcGVuO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MucGFnZS10YWJzJykgZ2V0IGhhc1RhYnMoKSB7XG4gICAgbGV0IHZpc2libGVUYWJzID0gW107XG4gICAgaWYgKHRoaXMudGFicykge1xuICAgICAgdmlzaWJsZVRhYnMgPSB0aGlzLnRhYnMuZmlsdGVyKHRhYiA9PiB0YWIuaGlkZSAhPT0gdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlVGFicy5sZW5ndGggPiAxIHx8IHZpc2libGVUYWJzLmZpbmQodGFiID0+IHRhYi5zaG93QWx3YXlzKTtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnBhZ2UtdGFicy1ob3Jpem9udGFsJykgZ2V0IGlzSG9yaXpvbnRhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MucGFnZS10YWJzLXZlcnRpY2FsJykgZ2V0IGlzVmVydGljYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMub3JpZW50YXRpb24gIT09ICdob3Jpem9udGFsJztcbiAgfVxuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIGNvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbGVmdCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIGxlZnRCdG46IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3JpZ2h0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlIH0pIHByaXZhdGUgcmlnaHRCdG46IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RhYnNDb250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgcHJpdmF0ZSB0YWJzQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuICBwcml2YXRlIHNjcm9sbFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHRhYnNDaGFuZ2VzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFiW10+KFtdKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgaGVhZGVyOiBIZWFkZXJTZXJ2aWNlXG4gICkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMudGFicykge1xuICAgICAgdGhpcy50YWJzQ2hhbmdlcyQubmV4dCh0aGlzLnRhYnMpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBpc0FjdGl2ZSh0YWI6IFRhYikge1xuICAgIGlmICh0YWIgJiYgdGFiLnBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlci5pc0FjdGl2ZSh0YWIucGF0aCwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbmF2aWdhdGVUbyhwYXRoKSB7XG4gICAgdGhpcy5oZWFkZXIudG9nZ2xlKCk7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3BhdGhdKTtcbiAgfVxuXG4gIHNjcm9sbChkaXJlY3Rpb246ICdyaWdodCcgfCAnbGVmdCcgPSAncmlnaHQnKSB7XG4gICAgY29uc3QgeyB3aWR0aFNjcm9sbCwgd2lkdGgsIHNjcm9sbExlZnQgfSA9IHRoaXMuZ2V0RGltZW5zaW9ucygpO1xuICAgIGNvbnN0IG11bHRpcGxpZXIgPSBkaXJlY3Rpb24gPT09ICdsZWZ0JyA/IC0xIDogMTtcblxuICAgIGxldCB0YXJnZXRTY3JvbGwgPSBzY3JvbGxMZWZ0ICsgd2lkdGggKiBtdWx0aXBsaWVyO1xuICAgIGlmICh0YXJnZXRTY3JvbGwgPCAwKSB7XG4gICAgICB0YXJnZXRTY3JvbGwgPSAwO1xuICAgIH1cbiAgICBpZiAodGFyZ2V0U2Nyb2xsID4gd2lkdGhTY3JvbGwgLSB3aWR0aCkge1xuICAgICAgdGFyZ2V0U2Nyb2xsID0gd2lkdGhTY3JvbGwgLSB3aWR0aDtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGFyZ2V0U2Nyb2xsO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxTdWJzY3JpYmUoKSB7XG4gICAgbGV0IHVubGlzdGVuO1xuICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uID0gbWVyZ2UoXG4gICAgICB0aGlzLnRhYnNDaGFuZ2VzJCxcbiAgICAgIGZyb21FdmVudCh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJyksXG4gICAgICBmcm9tRXZlbnRQYXR0ZXJuKFxuICAgICAgICAoaGFuZGxlcjogYW55KSA9PiB7XG4gICAgICAgICAgdW5saXN0ZW4gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsIGhhbmRsZXIpO1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB1bmxpc3RlbigpXG4gICAgICApXG4gICAgKVxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDI1MCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlU2Nyb2xsKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGwoKSB7XG4gICAgY29uc3QgeyB3aWR0aFNjcm9sbCwgd2lkdGgsIHNjcm9sbExlZnQgfSA9IHRoaXMuZ2V0RGltZW5zaW9ucygpO1xuICAgIHRoaXMuc2hvd0xlZnQgPSAhIXNjcm9sbExlZnQ7XG4gICAgdGhpcy5zaG93UmlnaHQgPSB3aWR0aFNjcm9sbCA+IHdpZHRoICsgc2Nyb2xsTGVmdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGltZW5zaW9ucygpIHtcbiAgICBjb25zdCBlbFRhYnMgPSB0aGlzLnRhYnNDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBlbCA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgd2lkdGhTY3JvbGwgPSBlbFRhYnMuc2Nyb2xsV2lkdGg7XG4gICAgY29uc3Qgd2lkdGggPSBlbC5jbGllbnRXaWR0aDtcbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gZWwuc2Nyb2xsTGVmdDtcbiAgICByZXR1cm4geyB3aWR0aFNjcm9sbCwgd2lkdGgsIHNjcm9sbExlZnQgfTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInRhYkNvbnRhaW5lciBoaWRkZW4teHNcIlxuICAjY29udGFpbmVyXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cInRhYnMtc2xpZGVyIHRhYnMtc2xpZGVyLWxlZnRcIlxuICAgIHRpdGxlPVwie3sgJ1Njcm9sbCB0byB0aGUgbGVmdCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgICNsZWZ0XG4gICAgKm5nSWY9XCJzaG93TGVmdCB8fCBzaG93UmlnaHRcIlxuICAgIFtkaXNhYmxlZF09XCIhc2hvd0xlZnRcIlxuICAgIChjbGljayk9XCJzY3JvbGwoJ2xlZnQnKVwiXG4gID5cbiAgICA8aSBbYzh5SWNvbl09XCInY2hldnJvbi1sZWZ0J1wiPjwvaT5cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cInRhYnMtc2xpZGVyIHRhYnMtc2xpZGVyLXJpZ2h0XCJcbiAgICB0aXRsZT1cInt7ICdTY3JvbGwgdG8gdGhlIHJpZ2h0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgI3JpZ2h0XG4gICAgKm5nSWY9XCJzaG93UmlnaHQgfHwgc2hvd0xlZnRcIlxuICAgIFtkaXNhYmxlZF09XCIhc2hvd1JpZ2h0XCJcbiAgICAoY2xpY2spPVwic2Nyb2xsKCdyaWdodCcpXCJcbiAgPlxuICAgIDxpIFtjOHlJY29uXT1cIidjaGV2cm9uLXJpZ2h0J1wiPjwvaT5cbiAgPC9idXR0b24+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm5hdiBuYXYtdGFicyBuYXYtdGFic2M4eVwiXG4gICAgcm9sZT1cImxpc3RcIlxuICAgICN0YWJzQ29udGFpbmVyXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFic1wiPlxuICAgICAgPGRpdlxuICAgICAgICByb2xlPVwibGlzdGl0ZW1cIlxuICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogcmxhPy5pc0FjdGl2ZSB9XCJcbiAgICAgICAgKm5nSWY9XCIhdGFiLmNvbXBvbmVudFwiXG4gICAgICA+XG4gICAgICAgIDxhXG4gICAgICAgICAgdGl0bGU9XCJ7eyB0YWI/LmxhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBbcm91dGVyTGlua109XCJ0YWIucGF0aFwiXG4gICAgICAgICAgcm91dGVyTGlua0FjdGl2ZVxuICAgICAgICAgICNybGE9XCJyb3V0ZXJMaW5rQWN0aXZlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBbYzh5SWNvbl09XCJ0YWI/Lmljb25cIlxuICAgICAgICAgICAgKm5nSWY9XCIhdGFiLnRlbXBsYXRlICYmIHRhYj8uaWNvblwiXG4gICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWIudGVtcGxhdGUgJiYgIXRhYi5jb21wb25lbnRcIj5cbiAgICAgICAgICAgIHt7IHRhYj8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYi50ZW1wbGF0ZTsgaW5qZWN0b3I6IHRhYi5pbmplY3RvclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cInRhYi5jb21wb25lbnQ7IGluamVjdG9yOiB0YWIuaW5qZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInZpc2libGUteHMgbW9iaWxlLXRhYnNcIj5cbiAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBkLWZsZXggbS1iLTBcIj5cbiAgICA8bGkgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXIgZmxleC1ncm93XCI+XG4gICAgICA8c2VsZWN0XG4gICAgICAgIChjaGFuZ2UpPVwibmF2aWdhdGVUbygkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICNzZWxlY3RcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIj5cbiAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAqbmdJZj1cIiF0YWIuY29tcG9uZW50XCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ0YWIucGF0aFwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRdPVwiaXNBY3RpdmUodGFiKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdGFiPy5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvc2VsZWN0PlxuICAgIDwvbGk+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWIuY29tcG9uZW50XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwidGFiLmNvbXBvbmVudDsgaW5qZWN0b3I6IHRhYi5pbmplY3RvclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdWw+XG48L2Rpdj5cbiJdfQ==
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy1vdXRsZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS90YWJzL3RhYnMtb3V0bGV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2NvcmUvdGFicy90YWJzLW91dGxldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsRUFDVixTQUFTLEVBS1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFnQixlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7QUFNekQsTUFBTSxPQUFPLG1CQUFtQjtJQU05QixJQUF5QyxlQUFlO1FBQ3RELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBb0MsT0FBTztRQUN6QyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztTQUMxRDtRQUNELE9BQU8sV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsSUFBK0MsWUFBWTtRQUN6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QUFzQjtnQkFHQyxPQUFPO3NCQUExQyxXQUFXO3VCQUFDLGlCQUFpQjtnQkFPaUIsWUFBWTtzQkFBMUQsV0FBVzt1QkFBQyw0QkFBNEI7Z0JBR0ksVUFBVTtzQkFBdEQsV0FBVzt1QkFBQywwQkFBMEI7Z0JBRzZCLFNBQVM7c0JBQTVFLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNNLE9BQU87c0JBQXRFLFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNXLFFBQVE7c0JBQXhFLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUUvQyxhQUFhO3NCQURwQixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIEhvc3RCaW5kaW5nLFxuICBSZW5kZXJlcjIsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZCxcbiAgT25EZXN0cm95LFxuICBBZnRlckNvbnRlbnRJbml0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmcm9tRXZlbnRQYXR0ZXJuLCBmcm9tRXZlbnQsIG1lcmdlLCBTdWJzY3JpcHRpb24sIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRhYiB9IGZyb20gJy4vdGFiLm1vZGVsJztcbmltcG9ydCB7IEhlYWRlclNlcnZpY2UgfSBmcm9tICcuLi9oZWFkZXIvaGVhZGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktdGFicy1vdXRsZXQsYzh5LXVpLXRhYnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFicy1vdXRsZXQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRhYnNPdXRsZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHRhYnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIG9yaWVudGF0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnID0gJ3ZlcnRpY2FsJztcbiAgQElucHV0KCkgbmF2aWdhdG9yT3BlbiA9IGZhbHNlO1xuICBzaG93TGVmdCA9IGZhbHNlO1xuICBzaG93UmlnaHQgPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5uYXZpZ2F0b3Itb3BlbicpIGdldCBpc05hdmlnYXRvck9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdG9yT3BlbjtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnBhZ2UtdGFicycpIGdldCBoYXNUYWJzKCkge1xuICAgIGxldCB2aXNpYmxlVGFicyA9IFtdO1xuICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgIHZpc2libGVUYWJzID0gdGhpcy50YWJzLmZpbHRlcih0YWIgPT4gdGFiLmhpZGUgIT09IHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZVRhYnMubGVuZ3RoID4gMSB8fCB2aXNpYmxlVGFicy5maW5kKHRhYiA9PiB0YWIuc2hvd0Fsd2F5cyk7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYWdlLXRhYnMtaG9yaXpvbnRhbCcpIGdldCBpc0hvcml6b250YWwoKSB7XG4gICAgcmV0dXJuIHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnBhZ2UtdGFicy12ZXJ0aWNhbCcpIGdldCBpc1ZlcnRpY2FsKCkge1xuICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uICE9PSAnaG9yaXpvbnRhbCc7XG4gIH1cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBjb250YWluZXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2xlZnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSkgcHJpdmF0ZSBsZWZ0QnRuOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdyaWdodCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIHJpZ2h0QnRuOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0YWJzQ29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gIHByaXZhdGUgdGFic0NvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBzY3JvbGxTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB0YWJzQ2hhbmdlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYltdPihbXSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGhlYWRlcjogSGVhZGVyU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnRhYnMpIHtcbiAgICAgIHRoaXMudGFic0NoYW5nZXMkLm5leHQodGhpcy50YWJzKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zY3JvbGxTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgaXNBY3RpdmUodGFiOiBUYWIpIHtcbiAgICBpZiAodGFiICYmIHRhYi5wYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIuaXNBY3RpdmUodGFiLnBhdGgsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG5hdmlnYXRlVG8ocGF0aCkge1xuICAgIHRoaXMuaGVhZGVyLnRvZ2dsZSgpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwYXRoXSk7XG4gIH1cblxuICBzY3JvbGwoZGlyZWN0aW9uOiAncmlnaHQnIHwgJ2xlZnQnID0gJ3JpZ2h0Jykge1xuICAgIGNvbnN0IHsgd2lkdGhTY3JvbGwsIHdpZHRoLCBzY3JvbGxMZWZ0IH0gPSB0aGlzLmdldERpbWVuc2lvbnMoKTtcbiAgICBjb25zdCBtdWx0aXBsaWVyID0gZGlyZWN0aW9uID09PSAnbGVmdCcgPyAtMSA6IDE7XG5cbiAgICBsZXQgdGFyZ2V0U2Nyb2xsID0gc2Nyb2xsTGVmdCArIHdpZHRoICogbXVsdGlwbGllcjtcbiAgICBpZiAodGFyZ2V0U2Nyb2xsIDwgMCkge1xuICAgICAgdGFyZ2V0U2Nyb2xsID0gMDtcbiAgICB9XG4gICAgaWYgKHRhcmdldFNjcm9sbCA+IHdpZHRoU2Nyb2xsIC0gd2lkdGgpIHtcbiAgICAgIHRhcmdldFNjcm9sbCA9IHdpZHRoU2Nyb2xsIC0gd2lkdGg7XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRhcmdldFNjcm9sbDtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsU3Vic2NyaWJlKCkge1xuICAgIGxldCB1bmxpc3RlbjtcbiAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbiA9IG1lcmdlKFxuICAgICAgdGhpcy50YWJzQ2hhbmdlcyQsXG4gICAgICBmcm9tRXZlbnQodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcpLFxuICAgICAgZnJvbUV2ZW50UGF0dGVybihcbiAgICAgICAgKGhhbmRsZXI6IGFueSkgPT4ge1xuICAgICAgICAgIHVubGlzdGVuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCBoYW5kbGVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4gdW5saXN0ZW4oKVxuICAgICAgKVxuICAgIClcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyNTApKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZVNjcm9sbCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsKCkge1xuICAgIGNvbnN0IHsgd2lkdGhTY3JvbGwsIHdpZHRoLCBzY3JvbGxMZWZ0IH0gPSB0aGlzLmdldERpbWVuc2lvbnMoKTtcbiAgICB0aGlzLnNob3dMZWZ0ID0gISFzY3JvbGxMZWZ0O1xuICAgIHRoaXMuc2hvd1JpZ2h0ID0gd2lkdGhTY3JvbGwgPiB3aWR0aCArIHNjcm9sbExlZnQ7XG4gIH1cblxuICBwcml2YXRlIGdldERpbWVuc2lvbnMoKSB7XG4gICAgY29uc3QgZWxUYWJzID0gdGhpcy50YWJzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgZWwgPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHdpZHRoU2Nyb2xsID0gZWxUYWJzLnNjcm9sbFdpZHRoO1xuICAgIGNvbnN0IHdpZHRoID0gZWwuY2xpZW50V2lkdGg7XG4gICAgY29uc3Qgc2Nyb2xsTGVmdCA9IGVsLnNjcm9sbExlZnQ7XG4gICAgcmV0dXJuIHsgd2lkdGhTY3JvbGwsIHdpZHRoLCBzY3JvbGxMZWZ0IH07XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJ0YWJDb250YWluZXIgaGlkZGVuLXhzXCJcbiAgI2NvbnRhaW5lclxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJ0YWJzLXNsaWRlciB0YWJzLXNsaWRlci1sZWZ0XCJcbiAgICB0aXRsZT1cInt7ICdTY3JvbGwgdG8gdGhlIGxlZnQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAjbGVmdFxuICAgICpuZ0lmPVwic2hvd0xlZnQgfHwgc2hvd1JpZ2h0XCJcbiAgICBbZGlzYWJsZWRdPVwiIXNob3dMZWZ0XCJcbiAgICAoY2xpY2spPVwic2Nyb2xsKCdsZWZ0JylcIlxuICA+XG4gICAgPGkgW2M4eUljb25dPVwiJ2NoZXZyb24tbGVmdCdcIj48L2k+XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJ0YWJzLXNsaWRlciB0YWJzLXNsaWRlci1yaWdodFwiXG4gICAgdGl0bGU9XCJ7eyAnU2Nyb2xsIHRvIHRoZSByaWdodCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgICNyaWdodFxuICAgICpuZ0lmPVwic2hvd1JpZ2h0IHx8IHNob3dMZWZ0XCJcbiAgICBbZGlzYWJsZWRdPVwiIXNob3dSaWdodFwiXG4gICAgKGNsaWNrKT1cInNjcm9sbCgncmlnaHQnKVwiXG4gID5cbiAgICA8aSBbYzh5SWNvbl09XCInY2hldnJvbi1yaWdodCdcIj48L2k+XG4gIDwvYnV0dG9uPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJuYXYgbmF2LXRhYnMgbmF2LXRhYnNjOHlcIlxuICAgIHJvbGU9XCJsaXN0XCJcbiAgICAjdGFic0NvbnRhaW5lclxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgcm9sZT1cImxpc3RpdGVtXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IHJsYT8uaXNBY3RpdmUgfVwiXG4gICAgICAgICpuZ0lmPVwiIXRhYi5jb21wb25lbnRcIlxuICAgICAgPlxuICAgICAgICA8YVxuICAgICAgICAgIHRpdGxlPVwie3sgdGFiPy5sYWJlbCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgW3JvdXRlckxpbmtdPVwidGFiLnBhdGhcIlxuICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmVcbiAgICAgICAgICAjcmxhPVwicm91dGVyTGlua0FjdGl2ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgW2M4eUljb25dPVwidGFiPy5pY29uXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIXRhYi50ZW1wbGF0ZSAmJiB0YWI/Lmljb25cIlxuICAgICAgICAgID48L2k+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFiLnRlbXBsYXRlICYmICF0YWIuY29tcG9uZW50XCI+XG4gICAgICAgICAgICB7eyB0YWI/LmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWIudGVtcGxhdGU7IGluamVjdG9yOiB0YWIuaW5qZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q29tcG9uZW50T3V0bGV0PVwidGFiLmNvbXBvbmVudDsgZW52aXJvbm1lbnRJbmplY3RvcjogdGFiLmluamVjdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJ2aXNpYmxlLXhzIG1vYmlsZS10YWJzXCI+XG4gIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgZC1mbGV4IG0tYi0wXCI+XG4gICAgPGxpIGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyIGZsZXgtZ3Jvd1wiPlxuICAgICAgPHNlbGVjdFxuICAgICAgICAoY2hhbmdlKT1cIm5hdmlnYXRlVG8oJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAjc2VsZWN0XG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzXCI+XG4gICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgKm5nSWY9XCIhdGFiLmNvbXBvbmVudFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwidGFiLnBhdGhcIlxuICAgICAgICAgICAgW3NlbGVjdGVkXT1cImlzQWN0aXZlKHRhYilcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHRhYj8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3NlbGVjdD5cbiAgICA8L2xpPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiLmNvbXBvbmVudFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpjOHlDb21wb25lbnRPdXRsZXQ9XCJ0YWIuY29tcG9uZW50OyBlbnZpcm9ubWVudEluamVjdG9yOiB0YWIuaW5qZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3VsPlxuPC9kaXY+XG4iXX0=
@@ -149,10 +149,10 @@ export class ListFiltersComponent {
149
149
  }
150
150
  }
151
151
  ListFiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ListFiltersComponent, deps: [{ token: i1.FormBuilder }, { token: i2.AppStateService }, { token: i3.TranslateService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
152
- ListFiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ListFiltersComponent, selector: "c8y-list-filters", inputs: { packageTypes: "packageTypes", packageAvailabilities: "packageAvailabilities", packageContents: "packageContents" }, outputs: { filterPipeChange: "filterPipeChange" }, viewQueries: [{ propertyName: "filterInput", first: true, predicate: FilterInputComponent, descendants: true }], ngImport: i0, template: "<form class=\"d-flex a-i-center\" [formGroup]=\"formGroup\">\n <c8y-filter (onSearch)=\"setFilterTerm($event)\"></c8y-filter>\n\n <div\n *ngIf=\"predefinedFiltersVisible\"\n class=\"dropdown m-l-8 m-r-4\"\n dropdown\n (isOpenChange)=\"toggleDropdown($event)\"\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group d-inline-flex\">\n <button\n class=\"btn-clean form-control p-l-8 p-r-16 a-s-stretch d-flex a-i-center w-auto\"\n title=\"{{ 'Filters' | translate }}\"\n dropdownToggle\n >\n <span [ngPlural]=\"chips.length\">\n <ng-template ngPluralCase=\"=0\">\n {{ 'Filters' | translate }}\n </ng-template>\n <ng-template ngPluralCase=\"=1\">\n <span class=\"badge badge-info\">{{ chips.length }}</span>\n {{ 'Filter' | translate }}\n </ng-template>\n <ng-template ngPluralCase=\"other\">\n <span class=\"badge badge-info\">{{ chips.length }}</span>\n {{ 'Filters' | translate }}\n </ng-template>\n </span>\n <span class=\"caret\"></span>\n </button>\n <div\n class=\"input-group-addon p-t-0 p-b-0 d-flex gap-4 a-i-center inner-scroll\"\n *ngIf=\"chips.length > 0\"\n >\n <ng-container *ngFor=\"let chip of chips\">\n <span class=\"label label-info chip\" *ngIf=\"chip[1].value\">\n <button\n class=\"btn btn-xs btn-clean text-10\"\n type=\"button\"\n title=\"{{ 'Remove' | translate }} {{ chip[0] | translate | titlecase }}\"\n (click)=\"deselectChip(chip)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ chip[0] | translate | titlecase }}\n </span>\n </ng-container>\n </div>\n </div>\n <div class=\"dropdown-menu\" *dropdownMenu>\n <div class=\"dropdown-form\">\n <c8y-form-group *ngIf=\"packageTypes.length\" formGroupName=\"type\">\n <label>\n {{ 'Type' | translate }}\n </label>\n <label class=\"c8y-checkbox\" *ngFor=\"let type of packageTypes\" [title]=\"type | translate\">\n <input type=\"checkbox\" [formControlName]=\"type\" [value]=\"type\" />\n <span></span>\n <span>{{ type | translate | titlecase }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"packageAvailabilities.length\" formGroupName=\"availability\">\n <label>\n {{ 'Availability' | translate }}\n </label>\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let availability of packageAvailabilities\"\n [title]=\"availability | translate\"\n >\n <input type=\"checkbox\" [formControlName]=\"availability\" [value]=\"availability\" />\n <span></span>\n <span>{{ availability | translate }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"packageContents.length\" formGroupName=\"content\">\n <label>\n {{ 'Content' | translate }}\n </label>\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let content of packageContents\"\n [title]=\"content | translate\"\n >\n <input type=\"checkbox\" [formControlName]=\"content\" [value]=\"content\" />\n <span></span>\n <span>{{ content | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"p-16 d-flex gap-8 separator-top\">\n <button\n class=\"btn btn-default btn-sm flex-grow\"\n type=\"button\"\n title=\"{{ 'Reset' | translate }}\"\n (click)=\"reset(); filtersDropdown.isOpen = false\"\n translate\n >\n Reset\n </button>\n\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n type=\"button\"\n title=\"{{ 'Apply' | translate }}\"\n (click)=\"applyPredefinedFilters(); filtersDropdown.isOpen = false\"\n [disabled]=\"formGroup.pristine && formGroup.untouched\"\n translate\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgPlural, selector: "[ngPlural]", inputs: ["ngPlural"] }, { kind: "directive", type: i4.NgPluralCase, selector: "[ngPluralCase]" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2.FilterInputComponent, selector: "c8y-filter", inputs: ["icon"], outputs: ["onSearch"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i5.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i5.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i5.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: i6.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.TitleCasePipe, name: "titlecase" }] });
152
+ ListFiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ListFiltersComponent, selector: "c8y-list-filters", inputs: { packageTypes: "packageTypes", packageAvailabilities: "packageAvailabilities", packageContents: "packageContents" }, outputs: { filterPipeChange: "filterPipeChange" }, viewQueries: [{ propertyName: "filterInput", first: true, predicate: FilterInputComponent, descendants: true }], ngImport: i0, template: "<form class=\"d-flex a-i-center\" [formGroup]=\"formGroup\">\n <c8y-filter (onSearch)=\"setFilterTerm($event)\"></c8y-filter>\n\n <div\n *ngIf=\"predefinedFiltersVisible\"\n class=\"dropdown m-l-8 m-r-4\"\n dropdown\n (isOpenChange)=\"toggleDropdown($event)\"\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group d-inline-flex\">\n <button\n class=\"btn-clean form-control p-l-8 p-r-16 a-s-stretch d-flex a-i-center w-auto\"\n title=\"{{ 'Filters' | translate }}\"\n dropdownToggle\n >\n <span [ngPlural]=\"chips.length\">\n <ng-template ngPluralCase=\"=0\">\n {{ 'Filters' | translate }}\n </ng-template>\n <ng-template ngPluralCase=\"=1\">\n <span class=\"badge badge-info\">{{ chips.length }}</span>\n {{ 'Filter' | translate }}\n </ng-template>\n <ng-template ngPluralCase=\"other\">\n <span class=\"badge badge-info\">{{ chips.length }}</span>\n {{ 'Filters' | translate }}\n </ng-template>\n </span>\n <span class=\"caret\"></span>\n </button>\n <div\n class=\"input-group-addon p-t-0 p-b-0 d-flex gap-4 a-i-center inner-scroll\"\n *ngIf=\"chips.length > 0\"\n >\n <ng-container *ngFor=\"let chip of chips\">\n <span class=\"label label-info chip\" *ngIf=\"chip[1].value\">\n <button\n class=\"btn btn-xs btn-clean text-10\"\n type=\"button\"\n title=\"{{ 'Remove' | translate }} {{ chip[0] | translate | titlecase }}\"\n (click)=\"deselectChip(chip)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ chip[0] | translate | titlecase }}\n </span>\n </ng-container>\n </div>\n </div>\n <div class=\"dropdown-menu\" *dropdownMenu>\n <div class=\"dropdown-form\">\n <c8y-form-group *ngIf=\"packageTypes.length\" formGroupName=\"type\">\n <label>\n {{ 'Type' | translate }}\n </label>\n <label class=\"c8y-checkbox\" *ngFor=\"let type of packageTypes\" [title]=\"type | translate\">\n <input type=\"checkbox\" [formControlName]=\"type\" [value]=\"type\" />\n <span></span>\n <span>{{ type | translate | titlecase }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"packageAvailabilities.length\" formGroupName=\"availability\">\n <label>\n {{ 'Availability`of package based on app state`' | translate }}\n </label>\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let availability of packageAvailabilities\"\n [title]=\"availability | translate\"\n >\n <input type=\"checkbox\" [formControlName]=\"availability\" [value]=\"availability\" />\n <span></span>\n <span>{{ availability | translate }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"packageContents.length\" formGroupName=\"content\">\n <label>\n {{ 'Content' | translate }}\n </label>\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let content of packageContents\"\n [title]=\"content | translate\"\n >\n <input type=\"checkbox\" [formControlName]=\"content\" [value]=\"content\" />\n <span></span>\n <span>{{ content | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"p-16 d-flex gap-8 separator-top\">\n <button\n class=\"btn btn-default btn-sm flex-grow\"\n type=\"button\"\n title=\"{{ 'Reset' | translate }}\"\n (click)=\"reset(); filtersDropdown.isOpen = false\"\n translate\n >\n Reset\n </button>\n\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n type=\"button\"\n title=\"{{ 'Apply' | translate }}\"\n (click)=\"applyPredefinedFilters(); filtersDropdown.isOpen = false\"\n [disabled]=\"formGroup.pristine && formGroup.untouched\"\n translate\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgPlural, selector: "[ngPlural]", inputs: ["ngPlural"] }, { kind: "directive", type: i4.NgPluralCase, selector: "[ngPluralCase]" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2.FilterInputComponent, selector: "c8y-filter", inputs: ["icon"], outputs: ["onSearch"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i5.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i5.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i5.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: i6.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.TitleCasePipe, name: "titlecase" }] });
153
153
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ListFiltersComponent, decorators: [{
154
154
  type: Component,
155
- args: [{ selector: 'c8y-list-filters', template: "<form class=\"d-flex a-i-center\" [formGroup]=\"formGroup\">\n <c8y-filter (onSearch)=\"setFilterTerm($event)\"></c8y-filter>\n\n <div\n *ngIf=\"predefinedFiltersVisible\"\n class=\"dropdown m-l-8 m-r-4\"\n dropdown\n (isOpenChange)=\"toggleDropdown($event)\"\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group d-inline-flex\">\n <button\n class=\"btn-clean form-control p-l-8 p-r-16 a-s-stretch d-flex a-i-center w-auto\"\n title=\"{{ 'Filters' | translate }}\"\n dropdownToggle\n >\n <span [ngPlural]=\"chips.length\">\n <ng-template ngPluralCase=\"=0\">\n {{ 'Filters' | translate }}\n </ng-template>\n <ng-template ngPluralCase=\"=1\">\n <span class=\"badge badge-info\">{{ chips.length }}</span>\n {{ 'Filter' | translate }}\n </ng-template>\n <ng-template ngPluralCase=\"other\">\n <span class=\"badge badge-info\">{{ chips.length }}</span>\n {{ 'Filters' | translate }}\n </ng-template>\n </span>\n <span class=\"caret\"></span>\n </button>\n <div\n class=\"input-group-addon p-t-0 p-b-0 d-flex gap-4 a-i-center inner-scroll\"\n *ngIf=\"chips.length > 0\"\n >\n <ng-container *ngFor=\"let chip of chips\">\n <span class=\"label label-info chip\" *ngIf=\"chip[1].value\">\n <button\n class=\"btn btn-xs btn-clean text-10\"\n type=\"button\"\n title=\"{{ 'Remove' | translate }} {{ chip[0] | translate | titlecase }}\"\n (click)=\"deselectChip(chip)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ chip[0] | translate | titlecase }}\n </span>\n </ng-container>\n </div>\n </div>\n <div class=\"dropdown-menu\" *dropdownMenu>\n <div class=\"dropdown-form\">\n <c8y-form-group *ngIf=\"packageTypes.length\" formGroupName=\"type\">\n <label>\n {{ 'Type' | translate }}\n </label>\n <label class=\"c8y-checkbox\" *ngFor=\"let type of packageTypes\" [title]=\"type | translate\">\n <input type=\"checkbox\" [formControlName]=\"type\" [value]=\"type\" />\n <span></span>\n <span>{{ type | translate | titlecase }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"packageAvailabilities.length\" formGroupName=\"availability\">\n <label>\n {{ 'Availability' | translate }}\n </label>\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let availability of packageAvailabilities\"\n [title]=\"availability | translate\"\n >\n <input type=\"checkbox\" [formControlName]=\"availability\" [value]=\"availability\" />\n <span></span>\n <span>{{ availability | translate }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"packageContents.length\" formGroupName=\"content\">\n <label>\n {{ 'Content' | translate }}\n </label>\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let content of packageContents\"\n [title]=\"content | translate\"\n >\n <input type=\"checkbox\" [formControlName]=\"content\" [value]=\"content\" />\n <span></span>\n <span>{{ content | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"p-16 d-flex gap-8 separator-top\">\n <button\n class=\"btn btn-default btn-sm flex-grow\"\n type=\"button\"\n title=\"{{ 'Reset' | translate }}\"\n (click)=\"reset(); filtersDropdown.isOpen = false\"\n translate\n >\n Reset\n </button>\n\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n type=\"button\"\n title=\"{{ 'Apply' | translate }}\"\n (click)=\"applyPredefinedFilters(); filtersDropdown.isOpen = false\"\n [disabled]=\"formGroup.pristine && formGroup.untouched\"\n translate\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n</form>\n" }]
155
+ args: [{ selector: 'c8y-list-filters', template: "<form class=\"d-flex a-i-center\" [formGroup]=\"formGroup\">\n <c8y-filter (onSearch)=\"setFilterTerm($event)\"></c8y-filter>\n\n <div\n *ngIf=\"predefinedFiltersVisible\"\n class=\"dropdown m-l-8 m-r-4\"\n dropdown\n (isOpenChange)=\"toggleDropdown($event)\"\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group d-inline-flex\">\n <button\n class=\"btn-clean form-control p-l-8 p-r-16 a-s-stretch d-flex a-i-center w-auto\"\n title=\"{{ 'Filters' | translate }}\"\n dropdownToggle\n >\n <span [ngPlural]=\"chips.length\">\n <ng-template ngPluralCase=\"=0\">\n {{ 'Filters' | translate }}\n </ng-template>\n <ng-template ngPluralCase=\"=1\">\n <span class=\"badge badge-info\">{{ chips.length }}</span>\n {{ 'Filter' | translate }}\n </ng-template>\n <ng-template ngPluralCase=\"other\">\n <span class=\"badge badge-info\">{{ chips.length }}</span>\n {{ 'Filters' | translate }}\n </ng-template>\n </span>\n <span class=\"caret\"></span>\n </button>\n <div\n class=\"input-group-addon p-t-0 p-b-0 d-flex gap-4 a-i-center inner-scroll\"\n *ngIf=\"chips.length > 0\"\n >\n <ng-container *ngFor=\"let chip of chips\">\n <span class=\"label label-info chip\" *ngIf=\"chip[1].value\">\n <button\n class=\"btn btn-xs btn-clean text-10\"\n type=\"button\"\n title=\"{{ 'Remove' | translate }} {{ chip[0] | translate | titlecase }}\"\n (click)=\"deselectChip(chip)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ chip[0] | translate | titlecase }}\n </span>\n </ng-container>\n </div>\n </div>\n <div class=\"dropdown-menu\" *dropdownMenu>\n <div class=\"dropdown-form\">\n <c8y-form-group *ngIf=\"packageTypes.length\" formGroupName=\"type\">\n <label>\n {{ 'Type' | translate }}\n </label>\n <label class=\"c8y-checkbox\" *ngFor=\"let type of packageTypes\" [title]=\"type | translate\">\n <input type=\"checkbox\" [formControlName]=\"type\" [value]=\"type\" />\n <span></span>\n <span>{{ type | translate | titlecase }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"packageAvailabilities.length\" formGroupName=\"availability\">\n <label>\n {{ 'Availability`of package based on app state`' | translate }}\n </label>\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let availability of packageAvailabilities\"\n [title]=\"availability | translate\"\n >\n <input type=\"checkbox\" [formControlName]=\"availability\" [value]=\"availability\" />\n <span></span>\n <span>{{ availability | translate }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"packageContents.length\" formGroupName=\"content\">\n <label>\n {{ 'Content' | translate }}\n </label>\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let content of packageContents\"\n [title]=\"content | translate\"\n >\n <input type=\"checkbox\" [formControlName]=\"content\" [value]=\"content\" />\n <span></span>\n <span>{{ content | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"p-16 d-flex gap-8 separator-top\">\n <button\n class=\"btn btn-default btn-sm flex-grow\"\n type=\"button\"\n title=\"{{ 'Reset' | translate }}\"\n (click)=\"reset(); filtersDropdown.isOpen = false\"\n translate\n >\n Reset\n </button>\n\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n type=\"button\"\n title=\"{{ 'Apply' | translate }}\"\n (click)=\"applyPredefinedFilters(); filtersDropdown.isOpen = false\"\n [disabled]=\"formGroup.pristine && formGroup.untouched\"\n translate\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n</form>\n" }]
156
156
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.AppStateService }, { type: i3.TranslateService }, { type: i2.GainsightService }]; }, propDecorators: { packageTypes: [{
157
157
  type: Input
158
158
  }], packageAvailabilities: [{
@@ -165,4 +165,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
165
165
  type: ViewChild,
166
166
  args: [FilterInputComponent]
167
167
  }] } });
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1maWx0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9zaGFyZWQvbGlzdC1maWx0ZXJzL2xpc3QtZmlsdGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL2xpc3QtZmlsdGVycy9saXN0LWZpbHRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFdBQVcsRUFBMEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLFdBQVcsRUFDWixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7QUFNeEQsTUFBTSxPQUFPLG9CQUFvQjtJQWlCL0IsWUFDVSxXQUF3QixFQUN4QixFQUFtQixFQUNuQixnQkFBa0MsRUFDbEMsZ0JBQWtDO1FBSGxDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLE9BQUUsR0FBRixFQUFFLENBQWlCO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXBCbkMsaUJBQVksR0FBcUMs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RTtZQUMxRSxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUE0QixFQUFFLEVBQUU7Z0JBQzlFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtvQkFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3hCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O2lIQXJLVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixzUkFLcEIsb0JBQW9CLGdEQzFCakMsMnpJQXdIQTsyRkRuR2Esb0JBQW9CO2tCQUpoQyxTQUFTOytCQUNFLGtCQUFrQjs4TEFJbkIsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQzBCLFdBQVc7c0JBQTNDLFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEFwcFN0YXRlU2VydmljZSxcbiAgRmlsdGVySW5wdXRDb21wb25lbnQsXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIGludGVybmFsQXBwcyxcbiAgUGFja2FnZVR5cGVcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBwaXBlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJQXBwbGljYXRpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBQYWNrYWdlRmlsdGVycywgRmlsdGVyUGlwZSB9IGZyb20gJy4vbGlzdC1maWx0ZXJzLm1vZGVsJztcbmltcG9ydCB7IEFQUF9TVEFURSB9IGZyb20gJy4uL2Vjb3N5c3RlbS5jb25zdGFudHMnO1xuaW1wb3J0IHsgUFJPRFVDVF9FWFBFUklFTkNFIH0gZnJvbSAnLi4vZWNvc3lzdGVtLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWxpc3QtZmlsdGVycycsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LWZpbHRlcnMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIExpc3RGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcGFja2FnZVR5cGVzOiAoa2V5b2YgUGFja2FnZUZpbHRlcnNbJ3R5cGUnXSlbXSA9IFtdO1xuICBASW5wdXQoKSBwYWNrYWdlQXZhaWxhYmlsaXRpZXM6IChrZXlvZiBQYWNrYWdlRmlsdGVyc1snYXZhaWxhYmlsaXR5J10pW10gPSBbXTtcbiAgQElucHV0KCkgcGFja2FnZUNvbnRlbnRzOiAoa2V5b2YgUGFja2FnZUZpbHRlcnNbJ2NvbnRlbnQnXSlbXSA9IFtdO1xuICBAT3V0cHV0KCkgZmlsdGVyUGlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyUGlwZT4oKTtcbiAgQFZpZXdDaGlsZChGaWx0ZXJJbnB1dENvbXBvbmVudCkgZmlsdGVySW5wdXQ6IEZpbHRlcklucHV0Q29tcG9uZW50O1xuXG4gIGZvcm1Hcm91cDogUmV0dXJuVHlwZTxMaXN0RmlsdGVyc0NvbXBvbmVudFsnaW5pdEZvcm0nXT47XG4gIGNoaXBzOiBbc3RyaW5nLCBGb3JtQ29udHJvbF1bXSA9IFtdO1xuICBwcmVkZWZpbmVkRmlsdGVyc1Zpc2libGU6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBjdXJyZW50TGFuZzogc3RyaW5nO1xuICBwcml2YXRlIGRhdGE6IElBcHBsaWNhdGlvbltdO1xuICBwcml2YXRlIGN1cnJlbnRGaWx0ZXJzU3RhdGU6IFBhcnRpYWw8UGFja2FnZUZpbHRlcnM+O1xuICBwcml2YXRlIGN1cnJlbnRGaWx0ZXJUZXJtOiBzdHJpbmc7XG4gIHByaXZhdGUgQ1VSUkVOVF9MT0NBVElPTiA9IGxvY2F0aW9uLmhyZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSB1aTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmluaXRGb3JtKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzU3RhdGUgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcbiAgICB0aGlzLnByZWRlZmluZWRGaWx0ZXJzVmlzaWJsZSA9XG4gICAgICB0aGlzLnBhY2thZ2VUeXBlcz8ubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5wYWNrYWdlQXZhaWxhYmlsaXRpZXM/Lmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMucGFja2FnZUNvbnRlbnRzPy5sZW5ndGggPiAwO1xuICAgIHRoaXMuY3VycmVudExhbmcgPSB0aGlzLnVpLnN0YXRlLmxhbmc7XG4gIH1cblxuICBzZXRGaWx0ZXJUZXJtKGZpbHRlclRlcm06IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEZpbHRlclRlcm0gPSBmaWx0ZXJUZXJtO1xuICAgIHRoaXMuc2V0UGlwZSgpO1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5GSUxURVJfTElTVCwge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuTElTVF9GSUxURVJTLFxuICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkFDVElPTlMuU0VUX0ZJTFRFUl9URVJNLFxuICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICB9KTtcbiAgfVxuXG4gIGFwcGx5UHJlZGVmaW5lZEZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyc1N0YXRlID0gdGhpcy5mb3JtR3JvdXAudmFsdWU7XG4gICAgdGhpcy5zZXRDaGlwcygpO1xuICAgIHRoaXMuc2V0UGlwZSgpO1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5GSUxURVJfTElTVCwge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuTElTVF9GSUxURVJTLFxuICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkFDVElPTlMuU0VUX1BSRURFRklORURfRklMVEVSUyxcbiAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OLFxuICAgICAgZmlsdGVyczogdGhpcy5jdXJyZW50RmlsdGVyc1N0YXRlXG4gICAgfSk7XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5yZXNldCgpO1xuICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuRklMVEVSX0xJU1QsIHtcbiAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLkxJU1RfRklMVEVSUyxcbiAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5BQ1RJT05TLlJFU0VUX0ZJTFRFUixcbiAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgfSk7XG4gICAgdGhpcy5hcHBseVByZWRlZmluZWRGaWx0ZXJzKCk7XG4gIH1cblxuICByZXNldEFsbEZpbHRlcnMoKSB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIHRoaXMuZmlsdGVySW5wdXQucmVzZXQoKTtcbiAgfVxuXG4gIHRvZ2dsZURyb3Bkb3duKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMuY3VycmVudEZpbHRlcnNTdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZGVzZWxlY3RDaGlwKGNoaXA6IFtzdHJpbmcsIEZvcm1Db250cm9sXSk6IHZvaWQge1xuICAgIGNoaXBbMV0uc2V0VmFsdWUoZmFsc2UpO1xuICAgIHRoaXMuYXBwbHlQcmVkZWZpbmVkRmlsdGVycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICB0eXBlOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgW1BhY2thZ2VUeXBlLk9GRklDSUFMXTogW2ZhbHNlXSxcbiAgICAgICAgW1BhY2thZ2VUeXBlLkNPTU1VTklUWV06IFtmYWxzZV1cbiAgICAgIH0pLFxuICAgICAgYXZhaWxhYmlsaXR5OiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgW0FQUF9TVEFURS5TVUJTQ1JJQkVELmxhYmVsXTogW2ZhbHNlXSxcbiAgICAgICAgW0FQUF9TVEFURS5VTlBBQ0tFRC5sYWJlbF06IFtmYWxzZV0sXG4gICAgICAgIFtBUFBfU1RBVEUuRVhURVJOQUwubGFiZWxdOiBbZmFsc2VdLFxuICAgICAgICBbQVBQX1NUQVRFLkNVU1RPTS5sYWJlbF06IFtmYWxzZV1cbiAgICAgIH0pLFxuICAgICAgY29udGVudDogdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIFtBUFBfU1RBVEUuUEFDS0FHRV9CTFVFUFJJTlQubGFiZWxdOiBbZmFsc2VdLFxuICAgICAgICBbQVBQX1NUQVRFLlBBQ0tBR0VfUExVR0lOLmxhYmVsXTogW2ZhbHNlXVxuICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGlwZSgpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJQaXBlID0gcGlwZShcbiAgICAgIG1hcCgoZGF0YTogSUFwcGxpY2F0aW9uW10pID0+IHtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YS5maWx0ZXIoKGFwcDogSUFwcGxpY2F0aW9uKSA9PiB7XG4gICAgICAgICAgbGV0IG1hdGNoZXNCeVN0cmluZztcbiAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudEZpbHRlclRlcm0gfHwgdGhpcy5jdXJyZW50RmlsdGVyVGVybS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBtYXRjaGVzQnlTdHJpbmcgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhcHBOYW1lID1cbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZyA9PT0gJ2VuJyB8fCAhYXBwLm5hbWU/Lmxlbmd0aCB8fCAhaW50ZXJuYWxBcHBzW2FwcC5uYW1lXVxuICAgICAgICAgICAgICAgID8gYXBwLm5hbWVcbiAgICAgICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGludGVybmFsQXBwc1thcHAubmFtZV0pO1xuICAgICAgICAgICAgbWF0Y2hlc0J5U3RyaW5nID1cbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJDb250YWluU3RyaW5nKGFwcE5hbWUsIHRoaXMuY3VycmVudEZpbHRlclRlcm0pIHx8XG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyQ29udGFpblN0cmluZyhhcHAuZGVzY3JpcHRpb24sIHRoaXMuY3VycmVudEZpbHRlclRlcm0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1hdGNoZXNCeVByZWRlZmluZWRQcm9wZXJ0eSA9XG4gICAgICAgICAgICB0aGlzLmFwcE1hdGNoZXNCeVByZWRlZmluZWRQcm9wZXJ0eShhcHAsICd0eXBlJykgJiZcbiAgICAgICAgICAgIHRoaXMuYXBwTWF0Y2hlc0J5UHJlZGVmaW5lZFByb3BlcnR5KGFwcCwgJ2F2YWlsYWJpbGl0eScpICYmXG4gICAgICAgICAgICB0aGlzLmFwcE1hdGNoZXNCeVByZWRlZmluZWRQcm9wZXJ0eShhcHAsICdjb250ZW50Jyk7XG5cbiAgICAgICAgICByZXR1cm4gbWF0Y2hlc0J5U3RyaW5nICYmIG1hdGNoZXNCeVByZWRlZmluZWRQcm9wZXJ0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5maWx0ZXJQaXBlQ2hhbmdlLmVtaXQoZmlsdGVyUGlwZSk7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckNvbnRhaW5TdHJpbmcobmFtZTogc3RyaW5nLCBmaWx0ZXJUZXJtOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB0ZXJtID0gZmlsdGVyVGVybS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICByZXR1cm4gbmFtZSAmJiBuYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0ZXJtKSA+IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBNYXRjaGVzQnlQcmVkZWZpbmVkUHJvcGVydHkoXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgcHJvcGVydHk6IGtleW9mIFBhY2thZ2VGaWx0ZXJzXG4gICk6IGJvb2xlYW4ge1xuICAgIC8vIGlmIGZpbHRlciBvYmplY3QgZG9lcyBub3QgY29udGFpbiBwcm9wZXJ0eSBmaWx0ZXJzIG9yIGFsbCBmaWx0ZXJzIGFyZSBmYWxzZSwgZmlsdGVyIGlzIGluYWN0aXZlXG4gICAgY29uc3QgZmlsdGVyRm9yUHJvcGVydHlJc0FjdGl2ZSA9XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzU3RhdGU/Lltwcm9wZXJ0eV0gJiZcbiAgICAgICFPYmplY3QudmFsdWVzKHRoaXMuY3VycmVudEZpbHRlcnNTdGF0ZVtwcm9wZXJ0eV0pLmV2ZXJ5KHYgPT4gIXYpO1xuICAgIGlmICghZmlsdGVyRm9yUHJvcGVydHlJc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghYXBwLmZpbHRlclByb3BzPy5bcHJvcGVydHldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRGaWx0ZXJzU3RhdGVbcHJvcGVydHldW2FwcC5maWx0ZXJQcm9wc1twcm9wZXJ0eV1dO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hpcHMoKTogdm9pZCB7XG4gICAgdGhpcy5jaGlwcyA9IFtdO1xuICAgIE9iamVjdC52YWx1ZXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKGNvbnRyb2xzR3JvdXA6IEZvcm1Hcm91cCkgPT4ge1xuICAgICAgT2JqZWN0LmVudHJpZXMoY29udHJvbHNHcm91cC5jb250cm9scykuZm9yRWFjaCgoZW50cnk6IFtzdHJpbmcsIEZvcm1Db250cm9sXSkgPT4ge1xuICAgICAgICBpZiAoZW50cnlbMV0udmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmNoaXBzLnB1c2goZW50cnkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGZvcm0gY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxjOHktZmlsdGVyIChvblNlYXJjaCk9XCJzZXRGaWx0ZXJUZXJtKCRldmVudClcIj48L2M4eS1maWx0ZXI+XG5cbiAgPGRpdlxuICAgICpuZ0lmPVwicHJlZGVmaW5lZEZpbHRlcnNWaXNpYmxlXCJcbiAgICBjbGFzcz1cImRyb3Bkb3duIG0tbC04IG0tci00XCJcbiAgICBkcm9wZG93blxuICAgIChpc09wZW5DaGFuZ2UpPVwidG9nZ2xlRHJvcGRvd24oJGV2ZW50KVwiXG4gICAgI2ZpbHRlcnNEcm9wZG93bj1cImJzLWRyb3Bkb3duXCJcbiAgICBbY2RrVHJhcEZvY3VzXT1cImZpbHRlcnNEcm9wZG93bi5pc09wZW5cIlxuICAgIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBkLWlubGluZS1mbGV4XCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuLWNsZWFuIGZvcm0tY29udHJvbCBwLWwtOCBwLXItMTYgYS1zLXN0cmV0Y2ggZC1mbGV4IGEtaS1jZW50ZXIgdy1hdXRvXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnRmlsdGVycycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBkcm9wZG93blRvZ2dsZVxuICAgICAgPlxuICAgICAgICA8c3BhbiBbbmdQbHVyYWxdPVwiY2hpcHMubGVuZ3RoXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nUGx1cmFsQ2FzZT1cIj0wXCI+XG4gICAgICAgICAgICB7eyAnRmlsdGVycycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ1BsdXJhbENhc2U9XCI9MVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCI+e3sgY2hpcHMubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAge3sgJ0ZpbHRlcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ1BsdXJhbENhc2U9XCJvdGhlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCI+e3sgY2hpcHMubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAge3sgJ0ZpbHRlcnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb24gcC10LTAgcC1iLTAgZC1mbGV4IGdhcC00IGEtaS1jZW50ZXIgaW5uZXItc2Nyb2xsXCJcbiAgICAgICAgKm5nSWY9XCJjaGlwcy5sZW5ndGggPiAwXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpcCBvZiBjaGlwc1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mbyBjaGlwXCIgKm5nSWY9XCJjaGlwWzFdLnZhbHVlXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi14cyBidG4tY2xlYW4gdGV4dC0xMFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdSZW1vdmUnIHwgdHJhbnNsYXRlIH19IHt7IGNoaXBbMF0gfCB0cmFuc2xhdGUgfCB0aXRsZWNhc2UgfX1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGVzZWxlY3RDaGlwKGNoaXApXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB7eyBjaGlwWzBdIHwgdHJhbnNsYXRlIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgKmRyb3Bkb3duTWVudT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1mb3JtXCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cCAqbmdJZj1cInBhY2thZ2VUeXBlcy5sZW5ndGhcIiBmb3JtR3JvdXBOYW1lPVwidHlwZVwiPlxuICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgIHt7ICdUeXBlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LWNoZWNrYm94XCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgcGFja2FnZVR5cGVzXCIgW3RpdGxlXT1cInR5cGUgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInR5cGVcIiBbdmFsdWVdPVwidHlwZVwiIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyB0eXBlIHwgdHJhbnNsYXRlIHwgdGl0bGVjYXNlIH19PC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwICpuZ0lmPVwicGFja2FnZUF2YWlsYWJpbGl0aWVzLmxlbmd0aFwiIGZvcm1Hcm91cE5hbWU9XCJhdmFpbGFiaWxpdHlcIj5cbiAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICB7eyAnQXZhaWxhYmlsaXR5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYXZhaWxhYmlsaXR5IG9mIHBhY2thZ2VBdmFpbGFiaWxpdGllc1wiXG4gICAgICAgICAgICBbdGl0bGVdPVwiYXZhaWxhYmlsaXR5IHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2Zvcm1Db250cm9sTmFtZV09XCJhdmFpbGFiaWxpdHlcIiBbdmFsdWVdPVwiYXZhaWxhYmlsaXR5XCIgLz5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IGF2YWlsYWJpbGl0eSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgICAgIDxjOHktZm9ybS1ncm91cCAqbmdJZj1cInBhY2thZ2VDb250ZW50cy5sZW5ndGhcIiBmb3JtR3JvdXBOYW1lPVwiY29udGVudFwiPlxuICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgIHt7ICdDb250ZW50JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29udGVudCBvZiBwYWNrYWdlQ29udGVudHNcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImNvbnRlbnQgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRlbnRcIiBbdmFsdWVdPVwiY29udGVudFwiIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyBjb250ZW50IHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTE2IGQtZmxleCBnYXAtOCBzZXBhcmF0b3ItdG9wXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc20gZmxleC1ncm93XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdSZXNldCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIChjbGljayk9XCJyZXNldCgpOyBmaWx0ZXJzRHJvcGRvd24uaXNPcGVuID0gZmFsc2VcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgUmVzZXRcbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBmbGV4LWdyb3dcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIHRpdGxlPVwie3sgJ0FwcGx5JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgKGNsaWNrKT1cImFwcGx5UHJlZGVmaW5lZEZpbHRlcnMoKTsgZmlsdGVyc0Ryb3Bkb3duLmlzT3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUdyb3VwLnByaXN0aW5lICYmIGZvcm1Hcm91cC51bnRvdWNoZWRcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgQXBwbHlcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1maWx0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9zaGFyZWQvbGlzdC1maWx0ZXJzL2xpc3QtZmlsdGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL2xpc3QtZmlsdGVycy9saXN0LWZpbHRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFdBQVcsRUFBMEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLFdBQVcsRUFDWixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7QUFNeEQsTUFBTSxPQUFPLG9CQUFvQjtJQWlCL0IsWUFDVSxXQUF3QixFQUN4QixFQUFtQixFQUNuQixnQkFBa0MsRUFDbEMsZ0JBQWtDO1FBSGxDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLE9BQUUsR0FBRixFQUFFLENBQWlCO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXBCbkMsaUJBQVksR0FBcUMs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RTtZQUMxRSxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUE0QixFQUFFLEVBQUU7Z0JBQzlFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtvQkFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3hCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O2lIQXJLVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixzUkFLcEIsb0JBQW9CLGdEQzFCakMsMDFJQXdIQTsyRkRuR2Esb0JBQW9CO2tCQUpoQyxTQUFTOytCQUNFLGtCQUFrQjs4TEFJbkIsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQzBCLFdBQVc7c0JBQTNDLFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEFwcFN0YXRlU2VydmljZSxcbiAgRmlsdGVySW5wdXRDb21wb25lbnQsXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIGludGVybmFsQXBwcyxcbiAgUGFja2FnZVR5cGVcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBwaXBlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJQXBwbGljYXRpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBQYWNrYWdlRmlsdGVycywgRmlsdGVyUGlwZSB9IGZyb20gJy4vbGlzdC1maWx0ZXJzLm1vZGVsJztcbmltcG9ydCB7IEFQUF9TVEFURSB9IGZyb20gJy4uL2Vjb3N5c3RlbS5jb25zdGFudHMnO1xuaW1wb3J0IHsgUFJPRFVDVF9FWFBFUklFTkNFIH0gZnJvbSAnLi4vZWNvc3lzdGVtLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWxpc3QtZmlsdGVycycsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LWZpbHRlcnMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIExpc3RGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcGFja2FnZVR5cGVzOiAoa2V5b2YgUGFja2FnZUZpbHRlcnNbJ3R5cGUnXSlbXSA9IFtdO1xuICBASW5wdXQoKSBwYWNrYWdlQXZhaWxhYmlsaXRpZXM6IChrZXlvZiBQYWNrYWdlRmlsdGVyc1snYXZhaWxhYmlsaXR5J10pW10gPSBbXTtcbiAgQElucHV0KCkgcGFja2FnZUNvbnRlbnRzOiAoa2V5b2YgUGFja2FnZUZpbHRlcnNbJ2NvbnRlbnQnXSlbXSA9IFtdO1xuICBAT3V0cHV0KCkgZmlsdGVyUGlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyUGlwZT4oKTtcbiAgQFZpZXdDaGlsZChGaWx0ZXJJbnB1dENvbXBvbmVudCkgZmlsdGVySW5wdXQ6IEZpbHRlcklucHV0Q29tcG9uZW50O1xuXG4gIGZvcm1Hcm91cDogUmV0dXJuVHlwZTxMaXN0RmlsdGVyc0NvbXBvbmVudFsnaW5pdEZvcm0nXT47XG4gIGNoaXBzOiBbc3RyaW5nLCBGb3JtQ29udHJvbF1bXSA9IFtdO1xuICBwcmVkZWZpbmVkRmlsdGVyc1Zpc2libGU6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBjdXJyZW50TGFuZzogc3RyaW5nO1xuICBwcml2YXRlIGRhdGE6IElBcHBsaWNhdGlvbltdO1xuICBwcml2YXRlIGN1cnJlbnRGaWx0ZXJzU3RhdGU6IFBhcnRpYWw8UGFja2FnZUZpbHRlcnM+O1xuICBwcml2YXRlIGN1cnJlbnRGaWx0ZXJUZXJtOiBzdHJpbmc7XG4gIHByaXZhdGUgQ1VSUkVOVF9MT0NBVElPTiA9IGxvY2F0aW9uLmhyZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSB1aTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmluaXRGb3JtKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzU3RhdGUgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcbiAgICB0aGlzLnByZWRlZmluZWRGaWx0ZXJzVmlzaWJsZSA9XG4gICAgICB0aGlzLnBhY2thZ2VUeXBlcz8ubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5wYWNrYWdlQXZhaWxhYmlsaXRpZXM/Lmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMucGFja2FnZUNvbnRlbnRzPy5sZW5ndGggPiAwO1xuICAgIHRoaXMuY3VycmVudExhbmcgPSB0aGlzLnVpLnN0YXRlLmxhbmc7XG4gIH1cblxuICBzZXRGaWx0ZXJUZXJtKGZpbHRlclRlcm06IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEZpbHRlclRlcm0gPSBmaWx0ZXJUZXJtO1xuICAgIHRoaXMuc2V0UGlwZSgpO1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5GSUxURVJfTElTVCwge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuTElTVF9GSUxURVJTLFxuICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkFDVElPTlMuU0VUX0ZJTFRFUl9URVJNLFxuICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICB9KTtcbiAgfVxuXG4gIGFwcGx5UHJlZGVmaW5lZEZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyc1N0YXRlID0gdGhpcy5mb3JtR3JvdXAudmFsdWU7XG4gICAgdGhpcy5zZXRDaGlwcygpO1xuICAgIHRoaXMuc2V0UGlwZSgpO1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5GSUxURVJfTElTVCwge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuTElTVF9GSUxURVJTLFxuICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkFDVElPTlMuU0VUX1BSRURFRklORURfRklMVEVSUyxcbiAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OLFxuICAgICAgZmlsdGVyczogdGhpcy5jdXJyZW50RmlsdGVyc1N0YXRlXG4gICAgfSk7XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5yZXNldCgpO1xuICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuRklMVEVSX0xJU1QsIHtcbiAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLkxJU1RfRklMVEVSUyxcbiAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5BQ1RJT05TLlJFU0VUX0ZJTFRFUixcbiAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgfSk7XG4gICAgdGhpcy5hcHBseVByZWRlZmluZWRGaWx0ZXJzKCk7XG4gIH1cblxuICByZXNldEFsbEZpbHRlcnMoKSB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIHRoaXMuZmlsdGVySW5wdXQucmVzZXQoKTtcbiAgfVxuXG4gIHRvZ2dsZURyb3Bkb3duKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMuY3VycmVudEZpbHRlcnNTdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZGVzZWxlY3RDaGlwKGNoaXA6IFtzdHJpbmcsIEZvcm1Db250cm9sXSk6IHZvaWQge1xuICAgIGNoaXBbMV0uc2V0VmFsdWUoZmFsc2UpO1xuICAgIHRoaXMuYXBwbHlQcmVkZWZpbmVkRmlsdGVycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICB0eXBlOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgW1BhY2thZ2VUeXBlLk9GRklDSUFMXTogW2ZhbHNlXSxcbiAgICAgICAgW1BhY2thZ2VUeXBlLkNPTU1VTklUWV06IFtmYWxzZV1cbiAgICAgIH0pLFxuICAgICAgYXZhaWxhYmlsaXR5OiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgW0FQUF9TVEFURS5TVUJTQ1JJQkVELmxhYmVsXTogW2ZhbHNlXSxcbiAgICAgICAgW0FQUF9TVEFURS5VTlBBQ0tFRC5sYWJlbF06IFtmYWxzZV0sXG4gICAgICAgIFtBUFBfU1RBVEUuRVhURVJOQUwubGFiZWxdOiBbZmFsc2VdLFxuICAgICAgICBbQVBQX1NUQVRFLkNVU1RPTS5sYWJlbF06IFtmYWxzZV1cbiAgICAgIH0pLFxuICAgICAgY29udGVudDogdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIFtBUFBfU1RBVEUuUEFDS0FHRV9CTFVFUFJJTlQubGFiZWxdOiBbZmFsc2VdLFxuICAgICAgICBbQVBQX1NUQVRFLlBBQ0tBR0VfUExVR0lOLmxhYmVsXTogW2ZhbHNlXVxuICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGlwZSgpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJQaXBlID0gcGlwZShcbiAgICAgIG1hcCgoZGF0YTogSUFwcGxpY2F0aW9uW10pID0+IHtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YS5maWx0ZXIoKGFwcDogSUFwcGxpY2F0aW9uKSA9PiB7XG4gICAgICAgICAgbGV0IG1hdGNoZXNCeVN0cmluZztcbiAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudEZpbHRlclRlcm0gfHwgdGhpcy5jdXJyZW50RmlsdGVyVGVybS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBtYXRjaGVzQnlTdHJpbmcgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhcHBOYW1lID1cbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZyA9PT0gJ2VuJyB8fCAhYXBwLm5hbWU/Lmxlbmd0aCB8fCAhaW50ZXJuYWxBcHBzW2FwcC5uYW1lXVxuICAgICAgICAgICAgICAgID8gYXBwLm5hbWVcbiAgICAgICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGludGVybmFsQXBwc1thcHAubmFtZV0pO1xuICAgICAgICAgICAgbWF0Y2hlc0J5U3RyaW5nID1cbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJDb250YWluU3RyaW5nKGFwcE5hbWUsIHRoaXMuY3VycmVudEZpbHRlclRlcm0pIHx8XG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyQ29udGFpblN0cmluZyhhcHAuZGVzY3JpcHRpb24sIHRoaXMuY3VycmVudEZpbHRlclRlcm0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1hdGNoZXNCeVByZWRlZmluZWRQcm9wZXJ0eSA9XG4gICAgICAgICAgICB0aGlzLmFwcE1hdGNoZXNCeVByZWRlZmluZWRQcm9wZXJ0eShhcHAsICd0eXBlJykgJiZcbiAgICAgICAgICAgIHRoaXMuYXBwTWF0Y2hlc0J5UHJlZGVmaW5lZFByb3BlcnR5KGFwcCwgJ2F2YWlsYWJpbGl0eScpICYmXG4gICAgICAgICAgICB0aGlzLmFwcE1hdGNoZXNCeVByZWRlZmluZWRQcm9wZXJ0eShhcHAsICdjb250ZW50Jyk7XG5cbiAgICAgICAgICByZXR1cm4gbWF0Y2hlc0J5U3RyaW5nICYmIG1hdGNoZXNCeVByZWRlZmluZWRQcm9wZXJ0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5maWx0ZXJQaXBlQ2hhbmdlLmVtaXQoZmlsdGVyUGlwZSk7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckNvbnRhaW5TdHJpbmcobmFtZTogc3RyaW5nLCBmaWx0ZXJUZXJtOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB0ZXJtID0gZmlsdGVyVGVybS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICByZXR1cm4gbmFtZSAmJiBuYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0ZXJtKSA+IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBNYXRjaGVzQnlQcmVkZWZpbmVkUHJvcGVydHkoXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgcHJvcGVydHk6IGtleW9mIFBhY2thZ2VGaWx0ZXJzXG4gICk6IGJvb2xlYW4ge1xuICAgIC8vIGlmIGZpbHRlciBvYmplY3QgZG9lcyBub3QgY29udGFpbiBwcm9wZXJ0eSBmaWx0ZXJzIG9yIGFsbCBmaWx0ZXJzIGFyZSBmYWxzZSwgZmlsdGVyIGlzIGluYWN0aXZlXG4gICAgY29uc3QgZmlsdGVyRm9yUHJvcGVydHlJc0FjdGl2ZSA9XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzU3RhdGU/Lltwcm9wZXJ0eV0gJiZcbiAgICAgICFPYmplY3QudmFsdWVzKHRoaXMuY3VycmVudEZpbHRlcnNTdGF0ZVtwcm9wZXJ0eV0pLmV2ZXJ5KHYgPT4gIXYpO1xuICAgIGlmICghZmlsdGVyRm9yUHJvcGVydHlJc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghYXBwLmZpbHRlclByb3BzPy5bcHJvcGVydHldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRGaWx0ZXJzU3RhdGVbcHJvcGVydHldW2FwcC5maWx0ZXJQcm9wc1twcm9wZXJ0eV1dO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hpcHMoKTogdm9pZCB7XG4gICAgdGhpcy5jaGlwcyA9IFtdO1xuICAgIE9iamVjdC52YWx1ZXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKGNvbnRyb2xzR3JvdXA6IEZvcm1Hcm91cCkgPT4ge1xuICAgICAgT2JqZWN0LmVudHJpZXMoY29udHJvbHNHcm91cC5jb250cm9scykuZm9yRWFjaCgoZW50cnk6IFtzdHJpbmcsIEZvcm1Db250cm9sXSkgPT4ge1xuICAgICAgICBpZiAoZW50cnlbMV0udmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmNoaXBzLnB1c2goZW50cnkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGZvcm0gY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxjOHktZmlsdGVyIChvblNlYXJjaCk9XCJzZXRGaWx0ZXJUZXJtKCRldmVudClcIj48L2M4eS1maWx0ZXI+XG5cbiAgPGRpdlxuICAgICpuZ0lmPVwicHJlZGVmaW5lZEZpbHRlcnNWaXNpYmxlXCJcbiAgICBjbGFzcz1cImRyb3Bkb3duIG0tbC04IG0tci00XCJcbiAgICBkcm9wZG93blxuICAgIChpc09wZW5DaGFuZ2UpPVwidG9nZ2xlRHJvcGRvd24oJGV2ZW50KVwiXG4gICAgI2ZpbHRlcnNEcm9wZG93bj1cImJzLWRyb3Bkb3duXCJcbiAgICBbY2RrVHJhcEZvY3VzXT1cImZpbHRlcnNEcm9wZG93bi5pc09wZW5cIlxuICAgIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBkLWlubGluZS1mbGV4XCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuLWNsZWFuIGZvcm0tY29udHJvbCBwLWwtOCBwLXItMTYgYS1zLXN0cmV0Y2ggZC1mbGV4IGEtaS1jZW50ZXIgdy1hdXRvXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnRmlsdGVycycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBkcm9wZG93blRvZ2dsZVxuICAgICAgPlxuICAgICAgICA8c3BhbiBbbmdQbHVyYWxdPVwiY2hpcHMubGVuZ3RoXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nUGx1cmFsQ2FzZT1cIj0wXCI+XG4gICAgICAgICAgICB7eyAnRmlsdGVycycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ1BsdXJhbENhc2U9XCI9MVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCI+e3sgY2hpcHMubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAge3sgJ0ZpbHRlcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ1BsdXJhbENhc2U9XCJvdGhlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCI+e3sgY2hpcHMubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAge3sgJ0ZpbHRlcnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb24gcC10LTAgcC1iLTAgZC1mbGV4IGdhcC00IGEtaS1jZW50ZXIgaW5uZXItc2Nyb2xsXCJcbiAgICAgICAgKm5nSWY9XCJjaGlwcy5sZW5ndGggPiAwXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpcCBvZiBjaGlwc1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mbyBjaGlwXCIgKm5nSWY9XCJjaGlwWzFdLnZhbHVlXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi14cyBidG4tY2xlYW4gdGV4dC0xMFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdSZW1vdmUnIHwgdHJhbnNsYXRlIH19IHt7IGNoaXBbMF0gfCB0cmFuc2xhdGUgfCB0aXRsZWNhc2UgfX1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGVzZWxlY3RDaGlwKGNoaXApXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB7eyBjaGlwWzBdIHwgdHJhbnNsYXRlIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgKmRyb3Bkb3duTWVudT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1mb3JtXCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cCAqbmdJZj1cInBhY2thZ2VUeXBlcy5sZW5ndGhcIiBmb3JtR3JvdXBOYW1lPVwidHlwZVwiPlxuICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgIHt7ICdUeXBlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LWNoZWNrYm94XCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgcGFja2FnZVR5cGVzXCIgW3RpdGxlXT1cInR5cGUgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInR5cGVcIiBbdmFsdWVdPVwidHlwZVwiIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyB0eXBlIHwgdHJhbnNsYXRlIHwgdGl0bGVjYXNlIH19PC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwICpuZ0lmPVwicGFja2FnZUF2YWlsYWJpbGl0aWVzLmxlbmd0aFwiIGZvcm1Hcm91cE5hbWU9XCJhdmFpbGFiaWxpdHlcIj5cbiAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICB7eyAnQXZhaWxhYmlsaXR5YG9mIHBhY2thZ2UgYmFzZWQgb24gYXBwIHN0YXRlYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGF2YWlsYWJpbGl0eSBvZiBwYWNrYWdlQXZhaWxhYmlsaXRpZXNcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImF2YWlsYWJpbGl0eSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtmb3JtQ29udHJvbE5hbWVdPVwiYXZhaWxhYmlsaXR5XCIgW3ZhbHVlXT1cImF2YWlsYWJpbGl0eVwiIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyBhdmFpbGFiaWxpdHkgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cblxuICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgKm5nSWY9XCJwYWNrYWdlQ29udGVudHMubGVuZ3RoXCIgZm9ybUdyb3VwTmFtZT1cImNvbnRlbnRcIj5cbiAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICB7eyAnQ29udGVudCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbnRlbnQgb2YgcGFja2FnZUNvbnRlbnRzXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJjb250ZW50IHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250ZW50XCIgW3ZhbHVlXT1cImNvbnRlbnRcIiAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3sgY29udGVudCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNiBkLWZsZXggZ2FwLTggc2VwYXJhdG9yLXRvcFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIGZsZXgtZ3Jvd1wiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnUmVzZXQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAoY2xpY2spPVwicmVzZXQoKTsgZmlsdGVyc0Ryb3Bkb3duLmlzT3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgPlxuICAgICAgICAgIFJlc2V0XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gZmxleC1ncm93XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdBcHBseScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIChjbGljayk9XCJhcHBseVByZWRlZmluZWRGaWx0ZXJzKCk7IGZpbHRlcnNEcm9wZG93bi5pc09wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Hcm91cC5wcmlzdGluZSAmJiBmb3JtR3JvdXAudW50b3VjaGVkXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgPlxuICAgICAgICAgIEFwcGx5XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19