@c8y/ngx-components 1017.0.294 → 1017.0.329
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/header/application/app-switcher.service.d.ts +1 -0
- package/esm2020/context-dashboard/report-dashboard/report-dashboard-list.component.mjs +3 -3
- package/esm2020/core/header/application/app-switcher.service.mjs +5 -1
- package/esm2020/register-device/device-registration-view.component.mjs +3 -3
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs +2 -2
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-register-device.mjs +2 -2
- package/fesm2015/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +5 -0
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs +2 -2
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-register-device.mjs +2 -2
- package/fesm2020/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +4 -0
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -125,9 +125,9 @@ export class DeviceRegistrationViewComponent {
|
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
127
|
DeviceRegistrationViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", 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 });
|
|
128
|
-
DeviceRegistrationViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", 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 [icon]=\"'exchange'\" [label]=\"'Devices' | translate\"></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 [placement]=\"'left'\" itemClass=\"navbar-form hidden-xs\">\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 [placement]=\"'right'\" [priority]=\"10\">\n <button\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n class=\"btn btn-link\"\n title=\"{{ 'Accept all' | translate }}\"\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 [placement]=\"'right'\" [priority]=\"9\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadAll()\"\n [disabled]=\"isLoading\"\n >\n <i [c8yIcon]=\"'refresh'\" [ngClass]=\"{ 'icon-spin': isLoading }\"></i>\n {{ 'Reload' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'right'\" *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\">\n <c8y-register-device-dropdown></c8y-register-device-dropdown>\n </c8y-action-bar-item>\n\n <c8y-help src=\"/users-guide/device-management/#connecting-devices\"></c8y-help>\n\n <ng-container *ngIf=\"deviceRequestList.data.length > 0; else noData\">\n <div class=\"card-group\" [ngClass]=\"gridOrList\">\n <!-- START interact-list sticky header START -->\n <div *ngIf=\"gridOrList === 'interact-list'\" class=\"page-sticky-header hidden-xs\">\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 class=\"card-block card-column-30 p-0\" *ngIf=\"showTokenInputBasedOnSecurityMode()\">\n <p translate>Security token</p>\n <button\n class=\"btn-help\"\n type=\"button\"\n popover=\"{{\n 'Security token is required if the connected device uses it.' | translate\n }}\"\n placement=\"right\"\n container=\"body\"\n [attr.aria-label]=\"'Help' | translate\"\n triggers=\"focus\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </div>\n <div class=\"card-footer card-column-50\">\n <div class=\"d-contents\" *ngIf=\"isManagementTenant; else noManagement\">\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 class=\"card-actions-group\" style=\"min-width: 176px\">\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 *ngIf=\"limitStatus?.isReached\" class=\"col-xs-12 col-sm-6 col-md-4 col-lg-3\">\n <p class=\"alert alert-warning center-block\" role=\"alert\">\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 [c8yIcon]=\"statusProps[singleRequest.status].icon\"\n [class]=\"statusProps[singleRequest.status].cls\"\n ></i>\n </div>\n <p class=\"card-title text-truncate\" title=\"{{ singleRequest.id }}\">{{ singleRequest.id }}</p>\n </div>\n\n <div class=\"card-block text-center card-column-30\">\n <span class=\"text-label-small\" translate>Status</span>\n <p>\n <i\n *ngIf=\"singleRequest.status === status.WAITING_FOR_CONNECTION\"\n c8yIcon=\"refresh\"\n class=\"icon-spin text-primary\"\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 *ngIf=\"gridOrList !== 'interact-list'\" class=\"text-label-small\" translate>\n Security token\n </span>\n <input\n [(ngModel)]=\"singleRequest.securityToken\"\n type=\"text\"\n class=\"form-control\"\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 [ngClass]=\"{\n 'btn-danger': singleRequest.status === status.PENDING_ACCEPTANCE,\n 'btn-default': singleRequest.status !== status.PENDING_ACCEPTANCE\n }\"\n title=\"{{\n singleRequest.status === status.PENDING_ACCEPTANCE\n ? ('Remove' | translate)\n : ('Cancel' | translate)\n }}\"\n type=\"button\"\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 *ngIf=\"isManagementTenant; else noManagement\" class=\"d-contents\">\n <div class=\"d-contents\" *ngIf=\"singleRequest.creationTime && singleRequest.owner\">\n <span class=\"text-label-small\" translate>Created on`date`</span>\n <span class=\"card-column-50\">\n {{ singleRequest.creationTime | c8yDate }}\n </span>\n <span class=\"text-label-small m-l-4 m-r-4\" translate>by`user`</span>\n <span class=\"card-column-30\">\n <span class=\"text-truncate\" title=\"{{ singleRequest.owner }}\">\n {{ singleRequest.owner }}\n </span>\n </span>\n <span class=\"text-label-small m-l-4 m-r-4\" translate>in`tenant`</span>\n <span class=\"card-column-20\">{{ singleRequest.tenantId }}</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 class=\"text-label-small\" translate>Created in`tenant`</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=\"text-label-small m-l-4 m-r-4\" translate>Created on`date`</span>\n <span class=\"card-column-50\">\n {{ singleRequest.creationTime | c8yDate }}\n </span>\n <span class=\"text-label-small m-l-4 m-r-4\" translate>by`user`</span>\n <span class=\"card-column-50\">\n <span class=\"text-truncate\" title=\"{{ singleRequest.owner }}\">\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 *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\" translate>\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"] }, { 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" }] });
|
|
128
|
+
DeviceRegistrationViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", 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 [icon]=\"'exchange'\" [label]=\"'Devices' | translate\"></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 [placement]=\"'left'\" itemClass=\"navbar-form hidden-xs\">\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 [placement]=\"'right'\" [priority]=\"10\">\n <button\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n class=\"btn btn-link\"\n title=\"{{ 'Accept all' | translate }}\"\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 [placement]=\"'right'\" [priority]=\"9\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadAll()\"\n [disabled]=\"isLoading\"\n >\n <i [c8yIcon]=\"'refresh'\" [ngClass]=\"{ 'icon-spin': isLoading }\"></i>\n {{ 'Reload' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'right'\" *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\">\n <c8y-register-device-dropdown></c8y-register-device-dropdown>\n </c8y-action-bar-item>\n\n <c8y-help src=\"/users-guide/device-management/#connecting-devices\"></c8y-help>\n\n <ng-container *ngIf=\"deviceRequestList.data.length > 0; else noData\">\n <div class=\"card-group\" [ngClass]=\"gridOrList\">\n <!-- START interact-list sticky header START -->\n <div *ngIf=\"gridOrList === 'interact-list'\" class=\"page-sticky-header hidden-xs\">\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 class=\"card-block card-column-30 p-0\" *ngIf=\"showTokenInputBasedOnSecurityMode()\">\n <p translate>Security token</p>\n <button\n class=\"btn-help\"\n type=\"button\"\n popover=\"{{\n 'Security token is required if the connected device uses it.' | translate\n }}\"\n placement=\"right\"\n container=\"body\"\n [attr.aria-label]=\"'Help' | translate\"\n triggers=\"focus\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </div>\n <div class=\"card-footer card-column-50\">\n <div class=\"d-contents\" *ngIf=\"isManagementTenant; else noManagement\">\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 class=\"card-actions-group\" style=\"min-width: 176px\">\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 *ngIf=\"limitStatus?.isReached\" class=\"col-xs-12 col-sm-6 col-md-4 col-lg-3\">\n <p class=\"alert alert-warning center-block\" role=\"alert\">\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 [c8yIcon]=\"statusProps[singleRequest.status].icon\"\n [class]=\"statusProps[singleRequest.status].cls\"\n ></i>\n </div>\n <p class=\"card-title text-truncate\" title=\"{{ singleRequest.id }}\">{{ singleRequest.id }}</p>\n </div>\n\n <div class=\"card-block text-center card-column-30\">\n <span class=\"text-label-small\" translate>Status</span>\n <p>\n <i\n *ngIf=\"singleRequest.status === status.WAITING_FOR_CONNECTION\"\n c8yIcon=\"refresh\"\n class=\"icon-spin text-primary\"\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 *ngIf=\"gridOrList !== 'interact-list'\" class=\"text-label-small\" translate>\n Security token\n </span>\n <input\n [(ngModel)]=\"singleRequest.securityToken\"\n type=\"text\"\n class=\"form-control\"\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 [ngClass]=\"{\n 'btn-danger': singleRequest.status === status.PENDING_ACCEPTANCE,\n 'btn-default': singleRequest.status !== status.PENDING_ACCEPTANCE\n }\"\n title=\"{{\n singleRequest.status === status.PENDING_ACCEPTANCE\n ? ('Remove' | translate)\n : ('Cancel' | translate)\n }}\"\n type=\"button\"\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 *ngIf=\"isManagementTenant; else noManagement\" class=\"d-contents\">\n <div class=\"d-contents\" *ngIf=\"singleRequest.creationTime && singleRequest.owner\">\n <span class=\"card-column-50\" >\n <span class=\"text-label-small m-l-4 m-r-4\" translate>Created on`date`</span>\n <span data-cy=\"device-registration--creation-date\">{{ singleRequest.creationTime | c8yDate }}</span>\n </span>\n <span class=\"card-column-30 text-truncate\">\n <span class=\"text-label-small m-l-4 m-r-4\" translate>by`user`</span>\n <span data-cy=\"device-registration--created-by\" title=\"{{ singleRequest.owner }}\">\n {{ singleRequest.owner }}\n </span>\n </span>\n <span class=\"card-column-20\">\n <span class=\"text-label-small m-l-4 m-r-4\" translate>in`tenant`</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 class=\"text-label-small\" translate>Created in`tenant`</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 class=\"text-label-small m-l-4 m-r-4\" translate>Created on`date`</span>\n <span data-cy=\"device-registration--creation-date\">{{ singleRequest.creationTime | c8yDate }}</span>\n </span>\n <span class=\"card-column-50 text-truncate\">\n <span class=\"text-label-small m-l-4 m-r-4\" translate>by`user`</span>\n <span data-cy=\"device-registration--created-by\" title=\"{{ singleRequest.owner }}\">\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 *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\" translate>\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"] }, { 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" }] });
|
|
129
129
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeviceRegistrationViewComponent, decorators: [{
|
|
130
130
|
type: Component,
|
|
131
|
-
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 [icon]=\"'exchange'\" [label]=\"'Devices' | translate\"></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 [placement]=\"'left'\" itemClass=\"navbar-form hidden-xs\">\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 [placement]=\"'right'\" [priority]=\"10\">\n <button\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n class=\"btn btn-link\"\n title=\"{{ 'Accept all' | translate }}\"\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 [placement]=\"'right'\" [priority]=\"9\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadAll()\"\n [disabled]=\"isLoading\"\n >\n <i [c8yIcon]=\"'refresh'\" [ngClass]=\"{ 'icon-spin': isLoading }\"></i>\n {{ 'Reload' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'right'\" *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\">\n <c8y-register-device-dropdown></c8y-register-device-dropdown>\n </c8y-action-bar-item>\n\n <c8y-help src=\"/users-guide/device-management/#connecting-devices\"></c8y-help>\n\n <ng-container *ngIf=\"deviceRequestList.data.length > 0; else noData\">\n <div class=\"card-group\" [ngClass]=\"gridOrList\">\n <!-- START interact-list sticky header START -->\n <div *ngIf=\"gridOrList === 'interact-list'\" class=\"page-sticky-header hidden-xs\">\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 class=\"card-block card-column-30 p-0\" *ngIf=\"showTokenInputBasedOnSecurityMode()\">\n <p translate>Security token</p>\n <button\n class=\"btn-help\"\n type=\"button\"\n popover=\"{{\n 'Security token is required if the connected device uses it.' | translate\n }}\"\n placement=\"right\"\n container=\"body\"\n [attr.aria-label]=\"'Help' | translate\"\n triggers=\"focus\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </div>\n <div class=\"card-footer card-column-50\">\n <div class=\"d-contents\" *ngIf=\"isManagementTenant; else noManagement\">\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 class=\"card-actions-group\" style=\"min-width: 176px\">\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 *ngIf=\"limitStatus?.isReached\" class=\"col-xs-12 col-sm-6 col-md-4 col-lg-3\">\n <p class=\"alert alert-warning center-block\" role=\"alert\">\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 [c8yIcon]=\"statusProps[singleRequest.status].icon\"\n [class]=\"statusProps[singleRequest.status].cls\"\n ></i>\n </div>\n <p class=\"card-title text-truncate\" title=\"{{ singleRequest.id }}\">{{ singleRequest.id }}</p>\n </div>\n\n <div class=\"card-block text-center card-column-30\">\n <span class=\"text-label-small\" translate>Status</span>\n <p>\n <i\n *ngIf=\"singleRequest.status === status.WAITING_FOR_CONNECTION\"\n c8yIcon=\"refresh\"\n class=\"icon-spin text-primary\"\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 *ngIf=\"gridOrList !== 'interact-list'\" class=\"text-label-small\" translate>\n Security token\n </span>\n <input\n [(ngModel)]=\"singleRequest.securityToken\"\n type=\"text\"\n class=\"form-control\"\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 [ngClass]=\"{\n 'btn-danger': singleRequest.status === status.PENDING_ACCEPTANCE,\n 'btn-default': singleRequest.status !== status.PENDING_ACCEPTANCE\n }\"\n title=\"{{\n singleRequest.status === status.PENDING_ACCEPTANCE\n ? ('Remove' | translate)\n : ('Cancel' | translate)\n }}\"\n type=\"button\"\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 *ngIf=\"isManagementTenant; else noManagement\" class=\"d-contents\">\n <div class=\"d-contents\" *ngIf=\"singleRequest.creationTime && singleRequest.owner\">\n <span class=\"text-label-small\" translate>Created on`date`</span>\n <span class=\"card-column-50\">\n {{ singleRequest.creationTime | c8yDate }}\n </span>\n <span class=\"text-label-small m-l-4 m-r-4\" translate>by`user`</span>\n <span class=\"card-column-30\">\n <span class=\"text-truncate\" title=\"{{ singleRequest.owner }}\">\n {{ singleRequest.owner }}\n </span>\n </span>\n <span class=\"text-label-small m-l-4 m-r-4\" translate>in`tenant`</span>\n <span class=\"card-column-20\">{{ singleRequest.tenantId }}</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 class=\"text-label-small\" translate>Created in`tenant`</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=\"text-label-small m-l-4 m-r-4\" translate>Created on`date`</span>\n <span class=\"card-column-50\">\n {{ singleRequest.creationTime | c8yDate }}\n </span>\n <span class=\"text-label-small m-l-4 m-r-4\" translate>by`user`</span>\n <span class=\"card-column-50\">\n <span class=\"text-truncate\" title=\"{{ singleRequest.owner }}\">\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 *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\" translate>\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" }]
|
|
131
|
+
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 [icon]=\"'exchange'\" [label]=\"'Devices' | translate\"></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 [placement]=\"'left'\" itemClass=\"navbar-form hidden-xs\">\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 [placement]=\"'right'\" [priority]=\"10\">\n <button\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n class=\"btn btn-link\"\n title=\"{{ 'Accept all' | translate }}\"\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 [placement]=\"'right'\" [priority]=\"9\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadAll()\"\n [disabled]=\"isLoading\"\n >\n <i [c8yIcon]=\"'refresh'\" [ngClass]=\"{ 'icon-spin': isLoading }\"></i>\n {{ 'Reload' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'right'\" *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\">\n <c8y-register-device-dropdown></c8y-register-device-dropdown>\n </c8y-action-bar-item>\n\n <c8y-help src=\"/users-guide/device-management/#connecting-devices\"></c8y-help>\n\n <ng-container *ngIf=\"deviceRequestList.data.length > 0; else noData\">\n <div class=\"card-group\" [ngClass]=\"gridOrList\">\n <!-- START interact-list sticky header START -->\n <div *ngIf=\"gridOrList === 'interact-list'\" class=\"page-sticky-header hidden-xs\">\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 class=\"card-block card-column-30 p-0\" *ngIf=\"showTokenInputBasedOnSecurityMode()\">\n <p translate>Security token</p>\n <button\n class=\"btn-help\"\n type=\"button\"\n popover=\"{{\n 'Security token is required if the connected device uses it.' | translate\n }}\"\n placement=\"right\"\n container=\"body\"\n [attr.aria-label]=\"'Help' | translate\"\n triggers=\"focus\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </div>\n <div class=\"card-footer card-column-50\">\n <div class=\"d-contents\" *ngIf=\"isManagementTenant; else noManagement\">\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 class=\"card-actions-group\" style=\"min-width: 176px\">\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 *ngIf=\"limitStatus?.isReached\" class=\"col-xs-12 col-sm-6 col-md-4 col-lg-3\">\n <p class=\"alert alert-warning center-block\" role=\"alert\">\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 [c8yIcon]=\"statusProps[singleRequest.status].icon\"\n [class]=\"statusProps[singleRequest.status].cls\"\n ></i>\n </div>\n <p class=\"card-title text-truncate\" title=\"{{ singleRequest.id }}\">{{ singleRequest.id }}</p>\n </div>\n\n <div class=\"card-block text-center card-column-30\">\n <span class=\"text-label-small\" translate>Status</span>\n <p>\n <i\n *ngIf=\"singleRequest.status === status.WAITING_FOR_CONNECTION\"\n c8yIcon=\"refresh\"\n class=\"icon-spin text-primary\"\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 *ngIf=\"gridOrList !== 'interact-list'\" class=\"text-label-small\" translate>\n Security token\n </span>\n <input\n [(ngModel)]=\"singleRequest.securityToken\"\n type=\"text\"\n class=\"form-control\"\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 [ngClass]=\"{\n 'btn-danger': singleRequest.status === status.PENDING_ACCEPTANCE,\n 'btn-default': singleRequest.status !== status.PENDING_ACCEPTANCE\n }\"\n title=\"{{\n singleRequest.status === status.PENDING_ACCEPTANCE\n ? ('Remove' | translate)\n : ('Cancel' | translate)\n }}\"\n type=\"button\"\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 *ngIf=\"isManagementTenant; else noManagement\" class=\"d-contents\">\n <div class=\"d-contents\" *ngIf=\"singleRequest.creationTime && singleRequest.owner\">\n <span class=\"card-column-50\" >\n <span class=\"text-label-small m-l-4 m-r-4\" translate>Created on`date`</span>\n <span data-cy=\"device-registration--creation-date\">{{ singleRequest.creationTime | c8yDate }}</span>\n </span>\n <span class=\"card-column-30 text-truncate\">\n <span class=\"text-label-small m-l-4 m-r-4\" translate>by`user`</span>\n <span data-cy=\"device-registration--created-by\" title=\"{{ singleRequest.owner }}\">\n {{ singleRequest.owner }}\n </span>\n </span>\n <span class=\"card-column-20\">\n <span class=\"text-label-small m-l-4 m-r-4\" translate>in`tenant`</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 class=\"text-label-small\" translate>Created in`tenant`</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 class=\"text-label-small m-l-4 m-r-4\" translate>Created on`date`</span>\n <span data-cy=\"device-registration--creation-date\">{{ singleRequest.creationTime | c8yDate }}</span>\n </span>\n <span class=\"card-column-50 text-truncate\">\n <span class=\"text-label-small m-l-4 m-r-4\" translate>by`user`</span>\n <span data-cy=\"device-registration--created-by\" title=\"{{ singleRequest.owner }}\">\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 *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\" translate>\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
132
|
}], ctorParameters: function () { return [{ 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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QU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxLQUFLLDhCQUE4QixDQUFDLE9BQU8sQ0FBQztJQUN6RixDQUFDOzs0SEFyS1UsK0JBQStCO2dIQUEvQiwrQkFBK0Isb0VDM0I1QyxxellBOFJBOzJGRG5RYSwrQkFBK0I7a0JBSjNDLFNBQVM7K0JBQ0UsOEJBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRGV2aWNlUmVnaXN0cmF0aW9uU2VjdXJpdHlNb2RlLFxuICBEZXZpY2VSZWdpc3RyYXRpb25TdGF0dXMsXG4gIElEZXZpY2VSZWdpc3RyYXRpb24sXG4gIElEZXZpY2VSZWdpc3RyYXRpb25MaW1pdCxcbiAgUGFnaW5nXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRGV2aWNlQm9vdHN0cmFwUmVhbHRpbWVTZXJ2aWNlLFxuICBJUmVhbHRpbWVEZXZpY2VCb290c3RyYXAsXG4gIFRlbmFudFVpU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLFxuICBTdGF0dXMsXG4gIGdldHRleHQsXG4gIE9wdGlvbnNTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgUmVnaXN0ZXJEZXZpY2VTZXJ2aWNlIH0gZnJvbSAnLi9yZWdpc3Rlci1kZXZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBzb3J0QnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGV2aWNlLXJlZ2lzdHJhdGlvbi12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICdkZXZpY2UtcmVnaXN0cmF0aW9uLXZpZXcuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERldmljZVJlZ2lzdHJhdGlvblZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGRldmljZVJlcXVlc3RzJDogT2JzZXJ2YWJsZTx7XG4gICAgZGF0YTogSURldmljZVJlZ2lzdHJhdGlvbltdO1xuICAgIHBhZ2luZz86IFBhZ2luZzxJRGV2aWNlUmVnaXN0cmF0aW9uPjtcbiAgfT47XG4gIGxpbWl0JDogT2JzZXJ2YWJsZTxJRGV2aWNlUmVnaXN0cmF0aW9uTGltaXQ+O1xuICBsaW1pdFJlYWNoZWRJbmZvJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICByZXF1aXJlU2VjdXJpdHlUb2tlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc01hbmFnZW1lbnRUZW5hbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGdyaWRPckxpc3Q6ICdpbnRlcmFjdC1saXN0JyB8ICdpbnRlcmFjdC1ncmlkJyA9ICdpbnRlcmFjdC1ncmlkJztcbiAgc3RhdHVzID0gRGV2aWNlUmVnaXN0cmF0aW9uU3RhdHVzO1xuXG4gIHJlYWRvbmx5IHN0YXR1c1Byb3BzID0ge1xuICAgIFtEZXZpY2VSZWdpc3RyYXRpb25TdGF0dXMuV0FJVElOR19GT1JfQ09OTkVDVElPTl06IHtcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdXYWl0aW5nIGZvciBjb25uZWN0aW9uJyksXG4gICAgICBpY29uOiAndW5saW5rJyxcbiAgICAgIGNsczogJ3RleHQtZGFuZ2VyJ1xuICAgIH0sXG4gICAgW0RldmljZVJlZ2lzdHJhdGlvblN0YXR1cy5QRU5ESU5HX0FDQ0VQVEFOQ0VdOiB7XG4gICAgICBsYWJlbDogZ2V0dGV4dCgnUGVuZGluZyBhY2NlcHRhbmNlJyksXG4gICAgICBpY29uOiAnY2lyY2xlJyxcbiAgICAgIGNsczogJ3RleHQtaW5mbydcbiAgICB9LFxuICAgIFtEZXZpY2VSZWdpc3RyYXRpb25TdGF0dXMuQUNDRVBURURdOiB7XG4gICAgICBsYWJlbDogZ2V0dGV4dCgnQWNjZXB0ZWQnKSxcbiAgICAgIGljb246ICdjaGVjay1jaXJjbGUnLFxuICAgICAgY2xzOiAndGV4dC1zdWNjZXNzJ1xuICAgIH0sXG4gICAgW0RldmljZVJlZ2lzdHJhdGlvblN0YXR1cy5CTE9DS0VEXToge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ0Jsb2NrZWQnKSxcbiAgICAgIGljb246ICdiYW4nLFxuICAgICAgY2xzOiAndGV4dC1kYW5nZXInXG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmUkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZWN1cml0eVRva2VuUG9saWN5OiBCZWhhdmlvclN1YmplY3Q8RGV2aWNlUmVnaXN0cmF0aW9uU2VjdXJpdHlNb2RlPiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdChEZXZpY2VSZWdpc3RyYXRpb25TZWN1cml0eU1vZGUuT1BUSU9OQUwpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVnaXN0ZXJEZXZpY2VTZXJ2aWNlOiBSZWdpc3RlckRldmljZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBib290c3RyYXBSZWFsdGltZVNlcnZpY2U6IERldmljZUJvb3RzdHJhcFJlYWx0aW1lU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFVpU2VydmljZTogVGVuYW50VWlTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3B0aW9uc1NlcnZpY2U6IE9wdGlvbnNTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRBbGwoKTtcbiAgICB0aGlzLnNldElzTWFuYWdlbWVudFRlbmFudCgpO1xuICAgIHRoaXMuc2V0UmVxdWlyZVNlY3VyaXR5VG9rZW4oKTtcblxuICAgIHRoaXMuZGV2aWNlUmVxdWVzdHMkID0gdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2UuZGV2aWNlUmVnaXN0cmF0aW9uUmVxdWVzdHMkLnBpcGUoXG4gICAgICBtYXAocmVxID0+ICh7XG4gICAgICAgIGRhdGE6IHNvcnRCeShyZXEuZGF0YSwgW1xuICAgICAgICAgICh7IHN0YXR1cyB9KSA9PiAoc3RhdHVzID09PSBEZXZpY2VSZWdpc3RyYXRpb25TdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFID8gMCA6IDEpLFxuICAgICAgICAgICctY3JlYXRpb25UaW1lJ1xuICAgICAgICBdKSxcbiAgICAgICAgcGFnaW5nOiByZXEucGFnaW5nXG4gICAgICB9KSlcbiAgICApO1xuICAgIHRoaXMubGltaXQkID0gdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2UubGltaXQkO1xuICAgIHRoaXMubGltaXRSZWFjaGVkSW5mbyQgPSB0aGlzLmxpbWl0JC5waXBlKFxuICAgICAgZmlsdGVyKGRldmljZVJlZ2lzdHJhdGlvbkxpbWl0ID0+IGRldmljZVJlZ2lzdHJhdGlvbkxpbWl0LmlzUmVhY2hlZCksXG4gICAgICBzd2l0Y2hNYXAoKHsgbGltaXQgfSkgPT5cbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbShcbiAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgJ1lvdSByZWFjaGVkIHRoZSBsaW1pdCBvZiB7eyBtYXhEZXZpY2VzIH19IGRldmljZXMuIE5vIG1vcmUgZGV2aWNlcyBjYW4gYmUgcmVnaXN0ZXJlZC4nXG4gICAgICAgICAgKSxcbiAgICAgICAgICB7IG1heERldmljZXM6IGxpbWl0IH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2UubG9hZGluZyRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAuc3Vic2NyaWJlKHZhbHVlID0+ICh0aGlzLmlzTG9hZGluZyA9IHZhbHVlKSk7XG5cbiAgICB0aGlzLmJvb3RzdHJhcFJlYWx0aW1lU2VydmljZVxuICAgICAgLm9uVXBkYXRlJCgpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgLnN1YnNjcmliZSgoYm9vdHN0cmFwOiBJUmVhbHRpbWVEZXZpY2VCb290c3RyYXApID0+IHtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2Uub25EZXZpY2VCb290c3RyYXAoYm9vdHN0cmFwKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cblxuICB1cGRhdGVMaXN0KGRhdGEpIHtcbiAgICB0aGlzLnJlZ2lzdGVyRGV2aWNlU2VydmljZS5pbnRlcm5hbExpc3RVcGRhdGUoZGF0YSk7XG4gIH1cblxuICBhc3luYyBkZWxldGUoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICBnZXR0ZXh0KCdDYW5jZWwgZGV2aWNlIHJlZ2lzdHJhdGlvbicpLFxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgIGdldHRleHQoXG4gICAgICAgICAgJ1lvdSBhcmUgYWJvdXQgdG8gY2FuY2VsIGRldmljZSByZWdpc3RyYXRpb24gZm9yIElEIFwie3tpZH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICAgICApLFxuICAgICAgICB7IGlkIH1cbiAgICAgICksXG4gICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAge1xuICAgICAgICBvazogZ2V0dGV4dCgnQ2FuY2VsIHJlZ2lzdHJhdGlvbicpLFxuICAgICAgICBjYW5jZWw6IGdldHRleHQoJ0Nsb3NlJylcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKGNvbmZpcm1lZCkge1xuICAgICAgdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2UucmVtb3ZlKGlkKTtcbiAgICB9XG4gIH1cblxuICBhY2NlcHQocmVxdWVzdDogSURldmljZVJlZ2lzdHJhdGlvbikge1xuICAgIHRoaXMucmVnaXN0ZXJEZXZpY2VTZXJ2aWNlLmFjY2VwdChyZXF1ZXN0KTtcbiAgfVxuXG4gIGFjY2VwdEFsbCgpIHtcbiAgICB0aGlzLnJlZ2lzdGVyRGV2aWNlU2VydmljZS5hY2NlcHRBbGwoKTtcbiAgfVxuXG4gIGNhbkFjY2VwdEFsbCgpIHtcbiAgICBjb25zdCBwZW5kaW5nUmVxdWVzdHMgPSB0aGlzLnJlZ2lzdGVyRGV2aWNlU2VydmljZS5nZXRSZXF1ZXN0QnlTdGF0dXMoXG4gICAgICBEZXZpY2VSZWdpc3RyYXRpb25TdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFXG4gICAgKTtcbiAgICByZXR1cm4gIShwZW5kaW5nUmVxdWVzdHMubGVuZ3RoID4gMCAmJiAhdGhpcy5yZXF1aXJlU2VjdXJpdHlUb2tlbik7XG4gIH1cblxuICBsb2FkQWxsKCkge1xuICAgIHRoaXMucmVnaXN0ZXJEZXZpY2VTZXJ2aWNlLmxpc3QoKTtcbiAgfVxuXG4gIGRpc3BsYXlNb2RlKGxpc3RDbGFzczogJ2ludGVyYWN0LWxpc3QnIHwgJ2ludGVyYWN0LWdyaWQnKSB7XG4gICAgdGhpcy5ncmlkT3JMaXN0ID0gbGlzdENsYXNzO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVxdWlyZVNlY3VyaXR5VG9rZW4oKSB7XG4gICAgY29uc3QgbW9kZTogRGV2aWNlUmVnaXN0cmF0aW9uU2VjdXJpdHlNb2RlID1cbiAgICAgIChhd2FpdCB0aGlzLm9wdGlvbnNTZXJ2aWNlLmdldFRlbmFudE9wdGlvbjxEZXZpY2VSZWdpc3RyYXRpb25TZWN1cml0eU1vZGU+KFxuICAgICAgICAnZGV2aWNlLXJlZ2lzdHJhdGlvbicsXG4gICAgICAgICdzZWN1cml0eS10b2tlbi5wb2xpY3knLFxuICAgICAgICBEZXZpY2VSZWdpc3RyYXRpb25TZWN1cml0eU1vZGUuT1BUSU9OQUxcbiAgICAgICkpIGFzIERldmljZVJlZ2lzdHJhdGlvblNlY3VyaXR5TW9kZTtcbiAgICB0aGlzLl9zZWN1cml0eVRva2VuUG9saWN5Lm5leHQobW9kZSk7XG4gICAgdGhpcy5yZXF1aXJlU2VjdXJpdHlUb2tlbiA9IG1vZGUgPT09IERldmljZVJlZ2lzdHJhdGlvblNlY3VyaXR5TW9kZS5SRVFVSVJFRDtcbiAgfVxuXG4gIGFzeW5jIHNldElzTWFuYWdlbWVudFRlbmFudCgpIHtcbiAgICB0aGlzLmlzTWFuYWdlbWVudFRlbmFudCA9IGF3YWl0IHRoaXMudGVuYW50VWlTZXJ2aWNlLmlzTWFuYWdlbWVudFRlbmFudCgpO1xuICB9XG5cbiAgc2hvdWxkU2hvd1NlY3VyaXR5VG9rZW5JbnB1dChkYXRhOiBJRGV2aWNlUmVnaXN0cmF0aW9uKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGRhdGEgJiZcbiAgICAgIGRhdGEuc3RhdHVzID09PSBEZXZpY2VSZWdpc3RyYXRpb25TdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFICYmXG4gICAgICB0aGlzLnNob3dUb2tlbklucHV0QmFzZWRPblNlY3VyaXR5TW9kZSgpXG4gICAgKTtcbiAgfVxuXG4gIHNob3dUb2tlbklucHV0QmFzZWRPblNlY3VyaXR5TW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdXJpdHlUb2tlblBvbGljeS5nZXRWYWx1ZSgpICE9PSBEZXZpY2VSZWdpc3RyYXRpb25TZWN1cml0eU1vZGUuSUdOT1JFRDtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImRldmljZVJlcXVlc3RzJCB8IGFzeW5jIGFzIGRldmljZVJlcXVlc3RMaXN0XCI+XG4gIDxjOHktdGl0bGU+XG4gICAge3sgJ0RldmljZSByZWdpc3RyYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgPHNtYWxsICpuZ0lmPVwiZGV2aWNlUmVxdWVzdExpc3QuZGF0YS5sZW5ndGggPT09IDFcIj4xIHt7ICduZXcgZGV2aWNlJyB8IHRyYW5zbGF0ZSB9fTwvc21hbGw+XG4gICAgPHNtYWxsICpuZ0lmPVwiZGV2aWNlUmVxdWVzdExpc3QuZGF0YS5sZW5ndGggPiAxXCI+XG4gICAgICB7eyBkZXZpY2VSZXF1ZXN0TGlzdC5kYXRhLmxlbmd0aCB9fSB7eyAnbmV3IGRldmljZXMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9zbWFsbD5cbiAgPC9jOHktdGl0bGU+XG5cbiAgPGM4eS1icmVhZGNydW1iPlxuICAgIDxjOHktYnJlYWRjcnVtYi1pdGVtIFtpY29uXT1cIidleGNoYW5nZSdcIiBbbGFiZWxdPVwiJ0RldmljZXMnIHwgdHJhbnNsYXRlXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICAgIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgICBbaWNvbl09XCInYzh5LWRldmljZS1jb25uZWN0J1wiXG4gICAgICBbbGFiZWxdPVwiJ0RldmljZSByZWdpc3RyYXRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8L2M4eS1icmVhZGNydW1iPlxuXG4gIDxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ2xlZnQnXCIgaXRlbUNsYXNzPVwibmF2YmFyLWZvcm0gaGlkZGVuLXhzXCI+XG4gICAgPGM4eS1saXN0LWRpc3BsYXktc3dpdGNoIChvbkxpc3RDbGFzc0NoYW5nZSk9XCJkaXNwbGF5TW9kZSgkZXZlbnQpXCI+PC9jOHktbGlzdC1kaXNwbGF5LXN3aXRjaD5cbiAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsaW1pdCQgfCBhc3luYyBhcyBsaW1pdFN0YXR1c1wiPlxuICAgIDxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiIFtwcmlvcml0eV09XCIxMFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqYzh5SWZBbGxvd2VkPVwiWydST0xFX0RFVklDRV9DT05UUk9MX0FETUlOJ11cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgICAgIHRpdGxlPVwie3sgJ0FjY2VwdCBhbGwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgKGNsaWNrKT1cImFjY2VwdEFsbCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImNhbkFjY2VwdEFsbCgpIHx8IGxpbWl0U3RhdHVzPy5pc1JlYWNoZWRcIlxuICAgICAgPlxuICAgICAgICA8aSBbYzh5SWNvbl09XCInY2hlY2snXCI+PC9pPlxuICAgICAgICB7eyAnQWNjZXB0IGFsbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuICAgIDxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiIFtwcmlvcml0eV09XCI5XCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnUmVsb2FkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwibG9hZEFsbCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZ1wiXG4gICAgICA+XG4gICAgICAgIDxpIFtjOHlJY29uXT1cIidyZWZyZXNoJ1wiIFtuZ0NsYXNzXT1cInsgJ2ljb24tc3Bpbic6IGlzTG9hZGluZyB9XCI+PC9pPlxuICAgICAgICB7eyAnUmVsb2FkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG4gICAgPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCIgKmM4eUlmQWxsb3dlZD1cIlsnUk9MRV9ERVZJQ0VfQ09OVFJPTF9BRE1JTiddXCI+XG4gICAgICA8Yzh5LXJlZ2lzdGVyLWRldmljZS1kcm9wZG93bj48L2M4eS1yZWdpc3Rlci1kZXZpY2UtZHJvcGRvd24+XG4gICAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG4gICAgPGM4eS1oZWxwIHNyYz1cIi91c2Vycy1ndWlkZS9kZXZpY2UtbWFuYWdlbWVudC8jY29ubmVjdGluZy1kZXZpY2VzXCI+PC9jOHktaGVscD5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXZpY2VSZXF1ZXN0TGlzdC5kYXRhLmxlbmd0aCA+IDA7IGVsc2Ugbm9EYXRhXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ncm91cFwiIFtuZ0NsYXNzXT1cImdyaWRPckxpc3RcIj5cbiAgICAgICAgPCEtLSBTVEFSVCBpbnRlcmFjdC1saXN0IHN0aWNreSBoZWFkZXIgU1RBUlQgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJncmlkT3JMaXN0ID09PSAnaW50ZXJhY3QtbGlzdCdcIiBjbGFzcz1cInBhZ2Utc3RpY2t5LWhlYWRlciBoaWRkZW4teHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcC1sLTQwXCI+XG4gICAgICAgICAgICAgIDxwIHRyYW5zbGF0ZT5EZXZpY2U8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIGNhcmQtY29sdW1uLTMwIHAtbC0wIG0tbC04XCI+XG4gICAgICAgICAgICAgIDxwIHRyYW5zbGF0ZT5TdGF0dXM8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIGNhcmQtY29sdW1uLTMwIHAtMFwiICpuZ0lmPVwic2hvd1Rva2VuSW5wdXRCYXNlZE9uU2VjdXJpdHlNb2RlKClcIj5cbiAgICAgICAgICAgICAgPHAgdHJhbnNsYXRlPlNlY3VyaXR5IHRva2VuPC9wPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgcG9wb3Zlcj1cInt7XG4gICAgICAgICAgICAgICAgICAnU2VjdXJpdHkgdG9rZW4gaXMgcmVxdWlyZWQgaWYgdGhlIGNvbm5lY3RlZCBkZXZpY2UgdXNlcyBpdC4nIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBbYzh5SWNvbl09XCIncXVlc3Rpb24tY2lyY2xlLW8nXCI+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGNhcmQtY29sdW1uLTUwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWNvbnRlbnRzXCIgKm5nSWY9XCJpc01hbmFnZW1lbnRUZW5hbnQ7IGVsc2Ugbm9NYW5hZ2VtZW50XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29sdW1uLTUwXCI+XG4gICAgICAgICAgICAgICAgICB7eyAnQ3JlYXRlZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb2x1bW4tMzBcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdCeWB1c2VyYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb2x1bW4tMjBcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdUZW5hbnQgSUQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vTWFuYWdlbWVudD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1jb250ZW50c1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29sdW1uLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdDcmVhdGVkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb2x1bW4tNTBcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0J5YHVzZXJgJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWFjdGlvbnMtZ3JvdXBcIiBzdHlsZT1cIm1pbi13aWR0aDogMTc2cHhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0biBidG4teHMgaW52aXNpYmxlXCI+XG4gICAgICAgICAgICAgICAgPCEtLUVNUFRZIGJ5IGRlc2lnbi0tPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSBFTkQgaW50ZXJhY3QtbGlzdCBzdGlja3kgaGVhZGVyIEVORCAtLT5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwibGltaXRTdGF0dXM/LmlzUmVhY2hlZFwiIGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC00IGNvbC1sZy0zXCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nIGNlbnRlci1ibG9ja1wiIHJvbGU9XCJhbGVydFwiPlxuICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAge3sgbGltaXRSZWFjaGVkSW5mbyQgfCBhc3luYyB9fVxuICAgICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5QbGVhc2UgY29udGFjdCB5b3VyIHBsYXRmb3JtIGFkbWluaXN0cmF0b3IuPC9zcGFuPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2luZ2xlUmVxdWVzdCBvZiBkZXZpY2VSZXF1ZXN0TGlzdC5kYXRhXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtNCBjb2wtbGctM1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWljb25cIj5cbiAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgIFtjOHlJY29uXT1cInN0YXR1c1Byb3BzW3NpbmdsZVJlcXVlc3Quc3RhdHVzXS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInN0YXR1c1Byb3BzW3NpbmdsZVJlcXVlc3Quc3RhdHVzXS5jbHNcIlxuICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImNhcmQtdGl0bGUgdGV4dC10cnVuY2F0ZVwiIHRpdGxlPVwie3sgc2luZ2xlUmVxdWVzdC5pZCB9fVwiPnt7IHNpbmdsZVJlcXVlc3QuaWQgfX08L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHRleHQtY2VudGVyIGNhcmQtY29sdW1uLTMwXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsXCIgdHJhbnNsYXRlPlN0YXR1czwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2luZ2xlUmVxdWVzdC5zdGF0dXMgPT09IHN0YXR1cy5XQUlUSU5HX0ZPUl9DT05ORUNUSU9OXCJcbiAgICAgICAgICAgICAgICAgICAgYzh5SWNvbj1cInJlZnJlc2hcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tc3BpbiB0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICAgIHt7IHN0YXR1c1Byb3BzW3NpbmdsZVJlcXVlc3Quc3RhdHVzXS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqYzh5SWZBbGxvd2VkPVwiWydST0xFX0RFVklDRV9DT05UUk9MX0FETUlOJ11cIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtYmxvY2sgdGV4dC1jZW50ZXIgY2FyZC1jb2x1bW4tMzAgcC10LTBcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncC1iLTAnOiAhc2hvdWxkU2hvd1NlY3VyaXR5VG9rZW5JbnB1dChzaW5nbGVSZXF1ZXN0KSB9XCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd1Rva2VuSW5wdXRCYXNlZE9uU2VjdXJpdHlNb2RlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG91bGRTaG93U2VjdXJpdHlUb2tlbklucHV0KHNpbmdsZVJlcXVlc3QpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ3JpZE9yTGlzdCAhPT0gJ2ludGVyYWN0LWxpc3QnXCIgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIFNlY3VyaXR5IHRva2VuXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzaW5nbGVSZXF1ZXN0LnNlY3VyaXR5VG9rZW5cIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlOiB7IGV4YW1wbGU6ICdBMWUzZ2g1ZHMnIH1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlU2VjdXJpdHlUb2tlblwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FyZC1hY3Rpb25zLWdyb3VwIGQtZmxleCBhLWktY2VudGVyIGotYy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDE3NnB4XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAnYnRuLWRhbmdlcic6IHNpbmdsZVJlcXVlc3Quc3RhdHVzID09PSBzdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFLFxuICAgICAgICAgICAgICAgICAgICAgICdidG4tZGVmYXVsdCc6IHNpbmdsZVJlcXVlc3Quc3RhdHVzICE9PSBzdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7XG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUmVxdWVzdC5zdGF0dXMgPT09IHN0YXR1cy5QRU5ESU5HX0FDQ0VQVEFOQ0VcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKCdSZW1vdmUnIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAoJ0NhbmNlbCcgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGUoc2luZ2xlUmVxdWVzdC5pZClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaW5nbGVSZXF1ZXN0LnN0YXR1cyA9PT0gc3RhdHVzLlBFTkRJTkdfQUNDRVBUQU5DRVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdSZW1vdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaW5nbGVSZXF1ZXN0LnN0YXR1cyAhPT0gc3RhdHVzLlBFTkRJTkdfQUNDRVBUQU5DRVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdBY2NlcHQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY2NlcHQoc2luZ2xlUmVxdWVzdClcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNpbmdsZVJlcXVlc3Quc3RhdHVzID09PSBzdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGlzTG9hZGluZyB8fFxuICAgICAgICAgICAgICAgICAgICAgIGxpbWl0U3RhdHVzPy5pc1JlYWNoZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoIXNpbmdsZVJlcXVlc3Quc2VjdXJpdHlUb2tlbiAmJiByZXF1aXJlU2VjdXJpdHlUb2tlbilcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0FjY2VwdCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgc2VwYXJhdG9yIHRleHQtY2VudGVyIGNhcmQtY29sdW1uLTUwXCI+XG4gICAgICAgICAgICAgICAgPHNtYWxsICpuZ0lmPVwiaXNNYW5hZ2VtZW50VGVuYW50OyBlbHNlIG5vTWFuYWdlbWVudFwiIGNsYXNzPVwiZC1jb250ZW50c1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtY29udGVudHNcIiAqbmdJZj1cInNpbmdsZVJlcXVlc3QuY3JlYXRpb25UaW1lICYmIHNpbmdsZVJlcXVlc3Qub3duZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsXCIgdHJhbnNsYXRlPkNyZWF0ZWQgb25gZGF0ZWA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1jb2x1bW4tNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBzaW5nbGVSZXF1ZXN0LmNyZWF0aW9uVGltZSB8IGM4eURhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1sLTQgbS1yLTRcIiB0cmFuc2xhdGU+YnlgdXNlcmA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1jb2x1bW4tMzBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIiB0aXRsZT1cInt7IHNpbmdsZVJlcXVlc3Qub3duZXIgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNpbmdsZVJlcXVlc3Qub3duZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tbC00IG0tci00XCIgdHJhbnNsYXRlPmluYHRlbmFudGA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1jb2x1bW4tMjBcIj57eyBzaW5nbGVSZXF1ZXN0LnRlbmFudElkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXNpbmdsZVJlcXVlc3QuY3JlYXRpb25UaW1lIHx8ICFzaW5nbGVSZXF1ZXN0Lm93bmVyXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29sdW1uLTUwXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbHVtbi0zMFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGFiZWwtc21hbGxcIiB0cmFuc2xhdGU+Q3JlYXRlZCBpbmB0ZW5hbnRgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb2x1bW4tMjBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNpbmdsZVJlcXVlc3QudGVuYW50SWQgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vTWFuYWdlbWVudD5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImQtY29udGVudHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tbC00IG0tci00XCIgdHJhbnNsYXRlPkNyZWF0ZWQgb25gZGF0ZWA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1jb2x1bW4tNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBzaW5nbGVSZXF1ZXN0LmNyZWF0aW9uVGltZSB8IGM4eURhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1sLTQgbS1yLTRcIiB0cmFuc2xhdGU+YnlgdXNlcmA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1jb2x1bW4tNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIiB0aXRsZT1cInt7IHNpbmdsZVJlcXVlc3Qub3duZXIgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNpbmdsZVJlcXVlc3Qub3duZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxjOHktbG9hZC1tb3JlXG4gICAgICAgIFtwYWdpbmddPVwiZGV2aWNlUmVxdWVzdExpc3QucGFnaW5nXCJcbiAgICAgICAgW2hpZGRlbl09XCJ0cnVlXCJcbiAgICAgICAgKG9uTG9hZCk9XCJ1cGRhdGVMaXN0KCRldmVudClcIlxuICAgICAgPjwvYzh5LWxvYWQtbW9yZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhPlxuICAgICAgPGRpdiBjbGFzcz1cImM4eS1lbXB0eS1zdGF0ZSBtLXQtNDAgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGgxIGNsYXNzPVwiYzh5LWljb24gYzh5LWljb24tZGV2aWNlLWNvbm5lY3QgYzh5LWljb24tZHVvY29sb3JcIj48L2gxPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGltaXRTdGF0dXM/LmlzUmVhY2hlZDsgZWxzZSBsaW1pdE5vdFJlYWNoZWRcIj5cbiAgICAgICAgICA8aDM+XG4gICAgICAgICAgICB7eyBsaW1pdFJlYWNoZWRJbmZvJCB8IGFzeW5jIH19XG4gICAgICAgICAgPC9oMz5cbiAgICAgICAgICA8cCB0cmFuc2xhdGU+UGxlYXNlIGNvbnRhY3QgeW91ciBwbGF0Zm9ybSBhZG1pbmlzdHJhdG9yLjwvcD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbGltaXROb3RSZWFjaGVkPlxuICAgICAgICAgIDxoMyB0cmFuc2xhdGU+Tm8gcGVuZGluZyByZWdpc3RyYXRpb25zIHRvIGRpc3BsYXkuPC9oMz5cbiAgICAgICAgICA8cCAqYzh5SWZBbGxvd2VkPVwiWydST0xFX0RFVklDRV9DT05UUk9MX0FETUlOJ11cIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBVc2UgdGhlIFwiUmVnaXN0ZXIgZGV2aWNlXCIgZHJvcGRvd24gaW4gdGhlIHRvcCByaWdodCBjb3JuZXIuXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLXJlZ2lzdHJhdGlvbi12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3JlZ2lzdGVyLWRldmljZS9kZXZpY2UtcmVnaXN0cmF0aW9uLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vcmVnaXN0ZXItZGV2aWNlL2RldmljZS1yZWdpc3RyYXRpb24tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLHdCQUF3QixFQUl6QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUNMLDhCQUE4QixFQUU5QixlQUFlLEVBQ2YsWUFBWSxFQUNaLE1BQU0sRUFDTixPQUFPLEVBQ1AsY0FBYyxFQUNmLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7O0FBTXZELE1BQU0sT0FBTywrQkFBK0I7SUF3QzFDLFlBQ1UscUJBQTRDLEVBQzVDLHdCQUF3RCxFQUN4RCxlQUFnQyxFQUNoQyxZQUEwQixFQUMxQixnQkFBa0MsRUFDbEMsY0FBOEI7UUFMOUIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1Qyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQWdDO1FBQ3hELG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQXZDeEMseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBQ3RDLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUNwQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGVBQVUsR0FBc0MsZUFBZSxDQUFDO1FBQ2hFLFdBQU0sR0FBRyx3QkFBd0IsQ0FBQztRQUV6QixnQkFBVyxHQUFHO1lBQ3JCLENBQUMsd0JBQXdCLENBQUMsc0JBQXNCLENBQUMsRUFBRTtnQkFDakQsS0FBSyxFQUFFLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztnQkFDeEMsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsR0FBRyxFQUFFLGFBQWE7YUFDbkI7WUFDRCxDQUFDLHdCQUF3QixDQUFDLGtCQUFrQixDQUFDLEVBQUU7Z0JBQzdDLEtBQUssRUFBRSxPQUFPLENBQUMsb0JBQW9CLENBQUM7Z0JBQ3BDLElBQUksRUFBRSxRQUFRO2dCQUNkLEdBQUcsRUFBRSxXQUFXO2FBQ2pCO1lBQ0QsQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDbkMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUM7Z0JBQzFCLElBQUksRUFBRSxjQUFjO2dCQUNwQixHQUFHLEVBQUUsY0FBYzthQUNwQjtZQUNELENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO2dCQUN6QixJQUFJLEVBQUUsS0FBSztnQkFDWCxHQUFHLEVBQUUsYUFBYTthQUNuQjtTQUNGLENBQUM7UUFFTSxpQkFBWSxHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLHlCQUFvQixHQUNuQyxJQUFJLGVBQWUsQ0FBQyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQVM1RCxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBRS9CLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FDaEYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNWLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRTtnQkFDckIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyx3QkFBd0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hGLGVBQWU7YUFDaEIsQ0FBQztZQUNGLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtTQUNuQixDQUFDLENBQUMsQ0FDSixDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDO1FBQ2hELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDdkMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsRUFDcEUsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQzFCLE9BQU8sQ0FDTCx1RkFBdUYsQ0FDeEYsRUFDRCxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FDdEIsQ0FDRixDQUNGLENBQUM7UUFDRixJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUTthQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNsQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUMsd0JBQXdCO2FBQzFCLFNBQVMsRUFBRTthQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2xDLFNBQVMsQ0FBQyxDQUFDLFNBQW1DLEVBQUUsRUFBRTtZQUNqRCxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQUk7UUFDYixJQUFJLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBVTtRQUNyQixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUMvQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsRUFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FDM0IsT0FBTyxDQUNMLHNGQUFzRixDQUN2RixFQUNELEVBQUUsRUFBRSxFQUFFLENBQ1AsRUFDRCxNQUFNLENBQUMsTUFBTSxFQUNiO1lBQ0UsRUFBRSxFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztZQUNsQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUN6QixDQUNGLENBQUM7UUFFRixJQUFJLFNBQVMsRUFBRTtZQUNiLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQTRCO1FBQ2pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLENBQ25FLHdCQUF3QixDQUFDLGtCQUFrQixDQUM1QyxDQUFDO1FBQ0YsT0FBTyxDQUFDLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsV0FBVyxDQUFDLFNBQTRDO1FBQ3RELElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0lBQzlCLENBQUM7SUFFRCxLQUFLLENBQUMsdUJBQXVCO1FBQzNCLE1BQU0sSUFBSSxHQUNSLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FDeEMscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN2Qiw4QkFBOEIsQ0FBQyxRQUFRLENBQ3hDLENBQW1DLENBQUM7UUFDdkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxLQUFLLDhCQUE4QixDQUFDLFFBQVEsQ0FBQztJQUMvRSxDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQjtRQUN6QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUVELDRCQUE0QixDQUFDLElBQXlCO1FBQ3BELE9BQU8sQ0FDTCxJQUFJO1lBQ0osSUFBSSxDQUFDLE1BQU0sS0FBSyx3QkFBd0IsQ0FBQyxrQkFBa0I7WUFDM0QsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQ3pDLENBQUM7SUFDSixDQUFDO0lBRUQsaUNBQWlDO1FBQy9CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxLQUFLLDhCQUE4QixDQUFDLE9BQU8sQ0FBQztJQUN6RixDQUFDOzs0SEFyS1UsK0JBQStCO2dIQUEvQiwrQkFBK0Isb0VDM0I1Qyxta1pBZ1NBOzJGRHJRYSwrQkFBK0I7a0JBSjNDLFNBQVM7K0JBQ0UsOEJBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRGV2aWNlUmVnaXN0cmF0aW9uU2VjdXJpdHlNb2RlLFxuICBEZXZpY2VSZWdpc3RyYXRpb25TdGF0dXMsXG4gIElEZXZpY2VSZWdpc3RyYXRpb24sXG4gIElEZXZpY2VSZWdpc3RyYXRpb25MaW1pdCxcbiAgUGFnaW5nXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRGV2aWNlQm9vdHN0cmFwUmVhbHRpbWVTZXJ2aWNlLFxuICBJUmVhbHRpbWVEZXZpY2VCb290c3RyYXAsXG4gIFRlbmFudFVpU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLFxuICBTdGF0dXMsXG4gIGdldHRleHQsXG4gIE9wdGlvbnNTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgUmVnaXN0ZXJEZXZpY2VTZXJ2aWNlIH0gZnJvbSAnLi9yZWdpc3Rlci1kZXZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBzb3J0QnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGV2aWNlLXJlZ2lzdHJhdGlvbi12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICdkZXZpY2UtcmVnaXN0cmF0aW9uLXZpZXcuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERldmljZVJlZ2lzdHJhdGlvblZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGRldmljZVJlcXVlc3RzJDogT2JzZXJ2YWJsZTx7XG4gICAgZGF0YTogSURldmljZVJlZ2lzdHJhdGlvbltdO1xuICAgIHBhZ2luZz86IFBhZ2luZzxJRGV2aWNlUmVnaXN0cmF0aW9uPjtcbiAgfT47XG4gIGxpbWl0JDogT2JzZXJ2YWJsZTxJRGV2aWNlUmVnaXN0cmF0aW9uTGltaXQ+O1xuICBsaW1pdFJlYWNoZWRJbmZvJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICByZXF1aXJlU2VjdXJpdHlUb2tlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc01hbmFnZW1lbnRUZW5hbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGdyaWRPckxpc3Q6ICdpbnRlcmFjdC1saXN0JyB8ICdpbnRlcmFjdC1ncmlkJyA9ICdpbnRlcmFjdC1ncmlkJztcbiAgc3RhdHVzID0gRGV2aWNlUmVnaXN0cmF0aW9uU3RhdHVzO1xuXG4gIHJlYWRvbmx5IHN0YXR1c1Byb3BzID0ge1xuICAgIFtEZXZpY2VSZWdpc3RyYXRpb25TdGF0dXMuV0FJVElOR19GT1JfQ09OTkVDVElPTl06IHtcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdXYWl0aW5nIGZvciBjb25uZWN0aW9uJyksXG4gICAgICBpY29uOiAndW5saW5rJyxcbiAgICAgIGNsczogJ3RleHQtZGFuZ2VyJ1xuICAgIH0sXG4gICAgW0RldmljZVJlZ2lzdHJhdGlvblN0YXR1cy5QRU5ESU5HX0FDQ0VQVEFOQ0VdOiB7XG4gICAgICBsYWJlbDogZ2V0dGV4dCgnUGVuZGluZyBhY2NlcHRhbmNlJyksXG4gICAgICBpY29uOiAnY2lyY2xlJyxcbiAgICAgIGNsczogJ3RleHQtaW5mbydcbiAgICB9LFxuICAgIFtEZXZpY2VSZWdpc3RyYXRpb25TdGF0dXMuQUNDRVBURURdOiB7XG4gICAgICBsYWJlbDogZ2V0dGV4dCgnQWNjZXB0ZWQnKSxcbiAgICAgIGljb246ICdjaGVjay1jaXJjbGUnLFxuICAgICAgY2xzOiAndGV4dC1zdWNjZXNzJ1xuICAgIH0sXG4gICAgW0RldmljZVJlZ2lzdHJhdGlvblN0YXR1cy5CTE9DS0VEXToge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ0Jsb2NrZWQnKSxcbiAgICAgIGljb246ICdiYW4nLFxuICAgICAgY2xzOiAndGV4dC1kYW5nZXInXG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmUkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZWN1cml0eVRva2VuUG9saWN5OiBCZWhhdmlvclN1YmplY3Q8RGV2aWNlUmVnaXN0cmF0aW9uU2VjdXJpdHlNb2RlPiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdChEZXZpY2VSZWdpc3RyYXRpb25TZWN1cml0eU1vZGUuT1BUSU9OQUwpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVnaXN0ZXJEZXZpY2VTZXJ2aWNlOiBSZWdpc3RlckRldmljZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBib290c3RyYXBSZWFsdGltZVNlcnZpY2U6IERldmljZUJvb3RzdHJhcFJlYWx0aW1lU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFVpU2VydmljZTogVGVuYW50VWlTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3B0aW9uc1NlcnZpY2U6IE9wdGlvbnNTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRBbGwoKTtcbiAgICB0aGlzLnNldElzTWFuYWdlbWVudFRlbmFudCgpO1xuICAgIHRoaXMuc2V0UmVxdWlyZVNlY3VyaXR5VG9rZW4oKTtcblxuICAgIHRoaXMuZGV2aWNlUmVxdWVzdHMkID0gdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2UuZGV2aWNlUmVnaXN0cmF0aW9uUmVxdWVzdHMkLnBpcGUoXG4gICAgICBtYXAocmVxID0+ICh7XG4gICAgICAgIGRhdGE6IHNvcnRCeShyZXEuZGF0YSwgW1xuICAgICAgICAgICh7IHN0YXR1cyB9KSA9PiAoc3RhdHVzID09PSBEZXZpY2VSZWdpc3RyYXRpb25TdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFID8gMCA6IDEpLFxuICAgICAgICAgICctY3JlYXRpb25UaW1lJ1xuICAgICAgICBdKSxcbiAgICAgICAgcGFnaW5nOiByZXEucGFnaW5nXG4gICAgICB9KSlcbiAgICApO1xuICAgIHRoaXMubGltaXQkID0gdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2UubGltaXQkO1xuICAgIHRoaXMubGltaXRSZWFjaGVkSW5mbyQgPSB0aGlzLmxpbWl0JC5waXBlKFxuICAgICAgZmlsdGVyKGRldmljZVJlZ2lzdHJhdGlvbkxpbWl0ID0+IGRldmljZVJlZ2lzdHJhdGlvbkxpbWl0LmlzUmVhY2hlZCksXG4gICAgICBzd2l0Y2hNYXAoKHsgbGltaXQgfSkgPT5cbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbShcbiAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgJ1lvdSByZWFjaGVkIHRoZSBsaW1pdCBvZiB7eyBtYXhEZXZpY2VzIH19IGRldmljZXMuIE5vIG1vcmUgZGV2aWNlcyBjYW4gYmUgcmVnaXN0ZXJlZC4nXG4gICAgICAgICAgKSxcbiAgICAgICAgICB7IG1heERldmljZXM6IGxpbWl0IH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2UubG9hZGluZyRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAuc3Vic2NyaWJlKHZhbHVlID0+ICh0aGlzLmlzTG9hZGluZyA9IHZhbHVlKSk7XG5cbiAgICB0aGlzLmJvb3RzdHJhcFJlYWx0aW1lU2VydmljZVxuICAgICAgLm9uVXBkYXRlJCgpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgLnN1YnNjcmliZSgoYm9vdHN0cmFwOiBJUmVhbHRpbWVEZXZpY2VCb290c3RyYXApID0+IHtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2Uub25EZXZpY2VCb290c3RyYXAoYm9vdHN0cmFwKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cblxuICB1cGRhdGVMaXN0KGRhdGEpIHtcbiAgICB0aGlzLnJlZ2lzdGVyRGV2aWNlU2VydmljZS5pbnRlcm5hbExpc3RVcGRhdGUoZGF0YSk7XG4gIH1cblxuICBhc3luYyBkZWxldGUoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICBnZXR0ZXh0KCdDYW5jZWwgZGV2aWNlIHJlZ2lzdHJhdGlvbicpLFxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgIGdldHRleHQoXG4gICAgICAgICAgJ1lvdSBhcmUgYWJvdXQgdG8gY2FuY2VsIGRldmljZSByZWdpc3RyYXRpb24gZm9yIElEIFwie3tpZH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICAgICApLFxuICAgICAgICB7IGlkIH1cbiAgICAgICksXG4gICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAge1xuICAgICAgICBvazogZ2V0dGV4dCgnQ2FuY2VsIHJlZ2lzdHJhdGlvbicpLFxuICAgICAgICBjYW5jZWw6IGdldHRleHQoJ0Nsb3NlJylcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKGNvbmZpcm1lZCkge1xuICAgICAgdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2UucmVtb3ZlKGlkKTtcbiAgICB9XG4gIH1cblxuICBhY2NlcHQocmVxdWVzdDogSURldmljZVJlZ2lzdHJhdGlvbikge1xuICAgIHRoaXMucmVnaXN0ZXJEZXZpY2VTZXJ2aWNlLmFjY2VwdChyZXF1ZXN0KTtcbiAgfVxuXG4gIGFjY2VwdEFsbCgpIHtcbiAgICB0aGlzLnJlZ2lzdGVyRGV2aWNlU2VydmljZS5hY2NlcHRBbGwoKTtcbiAgfVxuXG4gIGNhbkFjY2VwdEFsbCgpIHtcbiAgICBjb25zdCBwZW5kaW5nUmVxdWVzdHMgPSB0aGlzLnJlZ2lzdGVyRGV2aWNlU2VydmljZS5nZXRSZXF1ZXN0QnlTdGF0dXMoXG4gICAgICBEZXZpY2VSZWdpc3RyYXRpb25TdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFXG4gICAgKTtcbiAgICByZXR1cm4gIShwZW5kaW5nUmVxdWVzdHMubGVuZ3RoID4gMCAmJiAhdGhpcy5yZXF1aXJlU2VjdXJpdHlUb2tlbik7XG4gIH1cblxuICBsb2FkQWxsKCkge1xuICAgIHRoaXMucmVnaXN0ZXJEZXZpY2VTZXJ2aWNlLmxpc3QoKTtcbiAgfVxuXG4gIGRpc3BsYXlNb2RlKGxpc3RDbGFzczogJ2ludGVyYWN0LWxpc3QnIHwgJ2ludGVyYWN0LWdyaWQnKSB7XG4gICAgdGhpcy5ncmlkT3JMaXN0ID0gbGlzdENsYXNzO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVxdWlyZVNlY3VyaXR5VG9rZW4oKSB7XG4gICAgY29uc3QgbW9kZTogRGV2aWNlUmVnaXN0cmF0aW9uU2VjdXJpdHlNb2RlID1cbiAgICAgIChhd2FpdCB0aGlzLm9wdGlvbnNTZXJ2aWNlLmdldFRlbmFudE9wdGlvbjxEZXZpY2VSZWdpc3RyYXRpb25TZWN1cml0eU1vZGU+KFxuICAgICAgICAnZGV2aWNlLXJlZ2lzdHJhdGlvbicsXG4gICAgICAgICdzZWN1cml0eS10b2tlbi5wb2xpY3knLFxuICAgICAgICBEZXZpY2VSZWdpc3RyYXRpb25TZWN1cml0eU1vZGUuT1BUSU9OQUxcbiAgICAgICkpIGFzIERldmljZVJlZ2lzdHJhdGlvblNlY3VyaXR5TW9kZTtcbiAgICB0aGlzLl9zZWN1cml0eVRva2VuUG9saWN5Lm5leHQobW9kZSk7XG4gICAgdGhpcy5yZXF1aXJlU2VjdXJpdHlUb2tlbiA9IG1vZGUgPT09IERldmljZVJlZ2lzdHJhdGlvblNlY3VyaXR5TW9kZS5SRVFVSVJFRDtcbiAgfVxuXG4gIGFzeW5jIHNldElzTWFuYWdlbWVudFRlbmFudCgpIHtcbiAgICB0aGlzLmlzTWFuYWdlbWVudFRlbmFudCA9IGF3YWl0IHRoaXMudGVuYW50VWlTZXJ2aWNlLmlzTWFuYWdlbWVudFRlbmFudCgpO1xuICB9XG5cbiAgc2hvdWxkU2hvd1NlY3VyaXR5VG9rZW5JbnB1dChkYXRhOiBJRGV2aWNlUmVnaXN0cmF0aW9uKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGRhdGEgJiZcbiAgICAgIGRhdGEuc3RhdHVzID09PSBEZXZpY2VSZWdpc3RyYXRpb25TdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFICYmXG4gICAgICB0aGlzLnNob3dUb2tlbklucHV0QmFzZWRPblNlY3VyaXR5TW9kZSgpXG4gICAgKTtcbiAgfVxuXG4gIHNob3dUb2tlbklucHV0QmFzZWRPblNlY3VyaXR5TW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdXJpdHlUb2tlblBvbGljeS5nZXRWYWx1ZSgpICE9PSBEZXZpY2VSZWdpc3RyYXRpb25TZWN1cml0eU1vZGUuSUdOT1JFRDtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImRldmljZVJlcXVlc3RzJCB8IGFzeW5jIGFzIGRldmljZVJlcXVlc3RMaXN0XCI+XG4gIDxjOHktdGl0bGU+XG4gICAge3sgJ0RldmljZSByZWdpc3RyYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgPHNtYWxsICpuZ0lmPVwiZGV2aWNlUmVxdWVzdExpc3QuZGF0YS5sZW5ndGggPT09IDFcIj4xIHt7ICduZXcgZGV2aWNlJyB8IHRyYW5zbGF0ZSB9fTwvc21hbGw+XG4gICAgPHNtYWxsICpuZ0lmPVwiZGV2aWNlUmVxdWVzdExpc3QuZGF0YS5sZW5ndGggPiAxXCI+XG4gICAgICB7eyBkZXZpY2VSZXF1ZXN0TGlzdC5kYXRhLmxlbmd0aCB9fSB7eyAnbmV3IGRldmljZXMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9zbWFsbD5cbiAgPC9jOHktdGl0bGU+XG5cbiAgPGM4eS1icmVhZGNydW1iPlxuICAgIDxjOHktYnJlYWRjcnVtYi1pdGVtIFtpY29uXT1cIidleGNoYW5nZSdcIiBbbGFiZWxdPVwiJ0RldmljZXMnIHwgdHJhbnNsYXRlXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICAgIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgICBbaWNvbl09XCInYzh5LWRldmljZS1jb25uZWN0J1wiXG4gICAgICBbbGFiZWxdPVwiJ0RldmljZSByZWdpc3RyYXRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8L2M4eS1icmVhZGNydW1iPlxuXG4gIDxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ2xlZnQnXCIgaXRlbUNsYXNzPVwibmF2YmFyLWZvcm0gaGlkZGVuLXhzXCI+XG4gICAgPGM4eS1saXN0LWRpc3BsYXktc3dpdGNoIChvbkxpc3RDbGFzc0NoYW5nZSk9XCJkaXNwbGF5TW9kZSgkZXZlbnQpXCI+PC9jOHktbGlzdC1kaXNwbGF5LXN3aXRjaD5cbiAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsaW1pdCQgfCBhc3luYyBhcyBsaW1pdFN0YXR1c1wiPlxuICAgIDxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiIFtwcmlvcml0eV09XCIxMFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqYzh5SWZBbGxvd2VkPVwiWydST0xFX0RFVklDRV9DT05UUk9MX0FETUlOJ11cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgICAgIHRpdGxlPVwie3sgJ0FjY2VwdCBhbGwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgKGNsaWNrKT1cImFjY2VwdEFsbCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImNhbkFjY2VwdEFsbCgpIHx8IGxpbWl0U3RhdHVzPy5pc1JlYWNoZWRcIlxuICAgICAgPlxuICAgICAgICA8aSBbYzh5SWNvbl09XCInY2hlY2snXCI+PC9pPlxuICAgICAgICB7eyAnQWNjZXB0IGFsbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuICAgIDxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiIFtwcmlvcml0eV09XCI5XCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnUmVsb2FkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwibG9hZEFsbCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZ1wiXG4gICAgICA+XG4gICAgICAgIDxpIFtjOHlJY29uXT1cIidyZWZyZXNoJ1wiIFtuZ0NsYXNzXT1cInsgJ2ljb24tc3Bpbic6IGlzTG9hZGluZyB9XCI+PC9pPlxuICAgICAgICB7eyAnUmVsb2FkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG4gICAgPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCIgKmM4eUlmQWxsb3dlZD1cIlsnUk9MRV9ERVZJQ0VfQ09OVFJPTF9BRE1JTiddXCI+XG4gICAgICA8Yzh5LXJlZ2lzdGVyLWRldmljZS1kcm9wZG93bj48L2M4eS1yZWdpc3Rlci1kZXZpY2UtZHJvcGRvd24+XG4gICAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG4gICAgPGM4eS1oZWxwIHNyYz1cIi91c2Vycy1ndWlkZS9kZXZpY2UtbWFuYWdlbWVudC8jY29ubmVjdGluZy1kZXZpY2VzXCI+PC9jOHktaGVscD5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXZpY2VSZXF1ZXN0TGlzdC5kYXRhLmxlbmd0aCA+IDA7IGVsc2Ugbm9EYXRhXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ncm91cFwiIFtuZ0NsYXNzXT1cImdyaWRPckxpc3RcIj5cbiAgICAgICAgPCEtLSBTVEFSVCBpbnRlcmFjdC1saXN0IHN0aWNreSBoZWFkZXIgU1RBUlQgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJncmlkT3JMaXN0ID09PSAnaW50ZXJhY3QtbGlzdCdcIiBjbGFzcz1cInBhZ2Utc3RpY2t5LWhlYWRlciBoaWRkZW4teHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcC1sLTQwXCI+XG4gICAgICAgICAgICAgIDxwIHRyYW5zbGF0ZT5EZXZpY2U8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIGNhcmQtY29sdW1uLTMwIHAtbC0wIG0tbC04XCI+XG4gICAgICAgICAgICAgIDxwIHRyYW5zbGF0ZT5TdGF0dXM8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIGNhcmQtY29sdW1uLTMwIHAtMFwiICpuZ0lmPVwic2hvd1Rva2VuSW5wdXRCYXNlZE9uU2VjdXJpdHlNb2RlKClcIj5cbiAgICAgICAgICAgICAgPHAgdHJhbnNsYXRlPlNlY3VyaXR5IHRva2VuPC9wPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgcG9wb3Zlcj1cInt7XG4gICAgICAgICAgICAgICAgICAnU2VjdXJpdHkgdG9rZW4gaXMgcmVxdWlyZWQgaWYgdGhlIGNvbm5lY3RlZCBkZXZpY2UgdXNlcyBpdC4nIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBbYzh5SWNvbl09XCIncXVlc3Rpb24tY2lyY2xlLW8nXCI+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGNhcmQtY29sdW1uLTUwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWNvbnRlbnRzXCIgKm5nSWY9XCJpc01hbmFnZW1lbnRUZW5hbnQ7IGVsc2Ugbm9NYW5hZ2VtZW50XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29sdW1uLTUwXCI+XG4gICAgICAgICAgICAgICAgICB7eyAnQ3JlYXRlZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb2x1bW4tMzBcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdCeWB1c2VyYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb2x1bW4tMjBcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdUZW5hbnQgSUQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vTWFuYWdlbWVudD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1jb250ZW50c1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29sdW1uLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdDcmVhdGVkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb2x1bW4tNTBcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0J5YHVzZXJgJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWFjdGlvbnMtZ3JvdXBcIiBzdHlsZT1cIm1pbi13aWR0aDogMTc2cHhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0biBidG4teHMgaW52aXNpYmxlXCI+XG4gICAgICAgICAgICAgICAgPCEtLUVNUFRZIGJ5IGRlc2lnbi0tPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSBFTkQgaW50ZXJhY3QtbGlzdCBzdGlja3kgaGVhZGVyIEVORCAtLT5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwibGltaXRTdGF0dXM/LmlzUmVhY2hlZFwiIGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC00IGNvbC1sZy0zXCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nIGNlbnRlci1ibG9ja1wiIHJvbGU9XCJhbGVydFwiPlxuICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAge3sgbGltaXRSZWFjaGVkSW5mbyQgfCBhc3luYyB9fVxuICAgICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5QbGVhc2UgY29udGFjdCB5b3VyIHBsYXRmb3JtIGFkbWluaXN0cmF0b3IuPC9zcGFuPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2luZ2xlUmVxdWVzdCBvZiBkZXZpY2VSZXF1ZXN0TGlzdC5kYXRhXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtNCBjb2wtbGctM1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWljb25cIj5cbiAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgIFtjOHlJY29uXT1cInN0YXR1c1Byb3BzW3NpbmdsZVJlcXVlc3Quc3RhdHVzXS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInN0YXR1c1Byb3BzW3NpbmdsZVJlcXVlc3Quc3RhdHVzXS5jbHNcIlxuICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImNhcmQtdGl0bGUgdGV4dC10cnVuY2F0ZVwiIHRpdGxlPVwie3sgc2luZ2xlUmVxdWVzdC5pZCB9fVwiPnt7IHNpbmdsZVJlcXVlc3QuaWQgfX08L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHRleHQtY2VudGVyIGNhcmQtY29sdW1uLTMwXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsXCIgdHJhbnNsYXRlPlN0YXR1czwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2luZ2xlUmVxdWVzdC5zdGF0dXMgPT09IHN0YXR1cy5XQUlUSU5HX0ZPUl9DT05ORUNUSU9OXCJcbiAgICAgICAgICAgICAgICAgICAgYzh5SWNvbj1cInJlZnJlc2hcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tc3BpbiB0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICAgIHt7IHN0YXR1c1Byb3BzW3NpbmdsZVJlcXVlc3Quc3RhdHVzXS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqYzh5SWZBbGxvd2VkPVwiWydST0xFX0RFVklDRV9DT05UUk9MX0FETUlOJ11cIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtYmxvY2sgdGV4dC1jZW50ZXIgY2FyZC1jb2x1bW4tMzAgcC10LTBcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncC1iLTAnOiAhc2hvdWxkU2hvd1NlY3VyaXR5VG9rZW5JbnB1dChzaW5nbGVSZXF1ZXN0KSB9XCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd1Rva2VuSW5wdXRCYXNlZE9uU2VjdXJpdHlNb2RlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG91bGRTaG93U2VjdXJpdHlUb2tlbklucHV0KHNpbmdsZVJlcXVlc3QpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ3JpZE9yTGlzdCAhPT0gJ2ludGVyYWN0LWxpc3QnXCIgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIFNlY3VyaXR5IHRva2VuXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzaW5nbGVSZXF1ZXN0LnNlY3VyaXR5VG9rZW5cIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlOiB7IGV4YW1wbGU6ICdBMWUzZ2g1ZHMnIH1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlU2VjdXJpdHlUb2tlblwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FyZC1hY3Rpb25zLWdyb3VwIGQtZmxleCBhLWktY2VudGVyIGotYy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDE3NnB4XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAnYnRuLWRhbmdlcic6IHNpbmdsZVJlcXVlc3Quc3RhdHVzID09PSBzdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFLFxuICAgICAgICAgICAgICAgICAgICAgICdidG4tZGVmYXVsdCc6IHNpbmdsZVJlcXVlc3Quc3RhdHVzICE9PSBzdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7XG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUmVxdWVzdC5zdGF0dXMgPT09IHN0YXR1cy5QRU5ESU5HX0FDQ0VQVEFOQ0VcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKCdSZW1vdmUnIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAoJ0NhbmNlbCcgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGUoc2luZ2xlUmVxdWVzdC5pZClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaW5nbGVSZXF1ZXN0LnN0YXR1cyA9PT0gc3RhdHVzLlBFTkRJTkdfQUNDRVBUQU5DRVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdSZW1vdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaW5nbGVSZXF1ZXN0LnN0YXR1cyAhPT0gc3RhdHVzLlBFTkRJTkdfQUNDRVBUQU5DRVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdBY2NlcHQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY2NlcHQoc2luZ2xlUmVxdWVzdClcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNpbmdsZVJlcXVlc3Quc3RhdHVzID09PSBzdGF0dXMuUEVORElOR19BQ0NFUFRBTkNFXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGlzTG9hZGluZyB8fFxuICAgICAgICAgICAgICAgICAgICAgIGxpbWl0U3RhdHVzPy5pc1JlYWNoZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoIXNpbmdsZVJlcXVlc3Quc2VjdXJpdHlUb2tlbiAmJiByZXF1aXJlU2VjdXJpdHlUb2tlbilcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0FjY2VwdCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgc2VwYXJhdG9yIHRleHQtY2VudGVyIGNhcmQtY29sdW1uLTUwXCI+XG4gICAgICAgICAgICAgICAgPHNtYWxsICpuZ0lmPVwiaXNNYW5hZ2VtZW50VGVuYW50OyBlbHNlIG5vTWFuYWdlbWVudFwiIGNsYXNzPVwiZC1jb250ZW50c1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtY29udGVudHNcIiAqbmdJZj1cInNpbmdsZVJlcXVlc3QuY3JlYXRpb25UaW1lICYmIHNpbmdsZVJlcXVlc3Qub3duZXJcIj5cbiAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtY29sdW1uLTUwXCIgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWwtNCBtLXItNFwiIHRyYW5zbGF0ZT5DcmVhdGVkIG9uYGRhdGVgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtY3k9XCJkZXZpY2UtcmVnaXN0cmF0aW9uLS1jcmVhdGlvbi1kYXRlXCI+e3sgc2luZ2xlUmVxdWVzdC5jcmVhdGlvblRpbWUgfCBjOHlEYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1jb2x1bW4tMzAgdGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWwtNCBtLXItNFwiIHRyYW5zbGF0ZT5ieWB1c2VyYDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWN5PVwiZGV2aWNlLXJlZ2lzdHJhdGlvbi0tY3JlYXRlZC1ieVwiIHRpdGxlPVwie3sgc2luZ2xlUmVxdWVzdC5vd25lciB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2luZ2xlUmVxdWVzdC5vd25lciB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtY29sdW1uLTIwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tbC00IG0tci00XCIgdHJhbnNsYXRlPmluYHRlbmFudGA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgc2luZ2xlUmVxdWVzdC50ZW5hbnRJZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXNpbmdsZVJlcXVlc3QuY3JlYXRpb25UaW1lIHx8ICFzaW5nbGVSZXF1ZXN0Lm93bmVyXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29sdW1uLTUwXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbHVtbi0zMFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGFiZWwtc21hbGxcIiB0cmFuc2xhdGU+Q3JlYXRlZCBpbmB0ZW5hbnRgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb2x1bW4tMjBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNpbmdsZVJlcXVlc3QudGVuYW50SWQgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vTWFuYWdlbWVudD5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImQtY29udGVudHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWNvbHVtbi01MFwiID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1sLTQgbS1yLTRcIiB0cmFuc2xhdGU+Q3JlYXRlZCBvbmBkYXRlYDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWN5PVwiZGV2aWNlLXJlZ2lzdHJhdGlvbi0tY3JlYXRpb24tZGF0ZVwiPnt7IHNpbmdsZVJlcXVlc3QuY3JlYXRpb25UaW1lIHwgYzh5RGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtY29sdW1uLTUwIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1sLTQgbS1yLTRcIiB0cmFuc2xhdGU+YnlgdXNlcmA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1jeT1cImRldmljZS1yZWdpc3RyYXRpb24tLWNyZWF0ZWQtYnlcIiB0aXRsZT1cInt7IHNpbmdsZVJlcXVlc3Qub3duZXIgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNpbmdsZVJlcXVlc3Qub3duZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxjOHktbG9hZC1tb3JlXG4gICAgICAgIFtwYWdpbmddPVwiZGV2aWNlUmVxdWVzdExpc3QucGFnaW5nXCJcbiAgICAgICAgW2hpZGRlbl09XCJ0cnVlXCJcbiAgICAgICAgKG9uTG9hZCk9XCJ1cGRhdGVMaXN0KCRldmVudClcIlxuICAgICAgPjwvYzh5LWxvYWQtbW9yZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhPlxuICAgICAgPGRpdiBjbGFzcz1cImM4eS1lbXB0eS1zdGF0ZSBtLXQtNDAgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGgxIGNsYXNzPVwiYzh5LWljb24gYzh5LWljb24tZGV2aWNlLWNvbm5lY3QgYzh5LWljb24tZHVvY29sb3JcIj48L2gxPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGltaXRTdGF0dXM/LmlzUmVhY2hlZDsgZWxzZSBsaW1pdE5vdFJlYWNoZWRcIj5cbiAgICAgICAgICA8aDM+XG4gICAgICAgICAgICB7eyBsaW1pdFJlYWNoZWRJbmZvJCB8IGFzeW5jIH19XG4gICAgICAgICAgPC9oMz5cbiAgICAgICAgICA8cCB0cmFuc2xhdGU+UGxlYXNlIGNvbnRhY3QgeW91ciBwbGF0Zm9ybSBhZG1pbmlzdHJhdG9yLjwvcD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbGltaXROb3RSZWFjaGVkPlxuICAgICAgICAgIDxoMyB0cmFuc2xhdGU+Tm8gcGVuZGluZyByZWdpc3RyYXRpb25zIHRvIGRpc3BsYXkuPC9oMz5cbiAgICAgICAgICA8cCAqYzh5SWZBbGxvd2VkPVwiWydST0xFX0RFVklDRV9DT05UUk9MX0FETUlOJ11cIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBVc2UgdGhlIFwiUmVnaXN0ZXIgZGV2aWNlXCIgZHJvcGRvd24gaW4gdGhlIHRvcCByaWdodCBjb3JuZXIuXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
@@ -2976,10 +2976,10 @@ class ReportDashboardListComponent {
|
|
|
2976
2976
|
}
|
|
2977
2977
|
}
|
|
2978
2978
|
ReportDashboardListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ReportDashboardListComponent, deps: [{ token: i1.InventoryService }, { token: ContextDashboardService }, { token: i3$1.BsModalService }, { token: i3.TranslateService }, { token: i2.ModalService }, { token: i2.AlertService }, { token: ReportDashboardService }, { token: i2.Permissions }], target: i0.ɵɵFactoryTarget.Component });
|
|
2979
|
-
ReportDashboardListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ReportDashboardListComponent, selector: "c8y-report-dashboard-list", viewQueries: [{ propertyName: "filter", first: true, predicate: FilterInputComponent, descendants: true }], ngImport: i0, template: "<c8y-title>\n {{ 'Reports' | translate }}\n</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'left'\" itemClass=\"navbar-form\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n type=\"search\"\n [attr.aria-label]=\"'Filter' | translate\"\n placeholder=\"{{ 'Filter\u2026' | translate }}\"\n [ngModel]=\"textFilter$ | async\"\n (ngModelChange)=\"textFilter$.next($event)\"\n />\n <span class=\"input-group-addon\">\n <i c8yIcon=\"search\" *ngIf=\"(textFilter$ | async).length === 0\"></i>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n *ngIf=\"(textFilter$ | async).length > 0\"\n (click)=\"textFilter$.next('')\"\n px-event=\"Clear filtering reports\"\n ></i>\n </span>\n </div>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add report' | translate }}\"\n [attr.data-cy]=\"'reports-add-report-action-bar-button'\"\n type=\"button\"\n (click)=\"add()\"\n [disabled]=\"!canAddReport\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add report' | translate }}\n </button>\n <button\n *ngIf=\"!canAddReport\"\n class=\"btn btn-dot m-r-16\"\n popover=\"{{ 'You don\\'t have permission to add reports' | translate }}\"\n triggers=\"focus\"\n placement=\"top\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'info-circle'\" class=\"text-primary\"></i>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadReports()\"\n >\n <i [ngClass]=\"{ 'icon-spin': reloading }\" c8yIcon=\"refresh\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/users-guide/cockpit/#reports\"></c8y-help>\n\n<c8y-list-group>\n <c8y-li\n class=\"page-sticky-header hidden-xs hidden-sm\"\n *ngIf=\"(reports$ | async)?.data.length > 0\"\n >\n <c8y-li-icon>\n <i class=\"p-l-24\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-3\">\n {{ 'Report' | translate }}\n </div>\n <div class=\"col-6\">\n {{ 'Description' | translate }}\n </div>\n <div class=\"col-2\">\n {{ 'Show in navigator' | translate }}\n </div>\n </c8y-li-body>\n </c8y-li>\n\n <c8y-li *c8yFor=\"let report of reports$; let i = index; loadMore: 'auto'\">\n <c8y-li-icon [icon]=\"report.icon\"></c8y-li-icon>\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-3\">\n <button\n class=\"btn-clean\"\n title=\"{{ report.name }}\"\n type=\"button\"\n routerLink=\"/reports/{{ report.id }}\"\n >\n <span class=\"text-truncate\">\n {{ report.name }}\n </span>\n </button>\n </div>\n <div class=\"col-6\">\n <p class=\"small text-truncate-wrap\">\n <em class=\"text-muted\" *ngIf=\"!report.description; else showDescription\">\n {{ 'No description available' | translate }}\n </em>\n <ng-template #showDescription>\n {{ report.description }}\n </ng-template>\n </p>\n </div>\n <div class=\"col-2 fit-h-20 m-t-xs-8\">\n <label class=\"c8y-switch c8y-switch--inline\" title=\"{{ 'Show in navigator' | translate }}\">\n <input\n [(ngModel)]=\"!!report.c8y_IsNavigatorNode\"\n type=\"checkbox\"\n (change)=\"update(report)\"\n />\n <span></span>\n <span class=\"visible-xs\">\n {{ 'Show in navigator' | translate }}\n </span>\n </label>\n </div>\n <div class=\"col-1 hidden-xs\">\n <button\n class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto d-flex\"\n (click)=\"delete(report)\"\n tooltip=\"{{ 'Remove report' | translate }}\"\n [delay]=\"500\"\n [attr.aria-label]=\"'Remove report' | translate\"\n type=\"button\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n <div class=\"visible-xs p-t-8 text-right\">\n <button\n class=\"btn btn-default btn-sm\"\n (click)=\"delete(report)\"\n title=\"{{ 'Remove report' | translate }}\"\n type=\"button\"\n >\n <i c8yIcon=\"delete\"></i>\n {{ 'Remove report' | translate }}\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n</c8y-list-group>\n\n<c8y-ui-empty-state\n *ngIf=\"(reports$ | async)?.data.length === 0\"\n [icon]=\"'c8y-reports'\"\n [title]=\"'There are no reports defined.' | translate\"\n [subtitle]=\"'Add a report first.' | translate\"\n>\n <p>\n <button\n title=\"{{ 'Add report' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary\"\n [attr.data-cy]=\"'reports-add-report-empty-state-button'\"\n (click)=\"add()\"\n >\n {{ 'Add report' | translate }}\n </button>\n </p>\n <p c8y-guide-docs>\n <small translate ngNonBindable>\n Find out more in the\n <a c8y-guide-href=\"users-guide/cockpit/#reports\">User guide`KEEP_ORIGINAL`</a>\n .\n </small>\n </p>\n</c8y-ui-empty-state>\n", dependencies: [{ kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { 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.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount"] }, { 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.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "component", type: i2.GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i2.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i3$2.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i1$1.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { 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: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }] });
|
|
2979
|
+
ReportDashboardListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ReportDashboardListComponent, selector: "c8y-report-dashboard-list", viewQueries: [{ propertyName: "filter", first: true, predicate: FilterInputComponent, descendants: true }], ngImport: i0, template: "<c8y-title>\n {{ 'Reports' | translate }}\n</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'left'\" itemClass=\"navbar-form\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n type=\"search\"\n [attr.aria-label]=\"'Filter' | translate\"\n placeholder=\"{{ 'Filter\u2026' | translate }}\"\n [ngModel]=\"textFilter$ | async\"\n (ngModelChange)=\"textFilter$.next($event)\"\n />\n <span class=\"input-group-addon\">\n <i c8yIcon=\"search\" *ngIf=\"(textFilter$ | async).length === 0\"></i>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n *ngIf=\"(textFilter$ | async).length > 0\"\n (click)=\"textFilter$.next('')\"\n px-event=\"Clear filtering reports\"\n ></i>\n </span>\n </div>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add report' | translate }}\"\n [attr.data-cy]=\"'reports-add-report-action-bar-button'\"\n type=\"button\"\n (click)=\"add()\"\n [disabled]=\"!canAddReport\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add report' | translate }}\n </button>\n <button\n *ngIf=\"!canAddReport\"\n class=\"btn btn-dot m-r-16\"\n popover=\"{{ 'You don\\'t have permission to add reports' | translate }}\"\n triggers=\"focus\"\n placement=\"top\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'info-circle'\" class=\"text-primary\"></i>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadReports()\"\n >\n <i [ngClass]=\"{ 'icon-spin': reloading }\" c8yIcon=\"refresh\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/users-guide/cockpit/#reports\"></c8y-help>\n\n<c8y-list-group>\n <c8y-li\n class=\"page-sticky-header hidden-xs hidden-sm\"\n *ngIf=\"(reports$ | async)?.data.length > 0\"\n >\n <c8y-li-icon>\n <i class=\"p-l-24\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-3\">\n {{ 'Report' | translate }}\n </div>\n <div class=\"col-6\">\n {{ 'Description' | translate }}\n </div>\n <div class=\"col-2\">\n {{ 'Show in navigator' | translate }}\n </div>\n </c8y-li-body>\n </c8y-li>\n\n <c8y-li *c8yFor=\"let report of reports$; let i = index; loadMore: 'auto'\">\n <c8y-li-icon [icon]=\"report.icon\"></c8y-li-icon>\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-3\">\n <button\n class=\"btn-clean\"\n title=\"{{ report.name }}\"\n type=\"button\"\n routerLink=\"/reports/{{ report.id }}\"\n >\n <span class=\"text-truncate\">\n {{ report.name }}\n </span>\n </button>\n </div>\n <div class=\"col-6\">\n <p class=\"small text-truncate-wrap\">\n <em class=\"text-muted\" *ngIf=\"!report.description; else showDescription\">\n {{ 'No description available' | translate }}\n </em>\n <ng-template #showDescription>\n {{ report.description }}\n </ng-template>\n </p>\n </div>\n <div class=\"col-2 fit-h-20 m-t-xs-8\">\n <label class=\"c8y-switch c8y-switch--inline\" title=\"{{ 'Show in navigator' | translate }}\">\n <input\n [(ngModel)]=\"!!report.c8y_IsNavigatorNode\"\n type=\"checkbox\"\n (change)=\"update(report)\"\n />\n <span></span>\n <span class=\"visible-xs\">\n {{ 'Show in navigator' | translate }}\n </span>\n </label>\n </div>\n <div class=\"col-1 hidden-xs\">\n <button\n class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto d-flex\"\n (click)=\"delete(report)\"\n tooltip=\"{{ 'Remove report' | translate }}\"\n [delay]=\"500\"\n [attr.aria-label]=\"'Remove report' | translate\"\n type=\"button\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n <div class=\"visible-xs p-t-8 text-right\">\n <button\n class=\"btn btn-default btn-sm\"\n (click)=\"delete(report)\"\n title=\"{{ 'Remove report' | translate }}\"\n type=\"button\"\n >\n <i c8yIcon=\"delete\"></i>\n {{ 'Remove report' | translate }}\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n</c8y-list-group>\n\n<c8y-ui-empty-state\n *ngIf=\"(reports$ | async)?.data.length === 0\"\n [icon]=\"'c8y-reports'\"\n [title]=\"'There are no reports defined.' | translate\"\n [subtitle]=\"'Add a report first.' | translate\"\n>\n <p>\n <button\n title=\"{{ 'Add report' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary\"\n [attr.data-cy]=\"'reports-add-report-empty-state-button'\"\n [disabled]=\"!canAddReport\"\n (click)=\"add()\"\n >\n {{ 'Add report' | translate }}\n </button>\n </p>\n <p c8y-guide-docs>\n <small translate ngNonBindable>\n Find out more in the\n <a c8y-guide-href=\"users-guide/cockpit/#reports\">User guide`KEEP_ORIGINAL`</a>\n .\n </small>\n </p>\n</c8y-ui-empty-state>\n", dependencies: [{ kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { 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.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount"] }, { 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.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "component", type: i2.GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i2.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i3$2.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i1$1.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { 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: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }] });
|
|
2980
2980
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ReportDashboardListComponent, decorators: [{
|
|
2981
2981
|
type: Component,
|
|
2982
|
-
args: [{ selector: 'c8y-report-dashboard-list', template: "<c8y-title>\n {{ 'Reports' | translate }}\n</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'left'\" itemClass=\"navbar-form\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n type=\"search\"\n [attr.aria-label]=\"'Filter' | translate\"\n placeholder=\"{{ 'Filter\u2026' | translate }}\"\n [ngModel]=\"textFilter$ | async\"\n (ngModelChange)=\"textFilter$.next($event)\"\n />\n <span class=\"input-group-addon\">\n <i c8yIcon=\"search\" *ngIf=\"(textFilter$ | async).length === 0\"></i>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n *ngIf=\"(textFilter$ | async).length > 0\"\n (click)=\"textFilter$.next('')\"\n px-event=\"Clear filtering reports\"\n ></i>\n </span>\n </div>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add report' | translate }}\"\n [attr.data-cy]=\"'reports-add-report-action-bar-button'\"\n type=\"button\"\n (click)=\"add()\"\n [disabled]=\"!canAddReport\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add report' | translate }}\n </button>\n <button\n *ngIf=\"!canAddReport\"\n class=\"btn btn-dot m-r-16\"\n popover=\"{{ 'You don\\'t have permission to add reports' | translate }}\"\n triggers=\"focus\"\n placement=\"top\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'info-circle'\" class=\"text-primary\"></i>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadReports()\"\n >\n <i [ngClass]=\"{ 'icon-spin': reloading }\" c8yIcon=\"refresh\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/users-guide/cockpit/#reports\"></c8y-help>\n\n<c8y-list-group>\n <c8y-li\n class=\"page-sticky-header hidden-xs hidden-sm\"\n *ngIf=\"(reports$ | async)?.data.length > 0\"\n >\n <c8y-li-icon>\n <i class=\"p-l-24\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-3\">\n {{ 'Report' | translate }}\n </div>\n <div class=\"col-6\">\n {{ 'Description' | translate }}\n </div>\n <div class=\"col-2\">\n {{ 'Show in navigator' | translate }}\n </div>\n </c8y-li-body>\n </c8y-li>\n\n <c8y-li *c8yFor=\"let report of reports$; let i = index; loadMore: 'auto'\">\n <c8y-li-icon [icon]=\"report.icon\"></c8y-li-icon>\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-3\">\n <button\n class=\"btn-clean\"\n title=\"{{ report.name }}\"\n type=\"button\"\n routerLink=\"/reports/{{ report.id }}\"\n >\n <span class=\"text-truncate\">\n {{ report.name }}\n </span>\n </button>\n </div>\n <div class=\"col-6\">\n <p class=\"small text-truncate-wrap\">\n <em class=\"text-muted\" *ngIf=\"!report.description; else showDescription\">\n {{ 'No description available' | translate }}\n </em>\n <ng-template #showDescription>\n {{ report.description }}\n </ng-template>\n </p>\n </div>\n <div class=\"col-2 fit-h-20 m-t-xs-8\">\n <label class=\"c8y-switch c8y-switch--inline\" title=\"{{ 'Show in navigator' | translate }}\">\n <input\n [(ngModel)]=\"!!report.c8y_IsNavigatorNode\"\n type=\"checkbox\"\n (change)=\"update(report)\"\n />\n <span></span>\n <span class=\"visible-xs\">\n {{ 'Show in navigator' | translate }}\n </span>\n </label>\n </div>\n <div class=\"col-1 hidden-xs\">\n <button\n class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto d-flex\"\n (click)=\"delete(report)\"\n tooltip=\"{{ 'Remove report' | translate }}\"\n [delay]=\"500\"\n [attr.aria-label]=\"'Remove report' | translate\"\n type=\"button\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n <div class=\"visible-xs p-t-8 text-right\">\n <button\n class=\"btn btn-default btn-sm\"\n (click)=\"delete(report)\"\n title=\"{{ 'Remove report' | translate }}\"\n type=\"button\"\n >\n <i c8yIcon=\"delete\"></i>\n {{ 'Remove report' | translate }}\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n</c8y-list-group>\n\n<c8y-ui-empty-state\n *ngIf=\"(reports$ | async)?.data.length === 0\"\n [icon]=\"'c8y-reports'\"\n [title]=\"'There are no reports defined.' | translate\"\n [subtitle]=\"'Add a report first.' | translate\"\n>\n <p>\n <button\n title=\"{{ 'Add report' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary\"\n [attr.data-cy]=\"'reports-add-report-empty-state-button'\"\n (click)=\"add()\"\n >\n {{ 'Add report' | translate }}\n </button>\n </p>\n <p c8y-guide-docs>\n <small translate ngNonBindable>\n Find out more in the\n <a c8y-guide-href=\"users-guide/cockpit/#reports\">User guide`KEEP_ORIGINAL`</a>\n .\n </small>\n </p>\n</c8y-ui-empty-state>\n" }]
|
|
2982
|
+
args: [{ selector: 'c8y-report-dashboard-list', template: "<c8y-title>\n {{ 'Reports' | translate }}\n</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'left'\" itemClass=\"navbar-form\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n type=\"search\"\n [attr.aria-label]=\"'Filter' | translate\"\n placeholder=\"{{ 'Filter\u2026' | translate }}\"\n [ngModel]=\"textFilter$ | async\"\n (ngModelChange)=\"textFilter$.next($event)\"\n />\n <span class=\"input-group-addon\">\n <i c8yIcon=\"search\" *ngIf=\"(textFilter$ | async).length === 0\"></i>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n *ngIf=\"(textFilter$ | async).length > 0\"\n (click)=\"textFilter$.next('')\"\n px-event=\"Clear filtering reports\"\n ></i>\n </span>\n </div>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add report' | translate }}\"\n [attr.data-cy]=\"'reports-add-report-action-bar-button'\"\n type=\"button\"\n (click)=\"add()\"\n [disabled]=\"!canAddReport\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add report' | translate }}\n </button>\n <button\n *ngIf=\"!canAddReport\"\n class=\"btn btn-dot m-r-16\"\n popover=\"{{ 'You don\\'t have permission to add reports' | translate }}\"\n triggers=\"focus\"\n placement=\"top\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'info-circle'\" class=\"text-primary\"></i>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadReports()\"\n >\n <i [ngClass]=\"{ 'icon-spin': reloading }\" c8yIcon=\"refresh\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/users-guide/cockpit/#reports\"></c8y-help>\n\n<c8y-list-group>\n <c8y-li\n class=\"page-sticky-header hidden-xs hidden-sm\"\n *ngIf=\"(reports$ | async)?.data.length > 0\"\n >\n <c8y-li-icon>\n <i class=\"p-l-24\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-3\">\n {{ 'Report' | translate }}\n </div>\n <div class=\"col-6\">\n {{ 'Description' | translate }}\n </div>\n <div class=\"col-2\">\n {{ 'Show in navigator' | translate }}\n </div>\n </c8y-li-body>\n </c8y-li>\n\n <c8y-li *c8yFor=\"let report of reports$; let i = index; loadMore: 'auto'\">\n <c8y-li-icon [icon]=\"report.icon\"></c8y-li-icon>\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-3\">\n <button\n class=\"btn-clean\"\n title=\"{{ report.name }}\"\n type=\"button\"\n routerLink=\"/reports/{{ report.id }}\"\n >\n <span class=\"text-truncate\">\n {{ report.name }}\n </span>\n </button>\n </div>\n <div class=\"col-6\">\n <p class=\"small text-truncate-wrap\">\n <em class=\"text-muted\" *ngIf=\"!report.description; else showDescription\">\n {{ 'No description available' | translate }}\n </em>\n <ng-template #showDescription>\n {{ report.description }}\n </ng-template>\n </p>\n </div>\n <div class=\"col-2 fit-h-20 m-t-xs-8\">\n <label class=\"c8y-switch c8y-switch--inline\" title=\"{{ 'Show in navigator' | translate }}\">\n <input\n [(ngModel)]=\"!!report.c8y_IsNavigatorNode\"\n type=\"checkbox\"\n (change)=\"update(report)\"\n />\n <span></span>\n <span class=\"visible-xs\">\n {{ 'Show in navigator' | translate }}\n </span>\n </label>\n </div>\n <div class=\"col-1 hidden-xs\">\n <button\n class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto d-flex\"\n (click)=\"delete(report)\"\n tooltip=\"{{ 'Remove report' | translate }}\"\n [delay]=\"500\"\n [attr.aria-label]=\"'Remove report' | translate\"\n type=\"button\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n <div class=\"visible-xs p-t-8 text-right\">\n <button\n class=\"btn btn-default btn-sm\"\n (click)=\"delete(report)\"\n title=\"{{ 'Remove report' | translate }}\"\n type=\"button\"\n >\n <i c8yIcon=\"delete\"></i>\n {{ 'Remove report' | translate }}\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n</c8y-list-group>\n\n<c8y-ui-empty-state\n *ngIf=\"(reports$ | async)?.data.length === 0\"\n [icon]=\"'c8y-reports'\"\n [title]=\"'There are no reports defined.' | translate\"\n [subtitle]=\"'Add a report first.' | translate\"\n>\n <p>\n <button\n title=\"{{ 'Add report' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary\"\n [attr.data-cy]=\"'reports-add-report-empty-state-button'\"\n [disabled]=\"!canAddReport\"\n (click)=\"add()\"\n >\n {{ 'Add report' | translate }}\n </button>\n </p>\n <p c8y-guide-docs>\n <small translate ngNonBindable>\n Find out more in the\n <a c8y-guide-href=\"users-guide/cockpit/#reports\">User guide`KEEP_ORIGINAL`</a>\n .\n </small>\n </p>\n</c8y-ui-empty-state>\n" }]
|
|
2983
2983
|
}], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: ContextDashboardService }, { type: i3$1.BsModalService }, { type: i3.TranslateService }, { type: i2.ModalService }, { type: i2.AlertService }, { type: ReportDashboardService }, { type: i2.Permissions }]; }, propDecorators: { filter: [{
|
|
2984
2984
|
type: ViewChild,
|
|
2985
2985
|
args: [FilterInputComponent, { static: false }]
|