@provoly/dashboard 0.13.0 → 0.13.1

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 (96) hide show
  1. package/admin/components/admin-classes/admin-classes-view/admin-attributes-select/admin-attributes-select.component.d.ts +3 -1
  2. package/components/sinceDate/sinceDate.pipe.d.ts +1 -1
  3. package/dataset/components/dataset-detail/dataset-detail.component.d.ts +7 -1
  4. package/dataset/i18n/en.translations.d.ts +2 -0
  5. package/dataset/i18n/fr.translations.d.ts +2 -1
  6. package/dataset/style/_o-pry-dataset-detail.scss +13 -11
  7. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-select/admin-attributes-select.component.mjs +8 -3
  8. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-classes-view.component.mjs +2 -1
  9. package/esm2022/components/sinceDate/sinceDate.pipe.mjs +7 -9
  10. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +26 -8
  11. package/esm2022/dataset/components/dataset.component.mjs +4 -2
  12. package/esm2022/dataset/i18n/en.translations.mjs +3 -1
  13. package/esm2022/dataset/i18n/fr.translations.mjs +4 -3
  14. package/esm2022/dataset/style/css.component.mjs +2 -2
  15. package/esm2022/filters/date/date-filter.component.mjs +3 -3
  16. package/esm2022/filters/number/number-filter.component.mjs +3 -3
  17. package/esm2022/filters/text/text-filter.component.mjs +3 -3
  18. package/esm2022/import/components/import.component.mjs +5 -16
  19. package/esm2022/import/store/import.actions.mjs +1 -1
  20. package/esm2022/import/store/import.effects.mjs +3 -3
  21. package/esm2022/import/store/import.reducer.mjs +5 -13
  22. package/esm2022/import/store/import.selectors.mjs +5 -7
  23. package/esm2022/import/store/import.service.mjs +1 -1
  24. package/esm2022/lib/core/components/accordion/accordion-item/accordion-item.component.mjs +42 -0
  25. package/esm2022/lib/core/components/accordion/accordion.component.mjs +13 -0
  26. package/esm2022/lib/core/components/select/select.component.mjs +3 -3
  27. package/esm2022/lib/core/core.module.mjs +26 -8
  28. package/esm2022/lib/core/i18n/en.translations.mjs +3 -2
  29. package/esm2022/lib/core/i18n/fr.translations.mjs +3 -2
  30. package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +1 -2
  31. package/esm2022/lib/core/public-api.mjs +3 -1
  32. package/esm2022/lib/core/symbol/symbol.service.mjs +53 -15
  33. package/esm2022/lib/core/toolbox/toolbox-manifest.service.mjs +4 -4
  34. package/esm2022/lib/dashboard/components/widgets/base-widget.component.mjs +1 -1
  35. package/esm2022/lib/dashboard/components/widgets/header/widget-header.component.mjs +3 -2
  36. package/esm2022/lib/dashboard/components/widgets/widget-instanciator/widget-instanciator.component.mjs +6 -4
  37. package/esm2022/pipeline/components/pipeline-editor/pipeline-editor.component.mjs +6 -11
  38. package/esm2022/pipeline/style/css.component.mjs +2 -2
  39. package/esm2022/restitution/components/restitution-list/restitution-list.component.mjs +3 -7
  40. package/esm2022/restitution/style/css.component.mjs +2 -2
  41. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +53 -194
  42. package/esm2022/widgets/widget-map/interaction/interaction-manager.class.mjs +146 -0
  43. package/esm2022/widgets/widget-map/public-api.mjs +3 -1
  44. package/fesm2022/provoly-dashboard-admin.mjs +7 -2
  45. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  46. package/fesm2022/provoly-dashboard-components-sinceDate.mjs +6 -8
  47. package/fesm2022/provoly-dashboard-components-sinceDate.mjs.map +1 -1
  48. package/fesm2022/provoly-dashboard-dataset.mjs +35 -12
  49. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  50. package/fesm2022/provoly-dashboard-filters-date.mjs +2 -2
  51. package/fesm2022/provoly-dashboard-filters-date.mjs.map +1 -1
  52. package/fesm2022/provoly-dashboard-filters-number.mjs +2 -2
  53. package/fesm2022/provoly-dashboard-filters-number.mjs.map +1 -1
  54. package/fesm2022/provoly-dashboard-filters-text.mjs +2 -2
  55. package/fesm2022/provoly-dashboard-filters-text.mjs.map +1 -1
  56. package/fesm2022/provoly-dashboard-import.mjs +14 -35
  57. package/fesm2022/provoly-dashboard-import.mjs.map +1 -1
  58. package/fesm2022/provoly-dashboard-pipeline.mjs +15 -19
  59. package/fesm2022/provoly-dashboard-pipeline.mjs.map +1 -1
  60. package/fesm2022/provoly-dashboard-restitution.mjs +4 -8
  61. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  62. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +256 -257
  63. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  64. package/fesm2022/provoly-dashboard.mjs +143 -38
  65. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  66. package/import/components/import.component.d.ts +3 -9
  67. package/import/store/import.actions.d.ts +3 -16
  68. package/import/store/import.effects.d.ts +1 -1
  69. package/import/store/import.reducer.d.ts +2 -5
  70. package/import/store/import.selectors.d.ts +2 -7
  71. package/import/store/import.service.d.ts +2 -2
  72. package/lib/core/components/accordion/accordion-item/accordion-item.component.d.ts +17 -0
  73. package/lib/core/components/accordion/accordion.component.d.ts +6 -0
  74. package/lib/core/core.module.d.ts +15 -11
  75. package/lib/core/i18n/en.translations.d.ts +1 -0
  76. package/lib/core/i18n/fr.translations.d.ts +1 -0
  77. package/lib/core/model/widget-map-manifest.interface.d.ts +0 -1
  78. package/lib/core/public-api.d.ts +2 -0
  79. package/lib/core/symbol/symbol.service.d.ts +18 -2
  80. package/lib/dashboard/components/widgets/base-widget.component.d.ts +1 -1
  81. package/package.json +25 -25
  82. package/pipeline/components/pipeline-editor/pipeline-editor.component.d.ts +1 -3
  83. package/pipeline/style/_o-pipeline.scss +0 -108
  84. package/restitution/components/restitution-list/restitution-list.component.d.ts +0 -2
  85. package/restitution/style/_o-restitution-list.scss +2 -24
  86. package/schematics/ng-add/index.spec.js +9 -0
  87. package/schematics/ng-add/index.spec.js.map +1 -1
  88. package/styles/abstracts/_mixins.scss +14 -0
  89. package/styles/components/_m-filter.scss +0 -1
  90. package/styles/components/_o-accordion.scss +91 -0
  91. package/styles-theme/components-theme/_o-accordion.theme.scss +30 -0
  92. package/styles-theme/components-theme/_o-pipeline.theme.scss +0 -26
  93. package/styles-theme/main-theme.scss +1 -0
  94. package/widgets/widget-map/component/widget-map.component.d.ts +13 -24
  95. package/widgets/widget-map/interaction/interaction-manager.class.d.ts +27 -0
  96. package/widgets/widget-map/public-api.d.ts +2 -0
@@ -12,8 +12,7 @@ import * as i1 from "@ngrx/store";
12
12
  import * as i2 from "../../factory/pipeline-component-factory.service";
13
13
  import * as i3 from "@provoly/dashboard";
14
14
  import * as i4 from "@angular/common";
15
- import * as i5 from "@angular/forms";
16
- import * as i6 from "../../style/css.component";
15
+ import * as i5 from "../../style/css.component";
17
16
  export const MIME_TYPE_PIPELINE_COMPONENT = 'pipeline/component';
18
17
  export const MIME_TYPE_PIPELINE_PROPERTIES = 'pipeline/properties';
19
18
  export class PryPipelineEditorComponent extends SubscriptionnerDirective {
@@ -26,7 +25,6 @@ export class PryPipelineEditorComponent extends SubscriptionnerDirective {
26
25
  this.lGraphs = [];
27
26
  this.actions = [];
28
27
  this.disableEditing = false;
29
- this.categoryOpened = '';
30
28
  this.search$ = new BehaviorSubject({});
31
29
  BaseNode.store = store;
32
30
  BaseNode.check = () => this.check();
@@ -276,18 +274,15 @@ export class PryPipelineEditorComponent extends SubscriptionnerDirective {
276
274
  goBack() {
277
275
  this.goToConsult.emit(this.pipeline);
278
276
  }
279
- toggle(category) {
280
- this.categoryOpened = this.categoryOpened === category ? '' : category;
281
- }
282
- search(category, $event) {
283
- this.search$.next({ ...this.search$.getValue(), [category]: $event });
277
+ search($event) {
278
+ this.search$.next({ ...$event });
284
279
  }
285
280
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryPipelineEditorComponent, deps: [{ token: i1.Store }, { token: i2.PipelineComponentFactoryService }, { token: i3.PryI18nService }], target: i0.ɵɵFactoryTarget.Component }); }
286
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryPipelineEditorComponent, selector: "pry-pipeline-editor", inputs: { pipeline: "pipeline" }, outputs: { goToConsult: "goToConsult" }, viewQueries: [{ propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }, { propertyName: "canvasParent", first: true, predicate: ["canvasParent"], descendants: true }, { propertyName: "componentRef", first: true, predicate: ["specific"], descendants: true, read: ViewContainerRef }], usesInheritance: true, ngImport: i0, template: "<pry-pipeline-css></pry-pipeline-css>\n<div class=\"o-pipeline\">\n <div class=\"o-pipeline__menu\">\n <div class=\"o-accordion\" role=\"tablist\" aria-multiselectable=\"false\">\n <ng-container *ngFor=\"let category of categories$ | async\">\n <h2\n class=\"o-accordion__title\"\n [class.is-active]=\"categoryOpened === category\"\n [style.--border-color]=\"(types$ | async)![category][0].color\"\n >\n <button\n type=\"button\"\n class=\"o-accordion__title__btn\"\n [id]=\"'button_' + category\"\n role=\"tab\"\n [attr.aria-controls]=\"'panel_' + category\"\n [attr.aria-selected]=\"categoryOpened === category\"\n [attr.aria-expanded]=\"categoryOpened === category\"\n (click)=\"toggle(category)\"\n >\n <span>{{ '@pry.pipeline.' + category | i18n }}</span>\n <pry-icon\n [width]=\"15\"\n [height]=\"15\"\n [iconSvg]=\"categoryOpened === category ? 'chevron_top_rounded' : 'chevron_bottom_rounded'\"\n ></pry-icon>\n </button>\n </h2>\n <div\n class=\"o-accordion__panel\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'button_' + category\"\n [id]=\"'panel_' + category\"\n [attr.aria-hidden]=\"categoryOpened !== category\"\n [style.--border-color]=\"(types$ | async)![category][0].color\"\n >\n <ng-container *ngIf=\"categoryOpened === category\">\n <div class=\"o-accordion__panel__head\">\n <input\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.toolbox.catalog.filter.name' | i18n\"\n [ngModel]=\"(search$ | async)[category]\"\n (ngModelChange)=\"search(category, $event)\"\n />\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n </div>\n </ng-container>\n <ng-container *ngIf=\"categoryOpened === category\">\n <ul class=\"o-pipeline__components\">\n <ng-container *ngFor=\"let type of (types$ | async)![category]\">\n <li [draggable]=\"!this.disableEditing\" (dragstart)=\"onDragStart($event, type)\">\n <p class=\"a-p\">{{ type.label }}</p>\n <pry-icon [width]=\"2\" [height]=\"20\" iconSvg=\"info\"></pry-icon>\n </li>\n </ng-container>\n </ul>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-pipeline__workspace\">\n <div class=\"o-pipeline-layout__toolbox\">\n <button class=\"a-btn a-btn--secondary --size-md\" type=\"button\" (click)=\"goBack()\">\n {{ '@pry.pipeline.backToDescription' | i18n }}\n </button>\n <ng-container *ngFor=\"let action of actions\">\n <button type=\"button\" (click)=\"clickedAction(action)\" class=\"a-btn a-btn--secondary --size-md\">\n {{ '@pry.pipeline.' + action.type | i18n }}\n <pry-icon [iconSvg]=\"action.icon\"></pry-icon>\n </button>\n </ng-container>\n </div>\n <div>\n <h1 class=\"a-h1\">{{ this.pipeline?.title }}</h1>\n </div>\n <div class=\"o-pipeline-editor\">\n <div (drop)=\"onDrop($event)\" class=\"o-pipeline-editor__grid\" #canvasParent>\n <canvas #canvas class=\"canvas\"></canvas>\n </div>\n <div class=\"o-pipeline-editor__properties\">\n <div\n class=\"o-pipeline-editor__properties__node\"\n *ngIf=\"selectedNode$ | async as node\"\n [title]=\"node.properties['id']\"\n >\n <h3 class=\"a-h3\">{{ '@pry.pipeline.selectedTask' | i18n }}</h3>\n <h4 class=\"a-h4\">{{ '@pry.pipeline.type' | i18n }}</h4>\n <p class=\"a-p a-p--type\">{{ node.type }}</p>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"{{ node.id }}\">{{ '@pry.pipeline.title' | i18n }}</label>\n <input\n class=\"a-form-field\"\n id=\"{{ node.id }}\"\n type=\"text\"\n [value]=\"node.title\"\n [disabled]=\"disableEditing\"\n (change)=\"changeTitle(node, $event)\"\n />\n </div>\n </div>\n <div class=\"o-pipeline-editor__properties__detail\" [class.is-empty]=\"!selectedNode\">\n <div>\n <div #specific></div>\n </div>\n </div>\n <div *ngIf=\"((errors$ | async)?.length ?? 0) > 0\" class=\"o-pipeline-editor__properties__errors\">\n <div class=\"o-pipeline-editor__properties__errors__title\">\n <pry-icon iconSvg=\"warning-triangle\"></pry-icon>\n <p class=\"a-p\">{{ '@pry.pipeline.errors' | i18n }}:</p>\n </div>\n <ul>\n <li *ngFor=\"let error of errors$ | async\">\n <span class=\"type\">{{\n (error?.nodeId === '-' ? '@pry.pipeline.global' : '@pry.pipeline.node') | i18n\n }}</span>\n {{ error.translated }}\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.PryPipelineCssComponent, selector: "pry-pipeline-css" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
281
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryPipelineEditorComponent, selector: "pry-pipeline-editor", inputs: { pipeline: "pipeline" }, outputs: { goToConsult: "goToConsult" }, viewQueries: [{ propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }, { propertyName: "canvasParent", first: true, predicate: ["canvasParent"], descendants: true }, { propertyName: "componentRef", first: true, predicate: ["specific"], descendants: true, read: ViewContainerRef }], usesInheritance: true, ngImport: i0, template: "<pry-pipeline-css></pry-pipeline-css>\n<div class=\"o-pipeline\">\n <div class=\"o-pipeline__menu\">\n <pry-accordion>\n <pry-accordion-item\n *ngFor=\"let category of categories$ | async; let index = index\"\n [item]=\"category\"\n [borderColor]=\"(types$ | async)![category][0].color\"\n [index]=\"index\"\n [showSearchBar]=\"true\"\n [search$]=\"search$\"\n (search)=\"search($event)\"\n translationStringBase=\"@pry.pipeline.\"\n >\n <ul class=\"o-pipeline__components\">\n <ng-container *ngFor=\"let type of (types$ | async)![category]\">\n <li [draggable]=\"!this.disableEditing\" (dragstart)=\"onDragStart($event, type)\">\n <p class=\"a-p\">{{ type.label }}</p>\n <pry-icon [width]=\"2\" [height]=\"20\" iconSvg=\"info\"></pry-icon>\n </li>\n </ng-container>\n </ul>\n </pry-accordion-item>\n </pry-accordion>\n </div>\n\n <div class=\"o-pipeline__workspace\">\n <div class=\"o-pipeline-layout__toolbox\">\n <button class=\"a-btn a-btn--secondary --size-md\" type=\"button\" (click)=\"goBack()\">\n {{ '@pry.pipeline.backToDescription' | i18n }}\n </button>\n <ng-container *ngFor=\"let action of actions\">\n <button type=\"button\" (click)=\"clickedAction(action)\" class=\"a-btn a-btn--secondary --size-md\">\n {{ '@pry.pipeline.' + action.type | i18n }}\n <pry-icon [iconSvg]=\"action.icon\"></pry-icon>\n </button>\n </ng-container>\n </div>\n <div>\n <h1 class=\"a-h1\">{{ this.pipeline?.title }}</h1>\n </div>\n <div class=\"o-pipeline-editor\">\n <div (drop)=\"onDrop($event)\" class=\"o-pipeline-editor__grid\" #canvasParent>\n <canvas #canvas class=\"canvas\"></canvas>\n </div>\n <div class=\"o-pipeline-editor__properties\">\n <div\n class=\"o-pipeline-editor__properties__node\"\n *ngIf=\"selectedNode$ | async as node\"\n [title]=\"node.properties['id']\"\n >\n <h3 class=\"a-h3\">{{ '@pry.pipeline.selectedTask' | i18n }}</h3>\n <h4 class=\"a-h4\">{{ '@pry.pipeline.type' | i18n }}</h4>\n <p class=\"a-p a-p--type\">{{ node.type }}</p>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"{{ node.id }}\">{{ '@pry.pipeline.title' | i18n }}</label>\n <input\n class=\"a-form-field\"\n id=\"{{ node.id }}\"\n type=\"text\"\n [value]=\"node.title\"\n [disabled]=\"disableEditing\"\n (change)=\"changeTitle(node, $event)\"\n />\n </div>\n </div>\n <div class=\"o-pipeline-editor__properties__detail\" [class.is-empty]=\"!selectedNode\">\n <div>\n <div #specific></div>\n </div>\n </div>\n <div *ngIf=\"((errors$ | async)?.length ?? 0) > 0\" class=\"o-pipeline-editor__properties__errors\">\n <div class=\"o-pipeline-editor__properties__errors__title\">\n <pry-icon iconSvg=\"warning-triangle\"></pry-icon>\n <p class=\"a-p\">{{ '@pry.pipeline.errors' | i18n }}:</p>\n </div>\n <ul>\n <li *ngFor=\"let error of errors$ | async\">\n <span class=\"type\">{{\n (error?.nodeId === '-' ? '@pry.pipeline.global' : '@pry.pipeline.node') | i18n\n }}</span>\n {{ error.translated }}\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AccordionComponent, selector: "pry-accordion" }, { kind: "component", type: i3.AccordionItemComponent, selector: "pry-accordion-item", inputs: ["item", "borderColor", "index", "translationStringBase", "length", "showSearchBar", "search$"], outputs: ["search"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryPipelineCssComponent, selector: "pry-pipeline-css" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
287
282
  }
