@tuki-io/tuki-widgets 0.0.201 → 0.0.202

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 (191) hide show
  1. package/README.md +24 -24
  2. package/esm2020/contact-center/cc-readiness/cc-readiness.module.mjs +1 -1
  3. package/esm2020/contact-center/cc-readiness/cc-readiness.service.mjs +1 -1
  4. package/esm2020/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.mjs +3 -3
  5. package/esm2020/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.mjs +3 -3
  6. package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +2 -2
  7. package/esm2020/di2mt/widgets/upgrade-overview/cards/pending-activation-users/pending-activation-users.component.mjs +17 -17
  8. package/esm2020/lib/widgets.component.mjs +9 -9
  9. package/esm2020/lib/widgets.module.mjs +1 -1
  10. package/esm2020/lib/widgets.service.mjs +1 -1
  11. package/esm2020/public-api.mjs +1 -1
  12. package/esm2020/user-creation/src/app.constants.mjs +16 -2
  13. package/esm2020/user-creation/src/classes/notification.mjs +32 -0
  14. package/esm2020/user-creation/src/classes/site.mjs +1 -1
  15. package/esm2020/user-creation/src/environments/environment.mjs +11 -0
  16. package/esm2020/user-creation/src/interfaces/user-creation-wizard.interfaces.mjs +199 -0
  17. package/esm2020/user-creation/src/shared/components/notification/notification.component.mjs +38 -0
  18. package/esm2020/user-creation/src/shared/material.module.mjs +35 -7
  19. package/esm2020/user-creation/src/shared/pipes/truncate.pipe.mjs +30 -0
  20. package/esm2020/user-creation/src/shared/services/notification.service.mjs +62 -0
  21. package/esm2020/user-creation/src/shared/services/user-creation-api.service.mjs +43 -19
  22. package/esm2020/user-creation/src/shared/services/utils.mjs +1 -1
  23. package/esm2020/user-creation/src/shared/shared.module.mjs +27 -4
  24. package/esm2020/user-creation/src/user-creation.module.mjs +40 -7
  25. package/esm2020/user-creation/src/utils/app-loader/app-loader.mjs +14 -0
  26. package/esm2020/user-creation/src/utils/build-savable-end-user.mjs +147 -0
  27. package/esm2020/user-creation/src/utils/device-default-prefix.mjs +13 -0
  28. package/esm2020/user-creation/src/utils/device-name-validation.mjs +23 -0
  29. package/esm2020/user-creation/src/utils/model.mjs +19 -0
  30. package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +26 -0
  31. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.mjs +512 -20
  32. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-overview-step/user-overview-step.component.mjs +3 -3
  33. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.mjs +80 -34
  34. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +83 -19
  35. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.mjs +599 -124
  36. package/esm2020/user-device-manage/public-api.mjs +1 -1
  37. package/esm2020/user-device-manage/src/app.constants.mjs +1 -1
  38. package/esm2020/user-device-manage/src/classes/device.mjs +1 -1
  39. package/esm2020/user-device-manage/src/classes/deviceProfile.mjs +1 -1
  40. package/esm2020/user-device-manage/src/classes/line-association-interface.mjs +1 -1
  41. package/esm2020/user-device-manage/src/classes/line-association.mjs +1 -1
  42. package/esm2020/user-device-manage/src/classes/line-call-info-display.mjs +1 -1
  43. package/esm2020/user-device-manage/src/classes/line-directory.mjs +1 -1
  44. package/esm2020/user-device-manage/src/classes/line.mjs +1 -1
  45. package/esm2020/user-device-manage/src/classes/notification.mjs +1 -1
  46. package/esm2020/user-device-manage/src/classes/recording-options.mjs +1 -1
  47. package/esm2020/user-device-manage/src/classes/simplified-user.mjs +1 -1
  48. package/esm2020/user-device-manage/src/classes/site-defaults.mjs +1 -1
  49. package/esm2020/user-device-manage/src/classes/translation-pattern.mjs +1 -1
  50. package/esm2020/user-device-manage/src/classes/types.mjs +1 -1
  51. package/esm2020/user-device-manage/src/common-functions.mjs +1 -1
  52. package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +3 -3
  53. package/esm2020/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.mjs +3 -3
  54. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.mjs +3 -3
  55. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.mjs +3 -3
  56. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line.component.mjs +1 -1
  57. package/esm2020/user-device-manage/src/device-info/device-info.component.mjs +3 -3
  58. package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +2 -2
  59. package/esm2020/user-device-manage/src/environments/environment.mjs +1 -1
  60. package/esm2020/user-device-manage/src/interseptors/auth.interceptor.mjs +1 -1
  61. package/esm2020/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
  62. package/esm2020/user-device-manage/src/material.module.mjs +1 -1
  63. package/esm2020/user-device-manage/src/notifications/notification.component.mjs +3 -3
  64. package/esm2020/user-device-manage/src/pipes/mac-address.pipe.mjs +1 -1
  65. package/esm2020/user-device-manage/src/services/api.service.mjs +1 -1
  66. package/esm2020/user-device-manage/src/services/device.service.mjs +1 -1
  67. package/esm2020/user-device-manage/src/services/dns.service.mjs +1 -1
  68. package/esm2020/user-device-manage/src/services/line.service.mjs +1 -1
  69. package/esm2020/user-device-manage/src/services/notification.service.mjs +1 -1
  70. package/esm2020/user-device-manage/src/services/removeKynFromIBM.service.mjs +1 -1
  71. package/esm2020/user-device-manage/src/services/site-settings.service.mjs +1 -1
  72. package/esm2020/user-device-manage/src/services/sorting-utils.service.mjs +1 -1
  73. package/esm2020/user-device-manage/src/services/user.service.mjs +1 -1
  74. package/esm2020/user-device-manage/src/services/utils.service.mjs +1 -1
  75. package/esm2020/user-device-manage/src/services/validation.service.mjs +1 -1
  76. package/esm2020/user-device-manage/src/shared/tk-page-section/page-section.component.mjs +1 -1
  77. package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +3 -3
  78. package/esm2020/user-manage/public-api.mjs +1 -1
  79. package/esm2020/user-manage/src/app.constants.mjs +1 -1
  80. package/esm2020/user-manage/src/classes/device.mjs +1 -1
  81. package/esm2020/user-manage/src/classes/line-association-interface.mjs +1 -1
  82. package/esm2020/user-manage/src/classes/line-association.mjs +1 -1
  83. package/esm2020/user-manage/src/classes/line-call-info-display.mjs +1 -1
  84. package/esm2020/user-manage/src/classes/line-directory.mjs +1 -1
  85. package/esm2020/user-manage/src/classes/line.mjs +1 -1
  86. package/esm2020/user-manage/src/classes/notification.mjs +1 -1
  87. package/esm2020/user-manage/src/classes/pagination.mjs +1 -1
  88. package/esm2020/user-manage/src/classes/recording-options.mjs +1 -1
  89. package/esm2020/user-manage/src/classes/simplified-user.mjs +1 -1
  90. package/esm2020/user-manage/src/classes/table-data.mjs +1 -1
  91. package/esm2020/user-manage/src/classes/translation-pattern.mjs +1 -1
  92. package/esm2020/user-manage/src/classes/user-list.mjs +1 -1
  93. package/esm2020/user-manage/src/common-functions.mjs +1 -1
  94. package/esm2020/user-manage/src/device-list/device-list.component.mjs +3 -3
  95. package/esm2020/user-manage/src/device-list/device-row/device-row.component.mjs +3 -3
  96. package/esm2020/user-manage/src/environments/environment.mjs +1 -1
  97. package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +1 -1
  98. package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
  99. package/esm2020/user-manage/src/material.module.mjs +1 -1
  100. package/esm2020/user-manage/src/notifications/notification.component.mjs +3 -3
  101. package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +1 -1
  102. package/esm2020/user-manage/src/services/api.service.mjs +1 -1
  103. package/esm2020/user-manage/src/services/dns.service.mjs +1 -1
  104. package/esm2020/user-manage/src/services/line.service.mjs +1 -1
  105. package/esm2020/user-manage/src/services/notification.service.mjs +1 -1
  106. package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +1 -1
  107. package/esm2020/user-manage/src/services/site-settings.service.mjs +1 -1
  108. package/esm2020/user-manage/src/services/sorting-utils.service.mjs +1 -1
  109. package/esm2020/user-manage/src/services/user.service.mjs +1 -1
  110. package/esm2020/user-manage/src/services/utils.service.mjs +1 -1
  111. package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +3 -3
  112. package/esm2020/user-manage/src/user-info/user-info.component.mjs +3 -3
  113. package/esm2020/user-manage/src/user-manage-widget.component.mjs +2 -2
  114. package/esm2020/user-manage/src/user-manage.module.mjs +1 -1
  115. package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +3 -3
  116. package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +3 -3
  117. package/esm2020/users-list/public-api.mjs +1 -1
  118. package/esm2020/users-list/src/app.constants.mjs +1 -1
  119. package/esm2020/users-list/src/classes/app-location.mjs +1 -1
  120. package/esm2020/users-list/src/classes/device.mjs +1 -1
  121. package/esm2020/users-list/src/classes/line.mjs +1 -1
  122. package/esm2020/users-list/src/classes/move-user.mjs +1 -1
  123. package/esm2020/users-list/src/classes/notification.mjs +1 -1
  124. package/esm2020/users-list/src/classes/simlified-user.mjs +1 -1
  125. package/esm2020/users-list/src/classes/table-data.mjs +1 -1
  126. package/esm2020/users-list/src/classes/user-list.mjs +1 -1
  127. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.mjs +3 -3
  128. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.mjs +3 -3
  129. package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +3 -3
  130. package/esm2020/users-list/src/services/api-webex.service.mjs +1 -1
  131. package/esm2020/users-list/src/services/api.service.mjs +1 -1
  132. package/esm2020/users-list/src/services/dns.service.mjs +1 -1
  133. package/esm2020/users-list/src/services/events-communication.service.mjs +1 -1
  134. package/esm2020/users-list/src/services/notification.service.mjs +1 -1
  135. package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +1 -1
  136. package/esm2020/users-list/src/services/site-settings.service.mjs +1 -1
  137. package/esm2020/users-list/src/services/user.service.mjs +1 -1
  138. package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +3 -3
  139. package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +3 -3
  140. package/esm2020/users-list/src/utils/common-functions.mjs +1 -1
  141. package/esm2020/users-list/src/utils/utils.service.mjs +1 -1
  142. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +2 -2
  143. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  144. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +20 -20
  145. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  146. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +2129 -325
  147. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  148. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +18 -18
  149. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  150. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +18 -18
  151. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  152. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +10 -10
  153. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  154. package/fesm2015/tuki-io-tuki-widgets.mjs +8 -8
  155. package/fesm2015/tuki-io-tuki-widgets.mjs.map +1 -1
  156. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +2 -2
  157. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  158. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +20 -20
  159. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  160. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +2084 -314
  161. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  162. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +18 -18
  163. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  164. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +18 -18
  165. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  166. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +10 -10
  167. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  168. package/fesm2020/tuki-io-tuki-widgets.mjs +8 -8
  169. package/fesm2020/tuki-io-tuki-widgets.mjs.map +1 -1
  170. package/package.json +1 -1
  171. package/user-creation/src/app.constants.d.ts +10 -0
  172. package/user-creation/src/classes/notification.d.ts +18 -0
  173. package/user-creation/src/environments/environment.d.ts +9 -0
  174. package/user-creation/src/interfaces/user-creation-wizard.interfaces.d.ts +554 -0
  175. package/user-creation/src/shared/components/notification/notification.component.d.ts +19 -0
  176. package/user-creation/src/shared/material.module.d.ts +5 -1
  177. package/user-creation/src/shared/pipes/truncate.pipe.d.ts +7 -0
  178. package/user-creation/src/shared/services/notification.service.d.ts +18 -0
  179. package/user-creation/src/shared/services/user-creation-api.service.d.ts +8 -2
  180. package/user-creation/src/shared/shared.module.d.ts +3 -1
  181. package/user-creation/src/user-creation.module.d.ts +17 -10
  182. package/user-creation/src/utils/app-loader/app-loader.d.ts +6 -0
  183. package/user-creation/src/utils/build-savable-end-user.d.ts +23 -0
  184. package/user-creation/src/utils/device-default-prefix.d.ts +5 -0
  185. package/user-creation/src/utils/device-name-validation.d.ts +6 -0
  186. package/user-creation/src/utils/model.d.ts +1 -0
  187. package/user-creation/src/utils/parse-device-name-rule.d.ts +8 -0
  188. package/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.d.ts +83 -7
  189. package/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.d.ts +11 -4
  190. package/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.d.ts +18 -0
  191. package/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.d.ts +71 -56
@@ -11,9 +11,9 @@ export class UserOverviewStepComponent {
11
11
  }
12
12
  }
13
13
  UserOverviewStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserOverviewStepComponent, deps: [{ token: i1.UserCreationWizardService }], target: i0.ɵɵFactoryTarget.Component });
