@c8y/ngx-components 1021.34.2 → 1021.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/assets-navigator/asset-selector/asset-selector-node.component.d.ts +1 -0
  2. package/assets-navigator/asset-selector/asset-selector-node.component.d.ts.map +1 -1
  3. package/assets-navigator/asset-selector/asset-selector.component.d.ts +2 -1
  4. package/assets-navigator/asset-selector/asset-selector.component.d.ts.map +1 -1
  5. package/assets-navigator/asset-selector/asset-selector.service.d.ts +15 -0
  6. package/assets-navigator/asset-selector/asset-selector.service.d.ts.map +1 -1
  7. package/context-dashboard/context-dashboard.service.d.ts +1 -1
  8. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  9. package/esm2022/assets-navigator/asset-selector/asset-selector-node.component.mjs +5 -3
  10. package/esm2022/assets-navigator/asset-selector/asset-selector.component.mjs +13 -4
  11. package/esm2022/assets-navigator/asset-selector/asset-selector.service.mjs +28 -1
  12. package/esm2022/assets-navigator/asset-selector/miller-view.component.mjs +1 -1
  13. package/esm2022/auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-modal.component.mjs +1 -1
  14. package/esm2022/cockpit-config/root-node-config.component.mjs +1 -1
  15. package/esm2022/context-dashboard/context-dashboard.service.mjs +30 -9
  16. package/esm2022/device-grid/columns/group.filtering-form-renderer.component.mjs +1 -1
  17. package/fesm2022/c8y-ngx-components-assets-navigator.mjs +44 -6
  18. package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +1 -1
  20. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  21. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +1 -1
  22. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  23. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +29 -8
  24. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  25. package/fesm2022/c8y-ngx-components-device-grid.mjs +1 -1
  26. package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
  27. package/locales/de.po +4 -4
  28. package/locales/es.po +4 -8
  29. package/locales/fr.po +4 -8
  30. package/locales/nl.po +4 -8
  31. package/locales/pl.po +9 -13
  32. package/locales/pt_BR.po +2 -6
  33. package/package.json +1 -1
@@ -57,6 +57,7 @@ export class AssetSelectorComponent extends AssetSelectorBase {
57
57
  */
58
58
  this.selectedItems = [];
59
59
  this.container = 'body';
60
+ this.isNodeSelectable = true;
60
61
  this.disabled = false;
61
62
  /**
62
63
  * Emits if one item was selected (all currently selected nodes).
@@ -114,6 +115,7 @@ export class AssetSelectorComponent extends AssetSelectorBase {
114
115
  * @ignore
115
116
  */
116
117
  async ngOnInit() {
118
+ this.assetSelectorService.setIsNodeSelectable(this.isNodeSelectable);
117
119
  if (this.index === 0) {
118
120
  this.config = { ...CONFIG_OPTIONS_DEFAULT, ...this.config };
119
121
  }
@@ -139,6 +141,9 @@ export class AssetSelectorComponent extends AssetSelectorBase {
139
141
  this.root = this.rootNode.root;
140
142
  }
141
143
  async ngOnChanges(changes) {
144
+ if (changes.isNodeSelectable) {
145
+ this.assetSelectorService.setIsNodeSelectable(this.isNodeSelectable);
146
+ }
142
147
  if (changes.asset &&
143
148
  changes.asset.currentValue &&
144
149
  Object.keys(changes.asset.currentValue).length !== 0) {
@@ -295,7 +300,7 @@ export class AssetSelectorComponent extends AssetSelectorBase {
295
300
  }
296
301
  }
297
302
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AssetSelectorComponent, deps: [{ token: i1.GroupNodeService }, { token: i2.InventoryService }, { token: i3.AssetSelectorService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
298
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AssetSelectorComponent, selector: "c8y-asset-selector", inputs: { config: "config", active: "active", index: "index", asset: "asset", selectedDevice: "selectedDevice", selected: "selected", rootNode: "rootNode", selectedItems: "selectedItems", container: "container", disabled: "disabled" }, outputs: { onSelected: "onSelected", onClearSelected: "onClearSelected", onRowSelected: "onRowSelected", onLoad: "onLoad" }, providers: [
303
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AssetSelectorComponent, selector: "c8y-asset-selector", inputs: { config: "config", active: "active", index: "index", asset: "asset", selectedDevice: "selectedDevice", selected: "selected", rootNode: "rootNode", selectedItems: "selectedItems", container: "container", isNodeSelectable: "isNodeSelectable", disabled: "disabled" }, outputs: { onSelected: "onSelected", onClearSelected: "onClearSelected", onRowSelected: "onRowSelected", onLoad: "onLoad" }, providers: [
299
304
  {
300
305
  provide: NG_VALUE_ACCESSOR,
301
306
  multi: true,
@@ -305,7 +310,8 @@ export class AssetSelectorComponent extends AssetSelectorBase {
305
310
  provide: NG_VALIDATORS,
306
311
  useExisting: forwardRef(() => AssetSelectorComponent),
307
312
  multi: true
308
- }
313
+ },
314
+ AssetSelectorService
309
315
  ], 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=\"tag tag--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 [disabled]=\"disabled\"\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 [disabled]=\"disabled\"\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", "disabled"], 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" }] }); }
310
316
  }
311
317
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AssetSelectorComponent, decorators: [{
@@ -320,7 +326,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
320
326
  provide: NG_VALIDATORS,
321
327
  useExisting: forwardRef(() => AssetSelectorComponent),
322
328
  multi: true
323
- }
329
+ },
330
+ AssetSelectorService
324
331
  ], 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=\"tag tag--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 [disabled]=\"disabled\"\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 [disabled]=\"disabled\"\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" }]
325
332
  }], ctorParameters: () => [{ type: i1.GroupNodeService }, { type: i2.InventoryService }, { type: i3.AssetSelectorService }, { type: i0.ChangeDetectorRef }], propDecorators: { config: [{
326
333
  type: Input
@@ -340,6 +347,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
340
347
  type: Input
341
348
  }], container: [{
342
349
  type: Input
350
+ }], isNodeSelectable: [{
351
+ type: Input
343
352
  }], disabled: [{
344
353
  type: Input
345
354
  }], onSelected: [{
@@ -354,4 +363,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
354
363
  type: ViewChild,
355
364
  args: ['header']
356
365
  }] } });
