@provoly/dashboard 1.2.1 → 1.2.3

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 (68) hide show
  1. package/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.d.ts +3 -3
  2. package/components/data-format/data-format.module.d.ts +7 -0
  3. package/components/data-format/data-format.pipe.d.ts +8 -0
  4. package/components/data-format/index.d.ts +5 -0
  5. package/components/data-format/public-api.d.ts +2 -0
  6. package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +6 -6
  7. package/esm2022/components/data-format/data-format.module.mjs +16 -0
  8. package/esm2022/components/data-format/data-format.pipe.mjs +32 -0
  9. package/esm2022/components/data-format/provoly-dashboard-components-data-format.mjs +5 -0
  10. package/esm2022/components/data-format/public-api.mjs +3 -0
  11. package/esm2022/lib/core/components/share/group-share/group-share.component.mjs +28 -21
  12. package/esm2022/lib/core/components/share/legacy-share/share.component.mjs +25 -37
  13. package/esm2022/lib/core/components/share/share.model.mjs +2 -7
  14. package/esm2022/lib/core/model/widget.interface.mjs +1 -1
  15. package/esm2022/lib/core/store/aggregation/backend-aggregation.service.mjs +2 -2
  16. package/esm2022/lib/core/store/data-source/data-source.actions.mjs +1 -1
  17. package/esm2022/lib/core/store/data-source/data-source.model.mjs +7 -2
  18. package/esm2022/lib/core/toolbox/toolbox-menu.service.mjs +3 -6
  19. package/esm2022/restitution/components/restitution/restitution.component.mjs +8 -12
  20. package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +4 -5
  21. package/esm2022/restitution/components/restitution-list/restitution-list.component.mjs +2 -2
  22. package/esm2022/restitution/components/restitution-list-item/restitution-list-item.component.mjs +4 -5
  23. package/esm2022/search/components/save-query/save-query.component.mjs +2 -2
  24. package/esm2022/search/search-tools/search-tools.component.mjs +1 -1
  25. package/esm2022/widgets/widget-analytic/component/widget-analytic.component.mjs +4 -3
  26. package/esm2022/widgets/widget-analytic/widget-analytic.module.mjs +8 -4
  27. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +21 -11
  28. package/esm2022/widgets/widget-map/style/css.component.mjs +2 -2
  29. package/esm2022/widgets/widget-table/expand-value/format-number.pipe.mjs +7 -12
  30. package/fesm2022/provoly-dashboard-admin.mjs +5 -5
  31. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  32. package/fesm2022/provoly-dashboard-components-data-format.mjs +52 -0
  33. package/fesm2022/provoly-dashboard-components-data-format.mjs.map +1 -0
  34. package/fesm2022/provoly-dashboard-restitution.mjs +11 -17
  35. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  36. package/fesm2022/provoly-dashboard-search.mjs +2 -2
  37. package/fesm2022/provoly-dashboard-search.mjs.map +1 -1
  38. package/fesm2022/provoly-dashboard-widgets-widget-analytic.mjs +10 -5
  39. package/fesm2022/provoly-dashboard-widgets-widget-analytic.mjs.map +1 -1
  40. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +22 -12
  41. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  42. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +13 -17
  43. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  44. package/fesm2022/provoly-dashboard.mjs +102 -107
  45. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  46. package/lib/core/components/share/group-share/group-share.component.d.ts +15 -10
  47. package/lib/core/components/share/legacy-share/share.component.d.ts +8 -14
  48. package/lib/core/components/share/share.model.d.ts +0 -9
  49. package/lib/core/model/widget.interface.d.ts +1 -2
  50. package/lib/core/store/data-source/data-source.actions.d.ts +9 -4
  51. package/lib/core/store/data-source/data-source.model.d.ts +9 -2
  52. package/lib/core/toolbox/toolbox-menu.service.d.ts +1 -3
  53. package/package.json +37 -31
  54. package/restitution/components/restitution/restitution.component.d.ts +2 -3
  55. package/restitution/components/restitution-catalog/restitution-catalog.component.d.ts +1 -2
  56. package/restitution/components/restitution-list-item/restitution-list-item.component.d.ts +1 -2
  57. package/search/components/save-query/save-query.component.d.ts +5 -2
  58. package/search/search-fulltext/store/search-fulltext.effects.d.ts +4 -1
  59. package/search/search-mono-class/store/search-mono-class.effects.d.ts +4 -1
  60. package/search/search-multi-class/store/search-multi-class.effects.d.ts +4 -1
  61. package/styles/base/_utils.scss +4 -0
  62. package/styles-theme/main-theme.scss +0 -1
  63. package/widgets/widget-analytic/component/widget-analytic.component.d.ts +1 -1
  64. package/widgets/widget-analytic/widget-analytic.module.d.ts +2 -1
  65. package/widgets/widget-map/component/widget-map.component.d.ts +4 -2
  66. package/widgets/widget-map/style/_m-layer-legend.scss +41 -56
  67. package/widgets/widget-table/expand-value/format-number.pipe.d.ts +1 -3
  68. package/styles-theme/components-theme/_m-layer-legend.theme.scss +0 -24
@@ -1,5 +1,5 @@
1
1
  import { Component, Input } from '@angular/core';
2
- import { ConfigSelectors, DashboardActions, DashboardGridLayout, DashboardSelectors, PryVisibilityType, SubscriptionnerDirective } from '@provoly/dashboard';
2
+ import { ConfigSelectors, DashboardActions, DashboardGridLayout, DashboardSelectors, SubscriptionnerDirective } from '@provoly/dashboard';
3
3
  import { map } from 'rxjs';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@ngrx/store";
@@ -12,7 +12,6 @@ export class PryRestitutionListItemComponent extends SubscriptionnerDirective {
12
12
  this.toolboxManifestService = toolboxManifestService;
13
13
  this.translate = true;
14
14
  this.automaticGridMode = false;
15
- this.PryVisibilityType = PryVisibilityType;
16
15
  this.store.select(ConfigSelectors.catalog).subscribe((catalog) => (this.catalog = catalog));
17
16
  this.automaticGridMode$ = this.store
18
17
  .select(DashboardSelectors.gridLayout)
@@ -28,14 +27,14 @@ export class PryRestitutionListItemComponent extends SubscriptionnerDirective {
28
27
  this.store.dispatch(DashboardActions.addWidgetToPresentation({ widgetType: widget.type }));
29
28
  }
30
29
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryRestitutionListItemComponent, deps: [{ token: i1.Store }, { token: i2.ToolboxManifestService }], target: i0.ɵɵFactoryTarget.Component }); }
31
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: PryRestitutionListItemComponent, selector: "pry-catalog-item", inputs: { widget: "widget", translate: "translate" }, usesInheritance: true, ngImport: i0, template: "<li\n class=\"o-catalog__list__item\"\n [class.is-point]=\"automaticGridMode$ | async\"\n [draggable]=\"!(automaticGridMode$ | async)\"\n role=\"listitem\"\n aria-grabbed=\"false\"\n aria-haspopup=\"true\"\n tabindex=\"-1\"\n [title]=\"widget.description ?? widget.label | i18n : { warn: false }\"\n (dragstart)=\"dragStart($event, widget.type)\"\n>\n <ng-container *ngIf=\"automaticGridMode$ | async\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"viewInDashboard(widget)\"\n [title]=\"'@pry.restitution.add_icon' | i18n\"\n >\n <pry-icon [width]=\"25\" [height]=\"25\" iconSvg=\"add_column\" class=\"o-catalog__list__icon\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.restitution.add_icon' | i18n }}</span>\n </button>\n </ng-container>\n <img\n [alt]=\"widget.label | i18n : { warn: false }\"\n [src]=\"widget.icon | getSecuredImage : [53, 53] | async\"\n [height]=\"53\"\n [width]=\"53\"\n />\n <p class=\"o-catalog__list__item__libelle\" *ngIf=\"widget.isCustom; else translate\">{{ widget.label }}</p>\n <ng-template #translate>\n <p class=\"o-catalog__list__item__libelle\">{{ widget.label | i18n : { warn: false } }}</p>\n </ng-template>\n <ng-container *ngIf=\"widget.visibility?.type === PryVisibilityType.PRIVATE\">\n <pry-icon\n iconSvg=\"private\"\n class=\"is-private a-tooltip\"\n [attr.data-tooltip]=\"'@pry.restitution.lock' | i18n\"\n [height]=\"17\"\n [width]=\"17\"\n ></pry-icon>\n </ng-container>\n</li>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.GetSecuredImagePipe, name: "getSecuredImage" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }] }); }
30
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: PryRestitutionListItemComponent, selector: "pry-catalog-item", inputs: { widget: "widget", translate: "translate" }, usesInheritance: true, ngImport: i0, template: "<li\n class=\"o-catalog__list__item\"\n [class.is-point]=\"automaticGridMode$ | async\"\n [draggable]=\"!(automaticGridMode$ | async)\"\n role=\"listitem\"\n aria-grabbed=\"false\"\n aria-haspopup=\"true\"\n tabindex=\"-1\"\n [title]=\"widget.description ?? widget.label | i18n : { warn: false }\"\n (dragstart)=\"dragStart($event, widget.type)\"\n>\n <ng-container *ngIf=\"automaticGridMode$ | async\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"viewInDashboard(widget)\"\n [title]=\"'@pry.restitution.add_icon' | i18n\"\n >\n <pry-icon [width]=\"25\" [height]=\"25\" iconSvg=\"add_column\" class=\"o-catalog__list__icon\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.restitution.add_icon' | i18n }}</span>\n </button>\n </ng-container>\n <img\n [alt]=\"widget.label | i18n : { warn: false }\"\n [src]=\"widget.icon | getSecuredImage : [53, 53] | async\"\n [height]=\"53\"\n [width]=\"53\"\n />\n <p class=\"o-catalog__list__item__libelle\" *ngIf=\"widget.isCustom; else translate\">{{ widget.label }}</p>\n <ng-template #translate>\n <p class=\"o-catalog__list__item__libelle\">{{ widget.label | i18n : { warn: false } }}</p>\n </ng-template>\n <ng-container *ngIf=\"widget.groups?.length === 0\">\n <pry-icon\n iconSvg=\"private\"\n class=\"is-private a-tooltip\"\n [attr.data-tooltip]=\"'@pry.restitution.lock' | i18n\"\n [height]=\"17\"\n [width]=\"17\"\n ></pry-icon>\n </ng-container>\n</li>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.GetSecuredImagePipe, name: "getSecuredImage" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }] }); }
32
31
  }
