@c8y/ngx-components 1021.62.9 → 1021.63.2

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 (41) hide show
  1. package/echart/services/echarts-options.service.d.ts +3 -1
  2. package/echart/services/echarts-options.service.d.ts.map +1 -1
  3. package/esm2022/alarms/alarm-details.component.mjs +3 -3
  4. package/esm2022/alarms/alarms-filter.component.mjs +3 -3
  5. package/esm2022/alarms/alarms-icon.component.mjs +3 -3
  6. package/esm2022/alarms/alarms-interval-refresh.component.mjs +3 -3
  7. package/esm2022/alarms/alarms-list.component.mjs +3 -3
  8. package/esm2022/alarms/alarms.component.mjs +3 -3
  9. package/esm2022/auth-configuration/sso-configuration/sso-configuration.component.mjs +3 -3
  10. package/esm2022/core/countdown-interval/countdown-interval.component.mjs +3 -3
  11. package/esm2022/echart/services/echarts-options.service.mjs +28 -12
  12. package/esm2022/register-device/device-registration-view.component.mjs +39 -9
  13. package/esm2022/register-device/general/general-device-registration-button.component.mjs +13 -14
  14. package/esm2022/register-device/general/general-device-registration.component.mjs +19 -5
  15. package/esm2022/register-device/general/general-device-registration.service.mjs +30 -0
  16. package/esm2022/register-device/index.mjs +2 -1
  17. package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +3 -3
  18. package/fesm2022/c8y-ngx-components-alarms.mjs +12 -12
  19. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  20. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +2 -2
  21. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  22. package/fesm2022/c8y-ngx-components-echart.mjs +26 -11
  23. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  24. package/fesm2022/c8y-ngx-components-register-device.mjs +86 -19
  25. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  26. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +2 -2
  27. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  28. package/fesm2022/c8y-ngx-components.mjs +2 -2
  29. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  30. package/locales/locales.pot +3 -0
  31. package/package.json +1 -1
  32. package/register-device/device-registration-view.component.d.ts +6 -1
  33. package/register-device/device-registration-view.component.d.ts.map +1 -1
  34. package/register-device/general/general-device-registration-button.component.d.ts +3 -3
  35. package/register-device/general/general-device-registration-button.component.d.ts.map +1 -1
  36. package/register-device/general/general-device-registration.component.d.ts +5 -0
  37. package/register-device/general/general-device-registration.component.d.ts.map +1 -1
  38. package/register-device/general/general-device-registration.service.d.ts +9 -0
  39. package/register-device/general/general-device-registration.service.d.ts.map +1 -0
  40. package/register-device/index.d.ts +1 -0
  41. package/register-device/index.d.ts.map +1 -1
