@hestia-earth/ui-components 0.29.2 → 0.29.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/navigation-menu/navigation-menu.component.d.ts +1 -0
- package/common/semver-utils.d.ts +0 -1
- package/engine/engine-models-version-link/engine-models-version-link.component.d.ts +1 -1
- package/esm2022/bibliographies/bibliographies-search-confirm/bibliographies-search-confirm.component.mjs +3 -3
- package/esm2022/chart/chart.component.mjs +3 -3
- package/esm2022/common/blank-node-state/blank-node-state.component.mjs +3 -3
- package/esm2022/common/clipboard/clipboard.component.mjs +3 -3
- package/esm2022/common/collapsible-box/collapsible-box.component.mjs +3 -3
- package/esm2022/common/data-table/data-table.component.mjs +3 -3
- package/esm2022/common/drawer-container/drawer-container.component.mjs +3 -3
- package/esm2022/common/link-key-value/link-key-value.component.mjs +3 -3
- package/esm2022/common/maps-drawing-confirm/maps-drawing-confirm.component.mjs +3 -3
- package/esm2022/common/mobile-shell/mobile-shell.component.mjs +3 -3
- package/esm2022/common/navigation-menu/navigation-menu.component.mjs +7 -3
- package/esm2022/common/schema-version-link/schema-version-link.component.mjs +3 -3
- package/esm2022/common/search-extend/search-extend.component.mjs +3 -3
- package/esm2022/common/semver-utils.mjs +2 -3
- package/esm2022/common/shelf-dialog/shelf-dialog.component.mjs +3 -3
- package/esm2022/common/shell/shell.component.mjs +3 -3
- package/esm2022/common/sort-select/sort-select.component.mjs +3 -3
- package/esm2022/cycles/cycles-completeness/cycles-completeness.component.mjs +3 -3
- package/esm2022/cycles/cycles-nodes/cycles-nodes.component.mjs +3 -3
- package/esm2022/cycles/cycles-nodes-timeline/cycles-nodes-timeline.component.mjs +3 -3
- package/esm2022/engine/engine-models-stage-deep/engine-models-stage-deep.component.mjs +3 -3
- package/esm2022/engine/engine-models-version-link/engine-models-version-link.component.mjs +3 -3
- package/esm2022/engine/engine-requirements-form/engine-requirements-form.component.mjs +3 -3
- package/esm2022/files/files-error-summary/files-error-summary-item/files-error-summary-item.component.mjs +3 -3
- package/esm2022/files/files-upload-errors/files-upload-errors.component.mjs +3 -3
- package/esm2022/impact-assessments/impact-assessments-graph/impact-assessments-graph.component.mjs +3 -3
- package/esm2022/impact-assessments/impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component.mjs +3 -3
- package/esm2022/impact-assessments/impact-assessments-products/impact-assessments-products.component.mjs +3 -3
- package/esm2022/node/node-csv-export-confirm/node-csv-export-confirm.component.mjs +3 -3
- package/esm2022/node/node-csv-select-headers/node-csv-select-headers.component.mjs +3 -3
- package/esm2022/node/node-diffs/node-diffs.component.mjs +3 -3
- package/esm2022/node/node-link/node-link.component.mjs +3 -3
- package/esm2022/node/node-logs-file/node-logs-file.component.mjs +3 -3
- package/esm2022/node/node-missing-lookup-factors/node-missing-lookup-factors.component.mjs +3 -3
- package/esm2022/node/node-recommendations/node-recommendations.component.mjs +3 -3
- package/esm2022/node/node-value-details/node-value-details.component.mjs +5 -3
- package/esm2022/schema/schema-info/schema-info.component.mjs +3 -3
- package/esm2022/select/select-option/select-option.component.mjs +3 -3
- package/esm2022/select/select-option-group/select-option-group.component.mjs +3 -3
- package/esm2022/select/select.component.mjs +3 -3
- package/esm2022/sites/sites-nodes/sites-nodes.component.mjs +3 -3
- package/esm2022/terms/terms-property-content/terms-property-content.component.mjs +3 -3
- package/esm2022/terms/terms-sub-class-of-content/terms-sub-class-of-content.component.mjs +3 -3
- package/esm2022/terms/terms-units-description/terms-units-description.component.mjs +3 -3
- package/fesm2022/hestia-earth-ui-components.mjs +93 -88
- package/fesm2022/hestia-earth-ui-components.mjs.map +1 -1
- package/node/node-logs-models/node-logs-models.component.d.ts +1 -1
- package/package.json +1 -1
- package/styles.scss +0 -34
|
@@ -163,7 +163,7 @@ export class ImpactAssessmentsProductsComponent {
|
|
|
163
163
|
component.headerKeys.set(this.headerKeys());
|
|
164
164
|
}
|
|
165
165
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ImpactAssessmentsProductsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
166
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: ImpactAssessmentsProductsComponent, isStandalone: true, selector: "he-impact-assessments-products", inputs: { dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null }, nodeKey: { classPropertyName: "nodeKey", publicName: "nodeKey", isSignal: true, isRequired: false, transformFunction: null }, filterTermTypes: { classPropertyName: "filterTermTypes", publicName: "filterTermTypes", isSignal: true, isRequired: false, transformFunction: null }, enableFilterMethodModel: { classPropertyName: "enableFilterMethodModel", publicName: "enableFilterMethodModel", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 is-m-0\">\n <div class=\"column\">\n @if (hasData() && selectedView() === View.table) {\n <button class=\"button is-small is-ghost\" (click)=\"showDownload()\">\n <fa-icon [icon]=\"faDownload\" size=\"lg\"></fa-icon>\n </button>\n }\n </div>\n @if (selectedView() === View.table) {\n <div class=\"column is-narrow\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (search)=\"filterTerm.set($event)\"></he-search-extend>\n </div>\n }\n @if (hasData() && views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"viewIcon[view]\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n }\n </div>\n </div>\n }\n</div>\n\n@if (isNodeKeyAllowed()) {\n @switch (selectedView()) {\n @case (View.table) {\n <div class=\"is-px-3 is-pb-3\">\n @if (hasData()) {\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n @if (dataKeys().length > 1) {\n <tr class=\"has-text-weight-bold\">\n <th class=\"width-auto\"></th>\n <th></th>\n <th></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @if (data()[dataKey]?.length) {\n <th [attr.colspan]=\"data()[dataKey].length\" [class.has-border-right]=\"!dataKeyLast\">\n @if (dataKey) {\n <span>{{ dataKey | keyToLabel }}</span>\n }\n </th>\n }\n }\n </tr>\n }\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right is-py-0\">\n @if (enableFilterMethodModel()) {\n <div class=\"select is-small\">\n <select (change)=\"updateSelectedMethodModel($event.target.value)\">\n <option [ngValue]=\"undefined\">Filter Model</option>\n @for (term of methodModels(); track term) {\n <option [ngValue]=\"term\">{{ term.name }}</option>\n }\n </select>\n </div>\n }\n </th>\n <th class=\"has-border-right\"></th>\n <th class=\"has-border-right\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node.value.term.name; let nodeLast = $last) {\n <th\n [attr.title]=\"node.value.term.name\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <he-node-link [node]=\"node.value.term\">\n <span\n [innerHtml]=\"\n node.value.term.name | ellipsis: 30 | compound: node.value.term.termType\n \"></span>\n </he-node-link>\n </th>\n }\n }\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\">\n <a [href]=\"schemaBaseUrl + '/ImpactAssessment#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n <th class=\"has-border-right\">\n <a [href]=\"schemaBaseUrl + '/ImpactAssessment#product'\" target=\"_blank\">Product</a>\n </th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node.value.term.name; let nodeLast = $last) {\n <th\n [attr.title]=\"node.value.term.units\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span [innerHtml]=\"node.value.term.units | compound: node.value.term.termType\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"node.value.term\"></he-terms-units-description>\n </th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (\n impactAssessment of impactAssessments();\n track trackById(impactIndex, impactAssessment);\n let impactIndex = $index\n ) {\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"impactName(impactAssessment)\">\n <he-node-link [node]=\"impactAssessment\">\n <span>{{ impactIndex + 1 }}. {{ impactName(impactAssessment) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.term?.units\">\n <span>1 {{ impactAssessment.product?.term?.units }}</span>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.term?.name\">\n @if (impactAssessment.product?.term) {\n <he-node-link [node]=\"impactAssessment.product.term\">\n <span>{{ impactAssessment.product.term.name | ellipsis: 30 }}</span>\n </he-node-link>\n }\n </td>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node.value.term.name; let nodeLast = $last) {\n <td\n class=\"is-nowrap\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n @if (node.value.values[impactAssessment['@id']]) {\n <span\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow\"\n placement=\"left\"\n container=\"body\"\n [popoverContext]=\"{\n data: node.value.values[impactAssessment['@id']],\n impactAssessment\n }\">\n <span pointer>\n {{\n propertyValue(\n node.value.values[impactAssessment['@id']].value,\n node.value.term['@id']\n )\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"dataState()\"\n [node]=\"node.value.values[impactAssessment['@id']].node\"\n key=\"value\"\n [state]=\"impactAssessment.aggregated ? 'aggregated' : undefined\"></he-blank-node-state>\n </span>\n } @else {\n <span>-</span>\n }\n </td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <he-blank-node-state-notice [dataState]=\"dataState()\"></he-blank-node-state-notice>\n } @else {\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n <span [class.is-hidden]=\"!isOriginal()\">\n Switch to\n <code>recalculated</code>\n version.\n </span>\n </div>\n }\n </div>\n }\n @case (View.chart) {\n <he-impact-assessments-indicators-chart\n [key]=\"nodeKey()\"\n [filterTermTypes]=\"filterTermTypes()\"></he-impact-assessments-indicators-chart>\n }\n @case (View.breakdown) {\n <he-impact-assessments-indicator-breakdown-chart\n [impactAssessment]=\"selectedNode()\"\n [indicators]=\"selectedRecalculatedValues()\"></he-impact-assessments-indicator-breakdown-chart>\n }\n @case (View.logs) {\n @if (impactAssessments().length > 1) {\n <div class=\"field has-addons pt-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n @for (value of impactAssessments(); track value; let i = $index) {\n <option [value]=\"i\">{{ i + 1 }}. {{ impactName(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey()\"\n [filterTermTypes]=\"filterTermTypes()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [noDataMessage]=\"noDataMessage()\"></he-node-logs-models>\n }\n }\n }\n}\n\n<ng-template #details let-node=\"impactAssessment\" let-data=\"data\">\n <p>\n <b>\n @if (data.cycle) {\n <span>{{ cycleLabel(node.cycle) }}</span>\n }\n @if (!data.cycle) {\n <span>{{ data.name }}</span>\n }\n </b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"nodeKey()\"></he-node-value-details>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}he-data-table ::ng-deep .table thead tr th:nth-child(3),he-data-table ::ng-deep .table tbody tr td:nth-child(3){min-width:110px}\n"], dependencies: [{ kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "component", type: SearchExtendComponent, selector: "he-search-extend", inputs: ["value", "disabled", "placeholder", "class"], outputs: ["valueChange", "search"] }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { kind: "directive", type: NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "component", type: BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showDeleted"] }, { kind: "component", type: ImpactAssessmentsIndicatorsChartComponent, selector: "he-impact-assessments-indicators-chart", inputs: ["key", "filterTermTypes"] }, { kind: "component", type: ImpactAssessmentsIndicatorBreakdownChartComponent, selector: "he-impact-assessments-indicator-breakdown-chart", inputs: ["impactAssessment", "indicators"] }, { kind: "component", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }, { kind: "component", type: NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataState", "dataKey"] }, { kind: "pipe", type: CompoundPipe, name: "compound" }, { kind: "pipe", type: DefaultPipe, name: "default" }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: PrecisionPipe, name: "precision" }, { kind: "pipe", type: KeyToLabelPipe, name: "keyToLabel" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
166
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: ImpactAssessmentsProductsComponent, isStandalone: true, selector: "he-impact-assessments-products", inputs: { dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null }, nodeKey: { classPropertyName: "nodeKey", publicName: "nodeKey", isSignal: true, isRequired: false, transformFunction: null }, filterTermTypes: { classPropertyName: "filterTermTypes", publicName: "filterTermTypes", isSignal: true, isRequired: false, transformFunction: null }, enableFilterMethodModel: { classPropertyName: "enableFilterMethodModel", publicName: "enableFilterMethodModel", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 is-m-0\">\n <div class=\"column\">\n @if (hasData() && selectedView() === View.table) {\n <button class=\"button is-small is-ghost\" (click)=\"showDownload()\">\n <fa-icon [icon]=\"faDownload\" size=\"lg\" />\n </button>\n }\n </div>\n @if (selectedView() === View.table) {\n <div class=\"column is-narrow\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (search)=\"filterTerm.set($event)\"></he-search-extend>\n </div>\n }\n @if (hasData() && views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"viewIcon[view]\" aria-hidden=\"true\" />\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n }\n </div>\n </div>\n }\n</div>\n\n@if (isNodeKeyAllowed()) {\n @switch (selectedView()) {\n @case (View.table) {\n <div class=\"is-px-3 is-pb-3\">\n @if (hasData()) {\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n @if (dataKeys().length > 1) {\n <tr class=\"has-text-weight-bold\">\n <th class=\"width-auto\"></th>\n <th></th>\n <th></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @if (data()[dataKey]?.length) {\n <th [attr.colspan]=\"data()[dataKey].length\" [class.has-border-right]=\"!dataKeyLast\">\n @if (dataKey) {\n <span>{{ dataKey | keyToLabel }}</span>\n }\n </th>\n }\n }\n </tr>\n }\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right is-py-0\">\n @if (enableFilterMethodModel()) {\n <div class=\"select is-small\">\n <select (change)=\"updateSelectedMethodModel($event.target.value)\">\n <option [ngValue]=\"undefined\">Filter Model</option>\n @for (term of methodModels(); track term) {\n <option [ngValue]=\"term\">{{ term.name }}</option>\n }\n </select>\n </div>\n }\n </th>\n <th class=\"has-border-right\"></th>\n <th class=\"has-border-right\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node.value.term.name; let nodeLast = $last) {\n <th\n [attr.title]=\"node.value.term.name\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <he-node-link [node]=\"node.value.term\">\n <span\n [innerHtml]=\"\n node.value.term.name | ellipsis: 30 | compound: node.value.term.termType\n \"></span>\n </he-node-link>\n </th>\n }\n }\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\">\n <a [href]=\"schemaBaseUrl + '/ImpactAssessment#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n <th class=\"has-border-right\">\n <a [href]=\"schemaBaseUrl + '/ImpactAssessment#product'\" target=\"_blank\">Product</a>\n </th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node.value.term.name; let nodeLast = $last) {\n <th\n [attr.title]=\"node.value.term.units\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span [innerHtml]=\"node.value.term.units | compound: node.value.term.termType\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"node.value.term\"></he-terms-units-description>\n </th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (\n impactAssessment of impactAssessments();\n track trackById(impactIndex, impactAssessment);\n let impactIndex = $index\n ) {\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"impactName(impactAssessment)\">\n <he-node-link [node]=\"impactAssessment\">\n <span>{{ impactIndex + 1 }}. {{ impactName(impactAssessment) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.term?.units\">\n <span>1 {{ impactAssessment.product?.term?.units }}</span>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.term?.name\">\n @if (impactAssessment.product?.term) {\n <he-node-link [node]=\"impactAssessment.product.term\">\n <span>{{ impactAssessment.product.term.name | ellipsis: 30 }}</span>\n </he-node-link>\n }\n </td>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node.value.term.name; let nodeLast = $last) {\n <td\n class=\"is-nowrap\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n @if (node.value.values[impactAssessment['@id']]) {\n <span\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow\"\n placement=\"left\"\n container=\"body\"\n [popoverContext]=\"{\n data: node.value.values[impactAssessment['@id']],\n impactAssessment\n }\">\n <span pointer>\n {{\n propertyValue(\n node.value.values[impactAssessment['@id']].value,\n node.value.term['@id']\n )\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"dataState()\"\n [node]=\"node.value.values[impactAssessment['@id']].node\"\n key=\"value\"\n [state]=\"impactAssessment.aggregated ? 'aggregated' : undefined\"></he-blank-node-state>\n </span>\n } @else {\n <span>-</span>\n }\n </td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <he-blank-node-state-notice [dataState]=\"dataState()\"></he-blank-node-state-notice>\n } @else {\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n <span [class.is-hidden]=\"!isOriginal()\">\n Switch to\n <code>recalculated</code>\n version.\n </span>\n </div>\n }\n </div>\n }\n @case (View.chart) {\n <he-impact-assessments-indicators-chart\n [key]=\"nodeKey()\"\n [filterTermTypes]=\"filterTermTypes()\"></he-impact-assessments-indicators-chart>\n }\n @case (View.breakdown) {\n <he-impact-assessments-indicator-breakdown-chart\n [impactAssessment]=\"selectedNode()\"\n [indicators]=\"selectedRecalculatedValues()\"></he-impact-assessments-indicator-breakdown-chart>\n }\n @case (View.logs) {\n @if (impactAssessments().length > 1) {\n <div class=\"field has-addons pt-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n @for (value of impactAssessments(); track value; let i = $index) {\n <option [value]=\"i\">{{ i + 1 }}. {{ impactName(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey()\"\n [filterTermTypes]=\"filterTermTypes()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [noDataMessage]=\"noDataMessage()\"></he-node-logs-models>\n }\n }\n }\n}\n\n<ng-template #details let-node=\"impactAssessment\" let-data=\"data\">\n <p>\n <b>\n @if (data.cycle) {\n <span>{{ cycleLabel(node.cycle) }}</span>\n }\n @if (!data.cycle) {\n <span>{{ data.name }}</span>\n }\n </b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"nodeKey()\"></he-node-value-details>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}he-data-table ::ng-deep .table thead tr th:nth-child(3),he-data-table ::ng-deep .table tbody tr td:nth-child(3){min-width:110px}\n"], dependencies: [{ kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "component", type: SearchExtendComponent, selector: "he-search-extend", inputs: ["value", "disabled", "placeholder", "class"], outputs: ["valueChange", "search"] }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { kind: "directive", type: NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "component", type: BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showDeleted"] }, { kind: "component", type: ImpactAssessmentsIndicatorsChartComponent, selector: "he-impact-assessments-indicators-chart", inputs: ["key", "filterTermTypes"] }, { kind: "component", type: ImpactAssessmentsIndicatorBreakdownChartComponent, selector: "he-impact-assessments-indicator-breakdown-chart", inputs: ["impactAssessment", "indicators"] }, { kind: "component", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }, { kind: "component", type: NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataState", "dataKey"] }, { kind: "pipe", type: CompoundPipe, name: "compound" }, { kind: "pipe", type: DefaultPipe, name: "default" }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: PrecisionPipe, name: "precision" }, { kind: "pipe", type: KeyToLabelPipe, name: "keyToLabel" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
167
167
|
}
|
|
168
168
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ImpactAssessmentsProductsComponent, decorators: [{
|
|
169
169
|
type: Component,
|
|
@@ -187,6 +187,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
|
|
|
187
187
|
EllipsisPipe,
|
|
188
188
|
PrecisionPipe,
|
|
189
189
|
KeyToLabelPipe
|
|
190
|
-
], template: "<div class=\"columns is-variable is-align-items-center is-2 is-m-0\">\n <div class=\"column\">\n @if (hasData() && selectedView() === View.table) {\n <button class=\"button is-small is-ghost\" (click)=\"showDownload()\">\n <fa-icon [icon]=\"faDownload\" size=\"lg\"></fa-icon>\n </button>\n }\n </div>\n @if (selectedView() === View.table) {\n <div class=\"column is-narrow\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (search)=\"filterTerm.set($event)\"></he-search-extend>\n </div>\n }\n @if (hasData() && views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"viewIcon[view]\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n }\n </div>\n </div>\n }\n</div>\n\n@if (isNodeKeyAllowed()) {\n @switch (selectedView()) {\n @case (View.table) {\n <div class=\"is-px-3 is-pb-3\">\n @if (hasData()) {\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n @if (dataKeys().length > 1) {\n <tr class=\"has-text-weight-bold\">\n <th class=\"width-auto\"></th>\n <th></th>\n <th></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @if (data()[dataKey]?.length) {\n <th [attr.colspan]=\"data()[dataKey].length\" [class.has-border-right]=\"!dataKeyLast\">\n @if (dataKey) {\n <span>{{ dataKey | keyToLabel }}</span>\n }\n </th>\n }\n }\n </tr>\n }\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right is-py-0\">\n @if (enableFilterMethodModel()) {\n <div class=\"select is-small\">\n <select (change)=\"updateSelectedMethodModel($event.target.value)\">\n <option [ngValue]=\"undefined\">Filter Model</option>\n @for (term of methodModels(); track term) {\n <option [ngValue]=\"term\">{{ term.name }}</option>\n }\n </select>\n </div>\n }\n </th>\n <th class=\"has-border-right\"></th>\n <th class=\"has-border-right\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node.value.term.name; let nodeLast = $last) {\n <th\n [attr.title]=\"node.value.term.name\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <he-node-link [node]=\"node.value.term\">\n <span\n [innerHtml]=\"\n node.value.term.name | ellipsis: 30 | compound: node.value.term.termType\n \"></span>\n </he-node-link>\n </th>\n }\n }\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\">\n <a [href]=\"schemaBaseUrl + '/ImpactAssessment#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n <th class=\"has-border-right\">\n <a [href]=\"schemaBaseUrl + '/ImpactAssessment#product'\" target=\"_blank\">Product</a>\n </th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node.value.term.name; let nodeLast = $last) {\n <th\n [attr.title]=\"node.value.term.units\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span [innerHtml]=\"node.value.term.units | compound: node.value.term.termType\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"node.value.term\"></he-terms-units-description>\n </th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (\n impactAssessment of impactAssessments();\n track trackById(impactIndex, impactAssessment);\n let impactIndex = $index\n ) {\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"impactName(impactAssessment)\">\n <he-node-link [node]=\"impactAssessment\">\n <span>{{ impactIndex + 1 }}. {{ impactName(impactAssessment) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.term?.units\">\n <span>1 {{ impactAssessment.product?.term?.units }}</span>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.term?.name\">\n @if (impactAssessment.product?.term) {\n <he-node-link [node]=\"impactAssessment.product.term\">\n <span>{{ impactAssessment.product.term.name | ellipsis: 30 }}</span>\n </he-node-link>\n }\n </td>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node.value.term.name; let nodeLast = $last) {\n <td\n class=\"is-nowrap\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n @if (node.value.values[impactAssessment['@id']]) {\n <span\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow\"\n placement=\"left\"\n container=\"body\"\n [popoverContext]=\"{\n data: node.value.values[impactAssessment['@id']],\n impactAssessment\n }\">\n <span pointer>\n {{\n propertyValue(\n node.value.values[impactAssessment['@id']].value,\n node.value.term['@id']\n )\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"dataState()\"\n [node]=\"node.value.values[impactAssessment['@id']].node\"\n key=\"value\"\n [state]=\"impactAssessment.aggregated ? 'aggregated' : undefined\"></he-blank-node-state>\n </span>\n } @else {\n <span>-</span>\n }\n </td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <he-blank-node-state-notice [dataState]=\"dataState()\"></he-blank-node-state-notice>\n } @else {\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n <span [class.is-hidden]=\"!isOriginal()\">\n Switch to\n <code>recalculated</code>\n version.\n </span>\n </div>\n }\n </div>\n }\n @case (View.chart) {\n <he-impact-assessments-indicators-chart\n [key]=\"nodeKey()\"\n [filterTermTypes]=\"filterTermTypes()\"></he-impact-assessments-indicators-chart>\n }\n @case (View.breakdown) {\n <he-impact-assessments-indicator-breakdown-chart\n [impactAssessment]=\"selectedNode()\"\n [indicators]=\"selectedRecalculatedValues()\"></he-impact-assessments-indicator-breakdown-chart>\n }\n @case (View.logs) {\n @if (impactAssessments().length > 1) {\n <div class=\"field has-addons pt-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n @for (value of impactAssessments(); track value; let i = $index) {\n <option [value]=\"i\">{{ i + 1 }}. {{ impactName(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey()\"\n [filterTermTypes]=\"filterTermTypes()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [noDataMessage]=\"noDataMessage()\"></he-node-logs-models>\n }\n }\n }\n}\n\n<ng-template #details let-node=\"impactAssessment\" let-data=\"data\">\n <p>\n <b>\n @if (data.cycle) {\n <span>{{ cycleLabel(node.cycle) }}</span>\n }\n @if (!data.cycle) {\n <span>{{ data.name }}</span>\n }\n </b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"nodeKey()\"></he-node-value-details>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}he-data-table ::ng-deep .table thead tr th:nth-child(3),he-data-table ::ng-deep .table tbody tr td:nth-child(3){min-width:110px}\n"] }]
|
|
190
|
+
], template: "<div class=\"columns is-variable is-align-items-center is-2 is-m-0\">\n <div class=\"column\">\n @if (hasData() && selectedView() === View.table) {\n <button class=\"button is-small is-ghost\" (click)=\"showDownload()\">\n <fa-icon [icon]=\"faDownload\" size=\"lg\" />\n </button>\n }\n </div>\n @if (selectedView() === View.table) {\n <div class=\"column is-narrow\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (search)=\"filterTerm.set($event)\"></he-search-extend>\n </div>\n }\n @if (hasData() && views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"viewIcon[view]\" aria-hidden=\"true\" />\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n }\n </div>\n </div>\n }\n</div>\n\n@if (isNodeKeyAllowed()) {\n @switch (selectedView()) {\n @case (View.table) {\n <div class=\"is-px-3 is-pb-3\">\n @if (hasData()) {\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n @if (dataKeys().length > 1) {\n <tr class=\"has-text-weight-bold\">\n <th class=\"width-auto\"></th>\n <th></th>\n <th></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @if (data()[dataKey]?.length) {\n <th [attr.colspan]=\"data()[dataKey].length\" [class.has-border-right]=\"!dataKeyLast\">\n @if (dataKey) {\n <span>{{ dataKey | keyToLabel }}</span>\n }\n </th>\n }\n }\n </tr>\n }\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right is-py-0\">\n @if (enableFilterMethodModel()) {\n <div class=\"select is-small\">\n <select (change)=\"updateSelectedMethodModel($event.target.value)\">\n <option [ngValue]=\"undefined\">Filter Model</option>\n @for (term of methodModels(); track term) {\n <option [ngValue]=\"term\">{{ term.name }}</option>\n }\n </select>\n </div>\n }\n </th>\n <th class=\"has-border-right\"></th>\n <th class=\"has-border-right\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node.value.term.name; let nodeLast = $last) {\n <th\n [attr.title]=\"node.value.term.name\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <he-node-link [node]=\"node.value.term\">\n <span\n [innerHtml]=\"\n node.value.term.name | ellipsis: 30 | compound: node.value.term.termType\n \"></span>\n </he-node-link>\n </th>\n }\n }\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\">\n <a [href]=\"schemaBaseUrl + '/ImpactAssessment#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n <th class=\"has-border-right\">\n <a [href]=\"schemaBaseUrl + '/ImpactAssessment#product'\" target=\"_blank\">Product</a>\n </th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node.value.term.name; let nodeLast = $last) {\n <th\n [attr.title]=\"node.value.term.units\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span [innerHtml]=\"node.value.term.units | compound: node.value.term.termType\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"node.value.term\"></he-terms-units-description>\n </th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (\n impactAssessment of impactAssessments();\n track trackById(impactIndex, impactAssessment);\n let impactIndex = $index\n ) {\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"impactName(impactAssessment)\">\n <he-node-link [node]=\"impactAssessment\">\n <span>{{ impactIndex + 1 }}. {{ impactName(impactAssessment) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.term?.units\">\n <span>1 {{ impactAssessment.product?.term?.units }}</span>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.term?.name\">\n @if (impactAssessment.product?.term) {\n <he-node-link [node]=\"impactAssessment.product.term\">\n <span>{{ impactAssessment.product.term.name | ellipsis: 30 }}</span>\n </he-node-link>\n }\n </td>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node.value.term.name; let nodeLast = $last) {\n <td\n class=\"is-nowrap\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n @if (node.value.values[impactAssessment['@id']]) {\n <span\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n autoClose=\"outside\"\n popoverClass=\"is-narrow\"\n placement=\"left\"\n container=\"body\"\n [popoverContext]=\"{\n data: node.value.values[impactAssessment['@id']],\n impactAssessment\n }\">\n <span pointer>\n {{\n propertyValue(\n node.value.values[impactAssessment['@id']].value,\n node.value.term['@id']\n )\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"dataState()\"\n [node]=\"node.value.values[impactAssessment['@id']].node\"\n key=\"value\"\n [state]=\"impactAssessment.aggregated ? 'aggregated' : undefined\"></he-blank-node-state>\n </span>\n } @else {\n <span>-</span>\n }\n </td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <he-blank-node-state-notice [dataState]=\"dataState()\"></he-blank-node-state-notice>\n } @else {\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n <span [class.is-hidden]=\"!isOriginal()\">\n Switch to\n <code>recalculated</code>\n version.\n </span>\n </div>\n }\n </div>\n }\n @case (View.chart) {\n <he-impact-assessments-indicators-chart\n [key]=\"nodeKey()\"\n [filterTermTypes]=\"filterTermTypes()\"></he-impact-assessments-indicators-chart>\n }\n @case (View.breakdown) {\n <he-impact-assessments-indicator-breakdown-chart\n [impactAssessment]=\"selectedNode()\"\n [indicators]=\"selectedRecalculatedValues()\"></he-impact-assessments-indicator-breakdown-chart>\n }\n @case (View.logs) {\n @if (impactAssessments().length > 1) {\n <div class=\"field has-addons pt-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n @for (value of impactAssessments(); track value; let i = $index) {\n <option [value]=\"i\">{{ i + 1 }}. {{ impactName(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey()\"\n [filterTermTypes]=\"filterTermTypes()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [noDataMessage]=\"noDataMessage()\"></he-node-logs-models>\n }\n }\n }\n}\n\n<ng-template #details let-node=\"impactAssessment\" let-data=\"data\">\n <p>\n <b>\n @if (data.cycle) {\n <span>{{ cycleLabel(node.cycle) }}</span>\n }\n @if (!data.cycle) {\n <span>{{ data.name }}</span>\n }\n </b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"nodeKey()\"></he-node-value-details>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}he-data-table ::ng-deep .table thead tr th:nth-child(3),he-data-table ::ng-deep .table tbody tr td:nth-child(3){min-width:110px}\n"] }]
|
|
191
191
|
}], ctorParameters: () => [] });
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbXBhY3QtYXNzZXNzbWVudHMvaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvaW1wYWN0LWFzc2Vzc21lbnRzL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFJTCxZQUFZLEVBRVosUUFBUSxFQUNSLGFBQWEsRUFHZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUFrQixZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxP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QUM5QixTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDOytHQTNMVSxrQ0FBa0M7bUdBQWxDLGtDQUFrQyw0cUJDbEgvQyxxdVdBNFBBLGdYRDlKSSxlQUFlLDRNQUNmLHFCQUFxQix3SkFDckIsa0JBQWtCLHNHQUNsQixXQUFXLDRPQUNYLGlCQUFpQiw0R0FDakIsOEJBQThCLHlHQUM5QixVQUFVLDJVQUNWLHVCQUF1QixtSkFDdkIsNkJBQTZCLDZHQUM3Qix5Q0FBeUMsdUhBQ3pDLGlEQUFpRCx3SUFDakQsdUJBQXVCLHFOQUN2Qix5QkFBeUIsbUhBQ3pCLFlBQVksNENBQ1osV0FBVywyQ0FDWCxZQUFZLDRDQUNaLGFBQWEsNkNBQ2IsY0FBYzs7NEZBR0wsa0NBQWtDO2tCQTVCOUMsU0FBUzsrQkFDRSxnQ0FBZ0MsbUJBR3pCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFVBQVU7d0JBQ1YsZUFBZTt3QkFDZixxQkFBcUI7d0JBQ3JCLGtCQUFrQjt3QkFDbEIsV0FBVzt3QkFDWCxpQkFBaUI7d0JBQ2pCLDhCQUE4Qjt3QkFDOUIsVUFBVTt3QkFDVix1QkFBdUI7d0JBQ3ZCLDZCQUE2Qjt3QkFDN0IseUNBQXlDO3dCQUN6QyxpREFBaUQ7d0JBQ2pELHVCQUF1Qjt3QkFDdkIseUJBQXlCO3dCQUN6QixZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGNBQWM7cUJBQ2YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRGF0YVN0YXRlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBJQ3ljbGVKU09OTEQsXG4gIElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELFxuICBJbmRpY2F0b3IsXG4gIFRlcm1UZXJtVHlwZSxcbiAgVGVybSxcbiAgTm9kZVR5cGUsXG4gIEJsYW5rTm9kZXNLZXksXG4gIEluZGljYXRvck1ldGhvZFRpZXIsXG4gIElUZXJtSlNPTkxEXG59IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IHByb3BlcnR5VmFsdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzL2Rpc3QvdGVybSc7XG5pbXBvcnQgeyBGYUljb25Db21wb25lbnQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XG5pbXBvcnQgeyBOZ2JUb29sdGlwLCBOZ2JQb3BvdmVyLCBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IEljb25EZWZpbml0aW9uLCBmYUNhbGN1bGF0b3IsIGZhQ2hhcnRCYXIsIGZhRG93bmxvYWQsIGZhTGlzdCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC5vcmRlcmJ5JztcbmltcG9ydCB1bmlxQnkgZnJvbSAnbG9kYXNoLnVuaXFieSc7XG5cbmltcG9ydCB7XG4gIGdyb3VwTm9kZXNCeVRlcm0sXG4gIElHcm91cGVkS2V5cyxcbiAgZ3JvdXBwZWRLZXlzLFxuICBpc01ldGhvZE1vZGVsQWxsb3dlZCxcbiAgbWV0aG9kVGllck9yZGVyXG59IGZyb20gJy4uLy4uL2NvbW1vbi9ub2RlLXV0aWxzJztcbmltcG9ydCB7IHNjaGVtYUJhc2VVcmwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgUHJlY2lzaW9uUGlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9wcmVjaXNpb24ucGlwZSc7XG5pbXBvcnQgeyBFbGxpcHNpc1BpcGUgfSBmcm9tICcuLi8uLi9jb21tb24vZWxsaXBzaXMucGlwZSc7XG5pbXBvcnQgeyBEZWZhdWx0UGlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9kZWZhdWx0LnBpcGUnO1xuaW1wb3J0IHsgQ29tcG91bmRQaXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2NvbXBvdW5kLnBpcGUnO1xuaW1wb3J0IHsgS2V5VG9MYWJlbFBpcGUgfSBmcm9tICcuLi8uLi9jb21tb24va2V5LXRvLWxhYmVsLnBpcGUnO1xuaW1wb3J0IHsgQmxhbmtOb2RlU3RhdGVOb3RpY2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UvYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGFUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbW1vbi9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEJsYW5rTm9kZVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2JsYW5rLW5vZGUtc3RhdGUvYmxhbmstbm9kZS1zdGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoRXh0ZW5kQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL3NlYXJjaC1leHRlbmQvc2VhcmNoLWV4dGVuZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSGVOb2RlU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbm9kZS9ub2RlLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZVZhbHVlRGV0YWlsc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS12YWx1ZS1kZXRhaWxzL25vZGUtdmFsdWUtZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZUNzdkV4cG9ydENvbmZpcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9ub2RlL25vZGUtY3N2LWV4cG9ydC1jb25maXJtL25vZGUtY3N2LWV4cG9ydC1jb25maXJtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlTG9nc01vZGVsc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1sb2dzLW1vZGVscy9ub2RlLWxvZ3MtbW9kZWxzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbXBhY3RBc3Nlc3NtZW50c0luZGljYXRvckJyZWFrZG93bkNoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvci1icmVha2Rvd24tY2hhcnQvaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvci1icmVha2Rvd24tY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IEltcGFjdEFzc2Vzc21lbnRzSW5kaWNhdG9yc0NoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvcnMtY2hhcnQvaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvcnMtY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IFRlcm1zVW5pdHNEZXNjcmlwdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Rlcm1zL3Rlcm1zLXVuaXRzLWRlc2NyaXB0aW9uL3Rlcm1zLXVuaXRzLWRlc2NyaXB0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlTGlua0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1saW5rL25vZGUtbGluay5jb21wb25lbnQnO1xuXG5lbnVtIFZpZXcge1xuICB0YWJsZSA9ICdUYWJsZSB2aWV3JyxcbiAgY2hhcnQgPSAnQ2hhcnQgdmlldycsXG4gIGJyZWFrZG93biA9ICdCcmVha2Rvd24gdmlldycsXG4gIGxvZ3MgPSAnUmVjYWxjdWxhdGlvbnMgbG9ncydcbn1cblxuY29uc3Qgdmlld0ljb246IHtcbiAgW3ZpZXcgaW4gVmlld106IEljb25EZWZpbml0aW9uO1xufSA9IHtcbiAgW1ZpZXcuYnJlYWtkb3duXTogZmFDaGFydEJhcixcbiAgW1ZpZXcuY2hhcnRdOiBmYUNoYXJ0QmFyLFxuICBbVmlldy5sb2dzXTogZmFDYWxjdWxhdG9yLFxuICBbVmlldy50YWJsZV06IGZhTGlzdFxufTtcblxuY29uc3Qgbm9kZUtleVZpZXdzOiB7XG4gIFt0eXBlIGluIEJsYW5rTm9kZXNLZXldPzogVmlld1tdO1xufSA9IHtcbiAgW0JsYW5rTm9kZXNLZXkuZW1pc3Npb25zUmVzb3VyY2VVc2VdOiBbVmlldy50YWJsZSwgVmlldy5jaGFydCwgVmlldy5sb2dzXSxcbiAgW0JsYW5rTm9kZXNLZXkuaW1wYWN0c106IFtWaWV3LnRhYmxlLCBWaWV3LmJyZWFrZG93biwgVmlldy5jaGFydCwgVmlldy5sb2dzXSxcbiAgW0JsYW5rTm9kZXNLZXkuZW5kcG9pbnRzXTogW1ZpZXcudGFibGUsIFZpZXcuYnJlYWtkb3duLCBWaWV3LmNoYXJ0LCBWaWV3LmxvZ3NdXG59O1xuXG50eXBlIGdyb3VwZWRFbWlzc2lvbnMgPSB7XG4gIFttZXRob2RUaWVyIGluIEluZGljYXRvck1ldGhvZFRpZXJdOiBJR3JvdXBlZEtleXM8SW5kaWNhdG9yPltdO1xufTtcblxuY29uc3QgdGVybUFsbG93ZWQgPSAodGVybT86IFRlcm0gfCBJVGVybUpTT05MRCwgZmlsdGVyVGVybVR5cGVzOiBUZXJtVGVybVR5cGVbXSA9IFtdKSA9PlxuICAhZmlsdGVyVGVybVR5cGVzPy5sZW5ndGggfHwgKGZpbHRlclRlcm1UeXBlcyB8fCBbXSkuaW5jbHVkZXModGVybT8udGVybVR5cGUpO1xuXG5jb25zdCBmaWx0ZXJOb2RlID0gKGZpbHRlckJ5TWV0aG9kTW9kZWw6IGJvb2xlYW4sIGZpbHRlck1ldGhvZE1vZGVsPzogVGVybSwgZmlsdGVyVGVybT86IHN0cmluZykgPT4gKG5vZGU6IEluZGljYXRvcikgPT5cbiAgW1xuICAgICFmaWx0ZXJCeU1ldGhvZE1vZGVsIHx8IGlzTWV0aG9kTW9kZWxBbGxvd2VkKGZpbHRlck1ldGhvZE1vZGVsKShub2RlKSxcbiAgICAhZmlsdGVyVGVybSB8fCBub2RlPy50ZXJtPy5uYW1lPy50b0xvd2VyQ2FzZSgpPy5pbmNsdWRlcyhmaWx0ZXJUZXJtLnRvTG93ZXJDYXNlKCkpXG4gIF0uZXZlcnkoQm9vbGVhbik7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLWltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ2JUb29sdGlwLFxuICAgIEZhSWNvbkNvbXBvbmVudCxcbiAgICBTZWFyY2hFeHRlbmRDb21wb25lbnQsXG4gICAgRGF0YVRhYmxlQ29tcG9uZW50LFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5vZGVMaW5rQ29tcG9uZW50LFxuICAgIFRlcm1zVW5pdHNEZXNjcmlwdGlvbkNvbXBvbmVudCxcbiAgICBOZ2JQb3BvdmVyLFxuICAgIEJsYW5rTm9kZVN0YXRlQ29tcG9uZW50LFxuICAgIEJsYW5rTm9kZVN0YXRlTm90aWNlQ29tcG9uZW50LFxuICAgIEltcGFjdEFzc2Vzc21lbnRzSW5kaWNhdG9yc0NoYXJ0Q29tcG9uZW50LFxuICAgIEltcGFjdEFzc2Vzc21lbnRzSW5kaWNhdG9yQnJlYWtkb3duQ2hhcnRDb21wb25lbnQsXG4gICAgTm9kZUxvZ3NNb2RlbHNDb21wb25lbnQsXG4gICAgTm9kZVZhbHVlRGV0YWlsc0NvbXBvbmVudCxcbiAgICBDb21wb3VuZFBpcGUsXG4gICAgRGVmYXVsdFBpcGUsXG4gICAgRWxsaXBzaXNQaXBlLFxuICAgIFByZWNpc2lvblBpcGUsXG4gICAgS2V5VG9MYWJlbFBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBJbXBhY3RBc3Nlc3NtZW50c1Byb2R1Y3RzQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBtb2RhbFNlcnZpY2UgPSBpbmplY3QoTmdiTW9kYWwpO1xuICBwcml2YXRlIHJlYWRvbmx5IG5vZGVTdG9yZVNlcnZpY2UgPSBpbmplY3QoSGVOb2RlU3RvcmVTZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFEb3dubG9hZCA9IGZhRG93bmxvYWQ7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGFTdGF0ZSA9IGlucHV0KERhdGFTdGF0ZS5vcmlnaW5hbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBub2RlS2V5ID0gaW5wdXQoQmxhbmtOb2Rlc0tleS5pbXBhY3RzKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbHRlclRlcm1UeXBlcyA9IGlucHV0KFtdIGFzIFRlcm1UZXJtVHlwZVtdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVuYWJsZUZpbHRlck1ldGhvZE1vZGVsID0gaW5wdXQoZmFsc2UpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNjaGVtYUJhc2VVcmwgPSBzY2hlbWFCYXNlVXJsKCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhlYWRlcktleXMgPSBjb21wdXRlZCgoKSA9PiBbXG4gICAgJ2ltcGFjdEFzc2Vzc21lbnQuaWQnLFxuICAgICdpbXBhY3RBc3Nlc3NtZW50LkBpZCcsXG4gICAgYGltcGFjdEFzc2Vzc21lbnQuJHt0aGlzLm5vZGVLZXkoKX0uYFxuICBdKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgVmlldyA9IFZpZXc7XG4gIHByb3RlY3RlZCByZWFkb25seSB2aWV3SWNvbiA9IHZpZXdJY29uO1xuICBwcml2YXRlIHJlYWRvbmx5IHNob3dWaWV3ID0gY29tcHV0ZWQoXG4gICAgKCkgPT5cbiAgICAgICh7XG4gICAgICAgIFtWaWV3LmJyZWFrZG93bl06ICF0aGlzLmlzT3JpZ2luYWwoKSAmJiB0aGlzLmltcGFjdEFzc2Vzc21lbnRzKCkubGVuZ3RoID09PSAxLFxuICAgICAgICBbVmlldy5jaGFydF06IHRoaXMuaW1wYWN0QXNzZXNzbWVudHMoKS5sZW5ndGggPiAxLFxuICAgICAgICBbVmlldy5sb2dzXTogIXRoaXMuaXNPcmlnaW5hbCgpLFxuICAgICAgICBbVmlldy50YWJsZV06IHRydWVcbiAgICAgIH0pIGFzIHsgW3ZpZXcgaW4gVmlld106IGJvb2xlYW4gfVxuICApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmlld3MgPSBjb21wdXRlZCgoKSA9PiBub2RlS2V5Vmlld3NbdGhpcy5ub2RlS2V5KCldPy5maWx0ZXIodmlldyA9PiB0aGlzLnNob3dWaWV3KClbdmlld10pID8/IFtdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkVmlldyA9IHNpZ25hbChWaWV3LnRhYmxlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGN5Y2xlcyA9IHRvU2lnbmFsKFxuICAgIHRoaXMubm9kZVN0b3JlU2VydmljZS5maW5kQnlTdGF0ZSQ8SUN5Y2xlSlNPTkxEPihOb2RlVHlwZS5DeWNsZSwgRGF0YVN0YXRlLm9yaWdpbmFsKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgb3JpZ2luYWxJbXBhY3RBc3Nlc3NtZW50cyA9IHRvU2lnbmFsKFxuICAgIHRoaXMubm9kZVN0b3JlU2VydmljZS5maW5kQnlTdGF0ZSQ8SUltcGFjdEFzc2Vzc21lbnRKU09OTEQ+KE5vZGVUeXBlLkltcGFjdEFzc2Vzc21lbnQsIERhdGFTdGF0ZS5vcmlnaW5hbClcbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWxsSW1wYWN0QXNzZXNzbWVudHMgPSB0b1NpZ25hbChcbiAgICB0aGlzLm5vZGVTdG9yZVNlcnZpY2UuZmluZCQ8SUltcGFjdEFzc2Vzc21lbnRKU09OTEQ+KE5vZGVUeXBlLkltcGFjdEFzc2Vzc21lbnQpXG4gICk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpbXBhY3RBc3Nlc3NtZW50cyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuX2FsbEltcGFjdEFzc2Vzc21lbnRzKCk/Lm1hcChkYXRhID0+IGRhdGFbdGhpcy5kYXRhU3RhdGUoKV0pIHx8IFtdXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZEluZGV4ID0gc2lnbmFsKDApO1xuICBwcml2YXRlIHJlYWRvbmx5IG9naXJpbmFsU2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5vcmlnaW5hbEltcGFjdEFzc2Vzc21lbnRzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV1cbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZEltcGFjdEFzc2Vzc21lbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmltcGFjdEFzc2Vzc21lbnRzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRPcmlnaW5hbFZhbHVlcyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMub2dpcmluYWxTZWxlY3RlZEltcGFjdEFzc2Vzc21lbnQoKT8uW3RoaXMubm9kZUtleSgpXSB8fCBbXVxuICApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRSZWNhbGN1bGF0ZWRWYWx1ZXMgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudCgpPy5bdGhpcy5ub2RlS2V5KCldIHx8IFtdXG4gICk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZE5vZGUgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuc2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50KClcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50KCksXG4gICAgICAgICAgZGF0YVN0YXRlOiBEYXRhU3RhdGUucmVjYWxjdWxhdGVkXG4gICAgICAgIH1cbiAgICAgIDogbnVsbFxuICApO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBpc09yaWdpbmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kYXRhU3RhdGUoKSA9PT0gRGF0YVN0YXRlLm9yaWdpbmFsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcmlnaW5hbFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmlzT3JpZ2luYWwoKSA/IG51bGwgOiB0aGlzLm9yaWdpbmFsSW1wYWN0QXNzZXNzbWVudHMoKSkgfHwgW10pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBpc05vZGVLZXlBbGxvd2VkID0gY29tcHV0ZWQoKCkgPT4gbm9kZUtleVZpZXdzW3RoaXMubm9kZUtleSgpXS5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkVmlldygpKSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzaG91bGRGaWx0ZXJCeU1ldGhvZE1vZGVsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5lbmFibGVGaWx0ZXJNZXRob2RNb2RlbCgpICYmICF0aGlzLmlzT3JpZ2luYWwoKSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJUZXJtID0gc2lnbmFsKCcnKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY3N2RmlsZW5hbWUgPSBjb21wdXRlZCgoKSA9PiBgJHt0aGlzLm5vZGVLZXkoKX0uY3N2YCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzRW1pc3Npb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmZpbHRlclRlcm1UeXBlcygpLmluY2x1ZGVzKFRlcm1UZXJtVHlwZS5lbWlzc2lvbikpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRhID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmlzRW1pc3Npb24oKSA/IHRoaXMuZ3JvdXBFbWlzc2lvbnMoKSA6IHsgW3RoaXMubm9kZUtleSgpXTogdGhpcy5ncm91cEluZGljYXRvcnMoKSB9XG4gICk7XG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRhS2V5cyA9IGNvbXB1dGVkKCgpID0+IE9iamVjdC5rZXlzKHRoaXMuZGF0YSgpKSk7XG5cbiAgLy8gYXMgd2UgZmlsdGVyIGJ5IG1ldGhvZE1vZGVsLCB3ZSBtaWdodCBoYXZlIGFuIGVtcHR5IHRhYmxlIGZvciB0aGUgZGVmYXVsdCBtb2RlbHMgYnV0IG5vdCBmb3Igb3RoZXIgbW9kZWxzXG4gIHByb3RlY3RlZCByZWFkb25seSBoYXNEYXRhID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmVuYWJsZUZpbHRlck1ldGhvZE1vZGVsKCkgPyB0aGlzLm1ldGhvZE1vZGVscygpLmxlbmd0aCA6IE9iamVjdC52YWx1ZXModGhpcy5kYXRhKCkpLmZsYXQoKS5sZW5ndGggPiAwXG4gICk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5vRGF0YU1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMubm9kZUtleSgpID09PSBCbGFua05vZGVzS2V5LmVtaXNzaW9uc1Jlc291cmNlVXNlXG4gICAgICA/ICdXZSBjYW5ub3QgY2FsY3VsYXRlIHRoZXNlIGRhdGEsIG1vc3QgbGlrZWx5IGJlY2F1c2Ugd2UgYXJlIG1pc3NpbmcgdGhlIHF1YW50aXR5IHByb2R1Y2VkIG9yIGJlY2F1c2Ugd2UgYXJlIG1pc3NpbmcgZGF0YSB0byBhbGxvY2F0ZSBlbnZpcm9ubWVudGFsIGltcGFjdCBkYXRhIGJldHdlZW4gY28tcHJvZHVjdHMuJ1xuICAgICAgOiB1bmRlZmluZWRcbiAgKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWV0aG9kTW9kZWxzID0gY29tcHV0ZWQoKCkgPT5cbiAgICB1bmlxQnkoXG4gICAgICB0aGlzLmltcGFjdEFzc2Vzc21lbnRzKClcbiAgICAgICAgLmZsYXRNYXAoaW1wYWN0ID0+IChpbXBhY3RbdGhpcy5ub2RlS2V5KCldIHx8IFtdKS5tYXAodiA9PiB2Lm1ldGhvZE1vZGVsKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBUZXJtW10sXG4gICAgICAnQGlkJ1xuICAgICkuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RlZE1ldGhvZE1vZGVsID0gc2lnbmFsKHVuZGVmaW5lZCBhcyBUZXJtKTtcblxuICBwcm90ZWN0ZWQgZ3JvdXBJbmRpY2F0b3JzKCkge1xuICAgIC8vIFRPRE86IHdoZW4gdGhlcmUgYXJlIG5vIGluZGljYXRvcnMgZm9yIHRoZSBkZWZhdWx0IG1vZGVsLCB0aGUgdGFibGUgYXBwZWFycyBlbXB0eVxuICAgIC8vIHNob3VsZCBkZWZhdWx0IGJhY2sgdG8gdGhlIGZpcnN0IG1vZGVsIGluIHRoaXMgY2FzZVxuICAgIGNvbnN0IGluZGljYXRvclBlckltcGFjdEFzc2Vzc21lbnQgPSBncm91cE5vZGVzQnlUZXJtPElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELCBJbmRpY2F0b3I+KFxuICAgICAgdGhpcy5pbXBhY3RBc3Nlc3NtZW50cygpLFxuICAgICAgdGhpcy5ub2RlS2V5KCksXG4gICAgICB0aGlzLm9yaWdpbmFsVmFsdWVzKCksXG4gICAgICBmaWx0ZXJOb2RlKHRoaXMuc2hvdWxkRmlsdGVyQnlNZXRob2RNb2RlbCgpLCB0aGlzLl9zZWxlY3RlZE1ldGhvZE1vZGVsKCksIHRoaXMuZmlsdGVyVGVybSgpKVxuICAgICk7XG4gICAgcmV0dXJuIG9yZGVyQnkoZ3JvdXBwZWRLZXlzKGluZGljYXRvclBlckltcGFjdEFzc2Vzc21lbnQpLCBbJ3ZhbHVlLm1ldGhvZFRpZXJPcmRlcicsICdrZXknXSwgWydhc2MnLCAnYXNjJ10pLmZpbHRlcihcbiAgICAgICh7IHZhbHVlIH0pID0+IHRlcm1BbGxvd2VkKHZhbHVlPy50ZXJtLCB0aGlzLmZpbHRlclRlcm1UeXBlcygpKVxuICAgICkgYXMgSUdyb3VwZWRLZXlzPEluZGljYXRvcj5bXTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JvdXBFbWlzc2lvbnMoKSB7XG4gICAgY29uc3QgZW1pc3Npb25zUGVySW1wYWN0QXNzZXNzbWVudCA9IGdyb3VwTm9kZXNCeVRlcm08SUltcGFjdEFzc2Vzc21lbnRKU09OTEQsIEluZGljYXRvcj4oXG4gICAgICB0aGlzLmltcGFjdEFzc2Vzc21lbnRzKCksXG4gICAgICB0aGlzLm5vZGVLZXkoKSxcbiAgICAgIHRoaXMub3JpZ2luYWxWYWx1ZXMoKSxcbiAgICAgIGZpbHRlck5vZGUodGhpcy5zaG91bGRGaWx0ZXJCeU1ldGhvZE1vZGVsKCksIHRoaXMuX3NlbGVjdGVkTWV0aG9kTW9kZWwoKSwgdGhpcy5maWx0ZXJUZXJtKCkpXG4gICAgKTtcbiAgICBjb25zdCB2YWx1ZXM6IElHcm91cGVkS2V5czxJbmRpY2F0b3I+W10gPSBvcmRlckJ5KGdyb3VwcGVkS2V5cyhlbWlzc2lvbnNQZXJJbXBhY3RBc3Nlc3NtZW50KSwgWydrZXknXSwgWydhc2MnXSk7XG4gICAgY29uc3QgbWV0aG9kVGllcnMgPSBvcmRlckJ5KFxuICAgICAgdW5pcXVlKHZhbHVlcy5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUubWV0aG9kVGllcikpLm1hcChtZXRob2RUaWVyID0+ICh7XG4gICAgICAgIG1ldGhvZFRpZXIsXG4gICAgICAgIG1ldGhvZFRpZXJPcmRlcjogbWV0aG9kVGllck9yZGVyKG1ldGhvZFRpZXIpXG4gICAgICB9KSksXG4gICAgICBbJ21ldGhvZFRpZXJPcmRlciddLFxuICAgICAgWydhc2MnXVxuICAgICk7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIG1ldGhvZFRpZXJzLm1hcCgoeyBtZXRob2RUaWVyIH0pID0+IFtcbiAgICAgICAgbWV0aG9kVGllciB8fCAnJyxcbiAgICAgICAgdmFsdWVzLmZpbHRlcihcbiAgICAgICAgICAoeyB2YWx1ZSB9KSA9PiB2YWx1ZS5tZXRob2RUaWVyID09PSBtZXRob2RUaWVyICYmIHRlcm1BbGxvd2VkKHZhbHVlPy50ZXJtLCB0aGlzLmZpbHRlclRlcm1UeXBlcygpKVxuICAgICAgICApXG4gICAgICBdKVxuICAgICkgYXMgZ3JvdXBlZEVtaXNzaW9ucztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIGxvZ3MgZG9lcyBub3QgcmVtYWluIGRpc3BsYXllZFxuICAgICAgICBpZiAoKHRoaXMuaXNPcmlnaW5hbCgpICYmIHRoaXMuc2VsZWN0ZWRWaWV3KCkgPT09IFZpZXcubG9ncykgfHwgIXRoaXMudmlld3MoKS5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkVmlldygpKSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3LnNldChWaWV3LnRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tCeUlkKF9pbmRleDogbnVtYmVyLCBpdGVtOiBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCkge1xuICAgIHJldHVybiBpdGVtWydAaWQnXTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVTZWxlY3RlZE1ldGhvZE1vZGVsKHRlcm1OYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZXJtID0gdGhpcy5tZXRob2RNb2RlbHMoKS5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gdGVybU5hbWUpO1xuICAgIHRoaXMuX3NlbGVjdGVkTWV0aG9kTW9kZWwuc2V0KHRlcm0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGltcGFjdE5hbWUoaW1wYWN0OiBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCkge1xuICAgIHJldHVybiBpbXBhY3QubmFtZSB8fCAoaW1wYWN0LmN5Y2xlID8gdGhpcy5jeWNsZUxhYmVsKGltcGFjdC5jeWNsZSkgOiBpbXBhY3RbJ0BpZCddKSB8fCAoaW1wYWN0IGFzIGFueSkuaWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3ljbGVMYWJlbCh7ICdAaWQnOiBpZCwgbmFtZSB9OiBhbnkpIHtcbiAgICByZXR1cm4gbmFtZSB8fCB0aGlzLmN5Y2xlcygpLmZpbmQodiA9PiB2WydAaWQnXSA9PT0gaWQpPy5uYW1lO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEluZGV4KHsgdGFyZ2V0OiB7IHZhbHVlIH0gfSkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleC5zZXQoK3ZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93RG93bmxvYWQoKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE5vZGVDc3ZFeHBvcnRDb25maXJtQ29tcG9uZW50KTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBpbnN0YW5jZS5jb21wb25lbnRJbnN0YW5jZSBhcyBOb2RlQ3N2RXhwb3J0Q29uZmlybUNvbXBvbmVudDtcbiAgICBjb21wb25lbnQubm9kZXMuc2V0KHRoaXMuaW1wYWN0QXNzZXNzbWVudHMoKSk7XG4gICAgY29tcG9uZW50LmZpbGVuYW1lLnNldCh0aGlzLmNzdkZpbGVuYW1lKCkpO1xuICAgIGNvbXBvbmVudC5pc1VwbG9hZC5zZXQoZmFsc2UpO1xuICAgIGNvbXBvbmVudC5oZWFkZXJLZXlzLnNldCh0aGlzLmhlYWRlcktleXMoKSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLXZhcmlhYmxlIGlzLWFsaWduLWl0ZW1zLWNlbnRlciBpcy0yIGlzLW0tMFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgQGlmIChoYXNEYXRhKCkgJiYgc2VsZWN0ZWRWaWV3KCkgPT09IFZpZXcudGFibGUpIHtcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtZ2hvc3RcIiAoY2xpY2spPVwic2hvd0Rvd25sb2FkKClcIj5cbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFEb3dubG9hZFwiIHNpemU9XCJsZ1wiPjwvZmEtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgPC9kaXY+XG4gIEBpZiAoc2VsZWN0ZWRWaWV3KCkgPT09IFZpZXcudGFibGUpIHtcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvd1wiPlxuICAgICAgPGhlLXNlYXJjaC1leHRlbmRcbiAgICAgICAgY2xhc3M9XCJpcy1zZWNvbmRhcnkgaXMtc21hbGxcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciB0ZXJtcyBieSBuYW1lXCJcbiAgICAgICAgKHNlYXJjaCk9XCJmaWx0ZXJUZXJtLnNldCgkZXZlbnQpXCI+PC9oZS1zZWFyY2gtZXh0ZW5kPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAoaGFzRGF0YSgpICYmIHZpZXdzKCk/Lmxlbmd0aCA+IDEpIHtcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnNcIj5cbiAgICAgICAgQGZvciAodmlldyBvZiB2aWV3cygpOyB0cmFjayB2aWV3KSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIlxuICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRWaWV3KCkgPT09IHZpZXdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRWaWV3LnNldCh2aWV3KVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJ2aWV3SWNvblt2aWV3XVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWhpZGRlbi1tb2JpbGVcIj57eyB2aWV3IH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuQGlmIChpc05vZGVLZXlBbGxvd2VkKCkpIHtcbiAgQHN3aXRjaCAoc2VsZWN0ZWRWaWV3KCkpIHtcbiAgICBAY2FzZSAoVmlldy50YWJsZSkge1xuICAgICAgPGRpdiBjbGFzcz1cImlzLXB4LTMgaXMtcGItM1wiPlxuICAgICAgICBAaWYgKGhhc0RhdGEoKSkge1xuICAgICAgICAgIDxoZS1kYXRhLXRhYmxlIGNsYXNzPVwibWItMSBpcy1zbWFsbFwiIFtzbWFsbF09XCJ0cnVlXCIgbWF4SGVpZ2h0PVwiMzIwXCI+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1mdWxsd2lkdGggaXMtbmFycm93IGlzLXN0cmlwZWRcIj5cbiAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgIEBpZiAoZGF0YUtleXMoKS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJoYXMtdGV4dC13ZWlnaHQtYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvXCI+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChkYXRhS2V5IG9mIGRhdGFLZXlzKCk7IHRyYWNrIGRhdGFLZXk7IGxldCBkYXRhS2V5TGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChkYXRhKClbZGF0YUtleV0/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIFthdHRyLmNvbHNwYW5dPVwiZGF0YSgpW2RhdGFLZXldLmxlbmd0aFwiIFtjbGFzcy5oYXMtYm9yZGVyLXJpZ2h0XT1cIiFkYXRhS2V5TGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGRhdGFLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBkYXRhS2V5IHwga2V5VG9MYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImhhcy10ZXh0LXdlaWdodC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0IGlzLXB5LTBcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChlbmFibGVGaWx0ZXJNZXRob2RNb2RlbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdCBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cInVwZGF0ZVNlbGVjdGVkTWV0aG9kTW9kZWwoJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJ1bmRlZmluZWRcIj5GaWx0ZXIgTW9kZWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAodGVybSBvZiBtZXRob2RNb2RlbHMoKTsgdHJhY2sgdGVybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwidGVybVwiPnt7IHRlcm0ubmFtZSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIj48L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiPjwvdGg+XG4gICAgICAgICAgICAgICAgICBAZm9yIChkYXRhS2V5IG9mIGRhdGFLZXlzKCk7IHRyYWNrIGRhdGFLZXk7IGxldCBkYXRhS2V5TGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKG5vZGUgb2YgZGF0YSgpW2RhdGFLZXldOyB0cmFjayBub2RlLnZhbHVlLnRlcm0ubmFtZTsgbGV0IG5vZGVMYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIm5vZGUudmFsdWUudGVybS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5oYXMtYm9yZGVyLXJpZ2h0XT1cImRhdGFLZXlzKCkubGVuZ3RoID4gMSAmJiAhZGF0YUtleUxhc3QgJiYgbm9kZUxhc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwibm9kZS52YWx1ZS50ZXJtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudmFsdWUudGVybS5uYW1lIHwgZWxsaXBzaXM6IDMwIHwgY29tcG91bmQ6IG5vZGUudmFsdWUudGVybS50ZXJtVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImlzLWl0YWxpYyBoYXMtdGV4dC13ZWlnaHQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiPjwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cInNjaGVtYUJhc2VVcmwgKyAnL0ltcGFjdEFzc2Vzc21lbnQjZnVuY3Rpb25hbFVuaXQnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+RnVuY3Rpb25hbCB1bml0PC9hPlxuICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwic2NoZW1hQmFzZVVybCArICcvSW1wYWN0QXNzZXNzbWVudCNwcm9kdWN0J1wiIHRhcmdldD1cIl9ibGFua1wiPlByb2R1Y3Q8L2E+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgQGZvciAoZGF0YUtleSBvZiBkYXRhS2V5cygpOyB0cmFjayBkYXRhS2V5OyBsZXQgZGF0YUtleUxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICBAZm9yIChub2RlIG9mIGRhdGEoKVtkYXRhS2V5XTsgdHJhY2sgbm9kZS52YWx1ZS50ZXJtLm5hbWU7IGxldCBub2RlTGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJub2RlLnZhbHVlLnRlcm0udW5pdHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmhhcy1ib3JkZXItcmlnaHRdPVwiZGF0YUtleXMoKS5sZW5ndGggPiAxICYmICFkYXRhS2V5TGFzdCAmJiBub2RlTGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySHRtbF09XCJub2RlLnZhbHVlLnRlcm0udW5pdHMgfCBjb21wb3VuZDogbm9kZS52YWx1ZS50ZXJtLnRlcm1UeXBlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlLXRlcm1zLXVuaXRzLWRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLW1sLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVybV09XCJub2RlLnZhbHVlLnRlcm1cIj48L2hlLXRlcm1zLXVuaXRzLWRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICBpbXBhY3RBc3Nlc3NtZW50IG9mIGltcGFjdEFzc2Vzc21lbnRzKCk7XG4gICAgICAgICAgICAgICAgICB0cmFjayB0cmFja0J5SWQoaW1wYWN0SW5kZXgsIGltcGFjdEFzc2Vzc21lbnQpO1xuICAgICAgICAgICAgICAgICAgbGV0IGltcGFjdEluZGV4ID0gJGluZGV4XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiIFthdHRyLnRpdGxlXT1cImltcGFjdE5hbWUoaW1wYWN0QXNzZXNzbWVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cImltcGFjdEFzc2Vzc21lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGltcGFjdEluZGV4ICsgMSB9fS4ge3sgaW1wYWN0TmFtZShpbXBhY3RBc3Nlc3NtZW50KSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiIFthdHRyLnRpdGxlXT1cImltcGFjdEFzc2Vzc21lbnQucHJvZHVjdD8udGVybT8udW5pdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4xIHt7IGltcGFjdEFzc2Vzc21lbnQucHJvZHVjdD8udGVybT8udW5pdHMgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIiBbYXR0ci50aXRsZV09XCJpbXBhY3RBc3Nlc3NtZW50LnByb2R1Y3Q/LnRlcm0/Lm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGltcGFjdEFzc2Vzc21lbnQucHJvZHVjdD8udGVybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayBbbm9kZV09XCJpbXBhY3RBc3Nlc3NtZW50LnByb2R1Y3QudGVybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpbXBhY3RBc3Nlc3NtZW50LnByb2R1Y3QudGVybS5uYW1lIHwgZWxsaXBzaXM6IDMwIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChkYXRhS2V5IG9mIGRhdGFLZXlzKCk7IHRyYWNrIGRhdGFLZXk7IGxldCBkYXRhS2V5TGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgQGZvciAobm9kZSBvZiBkYXRhKClbZGF0YUtleV07IHRyYWNrIG5vZGUudmFsdWUudGVybS5uYW1lOyBsZXQgbm9kZUxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXMtbm93cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmhhcy1ib3JkZXItcmlnaHRdPVwiZGF0YUtleXMoKS5sZW5ndGggPiAxICYmICFkYXRhS2V5TGFzdCAmJiBub2RlTGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG5vZGUudmFsdWUudmFsdWVzW2ltcGFjdEFzc2Vzc21lbnRbJ0BpZCddXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRyaWdnZXItcG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiUG9wb3Zlcl09XCJkZXRhaWxzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9DbG9zZT1cIm91dHNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3ZlckNsYXNzPVwiaXMtbmFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3ZlckNvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBub2RlLnZhbHVlLnZhbHVlc1tpbXBhY3RBc3Nlc3NtZW50WydAaWQnXV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGFjdEFzc2Vzc21lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHBvaW50ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudmFsdWUudmFsdWVzW2ltcGFjdEFzc2Vzc21lbnRbJ0BpZCddXS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudmFsdWUudGVybVsnQGlkJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHByZWNpc2lvbjogM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZWZhdWx0OiAnLSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJub2RlLnZhbHVlLnZhbHVlc1tpbXBhY3RBc3Nlc3NtZW50WydAaWQnXV0ubm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cImltcGFjdEFzc2Vzc21lbnQuYWdncmVnYXRlZCA/ICdhZ2dyZWdhdGVkJyA6IHVuZGVmaW5lZFwiPjwvaGUtYmxhbmstbm9kZS1zdGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPi08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9oZS1kYXRhLXRhYmxlPlxuICAgICAgICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZSBbZGF0YVN0YXRlXT1cImRhdGFTdGF0ZSgpXCI+PC9oZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZT5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlzLXB0LTMgaGFzLXRleHQtY2VudGVyZWRcIj5cbiAgICAgICAgICAgIDxzcGFuPk5vIGRhdGEgYXZhaWxhYmxlPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1wbC0xXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhZmlsdGVyVGVybSgpXCI+bWF0Y2hpbmcgeW91ciBzZWFyY2ggY3JpdGVyaWE8L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj4uPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzLmlzLWhpZGRlbl09XCIhaXNPcmlnaW5hbCgpXCI+XG4gICAgICAgICAgICAgIFN3aXRjaCB0b1xuICAgICAgICAgICAgICA8Y29kZT5yZWNhbGN1bGF0ZWQ8L2NvZGU+XG4gICAgICAgICAgICAgIHZlcnNpb24uXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAY2FzZSAoVmlldy5jaGFydCkge1xuICAgICAgPGhlLWltcGFjdC1hc3Nlc3NtZW50cy1pbmRpY2F0b3JzLWNoYXJ0XG4gICAgICAgIFtrZXldPVwibm9kZUtleSgpXCJcbiAgICAgICAgW2ZpbHRlclRlcm1UeXBlc109XCJmaWx0ZXJUZXJtVHlwZXMoKVwiPjwvaGUtaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvcnMtY2hhcnQ+XG4gICAgfVxuICAgIEBjYXNlIChWaWV3LmJyZWFrZG93bikge1xuICAgICAgPGhlLWltcGFjdC1hc3Nlc3NtZW50cy1pbmRpY2F0b3ItYnJlYWtkb3duLWNoYXJ0XG4gICAgICAgIFtpbXBhY3RBc3Nlc3NtZW50XT1cInNlbGVjdGVkTm9kZSgpXCJcbiAgICAgICAgW2luZGljYXRvcnNdPVwic2VsZWN0ZWRSZWNhbGN1bGF0ZWRWYWx1ZXMoKVwiPjwvaGUtaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvci1icmVha2Rvd24tY2hhcnQ+XG4gICAgfVxuICAgIEBjYXNlIChWaWV3LmxvZ3MpIHtcbiAgICAgIEBpZiAoaW1wYWN0QXNzZXNzbWVudHMoKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zIHB0LTIgcHgtM1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1zdGF0aWMgaXMtc2Vjb25kYXJ5XCI+U2VsZWN0IGFuIEltcGFjdCBBc3Nlc3NtZW50PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sIGlzLWV4cGFuZGVkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsIGlzLWZ1bGx3aWR0aCBpcy1zZWNvbmRhcnlcIj5cbiAgICAgICAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cInNlbGVjdEluZGV4KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICBAZm9yICh2YWx1ZSBvZiBpbXBhY3RBc3Nlc3NtZW50cygpOyB0cmFjayB2YWx1ZTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImlcIj57eyBpICsgMSB9fS4ge3sgaW1wYWN0TmFtZSh2YWx1ZSkgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChzZWxlY3RlZE5vZGUoKSkge1xuICAgICAgICA8aGUtbm9kZS1sb2dzLW1vZGVsc1xuICAgICAgICAgIFtub2RlXT1cInNlbGVjdGVkTm9kZSgpXCJcbiAgICAgICAgICBbbm9kZUtleV09XCJub2RlS2V5KClcIlxuICAgICAgICAgIFtmaWx0ZXJUZXJtVHlwZXNdPVwiZmlsdGVyVGVybVR5cGVzKClcIlxuICAgICAgICAgIFtvcmlnaW5hbFZhbHVlc109XCJzZWxlY3RlZE9yaWdpbmFsVmFsdWVzKClcIlxuICAgICAgICAgIFtyZWNhbGN1bGF0ZWRWYWx1ZXNdPVwic2VsZWN0ZWRSZWNhbGN1bGF0ZWRWYWx1ZXMoKVwiXG4gICAgICAgICAgW25vRGF0YU1lc3NhZ2VdPVwibm9EYXRhTWVzc2FnZSgpXCI+PC9oZS1ub2RlLWxvZ3MtbW9kZWxzPlxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG48bmctdGVtcGxhdGUgI2RldGFpbHMgbGV0LW5vZGU9XCJpbXBhY3RBc3Nlc3NtZW50XCIgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxwPlxuICAgIDxiPlxuICAgICAgQGlmIChkYXRhLmN5Y2xlKSB7XG4gICAgICAgIDxzcGFuPnt7IGN5Y2xlTGFiZWwobm9kZS5jeWNsZSkgfX08L3NwYW4+XG4gICAgICB9XG4gICAgICBAaWYgKCFkYXRhLmN5Y2xlKSB7XG4gICAgICAgIDxzcGFuPnt7IGRhdGEubmFtZSB9fTwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L2I+XG4gIDwvcD5cbiAgPGhlLW5vZGUtdmFsdWUtZGV0YWlsc1xuICAgIFtkYXRhXT1cImRhdGFcIlxuICAgIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlKClcIlxuICAgIFtub2RlVHlwZV09XCJub2RlWydAdHlwZSddXCJcbiAgICBbZGF0YUtleV09XCJub2RlS2V5KClcIj48L2hlLW5vZGUtdmFsdWUtZGV0YWlscz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbXBhY3QtYXNzZXNzbWVudHMvaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvaW1wYWN0LWFzc2Vzc21lbnRzL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFJTCxZQUFZLEVBRVosUUFBUSxFQUNSLGFBQWEsRUFHZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUFrQixZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxP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QUM5QixTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDOytHQTNMVSxrQ0FBa0M7bUdBQWxDLGtDQUFrQyw0cUJDbEgvQyxxdFdBNFBBLGdYRDlKSSxlQUFlLDRNQUNmLHFCQUFxQix3SkFDckIsa0JBQWtCLHNHQUNsQixXQUFXLDRPQUNYLGlCQUFpQiw0R0FDakIsOEJBQThCLHlHQUM5QixVQUFVLDJVQUNWLHVCQUF1QixtSkFDdkIsNkJBQTZCLDZHQUM3Qix5Q0FBeUMsdUhBQ3pDLGlEQUFpRCx3SUFDakQsdUJBQXVCLHFOQUN2Qix5QkFBeUIsbUhBQ3pCLFlBQVksNENBQ1osV0FBVywyQ0FDWCxZQUFZLDRDQUNaLGFBQWEsNkNBQ2IsY0FBYzs7NEZBR0wsa0NBQWtDO2tCQTVCOUMsU0FBUzsrQkFDRSxnQ0FBZ0MsbUJBR3pCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFVBQVU7d0JBQ1YsZUFBZTt3QkFDZixxQkFBcUI7d0JBQ3JCLGtCQUFrQjt3QkFDbEIsV0FBVzt3QkFDWCxpQkFBaUI7d0JBQ2pCLDhCQUE4Qjt3QkFDOUIsVUFBVTt3QkFDVix1QkFBdUI7d0JBQ3ZCLDZCQUE2Qjt3QkFDN0IseUNBQXlDO3dCQUN6QyxpREFBaUQ7d0JBQ2pELHVCQUF1Qjt3QkFDdkIseUJBQXlCO3dCQUN6QixZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGNBQWM7cUJBQ2YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRGF0YVN0YXRlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBJQ3ljbGVKU09OTEQsXG4gIElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELFxuICBJbmRpY2F0b3IsXG4gIFRlcm1UZXJtVHlwZSxcbiAgVGVybSxcbiAgTm9kZVR5cGUsXG4gIEJsYW5rTm9kZXNLZXksXG4gIEluZGljYXRvck1ldGhvZFRpZXIsXG4gIElUZXJtSlNPTkxEXG59IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IHByb3BlcnR5VmFsdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzL2Rpc3QvdGVybSc7XG5pbXBvcnQgeyBGYUljb25Db21wb25lbnQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XG5pbXBvcnQgeyBOZ2JUb29sdGlwLCBOZ2JQb3BvdmVyLCBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IEljb25EZWZpbml0aW9uLCBmYUNhbGN1bGF0b3IsIGZhQ2hhcnRCYXIsIGZhRG93bmxvYWQsIGZhTGlzdCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC5vcmRlcmJ5JztcbmltcG9ydCB1bmlxQnkgZnJvbSAnbG9kYXNoLnVuaXFieSc7XG5cbmltcG9ydCB7XG4gIGdyb3VwTm9kZXNCeVRlcm0sXG4gIElHcm91cGVkS2V5cyxcbiAgZ3JvdXBwZWRLZXlzLFxuICBpc01ldGhvZE1vZGVsQWxsb3dlZCxcbiAgbWV0aG9kVGllck9yZGVyXG59IGZyb20gJy4uLy4uL2NvbW1vbi9ub2RlLXV0aWxzJztcbmltcG9ydCB7IHNjaGVtYUJhc2VVcmwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgUHJlY2lzaW9uUGlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9wcmVjaXNpb24ucGlwZSc7XG5pbXBvcnQgeyBFbGxpcHNpc1BpcGUgfSBmcm9tICcuLi8uLi9jb21tb24vZWxsaXBzaXMucGlwZSc7XG5pbXBvcnQgeyBEZWZhdWx0UGlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9kZWZhdWx0LnBpcGUnO1xuaW1wb3J0IHsgQ29tcG91bmRQaXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2NvbXBvdW5kLnBpcGUnO1xuaW1wb3J0IHsgS2V5VG9MYWJlbFBpcGUgfSBmcm9tICcuLi8uLi9jb21tb24va2V5LXRvLWxhYmVsLnBpcGUnO1xuaW1wb3J0IHsgQmxhbmtOb2RlU3RhdGVOb3RpY2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UvYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGFUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbW1vbi9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEJsYW5rTm9kZVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2JsYW5rLW5vZGUtc3RhdGUvYmxhbmstbm9kZS1zdGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoRXh0ZW5kQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL3NlYXJjaC1leHRlbmQvc2VhcmNoLWV4dGVuZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSGVOb2RlU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbm9kZS9ub2RlLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZVZhbHVlRGV0YWlsc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS12YWx1ZS1kZXRhaWxzL25vZGUtdmFsdWUtZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZUNzdkV4cG9ydENvbmZpcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9ub2RlL25vZGUtY3N2LWV4cG9ydC1jb25maXJtL25vZGUtY3N2LWV4cG9ydC1jb25maXJtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlTG9nc01vZGVsc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1sb2dzLW1vZGVscy9ub2RlLWxvZ3MtbW9kZWxzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbXBhY3RBc3Nlc3NtZW50c0luZGljYXRvckJyZWFrZG93bkNoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvci1icmVha2Rvd24tY2hhcnQvaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvci1icmVha2Rvd24tY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IEltcGFjdEFzc2Vzc21lbnRzSW5kaWNhdG9yc0NoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvcnMtY2hhcnQvaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvcnMtY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IFRlcm1zVW5pdHNEZXNjcmlwdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Rlcm1zL3Rlcm1zLXVuaXRzLWRlc2NyaXB0aW9uL3Rlcm1zLXVuaXRzLWRlc2NyaXB0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlTGlua0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1saW5rL25vZGUtbGluay5jb21wb25lbnQnO1xuXG5lbnVtIFZpZXcge1xuICB0YWJsZSA9ICdUYWJsZSB2aWV3JyxcbiAgY2hhcnQgPSAnQ2hhcnQgdmlldycsXG4gIGJyZWFrZG93biA9ICdCcmVha2Rvd24gdmlldycsXG4gIGxvZ3MgPSAnUmVjYWxjdWxhdGlvbnMgbG9ncydcbn1cblxuY29uc3Qgdmlld0ljb246IHtcbiAgW3ZpZXcgaW4gVmlld106IEljb25EZWZpbml0aW9uO1xufSA9IHtcbiAgW1ZpZXcuYnJlYWtkb3duXTogZmFDaGFydEJhcixcbiAgW1ZpZXcuY2hhcnRdOiBmYUNoYXJ0QmFyLFxuICBbVmlldy5sb2dzXTogZmFDYWxjdWxhdG9yLFxuICBbVmlldy50YWJsZV06IGZhTGlzdFxufTtcblxuY29uc3Qgbm9kZUtleVZpZXdzOiB7XG4gIFt0eXBlIGluIEJsYW5rTm9kZXNLZXldPzogVmlld1tdO1xufSA9IHtcbiAgW0JsYW5rTm9kZXNLZXkuZW1pc3Npb25zUmVzb3VyY2VVc2VdOiBbVmlldy50YWJsZSwgVmlldy5jaGFydCwgVmlldy5sb2dzXSxcbiAgW0JsYW5rTm9kZXNLZXkuaW1wYWN0c106IFtWaWV3LnRhYmxlLCBWaWV3LmJyZWFrZG93biwgVmlldy5jaGFydCwgVmlldy5sb2dzXSxcbiAgW0JsYW5rTm9kZXNLZXkuZW5kcG9pbnRzXTogW1ZpZXcudGFibGUsIFZpZXcuYnJlYWtkb3duLCBWaWV3LmNoYXJ0LCBWaWV3LmxvZ3NdXG59O1xuXG50eXBlIGdyb3VwZWRFbWlzc2lvbnMgPSB7XG4gIFttZXRob2RUaWVyIGluIEluZGljYXRvck1ldGhvZFRpZXJdOiBJR3JvdXBlZEtleXM8SW5kaWNhdG9yPltdO1xufTtcblxuY29uc3QgdGVybUFsbG93ZWQgPSAodGVybT86IFRlcm0gfCBJVGVybUpTT05MRCwgZmlsdGVyVGVybVR5cGVzOiBUZXJtVGVybVR5cGVbXSA9IFtdKSA9PlxuICAhZmlsdGVyVGVybVR5cGVzPy5sZW5ndGggfHwgKGZpbHRlclRlcm1UeXBlcyB8fCBbXSkuaW5jbHVkZXModGVybT8udGVybVR5cGUpO1xuXG5jb25zdCBmaWx0ZXJOb2RlID0gKGZpbHRlckJ5TWV0aG9kTW9kZWw6IGJvb2xlYW4sIGZpbHRlck1ldGhvZE1vZGVsPzogVGVybSwgZmlsdGVyVGVybT86IHN0cmluZykgPT4gKG5vZGU6IEluZGljYXRvcikgPT5cbiAgW1xuICAgICFmaWx0ZXJCeU1ldGhvZE1vZGVsIHx8IGlzTWV0aG9kTW9kZWxBbGxvd2VkKGZpbHRlck1ldGhvZE1vZGVsKShub2RlKSxcbiAgICAhZmlsdGVyVGVybSB8fCBub2RlPy50ZXJtPy5uYW1lPy50b0xvd2VyQ2FzZSgpPy5pbmNsdWRlcyhmaWx0ZXJUZXJtLnRvTG93ZXJDYXNlKCkpXG4gIF0uZXZlcnkoQm9vbGVhbik7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLWltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ2JUb29sdGlwLFxuICAgIEZhSWNvbkNvbXBvbmVudCxcbiAgICBTZWFyY2hFeHRlbmRDb21wb25lbnQsXG4gICAgRGF0YVRhYmxlQ29tcG9uZW50LFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5vZGVMaW5rQ29tcG9uZW50LFxuICAgIFRlcm1zVW5pdHNEZXNjcmlwdGlvbkNvbXBvbmVudCxcbiAgICBOZ2JQb3BvdmVyLFxuICAgIEJsYW5rTm9kZVN0YXRlQ29tcG9uZW50LFxuICAgIEJsYW5rTm9kZVN0YXRlTm90aWNlQ29tcG9uZW50LFxuICAgIEltcGFjdEFzc2Vzc21lbnRzSW5kaWNhdG9yc0NoYXJ0Q29tcG9uZW50LFxuICAgIEltcGFjdEFzc2Vzc21lbnRzSW5kaWNhdG9yQnJlYWtkb3duQ2hhcnRDb21wb25lbnQsXG4gICAgTm9kZUxvZ3NNb2RlbHNDb21wb25lbnQsXG4gICAgTm9kZVZhbHVlRGV0YWlsc0NvbXBvbmVudCxcbiAgICBDb21wb3VuZFBpcGUsXG4gICAgRGVmYXVsdFBpcGUsXG4gICAgRWxsaXBzaXNQaXBlLFxuICAgIFByZWNpc2lvblBpcGUsXG4gICAgS2V5VG9MYWJlbFBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBJbXBhY3RBc3Nlc3NtZW50c1Byb2R1Y3RzQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBtb2RhbFNlcnZpY2UgPSBpbmplY3QoTmdiTW9kYWwpO1xuICBwcml2YXRlIHJlYWRvbmx5IG5vZGVTdG9yZVNlcnZpY2UgPSBpbmplY3QoSGVOb2RlU3RvcmVTZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFEb3dubG9hZCA9IGZhRG93bmxvYWQ7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGFTdGF0ZSA9IGlucHV0KERhdGFTdGF0ZS5vcmlnaW5hbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBub2RlS2V5ID0gaW5wdXQoQmxhbmtOb2Rlc0tleS5pbXBhY3RzKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbHRlclRlcm1UeXBlcyA9IGlucHV0KFtdIGFzIFRlcm1UZXJtVHlwZVtdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVuYWJsZUZpbHRlck1ldGhvZE1vZGVsID0gaW5wdXQoZmFsc2UpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNjaGVtYUJhc2VVcmwgPSBzY2hlbWFCYXNlVXJsKCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhlYWRlcktleXMgPSBjb21wdXRlZCgoKSA9PiBbXG4gICAgJ2ltcGFjdEFzc2Vzc21lbnQuaWQnLFxuICAgICdpbXBhY3RBc3Nlc3NtZW50LkBpZCcsXG4gICAgYGltcGFjdEFzc2Vzc21lbnQuJHt0aGlzLm5vZGVLZXkoKX0uYFxuICBdKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgVmlldyA9IFZpZXc7XG4gIHByb3RlY3RlZCByZWFkb25seSB2aWV3SWNvbiA9IHZpZXdJY29uO1xuICBwcml2YXRlIHJlYWRvbmx5IHNob3dWaWV3ID0gY29tcHV0ZWQoXG4gICAgKCkgPT5cbiAgICAgICh7XG4gICAgICAgIFtWaWV3LmJyZWFrZG93bl06ICF0aGlzLmlzT3JpZ2luYWwoKSAmJiB0aGlzLmltcGFjdEFzc2Vzc21lbnRzKCkubGVuZ3RoID09PSAxLFxuICAgICAgICBbVmlldy5jaGFydF06IHRoaXMuaW1wYWN0QXNzZXNzbWVudHMoKS5sZW5ndGggPiAxLFxuICAgICAgICBbVmlldy5sb2dzXTogIXRoaXMuaXNPcmlnaW5hbCgpLFxuICAgICAgICBbVmlldy50YWJsZV06IHRydWVcbiAgICAgIH0pIGFzIHsgW3ZpZXcgaW4gVmlld106IGJvb2xlYW4gfVxuICApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmlld3MgPSBjb21wdXRlZCgoKSA9PiBub2RlS2V5Vmlld3NbdGhpcy5ub2RlS2V5KCldPy5maWx0ZXIodmlldyA9PiB0aGlzLnNob3dWaWV3KClbdmlld10pID8/IFtdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkVmlldyA9IHNpZ25hbChWaWV3LnRhYmxlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGN5Y2xlcyA9IHRvU2lnbmFsKFxuICAgIHRoaXMubm9kZVN0b3JlU2VydmljZS5maW5kQnlTdGF0ZSQ8SUN5Y2xlSlNPTkxEPihOb2RlVHlwZS5DeWNsZSwgRGF0YVN0YXRlLm9yaWdpbmFsKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgb3JpZ2luYWxJbXBhY3RBc3Nlc3NtZW50cyA9IHRvU2lnbmFsKFxuICAgIHRoaXMubm9kZVN0b3JlU2VydmljZS5maW5kQnlTdGF0ZSQ8SUltcGFjdEFzc2Vzc21lbnRKU09OTEQ+KE5vZGVUeXBlLkltcGFjdEFzc2Vzc21lbnQsIERhdGFTdGF0ZS5vcmlnaW5hbClcbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWxsSW1wYWN0QXNzZXNzbWVudHMgPSB0b1NpZ25hbChcbiAgICB0aGlzLm5vZGVTdG9yZVNlcnZpY2UuZmluZCQ8SUltcGFjdEFzc2Vzc21lbnRKU09OTEQ+KE5vZGVUeXBlLkltcGFjdEFzc2Vzc21lbnQpXG4gICk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpbXBhY3RBc3Nlc3NtZW50cyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuX2FsbEltcGFjdEFzc2Vzc21lbnRzKCk/Lm1hcChkYXRhID0+IGRhdGFbdGhpcy5kYXRhU3RhdGUoKV0pIHx8IFtdXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZEluZGV4ID0gc2lnbmFsKDApO1xuICBwcml2YXRlIHJlYWRvbmx5IG9naXJpbmFsU2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5vcmlnaW5hbEltcGFjdEFzc2Vzc21lbnRzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV1cbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZEltcGFjdEFzc2Vzc21lbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmltcGFjdEFzc2Vzc21lbnRzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRPcmlnaW5hbFZhbHVlcyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMub2dpcmluYWxTZWxlY3RlZEltcGFjdEFzc2Vzc21lbnQoKT8uW3RoaXMubm9kZUtleSgpXSB8fCBbXVxuICApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRSZWNhbGN1bGF0ZWRWYWx1ZXMgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudCgpPy5bdGhpcy5ub2RlS2V5KCldIHx8IFtdXG4gICk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZE5vZGUgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuc2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50KClcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50KCksXG4gICAgICAgICAgZGF0YVN0YXRlOiBEYXRhU3RhdGUucmVjYWxjdWxhdGVkXG4gICAgICAgIH1cbiAgICAgIDogbnVsbFxuICApO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBpc09yaWdpbmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kYXRhU3RhdGUoKSA9PT0gRGF0YVN0YXRlLm9yaWdpbmFsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcmlnaW5hbFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmlzT3JpZ2luYWwoKSA/IG51bGwgOiB0aGlzLm9yaWdpbmFsSW1wYWN0QXNzZXNzbWVudHMoKSkgfHwgW10pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBpc05vZGVLZXlBbGxvd2VkID0gY29tcHV0ZWQoKCkgPT4gbm9kZUtleVZpZXdzW3RoaXMubm9kZUtleSgpXS5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkVmlldygpKSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzaG91bGRGaWx0ZXJCeU1ldGhvZE1vZGVsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5lbmFibGVGaWx0ZXJNZXRob2RNb2RlbCgpICYmICF0aGlzLmlzT3JpZ2luYWwoKSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJUZXJtID0gc2lnbmFsKCcnKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY3N2RmlsZW5hbWUgPSBjb21wdXRlZCgoKSA9PiBgJHt0aGlzLm5vZGVLZXkoKX0uY3N2YCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzRW1pc3Npb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmZpbHRlclRlcm1UeXBlcygpLmluY2x1ZGVzKFRlcm1UZXJtVHlwZS5lbWlzc2lvbikpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRhID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmlzRW1pc3Npb24oKSA/IHRoaXMuZ3JvdXBFbWlzc2lvbnMoKSA6IHsgW3RoaXMubm9kZUtleSgpXTogdGhpcy5ncm91cEluZGljYXRvcnMoKSB9XG4gICk7XG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRhS2V5cyA9IGNvbXB1dGVkKCgpID0+IE9iamVjdC5rZXlzKHRoaXMuZGF0YSgpKSk7XG5cbiAgLy8gYXMgd2UgZmlsdGVyIGJ5IG1ldGhvZE1vZGVsLCB3ZSBtaWdodCBoYXZlIGFuIGVtcHR5IHRhYmxlIGZvciB0aGUgZGVmYXVsdCBtb2RlbHMgYnV0IG5vdCBmb3Igb3RoZXIgbW9kZWxzXG4gIHByb3RlY3RlZCByZWFkb25seSBoYXNEYXRhID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmVuYWJsZUZpbHRlck1ldGhvZE1vZGVsKCkgPyB0aGlzLm1ldGhvZE1vZGVscygpLmxlbmd0aCA6IE9iamVjdC52YWx1ZXModGhpcy5kYXRhKCkpLmZsYXQoKS5sZW5ndGggPiAwXG4gICk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5vRGF0YU1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMubm9kZUtleSgpID09PSBCbGFua05vZGVzS2V5LmVtaXNzaW9uc1Jlc291cmNlVXNlXG4gICAgICA/ICdXZSBjYW5ub3QgY2FsY3VsYXRlIHRoZXNlIGRhdGEsIG1vc3QgbGlrZWx5IGJlY2F1c2Ugd2UgYXJlIG1pc3NpbmcgdGhlIHF1YW50aXR5IHByb2R1Y2VkIG9yIGJlY2F1c2Ugd2UgYXJlIG1pc3NpbmcgZGF0YSB0byBhbGxvY2F0ZSBlbnZpcm9ubWVudGFsIGltcGFjdCBkYXRhIGJldHdlZW4gY28tcHJvZHVjdHMuJ1xuICAgICAgOiB1bmRlZmluZWRcbiAgKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWV0aG9kTW9kZWxzID0gY29tcHV0ZWQoKCkgPT5cbiAgICB1bmlxQnkoXG4gICAgICB0aGlzLmltcGFjdEFzc2Vzc21lbnRzKClcbiAgICAgICAgLmZsYXRNYXAoaW1wYWN0ID0+IChpbXBhY3RbdGhpcy5ub2RlS2V5KCldIHx8IFtdKS5tYXAodiA9PiB2Lm1ldGhvZE1vZGVsKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBUZXJtW10sXG4gICAgICAnQGlkJ1xuICAgICkuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RlZE1ldGhvZE1vZGVsID0gc2lnbmFsKHVuZGVmaW5lZCBhcyBUZXJtKTtcblxuICBwcm90ZWN0ZWQgZ3JvdXBJbmRpY2F0b3JzKCkge1xuICAgIC8vIFRPRE86IHdoZW4gdGhlcmUgYXJlIG5vIGluZGljYXRvcnMgZm9yIHRoZSBkZWZhdWx0IG1vZGVsLCB0aGUgdGFibGUgYXBwZWFycyBlbXB0eVxuICAgIC8vIHNob3VsZCBkZWZhdWx0IGJhY2sgdG8gdGhlIGZpcnN0IG1vZGVsIGluIHRoaXMgY2FzZVxuICAgIGNvbnN0IGluZGljYXRvclBlckltcGFjdEFzc2Vzc21lbnQgPSBncm91cE5vZGVzQnlUZXJtPElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELCBJbmRpY2F0b3I+KFxuICAgICAgdGhpcy5pbXBhY3RBc3Nlc3NtZW50cygpLFxuICAgICAgdGhpcy5ub2RlS2V5KCksXG4gICAgICB0aGlzLm9yaWdpbmFsVmFsdWVzKCksXG4gICAgICBmaWx0ZXJOb2RlKHRoaXMuc2hvdWxkRmlsdGVyQnlNZXRob2RNb2RlbCgpLCB0aGlzLl9zZWxlY3RlZE1ldGhvZE1vZGVsKCksIHRoaXMuZmlsdGVyVGVybSgpKVxuICAgICk7XG4gICAgcmV0dXJuIG9yZGVyQnkoZ3JvdXBwZWRLZXlzKGluZGljYXRvclBlckltcGFjdEFzc2Vzc21lbnQpLCBbJ3ZhbHVlLm1ldGhvZFRpZXJPcmRlcicsICdrZXknXSwgWydhc2MnLCAnYXNjJ10pLmZpbHRlcihcbiAgICAgICh7IHZhbHVlIH0pID0+IHRlcm1BbGxvd2VkKHZhbHVlPy50ZXJtLCB0aGlzLmZpbHRlclRlcm1UeXBlcygpKVxuICAgICkgYXMgSUdyb3VwZWRLZXlzPEluZGljYXRvcj5bXTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JvdXBFbWlzc2lvbnMoKSB7XG4gICAgY29uc3QgZW1pc3Npb25zUGVySW1wYWN0QXNzZXNzbWVudCA9IGdyb3VwTm9kZXNCeVRlcm08SUltcGFjdEFzc2Vzc21lbnRKU09OTEQsIEluZGljYXRvcj4oXG4gICAgICB0aGlzLmltcGFjdEFzc2Vzc21lbnRzKCksXG4gICAgICB0aGlzLm5vZGVLZXkoKSxcbiAgICAgIHRoaXMub3JpZ2luYWxWYWx1ZXMoKSxcbiAgICAgIGZpbHRlck5vZGUodGhpcy5zaG91bGRGaWx0ZXJCeU1ldGhvZE1vZGVsKCksIHRoaXMuX3NlbGVjdGVkTWV0aG9kTW9kZWwoKSwgdGhpcy5maWx0ZXJUZXJtKCkpXG4gICAgKTtcbiAgICBjb25zdCB2YWx1ZXM6IElHcm91cGVkS2V5czxJbmRpY2F0b3I+W10gPSBvcmRlckJ5KGdyb3VwcGVkS2V5cyhlbWlzc2lvbnNQZXJJbXBhY3RBc3Nlc3NtZW50KSwgWydrZXknXSwgWydhc2MnXSk7XG4gICAgY29uc3QgbWV0aG9kVGllcnMgPSBvcmRlckJ5KFxuICAgICAgdW5pcXVlKHZhbHVlcy5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUubWV0aG9kVGllcikpLm1hcChtZXRob2RUaWVyID0+ICh7XG4gICAgICAgIG1ldGhvZFRpZXIsXG4gICAgICAgIG1ldGhvZFRpZXJPcmRlcjogbWV0aG9kVGllck9yZGVyKG1ldGhvZFRpZXIpXG4gICAgICB9KSksXG4gICAgICBbJ21ldGhvZFRpZXJPcmRlciddLFxuICAgICAgWydhc2MnXVxuICAgICk7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIG1ldGhvZFRpZXJzLm1hcCgoeyBtZXRob2RUaWVyIH0pID0+IFtcbiAgICAgICAgbWV0aG9kVGllciB8fCAnJyxcbiAgICAgICAgdmFsdWVzLmZpbHRlcihcbiAgICAgICAgICAoeyB2YWx1ZSB9KSA9PiB2YWx1ZS5tZXRob2RUaWVyID09PSBtZXRob2RUaWVyICYmIHRlcm1BbGxvd2VkKHZhbHVlPy50ZXJtLCB0aGlzLmZpbHRlclRlcm1UeXBlcygpKVxuICAgICAgICApXG4gICAgICBdKVxuICAgICkgYXMgZ3JvdXBlZEVtaXNzaW9ucztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIGxvZ3MgZG9lcyBub3QgcmVtYWluIGRpc3BsYXllZFxuICAgICAgICBpZiAoKHRoaXMuaXNPcmlnaW5hbCgpICYmIHRoaXMuc2VsZWN0ZWRWaWV3KCkgPT09IFZpZXcubG9ncykgfHwgIXRoaXMudmlld3MoKS5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkVmlldygpKSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3LnNldChWaWV3LnRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tCeUlkKF9pbmRleDogbnVtYmVyLCBpdGVtOiBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCkge1xuICAgIHJldHVybiBpdGVtWydAaWQnXTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVTZWxlY3RlZE1ldGhvZE1vZGVsKHRlcm1OYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZXJtID0gdGhpcy5tZXRob2RNb2RlbHMoKS5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gdGVybU5hbWUpO1xuICAgIHRoaXMuX3NlbGVjdGVkTWV0aG9kTW9kZWwuc2V0KHRlcm0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGltcGFjdE5hbWUoaW1wYWN0OiBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCkge1xuICAgIHJldHVybiBpbXBhY3QubmFtZSB8fCAoaW1wYWN0LmN5Y2xlID8gdGhpcy5jeWNsZUxhYmVsKGltcGFjdC5jeWNsZSkgOiBpbXBhY3RbJ0BpZCddKSB8fCAoaW1wYWN0IGFzIGFueSkuaWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3ljbGVMYWJlbCh7ICdAaWQnOiBpZCwgbmFtZSB9OiBhbnkpIHtcbiAgICByZXR1cm4gbmFtZSB8fCB0aGlzLmN5Y2xlcygpLmZpbmQodiA9PiB2WydAaWQnXSA9PT0gaWQpPy5uYW1lO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEluZGV4KHsgdGFyZ2V0OiB7IHZhbHVlIH0gfSkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleC5zZXQoK3ZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93RG93bmxvYWQoKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE5vZGVDc3ZFeHBvcnRDb25maXJtQ29tcG9uZW50KTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBpbnN0YW5jZS5jb21wb25lbnRJbnN0YW5jZSBhcyBOb2RlQ3N2RXhwb3J0Q29uZmlybUNvbXBvbmVudDtcbiAgICBjb21wb25lbnQubm9kZXMuc2V0KHRoaXMuaW1wYWN0QXNzZXNzbWVudHMoKSk7XG4gICAgY29tcG9uZW50LmZpbGVuYW1lLnNldCh0aGlzLmNzdkZpbGVuYW1lKCkpO1xuICAgIGNvbXBvbmVudC5pc1VwbG9hZC5zZXQoZmFsc2UpO1xuICAgIGNvbXBvbmVudC5oZWFkZXJLZXlzLnNldCh0aGlzLmhlYWRlcktleXMoKSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLXZhcmlhYmxlIGlzLWFsaWduLWl0ZW1zLWNlbnRlciBpcy0yIGlzLW0tMFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgQGlmIChoYXNEYXRhKCkgJiYgc2VsZWN0ZWRWaWV3KCkgPT09IFZpZXcudGFibGUpIHtcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtZ2hvc3RcIiAoY2xpY2spPVwic2hvd0Rvd25sb2FkKClcIj5cbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFEb3dubG9hZFwiIHNpemU9XCJsZ1wiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gIDwvZGl2PlxuICBAaWYgKHNlbGVjdGVkVmlldygpID09PSBWaWV3LnRhYmxlKSB7XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIj5cbiAgICAgIDxoZS1zZWFyY2gtZXh0ZW5kXG4gICAgICAgIGNsYXNzPVwiaXMtc2Vjb25kYXJ5IGlzLXNtYWxsXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgdGVybXMgYnkgbmFtZVwiXG4gICAgICAgIChzZWFyY2gpPVwiZmlsdGVyVGVybS5zZXQoJGV2ZW50KVwiPjwvaGUtc2VhcmNoLWV4dGVuZD5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKGhhc0RhdGEoKSAmJiB2aWV3cygpPy5sZW5ndGggPiAxKSB7XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zXCI+XG4gICAgICAgIEBmb3IgKHZpZXcgb2Ygdmlld3MoKTsgdHJhY2sgdmlldykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkVmlldygpID09PSB2aWV3XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVmlldy5zZXQodmlldylcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsXCI+XG4gICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwidmlld0ljb25bdmlld11cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaGlkZGVuLW1vYmlsZVwiPnt7IHZpZXcgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuXG5AaWYgKGlzTm9kZUtleUFsbG93ZWQoKSkge1xuICBAc3dpdGNoIChzZWxlY3RlZFZpZXcoKSkge1xuICAgIEBjYXNlIChWaWV3LnRhYmxlKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiaXMtcHgtMyBpcy1wYi0zXCI+XG4gICAgICAgIEBpZiAoaGFzRGF0YSgpKSB7XG4gICAgICAgICAgPGhlLWRhdGEtdGFibGUgY2xhc3M9XCJtYi0xIGlzLXNtYWxsXCIgW3NtYWxsXT1cInRydWVcIiBtYXhIZWlnaHQ9XCIzMjBcIj5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGlzLWZ1bGx3aWR0aCBpcy1uYXJyb3cgaXMtc3RyaXBlZFwiPlxuICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgQGlmIChkYXRhS2V5cygpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImhhcy10ZXh0LXdlaWdodC1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG9cIj48L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGRhdGFLZXkgb2YgZGF0YUtleXMoKTsgdHJhY2sgZGF0YUtleTsgbGV0IGRhdGFLZXlMYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGRhdGEoKVtkYXRhS2V5XT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggW2F0dHIuY29sc3Bhbl09XCJkYXRhKClbZGF0YUtleV0ubGVuZ3RoXCIgW2NsYXNzLmhhcy1ib3JkZXItcmlnaHRdPVwiIWRhdGFLZXlMYXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZGF0YUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRhdGFLZXkgfCBrZXlUb0xhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiaGFzLXRleHQtd2VpZ2h0LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvIGhhcy1ib3JkZXItcmlnaHQgaXMtcHktMFwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGVuYWJsZUZpbHRlck1ldGhvZE1vZGVsKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWRNZXRob2RNb2RlbCgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cInVuZGVmaW5lZFwiPkZpbHRlciBNb2RlbDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yICh0ZXJtIG9mIG1ldGhvZE1vZGVscygpOyB0cmFjayB0ZXJtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJ0ZXJtXCI+e3sgdGVybS5uYW1lIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiPjwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCI+PC90aD5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGRhdGFLZXkgb2YgZGF0YUtleXMoKTsgdHJhY2sgZGF0YUtleTsgbGV0IGRhdGFLZXlMYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAobm9kZSBvZiBkYXRhKClbZGF0YUtleV07IHRyYWNrIG5vZGUudmFsdWUudGVybS5uYW1lOyBsZXQgbm9kZUxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwibm9kZS52YWx1ZS50ZXJtLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmhhcy1ib3JkZXItcmlnaHRdPVwiZGF0YUtleXMoKS5sZW5ndGggPiAxICYmICFkYXRhS2V5TGFzdCAmJiBub2RlTGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayBbbm9kZV09XCJub2RlLnZhbHVlLnRlcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZS50ZXJtLm5hbWUgfCBlbGxpcHNpczogMzAgfCBjb21wb3VuZDogbm9kZS52YWx1ZS50ZXJtLnRlcm1UeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiaXMtaXRhbGljIGhhcy10ZXh0LXdlaWdodC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCI+PC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwic2NoZW1hQmFzZVVybCArICcvSW1wYWN0QXNzZXNzbWVudCNmdW5jdGlvbmFsVW5pdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIj5GdW5jdGlvbmFsIHVuaXQ8L2E+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJzY2hlbWFCYXNlVXJsICsgJy9JbXBhY3RBc3Nlc3NtZW50I3Byb2R1Y3QnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+UHJvZHVjdDwvYT5cbiAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICBAZm9yIChkYXRhS2V5IG9mIGRhdGFLZXlzKCk7IHRyYWNrIGRhdGFLZXk7IGxldCBkYXRhS2V5TGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKG5vZGUgb2YgZGF0YSgpW2RhdGFLZXldOyB0cmFjayBub2RlLnZhbHVlLnRlcm0ubmFtZTsgbGV0IG5vZGVMYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIm5vZGUudmFsdWUudGVybS51bml0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaGFzLWJvcmRlci1yaWdodF09XCJkYXRhS2V5cygpLmxlbmd0aCA+IDEgJiYgIWRhdGFLZXlMYXN0ICYmIG5vZGVMYXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIdG1sXT1cIm5vZGUudmFsdWUudGVybS51bml0cyB8IGNvbXBvdW5kOiBub2RlLnZhbHVlLnRlcm0udGVybVR5cGVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aGUtdGVybXMtdW5pdHMtZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgaXMtbWwtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXJtXT1cIm5vZGUudmFsdWUudGVybVwiPjwvaGUtdGVybXMtdW5pdHMtZGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgIGltcGFjdEFzc2Vzc21lbnQgb2YgaW1wYWN0QXNzZXNzbWVudHMoKTtcbiAgICAgICAgICAgICAgICAgIHRyYWNrIHRyYWNrQnlJZChpbXBhY3RJbmRleCwgaW1wYWN0QXNzZXNzbWVudCk7XG4gICAgICAgICAgICAgICAgICBsZXQgaW1wYWN0SW5kZXggPSAkaW5kZXhcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCIgW2F0dHIudGl0bGVdPVwiaW1wYWN0TmFtZShpbXBhY3RBc3Nlc3NtZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwiaW1wYWN0QXNzZXNzbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaW1wYWN0SW5kZXggKyAxIH19LiB7eyBpbXBhY3ROYW1lKGltcGFjdEFzc2Vzc21lbnQpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCIgW2F0dHIudGl0bGVdPVwiaW1wYWN0QXNzZXNzbWVudC5wcm9kdWN0Py50ZXJtPy51bml0c1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjEge3sgaW1wYWN0QXNzZXNzbWVudC5wcm9kdWN0Py50ZXJtPy51bml0cyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiIFthdHRyLnRpdGxlXT1cImltcGFjdEFzc2Vzc21lbnQucHJvZHVjdD8udGVybT8ubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaW1wYWN0QXNzZXNzbWVudC5wcm9kdWN0Py50ZXJtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cImltcGFjdEFzc2Vzc21lbnQucHJvZHVjdC50ZXJtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGltcGFjdEFzc2Vzc21lbnQucHJvZHVjdC50ZXJtLm5hbWUgfCBlbGxpcHNpczogMzAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGRhdGFLZXkgb2YgZGF0YUtleXMoKTsgdHJhY2sgZGF0YUtleTsgbGV0IGRhdGFLZXlMYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICBAZm9yIChub2RlIG9mIGRhdGEoKVtkYXRhS2V5XTsgdHJhY2sgbm9kZS52YWx1ZS50ZXJtLm5hbWU7IGxldCBub2RlTGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpcy1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaGFzLWJvcmRlci1yaWdodF09XCJkYXRhS2V5cygpLmxlbmd0aCA+IDEgJiYgIWRhdGFLZXlMYXN0ICYmIG5vZGVMYXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobm9kZS52YWx1ZS52YWx1ZXNbaW1wYWN0QXNzZXNzbWVudFsnQGlkJ11dKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHJpZ2dlci1wb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JQb3BvdmVyXT1cImRldGFpbHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0Nsb3NlPVwib3V0c2lkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyQ2xhc3M9XCJpcy1uYXJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwb3BvdmVyQ29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IG5vZGUudmFsdWUudmFsdWVzW2ltcGFjdEFzc2Vzc21lbnRbJ0BpZCddXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wYWN0QXNzZXNzbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gcG9pbnRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZS52YWx1ZXNbaW1wYWN0QXNzZXNzbWVudFsnQGlkJ11dLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZS50ZXJtWydAaWQnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHJlY2lzaW9uOiAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRlZmF1bHQ6ICctJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhlLWJsYW5rLW5vZGUtc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtub2RlXT1cIm5vZGUudmFsdWUudmFsdWVzW2ltcGFjdEFzc2Vzc21lbnRbJ0BpZCddXS5ub2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdGVdPVwiaW1wYWN0QXNzZXNzbWVudC5hZ2dyZWdhdGVkID8gJ2FnZ3JlZ2F0ZWQnIDogdW5kZWZpbmVkXCI+PC9oZS1ibGFuay1ub2RlLXN0YXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+LTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICA8L2hlLWRhdGEtdGFibGU+XG4gICAgICAgICAgPGhlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlKClcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXMtcHQtMyBoYXMtdGV4dC1jZW50ZXJlZFwiPlxuICAgICAgICAgICAgPHNwYW4+Tm8gZGF0YSBhdmFpbGFibGU8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLXBsLTFcIiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFmaWx0ZXJUZXJtKClcIj5tYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPi48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFpc09yaWdpbmFsKClcIj5cbiAgICAgICAgICAgICAgU3dpdGNoIHRvXG4gICAgICAgICAgICAgIDxjb2RlPnJlY2FsY3VsYXRlZDwvY29kZT5cbiAgICAgICAgICAgICAgdmVyc2lvbi5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBjYXNlIChWaWV3LmNoYXJ0KSB7XG4gICAgICA8aGUtaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvcnMtY2hhcnRcbiAgICAgICAgW2tleV09XCJub2RlS2V5KClcIlxuICAgICAgICBbZmlsdGVyVGVybVR5cGVzXT1cImZpbHRlclRlcm1UeXBlcygpXCI+PC9oZS1pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9ycy1jaGFydD5cbiAgICB9XG4gICAgQGNhc2UgKFZpZXcuYnJlYWtkb3duKSB7XG4gICAgICA8aGUtaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvci1icmVha2Rvd24tY2hhcnRcbiAgICAgICAgW2ltcGFjdEFzc2Vzc21lbnRdPVwic2VsZWN0ZWROb2RlKClcIlxuICAgICAgICBbaW5kaWNhdG9yc109XCJzZWxlY3RlZFJlY2FsY3VsYXRlZFZhbHVlcygpXCI+PC9oZS1pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9yLWJyZWFrZG93bi1jaGFydD5cbiAgICB9XG4gICAgQGNhc2UgKFZpZXcubG9ncykge1xuICAgICAgQGlmIChpbXBhY3RBc3Nlc3NtZW50cygpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnMgcHQtMiBweC0zXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsIGlzLXN0YXRpYyBpcy1zZWNvbmRhcnlcIj5TZWxlY3QgYW4gSW1wYWN0IEFzc2Vzc21lbnQ8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QgaXMtc21hbGwgaXMtZnVsbHdpZHRoIGlzLXNlY29uZGFyeVwiPlxuICAgICAgICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwic2VsZWN0SW5kZXgoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKHZhbHVlIG9mIGltcGFjdEFzc2Vzc21lbnRzKCk7IHRyYWNrIHZhbHVlOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiaVwiPnt7IGkgKyAxIH19LiB7eyBpbXBhY3ROYW1lKHZhbHVlKSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKHNlbGVjdGVkTm9kZSgpKSB7XG4gICAgICAgIDxoZS1ub2RlLWxvZ3MtbW9kZWxzXG4gICAgICAgICAgW25vZGVdPVwic2VsZWN0ZWROb2RlKClcIlxuICAgICAgICAgIFtub2RlS2V5XT1cIm5vZGVLZXkoKVwiXG4gICAgICAgICAgW2ZpbHRlclRlcm1UeXBlc109XCJmaWx0ZXJUZXJtVHlwZXMoKVwiXG4gICAgICAgICAgW29yaWdpbmFsVmFsdWVzXT1cInNlbGVjdGVkT3JpZ2luYWxWYWx1ZXMoKVwiXG4gICAgICAgICAgW3JlY2FsY3VsYXRlZFZhbHVlc109XCJzZWxlY3RlZFJlY2FsY3VsYXRlZFZhbHVlcygpXCJcbiAgICAgICAgICBbbm9EYXRhTWVzc2FnZV09XCJub0RhdGFNZXNzYWdlKClcIj48L2hlLW5vZGUtbG9ncy1tb2RlbHM+XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbjxuZy10ZW1wbGF0ZSAjZGV0YWlscyBsZXQtbm9kZT1cImltcGFjdEFzc2Vzc21lbnRcIiBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPHA+XG4gICAgPGI+XG4gICAgICBAaWYgKGRhdGEuY3ljbGUpIHtcbiAgICAgICAgPHNwYW4+e3sgY3ljbGVMYWJlbChub2RlLmN5Y2xlKSB9fTwvc3Bhbj5cbiAgICAgIH1cbiAgICAgIEBpZiAoIWRhdGEuY3ljbGUpIHtcbiAgICAgICAgPHNwYW4+e3sgZGF0YS5uYW1lIH19PC9zcGFuPlxuICAgICAgfVxuICAgIDwvYj5cbiAgPC9wPlxuICA8aGUtbm9kZS12YWx1ZS1kZXRhaWxzXG4gICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGUoKVwiXG4gICAgW25vZGVUeXBlXT1cIm5vZGVbJ0B0eXBlJ11cIlxuICAgIFtkYXRhS2V5XT1cIm5vZGVLZXkoKVwiPjwvaGUtbm9kZS12YWx1ZS1kZXRhaWxzPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -38,10 +38,10 @@ export class NodeCsvExportConfirmComponent {
|
|
|
38
38
|
this.activeModal?.close();
|
|
39
39
|
}
|
|
40
40
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NodeCsvExportConfirmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
41
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: NodeCsvExportConfirmComponent, isStandalone: true, selector: "he-node-csv-export-confirm", inputs: { nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: false, transformFunction: null }, filename: { classPropertyName: "filename", publicName: "filename", isSignal: true, isRequired: false, transformFunction: null }, headerKeys: { classPropertyName: "headerKeys", publicName: "headerKeys", isSignal: true, isRequired: false, transformFunction: null }, extension: { classPropertyName: "extension", publicName: "extension", isSignal: true, isRequired: false, transformFunction: null }, isUpload: { classPropertyName: "isUpload", publicName: "isUpload", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodes: "nodesChange", filename: "filenameChange", headerKeys: "headerKeysChange", extension: "extensionChange", isUpload: "isUploadChange", closed: "closed" }, ngImport: i0, template: "<div class=\"modal is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Export as CSV</p>\n <button class=\"delete\" aria-label=\"close\" (click)=\"close()\"></button>\n </header>\n <section class=\"modal-card-body\">\n @if (isUpload()) {\n <div class=\"notification is-info\" role=\"alert\">\n <span>After Download, you can edit and</span>\n <a class=\"px-1\" routerLink=\"../\">upload the CSV file</a>\n <span>to submit your content on the HESTIA platform, and your draft will remain unchanged.</span>\n <p>\n <span>\n Alternatively, you can import the CSV file right back by clicking on the \"Import from CSV\" button and\n selecting the exported file.\n </span>\n </p>\n </div>\n } @else if (includedNodes().length > 1) {\n <p class=\"mb-2\">\n <b>{{ includedNodes().length }}</b>\n <span class=\"px-1\">Nodes will be included in your download.</span>\n <a (click)=\"showIncludeNodes.set(!showIncludeNodes())\">\n @if (showIncludeNodes()) {\n Hide list\n } @else {\n Show list\n }\n </a>\n </p>\n @if (showIncludeNodes()) {\n <he-data-table maxHeight=\"400\">\n <table class=\"table is-fullwidth is-striped is-mb-0\">\n <thead>\n <tr>\n <th class=\"width-auto has-border-right\">\n <span>Type</span>\n </th>\n <th>\n <span>Name</span>\n </th>\n </tr>\n </thead>\n <tbody>\n @for (node of includedNodes(); track node) {\n <tr>\n <td class=\"width-auto has-border-right\">\n {{ node.node['@type'] }}\n </td>\n <td>\n <he-node-link [node]=\"node.node\" [showExternalLink]=\"true\">\n <span>{{ node.node.name }}</span>\n </he-node-link>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n }\n }\n\n <he-node-csv-select-headers\n [class.is-hidden]=\"isUpload()\"\n [csv]=\"csvData()\"\n [keys]=\"headerKeys()\"\n [includeDefaultCSV]=\"isUpload()\"\n (headersChanged)=\"headers.set($event)\"></he-node-csv-select-headers>\n </section>\n <footer class=\"modal-card-foot\">\n <a\n class=\"button is-primary\"\n target=\"_blank\"\n [attr.disabled]=\"csvContent() ? null : true\"\n [href]=\"csvContent()\"\n [attr.download]=\"csvContent() ? downloadFilename() : null\"\n (click)=\"close()\">\n <fa-icon class=\"mr-2\" [icon]=\"faDownload\"
|
|
41
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: NodeCsvExportConfirmComponent, isStandalone: true, selector: "he-node-csv-export-confirm", inputs: { nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: false, transformFunction: null }, filename: { classPropertyName: "filename", publicName: "filename", isSignal: true, isRequired: false, transformFunction: null }, headerKeys: { classPropertyName: "headerKeys", publicName: "headerKeys", isSignal: true, isRequired: false, transformFunction: null }, extension: { classPropertyName: "extension", publicName: "extension", isSignal: true, isRequired: false, transformFunction: null }, isUpload: { classPropertyName: "isUpload", publicName: "isUpload", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodes: "nodesChange", filename: "filenameChange", headerKeys: "headerKeysChange", extension: "extensionChange", isUpload: "isUploadChange", closed: "closed" }, ngImport: i0, template: "<div class=\"modal is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Export as CSV</p>\n <button class=\"delete\" aria-label=\"close\" (click)=\"close()\"></button>\n </header>\n <section class=\"modal-card-body\">\n @if (isUpload()) {\n <div class=\"notification is-info\" role=\"alert\">\n <span>After Download, you can edit and</span>\n <a class=\"px-1\" routerLink=\"../\">upload the CSV file</a>\n <span>to submit your content on the HESTIA platform, and your draft will remain unchanged.</span>\n <p>\n <span>\n Alternatively, you can import the CSV file right back by clicking on the \"Import from CSV\" button and\n selecting the exported file.\n </span>\n </p>\n </div>\n } @else if (includedNodes().length > 1) {\n <p class=\"mb-2\">\n <b>{{ includedNodes().length }}</b>\n <span class=\"px-1\">Nodes will be included in your download.</span>\n <a (click)=\"showIncludeNodes.set(!showIncludeNodes())\">\n @if (showIncludeNodes()) {\n Hide list\n } @else {\n Show list\n }\n </a>\n </p>\n @if (showIncludeNodes()) {\n <he-data-table maxHeight=\"400\">\n <table class=\"table is-fullwidth is-striped is-mb-0\">\n <thead>\n <tr>\n <th class=\"width-auto has-border-right\">\n <span>Type</span>\n </th>\n <th>\n <span>Name</span>\n </th>\n </tr>\n </thead>\n <tbody>\n @for (node of includedNodes(); track node) {\n <tr>\n <td class=\"width-auto has-border-right\">\n {{ node.node['@type'] }}\n </td>\n <td>\n <he-node-link [node]=\"node.node\" [showExternalLink]=\"true\">\n <span>{{ node.node.name }}</span>\n </he-node-link>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n }\n }\n\n <he-node-csv-select-headers\n [class.is-hidden]=\"isUpload()\"\n [csv]=\"csvData()\"\n [keys]=\"headerKeys()\"\n [includeDefaultCSV]=\"isUpload()\"\n (headersChanged)=\"headers.set($event)\"></he-node-csv-select-headers>\n </section>\n <footer class=\"modal-card-foot\">\n <a\n class=\"button is-primary\"\n target=\"_blank\"\n [attr.disabled]=\"csvContent() ? null : true\"\n [href]=\"csvContent()\"\n [attr.download]=\"csvContent() ? downloadFilename() : null\"\n (click)=\"close()\">\n <fa-icon class=\"mr-2\" [icon]=\"faDownload\" />\n <span>Download CSV</span>\n </a>\n <button class=\"button is-ghost\" (click)=\"close()\">\n <span>Cancel</span>\n </button>\n </footer>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: NodeCsvSelectHeadersComponent, selector: "he-node-csv-select-headers", inputs: ["csv", "keys", "includeDefaultCSV"], outputs: ["headersChanged"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
42
42
|
}
|
|
43
43
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NodeCsvExportConfirmComponent, decorators: [{
|
|
44
44
|
type: Component,
|
|
45
|
-
args: [{ selector: 'he-node-csv-export-confirm', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [RouterLink, DataTableComponent, NodeLinkComponent, NodeCsvSelectHeadersComponent, FaIconComponent], template: "<div class=\"modal is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Export as CSV</p>\n <button class=\"delete\" aria-label=\"close\" (click)=\"close()\"></button>\n </header>\n <section class=\"modal-card-body\">\n @if (isUpload()) {\n <div class=\"notification is-info\" role=\"alert\">\n <span>After Download, you can edit and</span>\n <a class=\"px-1\" routerLink=\"../\">upload the CSV file</a>\n <span>to submit your content on the HESTIA platform, and your draft will remain unchanged.</span>\n <p>\n <span>\n Alternatively, you can import the CSV file right back by clicking on the \"Import from CSV\" button and\n selecting the exported file.\n </span>\n </p>\n </div>\n } @else if (includedNodes().length > 1) {\n <p class=\"mb-2\">\n <b>{{ includedNodes().length }}</b>\n <span class=\"px-1\">Nodes will be included in your download.</span>\n <a (click)=\"showIncludeNodes.set(!showIncludeNodes())\">\n @if (showIncludeNodes()) {\n Hide list\n } @else {\n Show list\n }\n </a>\n </p>\n @if (showIncludeNodes()) {\n <he-data-table maxHeight=\"400\">\n <table class=\"table is-fullwidth is-striped is-mb-0\">\n <thead>\n <tr>\n <th class=\"width-auto has-border-right\">\n <span>Type</span>\n </th>\n <th>\n <span>Name</span>\n </th>\n </tr>\n </thead>\n <tbody>\n @for (node of includedNodes(); track node) {\n <tr>\n <td class=\"width-auto has-border-right\">\n {{ node.node['@type'] }}\n </td>\n <td>\n <he-node-link [node]=\"node.node\" [showExternalLink]=\"true\">\n <span>{{ node.node.name }}</span>\n </he-node-link>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n }\n }\n\n <he-node-csv-select-headers\n [class.is-hidden]=\"isUpload()\"\n [csv]=\"csvData()\"\n [keys]=\"headerKeys()\"\n [includeDefaultCSV]=\"isUpload()\"\n (headersChanged)=\"headers.set($event)\"></he-node-csv-select-headers>\n </section>\n <footer class=\"modal-card-foot\">\n <a\n class=\"button is-primary\"\n target=\"_blank\"\n [attr.disabled]=\"csvContent() ? null : true\"\n [href]=\"csvContent()\"\n [attr.download]=\"csvContent() ? downloadFilename() : null\"\n (click)=\"close()\">\n <fa-icon class=\"mr-2\" [icon]=\"faDownload\"
|
|
45
|
+
args: [{ selector: 'he-node-csv-export-confirm', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [RouterLink, DataTableComponent, NodeLinkComponent, NodeCsvSelectHeadersComponent, FaIconComponent], template: "<div class=\"modal is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Export as CSV</p>\n <button class=\"delete\" aria-label=\"close\" (click)=\"close()\"></button>\n </header>\n <section class=\"modal-card-body\">\n @if (isUpload()) {\n <div class=\"notification is-info\" role=\"alert\">\n <span>After Download, you can edit and</span>\n <a class=\"px-1\" routerLink=\"../\">upload the CSV file</a>\n <span>to submit your content on the HESTIA platform, and your draft will remain unchanged.</span>\n <p>\n <span>\n Alternatively, you can import the CSV file right back by clicking on the \"Import from CSV\" button and\n selecting the exported file.\n </span>\n </p>\n </div>\n } @else if (includedNodes().length > 1) {\n <p class=\"mb-2\">\n <b>{{ includedNodes().length }}</b>\n <span class=\"px-1\">Nodes will be included in your download.</span>\n <a (click)=\"showIncludeNodes.set(!showIncludeNodes())\">\n @if (showIncludeNodes()) {\n Hide list\n } @else {\n Show list\n }\n </a>\n </p>\n @if (showIncludeNodes()) {\n <he-data-table maxHeight=\"400\">\n <table class=\"table is-fullwidth is-striped is-mb-0\">\n <thead>\n <tr>\n <th class=\"width-auto has-border-right\">\n <span>Type</span>\n </th>\n <th>\n <span>Name</span>\n </th>\n </tr>\n </thead>\n <tbody>\n @for (node of includedNodes(); track node) {\n <tr>\n <td class=\"width-auto has-border-right\">\n {{ node.node['@type'] }}\n </td>\n <td>\n <he-node-link [node]=\"node.node\" [showExternalLink]=\"true\">\n <span>{{ node.node.name }}</span>\n </he-node-link>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n }\n }\n\n <he-node-csv-select-headers\n [class.is-hidden]=\"isUpload()\"\n [csv]=\"csvData()\"\n [keys]=\"headerKeys()\"\n [includeDefaultCSV]=\"isUpload()\"\n (headersChanged)=\"headers.set($event)\"></he-node-csv-select-headers>\n </section>\n <footer class=\"modal-card-foot\">\n <a\n class=\"button is-primary\"\n target=\"_blank\"\n [attr.disabled]=\"csvContent() ? null : true\"\n [href]=\"csvContent()\"\n [attr.download]=\"csvContent() ? downloadFilename() : null\"\n (click)=\"close()\">\n <fa-icon class=\"mr-2\" [icon]=\"faDownload\" />\n <span>Download CSV</span>\n </a>\n <button class=\"button is-ghost\" (click)=\"close()\">\n <span>Cancel</span>\n </button>\n </footer>\n </div>\n</div>\n" }]
|
|
46
46
|
}] });
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUM3RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7QUFlbEYsTUFBTSxPQUFPLDZCQUE2QjtJQVIxQztRQVNtQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV2RCxlQUFVLEdBQUcsVUFBVSxDQUFDO1FBRXhCLFlBQU8sR0FBRyxNQUFNLENBQVcsRUFBRSxDQUFDLENBQUM7UUFFbEMsVUFBSyxHQUFHLEtBQUssQ0FBb0MsRUFBRSxDQUFDLENBQUM7UUFDckQsYUFBUSxHQUFHLEtBQUssQ0FBUyxVQUFVLENBQUMsQ0FBQztRQUNyQyxlQUFVLEdBQUcsS0FBSyxDQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLGNBQVMsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsYUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwQixXQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFFbEIscUJBQWdCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLGtCQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUMvQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBa0IsQ0FBQyxDQUM5RSxDQUFDO1FBQ2UsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDeEMsSUFBSSxDQUFDLGFBQWEsRUFBRTthQUNqQixNQUFNLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUM7YUFDbEMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQzNCLENBQUM7UUFFaUIsWUFBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRixlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUM1QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTTtZQUNuQixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyw4QkFBOEIsQ0FDOUMsZ0NBQWdDLGtCQUFrQixDQUNoRCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUM5RixFQUFFLENBQ0o7WUFDSCxDQUFDLENBQUMsU0FBUyxDQUNkLENBQUM7UUFFaUIscUJBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQU1wRztJQUpXLEtBQUs7UUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQzsrR0ExQ1UsNkJBQTZCO21HQUE3Qiw2QkFBNkIsazVCQzNCMUMsa3NHQXdGQSwwREQvRFksVUFBVSxvT0FBRSxrQkFBa0IsdUdBQUUsaUJBQWlCLDRHQUFFLDZCQUE2QixrSkFBRSxlQUFlOzs0RkFFaEcsNkJBQTZCO2tCQVJ6QyxTQUFTOytCQUNFLDRCQUE0QixtQkFHckIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsNkJBQTZCLEVBQUUsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgbW9kZWwsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgZmlsZVRvRXh0LCBTdXBwb3J0ZWRFeHRlbnNpb25zIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgSlNPTkxELCBKU09OIGFzIEhlc3RpYUpTT04gfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB0b0NzdiB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hLWNvbnZlcnQnO1xuaW1wb3J0IHsgRmFJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xuaW1wb3J0IHsgZmFEb3dubG9hZCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcblxuaW1wb3J0IHsgTm9kZUNzdlNlbGVjdEhlYWRlcnNDb21wb25lbnQgfSBmcm9tICcuLi9ub2RlLWNzdi1zZWxlY3QtaGVhZGVycy9ub2RlLWNzdi1zZWxlY3QtaGVhZGVycy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZUxpbmtDb21wb25lbnQgfSBmcm9tICcuLi9ub2RlLWxpbmsvbm9kZS1saW5rLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudCc7XG5cbmludGVyZmFjZSBJTm9kZUluY2x1ZGVkIHtcbiAgbm9kZTogSlNPTkxEPGFueT47XG4gIGluY2x1ZGVkOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9ub2RlLWNzdi1leHBvcnQtY29uZmlybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25vZGUtY3N2LWV4cG9ydC1jb25maXJtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUm91dGVyTGluaywgRGF0YVRhYmxlQ29tcG9uZW50LCBOb2RlTGlua0NvbXBvbmVudCwgTm9kZUNzdlNlbGVjdEhlYWRlcnNDb21wb25lbnQsIEZhSWNvbkNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTm9kZUNzdkV4cG9ydENvbmZpcm1Db21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGRvbVNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZU1vZGFsID0gaW5qZWN0KE5nYkFjdGl2ZU1vZGFsLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBmYURvd25sb2FkID0gZmFEb3dubG9hZDtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaGVhZGVycyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuXG4gIHB1YmxpYyByZWFkb25seSBub2RlcyA9IG1vZGVsPChKU09OTEQ8YW55PiB8IEhlc3RpYUpTT048YW55PilbXT4oW10pO1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZW5hbWUgPSBtb2RlbDxzdHJpbmc+KCdkb3dubG9hZCcpO1xuICBwdWJsaWMgcmVhZG9ubHkgaGVhZGVyS2V5cyA9IG1vZGVsPHN0cmluZ1tdPihbXSk7XG4gIHB1YmxpYyByZWFkb25seSBleHRlbnNpb24gPSBtb2RlbChTdXBwb3J0ZWRFeHRlbnNpb25zLmNzdik7XG4gIHB1YmxpYyByZWFkb25seSBpc1VwbG9hZCA9IG1vZGVsKHRydWUpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjbG9zZWQgPSBvdXRwdXQoKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvd0luY2x1ZGVOb2RlcyA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpbmNsdWRlZE5vZGVzID0gY29tcHV0ZWQoKCkgPT5cbiAgICAodGhpcy5ub2RlcygpID8/IFtdKS5tYXAobm9kZSA9PiAoeyBub2RlLCBpbmNsdWRlZDogdHJ1ZSB9KSBhcyBJTm9kZUluY2x1ZGVkKVxuICApO1xuICBwcml2YXRlIHJlYWRvbmx5IGluY2x1ZGVkID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmluY2x1ZGVkTm9kZXMoKVxuICAgICAgLmZpbHRlcigoeyBpbmNsdWRlZCB9KSA9PiBpbmNsdWRlZClcbiAgICAgIC5tYXAoKHsgbm9kZSB9KSA9PiBub2RlKVxuICApO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjc3ZEYXRhID0gY29tcHV0ZWQoKCkgPT4gdG9Dc3YodGhpcy5ub2RlcygpIHx8IFtdLCB7IGluY2x1ZGVFeGlzaW5nOiAhdGhpcy5pc1VwbG9hZCgpIH0pKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNzdkNvbnRlbnQgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuaGVhZGVycygpLmxlbmd0aFxuICAgICAgPyB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoXG4gICAgICAgICAgYGRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICAgICAgICB0b0Nzdih0aGlzLmluY2x1ZGVkKCksIHsgaW5jbHVkZUV4aXNpbmc6ICF0aGlzLmlzVXBsb2FkKCksIHNlbGVjdGVkSGVhZGVyczogdGhpcy5oZWFkZXJzKCkgfSlcbiAgICAgICAgICApfWBcbiAgICAgICAgKVxuICAgICAgOiB1bmRlZmluZWRcbiAgKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZG93bmxvYWRGaWxlbmFtZSA9IGNvbXB1dGVkKCgpID0+IGZpbGVUb0V4dCh0aGlzLmZpbGVuYW1lKCksIHRoaXMuZXh0ZW5zaW9uKCkpKTtcblxuICBwcm90ZWN0ZWQgY2xvc2UoKSB7XG4gICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICAgIHRoaXMuYWN0aXZlTW9kYWw/LmNsb3NlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtb2RhbCBpcy1hY3RpdmVcIj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJhY2tncm91bmRcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWNhcmRcIj5cbiAgICA8aGVhZGVyIGNsYXNzPVwibW9kYWwtY2FyZC1oZWFkXCI+XG4gICAgICA8cCBjbGFzcz1cIm1vZGFsLWNhcmQtdGl0bGVcIj5FeHBvcnQgYXMgQ1NWPC9wPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImRlbGV0ZVwiIGFyaWEtbGFiZWw9XCJjbG9zZVwiIChjbGljayk9XCJjbG9zZSgpXCI+PC9idXR0b24+XG4gICAgPC9oZWFkZXI+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1jYXJkLWJvZHlcIj5cbiAgICAgIEBpZiAoaXNVcGxvYWQoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uIGlzLWluZm9cIiByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAgICA8c3Bhbj5BZnRlciBEb3dubG9hZCwgeW91IGNhbiBlZGl0IGFuZDwvc3Bhbj5cbiAgICAgICAgICA8YSBjbGFzcz1cInB4LTFcIiByb3V0ZXJMaW5rPVwiLi4vXCI+dXBsb2FkIHRoZSBDU1YgZmlsZTwvYT5cbiAgICAgICAgICA8c3Bhbj50byBzdWJtaXQgeW91ciBjb250ZW50IG9uIHRoZSBIRVNUSUEgcGxhdGZvcm0sIGFuZCB5b3VyIGRyYWZ0IHdpbGwgcmVtYWluIHVuY2hhbmdlZC48L3NwYW4+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBpbXBvcnQgdGhlIENTViBmaWxlIHJpZ2h0IGJhY2sgYnkgY2xpY2tpbmcgb24gdGhlIFwiSW1wb3J0IGZyb20gQ1NWXCIgYnV0dG9uIGFuZFxuICAgICAgICAgICAgICBzZWxlY3RpbmcgdGhlIGV4cG9ydGVkIGZpbGUuXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2UgaWYgKGluY2x1ZGVkTm9kZXMoKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIDxwIGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgIDxiPnt7IGluY2x1ZGVkTm9kZXMoKS5sZW5ndGggfX08L2I+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJweC0xXCI+Tm9kZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB5b3VyIGRvd25sb2FkLjwvc3Bhbj5cbiAgICAgICAgICA8YSAoY2xpY2spPVwic2hvd0luY2x1ZGVOb2Rlcy5zZXQoIXNob3dJbmNsdWRlTm9kZXMoKSlcIj5cbiAgICAgICAgICAgIEBpZiAoc2hvd0luY2x1ZGVOb2RlcygpKSB7XG4gICAgICAgICAgICAgIEhpZGUgbGlzdFxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIFNob3cgbGlzdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9wPlxuICAgICAgICBAaWYgKHNob3dJbmNsdWRlTm9kZXMoKSkge1xuICAgICAgICAgIDxoZS1kYXRhLXRhYmxlIG1heEhlaWdodD1cIjQwMFwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgaXMtZnVsbHdpZHRoIGlzLXN0cmlwZWQgaXMtbWItMFwiPlxuICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlR5cGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5OYW1lPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgQGZvciAobm9kZSBvZiBpbmNsdWRlZE5vZGVzKCk7IHRyYWNrIG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgbm9kZS5ub2RlWydAdHlwZSddIH19XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cIm5vZGUubm9kZVwiIFtzaG93RXh0ZXJuYWxMaW5rXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG5vZGUubm9kZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgIDwvaGUtZGF0YS10YWJsZT5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA8aGUtbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnNcbiAgICAgICAgW2NsYXNzLmlzLWhpZGRlbl09XCJpc1VwbG9hZCgpXCJcbiAgICAgICAgW2Nzdl09XCJjc3ZEYXRhKClcIlxuICAgICAgICBba2V5c109XCJoZWFkZXJLZXlzKClcIlxuICAgICAgICBbaW5jbHVkZURlZmF1bHRDU1ZdPVwiaXNVcGxvYWQoKVwiXG4gICAgICAgIChoZWFkZXJzQ2hhbmdlZCk9XCJoZWFkZXJzLnNldCgkZXZlbnQpXCI+PC9oZS1ub2RlLWNzdi1zZWxlY3QtaGVhZGVycz5cbiAgICA8L3NlY3Rpb24+XG4gICAgPGZvb3RlciBjbGFzcz1cIm1vZGFsLWNhcmQtZm9vdFwiPlxuICAgICAgPGFcbiAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtcHJpbWFyeVwiXG4gICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgIFthdHRyLmRpc2FibGVkXT1cImNzdkNvbnRlbnQoKSA/IG51bGwgOiB0cnVlXCJcbiAgICAgICAgW2hyZWZdPVwiY3N2Q29udGVudCgpXCJcbiAgICAgICAgW2F0dHIuZG93bmxvYWRdPVwiY3N2Q29udGVudCgpID8gZG93bmxvYWRGaWxlbmFtZSgpIDogbnVsbFwiXG4gICAgICAgIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICAgIDxmYS1pY29uIGNsYXNzPVwibXItMlwiIFtpY29uXT1cImZhRG93bmxvYWRcIj48L2ZhLWljb24+XG4gICAgICAgIDxzcGFuPkRvd25sb2FkIENTVjwvc3Bhbj5cbiAgICAgIDwvYT5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtZ2hvc3RcIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxuICAgICAgICA8c3Bhbj5DYW5jZWw8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Zvb3Rlcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUM3RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7QUFlbEYsTUFBTSxPQUFPLDZCQUE2QjtJQVIxQztRQVNtQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV2RCxlQUFVLEdBQUcsVUFBVSxDQUFDO1FBRXhCLFlBQU8sR0FBRyxNQUFNLENBQVcsRUFBRSxDQUFDLENBQUM7UUFFbEMsVUFBSyxHQUFHLEtBQUssQ0FBb0MsRUFBRSxDQUFDLENBQUM7UUFDckQsYUFBUSxHQUFHLEtBQUssQ0FBUyxVQUFVLENBQUMsQ0FBQztRQUNyQyxlQUFVLEdBQUcsS0FBSyxDQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLGNBQVMsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsYUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwQixXQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFFbEIscUJBQWdCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLGtCQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUMvQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBa0IsQ0FBQyxDQUM5RSxDQUFDO1FBQ2UsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDeEMsSUFBSSxDQUFDLGFBQWEsRUFBRTthQUNqQixNQUFNLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUM7YUFDbEMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQzNCLENBQUM7UUFFaUIsWUFBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRixlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUM1QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTTtZQUNuQixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyw4QkFBOEIsQ0FDOUMsZ0NBQWdDLGtCQUFrQixDQUNoRCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUM5RixFQUFFLENBQ0o7WUFDSCxDQUFDLENBQUMsU0FBUyxDQUNkLENBQUM7UUFFaUIscUJBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQU1wRztJQUpXLEtBQUs7UUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQzsrR0ExQ1UsNkJBQTZCO21HQUE3Qiw2QkFBNkIsazVCQzNCMUMsMHJHQXdGQSwwREQvRFksVUFBVSxvT0FBRSxrQkFBa0IsdUdBQUUsaUJBQWlCLDRHQUFFLDZCQUE2QixrSkFBRSxlQUFlOzs0RkFFaEcsNkJBQTZCO2tCQVJ6QyxTQUFTOytCQUNFLDRCQUE0QixtQkFHckIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsNkJBQTZCLEVBQUUsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgbW9kZWwsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgZmlsZVRvRXh0LCBTdXBwb3J0ZWRFeHRlbnNpb25zIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgSlNPTkxELCBKU09OIGFzIEhlc3RpYUpTT04gfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB0b0NzdiB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hLWNvbnZlcnQnO1xuaW1wb3J0IHsgRmFJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xuaW1wb3J0IHsgZmFEb3dubG9hZCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcblxuaW1wb3J0IHsgTm9kZUNzdlNlbGVjdEhlYWRlcnNDb21wb25lbnQgfSBmcm9tICcuLi9ub2RlLWNzdi1zZWxlY3QtaGVhZGVycy9ub2RlLWNzdi1zZWxlY3QtaGVhZGVycy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZUxpbmtDb21wb25lbnQgfSBmcm9tICcuLi9ub2RlLWxpbmsvbm9kZS1saW5rLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudCc7XG5cbmludGVyZmFjZSBJTm9kZUluY2x1ZGVkIHtcbiAgbm9kZTogSlNPTkxEPGFueT47XG4gIGluY2x1ZGVkOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9ub2RlLWNzdi1leHBvcnQtY29uZmlybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25vZGUtY3N2LWV4cG9ydC1jb25maXJtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUm91dGVyTGluaywgRGF0YVRhYmxlQ29tcG9uZW50LCBOb2RlTGlua0NvbXBvbmVudCwgTm9kZUNzdlNlbGVjdEhlYWRlcnNDb21wb25lbnQsIEZhSWNvbkNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTm9kZUNzdkV4cG9ydENvbmZpcm1Db21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGRvbVNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZU1vZGFsID0gaW5qZWN0KE5nYkFjdGl2ZU1vZGFsLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBmYURvd25sb2FkID0gZmFEb3dubG9hZDtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaGVhZGVycyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuXG4gIHB1YmxpYyByZWFkb25seSBub2RlcyA9IG1vZGVsPChKU09OTEQ8YW55PiB8IEhlc3RpYUpTT048YW55PilbXT4oW10pO1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZW5hbWUgPSBtb2RlbDxzdHJpbmc+KCdkb3dubG9hZCcpO1xuICBwdWJsaWMgcmVhZG9ubHkgaGVhZGVyS2V5cyA9IG1vZGVsPHN0cmluZ1tdPihbXSk7XG4gIHB1YmxpYyByZWFkb25seSBleHRlbnNpb24gPSBtb2RlbChTdXBwb3J0ZWRFeHRlbnNpb25zLmNzdik7XG4gIHB1YmxpYyByZWFkb25seSBpc1VwbG9hZCA9IG1vZGVsKHRydWUpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjbG9zZWQgPSBvdXRwdXQoKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvd0luY2x1ZGVOb2RlcyA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpbmNsdWRlZE5vZGVzID0gY29tcHV0ZWQoKCkgPT5cbiAgICAodGhpcy5ub2RlcygpID8/IFtdKS5tYXAobm9kZSA9PiAoeyBub2RlLCBpbmNsdWRlZDogdHJ1ZSB9KSBhcyBJTm9kZUluY2x1ZGVkKVxuICApO1xuICBwcml2YXRlIHJlYWRvbmx5IGluY2x1ZGVkID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmluY2x1ZGVkTm9kZXMoKVxuICAgICAgLmZpbHRlcigoeyBpbmNsdWRlZCB9KSA9PiBpbmNsdWRlZClcbiAgICAgIC5tYXAoKHsgbm9kZSB9KSA9PiBub2RlKVxuICApO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjc3ZEYXRhID0gY29tcHV0ZWQoKCkgPT4gdG9Dc3YodGhpcy5ub2RlcygpIHx8IFtdLCB7IGluY2x1ZGVFeGlzaW5nOiAhdGhpcy5pc1VwbG9hZCgpIH0pKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNzdkNvbnRlbnQgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuaGVhZGVycygpLmxlbmd0aFxuICAgICAgPyB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoXG4gICAgICAgICAgYGRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICAgICAgICB0b0Nzdih0aGlzLmluY2x1ZGVkKCksIHsgaW5jbHVkZUV4aXNpbmc6ICF0aGlzLmlzVXBsb2FkKCksIHNlbGVjdGVkSGVhZGVyczogdGhpcy5oZWFkZXJzKCkgfSlcbiAgICAgICAgICApfWBcbiAgICAgICAgKVxuICAgICAgOiB1bmRlZmluZWRcbiAgKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZG93bmxvYWRGaWxlbmFtZSA9IGNvbXB1dGVkKCgpID0+IGZpbGVUb0V4dCh0aGlzLmZpbGVuYW1lKCksIHRoaXMuZXh0ZW5zaW9uKCkpKTtcblxuICBwcm90ZWN0ZWQgY2xvc2UoKSB7XG4gICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICAgIHRoaXMuYWN0aXZlTW9kYWw/LmNsb3NlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtb2RhbCBpcy1hY3RpdmVcIj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJhY2tncm91bmRcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWNhcmRcIj5cbiAgICA8aGVhZGVyIGNsYXNzPVwibW9kYWwtY2FyZC1oZWFkXCI+XG4gICAgICA8cCBjbGFzcz1cIm1vZGFsLWNhcmQtdGl0bGVcIj5FeHBvcnQgYXMgQ1NWPC9wPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImRlbGV0ZVwiIGFyaWEtbGFiZWw9XCJjbG9zZVwiIChjbGljayk9XCJjbG9zZSgpXCI+PC9idXR0b24+XG4gICAgPC9oZWFkZXI+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1jYXJkLWJvZHlcIj5cbiAgICAgIEBpZiAoaXNVcGxvYWQoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uIGlzLWluZm9cIiByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAgICA8c3Bhbj5BZnRlciBEb3dubG9hZCwgeW91IGNhbiBlZGl0IGFuZDwvc3Bhbj5cbiAgICAgICAgICA8YSBjbGFzcz1cInB4LTFcIiByb3V0ZXJMaW5rPVwiLi4vXCI+dXBsb2FkIHRoZSBDU1YgZmlsZTwvYT5cbiAgICAgICAgICA8c3Bhbj50byBzdWJtaXQgeW91ciBjb250ZW50IG9uIHRoZSBIRVNUSUEgcGxhdGZvcm0sIGFuZCB5b3VyIGRyYWZ0IHdpbGwgcmVtYWluIHVuY2hhbmdlZC48L3NwYW4+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBpbXBvcnQgdGhlIENTViBmaWxlIHJpZ2h0IGJhY2sgYnkgY2xpY2tpbmcgb24gdGhlIFwiSW1wb3J0IGZyb20gQ1NWXCIgYnV0dG9uIGFuZFxuICAgICAgICAgICAgICBzZWxlY3RpbmcgdGhlIGV4cG9ydGVkIGZpbGUuXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2UgaWYgKGluY2x1ZGVkTm9kZXMoKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIDxwIGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgIDxiPnt7IGluY2x1ZGVkTm9kZXMoKS5sZW5ndGggfX08L2I+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJweC0xXCI+Tm9kZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB5b3VyIGRvd25sb2FkLjwvc3Bhbj5cbiAgICAgICAgICA8YSAoY2xpY2spPVwic2hvd0luY2x1ZGVOb2Rlcy5zZXQoIXNob3dJbmNsdWRlTm9kZXMoKSlcIj5cbiAgICAgICAgICAgIEBpZiAoc2hvd0luY2x1ZGVOb2RlcygpKSB7XG4gICAgICAgICAgICAgIEhpZGUgbGlzdFxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIFNob3cgbGlzdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9wPlxuICAgICAgICBAaWYgKHNob3dJbmNsdWRlTm9kZXMoKSkge1xuICAgICAgICAgIDxoZS1kYXRhLXRhYmxlIG1heEhlaWdodD1cIjQwMFwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgaXMtZnVsbHdpZHRoIGlzLXN0cmlwZWQgaXMtbWItMFwiPlxuICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlR5cGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5OYW1lPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgQGZvciAobm9kZSBvZiBpbmNsdWRlZE5vZGVzKCk7IHRyYWNrIG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgbm9kZS5ub2RlWydAdHlwZSddIH19XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cIm5vZGUubm9kZVwiIFtzaG93RXh0ZXJuYWxMaW5rXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG5vZGUubm9kZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgIDwvaGUtZGF0YS10YWJsZT5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA8aGUtbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnNcbiAgICAgICAgW2NsYXNzLmlzLWhpZGRlbl09XCJpc1VwbG9hZCgpXCJcbiAgICAgICAgW2Nzdl09XCJjc3ZEYXRhKClcIlxuICAgICAgICBba2V5c109XCJoZWFkZXJLZXlzKClcIlxuICAgICAgICBbaW5jbHVkZURlZmF1bHRDU1ZdPVwiaXNVcGxvYWQoKVwiXG4gICAgICAgIChoZWFkZXJzQ2hhbmdlZCk9XCJoZWFkZXJzLnNldCgkZXZlbnQpXCI+PC9oZS1ub2RlLWNzdi1zZWxlY3QtaGVhZGVycz5cbiAgICA8L3NlY3Rpb24+XG4gICAgPGZvb3RlciBjbGFzcz1cIm1vZGFsLWNhcmQtZm9vdFwiPlxuICAgICAgPGFcbiAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtcHJpbWFyeVwiXG4gICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgIFthdHRyLmRpc2FibGVkXT1cImNzdkNvbnRlbnQoKSA/IG51bGwgOiB0cnVlXCJcbiAgICAgICAgW2hyZWZdPVwiY3N2Q29udGVudCgpXCJcbiAgICAgICAgW2F0dHIuZG93bmxvYWRdPVwiY3N2Q29udGVudCgpID8gZG93bmxvYWRGaWxlbmFtZSgpIDogbnVsbFwiXG4gICAgICAgIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICAgIDxmYS1pY29uIGNsYXNzPVwibXItMlwiIFtpY29uXT1cImZhRG93bmxvYWRcIiAvPlxuICAgICAgICA8c3Bhbj5Eb3dubG9hZCBDU1Y8L3NwYW4+XG4gICAgICA8L2E+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLWdob3N0XCIgKGNsaWNrKT1cImNsb3NlKClcIj5cbiAgICAgICAgPHNwYW4+Q2FuY2VsPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9mb290ZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|