33
32
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryRestitutionListItemComponent, decorators: [{
34
33
  type: Component,
35
- args: [{ selector: 'pry-catalog-item', template: "<li\n class=\"o-catalog__list__item\"\n [class.is-point]=\"automaticGridMode$ | async\"\n [draggable]=\"!(automaticGridMode$ | async)\"\n role=\"listitem\"\n aria-grabbed=\"false\"\n aria-haspopup=\"true\"\n tabindex=\"-1\"\n [title]=\"widget.description ?? widget.label | i18n : { warn: false }\"\n (dragstart)=\"dragStart($event, widget.type)\"\n>\n <ng-container *ngIf=\"automaticGridMode$ | async\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"viewInDashboard(widget)\"\n [title]=\"'@pry.restitution.add_icon' | i18n\"\n >\n <pry-icon [width]=\"25\" [height]=\"25\" iconSvg=\"add_column\" class=\"o-catalog__list__icon\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.restitution.add_icon' | i18n }}</span>\n </button>\n </ng-container>\n <img\n [alt]=\"widget.label | i18n : { warn: false }\"\n [src]=\"widget.icon | getSecuredImage : [53, 53] | async\"\n [height]=\"53\"\n [width]=\"53\"\n />\n <p class=\"o-catalog__list__item__libelle\" *ngIf=\"widget.isCustom; else translate\">{{ widget.label }}</p>\n <ng-template #translate>\n <p class=\"o-catalog__list__item__libelle\">{{ widget.label | i18n : { warn: false } }}</p>\n </ng-template>\n <ng-container *ngIf=\"widget.visibility?.type === PryVisibilityType.PRIVATE\">\n <pry-icon\n iconSvg=\"private\"\n class=\"is-private a-tooltip\"\n [attr.data-tooltip]=\"'@pry.restitution.lock' | i18n\"\n [height]=\"17\"\n [width]=\"17\"\n ></pry-icon>\n </ng-container>\n</li>\n" }]
34
+ args: [{ selector: 'pry-catalog-item', template: "<li\n class=\"o-catalog__list__item\"\n [class.is-point]=\"automaticGridMode$ | async\"\n [draggable]=\"!(automaticGridMode$ | async)\"\n role=\"listitem\"\n aria-grabbed=\"false\"\n aria-haspopup=\"true\"\n tabindex=\"-1\"\n [title]=\"widget.description ?? widget.label | i18n : { warn: false }\"\n (dragstart)=\"dragStart($event, widget.type)\"\n>\n <ng-container *ngIf=\"automaticGridMode$ | async\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"viewInDashboard(widget)\"\n [title]=\"'@pry.restitution.add_icon' | i18n\"\n >\n <pry-icon [width]=\"25\" [height]=\"25\" iconSvg=\"add_column\" class=\"o-catalog__list__icon\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.restitution.add_icon' | i18n }}</span>\n </button>\n </ng-container>\n <img\n [alt]=\"widget.label | i18n : { warn: false }\"\n [src]=\"widget.icon | getSecuredImage : [53, 53] | async\"\n [height]=\"53\"\n [width]=\"53\"\n />\n <p class=\"o-catalog__list__item__libelle\" *ngIf=\"widget.isCustom; else translate\">{{ widget.label }}</p>\n <ng-template #translate>\n <p class=\"o-catalog__list__item__libelle\">{{ widget.label | i18n : { warn: false } }}</p>\n </ng-template>\n <ng-container *ngIf=\"widget.groups?.length === 0\">\n <pry-icon\n iconSvg=\"private\"\n class=\"is-private a-tooltip\"\n [attr.data-tooltip]=\"'@pry.restitution.lock' | i18n\"\n [height]=\"17\"\n [width]=\"17\"\n ></pry-icon>\n </ng-container>\n</li>\n" }]
36
35
  }], ctorParameters: () => [{ type: i1.Store }, { type: i2.ToolboxManifestService }], propDecorators: { widget: [{
37
36
  type: Input
38
37
  }], translate: [{
39
38
  type: Input
40
39
  }] } });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdGl0dXRpb24tbGlzdC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3Jlc3RpdHV0aW9uL2NvbXBvbmVudHMvcmVzdGl0dXRpb24tbGlzdC1pdGVtL3Jlc3RpdHV0aW9uLWxpc3QtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9yZXN0aXR1dGlvbi9jb21wb25lbnRzL3Jlc3RpdHV0aW9uLWxpc3QtaXRlbS9yZXN0aXR1dGlvbi1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUVMLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsd0JBQXdCLEVBR3pCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFNdkMsTUFBTSxPQUFPLCtCQUFnQyxTQUFRLHdCQUF3QjtJQVEzRSxZQUNVLEtBQVksRUFDWixzQkFBOEM7UUFFdEQsS0FBSyxFQUFFLENBQUM7UUFIQSxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1osMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQVIvQyxjQUFTLEdBQVksSUFBSSxDQUFDO1FBR25DLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxzQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQU9wQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLO2FBQ2pDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUM7YUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9HLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBaUIsRUFBRSxJQUFZO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFvQjtRQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7OEdBNUJVLCtCQUErQjtrR0FBL0IsK0JBQStCLHFJQ25CNUMsdWlEQTBDQTs7MkZEdkJhLCtCQUErQjtrQkFKM0MsU0FBUzsrQkFDRSxrQkFBa0I7K0dBSW5CLE1BQU07c0JBQWQsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBDYXRhbG9nRW50cnksXG4gIENvbmZpZ1NlbGVjdG9ycyxcbiAgRGFzaGJvYXJkQWN0aW9ucyxcbiAgRGFzaGJvYXJkR3JpZExheW91dCxcbiAgRGFzaGJvYXJkU2VsZWN0b3JzLFxuICBQcnlWaXNpYmlsaXR5VHlwZSxcbiAgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlLFxuICBUb29sYm94TWFuaWZlc3RTZXJ2aWNlLFxuICBXaWRnZXRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktY2F0YWxvZy1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3RpdHV0aW9uLWxpc3QtaXRlbS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUHJ5UmVzdGl0dXRpb25MaXN0SXRlbUNvbXBvbmVudCBleHRlbmRzIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSB7XG4gIEBJbnB1dCgpIHdpZGdldCE6IENhdGFsb2dFbnRyeTtcbiAgQElucHV0KCkgdHJhbnNsYXRlOiBib29sZWFuID0gdHJ1ZTtcbiAgY2F0YWxvZzogV2lkZ2V0W10gfCB1bmRlZmluZWQ7XG4gIGF1dG9tYXRpY0dyaWRNb2RlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgYXV0b21hdGljR3JpZE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgUHJ5VmlzaWJpbGl0eVR5cGUgPSBQcnlWaXNpYmlsaXR5VHlwZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIHRvb2xib3hNYW5pZmVzdFNlcnZpY2U6IFRvb2xib3hNYW5pZmVzdFNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMuY2F0YWxvZykuc3Vic2NyaWJlKChjYXRhbG9nOiBXaWRnZXRbXSkgPT4gKHRoaXMuY2F0YWxvZyA9IGNhdGFsb2cpKTtcbiAgICB0aGlzLmF1dG9tYXRpY0dyaWRNb2RlJCA9IHRoaXMuc3RvcmVcbiAgICAgIC5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmdyaWRMYXlvdXQpXG4gICAgICAucGlwZShtYXAoKGxheW91dCkgPT4gbGF5b3V0ICE9PSBEYXNoYm9hcmRHcmlkTGF5b3V0Lk1BTlVBTCkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hdXRvbWF0aWNHcmlkTW9kZSQuc3Vic2NyaWJlKChtb2RlQXV0bykgPT4gKHRoaXMuYXV0b21hdGljR3JpZE1vZGUgPSBtb2RlQXV0bykpKTtcbiAgfVxuXG4gIGRyYWdTdGFydCgkZXZlbnQ6IERyYWdFdmVudCwgdHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmF1dG9tYXRpY0dyaWRNb2RlKSB7XG4gICAgICB0aGlzLnRvb2xib3hNYW5pZmVzdFNlcnZpY2UuZGF0YVRyYW5zZmVyKCRldmVudCwgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgdmlld0luRGFzaGJvYXJkKHdpZGdldDogQ2F0YWxvZ0VudHJ5KSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLmFkZFdpZGdldFRvUHJlc2VudGF0aW9uKHsgd2lkZ2V0VHlwZTogd2lkZ2V0LnR5cGUgfSkpO1xuICB9XG59XG4iLCI8bGlcbiAgY2xhc3M9XCJvLWNhdGFsb2dfX2xpc3RfX2l0ZW1cIlxuICBbY2xhc3MuaXMtcG9pbnRdPVwiYXV0b21hdGljR3JpZE1vZGUkIHwgYXN5bmNcIlxuICBbZHJhZ2dhYmxlXT1cIiEoYXV0b21hdGljR3JpZE1vZGUkIHwgYXN5bmMpXCJcbiAgcm9sZT1cImxpc3RpdGVtXCJcbiAgYXJpYS1ncmFiYmVkPVwiZmFsc2VcIlxuICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gIHRhYmluZGV4PVwiLTFcIlxuICBbdGl0bGVdPVwid2lkZ2V0LmRlc2NyaXB0aW9uID8/IHdpZGdldC5sYWJlbCB8IGkxOG4gOiB7IHdhcm46IGZhbHNlIH1cIlxuICAoZHJhZ3N0YXJ0KT1cImRyYWdTdGFydCgkZXZlbnQsIHdpZGdldC50eXBlKVwiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhdXRvbWF0aWNHcmlkTW9kZSQgfCBhc3luY1wiPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgIChjbGljayk9XCJ2aWV3SW5EYXNoYm9hcmQod2lkZ2V0KVwiXG4gICAgICBbdGl0bGVdPVwiJ0BwcnkucmVzdGl0dXRpb24uYWRkX2ljb24nIHwgaTE4blwiXG4gICAgPlxuICAgICAgPHByeS1pY29uIFt3aWR0aF09XCIyNVwiIFtoZWlnaHRdPVwiMjVcIiBpY29uU3ZnPVwiYWRkX2NvbHVtblwiIGNsYXNzPVwiby1jYXRhbG9nX19saXN0X19pY29uXCI+PC9wcnktaWNvbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS5yZXN0aXR1dGlvbi5hZGRfaWNvbicgfCBpMThuIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGltZ1xuICAgIFthbHRdPVwid2lkZ2V0LmxhYmVsIHwgaTE4biA6IHsgd2FybjogZmFsc2UgfVwiXG4gICAgW3NyY109XCJ3aWRnZXQuaWNvbiB8IGdldFNlY3VyZWRJbWFnZSA6IFs1MywgNTNdIHwgYXN5bmNcIlxuICAgIFtoZWlnaHRdPVwiNTNcIlxuICAgIFt3aWR0aF09XCI1M1wiXG4gIC8+XG4gIDxwIGNsYXNzPVwiby1jYXRhbG9nX19saXN0X19pdGVtX19saWJlbGxlXCIgKm5nSWY9XCJ3aWRnZXQuaXNDdXN0b207IGVsc2UgdHJhbnNsYXRlXCI+e3sgd2lkZ2V0LmxhYmVsIH19PC9wPlxuICA8bmctdGVtcGxhdGUgI3RyYW5zbGF0ZT5cbiAgICA8cCBjbGFzcz1cIm8tY2F0YWxvZ19fbGlzdF9faXRlbV9fbGliZWxsZVwiPnt7IHdpZGdldC5sYWJlbCB8IGkxOG4gOiB7IHdhcm46IGZhbHNlIH0gfX08L3A+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ3aWRnZXQudmlzaWJpbGl0eT8udHlwZSA9PT0gUHJ5VmlzaWJpbGl0eVR5cGUuUFJJVkFURVwiPlxuICAgIDxwcnktaWNvblxuICAgICAgaWNvblN2Zz1cInByaXZhdGVcIlxuICAgICAgY2xhc3M9XCJpcy1wcml2YXRlIGEtdG9vbHRpcFwiXG4gICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0BwcnkucmVzdGl0dXRpb24ubG9jaycgfCBpMThuXCJcbiAgICAgIFtoZWlnaHRdPVwiMTdcIlxuICAgICAgW3dpZHRoXT1cIjE3XCJcbiAgICA+PC9wcnktaWNvbj5cbiAgPC9uZy1jb250YWluZXI+XG48L2xpPlxuIl19
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdGl0dXRpb24tbGlzdC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3Jlc3RpdHV0aW9uL2NvbXBvbmVudHMvcmVzdGl0dXRpb24tbGlzdC1pdGVtL3Jlc3RpdHV0aW9uLWxpc3QtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9yZXN0aXR1dGlvbi9jb21wb25lbnRzL3Jlc3RpdHV0aW9uLWxpc3QtaXRlbS9yZXN0aXR1dGlvbi1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUVMLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQix3QkFBd0IsRUFHekIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7OztBQU12QyxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsd0JBQXdCO0lBTzNFLFlBQ1UsS0FBWSxFQUNaLHNCQUE4QztRQUV0RCxLQUFLLEVBQUUsQ0FBQztRQUhBLFVBQUssR0FBTCxLQUFLLENBQU87UUFDWiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBUC9DLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFHbkMsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBT2pDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUs7YUFDakMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQzthQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0csQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFpQixFQUFFLElBQVk7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQW9CO1FBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0YsQ0FBQzs4R0EzQlUsK0JBQStCO2tHQUEvQiwrQkFBK0IscUlDbEI1Qyw2Z0RBMENBOzsyRkR4QmEsK0JBQStCO2tCQUozQyxTQUFTOytCQUNFLGtCQUFrQjsrR0FJbkIsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIENhdGFsb2dFbnRyeSxcbiAgQ29uZmlnU2VsZWN0b3JzLFxuICBEYXNoYm9hcmRBY3Rpb25zLFxuICBEYXNoYm9hcmRHcmlkTGF5b3V0LFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSxcbiAgVG9vbGJveE1hbmlmZXN0U2VydmljZSxcbiAgV2lkZ2V0XG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LWNhdGFsb2ctaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0aXR1dGlvbi1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByeVJlc3RpdHV0aW9uTGlzdEl0ZW1Db21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUge1xuICBASW5wdXQoKSB3aWRnZXQhOiBDYXRhbG9nRW50cnk7XG4gIEBJbnB1dCgpIHRyYW5zbGF0ZTogYm9vbGVhbiA9IHRydWU7XG4gIGNhdGFsb2c6IFdpZGdldFtdIHwgdW5kZWZpbmVkO1xuICBhdXRvbWF0aWNHcmlkTW9kZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGF1dG9tYXRpY0dyaWRNb2RlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSB0b29sYm94TWFuaWZlc3RTZXJ2aWNlOiBUb29sYm94TWFuaWZlc3RTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLmNhdGFsb2cpLnN1YnNjcmliZSgoY2F0YWxvZzogV2lkZ2V0W10pID0+ICh0aGlzLmNhdGFsb2cgPSBjYXRhbG9nKSk7XG4gICAgdGhpcy5hdXRvbWF0aWNHcmlkTW9kZSQgPSB0aGlzLnN0b3JlXG4gICAgICAuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5ncmlkTGF5b3V0KVxuICAgICAgLnBpcGUobWFwKChsYXlvdXQpID0+IGxheW91dCAhPT0gRGFzaGJvYXJkR3JpZExheW91dC5NQU5VQUwpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXV0b21hdGljR3JpZE1vZGUkLnN1YnNjcmliZSgobW9kZUF1dG8pID0+ICh0aGlzLmF1dG9tYXRpY0dyaWRNb2RlID0gbW9kZUF1dG8pKSk7XG4gIH1cblxuICBkcmFnU3RhcnQoJGV2ZW50OiBEcmFnRXZlbnQsIHR5cGU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5hdXRvbWF0aWNHcmlkTW9kZSkge1xuICAgICAgdGhpcy50b29sYm94TWFuaWZlc3RTZXJ2aWNlLmRhdGFUcmFuc2ZlcigkZXZlbnQsIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHZpZXdJbkRhc2hib2FyZCh3aWRnZXQ6IENhdGFsb2dFbnRyeSkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5hZGRXaWRnZXRUb1ByZXNlbnRhdGlvbih7IHdpZGdldFR5cGU6IHdpZGdldC50eXBlIH0pKTtcbiAgfVxufVxuIiwiPGxpXG4gIGNsYXNzPVwiby1jYXRhbG9nX19saXN0X19pdGVtXCJcbiAgW2NsYXNzLmlzLXBvaW50XT1cImF1dG9tYXRpY0dyaWRNb2RlJCB8IGFzeW5jXCJcbiAgW2RyYWdnYWJsZV09XCIhKGF1dG9tYXRpY0dyaWRNb2RlJCB8IGFzeW5jKVwiXG4gIHJvbGU9XCJsaXN0aXRlbVwiXG4gIGFyaWEtZ3JhYmJlZD1cImZhbHNlXCJcbiAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICB0YWJpbmRleD1cIi0xXCJcbiAgW3RpdGxlXT1cIndpZGdldC5kZXNjcmlwdGlvbiA/PyB3aWRnZXQubGFiZWwgfCBpMThuIDogeyB3YXJuOiBmYWxzZSB9XCJcbiAgKGRyYWdzdGFydCk9XCJkcmFnU3RhcnQoJGV2ZW50LCB3aWRnZXQudHlwZSlcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXV0b21hdGljR3JpZE1vZGUkIHwgYXN5bmNcIj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiXG4gICAgICAoY2xpY2spPVwidmlld0luRGFzaGJvYXJkKHdpZGdldClcIlxuICAgICAgW3RpdGxlXT1cIidAcHJ5LnJlc3RpdHV0aW9uLmFkZF9pY29uJyB8IGkxOG5cIlxuICAgID5cbiAgICAgIDxwcnktaWNvbiBbd2lkdGhdPVwiMjVcIiBbaGVpZ2h0XT1cIjI1XCIgaWNvblN2Zz1cImFkZF9jb2x1bW5cIiBjbGFzcz1cIm8tY2F0YWxvZ19fbGlzdF9faWNvblwiPjwvcHJ5LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkucmVzdGl0dXRpb24uYWRkX2ljb24nIHwgaTE4biB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxpbWdcbiAgICBbYWx0XT1cIndpZGdldC5sYWJlbCB8IGkxOG4gOiB7IHdhcm46IGZhbHNlIH1cIlxuICAgIFtzcmNdPVwid2lkZ2V0Lmljb24gfCBnZXRTZWN1cmVkSW1hZ2UgOiBbNTMsIDUzXSB8IGFzeW5jXCJcbiAgICBbaGVpZ2h0XT1cIjUzXCJcbiAgICBbd2lkdGhdPVwiNTNcIlxuICAvPlxuICA8cCBjbGFzcz1cIm8tY2F0YWxvZ19fbGlzdF9faXRlbV9fbGliZWxsZVwiICpuZ0lmPVwid2lkZ2V0LmlzQ3VzdG9tOyBlbHNlIHRyYW5zbGF0ZVwiPnt7IHdpZGdldC5sYWJlbCB9fTwvcD5cbiAgPG5nLXRlbXBsYXRlICN0cmFuc2xhdGU+XG4gICAgPHAgY2xhc3M9XCJvLWNhdGFsb2dfX2xpc3RfX2l0ZW1fX2xpYmVsbGVcIj57eyB3aWRnZXQubGFiZWwgfCBpMThuIDogeyB3YXJuOiBmYWxzZSB9IH19PC9wPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwid2lkZ2V0Lmdyb3Vwcz8ubGVuZ3RoID09PSAwXCI+XG4gICAgPHByeS1pY29uXG4gICAgICBpY29uU3ZnPVwicHJpdmF0ZVwiXG4gICAgICBjbGFzcz1cImlzLXByaXZhdGUgYS10b29sdGlwXCJcbiAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInQHByeS5yZXN0aXR1dGlvbi5sb2NrJyB8IGkxOG5cIlxuICAgICAgW2hlaWdodF09XCIxN1wiXG4gICAgICBbd2lkdGhdPVwiMTdcIlxuICAgID48L3ByeS1pY29uPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbGk+XG4iXX0=
@@ -85,7 +85,7 @@ export class PrySaveQueryComponent {
85
85
  this.dialog.close();
86
86
  }
