@tuki-io/tuki-widgets 0.0.72 → 0.0.73

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 (619) hide show
  1. package/di2mt/api/api.endpoints.d.ts +20 -0
  2. package/di2mt/index.d.ts +5 -0
  3. package/di2mt/{public-api.ts → public-api.d.ts} +12 -26
  4. package/di2mt/shared/components/card/card.component.d.ts +6 -0
  5. package/di2mt/shared/components/chart-card/chart-card.component.d.ts +22 -0
  6. package/di2mt/shared/components/stat-card/stat-card.component.d.ts +14 -0
  7. package/di2mt/shared/components/status-list-card/status-list-card.component.d.ts +7 -0
  8. package/di2mt/shared/components/summary-card/summary-card.component.d.ts +9 -0
  9. package/di2mt/shared/components/table-filters/table-filters.component.d.ts +14 -0
  10. package/di2mt/shared/material.module.d.ts +15 -0
  11. package/di2mt/shared/services/api.service.d.ts +20 -0
  12. package/di2mt/shared/shared.module.d.ts +16 -0
  13. package/di2mt/shared/types/constants.d.ts +7 -0
  14. package/di2mt/shared/types/data-table.d.ts +5 -0
  15. package/di2mt/shared/types/table/filter.d.ts +16 -0
  16. package/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.d.ts +48 -0
  17. package/di2mt/widgets/site-upgrade/site-upgrade.module.d.ts +12 -0
  18. package/di2mt/widgets/site-upgrade/site-upgrade.service.d.ts +12 -0
  19. package/di2mt/widgets/site-upgrade/types/{user-upgrade.ts → user-upgrade.d.ts} +14 -15
  20. package/di2mt/widgets/upgrade-overview/cards/already-upgraded-sites/already-upgraded-sites-card.component.d.ts +19 -0
  21. package/di2mt/widgets/upgrade-overview/cards/already-upgraded-users/already-upgraded-users-card.component.d.ts +19 -0
  22. package/di2mt/widgets/upgrade-overview/cards/preconditions-status-list/preconditions-status-list-card.component.d.ts +18 -0
  23. package/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.d.ts +19 -0
  24. package/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.d.ts +19 -0
  25. package/di2mt/widgets/upgrade-overview/cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component.d.ts +15 -0
  26. package/di2mt/widgets/upgrade-overview/cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component.d.ts +18 -0
  27. package/di2mt/widgets/upgrade-overview/types/{upgrade-overview.ts → upgrade-overview.d.ts} +56 -58
  28. package/di2mt/widgets/upgrade-overview/upgrade-overview.module.d.ts +15 -0
  29. package/di2mt/widgets/upgrade-overview/upgrade-overview.service.d.ts +17 -0
  30. package/di2mt/widgets/user-upgrade/types/{user-upgrade.ts → user-upgrade.d.ts} +16 -18
  31. package/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.d.ts +49 -0
  32. package/di2mt/widgets/user-upgrade/user-upgrade.module.d.ts +12 -0
  33. package/di2mt/widgets/user-upgrade/user-upgrade.service.d.ts +14 -0
  34. package/esm2020/di2mt/api/api.endpoints.mjs +21 -0
  35. package/esm2020/di2mt/public-api.mjs +23 -0
  36. package/esm2020/di2mt/shared/components/card/card.component.mjs +13 -0
  37. package/esm2020/di2mt/shared/components/chart-card/chart-card.component.mjs +62 -0
  38. package/esm2020/di2mt/shared/components/stat-card/stat-card.component.mjs +47 -0
  39. package/esm2020/di2mt/shared/components/status-list-card/status-list-card.component.mjs +17 -0
  40. package/esm2020/di2mt/shared/components/summary-card/summary-card.component.mjs +36 -0
  41. package/esm2020/di2mt/shared/components/table-filters/table-filters.component.mjs +37 -0
  42. package/esm2020/di2mt/shared/material.module.mjs +76 -0
  43. package/esm2020/di2mt/shared/services/api.service.mjs +86 -0
  44. package/esm2020/di2mt/shared/shared.module.mjs +61 -0
  45. package/esm2020/di2mt/shared/types/constants.mjs +12 -0
  46. package/esm2020/di2mt/shared/types/data-table.mjs +2 -0
  47. package/esm2020/di2mt/shared/types/table/filter.mjs +2 -0
  48. package/esm2020/di2mt/tuki-io-tuki-widgets-di2mt.mjs +5 -0
  49. package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +182 -0
  50. package/esm2020/di2mt/widgets/site-upgrade/site-upgrade.module.mjs +40 -0
  51. package/esm2020/di2mt/widgets/site-upgrade/site-upgrade.service.mjs +43 -0
  52. package/esm2020/di2mt/widgets/site-upgrade/types/user-upgrade.mjs +3 -0
  53. package/esm2020/di2mt/widgets/upgrade-overview/cards/already-upgraded-sites/already-upgraded-sites-card.component.mjs +64 -0
  54. package/esm2020/di2mt/widgets/upgrade-overview/cards/already-upgraded-users/already-upgraded-users-card.component.mjs +64 -0
  55. package/esm2020/di2mt/widgets/upgrade-overview/cards/preconditions-status-list/preconditions-status-list-card.component.mjs +68 -0
  56. package/esm2020/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.mjs +45 -0
  57. package/esm2020/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.mjs +45 -0
  58. package/esm2020/di2mt/widgets/upgrade-overview/cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component.mjs +64 -0
  59. package/esm2020/di2mt/widgets/upgrade-overview/cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component.mjs +74 -0
  60. package/esm2020/di2mt/widgets/upgrade-overview/types/upgrade-overview.mjs +2 -0
  61. package/esm2020/di2mt/widgets/upgrade-overview/upgrade-overview.module.mjs +59 -0
  62. package/esm2020/di2mt/widgets/upgrade-overview/upgrade-overview.service.mjs +82 -0
  63. package/esm2020/di2mt/widgets/user-upgrade/types/user-upgrade.mjs +3 -0
  64. package/esm2020/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.mjs +197 -0
  65. package/esm2020/di2mt/widgets/user-upgrade/user-upgrade.module.mjs +40 -0
  66. package/esm2020/di2mt/widgets/user-upgrade/user-upgrade.service.mjs +58 -0
  67. package/esm2020/lib/widgets.component.mjs +22 -0
  68. package/esm2020/lib/widgets.module.mjs +21 -0
  69. package/esm2020/lib/widgets.service.mjs +14 -0
  70. package/esm2020/public-api.mjs +7 -0
  71. package/esm2020/tuki-io-tuki-widgets.mjs +5 -0
  72. package/esm2020/user-device-manage/public-api.mjs +9 -0
  73. package/esm2020/user-device-manage/src/app.constants.mjs +95 -0
  74. package/esm2020/user-device-manage/src/classes/device.mjs +85 -0
  75. package/esm2020/user-device-manage/src/classes/line-association-interface.mjs +2 -0
  76. package/esm2020/user-device-manage/src/classes/line-association.mjs +121 -0
  77. package/esm2020/user-device-manage/src/classes/line-call-info-display.mjs +10 -0
  78. package/esm2020/user-device-manage/src/classes/line-directory.mjs +27 -0
  79. package/esm2020/user-device-manage/src/classes/line.mjs +18 -0
  80. package/esm2020/user-device-manage/src/classes/notification.mjs +32 -0
  81. package/esm2020/user-device-manage/src/classes/recording-options.mjs +7 -0
  82. package/esm2020/user-device-manage/src/classes/simplified-user.mjs +111 -0
  83. package/esm2020/user-device-manage/src/classes/site-defaults.mjs +21 -0
  84. package/esm2020/user-device-manage/src/classes/translation-pattern.mjs +32 -0
  85. package/esm2020/user-device-manage/src/classes/types.mjs +24 -0
  86. package/esm2020/user-device-manage/src/common-functions.mjs +19 -0
  87. package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +34 -0
  88. package/esm2020/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.mjs +31 -0
  89. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.mjs +16 -0
  90. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.mjs +64 -0
  91. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line.component.mjs +179 -0
  92. package/esm2020/user-device-manage/src/device-list/device-list.component.mjs +24 -0
  93. package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +335 -0
  94. package/esm2020/user-device-manage/src/environments/environment.mjs +11 -0
  95. package/esm2020/user-device-manage/src/interseptors/auth.interceptor.mjs +36 -0
  96. package/esm2020/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +74 -0
  97. package/esm2020/user-device-manage/src/material.module.mjs +192 -0
  98. package/esm2020/user-device-manage/src/notifications/notification.component.mjs +35 -0
  99. package/esm2020/user-device-manage/src/services/api.service.mjs +79 -0
  100. package/esm2020/user-device-manage/src/services/device.service.mjs +83 -0
  101. package/esm2020/user-device-manage/src/services/dns.service.mjs +104 -0
  102. package/esm2020/user-device-manage/src/services/line.service.mjs +76 -0
  103. package/esm2020/user-device-manage/src/services/notification.service.mjs +62 -0
  104. package/esm2020/user-device-manage/src/services/removeKynFromIBM.service.mjs +25 -0
  105. package/esm2020/user-device-manage/src/services/site-settings.service.mjs +70 -0
  106. package/esm2020/user-device-manage/src/services/sorting-utils.service.mjs +197 -0
  107. package/esm2020/user-device-manage/src/services/user.service.mjs +243 -0
  108. package/esm2020/user-device-manage/src/services/utils.service.mjs +87 -0
  109. package/esm2020/user-device-manage/src/services/validation.service.mjs +760 -0
  110. package/esm2020/user-device-manage/src/user-device-manage.module.mjs +107 -0
  111. package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +14 -0
  112. package/esm2020/user-device-manage/tuki-io-tuki-widgets-user-device-manage.mjs +5 -0
  113. package/esm2020/user-manage/public-api.mjs +7 -0
  114. package/esm2020/user-manage/src/app.constants.mjs +50 -0
  115. package/esm2020/user-manage/src/classes/device.mjs +37 -0
  116. package/esm2020/user-manage/src/classes/line-association-interface.mjs +2 -0
  117. package/esm2020/user-manage/src/classes/line-association.mjs +110 -0
  118. package/esm2020/user-manage/src/classes/line-call-info-display.mjs +10 -0
  119. package/esm2020/user-manage/src/classes/line-directory.mjs +27 -0
  120. package/esm2020/user-manage/src/classes/line.mjs +18 -0
  121. package/esm2020/user-manage/src/classes/notification.mjs +32 -0
  122. package/esm2020/user-manage/src/classes/pagination.mjs +8 -0
  123. package/esm2020/user-manage/src/classes/recording-options.mjs +7 -0
  124. package/esm2020/user-manage/src/classes/simplified-user.mjs +109 -0
  125. package/esm2020/user-manage/src/classes/table-data.mjs +2 -0
  126. package/esm2020/user-manage/src/classes/translation-pattern.mjs +32 -0
  127. package/esm2020/user-manage/src/classes/user-list.mjs +10 -0
  128. package/esm2020/user-manage/src/common-functions.mjs +19 -0
  129. package/esm2020/user-manage/src/device-list/device-list.component.mjs +24 -0
  130. package/esm2020/user-manage/src/environments/environment.mjs +11 -0
  131. package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +36 -0
  132. package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +74 -0
  133. package/esm2020/user-manage/src/material.module.mjs +188 -0
  134. package/esm2020/user-manage/src/notifications/notification.component.mjs +35 -0
  135. package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +25 -0
  136. package/esm2020/user-manage/src/services/api.service.mjs +79 -0
  137. package/esm2020/user-manage/src/services/dns.service.mjs +110 -0
  138. package/esm2020/user-manage/src/services/line.service.mjs +34 -0
  139. package/esm2020/user-manage/src/services/notification.service.mjs +62 -0
  140. package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +25 -0
  141. package/esm2020/user-manage/src/services/site-settings.service.mjs +36 -0
  142. package/esm2020/user-manage/src/services/sorting-utils.service.mjs +197 -0
  143. package/esm2020/user-manage/src/services/user.service.mjs +207 -0
  144. package/esm2020/user-manage/src/services/users-search.service.mjs +50 -0
  145. package/esm2020/user-manage/src/services/utils.service.mjs +73 -0
  146. package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +65 -0
  147. package/esm2020/user-manage/src/user-calling/user-calling.component.mjs +78 -0
  148. package/esm2020/user-manage/src/user-info/user-info.component.mjs +20 -0
  149. package/esm2020/user-manage/src/user-manage-widget.component.mjs +208 -0
  150. package/esm2020/user-manage/src/user-manage.module.mjs +99 -0
  151. package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +14 -0
  152. package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +43 -0
  153. package/esm2020/user-manage/tuki-io-tuki-widgets-user-manage.mjs +5 -0
  154. package/esm2020/users-list/public-api.mjs +9 -0
  155. package/esm2020/users-list/src/app.constants.mjs +54 -0
  156. package/esm2020/users-list/src/classes/app-location.mjs +32 -0
  157. package/esm2020/users-list/src/classes/device.mjs +7 -0
  158. package/esm2020/users-list/src/classes/line.mjs +18 -0
  159. package/esm2020/users-list/src/classes/move-user.mjs +178 -0
  160. package/esm2020/users-list/src/classes/notification.mjs +31 -0
  161. package/esm2020/users-list/src/classes/pagination.mjs +8 -0
  162. package/esm2020/users-list/src/classes/simlified-user.mjs +50 -0
  163. package/esm2020/users-list/src/classes/table-data.mjs +2 -0
  164. package/esm2020/users-list/src/classes/user-list.mjs +14 -0
  165. package/esm2020/users-list/src/material.module.mjs +209 -0
  166. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.mjs +38 -0
  167. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.mjs +23 -0
  168. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.mjs +189 -0
  169. package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +38 -0
  170. package/esm2020/users-list/src/services/api-webex.service.mjs +18 -0
  171. package/esm2020/users-list/src/services/api.service.mjs +78 -0
  172. package/esm2020/users-list/src/services/dns.service.mjs +120 -0
  173. package/esm2020/users-list/src/services/events-communication.service.mjs +14 -0
  174. package/esm2020/users-list/src/services/move-user.service.mjs +53 -0
  175. package/esm2020/users-list/src/services/notification.service.mjs +62 -0
  176. package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +25 -0
  177. package/esm2020/users-list/src/services/site-settings.service.mjs +27 -0
  178. package/esm2020/users-list/src/services/user.service.mjs +142 -0
  179. package/esm2020/users-list/src/services/users-search.service.mjs +122 -0
  180. package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +34 -0
  181. package/esm2020/users-list/src/users-list.component.mjs +287 -0
  182. package/esm2020/users-list/src/users-list.module.mjs +92 -0
  183. package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +14 -0
  184. package/esm2020/users-list/src/utils/common-functions.mjs +32 -0
  185. package/esm2020/users-list/src/utils/pagination/pagination.component.mjs +43 -0
  186. package/esm2020/users-list/src/utils/utils.service.mjs +73 -0
  187. package/esm2020/users-list/tuki-io-tuki-widgets-users-list.mjs +5 -0
  188. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +1469 -0
  189. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -0
  190. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +3402 -0
  191. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -0
  192. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +2124 -0
  193. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -0
  194. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +1994 -0
  195. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -0
  196. package/fesm2015/tuki-io-tuki-widgets.mjs +63 -0
  197. package/fesm2015/tuki-io-tuki-widgets.mjs.map +1 -0
  198. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +1460 -0
  199. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -0
  200. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +3364 -0
  201. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -0
  202. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +2107 -0
  203. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -0
  204. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +1973 -0
  205. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -0
  206. package/fesm2020/tuki-io-tuki-widgets.mjs +63 -0
  207. package/fesm2020/tuki-io-tuki-widgets.mjs.map +1 -0
  208. package/index.d.ts +5 -0
  209. package/lib/widgets.component.d.ts +8 -0
  210. package/lib/widgets.module.d.ts +7 -0
  211. package/lib/widgets.service.d.ts +6 -0
  212. package/package.json +65 -13
  213. package/{src/public-api.ts → public-api.d.ts} +0 -4
  214. package/user-device-manage/index.d.ts +5 -0
  215. package/user-device-manage/src/app.constants.d.ts +74 -0
  216. package/user-device-manage/src/classes/device.d.ts +233 -0
  217. package/user-device-manage/src/classes/line-association-interface.d.ts +45 -0
  218. package/user-device-manage/src/classes/line-association.d.ts +62 -0
  219. package/user-device-manage/src/classes/line-call-info-display.d.ts +11 -0
  220. package/user-device-manage/src/classes/line-directory.d.ts +15 -0
  221. package/user-device-manage/src/classes/line.d.ts +140 -0
  222. package/user-device-manage/src/classes/notification.d.ts +18 -0
  223. package/user-device-manage/src/classes/recording-options.d.ts +5 -0
  224. package/user-device-manage/src/classes/simplified-user.d.ts +52 -0
  225. package/user-device-manage/src/classes/site-defaults.d.ts +146 -0
  226. package/user-device-manage/src/classes/translation-pattern.d.ts +19 -0
  227. package/user-device-manage/src/classes/types.d.ts +19 -0
  228. package/user-device-manage/src/common-functions.d.ts +1 -0
  229. package/user-device-manage/src/confirm-dialog/info-dialog.component.d.ts +20 -0
  230. package/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.d.ts +15 -0
  231. package/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.d.ts +7 -0
  232. package/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.d.ts +24 -0
  233. package/user-device-manage/src/device-associated-line/device-associated-line.component.d.ts +89 -0
  234. package/user-device-manage/src/device-list/device-list.component.d.ts +11 -0
  235. package/user-device-manage/src/device-manage-widget.component.d.ts +71 -0
  236. package/user-device-manage/src/environments/environment.d.ts +9 -0
  237. package/user-device-manage/src/interseptors/auth.interceptor.d.ts +9 -0
  238. package/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.d.ts +35 -0
  239. package/user-device-manage/src/material.module.d.ts +29 -0
  240. package/user-device-manage/src/notifications/notification.component.d.ts +19 -0
  241. package/user-device-manage/src/services/api.service.d.ts +20 -0
  242. package/user-device-manage/src/services/device.service.d.ts +21 -0
  243. package/user-device-manage/src/services/dns.service.d.ts +14 -0
  244. package/user-device-manage/src/services/line.service.d.ts +33 -0
  245. package/user-device-manage/src/services/notification.service.d.ts +18 -0
  246. package/user-device-manage/src/services/removeKynFromIBM.service.d.ts +8 -0
  247. package/user-device-manage/src/services/site-settings.service.d.ts +25 -0
  248. package/user-device-manage/src/services/sorting-utils.service.d.ts +26 -0
  249. package/user-device-manage/src/services/user.service.d.ts +51 -0
  250. package/user-device-manage/src/services/utils.service.d.ts +10 -0
  251. package/user-device-manage/src/services/validation.service.d.ts +165 -0
  252. package/user-device-manage/src/user-device-manage.module.d.ts +22 -0
  253. package/user-device-manage/src/utils/app-loader/app-loader.d.ts +6 -0
  254. package/user-manage/index.d.ts +5 -0
  255. package/user-manage/src/app.constants.d.ts +29 -0
  256. package/user-manage/src/classes/device.d.ts +203 -0
  257. package/user-manage/src/classes/line-association-interface.d.ts +40 -0
  258. package/user-manage/src/classes/line-association.d.ts +55 -0
  259. package/user-manage/src/classes/line-call-info-display.d.ts +11 -0
  260. package/user-manage/src/classes/line-directory.d.ts +16 -0
  261. package/user-manage/src/classes/line.d.ts +140 -0
  262. package/user-manage/src/classes/notification.d.ts +18 -0
  263. package/user-manage/src/classes/pagination.d.ts +13 -0
  264. package/user-manage/src/classes/recording-options.d.ts +5 -0
  265. package/user-manage/src/classes/simplified-user.d.ts +50 -0
  266. package/user-manage/src/classes/table-data.d.ts +5 -0
  267. package/user-manage/src/classes/translation-pattern.d.ts +18 -0
  268. package/user-manage/src/classes/user-list.d.ts +34 -0
  269. package/user-manage/src/common-functions.d.ts +1 -0
  270. package/user-manage/src/device-list/device-list.component.d.ts +11 -0
  271. package/user-manage/src/environments/environment.d.ts +9 -0
  272. package/user-manage/src/interseptors/auth.interceptor.d.ts +9 -0
  273. package/user-manage/src/lazy-loading-select/lazy-loading-select.component.d.ts +35 -0
  274. package/user-manage/src/material.module.d.ts +28 -0
  275. package/user-manage/src/notifications/notification.component.d.ts +19 -0
  276. package/user-manage/src/removeKynFromIBM.service.d.ts +8 -0
  277. package/user-manage/src/services/api.service.d.ts +21 -0
  278. package/user-manage/src/services/dns.service.d.ts +14 -0
  279. package/user-manage/src/services/line.service.d.ts +17 -0
  280. package/user-manage/src/services/notification.service.d.ts +18 -0
  281. package/user-manage/src/services/removeKynFromIBM.service.d.ts +8 -0
  282. package/user-manage/src/services/site-settings.service.d.ts +9 -0
  283. package/user-manage/src/services/sorting-utils.service.d.ts +26 -0
  284. package/user-manage/src/services/user.service.d.ts +43 -0
  285. package/user-manage/src/services/users-search.service.d.ts +25 -0
  286. package/user-manage/src/services/utils.service.d.ts +9 -0
  287. package/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.d.ts +24 -0
  288. package/user-manage/src/user-calling/user-calling.component.d.ts +30 -0
  289. package/user-manage/src/user-info/user-info.component.d.ts +9 -0
  290. package/user-manage/src/user-manage-widget.component.d.ts +45 -0
  291. package/user-manage/src/user-manage.module.d.ts +21 -0
  292. package/user-manage/src/utils/app-loader/app-loader.d.ts +6 -0
  293. package/user-manage/src/utils/pagination/pagination.component.d.ts +18 -0
  294. package/users-list/index.d.ts +5 -0
  295. package/users-list/src/app.constants.d.ts +36 -0
  296. package/users-list/src/classes/app-location.d.ts +17 -0
  297. package/users-list/src/classes/device.d.ts +224 -0
  298. package/users-list/src/classes/line.d.ts +140 -0
  299. package/users-list/src/classes/move-user.d.ts +85 -0
  300. package/users-list/src/classes/notification.d.ts +18 -0
  301. package/users-list/src/classes/pagination.d.ts +13 -0
  302. package/users-list/src/classes/simlified-user.d.ts +25 -0
  303. package/users-list/src/classes/table-data.d.ts +5 -0
  304. package/users-list/src/classes/user-list.d.ts +36 -0
  305. package/users-list/src/material.module.d.ts +31 -0
  306. package/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.d.ts +21 -0
  307. package/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.d.ts +12 -0
  308. package/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.d.ts +55 -0
  309. package/users-list/src/move-user-wizard/move-user-wizard.component.d.ts +17 -0
  310. package/users-list/src/services/api-webex.service.d.ts +8 -0
  311. package/users-list/src/services/api.service.d.ts +21 -0
  312. package/users-list/src/services/dns.service.d.ts +18 -0
  313. package/users-list/src/services/events-communication.service.d.ts +8 -0
  314. package/users-list/src/services/move-user.service.d.ts +17 -0
  315. package/users-list/src/services/notification.service.d.ts +18 -0
  316. package/users-list/src/services/removeKynFromIBM.service.d.ts +8 -0
  317. package/users-list/src/services/site-settings.service.d.ts +11 -0
  318. package/users-list/src/services/user.service.d.ts +35 -0
  319. package/users-list/src/services/users-search.service.d.ts +34 -0
  320. package/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.d.ts +20 -0
  321. package/users-list/src/users-list.component.d.ts +60 -0
  322. package/users-list/src/users-list.module.d.ts +18 -0
  323. package/users-list/src/utils/app-loader/app-loader.d.ts +6 -0
  324. package/users-list/src/utils/common-functions.d.ts +2 -0
  325. package/users-list/src/utils/pagination/pagination.component.d.ts +18 -0
  326. package/users-list/src/utils/utils.service.d.ts +9 -0
  327. package/di2mt/api/api.endpoints.ts +0 -20
  328. package/di2mt/assets/icons/already_upgraded.png +0 -0
  329. package/di2mt/assets/icons/check2_icon.png +0 -0
  330. package/di2mt/assets/icons/check_icon.png +0 -0
  331. package/di2mt/assets/icons/expand_icon.png +0 -0
  332. package/di2mt/assets/icons/issue_icon.png +0 -0
  333. package/di2mt/assets/icons/menu_icon.png +0 -0
  334. package/di2mt/assets/icons/ready_to_upgrade.png +0 -0
  335. package/di2mt/assets/icons/search_icon.png +0 -0
  336. package/di2mt/assets/icons/site.png +0 -0
  337. package/di2mt/assets/icons/user.png +0 -0
  338. package/di2mt/assets/icons/warning_icon.png +0 -0
  339. package/di2mt/ng-package.json +0 -7
  340. package/di2mt/shared/components/card/card.component.html +0 -11
  341. package/di2mt/shared/components/card/card.component.scss +0 -48
  342. package/di2mt/shared/components/card/card.component.ts +0 -10
  343. package/di2mt/shared/components/chart-card/chart-card.component.html +0 -15
  344. package/di2mt/shared/components/chart-card/chart-card.component.scss +0 -38
  345. package/di2mt/shared/components/chart-card/chart-card.component.ts +0 -71
  346. package/di2mt/shared/components/index.ts +0 -6
  347. package/di2mt/shared/components/stat-card/stat-card.component.html +0 -57
  348. package/di2mt/shared/components/stat-card/stat-card.component.scss +0 -74
  349. package/di2mt/shared/components/stat-card/stat-card.component.ts +0 -44
  350. package/di2mt/shared/components/status-list-card/status-list-card.component.html +0 -28
  351. package/di2mt/shared/components/status-list-card/status-list-card.component.scss +0 -55
  352. package/di2mt/shared/components/status-list-card/status-list-card.component.ts +0 -11
  353. package/di2mt/shared/components/summary-card/summary-card.component.html +0 -12
  354. package/di2mt/shared/components/summary-card/summary-card.component.scss +0 -76
  355. package/di2mt/shared/components/summary-card/summary-card.component.ts +0 -27
  356. package/di2mt/shared/components/table-filters/table-filters.component.html +0 -28
  357. package/di2mt/shared/components/table-filters/table-filters.component.scss +0 -52
  358. package/di2mt/shared/components/table-filters/table-filters.component.ts +0 -28
  359. package/di2mt/shared/material.module.ts +0 -36
  360. package/di2mt/shared/services/api.service.ts +0 -92
  361. package/di2mt/shared/shared.module.ts +0 -38
  362. package/di2mt/shared/types/constants.ts +0 -14
  363. package/di2mt/shared/types/data-table.ts +0 -5
  364. package/di2mt/shared/types/table/filter.ts +0 -14
  365. package/di2mt/styles/tuki-widgets-theme.scss +0 -13
  366. package/di2mt/styles/variables.scss +0 -92
  367. package/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.html +0 -92
  368. package/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.scss +0 -187
  369. package/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.ts +0 -205
  370. package/di2mt/widgets/site-upgrade/site-upgrade.module.ts +0 -24
  371. package/di2mt/widgets/site-upgrade/site-upgrade.service.ts +0 -45
  372. package/di2mt/widgets/upgrade-overview/cards/already-upgraded-sites/already-upgraded-sites-card.component.ts +0 -52
  373. package/di2mt/widgets/upgrade-overview/cards/already-upgraded-users/already-upgraded-users-card.component.ts +0 -53
  374. package/di2mt/widgets/upgrade-overview/cards/preconditions-status-list/preconditions-status-list-card.component.ts +0 -67
  375. package/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.html +0 -7
  376. package/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.scss +0 -0
  377. package/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.ts +0 -45
  378. package/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.html +0 -7
  379. package/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.scss +0 -0
  380. package/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.ts +0 -45
  381. package/di2mt/widgets/upgrade-overview/cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component.ts +0 -59
  382. package/di2mt/widgets/upgrade-overview/cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component.ts +0 -70
  383. package/di2mt/widgets/upgrade-overview/upgrade-overview.module.ts +0 -42
  384. package/di2mt/widgets/upgrade-overview/upgrade-overview.service.ts +0 -95
  385. package/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.html +0 -131
  386. package/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.scss +0 -275
  387. package/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.ts +0 -218
  388. package/di2mt/widgets/user-upgrade/user-upgrade.module.ts +0 -24
  389. package/di2mt/widgets/user-upgrade/user-upgrade.service.ts +0 -73
  390. package/karma.conf.js +0 -44
  391. package/ng-package.json +0 -10
  392. package/src/lib/widgets.component.spec.ts +0 -23
  393. package/src/lib/widgets.component.ts +0 -20
  394. package/src/lib/widgets.module.ts +0 -16
  395. package/src/lib/widgets.service.spec.ts +0 -16
  396. package/src/lib/widgets.service.ts +0 -9
  397. package/src/test.ts +0 -27
  398. package/styles.scss +0 -572
  399. package/tsconfig.lib.json +0 -36
  400. package/tsconfig.lib.prod.json +0 -10
  401. package/tsconfig.spec.json +0 -17
  402. package/user-device-manage/ng-package.json +0 -7
  403. package/user-device-manage/src/app.constants.ts +0 -96
  404. package/user-device-manage/src/assets/icons/arrow-left.svg +0 -5
  405. package/user-device-manage/src/assets/icons/arrow-right.svg +0 -5
  406. package/user-device-manage/src/assets/icons/close_icon_x.svg +0 -3
  407. package/user-device-manage/src/assets/icons/delete_icon.svg +0 -5
  408. package/user-device-manage/src/assets/icons/dragger-vertical-icon.svg +0 -3
  409. package/user-device-manage/src/assets/icons/icon_user.svg +0 -1
  410. package/user-device-manage/src/assets/icons/vartical_divider_icon.svg +0 -3
  411. package/user-device-manage/src/classes/device.ts +0 -292
  412. package/user-device-manage/src/classes/line-association-interface.ts +0 -50
  413. package/user-device-manage/src/classes/line-association.ts +0 -177
  414. package/user-device-manage/src/classes/line-call-info-display.ts +0 -21
  415. package/user-device-manage/src/classes/line-directory.ts +0 -41
  416. package/user-device-manage/src/classes/line.ts +0 -144
  417. package/user-device-manage/src/classes/notification.ts +0 -40
  418. package/user-device-manage/src/classes/recording-options.ts +0 -6
  419. package/user-device-manage/src/classes/simplified-user.ts +0 -169
  420. package/user-device-manage/src/classes/site-defaults.ts +0 -167
  421. package/user-device-manage/src/classes/translation-pattern.ts +0 -50
  422. package/user-device-manage/src/classes/types.ts +0 -19
  423. package/user-device-manage/src/classes/user-interface.ts +0 -225
  424. package/user-device-manage/src/classes/user.ts +0 -8
  425. package/user-device-manage/src/common-functions.ts +0 -16
  426. package/user-device-manage/src/confirm-dialog/info-dialog.component.html +0 -14
  427. package/user-device-manage/src/confirm-dialog/info-dialog.component.scss +0 -80
  428. package/user-device-manage/src/confirm-dialog/info-dialog.component.ts +0 -35
  429. package/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.html +0 -21
  430. package/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.scss +0 -97
  431. package/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.ts +0 -28
  432. package/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.html +0 -6
  433. package/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.scss +0 -20
  434. package/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.ts +0 -13
  435. package/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.html +0 -6
  436. package/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.scss +0 -4
  437. package/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.ts +0 -63
  438. package/user-device-manage/src/device-associated-line/device-associated-line.component.html +0 -241
  439. package/user-device-manage/src/device-associated-line/device-associated-line.component.scss +0 -500
  440. package/user-device-manage/src/device-associated-line/device-associated-line.component.ts +0 -194
  441. package/user-device-manage/src/device-list/device-list.component.html +0 -27
  442. package/user-device-manage/src/device-list/device-list.component.scss +0 -131
  443. package/user-device-manage/src/device-list/device-list.component.ts +0 -25
  444. package/user-device-manage/src/device-manage-widget.component.html +0 -209
  445. package/user-device-manage/src/device-manage-widget.component.scss +0 -502
  446. package/user-device-manage/src/device-manage-widget.component.ts +0 -354
  447. package/user-device-manage/src/environments/environment.prod.ts +0 -9
  448. package/user-device-manage/src/environments/environment.ts +0 -10
  449. package/user-device-manage/src/interseptors/auth.interceptor.ts +0 -35
  450. package/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.html +0 -50
  451. package/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.scss +0 -8
  452. package/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.ts +0 -81
  453. package/user-device-manage/src/material.module.ts +0 -87
  454. package/user-device-manage/src/notifications/notification.component.html +0 -33
  455. package/user-device-manage/src/notifications/notification.component.scss +0 -84
  456. package/user-device-manage/src/notifications/notification.component.ts +0 -46
  457. package/user-device-manage/src/removeKynFromIBM.service.ts +0 -25
  458. package/user-device-manage/src/services/api.service.ts +0 -87
  459. package/user-device-manage/src/services/common-functions.ts +0 -17
  460. package/user-device-manage/src/services/device.service.ts +0 -95
  461. package/user-device-manage/src/services/dns.service.ts +0 -111
  462. package/user-device-manage/src/services/line.service.ts +0 -89
  463. package/user-device-manage/src/services/notification.service.ts +0 -68
  464. package/user-device-manage/src/services/removeKynFromIBM.service.ts +0 -25
  465. package/user-device-manage/src/services/site-settings.service.ts +0 -82
  466. package/user-device-manage/src/services/sorting-utils.service.ts +0 -203
  467. package/user-device-manage/src/services/user.service.ts +0 -283
  468. package/user-device-manage/src/services/utils.service.ts +0 -87
  469. package/user-device-manage/src/services/validation.service.ts +0 -829
  470. package/user-device-manage/src/styles/_variables.scss +0 -90
  471. package/user-device-manage/src/styles/form.scss +0 -231
  472. package/user-device-manage/src/styles/icons.scss +0 -32
  473. package/user-device-manage/src/styles/styles.scss +0 -110
  474. package/user-device-manage/src/styles/tables.scss +0 -30
  475. package/user-device-manage/src/user-device-manage.module.ts +0 -73
  476. package/user-device-manage/src/utils/app-loader/app-loader.component.html +0 -6
  477. package/user-device-manage/src/utils/app-loader/app-loader.component.scss +0 -11
  478. package/user-device-manage/src/utils/app-loader/app-loader.ts +0 -13
  479. package/user-manage/ng-package.json +0 -7
  480. package/user-manage/src/app.constants.ts +0 -50
  481. package/user-manage/src/assets/icons/arrow-left.svg +0 -5
  482. package/user-manage/src/assets/icons/arrow-right.svg +0 -5
  483. package/user-manage/src/assets/icons/delete_icon.svg +0 -5
  484. package/user-manage/src/assets/icons/dragger-vertical-icon.svg +0 -3
  485. package/user-manage/src/assets/icons/icon_user.svg +0 -1
  486. package/user-manage/src/assets/icons/vartical_divider_icon.svg +0 -3
  487. package/user-manage/src/classes/device.ts +0 -232
  488. package/user-manage/src/classes/line-association-interface.ts +0 -43
  489. package/user-manage/src/classes/line-association.ts +0 -161
  490. package/user-manage/src/classes/line-call-info-display.ts +0 -21
  491. package/user-manage/src/classes/line-directory.ts +0 -42
  492. package/user-manage/src/classes/line.ts +0 -144
  493. package/user-manage/src/classes/notification.ts +0 -39
  494. package/user-manage/src/classes/pagination.ts +0 -18
  495. package/user-manage/src/classes/recording-options.ts +0 -6
  496. package/user-manage/src/classes/simplified-user.ts +0 -165
  497. package/user-manage/src/classes/table-data.ts +0 -6
  498. package/user-manage/src/classes/translation-pattern.ts +0 -49
  499. package/user-manage/src/classes/user-interface.ts +0 -225
  500. package/user-manage/src/classes/user-list.ts +0 -42
  501. package/user-manage/src/classes/user.ts +0 -8
  502. package/user-manage/src/common-functions.ts +0 -16
  503. package/user-manage/src/device-list/device-list.component.html +0 -27
  504. package/user-manage/src/device-list/device-list.component.scss +0 -131
  505. package/user-manage/src/device-list/device-list.component.ts +0 -25
  506. package/user-manage/src/environments/environment.prod.ts +0 -9
  507. package/user-manage/src/environments/environment.ts +0 -10
  508. package/user-manage/src/interseptors/auth.interceptor.ts +0 -35
  509. package/user-manage/src/lazy-loading-select/lazy-loading-select.component.html +0 -50
  510. package/user-manage/src/lazy-loading-select/lazy-loading-select.component.scss +0 -8
  511. package/user-manage/src/lazy-loading-select/lazy-loading-select.component.ts +0 -81
  512. package/user-manage/src/material.module.ts +0 -85
  513. package/user-manage/src/notifications/notification.component.html +0 -33
  514. package/user-manage/src/notifications/notification.component.scss +0 -84
  515. package/user-manage/src/notifications/notification.component.ts +0 -46
  516. package/user-manage/src/removeKynFromIBM.service.ts +0 -25
  517. package/user-manage/src/services/api.service.ts +0 -90
  518. package/user-manage/src/services/dns.service.ts +0 -116
  519. package/user-manage/src/services/line.service.ts +0 -31
  520. package/user-manage/src/services/notification.service.ts +0 -68
  521. package/user-manage/src/services/removeKynFromIBM.service.ts +0 -25
  522. package/user-manage/src/services/site-settings.service.ts +0 -35
  523. package/user-manage/src/services/sorting-utils.service.ts +0 -203
  524. package/user-manage/src/services/user.service.ts +0 -242
  525. package/user-manage/src/services/users-search.service.ts +0 -59
  526. package/user-manage/src/services/utils.service.ts +0 -71
  527. package/user-manage/src/styles/_variables.scss +0 -90
  528. package/user-manage/src/styles/form.scss +0 -231
  529. package/user-manage/src/styles/icons.scss +0 -32
  530. package/user-manage/src/styles/styles.scss +0 -110
  531. package/user-manage/src/styles/tables.scss +0 -30
  532. package/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.html +0 -10
  533. package/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.scss +0 -429
  534. package/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.ts +0 -63
  535. package/user-manage/src/user-calling/user-calling.component.html +0 -32
  536. package/user-manage/src/user-calling/user-calling.component.scss +0 -444
  537. package/user-manage/src/user-calling/user-calling.component.ts +0 -89
  538. package/user-manage/src/user-details/notification.service.ts +0 -68
  539. package/user-manage/src/user-info/user-info.component.html +0 -29
  540. package/user-manage/src/user-info/user-info.component.scss +0 -64
  541. package/user-manage/src/user-info/user-info.component.ts +0 -19
  542. package/user-manage/src/user-manage-widget.component.html +0 -290
  543. package/user-manage/src/user-manage-widget.component.scss +0 -463
  544. package/user-manage/src/user-manage-widget.component.ts +0 -212
  545. package/user-manage/src/user-manage.module.ts +0 -63
  546. package/user-manage/src/utils/app-loader/app-loader.component.html +0 -6
  547. package/user-manage/src/utils/app-loader/app-loader.component.scss +0 -11
  548. package/user-manage/src/utils/app-loader/app-loader.ts +0 -13
  549. package/user-manage/src/utils/pagination/pagination.component.html +0 -26
  550. package/user-manage/src/utils/pagination/pagination.component.scss +0 -41
  551. package/user-manage/src/utils/pagination/pagination.component.ts +0 -41
  552. package/users-list/ng-package.json +0 -7
  553. package/users-list/src/app.constants.ts +0 -54
  554. package/users-list/src/assets/icons/close_icon_modal.svg +0 -3
  555. package/users-list/src/assets/icons/icon_user.svg +0 -1
  556. package/users-list/src/assets/icons/move_user_to_another_location.svg +0 -14
  557. package/users-list/src/assets/icons/white-close-icon.svg +0 -3
  558. package/users-list/src/classes/app-location.ts +0 -36
  559. package/users-list/src/classes/device.ts +0 -225
  560. package/users-list/src/classes/line.ts +0 -144
  561. package/users-list/src/classes/move-user.ts +0 -225
  562. package/users-list/src/classes/notification.ts +0 -38
  563. package/users-list/src/classes/pagination.ts +0 -18
  564. package/users-list/src/classes/simlified-user.ts +0 -74
  565. package/users-list/src/classes/table-data.ts +0 -6
  566. package/users-list/src/classes/user-interface.ts +0 -225
  567. package/users-list/src/classes/user-list.ts +0 -47
  568. package/users-list/src/classes/user.ts +0 -8
  569. package/users-list/src/material.module.ts +0 -94
  570. package/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.html +0 -37
  571. package/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.scss +0 -129
  572. package/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.ts +0 -46
  573. package/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.html +0 -31
  574. package/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.scss +0 -20
  575. package/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.ts +0 -26
  576. package/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.html +0 -222
  577. package/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.scss +0 -239
  578. package/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.ts +0 -206
  579. package/users-list/src/move-user-wizard/move-user-wizard.component.html +0 -12
  580. package/users-list/src/move-user-wizard/move-user-wizard.component.scss +0 -41
  581. package/users-list/src/move-user-wizard/move-user-wizard.component.ts +0 -36
  582. package/users-list/src/services/api-webex.service.ts +0 -14
  583. package/users-list/src/services/api.service.ts +0 -90
  584. package/users-list/src/services/dns.service.ts +0 -128
  585. package/users-list/src/services/events-communication.service.ts +0 -11
  586. package/users-list/src/services/move-user.service.ts +0 -59
  587. package/users-list/src/services/notification.service.ts +0 -68
  588. package/users-list/src/services/removeKynFromIBM.service.ts +0 -25
  589. package/users-list/src/services/site-settings.service.ts +0 -26
  590. package/users-list/src/services/user.service.ts +0 -159
  591. package/users-list/src/services/users-search.service.ts +0 -137
  592. package/users-list/src/styles/styles.scss +0 -572
  593. package/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.html +0 -15
  594. package/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.scss +0 -103
  595. package/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.ts +0 -35
  596. package/users-list/src/users-list.component.css +0 -4
  597. package/users-list/src/users-list.component.css.map +0 -1
  598. package/users-list/src/users-list.component.html +0 -86
  599. package/users-list/src/users-list.component.scss +0 -572
  600. package/users-list/src/users-list.component.ts +0 -312
  601. package/users-list/src/users-list.module.ts +0 -63
  602. package/users-list/src/utils/app-loader/app-loader.component.css +0 -11
  603. package/users-list/src/utils/app-loader/app-loader.component.css.map +0 -1
  604. package/users-list/src/utils/app-loader/app-loader.component.html +0 -6
  605. package/users-list/src/utils/app-loader/app-loader.component.scss +0 -11
  606. package/users-list/src/utils/app-loader/app-loader.ts +0 -13
  607. package/users-list/src/utils/common-functions.ts +0 -32
  608. package/users-list/src/utils/notifications/notification.component.html +0 -33
  609. package/users-list/src/utils/notifications/notification.component.scss +0 -84
  610. package/users-list/src/utils/notifications/notification.component.ts +0 -46
  611. package/users-list/src/utils/pagination/pagination.component.css +0 -45
  612. package/users-list/src/utils/pagination/pagination.component.css.map +0 -1
  613. package/users-list/src/utils/pagination/pagination.component.html +0 -26
  614. package/users-list/src/utils/pagination/pagination.component.scss +0 -41
  615. package/users-list/src/utils/pagination/pagination.component.ts +0 -41
  616. package/users-list/src/utils/utils.service.ts +0 -71
  617. /package/user-device-manage/{public-api.ts → public-api.d.ts} +0 -0
  618. /package/user-manage/{public-api.ts → public-api.d.ts} +0 -0
  619. /package/users-list/{public-api.ts → public-api.d.ts} +0 -0