288
283
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryPipelineEditorComponent, decorators: [{
289
284
  type: Component,
290
- args: [{ selector: 'pry-pipeline-editor', template: "<pry-pipeline-css></pry-pipeline-css>\n<div class=\"o-pipeline\">\n <div class=\"o-pipeline__menu\">\n <div class=\"o-accordion\" role=\"tablist\" aria-multiselectable=\"false\">\n <ng-container *ngFor=\"let category of categories$ | async\">\n <h2\n class=\"o-accordion__title\"\n [class.is-active]=\"categoryOpened === category\"\n [style.--border-color]=\"(types$ | async)![category][0].color\"\n >\n <button\n type=\"button\"\n class=\"o-accordion__title__btn\"\n [id]=\"'button_' + category\"\n role=\"tab\"\n [attr.aria-controls]=\"'panel_' + category\"\n [attr.aria-selected]=\"categoryOpened === category\"\n [attr.aria-expanded]=\"categoryOpened === category\"\n (click)=\"toggle(category)\"\n >\n <span>{{ '@pry.pipeline.' + category | i18n }}</span>\n <pry-icon\n [width]=\"15\"\n [height]=\"15\"\n [iconSvg]=\"categoryOpened === category ? 'chevron_top_rounded' : 'chevron_bottom_rounded'\"\n ></pry-icon>\n </button>\n </h2>\n <div\n class=\"o-accordion__panel\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'button_' + category\"\n [id]=\"'panel_' + category\"\n [attr.aria-hidden]=\"categoryOpened !== category\"\n [style.--border-color]=\"(types$ | async)![category][0].color\"\n >\n <ng-container *ngIf=\"categoryOpened === category\">\n <div class=\"o-accordion__panel__head\">\n <input\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.toolbox.catalog.filter.name' | i18n\"\n [ngModel]=\"(search$ | async)[category]\"\n (ngModelChange)=\"search(category, $event)\"\n />\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n </div>\n </ng-container>\n <ng-container *ngIf=\"categoryOpened === category\">\n <ul class=\"o-pipeline__components\">\n <ng-container *ngFor=\"let type of (types$ | async)![category]\">\n <li [draggable]=\"!this.disableEditing\" (dragstart)=\"onDragStart($event, type)\">\n <p class=\"a-p\">{{ type.label }}</p>\n <pry-icon [width]=\"2\" [height]=\"20\" iconSvg=\"info\"></pry-icon>\n </li>\n </ng-container>\n </ul>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-pipeline__workspace\">\n <div class=\"o-pipeline-layout__toolbox\">\n <button class=\"a-btn a-btn--secondary --size-md\" type=\"button\" (click)=\"goBack()\">\n {{ '@pry.pipeline.backToDescription' | i18n }}\n </button>\n <ng-container *ngFor=\"let action of actions\">\n <button type=\"button\" (click)=\"clickedAction(action)\" class=\"a-btn a-btn--secondary --size-md\">\n {{ '@pry.pipeline.' + action.type | i18n }}\n <pry-icon [iconSvg]=\"action.icon\"></pry-icon>\n </button>\n </ng-container>\n </div>\n <div>\n <h1 class=\"a-h1\">{{ this.pipeline?.title }}</h1>\n </div>\n <div class=\"o-pipeline-editor\">\n <div (drop)=\"onDrop($event)\" class=\"o-pipeline-editor__grid\" #canvasParent>\n <canvas #canvas class=\"canvas\"></canvas>\n </div>\n <div class=\"o-pipeline-editor__properties\">\n <div\n class=\"o-pipeline-editor__properties__node\"\n *ngIf=\"selectedNode$ | async as node\"\n [title]=\"node.properties['id']\"\n >\n <h3 class=\"a-h3\">{{ '@pry.pipeline.selectedTask' | i18n }}</h3>\n <h4 class=\"a-h4\">{{ '@pry.pipeline.type' | i18n }}</h4>\n <p class=\"a-p a-p--type\">{{ node.type }}</p>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"{{ node.id }}\">{{ '@pry.pipeline.title' | i18n }}</label>\n <input\n class=\"a-form-field\"\n id=\"{{ node.id }}\"\n type=\"text\"\n [value]=\"node.title\"\n [disabled]=\"disableEditing\"\n (change)=\"changeTitle(node, $event)\"\n />\n </div>\n </div>\n <div class=\"o-pipeline-editor__properties__detail\" [class.is-empty]=\"!selectedNode\">\n <div>\n <div #specific></div>\n </div>\n </div>\n <div *ngIf=\"((errors$ | async)?.length ?? 0) > 0\" class=\"o-pipeline-editor__properties__errors\">\n <div class=\"o-pipeline-editor__properties__errors__title\">\n <pry-icon iconSvg=\"warning-triangle\"></pry-icon>\n <p class=\"a-p\">{{ '@pry.pipeline.errors' | i18n }}:</p>\n </div>\n <ul>\n <li *ngFor=\"let error of errors$ | async\">\n <span class=\"type\">{{\n (error?.nodeId === '-' ? '@pry.pipeline.global' : '@pry.pipeline.node') | i18n\n }}</span>\n {{ error.translated }}\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
285
+ args: [{ selector: 'pry-pipeline-editor', template: "<pry-pipeline-css></pry-pipeline-css>\n<div class=\"o-pipeline\">\n <div class=\"o-pipeline__menu\">\n <pry-accordion>\n <pry-accordion-item\n *ngFor=\"let category of categories$ | async; let index = index\"\n [item]=\"category\"\n [borderColor]=\"(types$ | async)![category][0].color\"\n [index]=\"index\"\n [showSearchBar]=\"true\"\n [search$]=\"search$\"\n (search)=\"search($event)\"\n translationStringBase=\"@pry.pipeline.\"\n >\n <ul class=\"o-pipeline__components\">\n <ng-container *ngFor=\"let type of (types$ | async)![category]\">\n <li [draggable]=\"!this.disableEditing\" (dragstart)=\"onDragStart($event, type)\">\n <p class=\"a-p\">{{ type.label }}</p>\n <pry-icon [width]=\"2\" [height]=\"20\" iconSvg=\"info\"></pry-icon>\n </li>\n </ng-container>\n </ul>\n </pry-accordion-item>\n </pry-accordion>\n </div>\n\n <div class=\"o-pipeline__workspace\">\n <div class=\"o-pipeline-layout__toolbox\">\n <button class=\"a-btn a-btn--secondary --size-md\" type=\"button\" (click)=\"goBack()\">\n {{ '@pry.pipeline.backToDescription' | i18n }}\n </button>\n <ng-container *ngFor=\"let action of actions\">\n <button type=\"button\" (click)=\"clickedAction(action)\" class=\"a-btn a-btn--secondary --size-md\">\n {{ '@pry.pipeline.' + action.type | i18n }}\n <pry-icon [iconSvg]=\"action.icon\"></pry-icon>\n </button>\n </ng-container>\n </div>\n <div>\n <h1 class=\"a-h1\">{{ this.pipeline?.title }}</h1>\n </div>\n <div class=\"o-pipeline-editor\">\n <div (drop)=\"onDrop($event)\" class=\"o-pipeline-editor__grid\" #canvasParent>\n <canvas #canvas class=\"canvas\"></canvas>\n </div>\n <div class=\"o-pipeline-editor__properties\">\n <div\n class=\"o-pipeline-editor__properties__node\"\n *ngIf=\"selectedNode$ | async as node\"\n [title]=\"node.properties['id']\"\n >\n <h3 class=\"a-h3\">{{ '@pry.pipeline.selectedTask' | i18n }}</h3>\n <h4 class=\"a-h4\">{{ '@pry.pipeline.type' | i18n }}</h4>\n <p class=\"a-p a-p--type\">{{ node.type }}</p>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"{{ node.id }}\">{{ '@pry.pipeline.title' | i18n }}</label>\n <input\n class=\"a-form-field\"\n id=\"{{ node.id }}\"\n type=\"text\"\n [value]=\"node.title\"\n [disabled]=\"disableEditing\"\n (change)=\"changeTitle(node, $event)\"\n />\n </div>\n </div>\n <div class=\"o-pipeline-editor__properties__detail\" [class.is-empty]=\"!selectedNode\">\n <div>\n <div #specific></div>\n </div>\n </div>\n <div *ngIf=\"((errors$ | async)?.length ?? 0) > 0\" class=\"o-pipeline-editor__properties__errors\">\n <div class=\"o-pipeline-editor__properties__errors__title\">\n <pry-icon iconSvg=\"warning-triangle\"></pry-icon>\n <p class=\"a-p\">{{ '@pry.pipeline.errors' | i18n }}:</p>\n </div>\n <ul>\n <li *ngFor=\"let error of errors$ | async\">\n <span class=\"type\">{{\n (error?.nodeId === '-' ? '@pry.pipeline.global' : '@pry.pipeline.node') | i18n\n }}</span>\n {{ error.translated }}\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
291
286
  }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.PipelineComponentFactoryService }, { type: i3.PryI18nService }]; }, propDecorators: { pipeline: [{
292
287
  type: Input
293
288
  }], goToConsult: [{
@@ -302,4 +297,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
302
297
  type: ViewChild,
303
298
  args: ['specific', { read: ViewContainerRef, static: false }]
304
299
  }] } });