14
- UserOverviewStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UserOverviewStepComponent, selector: "tk-user-overview-step", ngImport: i0, template: "<section class=\"details-step-content\">\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">User details</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"USER_DETAILS_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of USER_DETAILS_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let user of userCreationWizardService.overviewUsers\">\r\n <span>{{ user.userId }}</span>\r\n <span>{{ user.firstName }}</span>\r\n <span>{{ user.lastName }}</span>\r\n <span>{{ user.email }}</span>\r\n <span>{{ user.userTemplate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n \r\n <div class=\"details-step-divider\"></div>\r\n \r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Lines</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"LINES_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of LINES_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let line of userCreationWizardService.overviewLines\">\r\n <span>{{ line.number }}</span>\r\n <span>{{ line.did }}</span>\r\n <span>{{ line.routePartitionName }}</span>\r\n <span>{{ line.css }}</span>\r\n <span>{{ line.description }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n \r\n <div class=\"details-step-divider\"></div>\r\n \r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Devices</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"DEVICES_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of DEVICES_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let device of userCreationWizardService.overviewDevices\">\r\n <span>{{ device.name }}</span>\r\n <span>{{ device.deviceType }}</span>\r\n <span>{{ device.lines }}</span>\r\n <span>{{ device.description }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"details-step-divider\"></div>\r\n \r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Single Number Reach</h3>\r\n <div class=\"details-step-section__content\"></div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"details-step-divider\"></div>\r\n \r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Features</h3>\r\n <div class=\"details-step-section__content\">\r\n <span style=\"margin-right: 1rem;\">Voicemail</span> 557046\r\n </div>\r\n </section>\r\n </div>\r\n\r\n</section>", styles: [".details-step-content{display:flex;flex-direction:column;gap:24px}.details-step-divider{border-top:1px solid #d9d9d9}.details-step-sections{display:flex;flex-direction:column}.details-step-section{display:flex;flex-direction:column;gap:16px}.details-step-section+.details-step-section{border-top:1px solid #d9d9d9}.details-step-section__title{margin:0;font-family:Inter,sans-serif;font-size:16px;font-weight:600;line-height:100%;letter-spacing:0;color:#333}.preview-list{display:flex;flex-direction:column;gap:4px}.preview-list__header,.preview-list__row{display:grid;grid-template-columns:repeat(var(--preview-cols, 1),minmax(0,1fr));column-gap:24px}.preview-list__header>span,.preview-list__row>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--Gray-700, #737480);font-family:Inter,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:16px}.preview-list__row>span{min-width:0;color:var(--Gray-700, #333);font-family:Inter,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:150%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
14
+ UserOverviewStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UserOverviewStepComponent, selector: "tk-user-overview-step", ngImport: i0, template: "<section class=\"details-step-content\">\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">User details</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"USER_DETAILS_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of USER_DETAILS_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let user of userCreationWizardService.overviewUsers\">\r\n <span>{{ user.userId }}</span>\r\n <span>{{ user.firstName }}</span>\r\n <span>{{ user.lastName }}</span>\r\n <span>{{ user.email }}</span>\r\n <span>{{ user.userTemplate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"details-step-divider\"></div>\r\n\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Lines</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"LINES_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of LINES_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let line of userCreationWizardService.overviewLines\">\r\n <span>{{ line.number }}</span>\r\n <span>{{ line.did }}</span>\r\n <span>{{ line.routePartitionName }}</span>\r\n <span>{{ line.css }}</span>\r\n <span>{{ line.description }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"details-step-divider\"></div>\r\n\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Devices</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"DEVICES_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of DEVICES_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let device of userCreationWizardService.overviewDevices\">\r\n <span>{{ device.name }}</span>\r\n <span>{{ device.deviceType }}</span>\r\n <span>{{ device.lines }}</span>\r\n <span>{{ device.description }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <ng-container *ngIf=\"userCreationWizardService.overviewDeviceProfiles.length\">\r\n <div class=\"details-step-divider\"></div>\r\n\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Device profiles</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"DEVICES_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of DEVICES_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let device of userCreationWizardService.overviewDeviceProfiles\">\r\n <span>{{ device.name }}</span>\r\n <span>{{ device.deviceType }}</span>\r\n <span>{{ device.lines }}</span>\r\n <span>{{ device.description }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"details-step-divider\"></div>\r\n\r\n <!-- <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Single Number Reach</h3>\r\n <div class=\"details-step-section__content\"></div>\r\n </section>\r\n </div> -->\r\n\r\n <!-- <div class=\"details-step-divider\"></div>\r\n\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Features</h3>\r\n <div class=\"details-step-section__content\">\r\n <span style=\"margin-right: 1rem;\">Voicemail</span> 557046\r\n </div>\r\n </section>\r\n </div> -->\r\n</section>\r\n", styles: [".details-step-content{display:flex;flex-direction:column;gap:24px}.details-step-divider{border-top:1px solid #d9d9d9}.details-step-sections{display:flex;flex-direction:column}.details-step-section{display:flex;flex-direction:column;gap:16px}.details-step-section+.details-step-section{border-top:1px solid #d9d9d9}.details-step-section__title{margin:0;font-family:Inter,sans-serif;font-size:16px;font-weight:600;line-height:100%;letter-spacing:0;color:#333}.preview-list{display:flex;flex-direction:column;gap:4px}.preview-list__header,.preview-list__row{display:grid;grid-template-columns:repeat(var(--preview-cols, 1),minmax(0,1fr));column-gap:24px}.preview-list__header>span,.preview-list__row>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--Gray-700, #737480);font-family:Inter,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:16px}.preview-list__row>span{min-width:0;color:var(--Gray-700, #333);font-family:Inter,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:150%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
15
15
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserOverviewStepComponent, decorators: [{
16
16
  type: Component,
17
- args: [{ selector: 'tk-user-overview-step', template: "<section class=\"details-step-content\">\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">User details</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"USER_DETAILS_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of USER_DETAILS_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let user of userCreationWizardService.overviewUsers\">\r\n <span>{{ user.userId }}</span>\r\n <span>{{ user.firstName }}</span>\r\n <span>{{ user.lastName }}</span>\r\n <span>{{ user.email }}</span>\r\n <span>{{ user.userTemplate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n \r\n <div class=\"details-step-divider\"></div>\r\n \r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Lines</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"LINES_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of LINES_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let line of userCreationWizardService.overviewLines\">\r\n <span>{{ line.number }}</span>\r\n <span>{{ line.did }}</span>\r\n <span>{{ line.routePartitionName }}</span>\r\n <span>{{ line.css }}</span>\r\n <span>{{ line.description }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n \r\n <div class=\"details-step-divider\"></div>\r\n \r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Devices</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"DEVICES_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of DEVICES_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let device of userCreationWizardService.overviewDevices\">\r\n <span>{{ device.name }}</span>\r\n <span>{{ device.deviceType }}</span>\r\n <span>{{ device.lines }}</span>\r\n <span>{{ device.description }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"details-step-divider\"></div>\r\n \r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Single Number Reach</h3>\r\n <div class=\"details-step-section__content\"></div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"details-step-divider\"></div>\r\n \r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Features</h3>\r\n <div class=\"details-step-section__content\">\r\n <span style=\"margin-right: 1rem;\">Voicemail</span> 557046\r\n </div>\r\n </section>\r\n </div>\r\n\r\n</section>", styles: [".details-step-content{display:flex;flex-direction:column;gap:24px}.details-step-divider{border-top:1px solid #d9d9d9}.details-step-sections{display:flex;flex-direction:column}.details-step-section{display:flex;flex-direction:column;gap:16px}.details-step-section+.details-step-section{border-top:1px solid #d9d9d9}.details-step-section__title{margin:0;font-family:Inter,sans-serif;font-size:16px;font-weight:600;line-height:100%;letter-spacing:0;color:#333}.preview-list{display:flex;flex-direction:column;gap:4px}.preview-list__header,.preview-list__row{display:grid;grid-template-columns:repeat(var(--preview-cols, 1),minmax(0,1fr));column-gap:24px}.preview-list__header>span,.preview-list__row>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--Gray-700, #737480);font-family:Inter,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:16px}.preview-list__row>span{min-width:0;color:var(--Gray-700, #333);font-family:Inter,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:150%}\n"] }]
17
+ args: [{ selector: 'tk-user-overview-step', template: "<section class=\"details-step-content\">\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">User details</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"USER_DETAILS_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of USER_DETAILS_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let user of userCreationWizardService.overviewUsers\">\r\n <span>{{ user.userId }}</span>\r\n <span>{{ user.firstName }}</span>\r\n <span>{{ user.lastName }}</span>\r\n <span>{{ user.email }}</span>\r\n <span>{{ user.userTemplate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"details-step-divider\"></div>\r\n\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Lines</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"LINES_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of LINES_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let line of userCreationWizardService.overviewLines\">\r\n <span>{{ line.number }}</span>\r\n <span>{{ line.did }}</span>\r\n <span>{{ line.routePartitionName }}</span>\r\n <span>{{ line.css }}</span>\r\n <span>{{ line.description }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"details-step-divider\"></div>\r\n\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Devices</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"DEVICES_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of DEVICES_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let device of userCreationWizardService.overviewDevices\">\r\n <span>{{ device.name }}</span>\r\n <span>{{ device.deviceType }}</span>\r\n <span>{{ device.lines }}</span>\r\n <span>{{ device.description }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <ng-container *ngIf=\"userCreationWizardService.overviewDeviceProfiles.length\">\r\n <div class=\"details-step-divider\"></div>\r\n\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Device profiles</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"DEVICES_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of DEVICES_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let device of userCreationWizardService.overviewDeviceProfiles\">\r\n <span>{{ device.name }}</span>\r\n <span>{{ device.deviceType }}</span>\r\n <span>{{ device.lines }}</span>\r\n <span>{{ device.description }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"details-step-divider\"></div>\r\n\r\n <!-- <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Single Number Reach</h3>\r\n <div class=\"details-step-section__content\"></div>\r\n </section>\r\n </div> -->\r\n\r\n <!-- <div class=\"details-step-divider\"></div>\r\n\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Features</h3>\r\n <div class=\"details-step-section__content\">\r\n <span style=\"margin-right: 1rem;\">Voicemail</span> 557046\r\n </div>\r\n </section>\r\n </div> -->\r\n</section>\r\n", styles: [".details-step-content{display:flex;flex-direction:column;gap:24px}.details-step-divider{border-top:1px solid #d9d9d9}.details-step-sections{display:flex;flex-direction:column}.details-step-section{display:flex;flex-direction:column;gap:16px}.details-step-section+.details-step-section{border-top:1px solid #d9d9d9}.details-step-section__title{margin:0;font-family:Inter,sans-serif;font-size:16px;font-weight:600;line-height:100%;letter-spacing:0;color:#333}.preview-list{display:flex;flex-direction:column;gap:4px}.preview-list__header,.preview-list__row{display:grid;grid-template-columns:repeat(var(--preview-cols, 1),minmax(0,1fr));column-gap:24px}.preview-list__header>span,.preview-list__row>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--Gray-700, #737480);font-family:Inter,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:16px}.preview-list__row>span{min-width:0;color:var(--Gray-700, #333);font-family:Inter,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:150%}\n"] }]
18
18
  }], ctorParameters: function () { return [{ type: i1.UserCreationWizardService }]; } });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1vdmVydmlldy1zdGVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy93aWRnZXRzL3VzZXItY3JlYXRpb24td2l6YXJkL2NvbXBvbmVudHMvdXNlci1vdmVydmlldy1zdGVwL3VzZXItb3ZlcnZpZXctc3RlcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvdXNlci1jcmVhdGlvbi9zcmMvd2lkZ2V0cy91c2VyLWNyZWF0aW9uLXdpemFyZC9jb21wb25lbnRzL3VzZXItb3ZlcnZpZXctc3RlcC91c2VyLW92ZXJ2aWV3LXN0ZXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVExQyxNQUFNLE9BQU8seUJBQXlCO0lBS2xDLFlBQ1cseUJBQW9EO1FBQXBELDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFMdEQsc0JBQWlCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RixlQUFVLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM3RSxpQkFBWSxHQUFHLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFJckUsQ0FBQzs7dUhBUEsseUJBQXlCOzJHQUF6Qix5QkFBeUIsNkRDUnRDLG81R0FvRlU7NEZENUVHLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDSSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBVc2VyQ3JlYXRpb25XaXphcmRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3VzZXItY3JlYXRpb24td2l6YXJkLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd0ay11c2VyLW92ZXJ2aWV3LXN0ZXAnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXItb3ZlcnZpZXctc3RlcC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91c2VyLW92ZXJ2aWV3LXN0ZXAuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlck92ZXJ2aWV3U3RlcENvbXBvbmVudCB7XHJcbiAgICByZWFkb25seSBVU0VSX0RFVEFJTFNfQ09MUyA9IFsnVXNlciBJRCcsICdGaXJzdCBuYW1lJywgJ0xhc3QgbmFtZScsICdFbWFpbCcsICdVc2VyIHRlbXBsYXRlcyddO1xyXG4gICAgcmVhZG9ubHkgTElORVNfQ09MUyA9IFsnTnVtYmVyJywgJ0RJRCcsICdSb3V0ZSBwYXJ0aXRpb24gbmFtZScsICdDU1MnLCAnRGVzY3JpcHRpb24nXTtcclxuICAgIHJlYWRvbmx5IERFVklDRVNfQ09MUyA9IFsnTmFtZScsICdEZXZpY2UgdHlwZScsICdMaW5lcycsICdEZXNjcmlwdGlvbiddO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyB1c2VyQ3JlYXRpb25XaXphcmRTZXJ2aWNlOiBVc2VyQ3JlYXRpb25XaXphcmRTZXJ2aWNlXHJcbiAgICApIHt9XHJcbn0iLCI8c2VjdGlvbiBjbGFzcz1cImRldGFpbHMtc3RlcC1jb250ZW50XCI+XHJcbiAgPGRpdiBjbGFzcz1cImRldGFpbHMtc3RlcC1zZWN0aW9uc1wiPlxyXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvblwiPlxyXG4gICAgICA8aDMgY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvbl9fdGl0bGVcIj5Vc2VyIGRldGFpbHM8L2gzPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zdGVwLXNlY3Rpb25fX2NvbnRlbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1saXN0XCIgW3N0eWxlLi0tcHJldmlldy1jb2xzXT1cIlVTRVJfREVUQUlMU19DT0xTLmxlbmd0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctbGlzdF9faGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBjb2wgb2YgVVNFUl9ERVRBSUxTX0NPTFNcIj57eyBjb2wgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWxpc3RfX3Jvd1wiICpuZ0Zvcj1cImxldCB1c2VyIG9mIHVzZXJDcmVhdGlvbldpemFyZFNlcnZpY2Uub3ZlcnZpZXdVc2Vyc1wiPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyB1c2VyLnVzZXJJZCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgdXNlci5maXJzdE5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IHVzZXIubGFzdE5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IHVzZXIuZW1haWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IHVzZXIudXNlclRlbXBsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9zZWN0aW9uPlxyXG4gIDwvZGl2PlxyXG4gIFxyXG4gIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXN0ZXAtZGl2aWRlclwiPjwvZGl2PlxyXG4gIFxyXG4gIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvbnNcIj5cclxuICAgIDxzZWN0aW9uIGNsYXNzPVwiZGV0YWlscy1zdGVwLXNlY3Rpb25cIj5cclxuICAgICAgPGgzIGNsYXNzPVwiZGV0YWlscy1zdGVwLXNlY3Rpb25fX3RpdGxlXCI+TGluZXM8L2gzPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zdGVwLXNlY3Rpb25fX2NvbnRlbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1saXN0XCIgW3N0eWxlLi0tcHJldmlldy1jb2xzXT1cIkxJTkVTX0NPTFMubGVuZ3RoXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1saXN0X19oZWFkZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGNvbCBvZiBMSU5FU19DT0xTXCI+e3sgY29sIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1saXN0X19yb3dcIiAqbmdGb3I9XCJsZXQgbGluZSBvZiB1c2VyQ3JlYXRpb25XaXphcmRTZXJ2aWNlLm92ZXJ2aWV3TGluZXNcIj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgbGluZS5udW1iZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGxpbmUuZGlkIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBsaW5lLnJvdXRlUGFydGl0aW9uTmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgbGluZS5jc3MgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGxpbmUuZGVzY3JpcHRpb24gfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbiAgPC9kaXY+XHJcbiAgXHJcbiAgPGRpdiBjbGFzcz1cImRldGFpbHMtc3RlcC1kaXZpZGVyXCI+PC9kaXY+XHJcbiAgXHJcbiAgPGRpdiBjbGFzcz1cImRldGFpbHMtc3RlcC1zZWN0aW9uc1wiPlxyXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvblwiPlxyXG4gICAgICA8aDMgY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvbl9fdGl0bGVcIj5EZXZpY2VzPC9oMz5cclxuICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHMtc3RlcC1zZWN0aW9uX19jb250ZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctbGlzdFwiIFtzdHlsZS4tLXByZXZpZXctY29sc109XCJERVZJQ0VTX0NPTFMubGVuZ3RoXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1saXN0X19oZWFkZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGNvbCBvZiBERVZJQ0VTX0NPTFNcIj57eyBjb2wgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWxpc3RfX3Jvd1wiICpuZ0Zvcj1cImxldCBkZXZpY2Ugb2YgdXNlckNyZWF0aW9uV2l6YXJkU2VydmljZS5vdmVydmlld0RldmljZXNcIj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgZGV2aWNlLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGRldmljZS5kZXZpY2VUeXBlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBkZXZpY2UubGluZXMgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGRldmljZS5kZXNjcmlwdGlvbiB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvc2VjdGlvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImRldGFpbHMtc3RlcC1kaXZpZGVyXCI+PC9kaXY+XHJcbiAgXHJcbiAgPGRpdiBjbGFzcz1cImRldGFpbHMtc3RlcC1zZWN0aW9uc1wiPlxyXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvblwiPlxyXG4gICAgICA8aDMgY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvbl9fdGl0bGVcIj5TaW5nbGUgTnVtYmVyIFJlYWNoPC9oMz5cclxuICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHMtc3RlcC1zZWN0aW9uX19jb250ZW50XCI+PC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXN0ZXAtZGl2aWRlclwiPjwvZGl2PlxyXG4gIFxyXG4gIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvbnNcIj5cclxuICAgIDxzZWN0aW9uIGNsYXNzPVwiZGV0YWlscy1zdGVwLXNlY3Rpb25cIj5cclxuICAgICAgPGgzIGNsYXNzPVwiZGV0YWlscy1zdGVwLXNlY3Rpb25fX3RpdGxlXCI+RmVhdHVyZXM8L2gzPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zdGVwLXNlY3Rpb25fX2NvbnRlbnRcIj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMXJlbTtcIj5Wb2ljZW1haWw8L3NwYW4+IDU1NzA0NlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvc2VjdGlvbj5cclxuICA8L2Rpdj5cclxuXHJcbjwvc2VjdGlvbj4iXX0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1vdmVydmlldy1zdGVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy93aWRnZXRzL3VzZXItY3JlYXRpb24td2l6YXJkL2NvbXBvbmVudHMvdXNlci1vdmVydmlldy1zdGVwL3VzZXItb3ZlcnZpZXctc3RlcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvdXNlci1jcmVhdGlvbi9zcmMvd2lkZ2V0cy91c2VyLWNyZWF0aW9uLXdpemFyZC9jb21wb25lbnRzL3VzZXItb3ZlcnZpZXctc3RlcC91c2VyLW92ZXJ2aWV3LXN0ZXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVExQyxNQUFNLE9BQU8seUJBQXlCO0lBS2xDLFlBQ1cseUJBQW9EO1FBQXBELDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFMdEQsc0JBQWlCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RixlQUFVLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM3RSxpQkFBWSxHQUFHLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFJckUsQ0FBQzs7dUhBUEsseUJBQXlCOzJHQUF6Qix5QkFBeUIsNkRDUnRDLHM3SUEyR0E7NEZEbkdhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDSSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBVc2VyQ3JlYXRpb25XaXphcmRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3VzZXItY3JlYXRpb24td2l6YXJkLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd0ay11c2VyLW92ZXJ2aWV3LXN0ZXAnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXItb3ZlcnZpZXctc3RlcC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91c2VyLW92ZXJ2aWV3LXN0ZXAuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlck92ZXJ2aWV3U3RlcENvbXBvbmVudCB7XHJcbiAgICByZWFkb25seSBVU0VSX0RFVEFJTFNfQ09MUyA9IFsnVXNlciBJRCcsICdGaXJzdCBuYW1lJywgJ0xhc3QgbmFtZScsICdFbWFpbCcsICdVc2VyIHRlbXBsYXRlcyddO1xyXG4gICAgcmVhZG9ubHkgTElORVNfQ09MUyA9IFsnTnVtYmVyJywgJ0RJRCcsICdSb3V0ZSBwYXJ0aXRpb24gbmFtZScsICdDU1MnLCAnRGVzY3JpcHRpb24nXTtcclxuICAgIHJlYWRvbmx5IERFVklDRVNfQ09MUyA9IFsnTmFtZScsICdEZXZpY2UgdHlwZScsICdMaW5lcycsICdEZXNjcmlwdGlvbiddO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyB1c2VyQ3JlYXRpb25XaXphcmRTZXJ2aWNlOiBVc2VyQ3JlYXRpb25XaXphcmRTZXJ2aWNlXHJcbiAgICApIHt9XHJcbn0iLCI8c2VjdGlvbiBjbGFzcz1cImRldGFpbHMtc3RlcC1jb250ZW50XCI+XHJcbiAgPGRpdiBjbGFzcz1cImRldGFpbHMtc3RlcC1zZWN0aW9uc1wiPlxyXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvblwiPlxyXG4gICAgICA8aDMgY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvbl9fdGl0bGVcIj5Vc2VyIGRldGFpbHM8L2gzPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zdGVwLXNlY3Rpb25fX2NvbnRlbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1saXN0XCIgW3N0eWxlLi0tcHJldmlldy1jb2xzXT1cIlVTRVJfREVUQUlMU19DT0xTLmxlbmd0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctbGlzdF9faGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBjb2wgb2YgVVNFUl9ERVRBSUxTX0NPTFNcIj57eyBjb2wgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWxpc3RfX3Jvd1wiICpuZ0Zvcj1cImxldCB1c2VyIG9mIHVzZXJDcmVhdGlvbldpemFyZFNlcnZpY2Uub3ZlcnZpZXdVc2Vyc1wiPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyB1c2VyLnVzZXJJZCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgdXNlci5maXJzdE5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IHVzZXIubGFzdE5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IHVzZXIuZW1haWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IHVzZXIudXNlclRlbXBsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9zZWN0aW9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zdGVwLWRpdmlkZXJcIj48L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImRldGFpbHMtc3RlcC1zZWN0aW9uc1wiPlxyXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvblwiPlxyXG4gICAgICA8aDMgY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvbl9fdGl0bGVcIj5MaW5lczwvaDM+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvbl9fY29udGVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWxpc3RcIiBbc3R5bGUuLS1wcmV2aWV3LWNvbHNdPVwiTElORVNfQ09MUy5sZW5ndGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWxpc3RfX2hlYWRlclwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgY29sIG9mIExJTkVTX0NPTFNcIj57eyBjb2wgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWxpc3RfX3Jvd1wiICpuZ0Zvcj1cImxldCBsaW5lIG9mIHVzZXJDcmVhdGlvbldpemFyZFNlcnZpY2Uub3ZlcnZpZXdMaW5lc1wiPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBsaW5lLm51bWJlciB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgbGluZS5kaWQgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGxpbmUucm91dGVQYXJ0aXRpb25OYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBsaW5lLmNzcyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgbGluZS5kZXNjcmlwdGlvbiB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvc2VjdGlvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImRldGFpbHMtc3RlcC1kaXZpZGVyXCI+PC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvbnNcIj5cclxuICAgIDxzZWN0aW9uIGNsYXNzPVwiZGV0YWlscy1zdGVwLXNlY3Rpb25cIj5cclxuICAgICAgPGgzIGNsYXNzPVwiZGV0YWlscy1zdGVwLXNlY3Rpb25fX3RpdGxlXCI+RGV2aWNlczwvaDM+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvbl9fY29udGVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWxpc3RcIiBbc3R5bGUuLS1wcmV2aWV3LWNvbHNdPVwiREVWSUNFU19DT0xTLmxlbmd0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctbGlzdF9faGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBjb2wgb2YgREVWSUNFU19DT0xTXCI+e3sgY29sIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1saXN0X19yb3dcIiAqbmdGb3I9XCJsZXQgZGV2aWNlIG9mIHVzZXJDcmVhdGlvbldpemFyZFNlcnZpY2Uub3ZlcnZpZXdEZXZpY2VzXCI+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGRldmljZS5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBkZXZpY2UuZGV2aWNlVHlwZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgZGV2aWNlLmxpbmVzIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBkZXZpY2UuZGVzY3JpcHRpb24gfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VyQ3JlYXRpb25XaXphcmRTZXJ2aWNlLm92ZXJ2aWV3RGV2aWNlUHJvZmlsZXMubGVuZ3RoXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zdGVwLWRpdmlkZXJcIj48L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zdGVwLXNlY3Rpb25zXCI+XHJcbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZGV0YWlscy1zdGVwLXNlY3Rpb25cIj5cclxuICAgICAgICA8aDMgY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvbl9fdGl0bGVcIj5EZXZpY2UgcHJvZmlsZXM8L2gzPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvbl9fY29udGVudFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctbGlzdFwiIFtzdHlsZS4tLXByZXZpZXctY29sc109XCJERVZJQ0VTX0NPTFMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWxpc3RfX2hlYWRlclwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBjb2wgb2YgREVWSUNFU19DT0xTXCI+e3sgY29sIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctbGlzdF9fcm93XCIgKm5nRm9yPVwibGV0IGRldmljZSBvZiB1c2VyQ3JlYXRpb25XaXphcmRTZXJ2aWNlLm92ZXJ2aWV3RGV2aWNlUHJvZmlsZXNcIj5cclxuICAgICAgICAgICAgICA8c3Bhbj57eyBkZXZpY2UubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3Bhbj57eyBkZXZpY2UuZGV2aWNlVHlwZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3Bhbj57eyBkZXZpY2UubGluZXMgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgZGV2aWNlLmRlc2NyaXB0aW9uIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3NlY3Rpb24+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImRldGFpbHMtc3RlcC1kaXZpZGVyXCI+PC9kaXY+XHJcblxyXG4gIDwhLS0gPGRpdiBjbGFzcz1cImRldGFpbHMtc3RlcC1zZWN0aW9uc1wiPlxyXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvblwiPlxyXG4gICAgICA8aDMgY2xhc3M9XCJkZXRhaWxzLXN0ZXAtc2VjdGlvbl9fdGl0bGVcIj5TaW5nbGUgTnVtYmVyIFJlYWNoPC9oMz5cclxuICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHMtc3RlcC1zZWN0aW9uX19jb250ZW50XCI+PC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbiAgPC9kaXY+IC0tPlxyXG5cclxuICA8IS0tIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXN0ZXAtZGl2aWRlclwiPjwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zdGVwLXNlY3Rpb25zXCI+XHJcbiAgICA8c2VjdGlvbiBjbGFzcz1cImRldGFpbHMtc3RlcC1zZWN0aW9uXCI+XHJcbiAgICAgIDxoMyBjbGFzcz1cImRldGFpbHMtc3RlcC1zZWN0aW9uX190aXRsZVwiPkZlYXR1cmVzPC9oMz5cclxuICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHMtc3RlcC1zZWN0aW9uX19jb250ZW50XCI+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDFyZW07XCI+Vm9pY2VtYWlsPC9zcGFuPiA1NTcwNDZcclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbiAgPC9kaXY+IC0tPlxyXG48L3NlY3Rpb24+XHJcbiJdfQ==
