@c8y/ngx-components 1018.503.26 → 1018.503.41

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 (74) hide show
  1. package/assets-navigator/asset-node.service.d.ts +5 -2
  2. package/device-grid/device-grid.component.d.ts +7 -2
  3. package/esm2020/assets-navigator/asset-node.mjs +2 -2
  4. package/esm2020/assets-navigator/asset-node.service.mjs +14 -5
  5. package/esm2020/child-devices/child-devices.component.mjs +1 -1
  6. package/esm2020/core/bootstrap/bootstrap.component.mjs +3 -3
  7. package/esm2020/core/docs/docs.service.mjs +1 -11
  8. package/esm2020/core/dynamic-forms/json-schema/c8y-json-schema.service.mjs +8 -2
  9. package/esm2020/device-grid/columns/registration-date.device-grid-column.mjs +4 -10
  10. package/esm2020/device-grid/device-grid-extension.service.mjs +13 -8
  11. package/esm2020/device-grid/device-grid.component.mjs +30 -15
  12. package/esm2020/device-list/device-list.component.mjs +1 -1
  13. package/esm2020/ecosystem/application-plugins/application-plugins.component.mjs +34 -13
  14. package/esm2020/operations/device-selector/device-selector.component.mjs +1 -1
  15. package/esm2020/replace-device-wizard/replace-device-wizard.component.mjs +2 -2
  16. package/esm2020/repository/shared/repository.service.mjs +4 -4
  17. package/esm2020/services/services-device-tab/columns/last-updated-date.device-grid-column.mjs +4 -10
  18. package/esm2020/sub-assets/add-group/add-group.component.mjs +4 -3
  19. package/esm2020/sub-assets/asset-properties-item.component.mjs +7 -3
  20. package/esm2020/sub-assets/asset-properties.component.mjs +25 -10
  21. package/esm2020/sub-assets/assign-devices/assign-devices.component.mjs +4 -3
  22. package/esm2020/sub-assets/location/asset-location.component.mjs +5 -3
  23. package/fesm2015/c8y-ngx-components-assets-navigator.mjs +16 -9
  24. package/fesm2015/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  25. package/fesm2015/c8y-ngx-components-child-devices.mjs +1 -1
  26. package/fesm2015/c8y-ngx-components-child-devices.mjs.map +1 -1
  27. package/fesm2015/c8y-ngx-components-device-grid.mjs +44 -30
  28. package/fesm2015/c8y-ngx-components-device-grid.mjs.map +1 -1
  29. package/fesm2015/c8y-ngx-components-device-list.mjs +1 -1
  30. package/fesm2015/c8y-ngx-components-device-list.mjs.map +1 -1
  31. package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs +26 -13
  32. package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  33. package/fesm2015/c8y-ngx-components-ecosystem.mjs +26 -13
  34. package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
  35. package/fesm2015/c8y-ngx-components-operations-device-selector.mjs +1 -1
  36. package/fesm2015/c8y-ngx-components-operations-device-selector.mjs.map +1 -1
  37. package/fesm2015/c8y-ngx-components-replace-device-wizard.mjs +1 -1
  38. package/fesm2015/c8y-ngx-components-replace-device-wizard.mjs.map +1 -1
  39. package/fesm2015/c8y-ngx-components-repository-shared.mjs +3 -3
  40. package/fesm2015/c8y-ngx-components-repository-shared.mjs.map +1 -1
  41. package/fesm2015/c8y-ngx-components-services.mjs +3 -9
  42. package/fesm2015/c8y-ngx-components-services.mjs.map +1 -1
  43. package/fesm2015/c8y-ngx-components-sub-assets.mjs +39 -18
  44. package/fesm2015/c8y-ngx-components-sub-assets.mjs.map +1 -1
  45. package/fesm2015/c8y-ngx-components.mjs +6 -12
  46. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  47. package/fesm2020/c8y-ngx-components-assets-navigator.mjs +16 -9
  48. package/fesm2020/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  49. package/fesm2020/c8y-ngx-components-child-devices.mjs +1 -1
  50. package/fesm2020/c8y-ngx-components-child-devices.mjs.map +1 -1
  51. package/fesm2020/c8y-ngx-components-device-grid.mjs +44 -30
  52. package/fesm2020/c8y-ngx-components-device-grid.mjs.map +1 -1
  53. package/fesm2020/c8y-ngx-components-device-list.mjs +1 -1
  54. package/fesm2020/c8y-ngx-components-device-list.mjs.map +1 -1
  55. package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs +33 -13
  56. package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  57. package/fesm2020/c8y-ngx-components-ecosystem.mjs +33 -13
  58. package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
  59. package/fesm2020/c8y-ngx-components-operations-device-selector.mjs +1 -1
  60. package/fesm2020/c8y-ngx-components-operations-device-selector.mjs.map +1 -1
  61. package/fesm2020/c8y-ngx-components-replace-device-wizard.mjs +1 -1
  62. package/fesm2020/c8y-ngx-components-replace-device-wizard.mjs.map +1 -1
  63. package/fesm2020/c8y-ngx-components-repository-shared.mjs +3 -3
  64. package/fesm2020/c8y-ngx-components-repository-shared.mjs.map +1 -1
  65. package/fesm2020/c8y-ngx-components-services.mjs +3 -9
  66. package/fesm2020/c8y-ngx-components-services.mjs.map +1 -1
  67. package/fesm2020/c8y-ngx-components-sub-assets.mjs +38 -17
  68. package/fesm2020/c8y-ngx-components-sub-assets.mjs.map +1 -1
  69. package/fesm2020/c8y-ngx-components.mjs +9 -12
  70. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  71. package/package.json +1 -1
  72. package/sub-assets/add-group/add-group.component.d.ts +2 -1
  73. package/sub-assets/asset-properties.component.d.ts +6 -0
  74. package/sub-assets/assign-devices/assign-devices.component.d.ts +2 -1
@@ -29,6 +29,7 @@ export class AddGroupComponent {
29
29
  this.canCreateGroup = false;
30
30
  this.canAssignDevice = false;
31
31
  this.PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE;
32
+ this.builtInActionsToHide = ["DELETE" /* BuiltInActionType.Delete */];
32
33
  this.ITEMS_SELECT_LIMIT = 15;
33
34
  this.btnLabels = {
34
35
  next: gettext('Next'),
@@ -113,10 +114,10 @@ export class AddGroupComponent {
113
114
  }
114
115
  }
115
116
  AddGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: AddGroupComponent, deps: [{ token: i1.FormBuilder }, { token: i2.AddGroupService }, { token: i3.AlertService }, { token: i4.SubAssetsService }, { token: i3.GainsightService }, { token: i3.Permissions }], target: i0.ɵɵFactoryTarget.Component });