@@ -0,0 +1,760 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { DeviceTypes, MailboxQuotasType, SpeedDialType, VMNotificationsTypes } from './../classes/types';
3
+ import { DeviceKind } from './../classes/device';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./site-settings.service";
6
+ const speedDialRegex = new RegExp('^[^"]*$');
7
+ const BLFRegex = new RegExp('^[^"><&%]*$');
8
+ const timeRegex = new RegExp('^([0-1][0-9]|[2][0-3]):([0-5][0-9])$');
9
+ export class ValidationService {
10
+ constructor(siteSettingsService) {
11
+ this.siteSettingsService = siteSettingsService;
12
+ this.matchControl = (fieldName) => {
13
+ return (control) => {
14
+ if (!control?.parent) {
15
+ return null;
16
+ }
17
+ const matchingControl = control.parent.get(fieldName);
18
+ if (matchingControl.value && matchingControl.value !== control.value) {
19
+ return {
20
+ matchControl: true
21
+ };
22
+ }
23
+ return null;
24
+ };
25
+ };
26
+ this.matchLength = (fieldName) => {
27
+ return (control) => {
28
+ if (!control.parent || !control.value) {
29
+ return null;
30
+ }
31
+ const matchingControl = control.parent.get(fieldName);
32
+ if (((!control.value.startsWith('+') && !matchingControl.value.startsWith('+')) ||
33
+ (control.value.startsWith('+') && matchingControl.value.startsWith('+'))) &&
34
+ ((!control.value.startsWith('\\+') && !matchingControl.value.startsWith('\\+')) ||
35
+ (control.value.startsWith('\\+') && matchingControl.value.startsWith('\\+'))) &&
36
+ matchingControl.value.length !== control.value.length) {
37
+ return {
38
+ matchLength: true
39
+ };
40
+ }
41
+ return null;
42
+ };
43
+ };
44
+ this.dynamicMaxLength = (length1, length2) => {
45
+ return (control) => {
46
+ if (!control.parent || !control.value) {
47
+ return null;
48
+ }
49
+ const maxLength = String(control.value).includes('[') ? length1 : length2;
50
+ if (control.value.length > maxLength) {
51
+ return {
52
+ maxLength: true
53
+ };
54
+ }
55
+ return null;
56
+ };
57
+ };
58
+ this.biggerThan = (fieldName) => {
59
+ return (control) => {
60
+ if (!control.parent || !control.value) {
61
+ return null;
62
+ }
63
+ const matchingControl = control.parent.get(fieldName);
64
+ if (matchingControl.value.length === control.value.length && matchingControl.value && matchingControl.value > control.value) {
65
+ return {
66
+ biggerThan: true
67
+ };
68
+ }
69
+ return null;
70
+ };
71
+ };
72
+ this.requiredByType = (fieldName, type) => {
73
+ return (control) => {
74
+ if (fieldName === 'phoneSystem' && (type === VMNotificationsTypes['Phone Device'] || type === VMNotificationsTypes['Pager Device']) ||
75
+ fieldName === 'htmlTemplate' && type === VMNotificationsTypes['HTML Device']) {
76
+ return {
77
+ required: true
78
+ };
79
+ }
80
+ return null;
81
+ };
82
+ };
83
+ this.smallerThanQuota = (fieldName, quotaType, secondQuotaType) => {
84
+ return (control) => {
85
+ if (!control.parent) {
86
+ return null;
87
+ }
88
+ const matchingControl = control.parent.get(fieldName);
89
+ const quotaTypeControl = control.parent.get(quotaType);
90
+ const secondQuotaTypeControl = control.parent.get(secondQuotaType);
91
+ if (quotaTypeControl && secondQuotaTypeControl && secondQuotaTypeControl.value === MailboxQuotasType.system) {
92
+ return null;
93
+ }
94
+ if (quotaTypeControl && quotaTypeControl.value === MailboxQuotasType.system || matchingControl && matchingControl.value && parseInt(matchingControl.value) < parseInt(control.value)) {
95
+ return {
96
+ smallerThan: true
97
+ };
98
+ }
99
+ return null;
100
+ };
101
+ };
102
+ this.biggerThanQuota = (fieldName, quotaType) => {
103
+ return (control) => {
104
+ if (!control?.parent) {
105
+ return null;
106
+ }
107
+ const matchingControl = control.parent.get(fieldName);
108
+ const quotaTypeControl = control.parent.get(quotaType);
109
+ if (quotaTypeControl && quotaTypeControl.value === MailboxQuotasType.custom && matchingControl.value && parseInt(matchingControl.value) > parseInt(control.value)) {
110
+ return {
111
+ biggerThan: true
112
+ };
113
+ }
114
+ return null;
115
+ };
116
+ };
117
+ this.rangeLimit = (fieldName) => {
118
+ return (control) => {
119
+ if (!control?.parent || !control.value) {
120
+ return null;
121
+ }
122
+ const matchingControl = control.parent.get(fieldName);
123
+ if ((control.value - matchingControl.value) > 50000) {
124
+ return {
125
+ rangeLimit: true
126
+ };
127
+ }
128
+ return null;
129
+ };
130
+ };
131
+ this.comparepatternParts = (fieldName) => {
132
+ return (control) => {
133
+ if (!control?.value) {
134
+ return null;
135
+ }
136
+ const matches = control.value.match(/\[(.*?)\]/);
137
+ if (matches) {
138
+ const submatch = matches[1];
139
+ const submatchsplit = submatch.split('-');
140
+ for (let i = 0; i < submatchsplit.length; i++) {
141
+ if (submatchsplit[i] >= submatchsplit[i + 1]) {
142
+ return {
143
+ comparepatternParts: true
144
+ };
145
+ }
146
+ }
147
+ }
148
+ return null;
149
+ };
150
+ };
151
+ this.matchPrefix = (fieldName) => {
152
+ return (control) => {
153
+ if (!control?.parent || !control.value) {
154
+ return null;
155
+ }
156
+ const matchingControl = control.parent.get(fieldName);
157
+ if ((matchingControl.value.startsWith('+') || control.value.startsWith('+') || matchingControl.value.startsWith('\\+') || control.value.startsWith('\\+')) && (control.value.charAt(0) !== matchingControl.value.charAt(0))) {
158
+ return {
159
+ matchPrefix: true
160
+ };
161
+ }
162
+ return null;
163
+ };
164
+ };
165
+ this.deviceNameValidator = (device) => {
166
+ return (control) => {
167
+ if (!control.value || device.deviceKind === DeviceKind.deviceProfile) {
168
+ return;
169
+ }
170
+ if (device.isCtiRoutePoint) {
171
+ let err = '';
172
+ if (!control.value.match(/^[a-zA-Z0-9-_.]+$/)) {
173
+ err = 'pattern';
174
+ }
175
+ if (control.value.trim().length > 15) {
176
+ err = 'maxLength';
177
+ }
178
+ return err ? { nameRule: err } : null;
179
+ }
180
+ if (device.deviceDefaults && !device.isCtiRoutePoint) {
181
+ const ruleText = device.deviceDefaults.deviceNameRegex;
182
+ const rule = new RegExp(ruleText, 'g');
183
+ const caption = device.deviceDefaults?.deviceNameExplained;
184
+ const match = (control.value || '').match(rule) || [];
185
+ const exactMatch = match && control.value === match[0];
186
+ if (rule && !exactMatch) {
187
+ return { nameRule: { caption } };
188
+ }
189
+ }
190
+ return null;
191
+ };
192
+ };
193
+ this.deviceNameValueValidator = (device, deviceName) => {
194
+ return (control) => {
195
+ if (!control.value || device.deviceKind === DeviceKind.deviceProfile) {
196
+ return;
197
+ }
198
+ if (device.name && device.alreadyUsedName && device.name === device.alreadyUsedName) {
199
+ return { nameRule: 'alreadyUsedName' };
200
+ }
201
+ if (device.isCtiRoutePoint) {
202
+ let err = '';
203
+ if (!deviceName.match(/^[a-zA-Z0-9-_.]+$/)) {
204
+ err = 'pattern';
205
+ }
206
+ if (deviceName.trim().length > 15) {
207
+ err = 'maxLength';
208
+ }
209
+ return err ? { nameRule: err } : null;
210
+ }
211
+ if (device.deviceDefaults && !device.isCtiRoutePoint) {
212
+ const ruleText = device.deviceDefaults.deviceNameRegex;
213
+ // console.log('Dev name rule - ', ruleText);
214
+ const rule = new RegExp(ruleText, 'g');
215
+ let caption = device.deviceDefaults.deviceNameExplained;
216
+ if (!caption) {
217
+ caption = ruleText;
218
+ }
219
+ const match = (deviceName || '').match(rule) || [];
220
+ const exactMatch = match && deviceName === match[0];
221
+ if (rule && !exactMatch) {
222
+ return { nameRule: { caption } };
223
+ }
224
+ }
225
+ return null;
226
+ };
227
+ };
228
+ this.deviceDuplicatingNameValidator = (user, pkid, prefix) => {
229
+ return (control) => {
230
+ if (!control.value || !user || !user.devices || user.devices.length === 0) {
231
+ return;
232
+ }
233
+ const deviceName = prefix ? `${prefix}${control.value}` : control.value;
234
+ const devicesWithTheSameName = user.devices.filter((device) => device.name === deviceName);
235
+ if (devicesWithTheSameName.length > 0) {
236
+ if (!pkid) { // For new device
237
+ return { duplicateNameRule: true };
238
+ }
239
+ else if (pkid !== devicesWithTheSameName[0].pkid) { // For updating device, avoid validating with itself
240
+ return { duplicateNameRule: true };
241
+ }
242
+ }
243
+ return null;
244
+ };
245
+ };
246
+ this.conditionalRequired = (fieldName, requiredConditionValues) => {
247
+ return (control) => {
248
+ const parent1 = control.parent;
249
+ if (!parent1 || !parent1.get(fieldName) || !parent1.get(fieldName).value) {
250
+ return;
251
+ }
252
+ if (requiredConditionValues.includes(parent1.get(fieldName).value) && !control.value) {
253
+ return {
254
+ required: true
255
+ };
256
+ }
257
+ return null;
258
+ };
259
+ };
260
+ this.conditionalRequiredForGroupAdmin = (fieldName, requiredConditionValues) => {
261
+ return (control) => {
262
+ const parent1 = control.parent;
263
+ if (!parent1 || !parent1.get(fieldName) || !parent1.get(fieldName).value || !parent1.get(fieldName).value.type) {
264
+ return;
265
+ }
266
+ if (requiredConditionValues.includes(parent1.get(fieldName).value.type) && !control.value) {
267
+ return {
268
+ required: true
269
+ };
270
+ }
271
+ return null;
272
+ };
273
+ };
274
+ this.conditionalSiteGroupCheckForGroupAdmin = (fieldName, requiredConditionValues) => {
275
+ return (control) => {
276
+ const parent1 = control.parent;
277
+ if (!parent1 || !parent1.get(fieldName) || !parent1.get(fieldName).value || !parent1.get(fieldName).value.type) {
278
+ return;
279
+ }
280
+ if (parent1.get(fieldName).value && requiredConditionValues.includes(parent1.get(fieldName).value.type) &&
281
+ parent1.get('siteGroup') && parent1.get('siteGroup').value &&
282
+ parent1.get('siteGroup').value.siteGroupMembers && parent1.get('siteGroup').value.siteGroupMembers.length < 1) {
283
+ return {
284
+ hasSiteGroupError: true
285
+ };
286
+ }
287
+ return null;
288
+ };
289
+ };
290
+ this.requiredIfFieldIsEmptyForBLF = (fieldName) => {
291
+ const DATE_PATTERN = '^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d$';
292
+ return (control) => {
293
+ const parent = control.parent;
294
+ if (!parent || !parent.get(fieldName)) {
295
+ return null;
296
+ }
297
+ if (!parent.get(fieldName).value && !control.value) {
298
+ return {
299
+ requiredEither: true,
300
+ requiredBLFDN: true
301
+ };
302
+ }
303
+ return null;
304
+ };
305
+ };
306
+ this.validDate = (fieldName) => {
307
+ return (control) => {
308
+ const parent = control.parent;
309
+ const ruleText = '^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d$';
310
+ const rule = new RegExp(ruleText, 'g');
311
+ const val = control.value && control.value.getDate();
312
+ if (rule && !rule.test(val)) {
313
+ return { pattern: true };
314
+ }
315
+ return null;
316
+ };
317
+ };
318
+ this.matchOption = (optionType, list, isFullList) => {
319
+ return (control) => {
320
+ if (!control.value || control.value === DeviceTypes.CTI_ROUTE_POINT) {
321
+ return null;
322
+ }
323
+ let optionList = list || this.getOptionsList(optionType);
324
+ if (optionList && optionList.length) {
325
+ if (!isFullList && optionType === 'directoryNumbers') {
326
+ optionList = optionList.map((str) => str.indexOf(' ') > -1 ? str.substring(0, str.indexOf(' ')) : str);
327
+ }
328
+ if (!optionList.includes(control.value)) {
329
+ return {
330
+ matchOptions: true
331
+ };
332
+ }
333
+ }
334
+ return null;
335
+ };
336
+ };
337
+ this.confidentialAccessLevel = (confidentialAccessMode) => {
338
+ return (control) => {
339
+ if (!control.value && !confidentialAccessMode) {
340
+ return null;
341
+ }
342
+ if (!control.value) {
343
+ return {
344
+ required: true
345
+ };
346
+ }
347
+ return null;
348
+ };
349
+ };
350
+ this.noResultDN = (optionType, list) => {
351
+ return (control) => {
352
+ if (!control.value || list === null) {
353
+ return null;
354
+ }
355
+ if (list && list.length === 0) {
356
+ return {
357
+ noResultDNs: true
358
+ };
359
+ }
360
+ return null;
361
+ };
362
+ };
363
+ this.matchExtensionOption = (optionType, optionList) => {
364
+ return (control) => {
365
+ if (!control.value) {
366
+ return control.value;
367
+ }
368
+ // @ts-ignore
369
+ const newList = [];
370
+ if (optionList && optionList.length) {
371
+ optionList.forEach((list) => {
372
+ const newOptionList = this.getMatchExistingVmLineValue(list);
373
+ newList.push(newOptionList);
374
+ });
375
+ // @ts-ignore
376
+ if (newList && !newList.includes(control.value)) {
377
+ return {
378
+ matchOptions: true
379
+ };
380
+ }
381
+ }
382
+ else if (!optionList || !optionList.length) {
383
+ return {
384
+ matchOptions: true
385
+ };
386
+ }
387
+ return null;
388
+ };
389
+ };
390
+ this.requiredEitherForVmExtension = (fieldName1, fieldName2) => {
391
+ return (control) => {
392
+ if (!control.parent) {
393
+ return null;
394
+ }
395
+ const matchControl1 = control.parent.get(fieldName1).value;
396
+ const matchControl2 = control.parent.get(fieldName2).value;
397
+ if (!matchControl1 && !matchControl2) {
398
+ return {
399
+ requiredEitherForVmExtension: true
400
+ };
401
+ }
402
+ return null;
403
+ };
404
+ };
405
+ this.requiredEitherOne = (fieldName1, fieldName2) => {
406
+ return (control) => {
407
+ if (!control.parent) {
408
+ return null;
409
+ }
410
+ const matchControl1 = control.parent.get(fieldName1) && control.parent.get(fieldName1).value;
411
+ const matchControl2 = control.parent.get(fieldName2) && control.parent.get(fieldName2).value;
412
+ if (!matchControl1 && !matchControl2) {
413
+ return {
414
+ requiredEitherOne: true
415
+ };
416
+ }
417
+ return null;
418
+ };
419
+ };
420
+ this.requiredByValue = (fieldName, requestedFieldVal) => {
421
+ return (control) => {
422
+ if (!control || !control.parent) {
423
+ return null;
424
+ }
425
+ const fieldVal = control.parent.get(fieldName) && control.parent.get(fieldName).value;
426
+ if (fieldVal && fieldVal === requestedFieldVal && !control.value) {
427
+ return {
428
+ required: true
429
+ };
430
+ }
431
+ return null;
432
+ };
433
+ };
434
+ this.OneExtensionEmpty = (fieldName1, fieldName2) => {
435
+ return (control) => {
436
+ if (!control.parent) {
437
+ return null;
438
+ }
439
+ const matchControl1 = control.parent.get(fieldName1).value;
440
+ const matchControl2 = control.parent.get(fieldName2).value;
441
+ if (matchControl1 && matchControl2) {
442
+ return {
443
+ OneExtensionIsEmpty: true
444
+ };
445
+ }
446
+ return null;
447
+ };
448
+ };
449
+ this.requiredByCondition = (requiredBy, fieldName) => {
450
+ return (control) => {
451
+ if (!control.parent) {
452
+ return null;
453
+ }
454
+ const requiredByControl = control.parent.get(requiredBy).value;
455
+ const requiredControl = control.parent.get(fieldName).value;
456
+ if (requiredByControl && !requiredControl) {
457
+ return {
458
+ required: true
459
+ };
460
+ }
461
+ return null;
462
+ };
463
+ };
464
+ this.pinMultiCharacterCheck = (fieldName) => {
465
+ // @ts-ignore
466
+ return (control) => {
467
+ if (!control.parent) {
468
+ return null;
469
+ }
470
+ const matchingControl = control.parent.get(fieldName);
471
+ const ruleMultiCharacter = new RegExp('([0-9])\\1{2}');
472
+ if (matchingControl.value) {
473
+ const hasMultiCharacter = ruleMultiCharacter.test(matchingControl.value);
474
+ if (hasMultiCharacter) {
475
+ return {
476
+ multiCharacter: true
477
+ };
478
+ }
479
+ }
480
+ };
481
+ };
482
+ this.pinConsecutiveNumberCheck = (fieldName) => {
483
+ // @ts-ignore
484
+ return (control) => {
485
+ if (!control.parent) {
486
+ return null;
487
+ }
488
+ const matchingControl = control.parent.get(fieldName);
489
+ const strToCheck = matchingControl.value;
490
+ if (strToCheck && strToCheck.length > 1) {
491
+ const resAsc = this.pinOrderCheck(strToCheck);
492
+ if (resAsc === true) {
493
+ return {
494
+ consecutiveNumbers: true
495
+ };
496
+ }
497
+ }
498
+ };
499
+ };
500
+ this.pinMailboxExtensionCheck = (fieldName, extension) => {
501
+ return (control) => {
502
+ if (!control.parent) {
503
+ return null;
504
+ }
505
+ const matchingControl = control.parent.get(fieldName);
506
+ const strToCheck = matchingControl.value;
507
+ if (strToCheck === extension || strToCheck.includes(extension)) {
508
+ return {
509
+ mailboxExtension: true
510
+ };
511
+ }
512
+ return null;
513
+ };
514
+ };
515
+ }
516
+ e164MaskLabel(control) {
517
+ const ruleText = `^[0-9*#+X]{0,24}$`;
518
+ const rule = new RegExp(ruleText, 'g');
519
+ if (control.value && rule && !rule.test(control.value)) {
520
+ return { e164MaskRule: { rule: ruleText } };
521
+ }
522
+ return null;
523
+ }
524
+ index(control) {
525
+ const value = parseInt(control.value);
526
+ if (!value) {
527
+ return null;
528
+ }
529
+ const pattern = '^[+0-9]*$';
530
+ if (value && !Number.isInteger(value) || value < 1 || value > 199) {
531
+ return { indexRule: true };
532
+ }
533
+ return null;
534
+ }
535
+ displayLabel(control) {
536
+ const ruleText = `^[^""""%&<>]{0,30}$`;
537
+ const rule = new RegExp(ruleText, 'g');
538
+ if (rule && !rule.test(control.value)) {
539
+ return { labelRule: { rule: ruleText, count: 30 } };
540
+ }
541
+ return null;
542
+ }
543
+ displayLabelAscii(control) {
544
+ const ruleText = '^[a-zA-Z0-9 !#$\'()*+,./:;=?@\\^_`}~-]{0,30}$';
545
+ const rule = new RegExp(ruleText, 'g');
546
+ if (rule && !rule.test(control.value)) {
547
+ return { labelRule: { rule: ruleText, count: 30 } };
548
+ }
549
+ return null;
550
+ }
551
+ requiredForSpeedDialPosition(type) {
552
+ return (control) => {
553
+ const parent = control.parent;
554
+ if (type === SpeedDialType.slotBasic || !parent) {
555
+ return null;
556
+ }
557
+ if (!control.value) {
558
+ return { required: true };
559
+ }
560
+ return null;
561
+ };
562
+ }
563
+ speedDialDestination() {
564
+ return (control) => {
565
+ if (!control || !control.value) {
566
+ return null;
567
+ }
568
+ const numberOrHostNameIP = '' +
569
+ '^([0-9\\*#+PpCcFf,]+)$' +
570
+ '|' +
571
+ '^(' +
572
+ '([a-zA-Z0-9]){1,47}@' +
573
+ '(' +
574
+ '((?:[0-9]{1,3}\\.){3}[0-9]{1,3})' +
575
+ '|' +
576
+ '([a-zA-Z0-9][a-zA-Z0-9\\-]{1,61}[a-zA-Z0-9]\\.[a-zA-Z]{2,})' +
577
+ ')' +
578
+ ')$';
579
+ const rule = new RegExp(numberOrHostNameIP, 'g');
580
+ if (rule && !rule.test(control.value)) {
581
+ return { pattern: true };
582
+ }
583
+ return null;
584
+ };
585
+ }
586
+ requiredForSpeedDialDestination(type) {
587
+ return (control) => {
588
+ const parent = control.parent;
589
+ if ((!parent || !parent.get('label')) || (type === SpeedDialType.slotBasic && !control.value && !parent.get('label').value)) {
590
+ return null;
591
+ }
592
+ return null;
593
+ };
594
+ }
595
+ labelPatternDependingOnType(control) {
596
+ const parent = control?.parent;
597
+ if (!parent || !parent.get('type') || !control.value) {
598
+ return null;
599
+ }
600
+ const type = parent.get('type').value;
601
+ if (!type && !speedDialRegex.test(control.value)) {
602
+ return { labelRule: { wrong: '"' } };
603
+ }
604
+ if (type && !BLFRegex.test(control.value)) {
605
+ return { labelRule: { wrong: '"><&%' } };
606
+ }
607
+ return null;
608
+ }
609
+ labelPatternBLF(control) {
610
+ if (control.value && !BLFRegex.test(control.value)) {
611
+ return { labelRule: { wrong: '"><&%' } };
612
+ }
613
+ return null;
614
+ }
615
+ labelPatternSpeedDial(control) {
616
+ if (control?.value && !speedDialRegex.test(control.value)) {
617
+ return { labelRule: { wrong: '"' } };
618
+ }
619
+ return null;
620
+ }
621
+ getMatchExistingVmLineValue(dnWithType) {
622
+ const ind = dnWithType.indexOf('Type:');
623
+ let dn = dnWithType;
624
+ if (ind > -1) {
625
+ dn = dnWithType.slice(0, ind);
626
+ dn = dn.trim();
627
+ }
628
+ return dn;
629
+ }
630
+ getOptionsList(token) {
631
+ switch (token) {
632
+ case 'css':
633
+ case 'rerouteCss':
634
+ case 'callingSearchSpace':
635
+ return this.siteSettingsService.callingSearchSpaceTypes;
636
+ case 'reroutingCss':
637
+ return this.siteSettingsService.siteDefaults && this.siteSettingsService.siteDefaults.cssFilter;
638
+ case 'deviceType':
639
+ return this.siteSettingsService.deviceTypes;
640
+ case 'routePartition':
641
+ return this.siteSettingsService.routePartitionNames;
642
+ case 'routePartitionFiltered':
643
+ return this.siteSettingsService.filteredRoutePartitionNames;
644
+ case 'devicePools':
645
+ return this.siteSettingsService.devicePools;
646
+ case 'allRoutePartitions':
647
+ return this.siteSettingsService.allRoutePartitionNames;
648
+ case 'directoryNumbers':
649
+ return this.siteSettingsService.directoryNumbers;
650
+ default:
651
+ return [];
652
+ }
653
+ }
654
+ autocompleteType(control) {
655
+ if (!control.value) {
656
+ return null;
657
+ }
658
+ if (typeof control.value !== 'object' && control.value !== '') {
659
+ return {
660
+ stringEntered: true
661
+ };
662
+ }
663
+ return null;
664
+ }
665
+ password(control) {
666
+ const ruleNumeric = new RegExp(/\d+/, 'g');
667
+ const ruleCapitals = new RegExp(/[A-Z]+/, 'g');
668
+ const ruleSmall = new RegExp(/[a-z]+/, 'g');
669
+ const ruleSpecial = new RegExp(/[!@#$%&\/=\?_\.,:;\-\\+]+/, 'g');
670
+ const hasNumeric = +ruleNumeric.test(control.value);
671
+ const hasCapitals = +ruleCapitals.test(control.value);
672
+ const hasSmall = +ruleSmall.test(control.value);
673
+ const hasSpecial = +ruleSpecial.test(control.value);
674
+ if (hasNumeric + hasCapitals + hasSmall + hasSpecial < 3) {
675
+ return {
676
+ weakPassword: true
677
+ };
678
+ }
679
+ return null;
680
+ }
681
+ verifyAutoAnswer(control) {
682
+ if (!control?.value || control.value.length === 0) {
683
+ return null;
684
+ }
685
+ let autoAnswerErrorLine = null;
686
+ if (control.parent && control.parent.parent && control.parent.parent.parent && control.parent.parent.parent.parent) {
687
+ const controlSNR = control.parent;
688
+ const controlUser = control.parent.parent.parent.parent;
689
+ const lineAssociations = controlSNR.get('lineAssociations');
690
+ const lines = controlUser.get('lines');
691
+ if (lines) {
692
+ lineAssociations.value.forEach((lineAssociation) => {
693
+ const autoAnswerLine = lines.controls.find((line) => line.get('directoryNumber').value.directoryNumber === lineAssociation.directoryNumber && line.get('directoryNumber').value.routePartitionName === lineAssociation.routePartitionName
694
+ && line.get('autoAnswer').value !== 'Auto Answer Off');
695
+ if (autoAnswerLine) {
696
+ autoAnswerErrorLine = {
697
+ autoAnswerErrorLine: lineAssociation.directoryNumber
698
+ };
699
+ }
700
+ });
701
+ }
702
+ }
703
+ return autoAnswerErrorLine;
704
+ }
705
+ verifyBeginEndTime(control) {
706
+ const parent = control.parent;
707
+ if (!parent || !parent.get('isActive') || !parent.get('allDay') || !parent.get('from') || !parent.get('to')) {
708
+ return null;
709
+ }
710
+ if (parent.get('isActive').value) {
711
+ if (!parent.get('allDay').value) {
712
+ if (!parent.get('from').value || parent.get('from').value === 'No Office Hours'
713
+ || !parent.get('to').value || parent.get('to').value === 'No Office Hours'
714
+ || parent.get('from').value > parent.get('to').value) {
715
+ return {
716
+ fromGreaterThanTo: true
717
+ };
718
+ }
719
+ }
720
+ }
721
+ return null;
722
+ }
723
+ time(control) {
724
+ if (control.value && !timeRegex.test(control.value)) {
725
+ return { timeFormat: true };
726
+ }
727
+ return null;
728
+ }
729
+ pinOrderCheck(str) {
730
+ if (str) {
731
+ const arr_num = ('' + str).split('');
732
+ for (let i = 0; i < arr_num.length - 2; i++) {
733
+ const num1 = parseInt(arr_num[i]);
734
+ const num2 = parseInt(arr_num[i + 1]);
735
+ const num3 = parseInt(arr_num[i + 2]);
736
+ if ((num2 - num1) === 1 && (num3 - num2 === num2 - num1)) {
737
+ return true;
738
+ }
739
+ }
740
+ return false;
741
+ }
742
+ }
743
+ isItemAlreadyInList(item, list) {
744
+ if (!item || !list || !list.length) {
745
+ return false;
746
+ }
747
+ for (const listItem of list) {
748
+ if (item.equals(listItem)) {
749
+ return true;
750
+ }
751
+ }
752
+ return false;
753
+ }
754
+ }
755
+ ValidationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ValidationService, deps: [{ token: i1.SiteSettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
756
+ ValidationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ValidationService });
757
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ValidationService, decorators: [{
758
+ type: Injectable
759
+ }], ctorParameters: function () { return [{ type: i1.SiteSettingsService }]; } });
760
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItZGV2aWNlLW1hbmFnZS9zcmMvc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RyxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUV6RCxNQUFNLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0FBR3JFLE1BQU0sT0FBTyxpQkFBaUI7SUFFNUIsWUFDVSxtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQTZIbEQsaUJBQVksR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtZQUNuQyxPQUFPLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFO29CQUNwQixPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFDRCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxlQUFlLENBQUMsS0FBSyxJQUFJLGVBQWUsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLEtBQUssRUFBRTtvQkFDcEUsT0FBTzt3QkFDTCxZQUFZLEVBQUUsSUFBSTtxQkFDbkIsQ0FB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SSxDQUFDLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO29CQUN4RCxPQUFPLElBQUksQ0FBQztpQkFDYjthQUNGO1lBQ0QsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFtQkQsbUJBQW1CLENBQUMsSUFBUyxFQUFFLElBQVM7UUFDdEMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbEMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDekIsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzsrR0FqekJVLGlCQUFpQjttSEFBakIsaUJBQWlCOzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaXRlU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi9zaXRlLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGV2aWNlVHlwZXMsIE1haWxib3hRdW90YXNUeXBlLCBTcGVlZERpYWxUeXBlLCBWTU5vdGlmaWNhdGlvbnNUeXBlcyB9IGZyb20gJy4vLi4vY2xhc3Nlcy90eXBlcyc7XG5pbXBvcnQgeyBEZXZpY2UsIERldmljZUtpbmQgfSBmcm9tICcuLy4uL2NsYXNzZXMvZGV2aWNlJztcblxuY29uc3Qgc3BlZWREaWFsUmVnZXggPSBuZXcgUmVnRXhwKCdeW15cIl0qJCcpO1xuY29uc3QgQkxGUmVnZXggPSBuZXcgUmVnRXhwKCdeW15cIj48JiVdKiQnKTtcbmNvbnN0IHRpbWVSZWdleCA9IG5ldyBSZWdFeHAoJ14oWzAtMV1bMC05XXxbMl1bMC0zXSk6KFswLTVdWzAtOV0pJCcpO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvblNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2l0ZVNldHRpbmdzU2VydmljZTogU2l0ZVNldHRpbmdzU2VydmljZSxcbiAgKSB7XG4gIH1cblxuICBlMTY0TWFza0xhYmVsKGNvbnRyb2w6IGFueSkge1xuICAgIGNvbnN0IHJ1bGVUZXh0ID0gYF5bMC05KiMrWF17MCwyNH0kYDtcbiAgICBjb25zdCBydWxlID0gbmV3IFJlZ0V4cChydWxlVGV4dCwgJ2cnKTtcbiAgICBpZiAoY29udHJvbC52YWx1ZSAmJiBydWxlICYmICFydWxlLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7ZTE2NE1hc2tSdWxlOiB7cnVsZTogcnVsZVRleHR9fTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpbmRleChjb250cm9sOiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGNvbnRyb2wudmFsdWUpO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBwYXR0ZXJuID0gJ15bKzAtOV0qJCc7XG4gICAgaWYgKHZhbHVlICYmICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IDEgfHwgdmFsdWUgPiAxOTkpIHtcbiAgICAgIHJldHVybiB7aW5kZXhSdWxlOiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkaXNwbGF5TGFiZWwoY29udHJvbDogYW55KSB7XG4gICAgY29uc3QgcnVsZVRleHQgPSBgXlteXCJcIlwiXCIlJjw+XXswLDMwfSRgO1xuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUmVnRXhwKHJ1bGVUZXh0LCAnZycpO1xuICAgIGlmIChydWxlICYmICFydWxlLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7bGFiZWxSdWxlOiB7cnVsZTogcnVsZVRleHQsIGNvdW50OiAzMH19O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG5cblxuICBkaXNwbGF5TGFiZWxBc2NpaShjb250cm9sOiBhbnkpIHtcbiAgICBjb25zdCBydWxlVGV4dCA9ICdeW2EtekEtWjAtOSAhIyRcXCcoKSorLC4vOjs9P0BcXFxcXl9gfX4tXXswLDMwfSQnO1xuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUmVnRXhwKHJ1bGVUZXh0LCAnZycpO1xuICAgIGlmIChydWxlICYmICFydWxlLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7bGFiZWxSdWxlOiB7cnVsZTogcnVsZVRleHQsIGNvdW50OiAzMH19O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlcXVpcmVkRm9yU3BlZWREaWFsUG9zaXRpb24odHlwZTogc3RyaW5nKSB7XG5cbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50ID0gY29udHJvbC5wYXJlbnQ7XG4gICAgICBpZiAodHlwZSA9PT0gU3BlZWREaWFsVHlwZS5zbG90QmFzaWMgfHwgIXBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4ge3JlcXVpcmVkOiB0cnVlfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzcGVlZERpYWxEZXN0aW5hdGlvbigpIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sIHx8ICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtYmVyT3JIb3N0TmFtZUlQID0gJycgK1xuICAgICAgICAnXihbMC05XFxcXCojK1BwQ2NGZixdKykkJyArXG4gICAgICAgICd8JyArXG4gICAgICAgICdeKCcgK1xuICAgICAgICAnKFthLXpBLVowLTldKXsxLDQ3fUAnICtcbiAgICAgICAgJygnICtcbiAgICAgICAgJygoPzpbMC05XXsxLDN9XFxcXC4pezN9WzAtOV17MSwzfSknICtcbiAgICAgICAgJ3wnICtcbiAgICAgICAgJyhbYS16QS1aMC05XVthLXpBLVowLTlcXFxcLV17MSw2MX1bYS16QS1aMC05XVxcXFwuW2EtekEtWl17Mix9KScgK1xuICAgICAgICAnKScgK1xuICAgICAgICAnKSQnO1xuICAgICAgY29uc3QgcnVsZSA9IG5ldyBSZWdFeHAobnVtYmVyT3JIb3N0TmFtZUlQLCAnZycpO1xuICAgICAgaWYgKHJ1bGUgJiYgIXJ1bGUudGVzdChjb250cm9sLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4ge3BhdHRlcm46IHRydWV9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICB9XG5cbiAgcmVxdWlyZWRGb3JTcGVlZERpYWxEZXN0aW5hdGlvbih0eXBlOiBzdHJpbmcpIHtcblxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sLnBhcmVudDtcbiAgICAgIGlmICgoIXBhcmVudCB8fCAhcGFyZW50LmdldCgnbGFiZWwnKSkgfHwgKHR5cGUgPT09IFNwZWVkRGlhbFR5cGUuc2xvdEJhc2ljICYmICFjb250cm9sLnZhbHVlICYmICFwYXJlbnQuZ2V0KCdsYWJlbCcpLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuXG4gIGxhYmVsUGF0dGVybkRlcGVuZGluZ09uVHlwZShjb250cm9sOiBhbnkpIHtcbiAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sPy5wYXJlbnQ7XG4gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC5nZXQoJ3R5cGUnKSB8fCAhY29udHJvbC52YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSBwYXJlbnQuZ2V0KCd0eXBlJykudmFsdWU7XG4gICAgaWYgKCF0eXBlICYmICFzcGVlZERpYWxSZWdleC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge2xhYmVsUnVsZToge3dyb25nOiAnXCInfX07XG4gICAgfVxuICAgIGlmICh0eXBlICYmICFCTEZSZWdleC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge2xhYmVsUnVsZToge3dyb25nOiAnXCI+PCYlJ319O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxhYmVsUGF0dGVybkJMRihjb250cm9sOiBhbnkpIHtcbiAgICBpZiAoY29udHJvbC52YWx1ZSAmJiAhQkxGUmVnZXgudGVzdChjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtsYWJlbFJ1bGU6IHt3cm9uZzogJ1wiPjwmJSd9fTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsYWJlbFBhdHRlcm5TcGVlZERpYWwoY29udHJvbDogYW55KSB7XG4gICAgaWYgKGNvbnRyb2w/LnZhbHVlICYmICFzcGVlZERpYWxSZWdleC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge2xhYmVsUnVsZToge3dyb25nOiAnXCInfX07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbWF0Y2hDb250cm9sID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbD8ucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hpbmdDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBpZiAobWF0Y2hpbmdDb250cm9sLnZhbHVlICYmIG1hdGNoaW5nQ29udHJvbC52YWx1ZSAhPT0gY29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1hdGNoQ29udHJvbDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBtYXRjaExlbmd0aCA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50IHx8ICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hpbmdDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBpZiAoKCghY29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCcrJykgJiYgIW1hdGNoaW5nQ29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCcrJykpIHx8XG4gICAgICAgIChjb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJysnKSAmJiBtYXRjaGluZ0NvbnRyb2wudmFsdWUuc3RhcnRzV2l0aCgnKycpKSkgJiZcbiAgICAgICAgKCghY29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCdcXFxcKycpICYmICFtYXRjaGluZ0NvbnRyb2wudmFsdWUuc3RhcnRzV2l0aCgnXFxcXCsnKSkgfHxcbiAgICAgICAgICAoY29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCdcXFxcKycpICYmIG1hdGNoaW5nQ29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCdcXFxcKycpKSkgJiZcbiAgICAgICAgbWF0Y2hpbmdDb250cm9sLnZhbHVlLmxlbmd0aCAhPT0gY29udHJvbC52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXRjaExlbmd0aDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBkeW5hbWljTWF4TGVuZ3RoID0gKGxlbmd0aDE6IG51bWJlciwgbGVuZ3RoMjogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbC5wYXJlbnQgfHwgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXhMZW5ndGggPSBTdHJpbmcoY29udHJvbC52YWx1ZSkuaW5jbHVkZXMoJ1snKSA/IGxlbmd0aDEgOiBsZW5ndGgyO1xuICAgICAgaWYgKGNvbnRyb2wudmFsdWUubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4TGVuZ3RoOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIGJpZ2dlclRoYW4gPSAoZmllbGROYW1lOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCB8fCAhY29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xuICAgICAgaWYgKG1hdGNoaW5nQ29udHJvbC52YWx1ZS5sZW5ndGggPT09IGNvbnRyb2wudmFsdWUubGVuZ3RoICYmIG1hdGNoaW5nQ29udHJvbC52YWx1ZSAmJiBtYXRjaGluZ0NvbnRyb2wudmFsdWUgPiBjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYmlnZ2VyVGhhbjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICByZXF1aXJlZEJ5VHlwZSA9IChmaWVsZE5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgZmllbGROYW1lID09PSAncGhvbmVTeXN0ZW0nICYmICh0eXBlID09PSBWTU5vdGlmaWNhdGlvbnNUeXBlc1snUGhvbmUgRGV2aWNlJ10gfHwgdHlwZSA9PT0gVk1Ob3RpZmljYXRpb25zVHlwZXNbJ1BhZ2VyIERldmljZSddKSB8fFxuICAgICAgICBmaWVsZE5hbWUgPT09ICdodG1sVGVtcGxhdGUnICYmIHR5cGUgPT09IFZNTm90aWZpY2F0aW9uc1R5cGVzWydIVE1MIERldmljZSddXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBzbWFsbGVyVGhhblF1b3RhID0gKGZpZWxkTmFtZTogc3RyaW5nLCBxdW90YVR5cGU6IHN0cmluZywgc2Vjb25kUXVvdGFUeXBlOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xuICAgICAgY29uc3QgcXVvdGFUeXBlQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChxdW90YVR5cGUpO1xuICAgICAgY29uc3Qgc2Vjb25kUXVvdGFUeXBlQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChzZWNvbmRRdW90YVR5cGUpO1xuXG4gICAgICBpZiAocXVvdGFUeXBlQ29udHJvbCAmJiBzZWNvbmRRdW90YVR5cGVDb250cm9sICYmIHNlY29uZFF1b3RhVHlwZUNvbnRyb2wudmFsdWUgPT09IE1haWxib3hRdW90YXNUeXBlLnN5c3RlbSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHF1b3RhVHlwZUNvbnRyb2wgJiYgcXVvdGFUeXBlQ29udHJvbC52YWx1ZSA9PT0gTWFpbGJveFF1b3Rhc1R5cGUuc3lzdGVtIHx8IG1hdGNoaW5nQ29udHJvbCAmJiBtYXRjaGluZ0NvbnRyb2wudmFsdWUgJiYgcGFyc2VJbnQobWF0Y2hpbmdDb250cm9sLnZhbHVlKSA8IHBhcnNlSW50KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc21hbGxlclRoYW46IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgYmlnZ2VyVGhhblF1b3RhID0gKGZpZWxkTmFtZTogc3RyaW5nLCBxdW90YVR5cGU6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2w/LnBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xuICAgICAgY29uc3QgcXVvdGFUeXBlQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChxdW90YVR5cGUpO1xuXG4gICAgICBpZiAocXVvdGFUeXBlQ29udHJvbCAmJiBxdW90YVR5cGVDb250cm9sLnZhbHVlID09PSBNYWlsYm94UXVvdGFzVHlwZS5jdXN0b20gJiYgbWF0Y2hpbmdDb250cm9sLnZhbHVlICYmIHBhcnNlSW50KG1hdGNoaW5nQ29udHJvbC52YWx1ZSkgPiBwYXJzZUludChjb250cm9sLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJpZ2dlclRoYW46IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgcmFuZ2VMaW1pdCA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2w/LnBhcmVudCB8fCAhY29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xuICAgICAgaWYgKChjb250cm9sLnZhbHVlIC0gbWF0Y2hpbmdDb250cm9sLnZhbHVlKSA+IDUwMDAwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmFuZ2VMaW1pdDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBjb21wYXJlcGF0dGVyblBhcnRzID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbD8udmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaGVzID0gY29udHJvbC52YWx1ZS5tYXRjaCgvXFxbKC4qPylcXF0vKTtcbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIGNvbnN0IHN1Ym1hdGNoID0gbWF0Y2hlc1sxXTtcbiAgICAgICAgY29uc3Qgc3VibWF0Y2hzcGxpdDogbnVtYmVyW10gPSBzdWJtYXRjaC5zcGxpdCgnLScpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1Ym1hdGNoc3BsaXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoc3VibWF0Y2hzcGxpdFtpXSA+PSBzdWJtYXRjaHNwbGl0W2kgKyAxXSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29tcGFyZXBhdHRlcm5QYXJ0czogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgbWF0Y2hQcmVmaXggPSAoZmllbGROYW1lOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sPy5wYXJlbnQgfHwgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaGluZ0NvbnRyb2wgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lKTtcbiAgICAgIGlmICgobWF0Y2hpbmdDb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJysnKSB8fCBjb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJysnKSB8fCBtYXRjaGluZ0NvbnRyb2wudmFsdWUuc3RhcnRzV2l0aCgnXFxcXCsnKSB8fCBjb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJ1xcXFwrJykpICYmIChjb250cm9sLnZhbHVlLmNoYXJBdCgwKSAhPT0gbWF0Y2hpbmdDb250cm9sLnZhbHVlLmNoYXJBdCgwKSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXRjaFByZWZpeDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBkZXZpY2VOYW1lVmFsaWRhdG9yID0gKGRldmljZTogRGV2aWNlKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBkZXZpY2UuZGV2aWNlS2luZCA9PT0gRGV2aWNlS2luZC5kZXZpY2VQcm9maWxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkZXZpY2UuaXNDdGlSb3V0ZVBvaW50KSB7XG4gICAgICAgIGxldCBlcnIgPSAnJztcbiAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlLm1hdGNoKC9eW2EtekEtWjAtOS1fLl0rJC8pKSB7XG4gICAgICAgICAgZXJyID0gJ3BhdHRlcm4nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9sLnZhbHVlLnRyaW0oKS5sZW5ndGggPiAxNSkge1xuICAgICAgICAgIGVyciA9ICdtYXhMZW5ndGgnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnIgPyB7bmFtZVJ1bGU6IGVycn0gOiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGRldmljZS5kZXZpY2VEZWZhdWx0cyAmJiAhZGV2aWNlLmlzQ3RpUm91dGVQb2ludCkge1xuICAgICAgICBjb25zdCBydWxlVGV4dCA9IGRldmljZS5kZXZpY2VEZWZhdWx0cy5kZXZpY2VOYW1lUmVnZXg7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSBuZXcgUmVnRXhwKHJ1bGVUZXh0LCAnZycpO1xuICAgICAgICBjb25zdCBjYXB0aW9uID0gZGV2aWNlLmRldmljZURlZmF1bHRzPy5kZXZpY2VOYW1lRXhwbGFpbmVkO1xuICAgICAgICBjb25zdCBtYXRjaCA9IChjb250cm9sLnZhbHVlIHx8ICcnKS5tYXRjaChydWxlKSB8fCBbXTtcbiAgICAgICAgY29uc3QgZXhhY3RNYXRjaCA9IG1hdGNoICYmIGNvbnRyb2wudmFsdWUgPT09IG1hdGNoWzBdO1xuICAgICAgICBpZiAocnVsZSAmJiAhZXhhY3RNYXRjaCkge1xuICAgICAgICAgIHJldHVybiB7bmFtZVJ1bGU6IHtjYXB0aW9ufX07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgZGV2aWNlTmFtZVZhbHVlVmFsaWRhdG9yID0gKGRldmljZTogRGV2aWNlLCBkZXZpY2VOYW1lOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGRldmljZS5kZXZpY2VLaW5kID09PSBEZXZpY2VLaW5kLmRldmljZVByb2ZpbGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRldmljZS5uYW1lICYmIGRldmljZS5hbHJlYWR5VXNlZE5hbWUgJiYgZGV2aWNlLm5hbWUgPT09IGRldmljZS5hbHJlYWR5VXNlZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtuYW1lUnVsZTogJ2FscmVhZHlVc2VkTmFtZSd9O1xuICAgICAgfVxuICAgICAgaWYgKGRldmljZS5pc0N0aVJvdXRlUG9pbnQpIHtcbiAgICAgICAgbGV0IGVyciA9ICcnO1xuICAgICAgICBpZiAoIWRldmljZU5hbWUubWF0Y2goL15bYS16QS1aMC05LV8uXSskLykpIHtcbiAgICAgICAgICBlcnIgPSAncGF0dGVybic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRldmljZU5hbWUudHJpbSgpLmxlbmd0aCA+IDE1KSB7XG4gICAgICAgICAgZXJyID0gJ21heExlbmd0aCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVyciA/IHtuYW1lUnVsZTogZXJyfSA6IG51bGw7XG4gICAgICB9XG4gICAgIGlmIChkZXZpY2UuZGV2aWNlRGVmYXVsdHMgJiYgIWRldmljZS5pc0N0aVJvdXRlUG9pbnQpIHtcbiAgICAgICBjb25zdCBydWxlVGV4dCA9IGRldmljZS5kZXZpY2VEZWZhdWx0cy5kZXZpY2VOYW1lUmVnZXg7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdEZXYgbmFtZSBydWxlIC0gJywgcnVsZVRleHQpO1xuICAgICAgICBjb25zdCBydWxlID0gbmV3IFJlZ0V4cChydWxlVGV4dCwgJ2cnKTtcbiAgICAgICAgbGV0IGNhcHRpb24gPSBkZXZpY2UuZGV2aWNlRGVmYXVsdHMuZGV2aWNlTmFtZUV4cGxhaW5lZDtcbiAgICAgICAgaWYgKCFjYXB0aW9uKSB7XG4gICAgICAgICAgY2FwdGlvbiA9IHJ1bGVUZXh0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1hdGNoID0gKGRldmljZU5hbWUgfHwgJycpLm1hdGNoKHJ1bGUpIHx8IFtdO1xuICAgICAgICBjb25zdCBleGFjdE1hdGNoID0gbWF0Y2ggJiYgZGV2aWNlTmFtZSA9PT0gbWF0Y2hbMF07XG4gICAgICAgIGlmIChydWxlICYmICFleGFjdE1hdGNoKSB7XG4gICAgICAgICAgcmV0dXJuIHtuYW1lUnVsZToge2NhcHRpb259fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBkZXZpY2VEdXBsaWNhdGluZ05hbWVWYWxpZGF0b3IgPSAodXNlcjogYW55LCBwa2lkID86IHN0cmluZywgcHJlZml4Pzogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbC52YWx1ZSB8fCAhdXNlciB8fCAhdXNlci5kZXZpY2VzIHx8IHVzZXIuZGV2aWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGV2aWNlTmFtZSA9IHByZWZpeCA/IGAke3ByZWZpeH0ke2NvbnRyb2wudmFsdWV9YCA6IGNvbnRyb2wudmFsdWU7XG4gICAgICBjb25zdCBkZXZpY2VzV2l0aFRoZVNhbWVOYW1lID0gdXNlci5kZXZpY2VzLmZpbHRlcigoZGV2aWNlOiBEZXZpY2UpID0+IGRldmljZS5uYW1lID09PSBkZXZpY2VOYW1lKTtcbiAgICAgIGlmIChkZXZpY2VzV2l0aFRoZVNhbWVOYW1lLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKCFwa2lkKSB7ICAvLyBGb3IgbmV3IGRldmljZVxuICAgICAgICAgIHJldHVybiB7ZHVwbGljYXRlTmFtZVJ1bGU6IHRydWV9O1xuICAgICAgICB9IGVsc2UgaWYgKHBraWQgIT09IGRldmljZXNXaXRoVGhlU2FtZU5hbWVbMF0ucGtpZCkgeyAvLyBGb3IgdXBkYXRpbmcgZGV2aWNlLCBhdm9pZCB2YWxpZGF0aW5nIHdpdGggaXRzZWxmXG4gICAgICAgICAgcmV0dXJuIHtkdXBsaWNhdGVOYW1lUnVsZTogdHJ1ZX07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgY29uZGl0aW9uYWxSZXF1aXJlZCA9IChmaWVsZE5hbWU6IHN0cmluZywgcmVxdWlyZWRDb25kaXRpb25WYWx1ZXM6IGFueVtdKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudDEgPSBjb250cm9sLnBhcmVudDtcbiAgICAgIGlmICghcGFyZW50MSB8fCAhcGFyZW50MS5nZXQoZmllbGROYW1lKSB8fCAhcGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocmVxdWlyZWRDb25kaXRpb25WYWx1ZXMuaW5jbHVkZXMocGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZSkgJiYgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBjb25kaXRpb25hbFJlcXVpcmVkRm9yR3JvdXBBZG1pbiA9IChmaWVsZE5hbWU6IHN0cmluZywgcmVxdWlyZWRDb25kaXRpb25WYWx1ZXM6IGFueVtdKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudDEgPSBjb250cm9sLnBhcmVudDtcbiAgICAgIGlmICghcGFyZW50MSB8fCAhcGFyZW50MS5nZXQoZmllbGROYW1lKSB8fCAhcGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZSB8fCAhcGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZS50eXBlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChyZXF1aXJlZENvbmRpdGlvblZhbHVlcy5pbmNsdWRlcyhwYXJlbnQxLmdldChmaWVsZE5hbWUpLnZhbHVlLnR5cGUpICYmICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgY29uZGl0aW9uYWxTaXRlR3JvdXBDaGVja0Zvckdyb3VwQWRtaW4gPSAoZmllbGROYW1lOiBzdHJpbmcsIHJlcXVpcmVkQ29uZGl0aW9uVmFsdWVzOiBhbnlbXSkgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQxID0gY29udHJvbC5wYXJlbnQ7XG4gICAgICBpZiAoIXBhcmVudDEgfHwgIXBhcmVudDEuZ2V0KGZpZWxkTmFtZSkgfHwgIXBhcmVudDEuZ2V0KGZpZWxkTmFtZSkudmFsdWUgfHwgIXBhcmVudDEuZ2V0KGZpZWxkTmFtZSkudmFsdWUudHlwZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZSAmJiByZXF1aXJlZENvbmRpdGlvblZhbHVlcy5pbmNsdWRlcyhwYXJlbnQxLmdldChmaWVsZE5hbWUpLnZhbHVlLnR5cGUpICYmXG4gICAgICAgIHBhcmVudDEuZ2V0KCdzaXRlR3JvdXAnKSAmJiBwYXJlbnQxLmdldCgnc2l0ZUdyb3VwJykudmFsdWUgJiZcbiAgICAgICAgcGFyZW50MS5nZXQoJ3NpdGVHcm91cCcpLnZhbHVlLnNpdGVHcm91cE1lbWJlcnMgJiYgcGFyZW50MS5nZXQoJ3NpdGVHcm91cCcpLnZhbHVlLnNpdGVHcm91cE1lbWJlcnMubGVuZ3RoIDwgMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhhc1NpdGVHcm91cEVycm9yOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIHJlcXVpcmVkSWZGaWVsZElzRW1wdHlGb3JCTEYgPSAoZmllbGROYW1lOiBhbnkpID0+IHtcbiAgICBjb25zdCBEQVRFX1BBVFRFUk4gPSAnXigwWzEtOV18MVswMTJdKVstIFxcLy5dKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gXFwvLl0oMTl8MjApXFxkXFxkJCc7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRyb2wucGFyZW50O1xuICAgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC5nZXQoZmllbGROYW1lKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghcGFyZW50LmdldChmaWVsZE5hbWUpLnZhbHVlICYmICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWRFaXRoZXI6IHRydWUsXG4gICAgICAgICAgcmVxdWlyZWRCTEZETjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuXG4gIHZhbGlkRGF0ZSA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuXG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRyb2wucGFyZW50O1xuICAgICAgY29uc3QgcnVsZVRleHQgPSAnXigwWzEtOV18MVswMTJdKVstIFxcLy5dKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gXFwvLl0oMTl8MjApXFxkXFxkJCc7XG4gICAgICBjb25zdCBydWxlID0gbmV3IFJlZ0V4cChydWxlVGV4dCwgJ2cnKTtcbiAgICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWUgJiYgY29udHJvbC52YWx1ZS5nZXREYXRlKCk7XG4gICAgICBpZiAocnVsZSAmJiAhcnVsZS50ZXN0KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuIHtwYXR0ZXJuOiB0cnVlfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cblxuICBtYXRjaE9wdGlvbiA9IChvcHRpb25UeXBlOiBzdHJpbmcsIGxpc3Q/OiBhbnksIGlzRnVsbExpc3Q/OiBib29sZWFuKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlID09PSBEZXZpY2VUeXBlcy5DVElfUk9VVEVfUE9JTlQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBsZXQgb3B0aW9uTGlzdCA9IGxpc3QgfHwgdGhpcy5nZXRPcHRpb25zTGlzdChvcHRpb25UeXBlKTtcbiAgICAgIGlmIChvcHRpb25MaXN0ICYmIG9wdGlvbkxpc3QubGVuZ3RoKSB7XG4gICAgICAgIGlmICghaXNGdWxsTGlzdCAmJiBvcHRpb25UeXBlID09PSAnZGlyZWN0b3J5TnVtYmVycycpIHtcbiAgICAgICAgICBvcHRpb25MaXN0ID0gb3B0aW9uTGlzdC5tYXAoKHN0cjogc3RyaW5nKSA9PiBzdHIuaW5kZXhPZignICcpID4gLTEgPyBzdHIuc3Vic3RyaW5nKDAsIHN0ci5pbmRleE9mKCcgJykpIDogc3RyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbkxpc3QuaW5jbHVkZXMoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWF0Y2hPcHRpb25zOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBjb25maWRlbnRpYWxBY2Nlc3NMZXZlbCA9IChjb25maWRlbnRpYWxBY2Nlc3NNb2RlOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnZhbHVlICYmICFjb25maWRlbnRpYWxBY2Nlc3NNb2RlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgbm9SZXN1bHRETiA9IChvcHRpb25UeXBlOiBzdHJpbmcsIGxpc3Q/OiBhbnkpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGxpc3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAobGlzdCAmJiBsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vUmVzdWx0RE5zOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIG1hdGNoRXh0ZW5zaW9uT3B0aW9uID0gKG9wdGlvblR5cGU6IHN0cmluZywgb3B0aW9uTGlzdD86IGFueSkgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWU7XG4gICAgICB9XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBuZXdMaXN0ID0gW107XG4gICAgICBpZiAob3B0aW9uTGlzdCAmJiBvcHRpb25MaXN0Lmxlbmd0aCkge1xuICAgICAgICBvcHRpb25MaXN0LmZvckVhY2goKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld09wdGlvbkxpc3QgPSB0aGlzLmdldE1hdGNoRXhpc3RpbmdWbUxpbmVWYWx1ZShsaXN0KTtcbiAgICAgICAgICBuZXdMaXN0LnB1c2gobmV3T3B0aW9uTGlzdCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmIChuZXdMaXN0ICYmICFuZXdMaXN0LmluY2x1ZGVzKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1hdGNoT3B0aW9uczogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbkxpc3QgfHwgIW9wdGlvbkxpc3QubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF0Y2hPcHRpb25zOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIHB1YmxpYyBnZXRNYXRjaEV4aXN0aW5nVm1MaW5lVmFsdWUoZG5XaXRoVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbmQgPSBkbldpdGhUeXBlLmluZGV4T2YoJ1R5cGU6Jyk7XG4gICAgbGV0IGRuID0gZG5XaXRoVHlwZTtcbiAgICBpZiAoaW5kID4gLTEpIHtcbiAgICAgIGRuID0gZG5XaXRoVHlwZS5zbGljZSgwLCBpbmQpO1xuICAgICAgZG4gPSBkbi50cmltKCk7XG4gICAgfVxuICAgIHJldHVybiBkbjtcbiAgfVxuXG4gIHJlcXVpcmVkRWl0aGVyRm9yVm1FeHRlbnNpb24gPSAoZmllbGROYW1lMTogc3RyaW5nLCBmaWVsZE5hbWUyOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoQ29udHJvbDEgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lMSkudmFsdWU7XG4gICAgICBjb25zdCBtYXRjaENvbnRyb2wyID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZTIpLnZhbHVlO1xuICAgICAgaWYgKCFtYXRjaENvbnRyb2wxICYmICFtYXRjaENvbnRyb2wyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWRFaXRoZXJGb3JWbUV4dGVuc2lvbjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICByZXF1aXJlZEVpdGhlck9uZSA9IChmaWVsZE5hbWUxOiBzdHJpbmcsIGZpZWxkTmFtZTI6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hDb250cm9sMSA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUxKSAmJiBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lMSkudmFsdWU7XG4gICAgICBjb25zdCBtYXRjaENvbnRyb2wyID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZTIpICYmIGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUyKS52YWx1ZTtcbiAgICAgIGlmICghbWF0Y2hDb250cm9sMSAmJiAhbWF0Y2hDb250cm9sMikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlcXVpcmVkRWl0aGVyT25lOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIHJlcXVpcmVkQnlWYWx1ZSA9IChmaWVsZE5hbWU6IHN0cmluZywgcmVxdWVzdGVkRmllbGRWYWw6IGFueSkgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wgfHwgIWNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRWYWwgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lKSAmJiBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lKS52YWx1ZTtcbiAgICAgIGlmIChmaWVsZFZhbCAmJiBmaWVsZFZhbCA9PT0gcmVxdWVzdGVkRmllbGRWYWwgJiYgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBPbmVFeHRlbnNpb25FbXB0eSA9IChmaWVsZE5hbWUxOiBzdHJpbmcsIGZpZWxkTmFtZTI6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hDb250cm9sMSA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUxKS52YWx1ZTtcbiAgICAgIGNvbnN0IG1hdGNoQ29udHJvbDIgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lMikudmFsdWU7XG4gICAgICBpZiAobWF0Y2hDb250cm9sMSAmJiBtYXRjaENvbnRyb2wyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgT25lRXh0ZW5zaW9uSXNFbXB0eTogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICByZXF1aXJlZEJ5Q29uZGl0aW9uID0gKHJlcXVpcmVkQnk6IHN0cmluZywgZmllbGROYW1lOiBhbnkpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlcXVpcmVkQnlDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KHJlcXVpcmVkQnkpLnZhbHVlO1xuICAgICAgY29uc3QgcmVxdWlyZWRDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSkudmFsdWU7XG4gICAgICBpZiAocmVxdWlyZWRCeUNvbnRyb2wgJiYgIXJlcXVpcmVkQ29udHJvbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIHByaXZhdGUgZ2V0T3B0aW9uc0xpc3QodG9rZW46IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdjc3MnOlxuICAgICAgY2FzZSAncmVyb3V0ZUNzcyc6XG4gICAgICBjYXNlICdjYWxsaW5nU2VhcmNoU3BhY2UnOlxuICAgICAgICByZXR1cm4gdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLmNhbGxpbmdTZWFyY2hTcGFjZVR5cGVzO1xuICAgICAgY2FzZSAncmVyb3V0aW5nQ3NzJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5zaXRlRGVmYXVsdHMgJiYgdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLnNpdGVEZWZhdWx0cy5jc3NGaWx0ZXI7XG4gICAgICBjYXNlICdkZXZpY2VUeXBlJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5kZXZpY2VUeXBlcztcbiAgICAgIGNhc2UgJ3JvdXRlUGFydGl0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5yb3V0ZVBhcnRpdGlvbk5hbWVzO1xuICAgICAgY2FzZSAncm91dGVQYXJ0aXRpb25GaWx0ZXJlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UuZmlsdGVyZWRSb3V0ZVBhcnRpdGlvbk5hbWVzO1xuICAgICAgY2FzZSAnZGV2aWNlUG9vbHMnOlxuICAgICAgICByZXR1cm4gdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLmRldmljZVBvb2xzO1xuICAgICAgY2FzZSAnYWxsUm91dGVQYXJ0aXRpb25zJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5hbGxSb3V0ZVBhcnRpdGlvbk5hbWVzO1xuICAgICAgY2FzZSAnZGlyZWN0b3J5TnVtYmVycyc6XG4gICAgICAgIHJldHVybiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UuZGlyZWN0b3J5TnVtYmVycztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBhdXRvY29tcGxldGVUeXBlKGNvbnRyb2w6IGFueSkge1xuICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29udHJvbC52YWx1ZSAhPT0gJ29iamVjdCcgJiYgY29udHJvbC52YWx1ZSAhPT0gJycpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0cmluZ0VudGVyZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cblxuICBwYXNzd29yZChjb250cm9sOiBhbnkpIHtcbiAgICBjb25zdCBydWxlTnVtZXJpYyA9IG5ldyBSZWdFeHAoL1xcZCsvLCAnZycpO1xuICAgIGNvbnN0IHJ1bGVDYXBpdGFscyA9IG5ldyBSZWdFeHAoL1tBLVpdKy8sICdnJyk7XG4gICAgY29uc3QgcnVsZVNtYWxsID0gbmV3IFJlZ0V4cCgvW2Etel0rLywgJ2cnKTtcbiAgICBjb25zdCBydWxlU3BlY2lhbCA9IG5ldyBSZWdFeHAoL1shQCMkJSZcXC89XFw/X1xcLiw6O1xcLVxcXFwrXSsvLCAnZycpO1xuXG4gICAgY29uc3QgaGFzTnVtZXJpYyA9ICtydWxlTnVtZXJpYy50ZXN0KGNvbnRyb2wudmFsdWUpO1xuICAgIGNvbnN0IGhhc0NhcGl0YWxzID0gK3J1bGVDYXBpdGFscy50ZXN0KGNvbnRyb2wudmFsdWUpO1xuICAgIGNvbnN0IGhhc1NtYWxsID0gK3J1bGVTbWFsbC50ZXN0KGNvbnRyb2wudmFsdWUpO1xuICAgIGNvbnN0IGhhc1NwZWNpYWwgPSArcnVsZVNwZWNpYWwudGVzdChjb250cm9sLnZhbHVlKTtcblxuICAgIGlmIChoYXNOdW1lcmljICsgaGFzQ2FwaXRhbHMgKyBoYXNTbWFsbCArIGhhc1NwZWNpYWwgPCAzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3ZWFrUGFzc3dvcmQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2ZXJpZnlBdXRvQW5zd2VyKGNvbnRyb2w6IGFueSkge1xuICAgIGlmICghY29udHJvbD8udmFsdWUgfHwgY29udHJvbC52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBsZXQgYXV0b0Fuc3dlckVycm9yTGluZSA9IG51bGw7XG4gICAgaWYgKGNvbnRyb2wucGFyZW50ICYmIGNvbnRyb2wucGFyZW50LnBhcmVudCAmJiBjb250cm9sLnBhcmVudC5wYXJlbnQucGFyZW50ICYmIGNvbnRyb2wucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50KSB7XG4gICAgICBjb25zdCBjb250cm9sU05SID0gY29udHJvbC5wYXJlbnQ7XG4gICAgICBjb25zdCBjb250cm9sVXNlciA9IGNvbnRyb2wucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50O1xuICAgICAgY29uc3QgbGluZUFzc29jaWF0aW9ucyA9IGNvbnRyb2xTTlIuZ2V0KCdsaW5lQXNzb2NpYXRpb25zJyk7XG4gICAgICBjb25zdCBsaW5lcyA9IGNvbnRyb2xVc2VyLmdldCgnbGluZXMnKTtcbiAgICAgIGlmIChsaW5lcykge1xuICAgICAgICBsaW5lQXNzb2NpYXRpb25zLnZhbHVlLmZvckVhY2goKGxpbmVBc3NvY2lhdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgYXV0b0Fuc3dlckxpbmUgPSBsaW5lcy5jb250cm9scy5maW5kKChsaW5lOiBhbnkpID0+IGxpbmUuZ2V0KCdkaXJlY3RvcnlOdW1iZXInKS52YWx1ZS5kaXJlY3RvcnlOdW1iZXIgPT09IGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIgJiYgbGluZS5nZXQoJ2RpcmVjdG9yeU51bWJlcicpLnZhbHVlLnJvdXRlUGFydGl0aW9uTmFtZSA9PT0gbGluZUFzc29jaWF0aW9uLnJvdXRlUGFydGl0aW9uTmFtZVxuICAgICAgICAgICAgJiYgbGluZS5nZXQoJ2F1dG9BbnN3ZXInKS52YWx1ZSAhPT0gJ0F1dG8gQW5zd2VyIE9mZicpO1xuICAgICAgICAgIGlmIChhdXRvQW5zd2VyTGluZSkge1xuICAgICAgICAgICAgYXV0b0Fuc3dlckVycm9yTGluZSA9IHtcbiAgICAgICAgICAgICAgYXV0b0Fuc3dlckVycm9yTGluZTogbGluZUFzc29jaWF0aW9uLmRpcmVjdG9yeU51bWJlclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhdXRvQW5zd2VyRXJyb3JMaW5lO1xuICB9XG5cbiAgdmVyaWZ5QmVnaW5FbmRUaW1lKGNvbnRyb2w6IGFueSkge1xuICAgIGNvbnN0IHBhcmVudCA9IGNvbnRyb2wucGFyZW50O1xuICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQuZ2V0KCdpc0FjdGl2ZScpIHx8ICFwYXJlbnQuZ2V0KCdhbGxEYXknKSB8fCAhcGFyZW50LmdldCgnZnJvbScpIHx8ICFwYXJlbnQuZ2V0KCd0bycpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocGFyZW50LmdldCgnaXNBY3RpdmUnKS52YWx1ZSkge1xuICAgICAgaWYgKCFwYXJlbnQuZ2V0KCdhbGxEYXknKS52YWx1ZSkge1xuICAgICAgICBpZiAoIXBhcmVudC5nZXQoJ2Zyb20nKS52YWx1ZSB8fCBwYXJlbnQuZ2V0KCdmcm9tJykudmFsdWUgPT09ICdObyBPZmZpY2UgSG91cnMnXG4gICAgICAgICAgfHwgIXBhcmVudC5nZXQoJ3RvJykudmFsdWUgfHwgcGFyZW50LmdldCgndG8nKS52YWx1ZSA9PT0gJ05vIE9mZmljZSBIb3VycydcbiAgICAgICAgICB8fCBwYXJlbnQuZ2V0KCdmcm9tJykudmFsdWUgPiBwYXJlbnQuZ2V0KCd0bycpLnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZyb21HcmVhdGVyVGhhblRvOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdGltZShjb250cm9sOiBhbnkpIHtcbiAgICBpZiAoY29udHJvbC52YWx1ZSAmJiAhdGltZVJlZ2V4LnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7dGltZUZvcm1hdDogdHJ1ZX07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cblxuICBwaW5NdWx0aUNoYXJhY3RlckNoZWNrID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hpbmdDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBjb25zdCBydWxlTXVsdGlDaGFyYWN0ZXIgPSBuZXcgUmVnRXhwKCcoWzAtOV0pXFxcXDF7Mn0nKTtcbiAgICAgIGlmIChtYXRjaGluZ0NvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgY29uc3QgaGFzTXVsdGlDaGFyYWN0ZXIgPSBydWxlTXVsdGlDaGFyYWN0ZXIudGVzdChtYXRjaGluZ0NvbnRyb2wudmFsdWUpO1xuICAgICAgICBpZiAoaGFzTXVsdGlDaGFyYWN0ZXIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbXVsdGlDaGFyYWN0ZXI6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICBwaW5Db25zZWN1dGl2ZU51bWJlckNoZWNrID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hpbmdDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBjb25zdCBzdHJUb0NoZWNrID0gbWF0Y2hpbmdDb250cm9sLnZhbHVlO1xuICAgICAgaWYgKHN0clRvQ2hlY2sgJiYgc3RyVG9DaGVjay5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IHJlc0FzYyA9IHRoaXMucGluT3JkZXJDaGVjayhzdHJUb0NoZWNrKTtcbiAgICAgICAgaWYgKHJlc0FzYyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25zZWN1dGl2ZU51bWJlcnM6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuXG4gIHBpbk9yZGVyQ2hlY2soc3RyOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmIChzdHIpIHtcbiAgICAgIGNvbnN0IGFycl9udW0gPSAoJycgKyBzdHIpLnNwbGl0KCcnKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyX251bS5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgY29uc3QgbnVtMSA9IHBhcnNlSW50KGFycl9udW1baV0pO1xuICAgICAgICBjb25zdCBudW0yID0gcGFyc2VJbnQoYXJyX251bVtpICsgMV0pO1xuICAgICAgICBjb25zdCBudW0zID0gcGFyc2VJbnQoYXJyX251bVtpICsgMl0pO1xuICAgICAgICBpZiAoKG51bTIgLSBudW0xKSA9PT0gMSAmJiAobnVtMyAtIG51bTIgPT09IG51bTIgLSBudW0xKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cblxuICBwaW5NYWlsYm94RXh0ZW5zaW9uQ2hlY2sgPSAoZmllbGROYW1lOiBzdHJpbmcsIGV4dGVuc2lvbjogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbC5wYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaGluZ0NvbnRyb2wgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lKTtcbiAgICAgIGNvbnN0IHN0clRvQ2hlY2sgPSBtYXRjaGluZ0NvbnRyb2wudmFsdWU7XG4gICAgICBpZiAoc3RyVG9DaGVjayA9PT0gZXh0ZW5zaW9uIHx8IHN0clRvQ2hlY2suaW5jbHVkZXMoZXh0ZW5zaW9uKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1haWxib3hFeHRlbnNpb246IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgaXNJdGVtQWxyZWFkeUluTGlzdChpdGVtOiBhbnksIGxpc3Q6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghaXRlbSB8fCAhbGlzdCB8fCAhbGlzdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaXN0SXRlbSBvZiBsaXN0KSB7XG4gICAgICBpZiAoaXRlbS5lcXVhbHMobGlzdEl0ZW0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==