305
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3BpcGVsaW5lL2NvbXBvbmVudHMvcGlwZWxpbmUtZWRpdG9yL3BpcGVsaW5lLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9waXBlbGluZS9jb21wb25lbnRzL3BpcGVsaW5lLWVkaXRvci9waXBlbGluZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFHVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBa0Isd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYyxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMzRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLckMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVELE9BQU8sRUFBcUIsZUFBZSxFQUFvQixNQUFNLDhCQUE4QixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7OztBQUdoRSxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxvQkFBb0IsQ0FB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QUFDO0lBRUQsWUFBWSxDQUFDLElBQVk7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQWdCO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3pFLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBZ0IsRUFBRSxNQUFXO1FBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDOzhHQWpWVSwwQkFBMEI7a0dBQTFCLDBCQUEwQiw2WUFLTixnQkFBZ0Isb0RDdENqRCwrc0tBOEhBOzsyRkQ3RmEsMEJBQTBCO2tCQUp0QyxTQUFTOytCQUNFLHFCQUFxQjt1S0FJdEIsUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNjLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUTtnQkFDUSxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ3lDLFlBQVk7c0JBQTdFLFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IERhdGFTb3VyY2VBY3Rpb25zLCBQcnlJMThuU2VydmljZSwgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlIH0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IExHcmFwaCwgTEdyYXBoQ2FudmFzLCBMR3JhcGhOb2RlLCBMaXRlR3JhcGggfSBmcm9tICdsaXRlZ3JhcGguanMnO1xuaW1wb3J0IHsgYXVkaXRUaW1lLCBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGNvbWJpbmVMYXRlc3RXaXRoLCBmcm9tRXZlbnQsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIFBpcGVsaW5lQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgUGlwZWxpbmVDb21wb25lbnRGYWN0b3J5U2VydmljZVxufSBmcm9tICcuLi8uLi9mYWN0b3J5L3BpcGVsaW5lLWNvbXBvbmVudC1mYWN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZU5vZGUgfSBmcm9tICcuLi8uLi9ub2RlLWNsYXNzL2Jhc2Utbm9kZS5jbGFzcyc7XG5pbXBvcnQgeyBOb2RlUGlwZWxpbmVFcnJvciwgUGlwZWxpbmVBY3Rpb25zLCBQaXBlbGluZVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vc3RvcmUvcGlwZWxpbmUuYWN0aW9ucyc7XG5pbXBvcnQgeyBQaXBlbGluZVNlbGVjdG9ycyB9IGZyb20gJy4uLy4uL3N0b3JlL3BpcGVsaW5lLnNlbGVjdG9ycyc7XG5pbXBvcnQgeyBHcmFwaFNlcmlhbGl6ZXJVdGlscyB9IGZyb20gJy4vZ3JhcGgtc2VyaWFsaXplci51dGlscyc7XG5pbXBvcnQgeyBQcnlTZXJpYWxpemVkUGlwZWxpbmUsIFByeVRyYW5zZm8gfSBmcm9tICcuL3BpcGVsaW5lLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjb25zdCBNSU1FX1RZUEVfUElQRUxJTkVfQ09NUE9ORU5UID0gJ3BpcGVsaW5lL2NvbXBvbmVudCc7XG5leHBvcnQgY29uc3QgTUlNRV9UWVBFX1BJUEVMSU5FX1BST1BFUlRJRVMgPSAncGlwZWxpbmUvcHJvcGVydGllcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1waXBlbGluZS1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vcGlwZWxpbmUtZWRpdG9yLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBQcnlQaXBlbGluZUVkaXRvckNvbXBvbmVudCBleHRlbmRzIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBwaXBlbGluZT86IFByeVRyYW5zZm87XG4gIEBPdXRwdXQoKSBnb1RvQ29uc3VsdCA9IG5ldyBFdmVudEVtaXR0ZXI8UHJ5VHJhbnNmbz4oKTtcbiAgQFZpZXdDaGlsZCgnY2FudmFzJykgY2FudmFzITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2NhbnZhc1BhcmVudCcpIGNhbnZhc1BhcmVudCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdzcGVjaWZpYycsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiBmYWxzZSB9KSBjb21wb25lbnRSZWYhOiBWaWV3Q29udGFpbmVyUmVmO1xuICBsR3JhcGhzOiBMR3JhcGhbXSA9IFtdO1xuICBwcml2YXRlIGxHcmFwaENhbnZhcyE6IExHcmFwaENhbnZhcztcbiAgdHlwZXMkOiBPYnNlcnZhYmxlPHsgW2NhdGVnb3J5OiBzdHJpbmddOiBQaXBlbGluZUNvbXBvbmVudERlZmluaXRpb25bXSB9PjtcbiAgY2F0ZWdvcmllcyQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBzZWxlY3RlZE5vZGUkOiBPYnNlcnZhYmxlPEJhc2VOb2RlIHwgdW5kZWZpbmVkPjtcbiAgcmVzcG9uc2UkOiBPYnNlcnZhYmxlPFBpcGVsaW5lUmVzcG9uc2UgfCB1bmRlZmluZWQ+O1xuICBpbnN0YW5jaWF0ZWRDb21wb25lbnQhOiBDb21wb25lbnRSZWY8YW55PjtcbiAgc2VsZWN0ZWROb2RlPzogQmFzZU5vZGU7XG4gIGFjdGlvbnMgPSBbXSBhcyB7IHR5cGU6IHN0cmluZzsgaWNvbjogc3RyaW5nIH1bXTtcbiAgZXJyb3JzJDogT2JzZXJ2YWJsZTwoTm9kZVBpcGVsaW5lRXJyb3IgJiB7IHRyYW5zbGF0ZWQ6IHN0cmluZyB9KVtdPjtcbiAgZGlzYWJsZUVkaXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaW1hZ2VzOiB7IHN0YXJ0OiBIVE1MSW1hZ2VFbGVtZW50OyBhZnRlcjogSFRNTEltYWdlRWxlbWVudCB9O1xuICBjYXRlZ29yeU9wZW5lZDogc3RyaW5nID0gJyc7XG4gIHNlYXJjaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgcGlwZWxpbmVDb21wb25lbnRGYWN0b3J5U2VydmljZTogUGlwZWxpbmVDb21wb25lbnRGYWN0b3J5U2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgQmFzZU5vZGUuc3RvcmUgPSBzdG9yZTtcbiAgICBCYXNlTm9kZS5jaGVjayA9ICgpID0+IHRoaXMuY2hlY2soKTtcblxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGF0YVNvdXJjZUFjdGlvbnMubmFtZWRRdWVyeS5sb2FkKCkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGF0YVNvdXJjZUFjdGlvbnMuZGF0YXNldC5sb2FkRGF0YXNldCgpKTtcblxuICAgIHRoaXMudHlwZXMkID0gY29tYmluZUxhdGVzdChbcGlwZWxpbmVDb21wb25lbnRGYWN0b3J5U2VydmljZS50eXBlc0J5Q2F0ZWdvcmllcyQsIHRoaXMuc2VhcmNoJF0pLnBpcGUoXG4gICAgICBtYXAoKFt0eXBlc0J5Q2F0ZWdvcnksIHNlYXJjaF0pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge30gYXMgeyBbY2F0ZWdvcnk6IHN0cmluZ106IFBpcGVsaW5lQ29tcG9uZW50RGVmaW5pdGlvbltdIH07XG4gICAgICAgIE9iamVjdC5rZXlzKHR5cGVzQnlDYXRlZ29yeSkuZm9yRWFjaCgoY2F0KSA9PiB7XG4gICAgICAgICAgcmVzdWx0W2NhdF0gPSB0eXBlc0J5Q2F0ZWdvcnlbY2F0XS5maWx0ZXIoKHR5cGUpID0+XG4gICAgICAgICAgICB0eXBlLmxhYmVsLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMoKHNlYXJjaFtjYXRdID8/ICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuY2F0ZWdvcmllcyQgPSBwaXBlbGluZUNvbXBvbmVudEZhY3RvcnlTZXJ2aWNlLmNhdGVnb3JpZXMkO1xuXG4gICAgdGhpcy5zZWxlY3RlZE5vZGUkID0gdGhpcy5zdG9yZS5zZWxlY3QoUGlwZWxpbmVTZWxlY3RvcnMuc2VsZWN0ZWROb2RlSWQpLnBpcGUobWFwKChpZCkgPT4gdGhpcy5maW5kTm9kZUJ5SWQoaWQpKSk7XG5cbiAgICB0aGlzLnJlc3BvbnNlJCA9IHRoaXMuc3RvcmUuc2VsZWN0KFBpcGVsaW5lU2VsZWN0b3JzLmNoZWNrUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucmVzcG9uc2UkLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5hbGxOb2Rlcy5mb3JFYWNoKChlcnJvck5vZGUpID0+IHtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgZGVsZXRlIGVycm9yTm9kZT8uYmdjb2xvcjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgKHJlc3BvbnNlPy5zdGF0dXMubWFwKChzdGF0dXMpID0+IHN0YXR1cy5lcnJvcnMpLnJlZHVjZSgocCwgYykgPT4gWy4uLnAsIC4uLmNdLCBbXSkgPz8gW10pXG4gICAgICAgICAgPy5tYXAoKGVycm9yKSA9PiB0aGlzLmZpbmROb2RlQnlJZChlcnJvci5ub2RlSWQpKVxuICAgICAgICAgIC5maWx0ZXIoKGVycm9yTm9kZSkgPT4gISFlcnJvck5vZGUpXG4gICAgICAgICAgLmZvckVhY2goKGVycm9yTm9kZSkgPT4gKGVycm9yTm9kZSEuYmdjb2xvciA9ICcjZDkzNTM1JykpO1xuXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zZWxlY3RlZE5vZGUkLnBpcGUoY29tYmluZUxhdGVzdFdpdGgodGhpcy5yZXNwb25zZSQpKS5zdWJzY3JpYmUoKFtub2RlLCByZXNwb25zZV0pID0+IHtcbiAgICAgIGlmICh0aGlzLmluc3RhbmNpYXRlZENvbXBvbmVudCkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5jbGVhcigpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW1vdmVBY3Rpb24oJ2Rvd24nKTtcbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMucGlwZWxpbmVDb21wb25lbnRGYWN0b3J5U2VydmljZS5nZXQobm9kZT8udHlwZSA/PyAnJyk7XG4gICAgICAgIGlmIChtb2R1bGUpIHtcbiAgICAgICAgICB0aGlzLmluc3RhbmNpYXRlZENvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50UmVmLmNyZWF0ZUNvbXBvbmVudChtb2R1bGUuY29tcG9uZW50KTtcbiAgICAgICAgICB0aGlzLmluc3RhbmNpYXRlZENvbXBvbmVudC5pbnN0YW5jZS5ub2RlID0gbm9kZTtcbiAgICAgICAgICB0aGlzLmluc3RhbmNpYXRlZENvbXBvbmVudC5pbnN0YW5jZS5jaGVja0ZuID0gKCkgPT4ge307XG4gICAgICAgICAgdGhpcy5pbnN0YW5jaWF0ZWRDb21wb25lbnQuaW5zdGFuY2UuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVFZGl0aW5nO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jaWF0ZWRDb21wb25lbnQuaW5zdGFuY2UuY2hlY2tGbiA9ICgpID0+IHRoaXMuY2hlY2soKTtcbiAgICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ1N0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cy5maW5kKChzdGF0dXMpID0+IHN0YXR1cy5ub2RlSWQgPT09IG5vZGUucHJvcGVydGllc1snaWQnXSk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdTdGF0dXMpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jaWF0ZWRDb21wb25lbnQuaW5zdGFuY2UubW9kZWwgPSBtYXRjaGluZ1N0YXR1cy5vdXRNb2RlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ1N1YkdyYXBoTm9kZScpIHtcbiAgICAgICAgICB0aGlzLmFkZEFjdGlvbih7IGljb246ICdleWUtYXJyb3ctZG93bicsIHR5cGU6ICdkb3duJyB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZEFjdGlvbih7IGljb246ICdkZWxldGUnLCB0eXBlOiAnZGVsZXRlJyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQWN0aW9uKCdkZWxldGUnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5zZWxlY3RlZE5vZGUkLnN1YnNjcmliZSgobm9kZSkgPT4gKHRoaXMuc2VsZWN0ZWROb2RlID0gbm9kZSkpKTtcblxuICAgIHRoaXMuZXJyb3JzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmVzcG9uc2UkLCB0aGlzLnNlbGVjdGVkTm9kZSRdKS5waXBlKFxuICAgICAgbWFwKChbcmVzcG9uc2UsIHNlbGVjdGVkTm9kZV0pID0+IFtcbiAgICAgICAgLi4uKHJlc3BvbnNlPy5lcnJvcnMgPz8gW10pLm1hcCgoZXJyb3IpID0+ICh7IC4uLmVycm9yLCBub2RlSWQ6ICctJyB9KSksXG4gICAgICAgIC4uLihyZXNwb25zZT8uc3RhdHVzLmZpbmQoKHN0YXR1cykgPT4gc3RhdHVzLm5vZGVJZCA9PT0gKHNlbGVjdGVkTm9kZT8ucHJvcGVydGllc1snaWQnXSA/PyAnLS0tLS0nKSk/LmVycm9ycyA/P1xuICAgICAgICAgIFtdKVxuICAgICAgXSksXG4gICAgICBtYXAoKGVycm9ycykgPT5cbiAgICAgICAgZXJyb3JzLm1hcCgoZXJyb3IpID0+ICh7XG4gICAgICAgICAgLi4uZXJyb3IsXG4gICAgICAgICAgdHJhbnNsYXRlZDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0BwcnkucGlwZWxpbmUuY29kZXMuJyArIGVycm9yLmNvZGUsIGVycm9yKVxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxuICAgICAgICAucGlwZShhdWRpdFRpbWUoMTAwKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vblJlc2l6ZSgpO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmltYWdlcyA9IHtcbiAgICAgIHN0YXJ0OiBuZXcgSW1hZ2UoKSxcbiAgICAgIGFmdGVyOiBuZXcgSW1hZ2UoKVxuICAgIH07XG4gICAgdGhpcy5pbWFnZXMuc3RhcnQuc3JjID0gJy9hc3NldHMvYmFja2dyb3VuZHMvaW1nX3Byb2Nlc3N1cy5wbmcnO1xuICAgIHRoaXMuaW1hZ2VzLmFmdGVyLnNyYyA9ICcnO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRHcmFwaCgpIHtcbiAgICByZXR1cm4gdGhpcy5sR3JhcGhzW3RoaXMubEdyYXBocy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIGdldCBhbGxOb2RlcygpOiBCYXNlTm9kZVtdIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEdyYXBoPy5fbm9kZXMgPz8gW107XG4gIH1cblxuICBnZXQgYmFja2dyb3VuZEltYWdlKCkge1xuICAgIHJldHVybiAodGhpcy5waXBlbGluZT8ubm9kZXMgPz8gW10pLmxlbmd0aCA+IDAgPyB0aGlzLmltYWdlcy5hZnRlciA6IHRoaXMuaW1hZ2VzLnN0YXJ0O1xuICB9XG5cbiAgZmluZE5vZGVCeUlkKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hbGxOb2Rlcy5maW5kKChub2RlKSA9PiBub2RlLnByb3BlcnRpZXNbJ2lkJ10gPT09IGlkKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxHcmFwaHMucHVzaChuZXcgTEdyYXBoKCkpO1xuICAgIHRoaXMubEdyYXBoQ2FudmFzID0gbmV3IExHcmFwaENhbnZhcyh0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LCB0aGlzLmN1cnJlbnRHcmFwaCk7XG4gICAgdGhpcy5sR3JhcGhDYW52YXMuYWxsb3dfc2VhcmNoYm94ID0gZmFsc2U7XG4gICAgdGhpcy5sR3JhcGhDYW52YXMudGl0bGVfdGV4dF9mb250ID0gJ2JvbGQgMTRweCBVYnVudHUnO1xuICAgIHRoaXMubEdyYXBoQ2FudmFzLmlubmVyX3RleHRfZm9udCA9ICdub3JtYWwgMTJweCBVYnVudHUnO1xuICAgIHRoaXMubEdyYXBoQ2FudmFzLmRlZmF1bHRfbGlua19jb2xvciA9ICcjMDAwMDAwJztcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5sR3JhcGhDYW52YXMuYmFja2dyb3VuZF9pbWFnZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmxHcmFwaENhbnZhcy5vbkRyYXdCYWNrZ3JvdW5kID0gKGN0eCwgdmVjdG9yKSA9PiB7XG4gICAgICBjb25zdCByZWN0ID0gdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgY3R4LmZpbGxTdHlsZSA9ICd3aGl0ZSc7XG4gICAgICBjdHguZmlsbFJlY3QoMCwgMCwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpO1xuXG4gICAgICBjb25zdCBpbWdTaXplID0gWzMwNiwgMTcxXTtcbiAgICAgIGN0eC5kcmF3SW1hZ2UoXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZEltYWdlLFxuICAgICAgICAocmVjdC53aWR0aCAtIGltZ1NpemVbMF0pIC8gMixcbiAgICAgICAgKHJlY3QuaGVpZ2h0IC0gaW1nU2l6ZVsxXSkgLyAyLFxuICAgICAgICBpbWdTaXplWzBdLFxuICAgICAgICBpbWdTaXplWzFdXG4gICAgICApO1xuICAgIH07XG4gICAgdGhpcy5sR3JhcGhDYW52YXMub25Ob2RlRGVzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUGlwZWxpbmVBY3Rpb25zLnNlbGVjdCh7IGlkOiAnJyB9KSk7XG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnRHcmFwaC5zdGFydCgpO1xuICAgIGlmICh0aGlzLnBpcGVsaW5lKSB7XG4gICAgICBHcmFwaFNlcmlhbGl6ZXJVdGlscy5oeWRyYXRlKHRoaXMucGlwZWxpbmUgYXMgUHJ5U2VyaWFsaXplZFBpcGVsaW5lLCB0aGlzLmN1cnJlbnRHcmFwaCk7XG4gICAgICB0aGlzLmRpc2FibGVFZGl0aW5nID0gdGhpcy5waXBlbGluZS5hY3RpdmU7XG4gICAgfVxuICAgIHRoaXMub25SZXNpemUoKTtcbiAgfVxuXG4gIG9uUmVzaXplKCkge1xuICAgIC8vIE1ha2UgY2FudmFzIHNvIGxpdHRsZSB0aGF0IGl0IGRvZXNuJ3QgaW1wYWN0IGNzcyBzaXplIGNhbGN1bGF0aW9uXG4gICAgdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC53aWR0aCA9IDEwO1xuICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuaGVpZ2h0ID0gMTA7XG4gICAgdGhpcy5sR3JhcGhDYW52YXMucmVzaXplKDEwLCAxMCk7XG5cbiAgICAvLyBMYXRlciwgbWFrZSBpdCBncm93IHRvIHByb3BlciBzaXplXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCByZWN0ID0gdGhpcy5jYW52YXNQYXJlbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQud2lkdGggPSByZWN0LndpZHRoO1xuICAgICAgdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5oZWlnaHQgPSByZWN0LmhlaWdodDtcbiAgICAgIHRoaXMubEdyYXBoQ2FudmFzLnJlc2l6ZShyZWN0LndpZHRoLCByZWN0LmhlaWdodCk7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9LCAxMCk7XG4gIH1cblxuICBkaXNwbGF5R3JhcGgoZ3JhcGg6IExHcmFwaCkge1xuICAgIHRoaXMuY3VycmVudEdyYXBoLnN0b3AoKTtcbiAgICB0aGlzLmxHcmFwaHMucHVzaChncmFwaCk7XG4gICAgdGhpcy5sR3JhcGhDYW52YXMuc2V0R3JhcGgoZ3JhcGgpO1xuICAgIGdyYXBoLnN0YXJ0KCk7XG4gIH1cblxuICBwb3BHcmFwaCgpIHtcbiAgICB0aGlzLmN1cnJlbnRHcmFwaC5zdG9wKCk7XG4gICAgdGhpcy5sR3JhcGhzLmxlbmd0aCA9IHRoaXMubEdyYXBocy5sZW5ndGggLSAxO1xuICAgIHRoaXMuY3VycmVudEdyYXBoLnN0YXJ0KCk7XG4gICAgdGhpcy5sR3JhcGhDYW52YXMuc2V0R3JhcGgodGhpcy5jdXJyZW50R3JhcGgpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUGlwZWxpbmVBY3Rpb25zLnNlbGVjdCh7IGlkOiAnJyB9KSk7XG4gICAgdGhpcy5sR3JhcGhDYW52YXMuZGVzZWxlY3RBbGxOb2RlcygpO1xuICAgIGlmICh0aGlzLmxHcmFwaHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLnJlbW92ZUFjdGlvbigndXAnKTtcbiAgICB9XG4gIH1cblxuICBwdXBHcmFwaChub2RlOiBCYXNlTm9kZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAoISFub2RlLnN1YkdyYXBoKSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLmRpc3BsYXlHcmFwaChub2RlLnN1YkdyYXBoKTtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUGlwZWxpbmVBY3Rpb25zLnNlbGVjdCh7IGlkOiAnJyB9KSk7XG4gICAgICB0aGlzLmxHcmFwaENhbnZhcy5kZXNlbGVjdEFsbE5vZGVzKCk7XG4gICAgICB0aGlzLmFkZEFjdGlvbih7IGljb246ICdleWUtYXJyb3ctdXAnLCB0eXBlOiAndXAnIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrKCkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlRWRpdGluZykge1xuICAgICAgdGhpcy5waXBlbGluZSA9IHtcbiAgICAgICAgLi4udGhpcy5waXBlbGluZSxcbiAgICAgICAgLi4uR3JhcGhTZXJpYWxpemVyVXRpbHMuc2VyaWFsaXplKHRoaXMubEdyYXBoc1swXSwgdGhpcy5waXBlbGluZT8uaWQpXG4gICAgICB9IGFzIFByeVRyYW5zZm87XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBQaXBlbGluZUFjdGlvbnMuY2hlY2soe1xuICAgICAgICAgICAgZ3JhcGg6IHtcbiAgICAgICAgICAgICAgaWQ6IHRoaXMucGlwZWxpbmU/LmlkLFxuICAgICAgICAgICAgICBub2RlczogdGhpcy5waXBlbGluZT8ubm9kZXMsXG4gICAgICAgICAgICAgIGxpbmtzOiB0aGlzLnBpcGVsaW5lPy5saW5rcyxcbiAgICAgICAgICAgICAgdGl0bGU6IHRoaXMucGlwZWxpbmU/LnRpdGxlLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5waXBlbGluZT8uZGVzY3JpcHRpb25cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMuY3VycmVudEdyYXBoPy5jaGFuZ2UoKTtcbiAgfVxuXG4gIGNyZWF0ZU5vZGUodHlwZTogc3RyaW5nLCBwb3NpdGlvbjogW251bWJlciwgbnVtYmVyXSwgYWRkaXRpb25hbFByb3BlcnRpZXM6IGFueSkge1xuICAgIGNvbnN0IHRpdGxlID0gYWRkaXRpb25hbFByb3BlcnRpZXMuX2xhYmVsID8/IHR5cGUuc3BsaXQoJy4nKVt0eXBlLnNwbGl0KCcuJykubGVuZ3RoIC0gMV0gPz8gJz8nO1xuICAgIGNvbnN0IG5vZGVfY29uc3QgPSBMaXRlR3JhcGguY3JlYXRlTm9kZSh0eXBlLCB0aXRsZSwge30pO1xuICAgIGlmIChub2RlX2NvbnN0ICE9PSBudWxsKSB7XG4gICAgICBub2RlX2NvbnN0LnRpdGxlID0gdGl0bGU7XG4gICAgICBub2RlX2NvbnN0LnBvcyA9IHBvc2l0aW9uO1xuICAgICAgT2JqZWN0LmtleXMoYWRkaXRpb25hbFByb3BlcnRpZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBub2RlX2NvbnN0LnByb3BlcnRpZXNba2V5XSA9IGFkZGl0aW9uYWxQcm9wZXJ0aWVzW2tleV07XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jdXJyZW50R3JhcGguYWRkKG5vZGVfY29uc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgY3JlYXRlIG5vZGUgb2YgdHlwZSAke3R5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgb25EcmFnU3RhcnQoJGV2ZW50OiBEcmFnRXZlbnQsIGNvbXBvbmVudDogUGlwZWxpbmVDb21wb25lbnREZWZpbml0aW9uKSB7XG4gICAgaWYgKCEhJGV2ZW50ICYmICEhJGV2ZW50LmRhdGFUcmFuc2ZlciAmJiAhJGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcy5pbmNsdWRlcyhNSU1FX1RZUEVfUElQRUxJTkVfQ09NUE9ORU5UKSkge1xuICAgICAgJGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknO1xuICAgICAgJGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ2NvcHknO1xuICAgICAgJGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKE1JTUVfVFlQRV9QSVBFTElORV9DT01QT05FTlQsIGNvbXBvbmVudC50eXBlKTtcbiAgICAgICRldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShNSU1FX1RZUEVfUElQRUxJTkVfUFJPUEVSVElFUywgSlNPTi5zdHJpbmdpZnkoeyAuLi5jb21wb25lbnQuYWRkaXRpb25hbFByb3BlcnRpZXMgfSkpO1xuICAgIH1cbiAgfVxuXG4gIG9uRHJvcCgkZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghISRldmVudCAmJiAhISRldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIGlmICgkZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluY2x1ZGVzKE1JTUVfVFlQRV9QSVBFTElORV9DT01QT05FTlQpKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSAkZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoTUlNRV9UWVBFX1BJUEVMSU5FX0NPTVBPTkVOVCk7XG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gSlNPTi5wYXJzZSgkZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoTUlNRV9UWVBFX1BJUEVMSU5FX1BST1BFUlRJRVMpKTtcbiAgICAgICAgY29uc3QgY29udmVydGVkRXZlbnQgPSB0aGlzLmxHcmFwaENhbnZhcy5jb252ZXJ0RXZlbnRUb0NhbnZhc09mZnNldCgkZXZlbnQpO1xuICAgICAgICB0aGlzLmNyZWF0ZU5vZGUoY29tcG9uZW50VHlwZSwgW2NvbnZlcnRlZEV2ZW50WzBdLCBjb252ZXJ0ZWRFdmVudFsxXV0sIGFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcbiAgICAgICAgdGhpcy5jaGVjaygpO1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVGl0bGUobm9kZTogTEdyYXBoTm9kZSwgJGV2ZW50OiBFdmVudCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBub2RlLnRpdGxlID0gJGV2ZW50LnRhcmdldD8udmFsdWU7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBjbGlja2VkQWN0aW9uKGFjdGlvbjogYW55KSB7XG4gICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSAndXAnOlxuICAgICAgICB0aGlzLnBvcEdyYXBoKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgIHRoaXMucHVwR3JhcGgodGhpcy5zZWxlY3RlZE5vZGUhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICB0aGlzLmN1cnJlbnRHcmFwaC5yZW1vdmUodGhpcy5zZWxlY3RlZE5vZGUhKTtcbiAgICAgICAgdGhpcy5yZW1vdmVBY3Rpb24oJ2RlbGV0ZScpO1xuICAgICAgICB0aGlzLmNoZWNrKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFBpcGVsaW5lQWN0aW9ucy5zZWxlY3QoeyBpZDogJycgfSkpO1xuICB9XG5cbiAgYWRkQWN0aW9uKGFkZDogeyB0eXBlOiBzdHJpbmc7IGljb246IHN0cmluZyB9KSB7XG4gICAgaWYgKCF0aGlzLmFjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gYWRkLnR5cGUpKSB7XG4gICAgICB0aGlzLmFjdGlvbnMucHVzaChhZGQpO1xuICAgIH1cbiAgICB0aGlzLmFjdGlvbnMuc29ydCgoYSwgYikgPT4gYS50eXBlLmxvY2FsZUNvbXBhcmUoYi50eXBlKSk7XG4gIH1cblxuICByZW1vdmVBY3Rpb24odHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5hY3Rpb25zID0gdGhpcy5hY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSAhPT0gdHlwZSk7XG4gIH1cblxuICBnb0JhY2soKSB7XG4gICAgdGhpcy5nb1RvQ29uc3VsdC5lbWl0KHRoaXMucGlwZWxpbmUpO1xuICB9XG5cbiAgdG9nZ2xlKGNhdGVnb3J5OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNhdGVnb3J5T3BlbmVkID0gdGhpcy5jYXRlZ29yeU9wZW5lZCA9PT0gY2F0ZWdvcnkgPyAnJyA6IGNhdGVnb3J5O1xuICB9XG5cbiAgc2VhcmNoKGNhdGVnb3J5OiBzdHJpbmcsICRldmVudDogYW55KSB7XG4gICAgdGhpcy5zZWFyY2gkLm5leHQoeyAuLi50aGlzLnNlYXJjaCQuZ2V0VmFsdWUoKSwgW2NhdGVnb3J5XTogJGV2ZW50IH0pO1xuICB9XG59XG4iLCI8cHJ5LXBpcGVsaW5lLWNzcz48L3ByeS1waXBlbGluZS1jc3M+XG48ZGl2IGNsYXNzPVwiby1waXBlbGluZVwiPlxuICA8ZGl2IGNsYXNzPVwiby1waXBlbGluZV9fbWVudVwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLWFjY29yZGlvblwiIHJvbGU9XCJ0YWJsaXN0XCIgYXJpYS1tdWx0aXNlbGVjdGFibGU9XCJmYWxzZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcyQgfCBhc3luY1wiPlxuICAgICAgICA8aDJcbiAgICAgICAgICBjbGFzcz1cIm8tYWNjb3JkaW9uX190aXRsZVwiXG4gICAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJjYXRlZ29yeU9wZW5lZCA9PT0gY2F0ZWdvcnlcIlxuICAgICAgICAgIFtzdHlsZS4tLWJvcmRlci1jb2xvcl09XCIodHlwZXMkIHwgYXN5bmMpIVtjYXRlZ29yeV1bMF0uY29sb3JcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cIm8tYWNjb3JkaW9uX190aXRsZV9fYnRuXCJcbiAgICAgICAgICAgIFtpZF09XCInYnV0dG9uXycgKyBjYXRlZ29yeVwiXG4gICAgICAgICAgICByb2xlPVwidGFiXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiJ3BhbmVsXycgKyBjYXRlZ29yeVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImNhdGVnb3J5T3BlbmVkID09PSBjYXRlZ29yeVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImNhdGVnb3J5T3BlbmVkID09PSBjYXRlZ29yeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlKGNhdGVnb3J5KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3sgJ0BwcnkucGlwZWxpbmUuJyArIGNhdGVnb3J5IHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgW2ljb25TdmddPVwiY2F0ZWdvcnlPcGVuZWQgPT09IGNhdGVnb3J5ID8gJ2NoZXZyb25fdG9wX3JvdW5kZWQnIDogJ2NoZXZyb25fYm90dG9tX3JvdW5kZWQnXCJcbiAgICAgICAgICAgID48L3ByeS1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2gyPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJvLWFjY29yZGlvbl9fcGFuZWxcIlxuICAgICAgICAgIHJvbGU9XCJ0YWJwYW5lbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIididXR0b25fJyArIGNhdGVnb3J5XCJcbiAgICAgICAgICBbaWRdPVwiJ3BhbmVsXycgKyBjYXRlZ29yeVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiY2F0ZWdvcnlPcGVuZWQgIT09IGNhdGVnb3J5XCJcbiAgICAgICAgICBbc3R5bGUuLS1ib3JkZXItY29sb3JdPVwiKHR5cGVzJCB8IGFzeW5jKSFbY2F0ZWdvcnldWzBdLmNvbG9yXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXRlZ29yeU9wZW5lZCA9PT0gY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLWFjY29yZGlvbl9fcGFuZWxfX2hlYWRcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0BwcnkudG9vbGJveC5jYXRhbG9nLmZpbHRlci5uYW1lJyB8IGkxOG5cIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIihzZWFyY2gkIHwgYXN5bmMpW2NhdGVnb3J5XVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoKGNhdGVnb3J5LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJzZWFyY2hcIiBbd2lkdGhdPVwiMTdcIiBbaGVpZ2h0XT1cIjE3XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXRlZ29yeU9wZW5lZCA9PT0gY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cIm8tcGlwZWxpbmVfX2NvbXBvbmVudHNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdHlwZSBvZiAodHlwZXMkIHwgYXN5bmMpIVtjYXRlZ29yeV1cIj5cbiAgICAgICAgICAgICAgICA8bGkgW2RyYWdnYWJsZV09XCIhdGhpcy5kaXNhYmxlRWRpdGluZ1wiIChkcmFnc3RhcnQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCB0eXBlKVwiPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhLXBcIj57eyB0eXBlLmxhYmVsIH19PC9wPlxuICAgICAgICAgICAgICAgICAgPHByeS1pY29uIFt3aWR0aF09XCIyXCIgW2hlaWdodF09XCIyMFwiIGljb25Tdmc9XCJpbmZvXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJvLXBpcGVsaW5lX193b3Jrc3BhY2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby1waXBlbGluZS1sYXlvdXRfX3Rvb2xib3hcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5IC0tc2l6ZS1tZFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZ29CYWNrKClcIj5cbiAgICAgICAge3sgJ0BwcnkucGlwZWxpbmUuYmFja1RvRGVzY3JpcHRpb24nIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xpY2tlZEFjdGlvbihhY3Rpb24pXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5IC0tc2l6ZS1tZFwiPlxuICAgICAgICAgIHt7ICdAcHJ5LnBpcGVsaW5lLicgKyBhY3Rpb24udHlwZSB8IGkxOG4gfX1cbiAgICAgICAgICA8cHJ5LWljb24gW2ljb25TdmddPVwiYWN0aW9uLmljb25cIj48L3ByeS1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8aDEgY2xhc3M9XCJhLWgxXCI+e3sgdGhpcy5waXBlbGluZT8udGl0bGUgfX08L2gxPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJvLXBpcGVsaW5lLWVkaXRvclwiPlxuICAgICAgPGRpdiAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiIGNsYXNzPVwiby1waXBlbGluZS1lZGl0b3JfX2dyaWRcIiAjY2FudmFzUGFyZW50PlxuICAgICAgICA8Y2FudmFzICNjYW52YXMgY2xhc3M9XCJjYW52YXNcIj48L2NhbnZhcz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm8tcGlwZWxpbmUtZWRpdG9yX19wcm9wZXJ0aWVzXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIm8tcGlwZWxpbmUtZWRpdG9yX19wcm9wZXJ0aWVzX19ub2RlXCJcbiAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkTm9kZSQgfCBhc3luYyBhcyBub2RlXCJcbiAgICAgICAgICBbdGl0bGVdPVwibm9kZS5wcm9wZXJ0aWVzWydpZCddXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxoMyBjbGFzcz1cImEtaDNcIj57eyAnQHByeS5waXBlbGluZS5zZWxlY3RlZFRhc2snIHwgaTE4biB9fTwvaDM+XG4gICAgICAgICAgPGg0IGNsYXNzPVwiYS1oNFwiPnt7ICdAcHJ5LnBpcGVsaW5lLnR5cGUnIHwgaTE4biB9fTwvaDQ+XG4gICAgICAgICAgPHAgY2xhc3M9XCJhLXAgYS1wLS10eXBlXCI+e3sgbm9kZS50eXBlIH19PC9wPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJ7eyBub2RlLmlkIH19XCI+e3sgJ0BwcnkucGlwZWxpbmUudGl0bGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICBpZD1cInt7IG5vZGUuaWQgfX1cIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJub2RlLnRpdGxlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVFZGl0aW5nXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VUaXRsZShub2RlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1waXBlbGluZS1lZGl0b3JfX3Byb3BlcnRpZXNfX2RldGFpbFwiIFtjbGFzcy5pcy1lbXB0eV09XCIhc2VsZWN0ZWROb2RlXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxkaXYgI3NwZWNpZmljPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIigoZXJyb3JzJCB8IGFzeW5jKT8ubGVuZ3RoID8/IDApID4gMFwiIGNsYXNzPVwiby1waXBlbGluZS1lZGl0b3JfX3Byb3BlcnRpZXNfX2Vycm9yc1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLXBpcGVsaW5lLWVkaXRvcl9fcHJvcGVydGllc19fZXJyb3JzX190aXRsZVwiPlxuICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJ3YXJuaW5nLXRyaWFuZ2xlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiYS1wXCI+e3sgJ0BwcnkucGlwZWxpbmUuZXJyb3JzJyB8IGkxOG4gfX06PC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgZXJyb3JzJCB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHlwZVwiPnt7XG4gICAgICAgICAgICAgICAgKGVycm9yPy5ub2RlSWQgPT09ICctJyA/ICdAcHJ5LnBpcGVsaW5lLmdsb2JhbCcgOiAnQHByeS5waXBlbGluZS5ub2RlJykgfCBpMThuXG4gICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICB7eyBlcnJvci50cmFuc2xhdGVkIH19XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
300
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3BpcGVsaW5lL2NvbXBvbmVudHMvcGlwZWxpbmUtZWRpdG9yL3BpcGVsaW5lLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9waXBlbGluZS9jb21wb25lbnRzL3BpcGVsaW5lLWVkaXRvci9waXBlbGluZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFHVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBa0Isd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYyxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMzRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLckMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVELE9BQU8sRUFBcUIsZUFBZSxFQUFvQixNQUFNLDhCQUE4QixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7O0FBR2hFLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLG9CQUFvQixDQUFD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QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBVztRQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNuQyxDQUFDOzhHQTVVVSwwQkFBMEI7a0dBQTFCLDBCQUEwQiw2WUFLTixnQkFBZ0Isb0RDdENqRCxxakhBeUZBOzsyRkR4RGEsMEJBQTBCO2tCQUp0QyxTQUFTOytCQUNFLHFCQUFxQjt1S0FJdEIsUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNjLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUTtnQkFDUSxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ3lDLFlBQVk7c0JBQTdFLFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IERhdGFTb3VyY2VBY3Rpb25zLCBQcnlJMThuU2VydmljZSwgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlIH0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IExHcmFwaCwgTEdyYXBoQ2FudmFzLCBMR3JhcGhOb2RlLCBMaXRlR3JhcGggfSBmcm9tICdsaXRlZ3JhcGguanMnO1xuaW1wb3J0IHsgYXVkaXRUaW1lLCBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGNvbWJpbmVMYXRlc3RXaXRoLCBmcm9tRXZlbnQsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIFBpcGVsaW5lQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgUGlwZWxpbmVDb21wb25lbnRGYWN0b3J5U2VydmljZVxufSBmcm9tICcuLi8uLi9mYWN0b3J5L3BpcGVsaW5lLWNvbXBvbmVudC1mYWN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZU5vZGUgfSBmcm9tICcuLi8uLi9ub2RlLWNsYXNzL2Jhc2Utbm9kZS5jbGFzcyc7XG5pbXBvcnQgeyBOb2RlUGlwZWxpbmVFcnJvciwgUGlwZWxpbmVBY3Rpb25zLCBQaXBlbGluZVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vc3RvcmUvcGlwZWxpbmUuYWN0aW9ucyc7XG5pbXBvcnQgeyBQaXBlbGluZVNlbGVjdG9ycyB9IGZyb20gJy4uLy4uL3N0b3JlL3BpcGVsaW5lLnNlbGVjdG9ycyc7XG5pbXBvcnQgeyBHcmFwaFNlcmlhbGl6ZXJVdGlscyB9IGZyb20gJy4vZ3JhcGgtc2VyaWFsaXplci51dGlscyc7XG5pbXBvcnQgeyBQcnlTZXJpYWxpemVkUGlwZWxpbmUsIFByeVRyYW5zZm8gfSBmcm9tICcuL3BpcGVsaW5lLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjb25zdCBNSU1FX1RZUEVfUElQRUxJTkVfQ09NUE9ORU5UID0gJ3BpcGVsaW5lL2NvbXBvbmVudCc7XG5leHBvcnQgY29uc3QgTUlNRV9UWVBFX1BJUEVMSU5FX1BST1BFUlRJRVMgPSAncGlwZWxpbmUvcHJvcGVydGllcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1waXBlbGluZS1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vcGlwZWxpbmUtZWRpdG9yLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBQcnlQaXBlbGluZUVkaXRvckNvbXBvbmVudCBleHRlbmRzIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBwaXBlbGluZT86IFByeVRyYW5zZm87XG4gIEBPdXRwdXQoKSBnb1RvQ29uc3VsdCA9IG5ldyBFdmVudEVtaXR0ZXI8UHJ5VHJhbnNmbz4oKTtcbiAgQFZpZXdDaGlsZCgnY2FudmFzJykgY2FudmFzITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2NhbnZhc1BhcmVudCcpIGNhbnZhc1BhcmVudCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdzcGVjaWZpYycsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiBmYWxzZSB9KSBjb21wb25lbnRSZWYhOiBWaWV3Q29udGFpbmVyUmVmO1xuICBsR3JhcGhzOiBMR3JhcGhbXSA9IFtdO1xuICBwcml2YXRlIGxHcmFwaENhbnZhcyE6IExHcmFwaENhbnZhcztcbiAgdHlwZXMkOiBPYnNlcnZhYmxlPHsgW2NhdGVnb3J5OiBzdHJpbmddOiBQaXBlbGluZUNvbXBvbmVudERlZmluaXRpb25bXSB9PjtcbiAgY2F0ZWdvcmllcyQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBzZWxlY3RlZE5vZGUkOiBPYnNlcnZhYmxlPEJhc2VOb2RlIHwgdW5kZWZpbmVkPjtcbiAgcmVzcG9uc2UkOiBPYnNlcnZhYmxlPFBpcGVsaW5lUmVzcG9uc2UgfCB1bmRlZmluZWQ+O1xuICBpbnN0YW5jaWF0ZWRDb21wb25lbnQhOiBDb21wb25lbnRSZWY8YW55PjtcbiAgc2VsZWN0ZWROb2RlPzogQmFzZU5vZGU7XG4gIGFjdGlvbnMgPSBbXSBhcyB7IHR5cGU6IHN0cmluZzsgaWNvbjogc3RyaW5nIH1bXTtcbiAgZXJyb3JzJDogT2JzZXJ2YWJsZTwoTm9kZVBpcGVsaW5lRXJyb3IgJiB7IHRyYW5zbGF0ZWQ6IHN0cmluZyB9KVtdPjtcbiAgZGlzYWJsZUVkaXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaW1hZ2VzOiB7IHN0YXJ0OiBIVE1MSW1hZ2VFbGVtZW50OyBhZnRlcjogSFRNTEltYWdlRWxlbWVudCB9O1xuICBzZWFyY2gkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHt9KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIHBpcGVsaW5lQ29tcG9uZW50RmFjdG9yeVNlcnZpY2U6IFBpcGVsaW5lQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIEJhc2VOb2RlLnN0b3JlID0gc3RvcmU7XG4gICAgQmFzZU5vZGUuY2hlY2sgPSAoKSA9PiB0aGlzLmNoZWNrKCk7XG5cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhdGFTb3VyY2VBY3Rpb25zLm5hbWVkUXVlcnkubG9hZCgpKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhdGFTb3VyY2VBY3Rpb25zLmRhdGFzZXQubG9hZERhdGFzZXQoKSk7XG5cbiAgICB0aGlzLnR5cGVzJCA9IGNvbWJpbmVMYXRlc3QoW3BpcGVsaW5lQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UudHlwZXNCeUNhdGVnb3JpZXMkLCB0aGlzLnNlYXJjaCRdKS5waXBlKFxuICAgICAgbWFwKChbdHlwZXNCeUNhdGVnb3J5LCBzZWFyY2hdKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIHsgW2NhdGVnb3J5OiBzdHJpbmddOiBQaXBlbGluZUNvbXBvbmVudERlZmluaXRpb25bXSB9O1xuICAgICAgICBPYmplY3Qua2V5cyh0eXBlc0J5Q2F0ZWdvcnkpLmZvckVhY2goKGNhdCkgPT4ge1xuICAgICAgICAgIHJlc3VsdFtjYXRdID0gdHlwZXNCeUNhdGVnb3J5W2NhdF0uZmlsdGVyKCh0eXBlKSA9PlxuICAgICAgICAgICAgdHlwZS5sYWJlbC50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKChzZWFyY2hbY2F0XSA/PyAnJykudG9Mb2NhbGVMb3dlckNhc2UoKSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmNhdGVnb3JpZXMkID0gcGlwZWxpbmVDb21wb25lbnRGYWN0b3J5U2VydmljZS5jYXRlZ29yaWVzJDtcblxuICAgIHRoaXMuc2VsZWN0ZWROb2RlJCA9IHRoaXMuc3RvcmUuc2VsZWN0KFBpcGVsaW5lU2VsZWN0b3JzLnNlbGVjdGVkTm9kZUlkKS5waXBlKG1hcCgoaWQpID0+IHRoaXMuZmluZE5vZGVCeUlkKGlkKSkpO1xuXG4gICAgdGhpcy5yZXNwb25zZSQgPSB0aGlzLnN0b3JlLnNlbGVjdChQaXBlbGluZVNlbGVjdG9ycy5jaGVja1Jlc3BvbnNlKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnJlc3BvbnNlJC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuYWxsTm9kZXMuZm9yRWFjaCgoZXJyb3JOb2RlKSA9PiB7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGRlbGV0ZSBlcnJvck5vZGU/LmJnY29sb3I7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIChyZXNwb25zZT8uc3RhdHVzLm1hcCgoc3RhdHVzKSA9PiBzdGF0dXMuZXJyb3JzKS5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pID8/IFtdKVxuICAgICAgICAgID8ubWFwKChlcnJvcikgPT4gdGhpcy5maW5kTm9kZUJ5SWQoZXJyb3Iubm9kZUlkKSlcbiAgICAgICAgICAuZmlsdGVyKChlcnJvck5vZGUpID0+ICEhZXJyb3JOb2RlKVxuICAgICAgICAgIC5mb3JFYWNoKChlcnJvck5vZGUpID0+IChlcnJvck5vZGUhLmJnY29sb3IgPSAnI2Q5MzUzNScpKTtcblxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc2VsZWN0ZWROb2RlJC5waXBlKGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMucmVzcG9uc2UkKSkuc3Vic2NyaWJlKChbbm9kZSwgcmVzcG9uc2VdKSA9PiB7XG4gICAgICBpZiAodGhpcy5pbnN0YW5jaWF0ZWRDb21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuY2xlYXIoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVtb3ZlQWN0aW9uKCdkb3duJyk7XG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSB0aGlzLnBpcGVsaW5lQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UuZ2V0KG5vZGU/LnR5cGUgPz8gJycpO1xuICAgICAgICBpZiAobW9kdWxlKSB7XG4gICAgICAgICAgdGhpcy5pbnN0YW5jaWF0ZWRDb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudFJlZi5jcmVhdGVDb21wb25lbnQobW9kdWxlLmNvbXBvbmVudCk7XG4gICAgICAgICAgdGhpcy5pbnN0YW5jaWF0ZWRDb21wb25lbnQuaW5zdGFuY2Uubm9kZSA9IG5vZGU7XG4gICAgICAgICAgdGhpcy5pbnN0YW5jaWF0ZWRDb21wb25lbnQuaW5zdGFuY2UuY2hlY2tGbiA9ICgpID0+IHt9O1xuICAgICAgICAgIHRoaXMuaW5zdGFuY2lhdGVkQ29tcG9uZW50Lmluc3RhbmNlLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlRWRpdGluZztcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2lhdGVkQ29tcG9uZW50Lmluc3RhbmNlLmNoZWNrRm4gPSAoKSA9PiB0aGlzLmNoZWNrKCk7XG4gICAgICAgICAgfSwgMTAwKTtcblxuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdTdGF0dXMgPSByZXNwb25zZS5zdGF0dXMuZmluZCgoc3RhdHVzKSA9PiBzdGF0dXMubm9kZUlkID09PSBub2RlLnByb3BlcnRpZXNbJ2lkJ10pO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nU3RhdHVzKSB7XG4gICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2lhdGVkQ29tcG9uZW50Lmluc3RhbmNlLm1vZGVsID0gbWF0Y2hpbmdTdGF0dXMub3V0TW9kZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09ICdTdWJHcmFwaE5vZGUnKSB7XG4gICAgICAgICAgdGhpcy5hZGRBY3Rpb24oeyBpY29uOiAnZXllLWFycm93LWRvd24nLCB0eXBlOiAnZG93bicgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRBY3Rpb24oeyBpY29uOiAnZGVsZXRlJywgdHlwZTogJ2RlbGV0ZScgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUFjdGlvbignZGVsZXRlJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuc2VsZWN0ZWROb2RlJC5zdWJzY3JpYmUoKG5vZGUpID0+ICh0aGlzLnNlbGVjdGVkTm9kZSA9IG5vZGUpKSk7XG5cbiAgICB0aGlzLmVycm9ycyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnJlc3BvbnNlJCwgdGhpcy5zZWxlY3RlZE5vZGUkXSkucGlwZShcbiAgICAgIG1hcCgoW3Jlc3BvbnNlLCBzZWxlY3RlZE5vZGVdKSA9PiBbXG4gICAgICAgIC4uLihyZXNwb25zZT8uZXJyb3JzID8/IFtdKS5tYXAoKGVycm9yKSA9PiAoeyAuLi5lcnJvciwgbm9kZUlkOiAnLScgfSkpLFxuICAgICAgICAuLi4ocmVzcG9uc2U/LnN0YXR1cy5maW5kKChzdGF0dXMpID0+IHN0YXR1cy5ub2RlSWQgPT09IChzZWxlY3RlZE5vZGU/LnByb3BlcnRpZXNbJ2lkJ10gPz8gJy0tLS0tJykpPy5lcnJvcnMgPz9cbiAgICAgICAgICBbXSlcbiAgICAgIF0pLFxuICAgICAgbWFwKChlcnJvcnMpID0+XG4gICAgICAgIGVycm9ycy5tYXAoKGVycm9yKSA9PiAoe1xuICAgICAgICAgIC4uLmVycm9yLFxuICAgICAgICAgIHRyYW5zbGF0ZWQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LnBpcGVsaW5lLmNvZGVzLicgKyBlcnJvci5jb2RlLCBlcnJvcilcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAgICAgLnBpcGUoYXVkaXRUaW1lKDEwMCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMub25SZXNpemUoKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5pbWFnZXMgPSB7XG4gICAgICBzdGFydDogbmV3IEltYWdlKCksXG4gICAgICBhZnRlcjogbmV3IEltYWdlKClcbiAgICB9O1xuICAgIHRoaXMuaW1hZ2VzLnN0YXJ0LnNyYyA9ICcvYXNzZXRzL2JhY2tncm91bmRzL2ltZ19wcm9jZXNzdXMucG5nJztcbiAgICB0aGlzLmltYWdlcy5hZnRlci5zcmMgPSAnJztcbiAgfVxuXG4gIGdldCBjdXJyZW50R3JhcGgoKSB7XG4gICAgcmV0dXJuIHRoaXMubEdyYXBoc1t0aGlzLmxHcmFwaHMubGVuZ3RoIC0gMV07XG4gIH1cblxuICBnZXQgYWxsTm9kZXMoKTogQmFzZU5vZGVbXSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRHcmFwaD8uX25vZGVzID8/IFtdO1xuICB9XG5cbiAgZ2V0IGJhY2tncm91bmRJbWFnZSgpIHtcbiAgICByZXR1cm4gKHRoaXMucGlwZWxpbmU/Lm5vZGVzID8/IFtdKS5sZW5ndGggPiAwID8gdGhpcy5pbWFnZXMuYWZ0ZXIgOiB0aGlzLmltYWdlcy5zdGFydDtcbiAgfVxuXG4gIGZpbmROb2RlQnlJZChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYWxsTm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5wcm9wZXJ0aWVzWydpZCddID09PSBpZCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sR3JhcGhzLnB1c2gobmV3IExHcmFwaCgpKTtcbiAgICB0aGlzLmxHcmFwaENhbnZhcyA9IG5ldyBMR3JhcGhDYW52YXModGhpcy5jYW52YXMubmF0aXZlRWxlbWVudCwgdGhpcy5jdXJyZW50R3JhcGgpO1xuICAgIHRoaXMubEdyYXBoQ2FudmFzLmFsbG93X3NlYXJjaGJveCA9IGZhbHNlO1xuICAgIHRoaXMubEdyYXBoQ2FudmFzLnRpdGxlX3RleHRfZm9udCA9ICdib2xkIDE0cHggVWJ1bnR1JztcbiAgICB0aGlzLmxHcmFwaENhbnZhcy5pbm5lcl90ZXh0X2ZvbnQgPSAnbm9ybWFsIDEycHggVWJ1bnR1JztcbiAgICB0aGlzLmxHcmFwaENhbnZhcy5kZWZhdWx0X2xpbmtfY29sb3IgPSAnIzAwMDAwMCc7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMubEdyYXBoQ2FudmFzLmJhY2tncm91bmRfaW1hZ2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5sR3JhcGhDYW52YXMub25EcmF3QmFja2dyb3VuZCA9IChjdHgsIHZlY3RvcikgPT4ge1xuICAgICAgY29uc3QgcmVjdCA9IHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIGN0eC5maWxsU3R5bGUgPSAnd2hpdGUnO1xuICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTtcblxuICAgICAgY29uc3QgaW1nU2l6ZSA9IFszMDYsIDE3MV07XG4gICAgICBjdHguZHJhd0ltYWdlKFxuICAgICAgICB0aGlzLmJhY2tncm91bmRJbWFnZSxcbiAgICAgICAgKHJlY3Qud2lkdGggLSBpbWdTaXplWzBdKSAvIDIsXG4gICAgICAgIChyZWN0LmhlaWdodCAtIGltZ1NpemVbMV0pIC8gMixcbiAgICAgICAgaW1nU2l6ZVswXSxcbiAgICAgICAgaW1nU2l6ZVsxXVxuICAgICAgKTtcbiAgICB9O1xuICAgIHRoaXMubEdyYXBoQ2FudmFzLm9uTm9kZURlc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFBpcGVsaW5lQWN0aW9ucy5zZWxlY3QoeyBpZDogJycgfSkpO1xuICAgIH07XG4gICAgdGhpcy5jdXJyZW50R3JhcGguc3RhcnQoKTtcbiAgICBpZiAodGhpcy5waXBlbGluZSkge1xuICAgICAgR3JhcGhTZXJpYWxpemVyVXRpbHMuaHlkcmF0ZSh0aGlzLnBpcGVsaW5lIGFzIFByeVNlcmlhbGl6ZWRQaXBlbGluZSwgdGhpcy5jdXJyZW50R3JhcGgpO1xuICAgICAgdGhpcy5kaXNhYmxlRWRpdGluZyA9IHRoaXMucGlwZWxpbmUuYWN0aXZlO1xuICAgIH1cbiAgICB0aGlzLm9uUmVzaXplKCk7XG4gIH1cblxuICBvblJlc2l6ZSgpIHtcbiAgICAvLyBNYWtlIGNhbnZhcyBzbyBsaXR0bGUgdGhhdCBpdCBkb2Vzbid0IGltcGFjdCBjc3Mgc2l6ZSBjYWxjdWxhdGlvblxuICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQud2lkdGggPSAxMDtcbiAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LmhlaWdodCA9IDEwO1xuICAgIHRoaXMubEdyYXBoQ2FudmFzLnJlc2l6ZSgxMCwgMTApO1xuXG4gICAgLy8gTGF0ZXIsIG1ha2UgaXQgZ3JvdyB0byBwcm9wZXIgc2l6ZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgcmVjdCA9IHRoaXMuY2FudmFzUGFyZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LndpZHRoID0gcmVjdC53aWR0aDtcbiAgICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuaGVpZ2h0ID0gcmVjdC5oZWlnaHQ7XG4gICAgICB0aGlzLmxHcmFwaENhbnZhcy5yZXNpemUocmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpO1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfSwgMTApO1xuICB9XG5cbiAgZGlzcGxheUdyYXBoKGdyYXBoOiBMR3JhcGgpIHtcbiAgICB0aGlzLmN1cnJlbnRHcmFwaC5zdG9wKCk7XG4gICAgdGhpcy5sR3JhcGhzLnB1c2goZ3JhcGgpO1xuICAgIHRoaXMubEdyYXBoQ2FudmFzLnNldEdyYXBoKGdyYXBoKTtcbiAgICBncmFwaC5zdGFydCgpO1xuICB9XG5cbiAgcG9wR3JhcGgoKSB7XG4gICAgdGhpcy5jdXJyZW50R3JhcGguc3RvcCgpO1xuICAgIHRoaXMubEdyYXBocy5sZW5ndGggPSB0aGlzLmxHcmFwaHMubGVuZ3RoIC0gMTtcbiAgICB0aGlzLmN1cnJlbnRHcmFwaC5zdGFydCgpO1xuICAgIHRoaXMubEdyYXBoQ2FudmFzLnNldEdyYXBoKHRoaXMuY3VycmVudEdyYXBoKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFBpcGVsaW5lQWN0aW9ucy5zZWxlY3QoeyBpZDogJycgfSkpO1xuICAgIHRoaXMubEdyYXBoQ2FudmFzLmRlc2VsZWN0QWxsTm9kZXMoKTtcbiAgICBpZiAodGhpcy5sR3JhcGhzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5yZW1vdmVBY3Rpb24oJ3VwJyk7XG4gICAgfVxuICB9XG5cbiAgcHVwR3JhcGgobm9kZTogQmFzZU5vZGUpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKCEhbm9kZS5zdWJHcmFwaCkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5kaXNwbGF5R3JhcGgobm9kZS5zdWJHcmFwaCk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFBpcGVsaW5lQWN0aW9ucy5zZWxlY3QoeyBpZDogJycgfSkpO1xuICAgICAgdGhpcy5sR3JhcGhDYW52YXMuZGVzZWxlY3RBbGxOb2RlcygpO1xuICAgICAgdGhpcy5hZGRBY3Rpb24oeyBpY29uOiAnZXllLWFycm93LXVwJywgdHlwZTogJ3VwJyB9KTtcbiAgICB9XG4gIH1cblxuICBjaGVjaygpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZUVkaXRpbmcpIHtcbiAgICAgIHRoaXMucGlwZWxpbmUgPSB7XG4gICAgICAgIC4uLnRoaXMucGlwZWxpbmUsXG4gICAgICAgIC4uLkdyYXBoU2VyaWFsaXplclV0aWxzLnNlcmlhbGl6ZSh0aGlzLmxHcmFwaHNbMF0sIHRoaXMucGlwZWxpbmU/LmlkKVxuICAgICAgfSBhcyBQcnlUcmFuc2ZvO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgUGlwZWxpbmVBY3Rpb25zLmNoZWNrKHtcbiAgICAgICAgICAgIGdyYXBoOiB7XG4gICAgICAgICAgICAgIGlkOiB0aGlzLnBpcGVsaW5lPy5pZCxcbiAgICAgICAgICAgICAgbm9kZXM6IHRoaXMucGlwZWxpbmU/Lm5vZGVzLFxuICAgICAgICAgICAgICBsaW5rczogdGhpcy5waXBlbGluZT8ubGlua3MsXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnBpcGVsaW5lPy50aXRsZSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMucGlwZWxpbmU/LmRlc2NyaXB0aW9uXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLmN1cnJlbnRHcmFwaD8uY2hhbmdlKCk7XG4gIH1cblxuICBjcmVhdGVOb2RlKHR5cGU6IHN0cmluZywgcG9zaXRpb246IFtudW1iZXIsIG51bWJlcl0sIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBhbnkpIHtcbiAgICBjb25zdCB0aXRsZSA9IGFkZGl0aW9uYWxQcm9wZXJ0aWVzLl9sYWJlbCA/PyB0eXBlLnNwbGl0KCcuJylbdHlwZS5zcGxpdCgnLicpLmxlbmd0aCAtIDFdID8/ICc/JztcbiAgICBjb25zdCBub2RlX2NvbnN0ID0gTGl0ZUdyYXBoLmNyZWF0ZU5vZGUodHlwZSwgdGl0bGUsIHt9KTtcbiAgICBpZiAobm9kZV9jb25zdCAhPT0gbnVsbCkge1xuICAgICAgbm9kZV9jb25zdC50aXRsZSA9IHRpdGxlO1xuICAgICAgbm9kZV9jb25zdC5wb3MgPSBwb3NpdGlvbjtcbiAgICAgIE9iamVjdC5rZXlzKGFkZGl0aW9uYWxQcm9wZXJ0aWVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgbm9kZV9jb25zdC5wcm9wZXJ0aWVzW2tleV0gPSBhZGRpdGlvbmFsUHJvcGVydGllc1trZXldO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY3VycmVudEdyYXBoLmFkZChub2RlX2NvbnN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgQ2Fubm90IGNyZWF0ZSBub2RlIG9mIHR5cGUgJHt0eXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIG9uRHJhZ1N0YXJ0KCRldmVudDogRHJhZ0V2ZW50LCBjb21wb25lbnQ6IFBpcGVsaW5lQ29tcG9uZW50RGVmaW5pdGlvbikge1xuICAgIGlmICghISRldmVudCAmJiAhISRldmVudC5kYXRhVHJhbnNmZXIgJiYgISRldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5jbHVkZXMoTUlNRV9UWVBFX1BJUEVMSU5FX0NPTVBPTkVOVCkpIHtcbiAgICAgICRldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICAgICRldmVudC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICdjb3B5JztcbiAgICAgICRldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShNSU1FX1RZUEVfUElQRUxJTkVfQ09NUE9ORU5ULCBjb21wb25lbnQudHlwZSk7XG4gICAgICAkZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoTUlNRV9UWVBFX1BJUEVMSU5FX1BST1BFUlRJRVMsIEpTT04uc3RyaW5naWZ5KHsgLi4uY29tcG9uZW50LmFkZGl0aW9uYWxQcm9wZXJ0aWVzIH0pKTtcbiAgICB9XG4gIH1cblxuICBvbkRyb3AoJGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoISEkZXZlbnQgJiYgISEkZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICBpZiAoJGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcy5pbmNsdWRlcyhNSU1FX1RZUEVfUElQRUxJTkVfQ09NUE9ORU5UKSkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRUeXBlID0gJGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKE1JTUVfVFlQRV9QSVBFTElORV9DT01QT05FTlQpO1xuICAgICAgICBjb25zdCBhZGRpdGlvbmFsUHJvcGVydGllcyA9IEpTT04ucGFyc2UoJGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKE1JTUVfVFlQRV9QSVBFTElORV9QUk9QRVJUSUVTKSk7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZEV2ZW50ID0gdGhpcy5sR3JhcGhDYW52YXMuY29udmVydEV2ZW50VG9DYW52YXNPZmZzZXQoJGV2ZW50KTtcbiAgICAgICAgdGhpcy5jcmVhdGVOb2RlKGNvbXBvbmVudFR5cGUsIFtjb252ZXJ0ZWRFdmVudFswXSwgY29udmVydGVkRXZlbnRbMV1dLCBhZGRpdGlvbmFsUHJvcGVydGllcyk7XG4gICAgICAgIHRoaXMuY2hlY2soKTtcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVRpdGxlKG5vZGU6IExHcmFwaE5vZGUsICRldmVudDogRXZlbnQpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbm9kZS50aXRsZSA9ICRldmVudC50YXJnZXQ/LnZhbHVlO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgY2xpY2tlZEFjdGlvbihhY3Rpb246IGFueSkge1xuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3VwJzpcbiAgICAgICAgdGhpcy5wb3BHcmFwaCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICB0aGlzLnB1cEdyYXBoKHRoaXMuc2VsZWN0ZWROb2RlISk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgdGhpcy5jdXJyZW50R3JhcGgucmVtb3ZlKHRoaXMuc2VsZWN0ZWROb2RlISk7XG4gICAgICAgIHRoaXMucmVtb3ZlQWN0aW9uKCdkZWxldGUnKTtcbiAgICAgICAgdGhpcy5jaGVjaygpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChQaXBlbGluZUFjdGlvbnMuc2VsZWN0KHsgaWQ6ICcnIH0pKTtcbiAgfVxuXG4gIGFkZEFjdGlvbihhZGQ6IHsgdHlwZTogc3RyaW5nOyBpY29uOiBzdHJpbmcgfSkge1xuICAgIGlmICghdGhpcy5hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IGFkZC50eXBlKSkge1xuICAgICAgdGhpcy5hY3Rpb25zLnB1c2goYWRkKTtcbiAgICB9XG4gICAgdGhpcy5hY3Rpb25zLnNvcnQoKGEsIGIpID0+IGEudHlwZS5sb2NhbGVDb21wYXJlKGIudHlwZSkpO1xuICB9XG5cbiAgcmVtb3ZlQWN0aW9uKHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgIT09IHR5cGUpO1xuICB9XG5cbiAgZ29CYWNrKCkge1xuICAgIHRoaXMuZ29Ub0NvbnN1bHQuZW1pdCh0aGlzLnBpcGVsaW5lKTtcbiAgfVxuXG4gIHNlYXJjaCgkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2VhcmNoJC5uZXh0KHsgLi4uJGV2ZW50IH0pO1xuICB9XG59XG4iLCI8cHJ5LXBpcGVsaW5lLWNzcz48L3ByeS1waXBlbGluZS1jc3M+XG48ZGl2IGNsYXNzPVwiby1waXBlbGluZVwiPlxuICA8ZGl2IGNsYXNzPVwiby1waXBlbGluZV9fbWVudVwiPlxuICAgIDxwcnktYWNjb3JkaW9uPlxuICAgICAgPHByeS1hY2NvcmRpb24taXRlbVxuICAgICAgICAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcyQgfCBhc3luYzsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgICAgICBbaXRlbV09XCJjYXRlZ29yeVwiXG4gICAgICAgIFtib3JkZXJDb2xvcl09XCIodHlwZXMkIHwgYXN5bmMpIVtjYXRlZ29yeV1bMF0uY29sb3JcIlxuICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICBbc2hvd1NlYXJjaEJhcl09XCJ0cnVlXCJcbiAgICAgICAgW3NlYXJjaCRdPVwic2VhcmNoJFwiXG4gICAgICAgIChzZWFyY2gpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICB0cmFuc2xhdGlvblN0cmluZ0Jhc2U9XCJAcHJ5LnBpcGVsaW5lLlwiXG4gICAgICA+XG4gICAgICAgIDx1bCBjbGFzcz1cIm8tcGlwZWxpbmVfX2NvbXBvbmVudHNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0eXBlIG9mICh0eXBlcyQgfCBhc3luYykhW2NhdGVnb3J5XVwiPlxuICAgICAgICAgICAgPGxpIFtkcmFnZ2FibGVdPVwiIXRoaXMuZGlzYWJsZUVkaXRpbmdcIiAoZHJhZ3N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCRldmVudCwgdHlwZSlcIj5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhLXBcIj57eyB0eXBlLmxhYmVsIH19PC9wPlxuICAgICAgICAgICAgICA8cHJ5LWljb24gW3dpZHRoXT1cIjJcIiBbaGVpZ2h0XT1cIjIwXCIgaWNvblN2Zz1cImluZm9cIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvcHJ5LWFjY29yZGlvbi1pdGVtPlxuICAgIDwvcHJ5LWFjY29yZGlvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm8tcGlwZWxpbmVfX3dvcmtzcGFjZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLXBpcGVsaW5lLWxheW91dF9fdG9vbGJveFwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnkgLS1zaXplLW1kXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICB7eyAnQHByeS5waXBlbGluZS5iYWNrVG9EZXNjcmlwdGlvbicgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBhY3Rpb25zXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjbGlja2VkQWN0aW9uKGFjdGlvbilcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnkgLS1zaXplLW1kXCI+XG4gICAgICAgICAge3sgJ0BwcnkucGlwZWxpbmUuJyArIGFjdGlvbi50eXBlIHwgaTE4biB9fVxuICAgICAgICAgIDxwcnktaWNvbiBbaWNvblN2Z109XCJhY3Rpb24uaWNvblwiPjwvcHJ5LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdj5cbiAgICAgIDxoMSBjbGFzcz1cImEtaDFcIj57eyB0aGlzLnBpcGVsaW5lPy50aXRsZSB9fTwvaDE+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm8tcGlwZWxpbmUtZWRpdG9yXCI+XG4gICAgICA8ZGl2IChkcm9wKT1cIm9uRHJvcCgkZXZlbnQpXCIgY2xhc3M9XCJvLXBpcGVsaW5lLWVkaXRvcl9fZ3JpZFwiICNjYW52YXNQYXJlbnQ+XG4gICAgICAgIDxjYW52YXMgI2NhbnZhcyBjbGFzcz1cImNhbnZhc1wiPjwvY2FudmFzPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1waXBlbGluZS1lZGl0b3JfX3Byb3BlcnRpZXNcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiby1waXBlbGluZS1lZGl0b3JfX3Byb3BlcnRpZXNfX25vZGVcIlxuICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWROb2RlJCB8IGFzeW5jIGFzIG5vZGVcIlxuICAgICAgICAgIFt0aXRsZV09XCJub2RlLnByb3BlcnRpZXNbJ2lkJ11cIlxuICAgICAgICA+XG4gICAgICAgICAgPGgzIGNsYXNzPVwiYS1oM1wiPnt7ICdAcHJ5LnBpcGVsaW5lLnNlbGVjdGVkVGFzaycgfCBpMThuIH19PC9oMz5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJhLWg0XCI+e3sgJ0BwcnkucGlwZWxpbmUudHlwZScgfCBpMThuIH19PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImEtcCBhLXAtLXR5cGVcIj57eyBub2RlLnR5cGUgfX08L3A+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInt7IG5vZGUuaWQgfX1cIj57eyAnQHByeS5waXBlbGluZS50aXRsZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgIGlkPVwie3sgbm9kZS5pZCB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm5vZGUudGl0bGVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUVkaXRpbmdcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZVRpdGxlKG5vZGUsICRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXBpcGVsaW5lLWVkaXRvcl9fcHJvcGVydGllc19fZGV0YWlsXCIgW2NsYXNzLmlzLWVtcHR5XT1cIiFzZWxlY3RlZE5vZGVcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiAjc3BlY2lmaWM+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiKChlcnJvcnMkIHwgYXN5bmMpPy5sZW5ndGggPz8gMCkgPiAwXCIgY2xhc3M9XCJvLXBpcGVsaW5lLWVkaXRvcl9fcHJvcGVydGllc19fZXJyb3JzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm8tcGlwZWxpbmUtZWRpdG9yX19wcm9wZXJ0aWVzX19lcnJvcnNfX3RpdGxlXCI+XG4gICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cIndhcm5pbmctdHJpYW5nbGVcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJhLXBcIj57eyAnQHByeS5waXBlbGluZS5lcnJvcnMnIHwgaTE4biB9fTo8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHVsPlxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBlcnJvciBvZiBlcnJvcnMkIHwgYXN5bmNcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0eXBlXCI+e3tcbiAgICAgICAgICAgICAgICAoZXJyb3I/Lm5vZGVJZCA9PT0gJy0nID8gJ0BwcnkucGlwZWxpbmUuZ2xvYmFsJyA6ICdAcHJ5LnBpcGVsaW5lLm5vZGUnKSB8IGkxOG5cbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIHt7IGVycm9yLnRyYW5zbGF0ZWQgfX1cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -2,10 +2,10 @@ import { Component, ViewEncapsulation } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class PryPipelineCssComponent {
4
4
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryPipelineCssComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryPipelineCssComponent, selector: "pry-pipeline-css", ngImport: i0, template: '', isInline: true, styles: [".o-pipeline__menu .o-accordion__panel .o-pipeline__components{margin:0;padding:0}.o-pipeline__menu .o-accordion__panel .o-pipeline__components li{list-style:none}.o-pipeline-layout{height:100%}.o-pipeline-layout__toolbox{display:flex;align-items:center;gap:1.25rem;padding:.8125rem 1.25rem;margin-bottom:1.25rem}.o-pipeline-layout__toolbox:first-of-type{padding-top:1.25rem;min-height:4.625rem}.o-pipeline-layout__toolbox .a-label{margin:0}.o-pipeline-layout__details{padding:1.25rem}.o-pipeline-layout__details .row{gap:2.8125rem}.o-pipeline-layout__details :first-child{flex:0 1 50%}.o-pipeline-layout__details .a-form-field{margin-bottom:.9375rem}.o-pipeline-layout__details .property-value{font-weight:400;font-size:1rem}.o-pipeline-layout .a-h1{margin:0 1.25rem}.o-pipeline-layout .a-table{margin-left:20px;width:calc(100% - 40px)}.o-pipeline-layout .a-table,.o-pipeline-layout .a-table td{cursor:default}.o-pipeline-layout .a-table .a-btn--secondary.-size-sm,.o-pipeline-layout .a-table td .a-btn--secondary.-size-sm{font-size:.875rem}.o-pipeline-layout .canvas{flex:1 1 auto}.o-pipeline-layout .litegraph.dialog{display:none}.o-pipeline__menu .o-accordion__panel .o-pipeline__components li:before,.o-pipeline__menu .o-accordion__panel__head:before,.o-pipeline__menu .o-accordion__title:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px}.o-pipeline{display:flex;flex-direction:row;height:100%}.o-pipeline__menu{min-width:16.875rem;overflow-y:auto}.o-pipeline__menu .o-accordion{min-width:16.875rem}.o-pipeline__menu .o-accordion__title{position:relative;border-bottom-style:solid;border-bottom-width:.0625rem}.o-pipeline__menu .o-accordion__title:before{background-color:var(--border-color)}.o-pipeline__menu .o-accordion__title__btn{width:100%;height:70%;padding:0;text-transform:uppercase;text-align:left}.o-pipeline__menu .o-accordion__title.is-active{border-bottom:none}.o-pipeline__menu .o-accordion__panel{position:relative}.o-pipeline__menu .o-accordion__panel[aria-hidden=false]{border-bottom-style:solid;border-bottom-width:.0625rem}.o-pipeline__menu .o-accordion__panel__head{position:relative;padding:.125rem .625rem 1.25rem}.o-pipeline__menu .o-accordion__panel__head:before{background-color:var(--border-color)}.o-pipeline__menu .o-accordion__panel__head pry-icon{position:absolute;top:.75rem;left:1.4375rem}.o-pipeline__menu .o-accordion__panel__head .a-form-field{padding-left:2.5rem}.o-pipeline__menu .o-accordion__panel .o-pipeline__components{position:relative;z-index:1}.o-pipeline__menu .o-accordion__panel .o-pipeline__components li{position:relative;display:flex;align-items:center;justify-content:space-between;min-height:40px;padding:0 .9375rem;border-top-width:1px;border-top-style:solid;cursor:grab}.o-pipeline__menu .o-accordion__panel .o-pipeline__components li:before{background-color:var(--border-color)}.o-pipeline__menu .o-accordion__panel .o-pipeline__components li:hover{background-color:#fff}.o-pipeline__menu .o-accordion__panel .o-pipeline__components li:active{cursor:grabbing}.o-pipeline__menu .o-accordion__panel .o-pipeline__components li .a-p{margin-bottom:0}.o-pipeline__menu .o-accordion__panel .o-pipeline__components li .a-icon{transform:scale(2.2)}.o-pipeline__workspace{flex:1;display:flex;flex-direction:column;overflow:auto}.o-pipeline .o-pipeline-editor{flex:1;display:flex;flex-direction:row;margin:0 1.25rem;background-color:#fff}.o-pipeline .o-pipeline-editor__grid{flex:1}.o-pipeline .o-pipeline-editor__properties{display:flex;flex-direction:column;width:16.875rem;padding:1.5625rem 1.25rem}.o-pipeline .o-pipeline-editor__properties__node .a-h3{margin-bottom:.9375rem}.o-pipeline .o-pipeline-editor__properties__node .a-h4{margin-bottom:0;padding-bottom:.3125rem;text-transform:uppercase;font-size:.875rem;line-height:1.125rem}.o-pipeline .o-pipeline-editor__properties__node .a-p--type{padding-bottom:.625rem;font-size:.875rem;line-height:1.125rem;overflow-wrap:break-word}.o-pipeline .o-pipeline-editor__properties .a-label{font-weight:700;overflow-wrap:break-word}.o-pipeline .o-pipeline-editor__properties__detail{display:flex;flex-direction:column}.o-pipeline .o-pipeline-editor__properties__errors__title{display:flex;align-items:flex-end;gap:.625rem;margin-bottom:.9375rem}.o-pipeline .o-pipeline-editor__properties__errors__title .a-p{margin-bottom:0;font-weight:700;text-transform:uppercase}.o-pipeline .o-pipeline-editor__properties__errors ul li .type{display:inline-block;padding:.0625rem .3125rem;border-radius:.3125rem}\n"], encapsulation: i0.ViewEncapsulation.None }); }
5
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryPipelineCssComponent, selector: "pry-pipeline-css", ngImport: i0, template: '', isInline: true, styles: [".o-pipeline-layout{height:100%}.o-pipeline-layout__toolbox{display:flex;align-items:center;gap:1.25rem;padding:.8125rem 1.25rem;margin-bottom:1.25rem}.o-pipeline-layout__toolbox:first-of-type{padding-top:1.25rem;min-height:4.625rem}.o-pipeline-layout__toolbox .a-label{margin:0}.o-pipeline-layout__details{padding:1.25rem}.o-pipeline-layout__details .row{gap:2.8125rem}.o-pipeline-layout__details :first-child{flex:0 1 50%}.o-pipeline-layout__details .a-form-field{margin-bottom:.9375rem}.o-pipeline-layout__details .property-value{font-weight:400;font-size:1rem}.o-pipeline-layout .a-h1{margin:0 1.25rem}.o-pipeline-layout .a-table{margin-left:20px;width:calc(100% - 40px)}.o-pipeline-layout .a-table,.o-pipeline-layout .a-table td{cursor:default}.o-pipeline-layout .a-table .a-btn--secondary.-size-sm,.o-pipeline-layout .a-table td .a-btn--secondary.-size-sm{font-size:.875rem}.o-pipeline-layout .canvas{flex:1 1 auto}.o-pipeline-layout .litegraph.dialog{display:none}.o-pipeline{display:flex;flex-direction:row;height:100%}.o-pipeline__menu{min-width:16.875rem;overflow-y:auto}.o-pipeline__menu .o-accordion{min-width:16.875rem}.o-pipeline__workspace{flex:1;display:flex;flex-direction:column;overflow:auto}.o-pipeline .o-pipeline-editor{flex:1;display:flex;flex-direction:row;margin:0 1.25rem;background-color:#fff}.o-pipeline .o-pipeline-editor__grid{flex:1}.o-pipeline .o-pipeline-editor__properties{display:flex;flex-direction:column;width:16.875rem;padding:1.5625rem 1.25rem}.o-pipeline .o-pipeline-editor__properties__node .a-h3{margin-bottom:.9375rem}.o-pipeline .o-pipeline-editor__properties__node .a-h4{margin-bottom:0;padding-bottom:.3125rem;text-transform:uppercase;font-size:.875rem;line-height:1.125rem}.o-pipeline .o-pipeline-editor__properties__node .a-p--type{padding-bottom:.625rem;font-size:.875rem;line-height:1.125rem;overflow-wrap:break-word}.o-pipeline .o-pipeline-editor__properties .a-label{font-weight:700;overflow-wrap:break-word}.o-pipeline .o-pipeline-editor__properties__detail{display:flex;flex-direction:column}.o-pipeline .o-pipeline-editor__properties__errors__title{display:flex;align-items:flex-end;gap:.625rem;margin-bottom:.9375rem}.o-pipeline .o-pipeline-editor__properties__errors__title .a-p{margin-bottom:0;font-weight:700;text-transform:uppercase}.o-pipeline .o-pipeline-editor__properties__errors ul li .type{display:inline-block;padding:.0625rem .3125rem;border-radius:.3125rem}\n"], encapsulation: i0.ViewEncapsulation.None }); }
6
6
  }