87
87
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PrySaveQueryComponent, deps: [{ token: i1.Store }, { token: i2.PryDialogRef }, { token: PRY_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
88
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: PrySaveQueryComponent, selector: "pry-save-query", viewQueries: [{ propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "save", first: true, predicate: ["save"], descendants: true }], ngImport: i0, template: "<div\n class=\"o-modal-wrapper\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_rename\"\n (keydown.escape)=\"onClose()\"\n>\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.search.namedQuery.' + (modalSave ? 'saveTitle' : 'renameTitle') | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #cross (keydown.shift.tab)=\"focusElement(this.save)\" (click)=\"onClose()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"name\">{{ '@pry.search.namedQuery.name' | i18n }}</label>\n <input [(ngModel)]=\"name\" id=\"name\" type=\"text\" class=\"a-form-field\" required maxlength=\"30\" />\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"description\">{{ '@pry.search.namedQuery.description' | i18n }}</label>\n <input [(ngModel)]=\"description\" id=\"description\" type=\"text\" class=\"a-form-field\" required maxlength=\"200\" />\n </div>\n\n <pry-share [(ngModel)]=\"visibility\"></pry-share>\n\n <div class=\"m-btn-group\">\n <button type=\"button\" (click)=\"onClose()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"button\"\n #save\n (click)=\"onSave()\"\n class=\"a-btn a-btn--primary\"\n [disabled]=\"saveDisabled\"\n (keydown.tab)=\"focusElement(this.cross)\"\n >\n {{ '@pry.toolbox.manifest.check' | i18n }}\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.PryShareComponent, selector: "pry-share", inputs: ["value", "labelProperty", "valueProperty", "users$"] }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }] }); }
88
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: PrySaveQueryComponent, selector: "pry-save-query", viewQueries: [{ propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "save", first: true, predicate: ["save"], descendants: true }], ngImport: i0, template: "<div\n class=\"o-modal-wrapper\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_rename\"\n (keydown.escape)=\"onClose()\"\n>\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.search.namedQuery.' + (modalSave ? 'saveTitle' : 'renameTitle') | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #cross (keydown.shift.tab)=\"focusElement(this.save)\" (click)=\"onClose()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"name\">{{ '@pry.search.namedQuery.name' | i18n }}</label>\n <input [(ngModel)]=\"name\" id=\"name\" type=\"text\" class=\"a-form-field\" required maxlength=\"30\" />\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"description\">{{ '@pry.search.namedQuery.description' | i18n }}</label>\n <input [(ngModel)]=\"description\" id=\"description\" type=\"text\" class=\"a-form-field\" required maxlength=\"200\" />\n </div>\n\n <pry-share [(ngModel)]=\"visibility\"></pry-share>\n\n <div class=\"m-btn-group\">\n <button type=\"button\" (click)=\"onClose()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"button\"\n #save\n (click)=\"onSave()\"\n class=\"a-btn a-btn--primary\"\n [disabled]=\"saveDisabled\"\n (keydown.tab)=\"focusElement(this.cross)\"\n >\n {{ '@pry.toolbox.manifest.check' | i18n }}\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.PryShareComponent, selector: "pry-share", inputs: ["labelProperty", "valueProperty"] }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }] }); }
89
89
  }
90
90
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PrySaveQueryComponent, decorators: [{
91
91
  type: Component,
@@ -100,4 +100,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
100
100
  type: ViewChild,
101
101
  args: ['save']
102
102
  }] } });
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS1xdWVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9zZWFyY2gvY29tcG9uZW50cy9zYXZlLXF1ZXJ5L3NhdmUtcXVlcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvc2VhcmNoL2NvbXBvbmVudHMvc2F2ZS1xdWVyeS9zYXZlLXF1ZXJ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRixPQUFPLEVBQ0wsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUV0QixlQUFlLEVBQ2YsZUFBZSxFQUdmLGlCQUFpQixFQUNsQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBYyxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDNUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDakcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkRBQTJELENBQUM7Ozs7O0FBTXBHLE1BQU0sT0FBTyxxQkFBcUI7SUFlaEMsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxDQUNMLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFO1lBQ3hCLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUU7WUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUM5QixDQUFDO0lBQ0osQ0FBQztJQUtELFlBQ1UsS0FBWSxFQUNaLE1BQTJDLEVBRTNDLElBSVA7UUFQTyxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1osV0FBTSxHQUFOLE1BQU0sQ0FBcUM7UUFFM0MsU0FBSSxHQUFKLElBQUksQ0FJWDtRQXRDSCxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFZixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBR2YsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixlQUFVLEdBQWtCO1lBQzFCLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxPQUFPO1lBQy9CLEtBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQztRQTZCQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxRQUFRO1FBQ04sVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQy9DLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTTtRQUNKLE1BQU0sRUFBRSxHQUNOLElBQUksQ0FBQyxFQUFFLEtBQUssc0JBQXNCLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxzQkFBc0IsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzVHLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNyQixNQUFNLGdCQUFnQixHQUFHO2dCQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksU0FBUztnQkFDMUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzVCLENBQUM7WUFDRixRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZCLEtBQUssZUFBZSxDQUFDLFNBQVM7b0JBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7b0JBQ2pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQzlDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUMzRixNQUFNO2dCQUNSLEtBQUssZUFBZSxDQUFDLFVBQVU7b0JBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDM0UsTUFBTTtnQkFDUixLQUFLLGVBQWUsQ0FBQyxXQUFXO29CQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzVFLE1BQU07WUFDVixDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBQ0QsWUFBWSxDQUFDLE9BQTBCO1FBQ3JDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDL0QsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEIsQ0FBQzs4R0FqR1UscUJBQXFCLG1FQWtDdEIsZUFBZTtrR0FsQ2QscUJBQXFCLHFPQzFCbEMsaTVEQWtEQTs7MkZEeEJhLHFCQUFxQjtrQkFKakMsU0FBUzsrQkFDRSxnQkFBZ0I7OzBCQXFDdkIsTUFBTTsyQkFBQyxlQUFlO3lDQU5MLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDQyxJQUFJO3NCQUF0QixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQ29uZmlnQWN0aW9ucyxcbiAgRGF0YVNvdXJjZUFjdGlvbnMsXG4gIERhdGFTb3VyY2VTZWxlY3RvcnMsXG4gIERFRkFVTFRfTkFNRURfUVVFUllfSUQsXG4gIEVYUExPUkVfTkFNRURfUVVFUllfSUQsXG4gIE5hbWVkUXVlcnksXG4gIE5hbWVkUXVlcnlUeXBlcyxcbiAgUFJZX0RJQUxPR19EQVRBLFxuICBQcnlEaWFsb2dSZWYsXG4gIFByeVZpc2liaWxpdHksXG4gIFByeVZpc2liaWxpdHlUeXBlXG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IFNlYXJjaEZ1bGx0ZXh0Q2hhbmdlIH0gZnJvbSAnLi4vLi4vc2VhcmNoLWZ1bGx0ZXh0L3NlYXJjaC1mdWxsdGV4dC9zZWFyY2gtZnVsbHRleHQuY29tcG9uZW50JztcbmltcG9ydCB7IHNlYXJjaEZ1bGx0ZXh0QWN0aW9ucyB9IGZyb20gJy4uLy4uL3NlYXJjaC1mdWxsdGV4dC9zdG9yZS9zZWFyY2gtZnVsbHRleHQuYWN0aW9ucyc7XG5pbXBvcnQgeyBTZWFyY2hNb25vQ2xhc3NBY3Rpb25zIH0gZnJvbSAnLi4vLi4vc2VhcmNoLW1vbm8tY2xhc3Mvc3RvcmUvc2VhcmNoLW1vbm8tY2xhc3MuYWN0aW9ucyc7XG5pbXBvcnQgeyBTZWFyY2hNdWx0aUNsYXNzQWN0aW9ucyB9IGZyb20gJy4uLy4uL3NlYXJjaC1tdWx0aS1jbGFzcy9zdG9yZS9zZWFyY2gtbXVsdGktY2xhc3MuYWN0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1zYXZlLXF1ZXJ5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NhdmUtcXVlcnkuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByeVNhdmVRdWVyeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHZhbHVlOiBzdHJpbmcgPSAnJztcbiAgb3BlbmVkID0gZmFsc2U7XG4gIGN1cnJlbnRFZGl0JDogT2JzZXJ2YWJsZTxOYW1lZFF1ZXJ5IHwgdW5kZWZpbmVkPjtcbiAgaXNFZGl0ID0gZmFsc2U7XG5cbiAgaWQ/OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZyA9ICcnO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nID0gJyc7XG4gIHZpc2liaWxpdHk6IFByeVZpc2liaWxpdHkgPSB7XG4gICAgdHlwZTogUHJ5VmlzaWJpbGl0eVR5cGUuUFJJVkFURSxcbiAgICB1c2VyczogW11cbiAgfTtcbiAgc2F2ZWROYW1lUXVlcnk/OiBOYW1lZFF1ZXJ5O1xuXG4gIGdldCBtb2RhbFNhdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5zYXZlO1xuICB9XG5cbiAgZ2V0IHNhdmVEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMubmFtZSA/PyAnJykgPT09ICcnIHx8XG4gICAgICAodGhpcy5zYXZlZE5hbWVRdWVyeT8ubmFtZSA9PT0gdGhpcy5uYW1lICYmICF0aGlzLnNhdmVkTmFtZVF1ZXJ5Py5vd25lcikgfHxcbiAgICAgIHRoaXMubmFtZS5sZW5ndGggPiAzMCB8fFxuICAgICAgdGhpcy5kZXNjcmlwdGlvbi5sZW5ndGggPiAyMDBcbiAgICApO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnY3Jvc3MnKSBjcm9zcyE6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdzYXZlJykgc2F2ZSE6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgZGlhbG9nOiBQcnlEaWFsb2dSZWY8UHJ5U2F2ZVF1ZXJ5Q29tcG9uZW50PixcbiAgICBASW5qZWN0KFBSWV9ESUFMT0dfREFUQSlcbiAgICBwcml2YXRlIGRhdGE6IHtcbiAgICAgIHNhdmU6IGJvb2xlYW47XG4gICAgICB0eXBlOiBOYW1lZFF1ZXJ5VHlwZXM7XG4gICAgICBwYXlsb2FkPzogU2VhcmNoRnVsbHRleHRDaGFuZ2U7XG4gICAgfVxuICApIHtcbiAgICB0aGlzLmN1cnJlbnRFZGl0JCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhdGFTb3VyY2VTZWxlY3RvcnMuY3VycmVudEVkaXQpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNyb3NzLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9LCAxMCk7XG5cbiAgICB0aGlzLmN1cnJlbnRFZGl0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgobnEpID0+IHtcbiAgICAgIGlmIChucSkge1xuICAgICAgICB0aGlzLnNhdmVkTmFtZVF1ZXJ5ID0gbnE7XG4gICAgICAgIHRoaXMuaWQgPSBucS5pZDtcbiAgICAgICAgdGhpcy5pc0VkaXQgPSB0cnVlO1xuICAgICAgICB0aGlzLm5hbWUgPSBucS5uYW1lO1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gbnEuZGVzY3JpcHRpb24gPz8gJyc7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblNhdmUoKSB7XG4gICAgY29uc3QgaWQgPVxuICAgICAgdGhpcy5pZCA9PT0gREVGQVVMVF9OQU1FRF9RVUVSWV9JRCB8fCB0aGlzLmlkID09PSBFWFBMT1JFX05BTUVEX1FVRVJZX0lEIHx8ICF0aGlzLmlkID8gdXVpZHY0KCkgOiB0aGlzLmlkO1xuICAgIGlmICh0aGlzLm5hbWUgIT09ICcnKSB7XG4gICAgICBjb25zdCBkZXNjcmlwdGlvblF1ZXJ5ID0ge1xuICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uID8/IHVuZGVmaW5lZCxcbiAgICAgICAgdmlzaWJpbGl0eTogdGhpcy52aXNpYmlsaXR5XG4gICAgICB9O1xuICAgICAgc3dpdGNoICh0aGlzLmRhdGEudHlwZSkge1xuICAgICAgICBjYXNlIE5hbWVkUXVlcnlUeXBlcy5GVUxMX1RFWFQ6XG4gICAgICAgICAgY29uc3QgY2xhc3NlcyA9IHRoaXMuZGF0YS5wYXlsb2FkPy5jbGFzc2VzID8/IFtdO1xuICAgICAgICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuZGF0YS5wYXlsb2FkPy52YWx1ZSA/PyAnJztcbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHNlYXJjaEZ1bGx0ZXh0QWN0aW9ucy5zYXZlKHsgZGVzY3JpcHRpb25RdWVyeSwgY2xhc3Nlcywgc2VhcmNoLCBpZCB9KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTmFtZWRRdWVyeVR5cGVzLk1PTk9fQ0xBU1M6XG4gICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZWFyY2hNb25vQ2xhc3NBY3Rpb25zLnNhdmUoeyBkZXNjcmlwdGlvblF1ZXJ5LCBpZCB9KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTmFtZWRRdWVyeVR5cGVzLk1VTFRJX0NMQVNTOlxuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2VhcmNoTXVsdGlDbGFzc0FjdGlvbnMuc2F2ZSh7IGRlc2NyaXB0aW9uUXVlcnksIGlkIH0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgIH1cbiAgfVxuICBmb2N1c0VsZW1lbnQoZWxlbWVudDogSFRNTEJ1dHRvbkVsZW1lbnQpIHtcbiAgICBlbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBvbkNsb3NlKCkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5jbG9zZU92ZXJsYXkoeyBpZDogJ1ByeVNhdmVRdWVyeUNvbXBvbmVudCcgfSkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGF0YVNvdXJjZUFjdGlvbnMubmFtZWRRdWVyeS5zdG9wUmVuYW1lKCkpO1xuICAgIGlmICh0aGlzLmlzRWRpdCkge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXRhU291cmNlQWN0aW9ucy5uYW1lZFF1ZXJ5LnN0b3BFZGl0KCkpO1xuICAgIH1cbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xuICAgIHRoaXMuZGlhbG9nLmNsb3NlKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJvLW1vZGFsLXdyYXBwZXJcIlxuICByb2xlPVwiZGlhbG9nXCJcbiAgYXJpYS1tb2RhbD1cInRydWVcIlxuICBhcmlhLWxhYmVsbGVkYnk9XCJkaWFsb2dfcmVuYW1lXCJcbiAgKGtleWRvd24uZXNjYXBlKT1cIm9uQ2xvc2UoKVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJvLW1vZGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcF9fdGl0bGVcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwiYS1oMlwiIGlkPVwiZGlhbG9nX3RpdGxlXCI+XG4gICAgICAgICAge3sgJ0Bwcnkuc2VhcmNoLm5hbWVkUXVlcnkuJyArIChtb2RhbFNhdmUgPyAnc2F2ZVRpdGxlJyA6ICdyZW5hbWVUaXRsZScpIHwgaTE4biB9fVxuICAgICAgICA8L2gyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1tb2RhbF9fdG9wX19jbG9zZVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiICNjcm9zcyAoa2V5ZG93bi5zaGlmdC50YWIpPVwiZm9jdXNFbGVtZW50KHRoaXMuc2F2ZSlcIiAoY2xpY2spPVwib25DbG9zZSgpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjbG9zZVwiIFtoZWlnaHRdPVwiMzVcIiBbd2lkdGhdPVwiMzVcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS50b29sYm94LmNsb3NlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibmFtZVwiPnt7ICdAcHJ5LnNlYXJjaC5uYW1lZFF1ZXJ5Lm5hbWUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJuYW1lXCIgaWQ9XCJuYW1lXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImEtZm9ybS1maWVsZFwiIHJlcXVpcmVkIG1heGxlbmd0aD1cIjMwXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiZGVzY3JpcHRpb25cIj57eyAnQHByeS5zZWFyY2gubmFtZWRRdWVyeS5kZXNjcmlwdGlvbicgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImRlc2NyaXB0aW9uXCIgaWQ9XCJkZXNjcmlwdGlvblwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJhLWZvcm0tZmllbGRcIiByZXF1aXJlZCBtYXhsZW5ndGg9XCIyMDBcIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgPHByeS1zaGFyZSBbKG5nTW9kZWwpXT1cInZpc2liaWxpdHlcIj48L3ByeS1zaGFyZT5cblxuICAgIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cFwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlY29uZGFyeVwiPlxuICAgICAgICB7eyAnQHByeS50b29sYm94Lm1hbmlmZXN0LmNsb3NlJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgI3NhdmVcbiAgICAgICAgKGNsaWNrKT1cIm9uU2F2ZSgpXCJcbiAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJzYXZlRGlzYWJsZWRcIlxuICAgICAgICAoa2V5ZG93bi50YWIpPVwiZm9jdXNFbGVtZW50KHRoaXMuY3Jvc3MpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ0BwcnkudG9vbGJveC5tYW5pZmVzdC5jaGVjaycgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS1xdWVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9zZWFyY2gvY29tcG9uZW50cy9zYXZlLXF1ZXJ5L3NhdmUtcXVlcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvc2VhcmNoL2NvbXBvbmVudHMvc2F2ZS1xdWVyeS9zYXZlLXF1ZXJ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRixPQUFPLEVBQ0wsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUV0QixlQUFlLEVBQ2YsZUFBZSxFQUVmLGlCQUFpQixFQUNsQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBYyxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDNUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDakcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkRBQTJELENBQUM7Ozs7O0FBTXBHLE1BQU0sT0FBTyxxQkFBcUI7SUFlaEMsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxDQUNMLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFO1lBQ3hCLENBQUMs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Q0UsZ0JBQWdCOzswQkFxQ3ZCLE1BQU07MkJBQUMsZUFBZTt5Q0FOTCxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU87Z0JBQ0MsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIENvbmZpZ0FjdGlvbnMsXG4gIERhdGFTb3VyY2VBY3Rpb25zLFxuICBEYXRhU291cmNlU2VsZWN0b3JzLFxuICBERUZBVUxUX05BTUVEX1FVRVJZX0lELFxuICBFWFBMT1JFX05BTUVEX1FVRVJZX0lELFxuICBOYW1lZFF1ZXJ5LFxuICBOYW1lZFF1ZXJ5VHlwZXMsXG4gIFBSWV9ESUFMT0dfREFUQSxcbiAgUHJ5RGlhbG9nUmVmLFxuICBQcnlWaXNpYmlsaXR5VHlwZVxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBTZWFyY2hGdWxsdGV4dENoYW5nZSB9IGZyb20gJy4uLy4uL3NlYXJjaC1mdWxsdGV4dC9zZWFyY2gtZnVsbHRleHQvc2VhcmNoLWZ1bGx0ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBzZWFyY2hGdWxsdGV4dEFjdGlvbnMgfSBmcm9tICcuLi8uLi9zZWFyY2gtZnVsbHRleHQvc3RvcmUvc2VhcmNoLWZ1bGx0ZXh0LmFjdGlvbnMnO1xuaW1wb3J0IHsgU2VhcmNoTW9ub0NsYXNzQWN0aW9ucyB9IGZyb20gJy4uLy4uL3NlYXJjaC1tb25vLWNsYXNzL3N0b3JlL3NlYXJjaC1tb25vLWNsYXNzLmFjdGlvbnMnO1xuaW1wb3J0IHsgU2VhcmNoTXVsdGlDbGFzc0FjdGlvbnMgfSBmcm9tICcuLi8uLi9zZWFyY2gtbXVsdGktY2xhc3Mvc3RvcmUvc2VhcmNoLW11bHRpLWNsYXNzLmFjdGlvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktc2F2ZS1xdWVyeScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zYXZlLXF1ZXJ5LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBQcnlTYXZlUXVlcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICB2YWx1ZTogc3RyaW5nID0gJyc7XG4gIG9wZW5lZCA9IGZhbHNlO1xuICBjdXJyZW50RWRpdCQ6IE9ic2VydmFibGU8TmFtZWRRdWVyeSB8IHVuZGVmaW5lZD47XG4gIGlzRWRpdCA9IGZhbHNlO1xuXG4gIGlkPzogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmcgPSAnJztcbiAgZGVzY3JpcHRpb246IHN0cmluZyA9ICcnO1xuICB2aXNpYmlsaXR5ID0ge1xuICAgIHR5cGU6IFByeVZpc2liaWxpdHlUeXBlLlBSSVZBVEUsXG4gICAgdXNlcnM6IFtdXG4gIH07XG4gIHNhdmVkTmFtZVF1ZXJ5PzogTmFtZWRRdWVyeTtcblxuICBnZXQgbW9kYWxTYXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEuc2F2ZTtcbiAgfVxuXG4gIGdldCBzYXZlRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLm5hbWUgPz8gJycpID09PSAnJyB8fFxuICAgICAgKHRoaXMuc2F2ZWROYW1lUXVlcnk/Lm5hbWUgPT09IHRoaXMubmFtZSAmJiAhdGhpcy5zYXZlZE5hbWVRdWVyeT8ub3duZXIpIHx8XG4gICAgICB0aGlzLm5hbWUubGVuZ3RoID4gMzAgfHxcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24ubGVuZ3RoID4gMjAwXG4gICAgKTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2Nyb3NzJykgY3Jvc3MhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnc2F2ZScpIHNhdmUhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIGRpYWxvZzogUHJ5RGlhbG9nUmVmPFByeVNhdmVRdWVyeUNvbXBvbmVudD4sXG4gICAgQEluamVjdChQUllfRElBTE9HX0RBVEEpXG4gICAgcHJpdmF0ZSBkYXRhOiB7XG4gICAgICBzYXZlOiBib29sZWFuO1xuICAgICAgdHlwZTogTmFtZWRRdWVyeVR5cGVzO1xuICAgICAgcGF5bG9hZD86IFNlYXJjaEZ1bGx0ZXh0Q2hhbmdlO1xuICAgIH1cbiAgKSB7XG4gICAgdGhpcy5jdXJyZW50RWRpdCQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLmN1cnJlbnRFZGl0KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jcm9zcy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSwgMTApO1xuXG4gICAgdGhpcy5jdXJyZW50RWRpdCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKG5xKSA9PiB7XG4gICAgICBpZiAobnEpIHtcbiAgICAgICAgdGhpcy5zYXZlZE5hbWVRdWVyeSA9IG5xO1xuICAgICAgICB0aGlzLmlkID0gbnEuaWQ7XG4gICAgICAgIHRoaXMuaXNFZGl0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5uYW1lID0gbnEubmFtZTtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IG5xLmRlc2NyaXB0aW9uID8/ICcnO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25TYXZlKCkge1xuICAgIGNvbnN0IGlkID1cbiAgICAgIHRoaXMuaWQgPT09IERFRkFVTFRfTkFNRURfUVVFUllfSUQgfHwgdGhpcy5pZCA9PT0gRVhQTE9SRV9OQU1FRF9RVUVSWV9JRCB8fCAhdGhpcy5pZCA/IHV1aWR2NCgpIDogdGhpcy5pZDtcbiAgICBpZiAodGhpcy5uYW1lICE9PSAnJykge1xuICAgICAgY29uc3QgZGVzY3JpcHRpb25RdWVyeSA9IHtcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbiA/PyB1bmRlZmluZWQsXG4gICAgICAgIHZpc2liaWxpdHk6IHRoaXMudmlzaWJpbGl0eVxuICAgICAgfTtcbiAgICAgIHN3aXRjaCAodGhpcy5kYXRhLnR5cGUpIHtcbiAgICAgICAgY2FzZSBOYW1lZFF1ZXJ5VHlwZXMuRlVMTF9URVhUOlxuICAgICAgICAgIGNvbnN0IGNsYXNzZXMgPSB0aGlzLmRhdGEucGF5bG9hZD8uY2xhc3NlcyA/PyBbXTtcbiAgICAgICAgICBjb25zdCBzZWFyY2ggPSB0aGlzLmRhdGEucGF5bG9hZD8udmFsdWUgPz8gJyc7XG4gICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChzZWFyY2hGdWxsdGV4dEFjdGlvbnMuc2F2ZSh7IGRlc2NyaXB0aW9uUXVlcnksIGNsYXNzZXMsIHNlYXJjaCwgaWQgfSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE5hbWVkUXVlcnlUeXBlcy5NT05PX0NMQVNTOlxuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2VhcmNoTW9ub0NsYXNzQWN0aW9ucy5zYXZlKHsgZGVzY3JpcHRpb25RdWVyeSwgaWQgfSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE5hbWVkUXVlcnlUeXBlcy5NVUxUSV9DTEFTUzpcbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNlYXJjaE11bHRpQ2xhc3NBY3Rpb25zLnNhdmUoeyBkZXNjcmlwdGlvblF1ZXJ5LCBpZCB9KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgICB9XG4gIH1cbiAgZm9jdXNFbGVtZW50KGVsZW1lbnQ6IEhUTUxCdXR0b25FbGVtZW50KSB7XG4gICAgZWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgb25DbG9zZSgpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuY2xvc2VPdmVybGF5KHsgaWQ6ICdQcnlTYXZlUXVlcnlDb21wb25lbnQnIH0pKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhdGFTb3VyY2VBY3Rpb25zLm5hbWVkUXVlcnkuc3RvcFJlbmFtZSgpKTtcbiAgICBpZiAodGhpcy5pc0VkaXQpIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGF0YVNvdXJjZUFjdGlvbnMubmFtZWRRdWVyeS5zdG9wRWRpdCgpKTtcbiAgICB9XG4gICAgdGhpcy5pc0VkaXQgPSBmYWxzZTtcbiAgICB0aGlzLmRpYWxvZy5jbG9zZSgpO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiby1tb2RhbC13cmFwcGVyXCJcbiAgcm9sZT1cImRpYWxvZ1wiXG4gIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgYXJpYS1sYWJlbGxlZGJ5PVwiZGlhbG9nX3JlbmFtZVwiXG4gIChrZXlkb3duLmVzY2FwZSk9XCJvbkNsb3NlKClcIlxuPlxuICA8ZGl2IGNsYXNzPVwiby1tb2RhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BfX3RpdGxlXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImEtaDJcIiBpZD1cImRpYWxvZ190aXRsZVwiPlxuICAgICAgICAgIHt7ICdAcHJ5LnNlYXJjaC5uYW1lZFF1ZXJ5LicgKyAobW9kYWxTYXZlID8gJ3NhdmVUaXRsZScgOiAncmVuYW1lVGl0bGUnKSB8IGkxOG4gfX1cbiAgICAgICAgPC9oMj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcF9fY2xvc2VcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIiAjY3Jvc3MgKGtleWRvd24uc2hpZnQudGFiKT1cImZvY3VzRWxlbWVudCh0aGlzLnNhdmUpXCIgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2xvc2VcIiBbaGVpZ2h0XT1cIjM1XCIgW3dpZHRoXT1cIjM1XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkudG9vbGJveC5jbG9zZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm5hbWVcIj57eyAnQHByeS5zZWFyY2gubmFtZWRRdWVyeS5uYW1lJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwibmFtZVwiIGlkPVwibmFtZVwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJhLWZvcm0tZmllbGRcIiByZXF1aXJlZCBtYXhsZW5ndGg9XCIzMFwiIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImRlc2NyaXB0aW9uXCI+e3sgJ0Bwcnkuc2VhcmNoLm5hbWVkUXVlcnkuZGVzY3JpcHRpb24nIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJkZXNjcmlwdGlvblwiIGlkPVwiZGVzY3JpcHRpb25cIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCIgcmVxdWlyZWQgbWF4bGVuZ3RoPVwiMjAwXCIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxwcnktc2hhcmUgWyhuZ01vZGVsKV09XCJ2aXNpYmlsaXR5XCI+PC9wcnktc2hhcmU+XG5cbiAgICA8ZGl2IGNsYXNzPVwibS1idG4tZ3JvdXBcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNsb3NlKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnlcIj5cbiAgICAgICAge3sgJ0BwcnkudG9vbGJveC5tYW5pZmVzdC5jbG9zZScgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICNzYXZlXG4gICAgICAgIChjbGljayk9XCJvblNhdmUoKVwiXG4gICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwic2F2ZURpc2FibGVkXCJcbiAgICAgICAgKGtleWRvd24udGFiKT1cImZvY3VzRWxlbWVudCh0aGlzLmNyb3NzKVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdAcHJ5LnRvb2xib3gubWFuaWZlc3QuY2hlY2snIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -136,7 +136,7 @@ export class PrySearchToolsComponent {
136
136
  this.store.dispatch(DataSourceActions.namedQuery.updateCurrentEdit({ currentEdit: { visibility: $event } }));
137
137
  }
