@c8y/ngx-components 1021.38.1 → 1021.49.1

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 (524) hide show
  1. package/api/services.d.ts +1 -1
  2. package/api/services.d.ts.map +1 -1
  3. package/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.d.ts.map +1 -1
  4. package/connectivity/abstract-connectivity-tab.factory.d.ts +1 -1
  5. package/context-dashboard/add-dashboard.component.d.ts.map +1 -1
  6. package/context-dashboard/context-dashboard.model.d.ts +4 -2
  7. package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
  8. package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
  9. package/context-dashboard/dashboard-manager/dashboard-manager.model.d.ts +1 -0
  10. package/context-dashboard/dashboard-manager/dashboard-manager.model.d.ts.map +1 -1
  11. package/context-dashboard/dashboard-manager/dashboard-manager.service.d.ts +0 -1
  12. package/context-dashboard/dashboard-manager/dashboard-manager.service.d.ts.map +1 -1
  13. package/context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.d.ts.map +1 -1
  14. package/context-dashboard/new-dashboard.guard.d.ts +1 -1
  15. package/context-dashboard/new-dashboard.guard.d.ts.map +1 -1
  16. package/core/action/action.component.d.ts +2 -1
  17. package/core/action/action.component.d.ts.map +1 -1
  18. package/core/action/action.model.d.ts +3 -2
  19. package/core/action/action.model.d.ts.map +1 -1
  20. package/core/breadcrumb/breadcrumb-item.component.d.ts +2 -1
  21. package/core/breadcrumb/breadcrumb-item.component.d.ts.map +1 -1
  22. package/core/breadcrumb/breadcrumb.model.d.ts +2 -1
  23. package/core/breadcrumb/breadcrumb.model.d.ts.map +1 -1
  24. package/core/common/ApplicationOptions.d.ts +1 -0
  25. package/core/common/ApplicationOptions.d.ts.map +1 -1
  26. package/core/common/empty-state/empty-state.component.d.ts +2 -1
  27. package/core/common/empty-state/empty-state.component.d.ts.map +1 -1
  28. package/core/common/get-group-icon.pipe.d.ts +2 -1
  29. package/core/common/get-group-icon.pipe.d.ts.map +1 -1
  30. package/core/common/group.service.d.ts +22 -7
  31. package/core/common/group.service.d.ts.map +1 -1
  32. package/core/common/icon.directive.d.ts +5 -5
  33. package/core/common/icon.directive.d.ts.map +1 -1
  34. package/core/common/service-registry.model.d.ts +2 -1
  35. package/core/common/service-registry.model.d.ts.map +1 -1
  36. package/core/data-grid/data-grid.model.d.ts +2 -1
  37. package/core/data-grid/data-grid.model.d.ts.map +1 -1
  38. package/core/docs/docs.models.d.ts +2 -1
  39. package/core/docs/docs.models.d.ts.map +1 -1
  40. package/core/docs/help-and-support-outlet/help-and-support-outlet.component.d.ts +5 -1
  41. package/core/docs/help-and-support-outlet/help-and-support-outlet.component.d.ts.map +1 -1
  42. package/core/docs/legal-notices-outlet/legal-notices-outlet.component.d.ts +5 -1
  43. package/core/docs/legal-notices-outlet/legal-notices-outlet.component.d.ts.map +1 -1
  44. package/core/docs/support-outlet/support-outlet.component.d.ts +5 -1
  45. package/core/docs/support-outlet/support-outlet.component.d.ts.map +1 -1
  46. package/core/forms/filter-input.component.d.ts +8 -3
  47. package/core/forms/filter-input.component.d.ts.map +1 -1
  48. package/core/list-group/list-item-action.component.d.ts +2 -1
  49. package/core/list-group/list-item-action.component.d.ts.map +1 -1
  50. package/core/list-group/list-item-icon.component.d.ts +2 -1
  51. package/core/list-group/list-item-icon.component.d.ts.map +1 -1
  52. package/core/login/login.service.d.ts.map +1 -1
  53. package/core/navigator/navigator-icon.component.d.ts +1 -1
  54. package/core/navigator/navigator-icon.component.d.ts.map +1 -1
  55. package/core/navigator/navigator-node-data.d.ts +2 -1
  56. package/core/navigator/navigator-node-data.d.ts.map +1 -1
  57. package/core/navigator/navigator-node.component.d.ts.map +1 -1
  58. package/core/navigator/navigator-node.d.ts +2 -1
  59. package/core/navigator/navigator-node.d.ts.map +1 -1
  60. package/core/plugins/plugins.model.d.ts +7 -2
  61. package/core/plugins/plugins.model.d.ts.map +1 -1
  62. package/core/plugins/plugins.service.d.ts.map +1 -1
  63. package/core/properties-list/properties-list.component.d.ts +2 -1
  64. package/core/properties-list/properties-list.component.d.ts.map +1 -1
  65. package/core/provider-configuration/model/dynamic-provider-config.model.d.ts +2 -2
  66. package/core/provider-configuration/model/dynamic-provider-config.model.d.ts.map +1 -1
  67. package/core/router/context-route.service.d.ts.map +1 -1
  68. package/core/router/router.model.d.ts +1 -1
  69. package/core/router/router.model.d.ts.map +1 -1
  70. package/core/router/scoped-context-route.service.d.ts.map +1 -1
  71. package/core/search/search.model.d.ts +2 -1
  72. package/core/search/search.model.d.ts.map +1 -1
  73. package/core/select/select-keyboard.service.d.ts +4 -0
  74. package/core/select/select-keyboard.service.d.ts.map +1 -1
  75. package/core/select/select.component.d.ts +14 -3
  76. package/core/select/select.component.d.ts.map +1 -1
  77. package/core/select-modal/select-modal.component.d.ts +2 -1
  78. package/core/select-modal/select-modal.component.d.ts.map +1 -1
  79. package/core/shared/core.model.d.ts +5 -1
  80. package/core/shared/core.model.d.ts.map +1 -1
  81. package/core/tabs/conditional-tabs-outlet.component.d.ts.map +1 -1
  82. package/core/tabs/tab.component.d.ts +3 -2
  83. package/core/tabs/tab.component.d.ts.map +1 -1
  84. package/core/tabs/tab.model.d.ts +10 -5
  85. package/core/tabs/tab.model.d.ts.map +1 -1
  86. package/core/tabs/tabs-outlet.component.d.ts +7 -4
  87. package/core/tabs/tabs-outlet.component.d.ts.map +1 -1
  88. package/core/user/user-menu-item.component.d.ts +2 -1
  89. package/core/user/user-menu-item.component.d.ts.map +1 -1
  90. package/core/user/user.model.d.ts +2 -1
  91. package/core/user/user.model.d.ts.map +1 -1
  92. package/core/wizard/wizard.model.d.ts +4 -3
  93. package/core/wizard/wizard.model.d.ts.map +1 -1
  94. package/data-grid-columns/asset-type/asset-type.cell-renderer.component.d.ts.map +1 -1
  95. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +15 -46
  96. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
  97. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.d.ts +3 -0
  98. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.d.ts.map +1 -1
  99. package/datapoint-selector/datapoint-selection.model.d.ts +6 -7
  100. package/datapoint-selector/datapoint-selection.model.d.ts.map +1 -1
  101. package/datapoints-export-selector/datapoints-export-selector.model.d.ts +2 -1
  102. package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -1
  103. package/device-grid/columns/icon.cell-renderer.component.d.ts +14 -0
  104. package/device-grid/columns/icon.cell-renderer.component.d.ts.map +1 -0
  105. package/device-grid/columns/index.d.ts +1 -0
  106. package/device-grid/columns/index.d.ts.map +1 -1
  107. package/device-grid/device-grid.component.d.ts.map +1 -1
  108. package/device-grid/device-grid.service.d.ts +0 -2
  109. package/device-grid/device-grid.service.d.ts.map +1 -1
  110. package/device-provisioned-certificates/c8y-ngx-components-device-provisioned-certificates.d.ts.map +1 -0
  111. package/device-provisioned-certificates/device-provisioned-certificates.guard.d.ts +11 -0
  112. package/device-provisioned-certificates/device-provisioned-certificates.guard.d.ts.map +1 -0
  113. package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts +13 -0
  114. package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts.map +1 -0
  115. package/device-provisioned-certificates/device-provisioned-certificates.service.d.ts +13 -0
  116. package/device-provisioned-certificates/device-provisioned-certificates.service.d.ts.map +1 -0
  117. package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts +57 -0
  118. package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts.map +1 -0
  119. package/device-provisioned-certificates/index.d.ts +2 -0
  120. package/device-provisioned-certificates/index.d.ts.map +1 -0
  121. package/ecosystem/application-plugins/application-plugins.component.d.ts +4 -0
  122. package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
  123. package/ecosystem/application-plugins/application-plugins.module.d.ts +2 -2
  124. package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
  125. package/ecosystem/application-plugins/index.d.ts +1 -0
  126. package/ecosystem/application-plugins/index.d.ts.map +1 -1
  127. package/ecosystem/application-plugins/install-plugin.component.d.ts +9 -11
  128. package/ecosystem/application-plugins/install-plugin.component.d.ts.map +1 -1
  129. package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts +12 -0
  130. package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts.map +1 -0
  131. package/ecosystem/application-plugins/plugin-list-item.component.d.ts +8 -3
  132. package/ecosystem/application-plugins/plugin-list-item.component.d.ts.map +1 -1
  133. package/ecosystem/application-plugins/plugin-list.component.d.ts.map +1 -1
  134. package/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.d.ts.map +1 -1
  135. package/ecosystem/applications/application-list/application-list.component.d.ts +2 -2
  136. package/ecosystem/applications/application-list/application-list.component.d.ts.map +1 -1
  137. package/ecosystem/applications/install-from-package/install-from-package.component.d.ts.map +1 -1
  138. package/ecosystem/archived-confirm/archived-confirm-modal.component.d.ts +11 -0
  139. package/ecosystem/archived-confirm/archived-confirm-modal.component.d.ts.map +1 -0
  140. package/ecosystem/archived-confirm/archived-confirm.module.d.ts +10 -0
  141. package/ecosystem/archived-confirm/archived-confirm.module.d.ts.map +1 -0
  142. package/ecosystem/archived-confirm/c8y-ngx-components-ecosystem-archived-confirm.d.ts.map +1 -0
  143. package/ecosystem/archived-confirm/index.d.ts +3 -0
  144. package/ecosystem/archived-confirm/index.d.ts.map +1 -0
  145. package/ecosystem/ecosystem.module.d.ts +2 -1
  146. package/ecosystem/ecosystem.module.d.ts.map +1 -1
  147. package/ecosystem/features/feature-list.component.d.ts +2 -2
  148. package/ecosystem/features/feature-list.component.d.ts.map +1 -1
  149. package/ecosystem/microservices/microservice-list.component.d.ts +2 -2
  150. package/ecosystem/microservices/microservice-list.component.d.ts.map +1 -1
  151. package/ecosystem/packages/deploy-application/deploy-application.component.d.ts.map +1 -1
  152. package/ecosystem/packages/package-details/package-details.component.d.ts +7 -2
  153. package/ecosystem/packages/package-details/package-details.component.d.ts.map +1 -1
  154. package/ecosystem/packages/package-list/packages-list.component.d.ts +2 -2
  155. package/ecosystem/packages/package-list/packages-list.component.d.ts.map +1 -1
  156. package/ecosystem/shared/add-application.component.d.ts +2 -1
  157. package/ecosystem/shared/add-application.component.d.ts.map +1 -1
  158. package/ecosystem/shared/application-card.component.d.ts +4 -0
  159. package/ecosystem/shared/application-card.component.d.ts.map +1 -1
  160. package/ecosystem/shared/archived-filter/archived-filter.component.d.ts +12 -0
  161. package/ecosystem/shared/archived-filter/archived-filter.component.d.ts.map +1 -0
  162. package/ecosystem/shared/ecosystem.constants.d.ts +4 -0
  163. package/ecosystem/shared/ecosystem.constants.d.ts.map +1 -1
  164. package/ecosystem/shared/ecosystem.model.d.ts +5 -1
  165. package/ecosystem/shared/ecosystem.model.d.ts.map +1 -1
  166. package/ecosystem/shared/ecosystem.service.d.ts +7 -0
  167. package/ecosystem/shared/ecosystem.service.d.ts.map +1 -1
  168. package/ecosystem/shared/index.d.ts +1 -0
  169. package/ecosystem/shared/index.d.ts.map +1 -1
  170. package/ecosystem/shared/list-filters/list-filters.component.d.ts +14 -4
  171. package/ecosystem/shared/list-filters/list-filters.component.d.ts.map +1 -1
  172. package/ecosystem/shared/list-filters/list-filters.model.d.ts +8 -2
  173. package/ecosystem/shared/list-filters/list-filters.model.d.ts.map +1 -1
  174. package/ecosystem/shared/shared-ecosystem.module.d.ts +9 -8
  175. package/ecosystem/shared/shared-ecosystem.module.d.ts.map +1 -1
  176. package/ecosystem/shared/translate-package-label.pipe.d.ts +1 -1
  177. package/ecosystem/shared/translate-package-label.pipe.d.ts.map +1 -1
  178. package/esm2022/alarms/alarm-info.component.mjs +1 -1
  179. package/esm2022/api/services.mjs +2 -2
  180. package/esm2022/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.mjs +10 -5
  181. package/esm2022/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.mjs +4 -4
  182. package/esm2022/context-dashboard/add-dashboard.component.mjs +4 -2
  183. package/esm2022/context-dashboard/context-dashboard.model.mjs +3 -2
  184. package/esm2022/context-dashboard/context-dashboard.service.mjs +2 -2
  185. package/esm2022/context-dashboard/dashboard-detail.component.mjs +5 -3
  186. package/esm2022/context-dashboard/dashboard-manager/dashboard-manager.model.mjs +1 -1
  187. package/esm2022/context-dashboard/dashboard-manager/dashboard-manager.service.mjs +5 -15
  188. package/esm2022/context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.mjs +2 -2
  189. package/esm2022/context-dashboard/new-dashboard.guard.mjs +1 -1
  190. package/esm2022/core/action/action.component.mjs +1 -1
  191. package/esm2022/core/action/action.model.mjs +1 -1
  192. package/esm2022/core/bootstrap/bootstrap.component.mjs +1 -1
  193. package/esm2022/core/breadcrumb/breadcrumb-item.component.mjs +1 -1
  194. package/esm2022/core/breadcrumb/breadcrumb.model.mjs +1 -1
  195. package/esm2022/core/common/ApplicationOptions.mjs +1 -1
  196. package/esm2022/core/common/empty-state/empty-state.component.mjs +1 -1
  197. package/esm2022/core/common/get-group-icon.pipe.mjs +1 -1
  198. package/esm2022/core/common/group.service.mjs +2 -2
  199. package/esm2022/core/common/icon.directive.mjs +1 -1
  200. package/esm2022/core/common/service-registry.model.mjs +1 -1
  201. package/esm2022/core/data-grid/data-grid.model.mjs +1 -1
  202. package/esm2022/core/docs/docs.models.mjs +1 -1
  203. package/esm2022/core/docs/support-outlet/support-outlet.component.mjs +3 -3
  204. package/esm2022/core/forms/filter-input.component.mjs +22 -7
  205. package/esm2022/core/list-group/list-item-action.component.mjs +1 -1
  206. package/esm2022/core/list-group/list-item-icon.component.mjs +1 -1
  207. package/esm2022/core/login/credentials.component.mjs +2 -2
  208. package/esm2022/core/login/login.service.mjs +18 -7
  209. package/esm2022/core/navigator/navigator-node-data.mjs +1 -1
  210. package/esm2022/core/navigator/navigator-node.component.mjs +11 -2
  211. package/esm2022/core/navigator/navigator-node.mjs +1 -1
  212. package/esm2022/core/plugins/plugins.model.mjs +5 -1
  213. package/esm2022/core/plugins/plugins.service.mjs +6 -2
  214. package/esm2022/core/properties-list/properties-list.component.mjs +1 -1
  215. package/esm2022/core/provider-configuration/model/dynamic-provider-config.model.mjs +1 -1
  216. package/esm2022/core/router/context-route.service.mjs +4 -2
  217. package/esm2022/core/router/router.model.mjs +1 -1
  218. package/esm2022/core/router/scoped-context-route.service.mjs +4 -2
  219. package/esm2022/core/search/search.model.mjs +1 -1
  220. package/esm2022/core/select/select-keyboard.service.mjs +7 -3
  221. package/esm2022/core/select/select.component.mjs +36 -8
  222. package/esm2022/core/select-modal/select-modal.component.mjs +2 -2
  223. package/esm2022/core/shared/core.model.mjs +6 -2
  224. package/esm2022/core/tabs/conditional-tabs-outlet.component.mjs +4 -2
  225. package/esm2022/core/tabs/tab.component.mjs +1 -1
  226. package/esm2022/core/tabs/tab.model.mjs +1 -1
  227. package/esm2022/core/tabs/tabs-outlet.component.mjs +41 -12
  228. package/esm2022/core/user/user-menu-item.component.mjs +1 -1
  229. package/esm2022/core/user/user.model.mjs +1 -1
  230. package/esm2022/core/wizard/wizard.model.mjs +1 -1
  231. package/esm2022/data-grid-columns/asset-type/asset-type.cell-renderer.component.mjs +1 -1
  232. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +47 -22
  233. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.mjs +1 -1
  234. package/esm2022/datapoint-selector/datapoint-selection.model.mjs +1 -1
  235. package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
  236. package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +1 -1
  237. package/esm2022/device-grid/columns/icon.cell-renderer.component.mjs +42 -0
  238. package/esm2022/device-grid/columns/index.mjs +2 -1
  239. package/esm2022/device-grid/device-grid.component.mjs +3 -3
  240. package/esm2022/device-grid/device-grid.service.mjs +7 -25
  241. package/esm2022/device-provisioned-certificates/c8y-ngx-components-device-provisioned-certificates.mjs +5 -0
  242. package/esm2022/device-provisioned-certificates/device-provisioned-certificates.guard.mjs +28 -0
  243. package/esm2022/device-provisioned-certificates/device-provisioned-certificates.module.mjs +51 -0
  244. package/esm2022/device-provisioned-certificates/device-provisioned-certificates.service.mjs +31 -0
  245. package/esm2022/device-provisioned-certificates/device-tab-provisioned-certificates.component.mjs +76 -0
  246. package/esm2022/device-provisioned-certificates/index.mjs +2 -0
  247. package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +41 -39
  248. package/esm2022/ecosystem/application-plugins/application-plugins.module.mjs +8 -6
  249. package/esm2022/ecosystem/application-plugins/apps-to-update-remotes-select.component.mjs +1 -1
  250. package/esm2022/ecosystem/application-plugins/index.mjs +2 -1
  251. package/esm2022/ecosystem/application-plugins/install-plugin.component.mjs +18 -21
  252. package/esm2022/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.mjs +26 -0
  253. package/esm2022/ecosystem/application-plugins/plugin-list-item.component.mjs +14 -6
  254. package/esm2022/ecosystem/application-plugins/plugin-list.component.mjs +14 -12
  255. package/esm2022/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.mjs +7 -1
  256. package/esm2022/ecosystem/applications/application-list/application-list.component.mjs +1 -1
  257. package/esm2022/ecosystem/applications/install-from-package/install-from-package.component.mjs +6 -1
  258. package/esm2022/ecosystem/archived-confirm/archived-confirm-modal.component.mjs +22 -0
  259. package/esm2022/ecosystem/archived-confirm/archived-confirm.module.mjs +32 -0
  260. package/esm2022/ecosystem/archived-confirm/c8y-ngx-components-ecosystem-archived-confirm.mjs +5 -0
  261. package/esm2022/ecosystem/archived-confirm/index.mjs +3 -0
  262. package/esm2022/ecosystem/ecosystem.module.mjs +20 -16
  263. package/esm2022/ecosystem/features/feature-list.component.mjs +1 -1
  264. package/esm2022/ecosystem/microservices/microservice-list.component.mjs +1 -1
  265. package/esm2022/ecosystem/packages/deploy-application/deploy-application.component.mjs +6 -1
  266. package/esm2022/ecosystem/packages/package-details/package-details.component.mjs +13 -8
  267. package/esm2022/ecosystem/packages/package-list/packages-list.component.mjs +4 -4
  268. package/esm2022/ecosystem/shared/add-application.component.mjs +1 -1
  269. package/esm2022/ecosystem/shared/application-card.component.mjs +3 -3
  270. package/esm2022/ecosystem/shared/archived-filter/archived-filter.component.mjs +27 -0
  271. package/esm2022/ecosystem/shared/ecosystem.constants.mjs +5 -1
  272. package/esm2022/ecosystem/shared/ecosystem.model.mjs +7 -3
  273. package/esm2022/ecosystem/shared/ecosystem.service.mjs +26 -1
  274. package/esm2022/ecosystem/shared/index.mjs +2 -1
  275. package/esm2022/ecosystem/shared/list-filters/list-filters.component.mjs +75 -13
  276. package/esm2022/ecosystem/shared/list-filters/list-filters.model.mjs +1 -1
  277. package/esm2022/ecosystem/shared/shared-ecosystem.module.mjs +10 -5
  278. package/esm2022/ecosystem/shared/translate-package-label.pipe.mjs +3 -3
  279. package/esm2022/files-repository/files-repository.component.mjs +2 -2
  280. package/esm2022/files-repository/files-repository.service.mjs +5 -16
  281. package/esm2022/icon-selector/icon-selector.component.mjs +1 -1
  282. package/esm2022/icon-selector/icons/index.mjs +1 -1
  283. package/esm2022/operations/shared/status-option.model.mjs +1 -1
  284. package/esm2022/protocol-lwm2m/components/configuration/lwm2m-configuration.component.mjs +2 -2
  285. package/esm2022/protocol-opcua/opcua-auto-apply-settings.component.mjs +1 -1
  286. package/esm2022/register-device/bulk/bulk-device-registration-modal.component.mjs +17 -9
  287. package/esm2022/register-device/general/general-device-registration-button.component.mjs +3 -3
  288. package/esm2022/register-device/general/general-device-registration.component.mjs +109 -33
  289. package/esm2022/remote-access/configurations/c8y-ngx-components-remote-access-configurations.mjs +5 -0
  290. package/esm2022/remote-access/configurations/index.mjs +16 -0
  291. package/esm2022/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.mjs +218 -0
  292. package/esm2022/remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.mjs +60 -0
  293. package/esm2022/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.mjs +36 -0
  294. package/esm2022/remote-access/data/c8y-ngx-components-remote-access-data.mjs +5 -0
  295. package/esm2022/remote-access/data/index.mjs +3 -0
  296. package/esm2022/remote-access/data/remote-access-protocol-provider.mjs +2 -0
  297. package/esm2022/remote-access/data/remote-access.service.mjs +200 -0
  298. package/esm2022/remote-access/passthrough/c8y-ngx-components-remote-access-passthrough.mjs +5 -0
  299. package/esm2022/remote-access/passthrough/index.mjs +36 -0
  300. package/esm2022/remote-access/shared/c8y-ngx-components-remote-access-shared.mjs +5 -0
  301. package/esm2022/remote-access/shared/index.mjs +3 -0
  302. package/esm2022/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.mjs +49 -0
  303. package/esm2022/remote-access/shared/ssh-key-input/ssh-key-input.component.mjs +87 -0
  304. package/esm2022/remote-access/ssh/c8y-ngx-components-remote-access-ssh.mjs +5 -0
  305. package/esm2022/remote-access/ssh/index.mjs +73 -0
  306. package/esm2022/remote-access/ssh/remote-access-ssh-endpoint-modal/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +5 -0
  307. package/esm2022/remote-access/ssh/remote-access-ssh-endpoint-modal/index.mjs +2 -0
  308. package/esm2022/remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.mjs +104 -0
  309. package/esm2022/remote-access/telnet/c8y-ngx-components-remote-access-telnet.mjs +5 -0
  310. package/esm2022/remote-access/telnet/index.mjs +43 -0
  311. package/esm2022/remote-access/terminal-viewer/c8y-ngx-components-remote-access-terminal-viewer.mjs +5 -0
  312. package/esm2022/remote-access/terminal-viewer/index.mjs +2 -0
  313. package/esm2022/remote-access/terminal-viewer/shell-adapter.mjs +36 -0
  314. package/esm2022/remote-access/terminal-viewer/telnet-negotiator.mjs +96 -0
  315. package/esm2022/remote-access/terminal-viewer/terminal-viewer.component.mjs +101 -0
  316. package/esm2022/remote-access/vnc/c8y-ngx-components-remote-access-vnc.mjs +5 -0
  317. package/esm2022/remote-access/vnc/index.mjs +73 -0
  318. package/esm2022/remote-access/vnc/remote-access-vnc-endpoint-modal/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +5 -0
  319. package/esm2022/remote-access/vnc/remote-access-vnc-endpoint-modal/index.mjs +2 -0
  320. package/esm2022/remote-access/vnc/remote-access-vnc-endpoint-modal/remote-access-vnc-endpoint-modal.component.mjs +59 -0
  321. package/esm2022/remote-access/vnc/vnc-viewer/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +5 -0
  322. package/esm2022/remote-access/vnc/vnc-viewer/index.mjs +2 -0
  323. package/esm2022/remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.mjs +57 -0
  324. package/esm2022/remote-access/vnc/vnc-viewer/vnc-viewer.component.mjs +158 -0
  325. package/esm2022/replace-device/replace-device-wizard/replace-device-wizard.model.mjs +1 -1
  326. package/esm2022/report-dashboard/report-dashboard-list.component.mjs +4 -3
  327. package/esm2022/repository/configuration/device-tab/device-configuration-list.component.mjs +1 -1
  328. package/esm2022/repository/shared/repository.model.mjs +1 -1
  329. package/esm2022/repository/shared/repository.service.mjs +3 -3
  330. package/esm2022/services/status-options/status-options.model.mjs +1 -1
  331. package/esm2022/sub-assets/group-info.component.mjs +1 -1
  332. package/esm2022/translation-editor/data/translation-store.service.mjs +4 -3
  333. package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +35 -9
  334. package/esm2022/upgrade/bridge.service.mjs +16 -2
  335. package/esm2022/widgets/implementations/alarms/severity-icon.pipe.mjs +1 -1
  336. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +3 -2
  337. package/esm2022/widgets/implementations/kpi/kpi-widget.model.mjs +1 -1
  338. package/fesm2022/c8y-ngx-components-alarms.mjs +1 -1
  339. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  340. package/fesm2022/c8y-ngx-components-api.mjs +3 -2
  341. package/fesm2022/c8y-ngx-components-api.mjs.map +1 -1
  342. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +12 -7
  343. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  344. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +15 -20
  345. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  346. package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs.map +1 -1
  347. package/fesm2022/c8y-ngx-components-data-grid-columns.mjs.map +1 -1
  348. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +48 -23
  349. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  350. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  351. package/fesm2022/c8y-ngx-components-device-grid.mjs +48 -28
  352. package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
  353. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +174 -0
  354. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -0
  355. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +125 -105
  356. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  357. package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs +57 -0
  358. package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs.map +1 -0
  359. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +147 -31
  360. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  361. package/fesm2022/c8y-ngx-components-ecosystem.mjs +1452 -1414
  362. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  363. package/fesm2022/c8y-ngx-components-files-repository.mjs +5 -16
  364. package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
  365. package/fesm2022/c8y-ngx-components-icon-selector-icons.mjs.map +1 -1
  366. package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
  367. package/fesm2022/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs +1 -1
  368. package/fesm2022/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs.map +1 -1
  369. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +1 -1
  370. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  371. package/fesm2022/c8y-ngx-components-register-device.mjs +269 -188
  372. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  373. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +314 -0
  374. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -0
  375. package/fesm2022/c8y-ngx-components-remote-access-data.mjs +206 -0
  376. package/fesm2022/c8y-ngx-components-remote-access-data.mjs.map +1 -0
  377. package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +42 -0
  378. package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs.map +1 -0
  379. package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +138 -0
  380. package/fesm2022/c8y-ngx-components-remote-access-shared.mjs.map +1 -0
  381. package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +111 -0
  382. package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs.map +1 -0
  383. package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +79 -0
  384. package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs.map +1 -0
  385. package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +50 -0
  386. package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs.map +1 -0
  387. package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +235 -0
  388. package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs.map +1 -0
  389. package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +66 -0
  390. package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs.map +1 -0
  391. package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +211 -0
  392. package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs.map +1 -0
  393. package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +79 -0
  394. package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs.map +1 -0
  395. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
  396. package/fesm2022/c8y-ngx-components-report-dashboard.mjs +3 -2
  397. package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
  398. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +1 -1
  399. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  400. package/fesm2022/c8y-ngx-components-repository-shared.mjs +2 -2
  401. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  402. package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
  403. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  404. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +3 -2
  405. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -1
  406. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +43 -17
  407. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  408. package/fesm2022/c8y-ngx-components-upgrade.mjs +16 -2
  409. package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
  410. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  411. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +2 -1
  412. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  413. package/fesm2022/c8y-ngx-components.mjs +151 -38
  414. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  415. package/files-repository/files-repository.component.d.ts.map +1 -1
  416. package/files-repository/files-repository.service.d.ts +0 -2
  417. package/files-repository/files-repository.service.d.ts.map +1 -1
  418. package/icon-selector/icon-selector.component.d.ts +3 -2
  419. package/icon-selector/icon-selector.component.d.ts.map +1 -1
  420. package/icon-selector/icons/index.d.ts +1 -0
  421. package/icon-selector/icons/index.d.ts.map +1 -1
  422. package/locales/de.po +157 -5
  423. package/locales/es.po +157 -5
  424. package/locales/fr.po +157 -5
  425. package/locales/ja_JP.po +156 -5
  426. package/locales/ko.po +156 -5
  427. package/locales/locales.pot +156 -4
  428. package/locales/nl.po +157 -5
  429. package/locales/pl.po +157 -5
  430. package/locales/pt_BR.po +157 -5
  431. package/locales/zh_CN.po +156 -5
  432. package/locales/zh_TW.po +156 -5
  433. package/operations/shared/status-option.model.d.ts +2 -1
  434. package/operations/shared/status-option.model.d.ts.map +1 -1
  435. package/package.json +1 -1
  436. package/register-device/bulk/bulk-device-registration-modal.component.d.ts +6 -2
  437. package/register-device/bulk/bulk-device-registration-modal.component.d.ts.map +1 -1
  438. package/register-device/general/general-device-registration-button.component.d.ts +1 -1
  439. package/register-device/general/general-device-registration-button.component.d.ts.map +1 -1
  440. package/register-device/general/general-device-registration.component.d.ts +21 -7
  441. package/register-device/general/general-device-registration.component.d.ts.map +1 -1
  442. package/remote-access/configurations/c8y-ngx-components-remote-access-configurations.d.ts.map +1 -0
  443. package/remote-access/configurations/index.d.ts +3 -0
  444. package/remote-access/configurations/index.d.ts.map +1 -0
  445. package/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.d.ts +34 -0
  446. package/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.d.ts.map +1 -0
  447. package/remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.d.ts +17 -0
  448. package/remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.d.ts.map +1 -0
  449. package/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.d.ts +18 -0
  450. package/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.d.ts.map +1 -0
  451. package/remote-access/data/c8y-ngx-components-remote-access-data.d.ts.map +1 -0
  452. package/remote-access/data/index.d.ts +3 -0
  453. package/remote-access/data/index.d.ts.map +1 -0
  454. package/remote-access/data/remote-access-protocol-provider.d.ts +21 -0
  455. package/remote-access/data/remote-access-protocol-provider.d.ts.map +1 -0
  456. package/remote-access/data/remote-access.service.d.ts +94 -0
  457. package/remote-access/data/remote-access.service.d.ts.map +1 -0
  458. package/remote-access/passthrough/c8y-ngx-components-remote-access-passthrough.d.ts.map +1 -0
  459. package/remote-access/passthrough/index.d.ts +17 -0
  460. package/remote-access/passthrough/index.d.ts.map +1 -0
  461. package/remote-access/shared/c8y-ngx-components-remote-access-shared.d.ts.map +1 -0
  462. package/remote-access/shared/index.d.ts +3 -0
  463. package/remote-access/shared/index.d.ts.map +1 -0
  464. package/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.d.ts +37 -0
  465. package/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.d.ts.map +1 -0
  466. package/remote-access/shared/ssh-key-input/ssh-key-input.component.d.ts +38 -0
  467. package/remote-access/shared/ssh-key-input/ssh-key-input.component.d.ts.map +1 -0
  468. package/remote-access/ssh/c8y-ngx-components-remote-access-ssh.d.ts.map +1 -0
  469. package/remote-access/ssh/index.d.ts +22 -0
  470. package/remote-access/ssh/index.d.ts.map +1 -0
  471. package/remote-access/ssh/remote-access-ssh-endpoint-modal/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.d.ts.map +1 -0
  472. package/remote-access/ssh/remote-access-ssh-endpoint-modal/index.d.ts +2 -0
  473. package/remote-access/ssh/remote-access-ssh-endpoint-modal/index.d.ts.map +1 -0
  474. package/remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.d.ts +64 -0
  475. package/remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.d.ts.map +1 -0
  476. package/remote-access/telnet/c8y-ngx-components-remote-access-telnet.d.ts.map +1 -0
  477. package/remote-access/telnet/index.d.ts +17 -0
  478. package/remote-access/telnet/index.d.ts.map +1 -0
  479. package/remote-access/terminal-viewer/c8y-ngx-components-remote-access-terminal-viewer.d.ts.map +1 -0
  480. package/remote-access/terminal-viewer/index.d.ts +2 -0
  481. package/remote-access/terminal-viewer/index.d.ts.map +1 -0
  482. package/remote-access/terminal-viewer/shell-adapter.d.ts +14 -0
  483. package/remote-access/terminal-viewer/shell-adapter.d.ts.map +1 -0
  484. package/remote-access/terminal-viewer/telnet-negotiator.d.ts +13 -0
  485. package/remote-access/terminal-viewer/telnet-negotiator.d.ts.map +1 -0
  486. package/remote-access/terminal-viewer/terminal-viewer.component.d.ts +25 -0
  487. package/remote-access/terminal-viewer/terminal-viewer.component.d.ts.map +1 -0
  488. package/remote-access/vnc/c8y-ngx-components-remote-access-vnc.d.ts.map +1 -0
  489. package/remote-access/vnc/index.d.ts +22 -0
  490. package/remote-access/vnc/index.d.ts.map +1 -0
  491. package/remote-access/vnc/remote-access-vnc-endpoint-modal/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.d.ts.map +1 -0
  492. package/remote-access/vnc/remote-access-vnc-endpoint-modal/index.d.ts +2 -0
  493. package/remote-access/vnc/remote-access-vnc-endpoint-modal/index.d.ts.map +1 -0
  494. package/remote-access/vnc/remote-access-vnc-endpoint-modal/remote-access-vnc-endpoint-modal.component.d.ts +46 -0
  495. package/remote-access/vnc/remote-access-vnc-endpoint-modal/remote-access-vnc-endpoint-modal.component.d.ts.map +1 -0
  496. package/remote-access/vnc/vnc-viewer/c8y-ngx-components-remote-access-vnc-vnc-viewer.d.ts.map +1 -0
  497. package/remote-access/vnc/vnc-viewer/index.d.ts +2 -0
  498. package/remote-access/vnc/vnc-viewer/index.d.ts.map +1 -0
  499. package/remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.d.ts +32 -0
  500. package/remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.d.ts.map +1 -0
  501. package/remote-access/vnc/vnc-viewer/vnc-viewer.component.d.ts +37 -0
  502. package/remote-access/vnc/vnc-viewer/vnc-viewer.component.d.ts.map +1 -0
  503. package/replace-device/replace-device-wizard/replace-device-wizard.model.d.ts +2 -1
  504. package/replace-device/replace-device-wizard/replace-device-wizard.model.d.ts.map +1 -1
  505. package/report-dashboard/report-dashboard-list.component.d.ts +29 -0
  506. package/report-dashboard/report-dashboard-list.component.d.ts.map +1 -1
  507. package/repository/shared/repository.model.d.ts +2 -1
  508. package/repository/shared/repository.model.d.ts.map +1 -1
  509. package/services/status-options/status-options.model.d.ts +2 -1
  510. package/services/status-options/status-options.model.d.ts.map +1 -1
  511. package/sub-assets/group-info.component.d.ts +2 -1
  512. package/sub-assets/group-info.component.d.ts.map +1 -1
  513. package/translation-editor/data/translation-store.service.d.ts.map +1 -1
  514. package/trusted-certificates/list/trusted-certificate-list.component.d.ts +7 -2
  515. package/trusted-certificates/list/trusted-certificate-list.component.d.ts.map +1 -1
  516. package/upgrade/bridge.service.d.ts +5 -0
  517. package/upgrade/bridge.service.d.ts.map +1 -1
  518. package/widgets/implementations/alarms/severity-icon.pipe.d.ts.map +1 -1
  519. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -1
  520. package/widgets/implementations/kpi/kpi-widget.model.d.ts +2 -1
  521. package/widgets/implementations/kpi/kpi-widget.model.d.ts.map +1 -1
  522. package/ecosystem/application-plugins/only-latest-plugin-version.pipe.d.ts +0 -10
  523. package/ecosystem/application-plugins/only-latest-plugin-version.pipe.d.ts.map +0 -1
  524. package/esm2022/ecosystem/application-plugins/only-latest-plugin-version.pipe.mjs +0 -20