7
7
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryPipelineCssComponent, decorators: [{
8
8
  type: Component,
9
- args: [{ selector: 'pry-pipeline-css', template: '', encapsulation: ViewEncapsulation.None, styles: [".o-pipeline__menu .o-accordion__panel .o-pipeline__components{margin:0;padding:0}.o-pipeline__menu .o-accordion__panel .o-pipeline__components li{list-style:none}.o-pipeline-layout{height:100%}.o-pipeline-layout__toolbox{display:flex;align-items:center;gap:1.25rem;padding:.8125rem 1.25rem;margin-bottom:1.25rem}.o-pipeline-layout__toolbox:first-of-type{padding-top:1.25rem;min-height:4.625rem}.o-pipeline-layout__toolbox .a-label{margin:0}.o-pipeline-layout__details{padding:1.25rem}.o-pipeline-layout__details .row{gap:2.8125rem}.o-pipeline-layout__details :first-child{flex:0 1 50%}.o-pipeline-layout__details .a-form-field{margin-bottom:.9375rem}.o-pipeline-layout__details .property-value{font-weight:400;font-size:1rem}.o-pipeline-layout .a-h1{margin:0 1.25rem}.o-pipeline-layout .a-table{margin-left:20px;width:calc(100% - 40px)}.o-pipeline-layout .a-table,.o-pipeline-layout .a-table td{cursor:default}.o-pipeline-layout .a-table .a-btn--secondary.-size-sm,.o-pipeline-layout .a-table td .a-btn--secondary.-size-sm{font-size:.875rem}.o-pipeline-layout .canvas{flex:1 1 auto}.o-pipeline-layout .litegraph.dialog{display:none}.o-pipeline__menu .o-accordion__panel .o-pipeline__components li:before,.o-pipeline__menu .o-accordion__panel__head:before,.o-pipeline__menu .o-accordion__title:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px}.o-pipeline{display:flex;flex-direction:row;height:100%}.o-pipeline__menu{min-width:16.875rem;overflow-y:auto}.o-pipeline__menu .o-accordion{min-width:16.875rem}.o-pipeline__menu .o-accordion__title{position:relative;border-bottom-style:solid;border-bottom-width:.0625rem}.o-pipeline__menu .o-accordion__title:before{background-color:var(--border-color)}.o-pipeline__menu .o-accordion__title__btn{width:100%;height:70%;padding:0;text-transform:uppercase;text-align:left}.o-pipeline__menu .o-accordion__title.is-active{border-bottom:none}.o-pipeline__menu .o-accordion__panel{position:relative}.o-pipeline__menu .o-accordion__panel[aria-hidden=false]{border-bottom-style:solid;border-bottom-width:.0625rem}.o-pipeline__menu .o-accordion__panel__head{position:relative;padding:.125rem .625rem 1.25rem}.o-pipeline__menu .o-accordion__panel__head:before{background-color:var(--border-color)}.o-pipeline__menu .o-accordion__panel__head pry-icon{position:absolute;top:.75rem;left:1.4375rem}.o-pipeline__menu .o-accordion__panel__head .a-form-field{padding-left:2.5rem}.o-pipeline__menu .o-accordion__panel .o-pipeline__components{position:relative;z-index:1}.o-pipeline__menu .o-accordion__panel .o-pipeline__components li{position:relative;display:flex;align-items:center;justify-content:space-between;min-height:40px;padding:0 .9375rem;border-top-width:1px;border-top-style:solid;cursor:grab}.o-pipeline__menu .o-accordion__panel .o-pipeline__components li:before{background-color:var(--border-color)}.o-pipeline__menu .o-accordion__panel .o-pipeline__components li:hover{background-color:#fff}.o-pipeline__menu .o-accordion__panel .o-pipeline__components li:active{cursor:grabbing}.o-pipeline__menu .o-accordion__panel .o-pipeline__components li .a-p{margin-bottom:0}.o-pipeline__menu .o-accordion__panel .o-pipeline__components li .a-icon{transform:scale(2.2)}.o-pipeline__workspace{flex:1;display:flex;flex-direction:column;overflow:auto}.o-pipeline .o-pipeline-editor{flex:1;display:flex;flex-direction:row;margin:0 1.25rem;background-color:#fff}.o-pipeline .o-pipeline-editor__grid{flex:1}.o-pipeline .o-pipeline-editor__properties{display:flex;flex-direction:column;width:16.875rem;padding:1.5625rem 1.25rem}.o-pipeline .o-pipeline-editor__properties__node .a-h3{margin-bottom:.9375rem}.o-pipeline .o-pipeline-editor__properties__node .a-h4{margin-bottom:0;padding-bottom:.3125rem;text-transform:uppercase;font-size:.875rem;line-height:1.125rem}.o-pipeline .o-pipeline-editor__properties__node .a-p--type{padding-bottom:.625rem;font-size:.875rem;line-height:1.125rem;overflow-wrap:break-word}.o-pipeline .o-pipeline-editor__properties .a-label{font-weight:700;overflow-wrap:break-word}.o-pipeline .o-pipeline-editor__properties__detail{display:flex;flex-direction:column}.o-pipeline .o-pipeline-editor__properties__errors__title{display:flex;align-items:flex-end;gap:.625rem;margin-bottom:.9375rem}.o-pipeline .o-pipeline-editor__properties__errors__title .a-p{margin-bottom:0;font-weight:700;text-transform:uppercase}.o-pipeline .o-pipeline-editor__properties__errors ul li .type{display:inline-block;padding:.0625rem .3125rem;border-radius:.3125rem}\n"] }]
9
+ args: [{ selector: 'pry-pipeline-css', template: '', encapsulation: ViewEncapsulation.None, styles: [".o-pipeline-layout{height:100%}.o-pipeline-layout__toolbox{display:flex;align-items:center;gap:1.25rem;padding:.8125rem 1.25rem;margin-bottom:1.25rem}.o-pipeline-layout__toolbox:first-of-type{padding-top:1.25rem;min-height:4.625rem}.o-pipeline-layout__toolbox .a-label{margin:0}.o-pipeline-layout__details{padding:1.25rem}.o-pipeline-layout__details .row{gap:2.8125rem}.o-pipeline-layout__details :first-child{flex:0 1 50%}.o-pipeline-layout__details .a-form-field{margin-bottom:.9375rem}.o-pipeline-layout__details .property-value{font-weight:400;font-size:1rem}.o-pipeline-layout .a-h1{margin:0 1.25rem}.o-pipeline-layout .a-table{margin-left:20px;width:calc(100% - 40px)}.o-pipeline-layout .a-table,.o-pipeline-layout .a-table td{cursor:default}.o-pipeline-layout .a-table .a-btn--secondary.-size-sm,.o-pipeline-layout .a-table td .a-btn--secondary.-size-sm{font-size:.875rem}.o-pipeline-layout .canvas{flex:1 1 auto}.o-pipeline-layout .litegraph.dialog{display:none}.o-pipeline{display:flex;flex-direction:row;height:100%}.o-pipeline__menu{min-width:16.875rem;overflow-y:auto}.o-pipeline__menu .o-accordion{min-width:16.875rem}.o-pipeline__workspace{flex:1;display:flex;flex-direction:column;overflow:auto}.o-pipeline .o-pipeline-editor{flex:1;display:flex;flex-direction:row;margin:0 1.25rem;background-color:#fff}.o-pipeline .o-pipeline-editor__grid{flex:1}.o-pipeline .o-pipeline-editor__properties{display:flex;flex-direction:column;width:16.875rem;padding:1.5625rem 1.25rem}.o-pipeline .o-pipeline-editor__properties__node .a-h3{margin-bottom:.9375rem}.o-pipeline .o-pipeline-editor__properties__node .a-h4{margin-bottom:0;padding-bottom:.3125rem;text-transform:uppercase;font-size:.875rem;line-height:1.125rem}.o-pipeline .o-pipeline-editor__properties__node .a-p--type{padding-bottom:.625rem;font-size:.875rem;line-height:1.125rem;overflow-wrap:break-word}.o-pipeline .o-pipeline-editor__properties .a-label{font-weight:700;overflow-wrap:break-word}.o-pipeline .o-pipeline-editor__properties__detail{display:flex;flex-direction:column}.o-pipeline .o-pipeline-editor__properties__errors__title{display:flex;align-items:flex-end;gap:.625rem;margin-bottom:.9375rem}.o-pipeline .o-pipeline-editor__properties__errors__title .a-p{margin-bottom:0;font-weight:700;text-transform:uppercase}.o-pipeline .o-pipeline-editor__properties__errors ul li .type{display:inline-block;padding:.0625rem .3125rem;border-radius:.3125rem}\n"] }]
10
10
  }] });