116
- AddGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: AddGroupComponent, selector: "c8y-add-group", inputs: { currentGroupId: "currentGroupId", refresh: "refresh" }, outputs: { onDeviceQueryStringChange: "onDeviceQueryStringChange", onCancel: "onCancel" }, host: { listeners: { "document:keydown.enter": "onEnterKeyDown($event)" } }, viewQueries: [{ propertyName: "stepper", first: true, predicate: C8yStepper, descendants: true }, { propertyName: "nameInputRef", first: true, predicate: ["nameRef"], descendants: true }], ngImport: i0, template: "<div class=\"d-contents\" *ngIf=\"!currentGroupId; else stepper\">\n <ng-container [ngTemplateOutlet]=\"stepper\"></ng-container>\n</div>\n\n<ng-template #stepper>\n <c8y-stepper\n class=\"d-col flex-nowrap no-align-items fit-h c8y-stepper--no-btns\"\n [disableDefaultIcons]=\"{ edit: true, done: false }\"\n [customClasses]=\"['col-md-6', 'col-md-offset-3', 'm-t-24', 'm-b-40', 'p-0', 'flex-no-shrink']\"\n linear\n c8yProductExperience\n inherit\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.ADD_GROUP.COMPONENTS.ADD_GROUP }\"\n >\n <cdk-step [stepControl]=\"formGroupStepOne\" [label]=\"'New group' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink separator-bottom col-xs-12\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'New group' | translate }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 flex-grow no-gutter\">\n <div class=\"card-inner-scroll fit-h\">\n <div class=\"card-block p-b-0\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <c8y-form-group [novalidation]=\"true\">\n <div [formGroup]=\"formGroupStepOne\">\n <c8y-form-group>\n <label translate>Name</label>\n <input\n class=\"form-control\"\n type=\"text\"\n formControlName=\"name\"\n placeholder=\"{{ 'e.g. First floor' | translate }} \"\n maxlength=\"254\"\n #nameRef\n required\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Description</label>\n <input\n class=\"form-control\"\n type=\"text\"\n formControlName=\"description\"\n placeholder=\"{{ 'e.g. first floor devices' | translate }}\"\n />\n </c8y-form-group>\n </div>\n </c8y-form-group>\n <c8y-form-group>\n <div [formGroup]=\"formGroupStepOne\"></div>\n </c8y-form-group>\n <div class=\"alert alert-info max-width-100\" translate *ngIf=\"!canAssignDevice\">\n You don't have permission to assign devices.\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n (onCancel)=\"onCancel.emit()\"\n (onCustom)=\"createGroup()\"\n [disabled]=\"!canCreateGroup\"\n [labels]=\"\n canAssignDevice\n ? { next: btnLabels.next, cancel: btnLabels.cancel }\n : { custom: btnLabels.create, cancel: btnLabels.cancel }\n \"\n [showButtons]=\"\n canAssignDevice ? { next: true, cancel: true } : { custom: true, cancel: true }\n \"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step [label]=\"'Assign devices' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink separator-bottom col-xs-12\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Assign devices' | translate }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 no-gutter flex-grow\">\n <c8y-device-grid\n [title]=\"'Select target devices' | translate\"\n [actionControls]=\"[]\"\n [infiniteScroll]=\"'auto'\"\n [selectable]=\"true\"\n [pagination]=\"pagination\"\n (itemsSelect)=\"onSelected($event)\"\n [refresh]=\"refresh\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.ADD_GROUP.COMPONENTS.ADD_GROUP }\"\n ></c8y-device-grid>\n </div>\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n (onCancel)=\"onCancel.emit()\"\n (onCustom)=\"createGroup()\"\n [labels]=\"{ custom: btnLabels.create }\"\n [disabled]=\"!canAssignDevice\"\n [pending]=\"pendingStatus\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i3.C8yStepper, selector: "c8y-stepper", inputs: ["disableDefaultIcons", "disableProgressButtons", "customClasses", "hideStepProgress", "useStepLabelsAsTitlesOnly"], outputs: ["onStepChange"] }, { kind: "component", type: i6.CdkStep, selector: "cdk-step", inputs: ["stepControl", "label", "errorMessage", "aria-label", "aria-labelledby", "state", "editable", "optional", "completed", "hasError"], outputs: ["interacted"], exportAs: ["cdkStep"] }, { kind: "component", type: i3.C8yStepperButtons, selector: "c8y-stepper-buttons", inputs: ["labels", "pending", "disabled", "showButtons"], outputs: ["onCancel", "onNext", "onBack", "onCustom"] }, { kind: "directive", type: i3.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i7.DeviceGridComponent, selector: "c8y-device-grid", inputs: ["dataCallback", "refresh", "title", "loadMoreItemsLabel", "loadingItemsLabel", "legacyConfigKey", "legacyFilterKey", "columns", "pagination", "infiniteScroll", "actionControls", "selectable", "singleSelection", "baseQuery", "bulkActionControls", "headerActionControls", "childDeviceGrid", "parentDeviceId", "withChildren", "showSearch", "activeClassName"], outputs: ["onColumnsChange", "onFilterChange", "onDeviceQueryStringChange", "itemsSelect"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
117
+ AddGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: AddGroupComponent, selector: "c8y-add-group", inputs: { currentGroupId: "currentGroupId", refresh: "refresh" }, outputs: { onDeviceQueryStringChange: "onDeviceQueryStringChange", onCancel: "onCancel" }, host: { listeners: { "document:keydown.enter": "onEnterKeyDown($event)" } }, viewQueries: [{ propertyName: "stepper", first: true, predicate: C8yStepper, descendants: true }, { propertyName: "nameInputRef", first: true, predicate: ["nameRef"], descendants: true }], ngImport: i0, template: "<div class=\"d-contents\" *ngIf=\"!currentGroupId; else stepper\">\n <ng-container [ngTemplateOutlet]=\"stepper\"></ng-container>\n</div>\n\n<ng-template #stepper>\n <c8y-stepper\n class=\"d-col flex-nowrap no-align-items fit-h c8y-stepper--no-btns\"\n [disableDefaultIcons]=\"{ edit: true, done: false }\"\n [customClasses]=\"['col-md-6', 'col-md-offset-3', 'm-t-24', 'm-b-40', 'p-0', 'flex-no-shrink']\"\n linear\n c8yProductExperience\n inherit\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.ADD_GROUP.COMPONENTS.ADD_GROUP }\"\n >\n <cdk-step [stepControl]=\"formGroupStepOne\" [label]=\"'New group' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink separator-bottom col-xs-12\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'New group' | translate }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 flex-grow no-gutter\">\n <div class=\"card-inner-scroll fit-h\">\n <div class=\"card-block p-b-0\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <c8y-form-group [novalidation]=\"true\">\n <div [formGroup]=\"formGroupStepOne\">\n <c8y-form-group>\n <label translate>Name</label>\n <input\n class=\"form-control\"\n type=\"text\"\n formControlName=\"name\"\n placeholder=\"{{ 'e.g. First floor' | translate }} \"\n maxlength=\"254\"\n #nameRef\n required\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Description</label>\n <input\n class=\"form-control\"\n type=\"text\"\n formControlName=\"description\"\n placeholder=\"{{ 'e.g. first floor devices' | translate }}\"\n />\n </c8y-form-group>\n </div>\n </c8y-form-group>\n <c8y-form-group>\n <div [formGroup]=\"formGroupStepOne\"></div>\n </c8y-form-group>\n <div class=\"alert alert-info max-width-100\" translate *ngIf=\"!canAssignDevice\">\n You don't have permission to assign devices.\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n (onCancel)=\"onCancel.emit()\"\n (onCustom)=\"createGroup()\"\n [disabled]=\"!canCreateGroup\"\n [labels]=\"\n canAssignDevice\n ? { next: btnLabels.next, cancel: btnLabels.cancel }\n : { custom: btnLabels.create, cancel: btnLabels.cancel }\n \"\n [showButtons]=\"\n canAssignDevice ? { next: true, cancel: true } : { custom: true, cancel: true }\n \"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step [label]=\"'Assign devices' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink separator-bottom col-xs-12\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Assign devices' | translate }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 no-gutter flex-grow\">\n <c8y-device-grid\n [title]=\"'Select target devices' | translate\"\n [actionControls]=\"[]\"\n [builtInActionsToHide]=\"builtInActionsToHide\"\n [infiniteScroll]=\"'auto'\"\n [selectable]=\"true\"\n [pagination]=\"pagination\"\n (itemsSelect)=\"onSelected($event)\"\n [refresh]=\"refresh\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.ADD_GROUP.COMPONENTS.ADD_GROUP }\"\n ></c8y-device-grid>\n </div>\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n (onCancel)=\"onCancel.emit()\"\n (onCustom)=\"createGroup()\"\n [labels]=\"{ custom: btnLabels.create }\"\n [disabled]=\"!canAssignDevice\"\n [pending]=\"pendingStatus\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i3.C8yStepper, selector: "c8y-stepper", inputs: ["disableDefaultIcons", "disableProgressButtons", "customClasses", "hideStepProgress", "useStepLabelsAsTitlesOnly"], outputs: ["onStepChange"] }, { kind: "component", type: i6.CdkStep, selector: "cdk-step", inputs: ["stepControl", "label", "errorMessage", "aria-label", "aria-labelledby", "state", "editable", "optional", "completed", "hasError"], outputs: ["interacted"], exportAs: ["cdkStep"] }, { kind: "component", type: i3.C8yStepperButtons, selector: "c8y-stepper-buttons", inputs: ["labels", "pending", "disabled", "showButtons"], outputs: ["onCancel", "onNext", "onBack", "onCustom"] }, { kind: "directive", type: i3.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i7.DeviceGridComponent, selector: "c8y-device-grid", inputs: ["dataCallback", "refresh", "title", "loadMoreItemsLabel", "loadingItemsLabel", "legacyConfigKey", "legacyFilterKey", "columns", "pagination", "infiniteScroll", "builtInActionsToHide", "actionControls", "selectable", "singleSelection", "baseQuery", "bulkActionControls", "headerActionControls", "childDeviceGrid", "parentDeviceId", "withChildren", "showSearch", "activeClassName"], outputs: ["onColumnsChange", "onFilterChange", "onDeviceQueryStringChange", "itemsSelect"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
117
118
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: AddGroupComponent, decorators: [{
118
119
  type: Component,
119
- args: [{ selector: 'c8y-add-group', template: "<div class=\"d-contents\" *ngIf=\"!currentGroupId; else stepper\">\n <ng-container [ngTemplateOutlet]=\"stepper\"></ng-container>\n</div>\n\n<ng-template #stepper>\n <c8y-stepper\n class=\"d-col flex-nowrap no-align-items fit-h c8y-stepper--no-btns\"\n [disableDefaultIcons]=\"{ edit: true, done: false }\"\n [customClasses]=\"['col-md-6', 'col-md-offset-3', 'm-t-24', 'm-b-40', 'p-0', 'flex-no-shrink']\"\n linear\n c8yProductExperience\n inherit\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.ADD_GROUP.COMPONENTS.ADD_GROUP }\"\n >\n <cdk-step [stepControl]=\"formGroupStepOne\" [label]=\"'New group' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink separator-bottom col-xs-12\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'New group' | translate }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 flex-grow no-gutter\">\n <div class=\"card-inner-scroll fit-h\">\n <div class=\"card-block p-b-0\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <c8y-form-group [novalidation]=\"true\">\n <div [formGroup]=\"formGroupStepOne\">\n <c8y-form-group>\n <label translate>Name</label>\n <input\n class=\"form-control\"\n type=\"text\"\n formControlName=\"name\"\n placeholder=\"{{ 'e.g. First floor' | translate }} \"\n maxlength=\"254\"\n #nameRef\n required\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Description</label>\n <input\n class=\"form-control\"\n type=\"text\"\n formControlName=\"description\"\n placeholder=\"{{ 'e.g. first floor devices' | translate }}\"\n />\n </c8y-form-group>\n </div>\n </c8y-form-group>\n <c8y-form-group>\n <div [formGroup]=\"formGroupStepOne\"></div>\n </c8y-form-group>\n <div class=\"alert alert-info max-width-100\" translate *ngIf=\"!canAssignDevice\">\n You don't have permission to assign devices.\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n (onCancel)=\"onCancel.emit()\"\n (onCustom)=\"createGroup()\"\n [disabled]=\"!canCreateGroup\"\n [labels]=\"\n canAssignDevice\n ? { next: btnLabels.next, cancel: btnLabels.cancel }\n : { custom: btnLabels.create, cancel: btnLabels.cancel }\n \"\n [showButtons]=\"\n canAssignDevice ? { next: true, cancel: true } : { custom: true, cancel: true }\n \"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step [label]=\"'Assign devices' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink separator-bottom col-xs-12\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Assign devices' | translate }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 no-gutter flex-grow\">\n <c8y-device-grid\n [title]=\"'Select target devices' | translate\"\n [actionControls]=\"[]\"\n [infiniteScroll]=\"'auto'\"\n [selectable]=\"true\"\n [pagination]=\"pagination\"\n (itemsSelect)=\"onSelected($event)\"\n [refresh]=\"refresh\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.ADD_GROUP.COMPONENTS.ADD_GROUP }\"\n ></c8y-device-grid>\n </div>\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n (onCancel)=\"onCancel.emit()\"\n (onCustom)=\"createGroup()\"\n [labels]=\"{ custom: btnLabels.create }\"\n [disabled]=\"!canAssignDevice\"\n [pending]=\"pendingStatus\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</ng-template>\n" }]
120
+ args: [{ selector: 'c8y-add-group', template: "<div class=\"d-contents\" *ngIf=\"!currentGroupId; else stepper\">\n <ng-container [ngTemplateOutlet]=\"stepper\"></ng-container>\n</div>\n\n<ng-template #stepper>\n <c8y-stepper\n class=\"d-col flex-nowrap no-align-items fit-h c8y-stepper--no-btns\"\n [disableDefaultIcons]=\"{ edit: true, done: false }\"\n [customClasses]=\"['col-md-6', 'col-md-offset-3', 'm-t-24', 'm-b-40', 'p-0', 'flex-no-shrink']\"\n linear\n c8yProductExperience\n inherit\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.ADD_GROUP.COMPONENTS.ADD_GROUP }\"\n >\n <cdk-step [stepControl]=\"formGroupStepOne\" [label]=\"'New group' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink separator-bottom col-xs-12\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'New group' | translate }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 flex-grow no-gutter\">\n <div class=\"card-inner-scroll fit-h\">\n <div class=\"card-block p-b-0\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <c8y-form-group [novalidation]=\"true\">\n <div [formGroup]=\"formGroupStepOne\">\n <c8y-form-group>\n <label translate>Name</label>\n <input\n class=\"form-control\"\n type=\"text\"\n formControlName=\"name\"\n placeholder=\"{{ 'e.g. First floor' | translate }} \"\n maxlength=\"254\"\n #nameRef\n required\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Description</label>\n <input\n class=\"form-control\"\n type=\"text\"\n formControlName=\"description\"\n placeholder=\"{{ 'e.g. first floor devices' | translate }}\"\n />\n </c8y-form-group>\n </div>\n </c8y-form-group>\n <c8y-form-group>\n <div [formGroup]=\"formGroupStepOne\"></div>\n </c8y-form-group>\n <div class=\"alert alert-info max-width-100\" translate *ngIf=\"!canAssignDevice\">\n You don't have permission to assign devices.\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n (onCancel)=\"onCancel.emit()\"\n (onCustom)=\"createGroup()\"\n [disabled]=\"!canCreateGroup\"\n [labels]=\"\n canAssignDevice\n ? { next: btnLabels.next, cancel: btnLabels.cancel }\n : { custom: btnLabels.create, cancel: btnLabels.cancel }\n \"\n [showButtons]=\"\n canAssignDevice ? { next: true, cancel: true } : { custom: true, cancel: true }\n \"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step [label]=\"'Assign devices' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink separator-bottom col-xs-12\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Assign devices' | translate }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 no-gutter flex-grow\">\n <c8y-device-grid\n [title]=\"'Select target devices' | translate\"\n [actionControls]=\"[]\"\n [builtInActionsToHide]=\"builtInActionsToHide\"\n [infiniteScroll]=\"'auto'\"\n [selectable]=\"true\"\n [pagination]=\"pagination\"\n (itemsSelect)=\"onSelected($event)\"\n [refresh]=\"refresh\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.ADD_GROUP.COMPONENTS.ADD_GROUP }\"\n ></c8y-device-grid>\n </div>\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n (onCancel)=\"onCancel.emit()\"\n (onCustom)=\"createGroup()\"\n [labels]=\"{ custom: btnLabels.create }\"\n [disabled]=\"!canAssignDevice\"\n [pending]=\"pendingStatus\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</ng-template>\n" }]
120
121
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.AddGroupService }, { type: i3.AlertService }, { type: i4.SubAssetsService }, { type: i3.GainsightService }, { type: i3.Permissions }]; }, propDecorators: { currentGroupId: [{
121
122
  type: Input
122
123
  }], refresh: [{
@@ -135,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
135
136
  type: HostListener,
136
137
  args: ['document:keydown.enter', ['$event']]
137
138
  }] } });
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3N1Yi1hc3NldHMvYWRkLWdyb3VwL2FkZC1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zdWItYXNzZXRzL2FkZC1ncm91cC9hZGQtZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFDTCxZQUFZLEVBQ1osVUFBVSxFQUNWLGdCQUFnQixFQUNoQixPQUFPLEVBRVAsV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7QUFNdEQsTUFBTSxPQUFPLGlCQUFpQjtJQTRCNUIsWUFDVSxFQUFlLEVBQ2YsZUFBZ0MsRUFDaEMsS0FBbUIsRUFDbkIsZ0JBQWtDLEVBQ2xDLGdCQUFrQyxFQUNsQyxrQkFBK0I7UUFML0IsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQWE7UUFoQ2hDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFB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LENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7OzhHQWpJVSxpQkFBaUI7a0dBQWpCLGlCQUFpQix3VUFLakIsVUFBVSwwSUNqQ3ZCLDRxSkFzSEE7MkZEMUZhLGlCQUFpQjtrQkFKN0IsU0FBUzsrQkFDRSxlQUFlO21QQUloQixjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFFUCxPQUFPO3NCQUROLFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHeEMsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBOEJhLGNBQWM7c0JBQWpFLFlBQVk7dUJBQUMsd0JBQXdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIEM4eVN0ZXBwZXIsXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIFBhZ2luYXRpb24sXG4gIFBlcm1pc3Npb25zXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQUk9EVUNUX0VYUEVSSUVOQ0UgfSBmcm9tICcuLi9zaGFyZWQvc3ViLWFzc2V0cy5tb2RlbCc7XG5pbXBvcnQgeyBTdWJBc3NldHNTZXJ2aWNlIH0gZnJvbSAnLi4vc3ViLWFzc2V0cy5zZXJ2aWNlJztcbmltcG9ydCB7IEFkZEdyb3VwU2VydmljZSB9IGZyb20gJy4vYWRkLWdyb3VwLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWRkLWdyb3VwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1ncm91cC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQWRkR3JvdXBDb21wb25lbnQge1xuICBASW5wdXQoKSBjdXJyZW50R3JvdXBJZDogc3RyaW5nO1xuICBASW5wdXQoKSByZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb25EZXZpY2VRdWVyeVN0cmluZ0NoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIG9uQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAVmlld0NoaWxkKEM4eVN0ZXBwZXIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBzdGVwcGVyOiBDOHlTdGVwcGVyO1xuICBAVmlld0NoaWxkKCduYW1lUmVmJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIG5hbWVJbnB1dFJlZjogRWxlbWVudFJlZjtcbiAgZGV2aWNlUXVlcnlTdHJpbmdPdXRwdXQ6IHN0cmluZztcbiAgZm9ybUdyb3VwU3RlcE9uZTogRm9ybUdyb3VwO1xuICBwZW5kaW5nU3RhdHVzID0gZmFsc2U7XG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb24gPSB7IHBhZ2VTaXplOiAyMCwgY3VycmVudFBhZ2U6IDEgfTtcbiAgc2VsZWN0ZWQ6IHN0cmluZ1tdID0gW107XG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBjYW5DcmVhdGVHcm91cCA9IGZhbHNlO1xuICBjYW5Bc3NpZ25EZXZpY2UgPSBmYWxzZTtcbiAgUFJPRFVDVF9FWFBFUklFTkNFID0gUFJPRFVDVF9FWFBFUklFTkNFO1xuXG4gIHJlYWRvbmx5IElURU1TX1NFTEVDVF9MSU1JVDogbnVtYmVyID0gMTU7XG4gIHJlYWRvbmx5IGJ0bkxhYmVscyA9IHtcbiAgICBuZXh0OiBnZXR0ZXh0KCdOZXh0JyksXG4gICAgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSxcbiAgICBjcmVhdGU6IGdldHRleHQoJ0NyZWF0ZScpXG4gIH07XG5cbiAgcHJpdmF0ZSBuYW1lSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBhZGRHcm91cFNlcnZpY2U6IEFkZEdyb3VwU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdWJBc3NldHNTZXJ2aWNlOiBTdWJBc3NldHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZSxcbiAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNcbiAgKSB7fVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZW50ZXInLCBbJyRldmVudCddKSBvbkVudGVyS2V5RG93bihfZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAvLyBPcmRlciBtYXR0ZXJzISBOZWVkcyB0byBiZSBwbGFjZWQgYmVmb3JlIHRoaXMuc3RlcHBlci5uZXh0XG4gICAgaWYgKCh0aGlzLmlzR3JvdXBEZXRhaWxzU3RlcCgpICYmICF0aGlzLmNhbkFzc2lnbkRldmljZSkgfHwgdGhpcy5pc0Fzc2lnbkRldmljZVN0ZXAoKSkge1xuICAgICAgdGhpcy5jcmVhdGVHcm91cCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0ZXBwZXIubmV4dCgpO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtR3JvdXBTdGVwT25lID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBuYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgZGVzY3JpcHRpb246IFsnJ11cbiAgICB9KTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMub25DYW5jZWwuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVzZXRTdGVwcGVyKCkpO1xuICAgIHRoaXMuY2FuQ3JlYXRlR3JvdXAgPVxuICAgICAgdGhpcy5zdWJBc3NldHNTZXJ2aWNlLmNhbkNyZWF0ZUdyb3VwKCkgfHxcbiAgICAgIChhd2FpdCB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5jYW5FZGl0KFxuICAgICAgICBbXG4gICAgICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU4sXG4gICAgICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQ1JFQVRFLFxuICAgICAgICAgIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfQURNSU4sXG4gICAgICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9DUkVBVEVcbiAgICAgICAgXSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiB0aGlzLmN1cnJlbnRHcm91cElkXG4gICAgICAgIH1cbiAgICAgICkpO1xuICAgIHRoaXMuY2FuQXNzaWduRGV2aWNlID0gYXdhaXQgdGhpcy5zdWJBc3NldHNTZXJ2aWNlLmNhbkFzc2lnbkRldmljZSh7XG4gICAgICBpZDogdGhpcy5jdXJyZW50R3JvdXBJZFxuICAgIH0gYXMgSU1hbmFnZWRPYmplY3QpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMubmFtZUlucHV0ID0gdGhpcy5uYW1lSW5wdXRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHRoaXMuc2V0Rm9jdXNPbk5hbWVJbnB1dCgpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlR3JvdXAoKSB7XG4gICAgaWYgKHRoaXMuY2FuQ3JlYXRlR3JvdXAgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nU3RhdHVzID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLmFkZEdyb3VwU2VydmljZS5jcmVhdGVHcm91cEFuZEFzc2lnbkRldmljZXMoXG4gICAgICB0aGlzLmZvcm1Hcm91cFN0ZXBPbmUudmFsdWUsXG4gICAgICB0aGlzLmN1cnJlbnRHcm91cElkLFxuICAgICAgdGhpcy5zZWxlY3RlZFxuICAgICk7XG5cbiAgICB0aGlzLnBlbmRpbmdTdGF0dXMgPSBmYWxzZTtcbiAgICB0aGlzLnJlc2V0U3RlcHBlcigpO1xuICAgIGNvbnN0IGFsZXJ0TXNnID0gZ2V0dGV4dCgnR3JvdXAgY3JlYXRlZC4nKTtcbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5FVkVOVCwge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQUREX0dST1VQLkNPTVBPTkVOVFMuQUREX0dST1VQLFxuICAgICAgdXJsOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgIHJlc3VsdDogUFJPRFVDVF9FWFBFUklFTkNFLkFERF9HUk9VUC5SRVNVTFRTLkFERF9TVUNDRVNTXG4gICAgfSk7XG4gICAgdGhpcy5hbGVydC5zdWNjZXNzKGFsZXJ0TXNnKTtcbiAgICB0aGlzLnJlZnJlc2guZW1pdCgpO1xuICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgb25TZWxlY3RlZChzZWxlY3RlZERldmljZXNJRHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkRGV2aWNlc0lEcztcbiAgfVxuXG4gIHJlc2V0U3RlcHBlcigpIHtcbiAgICB0aGlzLnN0ZXBwZXIucmVzZXQoKTtcbiAgICB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCA9IDE7XG4gICAgdGhpcy5zZWxlY3RlZCA9IFtdO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNHcm91cERldGFpbHNTdGVwKCkge1xuICAgIHJldHVybiB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCA9PT0gMDtcbiAgfVxuXG4gIHByaXZhdGUgaXNBc3NpZ25EZXZpY2VTdGVwKCkge1xuICAgIHJldHVybiB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCA9PT0gMTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNPbk5hbWVJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5uYW1lSW5wdXQpIHtcbiAgICAgIHRoaXMubmFtZUlucHV0LmZvY3VzKCk7XG4gICAgICB0aGlzLm5hbWVJbnB1dC5zZWxlY3QoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkLWNvbnRlbnRzXCIgKm5nSWY9XCIhY3VycmVudEdyb3VwSWQ7IGVsc2Ugc3RlcHBlclwiPlxuICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInN0ZXBwZXJcIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3N0ZXBwZXI+XG4gIDxjOHktc3RlcHBlclxuICAgIGNsYXNzPVwiZC1jb2wgZmxleC1ub3dyYXAgbm8tYWxpZ24taXRlbXMgZml0LWggYzh5LXN0ZXBwZXItLW5vLWJ0bnNcIlxuICAgIFtkaXNhYmxlRGVmYXVsdEljb25zXT1cInsgZWRpdDogdHJ1ZSwgZG9uZTogZmFsc2UgfVwiXG4gICAgW2N1c3RvbUNsYXNzZXNdPVwiWydjb2wtbWQtNicsICdjb2wtbWQtb2Zmc2V0LTMnLCAnbS10LTI0JywgJ20tYi00MCcsICdwLTAnLCAnZmxleC1uby1zaHJpbmsnXVwiXG4gICAgbGluZWFyXG4gICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICBpbmhlcml0XG4gICAgW2FjdGlvbk5hbWVdPVwiUFJPRFVDVF9FWFBFUklFTkNFLkVWRU5UXCJcbiAgICBbYWN0aW9uRGF0YV09XCJ7IGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFERF9HUk9VUC5DT01QT05FTlRTLkFERF9HUk9VUCB9XCJcbiAgPlxuICAgIDxjZGstc3RlcCBbc3RlcENvbnRyb2xdPVwiZm9ybUdyb3VwU3RlcE9uZVwiIFtsYWJlbF09XCInTmV3IGdyb3VwJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInAtMTYgcC10LTAgZmxleC1uby1zaHJpbmsgc2VwYXJhdG9yLWJvdHRvbSBjb2wteHMtMTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtbWQtb2Zmc2V0LTMgY29sLWxnLTQgY29sLWxnLW9mZnNldC00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaDQgdGV4dC1jZW50ZXIgdGV4dC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAge3sgJ05ldyBncm91cCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBmbGV4LWdyb3cgbm8tZ3V0dGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWlubmVyLXNjcm9sbCBmaXQtaFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHAtYi0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtbWQtb2Zmc2V0LTMgY29sLWxnLTQgY29sLWxnLW9mZnNldC00XCI+XG4gICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIFtub3ZhbGlkYXRpb25dPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFN0ZXBPbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCB0cmFuc2xhdGU+TmFtZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gRmlyc3QgZmxvb3InIHwgdHJhbnNsYXRlIH19IFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIyNTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgI25hbWVSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cblxuICAgICAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5EZXNjcmlwdGlvbjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuIGZpcnN0IGZsb29yIGRldmljZXMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwU3RlcE9uZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm8gbWF4LXdpZHRoLTEwMFwiIHRyYW5zbGF0ZSAqbmdJZj1cIiFjYW5Bc3NpZ25EZXZpY2VcIj5cbiAgICAgICAgICAgICAgICAgIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYXNzaWduIGRldmljZXMuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxjOHktc3RlcHBlci1idXR0b25zXG4gICAgICAgIGNsYXNzPVwiZC1ibG9jayBjYXJkLWZvb3RlciBwLTI0IHNlcGFyYXRvclwiXG4gICAgICAgIChvbkNhbmNlbCk9XCJvbkNhbmNlbC5lbWl0KClcIlxuICAgICAgICAob25DdXN0b20pPVwiY3JlYXRlR3JvdXAoKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhY2FuQ3JlYXRlR3JvdXBcIlxuICAgICAgICBbbGFiZWxzXT1cIlxuICAgICAgICAgIGNhbkFzc2lnbkRldmljZVxuICAgICAgICAgICAgPyB7IG5leHQ6IGJ0bkxhYmVscy5uZXh0LCBjYW5jZWw6IGJ0bkxhYmVscy5jYW5jZWwgfVxuICAgICAgICAgICAgOiB7IGN1c3RvbTogYnRuTGFiZWxzLmNyZWF0ZSwgY2FuY2VsOiBidG5MYWJlbHMuY2FuY2VsIH1cbiAgICAgICAgXCJcbiAgICAgICAgW3Nob3dCdXR0b25zXT1cIlxuICAgICAgICAgIGNhbkFzc2lnbkRldmljZSA/IHsgbmV4dDogdHJ1ZSwgY2FuY2VsOiB0cnVlIH0gOiB7IGN1c3RvbTogdHJ1ZSwgY2FuY2VsOiB0cnVlIH1cbiAgICAgICAgXCJcbiAgICAgID48L2M4eS1zdGVwcGVyLWJ1dHRvbnM+XG4gICAgPC9jZGstc3RlcD5cbiAgICA8Y2RrLXN0ZXAgW2xhYmVsXT1cIidBc3NpZ24gZGV2aWNlcycgfCB0cmFuc2xhdGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTE2IHAtdC0wIGZsZXgtbm8tc2hyaW5rIHNlcGFyYXRvci1ib3R0b20gY29sLXhzLTEyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLW1kLW9mZnNldC0zIGNvbC1sZy00IGNvbC1sZy1vZmZzZXQtNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImg0IHRleHQtY2VudGVyIHRleHQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgIHt7ICdBc3NpZ24gZGV2aWNlcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBuby1ndXR0ZXIgZmxleC1ncm93XCI+XG4gICAgICAgIDxjOHktZGV2aWNlLWdyaWRcbiAgICAgICAgICBbdGl0bGVdPVwiJ1NlbGVjdCB0YXJnZXQgZGV2aWNlcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFthY3Rpb25Db250cm9sc109XCJbXVwiXG4gICAgICAgICAgW2luZmluaXRlU2Nyb2xsXT1cIidhdXRvJ1wiXG4gICAgICAgICAgW3NlbGVjdGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgW3BhZ2luYXRpb25dPVwicGFnaW5hdGlvblwiXG4gICAgICAgICAgKGl0ZW1zU2VsZWN0KT1cIm9uU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgW3JlZnJlc2hdPVwicmVmcmVzaFwiXG4gICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICBbYWN0aW9uTmFtZV09XCJQUk9EVUNUX0VYUEVSSUVOQ0UuRVZFTlRcIlxuICAgICAgICAgIFthY3Rpb25EYXRhXT1cInsgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQUREX0dST1VQLkNPTVBPTkVOVFMuQUREX0dST1VQIH1cIlxuICAgICAgICA+PC9jOHktZGV2aWNlLWdyaWQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxjOHktc3RlcHBlci1idXR0b25zXG4gICAgICAgIGNsYXNzPVwiZC1ibG9jayBjYXJkLWZvb3RlciBwLTI0IHNlcGFyYXRvclwiXG4gICAgICAgIChvbkNhbmNlbCk9XCJvbkNhbmNlbC5lbWl0KClcIlxuICAgICAgICAob25DdXN0b20pPVwiY3JlYXRlR3JvdXAoKVwiXG4gICAgICAgIFtsYWJlbHNdPVwieyBjdXN0b206IGJ0bkxhYmVscy5jcmVhdGUgfVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhY2FuQXNzaWduRGV2aWNlXCJcbiAgICAgICAgW3BlbmRpbmddPVwicGVuZGluZ1N0YXR1c1wiXG4gICAgICA+PC9jOHktc3RlcHBlci1idXR0b25zPlxuICAgIDwvY2RrLXN0ZXA+XG4gIDwvYzh5LXN0ZXBwZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3N1Yi1hc3NldHMvYWRkLWdyb3VwL2FkZC1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zdWItYXNzZXRzL2FkZC1ncm91cC9hZGQtZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFDTCxZQUFZLEVBRVosVUFBVSxFQUNWLGdCQUFnQixFQUNoQixPQUFPLEVBRVAsV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7QUFNdEQsTUFBTSxPQUFPLGlCQUFpQjtJQTZCNUIsWUFDVSxFQUFlLEVBQ2YsZUFBZ0MsRUFDaEMsS0FBbUIsRUFDbkIsZ0JBQWtDLEVBQ2xDLGdCQUFrQyxFQUNsQyxrQkFBK0I7UUFML0IsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQWE7UUFqQ2hDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFB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LFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDOzs4R0FsSVUsaUJBQWlCO2tHQUFqQixpQkFBaUIsd1VBS2pCLFVBQVUsMElDbEN2Qix1dUpBdUhBOzJGRDFGYSxpQkFBaUI7a0JBSjdCLFNBQVM7K0JBQ0UsZUFBZTttUEFJaEIsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0kseUJBQXlCO3NCQUFsQyxNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBRVAsT0FBTztzQkFETixTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR3hDLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQStCYSxjQUFjO3NCQUFqRSxZQUFZO3VCQUFDLHdCQUF3QixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBCdWlsdEluQWN0aW9uVHlwZSxcbiAgQzh5U3RlcHBlcixcbiAgR2FpbnNpZ2h0U2VydmljZSxcbiAgZ2V0dGV4dCxcbiAgUGFnaW5hdGlvbixcbiAgUGVybWlzc2lvbnNcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBST0RVQ1RfRVhQRVJJRU5DRSB9IGZyb20gJy4uL3NoYXJlZC9zdWItYXNzZXRzLm1vZGVsJztcbmltcG9ydCB7IFN1YkFzc2V0c1NlcnZpY2UgfSBmcm9tICcuLi9zdWItYXNzZXRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWRkR3JvdXBTZXJ2aWNlIH0gZnJvbSAnLi9hZGQtZ3JvdXAuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hZGQtZ3JvdXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLWdyb3VwLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBZGRHcm91cENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGN1cnJlbnRHcm91cElkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvbkRldmljZVF1ZXJ5U3RyaW5nQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBWaWV3Q2hpbGQoQzh5U3RlcHBlciwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHN0ZXBwZXI6IEM4eVN0ZXBwZXI7XG4gIEBWaWV3Q2hpbGQoJ25hbWVSZWYnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgbmFtZUlucHV0UmVmOiBFbGVtZW50UmVmO1xuICBkZXZpY2VRdWVyeVN0cmluZ091dHB1dDogc3RyaW5nO1xuICBmb3JtR3JvdXBTdGVwT25lOiBGb3JtR3JvdXA7XG4gIHBlbmRpbmdTdGF0dXMgPSBmYWxzZTtcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHsgcGFnZVNpemU6IDIwLCBjdXJyZW50UGFnZTogMSB9O1xuICBzZWxlY3RlZDogc3RyaW5nW10gPSBbXTtcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGNhbkNyZWF0ZUdyb3VwID0gZmFsc2U7XG4gIGNhbkFzc2lnbkRldmljZSA9IGZhbHNlO1xuICBQUk9EVUNUX0VYUEVSSUVOQ0UgPSBQUk9EVUNUX0VYUEVSSUVOQ0U7XG4gIGJ1aWx0SW5BY3Rpb25zVG9IaWRlOiBCdWlsdEluQWN0aW9uVHlwZVtdID0gW0J1aWx0SW5BY3Rpb25UeXBlLkRlbGV0ZV07XG5cbiAgcmVhZG9ubHkgSVRFTVNfU0VMRUNUX0xJTUlUOiBudW1iZXIgPSAxNTtcbiAgcmVhZG9ubHkgYnRuTGFiZWxzID0ge1xuICAgIG5leHQ6IGdldHRleHQoJ05leHQnKSxcbiAgICBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpLFxuICAgIGNyZWF0ZTogZ2V0dGV4dCgnQ3JlYXRlJylcbiAgfTtcblxuICBwcml2YXRlIG5hbWVJbnB1dDogSFRNTElucHV0RWxlbWVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGFkZEdyb3VwU2VydmljZTogQWRkR3JvdXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHN1YkFzc2V0c1NlcnZpY2U6IFN1YkFzc2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1xuICApIHt9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lbnRlcicsIFsnJGV2ZW50J10pIG9uRW50ZXJLZXlEb3duKF9ldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIC8vIE9yZGVyIG1hdHRlcnMhIE5lZWRzIHRvIGJlIHBsYWNlZCBiZWZvcmUgdGhpcy5zdGVwcGVyLm5leHRcbiAgICBpZiAoKHRoaXMuaXNHcm91cERldGFpbHNTdGVwKCkgJiYgIXRoaXMuY2FuQXNzaWduRGV2aWNlKSB8fCB0aGlzLmlzQXNzaWduRGV2aWNlU3RlcCgpKSB7XG4gICAgICB0aGlzLmNyZWF0ZUdyb3VwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RlcHBlci5uZXh0KCk7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvcm1Hcm91cFN0ZXBPbmUgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBkZXNjcmlwdGlvbjogWycnXVxuICAgIH0pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5vbkNhbmNlbC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXNldFN0ZXBwZXIoKSk7XG4gICAgdGhpcy5jYW5DcmVhdGVHcm91cCA9XG4gICAgICB0aGlzLnN1YkFzc2V0c1NlcnZpY2UuY2FuQ3JlYXRlR3JvdXAoKSB8fFxuICAgICAgKGF3YWl0IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmNhbkVkaXQoXG4gICAgICAgIFtcbiAgICAgICAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9BRE1JTixcbiAgICAgICAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9DUkVBVEUsXG4gICAgICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9BRE1JTixcbiAgICAgICAgICBQZXJtaXNzaW9ucy5ST0xFX01BTkFHRURfT0JKRUNUX0NSRUFURVxuICAgICAgICBdLFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IHRoaXMuY3VycmVudEdyb3VwSWRcbiAgICAgICAgfVxuICAgICAgKSk7XG4gICAgdGhpcy5jYW5Bc3NpZ25EZXZpY2UgPSBhd2FpdCB0aGlzLnN1YkFzc2V0c1NlcnZpY2UuY2FuQXNzaWduRGV2aWNlKHtcbiAgICAgIGlkOiB0aGlzLmN1cnJlbnRHcm91cElkXG4gICAgfSBhcyBJTWFuYWdlZE9iamVjdCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5uYW1lSW5wdXQgPSB0aGlzLm5hbWVJbnB1dFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgdGhpcy5zZXRGb2N1c09uTmFtZUlucHV0KCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVHcm91cCgpIHtcbiAgICBpZiAodGhpcy5jYW5DcmVhdGVHcm91cCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBlbmRpbmdTdGF0dXMgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMuYWRkR3JvdXBTZXJ2aWNlLmNyZWF0ZUdyb3VwQW5kQXNzaWduRGV2aWNlcyhcbiAgICAgIHRoaXMuZm9ybUdyb3VwU3RlcE9uZS52YWx1ZSxcbiAgICAgIHRoaXMuY3VycmVudEdyb3VwSWQsXG4gICAgICB0aGlzLnNlbGVjdGVkXG4gICAgKTtcblxuICAgIHRoaXMucGVuZGluZ1N0YXR1cyA9IGZhbHNlO1xuICAgIHRoaXMucmVzZXRTdGVwcGVyKCk7XG4gICAgY29uc3QgYWxlcnRNc2cgPSBnZXR0ZXh0KCdHcm91cCBjcmVhdGVkLicpO1xuICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkVWRU5ULCB7XG4gICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BRERfR1JPVVAuQ09NUE9ORU5UUy5BRERfR1JPVVAsXG4gICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgcmVzdWx0OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQUREX0dST1VQLlJFU1VMVFMuQUREX1NVQ0NFU1NcbiAgICB9KTtcbiAgICB0aGlzLmFsZXJ0LnN1Y2Nlc3MoYWxlcnRNc2cpO1xuICAgIHRoaXMucmVmcmVzaC5lbWl0KCk7XG4gICAgdGhpcy5vbkNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBvblNlbGVjdGVkKHNlbGVjdGVkRGV2aWNlc0lEczogc3RyaW5nW10pIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWREZXZpY2VzSURzO1xuICB9XG5cbiAgcmVzZXRTdGVwcGVyKCkge1xuICAgIHRoaXMuc3RlcHBlci5yZXNldCgpO1xuICAgIHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4ID0gMTtcbiAgICB0aGlzLnNlbGVjdGVkID0gW107XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0dyb3VwRGV0YWlsc1N0ZXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4ID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Fzc2lnbkRldmljZVN0ZXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4ID09PSAxO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c09uTmFtZUlucHV0KCkge1xuICAgIGlmICh0aGlzLm5hbWVJbnB1dCkge1xuICAgICAgdGhpcy5uYW1lSW5wdXQuZm9jdXMoKTtcbiAgICAgIHRoaXMubmFtZUlucHV0LnNlbGVjdCgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtY29udGVudHNcIiAqbmdJZj1cIiFjdXJyZW50R3JvdXBJZDsgZWxzZSBzdGVwcGVyXCI+XG4gIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic3RlcHBlclwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc3RlcHBlcj5cbiAgPGM4eS1zdGVwcGVyXG4gICAgY2xhc3M9XCJkLWNvbCBmbGV4LW5vd3JhcCBuby1hbGlnbi1pdGVtcyBmaXQtaCBjOHktc3RlcHBlci0tbm8tYnRuc1wiXG4gICAgW2Rpc2FibGVEZWZhdWx0SWNvbnNdPVwieyBlZGl0OiB0cnVlLCBkb25lOiBmYWxzZSB9XCJcbiAgICBbY3VzdG9tQ2xhc3Nlc109XCJbJ2NvbC1tZC02JywgJ2NvbC1tZC1vZmZzZXQtMycsICdtLXQtMjQnLCAnbS1iLTQwJywgJ3AtMCcsICdmbGV4LW5vLXNocmluayddXCJcbiAgICBsaW5lYXJcbiAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgIGluaGVyaXRcbiAgICBbYWN0aW9uTmFtZV09XCJQUk9EVUNUX0VYUEVSSUVOQ0UuRVZFTlRcIlxuICAgIFthY3Rpb25EYXRhXT1cInsgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQUREX0dST1VQLkNPTVBPTkVOVFMuQUREX0dST1VQIH1cIlxuICA+XG4gICAgPGNkay1zdGVwIFtzdGVwQ29udHJvbF09XCJmb3JtR3JvdXBTdGVwT25lXCIgW2xhYmVsXT1cIidOZXcgZ3JvdXAnIHwgdHJhbnNsYXRlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNiBwLXQtMCBmbGV4LW5vLXNocmluayBzZXBhcmF0b3ItYm90dG9tIGNvbC14cy0xMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1tZC1vZmZzZXQtMyBjb2wtbGctNCBjb2wtbGctb2Zmc2V0LTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoNCB0ZXh0LWNlbnRlciB0ZXh0LW1lZGl1bVwiPlxuICAgICAgICAgICAgICB7eyAnTmV3IGdyb3VwJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGZsZXgtZ3JvdyBuby1ndXR0ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaW5uZXItc2Nyb2xsIGZpdC1oXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgcC1iLTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1tZC1vZmZzZXQtMyBjb2wtbGctNCBjb2wtbGctb2Zmc2V0LTRcIj5cbiAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgW25vdmFsaWRhdGlvbl09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwU3RlcE9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5OYW1lPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLiBGaXJzdCBmbG9vcicgfCB0cmFuc2xhdGUgfX0gXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjI1NFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAjbmFtZVJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgICAgICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlPkRlc2NyaXB0aW9uPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gZmlyc3QgZmxvb3IgZGV2aWNlcycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBTdGVwT25lXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mbyBtYXgtd2lkdGgtMTAwXCIgdHJhbnNsYXRlICpuZ0lmPVwiIWNhbkFzc2lnbkRldmljZVwiPlxuICAgICAgICAgICAgICAgICAgWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhc3NpZ24gZGV2aWNlcy5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGM4eS1zdGVwcGVyLWJ1dHRvbnNcbiAgICAgICAgY2xhc3M9XCJkLWJsb2NrIGNhcmQtZm9vdGVyIHAtMjQgc2VwYXJhdG9yXCJcbiAgICAgICAgKG9uQ2FuY2VsKT1cIm9uQ2FuY2VsLmVtaXQoKVwiXG4gICAgICAgIChvbkN1c3RvbSk9XCJjcmVhdGVHcm91cCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5DcmVhdGVHcm91cFwiXG4gICAgICAgIFtsYWJlbHNdPVwiXG4gICAgICAgICAgY2FuQXNzaWduRGV2aWNlXG4gICAgICAgICAgICA/IHsgbmV4dDogYnRuTGFiZWxzLm5leHQsIGNhbmNlbDogYnRuTGFiZWxzLmNhbmNlbCB9XG4gICAgICAgICAgICA6IHsgY3VzdG9tOiBidG5MYWJlbHMuY3JlYXRlLCBjYW5jZWw6IGJ0bkxhYmVscy5jYW5jZWwgfVxuICAgICAgICBcIlxuICAgICAgICBbc2hvd0J1dHRvbnNdPVwiXG4gICAgICAgICAgY2FuQXNzaWduRGV2aWNlID8geyBuZXh0OiB0cnVlLCBjYW5jZWw6IHRydWUgfSA6IHsgY3VzdG9tOiB0cnVlLCBjYW5jZWw6IHRydWUgfVxuICAgICAgICBcIlxuICAgICAgPjwvYzh5LXN0ZXBwZXItYnV0dG9ucz5cbiAgICA8L2Nkay1zdGVwPlxuICAgIDxjZGstc3RlcCBbbGFiZWxdPVwiJ0Fzc2lnbiBkZXZpY2VzJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInAtMTYgcC10LTAgZmxleC1uby1zaHJpbmsgc2VwYXJhdG9yLWJvdHRvbSBjb2wteHMtMTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtbWQtb2Zmc2V0LTMgY29sLWxnLTQgY29sLWxnLW9mZnNldC00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaDQgdGV4dC1jZW50ZXIgdGV4dC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAge3sgJ0Fzc2lnbiBkZXZpY2VzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIG5vLWd1dHRlciBmbGV4LWdyb3dcIj5cbiAgICAgICAgPGM4eS1kZXZpY2UtZ3JpZFxuICAgICAgICAgIFt0aXRsZV09XCInU2VsZWN0IHRhcmdldCBkZXZpY2VzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2FjdGlvbkNvbnRyb2xzXT1cIltdXCJcbiAgICAgICAgICBbYnVpbHRJbkFjdGlvbnNUb0hpZGVdPVwiYnVpbHRJbkFjdGlvbnNUb0hpZGVcIlxuICAgICAgICAgIFtpbmZpbml0ZVNjcm9sbF09XCInYXV0bydcIlxuICAgICAgICAgIFtzZWxlY3RhYmxlXT1cInRydWVcIlxuICAgICAgICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgICAgICAgIChpdGVtc1NlbGVjdCk9XCJvblNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgIFtyZWZyZXNoXT1cInJlZnJlc2hcIlxuICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgW2FjdGlvbk5hbWVdPVwiUFJPRFVDVF9FWFBFUklFTkNFLkVWRU5UXCJcbiAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7IGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFERF9HUk9VUC5DT01QT05FTlRTLkFERF9HUk9VUCB9XCJcbiAgICAgICAgPjwvYzh5LWRldmljZS1ncmlkPlxuICAgICAgPC9kaXY+XG4gICAgICA8Yzh5LXN0ZXBwZXItYnV0dG9uc1xuICAgICAgICBjbGFzcz1cImQtYmxvY2sgY2FyZC1mb290ZXIgcC0yNCBzZXBhcmF0b3JcIlxuICAgICAgICAob25DYW5jZWwpPVwib25DYW5jZWwuZW1pdCgpXCJcbiAgICAgICAgKG9uQ3VzdG9tKT1cImNyZWF0ZUdyb3VwKClcIlxuICAgICAgICBbbGFiZWxzXT1cInsgY3VzdG9tOiBidG5MYWJlbHMuY3JlYXRlIH1cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkFzc2lnbkRldmljZVwiXG4gICAgICAgIFtwZW5kaW5nXT1cInBlbmRpbmdTdGF0dXNcIlxuICAgICAgPjwvYzh5LXN0ZXBwZXItYnV0dG9ucz5cbiAgICA8L2Nkay1zdGVwPlxuICA8L2M4eS1zdGVwcGVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { Component, Input } from '@angular/core';
2
2
  import { FormGroup } from '@angular/forms';
