@c8y/ngx-components 1021.62.9 → 1021.64.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/core/bottom-drawer/bottom-drawer-ref.d.ts +4 -0
  2. package/core/bottom-drawer/bottom-drawer-ref.d.ts.map +1 -1
  3. package/core/plugins/plugins.model.d.ts +1 -0
  4. package/core/plugins/plugins.model.d.ts.map +1 -1
  5. package/core/plugins/plugins.service.d.ts +5 -2
  6. package/core/plugins/plugins.service.d.ts.map +1 -1
  7. package/echart/services/echarts-options.service.d.ts +3 -1
  8. package/echart/services/echarts-options.service.d.ts.map +1 -1
  9. package/ecosystem/application-plugins/application-plugin-readme.component.d.ts +15 -0
  10. package/ecosystem/application-plugins/application-plugin-readme.component.d.ts.map +1 -0
  11. package/ecosystem/application-plugins/application-plugins.component.d.ts +4 -2
  12. package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
  13. package/ecosystem/application-plugins/application-plugins.module.d.ts +4 -3
  14. package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
  15. package/ecosystem/application-plugins/install-plugin.component.d.ts +8 -4
  16. package/ecosystem/application-plugins/install-plugin.component.d.ts.map +1 -1
  17. package/ecosystem/application-plugins/plugin-list.component.d.ts +10 -26
  18. package/ecosystem/application-plugins/plugin-list.component.d.ts.map +1 -1
  19. package/ecosystem/application-plugins/plugin-list.service.d.ts +27 -0
  20. package/ecosystem/application-plugins/plugin-list.service.d.ts.map +1 -0
  21. package/ecosystem/packages/package-details/package-details.component.d.ts +7 -9
  22. package/ecosystem/packages/package-details/package-details.component.d.ts.map +1 -1
  23. package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts +5 -1
  24. package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts.map +1 -1
  25. package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts +6 -3
  26. package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts.map +1 -1
  27. package/ecosystem/packages/package-versions/packages-versions.component.d.ts +9 -2
  28. package/ecosystem/packages/package-versions/packages-versions.component.d.ts.map +1 -1
  29. package/esm2022/alarms/alarm-details.component.mjs +3 -3
  30. package/esm2022/alarms/alarms-filter.component.mjs +3 -3
  31. package/esm2022/alarms/alarms-icon.component.mjs +3 -3
  32. package/esm2022/alarms/alarms-interval-refresh.component.mjs +3 -3
  33. package/esm2022/alarms/alarms-list.component.mjs +3 -3
  34. package/esm2022/alarms/alarms.component.mjs +3 -3
  35. package/esm2022/auth-configuration/sso-configuration/sso-configuration.component.mjs +3 -3
  36. package/esm2022/core/bottom-drawer/bottom-drawer-ref.mjs +9 -3
  37. package/esm2022/core/countdown-interval/countdown-interval.component.mjs +3 -3
  38. package/esm2022/core/plugins/plugins.model.mjs +1 -1
  39. package/esm2022/core/plugins/plugins.service.mjs +25 -5
  40. package/esm2022/echart/services/echarts-options.service.mjs +28 -12
  41. package/esm2022/ecosystem/application-plugins/application-plugin-readme.component.mjs +26 -0
  42. package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +26 -11
  43. package/esm2022/ecosystem/application-plugins/application-plugins.module.mjs +6 -3
  44. package/esm2022/ecosystem/application-plugins/install-plugin.component.mjs +21 -15
  45. package/esm2022/ecosystem/application-plugins/plugin-list-item.component.mjs +3 -3
  46. package/esm2022/ecosystem/application-plugins/plugin-list.component.mjs +26 -202
  47. package/esm2022/ecosystem/application-plugins/plugin-list.service.mjs +200 -0
  48. package/esm2022/ecosystem/application-properties/update-application-modal/update-application-modal.component.mjs +1 -1
  49. package/esm2022/ecosystem/packages/package-details/package-details.component.mjs +25 -44
  50. package/esm2022/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.mjs +14 -4
  51. package/esm2022/ecosystem/packages/package-versions/package-contents/packages-contents.component.mjs +13 -6
  52. package/esm2022/ecosystem/packages/package-versions/packages-versions.component.mjs +22 -8
  53. package/esm2022/ecosystem/shared/list-filters/list-filters.component.mjs +3 -3
  54. package/esm2022/register-device/device-registration-view.component.mjs +39 -9
  55. package/esm2022/register-device/general/general-device-registration-button.component.mjs +13 -14
  56. package/esm2022/register-device/general/general-device-registration.component.mjs +19 -5
  57. package/esm2022/register-device/general/general-device-registration.service.mjs +30 -0
  58. package/esm2022/register-device/index.mjs +2 -1
  59. package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +3 -3
  60. package/fesm2022/c8y-ngx-components-alarms.mjs +12 -12
  61. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  62. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +2 -2
  63. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  64. package/fesm2022/c8y-ngx-components-echart.mjs +26 -11
  65. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  66. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +205 -138
  67. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  68. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +2 -2
  69. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  70. package/fesm2022/c8y-ngx-components-ecosystem.mjs +257 -176
  71. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  72. package/fesm2022/c8y-ngx-components-register-device.mjs +86 -19
  73. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  74. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +2 -2
  75. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  76. package/fesm2022/c8y-ngx-components.mjs +33 -7
  77. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  78. package/locales/de.po +3 -0
  79. package/locales/es.po +3 -0
  80. package/locales/fr.po +3 -0
  81. package/locales/ja_JP.po +3 -0
  82. package/locales/ko.po +3 -0
  83. package/locales/locales.pot +36 -6
  84. package/locales/nl.po +3 -0
  85. package/locales/pl.po +3 -0
  86. package/locales/pt_BR.po +3 -0
  87. package/locales/zh_CN.po +3 -0
  88. package/locales/zh_TW.po +3 -0
  89. package/package.json +1 -1
  90. package/register-device/device-registration-view.component.d.ts +6 -1
  91. package/register-device/device-registration-view.component.d.ts.map +1 -1
  92. package/register-device/general/general-device-registration-button.component.d.ts +3 -3
  93. package/register-device/general/general-device-registration-button.component.d.ts.map +1 -1
  94. package/register-device/general/general-device-registration.component.d.ts +5 -0
  95. package/register-device/general/general-device-registration.component.d.ts.map +1 -1
  96. package/register-device/general/general-device-registration.service.d.ts +9 -0
  97. package/register-device/general/general-device-registration.service.d.ts.map +1 -0
  98. package/register-device/index.d.ts +1 -0
  99. package/register-device/index.d.ts.map +1 -1
@@ -77,8 +77,10 @@ export class GeneralDeviceRegistrationComponent {
77
77
  validators: {
78
78
  unique: {
79
79
  expression: (control) => {
80
- const found = control.root.get('devicesToCreate').value.filter(el => el.id === control.value);
81
- return found.length === 0;
80
+ const found = control.root.get('devicesToCreate').controls
81
+ .map(el => el.controls.id)
82
+ .find(el => el !== control && el.value === control.value);
83
+ return !found;
82
84
  },
83
85
  message: () => gettext('Device ID duplicates are not allowed')
84
86
  }
@@ -167,6 +169,10 @@ export class GeneralDeviceRegistrationComponent {
167
169
  }
168
170
  }
169
171
  ];
172
+ this.result = new Promise((resolve, reject) => {
173
+ this.onSuccessfulClosing = resolve;
174
+ this.onCancel = reject;
175
+ });
170
176
  this.destroy$ = new Subject();
171
177
  this.lastCreatedDevices = [];
172
178
  this.isLoading$ = this.registerDeviceService.loading$;
@@ -192,6 +198,14 @@ export class GeneralDeviceRegistrationComponent {
192
198
  }
193
199
  event?.stepper.previous();
194
200
  }