@@ -1,7 +1,7 @@
1
- import { Component, Input } from "@angular/core";
1
+ import { Component, EventEmitter, Input, Output } from "@angular/core";
2
2
  import { USER_CREATION_TYPES } from '../../../../app.constants';
3
3
  import { FormControl } from "@angular/forms";
4
- import { filter, of, startWith, Subject, switchMap, takeUntil, tap } from "rxjs";
4
+ import { distinctUntilChanged, filter, finalize, forkJoin, of, startWith, Subject, switchMap, takeUntil, tap } from "rxjs";
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "../../user-creation-wizard.service";
7
7
  import * as i2 from "../../../../shared/services/user-creation-api.service";
@@ -11,11 +11,16 @@ import * as i5 from "@angular/material/tooltip";
11
11
  import * as i6 from "@angular/material/form-field";
12
12
  import * as i7 from "@angular/material/select";
13
13
  import * as i8 from "@angular/material/core";
14
+ import * as i9 from "../../../../utils/app-loader/app-loader";
14
15
  export class UserTemplateStepComponent {
16
+ get isLoading() {
17
+ return this.loadingSites || this.loadingSiteData;
18
+ }
15
19
  constructor(userCreationWizardService, userCreationService, fb) {
16
20
  this.userCreationWizardService = userCreationWizardService;
17
21
  this.userCreationService = userCreationService;
18
22
  this.fb = fb;
23
+ this.validityChange = new EventEmitter();
19
24
  this.formGroup = this.fb.group({
20
25
  userType: [USER_CREATION_TYPES.CUCM],
21
26
  siteId: [null],
@@ -23,8 +28,8 @@ export class UserTemplateStepComponent {
23
28
  });
24
29
  this.userCreationType = USER_CREATION_TYPES.CUCM;
25
30
  this.USER_CREATION_TYPES = USER_CREATION_TYPES;
26
- this.defaultTemplateName = '8851 + CSF';
27
- this.fallbackTemplateId = '-1';
31
+ // readonly defaultTemplateName = 'User 8851 Office';
32
+ // readonly fallbackTemplateId = '-1';
28
33
  this.destroy$ = new Subject();
29
34
  this.sitesList = [];
30
35
  this.sitesList$ = this.userCreationService.sitesList$.pipe(takeUntil(this.destroy$), tap((res) => this.sitesList = res));
@@ -33,15 +38,19 @@ export class UserTemplateStepComponent {
33
38
  const templateControl = this.formGroup.get('userTemplateId');
34
39
  const currentTemplateId = templateControl?.value;
35
40
  const selectedSiteId = this.formGroup.get('siteId')?.value;
36
- const defaultTemplate = this.templates.find(template => template.name === this.defaultTemplateName);
41
+ // const defaultTemplate = this.templates.find(
42
+ // template => template.name === this.defaultTemplateName
43
+ // );
37
44
  const hasSelectedSite = selectedSiteId !== null && selectedSiteId !== undefined;
38
- if (hasSelectedSite && defaultTemplate && String(currentTemplateId || '') !== String(defaultTemplate.id)) {
39
- templateControl?.setValue(String(defaultTemplate.id));
40
- }
45
+ // if (hasSelectedSite && defaultTemplate && String(currentTemplateId || '') !== String(defaultTemplate.id)) {
46
+ // templateControl?.setValue(String(defaultTemplate.id));
47
+ // }
41
48
  }), takeUntil(this.destroy$));
42
49
  this.isTemplateSelectable = false;
43
50
  this.templates = [];
44
- this.templateToggleFormControl = new FormControl(true);
51
+ this.loadingSites = false;
52
+ this.loadingSiteData = false;
53
+ this.templateToggleFormControl = new FormControl(false);
45
54
  }