11
11
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3BpcGVsaW5lL3N0eWxlL2Nzcy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFRN0QsTUFBTSxPQUFPLHVCQUF1Qjs4R0FBdkIsdUJBQXVCO2tHQUF2Qix1QkFBdUIsd0RBSnhCLEVBQUU7OzJGQUlELHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDRSxrQkFBa0IsWUFDbEIsRUFBRSxpQkFFRyxpQkFBaUIsQ0FBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktcGlwZWxpbmUtY3NzJyxcbiAgdGVtcGxhdGU6ICcnLFxuICBzdHlsZVVybHM6IFsnLi9fby1waXBlbGluZS5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgUHJ5UGlwZWxpbmVDc3NDb21wb25lbnQge31cbiJdfQ==
@@ -30,7 +30,6 @@ export class PryRestitutionListComponent extends SubscriptionnerDirective {
30
30
  this.mode = ViewMode;
31
31
  this.selectedMode = ViewMode.CATALOG;
32
32
  this.categories = ['model', 'noModel'];
33
- this.categoryOpened = '';
34
33
  this.PryVisibilityType = PryVisibilityType;
35
34
  this.store.dispatch(ConfigActions.loadWidgets());
36
35
  this.types$ = this.toolboxMenuService.types$;
@@ -51,18 +50,15 @@ export class PryRestitutionListComponent extends SubscriptionnerDirective {
51
50
  this.selectedRestitution = null;
52
51
  this.selectMode(this.mode.CATALOG);
53
52
  }
54
- toggle(category) {
55
- this.categoryOpened = this.categoryOpened === category ? '' : category;
56
- }
57
53
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryRestitutionListComponent, deps: [{ token: i1.ToolboxMenuService }, { token: i1.PryI18nService }, { token: i1.ToolboxManifestService }, { token: i2.Store }], target: i0.ɵɵFactoryTarget.Component }); }
58
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryRestitutionListComponent, selector: "pry-catalog", inputs: { showTabs: "showTabs", customModels: "customModels" }, usesInheritance: true, ngImport: i0, template: "<pry-restitution-css></pry-restitution-css>\n<div class=\"o-catalog\">\n <ng-template [ngIf]=\"selectedMode === mode.CATALOG\">\n <h2 class=\"a-h2\">{{ '@pry.restitution.catalog' | i18n }}</h2>\n <div class=\"o-catalog__filters\">\n <div class=\"o-catalog__filters__by-name\">\n <label id=\"catalog-search-label\" for=\"catalog-search\" class=\"a-label u-visually-hidden\">\n <span>{{ '@pry.toolbox.catalog.filter.name' | i18n }}</span>\n </label>\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.action.search' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"this.search$.next($event)\"\n />\n </div>\n <label class=\"a-label\">{{ '@pry.action.filterByType' | i18n }}</label>\n <div class=\"o-catalog__filters__by-type\">\n <ul class=\"o-catalog__filters__by-type__list\">\n <li *ngFor=\"let typeOpt of types$ | async\">\n <input\n type=\"radio\"\n class=\"a-form-field u-sr-only\"\n name=\"catalog-filter\"\n id=\"catalog-button-{{ typeOpt.type }}\"\n [checked]=\"typeOpt.type === (type$ | async)\"\n (change)=\"type$.next(typeOpt.type)\"\n />\n <label\n class=\"a-label\"\n id=\"catalog-button-label-{{ typeOpt.type }}\"\n for=\"catalog-button-{{ typeOpt.type }}\"\n [title]=\"typeOpt.label | i18n\"\n >\n <span class=\"u-sr-only\">{{ typeOpt.label | i18n }} </span>\n <pry-icon [width]=\"18\" [height]=\"18\" [iconSvg]=\"typeOpt.icon\"></pry-icon>\n </label>\n </li>\n </ul>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n (click)=\"type$.next(undefined)\"\n [disabled]=\"!type$.getValue()\"\n [class.u-visually-hidden]=\"!type$.getValue()\"\n >\n <pry-icon [width]=\"15\" [height]=\"15\" iconSvg=\"delete\"></pry-icon>\n {{ '@pry.toolbox.catalog.filter.delete' | i18n }}\n </button>\n </div>\n </div>\n <ng-container *ngIf=\"showTabs; else list\">\n <div class=\"o-accordion\" role=\"tablist\" aria-multiselectable=\"false\">\n <ng-container *ngFor=\"let category of categories\">\n <h2 class=\"o-accordion__title\" [class.is-active]=\"categoryOpened === category\">\n <button\n type=\"button\"\n class=\"o-accordion__title__btn\"\n [id]=\"'button_' + category\"\n role=\"tab\"\n [attr.aria-controls]=\"'panel_' + category\"\n [attr.aria-selected]=\"categoryOpened === category\"\n [attr.aria-expanded]=\"categoryOpened === category\"\n (click)=\"toggle(category)\"\n >\n <span>\n {{ '@pry.restitution.catalogTabs.' + category | i18n }}\n ({{ category === 'model' ? (nonCustomWidgets$ | async)?.length : (customWidgets$ | async)?.length }})\n </span>\n <pry-icon\n [width]=\"15\"\n [height]=\"15\"\n [iconSvg]=\"categoryOpened === category ? 'chevron_top_rounded' : 'chevron_bottom_rounded'\"\n ></pry-icon>\n </button>\n </h2>\n <div\n class=\"o-accordion__panel\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'button_' + category\"\n [id]=\"'panel_' + category\"\n [attr.aria-hidden]=\"categoryOpened !== category\"\n >\n <ng-container *ngIf=\"categoryOpened === category\">\n <ul class=\"o-catalog__list\" role=\"list\" aria-live=\"polite\">\n <ng-container *ngIf=\"categoryOpened === 'model'\">\n <pry-catalog-item\n *ngFor=\"let widget of nonCustomWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ng-container>\n <ng-container *ngIf=\"categoryOpened === 'noModel'\">\n <pry-catalog-item\n *ngFor=\"let widget of customWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ng-container>\n </ul>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-template #list>\n <ul class=\"o-catalog__list\" role=\"list\" aria-live=\"polite\">\n <pry-catalog-item\n *ngFor=\"let widget of filteredWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ul>\n </ng-template>\n </ng-template>\n\n <ng-template [ngIf]=\"selectedMode === mode.CONSULT\">\n <div class=\"o-catalog__create\">\n <button class=\"a-btn a-btn--secondary\" (click)=\"closeRestitution()\">\n {{ '@pry.restitution.cancel' | i18n }}\n </button>\n </div>\n\n <pry-restitution\n [selectedRestitution]=\"selectedRestitution\"\n [edit]=\"false\"\n (restitutionCreated)=\"closeRestitution()\"\n ></pry-restitution>\n </ng-template>\n\n <ng-template [ngIf]=\"selectedMode === mode.CREATION\">\n <div class=\"o-catalog__create\">\n <button class=\"a-btn a-btn--ghost\" (click)=\"selectMode(mode.CATALOG)\">\n {{ '@pry.restitution.cancel' | i18n }}\n </button>\n </div>\n\n <pry-restitution (restitutionCreated)=\"closeRestitution()\"></pry-restitution>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.PryRestitutionComponent, selector: "pry-restitution", inputs: ["selectedRestitution", "edit", "isDataSourceSelected", "bindId"], outputs: ["restitutionCreated"] }, { kind: "component", type: i6.PryCatalogCssComponent, selector: "pry-restitution-css" }, { kind: "component", type: i7.PryRestitutionListItemComponent, selector: "pry-catalog-item", inputs: ["widget"], outputs: ["selectRestitution"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.I18nPipe, name: "i18n" }] }); }
54
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryRestitutionListComponent, selector: "pry-catalog", inputs: { showTabs: "showTabs", customModels: "customModels" }, usesInheritance: true, ngImport: i0, template: "<pry-restitution-css></pry-restitution-css>\n<div class=\"o-catalog\">\n <ng-template [ngIf]=\"selectedMode === mode.CATALOG\">\n <h2 class=\"a-h2\">{{ '@pry.restitution.catalog' | i18n }}</h2>\n <div class=\"o-catalog__filters\">\n <div class=\"o-catalog__filters__by-name\">\n <label id=\"catalog-search-label\" for=\"catalog-search\" class=\"a-label u-visually-hidden\">\n <span>{{ '@pry.toolbox.catalog.filter.name' | i18n }}</span>\n </label>\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.action.search' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"this.search$.next($event)\"\n />\n </div>\n <label class=\"a-label\">{{ '@pry.action.filterByType' | i18n }}</label>\n <div class=\"o-catalog__filters__by-type\">\n <ul class=\"o-catalog__filters__by-type__list\">\n <li *ngFor=\"let typeOpt of types$ | async\">\n <input\n type=\"radio\"\n class=\"a-form-field u-sr-only\"\n name=\"catalog-filter\"\n id=\"catalog-button-{{ typeOpt.type }}\"\n [checked]=\"typeOpt.type === (type$ | async)\"\n (change)=\"type$.next(typeOpt.type)\"\n />\n <label\n class=\"a-label\"\n id=\"catalog-button-label-{{ typeOpt.type }}\"\n for=\"catalog-button-{{ typeOpt.type }}\"\n [title]=\"typeOpt.label | i18n\"\n >\n <span class=\"u-sr-only\">{{ typeOpt.label | i18n }} </span>\n <pry-icon [width]=\"18\" [height]=\"18\" [iconSvg]=\"typeOpt.icon\"></pry-icon>\n </label>\n </li>\n </ul>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n (click)=\"type$.next(undefined)\"\n [disabled]=\"!type$.getValue()\"\n [class.u-visually-hidden]=\"!type$.getValue()\"\n >\n <pry-icon [width]=\"15\" [height]=\"15\" iconSvg=\"delete\"></pry-icon>\n {{ '@pry.toolbox.catalog.filter.delete' | i18n }}\n </button>\n </div>\n </div>\n <ng-container *ngIf=\"showTabs; else list\">\n <div class=\"o-accordion\" role=\"tablist\" aria-multiselectable=\"false\">\n <pry-accordion>\n <pry-accordion-item\n *ngFor=\"let category of categories; let index = index\"\n [item]=\"category\"\n [index]=\"index\"\n translationStringBase=\"@pry.restitution.catalogTabs.\"\n [length]=\"category === 'model' ? (nonCustomWidgets$ | async)?.length : (customWidgets$ | async)?.length\"\n >\n <ul class=\"o-catalog__list\" role=\"list\" aria-live=\"polite\">\n <ng-container *ngIf=\"category === 'model'\">\n <pry-catalog-item\n *ngFor=\"let widget of nonCustomWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ng-container>\n <ng-container *ngIf=\"category === 'noModel'\">\n <pry-catalog-item\n *ngFor=\"let widget of customWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ng-container>\n </ul>\n </pry-accordion-item>\n </pry-accordion>\n </div>\n </ng-container>\n\n <ng-template #list>\n <ul class=\"o-catalog__list\" role=\"list\" aria-live=\"polite\">\n <pry-catalog-item\n *ngFor=\"let widget of filteredWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ul>\n </ng-template>\n </ng-template>\n\n <ng-template [ngIf]=\"selectedMode === mode.CONSULT\">\n <div class=\"o-catalog__create\">\n <button class=\"a-btn a-btn--secondary\" (click)=\"closeRestitution()\">\n {{ '@pry.restitution.cancel' | i18n }}\n </button>\n </div>\n\n <pry-restitution\n [selectedRestitution]=\"selectedRestitution\"\n [edit]=\"false\"\n (restitutionCreated)=\"closeRestitution()\"\n ></pry-restitution>\n </ng-template>\n\n <ng-template [ngIf]=\"selectedMode === mode.CREATION\">\n <div class=\"o-catalog__create\">\n <button class=\"a-btn a-btn--ghost\" (click)=\"selectMode(mode.CATALOG)\">\n {{ '@pry.restitution.cancel' | i18n }}\n </button>\n </div>\n\n <pry-restitution (restitutionCreated)=\"closeRestitution()\"></pry-restitution>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.AccordionComponent, selector: "pry-accordion" }, { kind: "component", type: i1.AccordionItemComponent, selector: "pry-accordion-item", inputs: ["item", "borderColor", "index", "translationStringBase", "length", "showSearchBar", "search$"], outputs: ["search"] }, { kind: "component", type: i1.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.PryRestitutionComponent, selector: "pry-restitution", inputs: ["selectedRestitution", "edit", "isDataSourceSelected", "bindId"], outputs: ["restitutionCreated"] }, { kind: "component", type: i6.PryCatalogCssComponent, selector: "pry-restitution-css" }, { kind: "component", type: i7.PryRestitutionListItemComponent, selector: "pry-catalog-item", inputs: ["widget"], outputs: ["selectRestitution"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.I18nPipe, name: "i18n" }] }); }
59
55
  }