201
+ close() {
202
+ this.bsModalRef.hide();
203
+ this.onSuccessfulClosing();
204
+ }
205
+ cancel() {
206
+ this.bsModalRef.hide();
207
+ this.onCancel();
208
+ }
195
209
  create(eventObject) {
196
210
  if (this.model?.devicesToCreate?.length > 0) {
197
211
  this.lastCreatedDevices = [...this.model.devicesToCreate];
@@ -280,7 +294,7 @@ export class GeneralDeviceRegistrationComponent {
280
294
  return defer(() => from(this.inventoryService.listQuery({ __filter: { __has: 'c8y_IsDeviceGroup' }, __orderby: [{ name: 1 }] }, { ...this.FILTER }))).pipe(shareReplay(1));
281
295
  }
282
296
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeneralDeviceRegistrationComponent, deps: [{ token: i1.TenantUiService }, { token: i2.TenantService }, { token: i3.RegisterDeviceService }, { token: i2.InventoryService }, { token: i0.ChangeDetectorRef }, { token: i4.BsModalRef }, { token: i1.GainsightService }, { token: i2.DeviceRegistrationBulkService }, { token: i2.FeatureService }], target: i0.ɵɵFactoryTarget.Component }); }
283
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: GeneralDeviceRegistrationComponent, selector: "c8y-general-device-registration", ngImport: i0, template: "<c8y-modal\n [title]=\"'Register devices' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n <c8y-stepper [hideStepProgress]=\"true\" linear c8y-modal-body>\n <cdk-step [stepControl]=\"form\">\n <div class=\"text-center sticky-top bg-component\">\n <p class=\"text-medium text-16 separator-bottom p-16\" translate>Register general devices</p>\n <label\n class=\"c8y-switch m-24 a-i-center\"\n title=\"{{ 'Create device certificates during device registration' | translate }}\"\n for=\"useEST\"\n *ngIf=\"certificateAuthorityFeatureEnabled | async\"\n >\n <input\n type=\"checkbox\"\n name=\"useEST\"\n id=\"useEST\"\n [ngModel]=\"useEST$.getValue()\"\n (ngModelChange)=\"useEST$.next($event)\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Create device certificates during device registration' | translate }}</span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ 'The device registration process includes creating device certificates, which are issued by the tenant\\'s Certificate Authority (CA).' | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </div>\n <div>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n class=\"formly-group-array-cols d-block p-l-24 p-b-24 min-height-fit p-r-8\"\n [ngClass]=\"{'p-t-24' : !(certificateAuthorityFeatureEnabled | async)}\"\n ></formly-form>\n </div>\n <c8y-stepper-buttons\n (onNext)=\"registerDevice($event)\"\n (onCancel)=\"bsModalRef.hide()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [disabled]=\"!form?.valid\"\n [pending]=\"isLoading$ | async\"\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <div class=\"p-24 min-height-fit\">\n <c8y-operation-result\n *ngIf=\"success.length === 1 && failed.length === 0\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0 && failed.length === 1\"\n text=\"{{ 'Failed to register device' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n\n <ng-container *ngIf=\"success.length > 1 || failed.length > 1\">\n <c8y-operation-result\n *ngIf=\"failed.length === 0\"\n [text]=\"\n '{{ successfulDevicesCount }} devices registered'\n | translate: { successfulDevicesCount: success.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0\"\n [text]=\"\n '{{ failedDevicesCount }} devices failed to register'\n | translate: { failedDevicesCount: failed.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n </ng-container>\n\n <div *ngIf=\"success.length > 0 && failed.length > 0\" class=\"p-l-24 p-r-24 text-center\">\n <c8y-operation-result\n text=\"{{ 'Several devices failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <p\n ngNonBindable\n translate\n [translateParams]=\"{ count: failed.length, total: failed.length + success.length }\"\n class=\"p-b-16 text-danger\"\n >\n Registration failed for {{ count }} devices out of {{ total }}.\n </p>\n </div>\n\n <div class=\"m-b-8 p-l-24 p-r-24\" *ngIf=\"success.length > 0\" translate>\n Turn on the registered device(s) and wait for connection(s) to be established. Once a\n device is connected, its status will change to \"Pending acceptance\". You will need to\n approve it by clicking on the \"Accept\" button.\n </div>\n\n <c8y-list-group class=\"separator-top m-t-16\">\n <c8y-li *ngFor=\"let fail of failed\">\n <c8y-li-icon class=\"text-danger\" [icon]=\"'ban'\"></c8y-li-icon>\n <p>{{ fail?.id }}</p>\n <small>{{ fail?.message | translate }}</small>\n <c8y-li-collapse>\n <pre><code>{{ fail?.details | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n\n <c8y-li *ngFor=\"let s of success\">\n <c8y-li-icon class=\"text-success\" [icon]=\"'check-circle'\"></c8y-li-icon>\n {{ s?.id }}\n </c8y-li>\n </c8y-list-group>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"bsModalRef.hide()\"\n (onBack)=\"fixErrors($event, failed)\"\n [showButtons]=\"{ back: failed.length > 0, custom: true }\"\n [labels]=\"{ back: 'Fix errors', custom: 'Close' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</c8y-modal>\n", dependencies: [{ kind: "directive", type: i5.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: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "component", type: i1.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "directive", type: i7.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.C8yStepper, selector: "c8y-stepper", inputs: ["disableDefaultIcons", "disableProgressButtons", "customClasses", "hideStepProgress", "useStepLabelsAsTitlesOnly"], outputs: ["onStepChange"] }, { kind: "component", type: i8.CdkStep, selector: "cdk-step", inputs: ["stepControl", "label", "errorMessage", "aria-label", "aria-labelledby", "state", "editable", "optional", "completed", "hasError"], outputs: ["interacted"], exportAs: ["cdkStep"] }, { kind: "component", type: i1.C8yStepperButtons, selector: "c8y-stepper-buttons", inputs: ["labels", "pending", "disabled", "showButtons"], outputs: ["onCancel", "onNext", "onBack", "onCustom"] }, { kind: "component", type: i1.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i1.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i1.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i1.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i9.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.JsonPipe, name: "json" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
297
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: GeneralDeviceRegistrationComponent, selector: "c8y-general-device-registration", ngImport: i0, template: "<c8y-modal\n [title]=\"'Register devices' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n <c8y-stepper [hideStepProgress]=\"true\" linear c8y-modal-body>\n <cdk-step [stepControl]=\"form\">\n <div class=\"text-center sticky-top bg-component\">\n <p class=\"text-medium text-16 separator-bottom p-16\" translate>Register general devices</p>\n <label\n class=\"c8y-switch m-24 a-i-center\"\n title=\"{{ 'Create device certificates during device registration' | translate }}\"\n for=\"useEST\"\n *ngIf=\"certificateAuthorityFeatureEnabled | async\"\n >\n <input\n type=\"checkbox\"\n name=\"useEST\"\n id=\"useEST\"\n [ngModel]=\"useEST$.getValue()\"\n (ngModelChange)=\"useEST$.next($event)\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Create device certificates during device registration' | translate }}</span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ 'The device registration process includes creating device certificates, which are issued by the tenant\\'s Certificate Authority (CA).' | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </div>\n <div>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n class=\"formly-group-array-cols d-block p-l-24 p-b-24 min-height-fit p-r-8\"\n [ngClass]=\"{'p-t-24' : !(certificateAuthorityFeatureEnabled | async)}\"\n ></formly-form>\n </div>\n <c8y-stepper-buttons\n (onNext)=\"registerDevice($event)\"\n (onCancel)=\"cancel()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [disabled]=\"!form?.valid\"\n [pending]=\"isLoading$ | async\"\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <div class=\"p-24 min-height-fit\">\n <c8y-operation-result\n *ngIf=\"success.length === 1 && failed.length === 0\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0 && failed.length === 1\"\n text=\"{{ 'Failed to register device' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n\n <ng-container *ngIf=\"success.length > 1 || failed.length > 1\">\n <c8y-operation-result\n *ngIf=\"failed.length === 0\"\n [text]=\"\n '{{ successfulDevicesCount }} devices registered'\n | translate: { successfulDevicesCount: success.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0\"\n [text]=\"\n '{{ failedDevicesCount }} devices failed to register'\n | translate: { failedDevicesCount: failed.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n </ng-container>\n\n <div *ngIf=\"success.length > 0 && failed.length > 0\" class=\"p-l-24 p-r-24 text-center\">\n <c8y-operation-result\n text=\"{{ 'Several devices failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <p\n ngNonBindable\n translate\n [translateParams]=\"{ count: failed.length, total: failed.length + success.length }\"\n class=\"p-b-16 text-danger\"\n >\n Registration failed for {{ count }} devices out of {{ total }}.\n </p>\n </div>\n\n <div class=\"m-b-8 p-l-24 p-r-24\" *ngIf=\"success.length > 0\" translate>\n Turn on the registered device(s) and wait for connection(s) to be established. Once a\n device is connected, its status will change to \"Pending acceptance\". You will need to\n approve it by clicking on the \"Accept\" button.\n </div>\n\n <c8y-list-group class=\"separator-top m-t-16\">\n <c8y-li *ngFor=\"let fail of failed\">\n <c8y-li-icon class=\"text-danger\" [icon]=\"'ban'\"></c8y-li-icon>\n <p>{{ fail?.id }}</p>\n <small>{{ fail?.message | translate }}</small>\n <c8y-li-collapse>\n <pre><code>{{ fail?.details | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n\n <c8y-li *ngFor=\"let s of success\">\n <c8y-li-icon class=\"text-success\" [icon]=\"'check-circle'\"></c8y-li-icon>\n {{ s?.id }}\n </c8y-li>\n </c8y-list-group>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"close()\"\n (onBack)=\"fixErrors($event, failed)\"\n [showButtons]=\"{ back: failed.length > 0, custom: true }\"\n [labels]=\"{ back: 'Fix errors', custom: 'Close' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</c8y-modal>\n", dependencies: [{ kind: "directive", type: i5.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: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "component", type: i1.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "directive", type: i7.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.C8yStepper, selector: "c8y-stepper", inputs: ["disableDefaultIcons", "disableProgressButtons", "customClasses", "hideStepProgress", "useStepLabelsAsTitlesOnly"], outputs: ["onStepChange"] }, { kind: "component", type: i8.CdkStep, selector: "cdk-step", inputs: ["stepControl", "label", "errorMessage", "aria-label", "aria-labelledby", "state", "editable", "optional", "completed", "hasError"], outputs: ["interacted"], exportAs: ["cdkStep"] }, { kind: "component", type: i1.C8yStepperButtons, selector: "c8y-stepper-buttons", inputs: ["labels", "pending", "disabled", "showButtons"], outputs: ["onCancel", "onNext", "onBack", "onCustom"] }, { kind: "component", type: i1.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i1.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i1.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i1.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i9.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.JsonPipe, name: "json" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
284
298
  }
285
299
  __decorate([
286
300
  memoize(),
@@ -302,6 +316,6 @@ __decorate([
302
316
  ], GeneralDeviceRegistrationComponent.prototype, "getGroups$", null);
303
317
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeneralDeviceRegistrationComponent, decorators: [{
304
318
  type: Component,
305
- args: [{ selector: 'c8y-general-device-registration', changeDetection: ChangeDetectionStrategy.OnPush, template: "<c8y-modal\n [title]=\"'Register devices' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n <c8y-stepper [hideStepProgress]=\"true\" linear c8y-modal-body>\n <cdk-step [stepControl]=\"form\">\n <div class=\"text-center sticky-top bg-component\">\n <p class=\"text-medium text-16 separator-bottom p-16\" translate>Register general devices</p>\n <label\n class=\"c8y-switch m-24 a-i-center\"\n title=\"{{ 'Create device certificates during device registration' | translate }}\"\n for=\"useEST\"\n *ngIf=\"certificateAuthorityFeatureEnabled | async\"\n >\n <input\n type=\"checkbox\"\n name=\"useEST\"\n id=\"useEST\"\n [ngModel]=\"useEST$.getValue()\"\n (ngModelChange)=\"useEST$.next($event)\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Create device certificates during device registration' | translate }}</span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ 'The device registration process includes creating device certificates, which are issued by the tenant\\'s Certificate Authority (CA).' | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </div>\n <div>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n class=\"formly-group-array-cols d-block p-l-24 p-b-24 min-height-fit p-r-8\"\n [ngClass]=\"{'p-t-24' : !(certificateAuthorityFeatureEnabled | async)}\"\n ></formly-form>\n </div>\n <c8y-stepper-buttons\n (onNext)=\"registerDevice($event)\"\n (onCancel)=\"bsModalRef.hide()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [disabled]=\"!form?.valid\"\n [pending]=\"isLoading$ | async\"\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <div class=\"p-24 min-height-fit\">\n <c8y-operation-result\n *ngIf=\"success.length === 1 && failed.length === 0\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0 && failed.length === 1\"\n text=\"{{ 'Failed to register device' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n\n <ng-container *ngIf=\"success.length > 1 || failed.length > 1\">\n <c8y-operation-result\n *ngIf=\"failed.length === 0\"\n [text]=\"\n '{{ successfulDevicesCount }} devices registered'\n | translate: { successfulDevicesCount: success.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0\"\n [text]=\"\n '{{ failedDevicesCount }} devices failed to register'\n | translate: { failedDevicesCount: failed.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n </ng-container>\n\n <div *ngIf=\"success.length > 0 && failed.length > 0\" class=\"p-l-24 p-r-24 text-center\">\n <c8y-operation-result\n text=\"{{ 'Several devices failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <p\n ngNonBindable\n translate\n [translateParams]=\"{ count: failed.length, total: failed.length + success.length }\"\n class=\"p-b-16 text-danger\"\n >\n Registration failed for {{ count }} devices out of {{ total }}.\n </p>\n </div>\n\n <div class=\"m-b-8 p-l-24 p-r-24\" *ngIf=\"success.length > 0\" translate>\n Turn on the registered device(s) and wait for connection(s) to be established. Once a\n device is connected, its status will change to \"Pending acceptance\". You will need to\n approve it by clicking on the \"Accept\" button.\n </div>\n\n <c8y-list-group class=\"separator-top m-t-16\">\n <c8y-li *ngFor=\"let fail of failed\">\n <c8y-li-icon class=\"text-danger\" [icon]=\"'ban'\"></c8y-li-icon>\n <p>{{ fail?.id }}</p>\n <small>{{ fail?.message | translate }}</small>\n <c8y-li-collapse>\n <pre><code>{{ fail?.details | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n\n <c8y-li *ngFor=\"let s of success\">\n <c8y-li-icon class=\"text-success\" [icon]=\"'check-circle'\"></c8y-li-icon>\n {{ s?.id }}\n </c8y-li>\n </c8y-list-group>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"bsModalRef.hide()\"\n (onBack)=\"fixErrors($event, failed)\"\n [showButtons]=\"{ back: failed.length > 0, custom: true }\"\n [labels]=\"{ back: 'Fix errors', custom: 'Close' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</c8y-modal>\n" }]
319
+ args: [{ selector: 'c8y-general-device-registration', changeDetection: ChangeDetectionStrategy.OnPush, template: "<c8y-modal\n [title]=\"'Register devices' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n <c8y-stepper [hideStepProgress]=\"true\" linear c8y-modal-body>\n <cdk-step [stepControl]=\"form\">\n <div class=\"text-center sticky-top bg-component\">\n <p class=\"text-medium text-16 separator-bottom p-16\" translate>Register general devices</p>\n <label\n class=\"c8y-switch m-24 a-i-center\"\n title=\"{{ 'Create device certificates during device registration' | translate }}\"\n for=\"useEST\"\n *ngIf=\"certificateAuthorityFeatureEnabled | async\"\n >\n <input\n type=\"checkbox\"\n name=\"useEST\"\n id=\"useEST\"\n [ngModel]=\"useEST$.getValue()\"\n (ngModelChange)=\"useEST$.next($event)\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Create device certificates during device registration' | translate }}</span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ 'The device registration process includes creating device certificates, which are issued by the tenant\\'s Certificate Authority (CA).' | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </div>\n <div>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n class=\"formly-group-array-cols d-block p-l-24 p-b-24 min-height-fit p-r-8\"\n [ngClass]=\"{'p-t-24' : !(certificateAuthorityFeatureEnabled | async)}\"\n ></formly-form>\n </div>\n <c8y-stepper-buttons\n (onNext)=\"registerDevice($event)\"\n (onCancel)=\"cancel()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [disabled]=\"!form?.valid\"\n [pending]=\"isLoading$ | async\"\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <div class=\"p-24 min-height-fit\">\n <c8y-operation-result\n *ngIf=\"success.length === 1 && failed.length === 0\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0 && failed.length === 1\"\n text=\"{{ 'Failed to register device' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n\n <ng-container *ngIf=\"success.length > 1 || failed.length > 1\">\n <c8y-operation-result\n *ngIf=\"failed.length === 0\"\n [text]=\"\n '{{ successfulDevicesCount }} devices registered'\n | translate: { successfulDevicesCount: success.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0\"\n [text]=\"\n '{{ failedDevicesCount }} devices failed to register'\n | translate: { failedDevicesCount: failed.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n </ng-container>\n\n <div *ngIf=\"success.length > 0 && failed.length > 0\" class=\"p-l-24 p-r-24 text-center\">\n <c8y-operation-result\n text=\"{{ 'Several devices failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <p\n ngNonBindable\n translate\n [translateParams]=\"{ count: failed.length, total: failed.length + success.length }\"\n class=\"p-b-16 text-danger\"\n >\n Registration failed for {{ count }} devices out of {{ total }}.\n </p>\n </div>\n\n <div class=\"m-b-8 p-l-24 p-r-24\" *ngIf=\"success.length > 0\" translate>\n Turn on the registered device(s) and wait for connection(s) to be established. Once a\n device is connected, its status will change to \"Pending acceptance\". You will need to\n approve it by clicking on the \"Accept\" button.\n </div>\n\n <c8y-list-group class=\"separator-top m-t-16\">\n <c8y-li *ngFor=\"let fail of failed\">\n <c8y-li-icon class=\"text-danger\" [icon]=\"'ban'\"></c8y-li-icon>\n <p>{{ fail?.id }}</p>\n <small>{{ fail?.message | translate }}</small>\n <c8y-li-collapse>\n <pre><code>{{ fail?.details | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n\n <c8y-li *ngFor=\"let s of success\">\n <c8y-li-icon class=\"text-success\" [icon]=\"'check-circle'\"></c8y-li-icon>\n {{ s?.id }}\n </c8y-li>\n </c8y-list-group>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"close()\"\n (onBack)=\"fixErrors($event, failed)\"\n [showButtons]=\"{ back: failed.length > 0, custom: true }\"\n [labels]=\"{ back: 'Fix errors', custom: 'Close' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</c8y-modal>\n" }]
306
320
  }], ctorParameters: () => [{ type: i1.TenantUiService }, { type: i2.TenantService }, { type: i3.RegisterDeviceService }, { type: i2.InventoryService }, { type: i0.ChangeDetectorRef }, { type: i4.BsModalRef }, { type: i1.GainsightService }, { type: i2.DeviceRegistrationBulkService }, { type: i2.FeatureService }], propDecorators: { canLoadTenants$: [], getTenants$: [], getGroups$: [] } });
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3JlZ2lzdGVyLWRldmljZS9nZW5lcmFsL2dlbmVyYWwtZGV2aWNlLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9yZWdpc3Rlci1kZXZpY2UvZ2VuZXJhbC9nZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLE9BQU8sRUFFUCxPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2pCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFlLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEYsT0FBTyxFQUNMLDZCQUE2QixFQUM3QixjQUFjLEVBRWQsZ0JBQWdCLEVBR2hCLGFBQWEsRUFDZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtEQUFrRCxDQUFDOzs7Ozs7Ozs7OztBQWNqRixNQUFNLE9BQU8sa0NBQWtDO0lBcUs3QyxZQUNVLGVBQWdDLEVBQ2hDLGFBQTRCLEVBQzVC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QUFPLEVBQUU7OztvQ0FDaUIsVUFBVTt5RUFFcEM7QUFHTztJQURQLE9BQU8sRUFBRTs7O29DQUNhLFVBQVU7cUVBRWhDO0FBR087SUFEUCxPQUFPLEVBQUU7OztvQ0FDWSxVQUFVO29FQVMvQjs0RkEvVFUsa0NBQWtDO2tCQUw5QyxTQUFTOytCQUNFLGlDQUFpQyxtQkFFMUIsdUJBQXVCLENBQUMsTUFBTTtvVkE4U3ZDLGVBQWUsTUFLZixXQUFXLE1BS1gsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5Rm9ybU9wdGlvbnMgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7XG4gIFRlbmFudFVpU2VydmljZSxcbiAgZ2V0dGV4dCxcbiAgQzh5U3RlcHBlcixcbiAgbWVtb2l6ZSxcbiAgR2FpbnNpZ2h0U2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBkZWZlciwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRGV2aWNlUmVnaXN0cmF0aW9uQnVsa1NlcnZpY2UsXG4gIEZlYXR1cmVTZXJ2aWNlLFxuICBJTWFuYWdlZE9iamVjdCxcbiAgSW52ZW50b3J5U2VydmljZSxcbiAgSVJlc3VsdExpc3QsXG4gIElUZW5hbnQsXG4gIFRlbmFudFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgUmVnaXN0ZXJEZXZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vcmVnaXN0ZXItZGV2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2RrU3RlcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zdGVwcGVyJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEVTVENzdkhlYWRlcnMgfSBmcm9tICcuLi9idWxrL2J1bGstZGV2aWNlLXJlZ2lzdHJhdGlvbi1tb2RhbC5jb21wb25lbnQnO1xuXG5pbnRlcmZhY2UgR2VuZXJhbERldmljZVJlZ2lzdHJhdGlvbk1vZGVsVHlwZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRlbmFudD86IHsgaWQ6IHN0cmluZyB9O1xuICBncm91cD86IHsgaWQ6IHN0cmluZzsgbmFtZT86IHN0cmluZyB9O1xuICBvbmVUaW1lUGFzc3dvcmQ/OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1nZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJ2dlbmVyYWwtZGV2aWNlLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEdlbmVyYWxEZXZpY2VSZWdpc3RyYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICByZWFkb25seSBNQU5BR0VNRU5UID0gJ21hbmFnZW1lbnQnO1xuICByZWFkb25seSBGSUxURVI6IG9iamVjdCA9IHtcbiAgICB3aXRoVG90YWxQYWdlczogdHJ1ZSxcbiAgICBwYWdlU2l6ZTogMjVcbiAgfTtcblxuICB1c2VFU1QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGNlcnRpZmljYXRlQXV0aG9yaXR5RmVhdHVyZUVuYWJsZWQgPSB0aGlzLmZlYXR1cmVTZXJ2aWNlXG4gICAgLmRldGFpbCgnY2VydGlmaWNhdGUtYXV0aG9yaXR5JylcbiAgICAudGhlbigoeyBkYXRhIH0pID0+IGRhdGEuYWN0aXZlKTtcblxuICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIG1vZGVsID0ge1xuICAgIGRldmljZXNUb0NyZWF0ZTogW3t9IGFzIEdlbmVyYWxEZXZpY2VSZWdpc3RyYXRpb25Nb2RlbFR5cGVdXG4gIH07XG4gIG9wdGlvbnM6IEZvcm1seUZvcm1PcHRpb25zID0ge1xuICAgIGZvcm1TdGF0ZToge1xuICAgICAgY2FuTG9hZFRlbmFudHM6IHRydWUsXG4gICAgICB1c2VFU1Q6IHRoaXMudXNlRVNUJC5nZXRWYWx1ZSgpXG4gICAgfVxuICB9O1xuXG4gIFBST0RVQ1RfRVhQRVJJRU5DRSA9IHtcbiAgICBFVkVOVDogJ2RldmljZVJlZ2lzdHJhdGlvbicsXG4gICAgQ09NUE9ORU5UOiAnc2luZ2xlLWdlbmVyYWwtcmVnaXN0cmF0aW9uJyxcbiAgICBSRVNVTFQ6IHsgU1VDQ0VTUzogJ3JlZ2lzdHJhdGlvblN1Y2Nlc3MnLCBGQUlMVVJFOiAncmVnaXN0cmF0aW9uRmFpbHVyZScgfVxuICB9O1xuXG4gIGlzTG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHN1Y2Nlc3M6IHsgaWQ6IHN0cmluZyB9W10gPSBbXTtcbiAgZmFpbGVkOiB7IGlkOiBzdHJpbmc7IG1lc3NhZ2U/OiBzdHJpbmc7IGRldGFpbHM/OiBhbnkgfVtdID0gW107XG5cbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICBrZXk6ICdkZXZpY2VzVG9DcmVhdGUnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgYWRkVGV4dDogZ2V0dGV4dCgnQWRkIGRldmljZScpLFxuICAgICAgICBhZGRUZXh0RGF0YUN5OiAnYWRkLWRldmljZSdcbiAgICAgIH0sXG4gICAgICBmaWVsZEFycmF5OiB7XG4gICAgICAgIGZpZWxkR3JvdXA6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICdpZCcsXG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcwMTIzYWIzMmZjZCcsXG4gICAgICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdEZXZpY2UgSUQnKSxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgICAgICAgIHVuaXF1ZToge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IChjb250cm9sOiBGb3JtQ29udHJvbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSAoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wucm9vdC5nZXQoJ2RldmljZXNUb0NyZWF0ZScpLnZhbHVlIGFzIEFycmF5PHsgaWQ6IHN0cmluZyB9PlxuICAgICAgICAgICAgICAgICAgKS5maWx0ZXIoZWwgPT4gZWwuaWQgPT09IGNvbnRyb2wudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICgpID0+IGdldHRleHQoJ0RldmljZSBJRCBkdXBsaWNhdGVzIGFyZSBub3QgYWxsb3dlZCcpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleTogJ3RlbmFudCcsXG4gICAgICAgICAgICB0eXBlOiAndHlwZWFoZWFkJyxcbiAgICAgICAgICAgIGV4cHJlc3Npb25zOiB7XG4gICAgICAgICAgICAgIGhpZGU6IGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtU3RhdGUgPSBmaWVsZC5vcHRpb25zPy5mb3JtU3RhdGU7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3JtU3RhdGU/LmNhbkxvYWRUZW5hbnRzKSB7XG4gICAgICAgICAgICAgICAgICBmaWVsZC5mb3JtQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICFmb3JtU3RhdGU/LmNhbkxvYWRUZW5hbnRzIHx8IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiB7IGlkOiB0aGlzLk1BTkFHRU1FTlQgfSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdBZGQgdG8gdGVuYW50JyksXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICBjOHlGb3JPcHRpb25zOiB0aGlzLmNhbkxvYWRUZW5hbnRzJCgpLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKGNhbkxvYWQgPT4gY2FuTG9hZCksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZ2V0VGVuYW50cyQoKSlcbiAgICAgICAgICAgICAgKSBhcyBPYnNlcnZhYmxlPElSZXN1bHRMaXN0PElUZW5hbnQ+PixcbiAgICAgICAgICAgICAgY29udGFpbmVyOiAnYm9keScsXG4gICAgICAgICAgICAgIGRpc3BsYXlQcm9wZXJ0eTogJ2lkJyxcbiAgICAgICAgICAgICAgdmFsdWVQcm9wZXJ0aWVzOiBbJ2lkJ11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob29rczoge1xuICAgICAgICAgICAgICBvbkluaXQ6IF9maWVsZCA9PlxuICAgICAgICAgICAgICAgIHRoaXMuY2FuTG9hZFRlbmFudHMkKCkucGlwZShcbiAgICAgICAgICAgICAgICAgIHRhcChjYW5Mb2FkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmZvcm1TdGF0ZS5jYW5Mb2FkVGVuYW50cyA9IGNhbkxvYWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICdncm91cCcsXG4gICAgICAgICAgICB0eXBlOiAndHlwZWFoZWFkJyxcbiAgICAgICAgICAgIGV4cHJlc3Npb25zOiB7XG4gICAgICAgICAgICAgICdwcm9wcy5kaXNhYmxlZCc6IChmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtU3RhdGUgPSBmaWVsZC5vcHRpb25zPy5mb3JtU3RhdGU7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBmaWVsZC5tb2RlbDtcbiAgICAgICAgICAgICAgICBpZiAoZm9ybVN0YXRlPy5jYW5Mb2FkVGVuYW50cykge1xuICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsPy50ZW5hbnQ/LmlkICE9PSB0aGlzLk1BTkFHRU1FTlQpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuZm9ybUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gIShtb2RlbD8udGVuYW50Py5pZCA9PT0gdGhpcy5NQU5BR0VNRU5UKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsZXRlIGZpZWxkPy5wcm9wcz8uZGVzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBsYWJlbDogZ2V0dGV4dCgnQWRkIHRvIGdyb3VwJyksXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KFxuICAgICAgICAgICAgICAgICdZb3UgY2FuIGFkZCBkZXZpY2UgdG8gc3BlY2lmaWMgZ3JvdXAgZm9yIG1hbmFnZW1lbnQgdGVuYW50IG9ubHkuJ1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBjb250YWluZXI6ICdib2R5JyxcbiAgICAgICAgICAgICAgZGlzcGxheVByb3BlcnR5OiAnbmFtZScsXG4gICAgICAgICAgICAgIHZhbHVlUHJvcGVydGllczogWydpZCddLFxuICAgICAgICAgICAgICBjOHlGb3JPcHRpb25zOiB0aGlzLmdldEdyb3VwcyQoKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhvb2tzOiB7XG4gICAgICAgICAgICAgIG9uSW5pdDogX2ZpZWxkID0+XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5Mb2FkVGVuYW50cyQoKS5waXBlKFxuICAgICAgICAgICAgICAgICAgdGFwKGNhbkxvYWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9ybVN0YXRlLmNhbkxvYWRUZW5hbnRzID0gY2FuTG9hZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleTogJ29uZVRpbWVQYXNzd29yZCcsXG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGV4cHJlc3Npb25zOiB7XG4gICAgICAgICAgICAgIGhpZGU6IGZpZWxkID0+ICFmaWVsZC5vcHRpb25zPy5mb3JtU3RhdGU/LnVzZUVTVFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnVHJ1RE4zSDQ1TDAnLFxuICAgICAgICAgICAgICBsYWJlbDogZ2V0dGV4dCgnT25lLXRpbWUgcGFzc3dvcmQnKSxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob29rczoge1xuICAgICAgICAgICAgICBvbkluaXQ6IF9maWVsZCA9PlxuICAgICAgICAgICAgICAgIHRoaXMudXNlRVNUJC5waXBlKFxuICAgICAgICAgICAgICAgICAgdGFwKHVzZUVTVCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5mb3JtU3RhdGUudXNlRVNUID0gdXNlRVNUO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH1cbiAgXTtcblxuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBsYXN0Q3JlYXRlZERldmljZXM6IEdlbmVyYWxEZXZpY2VSZWdpc3RyYXRpb25Nb2RlbFR5cGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGVuYW50VUlTZXJ2aWNlOiBUZW5hbnRVaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRTZXJ2aWNlOiBUZW5hbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVnaXN0ZXJEZXZpY2VTZXJ2aWNlOiBSZWdpc3RlckRldmljZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyBic01vZGFsUmVmOiBCc01vZGFsUmVmLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZSxcbiAgICBwcml2YXRlIGRldmljZVJlZ2lzdHJhdGlvblNlcnZpY2U6IERldmljZVJlZ2lzdHJhdGlvbkJ1bGtTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmVhdHVyZVNlcnZpY2U6IEZlYXR1cmVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaXNMb2FkaW5nJCA9IHRoaXMucmVnaXN0ZXJEZXZpY2VTZXJ2aWNlLmxvYWRpbmckO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcmVnaXN0ZXJEZXZpY2UoZXZlbnRPYmplY3Q6IHsgc3RlcHBlcjogQzh5U3RlcHBlcjsgc3RlcDogQ2RrU3RlcCB9KSB7XG4gICAgIXRoaXMudXNlRVNUJC5nZXRWYWx1ZSgpID8gdGhpcy5jcmVhdGUoZXZlbnRPYmplY3QpIDogdGhpcy5yZWdpc3RlckJ5RXN0KGV2ZW50T2JqZWN0KTtcbiAgfVxuXG4gIGZpeEVycm9ycyhldmVudDogeyBzdGVwcGVyOiBDOHlTdGVwcGVyOyBzdGVwOiBDZGtTdGVwIH0sIGZhaWxlZFJlcXVlc3RzOiBhbnkpIHtcbiAgICBpZiAoZmFpbGVkUmVxdWVzdHMgJiYgZmFpbGVkUmVxdWVzdHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5vcHRpb25zLnJlc2V0TW9kZWwoe1xuICAgICAgICBkZXZpY2VzVG9DcmVhdGU6IFtcbiAgICAgICAgICAuLi50aGlzLmxhc3RDcmVhdGVkRGV2aWNlcy5maWx0ZXIoZWwgPT5cbiAgICAgICAgICAgIGZhaWxlZFJlcXVlc3RzLm1hcChkYXRhID0+IGRhdGEuaWQpLmluY2x1ZGVzKGVsLmlkKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgZXZlbnQ/LnN0ZXBwZXIucHJldmlvdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlKGV2ZW50T2JqZWN0OiB7IHN0ZXBwZXI6IEM4eVN0ZXBwZXI7IHN0ZXA6IENka1N0ZXAgfSkge1xuICAgIGlmICh0aGlzLm1vZGVsPy5kZXZpY2VzVG9DcmVhdGU/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMubGFzdENyZWF0ZWREZXZpY2VzID0gWy4uLnRoaXMubW9kZWwuZGV2aWNlc1RvQ3JlYXRlXTtcblxuICAgICAgY29uc3QgZGF0YVRvU2VuZCA9IHRoaXMubW9kZWwuZGV2aWNlc1RvQ3JlYXRlLm1hcChcbiAgICAgICAgKGVsOiBHZW5lcmFsRGV2aWNlUmVnaXN0cmF0aW9uTW9kZWxUeXBlKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBpZCwgdGVuYW50LCBncm91cCB9ID0gZWw7XG4gICAgICAgICAgbGV0IGRhdGE6IHsgaWQ6IHN0cmluZzsgdGVuYW50SWQ/OiBzdHJpbmc7IGdyb3VwSWQ/OiBzdHJpbmcgfSA9IHsgaWQgfTtcblxuICAgICAgICAgIGlmICh0ZW5hbnQ/LmlkKSB7XG4gICAgICAgICAgICBkYXRhID0geyAuLi5kYXRhLCB0ZW5hbnRJZDogdGVuYW50LmlkIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGdyb3VwPy5pZCkge1xuICAgICAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSwgZ3JvdXBJZDogZ3JvdXAuaWQgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2VcbiAgICAgICAgLmNyZWF0ZU11bHRpcGxlKGRhdGFUb1NlbmQpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgLnN1YnNjcmliZShyZXF1ZXN0cyA9PiB7XG4gICAgICAgICAgdGhpcy5zdWNjZXNzID0gcmVxdWVzdHMuc3VjY2VzcyA/PyBbXTtcbiAgICAgICAgICBpZiAodGhpcy5zdWNjZXNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQodGhpcy5QUk9EVUNUX0VYUEVSSUVOQ0UuRVZFTlQsIHtcbiAgICAgICAgICAgICAgcmVzdWx0OiB0aGlzLlBST0RVQ1RfRVhQRVJJRU5DRS5SRVNVTFQuU1VDQ0VTUyxcbiAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLlBST0RVQ1RfRVhQRVJJRU5DRS5DT01QT05FTlRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZmFpbGVkID0gcmVxdWVzdHMuZmFpbGVkID8/IFtdO1xuICAgICAgICAgIGlmICh0aGlzLmZhaWxlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KHRoaXMuUFJPRFVDVF9FWFBFUklFTkNFLkVWRU5ULCB7XG4gICAgICAgICAgICAgIHJlc3VsdDogdGhpcy5QUk9EVUNUX0VYUEVSSUVOQ0UuUkVTVUxULkZBSUxVUkUsXG4gICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5QUk9EVUNUX0VYUEVSSUVOQ0UuQ09NUE9ORU5UXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXZlbnRPYmplY3QpIHtcbiAgICAgICAgICAgIGV2ZW50T2JqZWN0LnN0ZXBwZXIubmV4dCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckJ5RXN0KGV2ZW50T2JqZWN0OiB7IHN0ZXBwZXI6IEM4eVN0ZXBwZXI7IHN0ZXA6IENka1N0ZXAgfSkge1xuICAgIHRoaXMubGFzdENyZWF0ZWREZXZpY2VzID0gWy4uLnRoaXMubW9kZWwuZGV2aWNlc1RvQ3JlYXRlXTtcbiAgICB0aGlzLmRldmljZVJlZ2lzdHJhdGlvblNlcnZpY2VcbiAgICAgIC5jcmVhdGUodGhpcy5jb252ZXJ0T2JqZWN0VG9DU1ZGaWxlKHRoaXMubW9kZWwuZGV2aWNlc1RvQ3JlYXRlKSlcbiAgICAgIC50aGVuKCh7IHJlcywgZGF0YSB9KSA9PiB7XG4gICAgICAgIGlmIChyZXMuc3RhdHVzIDwgNDAwKSB7XG4gICAgICAgICAgdGhpcy5mYWlsZWQgPSBkYXRhLmZhaWxlZENyZWF0aW9uTGlzdC5tYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IHZhbHVlLmRldmljZUlkLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB2YWx1ZS5mYWlsdXJlUmVhc29uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGZhaWxlZElkcyA9IG5ldyBTZXQodGhpcy5mYWlsZWQubWFwKGl0ZW0gPT4gaXRlbS5pZCkpO1xuICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IHRoaXMubW9kZWwuZGV2aWNlc1RvQ3JlYXRlLmZpbHRlcihpdGVtID0+ICFmYWlsZWRJZHMuaGFzKGl0ZW0uaWQpKTtcbiAgICAgICAgfVxuICAgICAgICBldmVudE9iamVjdC5zdGVwcGVyLm5leHQoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICBldmVudE9iamVjdC5zdGVwcGVyLm5leHQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0T2JqZWN0VG9DU1ZGaWxlKGRhdGE6IGFueSk6IEZpbGUge1xuICAgIGNvbnN0IGZ1bGxDc3ZIZWFkZXJzID0gRVNUQ3N2SGVhZGVycztcblxuICAgIGNvbnN0IGNzdkhlYWRlcnMgPSBmdWxsQ3N2SGVhZGVycy5qb2luKCc7JykgKyAnXFxuJztcbiAgICBjb25zdCBkYXRhVG9TZW5kID0gZGF0YS5tYXAoZWwgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgSUQ6IGVsLmlkLFxuICAgICAgICBBVVRIX1RZUEU6ICdDRVJUSUZJQ0FURVMnLFxuICAgICAgICBFTlJPTExNRU5UX09UUDogZWwub25lVGltZVBhc3N3b3JkLFxuICAgICAgICBQQVRIOiBlbC5ncm91cD8uaWQgfHwgJycsXG4gICAgICAgIFRFTkFOVDogZWwudGVuYW50Py5pZCB8fCAnJ1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNzdlJvd3MgPSBkYXRhVG9TZW5kXG4gICAgICAubWFwKHJvdyA9PiBmdWxsQ3N2SGVhZGVycy5tYXAoaGVhZGVyID0+IHJvd1toZWFkZXJdID8/ICcnKS5qb2luKCc7JykpXG4gICAgICAuam9pbignXFxuJyk7XG5cbiAgICBjb25zdCBjc3ZDb250ZW50ID0gY3N2SGVhZGVycyArIGNzdlJvd3M7XG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjc3ZDb250ZW50XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xuICAgIHJldHVybiBuZXcgRmlsZShbYmxvYl0sIGBFU1RSZWdpc3RyYXRpb25GaWxlLmNzdmAsIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbiAgfVxuXG4gIEBtZW1vaXplKClcbiAgcHJpdmF0ZSBjYW5Mb2FkVGVuYW50cyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy50ZW5hbnRVSVNlcnZpY2UuaXNNYW5hZ2VtZW50VGVuYW50KCkpKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgfVxuXG4gIEBtZW1vaXplKClcbiAgcHJpdmF0ZSBnZXRUZW5hbnRzJCgpOiBPYnNlcnZhYmxlPElSZXN1bHRMaXN0PElUZW5hbnQ+PiB7XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy50ZW5hbnRTZXJ2aWNlLmxpc3QodGhpcy5GSUxURVIpKSkucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gIH1cblxuICBAbWVtb2l6ZSgpXG4gIHByaXZhdGUgZ2V0R3JvdXBzJCgpOiBPYnNlcnZhYmxlPElSZXN1bHRMaXN0PElNYW5hZ2VkT2JqZWN0Pj4ge1xuICAgIHJldHVybiBkZWZlcigoKSA9PlxuICAgICAgZnJvbShcbiAgICAgICAgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmxpc3RRdWVyeShcbiAgICAgICAgICB7IF9fZmlsdGVyOiB7IF9faGFzOiAnYzh5X0lzRGV2aWNlR3JvdXAnIH0sIF9fb3JkZXJieTogW3sgbmFtZTogMSB9XSB9LFxuICAgICAgICAgIHsgLi4udGhpcy5GSUxURVIgfVxuICAgICAgICApXG4gICAgICApXG4gICAgKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgfVxufVxuIiwiPGM4eS1tb2RhbFxuICBbdGl0bGVdPVwiJ1JlZ2lzdGVyIGRldmljZXMnIHwgdHJhbnNsYXRlXCJcbiAgW2hlYWRlckNsYXNzZXNdPVwiJ2RpYWxvZy1oZWFkZXInXCJcbiAgW2N1c3RvbUZvb3Rlcl09XCJ0cnVlXCJcbj5cbiAgPG5nLWNvbnRhaW5lciBjOHktbW9kYWwtdGl0bGU+XG4gICAgPHNwYW4gW2M4eUljb25dPVwiJ2M4eS1kZXZpY2UtY29ubmVjdCdcIj48L3NwYW4+XG4gIDwvbmctY29udGFpbmVyPlxuICA8Yzh5LXN0ZXBwZXIgW2hpZGVTdGVwUHJvZ3Jlc3NdPVwidHJ1ZVwiIGxpbmVhciBjOHktbW9kYWwtYm9keT5cbiAgICA8Y2RrLXN0ZXAgW3N0ZXBDb250cm9sXT1cImZvcm1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBzdGlja3ktdG9wIGJnLWNvbXBvbmVudFwiPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtbWVkaXVtIHRleHQtMTYgc2VwYXJhdG9yLWJvdHRvbSBwLTE2XCIgdHJhbnNsYXRlPlJlZ2lzdGVyIGdlbmVyYWwgZGV2aWNlczwvcD5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgY2xhc3M9XCJjOHktc3dpdGNoIG0tMjQgYS1pLWNlbnRlclwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnQ3JlYXRlIGRldmljZSBjZXJ0aWZpY2F0ZXMgZHVyaW5nIGRldmljZSByZWdpc3RyYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBmb3I9XCJ1c2VFU1RcIlxuICAgICAgICAgICpuZ0lmPVwiY2VydGlmaWNhdGVBdXRob3JpdHlGZWF0dXJlRW5hYmxlZCB8IGFzeW5jXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIG5hbWU9XCJ1c2VFU1RcIlxuICAgICAgICAgICAgaWQ9XCJ1c2VFU1RcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwidXNlRVNUJC5nZXRWYWx1ZSgpXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVzZUVTVCQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57eyAnQ3JlYXRlIGRldmljZSBjZXJ0aWZpY2F0ZXMgZHVyaW5nIGRldmljZSByZWdpc3RyYXRpb24nIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBwb3BvdmVyPVwie3sgJ1RoZSBkZXZpY2UgcmVnaXN0cmF0aW9uIHByb2Nlc3MgaW5jbHVkZXMgY3JlYXRpbmcgZGV2aWNlIGNlcnRpZmljYXRlcywgd2hpY2ggYXJlIGlzc3VlZCBieSB0aGUgdGVuYW50XFwncyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKENBKS4nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8Zm9ybWx5LWZvcm1cbiAgICAgICAgICBbZm9ybV09XCJmb3JtXCJcbiAgICAgICAgICBbZmllbGRzXT1cImZpZWxkc1wiXG4gICAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zXCJcbiAgICAgICAgICBjbGFzcz1cImZvcm1seS1ncm91cC1hcnJheS1jb2xzIGQtYmxvY2sgcC1sLTI0IHAtYi0yNCBtaW4taGVpZ2h0LWZpdCBwLXItOFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydwLXQtMjQnIDogIShjZXJ0aWZpY2F0ZUF1dGhvcml0eUZlYXR1cmVFbmFibGVkIHwgYXN5bmMpfVwiXG4gICAgICAgID48L2Zvcm1seS1mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgICA8Yzh5LXN0ZXBwZXItYnV0dG9uc1xuICAgICAgICAob25OZXh0KT1cInJlZ2lzdGVyRGV2aWNlKCRldmVudClcIlxuICAgICAgICAob25DYW5jZWwpPVwiYnNNb2RhbFJlZi5oaWRlKClcIlxuICAgICAgICBbc2hvd0J1dHRvbnNdPVwieyBjYW5jZWw6IHRydWUsIG5leHQ6IHRydWUgfVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhZm9ybT8udmFsaWRcIlxuICAgICAgICBbcGVuZGluZ109XCJpc0xvYWRpbmckIHwgYXN5bmNcIlxuICAgICAgICBjbGFzcz1cInN0aWNreS1ib3R0b20gZC1ibG9jayBwLXQtMTYgcC1iLTE2IHNlcGFyYXRvci10b3AgYmctbGV2ZWwtMFwiXG4gICAgICA+PC9jOHktc3RlcHBlci1idXR0b25zPlxuICAgIDwvY2RrLXN0ZXA+XG4gICAgPGNkay1zdGVwIHN0YXRlPVwiZmluYWxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTI0IG1pbi1oZWlnaHQtZml0XCI+XG4gICAgICAgIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICAgICAgICpuZ0lmPVwic3VjY2Vzcy5sZW5ndGggPT09IDEgJiYgZmFpbGVkLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgdGV4dD1cInt7ICdEZXZpY2UgcmVnaXN0ZXJlZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIFtzaXplXT1cIjg0XCJcbiAgICAgICAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgICAgICAgdHlwZT1cInN1Y2Nlc3NcIlxuICAgICAgICAgIGNsYXNzPVwibGVhZFwiXG4gICAgICAgID48L2M4eS1vcGVyYXRpb24tcmVzdWx0PlxuICAgICAgICA8Yzh5LW9wZXJhdGlvbi1yZXN1bHRcbiAgICAgICAgICAqbmdJZj1cInN1Y2Nlc3MubGVuZ3RoID09PSAwICYmIGZhaWxlZC5sZW5ndGggPT09IDFcIlxuICAgICAgICAgIHRleHQ9XCJ7eyAnRmFpbGVkIHRvIHJlZ2lzdGVyIGRldmljZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIFtzaXplXT1cIjg0XCJcbiAgICAgICAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgICAgICAgdHlwZT1cImVycm9yXCJcbiAgICAgICAgICBjbGFzcz1cImxlYWRcIlxuICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VjY2Vzcy5sZW5ndGggPiAxIHx8IGZhaWxlZC5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgICAgICAgICAqbmdJZj1cImZhaWxlZC5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgW3RleHRdPVwiXG4gICAgICAgICAgICAgICd7eyBzdWNjZXNzZnVsRGV2aWNlc0NvdW50IH19IGRldmljZXMgcmVnaXN0ZXJlZCdcbiAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBzdWNjZXNzZnVsRGV2aWNlc0NvdW50OiBzdWNjZXNzLmxlbmd0aCB9XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW3NpemVdPVwiODRcIlxuICAgICAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICAgICAgdHlwZT1cInN1Y2Nlc3NcIlxuICAgICAgICAgICAgY2xhc3M9XCJsZWFkXCJcbiAgICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICAgICAgICA8Yzh5LW9wZXJhdGlvbi1yZXN1bHRcbiAgICAgICAgICAgICpuZ0lmPVwic3VjY2Vzcy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgW3RleHRdPVwiXG4gICAgICAgICAgICAgICd7eyBmYWlsZWREZXZpY2VzQ291bnQgfX0gZGV2aWNlcyBmYWlsZWQgdG8gcmVnaXN0ZXInXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgZmFpbGVkRGV2aWNlc0NvdW50OiBmYWlsZWQubGVuZ3RoIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbc2l6ZV09XCI4NFwiXG4gICAgICAgICAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgICAgICAgICB0eXBlPVwiZXJyb3JcIlxuICAgICAgICAgICAgY2xhc3M9XCJsZWFkXCJcbiAgICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cInN1Y2Nlc3MubGVuZ3RoID4gMCAmJiBmYWlsZWQubGVuZ3RoID4gMFwiIGNsYXNzPVwicC1sLTI0IHAtci0yNCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICAgICAgICAgdGV4dD1cInt7ICdTZXZlcmFsIGRldmljZXMgZmFpbGVkIHRvIHJlZ2lzdGVyJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICBbc2l6ZV09XCI4NFwiXG4gICAgICAgICAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgICAgICAgICB0eXBlPVwiZXJyb3JcIlxuICAgICAgICAgICAgY2xhc3M9XCJsZWFkXCJcbiAgICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgbmdOb25CaW5kYWJsZVxuICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInsgY291bnQ6IGZhaWxlZC5sZW5ndGgsIHRvdGFsOiBmYWlsZWQubGVuZ3RoICsgc3VjY2Vzcy5sZW5ndGggfVwiXG4gICAgICAgICAgICBjbGFzcz1cInAtYi0xNiB0ZXh0LWRhbmdlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgUmVnaXN0cmF0aW9uIGZhaWxlZCBmb3Ige3sgY291bnQgfX0gZGV2aWNlcyBvdXQgb2Yge3sgdG90YWwgfX0uXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1iLTggcC1sLTI0IHAtci0yNFwiICpuZ0lmPVwic3VjY2Vzcy5sZW5ndGggPiAwXCIgdHJhbnNsYXRlPlxuICAgICAgICAgIFR1cm4gb24gdGhlIHJlZ2lzdGVyZWQgZGV2aWNlKHMpIGFuZCB3YWl0IGZvciBjb25uZWN0aW9uKHMpIHRvIGJlIGVzdGFibGlzaGVkLiBPbmNlIGFcbiAgICAgICAgICBkZXZpY2UgaXMgY29ubmVjdGVkLCBpdHMgc3RhdHVzIHdpbGwgY2hhbmdlIHRvIFwiUGVuZGluZyBhY2NlcHRhbmNlXCIuIFlvdSB3aWxsIG5lZWQgdG9cbiAgICAgICAgICBhcHByb3ZlIGl0IGJ5IGNsaWNraW5nIG9uIHRoZSBcIkFjY2VwdFwiIGJ1dHRvbi5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGM4eS1saXN0LWdyb3VwIGNsYXNzPVwic2VwYXJhdG9yLXRvcCBtLXQtMTZcIj5cbiAgICAgICAgICA8Yzh5LWxpICpuZ0Zvcj1cImxldCBmYWlsIG9mIGZhaWxlZFwiPlxuICAgICAgICAgICAgPGM4eS1saS1pY29uIGNsYXNzPVwidGV4dC1kYW5nZXJcIiBbaWNvbl09XCInYmFuJ1wiPjwvYzh5LWxpLWljb24+XG4gICAgICAgICAgICA8cD57eyBmYWlsPy5pZCB9fTwvcD5cbiAgICAgICAgICAgIDxzbWFsbD57eyBmYWlsPy5tZXNzYWdlIHwgdHJhbnNsYXRlIH19PC9zbWFsbD5cbiAgICAgICAgICAgIDxjOHktbGktY29sbGFwc2U+XG4gICAgICAgICAgICAgIDxwcmU+PGNvZGU+e3sgZmFpbD8uZGV0YWlscyB8IGpzb24gfX08L2NvZGU+PC9wcmU+XG4gICAgICAgICAgICA8L2M4eS1saS1jb2xsYXBzZT5cbiAgICAgICAgICA8L2M4eS1saT5cblxuICAgICAgICAgIDxjOHktbGkgKm5nRm9yPVwibGV0IHMgb2Ygc3VjY2Vzc1wiPlxuICAgICAgICAgICAgPGM4eS1saS1pY29uIGNsYXNzPVwidGV4dC1zdWNjZXNzXCIgW2ljb25dPVwiJ2NoZWNrLWNpcmNsZSdcIj48L2M4eS1saS1pY29uPlxuICAgICAgICAgICAge3sgcz8uaWQgfX1cbiAgICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgPC9jOHktbGlzdC1ncm91cD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGM4eS1zdGVwcGVyLWJ1dHRvbnNcbiAgICAgICAgY2xhc3M9XCJzdGlja3ktYm90dG9tIGQtYmxvY2sgcC10LTE2IHAtYi0xNiBzZXBhcmF0b3ItdG9wIGJnLWxldmVsLTBcIlxuICAgICAgICAob25DdXN0b20pPVwiYnNNb2RhbFJlZi5oaWRlKClcIlxuICAgICAgICAob25CYWNrKT1cImZpeEVycm9ycygkZXZlbnQsIGZhaWxlZClcIlxuICAgICAgICBbc2hvd0J1dHRvbnNdPVwieyBiYWNrOiBmYWlsZWQubGVuZ3RoID4gMCwgY3VzdG9tOiB0cnVlIH1cIlxuICAgICAgICBbbGFiZWxzXT1cInsgYmFjazogJ0ZpeCBlcnJvcnMnLCBjdXN0b206ICdDbG9zZScgfVwiXG4gICAgICA+PC9jOHktc3RlcHBlci1idXR0b25zPlxuICAgIDwvY2RrLXN0ZXA+XG4gIDwvYzh5LXN0ZXBwZXI+XG48L2M4eS1tb2RhbD5cbiJdfQ==
321
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3JlZ2lzdGVyLWRldmljZS9nZW5lcmFsL2dlbmVyYWwtZGV2aWNlLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9yZWdpc3Rlci1kZXZpY2UvZ2VuZXJhbC9nZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLE9BQU8sRUFFUCxPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2pCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUEwQixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsY0FBYyxFQUVkLGdCQUFnQixFQUdoQixhQUFhLEVBQ2QsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7Ozs7Ozs7QUFjakYsTUFBTSxPQUFPLGtDQUFrQztJQWlMN0MsWUFDVSxlQUFnQyxFQUNoQyxhQUE0QixFQUM1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QyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFHTyxVQUFVO1FBQ2hCLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUNoQixJQUFJLENBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FDN0IsRUFBRSxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQ3RFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQ25CLENBQ0YsQ0FDRixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDOytHQXJWVSxrQ0FBa0M7bUdBQWxDLGtDQUFrQyx1RUM1Qy9DLDY0TEF1SkE7O0FEdU5VO0lBRFAsT0FBTyxFQUFFOzs7b0NBQ2lCLFVBQVU7eUVBRXBDO0FBR087SUFEUCxPQUFPLEVBQUU7OztvQ0FDYSxVQUFVO3FFQUVoQztBQUdPO0lBRFAsT0FBTyxFQUFFOzs7b0NBQ1ksVUFBVTtvRUFTL0I7NEZBclZVLGtDQUFrQztrQkFMOUMsU0FBUzsrQkFDRSxpQ0FBaUMsbUJBRTFCLHVCQUF1QixDQUFDLE1BQU07b1ZBb1V2QyxlQUFlLE1BS2YsV0FBVyxNQUtYLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgT25EZXN0cm95XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seUZvcm1PcHRpb25zIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQge1xuICBUZW5hbnRVaVNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEM4eVN0ZXBwZXIsXG4gIG1lbW9pemUsXG4gIEdhaW5zaWdodFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBkZWZlciwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRGV2aWNlUmVnaXN0cmF0aW9uQnVsa1NlcnZpY2UsXG4gIEZlYXR1cmVTZXJ2aWNlLFxuICBJTWFuYWdlZE9iamVjdCxcbiAgSW52ZW50b3J5U2VydmljZSxcbiAgSVJlc3VsdExpc3QsXG4gIElUZW5hbnQsXG4gIFRlbmFudFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgUmVnaXN0ZXJEZXZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vcmVnaXN0ZXItZGV2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2RrU3RlcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zdGVwcGVyJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEVTVENzdkhlYWRlcnMgfSBmcm9tICcuLi9idWxrL2J1bGstZGV2aWNlLXJlZ2lzdHJhdGlvbi1tb2RhbC5jb21wb25lbnQnO1xuXG5pbnRlcmZhY2UgR2VuZXJhbERldmljZVJlZ2lzdHJhdGlvbk1vZGVsVHlwZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRlbmFudD86IHsgaWQ6IHN0cmluZyB9O1xuICBncm91cD86IHsgaWQ6IHN0cmluZzsgbmFtZT86IHN0cmluZyB9O1xuICBvbmVUaW1lUGFzc3dvcmQ/OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1nZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJ2dlbmVyYWwtZGV2aWNlLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEdlbmVyYWxEZXZpY2VSZWdpc3RyYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICByZWFkb25seSBNQU5BR0VNRU5UID0gJ21hbmFnZW1lbnQnO1xuICByZWFkb25seSBGSUxURVI6IG9iamVjdCA9IHtcbiAgICB3aXRoVG90YWxQYWdlczogdHJ1ZSxcbiAgICBwYWdlU2l6ZTogMjVcbiAgfTtcblxuICB1c2VFU1QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGNlcnRpZmljYXRlQXV0aG9yaXR5RmVhdHVyZUVuYWJsZWQgPSB0aGlzLmZlYXR1cmVTZXJ2aWNlXG4gICAgLmRldGFpbCgnY2VydGlmaWNhdGUtYXV0aG9yaXR5JylcbiAgICAudGhlbigoeyBkYXRhIH0pID0+IGRhdGEuYWN0aXZlKTtcblxuICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIG1vZGVsID0ge1xuICAgIGRldmljZXNUb0NyZWF0ZTogW3t9IGFzIEdlbmVyYWxEZXZpY2VSZWdpc3RyYXRpb25Nb2RlbFR5cGVdXG4gIH07XG4gIG9wdGlvbnM6IEZvcm1seUZvcm1PcHRpb25zID0ge1xuICAgIGZvcm1TdGF0ZToge1xuICAgICAgY2FuTG9hZFRlbmFudHM6IHRydWUsXG4gICAgICB1c2VFU1Q6IHRoaXMudXNlRVNUJC5nZXRWYWx1ZSgpXG4gICAgfVxuICB9O1xuXG4gIFBST0RVQ1RfRVhQRVJJRU5DRSA9IHtcbiAgICBFVkVOVDogJ2RldmljZVJlZ2lzdHJhdGlvbicsXG4gICAgQ09NUE9ORU5UOiAnc2luZ2xlLWdlbmVyYWwtcmVnaXN0cmF0aW9uJyxcbiAgICBSRVNVTFQ6IHsgU1VDQ0VTUzogJ3JlZ2lzdHJhdGlvblN1Y2Nlc3MnLCBGQUlMVVJFOiAncmVnaXN0cmF0aW9uRmFpbHVyZScgfVxuICB9O1xuXG4gIGlzTG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHN1Y2Nlc3M6IHsgaWQ6IHN0cmluZyB9W10gPSBbXTtcbiAgZmFpbGVkOiB7IGlkOiBzdHJpbmc7IG1lc3NhZ2U/OiBzdHJpbmc7IGRldGFpbHM/OiBhbnkgfVtdID0gW107XG5cbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICBrZXk6ICdkZXZpY2VzVG9DcmVhdGUnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgYWRkVGV4dDogZ2V0dGV4dCgnQWRkIGRldmljZScpLFxuICAgICAgICBhZGRUZXh0RGF0YUN5OiAnYWRkLWRldmljZSdcbiAgICAgIH0sXG4gICAgICBmaWVsZEFycmF5OiB7XG4gICAgICAgIGZpZWxkR3JvdXA6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICdpZCcsXG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcwMTIzYWIzMmZjZCcsXG4gICAgICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdEZXZpY2UgSUQnKSxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgICAgICAgIHVuaXF1ZToge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IChjb250cm9sOiBGb3JtQ29udHJvbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSAoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wucm9vdC5nZXQoJ2RldmljZXNUb0NyZWF0ZScpIGFzIEZvcm1BcnJheTxcbiAgICAgICAgICAgICAgICAgICAgICBGb3JtR3JvdXA8eyBpZDogRm9ybUNvbnRyb2w8c3RyaW5nPiB9PlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICApLmNvbnRyb2xzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoZWwgPT4gZWwuY29udHJvbHMuaWQpXG4gICAgICAgICAgICAgICAgICAgIC5maW5kKGVsID0+IGVsICE9PSBjb250cm9sICYmIGVsLnZhbHVlID09PSBjb250cm9sLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAhZm91bmQ7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAoKSA9PiBnZXR0ZXh0KCdEZXZpY2UgSUQgZHVwbGljYXRlcyBhcmUgbm90IGFsbG93ZWQnKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICd0ZW5hbnQnLFxuICAgICAgICAgICAgdHlwZTogJ3R5cGVhaGVhZCcsXG4gICAgICAgICAgICBleHByZXNzaW9uczoge1xuICAgICAgICAgICAgICBoaWRlOiBmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybVN0YXRlID0gZmllbGQub3B0aW9ucz8uZm9ybVN0YXRlO1xuICAgICAgICAgICAgICAgIGlmICghZm9ybVN0YXRlPy5jYW5Mb2FkVGVuYW50cykge1xuICAgICAgICAgICAgICAgICAgZmllbGQuZm9ybUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhZm9ybVN0YXRlPy5jYW5Mb2FkVGVuYW50cyB8fCBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogeyBpZDogdGhpcy5NQU5BR0VNRU5UIH0sXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICBsYWJlbDogZ2V0dGV4dCgnQWRkIHRvIHRlbmFudCcpLFxuICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgYzh5Rm9yT3B0aW9uczogdGhpcy5jYW5Mb2FkVGVuYW50cyQoKS5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihjYW5Mb2FkID0+IGNhbkxvYWQpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmdldFRlbmFudHMkKCkpXG4gICAgICAgICAgICAgICkgYXMgT2JzZXJ2YWJsZTxJUmVzdWx0TGlzdDxJVGVuYW50Pj4sXG4gICAgICAgICAgICAgIGNvbnRhaW5lcjogJ2JvZHknLFxuICAgICAgICAgICAgICBkaXNwbGF5UHJvcGVydHk6ICdpZCcsXG4gICAgICAgICAgICAgIHZhbHVlUHJvcGVydGllczogWydpZCddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaG9va3M6IHtcbiAgICAgICAgICAgICAgb25Jbml0OiBfZmllbGQgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmNhbkxvYWRUZW5hbnRzJCgpLnBpcGUoXG4gICAgICAgICAgICAgICAgICB0YXAoY2FuTG9hZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5mb3JtU3RhdGUuY2FuTG9hZFRlbmFudHMgPSBjYW5Mb2FkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiAnZ3JvdXAnLFxuICAgICAgICAgICAgdHlwZTogJ3R5cGVhaGVhZCcsXG4gICAgICAgICAgICBleHByZXNzaW9uczoge1xuICAgICAgICAgICAgICAncHJvcHMuZGlzYWJsZWQnOiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybVN0YXRlID0gZmllbGQub3B0aW9ucz8uZm9ybVN0YXRlO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gZmllbGQubW9kZWw7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1TdGF0ZT8uY2FuTG9hZFRlbmFudHMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChtb2RlbD8udGVuYW50Py5pZCAhPT0gdGhpcy5NQU5BR0VNRU5UKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuICEobW9kZWw/LnRlbmFudD8uaWQgPT09IHRoaXMuTUFOQUdFTUVOVCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWVsZD8ucHJvcHM/LmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ0FkZCB0byBncm91cCcpLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dChcbiAgICAgICAgICAgICAgICAnWW91IGNhbiBhZGQgZGV2aWNlIHRvIHNwZWNpZmljIGdyb3VwIGZvciBtYW5hZ2VtZW50IHRlbmFudCBvbmx5LidcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgY29udGFpbmVyOiAnYm9keScsXG4gICAgICAgICAgICAgIGRpc3BsYXlQcm9wZXJ0eTogJ25hbWUnLFxuICAgICAgICAgICAgICB2YWx1ZVByb3BlcnRpZXM6IFsnaWQnXSxcbiAgICAgICAgICAgICAgYzh5Rm9yT3B0aW9uczogdGhpcy5nZXRHcm91cHMkKClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob29rczoge1xuICAgICAgICAgICAgICBvbkluaXQ6IF9maWVsZCA9PlxuICAgICAgICAgICAgICAgIHRoaXMuY2FuTG9hZFRlbmFudHMkKCkucGlwZShcbiAgICAgICAgICAgICAgICAgIHRhcChjYW5Mb2FkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmZvcm1TdGF0ZS5jYW5Mb2FkVGVuYW50cyA9IGNhbkxvYWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICdvbmVUaW1lUGFzc3dvcmQnLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBleHByZXNzaW9uczoge1xuICAgICAgICAgICAgICBoaWRlOiBmaWVsZCA9PiAhZmllbGQub3B0aW9ucz8uZm9ybVN0YXRlPy51c2VFU1RcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ1RydUROM0g0NUwwJyxcbiAgICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ09uZS10aW1lIHBhc3N3b3JkJyksXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaG9va3M6IHtcbiAgICAgICAgICAgICAgb25Jbml0OiBfZmllbGQgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnVzZUVTVCQucGlwZShcbiAgICAgICAgICAgICAgICAgIHRhcCh1c2VFU1QgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9ybVN0YXRlLnVzZUVTVCA9IHVzZUVTVDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIF07XG5cbiAgcmVzdWx0ID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRoaXMub25TdWNjZXNzZnVsQ2xvc2luZyA9IHJlc29sdmU7XG4gICAgdGhpcy5vbkNhbmNlbCA9IHJlamVjdDtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBvblN1Y2Nlc3NmdWxDbG9zaW5nOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIG9uQ2FuY2VsOiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIGxhc3RDcmVhdGVkRGV2aWNlczogR2VuZXJhbERldmljZVJlZ2lzdHJhdGlvbk1vZGVsVHlwZVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0ZW5hbnRVSVNlcnZpY2U6IFRlbmFudFVpU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFNlcnZpY2U6IFRlbmFudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWdpc3RlckRldmljZVNlcnZpY2U6IFJlZ2lzdGVyRGV2aWNlU2VydmljZSxcbiAgICBwcml2YXRlIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIGJzTW9kYWxSZWY6IEJzTW9kYWxSZWYsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGV2aWNlUmVnaXN0cmF0aW9uU2VydmljZTogRGV2aWNlUmVnaXN0cmF0aW9uQnVsa1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmZWF0dXJlU2VydmljZTogRmVhdHVyZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pc0xvYWRpbmckID0gdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2UubG9hZGluZyQ7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICByZWdpc3RlckRldmljZShldmVudE9iamVjdDogeyBzdGVwcGVyOiBDOHlTdGVwcGVyOyBzdGVwOiBDZGtTdGVwIH0pIHtcbiAgICAhdGhpcy51c2VFU1QkLmdldFZhbHVlKCkgPyB0aGlzLmNyZWF0ZShldmVudE9iamVjdCkgOiB0aGlzLnJlZ2lzdGVyQnlFc3QoZXZlbnRPYmplY3QpO1xuICB9XG5cbiAgZml4RXJyb3JzKGV2ZW50OiB7IHN0ZXBwZXI6IEM4eVN0ZXBwZXI7IHN0ZXA6IENka1N0ZXAgfSwgZmFpbGVkUmVxdWVzdHM6IGFueSkge1xuICAgIGlmIChmYWlsZWRSZXF1ZXN0cyAmJiBmYWlsZWRSZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm9wdGlvbnMucmVzZXRNb2RlbCh7XG4gICAgICAgIGRldmljZXNUb0NyZWF0ZTogW1xuICAgICAgICAgIC4uLnRoaXMubGFzdENyZWF0ZWREZXZpY2VzLmZpbHRlcihlbCA9PlxuICAgICAgICAgICAgZmFpbGVkUmVxdWVzdHMubWFwKGRhdGEgPT4gZGF0YS5pZCkuaW5jbHVkZXMoZWwuaWQpXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICBldmVudD8uc3RlcHBlci5wcmV2aW91cygpO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5ic01vZGFsUmVmLmhpZGUoKTtcbiAgICB0aGlzLm9uU3VjY2Vzc2Z1bENsb3NpbmcoKTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLmJzTW9kYWxSZWYuaGlkZSgpO1xuICAgIHRoaXMub25DYW5jZWwoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlKGV2ZW50T2JqZWN0OiB7IHN0ZXBwZXI6IEM4eVN0ZXBwZXI7IHN0ZXA6IENka1N0ZXAgfSkge1xuICAgIGlmICh0aGlzLm1vZGVsPy5kZXZpY2VzVG9DcmVhdGU/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMubGFzdENyZWF0ZWREZXZpY2VzID0gWy4uLnRoaXMubW9kZWwuZGV2aWNlc1RvQ3JlYXRlXTtcblxuICAgICAgY29uc3QgZGF0YVRvU2VuZCA9IHRoaXMubW9kZWwuZGV2aWNlc1RvQ3JlYXRlLm1hcChcbiAgICAgICAgKGVsOiBHZW5lcmFsRGV2aWNlUmVnaXN0cmF0aW9uTW9kZWxUeXBlKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBpZCwgdGVuYW50LCBncm91cCB9ID0gZWw7XG4gICAgICAgICAgbGV0IGRhdGE6IHsgaWQ6IHN0cmluZzsgdGVuYW50SWQ/OiBzdHJpbmc7IGdyb3VwSWQ/OiBzdHJpbmcgfSA9IHsgaWQgfTtcblxuICAgICAgICAgIGlmICh0ZW5hbnQ/LmlkKSB7XG4gICAgICAgICAgICBkYXRhID0geyAuLi5kYXRhLCB0ZW5hbnRJZDogdGVuYW50LmlkIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGdyb3VwPy5pZCkge1xuICAgICAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSwgZ3JvdXBJZDogZ3JvdXAuaWQgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2VcbiAgICAgICAgLmNyZWF0ZU11bHRpcGxlKGRhdGFUb1NlbmQpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgLnN1YnNjcmliZShyZXF1ZXN0cyA9PiB7XG4gICAgICAgICAgdGhpcy5zdWNjZXNzID0gcmVxdWVzdHMuc3VjY2VzcyA/PyBbXTtcbiAgICAgICAgICBpZiAodGhpcy5zdWNjZXNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQodGhpcy5QUk9EVUNUX0VYUEVSSUVOQ0UuRVZFTlQsIHtcbiAgICAgICAgICAgICAgcmVzdWx0OiB0aGlzLlBST0RVQ1RfRVhQRVJJRU5DRS5SRVNVTFQuU1VDQ0VTUyxcbiAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLlBST0RVQ1RfRVhQRVJJRU5DRS5DT01QT05FTlRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZmFpbGVkID0gcmVxdWVzdHMuZmFpbGVkID8/IFtdO1xuICAgICAgICAgIGlmICh0aGlzLmZhaWxlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KHRoaXMuUFJPRFVDVF9FWFBFUklFTkNFLkVWRU5ULCB7XG4gICAgICAgICAgICAgIHJlc3VsdDogdGhpcy5QUk9EVUNUX0VYUEVSSUVOQ0UuUkVTVUxULkZBSUxVUkUsXG4gICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5QUk9EVUNUX0VYUEVSSUVOQ0UuQ09NUE9ORU5UXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXZlbnRPYmplY3QpIHtcbiAgICAgICAgICAgIGV2ZW50T2JqZWN0LnN0ZXBwZXIubmV4dCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckJ5RXN0KGV2ZW50T2JqZWN0OiB7IHN0ZXBwZXI6IEM4eVN0ZXBwZXI7IHN0ZXA6IENka1N0ZXAgfSkge1xuICAgIHRoaXMubGFzdENyZWF0ZWREZXZpY2VzID0gWy4uLnRoaXMubW9kZWwuZGV2aWNlc1RvQ3JlYXRlXTtcbiAgICB0aGlzLmRldmljZVJlZ2lzdHJhdGlvblNlcnZpY2VcbiAgICAgIC5jcmVhdGUodGhpcy5jb252ZXJ0T2JqZWN0VG9DU1ZGaWxlKHRoaXMubW9kZWwuZGV2aWNlc1RvQ3JlYXRlKSlcbiAgICAgIC50aGVuKCh7IHJlcywgZGF0YSB9KSA9PiB7XG4gICAgICAgIGlmIChyZXMuc3RhdHVzIDwgNDAwKSB7XG4gICAgICAgICAgdGhpcy5mYWlsZWQgPSBkYXRhLmZhaWxlZENyZWF0aW9uTGlzdC5tYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IHZhbHVlLmRldmljZUlkLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB2YWx1ZS5mYWlsdXJlUmVhc29uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGZhaWxlZElkcyA9IG5ldyBTZXQodGhpcy5mYWlsZWQubWFwKGl0ZW0gPT4gaXRlbS5pZCkpO1xuICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IHRoaXMubW9kZWwuZGV2aWNlc1RvQ3JlYXRlLmZpbHRlcihpdGVtID0+ICFmYWlsZWRJZHMuaGFzKGl0ZW0uaWQpKTtcbiAgICAgICAgfVxuICAgICAgICBldmVudE9iamVjdC5zdGVwcGVyLm5leHQoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICBldmVudE9iamVjdC5zdGVwcGVyLm5leHQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0T2JqZWN0VG9DU1ZGaWxlKGRhdGE6IGFueSk6IEZpbGUge1xuICAgIGNvbnN0IGZ1bGxDc3ZIZWFkZXJzID0gRVNUQ3N2SGVhZGVycztcblxuICAgIGNvbnN0IGNzdkhlYWRlcnMgPSBmdWxsQ3N2SGVhZGVycy5qb2luKCc7JykgKyAnXFxuJztcbiAgICBjb25zdCBkYXRhVG9TZW5kID0gZGF0YS5tYXAoZWwgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgSUQ6IGVsLmlkLFxuICAgICAgICBBVVRIX1RZUEU6ICdDRVJUSUZJQ0FURVMnLFxuICAgICAgICBFTlJPTExNRU5UX09UUDogZWwub25lVGltZVBhc3N3b3JkLFxuICAgICAgICBQQVRIOiBlbC5ncm91cD8uaWQgfHwgJycsXG4gICAgICAgIFRFTkFOVDogZWwudGVuYW50Py5pZCB8fCAnJ1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNzdlJvd3MgPSBkYXRhVG9TZW5kXG4gICAgICAubWFwKHJvdyA9PiBmdWxsQ3N2SGVhZGVycy5tYXAoaGVhZGVyID0+IHJvd1toZWFkZXJdID8/ICcnKS5qb2luKCc7JykpXG4gICAgICAuam9pbignXFxuJyk7XG5cbiAgICBjb25zdCBjc3ZDb250ZW50ID0gY3N2SGVhZGVycyArIGNzdlJvd3M7XG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjc3ZDb250ZW50XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xuICAgIHJldHVybiBuZXcgRmlsZShbYmxvYl0sIGBFU1RSZWdpc3RyYXRpb25GaWxlLmNzdmAsIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbiAgfVxuXG4gIEBtZW1vaXplKClcbiAgcHJpdmF0ZSBjYW5Mb2FkVGVuYW50cyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy50ZW5hbnRVSVNlcnZpY2UuaXNNYW5hZ2VtZW50VGVuYW50KCkpKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgfVxuXG4gIEBtZW1vaXplKClcbiAgcHJpdmF0ZSBnZXRUZW5hbnRzJCgpOiBPYnNlcnZhYmxlPElSZXN1bHRMaXN0PElUZW5hbnQ+PiB7XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy50ZW5hbnRTZXJ2aWNlLmxpc3QodGhpcy5GSUxURVIpKSkucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gIH1cblxuICBAbWVtb2l6ZSgpXG4gIHByaXZhdGUgZ2V0R3JvdXBzJCgpOiBPYnNlcnZhYmxlPElSZXN1bHRMaXN0PElNYW5hZ2VkT2JqZWN0Pj4ge1xuICAgIHJldHVybiBkZWZlcigoKSA9PlxuICAgICAgZnJvbShcbiAgICAgICAgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmxpc3RRdWVyeShcbiAgICAgICAgICB7IF9fZmlsdGVyOiB7IF9faGFzOiAnYzh5X0lzRGV2aWNlR3JvdXAnIH0sIF9fb3JkZXJieTogW3sgbmFtZTogMSB9XSB9LFxuICAgICAgICAgIHsgLi4udGhpcy5GSUxURVIgfVxuICAgICAgICApXG4gICAgICApXG4gICAgKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgfVxufVxuIiwiPGM4eS1tb2RhbFxuICBbdGl0bGVdPVwiJ1JlZ2lzdGVyIGRldmljZXMnIHwgdHJhbnNsYXRlXCJcbiAgW2hlYWRlckNsYXNzZXNdPVwiJ2RpYWxvZy1oZWFkZXInXCJcbiAgW2N1c3RvbUZvb3Rlcl09XCJ0cnVlXCJcbj5cbiAgPG5nLWNvbnRhaW5lciBjOHktbW9kYWwtdGl0bGU+XG4gICAgPHNwYW4gW2M4eUljb25dPVwiJ2M4eS1kZXZpY2UtY29ubmVjdCdcIj48L3NwYW4+XG4gIDwvbmctY29udGFpbmVyPlxuICA8Yzh5LXN0ZXBwZXIgW2hpZGVTdGVwUHJvZ3Jlc3NdPVwidHJ1ZVwiIGxpbmVhciBjOHktbW9kYWwtYm9keT5cbiAgICA8Y2RrLXN0ZXAgW3N0ZXBDb250cm9sXT1cImZvcm1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBzdGlja3ktdG9wIGJnLWNvbXBvbmVudFwiPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtbWVkaXVtIHRleHQtMTYgc2VwYXJhdG9yLWJvdHRvbSBwLTE2XCIgdHJhbnNsYXRlPlJlZ2lzdGVyIGdlbmVyYWwgZGV2aWNlczwvcD5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgY2xhc3M9XCJjOHktc3dpdGNoIG0tMjQgYS1pLWNlbnRlclwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnQ3JlYXRlIGRldmljZSBjZXJ0aWZpY2F0ZXMgZHVyaW5nIGRldmljZSByZWdpc3RyYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBmb3I9XCJ1c2VFU1RcIlxuICAgICAgICAgICpuZ0lmPVwiY2VydGlmaWNhdGVBdXRob3JpdHlGZWF0dXJlRW5hYmxlZCB8IGFzeW5jXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIG5hbWU9XCJ1c2VFU1RcIlxuICAgICAgICAgICAgaWQ9XCJ1c2VFU1RcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwidXNlRVNUJC5nZXRWYWx1ZSgpXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVzZUVTVCQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57eyAnQ3JlYXRlIGRldmljZSBjZXJ0aWZpY2F0ZXMgZHVyaW5nIGRldmljZSByZWdpc3RyYXRpb24nIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBwb3BvdmVyPVwie3sgJ1RoZSBkZXZpY2UgcmVnaXN0cmF0aW9uIHByb2Nlc3MgaW5jbHVkZXMgY3JlYXRpbmcgZGV2aWNlIGNlcnRpZmljYXRlcywgd2hpY2ggYXJlIGlzc3VlZCBieSB0aGUgdGVuYW50XFwncyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKENBKS4nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8Zm9ybWx5LWZvcm1cbiAgICAgICAgICBbZm9ybV09XCJmb3JtXCJcbiAgICAgICAgICBbZmllbGRzXT1cImZpZWxkc1wiXG4gICAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zXCJcbiAgICAgICAgICBjbGFzcz1cImZvcm1seS1ncm91cC1hcnJheS1jb2xzIGQtYmxvY2sgcC1sLTI0IHAtYi0yNCBtaW4taGVpZ2h0LWZpdCBwLXItOFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydwLXQtMjQnIDogIShjZXJ0aWZpY2F0ZUF1dGhvcml0eUZlYXR1cmVFbmFibGVkIHwgYXN5bmMpfVwiXG4gICAgICAgID48L2Zvcm1seS1mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgICA8Yzh5LXN0ZXBwZXItYnV0dG9uc1xuICAgICAgICAob25OZXh0KT1cInJlZ2lzdGVyRGV2aWNlKCRldmVudClcIlxuICAgICAgICAob25DYW5jZWwpPVwiY2FuY2VsKClcIlxuICAgICAgICBbc2hvd0J1dHRvbnNdPVwieyBjYW5jZWw6IHRydWUsIG5leHQ6IHRydWUgfVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhZm9ybT8udmFsaWRcIlxuICAgICAgICBbcGVuZGluZ109XCJpc0xvYWRpbmckIHwgYXN5bmNcIlxuICAgICAgICBjbGFzcz1cInN0aWNreS1ib3R0b20gZC1ibG9jayBwLXQtMTYgcC1iLTE2IHNlcGFyYXRvci10b3AgYmctbGV2ZWwtMFwiXG4gICAgICA+PC9jOHktc3RlcHBlci1idXR0b25zPlxuICAgIDwvY2RrLXN0ZXA+XG4gICAgPGNkay1zdGVwIHN0YXRlPVwiZmluYWxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTI0IG1pbi1oZWlnaHQtZml0XCI+XG4gICAgICAgIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICAgICAgICpuZ0lmPVwic3VjY2Vzcy5sZW5ndGggPT09IDEgJiYgZmFpbGVkLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgdGV4dD1cInt7ICdEZXZpY2UgcmVnaXN0ZXJlZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIFtzaXplXT1cIjg0XCJcbiAgICAgICAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgICAgICAgdHlwZT1cInN1Y2Nlc3NcIlxuICAgICAgICAgIGNsYXNzPVwibGVhZFwiXG4gICAgICAgID48L2M4eS1vcGVyYXRpb24tcmVzdWx0PlxuICAgICAgICA8Yzh5LW9wZXJhdGlvbi1yZXN1bHRcbiAgICAgICAgICAqbmdJZj1cInN1Y2Nlc3MubGVuZ3RoID09PSAwICYmIGZhaWxlZC5sZW5ndGggPT09IDFcIlxuICAgICAgICAgIHRleHQ9XCJ7eyAnRmFpbGVkIHRvIHJlZ2lzdGVyIGRldmljZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIFtzaXplXT1cIjg0XCJcbiAgICAgICAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgICAgICAgdHlwZT1cImVycm9yXCJcbiAgICAgICAgICBjbGFzcz1cImxlYWRcIlxuICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VjY2Vzcy5sZW5ndGggPiAxIHx8IGZhaWxlZC5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgICAgICAgICAqbmdJZj1cImZhaWxlZC5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgW3RleHRdPVwiXG4gICAgICAgICAgICAgICd7eyBzdWNjZXNzZnVsRGV2aWNlc0NvdW50IH19IGRldmljZXMgcmVnaXN0ZXJlZCdcbiAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBzdWNjZXNzZnVsRGV2aWNlc0NvdW50OiBzdWNjZXNzLmxlbmd0aCB9XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW3NpemVdPVwiODRcIlxuICAgICAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICAgICAgdHlwZT1cInN1Y2Nlc3NcIlxuICAgICAgICAgICAgY2xhc3M9XCJsZWFkXCJcbiAgICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICAgICAgICA8Yzh5LW9wZXJhdGlvbi1yZXN1bHRcbiAgICAgICAgICAgICpuZ0lmPVwic3VjY2Vzcy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgW3RleHRdPVwiXG4gICAgICAgICAgICAgICd7eyBmYWlsZWREZXZpY2VzQ291bnQgfX0gZGV2aWNlcyBmYWlsZWQgdG8gcmVnaXN0ZXInXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgZmFpbGVkRGV2aWNlc0NvdW50OiBmYWlsZWQubGVuZ3RoIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbc2l6ZV09XCI4NFwiXG4gICAgICAgICAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgICAgICAgICB0eXBlPVwiZXJyb3JcIlxuICAgICAgICAgICAgY2xhc3M9XCJsZWFkXCJcbiAgICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cInN1Y2Nlc3MubGVuZ3RoID4gMCAmJiBmYWlsZWQubGVuZ3RoID4gMFwiIGNsYXNzPVwicC1sLTI0IHAtci0yNCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICAgICAgICAgdGV4dD1cInt7ICdTZXZlcmFsIGRldmljZXMgZmFpbGVkIHRvIHJlZ2lzdGVyJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICBbc2l6ZV09XCI4NFwiXG4gICAgICAgICAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgICAgICAgICB0eXBlPVwiZXJyb3JcIlxuICAgICAgICAgICAgY2xhc3M9XCJsZWFkXCJcbiAgICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgbmdOb25CaW5kYWJsZVxuICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInsgY291bnQ6IGZhaWxlZC5sZW5ndGgsIHRvdGFsOiBmYWlsZWQubGVuZ3RoICsgc3VjY2Vzcy5sZW5ndGggfVwiXG4gICAgICAgICAgICBjbGFzcz1cInAtYi0xNiB0ZXh0LWRhbmdlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgUmVnaXN0cmF0aW9uIGZhaWxlZCBmb3Ige3sgY291bnQgfX0gZGV2aWNlcyBvdXQgb2Yge3sgdG90YWwgfX0uXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1iLTggcC1sLTI0IHAtci0yNFwiICpuZ0lmPVwic3VjY2Vzcy5sZW5ndGggPiAwXCIgdHJhbnNsYXRlPlxuICAgICAgICAgIFR1cm4gb24gdGhlIHJlZ2lzdGVyZWQgZGV2aWNlKHMpIGFuZCB3YWl0IGZvciBjb25uZWN0aW9uKHMpIHRvIGJlIGVzdGFibGlzaGVkLiBPbmNlIGFcbiAgICAgICAgICBkZXZpY2UgaXMgY29ubmVjdGVkLCBpdHMgc3RhdHVzIHdpbGwgY2hhbmdlIHRvIFwiUGVuZGluZyBhY2NlcHRhbmNlXCIuIFlvdSB3aWxsIG5lZWQgdG9cbiAgICAgICAgICBhcHByb3ZlIGl0IGJ5IGNsaWNraW5nIG9uIHRoZSBcIkFjY2VwdFwiIGJ1dHRvbi5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGM4eS1saXN0LWdyb3VwIGNsYXNzPVwic2VwYXJhdG9yLXRvcCBtLXQtMTZcIj5cbiAgICAgICAgICA8Yzh5LWxpICpuZ0Zvcj1cImxldCBmYWlsIG9mIGZhaWxlZFwiPlxuICAgICAgICAgICAgPGM4eS1saS1pY29uIGNsYXNzPVwidGV4dC1kYW5nZXJcIiBbaWNvbl09XCInYmFuJ1wiPjwvYzh5LWxpLWljb24+XG4gICAgICAgICAgICA8cD57eyBmYWlsPy5pZCB9fTwvcD5cbiAgICAgICAgICAgIDxzbWFsbD57eyBmYWlsPy5tZXNzYWdlIHwgdHJhbnNsYXRlIH19PC9zbWFsbD5cbiAgICAgICAgICAgIDxjOHktbGktY29sbGFwc2U+XG4gICAgICAgICAgICAgIDxwcmU+PGNvZGU+e3sgZmFpbD8uZGV0YWlscyB8IGpzb24gfX08L2NvZGU+PC9wcmU+XG4gICAgICAgICAgICA8L2M4eS1saS1jb2xsYXBzZT5cbiAgICAgICAgICA8L2M4eS1saT5cblxuICAgICAgICAgIDxjOHktbGkgKm5nRm9yPVwibGV0IHMgb2Ygc3VjY2Vzc1wiPlxuICAgICAgICAgICAgPGM4eS1saS1pY29uIGNsYXNzPVwidGV4dC1zdWNjZXNzXCIgW2ljb25dPVwiJ2NoZWNrLWNpcmNsZSdcIj48L2M4eS1saS1pY29uPlxuICAgICAgICAgICAge3sgcz8uaWQgfX1cbiAgICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgPC9jOHktbGlzdC1ncm91cD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGM4eS1zdGVwcGVyLWJ1dHRvbnNcbiAgICAgICAgY2xhc3M9XCJzdGlja3ktYm90dG9tIGQtYmxvY2sgcC10LTE2IHAtYi0xNiBzZXBhcmF0b3ItdG9wIGJnLWxldmVsLTBcIlxuICAgICAgICAob25DdXN0b20pPVwiY2xvc2UoKVwiXG4gICAgICAgIChvbkJhY2spPVwiZml4RXJyb3JzKCRldmVudCwgZmFpbGVkKVwiXG4gICAgICAgIFtzaG93QnV0dG9uc109XCJ7IGJhY2s6IGZhaWxlZC5sZW5ndGggPiAwLCBjdXN0b206IHRydWUgfVwiXG4gICAgICAgIFtsYWJlbHNdPVwieyBiYWNrOiAnRml4IGVycm9ycycsIGN1c3RvbTogJ0Nsb3NlJyB9XCJcbiAgICAgID48L2M4eS1zdGVwcGVyLWJ1dHRvbnM+XG4gICAgPC9jZGstc3RlcD5cbiAgPC9jOHktc3RlcHBlcj5cbjwvYzh5LW1vZGFsPlxuIl19
@@ -0,0 +1,30 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { BsModalService } from 'ngx-bootstrap/modal';
3
+ import { GeneralDeviceRegistrationComponent } from './general-device-registration.component';
4
+ import * as i0 from "@angular/core";
5
+ export class GeneralDeviceRegistrationService {
6
+ constructor() {
7
+ this.modalService = inject(BsModalService);
8
+ }
9
+ async open(initialState) {
10
+ const modalRef = this.modalService.show(GeneralDeviceRegistrationComponent, {
11
+ class: 'modal-md',
12
+ ariaDescribedby: 'modal-body',
13
+ ariaLabelledBy: 'modal-title',
14
+ ignoreBackdropClick: true,
15
+ initialState: {
16
+ ...initialState
17
+ }
18
+ });
19
+ return await modalRef.content.result;
20
+ }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeneralDeviceRegistrationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
22
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeneralDeviceRegistrationService, providedIn: 'root' }); }
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeneralDeviceRegistrationService, decorators: [{
25
+ type: Injectable,
26
+ args: [{
27
+ providedIn: 'root'
28
+ }]
29
+ }] });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9yZWdpc3Rlci1kZXZpY2UvZ2VuZXJhbC9nZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBSzdGLE1BQU0sT0FBTyxnQ0FBZ0M7SUFIN0M7UUFJVSxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztLQWUvQztJQWJDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBMEQ7UUFDbkUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0NBQWtDLEVBQUU7WUFDMUUsS0FBSyxFQUFFLFVBQVU7WUFDakIsZUFBZSxFQUFFLFlBQVk7WUFDN0IsY0FBYyxFQUFFLGFBQWE7WUFDN0IsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixZQUFZLEVBQUU7Z0JBQ1osR0FBRyxZQUFZO2FBQ2hCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLENBQUM7K0dBZlUsZ0NBQWdDO21IQUFoQyxnQ0FBZ0MsY0FGL0IsTUFBTTs7NEZBRVAsZ0NBQWdDO2tCQUg1QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEdlbmVyYWxEZXZpY2VSZWdpc3RyYXRpb25Db21wb25lbnQgfSBmcm9tICcuL2dlbmVyYWwtZGV2aWNlLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBHZW5lcmFsRGV2aWNlUmVnaXN0cmF0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgbW9kYWxTZXJ2aWNlID0gaW5qZWN0KEJzTW9kYWxTZXJ2aWNlKTtcblxuICBhc3luYyBvcGVuKGluaXRpYWxTdGF0ZT86IFBhcnRpYWw8R2VuZXJhbERldmljZVJlZ2lzdHJhdGlvbkNvbXBvbmVudD4pIHtcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coR2VuZXJhbERldmljZVJlZ2lzdHJhdGlvbkNvbXBvbmVudCwge1xuICAgICAgY2xhc3M6ICdtb2RhbC1tZCcsXG4gICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnLFxuICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAuLi5pbml0aWFsU3RhdGVcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhd2FpdCBtb2RhbFJlZi5jb250ZW50LnJlc3VsdDtcbiAgfVxufVxuIl19
@@ -1,8 +1,9 @@
1
1
  export * from './general/general-device-registration-button.component';