3
3
  import { AlertService, C8yJSONSchema, gettext, FilesService } from '@c8y/ngx-components';
4
- import { clone } from 'lodash-es';
4
+ import { clone, sortBy } from 'lodash-es';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@c8y/ngx-components";
7
7
  import * as i2 from "@angular/common";
@@ -37,7 +37,7 @@ export class AssetPropertiesItemComponent {
37
37
  if (complexObj.file) {
38
38
  complexProps[complexObj.key] = complexObj.value;
39
39
  }
40
- else if (this.value[complexObj.key] != null) {
40
+ else {
41
41
  complexProps[complexObj.key] = this.value[complexObj.key];
42
42
  }
43
43
  });
@@ -56,6 +56,10 @@ export class AssetPropertiesItemComponent {
56
56
  resolveJsonSchema() {
57
57
  if (this.jsonSchema) {
58
58
  const fieldConfig = this.c8yJsonSchemaService.toFieldConfig(this.jsonSchema, this.jsonSchema);
59
+ if (this.complex && this.complex.length > 0) {
60
+ const orderedFieldConfig = sortBy(fieldConfig.fieldGroup[0].fieldGroup, 'order');
61
+ fieldConfig.fieldGroup[0].fieldGroup = orderedFieldConfig;
62
+ }
59
63
  this.form = new FormGroup({});
60
64
  this.fields = [fieldConfig];
61
65
  this.model = this.getModel();
@@ -87,4 +91,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
87
91
  }], jsonSchema: [{
88
92
  type: Input
89
93
  }] } });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3N1Yi1hc3NldHMvYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3N1Yi1hc3NldHMvYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXpGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7O0FBTWxDLE1BQU0sT0FBTyw0QkFBNEI7SUF1QnZDLFlBQ1UsS0FBbUIsRUFDbkIsb0JBQW1DLEVBQ3BDLFlBQTBCO1FBRnpCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFlO1FBQ3BDLGlCQUFZLEdBQVosWUFBWSxDQUFjO0lBQ2hDLENBQUM7SUFFSixLQUFLLENBQUMsV0FBVyxDQUFDLE9BQXNCO1FBQ3RDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVztRQUN2QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJO2dCQUNGLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRTtvQkFDMUUsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzdELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQzdEO2FBQ0Y7WUFBQyxPQUFPLEVBQUUsRUFBRTtnQkFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO2FBQ3pEO1NBQ0Y7SUFDSCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNoQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ25CLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqRDtpQkFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRTtnQkFDN0MsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMzRDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVPLFFBQVE7UUFDZCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNDLE9BQU87Z0JBQ0wsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFO2FBQ3pDLENBQUM7U0FDSDtRQUNELE9BQU87WUFDTCxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBZTtRQUM3QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7O3lIQW5GVSw0QkFBNEI7NkdBQTVCLDRCQUE0QiwwT0NiekMseTdFQStEQSxzd0JEbERhLDRCQUE0QjsyRkFBNUIsNEJBQTRCO2tCQUp4QyxTQUFTOytCQUNFLDJCQUEyQjswSkFLckMsR0FBRztzQkFERixLQUFLO2dCQUdOLEtBQUs7c0JBREosS0FBSztnQkFHTixLQUFLO3NCQURKLEtBQUs7Z0JBR04sSUFBSTtzQkFESCxLQUFLO2dCQUdOLElBQUk7c0JBREgsS0FBSztnQkFHTixPQUFPO3NCQUROLEtBQUs7Z0JBR04sTUFBTTtzQkFETCxLQUFLO2dCQUdOLFVBQVU7c0JBRFQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3RCaW5hcnkgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIEM4eUpTT05TY2hlbWEsIGdldHRleHQsIEZpbGVzU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEFzc2V0UHJvcGVydGllc0l0ZW0gfSBmcm9tICcuL2Fzc2V0LXByb3BlcnRpZXMubW9kZWwnO1xuaW1wb3J0IHsgSlNPTlNjaGVtYTcgfSBmcm9tICdqc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hc3NldC1wcm9wZXJ0aWVzLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBc3NldFByb3BlcnRpZXNJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgQXNzZXRQcm9wZXJ0aWVzSXRlbSwgT25DaGFuZ2VzIHtcbiAgQElucHV0KClcbiAga2V5OiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHZhbHVlOiBhbnk7XG4gIEBJbnB1dCgpXG4gIGxhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHR5cGU6IHN0cmluZztcbiAgQElucHV0KClcbiAgZmlsZTogSU1hbmFnZWRPYmplY3RCaW5hcnk7XG4gIEBJbnB1dCgpXG4gIGNvbXBsZXg6IEFzc2V0UHJvcGVydGllc0l0ZW1bXTtcbiAgQElucHV0KClcbiAgaXNFZGl0OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBqc29uU2NoZW1hOiBKU09OU2NoZW1hNztcblxuICBmb3JtOiBGb3JtR3JvdXA7XG4gIGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXTtcbiAgbW9kZWw6IGFueTtcbiAgcHJldmlld0ltYWdlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGM4eUpzb25TY2hlbWFTZXJ2aWNlOiBDOHlKU09OU2NoZW1hLFxuICAgIHB1YmxpYyBmaWxlc1NlcnZpY2U6IEZpbGVzU2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChjaGFuZ2VzLmlzRWRpdCkge1xuICAgICAgdGhpcy5yZXNvbHZlSnNvblNjaGVtYSgpO1xuICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlRmlsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZUZpbGUoKSB7XG4gICAgaWYgKHRoaXMuZmlsZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZXNTZXJ2aWNlLmZpbGVOYW1lc0hhdmVWYWxpZEV4dGVuc2lvbih0aGlzLmZpbGUubmFtZSwgJ2ltYWdlJykpIHtcbiAgICAgICAgICBjb25zdCBpbWFnZUZpbGUgPSBhd2FpdCB0aGlzLmZpbGVzU2VydmljZS5nZXRGaWxlKHRoaXMuZmlsZSk7XG4gICAgICAgICAgdGhpcy5wcmV2aWV3SW1hZ2UgPSBhd2FpdCB0aGlzLmdldFByZXZpZXdJZkltYWdlKGltYWdlRmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIHRoaXMuYWxlcnQuZGFuZ2VyKGdldHRleHQoJ0ZpbGUgY291bGQgbm90IGJlIGxvYWRlZC4nKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtQ29tcGxleFByb3BzVmFsdWUoKSB7XG4gICAgY29uc3QgY29tcGxleFByb3BzID0ge307XG4gICAgdGhpcy5jb21wbGV4LmZvckVhY2goY29tcGxleE9iaiA9PiB7XG4gICAgICBpZiAoY29tcGxleE9iai5maWxlKSB7XG4gICAgICAgIGNvbXBsZXhQcm9wc1tjb21wbGV4T2JqLmtleV0gPSBjb21wbGV4T2JqLnZhbHVlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlW2NvbXBsZXhPYmoua2V5XSAhPSBudWxsKSB7XG4gICAgICAgIGNvbXBsZXhQcm9wc1tjb21wbGV4T2JqLmtleV0gPSB0aGlzLnZhbHVlW2NvbXBsZXhPYmoua2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY29tcGxleFByb3BzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNb2RlbCgpIHtcbiAgICBpZiAodGhpcy5jb21wbGV4ICYmIHRoaXMuY29tcGxleC5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbdGhpcy5rZXldOiB0aGlzLmZvcm1Db21wbGV4UHJvcHNWYWx1ZSgpXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogY2xvbmUodGhpcy52YWx1ZSlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlSnNvblNjaGVtYSgpIHtcbiAgICBpZiAodGhpcy5qc29uU2NoZW1hKSB7XG4gICAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuYzh5SnNvblNjaGVtYVNlcnZpY2UudG9GaWVsZENvbmZpZyh0aGlzLmpzb25TY2hlbWEsIHRoaXMuanNvblNjaGVtYSk7XG4gICAgICB0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICAgIHRoaXMuZmllbGRzID0gW2ZpZWxkQ29uZmlnXTtcbiAgICAgIHRoaXMubW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRQcmV2aWV3SWZJbWFnZShpbWFnZUZpbGU6IEZpbGUpIHtcbiAgICByZXR1cm4gdGhpcy5maWxlc1NlcnZpY2UudG9CYXNlNjQoaW1hZ2VGaWxlKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHlwZVwiICpuZ0lmPVwiIWlzRWRpdFwiPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cbiAgICB7eyAodmFsdWUgfCBjOHlEYXRlOiAnZnVsbERhdGUnKSB8fCAoJ1VuZGVmaW5lZCcgfCB0cmFuc2xhdGUpIH19XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZmlsZSdcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsZVwiPlxuICAgICAgPGltZyAqbmdJZj1cInByZXZpZXdJbWFnZVwiIFtzcmNdPVwicHJldmlld0ltYWdlXCIgY2xhc3M9XCJpbWctcmVzcG9uc2l2ZVwiIC8+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwiIXByZXZpZXdJbWFnZVwiXG4gICAgICAgIChjbGljayk9XCJmaWxlc1NlcnZpY2UuZG93bmxvYWQoZmlsZSlcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnRG93bmxvYWQnIHwgdHJhbnNsYXRlIH19IHt7IGZpbGUubmFtZSB9fVwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1jbGVhbiB0ZXh0LXRydW5jYXRlIHAtMFwiXG4gICAgICA+XG4gICAgICAgIHt7IGZpbGUubmFtZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaWxlXCI+XG4gICAgICB7eyAnTm8gZmlsZSBhdHRhY2hlZC4nIHwgdHJhbnNsYXRlIH19XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInb2JqZWN0J1wiPlxuICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgYzh5LWN1c3RvbS1wcm9wZXJ0aWVzXCI+XG4gICAgICA8bGlcbiAgICAgICAgKm5nRm9yPVwibGV0IHByb3Agb2YgY29tcGxleDsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ3NlcGFyYXRvci10b3AtYm90dG9tJzogaSA9PT0gMCwgJ3NlcGFyYXRvci1ib3R0b20nOiBpID4gMCB9XCJcbiAgICAgICAgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggdGV4dC1ub3dyYXBcIlxuICAgICAgPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBjbGFzcz1cInNtYWxsIG0tYi0wIG0tci04IHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIHRpdGxlPVwie3sgcHJvcC5sYWJlbCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnYS1zLXN0YXJ0JzogcHJvcC5maWxlIH1cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcHJvcC5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC1hdXRvXCIgc3R5bGU9XCJtYXgtd2lkdGg6IHt7IHByb3AuZmlsZSA/ICc1MCUnIDogJzEwMCUnIH19OyBtaW4td2lkdGg6MDtcIj5cbiAgICAgICAgICA8Yzh5LWFzc2V0LXByb3BlcnRpZXMtaXRlbVxuICAgICAgICAgICAgW2ZpbGVdPVwicHJvcC5maWxlXCJcbiAgICAgICAgICAgIFtrZXldPVwicHJvcC5rZXlcIlxuICAgICAgICAgICAgW3R5cGVdPVwicHJvcC50eXBlXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJwcm9wLnZhbHVlXCJcbiAgICAgICAgICA+PC9jOHktYXNzZXQtcHJvcGVydGllcy1pdGVtPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8IS0tXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiPlxuICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cInZhbHVlXCIgW2Rpc2FibGVkXT1cInRydWVcIiAvPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwidHlwZSA9PT0gJ251bWJlcicgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nID8gdHlwZSA6ICcnXCI+XG4gICAgPHAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCIgdGl0bGU9XCJ7eyB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiAoJ1VuZGVmaW5lZCcgfCB0cmFuc2xhdGUpIH19XCI+XG4gICAgICB7eyB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiAoJ1VuZGVmaW5lZCcgfCB0cmFuc2xhdGUpIH19XG4gICAgPC9wPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgIDxwIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiIHRpdGxlPVwie3sgKHZhbHVlIHwgdHJhbnNsYXRlKSB8fCAoJ1VuZGVmaW5lZCcgfCB0cmFuc2xhdGUpIH19XCI+XG4gICAgICB7eyAodmFsdWUgfCB0cmFuc2xhdGUpIHx8ICgnVW5kZWZpbmVkJyB8IHRyYW5zbGF0ZSkgfX1cbiAgICA8L3A+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG48Zm9ybWx5LWZvcm0gKm5nSWY9XCJpc0VkaXRcIiBbZm9ybV09XCJmb3JtXCIgW2ZpZWxkc109XCJmaWVsZHNcIiBbbW9kZWxdPVwibW9kZWxcIj48L2Zvcm1seS1mb3JtPlxuIl19
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3N1Yi1hc3NldHMvYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3N1Yi1hc3NldHMvYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXpGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7OztBQU0xQyxNQUFNLE9BQU8sNEJBQTRCO0lBdUJ2QyxZQUNVLEtBQW1CLEVBQ25CLG9CQUFtQyxFQUNwQyxZQUEwQjtRQUZ6QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBZTtRQUNwQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUNoQyxDQUFDO0lBRUosS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFzQjtRQUN0QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVc7UUFDdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsSUFBSTtnQkFDRixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVB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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3RCaW5hcnkgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIEM4eUpTT05TY2hlbWEsIGdldHRleHQsIEZpbGVzU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEFzc2V0UHJvcGVydGllc0l0ZW0gfSBmcm9tICcuL2Fzc2V0LXByb3BlcnRpZXMubW9kZWwnO1xuaW1wb3J0IHsgSlNPTlNjaGVtYTcgfSBmcm9tICdqc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBjbG9uZSwgc29ydEJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFzc2V0LXByb3BlcnRpZXMtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NldC1wcm9wZXJ0aWVzLWl0ZW0uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFzc2V0UHJvcGVydGllc0l0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBBc3NldFByb3BlcnRpZXNJdGVtLCBPbkNoYW5nZXMge1xuICBASW5wdXQoKVxuICBrZXk6IHN0cmluZztcbiAgQElucHV0KClcbiAgdmFsdWU6IGFueTtcbiAgQElucHV0KClcbiAgbGFiZWw6IHN0cmluZztcbiAgQElucHV0KClcbiAgdHlwZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBmaWxlOiBJTWFuYWdlZE9iamVjdEJpbmFyeTtcbiAgQElucHV0KClcbiAgY29tcGxleDogQXNzZXRQcm9wZXJ0aWVzSXRlbVtdO1xuICBASW5wdXQoKVxuICBpc0VkaXQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIGpzb25TY2hlbWE6IEpTT05TY2hlbWE3O1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdO1xuICBtb2RlbDogYW55O1xuICBwcmV2aWV3SW1hZ2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYzh5SnNvblNjaGVtYVNlcnZpY2U6IEM4eUpTT05TY2hlbWEsXG4gICAgcHVibGljIGZpbGVzU2VydmljZTogRmlsZXNTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoYW5nZXMuaXNFZGl0KSB7XG4gICAgICB0aGlzLnJlc29sdmVKc29uU2NoZW1hKCk7XG4gICAgICBhd2FpdCB0aGlzLnJlc29sdmVGaWxlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXNvbHZlRmlsZSgpIHtcbiAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodGhpcy5maWxlc1NlcnZpY2UuZmlsZU5hbWVzSGF2ZVZhbGlkRXh0ZW5zaW9uKHRoaXMuZmlsZS5uYW1lLCAnaW1hZ2UnKSkge1xuICAgICAgICAgIGNvbnN0IGltYWdlRmlsZSA9IGF3YWl0IHRoaXMuZmlsZXNTZXJ2aWNlLmdldEZpbGUodGhpcy5maWxlKTtcbiAgICAgICAgICB0aGlzLnByZXZpZXdJbWFnZSA9IGF3YWl0IHRoaXMuZ2V0UHJldmlld0lmSW1hZ2UoaW1hZ2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydC5kYW5nZXIoZ2V0dGV4dCgnRmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1Db21wbGV4UHJvcHNWYWx1ZSgpIHtcbiAgICBjb25zdCBjb21wbGV4UHJvcHMgPSB7fTtcbiAgICB0aGlzLmNvbXBsZXguZm9yRWFjaChjb21wbGV4T2JqID0+IHtcbiAgICAgIGlmIChjb21wbGV4T2JqLmZpbGUpIHtcbiAgICAgICAgY29tcGxleFByb3BzW2NvbXBsZXhPYmoua2V5XSA9IGNvbXBsZXhPYmoudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV4UHJvcHNbY29tcGxleE9iai5rZXldID0gdGhpcy52YWx1ZVtjb21wbGV4T2JqLmtleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbXBsZXhQcm9wcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9kZWwoKSB7XG4gICAgaWYgKHRoaXMuY29tcGxleCAmJiB0aGlzLmNvbXBsZXgubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3RoaXMua2V5XTogdGhpcy5mb3JtQ29tcGxleFByb3BzVmFsdWUoKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IGNsb25lKHRoaXMudmFsdWUpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUpzb25TY2hlbWEoKSB7XG4gICAgaWYgKHRoaXMuanNvblNjaGVtYSkge1xuICAgICAgY29uc3QgZmllbGRDb25maWcgPSB0aGlzLmM4eUpzb25TY2hlbWFTZXJ2aWNlLnRvRmllbGRDb25maWcodGhpcy5qc29uU2NoZW1hLCB0aGlzLmpzb25TY2hlbWEpO1xuICAgICAgaWYgKHRoaXMuY29tcGxleCAmJiB0aGlzLmNvbXBsZXgubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBvcmRlcmVkRmllbGRDb25maWcgPSBzb3J0QnkoZmllbGRDb25maWcuZmllbGRHcm91cFswXS5maWVsZEdyb3VwLCAnb3JkZXInKTtcbiAgICAgICAgZmllbGRDb25maWcuZmllbGRHcm91cFswXS5maWVsZEdyb3VwID0gb3JkZXJlZEZpZWxkQ29uZmlnO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgICB0aGlzLmZpZWxkcyA9IFtmaWVsZENvbmZpZ107XG4gICAgICB0aGlzLm1vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UHJldmlld0lmSW1hZ2UoaW1hZ2VGaWxlOiBGaWxlKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZXNTZXJ2aWNlLnRvQmFzZTY0KGltYWdlRmlsZSk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInR5cGVcIiAqbmdJZj1cIiFpc0VkaXRcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XG4gICAge3sgKHZhbHVlIHwgYzh5RGF0ZTogJ2Z1bGxEYXRlJykgfHwgKCdVbmRlZmluZWQnIHwgdHJhbnNsYXRlKSB9fVxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGUnXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbGVcIj5cbiAgICAgIDxpbWcgKm5nSWY9XCJwcmV2aWV3SW1hZ2VcIiBbc3JjXT1cInByZXZpZXdJbWFnZVwiIGNsYXNzPVwiaW1nLXJlc3BvbnNpdmVcIiAvPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIiFwcmV2aWV3SW1hZ2VcIlxuICAgICAgICAoY2xpY2spPVwiZmlsZXNTZXJ2aWNlLmRvd25sb2FkKGZpbGUpXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHRpdGxlPVwie3sgJ0Rvd25sb2FkJyB8IHRyYW5zbGF0ZSB9fSB7eyBmaWxlLm5hbWUgfX1cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tY2xlYW4gdGV4dC10cnVuY2F0ZSBwLTBcIlxuICAgICAgPlxuICAgICAgICB7eyBmaWxlLm5hbWUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlsZVwiPlxuICAgICAge3sgJ05vIGZpbGUgYXR0YWNoZWQuJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ29iamVjdCdcIj5cbiAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIGM4eS1jdXN0b20tcHJvcGVydGllc1wiPlxuICAgICAgPGxpXG4gICAgICAgICpuZ0Zvcj1cImxldCBwcm9wIG9mIGNvbXBsZXg7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdzZXBhcmF0b3ItdG9wLWJvdHRvbSc6IGkgPT09IDAsICdzZXBhcmF0b3ItYm90dG9tJzogaSA+IDAgfVwiXG4gICAgICAgIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHRleHQtbm93cmFwXCJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItOCB0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICB0aXRsZT1cInt7IHByb3AubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Etcy1zdGFydCc6IHByb3AuZmlsZSB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHByb3AubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtYXV0b1wiIHN0eWxlPVwibWF4LXdpZHRoOiB7eyBwcm9wLmZpbGUgPyAnNTAlJyA6ICcxMDAlJyB9fTsgbWluLXdpZHRoOjA7XCI+XG4gICAgICAgICAgPGM4eS1hc3NldC1wcm9wZXJ0aWVzLWl0ZW1cbiAgICAgICAgICAgIFtmaWxlXT1cInByb3AuZmlsZVwiXG4gICAgICAgICAgICBba2V5XT1cInByb3Aua2V5XCJcbiAgICAgICAgICAgIFt0eXBlXT1cInByb3AudHlwZVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwicHJvcC52YWx1ZVwiXG4gICAgICAgICAgPjwvYzh5LWFzc2V0LXByb3BlcnRpZXMtaXRlbT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPCEtLVxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJ2YWx1ZVwiIFtkaXNhYmxlZF09XCJ0cnVlXCIgLz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInR5cGUgPT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdib29sZWFuJyA/IHR5cGUgOiAnJ1wiPlxuICAgIDxwIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiIHRpdGxlPVwie3sgdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogKCdVbmRlZmluZWQnIHwgdHJhbnNsYXRlKSB9fVwiPlxuICAgICAge3sgdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogKCdVbmRlZmluZWQnIHwgdHJhbnNsYXRlKSB9fVxuICAgIDwvcD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICA8cCBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIiB0aXRsZT1cInt7ICh2YWx1ZSB8IHRyYW5zbGF0ZSkgfHwgKCdVbmRlZmluZWQnIHwgdHJhbnNsYXRlKSB9fVwiPlxuICAgICAge3sgKHZhbHVlIHwgdHJhbnNsYXRlKSB8fCAoJ1VuZGVmaW5lZCcgfCB0cmFuc2xhdGUpIH19XG4gICAgPC9wPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuPGZvcm1seS1mb3JtICpuZ0lmPVwiaXNFZGl0XCIgW2Zvcm1dPVwiZm9ybVwiIFtmaWVsZHNdPVwiZmllbGRzXCIgW21vZGVsXT1cIm1vZGVsXCI+PC9mb3JtbHktZm9ybT5cbiJdfQ==
@@ -1,6 +1,7 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { InventoryBinaryService, InventoryService } from '@c8y/client';
3
3
  import { AlertService, AssetTypesService, gettext } from '@c8y/ngx-components';
