@c8y/ngx-components 1018.503.22 → 1018.503.26

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 (85) hide show
  1. package/api/services.d.ts +1 -1
  2. package/core/common/permissions.service.d.ts +2 -2
  3. package/core/forms/validation-pattern.d.ts +4 -0
  4. package/esm2020/api/services.mjs +2 -2
  5. package/esm2020/assets-navigator/asset-node.service.mjs +9 -3
  6. package/esm2020/context-dashboard/add-dashboard.factory.mjs +10 -3
  7. package/esm2020/context-dashboard/context-dashboard.service.mjs +11 -3
  8. package/esm2020/context-dashboard/dashboard-detail.component.mjs +7 -2
  9. package/esm2020/context-dashboard/report-dashboard/report-dashboard-list.component.mjs +4 -2
  10. package/esm2020/core/bottom-drawer/bottom-drawer.service.mjs +1 -1
  11. package/esm2020/core/common/permissions.service.mjs +2 -2
  12. package/esm2020/core/common/user-preferences/user-preferences.service.mjs +6 -2
  13. package/esm2020/core/forms/validation-pattern.mjs +5 -1
  14. package/esm2020/core/user/user-edit.component.mjs +1 -1
  15. package/esm2020/files-repository/files-repository.guard.mjs +6 -5
  16. package/esm2020/replace-device/replace-device.service.mjs +13 -5
  17. package/esm2020/repository/configuration/device-tab/configuration-preview.component.mjs +11 -3
  18. package/esm2020/sub-assets/add-group/add-group.component.mjs +7 -2
  19. package/esm2020/sub-assets/groups.component.mjs +5 -2
  20. package/esm2020/sub-assets/sub-assets.component.mjs +7 -2
  21. package/esm2020/sub-assets/sub-assets.service.mjs +12 -6
  22. package/esm2020/trusted-certificates/crl/crl-check-settings.component.mjs +39 -0
  23. package/esm2020/trusted-certificates/crl/crl-settings.component.mjs +109 -0
  24. package/esm2020/trusted-certificates/crl/crl-settings.module.mjs +46 -0
  25. package/esm2020/trusted-certificates/factories/tabs.factory.mjs +36 -0
  26. package/esm2020/trusted-certificates/factories/trusted-certificates-navigation.factory.mjs +26 -0
  27. package/esm2020/trusted-certificates/index.mjs +4 -4
  28. package/esm2020/trusted-certificates/{add-trusted-certificate.component.mjs → list/add-trusted-certificate.component.mjs} +1 -1
  29. package/esm2020/trusted-certificates/list/trusted-certificate-list.component.mjs +184 -0
  30. package/esm2020/trusted-certificates/list/trusted-certificate-list.module.mjs +54 -0
  31. package/esm2020/trusted-certificates/list/trusted-certificate.model.mjs +36 -0
  32. package/esm2020/trusted-certificates/trusted-certificates.module.mjs +24 -35
  33. package/fesm2015/c8y-ngx-components-api.mjs +3 -2
  34. package/fesm2015/c8y-ngx-components-api.mjs.map +1 -1
  35. package/fesm2015/c8y-ngx-components-assets-navigator.mjs +8 -2
  36. package/fesm2015/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  37. package/fesm2015/c8y-ngx-components-context-dashboard.mjs +28 -6
  38. package/fesm2015/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  39. package/fesm2015/c8y-ngx-components-files-repository.mjs +5 -4
  40. package/fesm2015/c8y-ngx-components-files-repository.mjs.map +1 -1
  41. package/fesm2015/c8y-ngx-components-replace-device.mjs +13 -5
  42. package/fesm2015/c8y-ngx-components-replace-device.mjs.map +1 -1
  43. package/fesm2015/c8y-ngx-components-repository-configuration.mjs +10 -2
  44. package/fesm2015/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  45. package/fesm2015/c8y-ngx-components-sub-assets.mjs +27 -8
  46. package/fesm2015/c8y-ngx-components-sub-assets.mjs.map +1 -1
  47. package/fesm2015/c8y-ngx-components-trusted-certificates.mjs +329 -86
  48. package/fesm2015/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  49. package/fesm2015/c8y-ngx-components.mjs +10 -2
  50. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  51. package/fesm2020/c8y-ngx-components-api.mjs +3 -2
  52. package/fesm2020/c8y-ngx-components-api.mjs.map +1 -1
  53. package/fesm2020/c8y-ngx-components-assets-navigator.mjs +8 -2
  54. package/fesm2020/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  55. package/fesm2020/c8y-ngx-components-context-dashboard.mjs +28 -6
  56. package/fesm2020/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  57. package/fesm2020/c8y-ngx-components-files-repository.mjs +5 -4
  58. package/fesm2020/c8y-ngx-components-files-repository.mjs.map +1 -1
  59. package/fesm2020/c8y-ngx-components-replace-device.mjs +13 -5
  60. package/fesm2020/c8y-ngx-components-replace-device.mjs.map +1 -1
  61. package/fesm2020/c8y-ngx-components-repository-configuration.mjs +10 -2
  62. package/fesm2020/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  63. package/fesm2020/c8y-ngx-components-sub-assets.mjs +27 -8
  64. package/fesm2020/c8y-ngx-components-sub-assets.mjs.map +1 -1
  65. package/fesm2020/c8y-ngx-components-trusted-certificates.mjs +314 -85
  66. package/fesm2020/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  67. package/fesm2020/c8y-ngx-components.mjs +10 -2
  68. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  69. package/locales/locales.pot +48 -0
  70. package/package.json +1 -1
  71. package/replace-device/replace-device.service.d.ts +3 -1
  72. package/trusted-certificates/crl/crl-check-settings.component.d.ts +18 -0
  73. package/trusted-certificates/crl/crl-settings.component.d.ts +28 -0
  74. package/trusted-certificates/crl/crl-settings.module.d.ts +13 -0
  75. package/trusted-certificates/factories/tabs.factory.d.ts +10 -0
  76. package/trusted-certificates/index.d.ts +3 -3
  77. package/trusted-certificates/{trusted-certificates.component.d.ts → list/trusted-certificate-list.component.d.ts} +4 -4
  78. package/trusted-certificates/list/trusted-certificate-list.module.d.ts +15 -0
  79. package/trusted-certificates/trusted-certificates.module.d.ts +4 -10
  80. package/esm2020/trusted-certificates/trusted-certificate.model.mjs +0 -36
  81. package/esm2020/trusted-certificates/trusted-certificates-navigation.factory.mjs +0 -26
  82. package/esm2020/trusted-certificates/trusted-certificates.component.mjs +0 -184
  83. /package/trusted-certificates/{trusted-certificates-navigation.factory.d.ts → factories/trusted-certificates-navigation.factory.d.ts} +0 -0
  84. /package/trusted-certificates/{add-trusted-certificate.component.d.ts → list/add-trusted-certificate.component.d.ts} +0 -0
  85. /package/trusted-certificates/{trusted-certificate.model.d.ts → list/trusted-certificate.model.d.ts} +0 -0
@@ -156,18 +156,20 @@ export class SubAssetsService extends DataGridService {
156
156
  return this.getAssetsStatistics(parentReference, filters);
157
157
  }
158
158
  async canEditGroup(group) {
159
- return await this.permissionsService.canEdit([Permissions.ROLE_INVENTORY_ADMIN], group);
159
+ return await this.permissionsService.canEdit([Permissions.ROLE_INVENTORY_ADMIN, Permissions.ROLE_MANAGED_OBJECT_ADMIN], group);
160
160
  }
161
161
  canCreateGroup() {
162
162
  const currentUser = this.appState.currentUser.value;
163
163
  const hasAdminRole = this.user.hasAnyRole(currentUser, [
164
164
  Permissions.ROLE_INVENTORY_ADMIN,
165
- Permissions.ROLE_INVENTORY_CREATE
165
+ Permissions.ROLE_INVENTORY_CREATE,
166
+ Permissions.ROLE_MANAGED_OBJECT_ADMIN,
167
+ Permissions.ROLE_MANAGED_OBJECT_CREATE
166
168
  ]);
167
169
  return hasAdminRole;
168
170
  }
169
171
  async canAssignDevice(group) {
170
- return await this.permissionsService.canEdit([Permissions.ROLE_INVENTORY_ADMIN], group);
172
+ return await this.permissionsService.canEdit([Permissions.ROLE_INVENTORY_ADMIN, Permissions.ROLE_MANAGED_OBJECT_ADMIN], group);
171
173
  }
172
174
  canEditSmartGroup() {
173
175
  const SMART_GROUPS_ROLES_EDIT = [
@@ -179,7 +181,8 @@ export class SubAssetsService extends DataGridService {
179
181
  canDeleteSmartGroup() {
180
182
  const SMART_GROUPS_ROLES_DELETE = [
181
183
  Permissions.ROLE_SMARTGROUP_ADMIN,
182
- Permissions.ROLE_INVENTORY_ADMIN
184
+ Permissions.ROLE_INVENTORY_ADMIN,
185
+ Permissions.ROLE_MANAGED_OBJECT_ADMIN
183
186
  ];
184
187
  return this.permissionsService.hasAnyRole(SMART_GROUPS_ROLES_DELETE);
185
188
  }
@@ -191,7 +194,10 @@ export class SubAssetsService extends DataGridService {
191
194
  const hasAnyInventoryRole = this.user.hasAnyRole(currentUser, [
192
195
  Permissions.ROLE_INVENTORY_ADMIN,
193
196
  Permissions.ROLE_INVENTORY_READ,
194
- Permissions.ROLE_INVENTORY_CREATE
197
+ Permissions.ROLE_INVENTORY_CREATE,
198
+ Permissions.ROLE_MANAGED_OBJECT_ADMIN,
199
+ Permissions.ROLE_MANAGED_OBJECT_CREATE,
200
+ Permissions.ROLE_MANAGED_OBJECT_READ
195
201
  ]);
196
202
  return !hasAnyInventoryRole;
197
203
  }
@@ -301,4 +307,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
301
307
  type: Inject,
302
308
  args: [SUB_ASSETS_CONFIG]
303
309
  }] }]; } });