46
55
  ngOnInit() {
47
56
  this.formGroup.get('userType').valueChanges
@@ -55,10 +64,24 @@ export class UserTemplateStepComponent {
55
64
  .pipe(
56
65
  // filter((value) => value !== null && value !== undefined),
57
66
  tap((value) => {
58
- this.formGroup.get('userTemplateId')?.setValue(this.fallbackTemplateId);
59
- // return this.userCreationWizardService.setSelectedTemplate(value);
60
- }), startWith(this.formGroup.get('siteId')?.value), takeUntil(this.destroy$), switchMap((value) => {
61
- return this.userCreationService.fetchAllUserTemplates(Number(value));
67
+ // this.formGroup.get('userTemplateId')?.setValue(this.fallbackTemplateId);
68
+ const selectedSite = this.sitesList.find(site => String(site.id) === String(value));
69
+ if (selectedSite) {
70
+ this.userCreationWizardService.setCurrentSite(selectedSite);
71
+ }
72
+ return this.userCreationWizardService.setSelectedSite(value);
73
+ }), takeUntil(this.destroy$), switchMap((value) => {
74
+ if (value === null || value === undefined || value === '') {
75
+ this.loadingSiteData = false;
76
+ return of(null);
77
+ }
78
+ this.loadingSiteData = true;
79
+ return forkJoin([
80
+ this.userCreationService.fetchAllUserTemplates(Number(value)),
81
+ this.userCreationWizardService.getSiteAllData(Number(value)),
82
+ ]).pipe(finalize(() => {
83
+ this.loadingSiteData = false;
84
+ }));
62
85
  }))
63
86
  .subscribe();
64
87
  // .subscribe((value) => {
@@ -66,35 +89,39 @@ export class UserTemplateStepComponent {
66
89
  // })
67
90
  this.formGroup.get('userTemplateId').valueChanges
68
91
  .pipe(filter((value) => value !== null && value !== undefined && String(value).trim().length > 0), takeUntil(this.destroy$), switchMap((value) => {
69
- if (String(value) === this.fallbackTemplateId) {
70
- this.userCreationWizardService.setSelectedTemplate(this.defaultTemplateName);
71
- return of(null);
72
- }
92
+ // if (String(value) === this.fallbackTemplateId) {
93
+ // this.userCreationWizardService.setSelectedTemplate(this.defaultTemplateName);
94
+ // return of(null);
95
+ // }
73
96
  return this.userCreationService.getUserTemplateToken(String(value), String(String(this.customerId)))
74
97
  .pipe(tap((payload) => {
75
98
  const selectedTemplate = this.templates.find(template => String(template.id) === String(value));
76
- this.userCreationWizardService.setSelectedTemplate(selectedTemplate?.name || null);
99
+ this.userCreationWizardService.setSelectedTemplate(selectedTemplate);
77
100
  this.userCreationWizardService.applyTemplateTokenPayload(payload);
78
101
  }));
79
102
  }))
80
103
  .subscribe();
81
- // this.templateToggleFormControl.valueChanges
82
- // .pipe(startWith(true), takeUntil(this.destroy$), distinctUntilChanged())
83
- // .subscribe((value) => {
84
- // if(value === true) {
85
- // const siteId = this.formGroup.get('siteId')?.value || 7095;
86
- // this.userCreationService.fetchAllUserTemplates(siteId)
87
- // .subscribe();
88
- // } else {
89
- // this.formGroup.get('userTemplateId')?.reset();
90
- // }
91
- // });
104
+ this.templateToggleFormControl.valueChanges
105
+ .pipe(startWith(true), takeUntil(this.destroy$), distinctUntilChanged())
106
+ .subscribe((value) => {
107
+ if (value === true) {
108
+ const siteId = this.formGroup.get('siteId')?.value || 7095;
109
+ this.userCreationService.fetchAllUserTemplates(siteId)
110
+ .subscribe();
111
+ }
112
+ else {
113
+ this.formGroup.get('userTemplateId')?.reset();
114
+ }
115
+ });
92
116
  this.getData();
117
+ this.formGroup.statusChanges
118
+ .pipe(startWith(this.formGroup.status), takeUntil(this.destroy$))
119
+ .subscribe(() => this.validityChange.emit(this.isStepValid()));
93
120
  }
94
121
  reseFieldstForm() {
95
122
  this.formGroup.get('siteId')?.reset();
96
123
  this.formGroup.get('userTemplateId')?.reset();
97
- this.userCreationWizardService.setSelectedTemplate(null);
124
+ this.userCreationWizardService.setSelectedTemplate();
98
125
  this.userCreationWizardService.resetTemplateDrivenData();
99
126
  }
100
127
  getData() {
@@ -104,7 +131,10 @@ export class UserTemplateStepComponent {
104
131
  .subscribe();
105
132
  }
106
133
  getSites(isOnlyWithLocations) {
107
- return this.userCreationService.getAllCustomerSites(String(this.customerId), isOnlyWithLocations);
134
+ this.loadingSites = true;
135
+ return this.userCreationService.getAllCustomerSites(String(this.customerId), isOnlyWithLocations).pipe(finalize(() => {
136
+ this.loadingSites = false;
137
+ }));
108
138
  }
109
139
  isCUCM(site) {
110
140
  return site?.cucm?.id === 2542;
@@ -114,17 +144,33 @@ export class UserTemplateStepComponent {
114
144
  const foundedSite = this.sitesList.find((site) => site.id === siteId);
115
145
  return siteId && foundedSite ? foundedSite.name : '';
116
146
  }
147
+ getSelectedTemplateName() {
148
+ const templateId = this.formGroup.get('userTemplateId')?.value;
149
+ const foundedTemplate = this.templates.find((template) => String(template.id) === String(templateId));
150
+ return templateId && foundedTemplate ? foundedTemplate.name : '';
151
+ }
152
+ isStepValid() {
153
+ const siteId = this.formGroup.get('siteId')?.value;
154
+ const templateId = this.formGroup.get('userTemplateId')?.value;
155
+ return siteId !== null && siteId !== undefined && String(templateId || '').trim().length > 0;
156
+ }
157
+ markStepTouched() {
158
+ this.formGroup.get('siteId')?.markAsTouched();
159
+ this.formGroup.get('userTemplateId')?.markAsTouched();
160
+ }
117
161
  ngOnDestroy() {
118
162
  this.destroy$.next();
119
163
  this.destroy$.complete();
120
164
  }
121
165
  }
122
166
  UserTemplateStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserTemplateStepComponent, deps: [{ token: i1.UserCreationWizardService }, { token: i2.UserCreationApiService }, { token: i3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
123
- UserTemplateStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UserTemplateStepComponent, selector: "tk-user-template-step", inputs: { customerId: "customerId" }, ngImport: i0, template: "<section class=\"template-step-content\">\r\n <ng-container [formGroup]=\"formGroup\">\r\n <!-- <div class=\"template-step-field template-step-field--user-type\">\r\n <label class=\"template-step-label\">User type</label>\r\n <mat-radio-group class=\"user-type-mat-radio-group\" formControlName=\"userType\">\r\n <mat-radio-button class=\"user-type-mat-radio\" id=\"userCreationCucm\" [value]=\"USER_CREATION_TYPES.CUCM\">\r\n UCM/DI\r\n </mat-radio-button>\r\n <mat-radio-button class=\"user-type-mat-radio\" id=\"userCreationMT\" [value]=\"USER_CREATION_TYPES.MT\">\r\n MT\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </div> -->\r\n\r\n <div class=\"template-step-field\">\r\n <label class=\"template-step-label\">Select site</label>\r\n <mat-form-field class=\"template-step-select\" appearance=\"outline\">\r\n <mat-select\r\n placeholder=\"Site name\"\r\n formControlName=\"siteId\">\r\n\r\n <mat-select-trigger>\r\n {{ getSelectedSiteName() }}\r\n </mat-select-trigger>\r\n\r\n <mat-option *ngFor=\"let site of sitesList$ | async\" [value]=\"site.id\">\r\n <div class=\"option-row\">\r\n <span class=\"name\">{{ site.name }}</span>\r\n <span *ngIf=\"site.name === 'Berlin' else notBerlinSite\" class=\"type\">{{ 'Multi Tenant' }}</span>\r\n <ng-template #notBerlinSite>\r\n <span class=\"type\">{{ isCUCM(site) ? 'UCM' : 'Dedicated Instance' }}</span>\r\n </ng-template>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <ng-container *ngIf=\"formGroup.get('userType')?.value === USER_CREATION_TYPES.CUCM\">\r\n <div class=\"template-step-field\">\r\n <!-- <label class=\"template-step-label\">Would you like to use a template for the user creation?</label>\r\n <mat-radio-group [formControl]=\"templateToggleFormControl\">\r\n <mat-radio-button [color]=\"'primary'\" [value]=\"true\">\r\n {{ 'Yes' }}\r\n </mat-radio-button>\r\n <mat-radio-button [color]=\"'primary'\" [value]=\"false\">\r\n {{ 'No' }}\r\n </mat-radio-button>\r\n </mat-radio-group> -->\r\n\r\n <!-- <ng-container *ngIf=\"templateToggleFormControl.value === true\"> -->\r\n <label class=\"template-step-label\">Select user template</label>\r\n <mat-form-field class=\"template-step-select\" appearance=\"outline\">\r\n <mat-select\r\n placeholder=\"Templates\"\r\n formControlName=\"userTemplateId\">\r\n <mat-select-trigger>\r\n <span matTooltip=\"'A new user will be created based on the selected template, including a Cisco 8851 physical device with a single line configured, without SNR (Single Number Reach) and without voicemail.'\">\r\n {{ defaultTemplateName }}\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option [value]=\"fallbackTemplateId\">\r\n {{ defaultTemplateName }}\r\n </mat-option>\r\n <mat-option *ngFor=\"let template of templatesList$ | async\" [value]=\"template.id\">\r\n {{ template.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!-- </ng-container> -->\r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n</section>\r\n", styles: [".template-step-content{display:flex;flex-direction:column;gap:20px;max-width:420px}.template-step-field{display:flex;flex-direction:column;gap:10px}.template-step-field--user-type{margin-bottom:6px}.template-step-label{font-size:14px;font-weight:600;line-height:100%;letter-spacing:.1px;color:#2a2f3b}.template-step-select{width:100%;max-width:333px}.user-type-mat-radio-group{display:flex;flex-direction:column;gap:10px;margin-left:16px;margin-top:8px}.user-type-mat-radio{color:#2a2f3b;font-size:14px;font-weight:500}:host ::ng-deep .user-type-mat-radio .mat-radio-label{gap:10px}:host ::ng-deep .user-type-mat-radio .mat-radio-outer-circle{border-color:#8a93a3;border-width:2px}:host ::ng-deep .user-type-mat-radio .mat-radio-inner-circle{background-color:#1170cf}:host ::ng-deep .user-type-mat-radio.mat-radio-checked .mat-radio-outer-circle{border-color:#1170cf}:host ::ng-deep .user-type-mat-radio.mat-radio-checked .mat-radio-ripple .mat-ripple-element{background-color:#1176ce26!important}:host ::ng-deep .user-type-mat-radio .mdc-radio__outer-circle{border-color:#8a93a3!important;border-width:2px!important}:host ::ng-deep .user-type-mat-radio .mdc-radio__inner-circle{border-color:#1170cf!important}:host ::ng-deep .user-type-mat-radio.mat-mdc-radio-checked .mdc-radio__outer-circle{border-color:#1170cf!important}:host ::ng-deep .user-type-mat-radio.mat-mdc-radio-checked .mdc-radio__background:before{background-color:#1176ce1f!important}:host ::ng-deep .template-step-select .mat-form-field-wrapper{padding-bottom:0}:host ::ng-deep .template-step-select .mat-form-field-flex{align-items:center;height:32px;border:1px solid #767676;border-radius:6px;padding:0 12px}:host ::ng-deep .template-step-select .mat-form-field-outline,:host ::ng-deep .template-step-select .mat-form-field-outline-start,:host ::ng-deep .template-step-select .mat-form-field-outline-end,:host ::ng-deep .template-step-select .mat-form-field-outline-gap{display:none}:host ::ng-deep .template-step-select .mat-form-field-infix{width:100%;border-top:0;padding:0}:host ::ng-deep .template-step-select .mat-select-trigger{display:flex;align-items:center;justify-content:space-between;height:100%}::ng-deep .option-row{display:flex;justify-content:space-between;align-items:center;width:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "directive", type: i7.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
167
+ UserTemplateStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UserTemplateStepComponent, selector: "tk-user-template-step", inputs: { customerId: "customerId" }, outputs: { validityChange: "validityChange" }, ngImport: i0, template: "<section class=\"template-step-content\">\r\n <app-loader *ngIf=\"isLoading\"></app-loader>\r\n <ng-container [formGroup]=\"formGroup\">\r\n <!-- <div class=\"template-step-field template-step-field--user-type\">\r\n <label class=\"template-step-label\">User type</label>\r\n <mat-radio-group class=\"user-type-mat-radio-group\" formControlName=\"userType\">\r\n <mat-radio-button class=\"user-type-mat-radio\" id=\"userCreationCucm\" [value]=\"USER_CREATION_TYPES.CUCM\">\r\n UCM/DI\r\n </mat-radio-button>\r\n <mat-radio-button class=\"user-type-mat-radio\" id=\"userCreationMT\" [value]=\"USER_CREATION_TYPES.MT\">\r\n MT\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </div> -->\r\n\r\n <div class=\"template-step-field\">\r\n <label class=\"template-step-label\">Select site</label>\r\n <mat-form-field class=\"template-step-select\" appearance=\"outline\">\r\n <mat-select\r\n placeholder=\"Site name\"\r\n formControlName=\"siteId\">\r\n\r\n <mat-select-trigger>\r\n {{ getSelectedSiteName() }}\r\n </mat-select-trigger>\r\n\r\n <mat-option *ngFor=\"let site of sitesList$ | async\" [value]=\"site.id\">\r\n <div class=\"option-row\">\r\n <span class=\"name\">{{ site.name }}</span>\r\n <span *ngIf=\"site.name === 'Berlin' else notBerlinSite\" class=\"type\">{{ 'Multi Tenant' }}</span>\r\n <ng-template #notBerlinSite>\r\n <span class=\"type\">{{ isCUCM(site) ? 'UCM' : 'Dedicated Instance' }}</span>\r\n </ng-template>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <ng-container *ngIf=\"formGroup.get('userType')?.value === USER_CREATION_TYPES.CUCM\">\r\n <div class=\"template-step-field\">\r\n <!-- <label class=\"template-step-label\">Would you like to use a template for the user creation?</label> -->\r\n <!-- <mat-radio-group [formControl]=\"templateToggleFormControl\">\r\n <mat-radio-button [color]=\"'primary'\" [value]=\"true\">\r\n {{ 'Yes' }}\r\n </mat-radio-button>\r\n <mat-radio-button [color]=\"'primary'\" [value]=\"false\">\r\n {{ 'No' }}\r\n </mat-radio-button>\r\n </mat-radio-group> -->\r\n\r\n <!-- <ng-container *ngIf=\"templateToggleFormControl.value === true\"> -->\r\n <label class=\"template-step-label\">Select user template</label>\r\n <mat-form-field class=\"template-step-select\" appearance=\"outline\">\r\n <mat-select\r\n placeholder=\"Templates\"\r\n formControlName=\"userTemplateId\">\r\n <mat-select-trigger>\r\n <span matTooltip=\"'A new user will be created based on the selected template, including a Cisco 8851 physical device with a single line configured, without SNR (Single Number Reach) and without voicemail.'\">\r\n {{ getSelectedTemplateName() }}\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngFor=\"let template of templatesList$ | async\" [value]=\"template.id\">\r\n {{ template.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!-- </ng-container> -->\r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n</section>\r\n", styles: [".template-step-content{display:flex;flex-direction:column;gap:20px;max-width:420px}.template-step-field{display:flex;flex-direction:column;gap:10px}.template-step-field .mat-radio-group{display:flex;gap:10px}.template-step-field--user-type{margin-bottom:6px}.template-step-label{font-size:14px;font-weight:600;line-height:100%;letter-spacing:.1px;color:#2a2f3b}.template-step-select{width:100%;max-width:333px}.user-type-mat-radio-group{display:flex;flex-direction:column;gap:10px;margin-left:16px;margin-top:8px}.user-type-mat-radio{color:#2a2f3b;font-size:14px;font-weight:500}:host ::ng-deep .user-type-mat-radio .mat-radio-label{gap:10px}:host ::ng-deep .user-type-mat-radio .mat-radio-outer-circle{border-color:#8a93a3;border-width:2px}:host ::ng-deep .user-type-mat-radio .mat-radio-inner-circle{background-color:#1170cf}:host ::ng-deep .user-type-mat-radio.mat-radio-checked .mat-radio-outer-circle{border-color:#1170cf}:host ::ng-deep .user-type-mat-radio.mat-radio-checked .mat-radio-ripple .mat-ripple-element{background-color:#1176ce26!important}:host ::ng-deep .user-type-mat-radio .mdc-radio__outer-circle{border-color:#8a93a3!important;border-width:2px!important}:host ::ng-deep .user-type-mat-radio .mdc-radio__inner-circle{border-color:#1170cf!important}:host ::ng-deep .user-type-mat-radio.mat-mdc-radio-checked .mdc-radio__outer-circle{border-color:#1170cf!important}:host ::ng-deep .user-type-mat-radio.mat-mdc-radio-checked .mdc-radio__background:before{background-color:#1176ce1f!important}:host ::ng-deep .template-step-select .mat-form-field-wrapper{padding-bottom:0}:host ::ng-deep .template-step-select .mat-form-field-flex{align-items:center;height:32px;border:1px solid #767676;border-radius:6px;padding:0 12px}:host ::ng-deep .template-step-select .mat-form-field-outline,:host ::ng-deep .template-step-select .mat-form-field-outline-start,:host ::ng-deep .template-step-select .mat-form-field-outline-end,:host ::ng-deep .template-step-select .mat-form-field-outline-gap{display:none}:host ::ng-deep .template-step-select .mat-form-field-infix{width:100%;border-top:0;padding:0}:host ::ng-deep .template-step-select .mat-select-trigger{display:flex;align-items:center;justify-content:space-between;height:100%}::ng-deep .option-row{display:flex;justify-content:space-between;align-items:center;width:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "directive", type: i7.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i9.AppLoaderComponent, selector: "app-loader" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
124
168
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserTemplateStepComponent, decorators: [{
125
169
  type: Component,
126
- args: [{ selector: 'tk-user-template-step', template: "<section class=\"template-step-content\">\r\n <ng-container [formGroup]=\"formGroup\">\r\n <!-- <div class=\"template-step-field template-step-field--user-type\">\r\n <label class=\"template-step-label\">User type</label>\r\n <mat-radio-group class=\"user-type-mat-radio-group\" formControlName=\"userType\">\r\n <mat-radio-button class=\"user-type-mat-radio\" id=\"userCreationCucm\" [value]=\"USER_CREATION_TYPES.CUCM\">\r\n UCM/DI\r\n </mat-radio-button>\r\n <mat-radio-button class=\"user-type-mat-radio\" id=\"userCreationMT\" [value]=\"USER_CREATION_TYPES.MT\">\r\n MT\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </div> -->\r\n\r\n <div class=\"template-step-field\">\r\n <label class=\"template-step-label\">Select site</label>\r\n <mat-form-field class=\"template-step-select\" appearance=\"outline\">\r\n <mat-select\r\n placeholder=\"Site name\"\r\n formControlName=\"siteId\">\r\n\r\n <mat-select-trigger>\r\n {{ getSelectedSiteName() }}\r\n </mat-select-trigger>\r\n\r\n <mat-option *ngFor=\"let site of sitesList$ | async\" [value]=\"site.id\">\r\n <div class=\"option-row\">\r\n <span class=\"name\">{{ site.name }}</span>\r\n <span *ngIf=\"site.name === 'Berlin' else notBerlinSite\" class=\"type\">{{ 'Multi Tenant' }}</span>\r\n <ng-template #notBerlinSite>\r\n <span class=\"type\">{{ isCUCM(site) ? 'UCM' : 'Dedicated Instance' }}</span>\r\n </ng-template>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <ng-container *ngIf=\"formGroup.get('userType')?.value === USER_CREATION_TYPES.CUCM\">\r\n <div class=\"template-step-field\">\r\n <!-- <label class=\"template-step-label\">Would you like to use a template for the user creation?</label>\r\n <mat-radio-group [formControl]=\"templateToggleFormControl\">\r\n <mat-radio-button [color]=\"'primary'\" [value]=\"true\">\r\n {{ 'Yes' }}\r\n </mat-radio-button>\r\n <mat-radio-button [color]=\"'primary'\" [value]=\"false\">\r\n {{ 'No' }}\r\n </mat-radio-button>\r\n </mat-radio-group> -->\r\n\r\n <!-- <ng-container *ngIf=\"templateToggleFormControl.value === true\"> -->\r\n <label class=\"template-step-label\">Select user template</label>\r\n <mat-form-field class=\"template-step-select\" appearance=\"outline\">\r\n <mat-select\r\n placeholder=\"Templates\"\r\n formControlName=\"userTemplateId\">\r\n <mat-select-trigger>\r\n <span matTooltip=\"'A new user will be created based on the selected template, including a Cisco 8851 physical device with a single line configured, without SNR (Single Number Reach) and without voicemail.'\">\r\n {{ defaultTemplateName }}\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option [value]=\"fallbackTemplateId\">\r\n {{ defaultTemplateName }}\r\n </mat-option>\r\n <mat-option *ngFor=\"let template of templatesList$ | async\" [value]=\"template.id\">\r\n {{ template.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!-- </ng-container> -->\r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n</section>\r\n", styles: [".template-step-content{display:flex;flex-direction:column;gap:20px;max-width:420px}.template-step-field{display:flex;flex-direction:column;gap:10px}.template-step-field--user-type{margin-bottom:6px}.template-step-label{font-size:14px;font-weight:600;line-height:100%;letter-spacing:.1px;color:#2a2f3b}.template-step-select{width:100%;max-width:333px}.user-type-mat-radio-group{display:flex;flex-direction:column;gap:10px;margin-left:16px;margin-top:8px}.user-type-mat-radio{color:#2a2f3b;font-size:14px;font-weight:500}:host ::ng-deep .user-type-mat-radio .mat-radio-label{gap:10px}:host ::ng-deep .user-type-mat-radio .mat-radio-outer-circle{border-color:#8a93a3;border-width:2px}:host ::ng-deep .user-type-mat-radio .mat-radio-inner-circle{background-color:#1170cf}:host ::ng-deep .user-type-mat-radio.mat-radio-checked .mat-radio-outer-circle{border-color:#1170cf}:host ::ng-deep .user-type-mat-radio.mat-radio-checked .mat-radio-ripple .mat-ripple-element{background-color:#1176ce26!important}:host ::ng-deep .user-type-mat-radio .mdc-radio__outer-circle{border-color:#8a93a3!important;border-width:2px!important}:host ::ng-deep .user-type-mat-radio .mdc-radio__inner-circle{border-color:#1170cf!important}:host ::ng-deep .user-type-mat-radio.mat-mdc-radio-checked .mdc-radio__outer-circle{border-color:#1170cf!important}:host ::ng-deep .user-type-mat-radio.mat-mdc-radio-checked .mdc-radio__background:before{background-color:#1176ce1f!important}:host ::ng-deep .template-step-select .mat-form-field-wrapper{padding-bottom:0}:host ::ng-deep .template-step-select .mat-form-field-flex{align-items:center;height:32px;border:1px solid #767676;border-radius:6px;padding:0 12px}:host ::ng-deep .template-step-select .mat-form-field-outline,:host ::ng-deep .template-step-select .mat-form-field-outline-start,:host ::ng-deep .template-step-select .mat-form-field-outline-end,:host ::ng-deep .template-step-select .mat-form-field-outline-gap{display:none}:host ::ng-deep .template-step-select .mat-form-field-infix{width:100%;border-top:0;padding:0}:host ::ng-deep .template-step-select .mat-select-trigger{display:flex;align-items:center;justify-content:space-between;height:100%}::ng-deep .option-row{display:flex;justify-content:space-between;align-items:center;width:100%}\n"] }]
170
+ args: [{ selector: 'tk-user-template-step', template: "<section class=\"template-step-content\">\r\n <app-loader *ngIf=\"isLoading\"></app-loader>\r\n <ng-container [formGroup]=\"formGroup\">\r\n <!-- <div class=\"template-step-field template-step-field--user-type\">\r\n <label class=\"template-step-label\">User type</label>\r\n <mat-radio-group class=\"user-type-mat-radio-group\" formControlName=\"userType\">\r\n <mat-radio-button class=\"user-type-mat-radio\" id=\"userCreationCucm\" [value]=\"USER_CREATION_TYPES.CUCM\">\r\n UCM/DI\r\n </mat-radio-button>\r\n <mat-radio-button class=\"user-type-mat-radio\" id=\"userCreationMT\" [value]=\"USER_CREATION_TYPES.MT\">\r\n MT\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </div> -->\r\n\r\n <div class=\"template-step-field\">\r\n <label class=\"template-step-label\">Select site</label>\r\n <mat-form-field class=\"template-step-select\" appearance=\"outline\">\r\n <mat-select\r\n placeholder=\"Site name\"\r\n formControlName=\"siteId\">\r\n\r\n <mat-select-trigger>\r\n {{ getSelectedSiteName() }}\r\n </mat-select-trigger>\r\n\r\n <mat-option *ngFor=\"let site of sitesList$ | async\" [value]=\"site.id\">\r\n <div class=\"option-row\">\r\n <span class=\"name\">{{ site.name }}</span>\r\n <span *ngIf=\"site.name === 'Berlin' else notBerlinSite\" class=\"type\">{{ 'Multi Tenant' }}</span>\r\n <ng-template #notBerlinSite>\r\n <span class=\"type\">{{ isCUCM(site) ? 'UCM' : 'Dedicated Instance' }}</span>\r\n </ng-template>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <ng-container *ngIf=\"formGroup.get('userType')?.value === USER_CREATION_TYPES.CUCM\">\r\n <div class=\"template-step-field\">\r\n <!-- <label class=\"template-step-label\">Would you like to use a template for the user creation?</label> -->\r\n <!-- <mat-radio-group [formControl]=\"templateToggleFormControl\">\r\n <mat-radio-button [color]=\"'primary'\" [value]=\"true\">\r\n {{ 'Yes' }}\r\n </mat-radio-button>\r\n <mat-radio-button [color]=\"'primary'\" [value]=\"false\">\r\n {{ 'No' }}\r\n </mat-radio-button>\r\n </mat-radio-group> -->\r\n\r\n <!-- <ng-container *ngIf=\"templateToggleFormControl.value === true\"> -->\r\n <label class=\"template-step-label\">Select user template</label>\r\n <mat-form-field class=\"template-step-select\" appearance=\"outline\">\r\n <mat-select\r\n placeholder=\"Templates\"\r\n formControlName=\"userTemplateId\">\r\n <mat-select-trigger>\r\n <span matTooltip=\"'A new user will be created based on the selected template, including a Cisco 8851 physical device with a single line configured, without SNR (Single Number Reach) and without voicemail.'\">\r\n {{ getSelectedTemplateName() }}\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngFor=\"let template of templatesList$ | async\" [value]=\"template.id\">\r\n {{ template.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!-- </ng-container> -->\r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n</section>\r\n", styles: [".template-step-content{display:flex;flex-direction:column;gap:20px;max-width:420px}.template-step-field{display:flex;flex-direction:column;gap:10px}.template-step-field .mat-radio-group{display:flex;gap:10px}.template-step-field--user-type{margin-bottom:6px}.template-step-label{font-size:14px;font-weight:600;line-height:100%;letter-spacing:.1px;color:#2a2f3b}.template-step-select{width:100%;max-width:333px}.user-type-mat-radio-group{display:flex;flex-direction:column;gap:10px;margin-left:16px;margin-top:8px}.user-type-mat-radio{color:#2a2f3b;font-size:14px;font-weight:500}:host ::ng-deep .user-type-mat-radio .mat-radio-label{gap:10px}:host ::ng-deep .user-type-mat-radio .mat-radio-outer-circle{border-color:#8a93a3;border-width:2px}:host ::ng-deep .user-type-mat-radio .mat-radio-inner-circle{background-color:#1170cf}:host ::ng-deep .user-type-mat-radio.mat-radio-checked .mat-radio-outer-circle{border-color:#1170cf}:host ::ng-deep .user-type-mat-radio.mat-radio-checked .mat-radio-ripple .mat-ripple-element{background-color:#1176ce26!important}:host ::ng-deep .user-type-mat-radio .mdc-radio__outer-circle{border-color:#8a93a3!important;border-width:2px!important}:host ::ng-deep .user-type-mat-radio .mdc-radio__inner-circle{border-color:#1170cf!important}:host ::ng-deep .user-type-mat-radio.mat-mdc-radio-checked .mdc-radio__outer-circle{border-color:#1170cf!important}:host ::ng-deep .user-type-mat-radio.mat-mdc-radio-checked .mdc-radio__background:before{background-color:#1176ce1f!important}:host ::ng-deep .template-step-select .mat-form-field-wrapper{padding-bottom:0}:host ::ng-deep .template-step-select .mat-form-field-flex{align-items:center;height:32px;border:1px solid #767676;border-radius:6px;padding:0 12px}:host ::ng-deep .template-step-select .mat-form-field-outline,:host ::ng-deep .template-step-select .mat-form-field-outline-start,:host ::ng-deep .template-step-select .mat-form-field-outline-end,:host ::ng-deep .template-step-select .mat-form-field-outline-gap{display:none}:host ::ng-deep .template-step-select .mat-form-field-infix{width:100%;border-top:0;padding:0}:host ::ng-deep .template-step-select .mat-select-trigger{display:flex;align-items:center;justify-content:space-between;height:100%}::ng-deep .option-row{display:flex;justify-content:space-between;align-items:center;width:100%}\n"] }]
127
171
  }], ctorParameters: function () { return [{ type: i1.UserCreationWizardService }, { type: i2.UserCreationApiService }, { type: i3.FormBuilder }]; }, propDecorators: { customerId: [{
128
172
  type: Input
173
+ }], validityChange: [{
174
+ type: Output
129
175
  }] } });
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci10ZW1wbGF0ZS1zdGVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy93aWRnZXRzL3VzZXItY3JlYXRpb24td2l6YXJkL2NvbXBvbmVudHMvdXNlci10ZW1wbGF0ZS1zdGVwL3VzZXItdGVtcGxhdGUtc3RlcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvdXNlci1jcmVhdGlvbi9zcmMvd2lkZ2V0cy91c2VyLWNyZWF0aW9uLXdpemFyZC9jb21wb25lbnRzL3VzZXItdGVtcGxhdGUtc3RlcC91c2VyLXRlbXBsYXRlLXN0ZXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFTakYsTUFBTSxPQUFPLHlCQUF5QjtJQThDbEMsWUFDVyx5QkFBb0QsRUFDMUMsbUJBQTJDLEVBQzNDLEVBQWU7UUFGekIsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQUMxQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXdCO1FBQzNDLE9BQUUsR0FBRixFQUFFLENBQWE7UUE5QzdCLGNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUM3QixRQUFRLEVBQUUs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QUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDOzt1SEFySlEseUJBQXlCOzJHQUF6Qix5QkFBeUIsbUdDYnRDLGtoSEEyRUE7NEZEOURhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDSSx1QkFBdUI7K0tBS3hCLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVXNlckNyZWF0aW9uV2l6YXJkU2VydmljZSB9IGZyb20gXCIuLi8uLi91c2VyLWNyZWF0aW9uLXdpemFyZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFVTRVJfQ1JFQVRJT05fVFlQRVMgfSBmcm9tICcuLi8uLi8uLi8uLi9hcHAuY29uc3RhbnRzJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IGZpbHRlciwgb2YsIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFVzZXJDcmVhdGlvbkFwaVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3VzZXItY3JlYXRpb24tYXBpLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2l0ZSwgVXNlclRlbXBsYXRlSW50ZXJmYWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NsYXNzZXMvc2l0ZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3RrLXVzZXItdGVtcGxhdGUtc3RlcCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdXNlci10ZW1wbGF0ZS1zdGVwLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3VzZXItdGVtcGxhdGUtc3RlcC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyVGVtcGxhdGVTdGVwQ29tcG9uZW50IHtcclxuICAgIEBJbnB1dCgpIGN1c3RvbWVySWQhOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIGZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgIHVzZXJUeXBlOiBbVVNFUl9DUkVBVElPTl9UWVBFUy5DVUNNXSxcclxuICAgICAgICBzaXRlSWQ6IFtudWxsXSxcclxuICAgICAgICB1c2VyVGVtcGxhdGVJZDogWycnXSxcclxuICAgIH0pO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyQ3JlYXRpb25UeXBlID0gVVNFUl9DUkVBVElPTl9UWVBFUy5DVUNNO1xyXG5cclxuICAgIHB1YmxpYyByZWFkb25seSBVU0VSX0NSRUFUSU9OX1RZUEVTID0gVVNFUl9DUkVBVElPTl9UWVBFUztcclxuICAgIHJlYWRvbmx5IGRlZmF1bHRUZW1wbGF0ZU5hbWUgPSAnODg1MSArIENTRic7XHJcbiAgICByZWFkb25seSBmYWxsYmFja1RlbXBsYXRlSWQgPSAnLTEnO1xyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIHByaXZhdGUgc2l0ZXNMaXN0OiBTaXRlW10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2l0ZXNMaXN0JCA9IHRoaXMudXNlckNyZWF0aW9uU2VydmljZS5zaXRlc0xpc3QkLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxyXG4gICAgICAgIHRhcCgocmVzKSA9PiB0aGlzLnNpdGVzTGlzdCA9IHJlcylcclxuICAgICk7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGVtcGxhdGVzTGlzdCQgPSB0aGlzLnVzZXJDcmVhdGlvblNlcnZpY2UudGVtcGxhdGVzTGlzdCQucGlwZShcclxuICAgICAgICB0YXAoKHRlbXBsYXRlcykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlcyA9IHRlbXBsYXRlcyB8fCBbXTtcclxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVDb250cm9sID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCd1c2VyVGVtcGxhdGVJZCcpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VGVtcGxhdGVJZCA9IHRlbXBsYXRlQ29udHJvbD8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkU2l0ZUlkID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdzaXRlSWQnKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9PiB0ZW1wbGF0ZS5uYW1lID09PSB0aGlzLmRlZmF1bHRUZW1wbGF0ZU5hbWVcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGhhc1NlbGVjdGVkU2l0ZSA9IHNlbGVjdGVkU2l0ZUlkICE9PSBudWxsICYmIHNlbGVjdGVkU2l0ZUlkICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGlmIChoYXNTZWxlY3RlZFNpdGUgJiYgZGVmYXVsdFRlbXBsYXRlICYmIFN0cmluZyhjdXJyZW50VGVtcGxhdGVJZCB8fCAnJykgIT09IFN0cmluZyhkZWZhdWx0VGVtcGxhdGUuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnRyb2w/LnNldFZhbHVlKFN0cmluZyhkZWZhdWx0VGVtcGxhdGUuaWQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxyXG4gICAgKTtcclxuXHJcbiAgICBpc1RlbXBsYXRlU2VsZWN0YWJsZSA9IGZhbHNlO1xyXG4gICAgdGVtcGxhdGVzOiBVc2VyVGVtcGxhdGVJbnRlcmZhY2VbXSA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyByZWFkb25seSB0ZW1wbGF0ZVRvZ2dsZUZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKHRydWUpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyB1c2VyQ3JlYXRpb25XaXphcmRTZXJ2aWNlOiBVc2VyQ3JlYXRpb25XaXphcmRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlckNyZWF0aW9uU2VydmljZTogVXNlckNyZWF0aW9uQXBpU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAhLmdldCgndXNlclR5cGUnKSEudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzT25seVdpdGhMb2NhdGlvbnMgPSB2YWx1ZSA9PT0gVVNFUl9DUkVBVElPTl9UWVBFUy5NVCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2l0ZXMoaXNPbmx5V2l0aExvY2F0aW9ucykuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2VGaWVsZHN0Rm9ybSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAhLmdldCgnc2l0ZUlkJykhLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIC8vIGZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpLFxyXG4gICAgICAgICAgICAgICAgdGFwKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgndXNlclRlbXBsYXRlSWQnKT8uc2V0VmFsdWUodGhpcy5mYWxsYmFja1RlbXBsYXRlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLnVzZXJDcmVhdGlvbldpemFyZFNlcnZpY2Uuc2V0U2VsZWN0ZWRUZW1wbGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aCh0aGlzLmZvcm1Hcm91cC5nZXQoJ3NpdGVJZCcpPy52YWx1ZSksXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlckNyZWF0aW9uU2VydmljZS5mZXRjaEFsbFVzZXJUZW1wbGF0ZXMoTnVtYmVyKHZhbHVlKSlcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgLy8gc3dpdGNoTWFwKCh2YWx1ZSkgPT4gdGhpcy51c2VyQ3JlYXRpb25TZXJ2aWNlLmdldFNpdGVEYXRhKHRoaXMuZm9ybUdyb3VwIS5nZXQoJ3NpdGVJZCcpPy52YWx1ZSB8fCA3MDk1KSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIC8vIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmxvZyh2YWx1ZSk7XHJcbiAgICAgICAgICAgIC8vIH0pXHJcblxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwIS5nZXQoJ3VzZXJUZW1wbGF0ZUlkJykhLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIGZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgU3RyaW5nKHZhbHVlKS50cmltKCkubGVuZ3RoID4gMCksXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFN0cmluZyh2YWx1ZSkgPT09IHRoaXMuZmFsbGJhY2tUZW1wbGF0ZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlckNyZWF0aW9uV2l6YXJkU2VydmljZS5zZXRTZWxlY3RlZFRlbXBsYXRlKHRoaXMuZGVmYXVsdFRlbXBsYXRlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlckNyZWF0aW9uU2VydmljZS5nZXRVc2VyVGVtcGxhdGVUb2tlbihTdHJpbmcodmFsdWUpLCBTdHJpbmcoU3RyaW5nKHRoaXMuY3VzdG9tZXJJZCkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgocGF5bG9hZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlcy5maW5kKHRlbXBsYXRlID0+IFN0cmluZyh0ZW1wbGF0ZS5pZCkgPT09IFN0cmluZyh2YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlckNyZWF0aW9uV2l6YXJkU2VydmljZS5zZXRTZWxlY3RlZFRlbXBsYXRlKHNlbGVjdGVkVGVtcGxhdGU/Lm5hbWUgfHwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyQ3JlYXRpb25XaXphcmRTZXJ2aWNlLmFwcGx5VGVtcGxhdGVUb2tlblBheWxvYWQocGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgIC8vIHRoaXMudGVtcGxhdGVUb2dnbGVGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAvLyAgICAgLnBpcGUoc3RhcnRXaXRoKHRydWUpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXHJcbiAgICAgICAgLy8gICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgLy8gICAgICAgICBpZih2YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IHNpdGVJZCA9IHRoaXMuZm9ybUdyb3VwLmdldCgnc2l0ZUlkJyk/LnZhbHVlIHx8IDcwOTU7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy51c2VyQ3JlYXRpb25TZXJ2aWNlLmZldGNoQWxsVXNlclRlbXBsYXRlcyhzaXRlSWQpXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgICAgICAvLyAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCd1c2VyVGVtcGxhdGVJZCcpPy5yZXNldCgpO1xyXG4gICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZUZpZWxkc3RGb3JtKCkge1xyXG4gICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdzaXRlSWQnKT8ucmVzZXQoKTtcclxuICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgndXNlclRlbXBsYXRlSWQnKT8ucmVzZXQoKTtcclxuICAgICAgIHRoaXMudXNlckNyZWF0aW9uV2l6YXJkU2VydmljZS5zZXRTZWxlY3RlZFRlbXBsYXRlKG51bGwpO1xyXG4gICAgICAgdGhpcy51c2VyQ3JlYXRpb25XaXphcmRTZXJ2aWNlLnJlc2V0VGVtcGxhdGVEcml2ZW5EYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXREYXRhKCkge1xyXG4gICAgICAgIGNvbnN0IGlzT25seVdpdGhMb2NhdGlvbnMgPSB0aGlzLmZvcm1Hcm91cCEuZ2V0KCd1c2VyVHlwZScpPy52YWx1ZSA9PT0gVVNFUl9DUkVBVElPTl9UWVBFUy5NVCA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy51c2VyQ3JlYXRpb25TZXJ2aWNlLmNoZWNrQ29udHJvbEh1YkludGVncmF0aW9uKFN0cmluZyh0aGlzLmN1c3RvbWVySWQpKVxyXG4gICAgICAgICAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy5nZXRTaXRlcyhpc09ubHlXaXRoTG9jYXRpb25zKSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFNpdGVzKGlzT25seVdpdGhMb2NhdGlvbnM6IGJvb2xlYW4pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2VyQ3JlYXRpb25TZXJ2aWNlLmdldEFsbEN1c3RvbWVyU2l0ZXMoU3RyaW5nKHRoaXMuY3VzdG9tZXJJZCksIGlzT25seVdpdGhMb2NhdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0NVQ00oc2l0ZTogU2l0ZSkge1xyXG4gICAgICAgIHJldHVybiBzaXRlPy5jdWNtPy5pZCA9PT0gMjU0MjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2VsZWN0ZWRTaXRlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHNpdGVJZCA9IHRoaXMuZm9ybUdyb3VwLmdldCgnc2l0ZUlkJyk/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IGZvdW5kZWRTaXRlID0gdGhpcy5zaXRlc0xpc3QuZmluZCgoc2l0ZTogYW55KSA9PiBzaXRlLmlkID09PSBzaXRlSWQpO1xyXG4gICAgICAgIHJldHVybiBzaXRlSWQgJiYgZm91bmRlZFNpdGUgPyBmb3VuZGVkU2l0ZS5uYW1lIDogJyc7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG59IiwiPHNlY3Rpb24gY2xhc3M9XCJ0ZW1wbGF0ZS1zdGVwLWNvbnRlbnRcIj5cclxuICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0ZW1wbGF0ZS1zdGVwLWZpZWxkIHRlbXBsYXRlLXN0ZXAtZmllbGQtLXVzZXItdHlwZVwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJ0ZW1wbGF0ZS1zdGVwLWxhYmVsXCI+VXNlciB0eXBlPC9sYWJlbD5cclxuICAgICAgPG1hdC1yYWRpby1ncm91cCBjbGFzcz1cInVzZXItdHlwZS1tYXQtcmFkaW8tZ3JvdXBcIiBmb3JtQ29udHJvbE5hbWU9XCJ1c2VyVHlwZVwiPlxyXG4gICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwidXNlci10eXBlLW1hdC1yYWRpb1wiIGlkPVwidXNlckNyZWF0aW9uQ3VjbVwiIFt2YWx1ZV09XCJVU0VSX0NSRUFUSU9OX1RZUEVTLkNVQ01cIj5cclxuICAgICAgICAgIFVDTS9ESVxyXG4gICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cInVzZXItdHlwZS1tYXQtcmFkaW9cIiBpZD1cInVzZXJDcmVhdGlvbk1UXCIgW3ZhbHVlXT1cIlVTRVJfQ1JFQVRJT05fVFlQRVMuTVRcIj5cclxuICAgICAgICAgIE1UXHJcbiAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidGVtcGxhdGUtc3RlcC1maWVsZFwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJ0ZW1wbGF0ZS1zdGVwLWxhYmVsXCI+U2VsZWN0IHNpdGU8L2xhYmVsPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ0ZW1wbGF0ZS1zdGVwLXNlbGVjdFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2l0ZSBuYW1lXCJcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNpdGVJZFwiPlxyXG5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICAgICAge3sgZ2V0U2VsZWN0ZWRTaXRlTmFtZSgpIH19XHJcbiAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cclxuXHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc2l0ZSBvZiBzaXRlc0xpc3QkIHwgYXN5bmNcIiBbdmFsdWVdPVwic2l0ZS5pZFwiPlxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1yb3dcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hbWVcIj57eyBzaXRlLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaXRlLm5hbWUgPT09ICdCZXJsaW4nIGVsc2Ugbm90QmVybGluU2l0ZVwiIGNsYXNzPVwidHlwZVwiPnt7ICdNdWx0aSBUZW5hbnQnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90QmVybGluU2l0ZT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHlwZVwiPnt7IGlzQ1VDTShzaXRlKSA/ICdVQ00nIDogJ0RlZGljYXRlZCBJbnN0YW5jZScgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1Hcm91cC5nZXQoJ3VzZXJUeXBlJyk/LnZhbHVlID09PSBVU0VSX0NSRUFUSU9OX1RZUEVTLkNVQ01cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRlbXBsYXRlLXN0ZXAtZmllbGRcIj5cclxuICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cInRlbXBsYXRlLXN0ZXAtbGFiZWxcIj5Xb3VsZCB5b3UgbGlrZSB0byB1c2UgYSB0ZW1wbGF0ZSBmb3IgdGhlIHVzZXIgY3JlYXRpb24/PC9sYWJlbD5cclxuICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIFtmb3JtQ29udHJvbF09XCJ0ZW1wbGF0ZVRvZ2dsZUZvcm1Db250cm9sXCI+XHJcbiAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBbY29sb3JdPVwiJ3ByaW1hcnknXCIgW3ZhbHVlXT1cInRydWVcIj5cclxuICAgICAgICAgICAge3sgJ1llcycgfX1cclxuICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIFtjb2xvcl09XCIncHJpbWFyeSdcIiBbdmFsdWVdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAge3sgJ05vJyB9fVxyXG4gICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPiAtLT5cclxuXHJcbiAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwidGVtcGxhdGVUb2dnbGVGb3JtQ29udHJvbC52YWx1ZSA9PT0gdHJ1ZVwiPiAtLT5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRlbXBsYXRlLXN0ZXAtbGFiZWxcIj5TZWxlY3QgdXNlciB0ZW1wbGF0ZTwvbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ0ZW1wbGF0ZS1zdGVwLXNlbGVjdFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInVzZXJUZW1wbGF0ZUlkXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIG1hdFRvb2x0aXA9XCInQSBuZXcgdXNlciB3aWxsIGJlIGNyZWF0ZWQgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHRlbXBsYXRlLCBpbmNsdWRpbmcgYSBDaXNjbyA4ODUxIHBoeXNpY2FsIGRldmljZSB3aXRoIGEgc2luZ2xlIGxpbmUgY29uZmlndXJlZCwgd2l0aG91dCBTTlIgKFNpbmdsZSBOdW1iZXIgUmVhY2gpIGFuZCB3aXRob3V0IHZvaWNlbWFpbC4nXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGRlZmF1bHRUZW1wbGF0ZU5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmFsbGJhY2tUZW1wbGF0ZUlkXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkZWZhdWx0VGVtcGxhdGVOYW1lIH19XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB0ZW1wbGF0ZSBvZiB0ZW1wbGF0ZXNMaXN0JCB8IGFzeW5jXCIgW3ZhbHVlXT1cInRlbXBsYXRlLmlkXCI+XHJcbiAgICAgICAgICAgICAgICB7eyB0ZW1wbGF0ZS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwhLS0gPC9uZy1jb250YWluZXI+IC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgXHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvc2VjdGlvbj5cclxuIl19
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci10ZW1wbGF0ZS1zdGVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy93aWRnZXRzL3VzZXItY3JlYXRpb24td2l6YXJkL2NvbXBvbmVudHMvdXNlci10ZW1wbGF0ZS1zdGVwL3VzZXItdGVtcGxhdGUtc3RlcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvdXNlci1jcmVhdGlvbi9zcmMvd2lkZ2V0cy91c2VyLWNyZWF0aW9uLXdpemFyZC9jb21wb25lbnRzL3VzZXItdGVtcGxhdGUtc3RlcC91c2VyLXRlbXBsYXRlLXN0ZXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQWUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7OztBQVUzSCxNQUFNLE9BQU8seUJBQXlCO0lBK0NsQyxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNyRCxDQUFDO0lBSUQsWUFDVyx5QkFBb0QsRUFDMUMsbUJBQTJDLEVBQzNDLEVBQWU7UUFGekIsOEJBQXlCLEdBQXpCLHlCQUF5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LDI4R0F5RUE7NEZEM0RhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDSSx1QkFBdUI7K0tBS3hCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVXNlckNyZWF0aW9uV2l6YXJkU2VydmljZSB9IGZyb20gXCIuLi8uLi91c2VyLWNyZWF0aW9uLXdpemFyZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFVTRVJfQ1JFQVRJT05fVFlQRVMgfSBmcm9tICcuLi8uLi8uLi8uLi9hcHAuY29uc3RhbnRzJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpbmFsaXplLCBmb3JrSm9pbiwgb2YsIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFVzZXJDcmVhdGlvbkFwaVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3VzZXItY3JlYXRpb24tYXBpLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2l0ZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9jbGFzc2VzL3NpdGVcIjtcclxuaW1wb3J0IHsgVXNlclRlbXBsYXRlSW50ZXJmYWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2ludGVyZmFjZXMvdXNlci1jcmVhdGlvbi13aXphcmQuaW50ZXJmYWNlc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3RrLXVzZXItdGVtcGxhdGUtc3RlcCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdXNlci10ZW1wbGF0ZS1zdGVwLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3VzZXItdGVtcGxhdGUtc3RlcC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyVGVtcGxhdGVTdGVwQ29tcG9uZW50IHtcclxuICAgIEBJbnB1dCgpIGN1c3RvbWVySWQhOiBudW1iZXI7XHJcbiAgICBAT3V0cHV0KCkgdmFsaWRpdHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gICAgcHVibGljIGZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgIHVzZXJUeXBlOiBbVVNFUl9DUkVBVElPTl9UWVBFUy5DVUNNXSxcclxuICAgICAgICBzaXRlSWQ6IFtudWxsXSxcclxuICAgICAgICB1c2VyVGVtcGxhdGVJZDogWycnXSxcclxuICAgIH0pO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyQ3JlYXRpb25UeXBlID0gVVNFUl9DUkVBVElPTl9UWVBFUy5DVUNNO1xyXG5cclxuICAgIHB1YmxpYyByZWFkb25seSBVU0VSX0NSRUFUSU9OX1RZUEVTID0gVVNFUl9DUkVBVElPTl9UWVBFUztcclxuICAgIC8vIHJlYWRvbmx5IGRlZmF1bHRUZW1wbGF0ZU5hbWUgPSAnVXNlciA4ODUxIE9mZmljZSc7XHJcbiAgICAvLyByZWFkb25seSBmYWxsYmFja1RlbXBsYXRlSWQgPSAnLTEnO1xyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIHByaXZhdGUgc2l0ZXNMaXN0OiBTaXRlW10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2l0ZXNMaXN0JCA9IHRoaXMudXNlckNyZWF0aW9uU2VydmljZS5zaXRlc0xpc3QkLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxyXG4gICAgICAgIHRhcCgocmVzKSA9PiB0aGlzLnNpdGVzTGlzdCA9IHJlcylcclxuICAgICk7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGVtcGxhdGVzTGlzdCQgPSB0aGlzLnVzZXJDcmVhdGlvblNlcnZpY2UudGVtcGxhdGVzTGlzdCQucGlwZShcclxuICAgICAgICB0YXAoKHRlbXBsYXRlcykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlcyA9IHRlbXBsYXRlcyB8fCBbXTtcclxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVDb250cm9sID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCd1c2VyVGVtcGxhdGVJZCcpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VGVtcGxhdGVJZCA9IHRlbXBsYXRlQ29udHJvbD8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkU2l0ZUlkID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdzaXRlSWQnKT8udmFsdWU7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IGRlZmF1bHRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzLmZpbmQoXHJcbiAgICAgICAgICAgIC8vICAgICB0ZW1wbGF0ZSA9PiB0ZW1wbGF0ZS5uYW1lID09PSB0aGlzLmRlZmF1bHRUZW1wbGF0ZU5hbWVcclxuICAgICAgICAgICAgLy8gKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGhhc1NlbGVjdGVkU2l0ZSA9IHNlbGVjdGVkU2l0ZUlkICE9PSBudWxsICYmIHNlbGVjdGVkU2l0ZUlkICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIC8vIGlmIChoYXNTZWxlY3RlZFNpdGUgJiYgZGVmYXVsdFRlbXBsYXRlICYmIFN0cmluZyhjdXJyZW50VGVtcGxhdGVJZCB8fCAnJykgIT09IFN0cmluZyhkZWZhdWx0VGVtcGxhdGUuaWQpKSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0ZW1wbGF0ZUNvbnRyb2w/LnNldFZhbHVlKFN0cmluZyhkZWZhdWx0VGVtcGxhdGUuaWQpKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxyXG4gICAgKTtcclxuXHJcbiAgICBpc1RlbXBsYXRlU2VsZWN0YWJsZSA9IGZhbHNlO1xyXG4gICAgdGVtcGxhdGVzOiBVc2VyVGVtcGxhdGVJbnRlcmZhY2VbXSA9IFtdO1xyXG4gICAgbG9hZGluZ1NpdGVzID0gZmFsc2U7XHJcbiAgICBsb2FkaW5nU2l0ZURhdGEgPSBmYWxzZTtcclxuXHJcbiAgICBnZXQgaXNMb2FkaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdTaXRlcyB8fCB0aGlzLmxvYWRpbmdTaXRlRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGVtcGxhdGVUb2dnbGVGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChmYWxzZSk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIHVzZXJDcmVhdGlvbldpemFyZFNlcnZpY2U6IFVzZXJDcmVhdGlvbldpemFyZFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB1c2VyQ3JlYXRpb25TZXJ2aWNlOiBVc2VyQ3JlYXRpb25BcGlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1Hcm91cCEuZ2V0KCd1c2VyVHlwZScpIS52YWx1ZUNoYW5nZXNcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNPbmx5V2l0aExvY2F0aW9ucyA9IHZhbHVlID09PSBVU0VSX0NSRUFUSU9OX1RZUEVTLk1UID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTaXRlcyhpc09ubHlXaXRoTG9jYXRpb25zKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzZUZpZWxkc3RGb3JtKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1Hcm91cCEuZ2V0KCdzaXRlSWQnKSEudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCksXHJcbiAgICAgICAgICAgICAgICB0YXAoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5mb3JtR3JvdXAuZ2V0KCd1c2VyVGVtcGxhdGVJZCcpPy5zZXRWYWx1ZSh0aGlzLmZhbGxiYWNrVGVtcGxhdGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRTaXRlID0gdGhpcy5zaXRlc0xpc3QuZmluZChzaXRlID0+IFN0cmluZyhzaXRlLmlkKSA9PT0gU3RyaW5nKHZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkU2l0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJDcmVhdGlvbldpemFyZFNlcnZpY2Uuc2V0Q3VycmVudFNpdGUoc2VsZWN0ZWRTaXRlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlckNyZWF0aW9uV2l6YXJkU2VydmljZS5zZXRTZWxlY3RlZFNpdGUodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1NpdGVEYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1NpdGVEYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ya0pvaW4oW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJDcmVhdGlvblNlcnZpY2UuZmV0Y2hBbGxVc2VyVGVtcGxhdGVzKE51bWJlcih2YWx1ZSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJDcmVhdGlvbldpemFyZFNlcnZpY2UuZ2V0U2l0ZUFsbERhdGEoTnVtYmVyKHZhbHVlKSksXHJcbiAgICAgICAgICAgICAgICAgICAgXSkucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1NpdGVEYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAvLyAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgY29uc29sZS5sb2codmFsdWUpO1xyXG4gICAgICAgICAgICAvLyB9KVxyXG5cclxuICAgICAgICB0aGlzLmZvcm1Hcm91cCEuZ2V0KCd1c2VyVGVtcGxhdGVJZCcpIS52YWx1ZUNoYW5nZXNcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIFN0cmluZyh2YWx1ZSkudHJpbSgpLmxlbmd0aCA+IDApLFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIChTdHJpbmcodmFsdWUpID09PSB0aGlzLmZhbGxiYWNrVGVtcGxhdGVJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnVzZXJDcmVhdGlvbldpemFyZFNlcnZpY2Uuc2V0U2VsZWN0ZWRUZW1wbGF0ZSh0aGlzLmRlZmF1bHRUZW1wbGF0ZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZXJDcmVhdGlvblNlcnZpY2UuZ2V0VXNlclRlbXBsYXRlVG9rZW4oU3RyaW5nKHZhbHVlKSwgU3RyaW5nKFN0cmluZyh0aGlzLmN1c3RvbWVySWQpKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXAoKHBheWxvYWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXMuZmluZCh0ZW1wbGF0ZSA9PiBTdHJpbmcodGVtcGxhdGUuaWQpID09PSBTdHJpbmcodmFsdWUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJDcmVhdGlvbldpemFyZFNlcnZpY2Uuc2V0U2VsZWN0ZWRUZW1wbGF0ZShzZWxlY3RlZFRlbXBsYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJDcmVhdGlvbldpemFyZFNlcnZpY2UuYXBwbHlUZW1wbGF0ZVRva2VuUGF5bG9hZChwYXlsb2FkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVRvZ2dsZUZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgICAgICAucGlwZShzdGFydFdpdGgodHJ1ZSksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKHZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l0ZUlkID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdzaXRlSWQnKT8udmFsdWUgfHwgNzA5NTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJDcmVhdGlvblNlcnZpY2UuZmV0Y2hBbGxVc2VyVGVtcGxhdGVzKHNpdGVJZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ3VzZXJUZW1wbGF0ZUlkJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuc3RhdHVzQ2hhbmdlc1xyXG4gICAgICAgICAgICAucGlwZShzdGFydFdpdGgodGhpcy5mb3JtR3JvdXAuc3RhdHVzKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMudmFsaWRpdHlDaGFuZ2UuZW1pdCh0aGlzLmlzU3RlcFZhbGlkKCkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXNlRmllbGRzdEZvcm0oKSB7XHJcbiAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ3NpdGVJZCcpPy5yZXNldCgpO1xyXG4gICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCd1c2VyVGVtcGxhdGVJZCcpPy5yZXNldCgpO1xyXG4gICAgICAgdGhpcy51c2VyQ3JlYXRpb25XaXphcmRTZXJ2aWNlLnNldFNlbGVjdGVkVGVtcGxhdGUoKTtcclxuICAgICAgIHRoaXMudXNlckNyZWF0aW9uV2l6YXJkU2VydmljZS5yZXNldFRlbXBsYXRlRHJpdmVuRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RGF0YSgpIHtcclxuICAgICAgICBjb25zdCBpc09ubHlXaXRoTG9jYXRpb25zID0gdGhpcy5mb3JtR3JvdXAhLmdldCgndXNlclR5cGUnKT8udmFsdWUgPT09IFVTRVJfQ1JFQVRJT05fVFlQRVMuTVQgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudXNlckNyZWF0aW9uU2VydmljZS5jaGVja0NvbnRyb2xIdWJJbnRlZ3JhdGlvbihTdHJpbmcodGhpcy5jdXN0b21lcklkKSlcclxuICAgICAgICAgICAgLnBpcGUoc3dpdGNoTWFwKCgpID0+IHRoaXMuZ2V0U2l0ZXMoaXNPbmx5V2l0aExvY2F0aW9ucykpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTaXRlcyhpc09ubHlXaXRoTG9jYXRpb25zOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU2l0ZXMgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJDcmVhdGlvblNlcnZpY2UuZ2V0QWxsQ3VzdG9tZXJTaXRlcyhTdHJpbmcodGhpcy5jdXN0b21lcklkKSwgaXNPbmx5V2l0aExvY2F0aW9ucykucGlwZShcclxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nU2l0ZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0NVQ00oc2l0ZTogU2l0ZSkge1xyXG4gICAgICAgIHJldHVybiBzaXRlPy5jdWNtPy5pZCA9PT0gMjU0MjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2VsZWN0ZWRTaXRlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHNpdGVJZCA9IHRoaXMuZm9ybUdyb3VwLmdldCgnc2l0ZUlkJyk/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IGZvdW5kZWRTaXRlID0gdGhpcy5zaXRlc0xpc3QuZmluZCgoc2l0ZTogYW55KSA9PiBzaXRlLmlkID09PSBzaXRlSWQpO1xyXG4gICAgICAgIHJldHVybiBzaXRlSWQgJiYgZm91bmRlZFNpdGUgPyBmb3VuZGVkU2l0ZS5uYW1lIDogJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlbGVjdGVkVGVtcGxhdGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVJZCA9IHRoaXMuZm9ybUdyb3VwLmdldCgndXNlclRlbXBsYXRlSWQnKT8udmFsdWU7XHJcbiAgICAgICAgY29uc3QgZm91bmRlZFRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXMuZmluZCgodGVtcGxhdGU6IGFueSkgPT4gU3RyaW5nKHRlbXBsYXRlLmlkKSA9PT0gU3RyaW5nKHRlbXBsYXRlSWQpKTtcclxuICAgICAgICByZXR1cm4gdGVtcGxhdGVJZCAmJiBmb3VuZGVkVGVtcGxhdGUgPyBmb3VuZGVkVGVtcGxhdGUubmFtZSA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlzU3RlcFZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHNpdGVJZCA9IHRoaXMuZm9ybUdyb3VwLmdldCgnc2l0ZUlkJyk/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlSWQgPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ3VzZXJUZW1wbGF0ZUlkJyk/LnZhbHVlO1xyXG4gICAgICAgIHJldHVybiBzaXRlSWQgIT09IG51bGwgJiYgc2l0ZUlkICE9PSB1bmRlZmluZWQgJiYgU3RyaW5nKHRlbXBsYXRlSWQgfHwgJycpLnRyaW0oKS5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcmtTdGVwVG91Y2hlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ3NpdGVJZCcpPy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCd1c2VyVGVtcGxhdGVJZCcpPy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG59IiwiPHNlY3Rpb24gY2xhc3M9XCJ0ZW1wbGF0ZS1zdGVwLWNvbnRlbnRcIj5cclxuICA8YXBwLWxvYWRlciAqbmdJZj1cImlzTG9hZGluZ1wiPjwvYXBwLWxvYWRlcj5cclxuICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0ZW1wbGF0ZS1zdGVwLWZpZWxkIHRlbXBsYXRlLXN0ZXAtZmllbGQtLXVzZXItdHlwZVwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJ0ZW1wbGF0ZS1zdGVwLWxhYmVsXCI+VXNlciB0eXBlPC9sYWJlbD5cclxuICAgICAgPG1hdC1yYWRpby1ncm91cCBjbGFzcz1cInVzZXItdHlwZS1tYXQtcmFkaW8tZ3JvdXBcIiBmb3JtQ29udHJvbE5hbWU9XCJ1c2VyVHlwZVwiPlxyXG4gICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwidXNlci10eXBlLW1hdC1yYWRpb1wiIGlkPVwidXNlckNyZWF0aW9uQ3VjbVwiIFt2YWx1ZV09XCJVU0VSX0NSRUFUSU9OX1RZUEVTLkNVQ01cIj5cclxuICAgICAgICAgIFVDTS9ESVxyXG4gICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cInVzZXItdHlwZS1tYXQtcmFkaW9cIiBpZD1cInVzZXJDcmVhdGlvbk1UXCIgW3ZhbHVlXT1cIlVTRVJfQ1JFQVRJT05fVFlQRVMuTVRcIj5cclxuICAgICAgICAgIE1UXHJcbiAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidGVtcGxhdGUtc3RlcC1maWVsZFwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJ0ZW1wbGF0ZS1zdGVwLWxhYmVsXCI+U2VsZWN0IHNpdGU8L2xhYmVsPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ0ZW1wbGF0ZS1zdGVwLXNlbGVjdFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2l0ZSBuYW1lXCJcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNpdGVJZFwiPlxyXG5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICAgICAge3sgZ2V0U2VsZWN0ZWRTaXRlTmFtZSgpIH19XHJcbiAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cclxuXHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc2l0ZSBvZiBzaXRlc0xpc3QkIHwgYXN5bmNcIiBbdmFsdWVdPVwic2l0ZS5pZFwiPlxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1yb3dcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hbWVcIj57eyBzaXRlLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaXRlLm5hbWUgPT09ICdCZXJsaW4nIGVsc2Ugbm90QmVybGluU2l0ZVwiIGNsYXNzPVwidHlwZVwiPnt7ICdNdWx0aSBUZW5hbnQnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90QmVybGluU2l0ZT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHlwZVwiPnt7IGlzQ1VDTShzaXRlKSA/ICdVQ00nIDogJ0RlZGljYXRlZCBJbnN0YW5jZScgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1Hcm91cC5nZXQoJ3VzZXJUeXBlJyk/LnZhbHVlID09PSBVU0VSX0NSRUFUSU9OX1RZUEVTLkNVQ01cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRlbXBsYXRlLXN0ZXAtZmllbGRcIj5cclxuICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cInRlbXBsYXRlLXN0ZXAtbGFiZWxcIj5Xb3VsZCB5b3UgbGlrZSB0byB1c2UgYSB0ZW1wbGF0ZSBmb3IgdGhlIHVzZXIgY3JlYXRpb24/PC9sYWJlbD4gLS0+XHJcbiAgICAgICAgPCEtLSA8bWF0LXJhZGlvLWdyb3VwIFtmb3JtQ29udHJvbF09XCJ0ZW1wbGF0ZVRvZ2dsZUZvcm1Db250cm9sXCI+XHJcbiAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBbY29sb3JdPVwiJ3ByaW1hcnknXCIgW3ZhbHVlXT1cInRydWVcIj5cclxuICAgICAgICAgICAge3sgJ1llcycgfX1cclxuICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIFtjb2xvcl09XCIncHJpbWFyeSdcIiBbdmFsdWVdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAge3sgJ05vJyB9fVxyXG4gICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPiAtLT5cclxuXHJcbiAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwidGVtcGxhdGVUb2dnbGVGb3JtQ29udHJvbC52YWx1ZSA9PT0gdHJ1ZVwiPiAtLT5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRlbXBsYXRlLXN0ZXAtbGFiZWxcIj5TZWxlY3QgdXNlciB0ZW1wbGF0ZTwvbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ0ZW1wbGF0ZS1zdGVwLXNlbGVjdFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInVzZXJUZW1wbGF0ZUlkXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIG1hdFRvb2x0aXA9XCInQSBuZXcgdXNlciB3aWxsIGJlIGNyZWF0ZWQgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHRlbXBsYXRlLCBpbmNsdWRpbmcgYSBDaXNjbyA4ODUxIHBoeXNpY2FsIGRldmljZSB3aXRoIGEgc2luZ2xlIGxpbmUgY29uZmlndXJlZCwgd2l0aG91dCBTTlIgKFNpbmdsZSBOdW1iZXIgUmVhY2gpIGFuZCB3aXRob3V0IHZvaWNlbWFpbC4nXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGdldFNlbGVjdGVkVGVtcGxhdGVOYW1lKCkgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdGVtcGxhdGUgb2YgdGVtcGxhdGVzTGlzdCQgfCBhc3luY1wiIFt2YWx1ZV09XCJ0ZW1wbGF0ZS5pZFwiPlxyXG4gICAgICAgICAgICAgICAge3sgdGVtcGxhdGUubmFtZSB9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8IS0tIDwvbmctY29udGFpbmVyPiAtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIFxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L3NlY3Rpb24+XHJcbiJdfQ==