@@ -6,22 +6,28 @@ import { DeviceBootstrapRealtimeService, TenantUiService, ModalService, Status,
6
6
  import { RegisterDeviceService } from './register-device.service';
7
7
  import { sortBy } from 'lodash-es';
8
8
  import { TranslateService } from '@ngx-translate/core';
9
+ import { ActivatedRoute } from '@angular/router';
10
+ import { GeneralDeviceRegistrationService } from './general/general-device-registration.service';
9
11
  import * as i0 from "@angular/core";
10
12
  import * as i1 from "./register-device.service";
11
13
  import * as i2 from "@c8y/ngx-components";
12
14
  import * as i3 from "@ngx-translate/core";
13
- import * as i4 from "ngx-bootstrap/popover";
14
- import * as i5 from "@angular/common";
15
- import * as i6 from "@angular/forms";
16
- import * as i7 from "./dropdown/register-device-dropdown.component";
15
+ import * as i4 from "@angular/router";
16
+ import * as i5 from "./general/general-device-registration.service";
17
+ import * as i6 from "ngx-bootstrap/popover";
18
+ import * as i7 from "@angular/common";
19
+ import * as i8 from "@angular/forms";
20
+ import * as i9 from "./dropdown/register-device-dropdown.component";
17
21
  export class DeviceRegistrationViewComponent {
18
- constructor(registerDeviceService, bootstrapRealtimeService, tenantUiService, modalService, translateService, optionsService) {
22
+ constructor(registerDeviceService, bootstrapRealtimeService, tenantUiService, modalService, translateService, optionsService, activatedRoute, generalRegistration) {
19
23
  this.registerDeviceService = registerDeviceService;
20
24
  this.bootstrapRealtimeService = bootstrapRealtimeService;
21
25
  this.tenantUiService = tenantUiService;
22
26
  this.modalService = modalService;
23
27
  this.translateService = translateService;
24
28
  this.optionsService = optionsService;
29
+ this.activatedRoute = activatedRoute;
30
+ this.generalRegistration = generalRegistration;
25
31
  this.requireSecurityToken = false;
26
32
  this.isManagementTenant = false;
27
33
  this.isLoading = false;
@@ -74,6 +80,7 @@ export class DeviceRegistrationViewComponent {
74
80
  .subscribe((bootstrap) => {
75
81
  this.registerDeviceService.onDeviceBootstrap(bootstrap);
76
82
  });
83
+ this.handleQueryParams();
77
84
  }
78
85
  ngOnDestroy() {
79
86
  this.unsubscribe$.next();
@@ -82,6 +89,29 @@ export class DeviceRegistrationViewComponent {
82
89
  updateList(data) {
83
90
  this.registerDeviceService.internalListUpdate(data);
84
91
  }
92
+ async handleQueryParams() {
93
+ const { externalId, 'one-time-password': oneTimePassword } = this.activatedRoute.snapshot.queryParams;
94
+ if (!externalId) {
95
+ return;
96
+ }
97
+ try {
98
+ await this.generalRegistration.open({
99
+ useEST$: new BehaviorSubject(!!oneTimePassword),
100
+ model: {
101
+ devicesToCreate: [
102
+ {
103
+ id: externalId,
104
+ oneTimePassword
105
+ }
106
+ ]
107
+ }
108
+ });
109
+ this.loadAll();
110
+ }
111
+ catch (e) {
112
+ // modal closed
113
+ }
114
+ }
85
115
  async delete(id) {
86
116
  const confirmed = await this.modalService.confirm(gettext('Cancel device registration'), this.translateService.instant(gettext('You are about to cancel device registration for ID "{{id}}". Do you want to proceed?'), { id }), Status.DANGER, {
87
117
  ok: gettext('Cancel registration'),
@@ -123,11 +153,11 @@ export class DeviceRegistrationViewComponent {
123
153
  showTokenInputBasedOnSecurityMode() {
124
154
  return this._securityTokenPolicy.getValue() !== DeviceRegistrationSecurityMode.IGNORED;
125
155
  }
126
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DeviceRegistrationViewComponent, deps: [{ token: i1.RegisterDeviceService }, { token: i2.DeviceBootstrapRealtimeService }, { token: i2.TenantUiService }, { token: i2.ModalService }, { token: i3.TranslateService }, { token: i2.OptionsService }], target: i0.ɵɵFactoryTarget.Component }); }
127
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DeviceRegistrationViewComponent, selector: "c8y-device-registration-view", ngImport: i0, template: "<ng-container *ngIf=\"deviceRequests$ | async as deviceRequestList\">\n <c8y-title>\n {{ 'Device registration' | translate }}\n <small *ngIf=\"deviceRequestList.data.length === 1\">1 {{ 'new device' | translate }}</small>\n <small *ngIf=\"deviceRequestList.data.length > 1\">\n {{ deviceRequestList.data.length }} {{ 'new devices' | translate }}\n </small>\n </c8y-title>\n\n <c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'exchange'\"\n [label]=\"'Devices' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-connect'\"\n [label]=\"'Device registration' | translate\"\n ></c8y-breadcrumb-item>\n </c8y-breadcrumb>\n\n <c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form hidden-xs\"\n >\n <c8y-list-display-switch (onListClassChange)=\"displayMode($event)\"></c8y-list-display-switch>\n </c8y-action-bar-item>\n\n <ng-container *ngIf=\"limit$ | async as limitStatus\">\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Accept all' | translate }}\"\n type=\"button\"\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n (click)=\"acceptAll()\"\n [disabled]=\"canAcceptAll() || limitStatus?.isReached\"\n >\n <i [c8yIcon]=\"'check'\"></i>\n {{ 'Accept all' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"9\"\n >\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadAll()\"\n [disabled]=\"isLoading\"\n >\n <i\n [c8yIcon]=\"'refresh'\"\n [ngClass]=\"{ 'icon-spin': isLoading }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n [placement]=\"'right'\"\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n >\n <c8y-register-device-dropdown></c8y-register-device-dropdown>\n </c8y-action-bar-item>\n\n <c8y-help\n src=\"/docs/device-management-application/registering-devices/#registering-devices\"\n ></c8y-help>\n\n <ng-container *ngIf=\"deviceRequestList.data.length > 0; else noData\">\n <div\n class=\"card-group\"\n [ngClass]=\"gridOrList\"\n >\n <!-- START interact-list sticky header START -->\n <div\n class=\"page-sticky-header hidden-xs\"\n *ngIf=\"gridOrList === 'interact-list'\"\n >\n <div class=\"d-flex\">\n <div class=\"card-header p-l-40\">\n <p translate>Device</p>\n </div>\n <div class=\"card-block card-column-30 p-l-0 m-l-8\">\n <p translate>Status</p>\n </div>\n <div\n class=\"card-block card-column-30 p-0\"\n *ngIf=\"showTokenInputBasedOnSecurityMode()\"\n >\n <p translate>Security token</p>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Security token is required if the connected device uses it.' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n <div class=\"card-footer card-column-50\">\n <div\n class=\"d-contents\"\n *ngIf=\"isManagementTenant; else noManagement\"\n >\n <div class=\"card-column-50\">\n {{ 'Created' | translate }}\n </div>\n <div class=\"card-column-30\">\n {{ 'By`user`' | translate }}\n </div>\n <div class=\"card-column-20\">\n {{ 'Tenant ID' | translate }}\n </div>\n </div>\n <ng-template #noManagement>\n <div class=\"d-contents\">\n <div class=\"card-column-50\">\n {{ 'Created' | translate }}\n </div>\n <div class=\"card-column-50\">\n {{ 'By`user`' | translate }}\n </div>\n </div>\n </ng-template>\n </div>\n <div\n class=\"card-actions-group\"\n style=\"min-width: 176px\"\n >\n <div class=\"btn btn-xs invisible\">\n <!--EMPTY by design-->\n </div>\n </div>\n </div>\n </div>\n <!-- END interact-list sticky header END -->\n\n <div\n class=\"col-xs-12 col-sm-6 col-md-4 col-lg-3\"\n *ngIf=\"limitStatus?.isReached\"\n >\n <p\n class=\"alert alert-warning center-block\"\n role=\"alert\"\n >\n <strong>\n {{ limitReachedInfo$ | async }}\n </strong>\n <br />\n <span translate>Please contact your platform administrator.</span>\n </p>\n </div>\n\n <ng-container *ngFor=\"let singleRequest of deviceRequestList.data\">\n <div class=\"col-xs-12 col-sm-6 col-md-4 col-lg-3\">\n <div class=\"card\">\n <div class=\"card-header separator\">\n <div class=\"card-icon\">\n <i\n [class]=\"statusProps[singleRequest.status].cls\"\n [c8yIcon]=\"statusProps[singleRequest.status].icon\"\n ></i>\n </div>\n <p\n class=\"card-title text-truncate\"\n title=\"{{ singleRequest.id }}\"\n >\n {{ singleRequest.id }}\n </p>\n </div>\n\n <div class=\"card-block text-center card-column-30\">\n <span\n class=\"text-label-small\"\n translate\n >\n Status\n </span>\n <p>\n <i\n class=\"icon-spin text-primary\"\n c8yIcon=\"refresh\"\n *ngIf=\"singleRequest.status === status.WAITING_FOR_CONNECTION\"\n ></i>\n {{ statusProps[singleRequest.status].label | translate }}\n </p>\n </div>\n\n <ng-container *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\">\n <div\n class=\"card-block text-center card-column-30 p-t-0\"\n [ngClass]=\"{ 'p-b-0': !shouldShowSecurityTokenInput(singleRequest) }\"\n *ngIf=\"showTokenInputBasedOnSecurityMode()\"\n >\n <ng-container *ngIf=\"shouldShowSecurityTokenInput(singleRequest)\">\n <span\n class=\"text-label-small\"\n *ngIf=\"gridOrList !== 'interact-list'\"\n translate\n >\n Security token\n </span>\n <input\n class=\"form-control\"\n type=\"text\"\n [(ngModel)]=\"singleRequest.securityToken\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'A1e3gh5ds' }\"\n [required]=\"requireSecurityToken\"\n />\n </ng-container>\n </div>\n\n <div\n class=\"card-actions-group d-flex a-i-center j-c-center\"\n style=\"min-width: 176px\"\n >\n <button\n class=\"btn btn-sm\"\n title=\"{{\n singleRequest.status === status.PENDING_ACCEPTANCE\n ? ('Remove' | translate)\n : ('Cancel' | translate)\n }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn-danger': singleRequest.status === status.PENDING_ACCEPTANCE,\n 'btn-default': singleRequest.status !== status.PENDING_ACCEPTANCE\n }\"\n (click)=\"delete(singleRequest.id)\"\n [disabled]=\"isLoading\"\n >\n <span *ngIf=\"singleRequest.status === status.PENDING_ACCEPTANCE\">\n {{ 'Remove' | translate }}\n </span>\n <span *ngIf=\"singleRequest.status !== status.PENDING_ACCEPTANCE\">\n {{ 'Cancel' | translate }}\n </span>\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Accept' | translate }}\"\n type=\"button\"\n (click)=\"accept(singleRequest)\"\n *ngIf=\"singleRequest.status === status.PENDING_ACCEPTANCE\"\n [disabled]=\"\n isLoading ||\n limitStatus?.isReached ||\n (!singleRequest.securityToken && requireSecurityToken)\n \"\n >\n {{ 'Accept' | translate }}\n </button>\n </div>\n </ng-container>\n\n <div class=\"card-footer separator text-center card-column-50\">\n <small\n class=\"d-contents\"\n *ngIf=\"isManagementTenant; else noManagement\"\n >\n <div\n class=\"d-contents\"\n *ngIf=\"singleRequest.creationTime && singleRequest.owner\"\n >\n <span class=\"card-column-50\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n Created on`date`\n </span>\n <span data-cy=\"device-registration--creation-date\">\n {{ singleRequest.creationTime | c8yDate }}\n </span>\n </span>\n <span class=\"card-column-30 text-truncate\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n by`user`\n </span>\n <span\n title=\"{{ singleRequest.owner }}\"\n data-cy=\"device-registration--created-by\"\n >\n {{ singleRequest.owner }}\n </span>\n </span>\n <span class=\"card-column-20\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n in`tenant`\n </span>\n <span>{{ singleRequest.tenantId }}</span>\n </span>\n </div>\n <div\n class=\"d-contents\"\n *ngIf=\"!singleRequest.creationTime || !singleRequest.owner\"\n >\n <div class=\"card-column-50\"></div>\n <div class=\"card-column-30\"></div>\n <span\n class=\"text-label-small\"\n translate\n >\n Created in`tenant`\n </span>\n <div class=\"card-column-20\">\n <span>\n {{ singleRequest.tenantId }}\n </span>\n </div>\n </div>\n </small>\n <ng-template #noManagement>\n <small class=\"d-contents\">\n <span class=\"card-column-50\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n Created on`date`\n </span>\n <span data-cy=\"device-registration--creation-date\">\n {{ singleRequest.creationTime | c8yDate }}\n </span>\n </span>\n <span class=\"card-column-50 text-truncate\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n by`user`\n </span>\n <span\n title=\"{{ singleRequest.owner }}\"\n data-cy=\"device-registration--created-by\"\n >\n {{ singleRequest.owner }}\n </span>\n </span>\n </small>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <c8y-load-more\n [paging]=\"deviceRequestList.paging\"\n [hidden]=\"true\"\n (onLoad)=\"updateList($event)\"\n ></c8y-load-more>\n </ng-container>\n\n <ng-template #noData>\n <div class=\"c8y-empty-state m-t-40 text-center\">\n <h1 class=\"c8y-icon c8y-icon-device-connect c8y-icon-duocolor\"></h1>\n <ng-container *ngIf=\"limitStatus?.isReached; else limitNotReached\">\n <h3>\n {{ limitReachedInfo$ | async }}\n </h3>\n <p translate>Please contact your platform administrator.</p>\n </ng-container>\n <ng-template #limitNotReached>\n <h3 translate>No pending registrations to display.</h3>\n <p\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n translate\n >\n Use the \"Register device\" dropdown in the top right corner.\n </p>\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { 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: i2.IfAllowedDirective, selector: "[c8yIfAllowed]", inputs: ["c8yIfAllowed", "c8yIfAllowedAllowAny"] }, { kind: "component", type: i2.LoadMoreComponent, selector: "c8y-load-more", inputs: ["paging", "useIntersection", "hidden", "container", "class", "maxIterations", "noMoreDataHint", "loadingTemplate", "hideNoMoreDataHint", "loadNextLabel", "loadingLabel"], outputs: ["onLoad"] }, { kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i2.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i2.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "component", type: i2.ListDisplaySwitchComponent, selector: "c8y-list-display-switch", inputs: ["listKey", "listLength", "filterPipe"], outputs: ["onListClassChange"] }, { kind: "component", type: i7.RegisterDeviceDropdownComponent, selector: "c8y-register-device-dropdown" }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.DatePipe, name: "c8yDate" }] }); }
156
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DeviceRegistrationViewComponent, deps: [{ token: i1.RegisterDeviceService }, { token: i2.DeviceBootstrapRealtimeService }, { token: i2.TenantUiService }, { token: i2.ModalService }, { token: i3.TranslateService }, { token: i2.OptionsService }, { token: i4.ActivatedRoute }, { token: i5.GeneralDeviceRegistrationService }], target: i0.ɵɵFactoryTarget.Component }); }
157
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DeviceRegistrationViewComponent, selector: "c8y-device-registration-view", ngImport: i0, template: "<ng-container *ngIf=\"deviceRequests$ | async as deviceRequestList\">\n <c8y-title>\n {{ 'Device registration' | translate }}\n <small *ngIf=\"deviceRequestList.data.length === 1\">1 {{ 'new device' | translate }}</small>\n <small *ngIf=\"deviceRequestList.data.length > 1\">\n {{ deviceRequestList.data.length }} {{ 'new devices' | translate }}\n </small>\n </c8y-title>\n\n <c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'exchange'\"\n [label]=\"'Devices' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-connect'\"\n [label]=\"'Device registration' | translate\"\n ></c8y-breadcrumb-item>\n </c8y-breadcrumb>\n\n <c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form hidden-xs\"\n >\n <c8y-list-display-switch (onListClassChange)=\"displayMode($event)\"></c8y-list-display-switch>\n </c8y-action-bar-item>\n\n <ng-container *ngIf=\"limit$ | async as limitStatus\">\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Accept all' | translate }}\"\n type=\"button\"\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n (click)=\"acceptAll()\"\n [disabled]=\"canAcceptAll() || limitStatus?.isReached\"\n >\n <i [c8yIcon]=\"'check'\"></i>\n {{ 'Accept all' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"9\"\n >\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadAll()\"\n [disabled]=\"isLoading\"\n >\n <i\n [c8yIcon]=\"'refresh'\"\n [ngClass]=\"{ 'icon-spin': isLoading }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n [placement]=\"'right'\"\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n >\n <c8y-register-device-dropdown></c8y-register-device-dropdown>\n </c8y-action-bar-item>\n\n <c8y-help\n src=\"/docs/device-management-application/registering-devices/#registering-devices\"\n ></c8y-help>\n\n <ng-container *ngIf=\"deviceRequestList.data.length > 0; else noData\">\n <div\n class=\"card-group\"\n [ngClass]=\"gridOrList\"\n >\n <!-- START interact-list sticky header START -->\n <div\n class=\"page-sticky-header hidden-xs\"\n *ngIf=\"gridOrList === 'interact-list'\"\n >\n <div class=\"d-flex\">\n <div class=\"card-header p-l-40\">\n <p translate>Device</p>\n </div>\n <div class=\"card-block card-column-30 p-l-0 m-l-8\">\n <p translate>Status</p>\n </div>\n <div\n class=\"card-block card-column-30 p-0\"\n *ngIf=\"showTokenInputBasedOnSecurityMode()\"\n >\n <p translate>Security token</p>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Security token is required if the connected device uses it.' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n <div class=\"card-footer card-column-50\">\n <div\n class=\"d-contents\"\n *ngIf=\"isManagementTenant; else noManagement\"\n >\n <div class=\"card-column-50\">\n {{ 'Created' | translate }}\n </div>\n <div class=\"card-column-30\">\n {{ 'By`user`' | translate }}\n </div>\n <div class=\"card-column-20\">\n {{ 'Tenant ID' | translate }}\n </div>\n </div>\n <ng-template #noManagement>\n <div class=\"d-contents\">\n <div class=\"card-column-50\">\n {{ 'Created' | translate }}\n </div>\n <div class=\"card-column-50\">\n {{ 'By`user`' | translate }}\n </div>\n </div>\n </ng-template>\n </div>\n <div\n class=\"card-actions-group\"\n style=\"min-width: 176px\"\n >\n <div class=\"btn btn-xs invisible\">\n <!--EMPTY by design-->\n </div>\n </div>\n </div>\n </div>\n <!-- END interact-list sticky header END -->\n\n <div\n class=\"col-xs-12 col-sm-6 col-md-4 col-lg-3\"\n *ngIf=\"limitStatus?.isReached\"\n >\n <p\n class=\"alert alert-warning center-block\"\n role=\"alert\"\n >\n <strong>\n {{ limitReachedInfo$ | async }}\n </strong>\n <br />\n <span translate>Please contact your platform administrator.</span>\n </p>\n </div>\n\n <ng-container *ngFor=\"let singleRequest of deviceRequestList.data\">\n <div class=\"col-xs-12 col-sm-6 col-md-4 col-lg-3\">\n <div class=\"card\">\n <div class=\"card-header separator\">\n <div class=\"card-icon\">\n <i\n [class]=\"statusProps[singleRequest.status].cls\"\n [c8yIcon]=\"statusProps[singleRequest.status].icon\"\n ></i>\n </div>\n <p\n class=\"card-title text-truncate\"\n title=\"{{ singleRequest.id }}\"\n >\n {{ singleRequest.id }}\n </p>\n </div>\n\n <div class=\"card-block text-center card-column-30\">\n <span\n class=\"text-label-small\"\n translate\n >\n Status\n </span>\n <p>\n <i\n class=\"icon-spin text-primary\"\n c8yIcon=\"refresh\"\n *ngIf=\"singleRequest.status === status.WAITING_FOR_CONNECTION\"\n ></i>\n {{ statusProps[singleRequest.status].label | translate }}\n </p>\n </div>\n\n <ng-container *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\">\n <div\n class=\"card-block text-center card-column-30 p-t-0\"\n [ngClass]=\"{ 'p-b-0': !shouldShowSecurityTokenInput(singleRequest) }\"\n *ngIf=\"showTokenInputBasedOnSecurityMode()\"\n >\n <ng-container *ngIf=\"shouldShowSecurityTokenInput(singleRequest)\">\n <span\n class=\"text-label-small\"\n *ngIf=\"gridOrList !== 'interact-list'\"\n translate\n >\n Security token\n </span>\n <input\n class=\"form-control\"\n type=\"text\"\n [(ngModel)]=\"singleRequest.securityToken\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'A1e3gh5ds' }\"\n [required]=\"requireSecurityToken\"\n />\n </ng-container>\n </div>\n\n <div\n class=\"card-actions-group d-flex a-i-center j-c-center\"\n style=\"min-width: 176px\"\n >\n <button\n class=\"btn btn-sm\"\n title=\"{{\n singleRequest.status === status.PENDING_ACCEPTANCE\n ? ('Remove' | translate)\n : ('Cancel' | translate)\n }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn-danger': singleRequest.status === status.PENDING_ACCEPTANCE,\n 'btn-default': singleRequest.status !== status.PENDING_ACCEPTANCE\n }\"\n (click)=\"delete(singleRequest.id)\"\n [disabled]=\"isLoading\"\n >\n <span *ngIf=\"singleRequest.status === status.PENDING_ACCEPTANCE\">\n {{ 'Remove' | translate }}\n </span>\n <span *ngIf=\"singleRequest.status !== status.PENDING_ACCEPTANCE\">\n {{ 'Cancel' | translate }}\n </span>\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Accept' | translate }}\"\n type=\"button\"\n (click)=\"accept(singleRequest)\"\n *ngIf=\"singleRequest.status === status.PENDING_ACCEPTANCE\"\n [disabled]=\"\n isLoading ||\n limitStatus?.isReached ||\n (!singleRequest.securityToken && requireSecurityToken)\n \"\n >\n {{ 'Accept' | translate }}\n </button>\n </div>\n </ng-container>\n\n <div class=\"card-footer separator text-center card-column-50\">\n <small\n class=\"d-contents\"\n *ngIf=\"isManagementTenant; else noManagement\"\n >\n <div\n class=\"d-contents\"\n *ngIf=\"singleRequest.creationTime && singleRequest.owner\"\n >\n <span class=\"card-column-50\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n Created on`date`\n </span>\n <span data-cy=\"device-registration--creation-date\">\n {{ singleRequest.creationTime | c8yDate }}\n </span>\n </span>\n <span class=\"card-column-30 text-truncate\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n by`user`\n </span>\n <span\n title=\"{{ singleRequest.owner }}\"\n data-cy=\"device-registration--created-by\"\n >\n {{ singleRequest.owner }}\n </span>\n </span>\n <span class=\"card-column-20\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n in`tenant`\n </span>\n <span>{{ singleRequest.tenantId }}</span>\n </span>\n </div>\n <div\n class=\"d-contents\"\n *ngIf=\"!singleRequest.creationTime || !singleRequest.owner\"\n >\n <div class=\"card-column-50\"></div>\n <div class=\"card-column-30\"></div>\n <span\n class=\"text-label-small\"\n translate\n >\n Created in`tenant`\n </span>\n <div class=\"card-column-20\">\n <span>\n {{ singleRequest.tenantId }}\n </span>\n </div>\n </div>\n </small>\n <ng-template #noManagement>\n <small class=\"d-contents\">\n <span class=\"card-column-50\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n Created on`date`\n </span>\n <span data-cy=\"device-registration--creation-date\">\n {{ singleRequest.creationTime | c8yDate }}\n </span>\n </span>\n <span class=\"card-column-50 text-truncate\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n by`user`\n </span>\n <span\n title=\"{{ singleRequest.owner }}\"\n data-cy=\"device-registration--created-by\"\n >\n {{ singleRequest.owner }}\n </span>\n </span>\n </small>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <c8y-load-more\n [paging]=\"deviceRequestList.paging\"\n [hidden]=\"true\"\n (onLoad)=\"updateList($event)\"\n ></c8y-load-more>\n </ng-container>\n\n <ng-template #noData>\n <div class=\"c8y-empty-state m-t-40 text-center\">\n <h1 class=\"c8y-icon c8y-icon-device-connect c8y-icon-duocolor\"></h1>\n <ng-container *ngIf=\"limitStatus?.isReached; else limitNotReached\">\n <h3>\n {{ limitReachedInfo$ | async }}\n </h3>\n <p translate>Please contact your platform administrator.</p>\n </ng-container>\n <ng-template #limitNotReached>\n <h3 translate>No pending registrations to display.</h3>\n <p\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n translate\n >\n Use the \"Register device\" dropdown in the top right corner.\n </p>\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i6.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.IfAllowedDirective, selector: "[c8yIfAllowed]", inputs: ["c8yIfAllowed", "c8yIfAllowedAllowAny"] }, { kind: "component", type: i2.LoadMoreComponent, selector: "c8y-load-more", inputs: ["paging", "useIntersection", "hidden", "container", "class", "maxIterations", "noMoreDataHint", "loadingTemplate", "hideNoMoreDataHint", "loadNextLabel", "loadingLabel"], outputs: ["onLoad"] }, { kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i2.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i2.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "component", type: i2.ListDisplaySwitchComponent, selector: "c8y-list-display-switch", inputs: ["listKey", "listLength", "filterPipe"], outputs: ["onListClassChange"] }, { kind: "component", type: i9.RegisterDeviceDropdownComponent, selector: "c8y-register-device-dropdown" }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.DatePipe, name: "c8yDate" }] }); }
128
158
  }
129
159
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DeviceRegistrationViewComponent, decorators: [{
130
160
  type: Component,
131
161
  args: [{ selector: 'c8y-device-registration-view', template: "<ng-container *ngIf=\"deviceRequests$ | async as deviceRequestList\">\n <c8y-title>\n {{ 'Device registration' | translate }}\n <small *ngIf=\"deviceRequestList.data.length === 1\">1 {{ 'new device' | translate }}</small>\n <small *ngIf=\"deviceRequestList.data.length > 1\">\n {{ deviceRequestList.data.length }} {{ 'new devices' | translate }}\n </small>\n </c8y-title>\n\n <c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'exchange'\"\n [label]=\"'Devices' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-connect'\"\n [label]=\"'Device registration' | translate\"\n ></c8y-breadcrumb-item>\n </c8y-breadcrumb>\n\n <c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form hidden-xs\"\n >\n <c8y-list-display-switch (onListClassChange)=\"displayMode($event)\"></c8y-list-display-switch>\n </c8y-action-bar-item>\n\n <ng-container *ngIf=\"limit$ | async as limitStatus\">\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Accept all' | translate }}\"\n type=\"button\"\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n (click)=\"acceptAll()\"\n [disabled]=\"canAcceptAll() || limitStatus?.isReached\"\n >\n <i [c8yIcon]=\"'check'\"></i>\n {{ 'Accept all' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"9\"\n >\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadAll()\"\n [disabled]=\"isLoading\"\n >\n <i\n [c8yIcon]=\"'refresh'\"\n [ngClass]=\"{ 'icon-spin': isLoading }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n [placement]=\"'right'\"\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n >\n <c8y-register-device-dropdown></c8y-register-device-dropdown>\n </c8y-action-bar-item>\n\n <c8y-help\n src=\"/docs/device-management-application/registering-devices/#registering-devices\"\n ></c8y-help>\n\n <ng-container *ngIf=\"deviceRequestList.data.length > 0; else noData\">\n <div\n class=\"card-group\"\n [ngClass]=\"gridOrList\"\n >\n <!-- START interact-list sticky header START -->\n <div\n class=\"page-sticky-header hidden-xs\"\n *ngIf=\"gridOrList === 'interact-list'\"\n >\n <div class=\"d-flex\">\n <div class=\"card-header p-l-40\">\n <p translate>Device</p>\n </div>\n <div class=\"card-block card-column-30 p-l-0 m-l-8\">\n <p translate>Status</p>\n </div>\n <div\n class=\"card-block card-column-30 p-0\"\n *ngIf=\"showTokenInputBasedOnSecurityMode()\"\n >\n <p translate>Security token</p>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Security token is required if the connected device uses it.' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n <div class=\"card-footer card-column-50\">\n <div\n class=\"d-contents\"\n *ngIf=\"isManagementTenant; else noManagement\"\n >\n <div class=\"card-column-50\">\n {{ 'Created' | translate }}\n </div>\n <div class=\"card-column-30\">\n {{ 'By`user`' | translate }}\n </div>\n <div class=\"card-column-20\">\n {{ 'Tenant ID' | translate }}\n </div>\n </div>\n <ng-template #noManagement>\n <div class=\"d-contents\">\n <div class=\"card-column-50\">\n {{ 'Created' | translate }}\n </div>\n <div class=\"card-column-50\">\n {{ 'By`user`' | translate }}\n </div>\n </div>\n </ng-template>\n </div>\n <div\n class=\"card-actions-group\"\n style=\"min-width: 176px\"\n >\n <div class=\"btn btn-xs invisible\">\n <!--EMPTY by design-->\n </div>\n </div>\n </div>\n </div>\n <!-- END interact-list sticky header END -->\n\n <div\n class=\"col-xs-12 col-sm-6 col-md-4 col-lg-3\"\n *ngIf=\"limitStatus?.isReached\"\n >\n <p\n class=\"alert alert-warning center-block\"\n role=\"alert\"\n >\n <strong>\n {{ limitReachedInfo$ | async }}\n </strong>\n <br />\n <span translate>Please contact your platform administrator.</span>\n </p>\n </div>\n\n <ng-container *ngFor=\"let singleRequest of deviceRequestList.data\">\n <div class=\"col-xs-12 col-sm-6 col-md-4 col-lg-3\">\n <div class=\"card\">\n <div class=\"card-header separator\">\n <div class=\"card-icon\">\n <i\n [class]=\"statusProps[singleRequest.status].cls\"\n [c8yIcon]=\"statusProps[singleRequest.status].icon\"\n ></i>\n </div>\n <p\n class=\"card-title text-truncate\"\n title=\"{{ singleRequest.id }}\"\n >\n {{ singleRequest.id }}\n </p>\n </div>\n\n <div class=\"card-block text-center card-column-30\">\n <span\n class=\"text-label-small\"\n translate\n >\n Status\n </span>\n <p>\n <i\n class=\"icon-spin text-primary\"\n c8yIcon=\"refresh\"\n *ngIf=\"singleRequest.status === status.WAITING_FOR_CONNECTION\"\n ></i>\n {{ statusProps[singleRequest.status].label | translate }}\n </p>\n </div>\n\n <ng-container *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\">\n <div\n class=\"card-block text-center card-column-30 p-t-0\"\n [ngClass]=\"{ 'p-b-0': !shouldShowSecurityTokenInput(singleRequest) }\"\n *ngIf=\"showTokenInputBasedOnSecurityMode()\"\n >\n <ng-container *ngIf=\"shouldShowSecurityTokenInput(singleRequest)\">\n <span\n class=\"text-label-small\"\n *ngIf=\"gridOrList !== 'interact-list'\"\n translate\n >\n Security token\n </span>\n <input\n class=\"form-control\"\n type=\"text\"\n [(ngModel)]=\"singleRequest.securityToken\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'A1e3gh5ds' }\"\n [required]=\"requireSecurityToken\"\n />\n </ng-container>\n </div>\n\n <div\n class=\"card-actions-group d-flex a-i-center j-c-center\"\n style=\"min-width: 176px\"\n >\n <button\n class=\"btn btn-sm\"\n title=\"{{\n singleRequest.status === status.PENDING_ACCEPTANCE\n ? ('Remove' | translate)\n : ('Cancel' | translate)\n }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn-danger': singleRequest.status === status.PENDING_ACCEPTANCE,\n 'btn-default': singleRequest.status !== status.PENDING_ACCEPTANCE\n }\"\n (click)=\"delete(singleRequest.id)\"\n [disabled]=\"isLoading\"\n >\n <span *ngIf=\"singleRequest.status === status.PENDING_ACCEPTANCE\">\n {{ 'Remove' | translate }}\n </span>\n <span *ngIf=\"singleRequest.status !== status.PENDING_ACCEPTANCE\">\n {{ 'Cancel' | translate }}\n </span>\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Accept' | translate }}\"\n type=\"button\"\n (click)=\"accept(singleRequest)\"\n *ngIf=\"singleRequest.status === status.PENDING_ACCEPTANCE\"\n [disabled]=\"\n isLoading ||\n limitStatus?.isReached ||\n (!singleRequest.securityToken && requireSecurityToken)\n \"\n >\n {{ 'Accept' | translate }}\n </button>\n </div>\n </ng-container>\n\n <div class=\"card-footer separator text-center card-column-50\">\n <small\n class=\"d-contents\"\n *ngIf=\"isManagementTenant; else noManagement\"\n >\n <div\n class=\"d-contents\"\n *ngIf=\"singleRequest.creationTime && singleRequest.owner\"\n >\n <span class=\"card-column-50\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n Created on`date`\n </span>\n <span data-cy=\"device-registration--creation-date\">\n {{ singleRequest.creationTime | c8yDate }}\n </span>\n </span>\n <span class=\"card-column-30 text-truncate\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n by`user`\n </span>\n <span\n title=\"{{ singleRequest.owner }}\"\n data-cy=\"device-registration--created-by\"\n >\n {{ singleRequest.owner }}\n </span>\n </span>\n <span class=\"card-column-20\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n in`tenant`\n </span>\n <span>{{ singleRequest.tenantId }}</span>\n </span>\n </div>\n <div\n class=\"d-contents\"\n *ngIf=\"!singleRequest.creationTime || !singleRequest.owner\"\n >\n <div class=\"card-column-50\"></div>\n <div class=\"card-column-30\"></div>\n <span\n class=\"text-label-small\"\n translate\n >\n Created in`tenant`\n </span>\n <div class=\"card-column-20\">\n <span>\n {{ singleRequest.tenantId }}\n </span>\n </div>\n </div>\n </small>\n <ng-template #noManagement>\n <small class=\"d-contents\">\n <span class=\"card-column-50\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n Created on`date`\n </span>\n <span data-cy=\"device-registration--creation-date\">\n {{ singleRequest.creationTime | c8yDate }}\n </span>\n </span>\n <span class=\"card-column-50 text-truncate\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n by`user`\n </span>\n <span\n title=\"{{ singleRequest.owner }}\"\n data-cy=\"device-registration--created-by\"\n >\n {{ singleRequest.owner }}\n </span>\n </span>\n </small>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <c8y-load-more\n [paging]=\"deviceRequestList.paging\"\n [hidden]=\"true\"\n (onLoad)=\"updateList($event)\"\n ></c8y-load-more>\n </ng-container>\n\n <ng-template #noData>\n <div class=\"c8y-empty-state m-t-40 text-center\">\n <h1 class=\"c8y-icon c8y-icon-device-connect c8y-icon-duocolor\"></h1>\n <ng-container *ngIf=\"limitStatus?.isReached; else limitNotReached\">\n <h3>\n {{ limitReachedInfo$ | async }}\n </h3>\n <p translate>Please contact your platform administrator.</p>\n </ng-container>\n <ng-template #limitNotReached>\n <h3 translate>No pending registrations to display.</h3>\n <p\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n translate\n >\n Use the \"Register device\" dropdown in the top right corner.\n </p>\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-container>\n" }]
132
- }], ctorParameters: () => [{ type: i1.RegisterDeviceService }, { type: i2.DeviceBootstrapRealtimeService }, { type: i2.TenantUiService }, { type: i2.ModalService }, { type: i3.TranslateService }, { type: i2.OptionsService }] });
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLXJlZ2lzdHJhdGlvbi12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3JlZ2lzdGVyLWRldmljZS9kZXZpY2UtcmVnaXN0cmF0aW9uLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vcmVnaXN0ZXItZGV2aWNlL2RldmljZS1yZWdpc3RyYXRpb24tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLHdCQUF3QixFQUl6QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUNMLDhCQUE4QixFQUU5QixlQUFlLEVBQ2YsWUFBWSxFQUNaLE1BQU0sRUFDTixPQUFPLEVBQ1AsY0FBYyxFQUNmLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7O0FBTXZELE1BQU0sT0FBTywrQkFBK0I7SUF3QzFDLFlBQ1UscUJBQTRDLEVBQzVDLHdCQUF3RCxFQUN4RCxlQUFnQyxFQUNoQyxZQUEwQixFQUMxQixnQkFBa0MsRUFDbEMsY0FBOEI7UUFMOUIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1Qyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQWdDO1FBQ3hELG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNo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QztRQUMvQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyw4QkFBOEIsQ0FBQyxPQUFPLENBQUM7SUFDekYsQ0FBQzsrR0FyS1UsK0JBQStCO21HQUEvQiwrQkFBK0Isb0VDM0I1Qyx3MGNBdVlBOzs0RkQ1V2EsK0JBQStCO2tCQUozQyxTQUFTOytCQUNFLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIERldmljZVJlZ2lzdHJhdGlvblNlY3VyaXR5TW9kZSxcbiAgRGV2aWNlUmVnaXN0cmF0aW9uU3RhdHVzLFxuICBJRGV2aWNlUmVnaXN0cmF0aW9uLFxuICBJRGV2aWNlUmVnaXN0cmF0aW9uTGltaXQsXG4gIFBhZ2luZ1xufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIERldmljZUJvb3RzdHJhcFJlYWx0aW1lU2VydmljZSxcbiAgSVJlYWx0aW1lRGV2aWNlQm9vdHN0cmFwLFxuICBUZW5hbnRVaVNlcnZpY2UsXG4gIE1vZGFsU2VydmljZSxcbiAgU3RhdHVzLFxuICBnZXR0ZXh0LFxuICBPcHRpb25zU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFJlZ2lzdGVyRGV2aWNlU2VydmljZSB9IGZyb20gJy4vcmVnaXN0ZXItZGV2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgc29ydEJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRldmljZS1yZWdpc3RyYXRpb24tdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnZGV2aWNlLXJlZ2lzdHJhdGlvbi12aWV3LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEZXZpY2VSZWdpc3RyYXRpb25WaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBkZXZpY2VSZXF1ZXN0cyQ6IE9ic2VydmFibGU8e1xuICAgIGRhdGE6IElEZXZpY2VSZWdpc3RyYXRpb25bXTtcbiAgICBwYWdpbmc/OiBQYWdpbmc8SURldmljZVJlZ2lzdHJhdGlvbj47XG4gIH0+O1xuICBsaW1pdCQ6IE9ic2VydmFibGU8SURldmljZVJlZ2lzdHJhdGlvbkxpbWl0PjtcbiAgbGltaXRSZWFjaGVkSW5mbyQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcmVxdWlyZVNlY3VyaXR5VG9rZW4gPSBmYWxzZTtcbiAgaXNNYW5hZ2VtZW50VGVuYW50ID0gZmFsc2U7XG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuICBncmlkT3JMaXN0OiAnaW50ZXJhY3QtbGlzdCcgfCAnaW50ZXJhY3QtZ3JpZCcgPSAnaW50ZXJhY3QtZ3JpZCc7XG4gIHN0YXR1cyA9IERldmljZVJlZ2lzdHJhdGlvblN0YXR1cztcblxuICByZWFkb25seSBzdGF0dXNQcm9wcyA9IHtcbiAgICBbRGV2aWNlUmVnaXN0cmF0aW9uU3RhdHVzLldBSVRJTkdfRk9SX0NPTk5FQ1RJT05dOiB7XG4gICAgICBsYWJlbDogZ2V0dGV4dCgnV2FpdGluZyBmb3IgY29ubmVjdGlvbicpLFxuICAgICAgaWNvbjogJ3VubGluaycsXG4gICAgICBjbHM6ICd0ZXh0LWRhbmdlcidcbiAgICB9LFxuICAgIFtEZXZpY2VSZWdpc3RyYXRpb25TdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFXToge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ1BlbmRpbmcgYWNjZXB0YW5jZScpLFxuICAgICAgaWNvbjogJ2NpcmNsZScsXG4gICAgICBjbHM6ICd0ZXh0LWluZm8nXG4gICAgfSxcbiAgICBbRGV2aWNlUmVnaXN0cmF0aW9uU3RhdHVzLkFDQ0VQVEVEXToge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ0FjY2VwdGVkJyksXG4gICAgICBpY29uOiAnY2hlY2stY2lyY2xlJyxcbiAgICAgIGNsczogJ3RleHQtc3VjY2VzcydcbiAgICB9LFxuICAgIFtEZXZpY2VSZWdpc3RyYXRpb25TdGF0dXMuQkxPQ0tFRF06IHtcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdCbG9ja2VkJyksXG4gICAgICBpY29uOiAnYmFuJyxcbiAgICAgIGNsczogJ3RleHQtZGFuZ2VyJ1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHVuc3Vic2NyaWJlJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlY3VyaXR5VG9rZW5Qb2xpY3k6IEJlaGF2aW9yU3ViamVjdDxEZXZpY2VSZWdpc3RyYXRpb25TZWN1cml0eU1vZGU+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0KERldmljZVJlZ2lzdHJhdGlvblNlY3VyaXR5TW9kZS5PUFRJT05BTCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWdpc3RlckRldmljZVNlcnZpY2U6IFJlZ2lzdGVyRGV2aWNlU2VydmljZSxcbiAgICBwcml2YXRlIGJvb3RzdHJhcFJlYWx0aW1lU2VydmljZTogRGV2aWNlQm9vdHN0cmFwUmVhbHRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50VWlTZXJ2aWNlOiBUZW5hbnRVaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcHRpb25zU2VydmljZTogT3B0aW9uc1NlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubG9hZEFsbCgpO1xuICAgIHRoaXMuc2V0SXNNYW5hZ2VtZW50VGVuYW50KCk7XG4gICAgdGhpcy5zZXRSZXF1aXJlU2VjdXJpdHlUb2tlbigpO1xuXG4gICAgdGhpcy5kZXZpY2VSZXF1ZXN0cyQgPSB0aGlzLnJlZ2lzdGVyRGV2aWNlU2VydmljZS5kZXZpY2VSZWdpc3RyYXRpb25SZXF1ZXN0cyQucGlwZShcbiAgICAgIG1hcChyZXEgPT4gKHtcbiAgICAgICAgZGF0YTogc29ydEJ5KHJlcS5kYXRhLCBbXG4gICAgICAgICAgKHsgc3RhdHVzIH0pID0+IChzdGF0dXMgPT09IERldmljZVJlZ2lzdHJhdGlvblN0YXR1cy5QRU5ESU5HX0FDQ0VQVEFOQ0UgPyAwIDogMSksXG4gICAgICAgICAgJy1jcmVhdGlvblRpbWUnXG4gICAgICAgIF0pLFxuICAgICAgICBwYWdpbmc6IHJlcS5wYWdpbmdcbiAgICAgIH0pKVxuICAgICk7XG4gICAgdGhpcy5saW1pdCQgPSB0aGlzLnJlZ2lzdGVyRGV2aWNlU2VydmljZS5saW1pdCQ7XG4gICAgdGhpcy5saW1pdFJlYWNoZWRJbmZvJCA9IHRoaXMubGltaXQkLnBpcGUoXG4gICAgICBmaWx0ZXIoZGV2aWNlUmVnaXN0cmF0aW9uTGltaXQgPT4gZGV2aWNlUmVnaXN0cmF0aW9uTGltaXQuaXNSZWFjaGVkKSxcbiAgICAgIHN3aXRjaE1hcCgoeyBsaW1pdCB9KSA9PlxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICAnWW91IHJlYWNoZWQgdGhlIGxpbWl0IG9mIHt7IG1heERldmljZXMgfX0gZGV2aWNlcy4gTm8gbW9yZSBkZXZpY2VzIGNhbiBiZSByZWdpc3RlcmVkLidcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgbWF4RGV2aWNlczogbGltaXQgfVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnJlZ2lzdGVyRGV2aWNlU2VydmljZS5sb2FkaW5nJFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gKHRoaXMuaXNMb2FkaW5nID0gdmFsdWUpKTtcblxuICAgIHRoaXMuYm9vdHN0cmFwUmVhbHRpbWVTZXJ2aWNlXG4gICAgICAub25VcGRhdGUkKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAuc3Vic2NyaWJlKChib290c3RyYXA6IElSZWFsdGltZURldmljZUJvb3RzdHJhcCkgPT4ge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGV2aWNlU2VydmljZS5vbkRldmljZUJvb3RzdHJhcChib290c3RyYXApO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHVwZGF0ZUxpc3QoZGF0YSkge1xuICAgIHRoaXMucmVnaXN0ZXJEZXZpY2VTZXJ2aWNlLmludGVybmFsTGlzdFVwZGF0ZShkYXRhKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2UuY29uZmlybShcbiAgICAgIGdldHRleHQoJ0NhbmNlbCBkZXZpY2UgcmVnaXN0cmF0aW9uJyksXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAnWW91IGFyZSBhYm91dCB0byBjYW5jZWwgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmb3IgSUQgXCJ7e2lkfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgICksXG4gICAgICAgIHsgaWQgfVxuICAgICAgKSxcbiAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICB7XG4gICAgICAgIG9rOiBnZXR0ZXh0KCdDYW5jZWwgcmVnaXN0cmF0aW9uJyksXG4gICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2xvc2UnKVxuICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyRGV2aWNlU2VydmljZS5yZW1vdmUoaWQpO1xuICAgIH1cbiAgfVxuXG4gIGFjY2VwdChyZXF1ZXN0OiBJRGV2aWNlUmVnaXN0cmF0aW9uKSB7XG4gICAgdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2UuYWNjZXB0KHJlcXVlc3QpO1xuICB9XG5cbiAgYWNjZXB0QWxsKCkge1xuICAgIHRoaXMucmVnaXN0ZXJEZXZpY2VTZXJ2aWNlLmFjY2VwdEFsbCgpO1xuICB9XG5cbiAgY2FuQWNjZXB0QWxsKCkge1xuICAgIGNvbnN0IHBlbmRpbmdSZXF1ZXN0cyA9IHRoaXMucmVnaXN0ZXJEZXZpY2VTZXJ2aWNlLmdldFJlcXVlc3RCeVN0YXR1cyhcbiAgICAgIERldmljZVJlZ2lzdHJhdGlvblN0YXR1cy5QRU5ESU5HX0FDQ0VQVEFOQ0VcbiAgICApO1xuICAgIHJldHVybiAhKHBlbmRpbmdSZXF1ZXN0cy5sZW5ndGggPiAwICYmICF0aGlzLnJlcXVpcmVTZWN1cml0eVRva2VuKTtcbiAgfVxuXG4gIGxvYWRBbGwoKSB7XG4gICAgdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2UubGlzdCgpO1xuICB9XG5cbiAgZGlzcGxheU1vZGUobGlzdENsYXNzOiAnaW50ZXJhY3QtbGlzdCcgfCAnaW50ZXJhY3QtZ3JpZCcpIHtcbiAgICB0aGlzLmdyaWRPckxpc3QgPSBsaXN0Q2xhc3M7XG4gIH1cblxuICBhc3luYyBzZXRSZXF1aXJlU2VjdXJpdHlUb2tlbigpIHtcbiAgICBjb25zdCBtb2RlOiBEZXZpY2VSZWdpc3RyYXRpb25TZWN1cml0eU1vZGUgPVxuICAgICAgKGF3YWl0IHRoaXMub3B0aW9uc1NlcnZpY2UuZ2V0VGVuYW50T3B0aW9uPERldmljZVJlZ2lzdHJhdGlvblNlY3VyaXR5TW9kZT4oXG4gICAgICAgICdkZXZpY2UtcmVnaXN0cmF0aW9uJyxcbiAgICAgICAgJ3NlY3VyaXR5LXRva2VuLnBvbGljeScsXG4gICAgICAgIERldmljZVJlZ2lzdHJhdGlvblNlY3VyaXR5TW9kZS5PUFRJT05BTFxuICAgICAgKSkgYXMgRGV2aWNlUmVnaXN0cmF0aW9uU2VjdXJpdHlNb2RlO1xuICAgIHRoaXMuX3NlY3VyaXR5VG9rZW5Qb2xpY3kubmV4dChtb2RlKTtcbiAgICB0aGlzLnJlcXVpcmVTZWN1cml0eVRva2VuID0gbW9kZSA9PT0gRGV2aWNlUmVnaXN0cmF0aW9uU2VjdXJpdHlNb2RlLlJFUVVJUkVEO1xuICB9XG5cbiAgYXN5bmMgc2V0SXNNYW5hZ2VtZW50VGVuYW50KCkge1xuICAgIHRoaXMuaXNNYW5hZ2VtZW50VGVuYW50ID0gYXdhaXQgdGhpcy50ZW5hbnRVaVNlcnZpY2UuaXNNYW5hZ2VtZW50VGVuYW50KCk7XG4gIH1cblxuICBzaG91bGRTaG93U2VjdXJpdHlUb2tlbklucHV0KGRhdGE6IElEZXZpY2VSZWdpc3RyYXRpb24pIHtcbiAgICByZXR1cm4gKFxuICAgICAgZGF0YSAmJlxuICAgICAgZGF0YS5zdGF0dXMgPT09IERldmljZVJlZ2lzdHJhdGlvblN0YXR1cy5QRU5ESU5HX0FDQ0VQVEFOQ0UgJiZcbiAgICAgIHRoaXMuc2hvd1Rva2VuSW5wdXRCYXNlZE9uU2VjdXJpdHlNb2RlKClcbiAgICApO1xuICB9XG5cbiAgc2hvd1Rva2VuSW5wdXRCYXNlZE9uU2VjdXJpdHlNb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWN1cml0eVRva2VuUG9saWN5LmdldFZhbHVlKCkgIT09IERldmljZVJlZ2lzdHJhdGlvblNlY3VyaXR5TW9kZS5JR05PUkVEO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZGV2aWNlUmVxdWVzdHMkIHwgYXN5bmMgYXMgZGV2aWNlUmVxdWVzdExpc3RcIj5cbiAgPGM4eS10aXRsZT5cbiAgICB7eyAnRGV2aWNlIHJlZ2lzdHJhdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICA8c21hbGwgKm5nSWY9XCJkZXZpY2VSZXF1ZXN0TGlzdC5kYXRhLmxlbmd0aCA9PT0gMVwiPjEge3sgJ25ldyBkZXZpY2UnIHwgdHJhbnNsYXRlIH19PC9zbWFsbD5cbiAgICA8c21hbGwgKm5nSWY9XCJkZXZpY2VSZXF1ZXN0TGlzdC5kYXRhLmxlbmd0aCA+IDFcIj5cbiAgICAgIHt7IGRldmljZVJlcXVlc3RMaXN0LmRhdGEubGVuZ3RoIH19IHt7ICduZXcgZGV2aWNlcycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NtYWxsPlxuICA8L2M4eS10aXRsZT5cblxuICA8Yzh5LWJyZWFkY3J1bWI+XG4gICAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICAgIFtpY29uXT1cIidleGNoYW5nZSdcIlxuICAgICAgW2xhYmVsXT1cIidEZXZpY2VzJyB8IHRyYW5zbGF0ZVwiXG4gICAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgICAgW2ljb25dPVwiJ2M4eS1kZXZpY2UtY29ubmVjdCdcIlxuICAgICAgW2xhYmVsXT1cIidEZXZpY2UgcmVnaXN0cmF0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPC9jOHktYnJlYWRjcnVtYj5cblxuICA8Yzh5LWFjdGlvbi1iYXItaXRlbVxuICAgIFtwbGFjZW1lbnRdPVwiJ2xlZnQnXCJcbiAgICBpdGVtQ2xhc3M9XCJuYXZiYXItZm9ybSBoaWRkZW4teHNcIlxuICA+XG4gICAgPGM4eS1saXN0LWRpc3BsYXktc3dpdGNoIChvbkxpc3RDbGFzc0NoYW5nZSk9XCJkaXNwbGF5TW9kZSgkZXZlbnQpXCI+PC9jOHktbGlzdC1kaXNwbGF5LXN3aXRjaD5cbiAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsaW1pdCQgfCBhc3luYyBhcyBsaW1pdFN0YXR1c1wiPlxuICAgIDxjOHktYWN0aW9uLWJhci1pdGVtXG4gICAgICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICAgICAgW3ByaW9yaXR5XT1cIjEwXCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnQWNjZXB0IGFsbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKmM4eUlmQWxsb3dlZD1cIlsnUk9MRV9ERVZJQ0VfQ09OVFJPTF9BRE1JTiddXCJcbiAgICAgICAgKGNsaWNrKT1cImFjY2VwdEFsbCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImNhbkFjY2VwdEFsbCgpIHx8IGxpbWl0U3RhdHVzPy5pc1JlYWNoZWRcIlxuICAgICAgPlxuICAgICAgICA8aSBbYzh5SWNvbl09XCInY2hlY2snXCI+PC9pPlxuICAgICAgICB7eyAnQWNjZXB0IGFsbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuICAgIDxjOHktYWN0aW9uLWJhci1pdGVtXG4gICAgICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICAgICAgW3ByaW9yaXR5XT1cIjlcIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgICAgICB0aXRsZT1cInt7ICdSZWxvYWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJsb2FkQWxsKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcbiAgICAgID5cbiAgICAgICAgPGlcbiAgICAgICAgICBbYzh5SWNvbl09XCIncmVmcmVzaCdcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2ljb24tc3Bpbic6IGlzTG9hZGluZyB9XCJcbiAgICAgICAgPjwvaT5cbiAgICAgICAge3sgJ1JlbG9hZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuICAgIDxjOHktYWN0aW9uLWJhci1pdGVtXG4gICAgICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICAgICAgKmM4eUlmQWxsb3dlZD1cIlsnUk9MRV9ERVZJQ0VfQ09OVFJPTF9BRE1JTiddXCJcbiAgICA+XG4gICAgICA8Yzh5LXJlZ2lzdGVyLWRldmljZS1kcm9wZG93bj48L2M4eS1yZWdpc3Rlci1kZXZpY2UtZHJvcGRvd24+XG4gICAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG4gICAgPGM4eS1oZWxwXG4gICAgICBzcmM9XCIvZG9jcy9kZXZpY2UtbWFuYWdlbWVudC1hcHBsaWNhdGlvbi9yZWdpc3RlcmluZy1kZXZpY2VzLyNyZWdpc3RlcmluZy1kZXZpY2VzXCJcbiAgICA+PC9jOHktaGVscD5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXZpY2VSZXF1ZXN0TGlzdC5kYXRhLmxlbmd0aCA+IDA7IGVsc2Ugbm9EYXRhXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2FyZC1ncm91cFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImdyaWRPckxpc3RcIlxuICAgICAgPlxuICAgICAgICA8IS0tIFNUQVJUIGludGVyYWN0LWxpc3Qgc3RpY2t5IGhlYWRlciBTVEFSVCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicGFnZS1zdGlja3ktaGVhZGVyIGhpZGRlbi14c1wiXG4gICAgICAgICAgKm5nSWY9XCJncmlkT3JMaXN0ID09PSAnaW50ZXJhY3QtbGlzdCdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHAtbC00MFwiPlxuICAgICAgICAgICAgICA8cCB0cmFuc2xhdGU+RGV2aWNlPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBjYXJkLWNvbHVtbi0zMCBwLWwtMCBtLWwtOFwiPlxuICAgICAgICAgICAgICA8cCB0cmFuc2xhdGU+U3RhdHVzPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2FyZC1ibG9jayBjYXJkLWNvbHVtbi0zMCBwLTBcIlxuICAgICAgICAgICAgICAqbmdJZj1cInNob3dUb2tlbklucHV0QmFzZWRPblNlY3VyaXR5TW9kZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHAgdHJhbnNsYXRlPlNlY3VyaXR5IHRva2VuPC9wPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHBvcG92ZXI9XCJ7e1xuICAgICAgICAgICAgICAgICAgJ1NlY3VyaXR5IHRva2VuIGlzIHJlcXVpcmVkIGlmIHRoZSBjb25uZWN0ZWQgZGV2aWNlIHVzZXMgaXQuJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGNhcmQtY29sdW1uLTUwXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNNYW5hZ2VtZW50VGVuYW50OyBlbHNlIG5vTWFuYWdlbWVudFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb2x1bW4tNTBcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdDcmVhdGVkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbHVtbi0zMFwiPlxuICAgICAgICAgICAgICAgICAge3sgJ0J5YHVzZXJgJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbHVtbi0yMFwiPlxuICAgICAgICAgICAgICAgICAge3sgJ1RlbmFudCBJRCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9NYW5hZ2VtZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWNvbnRlbnRzXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb2x1bW4tNTBcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0NyZWF0ZWQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbHVtbi01MFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnQnlgdXNlcmAnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtYWN0aW9ucy1ncm91cFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAxNzZweFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4gYnRuLXhzIGludmlzaWJsZVwiPlxuICAgICAgICAgICAgICAgIDwhLS1FTVBUWSBieSBkZXNpZ24tLT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gRU5EIGludGVyYWN0LWxpc3Qgc3RpY2t5IGhlYWRlciBFTkQgLS0+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC00IGNvbC1sZy0zXCJcbiAgICAgICAgICAqbmdJZj1cImxpbWl0U3RhdHVzPy5pc1JlYWNoZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBjZW50ZXItYmxvY2tcIlxuICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Ryb25nPlxuICAgICAgICAgICAgICB7eyBsaW1pdFJlYWNoZWRJbmZvJCB8IGFzeW5jIH19XG4gICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlBsZWFzZSBjb250YWN0IHlvdXIgcGxhdGZvcm0gYWRtaW5pc3RyYXRvci48L3NwYW4+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzaW5nbGVSZXF1ZXN0IG9mIGRldmljZVJlcXVlc3RMaXN0LmRhdGFcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC00IGNvbC1sZy0zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgc2VwYXJhdG9yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaWNvblwiPlxuICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInN0YXR1c1Byb3BzW3NpbmdsZVJlcXVlc3Quc3RhdHVzXS5jbHNcIlxuICAgICAgICAgICAgICAgICAgICBbYzh5SWNvbl09XCJzdGF0dXNQcm9wc1tzaW5nbGVSZXF1ZXN0LnN0YXR1c10uaWNvblwiXG4gICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtdGl0bGUgdGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cInt7IHNpbmdsZVJlcXVlc3QuaWQgfX1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IHNpbmdsZVJlcXVlc3QuaWQgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHRleHQtY2VudGVyIGNhcmQtY29sdW1uLTMwXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbFwiXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBTdGF0dXNcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tc3BpbiB0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICBjOHlJY29uPVwicmVmcmVzaFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2luZ2xlUmVxdWVzdC5zdGF0dXMgPT09IHN0YXR1cy5XQUlUSU5HX0ZPUl9DT05ORUNUSU9OXCJcbiAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICB7eyBzdGF0dXNQcm9wc1tzaW5nbGVSZXF1ZXN0LnN0YXR1c10ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmM4eUlmQWxsb3dlZD1cIlsnUk9MRV9ERVZJQ0VfQ09OVFJPTF9BRE1JTiddXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWJsb2NrIHRleHQtY2VudGVyIGNhcmQtY29sdW1uLTMwIHAtdC0wXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3AtYi0wJzogIXNob3VsZFNob3dTZWN1cml0eVRva2VuSW5wdXQoc2luZ2xlUmVxdWVzdCkgfVwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dUb2tlbklucHV0QmFzZWRPblNlY3VyaXR5TW9kZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvdWxkU2hvd1NlY3VyaXR5VG9rZW5JbnB1dChzaW5nbGVSZXF1ZXN0KVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJncmlkT3JMaXN0ICE9PSAnaW50ZXJhY3QtbGlzdCdcIlxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgU2VjdXJpdHkgdG9rZW5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2luZ2xlUmVxdWVzdC5zZWN1cml0eVRva2VuXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGU6IHsgZXhhbXBsZTogJ0ExZTNnaDVkcycgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVTZWN1cml0eVRva2VuXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWFjdGlvbnMtZ3JvdXAgZC1mbGV4IGEtaS1jZW50ZXIgai1jLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMTc2cHhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7e1xuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVJlcXVlc3Quc3RhdHVzID09PSBzdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICgnUmVtb3ZlJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogKCdDYW5jZWwnIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgJ2J0bi1kYW5nZXInOiBzaW5nbGVSZXF1ZXN0LnN0YXR1cyA9PT0gc3RhdHVzLlBFTkRJTkdfQUNDRVBUQU5DRSxcbiAgICAgICAgICAgICAgICAgICAgICAnYnRuLWRlZmF1bHQnOiBzaW5nbGVSZXF1ZXN0LnN0YXR1cyAhPT0gc3RhdHVzLlBFTkRJTkdfQUNDRVBUQU5DRVxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZShzaW5nbGVSZXF1ZXN0LmlkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNpbmdsZVJlcXVlc3Quc3RhdHVzID09PSBzdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ1JlbW92ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNpbmdsZVJlcXVlc3Quc3RhdHVzICE9PSBzdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FjY2VwdCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjY2VwdChzaW5nbGVSZXF1ZXN0KVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2luZ2xlUmVxdWVzdC5zdGF0dXMgPT09IHN0YXR1cy5QRU5ESU5HX0FDQ0VQVEFOQ0VcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgbGltaXRTdGF0dXM/LmlzUmVhY2hlZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICghc2luZ2xlUmVxdWVzdC5zZWN1cml0eVRva2VuICYmIHJlcXVpcmVTZWN1cml0eVRva2VuKVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyAnQWNjZXB0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBzZXBhcmF0b3IgdGV4dC1jZW50ZXIgY2FyZC1jb2x1bW4tNTBcIj5cbiAgICAgICAgICAgICAgICA8c21hbGxcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTWFuYWdlbWVudFRlbmFudDsgZWxzZSBub01hbmFnZW1lbnRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWNvbnRlbnRzXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaW5nbGVSZXF1ZXN0LmNyZWF0aW9uVGltZSAmJiBzaW5nbGVSZXF1ZXN0Lm93bmVyXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWNvbHVtbi01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1sLTQgbS1yLTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlZCBvbmBkYXRlYFxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWN5PVwiZGV2aWNlLXJlZ2lzdHJhdGlvbi0tY3JlYXRpb24tZGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2luZ2xlUmVxdWVzdC5jcmVhdGlvblRpbWUgfCBjOHlEYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1jb2x1bW4tMzAgdGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1sLTQgbS1yLTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgYnlgdXNlcmBcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgc2luZ2xlUmVxdWVzdC5vd25lciB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWN5PVwiZGV2aWNlLXJlZ2lzdHJhdGlvbi0tY3JlYXRlZC1ieVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2luZ2xlUmVxdWVzdC5vd25lciB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtY29sdW1uLTIwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWwtNCBtLXItNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmB0ZW5hbnRgXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHNpbmdsZVJlcXVlc3QudGVuYW50SWQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFzaW5nbGVSZXF1ZXN0LmNyZWF0aW9uVGltZSB8fCAhc2luZ2xlUmVxdWVzdC5vd25lclwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbHVtbi01MFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb2x1bW4tMzBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbGFiZWwtc21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlZCBpbmB0ZW5hbnRgXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29sdW1uLTIwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzaW5nbGVSZXF1ZXN0LnRlbmFudElkIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub01hbmFnZW1lbnQ+XG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJkLWNvbnRlbnRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1jb2x1bW4tNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tbC00IG0tci00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZWQgb25gZGF0ZWBcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1jeT1cImRldmljZS1yZWdpc3RyYXRpb24tLWNyZWF0aW9uLWRhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNpbmdsZVJlcXVlc3QuY3JlYXRpb25UaW1lIHwgYzh5RGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtY29sdW1uLTUwIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tbC00IG0tci00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5YHVzZXJgXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7IHNpbmdsZVJlcXVlc3Qub3duZXIgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1jeT1cImRldmljZS1yZWdpc3RyYXRpb24tLWNyZWF0ZWQtYnlcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNpbmdsZVJlcXVlc3Qub3duZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxjOHktbG9hZC1tb3JlXG4gICAgICAgIFtwYWdpbmddPVwiZGV2aWNlUmVxdWVzdExpc3QucGFnaW5nXCJcbiAgICAgICAgW2hpZGRlbl09XCJ0cnVlXCJcbiAgICAgICAgKG9uTG9hZCk9XCJ1cGRhdGVMaXN0KCRldmVudClcIlxuICAgICAgPjwvYzh5LWxvYWQtbW9yZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhPlxuICAgICAgPGRpdiBjbGFzcz1cImM4eS1lbXB0eS1zdGF0ZSBtLXQtNDAgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGgxIGNsYXNzPVwiYzh5LWljb24gYzh5LWljb24tZGV2aWNlLWNvbm5lY3QgYzh5LWljb24tZHVvY29sb3JcIj48L2gxPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGltaXRTdGF0dXM/LmlzUmVhY2hlZDsgZWxzZSBsaW1pdE5vdFJlYWNoZWRcIj5cbiAgICAgICAgICA8aDM+XG4gICAgICAgICAgICB7eyBsaW1pdFJlYWNoZWRJbmZvJCB8IGFzeW5jIH19XG4gICAgICAgICAgPC9oMz5cbiAgICAgICAgICA8cCB0cmFuc2xhdGU+UGxlYXNlIGNvbnRhY3QgeW91ciBwbGF0Zm9ybSBhZG1pbmlzdHJhdG9yLjwvcD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbGltaXROb3RSZWFjaGVkPlxuICAgICAgICAgIDxoMyB0cmFuc2xhdGU+Tm8gcGVuZGluZyByZWdpc3RyYXRpb25zIHRvIGRpc3BsYXkuPC9oMz5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgKmM4eUlmQWxsb3dlZD1cIlsnUk9MRV9ERVZJQ0VfQ09OVFJPTF9BRE1JTiddXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIFVzZSB0aGUgXCJSZWdpc3RlciBkZXZpY2VcIiBkcm9wZG93biBpbiB0aGUgdG9wIHJpZ2h0IGNvcm5lci5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
162
+ }], ctorParameters: () => [{ type: i1.RegisterDeviceService }, { type: i2.DeviceBootstrapRealtimeService }, { type: i2.TenantUiService }, { type: i2.ModalService }, { type: i3.TranslateService }, { type: i2.OptionsService }, { type: i4.ActivatedRoute }, { type: i5.GeneralDeviceRegistrationService }] });
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLXJlZ2lzdHJhdGlvbi12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3JlZ2lzdGVyLWRldmljZS9kZXZpY2UtcmVnaXN0cmF0aW9uLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vcmVnaXN0ZXItZGV2aWNlL2RldmljZS1yZWdpc3RyYXRpb24tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLHdCQUF3QixFQUl6QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUNMLDhCQUE4QixFQUU5QixlQUFlLEVBQ2YsWUFBWSxFQUNaLE1BQU0sRUFDTixPQUFPLEVBQ1AsY0FBYyxFQUNmLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sK0NBQStDLENBQUM7Ozs7Ozs7Ozs7O0FBTWpHLE1BQU0sT0FBTywrQkFBK0I7SUF3QzFDLFlBQ1UscUJBQTRDLEVBQzVDLHdCQUF3RCxFQUN4RCxlQUFnQyxFQUNoQyxZQUEwQixFQUMxQixnQkFBa0MsRUFDbEMsY0FBOEIsRUFDOUIs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cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIERldmljZVJlZ2lzdHJhdGlvblNlY3VyaXR5TW9kZSxcbiAgRGV2aWNlUmVnaXN0cmF0aW9uU3RhdHVzLFxuICBJRGV2aWNlUmVnaXN0cmF0aW9uLFxuICBJRGV2aWNlUmVnaXN0cmF0aW9uTGltaXQsXG4gIFBhZ2luZ1xufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIERldmljZUJvb3RzdHJhcFJlYWx0aW1lU2VydmljZSxcbiAgSVJlYWx0aW1lRGV2aWNlQm9vdHN0cmFwLFxuICBUZW5hbnRVaVNlcnZpY2UsXG4gIE1vZGFsU2VydmljZSxcbiAgU3RhdHVzLFxuICBnZXR0ZXh0LFxuICBPcHRpb25zU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFJlZ2lzdGVyRGV2aWNlU2VydmljZSB9IGZyb20gJy4vcmVnaXN0ZXItZGV2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgc29ydEJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEdlbmVyYWxEZXZpY2VSZWdpc3RyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9nZW5lcmFsL2dlbmVyYWwtZGV2aWNlLXJlZ2lzdHJhdGlvbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRldmljZS1yZWdpc3RyYXRpb24tdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnZGV2aWNlLXJlZ2lzdHJhdGlvbi12aWV3LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEZXZpY2VSZWdpc3RyYXRpb25WaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBkZXZpY2VSZXF1ZXN0cyQ6IE9ic2VydmFibGU8e1xuICAgIGRhdGE6IElEZXZpY2VSZWdpc3RyYXRpb25bXTtcbiAgICBwYWdpbmc/OiBQYWdpbmc8SURldmljZVJlZ2lzdHJhdGlvbj47XG4gIH0+O1xuICBsaW1pdCQ6IE9ic2VydmFibGU8SURldmljZVJlZ2lzdHJhdGlvbkxpbWl0PjtcbiAgbGltaXRSZWFjaGVkSW5mbyQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcmVxdWlyZVNlY3VyaXR5VG9rZW4gPSBmYWxzZTtcbiAgaXNNYW5hZ2VtZW50VGVuYW50ID0gZmFsc2U7XG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuICBncmlkT3JMaXN0OiAnaW50ZXJhY3QtbGlzdCcgfCAnaW50ZXJhY3QtZ3JpZCcgPSAnaW50ZXJhY3QtZ3JpZCc7XG4gIHN0YXR1cyA9IERldmljZVJlZ2lzdHJhdGlvblN0YXR1cztcblxuICByZWFkb25seSBzdGF0dXNQcm9wcyA9IHtcbiAgICBbRGV2aWNlUmVnaXN0cmF0aW9uU3RhdHVzLldBSVRJTkdfRk9SX0NPTk5FQ1RJT05dOiB7XG4gICAgICBsYWJlbDogZ2V0dGV4dCgnV2FpdGluZyBmb3IgY29ubmVjdGlvbicpLFxuICAgICAgaWNvbjogJ3VubGluaycsXG4gICAgICBjbHM6ICd0ZXh0LWRhbmdlcidcbiAgICB9LFxuICAgIFtEZXZpY2VSZWdpc3RyYXRpb25TdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFXToge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ1BlbmRpbmcgYWNjZXB0YW5jZScpLFxuICAgICAgaWNvbjogJ2NpcmNsZScsXG4gICAgICBjbHM6ICd0ZXh0LWluZm8nXG4gICAgfSxcbiAgICBbRGV2aWNlUmVnaXN0cmF0aW9uU3RhdHVzLkFDQ0VQVEVEXToge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ0FjY2VwdGVkJyksXG4gICAgICBpY29uOiAnY2hlY2stY2lyY2xlJyxcbiAgICAgIGNsczogJ3RleHQtc3VjY2VzcydcbiAgICB9LFxuICAgIFtEZXZpY2VSZWdpc3RyYXRpb25TdGF0dXMuQkxPQ0tFRF06IHtcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdCbG9ja2VkJyksXG4gICAgICBpY29uOiAnYmFuJyxcbiAgICAgIGNsczogJ3RleHQtZGFuZ2VyJ1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHVuc3Vic2NyaWJlJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlY3VyaXR5VG9rZW5Qb2xpY3k6IEJlaGF2aW9yU3ViamVjdDxEZXZpY2VSZWdpc3RyYXRpb25TZWN1cml0eU1vZGU+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0KERldmljZVJlZ2lzdHJhdGlvblNlY3VyaXR5TW9kZS5PUFRJT05BTCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWdpc3RlckRldmljZVNlcnZpY2U6IFJlZ2lzdGVyRGV2aWNlU2VydmljZSxcbiAgICBwcml2YXRlIGJvb3RzdHJhcFJlYWx0aW1lU2VydmljZTogRGV2aWNlQm9vdHN0cmFwUmVhbHRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50VWlTZXJ2aWNlOiBUZW5hbnRVaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcHRpb25zU2VydmljZTogT3B0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBnZW5lcmFsUmVnaXN0cmF0aW9uOiBHZW5lcmFsRGV2aWNlUmVnaXN0cmF0aW9uU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2FkQWxsKCk7XG4gICAgdGhpcy5zZXRJc01hbmFnZW1lbnRUZW5hbnQoKTtcbiAgICB0aGlzLnNldFJlcXVpcmVTZWN1cml0eVRva2VuKCk7XG5cbiAgICB0aGlzLmRldmljZVJlcXVlc3RzJCA9IHRoaXMucmVnaXN0ZXJEZXZpY2VTZXJ2aWNlLmRldmljZVJlZ2lzdHJhdGlvblJlcXVlc3RzJC5waXBlKFxuICAgICAgbWFwKHJlcSA9PiAoe1xuICAgICAgICBkYXRhOiBzb3J0QnkocmVxLmRhdGEsIFtcbiAgICAgICAgICAoeyBzdGF0dXMgfSkgPT4gKHN0YXR1cyA9PT0gRGV2aWNlUmVnaXN0cmF0aW9uU3RhdHVzLlBFTkRJTkdfQUNDRVBUQU5DRSA/IDAgOiAxKSxcbiAgICAgICAgICAnLWNyZWF0aW9uVGltZSdcbiAgICAgICAgXSksXG4gICAgICAgIHBhZ2luZzogcmVxLnBhZ2luZ1xuICAgICAgfSkpXG4gICAgKTtcbiAgICB0aGlzLmxpbWl0JCA9IHRoaXMucmVnaXN0ZXJEZXZpY2VTZXJ2aWNlLmxpbWl0JDtcbiAgICB0aGlzLmxpbWl0UmVhY2hlZEluZm8kID0gdGhpcy5saW1pdCQucGlwZShcbiAgICAgIGZpbHRlcihkZXZpY2VSZWdpc3RyYXRpb25MaW1pdCA9PiBkZXZpY2VSZWdpc3RyYXRpb25MaW1pdC5pc1JlYWNoZWQpLFxuICAgICAgc3dpdGNoTWFwKCh7IGxpbWl0IH0pID0+XG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oXG4gICAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAgICdZb3UgcmVhY2hlZCB0aGUgbGltaXQgb2Yge3sgbWF4RGV2aWNlcyB9fSBkZXZpY2VzLiBObyBtb3JlIGRldmljZXMgY2FuIGJlIHJlZ2lzdGVyZWQuJ1xuICAgICAgICAgICksXG4gICAgICAgICAgeyBtYXhEZXZpY2VzOiBsaW1pdCB9XG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMucmVnaXN0ZXJEZXZpY2VTZXJ2aWNlLmxvYWRpbmckXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiAodGhpcy5pc0xvYWRpbmcgPSB2YWx1ZSkpO1xuXG4gICAgdGhpcy5ib290c3RyYXBSZWFsdGltZVNlcnZpY2VcbiAgICAgIC5vblVwZGF0ZSQoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcbiAgICAgIC5zdWJzY3JpYmUoKGJvb3RzdHJhcDogSVJlYWx0aW1lRGV2aWNlQm9vdHN0cmFwKSA9PiB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXZpY2VTZXJ2aWNlLm9uRGV2aWNlQm9vdHN0cmFwKGJvb3RzdHJhcCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuaGFuZGxlUXVlcnlQYXJhbXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgdXBkYXRlTGlzdChkYXRhKSB7XG4gICAgdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2UuaW50ZXJuYWxMaXN0VXBkYXRlKGRhdGEpO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlUXVlcnlQYXJhbXMoKSB7XG4gICAgY29uc3QgeyBleHRlcm5hbElkLCAnb25lLXRpbWUtcGFzc3dvcmQnOiBvbmVUaW1lUGFzc3dvcmQgfSA9XG4gICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuXG4gICAgaWYgKCFleHRlcm5hbElkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmdlbmVyYWxSZWdpc3RyYXRpb24ub3Blbih7XG4gICAgICAgIHVzZUVTVCQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oISFvbmVUaW1lUGFzc3dvcmQpLFxuICAgICAgICBtb2RlbDoge1xuICAgICAgICAgIGRldmljZXNUb0NyZWF0ZTogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogZXh0ZXJuYWxJZCxcbiAgICAgICAgICAgICAgb25lVGltZVBhc3N3b3JkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9hZEFsbCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG1vZGFsIGNsb3NlZFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2UuY29uZmlybShcbiAgICAgIGdldHRleHQoJ0NhbmNlbCBkZXZpY2UgcmVnaXN0cmF0aW9uJyksXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAnWW91IGFyZSBhYm91dCB0byBjYW5jZWwgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmb3IgSUQgXCJ7e2lkfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgICksXG4gICAgICAgIHsgaWQgfVxuICAgICAgKSxcbiAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICB7XG4gICAgICAgIG9rOiBnZXR0ZXh0KCdDYW5jZWwgcmVnaXN0cmF0aW9uJyksXG4gICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2xvc2UnKVxuICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyRGV2aWNlU2VydmljZS5yZW1vdmUoaWQpO1xuICAgIH1cbiAgfVxuXG4gIGFjY2VwdChyZXF1ZXN0OiBJRGV2aWNlUmVnaXN0cmF0aW9uKSB7XG4gICAgdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2UuYWNjZXB0KHJlcXVlc3QpO1xuICB9XG5cbiAgYWNjZXB0QWxsKCkge1xuICAgIHRoaXMucmVnaXN0ZXJEZXZpY2VTZXJ2aWNlLmFjY2VwdEFsbCgpO1xuICB9XG5cbiAgY2FuQWNjZXB0QWxsKCkge1xuICAgIGNvbnN0IHBlbmRpbmdSZXF1ZXN0cyA9IHRoaXMucmVnaXN0ZXJEZXZpY2VTZXJ2aWNlLmdldFJlcXVlc3RCeVN0YXR1cyhcbiAgICAgIERldmljZVJlZ2lzdHJhdGlvblN0YXR1cy5QRU5ESU5HX0FDQ0VQVEFOQ0VcbiAgICApO1xuICAgIHJldHVybiAhKHBlbmRpbmdSZXF1ZXN0cy5sZW5ndGggPiAwICYmICF0aGlzLnJlcXVpcmVTZWN1cml0eVRva2VuKTtcbiAgfVxuXG4gIGxvYWRBbGwoKSB7XG4gICAgdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2UubGlzdCgpO1xuICB9XG5cbiAgZGlzcGxheU1vZGUobGlzdENsYXNzOiAnaW50ZXJhY3QtbGlzdCcgfCAnaW50ZXJhY3QtZ3JpZCcpIHtcbiAgICB0aGlzLmdyaWRPckxpc3QgPSBsaXN0Q2xhc3M7XG4gIH1cblxuICBhc3luYyBzZXRSZXF1aXJlU2VjdXJpdHlUb2tlbigpIHtcbiAgICBjb25zdCBtb2RlOiBEZXZpY2VSZWdpc3RyYXRpb25TZWN1cml0eU1vZGUgPVxuICAgICAgKGF3YWl0IHRoaXMub3B0aW9uc1NlcnZpY2UuZ2V0VGVuYW50T3B0aW9uPERldmljZVJlZ2lzdHJhdGlvblNlY3VyaXR5TW9kZT4oXG4gICAgICAgICdkZXZpY2UtcmVnaXN0cmF0aW9uJyxcbiAgICAgICAgJ3NlY3VyaXR5LXRva2VuLnBvbGljeScsXG4gICAgICAgIERldmljZVJlZ2lzdHJhdGlvblNlY3VyaXR5TW9kZS5PUFRJT05BTFxuICAgICAgKSkgYXMgRGV2aWNlUmVnaXN0cmF0aW9uU2VjdXJpdHlNb2RlO1xuICAgIHRoaXMuX3NlY3VyaXR5VG9rZW5Qb2xpY3kubmV4dChtb2RlKTtcbiAgICB0aGlzLnJlcXVpcmVTZWN1cml0eVRva2VuID0gbW9kZSA9PT0gRGV2aWNlUmVnaXN0cmF0aW9uU2VjdXJpdHlNb2RlLlJFUVVJUkVEO1xuICB9XG5cbiAgYXN5bmMgc2V0SXNNYW5hZ2VtZW50VGVuYW50KCkge1xuICAgIHRoaXMuaXNNYW5hZ2VtZW50VGVuYW50ID0gYXdhaXQgdGhpcy50ZW5hbnRVaVNlcnZpY2UuaXNNYW5hZ2VtZW50VGVuYW50KCk7XG4gIH1cblxuICBzaG91bGRTaG93U2VjdXJpdHlUb2tlbklucHV0KGRhdGE6IElEZXZpY2VSZWdpc3RyYXRpb24pIHtcbiAgICByZXR1cm4gKFxuICAgICAgZGF0YSAmJlxuICAgICAgZGF0YS5zdGF0dXMgPT09IERldmljZVJlZ2lzdHJhdGlvblN0YXR1cy5QRU5ESU5HX0FDQ0VQVEFOQ0UgJiZcbiAgICAgIHRoaXMuc2hvd1Rva2VuSW5wdXRCYXNlZE9uU2VjdXJpdHlNb2RlKClcbiAgICApO1xuICB9XG5cbiAgc2hvd1Rva2VuSW5wdXRCYXNlZE9uU2VjdXJpdHlNb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWN1cml0eVRva2VuUG9saWN5LmdldFZhbHVlKCkgIT09IERldmljZVJlZ2lzdHJhdGlvblNlY3VyaXR5TW9kZS5JR05PUkVEO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZGV2aWNlUmVxdWVzdHMkIHwgYXN5bmMgYXMgZGV2aWNlUmVxdWVzdExpc3RcIj5cbiAgPGM4eS10aXRsZT5cbiAgICB7eyAnRGV2aWNlIHJlZ2lzdHJhdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICA8c21hbGwgKm5nSWY9XCJkZXZpY2VSZXF1ZXN0TGlzdC5kYXRhLmxlbmd0aCA9PT0gMVwiPjEge3sgJ25ldyBkZXZpY2UnIHwgdHJhbnNsYXRlIH19PC9zbWFsbD5cbiAgICA8c21hbGwgKm5nSWY9XCJkZXZpY2VSZXF1ZXN0TGlzdC5kYXRhLmxlbmd0aCA+IDFcIj5cbiAgICAgIHt7IGRldmljZVJlcXVlc3RMaXN0LmRhdGEubGVuZ3RoIH19IHt7ICduZXcgZGV2aWNlcycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NtYWxsPlxuICA8L2M4eS10aXRsZT5cblxuICA8Yzh5LWJyZWFkY3J1bWI+XG4gICAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICAgIFtpY29uXT1cIidleGNoYW5nZSdcIlxuICAgICAgW2xhYmVsXT1cIidEZXZpY2VzJyB8IHRyYW5zbGF0ZVwiXG4gICAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgICAgW2ljb25dPVwiJ2M4eS1kZXZpY2UtY29ubmVjdCdcIlxuICAgICAgW2xhYmVsXT1cIidEZXZpY2UgcmVnaXN0cmF0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPC9jOHktYnJlYWRjcnVtYj5cblxuICA8Yzh5LWFjdGlvbi1iYXItaXRlbVxuICAgIFtwbGFjZW1lbnRdPVwiJ2xlZnQnXCJcbiAgICBpdGVtQ2xhc3M9XCJuYXZiYXItZm9ybSBoaWRkZW4teHNcIlxuICA+XG4gICAgPGM4eS1saXN0LWRpc3BsYXktc3dpdGNoIChvbkxpc3RDbGFzc0NoYW5nZSk9XCJkaXNwbGF5TW9kZSgkZXZlbnQpXCI+PC9jOHktbGlzdC1kaXNwbGF5LXN3aXRjaD5cbiAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsaW1pdCQgfCBhc3luYyBhcyBsaW1pdFN0YXR1c1wiPlxuICAgIDxjOHktYWN0aW9uLWJhci1pdGVtXG4gICAgICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICAgICAgW3ByaW9yaXR5XT1cIjEwXCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnQWNjZXB0IGFsbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKmM4eUlmQWxsb3dlZD1cIlsnUk9MRV9ERVZJQ0VfQ09OVFJPTF9BRE1JTiddXCJcbiAgICAgICAgKGNsaWNrKT1cImFjY2VwdEFsbCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImNhbkFjY2VwdEFsbCgpIHx8IGxpbWl0U3RhdHVzPy5pc1JlYWNoZWRcIlxuICAgICAgPlxuICAgICAgICA8aSBbYzh5SWNvbl09XCInY2hlY2snXCI+PC9pPlxuICAgICAgICB7eyAnQWNjZXB0IGFsbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuICAgIDxjOHktYWN0aW9uLWJhci1pdGVtXG4gICAgICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICAgICAgW3ByaW9yaXR5XT1cIjlcIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgICAgICB0aXRsZT1cInt7ICdSZWxvYWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJsb2FkQWxsKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcbiAgICAgID5cbiAgICAgICAgPGlcbiAgICAgICAgICBbYzh5SWNvbl09XCIncmVmcmVzaCdcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2ljb24tc3Bpbic6IGlzTG9hZGluZyB9XCJcbiAgICAgICAgPjwvaT5cbiAgICAgICAge3sgJ1JlbG9hZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuICAgIDxjOHktYWN0aW9uLWJhci1pdGVtXG4gICAgICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICAgICAgKmM4eUlmQWxsb3dlZD1cIlsnUk9MRV9ERVZJQ0VfQ09OVFJPTF9BRE1JTiddXCJcbiAgICA+XG4gICAgICA8Yzh5LXJlZ2lzdGVyLWRldmljZS1kcm9wZG93bj48L2M4eS1yZWdpc3Rlci1kZXZpY2UtZHJvcGRvd24+XG4gICAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG4gICAgPGM4eS1oZWxwXG4gICAgICBzcmM9XCIvZG9jcy9kZXZpY2UtbWFuYWdlbWVudC1hcHBsaWNhdGlvbi9yZWdpc3RlcmluZy1kZXZpY2VzLyNyZWdpc3RlcmluZy1kZXZpY2VzXCJcbiAgICA+PC9jOHktaGVscD5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXZpY2VSZXF1ZXN0TGlzdC5kYXRhLmxlbmd0aCA+IDA7IGVsc2Ugbm9EYXRhXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2FyZC1ncm91cFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImdyaWRPckxpc3RcIlxuICAgICAgPlxuICAgICAgICA8IS0tIFNUQVJUIGludGVyYWN0LWxpc3Qgc3RpY2t5IGhlYWRlciBTVEFSVCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicGFnZS1zdGlja3ktaGVhZGVyIGhpZGRlbi14c1wiXG4gICAgICAgICAgKm5nSWY9XCJncmlkT3JMaXN0ID09PSAnaW50ZXJhY3QtbGlzdCdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHAtbC00MFwiPlxuICAgICAgICAgICAgICA8cCB0cmFuc2xhdGU+RGV2aWNlPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBjYXJkLWNvbHVtbi0zMCBwLWwtMCBtLWwtOFwiPlxuICAgICAgICAgICAgICA8cCB0cmFuc2xhdGU+U3RhdHVzPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2FyZC1ibG9jayBjYXJkLWNvbHVtbi0zMCBwLTBcIlxuICAgICAgICAgICAgICAqbmdJZj1cInNob3dUb2tlbklucHV0QmFzZWRPblNlY3VyaXR5TW9kZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHAgdHJhbnNsYXRlPlNlY3VyaXR5IHRva2VuPC9wPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHBvcG92ZXI9XCJ7e1xuICAgICAgICAgICAgICAgICAgJ1NlY3VyaXR5IHRva2VuIGlzIHJlcXVpcmVkIGlmIHRoZSBjb25uZWN0ZWQgZGV2aWNlIHVzZXMgaXQuJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGNhcmQtY29sdW1uLTUwXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNNYW5hZ2VtZW50VGVuYW50OyBlbHNlIG5vTWFuYWdlbWVudFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb2x1bW4tNTBcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdDcmVhdGVkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbHVtbi0zMFwiPlxuICAgICAgICAgICAgICAgICAge3sgJ0J5YHVzZXJgJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbHVtbi0yMFwiPlxuICAgICAgICAgICAgICAgICAge3sgJ1RlbmFudCBJRCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9NYW5hZ2VtZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWNvbnRlbnRzXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb2x1bW4tNTBcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0NyZWF0ZWQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbHVtbi01MFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnQnlgdXNlcmAnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtYWN0aW9ucy1ncm91cFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAxNzZweFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4gYnRuLXhzIGludmlzaWJsZVwiPlxuICAgICAgICAgICAgICAgIDwhLS1FTVBUWSBieSBkZXNpZ24tLT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gRU5EIGludGVyYWN0LWxpc3Qgc3RpY2t5IGhlYWRlciBFTkQgLS0+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC00IGNvbC1sZy0zXCJcbiAgICAgICAgICAqbmdJZj1cImxpbWl0U3RhdHVzPy5pc1JlYWNoZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBjZW50ZXItYmxvY2tcIlxuICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Ryb25nPlxuICAgICAgICAgICAgICB7eyBsaW1pdFJlYWNoZWRJbmZvJCB8IGFzeW5jIH19XG4gICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlBsZWFzZSBjb250YWN0IHlvdXIgcGxhdGZvcm0gYWRtaW5pc3RyYXRvci48L3NwYW4+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzaW5nbGVSZXF1ZXN0IG9mIGRldmljZVJlcXVlc3RMaXN0LmRhdGFcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC00IGNvbC1sZy0zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgc2VwYXJhdG9yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaWNvblwiPlxuICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInN0YXR1c1Byb3BzW3NpbmdsZVJlcXVlc3Quc3RhdHVzXS5jbHNcIlxuICAgICAgICAgICAgICAgICAgICBbYzh5SWNvbl09XCJzdGF0dXNQcm9wc1tzaW5nbGVSZXF1ZXN0LnN0YXR1c10uaWNvblwiXG4gICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtdGl0bGUgdGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cInt7IHNpbmdsZVJlcXVlc3QuaWQgfX1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IHNpbmdsZVJlcXVlc3QuaWQgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHRleHQtY2VudGVyIGNhcmQtY29sdW1uLTMwXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbFwiXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBTdGF0dXNcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tc3BpbiB0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICBjOHlJY29uPVwicmVmcmVzaFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2luZ2xlUmVxdWVzdC5zdGF0dXMgPT09IHN0YXR1cy5XQUlUSU5HX0ZPUl9DT05ORUNUSU9OXCJcbiAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICB7eyBzdGF0dXNQcm9wc1tzaW5nbGVSZXF1ZXN0LnN0YXR1c10ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmM4eUlmQWxsb3dlZD1cIlsnUk9MRV9ERVZJQ0VfQ09OVFJPTF9BRE1JTiddXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWJsb2NrIHRleHQtY2VudGVyIGNhcmQtY29sdW1uLTMwIHAtdC0wXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3AtYi0wJzogIXNob3VsZFNob3dTZWN1cml0eVRva2VuSW5wdXQoc2luZ2xlUmVxdWVzdCkgfVwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dUb2tlbklucHV0QmFzZWRPblNlY3VyaXR5TW9kZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvdWxkU2hvd1NlY3VyaXR5VG9rZW5JbnB1dChzaW5nbGVSZXF1ZXN0KVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJncmlkT3JMaXN0ICE9PSAnaW50ZXJhY3QtbGlzdCdcIlxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgU2VjdXJpdHkgdG9rZW5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2luZ2xlUmVxdWVzdC5zZWN1cml0eVRva2VuXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGU6IHsgZXhhbXBsZTogJ0ExZTNnaDVkcycgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVTZWN1cml0eVRva2VuXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWFjdGlvbnMtZ3JvdXAgZC1mbGV4IGEtaS1jZW50ZXIgai1jLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMTc2cHhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7e1xuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVJlcXVlc3Quc3RhdHVzID09PSBzdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICgnUmVtb3ZlJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogKCdDYW5jZWwnIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgJ2J0bi1kYW5nZXInOiBzaW5nbGVSZXF1ZXN0LnN0YXR1cyA9PT0gc3RhdHVzLlBFTkRJTkdfQUNDRVBUQU5DRSxcbiAgICAgICAgICAgICAgICAgICAgICAnYnRuLWRlZmF1bHQnOiBzaW5nbGVSZXF1ZXN0LnN0YXR1cyAhPT0gc3RhdHVzLlBFTkRJTkdfQUNDRVBUQU5DRVxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZShzaW5nbGVSZXF1ZXN0LmlkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNpbmdsZVJlcXVlc3Quc3RhdHVzID09PSBzdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ1JlbW92ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNpbmdsZVJlcXVlc3Quc3RhdHVzICE9PSBzdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FjY2VwdCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjY2VwdChzaW5nbGVSZXF1ZXN0KVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2luZ2xlUmVxdWVzdC5zdGF0dXMgPT09IHN0YXR1cy5QRU5ESU5HX0FDQ0VQVEFOQ0VcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgbGltaXRTdGF0dXM/LmlzUmVhY2hlZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICghc2luZ2xlUmVxdWVzdC5zZWN1cml0eVRva2VuICYmIHJlcXVpcmVTZWN1cml0eVRva2VuKVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyAnQWNjZXB0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBzZXBhcmF0b3IgdGV4dC1jZW50ZXIgY2FyZC1jb2x1bW4tNTBcIj5cbiAgICAgICAgICAgICAgICA8c21hbGxcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTWFuYWdlbWVudFRlbmFudDsgZWxzZSBub01hbmFnZW1lbnRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWNvbnRlbnRzXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaW5nbGVSZXF1ZXN0LmNyZWF0aW9uVGltZSAmJiBzaW5nbGVSZXF1ZXN0Lm93bmVyXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWNvbHVtbi01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1sLTQgbS1yLTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlZCBvbmBkYXRlYFxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWN5PVwiZGV2aWNlLXJlZ2lzdHJhdGlvbi0tY3JlYXRpb24tZGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2luZ2xlUmVxdWVzdC5jcmVhdGlvblRpbWUgfCBjOHlEYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1jb2x1bW4tMzAgdGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1sLTQgbS1yLTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgYnlgdXNlcmBcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgc2luZ2xlUmVxdWVzdC5vd25lciB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWN5PVwiZGV2aWNlLXJlZ2lzdHJhdGlvbi0tY3JlYXRlZC1ieVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2luZ2xlUmVxdWVzdC5vd25lciB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtY29sdW1uLTIwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWwtNCBtLXItNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmB0ZW5hbnRgXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHNpbmdsZVJlcXVlc3QudGVuYW50SWQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFzaW5nbGVSZXF1ZXN0LmNyZWF0aW9uVGltZSB8fCAhc2luZ2xlUmVxdWVzdC5vd25lclwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbHVtbi01MFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb2x1bW4tMzBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbGFiZWwtc21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlZCBpbmB0ZW5hbnRgXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29sdW1uLTIwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzaW5nbGVSZXF1ZXN0LnRlbmFudElkIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub01hbmFnZW1lbnQ+XG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJkLWNvbnRlbnRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1jb2x1bW4tNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tbC00IG0tci00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZWQgb25gZGF0ZWBcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1jeT1cImRldmljZS1yZWdpc3RyYXRpb24tLWNyZWF0aW9uLWRhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNpbmdsZVJlcXVlc3QuY3JlYXRpb25UaW1lIHwgYzh5RGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtY29sdW1uLTUwIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tbC00IG0tci00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5YHVzZXJgXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7IHNpbmdsZVJlcXVlc3Qub3duZXIgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1jeT1cImRldmljZS1yZWdpc3RyYXRpb24tLWNyZWF0ZWQtYnlcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNpbmdsZVJlcXVlc3Qub3duZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxjOHktbG9hZC1tb3JlXG4gICAgICAgIFtwYWdpbmddPVwiZGV2aWNlUmVxdWVzdExpc3QucGFnaW5nXCJcbiAgICAgICAgW2hpZGRlbl09XCJ0cnVlXCJcbiAgICAgICAgKG9uTG9hZCk9XCJ1cGRhdGVMaXN0KCRldmVudClcIlxuICAgICAgPjwvYzh5LWxvYWQtbW9yZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhPlxuICAgICAgPGRpdiBjbGFzcz1cImM4eS1lbXB0eS1zdGF0ZSBtLXQtNDAgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGgxIGNsYXNzPVwiYzh5LWljb24gYzh5LWljb24tZGV2aWNlLWNvbm5lY3QgYzh5LWljb24tZHVvY29sb3JcIj48L2gxPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGltaXRTdGF0dXM/LmlzUmVhY2hlZDsgZWxzZSBsaW1pdE5vdFJlYWNoZWRcIj5cbiAgICAgICAgICA8aDM+XG4gICAgICAgICAgICB7eyBsaW1pdFJlYWNoZWRJbmZvJCB8IGFzeW5jIH19XG4gICAgICAgICAgPC9oMz5cbiAgICAgICAgICA8cCB0cmFuc2xhdGU+UGxlYXNlIGNvbnRhY3QgeW91ciBwbGF0Zm9ybSBhZG1pbmlzdHJhdG9yLjwvcD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbGltaXROb3RSZWFjaGVkPlxuICAgICAgICAgIDxoMyB0cmFuc2xhdGU+Tm8gcGVuZGluZyByZWdpc3RyYXRpb25zIHRvIGRpc3BsYXkuPC9oMz5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgKmM4eUlmQWxsb3dlZD1cIlsnUk9MRV9ERVZJQ0VfQ09OVFJPTF9BRE1JTiddXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIFVzZSB0aGUgXCJSZWdpc3RlciBkZXZpY2VcIiBkcm9wZG93biBpbiB0aGUgdG9wIHJpZ2h0IGNvcm5lci5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -1,26 +1,25 @@
1
1
  import { Component } from '@angular/core';
