@c8y/ngx-components 1020.18.1 → 1020.18.5
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/assets-navigator/asset-selector/asset-selector.component.d.ts +1 -0
- package/assets-navigator/asset-selector/asset-selector.component.d.ts.map +1 -1
- package/core/plugins/plugins-resolve.service.d.ts +3 -1
- package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
- package/esm2022/assets-navigator/asset-selector/asset-selector.component.mjs +5 -3
- package/esm2022/core/plugins/plugins-resolve.service.mjs +12 -4
- package/esm2022/ecosystem/packages/package-details/package-details.component.mjs +3 -3
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs +3 -2
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +2 -2
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +9 -3
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/locales.pot +3 -0
- package/package.json +1 -1
|
@@ -82,6 +82,7 @@ export declare class AssetSelectorComponent extends AssetSelectorBase implements
|
|
|
82
82
|
* Returns the current header hight in pixel.
|
|
83
83
|
*/
|
|
84
84
|
getHeaderHeight$: BehaviorSubject<number>;
|
|
85
|
+
readonly ASSET_CONST: "Asset {{ assetId }}";
|
|
85
86
|
private header;
|
|
86
87
|
/**
|
|
87
88
|
* @ignore only DI
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-selector.component.d.ts","sourceRoot":"","sources":["../../../assets-navigator/asset-selector/asset-selector.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAGjB,YAAY,EAEZ,MAAM,EAEN,aAAa,EAGd,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EAErB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;;
|
|
1
|
+
{"version":3,"file":"asset-selector.component.d.ts","sourceRoot":"","sources":["../../../assets-navigator/asset-selector/asset-selector.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,12 +3,14 @@ import { ApplicationRemotePlugins, FetchClient } from '@c8y/client';
|
|
|
3
3
|
import { TranslateService } from '@ngx-translate/core';
|
|
4
4
|
import { Observable } from 'rxjs';
|
|
5
5
|
import { AppStateService } from '../common';
|
|
6
|
+
import { OptionsService } from '../common/options.service';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
export declare class PluginsResolveService {
|
|
8
9
|
private translateService;
|
|
9
10
|
private fetchClient;
|
|
10
11
|
private appState;
|
|
11
12
|
private injector;
|
|
13
|
+
private optionsService;
|
|
12
14
|
/**
|
|
13
15
|
* Takes a list of remotes and turns it into an object containing union of corresponding remotes.
|
|
14
16
|
* @param remotes List of the remotes.
|
|
@@ -51,7 +53,7 @@ export declare class PluginsResolveService {
|
|
|
51
53
|
private _refresh$;
|
|
52
54
|
private _pluginDetails$;
|
|
53
55
|
private _allPluginsLoaded$;
|
|
54
|
-
constructor(translateService: TranslateService, fetchClient: FetchClient, appState: AppStateService, injector: EnvironmentInjector);
|
|
56
|
+
constructor(translateService: TranslateService, fetchClient: FetchClient, appState: AppStateService, injector: EnvironmentInjector, optionsService: OptionsService);
|
|
55
57
|
/**
|
|
56
58
|
* Loads plugins by resolving the remote NgModules and injecting it. Also attaching
|
|
57
59
|
* the hooks onto the root injector.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins-resolve.service.d.ts","sourceRoot":"","sources":["../../../core/plugins/plugins-resolve.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAkB,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAmB,UAAU,EAAW,MAAM,MAAM,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;;
|
|
1
|
+
{"version":3,"file":"plugins-resolve.service.d.ts","sourceRoot":"","sources":["../../../core/plugins/plugins-resolve.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAkB,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAmB,UAAU,EAAW,MAAM,MAAM,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;;AAa3D,qBAGa,qBAAqB;IAkG9B,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,cAAc;IArGxB;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,wBAAwB,EAAE,GAAG,wBAAwB;IAelF,MAAM,CAAC,aAAa,CAClB,mBAAmB,EAAE,wBAAwB,EAC7C,eAAe,CAAC,EAAE,wBAAwB,GACzC,wBAAwB;IAkC3B;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAC5C;;OAEG;IACH,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3B;;OAEG;IACH,cAAc,EAAE,UAAU,CAAC;QACzB,cAAc,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;KACjC,CAAC,CAAC;IACH,iBAAiB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,eAAe,CAGlB;IACL,OAAO,CAAC,kBAAkB,CAAuC;gBAGvD,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,mBAAmB,EAC7B,cAAc,EAAE,cAAc;IAcxC;;;;OAIG;IACH,oBAAoB,CAAC,aAAa,EAAE,KAAK,CAAC;QAAE,OAAO,MAAC;QAAC,IAAI,MAAA;KAAE,CAAC;IAM5D;;;OAGG;IACH,sBAAsB,CAAC,aAAa,EAAE,KAAK,CAAC;QAAE,OAAO,MAAC;QAAC,IAAI,MAAA;KAAE,CAAC;IAU9D,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAchE;;OAEG;IACH,YAAY;IAIZ,mBAAmB;IAInB;;;;;OAKG;IACG,WAAW,CAAC,OAAO,EAAE,wBAAwB;IAkCnD;;;;;;;;;;;;;;;;;;OAkBG;IACH,cAAc,CAAC,SAAS,EAAE,wBAAwB,EAAE,GAAG,wBAAwB;IAI/E;;OAEG;IACH,oBAAoB;IAIpB;;;OAGG;IACH,cAAc;YAeA,sBAAsB;YAatB,gBAAgB;IAgB9B,OAAO,CAAC,eAAe;YAeT,mBAAmB;yCA3StB,qBAAqB;6CAArB,qBAAqB;CAqUjC"}
|
|
@@ -9,6 +9,7 @@ import { AssetSelectorService } from './asset-selector.service';
|
|
|
9
9
|
import { GroupNode } from './group-node';
|
|
10
10
|
import { GroupNodeService } from './group-node.service';
|
|
11
11
|
import { UnassignedDevicesNode } from './unassigned-devices-node';
|
|
12
|
+
import { gettext } from '@c8y/ngx-components';
|
|
12
13
|
import * as i0 from "@angular/core";
|
|
13
14
|
import * as i1 from "./group-node.service";
|
|
14
15
|
import * as i2 from "@c8y/client";
|
|
@@ -89,6 +90,7 @@ export class AssetSelectorComponent extends AssetSelectorBase {
|
|
|
89
90
|
* Returns the current header hight in pixel.
|
|
90
91
|
*/
|
|
91
92
|
this.getHeaderHeight$ = new BehaviorSubject(0);
|
|
93
|
+
this.ASSET_CONST = gettext('Asset {{ assetId }}');
|
|
92
94
|
}
|
|
93
95
|
/**
|
|
94
96
|
* Checks when a node was selected, if a new column needs to be added.
|
|
@@ -303,7 +305,7 @@ export class AssetSelectorComponent extends AssetSelectorBase {
|
|
|
303
305
|
useExisting: forwardRef(() => AssetSelectorComponent),
|
|
304
306
|
multi: true
|
|
305
307
|
}
|
|
306
|
-
], viewQueries: [{ propertyName: "header", first: true, predicate: ["header"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"bg-inherit p-t-8 p-b-8 separator-bottom p-r-16 p-l-16 sticky-top\"\n
|
|
308
|
+
], viewQueries: [{ propertyName: "header", first: true, predicate: ["header"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"bg-inherit p-t-8 p-b-8 separator-bottom p-r-16 p-l-16 sticky-top\"\n [ngStyle]=\"{ 'z-index': config.singleColumn && config.search ? '30' : '20' }\"\n #header\n [ngClass]=\"{\n 'p-absolute miller-column__selection d-flex flex-wrap a-i-center': config.view === 'miller',\n 'miller-column__search': config.search,\n 'miller-column__multi': config.multi\n }\"\n *ngIf=\"\n !selectedDevice &&\n index === 0 &&\n (config.search || config.multi || config.label?.length || config.showSelected)\n \"\n>\n <p\n class=\"text-medium flex-no-shrink a-s-center\"\n [ngClass]=\"{\n 'm-b-4': config.search && root && config.singleColumn,\n 'm-r-8': !config.singleColumn && !config.search,\n 'fit-w': config.singleColumn\n }\"\n *ngIf=\"config.label?.length\"\n >\n {{ config.label | translate }}\n </p>\n <c8y-search-input\n [ngStyle]=\"{ 'min-width': !config.singleColumn && config.label.length ? '50%' : 'inherit' }\"\n *ngIf=\"config.search && root\"\n (onClick)=\"onSearchResultClick($event)\"\n (reset)=\"onSearchResultReset($event)\"\n [mode]=\"'select'\"\n [container]=\"container\"\n [groupsOnly]=\"config.groupsOnly\"\n [ngClass]=\"{\n 'm-l-auto': !config.singleColumn && config.label.length,\n 'fit-w': config.singleColumn || !config.label.length\n }\"\n ></c8y-search-input>\n <div\n class=\"bg-inherit d-flex gap-4 fit-w\"\n *ngIf=\"config.showSelected\"\n [ngClass]=\"{ 'm-t-4': config.search }\"\n >\n <span class=\"text-label-small m-r-4 a-s-center l-h-1\">{{ 'Selected' | translate }}</span>\n <div class=\"flex-grow inner-scroll d-flex gap-4 a-i-center\">\n <ng-container *ngIf=\"!selected.length\">\n <em class=\"text-12 text-muted d-flex a-i-center fit-h-20\">{{ 'None' | translate }}</em>\n </ng-container>\n <span\n class=\"label label-info chip\"\n *ngFor=\"let selectedItem of selected\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ selectedItem.name }}\"\n type=\"button\"\n (click)=\"config.multi ? deselect(selectedItem) : deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ selectedItem.name || (ASSET_CONST | translate: { assetId: selectedItem.id }) }}\n </span>\n </div>\n </div>\n</div>\n\n<div\n class=\"p-r-16\"\n *ngIf=\"selectedDevice\"\n>\n <div class=\"d-flex p-b-4\">\n <p\n class=\"text-medium p-t-8 m-r-8\"\n *ngIf=\"selectedDevice; else multiAssets\"\n >\n {{ 'Selected asset' | translate }}\n </p>\n <ng-template #multiAssets>\n <p class=\"text-medium m-r-8\">{{ 'Selected assets' | translate }}</p>\n </ng-template>\n <button\n class=\"btn btn-default btn-xs a-s-center m-t-4 m-l-auto\"\n title=\"{{ 'Change' | translate }}\"\n type=\"button\"\n (click)=\"clearSelectedDevices()\"\n >\n {{ 'Change' | translate }}\n </button>\n </div>\n <div class=\"d-flex\">\n <i\n class=\"text-success p-l-0 p-r-8\"\n [c8yIcon]=\"'check-circle'\"\n ></i>\n <i\n class=\"m-r-4 icon-20\"\n [c8yIcon]=\"selectedDevice | getGroupIcon | async\"\n ></i>\n <span>{{ selectedDevice.name }}</span>\n </div>\n</div>\n\n<!-- miller columns header -->\n<div\n class=\"miller-column__header sticky-top bg-inherit separator-bottom\"\n *ngIf=\"\n config.view === 'miller' &&\n ((config.showFilter && !rootNode.root) || config.columnHeaders) &&\n !selectedDevice\n \"\n [ngClass]=\"{ 'p-t-8': config.search }\"\n>\n <p\n class=\"text-12 text-muted text-truncate m-b-4\"\n title=\"{{ rootNode.breadcrumb || rootNode.label | translate }}\"\n *ngIf=\"config.singleColumn && index !== 0\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"home\"\n ></i>\n {{ rootNode.breadcrumb || rootNode.label | translate }}\n </p>\n <div\n class=\"d-flex a-i-center\"\n *ngIf=\"config.columnHeaders || config.singleColumn\"\n >\n <button\n class=\"btn btn-default btn-xs m-r-8 p-t-0 p-b-0 p-l-4 p-r-4 l-h-1\"\n title=\"{{ 'Back' | translate }}\"\n type=\"button\"\n *ngIf=\"config.singleColumn && !rootNode.root && index !== 0\"\n (click)=\"back()\"\n >\n <i c8yIcon=\"angle-left\"></i>\n </button>\n <label\n class=\"c8y-radio checkbox-inline m-r-8\"\n *ngIf=\"!rootNode.root && index === 0 && (config.groupsSelectable || !rootNode.isGroup())\"\n >\n <input\n title=\"{{ 'Select group' | translate }}\"\n type=\"radio\"\n (change)=\"select(rootNode.mo)\"\n [checked]=\"isGroupSelected()\"\n />\n <span></span>\n </label>\n\n <i\n class=\"icon-20 c8y-icon-duocolor m-r-4\"\n [c8yIcon]=\"this.rootNode.mo | getGroupIcon: true : this.rootNode.icon | async\"\n *ngIf=\"config.columnHeaders && (config.singleColumn || (!rootNode.root && index === 0))\"\n ></i>\n <p\n class=\"text-truncate\"\n title=\"{{ rootNode.label | translate }}\"\n *ngIf=\"config.columnHeaders\"\n [ngClass]=\"{\n 'text-label-small': !config.singleColumn,\n 'text-medium': config.singleColumn\n }\"\n >\n {{ rootNode.label | translate }}\n </p>\n </div>\n\n <div\n *ngIf=\"!rootNode.root && config.showFilter\"\n [ngClass]=\"{ 'p-t-4': config.columnHeaders }\"\n >\n <div class=\"input-group input-group-sm input-group-search\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Filter this column\u2026' | translate }}\"\n [(ngModel)]=\"filterText\"\n (keyup.enter)=\"applyFilter('*' + filterText + '*')\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot p-r-8 p-l-4\"\n title=\"{{ 'Apply filter' | translate }}\"\n type=\"button\"\n (click)=\"applyFilter('*' + filterText + '*')\"\n >\n <i c8yIcon=\"filter\"></i>\n </button>\n <button\n class=\"btn btn-dot p-r-8 p-l-4\"\n title=\" {{ 'Clear filters' | translate }}\"\n type=\"button\"\n (click)=\"clearFilters()\"\n *ngIf=\"filterText.length\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </span>\n </div>\n </div>\n</div>\n\n<c8y-asset-selector-node\n class=\"d-block bg-inherit p-relative\"\n style=\"z-index: 9\"\n *ngIf=\"rootNode && !selectedDevice\"\n [node]=\"rootNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"selected\"\n [multi]=\"config.multi\"\n [view]=\"config.view\"\n [index]=\"index\"\n [active]=\"active\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn.bind(this)\"\n (isLoadingState)=\"onLoading($event)\"\n (onSelect)=\"onSelect($event)\"\n (onDeselect)=\"onDeselect($event)\"\n [ngClass]=\"{ 'collapse show': !rootNode.root && !rootNode.hidden && config.view !== 'miller' }\"\n></c8y-asset-selector-node>\n", dependencies: [{ kind: "directive", type: i4.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.SearchInputComponent, selector: "c8y-search-input", inputs: ["mode", "enableCustomTemplatePlaceholder", "customPlaceholder", "externalTerm", "customDataQuery", "container", "groupsOnly"], outputs: ["filter", "search", "reset", "onClick"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.AssetSelectorNodeComponent, selector: "c8y-asset-selector-node", inputs: ["node", "rootNode", "preselected", "showPath", "multi", "view", "index", "active", "handleNextMillerViewColumn"], outputs: ["isLoadingState", "onSelect", "onDeselect"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.GetGroupIconPipe, name: "getGroupIcon" }] }); }
|
|
307
309
|
}
|
|
308
310
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: AssetSelectorComponent, decorators: [{
|
|
309
311
|
type: Component,
|
|
@@ -318,7 +320,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
318
320
|
useExisting: forwardRef(() => AssetSelectorComponent),
|
|
319
321
|
multi: true
|
|
320
322
|
}
|
|
321
|
-
], template: "<div\n class=\"bg-inherit p-t-8 p-b-8 separator-bottom p-r-16 p-l-16 sticky-top\"\n
|
|
323
|
+
], template: "<div\n class=\"bg-inherit p-t-8 p-b-8 separator-bottom p-r-16 p-l-16 sticky-top\"\n [ngStyle]=\"{ 'z-index': config.singleColumn && config.search ? '30' : '20' }\"\n #header\n [ngClass]=\"{\n 'p-absolute miller-column__selection d-flex flex-wrap a-i-center': config.view === 'miller',\n 'miller-column__search': config.search,\n 'miller-column__multi': config.multi\n }\"\n *ngIf=\"\n !selectedDevice &&\n index === 0 &&\n (config.search || config.multi || config.label?.length || config.showSelected)\n \"\n>\n <p\n class=\"text-medium flex-no-shrink a-s-center\"\n [ngClass]=\"{\n 'm-b-4': config.search && root && config.singleColumn,\n 'm-r-8': !config.singleColumn && !config.search,\n 'fit-w': config.singleColumn\n }\"\n *ngIf=\"config.label?.length\"\n >\n {{ config.label | translate }}\n </p>\n <c8y-search-input\n [ngStyle]=\"{ 'min-width': !config.singleColumn && config.label.length ? '50%' : 'inherit' }\"\n *ngIf=\"config.search && root\"\n (onClick)=\"onSearchResultClick($event)\"\n (reset)=\"onSearchResultReset($event)\"\n [mode]=\"'select'\"\n [container]=\"container\"\n [groupsOnly]=\"config.groupsOnly\"\n [ngClass]=\"{\n 'm-l-auto': !config.singleColumn && config.label.length,\n 'fit-w': config.singleColumn || !config.label.length\n }\"\n ></c8y-search-input>\n <div\n class=\"bg-inherit d-flex gap-4 fit-w\"\n *ngIf=\"config.showSelected\"\n [ngClass]=\"{ 'm-t-4': config.search }\"\n >\n <span class=\"text-label-small m-r-4 a-s-center l-h-1\">{{ 'Selected' | translate }}</span>\n <div class=\"flex-grow inner-scroll d-flex gap-4 a-i-center\">\n <ng-container *ngIf=\"!selected.length\">\n <em class=\"text-12 text-muted d-flex a-i-center fit-h-20\">{{ 'None' | translate }}</em>\n </ng-container>\n <span\n class=\"label label-info chip\"\n *ngFor=\"let selectedItem of selected\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ selectedItem.name }}\"\n type=\"button\"\n (click)=\"config.multi ? deselect(selectedItem) : deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ selectedItem.name || (ASSET_CONST | translate: { assetId: selectedItem.id }) }}\n </span>\n </div>\n </div>\n</div>\n\n<div\n class=\"p-r-16\"\n *ngIf=\"selectedDevice\"\n>\n <div class=\"d-flex p-b-4\">\n <p\n class=\"text-medium p-t-8 m-r-8\"\n *ngIf=\"selectedDevice; else multiAssets\"\n >\n {{ 'Selected asset' | translate }}\n </p>\n <ng-template #multiAssets>\n <p class=\"text-medium m-r-8\">{{ 'Selected assets' | translate }}</p>\n </ng-template>\n <button\n class=\"btn btn-default btn-xs a-s-center m-t-4 m-l-auto\"\n title=\"{{ 'Change' | translate }}\"\n type=\"button\"\n (click)=\"clearSelectedDevices()\"\n >\n {{ 'Change' | translate }}\n </button>\n </div>\n <div class=\"d-flex\">\n <i\n class=\"text-success p-l-0 p-r-8\"\n [c8yIcon]=\"'check-circle'\"\n ></i>\n <i\n class=\"m-r-4 icon-20\"\n [c8yIcon]=\"selectedDevice | getGroupIcon | async\"\n ></i>\n <span>{{ selectedDevice.name }}</span>\n </div>\n</div>\n\n<!-- miller columns header -->\n<div\n class=\"miller-column__header sticky-top bg-inherit separator-bottom\"\n *ngIf=\"\n config.view === 'miller' &&\n ((config.showFilter && !rootNode.root) || config.columnHeaders) &&\n !selectedDevice\n \"\n [ngClass]=\"{ 'p-t-8': config.search }\"\n>\n <p\n class=\"text-12 text-muted text-truncate m-b-4\"\n title=\"{{ rootNode.breadcrumb || rootNode.label | translate }}\"\n *ngIf=\"config.singleColumn && index !== 0\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"home\"\n ></i>\n {{ rootNode.breadcrumb || rootNode.label | translate }}\n </p>\n <div\n class=\"d-flex a-i-center\"\n *ngIf=\"config.columnHeaders || config.singleColumn\"\n >\n <button\n class=\"btn btn-default btn-xs m-r-8 p-t-0 p-b-0 p-l-4 p-r-4 l-h-1\"\n title=\"{{ 'Back' | translate }}\"\n type=\"button\"\n *ngIf=\"config.singleColumn && !rootNode.root && index !== 0\"\n (click)=\"back()\"\n >\n <i c8yIcon=\"angle-left\"></i>\n </button>\n <label\n class=\"c8y-radio checkbox-inline m-r-8\"\n *ngIf=\"!rootNode.root && index === 0 && (config.groupsSelectable || !rootNode.isGroup())\"\n >\n <input\n title=\"{{ 'Select group' | translate }}\"\n type=\"radio\"\n (change)=\"select(rootNode.mo)\"\n [checked]=\"isGroupSelected()\"\n />\n <span></span>\n </label>\n\n <i\n class=\"icon-20 c8y-icon-duocolor m-r-4\"\n [c8yIcon]=\"this.rootNode.mo | getGroupIcon: true : this.rootNode.icon | async\"\n *ngIf=\"config.columnHeaders && (config.singleColumn || (!rootNode.root && index === 0))\"\n ></i>\n <p\n class=\"text-truncate\"\n title=\"{{ rootNode.label | translate }}\"\n *ngIf=\"config.columnHeaders\"\n [ngClass]=\"{\n 'text-label-small': !config.singleColumn,\n 'text-medium': config.singleColumn\n }\"\n >\n {{ rootNode.label | translate }}\n </p>\n </div>\n\n <div\n *ngIf=\"!rootNode.root && config.showFilter\"\n [ngClass]=\"{ 'p-t-4': config.columnHeaders }\"\n >\n <div class=\"input-group input-group-sm input-group-search\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Filter this column\u2026' | translate }}\"\n [(ngModel)]=\"filterText\"\n (keyup.enter)=\"applyFilter('*' + filterText + '*')\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot p-r-8 p-l-4\"\n title=\"{{ 'Apply filter' | translate }}\"\n type=\"button\"\n (click)=\"applyFilter('*' + filterText + '*')\"\n >\n <i c8yIcon=\"filter\"></i>\n </button>\n <button\n class=\"btn btn-dot p-r-8 p-l-4\"\n title=\" {{ 'Clear filters' | translate }}\"\n type=\"button\"\n (click)=\"clearFilters()\"\n *ngIf=\"filterText.length\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </span>\n </div>\n </div>\n</div>\n\n<c8y-asset-selector-node\n class=\"d-block bg-inherit p-relative\"\n style=\"z-index: 9\"\n *ngIf=\"rootNode && !selectedDevice\"\n [node]=\"rootNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"selected\"\n [multi]=\"config.multi\"\n [view]=\"config.view\"\n [index]=\"index\"\n [active]=\"active\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn.bind(this)\"\n (isLoadingState)=\"onLoading($event)\"\n (onSelect)=\"onSelect($event)\"\n (onDeselect)=\"onDeselect($event)\"\n [ngClass]=\"{ 'collapse show': !rootNode.root && !rootNode.hidden && config.view !== 'miller' }\"\n></c8y-asset-selector-node>\n" }]
|
|
322
324
|
}], ctorParameters: () => [{ type: i1.GroupNodeService }, { type: i2.InventoryService }, { type: i3.AssetSelectorService }, { type: i0.ChangeDetectorRef }], propDecorators: { config: [{
|
|
323
325
|
type: Input
|
|
324
326
|
}], active: [{
|
|
@@ -349,4 +351,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
349
351
|
type: ViewChild,
|
|
350
352
|
args: ['header']
|
|
351
353
|
}] } });
|
|
352
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXNzZXRzLW5hdmlnYXRvci9hc3NldC1zZWxlY3Rvci9hc3NldC1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9hc3NldHMtbmF2aWdhdG9yL2Fzc2V0LXNlbGVjdG9yL2Fzc2V0LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsVUFBVSxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQStCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUdMLHNCQUFzQixFQUN2QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7OztBQUVsRTs7R0FFRztBQWlCSCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsaUJBQWlCO0lBd0UzRDs7T0FF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YUFDdEQ7WUFDRDtnQkFDRSxPQUFPLEVBQUUsYUFBYTtnQkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDckQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLHdLQzVDSCxzeE5BdU5BOzsyRkR6S2Esc0JBQXNCO2tCQWhCbEMsU0FBUzsrQkFDRSxvQkFBb0IsYUFFbkI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUM7eUJBQ3REO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQzs0QkFDckQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7dUxBTVEsTUFBTTtzQkFBZCxLQUFLO2dCQUlHLE1BQU07c0JBQWQsS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUlHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFJSSxVQUFVO3NCQUFuQixNQUFNO2dCQUlHLGVBQWU7c0JBQXhCLE1BQU07Z0JBSUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFJRyxNQUFNO3NCQUFmLE1BQU07Z0JBb0JDLE1BQU07c0JBRGIsU0FBUzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUlkZW50aWZpZWQsIElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFzc2V0U2VsZWN0b3JCYXNlIH0gZnJvbSAnLi9hc3NldC1zZWxlY3Rvci1iYXNlJztcbmltcG9ydCB7XG4gIEFzc2V0U2VsZWN0aW9uQ2hhbmdlRXZlbnQsXG4gIEFzc2V0U2VsZWN0b3JPcHRpb25zLFxuICBDT05GSUdfT1BUSU9OU19ERUZBVUxUXG59IGZyb20gJy4vYXNzZXQtc2VsZWN0b3IubW9kZWwnO1xuaW1wb3J0IHsgQXNzZXRTZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuL2Fzc2V0LXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JvdXBOb2RlIH0gZnJvbSAnLi9ncm91cC1ub2RlJztcbmltcG9ydCB7IEdyb3VwTm9kZVNlcnZpY2UgfSBmcm9tICcuL2dyb3VwLW5vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBVbmFzc2lnbmVkRGV2aWNlc05vZGUgfSBmcm9tICcuL3VuYXNzaWduZWQtZGV2aWNlcy1ub2RlJztcblxuLyoqXG4gKiBEaXNwbGF5cyBhIGhpZXJhcmNoaWNhbCB0cmVlIHNlbGVjdG9yIGZvciBhc3NldHMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hc3NldC1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NldC1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBc3NldFNlbGVjdG9yQ29tcG9uZW50KVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFzc2V0U2VsZWN0b3JDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQXNzZXRTZWxlY3RvckNvbXBvbmVudCBleHRlbmRzIEFzc2V0U2VsZWN0b3JCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIENvbmZpZyBvYmplY3QgY29udGFpbmluZyBhbGwgb3B0aW9ucyBmb3IgdGhlIGFzc2V0IHNlbGVjdG9yLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnOiBBc3NldFNlbGVjdG9yT3B0aW9ucyA9IHt9O1xuICAvKipcbiAgICogRGVmaW5lcyB0aGUgbm9kZSwgd2hpY2ggc2hvdWxkIGJlIGRpc3BsYXllZCBhcyBhY3RpdmUuXG4gICAqL1xuICBASW5wdXQoKSBhY3RpdmU6IEdyb3VwTm9kZTtcbiAgLyoqXG4gICAqIFVzZWQgb25seSBmb3IgbWlsbGVyLXZpZXcsIGRpc3BsYXlzIHRoZSBjb2x1bW4gbGV2ZWwgZm9yIHRoZSBjdXJyZW50IG5vZGUuXG4gICAqIEUuZyBpZiB0aGUgaW5kZXggaXMgb25lLCB0aGlzIHdpbGwgYmUgc2Vjb25kIGNvbHVtbi5cbiAgICovXG4gIEBJbnB1dCgpIGluZGV4ID0gMDtcbiAgLyoqXG4gICAqIFRoZSBhc3NldCB0byB1c2UgYXMgcm9vdC5cbiAgICovXG4gIEBJbnB1dCgpIGFzc2V0OiBJSWRlbnRpZmllZCA9IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBzZWxlY3RlZCBkZXZpY2UuXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RlZERldmljZTogSU1hbmFnZWRPYmplY3QgPSB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBwcmVkZWZpbmVkIG5vZGVzLlxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0ZWQ6IEFycmF5PFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+PiB8IElJZGVudGlmaWVkW10gfCBJSWRlbnRpZmllZCA9IFtdO1xuICAvKipcbiAgICogVGhlIG5vZGUgdG8gdXNlIGFzIHJvb3QuIFlvdSBjYW4gZWl0aGVyIHNldCB0aGlzLCBvciB0aGUgYXNzZXQgdG8gc3RhcnQgZnJvbS5cbiAgICovXG4gIEBJbnB1dCgpIHJvb3ROb2RlOiBHcm91cE5vZGU7XG4gIC8qKlxuICAgKiBBbGwgY3VycmVudGx5IHNlbGVjdGVkIGFzc2V0cy5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IElJZGVudGlmaWVkW10gfCBJSWRlbnRpZmllZCA9IFtdO1xuICBASW5wdXQoKSBjb250YWluZXI6ICcnIHwgJ2JvZHknID0gJ2JvZHknO1xuICAvKipcbiAgICogRW1pdHMgaWYgb25lIGl0ZW0gd2FzIHNlbGVjdGVkIChhbGwgY3VycmVudGx5IHNlbGVjdGVkIG5vZGVzKS5cbiAgICovXG4gIEBPdXRwdXQoKSBvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBc3NldFNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuICAvKipcbiAgICogRW1pdHMgaWYgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBhc3NldCBpcyBjbGVhcmVkLlxuICAgKi9cbiAgQE91dHB1dCgpIG9uQ2xlYXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIFVzZWQgb25seSBmb3IgbWlsbGVyIHZpZXcuIEVtaXQgdGhlIHNlbGVjdGVkIG5vZGUgYW5kIHVzZSBpdCBhcyBhICdyb290Tm9kZScgZm9yIHRoZSBuZXcgY29sdW1uLlxuICAgKi9cbiAgQE91dHB1dCgpIG9uUm93U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBjdXJyZW50IGxvYWRpbmcgc3RhdGUgb2YgdGhlIG5vZGUuXG4gICAqL1xuICBAT3V0cHV0KCkgb25Mb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBmaWx0ZXIgYXBwbGllZC5cbiAgICovXG4gIGZpbHRlclRleHQgPSAnJztcbiAgLyoqXG4gICAqIERpc3BsYXlzIHRoZSBnbG9iYWwgc2VhcmNoIGF0IGFsbCB0aW1lcyBpZiB0aGUgbWlsbGVyIHZpZXcgaXMgdXNlZFxuICAgKiBvbiByb290IGdyb3VwIGxldmVsLlxuICAgKi9cbiAgcm9vdCA9IGZhbHNlO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgaGVhZGVyIGhpZ2h0IGluIHBpeGVsLlxuICAgKi9cbiAgZ2V0SGVhZGVySGVpZ2h0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG5cbiAgQFZpZXdDaGlsZCgnaGVhZGVyJylcbiAgcHJpdmF0ZSBoZWFkZXI6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmUgb25seSBESVxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGdyb3VwTm9kZVNlcnZpY2U6IEdyb3VwTm9kZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGludmVudG9yeTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYXNzZXRTZWxlY3RvclNlcnZpY2U6IEFzc2V0U2VsZWN0b3JTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgc3VwZXIoZ3JvdXBOb2RlU2VydmljZSwgaW52ZW50b3J5LCBhc3NldFNlbGVjdG9yU2VydmljZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZW4gYSBub2RlIHdhcyBzZWxlY3RlZCwgaWYgYSBuZXcgY29sdW1uIG5lZWRzIHRvIGJlIGFkZGVkLlxuICAgKiBAcGFyYW0gbm9kZSBUaGUgbm9kZSB0aGF0IHdhcyBjbGlja2VkLlxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhpcyBub2RlLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjbGljayB3YXMgaGFuZGxlZCBhbmQgYSBuZXcgY29sdW1uIHdhcyBhZGRlZC5cbiAgICovXG4gIGhhbmRsZU5leHRNaWxsZXJWaWV3Q29sdW1uKG5vZGU6IEdyb3VwTm9kZSwgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IG5vZGVDb3B5ID0gT2JqZWN0LmNyZWF0ZShub2RlKTtcbiAgICBjb25zdCBpc1NhbWVBc1Jvb3QgPSB0aGlzLnJvb3ROb2RlID09PSBub2RlO1xuICAgIGNvbnN0IGlzVW5hc3NpZ25lZERldmljZXNOb2RlID0gbm9kZS50b1N0cmluZygpID09PSBVbmFzc2lnbmVkRGV2aWNlc05vZGUuTkFNRTtcbiAgICBjb25zdCBpc05ld0NvbHVtbk5lZWRlZCA9XG4gICAgICAhaXNTYW1lQXNSb290ICYmIChub2RlLmlzR3JvdXAoKSB8fCBpc1VuYXNzaWduZWREZXZpY2VzTm9kZSB8fCBub2RlLmhhc0NoaWxkRGV2aWNlcygpKTtcblxuICAgIGlmIChpc05ld0NvbHVtbk5lZWRlZCkge1xuICAgICAgdGhpcy5vblJvd1NlbGVjdGVkLmVtaXQoeyBub2RlQ29weSwgaW5kZXggfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLmNvbmZpZyA9IHsgLi4uQ09ORklHX09QVElPTlNfREVGQVVMVCwgLi4udGhpcy5jb25maWcgfTtcbiAgICB9XG4gICAgY29uc3Qgc2hvdWxkUmVzZXROYW1lRmlsdGVyID1cbiAgICAgIHRoaXMucm9vdE5vZGUgJiYgdGhpcy5yb290Tm9kZS5tbyAmJiB0aGlzLmNvbmZpZy52aWV3ID09PSAnbWlsbGVyJztcbiAgICBpZiAoc2hvdWxkUmVzZXROYW1lRmlsdGVyKSB7XG4gICAgICBhd2FpdCB0aGlzLmFwcGx5RmlsdGVyKCcnKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc09ubHlBc3NldE5vZGVEZWZpbmVkID0gdGhpcy5hc3NldDtcbiAgICBpZiAoaXNPbmx5QXNzZXROb2RlRGVmaW5lZCkge1xuICAgICAgdGhpcy5yb290Tm9kZSA9IGF3YWl0IHRoaXMuY3JlYXRlTWFuYWdlZE9iamVjdFJvb3ROb2RlKHRoaXMuYXNzZXQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzQW55Tm9kZURlZmluZWQgPVxuICAgICAgIXRoaXMucm9vdE5vZGUgJiYgKCF0aGlzLmFzc2V0IHx8IE9iamVjdC5rZXlzKHRoaXMuYXNzZXQpLmxlbmd0aCA9PT0gMCk7XG4gICAgaWYgKGlzQW55Tm9kZURlZmluZWQpIHtcbiAgICAgIHRoaXMucm9vdE5vZGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRSb290Tm9kZSgpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuY29uZmlnLnNob3dVbmFzc2lnbmVkRGV2aWNlcyAmJlxuICAgICAgKCF0aGlzLmFzc2V0IHx8IE9iamVjdC5rZXlzKHRoaXMuYXNzZXQpLmxlbmd0aCA9PT0gMCkgJiZcbiAgICAgIHRoaXMucm9vdE5vZGUucm9vdFxuICAgICkge1xuICAgICAgdGhpcy5yb290Tm9kZS5hZGQoXG4gICAgICAgIG5ldyBVbmFzc2lnbmVkRGV2aWNlc05vZGUodGhpcy5ncm91cE5vZGVTZXJ2aWNlLCB7XG4gICAgICAgICAgc2hvd0NoaWxkRGV2aWNlczogdGhpcy5jb25maWcuc2hvd0NoaWxkRGV2aWNlc1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5yb290ID0gdGhpcy5yb290Tm9kZS5yb290O1xuICB9XG5cbiAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChcbiAgICAgIGNoYW5nZXMuYXNzZXQgJiZcbiAgICAgIGNoYW5nZXMuYXNzZXQuY3VycmVudFZhbHVlICYmXG4gICAgICBPYmplY3Qua2V5cyhjaGFuZ2VzLmFzc2V0LmN1cnJlbnRWYWx1ZSkubGVuZ3RoICE9PSAwXG4gICAgKSB7XG4gICAgICB0aGlzLnJvb3ROb2RlID0gYXdhaXQgdGhpcy5jcmVhdGVNYW5hZ2VkT2JqZWN0Um9vdE5vZGUoY2hhbmdlcy5hc3NldC5jdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmhlYWRlcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLmdldEhlYWRlckhlaWdodCQubmV4dCh0aGlzLmhlYWRlci5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdldEhlYWRlckhlaWdodCQubmV4dCgwKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRoZSBjdXJyZW50IHJvb3QgdG8gb25lIGxldmVsIGJhY2suXG4gICAqL1xuICBiYWNrKCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleCAtIDE7XG4gICAgY29uc3Qgbm9kZUNvcHkgPSBPYmplY3QuY3JlYXRlKHRoaXMucm9vdE5vZGUucGFyZW50c1swXSk7XG4gICAgdGhpcy5vblJvd1NlbGVjdGVkLmVtaXQoeyBub2RlQ29weSwgaW5kZXggfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBjdXJyZW50IGZpbHRlci5cbiAgICovXG4gIGNsZWFyRmlsdGVycygpIHtcbiAgICB0aGlzLmZpbHRlclRleHQgPSAnJztcbiAgICB0aGlzLmFwcGx5RmlsdGVyKCcnKTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0ZWREZXZpY2VzKCkge1xuICAgIHRoaXMuc2VsZWN0ZWREZXZpY2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hcHBseUZpbHRlcignJyk7XG4gICAgdGhpcy5vbkNsZWFyU2VsZWN0ZWQuZW1pdCgpO1xuICB9XG5cbiAgaXNHcm91cFNlbGVjdGVkKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkLnNvbWUoc2VsZWN0ZWROb2RlID0+IHNlbGVjdGVkTm9kZS5pZCA9PT0gdGhpcy5yb290Tm9kZS5tbz8uaWQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ3JvdXBOYW1lRmlsdGVyKG5hbWVGaWx0ZXI6IHN0cmluZywgbW9JZCwgc2hvd1VuYXNzaWduZWREZXZpY2VzPzogYm9vbGVhbikge1xuICAgIGlmIChuYW1lRmlsdGVyKSB7XG4gICAgICBjb25zdCBmaWx0ZXJCeU5hbWUgPSBzaG93VW5hc3NpZ25lZERldmljZXNcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBfX2ZpbHRlcjoge1xuICAgICAgICAgICAgICBuYW1lOiBuYW1lRmlsdGVyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX19vcmRlcmJ5OiBbeyBuYW1lOiAxIH1dXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIF9fZmlsdGVyOiB7XG4gICAgICAgICAgICAgIG5hbWU6IG5hbWVGaWx0ZXIsXG4gICAgICAgICAgICAgIF9fYnlncm91cGlkOiBtb0lkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmFzc2V0U2VsZWN0b3JTZXJ2aWNlLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkoZmlsdGVyQnlOYW1lKTtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IHtcbiAgICAgIF9fZmlsdGVyOiB7XG4gICAgICAgIF9fYnlncm91cGlkOiBtb0lkXG4gICAgICB9LFxuICAgICAgX19vcmRlcmJ5OiBbeyBuYW1lOiAxIH1dXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hc3NldFNlbGVjdG9yU2VydmljZS5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KGRlZmF1bHRGaWx0ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgYSBmaWx0ZXIuXG4gICAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciB0byBhcHBseS5cbiAgICovXG4gIGFzeW5jIGFwcGx5RmlsdGVyKGZpbHRlcjogc3RyaW5nKSB7XG4gICAgdGhpcy5yb290Tm9kZS5maWx0ZXJRdWVyeSQubmV4dChcbiAgICAgIHRoaXMuZ3JvdXBOYW1lRmlsdGVyKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHRoaXMucm9vdE5vZGUubW8uaWQsXG4gICAgICAgIHRoaXMuaXNVbmFzc2lnbmVkRGV2aWNlc05vZGUoKSA/IHRydWUgOiBmYWxzZVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5yb290Tm9kZS5yZWZyZXNoKCk7XG4gICAgdGhpcy5vbkxvYWQuZW1pdCh7XG4gICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgZmlsdGVyVGV4dDogdGhpcy5maWx0ZXJUZXh0LFxuICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICBzZWxlY3RlZERldmljZTogdGhpcy5zZWxlY3RlZERldmljZVxuICAgIH0pO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBVbmFzc2lnbmVkRGV2aWNlIG5vZGUgaXMgdGhlIHJvb3ROb2RlLlxuICAgKi9cbiAgaXNVbmFzc2lnbmVkRGV2aWNlc05vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucm9vdE5vZGUudG9TdHJpbmcoKSA9PT0gVW5hc3NpZ25lZERldmljZXNOb2RlLk5BTUU7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgcmVzZXRzIHRoZSBzZWFyY2ggcmVzdWx0LlxuICAgKi9cbiAgb25TZWFyY2hSZXN1bHRSZXNldChzZWxlY3RlZEl0ZW0pIHtcbiAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICB0aGlzLnJvb3ROb2RlID0gdGhpcy5jcmVhdGVEZWZhdWx0Um9vdE5vZGUoKTtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5zaG93VW5hc3NpZ25lZERldmljZXMpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZS5hZGQoXG4gICAgICAgICAgbmV3IFVuYXNzaWduZWREZXZpY2VzTm9kZSh0aGlzLmdyb3VwTm9kZVNlcnZpY2UsIHtcbiAgICAgICAgICAgIHNob3dDaGlsZERldmljZXM6IHRoaXMuY29uZmlnLnNob3dDaGlsZERldmljZXNcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29uZmlnLnZpZXcgPT09ICdtaWxsZXInKSB7XG4gICAgICAgIHRoaXMub25Sb3dTZWxlY3RlZC5lbWl0KHsgcm9vdDogdHJ1ZSB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yb290Tm9kZS5jbGljayh7IG9wZW46IHRydWUgfSk7XG4gICAgICB0aGlzLnJvb3ROb2RlLm5vZGVzRmV0Y2hlZFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCkpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgIGlmICh0aGlzLmNvbmZpZy52aWV3ID09PSAndHJlZScpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZS5vcGVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGlmIHRoZSB1c2VyIGNsaWNrcyBvbiBhIHNlYXJjaCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBvblNlYXJjaFJlc3VsdENsaWNrKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGNhblNlbGVjdE5vZGUgPSB0aGlzLmNvbmZpZy5ncm91cHNTZWxlY3RhYmxlIHx8ICF0aGlzLmdyb3VwTm9kZVNlcnZpY2UuaXNHcm91cChtbyk7XG4gICAgaWYgKHRoaXMuY29uZmlnLnZpZXcgPT09ICdtaWxsZXInKSB7XG4gICAgICB0aGlzLnJvb3ROb2RlID0gYXdhaXQgdGhpcy5jcmVhdGVNYW5hZ2VkT2JqZWN0Um9vdE5vZGUobW8pO1xuICAgICAgdGhpcy5yb290Tm9kZS5jbGljayh7IG9wZW46IHRydWUgfSk7XG4gICAgICBjb25zdCBub2RlQ29weSA9IE9iamVjdC5jcmVhdGUodGhpcy5yb290Tm9kZSk7XG4gICAgICB0aGlzLm9uUm93U2VsZWN0ZWQuZW1pdCh7XG4gICAgICAgIG5vZGVDb3B5LFxuICAgICAgICBpbmRleDogMCxcbiAgICAgICAgc2VsZWN0ZWREZXZpY2VzOiB0aGlzLnNlbGVjdGVkRGV2aWNlLFxuICAgICAgICByb290OiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5tdWx0aSkge1xuICAgICAgdGhpcy5kZXNlbGVjdEFsbCgpO1xuICAgIH1cbiAgICBpZiAoY2FuU2VsZWN0Tm9kZSkge1xuICAgICAgdGhpcy5zZWxlY3QobW8pO1xuICAgIH1cbiAgfVxuXG4gIG9uTG9hZGluZyhpc0xvYWRpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm9uTG9hZC5lbWl0KHsgbG9hZGluZzogaXNMb2FkaW5nLCBmaWx0ZXJUZXh0OiB0aGlzLmZpbHRlclRleHQgfSk7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uU2VsZWN0KG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHRoaXMuc2VsZWN0KG1vKTtcbiAgfVxuXG4gIG9uRGVzZWxlY3QoY29uZmlnOiB7IGRlc2VsZWN0TW9kZTogJ3NpbmdsZScgfCAnYWxsJzsgbW86IElNYW5hZ2VkT2JqZWN0IH0pIHtcbiAgICBzd2l0Y2ggKGNvbmZpZz8uZGVzZWxlY3RNb2RlKSB7XG4gICAgICBjYXNlICdzaW5nbGUnOlxuICAgICAgICB0aGlzLmRlc2VsZWN0KGNvbmZpZy5tbyk7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYWxsJzpcbiAgICAgICAgdGhpcy5kZXNlbGVjdEFsbChjb25maWcubW8pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJiZy1pbmhlcml0IHAtdC04IHAtYi04IHNlcGFyYXRvci1ib3R0b20gcC1yLTE2IHAtbC0xNiBzdGlja3ktdG9wXCJcbiAgI2hlYWRlclxuICBbbmdTdHlsZV09XCJ7ICd6LWluZGV4JzogY29uZmlnLnNpbmdsZUNvbHVtbiAmJiBjb25maWcuc2VhcmNoID8gJzMwJyA6ICcyMCcgfVwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAncC1hYnNvbHV0ZSBtaWxsZXItY29sdW1uX19zZWxlY3Rpb24gZC1mbGV4IGZsZXgtd3JhcCBhLWktY2VudGVyJzogY29uZmlnLnZpZXcgPT09ICdtaWxsZXInLFxuICAgICdtaWxsZXItY29sdW1uX19zZWFyY2gnOiBjb25maWcuc2VhcmNoLFxuICAgICdtaWxsZXItY29sdW1uX19tdWx0aSc6IGNvbmZpZy5tdWx0aVxuICB9XCJcbiAgKm5nSWY9XCIhc2VsZWN0ZWREZXZpY2UgJiYgaW5kZXggPT09IDAgJiYgKGNvbmZpZy5zZWFyY2ggfHwgY29uZmlnLm11bHRpIHx8IGNvbmZpZy5sYWJlbD8ubGVuZ3RoIHx8IGNvbmZpZy5zaG93U2VsZWN0ZWQpXCJcbj5cbiAgPHBcbiAgICBjbGFzcz1cInRleHQtbWVkaXVtIGZsZXgtbm8tc2hyaW5rIGEtcy1jZW50ZXJcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdtLWItNCc6IGNvbmZpZy5zZWFyY2ggJiYgcm9vdCAmJiBjb25maWcuc2luZ2xlQ29sdW1uLFxuICAgICAgJ20tci04JzogIWNvbmZpZy5zaW5nbGVDb2x1bW4gJiYgIWNvbmZpZy5zZWFyY2gsXG4gICAgICAnZml0LXcnOiBjb25maWcuc2luZ2xlQ29sdW1uXG4gICAgfVwiXG4gICAgKm5nSWY9XCJjb25maWcubGFiZWw/Lmxlbmd0aFwiXG4gID5cbiAgICB7eyBjb25maWcubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgPC9wPlxuICA8Yzh5LXNlYXJjaC1pbnB1dFxuICAgIFtuZ1N0eWxlXT1cInsgJ21pbi13aWR0aCc6ICFjb25maWcuc2luZ2xlQ29sdW1uICYmIGNvbmZpZy5sYWJlbC5sZW5ndGggPyAnNTAlJyA6ICdpbmhlcml0JyB9XCJcbiAgICAqbmdJZj1cImNvbmZpZy5zZWFyY2ggJiYgcm9vdFwiXG4gICAgKG9uQ2xpY2spPVwib25TZWFyY2hSZXN1bHRDbGljaygkZXZlbnQpXCJcbiAgICAocmVzZXQpPVwib25TZWFyY2hSZXN1bHRSZXNldCgkZXZlbnQpXCJcbiAgICBbbW9kZV09XCInc2VsZWN0J1wiXG4gICAgW2NvbnRhaW5lcl09XCJjb250YWluZXJcIlxuICAgIFtncm91cHNPbmx5XT1cImNvbmZpZy5ncm91cHNPbmx5XCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnbS1sLWF1dG8nOiAhY29uZmlnLnNpbmdsZUNvbHVtbiAmJiBjb25maWcubGFiZWwubGVuZ3RoLFxuICAgICAgJ2ZpdC13JzogY29uZmlnLnNpbmdsZUNvbHVtbiB8fCAhY29uZmlnLmxhYmVsLmxlbmd0aFxuICAgIH1cIlxuICA+PC9jOHktc2VhcmNoLWlucHV0PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJiZy1pbmhlcml0IGQtZmxleCBnYXAtNCBmaXQtd1wiXG4gICAgKm5nSWY9XCJjb25maWcuc2hvd1NlbGVjdGVkXCJcbiAgICBbbmdDbGFzc109XCJ7ICdtLXQtNCc6IGNvbmZpZy5zZWFyY2ggfVwiXG4gID5cbiAgICA8c3BhbiBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1yLTQgYS1zLWNlbnRlciBsLWgtMVwiPnt7ICdTZWxlY3RlZCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgtZ3JvdyBpbm5lci1zY3JvbGwgZC1mbGV4IGdhcC00IGEtaS1jZW50ZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0ZWQubGVuZ3RoXCI+XG4gICAgICAgIDxlbSBjbGFzcz1cInRleHQtMTIgdGV4dC1tdXRlZCBkLWZsZXggYS1pLWNlbnRlciBmaXQtaC0yMFwiPnt7ICdOb25lJyB8IHRyYW5zbGF0ZSB9fTwvZW0+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mbyBjaGlwXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IHNlbGVjdGVkSXRlbSBvZiBzZWxlY3RlZFwiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4teHMgYnRuLWNsZWFuIHRleHQtMTBcIlxuICAgICAgICAgIHRpdGxlPVwie3sgc2VsZWN0ZWRJdGVtLm5hbWUgfX1cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJjb25maWcubXVsdGkgPyBkZXNlbGVjdChzZWxlY3RlZEl0ZW0pIDogZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB7eyBzZWxlY3RlZEl0ZW0ubmFtZSB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2XG4gIGNsYXNzPVwicC1yLTE2XCJcbiAgKm5nSWY9XCJzZWxlY3RlZERldmljZVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggcC1iLTRcIj5cbiAgICA8cFxuICAgICAgY2xhc3M9XCJ0ZXh0LW1lZGl1bSBwLXQtOCBtLXItOFwiXG4gICAgICAqbmdJZj1cInNlbGVjdGVkRGV2aWNlOyBlbHNlIG11bHRpQXNzZXRzXCJcbiAgICA+XG4gICAgICB7eyAnU2VsZWN0ZWQgYXNzZXQnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxuZy10ZW1wbGF0ZSAjbXVsdGlBc3NldHM+XG4gICAgICA8cCBjbGFzcz1cInRleHQtbWVkaXVtIG0tci04XCI+e3sgJ1NlbGVjdGVkIGFzc2V0cycgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4teHMgYS1zLWNlbnRlciBtLXQtNCBtLWwtYXV0b1wiXG4gICAgICB0aXRsZT1cInt7ICdDaGFuZ2UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cImNsZWFyU2VsZWN0ZWREZXZpY2VzKClcIlxuICAgID5cbiAgICAgIHt7ICdDaGFuZ2UnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgPGlcbiAgICAgIGNsYXNzPVwidGV4dC1zdWNjZXNzIHAtbC0wIHAtci04XCJcbiAgICAgIFtjOHlJY29uXT1cIidjaGVjay1jaXJjbGUnXCJcbiAgICA+PC9pPlxuICAgIDxpXG4gICAgICBjbGFzcz1cIm0tci00IGljb24tMjBcIlxuICAgICAgW2M4eUljb25dPVwic2VsZWN0ZWREZXZpY2UgfCBnZXRHcm91cEljb24gfCBhc3luY1wiXG4gICAgPjwvaT5cbiAgICA8c3Bhbj57eyBzZWxlY3RlZERldmljZS5uYW1lIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIG1pbGxlciBjb2x1bW5zIGhlYWRlciAtLT5cbjxkaXZcbiAgY2xhc3M9XCJtaWxsZXItY29sdW1uX19oZWFkZXIgc3RpY2t5LXRvcCBiZy1pbmhlcml0IHNlcGFyYXRvci1ib3R0b21cIlxuICAqbmdJZj1cIlxuICAgIGNvbmZpZy52aWV3ID09PSAnbWlsbGVyJyAmJlxuICAgICgoY29uZmlnLnNob3dGaWx0ZXIgJiYgIXJvb3ROb2RlLnJvb3QpIHx8IGNvbmZpZy5jb2x1bW5IZWFkZXJzKSAmJlxuICAgICFzZWxlY3RlZERldmljZVxuICBcIlxuICBbbmdDbGFzc109XCJ7ICdwLXQtOCc6IGNvbmZpZy5zZWFyY2ggfVwiXG4+XG4gIDxwXG4gICAgY2xhc3M9XCJ0ZXh0LTEyIHRleHQtbXV0ZWQgdGV4dC10cnVuY2F0ZSBtLWItNFwiXG4gICAgdGl0bGU9XCJ7eyByb290Tm9kZS5icmVhZGNydW1iIHx8IHJvb3ROb2RlLmxhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICAqbmdJZj1cImNvbmZpZy5zaW5nbGVDb2x1bW4gJiYgaW5kZXggIT09IDBcIlxuICA+XG4gICAgPGlcbiAgICAgIGNsYXNzPVwibS1yLTRcIlxuICAgICAgYzh5SWNvbj1cImhvbWVcIlxuICAgID48L2k+XG4gICAge3sgcm9vdE5vZGUuYnJlYWRjcnVtYiB8fCByb290Tm9kZS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICA8L3A+XG4gIDxkaXZcbiAgICBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyXCJcbiAgICAqbmdJZj1cImNvbmZpZy5jb2x1bW5IZWFkZXJzIHx8IGNvbmZpZy5zaW5nbGVDb2x1bW5cIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXhzIG0tci04IHAtdC0wIHAtYi0wIHAtbC00IHAtci00IGwtaC0xXCJcbiAgICAgIHRpdGxlPVwie3sgJ0JhY2snIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKm5nSWY9XCJjb25maWcuc2luZ2xlQ29sdW1uICYmICFyb290Tm9kZS5yb290ICYmIGluZGV4ICE9PSAwXCJcbiAgICAgIChjbGljayk9XCJiYWNrKClcIlxuICAgID5cbiAgICAgIDxpIGM4eUljb249XCJhbmdsZS1sZWZ0XCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuICAgIDxsYWJlbFxuICAgICAgY2xhc3M9XCJjOHktcmFkaW8gY2hlY2tib3gtaW5saW5lIG0tci04XCJcbiAgICAgICpuZ0lmPVwiIXJvb3ROb2RlLnJvb3QgJiYgaW5kZXggPT09IDAgJiYgKGNvbmZpZy5ncm91cHNTZWxlY3RhYmxlIHx8ICFyb290Tm9kZS5pc0dyb3VwKCkpXCJcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdGl0bGU9XCJ7eyAnU2VsZWN0IGdyb3VwJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIChjaGFuZ2UpPVwic2VsZWN0KHJvb3ROb2RlLm1vKVwiXG4gICAgICAgIFtjaGVja2VkXT1cImlzR3JvdXBTZWxlY3RlZCgpXCJcbiAgICAgIC8+XG4gICAgICA8c3Bhbj48L3NwYW4+XG4gICAgPC9sYWJlbD5cblxuICAgIDxpXG4gICAgICBjbGFzcz1cImljb24tMjAgYzh5LWljb24tZHVvY29sb3IgbS1yLTRcIlxuICAgICAgW2M4eUljb25dPVwidGhpcy5yb290Tm9kZS5tbyB8IGdldEdyb3VwSWNvbiA6IHRydWUgOiB0aGlzLnJvb3ROb2RlLmljb24gfCBhc3luY1wiXG4gICAgICAqbmdJZj1cImNvbmZpZy5jb2x1bW5IZWFkZXJzICYmIChjb25maWcuc2luZ2xlQ29sdW1uIHx8ICghcm9vdE5vZGUucm9vdCAmJiBpbmRleCA9PT0gMCkpXCJcbiAgICA+PC9pPlxuICAgIDxwXG4gICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICAgdGl0bGU9XCJ7eyByb290Tm9kZS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAqbmdJZj1cImNvbmZpZy5jb2x1bW5IZWFkZXJzXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ3RleHQtbGFiZWwtc21hbGwnOiAhY29uZmlnLnNpbmdsZUNvbHVtbixcbiAgICAgICAgJ3RleHQtbWVkaXVtJzogY29uZmlnLnNpbmdsZUNvbHVtblxuICAgICAgfVwiXG4gICAgPlxuICAgICAge3sgcm9vdE5vZGUubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3A+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICAqbmdJZj1cIiFyb290Tm9kZS5yb290ICYmIGNvbmZpZy5zaG93RmlsdGVyXCJcbiAgICBbbmdDbGFzc109XCJ7ICdwLXQtNCc6IGNvbmZpZy5jb2x1bW5IZWFkZXJzIH1cIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtIGlucHV0LWdyb3VwLXNlYXJjaFwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnRmlsdGVyIHRoaXMgY29sdW1u4oCmJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyVGV4dFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUZpbHRlcignKicgKyBmaWx0ZXJUZXh0ICsgJyonKVwiXG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3QgcC1yLTggcC1sLTRcIlxuICAgICAgICAgIHRpdGxlPVwie3sgJ0FwcGx5IGZpbHRlcicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlcignKicgKyBmaWx0ZXJUZXh0ICsgJyonKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwiZmlsdGVyXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3QgcC1yLTggcC1sLTRcIlxuICAgICAgICAgIHRpdGxlPVwiIHt7ICdDbGVhciBmaWx0ZXJzJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyRmlsdGVycygpXCJcbiAgICAgICAgICAqbmdJZj1cImZpbHRlclRleHQubGVuZ3RoXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGM4eUljb249XCJ0aW1lc1wiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxjOHktYXNzZXQtc2VsZWN0b3Itbm9kZVxuICBjbGFzcz1cImQtYmxvY2sgYmctaW5oZXJpdCBwLXJlbGF0aXZlXCJcbiAgc3R5bGU9XCJ6LWluZGV4OiA5XCJcbiAgKm5nSWY9XCJyb290Tm9kZSAmJiAhc2VsZWN0ZWREZXZpY2VcIlxuICBbbm9kZV09XCJyb290Tm9kZVwiXG4gIFtyb290Tm9kZV09XCJyb290Tm9kZVwiXG4gIFtwcmVzZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gIFttdWx0aV09XCJjb25maWcubXVsdGlcIlxuICBbdmlld109XCJjb25maWcudmlld1wiXG4gIFtpbmRleF09XCJpbmRleFwiXG4gIFthY3RpdmVdPVwiYWN0aXZlXCJcbiAgW2hhbmRsZU5leHRNaWxsZXJWaWV3Q29sdW1uXT1cImhhbmRsZU5leHRNaWxsZXJWaWV3Q29sdW1uLmJpbmQodGhpcylcIlxuICAoaXNMb2FkaW5nU3RhdGUpPVwib25Mb2FkaW5nKCRldmVudClcIlxuICAob25TZWxlY3QpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gIChvbkRlc2VsZWN0KT1cIm9uRGVzZWxlY3QoJGV2ZW50KVwiXG4gIFtuZ0NsYXNzXT1cInsgJ2NvbGxhcHNlIHNob3cnOiAhcm9vdE5vZGUucm9vdCAmJiAhcm9vdE5vZGUuaGlkZGVuICYmIGNvbmZpZy52aWV3ICE9PSAnbWlsbGVyJyB9XCJcbj48L2M4eS1hc3NldC1zZWxlY3Rvci1ub2RlPlxuIl19
|
|
354
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXNzZXRzLW5hdmlnYXRvci9hc3NldC1zZWxlY3Rvci9hc3NldC1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9hc3NldHMtbmF2aWdhdG9yL2Fzc2V0LXNlbGVjdG9yL2Fzc2V0LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsVUFBVSxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQStCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUdMLHNCQUFzQixFQUN2QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7QUFFOUM7O0dBRUc7QUFp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RUFBRSxpQkFBaUI7Z0JBQzFCLEtBQUssRUFBRSxJQUFJO2dCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUM7YUFDdEQ7WUFDRDtnQkFDRSxPQUFPLEVBQUUsYUFBYTtnQkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDckQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLHdLQzdDSCxvMk5BMk5BOzsyRkQ1S2Esc0JBQXNCO2tCQWhCbEMsU0FBUzsrQkFDRSxvQkFBb0IsYUFFbkI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUM7eUJBQ3REO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQzs0QkFDckQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7dUxBTVEsTUFBTTtzQkFBZCxLQUFLO2dCQUlHLE1BQU07c0JBQWQsS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUlHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFJSSxVQUFVO3NCQUFuQixNQUFNO2dCQUlHLGVBQWU7c0JBQXhCLE1BQU07Z0JBSUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFJRyxNQUFNO3NCQUFmLE1BQU07Z0JBcUJDLE1BQU07c0JBRGIsU0FBUzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUlkZW50aWZpZWQsIElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFzc2V0U2VsZWN0b3JCYXNlIH0gZnJvbSAnLi9hc3NldC1zZWxlY3Rvci1iYXNlJztcbmltcG9ydCB7XG4gIEFzc2V0U2VsZWN0aW9uQ2hhbmdlRXZlbnQsXG4gIEFzc2V0U2VsZWN0b3JPcHRpb25zLFxuICBDT05GSUdfT1BUSU9OU19ERUZBVUxUXG59IGZyb20gJy4vYXNzZXQtc2VsZWN0b3IubW9kZWwnO1xuaW1wb3J0IHsgQXNzZXRTZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuL2Fzc2V0LXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JvdXBOb2RlIH0gZnJvbSAnLi9ncm91cC1ub2RlJztcbmltcG9ydCB7IEdyb3VwTm9kZVNlcnZpY2UgfSBmcm9tICcuL2dyb3VwLW5vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBVbmFzc2lnbmVkRGV2aWNlc05vZGUgfSBmcm9tICcuL3VuYXNzaWduZWQtZGV2aWNlcy1ub2RlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxuLyoqXG4gKiBEaXNwbGF5cyBhIGhpZXJhcmNoaWNhbCB0cmVlIHNlbGVjdG9yIGZvciBhc3NldHMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hc3NldC1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NldC1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBc3NldFNlbGVjdG9yQ29tcG9uZW50KVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFzc2V0U2VsZWN0b3JDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQXNzZXRTZWxlY3RvckNvbXBvbmVudCBleHRlbmRzIEFzc2V0U2VsZWN0b3JCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIENvbmZpZyBvYmplY3QgY29udGFpbmluZyBhbGwgb3B0aW9ucyBmb3IgdGhlIGFzc2V0IHNlbGVjdG9yLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnOiBBc3NldFNlbGVjdG9yT3B0aW9ucyA9IHt9O1xuICAvKipcbiAgICogRGVmaW5lcyB0aGUgbm9kZSwgd2hpY2ggc2hvdWxkIGJlIGRpc3BsYXllZCBhcyBhY3RpdmUuXG4gICAqL1xuICBASW5wdXQoKSBhY3RpdmU6IEdyb3VwTm9kZTtcbiAgLyoqXG4gICAqIFVzZWQgb25seSBmb3IgbWlsbGVyLXZpZXcsIGRpc3BsYXlzIHRoZSBjb2x1bW4gbGV2ZWwgZm9yIHRoZSBjdXJyZW50IG5vZGUuXG4gICAqIEUuZyBpZiB0aGUgaW5kZXggaXMgb25lLCB0aGlzIHdpbGwgYmUgc2Vjb25kIGNvbHVtbi5cbiAgICovXG4gIEBJbnB1dCgpIGluZGV4ID0gMDtcbiAgLyoqXG4gICAqIFRoZSBhc3NldCB0byB1c2UgYXMgcm9vdC5cbiAgICovXG4gIEBJbnB1dCgpIGFzc2V0OiBJSWRlbnRpZmllZCA9IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBzZWxlY3RlZCBkZXZpY2UuXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RlZERldmljZTogSU1hbmFnZWRPYmplY3QgPSB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBwcmVkZWZpbmVkIG5vZGVzLlxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0ZWQ6IEFycmF5PFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+PiB8IElJZGVudGlmaWVkW10gfCBJSWRlbnRpZmllZCA9IFtdO1xuICAvKipcbiAgICogVGhlIG5vZGUgdG8gdXNlIGFzIHJvb3QuIFlvdSBjYW4gZWl0aGVyIHNldCB0aGlzLCBvciB0aGUgYXNzZXQgdG8gc3RhcnQgZnJvbS5cbiAgICovXG4gIEBJbnB1dCgpIHJvb3ROb2RlOiBHcm91cE5vZGU7XG4gIC8qKlxuICAgKiBBbGwgY3VycmVudGx5IHNlbGVjdGVkIGFzc2V0cy5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IElJZGVudGlmaWVkW10gfCBJSWRlbnRpZmllZCA9IFtdO1xuICBASW5wdXQoKSBjb250YWluZXI6ICcnIHwgJ2JvZHknID0gJ2JvZHknO1xuICAvKipcbiAgICogRW1pdHMgaWYgb25lIGl0ZW0gd2FzIHNlbGVjdGVkIChhbGwgY3VycmVudGx5IHNlbGVjdGVkIG5vZGVzKS5cbiAgICovXG4gIEBPdXRwdXQoKSBvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBc3NldFNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuICAvKipcbiAgICogRW1pdHMgaWYgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBhc3NldCBpcyBjbGVhcmVkLlxuICAgKi9cbiAgQE91dHB1dCgpIG9uQ2xlYXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIFVzZWQgb25seSBmb3IgbWlsbGVyIHZpZXcuIEVtaXQgdGhlIHNlbGVjdGVkIG5vZGUgYW5kIHVzZSBpdCBhcyBhICdyb290Tm9kZScgZm9yIHRoZSBuZXcgY29sdW1uLlxuICAgKi9cbiAgQE91dHB1dCgpIG9uUm93U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBjdXJyZW50IGxvYWRpbmcgc3RhdGUgb2YgdGhlIG5vZGUuXG4gICAqL1xuICBAT3V0cHV0KCkgb25Mb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBmaWx0ZXIgYXBwbGllZC5cbiAgICovXG4gIGZpbHRlclRleHQgPSAnJztcbiAgLyoqXG4gICAqIERpc3BsYXlzIHRoZSBnbG9iYWwgc2VhcmNoIGF0IGFsbCB0aW1lcyBpZiB0aGUgbWlsbGVyIHZpZXcgaXMgdXNlZFxuICAgKiBvbiByb290IGdyb3VwIGxldmVsLlxuICAgKi9cbiAgcm9vdCA9IGZhbHNlO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgaGVhZGVyIGhpZ2h0IGluIHBpeGVsLlxuICAgKi9cbiAgZ2V0SGVhZGVySGVpZ2h0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG4gIHJlYWRvbmx5IEFTU0VUX0NPTlNUID0gZ2V0dGV4dCgnQXNzZXQge3sgYXNzZXRJZCB9fScpO1xuXG4gIEBWaWV3Q2hpbGQoJ2hlYWRlcicpXG4gIHByaXZhdGUgaGVhZGVyOiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlIG9ubHkgRElcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBncm91cE5vZGVTZXJ2aWNlOiBHcm91cE5vZGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFzc2V0U2VsZWN0b3JTZXJ2aWNlOiBBc3NldFNlbGVjdG9yU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKGdyb3VwTm9kZVNlcnZpY2UsIGludmVudG9yeSwgYXNzZXRTZWxlY3RvclNlcnZpY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGVuIGEgbm9kZSB3YXMgc2VsZWN0ZWQsIGlmIGEgbmV3IGNvbHVtbiBuZWVkcyB0byBiZSBhZGRlZC5cbiAgICogQHBhcmFtIG5vZGUgVGhlIG5vZGUgdGhhdCB3YXMgY2xpY2tlZC5cbiAgICogQHBhcmFtIGluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoaXMgbm9kZS5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY2xpY2sgd2FzIGhhbmRsZWQgYW5kIGEgbmV3IGNvbHVtbiB3YXMgYWRkZWQuXG4gICAqL1xuICBoYW5kbGVOZXh0TWlsbGVyVmlld0NvbHVtbihub2RlOiBHcm91cE5vZGUsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBub2RlQ29weSA9IE9iamVjdC5jcmVhdGUobm9kZSk7XG4gICAgY29uc3QgaXNTYW1lQXNSb290ID0gdGhpcy5yb290Tm9kZSA9PT0gbm9kZTtcbiAgICBjb25zdCBpc1VuYXNzaWduZWREZXZpY2VzTm9kZSA9IG5vZGUudG9TdHJpbmcoKSA9PT0gVW5hc3NpZ25lZERldmljZXNOb2RlLk5BTUU7XG4gICAgY29uc3QgaXNOZXdDb2x1bW5OZWVkZWQgPVxuICAgICAgIWlzU2FtZUFzUm9vdCAmJiAobm9kZS5pc0dyb3VwKCkgfHwgaXNVbmFzc2lnbmVkRGV2aWNlc05vZGUgfHwgbm9kZS5oYXNDaGlsZERldmljZXMoKSk7XG5cbiAgICBpZiAoaXNOZXdDb2x1bW5OZWVkZWQpIHtcbiAgICAgIHRoaXMub25Sb3dTZWxlY3RlZC5lbWl0KHsgbm9kZUNvcHksIGluZGV4IH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5pbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5jb25maWcgPSB7IC4uLkNPTkZJR19PUFRJT05TX0RFRkFVTFQsIC4uLnRoaXMuY29uZmlnIH07XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZFJlc2V0TmFtZUZpbHRlciA9XG4gICAgICB0aGlzLnJvb3ROb2RlICYmIHRoaXMucm9vdE5vZGUubW8gJiYgdGhpcy5jb25maWcudmlldyA9PT0gJ21pbGxlcic7XG4gICAgaWYgKHNob3VsZFJlc2V0TmFtZUZpbHRlcikge1xuICAgICAgYXdhaXQgdGhpcy5hcHBseUZpbHRlcignJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNPbmx5QXNzZXROb2RlRGVmaW5lZCA9IHRoaXMuYXNzZXQ7XG4gICAgaWYgKGlzT25seUFzc2V0Tm9kZURlZmluZWQpIHtcbiAgICAgIHRoaXMucm9vdE5vZGUgPSBhd2FpdCB0aGlzLmNyZWF0ZU1hbmFnZWRPYmplY3RSb290Tm9kZSh0aGlzLmFzc2V0KTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0FueU5vZGVEZWZpbmVkID1cbiAgICAgICF0aGlzLnJvb3ROb2RlICYmICghdGhpcy5hc3NldCB8fCBPYmplY3Qua2V5cyh0aGlzLmFzc2V0KS5sZW5ndGggPT09IDApO1xuICAgIGlmIChpc0FueU5vZGVEZWZpbmVkKSB7XG4gICAgICB0aGlzLnJvb3ROb2RlID0gdGhpcy5jcmVhdGVEZWZhdWx0Um9vdE5vZGUoKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZy5zaG93VW5hc3NpZ25lZERldmljZXMgJiZcbiAgICAgICghdGhpcy5hc3NldCB8fCBPYmplY3Qua2V5cyh0aGlzLmFzc2V0KS5sZW5ndGggPT09IDApICYmXG4gICAgICB0aGlzLnJvb3ROb2RlLnJvb3RcbiAgICApIHtcbiAgICAgIHRoaXMucm9vdE5vZGUuYWRkKFxuICAgICAgICBuZXcgVW5hc3NpZ25lZERldmljZXNOb2RlKHRoaXMuZ3JvdXBOb2RlU2VydmljZSwge1xuICAgICAgICAgIHNob3dDaGlsZERldmljZXM6IHRoaXMuY29uZmlnLnNob3dDaGlsZERldmljZXNcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucm9vdCA9IHRoaXMucm9vdE5vZGUucm9vdDtcbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzLmFzc2V0ICYmXG4gICAgICBjaGFuZ2VzLmFzc2V0LmN1cnJlbnRWYWx1ZSAmJlxuICAgICAgT2JqZWN0LmtleXMoY2hhbmdlcy5hc3NldC5jdXJyZW50VmFsdWUpLmxlbmd0aCAhPT0gMFxuICAgICkge1xuICAgICAgdGhpcy5yb290Tm9kZSA9IGF3YWl0IHRoaXMuY3JlYXRlTWFuYWdlZE9iamVjdFJvb3ROb2RlKGNoYW5nZXMuYXNzZXQuY3VycmVudFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5oZWFkZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5nZXRIZWFkZXJIZWlnaHQkLm5leHQodGhpcy5oZWFkZXIubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nZXRIZWFkZXJIZWlnaHQkLm5leHQoMCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgY3VycmVudCByb290IHRvIG9uZSBsZXZlbCBiYWNrLlxuICAgKi9cbiAgYmFjaygpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXggLSAxO1xuICAgIGNvbnN0IG5vZGVDb3B5ID0gT2JqZWN0LmNyZWF0ZSh0aGlzLnJvb3ROb2RlLnBhcmVudHNbMF0pO1xuICAgIHRoaXMub25Sb3dTZWxlY3RlZC5lbWl0KHsgbm9kZUNvcHksIGluZGV4IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgY3VycmVudCBmaWx0ZXIuXG4gICAqL1xuICBjbGVhckZpbHRlcnMoKSB7XG4gICAgdGhpcy5maWx0ZXJUZXh0ID0gJyc7XG4gICAgdGhpcy5hcHBseUZpbHRlcignJyk7XG4gIH1cblxuICBjbGVhclNlbGVjdGVkRGV2aWNlcygpIHtcbiAgICB0aGlzLnNlbGVjdGVkRGV2aWNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIoJycpO1xuICAgIHRoaXMub25DbGVhclNlbGVjdGVkLmVtaXQoKTtcbiAgfVxuXG4gIGlzR3JvdXBTZWxlY3RlZCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZC5zb21lKHNlbGVjdGVkTm9kZSA9PiBzZWxlY3RlZE5vZGUuaWQgPT09IHRoaXMucm9vdE5vZGUubW8/LmlkKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdyb3VwTmFtZUZpbHRlcihuYW1lRmlsdGVyOiBzdHJpbmcsIG1vSWQsIHNob3dVbmFzc2lnbmVkRGV2aWNlcz86IGJvb2xlYW4pIHtcbiAgICBpZiAobmFtZUZpbHRlcikge1xuICAgICAgY29uc3QgZmlsdGVyQnlOYW1lID0gc2hvd1VuYXNzaWduZWREZXZpY2VzXG4gICAgICAgID8ge1xuICAgICAgICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgICAgICAgbmFtZTogbmFtZUZpbHRlclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9fb3JkZXJieTogW3sgbmFtZTogMSB9XVxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBfX2ZpbHRlcjoge1xuICAgICAgICAgICAgICBuYW1lOiBuYW1lRmlsdGVyLFxuICAgICAgICAgICAgICBfX2J5Z3JvdXBpZDogbW9JZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5hc3NldFNlbGVjdG9yU2VydmljZS5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KGZpbHRlckJ5TmFtZSk7XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSB7XG4gICAgICBfX2ZpbHRlcjoge1xuICAgICAgICBfX2J5Z3JvdXBpZDogbW9JZFxuICAgICAgfSxcbiAgICAgIF9fb3JkZXJieTogW3sgbmFtZTogMSB9XVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYXNzZXRTZWxlY3RvclNlcnZpY2UucXVlcmllc1V0aWwuYnVpbGRRdWVyeShkZWZhdWx0RmlsdGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgZmlsdGVyLlxuICAgKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIgdG8gYXBwbHkuXG4gICAqL1xuICBhc3luYyBhcHBseUZpbHRlcihmaWx0ZXI6IHN0cmluZykge1xuICAgIHRoaXMucm9vdE5vZGUuZmlsdGVyUXVlcnkkLm5leHQoXG4gICAgICB0aGlzLmdyb3VwTmFtZUZpbHRlcihcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICB0aGlzLnJvb3ROb2RlLm1vLmlkLFxuICAgICAgICB0aGlzLmlzVW5hc3NpZ25lZERldmljZXNOb2RlKCkgPyB0cnVlIDogZmFsc2VcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMucm9vdE5vZGUucmVmcmVzaCgpO1xuICAgIHRoaXMub25Mb2FkLmVtaXQoe1xuICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgIGZpbHRlclRleHQ6IHRoaXMuZmlsdGVyVGV4dCxcbiAgICAgIGluZGV4OiB0aGlzLmluZGV4LFxuICAgICAgc2VsZWN0ZWREZXZpY2U6IHRoaXMuc2VsZWN0ZWREZXZpY2VcbiAgICB9KTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgVW5hc3NpZ25lZERldmljZSBub2RlIGlzIHRoZSByb290Tm9kZS5cbiAgICovXG4gIGlzVW5hc3NpZ25lZERldmljZXNOb2RlKCkge1xuICAgIHJldHVybiB0aGlzLnJvb3ROb2RlLnRvU3RyaW5nKCkgPT09IFVuYXNzaWduZWREZXZpY2VzTm9kZS5OQU1FO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHJlc2V0cyB0aGUgc2VhcmNoIHJlc3VsdC5cbiAgICovXG4gIG9uU2VhcmNoUmVzdWx0UmVzZXQoc2VsZWN0ZWRJdGVtKSB7XG4gICAgaWYgKHNlbGVjdGVkSXRlbSkge1xuICAgICAgdGhpcy5yb290Tm9kZSA9IHRoaXMuY3JlYXRlRGVmYXVsdFJvb3ROb2RlKCk7XG4gICAgICBpZiAodGhpcy5jb25maWcuc2hvd1VuYXNzaWduZWREZXZpY2VzKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUuYWRkKFxuICAgICAgICAgIG5ldyBVbmFzc2lnbmVkRGV2aWNlc05vZGUodGhpcy5ncm91cE5vZGVTZXJ2aWNlLCB7XG4gICAgICAgICAgICBzaG93Q2hpbGREZXZpY2VzOiB0aGlzLmNvbmZpZy5zaG93Q2hpbGREZXZpY2VzXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbmZpZy52aWV3ID09PSAnbWlsbGVyJykge1xuICAgICAgICB0aGlzLm9uUm93U2VsZWN0ZWQuZW1pdCh7IHJvb3Q6IHRydWUgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucm9vdE5vZGUuY2xpY2soeyBvcGVuOiB0cnVlIH0pO1xuICAgICAgdGhpcy5yb290Tm9kZS5ub2Rlc0ZldGNoZWRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgICBpZiAodGhpcy5jb25maWcudmlldyA9PT0gJ3RyZWUnKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUub3BlbiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBpZiB0aGUgdXNlciBjbGlja3Mgb24gYSBzZWFyY2ggcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgb25TZWFyY2hSZXN1bHRDbGljayhtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCBjYW5TZWxlY3ROb2RlID0gdGhpcy5jb25maWcuZ3JvdXBzU2VsZWN0YWJsZSB8fCAhdGhpcy5ncm91cE5vZGVTZXJ2aWNlLmlzR3JvdXAobW8pO1xuICAgIGlmICh0aGlzLmNvbmZpZy52aWV3ID09PSAnbWlsbGVyJykge1xuICAgICAgdGhpcy5yb290Tm9kZSA9IGF3YWl0IHRoaXMuY3JlYXRlTWFuYWdlZE9iamVjdFJvb3ROb2RlKG1vKTtcbiAgICAgIHRoaXMucm9vdE5vZGUuY2xpY2soeyBvcGVuOiB0cnVlIH0pO1xuICAgICAgY29uc3Qgbm9kZUNvcHkgPSBPYmplY3QuY3JlYXRlKHRoaXMucm9vdE5vZGUpO1xuICAgICAgdGhpcy5vblJvd1NlbGVjdGVkLmVtaXQoe1xuICAgICAgICBub2RlQ29weSxcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIHNlbGVjdGVkRGV2aWNlczogdGhpcy5zZWxlY3RlZERldmljZSxcbiAgICAgICAgcm9vdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5jb25maWcubXVsdGkpIHtcbiAgICAgIHRoaXMuZGVzZWxlY3RBbGwoKTtcbiAgICB9XG4gICAgaWYgKGNhblNlbGVjdE5vZGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0KG1vKTtcbiAgICB9XG4gIH1cblxuICBvbkxvYWRpbmcoaXNMb2FkaW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5vbkxvYWQuZW1pdCh7IGxvYWRpbmc6IGlzTG9hZGluZywgZmlsdGVyVGV4dDogdGhpcy5maWx0ZXJUZXh0IH0pO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblNlbGVjdChtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLnNlbGVjdChtbyk7XG4gIH1cblxuICBvbkRlc2VsZWN0KGNvbmZpZzogeyBkZXNlbGVjdE1vZGU6ICdzaW5nbGUnIHwgJ2FsbCc7IG1vOiBJTWFuYWdlZE9iamVjdCB9KSB7XG4gICAgc3dpdGNoIChjb25maWc/LmRlc2VsZWN0TW9kZSkge1xuICAgICAgY2FzZSAnc2luZ2xlJzpcbiAgICAgICAgdGhpcy5kZXNlbGVjdChjb25maWcubW8pO1xuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FsbCc6XG4gICAgICAgIHRoaXMuZGVzZWxlY3RBbGwoY29uZmlnLm1vKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiYmctaW5oZXJpdCBwLXQtOCBwLWItOCBzZXBhcmF0b3ItYm90dG9tIHAtci0xNiBwLWwtMTYgc3RpY2t5LXRvcFwiXG4gIFtuZ1N0eWxlXT1cInsgJ3otaW5kZXgnOiBjb25maWcuc2luZ2xlQ29sdW1uICYmIGNvbmZpZy5zZWFyY2ggPyAnMzAnIDogJzIwJyB9XCJcbiAgI2hlYWRlclxuICBbbmdDbGFzc109XCJ7XG4gICAgJ3AtYWJzb2x1dGUgbWlsbGVyLWNvbHVtbl9fc2VsZWN0aW9uIGQtZmxleCBmbGV4LXdyYXAgYS1pLWNlbnRlcic6IGNvbmZpZy52aWV3ID09PSAnbWlsbGVyJyxcbiAgICAnbWlsbGVyLWNvbHVtbl9fc2VhcmNoJzogY29uZmlnLnNlYXJjaCxcbiAgICAnbWlsbGVyLWNvbHVtbl9fbXVsdGknOiBjb25maWcubXVsdGlcbiAgfVwiXG4gICpuZ0lmPVwiXG4gICAgIXNlbGVjdGVkRGV2aWNlICYmXG4gICAgaW5kZXggPT09IDAgJiZcbiAgICAoY29uZmlnLnNlYXJjaCB8fCBjb25maWcubXVsdGkgfHwgY29uZmlnLmxhYmVsPy5sZW5ndGggfHwgY29uZmlnLnNob3dTZWxlY3RlZClcbiAgXCJcbj5cbiAgPHBcbiAgICBjbGFzcz1cInRleHQtbWVkaXVtIGZsZXgtbm8tc2hyaW5rIGEtcy1jZW50ZXJcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdtLWItNCc6IGNvbmZpZy5zZWFyY2ggJiYgcm9vdCAmJiBjb25maWcuc2luZ2xlQ29sdW1uLFxuICAgICAgJ20tci04JzogIWNvbmZpZy5zaW5nbGVDb2x1bW4gJiYgIWNvbmZpZy5zZWFyY2gsXG4gICAgICAnZml0LXcnOiBjb25maWcuc2luZ2xlQ29sdW1uXG4gICAgfVwiXG4gICAgKm5nSWY9XCJjb25maWcubGFiZWw/Lmxlbmd0aFwiXG4gID5cbiAgICB7eyBjb25maWcubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgPC9wPlxuICA8Yzh5LXNlYXJjaC1pbnB1dFxuICAgIFtuZ1N0eWxlXT1cInsgJ21pbi13aWR0aCc6ICFjb25maWcuc2luZ2xlQ29sdW1uICYmIGNvbmZpZy5sYWJlbC5sZW5ndGggPyAnNTAlJyA6ICdpbmhlcml0JyB9XCJcbiAgICAqbmdJZj1cImNvbmZpZy5zZWFyY2ggJiYgcm9vdFwiXG4gICAgKG9uQ2xpY2spPVwib25TZWFyY2hSZXN1bHRDbGljaygkZXZlbnQpXCJcbiAgICAocmVzZXQpPVwib25TZWFyY2hSZXN1bHRSZXNldCgkZXZlbnQpXCJcbiAgICBbbW9kZV09XCInc2VsZWN0J1wiXG4gICAgW2NvbnRhaW5lcl09XCJjb250YWluZXJcIlxuICAgIFtncm91cHNPbmx5XT1cImNvbmZpZy5ncm91cHNPbmx5XCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnbS1sLWF1dG8nOiAhY29uZmlnLnNpbmdsZUNvbHVtbiAmJiBjb25maWcubGFiZWwubGVuZ3RoLFxuICAgICAgJ2ZpdC13JzogY29uZmlnLnNpbmdsZUNvbHVtbiB8fCAhY29uZmlnLmxhYmVsLmxlbmd0aFxuICAgIH1cIlxuICA+PC9jOHktc2VhcmNoLWlucHV0PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJiZy1pbmhlcml0IGQtZmxleCBnYXAtNCBmaXQtd1wiXG4gICAgKm5nSWY9XCJjb25maWcuc2hvd1NlbGVjdGVkXCJcbiAgICBbbmdDbGFzc109XCJ7ICdtLXQtNCc6IGNvbmZpZy5zZWFyY2ggfVwiXG4gID5cbiAgICA8c3BhbiBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1yLTQgYS1zLWNlbnRlciBsLWgtMVwiPnt7ICdTZWxlY3RlZCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgtZ3JvdyBpbm5lci1zY3JvbGwgZC1mbGV4IGdhcC00IGEtaS1jZW50ZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0ZWQubGVuZ3RoXCI+XG4gICAgICAgIDxlbSBjbGFzcz1cInRleHQtMTIgdGV4dC1tdXRlZCBkLWZsZXggYS1pLWNlbnRlciBmaXQtaC0yMFwiPnt7ICdOb25lJyB8IHRyYW5zbGF0ZSB9fTwvZW0+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mbyBjaGlwXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IHNlbGVjdGVkSXRlbSBvZiBzZWxlY3RlZFwiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4teHMgYnRuLWNsZWFuIHRleHQtMTBcIlxuICAgICAgICAgIHRpdGxlPVwie3sgc2VsZWN0ZWRJdGVtLm5hbWUgfX1cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJjb25maWcubXVsdGkgPyBkZXNlbGVjdChzZWxlY3RlZEl0ZW0pIDogZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB7eyBzZWxlY3RlZEl0ZW0ubmFtZSB8fCAoQVNTRVRfQ09OU1QgfCB0cmFuc2xhdGU6IHsgYXNzZXRJZDogc2VsZWN0ZWRJdGVtLmlkIH0pIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXZcbiAgY2xhc3M9XCJwLXItMTZcIlxuICAqbmdJZj1cInNlbGVjdGVkRGV2aWNlXCJcbj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBwLWItNFwiPlxuICAgIDxwXG4gICAgICBjbGFzcz1cInRleHQtbWVkaXVtIHAtdC04IG0tci04XCJcbiAgICAgICpuZ0lmPVwic2VsZWN0ZWREZXZpY2U7IGVsc2UgbXVsdGlBc3NldHNcIlxuICAgID5cbiAgICAgIHt7ICdTZWxlY3RlZCBhc3NldCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3A+XG4gICAgPG5nLXRlbXBsYXRlICNtdWx0aUFzc2V0cz5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1tZWRpdW0gbS1yLThcIj57eyAnU2VsZWN0ZWQgYXNzZXRzJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi14cyBhLXMtY2VudGVyIG0tdC00IG0tbC1hdXRvXCJcbiAgICAgIHRpdGxlPVwie3sgJ0NoYW5nZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJTZWxlY3RlZERldmljZXMoKVwiXG4gICAgPlxuICAgICAge3sgJ0NoYW5nZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJ0ZXh0LXN1Y2Nlc3MgcC1sLTAgcC1yLThcIlxuICAgICAgW2M4eUljb25dPVwiJ2NoZWNrLWNpcmNsZSdcIlxuICAgID48L2k+XG4gICAgPGlcbiAgICAgIGNsYXNzPVwibS1yLTQgaWNvbi0yMFwiXG4gICAgICBbYzh5SWNvbl09XCJzZWxlY3RlZERldmljZSB8IGdldEdyb3VwSWNvbiB8IGFzeW5jXCJcbiAgICA+PC9pPlxuICAgIDxzcGFuPnt7IHNlbGVjdGVkRGV2aWNlLm5hbWUgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gbWlsbGVyIGNvbHVtbnMgaGVhZGVyIC0tPlxuPGRpdlxuICBjbGFzcz1cIm1pbGxlci1jb2x1bW5fX2hlYWRlciBzdGlja3ktdG9wIGJnLWluaGVyaXQgc2VwYXJhdG9yLWJvdHRvbVwiXG4gICpuZ0lmPVwiXG4gICAgY29uZmlnLnZpZXcgPT09ICdtaWxsZXInICYmXG4gICAgKChjb25maWcuc2hvd0ZpbHRlciAmJiAhcm9vdE5vZGUucm9vdCkgfHwgY29uZmlnLmNvbHVtbkhlYWRlcnMpICYmXG4gICAgIXNlbGVjdGVkRGV2aWNlXG4gIFwiXG4gIFtuZ0NsYXNzXT1cInsgJ3AtdC04JzogY29uZmlnLnNlYXJjaCB9XCJcbj5cbiAgPHBcbiAgICBjbGFzcz1cInRleHQtMTIgdGV4dC1tdXRlZCB0ZXh0LXRydW5jYXRlIG0tYi00XCJcbiAgICB0aXRsZT1cInt7IHJvb3ROb2RlLmJyZWFkY3J1bWIgfHwgcm9vdE5vZGUubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICpuZ0lmPVwiY29uZmlnLnNpbmdsZUNvbHVtbiAmJiBpbmRleCAhPT0gMFwiXG4gID5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJtLXItNFwiXG4gICAgICBjOHlJY29uPVwiaG9tZVwiXG4gICAgPjwvaT5cbiAgICB7eyByb290Tm9kZS5icmVhZGNydW1iIHx8IHJvb3ROb2RlLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gIDwvcD5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXJcIlxuICAgICpuZ0lmPVwiY29uZmlnLmNvbHVtbkhlYWRlcnMgfHwgY29uZmlnLnNpbmdsZUNvbHVtblwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4teHMgbS1yLTggcC10LTAgcC1iLTAgcC1sLTQgcC1yLTQgbC1oLTFcIlxuICAgICAgdGl0bGU9XCJ7eyAnQmFjaycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAqbmdJZj1cImNvbmZpZy5zaW5nbGVDb2x1bW4gJiYgIXJvb3ROb2RlLnJvb3QgJiYgaW5kZXggIT09IDBcIlxuICAgICAgKGNsaWNrKT1cImJhY2soKVwiXG4gICAgPlxuICAgICAgPGkgYzh5SWNvbj1cImFuZ2xlLWxlZnRcIj48L2k+XG4gICAgPC9idXR0b24+XG4gICAgPGxhYmVsXG4gICAgICBjbGFzcz1cImM4eS1yYWRpbyBjaGVja2JveC1pbmxpbmUgbS1yLThcIlxuICAgICAgKm5nSWY9XCIhcm9vdE5vZGUucm9vdCAmJiBpbmRleCA9PT0gMCAmJiAoY29uZmlnLmdyb3Vwc1NlbGVjdGFibGUgfHwgIXJvb3ROb2RlLmlzR3JvdXAoKSlcIlxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0aXRsZT1cInt7ICdTZWxlY3QgZ3JvdXAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3Qocm9vdE5vZGUubW8pXCJcbiAgICAgICAgW2NoZWNrZWRdPVwiaXNHcm91cFNlbGVjdGVkKClcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuXG4gICAgPGlcbiAgICAgIGNsYXNzPVwiaWNvbi0yMCBjOHktaWNvbi1kdW9jb2xvciBtLXItNFwiXG4gICAgICBbYzh5SWNvbl09XCJ0aGlzLnJvb3ROb2RlLm1vIHwgZ2V0R3JvdXBJY29uOiB0cnVlIDogdGhpcy5yb290Tm9kZS5pY29uIHwgYXN5bmNcIlxuICAgICAgKm5nSWY9XCJjb25maWcuY29sdW1uSGVhZGVycyAmJiAoY29uZmlnLnNpbmdsZUNvbHVtbiB8fCAoIXJvb3ROb2RlLnJvb3QgJiYgaW5kZXggPT09IDApKVwiXG4gICAgPjwvaT5cbiAgICA8cFxuICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgIHRpdGxlPVwie3sgcm9vdE5vZGUubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgKm5nSWY9XCJjb25maWcuY29sdW1uSGVhZGVyc1wiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICd0ZXh0LWxhYmVsLXNtYWxsJzogIWNvbmZpZy5zaW5nbGVDb2x1bW4sXG4gICAgICAgICd0ZXh0LW1lZGl1bSc6IGNvbmZpZy5zaW5nbGVDb2x1bW5cbiAgICAgIH1cIlxuICAgID5cbiAgICAgIHt7IHJvb3ROb2RlLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgKm5nSWY9XCIhcm9vdE5vZGUucm9vdCAmJiBjb25maWcuc2hvd0ZpbHRlclwiXG4gICAgW25nQ2xhc3NdPVwieyAncC10LTQnOiBjb25maWcuY29sdW1uSGVhZGVycyB9XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSBpbnB1dC1ncm91cC1zZWFyY2hcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ0ZpbHRlciB0aGlzIGNvbHVtbuKApicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlclRleHRcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlGaWx0ZXIoJyonICsgZmlsdGVyVGV4dCArICcqJylcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90IHAtci04IHAtbC00XCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdBcHBseSBmaWx0ZXInIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXIoJyonICsgZmlsdGVyVGV4dCArICcqJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgYzh5SWNvbj1cImZpbHRlclwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90IHAtci04IHAtbC00XCJcbiAgICAgICAgICB0aXRsZT1cIiB7eyAnQ2xlYXIgZmlsdGVycycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJjbGVhckZpbHRlcnMoKVwiXG4gICAgICAgICAgKm5nSWY9XCJmaWx0ZXJUZXh0Lmxlbmd0aFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48Yzh5LWFzc2V0LXNlbGVjdG9yLW5vZGVcbiAgY2xhc3M9XCJkLWJsb2NrIGJnLWluaGVyaXQgcC1yZWxhdGl2ZVwiXG4gIHN0eWxlPVwiei1pbmRleDogOVwiXG4gICpuZ0lmPVwicm9vdE5vZGUgJiYgIXNlbGVjdGVkRGV2aWNlXCJcbiAgW25vZGVdPVwicm9vdE5vZGVcIlxuICBbcm9vdE5vZGVdPVwicm9vdE5vZGVcIlxuICBbcHJlc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuICBbbXVsdGldPVwiY29uZmlnLm11bHRpXCJcbiAgW3ZpZXddPVwiY29uZmlnLnZpZXdcIlxuICBbaW5kZXhdPVwiaW5kZXhcIlxuICBbYWN0aXZlXT1cImFjdGl2ZVwiXG4gIFtoYW5kbGVOZXh0TWlsbGVyVmlld0NvbHVtbl09XCJoYW5kbGVOZXh0TWlsbGVyVmlld0NvbHVtbi5iaW5kKHRoaXMpXCJcbiAgKGlzTG9hZGluZ1N0YXRlKT1cIm9uTG9hZGluZygkZXZlbnQpXCJcbiAgKG9uU2VsZWN0KT1cIm9uU2VsZWN0KCRldmVudClcIlxuICAob25EZXNlbGVjdCk9XCJvbkRlc2VsZWN0KCRldmVudClcIlxuICBbbmdDbGFzc109XCJ7ICdjb2xsYXBzZSBzaG93JzogIXJvb3ROb2RlLnJvb3QgJiYgIXJvb3ROb2RlLmhpZGRlbiAmJiBjb25maWcudmlldyAhPT0gJ21pbGxlcicgfVwiXG4+PC9jOHktYXNzZXQtc2VsZWN0b3Itbm9kZT5cbiJdfQ==
|
|
@@ -5,11 +5,13 @@ import { reduce, forEach, get, union, camelCase } from 'lodash-es';
|
|
|
5
5
|
import { BehaviorSubject, Subject } from 'rxjs';
|
|
6
6
|
import { shareReplay } from 'rxjs/operators';
|
|
7
7
|
import { AppStateService } from '../common';
|
|
8
|
+
import { OptionsService } from '../common/options.service';
|
|
8
9
|
import { cloneDeep } from 'lodash-es';
|
|
9
10
|
import * as i0 from "@angular/core";
|
|
10
11
|
import * as i1 from "@ngx-translate/core";
|
|
11
12
|
import * as i2 from "@c8y/client";
|
|
12
13
|
import * as i3 from "../common";
|
|
14
|
+
import * as i4 from "../common/options.service";
|
|
13
15
|
export class PluginsResolveService {
|
|
14
16
|
/**
|
|
15
17
|
* Takes a list of remotes and turns it into an object containing union of corresponding remotes.
|
|
@@ -69,11 +71,12 @@ export class PluginsResolveService {
|
|
|
69
71
|
}
|
|
70
72
|
return remotesToRemoveFrom;
|
|
71
73
|
}
|
|
72
|
-
constructor(translateService, fetchClient, appState, injector) {
|
|
74
|
+
constructor(translateService, fetchClient, appState, injector, optionsService) {
|
|
73
75
|
this.translateService = translateService;
|
|
74
76
|
this.fetchClient = fetchClient;
|
|
75
77
|
this.appState = appState;
|
|
76
78
|
this.injector = injector;
|
|
79
|
+
this.optionsService = optionsService;
|
|
77
80
|
this.urlRemotesCache = null;
|
|
78
81
|
this.remoteScriptSet = new Set();
|
|
79
82
|
this._injectors$ = new Subject();
|
|
@@ -168,6 +171,11 @@ export class PluginsResolveService {
|
|
|
168
171
|
}
|
|
169
172
|
}
|
|
170
173
|
}
|
|
174
|
+
// Added to ensure that the translations from public-options are not overridden by the plugin translations
|
|
175
|
+
const { lang } = this.appState.state;
|
|
176
|
+
if (this.optionsService.langsDetails && this.optionsService.langsDetails[lang]) {
|
|
177
|
+
this.translateService.setTranslation(lang, this.optionsService.langsDetails[lang], true);
|
|
178
|
+
}
|
|
171
179
|
return remoteModules;
|
|
172
180
|
}
|
|
173
181
|
/**
|
|
@@ -272,7 +280,7 @@ export class PluginsResolveService {
|
|
|
272
280
|
}
|
|
273
281
|
return { name: exposedModule, factory };
|
|
274
282
|
}
|
|
275
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: PluginsResolveService, deps: [{ token: i1.TranslateService }, { token: i2.FetchClient }, { token: i3.AppStateService }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
283
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: PluginsResolveService, deps: [{ token: i1.TranslateService }, { token: i2.FetchClient }, { token: i3.AppStateService }, { token: i0.EnvironmentInjector }, { token: i4.OptionsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
276
284
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: PluginsResolveService, providedIn: 'root' }); }
|
|
277
285
|
}
|
|
278
286
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: PluginsResolveService, decorators: [{
|
|
@@ -280,5 +288,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
280
288
|
args: [{
|
|
281
289
|
providedIn: 'root'
|
|
282
290
|
}]
|
|
283
|
-
}], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.FetchClient }, { type: i3.AppStateService }, { type: i0.EnvironmentInjector }] });
|
|
284
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQVEsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBNEIsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7O0FBZXRDLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEM7Ozs7Ozs7Ozs7Ozs7Ozs7O09BaUJHO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFtQztRQUNyRCxPQUFPLE1BQU0sQ0FDWCxPQUFPLEVBQ1AsQ0FBQyxVQUFvQyxFQUFFLFFBQWtDLEVBQUUsRUFBRTtZQUMzRSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsYUFBdUIsRUFBRSxpQkFBeUIsRUFBRSxFQUFFO2dCQUN2RSxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RCxVQUFVLENBQUMsaUJBQWlCLENBQUMsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFF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LE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsQ0FBQztRQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxFQUFFLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDMUMsQ0FBQzs4R0E5VFUscUJBQXFCO2tIQUFyQixxQkFBcUIsY0FGcEIsTUFBTTs7MkZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nTW9kdWxlUmVmLCBFbnZpcm9ubWVudEluamVjdG9yLCBUeXBlLCBjcmVhdGVOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zLCBGZXRjaENsaWVudCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IHJlZHVjZSwgZm9yRWFjaCwgZ2V0LCB1bmlvbiwgY2FtZWxDYXNlIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcblxudHlwZSBTY29wZSA9IHVua25vd247XG50eXBlIEZhY3RvcnkgPSAoKSA9PiBhbnk7XG5cbmRlY2xhcmUgY29uc3QgX193ZWJwYWNrX2luaXRfc2hhcmluZ19fOiAoc2hhcmVTY29wZTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuZGVjbGFyZSBjb25zdCBfX3dlYnBhY2tfc2hhcmVfc2NvcGVzX186IHsgZGVmYXVsdDogU2NvcGUgfTtcblxuaW50ZXJmYWNlIENvbnRhaW5lciB7XG4gIGluaXQoc2hhcmVTY29wZTogU2NvcGUpOiB2b2lkO1xuICBnZXQobW9kdWxlOiBzdHJpbmcpOiBGYWN0b3J5O1xufVxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGx1Z2luc1Jlc29sdmVTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIFRha2VzIGEgbGlzdCBvZiByZW1vdGVzIGFuZCB0dXJucyBpdCBpbnRvIGFuIG9iamVjdCBjb250YWluaW5nIHVuaW9uIG9mIGNvcnJlc3BvbmRpbmcgcmVtb3Rlcy5cbiAgICogQHBhcmFtIHJlbW90ZXMgTGlzdCBvZiB0aGUgcmVtb3Rlcy5cbiAgICogQHJldHVybnMgUmV0dXJucyBvYmplY3Qgd2l0aCBtZXJnZWQgcmVtb3Rlcy5cbiAgICpcbiAgICogKipFeGFtcGxlKipcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZW1vdGVzQTpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSB7IGNvbnRleHRQYXRoQTogWydtb2R1bGVBJywgJ21vZHVsZUInXSB9O1xuICAgKiBjb25zdCByZW1vdGVzQjpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSB7IGNvbnRleHRQYXRoQTogWydtb2R1bGVBJ10sIGNvbnRleHRQYXRoQjogWydtb2R1bGVaJ10gfTtcbiAgICogY29uc3QgbWVyZ2VkUmVtb3RlczpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSBtZXJnZVJlbW90ZXMoW3JlbW90ZXNBLCByZW1vdGVzQl0pO1xuICAgKiAvLyBSZXN1bHRcbiAgICoge1xuICAgKiAgY29udGV4dFBhdGhBOiBbJ21vZHVsZUEnLCAnbW9kdWxlQiddLFxuICAgKiAgY29udGV4dFBhdGhCOiBbJ21vZHVsZVonXVxuICAgKiB9XG4gICAqXG4gICAqIGBgYFxuICAgKi9cbiAgc3RhdGljIG1lcmdlUmVtb3RlcyhyZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnNbXSk6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyB7XG4gICAgcmV0dXJuIHJlZHVjZShcbiAgICAgIHJlbW90ZXMsXG4gICAgICAoYWxsUmVtb3RlczogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zLCBtZlJlbW90ZTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zKSA9PiB7XG4gICAgICAgIGZvckVhY2gobWZSZW1vdGUsIChyZW1vdGVNb2R1bGVzOiBzdHJpbmdbXSwgcmVtb3RlQ29udGV4dFBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRSZW1vdGVzID0gZ2V0KGFsbFJlbW90ZXMsIHJlbW90ZUNvbnRleHRQYXRoLCBbXSk7XG4gICAgICAgICAgYWxsUmVtb3Rlc1tyZW1vdGVDb250ZXh0UGF0aF0gPSB1bmlvbihjdXJyZW50UmVtb3RlcywgcmVtb3RlTW9kdWxlcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhbGxSZW1vdGVzO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyByZW1vdmVSZW1vdGVzKFxuICAgIHJlbW90ZXNUb1JlbW92ZUZyb206IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyxcbiAgICByZW1vdGVzVG9SZW1vdmU/OiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnNcbiAgKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICBjb25zdCBrZXlzVG9SZW1vdmUgPSBPYmplY3Qua2V5cyhyZW1vdGVzVG9SZW1vdmUgfHwge30pO1xuICAgIGlmICgha2V5c1RvUmVtb3ZlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHJlbW90ZXNUb1JlbW92ZUZyb207XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRLZXlzID0gT2JqZWN0LmtleXMocmVtb3Rlc1RvUmVtb3ZlRnJvbSk7XG4gICAgY29uc3Qga2V5c1ByZXNlbnRJbkJvdGggPSBjdXJyZW50S2V5cy5maWx0ZXIoa2V5ID0+IGtleXNUb1JlbW92ZS5pbmNsdWRlcyhrZXkpKTtcbiAgICBpZiAoIWtleXNQcmVzZW50SW5Cb3RoLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHJlbW90ZXNUb1JlbW92ZUZyb207XG4gICAgfVxuICAgIHJlbW90ZXNUb1JlbW92ZUZyb20gPSBjbG9uZURlZXAocmVtb3Rlc1RvUmVtb3ZlRnJvbSk7XG4gICAgZm9yIChjb25zdCByZW1vdGVDb250ZXh0UGF0aCBvZiBrZXlzUHJlc2VudEluQm90aCkge1xuICAgICAgY29uc3QgcmVtb3RlTW9kdWxlc1RvQmVSZW1vdmVkID0gcmVtb3Rlc1RvUmVtb3ZlW3JlbW90ZUNvbnRleHRQYXRoXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZW1vdGVNb2R1bGVzVG9CZVJlbW92ZWQpIHx8ICFyZW1vdGVNb2R1bGVzVG9CZVJlbW92ZWQ/Lmxlbmd0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGN1cnJlbnRNb2R1bGVzID0gcmVtb3Rlc1RvUmVtb3ZlRnJvbVtyZW1vdGVDb250ZXh0UGF0aF07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY3VycmVudE1vZHVsZXMpIHx8ICFjdXJyZW50TW9kdWxlcz8ubGVuZ3RoKSB7XG4gICAgICAgIGRlbGV0ZSByZW1vdGVzVG9SZW1vdmVGcm9tW3JlbW90ZUNvbnRleHRQYXRoXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRNb2R1bGVzID0gY3VycmVudE1vZHVsZXMuZmlsdGVyKG1vZHVsZSA9PiAhcmVtb3RlTW9kdWxlc1RvQmVSZW1vdmVkLmluY2x1ZGVzKG1vZHVsZSkpO1xuICAgICAgaWYgKGN1cnJlbnRNb2R1bGVzLmxlbmd0aCkge1xuICAgICAgICByZW1vdGVzVG9SZW1vdmVGcm9tW3JlbW90ZUNvbnRleHRQYXRoXSA9IGN1cnJlbnRNb2R1bGVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHJlbW90ZXNUb1JlbW92ZUZyb21bcmVtb3RlQ29udGV4dFBhdGhdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZW1vdGVzVG9SZW1vdmVGcm9tO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFsbCBpbmplY3RvcnMgb2YgYWxyZWFkeSBsb2FkZWQgcGx1Z2lucyBvbiBzdWJzY3JpcHRpb24uXG4gICAqL1xuICBpbmplY3RvcnMkOiBPYnNlcnZhYmxlPEVudmlyb25tZW50SW5qZWN0b3I+O1xuICAvKipcbiAgICogRW1pdHMgb25jZSByZW1vdGVQbHVnaW5zIGhhdmUgYmVlbiByZXNvbHZlZC5cbiAgICovXG4gIHJlZnJlc2gkOiBPYnNlcnZhYmxlPHZvaWQ+O1xuICAvKipcbiAgICogRW1pdHMgYWxsIHBsdWdpbiBkZXRhaWxzIG9mIGFscmVhZHkgbG9hZGVkIHBsdWdpbnMgb24gc3Vic2NyaXB0aW9uLlxuICAgKi9cbiAgcGx1Z2luRGV0YWlscyQ6IE9ic2VydmFibGU8e1xuICAgIHJlbW90ZU5nTW9kdWxlOiBOZ01vZHVsZVJlZjx1bmtub3duPiB8IFR5cGU8dW5rbm93bj47XG4gICAgbW9kdWxlUmVmOiBOZ01vZHVsZVJlZjx1bmtub3duPjtcbiAgfT47XG4gIGFsbFBsdWdpbnNMb2FkZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBwcml2YXRlIHVybFJlbW90ZXNDYWNoZTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zID0gbnVsbDtcbiAgcHJpdmF0ZSByZW1vdGVTY3JpcHRTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBfaW5qZWN0b3JzJCA9IG5ldyBTdWJqZWN0PEVudmlyb25tZW50SW5qZWN0b3I+KCk7XG4gIHByaXZhdGUgX3JlZnJlc2gkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfcGx1Z2luRGV0YWlscyQgPSBuZXcgU3ViamVjdDx7XG4gICAgcmVtb3RlTmdNb2R1bGU6IE5nTW9kdWxlUmVmPHVua25vd24+IHwgVHlwZTx1bmtub3duPjtcbiAgICBtb2R1bGVSZWY6IE5nTW9kdWxlUmVmPHVua25vd24+O1xuICB9PigpO1xuICBwcml2YXRlIF9hbGxQbHVnaW5zTG9hZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGZldGNoQ2xpZW50OiBGZXRjaENsaWVudCxcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvclxuICApIHtcbiAgICB0aGlzLmluamVjdG9ycyQgPSB0aGlzLl9pbmplY3RvcnMkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICAvLyBub3Qgc3BlY2lmeWluZyB0aGUgYnVmZmVyU2l6ZSBvZiBzaGFyZVJlcGxheSBzbyBhbGwgaW5qZWN0b3JzIGFyZSByZWNlaXZlZCBvbiBzdWJzY3JpcHRpb25cbiAgICAgIHNoYXJlUmVwbGF5KClcbiAgICApO1xuICAgIHRoaXMucmVmcmVzaCQgPSB0aGlzLl9yZWZyZXNoJC5hc09ic2VydmFibGUoKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgICB0aGlzLnBsdWdpbkRldGFpbHMkID0gdGhpcy5fcGx1Z2luRGV0YWlscyQuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIC8vIG5vdCBzcGVjaWZ5aW5nIHRoZSBidWZmZXJTaXplIG9mIHNoYXJlUmVwbGF5IHNvIGFsbCBkZXRhaWxzIGFyZSByZWNlaXZlZCBvbiBzdWJzY3JpcHRpb25cbiAgICAgIHNoYXJlUmVwbGF5KClcbiAgICApO1xuICAgIHRoaXMuYWxsUGx1Z2luc0xvYWRlZCQgPSB0aGlzLl9hbGxQbHVnaW5zTG9hZGVkJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBwbHVnaW5zIGJ5IHJlc29sdmluZyB0aGUgcmVtb3RlIE5nTW9kdWxlcyBhbmQgaW5qZWN0aW5nIGl0LiBBbHNvIGF0dGFjaGluZ1xuICAgKiB0aGUgaG9va3Mgb250byB0aGUgcm9vdCBpbmplY3Rvci5cbiAgICogQHBhcmFtIHJlbW90ZU1vZHVsZXMgVGhlIHJlbW90ZSBwbHVnaW5zIHRvIGxvYWQgYXMgZmFjdG9yeSBuYW1lIG1hcHBpbmcgYXJyYXkuXG4gICAqL1xuICByZXNvbHZlUmVtb3RlUGx1Z2lucyhyZW1vdGVNb2R1bGVzOiBBcnJheTx7IGZhY3Rvcnk7IG5hbWUgfT4pIHtcbiAgICB0aGlzLmxvYWRNb2R1bGVzRHluYW1pY2FsbHkocmVtb3RlTW9kdWxlcyk7XG4gICAgdGhpcy5yZWZyZXNoSG9va3MoKTtcbiAgICB0aGlzLm1hcmtQbHVnaW5zQXNMb2FkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBtb2R1bGVzIGFuZCBoYW5kbGVzIGhvb2tpbmcgY29ycmVjdGx5LlxuICAgKiBAcGFyYW0gcmVtb3RlTmdNb2R1bGVzIFRoZSBtb2R1bGVzIHRvIGxvYWQuXG4gICAqL1xuICBsb2FkTW9kdWxlc0R5bmFtaWNhbGx5KHJlbW90ZU1vZHVsZXM6IEFycmF5PHsgZmFjdG9yeTsgbmFtZSB9Pikge1xuICAgIGZvciAoY29uc3QgeyBmYWN0b3J5LCBuYW1lIH0gb2YgcmVtb3RlTW9kdWxlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5sb2FkTW9kdWxlKGZhY3RvcnlbbmFtZV0pO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgJHtuYW1lfWAsIGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsb2FkTW9kdWxlPFQgPSB1bmtub3duPihyZW1vdGVOZ01vZHVsZTogTmdNb2R1bGVSZWY8VD4gfCBUeXBlPFQ+KSB7XG4gICAgbGV0IG1vZHVsZVJlZjogTmdNb2R1bGVSZWY8VD47XG4gICAgaWYgKHJlbW90ZU5nTW9kdWxlIGluc3RhbmNlb2YgTmdNb2R1bGVSZWYpIHtcbiAgICAgIC8vIEFPVFxuICAgICAgbW9kdWxlUmVmID0gcmVtb3RlTmdNb2R1bGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEpJVFxuICAgICAgbW9kdWxlUmVmID0gY3JlYXRlTmdNb2R1bGUocmVtb3RlTmdNb2R1bGUsIHRoaXMuaW5qZWN0b3IpO1xuICAgIH1cbiAgICB0aGlzLl9pbmplY3RvcnMkLm5leHQobW9kdWxlUmVmLmluamVjdG9yKTtcbiAgICB0aGlzLl9wbHVnaW5EZXRhaWxzJC5uZXh0KHsgbW9kdWxlUmVmLCByZW1vdGVOZ01vZHVsZSB9KTtcbiAgICByZXR1cm4gbW9kdWxlUmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIFdpbGwgcmVmcmVzaCBhbGwgY3VycmVudCByZWdpc3RlcmVkIGhvb2tzLlxuICAgKi9cbiAgcmVmcmVzaEhvb2tzKCkge1xuICAgIHRoaXMuX3JlZnJlc2gkLm5leHQoKTtcbiAgfVxuXG4gIG1hcmtQbHVnaW5zQXNMb2FkZWQoKSB7XG4gICAgdGhpcy5fYWxsUGx1Z2luc0xvYWRlZCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhIGxpc3Qgb2YgcmVtb3RlcyBzbyB0aGF0IGEgcGFydGljdWxhciBhcHBsaWNhdGlvbiBjYW4gdXNlIHRoZW0uXG4gICAqIFRoZSByZXF1ZXN0IGlzIG1hZGUgdG8gdGhlIGZvbGxvd2luZyBhZGRyZXNzOiAvYXBwcy88Y29udGV4dFBhdGg+L3JlbW90ZUVudHJ5LmpzXG4gICAqIEBwYXJhbSByZW1vdGVzIExpc3Qgb2YgcmVtb3RlcyB0byBiZSBsb2FkZWQuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGxpc3Qgb2YgbG9hZGVkIG1vZHVsZXMgZnJvbSByZW1vdGVzLlxuICAgKi9cbiAgYXN5bmMgbG9hZFJlbW90ZXMocmVtb3RlczogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zKSB7XG4gICAgaWYgKCFyZW1vdGVzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHJlbW90ZU1vZHVsZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBsdWdpbklkIGluIHJlbW90ZXMpIHtcbiAgICAgIGlmIChyZW1vdGVzLmhhc093blByb3BlcnR5KHBsdWdpbklkKSkge1xuICAgICAgICBjb25zdCBtb2R1bGVOYW1lcyA9IHJlbW90ZXNbcGx1Z2luSWRdO1xuICAgICAgICBjb25zdCB1cmwgPSBgL2FwcHMvJHtwbHVnaW5JZH0vcmVtb3RlRW50cnkuanM/bm9jYWNoZT0ke2RhdGUuZ2V0VGltZSgpfWA7XG4gICAgICAgIGxldCBhdExlYXN0T25lTW9kdWxlTG9hZGVkU3VjY2Vzc2Z1bGx5ID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlTmFtZSBvZiBtb2R1bGVOYW1lcykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZW1vdGVNb2R1bGVzLnB1c2goYXdhaXQgdGhpcy5sb2FkUmVtb3RlTW9kdWxlKHVybCwgcGx1Z2luSWQsIG1vZHVsZU5hbWUpKTtcbiAgICAgICAgICAgIGF0TGVhc3RPbmVNb2R1bGVMb2FkZWRTdWNjZXNzZnVsbHkgPSB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYENvdWxkIG5vdCBsb2FkIHJlbW90ZSBtb2R1bGUgJyVzJyBmcm9tIHVybDpgLCBtb2R1bGVOYW1lLCB1cmwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5vIG5lZWQgdG8gbG9hZCB0cmFuc2xhdGlvbnMgaWYgd2Ugd2VyZSB1bmFibGUgdG8gbG9hZCBhIHNpbmdsZSBtb2R1bGUuLlxuICAgICAgICBpZiAoYXRMZWFzdE9uZU1vZHVsZUxvYWRlZFN1Y2Nlc3NmdWxseSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFJlbW90ZVRyYW5zbGF0aW9ucyhwbHVnaW5JZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlbW90ZU1vZHVsZXM7XG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgYSBsaXN0IG9mIHJlbW90ZXMgYW5kIHR1cm5zIGl0IGludG8gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdW5pb24gb2YgY29ycmVzcG9uZGluZyByZW1vdGVzLlxuICAgKiBAcGFyYW0gbWZSZW1vdGVzIExpc3Qgb2YgdGhlIHJlbW90ZXMuXG4gICAqIEByZXR1cm5zIFJldHVybnMgb2JqZWN0IHdpdGggbWVyZ2VkIHJlbW90ZXMuXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgc3RhdGljIGZ1bmN0aW9uIG1lcmdlUmVtb3RlcyBhcyB0aGlzIGlzIGEgcHVyZSBmdW5jdGlvbi5cbiAgICpcbiAgICogKipFeGFtcGxlKipcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZW1vdGVzQTpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSB7IGNvbnRleHRQYXRoQTogWydtb2R1bGVBJywgJ21vZHVsZUInXSB9O1xuICAgKiBjb25zdCByZW1vdGVzQjpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSB7IGNvbnRleHRQYXRoQTogWydtb2R1bGVBJ10sIGNvbnRleHRQYXRoQjogWydtb2R1bGVaJ10gfTtcbiAgICogY29uc3QgbWVyZ2VkUmVtb3RlczpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSBtZXJnZU1GUmVtb3RlcyhbcmVtb3Rlc0EsIHJlbW90ZXNCXSk7XG4gICAqIC8vIFJlc3VsdFxuICAgKiB7XG4gICAqICBjb250ZXh0UGF0aEE6IFsnbW9kdWxlQScsICdtb2R1bGVCJ10sXG4gICAqICBjb250ZXh0UGF0aEI6IFsnbW9kdWxlWiddXG4gICAqIH1cbiAgICpcbiAgICogYGBgXG4gICAqL1xuICBtZXJnZU1GUmVtb3RlcyhtZlJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2luc1tdKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICByZXR1cm4gUGx1Z2luc1Jlc29sdmVTZXJ2aWNlLm1lcmdlUmVtb3RlcyhtZlJlbW90ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBVUkwgcmVtb3RlcyBjYWNoZS5cbiAgICovXG4gIGNsZWFyVVJMUmVtb3Rlc0NhY2hlKCkge1xuICAgIHRoaXMudXJsUmVtb3Rlc0NhY2hlID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHJlbW90ZXMgbGlzdCBmcm9tIHRoZSBVUkwuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGxpc3Qgb2YgcmVtb3Rlcy5cbiAgICovXG4gIGxvYWRVcmxSZW1vdGVzKCkge1xuICAgIGlmICghdGhpcy51cmxSZW1vdGVzQ2FjaGUpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICBjb25zdCByZW1vdGVzID0gcGFyYW1zLmdldCgncmVtb3RlcycpO1xuICAgICAgaWYgKHJlbW90ZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLnVybFJlbW90ZXNDYWNoZSA9IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHJlbW90ZXMpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBwYXJzZSByZW1vdGVzOiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVybFJlbW90ZXNDYWNoZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbW90ZVRyYW5zbGF0aW9ucyhwbHVnaW5JZDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgbGFuZyB9ID0gdGhpcy5hcHBTdGF0ZS5zdGF0ZTtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZldGNoQ2xpZW50LmZldGNoKGAvYXBwcy8ke3BsdWdpbklkfS8ke2xhbmd9Lmpzb25gKTtcbiAgICAgIGlmIChyZXNwLnN0YXR1cyA8IDQwMCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwLmpzb24oKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldFRyYW5zbGF0aW9uKGxhbmcsIHJlc3VsdFtsYW5nXSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGxvYWQgdHJhbnNsYXRpb25zIGZvciAke3BsdWdpbklkfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbW90ZU1vZHVsZShcbiAgICByZW1vdGVFbnRyeVVybDogc3RyaW5nLFxuICAgIHJlbW90ZUNvbnRleHRQYXRoOiBzdHJpbmcsXG4gICAgZXhwb3NlZE1vZHVsZTogc3RyaW5nXG4gICk6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IGZhY3Rvcnk6IEZhY3RvcnkgfT4ge1xuICAgIGlmICghdGhpcy5yZW1vdGVTY3JpcHRTZXQuaGFzKHJlbW90ZUVudHJ5VXJsKSkge1xuICAgICAgdGhpcy5yZW1vdGVTY3JpcHRTZXQuYWRkKHJlbW90ZUVudHJ5VXJsKTtcbiAgICAgIGF3YWl0IHRoaXMubG9hZFJlbW90ZUVudHJ5KHJlbW90ZUVudHJ5VXJsKTtcbiAgICB9XG4gICAgbGV0IGNvbnRleHRQYXRoOiBzdHJpbmcgPSByZW1vdGVDb250ZXh0UGF0aDtcbiAgICBpZiAoY29udGV4dFBhdGguaW5jbHVkZXMoJ0AnKSkge1xuICAgICAgY29udGV4dFBhdGggPSByZW1vdGVDb250ZXh0UGF0aC5zcGxpdCgnQCcpWzBdO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5sb29rdXBFeHBvc2VkTW9kdWxlKGNhbWVsQ2FzZShjb250ZXh0UGF0aCksIGV4cG9zZWRNb2R1bGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUmVtb3RlRW50cnkocmVtb3RlRW50cnlVcmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdC5zcmMgPSByZW1vdGVFbnRyeVVybDtcblxuICAgICAgc2NyaXB0Lm9uZXJyb3IgPSByZWplY3Q7XG5cbiAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTsgLy8gd2luZG93IGlzIHRoZSBnbG9iYWwgbmFtZXNwYWNlXG4gICAgICB9O1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChzY3JpcHQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb29rdXBFeHBvc2VkTW9kdWxlKFxuICAgIHJlbW90ZU5hbWU6IHN0cmluZyxcbiAgICBleHBvc2VkTW9kdWxlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgZmFjdG9yeTogRmFjdG9yeSB9PiB7XG4gICAgLy8gSW5pdGlhbGl6ZXMgdGhlIHNoYXJlIHNjb3BlLiBUaGlzIGZpbGxzIGl0IHdpdGgga25vd24gcHJvdmlkZWQgbW9kdWxlcyBmcm9tIHRoaXMgYnVpbGQgYW5kIGFsbCByZW1vdGVzXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IF9fd2VicGFja19pbml0X3NoYXJpbmdfXygnZGVmYXVsdCcpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgTW9kdWxlICVzIGNvdWxkIG5vdCBiZSBsb2FkZWQuIE1vZHVsZSBGZWRlcmF0aW9uIGlzIG5vdCBlbmFibGVkIGluIHRoaXMgYXBwbGljYXRpb24uYCxcbiAgICAgICAgZXhwb3NlZE1vZHVsZSxcbiAgICAgICAgZXhcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHdpbmRvd1tyZW1vdGVOYW1lXSBhcyBDb250YWluZXI7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBjb250YWluZXIsIGl0IG1heSBwcm92aWRlIHNoYXJlZCBtb2R1bGVzXG4gICAgbGV0IGZhY3Rvcnk6IEZhY3Rvcnk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvbnRhaW5lci5pbml0KF9fd2VicGFja19zaGFyZV9zY29wZXNfXy5kZWZhdWx0KTtcbiAgICAgIGZhY3RvcnkgPSAoYXdhaXQgY29udGFpbmVyLmdldChleHBvc2VkTW9kdWxlKSkoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc29sZS5lcnJvcihgTW9kdWxlICVzIGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwgZXhwb3NlZE1vZHVsZSwgZXgpO1xuICAgIH1cbiAgICByZXR1cm4geyBuYW1lOiBleHBvc2VkTW9kdWxlLCBmYWN0b3J5IH07XG4gIH1cbn1cbiJdfQ==
|
|
291
|
+
}], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.FetchClient }, { type: i3.AppStateService }, { type: i0.EnvironmentInjector }, { type: i4.OptionsService }] });
|
|
292
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQVEsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBNEIsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7Ozs7QUFldEMsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQW1DO1FBQ3JELE9BQU8sTUFBTSxDQUNYLE9BQU8sRUFDUCxDQUFDLFVBQW9DLEVBQUUsUUFBa0MsRUFBRSxFQUFFO1lBQzNFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxhQUF1QixFQUFFLGlCQUF5QixFQUFFLEVBQUU7Z0JBQ3ZFLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzlELFVB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LFVBQWtCLEVBQ2xCLGFBQXFCO1FBRXJCLHlHQUF5RztRQUN6RyxJQUFJLENBQUM7WUFDSCxNQUFNLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FDWCxzRkFBc0YsRUFDdEYsYUFBYSxFQUNiLEVBQUUsQ0FDSCxDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQWMsQ0FBQztRQUVsRCwwREFBMEQ7UUFDMUQsSUFBSSxPQUFnQixDQUFDO1FBQ3JCLElBQUksQ0FBQztZQUNILE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2RCxPQUFPLEdBQUcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25ELENBQUM7UUFBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFDLENBQUM7OEdBcFVVLHFCQUFxQjtrSEFBckIscUJBQXFCLGNBRnBCLE1BQU07OzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ01vZHVsZVJlZiwgRW52aXJvbm1lbnRJbmplY3RvciwgVHlwZSwgY3JlYXRlTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucywgRmV0Y2hDbGllbnQgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyByZWR1Y2UsIGZvckVhY2gsIGdldCwgdW5pb24sIGNhbWVsQ2FzZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IE9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL29wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG50eXBlIFNjb3BlID0gdW5rbm93bjtcbnR5cGUgRmFjdG9yeSA9ICgpID0+IGFueTtcblxuZGVjbGFyZSBjb25zdCBfX3dlYnBhY2tfaW5pdF9zaGFyaW5nX186IChzaGFyZVNjb3BlOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG5kZWNsYXJlIGNvbnN0IF9fd2VicGFja19zaGFyZV9zY29wZXNfXzogeyBkZWZhdWx0OiBTY29wZSB9O1xuXG5pbnRlcmZhY2UgQ29udGFpbmVyIHtcbiAgaW5pdChzaGFyZVNjb3BlOiBTY29wZSk6IHZvaWQ7XG4gIGdldChtb2R1bGU6IHN0cmluZyk6IEZhY3Rvcnk7XG59XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQbHVnaW5zUmVzb2x2ZVNlcnZpY2Uge1xuICAvKipcbiAgICogVGFrZXMgYSBsaXN0IG9mIHJlbW90ZXMgYW5kIHR1cm5zIGl0IGludG8gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdW5pb24gb2YgY29ycmVzcG9uZGluZyByZW1vdGVzLlxuICAgKiBAcGFyYW0gcmVtb3RlcyBMaXN0IG9mIHRoZSByZW1vdGVzLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIG9iamVjdCB3aXRoIG1lcmdlZCByZW1vdGVzLlxuICAgKlxuICAgKiAqKkV4YW1wbGUqKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlbW90ZXNBOkFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyA9IHsgY29udGV4dFBhdGhBOiBbJ21vZHVsZUEnLCAnbW9kdWxlQiddIH07XG4gICAqIGNvbnN0IHJlbW90ZXNCOkFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyA9IHsgY29udGV4dFBhdGhBOiBbJ21vZHVsZUEnXSwgY29udGV4dFBhdGhCOiBbJ21vZHVsZVonXSB9O1xuICAgKiBjb25zdCBtZXJnZWRSZW1vdGVzOkFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyA9IG1lcmdlUmVtb3RlcyhbcmVtb3Rlc0EsIHJlbW90ZXNCXSk7XG4gICAqIC8vIFJlc3VsdFxuICAgKiB7XG4gICAqICBjb250ZXh0UGF0aEE6IFsnbW9kdWxlQScsICdtb2R1bGVCJ10sXG4gICAqICBjb250ZXh0UGF0aEI6IFsnbW9kdWxlWiddXG4gICAqIH1cbiAgICpcbiAgICogYGBgXG4gICAqL1xuICBzdGF0aWMgbWVyZ2VSZW1vdGVzKHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2luc1tdKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICByZXR1cm4gcmVkdWNlKFxuICAgICAgcmVtb3RlcyxcbiAgICAgIChhbGxSZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMsIG1mUmVtb3RlOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMpID0+IHtcbiAgICAgICAgZm9yRWFjaChtZlJlbW90ZSwgKHJlbW90ZU1vZHVsZXM6IHN0cmluZ1tdLCByZW1vdGVDb250ZXh0UGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFJlbW90ZXMgPSBnZXQoYWxsUmVtb3RlcywgcmVtb3RlQ29udGV4dFBhdGgsIFtdKTtcbiAgICAgICAgICBhbGxSZW1vdGVzW3JlbW90ZUNvbnRleHRQYXRoXSA9IHVuaW9uKGN1cnJlbnRSZW1vdGVzLCByZW1vdGVNb2R1bGVzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGFsbFJlbW90ZXM7XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIHJlbW92ZVJlbW90ZXMoXG4gICAgcmVtb3Rlc1RvUmVtb3ZlRnJvbTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zLFxuICAgIHJlbW90ZXNUb1JlbW92ZT86IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2luc1xuICApOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMge1xuICAgIGNvbnN0IGtleXNUb1JlbW92ZSA9IE9iamVjdC5rZXlzKHJlbW90ZXNUb1JlbW92ZSB8fCB7fSk7XG4gICAgaWYgKCFrZXlzVG9SZW1vdmUubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcmVtb3Rlc1RvUmVtb3ZlRnJvbTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEtleXMgPSBPYmplY3Qua2V5cyhyZW1vdGVzVG9SZW1vdmVGcm9tKTtcbiAgICBjb25zdCBrZXlzUHJlc2VudEluQm90aCA9IGN1cnJlbnRLZXlzLmZpbHRlcihrZXkgPT4ga2V5c1RvUmVtb3ZlLmluY2x1ZGVzKGtleSkpO1xuICAgIGlmICgha2V5c1ByZXNlbnRJbkJvdGgubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcmVtb3Rlc1RvUmVtb3ZlRnJvbTtcbiAgICB9XG4gICAgcmVtb3Rlc1RvUmVtb3ZlRnJvbSA9IGNsb25lRGVlcChyZW1vdGVzVG9SZW1vdmVGcm9tKTtcbiAgICBmb3IgKGNvbnN0IHJlbW90ZUNvbnRleHRQYXRoIG9mIGtleXNQcmVzZW50SW5Cb3RoKSB7XG4gICAgICBjb25zdCByZW1vdGVNb2R1bGVzVG9CZVJlbW92ZWQgPSByZW1vdGVzVG9SZW1vdmVbcmVtb3RlQ29udGV4dFBhdGhdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlbW90ZU1vZHVsZXNUb0JlUmVtb3ZlZCkgfHwgIXJlbW90ZU1vZHVsZXNUb0JlUmVtb3ZlZD8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgY3VycmVudE1vZHVsZXMgPSByZW1vdGVzVG9SZW1vdmVGcm9tW3JlbW90ZUNvbnRleHRQYXRoXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjdXJyZW50TW9kdWxlcykgfHwgIWN1cnJlbnRNb2R1bGVzPy5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIHJlbW90ZXNUb1JlbW92ZUZyb21bcmVtb3RlQ29udGV4dFBhdGhdO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudE1vZHVsZXMgPSBjdXJyZW50TW9kdWxlcy5maWx0ZXIobW9kdWxlID0+ICFyZW1vdGVNb2R1bGVzVG9CZVJlbW92ZWQuaW5jbHVkZXMobW9kdWxlKSk7XG4gICAgICBpZiAoY3VycmVudE1vZHVsZXMubGVuZ3RoKSB7XG4gICAgICAgIHJlbW90ZXNUb1JlbW92ZUZyb21bcmVtb3RlQ29udGV4dFBhdGhdID0gY3VycmVudE1vZHVsZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcmVtb3Rlc1RvUmVtb3ZlRnJvbVtyZW1vdGVDb250ZXh0UGF0aF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbW90ZXNUb1JlbW92ZUZyb207XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYWxsIGluamVjdG9ycyBvZiBhbHJlYWR5IGxvYWRlZCBwbHVnaW5zIG9uIHN1YnNjcmlwdGlvbi5cbiAgICovXG4gIGluamVjdG9ycyQ6IE9ic2VydmFibGU8RW52aXJvbm1lbnRJbmplY3Rvcj47XG4gIC8qKlxuICAgKiBFbWl0cyBvbmNlIHJlbW90ZVBsdWdpbnMgaGF2ZSBiZWVuIHJlc29sdmVkLlxuICAgKi9cbiAgcmVmcmVzaCQ6IE9ic2VydmFibGU8dm9pZD47XG4gIC8qKlxuICAgKiBFbWl0cyBhbGwgcGx1Z2luIGRldGFpbHMgb2YgYWxyZWFkeSBsb2FkZWQgcGx1Z2lucyBvbiBzdWJzY3JpcHRpb24uXG4gICAqL1xuICBwbHVnaW5EZXRhaWxzJDogT2JzZXJ2YWJsZTx7XG4gICAgcmVtb3RlTmdNb2R1bGU6IE5nTW9kdWxlUmVmPHVua25vd24+IHwgVHlwZTx1bmtub3duPjtcbiAgICBtb2R1bGVSZWY6IE5nTW9kdWxlUmVmPHVua25vd24+O1xuICB9PjtcbiAgYWxsUGx1Z2luc0xvYWRlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHByaXZhdGUgdXJsUmVtb3Rlc0NhY2hlOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSBudWxsO1xuICBwcml2YXRlIHJlbW90ZVNjcmlwdFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIF9pbmplY3RvcnMkID0gbmV3IFN1YmplY3Q8RW52aXJvbm1lbnRJbmplY3Rvcj4oKTtcbiAgcHJpdmF0ZSBfcmVmcmVzaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9wbHVnaW5EZXRhaWxzJCA9IG5ldyBTdWJqZWN0PHtcbiAgICByZW1vdGVOZ01vZHVsZTogTmdNb2R1bGVSZWY8dW5rbm93bj4gfCBUeXBlPHVua25vd24+O1xuICAgIG1vZHVsZVJlZjogTmdNb2R1bGVSZWY8dW5rbm93bj47XG4gIH0+KCk7XG4gIHByaXZhdGUgX2FsbFBsdWdpbnNMb2FkZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmV0Y2hDbGllbnQ6IEZldGNoQ2xpZW50LFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgIHByaXZhdGUgb3B0aW9uc1NlcnZpY2U6IE9wdGlvbnNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaW5qZWN0b3JzJCA9IHRoaXMuX2luamVjdG9ycyQuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIC8vIG5vdCBzcGVjaWZ5aW5nIHRoZSBidWZmZXJTaXplIG9mIHNoYXJlUmVwbGF5IHNvIGFsbCBpbmplY3RvcnMgYXJlIHJlY2VpdmVkIG9uIHN1YnNjcmlwdGlvblxuICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICk7XG4gICAgdGhpcy5yZWZyZXNoJCA9IHRoaXMuX3JlZnJlc2gkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuICAgIHRoaXMucGx1Z2luRGV0YWlscyQgPSB0aGlzLl9wbHVnaW5EZXRhaWxzJC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgLy8gbm90IHNwZWNpZnlpbmcgdGhlIGJ1ZmZlclNpemUgb2Ygc2hhcmVSZXBsYXkgc28gYWxsIGRldGFpbHMgYXJlIHJlY2VpdmVkIG9uIHN1YnNjcmlwdGlvblxuICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICk7XG4gICAgdGhpcy5hbGxQbHVnaW5zTG9hZGVkJCA9IHRoaXMuX2FsbFBsdWdpbnNMb2FkZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHBsdWdpbnMgYnkgcmVzb2x2aW5nIHRoZSByZW1vdGUgTmdNb2R1bGVzIGFuZCBpbmplY3RpbmcgaXQuIEFsc28gYXR0YWNoaW5nXG4gICAqIHRoZSBob29rcyBvbnRvIHRoZSByb290IGluamVjdG9yLlxuICAgKiBAcGFyYW0gcmVtb3RlTW9kdWxlcyBUaGUgcmVtb3RlIHBsdWdpbnMgdG8gbG9hZCBhcyBmYWN0b3J5IG5hbWUgbWFwcGluZyBhcnJheS5cbiAgICovXG4gIHJlc29sdmVSZW1vdGVQbHVnaW5zKHJlbW90ZU1vZHVsZXM6IEFycmF5PHsgZmFjdG9yeTsgbmFtZSB9Pikge1xuICAgIHRoaXMubG9hZE1vZHVsZXNEeW5hbWljYWxseShyZW1vdGVNb2R1bGVzKTtcbiAgICB0aGlzLnJlZnJlc2hIb29rcygpO1xuICAgIHRoaXMubWFya1BsdWdpbnNBc0xvYWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIG1vZHVsZXMgYW5kIGhhbmRsZXMgaG9va2luZyBjb3JyZWN0bHkuXG4gICAqIEBwYXJhbSByZW1vdGVOZ01vZHVsZXMgVGhlIG1vZHVsZXMgdG8gbG9hZC5cbiAgICovXG4gIGxvYWRNb2R1bGVzRHluYW1pY2FsbHkocmVtb3RlTW9kdWxlczogQXJyYXk8eyBmYWN0b3J5OyBuYW1lIH0+KSB7XG4gICAgZm9yIChjb25zdCB7IGZhY3RvcnksIG5hbWUgfSBvZiByZW1vdGVNb2R1bGVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmxvYWRNb2R1bGUoZmFjdG9yeVtuYW1lXSk7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9hZCAke25hbWV9YCwgZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxvYWRNb2R1bGU8VCA9IHVua25vd24+KHJlbW90ZU5nTW9kdWxlOiBOZ01vZHVsZVJlZjxUPiB8IFR5cGU8VD4pIHtcbiAgICBsZXQgbW9kdWxlUmVmOiBOZ01vZHVsZVJlZjxUPjtcbiAgICBpZiAocmVtb3RlTmdNb2R1bGUgaW5zdGFuY2VvZiBOZ01vZHVsZVJlZikge1xuICAgICAgLy8gQU9UXG4gICAgICBtb2R1bGVSZWYgPSByZW1vdGVOZ01vZHVsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSklUXG4gICAgICBtb2R1bGVSZWYgPSBjcmVhdGVOZ01vZHVsZShyZW1vdGVOZ01vZHVsZSwgdGhpcy5pbmplY3Rvcik7XG4gICAgfVxuICAgIHRoaXMuX2luamVjdG9ycyQubmV4dChtb2R1bGVSZWYuaW5qZWN0b3IpO1xuICAgIHRoaXMuX3BsdWdpbkRldGFpbHMkLm5leHQoeyBtb2R1bGVSZWYsIHJlbW90ZU5nTW9kdWxlIH0pO1xuICAgIHJldHVybiBtb2R1bGVSZWY7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCByZWZyZXNoIGFsbCBjdXJyZW50IHJlZ2lzdGVyZWQgaG9va3MuXG4gICAqL1xuICByZWZyZXNoSG9va3MoKSB7XG4gICAgdGhpcy5fcmVmcmVzaCQubmV4dCgpO1xuICB9XG5cbiAgbWFya1BsdWdpbnNBc0xvYWRlZCgpIHtcbiAgICB0aGlzLl9hbGxQbHVnaW5zTG9hZGVkJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGEgbGlzdCBvZiByZW1vdGVzIHNvIHRoYXQgYSBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlbS5cbiAgICogVGhlIHJlcXVlc3QgaXMgbWFkZSB0byB0aGUgZm9sbG93aW5nIGFkZHJlc3M6IC9hcHBzLzxjb250ZXh0UGF0aD4vcmVtb3RlRW50cnkuanNcbiAgICogQHBhcmFtIHJlbW90ZXMgTGlzdCBvZiByZW1vdGVzIHRvIGJlIGxvYWRlZC5cbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgbGlzdCBvZiBsb2FkZWQgbW9kdWxlcyBmcm9tIHJlbW90ZXMuXG4gICAqL1xuICBhc3luYyBsb2FkUmVtb3RlcyhyZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMpIHtcbiAgICBpZiAoIXJlbW90ZXMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgcmVtb3RlTW9kdWxlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgcGx1Z2luSWQgaW4gcmVtb3Rlcykge1xuICAgICAgaWYgKHJlbW90ZXMuaGFzT3duUHJvcGVydHkocGx1Z2luSWQpKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZU5hbWVzID0gcmVtb3Rlc1twbHVnaW5JZF07XG4gICAgICAgIGNvbnN0IHVybCA9IGAvYXBwcy8ke3BsdWdpbklkfS9yZW1vdGVFbnRyeS5qcz9ub2NhY2hlPSR7ZGF0ZS5nZXRUaW1lKCl9YDtcbiAgICAgICAgbGV0IGF0TGVhc3RPbmVNb2R1bGVMb2FkZWRTdWNjZXNzZnVsbHkgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGVOYW1lIG9mIG1vZHVsZU5hbWVzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlbW90ZU1vZHVsZXMucHVzaChhd2FpdCB0aGlzLmxvYWRSZW1vdGVNb2R1bGUodXJsLCBwbHVnaW5JZCwgbW9kdWxlTmFtZSkpO1xuICAgICAgICAgICAgYXRMZWFzdE9uZU1vZHVsZUxvYWRlZFN1Y2Nlc3NmdWxseSA9IHRydWU7XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgQ291bGQgbm90IGxvYWQgcmVtb3RlIG1vZHVsZSAnJXMnIGZyb20gdXJsOmAsIG1vZHVsZU5hbWUsIHVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm8gbmVlZCB0byBsb2FkIHRyYW5zbGF0aW9ucyBpZiB3ZSB3ZXJlIHVuYWJsZSB0byBsb2FkIGEgc2luZ2xlIG1vZHVsZS4uXG4gICAgICAgIGlmIChhdExlYXN0T25lTW9kdWxlTG9hZGVkU3VjY2Vzc2Z1bGx5KSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2FkUmVtb3RlVHJhbnNsYXRpb25zKHBsdWdpbklkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBBZGRlZCB0byBlbnN1cmUgdGhhdCB0aGUgdHJhbnNsYXRpb25zIGZyb20gcHVibGljLW9wdGlvbnMgYXJlIG5vdCBvdmVycmlkZGVuIGJ5IHRoZSBwbHVnaW4gdHJhbnNsYXRpb25zXG4gICAgY29uc3QgeyBsYW5nIH0gPSB0aGlzLmFwcFN0YXRlLnN0YXRlO1xuICAgIGlmICh0aGlzLm9wdGlvbnNTZXJ2aWNlLmxhbmdzRGV0YWlscyAmJiB0aGlzLm9wdGlvbnNTZXJ2aWNlLmxhbmdzRGV0YWlsc1tsYW5nXSkge1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldFRyYW5zbGF0aW9uKGxhbmcsIHRoaXMub3B0aW9uc1NlcnZpY2UubGFuZ3NEZXRhaWxzW2xhbmddLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbW90ZU1vZHVsZXM7XG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgYSBsaXN0IG9mIHJlbW90ZXMgYW5kIHR1cm5zIGl0IGludG8gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdW5pb24gb2YgY29ycmVzcG9uZGluZyByZW1vdGVzLlxuICAgKiBAcGFyYW0gbWZSZW1vdGVzIExpc3Qgb2YgdGhlIHJlbW90ZXMuXG4gICAqIEByZXR1cm5zIFJldHVybnMgb2JqZWN0IHdpdGggbWVyZ2VkIHJlbW90ZXMuXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgc3RhdGljIGZ1bmN0aW9uIG1lcmdlUmVtb3RlcyBhcyB0aGlzIGlzIGEgcHVyZSBmdW5jdGlvbi5cbiAgICpcbiAgICogKipFeGFtcGxlKipcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZW1vdGVzQTpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSB7IGNvbnRleHRQYXRoQTogWydtb2R1bGVBJywgJ21vZHVsZUInXSB9O1xuICAgKiBjb25zdCByZW1vdGVzQjpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSB7IGNvbnRleHRQYXRoQTogWydtb2R1bGVBJ10sIGNvbnRleHRQYXRoQjogWydtb2R1bGVaJ10gfTtcbiAgICogY29uc3QgbWVyZ2VkUmVtb3RlczpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSBtZXJnZU1GUmVtb3RlcyhbcmVtb3Rlc0EsIHJlbW90ZXNCXSk7XG4gICAqIC8vIFJlc3VsdFxuICAgKiB7XG4gICAqICBjb250ZXh0UGF0aEE6IFsnbW9kdWxlQScsICdtb2R1bGVCJ10sXG4gICAqICBjb250ZXh0UGF0aEI6IFsnbW9kdWxlWiddXG4gICAqIH1cbiAgICpcbiAgICogYGBgXG4gICAqL1xuICBtZXJnZU1GUmVtb3RlcyhtZlJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2luc1tdKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICByZXR1cm4gUGx1Z2luc1Jlc29sdmVTZXJ2aWNlLm1lcmdlUmVtb3RlcyhtZlJlbW90ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBVUkwgcmVtb3RlcyBjYWNoZS5cbiAgICovXG4gIGNsZWFyVVJMUmVtb3Rlc0NhY2hlKCkge1xuICAgIHRoaXMudXJsUmVtb3Rlc0NhY2hlID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHJlbW90ZXMgbGlzdCBmcm9tIHRoZSBVUkwuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGxpc3Qgb2YgcmVtb3Rlcy5cbiAgICovXG4gIGxvYWRVcmxSZW1vdGVzKCkge1xuICAgIGlmICghdGhpcy51cmxSZW1vdGVzQ2FjaGUpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICBjb25zdCByZW1vdGVzID0gcGFyYW1zLmdldCgncmVtb3RlcycpO1xuICAgICAgaWYgKHJlbW90ZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLnVybFJlbW90ZXNDYWNoZSA9IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHJlbW90ZXMpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBwYXJzZSByZW1vdGVzOiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVybFJlbW90ZXNDYWNoZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbW90ZVRyYW5zbGF0aW9ucyhwbHVnaW5JZDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgbGFuZyB9ID0gdGhpcy5hcHBTdGF0ZS5zdGF0ZTtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZldGNoQ2xpZW50LmZldGNoKGAvYXBwcy8ke3BsdWdpbklkfS8ke2xhbmd9Lmpzb25gKTtcbiAgICAgIGlmIChyZXNwLnN0YXR1cyA8IDQwMCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwLmpzb24oKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldFRyYW5zbGF0aW9uKGxhbmcsIHJlc3VsdFtsYW5nXSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGxvYWQgdHJhbnNsYXRpb25zIGZvciAke3BsdWdpbklkfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbW90ZU1vZHVsZShcbiAgICByZW1vdGVFbnRyeVVybDogc3RyaW5nLFxuICAgIHJlbW90ZUNvbnRleHRQYXRoOiBzdHJpbmcsXG4gICAgZXhwb3NlZE1vZHVsZTogc3RyaW5nXG4gICk6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IGZhY3Rvcnk6IEZhY3RvcnkgfT4ge1xuICAgIGlmICghdGhpcy5yZW1vdGVTY3JpcHRTZXQuaGFzKHJlbW90ZUVudHJ5VXJsKSkge1xuICAgICAgdGhpcy5yZW1vdGVTY3JpcHRTZXQuYWRkKHJlbW90ZUVudHJ5VXJsKTtcbiAgICAgIGF3YWl0IHRoaXMubG9hZFJlbW90ZUVudHJ5KHJlbW90ZUVudHJ5VXJsKTtcbiAgICB9XG4gICAgbGV0IGNvbnRleHRQYXRoOiBzdHJpbmcgPSByZW1vdGVDb250ZXh0UGF0aDtcbiAgICBpZiAoY29udGV4dFBhdGguaW5jbHVkZXMoJ0AnKSkge1xuICAgICAgY29udGV4dFBhdGggPSByZW1vdGVDb250ZXh0UGF0aC5zcGxpdCgnQCcpWzBdO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5sb29rdXBFeHBvc2VkTW9kdWxlKGNhbWVsQ2FzZShjb250ZXh0UGF0aCksIGV4cG9zZWRNb2R1bGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUmVtb3RlRW50cnkocmVtb3RlRW50cnlVcmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdC5zcmMgPSByZW1vdGVFbnRyeVVybDtcblxuICAgICAgc2NyaXB0Lm9uZXJyb3IgPSByZWplY3Q7XG5cbiAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTsgLy8gd2luZG93IGlzIHRoZSBnbG9iYWwgbmFtZXNwYWNlXG4gICAgICB9O1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChzY3JpcHQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb29rdXBFeHBvc2VkTW9kdWxlKFxuICAgIHJlbW90ZU5hbWU6IHN0cmluZyxcbiAgICBleHBvc2VkTW9kdWxlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgZmFjdG9yeTogRmFjdG9yeSB9PiB7XG4gICAgLy8gSW5pdGlhbGl6ZXMgdGhlIHNoYXJlIHNjb3BlLiBUaGlzIGZpbGxzIGl0IHdpdGgga25vd24gcHJvdmlkZWQgbW9kdWxlcyBmcm9tIHRoaXMgYnVpbGQgYW5kIGFsbCByZW1vdGVzXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IF9fd2VicGFja19pbml0X3NoYXJpbmdfXygnZGVmYXVsdCcpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgTW9kdWxlICVzIGNvdWxkIG5vdCBiZSBsb2FkZWQuIE1vZHVsZSBGZWRlcmF0aW9uIGlzIG5vdCBlbmFibGVkIGluIHRoaXMgYXBwbGljYXRpb24uYCxcbiAgICAgICAgZXhwb3NlZE1vZHVsZSxcbiAgICAgICAgZXhcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHdpbmRvd1tyZW1vdGVOYW1lXSBhcyBDb250YWluZXI7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBjb250YWluZXIsIGl0IG1heSBwcm92aWRlIHNoYXJlZCBtb2R1bGVzXG4gICAgbGV0IGZhY3Rvcnk6IEZhY3Rvcnk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvbnRhaW5lci5pbml0KF9fd2VicGFja19zaGFyZV9zY29wZXNfXy5kZWZhdWx0KTtcbiAgICAgIGZhY3RvcnkgPSAoYXdhaXQgY29udGFpbmVyLmdldChleHBvc2VkTW9kdWxlKSkoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc29sZS5lcnJvcihgTW9kdWxlICVzIGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwgZXhwb3NlZE1vZHVsZSwgZXgpO1xuICAgIH1cbiAgICByZXR1cm4geyBuYW1lOiBleHBvc2VkTW9kdWxlLCBmYWN0b3J5IH07XG4gIH1cbn1cbiJdfQ==
|