@@ -8,9 +8,9 @@ export class GeneralDeviceRegistrationButtonComponent {
8
8
  constructor(modalService) {
9
9
  this.modalService = modalService;
10
10
  }
11
- open() {
11
+ async open() {
12
12
  this.modalService.show(GeneralDeviceRegistrationComponent, {
13
- class: 'modal-sm',
13
+ class: 'modal-md',
14
14
  ariaDescribedby: 'modal-body',
15
15
  ariaLabelledBy: 'modal-title',
16
16
  ignoreBackdropClick: true
@@ -23,4 +23,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
23
23
  type: Component,
24
24
  args: [{ selector: 'c8y-general-device-registration-button', template: "<button title=\"{{ 'General' | translate }}\" type=\"button\" (click)=\"open()\">\n <i c8yIcon=\"c8y-device-connect\"></i>\n {{ 'General' | translate }}\n</button>\n" }]
25
25
  }], ctorParameters: () => [{ type: i1.BsModalService }] });
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9yZWdpc3Rlci1kZXZpY2UvZ2VuZXJhbC9nZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24tYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3JlZ2lzdGVyLWRldmljZS9nZW5lcmFsL2dlbmVyYWwtZGV2aWNlLXJlZ2lzdHJhdGlvbi1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7QUFNN0YsTUFBTSxPQUFPLHdDQUF3QztJQUNuRCxZQUFvQixZQUE0QjtRQUE1QixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7SUFBRyxDQUFDO0lBRXBELElBQUk7UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRTtZQUN6RCxLQUFLLEVBQUUsVUFBVTtZQUNqQixlQUFlLEVBQUUsWUFBWTtZQUM3QixjQUFjLEVBQUUsYUFBYTtZQUM3QixtQkFBbUIsRUFBRSxJQUFJO1NBQzFCLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBVlUsd0NBQXdDO2tHQUF4Qyx3Q0FBd0MsOEVDUnJELHlLQUlBOzsyRkRJYSx3Q0FBd0M7a0JBSnBELFNBQVM7K0JBQ0Usd0NBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgR2VuZXJhbERldmljZVJlZ2lzdHJhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1nZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24tYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICdnZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24tYnV0dG9uLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBHZW5lcmFsRGV2aWNlUmVnaXN0cmF0aW9uQnV0dG9uQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlKSB7fVxuXG4gIG9wZW4oKSB7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhHZW5lcmFsRGV2aWNlUmVnaXN0cmF0aW9uQ29tcG9uZW50LCB7XG4gICAgICBjbGFzczogJ21vZGFsLXNtJyxcbiAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxidXR0b24gdGl0bGU9XCJ7eyAnR2VuZXJhbCcgfCB0cmFuc2xhdGUgfX1cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW4oKVwiPlxuICA8aSBjOHlJY29uPVwiYzh5LWRldmljZS1jb25uZWN0XCI+PC9pPlxuICB7eyAnR2VuZXJhbCcgfCB0cmFuc2xhdGUgfX1cbjwvYnV0dG9uPlxuIl19
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9yZWdpc3Rlci1kZXZpY2UvZ2VuZXJhbC9nZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24tYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3JlZ2lzdGVyLWRldmljZS9nZW5lcmFsL2dlbmVyYWwtZGV2aWNlLXJlZ2lzdHJhdGlvbi1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7QUFNN0YsTUFBTSxPQUFPLHdDQUF3QztJQUNuRCxZQUFvQixZQUE0QjtRQUE1QixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7SUFBRyxDQUFDO0lBRXBELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0NBQWtDLEVBQUU7WUFDekQsS0FBSyxFQUFFLFVBQVU7WUFDakIsZUFBZSxFQUFFLFlBQVk7WUFDN0IsY0FBYyxFQUFFLGFBQWE7WUFDN0IsbUJBQW1CLEVBQUUsSUFBSTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDOzhHQVZVLHdDQUF3QztrR0FBeEMsd0NBQXdDLDhFQ1JyRCx5S0FJQTs7MkZESWEsd0NBQXdDO2tCQUpwRCxTQUFTOytCQUNFLHdDQUF3QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEdlbmVyYWxEZXZpY2VSZWdpc3RyYXRpb25Db21wb25lbnQgfSBmcm9tICcuL2dlbmVyYWwtZGV2aWNlLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJhbERldmljZVJlZ2lzdHJhdGlvbkJ1dHRvbkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSkge31cblxuICBhc3luYyBvcGVuKCkge1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coR2VuZXJhbERldmljZVJlZ2lzdHJhdGlvbkNvbXBvbmVudCwge1xuICAgICAgY2xhc3M6ICdtb2RhbC1tZCcsXG4gICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnLFxuICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG4iLCI8YnV0dG9uIHRpdGxlPVwie3sgJ0dlbmVyYWwnIHwgdHJhbnNsYXRlIH19XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvcGVuKClcIj5cbiAgPGkgYzh5SWNvbj1cImM4eS1kZXZpY2UtY29ubmVjdFwiPjwvaT5cbiAge3sgJ0dlbmVyYWwnIHwgdHJhbnNsYXRlIH19XG48L2J1dHRvbj5cbiJdfQ==
@@ -2,21 +2,24 @@ import { __decorate, __metadata } from "tslib";
2
2
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
3
3
  import { TenantUiService, gettext, memoize, GainsightService } from '@c8y/ngx-components';
4
4
  import { FormGroup } from '@angular/forms';
5
- import { from, Observable, Subject, defer } from 'rxjs';
5
+ import { from, Observable, Subject, defer, BehaviorSubject } from 'rxjs';
6
6
  import { filter, shareReplay, switchMap, takeUntil, tap } from 'rxjs/operators';
7
- import { InventoryService, TenantService } from '@c8y/client';
7
+ import { DeviceRegistrationBulkService, FeatureService, InventoryService, TenantService } from '@c8y/client';
8
8
  import { RegisterDeviceService } from '../register-device.service';
9
9
  import { BsModalRef } from 'ngx-bootstrap/modal';
10
+ import { ESTCsvHeaders } from '../bulk/bulk-device-registration-modal.component';
10
11
  import * as i0 from "@angular/core";
11
12
  import * as i1 from "@c8y/ngx-components";
12
13
  import * as i2 from "@c8y/client";
13
14
  import * as i3 from "../register-device.service";
14
15
  import * as i4 from "ngx-bootstrap/modal";
15
- import * as i5 from "@angular/common";
16
- import * as i6 from "@angular/cdk/stepper";
17
- import * as i7 from "@ngx-formly/core";
16
+ import * as i5 from "ngx-bootstrap/popover";
17
+ import * as i6 from "@angular/common";
18
+ import * as i7 from "@angular/forms";
19
+ import * as i8 from "@angular/cdk/stepper";
20
+ import * as i9 from "@ngx-formly/core";
18
21
  export class GeneralDeviceRegistrationComponent {
19
- constructor(tenantUIService, tenantService, registerDeviceService, inventoryService, cd, bsModalRef, gainsightService) {
22
+ constructor(tenantUIService, tenantService, registerDeviceService, inventoryService, cd, bsModalRef, gainsightService, deviceRegistrationService, featureService) {
20
23
  this.tenantUIService = tenantUIService;
21
24
  this.tenantService = tenantService;
22
25
  this.registerDeviceService = registerDeviceService;
@@ -24,18 +27,25 @@ export class GeneralDeviceRegistrationComponent {
24
27
  this.cd = cd;
25
28
  this.bsModalRef = bsModalRef;
26
29
  this.gainsightService = gainsightService;
30
+ this.deviceRegistrationService = deviceRegistrationService;
31
+ this.featureService = featureService;
27
32
  this.MANAGEMENT = 'management';
28
33
  this.FILTER = {
29
34
  withTotalPages: true,
30
35
  pageSize: 25
31
36
  };
37
+ this.useEST$ = new BehaviorSubject(false);
38
+ this.certificateAuthorityFeatureEnabled = this.featureService
39
+ .detail('certificate-authority')
40
+ .then(({ data }) => data.active);
32
41
  this.form = new FormGroup({});
33
42
  this.model = {
34
43
  devicesToCreate: [{}]
35
44
  };
36
45
  this.options = {
37
46
  formState: {
38
- canLoadTenants: true
47
+ canLoadTenants: true,
48
+ useEST: this.useEST$.getValue()
39
49
  }
40
50
  };
41
51
  this.PRODUCT_EXPERIENCE = {
@@ -49,7 +59,7 @@ export class GeneralDeviceRegistrationComponent {
49
59
  {
50
60
  type: 'array',
51
61
  key: 'devicesToCreate',
52
- templateOptions: {
62
+ props: {
53
63
  addText: gettext('Add device'),
54
64
  addTextDataCy: 'add-device'
55
65
  },
@@ -59,7 +69,7 @@ export class GeneralDeviceRegistrationComponent {
59
69
  key: 'id',
60
70
  type: 'string',
61
71
  focus: true,
62
- templateOptions: {
72
+ props: {
63
73
  placeholder: '0123ab32fcd',
64
74
  label: gettext('Device ID'),
65
75
  required: true
@@ -77,14 +87,17 @@ export class GeneralDeviceRegistrationComponent {
77
87
  {
78
88
  key: 'tenant',
79
89
  type: 'typeahead',
80
- hideExpression: (model, formState, field) => {
81
- if (!formState?.canLoadTenants) {
82
- field.formControl.setValue(null);
90
+ expressions: {
91
+ hide: field => {
92
+ const formState = field.options?.formState;
93
+ if (!formState?.canLoadTenants) {
94
+ field.formControl.setValue(null);
95
+ }
96
+ return !formState?.canLoadTenants || false;
83
97
  }
84
- return !formState?.canLoadTenants || false;
85
98
  },
86
99
  defaultValue: { id: this.MANAGEMENT },
87
- templateOptions: {
100
+ props: {
88
101
  label: gettext('Add to tenant'),
89
102
  required: true,
90
103
  c8yForOptions: this.canLoadTenants$().pipe(filter(canLoad => canLoad), switchMap(() => this.getTenants$())),
@@ -102,19 +115,21 @@ export class GeneralDeviceRegistrationComponent {
102
115
  {
103
116
  key: 'group',
104
117
  type: 'typeahead',
105
- expressionProperties: {
106
- 'templateOptions.disabled': (model, formState, field) => {
118
+ expressions: {
119
+ 'props.disabled': (field) => {
120
+ const formState = field.options?.formState;
121
+ const model = field.model;
107
122
  if (formState?.canLoadTenants) {
108
123
  if (model?.tenant?.id !== this.MANAGEMENT) {
109
124
  field.formControl.setValue(null);
110
125
  }
111
126
  return !(model?.tenant?.id === this.MANAGEMENT);
112
127
  }
113
- delete field?.templateOptions?.description;
128
+ delete field?.props?.description;
114
129
  return false;
115
130
  }
116
131
  },
117
- templateOptions: {
132
+ props: {
118
133
  disabled: false,
119
134
  label: gettext('Add to group'),
120
135
  description: gettext('You can add device to specific group for management tenant only.'),
@@ -129,6 +144,24 @@ export class GeneralDeviceRegistrationComponent {
129
144
  this.cd.detectChanges();
130
145
  }))
131
146
  }
147
+ },
148
+ {
149
+ key: 'oneTimePassword',
150
+ type: 'string',
151
+ expressions: {
152
+ hide: field => !field.options?.formState?.useEST
153
+ },
154
+ props: {
155
+ placeholder: 'TruDN3H45L0',
156
+ label: gettext('One-time password'),
157
+ required: true
158
+ },
159
+ hooks: {
160
+ onInit: _field => this.useEST$.pipe(tap(useEST => {
161
+ this.options.formState.useEST = useEST;
162
+ this.cd.detectChanges();
163
+ }))
164
+ }
132
165
  }
133
166
  ]
134
167
  }
@@ -145,6 +178,20 @@ export class GeneralDeviceRegistrationComponent {
145
178
  this.destroy$.next();
146
179
  this.destroy$.complete();
147
180
  }
181
+ registerDevice(eventObject) {
182
+ !this.useEST$.getValue() ? this.create(eventObject) : this.registerByEst(eventObject);
183
+ }
184
+ fixErrors(event, failedRequests) {
185
+ if (failedRequests && failedRequests.length > 0) {
186
+ this.options.resetModel({
187
+ devicesToCreate: [
188
+ ...this.lastCreatedDevices.filter(el => failedRequests.map(data => data.id).includes(el.id))
189
+ ]
190
+ });
191
+ this.cd.detectChanges();
192
+ }
193
+ event?.stepper.previous();
194
+ }
148
195
  create(eventObject) {
149
196
  if (this.model?.devicesToCreate?.length > 0) {
150
197
  this.lastCreatedDevices = [...this.model.devicesToCreate];
@@ -183,16 +230,45 @@ export class GeneralDeviceRegistrationComponent {
183
230
  });
184
231
  }
185
232
  }
186
- fixErrors(event, failedRequests) {
187
- if (failedRequests && failedRequests.length > 0) {
188
- this.options.resetModel({
189
- devicesToCreate: [
190
- ...this.lastCreatedDevices.filter(el => failedRequests.map(data => data.id).includes(el.id))
191
- ]
192
- });
193
- this.cd.detectChanges();
194
- }
195
- event?.stepper.previous();
233
+ registerByEst(eventObject) {
234
+ this.lastCreatedDevices = [...this.model.devicesToCreate];
235
+ this.deviceRegistrationService
236
+ .create(this.convertObjectToCSVFile(this.model.devicesToCreate))
237
+ .then(({ res, data }) => {
238
+ if (res.status < 400) {
239
+ this.failed = data.failedCreationList.map(value => {
240
+ return {
241
+ id: value.deviceId,
242
+ message: value.failureReason
243
+ };
244
+ });
245
+ const failedIds = new Set(this.failed.map(item => item.id));
246
+ this.success = this.model.devicesToCreate.filter(item => !failedIds.has(item.id));
247
+ }
248
+ eventObject.stepper.next();
249
+ })
250
+ .catch(() => {
251
+ eventObject.stepper.next();
252
+ });
253
+ }
254
+ convertObjectToCSVFile(data) {
255
+ const fullCsvHeaders = ESTCsvHeaders;
256
+ const csvHeaders = fullCsvHeaders.join(';') + '\n';
257
+ const dataToSend = data.map(el => {
258
+ return {
259
+ ID: el.id,
260
+ AUTH_TYPE: 'CERTIFICATES',
261
+ ENROLLMENT_OTP: el.oneTimePassword,
262
+ PATH: el.group?.id || '',
263
+ TENANT: el.tenant?.id || ''
264
+ };
265
+ });
266
+ const csvRows = dataToSend
267
+ .map(row => fullCsvHeaders.map(header => row[header] ?? '').join(';'))
268
+ .join('\n');
269
+ const csvContent = csvHeaders + csvRows;
270
+ const blob = new Blob([csvContent], { type: 'text/csv' });
271
+ return new File([blob], `ESTRegistrationFile.csv`, { type: 'text/csv' });
196
272
  }
197
273
  canLoadTenants$() {
198
274
  return defer(() => from(this.tenantUIService.isManagementTenant())).pipe(shareReplay(1));
@@ -203,8 +279,8 @@ export class GeneralDeviceRegistrationComponent {
203
279
  getGroups$() {
204
280
  return defer(() => from(this.inventoryService.listQuery({ __filter: { __has: 'c8y_IsDeviceGroup' }, __orderby: [{ name: 1 }] }, { ...this.FILTER }))).pipe(shareReplay(1));
205
281
  }
206
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: GeneralDeviceRegistrationComponent, deps: [{ token: i1.TenantUiService }, { token: i2.TenantService }, { token: i3.RegisterDeviceService }, { token: i2.InventoryService }, { token: i0.ChangeDetectorRef }, { token: i4.BsModalRef }, { token: i1.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
207
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: GeneralDeviceRegistrationComponent, selector: "c8y-general-device-registration", ngImport: i0, template: "<c8y-modal\n [title]=\"'Register devices' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n <c8y-stepper [hideStepProgress]=\"true\" linear c8y-modal-body>\n <cdk-step [stepControl]=\"form\">\n <div class=\"p-16 text-center sticky-top separator-bottom bg-component\">\n <p class=\"text-medium text-16\" translate>Register a general device</p>\n </div>\n <div>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n class=\"formly-group-array-cols d-block p-24 min-height-fit p-r-8\"\n ></formly-form>\n </div>\n <c8y-stepper-buttons\n (onNext)=\"create($event)\"\n (onCancel)=\"bsModalRef.hide()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [disabled]=\"!form?.valid\"\n [pending]=\"isLoading$ | async\"\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <div class=\"p-24 min-height-fit\">\n <c8y-operation-result\n *ngIf=\"success.length === 1 && failed.length === 0\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0 && failed.length === 1\"\n text=\"{{ 'Failed to register device' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n\n <ng-container *ngIf=\"success.length > 1 || failed.length > 1\">\n <c8y-operation-result\n *ngIf=\"failed.length === 0\"\n [text]=\"\n '{{ successfulDevicesCount }} devices registered'\n | translate: { successfulDevicesCount: success.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0\"\n [text]=\"\n '{{ failedDevicesCount }} devices failed to register'\n | translate: { failedDevicesCount: failed.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n </ng-container>\n\n <div *ngIf=\"success.length > 0 && failed.length > 0\" class=\"p-l-24 p-r-24 text-center\">\n <c8y-operation-result\n text=\"{{ 'Several devices failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <p\n ngNonBindable\n translate\n [translateParams]=\"{ count: failed.length, total: failed.length + success.length }\"\n class=\"p-b-16 text-danger\"\n >\n Registration failed for {{ count }} devices out of {{ total }}.\n </p>\n </div>\n\n <div class=\"m-b-8 p-l-24 p-r-24\" *ngIf=\"success.length > 0\" translate>\n Turn on the registered device(s) and wait for connection(s) to be established. Once a\n device is connected, its status will change to \"Pending acceptance\". You will need to\n approve it by clicking on the \"Accept\" button.\n </div>\n\n <c8y-list-group class=\"separator-top m-t-16\">\n <c8y-li *ngFor=\"let fail of failed\">\n <c8y-li-icon class=\"text-danger\" [icon]=\"'ban'\"></c8y-li-icon>\n <p>{{ fail?.id }}</p>\n <small>{{ fail?.message | translate }}</small>\n <c8y-li-collapse>\n <pre><code>{{ fail?.details | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n\n <c8y-li *ngFor=\"let s of success\">\n <c8y-li-icon class=\"text-success\" [icon]=\"'check-circle'\"></c8y-li-icon>\n {{ s?.id }}\n </c8y-li>\n </c8y-list-group>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"bsModalRef.hide()\"\n (onBack)=\"fixErrors($event, failed)\"\n [showButtons]=\"{ back: failed.length > 0, custom: true }\"\n [labels]=\"{ back: 'Fix errors', custom: 'Close' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</c8y-modal>\n", dependencies: [{ kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "component", type: i1.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "component", type: i1.C8yStepper, selector: "c8y-stepper", inputs: ["disableDefaultIcons", "disableProgressButtons", "customClasses", "hideStepProgress", "useStepLabelsAsTitlesOnly"], outputs: ["onStepChange"] }, { kind: "component", type: i6.CdkStep, selector: "cdk-step", inputs: ["stepControl", "label", "errorMessage", "aria-label", "aria-labelledby", "state", "editable", "optional", "completed", "hasError"], outputs: ["interacted"], exportAs: ["cdkStep"] }, { kind: "component", type: i1.C8yStepperButtons, selector: "c8y-stepper-buttons", inputs: ["labels", "pending", "disabled", "showButtons"], outputs: ["onCancel", "onNext", "onBack", "onCustom"] }, { kind: "component", type: i1.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i1.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i1.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i1.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i7.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.JsonPipe, name: "json" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
282
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: GeneralDeviceRegistrationComponent, deps: [{ token: i1.TenantUiService }, { token: i2.TenantService }, { token: i3.RegisterDeviceService }, { token: i2.InventoryService }, { token: i0.ChangeDetectorRef }, { token: i4.BsModalRef }, { token: i1.GainsightService }, { token: i2.DeviceRegistrationBulkService }, { token: i2.FeatureService }], target: i0.ɵɵFactoryTarget.Component }); }
283
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: GeneralDeviceRegistrationComponent, selector: "c8y-general-device-registration", ngImport: i0, template: "<c8y-modal\n [title]=\"'Register devices' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n <c8y-stepper [hideStepProgress]=\"true\" linear c8y-modal-body>\n <cdk-step [stepControl]=\"form\">\n <div class=\"text-center sticky-top bg-component\">\n <p class=\"text-medium text-16 separator-bottom p-16\" translate>Register general devices</p>\n <label\n class=\"c8y-switch m-24 a-i-center\"\n title=\"{{ 'Create device certificates during device registration' | translate }}\"\n for=\"useEST\"\n *ngIf=\"certificateAuthorityFeatureEnabled | async\"\n >\n <input\n type=\"checkbox\"\n name=\"useEST\"\n id=\"useEST\"\n [ngModel]=\"useEST$.getValue()\"\n (ngModelChange)=\"useEST$.next($event)\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Create device certificates during device registration' | translate }}</span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ 'The device registration process includes creating device certificates, which are issued by the tenant\\'s Certificate Authority (CA).' | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </div>\n <div>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n class=\"formly-group-array-cols d-block p-l-24 p-b-24 min-height-fit p-r-8\"\n [ngClass]=\"{'p-t-24' : !(certificateAuthorityFeatureEnabled | async)}\"\n ></formly-form>\n </div>\n <c8y-stepper-buttons\n (onNext)=\"registerDevice($event)\"\n (onCancel)=\"bsModalRef.hide()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [disabled]=\"!form?.valid\"\n [pending]=\"isLoading$ | async\"\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <div class=\"p-24 min-height-fit\">\n <c8y-operation-result\n *ngIf=\"success.length === 1 && failed.length === 0\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0 && failed.length === 1\"\n text=\"{{ 'Failed to register device' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n\n <ng-container *ngIf=\"success.length > 1 || failed.length > 1\">\n <c8y-operation-result\n *ngIf=\"failed.length === 0\"\n [text]=\"\n '{{ successfulDevicesCount }} devices registered'\n | translate: { successfulDevicesCount: success.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0\"\n [text]=\"\n '{{ failedDevicesCount }} devices failed to register'\n | translate: { failedDevicesCount: failed.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n </ng-container>\n\n <div *ngIf=\"success.length > 0 && failed.length > 0\" class=\"p-l-24 p-r-24 text-center\">\n <c8y-operation-result\n text=\"{{ 'Several devices failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <p\n ngNonBindable\n translate\n [translateParams]=\"{ count: failed.length, total: failed.length + success.length }\"\n class=\"p-b-16 text-danger\"\n >\n Registration failed for {{ count }} devices out of {{ total }}.\n </p>\n </div>\n\n <div class=\"m-b-8 p-l-24 p-r-24\" *ngIf=\"success.length > 0\" translate>\n Turn on the registered device(s) and wait for connection(s) to be established. Once a\n device is connected, its status will change to \"Pending acceptance\". You will need to\n approve it by clicking on the \"Accept\" button.\n </div>\n\n <c8y-list-group class=\"separator-top m-t-16\">\n <c8y-li *ngFor=\"let fail of failed\">\n <c8y-li-icon class=\"text-danger\" [icon]=\"'ban'\"></c8y-li-icon>\n <p>{{ fail?.id }}</p>\n <small>{{ fail?.message | translate }}</small>\n <c8y-li-collapse>\n <pre><code>{{ fail?.details | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n\n <c8y-li *ngFor=\"let s of success\">\n <c8y-li-icon class=\"text-success\" [icon]=\"'check-circle'\"></c8y-li-icon>\n {{ s?.id }}\n </c8y-li>\n </c8y-list-group>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"bsModalRef.hide()\"\n (onBack)=\"fixErrors($event, failed)\"\n [showButtons]=\"{ back: failed.length > 0, custom: true }\"\n [labels]=\"{ back: 'Fix errors', custom: 'Close' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</c8y-modal>\n", dependencies: [{ kind: "directive", type: i5.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "component", type: i1.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "directive", type: i7.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.C8yStepper, selector: "c8y-stepper", inputs: ["disableDefaultIcons", "disableProgressButtons", "customClasses", "hideStepProgress", "useStepLabelsAsTitlesOnly"], outputs: ["onStepChange"] }, { kind: "component", type: i8.CdkStep, selector: "cdk-step", inputs: ["stepControl", "label", "errorMessage", "aria-label", "aria-labelledby", "state", "editable", "optional", "completed", "hasError"], outputs: ["interacted"], exportAs: ["cdkStep"] }, { kind: "component", type: i1.C8yStepperButtons, selector: "c8y-stepper-buttons", inputs: ["labels", "pending", "disabled", "showButtons"], outputs: ["onCancel", "onNext", "onBack", "onCustom"] }, { kind: "component", type: i1.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i1.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i1.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i1.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i9.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.JsonPipe, name: "json" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
208
284
  }
209
285
  __decorate([
210
286
  memoize(),
@@ -226,6 +302,6 @@ __decorate([
226
302
  ], GeneralDeviceRegistrationComponent.prototype, "getGroups$", null);
227
303
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: GeneralDeviceRegistrationComponent, decorators: [{
228
304
  type: Component,
229
- args: [{ selector: 'c8y-general-device-registration', changeDetection: ChangeDetectionStrategy.OnPush, template: "<c8y-modal\n [title]=\"'Register devices' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n <c8y-stepper [hideStepProgress]=\"true\" linear c8y-modal-body>\n <cdk-step [stepControl]=\"form\">\n <div class=\"p-16 text-center sticky-top separator-bottom bg-component\">\n <p class=\"text-medium text-16\" translate>Register a general device</p>\n </div>\n <div>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n class=\"formly-group-array-cols d-block p-24 min-height-fit p-r-8\"\n ></formly-form>\n </div>\n <c8y-stepper-buttons\n (onNext)=\"create($event)\"\n (onCancel)=\"bsModalRef.hide()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [disabled]=\"!form?.valid\"\n [pending]=\"isLoading$ | async\"\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <div class=\"p-24 min-height-fit\">\n <c8y-operation-result\n *ngIf=\"success.length === 1 && failed.length === 0\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0 && failed.length === 1\"\n text=\"{{ 'Failed to register device' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n\n <ng-container *ngIf=\"success.length > 1 || failed.length > 1\">\n <c8y-operation-result\n *ngIf=\"failed.length === 0\"\n [text]=\"\n '{{ successfulDevicesCount }} devices registered'\n | translate: { successfulDevicesCount: success.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0\"\n [text]=\"\n '{{ failedDevicesCount }} devices failed to register'\n | translate: { failedDevicesCount: failed.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n </ng-container>\n\n <div *ngIf=\"success.length > 0 && failed.length > 0\" class=\"p-l-24 p-r-24 text-center\">\n <c8y-operation-result\n text=\"{{ 'Several devices failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <p\n ngNonBindable\n translate\n [translateParams]=\"{ count: failed.length, total: failed.length + success.length }\"\n class=\"p-b-16 text-danger\"\n >\n Registration failed for {{ count }} devices out of {{ total }}.\n </p>\n </div>\n\n <div class=\"m-b-8 p-l-24 p-r-24\" *ngIf=\"success.length > 0\" translate>\n Turn on the registered device(s) and wait for connection(s) to be established. Once a\n device is connected, its status will change to \"Pending acceptance\". You will need to\n approve it by clicking on the \"Accept\" button.\n </div>\n\n <c8y-list-group class=\"separator-top m-t-16\">\n <c8y-li *ngFor=\"let fail of failed\">\n <c8y-li-icon class=\"text-danger\" [icon]=\"'ban'\"></c8y-li-icon>\n <p>{{ fail?.id }}</p>\n <small>{{ fail?.message | translate }}</small>\n <c8y-li-collapse>\n <pre><code>{{ fail?.details | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n\n <c8y-li *ngFor=\"let s of success\">\n <c8y-li-icon class=\"text-success\" [icon]=\"'check-circle'\"></c8y-li-icon>\n {{ s?.id }}\n </c8y-li>\n </c8y-list-group>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"bsModalRef.hide()\"\n (onBack)=\"fixErrors($event, failed)\"\n [showButtons]=\"{ back: failed.length > 0, custom: true }\"\n [labels]=\"{ back: 'Fix errors', custom: 'Close' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</c8y-modal>\n" }]
230
- }], ctorParameters: () => [{ type: i1.TenantUiService }, { type: i2.TenantService }, { type: i3.RegisterDeviceService }, { type: i2.InventoryService }, { type: i0.ChangeDetectorRef }, { type: i4.BsModalRef }, { type: i1.GainsightService }], propDecorators: { canLoadTenants$: [], getTenants$: [], getGroups$: [] } });
231
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3JlZ2lzdGVyLWRldmljZS9nZW5lcmFsL2dlbmVyYWwtZGV2aWNlLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9yZWdpc3Rlci1kZXZpY2UvZ2VuZXJhbC9nZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLE9BQU8sRUFFUCxPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2pCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFlLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRixPQUFPLEVBR0wsZ0JBQWdCLEVBR2hCLGFBQWEsRUFDZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7OztBQWFqRCxNQUFNLE9BQU8sa0NBQWtDO0lBeUk3QyxZQUNVLGVBQWdDLEVBQ2hDLGFBQTRCLEVBQzVCLHFCQUE0QyxFQUM1QyxnQkFBa0MsRUFDbEMsRUFBcUIsRUFDdEIsVUFBc0IsRUFDckIsZ0JBQWtDO1FBTmxDLG9CQUFlLEdBQWYsZUFB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OlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnLCBGb3JtbHlGb3JtT3B0aW9ucyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHtcbiAgVGVuYW50VWlTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBDOHlTdGVwcGVyLFxuICBtZW1vaXplLFxuICBHYWluc2lnaHRTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIFN1YmplY3QsIGRlZmVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgSURldmljZVJlZ2lzdHJhdGlvbixcbiAgSU1hbmFnZWRPYmplY3QsXG4gIEludmVudG9yeVNlcnZpY2UsXG4gIElSZXN1bHRMaXN0LFxuICBJVGVuYW50LFxuICBUZW5hbnRTZXJ2aWNlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IFJlZ2lzdGVyRGV2aWNlU2VydmljZSB9IGZyb20gJy4uL3JlZ2lzdGVyLWRldmljZS5zZXJ2aWNlJztcbmltcG9ydCB7IENka1N0ZXAgfSBmcm9tICdAYW5ndWxhci9jZGsvc3RlcHBlcic7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5cbmludGVyZmFjZSBHZW5lcmFsRGV2aWNlUmVnaXN0cmF0aW9uTW9kZWxUeXBlIHtcbiAgaWQ6IHN0cmluZztcbiAgdGVuYW50PzogeyBpZDogc3RyaW5nIH07XG4gIGdyb3VwPzogeyBpZDogc3RyaW5nOyBuYW1lPzogc3RyaW5nIH07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1nZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJ2dlbmVyYWwtZGV2aWNlLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEdlbmVyYWxEZXZpY2VSZWdpc3RyYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICByZWFkb25seSBNQU5BR0VNRU5UID0gJ21hbmFnZW1lbnQnO1xuICByZWFkb25seSBGSUxURVI6IG9iamVjdCA9IHtcbiAgICB3aXRoVG90YWxQYWdlczogdHJ1ZSxcbiAgICBwYWdlU2l6ZTogMjVcbiAgfTtcblxuICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIG1vZGVsID0ge1xuICAgIGRldmljZXNUb0NyZWF0ZTogW3t9IGFzIEdlbmVyYWxEZXZpY2VSZWdpc3RyYXRpb25Nb2RlbFR5cGVdXG4gIH07XG4gIG9wdGlvbnM6IEZvcm1seUZvcm1PcHRpb25zID0ge1xuICAgIGZvcm1TdGF0ZToge1xuICAgICAgY2FuTG9hZFRlbmFudHM6IHRydWVcbiAgICB9XG4gIH07XG5cbiAgUFJPRFVDVF9FWFBFUklFTkNFID0ge1xuICAgIEVWRU5UOiAnZGV2aWNlUmVnaXN0cmF0aW9uJyxcbiAgICBDT01QT05FTlQ6ICdzaW5nbGUtZ2VuZXJhbC1yZWdpc3RyYXRpb24nLFxuICAgIFJFU1VMVDogeyBTVUNDRVNTOiAncmVnaXN0cmF0aW9uU3VjY2VzcycsIEZBSUxVUkU6ICdyZWdpc3RyYXRpb25GYWlsdXJlJyB9XG4gIH07XG5cbiAgaXNMb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgc3VjY2VzczogSURldmljZVJlZ2lzdHJhdGlvbltdID0gW107XG4gIGZhaWxlZDogSURldmljZVJlZ2lzdHJhdGlvbltdID0gW107XG5cbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICBrZXk6ICdkZXZpY2VzVG9DcmVhdGUnLFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIGFkZFRleHQ6IGdldHRleHQoJ0FkZCBkZXZpY2UnKSxcbiAgICAgICAgYWRkVGV4dERhdGFDeTogJ2FkZC1kZXZpY2UnXG4gICAgICB9LFxuICAgICAgZmllbGRBcnJheToge1xuICAgICAgICBmaWVsZEdyb3VwOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiAnaWQnLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBmb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJzAxMjNhYjMyZmNkJyxcbiAgICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ0RldmljZSBJRCcpLFxuICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgICAgICAgICAgdW5pcXVlOiB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IChcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbC5yb290LmdldCgnZGV2aWNlc1RvQ3JlYXRlJykudmFsdWUgYXMgQXJyYXk8eyBpZDogc3RyaW5nIH0+XG4gICAgICAgICAgICAgICAgICApLmZpbHRlcihlbCA9PiBlbC5pZCA9PT0gY29udHJvbC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogKCkgPT4gZ2V0dGV4dCgnRGV2aWNlIElEIGR1cGxpY2F0ZXMgYXJlIG5vdCBhbGxvd2VkJylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiAndGVuYW50JyxcbiAgICAgICAgICAgIHR5cGU6ICd0eXBlYWhlYWQnLFxuICAgICAgICAgICAgaGlkZUV4cHJlc3Npb246IChtb2RlbDogYW55LCBmb3JtU3RhdGU6IGFueSwgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghZm9ybVN0YXRlPy5jYW5Mb2FkVGVuYW50cykge1xuICAgICAgICAgICAgICAgIGZpZWxkLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiAhZm9ybVN0YXRlPy5jYW5Mb2FkVGVuYW50cyB8fCBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IHsgaWQ6IHRoaXMuTUFOQUdFTUVOVCB9LFxuICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdBZGQgdG8gdGVuYW50JyksXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICBjOHlGb3JPcHRpb25zOiB0aGlzLmNhbkxvYWRUZW5hbnRzJCgpLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKGNhbkxvYWQgPT4gY2FuTG9hZCksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZ2V0VGVuYW50cyQoKSlcbiAgICAgICAgICAgICAgKSBhcyBPYnNlcnZhYmxlPElSZXN1bHRMaXN0PElUZW5hbnQ+PixcbiAgICAgICAgICAgICAgY29udGFpbmVyOiAnYm9keScsXG4gICAgICAgICAgICAgIGRpc3BsYXlQcm9wZXJ0eTogJ2lkJyxcbiAgICAgICAgICAgICAgdmFsdWVQcm9wZXJ0aWVzOiBbJ2lkJ11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob29rczoge1xuICAgICAgICAgICAgICBvbkluaXQ6IF9maWVsZCA9PlxuICAgICAgICAgICAgICAgIHRoaXMuY2FuTG9hZFRlbmFudHMkKCkucGlwZShcbiAgICAgICAgICAgICAgICAgIHRhcChjYW5Mb2FkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmZvcm1TdGF0ZS5jYW5Mb2FkVGVuYW50cyA9IGNhbkxvYWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICdncm91cCcsXG4gICAgICAgICAgICB0eXBlOiAndHlwZWFoZWFkJyxcbiAgICAgICAgICAgIGV4cHJlc3Npb25Qcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICd0ZW1wbGF0ZU9wdGlvbnMuZGlzYWJsZWQnOiAoXG4gICAgICAgICAgICAgICAgbW9kZWw6IGFueSxcbiAgICAgICAgICAgICAgICBmb3JtU3RhdGU6IGFueSxcbiAgICAgICAgICAgICAgICBmaWVsZDogRm9ybWx5RmllbGRDb25maWdcbiAgICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1TdGF0ZT8uY2FuTG9hZFRlbmFudHMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChtb2RlbD8udGVuYW50Py5pZCAhPT0gdGhpcy5NQU5BR0VNRU5UKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuICEobW9kZWw/LnRlbmFudD8uaWQgPT09IHRoaXMuTUFOQUdFTUVOVCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWVsZD8udGVtcGxhdGVPcHRpb25zPy5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBsYWJlbDogZ2V0dGV4dCgnQWRkIHRvIGdyb3VwJyksXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KFxuICAgICAgICAgICAgICAgICdZb3UgY2FuIGFkZCBkZXZpY2UgdG8gc3BlY2lmaWMgZ3JvdXAgZm9yIG1hbmFnZW1lbnQgdGVuYW50IG9ubHkuJ1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBjb250YWluZXI6ICdib2R5JyxcbiAgICAgICAgICAgICAgZGlzcGxheVByb3BlcnR5OiAnbmFtZScsXG4gICAgICAgICAgICAgIHZhbHVlUHJvcGVydGllczogWydpZCddLFxuICAgICAgICAgICAgICBjOHlGb3JPcHRpb25zOiB0aGlzLmdldEdyb3VwcyQoKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhvb2tzOiB7XG4gICAgICAgICAgICAgIG9uSW5pdDogX2ZpZWxkID0+XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5Mb2FkVGVuYW50cyQoKS5waXBlKFxuICAgICAgICAgICAgICAgICAgdGFwKGNhbkxvYWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9ybVN0YXRlLmNhbkxvYWRUZW5hbnRzID0gY2FuTG9hZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIF07XG5cbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgbGFzdENyZWF0ZWREZXZpY2VzOiBHZW5lcmFsRGV2aWNlUmVnaXN0cmF0aW9uTW9kZWxUeXBlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRlbmFudFVJU2VydmljZTogVGVuYW50VWlTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlZ2lzdGVyRGV2aWNlU2VydmljZTogUmVnaXN0ZXJEZXZpY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgYnNNb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pc0xvYWRpbmckID0gdGhpcy5yZWdpc3RlckRldmljZVNlcnZpY2UubG9hZGluZyQ7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBjcmVhdGUoZXZlbnRPYmplY3Q6IHsgc3RlcHBlcjogQzh5U3RlcHBlcjsgc3RlcDogQ2RrU3RlcCB9KSB7XG4gICAgaWYgKHRoaXMubW9kZWw/LmRldmljZXNUb0NyZWF0ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5sYXN0Q3JlYXRlZERldmljZXMgPSBbLi4udGhpcy5tb2RlbC5kZXZpY2VzVG9DcmVhdGVdO1xuXG4gICAgICBjb25zdCBkYXRhVG9TZW5kID0gdGhpcy5tb2RlbC5kZXZpY2VzVG9DcmVhdGUubWFwKFxuICAgICAgICAoZWw6IEdlbmVyYWxEZXZpY2VSZWdpc3RyYXRpb25Nb2RlbFR5cGUpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGlkLCB0ZW5hbnQsIGdyb3VwIH0gPSBlbDtcbiAgICAgICAgICBsZXQgZGF0YTogeyBpZDogc3RyaW5nOyB0ZW5hbnRJZD86IHN0cmluZzsgZ3JvdXBJZD86IHN0cmluZyB9ID0geyBpZCB9O1xuXG4gICAgICAgICAgaWYgKHRlbmFudD8uaWQpIHtcbiAgICAgICAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIHRlbmFudElkOiB0ZW5hbnQuaWQgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZ3JvdXA/LmlkKSB7XG4gICAgICAgICAgICBkYXRhID0geyAuLi5kYXRhLCBncm91cElkOiBncm91cC5pZCB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICB0aGlzLnJlZ2lzdGVyRGV2aWNlU2VydmljZVxuICAgICAgICAuY3JlYXRlTXVsdGlwbGUoZGF0YVRvU2VuZClcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKHJlcXVlc3RzID0+IHtcbiAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSByZXF1ZXN0cy5zdWNjZXNzO1xuICAgICAgICAgIGlmICh0aGlzLnN1Y2Nlc3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudCh0aGlzLlBST0RVQ1RfRVhQRVJJRU5DRS5FVkVOVCwge1xuICAgICAgICAgICAgICByZXN1bHQ6IHRoaXMuUFJPRFVDVF9FWFBFUklFTkNFLlJFU1VMVC5TVUNDRVNTLFxuICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMuUFJPRFVDVF9FWFBFUklFTkNFLkNPTVBPTkVOVFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5mYWlsZWQgPSByZXF1ZXN0cy5mYWlsZWQ7XG4gICAgICAgICAgaWYgKHRoaXMuZmFpbGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQodGhpcy5QUk9EVUNUX0VYUEVSSUVOQ0UuRVZFTlQsIHtcbiAgICAgICAgICAgICAgcmVzdWx0OiB0aGlzLlBST0RVQ1RfRVhQRVJJRU5DRS5SRVNVTFQuRkFJTFVSRSxcbiAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLlBST0RVQ1RfRVhQRVJJRU5DRS5DT01QT05FTlRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChldmVudE9iamVjdCkge1xuICAgICAgICAgICAgZXZlbnRPYmplY3Quc3RlcHBlci5uZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmaXhFcnJvcnMoZXZlbnQ6IHsgc3RlcHBlcjogQzh5U3RlcHBlcjsgc3RlcDogQ2RrU3RlcCB9LCBmYWlsZWRSZXF1ZXN0czogSURldmljZVJlZ2lzdHJhdGlvbltdKSB7XG4gICAgaWYgKGZhaWxlZFJlcXVlc3RzICYmIGZhaWxlZFJlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMub3B0aW9ucy5yZXNldE1vZGVsKHtcbiAgICAgICAgZGV2aWNlc1RvQ3JlYXRlOiBbXG4gICAgICAgICAgLi4udGhpcy5sYXN0Q3JlYXRlZERldmljZXMuZmlsdGVyKGVsID0+XG4gICAgICAgICAgICBmYWlsZWRSZXF1ZXN0cy5tYXAoZGF0YSA9PiBkYXRhLmlkKS5pbmNsdWRlcyhlbC5pZClcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIGV2ZW50Py5zdGVwcGVyLnByZXZpb3VzKCk7XG4gIH1cblxuICBAbWVtb2l6ZSgpXG4gIHByaXZhdGUgY2FuTG9hZFRlbmFudHMkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMudGVuYW50VUlTZXJ2aWNlLmlzTWFuYWdlbWVudFRlbmFudCgpKSkucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gIH1cblxuICBAbWVtb2l6ZSgpXG4gIHByaXZhdGUgZ2V0VGVuYW50cyQoKTogT2JzZXJ2YWJsZTxJUmVzdWx0TGlzdDxJVGVuYW50Pj4ge1xuICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMudGVuYW50U2VydmljZS5saXN0KHRoaXMuRklMVEVSKSkpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuICB9XG5cbiAgQG1lbW9pemUoKVxuICBwcml2YXRlIGdldEdyb3VwcyQoKTogT2JzZXJ2YWJsZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+IHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT5cbiAgICAgIGZyb20oXG4gICAgICAgIHRoaXMuaW52ZW50b3J5U2VydmljZS5saXN0UXVlcnkoXG4gICAgICAgICAgeyBfX2ZpbHRlcjogeyBfX2hhczogJ2M4eV9Jc0RldmljZUdyb3VwJyB9LCBfX29yZGVyYnk6IFt7IG5hbWU6IDEgfV0gfSxcbiAgICAgICAgICB7IC4uLnRoaXMuRklMVEVSIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgICkucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gIH1cbn1cbiIsIjxjOHktbW9kYWxcbiAgW3RpdGxlXT1cIidSZWdpc3RlciBkZXZpY2VzJyB8IHRyYW5zbGF0ZVwiXG4gIFtoZWFkZXJDbGFzc2VzXT1cIidkaWFsb2ctaGVhZGVyJ1wiXG4gIFtjdXN0b21Gb290ZXJdPVwidHJ1ZVwiXG4+XG4gIDxuZy1jb250YWluZXIgYzh5LW1vZGFsLXRpdGxlPlxuICAgIDxzcGFuIFtjOHlJY29uXT1cIidjOHktZGV2aWNlLWNvbm5lY3QnXCI+PC9zcGFuPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGM4eS1zdGVwcGVyIFtoaWRlU3RlcFByb2dyZXNzXT1cInRydWVcIiBsaW5lYXIgYzh5LW1vZGFsLWJvZHk+XG4gICAgPGNkay1zdGVwIFtzdGVwQ29udHJvbF09XCJmb3JtXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNiB0ZXh0LWNlbnRlciBzdGlja3ktdG9wIHNlcGFyYXRvci1ib3R0b20gYmctY29tcG9uZW50XCI+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1tZWRpdW0gdGV4dC0xNlwiIHRyYW5zbGF0ZT5SZWdpc3RlciBhIGdlbmVyYWwgZGV2aWNlPC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8Zm9ybWx5LWZvcm1cbiAgICAgICAgICBbZm9ybV09XCJmb3JtXCJcbiAgICAgICAgICBbZmllbGRzXT1cImZpZWxkc1wiXG4gICAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zXCJcbiAgICAgICAgICBjbGFzcz1cImZvcm1seS1ncm91cC1hcnJheS1jb2xzIGQtYmxvY2sgcC0yNCBtaW4taGVpZ2h0LWZpdCBwLXItOFwiXG4gICAgICAgID48L2Zvcm1seS1mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgICA8Yzh5LXN0ZXBwZXItYnV0dG9uc1xuICAgICAgICAob25OZXh0KT1cImNyZWF0ZSgkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2FuY2VsKT1cImJzTW9kYWxSZWYuaGlkZSgpXCJcbiAgICAgICAgW3Nob3dCdXR0b25zXT1cInsgY2FuY2VsOiB0cnVlLCBuZXh0OiB0cnVlIH1cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIWZvcm0/LnZhbGlkXCJcbiAgICAgICAgW3BlbmRpbmddPVwiaXNMb2FkaW5nJCB8IGFzeW5jXCJcbiAgICAgICAgY2xhc3M9XCJzdGlja3ktYm90dG9tIGQtYmxvY2sgcC10LTE2IHAtYi0xNiBzZXBhcmF0b3ItdG9wIGJnLWxldmVsLTBcIlxuICAgICAgPjwvYzh5LXN0ZXBwZXItYnV0dG9ucz5cbiAgICA8L2Nkay1zdGVwPlxuICAgIDxjZGstc3RlcCBzdGF0ZT1cImZpbmFsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0yNCBtaW4taGVpZ2h0LWZpdFwiPlxuICAgICAgICA8Yzh5LW9wZXJhdGlvbi1yZXN1bHRcbiAgICAgICAgICAqbmdJZj1cInN1Y2Nlc3MubGVuZ3RoID09PSAxICYmIGZhaWxlZC5sZW5ndGggPT09IDBcIlxuICAgICAgICAgIHRleHQ9XCJ7eyAnRGV2aWNlIHJlZ2lzdGVyZWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBbc2l6ZV09XCI4NFwiXG4gICAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICAgIHR5cGU9XCJzdWNjZXNzXCJcbiAgICAgICAgICBjbGFzcz1cImxlYWRcIlxuICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICAgICAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgICAgICAgKm5nSWY9XCJzdWNjZXNzLmxlbmd0aCA9PT0gMCAmJiBmYWlsZWQubGVuZ3RoID09PSAxXCJcbiAgICAgICAgICB0ZXh0PVwie3sgJ0ZhaWxlZCB0byByZWdpc3RlciBkZXZpY2UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBbc2l6ZV09XCI4NFwiXG4gICAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICAgIHR5cGU9XCJlcnJvclwiXG4gICAgICAgICAgY2xhc3M9XCJsZWFkXCJcbiAgICAgICAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN1Y2Nlc3MubGVuZ3RoID4gMSB8fCBmYWlsZWQubGVuZ3RoID4gMVwiPlxuICAgICAgICAgIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICAgICAgICAgKm5nSWY9XCJmYWlsZWQubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgIFt0ZXh0XT1cIlxuICAgICAgICAgICAgICAne3sgc3VjY2Vzc2Z1bERldmljZXNDb3VudCB9fSBkZXZpY2VzIHJlZ2lzdGVyZWQnXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgc3VjY2Vzc2Z1bERldmljZXNDb3VudDogc3VjY2Vzcy5sZW5ndGggfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtzaXplXT1cIjg0XCJcbiAgICAgICAgICAgIFt2ZXJ0aWNhbF09XCJ0cnVlXCJcbiAgICAgICAgICAgIHR5cGU9XCJzdWNjZXNzXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGVhZFwiXG4gICAgICAgICAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG4gICAgICAgICAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgICAgICAgICAqbmdJZj1cInN1Y2Nlc3MubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgIFt0ZXh0XT1cIlxuICAgICAgICAgICAgICAne3sgZmFpbGVkRGV2aWNlc0NvdW50IH19IGRldmljZXMgZmFpbGVkIHRvIHJlZ2lzdGVyJ1xuICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IGZhaWxlZERldmljZXNDb3VudDogZmFpbGVkLmxlbmd0aCB9XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW3NpemVdPVwiODRcIlxuICAgICAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICAgICAgdHlwZT1cImVycm9yXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGVhZFwiXG4gICAgICAgICAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzdWNjZXNzLmxlbmd0aCA+IDAgJiYgZmFpbGVkLmxlbmd0aCA+IDBcIiBjbGFzcz1cInAtbC0yNCBwLXItMjQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICA8Yzh5LW9wZXJhdGlvbi1yZXN1bHRcbiAgICAgICAgICAgIHRleHQ9XCJ7eyAnU2V2ZXJhbCBkZXZpY2VzIGZhaWxlZCB0byByZWdpc3RlcicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgW3NpemVdPVwiODRcIlxuICAgICAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICAgICAgdHlwZT1cImVycm9yXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGVhZFwiXG4gICAgICAgICAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgIG5nTm9uQmluZGFibGVcbiAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7IGNvdW50OiBmYWlsZWQubGVuZ3RoLCB0b3RhbDogZmFpbGVkLmxlbmd0aCArIHN1Y2Nlc3MubGVuZ3RoIH1cIlxuICAgICAgICAgICAgY2xhc3M9XCJwLWItMTYgdGV4dC1kYW5nZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFJlZ2lzdHJhdGlvbiBmYWlsZWQgZm9yIHt7IGNvdW50IH19IGRldmljZXMgb3V0IG9mIHt7IHRvdGFsIH19LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tYi04IHAtbC0yNCBwLXItMjRcIiAqbmdJZj1cInN1Y2Nlc3MubGVuZ3RoID4gMFwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICBUdXJuIG9uIHRoZSByZWdpc3RlcmVkIGRldmljZShzKSBhbmQgd2FpdCBmb3IgY29ubmVjdGlvbihzKSB0byBiZSBlc3RhYmxpc2hlZC4gT25jZSBhXG4gICAgICAgICAgZGV2aWNlIGlzIGNvbm5lY3RlZCwgaXRzIHN0YXR1cyB3aWxsIGNoYW5nZSB0byBcIlBlbmRpbmcgYWNjZXB0YW5jZVwiLiBZb3Ugd2lsbCBuZWVkIHRvXG4gICAgICAgICAgYXBwcm92ZSBpdCBieSBjbGlja2luZyBvbiB0aGUgXCJBY2NlcHRcIiBidXR0b24uXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxjOHktbGlzdC1ncm91cCBjbGFzcz1cInNlcGFyYXRvci10b3AgbS10LTE2XCI+XG4gICAgICAgICAgPGM4eS1saSAqbmdGb3I9XCJsZXQgZmFpbCBvZiBmYWlsZWRcIj5cbiAgICAgICAgICAgIDxjOHktbGktaWNvbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgW2ljb25dPVwiJ2JhbidcIj48L2M4eS1saS1pY29uPlxuICAgICAgICAgICAgPHA+e3sgZmFpbD8uaWQgfX08L3A+XG4gICAgICAgICAgICA8c21hbGw+e3sgZmFpbD8ubWVzc2FnZSB8IHRyYW5zbGF0ZSB9fTwvc21hbGw+XG4gICAgICAgICAgICA8Yzh5LWxpLWNvbGxhcHNlPlxuICAgICAgICAgICAgICA8cHJlPjxjb2RlPnt7IGZhaWw/LmRldGFpbHMgfCBqc29uIH19PC9jb2RlPjwvcHJlPlxuICAgICAgICAgICAgPC9jOHktbGktY29sbGFwc2U+XG4gICAgICAgICAgPC9jOHktbGk+XG5cbiAgICAgICAgICA8Yzh5LWxpICpuZ0Zvcj1cImxldCBzIG9mIHN1Y2Nlc3NcIj5cbiAgICAgICAgICAgIDxjOHktbGktaWNvbiBjbGFzcz1cInRleHQtc3VjY2Vzc1wiIFtpY29uXT1cIidjaGVjay1jaXJjbGUnXCI+PC9jOHktbGktaWNvbj5cbiAgICAgICAgICAgIHt7IHM/LmlkIH19XG4gICAgICAgICAgPC9jOHktbGk+XG4gICAgICAgIDwvYzh5LWxpc3QtZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxjOHktc3RlcHBlci1idXR0b25zXG4gICAgICAgIGNsYXNzPVwic3RpY2t5LWJvdHRvbSBkLWJsb2NrIHAtdC0xNiBwLWItMTYgc2VwYXJhdG9yLXRvcCBiZy1sZXZlbC0wXCJcbiAgICAgICAgKG9uQ3VzdG9tKT1cImJzTW9kYWxSZWYuaGlkZSgpXCJcbiAgICAgICAgKG9uQmFjayk9XCJmaXhFcnJvcnMoJGV2ZW50LCBmYWlsZWQpXCJcbiAgICAgICAgW3Nob3dCdXR0b25zXT1cInsgYmFjazogZmFpbGVkLmxlbmd0aCA+IDAsIGN1c3RvbTogdHJ1ZSB9XCJcbiAgICAgICAgW2xhYmVsc109XCJ7IGJhY2s6ICdGaXggZXJyb3JzJywgY3VzdG9tOiAnQ2xvc2UnIH1cIlxuICAgICAgPjwvYzh5LXN0ZXBwZXItYnV0dG9ucz5cbiAgICA8L2Nkay1zdGVwPlxuICA8L2M4eS1zdGVwcGVyPlxuPC9jOHktbW9kYWw+XG4iXX0=
305
+ args: [{ selector: 'c8y-general-device-registration', changeDetection: ChangeDetectionStrategy.OnPush, template: "<c8y-modal\n [title]=\"'Register devices' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n <c8y-stepper [hideStepProgress]=\"true\" linear c8y-modal-body>\n <cdk-step [stepControl]=\"form\">\n <div class=\"text-center sticky-top bg-component\">\n <p class=\"text-medium text-16 separator-bottom p-16\" translate>Register general devices</p>\n <label\n class=\"c8y-switch m-24 a-i-center\"\n title=\"{{ 'Create device certificates during device registration' | translate }}\"\n for=\"useEST\"\n *ngIf=\"certificateAuthorityFeatureEnabled | async\"\n >\n <input\n type=\"checkbox\"\n name=\"useEST\"\n id=\"useEST\"\n [ngModel]=\"useEST$.getValue()\"\n (ngModelChange)=\"useEST$.next($event)\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Create device certificates during device registration' | translate }}</span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ 'The device registration process includes creating device certificates, which are issued by the tenant\\'s Certificate Authority (CA).' | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </div>\n <div>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n class=\"formly-group-array-cols d-block p-l-24 p-b-24 min-height-fit p-r-8\"\n [ngClass]=\"{'p-t-24' : !(certificateAuthorityFeatureEnabled | async)}\"\n ></formly-form>\n </div>\n <c8y-stepper-buttons\n (onNext)=\"registerDevice($event)\"\n (onCancel)=\"bsModalRef.hide()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [disabled]=\"!form?.valid\"\n [pending]=\"isLoading$ | async\"\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <div class=\"p-24 min-height-fit\">\n <c8y-operation-result\n *ngIf=\"success.length === 1 && failed.length === 0\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0 && failed.length === 1\"\n text=\"{{ 'Failed to register device' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n\n <ng-container *ngIf=\"success.length > 1 || failed.length > 1\">\n <c8y-operation-result\n *ngIf=\"failed.length === 0\"\n [text]=\"\n '{{ successfulDevicesCount }} devices registered'\n | translate: { successfulDevicesCount: success.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0\"\n [text]=\"\n '{{ failedDevicesCount }} devices failed to register'\n | translate: { failedDevicesCount: failed.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n </ng-container>\n\n <div *ngIf=\"success.length > 0 && failed.length > 0\" class=\"p-l-24 p-r-24 text-center\">\n <c8y-operation-result\n text=\"{{ 'Several devices failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <p\n ngNonBindable\n translate\n [translateParams]=\"{ count: failed.length, total: failed.length + success.length }\"\n class=\"p-b-16 text-danger\"\n >\n Registration failed for {{ count }} devices out of {{ total }}.\n </p>\n </div>\n\n <div class=\"m-b-8 p-l-24 p-r-24\" *ngIf=\"success.length > 0\" translate>\n Turn on the registered device(s) and wait for connection(s) to be established. Once a\n device is connected, its status will change to \"Pending acceptance\". You will need to\n approve it by clicking on the \"Accept\" button.\n </div>\n\n <c8y-list-group class=\"separator-top m-t-16\">\n <c8y-li *ngFor=\"let fail of failed\">\n <c8y-li-icon class=\"text-danger\" [icon]=\"'ban'\"></c8y-li-icon>\n <p>{{ fail?.id }}</p>\n <small>{{ fail?.message | translate }}</small>\n <c8y-li-collapse>\n <pre><code>{{ fail?.details | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n\n <c8y-li *ngFor=\"let s of success\">\n <c8y-li-icon class=\"text-success\" [icon]=\"'check-circle'\"></c8y-li-icon>\n {{ s?.id }}\n </c8y-li>\n </c8y-list-group>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"bsModalRef.hide()\"\n (onBack)=\"fixErrors($event, failed)\"\n [showButtons]=\"{ back: failed.length > 0, custom: true }\"\n [labels]=\"{ back: 'Fix errors', custom: 'Close' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</c8y-modal>\n" }]
306
+ }], ctorParameters: () => [{ type: i1.TenantUiService }, { type: i2.TenantService }, { type: i3.RegisterDeviceService }, { type: i2.InventoryService }, { type: i0.ChangeDetectorRef }, { type: i4.BsModalRef }, { type: i1.GainsightService }, { type: i2.DeviceRegistrationBulkService }, { type: i2.FeatureService }], propDecorators: { canLoadTenants$: [], getTenants$: [], getGroups$: [] } });
307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3JlZ2lzdGVyLWRldmljZS9nZW5lcmFsL2dlbmVyYWwtZGV2aWNlLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9yZWdpc3Rlci1kZXZpY2UvZ2VuZXJhbC9nZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLE9BQU8sRUFFUCxPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2pCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFlLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEYsT0FBTyxFQUNMLDZCQUE2QixFQUM3QixjQUFjLEVBRWQsZ0JBQWdCLEVBR2hCLGFBQWEsRUFDZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtEQUFrRCxDQUFDOzs7Ozs7Ozs7OztBQWNqRixNQUFNLE9BQU8sa0NBQWtDO0lBcUs3QyxZQUNVLGVBQWdDLEVBQ2hDLGFBQTRCLEVBQzVC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QVU7eUVBRXBDO0FBR087SUFEUCxPQUFPLEVBQUU7OztvQ0FDYSxVQUFVO3FFQUVoQztBQUdPO0lBRFAsT0FBTyxFQUFFOzs7b0NBQ1ksVUFBVTtvRUFTL0I7MkZBL1RVLGtDQUFrQztrQkFMOUMsU0FBUzsrQkFDRSxpQ0FBaUMsbUJBRTFCLHVCQUF1QixDQUFDLE1BQU07b1ZBOFN2QyxlQUFlLE1BS2YsV0FBVyxNQUtYLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgT25EZXN0cm95XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seUZvcm1PcHRpb25zIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQge1xuICBUZW5hbnRVaVNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEM4eVN0ZXBwZXIsXG4gIG1lbW9pemUsXG4gIEdhaW5zaWdodFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZGVmZXIsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIERldmljZVJlZ2lzdHJhdGlvbkJ1bGtTZXJ2aWNlLFxuICBGZWF0dXJlU2VydmljZSxcbiAgSU1hbmFnZWRPYmplY3QsXG4gIEludmVudG9yeVNlcnZpY2UsXG4gIElSZXN1bHRMaXN0LFxuICBJVGVuYW50LFxuICBUZW5hbnRTZXJ2aWNlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IFJlZ2lzdGVyRGV2aWNlU2VydmljZSB9IGZyb20gJy4uL3JlZ2lzdGVyLWRldmljZS5zZXJ2aWNlJztcbmltcG9ydCB7IENka1N0ZXAgfSBmcm9tICdAYW5ndWxhci9jZGsvc3RlcHBlcic7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBFU1RDc3ZIZWFkZXJzIH0gZnJvbSAnLi4vYnVsay9idWxrLWRldmljZS1yZWdpc3RyYXRpb24tbW9kYWwuY29tcG9uZW50JztcblxuaW50ZXJmYWNlIEdlbmVyYWxEZXZpY2VSZWdpc3RyYXRpb25Nb2RlbFR5cGUge1xuICBpZDogc3RyaW5nO1xuICB0ZW5hbnQ/OiB7IGlkOiBzdHJpbmcgfTtcbiAgZ3JvdXA/OiB7IGlkOiBzdHJpbmc7IG5hbWU/OiBzdHJpbmcgfTtcbiAgb25lVGltZVBhc3N3b3JkPzogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZ2VuZXJhbC1kZXZpY2UtcmVnaXN0cmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICdnZW5lcmFsLWRldmljZS1yZWdpc3RyYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBHZW5lcmFsRGV2aWNlUmVnaXN0cmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcmVhZG9ubHkgTUFOQUdFTUVOVCA9ICdtYW5hZ2VtZW50JztcbiAgcmVhZG9ubHkgRklMVEVSOiBvYmplY3QgPSB7XG4gICAgd2l0aFRvdGFsUGFnZXM6IHRydWUsXG4gICAgcGFnZVNpemU6IDI1XG4gIH07XG5cbiAgdXNlRVNUJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBjZXJ0aWZpY2F0ZUF1dGhvcml0eUZlYXR1cmVFbmFibGVkID0gdGhpcy5mZWF0dXJlU2VydmljZVxuICAgIC5kZXRhaWwoJ2NlcnRpZmljYXRlLWF1dGhvcml0eScpXG4gICAgLnRoZW4oKHsgZGF0YSB9KSA9PiBkYXRhLmFjdGl2ZSk7XG5cbiAgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICBtb2RlbCA9IHtcbiAgICBkZXZpY2VzVG9DcmVhdGU6IFt7fSBhcyBHZW5lcmFsRGV2aWNlUmVnaXN0cmF0aW9uTW9kZWxUeXBlXVxuICB9O1xuICBvcHRpb25zOiBGb3JtbHlGb3JtT3B0aW9ucyA9IHtcbiAgICBmb3JtU3RhdGU6IHtcbiAgICAgIGNhbkxvYWRUZW5hbnRzOiB0cnVlLFxuICAgICAgdXNlRVNUOiB0aGlzLnVzZUVTVCQuZ2V0VmFsdWUoKVxuICAgIH1cbiAgfTtcblxuICBQUk9EVUNUX0VYUEVSSUVOQ0UgPSB7XG4gICAgRVZFTlQ6ICdkZXZpY2VSZWdpc3RyYXRpb24nLFxuICAgIENPTVBPTkVOVDogJ3NpbmdsZS1nZW5lcmFsLXJlZ2lzdHJhdGlvbicsXG4gICAgUkVTVUxUOiB7IFNVQ0NFU1M6ICdyZWdpc3RyYXRpb25TdWNjZXNzJywgRkFJTFVSRTogJ3JlZ2lzdHJhdGlvbkZhaWx1cmUnIH1cbiAgfTtcblxuICBpc0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzdWNjZXNzOiB7IGlkOiBzdHJpbmcgfVtdID0gW107XG4gIGZhaWxlZDogeyBpZDogc3RyaW5nOyBtZXNzYWdlPzogc3RyaW5nOyBkZXRhaWxzPzogYW55IH1bXSA9IFtdO1xuXG4gIGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtcbiAgICB7XG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAga2V5OiAnZGV2aWNlc1RvQ3JlYXRlJyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGFkZFRleHQ6IGdldHRleHQoJ0FkZCBkZXZpY2UnKSxcbiAgICAgICAgYWRkVGV4dERhdGFDeTogJ2FkZC1kZXZpY2UnXG4gICAgICB9LFxuICAgICAgZmllbGRBcnJheToge1xuICAgICAgICBmaWVsZEdyb3VwOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiAnaWQnLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBmb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnMDEyM2FiMzJmY2QnLFxuICAgICAgICAgICAgICBsYWJlbDogZ2V0dGV4dCgnRGV2aWNlIElEJyksXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsaWRhdG9yczoge1xuICAgICAgICAgICAgICB1bmlxdWU6IHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAoY29udHJvbDogRm9ybUNvbnRyb2wpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gKFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sLnJvb3QuZ2V0KCdkZXZpY2VzVG9DcmVhdGUnKS52YWx1ZSBhcyBBcnJheTx7IGlkOiBzdHJpbmcgfT5cbiAgICAgICAgICAgICAgICAgICkuZmlsdGVyKGVsID0+IGVsLmlkID09PSBjb250cm9sLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZC5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAoKSA9PiBnZXR0ZXh0KCdEZXZpY2UgSUQgZHVwbGljYXRlcyBhcmUgbm90IGFsbG93ZWQnKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICd0ZW5hbnQnLFxuICAgICAgICAgICAgdHlwZTogJ3R5cGVhaGVhZCcsXG4gICAgICAgICAgICBleHByZXNzaW9uczoge1xuICAgICAgICAgICAgICBoaWRlOiBmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybVN0YXRlID0gZmllbGQub3B0aW9ucz8uZm9ybVN0YXRlO1xuICAgICAgICAgICAgICAgIGlmICghZm9ybVN0YXRlPy5jYW5Mb2FkVGVuYW50cykge1xuICAgICAgICAgICAgICAgICAgZmllbGQuZm9ybUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhZm9ybVN0YXRlPy5jYW5Mb2FkVGVuYW50cyB8fCBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogeyBpZDogdGhpcy5NQU5BR0VNRU5UIH0sXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICBsYWJlbDogZ2V0dGV4dCgnQWRkIHRvIHRlbmFudCcpLFxuICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgYzh5Rm9yT3B0aW9uczogdGhpcy5jYW5Mb2FkVGVuYW50cyQoKS5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihjYW5Mb2FkID0+IGNhbkxvYWQpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmdldFRlbmFudHMkKCkpXG4gICAgICAgICAgICAgICkgYXMgT2JzZXJ2YWJsZTxJUmVzdWx0TGlzdDxJVGVuYW50Pj4sXG4gICAgICAgICAgICAgIGNvbnRhaW5lcjogJ2JvZHknLFxuICAgICAgICAgICAgICBkaXNwbGF5UHJvcGVydHk6ICdpZCcsXG4gICAgICAgICAgICAgIHZhbHVlUHJvcGVydGllczogWydpZCddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaG9va3M6IHtcbiAgICAgICAgICAgICAgb25Jbml0OiBfZmllbGQgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmNhbkxvYWRUZW5hbnRzJCgpLnBpcGUoXG4gICAgICAgICAgICAgICAgICB0YXAoY2FuTG9hZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5mb3JtU3RhdGUuY2FuTG9hZFRlbmFudHMgPSBjYW5Mb2FkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiAnZ3JvdXAnLFxuICAgICAgICAgICAgdHlwZTogJ3R5cGVhaGVhZCcsXG4gICAgICAgICAgICBleHByZXNzaW9uczoge1xuICAgICAgICAgICAgICAncHJvcHMuZGlzYWJsZWQnOiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybVN0YXRlID0gZmllbGQub3B0aW9ucz8uZm9ybVN0YXRlO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gZmllbGQubW9kZWw7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1TdGF0ZT8uY2FuTG9hZFRlbmFudHMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChtb2RlbD8udGVuYW50Py5pZCAhPT0gdGhpcy5NQU5BR0VNRU5UKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuICEobW9kZWw/LnRlbmFudD8uaWQgPT09IHRoaXMuTUFOQUdFTUVOVCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWVsZD8ucHJvcHM/LmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ0FkZCB0byBncm91cCcpLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dChcbiAgICAgICAgICAgICAgICAnWW91IGNhbiBhZGQgZGV2aWNlIHRvIHNwZWNpZmljIGdyb3VwIGZvciBtYW5hZ2VtZW50IHRlbmFudCBvbmx5LidcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgY29udGFpbmVyOiAnYm9keScsXG4gICAgICAgICAgICAgIGRpc3BsYXlQcm9wZXJ0eTogJ25hbWUnLFxuICAgICAgICAgICAgICB2YWx1ZVByb3BlcnRpZXM6IFsnaWQnXSxcbiAgICAgICAgICAgICAgYzh5Rm9yT3B0aW9uczogdGhpcy5nZXRHcm91cHMkKClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob29rczoge1xuICAgICAgICAgICAgICBvbkluaXQ6IF9maWVsZCA9PlxuICAgICAgICAgICAgICAgIHRoaXMuY2FuTG9hZFRlbmFudHMkKCkucGlwZShcbiAgICAgICAgICAgICAgICAgIHRhcChjYW5Mb2FkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmZvcm1TdGF0ZS5jYW5Mb2FkVGVuYW50cyA9IGNhbkxvYWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICdvbmVUaW1lUGFzc3dvcmQnLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBleHByZXNzaW9uczoge1xuICAgICAgICAgICAgICBoaWRlOiBmaWVsZCA9PiAhZmllbGQub3B0aW9ucz8uZm9ybVN0YXRlPy51c2VFU1RcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ1RydUROM0g0NUwwJyxcbiAgICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ09uZS10aW1lIHBhc3N3b3JkJyksXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaG9va3M6IHtcbiAgICAgICAgICAgICAgb25Jbml0OiBfZmllbGQgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnVzZUVTVCQucGlwZShcbiAgICAgICAgICAgICAgICAgIHRhcCh1c2VFU1QgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9ybVN0YXRlLnVzZUVTVCA9IHVzZUVTVDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIF07XG5cbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgbGFzdENyZWF0ZWREZXZpY2VzOiBHZW5lcmFsRGV2aWNlUmVnaXN0cmF0aW9uTW9kZWxUeXBlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRlbmFudFVJU2VydmljZTogVGVuYW50VWlTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlZ2lzdGVyRGV2aWNlU2VydmljZTogUmVnaXN0ZXJEZXZpY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgYnNNb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkZXZpY2VSZWdpc3RyYXRpb25TZXJ2aWNlOiBEZXZpY2VSZWdpc3RyYXRpb25CdWxrU2VydmljZSxcbiAgICBwcml2YXRlIGZlYXR1cmVTZXJ2aWNlOiBGZWF0dXJlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmlzTG9hZGluZyQgPSB0aGlzLnJlZ2lzdGVyRGV2aWNlU2VydmljZS5sb2FkaW5nJDtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyRGV2aWNlKGV2ZW50T2JqZWN0OiB7IHN0ZXBwZXI6IEM4eVN0ZXBwZXI7IHN0ZXA6IENka1N0ZXAgfSkge1xuICAgICF0aGlzLnVzZUVTVCQuZ2V0VmFsdWUoKSA/IHRoaXMuY3JlYXRlKGV2ZW50T2JqZWN0KSA6IHRoaXMucmVnaXN0ZXJCeUVzdChldmVudE9iamVjdCk7XG4gIH1cblxuICBmaXhFcnJvcnMoZXZlbnQ6IHsgc3RlcHBlcjogQzh5U3RlcHBlcjsgc3RlcDogQ2RrU3RlcCB9LCBmYWlsZWRSZXF1ZXN0czogYW55KSB7XG4gICAgaWYgKGZhaWxlZFJlcXVlc3RzICYmIGZhaWxlZFJlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMub3B0aW9ucy5yZXNldE1vZGVsKHtcbiAgICAgICAgZGV2aWNlc1RvQ3JlYXRlOiBbXG4gICAgICAgICAgLi4udGhpcy5sYXN0Q3JlYXRlZERldmljZXMuZmlsdGVyKGVsID0+XG4gICAgICAgICAgICBmYWlsZWRSZXF1ZXN0cy5tYXAoZGF0YSA9PiBkYXRhLmlkKS5pbmNsdWRlcyhlbC5pZClcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIGV2ZW50Py5zdGVwcGVyLnByZXZpb3VzKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZShldmVudE9iamVjdDogeyBzdGVwcGVyOiBDOHlTdGVwcGVyOyBzdGVwOiBDZGtTdGVwIH0pIHtcbiAgICBpZiAodGhpcy5tb2RlbD8uZGV2aWNlc1RvQ3JlYXRlPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxhc3RDcmVhdGVkRGV2aWNlcyA9IFsuLi50aGlzLm1vZGVsLmRldmljZXNUb0NyZWF0ZV07XG5cbiAgICAgIGNvbnN0IGRhdGFUb1NlbmQgPSB0aGlzLm1vZGVsLmRldmljZXNUb0NyZWF0ZS5tYXAoXG4gICAgICAgIChlbDogR2VuZXJhbERldmljZVJlZ2lzdHJhdGlvbk1vZGVsVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgaWQsIHRlbmFudCwgZ3JvdXAgfSA9IGVsO1xuICAgICAgICAgIGxldCBkYXRhOiB7IGlkOiBzdHJpbmc7IHRlbmFudElkPzogc3RyaW5nOyBncm91cElkPzogc3RyaW5nIH0gPSB7IGlkIH07XG5cbiAgICAgICAgICBpZiAodGVuYW50Py5pZCkge1xuICAgICAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSwgdGVuYW50SWQ6IHRlbmFudC5pZCB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChncm91cD8uaWQpIHtcbiAgICAgICAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIGdyb3VwSWQ6IGdyb3VwLmlkIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHRoaXMucmVnaXN0ZXJEZXZpY2VTZXJ2aWNlXG4gICAgICAgIC5jcmVhdGVNdWx0aXBsZShkYXRhVG9TZW5kKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUocmVxdWVzdHMgPT4ge1xuICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IHJlcXVlc3RzLnN1Y2Nlc3M7XG4gICAgICAgICAgaWYgKHRoaXMuc3VjY2Vzcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KHRoaXMuUFJPRFVDVF9FWFBFUklFTkNFLkVWRU5ULCB7XG4gICAgICAgICAgICAgIHJlc3VsdDogdGhpcy5QUk9EVUNUX0VYUEVSSUVOQ0UuUkVTVUxULlNVQ0NFU1MsXG4gICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5QUk9EVUNUX0VYUEVSSUVOQ0UuQ09NUE9ORU5UXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmZhaWxlZCA9IHJlcXVlc3RzLmZhaWxlZDtcbiAgICAgICAgICBpZiAodGhpcy5mYWlsZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudCh0aGlzLlBST0RVQ1RfRVhQRVJJRU5DRS5FVkVOVCwge1xuICAgICAgICAgICAgICByZXN1bHQ6IHRoaXMuUFJPRFVDVF9FWFBFUklFTkNFLlJFU1VMVC5GQUlMVVJFLFxuICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMuUFJPRFVDVF9FWFBFUklFTkNFLkNPTVBPTkVOVFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGV2ZW50T2JqZWN0KSB7XG4gICAgICAgICAgICBldmVudE9iamVjdC5zdGVwcGVyLm5leHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJCeUVzdChldmVudE9iamVjdDogeyBzdGVwcGVyOiBDOHlTdGVwcGVyOyBzdGVwOiBDZGtTdGVwIH0pIHtcbiAgICB0aGlzLmxhc3RDcmVhdGVkRGV2aWNlcyA9IFsuLi50aGlzLm1vZGVsLmRldmljZXNUb0NyZWF0ZV07XG4gICAgdGhpcy5kZXZpY2VSZWdpc3RyYXRpb25TZXJ2aWNlXG4gICAgICAuY3JlYXRlKHRoaXMuY29udmVydE9iamVjdFRvQ1NWRmlsZSh0aGlzLm1vZGVsLmRldmljZXNUb0NyZWF0ZSkpXG4gICAgICAudGhlbigoeyByZXMsIGRhdGEgfSkgPT4ge1xuICAgICAgICBpZiAocmVzLnN0YXR1cyA8IDQwMCkge1xuICAgICAgICAgIHRoaXMuZmFpbGVkID0gZGF0YS5mYWlsZWRDcmVhdGlvbkxpc3QubWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlkOiB2YWx1ZS5kZXZpY2VJZCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdmFsdWUuZmFpbHVyZVJlYXNvblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBmYWlsZWRJZHMgPSBuZXcgU2V0KHRoaXMuZmFpbGVkLm1hcChpdGVtID0+IGl0ZW0uaWQpKTtcbiAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSB0aGlzLm1vZGVsLmRldmljZXNUb0NyZWF0ZS5maWx0ZXIoaXRlbSA9PiAhZmFpbGVkSWRzLmhhcyhpdGVtLmlkKSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnRPYmplY3Quc3RlcHBlci5uZXh0KCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgZXZlbnRPYmplY3Quc3RlcHBlci5uZXh0KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydE9iamVjdFRvQ1NWRmlsZShkYXRhOiBhbnkpOiBGaWxlIHtcbiAgICBjb25zdCBmdWxsQ3N2SGVhZGVycyA9IEVTVENzdkhlYWRlcnM7XG5cbiAgICBjb25zdCBjc3ZIZWFkZXJzID0gZnVsbENzdkhlYWRlcnMuam9pbignOycpICsgJ1xcbic7XG4gICAgY29uc3QgZGF0YVRvU2VuZCA9IGRhdGEubWFwKGVsID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIElEOiBlbC5pZCxcbiAgICAgICAgQVVUSF9UWVBFOiAnQ0VSVElGSUNBVEVTJyxcbiAgICAgICAgRU5ST0xMTUVOVF9PVFA6IGVsLm9uZVRpbWVQYXNzd29yZCxcbiAgICAgICAgUEFUSDogZWwuZ3JvdXA/LmlkIHx8ICcnLFxuICAgICAgICBURU5BTlQ6IGVsLnRlbmFudD8uaWQgfHwgJydcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBjc3ZSb3dzID0gZGF0YVRvU2VuZFxuICAgICAgLm1hcChyb3cgPT4gZnVsbENzdkhlYWRlcnMubWFwKGhlYWRlciA9PiByb3dbaGVhZGVyXSA/PyAnJykuam9pbignOycpKVxuICAgICAgLmpvaW4oJ1xcbicpO1xuXG4gICAgY29uc3QgY3N2Q29udGVudCA9IGNzdkhlYWRlcnMgKyBjc3ZSb3dzO1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbiAgICByZXR1cm4gbmV3IEZpbGUoW2Jsb2JdLCBgRVNUUmVnaXN0cmF0aW9uRmlsZS5jc3ZgLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSk7XG4gIH1cblxuICBAbWVtb2l6ZSgpXG4gIHByaXZhdGUgY2FuTG9hZFRlbmFudHMkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMudGVuYW50VUlTZXJ2aWNlLmlzTWFuYWdlbWVudFRlbmFudCgpKSkucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gIH1cblxuICBAbWVtb2l6ZSgpXG4gIHByaXZhdGUgZ2V0VGVuYW50cyQoKTogT2JzZXJ2YWJsZTxJUmVzdWx0TGlzdDxJVGVuYW50Pj4ge1xuICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMudGVuYW50U2VydmljZS5saXN0KHRoaXMuRklMVEVSKSkpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuICB9XG5cbiAgQG1lbW9pemUoKVxuICBwcml2YXRlIGdldEdyb3VwcyQoKTogT2JzZXJ2YWJsZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+IHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT5cbiAgICAgIGZyb20oXG4gICAgICAgIHRoaXMuaW52ZW50b3J5U2VydmljZS5saXN0UXVlcnkoXG4gICAgICAgICAgeyBfX2ZpbHRlcjogeyBfX2hhczogJ2M4eV9Jc0RldmljZUdyb3VwJyB9LCBfX29yZGVyYnk6IFt7IG5hbWU6IDEgfV0gfSxcbiAgICAgICAgICB7IC4uLnRoaXMuRklMVEVSIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgICkucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gIH1cbn1cbiIsIjxjOHktbW9kYWxcbiAgW3RpdGxlXT1cIidSZWdpc3RlciBkZXZpY2VzJyB8IHRyYW5zbGF0ZVwiXG4gIFtoZWFkZXJDbGFzc2VzXT1cIidkaWFsb2ctaGVhZGVyJ1wiXG4gIFtjdXN0b21Gb290ZXJdPVwidHJ1ZVwiXG4+XG4gIDxuZy1jb250YWluZXIgYzh5LW1vZGFsLXRpdGxlPlxuICAgIDxzcGFuIFtjOHlJY29uXT1cIidjOHktZGV2aWNlLWNvbm5lY3QnXCI+PC9zcGFuPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGM4eS1zdGVwcGVyIFtoaWRlU3RlcFByb2dyZXNzXT1cInRydWVcIiBsaW5lYXIgYzh5LW1vZGFsLWJvZHk+XG4gICAgPGNkay1zdGVwIFtzdGVwQ29udHJvbF09XCJmb3JtXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgc3RpY2t5LXRvcCBiZy1jb21wb25lbnRcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LW1lZGl1bSB0ZXh0LTE2IHNlcGFyYXRvci1ib3R0b20gcC0xNlwiIHRyYW5zbGF0ZT5SZWdpc3RlciBnZW5lcmFsIGRldmljZXM8L3A+XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgIGNsYXNzPVwiYzh5LXN3aXRjaCBtLTI0IGEtaS1jZW50ZXJcIlxuICAgICAgICAgIHRpdGxlPVwie3sgJ0NyZWF0ZSBkZXZpY2UgY2VydGlmaWNhdGVzIGR1cmluZyBkZXZpY2UgcmVnaXN0cmF0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgZm9yPVwidXNlRVNUXCJcbiAgICAgICAgICAqbmdJZj1cImNlcnRpZmljYXRlQXV0aG9yaXR5RmVhdHVyZUVuYWJsZWQgfCBhc3luY1wiXG4gICAgICAgID5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBuYW1lPVwidXNlRVNUXCJcbiAgICAgICAgICAgIGlkPVwidXNlRVNUXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInVzZUVTVCQuZ2V0VmFsdWUoKVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1c2VFU1QkLm5leHQoJGV2ZW50KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3sgJ0NyZWF0ZSBkZXZpY2UgY2VydGlmaWNhdGVzIGR1cmluZyBkZXZpY2UgcmVnaXN0cmF0aW9uJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHBcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgcG9wb3Zlcj1cInt7ICdUaGUgZGV2aWNlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGluY2x1ZGVzIGNyZWF0aW5nIGRldmljZSBjZXJ0aWZpY2F0ZXMsIHdoaWNoIGFyZSBpc3N1ZWQgYnkgdGhlIHRlbmFudFxcJ3MgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IChDQSkuJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPGZvcm1seS1mb3JtXG4gICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgICAgICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc1wiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtbHktZ3JvdXAtYXJyYXktY29scyBkLWJsb2NrIHAtbC0yNCBwLWItMjQgbWluLWhlaWdodC1maXQgcC1yLThcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsncC10LTI0JyA6ICEoY2VydGlmaWNhdGVBdXRob3JpdHlGZWF0dXJlRW5hYmxlZCB8IGFzeW5jKX1cIlxuICAgICAgICA+PC9mb3JtbHktZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGM4eS1zdGVwcGVyLWJ1dHRvbnNcbiAgICAgICAgKG9uTmV4dCk9XCJyZWdpc3RlckRldmljZSgkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2FuY2VsKT1cImJzTW9kYWxSZWYuaGlkZSgpXCJcbiAgICAgICAgW3Nob3dCdXR0b25zXT1cInsgY2FuY2VsOiB0cnVlLCBuZXh0OiB0cnVlIH1cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIWZvcm0/LnZhbGlkXCJcbiAgICAgICAgW3BlbmRpbmddPVwiaXNMb2FkaW5nJCB8IGFzeW5jXCJcbiAgICAgICAgY2xhc3M9XCJzdGlja3ktYm90dG9tIGQtYmxvY2sgcC10LTE2IHAtYi0xNiBzZXBhcmF0b3ItdG9wIGJnLWxldmVsLTBcIlxuICAgICAgPjwvYzh5LXN0ZXBwZXItYnV0dG9ucz5cbiAgICA8L2Nkay1zdGVwPlxuICAgIDxjZGstc3RlcCBzdGF0ZT1cImZpbmFsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0yNCBtaW4taGVpZ2h0LWZpdFwiPlxuICAgICAgICA8Yzh5LW9wZXJhdGlvbi1yZXN1bHRcbiAgICAgICAgICAqbmdJZj1cInN1Y2Nlc3MubGVuZ3RoID09PSAxICYmIGZhaWxlZC5sZW5ndGggPT09IDBcIlxuICAgICAgICAgIHRleHQ9XCJ7eyAnRGV2aWNlIHJlZ2lzdGVyZWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBbc2l6ZV09XCI4NFwiXG4gICAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICAgIHR5cGU9XCJzdWNjZXNzXCJcbiAgICAgICAgICBjbGFzcz1cImxlYWRcIlxuICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICAgICAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgICAgICAgKm5nSWY9XCJzdWNjZXNzLmxlbmd0aCA9PT0gMCAmJiBmYWlsZWQubGVuZ3RoID09PSAxXCJcbiAgICAgICAgICB0ZXh0PVwie3sgJ0ZhaWxlZCB0byByZWdpc3RlciBkZXZpY2UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBbc2l6ZV09XCI4NFwiXG4gICAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICAgIHR5cGU9XCJlcnJvclwiXG4gICAgICAgICAgY2xhc3M9XCJsZWFkXCJcbiAgICAgICAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN1Y2Nlc3MubGVuZ3RoID4gMSB8fCBmYWlsZWQubGVuZ3RoID4gMVwiPlxuICAgICAgICAgIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICAgICAgICAgKm5nSWY9XCJmYWlsZWQubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgIFt0ZXh0XT1cIlxuICAgICAgICAgICAgICAne3sgc3VjY2Vzc2Z1bERldmljZXNDb3VudCB9fSBkZXZpY2VzIHJlZ2lzdGVyZWQnXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgc3VjY2Vzc2Z1bERldmljZXNDb3VudDogc3VjY2Vzcy5sZW5ndGggfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtzaXplXT1cIjg0XCJcbiAgICAgICAgICAgIFt2ZXJ0aWNhbF09XCJ0cnVlXCJcbiAgICAgICAgICAgIHR5cGU9XCJzdWNjZXNzXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGVhZFwiXG4gICAgICAgICAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG4gICAgICAgICAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgICAgICAgICAqbmdJZj1cInN1Y2Nlc3MubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgIFt0ZXh0XT1cIlxuICAgICAgICAgICAgICAne3sgZmFpbGVkRGV2aWNlc0NvdW50IH19IGRldmljZXMgZmFpbGVkIHRvIHJlZ2lzdGVyJ1xuICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IGZhaWxlZERldmljZXNDb3VudDogZmFpbGVkLmxlbmd0aCB9XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW3NpemVdPVwiODRcIlxuICAgICAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICAgICAgdHlwZT1cImVycm9yXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGVhZFwiXG4gICAgICAgICAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzdWNjZXNzLmxlbmd0aCA+IDAgJiYgZmFpbGVkLmxlbmd0aCA+IDBcIiBjbGFzcz1cInAtbC0yNCBwLXItMjQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICA8Yzh5LW9wZXJhdGlvbi1yZXN1bHRcbiAgICAgICAgICAgIHRleHQ9XCJ7eyAnU2V2ZXJhbCBkZXZpY2VzIGZhaWxlZCB0byByZWdpc3RlcicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgW3NpemVdPVwiODRcIlxuICAgICAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICAgICAgdHlwZT1cImVycm9yXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGVhZFwiXG4gICAgICAgICAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgIG5nTm9uQmluZGFibGVcbiAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7IGNvdW50OiBmYWlsZWQubGVuZ3RoLCB0b3RhbDogZmFpbGVkLmxlbmd0aCArIHN1Y2Nlc3MubGVuZ3RoIH1cIlxuICAgICAgICAgICAgY2xhc3M9XCJwLWItMTYgdGV4dC1kYW5nZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFJlZ2lzdHJhdGlvbiBmYWlsZWQgZm9yIHt7IGNvdW50IH19IGRldmljZXMgb3V0IG9mIHt7IHRvdGFsIH19LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tYi04IHAtbC0yNCBwLXItMjRcIiAqbmdJZj1cInN1Y2Nlc3MubGVuZ3RoID4gMFwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICBUdXJuIG9uIHRoZSByZWdpc3RlcmVkIGRldmljZShzKSBhbmQgd2FpdCBmb3IgY29ubmVjdGlvbihzKSB0byBiZSBlc3RhYmxpc2hlZC4gT25jZSBhXG4gICAgICAgICAgZGV2aWNlIGlzIGNvbm5lY3RlZCwgaXRzIHN0YXR1cyB3aWxsIGNoYW5nZSB0byBcIlBlbmRpbmcgYWNjZXB0YW5jZVwiLiBZb3Ugd2lsbCBuZWVkIHRvXG4gICAgICAgICAgYXBwcm92ZSBpdCBieSBjbGlja2luZyBvbiB0aGUgXCJBY2NlcHRcIiBidXR0b24uXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxjOHktbGlzdC1ncm91cCBjbGFzcz1cInNlcGFyYXRvci10b3AgbS10LTE2XCI+XG4gICAgICAgICAgPGM4eS1saSAqbmdGb3I9XCJsZXQgZmFpbCBvZiBmYWlsZWRcIj5cbiAgICAgICAgICAgIDxjOHktbGktaWNvbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgW2ljb25dPVwiJ2JhbidcIj48L2M4eS1saS1pY29uPlxuICAgICAgICAgICAgPHA+e3sgZmFpbD8uaWQgfX08L3A+XG4gICAgICAgICAgICA8c21hbGw+e3sgZmFpbD8ubWVzc2FnZSB8IHRyYW5zbGF0ZSB9fTwvc21hbGw+XG4gICAgICAgICAgICA8Yzh5LWxpLWNvbGxhcHNlPlxuICAgICAgICAgICAgICA8cHJlPjxjb2RlPnt7IGZhaWw/LmRldGFpbHMgfCBqc29uIH19PC9jb2RlPjwvcHJlPlxuICAgICAgICAgICAgPC9jOHktbGktY29sbGFwc2U+XG4gICAgICAgICAgPC9jOHktbGk+XG5cbiAgICAgICAgICA8Yzh5LWxpICpuZ0Zvcj1cImxldCBzIG9mIHN1Y2Nlc3NcIj5cbiAgICAgICAgICAgIDxjOHktbGktaWNvbiBjbGFzcz1cInRleHQtc3VjY2Vzc1wiIFtpY29uXT1cIidjaGVjay1jaXJjbGUnXCI+PC9jOHktbGktaWNvbj5cbiAgICAgICAgICAgIHt7IHM/LmlkIH19XG4gICAgICAgICAgPC9jOHktbGk+XG4gICAgICAgIDwvYzh5LWxpc3QtZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxjOHktc3RlcHBlci1idXR0b25zXG4gICAgICAgIGNsYXNzPVwic3RpY2t5LWJvdHRvbSBkLWJsb2NrIHAtdC0xNiBwLWItMTYgc2VwYXJhdG9yLXRvcCBiZy1sZXZlbC0wXCJcbiAgICAgICAgKG9uQ3VzdG9tKT1cImJzTW9kYWxSZWYuaGlkZSgpXCJcbiAgICAgICAgKG9uQmFjayk9XCJmaXhFcnJvcnMoJGV2ZW50LCBmYWlsZWQpXCJcbiAgICAgICAgW3Nob3dCdXR0b25zXT1cInsgYmFjazogZmFpbGVkLmxlbmd0aCA+IDAsIGN1c3RvbTogdHJ1ZSB9XCJcbiAgICAgICAgW2xhYmVsc109XCJ7IGJhY2s6ICdGaXggZXJyb3JzJywgY3VzdG9tOiAnQ2xvc2UnIH1cIlxuICAgICAgPjwvYzh5LXN0ZXBwZXItYnV0dG9ucz5cbiAgICA8L2Nkay1zdGVwPlxuICA8L2M4eS1zdGVwcGVyPlxuPC9jOHktbW9kYWw+XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYzh5LW5neC1jb21wb25lbnRzLXJlbW90ZS1hY2Nlc3MtY29uZmlndXJhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9yZW1vdGUtYWNjZXNzL2NvbmZpZ3VyYXRpb25zL2M4eS1uZ3gtY29tcG9uZW50cy1yZW1vdGUtYWNjZXNzLWNvbmZpZ3VyYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -0,0 +1,16 @@
1
+ import { hookRoute, ViewContext } from '@c8y/ngx-components';
2
+ import { gettext } from '@c8y/ngx-components/gettext';
3
+ import { RemoteAccessConfigurationListComponent } from './remote-access-configuration-list/remote-access-configuration-list.component';
4
+ import { canActivateRemoteAccess } from '@c8y/ngx-components/remote-access/data';
5
+ export * from './remote-access-configuration-list/remote-access-configuration-list.component';
6
+ export const remoteAccessConfigurationListProviders = [
7
+ hookRoute({
8
+ component: RemoteAccessConfigurationListComponent,
9
+ label: gettext('Remote access'),
10
+ path: 'remote_access',
11
+ icon: 'window-restore',
12
+ context: ViewContext.Device,
13
+ canActivate: [canActivateRemoteAccess]
14
+ })
15
+ ];
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9yZW1vdGUtYWNjZXNzL2NvbmZpZ3VyYXRpb25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLCtFQUErRSxDQUFDO0FBQ3ZJLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRWpGLGNBQWMsK0VBQStFLENBQUM7QUFFOUYsTUFBTSxDQUFDLE1BQU0sc0NBQXNDLEdBQUc7SUFDcEQsU0FBUyxDQUFDO1FBQ1IsU0FBUyxFQUFFLHNDQUFzQztRQUNqRCxLQUFLLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUMvQixJQUFJLEVBQUUsZUFBZTtRQUNyQixJQUFJLEVBQUUsZ0JBQWdCO1FBQ3RCLE9BQU8sRUFBRSxXQUFXLENBQUMsTUFBTTtRQUMzQixXQUFXLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztLQUN2QyxDQUFDO0NBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhvb2tSb3V0ZSwgVmlld0NvbnRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2dldHRleHQnO1xuaW1wb3J0IHsgUmVtb3RlQWNjZXNzQ29uZmlndXJhdGlvbkxpc3RDb21wb25lbnQgfSBmcm9tICcuL3JlbW90ZS1hY2Nlc3MtY29uZmlndXJhdGlvbi1saXN0L3JlbW90ZS1hY2Nlc3MtY29uZmlndXJhdGlvbi1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjYW5BY3RpdmF0ZVJlbW90ZUFjY2VzcyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvcmVtb3RlLWFjY2Vzcy9kYXRhJztcblxuZXhwb3J0ICogZnJvbSAnLi9yZW1vdGUtYWNjZXNzLWNvbmZpZ3VyYXRpb24tbGlzdC9yZW1vdGUtYWNjZXNzLWNvbmZpZ3VyYXRpb24tbGlzdC5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgcmVtb3RlQWNjZXNzQ29uZmlndXJhdGlvbkxpc3RQcm92aWRlcnMgPSBbXG4gIGhvb2tSb3V0ZSh7XG4gICAgY29tcG9uZW50OiBSZW1vdGVBY2Nlc3NDb25maWd1cmF0aW9uTGlzdENvbXBvbmVudCxcbiAgICBsYWJlbDogZ2V0dGV4dCgnUmVtb3RlIGFjY2VzcycpLFxuICAgIHBhdGg6ICdyZW1vdGVfYWNjZXNzJyxcbiAgICBpY29uOiAnd2luZG93LXJlc3RvcmUnLFxuICAgIGNvbnRleHQ6IFZpZXdDb250ZXh0LkRldmljZSxcbiAgICBjYW5BY3RpdmF0ZTogW2NhbkFjdGl2YXRlUmVtb3RlQWNjZXNzXVxuICB9KVxuXTtcbiJdfQ==