2
- import { BsModalService } from 'ngx-bootstrap/modal';
3
- import { GeneralDeviceRegistrationComponent } from './general-device-registration.component';
2
+ import { GeneralDeviceRegistrationService } from './general-device-registration.service';
4
3
  import * as i0 from "@angular/core";
5
- import * as i1 from "ngx-bootstrap/modal";
4
+ import * as i1 from "./general-device-registration.service";
6
5
  import * as i2 from "@c8y/ngx-components";
7
6
  export class GeneralDeviceRegistrationButtonComponent {
8
- constructor(modalService) {
9
- this.modalService = modalService;
7
+ constructor(registrationService) {
8
+ this.registrationService = registrationService;
10
9
  }
11
10
  async open() {
12
- this.modalService.show(GeneralDeviceRegistrationComponent, {
13
- class: 'modal-md',
14
- ariaDescribedby: 'modal-body',
15
- ariaLabelledBy: 'modal-title',
16
- ignoreBackdropClick: true
17
- });
11
+ try {
12
+ await this.registrationService.open();
13
+ }
14
+ catch {
15
+ // modal was closed
16
+ }
18
17
  }
19
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeneralDeviceRegistrationButtonComponent, deps: [{ token: i1.BsModalService }], target: i0.ɵɵFactoryTarget.Component }); }
18
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeneralDeviceRegistrationButtonComponent, deps: [{ token: i1.GeneralDeviceRegistrationService }], target: i0.ɵɵFactoryTarget.Component }); }
20
19
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: GeneralDeviceRegistrationButtonComponent, selector: "c8y-general-device-registration-button", ngImport: i0, template: "<button title=\"{{ 'General' | translate }}\" type=\"button\" (click)=\"open()\">\n <i c8yIcon=\"c8y-device-connect\"></i>\n {{ 'General' | translate }}\n</button>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
21
20
  }