357
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXNzZXRzLW5hdmlnYXRvci9hc3NldC1zZWxlY3Rvci9hc3NldC1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9hc3NldHMtbmF2aWdhdG9yL2Fzc2V0LXNlbGVjdG9yL2Fzc2V0LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsVUFBVSxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQStCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUdMLHNCQUFzQixFQUN2QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7QUFFOUM7O0dBRUc7QUFp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dGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElJZGVudGlmaWVkLCBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBc3NldFNlbGVjdG9yQmFzZSB9IGZyb20gJy4vYXNzZXQtc2VsZWN0b3ItYmFzZSc7XG5pbXBvcnQge1xuICBBc3NldFNlbGVjdGlvbkNoYW5nZUV2ZW50LFxuICBBc3NldFNlbGVjdG9yT3B0aW9ucyxcbiAgQ09ORklHX09QVElPTlNfREVGQVVMVFxufSBmcm9tICcuL2Fzc2V0LXNlbGVjdG9yLm1vZGVsJztcbmltcG9ydCB7IEFzc2V0U2VsZWN0b3JTZXJ2aWNlIH0gZnJvbSAnLi9hc3NldC1zZWxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IEdyb3VwTm9kZSB9IGZyb20gJy4vZ3JvdXAtbm9kZSc7XG5pbXBvcnQgeyBHcm91cE5vZGVTZXJ2aWNlIH0gZnJvbSAnLi9ncm91cC1ub2RlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVW5hc3NpZ25lZERldmljZXNOb2RlIH0gZnJvbSAnLi91bmFzc2lnbmVkLWRldmljZXMtbm9kZSc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5cbi8qKlxuICogRGlzcGxheXMgYSBoaWVyYXJjaGljYWwgdHJlZSBzZWxlY3RvciBmb3IgYXNzZXRzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYXNzZXQtc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vYXNzZXQtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXNzZXRTZWxlY3RvckNvbXBvbmVudClcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBc3NldFNlbGVjdG9yQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEFzc2V0U2VsZWN0b3JDb21wb25lbnQgZXh0ZW5kcyBBc3NldFNlbGVjdG9yQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBDb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIG9wdGlvbnMgZm9yIHRoZSBhc3NldCBzZWxlY3Rvci5cbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZzogQXNzZXRTZWxlY3Rvck9wdGlvbnMgPSB7fTtcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIG5vZGUsIHdoaWNoIHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgYWN0aXZlLlxuICAgKi9cbiAgQElucHV0KCkgYWN0aXZlOiBHcm91cE5vZGU7XG4gIC8qKlxuICAgKiBVc2VkIG9ubHkgZm9yIG1pbGxlci12aWV3LCBkaXNwbGF5cyB0aGUgY29sdW1uIGxldmVsIGZvciB0aGUgY3VycmVudCBub2RlLlxuICAgKiBFLmcgaWYgdGhlIGluZGV4IGlzIG9uZSwgdGhpcyB3aWxsIGJlIHNlY29uZCBjb2x1bW4uXG4gICAqL1xuICBASW5wdXQoKSBpbmRleCA9IDA7XG4gIC8qKlxuICAgKiBUaGUgYXNzZXQgdG8gdXNlIGFzIHJvb3QuXG4gICAqL1xuICBASW5wdXQoKSBhc3NldDogSUlkZW50aWZpZWQgPSB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgc2VsZWN0ZWQgZGV2aWNlLlxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0ZWREZXZpY2U6IElNYW5hZ2VkT2JqZWN0ID0gdW5kZWZpbmVkO1xuICAvKipcbiAgICogQW4gYXJyYXkgb2YgcHJlZGVmaW5lZCBub2Rlcy5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkOiBBcnJheTxQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0Pj4gfCBJSWRlbnRpZmllZFtdIHwgSUlkZW50aWZpZWQgPSBbXTtcbiAgLyoqXG4gICAqIFRoZSBub2RlIHRvIHVzZSBhcyByb290LiBZb3UgY2FuIGVpdGhlciBzZXQgdGhpcywgb3IgdGhlIGFzc2V0IHRvIHN0YXJ0IGZyb20uXG4gICAqL1xuICBASW5wdXQoKSByb290Tm9kZTogR3JvdXBOb2RlO1xuICAvKipcbiAgICogQWxsIGN1cnJlbnRseSBzZWxlY3RlZCBhc3NldHMuXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1zOiBJSWRlbnRpZmllZFtdIHwgSUlkZW50aWZpZWQgPSBbXTtcbiAgQElucHV0KCkgY29udGFpbmVyOiAnJyB8ICdib2R5JyA9ICdib2R5JztcblxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAvKipcbiAgICogRW1pdHMgaWYgb25lIGl0ZW0gd2FzIHNlbGVjdGVkIChhbGwgY3VycmVudGx5IHNlbGVjdGVkIG5vZGVzKS5cbiAgICovXG4gIEBPdXRwdXQoKSBvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBc3NldFNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuICAvKipcbiAgICogRW1pdHMgaWYgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBhc3NldCBpcyBjbGVhcmVkLlxuICAgKi9cbiAgQE91dHB1dCgpIG9uQ2xlYXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIFVzZWQgb25seSBmb3IgbWlsbGVyIHZpZXcuIEVtaXQgdGhlIHNlbGVjdGVkIG5vZGUgYW5kIHVzZSBpdCBhcyBhICdyb290Tm9kZScgZm9yIHRoZSBuZXcgY29sdW1uLlxuICAgKi9cbiAgQE91dHB1dCgpIG9uUm93U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBjdXJyZW50IGxvYWRpbmcgc3RhdGUgb2YgdGhlIG5vZGUuXG4gICAqL1xuICBAT3V0cHV0KCkgb25Mb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBmaWx0ZXIgYXBwbGllZC5cbiAgICovXG4gIGZpbHRlclRleHQgPSAnJztcbiAgLyoqXG4gICAqIERpc3BsYXlzIHRoZSBnbG9iYWwgc2VhcmNoIGF0IGFsbCB0aW1lcyBpZiB0aGUgbWlsbGVyIHZpZXcgaXMgdXNlZFxuICAgKiBvbiByb290IGdyb3VwIGxldmVsLlxuICAgKi9cbiAgcm9vdCA9IGZhbHNlO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgaGVhZGVyIGhpZ2h0IGluIHBpeGVsLlxuICAgKi9cbiAgZ2V0SGVhZGVySGVpZ2h0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG4gIHJlYWRvbmx5IEFTU0VUX0NPTlNUID0gZ2V0dGV4dCgnQXNzZXQge3sgYXNzZXRJZCB9fScpO1xuXG4gIEBWaWV3Q2hpbGQoJ2hlYWRlcicpXG4gIHByaXZhdGUgaGVhZGVyOiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlIG9ubHkgRElcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBncm91cE5vZGVTZXJ2aWNlOiBHcm91cE5vZGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFzc2V0U2VsZWN0b3JTZXJ2aWNlOiBBc3NldFNlbGVjdG9yU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKGdyb3VwTm9kZVNlcnZpY2UsIGludmVudG9yeSwgYXNzZXRTZWxlY3RvclNlcnZpY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGVuIGEgbm9kZSB3YXMgc2VsZWN0ZWQsIGlmIGEgbmV3IGNvbHVtbiBuZWVkcyB0byBiZSBhZGRlZC5cbiAgICogQHBhcmFtIG5vZGUgVGhlIG5vZGUgdGhhdCB3YXMgY2xpY2tlZC5cbiAgICogQHBhcmFtIGluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoaXMgbm9kZS5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY2xpY2sgd2FzIGhhbmRsZWQgYW5kIGEgbmV3IGNvbHVtbiB3YXMgYWRkZWQuXG4gICAqL1xuICBoYW5kbGVOZXh0TWlsbGVyVmlld0NvbHVtbihub2RlOiBHcm91cE5vZGUsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBub2RlQ29weSA9IE9iamVjdC5jcmVhdGUobm9kZSk7XG4gICAgY29uc3QgaXNTYW1lQXNSb290ID0gdGhpcy5yb290Tm9kZSA9PT0gbm9kZTtcbiAgICBjb25zdCBpc1VuYXNzaWduZWREZXZpY2VzTm9kZSA9IG5vZGUudG9TdHJpbmcoKSA9PT0gVW5hc3NpZ25lZERldmljZXNOb2RlLk5BTUU7XG4gICAgY29uc3QgaXNOZXdDb2x1bW5OZWVkZWQgPVxuICAgICAgIWlzU2FtZUFzUm9vdCAmJiAobm9kZS5pc0dyb3VwKCkgfHwgaXNVbmFzc2lnbmVkRGV2aWNlc05vZGUgfHwgbm9kZS5oYXNDaGlsZERldmljZXMoKSk7XG5cbiAgICBpZiAoaXNOZXdDb2x1bW5OZWVkZWQpIHtcbiAgICAgIHRoaXMub25Sb3dTZWxlY3RlZC5lbWl0KHsgbm9kZUNvcHksIGluZGV4IH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5pbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5jb25maWcgPSB7IC4uLkNPTkZJR19PUFRJT05TX0RFRkFVTFQsIC4uLnRoaXMuY29uZmlnIH07XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZFJlc2V0TmFtZUZpbHRlciA9XG4gICAgICB0aGlzLnJvb3ROb2RlICYmIHRoaXMucm9vdE5vZGUubW8gJiYgdGhpcy5jb25maWcudmlldyA9PT0gJ21pbGxlcic7XG4gICAgaWYgKHNob3VsZFJlc2V0TmFtZUZpbHRlcikge1xuICAgICAgYXdhaXQgdGhpcy5hcHBseUZpbHRlcignJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNPbmx5QXNzZXROb2RlRGVmaW5lZCA9IHRoaXMuYXNzZXQ7XG4gICAgaWYgKGlzT25seUFzc2V0Tm9kZURlZmluZWQpIHtcbiAgICAgIHRoaXMucm9vdE5vZGUgPSBhd2FpdCB0aGlzLmNyZWF0ZU1hbmFnZWRPYmplY3RSb290Tm9kZSh0aGlzLmFzc2V0KTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0FueU5vZGVEZWZpbmVkID1cbiAgICAgICF0aGlzLnJvb3ROb2RlICYmICghdGhpcy5hc3NldCB8fCBPYmplY3Qua2V5cyh0aGlzLmFzc2V0KS5sZW5ndGggPT09IDApO1xuICAgIGlmIChpc0FueU5vZGVEZWZpbmVkKSB7XG4gICAgICB0aGlzLnJvb3ROb2RlID0gdGhpcy5jcmVhdGVEZWZhdWx0Um9vdE5vZGUoKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZy5zaG93VW5hc3NpZ25lZERldmljZXMgJiZcbiAgICAgICghdGhpcy5hc3NldCB8fCBPYmplY3Qua2V5cyh0aGlzLmFzc2V0KS5sZW5ndGggPT09IDApICYmXG4gICAgICB0aGlzLnJvb3ROb2RlLnJvb3RcbiAgICApIHtcbiAgICAgIHRoaXMucm9vdE5vZGUuYWRkKFxuICAgICAgICBuZXcgVW5hc3NpZ25lZERldmljZXNOb2RlKHRoaXMuZ3JvdXBOb2RlU2VydmljZSwge1xuICAgICAgICAgIHNob3dDaGlsZERldmljZXM6IHRoaXMuY29uZmlnLnNob3dDaGlsZERldmljZXNcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucm9vdCA9IHRoaXMucm9vdE5vZGUucm9vdDtcbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzLmFzc2V0ICYmXG4gICAgICBjaGFuZ2VzLmFzc2V0LmN1cnJlbnRWYWx1ZSAmJlxuICAgICAgT2JqZWN0LmtleXMoY2hhbmdlcy5hc3NldC5jdXJyZW50VmFsdWUpLmxlbmd0aCAhPT0gMFxuICAgICkge1xuICAgICAgdGhpcy5yb290Tm9kZSA9IGF3YWl0IHRoaXMuY3JlYXRlTWFuYWdlZE9iamVjdFJvb3ROb2RlKGNoYW5nZXMuYXNzZXQuY3VycmVudFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5oZWFkZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5nZXRIZWFkZXJIZWlnaHQkLm5leHQodGhpcy5oZWFkZXIubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nZXRIZWFkZXJIZWlnaHQkLm5leHQoMCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgY3VycmVudCByb290IHRvIG9uZSBsZXZlbCBiYWNrLlxuICAgKi9cbiAgYmFjaygpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXggLSAxO1xuICAgIGNvbnN0IG5vZGVDb3B5ID0gT2JqZWN0LmNyZWF0ZSh0aGlzLnJvb3ROb2RlLnBhcmVudHNbMF0pO1xuICAgIHRoaXMub25Sb3dTZWxlY3RlZC5lbWl0KHsgbm9kZUNvcHksIGluZGV4IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgY3VycmVudCBmaWx0ZXIuXG4gICAqL1xuICBjbGVhckZpbHRlcnMoKSB7XG4gICAgdGhpcy5maWx0ZXJUZXh0ID0gJyc7XG4gICAgdGhpcy5hcHBseUZpbHRlcignJyk7XG4gIH1cblxuICBjbGVhclNlbGVjdGVkRGV2aWNlcygpIHtcbiAgICB0aGlzLnNlbGVjdGVkRGV2aWNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIoJycpO1xuICAgIHRoaXMub25DbGVhclNlbGVjdGVkLmVtaXQoKTtcbiAgfVxuXG4gIGlzR3JvdXBTZWxlY3RlZCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZC5zb21lKHNlbGVjdGVkTm9kZSA9PiBzZWxlY3RlZE5vZGUuaWQgPT09IHRoaXMucm9vdE5vZGUubW8/LmlkKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdyb3VwTmFtZUZpbHRlcihuYW1lRmlsdGVyOiBzdHJpbmcsIG1vSWQsIHNob3dVbmFzc2lnbmVkRGV2aWNlcz86IGJvb2xlYW4pIHtcbiAgICBpZiAobmFtZUZpbHRlcikge1xuICAgICAgY29uc3QgZmlsdGVyQnlOYW1lID0gc2hvd1VuYXNzaWduZWREZXZpY2VzXG4gICAgICAgID8ge1xuICAgICAgICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgICAgICAgbmFtZTogbmFtZUZpbHRlclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9fb3JkZXJieTogW3sgbmFtZTogMSB9XVxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBfX2ZpbHRlcjoge1xuICAgICAgICAgICAgICBuYW1lOiBuYW1lRmlsdGVyLFxuICAgICAgICAgICAgICBfX2J5Z3JvdXBpZDogbW9JZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5hc3NldFNlbGVjdG9yU2VydmljZS5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KGZpbHRlckJ5TmFtZSk7XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSB7XG4gICAgICBfX2ZpbHRlcjoge1xuICAgICAgICBfX2J5Z3JvdXBpZDogbW9JZFxuICAgICAgfSxcbiAgICAgIF9fb3JkZXJieTogW3sgbmFtZTogMSB9XVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYXNzZXRTZWxlY3RvclNlcnZpY2UucXVlcmllc1V0aWwuYnVpbGRRdWVyeShkZWZhdWx0RmlsdGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgZmlsdGVyLlxuICAgKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIgdG8gYXBwbHkuXG4gICAqL1xuICBhc3luYyBhcHBseUZpbHRlcihmaWx0ZXI6IHN0cmluZykge1xuICAgIHRoaXMucm9vdE5vZGUuZmlsdGVyUXVlcnkkLm5leHQoXG4gICAgICB0aGlzLmdyb3VwTmFtZUZpbHRlcihcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICB0aGlzLnJvb3ROb2RlLm1vLmlkLFxuICAgICAgICB0aGlzLmlzVW5hc3NpZ25lZERldmljZXNOb2RlKCkgPyB0cnVlIDogZmFsc2VcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMucm9vdE5vZGUucmVmcmVzaCgpO1xuICAgIHRoaXMub25Mb2FkLmVtaXQoe1xuICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgIGZpbHRlclRleHQ6IHRoaXMuZmlsdGVyVGV4dCxcbiAgICAgIGluZGV4OiB0aGlzLmluZGV4LFxuICAgICAgc2VsZWN0ZWREZXZpY2U6IHRoaXMuc2VsZWN0ZWREZXZpY2VcbiAgICB9KTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgVW5hc3NpZ25lZERldmljZSBub2RlIGlzIHRoZSByb290Tm9kZS5cbiAgICovXG4gIGlzVW5hc3NpZ25lZERldmljZXNOb2RlKCkge1xuICAgIHJldHVybiB0aGlzLnJvb3ROb2RlLnRvU3RyaW5nKCkgPT09IFVuYXNzaWduZWREZXZpY2VzTm9kZS5OQU1FO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHJlc2V0cyB0aGUgc2VhcmNoIHJlc3VsdC5cbiAgICovXG4gIG9uU2VhcmNoUmVzdWx0UmVzZXQoc2VsZWN0ZWRJdGVtKSB7XG4gICAgaWYgKHNlbGVjdGVkSXRlbSkge1xuICAgICAgdGhpcy5yb290Tm9kZSA9IHRoaXMuY3JlYXRlRGVmYXVsdFJvb3ROb2RlKCk7XG4gICAgICBpZiAodGhpcy5jb25maWcuc2hvd1VuYXNzaWduZWREZXZpY2VzKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUuYWRkKFxuICAgICAgICAgIG5ldyBVbmFzc2lnbmVkRGV2aWNlc05vZGUodGhpcy5ncm91cE5vZGVTZXJ2aWNlLCB7XG4gICAgICAgICAgICBzaG93Q2hpbGREZXZpY2VzOiB0aGlzLmNvbmZpZy5zaG93Q2hpbGREZXZpY2VzXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbmZpZy52aWV3ID09PSAnbWlsbGVyJykge1xuICAgICAgICB0aGlzLm9uUm93U2VsZWN0ZWQuZW1pdCh7IHJvb3Q6IHRydWUgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucm9vdE5vZGUuY2xpY2soeyBvcGVuOiB0cnVlIH0pO1xuICAgICAgdGhpcy5yb290Tm9kZS5ub2Rlc0ZldGNoZWRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgICBpZiAodGhpcy5jb25maWcudmlldyA9PT0gJ3RyZWUnKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUub3BlbiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBpZiB0aGUgdXNlciBjbGlja3Mgb24gYSBzZWFyY2ggcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgb25TZWFyY2hSZXN1bHRDbGljayhtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCBjYW5TZWxlY3ROb2RlID0gdGhpcy5jb25maWcuZ3JvdXBzU2VsZWN0YWJsZSB8fCAhdGhpcy5ncm91cE5vZGVTZXJ2aWNlLmlzR3JvdXAobW8pO1xuICAgIGlmICh0aGlzLmNvbmZpZy52aWV3ID09PSAnbWlsbGVyJykge1xuICAgICAgdGhpcy5yb290Tm9kZSA9IGF3YWl0IHRoaXMuY3JlYXRlTWFuYWdlZE9iamVjdFJvb3ROb2RlKG1vKTtcbiAgICAgIHRoaXMucm9vdE5vZGUuY2xpY2soeyBvcGVuOiB0cnVlIH0pO1xuICAgICAgY29uc3Qgbm9kZUNvcHkgPSBPYmplY3QuY3JlYXRlKHRoaXMucm9vdE5vZGUpO1xuICAgICAgdGhpcy5vblJvd1NlbGVjdGVkLmVtaXQoe1xuICAgICAgICBub2RlQ29weSxcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIHNlbGVjdGVkRGV2aWNlczogdGhpcy5zZWxlY3RlZERldmljZSxcbiAgICAgICAgcm9vdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5jb25maWcubXVsdGkpIHtcbiAgICAgIHRoaXMuZGVzZWxlY3RBbGwoKTtcbiAgICB9XG4gICAgaWYgKGNhblNlbGVjdE5vZGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0KG1vKTtcbiAgICB9XG4gIH1cblxuICBvbkxvYWRpbmcoaXNMb2FkaW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5vbkxvYWQuZW1pdCh7IGxvYWRpbmc6IGlzTG9hZGluZywgZmlsdGVyVGV4dDogdGhpcy5maWx0ZXJUZXh0IH0pO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblNlbGVjdChtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLnNlbGVjdChtbyk7XG4gIH1cblxuICBvbkRlc2VsZWN0KGNvbmZpZzogeyBkZXNlbGVjdE1vZGU6ICdzaW5nbGUnIHwgJ2FsbCc7IG1vOiBJTWFuYWdlZE9iamVjdCB9KSB7XG4gICAgc3dpdGNoIChjb25maWc/LmRlc2VsZWN0TW9kZSkge1xuICAgICAgY2FzZSAnc2luZ2xlJzpcbiAgICAgICAgdGhpcy5kZXNlbGVjdChjb25maWcubW8pO1xuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FsbCc6XG4gICAgICAgIHRoaXMuZGVzZWxlY3RBbGwoY29uZmlnLm1vKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiYmctaW5oZXJpdCBwLXQtOCBwLWItOCBzZXBhcmF0b3ItYm90dG9tIHAtci0xNiBwLWwtMTYgc3RpY2t5LXRvcFwiXG4gIFtuZ1N0eWxlXT1cInsgJ3otaW5kZXgnOiBjb25maWcuc2luZ2xlQ29sdW1uICYmIGNvbmZpZy5zZWFyY2ggPyAnMzAnIDogJzIwJyB9XCJcbiAgI2hlYWRlclxuICBbbmdDbGFzc109XCJ7XG4gICAgJ3AtYWJzb2x1dGUgbWlsbGVyLWNvbHVtbl9fc2VsZWN0aW9uIGQtZmxleCBmbGV4LXdyYXAgYS1pLWNlbnRlcic6IGNvbmZpZy52aWV3ID09PSAnbWlsbGVyJyxcbiAgICAnbWlsbGVyLWNvbHVtbl9fc2VhcmNoJzogY29uZmlnLnNlYXJjaCxcbiAgICAnbWlsbGVyLWNvbHVtbl9fbXVsdGknOiBjb25maWcubXVsdGlcbiAgfVwiXG4gICpuZ0lmPVwiXG4gICAgIXNlbGVjdGVkRGV2aWNlICYmXG4gICAgaW5kZXggPT09IDAgJiZcbiAgICAoY29uZmlnLnNlYXJjaCB8fCBjb25maWcubXVsdGkgfHwgY29uZmlnLmxhYmVsPy5sZW5ndGggfHwgY29uZmlnLnNob3dTZWxlY3RlZClcbiAgXCJcbj5cbiAgPHBcbiAgICBjbGFzcz1cInRleHQtbWVkaXVtIGZsZXgtbm8tc2hyaW5rIGEtcy1jZW50ZXJcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdtLWItNCc6IGNvbmZpZy5zZWFyY2ggJiYgcm9vdCAmJiBjb25maWcuc2luZ2xlQ29sdW1uLFxuICAgICAgJ20tci04JzogIWNvbmZpZy5zaW5nbGVDb2x1bW4gJiYgIWNvbmZpZy5zZWFyY2gsXG4gICAgICAnZml0LXcnOiBjb25maWcuc2luZ2xlQ29sdW1uXG4gICAgfVwiXG4gICAgKm5nSWY9XCJjb25maWcubGFiZWw/Lmxlbmd0aFwiXG4gID5cbiAgICB7eyBjb25maWcubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgPC9wPlxuICA8Yzh5LXNlYXJjaC1pbnB1dFxuICAgIFtuZ1N0eWxlXT1cInsgJ21pbi13aWR0aCc6ICFjb25maWcuc2luZ2xlQ29sdW1uICYmIGNvbmZpZy5sYWJlbC5sZW5ndGggPyAnNTAlJyA6ICdpbmhlcml0JyB9XCJcbiAgICAqbmdJZj1cImNvbmZpZy5zZWFyY2ggJiYgcm9vdFwiXG4gICAgKG9uQ2xpY2spPVwib25TZWFyY2hSZXN1bHRDbGljaygkZXZlbnQpXCJcbiAgICAocmVzZXQpPVwib25TZWFyY2hSZXN1bHRSZXNldCgkZXZlbnQpXCJcbiAgICBbbW9kZV09XCInc2VsZWN0J1wiXG4gICAgW2NvbnRhaW5lcl09XCJjb250YWluZXJcIlxuICAgIFtncm91cHNPbmx5XT1cImNvbmZpZy5ncm91cHNPbmx5XCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnbS1sLWF1dG8nOiAhY29uZmlnLnNpbmdsZUNvbHVtbiAmJiBjb25maWcubGFiZWwubGVuZ3RoLFxuICAgICAgJ2ZpdC13JzogY29uZmlnLnNpbmdsZUNvbHVtbiB8fCAhY29uZmlnLmxhYmVsLmxlbmd0aFxuICAgIH1cIlxuICA+PC9jOHktc2VhcmNoLWlucHV0PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJiZy1pbmhlcml0IGQtZmxleCBnYXAtNCBmaXQtd1wiXG4gICAgKm5nSWY9XCJjb25maWcuc2hvd1NlbGVjdGVkXCJcbiAgICBbbmdDbGFzc109XCJ7ICdtLXQtNCc6IGNvbmZpZy5zZWFyY2ggfVwiXG4gID5cbiAgICA8c3BhbiBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1yLTQgYS1zLWNlbnRlciBsLWgtMVwiPnt7ICdTZWxlY3RlZCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgtZ3JvdyBpbm5lci1zY3JvbGwgZC1mbGV4IGdhcC00IGEtaS1jZW50ZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0ZWQubGVuZ3RoXCI+XG4gICAgICAgIDxlbSBjbGFzcz1cInRleHQtMTIgdGV4dC1tdXRlZCBkLWZsZXggYS1pLWNlbnRlciBmaXQtaC0yMFwiPnt7ICdOb25lJyB8IHRyYW5zbGF0ZSB9fTwvZW0+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwidGFnIHRhZy0taW5mbyBjaGlwXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IHNlbGVjdGVkSXRlbSBvZiBzZWxlY3RlZFwiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4teHMgYnRuLWNsZWFuIHRleHQtMTBcIlxuICAgICAgICAgIHRpdGxlPVwie3sgc2VsZWN0ZWRJdGVtLm5hbWUgfX1cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImNvbmZpZy5tdWx0aSA/IGRlc2VsZWN0KHNlbGVjdGVkSXRlbSkgOiBkZXNlbGVjdEFsbCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGM4eUljb249XCJ0aW1lc1wiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIHt7IHNlbGVjdGVkSXRlbS5uYW1lIHx8IChBU1NFVF9DT05TVCB8IHRyYW5zbGF0ZTogeyBhc3NldElkOiBzZWxlY3RlZEl0ZW0uaWQgfSkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdlxuICBjbGFzcz1cInAtci0xNlwiXG4gICpuZ0lmPVwic2VsZWN0ZWREZXZpY2VcIlxuPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHAtYi00XCI+XG4gICAgPHBcbiAgICAgIGNsYXNzPVwidGV4dC1tZWRpdW0gcC10LTggbS1yLThcIlxuICAgICAgKm5nSWY9XCJzZWxlY3RlZERldmljZTsgZWxzZSBtdWx0aUFzc2V0c1wiXG4gICAgPlxuICAgICAge3sgJ1NlbGVjdGVkIGFzc2V0JyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvcD5cbiAgICA8bmctdGVtcGxhdGUgI211bHRpQXNzZXRzPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LW1lZGl1bSBtLXItOFwiPnt7ICdTZWxlY3RlZCBhc3NldHMnIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXhzIGEtcy1jZW50ZXIgbS10LTQgbS1sLWF1dG9cIlxuICAgICAgdGl0bGU9XCJ7eyAnQ2hhbmdlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJjbGVhclNlbGVjdGVkRGV2aWNlcygpXCJcbiAgICA+XG4gICAgICB7eyAnQ2hhbmdlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgIDxpXG4gICAgICBjbGFzcz1cInRleHQtc3VjY2VzcyBwLWwtMCBwLXItOFwiXG4gICAgICBbYzh5SWNvbl09XCInY2hlY2stY2lyY2xlJ1wiXG4gICAgPjwvaT5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJtLXItNCBpY29uLTIwXCJcbiAgICAgIFtjOHlJY29uXT1cInNlbGVjdGVkRGV2aWNlIHwgZ2V0R3JvdXBJY29uIHwgYXN5bmNcIlxuICAgID48L2k+XG4gICAgPHNwYW4+e3sgc2VsZWN0ZWREZXZpY2UubmFtZSB9fTwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBtaWxsZXIgY29sdW1ucyBoZWFkZXIgLS0+XG48ZGl2XG4gIGNsYXNzPVwibWlsbGVyLWNvbHVtbl9faGVhZGVyIHN0aWNreS10b3AgYmctaW5oZXJpdCBzZXBhcmF0b3ItYm90dG9tXCJcbiAgKm5nSWY9XCJcbiAgICBjb25maWcudmlldyA9PT0gJ21pbGxlcicgJiZcbiAgICAoKGNvbmZpZy5zaG93RmlsdGVyICYmICFyb290Tm9kZS5yb290KSB8fCBjb25maWcuY29sdW1uSGVhZGVycykgJiZcbiAgICAhc2VsZWN0ZWREZXZpY2VcbiAgXCJcbiAgW25nQ2xhc3NdPVwieyAncC10LTgnOiBjb25maWcuc2VhcmNoIH1cIlxuPlxuICA8cFxuICAgIGNsYXNzPVwidGV4dC0xMiB0ZXh0LW11dGVkIHRleHQtdHJ1bmNhdGUgbS1iLTRcIlxuICAgIHRpdGxlPVwie3sgcm9vdE5vZGUuYnJlYWRjcnVtYiB8fCByb290Tm9kZS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgKm5nSWY9XCJjb25maWcuc2luZ2xlQ29sdW1uICYmIGluZGV4ICE9PSAwXCJcbiAgPlxuICAgIDxpXG4gICAgICBjbGFzcz1cIm0tci00XCJcbiAgICAgIGM4eUljb249XCJob21lXCJcbiAgICA+PC9pPlxuICAgIHt7IHJvb3ROb2RlLmJyZWFkY3J1bWIgfHwgcm9vdE5vZGUubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgPC9wPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiXG4gICAgKm5nSWY9XCJjb25maWcuY29sdW1uSGVhZGVycyB8fCBjb25maWcuc2luZ2xlQ29sdW1uXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi14cyBtLXItOCBwLXQtMCBwLWItMCBwLWwtNCBwLXItNCBsLWgtMVwiXG4gICAgICB0aXRsZT1cInt7ICdCYWNrJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICpuZ0lmPVwiY29uZmlnLnNpbmdsZUNvbHVtbiAmJiAhcm9vdE5vZGUucm9vdCAmJiBpbmRleCAhPT0gMFwiXG4gICAgICAoY2xpY2spPVwiYmFjaygpXCJcbiAgICA+XG4gICAgICA8aSBjOHlJY29uPVwiYW5nbGUtbGVmdFwiPjwvaT5cbiAgICA8L2J1dHRvbj5cbiAgICA8bGFiZWxcbiAgICAgIGNsYXNzPVwiYzh5LXJhZGlvIGNoZWNrYm94LWlubGluZSBtLXItOFwiXG4gICAgICAqbmdJZj1cIiFyb290Tm9kZS5yb290ICYmIGluZGV4ID09PSAwICYmIChjb25maWcuZ3JvdXBzU2VsZWN0YWJsZSB8fCAhcm9vdE5vZGUuaXNHcm91cCgpKVwiXG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIHRpdGxlPVwie3sgJ1NlbGVjdCBncm91cCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAoY2hhbmdlKT1cInNlbGVjdChyb290Tm9kZS5tbylcIlxuICAgICAgICBbY2hlY2tlZF09XCJpc0dyb3VwU2VsZWN0ZWQoKVwiXG4gICAgICAvPlxuICAgICAgPHNwYW4+PC9zcGFuPlxuICAgIDwvbGFiZWw+XG5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJpY29uLTIwIGM4eS1pY29uLWR1b2NvbG9yIG0tci00XCJcbiAgICAgIFtjOHlJY29uXT1cInRoaXMucm9vdE5vZGUubW8gfCBnZXRHcm91cEljb246IHRydWUgOiB0aGlzLnJvb3ROb2RlLmljb24gfCBhc3luY1wiXG4gICAgICAqbmdJZj1cImNvbmZpZy5jb2x1bW5IZWFkZXJzICYmIChjb25maWcuc2luZ2xlQ29sdW1uIHx8ICghcm9vdE5vZGUucm9vdCAmJiBpbmRleCA9PT0gMCkpXCJcbiAgICA+PC9pPlxuICAgIDxwXG4gICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICAgdGl0bGU9XCJ7eyByb290Tm9kZS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAqbmdJZj1cImNvbmZpZy5jb2x1bW5IZWFkZXJzXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ3RleHQtbGFiZWwtc21hbGwnOiAhY29uZmlnLnNpbmdsZUNvbHVtbixcbiAgICAgICAgJ3RleHQtbWVkaXVtJzogY29uZmlnLnNpbmdsZUNvbHVtblxuICAgICAgfVwiXG4gICAgPlxuICAgICAge3sgcm9vdE5vZGUubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3A+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICAqbmdJZj1cIiFyb290Tm9kZS5yb290ICYmIGNvbmZpZy5zaG93RmlsdGVyXCJcbiAgICBbbmdDbGFzc109XCJ7ICdwLXQtNCc6IGNvbmZpZy5jb2x1bW5IZWFkZXJzIH1cIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtIGlucHV0LWdyb3VwLXNlYXJjaFwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnRmlsdGVyIHRoaXMgY29sdW1u4oCmJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyVGV4dFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUZpbHRlcignKicgKyBmaWx0ZXJUZXh0ICsgJyonKVwiXG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3QgcC1yLTggcC1sLTRcIlxuICAgICAgICAgIHRpdGxlPVwie3sgJ0FwcGx5IGZpbHRlcicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlcignKicgKyBmaWx0ZXJUZXh0ICsgJyonKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwiZmlsdGVyXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3QgcC1yLTggcC1sLTRcIlxuICAgICAgICAgIHRpdGxlPVwiIHt7ICdDbGVhciBmaWx0ZXJzJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyRmlsdGVycygpXCJcbiAgICAgICAgICAqbmdJZj1cImZpbHRlclRleHQubGVuZ3RoXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGM4eUljb249XCJ0aW1lc1wiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxjOHktYXNzZXQtc2VsZWN0b3Itbm9kZVxuICBjbGFzcz1cImQtYmxvY2sgYmctaW5oZXJpdCBwLXJlbGF0aXZlXCJcbiAgc3R5bGU9XCJ6LWluZGV4OiA5XCJcbiAgKm5nSWY9XCJyb290Tm9kZSAmJiAhc2VsZWN0ZWREZXZpY2VcIlxuICBbbm9kZV09XCJyb290Tm9kZVwiXG4gIFtyb290Tm9kZV09XCJyb290Tm9kZVwiXG4gIFtwcmVzZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gIFttdWx0aV09XCJjb25maWcubXVsdGlcIlxuICBbdmlld109XCJjb25maWcudmlld1wiXG4gIFtpbmRleF09XCJpbmRleFwiXG4gIFthY3RpdmVdPVwiYWN0aXZlXCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW2hhbmRsZU5leHRNaWxsZXJWaWV3Q29sdW1uXT1cImhhbmRsZU5leHRNaWxsZXJWaWV3Q29sdW1uLmJpbmQodGhpcylcIlxuICAoaXNMb2FkaW5nU3RhdGUpPVwib25Mb2FkaW5nKCRldmVudClcIlxuICAob25TZWxlY3QpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gIChvbkRlc2VsZWN0KT1cIm9uRGVzZWxlY3QoJGV2ZW50KVwiXG4gIFtuZ0NsYXNzXT1cInsgJ2NvbGxhcHNlIHNob3cnOiAhcm9vdE5vZGUucm9vdCAmJiAhcm9vdE5vZGUuaGlkZGVuICYmIGNvbmZpZy52aWV3ICE9PSAnbWlsbGVyJyB9XCJcbj48L2M4eS1hc3NldC1zZWxlY3Rvci1ub2RlPlxuIl19
366
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXNzZXRzLW5hdmlnYXRvci9hc3NldC1zZWxlY3Rvci9hc3NldC1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9hc3NldHMtbmF2aWdhdG9yL2Fzc2V0LXNlbGVjdG9yL2Fzc2V0LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsVUFBVSxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQStCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUdMLHNCQUFzQixFQUN2QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7QUFFOUM7O0dBRUc7QUFr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QUFLO2dCQUlHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFJSSxVQUFVO3NCQUFuQixNQUFNO2dCQUlHLGVBQWU7c0JBQXhCLE1BQU07Z0JBSUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFJRyxNQUFNO3NCQUFmLE1BQU07Z0JBcUJDLE1BQU07c0JBRGIsU0FBUzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUlkZW50aWZpZWQsIElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFzc2V0U2VsZWN0b3JCYXNlIH0gZnJvbSAnLi9hc3NldC1zZWxlY3Rvci1iYXNlJztcbmltcG9ydCB7XG4gIEFzc2V0U2VsZWN0aW9uQ2hhbmdlRXZlbnQsXG4gIEFzc2V0U2VsZWN0b3JPcHRpb25zLFxuICBDT05GSUdfT1BUSU9OU19ERUZBVUxUXG59IGZyb20gJy4vYXNzZXQtc2VsZWN0b3IubW9kZWwnO1xuaW1wb3J0IHsgQXNzZXRTZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuL2Fzc2V0LXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JvdXBOb2RlIH0gZnJvbSAnLi9ncm91cC1ub2RlJztcbmltcG9ydCB7IEdyb3VwTm9kZVNlcnZpY2UgfSBmcm9tICcuL2dyb3VwLW5vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBVbmFzc2lnbmVkRGV2aWNlc05vZGUgfSBmcm9tICcuL3VuYXNzaWduZWQtZGV2aWNlcy1ub2RlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxuLyoqXG4gKiBEaXNwbGF5cyBhIGhpZXJhcmNoaWNhbCB0cmVlIHNlbGVjdG9yIGZvciBhc3NldHMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hc3NldC1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NldC1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBc3NldFNlbGVjdG9yQ29tcG9uZW50KVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFzc2V0U2VsZWN0b3JDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIEFzc2V0U2VsZWN0b3JTZXJ2aWNlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQXNzZXRTZWxlY3RvckNvbXBvbmVudCBleHRlbmRzIEFzc2V0U2VsZWN0b3JCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIENvbmZpZyBvYmplY3QgY29udGFpbmluZyBhbGwgb3B0aW9ucyBmb3IgdGhlIGFzc2V0IHNlbGVjdG9yLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnOiBBc3NldFNlbGVjdG9yT3B0aW9ucyA9IHt9O1xuICAvKipcbiAgICogRGVmaW5lcyB0aGUgbm9kZSwgd2hpY2ggc2hvdWxkIGJlIGRpc3BsYXllZCBhcyBhY3RpdmUuXG4gICAqL1xuICBASW5wdXQoKSBhY3RpdmU6IEdyb3VwTm9kZTtcbiAgLyoqXG4gICAqIFVzZWQgb25seSBmb3IgbWlsbGVyLXZpZXcsIGRpc3BsYXlzIHRoZSBjb2x1bW4gbGV2ZWwgZm9yIHRoZSBjdXJyZW50IG5vZGUuXG4gICAqIEUuZyBpZiB0aGUgaW5kZXggaXMgb25lLCB0aGlzIHdpbGwgYmUgc2Vjb25kIGNvbHVtbi5cbiAgICovXG4gIEBJbnB1dCgpIGluZGV4ID0gMDtcbiAgLyoqXG4gICAqIFRoZSBhc3NldCB0byB1c2UgYXMgcm9vdC5cbiAgICovXG4gIEBJbnB1dCgpIGFzc2V0OiBJSWRlbnRpZmllZCA9IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBzZWxlY3RlZCBkZXZpY2UuXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RlZERldmljZTogSU1hbmFnZWRPYmplY3QgPSB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBwcmVkZWZpbmVkIG5vZGVzLlxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0ZWQ6IEFycmF5PFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+PiB8IElJZGVudGlmaWVkW10gfCBJSWRlbnRpZmllZCA9IFtdO1xuICAvKipcbiAgICogVGhlIG5vZGUgdG8gdXNlIGFzIHJvb3QuIFlvdSBjYW4gZWl0aGVyIHNldCB0aGlzLCBvciB0aGUgYXNzZXQgdG8gc3RhcnQgZnJvbS5cbiAgICovXG4gIEBJbnB1dCgpIHJvb3ROb2RlOiBHcm91cE5vZGU7XG4gIC8qKlxuICAgKiBBbGwgY3VycmVudGx5IHNlbGVjdGVkIGFzc2V0cy5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IElJZGVudGlmaWVkW10gfCBJSWRlbnRpZmllZCA9IFtdO1xuICBASW5wdXQoKSBjb250YWluZXI6ICcnIHwgJ2JvZHknID0gJ2JvZHknO1xuICBASW5wdXQoKSBpc05vZGVTZWxlY3RhYmxlOiBib29sZWFuIHwgKChub2RlOiBJSWRlbnRpZmllZCkgPT4gYm9vbGVhbikgPSB0cnVlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAvKipcbiAgICogRW1pdHMgaWYgb25lIGl0ZW0gd2FzIHNlbGVjdGVkIChhbGwgY3VycmVudGx5IHNlbGVjdGVkIG5vZGVzKS5cbiAgICovXG4gIEBPdXRwdXQoKSBvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBc3NldFNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuICAvKipcbiAgICogRW1pdHMgaWYgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBhc3NldCBpcyBjbGVhcmVkLlxuICAgKi9cbiAgQE91dHB1dCgpIG9uQ2xlYXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIFVzZWQgb25seSBmb3IgbWlsbGVyIHZpZXcuIEVtaXQgdGhlIHNlbGVjdGVkIG5vZGUgYW5kIHVzZSBpdCBhcyBhICdyb290Tm9kZScgZm9yIHRoZSBuZXcgY29sdW1uLlxuICAgKi9cbiAgQE91dHB1dCgpIG9uUm93U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBjdXJyZW50IGxvYWRpbmcgc3RhdGUgb2YgdGhlIG5vZGUuXG4gICAqL1xuICBAT3V0cHV0KCkgb25Mb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBmaWx0ZXIgYXBwbGllZC5cbiAgICovXG4gIGZpbHRlclRleHQgPSAnJztcbiAgLyoqXG4gICAqIERpc3BsYXlzIHRoZSBnbG9iYWwgc2VhcmNoIGF0IGFsbCB0aW1lcyBpZiB0aGUgbWlsbGVyIHZpZXcgaXMgdXNlZFxuICAgKiBvbiByb290IGdyb3VwIGxldmVsLlxuICAgKi9cbiAgcm9vdCA9IGZhbHNlO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgaGVhZGVyIGhpZ2h0IGluIHBpeGVsLlxuICAgKi9cbiAgZ2V0SGVhZGVySGVpZ2h0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG4gIHJlYWRvbmx5IEFTU0VUX0NPTlNUID0gZ2V0dGV4dCgnQXNzZXQge3sgYXNzZXRJZCB9fScpO1xuXG4gIEBWaWV3Q2hpbGQoJ2hlYWRlcicpXG4gIHByaXZhdGUgaGVhZGVyOiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlIG9ubHkgRElcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBncm91cE5vZGVTZXJ2aWNlOiBHcm91cE5vZGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFzc2V0U2VsZWN0b3JTZXJ2aWNlOiBBc3NldFNlbGVjdG9yU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKGdyb3VwTm9kZVNlcnZpY2UsIGludmVudG9yeSwgYXNzZXRTZWxlY3RvclNlcnZpY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGVuIGEgbm9kZSB3YXMgc2VsZWN0ZWQsIGlmIGEgbmV3IGNvbHVtbiBuZWVkcyB0byBiZSBhZGRlZC5cbiAgICogQHBhcmFtIG5vZGUgVGhlIG5vZGUgdGhhdCB3YXMgY2xpY2tlZC5cbiAgICogQHBhcmFtIGluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoaXMgbm9kZS5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY2xpY2sgd2FzIGhhbmRsZWQgYW5kIGEgbmV3IGNvbHVtbiB3YXMgYWRkZWQuXG4gICAqL1xuICBoYW5kbGVOZXh0TWlsbGVyVmlld0NvbHVtbihub2RlOiBHcm91cE5vZGUsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBub2RlQ29weSA9IE9iamVjdC5jcmVhdGUobm9kZSk7XG4gICAgY29uc3QgaXNTYW1lQXNSb290ID0gdGhpcy5yb290Tm9kZSA9PT0gbm9kZTtcbiAgICBjb25zdCBpc1VuYXNzaWduZWREZXZpY2VzTm9kZSA9IG5vZGUudG9TdHJpbmcoKSA9PT0gVW5hc3NpZ25lZERldmljZXNOb2RlLk5BTUU7XG4gICAgY29uc3QgaXNOZXdDb2x1bW5OZWVkZWQgPVxuICAgICAgIWlzU2FtZUFzUm9vdCAmJiAobm9kZS5pc0dyb3VwKCkgfHwgaXNVbmFzc2lnbmVkRGV2aWNlc05vZGUgfHwgbm9kZS5oYXNDaGlsZERldmljZXMoKSk7XG5cbiAgICBpZiAoaXNOZXdDb2x1bW5OZWVkZWQpIHtcbiAgICAgIHRoaXMub25Sb3dTZWxlY3RlZC5lbWl0KHsgbm9kZUNvcHksIGluZGV4IH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmFzc2V0U2VsZWN0b3JTZXJ2aWNlLnNldElzTm9kZVNlbGVjdGFibGUodGhpcy5pc05vZGVTZWxlY3RhYmxlKTtcbiAgICBpZiAodGhpcy5pbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5jb25maWcgPSB7IC4uLkNPTkZJR19PUFRJT05TX0RFRkFVTFQsIC4uLnRoaXMuY29uZmlnIH07XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZFJlc2V0TmFtZUZpbHRlciA9XG4gICAgICB0aGlzLnJvb3ROb2RlICYmIHRoaXMucm9vdE5vZGUubW8gJiYgdGhpcy5jb25maWcudmlldyA9PT0gJ21pbGxlcic7XG4gICAgaWYgKHNob3VsZFJlc2V0TmFtZUZpbHRlcikge1xuICAgICAgYXdhaXQgdGhpcy5hcHBseUZpbHRlcignJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNPbmx5QXNzZXROb2RlRGVmaW5lZCA9IHRoaXMuYXNzZXQ7XG4gICAgaWYgKGlzT25seUFzc2V0Tm9kZURlZmluZWQpIHtcbiAgICAgIHRoaXMucm9vdE5vZGUgPSBhd2FpdCB0aGlzLmNyZWF0ZU1hbmFnZWRPYmplY3RSb290Tm9kZSh0aGlzLmFzc2V0KTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0FueU5vZGVEZWZpbmVkID1cbiAgICAgICF0aGlzLnJvb3ROb2RlICYmICghdGhpcy5hc3NldCB8fCBPYmplY3Qua2V5cyh0aGlzLmFzc2V0KS5sZW5ndGggPT09IDApO1xuICAgIGlmIChpc0FueU5vZGVEZWZpbmVkKSB7XG4gICAgICB0aGlzLnJvb3ROb2RlID0gdGhpcy5jcmVhdGVEZWZhdWx0Um9vdE5vZGUoKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZy5zaG93VW5hc3NpZ25lZERldmljZXMgJiZcbiAgICAgICghdGhpcy5hc3NldCB8fCBPYmplY3Qua2V5cyh0aGlzLmFzc2V0KS5sZW5ndGggPT09IDApICYmXG4gICAgICB0aGlzLnJvb3ROb2RlLnJvb3RcbiAgICApIHtcbiAgICAgIHRoaXMucm9vdE5vZGUuYWRkKFxuICAgICAgICBuZXcgVW5hc3NpZ25lZERldmljZXNOb2RlKHRoaXMuZ3JvdXBOb2RlU2VydmljZSwge1xuICAgICAgICAgIHNob3dDaGlsZERldmljZXM6IHRoaXMuY29uZmlnLnNob3dDaGlsZERldmljZXNcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucm9vdCA9IHRoaXMucm9vdE5vZGUucm9vdDtcbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5pc05vZGVTZWxlY3RhYmxlKSB7XG4gICAgICB0aGlzLmFzc2V0U2VsZWN0b3JTZXJ2aWNlLnNldElzTm9kZVNlbGVjdGFibGUodGhpcy5pc05vZGVTZWxlY3RhYmxlKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hhbmdlcy5hc3NldCAmJlxuICAgICAgY2hhbmdlcy5hc3NldC5jdXJyZW50VmFsdWUgJiZcbiAgICAgIE9iamVjdC5rZXlzKGNoYW5nZXMuYXNzZXQuY3VycmVudFZhbHVlKS5sZW5ndGggIT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMucm9vdE5vZGUgPSBhd2FpdCB0aGlzLmNyZWF0ZU1hbmFnZWRPYmplY3RSb290Tm9kZShjaGFuZ2VzLmFzc2V0LmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaGVhZGVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZ2V0SGVhZGVySGVpZ2h0JC5uZXh0KHRoaXMuaGVhZGVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2V0SGVhZGVySGVpZ2h0JC5uZXh0KDApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcm9vdCB0byBvbmUgbGV2ZWwgYmFjay5cbiAgICovXG4gIGJhY2soKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4IC0gMTtcbiAgICBjb25zdCBub2RlQ29weSA9IE9iamVjdC5jcmVhdGUodGhpcy5yb290Tm9kZS5wYXJlbnRzWzBdKTtcbiAgICB0aGlzLm9uUm93U2VsZWN0ZWQuZW1pdCh7IG5vZGVDb3B5LCBpbmRleCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGN1cnJlbnQgZmlsdGVyLlxuICAgKi9cbiAgY2xlYXJGaWx0ZXJzKCkge1xuICAgIHRoaXMuZmlsdGVyVGV4dCA9ICcnO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIoJycpO1xuICB9XG5cbiAgY2xlYXJTZWxlY3RlZERldmljZXMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZERldmljZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFwcGx5RmlsdGVyKCcnKTtcbiAgICB0aGlzLm9uQ2xlYXJTZWxlY3RlZC5lbWl0KCk7XG4gIH1cblxuICBpc0dyb3VwU2VsZWN0ZWQoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQuc29tZShzZWxlY3RlZE5vZGUgPT4gc2VsZWN0ZWROb2RlLmlkID09PSB0aGlzLnJvb3ROb2RlLm1vPy5pZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBncm91cE5hbWVGaWx0ZXIobmFtZUZpbHRlcjogc3RyaW5nLCBtb0lkLCBzaG93VW5hc3NpZ25lZERldmljZXM/OiBib29sZWFuKSB7XG4gICAgaWYgKG5hbWVGaWx0ZXIpIHtcbiAgICAgIGNvbnN0IGZpbHRlckJ5TmFtZSA9IHNob3dVbmFzc2lnbmVkRGV2aWNlc1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIF9fZmlsdGVyOiB7XG4gICAgICAgICAgICAgIG5hbWU6IG5hbWVGaWx0ZXJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfX29yZGVyYnk6IFt7IG5hbWU6IDEgfV1cbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgICAgICAgbmFtZTogbmFtZUZpbHRlcixcbiAgICAgICAgICAgICAgX19ieWdyb3VwaWQ6IG1vSWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuYXNzZXRTZWxlY3RvclNlcnZpY2UucXVlcmllc1V0aWwuYnVpbGRRdWVyeShmaWx0ZXJCeU5hbWUpO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0ge1xuICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgX19ieWdyb3VwaWQ6IG1vSWRcbiAgICAgIH0sXG4gICAgICBfX29yZGVyYnk6IFt7IG5hbWU6IDEgfV1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFzc2V0U2VsZWN0b3JTZXJ2aWNlLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkoZGVmYXVsdEZpbHRlcik7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBhIGZpbHRlci5cbiAgICogQHBhcmFtIGZpbHRlciBUaGUgZmlsdGVyIHRvIGFwcGx5LlxuICAgKi9cbiAgYXN5bmMgYXBwbHlGaWx0ZXIoZmlsdGVyOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJvb3ROb2RlLmZpbHRlclF1ZXJ5JC5uZXh0KFxuICAgICAgdGhpcy5ncm91cE5hbWVGaWx0ZXIoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgdGhpcy5yb290Tm9kZS5tby5pZCxcbiAgICAgICAgdGhpcy5pc1VuYXNzaWduZWREZXZpY2VzTm9kZSgpID8gdHJ1ZSA6IGZhbHNlXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnJvb3ROb2RlLnJlZnJlc2goKTtcbiAgICB0aGlzLm9uTG9hZC5lbWl0KHtcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICBmaWx0ZXJUZXh0OiB0aGlzLmZpbHRlclRleHQsXG4gICAgICBpbmRleDogdGhpcy5pbmRleCxcbiAgICAgIHNlbGVjdGVkRGV2aWNlOiB0aGlzLnNlbGVjdGVkRGV2aWNlXG4gICAgfSk7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIFVuYXNzaWduZWREZXZpY2Ugbm9kZSBpcyB0aGUgcm9vdE5vZGUuXG4gICAqL1xuICBpc1VuYXNzaWduZWREZXZpY2VzTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb290Tm9kZS50b1N0cmluZygpID09PSBVbmFzc2lnbmVkRGV2aWNlc05vZGUuTkFNRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciByZXNldHMgdGhlIHNlYXJjaCByZXN1bHQuXG4gICAqL1xuICBvblNlYXJjaFJlc3VsdFJlc2V0KHNlbGVjdGVkSXRlbSkge1xuICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcbiAgICAgIHRoaXMucm9vdE5vZGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRSb290Tm9kZSgpO1xuICAgICAgaWYgKHRoaXMuY29uZmlnLnNob3dVbmFzc2lnbmVkRGV2aWNlcykge1xuICAgICAgICB0aGlzLnJvb3ROb2RlLmFkZChcbiAgICAgICAgICBuZXcgVW5hc3NpZ25lZERldmljZXNOb2RlKHRoaXMuZ3JvdXBOb2RlU2VydmljZSwge1xuICAgICAgICAgICAgc2hvd0NoaWxkRGV2aWNlczogdGhpcy5jb25maWcuc2hvd0NoaWxkRGV2aWNlc1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb25maWcudmlldyA9PT0gJ21pbGxlcicpIHtcbiAgICAgICAgdGhpcy5vblJvd1NlbGVjdGVkLmVtaXQoeyByb290OiB0cnVlIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJvb3ROb2RlLmNsaWNrKHsgb3BlbjogdHJ1ZSB9KTtcbiAgICAgIHRoaXMucm9vdE5vZGUubm9kZXNGZXRjaGVkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmNkLmRldGVjdENoYW5nZXMoKSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLnZpZXcgPT09ICd0cmVlJykge1xuICAgICAgICB0aGlzLnJvb3ROb2RlLm9wZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgaWYgdGhlIHVzZXIgY2xpY2tzIG9uIGEgc2VhcmNoIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIG9uU2VhcmNoUmVzdWx0Q2xpY2sobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgY2FuU2VsZWN0Tm9kZSA9IHRoaXMuY29uZmlnLmdyb3Vwc1NlbGVjdGFibGUgfHwgIXRoaXMuZ3JvdXBOb2RlU2VydmljZS5pc0dyb3VwKG1vKTtcbiAgICBpZiAodGhpcy5jb25maWcudmlldyA9PT0gJ21pbGxlcicpIHtcbiAgICAgIHRoaXMucm9vdE5vZGUgPSBhd2FpdCB0aGlzLmNyZWF0ZU1hbmFnZWRPYmplY3RSb290Tm9kZShtbyk7XG4gICAgICB0aGlzLnJvb3ROb2RlLmNsaWNrKHsgb3BlbjogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IG5vZGVDb3B5ID0gT2JqZWN0LmNyZWF0ZSh0aGlzLnJvb3ROb2RlKTtcbiAgICAgIHRoaXMub25Sb3dTZWxlY3RlZC5lbWl0KHtcbiAgICAgICAgbm9kZUNvcHksXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBzZWxlY3RlZERldmljZXM6IHRoaXMuc2VsZWN0ZWREZXZpY2UsXG4gICAgICAgIHJvb3Q6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY29uZmlnLm11bHRpKSB7XG4gICAgICB0aGlzLmRlc2VsZWN0QWxsKCk7XG4gICAgfVxuICAgIGlmIChjYW5TZWxlY3ROb2RlKSB7XG4gICAgICB0aGlzLnNlbGVjdChtbyk7XG4gICAgfVxuICB9XG5cbiAgb25Mb2FkaW5nKGlzTG9hZGluZzogYm9vbGVhbikge1xuICAgIHRoaXMub25Mb2FkLmVtaXQoeyBsb2FkaW5nOiBpc0xvYWRpbmcsIGZpbHRlclRleHQ6IHRoaXMuZmlsdGVyVGV4dCB9KTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25TZWxlY3QobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdGhpcy5zZWxlY3QobW8pO1xuICB9XG5cbiAgb25EZXNlbGVjdChjb25maWc6IHsgZGVzZWxlY3RNb2RlOiAnc2luZ2xlJyB8ICdhbGwnOyBtbzogSU1hbmFnZWRPYmplY3QgfSkge1xuICAgIHN3aXRjaCAoY29uZmlnPy5kZXNlbGVjdE1vZGUpIHtcbiAgICAgIGNhc2UgJ3NpbmdsZSc6XG4gICAgICAgIHRoaXMuZGVzZWxlY3QoY29uZmlnLm1vKTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhbGwnOlxuICAgICAgICB0aGlzLmRlc2VsZWN0QWxsKGNvbmZpZy5tbyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImJnLWluaGVyaXQgcC10LTggcC1iLTggc2VwYXJhdG9yLWJvdHRvbSBwLXItMTYgcC1sLTE2IHN0aWNreS10b3BcIlxuICBbbmdTdHlsZV09XCJ7ICd6LWluZGV4JzogY29uZmlnLnNpbmdsZUNvbHVtbiAmJiBjb25maWcuc2VhcmNoID8gJzMwJyA6ICcyMCcgfVwiXG4gICNoZWFkZXJcbiAgW25nQ2xhc3NdPVwie1xuICAgICdwLWFic29sdXRlIG1pbGxlci1jb2x1bW5fX3NlbGVjdGlvbiBkLWZsZXggZmxleC13cmFwIGEtaS1jZW50ZXInOiBjb25maWcudmlldyA9PT0gJ21pbGxlcicsXG4gICAgJ21pbGxlci1jb2x1bW5fX3NlYXJjaCc6IGNvbmZpZy5zZWFyY2gsXG4gICAgJ21pbGxlci1jb2x1bW5fX211bHRpJzogY29uZmlnLm11bHRpXG4gIH1cIlxuICAqbmdJZj1cIlxuICAgICFzZWxlY3RlZERldmljZSAmJlxuICAgIGluZGV4ID09PSAwICYmXG4gICAgKGNvbmZpZy5zZWFyY2ggfHwgY29uZmlnLm11bHRpIHx8IGNvbmZpZy5sYWJlbD8ubGVuZ3RoIHx8IGNvbmZpZy5zaG93U2VsZWN0ZWQpXG4gIFwiXG4+XG4gIDxwXG4gICAgY2xhc3M9XCJ0ZXh0LW1lZGl1bSBmbGV4LW5vLXNocmluayBhLXMtY2VudGVyXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnbS1iLTQnOiBjb25maWcuc2VhcmNoICYmIHJvb3QgJiYgY29uZmlnLnNpbmdsZUNvbHVtbixcbiAgICAgICdtLXItOCc6ICFjb25maWcuc2luZ2xlQ29sdW1uICYmICFjb25maWcuc2VhcmNoLFxuICAgICAgJ2ZpdC13JzogY29uZmlnLnNpbmdsZUNvbHVtblxuICAgIH1cIlxuICAgICpuZ0lmPVwiY29uZmlnLmxhYmVsPy5sZW5ndGhcIlxuICA+XG4gICAge3sgY29uZmlnLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gIDwvcD5cbiAgPGM4eS1zZWFyY2gtaW5wdXRcbiAgICBbbmdTdHlsZV09XCJ7ICdtaW4td2lkdGgnOiAhY29uZmlnLnNpbmdsZUNvbHVtbiAmJiBjb25maWcubGFiZWwubGVuZ3RoID8gJzUwJScgOiAnaW5oZXJpdCcgfVwiXG4gICAgKm5nSWY9XCJjb25maWcuc2VhcmNoICYmIHJvb3RcIlxuICAgIChvbkNsaWNrKT1cIm9uU2VhcmNoUmVzdWx0Q2xpY2soJGV2ZW50KVwiXG4gICAgKHJlc2V0KT1cIm9uU2VhcmNoUmVzdWx0UmVzZXQoJGV2ZW50KVwiXG4gICAgW21vZGVdPVwiJ3NlbGVjdCdcIlxuICAgIFtjb250YWluZXJdPVwiY29udGFpbmVyXCJcbiAgICBbZ3JvdXBzT25seV09XCJjb25maWcuZ3JvdXBzT25seVwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ20tbC1hdXRvJzogIWNvbmZpZy5zaW5nbGVDb2x1bW4gJiYgY29uZmlnLmxhYmVsLmxlbmd0aCxcbiAgICAgICdmaXQtdyc6IGNvbmZpZy5zaW5nbGVDb2x1bW4gfHwgIWNvbmZpZy5sYWJlbC5sZW5ndGhcbiAgICB9XCJcbiAgPjwvYzh5LXNlYXJjaC1pbnB1dD5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYmctaW5oZXJpdCBkLWZsZXggZ2FwLTQgZml0LXdcIlxuICAgICpuZ0lmPVwiY29uZmlnLnNob3dTZWxlY3RlZFwiXG4gICAgW25nQ2xhc3NdPVwieyAnbS10LTQnOiBjb25maWcuc2VhcmNoIH1cIlxuICA+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tci00IGEtcy1jZW50ZXIgbC1oLTFcIj57eyAnU2VsZWN0ZWQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3cgaW5uZXItc2Nyb2xsIGQtZmxleCBnYXAtNCBhLWktY2VudGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlbGVjdGVkLmxlbmd0aFwiPlxuICAgICAgICA8ZW0gY2xhc3M9XCJ0ZXh0LTEyIHRleHQtbXV0ZWQgZC1mbGV4IGEtaS1jZW50ZXIgZml0LWgtMjBcIj57eyAnTm9uZScgfCB0cmFuc2xhdGUgfX08L2VtPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInRhZyB0YWctLWluZm8gY2hpcFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBzZWxlY3RlZEl0ZW0gb2Ygc2VsZWN0ZWRcIlxuICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXhzIGJ0bi1jbGVhbiB0ZXh0LTEwXCJcbiAgICAgICAgICB0aXRsZT1cInt7IHNlbGVjdGVkSXRlbS5uYW1lIH19XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJjb25maWcubXVsdGkgPyBkZXNlbGVjdChzZWxlY3RlZEl0ZW0pIDogZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB7eyBzZWxlY3RlZEl0ZW0ubmFtZSB8fCAoQVNTRVRfQ09OU1QgfCB0cmFuc2xhdGU6IHsgYXNzZXRJZDogc2VsZWN0ZWRJdGVtLmlkIH0pIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXZcbiAgY2xhc3M9XCJwLXItMTZcIlxuICAqbmdJZj1cInNlbGVjdGVkRGV2aWNlXCJcbj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBwLWItNFwiPlxuICAgIDxwXG4gICAgICBjbGFzcz1cInRleHQtbWVkaXVtIHAtdC04IG0tci04XCJcbiAgICAgICpuZ0lmPVwic2VsZWN0ZWREZXZpY2U7IGVsc2UgbXVsdGlBc3NldHNcIlxuICAgID5cbiAgICAgIHt7ICdTZWxlY3RlZCBhc3NldCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3A+XG4gICAgPG5nLXRlbXBsYXRlICNtdWx0aUFzc2V0cz5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1tZWRpdW0gbS1yLThcIj57eyAnU2VsZWN0ZWQgYXNzZXRzJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi14cyBhLXMtY2VudGVyIG0tdC00IG0tbC1hdXRvXCJcbiAgICAgIHRpdGxlPVwie3sgJ0NoYW5nZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJTZWxlY3RlZERldmljZXMoKVwiXG4gICAgPlxuICAgICAge3sgJ0NoYW5nZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJ0ZXh0LXN1Y2Nlc3MgcC1sLTAgcC1yLThcIlxuICAgICAgW2M4eUljb25dPVwiJ2NoZWNrLWNpcmNsZSdcIlxuICAgID48L2k+XG4gICAgPGlcbiAgICAgIGNsYXNzPVwibS1yLTQgaWNvbi0yMFwiXG4gICAgICBbYzh5SWNvbl09XCJzZWxlY3RlZERldmljZSB8IGdldEdyb3VwSWNvbiB8IGFzeW5jXCJcbiAgICA+PC9pPlxuICAgIDxzcGFuPnt7IHNlbGVjdGVkRGV2aWNlLm5hbWUgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gbWlsbGVyIGNvbHVtbnMgaGVhZGVyIC0tPlxuPGRpdlxuICBjbGFzcz1cIm1pbGxlci1jb2x1bW5fX2hlYWRlciBzdGlja3ktdG9wIGJnLWluaGVyaXQgc2VwYXJhdG9yLWJvdHRvbVwiXG4gICpuZ0lmPVwiXG4gICAgY29uZmlnLnZpZXcgPT09ICdtaWxsZXInICYmXG4gICAgKChjb25maWcuc2hvd0ZpbHRlciAmJiAhcm9vdE5vZGUucm9vdCkgfHwgY29uZmlnLmNvbHVtbkhlYWRlcnMpICYmXG4gICAgIXNlbGVjdGVkRGV2aWNlXG4gIFwiXG4gIFtuZ0NsYXNzXT1cInsgJ3AtdC04JzogY29uZmlnLnNlYXJjaCB9XCJcbj5cbiAgPHBcbiAgICBjbGFzcz1cInRleHQtMTIgdGV4dC1tdXRlZCB0ZXh0LXRydW5jYXRlIG0tYi00XCJcbiAgICB0aXRsZT1cInt7IHJvb3ROb2RlLmJyZWFkY3J1bWIgfHwgcm9vdE5vZGUubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICpuZ0lmPVwiY29uZmlnLnNpbmdsZUNvbHVtbiAmJiBpbmRleCAhPT0gMFwiXG4gID5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJtLXItNFwiXG4gICAgICBjOHlJY29uPVwiaG9tZVwiXG4gICAgPjwvaT5cbiAgICB7eyByb290Tm9kZS5icmVhZGNydW1iIHx8IHJvb3ROb2RlLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gIDwvcD5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXJcIlxuICAgICpuZ0lmPVwiY29uZmlnLmNvbHVtbkhlYWRlcnMgfHwgY29uZmlnLnNpbmdsZUNvbHVtblwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4teHMgbS1yLTggcC10LTAgcC1iLTAgcC1sLTQgcC1yLTQgbC1oLTFcIlxuICAgICAgdGl0bGU9XCJ7eyAnQmFjaycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAqbmdJZj1cImNvbmZpZy5zaW5nbGVDb2x1bW4gJiYgIXJvb3ROb2RlLnJvb3QgJiYgaW5kZXggIT09IDBcIlxuICAgICAgKGNsaWNrKT1cImJhY2soKVwiXG4gICAgPlxuICAgICAgPGkgYzh5SWNvbj1cImFuZ2xlLWxlZnRcIj48L2k+XG4gICAgPC9idXR0b24+XG4gICAgPGxhYmVsXG4gICAgICBjbGFzcz1cImM4eS1yYWRpbyBjaGVja2JveC1pbmxpbmUgbS1yLThcIlxuICAgICAgKm5nSWY9XCIhcm9vdE5vZGUucm9vdCAmJiBpbmRleCA9PT0gMCAmJiAoY29uZmlnLmdyb3Vwc1NlbGVjdGFibGUgfHwgIXJvb3ROb2RlLmlzR3JvdXAoKSlcIlxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0aXRsZT1cInt7ICdTZWxlY3QgZ3JvdXAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3Qocm9vdE5vZGUubW8pXCJcbiAgICAgICAgW2NoZWNrZWRdPVwiaXNHcm91cFNlbGVjdGVkKClcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuXG4gICAgPGlcbiAgICAgIGNsYXNzPVwiaWNvbi0yMCBjOHktaWNvbi1kdW9jb2xvciBtLXItNFwiXG4gICAgICBbYzh5SWNvbl09XCJ0aGlzLnJvb3ROb2RlLm1vIHwgZ2V0R3JvdXBJY29uOiB0cnVlIDogdGhpcy5yb290Tm9kZS5pY29uIHwgYXN5bmNcIlxuICAgICAgKm5nSWY9XCJjb25maWcuY29sdW1uSGVhZGVycyAmJiAoY29uZmlnLnNpbmdsZUNvbHVtbiB8fCAoIXJvb3ROb2RlLnJvb3QgJiYgaW5kZXggPT09IDApKVwiXG4gICAgPjwvaT5cbiAgICA8cFxuICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgIHRpdGxlPVwie3sgcm9vdE5vZGUubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgKm5nSWY9XCJjb25maWcuY29sdW1uSGVhZGVyc1wiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICd0ZXh0LWxhYmVsLXNtYWxsJzogIWNvbmZpZy5zaW5nbGVDb2x1bW4sXG4gICAgICAgICd0ZXh0LW1lZGl1bSc6IGNvbmZpZy5zaW5nbGVDb2x1bW5cbiAgICAgIH1cIlxuICAgID5cbiAgICAgIHt7IHJvb3ROb2RlLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgKm5nSWY9XCIhcm9vdE5vZGUucm9vdCAmJiBjb25maWcuc2hvd0ZpbHRlclwiXG4gICAgW25nQ2xhc3NdPVwieyAncC10LTQnOiBjb25maWcuY29sdW1uSGVhZGVycyB9XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSBpbnB1dC1ncm91cC1zZWFyY2hcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ0ZpbHRlciB0aGlzIGNvbHVtbuKApicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlclRleHRcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlGaWx0ZXIoJyonICsgZmlsdGVyVGV4dCArICcqJylcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90IHAtci04IHAtbC00XCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdBcHBseSBmaWx0ZXInIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXIoJyonICsgZmlsdGVyVGV4dCArICcqJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgYzh5SWNvbj1cImZpbHRlclwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90IHAtci04IHAtbC00XCJcbiAgICAgICAgICB0aXRsZT1cIiB7eyAnQ2xlYXIgZmlsdGVycycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJjbGVhckZpbHRlcnMoKVwiXG4gICAgICAgICAgKm5nSWY9XCJmaWx0ZXJUZXh0Lmxlbmd0aFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48Yzh5LWFzc2V0LXNlbGVjdG9yLW5vZGVcbiAgY2xhc3M9XCJkLWJsb2NrIGJnLWluaGVyaXQgcC1yZWxhdGl2ZVwiXG4gIHN0eWxlPVwiei1pbmRleDogOVwiXG4gICpuZ0lmPVwicm9vdE5vZGUgJiYgIXNlbGVjdGVkRGV2aWNlXCJcbiAgW25vZGVdPVwicm9vdE5vZGVcIlxuICBbcm9vdE5vZGVdPVwicm9vdE5vZGVcIlxuICBbcHJlc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuICBbbXVsdGldPVwiY29uZmlnLm11bHRpXCJcbiAgW3ZpZXddPVwiY29uZmlnLnZpZXdcIlxuICBbaW5kZXhdPVwiaW5kZXhcIlxuICBbYWN0aXZlXT1cImFjdGl2ZVwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtoYW5kbGVOZXh0TWlsbGVyVmlld0NvbHVtbl09XCJoYW5kbGVOZXh0TWlsbGVyVmlld0NvbHVtbi5iaW5kKHRoaXMpXCJcbiAgKGlzTG9hZGluZ1N0YXRlKT1cIm9uTG9hZGluZygkZXZlbnQpXCJcbiAgKG9uU2VsZWN0KT1cIm9uU2VsZWN0KCRldmVudClcIlxuICAob25EZXNlbGVjdCk9XCJvbkRlc2VsZWN0KCRldmVudClcIlxuICBbbmdDbGFzc109XCJ7ICdjb2xsYXBzZSBzaG93JzogIXJvb3ROb2RlLnJvb3QgJiYgIXJvb3ROb2RlLmhpZGRlbiAmJiBjb25maWcudmlldyAhPT0gJ21pbGxlcicgfVwiXG4+PC9jOHktYXNzZXQtc2VsZWN0b3Itbm9kZT5cbiJdfQ==
@@ -3,6 +3,33 @@ import { AssetNodeService } from '../asset-node.service';
3
3
  import { isArray, isNumber, isObject, isString } from 'lodash';
