desy-angular 9.1.0 → 10.0.0

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 (81) hide show
  1. package/esm2022/lib/desy-buttons/components/button/button.component.mjs +3 -3
  2. package/esm2022/lib/desy-buttons/components/listbox/listbox.component.mjs +3 -3
  3. package/esm2022/lib/desy-forms/components/search-bar/search-bar.component.mjs +3 -3
  4. package/esm2022/lib/desy-modals/components/dialog/dialog.component.mjs +3 -3
  5. package/esm2022/lib/desy-modals/components/modal/modal.component.mjs +3 -3
  6. package/esm2022/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.mjs +5 -3
  7. package/esm2022/lib/desy-nav/components/footer/footer.component.mjs +5 -3
  8. package/esm2022/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.mjs +3 -3
  9. package/esm2022/lib/desy-nav/components/header/header-navigation/header-navigation.component.mjs +4 -5
  10. package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.mjs +3 -3
  11. package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.mjs +3 -3
  12. package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.mjs +6 -6
  13. package/esm2022/lib/desy-nav/components/header/header.component.mjs +1 -1
  14. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-custom-navigation/header-custom-navigation.component.mjs +14 -0
  15. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-dropdown/header-advanced-dropdown.component.mjs +38 -0
  16. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-logo/header-advanced-logo.component.mjs +33 -0
  17. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.mjs +38 -0
  18. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-subtitle/header-advanced-subtitle.component.mjs +14 -0
  19. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.mjs +38 -0
  20. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-title/header-advanced-title.component.mjs +19 -0
  21. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-title-container/header-advanced-title-container.component.mjs +34 -0
  22. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced.component.mjs +53 -0
  23. package/esm2022/lib/desy-nav/components/header-mini/header-mini.component.mjs +31 -0
  24. package/esm2022/lib/desy-nav/components/links-list/links-list.component.mjs +4 -6
  25. package/esm2022/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.mjs +4 -7
  26. package/esm2022/lib/desy-nav/components/menu-navigation/menu-navigation.component.mjs +31 -29
  27. package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical.component.mjs +9 -21
  28. package/esm2022/lib/desy-nav/components/menubar/menubar.component.mjs +8 -8
  29. package/esm2022/lib/desy-nav/components/nav/nav-item/nav-item.component.mjs +1 -1
  30. package/esm2022/lib/desy-nav/components/nav/nav.component.mjs +6 -7
  31. package/esm2022/lib/desy-nav/components/notification/notification.component.mjs +3 -3
  32. package/esm2022/lib/desy-nav/desy-nav.module.mjs +94 -39
  33. package/esm2022/lib/desy-nav/directives/dynamic-heading.directive.mjs +40 -0
  34. package/esm2022/lib/desy-nav/interfaces/header-advanced-logo.mjs +7 -0
  35. package/esm2022/lib/desy-pagination/components/pagination/pagination.component.mjs +47 -5
  36. package/esm2022/lib/desy-tables/components/table/components/table-footer.component.mjs +18 -0
  37. package/esm2022/lib/desy-tables/components/table/table.component.mjs +26 -6
  38. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-footer-cell.component.mjs +23 -0
  39. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-footer.component.mjs +27 -0
  40. package/esm2022/lib/desy-tables/components/table-advanced/table-advanced.component.mjs +14 -5
  41. package/esm2022/lib/desy-tables/desy-tables.module.mjs +29 -14
  42. package/esm2022/lib/desy-views/components/accordion/accordion.component.mjs +4 -9
  43. package/esm2022/lib/desy-views/components/accordion-history/accordion-history.component.mjs +3 -3
  44. package/esm2022/lib/desy-views/components/card/card.component.mjs +3 -3
  45. package/esm2022/lib/desy-views/components/tabs/tabs.component.mjs +3 -3
  46. package/esm2022/public-api.mjs +94 -79
  47. package/fesm2022/desy-angular.mjs +3247 -2786
  48. package/fesm2022/desy-angular.mjs.map +1 -1
  49. package/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.d.ts +2 -1
  50. package/lib/desy-nav/components/footer/footer.component.d.ts +2 -1
  51. package/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.d.ts +2 -2
  52. package/lib/desy-nav/components/header/header-navigation/header-navigation.component.d.ts +2 -2
  53. package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.d.ts +1 -1
  54. package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.d.ts +1 -1
  55. package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.d.ts +2 -2
  56. package/lib/desy-nav/components/header-advanced/header-advanced-custom-navigation/header-custom-navigation.component.d.ts +5 -0
  57. package/lib/desy-nav/components/header-advanced/header-advanced-dropdown/header-advanced-dropdown.component.d.ts +14 -0
  58. package/lib/desy-nav/components/header-advanced/header-advanced-logo/header-advanced-logo.component.d.ts +14 -0
  59. package/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.d.ts +17 -0
  60. package/lib/desy-nav/components/header-advanced/header-advanced-subtitle/header-advanced-subtitle.component.d.ts +6 -0
  61. package/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.d.ts +17 -0
  62. package/lib/desy-nav/components/header-advanced/header-advanced-title/header-advanced-title.component.d.ts +8 -0
  63. package/lib/desy-nav/components/header-advanced/header-advanced-title-container/header-advanced-title-container.component.d.ts +15 -0
  64. package/lib/desy-nav/components/header-advanced/header-advanced.component.d.ts +16 -0
  65. package/lib/desy-nav/components/header-mini/header-mini.component.d.ts +12 -0
  66. package/lib/desy-nav/components/menu-navigation/menu-navigation.component.d.ts +4 -2
  67. package/lib/desy-nav/components/menubar/menubar.component.d.ts +4 -4
  68. package/lib/desy-nav/components/nav/nav-item/nav-item.component.d.ts +1 -1
  69. package/lib/desy-nav/components/nav/nav.component.d.ts +2 -1
  70. package/lib/desy-nav/desy-nav.module.d.ts +40 -29
  71. package/lib/desy-nav/directives/dynamic-heading.directive.d.ts +15 -0
  72. package/lib/desy-nav/interfaces/header-advanced-logo.d.ts +5 -0
  73. package/lib/desy-pagination/components/pagination/pagination.component.d.ts +14 -2
  74. package/lib/desy-tables/components/table/components/table-footer.component.d.ts +8 -0
  75. package/lib/desy-tables/components/table/table.component.d.ts +7 -3
  76. package/lib/desy-tables/components/table-advanced/components/table-advanced-footer-cell.component.d.ts +11 -0
  77. package/lib/desy-tables/components/table-advanced/components/table-advanced-footer.component.d.ts +11 -0
  78. package/lib/desy-tables/components/table-advanced/table-advanced.component.d.ts +10 -6
  79. package/lib/desy-tables/desy-tables.module.d.ts +19 -16
  80. package/package.json +2 -2
  81. package/public-api.d.ts +93 -78
@@ -116,11 +116,11 @@ export class DialogComponent extends AccessibilityComponent {
116
116
  }
117
117
  }
118
118
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DialogComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ConfigurableFocusTrapFactory }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Component }); }
119
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DialogComponent, selector: "desy-dialog", inputs: { active: "active", id: "id", caller: "caller", focusOnClose: "focusOnClose", dismissOnBackdrop: "dismissOnBackdrop", classes: "classes", focusOnShow: "focusOnShow" }, outputs: { activeChange: "activeChange" }, host: { listeners: { "document:keyup": "onKeyUp($event)" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }, { propertyName: "focusTrapWrapper", first: true, predicate: ["focusTrapWrapper"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"dialog-backdrop\" [ngClass]=\"{'active': active}\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"ariaLabelledBy ? ariaLabelledBy : null\"\n [attr.aria-hidden]=\"ariaHidden ? ariaHidden : null\"\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\n [attr.aria-controls]=\"ariaControls ? ariaControls : null\"\n [attr.aria-current]=\"ariaCurrent ? ariaCurrent : null\"\n [attr.aria-live]=\"ariaLive ? ariaLive : null\"\n [attr.aria-expanded]=\"ariaExpanded ? ariaExpanded : null\"\n [attr.aria-errormessage]=\"ariaErrorMessage ? ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"ariaHasPopup ? ariaHasPopup : null\"\n [attr.aria-modal]=\"ariaModal ? ariaModal : null\">\n\n <div #focusTrapWrapper [id]=\"id\" [class]=\"classes\"\n [desyClickOutside]=\"clickOutsideEnabled\" (clickOutside)=\"handleClickOutside()\" [desyClickOutsideElem]=\"childElem\">\n <ng-template #container></ng-template>\n <ng-container *ngTemplateOutlet=\"caller\"></ng-container>\n </div>\n</div>", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.ClickOutsideDirective, selector: "[desyClickOutside]", inputs: ["desyClickOutside", "desyClickOutsideElem"], outputs: ["clickOutside"] }] }); }
119
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DialogComponent, selector: "desy-dialog", inputs: { active: "active", id: "id", caller: "caller", focusOnClose: "focusOnClose", dismissOnBackdrop: "dismissOnBackdrop", classes: "classes", focusOnShow: "focusOnShow" }, outputs: { activeChange: "activeChange" }, host: { listeners: { "document:keyup": "onKeyUp($event)" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }, { propertyName: "focusTrapWrapper", first: true, predicate: ["focusTrapWrapper"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"dialog-backdrop\" [ngClass]=\"{'active': active}\"\n [id]=\"id\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"ariaLabelledBy ? ariaLabelledBy : null\"\n [attr.aria-hidden]=\"ariaHidden ? ariaHidden : null\"\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\n [attr.aria-controls]=\"ariaControls ? ariaControls : null\"\n [attr.aria-current]=\"ariaCurrent ? ariaCurrent : null\"\n [attr.aria-live]=\"ariaLive ? ariaLive : null\"\n [attr.aria-expanded]=\"ariaExpanded ? ariaExpanded : null\"\n [attr.aria-errormessage]=\"ariaErrorMessage ? ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"ariaHasPopup ? ariaHasPopup : null\"\n [attr.aria-modal]=\"ariaModal ? ariaModal : null\">\n\n <div #focusTrapWrapper [id]=\"id\" [class]=\"classes\"\n [desyClickOutside]=\"clickOutsideEnabled\" (clickOutside)=\"handleClickOutside()\" [desyClickOutsideElem]=\"childElem\">\n <ng-template #container></ng-template>\n <ng-container *ngTemplateOutlet=\"caller\"></ng-container>\n </div>\n</div>", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.ClickOutsideDirective, selector: "[desyClickOutside]", inputs: ["desyClickOutside", "desyClickOutsideElem"], outputs: ["clickOutside"] }] }); }
120
120
  }
121
121
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DialogComponent, decorators: [{
122
122
  type: Component,
123
- args: [{ selector: 'desy-dialog', template: "<div class=\"dialog-backdrop\" [ngClass]=\"{'active': active}\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"ariaLabelledBy ? ariaLabelledBy : null\"\n [attr.aria-hidden]=\"ariaHidden ? ariaHidden : null\"\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\n [attr.aria-controls]=\"ariaControls ? ariaControls : null\"\n [attr.aria-current]=\"ariaCurrent ? ariaCurrent : null\"\n [attr.aria-live]=\"ariaLive ? ariaLive : null\"\n [attr.aria-expanded]=\"ariaExpanded ? ariaExpanded : null\"\n [attr.aria-errormessage]=\"ariaErrorMessage ? ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"ariaHasPopup ? ariaHasPopup : null\"\n [attr.aria-modal]=\"ariaModal ? ariaModal : null\">\n\n <div #focusTrapWrapper [id]=\"id\" [class]=\"classes\"\n [desyClickOutside]=\"clickOutsideEnabled\" (clickOutside)=\"handleClickOutside()\" [desyClickOutsideElem]=\"childElem\">\n <ng-template #container></ng-template>\n <ng-container *ngTemplateOutlet=\"caller\"></ng-container>\n </div>\n</div>" }]
123
+ args: [{ selector: 'desy-dialog', template: "<div class=\"dialog-backdrop\" [ngClass]=\"{'active': active}\"\n [id]=\"id\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"ariaLabelledBy ? ariaLabelledBy : null\"\n [attr.aria-hidden]=\"ariaHidden ? ariaHidden : null\"\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\n [attr.aria-controls]=\"ariaControls ? ariaControls : null\"\n [attr.aria-current]=\"ariaCurrent ? ariaCurrent : null\"\n [attr.aria-live]=\"ariaLive ? ariaLive : null\"\n [attr.aria-expanded]=\"ariaExpanded ? ariaExpanded : null\"\n [attr.aria-errormessage]=\"ariaErrorMessage ? ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"ariaHasPopup ? ariaHasPopup : null\"\n [attr.aria-modal]=\"ariaModal ? ariaModal : null\">\n\n <div #focusTrapWrapper [id]=\"id\" [class]=\"classes\"\n [desyClickOutside]=\"clickOutsideEnabled\" (clickOutside)=\"handleClickOutside()\" [desyClickOutsideElem]=\"childElem\">\n <ng-template #container></ng-template>\n <ng-container *ngTemplateOutlet=\"caller\"></ng-container>\n </div>\n</div>" }]
124
124
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.ConfigurableFocusTrapFactory }, { type: i0.ComponentFactoryResolver }]; }, propDecorators: { container: [{
125
125
  type: ViewChild,
126
126
  args: ['container', { read: ViewContainerRef }]
@@ -147,4 +147,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
147
147
  type: HostListener,
148
148
  args: ['document:keyup', ['$event']]
149
149
  }] } });
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc3ktYW5ndWxhci9zcmMvbGliL2Rlc3ktbW9kYWxzL2NvbXBvbmVudHMvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW1vZGFscy9jb21wb25lbnRzL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBR1osS0FBSyxFQUNMLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUVYLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sWUFBWSxFQUFnQixVQUFVLEVBQVEsd0JBQXdCLEVBQ3ZFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBeUIsNEJBQTRCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7O0FBRS9ELElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBT3pCLE1BQU0sT0FBTyxlQUFnQixTQUFRLHNCQUFzQjthQUV6QyxzQkFBaUIsR0FBRyxZQUFZLENBQUM7YUFDakMsaUJBQVksR0FBRyxRQUFRLENBQUM7SUF1QnhDLFlBQW9CLEtBQXdCLEVBQ3hCLGdCQUE4QyxFQUM5QyxlQUF5QztRQUMzRCxLQUFLLEVBQUUsQ0FBQztRQUhVLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBOEI7UUFDOUMsb0JBQWUsR0FBZixlQUFlLENBQTBCO1FBbkJuRCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7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QkFDRCxJQUFJLFNBQVMsRUFBRTtvQkFDYixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7aUJBQ3JDO2dCQUNELGdCQUFnQixFQUFFLENBQUM7YUFDcEI7WUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMxRDtJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQzsrR0ExSVUsZUFBZTttR0FBZixlQUFlLCtaQUtLLGdCQUFnQixnTEM5QmpELDJyQ0FvQk07OzRGREtPLGVBQWU7a0JBSjNCLFNBQVM7K0JBQ0UsYUFBYTswTEFRMkIsU0FBUztzQkFBMUQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUM7Z0JBQ2pCLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBRXBCLE1BQU07c0JBQWQsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNO2dCQUVFLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBb0VOLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSG9zdExpc3RlbmVyLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgSW5wdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlciwgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBUeXBlLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY2Nlc3NpYmlsaXR5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQ29uZmlndXJhYmxlRm9jdXNUcmFwLCBDb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRm9jdXNVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9mb2N1cy11dGlscyc7XG5cbmxldCBudW1EaWFsb2dzT3BlbmVkID0gMDtcbnR5cGUgRGlhbG9nQ3JlYXRpb25DYWxsYmFjayA9ICgoZGlhbG9nOiBEaWFsb2dDb21wb25lbnQsIGNhbGxlcjogQ29tcG9uZW50UmVmPGFueT4pID0+IHZvaWQpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZXN5LWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kaWFsb2cuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERpYWxvZ0NvbXBvbmVudCBleHRlbmRzIEFjY2Vzc2liaWxpdHlDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgc3RhdGljIHJlYWRvbmx5IERJQUxPR19PUEVOX0NMQVNTID0gJ2hhcy1kaWFsb2cnO1xuICBzdGF0aWMgcmVhZG9ubHkgS0VZX0NPREVfRVNDID0gJ0VzY2FwZSc7XG5cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywge3JlYWQ6IFZpZXdDb250YWluZXJSZWZ9KSBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG4gIEBWaWV3Q2hpbGQoJ2ZvY3VzVHJhcFdyYXBwZXInKSBmb2N1c1RyYXBXcmFwcGVyOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIGFjdGl2ZTogYm9vbGVhbjtcbiAgQE91dHB1dCgpIGFjdGl2ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBASW5wdXQoKSBpZDogYW55O1xuICBASW5wdXQoKSBjYWxsZXI6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGZvY3VzT25DbG9zZTogc3RyaW5nfEhUTUxFbGVtZW50O1xuICBASW5wdXQoKSBkaXNtaXNzT25CYWNrZHJvcDogYm9vbGVhbjtcbiAgQElucHV0KCkgY2xhc3Nlczogc3RyaW5nO1xuICBASW5wdXQoKSBmb2N1c09uU2hvdzogc3RyaW5nfEhUTUxFbGVtZW50O1xuICBcbiAgcHVibGljIGNhbGxlclR5cGU6IFR5cGU8YW55PjtcbiAgcHVibGljIG9uQ2FsbGVyQ3JlYXRpb25DYWxsYmFjazogRGlhbG9nQ3JlYXRpb25DYWxsYmFjaztcblxuICBsYXN0QWN0aXZlU3RhdGUgPSBmYWxzZTtcbiAgZm9jdXNUcmFwOiBDb25maWd1cmFibGVGb2N1c1RyYXA7XG4gIGNsaWNrT3V0c2lkZUVuYWJsZWQgPSBmYWxzZTtcbiAgY2hpbGRFbGVtOiBFbGVtZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIGZvY3VzVHJhcEZhY3Rvcnk6IENvbmZpZ3VyYWJsZUZvY3VzVHJhcEZhY3RvcnksXG4gICAgICAgICAgICAgIHByaXZhdGUgZmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9jdXNUcmFwV3JhcHBlcikge1xuICAgICAgdGhpcy5oYW5kbGVBY3RpdmVTdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBcbiAgICBpZiAodGhpcy5jYWxsZXJUeXBlKSB7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy5jYWxsZXJUeXBlKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5KTtcbiAgICAgIGlmICh0aGlzLm9uQ2FsbGVyQ3JlYXRpb25DYWxsYmFjaykge1xuICAgICAgICB0aGlzLm9uQ2FsbGVyQ3JlYXRpb25DYWxsYmFjayh0aGlzLCBjb21wb25lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmZvY3VzVHJhcFdyYXBwZXIubmF0aXZlRWxlbWVudC5jaGlsZHJlbiAmJiB0aGlzLmZvY3VzVHJhcFdyYXBwZXIubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuY2hpbGRFbGVtID0gdGhpcy5mb2N1c1RyYXBXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF07XG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVBY3RpdmVTdGF0ZSgpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGxldCBmb2N1c0VsZW06IEhUTUxFbGVtZW50O1xuICAgIGlmICh0aGlzLmZvY3VzT25TaG93KSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuZm9jdXNPblNob3cgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGZvY3VzRWxlbSA9IHRoaXMuZm9jdXNUcmFwV3JhcHBlci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyMnICsgdGhpcy5mb2N1c09uU2hvdykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb2N1c0VsZW0gPSB0aGlzLmZvY3VzT25TaG93O1xuICAgICAgfVxuICAgIH0gXG4gICAgbGV0IGZvY3VzZWQ6IEhUTUxFbGVtZW50O1xuICAgIGZvY3VzZWQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGZvY3VzZWQuYmx1cigpO1xuICAgIGlmIChmb2N1c0VsZW0pIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge2ZvY3VzRWxlbS5mb2N1cygpfSk7XG4gICAgfWVsc2V7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtGb2N1c1V0aWxzLmdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudCh0aGlzLmNoaWxkRWxlbSBhcyBIVE1MRWxlbWVudCkuZm9jdXMoKX0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5oYW5kbGVBY3RpdmVTdGF0ZSgpO1xuICB9XG5cblxuICBwdWJsaWMgZGlzbWlzcygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxuXG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAnLCBbJyRldmVudCddKVxuICBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gRGlhbG9nQ29tcG9uZW50LktFWV9DT0RFX0VTQykge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmRpc21pc3MoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVBY3RpdmVTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZm9jdXNUcmFwKSB7XG4gICAgICB0aGlzLmZvY3VzVHJhcCA9IHRoaXMuZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5mb2N1c1RyYXBXcmFwcGVyLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFjdGl2ZSAhPT0gdGhpcy5sYXN0QWN0aXZlU3RhdGUpIHtcbiAgICAgIHRoaXMubGFzdEFjdGl2ZVN0YXRlID0gdGhpcy5hY3RpdmU7XG5cbiAgICAgIC8vIEhhYmlsaXRhci9kZXNoYWJpbGl0YXIgc2Nyb2xsXG4gICAgICBpZiAodGhpcy5hY3RpdmUgJiYgbnVtRGlhbG9nc09wZW5lZCA9PT0gMCkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoRGlhbG9nQ29tcG9uZW50LkRJQUxPR19PUEVOX0NMQVNTKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuYWN0aXZlICYmIG51bURpYWxvZ3NPcGVuZWQgPT09IDEpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKERpYWxvZ0NvbXBvbmVudC5ESUFMT0dfT1BFTl9DTEFTUyk7XG4gICAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50KCkpO1xuICAgICAgICBudW1EaWFsb2dzT3BlbmVkKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgZm9jdXNFbGVtOiBIVE1MRWxlbWVudDtcbiAgICAgICAgdGhpcy5mb2N1c1RyYXAuZGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5mb2N1c09uQ2xvc2UpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZm9jdXNPbkNsb3NlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZm9jdXNFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5mb2N1c09uQ2xvc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb2N1c0VsZW0gPSB0aGlzLmZvY3VzT25DbG9zZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9jdXNFbGVtID0gRm9jdXNVdGlscy5nZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9jdXNFbGVtKSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBmb2N1c0VsZW0uZm9jdXMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgbnVtRGlhbG9nc09wZW5lZC0tO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2xpY2tPdXRzaWRlRW5hYmxlZCA9IHRoaXMuYWN0aXZlKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDbGlja091dHNpZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzbWlzc09uQmFja2Ryb3ApIHtcbiAgICAgIHRoaXMuZGlzbWlzcygpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRpYWxvZy1iYWNrZHJvcFwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYWN0aXZlfVwiXG4gICAgIFthdHRyLnJvbGVdPVwicm9sZSA/IHJvbGUgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgPyBhcmlhTGFiZWwgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVkQnkgPyBhcmlhRGVzY3JpYmVkQnkgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5ID8gYXJpYUxhYmVsbGVkQnkgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiYXJpYUhpZGRlbiA/IGFyaWFIaWRkZW4gOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJhcmlhRGlzYWJsZWQgPyBhcmlhRGlzYWJsZWQgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJhcmlhQ29udHJvbHMgPyBhcmlhQ29udHJvbHMgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cImFyaWFDdXJyZW50ID8gYXJpYUN1cnJlbnQgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1saXZlXT1cImFyaWFMaXZlID8gYXJpYUxpdmUgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJhcmlhRXhwYW5kZWQgPyBhcmlhRXhwYW5kZWQgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2VdPVwiYXJpYUVycm9yTWVzc2FnZSA/IGFyaWFFcnJvck1lc3NhZ2UgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJhcmlhSGFzUG9wdXAgPyBhcmlhSGFzUG9wdXAgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1tb2RhbF09XCJhcmlhTW9kYWwgPyBhcmlhTW9kYWwgOiBudWxsXCI+XG5cbiAgICA8ZGl2ICNmb2N1c1RyYXBXcmFwcGVyIFtpZF09XCJpZFwiIFtjbGFzc109XCJjbGFzc2VzXCJcbiAgICAgICAgW2Rlc3lDbGlja091dHNpZGVdPVwiY2xpY2tPdXRzaWRlRW5hYmxlZFwiIChjbGlja091dHNpZGUpPVwiaGFuZGxlQ2xpY2tPdXRzaWRlKClcIiBbZGVzeUNsaWNrT3V0c2lkZUVsZW1dPVwiY2hpbGRFbGVtXCI+XG4gICAgICA8bmctdGVtcGxhdGUgI2NvbnRhaW5lcj48L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhbGxlclwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc3ktYW5ndWxhci9zcmMvbGliL2Rlc3ktbW9kYWxzL2NvbXBvbmVudHMvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW1vZGFscy9jb21wb25lbnRzL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBR1osS0FBSyxFQUNMLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUVYLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sWUFBWSxFQUFnQixVQUFVLEVBQVEsd0JBQXdCLEVBQ3ZFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBeUIsNEJBQTRCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7O0FBRS9ELElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBT3pCLE1BQU0sT0FBTyxlQUFnQixTQUFRLHNCQUFzQjthQUV6QyxzQkFBaUIsR0FBRyxZQUFZLENBQUM7YUFDakMsaUJBQVksR0FBRyxRQUFRLENBQUM7SUF1QnhDLFlBQW9CLEtBQXdCLEVBQ3hCLGdCQUE4QyxFQUM5QyxlQUF5QztRQUMzRCxLQUFLLEVBQUUsQ0FBQztRQUhVLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBOEI7UUFDOUMsb0JBQWUsR0FBZixlQUFlLENBQTBCO1FBbkJuRCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7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QkFDRCxJQUFJLFNBQVMsRUFBRTtvQkFDYixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7aUJBQ3JDO2dCQUNELGdCQUFnQixFQUFFLENBQUM7YUFDcEI7WUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMxRDtJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQzsrR0ExSVUsZUFBZTttR0FBZixlQUFlLCtaQUtLLGdCQUFnQixnTEM5QmpELDZzQ0FxQk07OzRGRElPLGVBQWU7a0JBSjNCLFNBQVM7K0JBQ0UsYUFBYTswTEFRMkIsU0FBUztzQkFBMUQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUM7Z0JBQ2pCLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBRXBCLE1BQU07c0JBQWQsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNO2dCQUVFLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBb0VOLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSG9zdExpc3RlbmVyLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgSW5wdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlciwgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBUeXBlLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY2Nlc3NpYmlsaXR5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQ29uZmlndXJhYmxlRm9jdXNUcmFwLCBDb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRm9jdXNVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9mb2N1cy11dGlscyc7XG5cbmxldCBudW1EaWFsb2dzT3BlbmVkID0gMDtcbnR5cGUgRGlhbG9nQ3JlYXRpb25DYWxsYmFjayA9ICgoZGlhbG9nOiBEaWFsb2dDb21wb25lbnQsIGNhbGxlcjogQ29tcG9uZW50UmVmPGFueT4pID0+IHZvaWQpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZXN5LWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kaWFsb2cuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERpYWxvZ0NvbXBvbmVudCBleHRlbmRzIEFjY2Vzc2liaWxpdHlDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgc3RhdGljIHJlYWRvbmx5IERJQUxPR19PUEVOX0NMQVNTID0gJ2hhcy1kaWFsb2cnO1xuICBzdGF0aWMgcmVhZG9ubHkgS0VZX0NPREVfRVNDID0gJ0VzY2FwZSc7XG5cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywge3JlYWQ6IFZpZXdDb250YWluZXJSZWZ9KSBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG4gIEBWaWV3Q2hpbGQoJ2ZvY3VzVHJhcFdyYXBwZXInKSBmb2N1c1RyYXBXcmFwcGVyOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIGFjdGl2ZTogYm9vbGVhbjtcbiAgQE91dHB1dCgpIGFjdGl2ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBASW5wdXQoKSBpZDogYW55O1xuICBASW5wdXQoKSBjYWxsZXI6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGZvY3VzT25DbG9zZTogc3RyaW5nfEhUTUxFbGVtZW50O1xuICBASW5wdXQoKSBkaXNtaXNzT25CYWNrZHJvcDogYm9vbGVhbjtcbiAgQElucHV0KCkgY2xhc3Nlczogc3RyaW5nO1xuICBASW5wdXQoKSBmb2N1c09uU2hvdzogc3RyaW5nfEhUTUxFbGVtZW50O1xuICBcbiAgcHVibGljIGNhbGxlclR5cGU6IFR5cGU8YW55PjtcbiAgcHVibGljIG9uQ2FsbGVyQ3JlYXRpb25DYWxsYmFjazogRGlhbG9nQ3JlYXRpb25DYWxsYmFjaztcblxuICBsYXN0QWN0aXZlU3RhdGUgPSBmYWxzZTtcbiAgZm9jdXNUcmFwOiBDb25maWd1cmFibGVGb2N1c1RyYXA7XG4gIGNsaWNrT3V0c2lkZUVuYWJsZWQgPSBmYWxzZTtcbiAgY2hpbGRFbGVtOiBFbGVtZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIGZvY3VzVHJhcEZhY3Rvcnk6IENvbmZpZ3VyYWJsZUZvY3VzVHJhcEZhY3RvcnksXG4gICAgICAgICAgICAgIHByaXZhdGUgZmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9jdXNUcmFwV3JhcHBlcikge1xuICAgICAgdGhpcy5oYW5kbGVBY3RpdmVTdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBcbiAgICBpZiAodGhpcy5jYWxsZXJUeXBlKSB7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy5jYWxsZXJUeXBlKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5KTtcbiAgICAgIGlmICh0aGlzLm9uQ2FsbGVyQ3JlYXRpb25DYWxsYmFjaykge1xuICAgICAgICB0aGlzLm9uQ2FsbGVyQ3JlYXRpb25DYWxsYmFjayh0aGlzLCBjb21wb25lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmZvY3VzVHJhcFdyYXBwZXIubmF0aXZlRWxlbWVudC5jaGlsZHJlbiAmJiB0aGlzLmZvY3VzVHJhcFdyYXBwZXIubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuY2hpbGRFbGVtID0gdGhpcy5mb2N1c1RyYXBXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF07XG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVBY3RpdmVTdGF0ZSgpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGxldCBmb2N1c0VsZW06IEhUTUxFbGVtZW50O1xuICAgIGlmICh0aGlzLmZvY3VzT25TaG93KSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuZm9jdXNPblNob3cgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGZvY3VzRWxlbSA9IHRoaXMuZm9jdXNUcmFwV3JhcHBlci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyMnICsgdGhpcy5mb2N1c09uU2hvdykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb2N1c0VsZW0gPSB0aGlzLmZvY3VzT25TaG93O1xuICAgICAgfVxuICAgIH0gXG4gICAgbGV0IGZvY3VzZWQ6IEhUTUxFbGVtZW50O1xuICAgIGZvY3VzZWQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGZvY3VzZWQuYmx1cigpO1xuICAgIGlmIChmb2N1c0VsZW0pIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge2ZvY3VzRWxlbS5mb2N1cygpfSk7XG4gICAgfWVsc2V7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtGb2N1c1V0aWxzLmdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudCh0aGlzLmNoaWxkRWxlbSBhcyBIVE1MRWxlbWVudCkuZm9jdXMoKX0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5oYW5kbGVBY3RpdmVTdGF0ZSgpO1xuICB9XG5cblxuICBwdWJsaWMgZGlzbWlzcygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxuXG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAnLCBbJyRldmVudCddKVxuICBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gRGlhbG9nQ29tcG9uZW50LktFWV9DT0RFX0VTQykge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmRpc21pc3MoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVBY3RpdmVTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZm9jdXNUcmFwKSB7XG4gICAgICB0aGlzLmZvY3VzVHJhcCA9IHRoaXMuZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5mb2N1c1RyYXBXcmFwcGVyLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFjdGl2ZSAhPT0gdGhpcy5sYXN0QWN0aXZlU3RhdGUpIHtcbiAgICAgIHRoaXMubGFzdEFjdGl2ZVN0YXRlID0gdGhpcy5hY3RpdmU7XG5cbiAgICAgIC8vIEhhYmlsaXRhci9kZXNoYWJpbGl0YXIgc2Nyb2xsXG4gICAgICBpZiAodGhpcy5hY3RpdmUgJiYgbnVtRGlhbG9nc09wZW5lZCA9PT0gMCkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoRGlhbG9nQ29tcG9uZW50LkRJQUxPR19PUEVOX0NMQVNTKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuYWN0aXZlICYmIG51bURpYWxvZ3NPcGVuZWQgPT09IDEpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKERpYWxvZ0NvbXBvbmVudC5ESUFMT0dfT1BFTl9DTEFTUyk7XG4gICAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50KCkpO1xuICAgICAgICBudW1EaWFsb2dzT3BlbmVkKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgZm9jdXNFbGVtOiBIVE1MRWxlbWVudDtcbiAgICAgICAgdGhpcy5mb2N1c1RyYXAuZGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5mb2N1c09uQ2xvc2UpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZm9jdXNPbkNsb3NlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZm9jdXNFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5mb2N1c09uQ2xvc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb2N1c0VsZW0gPSB0aGlzLmZvY3VzT25DbG9zZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9jdXNFbGVtID0gRm9jdXNVdGlscy5nZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9jdXNFbGVtKSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBmb2N1c0VsZW0uZm9jdXMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgbnVtRGlhbG9nc09wZW5lZC0tO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2xpY2tPdXRzaWRlRW5hYmxlZCA9IHRoaXMuYWN0aXZlKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDbGlja091dHNpZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzbWlzc09uQmFja2Ryb3ApIHtcbiAgICAgIHRoaXMuZGlzbWlzcygpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRpYWxvZy1iYWNrZHJvcFwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYWN0aXZlfVwiXG4gICAgIFtpZF09XCJpZFwiXG4gICAgIFthdHRyLnJvbGVdPVwicm9sZSA/IHJvbGUgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgPyBhcmlhTGFiZWwgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVkQnkgPyBhcmlhRGVzY3JpYmVkQnkgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5ID8gYXJpYUxhYmVsbGVkQnkgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiYXJpYUhpZGRlbiA/IGFyaWFIaWRkZW4gOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJhcmlhRGlzYWJsZWQgPyBhcmlhRGlzYWJsZWQgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJhcmlhQ29udHJvbHMgPyBhcmlhQ29udHJvbHMgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cImFyaWFDdXJyZW50ID8gYXJpYUN1cnJlbnQgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1saXZlXT1cImFyaWFMaXZlID8gYXJpYUxpdmUgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJhcmlhRXhwYW5kZWQgPyBhcmlhRXhwYW5kZWQgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2VdPVwiYXJpYUVycm9yTWVzc2FnZSA/IGFyaWFFcnJvck1lc3NhZ2UgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJhcmlhSGFzUG9wdXAgPyBhcmlhSGFzUG9wdXAgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1tb2RhbF09XCJhcmlhTW9kYWwgPyBhcmlhTW9kYWwgOiBudWxsXCI+XG5cbiAgICA8ZGl2ICNmb2N1c1RyYXBXcmFwcGVyIFtpZF09XCJpZFwiIFtjbGFzc109XCJjbGFzc2VzXCJcbiAgICAgICAgW2Rlc3lDbGlja091dHNpZGVdPVwiY2xpY2tPdXRzaWRlRW5hYmxlZFwiIChjbGlja091dHNpZGUpPVwiaGFuZGxlQ2xpY2tPdXRzaWRlKClcIiBbZGVzeUNsaWNrT3V0c2lkZUVsZW1dPVwiY2hpbGRFbGVtXCI+XG4gICAgICA8bmctdGVtcGxhdGUgI2NvbnRhaW5lcj48L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhbGxlclwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
@@ -105,7 +105,7 @@ export class ModalComponent extends AccessibilityComponent {
105
105
  return this.secondaryButtonLoaderComponents && this.secondaryButtonLoaderComponents.length > 0 ? this.secondaryButtonLoaderComponents.toArray() : this.itemsLoaderSecondary;
106
106
  }