22
21
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeneralDeviceRegistrationButtonComponent, decorators: [{
23
22
  type: Component,
24
23
  args: [{ selector: 'c8y-general-device-registration-button', template: "<button title=\"{{ 'General' | translate }}\" type=\"button\" (click)=\"open()\">\n <i c8yIcon=\"c8y-device-connect\"></i>\n {{ 'General' | translate }}\n</button>\n" }]
25
- }], ctorParameters: () => [{ type: i1.BsModalService }] });
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9yZWdpc3Rlci1kZXZpY2UvZ2VuZXJhbC9nZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24tYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3JlZ2lzdGVyLWRldmljZS9nZW5lcmFsL2dlbmVyYWwtZGV2aWNlLXJlZ2lzdHJhdGlvbi1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7QUFNN0YsTUFBTSxPQUFPLHdDQUF3QztJQUNuRCxZQUFvQixZQUE0QjtRQUE1QixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7SUFBRyxDQUFDO0lBRXBELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0NBQWtDLEVBQUU7WUFDekQsS0FBSyxFQUFFLFVBQVU7WUFDakIsZUFBZSxFQUFFLFlBQVk7WUFDN0IsY0FBYyxFQUFFLGFBQWE7WUFDN0IsbUJBQW1CLEVBQUUsSUFBSTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDOytHQVZVLHdDQUF3QzttR0FBeEMsd0NBQXdDLDhFQ1JyRCx5S0FJQTs7NEZESWEsd0NBQXdDO2tCQUpwRCxTQUFTOytCQUNFLHdDQUF3QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEdlbmVyYWxEZXZpY2VSZWdpc3RyYXRpb25Db21wb25lbnQgfSBmcm9tICcuL2dlbmVyYWwtZGV2aWNlLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJhbERldmljZVJlZ2lzdHJhdGlvbkJ1dHRvbkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSkge31cblxuICBhc3luYyBvcGVuKCkge1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coR2VuZXJhbERldmljZVJlZ2lzdHJhdGlvbkNvbXBvbmVudCwge1xuICAgICAgY2xhc3M6ICdtb2RhbC1tZCcsXG4gICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnLFxuICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG4iLCI8YnV0dG9uIHRpdGxlPVwie3sgJ0dlbmVyYWwnIHwgdHJhbnNsYXRlIH19XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvcGVuKClcIj5cbiAgPGkgYzh5SWNvbj1cImM4eS1kZXZpY2UtY29ubmVjdFwiPjwvaT5cbiAge3sgJ0dlbmVyYWwnIHwgdHJhbnNsYXRlIH19XG48L2J1dHRvbj5cbiJdfQ==
24
+ }], ctorParameters: () => [{ type: i1.GeneralDeviceRegistrationService }] });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9yZWdpc3Rlci1kZXZpY2UvZ2VuZXJhbC9nZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24tYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3JlZ2lzdGVyLWRldmljZS9nZW5lcmFsL2dlbmVyYWwtZGV2aWNlLXJlZ2lzdHJhdGlvbi1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7OztBQU16RixNQUFNLE9BQU8sd0NBQXdDO0lBQ25ELFlBQW9CLG1CQUFxRDtRQUFyRCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQWtDO0lBQUcsQ0FBQztJQUU3RSxLQUFLLENBQUMsSUFBSTtRQUNSLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxtQkFBbUI7UUFDckIsQ0FBQztJQUNILENBQUM7K0dBVFUsd0NBQXdDO21HQUF4Qyx3Q0FBd0MsOEVDUHJELHlLQUlBOzs0RkRHYSx3Q0FBd0M7a0JBSnBELFNBQVM7K0JBQ0Usd0NBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHZW5lcmFsRGV2aWNlUmVnaXN0cmF0aW9uU2VydmljZSB9IGZyb20gJy4vZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJhbERldmljZVJlZ2lzdHJhdGlvbkJ1dHRvbkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVnaXN0cmF0aW9uU2VydmljZTogR2VuZXJhbERldmljZVJlZ2lzdHJhdGlvblNlcnZpY2UpIHt9XG5cbiAgYXN5bmMgb3BlbigpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5yZWdpc3RyYXRpb25TZXJ2aWNlLm9wZW4oKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIG1vZGFsIHdhcyBjbG9zZWRcbiAgICB9XG4gIH1cbn1cbiIsIjxidXR0b24gdGl0bGU9XCJ7eyAnR2VuZXJhbCcgfCB0cmFuc2xhdGUgfX1cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW4oKVwiPlxuICA8aSBjOHlJY29uPVwiYzh5LWRldmljZS1jb25uZWN0XCI+PC9pPlxuICB7eyAnR2VuZXJhbCcgfCB0cmFuc2xhdGUgfX1cbjwvYnV0dG9uPlxuIl19