60
56
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryRestitutionListComponent, decorators: [{
61
57
  type: Component,
62
- args: [{ selector: 'pry-catalog', template: "<pry-restitution-css></pry-restitution-css>\n<div class=\"o-catalog\">\n <ng-template [ngIf]=\"selectedMode === mode.CATALOG\">\n <h2 class=\"a-h2\">{{ '@pry.restitution.catalog' | i18n }}</h2>\n <div class=\"o-catalog__filters\">\n <div class=\"o-catalog__filters__by-name\">\n <label id=\"catalog-search-label\" for=\"catalog-search\" class=\"a-label u-visually-hidden\">\n <span>{{ '@pry.toolbox.catalog.filter.name' | i18n }}</span>\n </label>\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.action.search' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"this.search$.next($event)\"\n />\n </div>\n <label class=\"a-label\">{{ '@pry.action.filterByType' | i18n }}</label>\n <div class=\"o-catalog__filters__by-type\">\n <ul class=\"o-catalog__filters__by-type__list\">\n <li *ngFor=\"let typeOpt of types$ | async\">\n <input\n type=\"radio\"\n class=\"a-form-field u-sr-only\"\n name=\"catalog-filter\"\n id=\"catalog-button-{{ typeOpt.type }}\"\n [checked]=\"typeOpt.type === (type$ | async)\"\n (change)=\"type$.next(typeOpt.type)\"\n />\n <label\n class=\"a-label\"\n id=\"catalog-button-label-{{ typeOpt.type }}\"\n for=\"catalog-button-{{ typeOpt.type }}\"\n [title]=\"typeOpt.label | i18n\"\n >\n <span class=\"u-sr-only\">{{ typeOpt.label | i18n }} </span>\n <pry-icon [width]=\"18\" [height]=\"18\" [iconSvg]=\"typeOpt.icon\"></pry-icon>\n </label>\n </li>\n </ul>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n (click)=\"type$.next(undefined)\"\n [disabled]=\"!type$.getValue()\"\n [class.u-visually-hidden]=\"!type$.getValue()\"\n >\n <pry-icon [width]=\"15\" [height]=\"15\" iconSvg=\"delete\"></pry-icon>\n {{ '@pry.toolbox.catalog.filter.delete' | i18n }}\n </button>\n </div>\n </div>\n <ng-container *ngIf=\"showTabs; else list\">\n <div class=\"o-accordion\" role=\"tablist\" aria-multiselectable=\"false\">\n <ng-container *ngFor=\"let category of categories\">\n <h2 class=\"o-accordion__title\" [class.is-active]=\"categoryOpened === category\">\n <button\n type=\"button\"\n class=\"o-accordion__title__btn\"\n [id]=\"'button_' + category\"\n role=\"tab\"\n [attr.aria-controls]=\"'panel_' + category\"\n [attr.aria-selected]=\"categoryOpened === category\"\n [attr.aria-expanded]=\"categoryOpened === category\"\n (click)=\"toggle(category)\"\n >\n <span>\n {{ '@pry.restitution.catalogTabs.' + category | i18n }}\n ({{ category === 'model' ? (nonCustomWidgets$ | async)?.length : (customWidgets$ | async)?.length }})\n </span>\n <pry-icon\n [width]=\"15\"\n [height]=\"15\"\n [iconSvg]=\"categoryOpened === category ? 'chevron_top_rounded' : 'chevron_bottom_rounded'\"\n ></pry-icon>\n </button>\n </h2>\n <div\n class=\"o-accordion__panel\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'button_' + category\"\n [id]=\"'panel_' + category\"\n [attr.aria-hidden]=\"categoryOpened !== category\"\n >\n <ng-container *ngIf=\"categoryOpened === category\">\n <ul class=\"o-catalog__list\" role=\"list\" aria-live=\"polite\">\n <ng-container *ngIf=\"categoryOpened === 'model'\">\n <pry-catalog-item\n *ngFor=\"let widget of nonCustomWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ng-container>\n <ng-container *ngIf=\"categoryOpened === 'noModel'\">\n <pry-catalog-item\n *ngFor=\"let widget of customWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ng-container>\n </ul>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-template #list>\n <ul class=\"o-catalog__list\" role=\"list\" aria-live=\"polite\">\n <pry-catalog-item\n *ngFor=\"let widget of filteredWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ul>\n </ng-template>\n </ng-template>\n\n <ng-template [ngIf]=\"selectedMode === mode.CONSULT\">\n <div class=\"o-catalog__create\">\n <button class=\"a-btn a-btn--secondary\" (click)=\"closeRestitution()\">\n {{ '@pry.restitution.cancel' | i18n }}\n </button>\n </div>\n\n <pry-restitution\n [selectedRestitution]=\"selectedRestitution\"\n [edit]=\"false\"\n (restitutionCreated)=\"closeRestitution()\"\n ></pry-restitution>\n </ng-template>\n\n <ng-template [ngIf]=\"selectedMode === mode.CREATION\">\n <div class=\"o-catalog__create\">\n <button class=\"a-btn a-btn--ghost\" (click)=\"selectMode(mode.CATALOG)\">\n {{ '@pry.restitution.cancel' | i18n }}\n </button>\n </div>\n\n <pry-restitution (restitutionCreated)=\"closeRestitution()\"></pry-restitution>\n </ng-template>\n</div>\n" }]
58
+ args: [{ selector: 'pry-catalog', template: "<pry-restitution-css></pry-restitution-css>\n<div class=\"o-catalog\">\n <ng-template [ngIf]=\"selectedMode === mode.CATALOG\">\n <h2 class=\"a-h2\">{{ '@pry.restitution.catalog' | i18n }}</h2>\n <div class=\"o-catalog__filters\">\n <div class=\"o-catalog__filters__by-name\">\n <label id=\"catalog-search-label\" for=\"catalog-search\" class=\"a-label u-visually-hidden\">\n <span>{{ '@pry.toolbox.catalog.filter.name' | i18n }}</span>\n </label>\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.action.search' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"this.search$.next($event)\"\n />\n </div>\n <label class=\"a-label\">{{ '@pry.action.filterByType' | i18n }}</label>\n <div class=\"o-catalog__filters__by-type\">\n <ul class=\"o-catalog__filters__by-type__list\">\n <li *ngFor=\"let typeOpt of types$ | async\">\n <input\n type=\"radio\"\n class=\"a-form-field u-sr-only\"\n name=\"catalog-filter\"\n id=\"catalog-button-{{ typeOpt.type }}\"\n [checked]=\"typeOpt.type === (type$ | async)\"\n (change)=\"type$.next(typeOpt.type)\"\n />\n <label\n class=\"a-label\"\n id=\"catalog-button-label-{{ typeOpt.type }}\"\n for=\"catalog-button-{{ typeOpt.type }}\"\n [title]=\"typeOpt.label | i18n\"\n >\n <span class=\"u-sr-only\">{{ typeOpt.label | i18n }} </span>\n <pry-icon [width]=\"18\" [height]=\"18\" [iconSvg]=\"typeOpt.icon\"></pry-icon>\n </label>\n </li>\n </ul>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n (click)=\"type$.next(undefined)\"\n [disabled]=\"!type$.getValue()\"\n [class.u-visually-hidden]=\"!type$.getValue()\"\n >\n <pry-icon [width]=\"15\" [height]=\"15\" iconSvg=\"delete\"></pry-icon>\n {{ '@pry.toolbox.catalog.filter.delete' | i18n }}\n </button>\n </div>\n </div>\n <ng-container *ngIf=\"showTabs; else list\">\n <div class=\"o-accordion\" role=\"tablist\" aria-multiselectable=\"false\">\n <pry-accordion>\n <pry-accordion-item\n *ngFor=\"let category of categories; let index = index\"\n [item]=\"category\"\n [index]=\"index\"\n translationStringBase=\"@pry.restitution.catalogTabs.\"\n [length]=\"category === 'model' ? (nonCustomWidgets$ | async)?.length : (customWidgets$ | async)?.length\"\n >\n <ul class=\"o-catalog__list\" role=\"list\" aria-live=\"polite\">\n <ng-container *ngIf=\"category === 'model'\">\n <pry-catalog-item\n *ngFor=\"let widget of nonCustomWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ng-container>\n <ng-container *ngIf=\"category === 'noModel'\">\n <pry-catalog-item\n *ngFor=\"let widget of customWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ng-container>\n </ul>\n </pry-accordion-item>\n </pry-accordion>\n </div>\n </ng-container>\n\n <ng-template #list>\n <ul class=\"o-catalog__list\" role=\"list\" aria-live=\"polite\">\n <pry-catalog-item\n *ngFor=\"let widget of filteredWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ul>\n </ng-template>\n </ng-template>\n\n <ng-template [ngIf]=\"selectedMode === mode.CONSULT\">\n <div class=\"o-catalog__create\">\n <button class=\"a-btn a-btn--secondary\" (click)=\"closeRestitution()\">\n {{ '@pry.restitution.cancel' | i18n }}\n </button>\n </div>\n\n <pry-restitution\n [selectedRestitution]=\"selectedRestitution\"\n [edit]=\"false\"\n (restitutionCreated)=\"closeRestitution()\"\n ></pry-restitution>\n </ng-template>\n\n <ng-template [ngIf]=\"selectedMode === mode.CREATION\">\n <div class=\"o-catalog__create\">\n <button class=\"a-btn a-btn--ghost\" (click)=\"selectMode(mode.CATALOG)\">\n {{ '@pry.restitution.cancel' | i18n }}\n </button>\n </div>\n\n <pry-restitution (restitutionCreated)=\"closeRestitution()\"></pry-restitution>\n </ng-template>\n</div>\n" }]
63
59
  }], ctorParameters: function () { return [{ type: i1.ToolboxMenuService }, { type: i1.PryI18nService }, { type: i1.ToolboxManifestService }, { type: i2.Store }]; }, propDecorators: { showTabs: [{
64
60
  type: Input
65
61
  }], customModels: [{
66
62
  type: Input
67
63
  }] } });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdGl0dXRpb24tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9yZXN0aXR1dGlvbi9jb21wb25lbnRzL3Jlc3RpdHV0aW9uLWxpc3QvcmVzdGl0dXRpb24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9yZXN0aXR1dGlvbi9jb21wb25lbnRzL3Jlc3RpdHV0aW9uLWxpc3QvcmVzdGl0dXRpb24tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBRUwsYUFBYSxFQUViLGlCQUFpQixFQUNqQix3QkFBd0IsRUFHeEIsUUFBUSxFQUVULE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7QUFNdkUsTUFBTSxPQUFPLDJCQUE0QixTQUFRLHdCQUF3QjtJQUV2RSxJQUNJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLE1BQWdCO1FBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQWVELFlBQ1Usa0JBQXNDLEVBQ3RDLGdCQUFnQyxFQUNoQyxzQkFBOEMsRUFDOUMsS0FBWTtRQUVwQixLQUFLLEVBQUUsQ0FBQztRQUxBLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFnQjtRQUNoQywyQkFBc0IsR0FBdEIs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Z0I7UUFDZCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQWdCO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3pFLENBQUM7OEdBMUVVLDJCQUEyQjtrR0FBM0IsMkJBQTJCLDBJQ25CeEMsMDNMQWdKQTs7MkZEN0hhLDJCQUEyQjtrQkFKdkMsU0FBUzsrQkFDRSxhQUFhOytMQUlkLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUYsWUFBWTtzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBDYXRhbG9nRW50cnksXG4gIENvbmZpZ0FjdGlvbnMsXG4gIFByeUkxOG5TZXJ2aWNlLFxuICBQcnlWaXNpYmlsaXR5VHlwZSxcbiAgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlLFxuICBUb29sYm94TWFuaWZlc3RTZXJ2aWNlLFxuICBUb29sYm94TWVudVNlcnZpY2UsXG4gIFZpZXdNb2RlLFxuICBXaWRnZXRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1jYXRhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3RpdHV0aW9uLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByeVJlc3RpdHV0aW9uTGlzdENvbXBvbmVudCBleHRlbmRzIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSB7XG4gIEBJbnB1dCgpIHNob3dUYWJzID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgZ2V0IGN1c3RvbU1vZGVscygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1c3RvbU1vZGVscztcbiAgfVxuICBzZXQgY3VzdG9tTW9kZWxzKG1vZGVsczogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9jdXN0b21Nb2RlbHMgPSBbJ2RldGFpbCcsICdpZnJhbWUnLCAuLi5tb2RlbHNdO1xuICB9XG4gIHByaXZhdGUgX2N1c3RvbU1vZGVscyA9IFsnZGV0YWlsJywgJ2lmcmFtZSddO1xuICBzZWFyY2gkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG4gIHR5cGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx1bmRlZmluZWQgfCBzdHJpbmc+KHVuZGVmaW5lZCk7XG4gIGZpbHRlcmVkV2lkZ2V0cyQ6IE9ic2VydmFibGU8Q2F0YWxvZ0VudHJ5W10+O1xuICBub25DdXN0b21XaWRnZXRzJDogT2JzZXJ2YWJsZTxDYXRhbG9nRW50cnlbXT47XG4gIGN1c3RvbVdpZGdldHMkOiBPYnNlcnZhYmxlPENhdGFsb2dFbnRyeVtdPjtcbiAgdHlwZXMkOiBPYnNlcnZhYmxlPHsgaWNvbjogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyB0eXBlOiBzdHJpbmcgfVtdPjtcbiAgc2VsZWN0ZWRSZXN0aXR1dGlvbjogV2lkZ2V0IHwgbnVsbCA9IG51bGw7XG4gIG1vZGUgPSBWaWV3TW9kZTtcbiAgc2VsZWN0ZWRNb2RlOiBWaWV3TW9kZSA9IFZpZXdNb2RlLkNBVEFMT0c7XG4gIGNhdGVnb3JpZXMgPSBbJ21vZGVsJywgJ25vTW9kZWwnXTtcbiAgY2F0ZWdvcnlPcGVuZWQ6IHN0cmluZyA9ICcnO1xuICBQcnlWaXNpYmlsaXR5VHlwZSA9IFByeVZpc2liaWxpdHlUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdG9vbGJveE1lbnVTZXJ2aWNlOiBUb29sYm94TWVudVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBwcml2YXRlIHRvb2xib3hNYW5pZmVzdFNlcnZpY2U6IFRvb2xib3hNYW5pZmVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmVcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMubG9hZFdpZGdldHMoKSk7XG4gICAgdGhpcy50eXBlcyQgPSB0aGlzLnRvb2xib3hNZW51U2VydmljZS50eXBlcyQ7XG4gICAgdGhpcy5maWx0ZXJlZFdpZGdldHMkID0gY29tYmluZUxhdGVzdChbdGhpcy50b29sYm94TWVudVNlcnZpY2UubWVudUxpc3QkLCB0aGlzLnNlYXJjaCQsIHRoaXMudHlwZSRdKS5waXBlKFxuICAgICAgbWFwKChbd2lkZ2V0cywgc2VhcmNoLCB0eXBlXSkgPT5cbiAgICAgICAgd2lkZ2V0cy5maWx0ZXIoXG4gICAgICAgICAgKHdpZGdldCkgPT5cbiAgICAgICAgICAgIChzZWFyY2gubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHdpZGdldC5sYWJlbCkudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb2NhbGVMb3dlckNhc2UoKSkpICYmXG4gICAgICAgICAgICAoIXR5cGUgfHwgdGhpcy50b29sYm94TWFuaWZlc3RTZXJ2aWNlLmdldCh3aWRnZXQudHlwZSkudHlwZSA9PT0gdHlwZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5ub25DdXN0b21XaWRnZXRzJCA9IHRoaXMuZmlsdGVyZWRXaWRnZXRzJC5waXBlKFxuICAgICAgbWFwKCh3aWRnZXRzKSA9PlxuICAgICAgICB3aWRnZXRzLmZpbHRlcihcbiAgICAgICAgICAod2lkZ2V0KSA9PiB0aGlzLnRvb2xib3hNYW5pZmVzdFNlcnZpY2UuaXNNb2RlbCh3aWRnZXQudHlwZSkgfHwgdGhpcy5jdXN0b21Nb2RlbHMuaW5jbHVkZXMod2lkZ2V0LnR5cGUpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuY3VzdG9tV2lkZ2V0cyQgPSB0aGlzLmZpbHRlcmVkV2lkZ2V0cyQucGlwZShcbiAgICAgIG1hcCgod2lkZ2V0cykgPT5cbiAgICAgICAgd2lkZ2V0cy5maWx0ZXIoXG4gICAgICAgICAgKHdpZGdldCkgPT4gIXRoaXMudG9vbGJveE1hbmlmZXN0U2VydmljZS5pc01vZGVsKHdpZGdldC50eXBlKSAmJiAhdGhpcy5jdXN0b21Nb2RlbHMuaW5jbHVkZXMod2lkZ2V0LnR5cGUpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgc2VsZWN0TW9kZShuZXdNb2RlOiBWaWV3TW9kZSkge1xuICAgIHRoaXMuc2VsZWN0ZWRNb2RlID0gbmV3TW9kZTtcbiAgfVxuXG4gIHNlbGVjdFJlc3RpdHV0aW9uKCRldmVudDogV2lkZ2V0KSB7XG4gICAgdGhpcy5zZWxlY3RlZFJlc3RpdHV0aW9uID0gJGV2ZW50O1xuICAgIHRoaXMuc2VsZWN0TW9kZShWaWV3TW9kZS5DT05TVUxUKTtcbiAgfVxuXG4gIGNsb3NlUmVzdGl0dXRpb24oKSB7XG4gICAgdGhpcy5zZWxlY3RlZFJlc3RpdHV0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNlbGVjdE1vZGUodGhpcy5tb2RlLkNBVEFMT0cpO1xuICB9XG5cbiAgdG9nZ2xlKGNhdGVnb3J5OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNhdGVnb3J5T3BlbmVkID0gdGhpcy5jYXRlZ29yeU9wZW5lZCA9PT0gY2F0ZWdvcnkgPyAnJyA6IGNhdGVnb3J5O1xuICB9XG59XG4iLCI8cHJ5LXJlc3RpdHV0aW9uLWNzcz48L3ByeS1yZXN0aXR1dGlvbi1jc3M+XG48ZGl2IGNsYXNzPVwiby1jYXRhbG9nXCI+XG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJzZWxlY3RlZE1vZGUgPT09IG1vZGUuQ0FUQUxPR1wiPlxuICAgIDxoMiBjbGFzcz1cImEtaDJcIj57eyAnQHByeS5yZXN0aXR1dGlvbi5jYXRhbG9nJyB8IGkxOG4gfX08L2gyPlxuICAgIDxkaXYgY2xhc3M9XCJvLWNhdGFsb2dfX2ZpbHRlcnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLWNhdGFsb2dfX2ZpbHRlcnNfX2J5LW5hbWVcIj5cbiAgICAgICAgPGxhYmVsIGlkPVwiY2F0YWxvZy1zZWFyY2gtbGFiZWxcIiBmb3I9XCJjYXRhbG9nLXNlYXJjaFwiIGNsYXNzPVwiYS1sYWJlbCB1LXZpc3VhbGx5LWhpZGRlblwiPlxuICAgICAgICAgIDxzcGFuPnt7ICdAcHJ5LnRvb2xib3guY2F0YWxvZy5maWx0ZXIubmFtZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInNlYXJjaFwiIFt3aWR0aF09XCIxN1wiIFtoZWlnaHRdPVwiMTdcIj48L3ByeS1pY29uPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBpZD1cImNhdGFsb2ctc2VhcmNoXCJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQHByeS5hY3Rpb24uc2VhcmNoJyB8IGkxOG5cIlxuICAgICAgICAgIFtuZ01vZGVsXT1cInNlYXJjaCQgfCBhc3luY1wiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidGhpcy5zZWFyY2gkLm5leHQoJGV2ZW50KVwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIj57eyAnQHByeS5hY3Rpb24uZmlsdGVyQnlUeXBlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cIm8tY2F0YWxvZ19fZmlsdGVyc19fYnktdHlwZVwiPlxuICAgICAgICA8dWwgY2xhc3M9XCJvLWNhdGFsb2dfX2ZpbHRlcnNfX2J5LXR5cGVfX2xpc3RcIj5cbiAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IHR5cGVPcHQgb2YgdHlwZXMkIHwgYXN5bmNcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZCB1LXNyLW9ubHlcIlxuICAgICAgICAgICAgICBuYW1lPVwiY2F0YWxvZy1maWx0ZXJcIlxuICAgICAgICAgICAgICBpZD1cImNhdGFsb2ctYnV0dG9uLXt7IHR5cGVPcHQudHlwZSB9fVwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInR5cGVPcHQudHlwZSA9PT0gKHR5cGUkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0eXBlJC5uZXh0KHR5cGVPcHQudHlwZSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImEtbGFiZWxcIlxuICAgICAgICAgICAgICBpZD1cImNhdGFsb2ctYnV0dG9uLWxhYmVsLXt7IHR5cGVPcHQudHlwZSB9fVwiXG4gICAgICAgICAgICAgIGZvcj1cImNhdGFsb2ctYnV0dG9uLXt7IHR5cGVPcHQudHlwZSB9fVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJ0eXBlT3B0LmxhYmVsIHwgaTE4blwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS1zci1vbmx5XCI+e3sgdHlwZU9wdC5sYWJlbCB8IGkxOG4gfX0gPC9zcGFuPlxuICAgICAgICAgICAgICA8cHJ5LWljb24gW3dpZHRoXT1cIjE4XCIgW2hlaWdodF09XCIxOFwiIFtpY29uU3ZnXT1cInR5cGVPcHQuaWNvblwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLXRleHQgLWxpbmstbGlrZVwiXG4gICAgICAgICAgKGNsaWNrKT1cInR5cGUkLm5leHQodW5kZWZpbmVkKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiF0eXBlJC5nZXRWYWx1ZSgpXCJcbiAgICAgICAgICBbY2xhc3MudS12aXN1YWxseS1oaWRkZW5dPVwiIXR5cGUkLmdldFZhbHVlKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHByeS1pY29uIFt3aWR0aF09XCIxNVwiIFtoZWlnaHRdPVwiMTVcIiBpY29uU3ZnPVwiZGVsZXRlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICB7eyAnQHByeS50b29sYm94LmNhdGFsb2cuZmlsdGVyLmRlbGV0ZScgfCBpMThuIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUYWJzOyBlbHNlIGxpc3RcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLWFjY29yZGlvblwiIHJvbGU9XCJ0YWJsaXN0XCIgYXJpYS1tdWx0aXNlbGVjdGFibGU9XCJmYWxzZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzXCI+XG4gICAgICAgICAgPGgyIGNsYXNzPVwiby1hY2NvcmRpb25fX3RpdGxlXCIgW2NsYXNzLmlzLWFjdGl2ZV09XCJjYXRlZ29yeU9wZW5lZCA9PT0gY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiby1hY2NvcmRpb25fX3RpdGxlX19idG5cIlxuICAgICAgICAgICAgICBbaWRdPVwiJ2J1dHRvbl8nICsgY2F0ZWdvcnlcIlxuICAgICAgICAgICAgICByb2xlPVwidGFiXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCIncGFuZWxfJyArIGNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJjYXRlZ29yeU9wZW5lZCA9PT0gY2F0ZWdvcnlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImNhdGVnb3J5T3BlbmVkID09PSBjYXRlZ29yeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGUoY2F0ZWdvcnkpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAge3sgJ0BwcnkucmVzdGl0dXRpb24uY2F0YWxvZ1RhYnMuJyArIGNhdGVnb3J5IHwgaTE4biB9fVxuICAgICAgICAgICAgICAgICh7eyBjYXRlZ29yeSA9PT0gJ21vZGVsJyA/IChub25DdXN0b21XaWRnZXRzJCB8IGFzeW5jKT8ubGVuZ3RoIDogKGN1c3RvbVdpZGdldHMkIHwgYXN5bmMpPy5sZW5ndGggfX0pXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHByeS1pY29uXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICBbaWNvblN2Z109XCJjYXRlZ29yeU9wZW5lZCA9PT0gY2F0ZWdvcnkgPyAnY2hldnJvbl90b3Bfcm91bmRlZCcgOiAnY2hldnJvbl9ib3R0b21fcm91bmRlZCdcIlxuICAgICAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJvLWFjY29yZGlvbl9fcGFuZWxcIlxuICAgICAgICAgICAgcm9sZT1cInRhYnBhbmVsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCInYnV0dG9uXycgKyBjYXRlZ29yeVwiXG4gICAgICAgICAgICBbaWRdPVwiJ3BhbmVsXycgKyBjYXRlZ29yeVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCJjYXRlZ29yeU9wZW5lZCAhPT0gY2F0ZWdvcnlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXRlZ29yeU9wZW5lZCA9PT0gY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiby1jYXRhbG9nX19saXN0XCIgcm9sZT1cImxpc3RcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2F0ZWdvcnlPcGVuZWQgPT09ICdtb2RlbCdcIj5cbiAgICAgICAgICAgICAgICAgIDxwcnktY2F0YWxvZy1pdGVtXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB3aWRnZXQgb2Ygbm9uQ3VzdG9tV2lkZ2V0cyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIFt3aWRnZXRdPVwid2lkZ2V0XCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdFJlc3RpdHV0aW9uKT1cInNlbGVjdFJlc3RpdHV0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgPjwvcHJ5LWNhdGFsb2ctaXRlbT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2F0ZWdvcnlPcGVuZWQgPT09ICdub01vZGVsJ1wiPlxuICAgICAgICAgICAgICAgICAgPHByeS1jYXRhbG9nLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHdpZGdldCBvZiBjdXN0b21XaWRnZXRzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgW3dpZGdldF09XCJ3aWRnZXRcIlxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0UmVzdGl0dXRpb24pPVwic2VsZWN0UmVzdGl0dXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICA+PC9wcnktY2F0YWxvZy1pdGVtPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI2xpc3Q+XG4gICAgICA8dWwgY2xhc3M9XCJvLWNhdGFsb2dfX2xpc3RcIiByb2xlPVwibGlzdFwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICA8cHJ5LWNhdGFsb2ctaXRlbVxuICAgICAgICAgICpuZ0Zvcj1cImxldCB3aWRnZXQgb2YgZmlsdGVyZWRXaWRnZXRzJCB8IGFzeW5jXCJcbiAgICAgICAgICBbd2lkZ2V0XT1cIndpZGdldFwiXG4gICAgICAgICAgKHNlbGVjdFJlc3RpdHV0aW9uKT1cInNlbGVjdFJlc3RpdHV0aW9uKCRldmVudClcIlxuICAgICAgICA+PC9wcnktY2F0YWxvZy1pdGVtPlxuICAgICAgPC91bD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJzZWxlY3RlZE1vZGUgPT09IG1vZGUuQ09OU1VMVFwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLWNhdGFsb2dfX2NyZWF0ZVwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwiY2xvc2VSZXN0aXR1dGlvbigpXCI+XG4gICAgICAgIHt7ICdAcHJ5LnJlc3RpdHV0aW9uLmNhbmNlbCcgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxwcnktcmVzdGl0dXRpb25cbiAgICAgIFtzZWxlY3RlZFJlc3RpdHV0aW9uXT1cInNlbGVjdGVkUmVzdGl0dXRpb25cIlxuICAgICAgW2VkaXRdPVwiZmFsc2VcIlxuICAgICAgKHJlc3RpdHV0aW9uQ3JlYXRlZCk9XCJjbG9zZVJlc3RpdHV0aW9uKClcIlxuICAgID48L3ByeS1yZXN0aXR1dGlvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwic2VsZWN0ZWRNb2RlID09PSBtb2RlLkNSRUFUSU9OXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8tY2F0YWxvZ19fY3JlYXRlXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLWdob3N0XCIgKGNsaWNrKT1cInNlbGVjdE1vZGUobW9kZS5DQVRBTE9HKVwiPlxuICAgICAgICB7eyAnQHByeS5yZXN0aXR1dGlvbi5jYW5jZWwnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8cHJ5LXJlc3RpdHV0aW9uIChyZXN0aXR1dGlvbkNyZWF0ZWQpPVwiY2xvc2VSZXN0aXR1dGlvbigpXCI+PC9wcnktcmVzdGl0dXRpb24+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdGl0dXRpb24tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9yZXN0aXR1dGlvbi9jb21wb25lbnRzL3Jlc3RpdHV0aW9uLWxpc3QvcmVzdGl0dXRpb24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9yZXN0aXR1dGlvbi9jb21wb25lbnRzL3Jlc3RpdHV0aW9uLWxpc3QvcmVzdGl0dXRpb24tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBRUwsYUFBYSxFQUViLGlCQUFpQixFQUNqQix3QkFBd0IsRUFHeEIsUUFBUSxFQUVULE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7QUFNdkUsTUFBTSxPQUFPLDJCQUE0QixTQUFRLHdCQUF3QjtJQUV2RSxJQUNJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLE1BQWdCO1FBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQWNELFlBQ1Usa0JBQXNDLEVBQ3RDLGdCQUFnQyxFQUNoQyxzQkFBOEMsRUFDOUMsS0FBWTtRQUVwQixLQUFLLEVBQUUsQ0FBQztRQUxBLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFnQjtRQUNoQywyQkFBc0IsR0FBdEIs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QUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDOzhHQXJFVSwyQkFBMkI7a0dBQTNCLDJCQUEyQiwwSUNuQnhDLHV6SkF3SEE7OzJGRHJHYSwyQkFBMkI7a0JBSnZDLFNBQVM7K0JBQ0UsYUFBYTsrTEFJZCxRQUFRO3NCQUFoQixLQUFLO2dCQUVGLFlBQVk7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQ2F0YWxvZ0VudHJ5LFxuICBDb25maWdBY3Rpb25zLFxuICBQcnlJMThuU2VydmljZSxcbiAgUHJ5VmlzaWJpbGl0eVR5cGUsXG4gIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSxcbiAgVG9vbGJveE1hbmlmZXN0U2VydmljZSxcbiAgVG9vbGJveE1lbnVTZXJ2aWNlLFxuICBWaWV3TW9kZSxcbiAgV2lkZ2V0XG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktY2F0YWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0aXR1dGlvbi1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBQcnlSZXN0aXR1dGlvbkxpc3RDb21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUge1xuICBASW5wdXQoKSBzaG93VGFicyA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIGdldCBjdXN0b21Nb2RlbHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9jdXN0b21Nb2RlbHM7XG4gIH1cbiAgc2V0IGN1c3RvbU1vZGVscyhtb2RlbHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fY3VzdG9tTW9kZWxzID0gWydkZXRhaWwnLCAnaWZyYW1lJywgLi4ubW9kZWxzXTtcbiAgfVxuICBwcml2YXRlIF9jdXN0b21Nb2RlbHMgPSBbJ2RldGFpbCcsICdpZnJhbWUnXTtcbiAgc2VhcmNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICB0eXBlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dW5kZWZpbmVkIHwgc3RyaW5nPih1bmRlZmluZWQpO1xuICBmaWx0ZXJlZFdpZGdldHMkOiBPYnNlcnZhYmxlPENhdGFsb2dFbnRyeVtdPjtcbiAgbm9uQ3VzdG9tV2lkZ2V0cyQ6IE9ic2VydmFibGU8Q2F0YWxvZ0VudHJ5W10+O1xuICBjdXN0b21XaWRnZXRzJDogT2JzZXJ2YWJsZTxDYXRhbG9nRW50cnlbXT47XG4gIHR5cGVzJDogT2JzZXJ2YWJsZTx7IGljb246IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgdHlwZTogc3RyaW5nIH1bXT47XG4gIHNlbGVjdGVkUmVzdGl0dXRpb246IFdpZGdldCB8IG51bGwgPSBudWxsO1xuICBtb2RlID0gVmlld01vZGU7XG4gIHNlbGVjdGVkTW9kZTogVmlld01vZGUgPSBWaWV3TW9kZS5DQVRBTE9HO1xuICBjYXRlZ29yaWVzID0gWydtb2RlbCcsICdub01vZGVsJ107XG4gIFByeVZpc2liaWxpdHlUeXBlID0gUHJ5VmlzaWJpbGl0eVR5cGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0b29sYm94TWVudVNlcnZpY2U6IFRvb2xib3hNZW51U2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9vbGJveE1hbmlmZXN0U2VydmljZTogVG9vbGJveE1hbmlmZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5sb2FkV2lkZ2V0cygpKTtcbiAgICB0aGlzLnR5cGVzJCA9IHRoaXMudG9vbGJveE1lbnVTZXJ2aWNlLnR5cGVzJDtcbiAgICB0aGlzLmZpbHRlcmVkV2lkZ2V0cyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnRvb2xib3hNZW51U2VydmljZS5tZW51TGlzdCQsIHRoaXMuc2VhcmNoJCwgdGhpcy50eXBlJF0pLnBpcGUoXG4gICAgICBtYXAoKFt3aWRnZXRzLCBzZWFyY2gsIHR5cGVdKSA9PlxuICAgICAgICB3aWRnZXRzLmZpbHRlcihcbiAgICAgICAgICAod2lkZ2V0KSA9PlxuICAgICAgICAgICAgKHNlYXJjaC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQod2lkZ2V0LmxhYmVsKS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50b0xvY2FsZUxvd2VyQ2FzZSgpKSkgJiZcbiAgICAgICAgICAgICghdHlwZSB8fCB0aGlzLnRvb2xib3hNYW5pZmVzdFNlcnZpY2UuZ2V0KHdpZGdldC50eXBlKS50eXBlID09PSB0eXBlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLm5vbkN1c3RvbVdpZGdldHMkID0gdGhpcy5maWx0ZXJlZFdpZGdldHMkLnBpcGUoXG4gICAgICBtYXAoKHdpZGdldHMpID0+XG4gICAgICAgIHdpZGdldHMuZmlsdGVyKFxuICAgICAgICAgICh3aWRnZXQpID0+IHRoaXMudG9vbGJveE1hbmlmZXN0U2VydmljZS5pc01vZGVsKHdpZGdldC50eXBlKSB8fCB0aGlzLmN1c3RvbU1vZGVscy5pbmNsdWRlcyh3aWRnZXQudHlwZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5jdXN0b21XaWRnZXRzJCA9IHRoaXMuZmlsdGVyZWRXaWRnZXRzJC5waXBlKFxuICAgICAgbWFwKCh3aWRnZXRzKSA9PlxuICAgICAgICB3aWRnZXRzLmZpbHRlcihcbiAgICAgICAgICAod2lkZ2V0KSA9PiAhdGhpcy50b29sYm94TWFuaWZlc3RTZXJ2aWNlLmlzTW9kZWwod2lkZ2V0LnR5cGUpICYmICF0aGlzLmN1c3RvbU1vZGVscy5pbmNsdWRlcyh3aWRnZXQudHlwZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBzZWxlY3RNb2RlKG5ld01vZGU6IFZpZXdNb2RlKSB7XG4gICAgdGhpcy5zZWxlY3RlZE1vZGUgPSBuZXdNb2RlO1xuICB9XG5cbiAgc2VsZWN0UmVzdGl0dXRpb24oJGV2ZW50OiBXaWRnZXQpIHtcbiAgICB0aGlzLnNlbGVjdGVkUmVzdGl0dXRpb24gPSAkZXZlbnQ7XG4gICAgdGhpcy5zZWxlY3RNb2RlKFZpZXdNb2RlLkNPTlNVTFQpO1xuICB9XG5cbiAgY2xvc2VSZXN0aXR1dGlvbigpIHtcbiAgICB0aGlzLnNlbGVjdGVkUmVzdGl0dXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0TW9kZSh0aGlzLm1vZGUuQ0FUQUxPRyk7XG4gIH1cbn1cbiIsIjxwcnktcmVzdGl0dXRpb24tY3NzPjwvcHJ5LXJlc3RpdHV0aW9uLWNzcz5cbjxkaXYgY2xhc3M9XCJvLWNhdGFsb2dcIj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInNlbGVjdGVkTW9kZSA9PT0gbW9kZS5DQVRBTE9HXCI+XG4gICAgPGgyIGNsYXNzPVwiYS1oMlwiPnt7ICdAcHJ5LnJlc3RpdHV0aW9uLmNhdGFsb2cnIHwgaTE4biB9fTwvaDI+XG4gICAgPGRpdiBjbGFzcz1cIm8tY2F0YWxvZ19fZmlsdGVyc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIm8tY2F0YWxvZ19fZmlsdGVyc19fYnktbmFtZVwiPlxuICAgICAgICA8bGFiZWwgaWQ9XCJjYXRhbG9nLXNlYXJjaC1sYWJlbFwiIGZvcj1cImNhdGFsb2ctc2VhcmNoXCIgY2xhc3M9XCJhLWxhYmVsIHUtdmlzdWFsbHktaGlkZGVuXCI+XG4gICAgICAgICAgPHNwYW4+e3sgJ0BwcnkudG9vbGJveC5jYXRhbG9nLmZpbHRlci5uYW1lJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwic2VhcmNoXCIgW3dpZHRoXT1cIjE3XCIgW2hlaWdodF09XCIxN1wiPjwvcHJ5LWljb24+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGlkPVwiY2F0YWxvZy1zZWFyY2hcIlxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAcHJ5LmFjdGlvbi5zZWFyY2gnIHwgaTE4blwiXG4gICAgICAgICAgW25nTW9kZWxdPVwic2VhcmNoJCB8IGFzeW5jXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0aGlzLnNlYXJjaCQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiPnt7ICdAcHJ5LmFjdGlvbi5maWx0ZXJCeVR5cGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1jYXRhbG9nX19maWx0ZXJzX19ieS10eXBlXCI+XG4gICAgICAgIDx1bCBjbGFzcz1cIm8tY2F0YWxvZ19fZmlsdGVyc19fYnktdHlwZV9fbGlzdFwiPlxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgdHlwZU9wdCBvZiB0eXBlcyQgfCBhc3luY1wiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkIHUtc3Itb25seVwiXG4gICAgICAgICAgICAgIG5hbWU9XCJjYXRhbG9nLWZpbHRlclwiXG4gICAgICAgICAgICAgIGlkPVwiY2F0YWxvZy1idXR0b24te3sgdHlwZU9wdC50eXBlIH19XCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidHlwZU9wdC50eXBlID09PSAodHlwZSQgfCBhc3luYylcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInR5cGUkLm5leHQodHlwZU9wdC50eXBlKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1sYWJlbFwiXG4gICAgICAgICAgICAgIGlkPVwiY2F0YWxvZy1idXR0b24tbGFiZWwte3sgdHlwZU9wdC50eXBlIH19XCJcbiAgICAgICAgICAgICAgZm9yPVwiY2F0YWxvZy1idXR0b24te3sgdHlwZU9wdC50eXBlIH19XCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cInR5cGVPcHQubGFiZWwgfCBpMThuXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXNyLW9ubHlcIj57eyB0eXBlT3B0LmxhYmVsIHwgaTE4biB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgIDxwcnktaWNvbiBbd2lkdGhdPVwiMThcIiBbaGVpZ2h0XT1cIjE4XCIgW2ljb25TdmddPVwidHlwZU9wdC5pY29uXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tdGV4dCAtbGluay1saWtlXCJcbiAgICAgICAgICAoY2xpY2spPVwidHlwZSQubmV4dCh1bmRlZmluZWQpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIXR5cGUkLmdldFZhbHVlKClcIlxuICAgICAgICAgIFtjbGFzcy51LXZpc3VhbGx5LWhpZGRlbl09XCIhdHlwZSQuZ2V0VmFsdWUoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8cHJ5LWljb24gW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiIGljb25Tdmc9XCJkZWxldGVcIj48L3ByeS1pY29uPlxuICAgICAgICAgIHt7ICdAcHJ5LnRvb2xib3guY2F0YWxvZy5maWx0ZXIuZGVsZXRlJyB8IGkxOG4gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RhYnM7IGVsc2UgbGlzdFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm8tYWNjb3JkaW9uXCIgcm9sZT1cInRhYmxpc3RcIiBhcmlhLW11bHRpc2VsZWN0YWJsZT1cImZhbHNlXCI+XG4gICAgICAgIDxwcnktYWNjb3JkaW9uPlxuICAgICAgICAgIDxwcnktYWNjb3JkaW9uLWl0ZW1cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzOyBsZXQgaW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICBbaXRlbV09XCJjYXRlZ29yeVwiXG4gICAgICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgdHJhbnNsYXRpb25TdHJpbmdCYXNlPVwiQHByeS5yZXN0aXR1dGlvbi5jYXRhbG9nVGFicy5cIlxuICAgICAgICAgICAgW2xlbmd0aF09XCJjYXRlZ29yeSA9PT0gJ21vZGVsJyA/IChub25DdXN0b21XaWRnZXRzJCB8IGFzeW5jKT8ubGVuZ3RoIDogKGN1c3RvbVdpZGdldHMkIHwgYXN5bmMpPy5sZW5ndGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cIm8tY2F0YWxvZ19fbGlzdFwiIHJvbGU9XCJsaXN0XCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXRlZ29yeSA9PT0gJ21vZGVsJ1wiPlxuICAgICAgICAgICAgICAgIDxwcnktY2F0YWxvZy1pdGVtXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgd2lkZ2V0IG9mIG5vbkN1c3RvbVdpZGdldHMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgW3dpZGdldF09XCJ3aWRnZXRcIlxuICAgICAgICAgICAgICAgICAgKHNlbGVjdFJlc3RpdHV0aW9uKT1cInNlbGVjdFJlc3RpdHV0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgID48L3ByeS1jYXRhbG9nLWl0ZW0+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2F0ZWdvcnkgPT09ICdub01vZGVsJ1wiPlxuICAgICAgICAgICAgICAgIDxwcnktY2F0YWxvZy1pdGVtXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgd2lkZ2V0IG9mIGN1c3RvbVdpZGdldHMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgW3dpZGdldF09XCJ3aWRnZXRcIlxuICAgICAgICAgICAgICAgICAgKHNlbGVjdFJlc3RpdHV0aW9uKT1cInNlbGVjdFJlc3RpdHV0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgID48L3ByeS1jYXRhbG9nLWl0ZW0+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L3ByeS1hY2NvcmRpb24taXRlbT5cbiAgICAgICAgPC9wcnktYWNjb3JkaW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI2xpc3Q+XG4gICAgICA8dWwgY2xhc3M9XCJvLWNhdGFsb2dfX2xpc3RcIiByb2xlPVwibGlzdFwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICA8cHJ5LWNhdGFsb2ctaXRlbVxuICAgICAgICAgICpuZ0Zvcj1cImxldCB3aWRnZXQgb2YgZmlsdGVyZWRXaWRnZXRzJCB8IGFzeW5jXCJcbiAgICAgICAgICBbd2lkZ2V0XT1cIndpZGdldFwiXG4gICAgICAgICAgKHNlbGVjdFJlc3RpdHV0aW9uKT1cInNlbGVjdFJlc3RpdHV0aW9uKCRldmVudClcIlxuICAgICAgICA+PC9wcnktY2F0YWxvZy1pdGVtPlxuICAgICAgPC91bD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJzZWxlY3RlZE1vZGUgPT09IG1vZGUuQ09OU1VMVFwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLWNhdGFsb2dfX2NyZWF0ZVwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwiY2xvc2VSZXN0aXR1dGlvbigpXCI+XG4gICAgICAgIHt7ICdAcHJ5LnJlc3RpdHV0aW9uLmNhbmNlbCcgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxwcnktcmVzdGl0dXRpb25cbiAgICAgIFtzZWxlY3RlZFJlc3RpdHV0aW9uXT1cInNlbGVjdGVkUmVzdGl0dXRpb25cIlxuICAgICAgW2VkaXRdPVwiZmFsc2VcIlxuICAgICAgKHJlc3RpdHV0aW9uQ3JlYXRlZCk9XCJjbG9zZVJlc3RpdHV0aW9uKClcIlxuICAgID48L3ByeS1yZXN0aXR1dGlvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwic2VsZWN0ZWRNb2RlID09PSBtb2RlLkNSRUFUSU9OXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8tY2F0YWxvZ19fY3JlYXRlXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLWdob3N0XCIgKGNsaWNrKT1cInNlbGVjdE1vZGUobW9kZS5DQVRBTE9HKVwiPlxuICAgICAgICB7eyAnQHByeS5yZXN0aXR1dGlvbi5jYW5jZWwnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8cHJ5LXJlc3RpdHV0aW9uIChyZXN0aXR1dGlvbkNyZWF0ZWQpPVwiY2xvc2VSZXN0aXR1dGlvbigpXCI+PC9wcnktcmVzdGl0dXRpb24+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==