4
4
  import * as i0 from "@angular/core";
5
5
  export class AssetSelectorService extends AssetNodeService {
6
+ constructor() {
7
+ super(...arguments);
8
+ /**
9
+ * Function which will check if the node is selectable.
10
+ */
11
+ this.isNodeSelectableFn = true;
12
+ }
13
+ /**
14
+ * Sets the function that will decide if the node is selectable.
15
+ * @param fn A boolean or a function that will decide if the node is selectable.
16
+ */
17
+ setIsNodeSelectable(fn) {
18
+ this.isNodeSelectableFn = fn;
19
+ }
20
+ /**
21
+ * Checks if the node is selectable.
22
+ * @param node The node to check.
23
+ */
24
+ isNodeSelectable(node) {
25
+ if (typeof this.isNodeSelectableFn === 'boolean') {
26
+ return this.isNodeSelectableFn;
27
+ }
28
+ else if (typeof this.isNodeSelectableFn === 'function') {
29
+ return this.isNodeSelectableFn(node);
30
+ }
31
+ return true;
32
+ }
6
33
  /**
7
34
  * Simplifies the object model based on the selected mode.
8
35
  * @param obj The selected asset.
@@ -54,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
54
81
  providedIn: 'root'
55
82
  }]
56
83
  }] });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc2VsZWN0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2Fzc2V0cy1uYXZpZ2F0b3IvYXNzZXQtc2VsZWN0b3IvYXNzZXQtc2VsZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7O0FBSy9ELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxnQkFBZ0I7SUFDeEQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FDWixHQUE0QixFQUM1QixTQUE0QjtRQUU1QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxhQUFhLENBQ1gsS0FBOEMsRUFDOUMsSUFBdUI7UUFFdkIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxLQUFvQixDQUFDO1lBQ2pFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ25GLENBQUMsQ0FBQztRQUVGLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtCQUFrQixDQUNoQixRQUE0RCxFQUM1RCxVQUF1QjtRQUV2QixPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsS0FBVTtRQUNwQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDOzhHQXZEVSxvQkFBb0I7a0hBQXBCLG9CQUFvQixjQUZuQixNQUFNOzsyRkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUlkZW50aWZpZWQsIElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXNzZXROb2RlU2VydmljZSB9IGZyb20gJy4uL2Fzc2V0LW5vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBpc0FycmF5LCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnbG9kYXNoJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXNzZXRTZWxlY3RvclNlcnZpY2UgZXh0ZW5kcyBBc3NldE5vZGVTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIFNpbXBsaWZpZXMgdGhlIG9iamVjdCBtb2RlbCBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgbW9kZS5cbiAgICogQHBhcmFtIG9iaiBUaGUgc2VsZWN0ZWQgYXNzZXQuXG4gICAqIEBwYXJhbSBtb2RlIFRoZSBtb2RlIHdoaWNoIHdpbGwgZGVjaWRlIHdoYXQgdHlwZSBvZiBtb2RlbCB3aWxsIGJlIHJldHVybmVkLlxuICAgKi9cbiAgbm9ybWFsaXplVmFsdWUoXG4gICAgb2JqOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBtb2RlbE1vZGU6ICdzaW1wbGUnIHwgJ2Z1bGwnXG4gICk6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+IHwgSUlkZW50aWZpZWQge1xuICAgIHJldHVybiB0aGlzLnNpbXBsaWZ5TW9kZWwodGhpcy5ub3JtYWxpemVNb2RlbFZhbHVlKG9iaiksIG1vZGVsTW9kZSk7XG4gIH1cblxuICBzaW1wbGlmeU1vZGVsKFxuICAgIG1vZGVsOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PiB8IElJZGVudGlmaWVkW10sXG4gICAgbW9kZTogJ3NpbXBsZScgfCAnZnVsbCdcbiAgKTogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gfCBJSWRlbnRpZmllZCB7XG4gICAgY29uc3QgbWFwTW9kZWwgPSBtb2RlbCA9PiB7XG4gICAgICBjb25zdCB7IGlkLCBuYW1lLCBjOHlfRGV2aWNlUXVlcnlTdHJpbmcgfSA9IG1vZGVsIGFzIElJZGVudGlmaWVkO1xuICAgICAgcmV0dXJuIHsgaWQsIG5hbWUsIC4uLihjOHlfRGV2aWNlUXVlcnlTdHJpbmcgPyB7IGM4eV9EZXZpY2VRdWVyeVN0cmluZyB9IDoge30pIH07XG4gICAgfTtcblxuICAgIGlmIChtb2RlID09PSAnZnVsbCcpIHtcbiAgICAgIHJldHVybiBtb2RlbDtcbiAgICB9XG4gICAgaWYgKCFpc0FycmF5KG1vZGVsKSkge1xuICAgICAgcmV0dXJuIG1hcE1vZGVsKG1vZGVsKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZGVsLm1hcChtYXBNb2RlbCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtLlxuICAgKiBAcGFyYW0gc2VsZWN0ZWQgQWxsIHNlbGVjdGVkIGl0ZW1zXG4gICAqIEBwYXJhbSBzZWxlY3RlZE1vIFRoZSBuZXcgc2VsZWN0ZWQgaXRlbS1cbiAgICogQHJldHVybnMgQW4gaW5kZXgsIG9yIC0xIGlmIG5vdCBmb3VuZC5cbiAgICovXG4gIGdldEluZGV4T2ZTZWxlY3RlZChcbiAgICBzZWxlY3RlZDogQXJyYXk8UGFydGlhbDxJSWRlbnRpZmllZD4+IHwgUGFydGlhbDxJSWRlbnRpZmllZD4sXG4gICAgc2VsZWN0ZWRNbzogSUlkZW50aWZpZWRcbiAgKSB7XG4gICAgcmV0dXJuIHNlbGVjdGVkLmZpbmRJbmRleChtbyA9PiBtby5pZCA9PT0gc2VsZWN0ZWRNby5pZCk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZU1vZGVsVmFsdWUodmFsdWU6IGFueSk6IElJZGVudGlmaWVkW10ge1xuICAgIGlmIChpc051bWJlcih2YWx1ZSkgfHwgaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICByZXR1cm4gW3sgaWQ6IHZhbHVlIH1dO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFt2YWx1ZV07XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxufVxuIl19
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc2VsZWN0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2Fzc2V0cy1uYXZpZ2F0b3IvYXNzZXQtc2VsZWN0b3IvYXNzZXQtc2VsZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7O0FBTS9ELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxnQkFBZ0I7SUFIMUQ7O1FBSUU7O1dBRUc7UUFDSyx1QkFBa0IsR0FBNkMsSUFBSSxDQUFDO0tBNkU3RTtJQTNFQzs7O09BR0c7SUFDSCxtQkFBbUIsQ0FBQyxFQUE0QztRQUM5RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxJQUFlO1FBQzlCLElBQUksT0FBTyxJQUFJLENBQUMsa0JBQWtCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDakMsQ0FBQzthQUFNLElBQUksT0FBTyxJQUFJLENBQUMsa0JBQWtCLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDekQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxjQUFjLENBQ1osR0FBNEIsRUFDNUIsU0FBNEI7UUFFNUIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsYUFBYSxDQUNYLEtBQThDLEVBQzlDLElBQXVCO1FBRXZCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsS0FBb0IsQ0FBQztZQUNqRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNuRixDQUFDLENBQUM7UUFFRixJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNwQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxrQkFBa0IsQ0FDaEIsUUFBNEQsRUFDNUQsVUFBdUI7UUFFdkIsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEtBQVU7UUFDcEMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakIsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs4R0FoRlUsb0JBQW9CO2tIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7MkZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElJZGVudGlmaWVkLCBJTWFuYWdlZE9iamVjdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFzc2V0Tm9kZVNlcnZpY2UgfSBmcm9tICcuLi9hc3NldC1ub2RlLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNOdW1iZXIsIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBHcm91cE5vZGUgfSBmcm9tICcuL2dyb3VwLW5vZGUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBc3NldFNlbGVjdG9yU2VydmljZSBleHRlbmRzIEFzc2V0Tm9kZVNlcnZpY2Uge1xuICAvKipcbiAgICogRnVuY3Rpb24gd2hpY2ggd2lsbCBjaGVjayBpZiB0aGUgbm9kZSBpcyBzZWxlY3RhYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBpc05vZGVTZWxlY3RhYmxlRm46IGJvb2xlYW4gfCAoKG5vZGU6IEdyb3VwTm9kZSkgPT4gYm9vbGVhbikgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgZGVjaWRlIGlmIHRoZSBub2RlIGlzIHNlbGVjdGFibGUuXG4gICAqIEBwYXJhbSBmbiBBIGJvb2xlYW4gb3IgYSBmdW5jdGlvbiB0aGF0IHdpbGwgZGVjaWRlIGlmIHRoZSBub2RlIGlzIHNlbGVjdGFibGUuXG4gICAqL1xuICBzZXRJc05vZGVTZWxlY3RhYmxlKGZuOiBib29sZWFuIHwgKChub2RlOiBHcm91cE5vZGUpID0+IGJvb2xlYW4pKTogdm9pZCB7XG4gICAgdGhpcy5pc05vZGVTZWxlY3RhYmxlRm4gPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIG5vZGUgaXMgc2VsZWN0YWJsZS5cbiAgICogQHBhcmFtIG5vZGUgVGhlIG5vZGUgdG8gY2hlY2suXG4gICAqL1xuICBpc05vZGVTZWxlY3RhYmxlKG5vZGU6IEdyb3VwTm9kZSk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdGhpcy5pc05vZGVTZWxlY3RhYmxlRm4gPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNOb2RlU2VsZWN0YWJsZUZuO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuaXNOb2RlU2VsZWN0YWJsZUZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc05vZGVTZWxlY3RhYmxlRm4obm9kZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBTaW1wbGlmaWVzIHRoZSBvYmplY3QgbW9kZWwgYmFzZWQgb24gdGhlIHNlbGVjdGVkIG1vZGUuXG4gICAqIEBwYXJhbSBvYmogVGhlIHNlbGVjdGVkIGFzc2V0LlxuICAgKiBAcGFyYW0gbW9kZSBUaGUgbW9kZSB3aGljaCB3aWxsIGRlY2lkZSB3aGF0IHR5cGUgb2YgbW9kZWwgd2lsbCBiZSByZXR1cm5lZC5cbiAgICovXG4gIG5vcm1hbGl6ZVZhbHVlKFxuICAgIG9iajogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgbW9kZWxNb2RlOiAnc2ltcGxlJyB8ICdmdWxsJ1xuICApOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PiB8IElJZGVudGlmaWVkIHtcbiAgICByZXR1cm4gdGhpcy5zaW1wbGlmeU1vZGVsKHRoaXMubm9ybWFsaXplTW9kZWxWYWx1ZShvYmopLCBtb2RlbE1vZGUpO1xuICB9XG5cbiAgc2ltcGxpZnlNb2RlbChcbiAgICBtb2RlbDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gfCBJSWRlbnRpZmllZFtdLFxuICAgIG1vZGU6ICdzaW1wbGUnIHwgJ2Z1bGwnXG4gICk6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+IHwgSUlkZW50aWZpZWQge1xuICAgIGNvbnN0IG1hcE1vZGVsID0gbW9kZWwgPT4ge1xuICAgICAgY29uc3QgeyBpZCwgbmFtZSwgYzh5X0RldmljZVF1ZXJ5U3RyaW5nIH0gPSBtb2RlbCBhcyBJSWRlbnRpZmllZDtcbiAgICAgIHJldHVybiB7IGlkLCBuYW1lLCAuLi4oYzh5X0RldmljZVF1ZXJ5U3RyaW5nID8geyBjOHlfRGV2aWNlUXVlcnlTdHJpbmcgfSA6IHt9KSB9O1xuICAgIH07XG5cbiAgICBpZiAobW9kZSA9PT0gJ2Z1bGwnKSB7XG4gICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxuICAgIGlmICghaXNBcnJheShtb2RlbCkpIHtcbiAgICAgIHJldHVybiBtYXBNb2RlbChtb2RlbCk7XG4gICAgfVxuICAgIHJldHVybiBtb2RlbC5tYXAobWFwTW9kZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbS5cbiAgICogQHBhcmFtIHNlbGVjdGVkIEFsbCBzZWxlY3RlZCBpdGVtc1xuICAgKiBAcGFyYW0gc2VsZWN0ZWRNbyBUaGUgbmV3IHNlbGVjdGVkIGl0ZW0tXG4gICAqIEByZXR1cm5zIEFuIGluZGV4LCBvciAtMSBpZiBub3QgZm91bmQuXG4gICAqL1xuICBnZXRJbmRleE9mU2VsZWN0ZWQoXG4gICAgc2VsZWN0ZWQ6IEFycmF5PFBhcnRpYWw8SUlkZW50aWZpZWQ+PiB8IFBhcnRpYWw8SUlkZW50aWZpZWQ+LFxuICAgIHNlbGVjdGVkTW86IElJZGVudGlmaWVkXG4gICkge1xuICAgIHJldHVybiBzZWxlY3RlZC5maW5kSW5kZXgobW8gPT4gbW8uaWQgPT09IHNlbGVjdGVkTW8uaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVNb2RlbFZhbHVlKHZhbHVlOiBhbnkpOiBJSWRlbnRpZmllZFtdIHtcbiAgICBpZiAoaXNOdW1iZXIodmFsdWUpIHx8IGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFt7IGlkOiB2YWx1ZSB9XTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBbdmFsdWVdO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cbn1cbiJdfQ==
@@ -165,7 +165,7 @@ export class MillerViewComponent extends AssetSelectorBase {
165
165
  useExisting: forwardRef(() => MillerViewComponent),
166
166
  multi: true
167
167
  }
168
- ], viewQueries: [{ propertyName: "millerViewWrapper", first: true, predicate: ["millerViewWrapper"], descendants: true }, { propertyName: "assetSelectors", predicate: AssetSelectorComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"miller-view-wrapper {{ config.label }}\"\n [ngStyle]=\"{\n 'padding-top': selectedDevice ? '0px' : (assetSelectorHeaderHeight$ | async)\n }\"\n #millerViewWrapper\n [ngClass]=\"{\n 'single-column': config.singleColumn,\n }\"\n>\n <div\n class=\"miller-column bg-inherit\"\n *ngFor=\"let column of columns; index as i\"\n >\n <c8y-asset-selector\n class=\"bg-inherit\"\n #assetSelector\n [config]=\"config\"\n [index]=\"i\"\n [active]=\"columns[i + 1]\"\n [rootNode]=\"column\"\n [selected]=\"selected || []\"\n [selectedDevice]=\"selectedDevice\"\n (onSelected)=\"onSelectionChange($event)\"\n (onClearSelected)=\"onClearSelected.emit()\"\n (onRowSelected)=\"addNewColumn($event)\"\n (onLoad)=\"onLoad($event)\"\n [container]=\"container\"\n ></c8y-asset-selector>\n <div\n class=\"p-relative p-b-64\"\n *ngIf=\"isLoading && columnIndex === i && !selectedDevice\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"p-l-8 p-r-8\"\n *ngIf=\"!column.children.length && !isLoading\"\n >\n <c8y-ui-empty-state\n [icon]=\"'folder-open'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'The selected asset has no children.' | translate\"\n *ngIf=\"!filterText; else noSearchResults\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-template #noSearchResults>\n <c8y-ui-empty-state\n [icon]=\"'folder-open'\"\n [title]=\"'No results to display for the current filter.' | translate\"\n [subtitle]=\"'There are no assets matching the filter.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </ng-template>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i4.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { 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.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i6.AssetSelectorComponent, selector: "c8y-asset-selector", inputs: ["config", "active", "index", "asset", "selectedDevice", "selected", "rootNode", "selectedItems", "container", "disabled"], outputs: ["onSelected", "onClearSelected", "onRowSelected", "onLoad"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }] }); }
168
+ ], viewQueries: [{ propertyName: "millerViewWrapper", first: true, predicate: ["millerViewWrapper"], descendants: true }, { propertyName: "assetSelectors", predicate: AssetSelectorComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"miller-view-wrapper {{ config.label }}\"\n [ngStyle]=\"{\n 'padding-top': selectedDevice ? '0px' : (assetSelectorHeaderHeight$ | async)\n }\"\n #millerViewWrapper\n [ngClass]=\"{\n 'single-column': config.singleColumn,\n }\"\n>\n <div\n class=\"miller-column bg-inherit\"\n *ngFor=\"let column of columns; index as i\"\n >\n <c8y-asset-selector\n class=\"bg-inherit\"\n #assetSelector\n [config]=\"config\"\n [index]=\"i\"\n [active]=\"columns[i + 1]\"\n [rootNode]=\"column\"\n [selected]=\"selected || []\"\n [selectedDevice]=\"selectedDevice\"\n (onSelected)=\"onSelectionChange($event)\"\n (onClearSelected)=\"onClearSelected.emit()\"\n (onRowSelected)=\"addNewColumn($event)\"\n (onLoad)=\"onLoad($event)\"\n [container]=\"container\"\n ></c8y-asset-selector>\n <div\n class=\"p-relative p-b-64\"\n *ngIf=\"isLoading && columnIndex === i && !selectedDevice\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"p-l-8 p-r-8\"\n *ngIf=\"!column.children.length && !isLoading\"\n >\n <c8y-ui-empty-state\n [icon]=\"'folder-open'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'The selected asset has no children.' | translate\"\n *ngIf=\"!filterText; else noSearchResults\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-template #noSearchResults>\n <c8y-ui-empty-state\n [icon]=\"'folder-open'\"\n [title]=\"'No results to display for the current filter.' | translate\"\n [subtitle]=\"'There are no assets matching the filter.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </ng-template>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i4.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { 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.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i6.AssetSelectorComponent, selector: "c8y-asset-selector", inputs: ["config", "active", "index", "asset", "selectedDevice", "selected", "rootNode", "selectedItems", "container", "isNodeSelectable", "disabled"], outputs: ["onSelected", "onClearSelected", "onRowSelected", "onLoad"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }] }); }
169
169
  }
170
170
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: MillerViewComponent, decorators: [{
171
171
  type: Component,
@@ -20,7 +20,7 @@ export class InventoryRolesModalComponent {
20
20
  this.modal.hide();
21
21
  }
22
22
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: InventoryRolesModalComponent, deps: [{ token: i1.BsModalRef }], target: i0.ɵɵFactoryTarget.Component }); }
23
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: InventoryRolesModalComponent, selector: "c8y-sso-inventory-roles-modal", ngImport: i0, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"c8y-group-open\"></i>\n <h4 id=\"modal-title\">{{ 'Select from inventory' | translate }}</h4>\n </div>\n <div class=\"modal-inner-scroll\">\n <div\n id=\"modal-body\"\n class=\"bg-component\"\n >\n <c8y-asset-selector\n class=\"d-contents\"\n [(ngModel)]=\"selectedGroups\"\n [config]=\"{\n label: label,\n showFilter: true,\n multi: true,\n groupsSelectable: true,\n columnHeaders: false,\n singleColumn: true,\n groupsOnly: true\n }\"\n ></c8y-asset-selector>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"dismiss()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Select' | translate }}\"\n (click)=\"select()\"\n >\n {{ 'Select' | translate }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.AssetSelectorComponent, selector: "c8y-asset-selector", inputs: ["config", "active", "index", "asset", "selectedDevice", "selected", "rootNode", "selectedItems", "container", "disabled"], outputs: ["onSelected", "onClearSelected", "onRowSelected", "onLoad"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
23
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: InventoryRolesModalComponent, selector: "c8y-sso-inventory-roles-modal", ngImport: i0, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"c8y-group-open\"></i>\n <h4 id=\"modal-title\">{{ 'Select from inventory' | translate }}</h4>\n </div>\n <div class=\"modal-inner-scroll\">\n <div\n id=\"modal-body\"\n class=\"bg-component\"\n >\n <c8y-asset-selector\n class=\"d-contents\"\n [(ngModel)]=\"selectedGroups\"\n [config]=\"{\n label: label,\n showFilter: true,\n multi: true,\n groupsSelectable: true,\n columnHeaders: false,\n singleColumn: true,\n groupsOnly: true\n }\"\n ></c8y-asset-selector>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"dismiss()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Select' | translate }}\"\n (click)=\"select()\"\n >\n {{ 'Select' | translate }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.AssetSelectorComponent, selector: "c8y-asset-selector", inputs: ["config", "active", "index", "asset", "selectedDevice", "selected", "rootNode", "selectedItems", "container", "isNodeSelectable", "disabled"], outputs: ["onSelected", "onClearSelected", "onRowSelected", "onLoad"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
24
24
  }
25
25
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: InventoryRolesModalComponent, decorators: [{
26
26
  type: Component,
@@ -23,7 +23,7 @@ export class RootNodeConfigComponent {
23
23
  }
24
24
  }
25
25
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: RootNodeConfigComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: RootNodeConfigComponent, selector: "c8y-root-node-config", inputs: { config: "config", disabled: "disabled" }, outputs: { onUpdate: "onUpdate" }, ngImport: i0, template: "<div class=\"col-sm-6\">\n <label title=\"{{ 'Current top level nodes' | translate }}\" translate>\n Current top level nodes\n </label>\n <c8y-list-group class=\"separator-top\">\n <c8y-li *ngIf=\"config.rootNodes.length === 0\">\n <c8y-ui-empty-state\n [icon]=\"'folder-open'\"\n [title]=\"'No top level nodes set.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-li>\n <c8y-li *ngFor=\"let node of config.rootNodes; let index = index\">\n <c8y-li-icon icon=\"c8y-group\"></c8y-li-icon>\n <div class=\"content-flex-30\">\n <div class=\"col-6\">\n <div class=\"text-truncate\" title=\"{{ node.name }}\">\n {{ node.name }}\n </div>\n </div>\n <div class=\"col-4\">\n <label class=\"c8y-switch c8y-switch--inline d-flex\" title=\"{{ 'Hide devices' | translate }}\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"node.hideDevices\"\n name=\"node.{{ index }}.hideDevices\"\n (change)=\"onUpdate.emit()\"\n [disabled]=\"disabled\"\n />\n <span></span>\n <small class=\"text-truncate a-s-center l-h-1\">{{ 'Hide devices' | translate }}</small>\n </label>\n </div>\n <div class=\"col-2 text-right\">\n <div class=\"d-flex fit-w\">\n <button\n class=\"btn-dot btn-dot--danger m-l-auto\"\n type=\"button\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"{{ 'Remove' | translate }}\"\n [disabled]=\"disabled\"\n [delay]=\"500\"\n (click)=\"removeNavigatorNode(node)\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </div>\n </div>\n </c8y-li>\n </c8y-list-group>\n</div>\n\n<div class=\"col-sm-6 col-md-5\" style=\"height: calc(100vh - 430px)\">\n <label title=\"{{ 'Select top level nodes' | translate }}\" translate>Select top level nodes</label>\n <c8y-asset-selector\n [config]=\"{ groupsOnly: true, multi: true, groupsSelectable: true }\"\n [(ngModel)]=\"config.rootNodes\"\n [disabled]=\"disabled\"\n (onSelected)=\"onUpdate.emit()\"\n name=\"rootNodes\"\n class=\"border-top d-block\"\n ></c8y-asset-selector>\n</div>\n", dependencies: [{ kind: "component", type: i1.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i1.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i1.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i4.AssetSelectorComponent, selector: "c8y-asset-selector", inputs: ["config", "active", "index", "asset", "selectedDevice", "selected", "rootNode", "selectedItems", "container", "disabled"], outputs: ["onSelected", "onClearSelected", "onRowSelected", "onLoad"] }, { kind: "directive", type: i5.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] }); }
26
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: RootNodeConfigComponent, selector: "c8y-root-node-config", inputs: { config: "config", disabled: "disabled" }, outputs: { onUpdate: "onUpdate" }, ngImport: i0, template: "<div class=\"col-sm-6\">\n <label title=\"{{ 'Current top level nodes' | translate }}\" translate>\n Current top level nodes\n </label>\n <c8y-list-group class=\"separator-top\">\n <c8y-li *ngIf=\"config.rootNodes.length === 0\">\n <c8y-ui-empty-state\n [icon]=\"'folder-open'\"\n [title]=\"'No top level nodes set.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-li>\n <c8y-li *ngFor=\"let node of config.rootNodes; let index = index\">\n <c8y-li-icon icon=\"c8y-group\"></c8y-li-icon>\n <div class=\"content-flex-30\">\n <div class=\"col-6\">\n <div class=\"text-truncate\" title=\"{{ node.name }}\">\n {{ node.name }}\n </div>\n </div>\n <div class=\"col-4\">\n <label class=\"c8y-switch c8y-switch--inline d-flex\" title=\"{{ 'Hide devices' | translate }}\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"node.hideDevices\"\n name=\"node.{{ index }}.hideDevices\"\n (change)=\"onUpdate.emit()\"\n [disabled]=\"disabled\"\n />\n <span></span>\n <small class=\"text-truncate a-s-center l-h-1\">{{ 'Hide devices' | translate }}</small>\n </label>\n </div>\n <div class=\"col-2 text-right\">\n <div class=\"d-flex fit-w\">\n <button\n class=\"btn-dot btn-dot--danger m-l-auto\"\n type=\"button\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"{{ 'Remove' | translate }}\"\n [disabled]=\"disabled\"\n [delay]=\"500\"\n (click)=\"removeNavigatorNode(node)\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </div>\n </div>\n </c8y-li>\n </c8y-list-group>\n</div>\n\n<div class=\"col-sm-6 col-md-5\" style=\"height: calc(100vh - 430px)\">\n <label title=\"{{ 'Select top level nodes' | translate }}\" translate>Select top level nodes</label>\n <c8y-asset-selector\n [config]=\"{ groupsOnly: true, multi: true, groupsSelectable: true }\"\n [(ngModel)]=\"config.rootNodes\"\n [disabled]=\"disabled\"\n (onSelected)=\"onUpdate.emit()\"\n name=\"rootNodes\"\n class=\"border-top d-block\"\n ></c8y-asset-selector>\n</div>\n", dependencies: [{ kind: "component", type: i1.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i1.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i1.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i4.AssetSelectorComponent, selector: "c8y-asset-selector", inputs: ["config", "active", "index", "asset", "selectedDevice", "selected", "rootNode", "selectedItems", "container", "isNodeSelectable", "disabled"], outputs: ["onSelected", "onClearSelected", "onRowSelected", "onLoad"] }, { kind: "directive", type: i5.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] }); }
27
27
  }
28
28
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: RootNodeConfigComponent, decorators: [{
29
29
  type: Component,