@provoly/dashboard 0.13.7 → 0.13.8
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.
- package/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.d.ts +4 -4
- package/admin/components/admin-dataset/store/admin-dataset.actions.d.ts +3 -3
- package/esm2022/admin/components/admin-classes/admin-classes-customize/tooltip/admin-classes-customize-tooltip.component.mjs +3 -3
- package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +2 -2
- package/esm2022/admin/components/admin-dataset/store/admin-dataset.actions.mjs +1 -1
- package/esm2022/lib/core/components/overlay/dialog-confirm.component.mjs +5 -12
- package/esm2022/lib/core/components/overlay/overlay.module.mjs +5 -4
- package/esm2022/lib/core/components/select/select.component.mjs +2 -2
- package/esm2022/lib/core/components/share/share.component.mjs +3 -3
- package/esm2022/lib/core/model/admin-api.model.mjs +1 -1
- package/esm2022/lib/core/model/dataset.interface.mjs +1 -1
- package/esm2022/lib/core/model/display-options.interface.mjs +4 -2
- package/esm2022/lib/core/model/manifest.interface.mjs +1 -1
- package/esm2022/lib/core/store/config/config.actions.mjs +2 -1
- package/esm2022/lib/core/store/config/config.effects.mjs +25 -4
- package/esm2022/lib/core/store/data-source/data-source.actions.mjs +1 -1
- package/esm2022/lib/core/store/data-source/data-source.effects.mjs +1 -1
- package/esm2022/lib/core/store/data-source/data-source.model.mjs +1 -1
- package/esm2022/lib/core/store/data-source/data-source.reducer.mjs +1 -1
- package/esm2022/lib/core/store/data-source/data-source.service.mjs +1 -1
- package/esm2022/lib/dashboard/components/context-menu/context-menu.component.mjs +3 -7
- package/esm2022/lib/dashboard/components/widgets/datasource-selector/datasource-selector.component.mjs +1 -1
- package/esm2022/lib/dashboard/components/widgets/settings/settings.component.mjs +6 -3
- package/esm2022/lib/dashboard/public-api.mjs +2 -1
- package/esm2022/lib/dashboard/store/dashboard.actions.mjs +2 -3
- package/esm2022/lib/dashboard/store/dashboard.effects.mjs +25 -11
- package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +2 -11
- package/esm2022/lib/dashboard/store/dashboard.selectors.mjs +3 -5
- package/esm2022/lib/dashboard/store/manifest-utils.class.mjs +11 -0
- package/esm2022/lib/dashboard/store/manifest.service.mjs +3 -10
- package/esm2022/lib/dashboard/tooltip/components/default/default.tooltip.component.mjs +5 -4
- package/esm2022/pipeline/components/pipeline-list/pipeline-list.component.mjs +5 -8
- package/esm2022/presentation/components/presentation.component.mjs +5 -42
- package/esm2022/presentation/presentation.module.mjs +8 -4
- package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +9 -65
- package/esm2022/search/components/save-query/save-query.component.mjs +5 -8
- package/esm2022/toolbox/components/filter-settings/filter-settings.component.mjs +3 -3
- package/esm2022/toolbox/components/refresh-datasets/refresh-datasets.component.mjs +3 -3
- package/esm2022/toolbox/components/select-grid-layout/select-grid-layout.component.mjs +5 -16
- package/esm2022/toolbox/toolbox.module.mjs +8 -4
- package/esm2022/tooltips/attribute/attribute-tooltip.component.mjs +3 -3
- package/esm2022/widgets/widget-chart/component/widget-chart.component.mjs +3 -3
- package/esm2022/widgets/widget-map/component/widget-map.component.mjs +46 -23
- package/esm2022/widgets/widget-map/i18n/en.translations.mjs +4 -2
- package/esm2022/widgets/widget-map/i18n/fr.translations.mjs +4 -2
- package/esm2022/widgets/widget-map/interaction/interaction-manager.class.mjs +4 -23
- package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +3 -3
- package/fesm2022/provoly-dashboard-admin.mjs +2 -2
- package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-pipeline.mjs +4 -7
- package/fesm2022/provoly-dashboard-pipeline.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-presentation.mjs +11 -44
- package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-restitution.mjs +9 -65
- package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-search.mjs +4 -7
- package/fesm2022/provoly-dashboard-search.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-toolbox.mjs +14 -21
- package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-tooltips-attribute.mjs +2 -2
- package/fesm2022/provoly-dashboard-tooltips-attribute.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +2 -2
- package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +57 -111
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +2 -2
- package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -1
- package/fesm2022/provoly-dashboard.mjs +153 -135
- package/fesm2022/provoly-dashboard.mjs.map +1 -1
- package/lib/core/components/overlay/overlay.module.d.ts +2 -1
- package/lib/core/model/admin-api.model.d.ts +1 -1
- package/lib/core/model/dataset.interface.d.ts +0 -10
- package/lib/core/model/display-options.interface.d.ts +1 -0
- package/lib/core/model/manifest.interface.d.ts +2 -0
- package/lib/core/store/config/config.actions.d.ts +5 -0
- package/lib/core/store/config/config.effects.d.ts +6 -1
- package/lib/core/store/data-source/data-source.actions.d.ts +2 -2
- package/lib/core/store/data-source/data-source.effects.d.ts +2 -3
- package/lib/core/store/data-source/data-source.model.d.ts +11 -3
- package/lib/core/store/data-source/data-source.reducer.d.ts +2 -2
- package/lib/core/store/data-source/data-source.selectors.d.ts +5 -5
- package/lib/core/store/data-source/data-source.service.d.ts +4 -4
- package/lib/dashboard/components/context-menu/context-menu.component.d.ts +0 -1
- package/lib/dashboard/components/widgets/datasource-selector/datasource-selector.component.d.ts +1 -2
- package/lib/dashboard/components/widgets/settings/settings.component.d.ts +1 -0
- package/lib/dashboard/public-api.d.ts +1 -0
- package/lib/dashboard/store/dashboard.actions.d.ts +6 -17
- package/lib/dashboard/store/dashboard.effects.d.ts +6 -7
- package/lib/dashboard/store/dashboard.reducers.d.ts +1 -5
- package/lib/dashboard/store/dashboard.selectors.d.ts +0 -57
- package/lib/dashboard/store/manifest-utils.class.d.ts +4 -0
- package/lib/dashboard/store/manifest.service.d.ts +0 -1
- package/package.json +31 -31
- package/pipeline/components/pipeline-list/pipeline-list.component.d.ts +1 -2
- package/presentation/components/presentation.component.d.ts +0 -5
- package/presentation/presentation.module.d.ts +2 -1
- package/restitution/components/restitution-catalog/restitution-catalog.component.d.ts +4 -15
- package/schematics/ng-update/version-0-13/index.js +18 -1
- package/schematics/ng-update/version-0-13/index.js.map +1 -1
- package/schematics/ng-update/version-0-13/index.spec.js +8 -1
- package/schematics/ng-update/version-0-13/index.spec.js.map +1 -1
- package/search/components/save-query/save-query.component.d.ts +1 -2
- package/styles/components/_m-tooltip.scss +18 -2
- package/styles-theme/components-theme/_m-tooltip.theme.scss +0 -12
- package/toolbox/components/select-grid-layout/select-grid-layout.component.d.ts +0 -4
- package/toolbox/toolbox.module.d.ts +2 -1
- package/widgets/widget-map/component/widget-map.component.d.ts +8 -3
- package/widgets/widget-map/i18n/en.translations.d.ts +2 -0
- package/widgets/widget-map/i18n/fr.translations.d.ts +2 -0
- package/widgets/widget-map/interaction/interaction-manager.class.d.ts +3 -5
- package/esm2022/widgets/widget-map/search-bar/search-bar.control.mjs +0 -66
- package/widgets/widget-map/search-bar/search-bar.control.d.ts +0 -27
|
@@ -131,18 +131,15 @@ export class PryPipelineListComponent {
|
|
|
131
131
|
this.closeDropdown();
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
focusValidation() {
|
|
138
|
-
this.confirm.nativeElement.focus();
|
|
134
|
+
focusElement(element) {
|
|
135
|
+
element.focus();
|
|
139
136
|
}
|
|
140
137
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryPipelineListComponent, deps: [{ token: i1.Store }, { token: i2.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
141
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryPipelineListComponent, selector: "pry-pipeline-list", viewQueries: [{ propertyName: "templateDropdown", first: true, predicate: ["dropdown"], descendants: true, read: TemplateRef }, { propertyName: "templateModal", first: true, predicate: ["templateModal"], descendants: true, read: TemplateRef }, { propertyName: "actions", first: true, predicate: ["actions"], descendants: true }, { propertyName: "toggleActions", first: true, predicate: ["toggleActions"], descendants: true }, { propertyName: "cancel", first: true, predicate: ["cancel"], descendants: true }, { propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "confirm", first: true, predicate: ["confirm"], descendants: true }], ngImport: i0, template: "<pry-pipeline-css></pry-pipeline-css>\n<div class=\"o-pipeline-layout\" [ngSwitch]=\"selectedMode\">\n <ng-container *ngSwitchCase=\"ViewMode.CATALOG\">\n <div class=\"o-pipeline-layout__toolbox\">\n <button class=\"a-btn a-btn--primary a-btn--icon-text\" type=\"button\" (click)=\"create()\">\n {{ '@pry.pipeline.create' | i18n }}\n </button>\n </div>\n <h1 class=\"a-h1\">{{ '@pry.pipeline.transformation_catalog' | i18n }}</h1>\n <table\n class=\"a-table\"\n prySortTable\n prySortActive=\"date\"\n prySortDirection=\"desc\"\n (prySortChange)=\"sortActive = $event.active; sortDirection = $event.direction\"\n >\n <caption>\n {{\n '@pry.pipeline.transformation_catalog' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th prySortHeader=\"state\">{{ '@pry.pipeline.details.state' | i18n }}</th>\n <th prySortHeader=\"title\">{{ '@pry.pipeline.details.title' | i18n }}</th>\n <th prySortHeader=\"date\">{{ '@pry.pipeline.details.last_execution_date' | i18n }}</th>\n <th>\n <div class=\"u-display-flex -align-center -column\">\n {{ '@pry.pipeline.details.execution_status' | i18n }}\n </div>\n </th>\n <th>{{ '@pry.pipeline.action' | i18n }}</th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let transfo of transformation$ | async | prySortData: sortActive : sortDirection; let index = index\"\n >\n <td>\n <div *ngIf=\"transfo.active; else deactivated\" class=\"container-state\">\n <pry-icon [height]=\"15\" [width]=\"15\" iconSvg=\"check\" class=\"check\"></pry-icon>\n <span> {{ '@pry.pipeline.activated' | i18n }}</span>\n </div>\n <ng-template #deactivated>\n <div class=\"container-state\">\n <pry-icon [height]=\"15\" [width]=\"15\" iconSvg=\"stop\" class=\"stop\"></pry-icon>\n <span>{{ '@pry.pipeline.deactivated' | i18n }}</span>\n </div>\n </ng-template>\n </td>\n <td>{{ transfo.title }}</td>\n <td>{{ transfo?.lastJobExecution?.executionDate | sinceDate }}</td>\n <td *ngIf=\"transfo.lastJobExecution\" class=\"u-display-flex -align-center -column\">\n <div [ngSwitch]=\"transfo.lastJobExecution.status\">\n <ng-container *ngSwitchCase=\"ExecutionState.TERMINATED\">\n <pry-icon iconSvg=\"check\" [height]=\"25\" [width]=\"25\" class=\"check\"></pry-icon>\n </ng-container>\n <ng-container *ngSwitchCase=\"ExecutionState.STARTED\">\n <pry-icon iconSvg=\"synchro\" [height]=\"25\" [width]=\"25\" class=\"warning\"></pry-icon>\n </ng-container>\n <ng-container *ngSwitchCase=\"ExecutionState.ERROR\">\n <pry-icon iconSvg=\"close\" [height]=\"25\" [width]=\"25\" class=\"danger\"></pry-icon>\n </ng-container>\n </div>\n </td>\n <td>\n <button type=\"button\" class=\"a-btn a-btn--secondary -size-sm\" (click)=\"consult(transfo)\">\n {{ '@pry.pipeline.consult' | i18n }}\n <span class=\"u-visually-hidden\"> {{ transfo.title }} </span>\n </button>\n </td>\n <td>\n <button\n class=\"a-btn a-btn--more\"\n type=\"button\"\n id=\"actions\"\n #actions\n aria-controls=\"panelActions\"\n [attr.aria-expanded]=\"!!this.overlayRef\"\n (click)=\"toggleMoreDropdown($event, index, transfo)\"\n >\n <pry-icon iconSvg=\"more_horiz\"></pry-icon>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n <ng-container *ngSwitchCase=\"ViewMode.CONSULT\">\n <ng-container *ngIf=\"selectedTransfo\">\n <pry-pipeline-details\n [pipeline]=\"selectedTransfo\"\n (goToList)=\"list()\"\n (goToEditor)=\"savePipeline($event)\"\n (executeConfirm)=\"toggleExecuteConfirm()\"\n ></pry-pipeline-details>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"ViewMode.CREATION\">\n <pry-pipeline-details (goToList)=\"list()\" (goToEditor)=\"savePipeline($event)\"></pry-pipeline-details>\n </ng-container>\n <ng-container *ngSwitchCase=\"ViewMode.EDITOR\">\n <pry-pipeline-editor [pipeline]=\"selectedTransfo\" (goToConsult)=\"consult($event)\"></pry-pipeline-editor>\n </ng-container>\n</div>\n<ng-template #noExecution>\n <div class=\"container-state\">\n <span>{{ '@pry.pipeline.ko' | i18n }}</span>\n <pry-icon [height]=\"15\" [width]=\"15\" iconSvg=\"danger\" class=\"danger\"></pry-icon>\n </div>\n</ng-template>\n\n<ng-template #dropdown>\n <div\n class=\"m-context-menu\"\n id=\"panelActions\"\n *ngIf=\"selectedTransfo\"\n (click)=\"$event.stopPropagation()\"\n (keydown.escape)=\"closeDropdown()\"\n >\n <ul class=\"m-context-menu__list\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"dialog panelActions\">\n <li class=\"m-context-menu__list__item\" role=\"none\" tabindex=\"-1\">\n <button\n type=\"button\"\n #toggleActions\n class=\"a-btn\"\n role=\"menuitem\"\n (click)=\"toggleState(selectedTransfo)\"\n (keydown.tab)=\"disableSelectedTranso()\"\n >\n <span>{{ (selectedTransfo.active ? '@pry.pipeline.deactivate' : '@pry.pipeline.activate') | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" tabindex=\"-1\">\n <button\n type=\"button\"\n role=\"menuitem\"\n id=\"execute\"\n class=\"a-btn\"\n (keydown.tab)=\"closeDropdown()\"\n [disabled]=\"selectedTransfo.active === false\"\n (click)=\"toggleExecuteConfirm()\"\n >\n <span>{{ '@pry.pipeline.execute' | i18n }}</span>\n </button>\n </li>\n </ul>\n </div>\n</ng-template>\n<ng-template #templateModal>\n <div\n class=\"o-modal\"\n *ngIf=\"selectedTransfo\"\n (keydown.escape)=\"toggleExecuteConfirm()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog confirm delete presentation\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n #cross\n (keydown.shift.tab)=\"focusValidation()\"\n (click)=\"cancelRemoveConfirm()\"\n >\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" #cancel (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n #confirm\n id=\"confirm\"\n class=\"a-btn a-btn--primary\"\n (click)=\"confirmExecution(selectedTransfo)\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\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: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i4.PrySortHeaderComponent, selector: "th[prySortHeader]", inputs: ["prySortHeader"], outputs: ["sortChange"] }, { kind: "directive", type: i4.PrySortHeaderDirective, selector: "[prySortHeader]" }, { kind: "directive", type: i4.PrySortTableDirective, selector: "[prySortTable]", inputs: ["prySortActive", "prySortDirection"], outputs: ["prySortChange"] }, { kind: "component", type: i5.PryPipelineEditorComponent, selector: "pry-pipeline-editor", inputs: ["pipeline"], outputs: ["goToConsult"] }, { kind: "component", type: i6.PryPipelineCssComponent, selector: "pry-pipeline-css" }, { kind: "component", type: i7.PryPipelineDetailsComponent, selector: "pry-pipeline-details", inputs: ["pipeline"], outputs: ["goToList", "goToConsult", "goToEditor", "executeConfirm"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }, { kind: "pipe", type: i4.PrySortDataPipe, name: "prySortData" }, { kind: "pipe", type: i8.PrySinceDatePipe, name: "sinceDate" }] }); }
|
|
138
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryPipelineListComponent, selector: "pry-pipeline-list", viewQueries: [{ propertyName: "templateDropdown", first: true, predicate: ["dropdown"], descendants: true, read: TemplateRef }, { propertyName: "templateModal", first: true, predicate: ["templateModal"], descendants: true, read: TemplateRef }, { propertyName: "actions", first: true, predicate: ["actions"], descendants: true }, { propertyName: "toggleActions", first: true, predicate: ["toggleActions"], descendants: true }, { propertyName: "cancel", first: true, predicate: ["cancel"], descendants: true }, { propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "confirm", first: true, predicate: ["confirm"], descendants: true }], ngImport: i0, template: "<pry-pipeline-css></pry-pipeline-css>\n<div class=\"o-pipeline-layout\" [ngSwitch]=\"selectedMode\">\n <ng-container *ngSwitchCase=\"ViewMode.CATALOG\">\n <div class=\"o-pipeline-layout__toolbox\">\n <button class=\"a-btn a-btn--primary a-btn--icon-text\" type=\"button\" (click)=\"create()\">\n {{ '@pry.pipeline.create' | i18n }}\n </button>\n </div>\n <h1 class=\"a-h1\">{{ '@pry.pipeline.transformation_catalog' | i18n }}</h1>\n <table\n class=\"a-table\"\n prySortTable\n prySortActive=\"date\"\n prySortDirection=\"desc\"\n (prySortChange)=\"sortActive = $event.active; sortDirection = $event.direction\"\n >\n <caption>\n {{\n '@pry.pipeline.transformation_catalog' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th prySortHeader=\"state\">{{ '@pry.pipeline.details.state' | i18n }}</th>\n <th prySortHeader=\"title\">{{ '@pry.pipeline.details.title' | i18n }}</th>\n <th prySortHeader=\"date\">{{ '@pry.pipeline.details.last_execution_date' | i18n }}</th>\n <th>\n <div class=\"u-display-flex -align-center -column\">\n {{ '@pry.pipeline.details.execution_status' | i18n }}\n </div>\n </th>\n <th>{{ '@pry.pipeline.action' | i18n }}</th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let transfo of transformation$ | async | prySortData: sortActive : sortDirection; let index = index\"\n >\n <td>\n <div *ngIf=\"transfo.active; else deactivated\" class=\"container-state\">\n <pry-icon [height]=\"15\" [width]=\"15\" iconSvg=\"check\" class=\"check\"></pry-icon>\n <span> {{ '@pry.pipeline.activated' | i18n }}</span>\n </div>\n <ng-template #deactivated>\n <div class=\"container-state\">\n <pry-icon [height]=\"15\" [width]=\"15\" iconSvg=\"stop\" class=\"stop\"></pry-icon>\n <span>{{ '@pry.pipeline.deactivated' | i18n }}</span>\n </div>\n </ng-template>\n </td>\n <td>{{ transfo.title }}</td>\n <td>{{ transfo?.lastJobExecution?.executionDate | sinceDate }}</td>\n <td *ngIf=\"transfo.lastJobExecution\" class=\"u-display-flex -align-center -column\">\n <div [ngSwitch]=\"transfo.lastJobExecution.status\">\n <ng-container *ngSwitchCase=\"ExecutionState.TERMINATED\">\n <pry-icon iconSvg=\"check\" [height]=\"25\" [width]=\"25\" class=\"check\"></pry-icon>\n </ng-container>\n <ng-container *ngSwitchCase=\"ExecutionState.STARTED\">\n <pry-icon iconSvg=\"synchro\" [height]=\"25\" [width]=\"25\" class=\"warning\"></pry-icon>\n </ng-container>\n <ng-container *ngSwitchCase=\"ExecutionState.ERROR\">\n <pry-icon iconSvg=\"close\" [height]=\"25\" [width]=\"25\" class=\"danger\"></pry-icon>\n </ng-container>\n </div>\n </td>\n <td>\n <button type=\"button\" class=\"a-btn a-btn--secondary -size-sm\" (click)=\"consult(transfo)\">\n {{ '@pry.pipeline.consult' | i18n }}\n <span class=\"u-visually-hidden\"> {{ transfo.title }} </span>\n </button>\n </td>\n <td>\n <button\n class=\"a-btn a-btn--more\"\n type=\"button\"\n id=\"actions\"\n #actions\n aria-controls=\"panelActions\"\n [attr.aria-expanded]=\"!!this.overlayRef\"\n (click)=\"toggleMoreDropdown($event, index, transfo)\"\n >\n <pry-icon iconSvg=\"more_horiz\"></pry-icon>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n <ng-container *ngSwitchCase=\"ViewMode.CONSULT\">\n <ng-container *ngIf=\"selectedTransfo\">\n <pry-pipeline-details\n [pipeline]=\"selectedTransfo\"\n (goToList)=\"list()\"\n (goToEditor)=\"savePipeline($event)\"\n (executeConfirm)=\"toggleExecuteConfirm()\"\n ></pry-pipeline-details>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"ViewMode.CREATION\">\n <pry-pipeline-details (goToList)=\"list()\" (goToEditor)=\"savePipeline($event)\"></pry-pipeline-details>\n </ng-container>\n <ng-container *ngSwitchCase=\"ViewMode.EDITOR\">\n <pry-pipeline-editor [pipeline]=\"selectedTransfo\" (goToConsult)=\"consult($event)\"></pry-pipeline-editor>\n </ng-container>\n</div>\n<ng-template #noExecution>\n <div class=\"container-state\">\n <span>{{ '@pry.pipeline.ko' | i18n }}</span>\n <pry-icon [height]=\"15\" [width]=\"15\" iconSvg=\"danger\" class=\"danger\"></pry-icon>\n </div>\n</ng-template>\n\n<ng-template #dropdown>\n <div\n class=\"m-context-menu\"\n id=\"panelActions\"\n *ngIf=\"selectedTransfo\"\n (click)=\"$event.stopPropagation()\"\n (keydown.escape)=\"closeDropdown()\"\n >\n <ul class=\"m-context-menu__list\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"dialog panelActions\">\n <li class=\"m-context-menu__list__item\" role=\"none\" tabindex=\"-1\">\n <button\n type=\"button\"\n #toggleActions\n class=\"a-btn\"\n role=\"menuitem\"\n (click)=\"toggleState(selectedTransfo)\"\n (keydown.tab)=\"disableSelectedTranso()\"\n >\n <span>{{ (selectedTransfo.active ? '@pry.pipeline.deactivate' : '@pry.pipeline.activate') | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" tabindex=\"-1\">\n <button\n type=\"button\"\n role=\"menuitem\"\n id=\"execute\"\n class=\"a-btn\"\n (keydown.tab)=\"closeDropdown()\"\n [disabled]=\"selectedTransfo.active === false\"\n (click)=\"toggleExecuteConfirm()\"\n >\n <span>{{ '@pry.pipeline.execute' | i18n }}</span>\n </button>\n </li>\n </ul>\n </div>\n</ng-template>\n<ng-template #templateModal>\n <div\n class=\"o-modal\"\n *ngIf=\"selectedTransfo\"\n (keydown.escape)=\"toggleExecuteConfirm()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog confirm delete presentation\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n #cross\n (keydown.shift.tab)=\"focusElement(this.confirm)\"\n (click)=\"cancelRemoveConfirm()\"\n >\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" #cancel (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n #confirm\n id=\"confirm\"\n class=\"a-btn a-btn--primary\"\n (click)=\"confirmExecution(selectedTransfo)\"\n (keydown.tab)=\"focusElement(this.cross)\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\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: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i4.PrySortHeaderComponent, selector: "th[prySortHeader]", inputs: ["prySortHeader"], outputs: ["sortChange"] }, { kind: "directive", type: i4.PrySortHeaderDirective, selector: "[prySortHeader]" }, { kind: "directive", type: i4.PrySortTableDirective, selector: "[prySortTable]", inputs: ["prySortActive", "prySortDirection"], outputs: ["prySortChange"] }, { kind: "component", type: i5.PryPipelineEditorComponent, selector: "pry-pipeline-editor", inputs: ["pipeline"], outputs: ["goToConsult"] }, { kind: "component", type: i6.PryPipelineCssComponent, selector: "pry-pipeline-css" }, { kind: "component", type: i7.PryPipelineDetailsComponent, selector: "pry-pipeline-details", inputs: ["pipeline"], outputs: ["goToList", "goToConsult", "goToEditor", "executeConfirm"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }, { kind: "pipe", type: i4.PrySortDataPipe, name: "prySortData" }, { kind: "pipe", type: i8.PrySinceDatePipe, name: "sinceDate" }] }); }
|
|
142
139
|
}
|
|
143
140
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryPipelineListComponent, decorators: [{
|
|
144
141
|
type: Component,
|
|
145
|
-
args: [{ selector: 'pry-pipeline-list', template: "<pry-pipeline-css></pry-pipeline-css>\n<div class=\"o-pipeline-layout\" [ngSwitch]=\"selectedMode\">\n <ng-container *ngSwitchCase=\"ViewMode.CATALOG\">\n <div class=\"o-pipeline-layout__toolbox\">\n <button class=\"a-btn a-btn--primary a-btn--icon-text\" type=\"button\" (click)=\"create()\">\n {{ '@pry.pipeline.create' | i18n }}\n </button>\n </div>\n <h1 class=\"a-h1\">{{ '@pry.pipeline.transformation_catalog' | i18n }}</h1>\n <table\n class=\"a-table\"\n prySortTable\n prySortActive=\"date\"\n prySortDirection=\"desc\"\n (prySortChange)=\"sortActive = $event.active; sortDirection = $event.direction\"\n >\n <caption>\n {{\n '@pry.pipeline.transformation_catalog' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th prySortHeader=\"state\">{{ '@pry.pipeline.details.state' | i18n }}</th>\n <th prySortHeader=\"title\">{{ '@pry.pipeline.details.title' | i18n }}</th>\n <th prySortHeader=\"date\">{{ '@pry.pipeline.details.last_execution_date' | i18n }}</th>\n <th>\n <div class=\"u-display-flex -align-center -column\">\n {{ '@pry.pipeline.details.execution_status' | i18n }}\n </div>\n </th>\n <th>{{ '@pry.pipeline.action' | i18n }}</th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let transfo of transformation$ | async | prySortData: sortActive : sortDirection; let index = index\"\n >\n <td>\n <div *ngIf=\"transfo.active; else deactivated\" class=\"container-state\">\n <pry-icon [height]=\"15\" [width]=\"15\" iconSvg=\"check\" class=\"check\"></pry-icon>\n <span> {{ '@pry.pipeline.activated' | i18n }}</span>\n </div>\n <ng-template #deactivated>\n <div class=\"container-state\">\n <pry-icon [height]=\"15\" [width]=\"15\" iconSvg=\"stop\" class=\"stop\"></pry-icon>\n <span>{{ '@pry.pipeline.deactivated' | i18n }}</span>\n </div>\n </ng-template>\n </td>\n <td>{{ transfo.title }}</td>\n <td>{{ transfo?.lastJobExecution?.executionDate | sinceDate }}</td>\n <td *ngIf=\"transfo.lastJobExecution\" class=\"u-display-flex -align-center -column\">\n <div [ngSwitch]=\"transfo.lastJobExecution.status\">\n <ng-container *ngSwitchCase=\"ExecutionState.TERMINATED\">\n <pry-icon iconSvg=\"check\" [height]=\"25\" [width]=\"25\" class=\"check\"></pry-icon>\n </ng-container>\n <ng-container *ngSwitchCase=\"ExecutionState.STARTED\">\n <pry-icon iconSvg=\"synchro\" [height]=\"25\" [width]=\"25\" class=\"warning\"></pry-icon>\n </ng-container>\n <ng-container *ngSwitchCase=\"ExecutionState.ERROR\">\n <pry-icon iconSvg=\"close\" [height]=\"25\" [width]=\"25\" class=\"danger\"></pry-icon>\n </ng-container>\n </div>\n </td>\n <td>\n <button type=\"button\" class=\"a-btn a-btn--secondary -size-sm\" (click)=\"consult(transfo)\">\n {{ '@pry.pipeline.consult' | i18n }}\n <span class=\"u-visually-hidden\"> {{ transfo.title }} </span>\n </button>\n </td>\n <td>\n <button\n class=\"a-btn a-btn--more\"\n type=\"button\"\n id=\"actions\"\n #actions\n aria-controls=\"panelActions\"\n [attr.aria-expanded]=\"!!this.overlayRef\"\n (click)=\"toggleMoreDropdown($event, index, transfo)\"\n >\n <pry-icon iconSvg=\"more_horiz\"></pry-icon>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n <ng-container *ngSwitchCase=\"ViewMode.CONSULT\">\n <ng-container *ngIf=\"selectedTransfo\">\n <pry-pipeline-details\n [pipeline]=\"selectedTransfo\"\n (goToList)=\"list()\"\n (goToEditor)=\"savePipeline($event)\"\n (executeConfirm)=\"toggleExecuteConfirm()\"\n ></pry-pipeline-details>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"ViewMode.CREATION\">\n <pry-pipeline-details (goToList)=\"list()\" (goToEditor)=\"savePipeline($event)\"></pry-pipeline-details>\n </ng-container>\n <ng-container *ngSwitchCase=\"ViewMode.EDITOR\">\n <pry-pipeline-editor [pipeline]=\"selectedTransfo\" (goToConsult)=\"consult($event)\"></pry-pipeline-editor>\n </ng-container>\n</div>\n<ng-template #noExecution>\n <div class=\"container-state\">\n <span>{{ '@pry.pipeline.ko' | i18n }}</span>\n <pry-icon [height]=\"15\" [width]=\"15\" iconSvg=\"danger\" class=\"danger\"></pry-icon>\n </div>\n</ng-template>\n\n<ng-template #dropdown>\n <div\n class=\"m-context-menu\"\n id=\"panelActions\"\n *ngIf=\"selectedTransfo\"\n (click)=\"$event.stopPropagation()\"\n (keydown.escape)=\"closeDropdown()\"\n >\n <ul class=\"m-context-menu__list\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"dialog panelActions\">\n <li class=\"m-context-menu__list__item\" role=\"none\" tabindex=\"-1\">\n <button\n type=\"button\"\n #toggleActions\n class=\"a-btn\"\n role=\"menuitem\"\n (click)=\"toggleState(selectedTransfo)\"\n (keydown.tab)=\"disableSelectedTranso()\"\n >\n <span>{{ (selectedTransfo.active ? '@pry.pipeline.deactivate' : '@pry.pipeline.activate') | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" tabindex=\"-1\">\n <button\n type=\"button\"\n role=\"menuitem\"\n id=\"execute\"\n class=\"a-btn\"\n (keydown.tab)=\"closeDropdown()\"\n [disabled]=\"selectedTransfo.active === false\"\n (click)=\"toggleExecuteConfirm()\"\n >\n <span>{{ '@pry.pipeline.execute' | i18n }}</span>\n </button>\n </li>\n </ul>\n </div>\n</ng-template>\n<ng-template #templateModal>\n <div\n class=\"o-modal\"\n *ngIf=\"selectedTransfo\"\n (keydown.escape)=\"toggleExecuteConfirm()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog confirm delete presentation\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n #cross\n (keydown.shift.tab)=\"
|
|
142
|
+
args: [{ selector: 'pry-pipeline-list', template: "<pry-pipeline-css></pry-pipeline-css>\n<div class=\"o-pipeline-layout\" [ngSwitch]=\"selectedMode\">\n <ng-container *ngSwitchCase=\"ViewMode.CATALOG\">\n <div class=\"o-pipeline-layout__toolbox\">\n <button class=\"a-btn a-btn--primary a-btn--icon-text\" type=\"button\" (click)=\"create()\">\n {{ '@pry.pipeline.create' | i18n }}\n </button>\n </div>\n <h1 class=\"a-h1\">{{ '@pry.pipeline.transformation_catalog' | i18n }}</h1>\n <table\n class=\"a-table\"\n prySortTable\n prySortActive=\"date\"\n prySortDirection=\"desc\"\n (prySortChange)=\"sortActive = $event.active; sortDirection = $event.direction\"\n >\n <caption>\n {{\n '@pry.pipeline.transformation_catalog' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th prySortHeader=\"state\">{{ '@pry.pipeline.details.state' | i18n }}</th>\n <th prySortHeader=\"title\">{{ '@pry.pipeline.details.title' | i18n }}</th>\n <th prySortHeader=\"date\">{{ '@pry.pipeline.details.last_execution_date' | i18n }}</th>\n <th>\n <div class=\"u-display-flex -align-center -column\">\n {{ '@pry.pipeline.details.execution_status' | i18n }}\n </div>\n </th>\n <th>{{ '@pry.pipeline.action' | i18n }}</th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let transfo of transformation$ | async | prySortData: sortActive : sortDirection; let index = index\"\n >\n <td>\n <div *ngIf=\"transfo.active; else deactivated\" class=\"container-state\">\n <pry-icon [height]=\"15\" [width]=\"15\" iconSvg=\"check\" class=\"check\"></pry-icon>\n <span> {{ '@pry.pipeline.activated' | i18n }}</span>\n </div>\n <ng-template #deactivated>\n <div class=\"container-state\">\n <pry-icon [height]=\"15\" [width]=\"15\" iconSvg=\"stop\" class=\"stop\"></pry-icon>\n <span>{{ '@pry.pipeline.deactivated' | i18n }}</span>\n </div>\n </ng-template>\n </td>\n <td>{{ transfo.title }}</td>\n <td>{{ transfo?.lastJobExecution?.executionDate | sinceDate }}</td>\n <td *ngIf=\"transfo.lastJobExecution\" class=\"u-display-flex -align-center -column\">\n <div [ngSwitch]=\"transfo.lastJobExecution.status\">\n <ng-container *ngSwitchCase=\"ExecutionState.TERMINATED\">\n <pry-icon iconSvg=\"check\" [height]=\"25\" [width]=\"25\" class=\"check\"></pry-icon>\n </ng-container>\n <ng-container *ngSwitchCase=\"ExecutionState.STARTED\">\n <pry-icon iconSvg=\"synchro\" [height]=\"25\" [width]=\"25\" class=\"warning\"></pry-icon>\n </ng-container>\n <ng-container *ngSwitchCase=\"ExecutionState.ERROR\">\n <pry-icon iconSvg=\"close\" [height]=\"25\" [width]=\"25\" class=\"danger\"></pry-icon>\n </ng-container>\n </div>\n </td>\n <td>\n <button type=\"button\" class=\"a-btn a-btn--secondary -size-sm\" (click)=\"consult(transfo)\">\n {{ '@pry.pipeline.consult' | i18n }}\n <span class=\"u-visually-hidden\"> {{ transfo.title }} </span>\n </button>\n </td>\n <td>\n <button\n class=\"a-btn a-btn--more\"\n type=\"button\"\n id=\"actions\"\n #actions\n aria-controls=\"panelActions\"\n [attr.aria-expanded]=\"!!this.overlayRef\"\n (click)=\"toggleMoreDropdown($event, index, transfo)\"\n >\n <pry-icon iconSvg=\"more_horiz\"></pry-icon>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n <ng-container *ngSwitchCase=\"ViewMode.CONSULT\">\n <ng-container *ngIf=\"selectedTransfo\">\n <pry-pipeline-details\n [pipeline]=\"selectedTransfo\"\n (goToList)=\"list()\"\n (goToEditor)=\"savePipeline($event)\"\n (executeConfirm)=\"toggleExecuteConfirm()\"\n ></pry-pipeline-details>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"ViewMode.CREATION\">\n <pry-pipeline-details (goToList)=\"list()\" (goToEditor)=\"savePipeline($event)\"></pry-pipeline-details>\n </ng-container>\n <ng-container *ngSwitchCase=\"ViewMode.EDITOR\">\n <pry-pipeline-editor [pipeline]=\"selectedTransfo\" (goToConsult)=\"consult($event)\"></pry-pipeline-editor>\n </ng-container>\n</div>\n<ng-template #noExecution>\n <div class=\"container-state\">\n <span>{{ '@pry.pipeline.ko' | i18n }}</span>\n <pry-icon [height]=\"15\" [width]=\"15\" iconSvg=\"danger\" class=\"danger\"></pry-icon>\n </div>\n</ng-template>\n\n<ng-template #dropdown>\n <div\n class=\"m-context-menu\"\n id=\"panelActions\"\n *ngIf=\"selectedTransfo\"\n (click)=\"$event.stopPropagation()\"\n (keydown.escape)=\"closeDropdown()\"\n >\n <ul class=\"m-context-menu__list\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"dialog panelActions\">\n <li class=\"m-context-menu__list__item\" role=\"none\" tabindex=\"-1\">\n <button\n type=\"button\"\n #toggleActions\n class=\"a-btn\"\n role=\"menuitem\"\n (click)=\"toggleState(selectedTransfo)\"\n (keydown.tab)=\"disableSelectedTranso()\"\n >\n <span>{{ (selectedTransfo.active ? '@pry.pipeline.deactivate' : '@pry.pipeline.activate') | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" tabindex=\"-1\">\n <button\n type=\"button\"\n role=\"menuitem\"\n id=\"execute\"\n class=\"a-btn\"\n (keydown.tab)=\"closeDropdown()\"\n [disabled]=\"selectedTransfo.active === false\"\n (click)=\"toggleExecuteConfirm()\"\n >\n <span>{{ '@pry.pipeline.execute' | i18n }}</span>\n </button>\n </li>\n </ul>\n </div>\n</ng-template>\n<ng-template #templateModal>\n <div\n class=\"o-modal\"\n *ngIf=\"selectedTransfo\"\n (keydown.escape)=\"toggleExecuteConfirm()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog confirm delete presentation\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n #cross\n (keydown.shift.tab)=\"focusElement(this.confirm)\"\n (click)=\"cancelRemoveConfirm()\"\n >\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" #cancel (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n #confirm\n id=\"confirm\"\n class=\"a-btn a-btn--primary\"\n (click)=\"confirmExecution(selectedTransfo)\"\n (keydown.tab)=\"focusElement(this.cross)\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n" }]
|
|
146
143
|
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.Overlay }, { type: i0.ViewContainerRef }]; }, propDecorators: { templateDropdown: [{
|
|
147
144
|
type: ViewChild,
|
|
148
145
|
args: ['dropdown', { read: TemplateRef }]
|
|
@@ -165,4 +162,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
|
|
|
165
162
|
type: ViewChild,
|
|
166
163
|
args: ['confirm']
|
|
167
164
|
}] } });
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9waXBlbGluZS9jb21wb25lbnRzL3BpcGVsaW5lLWxpc3QvcGlwZWxpbmUtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9waXBlbGluZS9jb21wb25lbnRzL3BpcGVsaW5lLWxpc3QvcGlwZWxpbmUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsYUFBYSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQWMsV0FBVyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFFaEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBYyxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7O0FBTW5GLE1BQU0sT0FBTyx3QkFBd0I7SUFrQm5DLFlBQW9CLEtBQVksRUFBVSxPQUFnQixFQUFVLGdCQUFrQztRQUFsRixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFoQnRHLGVBQVUsR0FBSSxjQUFjLENBQUM7UUFDN0Isa0JBQWEsR0FBSSxNQUFNLENBQUM7UUFXeEIsaUJBQVksR0FBYSxRQUFRLENBQUMsT0FBTyxDQUFD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a0JBSnBDLFNBQVM7K0JBQ0UsbUJBQW1CO2lKQVVpQixnQkFBZ0I7c0JBQTdELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFDTyxhQUFhO3NCQUEvRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQzNCLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDUSxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ0wsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUNDLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDSSxPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBDb25maWdBY3Rpb25zLCBWaWV3TW9kZSB9IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQaXBlbGluZUFjdGlvbnMgfSBmcm9tICcuLi8uLi9zdG9yZS9waXBlbGluZS5hY3Rpb25zJztcbmltcG9ydCB7IFBpcGVsaW5lU2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vc3RvcmUvcGlwZWxpbmUuc2VsZWN0b3JzJztcbmltcG9ydCB7IEV4ZWN1dGlvblN0YXRlLCBQcnlUcmFuc2ZvIH0gZnJvbSAnLi4vcGlwZWxpbmUtZWRpdG9yL3BpcGVsaW5lLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1waXBlbGluZS1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BpcGVsaW5lLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByeVBpcGVsaW5lTGlzdENvbXBvbmVudCB7XG4gIHRyYW5zZm9ybWF0aW9uJDogT2JzZXJ2YWJsZTxQcnlUcmFuc2ZvW10+O1xuICBzb3J0QWN0aXZlPyA9ICdjcmVhdGlvbkRhdGUnO1xuICBzb3J0RGlyZWN0aW9uPyA9ICdkZXNjJztcbiAgdG9nZ2xlSW5kZXg/OiBudW1iZXI7XG4gIHNlbGVjdGVkVHJhbnNmbz86IFByeVRyYW5zZm87XG4gIG92ZXJsYXlSZWY6IGFueTtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd24nLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHRlbXBsYXRlRHJvcGRvd24hOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCd0ZW1wbGF0ZU1vZGFsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSB0ZW1wbGF0ZU1vZGFsITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnYWN0aW9ucycpIGFjdGlvbnMhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgndG9nZ2xlQWN0aW9ucycpIHRvZ2dsZUFjdGlvbnMhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnY2FuY2VsJykgY2FuY2VsITogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2Nyb3NzJykgY3Jvc3MhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnY29uZmlybScpIGNvbmZpcm0hOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgc2VsZWN0ZWRNb2RlOiBWaWV3TW9kZSA9IFZpZXdNb2RlLkNBVEFMT0c7XG4gIFZpZXdNb2RlID0gVmlld01vZGU7XG4gIHByaXZhdGUgY29uZmlybUV4ZWN1dGlvblJlZj86IE92ZXJsYXlSZWY7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZTogU3RvcmUsIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSwgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChQaXBlbGluZUFjdGlvbnMuZmV0Y2hUcmFuc2Zvc0xpc3QoKSk7XG4gICAgdGhpcy50cmFuc2Zvcm1hdGlvbiQgPSB0aGlzLnN0b3JlLnNlbGVjdChQaXBlbGluZVNlbGVjdG9ycy50cmFuc2Zvcyk7XG4gICAgdGhpcy5zZWxlY3RlZE1vZGUgPSBWaWV3TW9kZS5DQVRBTE9HO1xuICB9XG5cbiAgdG9nZ2xlTW9yZURyb3Bkb3duKCRldmVudDogYW55LCBpbmRleDogbnVtYmVyLCB0cmFuc2ZvOiBQcnlUcmFuc2ZvKSB7XG4gICAgaWYgKHRoaXMudG9nZ2xlSW5kZXggIT09IGluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVHJhbnNmbyA9IHRyYW5zZm87XG4gICAgICB0aGlzLnRvZ2dsZUluZGV4ID0gaW5kZXg7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKFxuICAgICAgICBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydtb2RhbCddLFxuICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdiYWNrZHJvcCdcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuYWRkaW5nT3ZlcmxheSh7IGlkOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgfSkpO1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy50b2dnbGVNb3JlRHJvcGRvd24oJGV2ZW50LCBpbmRleCwgdHJhbnNmbykpO1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaChuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy50ZW1wbGF0ZURyb3Bkb3duLCB0aGlzLnZpZXdDb250YWluZXJSZWYpKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRvZ2dsZUFjdGlvbnMubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMTApO1xuICAgICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXYubW9kYWwnKSBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgIC8vIGNvbnN0IGRpc3BsYXllZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXYucGlwZWxpbmVMaXN0LWRyb3Bkb3duX19hY3Rpb25zJykgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICBjb25zdCBkaXNwbGF5ZWRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm0tY29udGV4dC1tZW51JykgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICBpZiAoISFtb2RhbCkge1xuICAgICAgICBtb2RhbC5zdHlsZS5sZWZ0ID1cbiAgICAgICAgICBNYXRoLm1heCgwLCBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCAtIGRpc3BsYXllZEVsZW1lbnQuY2xpZW50V2lkdGgsICRldmVudC5jbGllbnRYIC0gMTUwKSkgKyAncHgnO1xuICAgICAgICBtb2RhbC5zdHlsZS50b3AgPVxuICAgICAgICAgIE1hdGgubWF4KDAsIE1hdGgubWluKHdpbmRvdy5pbm5lckhlaWdodCAtIGRpc3BsYXllZEVsZW1lbnQuY2xpZW50SGVpZ2h0LCAkZXZlbnQuY2xpZW50WSAtIDEwKSkgKyAncHgnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm92ZXJsYXlSZWY/LmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgdGhpcy5vdmVybGF5UmVmPy5kaXNwb3NlKCk7XG4gICAgdGhpcy50b2dnbGVJbmRleCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hY3Rpb25zLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHRvZ2dsZVN0YXRlKHNlbGVjdGVkVHJhbnNmbzogUHJ5VHJhbnNmbykge1xuICAgIGlmIChzZWxlY3RlZFRyYW5zZm8pIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUGlwZWxpbmVBY3Rpb25zLnRvZ2dsZUFjdGl2YXRpb24oeyB0cmFuc2ZvOiBzZWxlY3RlZFRyYW5zZm8gfSkpO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgfVxuXG4gIHRvZ2dsZUV4ZWN1dGVDb25maXJtKCkge1xuICAgIGlmICghdGhpcy5jb25maXJtRXhlY3V0aW9uUmVmKSB7XG4gICAgICB0aGlzLmNvbmZpcm1FeGVjdXRpb25SZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKFxuICAgICAgICBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydvLW1vZGFsLXdyYXBwZXInXSxcbiAgICAgICAgICBiYWNrZHJvcENsYXNzOiAnYmFja2Ryb3AnXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDb25maWdBY3Rpb25zLmFkZGluZ092ZXJsYXkoeyBpZDogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lIH0pKTtcbiAgICAgIHRoaXMuY29uZmlybUV4ZWN1dGlvblJlZi5hdHRhY2gobmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMudGVtcGxhdGVNb2RhbCwgdGhpcy52aWV3Q29udGFpbmVyUmVmKSk7XG4gICAgICB0aGlzLmNvbmZpcm1FeGVjdXRpb25SZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnRvZ2dsZUV4ZWN1dGVDb25maXJtKCkpO1xuICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXYuby1tb2RhbC13cmFwcGVyJykgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICBpZiAoISFwYW5lbCkge1xuICAgICAgICBwYW5lbC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLnRvcCA9ICc1MCUnO1xuICAgICAgICBwYW5lbC5zdHlsZS5sZWZ0ID0gJzUwJSc7XG4gICAgICAgIHBhbmVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGUoLTUwJSwgLTUwJSknO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuY2VsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0sIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maXJtRXhlY3V0aW9uUmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuY29uZmlybUV4ZWN1dGlvblJlZiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5jbG9zZU92ZXJsYXkoeyBpZDogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lIH0pKTtcbiAgICAgIHRoaXMuYWN0aW9ucy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG4gIH1cblxuICBjYW5jZWxSZW1vdmVDb25maXJtKCkge1xuICAgIHRoaXMuY29uZmlybUV4ZWN1dGlvblJlZj8uZGlzcG9zZSgpO1xuICAgIHRoaXMuY29uZmlybUV4ZWN1dGlvblJlZiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuY2xvc2VPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSB9KSk7XG4gICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gIH1cblxuICBjb25maXJtRXhlY3V0aW9uKHNlbGVjdGVkVHJhbnNmbz86IFByeVRyYW5zZm8pIHtcbiAgICBpZiAoc2VsZWN0ZWRUcmFuc2ZvPy5qb2JJbnN0YW5jZUlkKSB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFBpcGVsaW5lQWN0aW9ucy5leGVjdXRlVHJhbnNmbyh7IGlkOiBzZWxlY3RlZFRyYW5zZm8uam9iSW5zdGFuY2VJZCB9KSk7XG4gICAgfVxuICAgIHRoaXMuY2FuY2VsUmVtb3ZlQ29uZmlybSgpO1xuICB9XG5cbiAgbGlzdCgpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFBpcGVsaW5lQWN0aW9ucy5mZXRjaFRyYW5zZm9zTGlzdCgpKTtcbiAgICB0aGlzLnNlbGVjdGVkTW9kZSA9IFZpZXdNb2RlLkNBVEFMT0c7XG4gIH1cblxuICBjcmVhdGUoKSB7XG4gICAgdGhpcy5zZWxlY3RlZE1vZGUgPSBWaWV3TW9kZS5DUkVBVElPTjtcbiAgfVxuXG4gIGNvbnN1bHQodHJhbnNmbzogUHJ5VHJhbnNmbykge1xuICAgIHRoaXMuc2VsZWN0ZWRUcmFuc2ZvID0gdHJhbnNmbztcbiAgICB0aGlzLnNlbGVjdGVkTW9kZSA9IFZpZXdNb2RlLkNPTlNVTFQ7XG4gIH1cblxuICBzYXZlUGlwZWxpbmUodHJhbnNmbzogUHJ5VHJhbnNmbykge1xuICAgIHRoaXMuc2VsZWN0ZWRUcmFuc2ZvID0gdHJhbnNmbztcbiAgICB0aGlzLnNlbGVjdGVkTW9kZSA9IFZpZXdNb2RlLkVESVRPUjtcbiAgfVxuXG4gIGRpc2FibGVTZWxlY3RlZFRyYW5zbygpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRyYW5zZm8/LmFjdGl2ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzQ3Jvc3NFbGVtZW50KCkge1xuICAgIHRoaXMuY3Jvc3MubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgZm9jdXNWYWxpZGF0aW9uKCkge1xuICAgIHRoaXMuY29uZmlybS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRXhlY3V0aW9uU3RhdGUgPSBFeGVjdXRpb25TdGF0ZTtcbn1cbiIsIjxwcnktcGlwZWxpbmUtY3NzPjwvcHJ5LXBpcGVsaW5lLWNzcz5cbjxkaXYgY2xhc3M9XCJvLXBpcGVsaW5lLWxheW91dFwiIFtuZ1N3aXRjaF09XCJzZWxlY3RlZE1vZGVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVmlld01vZGUuQ0FUQUxPR1wiPlxuICAgIDxkaXYgY2xhc3M9XCJvLXBpcGVsaW5lLWxheW91dF9fdG9vbGJveFwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5IGEtYnRuLS1pY29uLXRleHRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNyZWF0ZSgpXCI+XG4gICAgICAgIHt7ICdAcHJ5LnBpcGVsaW5lLmNyZWF0ZScgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8aDEgY2xhc3M9XCJhLWgxXCI+e3sgJ0BwcnkucGlwZWxpbmUudHJhbnNmb3JtYXRpb25fY2F0YWxvZycgfCBpMThuIH19PC9oMT5cbiAgICA8dGFibGVcbiAgICAgIGNsYXNzPVwiYS10YWJsZVwiXG4gICAgICBwcnlTb3J0VGFibGVcbiAgICAgIHByeVNvcnRBY3RpdmU9XCJkYXRlXCJcbiAgICAgIHByeVNvcnREaXJlY3Rpb249XCJkZXNjXCJcbiAgICAgIChwcnlTb3J0Q2hhbmdlKT1cInNvcnRBY3RpdmUgPSAkZXZlbnQuYWN0aXZlOyBzb3J0RGlyZWN0aW9uID0gJGV2ZW50LmRpcmVjdGlvblwiXG4gICAgPlxuICAgICAgPGNhcHRpb24+XG4gICAgICAgIHt7XG4gICAgICAgICAgJ0BwcnkucGlwZWxpbmUudHJhbnNmb3JtYXRpb25fY2F0YWxvZycgfCBpMThuXG4gICAgICAgIH19XG4gICAgICA8L2NhcHRpb24+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggcHJ5U29ydEhlYWRlcj1cInN0YXRlXCI+e3sgJ0BwcnkucGlwZWxpbmUuZGV0YWlscy5zdGF0ZScgfCBpMThuIH19PC90aD5cbiAgICAgICAgICA8dGggcHJ5U29ydEhlYWRlcj1cInRpdGxlXCI+e3sgJ0BwcnkucGlwZWxpbmUuZGV0YWlscy50aXRsZScgfCBpMThuIH19PC90aD5cbiAgICAgICAgICA8dGggcHJ5U29ydEhlYWRlcj1cImRhdGVcIj57eyAnQHByeS5waXBlbGluZS5kZXRhaWxzLmxhc3RfZXhlY3V0aW9uX2RhdGUnIHwgaTE4biB9fTwvdGg+XG4gICAgICAgICAgPHRoPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInUtZGlzcGxheS1mbGV4IC1hbGlnbi1jZW50ZXIgLWNvbHVtblwiPlxuICAgICAgICAgICAgICB7eyAnQHByeS5waXBlbGluZS5kZXRhaWxzLmV4ZWN1dGlvbl9zdGF0dXMnIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGg+e3sgJ0BwcnkucGlwZWxpbmUuYWN0aW9uJyB8IGkxOG4gfX08L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPHRyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHRyYW5zZm8gb2YgdHJhbnNmb3JtYXRpb24kIHwgYXN5bmMgfCBwcnlTb3J0RGF0YTogc29ydEFjdGl2ZSA6IHNvcnREaXJlY3Rpb247IGxldCBpbmRleCA9IGluZGV4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0cmFuc2ZvLmFjdGl2ZTsgZWxzZSBkZWFjdGl2YXRlZFwiIGNsYXNzPVwiY29udGFpbmVyLXN0YXRlXCI+XG4gICAgICAgICAgICAgIDxwcnktaWNvbiBbaGVpZ2h0XT1cIjE1XCIgW3dpZHRoXT1cIjE1XCIgaWNvblN2Zz1cImNoZWNrXCIgY2xhc3M9XCJjaGVja1wiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIDxzcGFuPiB7eyAnQHByeS5waXBlbGluZS5hY3RpdmF0ZWQnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWFjdGl2YXRlZD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1zdGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxwcnktaWNvbiBbaGVpZ2h0XT1cIjE1XCIgW3dpZHRoXT1cIjE1XCIgaWNvblN2Zz1cInN0b3BcIiBjbGFzcz1cInN0b3BcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdAcHJ5LnBpcGVsaW5lLmRlYWN0aXZhdGVkJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZD57eyB0cmFuc2ZvLnRpdGxlIH19PC90ZD5cbiAgICAgICAgICA8dGQ+e3sgdHJhbnNmbz8ubGFzdEpvYkV4ZWN1dGlvbj8uZXhlY3V0aW9uRGF0ZSB8IHNpbmNlRGF0ZSB9fTwvdGQ+XG4gICAgICAgICAgPHRkICpuZ0lmPVwidHJhbnNmby5sYXN0Sm9iRXhlY3V0aW9uXCIgY2xhc3M9XCJ1LWRpc3BsYXktZmxleCAtYWxpZ24tY2VudGVyIC1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxkaXYgW25nU3dpdGNoXT1cInRyYW5zZm8ubGFzdEpvYkV4ZWN1dGlvbi5zdGF0dXNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiRXhlY3V0aW9uU3RhdGUuVEVSTUlOQVRFRFwiPlxuICAgICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2hlY2tcIiBbaGVpZ2h0XT1cIjI1XCIgW3dpZHRoXT1cIjI1XCIgY2xhc3M9XCJjaGVja1wiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJFeGVjdXRpb25TdGF0ZS5TVEFSVEVEXCI+XG4gICAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJzeW5jaHJvXCIgW2hlaWdodF09XCIyNVwiIFt3aWR0aF09XCIyNVwiIGNsYXNzPVwid2FybmluZ1wiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJFeGVjdXRpb25TdGF0ZS5FUlJPUlwiPlxuICAgICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2xvc2VcIiBbaGVpZ2h0XT1cIjI1XCIgW3dpZHRoXT1cIjI1XCIgY2xhc3M9XCJkYW5nZXJcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5IC1zaXplLXNtXCIgKGNsaWNrKT1cImNvbnN1bHQodHJhbnNmbylcIj5cbiAgICAgICAgICAgICAge3sgJ0BwcnkucGlwZWxpbmUuY29uc3VsdCcgfCBpMThuIH19XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj4ge3sgdHJhbnNmby50aXRsZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tbW9yZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBpZD1cImFjdGlvbnNcIlxuICAgICAgICAgICAgICAjYWN0aW9uc1xuICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwicGFuZWxBY3Rpb25zXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhIXRoaXMub3ZlcmxheVJlZlwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNb3JlRHJvcGRvd24oJGV2ZW50LCBpbmRleCwgdHJhbnNmbylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cIm1vcmVfaG9yaXpcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlZpZXdNb2RlLkNPTlNVTFRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRUcmFuc2ZvXCI+XG4gICAgICA8cHJ5LXBpcGVsaW5lLWRldGFpbHNcbiAgICAgICAgW3BpcGVsaW5lXT1cInNlbGVjdGVkVHJhbnNmb1wiXG4gICAgICAgIChnb1RvTGlzdCk9XCJsaXN0KClcIlxuICAgICAgICAoZ29Ub0VkaXRvcik9XCJzYXZlUGlwZWxpbmUoJGV2ZW50KVwiXG4gICAgICAgIChleGVjdXRlQ29uZmlybSk9XCJ0b2dnbGVFeGVjdXRlQ29uZmlybSgpXCJcbiAgICAgID48L3ByeS1waXBlbGluZS1kZXRhaWxzPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVmlld01vZGUuQ1JFQVRJT05cIj5cbiAgICA8cHJ5LXBpcGVsaW5lLWRldGFpbHMgKGdvVG9MaXN0KT1cImxpc3QoKVwiIChnb1RvRWRpdG9yKT1cInNhdmVQaXBlbGluZSgkZXZlbnQpXCI+PC9wcnktcGlwZWxpbmUtZGV0YWlscz5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlZpZXdNb2RlLkVESVRPUlwiPlxuICAgIDxwcnktcGlwZWxpbmUtZWRpdG9yIFtwaXBlbGluZV09XCJzZWxlY3RlZFRyYW5zZm9cIiAoZ29Ub0NvbnN1bHQpPVwiY29uc3VsdCgkZXZlbnQpXCI+PC9wcnktcGlwZWxpbmUtZWRpdG9yPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0V4ZWN1dGlvbj5cbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1zdGF0ZVwiPlxuICAgIDxzcGFuPnt7ICdAcHJ5LnBpcGVsaW5lLmtvJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgPHByeS1pY29uIFtoZWlnaHRdPVwiMTVcIiBbd2lkdGhdPVwiMTVcIiBpY29uU3ZnPVwiZGFuZ2VyXCIgY2xhc3M9XCJkYW5nZXJcIj48L3ByeS1pY29uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZHJvcGRvd24+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm0tY29udGV4dC1tZW51XCJcbiAgICBpZD1cInBhbmVsQWN0aW9uc1wiXG4gICAgKm5nSWY9XCJzZWxlY3RlZFRyYW5zZm9cIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIChrZXlkb3duLmVzY2FwZSk9XCJjbG9zZURyb3Bkb3duKClcIlxuICA+XG4gICAgPHVsIGNsYXNzPVwibS1jb250ZXh0LW1lbnVfX2xpc3RcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkaWFsb2cgcGFuZWxBY3Rpb25zXCI+XG4gICAgICA8bGkgY2xhc3M9XCJtLWNvbnRleHQtbWVudV9fbGlzdF9faXRlbVwiIHJvbGU9XCJub25lXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgI3RvZ2dsZUFjdGlvbnNcbiAgICAgICAgICBjbGFzcz1cImEtYnRuXCJcbiAgICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTdGF0ZShzZWxlY3RlZFRyYW5zZm8pXCJcbiAgICAgICAgICAoa2V5ZG93bi50YWIpPVwiZGlzYWJsZVNlbGVjdGVkVHJhbnNvKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4+e3sgKHNlbGVjdGVkVHJhbnNmby5hY3RpdmUgPyAnQHByeS5waXBlbGluZS5kZWFjdGl2YXRlJyA6ICdAcHJ5LnBpcGVsaW5lLmFjdGl2YXRlJykgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgY2xhc3M9XCJtLWNvbnRleHQtbWVudV9fbGlzdF9faXRlbVwiIHJvbGU9XCJub25lXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICBpZD1cImV4ZWN1dGVcIlxuICAgICAgICAgIGNsYXNzPVwiYS1idG5cIlxuICAgICAgICAgIChrZXlkb3duLnRhYik9XCJjbG9zZURyb3Bkb3duKClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWxlY3RlZFRyYW5zZm8uYWN0aXZlID09PSBmYWxzZVwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUV4ZWN1dGVDb25maXJtKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4+e3sgJ0BwcnkucGlwZWxpbmUuZXhlY3V0ZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZU1vZGFsPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJvLW1vZGFsXCJcbiAgICAqbmdJZj1cInNlbGVjdGVkVHJhbnNmb1wiXG4gICAgKGtleWRvd24uZXNjYXBlKT1cInRvZ2dsZUV4ZWN1dGVDb25maXJtKClcIlxuICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJkaWFsb2cgY29uZmlybSBkZWxldGUgcHJlc2VudGF0aW9uXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BfX3RpdGxlXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImEtaDJcIiBpZD1cImRpYWxvZ190aXRsZVwiPlxuICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tb2RhbFRpdGxlJyB8IGkxOG4gfX1cbiAgICAgICAgPC9oMj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcF9fY2xvc2VcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiXG4gICAgICAgICAgI2Nyb3NzXG4gICAgICAgICAgKGtleWRvd24uc2hpZnQudGFiKT1cImZvY3VzVmFsaWRhdGlvbigpXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsUmVtb3ZlQ29uZmlybSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2xvc2VcIiBbaGVpZ2h0XT1cIjM1XCIgW3dpZHRoXT1cIjM1XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkudG9vbGJveC5jbG9zZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cFwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI2NhbmNlbCAoY2xpY2spPVwiY2FuY2VsUmVtb3ZlQ29uZmlybSgpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCI+XG4gICAgICAgIHt7ICdAcHJ5LnRvb2xib3gubWFuaWZlc3QuY2xvc2UnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAjY29uZmlybVxuICAgICAgICBpZD1cImNvbmZpcm1cIlxuICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCJcbiAgICAgICAgKGNsaWNrKT1cImNvbmZpcm1FeGVjdXRpb24oc2VsZWN0ZWRUcmFuc2ZvKVwiXG4gICAgICAgIChrZXlkb3duLnRhYik9XCJmb2N1c0Nyb3NzRWxlbWVudCgpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ0BwcnkudG9vbGJveC5tYW5pZmVzdC52YWxpZGF0ZScgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9waXBlbGluZS9jb21wb25lbnRzL3BpcGVsaW5lLWxpc3QvcGlwZWxpbmUtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9waXBlbGluZS9jb21wb25lbnRzL3BpcGVsaW5lLWxpc3QvcGlwZWxpbmUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsYUFBYSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQWMsV0FBVyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFFaEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBYyxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7O0FBTW5GLE1BQU0sT0FBTyx3QkFBd0I7SUFrQm5DLFlBQW9CLEtBQVksRUFBVSxPQUFnQixFQUFVLGdCQUFrQztRQUFsRixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFoQnRHLGVBQVUsR0FBSSxjQUFjLENBQUM7UUFDN0Isa0JBQWEsR0FBSSxNQUFNLENBQUM7UUFXeEIsaUJBQVksR0FBYSxRQUFRLENBQUMsT0FBTyxDQUFD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LFdBQVcsRUFBRTtnQkFDTyxhQUFhO3NCQUEvRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQzNCLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDUSxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ0wsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUNDLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDSSxPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBDb25maWdBY3Rpb25zLCBWaWV3TW9kZSB9IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQaXBlbGluZUFjdGlvbnMgfSBmcm9tICcuLi8uLi9zdG9yZS9waXBlbGluZS5hY3Rpb25zJztcbmltcG9ydCB7IFBpcGVsaW5lU2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vc3RvcmUvcGlwZWxpbmUuc2VsZWN0b3JzJztcbmltcG9ydCB7IEV4ZWN1dGlvblN0YXRlLCBQcnlUcmFuc2ZvIH0gZnJvbSAnLi4vcGlwZWxpbmUtZWRpdG9yL3BpcGVsaW5lLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1waXBlbGluZS1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BpcGVsaW5lLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByeVBpcGVsaW5lTGlzdENvbXBvbmVudCB7XG4gIHRyYW5zZm9ybWF0aW9uJDogT2JzZXJ2YWJsZTxQcnlUcmFuc2ZvW10+O1xuICBzb3J0QWN0aXZlPyA9ICdjcmVhdGlvbkRhdGUnO1xuICBzb3J0RGlyZWN0aW9uPyA9ICdkZXNjJztcbiAgdG9nZ2xlSW5kZXg/OiBudW1iZXI7XG4gIHNlbGVjdGVkVHJhbnNmbz86IFByeVRyYW5zZm87XG4gIG92ZXJsYXlSZWY6IGFueTtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd24nLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHRlbXBsYXRlRHJvcGRvd24hOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCd0ZW1wbGF0ZU1vZGFsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSB0ZW1wbGF0ZU1vZGFsITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnYWN0aW9ucycpIGFjdGlvbnMhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgndG9nZ2xlQWN0aW9ucycpIHRvZ2dsZUFjdGlvbnMhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnY2FuY2VsJykgY2FuY2VsITogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2Nyb3NzJykgY3Jvc3MhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnY29uZmlybScpIGNvbmZpcm0hOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgc2VsZWN0ZWRNb2RlOiBWaWV3TW9kZSA9IFZpZXdNb2RlLkNBVEFMT0c7XG4gIFZpZXdNb2RlID0gVmlld01vZGU7XG4gIHByaXZhdGUgY29uZmlybUV4ZWN1dGlvblJlZj86IE92ZXJsYXlSZWY7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZTogU3RvcmUsIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSwgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChQaXBlbGluZUFjdGlvbnMuZmV0Y2hUcmFuc2Zvc0xpc3QoKSk7XG4gICAgdGhpcy50cmFuc2Zvcm1hdGlvbiQgPSB0aGlzLnN0b3JlLnNlbGVjdChQaXBlbGluZVNlbGVjdG9ycy50cmFuc2Zvcyk7XG4gICAgdGhpcy5zZWxlY3RlZE1vZGUgPSBWaWV3TW9kZS5DQVRBTE9HO1xuICB9XG5cbiAgdG9nZ2xlTW9yZURyb3Bkb3duKCRldmVudDogYW55LCBpbmRleDogbnVtYmVyLCB0cmFuc2ZvOiBQcnlUcmFuc2ZvKSB7XG4gICAgaWYgKHRoaXMudG9nZ2xlSW5kZXggIT09IGluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVHJhbnNmbyA9IHRyYW5zZm87XG4gICAgICB0aGlzLnRvZ2dsZUluZGV4ID0gaW5kZXg7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKFxuICAgICAgICBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydtb2RhbCddLFxuICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdiYWNrZHJvcCdcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuYWRkaW5nT3ZlcmxheSh7IGlkOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgfSkpO1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy50b2dnbGVNb3JlRHJvcGRvd24oJGV2ZW50LCBpbmRleCwgdHJhbnNmbykpO1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaChuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy50ZW1wbGF0ZURyb3Bkb3duLCB0aGlzLnZpZXdDb250YWluZXJSZWYpKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRvZ2dsZUFjdGlvbnMubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMTApO1xuICAgICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXYubW9kYWwnKSBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgIC8vIGNvbnN0IGRpc3BsYXllZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXYucGlwZWxpbmVMaXN0LWRyb3Bkb3duX19hY3Rpb25zJykgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICBjb25zdCBkaXNwbGF5ZWRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm0tY29udGV4dC1tZW51JykgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICBpZiAoISFtb2RhbCkge1xuICAgICAgICBtb2RhbC5zdHlsZS5sZWZ0ID1cbiAgICAgICAgICBNYXRoLm1heCgwLCBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCAtIGRpc3BsYXllZEVsZW1lbnQuY2xpZW50V2lkdGgsICRldmVudC5jbGllbnRYIC0gMTUwKSkgKyAncHgnO1xuICAgICAgICBtb2RhbC5zdHlsZS50b3AgPVxuICAgICAgICAgIE1hdGgubWF4KDAsIE1hdGgubWluKHdpbmRvdy5pbm5lckhlaWdodCAtIGRpc3BsYXllZEVsZW1lbnQuY2xpZW50SGVpZ2h0LCAkZXZlbnQuY2xpZW50WSAtIDEwKSkgKyAncHgnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm92ZXJsYXlSZWY/LmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgdGhpcy5vdmVybGF5UmVmPy5kaXNwb3NlKCk7XG4gICAgdGhpcy50b2dnbGVJbmRleCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hY3Rpb25zLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHRvZ2dsZVN0YXRlKHNlbGVjdGVkVHJhbnNmbzogUHJ5VHJhbnNmbykge1xuICAgIGlmIChzZWxlY3RlZFRyYW5zZm8pIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUGlwZWxpbmVBY3Rpb25zLnRvZ2dsZUFjdGl2YXRpb24oeyB0cmFuc2ZvOiBzZWxlY3RlZFRyYW5zZm8gfSkpO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgfVxuXG4gIHRvZ2dsZUV4ZWN1dGVDb25maXJtKCkge1xuICAgIGlmICghdGhpcy5jb25maXJtRXhlY3V0aW9uUmVmKSB7XG4gICAgICB0aGlzLmNvbmZpcm1FeGVjdXRpb25SZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKFxuICAgICAgICBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydvLW1vZGFsLXdyYXBwZXInXSxcbiAgICAgICAgICBiYWNrZHJvcENsYXNzOiAnYmFja2Ryb3AnXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDb25maWdBY3Rpb25zLmFkZGluZ092ZXJsYXkoeyBpZDogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lIH0pKTtcbiAgICAgIHRoaXMuY29uZmlybUV4ZWN1dGlvblJlZi5hdHRhY2gobmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMudGVtcGxhdGVNb2RhbCwgdGhpcy52aWV3Q29udGFpbmVyUmVmKSk7XG4gICAgICB0aGlzLmNvbmZpcm1FeGVjdXRpb25SZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnRvZ2dsZUV4ZWN1dGVDb25maXJtKCkpO1xuICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXYuby1tb2RhbC13cmFwcGVyJykgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICBpZiAoISFwYW5lbCkge1xuICAgICAgICBwYW5lbC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLnRvcCA9ICc1MCUnO1xuICAgICAgICBwYW5lbC5zdHlsZS5sZWZ0ID0gJzUwJSc7XG4gICAgICAgIHBhbmVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGUoLTUwJSwgLTUwJSknO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuY2VsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0sIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maXJtRXhlY3V0aW9uUmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuY29uZmlybUV4ZWN1dGlvblJlZiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5jbG9zZU92ZXJsYXkoeyBpZDogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lIH0pKTtcbiAgICAgIHRoaXMuYWN0aW9ucy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG4gIH1cblxuICBjYW5jZWxSZW1vdmVDb25maXJtKCkge1xuICAgIHRoaXMuY29uZmlybUV4ZWN1dGlvblJlZj8uZGlzcG9zZSgpO1xuICAgIHRoaXMuY29uZmlybUV4ZWN1dGlvblJlZiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuY2xvc2VPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSB9KSk7XG4gICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gIH1cblxuICBjb25maXJtRXhlY3V0aW9uKHNlbGVjdGVkVHJhbnNmbz86IFByeVRyYW5zZm8pIHtcbiAgICBpZiAoc2VsZWN0ZWRUcmFuc2ZvPy5qb2JJbnN0YW5jZUlkKSB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFBpcGVsaW5lQWN0aW9ucy5leGVjdXRlVHJhbnNmbyh7IGlkOiBzZWxlY3RlZFRyYW5zZm8uam9iSW5zdGFuY2VJZCB9KSk7XG4gICAgfVxuICAgIHRoaXMuY2FuY2VsUmVtb3ZlQ29uZmlybSgpO1xuICB9XG5cbiAgbGlzdCgpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFBpcGVsaW5lQWN0aW9ucy5mZXRjaFRyYW5zZm9zTGlzdCgpKTtcbiAgICB0aGlzLnNlbGVjdGVkTW9kZSA9IFZpZXdNb2RlLkNBVEFMT0c7XG4gIH1cblxuICBjcmVhdGUoKSB7XG4gICAgdGhpcy5zZWxlY3RlZE1vZGUgPSBWaWV3TW9kZS5DUkVBVElPTjtcbiAgfVxuXG4gIGNvbnN1bHQodHJhbnNmbzogUHJ5VHJhbnNmbykge1xuICAgIHRoaXMuc2VsZWN0ZWRUcmFuc2ZvID0gdHJhbnNmbztcbiAgICB0aGlzLnNlbGVjdGVkTW9kZSA9IFZpZXdNb2RlLkNPTlNVTFQ7XG4gIH1cblxuICBzYXZlUGlwZWxpbmUodHJhbnNmbzogUHJ5VHJhbnNmbykge1xuICAgIHRoaXMuc2VsZWN0ZWRUcmFuc2ZvID0gdHJhbnNmbztcbiAgICB0aGlzLnNlbGVjdGVkTW9kZSA9IFZpZXdNb2RlLkVESVRPUjtcbiAgfVxuXG4gIGRpc2FibGVTZWxlY3RlZFRyYW5zbygpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRyYW5zZm8/LmFjdGl2ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzRWxlbWVudChlbGVtZW50OiBIVE1MQnV0dG9uRWxlbWVudCkge1xuICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRXhlY3V0aW9uU3RhdGUgPSBFeGVjdXRpb25TdGF0ZTtcbn1cbiIsIjxwcnktcGlwZWxpbmUtY3NzPjwvcHJ5LXBpcGVsaW5lLWNzcz5cbjxkaXYgY2xhc3M9XCJvLXBpcGVsaW5lLWxheW91dFwiIFtuZ1N3aXRjaF09XCJzZWxlY3RlZE1vZGVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVmlld01vZGUuQ0FUQUxPR1wiPlxuICAgIDxkaXYgY2xhc3M9XCJvLXBpcGVsaW5lLWxheW91dF9fdG9vbGJveFwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5IGEtYnRuLS1pY29uLXRleHRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNyZWF0ZSgpXCI+XG4gICAgICAgIHt7ICdAcHJ5LnBpcGVsaW5lLmNyZWF0ZScgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8aDEgY2xhc3M9XCJhLWgxXCI+e3sgJ0BwcnkucGlwZWxpbmUudHJhbnNmb3JtYXRpb25fY2F0YWxvZycgfCBpMThuIH19PC9oMT5cbiAgICA8dGFibGVcbiAgICAgIGNsYXNzPVwiYS10YWJsZVwiXG4gICAgICBwcnlTb3J0VGFibGVcbiAgICAgIHByeVNvcnRBY3RpdmU9XCJkYXRlXCJcbiAgICAgIHByeVNvcnREaXJlY3Rpb249XCJkZXNjXCJcbiAgICAgIChwcnlTb3J0Q2hhbmdlKT1cInNvcnRBY3RpdmUgPSAkZXZlbnQuYWN0aXZlOyBzb3J0RGlyZWN0aW9uID0gJGV2ZW50LmRpcmVjdGlvblwiXG4gICAgPlxuICAgICAgPGNhcHRpb24+XG4gICAgICAgIHt7XG4gICAgICAgICAgJ0BwcnkucGlwZWxpbmUudHJhbnNmb3JtYXRpb25fY2F0YWxvZycgfCBpMThuXG4gICAgICAgIH19XG4gICAgICA8L2NhcHRpb24+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggcHJ5U29ydEhlYWRlcj1cInN0YXRlXCI+e3sgJ0BwcnkucGlwZWxpbmUuZGV0YWlscy5zdGF0ZScgfCBpMThuIH19PC90aD5cbiAgICAgICAgICA8dGggcHJ5U29ydEhlYWRlcj1cInRpdGxlXCI+e3sgJ0BwcnkucGlwZWxpbmUuZGV0YWlscy50aXRsZScgfCBpMThuIH19PC90aD5cbiAgICAgICAgICA8dGggcHJ5U29ydEhlYWRlcj1cImRhdGVcIj57eyAnQHByeS5waXBlbGluZS5kZXRhaWxzLmxhc3RfZXhlY3V0aW9uX2RhdGUnIHwgaTE4biB9fTwvdGg+XG4gICAgICAgICAgPHRoPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInUtZGlzcGxheS1mbGV4IC1hbGlnbi1jZW50ZXIgLWNvbHVtblwiPlxuICAgICAgICAgICAgICB7eyAnQHByeS5waXBlbGluZS5kZXRhaWxzLmV4ZWN1dGlvbl9zdGF0dXMnIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGg+e3sgJ0BwcnkucGlwZWxpbmUuYWN0aW9uJyB8IGkxOG4gfX08L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPHRyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHRyYW5zZm8gb2YgdHJhbnNmb3JtYXRpb24kIHwgYXN5bmMgfCBwcnlTb3J0RGF0YTogc29ydEFjdGl2ZSA6IHNvcnREaXJlY3Rpb247IGxldCBpbmRleCA9IGluZGV4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0cmFuc2ZvLmFjdGl2ZTsgZWxzZSBkZWFjdGl2YXRlZFwiIGNsYXNzPVwiY29udGFpbmVyLXN0YXRlXCI+XG4gICAgICAgICAgICAgIDxwcnktaWNvbiBbaGVpZ2h0XT1cIjE1XCIgW3dpZHRoXT1cIjE1XCIgaWNvblN2Zz1cImNoZWNrXCIgY2xhc3M9XCJjaGVja1wiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIDxzcGFuPiB7eyAnQHByeS5waXBlbGluZS5hY3RpdmF0ZWQnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWFjdGl2YXRlZD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1zdGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxwcnktaWNvbiBbaGVpZ2h0XT1cIjE1XCIgW3dpZHRoXT1cIjE1XCIgaWNvblN2Zz1cInN0b3BcIiBjbGFzcz1cInN0b3BcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdAcHJ5LnBpcGVsaW5lLmRlYWN0aXZhdGVkJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZD57eyB0cmFuc2ZvLnRpdGxlIH19PC90ZD5cbiAgICAgICAgICA8dGQ+e3sgdHJhbnNmbz8ubGFzdEpvYkV4ZWN1dGlvbj8uZXhlY3V0aW9uRGF0ZSB8IHNpbmNlRGF0ZSB9fTwvdGQ+XG4gICAgICAgICAgPHRkICpuZ0lmPVwidHJhbnNmby5sYXN0Sm9iRXhlY3V0aW9uXCIgY2xhc3M9XCJ1LWRpc3BsYXktZmxleCAtYWxpZ24tY2VudGVyIC1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxkaXYgW25nU3dpdGNoXT1cInRyYW5zZm8ubGFzdEpvYkV4ZWN1dGlvbi5zdGF0dXNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiRXhlY3V0aW9uU3RhdGUuVEVSTUlOQVRFRFwiPlxuICAgICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2hlY2tcIiBbaGVpZ2h0XT1cIjI1XCIgW3dpZHRoXT1cIjI1XCIgY2xhc3M9XCJjaGVja1wiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJFeGVjdXRpb25TdGF0ZS5TVEFSVEVEXCI+XG4gICAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJzeW5jaHJvXCIgW2hlaWdodF09XCIyNVwiIFt3aWR0aF09XCIyNVwiIGNsYXNzPVwid2FybmluZ1wiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJFeGVjdXRpb25TdGF0ZS5FUlJPUlwiPlxuICAgICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2xvc2VcIiBbaGVpZ2h0XT1cIjI1XCIgW3dpZHRoXT1cIjI1XCIgY2xhc3M9XCJkYW5nZXJcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5IC1zaXplLXNtXCIgKGNsaWNrKT1cImNvbnN1bHQodHJhbnNmbylcIj5cbiAgICAgICAgICAgICAge3sgJ0BwcnkucGlwZWxpbmUuY29uc3VsdCcgfCBpMThuIH19XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj4ge3sgdHJhbnNmby50aXRsZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tbW9yZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBpZD1cImFjdGlvbnNcIlxuICAgICAgICAgICAgICAjYWN0aW9uc1xuICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwicGFuZWxBY3Rpb25zXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhIXRoaXMub3ZlcmxheVJlZlwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNb3JlRHJvcGRvd24oJGV2ZW50LCBpbmRleCwgdHJhbnNmbylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cIm1vcmVfaG9yaXpcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlZpZXdNb2RlLkNPTlNVTFRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRUcmFuc2ZvXCI+XG4gICAgICA8cHJ5LXBpcGVsaW5lLWRldGFpbHNcbiAgICAgICAgW3BpcGVsaW5lXT1cInNlbGVjdGVkVHJhbnNmb1wiXG4gICAgICAgIChnb1RvTGlzdCk9XCJsaXN0KClcIlxuICAgICAgICAoZ29Ub0VkaXRvcik9XCJzYXZlUGlwZWxpbmUoJGV2ZW50KVwiXG4gICAgICAgIChleGVjdXRlQ29uZmlybSk9XCJ0b2dnbGVFeGVjdXRlQ29uZmlybSgpXCJcbiAgICAgID48L3ByeS1waXBlbGluZS1kZXRhaWxzPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVmlld01vZGUuQ1JFQVRJT05cIj5cbiAgICA8cHJ5LXBpcGVsaW5lLWRldGFpbHMgKGdvVG9MaXN0KT1cImxpc3QoKVwiIChnb1RvRWRpdG9yKT1cInNhdmVQaXBlbGluZSgkZXZlbnQpXCI+PC9wcnktcGlwZWxpbmUtZGV0YWlscz5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlZpZXdNb2RlLkVESVRPUlwiPlxuICAgIDxwcnktcGlwZWxpbmUtZWRpdG9yIFtwaXBlbGluZV09XCJzZWxlY3RlZFRyYW5zZm9cIiAoZ29Ub0NvbnN1bHQpPVwiY29uc3VsdCgkZXZlbnQpXCI+PC9wcnktcGlwZWxpbmUtZWRpdG9yPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0V4ZWN1dGlvbj5cbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1zdGF0ZVwiPlxuICAgIDxzcGFuPnt7ICdAcHJ5LnBpcGVsaW5lLmtvJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgPHByeS1pY29uIFtoZWlnaHRdPVwiMTVcIiBbd2lkdGhdPVwiMTVcIiBpY29uU3ZnPVwiZGFuZ2VyXCIgY2xhc3M9XCJkYW5nZXJcIj48L3ByeS1pY29uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZHJvcGRvd24+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm0tY29udGV4dC1tZW51XCJcbiAgICBpZD1cInBhbmVsQWN0aW9uc1wiXG4gICAgKm5nSWY9XCJzZWxlY3RlZFRyYW5zZm9cIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIChrZXlkb3duLmVzY2FwZSk9XCJjbG9zZURyb3Bkb3duKClcIlxuICA+XG4gICAgPHVsIGNsYXNzPVwibS1jb250ZXh0LW1lbnVfX2xpc3RcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkaWFsb2cgcGFuZWxBY3Rpb25zXCI+XG4gICAgICA8bGkgY2xhc3M9XCJtLWNvbnRleHQtbWVudV9fbGlzdF9faXRlbVwiIHJvbGU9XCJub25lXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgI3RvZ2dsZUFjdGlvbnNcbiAgICAgICAgICBjbGFzcz1cImEtYnRuXCJcbiAgICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTdGF0ZShzZWxlY3RlZFRyYW5zZm8pXCJcbiAgICAgICAgICAoa2V5ZG93bi50YWIpPVwiZGlzYWJsZVNlbGVjdGVkVHJhbnNvKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4+e3sgKHNlbGVjdGVkVHJhbnNmby5hY3RpdmUgPyAnQHByeS5waXBlbGluZS5kZWFjdGl2YXRlJyA6ICdAcHJ5LnBpcGVsaW5lLmFjdGl2YXRlJykgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgY2xhc3M9XCJtLWNvbnRleHQtbWVudV9fbGlzdF9faXRlbVwiIHJvbGU9XCJub25lXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICBpZD1cImV4ZWN1dGVcIlxuICAgICAgICAgIGNsYXNzPVwiYS1idG5cIlxuICAgICAgICAgIChrZXlkb3duLnRhYik9XCJjbG9zZURyb3Bkb3duKClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWxlY3RlZFRyYW5zZm8uYWN0aXZlID09PSBmYWxzZVwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUV4ZWN1dGVDb25maXJtKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4+e3sgJ0BwcnkucGlwZWxpbmUuZXhlY3V0ZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZU1vZGFsPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJvLW1vZGFsXCJcbiAgICAqbmdJZj1cInNlbGVjdGVkVHJhbnNmb1wiXG4gICAgKGtleWRvd24uZXNjYXBlKT1cInRvZ2dsZUV4ZWN1dGVDb25maXJtKClcIlxuICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJkaWFsb2cgY29uZmlybSBkZWxldGUgcHJlc2VudGF0aW9uXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BfX3RpdGxlXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImEtaDJcIiBpZD1cImRpYWxvZ190aXRsZVwiPlxuICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tb2RhbFRpdGxlJyB8IGkxOG4gfX1cbiAgICAgICAgPC9oMj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcF9fY2xvc2VcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiXG4gICAgICAgICAgI2Nyb3NzXG4gICAgICAgICAgKGtleWRvd24uc2hpZnQudGFiKT1cImZvY3VzRWxlbWVudCh0aGlzLmNvbmZpcm0pXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsUmVtb3ZlQ29uZmlybSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2xvc2VcIiBbaGVpZ2h0XT1cIjM1XCIgW3dpZHRoXT1cIjM1XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkudG9vbGJveC5jbG9zZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cFwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI2NhbmNlbCAoY2xpY2spPVwiY2FuY2VsUmVtb3ZlQ29uZmlybSgpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCI+XG4gICAgICAgIHt7ICdAcHJ5LnRvb2xib3gubWFuaWZlc3QuY2xvc2UnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAjY29uZmlybVxuICAgICAgICBpZD1cImNvbmZpcm1cIlxuICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCJcbiAgICAgICAgKGNsaWNrKT1cImNvbmZpcm1FeGVjdXRpb24oc2VsZWN0ZWRUcmFuc2ZvKVwiXG4gICAgICAgIChrZXlkb3duLnRhYik9XCJmb2N1c0VsZW1lbnQodGhpcy5jcm9zcylcIlxuICAgICAgPlxuICAgICAgICB7eyAnQHByeS50b29sYm94Lm1hbmlmZXN0LnZhbGlkYXRlJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|