4
+ import { sortBy, toPairs, fromPairs } from 'lodash-es';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@c8y/ngx-components";
6
7
  import * as i2 from "@c8y/client";
@@ -56,6 +57,16 @@ export class AssetPropertiesComponent {
56
57
  const property = Object.keys(schemaProperties || {})[0];
57
58
  delete (mo?.c8y_JsonSchema?.properties[property] || {}).title;
58
59
  }
60
+ /**
61
+ * This method is used to order the complex properties in the order specified by the user in asset properties screen.
62
+ * @param mo - Managed object of the complex property associated with the asset.
63
+ */
64
+ orderComplexProperties(mo) {
65
+ const complexProperties = mo.c8y_JsonSchema.properties[mo.name]?.['properties'];
66
+ const keyValuesArray = toPairs(complexProperties);
67
+ const orderedProperties = sortBy(keyValuesArray, ([, value]) => value.order);
68
+ mo.c8y_JsonSchema.properties[mo.name]['properties'] = fromPairs(orderedProperties);
69
+ }
59
70
  async parseItem(mo, properties, asset) {
60
71
  if (!asset) {
61
72
  return [];
@@ -80,6 +91,7 @@ export class AssetPropertiesComponent {
80
91
  if (type === 'object') {
81
92
  // remove title to avoid excessive property name on asset complex properties form
82
93
  this.deleteTitleFromMOJsonSchema(mo);
94
+ this.orderComplexProperties(mo);
83
95
  if (!value) {
84
96
  value = {};
85
97
  for (const prop in properties[key].properties) {
@@ -118,16 +130,12 @@ export class AssetPropertiesComponent {
118
130
  async save(propertyValue, prop) {
119
131
  try {
120
132
  if (prop.type === 'object') {
121
- propertyValue[prop.key] = await this.uploadFiles(propertyValue[prop.key], prop.value);
133
+ this.updateUndefinedToNull(propertyValue[prop.key]);
122
134
  }
123
135
  else {
124
- for (const [key, value] of Object.entries(propertyValue)) {
125
- if (value === undefined) {
126
- propertyValue[key] = null;
127
- }
128
- }
129
- propertyValue = await this.uploadFiles(propertyValue, prop.value);
136
+ this.updateUndefinedToNull(propertyValue);
130
137
  }
138
+ propertyValue = await this.uploadFiles(propertyValue, prop.value);
131
139
  // Avoid making a PUT request containing just the id, as response body might be incomplete
132
140
  const hasValues = Object.values(propertyValue).some(value => value !== undefined);
133
141
  if (!hasValues) {
@@ -147,6 +155,13 @@ export class AssetPropertiesComponent {
147
155
  this.toggleEdit(prop);
148
156
  }
149
157
  }
158
+ updateUndefinedToNull(propertyValue) {
159
+ for (const [key, value] of Object.entries(propertyValue)) {
160
+ if (value === undefined) {
161
+ propertyValue[key] = null;
162
+ }
163
+ }
164
+ }
150
165
  keepOrder(correctOrderedIds, properties) {
151
166
  const orderedProperties = correctOrderedIds.map(({ id }) => {
152
167
  const foundProperty = properties.find(property => property.id === id);
@@ -197,10 +212,10 @@ export class AssetPropertiesComponent {
197
212
  }
198
213
  }
199
214
  AssetPropertiesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: AssetPropertiesComponent, deps: [{ token: i1.AssetTypesService }, { token: i2.InventoryService }, { token: i2.InventoryBinaryService }, { token: i1.AlertService }], target: i0.ɵɵFactoryTarget.Component });
200
- AssetPropertiesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: AssetPropertiesComponent, selector: "c8y-asset-properties", inputs: { asset: "asset", properties: "properties" }, outputs: { assetChange: "assetChange" }, usesOnChanges: true, ngImport: i0, template: "<ng-container>\n <div class=\"card-header bg-inherit separator sticky-top\">\n <h1\n class=\"card-title p-t-4 p-b-4\"\n ngNonBindable\n translate\n [translateParams]=\"{ label: assetType?.label || '' | translate }\"\n >\n {{ label }} properties\n </h1>\n </div>\n <div class=\"card-block\">\n <div\n class=\"text-center\"\n *ngIf=\"isLoading\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <ng-container *ngIf=\"!isLoading\">\n <div\n class=\"card m-b-8\"\n title=\"{{ prop.description | translate }}\"\n *ngFor=\"let prop of customProperties\"\n [ngClass]=\"{ 'card-highlight': prop.isEdit }\"\n >\n <div\n class=\"card-block\"\n [ngClass]=\"{ 'p-b-0': prop.isEdit }\"\n >\n <div\n class=\"d-flex p-b-8 a-i-center\"\n *ngIf=\"!prop.isEdit\"\n >\n <p\n class=\"text-medium text-truncate\"\n title=\"{{ prop?.label | translate }}\"\n >\n {{ prop?.label | translate }}\n </p>\n <button\n class=\"btn btn-dot m-l-auto text-12\"\n [attr.aria-label]=\"'Edit' | translate\"\n tooltip=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"toggleEdit(prop)\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n </div>\n <c8y-asset-properties-item\n #assetProps\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n [complex]=\"prop.complex\"\n [isEdit]=\"prop.isEdit\"\n [jsonSchema]=\"prop.jsonSchema\"\n ></c8y-asset-properties-item>\n <div *ngIf=\"prop.key === 'c8y_Position'\">\n <c8y-asset-location\n [locationMO]=\"asset\"\n [isEdit]=\"prop.isEdit\"\n [form]=\"assetProps.form\"\n ></c8y-asset-location>\n </div>\n </div>\n <div\n class=\"card-footer p-t-0\"\n *ngIf=\"prop.isEdit\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit(prop)\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n [disabled]=\"!assetProps?.form?.valid\"\n (click)=\"save(assetProps.form.value, prop)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.LoadingComponent, selector: "c8y-loading" }, { kind: "directive", type: i4.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "component", type: i5.AssetPropertiesItemComponent, selector: "c8y-asset-properties-item", inputs: ["key", "value", "label", "type", "file", "complex", "isEdit", "jsonSchema"] }, { kind: "component", type: i6.AssetLocationComponent, selector: "c8y-asset-location", inputs: ["isEdit", "locationMO", "form"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] });
215
+ AssetPropertiesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: AssetPropertiesComponent, selector: "c8y-asset-properties", inputs: { asset: "asset", properties: "properties" }, outputs: { assetChange: "assetChange" }, usesOnChanges: true, ngImport: i0, template: "<ng-container>\n <div class=\"card-header bg-inherit separator sticky-top\">\n <h1\n class=\"card-title p-t-4 p-b-4\"\n ngNonBindable\n translate\n [translateParams]=\"{ label: assetType?.label || '' | translate }\"\n >\n {{ label }} properties\n </h1>\n </div>\n <div class=\"card-block\">\n <div\n class=\"text-center\"\n *ngIf=\"isLoading\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <ng-container *ngIf=\"!isLoading\">\n <div\n class=\"card m-b-8\"\n title=\"{{ prop.description | translate }}\"\n *ngFor=\"let prop of customProperties\"\n [ngClass]=\"{ 'card-highlight': prop.isEdit }\"\n >\n <div\n class=\"card-block\"\n [ngClass]=\"{ 'p-b-0': prop.isEdit }\"\n >\n <div\n class=\"d-flex p-b-8 a-i-center\"\n *ngIf=\"!prop.isEdit\"\n >\n <p\n class=\"text-medium text-truncate\"\n title=\"{{ prop?.label | translate }}\"\n >\n {{ prop?.label | translate }}\n </p>\n <button\n class=\"btn btn-dot m-l-auto text-12\"\n [attr.aria-label]=\"'Edit' | translate\"\n tooltip=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"toggleEdit(prop)\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n </div>\n <c8y-asset-properties-item\n #assetProps\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n [complex]=\"prop.complex\"\n [isEdit]=\"prop.isEdit\"\n [jsonSchema]=\"prop.jsonSchema\"\n ></c8y-asset-properties-item>\n <div *ngIf=\"prop.key === 'c8y_Position'\">\n <c8y-asset-location\n [locationMO]=\"asset\"\n [isEdit]=\"prop.isEdit\"\n [form]=\"assetProps.form\"\n ></c8y-asset-location>\n </div>\n </div>\n <div\n class=\"card-footer p-t-0\"\n *ngIf=\"prop.isEdit\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit(prop)\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n [disabled]=\"!assetProps?.form?.valid || !assetProps?.form?.dirty \"\n (click)=\"save(assetProps.form.value, prop)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.LoadingComponent, selector: "c8y-loading" }, { kind: "directive", type: i4.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "component", type: i5.AssetPropertiesItemComponent, selector: "c8y-asset-properties-item", inputs: ["key", "value", "label", "type", "file", "complex", "isEdit", "jsonSchema"] }, { kind: "component", type: i6.AssetLocationComponent, selector: "c8y-asset-location", inputs: ["isEdit", "locationMO", "form"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] });
201
216
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: AssetPropertiesComponent, decorators: [{
202
217
  type: Component,
203
- args: [{ selector: 'c8y-asset-properties', template: "<ng-container>\n <div class=\"card-header bg-inherit separator sticky-top\">\n <h1\n class=\"card-title p-t-4 p-b-4\"\n ngNonBindable\n translate\n [translateParams]=\"{ label: assetType?.label || '' | translate }\"\n >\n {{ label }} properties\n </h1>\n </div>\n <div class=\"card-block\">\n <div\n class=\"text-center\"\n *ngIf=\"isLoading\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <ng-container *ngIf=\"!isLoading\">\n <div\n class=\"card m-b-8\"\n title=\"{{ prop.description | translate }}\"\n *ngFor=\"let prop of customProperties\"\n [ngClass]=\"{ 'card-highlight': prop.isEdit }\"\n >\n <div\n class=\"card-block\"\n [ngClass]=\"{ 'p-b-0': prop.isEdit }\"\n >\n <div\n class=\"d-flex p-b-8 a-i-center\"\n *ngIf=\"!prop.isEdit\"\n >\n <p\n class=\"text-medium text-truncate\"\n title=\"{{ prop?.label | translate }}\"\n >\n {{ prop?.label | translate }}\n </p>\n <button\n class=\"btn btn-dot m-l-auto text-12\"\n [attr.aria-label]=\"'Edit' | translate\"\n tooltip=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"toggleEdit(prop)\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n </div>\n <c8y-asset-properties-item\n #assetProps\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n [complex]=\"prop.complex\"\n [isEdit]=\"prop.isEdit\"\n [jsonSchema]=\"prop.jsonSchema\"\n ></c8y-asset-properties-item>\n <div *ngIf=\"prop.key === 'c8y_Position'\">\n <c8y-asset-location\n [locationMO]=\"asset\"\n [isEdit]=\"prop.isEdit\"\n [form]=\"assetProps.form\"\n ></c8y-asset-location>\n </div>\n </div>\n <div\n class=\"card-footer p-t-0\"\n *ngIf=\"prop.isEdit\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit(prop)\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n [disabled]=\"!assetProps?.form?.valid\"\n (click)=\"save(assetProps.form.value, prop)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n</ng-container>\n" }]
218
+ args: [{ selector: 'c8y-asset-properties', template: "<ng-container>\n <div class=\"card-header bg-inherit separator sticky-top\">\n <h1\n class=\"card-title p-t-4 p-b-4\"\n ngNonBindable\n translate\n [translateParams]=\"{ label: assetType?.label || '' | translate }\"\n >\n {{ label }} properties\n </h1>\n </div>\n <div class=\"card-block\">\n <div\n class=\"text-center\"\n *ngIf=\"isLoading\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <ng-container *ngIf=\"!isLoading\">\n <div\n class=\"card m-b-8\"\n title=\"{{ prop.description | translate }}\"\n *ngFor=\"let prop of customProperties\"\n [ngClass]=\"{ 'card-highlight': prop.isEdit }\"\n >\n <div\n class=\"card-block\"\n [ngClass]=\"{ 'p-b-0': prop.isEdit }\"\n >\n <div\n class=\"d-flex p-b-8 a-i-center\"\n *ngIf=\"!prop.isEdit\"\n >\n <p\n class=\"text-medium text-truncate\"\n title=\"{{ prop?.label | translate }}\"\n >\n {{ prop?.label | translate }}\n </p>\n <button\n class=\"btn btn-dot m-l-auto text-12\"\n [attr.aria-label]=\"'Edit' | translate\"\n tooltip=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"toggleEdit(prop)\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n </div>\n <c8y-asset-properties-item\n #assetProps\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n [complex]=\"prop.complex\"\n [isEdit]=\"prop.isEdit\"\n [jsonSchema]=\"prop.jsonSchema\"\n ></c8y-asset-properties-item>\n <div *ngIf=\"prop.key === 'c8y_Position'\">\n <c8y-asset-location\n [locationMO]=\"asset\"\n [isEdit]=\"prop.isEdit\"\n [form]=\"assetProps.form\"\n ></c8y-asset-location>\n </div>\n </div>\n <div\n class=\"card-footer p-t-0\"\n *ngIf=\"prop.isEdit\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit(prop)\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n [disabled]=\"!assetProps?.form?.valid || !assetProps?.form?.dirty \"\n (click)=\"save(assetProps.form.value, prop)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n</ng-container>\n" }]
204
219
  }], ctorParameters: function () { return [{ type: i1.AssetTypesService }, { type: i2.InventoryService }, { type: i2.InventoryBinaryService }, { type: i1.AlertService }]; }, propDecorators: { asset: [{
205
220
  type: Input
206
221
  }], assetChange: [{
@@ -208,4 +223,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
208
223
  }], properties: [{
209
224
  type: Input
210
225
  }] } });
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcHJvcGVydGllcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zdWItYXNzZXRzL2Fzc2V0LXByb3BlcnRpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc3ViLWFzc2V0cy9hc3NldC1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFHTCxzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7O0FBUS9FLE1BQU0sT0FBTyx3QkFBd0I7SUFZbkMsWUFDVSxVQUE2QixFQUM3QixTQUEyQixFQUMzQixlQUF1QyxFQUN2QyxLQUFtQjtRQUhuQixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUM3QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFDdkMsVUFBSyxHQUFMLEtBQUssQ0FBYztRQWRuQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBRzNELGVBQVUsR0FBcUIsRUFBRSxDQUFDO1FBR2xDLHFCQUFnQixHQUEwQixFQUFFLENBQUM7UUFDN0MsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLGNBQVMsR0FBRyxLQUFLLENBQUM7SUFPZixDQUFDO0lBRUosV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtZQUNqQixzREFBc0Q7WUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLENB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aGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJTWFuYWdlZE9iamVjdEJpbmFyeSxcbiAgSW52ZW50b3J5QmluYXJ5U2VydmljZSxcbiAgSW52ZW50b3J5U2VydmljZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIEFzc2V0VHlwZXNTZXJ2aWNlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBc3NldFByb3BlcnRpZXNJdGVtIH0gZnJvbSAnLi9hc3NldC1wcm9wZXJ0aWVzLm1vZGVsJztcbmltcG9ydCB7IEpTT05TY2hlbWE3IH0gZnJvbSAnanNvbi1zY2hlbWEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYXNzZXQtcHJvcGVydGllcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NldC1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBc3NldFByb3BlcnRpZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBhc3NldDogSU1hbmFnZWRPYmplY3Q7XG4gIEBPdXRwdXQoKSBhc3NldENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SU1hbmFnZWRPYmplY3Q+KCk7XG5cbiAgQElucHV0KClcbiAgcHJvcGVydGllczogSU1hbmFnZWRPYmplY3RbXSA9IFtdO1xuXG4gIGFzc2V0VHlwZTogSU1hbmFnZWRPYmplY3Q7XG4gIGN1c3RvbVByb3BlcnRpZXM6IEFzc2V0UHJvcGVydGllc0l0ZW1bXSA9IFtdO1xuICBpc0VkaXQgPSBmYWxzZTtcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhc3NldFR5cGVzOiBBc3NldFR5cGVzU2VydmljZSxcbiAgICBwcml2YXRlIGludmVudG9yeTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcml2YXRlIGludmVudG9yeUJpbmFyeTogSW52ZW50b3J5QmluYXJ5U2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5hc3NldCkge1xuICAgICAgLy8gQmFjayBidXR0b24gaGFuZGxpbmcsIGFzIGNvbXBvbmVudCBpcyBub3QgZGVzdHJveWVkXG4gICAgICB0aGlzLmFzc2V0VHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuY3VzdG9tUHJvcGVydGllcyA9IFtdO1xuICAgICAgdGhpcy5sb2FkQXNzZXQoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkQXNzZXQoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuYXNzZXRUeXBlID0gdGhpcy5hc3NldFR5cGVzLmdldEFzc2V0VHlwZUJ5TmFtZSh0aGlzLmFzc2V0LnR5cGUpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnByb3BlcnRpZXMgPSB0aGlzLmtlZXBPcmRlcihcbiAgICAgICAgdGhpcy5hc3NldFR5cGU/LmM4eV9Jc0Fzc2V0VHlwZT8ucHJvcGVydGllcyxcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zb2xlLndhcm4oZXgpO1xuICAgIH1cbiAgICB0aGlzLmN1c3RvbVByb3BlcnRpZXMgPSBhd2FpdCB0aGlzLnJlc29sdmVDdXN0b21Qcm9wZXJ0aWVzKHRoaXMucHJvcGVydGllcyk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHJlc29sdmVDdXN0b21Qcm9wZXJ0aWVzKG1hbmFnZWRPYmplY3RzOiBJTWFuYWdlZE9iamVjdFtdKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IFtdO1xuICAgIGZvciAoY29uc3QgbW8gb2YgbWFuYWdlZE9iamVjdHMpIHtcbiAgICAgIGlmIChtby5jOHlfSnNvblNjaGVtYSkge1xuICAgICAgICBjb25zdCBbaXRlbV0gPSBhd2FpdCB0aGlzLnBhcnNlSXRlbShtbywgbW8uYzh5X0pzb25TY2hlbWEucHJvcGVydGllcywgdGhpcy5hc3NldCk7XG4gICAgICAgIHRoaXMuc2V0SXRlbVJlcXVpcmVkKGl0ZW0sIG1vKTtcbiAgICAgICAgcHJvcGVydGllcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcGVydGllcztcbiAgfVxuXG4gIGRlbGV0ZVRpdGxlRnJvbU1PSnNvblNjaGVtYShtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCBzY2hlbWFQcm9wZXJ0aWVzID0gbW8/LmM4eV9Kc29uU2NoZW1hPy5wcm9wZXJ0aWVzO1xuICAgIGNvbnN0IHByb3BlcnR5ID0gT2JqZWN0LmtleXMoc2NoZW1hUHJvcGVydGllcyB8fCB7fSlbMF07XG4gICAgZGVsZXRlIChtbz8uYzh5X0pzb25TY2hlbWE/LnByb3BlcnRpZXNbcHJvcGVydHldIHx8IHt9KS50aXRsZTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlSXRlbShtbzogSU1hbmFnZWRPYmplY3QsIHByb3BlcnRpZXMsIGFzc2V0KTogUHJvbWlzZTxBc3NldFByb3BlcnRpZXNJdGVtW10+IHtcbiAgICBpZiAoIWFzc2V0KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcbiAgICBjb25zdCBpdGVtczogQXNzZXRQcm9wZXJ0aWVzSXRlbVtdID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgbGV0IHZhbHVlID0gYXNzZXRba2V5XTtcbiAgICAgIGNvbnN0IHR5cGUgPSBwcm9wZXJ0aWVzW2tleV0udHlwZTtcbiAgICAgIGNvbnN0IHRpdGxlID0gcHJvcGVydGllc1trZXldLnRpdGxlO1xuICAgICAgbGV0IGZpbGU7XG4gICAgICBpZiAodHlwZSA9PT0gJ2ZpbGUnICYmIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZpbGVJZCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyB2YWx1ZVswXT8uZmlsZT8uaWQgOiB2YWx1ZTtcbiAgICAgICAgY29uc3QgZmlsZURhdGEgPSBhd2FpdCB0aGlzLmdldEZpbGVNYW5hZ2VkT2JqZWN0KGZpbGVJZCk7XG4gICAgICAgIGZpbGUgPSBmaWxlRGF0YTtcbiAgICAgICAgdmFsdWUgPSBbZmlsZURhdGFdO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgY29uc3QgdmFsdWVEYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICB2YWx1ZSA9ICFpc05hTih2YWx1ZURhdGUuZ2V0VGltZSgpKSA/IHZhbHVlRGF0ZSA6IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHRpdGxlIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBwcm9wZXJ0eSBuYW1lIG9uIGFzc2V0IGNvbXBsZXggcHJvcGVydGllcyBmb3JtXG4gICAgICAgIHRoaXMuZGVsZXRlVGl0bGVGcm9tTU9Kc29uU2NoZW1hKG1vKTtcblxuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgdmFsdWUgPSB7fTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gcHJvcGVydGllc1trZXldLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHZhbHVlW3Byb3BdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGxhYmVsOiB0aXRsZSB8fCBtby5sYWJlbCxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgZGVzY3JpcHRpb246IG1vLmRlc2NyaXB0aW9uLFxuICAgICAgICBmaWxlLFxuICAgICAgICBjb21wbGV4OlxuICAgICAgICAgIHR5cGUgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IGF3YWl0IHRoaXMucGFyc2VJdGVtKG1vLCBwcm9wZXJ0aWVzW2tleV0ucHJvcGVydGllcywgdmFsdWUpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNFZGl0OiBmYWxzZSxcbiAgICAgICAganNvblNjaGVtYTogbW8uYzh5X0pzb25TY2hlbWFcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICB0b2dnbGVFZGl0KHByb3A6IEFzc2V0UHJvcGVydGllc0l0ZW0pIHtcbiAgICBwcm9wLmlzRWRpdCA9ICFwcm9wLmlzRWRpdDtcbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVNYW5hZ2VkT2JqZWN0KGlkOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwoaWQpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZShwcm9wZXJ0eVZhbHVlLCBwcm9wOiBBc3NldFByb3BlcnRpZXNJdGVtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChwcm9wLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHByb3BlcnR5VmFsdWVbcHJvcC5rZXldID0gYXdhaXQgdGhpcy51cGxvYWRGaWxlcyhwcm9wZXJ0eVZhbHVlW3Byb3Aua2V5XSwgcHJvcC52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wZXJ0eVZhbHVlKSkge1xuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eVZhbHVlW2tleV0gPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwcm9wZXJ0eVZhbHVlID0gYXdhaXQgdGhpcy51cGxvYWRGaWxlcyhwcm9wZXJ0eVZhbHVlLCBwcm9wLnZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXZvaWQgbWFraW5nIGEgUFVUIHJlcXVlc3QgY29udGFpbmluZyBqdXN0IHRoZSBpZCwgYXMgcmVzcG9uc2UgYm9keSBtaWdodCBiZSBpbmNvbXBsZXRlXG4gICAgICBjb25zdCBoYXNWYWx1ZXMgPSBPYmplY3QudmFsdWVzKHByb3BlcnR5VmFsdWUpLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCk7XG4gICAgICBpZiAoIWhhc1ZhbHVlcykge1xuICAgICAgICB0aGlzLnRvZ2dsZUVkaXQocHJvcCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVwZGF0ZWRBc3NldCA9IHsgaWQ6IHRoaXMuYXNzZXQuaWQsIC4uLnByb3BlcnR5VmFsdWUgfTtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkudXBkYXRlKHVwZGF0ZWRBc3NldCk7XG4gICAgICB0aGlzLnRvZ2dsZUVkaXQocHJvcCk7XG4gICAgICB0aGlzLmFzc2V0ID0gZGF0YTtcbiAgICAgIHRoaXMuYXNzZXRDaGFuZ2UuZW1pdCh0aGlzLmFzc2V0KTtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEFzc2V0KCk7XG4gICAgICB0aGlzLmFsZXJ0LnN1Y2Nlc3MoZ2V0dGV4dCgnQXNzZXQgcHJvcGVydGllcyB1cGRhdGVkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIHRoaXMudG9nZ2xlRWRpdChwcm9wKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGtlZXBPcmRlcihjb3JyZWN0T3JkZXJlZElkcywgcHJvcGVydGllcykge1xuICAgIGNvbnN0IG9yZGVyZWRQcm9wZXJ0aWVzID0gY29ycmVjdE9yZGVyZWRJZHMubWFwKCh7IGlkIH0pID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kUHJvcGVydHkgPSBwcm9wZXJ0aWVzLmZpbmQocHJvcGVydHkgPT4gcHJvcGVydHkuaWQgPT09IGlkKTtcbiAgICAgIGlmICghZm91bmRQcm9wZXJ0eSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N1c3RvbSBwcm9wZXJ0eSBtaXNtYXRjaCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvdW5kUHJvcGVydHk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG9yZGVyZWRQcm9wZXJ0aWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGxvYWRGaWxlcyhtb2RlbDogb2JqZWN0LCBtb0lkPzogSU1hbmFnZWRPYmplY3RCaW5hcnlbXSk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG1vZGVsKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbFtrZXldKSAmJiBtb2RlbFtrZXldWzBdPy5maWxlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHVwbG9hZCA9IGF3YWl0IHRoaXMuaW52ZW50b3J5QmluYXJ5LmNyZWF0ZShtb2RlbFtrZXldWzBdLmZpbGUpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAobW9JZCAmJiBtb0lkWzBdKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5LmNoaWxkQWRkaXRpb25zUmVtb3ZlKG1vSWRbMF0sIHRoaXMuYXNzZXQuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbW9kZWxba2V5XSA9IHVwbG9hZC5kYXRhLmlkO1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5LmNoaWxkQWRkaXRpb25zQWRkKHVwbG9hZC5kYXRhLmlkLCB0aGlzLmFzc2V0LmlkKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cblxuICBwcml2YXRlIHNldEl0ZW1SZXF1aXJlZChpdGVtOiBBc3NldFByb3BlcnRpZXNJdGVtLCBtbzogSU1hbmFnZWRPYmplY3QpOiB2b2lkIHtcbiAgICBjb25zdCBpc0Fzc2V0UHJvcGVydHlSZXF1aXJlZCA9ICEhdGhpcy5hc3NldFR5cGU/LmM4eV9Jc0Fzc2V0VHlwZT8ucHJvcGVydGllcy5maW5kKFxuICAgICAgcCA9PiBwLmlkID09PSBtby5pZFxuICAgICk/LmlzUmVxdWlyZWQ7XG4gICAgaWYgKCFpc0Fzc2V0UHJvcGVydHlSZXF1aXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc0NvbXBsZXhQcm9wZXJ0eSA9ICEhaXRlbT8uY29tcGxleD8ubGVuZ3RoO1xuICAgIGlmIChpc0NvbXBsZXhQcm9wZXJ0eSkge1xuICAgICAgY29uc3QgY29tcGxleFByb3BlcnR5ID0gaXRlbS5qc29uU2NoZW1hPy5wcm9wZXJ0aWVzPy5bbW8uYzh5X0pzb25TY2hlbWEua2V5XSBhcyBKU09OU2NoZW1hNztcbiAgICAgIGNvbXBsZXhQcm9wZXJ0eS5yZXF1aXJlZCA9IGl0ZW0uY29tcGxleC5tYXAoKHsga2V5IH0pID0+IGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0uanNvblNjaGVtYS5yZXF1aXJlZCA9IFttby5jOHlfSnNvblNjaGVtYS5rZXldO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lcj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJnLWluaGVyaXQgc2VwYXJhdG9yIHN0aWNreS10b3BcIj5cbiAgICA8aDFcbiAgICAgIGNsYXNzPVwiY2FyZC10aXRsZSBwLXQtNCBwLWItNFwiXG4gICAgICBuZ05vbkJpbmRhYmxlXG4gICAgICB0cmFuc2xhdGVcbiAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwieyBsYWJlbDogYXNzZXRUeXBlPy5sYWJlbCB8fCAnJyB8IHRyYW5zbGF0ZSB9XCJcbiAgICA+XG4gICAgICB7eyBsYWJlbCB9fSBwcm9wZXJ0aWVzXG4gICAgPC9oMT5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiXG4gICAgICAqbmdJZj1cImlzTG9hZGluZ1wiXG4gICAgPlxuICAgICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNhcmQgbS1iLThcIlxuICAgICAgICB0aXRsZT1cInt7IHByb3AuZGVzY3JpcHRpb24gfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAqbmdGb3I9XCJsZXQgcHJvcCBvZiBjdXN0b21Qcm9wZXJ0aWVzXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnY2FyZC1oaWdobGlnaHQnOiBwcm9wLmlzRWRpdCB9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY2FyZC1ibG9ja1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAncC1iLTAnOiBwcm9wLmlzRWRpdCB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IHAtYi04IGEtaS1jZW50ZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCIhcHJvcC5pc0VkaXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1tZWRpdW0gdGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgcHJvcD8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBwcm9wPy5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90IG0tbC1hdXRvIHRleHQtMTJcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidFZGl0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnRWRpdCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFZGl0KHByb3ApXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInBlbmNpbFwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxjOHktYXNzZXQtcHJvcGVydGllcy1pdGVtXG4gICAgICAgICAgICAjYXNzZXRQcm9wc1xuICAgICAgICAgICAgW2ZpbGVdPVwicHJvcC5maWxlXCJcbiAgICAgICAgICAgIFtrZXldPVwicHJvcC5rZXlcIlxuICAgICAgICAgICAgW3R5cGVdPVwicHJvcC50eXBlXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJwcm9wLnZhbHVlXCJcbiAgICAgICAgICAgIFtjb21wbGV4XT1cInByb3AuY29tcGxleFwiXG4gICAgICAgICAgICBbaXNFZGl0XT1cInByb3AuaXNFZGl0XCJcbiAgICAgICAgICAgIFtqc29uU2NoZW1hXT1cInByb3AuanNvblNjaGVtYVwiXG4gICAgICAgICAgPjwvYzh5LWFzc2V0LXByb3BlcnRpZXMtaXRlbT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdjOHlfUG9zaXRpb24nXCI+XG4gICAgICAgICAgICA8Yzh5LWFzc2V0LWxvY2F0aW9uXG4gICAgICAgICAgICAgIFtsb2NhdGlvbk1PXT1cImFzc2V0XCJcbiAgICAgICAgICAgICAgW2lzRWRpdF09XCJwcm9wLmlzRWRpdFwiXG4gICAgICAgICAgICAgIFtmb3JtXT1cImFzc2V0UHJvcHMuZm9ybVwiXG4gICAgICAgICAgICA+PC9jOHktYXNzZXQtbG9jYXRpb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjYXJkLWZvb3RlciBwLXQtMFwiXG4gICAgICAgICAgKm5nSWY9XCJwcm9wLmlzRWRpdFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc21cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFZGl0KHByb3ApXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhYXNzZXRQcm9wcz8uZm9ybT8udmFsaWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNhdmUoYXNzZXRQcm9wcy5mb3JtLnZhbHVlLCBwcm9wKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcHJvcGVydGllcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zdWItYXNzZXRzL2Fzc2V0LXByb3BlcnRpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc3ViLWFzc2V0cy9hc3NldC1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFHTCxzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHL0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7Ozs7OztBQU12RCxNQUFNLE9BQU8sd0JBQXdCO0lBWW5DLFlBQ1UsVUFBNkIsRUFDN0IsU0FBMkIsRUFDM0IsZUFBdUMsRUFDdkMsS0FBbUI7UUFIbkIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDN0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLFVBQUssR0FBTCxLQUFLLENBQWM7UUFkbkIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUczRCxlQUFVLEdBQXFCLEVBQUUsQ0FBQztRQUdsQyxxQkFBZ0IsR0FBMEIsRUFBRSxDQUFDO1FBQzdDLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixjQUFTLEdBQUcsS0FBSyxDQUFDO0lBT2YsQ0FBQztJQUVKLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDakIsc0RBQXNEO1lBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcs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QixFQUFFO1lBQ3JCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQWdCLENBQUM7WUFDNUYsZUFBZSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQy9EO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEQ7SUFDSCxDQUFDOztxSEE1TlUsd0JBQXdCO3lHQUF4Qix3QkFBd0IsZ0xDaEJyQywrM0ZBK0ZBOzJGRC9FYSx3QkFBd0I7a0JBSnBDLFNBQVM7K0JBQ0Usc0JBQXNCO3VNQUl2QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFHUCxVQUFVO3NCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBJTWFuYWdlZE9iamVjdCxcbiAgSU1hbmFnZWRPYmplY3RCaW5hcnksXG4gIEludmVudG9yeUJpbmFyeVNlcnZpY2UsXG4gIEludmVudG9yeVNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBBc3NldFR5cGVzU2VydmljZSwgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXNzZXRQcm9wZXJ0aWVzSXRlbSB9IGZyb20gJy4vYXNzZXQtcHJvcGVydGllcy5tb2RlbCc7XG5pbXBvcnQgeyBKU09OU2NoZW1hNyB9IGZyb20gJ2pzb24tc2NoZW1hJztcbmltcG9ydCB7IHNvcnRCeSwgdG9QYWlycywgZnJvbVBhaXJzIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFzc2V0LXByb3BlcnRpZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXNzZXQtcHJvcGVydGllcy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQXNzZXRQcm9wZXJ0aWVzQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgYXNzZXQ6IElNYW5hZ2VkT2JqZWN0O1xuICBAT3V0cHV0KCkgYXNzZXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElNYW5hZ2VkT2JqZWN0PigpO1xuXG4gIEBJbnB1dCgpXG4gIHByb3BlcnRpZXM6IElNYW5hZ2VkT2JqZWN0W10gPSBbXTtcblxuICBhc3NldFR5cGU6IElNYW5hZ2VkT2JqZWN0O1xuICBjdXN0b21Qcm9wZXJ0aWVzOiBBc3NldFByb3BlcnRpZXNJdGVtW10gPSBbXTtcbiAgaXNFZGl0ID0gZmFsc2U7XG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXNzZXRUeXBlczogQXNzZXRUeXBlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlCaW5hcnk6IEludmVudG9yeUJpbmFyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlXG4gICkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuYXNzZXQpIHtcbiAgICAgIC8vIEJhY2sgYnV0dG9uIGhhbmRsaW5nLCBhcyBjb21wb25lbnQgaXMgbm90IGRlc3Ryb3llZFxuICAgICAgdGhpcy5hc3NldFR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmN1c3RvbVByb3BlcnRpZXMgPSBbXTtcbiAgICAgIHRoaXMubG9hZEFzc2V0KCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZEFzc2V0KCkge1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmFzc2V0VHlwZSA9IHRoaXMuYXNzZXRUeXBlcy5nZXRBc3NldFR5cGVCeU5hbWUodGhpcy5hc3NldC50eXBlKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gdGhpcy5rZWVwT3JkZXIoXG4gICAgICAgIHRoaXMuYXNzZXRUeXBlPy5jOHlfSXNBc3NldFR5cGU/LnByb3BlcnRpZXMsXG4gICAgICAgIHRoaXMucHJvcGVydGllc1xuICAgICAgKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc29sZS53YXJuKGV4KTtcbiAgICB9XG4gICAgdGhpcy5jdXN0b21Qcm9wZXJ0aWVzID0gYXdhaXQgdGhpcy5yZXNvbHZlQ3VzdG9tUHJvcGVydGllcyh0aGlzLnByb3BlcnRpZXMpO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBhc3luYyByZXNvbHZlQ3VzdG9tUHJvcGVydGllcyhtYW5hZ2VkT2JqZWN0czogSU1hbmFnZWRPYmplY3RbXSkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IG1vIG9mIG1hbmFnZWRPYmplY3RzKSB7XG4gICAgICBpZiAobW8uYzh5X0pzb25TY2hlbWEpIHtcbiAgICAgICAgY29uc3QgW2l0ZW1dID0gYXdhaXQgdGhpcy5wYXJzZUl0ZW0obW8sIG1vLmM4eV9Kc29uU2NoZW1hLnByb3BlcnRpZXMsIHRoaXMuYXNzZXQpO1xuICAgICAgICB0aGlzLnNldEl0ZW1SZXF1aXJlZChpdGVtLCBtbyk7XG4gICAgICAgIHByb3BlcnRpZXMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICBkZWxldGVUaXRsZUZyb21NT0pzb25TY2hlbWEobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3Qgc2NoZW1hUHJvcGVydGllcyA9IG1vPy5jOHlfSnNvblNjaGVtYT8ucHJvcGVydGllcztcbiAgICBjb25zdCBwcm9wZXJ0eSA9IE9iamVjdC5rZXlzKHNjaGVtYVByb3BlcnRpZXMgfHwge30pWzBdO1xuICAgIGRlbGV0ZSAobW8/LmM4eV9Kc29uU2NoZW1hPy5wcm9wZXJ0aWVzW3Byb3BlcnR5XSB8fCB7fSkudGl0bGU7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBvcmRlciB0aGUgY29tcGxleCBwcm9wZXJ0aWVzIGluIHRoZSBvcmRlciBzcGVjaWZpZWQgYnkgdGhlIHVzZXIgaW4gYXNzZXQgcHJvcGVydGllcyBzY3JlZW4uXG4gICAqIEBwYXJhbSBtbyAtIE1hbmFnZWQgb2JqZWN0IG9mIHRoZSBjb21wbGV4IHByb3BlcnR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYXNzZXQuXG4gICAqL1xuICBvcmRlckNvbXBsZXhQcm9wZXJ0aWVzKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGNvbXBsZXhQcm9wZXJ0aWVzID0gbW8uYzh5X0pzb25TY2hlbWEucHJvcGVydGllc1ttby5uYW1lXT8uWydwcm9wZXJ0aWVzJ107XG4gICAgY29uc3Qga2V5VmFsdWVzQXJyYXkgPSB0b1BhaXJzKGNvbXBsZXhQcm9wZXJ0aWVzKTtcbiAgICBjb25zdCBvcmRlcmVkUHJvcGVydGllcyA9IHNvcnRCeShrZXlWYWx1ZXNBcnJheSwgKFssIHZhbHVlXSkgPT4gdmFsdWUub3JkZXIpO1xuICAgIG1vLmM4eV9Kc29uU2NoZW1hLnByb3BlcnRpZXNbbW8ubmFtZV1bJ3Byb3BlcnRpZXMnXSA9IGZyb21QYWlycyhvcmRlcmVkUHJvcGVydGllcyk7XG4gIH1cblxuICBhc3luYyBwYXJzZUl0ZW0obW86IElNYW5hZ2VkT2JqZWN0LCBwcm9wZXJ0aWVzLCBhc3NldCk6IFByb21pc2U8QXNzZXRQcm9wZXJ0aWVzSXRlbVtdPiB7XG4gICAgaWYgKCFhc3NldCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyk7XG4gICAgY29uc3QgaXRlbXM6IEFzc2V0UHJvcGVydGllc0l0ZW1bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgbGV0IHZhbHVlID0gYXNzZXRba2V5XTtcbiAgICAgIGNvbnN0IHR5cGUgPSBwcm9wZXJ0aWVzW2tleV0udHlwZTtcbiAgICAgIGNvbnN0IHRpdGxlID0gcHJvcGVydGllc1trZXldLnRpdGxlO1xuICAgICAgbGV0IGZpbGU7XG4gICAgICBpZiAodHlwZSA9PT0gJ2ZpbGUnICYmIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZpbGVJZCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyB2YWx1ZVswXT8uZmlsZT8uaWQgOiB2YWx1ZTtcbiAgICAgICAgY29uc3QgZmlsZURhdGEgPSBhd2FpdCB0aGlzLmdldEZpbGVNYW5hZ2VkT2JqZWN0KGZpbGVJZCk7XG4gICAgICAgIGZpbGUgPSBmaWxlRGF0YTtcbiAgICAgICAgdmFsdWUgPSBbZmlsZURhdGFdO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgY29uc3QgdmFsdWVEYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICB2YWx1ZSA9ICFpc05hTih2YWx1ZURhdGUuZ2V0VGltZSgpKSA/IHZhbHVlRGF0ZSA6IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHRpdGxlIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBwcm9wZXJ0eSBuYW1lIG9uIGFzc2V0IGNvbXBsZXggcHJvcGVydGllcyBmb3JtXG4gICAgICAgIHRoaXMuZGVsZXRlVGl0bGVGcm9tTU9Kc29uU2NoZW1hKG1vKTtcbiAgICAgICAgdGhpcy5vcmRlckNvbXBsZXhQcm9wZXJ0aWVzKG1vKTtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgIHZhbHVlID0ge307XG4gICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHByb3BlcnRpZXNba2V5XS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICB2YWx1ZVtwcm9wXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBsYWJlbDogdGl0bGUgfHwgbW8ubGFiZWwsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBtby5kZXNjcmlwdGlvbixcbiAgICAgICAgZmlsZSxcbiAgICAgICAgY29tcGxleDpcbiAgICAgICAgICB0eXBlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyBhd2FpdCB0aGlzLnBhcnNlSXRlbShtbywgcHJvcGVydGllc1trZXldLnByb3BlcnRpZXMsIHZhbHVlKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGlzRWRpdDogZmFsc2UsXG4gICAgICAgIGpzb25TY2hlbWE6IG1vLmM4eV9Kc29uU2NoZW1hXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgdG9nZ2xlRWRpdChwcm9wOiBBc3NldFByb3BlcnRpZXNJdGVtKSB7XG4gICAgcHJvcC5pc0VkaXQgPSAhcHJvcC5pc0VkaXQ7XG4gIH1cblxuICBhc3luYyBnZXRGaWxlTWFuYWdlZE9iamVjdChpZDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKGlkKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmUocHJvcGVydHlWYWx1ZSwgcHJvcDogQXNzZXRQcm9wZXJ0aWVzSXRlbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAocHJvcC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0aGlzLnVwZGF0ZVVuZGVmaW5lZFRvTnVsbChwcm9wZXJ0eVZhbHVlW3Byb3Aua2V5XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZVVuZGVmaW5lZFRvTnVsbChwcm9wZXJ0eVZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcHJvcGVydHlWYWx1ZSA9IGF3YWl0IHRoaXMudXBsb2FkRmlsZXMocHJvcGVydHlWYWx1ZSwgcHJvcC52YWx1ZSk7XG5cbiAgICAgIC8vIEF2b2lkIG1ha2luZyBhIFBVVCByZXF1ZXN0IGNvbnRhaW5pbmcganVzdCB0aGUgaWQsIGFzIHJlc3BvbnNlIGJvZHkgbWlnaHQgYmUgaW5jb21wbGV0ZVxuICAgICAgY29uc3QgaGFzVmFsdWVzID0gT2JqZWN0LnZhbHVlcyhwcm9wZXJ0eVZhbHVlKS5zb21lKHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpO1xuICAgICAgaWYgKCFoYXNWYWx1ZXMpIHtcbiAgICAgICAgdGhpcy50b2dnbGVFZGl0KHByb3ApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB1cGRhdGVkQXNzZXQgPSB7IGlkOiB0aGlzLmFzc2V0LmlkLCAuLi5wcm9wZXJ0eVZhbHVlIH07XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LnVwZGF0ZSh1cGRhdGVkQXNzZXQpO1xuICAgICAgdGhpcy50b2dnbGVFZGl0KHByb3ApO1xuICAgICAgdGhpcy5hc3NldCA9IGRhdGE7XG4gICAgICB0aGlzLmFzc2V0Q2hhbmdlLmVtaXQodGhpcy5hc3NldCk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRBc3NldCgpO1xuICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKGdldHRleHQoJ0Fzc2V0IHByb3BlcnRpZXMgdXBkYXRlZC4nKSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICB0aGlzLnRvZ2dsZUVkaXQocHJvcCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVVbmRlZmluZWRUb051bGwocHJvcGVydHlWYWx1ZSkge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BlcnR5VmFsdWUpKSB7XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wZXJ0eVZhbHVlW2tleV0gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUga2VlcE9yZGVyKGNvcnJlY3RPcmRlcmVkSWRzLCBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3Qgb3JkZXJlZFByb3BlcnRpZXMgPSBjb3JyZWN0T3JkZXJlZElkcy5tYXAoKHsgaWQgfSkgPT4ge1xuICAgICAgY29uc3QgZm91bmRQcm9wZXJ0eSA9IHByb3BlcnRpZXMuZmluZChwcm9wZXJ0eSA9PiBwcm9wZXJ0eS5pZCA9PT0gaWQpO1xuICAgICAgaWYgKCFmb3VuZFByb3BlcnR5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ3VzdG9tIHByb3BlcnR5IG1pc21hdGNoJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm91bmRQcm9wZXJ0eTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3JkZXJlZFByb3BlcnRpZXM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwbG9hZEZpbGVzKG1vZGVsOiBvYmplY3QsIG1vSWQ/OiBJTWFuYWdlZE9iamVjdEJpbmFyeVtdKTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobW9kZWwpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVsW2tleV0pICYmIG1vZGVsW2tleV1bMF0/LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdXBsb2FkID0gYXdhaXQgdGhpcy5pbnZlbnRvcnlCaW5hcnkuY3JlYXRlKG1vZGVsW2tleV1bMF0uZmlsZSk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChtb0lkICYmIG1vSWRbMF0pIHtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNSZW1vdmUobW9JZFswXSwgdGhpcy5hc3NldC5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBtb2RlbFtrZXldID0gdXBsb2FkLmRhdGEuaWQ7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNBZGQodXBsb2FkLmRhdGEuaWQsIHRoaXMuYXNzZXQuaWQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SXRlbVJlcXVpcmVkKGl0ZW06IEFzc2V0UHJvcGVydGllc0l0ZW0sIG1vOiBJTWFuYWdlZE9iamVjdCk6IHZvaWQge1xuICAgIGNvbnN0IGlzQXNzZXRQcm9wZXJ0eVJlcXVpcmVkID0gISF0aGlzLmFzc2V0VHlwZT8uYzh5X0lzQXNzZXRUeXBlPy5wcm9wZXJ0aWVzLmZpbmQoXG4gICAgICBwID0+IHAuaWQgPT09IG1vLmlkXG4gICAgKT8uaXNSZXF1aXJlZDtcbiAgICBpZiAoIWlzQXNzZXRQcm9wZXJ0eVJlcXVpcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzQ29tcGxleFByb3BlcnR5ID0gISFpdGVtPy5jb21wbGV4Py5sZW5ndGg7XG4gICAgaWYgKGlzQ29tcGxleFByb3BlcnR5KSB7XG4gICAgICBjb25zdCBjb21wbGV4UHJvcGVydHkgPSBpdGVtLmpzb25TY2hlbWE/LnByb3BlcnRpZXM/Llttby5jOHlfSnNvblNjaGVtYS5rZXldIGFzIEpTT05TY2hlbWE3O1xuICAgICAgY29tcGxleFByb3BlcnR5LnJlcXVpcmVkID0gaXRlbS5jb21wbGV4Lm1hcCgoeyBrZXkgfSkgPT4ga2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbS5qc29uU2NoZW1hLnJlcXVpcmVkID0gW21vLmM4eV9Kc29uU2NoZW1hLmtleV07XG4gICAgfVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYmctaW5oZXJpdCBzZXBhcmF0b3Igc3RpY2t5LXRvcFwiPlxuICAgIDxoMVxuICAgICAgY2xhc3M9XCJjYXJkLXRpdGxlIHAtdC00IHAtYi00XCJcbiAgICAgIG5nTm9uQmluZGFibGVcbiAgICAgIHRyYW5zbGF0ZVxuICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7IGxhYmVsOiBhc3NldFR5cGU/LmxhYmVsIHx8ICcnIHwgdHJhbnNsYXRlIH1cIlxuICAgID5cbiAgICAgIHt7IGxhYmVsIH19IHByb3BlcnRpZXNcbiAgICA8L2gxPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2tcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInRleHQtY2VudGVyXCJcbiAgICAgICpuZ0lmPVwiaXNMb2FkaW5nXCJcbiAgICA+XG4gICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2FyZCBtLWItOFwiXG4gICAgICAgIHRpdGxlPVwie3sgcHJvcC5kZXNjcmlwdGlvbiB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBwcm9wIG9mIGN1c3RvbVByb3BlcnRpZXNcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdjYXJkLWhpZ2hsaWdodCc6IHByb3AuaXNFZGl0IH1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjYXJkLWJsb2NrXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwLWItMCc6IHByb3AuaXNFZGl0IH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggcC1iLTggYS1pLWNlbnRlclwiXG4gICAgICAgICAgICAqbmdJZj1cIiFwcm9wLmlzRWRpdFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LW1lZGl1bSB0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBwcm9wPy5sYWJlbCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHByb3A/LmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3QgbS1sLWF1dG8gdGV4dC0xMlwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0VkaXQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgdG9vbHRpcD1cInt7ICdFZGl0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUVkaXQocHJvcClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjOHlJY29uPVwicGVuY2lsXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGM4eS1hc3NldC1wcm9wZXJ0aWVzLWl0ZW1cbiAgICAgICAgICAgICNhc3NldFByb3BzXG4gICAgICAgICAgICBbZmlsZV09XCJwcm9wLmZpbGVcIlxuICAgICAgICAgICAgW2tleV09XCJwcm9wLmtleVwiXG4gICAgICAgICAgICBbdHlwZV09XCJwcm9wLnR5cGVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInByb3AudmFsdWVcIlxuICAgICAgICAgICAgW2NvbXBsZXhdPVwicHJvcC5jb21wbGV4XCJcbiAgICAgICAgICAgIFtpc0VkaXRdPVwicHJvcC5pc0VkaXRcIlxuICAgICAgICAgICAgW2pzb25TY2hlbWFdPVwicHJvcC5qc29uU2NoZW1hXCJcbiAgICAgICAgICA+PC9jOHktYXNzZXQtcHJvcGVydGllcy1pdGVtPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9wLmtleSA9PT0gJ2M4eV9Qb3NpdGlvbidcIj5cbiAgICAgICAgICAgIDxjOHktYXNzZXQtbG9jYXRpb25cbiAgICAgICAgICAgICAgW2xvY2F0aW9uTU9dPVwiYXNzZXRcIlxuICAgICAgICAgICAgICBbaXNFZGl0XT1cInByb3AuaXNFZGl0XCJcbiAgICAgICAgICAgICAgW2Zvcm1dPVwiYXNzZXRQcm9wcy5mb3JtXCJcbiAgICAgICAgICAgID48L2M4eS1hc3NldC1sb2NhdGlvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNhcmQtZm9vdGVyIHAtdC0wXCJcbiAgICAgICAgICAqbmdJZj1cInByb3AuaXNFZGl0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbVwiXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUVkaXQocHJvcClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFhc3NldFByb3BzPy5mb3JtPy52YWxpZCB8fCAhYXNzZXRQcm9wcz8uZm9ybT8uZGlydHkgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzYXZlKGFzc2V0UHJvcHMuZm9ybS52YWx1ZSwgcHJvcClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19