138
138
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PrySearchToolsComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
139
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: PrySearchToolsComponent, selector: "pry-search-tools", host: { properties: { "class.o-pry-search-tools-wrapper": "this.class", "class.is-close": "this.searchToolsClose" } }, ngImport: i0, template: "<div\n class=\"o-pry-search-tools\"\n [class.is-close]=\"searchToolsClose\"\n [class.is-mono]=\"isNewMono || (isEditMono$ | async)\"\n>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -back a-tooltip\"\n (click)=\"onSearchTools()\"\n aria-pressed=\"false\"\n *ngIf=\"((editInProgress$ | async) && !(isRename$ | async)) || isSearchCriteria\"\n [attr.data-tooltip]=\"'@pry.search.button.backSearch' | i18n\"\n data-tooltip-position=\"bottom\"\n >\n <pry-icon iconSvg=\"arrow_back\" [width]=\"24\" [height]=\"24\" [animation]=\"false\"></pry-icon>\n <span>{{ '@pry.search.button.backSearch' | i18n }}</span>\n </button>\n <div class=\"o-pry-search-tools__content\" [class.is-close]=\"searchToolsClose\">\n <button\n *ngIf=\"((editInProgress$ | async) && !(isRename$ | async)) || isSearchCriteria\"\n class=\"a-btn a-btn--icon-text -link-like u-self-end\"\n (click)=\"reset()\"\n id=\"btn_reset\"\n >\n <pry-icon iconSvg=\"reset\" [width]=\"18\" [height]=\"18\"></pry-icon>\n {{ '@pry.search.button.reset' | i18n }}\n </button>\n <ng-container *ngIf=\"editInProgress$ | async\">\n <pry-share [ngModel]=\"(currentEdit$ | async)?.visibility\" (ngModelChange)=\"updateVisibility($event)\"></pry-share>\n </ng-container>\n <ng-container *ngIf=\"(editInProgress$ | async) && !(isRename$ | async) && !(loading$ | async); else noEdit\">\n <pry-edit-named-query\n (searchFulltextChange)=\"onSearchFulltextChange($event)\"\n (cancelled)=\"onSearchTools()\"\n ></pry-edit-named-query>\n </ng-container>\n <ng-template #noEdit>\n <ng-container *ngIf=\"isSearchCriteria && !(loading$ | async); else noSearch\">\n <pry-toggle\n class=\"o-pry-search-tools__content__toggle\"\n [ngModel]=\"isSearchMono\"\n (ngModelChange)=\"onMonoSearch()\"\n [alwaysActive]=\"true\"\n mode=\"action\"\n >\n {{ (isSearchMono ? '@pry.search.button.mono' : '@pry.search.button.multi') | i18n }}\n </pry-toggle>\n <div class=\"o-pry-search-tools__content__full\">\n <ng-container *ngIf=\"isSearchMono; else isMultiSearch\">\n <pry-search-mono-class></pry-search-mono-class>\n </ng-container>\n <ng-template #isMultiSearch>\n <pry-search-multi-class></pry-search-multi-class>\n </ng-template>\n </div>\n\n <div class=\"o-pry-search-tools__content__button-search\">\n <ng-container *ngIf=\"isSearchCriteria\">\n <pry-choose-widget (selected)=\"selectWidget($event)\"></pry-choose-widget>\n </ng-container>\n <button class=\"a-btn a-btn--primary\" (click)=\"onSearchTools()\" *ngIf=\"!isSearchCriteria\">\n {{ '@pry.search.button.cancel' | i18n }}\n </button>\n <button\n [disabled]=\"\n (!(searchMultiClassValid$ | async) && !isSearchMono) || (!(searchMonoClassValid$ | async) && isSearchMono)\n \"\n class=\"a-btn a-btn--primary\"\n (click)=\"onSearch()\"\n >\n <pry-icon iconSvg=\"search-line\"></pry-icon>\n {{ '@pry.search.button.search' | i18n }}\n </button>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template #noSearch>\n <div class=\"o-pry-search-tools__content__full\">\n <pry-search-home\n class=\"o-pry-search-home\"\n [isMoreList]=\"isMoreList\"\n [searchFulltextTpl]=\"searchFulltextTpl\"\n (changeListView)=\"onChangeListView($event)\"\n (changeSearchCriteria)=\"onSearchCriteria()\"\n ></pry-search-home>\n <ng-template #searchFulltextTpl>\n <pry-search-fulltext mode=\"vertical\" (searchChange)=\"onSearchFulltextChange($event)\"></pry-search-fulltext>\n </ng-template>\n </div>\n </ng-template>\n </div>\n <div class=\"o-pry-search-tools__footer\" [class.is-close]=\"searchToolsClose\">\n <pry-save-query-button\n [editInProgress]=\"editInProgress$ | async\"\n [currentEdit]=\"currentEdit$ | async\"\n [currentEditType]=\"currentEditType$ | async\"\n [fulltextValid]=\"isSearchFulltextValid\"\n [multiValid]=\"searchMultiClassValid$ | async\"\n [monoValid]=\"searchMonoClassValid$ | async\"\n [isNotFulltext]=\"isSearchCriteria\"\n [isMonoSearch]=\"isSearchMono\"\n [fulltextSearch]=\"searchFulltextTemp\"\n ></pry-save-query-button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PryToggleComponent, selector: "pry-toggle", inputs: ["alwaysActive", "disabled", "mode", "size", "dir", "leftword", "rightword"] }, { kind: "component", type: i3.PryShareComponent, selector: "pry-share", inputs: ["value", "labelProperty", "valueProperty", "users$"] }, { kind: "component", type: i5.PrySearchHomeComponent, selector: "pry-search-home", inputs: ["searchFulltextTpl", "isMoreList"], outputs: ["changeListView", "changeSearchCriteria"] }, { kind: "component", type: i6.PrySearchMonoClassComponent, selector: "pry-search-mono-class" }, { kind: "component", type: i7.PrySearchMultiClassComponent, selector: "pry-search-multi-class" }, { kind: "component", type: i8.PrySearchFulltextComponent, selector: "pry-search-fulltext", inputs: ["mode", "launchButton", "currentEdit"], outputs: ["searchChange"] }, { kind: "component", type: i9.PrySaveQueryButtonComponent, selector: "pry-save-query-button", inputs: ["editInProgress", "currentEdit", "currentEditType", "fulltextValid", "multiValid", "monoValid", "isNotFulltext", "isMonoSearch", "fulltextSearch", "saveDisabled"] }, { kind: "component", type: i10.EditNamedQueryComponent, selector: "pry-edit-named-query", inputs: ["fromWidget"], outputs: ["searchFulltextChange", "cancelled", "searched"] }, { kind: "component", type: i11.ChooseWidgetComponent, selector: "pry-choose-widget", inputs: ["panelOpen", "mode", "width"], outputs: ["selected"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
139
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: PrySearchToolsComponent, selector: "pry-search-tools", host: { properties: { "class.o-pry-search-tools-wrapper": "this.class", "class.is-close": "this.searchToolsClose" } }, ngImport: i0, template: "<div\n class=\"o-pry-search-tools\"\n [class.is-close]=\"searchToolsClose\"\n [class.is-mono]=\"isNewMono || (isEditMono$ | async)\"\n>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -back a-tooltip\"\n (click)=\"onSearchTools()\"\n aria-pressed=\"false\"\n *ngIf=\"((editInProgress$ | async) && !(isRename$ | async)) || isSearchCriteria\"\n [attr.data-tooltip]=\"'@pry.search.button.backSearch' | i18n\"\n data-tooltip-position=\"bottom\"\n >\n <pry-icon iconSvg=\"arrow_back\" [width]=\"24\" [height]=\"24\" [animation]=\"false\"></pry-icon>\n <span>{{ '@pry.search.button.backSearch' | i18n }}</span>\n </button>\n <div class=\"o-pry-search-tools__content\" [class.is-close]=\"searchToolsClose\">\n <button\n *ngIf=\"((editInProgress$ | async) && !(isRename$ | async)) || isSearchCriteria\"\n class=\"a-btn a-btn--icon-text -link-like u-self-end\"\n (click)=\"reset()\"\n id=\"btn_reset\"\n >\n <pry-icon iconSvg=\"reset\" [width]=\"18\" [height]=\"18\"></pry-icon>\n {{ '@pry.search.button.reset' | i18n }}\n </button>\n <ng-container *ngIf=\"editInProgress$ | async\">\n <pry-share [ngModel]=\"(currentEdit$ | async)?.visibility\" (ngModelChange)=\"updateVisibility($event)\"></pry-share>\n </ng-container>\n <ng-container *ngIf=\"(editInProgress$ | async) && !(isRename$ | async) && !(loading$ | async); else noEdit\">\n <pry-edit-named-query\n (searchFulltextChange)=\"onSearchFulltextChange($event)\"\n (cancelled)=\"onSearchTools()\"\n ></pry-edit-named-query>\n </ng-container>\n <ng-template #noEdit>\n <ng-container *ngIf=\"isSearchCriteria && !(loading$ | async); else noSearch\">\n <pry-toggle\n class=\"o-pry-search-tools__content__toggle\"\n [ngModel]=\"isSearchMono\"\n (ngModelChange)=\"onMonoSearch()\"\n [alwaysActive]=\"true\"\n mode=\"action\"\n >\n {{ (isSearchMono ? '@pry.search.button.mono' : '@pry.search.button.multi') | i18n }}\n </pry-toggle>\n <div class=\"o-pry-search-tools__content__full\">\n <ng-container *ngIf=\"isSearchMono; else isMultiSearch\">\n <pry-search-mono-class></pry-search-mono-class>\n </ng-container>\n <ng-template #isMultiSearch>\n <pry-search-multi-class></pry-search-multi-class>\n </ng-template>\n </div>\n\n <div class=\"o-pry-search-tools__content__button-search\">\n <ng-container *ngIf=\"isSearchCriteria\">\n <pry-choose-widget (selected)=\"selectWidget($event)\"></pry-choose-widget>\n </ng-container>\n <button class=\"a-btn a-btn--primary\" (click)=\"onSearchTools()\" *ngIf=\"!isSearchCriteria\">\n {{ '@pry.search.button.cancel' | i18n }}\n </button>\n <button\n [disabled]=\"\n (!(searchMultiClassValid$ | async) && !isSearchMono) || (!(searchMonoClassValid$ | async) && isSearchMono)\n \"\n class=\"a-btn a-btn--primary\"\n (click)=\"onSearch()\"\n >\n <pry-icon iconSvg=\"search-line\"></pry-icon>\n {{ '@pry.search.button.search' | i18n }}\n </button>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template #noSearch>\n <div class=\"o-pry-search-tools__content__full\">\n <pry-search-home\n class=\"o-pry-search-home\"\n [isMoreList]=\"isMoreList\"\n [searchFulltextTpl]=\"searchFulltextTpl\"\n (changeListView)=\"onChangeListView($event)\"\n (changeSearchCriteria)=\"onSearchCriteria()\"\n ></pry-search-home>\n <ng-template #searchFulltextTpl>\n <pry-search-fulltext mode=\"vertical\" (searchChange)=\"onSearchFulltextChange($event)\"></pry-search-fulltext>\n </ng-template>\n </div>\n </ng-template>\n </div>\n <div class=\"o-pry-search-tools__footer\" [class.is-close]=\"searchToolsClose\">\n <pry-save-query-button\n [editInProgress]=\"editInProgress$ | async\"\n [currentEdit]=\"currentEdit$ | async\"\n [currentEditType]=\"currentEditType$ | async\"\n [fulltextValid]=\"isSearchFulltextValid\"\n [multiValid]=\"searchMultiClassValid$ | async\"\n [monoValid]=\"searchMonoClassValid$ | async\"\n [isNotFulltext]=\"isSearchCriteria\"\n [isMonoSearch]=\"isSearchMono\"\n [fulltextSearch]=\"searchFulltextTemp\"\n ></pry-save-query-button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PryToggleComponent, selector: "pry-toggle", inputs: ["alwaysActive", "disabled", "mode", "size", "dir", "leftword", "rightword"] }, { kind: "component", type: i3.PryShareComponent, selector: "pry-share", inputs: ["labelProperty", "valueProperty"] }, { kind: "component", type: i5.PrySearchHomeComponent, selector: "pry-search-home", inputs: ["searchFulltextTpl", "isMoreList"], outputs: ["changeListView", "changeSearchCriteria"] }, { kind: "component", type: i6.PrySearchMonoClassComponent, selector: "pry-search-mono-class" }, { kind: "component", type: i7.PrySearchMultiClassComponent, selector: "pry-search-multi-class" }, { kind: "component", type: i8.PrySearchFulltextComponent, selector: "pry-search-fulltext", inputs: ["mode", "launchButton", "currentEdit"], outputs: ["searchChange"] }, { kind: "component", type: i9.PrySaveQueryButtonComponent, selector: "pry-save-query-button", inputs: ["editInProgress", "currentEdit", "currentEditType", "fulltextValid", "multiValid", "monoValid", "isNotFulltext", "isMonoSearch", "fulltextSearch", "saveDisabled"] }, { kind: "component", type: i10.EditNamedQueryComponent, selector: "pry-edit-named-query", inputs: ["fromWidget"], outputs: ["searchFulltextChange", "cancelled", "searched"] }, { kind: "component", type: i11.ChooseWidgetComponent, selector: "pry-choose-widget", inputs: ["panelOpen", "mode", "width"], outputs: ["selected"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
140
140
  }