107
107
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ModalComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
108
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ModalComponent, selector: "desy-modal", inputs: { title: "title", description: "description", itemsPrimary: "itemsPrimary", itemsSecondary: "itemsSecondary", itemsLoaderPrimary: "itemsLoaderPrimary", itemsLoaderSecondary: "itemsLoaderSecondary", icon: "icon", headingLevel: "headingLevel", isDismissible: "isDismissible", id: "id", classes: "classes", caller: "caller" }, outputs: { closeModal: "closeModal", clickButton: "clickButton" }, queries: [{ propertyName: "titleComponent", predicate: TitleComponent }, { propertyName: "descriptionComponent", predicate: DescriptionComponent }, { propertyName: "contentComponent", predicate: ContentComponent }, { propertyName: "primaryButtonComponents", predicate: ModalButtonPrimaryComponent }, { propertyName: "secondaryButtonComponents", predicate: ModalButtonSecondaryComponent }, { propertyName: "primaryButtonLoaderComponents", predicate: ModalButtonLoaderPrimaryComponent }, { propertyName: "secondaryButtonLoaderComponents", predicate: ModalButtonLoaderSecondaryComponent }, { propertyName: "iconComponent", predicate: IconComponent }], usesInheritance: true, ngImport: i0, template: "<div [class]=\"[ 'mt-16 sm:mt-0 relative max-w-lg mx-auto p-base lg:p-lg border border-neutral-base rounded bg-white', classes] | makeHtmlList\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role\"\n [attr.aria-describedby]=\"ariaDescribedBy\"\n [attr.aria-errormessage]=\"ariaErrorMessage\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-hidden]=\"ariaHidden\"\n [attr.aria-disabled]=\"ariaDisabled\"\n [attr.aria-controls]=\"ariaControls\"\n [attr.aria-current]=\"ariaCurrent\"\n [attr.aria-live]=\"ariaLive\"\n [attr.aria-expanded]=\"ariaExpanded\"\n [attr.aria-haspopup]=\"ariaHasPopup\"\n [attr.tabindex]=\"tabindex\">\n <div *ngIf=\"iconComponent || icon\" class=\"flex justify-center p-base\">\n <ng-container *desyCustomInnerContent=\"{ component: iconComponent, html: icon ? icon.html : null }\"></ng-container>\n <ng-container [ngSwitch]=\"iconComponent ? iconComponent.type : icon.type\">\n <svg *ngSwitchCase=\"'discard'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-alert-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"><path d=\"M4.375 70a65.625 65.625 0 10131.25 0 65.625 65.625 0 10-131.25 0zM23.596 116.404l92.808-92.808\" stroke-width=\"8.749995\"/></g></svg>\n <svg *ngSwitchCase=\"'delete'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-alert-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"><path d=\"M100.625 122.5h-61.25a8.75 8.75 0 01-8.75-8.75V35h78.75v78.75a8.75 8.75 0 01-8.75 8.75zM56.875 96.25v-35M83.125 96.25v-35M13.125 35h113.75M83.125 17.5h-26.25a8.75 8.75 0 00-8.75 8.75V35h43.75v-8.75a8.75 8.75 0 00-8.75-8.75z\" stroke-width=\"8.749995\"/></g></svg>\n <svg *ngSwitchCase=\"'edit'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-primary-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"><path d=\"M73.89 82.46l-21.652 3.098 3.091-21.66 55.685-55.685a13.125 13.125 0 0118.562 18.562z\" stroke-width=\"8.749995\"/><path d=\"M111.545 83.125v43.75a8.75 8.75 0 01-8.75 8.75h-87.5a8.75 8.75 0 01-8.75-8.75v-87.5a8.75 8.75 0 018.75-8.75h43.75\" stroke-width=\"8.749995\"/></g></svg>\n <svg *ngSwitchCase=\"'changes'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-primary-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"><path d=\"M107.112 40.833a48.125 48.125 0 00-85.237 30.608v13.142M35 104.463a48.125 48.125 0 0083.125-33.022v-8.75\" stroke-width=\"8.749995\"/><path d=\"M4.375 67.066l17.5 17.5 17.5-17.5M135.625 80.19l-17.5-17.5-17.5 17.5\" stroke-width=\"8.749995\"/></g></svg>\n <svg *ngSwitchCase=\"'publish'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-primary-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"><path d=\"M16.094 91.17a9.707 9.707 0 01-5.145-17.938L118.767 5.833a9.7 9.7 0 0114.676 10.034l-21 111.842a9.707 9.707 0 01-17.301 4.031L64.75 91.17z\" stroke-width=\"8.749995\"/><path d=\"M64.75 91.17H50.167v30.163a9.7 9.7 0 0015.166 8.015l18.539-12.635zM64.744 91.17l64.633-85.11\" stroke-width=\"8.749995\"/></g></svg>\n </ng-container>\n </div>\n\n <ng-container [ngSwitch]=\"headingLevel > 0 && headingLevel < 6 ? headingLevel : 2\">\n <h1 *ngSwitchCase=\"1\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h1>\n <h2 *ngSwitchCase=\"2\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h2>\n <h3 *ngSwitchCase=\"3\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h3>\n <h4 *ngSwitchCase=\"4\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h4>\n <h5 *ngSwitchCase=\"5\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h5>\n </ng-container>\n\n <div *ngIf=\"descriptionIsHtml\" [class]=\"getDescriptionClasses()\"\n (desyContentChange)=\"checkDescriptionContent($event)\" [observeProperties]=\"{ attributes: false, childList: true, characterData: true, subtree: true }\">\n <ng-container *desyCustomInnerContent=\"{\n component: descriptionComponent,\n html: description ? description.html : null,\n text: description ? description.text : null\n }\"></ng-container>\n </div>\n <p *ngIf=\"!descriptionIsHtml\" [class]=\"getDescriptionClasses()\"\n (desyContentChange)=\"checkDescriptionContent($event)\" [observeProperties]=\"{ attributes: false, childList: true, characterData: true, subtree: true }\">\n <ng-container *desyCustomInnerContent=\"{\n component: descriptionComponent,\n html: description ? description.html : null,\n text: description ? description.text : null\n }\"></ng-container>\n </p>\n\n <div *ngIf=\"contentComponent || caller\" class=\"p-base\">\n <ng-container *desyCustomInnerContent=\"{ component: contentComponent, template: caller }\"></ng-container>\n </div>\n\n <div class=\"flex flex-wrap gap-sm w-full\" *ngIf=\"itemsPrimary || (primaryButtonComponents && primaryButtonComponents.length > 0) || itemsSecondary || (secondaryButtonComponents && secondaryButtonComponents.length > 0)\"\n [ngClass]=\"(itemsPrimary || (primaryButtonComponents && primaryButtonComponents.length > 0)) && (itemsSecondary || (secondaryButtonComponents && secondaryButtonComponents.length > 0)) ? 'justify-between' : 'justify-center'\">\n <ng-template #buttons let-items=\"items\">\n <ng-container *ngIf=\"items\">\n <div class=\"mt-sm\" *ngIf=\"items.length === 1\">\n <desy-button (clickEvent)=\"clickButtonEmit(items[0], $event)\"\n [disabled]=\"items[0].disabled\"\n [classes]=\"items[0].classes\"\n [id]=\"items[0].id\"\n [text]=\"items[0].text\"\n [html]=\"items[0].html\"\n [element]=\"items[0].element\"\n [name]=\"items[0].name\"\n [type]=\"items[0].type\"\n [value]=\"items[0].value\"\n [href]=\"items[0].href\"\n [target]=\"items[0].target\"\n [preventDoubleClick]=\"items[0].preventDoubleClick\"\n [routerLink]=\"items[0].routerLink\"\n [routerLinkActiveClasses]=\"items[0].routerLinkActiveClasses\">\n <ng-container *desyCustomInnerContent=\"{ component: items[0], text: items[0].text }\"></ng-container>\n </desy-button>\n </div>\n\n <!-- FIXME De momento se mantiene el nbsp por no tener clases diferentes a desy-html.\n Eliminar al adaptar a una versi\u00F3n de desy-html que lo contemple -->\n <ul class=\"flex flex-wrap gap-sm\" *ngIf=\"items.length > 1\">\n <ng-container *ngFor=\"let item of items\">\n <li>\n <desy-button (clickEvent)=\"clickButtonEmit(item, $event)\"\n [disabled]=\"item.disabled\"\n [classes]=\"item.classes\"\n [id]=\"item.id\"\n [text]=\"item.text\"\n [html]=\"item.html\"\n [element]=\"item.element\"\n [name]=\"item.name\"\n [type]=\"item.type\"\n [value]=\"item.value\"\n [href]=\"item.href\"\n [target]=\"item.target\"\n [preventDoubleClick]=\"item.preventDoubleClick\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActiveClasses]=\"item.routerLinkActiveClasses\">\n <ng-container *desyCustomInnerContent=\"{ component: item, text: item.text }\"></ng-container>\n </desy-button>\n </li>&nbsp;\n </ng-container>\n </ul>\n </ng-container>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"buttons; context: { items: getPrimaryItems() }\"></ng-container>\n <ng-container *ngTemplateOutlet=\"buttons; context: { items: getSecondaryItems() }\"></ng-container>\n </div>\n\n <!-- Button loader -->\n <div class=\"flex flex-wrap gap-sm w-full\" *ngIf=\"(primaryButtonLoaderComponents && primaryButtonLoaderComponents.length > 0) || (secondaryButtonLoaderComponents && secondaryButtonLoaderComponents.length > 0)\" \n [ngClass]=\"((primaryButtonLoaderComponents && primaryButtonLoaderComponents.length > 0)) && ((secondaryButtonLoaderComponents && secondaryButtonLoaderComponents.length > 0)) ? 'justify-between' : 'justify-center'\">\n <ng-template #buttonsLoader let-items=\"items\">\n <ng-container *ngIf=\"items\">\n <div class=\"mt-sm\" *ngIf=\"items.length === 1\">\n <desy-button-loader (clickEvent)=\"clickButtonEmit(items[0], $event)\"\n [loaderText]=\"items[0].loaderText\"\n [loaderClasses]=\"items[0].loaderClasses\"\n [state]=\"items[0].state\"\n [successText]=\"items[0].successText\"\n [disabled]=\"items[0].disabled\"\n [classes]=\"(items[0].state === null || items[0].state === 'is-success') ? items[0].classes : items[0].classes + ' c-button-loader--is-loading'\"\n [id]=\"items[0].id\"\n [text]=\"items[0].text\"\n [html]=\"items[0].html\"\n [element]=\"items[0].element\"\n [name]=\"items[0].name\"\n [type]=\"items[0].type\"\n [value]=\"items[0].value\"\n [href]=\"items[0].href\"\n [target]=\"items[0].target\"\n [preventDoubleClick]=\"items[0].preventDoubleClick\"\n [routerLink]=\"items[0].routerLink\"\n [routerLinkActiveClasses]=\"items[0].routerLinkActiveClasses\">\n <ng-container *desyCustomInnerContent=\"{ component: items[0], text: items[0].text }\"></ng-container>\n </desy-button-loader>\n </div>\n\n <ul class=\"flex flex-wrap gap-sm\" *ngIf=\"items.length > 1\">\n <ng-container *ngFor=\"let item of items\">\n <li>\n <desy-button-loader (clickEvent)=\"clickButtonEmit(item, $event)\"\n [loaderText]=\"item.loaderText\"\n [loaderClasses]=\"item.loaderClasses\"\n [state]=\"item.state\"\n [successText]=\"item.successText\"\n [disabled]=\"item.disabled\"\n [classes]=\"(item.state === null || item.state === 'is-success') ? item.classes : item.classes + ' c-button-loader--is-loading'\"\n [id]=\"item.id\"\n [text]=\"item.text\"\n [html]=\"item.html\"\n [element]=\"item.element\"\n [name]=\"item.name\"\n [type]=\"item.type\"\n [value]=\"item.value\"\n [href]=\"item.href\"\n [target]=\"item.target\"\n [preventDoubleClick]=\"item.preventDoubleClick\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActiveClasses]=\"item.routerLinkActiveClasses\">\n <ng-container *desyCustomInnerContent=\"{ component: item, text: item.text }\"></ng-container>\n </desy-button-loader>\n </li>&nbsp;\n </ng-container>\n </ul>\n </ng-container>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"buttonsLoader; context: { items: getPrimaryLoaderItems() }\"></ng-container>\n <ng-container *ngTemplateOutlet=\"buttonsLoader; context: { items: getSecondaryLoaderItems() }\"></ng-container>\n </div>\n\n <ng-container *ngIf=\"isDismissible\">\n <div class=\"absolute top-0 right-0 p-sm lg:p-base\">\n <button (click)=\"closeDialog()\" class=\"p-sm focus:bg-warning-base focus:border-warning-base focus:shadow-outline-black focus:text-black focus:outline-none\" aria-label=\"X: Cerrar la ventana emergente\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"w-4 h-4\" aria-hidden=\"true\" role=\"presentation\"><path d=\"M85.91 71.77a2.5 2.5 0 010-3.54l46.16-46.16a10 10 0 10-14.14-14.14L71.77 54.09a2.5 2.5 0 01-3.54 0L22.07 7.93A10 10 0 007.93 22.07l46.16 46.16a2.5 2.5 0 010 3.54L7.93 117.93a10 10 0 0014.14 14.14l46.16-46.16a2.5 2.5 0 013.54 0l46.16 46.16a10 10 0 0014.14-14.14z\" fill=\"currentColor\"/></svg>\n </button>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.ContentChangeDirective, selector: "[desyContentChange]", inputs: ["observeProperties"], outputs: ["desyContentChange", "desyContentChangeMutation"] }, { kind: "directive", type: i4.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "component", type: i5.ButtonComponent, selector: "desy-button", inputs: ["id", "classes", "html", "text", "element", "name", "type", "value", "disabled", "href", "target", "preventDoubleClick", "routerLink", "routerLinkActiveClasses"], outputs: ["clickEvent"] }, { kind: "component", type: i6.ButtonLoaderComponent, selector: "desy-button-loader", inputs: ["loaderText", "loaderClasses", "state", "successText"] }, { kind: "pipe", type: i7.MakeHtmlListPipe, name: "makeHtmlList" }] }); }
108
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ModalComponent, selector: "desy-modal", inputs: { title: "title", description: "description", itemsPrimary: "itemsPrimary", itemsSecondary: "itemsSecondary", itemsLoaderPrimary: "itemsLoaderPrimary", itemsLoaderSecondary: "itemsLoaderSecondary", icon: "icon", headingLevel: "headingLevel", isDismissible: "isDismissible", id: "id", classes: "classes", caller: "caller" }, outputs: { closeModal: "closeModal", clickButton: "clickButton" }, queries: [{ propertyName: "titleComponent", predicate: TitleComponent }, { propertyName: "descriptionComponent", predicate: DescriptionComponent }, { propertyName: "contentComponent", predicate: ContentComponent }, { propertyName: "primaryButtonComponents", predicate: ModalButtonPrimaryComponent }, { propertyName: "secondaryButtonComponents", predicate: ModalButtonSecondaryComponent }, { propertyName: "primaryButtonLoaderComponents", predicate: ModalButtonLoaderPrimaryComponent }, { propertyName: "secondaryButtonLoaderComponents", predicate: ModalButtonLoaderSecondaryComponent }, { propertyName: "iconComponent", predicate: IconComponent }], usesInheritance: true, ngImport: i0, template: "<div [class]=\"[ 'mt-16 sm:mt-0 relative max-w-lg mx-auto p-base lg:p-lg border border-neutral-base rounded bg-white', classes] | makeHtmlList\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role\"\n [attr.aria-describedby]=\"ariaDescribedBy\"\n [attr.aria-errormessage]=\"ariaErrorMessage\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-hidden]=\"ariaHidden\"\n [attr.aria-disabled]=\"ariaDisabled\"\n [attr.aria-controls]=\"ariaControls\"\n [attr.aria-current]=\"ariaCurrent\"\n [attr.aria-live]=\"ariaLive\"\n [attr.aria-expanded]=\"ariaExpanded\"\n [attr.aria-haspopup]=\"ariaHasPopup\"\n [attr.tabindex]=\"tabindex\">\n <div *ngIf=\"iconComponent || icon\" class=\"flex justify-center p-base\">\n <ng-container *desyCustomInnerContent=\"{ component: iconComponent, html: icon ? icon.html : null }\"></ng-container>\n <ng-container [ngSwitch]=\"iconComponent ? iconComponent.type : icon.type\">\n <svg *ngSwitchCase=\"'discard'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-alert-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><path d=\"M12,0A12,12,0,1,0,24,12,12,12,0,0,0,12,0ZM5.29,5.29a9.63,9.63,0,0,1,12.23-1,.26.26,0,0,1,0,.4L4.67,17.56a.27.27,0,0,1-.4,0,9.49,9.49,0,0,1,1-12.24ZM18.75,18.76a9.53,9.53,0,0,1-12.23,1,.26.26,0,0,1,0-.4L19.37,6.49a.26.26,0,0,1,.4,0,9.49,9.49,0,0,1-1,12.24Z\" fill=\"currentColor\"></path></svg>\n <svg *ngSwitchCase=\"'delete'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-alert-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><g><path d=\"M19.5,7.5H4.5A.5.5,0,0,0,4,8V22a2,2,0,0,0,2,2H18a2,2,0,0,0,2-2V8A.5.5,0,0,0,19.5,7.5Zm-9.25,13a.75.75,0,0,1-1.5,0v-9a.75.75,0,0,1,1.5,0Zm5,0a.75.75,0,0,1-1.5,0v-9a.75.75,0,0,1,1.5,0Z\" fill=\"currentColor\"></path><path d=\"M22,4H17.25A.25.25,0,0,1,17,3.75V2.5A2.5,2.5,0,0,0,14.5,0h-5A2.5,2.5,0,0,0,7,2.5V3.75A.25.25,0,0,1,6.75,4H2A1,1,0,0,0,2,6H22a1,1,0,0,0,0-2ZM9,3.75V2.5A.5.5,0,0,1,9.5,2h5a.5.5,0,0,1,.5.5V3.75a.25.25,0,0,1-.25.25H9.25A.25.25,0,0,1,9,3.75Z\" fill=\"currentColor\"></path></g></svg>\n <svg *ngSwitchCase=\"'publish'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-primary-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><path d=\"M23.82,1.12A.5.5,0,0,0,23.31,1l-23,9.5A.5.5,0,0,0,0,11a.51.51,0,0,0,.32.46l6.33,2.45a.52.52,0,0,0,.47-.05l8.4-6a.5.5,0,0,1,.64.77l-7,6.75a.51.51,0,0,0-.15.36V22.5a.49.49,0,0,0,.37.48.49.49,0,0,0,.56-.23l3.17-5.42a.25.25,0,0,1,.33-.1l5.83,3.21a.5.5,0,0,0,.73-.33l4-18.5A.5.5,0,0,0,23.82,1.12Z\" fill=\"currentColor\"></path></svg>\n <svg *ngSwitchCase=\"'changes'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-primary-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><g><path d=\"M12,13a1,1,0,0,0,1-1V8a1,1,0,1,0-2,0v4A1,1,0,0,0,12,13Z\" fill=\"currentColor\"></path><circle cx=\"11.99\" cy=\"15.71\" r=\"1.25\" fill=\"currentColor\"></circle><path d=\"M19.29,5.53a9.72,9.72,0,0,0-9.55-3A10.25,10.25,0,0,0,2.38,9.61a.26.26,0,0,1-.27.18l-1-.13a.47.47,0,0,0-.47.22.47.47,0,0,0,0,.52l2.47,4.35a.51.51,0,0,0,.44.25.52.52,0,0,0,.36-.16l3.47-3.59a.48.48,0,0,0,.12-.51A.5.5,0,0,0,7,10.41l-1.88-.24A.23.23,0,0,1,5,10.05a.22.22,0,0,1,0-.21,7.67,7.67,0,0,1,5.37-4.9,7.23,7.23,0,0,1,7.1,2.25,1.25,1.25,0,1,0,1.87-1.66Z\" fill=\"currentColor\"></path><path d=\"M4.79,16.7a1.24,1.24,0,0,0-.11,1.76,9.72,9.72,0,0,0,9.55,3,10.24,10.24,0,0,0,7.37-7.12.24.24,0,0,1,.27-.17l1.06.12a.5.5,0,0,0,.48-.22.49.49,0,0,0,0-.52l-2.5-4.33A.51.51,0,0,0,20.55,9a.52.52,0,0,0-.43.15l-3.45,3.62a.5.5,0,0,0-.11.51.49.49,0,0,0,.41.33l1.85.22A.25.25,0,0,1,19,14a.22.22,0,0,1,0,.21,7.67,7.67,0,0,1-5.36,4.9,7.26,7.26,0,0,1-7.11-2.25A1.24,1.24,0,0,0,4.79,16.7Z\" fill=\"currentColor\"></path></g></svg>\n <svg *ngSwitchCase=\"'edit'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-primary-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><g><path d=\"M13.94,15a2,2,0,0,1-.67.45L9.73,16.86a2,2,0,0,1-2.6-2.6l1.41-3.53A2.18,2.18,0,0,1,9,10.05l5.88-5.88a.25.25,0,0,0-.17-.43H3.37A3.12,3.12,0,0,0,.25,6.86V20.62a3.12,3.12,0,0,0,3.12,3.12H17.13a3.12,3.12,0,0,0,3.12-3.12V9.29a.25.25,0,0,0-.43-.17Z\" fill=\"currentColor\"></path><path d=\"M18.57,3.3a.51.51,0,0,0-.71,0l-7.81,7.82a.36.36,0,0,0-.11.16L8.52,14.82a.51.51,0,0,0,.11.54.54.54,0,0,0,.54.11l3.54-1.42a.45.45,0,0,0,.17-.11l7.81-7.81a.51.51,0,0,0,.15-.35.53.53,0,0,0-.15-.36Z\" fill=\"currentColor\"></path><path d=\"M23.16,3.65a2,2,0,0,0,0-2.82,2,2,0,0,0-2.83,0L19.28,1.89a.56.56,0,0,0-.15.35.47.47,0,0,0,.15.35L21.4,4.71a.47.47,0,0,0,.35.15.57.57,0,0,0,.35-.15Z\" fill=\"currentColor\"></path></g></svg>\n </ng-container>\n </div>\n\n <ng-container [ngSwitch]=\"headingLevel > 0 && headingLevel < 6 ? headingLevel : 2\">\n <h1 *ngSwitchCase=\"1\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h1>\n <h2 *ngSwitchCase=\"2\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h2>\n <h3 *ngSwitchCase=\"3\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h3>\n <h4 *ngSwitchCase=\"4\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h4>\n <h5 *ngSwitchCase=\"5\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h5>\n </ng-container>\n\n <div *ngIf=\"descriptionIsHtml\" [class]=\"getDescriptionClasses()\"\n (desyContentChange)=\"checkDescriptionContent($event)\" [observeProperties]=\"{ attributes: false, childList: true, characterData: true, subtree: true }\">\n <ng-container *desyCustomInnerContent=\"{\n component: descriptionComponent,\n html: description ? description.html : null,\n text: description ? description.text : null\n }\"></ng-container>\n </div>\n <p *ngIf=\"!descriptionIsHtml\" [class]=\"getDescriptionClasses()\"\n (desyContentChange)=\"checkDescriptionContent($event)\" [observeProperties]=\"{ attributes: false, childList: true, characterData: true, subtree: true }\">\n <ng-container *desyCustomInnerContent=\"{\n component: descriptionComponent,\n html: description ? description.html : null,\n text: description ? description.text : null\n }\"></ng-container>\n </p>\n\n <div *ngIf=\"contentComponent || caller\" class=\"p-base\">\n <ng-container *desyCustomInnerContent=\"{ component: contentComponent, template: caller }\"></ng-container>\n </div>\n\n <div class=\"flex flex-wrap gap-sm w-full\" *ngIf=\"itemsPrimary || (primaryButtonComponents && primaryButtonComponents.length > 0) || itemsSecondary || (secondaryButtonComponents && secondaryButtonComponents.length > 0)\"\n [ngClass]=\"(itemsPrimary || (primaryButtonComponents && primaryButtonComponents.length > 0)) && (itemsSecondary || (secondaryButtonComponents && secondaryButtonComponents.length > 0)) ? 'justify-between' : 'justify-center'\">\n <ng-template #buttons let-items=\"items\">\n <ng-container *ngIf=\"items\">\n <div class=\"mt-sm\" *ngIf=\"items.length === 1\">\n <desy-button (clickEvent)=\"clickButtonEmit(items[0], $event)\"\n [disabled]=\"items[0].disabled\"\n [classes]=\"items[0].classes\"\n [id]=\"items[0].id\"\n [text]=\"items[0].text\"\n [html]=\"items[0].html\"\n [element]=\"items[0].element\"\n [name]=\"items[0].name\"\n [type]=\"items[0].type\"\n [value]=\"items[0].value\"\n [href]=\"items[0].href\"\n [target]=\"items[0].target\"\n [preventDoubleClick]=\"items[0].preventDoubleClick\"\n [routerLink]=\"items[0].routerLink\"\n [routerLinkActiveClasses]=\"items[0].routerLinkActiveClasses\">\n <ng-container *desyCustomInnerContent=\"{ component: items[0], text: items[0].text }\"></ng-container>\n </desy-button>\n </div>\n\n <!-- FIXME De momento se mantiene el nbsp por no tener clases diferentes a desy-html.\n Eliminar al adaptar a una versi\u00F3n de desy-html que lo contemple -->\n <ul class=\"flex flex-wrap gap-sm\" *ngIf=\"items.length > 1\">\n <ng-container *ngFor=\"let item of items\">\n <li>\n <desy-button (clickEvent)=\"clickButtonEmit(item, $event)\"\n [disabled]=\"item.disabled\"\n [classes]=\"item.classes\"\n [id]=\"item.id\"\n [text]=\"item.text\"\n [html]=\"item.html\"\n [element]=\"item.element\"\n [name]=\"item.name\"\n [type]=\"item.type\"\n [value]=\"item.value\"\n [href]=\"item.href\"\n [target]=\"item.target\"\n [preventDoubleClick]=\"item.preventDoubleClick\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActiveClasses]=\"item.routerLinkActiveClasses\">\n <ng-container *desyCustomInnerContent=\"{ component: item, text: item.text }\"></ng-container>\n </desy-button>\n </li>&nbsp;\n </ng-container>\n </ul>\n </ng-container>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"buttons; context: { items: getPrimaryItems() }\"></ng-container>\n <ng-container *ngTemplateOutlet=\"buttons; context: { items: getSecondaryItems() }\"></ng-container>\n </div>\n\n <!-- Button loader -->\n <div class=\"flex flex-wrap gap-sm w-full\" *ngIf=\"(primaryButtonLoaderComponents && primaryButtonLoaderComponents.length > 0) || (secondaryButtonLoaderComponents && secondaryButtonLoaderComponents.length > 0)\" \n [ngClass]=\"((primaryButtonLoaderComponents && primaryButtonLoaderComponents.length > 0)) && ((secondaryButtonLoaderComponents && secondaryButtonLoaderComponents.length > 0)) ? 'justify-between' : 'justify-center'\">\n <ng-template #buttonsLoader let-items=\"items\">\n <ng-container *ngIf=\"items\">\n <div class=\"mt-sm\" *ngIf=\"items.length === 1\">\n <desy-button-loader (clickEvent)=\"clickButtonEmit(items[0], $event)\"\n [loaderText]=\"items[0].loaderText\"\n [loaderClasses]=\"items[0].loaderClasses\"\n [state]=\"items[0].state\"\n [successText]=\"items[0].successText\"\n [disabled]=\"items[0].disabled\"\n [classes]=\"(items[0].state === null || items[0].state === 'is-success') ? items[0].classes : items[0].classes + ' c-button-loader--is-loading'\"\n [id]=\"items[0].id\"\n [text]=\"items[0].text\"\n [html]=\"items[0].html\"\n [element]=\"items[0].element\"\n [name]=\"items[0].name\"\n [type]=\"items[0].type\"\n [value]=\"items[0].value\"\n [href]=\"items[0].href\"\n [target]=\"items[0].target\"\n [preventDoubleClick]=\"items[0].preventDoubleClick\"\n [routerLink]=\"items[0].routerLink\"\n [routerLinkActiveClasses]=\"items[0].routerLinkActiveClasses\">\n <ng-container *desyCustomInnerContent=\"{ component: items[0], text: items[0].text }\"></ng-container>\n </desy-button-loader>\n </div>\n\n <ul class=\"flex flex-wrap gap-sm\" *ngIf=\"items.length > 1\">\n <ng-container *ngFor=\"let item of items\">\n <li>\n <desy-button-loader (clickEvent)=\"clickButtonEmit(item, $event)\"\n [loaderText]=\"item.loaderText\"\n [loaderClasses]=\"item.loaderClasses\"\n [state]=\"item.state\"\n [successText]=\"item.successText\"\n [disabled]=\"item.disabled\"\n [classes]=\"(item.state === null || item.state === 'is-success') ? item.classes : item.classes + ' c-button-loader--is-loading'\"\n [id]=\"item.id\"\n [text]=\"item.text\"\n [html]=\"item.html\"\n [element]=\"item.element\"\n [name]=\"item.name\"\n [type]=\"item.type\"\n [value]=\"item.value\"\n [href]=\"item.href\"\n [target]=\"item.target\"\n [preventDoubleClick]=\"item.preventDoubleClick\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActiveClasses]=\"item.routerLinkActiveClasses\">\n <ng-container *desyCustomInnerContent=\"{ component: item, text: item.text }\"></ng-container>\n </desy-button-loader>\n </li>&nbsp;\n </ng-container>\n </ul>\n </ng-container>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"buttonsLoader; context: { items: getPrimaryLoaderItems() }\"></ng-container>\n <ng-container *ngTemplateOutlet=\"buttonsLoader; context: { items: getSecondaryLoaderItems() }\"></ng-container>\n </div>\n\n <ng-container *ngIf=\"isDismissible\">\n <div class=\"absolute top-0 right-0 p-sm lg:p-base\">\n <button (click)=\"closeDialog()\" class=\"p-sm focus:bg-warning-base focus:border-warning-base focus:shadow-outline-black focus:text-black focus:outline-none\" aria-label=\"X: Cerrar la ventana emergente\" type=\"button\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"w-4 h-4\" aria-hidden=\"true\" role=\"presentation\"><path d=\"M85.91 71.77a2.5 2.5 0 010-3.54l46.16-46.16a10 10 0 10-14.14-14.14L71.77 54.09a2.5 2.5 0 01-3.54 0L22.07 7.93A10 10 0 007.93 22.07l46.16 46.16a2.5 2.5 0 010 3.54L7.93 117.93a10 10 0 0014.14 14.14l46.16-46.16a2.5 2.5 0 013.54 0l46.16 46.16a10 10 0 0014.14-14.14z\" fill=\"currentColor\"/></svg>\n </button>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.ContentChangeDirective, selector: "[desyContentChange]", inputs: ["observeProperties"], outputs: ["desyContentChange", "desyContentChangeMutation"] }, { kind: "directive", type: i4.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "component", type: i5.ButtonComponent, selector: "desy-button", inputs: ["id", "classes", "html", "text", "element", "name", "type", "value", "disabled", "href", "target", "preventDoubleClick", "routerLink", "routerLinkActiveClasses"], outputs: ["clickEvent"] }, { kind: "component", type: i6.ButtonLoaderComponent, selector: "desy-button-loader", inputs: ["loaderText", "loaderClasses", "state", "successText"] }, { kind: "pipe", type: i7.MakeHtmlListPipe, name: "makeHtmlList" }] }); }
109
109
  }