304
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLWFzc2V0cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3ViLWFzc2V0cy9zdWItYXNzZXRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUVMLGdCQUFnQixFQUdoQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBRUwsWUFBWSxFQUNaLGVBQWUsRUFDZixpQkFBaUIsRUFHakIsZUFBZSxFQUNmLE9BQU8sRUFFUCxXQUFXLEVBQ1gsc0JBQXNCLEVBQ3ZCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixnQ0FBZ0MsRUFDaEMsNEJBQTRCLEVBQzVCLHdCQUF3QixFQUN6QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7O0FBS3hFLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxlQUFlO0lBTW5ELFlBQ1ksZ0JBQWtDLEVBQ2xDLGdCQUFrQyxFQUNsQyxRQUF5QixFQUN6QixJQUFpQixFQUNqQixnQkFBa0MsRUFDbEMsa0JBQXNDLEVBQ3RDLGlCQUFvQyxFQUNwQyxZQUEwQixFQUMxQixrQkFBK0IsRUFDL0IsVUFBNkIsRUFDN0Isc0JBQThDLEVBQ3RCLFlBQTZCO1FBRS9ELEtBQUssQ0FBQyxzQkFBc0Is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QUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsRixPQUFPO1lBQ0wsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDekMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGlCQUFpQjtZQUN2RCxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7WUFDbkMsY0FBYyxFQUFFLElBQUk7U0FDckIsQ0FBQztJQUNKLENBQUM7OzZHQTVWVSxnQkFBZ0IsNldBa0JqQixpQkFBaUI7aUhBbEJoQixnQkFBZ0IsY0FGZixNQUFNOzJGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQW1CSSxNQUFNOzJCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSU1hbmFnZWRPYmplY3QsXG4gIEludmVudG9yeVNlcnZpY2UsXG4gIElSdWxlLFxuICBRdWVyaWVzVXRpbCxcbiAgU21hcnRHcm91cHNTZXJ2aWNlLFxuICBTbWFydFJ1bGVzU2VydmljZSxcbiAgVXNlclNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIEFzc2V0VHlwZXNTZXJ2aWNlLFxuICBCdWxrQWN0aW9uQ29udHJvbCxcbiAgQ29sdW1uLFxuICBEYXRhR3JpZFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIFBhZ2luYXRpb24sXG4gIFBlcm1pc3Npb25zLFxuICBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXNzZXROb2RlU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXNzZXRzLW5hdmlnYXRvcic7XG5pbXBvcnQge1xuICBBbGFybXNEZXZpY2VHcmlkQ29sdW1uLFxuICBJbWVpRGV2aWNlR3JpZENvbHVtbixcbiAgTW9kZWxEZXZpY2VHcmlkQ29sdW1uLFxuICBOYW1lRGV2aWNlR3JpZENvbHVtbixcbiAgUmVnaXN0cmF0aW9uRGF0ZURldmljZUdyaWRDb2x1bW4sXG4gIFNlcmlhbE51bWJlckRldmljZUdyaWRDb2x1bW4sXG4gIFN5c3RlbUlkRGV2aWNlR3JpZENvbHVtblxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RldmljZS1ncmlkJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEFzc2V0VHlwZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvYXNzZXQtdHlwZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBTdWJBc3NldHNDb25maWcsIFNVQl9BU1NFVFNfQ09ORklHIH0gZnJvbSAnLi9zdWItYXNzZXRzLm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU3ViQXNzZXRzU2VydmljZSBleHRlbmRzIERhdGFHcmlkU2VydmljZSB7XG4gIHF1ZXJpZXNVdGlsOiBRdWVyaWVzVXRpbDtcbiAgcHJvdGVjdGVkIEdSSURfQ09ORklHX0RFRkFVTFRfU1RPUkFHRV9LRVkgPSAnc3ViLWFzc2V0cy1ncmlkLWNvbmZpZyc7XG4gIHByaXZhdGUgSVNfREVWSUNFX0dST1VQX0ZSQUdNRU5UID0gJ2M4eV9Jc0RldmljZUdyb3VwJztcbiAgcHJpdmF0ZSBJU19EWU5BTUlDX0dST1VQX0ZSQUdNRU5UID0gJ2M4eV9Jc0R5bmFtaWNHcm91cCc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHVzZXI6IFVzZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhc3NldE5vZGVTZXJ2aWNlOiBBc3NldE5vZGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBzbWFydEdyb3Vwc1NlcnZpY2U6IFNtYXJ0R3JvdXBzU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc21hcnRSdWxlc1NlcnZpY2U6IFNtYXJ0UnVsZXNTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9ucyxcbiAgICBwcm90ZWN0ZWQgYXNzZXRUeXBlczogQXNzZXRUeXBlc1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHVzZXJQcmVmZXJlbmNlc1NlcnZpY2U6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgQEluamVjdChTVUJfQVNTRVRTX0NPTkZJRykgcHVibGljIG1vZHVsZUNvbmZpZzogU3ViQXNzZXRzQ29uZmlnXG4gICkge1xuICAgIHN1cGVyKHVzZXJQcmVmZXJlbmNlc1NlcnZpY2UpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q3VzdG9tUHJvcGVydGllcyhncm91cDogSU1hbmFnZWRPYmplY3QpOiBQcm9taXNlPElNYW5hZ2VkT2JqZWN0W10+IHtcbiAgICBjb25zdCBhc3NldFR5cGUgPSB0aGlzLmFzc2V0VHlwZXMuZ2V0QXNzZXRUeXBlQnlOYW1lKGdyb3VwLnR5cGUpO1xuICAgIGlmIChhc3NldFR5cGUpIHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmNoaWxkQWRkaXRpb25zTGlzdChhc3NldFR5cGUsIHtcbiAgICAgICAgcGFnZVNpemU6IDIwMDAsXG4gICAgICAgIHF1ZXJ5OiBcIiRmaWx0ZXI9KGhhcygnYzh5X0lzQXNzZXRQcm9wZXJ0eScpKVwiXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXREZWZhdWx0Q29sdW1ucyhfZmlsdGVyYWJsZSA9IHRydWUsIF9zb3J0YWJsZSA9IHRydWUpOiBDb2x1bW5bXSB7XG4gICAgY29uc3QgZGVmYXVsdENvbHVtbnMgPSBbXG4gICAgICBuZXcgQXNzZXRUeXBlR3JpZENvbHVtbih7IHNvcnRPcmRlcjogJ2Rlc2MnIH0pLFxuICAgICAgbmV3IE5hbWVEZXZpY2VHcmlkQ29sdW1uKHsgc29ydE9yZGVyOiAnYXNjJyB9KSxcbiAgICAgIG5ldyBNb2RlbERldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBTZXJpYWxOdW1iZXJEZXZpY2VHcmlkQ29sdW1uKHsgdmlzaWJsZTogZmFsc2UgfSksXG4gICAgICBuZXcgUmVnaXN0cmF0aW9uRGF0ZURldmljZUdyaWRDb2x1bW4oeyB2aXNpYmxlOiBmYWxzZSB9KSxcbiAgICAgIG5ldyBTeXN0ZW1JZERldmljZUdyaWRDb2x1bW4oeyB2aXNpYmxlOiBmYWxzZSB9KSxcbiAgICAgIG5ldyBJbWVpRGV2aWNlR3JpZENvbHVtbih7IHZpc2libGU6IGZhbHNlIH0pLFxuICAgICAgbmV3IEFsYXJtc0RldmljZUdyaWRDb2x1bW4oKVxuICAgIF07XG4gICAgcmV0dXJuIGRlZmF1bHRDb2x1bW5zO1xuICB9XG5cbiAgZ2V0RGVmYXVsdFBhZ2luYXRpb24oKTogUGFnaW5hdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VTaXplOiAyNSxcbiAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRBY3Rpb25Db250cm9scygpOiBBY3Rpb25Db250cm9sW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFzeW5jIHVuYXNzaWduQXNzZXQoYXNzZXQ6IElNYW5hZ2VkT2JqZWN0LCBwYXJlbnRSZWY6IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgeyBpZDogYXNzZXRJZCB9ID0gYXNzZXQ7XG4gICAgY29uc3QgeyBpZDogcGFyZW50SWQgfSA9IHBhcmVudFJlZjtcblxuICAgIGlmICh0aGlzLmlzRGV2aWNlKGFzc2V0KSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmNoaWxkQXNzZXRzUmVtb3ZlKGFzc2V0SWQsIHBhcmVudElkKTtcbiAgICAgICAgY29uc3QgYWxlcnRNZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnRGV2aWNlIHVuYXNzaWduZWQuJykpO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGFsZXJ0TWVzc2FnZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBhbGVydE1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdDb3VsZCBub3QgdW5hc3NpZ24gZGV2aWNlLicpKTtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGFsZXJ0TWVzc2FnZSwgZXJyb3IpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5kZWFjdGl2YXRlU21hcnRydWxlc0ZvckFzc2V0KGFzc2V0LCBwYXJlbnRSZWYpO1xuICAgIH1cbiAgfVxuXG4gIGlzRGV2aWNlKGFzc2V0OiBJTWFuYWdlZE9iamVjdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhYXNzZXQuaGFzT3duUHJvcGVydHkodGhpcy5JU19ERVZJQ0VfR1JPVVBfRlJBR01FTlQpICYmXG4gICAgICAhYXNzZXQuaGFzT3duUHJvcGVydHkodGhpcy5JU19EWU5BTUlDX0dST1VQX0ZSQUdNRU5UKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBkZWxldGVBc3NldChhc3NldDogSU1hbmFnZWRPYmplY3QsIHBhcmVudFJlZjogSU1hbmFnZWRPYmplY3QsIHBhcmFtcyA9IHt9KSB7XG4gICAgY29uc3QgaXNHcm91cCA9XG4gICAgICBhc3NldC5oYXNPd25Qcm9wZXJ0eSh0aGlzLklTX0RFVklDRV9HUk9VUF9GUkFHTUVOVCkgfHxcbiAgICAgIHRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cChhc3NldCk7XG5cbiAgICBpZiAoaXNHcm91cCkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVHcm91cChhc3NldCwgcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVEZXZpY2UoYXNzZXQsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcGFyZW50UmVmICYmXG4gICAgICAhdGhpcy5zbWFydEdyb3Vwc1NlcnZpY2UuaXNTbWFydEdyb3VwKGFzc2V0KSAmJlxuICAgICAgIXRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cFYyKGFzc2V0KVxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy5kZWFjdGl2YXRlU21hcnRydWxlc0ZvckFzc2V0KGFzc2V0LCBwYXJlbnRSZWYpO1xuICAgIH1cbiAgfVxuXG4gIHNob3VsZFNob3dXaXRoRGV2aWNlVXNlckNoZWNrYm94KGFzc2V0OiBJTWFuYWdlZE9iamVjdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgb3duZXIsIGM4eV9Jc0RldmljZTogaXNSb290RGV2aWNlIH0gPSBhc3NldDtcbiAgICBjb25zdCBoYXNEZXZpY2VVc2VyQXNPd25lciA9IGFzc2V0Lm93bmVyICYmIHRoaXMuaXNEZXZpY2VVc2VyKG93bmVyKTtcblxuICAgIHJldHVybiBCb29sZWFuKGlzUm9vdERldmljZSAmJiBoYXNEZXZpY2VVc2VyQXNPd25lcik7XG4gIH1cblxuICBnZXREZWZhdWx0QnVsa0FjdGlvbkNvbnRyb2xzKCk6IEJ1bGtBY3Rpb25Db250cm9sW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFzeW5jIGdldERhdGEoXG4gICAgY29sdW1uczogQ29sdW1uW10sXG4gICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbixcbiAgICBwYXJlbnRSZWZlcmVuY2U6IElNYW5hZ2VkT2JqZWN0LFxuICAgIGJhc2VRdWVyeTogYW55ID0ge30sXG4gICAgdGV4dDogc3RyaW5nID0gbnVsbFxuICApIHtcbiAgICBjb25zdCBpc1Jvb3QgPSAhcGFyZW50UmVmZXJlbmNlO1xuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5idWlsZENvbWJpbmVkUm9vdFF1ZXJ5RmlsdGVyKGNvbHVtbnMsIHBhZ2luYXRpb24sIGJhc2VRdWVyeSk7XG4gICAgICByZXR1cm4gdGhpcy5hc3NldE5vZGVTZXJ2aWNlLmdldFJvb3ROb2Rlcyh7IC4uLnBhZ2luYXRpb24sIC4uLih0ZXh0ICYmIHsgdGV4dCB9KSwgcXVlcnkgfSk7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICAuLi50aGlzLmdldEFzc2V0c0ZpbHRlcnMoY29sdW1ucywgcGFnaW5hdGlvbiwgYmFzZVF1ZXJ5LCB0ZXh0KSxcbiAgICAgIHdpdGhQYXJlbnRzOiBmYWxzZVxuICAgIH07XG4gICAgaWYgKHRoaXMuYXNzZXROb2RlU2VydmljZS5pc0dyb3VwKHBhcmVudFJlZmVyZW5jZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuZ2V0R3JvdXBJdGVtcyhwYXJlbnRSZWZlcmVuY2UuaWQsIGZpbHRlcnMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5hc3NldE5vZGVTZXJ2aWNlLmlzRHluYW1pY0dyb3VwKHBhcmVudFJlZmVyZW5jZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuZ2V0RHluYW1pY0dyb3VwSXRlbXMoXG4gICAgICAgIHBhcmVudFJlZmVyZW5jZS5jOHlfRGV2aWNlUXVlcnlTdHJpbmcsXG4gICAgICAgIGZpbHRlcnNcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuaXNEZXZpY2UocGFyZW50UmVmZXJlbmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXNzZXROb2RlU2VydmljZS5nZXREZXZpY2VDaGlsZHJlbihwYXJlbnRSZWZlcmVuY2UuaWQsIGZpbHRlcnMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvdW50KFxuICAgIGNvbHVtbnM6IENvbHVtbltdLFxuICAgIHBhZ2luYXRpb246IFBhZ2luYXRpb24sXG4gICAgcGFyZW50UmVmZXJlbmNlOiBJTWFuYWdlZE9iamVjdCxcbiAgICBiYXNlUXVlcnk6IGFueSA9IHt9LFxuICAgIHRleHQ6IHN0cmluZyA9IG51bGxcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBkZWZhdWx0RmlsdGVycyA9IHtcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgd2l0aENoaWxkcmVuOiBmYWxzZVxuICAgIH07XG4gICAgY29uc3QgZmlsdGVycyA9ICFwYXJlbnRSZWZlcmVuY2VcbiAgICAgID8ge1xuICAgICAgICAgIHF1ZXJ5OiB0aGlzLmJ1aWxkQ29tYmluZWRSb290UXVlcnlGaWx0ZXIoY29sdW1ucywgcGFnaW5hdGlvbiwgYmFzZVF1ZXJ5KSxcbiAgICAgICAgICAuLi5kZWZhdWx0RmlsdGVyc1xuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICAuLi50aGlzLmdldEFzc2V0c0ZpbHRlcnMoY29sdW1ucywgcGFnaW5hdGlvbiwgYmFzZVF1ZXJ5LCB0ZXh0KSxcbiAgICAgICAgICAuLi5kZWZhdWx0RmlsdGVyc1xuICAgICAgICB9O1xuICAgIHJldHVybiB0aGlzLmdldEFzc2V0c1N0YXRpc3RpY3MocGFyZW50UmVmZXJlbmNlLCBmaWx0ZXJzKTtcbiAgfVxuXG4gIGdldFRvdGFsKHBhcmVudFJlZmVyZW5jZTogSU1hbmFnZWRPYmplY3QsIGJhc2VRdWVyeTogYW55ID0ge30pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHF1ZXJ5RmlsdGVyID0gdGhpcy5hc3NldE5vZGVTZXJ2aWNlLnJvb3RRdWVyeUZpbHRlcigpO1xuICAgIGNvbnN0IHF1ZXJ5ID0gIXBhcmVudFJlZmVyZW5jZVxuICAgICAgPyB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihxdWVyeUZpbHRlciwgYmFzZVF1ZXJ5KVxuICAgICAgOiBiYXNlUXVlcnk7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkocXVlcnkpLFxuICAgICAgd2l0aENoaWxkcmVuOiBmYWxzZSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlLFxuICAgICAgcGFnZVNpemU6IDFcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmdldEFzc2V0c1N0YXRpc3RpY3MocGFyZW50UmVmZXJlbmNlLCBmaWx0ZXJzKTtcbiAgfVxuXG4gIGFzeW5jIGNhbkVkaXRHcm91cChncm91cDogSU1hbmFnZWRPYmplY3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuY2FuRWRpdChbUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU5dLCBncm91cCk7XG4gIH1cblxuICBjYW5DcmVhdGVHcm91cCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuYXBwU3RhdGUuY3VycmVudFVzZXIudmFsdWU7XG4gICAgY29uc3QgaGFzQWRtaW5Sb2xlID0gdGhpcy51c2VyLmhhc0FueVJvbGUoY3VycmVudFVzZXIsIFtcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0FETUlOLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQ1JFQVRFXG4gICAgXSk7XG4gICAgcmV0dXJuIGhhc0FkbWluUm9sZTtcbiAgfVxuXG4gIGFzeW5jIGNhbkFzc2lnbkRldmljZShncm91cDogSU1hbmFnZWRPYmplY3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuY2FuRWRpdChbUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU5dLCBncm91cCk7XG4gIH1cblxuICBjYW5FZGl0U21hcnRHcm91cCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBTTUFSVF9HUk9VUFNfUk9MRVNfRURJVCA9IFtcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfU01BUlRHUk9VUF9VUERBVEUsXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX1NNQVJUR1JPVVBfQURNSU5cbiAgICBdO1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5oYXNBbnlSb2xlKFNNQVJUX0dST1VQU19ST0xFU19FRElUKTtcbiAgfVxuXG4gIGNhbkRlbGV0ZVNtYXJ0R3JvdXAoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgU01BUlRfR1JPVVBTX1JPTEVTX0RFTEVURSA9IFtcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfU01BUlRHUk9VUF9BRE1JTixcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0FETUlOXG4gICAgXTtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuaGFzQW55Um9sZShTTUFSVF9HUk9VUFNfUk9MRVNfREVMRVRFKTtcbiAgfVxuXG4gIGlzU21hcnRHcm91cChncm91cDogSU1hbmFnZWRPYmplY3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zbWFydEdyb3Vwc1NlcnZpY2UuaXNTbWFydEdyb3VwKGdyb3VwKSB8fCB0aGlzLnNtYXJ0R3JvdXBzU2VydmljZS5pc1NtYXJ0R3JvdXBWMihncm91cClcbiAgICApO1xuICB9XG5cbiAgaXNVc2luZ0ludmVudG9yeVJvbGVzKCkge1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50VXNlci52YWx1ZTtcbiAgICBjb25zdCBoYXNBbnlJbnZlbnRvcnlSb2xlID0gdGhpcy51c2VyLmhhc0FueVJvbGUoY3VycmVudFVzZXIsIFtcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0FETUlOLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfUkVBRCxcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0NSRUFURVxuICAgIF0pO1xuICAgIHJldHVybiAhaGFzQW55SW52ZW50b3J5Um9sZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRBc3NldHNTdGF0aXN0aWNzKFxuICAgIHBhcmVudFJlZmVyZW5jZTogSU1hbmFnZWRPYmplY3QsXG4gICAgZmlsdGVyczogb2JqZWN0XG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgaXNSb290ID0gIXBhcmVudFJlZmVyZW5jZTtcbiAgICBpZiAoaXNSb290KSB7XG4gICAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXNzZXROb2RlU2VydmljZS5nZXRSb290Tm9kZXMoZmlsdGVycykpLnBhZ2luZy50b3RhbFBhZ2VzO1xuICAgIH1cbiAgICBpZiAodGhpcy5hc3NldE5vZGVTZXJ2aWNlLmlzR3JvdXAocGFyZW50UmVmZXJlbmNlKSkge1xuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuZ2V0R3JvdXBJdGVtcyhwYXJlbnRSZWZlcmVuY2UuaWQsIGZpbHRlcnMpKS5wYWdpbmdcbiAgICAgICAgLnRvdGFsUGFnZXM7XG4gICAgfVxuICAgIGlmICh0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuaXNEeW5hbWljR3JvdXAocGFyZW50UmVmZXJlbmNlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgYXdhaXQgdGhpcy5hc3NldE5vZGVTZXJ2aWNlLmdldER5bmFtaWNHcm91cEl0ZW1zKFxuICAgICAgICAgIHBhcmVudFJlZmVyZW5jZS5jOHlfRGV2aWNlUXVlcnlTdHJpbmcsXG4gICAgICAgICAgZmlsdGVyc1xuICAgICAgICApXG4gICAgICApLnBhZ2luZy50b3RhbFBhZ2VzO1xuICAgIH1cbiAgICBpZiAodGhpcy5hc3NldE5vZGVTZXJ2aWNlLmlzRGV2aWNlKHBhcmVudFJlZmVyZW5jZSkpIHtcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5hc3NldE5vZGVTZXJ2aWNlLmdldERldmljZUNoaWxkcmVuKHBhcmVudFJlZmVyZW5jZS5pZCwgZmlsdGVycykpLnBhZ2luZ1xuICAgICAgICAudG90YWxQYWdlcztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRDb21iaW5lZFJvb3RRdWVyeUZpbHRlcihjb2x1bW5zLCBwYWdpbmF0aW9uLCBiYXNlUXVlcnkgPSB7fSkge1xuICAgIGNvbnN0IHVzZXJRdWVyeSA9IHRoaXMuZ2V0UXVlcnlPYmooY29sdW1ucywgcGFnaW5hdGlvbik7XG4gICAgY29uc3Qgcm9vdFF1ZXJ5ID0gdGhpcy5hc3NldE5vZGVTZXJ2aWNlLnJvb3RRdWVyeUZpbHRlcigpO1xuICAgIGNvbnN0IG9yZGVyZWRSb290UXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZE9yZGVyYnlzKHJvb3RRdWVyeSwgdXNlclF1ZXJ5Ll9fb3JkZXJieSwgJ2FwcGVuZCcpO1xuICAgIGNvbnN0IHJvb3RBbmRVc2VyUXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihvcmRlcmVkUm9vdFF1ZXJ5LCB1c2VyUXVlcnkuX19maWx0ZXIpO1xuICAgIGNvbnN0IGZ1bGxRdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKHJvb3RBbmRVc2VyUXVlcnksIGJhc2VRdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllc1V0aWwuYnVpbGRRdWVyeShmdWxsUXVlcnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWxldGVHcm91cChncm91cDogSU1hbmFnZWRPYmplY3QsIHBhcmFtczogYW55ID0ge30pIHtcbiAgICBjb25zdCB7IGNhc2NhZGUgfSA9IHBhcmFtcztcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnNtYXJ0R3JvdXBzU2VydmljZS5pc1NtYXJ0R3JvdXAoZ3JvdXApIHx8IHRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cFYyKGdyb3VwKVxuICAgICAgICA/IGF3YWl0IHRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmRlbGV0ZShncm91cCwgeyBjYXNjYWRlIH0pXG4gICAgICAgIDogYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRlbGV0ZShncm91cCwgeyBjYXNjYWRlIH0pO1xuXG4gICAgICBjb25zdCBhbGVydE1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdcInt7IG5hbWUgfX1cIiBkZWxldGVkLicpLCB7XG4gICAgICAgIG5hbWU6IGdyb3VwLm5hbWVcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhhbGVydE1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBhbGVydE1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgZ2V0dGV4dCgnQ291bGQgbm90IGRlbGV0ZSBcInt7IG5hbWUgfX1cIi4nKSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGdyb3VwLm5hbWVcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihhbGVydE1lc3NhZ2UsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlbGV0ZURldmljZShkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LCBwYXJhbXM6IGFueSA9IHt9KSB7XG4gICAgY29uc3QgeyBjYXNjYWRlLCB3aXRoRGV2aWNlVXNlciB9ID0gcGFyYW1zO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG93bmVyIH0gPSBkZXZpY2U7XG4gICAgICBjb25zdCBzaG91bGRSZW1vdmVPd25lciA9IHdpdGhEZXZpY2VVc2VyICYmIG93bmVyICYmIHRoaXMuaXNEZXZpY2VVc2VyKG93bmVyKTtcblxuICAgICAgc2hvdWxkUmVtb3ZlT3duZXJcbiAgICAgICAgPyBhd2FpdCB0aGlzLmRlbGV0ZURldmljZVdpdGhVc2VyKGRldmljZSwgY2FzY2FkZSlcbiAgICAgICAgOiBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGVsZXRlKGRldmljZSwgeyBjYXNjYWRlIH0pO1xuXG4gICAgICBjb25zdCBhbGVydE1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdEZXZpY2UgZGVsZXRlZC4nKSk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGFsZXJ0TWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGFsZXJ0TWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0NvdWxkIG5vdCBkZWxldGUgZGV2aWNlLicpKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihhbGVydE1lc3NhZ2UsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlYWN0aXZhdGVTbWFydHJ1bGVzRm9yQXNzZXQoYXNzZXQ6IElNYW5hZ2VkT2JqZWN0LCBwYXJlbnRSZWY6IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgeyBpZDogYXNzZXRJZCB9ID0gYXNzZXQ7XG4gICAgY29uc3QgeyBpZDogcGFyZW50SWQgfSA9IHBhcmVudFJlZjtcbiAgICBjb25zdCBydWxlczogSVJ1bGVbXSA9IChhd2FpdCB0aGlzLnNtYXJ0UnVsZXNTZXJ2aWNlLmxpc3RCeUNvbnRleHQocGFyZW50SWQpKS5kYXRhO1xuXG4gICAgY29uc3QgdXBhdGVTbWFydHJ1bGVzUHJvbWlzZXMgPSBydWxlcy5tYXAocnVsZSA9PlxuICAgICAgdGhpcy5zbWFydFJ1bGVzU2VydmljZS5idWxrRGVhY3RpdmF0ZUVuYWJsZWRTb3VyY2VzKHJ1bGUsIFthc3NldElkXSlcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHVwYXRlU21hcnRydWxlc1Byb21pc2VzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgYWxlcnRNZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgIGdldHRleHQoJ0NvdWxkIG5vdCBkZWFjdGl2YXRlIHNtYXJ0IHJ1bGVzLicpXG4gICAgICApO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGFsZXJ0TWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0RldmljZVVzZXIodXNlcklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdXNlcklkLm1hdGNoKC9eZGV2aWNlXy8pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWxldGVEZXZpY2VXaXRoVXNlcihkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LCBjYXNjYWRlOiBib29sZWFuKSB7XG4gICAgY29uc3QgcGFyYW1zID0geyBjYXNjYWRlLCB3aXRoRGV2aWNlVXNlcjogdHJ1ZSB9O1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRlbGV0ZShkZXZpY2UsIHBhcmFtcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGVsZXRlKGRldmljZSwgeyBjYXNjYWRlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXNzZXRzRmlsdGVycyhjb2x1bW5zOiBDb2x1bW5bXSwgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiwgYmFzZVF1ZXJ5LCB0ZXh0Pzogc3RyaW5nKSB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcih0aGlzLmdldFF1ZXJ5T2JqKGNvbHVtbnMpLCBiYXNlUXVlcnkpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi4odGV4dCAmJiB7IHRleHQgfSksXG4gICAgICBxdWVyeTogdGhpcy5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KHF1ZXJ5KSxcbiAgICAgIHBhZ2VTaXplOiBwYWdpbmF0aW9uLnBhZ2VTaXplIHx8IHRoaXMuREVGQVVMVF9QQUdFX1NJWkUsXG4gICAgICBjdXJyZW50UGFnZTogcGFnaW5hdGlvbi5jdXJyZW50UGFnZSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcbiAgfVxufVxuIl19
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLWFzc2V0cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3ViLWFzc2V0cy9zdWItYXNzZXRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUVMLGdCQUFnQixFQUdoQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBRUwsWUFBWSxFQUNaLGVBQWUsRUFDZixpQkFBaUIsRUFHakIsZUFBZSxFQUNmLE9BQU8sRUFFUCxXQUFXLEVBQ1gsc0JBQXNCLEVBQ3ZCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixnQ0FBZ0MsRUFDaEMsNEJBQTRCLEVBQzVCLHdCQUF3QixFQUN6QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7O0FBS3hFLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxlQUFlO0lBTW5ELFlBQ1ksZ0JBQWtDLEVBQ2xDLGdCQUFrQyxFQUNsQyxRQUF5QixFQUN6QixJQUFpQixFQUNqQixnQkFBa0MsRUFDbEMsa0JBQXNDLEVBQ3RDLGlCQUFvQyxFQUNwQyxZQUEwQixFQUMxQixrQkFBK0IsRUFDL0IsVUFBNkIsRUFDN0Isc0JBQThDLEVBQ3RCLFlBQTZCO1FBRS9ELEtBQUssQ0FBQyxzQkFBc0Is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RUFBRTtZQUNkLE9BQU8sTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDaEU7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsT0FBaUIsRUFBRSxVQUFzQixFQUFFLFNBQVMsRUFBRSxJQUFhO1FBQzFGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEYsT0FBTztZQUNMLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQ3pDLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxpQkFBaUI7WUFDdkQsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1lBQ25DLGNBQWMsRUFBRSxJQUFJO1NBQ3JCLENBQUM7SUFDSixDQUFDOzs2R0F4V1UsZ0JBQWdCLDZXQWtCakIsaUJBQWlCO2lIQWxCaEIsZ0JBQWdCLGNBRmYsTUFBTTsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFtQkksTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJbnZlbnRvcnlTZXJ2aWNlLFxuICBJUnVsZSxcbiAgUXVlcmllc1V0aWwsXG4gIFNtYXJ0R3JvdXBzU2VydmljZSxcbiAgU21hcnRSdWxlc1NlcnZpY2UsXG4gIFVzZXJTZXJ2aWNlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBBc3NldFR5cGVzU2VydmljZSxcbiAgQnVsa0FjdGlvbkNvbnRyb2wsXG4gIENvbHVtbixcbiAgRGF0YUdyaWRTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBQYWdpbmF0aW9uLFxuICBQZXJtaXNzaW9ucyxcbiAgVXNlclByZWZlcmVuY2VzU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEFzc2V0Tm9kZVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Fzc2V0cy1uYXZpZ2F0b3InO1xuaW1wb3J0IHtcbiAgQWxhcm1zRGV2aWNlR3JpZENvbHVtbixcbiAgSW1laURldmljZUdyaWRDb2x1bW4sXG4gIE1vZGVsRGV2aWNlR3JpZENvbHVtbixcbiAgTmFtZURldmljZUdyaWRDb2x1bW4sXG4gIFJlZ2lzdHJhdGlvbkRhdGVEZXZpY2VHcmlkQ29sdW1uLFxuICBTZXJpYWxOdW1iZXJEZXZpY2VHcmlkQ29sdW1uLFxuICBTeXN0ZW1JZERldmljZUdyaWRDb2x1bW5cbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kZXZpY2UtZ3JpZCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBc3NldFR5cGVHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL2Fzc2V0LXR5cGUtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgU3ViQXNzZXRzQ29uZmlnLCBTVUJfQVNTRVRTX0NPTkZJRyB9IGZyb20gJy4vc3ViLWFzc2V0cy5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFN1YkFzc2V0c1NlcnZpY2UgZXh0ZW5kcyBEYXRhR3JpZFNlcnZpY2Uge1xuICBxdWVyaWVzVXRpbDogUXVlcmllc1V0aWw7XG4gIHByb3RlY3RlZCBHUklEX0NPTkZJR19ERUZBVUxUX1NUT1JBR0VfS0VZID0gJ3N1Yi1hc3NldHMtZ3JpZC1jb25maWcnO1xuICBwcml2YXRlIElTX0RFVklDRV9HUk9VUF9GUkFHTUVOVCA9ICdjOHlfSXNEZXZpY2VHcm91cCc7XG4gIHByaXZhdGUgSVNfRFlOQU1JQ19HUk9VUF9GUkFHTUVOVCA9ICdjOHlfSXNEeW5hbWljR3JvdXAnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB1c2VyOiBVc2VyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYXNzZXROb2RlU2VydmljZTogQXNzZXROb2RlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc21hcnRHcm91cHNTZXJ2aWNlOiBTbWFydEdyb3Vwc1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHNtYXJ0UnVsZXNTZXJ2aWNlOiBTbWFydFJ1bGVzU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnMsXG4gICAgcHJvdGVjdGVkIGFzc2V0VHlwZXM6IEFzc2V0VHlwZXNTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB1c2VyUHJlZmVyZW5jZXNTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgIEBJbmplY3QoU1VCX0FTU0VUU19DT05GSUcpIHB1YmxpYyBtb2R1bGVDb25maWc6IFN1YkFzc2V0c0NvbmZpZ1xuICApIHtcbiAgICBzdXBlcih1c2VyUHJlZmVyZW5jZXNTZXJ2aWNlKTtcbiAgfVxuXG4gIGFzeW5jIGdldEN1c3RvbVByb3BlcnRpZXMoZ3JvdXA6IElNYW5hZ2VkT2JqZWN0KTogUHJvbWlzZTxJTWFuYWdlZE9iamVjdFtdPiB7XG4gICAgY29uc3QgYXNzZXRUeXBlID0gdGhpcy5hc3NldFR5cGVzLmdldEFzc2V0VHlwZUJ5TmFtZShncm91cC50eXBlKTtcbiAgICBpZiAoYXNzZXRUeXBlKSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5jaGlsZEFkZGl0aW9uc0xpc3QoYXNzZXRUeXBlLCB7XG4gICAgICAgIHBhZ2VTaXplOiAyMDAwLFxuICAgICAgICBxdWVyeTogXCIkZmlsdGVyPShoYXMoJ2M4eV9Jc0Fzc2V0UHJvcGVydHknKSlcIlxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0RGVmYXVsdENvbHVtbnMoX2ZpbHRlcmFibGUgPSB0cnVlLCBfc29ydGFibGUgPSB0cnVlKTogQ29sdW1uW10ge1xuICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5zID0gW1xuICAgICAgbmV3IEFzc2V0VHlwZUdyaWRDb2x1bW4oeyBzb3J0T3JkZXI6ICdkZXNjJyB9KSxcbiAgICAgIG5ldyBOYW1lRGV2aWNlR3JpZENvbHVtbih7IHNvcnRPcmRlcjogJ2FzYycgfSksXG4gICAgICBuZXcgTW9kZWxEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgU2VyaWFsTnVtYmVyRGV2aWNlR3JpZENvbHVtbih7IHZpc2libGU6IGZhbHNlIH0pLFxuICAgICAgbmV3IFJlZ2lzdHJhdGlvbkRhdGVEZXZpY2VHcmlkQ29sdW1uKHsgdmlzaWJsZTogZmFsc2UgfSksXG4gICAgICBuZXcgU3lzdGVtSWREZXZpY2VHcmlkQ29sdW1uKHsgdmlzaWJsZTogZmFsc2UgfSksXG4gICAgICBuZXcgSW1laURldmljZUdyaWRDb2x1bW4oeyB2aXNpYmxlOiBmYWxzZSB9KSxcbiAgICAgIG5ldyBBbGFybXNEZXZpY2VHcmlkQ29sdW1uKClcbiAgICBdO1xuICAgIHJldHVybiBkZWZhdWx0Q29sdW1ucztcbiAgfVxuXG4gIGdldERlZmF1bHRQYWdpbmF0aW9uKCk6IFBhZ2luYXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlU2l6ZTogMjUsXG4gICAgICBjdXJyZW50UGFnZTogMVxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0QWN0aW9uQ29udHJvbHMoKTogQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhc3luYyB1bmFzc2lnbkFzc2V0KGFzc2V0OiBJTWFuYWdlZE9iamVjdCwgcGFyZW50UmVmOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IHsgaWQ6IGFzc2V0SWQgfSA9IGFzc2V0O1xuICAgIGNvbnN0IHsgaWQ6IHBhcmVudElkIH0gPSBwYXJlbnRSZWY7XG5cbiAgICBpZiAodGhpcy5pc0RldmljZShhc3NldCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5jaGlsZEFzc2V0c1JlbW92ZShhc3NldElkLCBwYXJlbnRJZCk7XG4gICAgICAgIGNvbnN0IGFsZXJ0TWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0RldmljZSB1bmFzc2lnbmVkLicpKTtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhhbGVydE1lc3NhZ2UpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgYWxlcnRNZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnQ291bGQgbm90IHVuYXNzaWduIGRldmljZS4nKSk7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihhbGVydE1lc3NhZ2UsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuZGVhY3RpdmF0ZVNtYXJ0cnVsZXNGb3JBc3NldChhc3NldCwgcGFyZW50UmVmKTtcbiAgICB9XG4gIH1cblxuICBpc0RldmljZShhc3NldDogSU1hbmFnZWRPYmplY3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIWFzc2V0Lmhhc093blByb3BlcnR5KHRoaXMuSVNfREVWSUNFX0dST1VQX0ZSQUdNRU5UKSAmJlxuICAgICAgIWFzc2V0Lmhhc093blByb3BlcnR5KHRoaXMuSVNfRFlOQU1JQ19HUk9VUF9GUkFHTUVOVClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlQXNzZXQoYXNzZXQ6IElNYW5hZ2VkT2JqZWN0LCBwYXJlbnRSZWY6IElNYW5hZ2VkT2JqZWN0LCBwYXJhbXMgPSB7fSkge1xuICAgIGNvbnN0IGlzR3JvdXAgPVxuICAgICAgYXNzZXQuaGFzT3duUHJvcGVydHkodGhpcy5JU19ERVZJQ0VfR1JPVVBfRlJBR01FTlQpIHx8XG4gICAgICB0aGlzLnNtYXJ0R3JvdXBzU2VydmljZS5pc1NtYXJ0R3JvdXAoYXNzZXQpO1xuXG4gICAgaWYgKGlzR3JvdXApIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlR3JvdXAoYXNzZXQsIHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlRGV2aWNlKGFzc2V0LCBwYXJhbXMpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHBhcmVudFJlZiAmJlxuICAgICAgIXRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cChhc3NldCkgJiZcbiAgICAgICF0aGlzLnNtYXJ0R3JvdXBzU2VydmljZS5pc1NtYXJ0R3JvdXBWMihhc3NldClcbiAgICApIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVhY3RpdmF0ZVNtYXJ0cnVsZXNGb3JBc3NldChhc3NldCwgcGFyZW50UmVmKTtcbiAgICB9XG4gIH1cblxuICBzaG91bGRTaG93V2l0aERldmljZVVzZXJDaGVja2JveChhc3NldDogSU1hbmFnZWRPYmplY3QpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IG93bmVyLCBjOHlfSXNEZXZpY2U6IGlzUm9vdERldmljZSB9ID0gYXNzZXQ7XG4gICAgY29uc3QgaGFzRGV2aWNlVXNlckFzT3duZXIgPSBhc3NldC5vd25lciAmJiB0aGlzLmlzRGV2aWNlVXNlcihvd25lcik7XG5cbiAgICByZXR1cm4gQm9vbGVhbihpc1Jvb3REZXZpY2UgJiYgaGFzRGV2aWNlVXNlckFzT3duZXIpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdEJ1bGtBY3Rpb25Db250cm9scygpOiBCdWxrQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhc3luYyBnZXREYXRhKFxuICAgIGNvbHVtbnM6IENvbHVtbltdLFxuICAgIHBhZ2luYXRpb246IFBhZ2luYXRpb24sXG4gICAgcGFyZW50UmVmZXJlbmNlOiBJTWFuYWdlZE9iamVjdCxcbiAgICBiYXNlUXVlcnk6IGFueSA9IHt9LFxuICAgIHRleHQ6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gICAgY29uc3QgaXNSb290ID0gIXBhcmVudFJlZmVyZW5jZTtcbiAgICBpZiAoaXNSb290KSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuYnVpbGRDb21iaW5lZFJvb3RRdWVyeUZpbHRlcihjb2x1bW5zLCBwYWdpbmF0aW9uLCBiYXNlUXVlcnkpO1xuICAgICAgcmV0dXJuIHRoaXMuYXNzZXROb2RlU2VydmljZS5nZXRSb290Tm9kZXMoeyAuLi5wYWdpbmF0aW9uLCAuLi4odGV4dCAmJiB7IHRleHQgfSksIHF1ZXJ5IH0pO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJzID0ge1xuICAgICAgLi4udGhpcy5nZXRBc3NldHNGaWx0ZXJzKGNvbHVtbnMsIHBhZ2luYXRpb24sIGJhc2VRdWVyeSwgdGV4dCksXG4gICAgICB3aXRoUGFyZW50czogZmFsc2VcbiAgICB9O1xuICAgIGlmICh0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuaXNHcm91cChwYXJlbnRSZWZlcmVuY2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hc3NldE5vZGVTZXJ2aWNlLmdldEdyb3VwSXRlbXMocGFyZW50UmVmZXJlbmNlLmlkLCBmaWx0ZXJzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYXNzZXROb2RlU2VydmljZS5pc0R5bmFtaWNHcm91cChwYXJlbnRSZWZlcmVuY2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hc3NldE5vZGVTZXJ2aWNlLmdldER5bmFtaWNHcm91cEl0ZW1zKFxuICAgICAgICBwYXJlbnRSZWZlcmVuY2UuYzh5X0RldmljZVF1ZXJ5U3RyaW5nLFxuICAgICAgICBmaWx0ZXJzXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5hc3NldE5vZGVTZXJ2aWNlLmlzRGV2aWNlKHBhcmVudFJlZmVyZW5jZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuZ2V0RGV2aWNlQ2hpbGRyZW4ocGFyZW50UmVmZXJlbmNlLmlkLCBmaWx0ZXJzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDb3VudChcbiAgICBjb2x1bW5zOiBDb2x1bW5bXSxcbiAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uLFxuICAgIHBhcmVudFJlZmVyZW5jZTogSU1hbmFnZWRPYmplY3QsXG4gICAgYmFzZVF1ZXJ5OiBhbnkgPSB7fSxcbiAgICB0ZXh0OiBzdHJpbmcgPSBudWxsXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgZGVmYXVsdEZpbHRlcnMgPSB7XG4gICAgICBwYWdlU2l6ZTogMSxcbiAgICAgIHdpdGhDaGlsZHJlbjogZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IGZpbHRlcnMgPSAhcGFyZW50UmVmZXJlbmNlXG4gICAgICA/IHtcbiAgICAgICAgICBxdWVyeTogdGhpcy5idWlsZENvbWJpbmVkUm9vdFF1ZXJ5RmlsdGVyKGNvbHVtbnMsIHBhZ2luYXRpb24sIGJhc2VRdWVyeSksXG4gICAgICAgICAgLi4uZGVmYXVsdEZpbHRlcnNcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgLi4udGhpcy5nZXRBc3NldHNGaWx0ZXJzKGNvbHVtbnMsIHBhZ2luYXRpb24sIGJhc2VRdWVyeSwgdGV4dCksXG4gICAgICAgICAgLi4uZGVmYXVsdEZpbHRlcnNcbiAgICAgICAgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRBc3NldHNTdGF0aXN0aWNzKHBhcmVudFJlZmVyZW5jZSwgZmlsdGVycyk7XG4gIH1cblxuICBnZXRUb3RhbChwYXJlbnRSZWZlcmVuY2U6IElNYW5hZ2VkT2JqZWN0LCBiYXNlUXVlcnk6IGFueSA9IHt9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBxdWVyeUZpbHRlciA9IHRoaXMuYXNzZXROb2RlU2VydmljZS5yb290UXVlcnlGaWx0ZXIoKTtcbiAgICBjb25zdCBxdWVyeSA9ICFwYXJlbnRSZWZlcmVuY2VcbiAgICAgID8gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIocXVlcnlGaWx0ZXIsIGJhc2VRdWVyeSlcbiAgICAgIDogYmFzZVF1ZXJ5O1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICBxdWVyeTogdGhpcy5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KHF1ZXJ5KSxcbiAgICAgIHdpdGhDaGlsZHJlbjogZmFsc2UsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZSxcbiAgICAgIHBhZ2VTaXplOiAxXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRBc3NldHNTdGF0aXN0aWNzKHBhcmVudFJlZmVyZW5jZSwgZmlsdGVycyk7XG4gIH1cblxuICBhc3luYyBjYW5FZGl0R3JvdXAoZ3JvdXA6IElNYW5hZ2VkT2JqZWN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmNhbkVkaXQoXG4gICAgICBbUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU4sIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfQURNSU5dLFxuICAgICAgZ3JvdXBcbiAgICApO1xuICB9XG5cbiAgY2FuQ3JlYXRlR3JvdXAoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyLnZhbHVlO1xuICAgIGNvbnN0IGhhc0FkbWluUm9sZSA9IHRoaXMudXNlci5oYXNBbnlSb2xlKGN1cnJlbnRVc2VyLCBbXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9BRE1JTixcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0NSRUFURSxcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfQURNSU4sXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX01BTkFHRURfT0JKRUNUX0NSRUFURVxuICAgIF0pO1xuICAgIHJldHVybiBoYXNBZG1pblJvbGU7XG4gIH1cblxuICBhc3luYyBjYW5Bc3NpZ25EZXZpY2UoZ3JvdXA6IElNYW5hZ2VkT2JqZWN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmNhbkVkaXQoXG4gICAgICBbUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU4sIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfQURNSU5dLFxuICAgICAgZ3JvdXBcbiAgICApO1xuICB9XG5cbiAgY2FuRWRpdFNtYXJ0R3JvdXAoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgU01BUlRfR1JPVVBTX1JPTEVTX0VESVQgPSBbXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX1NNQVJUR1JPVVBfVVBEQVRFLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9TTUFSVEdST1VQX0FETUlOXG4gICAgXTtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuaGFzQW55Um9sZShTTUFSVF9HUk9VUFNfUk9MRVNfRURJVCk7XG4gIH1cblxuICBjYW5EZWxldGVTbWFydEdyb3VwKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IFNNQVJUX0dST1VQU19ST0xFU19ERUxFVEUgPSBbXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX1NNQVJUR1JPVVBfQURNSU4sXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9BRE1JTixcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfQURNSU5cbiAgICBdO1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5oYXNBbnlSb2xlKFNNQVJUX0dST1VQU19ST0xFU19ERUxFVEUpO1xuICB9XG5cbiAgaXNTbWFydEdyb3VwKGdyb3VwOiBJTWFuYWdlZE9iamVjdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNtYXJ0R3JvdXBzU2VydmljZS5pc1NtYXJ0R3JvdXAoZ3JvdXApIHx8IHRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cFYyKGdyb3VwKVxuICAgICk7XG4gIH1cblxuICBpc1VzaW5nSW52ZW50b3J5Um9sZXMoKSB7XG4gICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyLnZhbHVlO1xuICAgIGNvbnN0IGhhc0FueUludmVudG9yeVJvbGUgPSB0aGlzLnVzZXIuaGFzQW55Um9sZShjdXJyZW50VXNlciwgW1xuICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU4sXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9SRUFELFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQ1JFQVRFLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9BRE1JTixcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfQ1JFQVRFLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9SRUFEXG4gICAgXSk7XG4gICAgcmV0dXJuICFoYXNBbnlJbnZlbnRvcnlSb2xlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEFzc2V0c1N0YXRpc3RpY3MoXG4gICAgcGFyZW50UmVmZXJlbmNlOiBJTWFuYWdlZE9iamVjdCxcbiAgICBmaWx0ZXJzOiBvYmplY3RcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBpc1Jvb3QgPSAhcGFyZW50UmVmZXJlbmNlO1xuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5hc3NldE5vZGVTZXJ2aWNlLmdldFJvb3ROb2RlcyhmaWx0ZXJzKSkucGFnaW5nLnRvdGFsUGFnZXM7XG4gICAgfVxuICAgIGlmICh0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuaXNHcm91cChwYXJlbnRSZWZlcmVuY2UpKSB7XG4gICAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXNzZXROb2RlU2VydmljZS5nZXRHcm91cEl0ZW1zKHBhcmVudFJlZmVyZW5jZS5pZCwgZmlsdGVycykpLnBhZ2luZ1xuICAgICAgICAudG90YWxQYWdlcztcbiAgICB9XG4gICAgaWYgKHRoaXMuYXNzZXROb2RlU2VydmljZS5pc0R5bmFtaWNHcm91cChwYXJlbnRSZWZlcmVuY2UpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBhd2FpdCB0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuZ2V0RHluYW1pY0dyb3VwSXRlbXMoXG4gICAgICAgICAgcGFyZW50UmVmZXJlbmNlLmM4eV9EZXZpY2VRdWVyeVN0cmluZyxcbiAgICAgICAgICBmaWx0ZXJzXG4gICAgICAgIClcbiAgICAgICkucGFnaW5nLnRvdGFsUGFnZXM7XG4gICAgfVxuICAgIGlmICh0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuaXNEZXZpY2UocGFyZW50UmVmZXJlbmNlKSkge1xuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuZ2V0RGV2aWNlQ2hpbGRyZW4ocGFyZW50UmVmZXJlbmNlLmlkLCBmaWx0ZXJzKSkucGFnaW5nXG4gICAgICAgIC50b3RhbFBhZ2VzO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZENvbWJpbmVkUm9vdFF1ZXJ5RmlsdGVyKGNvbHVtbnMsIHBhZ2luYXRpb24sIGJhc2VRdWVyeSA9IHt9KSB7XG4gICAgY29uc3QgdXNlclF1ZXJ5ID0gdGhpcy5nZXRRdWVyeU9iaihjb2x1bW5zLCBwYWdpbmF0aW9uKTtcbiAgICBjb25zdCByb290UXVlcnkgPSB0aGlzLmFzc2V0Tm9kZVNlcnZpY2Uucm9vdFF1ZXJ5RmlsdGVyKCk7XG4gICAgY29uc3Qgb3JkZXJlZFJvb3RRdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkT3JkZXJieXMocm9vdFF1ZXJ5LCB1c2VyUXVlcnkuX19vcmRlcmJ5LCAnYXBwZW5kJyk7XG4gICAgY29uc3Qgcm9vdEFuZFVzZXJRdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKG9yZGVyZWRSb290UXVlcnksIHVzZXJRdWVyeS5fX2ZpbHRlcik7XG4gICAgY29uc3QgZnVsbFF1ZXJ5ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIocm9vdEFuZFVzZXJRdWVyeSwgYmFzZVF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KGZ1bGxRdWVyeSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlbGV0ZUdyb3VwKGdyb3VwOiBJTWFuYWdlZE9iamVjdCwgcGFyYW1zOiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IHsgY2FzY2FkZSB9ID0gcGFyYW1zO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cChncm91cCkgfHwgdGhpcy5zbWFydEdyb3Vwc1NlcnZpY2UuaXNTbWFydEdyb3VwVjIoZ3JvdXApXG4gICAgICAgID8gYXdhaXQgdGhpcy5zbWFydEdyb3Vwc1NlcnZpY2UuZGVsZXRlKGdyb3VwLCB7IGNhc2NhZGUgfSlcbiAgICAgICAgOiBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGVsZXRlKGdyb3VwLCB7IGNhc2NhZGUgfSk7XG5cbiAgICAgIGNvbnN0IGFsZXJ0TWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ1wie3sgbmFtZSB9fVwiIGRlbGV0ZWQuJyksIHtcbiAgICAgICAgbmFtZTogZ3JvdXAubmFtZVxuICAgICAgfSk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGFsZXJ0TWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGFsZXJ0TWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICBnZXR0ZXh0KCdDb3VsZCBub3QgZGVsZXRlIFwie3sgbmFtZSB9fVwiLicpLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogZ3JvdXAubmFtZVxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGFsZXJ0TWVzc2FnZSwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVsZXRlRGV2aWNlKGRldmljZTogSU1hbmFnZWRPYmplY3QsIHBhcmFtczogYW55ID0ge30pIHtcbiAgICBjb25zdCB7IGNhc2NhZGUsIHdpdGhEZXZpY2VVc2VyIH0gPSBwYXJhbXM7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgb3duZXIgfSA9IGRldmljZTtcbiAgICAgIGNvbnN0IHNob3VsZFJlbW92ZU93bmVyID0gd2l0aERldmljZVVzZXIgJiYgb3duZXIgJiYgdGhpcy5pc0RldmljZVVzZXIob3duZXIpO1xuXG4gICAgICBzaG91bGRSZW1vdmVPd25lclxuICAgICAgICA/IGF3YWl0IHRoaXMuZGVsZXRlRGV2aWNlV2l0aFVzZXIoZGV2aWNlLCBjYXNjYWRlKVxuICAgICAgICA6IGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZWxldGUoZGV2aWNlLCB7IGNhc2NhZGUgfSk7XG5cbiAgICAgIGNvbnN0IGFsZXJ0TWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0RldmljZSBkZWxldGVkLicpKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoYWxlcnRNZXNzYWdlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgYWxlcnRNZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnQ291bGQgbm90IGRlbGV0ZSBkZXZpY2UuJykpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGFsZXJ0TWVzc2FnZSwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVhY3RpdmF0ZVNtYXJ0cnVsZXNGb3JBc3NldChhc3NldDogSU1hbmFnZWRPYmplY3QsIHBhcmVudFJlZjogSU1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCB7IGlkOiBhc3NldElkIH0gPSBhc3NldDtcbiAgICBjb25zdCB7IGlkOiBwYXJlbnRJZCB9ID0gcGFyZW50UmVmO1xuICAgIGNvbnN0IHJ1bGVzOiBJUnVsZVtdID0gKGF3YWl0IHRoaXMuc21hcnRSdWxlc1NlcnZpY2UubGlzdEJ5Q29udGV4dChwYXJlbnRJZCkpLmRhdGE7XG5cbiAgICBjb25zdCB1cGF0ZVNtYXJ0cnVsZXNQcm9taXNlcyA9IHJ1bGVzLm1hcChydWxlID0+XG4gICAgICB0aGlzLnNtYXJ0UnVsZXNTZXJ2aWNlLmJ1bGtEZWFjdGl2YXRlRW5hYmxlZFNvdXJjZXMocnVsZSwgW2Fzc2V0SWRdKVxuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodXBhdGVTbWFydHJ1bGVzUHJvbWlzZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBhbGVydE1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgZ2V0dGV4dCgnQ291bGQgbm90IGRlYWN0aXZhdGUgc21hcnQgcnVsZXMuJylcbiAgICAgICk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIoYWxlcnRNZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzRGV2aWNlVXNlcih1c2VySWQ6IHN0cmluZykge1xuICAgIHJldHVybiB1c2VySWQubWF0Y2goL15kZXZpY2VfLyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlbGV0ZURldmljZVdpdGhVc2VyKGRldmljZTogSU1hbmFnZWRPYmplY3QsIGNhc2NhZGU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7IGNhc2NhZGUsIHdpdGhEZXZpY2VVc2VyOiB0cnVlIH07XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGVsZXRlKGRldmljZSwgcGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZWxldGUoZGV2aWNlLCB7IGNhc2NhZGUgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBc3NldHNGaWx0ZXJzKGNvbHVtbnM6IENvbHVtbltdLCBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uLCBiYXNlUXVlcnksIHRleHQ/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKHRoaXMuZ2V0UXVlcnlPYmooY29sdW1ucyksIGJhc2VRdWVyeSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLih0ZXh0ICYmIHsgdGV4dCB9KSxcbiAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkocXVlcnkpLFxuICAgICAgcGFnZVNpemU6IHBhZ2luYXRpb24ucGFnZVNpemUgfHwgdGhpcy5ERUZBVUxUX1BBR0VfU0laRSxcbiAgICAgIGN1cnJlbnRQYWdlOiBwYWdpbmF0aW9uLmN1cnJlbnRQYWdlLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWVcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,39 @@
1
+ import { Component } from '@angular/core';
2
+ import { TenantOptionsService } from '@c8y/client';
3
+ import { AlertService, gettext, OptionsService } from '@c8y/ngx-components';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@c8y/ngx-components";
6
+ import * as i2 from "@c8y/client";
7
+ import * as i3 from "@angular/common";
8
+ import * as i4 from "@angular/forms";
9
+ import * as i5 from "ngx-bootstrap/dropdown";
10
+ export class CrlCheckSettingsComponent {
11
+ constructor(optionsService, tenantOptionsService, alertService) {
12
+ this.optionsService = optionsService;
13
+ this.tenantOptionsService = tenantOptionsService;
14
+ this.alertService = alertService;
15
+ this.crlCheck = { online: false, offline: false };
16
+ }
17
+ async ngOnInit() {
18
+ this.crlCheck = {
19
+ offline: (await this.optionsService.getTenantOption('configuration', 'crl.offline.check.enabled', false)),
20
+ online: (await this.optionsService.getTenantOption('configuration', 'crl.online.check.enabled', false))
21
+ };
22
+ }
23
+ async updateTenantOption(tenantOption) {
24
+ try {
25
+ await this.tenantOptionsService.update(tenantOption);
26
+ this.alertService.success(gettext('CRL check configuration saved.'));
27
+ }
28
+ catch (er) {
29
+ this.alertService.addServerFailure(er);
30
+ }
31
+ }
32
+ }
33
+ CrlCheckSettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: CrlCheckSettingsComponent, deps: [{ token: i1.OptionsService }, { token: i2.TenantOptionsService }, { token: i1.AlertService }], target: i0.ɵɵFactoryTarget.Component });
34
+ CrlCheckSettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: CrlCheckSettingsComponent, selector: "c8y-crl-check-settings", ngImport: i0, template: "<c8y-action-bar-item [placement]=\"'right'\">\n <div\n class=\"dropdown\"\n dropdown\n [insideClick]=\"true\"\n >\n <button\n class=\"dropdown-toggle c8y-dropdown d-flex a-i-center\"\n title=\"{{ 'CRL check' | translate }}\"\n aria-haspopup=\"true\"\n type=\"button\"\n dropdownToggle\n >\n <i\n class=\"m-r-4\"\n [c8yIcon]=\"'check-document'\"\n ></i>\n <span\n class=\"text-truncate\"\n translate\n >\n CRL check\n </span>\n <i\n class=\"m-l-4 text-primary\"\n [c8yIcon]=\"'caret-down'\"\n ></i>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right hidden-xs\"\n data-cy=\"register-device--dropdown\"\n *dropdownMenu\n >\n <ng-container *ngTemplateOutlet=\"dropdown\"></ng-container>\n </ul>\n\n <ul class=\"dropdown-menu dropdown-menu-right visible-xs\">\n <ng-container *ngTemplateOutlet=\"dropdown\"></ng-container>\n </ul>\n\n <ng-template #dropdown>\n <li>\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n title=\"{{ 'Online`type of checking`' | translate }}\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"crlCheck.online\"\n (ngModelChange)=\"\n updateTenantOption({\n category: 'configuration',\n key: 'crl.online.check.enabled',\n value: $event\n })\n \"\n />\n <span class=\"m-r-4\"></span>\n {{ 'Online`type of checking`' | translate }}\n </label>\n </li>\n <li>\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n title=\"{{ 'Offline`type of checking`' | translate }}\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"crlCheck.offline\"\n (ngModelChange)=\"\n updateTenantOption({\n category: 'configuration',\n key: 'crl.offline.check.enabled',\n value: $event\n })\n \"\n />\n <span class=\"m-r-4\"></span>\n {{ 'Offline`type of checking`' | translate }}\n </label>\n </li>\n </ng-template>\n </div>\n</c8y-action-bar-item>\n", dependencies: [{ kind: "component", type: i1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i5.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i5.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] });
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: CrlCheckSettingsComponent, decorators: [{
36
+ type: Component,
37
+ args: [{ selector: 'c8y-crl-check-settings', template: "<c8y-action-bar-item [placement]=\"'right'\">\n <div\n class=\"dropdown\"\n dropdown\n [insideClick]=\"true\"\n >\n <button\n class=\"dropdown-toggle c8y-dropdown d-flex a-i-center\"\n title=\"{{ 'CRL check' | translate }}\"\n aria-haspopup=\"true\"\n type=\"button\"\n dropdownToggle\n >\n <i\n class=\"m-r-4\"\n [c8yIcon]=\"'check-document'\"\n ></i>\n <span\n class=\"text-truncate\"\n translate\n >\n CRL check\n </span>\n <i\n class=\"m-l-4 text-primary\"\n [c8yIcon]=\"'caret-down'\"\n ></i>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right hidden-xs\"\n data-cy=\"register-device--dropdown\"\n *dropdownMenu\n >\n <ng-container *ngTemplateOutlet=\"dropdown\"></ng-container>\n </ul>\n\n <ul class=\"dropdown-menu dropdown-menu-right visible-xs\">\n <ng-container *ngTemplateOutlet=\"dropdown\"></ng-container>\n </ul>\n\n <ng-template #dropdown>\n <li>\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n title=\"{{ 'Online`type of checking`' | translate }}\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"crlCheck.online\"\n (ngModelChange)=\"\n updateTenantOption({\n category: 'configuration',\n key: 'crl.online.check.enabled',\n value: $event\n })\n \"\n />\n <span class=\"m-r-4\"></span>\n {{ 'Online`type of checking`' | translate }}\n </label>\n </li>\n <li>\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n title=\"{{ 'Offline`type of checking`' | translate }}\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"crlCheck.offline\"\n (ngModelChange)=\"\n updateTenantOption({\n category: 'configuration',\n key: 'crl.offline.check.enabled',\n value: $event\n })\n \"\n />\n <span class=\"m-r-4\"></span>\n {{ 'Offline`type of checking`' | translate }}\n </label>\n </li>\n </ng-template>\n </div>\n</c8y-action-bar-item>\n" }]
38
+ }], ctorParameters: function () { return [{ type: i1.OptionsService }, { type: i2.TenantOptionsService }, { type: i1.AlertService }]; } });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JsLWNoZWNrLXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RydXN0ZWQtY2VydGlmaWNhdGVzL2NybC9jcmwtY2hlY2stc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vdHJ1c3RlZC1jZXJ0aWZpY2F0ZXMvY3JsL2NybC1jaGVjay1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBaUIsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7QUFNNUUsTUFBTSxPQUFPLHlCQUF5QjtJQUdwQyxZQUNVLGNBQThCLEVBQzlCLG9CQUEwQyxFQUMxQyxZQUEwQjtRQUYxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUxwQyxhQUFRLEdBQTBDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFNakYsQ0FBQztJQUVKLEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNkLE9BQU8sRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQ2pELGVBQWUsRUFDZiwyQkFBMkIsRUFDM0IsS0FBSyxDQUNOLENBQVk7WUFDYixNQUFNLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUNoRCxlQUFlLEVBQ2YsMEJBQTBCLEVBQzFCLEtBQUssQ0FDTixDQUFZO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsWUFBMkI7UUFDbEQsSUFBSTtZQUNGLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDO1NBQ3RFO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQzs7c0hBL0JVLHlCQUF5QjswR0FBekIseUJBQXlCLDhEQ1J0QyxteUVBb0ZBOzJGRDVFYSx5QkFBeUI7a0JBSnJDLFNBQVM7K0JBQ0Usd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElUZW5hbnRPcHRpb24sIFRlbmFudE9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBnZXR0ZXh0LCBPcHRpb25zU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktY3JsLWNoZWNrLXNldHRpbmdzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NybC1jaGVjay1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQ3JsQ2hlY2tTZXR0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNybENoZWNrOiB7IG9ubGluZTogYm9vbGVhbjsgb2ZmbGluZTogYm9vbGVhbiB9ID0geyBvbmxpbmU6IGZhbHNlLCBvZmZsaW5lOiBmYWxzZSB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3B0aW9uc1NlcnZpY2U6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50T3B0aW9uc1NlcnZpY2U6IFRlbmFudE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY3JsQ2hlY2sgPSB7XG4gICAgICBvZmZsaW5lOiAoYXdhaXQgdGhpcy5vcHRpb25zU2VydmljZS5nZXRUZW5hbnRPcHRpb248Ym9vbGVhbj4oXG4gICAgICAgICdjb25maWd1cmF0aW9uJyxcbiAgICAgICAgJ2NybC5vZmZsaW5lLmNoZWNrLmVuYWJsZWQnLFxuICAgICAgICBmYWxzZVxuICAgICAgKSkgYXMgYm9vbGVhbixcbiAgICAgIG9ubGluZTogKGF3YWl0IHRoaXMub3B0aW9uc1NlcnZpY2UuZ2V0VGVuYW50T3B0aW9uPGJvb2xlYW4+KFxuICAgICAgICAnY29uZmlndXJhdGlvbicsXG4gICAgICAgICdjcmwub25saW5lLmNoZWNrLmVuYWJsZWQnLFxuICAgICAgICBmYWxzZVxuICAgICAgKSkgYXMgYm9vbGVhblxuICAgIH07XG4gIH1cblxuICBhc3luYyB1cGRhdGVUZW5hbnRPcHRpb24odGVuYW50T3B0aW9uOiBJVGVuYW50T3B0aW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudGVuYW50T3B0aW9uc1NlcnZpY2UudXBkYXRlKHRlbmFudE9wdGlvbik7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0NSTCBjaGVjayBjb25maWd1cmF0aW9uIHNhdmVkLicpKTtcbiAgICB9IGNhdGNoIChlcikge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcik7XG4gICAgfVxuICB9XG59XG4iLCI8Yzh5LWFjdGlvbi1iYXItaXRlbSBbcGxhY2VtZW50XT1cIidyaWdodCdcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZHJvcGRvd25cIlxuICAgIGRyb3Bkb3duXG4gICAgW2luc2lkZUNsaWNrXT1cInRydWVcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJkcm9wZG93bi10b2dnbGUgYzh5LWRyb3Bkb3duIGQtZmxleCBhLWktY2VudGVyXCJcbiAgICAgIHRpdGxlPVwie3sgJ0NSTCBjaGVjaycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBkcm9wZG93blRvZ2dsZVxuICAgID5cbiAgICAgIDxpXG4gICAgICAgIGNsYXNzPVwibS1yLTRcIlxuICAgICAgICBbYzh5SWNvbl09XCInY2hlY2stZG9jdW1lbnQnXCJcbiAgICAgID48L2k+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgQ1JMIGNoZWNrXG4gICAgICA8L3NwYW4+XG4gICAgICA8aVxuICAgICAgICBjbGFzcz1cIm0tbC00IHRleHQtcHJpbWFyeVwiXG4gICAgICAgIFtjOHlJY29uXT1cIidjYXJldC1kb3duJ1wiXG4gICAgICA+PC9pPlxuICAgIDwvYnV0dG9uPlxuICAgIDx1bFxuICAgICAgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHQgaGlkZGVuLXhzXCJcbiAgICAgIGRhdGEtY3k9XCJyZWdpc3Rlci1kZXZpY2UtLWRyb3Bkb3duXCJcbiAgICAgICpkcm9wZG93bk1lbnVcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3VsPlxuXG4gICAgPHVsIGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LXJpZ2h0IHZpc2libGUteHNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93blwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvdWw+XG5cbiAgICA8bmctdGVtcGxhdGUgI2Ryb3Bkb3duPlxuICAgICAgPGxpPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveCBkLWZsZXggYS1pLWNlbnRlclwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnT25saW5lYHR5cGUgb2YgY2hlY2tpbmdgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNybENoZWNrLm9ubGluZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgdXBkYXRlVGVuYW50T3B0aW9uKHtcbiAgICAgICAgICAgICAgICBjYXRlZ29yeTogJ2NvbmZpZ3VyYXRpb24nLFxuICAgICAgICAgICAgICAgIGtleTogJ2NybC5vbmxpbmUuY2hlY2suZW5hYmxlZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICRldmVudFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibS1yLTRcIj48L3NwYW4+XG4gICAgICAgICAge3sgJ09ubGluZWB0eXBlIG9mIGNoZWNraW5nYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvbGk+XG4gICAgICA8bGk+XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgIGNsYXNzPVwiYzh5LWNoZWNrYm94IGQtZmxleCBhLWktY2VudGVyXCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdPZmZsaW5lYHR5cGUgb2YgY2hlY2tpbmdgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNybENoZWNrLm9mZmxpbmVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgIHVwZGF0ZVRlbmFudE9wdGlvbih7XG4gICAgICAgICAgICAgICAgY2F0ZWdvcnk6ICdjb25maWd1cmF0aW9uJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdjcmwub2ZmbGluZS5jaGVjay5lbmFibGVkJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJGV2ZW50XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLXItNFwiPjwvc3Bhbj5cbiAgICAgICAgICB7eyAnT2ZmbGluZWB0eXBlIG9mIGNoZWNraW5nYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvbGk+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG4iXX0=
@@ -0,0 +1,109 @@
1
+ import { Component } from '@angular/core';
2
+ import { isEmpty, pull } from 'lodash-es';
3
+ import { CrlService } from '@c8y/client';
4
+ import { AlertService, gettext, ModalService, Status } from '@c8y/ngx-components';
5
+ import { saveAs } from 'file-saver';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@c8y/client";
8
+ import * as i2 from "@c8y/ngx-components";
9
+ import * as i3 from "@angular/common";
10
+ import * as i4 from "@angular/forms";
11
+ import * as i5 from "ngx-bootstrap/datepicker";
12
+ import * as i6 from "ngx-bootstrap/popover";
13
+ import * as i7 from "./crl-check-settings.component";
14
+ export class CrlSettingsComponent {
15
+ constructor(crlService, alertService, modalService) {
16
+ this.crlService = crlService;
17
+ this.alertService = alertService;
18
+ this.modalService = modalService;
19
+ this.crls = [this.getEmptyCertificateRevocation()];
20
+ this.droppedFiles = [];
21
+ this.today = new Date();
22
+ this.MANUAL_ENTRY_POPOVER = gettext('In this section, you can override or add individual entries to the Certificate Revocation List. Providing the serial number is mandatory. In case the revocation date is not set, it will be configured to the current date.');
23
+ this.FILE_UPLOAD_POPOVER = gettext('In this section, you can upload a file containing a revocation list for certificates. The file must be in CSV format, and it should include the serial number and revocation date. If the revocation date is empty, it will be set to the current date.');
24
+ }
25
+ async downloadCrl() {
26
+ let arrayBuffer;
27
+ try {
28
+ const res = await this.crlService.downloadCrlFile();
29
+ arrayBuffer = await res.arrayBuffer();
30
+ const fileBinary = new File([arrayBuffer], 'cumulocity.crl', {
31
+ type: 'application/pkix-crl'
32
+ });
33
+ saveAs(fileBinary);
34
+ }
35
+ catch (ex) {
36
+ this.alertService.addServerFailure(ex);
37
+ }
38
+ }
39
+ downloadCrlTemplate() {
40
+ const blob = new Blob([`SERIALNO,DATE\nSERIAL_NO1,${new Date().toISOString()}`], {
41
+ type: 'text/csv;charset=utf-8;'
42
+ });
43
+ const fileName = 'crl-template';
44
+ saveAs(blob, `${fileName}.csv`);
45
+ }
46
+ addCertificateRevocation() {
47
+ this.crls.push(this.getEmptyCertificateRevocation());
48
+ }
49
+ removeCertificateRevocation(certificateRevocation) {
50
+ pull(this.crls, certificateRevocation);
51
+ if (this.crls.length === 0) {
52
+ this.addCertificateRevocation();
53
+ }
54
+ }
55
+ async save() {
56
+ try {
57
+ await this.confirm();
58
+ await this.saveCrls();
59
+ await this.uploadCrlFile();
60
+ await this.clearSavedData();
61
+ this.alertService.success(gettext('CRL saved.'));
62
+ }
63
+ catch (er) {
64
+ this.alertService.addServerFailure(er);
65
+ }
66
+ }
67
+ get isListEmpty() {
68
+ return this.crls.length === 1 && isEmpty(this.crls[0].serialNumberInHex);
69
+ }
70
+ get isFileDropped() {
71
+ return !!(this.droppedFiles && this.droppedFiles[0]);
72
+ }
73
+ async confirm() {
74
+ const isOverrideManualEntries = !this.isListEmpty && this.isFileDropped;
75
+ const status = isOverrideManualEntries ? Status.DANGER : Status.WARNING;
76
+ const body = isOverrideManualEntries
77
+ ? gettext('You are about to update certificate revocation list. The CRL file content will override manual entries. Do you want to proceed?')
78
+ : gettext('You are about to update certificate revocation list. Do you want to proceed?');
79
+ await this.modalService.confirm(gettext('Update certificate revocation list'), body, status, {
80
+ ok: gettext('Update')
81
+ });
82
+ }
83
+ clearSavedData() {
84
+ this.droppedFiles = [];
85
+ this.crls = [this.getEmptyCertificateRevocation()];
86
+ }
87
+ async saveCrls() {
88
+ if (!this.isListEmpty) {
89
+ await this.crlService.uploadCrls(this.crls);
90
+ }
91
+ }
92
+ async uploadCrlFile() {
93
+ if (this.isFileDropped) {
94
+ await this.crlService.uploadCrlFile(this.droppedFiles[0].file);
95
+ }
96
+ }
97
+ getEmptyCertificateRevocation() {
98
+ return {
99
+ serialNumberInHex: ''
100
+ };
101
+ }
102
+ }
103
+ CrlSettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: CrlSettingsComponent, deps: [{ token: i1.CrlService }, { token: i2.AlertService }, { token: i2.ModalService }], target: i0.ɵɵFactoryTarget.Component });
104
+ CrlSettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: CrlSettingsComponent, selector: "c8y-crl-settings", ngImport: i0, template: "<c8y-title>{{ 'Trusted certificates' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"certificate\"\n label=\"{{ 'Trusted certificates' | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-crl-check-settings></c8y-crl-check-settings>\n\n<!-- #TODO uncomment when available in documentation -->\n<!-- <c8y-help src=\"/users-guide/device-management/#TODO\"></c8y-help> -->\n\n<form\n class=\"card card--fullpage\"\n #crlManualForm=\"ngForm\"\n novalidate\n>\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ 'CRL offline setup' | translate }}\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-block\">\n <div\n class=\"legend form-block\"\n >\n {{ 'Manual' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ MANUAL_ENTRY_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n\n <div\n class=\"row tight-grid\"\n *ngFor=\"let certificateRevocation of crls; index as index; last as isLast\"\n >\n <div class=\"col-sm-5\">\n <c8y-form-group>\n <label\n [for]=\"'serialNumber' + index\"\n translate\n >\n Serial number\n </label>\n <input\n class=\"form-control\"\n required\n [name]=\"'serialNumber' + index\"\n [id]=\"'serialNumber' + index\"\n [(ngModel)]=\"certificateRevocation.serialNumberInHex\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '8ab34fe5476' }\"\n c8yDefaultValidation=\"hexNumber\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-5\">\n <c8y-form-group class=\"datepicker\">\n <label [for]=\"'validTillPicker' + index\">\n {{ 'Valid till' | translate }}\n </label>\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Date to' | translate\"\n placeholder=\"{{ 'Date to' | translate }}\"\n [name]=\"'validTillPicker' + index\"\n [id]=\"'validTillPicker' + index\"\n [(ngModel)]=\"certificateRevocation.revocationDate\"\n [bsConfig]=\"{ customTodayClass: 'today' }\"\n bsDatepicker\n [maxDate]=\"today\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-2\">\n <c8y-form-group>\n <div class=\"p-t-24\">\n <button\n *ngIf=\"crls.length > 1\"\n class=\"btn btn-link hidden-xs hidden-sm\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"removeCertificateRevocation(certificateRevocation)\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"minus-circle\"\n ></i>\n </button>\n <button\n class=\"btn btn-link hidden-xs hidden-sm\"\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n (click)=\"addCertificateRevocation()\"\n *ngIf=\"isLast\"\n >\n <i\n class=\"text-primary\"\n c8yIcon=\"plus-circle\"\n ></i>\n </button>\n\n <button\n *ngIf=\"crls.length > 1\"\n class=\"btn btn-danger btn-block btn-sm visible-xs visible-sm\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"removeCertificateRevocation(certificateRevocation)\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n {{ 'Remove' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-block btn-sm visible-xs visible-sm\"\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n (click)=\"addCertificateRevocation()\"\n *ngIf=\"isLast\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add' | translate }}\n </button>\n </div>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"legend form-block center\">\n {{ 'or' | translate }}\n </div>\n <div\n class=\"legend form-block\"\n >\n {{ 'File upload' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ FILE_UPLOAD_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n\n <c8y-drop-area\n class=\"drop-area-sm\"\n [title]=\"'Upload CRL file (.csv format)' | translate\"\n name=\"uploadCrlDropArea\"\n [(ngModel)]=\"droppedFiles\"\n [message]=\"'Upload CRL file (.csv format)' | translate\"\n [loadingMessage]=\"'Uploading\u2026' | translate\"\n [accept]=\"'.csv'\"\n [maxAllowedFiles]=\"1\"\n ></c8y-drop-area>\n <p class=\"help-block has-info text-muted m-t-4\">\n {{ 'CRL file content will override manual entries.' | translate }}\n </p>\n\n <button\n class=\"btn btn-sm btn-default m-t-16\"\n title=\"{{ 'Download template' | translate }}\"\n type=\"button\"\n (click)=\"downloadCrlTemplate()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"template\"\n ></i>\n {{ 'Download template' | translate }}\n </button>\n </div>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Download CRL file' | translate }}\"\n type=\"button\"\n (click)=\"downloadCrl()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"download\"\n ></i>\n {{ 'Download CRL file' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"!(crlManualForm.form.valid || isListEmpty) || (isListEmpty && !isFileDropped)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "component", type: i2.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i2.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { 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: i2.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i2.DefaultValidationDirective, selector: "[c8yDefaultValidation]", inputs: ["c8yDefaultValidation"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i5.BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isDisabled", "minDate", "maxDate", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses", "dateTooltipTexts", "isOpen", "bsValue", "bsConfig"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: i5.BsDatepickerInputDirective, selector: "input[bsDatepicker]" }, { kind: "directive", type: i6.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i7.CrlCheckSettingsComponent, selector: "c8y-crl-check-settings" }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: CrlSettingsComponent, decorators: [{
106
+ type: Component,
107
+ args: [{ selector: 'c8y-crl-settings', template: "<c8y-title>{{ 'Trusted certificates' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"certificate\"\n label=\"{{ 'Trusted certificates' | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-crl-check-settings></c8y-crl-check-settings>\n\n<!-- #TODO uncomment when available in documentation -->\n<!-- <c8y-help src=\"/users-guide/device-management/#TODO\"></c8y-help> -->\n\n<form\n class=\"card card--fullpage\"\n #crlManualForm=\"ngForm\"\n novalidate\n>\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ 'CRL offline setup' | translate }}\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-block\">\n <div\n class=\"legend form-block\"\n >\n {{ 'Manual' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ MANUAL_ENTRY_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n\n <div\n class=\"row tight-grid\"\n *ngFor=\"let certificateRevocation of crls; index as index; last as isLast\"\n >\n <div class=\"col-sm-5\">\n <c8y-form-group>\n <label\n [for]=\"'serialNumber' + index\"\n translate\n >\n Serial number\n </label>\n <input\n class=\"form-control\"\n required\n [name]=\"'serialNumber' + index\"\n [id]=\"'serialNumber' + index\"\n [(ngModel)]=\"certificateRevocation.serialNumberInHex\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '8ab34fe5476' }\"\n c8yDefaultValidation=\"hexNumber\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-5\">\n <c8y-form-group class=\"datepicker\">\n <label [for]=\"'validTillPicker' + index\">\n {{ 'Valid till' | translate }}\n </label>\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Date to' | translate\"\n placeholder=\"{{ 'Date to' | translate }}\"\n [name]=\"'validTillPicker' + index\"\n [id]=\"'validTillPicker' + index\"\n [(ngModel)]=\"certificateRevocation.revocationDate\"\n [bsConfig]=\"{ customTodayClass: 'today' }\"\n bsDatepicker\n [maxDate]=\"today\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-2\">\n <c8y-form-group>\n <div class=\"p-t-24\">\n <button\n *ngIf=\"crls.length > 1\"\n class=\"btn btn-link hidden-xs hidden-sm\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"removeCertificateRevocation(certificateRevocation)\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"minus-circle\"\n ></i>\n </button>\n <button\n class=\"btn btn-link hidden-xs hidden-sm\"\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n (click)=\"addCertificateRevocation()\"\n *ngIf=\"isLast\"\n >\n <i\n class=\"text-primary\"\n c8yIcon=\"plus-circle\"\n ></i>\n </button>\n\n <button\n *ngIf=\"crls.length > 1\"\n class=\"btn btn-danger btn-block btn-sm visible-xs visible-sm\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"removeCertificateRevocation(certificateRevocation)\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n {{ 'Remove' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-block btn-sm visible-xs visible-sm\"\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n (click)=\"addCertificateRevocation()\"\n *ngIf=\"isLast\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add' | translate }}\n </button>\n </div>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"legend form-block center\">\n {{ 'or' | translate }}\n </div>\n <div\n class=\"legend form-block\"\n >\n {{ 'File upload' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ FILE_UPLOAD_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n\n <c8y-drop-area\n class=\"drop-area-sm\"\n [title]=\"'Upload CRL file (.csv format)' | translate\"\n name=\"uploadCrlDropArea\"\n [(ngModel)]=\"droppedFiles\"\n [message]=\"'Upload CRL file (.csv format)' | translate\"\n [loadingMessage]=\"'Uploading\u2026' | translate\"\n [accept]=\"'.csv'\"\n [maxAllowedFiles]=\"1\"\n ></c8y-drop-area>\n <p class=\"help-block has-info text-muted m-t-4\">\n {{ 'CRL file content will override manual entries.' | translate }}\n </p>\n\n <button\n class=\"btn btn-sm btn-default m-t-16\"\n title=\"{{ 'Download template' | translate }}\"\n type=\"button\"\n (click)=\"downloadCrlTemplate()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"template\"\n ></i>\n {{ 'Download template' | translate }}\n </button>\n </div>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Download CRL file' | translate }}\"\n type=\"button\"\n (click)=\"downloadCrl()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"download\"\n ></i>\n {{ 'Download CRL file' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"!(crlManualForm.form.valid || isListEmpty) || (isListEmpty && !isFileDropped)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
108
+ }], ctorParameters: function () { return [{ type: i1.CrlService }, { type: i2.AlertService }, { type: i2.ModalService }]; } });
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JsLXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RydXN0ZWQtY2VydGlmaWNhdGVzL2NybC9jcmwtc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vdHJ1c3RlZC1jZXJ0aWZpY2F0ZXMvY3JsL2NybC1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQTBCLE1BQU0sYUFBYSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQWUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7Ozs7Ozs7QUFNcEMsTUFBTSxPQUFPLG9CQUFvQjtJQWEvQixZQUNVLFVBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLFlBQTBCO1FBRjFCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFmcEMsU0FBSSxHQUE2QixDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDLENBQUM7UUFDeEUsaUJBQVksR0FBa0IsRUFBRSxDQUFDO1FBQ2pDLFVBQUssR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRXpCLHlCQUFvQixHQUFHLE9BQU8sQ0FDNUIsOE5BQThOLENBQy9OLENBQUM7UUFFRix3QkFBbUIsR0FBRyxPQUFPLENBQzNCLHlQQUF5UCxDQUMxUCxDQUFDO0lBTUMsQ0FBQztJQUVKLEtBQUssQ0FBQyxXQUFXO1FBQ2YsSUFBSSxXQUF3QixDQUFDO1FBQzdCLElB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RUFBRTtZQUMzRixFQUFFLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUN0QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sS0FBSyxDQUFDLFFBQVE7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0M7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQWE7UUFDekIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoRTtJQUNILENBQUM7SUFFTyw2QkFBNkI7UUFDbkMsT0FBTztZQUNMLGlCQUFpQixFQUFFLEVBQUU7U0FDdEIsQ0FBQztJQUNKLENBQUM7O2lIQTNHVSxvQkFBb0I7cUdBQXBCLG9CQUFvQix3RENWakMsb3NOQWdOQTsyRkR0TWEsb0JBQW9CO2tCQUpoQyxTQUFTOytCQUNFLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNFbXB0eSwgcHVsbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBDcmxTZXJ2aWNlLCBJQ2VydGlmaWNhdGVSZXZvY2F0aW9uIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBEcm9wcGVkRmlsZSwgZ2V0dGV4dCwgTW9kYWxTZXJ2aWNlLCBTdGF0dXMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktY3JsLXNldHRpbmdzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NybC1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQ3JsU2V0dGluZ3NDb21wb25lbnQge1xuICBjcmxzOiBJQ2VydGlmaWNhdGVSZXZvY2F0aW9uW10gPSBbdGhpcy5nZXRFbXB0eUNlcnRpZmljYXRlUmV2b2NhdGlvbigpXTtcbiAgZHJvcHBlZEZpbGVzOiBEcm9wcGVkRmlsZVtdID0gW107XG4gIHRvZGF5OiBEYXRlID0gbmV3IERhdGUoKTtcblxuICBNQU5VQUxfRU5UUllfUE9QT1ZFUiA9IGdldHRleHQoXG4gICAgJ0luIHRoaXMgc2VjdGlvbiwgeW91IGNhbiBvdmVycmlkZSBvciBhZGQgaW5kaXZpZHVhbCBlbnRyaWVzIHRvIHRoZSBDZXJ0aWZpY2F0ZSBSZXZvY2F0aW9uIExpc3QuIFByb3ZpZGluZyB0aGUgc2VyaWFsIG51bWJlciBpcyBtYW5kYXRvcnkuIEluIGNhc2UgdGhlIHJldm9jYXRpb24gZGF0ZSBpcyBub3Qgc2V0LCBpdCB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gdGhlIGN1cnJlbnQgZGF0ZS4nXG4gICk7XG5cbiAgRklMRV9VUExPQURfUE9QT1ZFUiA9IGdldHRleHQoXG4gICAgJ0luIHRoaXMgc2VjdGlvbiwgeW91IGNhbiB1cGxvYWQgYSBmaWxlIGNvbnRhaW5pbmcgYSByZXZvY2F0aW9uIGxpc3QgZm9yIGNlcnRpZmljYXRlcy4gVGhlIGZpbGUgbXVzdCBiZSBpbiBDU1YgZm9ybWF0LCBhbmQgaXQgc2hvdWxkIGluY2x1ZGUgdGhlIHNlcmlhbCBudW1iZXIgYW5kIHJldm9jYXRpb24gZGF0ZS4gSWYgdGhlIHJldm9jYXRpb24gZGF0ZSBpcyBlbXB0eSwgaXQgd2lsbCBiZSBzZXQgdG8gdGhlIGN1cnJlbnQgZGF0ZS4nXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjcmxTZXJ2aWNlOiBDcmxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgZG93bmxvYWRDcmwoKSB7XG4gICAgbGV0IGFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlcjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jcmxTZXJ2aWNlLmRvd25sb2FkQ3JsRmlsZSgpO1xuICAgICAgYXJyYXlCdWZmZXIgPSBhd2FpdCByZXMuYXJyYXlCdWZmZXIoKTtcbiAgICAgIGNvbnN0IGZpbGVCaW5hcnkgPSBuZXcgRmlsZShbYXJyYXlCdWZmZXJdLCAnY3VtdWxvY2l0eS5jcmwnLCB7XG4gICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi9wa2l4LWNybCdcbiAgICAgIH0pO1xuICAgICAgc2F2ZUFzKGZpbGVCaW5hcnkpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICB9XG4gIH1cblxuICBkb3dubG9hZENybFRlbXBsYXRlKCkge1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYFNFUklBTE5PLERBVEVcXG5TRVJJQUxfTk8xLCR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfWBdLCB7XG4gICAgICB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtODsnXG4gICAgfSk7XG4gICAgY29uc3QgZmlsZU5hbWUgPSAnY3JsLXRlbXBsYXRlJztcbiAgICBzYXZlQXMoYmxvYiwgYCR7ZmlsZU5hbWV9LmNzdmApO1xuICB9XG5cbiAgYWRkQ2VydGlmaWNhdGVSZXZvY2F0aW9uKCkge1xuICAgIHRoaXMuY3Jscy5wdXNoKHRoaXMuZ2V0RW1wdHlDZXJ0aWZpY2F0ZVJldm9jYXRpb24oKSk7XG4gIH1cblxuICByZW1vdmVDZXJ0aWZpY2F0ZVJldm9jYXRpb24oY2VydGlmaWNhdGVSZXZvY2F0aW9uKSB7XG4gICAgcHVsbCh0aGlzLmNybHMsIGNlcnRpZmljYXRlUmV2b2NhdGlvbik7XG4gICAgaWYgKHRoaXMuY3Jscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuYWRkQ2VydGlmaWNhdGVSZXZvY2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZSgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb25maXJtKCk7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVDcmxzKCk7XG4gICAgICBhd2FpdCB0aGlzLnVwbG9hZENybEZpbGUoKTtcbiAgICAgIGF3YWl0IHRoaXMuY2xlYXJTYXZlZERhdGEoKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQ1JMIHNhdmVkLicpKTtcbiAgICB9IGNhdGNoIChlcikge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcik7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzTGlzdEVtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLmNybHMubGVuZ3RoID09PSAxICYmIGlzRW1wdHkodGhpcy5jcmxzWzBdLnNlcmlhbE51bWJlckluSGV4KTtcbiAgfVxuXG4gIGdldCBpc0ZpbGVEcm9wcGVkKCkge1xuICAgIHJldHVybiAhISh0aGlzLmRyb3BwZWRGaWxlcyAmJiB0aGlzLmRyb3BwZWRGaWxlc1swXSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbmZpcm0oKSB7XG4gICAgY29uc3QgaXNPdmVycmlkZU1hbnVhbEVudHJpZXMgPSAhdGhpcy5pc0xpc3RFbXB0eSAmJiB0aGlzLmlzRmlsZURyb3BwZWQ7XG4gICAgY29uc3Qgc3RhdHVzID0gaXNPdmVycmlkZU1hbnVhbEVudHJpZXMgPyBTdGF0dXMuREFOR0VSIDogU3RhdHVzLldBUk5JTkc7XG4gICAgY29uc3QgYm9keSA9IGlzT3ZlcnJpZGVNYW51YWxFbnRyaWVzXG4gICAgICA/IGdldHRleHQoXG4gICAgICAgICAgJ1lvdSBhcmUgYWJvdXQgdG8gdXBkYXRlIGNlcnRpZmljYXRlIHJldm9jYXRpb24gbGlzdC4gVGhlIENSTCBmaWxlIGNvbnRlbnQgd2lsbCBvdmVycmlkZSBtYW51YWwgZW50cmllcy4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgIClcbiAgICAgIDogZ2V0dGV4dCgnWW91IGFyZSBhYm91dCB0byB1cGRhdGUgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBsaXN0LiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkPycpO1xuXG4gICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2UuY29uZmlybShnZXR0ZXh0KCdVcGRhdGUgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBsaXN0JyksIGJvZHksIHN0YXR1cywge1xuICAgICAgb2s6IGdldHRleHQoJ1VwZGF0ZScpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyU2F2ZWREYXRhKCkge1xuICAgIHRoaXMuZHJvcHBlZEZpbGVzID0gW107XG4gICAgdGhpcy5jcmxzID0gW3RoaXMuZ2V0RW1wdHlDZXJ0aWZpY2F0ZVJldm9jYXRpb24oKV07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmVDcmxzKCkge1xuICAgIGlmICghdGhpcy5pc0xpc3RFbXB0eSkge1xuICAgICAgYXdhaXQgdGhpcy5jcmxTZXJ2aWNlLnVwbG9hZENybHModGhpcy5jcmxzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwbG9hZENybEZpbGUoKSB7XG4gICAgaWYgKHRoaXMuaXNGaWxlRHJvcHBlZCkge1xuICAgICAgYXdhaXQgdGhpcy5jcmxTZXJ2aWNlLnVwbG9hZENybEZpbGUodGhpcy5kcm9wcGVkRmlsZXNbMF0uZmlsZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbXB0eUNlcnRpZmljYXRlUmV2b2NhdGlvbigpOiBJQ2VydGlmaWNhdGVSZXZvY2F0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VyaWFsTnVtYmVySW5IZXg6ICcnXG4gICAgfTtcbiAgfVxufVxuIiwiPGM4eS10aXRsZT57eyAnVHJ1c3RlZCBjZXJ0aWZpY2F0ZXMnIHwgdHJhbnNsYXRlIH19PC9jOHktdGl0bGU+XG5cbjxjOHktYnJlYWRjcnVtYj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBpY29uPVwiYzh5LW1hbmFnZW1lbnRcIlxuICAgIGxhYmVsPVwie3sgJ01hbmFnZW1lbnQnIHwgdHJhbnNsYXRlIH19XCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBpY29uPVwiY2VydGlmaWNhdGVcIlxuICAgIGxhYmVsPVwie3sgJ1RydXN0ZWQgY2VydGlmaWNhdGVzJyB8IHRyYW5zbGF0ZSB9fVwiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48Yzh5LWNybC1jaGVjay1zZXR0aW5ncz48L2M4eS1jcmwtY2hlY2stc2V0dGluZ3M+XG5cbjwhLS0gI1RPRE8gdW5jb21tZW50IHdoZW4gYXZhaWxhYmxlIGluIGRvY3VtZW50YXRpb24gIC0tPlxuPCEtLSA8Yzh5LWhlbHAgc3JjPVwiL3VzZXJzLWd1aWRlL2RldmljZS1tYW5hZ2VtZW50LyNUT0RPXCI+PC9jOHktaGVscD4gLS0+XG5cbjxmb3JtXG4gIGNsYXNzPVwiY2FyZCBjYXJkLS1mdWxscGFnZVwiXG4gICNjcmxNYW51YWxGb3JtPVwibmdGb3JtXCJcbiAgbm92YWxpZGF0ZVxuPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgc2VwYXJhdG9yXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIj5cbiAgICAgIHt7ICdDUkwgb2ZmbGluZSBzZXR1cCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9ja1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxlZ2VuZCBmb3JtLWJsb2NrXCJcbiAgICAgID5cbiAgICAgICAge3sgJ01hbnVhbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgcG9wb3Zlcj1cInt7IE1BTlVBTF9FTlRSWV9QT1BPVkVSIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicm93IHRpZ2h0LWdyaWRcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgY2VydGlmaWNhdGVSZXZvY2F0aW9uIG9mIGNybHM7IGluZGV4IGFzIGluZGV4OyBsYXN0IGFzIGlzTGFzdFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNVwiPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBbZm9yXT1cIidzZXJpYWxOdW1iZXInICsgaW5kZXhcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgU2VyaWFsIG51bWJlclxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFtuYW1lXT1cIidzZXJpYWxOdW1iZXInICsgaW5kZXhcIlxuICAgICAgICAgICAgICBbaWRdPVwiJ3NlcmlhbE51bWJlcicgKyBpbmRleFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY2VydGlmaWNhdGVSZXZvY2F0aW9uLnNlcmlhbE51bWJlckluSGV4XCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlOiB7IGV4YW1wbGU6ICc4YWIzNGZlNTQ3NicgfVwiXG4gICAgICAgICAgICAgIGM4eURlZmF1bHRWYWxpZGF0aW9uPVwiaGV4TnVtYmVyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNVwiPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cImRhdGVwaWNrZXJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIid2YWxpZFRpbGxQaWNrZXInICsgaW5kZXhcIj5cbiAgICAgICAgICAgICAge3sgJ1ZhbGlkIHRpbGwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInRGF0ZSB0bycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdEYXRlIHRvJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIFtuYW1lXT1cIid2YWxpZFRpbGxQaWNrZXInICsgaW5kZXhcIlxuICAgICAgICAgICAgICBbaWRdPVwiJ3ZhbGlkVGlsbFBpY2tlcicgKyBpbmRleFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY2VydGlmaWNhdGVSZXZvY2F0aW9uLnJldm9jYXRpb25EYXRlXCJcbiAgICAgICAgICAgICAgW2JzQ29uZmlnXT1cInsgY3VzdG9tVG9kYXlDbGFzczogJ3RvZGF5JyB9XCJcbiAgICAgICAgICAgICAgYnNEYXRlcGlja2VyXG4gICAgICAgICAgICAgIFttYXhEYXRlXT1cInRvZGF5XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMlwiPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXQtMjRcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY3Jscy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBoaWRkZW4teHMgaGlkZGVuLXNtXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdSZW1vdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQ2VydGlmaWNhdGVSZXZvY2F0aW9uKGNlcnRpZmljYXRlUmV2b2NhdGlvbilcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgYzh5SWNvbj1cIm1pbnVzLWNpcmNsZVwiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBoaWRkZW4teHMgaGlkZGVuLXNtXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdBZGQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQ2VydGlmaWNhdGVSZXZvY2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNMYXN0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICBjOHlJY29uPVwicGx1cy1jaXJjbGVcIlxuICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImNybHMubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4tYmxvY2sgYnRuLXNtIHZpc2libGUteHMgdmlzaWJsZS1zbVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVtb3ZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUNlcnRpZmljYXRlUmV2b2NhdGlvbihjZXJ0aWZpY2F0ZVJldm9jYXRpb24pXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJtaW51cy1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgJ1JlbW92ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tYmxvY2sgYnRuLXNtIHZpc2libGUteHMgdmlzaWJsZS1zbVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQWRkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZENlcnRpZmljYXRlUmV2b2NhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzTGFzdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgJ0FkZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZCBmb3JtLWJsb2NrIGNlbnRlclwiPlxuICAgICAgICB7eyAnb3InIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJsZWdlbmQgZm9ybS1ibG9ja1wiXG4gICAgICA+XG4gICAgICAgIHt7ICdGaWxlIHVwbG9hZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgcG9wb3Zlcj1cInt7IEZJTEVfVVBMT0FEX1BPUE9WRVIgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxjOHktZHJvcC1hcmVhXG4gICAgICAgIGNsYXNzPVwiZHJvcC1hcmVhLXNtXCJcbiAgICAgICAgW3RpdGxlXT1cIidVcGxvYWQgQ1JMIGZpbGUgKC5jc3YgZm9ybWF0KScgfCB0cmFuc2xhdGVcIlxuICAgICAgICBuYW1lPVwidXBsb2FkQ3JsRHJvcEFyZWFcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cImRyb3BwZWRGaWxlc1wiXG4gICAgICAgIFttZXNzYWdlXT1cIidVcGxvYWQgQ1JMIGZpbGUgKC5jc3YgZm9ybWF0KScgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbbG9hZGluZ01lc3NhZ2VdPVwiJ1VwbG9hZGluZ+KApicgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbYWNjZXB0XT1cIicuY3N2J1wiXG4gICAgICAgIFttYXhBbGxvd2VkRmlsZXNdPVwiMVwiXG4gICAgICA+PC9jOHktZHJvcC1hcmVhPlxuICAgICAgPHAgY2xhc3M9XCJoZWxwLWJsb2NrIGhhcy1pbmZvIHRleHQtbXV0ZWQgbS10LTRcIj5cbiAgICAgICAge3sgJ0NSTCBmaWxlIGNvbnRlbnQgd2lsbCBvdmVycmlkZSBtYW51YWwgZW50cmllcy4nIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3A+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kZWZhdWx0IG0tdC0xNlwiXG4gICAgICAgIHRpdGxlPVwie3sgJ0Rvd25sb2FkIHRlbXBsYXRlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRDcmxUZW1wbGF0ZSgpXCJcbiAgICAgID5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cIm0tci00XCJcbiAgICAgICAgICBjOHlJY29uPVwidGVtcGxhdGVcIlxuICAgICAgICA+PC9pPlxuICAgICAgICB7eyAnRG93bmxvYWQgdGVtcGxhdGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBzZXBhcmF0b3JcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICB0aXRsZT1cInt7ICdEb3dubG9hZCBDUkwgZmlsZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiZG93bmxvYWRDcmwoKVwiXG4gICAgPlxuICAgICAgPGlcbiAgICAgICAgY2xhc3M9XCJtLXItNFwiXG4gICAgICAgIGM4eUljb249XCJkb3dubG9hZFwiXG4gICAgICA+PC9pPlxuICAgICAge3sgJ0Rvd25sb2FkIENSTCBmaWxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgIHRpdGxlPVwie3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIShjcmxNYW51YWxGb3JtLmZvcm0udmFsaWQgfHwgaXNMaXN0RW1wdHkpIHx8IChpc0xpc3RFbXB0eSAmJiAhaXNGaWxlRHJvcHBlZClcIlxuICAgID5cbiAgICAgIHt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
@@ -0,0 +1,46 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { RouterModule } from '@angular/router';
3
+ import { CommonModule, CoreModule } from '@c8y/ngx-components';
4
+ import { BsDatepickerModule } from 'ngx-bootstrap/datepicker';
5
+ import { CrlSettingsComponent } from './crl-settings.component';
6
+ import { CrlCheckSettingsComponent } from './crl-check-settings.component';
7
+ import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
8
+ import { PopoverModule } from 'ngx-bootstrap/popover';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/router";
11
+ import * as i2 from "ngx-bootstrap/dropdown";
12
+ const trustedCertificatesRoutes = [
13
+ {
14
+ path: 'trusted-certificates/settings',
15
+ component: CrlSettingsComponent,
16
+ pathMatch: 'full'
17
+ }
18
+ ];
19
+ export class CrlSettingsModule {
20
+ }
21
+ CrlSettingsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: CrlSettingsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
22
+ CrlSettingsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.7", ngImport: i0, type: CrlSettingsModule, declarations: [CrlSettingsComponent, CrlCheckSettingsComponent], imports: [CoreModule,
23
+ CommonModule, i1.RouterModule, i2.BsDropdownModule, BsDatepickerModule,
24
+ PopoverModule] });
25
+ CrlSettingsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: CrlSettingsModule, imports: [CoreModule,
26
+ CommonModule,
27
+ RouterModule.forChild(trustedCertificatesRoutes),
28
+ BsDropdownModule.forRoot(),
29
+ BsDatepickerModule,
30
+ PopoverModule] });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: CrlSettingsModule, decorators: [{
32
+ type: NgModule,
33
+ args: [{
34
+ declarations: [CrlSettingsComponent, CrlCheckSettingsComponent],
35
+ exports: [],
36
+ imports: [
37
+ CoreModule,
38
+ CommonModule,
39
+ RouterModule.forChild(trustedCertificatesRoutes),
40
+ BsDropdownModule.forRoot(),
41
+ BsDatepickerModule,
42
+ PopoverModule
43
+ ]
44
+ }]
45
+ }] });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JsLXNldHRpbmdzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RydXN0ZWQtY2VydGlmaWNhdGVzL2NybC9jcmwtc2V0dGluZ3MubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFTLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7O0FBRXRELE1BQU0seUJBQXlCLEdBQVk7SUFDekM7UUFDRSxJQUFJLEVBQUUsK0JBQStCO1FBQ3JDLFNBQVMsRUFBRSxvQkFBb0I7UUFDL0IsU0FBUyxFQUFFLE1BQU07S0FDbEI7Q0FDRixDQUFDO0FBY0YsTUFBTSxPQUFPLGlCQUFpQjs7OEdBQWpCLGlCQUFpQjsrR0FBakIsaUJBQWlCLGlCQVhiLG9CQUFvQixFQUFFLHlCQUF5QixhQUc1RCxVQUFVO1FBQ1YsWUFBWSx3Q0FHWixrQkFBa0I7UUFDbEIsYUFBYTsrR0FHSixpQkFBaUIsWUFSMUIsVUFBVTtRQUNWLFlBQVk7UUFDWixZQUFZLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDO1FBQ2hELGdCQUFnQixDQUFDLE9BQU8sRUFBRTtRQUMxQixrQkFBa0I7UUFDbEIsYUFBYTsyRkFHSixpQkFBaUI7a0JBWjdCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsb0JBQW9CLEVBQUUseUJBQXlCLENBQUM7b0JBQy9ELE9BQU8sRUFBRSxFQUFFO29CQUNYLE9BQU8sRUFBRTt3QkFDUCxVQUFVO3dCQUNWLFlBQVk7d0JBQ1osWUFBWSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQzt3QkFDaEQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO3dCQUMxQixrQkFBa0I7d0JBQ2xCLGFBQWE7cUJBQ2Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGUsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIENvcmVNb2R1bGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEJzRGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBDcmxTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4vY3JsLXNldHRpbmdzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcmxDaGVja1NldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi9jcmwtY2hlY2stc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IEJzRHJvcGRvd25Nb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2Ryb3Bkb3duJztcbmltcG9ydCB7IFBvcG92ZXJNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3BvcG92ZXInO1xuXG5jb25zdCB0cnVzdGVkQ2VydGlmaWNhdGVzUm91dGVzOiBSb3V0ZVtdID0gW1xuICB7XG4gICAgcGF0aDogJ3RydXN0ZWQtY2VydGlmaWNhdGVzL3NldHRpbmdzJyxcbiAgICBjb21wb25lbnQ6IENybFNldHRpbmdzQ29tcG9uZW50LFxuICAgIHBhdGhNYXRjaDogJ2Z1bGwnXG4gIH1cbl07XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0NybFNldHRpbmdzQ29tcG9uZW50LCBDcmxDaGVja1NldHRpbmdzQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW10sXG4gIGltcG9ydHM6IFtcbiAgICBDb3JlTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQodHJ1c3RlZENlcnRpZmljYXRlc1JvdXRlcyksXG4gICAgQnNEcm9wZG93bk1vZHVsZS5mb3JSb290KCksXG4gICAgQnNEYXRlcGlja2VyTW9kdWxlLFxuICAgIFBvcG92ZXJNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDcmxTZXR0aW5nc01vZHVsZSB7fVxuIl19
@@ -0,0 +1,36 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Router } from '@angular/router';
3
+ import { gettext } from '@c8y/ngx-components';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/router";
6
+ export class TabsFactory {
7
+ constructor(router) {
8
+ this.router = router;
9
+ }
10
+ get() {
11
+ const tabs = [];
12
+ if (this.router.url.match(/trusted-certificates/g)) {
13
+ tabs.push({
14
+ icon: 'certificate',
15
+ priority: 1000,
16
+ label: gettext('Certificates'),
17
+ path: 'trusted-certificates/certificates',
18
+ orientation: 'horizontal'
19
+ });
20
+ tabs.push({
21
+ icon: 'settings',
22
+ priority: 900,
23
+ label: gettext('Settings'),
24
+ path: 'trusted-certificates/settings',
25
+ orientation: 'horizontal'
26
+ });
27
+ }
28
+ return tabs;
29
+ }
30
+ }
31
+ TabsFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TabsFactory, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
32
+ TabsFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TabsFactory });
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TabsFactory, decorators: [{
34
+ type: Injectable
35
+ }], ctorParameters: function () { return [{ type: i1.Router }]; } });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHJ1c3RlZC1jZXJ0aWZpY2F0ZXMvZmFjdG9yaWVzL3RhYnMuZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFtQixNQUFNLHFCQUFxQixDQUFDOzs7QUFHL0QsTUFBTSxPQUFPLFdBQVc7SUFDdEIsWUFBbUIsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBRyxDQUFDO0lBQ3JDLEdBQUc7UUFDRCxNQUFNLElBQUksR0FBVSxFQUFFLENBQUM7UUFFdkIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsRUFBRTtZQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNSLElBQUksRUFBRSxhQUFhO2dCQUNuQixRQUFRLEVBQUUsSUFBSTtnQkFDZCxLQUFLLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQztnQkFDOUIsSUFBSSxFQUFFLG1DQUFtQztnQkFDekMsV0FBVyxFQUFFLFlBQVk7YUFDbkIsQ0FBQyxDQUFDO1lBRVYsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDUixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUM7Z0JBQzFCLElBQUksRUFBRSwrQkFBK0I7Z0JBQ3JDLFdBQVcsRUFBRSxZQUFZO2FBQ25CLENBQUMsQ0FBQztTQUNYO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzt3R0F4QlUsV0FBVzs0R0FBWCxXQUFXOzJGQUFYLFdBQVc7a0JBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZ2V0dGV4dCwgVGFiLCBUYWJGYWN0b3J5IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUYWJzRmFjdG9yeSBpbXBsZW1lbnRzIFRhYkZhY3Rvcnkge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcm91dGVyOiBSb3V0ZXIpIHt9XG4gIGdldCgpOiBUYWJbXSB7XG4gICAgY29uc3QgdGFiczogVGFiW10gPSBbXTtcblxuICAgIGlmICh0aGlzLnJvdXRlci51cmwubWF0Y2goL3RydXN0ZWQtY2VydGlmaWNhdGVzL2cpKSB7XG4gICAgICB0YWJzLnB1c2goe1xuICAgICAgICBpY29uOiAnY2VydGlmaWNhdGUnLFxuICAgICAgICBwcmlvcml0eTogMTAwMCxcbiAgICAgICAgbGFiZWw6IGdldHRleHQoJ0NlcnRpZmljYXRlcycpLFxuICAgICAgICBwYXRoOiAndHJ1c3RlZC1jZXJ0aWZpY2F0ZXMvY2VydGlmaWNhdGVzJyxcbiAgICAgICAgb3JpZW50YXRpb246ICdob3Jpem9udGFsJ1xuICAgICAgfSBhcyBUYWIpO1xuXG4gICAgICB0YWJzLnB1c2goe1xuICAgICAgICBpY29uOiAnc2V0dGluZ3MnLFxuICAgICAgICBwcmlvcml0eTogOTAwLFxuICAgICAgICBsYWJlbDogZ2V0dGV4dCgnU2V0dGluZ3MnKSxcbiAgICAgICAgcGF0aDogJ3RydXN0ZWQtY2VydGlmaWNhdGVzL3NldHRpbmdzJyxcbiAgICAgICAgb3JpZW50YXRpb246ICdob3Jpem9udGFsJ1xuICAgICAgfSBhcyBUYWIpO1xuICAgIH1cblxuICAgIHJldHVybiB0YWJzO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,26 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { gettext, NavigatorNode } from '@c8y/ngx-components';
3
+ import * as i0 from "@angular/core";
4
+ export class TrustedCertificatesNavigationFactory {
5
+ constructor() {
6
+ this.navs = [];
7
+ }
8
+ async get() {
9
+ if (this.navs.length === 0) {
10
+ this.navs.push(new NavigatorNode({
11
+ label: gettext('Trusted certificates'),
12
+ icon: 'certificate',
13
+ path: '/trusted-certificates/certificates',
14
+ parent: gettext('Management'),
15
+ priority: 100
16
+ }));
17
+ }
18
+ return this.navs;
19
+ }
20
+ }
21
+ TrustedCertificatesNavigationFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TrustedCertificatesNavigationFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
22
+ TrustedCertificatesNavigationFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TrustedCertificatesNavigationFactory });
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TrustedCertificatesNavigationFactory, decorators: [{
24
+ type: Injectable
25
+ }] });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3RlZC1jZXJ0aWZpY2F0ZXMtbmF2aWdhdGlvbi5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHJ1c3RlZC1jZXJ0aWZpY2F0ZXMvZmFjdG9yaWVzL3RydXN0ZWQtY2VydGlmaWNhdGVzLW5hdmlnYXRpb24uZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUF3QixNQUFNLHFCQUFxQixDQUFDOztBQUduRixNQUFNLE9BQU8sb0NBQW9DO0lBRGpEO1FBRUUsU0FBSSxHQUFvQixFQUFFLENBQUM7S0FnQjVCO0lBZEMsS0FBSyxDQUFDLEdBQUc7UUFDUCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDWixJQUFJLGFBQWEsQ0FBQztnQkFDaEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztnQkFDdEMsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLElBQUksRUFBRSxvQ0FBb0M7Z0JBQzFDLE1BQU0sRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDO2dCQUM3QixRQUFRLEVBQUUsR0FBRzthQUNkLENBQUMsQ0FDSCxDQUFDO1NBQ0g7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQzs7aUlBaEJVLG9DQUFvQztxSUFBcEMsb0NBQW9DOzJGQUFwQyxvQ0FBb0M7a0JBRGhELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXR0ZXh0LCBOYXZpZ2F0b3JOb2RlLCBOYXZpZ2F0b3JOb2RlRmFjdG9yeSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVHJ1c3RlZENlcnRpZmljYXRlc05hdmlnYXRpb25GYWN0b3J5IGltcGxlbWVudHMgTmF2aWdhdG9yTm9kZUZhY3Rvcnkge1xuICBuYXZzOiBOYXZpZ2F0b3JOb2RlW10gPSBbXTtcblxuICBhc3luYyBnZXQoKSB7XG4gICAgaWYgKHRoaXMubmF2cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMubmF2cy5wdXNoKFxuICAgICAgICBuZXcgTmF2aWdhdG9yTm9kZSh7XG4gICAgICAgICAgbGFiZWw6IGdldHRleHQoJ1RydXN0ZWQgY2VydGlmaWNhdGVzJyksXG4gICAgICAgICAgaWNvbjogJ2NlcnRpZmljYXRlJyxcbiAgICAgICAgICBwYXRoOiAnL3RydXN0ZWQtY2VydGlmaWNhdGVzL2NlcnRpZmljYXRlcycsXG4gICAgICAgICAgcGFyZW50OiBnZXR0ZXh0KCdNYW5hZ2VtZW50JyksXG4gICAgICAgICAgcHJpb3JpdHk6IDEwMFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubmF2cztcbiAgfVxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  export * from './trusted-certificates.module';
2
- export * from './trusted-certificates.component';
3
- export * from './add-trusted-certificate.component';
4
- export * from './trusted-certificates-navigation.factory';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cnVzdGVkLWNlcnRpZmljYXRlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDJDQUEyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90cnVzdGVkLWNlcnRpZmljYXRlcy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi90cnVzdGVkLWNlcnRpZmljYXRlcy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9hZGQtdHJ1c3RlZC1jZXJ0aWZpY2F0ZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90cnVzdGVkLWNlcnRpZmljYXRlcy1uYXZpZ2F0aW9uLmZhY3RvcnknO1xuIl19
2
+ export * from './list/trusted-certificate-list.component';
3
+ export * from './list/add-trusted-certificate.component';
4
+ export * from './factories/trusted-certificates-navigation.factory';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cnVzdGVkLWNlcnRpZmljYXRlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLHFEQUFxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90cnVzdGVkLWNlcnRpZmljYXRlcy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saXN0L3RydXN0ZWQtY2VydGlmaWNhdGUtbGlzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saXN0L2FkZC10cnVzdGVkLWNlcnRpZmljYXRlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2ZhY3Rvcmllcy90cnVzdGVkLWNlcnRpZmljYXRlcy1uYXZpZ2F0aW9uLmZhY3RvcnknO1xuIl19