141
141
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PrySearchToolsComponent, decorators: [{
142
142
  type: Component,
@@ -11,6 +11,7 @@ import * as i5 from "@provoly/dashboard/components/checkbox";
11
11
  import * as i6 from "@provoly/dashboard/components/color-picker";
12
12
  import * as i7 from "@angular/cdk/drag-drop";
13
13
  import * as i8 from "../style/css.component";
14
+ import * as i9 from "@provoly/dashboard/components/data-format";
14
15
  export class WidgetAnalyticComponent extends DataWidgetComponent {
15
16
  change($event, prop) {
16
17
  this.optionsCopy[prop] = $event;
@@ -173,10 +174,10 @@ export class WidgetAnalyticComponent extends DataWidgetComponent {
173
174
  });
174
175
  }
175
176
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WidgetAnalyticComponent, deps: [{ token: i1.Store }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
176
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: WidgetAnalyticComponent, selector: "pry-widget-analytic", usesInheritance: true, ngImport: i0, template: "<pry-widget-analytic-css></pry-widget-analytic-css>\n<div class=\"o-widget o-widget__analytic\">\n <pry-widget-header\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__fields\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"primaryProp\">{{ '@pry.widget.analytic.primaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'primaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.primaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"primaryProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"secondaryProp\">{{ '@pry.widget.analytic.secondaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'secondaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.secondaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"secondaryProp\"\n [clearable]=\"true\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"verticalProp\">{{ '@pry.widget.analytic.verticalProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'verticalProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.verticalProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"verticalProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"valueProp\">{{ '@pry.widget.analytic.valueProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'valueProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.valueProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"valueProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleColorConfig($event)\" [ngModel]=\"!!optionsCopy.colorConfig\">\n {{ '@pry.widget.analytic.colorConfig' | i18n }}\n </pry-checkbox>\n @if (optionsCopy.colorConfig) {\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"colorProp\">{{ '@pry.widget.analytic.colorProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorConfig($event, 'prop')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.colorConfig.prop\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"colorProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"colorProp\">{{ '@pry.widget.analytic.colors' | i18n }}</label>\n <div\n class=\"o-widget__analytic__color-picker-container u-display-flex -align-center\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n cdkDropListOrientation=\"horizontal\"\n >\n @for (color of optionsCopy.colorConfig.colors; track color; let i = $index) {\n <div class=\"o-widget__analytic__color-picker\" cdkDrag>\n <pry-color-picker\n [ngModel]=\"color\"\n (ngModelChange)=\"modifyColorScheme($event, i)\"\n ></pry-color-picker>\n <button (click)=\"removeColor(i)\" class=\"o-widget__analytic__color-picker-remove\">\n <pry-icon iconSvg=\"close\" [height]=\"15\" [width]=\"15\"></pry-icon>\n </button>\n <div *cdkDragPreview>\n <pry-color-picker [ngModel]=\"color\"></pry-color-picker>\n </div>\n </div>\n }\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only o-widget__analytic__color-picker-add\"\n (click)=\"modifyColorScheme()\"\n >\n <pry-icon iconSvg=\"add\" [height]=\"20\" [width]=\"20\"></pry-icon>\n </button>\n </div>\n </div>\n }\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleFormat($event)\" [ngModel]=\"!!optionsCopy.format\">\n {{ '@pry.widget.analytic.format' | i18n }}\n </pry-checkbox>\n @if (optionsCopy.format) {\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"format\">{{ '@pry.widget.analytic.suffix' | i18n }}</label>\n <input\n type=\"text\"\n class=\"a-form-field\"\n id=\"format\"\n [ngModel]=\"optionsCopy.format.suffix\"\n (ngModelChange)=\"changeFormat($event)\"\n />\n </div>\n }\n </div>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"o-widget__analytic__table\">\n <table [style.height.px]=\"height$ | async\">\n <thead>\n <tr class=\"primary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n <th [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ primary }}\n </th>\n }\n </tr>\n @if (optionsCopy.secondaryProp) {\n <tr class=\"secondary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <th>{{ secondary }}</th>\n }\n }\n </tr>\n }\n </thead>\n <tbody>\n @for (line of lines$ | async; track line.name) {\n <tr>\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @if (optionsCopy.secondaryProp) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td\n [ngStyle]=\"\n optionsCopy.colorConfig ? { 'background-color': (colorMap$ | async)?.[line.name]?.[primary] } : {}\n \"\n >\n {{ line.value[primary][secondary]\n }}{{ optionsCopy.format?.suffix ? ' ' + optionsCopy.format?.suffix : '' }}\n </td>\n }\n } @else {\n <td\n [ngStyle]=\"\n optionsCopy.colorConfig ? { 'background-color': (colorMap$ | async)?.[line.name]?.[primary] } : {}\n \"\n >\n {{ line.value[primary] }}{{ optionsCopy.format?.suffix ? ' ' + optionsCopy.format?.suffix : '' }}\n </td>\n }\n }\n </tr>\n }\n </tbody>\n <tfoot>\n @for (line of totals$ | async; track line.name) {\n <tr class=\"partial-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td>\n {{ line.value[primary][secondary] }}\n </td>\n }\n }\n </tr>\n }\n @for (line of grandTotals$ | async; track line.name) {\n <tr class=\"grand-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n <td [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ line.value[primary] }}\n </td>\n }\n </tr>\n }\n </tfoot>\n </table>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["triggerClick", "saveTriggered", "changeTitle"] }, { kind: "component", type: i4.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i4.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i6.PryColorPickerComponent, selector: "pry-color-picker" }, { kind: "directive", type: i7.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "component", type: i8.PryWidgetAnalyticCssComponent, selector: "pry-widget-analytic-css" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }] }); }
177
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: WidgetAnalyticComponent, selector: "pry-widget-analytic", usesInheritance: true, ngImport: i0, template: "<pry-widget-analytic-css></pry-widget-analytic-css>\n<div class=\"o-widget o-widget__analytic\">\n <pry-widget-header\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__fields\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"primaryProp\">{{ '@pry.widget.analytic.primaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'primaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.primaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"primaryProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"secondaryProp\">{{ '@pry.widget.analytic.secondaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'secondaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.secondaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"secondaryProp\"\n [clearable]=\"true\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"verticalProp\">{{ '@pry.widget.analytic.verticalProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'verticalProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.verticalProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"verticalProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"valueProp\">{{ '@pry.widget.analytic.valueProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'valueProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.valueProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"valueProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleColorConfig($event)\" [ngModel]=\"!!optionsCopy.colorConfig\">\n {{ '@pry.widget.analytic.colorConfig' | i18n }}\n </pry-checkbox>\n @if (optionsCopy.colorConfig) {\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"colorProp\">{{ '@pry.widget.analytic.colorProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorConfig($event, 'prop')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.colorConfig.prop\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"colorProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"colorProp\">{{ '@pry.widget.analytic.colors' | i18n }}</label>\n <div\n class=\"o-widget__analytic__color-picker-container u-display-flex -align-center\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n cdkDropListOrientation=\"horizontal\"\n >\n @for (color of optionsCopy.colorConfig.colors; track color; let i = $index) {\n <div class=\"o-widget__analytic__color-picker\" cdkDrag>\n <pry-color-picker\n [ngModel]=\"color\"\n (ngModelChange)=\"modifyColorScheme($event, i)\"\n ></pry-color-picker>\n <button (click)=\"removeColor(i)\" class=\"o-widget__analytic__color-picker-remove\">\n <pry-icon iconSvg=\"close\" [height]=\"15\" [width]=\"15\"></pry-icon>\n </button>\n <div *cdkDragPreview>\n <pry-color-picker [ngModel]=\"color\"></pry-color-picker>\n </div>\n </div>\n }\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only o-widget__analytic__color-picker-add\"\n (click)=\"modifyColorScheme()\"\n >\n <pry-icon iconSvg=\"add\" [height]=\"20\" [width]=\"20\"></pry-icon>\n </button>\n </div>\n </div>\n }\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleFormat($event)\" [ngModel]=\"!!optionsCopy.format\">\n {{ '@pry.widget.analytic.format' | i18n }}\n </pry-checkbox>\n @if (optionsCopy.format) {\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"format\">{{ '@pry.widget.analytic.suffix' | i18n }}</label>\n <input\n type=\"text\"\n class=\"a-form-field\"\n id=\"format\"\n [ngModel]=\"optionsCopy.format.suffix\"\n (ngModelChange)=\"changeFormat($event)\"\n />\n </div>\n }\n </div>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"o-widget__analytic__table\">\n <table [style.height.px]=\"height$ | async\">\n <thead>\n <tr class=\"primary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n <th [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ primary }}\n </th>\n }\n </tr>\n @if (optionsCopy.secondaryProp) {\n <tr class=\"secondary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <th>{{ secondary }}</th>\n }\n }\n </tr>\n }\n </thead>\n <tbody>\n @for (line of lines$ | async; track line.name) {\n <tr>\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @if (optionsCopy.secondaryProp) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td\n [ngStyle]=\"\n optionsCopy.colorConfig ? { 'background-color': (colorMap$ | async)?.[line.name]?.[primary] } : {}\n \"\n >\n {{ line.value[primary][secondary] | dataFormat: true : optionsCopy.format?.suffix\n </td>\n }\n } @else {\n <td\n [ngStyle]=\"\n optionsCopy.colorConfig ? { 'background-color': (colorMap$ | async)?.[line.name]?.[primary] } : {}\n \"\n >\n {{ line.value[primary] | dataFormat: true : optionsCopy.format?.suffix }}\n </td>\n }\n }\n </tr>\n }\n </tbody>\n <tfoot>\n @for (line of totals$ | async; track line.name) {\n <tr class=\"partial-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td>\n {{ line.value[primary][secondary] }}\n </td>\n }\n }\n </tr>\n }\n @for (line of grandTotals$ | async; track line.name) {\n <tr class=\"grand-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n <td [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ line.value[primary] }}\n </td>\n }\n </tr>\n }\n </tfoot>\n </table>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["triggerClick", "saveTriggered", "changeTitle"] }, { kind: "component", type: i4.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i4.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i6.PryColorPickerComponent, selector: "pry-color-picker" }, { kind: "directive", type: i7.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "component", type: i8.PryWidgetAnalyticCssComponent, selector: "pry-widget-analytic-css" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }, { kind: "pipe", type: i9.DataFormatPipe, name: "dataFormat" }] }); }
177
178
  }
178
179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WidgetAnalyticComponent, decorators: [{
179
180
  type: Component,
180
- args: [{ selector: 'pry-widget-analytic', template: "<pry-widget-analytic-css></pry-widget-analytic-css>\n<div class=\"o-widget o-widget__analytic\">\n <pry-widget-header\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__fields\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"primaryProp\">{{ '@pry.widget.analytic.primaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'primaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.primaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"primaryProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"secondaryProp\">{{ '@pry.widget.analytic.secondaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'secondaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.secondaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"secondaryProp\"\n [clearable]=\"true\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"verticalProp\">{{ '@pry.widget.analytic.verticalProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'verticalProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.verticalProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"verticalProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"valueProp\">{{ '@pry.widget.analytic.valueProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'valueProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.valueProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"valueProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleColorConfig($event)\" [ngModel]=\"!!optionsCopy.colorConfig\">\n {{ '@pry.widget.analytic.colorConfig' | i18n }}\n </pry-checkbox>\n @if (optionsCopy.colorConfig) {\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"colorProp\">{{ '@pry.widget.analytic.colorProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorConfig($event, 'prop')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.colorConfig.prop\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"colorProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"colorProp\">{{ '@pry.widget.analytic.colors' | i18n }}</label>\n <div\n class=\"o-widget__analytic__color-picker-container u-display-flex -align-center\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n cdkDropListOrientation=\"horizontal\"\n >\n @for (color of optionsCopy.colorConfig.colors; track color; let i = $index) {\n <div class=\"o-widget__analytic__color-picker\" cdkDrag>\n <pry-color-picker\n [ngModel]=\"color\"\n (ngModelChange)=\"modifyColorScheme($event, i)\"\n ></pry-color-picker>\n <button (click)=\"removeColor(i)\" class=\"o-widget__analytic__color-picker-remove\">\n <pry-icon iconSvg=\"close\" [height]=\"15\" [width]=\"15\"></pry-icon>\n </button>\n <div *cdkDragPreview>\n <pry-color-picker [ngModel]=\"color\"></pry-color-picker>\n </div>\n </div>\n }\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only o-widget__analytic__color-picker-add\"\n (click)=\"modifyColorScheme()\"\n >\n <pry-icon iconSvg=\"add\" [height]=\"20\" [width]=\"20\"></pry-icon>\n </button>\n </div>\n </div>\n }\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleFormat($event)\" [ngModel]=\"!!optionsCopy.format\">\n {{ '@pry.widget.analytic.format' | i18n }}\n </pry-checkbox>\n @if (optionsCopy.format) {\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"format\">{{ '@pry.widget.analytic.suffix' | i18n }}</label>\n <input\n type=\"text\"\n class=\"a-form-field\"\n id=\"format\"\n [ngModel]=\"optionsCopy.format.suffix\"\n (ngModelChange)=\"changeFormat($event)\"\n />\n </div>\n }\n </div>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"o-widget__analytic__table\">\n <table [style.height.px]=\"height$ | async\">\n <thead>\n <tr class=\"primary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n <th [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ primary }}\n </th>\n }\n </tr>\n @if (optionsCopy.secondaryProp) {\n <tr class=\"secondary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <th>{{ secondary }}</th>\n }\n }\n </tr>\n }\n </thead>\n <tbody>\n @for (line of lines$ | async; track line.name) {\n <tr>\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @if (optionsCopy.secondaryProp) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td\n [ngStyle]=\"\n optionsCopy.colorConfig ? { 'background-color': (colorMap$ | async)?.[line.name]?.[primary] } : {}\n \"\n >\n {{ line.value[primary][secondary]\n }}{{ optionsCopy.format?.suffix ? ' ' + optionsCopy.format?.suffix : '' }}\n </td>\n }\n } @else {\n <td\n [ngStyle]=\"\n optionsCopy.colorConfig ? { 'background-color': (colorMap$ | async)?.[line.name]?.[primary] } : {}\n \"\n >\n {{ line.value[primary] }}{{ optionsCopy.format?.suffix ? ' ' + optionsCopy.format?.suffix : '' }}\n </td>\n }\n }\n </tr>\n }\n </tbody>\n <tfoot>\n @for (line of totals$ | async; track line.name) {\n <tr class=\"partial-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td>\n {{ line.value[primary][secondary] }}\n </td>\n }\n }\n </tr>\n }\n @for (line of grandTotals$ | async; track line.name) {\n <tr class=\"grand-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n <td [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ line.value[primary] }}\n </td>\n }\n </tr>\n }\n </tfoot>\n </table>\n </div>\n</div>\n" }]
181
+ args: [{ selector: 'pry-widget-analytic', template: "<pry-widget-analytic-css></pry-widget-analytic-css>\n<div class=\"o-widget o-widget__analytic\">\n <pry-widget-header\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__fields\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"primaryProp\">{{ '@pry.widget.analytic.primaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'primaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.primaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"primaryProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"secondaryProp\">{{ '@pry.widget.analytic.secondaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'secondaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.secondaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"secondaryProp\"\n [clearable]=\"true\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"verticalProp\">{{ '@pry.widget.analytic.verticalProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'verticalProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.verticalProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"verticalProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"valueProp\">{{ '@pry.widget.analytic.valueProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'valueProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.valueProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"valueProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleColorConfig($event)\" [ngModel]=\"!!optionsCopy.colorConfig\">\n {{ '@pry.widget.analytic.colorConfig' | i18n }}\n </pry-checkbox>\n @if (optionsCopy.colorConfig) {\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"colorProp\">{{ '@pry.widget.analytic.colorProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorConfig($event, 'prop')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.colorConfig.prop\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"colorProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"colorProp\">{{ '@pry.widget.analytic.colors' | i18n }}</label>\n <div\n class=\"o-widget__analytic__color-picker-container u-display-flex -align-center\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n cdkDropListOrientation=\"horizontal\"\n >\n @for (color of optionsCopy.colorConfig.colors; track color; let i = $index) {\n <div class=\"o-widget__analytic__color-picker\" cdkDrag>\n <pry-color-picker\n [ngModel]=\"color\"\n (ngModelChange)=\"modifyColorScheme($event, i)\"\n ></pry-color-picker>\n <button (click)=\"removeColor(i)\" class=\"o-widget__analytic__color-picker-remove\">\n <pry-icon iconSvg=\"close\" [height]=\"15\" [width]=\"15\"></pry-icon>\n </button>\n <div *cdkDragPreview>\n <pry-color-picker [ngModel]=\"color\"></pry-color-picker>\n </div>\n </div>\n }\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only o-widget__analytic__color-picker-add\"\n (click)=\"modifyColorScheme()\"\n >\n <pry-icon iconSvg=\"add\" [height]=\"20\" [width]=\"20\"></pry-icon>\n </button>\n </div>\n </div>\n }\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleFormat($event)\" [ngModel]=\"!!optionsCopy.format\">\n {{ '@pry.widget.analytic.format' | i18n }}\n </pry-checkbox>\n @if (optionsCopy.format) {\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"format\">{{ '@pry.widget.analytic.suffix' | i18n }}</label>\n <input\n type=\"text\"\n class=\"a-form-field\"\n id=\"format\"\n [ngModel]=\"optionsCopy.format.suffix\"\n (ngModelChange)=\"changeFormat($event)\"\n />\n </div>\n }\n </div>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"o-widget__analytic__table\">\n <table [style.height.px]=\"height$ | async\">\n <thead>\n <tr class=\"primary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n <th [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ primary }}\n </th>\n }\n </tr>\n @if (optionsCopy.secondaryProp) {\n <tr class=\"secondary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <th>{{ secondary }}</th>\n }\n }\n </tr>\n }\n </thead>\n <tbody>\n @for (line of lines$ | async; track line.name) {\n <tr>\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @if (optionsCopy.secondaryProp) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td\n [ngStyle]=\"\n optionsCopy.colorConfig ? { 'background-color': (colorMap$ | async)?.[line.name]?.[primary] } : {}\n \"\n >\n {{ line.value[primary][secondary] | dataFormat: true : optionsCopy.format?.suffix\n </td>\n }\n } @else {\n <td\n [ngStyle]=\"\n optionsCopy.colorConfig ? { 'background-color': (colorMap$ | async)?.[line.name]?.[primary] } : {}\n \"\n >\n {{ line.value[primary] | dataFormat: true : optionsCopy.format?.suffix }}\n </td>\n }\n }\n </tr>\n }\n </tbody>\n <tfoot>\n @for (line of totals$ | async; track line.name) {\n <tr class=\"partial-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td>\n {{ line.value[primary][secondary] }}\n </td>\n }\n }\n </tr>\n }\n @for (line of grandTotals$ | async; track line.name) {\n <tr class=\"grand-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n <td [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ line.value[primary] }}\n </td>\n }\n </tr>\n }\n </tfoot>\n </table>\n </div>\n</div>\n" }]
181
182
  }], ctorParameters: () => [{ type: i1.Store }, { type: i0.ElementRef }] });
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWFuYWx5dGljLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LWFuYWx5dGljL2NvbXBvbmVudC93aWRnZXQtYW5hbHl0aWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYW5hbHl0aWMvY29tcG9uZW50L3dpZGdldC1hbmFseXRpYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFLTCxjQUFjLEVBQ2QsbUJBQW1CLEVBR25CLG9CQUFvQixFQUNyQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFPeEMsTUFBTSxPQUFPLHVCQUF3QixTQUFRLG1CQUFtQjtJQWlCOUQsTUFBTSxDQUFDLE1BQWMsRUFBRSxJQUFvRTtRQUN6RixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUNsQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBeUIsRUFBRSxJQUF1QjtRQUNsRSxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2IsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBWSxDQUFDLElBQUksR0FBRyxNQUFnQixDQUFDO2dCQUN0RCxNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDZCxJQUFJLENBQUMsV0FB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LEtBQUssU0FBUztZQUMzQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQ3hELENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxXQUFXLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsSUFBSSxDQUFDLEtBQTRCO1FBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQ3pDLEtBQUssQ0FBQyxZQUFZLEVBQ2xCLENBQUMsRUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3ZFLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFFBQVEsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUMxRCxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQTlQVSx1QkFBdUI7a0dBQXZCLHVCQUF1QixrRkNyQnBDLCtvUkFxTkE7OzJGRGhNYSx1QkFBdUI7a0JBSm5DLFNBQVM7K0JBQ0UscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBbmFseXRpY1dpZGdldE9wdGlvbnMsXG4gIEF0dHJpYnV0ZSxcbiAgQXR0cmlidXRlU2ltcGxlVmFsdWUsXG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgSXRlbSxcbiAgUmVzdWx0U2V0LFxuICBXSURHRVRfSEVBREVSX0hFSUdIVFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LXdpZGdldC1hbmFseXRpYycsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtYW5hbHl0aWMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldEFuYWx5dGljQ29tcG9uZW50IGV4dGVuZHMgRGF0YVdpZGdldENvbXBvbmVudCB7XG4gIG9wdGlvbnNDb3B5OiBBbmFseXRpY1dpZGdldE9wdGlvbnMgPSB7IHByaW1hcnlQcm9wOiAnJywgc2Vjb25kYXJ5UHJvcDogJycsIHZlcnRpY2FsUHJvcDogJycsIHZhbHVlUHJvcDogJycgfTtcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8QW5hbHl0aWNXaWRnZXRPcHRpb25zPjtcblxuICBwcmltYXJ5UHJvcGVydHkkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgc2Vjb25kYXJ5UHJvcGVydHkkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgdmVydGljYWxQcm9wZXJ0eSQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICB0b3RhbFByb3BlcnR5JDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIGdyYW5kVG90YWxQcm9wZXJ0eSQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBsaW5lcyQ6IE9ic2VydmFibGU8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogYW55IH0gfSB9W10+O1xuICB0b3RhbHMkOiBPYnNlcnZhYmxlPHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IH0gfVtdPjtcbiAgZ3JhbmRUb3RhbHMkOiBPYnNlcnZhYmxlPHsgbmFtZTogYW55OyB2YWx1ZTogeyBbcDogc3RyaW5nXTogYW55IH0gfVtdPjtcbiAgY29sb3JNYXAkOiBPYnNlcnZhYmxlPHsgW3ZlcnRpY2FsOiBzdHJpbmddOiB7IFtwcmltYXJ5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSB9PjtcbiAgaGVpZ2h0JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBjbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgYXZhaWxhYmxlUHJvcGVydGllcyQ6IE9ic2VydmFibGU8QXR0cmlidXRlW10+O1xuXG4gIGNoYW5nZSgkZXZlbnQ6IHN0cmluZywgcHJvcDogJ3ByaW1hcnlQcm9wJyB8ICdzZWNvbmRhcnlQcm9wJyB8ICd2YWx1ZVByb3AnIHwgJ3ZlcnRpY2FsUHJvcCcpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5W3Byb3BdID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlQ29sb3JDb25maWcoJGV2ZW50OiBzdHJpbmcgfCBzdHJpbmdbXSwgcHJvcDogJ3Byb3AnIHwgJ2NvbG9ycycpIHtcbiAgICBzd2l0Y2ggKHByb3ApIHtcbiAgICAgIGNhc2UgJ3Byb3AnOiB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuY29sb3JDb25maWchLnByb3AgPSAkZXZlbnQgYXMgc3RyaW5nO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbG9ycyc6IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5jb2xvckNvbmZpZyEuY29sb3JzID0gJGV2ZW50IGFzIHN0cmluZ1tdO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VGb3JtYXQoJGV2ZW50OiBzdHJpbmcsIHByb3AgPSAnc3VmZml4Jykge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuZm9ybWF0IS5zdWZmaXggPSAkZXZlbnQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzdG9yZTogU3RvcmU8YW55PiwgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcihzdG9yZSwgZWwpO1xuICAgIHRoaXMub3B0aW9ucyQgPSB0aGlzLm1hbmlmZXN0JC5waXBlKG1hcCgobWFuaWZlc3QpID0+IChtYW5pZmVzdC5vcHRpb25zID8/IHt9KSBhcyBBbmFseXRpY1dpZGdldE9wdGlvbnMpKTtcbiAgICB0aGlzLmNsYXNzZXMkID0gdGhpcy5zdG9yZS5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3Nlcyk7XG4gICAgdGhpcy5oZWlnaHQkID0gY29tYmluZUxhdGVzdChbdGhpcy53aWRnZXRTaXplJCwgdGhpcy5kaXNwbGF5SGVhZGVyJF0pLnBpcGUoXG4gICAgICBtYXAoKFtzaXplLCBoZWFkZXJdKSA9PiBzaXplLmhlaWdodCAtIChoZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSA6IDApKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyQuc3Vic2NyaWJlKChvcHRpb25zKSA9PiB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnByaW1hcnlQcm9wZXJ0eSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLnJlc3VsdFNldCRdKS5waXBlKFxuICAgICAgZmlsdGVyKChbb3B0aW9uc10pID0+ICEhb3B0aW9ucy5wcmltYXJ5UHJvcCksXG4gICAgICBtYXAoKFtvcHRpb25zLCByc10pID0+IHRoaXMuZ2V0UHJvcGVydHlMYWJlbHNGb3JMZXZlbChycywgb3B0aW9ucy5wcmltYXJ5UHJvcCkpXG4gICAgKTtcbiAgICB0aGlzLnNlY29uZGFyeVByb3BlcnR5JCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMub3B0aW9ucyQsIHRoaXMucmVzdWx0U2V0JF0pLnBpcGUoXG4gICAgICBmaWx0ZXIoKFtvcHRpb25zXSkgPT4gISFvcHRpb25zLnNlY29uZGFyeVByb3ApLFxuICAgICAgbWFwKChbb3B0aW9ucywgcnNdKSA9PiB0aGlzLmdldFByb3BlcnR5TGFiZWxzRm9yTGV2ZWwocnMsIG9wdGlvbnMuc2Vjb25kYXJ5UHJvcCEsIDEpKVxuICAgICk7XG4gICAgdGhpcy52ZXJ0aWNhbFByb3BlcnR5JCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMub3B0aW9ucyQsIHRoaXMucmVzdWx0U2V0JF0pLnBpcGUoXG4gICAgICBmaWx0ZXIoKFtvcHRpb25zXSkgPT4gISFvcHRpb25zLnZlcnRpY2FsUHJvcCksXG4gICAgICBtYXAoKFtvcHRpb25zLCByc10pID0+IHRoaXMuZ2V0UHJvcGVydHlMYWJlbHNGb3JMZXZlbChycywgb3B0aW9ucy52ZXJ0aWNhbFByb3AsIDEpKVxuICAgICk7XG4gICAgdGhpcy50b3RhbFByb3BlcnR5JCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMub3B0aW9ucyQsIHRoaXMucmVzdWx0U2V0JF0pLnBpcGUoXG4gICAgICBtYXAoKFtvcHRpb25zLCByc10pID0+IHRoaXMuZ2V0UHJvcGVydHlMYWJlbHNGb3JMZXZlbChycywgb3B0aW9ucy52ZXJ0aWNhbFByb3AsIDIpKVxuICAgICk7XG4gICAgdGhpcy5ncmFuZFRvdGFsUHJvcGVydHkkID0gY29tYmluZUxhdGVzdChbdGhpcy5vcHRpb25zJCwgdGhpcy5yZXN1bHRTZXQkXSkucGlwZShcbiAgICAgIG1hcCgoW29wdGlvbnMsIHJzXSkgPT4gdGhpcy5nZXRQcm9wZXJ0eUxhYmVsc0ZvckxldmVsKHJzLCBvcHRpb25zLnZlcnRpY2FsUHJvcCwgMykpXG4gICAgKTtcblxuICAgIHRoaXMubGluZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgdGhpcy5wcmltYXJ5UHJvcGVydHkkLnBpcGUoc3RhcnRXaXRoKFtdKSksXG4gICAgICB0aGlzLnNlY29uZGFyeVByb3BlcnR5JC5waXBlKHN0YXJ0V2l0aCh1bmRlZmluZWQpKSxcbiAgICAgIHRoaXMudmVydGljYWxQcm9wZXJ0eSQucGlwZShzdGFydFdpdGgoW10pKSxcbiAgICAgIHRoaXMucmVzdWx0U2V0JFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtvcHRpb25zLCBwcmltYXJ5UHJvcHMsIHNlY29uZGFyeVByb3BzLCB2ZXJ0aWNhbFByb3BzLCByc10pID0+XG4gICAgICAgIHRoaXMuY3JlYXRlVmFsdWVNYXAodmVydGljYWxQcm9wcywgcHJpbWFyeVByb3BzLCBzZWNvbmRhcnlQcm9wcywgcnMsIG9wdGlvbnMsIDEpXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMudG90YWxzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5vcHRpb25zJCxcbiAgICAgIHRoaXMucHJpbWFyeVByb3BlcnR5JCxcbiAgICAgIHRoaXMuc2Vjb25kYXJ5UHJvcGVydHkkLFxuICAgICAgdGhpcy50b3RhbFByb3BlcnR5JCxcbiAgICAgIHRoaXMucmVzdWx0U2V0JFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtvcHRpb25zLCBwcmltYXJ5UHJvcHMsIHNlY29uZGFyeVByb3BzLCB2ZXJ0aWNhbFByb3BzLCByc10pID0+XG4gICAgICAgIHRoaXMuY3JlYXRlVmFsdWVNYXAodmVydGljYWxQcm9wcywgcHJpbWFyeVByb3BzLCBzZWNvbmRhcnlQcm9wcywgcnMsIG9wdGlvbnMsIDIpXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuZ3JhbmRUb3RhbHMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgdGhpcy5wcmltYXJ5UHJvcGVydHkkLFxuICAgICAgdGhpcy5ncmFuZFRvdGFsUHJvcGVydHkkLFxuICAgICAgdGhpcy5yZXN1bHRTZXQkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW29wdGlvbnMsIHByaW1hcnlQcm9wcywgdmVydGljYWxQcm9wcywgcnNdKSA9PlxuICAgICAgICB0aGlzLmNyZWF0ZVZhbHVlTWFwKHZlcnRpY2FsUHJvcHMsIHByaW1hcnlQcm9wcywgdW5kZWZpbmVkLCBycywgb3B0aW9ucywgMylcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5jb2xvck1hcCQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICB0aGlzLnJlc3VsdFNldCQsXG4gICAgICB0aGlzLnZlcnRpY2FsUHJvcGVydHkkLFxuICAgICAgdGhpcy5wcmltYXJ5UHJvcGVydHkkXG4gICAgXSkucGlwZShcbiAgICAgIGZpbHRlcigoW29wdGlvbnNdKSA9PiAhIW9wdGlvbnMuY29sb3JDb25maWcpLFxuICAgICAgbWFwKChbb3B0aW9ucywgcnMsIHZlcnRpY2FsLCBwcmltYXJ5XSkgPT4gdGhpcy5jcmVhdGVDb2xvck1hcCh2ZXJ0aWNhbCwgcHJpbWFyeSwgcnMsIG9wdGlvbnMpKVxuICAgICk7XG5cbiAgICB0aGlzLmF2YWlsYWJsZVByb3BlcnRpZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5jbGFzc2VzJCwgdGhpcy5yZXN1bHRTZXQkXSkucGlwZShcbiAgICAgIG1hcCgoW2NsYXNzZXMsIHJzXSkgPT4ge1xuICAgICAgICBjb25zdCBwcmVzZW50Q2xhc3Nlc0lkID0gT2JqZWN0LmtleXMocnMuaXRlbXMpO1xuICAgICAgICBjb25zdCBwcmVzZW50Q2xhc3NlcyA9IHByZXNlbnRDbGFzc2VzSWRcbiAgICAgICAgICAubWFwKChjbGFzc0lkKSA9PiBjbGFzc2VzLmZpbmQoKGNsKSA9PiBjbC5pZCA9PT0gY2xhc3NJZCkpXG4gICAgICAgICAgLmZpbHRlcigoY2wpID0+ICEhY2wpIGFzIENsYXNzW107XG4gICAgICAgIHJldHVybiBwcmVzZW50Q2xhc3Nlcy5tYXAoKGNsKSA9PiBjbC5hdHRyaWJ1dGVzKS5mbGF0KCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG1hdGNoQXR0cmlidXRlVmFsdWUoaXRlbTogSXRlbSwgcHJvcD86IHN0cmluZywgY29tcGFyaXNvblZhbHVlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNvbXBhcmlzb25WYWx1ZSAmJiBwcm9wID8gKGl0ZW0uYXR0cmlidXRlc1twcm9wXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSkudmFsdWUgPT0gY29tcGFyaXNvblZhbHVlIDogdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVmFsdWVNYXAoXG4gICAgdmVydGljYWxQcm9wczogc3RyaW5nW10sXG4gICAgcHJpbWFyeVByb3BzOiBzdHJpbmdbXSxcbiAgICBzZWNvbmRhcnlQcm9wczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gICAgcnM6IFJlc3VsdFNldCxcbiAgICBvcHRpb25zOiBBbmFseXRpY1dpZGdldE9wdGlvbnMsXG4gICAgbGV2ZWw/OiBudW1iZXJcbiAgKSB7XG4gICAgcmV0dXJuIHZlcnRpY2FsUHJvcHMubWFwKCh2ZXJ0aWNhbCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBhbnkgfTtcbiAgICAgIHByaW1hcnlQcm9wcy5mb3JFYWNoKChwcmltYXJ5KSA9PiB7XG4gICAgICAgIChzZWNvbmRhcnlQcm9wcyA/PyBbdW5kZWZpbmVkXSkuZm9yRWFjaCgoc2Vjb25kYXJ5KSA9PiB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdJdGVtID0gKHJzLml0ZW1zW09iamVjdC5rZXlzKHJzLml0ZW1zKVswXV0gPz8gW10pLmZpbmQoXG4gICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgdGhpcy5tYXRjaEF0dHJpYnV0ZVZhbHVlKGl0ZW0sIG9wdGlvbnMucHJpbWFyeVByb3AsIHByaW1hcnkpICYmXG4gICAgICAgICAgICAgIHRoaXMubWF0Y2hBdHRyaWJ1dGVWYWx1ZShpdGVtLCBvcHRpb25zLnNlY29uZGFyeVByb3AsIHNlY29uZGFyeSkgJiZcbiAgICAgICAgICAgICAgdGhpcy5tYXRjaEF0dHJpYnV0ZVZhbHVlKGl0ZW0sIG9wdGlvbnMudmVydGljYWxQcm9wLCB2ZXJ0aWNhbCkgJiZcbiAgICAgICAgICAgICAgdGhpcy5tYXRjaEF0dHJpYnV0ZVZhbHVlKGl0ZW0sICdsZXZlbCcsIGxldmVsICsgJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoISFtYXRjaGluZ0l0ZW0pIHtcbiAgICAgICAgICAgIGlmICghIXNlY29uZGFyeSkge1xuICAgICAgICAgICAgICBpZiAoIXZhbHVlW3ByaW1hcnldKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVbcHJpbWFyeV0gPSB7fTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YWx1ZVtwcmltYXJ5XVtzZWNvbmRhcnldID0gKG1hdGNoaW5nSXRlbSEuYXR0cmlidXRlc1tvcHRpb25zLnZhbHVlUHJvcF0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWVbcHJpbWFyeV0gPSAobWF0Y2hpbmdJdGVtIS5hdHRyaWJ1dGVzW29wdGlvbnMudmFsdWVQcm9wXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSk/LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG5hbWU6IHZlcnRpY2FsLCB2YWx1ZSB9O1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlMYWJlbHNGb3JMZXZlbChyczogUmVzdWx0U2V0LCBwcm9wZXJ0eTogc3RyaW5nLCBsZXZlbD86IG51bWJlcikge1xuICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMocnMuaXRlbXMpXG4gICAgICAubWFwKChpdGVtcykgPT5cbiAgICAgICAgaXRlbXNcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICAgICAgbGV2ZWwgJiYgJ2xldmVsJyBpbiBpdGVtLmF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgPyBbbGV2ZWwsICcnICsgbGV2ZWxdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgKGl0ZW0uYXR0cmlidXRlc1snbGV2ZWwnXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSkudmFsdWUgYXMgc3RyaW5nIHwgbnVtYmVyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHRydWVcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcCgoaXRlbSkgPT4gKGl0ZW0uYXR0cmlidXRlc1twcm9wZXJ0eV0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlICsgJycpXG4gICAgICApXG4gICAgICAuZmxhdCgpXG4gICAgICAuZmxhdCgpO1xuICAgIHJldHVybiBbLi4ubmV3IFNldCh2YWx1ZXMpXTtcbiAgfVxuXG4gIGNyZWF0ZUNvbG9yTWFwKHZlcnRpY2FsUHJvcHM6IHN0cmluZ1tdLCBwcmltYXJ5UHJvcHM6IHN0cmluZ1tdLCByczogUmVzdWx0U2V0LCBvcHRpb25zOiBBbmFseXRpY1dpZGdldE9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5jb2xvckNvbmZpZ1xuICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgdmVydGljYWxQcm9wcy5tYXAoKHZlcnRpY2FsKSA9PiBbXG4gICAgICAgICAgICB2ZXJ0aWNhbCxcbiAgICAgICAgICAgIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgICAgcHJpbWFyeVByb3BzLm1hcCgocHJpbWFyeSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nSXRlbSA9IChycy5pdGVtc1tPYmplY3Qua2V5cyhycy5pdGVtcylbMF1dID8/IFtdKS5maW5kKFxuICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hBdHRyaWJ1dGVWYWx1ZShpdGVtLCBvcHRpb25zLnByaW1hcnlQcm9wLCBwcmltYXJ5KSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoQXR0cmlidXRlVmFsdWUoaXRlbSwgb3B0aW9ucy52ZXJ0aWNhbFByb3AsIHZlcnRpY2FsKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgcHJpbWFyeSxcbiAgICAgICAgICAgICAgICAgIG1hdGNoaW5nSXRlbSAmJiAobWF0Y2hpbmdJdGVtLmF0dHJpYnV0ZXNbb3B0aW9ucy52YWx1ZVByb3BdIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKS52YWx1ZSAhPT0gMFxuICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbnMuY29sb3JDb25maWc/LmNvbG9yc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICgobWF0Y2hpbmdJdGVtLmF0dHJpYnV0ZXNbb3B0aW9ucy5jb2xvckNvbmZpZyEucHJvcF0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlIGFzIG51bWJlcikgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICA6ICcjRkZGRkZGJ1xuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgKVxuICAgICAgOiB7fTtcbiAgfVxuXG4gIHRvZ2dsZUNvbG9yQ29uZmlnKCRldmVudDogYm9vbGVhbikge1xuICAgIGlmICgkZXZlbnQgIT09ICEhdGhpcy5vcHRpb25zQ29weS5jb2xvckNvbmZpZykge1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnNDb3B5LmNvbG9yQ29uZmlnKSB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuY29sb3JDb25maWcgPSB7IHByb3A6ICcnLCBjb2xvcnM6IFtdIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmNvbG9yQ29uZmlnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUZvcm1hdCgkZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoJGV2ZW50ICE9PSAhIXRoaXMub3B0aW9uc0NvcHkuZm9ybWF0KSB7XG4gICAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkuZm9ybWF0KSB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuZm9ybWF0ID0geyBzdWZmaXg6ICcnIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtb2RpZnlDb2xvclNjaGVtZSgkZXZlbnQ/OiBzdHJpbmcsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgJGV2ZW50ICYmIGluZGV4ICE9PSB1bmRlZmluZWRcbiAgICAgID8gKHRoaXMub3B0aW9uc0NvcHkuY29sb3JDb25maWchLmNvbG9yc1tpbmRleF0gPSAkZXZlbnQpXG4gICAgICA6IHRoaXMub3B0aW9uc0NvcHkuY29sb3JDb25maWchLmNvbG9ycy5wdXNoKCcjRkZGRkZGJyk7XG4gIH1cblxuICByZW1vdmVDb2xvcihpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5jb2xvckNvbmZpZyEuY29sb3JzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cblxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LmNvbG9yQ29uZmlnIS5jb2xvcnMuc3BsaWNlKFxuICAgICAgZXZlbnQuY3VycmVudEluZGV4LFxuICAgICAgMCxcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuY29sb3JDb25maWchLmNvbG9ycy5zcGxpY2UoZXZlbnQucHJldmlvdXNJbmRleCwgMSlbMF1cbiAgICApO1xuICB9XG5cbiAgZW1pdE1hbmlmZXN0KCkge1xuICAgIHRoaXMubWFuaWZlc3RNb2RpZmllZC5lbWl0KHtcbiAgICAgIHdpZGdldEluZGV4OiB0aGlzLndpZGdldEluZGV4LFxuICAgICAgbWFuaWZlc3Q6IHsgLi4udGhpcy5tYW5pZmVzdCwgb3B0aW9uczogdGhpcy5vcHRpb25zQ29weSB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxwcnktd2lkZ2V0LWFuYWx5dGljLWNzcz48L3ByeS13aWRnZXQtYW5hbHl0aWMtY3NzPlxuPGRpdiBjbGFzcz1cIm8td2lkZ2V0IG8td2lkZ2V0X19hbmFseXRpY1wiPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICAqbmdJZj1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgW21hbmlmZXN0XT1cIm1hbmlmZXN0XCJcbiAgICAobWFuaWZlc3RNb2RpZmllZCk9XCJtYW5pZmVzdE1vZGlmaWVkLmVtaXQoJGV2ZW50KVwiXG4gICAgI2hlYWRlclxuICAgIFtoZWFkZXJPcHRpb25zXT1cIihkaXNwbGF5SGVhZGVyJCB8IGFzeW5jKSA/PyB7fVwiXG4gICAgW2RhdGFzb3VyY2VJZHNdPVwiKGRhdGFzb3VyY2VJZHMkIHwgYXN5bmMpID8/IFtdXCJcbiAgPlxuICAgIDxwcnktc2V0dGluZ3NcbiAgICAgIChzYXZlVHJpZ2dlcmVkKT1cImVtaXRNYW5pZmVzdCgpXCJcbiAgICAgIChjaGFuZ2VUaXRsZSk9XCJjaGFuZ2VXaWRnZXRUaXRsZSgkZXZlbnQpXCJcbiAgICAgIFtoZWFkZXJQcmVzZW50XT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgIFtvcGVuJF09XCJvcGVuJFwiXG4gICAgICBjbGFzcz1cIm8tc2V0dGluZ3NcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19maWVsZHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJwcmltYXJ5UHJvcFwiPnt7ICdAcHJ5LndpZGdldC5hbmFseXRpYy5wcmltYXJ5UHJvcCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlKCRldmVudCwgJ3ByaW1hcnlQcm9wJylcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cImF2YWlsYWJsZVByb3BlcnRpZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkucHJpbWFyeVByb3BcIlxuICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgIGlkPVwicHJpbWFyeVByb3BcIlxuICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInNlY29uZGFyeVByb3BcIj57eyAnQHByeS53aWRnZXQuYW5hbHl0aWMuc2Vjb25kYXJ5UHJvcCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlKCRldmVudCwgJ3NlY29uZGFyeVByb3AnKVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwiYXZhaWxhYmxlUHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5zZWNvbmRhcnlQcm9wXCJcbiAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICBpZD1cInNlY29uZGFyeVByb3BcIlxuICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJ2ZXJ0aWNhbFByb3BcIj57eyAnQHByeS53aWRnZXQuYW5hbHl0aWMudmVydGljYWxQcm9wJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2UoJGV2ZW50LCAndmVydGljYWxQcm9wJylcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cImF2YWlsYWJsZVByb3BlcnRpZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkudmVydGljYWxQcm9wXCJcbiAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICBpZD1cInZlcnRpY2FsUHJvcFwiXG4gICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwidmFsdWVQcm9wXCI+e3sgJ0Bwcnkud2lkZ2V0LmFuYWx5dGljLnZhbHVlUHJvcCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlKCRldmVudCwgJ3ZhbHVlUHJvcCcpXCJcbiAgICAgICAgICAgIFtpdGVtc109XCJhdmFpbGFibGVQcm9wZXJ0aWVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnZhbHVlUHJvcFwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgaWQ9XCJ2YWx1ZVByb3BcIlxuICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVDb2xvckNvbmZpZygkZXZlbnQpXCIgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5jb2xvckNvbmZpZ1wiPlxuICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmFuYWx5dGljLmNvbG9yQ29uZmlnJyB8IGkxOG4gfX1cbiAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICBAaWYgKG9wdGlvbnNDb3B5LmNvbG9yQ29uZmlnKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjb2xvclByb3BcIj57eyAnQHByeS53aWRnZXQuYW5hbHl0aWMuY29sb3JQcm9wJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNvbG9yQ29uZmlnKCRldmVudCwgJ3Byb3AnKVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1zXT1cImF2YWlsYWJsZVByb3BlcnRpZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmNvbG9yQ29uZmlnLnByb3BcIlxuICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGlkPVwiY29sb3JQcm9wXCJcbiAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY29sb3JQcm9wXCI+e3sgJ0Bwcnkud2lkZ2V0LmFuYWx5dGljLmNvbG9ycycgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiby13aWRnZXRfX2FuYWx5dGljX19jb2xvci1waWNrZXItY29udGFpbmVyIHUtZGlzcGxheS1mbGV4IC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIlxuICAgICAgICAgICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBmb3IgKGNvbG9yIG9mIG9wdGlvbnNDb3B5LmNvbG9yQ29uZmlnLmNvbG9yczsgdHJhY2sgY29sb3I7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXRfX2FuYWx5dGljX19jb2xvci1waWNrZXJcIiBjZGtEcmFnPlxuICAgICAgICAgICAgICAgICAgICA8cHJ5LWNvbG9yLXBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJtb2RpZnlDb2xvclNjaGVtZSgkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LWNvbG9yLXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlQ29sb3IoaSlcIiBjbGFzcz1cIm8td2lkZ2V0X19hbmFseXRpY19fY29sb3ItcGlja2VyLXJlbW92ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2xvc2VcIiBbaGVpZ2h0XT1cIjE1XCIgW3dpZHRoXT1cIjE1XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKmNka0RyYWdQcmV2aWV3PlxuICAgICAgICAgICAgICAgICAgICAgIDxwcnktY29sb3ItcGlja2VyIFtuZ01vZGVsXT1cImNvbG9yXCI+PC9wcnktY29sb3ItcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seSBvLXdpZGdldF9fYW5hbHl0aWNfX2NvbG9yLXBpY2tlci1hZGRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vZGlmeUNvbG9yU2NoZW1lKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiYWRkXCIgW2hlaWdodF09XCIyMFwiIFt3aWR0aF09XCIyMFwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlRm9ybWF0KCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LmZvcm1hdFwiPlxuICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmFuYWx5dGljLmZvcm1hdCcgfCBpMThuIH19XG4gICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgQGlmIChvcHRpb25zQ29weS5mb3JtYXQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImZvcm1hdFwiPnt7ICdAcHJ5LndpZGdldC5hbmFseXRpYy5zdWZmaXgnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJmb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmZvcm1hdC5zdWZmaXhcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUZvcm1hdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cbiAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0X19hbmFseXRpY19fdGFibGVcIj5cbiAgICA8dGFibGUgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHQkIHwgYXN5bmNcIj5cbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyIGNsYXNzPVwicHJpbWFyeS1oZWFkZXJcIj5cbiAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICBAZm9yIChwcmltYXJ5IG9mIHByaW1hcnlQcm9wZXJ0eSQgfCBhc3luYzsgdHJhY2sgcHJpbWFyeSkge1xuICAgICAgICAgICAgPHRoIFtjb2xTcGFuXT1cIihzZWNvbmRhcnlQcm9wZXJ0eSQgfCBhc3luYyk/Lmxlbmd0aCA/PyAxXCI+XG4gICAgICAgICAgICAgIHt7IHByaW1hcnkgfX1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RyPlxuICAgICAgICBAaWYgKG9wdGlvbnNDb3B5LnNlY29uZGFyeVByb3ApIHtcbiAgICAgICAgICA8dHIgY2xhc3M9XCJzZWNvbmRhcnktaGVhZGVyXCI+XG4gICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgIEBmb3IgKHByaW1hcnkgb2YgcHJpbWFyeVByb3BlcnR5JCB8IGFzeW5jOyB0cmFjayBwcmltYXJ5KSB7XG4gICAgICAgICAgICAgIEBmb3IgKHNlY29uZGFyeSBvZiBzZWNvbmRhcnlQcm9wZXJ0eSQgfCBhc3luYzsgdHJhY2sgc2Vjb25kYXJ5KSB7XG4gICAgICAgICAgICAgICAgPHRoPnt7IHNlY29uZGFyeSB9fTwvdGg+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICB9XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PlxuICAgICAgICBAZm9yIChsaW5lIG9mIGxpbmVzJCB8IGFzeW5jOyB0cmFjayBsaW5lLm5hbWUpIHtcbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGg+e3sgbGluZS5uYW1lIH19PC90aD5cbiAgICAgICAgICAgIEBmb3IgKHByaW1hcnkgb2YgcHJpbWFyeVByb3BlcnR5JCB8IGFzeW5jOyB0cmFjayBwcmltYXJ5KSB7XG4gICAgICAgICAgICAgIEBpZiAob3B0aW9uc0NvcHkuc2Vjb25kYXJ5UHJvcCkge1xuICAgICAgICAgICAgICAgIEBmb3IgKHNlY29uZGFyeSBvZiBzZWNvbmRhcnlQcm9wZXJ0eSQgfCBhc3luYzsgdHJhY2sgc2Vjb25kYXJ5KSB7XG4gICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc0NvcHkuY29sb3JDb25maWcgPyB7ICdiYWNrZ3JvdW5kLWNvbG9yJzogKGNvbG9yTWFwJCB8IGFzeW5jKT8uW2xpbmUubmFtZV0/LltwcmltYXJ5XSB9IDoge31cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgbGluZS52YWx1ZVtwcmltYXJ5XVtzZWNvbmRhcnldXG4gICAgICAgICAgICAgICAgICAgIH19e3sgb3B0aW9uc0NvcHkuZm9ybWF0Py5zdWZmaXggPyAnICcgKyBvcHRpb25zQ29weS5mb3JtYXQ/LnN1ZmZpeCA6ICcnIH19XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uc0NvcHkuY29sb3JDb25maWcgPyB7ICdiYWNrZ3JvdW5kLWNvbG9yJzogKGNvbG9yTWFwJCB8IGFzeW5jKT8uW2xpbmUubmFtZV0/LltwcmltYXJ5XSB9IDoge31cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgbGluZS52YWx1ZVtwcmltYXJ5XSB9fXt7IG9wdGlvbnNDb3B5LmZvcm1hdD8uc3VmZml4ID8gJyAnICsgb3B0aW9uc0NvcHkuZm9ybWF0Py5zdWZmaXggOiAnJyB9fVxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICB9XG4gICAgICA8L3Rib2R5PlxuICAgICAgPHRmb290PlxuICAgICAgICBAZm9yIChsaW5lIG9mIHRvdGFscyQgfCBhc3luYzsgdHJhY2sgbGluZS5uYW1lKSB7XG4gICAgICAgICAgPHRyIGNsYXNzPVwicGFydGlhbC10b3RhbFwiPlxuICAgICAgICAgICAgPHRoPnt7IGxpbmUubmFtZSB9fTwvdGg+XG4gICAgICAgICAgICBAZm9yIChwcmltYXJ5IG9mIHByaW1hcnlQcm9wZXJ0eSQgfCBhc3luYzsgdHJhY2sgcHJpbWFyeSkge1xuICAgICAgICAgICAgICBAZm9yIChzZWNvbmRhcnkgb2Ygc2Vjb25kYXJ5UHJvcGVydHkkIHwgYXN5bmM7IHRyYWNrIHNlY29uZGFyeSkge1xuICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgIHt7IGxpbmUudmFsdWVbcHJpbWFyeV1bc2Vjb25kYXJ5XSB9fVxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKGxpbmUgb2YgZ3JhbmRUb3RhbHMkIHwgYXN5bmM7IHRyYWNrIGxpbmUubmFtZSkge1xuICAgICAgICAgIDx0ciBjbGFzcz1cImdyYW5kLXRvdGFsXCI+XG4gICAgICAgICAgICA8dGg+e3sgbGluZS5uYW1lIH19PC90aD5cbiAgICAgICAgICAgIEBmb3IgKHByaW1hcnkgb2YgcHJpbWFyeVByb3BlcnR5JCB8IGFzeW5jOyB0cmFjayBwcmltYXJ5KSB7XG4gICAgICAgICAgICAgIDx0ZCBbY29sU3Bhbl09XCIoc2Vjb25kYXJ5UHJvcGVydHkkIHwgYXN5bmMpPy5sZW5ndGggPz8gMVwiPlxuICAgICAgICAgICAgICAgIHt7IGxpbmUudmFsdWVbcHJpbWFyeV0gfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICB9XG4gICAgICA8L3Rmb290PlxuICAgIDwvdGFibGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWFuYWx5dGljLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LWFuYWx5dGljL2NvbXBvbmVudC93aWRnZXQtYW5hbHl0aWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYW5hbHl0aWMvY29tcG9uZW50L3dpZGdldC1hbmFseXRpYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFLTCxjQUFjLEVBQ2QsbUJBQW1CLEVBR25CLG9CQUFvQixFQUNyQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBT3hDLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxtQkFBbUI7SUFpQjlELE1BQU0sQ0FBQyxNQUFjLEVBQUUsSUFBb0U7UUFDekYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLE1BQXlCLEVBQUUsSUFBdUI7UUFDbEUsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDWixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVksQ0FBQyxJQUFJLEdBQUcsTUFBZ0IsQ0FBQztnQkFDdEQsTUFBTTtZQUNSLENBQUM7WUFDRCxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLFdB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SyxLQUFLLFNBQVM7WUFDM0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUN4RCxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWE7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELElBQUksQ0FBQyxLQUE0QjtRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUN6QyxLQUFLLENBQUMsWUFBWSxFQUNsQixDQUFDLEVBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN2RSxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixRQUFRLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7U0FDMUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0E5UFUsdUJBQXVCO2tHQUF2Qix1QkFBdUIsa0ZDckJwQyx1a1JBb05BOzsyRkQvTGEsdUJBQXVCO2tCQUpuQyxTQUFTOytCQUNFLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQW5hbHl0aWNXaWRnZXRPcHRpb25zLFxuICBBdHRyaWJ1dGUsXG4gIEF0dHJpYnV0ZVNpbXBsZVZhbHVlLFxuICBDbGFzcyxcbiAgQ2xhc3NTZWxlY3RvcnMsXG4gIERhdGFXaWRnZXRDb21wb25lbnQsXG4gIEl0ZW0sXG4gIFJlc3VsdFNldCxcbiAgV0lER0VUX0hFQURFUl9IRUlHSFRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENka0RyYWdEcm9wIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS13aWRnZXQtYW5hbHl0aWMnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWFuYWx5dGljLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRBbmFseXRpY0NvbXBvbmVudCBleHRlbmRzIERhdGFXaWRnZXRDb21wb25lbnQge1xuICBvcHRpb25zQ29weTogQW5hbHl0aWNXaWRnZXRPcHRpb25zID0geyBwcmltYXJ5UHJvcDogJycsIHNlY29uZGFyeVByb3A6ICcnLCB2ZXJ0aWNhbFByb3A6ICcnLCB2YWx1ZVByb3A6ICcnIH07XG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPEFuYWx5dGljV2lkZ2V0T3B0aW9ucz47XG5cbiAgcHJpbWFyeVByb3BlcnR5JDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIHNlY29uZGFyeVByb3BlcnR5JDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIHZlcnRpY2FsUHJvcGVydHkkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgdG90YWxQcm9wZXJ0eSQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBncmFuZFRvdGFsUHJvcGVydHkkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgbGluZXMkOiBPYnNlcnZhYmxlPHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgc3RyaW5nIH0gfVtdPjtcbiAgdG90YWxzJDogT2JzZXJ2YWJsZTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB9IH1bXT47XG4gIGdyYW5kVG90YWxzJDogT2JzZXJ2YWJsZTx7IG5hbWU6IGFueTsgdmFsdWU6IHsgW3A6IHN0cmluZ106IGFueSB9IH1bXT47XG4gIGNvbG9yTWFwJDogT2JzZXJ2YWJsZTx7IFt2ZXJ0aWNhbDogc3RyaW5nXTogeyBbcHJpbWFyeTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gfT47XG4gIGhlaWdodCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgY2xhc3NlcyQ6IE9ic2VydmFibGU8Q2xhc3NbXT47XG4gIGF2YWlsYWJsZVByb3BlcnRpZXMkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVtdPjtcblxuICBjaGFuZ2UoJGV2ZW50OiBzdHJpbmcsIHByb3A6ICdwcmltYXJ5UHJvcCcgfCAnc2Vjb25kYXJ5UHJvcCcgfCAndmFsdWVQcm9wJyB8ICd2ZXJ0aWNhbFByb3AnKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weVtwcm9wXSA9ICRldmVudDtcbiAgfVxuXG4gIGNoYW5nZUNvbG9yQ29uZmlnKCRldmVudDogc3RyaW5nIHwgc3RyaW5nW10sIHByb3A6ICdwcm9wJyB8ICdjb2xvcnMnKSB7XG4gICAgc3dpdGNoIChwcm9wKSB7XG4gICAgICBjYXNlICdwcm9wJzoge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmNvbG9yQ29uZmlnIS5wcm9wID0gJGV2ZW50IGFzIHN0cmluZztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdjb2xvcnMnOiB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuY29sb3JDb25maWchLmNvbG9ycyA9ICRldmVudCBhcyBzdHJpbmdbXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlRm9ybWF0KCRldmVudDogc3RyaW5nLCBwcm9wID0gJ3N1ZmZpeCcpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LmZvcm1hdCEuc3VmZml4ID0gJGV2ZW50O1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc3RvcmU6IFN0b3JlPGFueT4sIGVsOiBFbGVtZW50UmVmKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcbiAgICB0aGlzLm9wdGlvbnMkID0gdGhpcy5tYW5pZmVzdCQucGlwZShtYXAoKG1hbmlmZXN0KSA9PiAobWFuaWZlc3Qub3B0aW9ucyA/PyB7fSkgYXMgQW5hbHl0aWNXaWRnZXRPcHRpb25zKSk7XG4gICAgdGhpcy5jbGFzc2VzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpO1xuICAgIHRoaXMuaGVpZ2h0JCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2lkZ2V0U2l6ZSQsIHRoaXMuZGlzcGxheUhlYWRlciRdKS5waXBlKFxuICAgICAgbWFwKChbc2l6ZSwgaGVhZGVyXSkgPT4gc2l6ZS5oZWlnaHQgLSAoaGVhZGVyID8gV0lER0VUX0hFQURFUl9IRUlHSFQudmFsdWUgOiAwKSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm9wdGlvbnMkLnN1YnNjcmliZSgob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zKSk7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5wcmltYXJ5UHJvcGVydHkkID0gY29tYmluZUxhdGVzdChbdGhpcy5vcHRpb25zJCwgdGhpcy5yZXN1bHRTZXQkXSkucGlwZShcbiAgICAgIGZpbHRlcigoW29wdGlvbnNdKSA9PiAhIW9wdGlvbnMucHJpbWFyeVByb3ApLFxuICAgICAgbWFwKChbb3B0aW9ucywgcnNdKSA9PiB0aGlzLmdldFByb3BlcnR5TGFiZWxzRm9yTGV2ZWwocnMsIG9wdGlvbnMucHJpbWFyeVByb3ApKVxuICAgICk7XG4gICAgdGhpcy5zZWNvbmRhcnlQcm9wZXJ0eSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLnJlc3VsdFNldCRdKS5waXBlKFxuICAgICAgZmlsdGVyKChbb3B0aW9uc10pID0+ICEhb3B0aW9ucy5zZWNvbmRhcnlQcm9wKSxcbiAgICAgIG1hcCgoW29wdGlvbnMsIHJzXSkgPT4gdGhpcy5nZXRQcm9wZXJ0eUxhYmVsc0ZvckxldmVsKHJzLCBvcHRpb25zLnNlY29uZGFyeVByb3AhLCAxKSlcbiAgICApO1xuICAgIHRoaXMudmVydGljYWxQcm9wZXJ0eSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLnJlc3VsdFNldCRdKS5waXBlKFxuICAgICAgZmlsdGVyKChbb3B0aW9uc10pID0+ICEhb3B0aW9ucy52ZXJ0aWNhbFByb3ApLFxuICAgICAgbWFwKChbb3B0aW9ucywgcnNdKSA9PiB0aGlzLmdldFByb3BlcnR5TGFiZWxzRm9yTGV2ZWwocnMsIG9wdGlvbnMudmVydGljYWxQcm9wLCAxKSlcbiAgICApO1xuICAgIHRoaXMudG90YWxQcm9wZXJ0eSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLnJlc3VsdFNldCRdKS5waXBlKFxuICAgICAgbWFwKChbb3B0aW9ucywgcnNdKSA9PiB0aGlzLmdldFByb3BlcnR5TGFiZWxzRm9yTGV2ZWwocnMsIG9wdGlvbnMudmVydGljYWxQcm9wLCAyKSlcbiAgICApO1xuICAgIHRoaXMuZ3JhbmRUb3RhbFByb3BlcnR5JCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMub3B0aW9ucyQsIHRoaXMucmVzdWx0U2V0JF0pLnBpcGUoXG4gICAgICBtYXAoKFtvcHRpb25zLCByc10pID0+IHRoaXMuZ2V0UHJvcGVydHlMYWJlbHNGb3JMZXZlbChycywgb3B0aW9ucy52ZXJ0aWNhbFByb3AsIDMpKVxuICAgICk7XG5cbiAgICB0aGlzLmxpbmVzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5vcHRpb25zJCxcbiAgICAgIHRoaXMucHJpbWFyeVByb3BlcnR5JC5waXBlKHN0YXJ0V2l0aChbXSkpLFxuICAgICAgdGhpcy5zZWNvbmRhcnlQcm9wZXJ0eSQucGlwZShzdGFydFdpdGgodW5kZWZpbmVkKSksXG4gICAgICB0aGlzLnZlcnRpY2FsUHJvcGVydHkkLnBpcGUoc3RhcnRXaXRoKFtdKSksXG4gICAgICB0aGlzLnJlc3VsdFNldCRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbb3B0aW9ucywgcHJpbWFyeVByb3BzLCBzZWNvbmRhcnlQcm9wcywgdmVydGljYWxQcm9wcywgcnNdKSA9PlxuICAgICAgICB0aGlzLmNyZWF0ZVZhbHVlTWFwKHZlcnRpY2FsUHJvcHMsIHByaW1hcnlQcm9wcywgc2Vjb25kYXJ5UHJvcHMsIHJzLCBvcHRpb25zLCAxKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnRvdGFscyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICB0aGlzLnByaW1hcnlQcm9wZXJ0eSQsXG4gICAgICB0aGlzLnNlY29uZGFyeVByb3BlcnR5JCxcbiAgICAgIHRoaXMudG90YWxQcm9wZXJ0eSQsXG4gICAgICB0aGlzLnJlc3VsdFNldCRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbb3B0aW9ucywgcHJpbWFyeVByb3BzLCBzZWNvbmRhcnlQcm9wcywgdmVydGljYWxQcm9wcywgcnNdKSA9PlxuICAgICAgICB0aGlzLmNyZWF0ZVZhbHVlTWFwKHZlcnRpY2FsUHJvcHMsIHByaW1hcnlQcm9wcywgc2Vjb25kYXJ5UHJvcHMsIHJzLCBvcHRpb25zLCAyKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLmdyYW5kVG90YWxzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5vcHRpb25zJCxcbiAgICAgIHRoaXMucHJpbWFyeVByb3BlcnR5JCxcbiAgICAgIHRoaXMuZ3JhbmRUb3RhbFByb3BlcnR5JCxcbiAgICAgIHRoaXMucmVzdWx0U2V0JFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtvcHRpb25zLCBwcmltYXJ5UHJvcHMsIHZlcnRpY2FsUHJvcHMsIHJzXSkgPT5cbiAgICAgICAgdGhpcy5jcmVhdGVWYWx1ZU1hcCh2ZXJ0aWNhbFByb3BzLCBwcmltYXJ5UHJvcHMsIHVuZGVmaW5lZCwgcnMsIG9wdGlvbnMsIDMpXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuY29sb3JNYXAkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgdGhpcy5yZXN1bHRTZXQkLFxuICAgICAgdGhpcy52ZXJ0aWNhbFByb3BlcnR5JCxcbiAgICAgIHRoaXMucHJpbWFyeVByb3BlcnR5JFxuICAgIF0pLnBpcGUoXG4gICAgICBmaWx0ZXIoKFtvcHRpb25zXSkgPT4gISFvcHRpb25zLmNvbG9yQ29uZmlnKSxcbiAgICAgIG1hcCgoW29wdGlvbnMsIHJzLCB2ZXJ0aWNhbCwgcHJpbWFyeV0pID0+IHRoaXMuY3JlYXRlQ29sb3JNYXAodmVydGljYWwsIHByaW1hcnksIHJzLCBvcHRpb25zKSlcbiAgICApO1xuXG4gICAgdGhpcy5hdmFpbGFibGVQcm9wZXJ0aWVzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY2xhc3NlcyQsIHRoaXMucmVzdWx0U2V0JF0pLnBpcGUoXG4gICAgICBtYXAoKFtjbGFzc2VzLCByc10pID0+IHtcbiAgICAgICAgY29uc3QgcHJlc2VudENsYXNzZXNJZCA9IE9iamVjdC5rZXlzKHJzLml0ZW1zKTtcbiAgICAgICAgY29uc3QgcHJlc2VudENsYXNzZXMgPSBwcmVzZW50Q2xhc3Nlc0lkXG4gICAgICAgICAgLm1hcCgoY2xhc3NJZCkgPT4gY2xhc3Nlcy5maW5kKChjbCkgPT4gY2wuaWQgPT09IGNsYXNzSWQpKVxuICAgICAgICAgIC5maWx0ZXIoKGNsKSA9PiAhIWNsKSBhcyBDbGFzc1tdO1xuICAgICAgICByZXR1cm4gcHJlc2VudENsYXNzZXMubWFwKChjbCkgPT4gY2wuYXR0cmlidXRlcykuZmxhdCgpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXRjaEF0dHJpYnV0ZVZhbHVlKGl0ZW06IEl0ZW0sIHByb3A/OiBzdHJpbmcsIGNvbXBhcmlzb25WYWx1ZT86IHN0cmluZykge1xuICAgIHJldHVybiBjb21wYXJpc29uVmFsdWUgJiYgcHJvcCA/IChpdGVtLmF0dHJpYnV0ZXNbcHJvcF0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlID09IGNvbXBhcmlzb25WYWx1ZSA6IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVZhbHVlTWFwKFxuICAgIHZlcnRpY2FsUHJvcHM6IHN0cmluZ1tdLFxuICAgIHByaW1hcnlQcm9wczogc3RyaW5nW10sXG4gICAgc2Vjb25kYXJ5UHJvcHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICAgIHJzOiBSZXN1bHRTZXQsXG4gICAgb3B0aW9uczogQW5hbHl0aWNXaWRnZXRPcHRpb25zLFxuICAgIGxldmVsPzogbnVtYmVyXG4gICkge1xuICAgIHJldHVybiB2ZXJ0aWNhbFByb3BzLm1hcCgodmVydGljYWwpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0ge30gYXMgeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgYW55IH07XG4gICAgICBwcmltYXJ5UHJvcHMuZm9yRWFjaCgocHJpbWFyeSkgPT4ge1xuICAgICAgICAoc2Vjb25kYXJ5UHJvcHMgPz8gW3VuZGVmaW5lZF0pLmZvckVhY2goKHNlY29uZGFyeSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1hdGNoaW5nSXRlbSA9IChycy5pdGVtc1tPYmplY3Qua2V5cyhycy5pdGVtcylbMF1dID8/IFtdKS5maW5kKFxuICAgICAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgICAgIHRoaXMubWF0Y2hBdHRyaWJ1dGVWYWx1ZShpdGVtLCBvcHRpb25zLnByaW1hcnlQcm9wLCBwcmltYXJ5KSAmJlxuICAgICAgICAgICAgICB0aGlzLm1hdGNoQXR0cmlidXRlVmFsdWUoaXRlbSwgb3B0aW9ucy5zZWNvbmRhcnlQcm9wLCBzZWNvbmRhcnkpICYmXG4gICAgICAgICAgICAgIHRoaXMubWF0Y2hBdHRyaWJ1dGVWYWx1ZShpdGVtLCBvcHRpb25zLnZlcnRpY2FsUHJvcCwgdmVydGljYWwpICYmXG4gICAgICAgICAgICAgIHRoaXMubWF0Y2hBdHRyaWJ1dGVWYWx1ZShpdGVtLCAnbGV2ZWwnLCBsZXZlbCArICcnKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCEhbWF0Y2hpbmdJdGVtKSB7XG4gICAgICAgICAgICBpZiAoISFzZWNvbmRhcnkpIHtcbiAgICAgICAgICAgICAgaWYgKCF2YWx1ZVtwcmltYXJ5XSkge1xuICAgICAgICAgICAgICAgIHZhbHVlW3ByaW1hcnldID0ge307XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFsdWVbcHJpbWFyeV1bc2Vjb25kYXJ5XSA9IChtYXRjaGluZ0l0ZW0hLmF0dHJpYnV0ZXNbb3B0aW9ucy52YWx1ZVByb3BdIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKS52YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlW3ByaW1hcnldID0gKG1hdGNoaW5nSXRlbSEuYXR0cmlidXRlc1tvcHRpb25zLnZhbHVlUHJvcF0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpPy52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBuYW1lOiB2ZXJ0aWNhbCwgdmFsdWUgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFByb3BlcnR5TGFiZWxzRm9yTGV2ZWwocnM6IFJlc3VsdFNldCwgcHJvcGVydHk6IHN0cmluZywgbGV2ZWw/OiBudW1iZXIpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKHJzLml0ZW1zKVxuICAgICAgLm1hcCgoaXRlbXMpID0+XG4gICAgICAgIGl0ZW1zXG4gICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgICAgIGxldmVsICYmICdsZXZlbCcgaW4gaXRlbS5hdHRyaWJ1dGVzXG4gICAgICAgICAgICAgID8gW2xldmVsLCAnJyArIGxldmVsXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICAgIChpdGVtLmF0dHJpYnV0ZXNbJ2xldmVsJ10gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlIGFzIHN0cmluZyB8IG51bWJlclxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IChpdGVtLmF0dHJpYnV0ZXNbcHJvcGVydHldIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKS52YWx1ZSArICcnKVxuICAgICAgKVxuICAgICAgLmZsYXQoKVxuICAgICAgLmZsYXQoKTtcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQodmFsdWVzKV07XG4gIH1cblxuICBjcmVhdGVDb2xvck1hcCh2ZXJ0aWNhbFByb3BzOiBzdHJpbmdbXSwgcHJpbWFyeVByb3BzOiBzdHJpbmdbXSwgcnM6IFJlc3VsdFNldCwgb3B0aW9uczogQW5hbHl0aWNXaWRnZXRPcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuY29sb3JDb25maWdcbiAgICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgIHZlcnRpY2FsUHJvcHMubWFwKCh2ZXJ0aWNhbCkgPT4gW1xuICAgICAgICAgICAgdmVydGljYWwsXG4gICAgICAgICAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICAgIHByaW1hcnlQcm9wcy5tYXAoKHByaW1hcnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ0l0ZW0gPSAocnMuaXRlbXNbT2JqZWN0LmtleXMocnMuaXRlbXMpWzBdXSA/PyBbXSkuZmluZChcbiAgICAgICAgICAgICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoQXR0cmlidXRlVmFsdWUoaXRlbSwgb3B0aW9ucy5wcmltYXJ5UHJvcCwgcHJpbWFyeSkgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaEF0dHJpYnV0ZVZhbHVlKGl0ZW0sIG9wdGlvbnMudmVydGljYWxQcm9wLCB2ZXJ0aWNhbClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgIHByaW1hcnksXG4gICAgICAgICAgICAgICAgICBtYXRjaGluZ0l0ZW0gJiYgKG1hdGNoaW5nSXRlbS5hdHRyaWJ1dGVzW29wdGlvbnMudmFsdWVQcm9wXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSkudmFsdWUgIT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmNvbG9yQ29uZmlnPy5jb2xvcnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAoKG1hdGNoaW5nSXRlbS5hdHRyaWJ1dGVzW29wdGlvbnMuY29sb3JDb25maWchLnByb3BdIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKS52YWx1ZSBhcyBudW1iZXIpIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgOiAnI0ZGRkZGRidcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIClcbiAgICAgIDoge307XG4gIH1cblxuICB0b2dnbGVDb2xvckNvbmZpZygkZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoJGV2ZW50ICE9PSAhIXRoaXMub3B0aW9uc0NvcHkuY29sb3JDb25maWcpIHtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zQ29weS5jb2xvckNvbmZpZykge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmNvbG9yQ29uZmlnID0geyBwcm9wOiAnJywgY29sb3JzOiBbXSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5jb2xvckNvbmZpZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0b2dnbGVGb3JtYXQoJGV2ZW50OiBib29sZWFuKSB7XG4gICAgaWYgKCRldmVudCAhPT0gISF0aGlzLm9wdGlvbnNDb3B5LmZvcm1hdCkge1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnNDb3B5LmZvcm1hdCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmZvcm1hdCA9IHsgc3VmZml4OiAnJyB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5mb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbW9kaWZ5Q29sb3JTY2hlbWUoJGV2ZW50Pzogc3RyaW5nLCBpbmRleD86IG51bWJlcikge1xuICAgICRldmVudCAmJiBpbmRleCAhPT0gdW5kZWZpbmVkXG4gICAgICA/ICh0aGlzLm9wdGlvbnNDb3B5LmNvbG9yQ29uZmlnIS5jb2xvcnNbaW5kZXhdID0gJGV2ZW50KVxuICAgICAgOiB0aGlzLm9wdGlvbnNDb3B5LmNvbG9yQ29uZmlnIS5jb2xvcnMucHVzaCgnI0ZGRkZGRicpO1xuICB9XG5cbiAgcmVtb3ZlQ29sb3IoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuY29sb3JDb25maWchLmNvbG9ycy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG5cbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5jb2xvckNvbmZpZyEuY29sb3JzLnNwbGljZShcbiAgICAgIGV2ZW50LmN1cnJlbnRJbmRleCxcbiAgICAgIDAsXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmNvbG9yQ29uZmlnIS5jb2xvcnMuc3BsaWNlKGV2ZW50LnByZXZpb3VzSW5kZXgsIDEpWzBdXG4gICAgKTtcbiAgfVxuXG4gIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7IC4uLnRoaXMubWFuaWZlc3QsIG9wdGlvbnM6IHRoaXMub3B0aW9uc0NvcHkgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8cHJ5LXdpZGdldC1hbmFseXRpYy1jc3M+PC9wcnktd2lkZ2V0LWFuYWx5dGljLWNzcz5cbjxkaXYgY2xhc3M9XCJvLXdpZGdldCBvLXdpZGdldF9fYW5hbHl0aWNcIj5cbiAgPHByeS13aWRnZXQtaGVhZGVyXG4gICAgKm5nSWY9XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgIFttYW5pZmVzdF09XCJtYW5pZmVzdFwiXG4gICAgKG1hbmlmZXN0TW9kaWZpZWQpPVwibWFuaWZlc3RNb2RpZmllZC5lbWl0KCRldmVudClcIlxuICAgICNoZWFkZXJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgIFtkYXRhc291cmNlSWRzXT1cIihkYXRhc291cmNlSWRzJCB8IGFzeW5jKSA/PyBbXVwiXG4gID5cbiAgICA8cHJ5LXNldHRpbmdzXG4gICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICAoY2hhbmdlVGl0bGUpPVwiY2hhbmdlV2lkZ2V0VGl0bGUoJGV2ZW50KVwiXG4gICAgICBbaGVhZGVyUHJlc2VudF09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbaGVhZGVyXT1cImhlYWRlclwiXG4gICAgICBbb3BlbiRdPVwib3BlbiRcIlxuICAgICAgY2xhc3M9XCJvLXNldHRpbmdzXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fZmllbGRzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwicHJpbWFyeVByb3BcIj57eyAnQHByeS53aWRnZXQuYW5hbHl0aWMucHJpbWFyeVByb3AnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZSgkZXZlbnQsICdwcmltYXJ5UHJvcCcpXCJcbiAgICAgICAgICAgIFtpdGVtc109XCJhdmFpbGFibGVQcm9wZXJ0aWVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnByaW1hcnlQcm9wXCJcbiAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICBpZD1cInByaW1hcnlQcm9wXCJcbiAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJzZWNvbmRhcnlQcm9wXCI+e3sgJ0Bwcnkud2lkZ2V0LmFuYWx5dGljLnNlY29uZGFyeVByb3AnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZSgkZXZlbnQsICdzZWNvbmRhcnlQcm9wJylcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cImF2YWlsYWJsZVByb3BlcnRpZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuc2Vjb25kYXJ5UHJvcFwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgaWQ9XCJzZWNvbmRhcnlQcm9wXCJcbiAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwidmVydGljYWxQcm9wXCI+e3sgJ0Bwcnkud2lkZ2V0LmFuYWx5dGljLnZlcnRpY2FsUHJvcCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlKCRldmVudCwgJ3ZlcnRpY2FsUHJvcCcpXCJcbiAgICAgICAgICAgIFtpdGVtc109XCJhdmFpbGFibGVQcm9wZXJ0aWVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnZlcnRpY2FsUHJvcFwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgaWQ9XCJ2ZXJ0aWNhbFByb3BcIlxuICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInZhbHVlUHJvcFwiPnt7ICdAcHJ5LndpZGdldC5hbmFseXRpYy52YWx1ZVByb3AnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZSgkZXZlbnQsICd2YWx1ZVByb3AnKVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwiYXZhaWxhYmxlUHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS52YWx1ZVByb3BcIlxuICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgIGlkPVwidmFsdWVQcm9wXCJcbiAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlQ29sb3JDb25maWcoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIiEhb3B0aW9uc0NvcHkuY29sb3JDb25maWdcIj5cbiAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5hbmFseXRpYy5jb2xvckNvbmZpZycgfCBpMThuIH19XG4gICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgQGlmIChvcHRpb25zQ29weS5jb2xvckNvbmZpZykge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY29sb3JQcm9wXCI+e3sgJ0Bwcnkud2lkZ2V0LmFuYWx5dGljLmNvbG9yUHJvcCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDb2xvckNvbmZpZygkZXZlbnQsICdwcm9wJylcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJhdmFpbGFibGVQcm9wZXJ0aWVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5jb2xvckNvbmZpZy5wcm9wXCJcbiAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBpZD1cImNvbG9yUHJvcFwiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNvbG9yUHJvcFwiPnt7ICdAcHJ5LndpZGdldC5hbmFseXRpYy5jb2xvcnMnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm8td2lkZ2V0X19hbmFseXRpY19fY29sb3ItcGlja2VyLWNvbnRhaW5lciB1LWRpc3BsYXktZmxleCAtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAZm9yIChjb2xvciBvZiBvcHRpb25zQ29weS5jb2xvckNvbmZpZy5jb2xvcnM7IHRyYWNrIGNvbG9yOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0X19hbmFseXRpY19fY29sb3ItcGlja2VyXCIgY2RrRHJhZz5cbiAgICAgICAgICAgICAgICAgICAgPHByeS1jb2xvci1waWNrZXJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJjb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwibW9kaWZ5Q29sb3JTY2hlbWUoJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgID48L3ByeS1jb2xvci1waWNrZXI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInJlbW92ZUNvbG9yKGkpXCIgY2xhc3M9XCJvLXdpZGdldF9fYW5hbHl0aWNfX2NvbG9yLXBpY2tlci1yZW1vdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImNsb3NlXCIgW2hlaWdodF09XCIxNVwiIFt3aWR0aF09XCIxNVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpjZGtEcmFnUHJldmlldz5cbiAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWNvbG9yLXBpY2tlciBbbmdNb2RlbF09XCJjb2xvclwiPjwvcHJ5LWNvbG9yLXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHkgby13aWRnZXRfX2FuYWx5dGljX19jb2xvci1waWNrZXItYWRkXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb2RpZnlDb2xvclNjaGVtZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImFkZFwiIFtoZWlnaHRdPVwiMjBcIiBbd2lkdGhdPVwiMjBcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZUZvcm1hdCgkZXZlbnQpXCIgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5mb3JtYXRcIj5cbiAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5hbmFseXRpYy5mb3JtYXQnIHwgaTE4biB9fVxuICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIEBpZiAob3B0aW9uc0NvcHkuZm9ybWF0KSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJmb3JtYXRcIj57eyAnQHByeS53aWRnZXQuYW5hbHl0aWMuc3VmZml4JyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgIGlkPVwiZm9ybWF0XCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5mb3JtYXQuc3VmZml4XCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VGb3JtYXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9wcnktc2V0dGluZ3M+XG4gIDwvcHJ5LXdpZGdldC1oZWFkZXI+XG4gIDxkaXYgY2xhc3M9XCJvLXdpZGdldF9fYW5hbHl0aWNfX3RhYmxlXCI+XG4gICAgPHRhYmxlIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVpZ2h0JCB8IGFzeW5jXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0ciBjbGFzcz1cInByaW1hcnktaGVhZGVyXCI+XG4gICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgQGZvciAocHJpbWFyeSBvZiBwcmltYXJ5UHJvcGVydHkkIHwgYXN5bmM7IHRyYWNrIHByaW1hcnkpIHtcbiAgICAgICAgICAgIDx0aCBbY29sU3Bhbl09XCIoc2Vjb25kYXJ5UHJvcGVydHkkIHwgYXN5bmMpPy5sZW5ndGggPz8gMVwiPlxuICAgICAgICAgICAgICB7eyBwcmltYXJ5IH19XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90cj5cbiAgICAgICAgQGlmIChvcHRpb25zQ29weS5zZWNvbmRhcnlQcm9wKSB7XG4gICAgICAgICAgPHRyIGNsYXNzPVwic2Vjb25kYXJ5LWhlYWRlclwiPlxuICAgICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgICBAZm9yIChwcmltYXJ5IG9mIHByaW1hcnlQcm9wZXJ0eSQgfCBhc3luYzsgdHJhY2sgcHJpbWFyeSkge1xuICAgICAgICAgICAgICBAZm9yIChzZWNvbmRhcnkgb2Ygc2Vjb25kYXJ5UHJvcGVydHkkIHwgYXN5bmM7IHRyYWNrIHNlY29uZGFyeSkge1xuICAgICAgICAgICAgICAgIDx0aD57eyBzZWNvbmRhcnkgfX08L3RoPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgfVxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgQGZvciAobGluZSBvZiBsaW5lcyQgfCBhc3luYzsgdHJhY2sgbGluZS5uYW1lKSB7XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoPnt7IGxpbmUubmFtZSB9fTwvdGg+XG4gICAgICAgICAgICBAZm9yIChwcmltYXJ5IG9mIHByaW1hcnlQcm9wZXJ0eSQgfCBhc3luYzsgdHJhY2sgcHJpbWFyeSkge1xuICAgICAgICAgICAgICBAaWYgKG9wdGlvbnNDb3B5LnNlY29uZGFyeVByb3ApIHtcbiAgICAgICAgICAgICAgICBAZm9yIChzZWNvbmRhcnkgb2Ygc2Vjb25kYXJ5UHJvcGVydHkkIHwgYXN5bmM7IHRyYWNrIHNlY29uZGFyeSkge1xuICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNDb3B5LmNvbG9yQ29uZmlnID8geyAnYmFja2dyb3VuZC1jb2xvcic6IChjb2xvck1hcCQgfCBhc3luYyk/LltsaW5lLm5hbWVdPy5bcHJpbWFyeV0gfSA6IHt9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IGxpbmUudmFsdWVbcHJpbWFyeV1bc2Vjb25kYXJ5XSB8IGRhdGFGb3JtYXQ6IHRydWUgOiBvcHRpb25zQ29weS5mb3JtYXQ/LnN1ZmZpeFxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNDb3B5LmNvbG9yQ29uZmlnID8geyAnYmFja2dyb3VuZC1jb2xvcic6IChjb2xvck1hcCQgfCBhc3luYyk/LltsaW5lLm5hbWVdPy5bcHJpbWFyeV0gfSA6IHt9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGxpbmUudmFsdWVbcHJpbWFyeV0gfCBkYXRhRm9ybWF0OiB0cnVlIDogb3B0aW9uc0NvcHkuZm9ybWF0Py5zdWZmaXggfX1cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgfVxuICAgICAgPC90Ym9keT5cbiAgICAgIDx0Zm9vdD5cbiAgICAgICAgQGZvciAobGluZSBvZiB0b3RhbHMkIHwgYXN5bmM7IHRyYWNrIGxpbmUubmFtZSkge1xuICAgICAgICAgIDx0ciBjbGFzcz1cInBhcnRpYWwtdG90YWxcIj5cbiAgICAgICAgICAgIDx0aD57eyBsaW5lLm5hbWUgfX08L3RoPlxuICAgICAgICAgICAgQGZvciAocHJpbWFyeSBvZiBwcmltYXJ5UHJvcGVydHkkIHwgYXN5bmM7IHRyYWNrIHByaW1hcnkpIHtcbiAgICAgICAgICAgICAgQGZvciAoc2Vjb25kYXJ5IG9mIHNlY29uZGFyeVByb3BlcnR5JCB8IGFzeW5jOyB0cmFjayBzZWNvbmRhcnkpIHtcbiAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICB7eyBsaW5lLnZhbHVlW3ByaW1hcnldW3NlY29uZGFyeV0gfX1cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChsaW5lIG9mIGdyYW5kVG90YWxzJCB8IGFzeW5jOyB0cmFjayBsaW5lLm5hbWUpIHtcbiAgICAgICAgICA8dHIgY2xhc3M9XCJncmFuZC10b3RhbFwiPlxuICAgICAgICAgICAgPHRoPnt7IGxpbmUubmFtZSB9fTwvdGg+XG4gICAgICAgICAgICBAZm9yIChwcmltYXJ5IG9mIHByaW1hcnlQcm9wZXJ0eSQgfCBhc3luYzsgdHJhY2sgcHJpbWFyeSkge1xuICAgICAgICAgICAgICA8dGQgW2NvbFNwYW5dPVwiKHNlY29uZGFyeVByb3BlcnR5JCB8IGFzeW5jKT8ubGVuZ3RoID8/IDFcIj5cbiAgICAgICAgICAgICAgICB7eyBsaW5lLnZhbHVlW3ByaW1hcnldIH19XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgfVxuICAgICAgPC90Zm9vdD5cbiAgICA8L3RhYmxlPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19