110
110
  __decorate([
111
111
  DesyContentChild(),
@@ -125,7 +125,7 @@ __decorate([
125
125
  ], ModalComponent.prototype, "iconComponent", void 0);
126
126
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ModalComponent, decorators: [{
127
127
  type: Component,
128
- args: [{ selector: 'desy-modal', template: "<div [class]=\"[ 'mt-16 sm:mt-0 relative max-w-lg mx-auto p-base lg:p-lg border border-neutral-base rounded bg-white', classes] | makeHtmlList\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role\"\n [attr.aria-describedby]=\"ariaDescribedBy\"\n [attr.aria-errormessage]=\"ariaErrorMessage\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-hidden]=\"ariaHidden\"\n [attr.aria-disabled]=\"ariaDisabled\"\n [attr.aria-controls]=\"ariaControls\"\n [attr.aria-current]=\"ariaCurrent\"\n [attr.aria-live]=\"ariaLive\"\n [attr.aria-expanded]=\"ariaExpanded\"\n [attr.aria-haspopup]=\"ariaHasPopup\"\n [attr.tabindex]=\"tabindex\">\n <div *ngIf=\"iconComponent || icon\" class=\"flex justify-center p-base\">\n <ng-container *desyCustomInnerContent=\"{ component: iconComponent, html: icon ? icon.html : null }\"></ng-container>\n <ng-container [ngSwitch]=\"iconComponent ? iconComponent.type : icon.type\">\n <svg *ngSwitchCase=\"'discard'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-alert-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"><path d=\"M4.375 70a65.625 65.625 0 10131.25 0 65.625 65.625 0 10-131.25 0zM23.596 116.404l92.808-92.808\" stroke-width=\"8.749995\"/></g></svg>\n <svg *ngSwitchCase=\"'delete'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-alert-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"><path d=\"M100.625 122.5h-61.25a8.75 8.75 0 01-8.75-8.75V35h78.75v78.75a8.75 8.75 0 01-8.75 8.75zM56.875 96.25v-35M83.125 96.25v-35M13.125 35h113.75M83.125 17.5h-26.25a8.75 8.75 0 00-8.75 8.75V35h43.75v-8.75a8.75 8.75 0 00-8.75-8.75z\" stroke-width=\"8.749995\"/></g></svg>\n <svg *ngSwitchCase=\"'edit'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-primary-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"><path d=\"M73.89 82.46l-21.652 3.098 3.091-21.66 55.685-55.685a13.125 13.125 0 0118.562 18.562z\" stroke-width=\"8.749995\"/><path d=\"M111.545 83.125v43.75a8.75 8.75 0 01-8.75 8.75h-87.5a8.75 8.75 0 01-8.75-8.75v-87.5a8.75 8.75 0 018.75-8.75h43.75\" stroke-width=\"8.749995\"/></g></svg>\n <svg *ngSwitchCase=\"'changes'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-primary-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"><path d=\"M107.112 40.833a48.125 48.125 0 00-85.237 30.608v13.142M35 104.463a48.125 48.125 0 0083.125-33.022v-8.75\" stroke-width=\"8.749995\"/><path d=\"M4.375 67.066l17.5 17.5 17.5-17.5M135.625 80.19l-17.5-17.5-17.5 17.5\" stroke-width=\"8.749995\"/></g></svg>\n <svg *ngSwitchCase=\"'publish'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-primary-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"><path d=\"M16.094 91.17a9.707 9.707 0 01-5.145-17.938L118.767 5.833a9.7 9.7 0 0114.676 10.034l-21 111.842a9.707 9.707 0 01-17.301 4.031L64.75 91.17z\" stroke-width=\"8.749995\"/><path d=\"M64.75 91.17H50.167v30.163a9.7 9.7 0 0015.166 8.015l18.539-12.635zM64.744 91.17l64.633-85.11\" stroke-width=\"8.749995\"/></g></svg>\n </ng-container>\n </div>\n\n <ng-container [ngSwitch]=\"headingLevel > 0 && headingLevel < 6 ? headingLevel : 2\">\n <h1 *ngSwitchCase=\"1\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h1>\n <h2 *ngSwitchCase=\"2\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h2>\n <h3 *ngSwitchCase=\"3\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h3>\n <h4 *ngSwitchCase=\"4\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h4>\n <h5 *ngSwitchCase=\"5\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h5>\n </ng-container>\n\n <div *ngIf=\"descriptionIsHtml\" [class]=\"getDescriptionClasses()\"\n (desyContentChange)=\"checkDescriptionContent($event)\" [observeProperties]=\"{ attributes: false, childList: true, characterData: true, subtree: true }\">\n <ng-container *desyCustomInnerContent=\"{\n component: descriptionComponent,\n html: description ? description.html : null,\n text: description ? description.text : null\n }\"></ng-container>\n </div>\n <p *ngIf=\"!descriptionIsHtml\" [class]=\"getDescriptionClasses()\"\n (desyContentChange)=\"checkDescriptionContent($event)\" [observeProperties]=\"{ attributes: false, childList: true, characterData: true, subtree: true }\">\n <ng-container *desyCustomInnerContent=\"{\n component: descriptionComponent,\n html: description ? description.html : null,\n text: description ? description.text : null\n }\"></ng-container>\n </p>\n\n <div *ngIf=\"contentComponent || caller\" class=\"p-base\">\n <ng-container *desyCustomInnerContent=\"{ component: contentComponent, template: caller }\"></ng-container>\n </div>\n\n <div class=\"flex flex-wrap gap-sm w-full\" *ngIf=\"itemsPrimary || (primaryButtonComponents && primaryButtonComponents.length > 0) || itemsSecondary || (secondaryButtonComponents && secondaryButtonComponents.length > 0)\"\n [ngClass]=\"(itemsPrimary || (primaryButtonComponents && primaryButtonComponents.length > 0)) && (itemsSecondary || (secondaryButtonComponents && secondaryButtonComponents.length > 0)) ? 'justify-between' : 'justify-center'\">\n <ng-template #buttons let-items=\"items\">\n <ng-container *ngIf=\"items\">\n <div class=\"mt-sm\" *ngIf=\"items.length === 1\">\n <desy-button (clickEvent)=\"clickButtonEmit(items[0], $event)\"\n [disabled]=\"items[0].disabled\"\n [classes]=\"items[0].classes\"\n [id]=\"items[0].id\"\n [text]=\"items[0].text\"\n [html]=\"items[0].html\"\n [element]=\"items[0].element\"\n [name]=\"items[0].name\"\n [type]=\"items[0].type\"\n [value]=\"items[0].value\"\n [href]=\"items[0].href\"\n [target]=\"items[0].target\"\n [preventDoubleClick]=\"items[0].preventDoubleClick\"\n [routerLink]=\"items[0].routerLink\"\n [routerLinkActiveClasses]=\"items[0].routerLinkActiveClasses\">\n <ng-container *desyCustomInnerContent=\"{ component: items[0], text: items[0].text }\"></ng-container>\n </desy-button>\n </div>\n\n <!-- FIXME De momento se mantiene el nbsp por no tener clases diferentes a desy-html.\n Eliminar al adaptar a una versi\u00F3n de desy-html que lo contemple -->\n <ul class=\"flex flex-wrap gap-sm\" *ngIf=\"items.length > 1\">\n <ng-container *ngFor=\"let item of items\">\n <li>\n <desy-button (clickEvent)=\"clickButtonEmit(item, $event)\"\n [disabled]=\"item.disabled\"\n [classes]=\"item.classes\"\n [id]=\"item.id\"\n [text]=\"item.text\"\n [html]=\"item.html\"\n [element]=\"item.element\"\n [name]=\"item.name\"\n [type]=\"item.type\"\n [value]=\"item.value\"\n [href]=\"item.href\"\n [target]=\"item.target\"\n [preventDoubleClick]=\"item.preventDoubleClick\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActiveClasses]=\"item.routerLinkActiveClasses\">\n <ng-container *desyCustomInnerContent=\"{ component: item, text: item.text }\"></ng-container>\n </desy-button>\n </li>&nbsp;\n </ng-container>\n </ul>\n </ng-container>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"buttons; context: { items: getPrimaryItems() }\"></ng-container>\n <ng-container *ngTemplateOutlet=\"buttons; context: { items: getSecondaryItems() }\"></ng-container>\n </div>\n\n <!-- Button loader -->\n <div class=\"flex flex-wrap gap-sm w-full\" *ngIf=\"(primaryButtonLoaderComponents && primaryButtonLoaderComponents.length > 0) || (secondaryButtonLoaderComponents && secondaryButtonLoaderComponents.length > 0)\" \n [ngClass]=\"((primaryButtonLoaderComponents && primaryButtonLoaderComponents.length > 0)) && ((secondaryButtonLoaderComponents && secondaryButtonLoaderComponents.length > 0)) ? 'justify-between' : 'justify-center'\">\n <ng-template #buttonsLoader let-items=\"items\">\n <ng-container *ngIf=\"items\">\n <div class=\"mt-sm\" *ngIf=\"items.length === 1\">\n <desy-button-loader (clickEvent)=\"clickButtonEmit(items[0], $event)\"\n [loaderText]=\"items[0].loaderText\"\n [loaderClasses]=\"items[0].loaderClasses\"\n [state]=\"items[0].state\"\n [successText]=\"items[0].successText\"\n [disabled]=\"items[0].disabled\"\n [classes]=\"(items[0].state === null || items[0].state === 'is-success') ? items[0].classes : items[0].classes + ' c-button-loader--is-loading'\"\n [id]=\"items[0].id\"\n [text]=\"items[0].text\"\n [html]=\"items[0].html\"\n [element]=\"items[0].element\"\n [name]=\"items[0].name\"\n [type]=\"items[0].type\"\n [value]=\"items[0].value\"\n [href]=\"items[0].href\"\n [target]=\"items[0].target\"\n [preventDoubleClick]=\"items[0].preventDoubleClick\"\n [routerLink]=\"items[0].routerLink\"\n [routerLinkActiveClasses]=\"items[0].routerLinkActiveClasses\">\n <ng-container *desyCustomInnerContent=\"{ component: items[0], text: items[0].text }\"></ng-container>\n </desy-button-loader>\n </div>\n\n <ul class=\"flex flex-wrap gap-sm\" *ngIf=\"items.length > 1\">\n <ng-container *ngFor=\"let item of items\">\n <li>\n <desy-button-loader (clickEvent)=\"clickButtonEmit(item, $event)\"\n [loaderText]=\"item.loaderText\"\n [loaderClasses]=\"item.loaderClasses\"\n [state]=\"item.state\"\n [successText]=\"item.successText\"\n [disabled]=\"item.disabled\"\n [classes]=\"(item.state === null || item.state === 'is-success') ? item.classes : item.classes + ' c-button-loader--is-loading'\"\n [id]=\"item.id\"\n [text]=\"item.text\"\n [html]=\"item.html\"\n [element]=\"item.element\"\n [name]=\"item.name\"\n [type]=\"item.type\"\n [value]=\"item.value\"\n [href]=\"item.href\"\n [target]=\"item.target\"\n [preventDoubleClick]=\"item.preventDoubleClick\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActiveClasses]=\"item.routerLinkActiveClasses\">\n <ng-container *desyCustomInnerContent=\"{ component: item, text: item.text }\"></ng-container>\n </desy-button-loader>\n </li>&nbsp;\n </ng-container>\n </ul>\n </ng-container>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"buttonsLoader; context: { items: getPrimaryLoaderItems() }\"></ng-container>\n <ng-container *ngTemplateOutlet=\"buttonsLoader; context: { items: getSecondaryLoaderItems() }\"></ng-container>\n </div>\n\n <ng-container *ngIf=\"isDismissible\">\n <div class=\"absolute top-0 right-0 p-sm lg:p-base\">\n <button (click)=\"closeDialog()\" class=\"p-sm focus:bg-warning-base focus:border-warning-base focus:shadow-outline-black focus:text-black focus:outline-none\" aria-label=\"X: Cerrar la ventana emergente\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"w-4 h-4\" aria-hidden=\"true\" role=\"presentation\"><path d=\"M85.91 71.77a2.5 2.5 0 010-3.54l46.16-46.16a10 10 0 10-14.14-14.14L71.77 54.09a2.5 2.5 0 01-3.54 0L22.07 7.93A10 10 0 007.93 22.07l46.16 46.16a2.5 2.5 0 010 3.54L7.93 117.93a10 10 0 0014.14 14.14l46.16-46.16a2.5 2.5 0 013.54 0l46.16 46.16a10 10 0 0014.14-14.14z\" fill=\"currentColor\"/></svg>\n </button>\n </div>\n </ng-container>\n</div>\n" }]
128
+ args: [{ selector: 'desy-modal', template: "<div [class]=\"[ 'mt-16 sm:mt-0 relative max-w-lg mx-auto p-base lg:p-lg border border-neutral-base rounded bg-white', classes] | makeHtmlList\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role\"\n [attr.aria-describedby]=\"ariaDescribedBy\"\n [attr.aria-errormessage]=\"ariaErrorMessage\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-hidden]=\"ariaHidden\"\n [attr.aria-disabled]=\"ariaDisabled\"\n [attr.aria-controls]=\"ariaControls\"\n [attr.aria-current]=\"ariaCurrent\"\n [attr.aria-live]=\"ariaLive\"\n [attr.aria-expanded]=\"ariaExpanded\"\n [attr.aria-haspopup]=\"ariaHasPopup\"\n [attr.tabindex]=\"tabindex\">\n <div *ngIf=\"iconComponent || icon\" class=\"flex justify-center p-base\">\n <ng-container *desyCustomInnerContent=\"{ component: iconComponent, html: icon ? icon.html : null }\"></ng-container>\n <ng-container [ngSwitch]=\"iconComponent ? iconComponent.type : icon.type\">\n <svg *ngSwitchCase=\"'discard'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-alert-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><path d=\"M12,0A12,12,0,1,0,24,12,12,12,0,0,0,12,0ZM5.29,5.29a9.63,9.63,0,0,1,12.23-1,.26.26,0,0,1,0,.4L4.67,17.56a.27.27,0,0,1-.4,0,9.49,9.49,0,0,1,1-12.24ZM18.75,18.76a9.53,9.53,0,0,1-12.23,1,.26.26,0,0,1,0-.4L19.37,6.49a.26.26,0,0,1,.4,0,9.49,9.49,0,0,1-1,12.24Z\" fill=\"currentColor\"></path></svg>\n <svg *ngSwitchCase=\"'delete'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-alert-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><g><path d=\"M19.5,7.5H4.5A.5.5,0,0,0,4,8V22a2,2,0,0,0,2,2H18a2,2,0,0,0,2-2V8A.5.5,0,0,0,19.5,7.5Zm-9.25,13a.75.75,0,0,1-1.5,0v-9a.75.75,0,0,1,1.5,0Zm5,0a.75.75,0,0,1-1.5,0v-9a.75.75,0,0,1,1.5,0Z\" fill=\"currentColor\"></path><path d=\"M22,4H17.25A.25.25,0,0,1,17,3.75V2.5A2.5,2.5,0,0,0,14.5,0h-5A2.5,2.5,0,0,0,7,2.5V3.75A.25.25,0,0,1,6.75,4H2A1,1,0,0,0,2,6H22a1,1,0,0,0,0-2ZM9,3.75V2.5A.5.5,0,0,1,9.5,2h5a.5.5,0,0,1,.5.5V3.75a.25.25,0,0,1-.25.25H9.25A.25.25,0,0,1,9,3.75Z\" fill=\"currentColor\"></path></g></svg>\n <svg *ngSwitchCase=\"'publish'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-primary-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><path d=\"M23.82,1.12A.5.5,0,0,0,23.31,1l-23,9.5A.5.5,0,0,0,0,11a.51.51,0,0,0,.32.46l6.33,2.45a.52.52,0,0,0,.47-.05l8.4-6a.5.5,0,0,1,.64.77l-7,6.75a.51.51,0,0,0-.15.36V22.5a.49.49,0,0,0,.37.48.49.49,0,0,0,.56-.23l3.17-5.42a.25.25,0,0,1,.33-.1l5.83,3.21a.5.5,0,0,0,.73-.33l4-18.5A.5.5,0,0,0,23.82,1.12Z\" fill=\"currentColor\"></path></svg>\n <svg *ngSwitchCase=\"'changes'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-primary-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><g><path d=\"M12,13a1,1,0,0,0,1-1V8a1,1,0,1,0-2,0v4A1,1,0,0,0,12,13Z\" fill=\"currentColor\"></path><circle cx=\"11.99\" cy=\"15.71\" r=\"1.25\" fill=\"currentColor\"></circle><path d=\"M19.29,5.53a9.72,9.72,0,0,0-9.55-3A10.25,10.25,0,0,0,2.38,9.61a.26.26,0,0,1-.27.18l-1-.13a.47.47,0,0,0-.47.22.47.47,0,0,0,0,.52l2.47,4.35a.51.51,0,0,0,.44.25.52.52,0,0,0,.36-.16l3.47-3.59a.48.48,0,0,0,.12-.51A.5.5,0,0,0,7,10.41l-1.88-.24A.23.23,0,0,1,5,10.05a.22.22,0,0,1,0-.21,7.67,7.67,0,0,1,5.37-4.9,7.23,7.23,0,0,1,7.1,2.25,1.25,1.25,0,1,0,1.87-1.66Z\" fill=\"currentColor\"></path><path d=\"M4.79,16.7a1.24,1.24,0,0,0-.11,1.76,9.72,9.72,0,0,0,9.55,3,10.24,10.24,0,0,0,7.37-7.12.24.24,0,0,1,.27-.17l1.06.12a.5.5,0,0,0,.48-.22.49.49,0,0,0,0-.52l-2.5-4.33A.51.51,0,0,0,20.55,9a.52.52,0,0,0-.43.15l-3.45,3.62a.5.5,0,0,0-.11.51.49.49,0,0,0,.41.33l1.85.22A.25.25,0,0,1,19,14a.22.22,0,0,1,0,.21,7.67,7.67,0,0,1-5.36,4.9,7.26,7.26,0,0,1-7.11-2.25A1.24,1.24,0,0,0,4.79,16.7Z\" fill=\"currentColor\"></path></g></svg>\n <svg *ngSwitchCase=\"'edit'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" class=\"block w-16 h-16 text-primary-light\" focusable=\"false\" aria-hidden=\"true\" role=\"presentation\"><g><path d=\"M13.94,15a2,2,0,0,1-.67.45L9.73,16.86a2,2,0,0,1-2.6-2.6l1.41-3.53A2.18,2.18,0,0,1,9,10.05l5.88-5.88a.25.25,0,0,0-.17-.43H3.37A3.12,3.12,0,0,0,.25,6.86V20.62a3.12,3.12,0,0,0,3.12,3.12H17.13a3.12,3.12,0,0,0,3.12-3.12V9.29a.25.25,0,0,0-.43-.17Z\" fill=\"currentColor\"></path><path d=\"M18.57,3.3a.51.51,0,0,0-.71,0l-7.81,7.82a.36.36,0,0,0-.11.16L8.52,14.82a.51.51,0,0,0,.11.54.54.54,0,0,0,.54.11l3.54-1.42a.45.45,0,0,0,.17-.11l7.81-7.81a.51.51,0,0,0,.15-.35.53.53,0,0,0-.15-.36Z\" fill=\"currentColor\"></path><path d=\"M23.16,3.65a2,2,0,0,0,0-2.82,2,2,0,0,0-2.83,0L19.28,1.89a.56.56,0,0,0-.15.35.47.47,0,0,0,.15.35L21.4,4.71a.47.47,0,0,0,.35.15.57.57,0,0,0,.35-.15Z\" fill=\"currentColor\"></path></g></svg>\n </ng-container>\n </div>\n\n <ng-container [ngSwitch]=\"headingLevel > 0 && headingLevel < 6 ? headingLevel : 2\">\n <h1 *ngSwitchCase=\"1\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h1>\n <h2 *ngSwitchCase=\"2\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h2>\n <h3 *ngSwitchCase=\"3\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h3>\n <h4 *ngSwitchCase=\"4\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h4>\n <h5 *ngSwitchCase=\"5\" [attr.id]=\"'label-' + id\" [class]=\"getTitleClasses()\" tabindex=\"-1\">\n <ng-container *desyCustomInnerContent=\"{\n component: this.titleComponent,\n html: this.title ? this.title.html : null,\n text: this.title ? this.title.text : null\n }\"></ng-container>\n </h5>\n </ng-container>\n\n <div *ngIf=\"descriptionIsHtml\" [class]=\"getDescriptionClasses()\"\n (desyContentChange)=\"checkDescriptionContent($event)\" [observeProperties]=\"{ attributes: false, childList: true, characterData: true, subtree: true }\">\n <ng-container *desyCustomInnerContent=\"{\n component: descriptionComponent,\n html: description ? description.html : null,\n text: description ? description.text : null\n }\"></ng-container>\n </div>\n <p *ngIf=\"!descriptionIsHtml\" [class]=\"getDescriptionClasses()\"\n (desyContentChange)=\"checkDescriptionContent($event)\" [observeProperties]=\"{ attributes: false, childList: true, characterData: true, subtree: true }\">\n <ng-container *desyCustomInnerContent=\"{\n component: descriptionComponent,\n html: description ? description.html : null,\n text: description ? description.text : null\n }\"></ng-container>\n </p>\n\n <div *ngIf=\"contentComponent || caller\" class=\"p-base\">\n <ng-container *desyCustomInnerContent=\"{ component: contentComponent, template: caller }\"></ng-container>\n </div>\n\n <div class=\"flex flex-wrap gap-sm w-full\" *ngIf=\"itemsPrimary || (primaryButtonComponents && primaryButtonComponents.length > 0) || itemsSecondary || (secondaryButtonComponents && secondaryButtonComponents.length > 0)\"\n [ngClass]=\"(itemsPrimary || (primaryButtonComponents && primaryButtonComponents.length > 0)) && (itemsSecondary || (secondaryButtonComponents && secondaryButtonComponents.length > 0)) ? 'justify-between' : 'justify-center'\">\n <ng-template #buttons let-items=\"items\">\n <ng-container *ngIf=\"items\">\n <div class=\"mt-sm\" *ngIf=\"items.length === 1\">\n <desy-button (clickEvent)=\"clickButtonEmit(items[0], $event)\"\n [disabled]=\"items[0].disabled\"\n [classes]=\"items[0].classes\"\n [id]=\"items[0].id\"\n [text]=\"items[0].text\"\n [html]=\"items[0].html\"\n [element]=\"items[0].element\"\n [name]=\"items[0].name\"\n [type]=\"items[0].type\"\n [value]=\"items[0].value\"\n [href]=\"items[0].href\"\n [target]=\"items[0].target\"\n [preventDoubleClick]=\"items[0].preventDoubleClick\"\n [routerLink]=\"items[0].routerLink\"\n [routerLinkActiveClasses]=\"items[0].routerLinkActiveClasses\">\n <ng-container *desyCustomInnerContent=\"{ component: items[0], text: items[0].text }\"></ng-container>\n </desy-button>\n </div>\n\n <!-- FIXME De momento se mantiene el nbsp por no tener clases diferentes a desy-html.\n Eliminar al adaptar a una versi\u00F3n de desy-html que lo contemple -->\n <ul class=\"flex flex-wrap gap-sm\" *ngIf=\"items.length > 1\">\n <ng-container *ngFor=\"let item of items\">\n <li>\n <desy-button (clickEvent)=\"clickButtonEmit(item, $event)\"\n [disabled]=\"item.disabled\"\n [classes]=\"item.classes\"\n [id]=\"item.id\"\n [text]=\"item.text\"\n [html]=\"item.html\"\n [element]=\"item.element\"\n [name]=\"item.name\"\n [type]=\"item.type\"\n [value]=\"item.value\"\n [href]=\"item.href\"\n [target]=\"item.target\"\n [preventDoubleClick]=\"item.preventDoubleClick\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActiveClasses]=\"item.routerLinkActiveClasses\">\n <ng-container *desyCustomInnerContent=\"{ component: item, text: item.text }\"></ng-container>\n </desy-button>\n </li>&nbsp;\n </ng-container>\n </ul>\n </ng-container>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"buttons; context: { items: getPrimaryItems() }\"></ng-container>\n <ng-container *ngTemplateOutlet=\"buttons; context: { items: getSecondaryItems() }\"></ng-container>\n </div>\n\n <!-- Button loader -->\n <div class=\"flex flex-wrap gap-sm w-full\" *ngIf=\"(primaryButtonLoaderComponents && primaryButtonLoaderComponents.length > 0) || (secondaryButtonLoaderComponents && secondaryButtonLoaderComponents.length > 0)\" \n [ngClass]=\"((primaryButtonLoaderComponents && primaryButtonLoaderComponents.length > 0)) && ((secondaryButtonLoaderComponents && secondaryButtonLoaderComponents.length > 0)) ? 'justify-between' : 'justify-center'\">\n <ng-template #buttonsLoader let-items=\"items\">\n <ng-container *ngIf=\"items\">\n <div class=\"mt-sm\" *ngIf=\"items.length === 1\">\n <desy-button-loader (clickEvent)=\"clickButtonEmit(items[0], $event)\"\n [loaderText]=\"items[0].loaderText\"\n [loaderClasses]=\"items[0].loaderClasses\"\n [state]=\"items[0].state\"\n [successText]=\"items[0].successText\"\n [disabled]=\"items[0].disabled\"\n [classes]=\"(items[0].state === null || items[0].state === 'is-success') ? items[0].classes : items[0].classes + ' c-button-loader--is-loading'\"\n [id]=\"items[0].id\"\n [text]=\"items[0].text\"\n [html]=\"items[0].html\"\n [element]=\"items[0].element\"\n [name]=\"items[0].name\"\n [type]=\"items[0].type\"\n [value]=\"items[0].value\"\n [href]=\"items[0].href\"\n [target]=\"items[0].target\"\n [preventDoubleClick]=\"items[0].preventDoubleClick\"\n [routerLink]=\"items[0].routerLink\"\n [routerLinkActiveClasses]=\"items[0].routerLinkActiveClasses\">\n <ng-container *desyCustomInnerContent=\"{ component: items[0], text: items[0].text }\"></ng-container>\n </desy-button-loader>\n </div>\n\n <ul class=\"flex flex-wrap gap-sm\" *ngIf=\"items.length > 1\">\n <ng-container *ngFor=\"let item of items\">\n <li>\n <desy-button-loader (clickEvent)=\"clickButtonEmit(item, $event)\"\n [loaderText]=\"item.loaderText\"\n [loaderClasses]=\"item.loaderClasses\"\n [state]=\"item.state\"\n [successText]=\"item.successText\"\n [disabled]=\"item.disabled\"\n [classes]=\"(item.state === null || item.state === 'is-success') ? item.classes : item.classes + ' c-button-loader--is-loading'\"\n [id]=\"item.id\"\n [text]=\"item.text\"\n [html]=\"item.html\"\n [element]=\"item.element\"\n [name]=\"item.name\"\n [type]=\"item.type\"\n [value]=\"item.value\"\n [href]=\"item.href\"\n [target]=\"item.target\"\n [preventDoubleClick]=\"item.preventDoubleClick\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActiveClasses]=\"item.routerLinkActiveClasses\">\n <ng-container *desyCustomInnerContent=\"{ component: item, text: item.text }\"></ng-container>\n </desy-button-loader>\n </li>&nbsp;\n </ng-container>\n </ul>\n </ng-container>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"buttonsLoader; context: { items: getPrimaryLoaderItems() }\"></ng-container>\n <ng-container *ngTemplateOutlet=\"buttonsLoader; context: { items: getSecondaryLoaderItems() }\"></ng-container>\n </div>\n\n <ng-container *ngIf=\"isDismissible\">\n <div class=\"absolute top-0 right-0 p-sm lg:p-base\">\n <button (click)=\"closeDialog()\" class=\"p-sm focus:bg-warning-base focus:border-warning-base focus:shadow-outline-black focus:text-black focus:outline-none\" aria-label=\"X: Cerrar la ventana emergente\" type=\"button\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"w-4 h-4\" aria-hidden=\"true\" role=\"presentation\"><path d=\"M85.91 71.77a2.5 2.5 0 010-3.54l46.16-46.16a10 10 0 10-14.14-14.14L71.77 54.09a2.5 2.5 0 01-3.54 0L22.07 7.93A10 10 0 007.93 22.07l46.16 46.16a2.5 2.5 0 010 3.54L7.93 117.93a10 10 0 0014.14 14.14l46.16-46.16a2.5 2.5 0 013.54 0l46.16 46.16a10 10 0 0014.14-14.14z\" fill=\"currentColor\"/></svg>\n </button>\n </div>\n </ng-container>\n</div>\n" }]
129
129
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { title: [{
130
130
  type: Input
131
131
  }], description: [{
@@ -179,4 +179,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
179
179
  type: ContentChildren,
180
180
  args: [IconComponent]
181
181
  }] } });
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzeS1hbmd1bGFyL3NyYy9saWIvZGVzeS1tb2RhbHMvY29tcG9uZW50cy9tb2RhbC9tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW1vZGFscy9jb21wb25lbnRzL21vZGFsL21vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUVsRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sd0RBQXdELENBQUM7QUFDdEYsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sb0VBQW9FLENBQUM7QUFDeEcsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQ25GLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDREQUE0RCxDQUFDO0FBQzVGLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLHVEQUF1RCxDQUFDO0FBQ2xHLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLDJEQUEyRCxDQUFDO0FBQ3hHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlEQUF5RCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHlFQUF5RSxDQUFDOzs7Ozs7Ozs7QUFNOUgsTUFBTSxPQUFPLGNBQWUsU0FBUSxzQkFBc0I7SUF5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QUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUcwQixjQUFjO3NCQUE5QyxlQUFlO3VCQUFDLGNBQWM7Z0JBR1Esb0JBQW9CO3NCQUExRCxlQUFlO3VCQUFDLG9CQUFvQjtnQkFHRixnQkFBZ0I7c0JBQWxELGVBQWU7dUJBQUMsZ0JBQWdCO2dCQUVhLHVCQUF1QjtzQkFBcEUsZUFBZTt1QkFBQywyQkFBMkI7Z0JBQ0kseUJBQXlCO3NCQUF4RSxlQUFlO3VCQUFDLDZCQUE2QjtnQkFFTSw2QkFBNkI7c0JBQWhGLGVBQWU7dUJBQUMsaUNBQWlDO2dCQUNJLCtCQUErQjtzQkFBcEYsZUFBZTt1QkFBQyxtQ0FBbUM7Z0JBR3BCLGFBQWE7c0JBQTVDLGVBQWU7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY2Nlc3NpYmlsaXR5Q29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBNb2RhbEJ1dHRvbkRhdGEsIE1vZGFsRGF0YSwgTW9kYWxJY29uRGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtUaXRsZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vZGVzeS1jb21tb25zL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7RGVzY3JpcHRpb25Db21wb25lbnR9IGZyb20gJy4uLy4uLy4uL2Rlc3ktY29tbW9ucy9jb21wb25lbnRzL2Rlc2NyaXB0aW9uL2Rlc2NyaXB0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge0ljb25Db21wb25lbnR9IGZyb20gJy4uLy4uLy4uL2Rlc3ktY29tbW9ucy9jb21wb25lbnRzL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtDb250ZW50Q29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi9kZXN5LWNvbW1vbnMvY29tcG9uZW50cy9jb250ZW50L2NvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7TW9kYWxCdXR0b25QcmltYXJ5Q29tcG9uZW50fSBmcm9tICcuL21vZGFsLWJ1dHRvbi1wcmltYXJ5L21vZGFsLWJ1dHRvbi1wcmltYXJ5LmNvbXBvbmVudCc7XG5pbXBvcnQge01vZGFsQnV0dG9uU2Vjb25kYXJ5Q29tcG9uZW50fSBmcm9tICcuL21vZGFsLWJ1dHRvbi1zZWNvbmRhcnkvbW9kYWwtYnV0dG9uLXNlY29uZGFyeS5jb21wb25lbnQnO1xuaW1wb3J0IHtEZXN5Q29udGVudENoaWxkfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZGVjb3JhdG9ycy9kZXN5LWNvbnRlbnQtY2hpbGQuZGVjb3JhdG9yJztcbmltcG9ydCB7IE1vZGFsQnV0dG9uTG9hZGVyUHJpbWFyeUNvbXBvbmVudCB9IGZyb20gJy4vbW9kYWwtYnV0dG9uLWxvYWRlci1wcmltYXJ5L21vZGFsLWJ1dHRvbi1sb2FkZXItcHJpbWFyeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTW9kYWxCdXR0b25Mb2FkZXJTZWNvbmRhcnlDb21wb25lbnQgfSBmcm9tICcuL21vZGFsLWJ1dHRvbi1sb2FkZXItc2Vjb25kYXJ5L21vZGFsLWJ1dHRvbi1sb2FkZXItc2Vjb25kYXJ5LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Rlc3ktbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vbW9kYWwuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIE1vZGFsQ29tcG9uZW50IGV4dGVuZHMgQWNjZXNzaWJpbGl0eUNvbXBvbmVudCB7XG5cbiAgQElucHV0KCkgdGl0bGU6IE1vZGFsRGF0YTtcbiAgQElucHV0KCkgZGVzY3JpcHRpb246IE1vZGFsRGF0YTtcbiAgQElucHV0KCkgaXRlbXNQcmltYXJ5OiBNb2RhbEJ1dHRvbkRhdGFbXTtcbiAgQElucHV0KCkgaXRlbXNTZWNvbmRhcnk6IE1vZGFsQnV0dG9uRGF0YVtdO1xuICBASW5wdXQoKSBpdGVtc0xvYWRlclByaW1hcnk6IE1vZGFsQnV0dG9uRGF0YVtdO1xuICBASW5wdXQoKSBpdGVtc0xvYWRlclNlY29uZGFyeTogTW9kYWxCdXR0b25EYXRhW107XG4gIEBJbnB1dCgpIGljb246IE1vZGFsSWNvbkRhdGE7XG4gIEBJbnB1dCgpIGhlYWRpbmdMZXZlbDogbnVtYmVyO1xuXG4gIEBJbnB1dCgpIGlzRGlzbWlzc2libGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsYXNzZXM6IHN0cmluZztcbiAgQElucHV0KCkgY2FsbGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBPdXRwdXQoKSBjbG9zZU1vZGFsOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjbGlja0J1dHRvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQERlc3lDb250ZW50Q2hpbGQoKVxuICBAQ29udGVudENoaWxkcmVuKFRpdGxlQ29tcG9uZW50KSB0aXRsZUNvbXBvbmVudDogVGl0bGVDb21wb25lbnQ7XG5cbiAgQERlc3lDb250ZW50Q2hpbGQoKVxuICBAQ29udGVudENoaWxkcmVuKERlc2NyaXB0aW9uQ29tcG9uZW50KSBkZXNjcmlwdGlvbkNvbXBvbmVudDogRGVzY3JpcHRpb25Db21wb25lbnQ7XG5cbiAgQERlc3lDb250ZW50Q2hpbGQoKVxuICBAQ29udGVudENoaWxkcmVuKENvbnRlbnRDb21wb25lbnQpIGNvbnRlbnRDb21wb25lbnQ6IENvbnRlbnRDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihNb2RhbEJ1dHRvblByaW1hcnlDb21wb25lbnQpIHByaW1hcnlCdXR0b25Db21wb25lbnRzOiBRdWVyeUxpc3Q8TW9kYWxCdXR0b25QcmltYXJ5Q29tcG9uZW50PjtcbiAgQENvbnRlbnRDaGlsZHJlbihNb2RhbEJ1dHRvblNlY29uZGFyeUNvbXBvbmVudCkgc2Vjb25kYXJ5QnV0dG9uQ29tcG9uZW50czogUXVlcnlMaXN0PE1vZGFsQnV0dG9uU2Vjb25kYXJ5Q29tcG9uZW50PjtcblxuICBAQ29udGVudENoaWxkcmVuKE1vZGFsQnV0dG9uTG9hZGVyUHJpbWFyeUNvbXBvbmVudCkgcHJpbWFyeUJ1dHRvbkxvYWRlckNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxNb2RhbEJ1dHRvbkxvYWRlclByaW1hcnlDb21wb25lbnQ+O1xuICBAQ29udGVudENoaWxkcmVuKE1vZGFsQnV0dG9uTG9hZGVyU2Vjb25kYXJ5Q29tcG9uZW50KSBzZWNvbmRhcnlCdXR0b25Mb2FkZXJDb21wb25lbnRzOiBRdWVyeUxpc3Q8TW9kYWxCdXR0b25Mb2FkZXJTZWNvbmRhcnlDb21wb25lbnQ+O1xuXG4gIEBEZXN5Q29udGVudENoaWxkKClcbiAgQENvbnRlbnRDaGlsZHJlbihJY29uQ29tcG9uZW50KSBpY29uQ29tcG9uZW50OiBJY29uQ29tcG9uZW50O1xuXG4gIGhhc0ljb25Db250ZW50ID0gdHJ1ZTtcbiAgZGVzY3JpcHRpb25Jc0h0bWwgPSB0cnVlO1xuICBkZXNjcmlwdGlvbklzRW1wdHkgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBjbG9zZURpYWxvZygpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlTW9kYWwuZW1pdCgpO1xuICB9XG5cbiAgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIGxldCB0eXBlOiBzdHJpbmc7XG4gICAgaWYgKHRoaXMuaWNvbkNvbXBvbmVudCkge1xuICAgICAgdHlwZSA9IHRoaXMuaWNvbkNvbXBvbmVudC50eXBlID8gdGhpcy5pY29uQ29tcG9uZW50LnR5cGUudG9Mb2NhbGVMb3dlckNhc2UoKSA6IG51bGw7XG4gICAgfSBlbHNlIGlmICh0aGlzLmljb24udHlwZSkge1xuICAgICAgdHlwZSA9IHRoaXMuaWNvbi50eXBlID8gdGhpcy5pY29uLnR5cGUudG9Mb2NhbGVMb3dlckNhc2UoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBjaGVja0Rlc2NyaXB0aW9uQ29udGVudChlbGVtZW50OiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgY29uc3QgY2hpbGRzOiBOb2RlTGlzdE9mPENoaWxkTm9kZT4gPSBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hpbGROb2RlcztcbiAgICBsZXQgaGFzSHRtbCA9IGZhbHNlO1xuICAgIGxldCBoYXNDb250ZW50ID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoICYmICFoYXNIdG1sOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBjaGlsZHMuaXRlbShpKTtcbiAgICAgIGlmIChpdGVtLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiBpdGVtLnRleHRDb250ZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0ubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFIHx8IGl0ZW0ubm9kZVR5cGUgPT09IE5vZGUuQ0RBVEFfU0VDVElPTl9OT0RFKSB7XG4gICAgICAgIGhhc0h0bWwgPSB0cnVlO1xuICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkZXNjcmlwdGlvbldhc0VtcHR5ID0gdGhpcy5kZXNjcmlwdGlvbklzRW1wdHk7XG4gICAgdGhpcy5kZXNjcmlwdGlvbklzRW1wdHkgPSAhaGFzQ29udGVudDtcbiAgICB0aGlzLmRlc2NyaXB0aW9uSXNIdG1sID0gaGFzSHRtbDtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGNsaWNrQnV0dG9uRW1pdChpdGVtOiBNb2RhbEJ1dHRvbkRhdGEsIGV2ZW50KTogdm9pZHtcbiAgICB0aGlzLmNsaWNrQnV0dG9uLmVtaXQoZXZlbnQpO1xuXG4gICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBNb2RhbEJ1dHRvblByaW1hcnlDb21wb25lbnQgfHwgaXRlbSBpbnN0YW5jZW9mIE1vZGFsQnV0dG9uU2Vjb25kYXJ5Q29tcG9uZW50IHx8IGl0ZW0gaW5zdGFuY2VvZiBNb2RhbEJ1dHRvbkxvYWRlclByaW1hcnlDb21wb25lbnQgfHwgaXRlbSBpbnN0YW5jZW9mIE1vZGFsQnV0dG9uTG9hZGVyU2Vjb25kYXJ5Q29tcG9uZW50KSB7XG4gICAgICBpdGVtLmNsaWNrRXZlbnQuZW1pdChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlSWNvbkNvbnRlbnRFbXB0eShpc0VtcHR5OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5oYXNJY29uQ29udGVudCA9ICFpc0VtcHR5O1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0VGl0bGVDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgbGV0IGNsYXNzZXMgPSAnYy1oMiBweC1iYXNlIHRleHQtY2VudGVyIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czp1bmRlcmxpbmUnO1xuICAgIGlmICh0aGlzLnRpdGxlQ29tcG9uZW50ICYmIHRoaXMudGl0bGVDb21wb25lbnQuY2xhc3Nlcykge1xuICAgICAgY2xhc3NlcyA9IHRoaXMudGl0bGVDb21wb25lbnQuY2xhc3NlcztcbiAgICB9IGVsc2UgaWYgKHRoaXMudGl0bGUgJiYgdGhpcy50aXRsZS5jbGFzc2VzKSB7XG4gICAgICBjbGFzc2VzID0gdGhpcy50aXRsZS5jbGFzc2VzO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIGxldCBjbGFzc2VzID0gJ2MtcGFyYWdyYXBoLWJhc2UgbXktYmFzZSB0ZXh0LWNlbnRlcic7XG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb25Db21wb25lbnQgJiYgdGhpcy5kZXNjcmlwdGlvbkNvbXBvbmVudC5jbGFzc2VzKSB7XG4gICAgICBjbGFzc2VzID0gdGhpcy5kZXNjcmlwdGlvbkNvbXBvbmVudC5jbGFzc2VzO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kZXNjcmlwdGlvbiAmJiB0aGlzLmRlc2NyaXB0aW9uLmNsYXNzZXMpIHtcbiAgICAgIGNsYXNzZXMgPSB0aGlzLmRlc2NyaXB0aW9uLmNsYXNzZXM7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzO1xuICB9XG5cbiAgZ2V0UHJpbWFyeUl0ZW1zKCk6IE1vZGFsQnV0dG9uRGF0YVtdfE1vZGFsQnV0dG9uUHJpbWFyeUNvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5wcmltYXJ5QnV0dG9uQ29tcG9uZW50cyAmJiB0aGlzLnByaW1hcnlCdXR0b25Db21wb25lbnRzLmxlbmd0aCA+IDAgPyB0aGlzLnByaW1hcnlCdXR0b25Db21wb25lbnRzLnRvQXJyYXkoKVxuICAgICAgOiB0aGlzLml0ZW1zUHJpbWFyeTtcbiAgfVxuXG4gIGdldFNlY29uZGFyeUl0ZW1zKCk6IE1vZGFsQnV0dG9uRGF0YVtdfE1vZGFsQnV0dG9uUHJpbWFyeUNvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5zZWNvbmRhcnlCdXR0b25Db21wb25lbnRzICYmIHRoaXMuc2Vjb25kYXJ5QnV0dG9uQ29tcG9uZW50cy5sZW5ndGggPiAwID8gdGhpcy5zZWNvbmRhcnlCdXR0b25Db21wb25lbnRzLnRvQXJyYXkoKVxuICAgICAgOiB0aGlzLml0ZW1zU2Vjb25kYXJ5O1xuICB9XG5cbiAgZ2V0UHJpbWFyeUxvYWRlckl0ZW1zKCk6ICBNb2RhbEJ1dHRvbkRhdGFbXXxNb2RhbEJ1dHRvbkxvYWRlclByaW1hcnlDb21wb25lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMucHJpbWFyeUJ1dHRvbkxvYWRlckNvbXBvbmVudHMgJiYgdGhpcy5wcmltYXJ5QnV0dG9uTG9hZGVyQ29tcG9uZW50cy5sZW5ndGggPiAwID8gdGhpcy5wcmltYXJ5QnV0dG9uTG9hZGVyQ29tcG9uZW50cy50b0FycmF5KCkgOiB0aGlzLml0ZW1zTG9hZGVyUHJpbWFyeTtcbiAgfVxuXG4gIGdldFNlY29uZGFyeUxvYWRlckl0ZW1zKCk6ICBNb2RhbEJ1dHRvbkRhdGFbXXxNb2RhbEJ1dHRvbkxvYWRlclNlY29uZGFyeUNvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5zZWNvbmRhcnlCdXR0b25Mb2FkZXJDb21wb25lbnRzICYmIHRoaXMuc2Vjb25kYXJ5QnV0dG9uTG9hZGVyQ29tcG9uZW50cy5sZW5ndGggPiAwID8gdGhpcy5zZWNvbmRhcnlCdXR0b25Mb2FkZXJDb21wb25lbnRzLnRvQXJyYXkoKSA6IHRoaXMuaXRlbXNMb2FkZXJTZWNvbmRhcnk7XG4gIH1cbn1cbiIsIjxkaXYgW2NsYXNzXT1cIlsgJ210LTE2IHNtOm10LTAgcmVsYXRpdmUgbWF4LXctbGcgbXgtYXV0byBwLWJhc2UgbGc6cC1sZyBib3JkZXIgYm9yZGVyLW5ldXRyYWwtYmFzZSByb3VuZGVkIGJnLXdoaXRlJywgY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICBbYXR0ci5pZF09XCJpZCA/IGlkIDogbnVsbFwiXG4gICAgIFthdHRyLnJvbGVdPVwicm9sZVwiXG4gICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiYXJpYURlc2NyaWJlZEJ5XCJcbiAgICAgW2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2VdPVwiYXJpYUVycm9yTWVzc2FnZVwiXG4gICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiYXJpYUhpZGRlblwiXG4gICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiYXJpYURpc2FibGVkXCJcbiAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJhcmlhQ29udHJvbHNcIlxuICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiYXJpYUN1cnJlbnRcIlxuICAgICBbYXR0ci5hcmlhLWxpdmVdPVwiYXJpYUxpdmVcIlxuICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImFyaWFFeHBhbmRlZFwiXG4gICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiYXJpYUhhc1BvcHVwXCJcbiAgICAgW2F0dHIudGFiaW5kZXhdPVwidGFiaW5kZXhcIj5cbiAgPGRpdiAqbmdJZj1cImljb25Db21wb25lbnQgfHwgaWNvblwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBwLWJhc2VcIj5cbiAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGljb25Db21wb25lbnQsIGh0bWw6IGljb24gPyBpY29uLmh0bWwgOiBudWxsIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImljb25Db21wb25lbnQgPyBpY29uQ29tcG9uZW50LnR5cGUgOiBpY29uLnR5cGVcIj5cbiAgICAgICAgPHN2ZyAqbmdTd2l0Y2hDYXNlPVwiJ2Rpc2NhcmQnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTQwIDE0MFwiIHdpZHRoPVwiMWVtXCIgaGVpZ2h0PVwiMWVtXCIgY2xhc3M9XCJibG9jayB3LTE2IGgtMTYgdGV4dC1hbGVydC1saWdodFwiIGZvY3VzYWJsZT1cImZhbHNlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPjxnIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCI+PHBhdGggZD1cIk00LjM3NSA3MGE2NS42MjUgNjUuNjI1IDAgMTAxMzEuMjUgMCA2NS42MjUgNjUuNjI1IDAgMTAtMTMxLjI1IDB6TTIzLjU5NiAxMTYuNDA0bDkyLjgwOC05Mi44MDhcIiBzdHJva2Utd2lkdGg9XCI4Ljc0OTk5NVwiLz48L2c+PC9zdmc+XG4gICAgICAgIDxzdmcgKm5nU3dpdGNoQ2FzZT1cIidkZWxldGUnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTQwIDE0MFwiIHdpZHRoPVwiMWVtXCIgaGVpZ2h0PVwiMWVtXCIgY2xhc3M9XCJibG9jayB3LTE2IGgtMTYgdGV4dC1hbGVydC1saWdodFwiIGZvY3VzYWJsZT1cImZhbHNlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPjxnIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCI+PHBhdGggZD1cIk0xMDAuNjI1IDEyMi41aC02MS4yNWE4Ljc1IDguNzUgMCAwMS04Ljc1LTguNzVWMzVoNzguNzV2NzguNzVhOC43NSA4Ljc1IDAgMDEtOC43NSA4Ljc1ek01Ni44NzUgOTYuMjV2LTM1TTgzLjEyNSA5Ni4yNXYtMzVNMTMuMTI1IDM1aDExMy43NU04My4xMjUgMTcuNWgtMjYuMjVhOC43NSA4Ljc1IDAgMDAtOC43NSA4Ljc1VjM1aDQzLjc1di04Ljc1YTguNzUgOC43NSAwIDAwLTguNzUtOC43NXpcIiBzdHJva2Utd2lkdGg9XCI4Ljc0OTk5NVwiLz48L2c+PC9zdmc+XG4gICAgICAgIDxzdmcgKm5nU3dpdGNoQ2FzZT1cIidlZGl0J1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE0MCAxNDBcIiB3aWR0aD1cIjFlbVwiIGhlaWdodD1cIjFlbVwiIGNsYXNzPVwiYmxvY2sgdy0xNiBoLTE2IHRleHQtcHJpbWFyeS1saWdodFwiIGZvY3VzYWJsZT1cImZhbHNlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPjxnIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCI+PHBhdGggZD1cIk03My44OSA4Mi40NmwtMjEuNjUyIDMuMDk4IDMuMDkxLTIxLjY2IDU1LjY4NS01NS42ODVhMTMuMTI1IDEzLjEyNSAwIDAxMTguNTYyIDE4LjU2MnpcIiBzdHJva2Utd2lkdGg9XCI4Ljc0OTk5NVwiLz48cGF0aCBkPVwiTTExMS41NDUgODMuMTI1djQzLjc1YTguNzUgOC43NSAwIDAxLTguNzUgOC43NWgtODcuNWE4Ljc1IDguNzUgMCAwMS04Ljc1LTguNzV2LTg3LjVhOC43NSA4Ljc1IDAgMDE4Ljc1LTguNzVoNDMuNzVcIiBzdHJva2Utd2lkdGg9XCI4Ljc0OTk5NVwiLz48L2c+PC9zdmc+XG4gICAgICAgIDxzdmcgKm5nU3dpdGNoQ2FzZT1cIidjaGFuZ2VzJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE0MCAxNDBcIiB3aWR0aD1cIjFlbVwiIGhlaWdodD1cIjFlbVwiIGNsYXNzPVwiYmxvY2sgdy0xNiBoLTE2IHRleHQtcHJpbWFyeS1saWdodFwiIGZvY3VzYWJsZT1cImZhbHNlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPjxnIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCI+PHBhdGggZD1cIk0xMDcuMTEyIDQwLjgzM2E0OC4xMjUgNDguMTI1IDAgMDAtODUuMjM3IDMwLjYwOHYxMy4xNDJNMzUgMTA0LjQ2M2E0OC4xMjUgNDguMTI1IDAgMDA4My4xMjUtMzMuMDIydi04Ljc1XCIgc3Ryb2tlLXdpZHRoPVwiOC43NDk5OTVcIi8+PHBhdGggZD1cIk00LjM3NSA2Ny4wNjZsMTcuNSAxNy41IDE3LjUtMTcuNU0xMzUuNjI1IDgwLjE5bC0xNy41LTE3LjUtMTcuNSAxNy41XCIgc3Ryb2tlLXdpZHRoPVwiOC43NDk5OTVcIi8+PC9nPjwvc3ZnPlxuICAgICAgICA8c3ZnICpuZ1N3aXRjaENhc2U9XCIncHVibGlzaCdcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNDAgMTQwXCIgd2lkdGg9XCIxZW1cIiBoZWlnaHQ9XCIxZW1cIiBjbGFzcz1cImJsb2NrIHctMTYgaC0xNiB0ZXh0LXByaW1hcnktbGlnaHRcIiBmb2N1c2FibGU9XCJmYWxzZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj48ZyBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiPjxwYXRoIGQ9XCJNMTYuMDk0IDkxLjE3YTkuNzA3IDkuNzA3IDAgMDEtNS4xNDUtMTcuOTM4TDExOC43NjcgNS44MzNhOS43IDkuNyAwIDAxMTQuNjc2IDEwLjAzNGwtMjEgMTExLjg0MmE5LjcwNyA5LjcwNyAwIDAxLTE3LjMwMSA0LjAzMUw2NC43NSA5MS4xN3pcIiBzdHJva2Utd2lkdGg9XCI4Ljc0OTk5NVwiLz48cGF0aCBkPVwiTTY0Ljc1IDkxLjE3SDUwLjE2N3YzMC4xNjNhOS43IDkuNyAwIDAwMTUuMTY2IDguMDE1bDE4LjUzOS0xMi42MzV6TTY0Ljc0NCA5MS4xN2w2NC42MzMtODUuMTFcIiBzdHJva2Utd2lkdGg9XCI4Ljc0OTk5NVwiLz48L2c+PC9zdmc+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiaGVhZGluZ0xldmVsID4gMCAmJiBoZWFkaW5nTGV2ZWwgPCA2ID8gaGVhZGluZ0xldmVsIDogMlwiPlxuICAgIDxoMSAqbmdTd2l0Y2hDYXNlPVwiMVwiIFthdHRyLmlkXT1cIidsYWJlbC0nICsgaWRcIiBbY2xhc3NdPVwiZ2V0VGl0bGVDbGFzc2VzKClcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwie1xuICAgICAgICBjb21wb25lbnQ6IHRoaXMudGl0bGVDb21wb25lbnQsXG4gICAgICAgIGh0bWw6IHRoaXMudGl0bGUgPyB0aGlzLnRpdGxlLmh0bWwgOiBudWxsLFxuICAgICAgICB0ZXh0OiB0aGlzLnRpdGxlID8gdGhpcy50aXRsZS50ZXh0IDogbnVsbFxuICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaDE+XG4gICAgPGgyICpuZ1N3aXRjaENhc2U9XCIyXCIgW2F0dHIuaWRdPVwiJ2xhYmVsLScgKyBpZFwiIFtjbGFzc109XCJnZXRUaXRsZUNsYXNzZXMoKVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7XG4gICAgICAgIGNvbXBvbmVudDogdGhpcy50aXRsZUNvbXBvbmVudCxcbiAgICAgICAgaHRtbDogdGhpcy50aXRsZSA/IHRoaXMudGl0bGUuaHRtbCA6IG51bGwsXG4gICAgICAgIHRleHQ6IHRoaXMudGl0bGUgPyB0aGlzLnRpdGxlLnRleHQgOiBudWxsXG4gICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9oMj5cbiAgICA8aDMgKm5nU3dpdGNoQ2FzZT1cIjNcIiBbYXR0ci5pZF09XCInbGFiZWwtJyArIGlkXCIgW2NsYXNzXT1cImdldFRpdGxlQ2xhc3NlcygpXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cIntcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLnRpdGxlQ29tcG9uZW50LFxuICAgICAgICBodG1sOiB0aGlzLnRpdGxlID8gdGhpcy50aXRsZS5odG1sIDogbnVsbCxcbiAgICAgICAgdGV4dDogdGhpcy50aXRsZSA/IHRoaXMudGl0bGUudGV4dCA6IG51bGxcbiAgICAgIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2gzPlxuICAgIDxoNCAqbmdTd2l0Y2hDYXNlPVwiNFwiIFthdHRyLmlkXT1cIidsYWJlbC0nICsgaWRcIiBbY2xhc3NdPVwiZ2V0VGl0bGVDbGFzc2VzKClcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwie1xuICAgICAgICBjb21wb25lbnQ6IHRoaXMudGl0bGVDb21wb25lbnQsXG4gICAgICAgIGh0bWw6IHRoaXMudGl0bGUgPyB0aGlzLnRpdGxlLmh0bWwgOiBudWxsLFxuICAgICAgICB0ZXh0OiB0aGlzLnRpdGxlID8gdGhpcy50aXRsZS50ZXh0IDogbnVsbFxuICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaDQ+XG4gICAgPGg1ICpuZ1N3aXRjaENhc2U9XCI1XCIgW2F0dHIuaWRdPVwiJ2xhYmVsLScgKyBpZFwiIFtjbGFzc109XCJnZXRUaXRsZUNsYXNzZXMoKVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7XG4gICAgICAgIGNvbXBvbmVudDogdGhpcy50aXRsZUNvbXBvbmVudCxcbiAgICAgICAgaHRtbDogdGhpcy50aXRsZSA/IHRoaXMudGl0bGUuaHRtbCA6IG51bGwsXG4gICAgICAgIHRleHQ6IHRoaXMudGl0bGUgPyB0aGlzLnRpdGxlLnRleHQgOiBudWxsXG4gICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9oNT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdiAqbmdJZj1cImRlc2NyaXB0aW9uSXNIdG1sXCIgW2NsYXNzXT1cImdldERlc2NyaXB0aW9uQ2xhc3NlcygpXCJcbiAgICAgICAoZGVzeUNvbnRlbnRDaGFuZ2UpPVwiY2hlY2tEZXNjcmlwdGlvbkNvbnRlbnQoJGV2ZW50KVwiIFtvYnNlcnZlUHJvcGVydGllc109XCJ7IGF0dHJpYnV0ZXM6IGZhbHNlLCBjaGlsZExpc3Q6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUsIHN1YnRyZWU6IHRydWUgfVwiPlxuICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7XG4gICAgICBjb21wb25lbnQ6IGRlc2NyaXB0aW9uQ29tcG9uZW50LFxuICAgICAgaHRtbDogZGVzY3JpcHRpb24gPyBkZXNjcmlwdGlvbi5odG1sIDogbnVsbCxcbiAgICAgIHRleHQ6IGRlc2NyaXB0aW9uID8gZGVzY3JpcHRpb24udGV4dCA6IG51bGxcbiAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8cCAqbmdJZj1cIiFkZXNjcmlwdGlvbklzSHRtbFwiIFtjbGFzc109XCJnZXREZXNjcmlwdGlvbkNsYXNzZXMoKVwiXG4gICAgIChkZXN5Q29udGVudENoYW5nZSk9XCJjaGVja0Rlc2NyaXB0aW9uQ29udGVudCgkZXZlbnQpXCIgW29ic2VydmVQcm9wZXJ0aWVzXT1cInsgYXR0cmlidXRlczogZmFsc2UsIGNoaWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cIntcbiAgICAgIGNvbXBvbmVudDogZGVzY3JpcHRpb25Db21wb25lbnQsXG4gICAgICBodG1sOiBkZXNjcmlwdGlvbiA/IGRlc2NyaXB0aW9uLmh0bWwgOiBudWxsLFxuICAgICAgdGV4dDogZGVzY3JpcHRpb24gPyBkZXNjcmlwdGlvbi50ZXh0IDogbnVsbFxuICAgIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgPC9wPlxuXG4gIDxkaXYgKm5nSWY9XCJjb250ZW50Q29tcG9uZW50IHx8IGNhbGxlclwiIGNsYXNzPVwicC1iYXNlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBjb250ZW50Q29tcG9uZW50LCB0ZW1wbGF0ZTogY2FsbGVyIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC1zbSB3LWZ1bGxcIiAqbmdJZj1cIml0ZW1zUHJpbWFyeSB8fCAocHJpbWFyeUJ1dHRvbkNvbXBvbmVudHMgJiYgcHJpbWFyeUJ1dHRvbkNvbXBvbmVudHMubGVuZ3RoID4gMCkgfHwgaXRlbXNTZWNvbmRhcnkgfHwgKHNlY29uZGFyeUJ1dHRvbkNvbXBvbmVudHMgJiYgc2Vjb25kYXJ5QnV0dG9uQ29tcG9uZW50cy5sZW5ndGggPiAwKVwiXG4gIFtuZ0NsYXNzXT1cIihpdGVtc1ByaW1hcnkgfHwgKHByaW1hcnlCdXR0b25Db21wb25lbnRzICYmIHByaW1hcnlCdXR0b25Db21wb25lbnRzLmxlbmd0aCA+IDApKSAmJiAoaXRlbXNTZWNvbmRhcnkgfHwgKHNlY29uZGFyeUJ1dHRvbkNvbXBvbmVudHMgJiYgc2Vjb25kYXJ5QnV0dG9uQ29tcG9uZW50cy5sZW5ndGggPiAwKSkgPyAnanVzdGlmeS1iZXR3ZWVuJyA6ICdqdXN0aWZ5LWNlbnRlcidcIj5cbiAgICA8bmctdGVtcGxhdGUgI2J1dHRvbnMgbGV0LWl0ZW1zPVwiaXRlbXNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtc21cIiAqbmdJZj1cIml0ZW1zLmxlbmd0aCA9PT0gMVwiPlxuICAgICAgICAgIDxkZXN5LWJ1dHRvbiAoY2xpY2tFdmVudCk9XCJjbGlja0J1dHRvbkVtaXQoaXRlbXNbMF0sICRldmVudClcIlxuICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbXNbMF0uZGlzYWJsZWRcIlxuICAgICAgICAgICBbY2xhc3Nlc109XCJpdGVtc1swXS5jbGFzc2VzXCJcbiAgICAgICAgICAgW2lkXT1cIml0ZW1zWzBdLmlkXCJcbiAgICAgICAgICAgW3RleHRdPVwiaXRlbXNbMF0udGV4dFwiXG4gICAgICAgICAgIFtodG1sXT1cIml0ZW1zWzBdLmh0bWxcIlxuICAgICAgICAgICBbZWxlbWVudF09XCJpdGVtc1swXS5lbGVtZW50XCJcbiAgICAgICAgICAgW25hbWVdPVwiaXRlbXNbMF0ubmFtZVwiXG4gICAgICAgICAgIFt0eXBlXT1cIml0ZW1zWzBdLnR5cGVcIlxuICAgICAgICAgICBbdmFsdWVdPVwiaXRlbXNbMF0udmFsdWVcIlxuICAgICAgICAgICBbaHJlZl09XCJpdGVtc1swXS5ocmVmXCJcbiAgICAgICAgICAgW3RhcmdldF09XCJpdGVtc1swXS50YXJnZXRcIlxuICAgICAgICAgICBbcHJldmVudERvdWJsZUNsaWNrXT1cIml0ZW1zWzBdLnByZXZlbnREb3VibGVDbGlja1wiXG4gICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW1zWzBdLnJvdXRlckxpbmtcIlxuICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZUNsYXNzZXNdPVwiaXRlbXNbMF0ucm91dGVyTGlua0FjdGl2ZUNsYXNzZXNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbXNbMF0sIHRleHQ6IGl0ZW1zWzBdLnRleHQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGVzeS1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gRklYTUUgRGUgbW9tZW50byBzZSBtYW50aWVuZSBlbCBuYnNwIHBvciBubyB0ZW5lciBjbGFzZXMgZGlmZXJlbnRlcyBhIGRlc3ktaHRtbC5cbiAgICAgICAgICAgICAgRWxpbWluYXIgYWwgYWRhcHRhciBhIHVuYSB2ZXJzacOzbiBkZSBkZXN5LWh0bWwgcXVlIGxvIGNvbnRlbXBsZSAtLT5cbiAgICAgICAgPHVsIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLXNtXCIgKm5nSWY9XCJpdGVtcy5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiPlxuICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICA8ZGVzeS1idXR0b24gKGNsaWNrRXZlbnQpPVwiY2xpY2tCdXR0b25FbWl0KGl0ZW0sICRldmVudClcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Nlc109XCJpdGVtLmNsYXNzZXNcIlxuICAgICAgICAgICAgICAgIFtpZF09XCJpdGVtLmlkXCJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCJpdGVtLnRleHRcIlxuICAgICAgICAgICAgICAgIFtodG1sXT1cIml0ZW0uaHRtbFwiXG4gICAgICAgICAgICAgICAgW2VsZW1lbnRdPVwiaXRlbS5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJpdGVtLm5hbWVcIlxuICAgICAgICAgICAgICAgIFt0eXBlXT1cIml0ZW0udHlwZVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICAgIFtocmVmXT1cIml0ZW0uaHJlZlwiXG4gICAgICAgICAgICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldFwiXG4gICAgICAgICAgICAgICAgW3ByZXZlbnREb3VibGVDbGlja109XCJpdGVtLnByZXZlbnREb3VibGVDbGlja1wiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZUNsYXNzZXNdPVwiaXRlbS5yb3V0ZXJMaW5rQWN0aXZlQ2xhc3Nlc1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbSwgdGV4dDogaXRlbS50ZXh0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kZXN5LWJ1dHRvbj5cbiAgICAgICAgICAgIDwvbGk+Jm5ic3A7XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zOyBjb250ZXh0OiB7IGl0ZW1zOiBnZXRQcmltYXJ5SXRlbXMoKSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnM7IGNvbnRleHQ6IHsgaXRlbXM6IGdldFNlY29uZGFyeUl0ZW1zKCkgfVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8IS0tIEJ1dHRvbiBsb2FkZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtc20gdy1mdWxsXCIgKm5nSWY9XCIocHJpbWFyeUJ1dHRvbkxvYWRlckNvbXBvbmVudHMgJiYgcHJpbWFyeUJ1dHRvbkxvYWRlckNvbXBvbmVudHMubGVuZ3RoID4gMCkgfHwgKHNlY29uZGFyeUJ1dHRvbkxvYWRlckNvbXBvbmVudHMgJiYgc2Vjb25kYXJ5QnV0dG9uTG9hZGVyQ29tcG9uZW50cy5sZW5ndGggPiAwKVwiIFxuICBbbmdDbGFzc109XCIoKHByaW1hcnlCdXR0b25Mb2FkZXJDb21wb25lbnRzICYmIHByaW1hcnlCdXR0b25Mb2FkZXJDb21wb25lbnRzLmxlbmd0aCA+IDApKSAmJiAoKHNlY29uZGFyeUJ1dHRvbkxvYWRlckNvbXBvbmVudHMgJiYgc2Vjb25kYXJ5QnV0dG9uTG9hZGVyQ29tcG9uZW50cy5sZW5ndGggPiAwKSkgPyAnanVzdGlmeS1iZXR3ZWVuJyA6ICdqdXN0aWZ5LWNlbnRlcidcIj5cbiAgICA8bmctdGVtcGxhdGUgI2J1dHRvbnNMb2FkZXIgbGV0LWl0ZW1zPVwiaXRlbXNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtc21cIiAqbmdJZj1cIml0ZW1zLmxlbmd0aCA9PT0gMVwiPlxuICAgICAgICAgIDxkZXN5LWJ1dHRvbi1sb2FkZXIgKGNsaWNrRXZlbnQpPVwiY2xpY2tCdXR0b25FbWl0KGl0ZW1zWzBdLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2xvYWRlclRleHRdPVwiaXRlbXNbMF0ubG9hZGVyVGV4dFwiXG4gICAgICAgICAgICAgIFtsb2FkZXJDbGFzc2VzXT1cIml0ZW1zWzBdLmxvYWRlckNsYXNzZXNcIlxuICAgICAgICAgICAgICBbc3RhdGVdPVwiaXRlbXNbMF0uc3RhdGVcIlxuICAgICAgICAgICAgICBbc3VjY2Vzc1RleHRdPVwiaXRlbXNbMF0uc3VjY2Vzc1RleHRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbXNbMF0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbY2xhc3Nlc109XCIoaXRlbXNbMF0uc3RhdGUgPT09IG51bGwgfHwgaXRlbXNbMF0uc3RhdGUgPT09ICdpcy1zdWNjZXNzJykgPyBpdGVtc1swXS5jbGFzc2VzIDogaXRlbXNbMF0uY2xhc3NlcyArICcgYy1idXR0b24tbG9hZGVyLS1pcy1sb2FkaW5nJ1wiXG4gICAgICAgICAgICAgIFtpZF09XCJpdGVtc1swXS5pZFwiXG4gICAgICAgICAgICAgIFt0ZXh0XT1cIml0ZW1zWzBdLnRleHRcIlxuICAgICAgICAgICAgICBbaHRtbF09XCJpdGVtc1swXS5odG1sXCJcbiAgICAgICAgICAgICAgW2VsZW1lbnRdPVwiaXRlbXNbMF0uZWxlbWVudFwiXG4gICAgICAgICAgICAgIFtuYW1lXT1cIml0ZW1zWzBdLm5hbWVcIlxuICAgICAgICAgICAgICBbdHlwZV09XCJpdGVtc1swXS50eXBlXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1zWzBdLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2hyZWZdPVwiaXRlbXNbMF0uaHJlZlwiXG4gICAgICAgICAgICAgIFt0YXJnZXRdPVwiaXRlbXNbMF0udGFyZ2V0XCJcbiAgICAgICAgICAgICAgW3ByZXZlbnREb3VibGVDbGlja109XCJpdGVtc1swXS5wcmV2ZW50RG91YmxlQ2xpY2tcIlxuICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtc1swXS5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVDbGFzc2VzXT1cIml0ZW1zWzBdLnJvdXRlckxpbmtBY3RpdmVDbGFzc2VzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW1zWzBdLCB0ZXh0OiBpdGVtc1swXS50ZXh0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rlc3ktYnV0dG9uLWxvYWRlcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPHVsIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLXNtXCIgKm5nSWY9XCJpdGVtcy5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiPlxuICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICA8ZGVzeS1idXR0b24tbG9hZGVyIChjbGlja0V2ZW50KT1cImNsaWNrQnV0dG9uRW1pdChpdGVtLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtsb2FkZXJUZXh0XT1cIml0ZW0ubG9hZGVyVGV4dFwiXG4gICAgICAgICAgICAgICAgICBbbG9hZGVyQ2xhc3Nlc109XCJpdGVtLmxvYWRlckNsYXNzZXNcIlxuICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cIml0ZW0uc3RhdGVcIlxuICAgICAgICAgICAgICAgICAgW3N1Y2Nlc3NUZXh0XT1cIml0ZW0uc3VjY2Vzc1RleHRcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzZXNdPVwiKGl0ZW0uc3RhdGUgPT09IG51bGwgfHwgaXRlbS5zdGF0ZSA9PT0gJ2lzLXN1Y2Nlc3MnKSA/IGl0ZW0uY2xhc3NlcyA6IGl0ZW0uY2xhc3NlcyArICcgYy1idXR0b24tbG9hZGVyLS1pcy1sb2FkaW5nJ1wiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgICAgICAgICBbdGV4dF09XCJpdGVtLnRleHRcIlxuICAgICAgICAgICAgICAgICAgW2h0bWxdPVwiaXRlbS5odG1sXCJcbiAgICAgICAgICAgICAgICAgIFtlbGVtZW50XT1cIml0ZW0uZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJpdGVtLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiaXRlbS50eXBlXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFtocmVmXT1cIml0ZW0uaHJlZlwiXG4gICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0XCJcbiAgICAgICAgICAgICAgICAgIFtwcmV2ZW50RG91YmxlQ2xpY2tdPVwiaXRlbS5wcmV2ZW50RG91YmxlQ2xpY2tcIlxuICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlQ2xhc3Nlc109XCJpdGVtLnJvdXRlckxpbmtBY3RpdmVDbGFzc2VzXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBpdGVtLCB0ZXh0OiBpdGVtLnRleHQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rlc3ktYnV0dG9uLWxvYWRlcj5cbiAgICAgICAgICAgIDwvbGk+Jm5ic3A7XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zTG9hZGVyOyBjb250ZXh0OiB7IGl0ZW1zOiBnZXRQcmltYXJ5TG9hZGVySXRlbXMoKSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnNMb2FkZXI7IGNvbnRleHQ6IHsgaXRlbXM6IGdldFNlY29uZGFyeUxvYWRlckl0ZW1zKCkgfVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEaXNtaXNzaWJsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSB0b3AtMCByaWdodC0wIHAtc20gbGc6cC1iYXNlXCI+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJjbG9zZURpYWxvZygpXCIgY2xhc3M9XCJwLXNtIGZvY3VzOmJnLXdhcm5pbmctYmFzZSBmb2N1czpib3JkZXItd2FybmluZy1iYXNlIGZvY3VzOnNoYWRvdy1vdXRsaW5lLWJsYWNrIGZvY3VzOnRleHQtYmxhY2sgZm9jdXM6b3V0bGluZS1ub25lXCIgYXJpYS1sYWJlbD1cIlg6IENlcnJhciBsYSB2ZW50YW5hIGVtZXJnZW50ZVwiPlxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE0MCAxNDBcIiB3aWR0aD1cIjFlbVwiIGhlaWdodD1cIjFlbVwiIGNsYXNzPVwidy00IGgtNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj48cGF0aCBkPVwiTTg1LjkxIDcxLjc3YTIuNSAyLjUgMCAwMTAtMy41NGw0Ni4xNi00Ni4xNmExMCAxMCAwIDEwLTE0LjE0LTE0LjE0TDcxLjc3IDU0LjA5YTIuNSAyLjUgMCAwMS0zLjU0IDBMMjIuMDcgNy45M0ExMCAxMCAwIDAwNy45MyAyMi4wN2w0Ni4xNiA0Ni4xNmEyLjUgMi41IDAgMDEwIDMuNTRMNy45MyAxMTcuOTNhMTAgMTAgMCAwMDE0LjE0IDE0LjE0bDQ2LjE2LTQ2LjE2YTIuNSAyLjUgMCAwMTMuNTQgMGw0Ni4xNiA0Ni4xNmExMCAxMCAwIDAwMTQuMTQtMTQuMTR6XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzeS1hbmd1bGFyL3NyYy9saWIvZGVzeS1tb2RhbHMvY29tcG9uZW50cy9tb2RhbC9tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW1vZGFscy9jb21wb25lbnRzL21vZGFsL21vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUVsRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sd0RBQXdELENBQUM7QUFDdEYsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sb0VBQW9FLENBQUM7QUFDeEcsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQ25GLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDREQUE0RCxDQUFDO0FBQzVGLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLHVEQUF1RCxDQUFDO0FBQ2xHLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLDJEQUEyRCxDQUFDO0FBQ3hHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlEQUF5RCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHlFQUF5RSxDQUFDOzs7Ozs7Ozs7QUFNOUgsTUFBTSxPQUFPLGNBQWUsU0FBUSxzQkFBc0I7SUF5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QUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUcwQixjQUFjO3NCQUE5QyxlQUFlO3VCQUFDLGNBQWM7Z0JBR1Esb0JBQW9CO3NCQUExRCxlQUFlO3VCQUFDLG9CQUFvQjtnQkFHRixnQkFBZ0I7c0JBQWxELGVBQWU7dUJBQUMsZ0JBQWdCO2dCQUVhLHVCQUF1QjtzQkFBcEUsZUFBZTt1QkFBQywyQkFBMkI7Z0JBQ0kseUJBQXlCO3NCQUF4RSxlQUFlO3VCQUFDLDZCQUE2QjtnQkFFTSw2QkFBNkI7c0JBQWhGLGVBQWU7dUJBQUMsaUNBQWlDO2dCQUNJLCtCQUErQjtzQkFBcEYsZUFBZTt1QkFBQyxtQ0FBbUM7Z0JBR3BCLGFBQWE7c0JBQTVDLGVBQWU7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY2Nlc3NpYmlsaXR5Q29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBNb2RhbEJ1dHRvbkRhdGEsIE1vZGFsRGF0YSwgTW9kYWxJY29uRGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtUaXRsZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vZGVzeS1jb21tb25zL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7RGVzY3JpcHRpb25Db21wb25lbnR9IGZyb20gJy4uLy4uLy4uL2Rlc3ktY29tbW9ucy9jb21wb25lbnRzL2Rlc2NyaXB0aW9uL2Rlc2NyaXB0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge0ljb25Db21wb25lbnR9IGZyb20gJy4uLy4uLy4uL2Rlc3ktY29tbW9ucy9jb21wb25lbnRzL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtDb250ZW50Q29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi9kZXN5LWNvbW1vbnMvY29tcG9uZW50cy9jb250ZW50L2NvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7TW9kYWxCdXR0b25QcmltYXJ5Q29tcG9uZW50fSBmcm9tICcuL21vZGFsLWJ1dHRvbi1wcmltYXJ5L21vZGFsLWJ1dHRvbi1wcmltYXJ5LmNvbXBvbmVudCc7XG5pbXBvcnQge01vZGFsQnV0dG9uU2Vjb25kYXJ5Q29tcG9uZW50fSBmcm9tICcuL21vZGFsLWJ1dHRvbi1zZWNvbmRhcnkvbW9kYWwtYnV0dG9uLXNlY29uZGFyeS5jb21wb25lbnQnO1xuaW1wb3J0IHtEZXN5Q29udGVudENoaWxkfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZGVjb3JhdG9ycy9kZXN5LWNvbnRlbnQtY2hpbGQuZGVjb3JhdG9yJztcbmltcG9ydCB7IE1vZGFsQnV0dG9uTG9hZGVyUHJpbWFyeUNvbXBvbmVudCB9IGZyb20gJy4vbW9kYWwtYnV0dG9uLWxvYWRlci1wcmltYXJ5L21vZGFsLWJ1dHRvbi1sb2FkZXItcHJpbWFyeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTW9kYWxCdXR0b25Mb2FkZXJTZWNvbmRhcnlDb21wb25lbnQgfSBmcm9tICcuL21vZGFsLWJ1dHRvbi1sb2FkZXItc2Vjb25kYXJ5L21vZGFsLWJ1dHRvbi1sb2FkZXItc2Vjb25kYXJ5LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Rlc3ktbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vbW9kYWwuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIE1vZGFsQ29tcG9uZW50IGV4dGVuZHMgQWNjZXNzaWJpbGl0eUNvbXBvbmVudCB7XG5cbiAgQElucHV0KCkgdGl0bGU6IE1vZGFsRGF0YTtcbiAgQElucHV0KCkgZGVzY3JpcHRpb246IE1vZGFsRGF0YTtcbiAgQElucHV0KCkgaXRlbXNQcmltYXJ5OiBNb2RhbEJ1dHRvbkRhdGFbXTtcbiAgQElucHV0KCkgaXRlbXNTZWNvbmRhcnk6IE1vZGFsQnV0dG9uRGF0YVtdO1xuICBASW5wdXQoKSBpdGVtc0xvYWRlclByaW1hcnk6IE1vZGFsQnV0dG9uRGF0YVtdO1xuICBASW5wdXQoKSBpdGVtc0xvYWRlclNlY29uZGFyeTogTW9kYWxCdXR0b25EYXRhW107XG4gIEBJbnB1dCgpIGljb246IE1vZGFsSWNvbkRhdGE7XG4gIEBJbnB1dCgpIGhlYWRpbmdMZXZlbDogbnVtYmVyO1xuXG4gIEBJbnB1dCgpIGlzRGlzbWlzc2libGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsYXNzZXM6IHN0cmluZztcbiAgQElucHV0KCkgY2FsbGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBPdXRwdXQoKSBjbG9zZU1vZGFsOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjbGlja0J1dHRvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQERlc3lDb250ZW50Q2hpbGQoKVxuICBAQ29udGVudENoaWxkcmVuKFRpdGxlQ29tcG9uZW50KSB0aXRsZUNvbXBvbmVudDogVGl0bGVDb21wb25lbnQ7XG5cbiAgQERlc3lDb250ZW50Q2hpbGQoKVxuICBAQ29udGVudENoaWxkcmVuKERlc2NyaXB0aW9uQ29tcG9uZW50KSBkZXNjcmlwdGlvbkNvbXBvbmVudDogRGVzY3JpcHRpb25Db21wb25lbnQ7XG5cbiAgQERlc3lDb250ZW50Q2hpbGQoKVxuICBAQ29udGVudENoaWxkcmVuKENvbnRlbnRDb21wb25lbnQpIGNvbnRlbnRDb21wb25lbnQ6IENvbnRlbnRDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihNb2RhbEJ1dHRvblByaW1hcnlDb21wb25lbnQpIHByaW1hcnlCdXR0b25Db21wb25lbnRzOiBRdWVyeUxpc3Q8TW9kYWxCdXR0b25QcmltYXJ5Q29tcG9uZW50PjtcbiAgQENvbnRlbnRDaGlsZHJlbihNb2RhbEJ1dHRvblNlY29uZGFyeUNvbXBvbmVudCkgc2Vjb25kYXJ5QnV0dG9uQ29tcG9uZW50czogUXVlcnlMaXN0PE1vZGFsQnV0dG9uU2Vjb25kYXJ5Q29tcG9uZW50PjtcblxuICBAQ29udGVudENoaWxkcmVuKE1vZGFsQnV0dG9uTG9hZGVyUHJpbWFyeUNvbXBvbmVudCkgcHJpbWFyeUJ1dHRvbkxvYWRlckNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxNb2RhbEJ1dHRvbkxvYWRlclByaW1hcnlDb21wb25lbnQ+O1xuICBAQ29udGVudENoaWxkcmVuKE1vZGFsQnV0dG9uTG9hZGVyU2Vjb25kYXJ5Q29tcG9uZW50KSBzZWNvbmRhcnlCdXR0b25Mb2FkZXJDb21wb25lbnRzOiBRdWVyeUxpc3Q8TW9kYWxCdXR0b25Mb2FkZXJTZWNvbmRhcnlDb21wb25lbnQ+O1xuXG4gIEBEZXN5Q29udGVudENoaWxkKClcbiAgQENvbnRlbnRDaGlsZHJlbihJY29uQ29tcG9uZW50KSBpY29uQ29tcG9uZW50OiBJY29uQ29tcG9uZW50O1xuXG4gIGhhc0ljb25Db250ZW50ID0gdHJ1ZTtcbiAgZGVzY3JpcHRpb25Jc0h0bWwgPSB0cnVlO1xuICBkZXNjcmlwdGlvbklzRW1wdHkgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBjbG9zZURpYWxvZygpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlTW9kYWwuZW1pdCgpO1xuICB9XG5cbiAgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIGxldCB0eXBlOiBzdHJpbmc7XG4gICAgaWYgKHRoaXMuaWNvbkNvbXBvbmVudCkge1xuICAgICAgdHlwZSA9IHRoaXMuaWNvbkNvbXBvbmVudC50eXBlID8gdGhpcy5pY29uQ29tcG9uZW50LnR5cGUudG9Mb2NhbGVMb3dlckNhc2UoKSA6IG51bGw7XG4gICAgfSBlbHNlIGlmICh0aGlzLmljb24udHlwZSkge1xuICAgICAgdHlwZSA9IHRoaXMuaWNvbi50eXBlID8gdGhpcy5pY29uLnR5cGUudG9Mb2NhbGVMb3dlckNhc2UoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBjaGVja0Rlc2NyaXB0aW9uQ29udGVudChlbGVtZW50OiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgY29uc3QgY2hpbGRzOiBOb2RlTGlzdE9mPENoaWxkTm9kZT4gPSBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hpbGROb2RlcztcbiAgICBsZXQgaGFzSHRtbCA9IGZhbHNlO1xuICAgIGxldCBoYXNDb250ZW50ID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoICYmICFoYXNIdG1sOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBjaGlsZHMuaXRlbShpKTtcbiAgICAgIGlmIChpdGVtLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiBpdGVtLnRleHRDb250ZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0ubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFIHx8IGl0ZW0ubm9kZVR5cGUgPT09IE5vZGUuQ0RBVEFfU0VDVElPTl9OT0RFKSB7XG4gICAgICAgIGhhc0h0bWwgPSB0cnVlO1xuICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkZXNjcmlwdGlvbldhc0VtcHR5ID0gdGhpcy5kZXNjcmlwdGlvbklzRW1wdHk7XG4gICAgdGhpcy5kZXNjcmlwdGlvbklzRW1wdHkgPSAhaGFzQ29udGVudDtcbiAgICB0aGlzLmRlc2NyaXB0aW9uSXNIdG1sID0gaGFzSHRtbDtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGNsaWNrQnV0dG9uRW1pdChpdGVtOiBNb2RhbEJ1dHRvbkRhdGEsIGV2ZW50KTogdm9pZHtcbiAgICB0aGlzLmNsaWNrQnV0dG9uLmVtaXQoZXZlbnQpO1xuXG4gICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBNb2RhbEJ1dHRvblByaW1hcnlDb21wb25lbnQgfHwgaXRlbSBpbnN0YW5jZW9mIE1vZGFsQnV0dG9uU2Vjb25kYXJ5Q29tcG9uZW50IHx8IGl0ZW0gaW5zdGFuY2VvZiBNb2RhbEJ1dHRvbkxvYWRlclByaW1hcnlDb21wb25lbnQgfHwgaXRlbSBpbnN0YW5jZW9mIE1vZGFsQnV0dG9uTG9hZGVyU2Vjb25kYXJ5Q29tcG9uZW50KSB7XG4gICAgICBpdGVtLmNsaWNrRXZlbnQuZW1pdChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlSWNvbkNvbnRlbnRFbXB0eShpc0VtcHR5OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5oYXNJY29uQ29udGVudCA9ICFpc0VtcHR5O1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0VGl0bGVDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgbGV0IGNsYXNzZXMgPSAnYy1oMiBweC1iYXNlIHRleHQtY2VudGVyIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czp1bmRlcmxpbmUnO1xuICAgIGlmICh0aGlzLnRpdGxlQ29tcG9uZW50ICYmIHRoaXMudGl0bGVDb21wb25lbnQuY2xhc3Nlcykge1xuICAgICAgY2xhc3NlcyA9IHRoaXMudGl0bGVDb21wb25lbnQuY2xhc3NlcztcbiAgICB9IGVsc2UgaWYgKHRoaXMudGl0bGUgJiYgdGhpcy50aXRsZS5jbGFzc2VzKSB7XG4gICAgICBjbGFzc2VzID0gdGhpcy50aXRsZS5jbGFzc2VzO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIGxldCBjbGFzc2VzID0gJ2MtcGFyYWdyYXBoLWJhc2UgbXktYmFzZSB0ZXh0LWNlbnRlcic7XG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb25Db21wb25lbnQgJiYgdGhpcy5kZXNjcmlwdGlvbkNvbXBvbmVudC5jbGFzc2VzKSB7XG4gICAgICBjbGFzc2VzID0gdGhpcy5kZXNjcmlwdGlvbkNvbXBvbmVudC5jbGFzc2VzO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kZXNjcmlwdGlvbiAmJiB0aGlzLmRlc2NyaXB0aW9uLmNsYXNzZXMpIHtcbiAgICAgIGNsYXNzZXMgPSB0aGlzLmRlc2NyaXB0aW9uLmNsYXNzZXM7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzO1xuICB9XG5cbiAgZ2V0UHJpbWFyeUl0ZW1zKCk6IE1vZGFsQnV0dG9uRGF0YVtdfE1vZGFsQnV0dG9uUHJpbWFyeUNvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5wcmltYXJ5QnV0dG9uQ29tcG9uZW50cyAmJiB0aGlzLnByaW1hcnlCdXR0b25Db21wb25lbnRzLmxlbmd0aCA+IDAgPyB0aGlzLnByaW1hcnlCdXR0b25Db21wb25lbnRzLnRvQXJyYXkoKVxuICAgICAgOiB0aGlzLml0ZW1zUHJpbWFyeTtcbiAgfVxuXG4gIGdldFNlY29uZGFyeUl0ZW1zKCk6IE1vZGFsQnV0dG9uRGF0YVtdfE1vZGFsQnV0dG9uUHJpbWFyeUNvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5zZWNvbmRhcnlCdXR0b25Db21wb25lbnRzICYmIHRoaXMuc2Vjb25kYXJ5QnV0dG9uQ29tcG9uZW50cy5sZW5ndGggPiAwID8gdGhpcy5zZWNvbmRhcnlCdXR0b25Db21wb25lbnRzLnRvQXJyYXkoKVxuICAgICAgOiB0aGlzLml0ZW1zU2Vjb25kYXJ5O1xuICB9XG5cbiAgZ2V0UHJpbWFyeUxvYWRlckl0ZW1zKCk6ICBNb2RhbEJ1dHRvbkRhdGFbXXxNb2RhbEJ1dHRvbkxvYWRlclByaW1hcnlDb21wb25lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMucHJpbWFyeUJ1dHRvbkxvYWRlckNvbXBvbmVudHMgJiYgdGhpcy5wcmltYXJ5QnV0dG9uTG9hZGVyQ29tcG9uZW50cy5sZW5ndGggPiAwID8gdGhpcy5wcmltYXJ5QnV0dG9uTG9hZGVyQ29tcG9uZW50cy50b0FycmF5KCkgOiB0aGlzLml0ZW1zTG9hZGVyUHJpbWFyeTtcbiAgfVxuXG4gIGdldFNlY29uZGFyeUxvYWRlckl0ZW1zKCk6ICBNb2RhbEJ1dHRvbkRhdGFbXXxNb2RhbEJ1dHRvbkxvYWRlclNlY29uZGFyeUNvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5zZWNvbmRhcnlCdXR0b25Mb2FkZXJDb21wb25lbnRzICYmIHRoaXMuc2Vjb25kYXJ5QnV0dG9uTG9hZGVyQ29tcG9uZW50cy5sZW5ndGggPiAwID8gdGhpcy5zZWNvbmRhcnlCdXR0b25Mb2FkZXJDb21wb25lbnRzLnRvQXJyYXkoKSA6IHRoaXMuaXRlbXNMb2FkZXJTZWNvbmRhcnk7XG4gIH1cbn1cbiIsIjxkaXYgW2NsYXNzXT1cIlsgJ210LTE2IHNtOm10LTAgcmVsYXRpdmUgbWF4LXctbGcgbXgtYXV0byBwLWJhc2UgbGc6cC1sZyBib3JkZXIgYm9yZGVyLW5ldXRyYWwtYmFzZSByb3VuZGVkIGJnLXdoaXRlJywgY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICBbYXR0ci5pZF09XCJpZCA/IGlkIDogbnVsbFwiXG4gICAgIFthdHRyLnJvbGVdPVwicm9sZVwiXG4gICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiYXJpYURlc2NyaWJlZEJ5XCJcbiAgICAgW2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2VdPVwiYXJpYUVycm9yTWVzc2FnZVwiXG4gICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiYXJpYUhpZGRlblwiXG4gICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiYXJpYURpc2FibGVkXCJcbiAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJhcmlhQ29udHJvbHNcIlxuICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiYXJpYUN1cnJlbnRcIlxuICAgICBbYXR0ci5hcmlhLWxpdmVdPVwiYXJpYUxpdmVcIlxuICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImFyaWFFeHBhbmRlZFwiXG4gICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiYXJpYUhhc1BvcHVwXCJcbiAgICAgW2F0dHIudGFiaW5kZXhdPVwidGFiaW5kZXhcIj5cbiAgPGRpdiAqbmdJZj1cImljb25Db21wb25lbnQgfHwgaWNvblwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBwLWJhc2VcIj5cbiAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGljb25Db21wb25lbnQsIGh0bWw6IGljb24gPyBpY29uLmh0bWwgOiBudWxsIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImljb25Db21wb25lbnQgPyBpY29uQ29tcG9uZW50LnR5cGUgOiBpY29uLnR5cGVcIj5cbiAgICAgICAgPHN2ZyAqbmdTd2l0Y2hDYXNlPVwiJ2Rpc2NhcmQnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjFlbVwiIGhlaWdodD1cIjFlbVwiIGNsYXNzPVwiYmxvY2sgdy0xNiBoLTE2IHRleHQtYWxlcnQtbGlnaHRcIiBmb2N1c2FibGU9XCJmYWxzZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj48cGF0aCBkPVwiTTEyLDBBMTIsMTIsMCwxLDAsMjQsMTIsMTIsMTIsMCwwLDAsMTIsMFpNNS4yOSw1LjI5YTkuNjMsOS42MywwLDAsMSwxMi4yMy0xLC4yNi4yNiwwLDAsMSwwLC40TDQuNjcsMTcuNTZhLjI3LjI3LDAsMCwxLS40LDAsOS40OSw5LjQ5LDAsMCwxLDEtMTIuMjRaTTE4Ljc1LDE4Ljc2YTkuNTMsOS41MywwLDAsMS0xMi4yMywxLC4yNi4yNiwwLDAsMSwwLS40TDE5LjM3LDYuNDlhLjI2LjI2LDAsMCwxLC40LDAsOS40OSw5LjQ5LDAsMCwxLTEsMTIuMjRaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD48L3N2Zz5cbiAgICAgICAgPHN2ZyAqbmdTd2l0Y2hDYXNlPVwiJ2RlbGV0ZSdcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMWVtXCIgaGVpZ2h0PVwiMWVtXCIgY2xhc3M9XCJibG9jayB3LTE2IGgtMTYgdGV4dC1hbGVydC1saWdodFwiIGZvY3VzYWJsZT1cImZhbHNlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPjxnPjxwYXRoIGQ9XCJNMTkuNSw3LjVINC41QS41LjUsMCwwLDAsNCw4VjIyYTIsMiwwLDAsMCwyLDJIMThhMiwyLDAsMCwwLDItMlY4QS41LjUsMCwwLDAsMTkuNSw3LjVabS05LjI1LDEzYS43NS43NSwwLDAsMS0xLjUsMHYtOWEuNzUuNzUsMCwwLDEsMS41LDBabTUsMGEuNzUuNzUsMCwwLDEtMS41LDB2LTlhLjc1Ljc1LDAsMCwxLDEuNSwwWlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+PHBhdGggZD1cIk0yMiw0SDE3LjI1QS4yNS4yNSwwLDAsMSwxNywzLjc1VjIuNUEyLjUsMi41LDAsMCwwLDE0LjUsMGgtNUEyLjUsMi41LDAsMCwwLDcsMi41VjMuNzVBLjI1LjI1LDAsMCwxLDYuNzUsNEgyQTEsMSwwLDAsMCwyLDZIMjJhMSwxLDAsMCwwLDAtMlpNOSwzLjc1VjIuNUEuNS41LDAsMCwxLDkuNSwyaDVhLjUuNSwwLDAsMSwuNS41VjMuNzVhLjI1LjI1LDAsMCwxLS4yNS4yNUg5LjI1QS4yNS4yNSwwLDAsMSw5LDMuNzVaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD48L2c+PC9zdmc+XG4gICAgICAgIDxzdmcgKm5nU3dpdGNoQ2FzZT1cIidwdWJsaXNoJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIxZW1cIiBoZWlnaHQ9XCIxZW1cIiBjbGFzcz1cImJsb2NrIHctMTYgaC0xNiB0ZXh0LXByaW1hcnktbGlnaHRcIiBmb2N1c2FibGU9XCJmYWxzZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj48cGF0aCBkPVwiTTIzLjgyLDEuMTJBLjUuNSwwLDAsMCwyMy4zMSwxbC0yMyw5LjVBLjUuNSwwLDAsMCwwLDExYS41MS41MSwwLDAsMCwuMzIuNDZsNi4zMywyLjQ1YS41Mi41MiwwLDAsMCwuNDctLjA1bDguNC02YS41LjUsMCwwLDEsLjY0Ljc3bC03LDYuNzVhLjUxLjUxLDAsMCwwLS4xNS4zNlYyMi41YS40OS40OSwwLDAsMCwuMzcuNDguNDkuNDksMCwwLDAsLjU2LS4yM2wzLjE3LTUuNDJhLjI1LjI1LDAsMCwxLC4zMy0uMWw1LjgzLDMuMjFhLjUuNSwwLDAsMCwuNzMtLjMzbDQtMTguNUEuNS41LDAsMCwwLDIzLjgyLDEuMTJaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD48L3N2Zz5cbiAgICAgICAgPHN2ZyAqbmdTd2l0Y2hDYXNlPVwiJ2NoYW5nZXMnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjFlbVwiIGhlaWdodD1cIjFlbVwiIGNsYXNzPVwiYmxvY2sgdy0xNiBoLTE2IHRleHQtcHJpbWFyeS1saWdodFwiIGZvY3VzYWJsZT1cImZhbHNlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPjxnPjxwYXRoIGQ9XCJNMTIsMTNhMSwxLDAsMCwwLDEtMVY4YTEsMSwwLDEsMC0yLDB2NEExLDEsMCwwLDAsMTIsMTNaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD48Y2lyY2xlIGN4PVwiMTEuOTlcIiBjeT1cIjE1LjcxXCIgcj1cIjEuMjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9jaXJjbGU+PHBhdGggZD1cIk0xOS4yOSw1LjUzYTkuNzIsOS43MiwwLDAsMC05LjU1LTNBMTAuMjUsMTAuMjUsMCwwLDAsMi4zOCw5LjYxYS4yNi4yNiwwLDAsMS0uMjcuMThsLTEtLjEzYS40Ny40NywwLDAsMC0uNDcuMjIuNDcuNDcsMCwwLDAsMCwuNTJsMi40Nyw0LjM1YS41MS41MSwwLDAsMCwuNDQuMjUuNTIuNTIsMCwwLDAsLjM2LS4xNmwzLjQ3LTMuNTlhLjQ4LjQ4LDAsMCwwLC4xMi0uNTFBLjUuNSwwLDAsMCw3LDEwLjQxbC0xLjg4LS4yNEEuMjMuMjMsMCwwLDEsNSwxMC4wNWEuMjIuMjIsMCwwLDEsMC0uMjEsNy42Nyw3LjY3LDAsMCwxLDUuMzctNC45LDcuMjMsNy4yMywwLDAsMSw3LjEsMi4yNSwxLjI1LDEuMjUsMCwxLDAsMS44Ny0xLjY2WlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+PHBhdGggZD1cIk00Ljc5LDE2LjdhMS4yNCwxLjI0LDAsMCwwLS4xMSwxLjc2LDkuNzIsOS43MiwwLDAsMCw5LjU1LDMsMTAuMjQsMTAuMjQsMCwwLDAsNy4zNy03LjEyLjI0LjI0LDAsMCwxLC4yNy0uMTdsMS4wNi4xMmEuNS41LDAsMCwwLC40OC0uMjIuNDkuNDksMCwwLDAsMC0uNTJsLTIuNS00LjMzQS41MS41MSwwLDAsMCwyMC41NSw5YS41Mi41MiwwLDAsMC0uNDMuMTVsLTMuNDUsMy42MmEuNS41LDAsMCwwLS4xMS41MS40OS40OSwwLDAsMCwuNDEuMzNsMS44NS4yMkEuMjUuMjUsMCwwLDEsMTksMTRhLjIyLjIyLDAsMCwxLDAsLjIxLDcuNjcsNy42NywwLDAsMS01LjM2LDQuOSw3LjI2LDcuMjYsMCwwLDEtNy4xMS0yLjI1QTEuMjQsMS4yNCwwLDAsMCw0Ljc5LDE2LjdaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD48L2c+PC9zdmc+XG4gICAgICAgIDxzdmcgKm5nU3dpdGNoQ2FzZT1cIidlZGl0J1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIxZW1cIiBoZWlnaHQ9XCIxZW1cIiBjbGFzcz1cImJsb2NrIHctMTYgaC0xNiB0ZXh0LXByaW1hcnktbGlnaHRcIiBmb2N1c2FibGU9XCJmYWxzZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj48Zz48cGF0aCBkPVwiTTEzLjk0LDE1YTIsMiwwLDAsMS0uNjcuNDVMOS43MywxNi44NmEyLDIsMCwwLDEtMi42LTIuNmwxLjQxLTMuNTNBMi4xOCwyLjE4LDAsMCwxLDksMTAuMDVsNS44OC01Ljg4YS4yNS4yNSwwLDAsMC0uMTctLjQzSDMuMzdBMy4xMiwzLjEyLDAsMCwwLC4yNSw2Ljg2VjIwLjYyYTMuMTIsMy4xMiwwLDAsMCwzLjEyLDMuMTJIMTcuMTNhMy4xMiwzLjEyLDAsMCwwLDMuMTItMy4xMlY5LjI5YS4yNS4yNSwwLDAsMC0uNDMtLjE3WlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+PHBhdGggZD1cIk0xOC41NywzLjNhLjUxLjUxLDAsMCwwLS43MSwwbC03LjgxLDcuODJhLjM2LjM2LDAsMCwwLS4xMS4xNkw4LjUyLDE0LjgyYS41MS41MSwwLDAsMCwuMTEuNTQuNTQuNTQsMCwwLDAsLjU0LjExbDMuNTQtMS40MmEuNDUuNDUsMCwwLDAsLjE3LS4xMWw3LjgxLTcuODFhLjUxLjUxLDAsMCwwLC4xNS0uMzUuNTMuNTMsMCwwLDAtLjE1LS4zNlpcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPjxwYXRoIGQ9XCJNMjMuMTYsMy42NWEyLDIsMCwwLDAsMC0yLjgyLDIsMiwwLDAsMC0yLjgzLDBMMTkuMjgsMS44OWEuNTYuNTYsMCwwLDAtLjE1LjM1LjQ3LjQ3LDAsMCwwLC4xNS4zNUwyMS40LDQuNzFhLjQ3LjQ3LDAsMCwwLC4zNS4xNS41Ny41NywwLDAsMCwuMzUtLjE1WlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+PC9nPjwvc3ZnPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImhlYWRpbmdMZXZlbCA+IDAgJiYgaGVhZGluZ0xldmVsIDwgNiA/IGhlYWRpbmdMZXZlbCA6IDJcIj5cbiAgICA8aDEgKm5nU3dpdGNoQ2FzZT1cIjFcIiBbYXR0ci5pZF09XCInbGFiZWwtJyArIGlkXCIgW2NsYXNzXT1cImdldFRpdGxlQ2xhc3NlcygpXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cIntcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLnRpdGxlQ29tcG9uZW50LFxuICAgICAgICBodG1sOiB0aGlzLnRpdGxlID8gdGhpcy50aXRsZS5odG1sIDogbnVsbCxcbiAgICAgICAgdGV4dDogdGhpcy50aXRsZSA/IHRoaXMudGl0bGUudGV4dCA6IG51bGxcbiAgICAgIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2gxPlxuICAgIDxoMiAqbmdTd2l0Y2hDYXNlPVwiMlwiIFthdHRyLmlkXT1cIidsYWJlbC0nICsgaWRcIiBbY2xhc3NdPVwiZ2V0VGl0bGVDbGFzc2VzKClcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwie1xuICAgICAgICBjb21wb25lbnQ6IHRoaXMudGl0bGVDb21wb25lbnQsXG4gICAgICAgIGh0bWw6IHRoaXMudGl0bGUgPyB0aGlzLnRpdGxlLmh0bWwgOiBudWxsLFxuICAgICAgICB0ZXh0OiB0aGlzLnRpdGxlID8gdGhpcy50aXRsZS50ZXh0IDogbnVsbFxuICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaDI+XG4gICAgPGgzICpuZ1N3aXRjaENhc2U9XCIzXCIgW2F0dHIuaWRdPVwiJ2xhYmVsLScgKyBpZFwiIFtjbGFzc109XCJnZXRUaXRsZUNsYXNzZXMoKVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7XG4gICAgICAgIGNvbXBvbmVudDogdGhpcy50aXRsZUNvbXBvbmVudCxcbiAgICAgICAgaHRtbDogdGhpcy50aXRsZSA/IHRoaXMudGl0bGUuaHRtbCA6IG51bGwsXG4gICAgICAgIHRleHQ6IHRoaXMudGl0bGUgPyB0aGlzLnRpdGxlLnRleHQgOiBudWxsXG4gICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9oMz5cbiAgICA8aDQgKm5nU3dpdGNoQ2FzZT1cIjRcIiBbYXR0ci5pZF09XCInbGFiZWwtJyArIGlkXCIgW2NsYXNzXT1cImdldFRpdGxlQ2xhc3NlcygpXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cIntcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLnRpdGxlQ29tcG9uZW50LFxuICAgICAgICBodG1sOiB0aGlzLnRpdGxlID8gdGhpcy50aXRsZS5odG1sIDogbnVsbCxcbiAgICAgICAgdGV4dDogdGhpcy50aXRsZSA/IHRoaXMudGl0bGUudGV4dCA6IG51bGxcbiAgICAgIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2g0PlxuICAgIDxoNSAqbmdTd2l0Y2hDYXNlPVwiNVwiIFthdHRyLmlkXT1cIidsYWJlbC0nICsgaWRcIiBbY2xhc3NdPVwiZ2V0VGl0bGVDbGFzc2VzKClcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwie1xuICAgICAgICBjb21wb25lbnQ6IHRoaXMudGl0bGVDb21wb25lbnQsXG4gICAgICAgIGh0bWw6IHRoaXMudGl0bGUgPyB0aGlzLnRpdGxlLmh0bWwgOiBudWxsLFxuICAgICAgICB0ZXh0OiB0aGlzLnRpdGxlID8gdGhpcy50aXRsZS50ZXh0IDogbnVsbFxuICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaDU+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxkaXYgKm5nSWY9XCJkZXNjcmlwdGlvbklzSHRtbFwiIFtjbGFzc109XCJnZXREZXNjcmlwdGlvbkNsYXNzZXMoKVwiXG4gICAgICAgKGRlc3lDb250ZW50Q2hhbmdlKT1cImNoZWNrRGVzY3JpcHRpb25Db250ZW50KCRldmVudClcIiBbb2JzZXJ2ZVByb3BlcnRpZXNdPVwieyBhdHRyaWJ1dGVzOiBmYWxzZSwgY2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH1cIj5cbiAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwie1xuICAgICAgY29tcG9uZW50OiBkZXNjcmlwdGlvbkNvbXBvbmVudCxcbiAgICAgIGh0bWw6IGRlc2NyaXB0aW9uID8gZGVzY3JpcHRpb24uaHRtbCA6IG51bGwsXG4gICAgICB0ZXh0OiBkZXNjcmlwdGlvbiA/IGRlc2NyaXB0aW9uLnRleHQgOiBudWxsXG4gICAgfVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPHAgKm5nSWY9XCIhZGVzY3JpcHRpb25Jc0h0bWxcIiBbY2xhc3NdPVwiZ2V0RGVzY3JpcHRpb25DbGFzc2VzKClcIlxuICAgICAoZGVzeUNvbnRlbnRDaGFuZ2UpPVwiY2hlY2tEZXNjcmlwdGlvbkNvbnRlbnQoJGV2ZW50KVwiIFtvYnNlcnZlUHJvcGVydGllc109XCJ7IGF0dHJpYnV0ZXM6IGZhbHNlLCBjaGlsZExpc3Q6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUsIHN1YnRyZWU6IHRydWUgfVwiPlxuICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7XG4gICAgICBjb21wb25lbnQ6IGRlc2NyaXB0aW9uQ29tcG9uZW50LFxuICAgICAgaHRtbDogZGVzY3JpcHRpb24gPyBkZXNjcmlwdGlvbi5odG1sIDogbnVsbCxcbiAgICAgIHRleHQ6IGRlc2NyaXB0aW9uID8gZGVzY3JpcHRpb24udGV4dCA6IG51bGxcbiAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvcD5cblxuICA8ZGl2ICpuZ0lmPVwiY29udGVudENvbXBvbmVudCB8fCBjYWxsZXJcIiBjbGFzcz1cInAtYmFzZVwiPlxuICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogY29udGVudENvbXBvbmVudCwgdGVtcGxhdGU6IGNhbGxlciB9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtc20gdy1mdWxsXCIgKm5nSWY9XCJpdGVtc1ByaW1hcnkgfHwgKHByaW1hcnlCdXR0b25Db21wb25lbnRzICYmIHByaW1hcnlCdXR0b25Db21wb25lbnRzLmxlbmd0aCA+IDApIHx8IGl0ZW1zU2Vjb25kYXJ5IHx8IChzZWNvbmRhcnlCdXR0b25Db21wb25lbnRzICYmIHNlY29uZGFyeUJ1dHRvbkNvbXBvbmVudHMubGVuZ3RoID4gMClcIlxuICBbbmdDbGFzc109XCIoaXRlbXNQcmltYXJ5IHx8IChwcmltYXJ5QnV0dG9uQ29tcG9uZW50cyAmJiBwcmltYXJ5QnV0dG9uQ29tcG9uZW50cy5sZW5ndGggPiAwKSkgJiYgKGl0ZW1zU2Vjb25kYXJ5IHx8IChzZWNvbmRhcnlCdXR0b25Db21wb25lbnRzICYmIHNlY29uZGFyeUJ1dHRvbkNvbXBvbmVudHMubGVuZ3RoID4gMCkpID8gJ2p1c3RpZnktYmV0d2VlbicgOiAnanVzdGlmeS1jZW50ZXInXCI+XG4gICAgPG5nLXRlbXBsYXRlICNidXR0b25zIGxldC1pdGVtcz1cIml0ZW1zXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbXNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LXNtXCIgKm5nSWY9XCJpdGVtcy5sZW5ndGggPT09IDFcIj5cbiAgICAgICAgICA8ZGVzeS1idXR0b24gKGNsaWNrRXZlbnQpPVwiY2xpY2tCdXR0b25FbWl0KGl0ZW1zWzBdLCAkZXZlbnQpXCJcbiAgICAgICAgICAgW2Rpc2FibGVkXT1cIml0ZW1zWzBdLmRpc2FibGVkXCJcbiAgICAgICAgICAgW2NsYXNzZXNdPVwiaXRlbXNbMF0uY2xhc3Nlc1wiXG4gICAgICAgICAgIFtpZF09XCJpdGVtc1swXS5pZFwiXG4gICAgICAgICAgIFt0ZXh0XT1cIml0ZW1zWzBdLnRleHRcIlxuICAgICAgICAgICBbaHRtbF09XCJpdGVtc1swXS5odG1sXCJcbiAgICAgICAgICAgW2VsZW1lbnRdPVwiaXRlbXNbMF0uZWxlbWVudFwiXG4gICAgICAgICAgIFtuYW1lXT1cIml0ZW1zWzBdLm5hbWVcIlxuICAgICAgICAgICBbdHlwZV09XCJpdGVtc1swXS50eXBlXCJcbiAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1zWzBdLnZhbHVlXCJcbiAgICAgICAgICAgW2hyZWZdPVwiaXRlbXNbMF0uaHJlZlwiXG4gICAgICAgICAgIFt0YXJnZXRdPVwiaXRlbXNbMF0udGFyZ2V0XCJcbiAgICAgICAgICAgW3ByZXZlbnREb3VibGVDbGlja109XCJpdGVtc1swXS5wcmV2ZW50RG91YmxlQ2xpY2tcIlxuICAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtc1swXS5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVDbGFzc2VzXT1cIml0ZW1zWzBdLnJvdXRlckxpbmtBY3RpdmVDbGFzc2VzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW1zWzBdLCB0ZXh0OiBpdGVtc1swXS50ZXh0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rlc3ktYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEZJWE1FIERlIG1vbWVudG8gc2UgbWFudGllbmUgZWwgbmJzcCBwb3Igbm8gdGVuZXIgY2xhc2VzIGRpZmVyZW50ZXMgYSBkZXN5LWh0bWwuXG4gICAgICAgICAgICAgIEVsaW1pbmFyIGFsIGFkYXB0YXIgYSB1bmEgdmVyc2nDs24gZGUgZGVzeS1odG1sIHF1ZSBsbyBjb250ZW1wbGUgLS0+XG4gICAgICAgIDx1bCBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC1zbVwiICpuZ0lmPVwiaXRlbXMubGVuZ3RoID4gMVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIj5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgPGRlc3ktYnV0dG9uIChjbGlja0V2ZW50KT1cImNsaWNrQnV0dG9uRW1pdChpdGVtLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzZXNdPVwiaXRlbS5jbGFzc2VzXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiaXRlbS50ZXh0XCJcbiAgICAgICAgICAgICAgICBbaHRtbF09XCJpdGVtLmh0bWxcIlxuICAgICAgICAgICAgICAgIFtlbGVtZW50XT1cIml0ZW0uZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiaXRlbS5uYW1lXCJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCJpdGVtLnR5cGVcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbaHJlZl09XCJpdGVtLmhyZWZcIlxuICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwiaXRlbS50YXJnZXRcIlxuICAgICAgICAgICAgICAgIFtwcmV2ZW50RG91YmxlQ2xpY2tdPVwiaXRlbS5wcmV2ZW50RG91YmxlQ2xpY2tcIlxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVyTGlua1wiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVDbGFzc2VzXT1cIml0ZW0ucm91dGVyTGlua0FjdGl2ZUNsYXNzZXNcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW0sIHRleHQ6IGl0ZW0udGV4dCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGVzeS1idXR0b24+XG4gICAgICAgICAgICA8L2xpPiZuYnNwO1xuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uczsgY29udGV4dDogeyBpdGVtczogZ2V0UHJpbWFyeUl0ZW1zKCkgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zOyBjb250ZXh0OiB7IGl0ZW1zOiBnZXRTZWNvbmRhcnlJdGVtcygpIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBCdXR0b24gbG9hZGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLXNtIHctZnVsbFwiICpuZ0lmPVwiKHByaW1hcnlCdXR0b25Mb2FkZXJDb21wb25lbnRzICYmIHByaW1hcnlCdXR0b25Mb2FkZXJDb21wb25lbnRzLmxlbmd0aCA+IDApIHx8IChzZWNvbmRhcnlCdXR0b25Mb2FkZXJDb21wb25lbnRzICYmIHNlY29uZGFyeUJ1dHRvbkxvYWRlckNvbXBvbmVudHMubGVuZ3RoID4gMClcIiBcbiAgW25nQ2xhc3NdPVwiKChwcmltYXJ5QnV0dG9uTG9hZGVyQ29tcG9uZW50cyAmJiBwcmltYXJ5QnV0dG9uTG9hZGVyQ29tcG9uZW50cy5sZW5ndGggPiAwKSkgJiYgKChzZWNvbmRhcnlCdXR0b25Mb2FkZXJDb21wb25lbnRzICYmIHNlY29uZGFyeUJ1dHRvbkxvYWRlckNvbXBvbmVudHMubGVuZ3RoID4gMCkpID8gJ2p1c3RpZnktYmV0d2VlbicgOiAnanVzdGlmeS1jZW50ZXInXCI+XG4gICAgPG5nLXRlbXBsYXRlICNidXR0b25zTG9hZGVyIGxldC1pdGVtcz1cIml0ZW1zXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbXNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LXNtXCIgKm5nSWY9XCJpdGVtcy5sZW5ndGggPT09IDFcIj5cbiAgICAgICAgICA8ZGVzeS1idXR0b24tbG9hZGVyIChjbGlja0V2ZW50KT1cImNsaWNrQnV0dG9uRW1pdChpdGVtc1swXSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtsb2FkZXJUZXh0XT1cIml0ZW1zWzBdLmxvYWRlclRleHRcIlxuICAgICAgICAgICAgICBbbG9hZGVyQ2xhc3Nlc109XCJpdGVtc1swXS5sb2FkZXJDbGFzc2VzXCJcbiAgICAgICAgICAgICAgW3N0YXRlXT1cIml0ZW1zWzBdLnN0YXRlXCJcbiAgICAgICAgICAgICAgW3N1Y2Nlc3NUZXh0XT1cIml0ZW1zWzBdLnN1Y2Nlc3NUZXh0XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIml0ZW1zWzBdLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2NsYXNzZXNdPVwiKGl0ZW1zWzBdLnN0YXRlID09PSBudWxsIHx8IGl0ZW1zWzBdLnN0YXRlID09PSAnaXMtc3VjY2VzcycpID8gaXRlbXNbMF0uY2xhc3NlcyA6IGl0ZW1zWzBdLmNsYXNzZXMgKyAnIGMtYnV0dG9uLWxvYWRlci0taXMtbG9hZGluZydcIlxuICAgICAgICAgICAgICBbaWRdPVwiaXRlbXNbMF0uaWRcIlxuICAgICAgICAgICAgICBbdGV4dF09XCJpdGVtc1swXS50ZXh0XCJcbiAgICAgICAgICAgICAgW2h0bWxdPVwiaXRlbXNbMF0uaHRtbFwiXG4gICAgICAgICAgICAgIFtlbGVtZW50XT1cIml0ZW1zWzBdLmVsZW1lbnRcIlxuICAgICAgICAgICAgICBbbmFtZV09XCJpdGVtc1swXS5uYW1lXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiaXRlbXNbMF0udHlwZVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtc1swXS52YWx1ZVwiXG4gICAgICAgICAgICAgIFtocmVmXT1cIml0ZW1zWzBdLmhyZWZcIlxuICAgICAgICAgICAgICBbdGFyZ2V0XT1cIml0ZW1zWzBdLnRhcmdldFwiXG4gICAgICAgICAgICAgIFtwcmV2ZW50RG91YmxlQ2xpY2tdPVwiaXRlbXNbMF0ucHJldmVudERvdWJsZUNsaWNrXCJcbiAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbXNbMF0ucm91dGVyTGlua1wiXG4gICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlQ2xhc3Nlc109XCJpdGVtc1swXS5yb3V0ZXJMaW5rQWN0aXZlQ2xhc3Nlc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBpdGVtc1swXSwgdGV4dDogaXRlbXNbMF0udGV4dCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kZXN5LWJ1dHRvbi1sb2FkZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDx1bCBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC1zbVwiICpuZ0lmPVwiaXRlbXMubGVuZ3RoID4gMVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIj5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgPGRlc3ktYnV0dG9uLWxvYWRlciAoY2xpY2tFdmVudCk9XCJjbGlja0J1dHRvbkVtaXQoaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbbG9hZGVyVGV4dF09XCJpdGVtLmxvYWRlclRleHRcIlxuICAgICAgICAgICAgICAgICAgW2xvYWRlckNsYXNzZXNdPVwiaXRlbS5sb2FkZXJDbGFzc2VzXCJcbiAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJpdGVtLnN0YXRlXCJcbiAgICAgICAgICAgICAgICAgIFtzdWNjZXNzVGV4dF09XCJpdGVtLnN1Y2Nlc3NUZXh0XCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc2VzXT1cIihpdGVtLnN0YXRlID09PSBudWxsIHx8IGl0ZW0uc3RhdGUgPT09ICdpcy1zdWNjZXNzJykgPyBpdGVtLmNsYXNzZXMgOiBpdGVtLmNsYXNzZXMgKyAnIGMtYnV0dG9uLWxvYWRlci0taXMtbG9hZGluZydcIlxuICAgICAgICAgICAgICAgICAgW2lkXT1cIml0ZW0uaWRcIlxuICAgICAgICAgICAgICAgICAgW3RleHRdPVwiaXRlbS50ZXh0XCJcbiAgICAgICAgICAgICAgICAgIFtodG1sXT1cIml0ZW0uaHRtbFwiXG4gICAgICAgICAgICAgICAgICBbZWxlbWVudF09XCJpdGVtLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiaXRlbS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIml0ZW0udHlwZVwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbaHJlZl09XCJpdGVtLmhyZWZcIlxuICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldFwiXG4gICAgICAgICAgICAgICAgICBbcHJldmVudERvdWJsZUNsaWNrXT1cIml0ZW0ucHJldmVudERvdWJsZUNsaWNrXCJcbiAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVyTGlua1wiXG4gICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZUNsYXNzZXNdPVwiaXRlbS5yb3V0ZXJMaW5rQWN0aXZlQ2xhc3Nlc1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbSwgdGV4dDogaXRlbS50ZXh0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kZXN5LWJ1dHRvbi1sb2FkZXI+XG4gICAgICAgICAgICA8L2xpPiZuYnNwO1xuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc0xvYWRlcjsgY29udGV4dDogeyBpdGVtczogZ2V0UHJpbWFyeUxvYWRlckl0ZW1zKCkgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zTG9hZGVyOyBjb250ZXh0OiB7IGl0ZW1zOiBnZXRTZWNvbmRhcnlMb2FkZXJJdGVtcygpIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGlzbWlzc2libGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdG9wLTAgcmlnaHQtMCBwLXNtIGxnOnAtYmFzZVwiPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiIGNsYXNzPVwicC1zbSBmb2N1czpiZy13YXJuaW5nLWJhc2UgZm9jdXM6Ym9yZGVyLXdhcm5pbmctYmFzZSBmb2N1czpzaGFkb3ctb3V0bGluZS1ibGFjayBmb2N1czp0ZXh0LWJsYWNrIGZvY3VzOm91dGxpbmUtbm9uZVwiIGFyaWEtbGFiZWw9XCJYOiBDZXJyYXIgbGEgdmVudGFuYSBlbWVyZ2VudGVcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTQwIDE0MFwiIHdpZHRoPVwiMWVtXCIgaGVpZ2h0PVwiMWVtXCIgY2xhc3M9XCJ3LTQgaC00XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPjxwYXRoIGQ9XCJNODUuOTEgNzEuNzdhMi41IDIuNSAwIDAxMC0zLjU0bDQ2LjE2LTQ2LjE2YTEwIDEwIDAgMTAtMTQuMTQtMTQuMTRMNzEuNzcgNTQuMDlhMi41IDIuNSAwIDAxLTMuNTQgMEwyMi4wNyA3LjkzQTEwIDEwIDAgMDA3LjkzIDIyLjA3bDQ2LjE2IDQ2LjE2YTIuNSAyLjUgMCAwMTAgMy41NEw3LjkzIDExNy45M2ExMCAxMCAwIDAwMTQuMTQgMTQuMTRsNDYuMTYtNDYuMTZhMi41IDIuNSAwIDAxMy41NCAwbDQ2LjE2IDQ2LjE2YTEwIDEwIDAgMDAxNC4xNC0xNC4xNHpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=