2
2
  export * from './general/general-device-registration.component';
3
+ export * from './general/general-device-registration.service';
3
4
  export * from './register-device.module';
4
5
  export * from './register-device.service';
5
6
  export * from './register-device.factory';
6
7
  export * from './dropdown/register-device-extension.service';
7
8
  export * from './dropdown/RegisterDeviceItem';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9yZWdpc3Rlci1kZXZpY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3REFBd0QsQ0FBQztBQUN2RSxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZ2VuZXJhbC9nZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24tYnV0dG9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2dlbmVyYWwvZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdGVyLWRldmljZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWdpc3Rlci1kZXZpY2Uuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdGVyLWRldmljZS5mYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vZHJvcGRvd24vcmVnaXN0ZXItZGV2aWNlLWV4dGVuc2lvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZHJvcGRvd24vUmVnaXN0ZXJEZXZpY2VJdGVtJztcbiJdfQ==
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9yZWdpc3Rlci1kZXZpY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3REFBd0QsQ0FBQztBQUN2RSxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9nZW5lcmFsL2dlbmVyYWwtZGV2aWNlLXJlZ2lzdHJhdGlvbi1idXR0b24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZ2VuZXJhbC9nZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZ2VuZXJhbC9nZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdGVyLWRldmljZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWdpc3Rlci1kZXZpY2Uuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdGVyLWRldmljZS5mYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vZHJvcGRvd24vcmVnaXN0ZXItZGV2aWNlLWV4dGVuc2lvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZHJvcGRvd24vUmVnaXN0ZXJEZXZpY2VJdGVtJztcbiJdfQ==