vc-create-dashboard 3.0.84 → 3.0.86

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 (416) hide show
  1. package/esm2022/lib/configurations.mjs +7 -0
  2. package/esm2022/lib/create-dashboard-container/categories/categories-config.mjs +2 -0
  3. package/esm2022/lib/create-dashboard-container/categories/categories.component.mjs +212 -0
  4. package/esm2022/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.mjs +350 -0
  5. package/esm2022/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.mjs +2 -0
  6. package/esm2022/lib/create-dashboard-container/configure-widgets/configure-widgets.module.mjs +47 -0
  7. package/esm2022/lib/create-dashboard-container/constants/assets.constant.mjs +37 -0
  8. package/esm2022/lib/create-dashboard-container/create-dashboard-config.mjs +2 -0
  9. package/esm2022/lib/create-dashboard-container/create-dashboard.component.mjs +1601 -0
  10. package/esm2022/lib/create-dashboard-container/create-dashboard.module.mjs +127 -0
  11. package/esm2022/lib/create-dashboard-container/directives/directives.module.mjs +24 -0
  12. package/esm2022/lib/create-dashboard-container/directives/scroll-in-view.directive.mjs +36 -0
  13. package/esm2022/lib/create-dashboard-container/form-group/form-group.component.mjs +153 -0
  14. package/esm2022/lib/create-dashboard-container/frequency/frequency.component.mjs +309 -0
  15. package/esm2022/lib/create-dashboard-container/interfaces/widget-data-model.mjs +2 -0
  16. package/esm2022/lib/create-dashboard-container/pipes/filter.pipe.mjs +30 -0
  17. package/esm2022/lib/create-dashboard-container/pipes/search-program.pipe.mjs +37 -0
  18. package/esm2022/lib/create-dashboard-container/pipes/search.pipe.mjs +25 -0
  19. package/esm2022/lib/create-dashboard-container/pipes/text-count.pipe.mjs +18 -0
  20. package/esm2022/lib/create-dashboard-container/program-list/constant.mjs +31 -0
  21. package/esm2022/lib/create-dashboard-container/program-list/information-block/information-block.component.mjs +13 -0
  22. package/esm2022/lib/create-dashboard-container/program-list/interfaces/list-item.interface.mjs +2 -0
  23. package/esm2022/lib/create-dashboard-container/program-list/list-container/list-container.component.mjs +50 -0
  24. package/esm2022/lib/create-dashboard-container/program-list/pipes/check-selected-items.pipes.mjs +23 -0
  25. package/esm2022/lib/create-dashboard-container/program-list/program-list/program-list.component.mjs +294 -0
  26. package/esm2022/lib/create-dashboard-container/program-list/program-list.module.mjs +60 -0
  27. package/esm2022/lib/create-dashboard-container/program-list/services/list-utils.service.mjs +27 -0
  28. package/esm2022/lib/create-dashboard-container/program-list/services/program-list-api.service.mjs +28 -0
  29. package/esm2022/lib/create-dashboard-container/responsibility-center/responsibility-center.component.mjs +239 -0
  30. package/esm2022/lib/create-dashboard-container/risk-categories/risk-categories-config.mjs +2 -0
  31. package/esm2022/lib/create-dashboard-container/risk-categories/risk-categories.component.mjs +206 -0
  32. package/esm2022/lib/create-dashboard-container/services/configure-widgets.service.mjs +233 -0
  33. package/esm2022/lib/create-dashboard-container/services/create-dashboard.service.mjs +227 -0
  34. package/esm2022/lib/create-dashboard-container/services/pagination.service.mjs +28 -0
  35. package/esm2022/lib/create-dashboard-container/user-list/user-list.component.mjs +440 -0
  36. package/esm2022/lib/create-dashboard-container/user-list/user-list.config.mjs +2 -0
  37. package/esm2022/lib/create-dashboard-container/utils/dashboard-edit.utils.mjs +181 -0
  38. package/esm2022/lib/create-dashboard.service.mjs +14 -0
  39. package/esm2022/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.mjs +52 -0
  40. package/esm2022/lib/ui-kit/dashboard-footer/dashboard-footer-config.mjs +2 -0
  41. package/esm2022/lib/ui-kit/dashboard-footer/dashboard-footer.module.mjs +32 -0
  42. package/esm2022/lib/ui-kit/dialog/dialog-config.mjs +7 -0
  43. package/esm2022/lib/ui-kit/dialog/dialog-injector.mjs +17 -0
  44. package/esm2022/lib/ui-kit/dialog/dialog-ref.mjs +11 -0
  45. package/esm2022/lib/ui-kit/dialog/dialog.component.mjs +96 -0
  46. package/esm2022/lib/ui-kit/dialog/dialog.module.mjs +20 -0
  47. package/esm2022/lib/ui-kit/dialog/dialog.service.mjs +56 -0
  48. package/esm2022/lib/ui-kit/dialog/insertion.directive.mjs +17 -0
  49. package/esm2022/lib/ui-kit/floating-bar/floating-bar.component.mjs +57 -0
  50. package/esm2022/lib/ui-kit/floating-bar/floating-bar.module.mjs +32 -0
  51. package/esm2022/lib/ui-kit/formgroup/click-outside.directive.mjs +30 -0
  52. package/esm2022/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.mjs +29 -0
  53. package/esm2022/lib/ui-kit/formgroup/cs-radio/cs-radio.component.mjs +34 -0
  54. package/esm2022/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.mjs +14 -0
  55. package/esm2022/lib/ui-kit/formgroup/cs-select/cs-select.component.mjs +119 -0
  56. package/esm2022/lib/ui-kit/formgroup/cs-switch/cs-switch.component.mjs +39 -0
  57. package/esm2022/lib/ui-kit/formgroup/formgroup.module.mjs +55 -0
  58. package/esm2022/lib/ui-kit/formgroup/pipes/pascal.pipe.mjs +19 -0
  59. package/esm2022/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.mjs +24 -0
  60. package/esm2022/lib/ui-kit/loaders/loaders.module.mjs +24 -0
  61. package/esm2022/lib/ui-kit/loaders/table-loader/table-loader.component.mjs +18 -0
  62. package/esm2022/lib/ui-kit/no-data/no-data.component.mjs +47 -0
  63. package/esm2022/lib/ui-kit/no-data/no-data.module.mjs +18 -0
  64. package/esm2022/lib/ui-kit/pagination/pagination.component.mjs +130 -0
  65. package/esm2022/lib/ui-kit/pagination/pagination.module.mjs +18 -0
  66. package/esm2022/lib/ui-kit/popover/popover.component.mjs +129 -0
  67. package/esm2022/lib/ui-kit/popover/popover.directive.mjs +93 -0
  68. package/esm2022/lib/ui-kit/popover/popover.module.mjs +21 -0
  69. package/esm2022/lib/ui-kit/popover/popover.service.mjs +23 -0
  70. package/esm2022/lib/ui-kit/select/cs-option/cs-option.component.mjs +41 -0
  71. package/esm2022/lib/ui-kit/select/cs-select/cs-select.component.mjs +107 -0
  72. package/esm2022/lib/ui-kit/select/safe-html.pipe.mjs +21 -0
  73. package/esm2022/lib/ui-kit/select/select.module.mjs +21 -0
  74. package/esm2022/lib/ui-kit/services/cs-select.service.mjs +16 -0
  75. package/esm2022/lib/ui-kit/smiley-dialog/smiley-dialog.component.mjs +52 -0
  76. package/esm2022/lib/ui-kit/smiley-dialog/smiley-dialog.module.mjs +18 -0
  77. package/esm2022/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.mjs +46 -0
  78. package/esm2022/lib/ui-kit/snack-bar/snack-bar.module.mjs +18 -0
  79. package/esm2022/lib/ui-kit/snack-bar/snack-bar.service.mjs +23 -0
  80. package/esm2022/lib/ui-kit/tooltip/tooltip.directive.mjs +168 -0
  81. package/esm2022/lib/ui-kit/tooltip/tooltip.module.mjs +18 -0
  82. package/esm2022/lib/ui-kit/v-loader/loader/loader.component.mjs +24 -0
  83. package/esm2022/lib/ui-kit/v-loader/loader-inline/loader-inline.component.mjs +24 -0
  84. package/esm2022/lib/ui-kit/v-loader/v-loader.module.mjs +19 -0
  85. package/esm2022/public-api.mjs +10 -0
  86. package/esm2022/vc-create-dashboard.mjs +5 -0
  87. package/fesm2022/vc-create-dashboard.mjs +6631 -0
  88. package/fesm2022/vc-create-dashboard.mjs.map +1 -0
  89. package/index.d.ts +5 -0
  90. package/lib/configurations.d.ts +4 -0
  91. package/lib/create-dashboard-container/categories/categories-config.d.ts +18 -0
  92. package/lib/create-dashboard-container/categories/categories.component.d.ts +66 -0
  93. package/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.d.ts +113 -0
  94. package/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.d.ts +9 -0
  95. package/lib/create-dashboard-container/configure-widgets/configure-widgets.module.d.ts +14 -0
  96. package/lib/create-dashboard-container/constants/assets.constant.d.ts +35 -0
  97. package/lib/create-dashboard-container/create-dashboard-config.d.ts +18 -0
  98. package/lib/create-dashboard-container/create-dashboard.component.d.ts +219 -0
  99. package/lib/create-dashboard-container/create-dashboard.module.d.ts +37 -0
  100. package/lib/create-dashboard-container/directives/directives.module.d.ts +8 -0
  101. package/lib/create-dashboard-container/directives/scroll-in-view.directive.d.ts +12 -0
  102. package/lib/create-dashboard-container/form-group/form-group.component.d.ts +48 -0
  103. package/lib/create-dashboard-container/frequency/frequency.component.d.ts +39 -0
  104. package/{src/lib/create-dashboard-container/interfaces/widget-data-model.ts → lib/create-dashboard-container/interfaces/widget-data-model.d.ts} +1 -1
  105. package/lib/create-dashboard-container/pipes/filter.pipe.d.ts +7 -0
  106. package/lib/create-dashboard-container/pipes/search-program.pipe.d.ts +7 -0
  107. package/lib/create-dashboard-container/pipes/search.pipe.d.ts +7 -0
  108. package/lib/create-dashboard-container/pipes/text-count.pipe.d.ts +7 -0
  109. package/lib/create-dashboard-container/program-list/constant.d.ts +24 -0
  110. package/lib/create-dashboard-container/program-list/information-block/information-block.component.d.ts +6 -0
  111. package/lib/create-dashboard-container/program-list/interfaces/list-item.interface.d.ts +5 -0
  112. package/lib/create-dashboard-container/program-list/list-container/list-container.component.d.ts +9 -0
  113. package/lib/create-dashboard-container/program-list/pipes/check-selected-items.pipes.d.ts +7 -0
  114. package/lib/create-dashboard-container/program-list/program-list/program-list.component.d.ts +119 -0
  115. package/lib/create-dashboard-container/program-list/program-list.module.d.ts +17 -0
  116. package/lib/create-dashboard-container/program-list/services/list-utils.service.d.ts +7 -0
  117. package/lib/create-dashboard-container/program-list/services/program-list-api.service.d.ts +12 -0
  118. package/lib/create-dashboard-container/responsibility-center/responsibility-center.component.d.ts +72 -0
  119. package/lib/create-dashboard-container/risk-categories/risk-categories-config.d.ts +18 -0
  120. package/lib/create-dashboard-container/risk-categories/risk-categories.component.d.ts +66 -0
  121. package/lib/create-dashboard-container/services/configure-widgets.service.d.ts +21 -0
  122. package/lib/create-dashboard-container/services/create-dashboard.service.d.ts +80 -0
  123. package/lib/create-dashboard-container/services/pagination.service.d.ts +12 -0
  124. package/lib/create-dashboard-container/user-list/user-list.component.d.ts +123 -0
  125. package/{src/lib/create-dashboard-container/user-list/user-list.config.ts → lib/create-dashboard-container/user-list/user-list.config.d.ts} +6 -6
  126. package/lib/create-dashboard-container/utils/dashboard-edit.utils.d.ts +16 -0
  127. package/lib/create-dashboard.service.d.ts +6 -0
  128. package/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.d.ts +17 -0
  129. package/lib/ui-kit/dashboard-footer/dashboard-footer-config.d.ts +11 -0
  130. package/lib/ui-kit/dashboard-footer/dashboard-footer.module.d.ts +10 -0
  131. package/lib/ui-kit/dialog/dialog-config.d.ts +6 -0
  132. package/lib/ui-kit/dialog/dialog-injector.d.ts +7 -0
  133. package/lib/ui-kit/dialog/dialog-ref.d.ts +7 -0
  134. package/lib/ui-kit/dialog/dialog.component.d.ts +33 -0
  135. package/lib/ui-kit/dialog/dialog.module.d.ts +9 -0
  136. package/lib/ui-kit/dialog/dialog.service.d.ts +17 -0
  137. package/lib/ui-kit/dialog/insertion.directive.d.ts +8 -0
  138. package/lib/ui-kit/floating-bar/floating-bar.component.d.ts +20 -0
  139. package/lib/ui-kit/floating-bar/floating-bar.module.d.ts +10 -0
  140. package/lib/ui-kit/formgroup/click-outside.directive.d.ts +10 -0
  141. package/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.d.ts +13 -0
  142. package/lib/ui-kit/formgroup/cs-radio/cs-radio.component.d.ts +15 -0
  143. package/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.d.ts +8 -0
  144. package/lib/ui-kit/formgroup/cs-select/cs-select.component.d.ts +36 -0
  145. package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.d.ts +15 -0
  146. package/lib/ui-kit/formgroup/formgroup.module.d.ts +17 -0
  147. package/lib/ui-kit/formgroup/pipes/pascal.pipe.d.ts +7 -0
  148. package/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.d.ts +7 -0
  149. package/lib/ui-kit/loaders/loaders.module.d.ts +8 -0
  150. package/lib/ui-kit/loaders/table-loader/table-loader.component.d.ts +9 -0
  151. package/lib/ui-kit/no-data/no-data.component.d.ts +19 -0
  152. package/lib/ui-kit/no-data/no-data.module.d.ts +8 -0
  153. package/lib/ui-kit/pagination/pagination.component.d.ts +21 -0
  154. package/lib/ui-kit/pagination/pagination.module.d.ts +8 -0
  155. package/lib/ui-kit/popover/popover.component.d.ts +28 -0
  156. package/lib/ui-kit/popover/popover.directive.d.ts +17 -0
  157. package/lib/ui-kit/popover/popover.module.d.ts +9 -0
  158. package/lib/ui-kit/popover/popover.service.d.ts +13 -0
  159. package/lib/ui-kit/select/cs-option/cs-option.component.d.ts +16 -0
  160. package/lib/ui-kit/select/cs-select/cs-select.component.d.ts +32 -0
  161. package/lib/ui-kit/select/safe-html.pipe.d.ts +10 -0
  162. package/lib/ui-kit/select/select.module.d.ts +11 -0
  163. package/lib/ui-kit/services/cs-select.service.d.ts +7 -0
  164. package/lib/ui-kit/smiley-dialog/smiley-dialog.component.d.ts +17 -0
  165. package/lib/ui-kit/smiley-dialog/smiley-dialog.module.d.ts +8 -0
  166. package/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.d.ts +17 -0
  167. package/lib/ui-kit/snack-bar/snack-bar.module.d.ts +8 -0
  168. package/lib/ui-kit/snack-bar/snack-bar.service.d.ts +9 -0
  169. package/lib/ui-kit/tooltip/tooltip.directive.d.ts +28 -0
  170. package/lib/ui-kit/tooltip/tooltip.module.d.ts +8 -0
  171. package/lib/ui-kit/v-loader/loader/loader.component.d.ts +11 -0
  172. package/lib/ui-kit/v-loader/loader-inline/loader-inline.component.d.ts +11 -0
  173. package/lib/ui-kit/v-loader/v-loader.module.d.ts +9 -0
  174. package/package.json +25 -11
  175. package/public-api.d.ts +3 -0
  176. package/karma.conf.js +0 -44
  177. package/ng-package.json +0 -7
  178. package/src/lib/categoryList.ts +0 -23
  179. package/src/lib/configurations.ts +0 -8
  180. package/src/lib/create-dashboard-container/categories/categories-config.ts +0 -18
  181. package/src/lib/create-dashboard-container/categories/categories.component.html +0 -150
  182. package/src/lib/create-dashboard-container/categories/categories.component.less +0 -252
  183. package/src/lib/create-dashboard-container/categories/categories.component.spec.ts +0 -43
  184. package/src/lib/create-dashboard-container/categories/categories.component.ts +0 -220
  185. package/src/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.html +0 -141
  186. package/src/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.less +0 -381
  187. package/src/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.spec.ts +0 -48
  188. package/src/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.ts +0 -392
  189. package/src/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.ts +0 -9
  190. package/src/lib/create-dashboard-container/configure-widgets/configure-widgets.module.ts +0 -30
  191. package/src/lib/create-dashboard-container/constants/assets.constant.ts +0 -37
  192. package/src/lib/create-dashboard-container/create-dashboard-config.ts +0 -24
  193. package/src/lib/create-dashboard-container/create-dashboard-mockData.ts +0 -341
  194. package/src/lib/create-dashboard-container/create-dashboard.component.html +0 -660
  195. package/src/lib/create-dashboard-container/create-dashboard.component.less +0 -1579
  196. package/src/lib/create-dashboard-container/create-dashboard.component.ts +0 -1886
  197. package/src/lib/create-dashboard-container/create-dashboard.module.ts +0 -76
  198. package/src/lib/create-dashboard-container/directives/directives.module.ts +0 -18
  199. package/src/lib/create-dashboard-container/directives/scroll-in-view.directive.ts +0 -28
  200. package/src/lib/create-dashboard-container/form-group/form-group.component.html +0 -288
  201. package/src/lib/create-dashboard-container/form-group/form-group.component.less +0 -450
  202. package/src/lib/create-dashboard-container/form-group/form-group.component.spec.ts +0 -90
  203. package/src/lib/create-dashboard-container/form-group/form-group.component.ts +0 -163
  204. package/src/lib/create-dashboard-container/frequency/frequency.component.html +0 -61
  205. package/src/lib/create-dashboard-container/frequency/frequency.component.less +0 -183
  206. package/src/lib/create-dashboard-container/frequency/frequency.component.spec.ts +0 -120
  207. package/src/lib/create-dashboard-container/frequency/frequency.component.ts +0 -303
  208. package/src/lib/create-dashboard-container/pipes/filter.pipe.ts +0 -25
  209. package/src/lib/create-dashboard-container/pipes/search-program.pipe.ts +0 -31
  210. package/src/lib/create-dashboard-container/pipes/search.pipe.ts +0 -23
  211. package/src/lib/create-dashboard-container/pipes/text-count.pipe.spec.ts +0 -8
  212. package/src/lib/create-dashboard-container/pipes/text-count.pipe.ts +0 -14
  213. package/src/lib/create-dashboard-container/program-list/constant.ts +0 -36
  214. package/src/lib/create-dashboard-container/program-list/information-block/information-block.component.html +0 -9
  215. package/src/lib/create-dashboard-container/program-list/information-block/information-block.component.less +0 -63
  216. package/src/lib/create-dashboard-container/program-list/information-block/information-block.component.ts +0 -15
  217. package/src/lib/create-dashboard-container/program-list/interfaces/data-source.interface.ts +0 -6
  218. package/src/lib/create-dashboard-container/program-list/interfaces/list-item.interface.ts +0 -8
  219. package/src/lib/create-dashboard-container/program-list/interfaces/selection-predicate.interface.ts +0 -4
  220. package/src/lib/create-dashboard-container/program-list/list-container/list-container.component.less +0 -57
  221. package/src/lib/create-dashboard-container/program-list/list-container/list-container.component.ts +0 -30
  222. package/src/lib/create-dashboard-container/program-list/pipes/check-selected-items.pipes.ts +0 -19
  223. package/src/lib/create-dashboard-container/program-list/program-list/program-list.component.html +0 -158
  224. package/src/lib/create-dashboard-container/program-list/program-list/program-list.component.less +0 -679
  225. package/src/lib/create-dashboard-container/program-list/program-list/program-list.component.ts +0 -342
  226. package/src/lib/create-dashboard-container/program-list/program-list.module.ts +0 -36
  227. package/src/lib/create-dashboard-container/program-list/services/list-utils.service.ts +0 -22
  228. package/src/lib/create-dashboard-container/program-list/services/program-list-api.service.ts +0 -24
  229. package/src/lib/create-dashboard-container/responsibility-center/responsibility-center.component.html +0 -70
  230. package/src/lib/create-dashboard-container/responsibility-center/responsibility-center.component.less +0 -181
  231. package/src/lib/create-dashboard-container/responsibility-center/responsibility-center.component.spec.ts +0 -41
  232. package/src/lib/create-dashboard-container/responsibility-center/responsibility-center.component.ts +0 -154
  233. package/src/lib/create-dashboard-container/risk-categories/risk-categories-config.ts +0 -18
  234. package/src/lib/create-dashboard-container/risk-categories/risk-categories.component.html +0 -152
  235. package/src/lib/create-dashboard-container/risk-categories/risk-categories.component.less +0 -230
  236. package/src/lib/create-dashboard-container/risk-categories/risk-categories.component.spec.ts +0 -39
  237. package/src/lib/create-dashboard-container/risk-categories/risk-categories.component.ts +0 -209
  238. package/src/lib/create-dashboard-container/services/auth.service.ts +0 -27
  239. package/src/lib/create-dashboard-container/services/configure-widgets.service.spec.ts +0 -19
  240. package/src/lib/create-dashboard-container/services/configure-widgets.service.ts +0 -235
  241. package/src/lib/create-dashboard-container/services/create-dashboard.service.spec.ts +0 -19
  242. package/src/lib/create-dashboard-container/services/create-dashboard.service.ts +0 -287
  243. package/src/lib/create-dashboard-container/services/pagination.service.spec.ts +0 -16
  244. package/src/lib/create-dashboard-container/services/pagination.service.ts +0 -25
  245. package/src/lib/create-dashboard-container/services/urlConfig.service.ts +0 -21
  246. package/src/lib/create-dashboard-container/user-list/user-list.component.html +0 -358
  247. package/src/lib/create-dashboard-container/user-list/user-list.component.less +0 -451
  248. package/src/lib/create-dashboard-container/user-list/user-list.component.spec.ts +0 -153
  249. package/src/lib/create-dashboard-container/user-list/user-list.component.ts +0 -472
  250. package/src/lib/create-dashboard-container/utils/dashboard-edit.utils.ts +0 -235
  251. package/src/lib/create-dashboard.service.ts +0 -8
  252. package/src/lib/ui-kit/action-dialog/access-capability/access-capability.component.html +0 -22
  253. package/src/lib/ui-kit/action-dialog/access-capability/access-capability.component.less +0 -218
  254. package/src/lib/ui-kit/action-dialog/access-capability/access-capability.component.ts +0 -30
  255. package/src/lib/ui-kit/action-dialog/action-dialog.module.ts +0 -53
  256. package/src/lib/ui-kit/action-dialog/active/active.component.html +0 -25
  257. package/src/lib/ui-kit/action-dialog/active/active.component.less +0 -168
  258. package/src/lib/ui-kit/action-dialog/active/active.component.ts +0 -31
  259. package/src/lib/ui-kit/action-dialog/assesment-confirmation/assesment-confirmation.component.html +0 -18
  260. package/src/lib/ui-kit/action-dialog/assesment-confirmation/assesment-confirmation.component.less +0 -98
  261. package/src/lib/ui-kit/action-dialog/assesment-confirmation/assesment-confirmation.component.ts +0 -18
  262. package/src/lib/ui-kit/action-dialog/confirmation/confirmation.component.html +0 -20
  263. package/src/lib/ui-kit/action-dialog/confirmation/confirmation.component.less +0 -325
  264. package/src/lib/ui-kit/action-dialog/confirmation/confirmation.component.ts +0 -26
  265. package/src/lib/ui-kit/action-dialog/delete/delete.component.html +0 -24
  266. package/src/lib/ui-kit/action-dialog/delete/delete.component.less +0 -240
  267. package/src/lib/ui-kit/action-dialog/delete/delete.component.ts +0 -22
  268. package/src/lib/ui-kit/action-dialog/error/error.component.html +0 -20
  269. package/src/lib/ui-kit/action-dialog/error/error.component.less +0 -103
  270. package/src/lib/ui-kit/action-dialog/error/error.component.ts +0 -18
  271. package/src/lib/ui-kit/action-dialog/inactive/inactive.component.html +0 -25
  272. package/src/lib/ui-kit/action-dialog/inactive/inactive.component.less +0 -167
  273. package/src/lib/ui-kit/action-dialog/inactive/inactive.component.ts +0 -29
  274. package/src/lib/ui-kit/action-dialog/link/link.component.html +0 -57
  275. package/src/lib/ui-kit/action-dialog/link/link.component.less +0 -222
  276. package/src/lib/ui-kit/action-dialog/link/link.component.ts +0 -18
  277. package/src/lib/ui-kit/action-dialog/move/move.component.html +0 -43
  278. package/src/lib/ui-kit/action-dialog/move/move.component.less +0 -157
  279. package/src/lib/ui-kit/action-dialog/move/move.component.ts +0 -25
  280. package/src/lib/ui-kit/action-dialog/my-rating/my-rating.component.html +0 -19
  281. package/src/lib/ui-kit/action-dialog/my-rating/my-rating.component.less +0 -97
  282. package/src/lib/ui-kit/action-dialog/my-rating/my-rating.component.ts +0 -18
  283. package/src/lib/ui-kit/action-dialog/upload/upload.component.html +0 -19
  284. package/src/lib/ui-kit/action-dialog/upload/upload.component.less +0 -97
  285. package/src/lib/ui-kit/action-dialog/upload/upload.component.ts +0 -12
  286. package/src/lib/ui-kit/chart/bar/bar.component.html +0 -28
  287. package/src/lib/ui-kit/chart/bar/bar.component.less +0 -13
  288. package/src/lib/ui-kit/chart/bar/bar.component.ts +0 -44
  289. package/src/lib/ui-kit/chart/chart.module.ts +0 -12
  290. package/src/lib/ui-kit/chart/pipes/segmenter.pipe.ts +0 -28
  291. package/src/lib/ui-kit/chart/pipes/x-calculator.pipe.ts +0 -22
  292. package/src/lib/ui-kit/circle-progresss/circle/circle.component.html +0 -37
  293. package/src/lib/ui-kit/circle-progresss/circle/circle.component.less +0 -1448
  294. package/src/lib/ui-kit/circle-progresss/circle/circle.component.ts +0 -19
  295. package/src/lib/ui-kit/circle-progresss/circle-progresss.module.ts +0 -10
  296. package/src/lib/ui-kit/click-outside/click-outside.directive.ts +0 -16
  297. package/src/lib/ui-kit/click-outside/click-outside.module.ts +0 -16
  298. package/src/lib/ui-kit/color-palette/color-palette.component.html +0 -110
  299. package/src/lib/ui-kit/color-palette/color-palette.component.less +0 -54
  300. package/src/lib/ui-kit/color-palette/color-palette.component.ts +0 -28
  301. package/src/lib/ui-kit/color-palette/color-palette.module.ts +0 -10
  302. package/src/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.html +0 -37
  303. package/src/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.less +0 -335
  304. package/src/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.spec.ts +0 -25
  305. package/src/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.ts +0 -44
  306. package/src/lib/ui-kit/dashboard-footer/dashboard-footer-config.ts +0 -11
  307. package/src/lib/ui-kit/dashboard-footer/dashboard-footer.module.ts +0 -22
  308. package/src/lib/ui-kit/dialog/dialog-config.ts +0 -6
  309. package/src/lib/ui-kit/dialog/dialog-injector.ts +0 -18
  310. package/src/lib/ui-kit/dialog/dialog-ref.ts +0 -12
  311. package/src/lib/ui-kit/dialog/dialog.component.css +0 -89
  312. package/src/lib/ui-kit/dialog/dialog.component.html +0 -27
  313. package/src/lib/ui-kit/dialog/dialog.component.ts +0 -112
  314. package/src/lib/ui-kit/dialog/dialog.module.ts +0 -11
  315. package/src/lib/ui-kit/dialog/dialog.service.ts +0 -57
  316. package/src/lib/ui-kit/dialog/insertion.directive.ts +0 -8
  317. package/src/lib/ui-kit/floating-bar/floating-bar.component.html +0 -42
  318. package/src/lib/ui-kit/floating-bar/floating-bar.component.less +0 -355
  319. package/src/lib/ui-kit/floating-bar/floating-bar.component.spec.ts +0 -25
  320. package/src/lib/ui-kit/floating-bar/floating-bar.component.ts +0 -40
  321. package/src/lib/ui-kit/floating-bar/floating-bar.module.ts +0 -22
  322. package/src/lib/ui-kit/formgroup/click-outside.directive.ts +0 -16
  323. package/src/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.html +0 -11
  324. package/src/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.less +0 -102
  325. package/src/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.ts +0 -19
  326. package/src/lib/ui-kit/formgroup/cs-radio/cs-radio.component.html +0 -11
  327. package/src/lib/ui-kit/formgroup/cs-radio/cs-radio.component.less +0 -125
  328. package/src/lib/ui-kit/formgroup/cs-radio/cs-radio.component.ts +0 -21
  329. package/src/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.html +0 -4
  330. package/src/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.less +0 -0
  331. package/src/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.ts +0 -12
  332. package/src/lib/ui-kit/formgroup/cs-select/cs-select.component.html +0 -78
  333. package/src/lib/ui-kit/formgroup/cs-select/cs-select.component.less +0 -259
  334. package/src/lib/ui-kit/formgroup/cs-select/cs-select.component.ts +0 -92
  335. package/src/lib/ui-kit/formgroup/cs-switch/cs-switch.component.html +0 -30
  336. package/src/lib/ui-kit/formgroup/cs-switch/cs-switch.component.less +0 -103
  337. package/src/lib/ui-kit/formgroup/cs-switch/cs-switch.component.ts +0 -23
  338. package/src/lib/ui-kit/formgroup/formgroup.module.ts +0 -35
  339. package/src/lib/ui-kit/formgroup/pipes/pascal.pipe.ts +0 -13
  340. package/src/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.ts +0 -18
  341. package/src/lib/ui-kit/line-loader/line-loader.component.html +0 -3
  342. package/src/lib/ui-kit/line-loader/line-loader.component.less +0 -34
  343. package/src/lib/ui-kit/line-loader/line-loader.component.ts +0 -14
  344. package/src/lib/ui-kit/line-loader/line-loader.module.ts +0 -10
  345. package/src/lib/ui-kit/loaders/loaders.module.ts +0 -18
  346. package/src/lib/ui-kit/loaders/table-loader/table-loader.component.html +0 -17
  347. package/src/lib/ui-kit/loaders/table-loader/table-loader.component.less +0 -136
  348. package/src/lib/ui-kit/loaders/table-loader/table-loader.component.ts +0 -17
  349. package/src/lib/ui-kit/longpress/longpress.directive.ts +0 -28
  350. package/src/lib/ui-kit/longpress/longpress.module.ts +0 -10
  351. package/src/lib/ui-kit/multi-select/cs-multiselect/cs-multiselect.component.html +0 -51
  352. package/src/lib/ui-kit/multi-select/cs-multiselect/cs-multiselect.component.less +0 -367
  353. package/src/lib/ui-kit/multi-select/cs-multiselect/cs-multiselect.component.spec.ts +0 -24
  354. package/src/lib/ui-kit/multi-select/cs-multiselect/cs-multiselect.component.ts +0 -141
  355. package/src/lib/ui-kit/multi-select/cs-multiselect-option/cs-multiselect-option.component.html +0 -9
  356. package/src/lib/ui-kit/multi-select/cs-multiselect-option/cs-multiselect-option.component.less +0 -105
  357. package/src/lib/ui-kit/multi-select/cs-multiselect-option/cs-multiselect-option.component.spec.ts +0 -27
  358. package/src/lib/ui-kit/multi-select/cs-multiselect-option/cs-multiselect-option.component.ts +0 -24
  359. package/src/lib/ui-kit/multi-select/multi-select.module.ts +0 -24
  360. package/src/lib/ui-kit/multi-select/multi-select.service.ts +0 -10
  361. package/src/lib/ui-kit/no-data/no-data.component.html +0 -14
  362. package/src/lib/ui-kit/no-data/no-data.component.less +0 -86
  363. package/src/lib/ui-kit/no-data/no-data.component.ts +0 -26
  364. package/src/lib/ui-kit/no-data/no-data.module.ts +0 -10
  365. package/src/lib/ui-kit/pagination/pagination.component.html +0 -11
  366. package/src/lib/ui-kit/pagination/pagination.component.less +0 -72
  367. package/src/lib/ui-kit/pagination/pagination.component.spec.ts +0 -25
  368. package/src/lib/ui-kit/pagination/pagination.component.ts +0 -138
  369. package/src/lib/ui-kit/pagination/pagination.module.ts +0 -10
  370. package/src/lib/ui-kit/pipes/pipes.module.ts +0 -10
  371. package/src/lib/ui-kit/pipes/safeHTML.pipe.ts +0 -12
  372. package/src/lib/ui-kit/pipes/trim.pipe.ts +0 -10
  373. package/src/lib/ui-kit/popover/popover.component.html +0 -6
  374. package/src/lib/ui-kit/popover/popover.component.less +0 -20
  375. package/src/lib/ui-kit/popover/popover.component.ts +0 -127
  376. package/src/lib/ui-kit/popover/popover.directive.ts +0 -72
  377. package/src/lib/ui-kit/popover/popover.module.ts +0 -13
  378. package/src/lib/ui-kit/popover/popover.service.ts +0 -17
  379. package/src/lib/ui-kit/ripple/ripple.directive.ts +0 -36
  380. package/src/lib/ui-kit/ripple/ripple.module.ts +0 -10
  381. package/src/lib/ui-kit/select/cs-option/cs-option.component.html +0 -8
  382. package/src/lib/ui-kit/select/cs-option/cs-option.component.less +0 -49
  383. package/src/lib/ui-kit/select/cs-option/cs-option.component.ts +0 -31
  384. package/src/lib/ui-kit/select/cs-select/cs-select.component.html +0 -16
  385. package/src/lib/ui-kit/select/cs-select/cs-select.component.less +0 -142
  386. package/src/lib/ui-kit/select/cs-select/cs-select.component.ts +0 -98
  387. package/src/lib/ui-kit/select/safe-html.pipe.ts +0 -13
  388. package/src/lib/ui-kit/select/select.module.ts +0 -13
  389. package/src/lib/ui-kit/services/cs-select.service.ts +0 -10
  390. package/src/lib/ui-kit/smiley-dialog/smiley-dialog.component.html +0 -30
  391. package/src/lib/ui-kit/smiley-dialog/smiley-dialog.component.less +0 -442
  392. package/src/lib/ui-kit/smiley-dialog/smiley-dialog.component.ts +0 -40
  393. package/src/lib/ui-kit/smiley-dialog/smiley-dialog.module.ts +0 -11
  394. package/src/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.html +0 -10
  395. package/src/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.less +0 -110
  396. package/src/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.ts +0 -42
  397. package/src/lib/ui-kit/snack-bar/snack-bar.module.ts +0 -10
  398. package/src/lib/ui-kit/snack-bar/snack-bar.service.ts +0 -18
  399. package/src/lib/ui-kit/time-filter/time-filter.component.html +0 -126
  400. package/src/lib/ui-kit/time-filter/time-filter.component.less +0 -482
  401. package/src/lib/ui-kit/time-filter/time-filter.component.ts +0 -284
  402. package/src/lib/ui-kit/time-filter/time-filter.module.ts +0 -10
  403. package/src/lib/ui-kit/tooltip/tooltip.directive.ts +0 -150
  404. package/src/lib/ui-kit/tooltip/tooltip.module.ts +0 -10
  405. package/src/lib/ui-kit/v-loader/loader/loader.component.html +0 -6
  406. package/src/lib/ui-kit/v-loader/loader/loader.component.less +0 -52
  407. package/src/lib/ui-kit/v-loader/loader/loader.component.ts +0 -22
  408. package/src/lib/ui-kit/v-loader/loader-inline/loader-inline.component.html +0 -6
  409. package/src/lib/ui-kit/v-loader/loader-inline/loader-inline.component.less +0 -52
  410. package/src/lib/ui-kit/v-loader/loader-inline/loader-inline.component.ts +0 -22
  411. package/src/lib/ui-kit/v-loader/v-loader.module.ts +0 -11
  412. package/src/public-api.ts +0 -11
  413. package/src/test.ts +0 -28
  414. package/tsconfig.lib.json +0 -20
  415. package/tsconfig.lib.prod.json +0 -10
  416. package/tsconfig.spec.json +0 -17
@@ -0,0 +1,440 @@
1
+ import { HttpParams } from '@angular/common/http';
2
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { ASSETS } from '../constants/assets.constant';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../services/pagination.service";
6
+ import * as i2 from "../services/create-dashboard.service";
7
+ import * as i3 from "@angular/common";
8
+ import * as i4 from "../../ui-kit/formgroup/cs-checkbox/cs-checkbox.component";
9
+ import * as i5 from "@angular/forms";
10
+ import * as i6 from "../../ui-kit/tooltip/tooltip.directive";
11
+ import * as i7 from "../../ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component";
12
+ import * as i8 from "../../ui-kit/pagination/pagination.component";
13
+ import * as i9 from "../../ui-kit/popover/popover.component";
14
+ import * as i10 from "../../ui-kit/popover/popover.directive";
15
+ import * as i11 from "../../ui-kit/v-loader/loader-inline/loader-inline.component";
16
+ import * as i12 from "../../ui-kit/no-data/no-data.component";
17
+ export class UserListComponent {
18
+ paginationService;
19
+ dashboardService;
20
+ closeUserList = new EventEmitter();
21
+ saveSelectedUsers = new EventEmitter();
22
+ selectionType = '';
23
+ listDetails = {
24
+ displayElementKey: '',
25
+ displayGroupKey: '',
26
+ groupIdkey: '',
27
+ elementIdKey: '',
28
+ tooltipKey: '',
29
+ selectedUsersList: [],
30
+ selectedGroupList: [],
31
+ nonRemovableUsersList: [],
32
+ };
33
+ footerDetails = {
34
+ selectedData: [],
35
+ nonRemovableList: [],
36
+ displayElementKey: '',
37
+ elementId: '',
38
+ singularText: 'User selected',
39
+ pluralText: 'Users selected',
40
+ showFrequency: false,
41
+ frequencyText: '',
42
+ isDisabled: false,
43
+ };
44
+ vLoader = false;
45
+ vLoaderGroups = false;
46
+ ASSETS = ASSETS;
47
+ totalPages = 1;
48
+ limit = 1;
49
+ totalList = 1;
50
+ feature;
51
+ totalgroupscount;
52
+ searchList = [];
53
+ searchValue = '';
54
+ searchFilter = '';
55
+ selectedIds = [];
56
+ selectedList = [];
57
+ groupdata = [];
58
+ animation = true;
59
+ totalgroups;
60
+ total_group_pages;
61
+ selectedGroupIds = [];
62
+ groupsEnabled;
63
+ selectedgroupList = [];
64
+ currentPage = 1;
65
+ constructor(paginationService, dashboardService) {
66
+ this.paginationService = paginationService;
67
+ this.dashboardService = dashboardService;
68
+ this.paginationService.reset();
69
+ this.getOrganizationUsersCount('');
70
+ }
71
+ ngOnChanges() { }
72
+ ngOnInit() {
73
+ this.groupsEnabled = true;
74
+ this.animation = true;
75
+ setTimeout(() => {
76
+ this.animation = false;
77
+ }, 300);
78
+ if (this.listDetails.selectedUsersList.length > 0) {
79
+ this.selectedList = [...new Set(this.listDetails.selectedUsersList)];
80
+ const selectedData = [...new Set(this.listDetails.selectedUsersList)];
81
+ this.footerDetails.selectedData = selectedData;
82
+ this.footerDetails.nonRemovableList =
83
+ this.listDetails.nonRemovableUsersList;
84
+ this.selectedIds = selectedData.map((ele) => {
85
+ if (ele[this.listDetails.elementIdKey]) {
86
+ return ele[this.listDetails.elementIdKey];
87
+ }
88
+ });
89
+ }
90
+ this.getUsersList({
91
+ // p: this.paginationService.currentPage === 1 ? '' : this.paginationService.currentPage,
92
+ p: this.paginationService.currentPage ?? 1,
93
+ type: '',
94
+ });
95
+ this.footerDetails.displayElementKey = this.listDetails.displayElementKey;
96
+ this.footerDetails.elementId = this.listDetails.elementIdKey;
97
+ if (this.groupsEnabled) {
98
+ this.getGroupsList({});
99
+ }
100
+ if (this.listDetails.selectedGroupList.length > 0) {
101
+ this.selectedgroupList = [...new Set(this.listDetails.selectedGroupList)];
102
+ const selectedData = [...new Set(this.listDetails.selectedGroupList)];
103
+ this.footerDetails.selectedData = selectedData;
104
+ this.footerDetails.nonRemovableList =
105
+ this.listDetails.nonRemovableUsersList;
106
+ this.selectedGroupIds = selectedData.map((ele) => {
107
+ if (ele[this.listDetails.groupIdkey]) {
108
+ return ele[this.listDetails.groupIdkey];
109
+ }
110
+ });
111
+ }
112
+ }
113
+ cancelChanges() { }
114
+ removeElement(event) { }
115
+ submitChanges() { }
116
+ selectAll(event) {
117
+ if (event) {
118
+ this.searchList.forEach((searchElement) => {
119
+ if (!this.selectedIds.includes(searchElement[this.listDetails.elementIdKey])) {
120
+ this.selectedList.push(searchElement);
121
+ this.selectedIds.push(searchElement[this.listDetails.elementIdKey]);
122
+ this.footerDetails.selectedData = this.selectedList;
123
+ }
124
+ });
125
+ }
126
+ else {
127
+ this.searchList.forEach((searchElement) => {
128
+ if (!this.listDetails.nonRemovableUsersList.includes(searchElement[this.listDetails.elementIdKey])) {
129
+ const index = this.selectedList.findIndex((ele) => ele[this.listDetails.elementIdKey] ===
130
+ searchElement[this.listDetails.elementIdKey]);
131
+ this.selectedList.splice(index, 1);
132
+ const filteredList = [...this.selectedList];
133
+ this.footerDetails.selectedData = this.selectedList;
134
+ const idIndex = this.selectedIds.findIndex((ele) => ele === searchElement[this.listDetails.elementIdKey]);
135
+ this.selectedIds.splice(idIndex, 1);
136
+ }
137
+ });
138
+ }
139
+ }
140
+ /**
141
+ * Selects all admins and managers at once by making api call.
142
+ * @param event consists boolean value to select of unselect.
143
+ */
144
+ selectAllUsers(event) {
145
+ if (event) {
146
+ this.vLoader = true;
147
+ this.dashboardService.getAllUsers().subscribe((res) => {
148
+ if (res.length > 1) {
149
+ res.forEach((searchElement) => {
150
+ if (!this.selectedIds.includes(searchElement[this.listDetails.elementIdKey])) {
151
+ this.selectedList.push(searchElement);
152
+ this.selectedIds.push(searchElement[this.listDetails.elementIdKey]);
153
+ this.footerDetails.selectedData = this.selectedList;
154
+ }
155
+ });
156
+ }
157
+ this.vLoader = false;
158
+ });
159
+ }
160
+ else {
161
+ const selectedData = [...new Set(this.selectedList)];
162
+ const index = selectedData.findIndex((ele) => ele[this.listDetails.elementIdKey] ===
163
+ this.listDetails.nonRemovableUsersList[0]);
164
+ if (index != -1) {
165
+ const owner = Object.assign(selectedData[index]);
166
+ this.selectedList = [];
167
+ this.selectedIds = [];
168
+ this.footerDetails.selectedData = [];
169
+ this.selectedList.push(owner);
170
+ this.selectedIds.push(owner.member_id);
171
+ this.footerDetails.selectedData = this.selectedList;
172
+ }
173
+ else {
174
+ this.selectedList = [];
175
+ this.selectedIds = [];
176
+ this.footerDetails.selectedData = [];
177
+ }
178
+ }
179
+ }
180
+ selectAllGroups(event) {
181
+ let params = new HttpParams();
182
+ params = params.append('fetch_all', 1);
183
+ if (event) {
184
+ this.vLoaderGroups = true;
185
+ this.dashboardService.getAllGroups(params).subscribe((res) => {
186
+ if (res.data.length > 1) {
187
+ res.data.forEach((searchElement) => {
188
+ if (!this.selectedGroupIds.includes(searchElement[this.listDetails.groupIdkey])) {
189
+ this.selectedgroupList.push(searchElement);
190
+ this.selectedGroupIds.push(searchElement[this.listDetails.groupIdkey]);
191
+ this.footerDetails.selectedData = this.selectedgroupList;
192
+ }
193
+ });
194
+ }
195
+ this.vLoaderGroups = false;
196
+ });
197
+ }
198
+ else {
199
+ this.selectedgroupList = [];
200
+ this.selectedGroupIds = [];
201
+ this.footerDetails.selectedData = [];
202
+ }
203
+ }
204
+ selectAllsearchgroups(event) {
205
+ if (event) {
206
+ this.groupdata.forEach((searchElement) => {
207
+ if (!this.selectedGroupIds.includes(searchElement[this.listDetails.groupIdkey])) {
208
+ this.selectedgroupList.push(searchElement);
209
+ this.selectedGroupIds.push(searchElement[this.listDetails.groupIdkey]);
210
+ this.footerDetails.selectedData = this.selectedgroupList;
211
+ }
212
+ });
213
+ }
214
+ else {
215
+ this.selectedgroupList = [];
216
+ this.selectedGroupIds = [];
217
+ this.footerDetails.selectedData = [];
218
+ }
219
+ }
220
+ /**
221
+ * Selects checked item from the list.
222
+ * In case of user's list calculates number of admins/manages to set visibility(either to all admins/ admins and managers)
223
+ * @param data is the selected element
224
+ */
225
+ selectElement(data) {
226
+ if (this.selectedIds.includes(data[this.listDetails.elementIdKey])) {
227
+ if (!this.listDetails.nonRemovableUsersList.includes(data[this.listDetails.elementIdKey])) {
228
+ const index = this.selectedList.findIndex((ele) => ele[this.listDetails.elementIdKey] ===
229
+ data[this.listDetails.elementIdKey]);
230
+ this.selectedList.splice(index, 1);
231
+ this.footerDetails.selectedData = this.selectedList;
232
+ const idIndex = this.selectedIds.findIndex((ele) => ele === data[this.listDetails.elementIdKey]);
233
+ this.selectedIds.splice(idIndex, 1);
234
+ }
235
+ }
236
+ else {
237
+ this.selectedList.push(data);
238
+ this.selectedIds.push(data[this.listDetails.elementIdKey]);
239
+ this.footerDetails.selectedData = this.selectedList;
240
+ }
241
+ }
242
+ selectGroupElement(data) {
243
+ if (this.selectedGroupIds.includes(data[this.listDetails.groupIdkey])) {
244
+ const index = this.selectedgroupList.findIndex((ele) => ele[this.listDetails.groupIdkey] === data[this.listDetails.groupIdkey]);
245
+ this.selectedgroupList.splice(index, 1);
246
+ this.footerDetails.selectedData = this.selectedgroupList;
247
+ const idIndex = this.selectedGroupIds.findIndex((ele) => ele === data[this.listDetails.groupIdkey]);
248
+ this.selectedGroupIds.splice(idIndex, 1);
249
+ }
250
+ else {
251
+ this.selectedgroupList.push(data);
252
+ this.selectedGroupIds.push(data[this.listDetails.groupIdkey]);
253
+ this.footerDetails.selectedData = this.selectedgroupList;
254
+ }
255
+ }
256
+ /**
257
+ * It is used to set and search value incase of backend driven list to differentiate search list and original list
258
+ */
259
+ setSearchValue() {
260
+ if (this.paginationService.searchValue !== this.searchValue) {
261
+ this.paginationService.currentPage = 1;
262
+ this.paginationService.searchValue = this.searchValue;
263
+ this.paginationFilter(true);
264
+ }
265
+ }
266
+ /**
267
+ * it is used check select all condition incase of backend driven search
268
+ */
269
+ checkSelectAll() {
270
+ if (this.searchList.length > 0) {
271
+ const data = this.searchList.every((ele) => this.selectedIds.includes(ele[this.listDetails.elementIdKey]));
272
+ return data;
273
+ }
274
+ else {
275
+ return false;
276
+ }
277
+ }
278
+ /**
279
+ * it is used check select all groups condition incase of backend driven search
280
+ */
281
+ checkSelectAllGroups() {
282
+ if (this.groupdata.length > 0) {
283
+ const data = this.groupdata.every((ele) => this.selectedGroupIds.includes(ele[this.listDetails.groupIdkey]));
284
+ return data;
285
+ }
286
+ else {
287
+ return false;
288
+ }
289
+ }
290
+ /**
291
+ * Filter list user's list based on pagination by making api call
292
+ * @param event specifies a boolean value to call api
293
+ */
294
+ paginationFilter(event) {
295
+ if (!event)
296
+ return;
297
+ if (this.groupsEnabled) {
298
+ this.vLoader = true;
299
+ if (this.currentTab == 'USER') {
300
+ this.getUsersList({
301
+ // p: this.paginationService.currentPage === 1 ? '' : this.paginationService.currentPage,
302
+ p: this.paginationService.currentPage ?? 1,
303
+ type: '',
304
+ q: !this.paginationService.searchValue
305
+ ? ''
306
+ : this.paginationService.searchValue,
307
+ });
308
+ this.getOrganizationUsersCount({
309
+ p: this.paginationService.currentPage ?? 1,
310
+ type: '',
311
+ q: !this.paginationService.searchValue
312
+ ? ''
313
+ : this.paginationService.searchValue,
314
+ });
315
+ }
316
+ else {
317
+ this.getGroupsList({
318
+ page: this.paginationService.currentPage === 1
319
+ ? ''
320
+ : this.paginationService.currentPage,
321
+ groupName: !this.paginationService.searchValue
322
+ ? ''
323
+ : this.paginationService.searchValue,
324
+ });
325
+ }
326
+ }
327
+ else {
328
+ this.vLoader = true;
329
+ this.getUsersList({
330
+ // p: this.paginationService.currentPage === 1 ? '' : this.paginationService.currentPage,
331
+ p: this.paginationService.currentPage ?? 1,
332
+ type: '',
333
+ q: !this.paginationService.searchValue
334
+ ? ''
335
+ : this.paginationService.searchValue,
336
+ });
337
+ this.getOrganizationUsersCount({
338
+ p: this.paginationService.currentPage ?? 1,
339
+ type: '',
340
+ q: !this.paginationService.searchValue
341
+ ? ''
342
+ : this.paginationService.searchValue,
343
+ });
344
+ }
345
+ }
346
+ /**
347
+ * Gets user's list by making api call
348
+ * @param url contains userlist filter details
349
+ */
350
+ getUsersList(url) {
351
+ this.vLoader = true;
352
+ this.dashboardService
353
+ .getOrganizationUsers(url ? url : '')
354
+ .subscribe((res) => {
355
+ this.searchList = res;
356
+ this.vLoader = false;
357
+ });
358
+ }
359
+ getGroupsList(event) {
360
+ this.vLoaderGroups = true;
361
+ let params = new HttpParams();
362
+ if (event.hasOwnProperty('groupName')) {
363
+ params = params.append('groupName', event['groupName']);
364
+ }
365
+ if (event.hasOwnProperty('page') && !this.searchValue) {
366
+ params = params.append('page', event['page']);
367
+ }
368
+ if (this.totalgroupscount > 30 && !this.searchValue) {
369
+ params = params.append('limit', 30);
370
+ }
371
+ this.dashboardService.getAllGroups(params).subscribe((res) => {
372
+ this.groupdata = res?.data;
373
+ this.vLoaderGroups = false;
374
+ this.totalgroups = res.total_items;
375
+ this.total_group_pages = res.total_pages;
376
+ });
377
+ }
378
+ /**
379
+ * on click on next button from the list, it emits the selected list of elements to parent component.
380
+ */
381
+ onSubmit() {
382
+ // const data = [...new Set(this.selectedList)];
383
+ // data.push(this.selectedgroupList)
384
+ this.saveSelectedUsers.emit({
385
+ users: this.selectedList,
386
+ groups: this.selectedgroupList,
387
+ });
388
+ this.paginationService.reset();
389
+ }
390
+ currentTab = 'USER';
391
+ switchTab(tab) {
392
+ this.paginationService.reset();
393
+ this.getOrganizationUsersCount('');
394
+ this.currentTab = tab;
395
+ if (this.currentTab == 'USER') {
396
+ this.searchValue = '';
397
+ this.getUsersList({ p: this.paginationService.currentPage });
398
+ }
399
+ else {
400
+ this.searchValue = '';
401
+ this.getGroupsList({});
402
+ }
403
+ }
404
+ getOrganizationUsersCount(Url) {
405
+ this.dashboardService.getOrganizationUsersCount(Url).subscribe((res) => {
406
+ this.totalList = res.total_members;
407
+ if (res.total_members && res.limit_per_page > 1) {
408
+ this.totalPages = res.create_page;
409
+ }
410
+ else {
411
+ this.totalPages = 1;
412
+ }
413
+ });
414
+ }
415
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserListComponent, deps: [{ token: i1.PaginationService }, { token: i2.CreateDashboardService }], target: i0.ɵɵFactoryTarget.Component });
416
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserListComponent, selector: "app-user-list", inputs: { selectionType: "selectionType", listDetails: "listDetails", totalPages: "totalPages", limit: "limit", totalList: "totalList", feature: "feature", totalgroupscount: "totalgroupscount" }, outputs: { closeUserList: "closeUserList", saveSelectedUsers: "saveSelectedUsers" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"user-list\" [class.animate-slideInRight]=\"animation\">\r\n <div\r\n class=\"user-list-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\"\r\n >\r\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">\r\n Who can view this dashboard?\r\n </div>\r\n </div>\r\n <div class=\"user-list-body\">\r\n <div\r\n class=\"user-list-tab vx-d-flex vx-align-center vx-mb-2\"\r\n *ngIf=\"groupsEnabled\"\r\n >\r\n <button\r\n (click)=\"switchTab('USER')\"\r\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\r\n [class.active]=\"currentTab === 'USER'\"\r\n >\r\n USERS\r\n <span\r\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\r\n >{{ totalList }}</span\r\n >\r\n </button>\r\n <button\r\n id=\"switchtab\"\r\n (click)=\"switchTab('GROUP')\"\r\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\r\n [class.active]=\"currentTab === 'GROUP'\"\r\n >\r\n USER GROUPS\r\n <span\r\n id=\"groupscount\"\r\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\r\n >{{ totalgroups }}</span\r\n >\r\n </button>\r\n </div>\r\n\r\n <div class=\"user-list-search vx-mb-2\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"searchValue\"\r\n placeholder=\"{{\r\n currentTab === 'USER' ? 'Search User(s)' : 'Search User Group(s)'\r\n }} who can view this dashboard\"\r\n (keyup.enter)=\"setSearchValue()\"\r\n (focusout)=\"setSearchValue()\"\r\n />\r\n </div>\r\n\r\n <ng-container *ngIf=\"currentTab === 'USER'\">\r\n <div\r\n class=\"vx-d-flex vx-align-center vx-justify-end\"\r\n *ngIf=\"totalPages > 1\"\r\n >\r\n <div\r\n class=\"pagination-box\"\r\n *ngIf=\"totalPages > 1 && searchList.length > 1\"\r\n >\r\n <app-pagination\r\n (paginationFilter)=\"paginationFilter($event)\"\r\n [limit]=\"limit\"\r\n [totalPages]=\"totalPages\"\r\n [totalList]=\"totalList\"\r\n ></app-pagination>\r\n </div>\r\n </div>\r\n <div class=\"user-list-body-top\" *ngIf=\"searchList.length !== 0\">\r\n <app-cs-checkbox\r\n *ngIf=\"!searchValue && searchList.length > 1\"\r\n [ngValue]=\"selectedList.length == totalList\"\r\n (ngValueChange)=\"selectAllUsers($event)\"\r\n >\r\n <strong>{{\r\n selectedList.length == totalList ? \"Deselect All\" : \"Select All\"\r\n }}</strong>\r\n </app-cs-checkbox>\r\n <app-cs-checkbox\r\n *ngIf=\"searchValue && searchList.length > 1\"\r\n [ngValue]=\"checkSelectAll()\"\r\n (ngValueChange)=\"selectAll($event)\"\r\n >\r\n <strong>{{\r\n selectedList.length == totalList ? \"Deselect All\" : \"Select All\"\r\n }}</strong>\r\n </app-cs-checkbox>\r\n </div>\r\n <div class=\"list-of-user\">\r\n <div\r\n class=\"selection-list vx-mb-4\"\r\n [class.with-group]=\"groupsEnabled\"\r\n [class.with-noData]=\"searchList.length == 0\"\r\n [class.with-pagination]=\"totalPages > 1 && searchList.length > 1\"\r\n >\r\n <ul *ngIf=\"searchList.length !== 0\">\r\n <li *ngFor=\"let data of searchList; let i = index\">\r\n <app-cs-checkbox\r\n [disabled]=\"\r\n listDetails.nonRemovableUsersList.includes(\r\n data[listDetails.elementIdKey]\r\n )\r\n \"\r\n [ngValue]=\"\r\n selectedList.length > 0 &&\r\n selectedIds.includes(data[listDetails.elementIdKey])\r\n \"\r\n (ngValueChange)=\"selectElement(data)\"\r\n [arTooltip]=\"data[listDetails.tooltipKey]\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >{{ data[listDetails.displayElementKey] }}</app-cs-checkbox\r\n >\r\n </li>\r\n </ul>\r\n\r\n <app-no-data\r\n *ngIf=\"!vLoader && searchList.length == 0\"\r\n [noDataImage]=\"ASSETS.search_data\"\r\n [noDataText]=\"'No data to display'\"\r\n ></app-no-data>\r\n </div>\r\n\r\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"currentTab === 'GROUP' && groupsEnabled\">\r\n <ng-container *ngIf=\"groupdata as groups\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-end\" *ngIf=\"true\">\r\n <div class=\"pagination-box\" *ngIf=\"total_group_pages > 1\">\r\n <app-pagination\r\n (paginationFilter)=\"paginationFilter($event)\"\r\n [limit]=\"limit\"\r\n [totalPages]=\"total_group_pages\"\r\n [totalList]=\"totalgroups\"\r\n ></app-pagination>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"true\">\r\n <div\r\n class=\"user-list-mid vx-mb-4\"\r\n [class.with-pagination]=\"total_group_pages > 1\"\r\n >\r\n <ng-container *ngIf=\"groups?.length > 0\">\r\n <div class=\"user-list-select vx-mb-4\">\r\n <app-cs-checkbox\r\n [disabled]=\"false\"\r\n *ngIf=\"!searchValue && groups.length > 1\"\r\n [ngValue]=\"selectedgroupList.length == totalgroups\"\r\n (ngValueChange)=\"selectAllGroups($event)\"\r\n >\r\n <div\r\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\r\n >\r\n {{\r\n selectedgroupList.length == totalgroups\r\n ? \"Deselect All\"\r\n : \"Select All\"\r\n }}\r\n </div>\r\n </app-cs-checkbox>\r\n <app-cs-checkbox\r\n [disabled]=\"false\"\r\n *ngIf=\"searchValue && groups.length > 1\"\r\n [ngValue]=\"checkSelectAllGroups()\"\r\n (ngValueChange)=\"selectAllsearchgroups($event)\"\r\n >\r\n <div\r\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\r\n >\r\n {{\r\n selectedgroupList.length == totalgroups\r\n ? \"Deselect All\"\r\n : \"Select All\"\r\n }}\r\n </div>\r\n </app-cs-checkbox>\r\n </div>\r\n <div class=\"user-list-item\">\r\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\r\n <li\r\n class=\"vx-mb-4\"\r\n *ngFor=\"let data of groups; let i = index\"\r\n >\r\n <app-cs-checkbox\r\n (ngValueChange)=\"selectGroupElement(data)\"\r\n [disabled]=\"false\"\r\n [ngValue]=\"\r\n selectedgroupList.length > 0 &&\r\n selectedGroupIds.includes(data[listDetails.groupIdkey])\r\n \"\r\n >\r\n <div class=\"user-name vx-d-flex vx-align-center\">\r\n <div\r\n class=\"group-name\"\r\n [arTooltip]=\"data[listDetails.displayGroupKey]\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >\r\n {{ data[listDetails.displayGroupKey] }}\r\n </div>\r\n <span\r\n id=\"usersofgroup\"\r\n class=\"counter vx-fs-9 vx-fw-600 vx-pl-1 vx-pr-1 vx-lh-3 vx-tt-uppercase vx-ml-2\"\r\n >{{ data[\"associatedUsers\"].length }}\r\n {{\r\n data[\"associatedUsers\"].length > 1\r\n ? \"USERS\"\r\n : \"USER\"\r\n }}</span\r\n >\r\n </div>\r\n </app-cs-checkbox>\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"groups?.length == 0 && !vLoaderGroups\">\r\n <app-no-data\r\n [noDataImage]=\"ASSETS.search_data\"\r\n [noDataText]=\"\r\n (searchValue?.length > 0\r\n ? 'No match found.'\r\n : 'No data to display.'\r\n )\r\n \"\r\n ></app-no-data>\r\n </ng-container>\r\n <app-loader-inline *ngIf=\"vLoaderGroups\"></app-loader-inline>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"user-floating-bar\" *ngIf=\"groupsEnabled\">\r\n <div\r\n class=\"user-floating-bar-container vx-d-flex vx-align-center vx-justify-between\"\r\n >\r\n <div class=\"left vx-d-flex vx-align-center\">\r\n <button\r\n class=\"counter vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 vx-m-0 vx-pl-1 vx-pr-1\"\r\n *ngIf=\"selectedList?.length\"\r\n appPopover\r\n (click)=\"userCount.popover()\"\r\n placement=\"left\"\r\n >\r\n {{ selectedList?.length }}\r\n </button>\r\n <div class=\"name vx-fs-12 vx-paragraph-txt vx-ml-2\">\r\n <span *ngIf=\"selectedList?.length === 1\"\r\n >User\r\n {{ selectedgroupList?.length > 0 ? \" & \" : \"selected\" }}</span\r\n >\r\n <span *ngIf=\"selectedList?.length > 1\"\r\n >Users\r\n {{ selectedgroupList?.length > 0 ? \" & \" : \"are selected\" }}</span\r\n >\r\n </div>\r\n <button\r\n class=\"counter group vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 vx-ml-2 vx-pl-1 vx-pr-1\"\r\n *ngIf=\"selectedgroupList?.length\"\r\n appPopover\r\n (click)=\"groupCount.popover()\"\r\n placement=\"left\"\r\n >\r\n {{ selectedgroupList?.length }}\r\n </button>\r\n <div class=\"name vx-fs-12 vx-paragraph-txt vx-ml-2\">\r\n <span *ngIf=\"selectedgroupList?.length === 1\"\r\n >User Group selected</span\r\n >\r\n <span *ngIf=\"selectedgroupList?.length > 1\"\r\n >User Groups selected</span\r\n >\r\n </div>\r\n\r\n <app-popover #userCount [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let element of selectedList\">\r\n <div class=\"avatar-card\">\r\n <span\r\n class=\"value\"\r\n [arTooltip]=\"element.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >\r\n <i\r\n class=\"icons cross-icon\"\r\n (click)=\"selectElement(element)\"\r\n *ngIf=\"\r\n !listDetails.nonRemovableUsersList.includes(\r\n element?.member_id\r\n )\r\n \"\r\n >&#xe90d;</i\r\n >\r\n {{ element.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n\r\n <app-popover #groupCount [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let element of selectedgroupList\">\r\n <div class=\"avatar-card\">\r\n <span\r\n class=\"value\"\r\n [arTooltip]=\"element?.group_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >\r\n <i\r\n class=\"icons cross-icon\"\r\n (click)=\"selectGroupElement(element)\"\r\n >&#xe90d;</i\r\n >\r\n {{ element?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n\r\n <div class=\"right vx-d-flex vx-align-center\">\r\n <button class=\"cancel\" (click)=\"closeUserList.emit()\">Cancel</button>\r\n <button [disabled]=\"false\" (click)=\"onSubmit()\">\r\n Next <i class=\"icons\">&#xe91e;</i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"user-list-footer\" *ngIf=\"!groupsEnabled\">\r\n <app-dashboard-footer\r\n [footerDetails]=\"footerDetails\"\r\n (cancelEvent)=\"closeUserList.emit(); paginationService.reset()\"\r\n (deleteEvent)=\"selectElement($event)\"\r\n (submitEvent)=\"onSubmit()\"\r\n [userButtonColor]=\"'greenBg'\"\r\n ></app-dashboard-footer>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::ng-deep .user-list{background:#fff;border-right:1px solid #F1F1F1;position:fixed;inset:0 500px 0 0}::ng-deep .user-list-head{background:#fbfbfb;height:2.75rem;border-bottom:1px solid #f1f1f1}::ng-deep .user-list-body{height:calc(100vh - 2.75rem);padding:2rem;position:relative}::ng-deep .user-list-body-top{display:flex;justify-content:space-between;padding:0 0 16px}::ng-deep .user-list-body-top app-cs-checkbox{display:flex}::ng-deep .user-list-body-top app-cs-checkbox label span.value{margin-left:9px!important}::ng-deep .user-list-body-top app-cs-checkbox label span.value strong{color:#161b2f;font-size:12px;font-weight:600;white-space:nowrap}::ng-deep .user-list-body .selection-list{height:calc(100vh - 16rem);overflow:hidden;overflow-y:auto}::ng-deep .user-list-body .selection-list::-webkit-scrollbar-track{background:transparent}::ng-deep .user-list-body .selection-list.with-pagination{height:calc(100vh - 18rem)}::ng-deep .user-list-body .selection-list.with-group{height:calc(100vh - 18.1rem)}::ng-deep .user-list-body .selection-list.with-group.with-pagination{height:calc(100vh - 20.1rem)}::ng-deep .user-list-body .selection-list.with-group.with-noData{height:calc(100vh - 16.1rem)}::ng-deep .user-list-body .selection-list ul{padding:0;margin:0;display:flex;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-list-body .selection-list ul li{width:50%;padding:0 20px 4px 0;margin-bottom:12px;list-style:none}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox,::ng-deep .user-list-body .selection-list ul li app-cs-radio{display:flex}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label,::ng-deep .user-list-body .selection-list ul li app-cs-radio label{width:100%}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value{width:auto;justify-content:flex-start;flex-wrap:wrap;margin-left:8px!important;color:#161b2f!important;font-size:12px!important}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.name,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.name{color:#161b2f;font-weight:400;line-height:20px;display:block;width:100%;font-size:13px}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position{border-radius:2px;display:inline-flex;height:12px;align-items:center;padding:0 2px;text-transform:uppercase;font-size:9px;line-height:12px;font-weight:500}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.admin,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.admin{background:#fff9e6;color:#f2bf19}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.key-admin,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.key-admin{background:#dff2e1;color:#34aa44}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.manager,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.manager{background:#d4e2fc;color:#4681ef}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.executive,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.executive{color:#747576;background:#f1f1f1}::ng-deep .user-list-body .pagination-box app-pagination .pagination-box{margin-bottom:.5rem!important}::ng-deep .user-list-body .list-of-user app-no-data .no-data-wrapper{height:calc(100vh - 16.125rem)}::ng-deep .user-list-search{position:relative}::ng-deep .user-list-search input{height:2.75rem;line-height:1.5rem;padding:.5rem 1rem .5rem 2.5rem;outline:none;border:1px solid #7475763f;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .user-list-search input:focus{border-color:#1e5dd3}::ng-deep .user-list-search i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .user-list-tab{border-bottom:1px solid #dbdbdb}::ng-deep .user-list-tab button.tab-btn{background:transparent;border-radius:0;border:none;border-bottom:3px solid transparent;margin-right:1.75rem!important;padding-bottom:6px!important}::ng-deep .user-list-tab button.tab-btn span{border-radius:1.25rem;color:#74757680;min-width:1.5rem}::ng-deep .user-list-tab button.active{pointer-events:none}::ng-deep .user-list-tab button.active.tab-btn{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .user-list-tab button.active.tab-btn span{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .user-list-mid{width:calc(100% + .75rem);height:calc(100vh - 15.6rem);overflow:auto;padding-right:.75rem}::ng-deep .user-list-mid::-webkit-scrollbar-track{background-color:#fff}::ng-deep .user-list-mid.with-pagination{height:calc(100vh - 17.6rem)}::ng-deep .user-list-mid .user-list-select{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .user-list-mid .user-list-select app-cs-checkbox,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate{display:flex}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item .checkbox,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item .checkmark,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span.value,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span.value{color:#747576!important;font-size:11px!important;font-weight:600!important;text-transform:uppercase!important;width:100%}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span.value .user-name,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-list-mid .user-list-item ul{list-style-type:none;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-list-mid .user-list-item ul li{width:50%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox{width:calc(100% - 4.5rem);display:flex}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value{color:#161b2f!important;font-size:12px!important;width:100%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .user-name .group-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 40px)}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .counter{background:#f1f1f1;border-radius:.125rem;color:#042e7d;margin-left:.5rem!important}::ng-deep .user-list-mid app-no-data .no-data-wrapper{height:calc(100vh - 15.625rem)}::ng-deep .user-floating-bar-container{height:48px;border-radius:4px;box-shadow:0 6px 12px #4681ef26;border:1px solid #f8f8f8;padding:8px 12px;position:relative;background:#fff;width:100%}::ng-deep .user-floating-bar-container .left .counter{background:#34aa44;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem}::ng-deep .user-floating-bar-container .left .counter.group{background:#1e5dd3}::ng-deep .user-floating-bar-container .right{display:flex;align-items:center}::ng-deep .user-floating-bar-container .right button{border-radius:2px;height:24px;background:#1e5dd3!important;display:flex;justify-content:center;align-items:center;cursor:pointer;color:#fff!important;text-transform:uppercase;font-size:11px;font-weight:500;border:none!important;padding:0 8px;margin:0 0 0 8px}::ng-deep .user-floating-bar-container .right button i{margin-left:8px;font-size:11px}::ng-deep .user-floating-bar-container .right button:disabled{filter:unset;background:#f1f1f1!important;color:#747576!important;opacity:1;pointer-events:none}::ng-deep .user-floating-bar-container .right button.cancel{background:transparent!important;color:#eb2424!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.CsCheckboxComponent, selector: "app-cs-checkbox", inputs: ["disabled", "ngValue", "value"], outputs: ["ngValueChange"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.ToolTipDirective, selector: "[arTooltip]", inputs: ["arTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i7.DashboardFooterComponent, selector: "app-dashboard-footer", inputs: ["footerDetails", "userButtonColor"], outputs: ["cancelEvent", "submitEvent", "deleteEvent"] }, { kind: "component", type: i8.PaginationComponent, selector: "app-pagination", inputs: ["totalPages", "limit", "totalList"], outputs: ["paginationFilter"] }, { kind: "component", type: i9.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"], outputs: ["closedOnOverlay"] }, { kind: "directive", type: i10.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "component", type: i11.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i12.NoDataComponent, selector: "app-no-data", inputs: ["action", "noDataImage", "noDataText", "noDataButton", "noDataSecButton", "altText", "smallButton", "buttonIcon", "iconClass"], outputs: ["buttonAction"] }] });
417
+ }
418
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserListComponent, decorators: [{
419
+ type: Component,
420
+ args: [{ selector: 'app-user-list', template: "<div class=\"user-list\" [class.animate-slideInRight]=\"animation\">\r\n <div\r\n class=\"user-list-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\"\r\n >\r\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">\r\n Who can view this dashboard?\r\n </div>\r\n </div>\r\n <div class=\"user-list-body\">\r\n <div\r\n class=\"user-list-tab vx-d-flex vx-align-center vx-mb-2\"\r\n *ngIf=\"groupsEnabled\"\r\n >\r\n <button\r\n (click)=\"switchTab('USER')\"\r\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\r\n [class.active]=\"currentTab === 'USER'\"\r\n >\r\n USERS\r\n <span\r\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\r\n >{{ totalList }}</span\r\n >\r\n </button>\r\n <button\r\n id=\"switchtab\"\r\n (click)=\"switchTab('GROUP')\"\r\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\r\n [class.active]=\"currentTab === 'GROUP'\"\r\n >\r\n USER GROUPS\r\n <span\r\n id=\"groupscount\"\r\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\r\n >{{ totalgroups }}</span\r\n >\r\n </button>\r\n </div>\r\n\r\n <div class=\"user-list-search vx-mb-2\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"searchValue\"\r\n placeholder=\"{{\r\n currentTab === 'USER' ? 'Search User(s)' : 'Search User Group(s)'\r\n }} who can view this dashboard\"\r\n (keyup.enter)=\"setSearchValue()\"\r\n (focusout)=\"setSearchValue()\"\r\n />\r\n </div>\r\n\r\n <ng-container *ngIf=\"currentTab === 'USER'\">\r\n <div\r\n class=\"vx-d-flex vx-align-center vx-justify-end\"\r\n *ngIf=\"totalPages > 1\"\r\n >\r\n <div\r\n class=\"pagination-box\"\r\n *ngIf=\"totalPages > 1 && searchList.length > 1\"\r\n >\r\n <app-pagination\r\n (paginationFilter)=\"paginationFilter($event)\"\r\n [limit]=\"limit\"\r\n [totalPages]=\"totalPages\"\r\n [totalList]=\"totalList\"\r\n ></app-pagination>\r\n </div>\r\n </div>\r\n <div class=\"user-list-body-top\" *ngIf=\"searchList.length !== 0\">\r\n <app-cs-checkbox\r\n *ngIf=\"!searchValue && searchList.length > 1\"\r\n [ngValue]=\"selectedList.length == totalList\"\r\n (ngValueChange)=\"selectAllUsers($event)\"\r\n >\r\n <strong>{{\r\n selectedList.length == totalList ? \"Deselect All\" : \"Select All\"\r\n }}</strong>\r\n </app-cs-checkbox>\r\n <app-cs-checkbox\r\n *ngIf=\"searchValue && searchList.length > 1\"\r\n [ngValue]=\"checkSelectAll()\"\r\n (ngValueChange)=\"selectAll($event)\"\r\n >\r\n <strong>{{\r\n selectedList.length == totalList ? \"Deselect All\" : \"Select All\"\r\n }}</strong>\r\n </app-cs-checkbox>\r\n </div>\r\n <div class=\"list-of-user\">\r\n <div\r\n class=\"selection-list vx-mb-4\"\r\n [class.with-group]=\"groupsEnabled\"\r\n [class.with-noData]=\"searchList.length == 0\"\r\n [class.with-pagination]=\"totalPages > 1 && searchList.length > 1\"\r\n >\r\n <ul *ngIf=\"searchList.length !== 0\">\r\n <li *ngFor=\"let data of searchList; let i = index\">\r\n <app-cs-checkbox\r\n [disabled]=\"\r\n listDetails.nonRemovableUsersList.includes(\r\n data[listDetails.elementIdKey]\r\n )\r\n \"\r\n [ngValue]=\"\r\n selectedList.length > 0 &&\r\n selectedIds.includes(data[listDetails.elementIdKey])\r\n \"\r\n (ngValueChange)=\"selectElement(data)\"\r\n [arTooltip]=\"data[listDetails.tooltipKey]\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >{{ data[listDetails.displayElementKey] }}</app-cs-checkbox\r\n >\r\n </li>\r\n </ul>\r\n\r\n <app-no-data\r\n *ngIf=\"!vLoader && searchList.length == 0\"\r\n [noDataImage]=\"ASSETS.search_data\"\r\n [noDataText]=\"'No data to display'\"\r\n ></app-no-data>\r\n </div>\r\n\r\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"currentTab === 'GROUP' && groupsEnabled\">\r\n <ng-container *ngIf=\"groupdata as groups\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-end\" *ngIf=\"true\">\r\n <div class=\"pagination-box\" *ngIf=\"total_group_pages > 1\">\r\n <app-pagination\r\n (paginationFilter)=\"paginationFilter($event)\"\r\n [limit]=\"limit\"\r\n [totalPages]=\"total_group_pages\"\r\n [totalList]=\"totalgroups\"\r\n ></app-pagination>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"true\">\r\n <div\r\n class=\"user-list-mid vx-mb-4\"\r\n [class.with-pagination]=\"total_group_pages > 1\"\r\n >\r\n <ng-container *ngIf=\"groups?.length > 0\">\r\n <div class=\"user-list-select vx-mb-4\">\r\n <app-cs-checkbox\r\n [disabled]=\"false\"\r\n *ngIf=\"!searchValue && groups.length > 1\"\r\n [ngValue]=\"selectedgroupList.length == totalgroups\"\r\n (ngValueChange)=\"selectAllGroups($event)\"\r\n >\r\n <div\r\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\r\n >\r\n {{\r\n selectedgroupList.length == totalgroups\r\n ? \"Deselect All\"\r\n : \"Select All\"\r\n }}\r\n </div>\r\n </app-cs-checkbox>\r\n <app-cs-checkbox\r\n [disabled]=\"false\"\r\n *ngIf=\"searchValue && groups.length > 1\"\r\n [ngValue]=\"checkSelectAllGroups()\"\r\n (ngValueChange)=\"selectAllsearchgroups($event)\"\r\n >\r\n <div\r\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\r\n >\r\n {{\r\n selectedgroupList.length == totalgroups\r\n ? \"Deselect All\"\r\n : \"Select All\"\r\n }}\r\n </div>\r\n </app-cs-checkbox>\r\n </div>\r\n <div class=\"user-list-item\">\r\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\r\n <li\r\n class=\"vx-mb-4\"\r\n *ngFor=\"let data of groups; let i = index\"\r\n >\r\n <app-cs-checkbox\r\n (ngValueChange)=\"selectGroupElement(data)\"\r\n [disabled]=\"false\"\r\n [ngValue]=\"\r\n selectedgroupList.length > 0 &&\r\n selectedGroupIds.includes(data[listDetails.groupIdkey])\r\n \"\r\n >\r\n <div class=\"user-name vx-d-flex vx-align-center\">\r\n <div\r\n class=\"group-name\"\r\n [arTooltip]=\"data[listDetails.displayGroupKey]\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >\r\n {{ data[listDetails.displayGroupKey] }}\r\n </div>\r\n <span\r\n id=\"usersofgroup\"\r\n class=\"counter vx-fs-9 vx-fw-600 vx-pl-1 vx-pr-1 vx-lh-3 vx-tt-uppercase vx-ml-2\"\r\n >{{ data[\"associatedUsers\"].length }}\r\n {{\r\n data[\"associatedUsers\"].length > 1\r\n ? \"USERS\"\r\n : \"USER\"\r\n }}</span\r\n >\r\n </div>\r\n </app-cs-checkbox>\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"groups?.length == 0 && !vLoaderGroups\">\r\n <app-no-data\r\n [noDataImage]=\"ASSETS.search_data\"\r\n [noDataText]=\"\r\n (searchValue?.length > 0\r\n ? 'No match found.'\r\n : 'No data to display.'\r\n )\r\n \"\r\n ></app-no-data>\r\n </ng-container>\r\n <app-loader-inline *ngIf=\"vLoaderGroups\"></app-loader-inline>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"user-floating-bar\" *ngIf=\"groupsEnabled\">\r\n <div\r\n class=\"user-floating-bar-container vx-d-flex vx-align-center vx-justify-between\"\r\n >\r\n <div class=\"left vx-d-flex vx-align-center\">\r\n <button\r\n class=\"counter vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 vx-m-0 vx-pl-1 vx-pr-1\"\r\n *ngIf=\"selectedList?.length\"\r\n appPopover\r\n (click)=\"userCount.popover()\"\r\n placement=\"left\"\r\n >\r\n {{ selectedList?.length }}\r\n </button>\r\n <div class=\"name vx-fs-12 vx-paragraph-txt vx-ml-2\">\r\n <span *ngIf=\"selectedList?.length === 1\"\r\n >User\r\n {{ selectedgroupList?.length > 0 ? \" & \" : \"selected\" }}</span\r\n >\r\n <span *ngIf=\"selectedList?.length > 1\"\r\n >Users\r\n {{ selectedgroupList?.length > 0 ? \" & \" : \"are selected\" }}</span\r\n >\r\n </div>\r\n <button\r\n class=\"counter group vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 vx-ml-2 vx-pl-1 vx-pr-1\"\r\n *ngIf=\"selectedgroupList?.length\"\r\n appPopover\r\n (click)=\"groupCount.popover()\"\r\n placement=\"left\"\r\n >\r\n {{ selectedgroupList?.length }}\r\n </button>\r\n <div class=\"name vx-fs-12 vx-paragraph-txt vx-ml-2\">\r\n <span *ngIf=\"selectedgroupList?.length === 1\"\r\n >User Group selected</span\r\n >\r\n <span *ngIf=\"selectedgroupList?.length > 1\"\r\n >User Groups selected</span\r\n >\r\n </div>\r\n\r\n <app-popover #userCount [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let element of selectedList\">\r\n <div class=\"avatar-card\">\r\n <span\r\n class=\"value\"\r\n [arTooltip]=\"element.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >\r\n <i\r\n class=\"icons cross-icon\"\r\n (click)=\"selectElement(element)\"\r\n *ngIf=\"\r\n !listDetails.nonRemovableUsersList.includes(\r\n element?.member_id\r\n )\r\n \"\r\n >&#xe90d;</i\r\n >\r\n {{ element.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n\r\n <app-popover #groupCount [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let element of selectedgroupList\">\r\n <div class=\"avatar-card\">\r\n <span\r\n class=\"value\"\r\n [arTooltip]=\"element?.group_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >\r\n <i\r\n class=\"icons cross-icon\"\r\n (click)=\"selectGroupElement(element)\"\r\n >&#xe90d;</i\r\n >\r\n {{ element?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n\r\n <div class=\"right vx-d-flex vx-align-center\">\r\n <button class=\"cancel\" (click)=\"closeUserList.emit()\">Cancel</button>\r\n <button [disabled]=\"false\" (click)=\"onSubmit()\">\r\n Next <i class=\"icons\">&#xe91e;</i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"user-list-footer\" *ngIf=\"!groupsEnabled\">\r\n <app-dashboard-footer\r\n [footerDetails]=\"footerDetails\"\r\n (cancelEvent)=\"closeUserList.emit(); paginationService.reset()\"\r\n (deleteEvent)=\"selectElement($event)\"\r\n (submitEvent)=\"onSubmit()\"\r\n [userButtonColor]=\"'greenBg'\"\r\n ></app-dashboard-footer>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::ng-deep .user-list{background:#fff;border-right:1px solid #F1F1F1;position:fixed;inset:0 500px 0 0}::ng-deep .user-list-head{background:#fbfbfb;height:2.75rem;border-bottom:1px solid #f1f1f1}::ng-deep .user-list-body{height:calc(100vh - 2.75rem);padding:2rem;position:relative}::ng-deep .user-list-body-top{display:flex;justify-content:space-between;padding:0 0 16px}::ng-deep .user-list-body-top app-cs-checkbox{display:flex}::ng-deep .user-list-body-top app-cs-checkbox label span.value{margin-left:9px!important}::ng-deep .user-list-body-top app-cs-checkbox label span.value strong{color:#161b2f;font-size:12px;font-weight:600;white-space:nowrap}::ng-deep .user-list-body .selection-list{height:calc(100vh - 16rem);overflow:hidden;overflow-y:auto}::ng-deep .user-list-body .selection-list::-webkit-scrollbar-track{background:transparent}::ng-deep .user-list-body .selection-list.with-pagination{height:calc(100vh - 18rem)}::ng-deep .user-list-body .selection-list.with-group{height:calc(100vh - 18.1rem)}::ng-deep .user-list-body .selection-list.with-group.with-pagination{height:calc(100vh - 20.1rem)}::ng-deep .user-list-body .selection-list.with-group.with-noData{height:calc(100vh - 16.1rem)}::ng-deep .user-list-body .selection-list ul{padding:0;margin:0;display:flex;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-list-body .selection-list ul li{width:50%;padding:0 20px 4px 0;margin-bottom:12px;list-style:none}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox,::ng-deep .user-list-body .selection-list ul li app-cs-radio{display:flex}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label,::ng-deep .user-list-body .selection-list ul li app-cs-radio label{width:100%}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value{width:auto;justify-content:flex-start;flex-wrap:wrap;margin-left:8px!important;color:#161b2f!important;font-size:12px!important}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.name,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.name{color:#161b2f;font-weight:400;line-height:20px;display:block;width:100%;font-size:13px}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position{border-radius:2px;display:inline-flex;height:12px;align-items:center;padding:0 2px;text-transform:uppercase;font-size:9px;line-height:12px;font-weight:500}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.admin,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.admin{background:#fff9e6;color:#f2bf19}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.key-admin,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.key-admin{background:#dff2e1;color:#34aa44}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.manager,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.manager{background:#d4e2fc;color:#4681ef}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.executive,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.executive{color:#747576;background:#f1f1f1}::ng-deep .user-list-body .pagination-box app-pagination .pagination-box{margin-bottom:.5rem!important}::ng-deep .user-list-body .list-of-user app-no-data .no-data-wrapper{height:calc(100vh - 16.125rem)}::ng-deep .user-list-search{position:relative}::ng-deep .user-list-search input{height:2.75rem;line-height:1.5rem;padding:.5rem 1rem .5rem 2.5rem;outline:none;border:1px solid #7475763f;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .user-list-search input:focus{border-color:#1e5dd3}::ng-deep .user-list-search i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .user-list-tab{border-bottom:1px solid #dbdbdb}::ng-deep .user-list-tab button.tab-btn{background:transparent;border-radius:0;border:none;border-bottom:3px solid transparent;margin-right:1.75rem!important;padding-bottom:6px!important}::ng-deep .user-list-tab button.tab-btn span{border-radius:1.25rem;color:#74757680;min-width:1.5rem}::ng-deep .user-list-tab button.active{pointer-events:none}::ng-deep .user-list-tab button.active.tab-btn{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .user-list-tab button.active.tab-btn span{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .user-list-mid{width:calc(100% + .75rem);height:calc(100vh - 15.6rem);overflow:auto;padding-right:.75rem}::ng-deep .user-list-mid::-webkit-scrollbar-track{background-color:#fff}::ng-deep .user-list-mid.with-pagination{height:calc(100vh - 17.6rem)}::ng-deep .user-list-mid .user-list-select{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .user-list-mid .user-list-select app-cs-checkbox,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate{display:flex}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item .checkbox,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item .checkmark,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span.value,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span.value{color:#747576!important;font-size:11px!important;font-weight:600!important;text-transform:uppercase!important;width:100%}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span.value .user-name,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-list-mid .user-list-item ul{list-style-type:none;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-list-mid .user-list-item ul li{width:50%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox{width:calc(100% - 4.5rem);display:flex}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value{color:#161b2f!important;font-size:12px!important;width:100%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .user-name .group-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 40px)}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .counter{background:#f1f1f1;border-radius:.125rem;color:#042e7d;margin-left:.5rem!important}::ng-deep .user-list-mid app-no-data .no-data-wrapper{height:calc(100vh - 15.625rem)}::ng-deep .user-floating-bar-container{height:48px;border-radius:4px;box-shadow:0 6px 12px #4681ef26;border:1px solid #f8f8f8;padding:8px 12px;position:relative;background:#fff;width:100%}::ng-deep .user-floating-bar-container .left .counter{background:#34aa44;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem}::ng-deep .user-floating-bar-container .left .counter.group{background:#1e5dd3}::ng-deep .user-floating-bar-container .right{display:flex;align-items:center}::ng-deep .user-floating-bar-container .right button{border-radius:2px;height:24px;background:#1e5dd3!important;display:flex;justify-content:center;align-items:center;cursor:pointer;color:#fff!important;text-transform:uppercase;font-size:11px;font-weight:500;border:none!important;padding:0 8px;margin:0 0 0 8px}::ng-deep .user-floating-bar-container .right button i{margin-left:8px;font-size:11px}::ng-deep .user-floating-bar-container .right button:disabled{filter:unset;background:#f1f1f1!important;color:#747576!important;opacity:1;pointer-events:none}::ng-deep .user-floating-bar-container .right button.cancel{background:transparent!important;color:#eb2424!important}\n"] }]
421
+ }], ctorParameters: function () { return [{ type: i1.PaginationService }, { type: i2.CreateDashboardService }]; }, propDecorators: { closeUserList: [{
422
+ type: Output
423
+ }], saveSelectedUsers: [{
424
+ type: Output
425
+ }], selectionType: [{
426
+ type: Input
427
+ }], listDetails: [{
428
+ type: Input
429
+ }], totalPages: [{
430
+ type: Input
431
+ }], limit: [{
432
+ type: Input
433
+ }], totalList: [{
434
+ type: Input
435
+ }], feature: [{
436
+ type: Input
437
+ }], totalgroupscount: [{
438
+ type: Input
439
+ }] } });
440
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyZWF0ZS1kYXNoYm9hcmQvc3JjL2xpYi9jcmVhdGUtZGFzaGJvYXJkLWNvbnRhaW5lci91c2VyLWxpc3QvdXNlci1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyZWF0ZS1kYXNoYm9hcmQvc3JjL2xpYi9jcmVhdGUtZGFzaGJvYXJkLWNvbnRhaW5lci91c2VyLWxpc3QvdXNlci1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFPdEQsTUFBTSxPQUFPLGlCQUFpQjtJQWtEbkI7SUFDQztJQWxEQSxhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNuQyxpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3hDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDbkIsV0FBVyxHQUEwQjtRQUM1QyxpQkFBaUIsRUFBRSxFQUFFO1FBQ3JCLGVBQWUsRUFBRSxFQUFFO1FBQ25CLFVBQVUsRUFBRSxFQUFFO1FBQ2QsWUFBWSxFQUFFLEVBQUU7UUFDaEIsVUFBVSxFQUFFLEVBQUU7UUFDZCxpQkFBaUIsRUFBRSxFQUFFO1FBQ3JCLGlCQUFpQixFQUFFLEVBQUU7UUFDckIscUJBQXFCLEVBQUUsRUFBRTtLQUMxQixDQUFDO0lBRUYsYUFBYSxHQUEwQjtRQUNyQyxZQUFZLEVBQUUsRUFBRTtRQUNoQixnQkFBZ0IsRUFBRSxFQUFFO1FBQ3BCLGlC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QXlCLENBQUMsR0FBUTtRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDckUsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO1lBQ25DLElBQUksR0FBRyxDQUFDLGFBQWEsSUFBSSxHQUFHLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO2FBQ25DO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQXpjVSxpQkFBaUI7NEZBQWpCLGlCQUFpQixtV0NiOUIsNHdjQXNXQTs7NEZEelZhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlOzZJQUtmLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNFLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkEwQkcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXNoYm9hcmRGb290ZXJDb25maWcgfSBmcm9tICcuLi8uLi91aS1raXQvZGFzaGJvYXJkLWZvb3Rlci9kYXNoYm9hcmQtZm9vdGVyLWNvbmZpZyc7XHJcbmltcG9ydCB7IENyZWF0ZURhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jcmVhdGUtZGFzaGJvYXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYWdpbmF0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BhZ2luYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJMaXN0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vdXNlci1saXN0LmNvbmZpZyc7XHJcbmltcG9ydCB7IEFTU0VUUyB9IGZyb20gJy4uL2NvbnN0YW50cy9hc3NldHMuY29uc3RhbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdXNlci1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91c2VyLWxpc3QuY29tcG9uZW50Lmxlc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAT3V0cHV0KCkgY2xvc2VVc2VyTGlzdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2F2ZVNlbGVjdGVkVXNlcnMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQElucHV0KCkgc2VsZWN0aW9uVHlwZSA9ICcnO1xyXG4gIEBJbnB1dCgpIGxpc3REZXRhaWxzOiBVc2VyTGlzdENvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICBkaXNwbGF5RWxlbWVudEtleTogJycsXHJcbiAgICBkaXNwbGF5R3JvdXBLZXk6ICcnLFxyXG4gICAgZ3JvdXBJZGtleTogJycsXHJcbiAgICBlbGVtZW50SWRLZXk6ICcnLFxyXG4gICAgdG9vbHRpcEtleTogJycsXHJcbiAgICBzZWxlY3RlZFVzZXJzTGlzdDogW10sXHJcbiAgICBzZWxlY3RlZEdyb3VwTGlzdDogW10sXHJcbiAgICBub25SZW1vdmFibGVVc2Vyc0xpc3Q6IFtdLFxyXG4gIH07XHJcblxyXG4gIGZvb3RlckRldGFpbHM6IERhc2hib2FyZEZvb3RlckNvbmZpZyA9IHtcclxuICAgIHNlbGVjdGVkRGF0YTogW10sXHJcbiAgICBub25SZW1vdmFibGVMaXN0OiBbXSxcclxuICAgIGRpc3BsYXlFbGVtZW50S2V5OiAnJyxcclxuICAgIGVsZW1lbnRJZDogJycsXHJcbiAgICBzaW5ndWxhclRleHQ6ICdVc2VyIHNlbGVjdGVkJyxcclxuICAgIHBsdXJhbFRleHQ6ICdVc2VycyBzZWxlY3RlZCcsXHJcbiAgICBzaG93RnJlcXVlbmN5OiBmYWxzZSxcclxuICAgIGZyZXF1ZW5jeVRleHQ6ICcnLFxyXG4gICAgaXNEaXNhYmxlZDogZmFsc2UsXHJcbiAgfTtcclxuICB2TG9hZGVyID0gZmFsc2U7XHJcbiAgdkxvYWRlckdyb3VwcyA9IGZhbHNlO1xyXG4gIEFTU0VUUyA9IEFTU0VUUztcclxuXHJcbiAgQElucHV0KCkgdG90YWxQYWdlcyA9IDE7XHJcbiAgQElucHV0KCkgbGltaXQgPSAxO1xyXG4gIEBJbnB1dCgpIHRvdGFsTGlzdCA9IDE7XHJcbiAgQElucHV0KCkgZmVhdHVyZTogYW55O1xyXG4gIEBJbnB1dCgpIHRvdGFsZ3JvdXBzY291bnQ6IGFueTtcclxuICBzZWFyY2hMaXN0ID0gW107XHJcbiAgc2VhcmNoVmFsdWUgPSAnJztcclxuICBzZWFyY2hGaWx0ZXIgPSAnJztcclxuICBzZWxlY3RlZElkczogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZExpc3Q6IGFueVtdID0gW107XHJcbiAgZ3JvdXBkYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuICBhbmltYXRpb24gPSB0cnVlO1xyXG4gIHRvdGFsZ3JvdXBzOiBhbnk7XHJcbiAgdG90YWxfZ3JvdXBfcGFnZXM6IGFueTtcclxuICBzZWxlY3RlZEdyb3VwSWRzOiBhbnlbXSA9IFtdO1xyXG4gIGdyb3Vwc0VuYWJsZWQ6IGFueTtcclxuICBzZWxlY3RlZGdyb3VwTGlzdDogYW55W10gPSBbXTtcclxuICBjdXJyZW50UGFnZSA9IDE7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBDcmVhdGVEYXNoYm9hcmRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnJlc2V0KCk7XHJcbiAgICB0aGlzLmdldE9yZ2FuaXphdGlvblVzZXJzQ291bnQoJycpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBzRW5hYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLmFuaW1hdGlvbiA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hbmltYXRpb24gPSBmYWxzZTtcclxuICAgIH0sIDMwMCk7XHJcbiAgICBpZiAodGhpcy5saXN0RGV0YWlscy5zZWxlY3RlZFVzZXJzTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gWy4uLm5ldyBTZXQodGhpcy5saXN0RGV0YWlscy5zZWxlY3RlZFVzZXJzTGlzdCldO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZERhdGEgPSBbLi4ubmV3IFNldCh0aGlzLmxpc3REZXRhaWxzLnNlbGVjdGVkVXNlcnNMaXN0KV07XHJcbiAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSBzZWxlY3RlZERhdGE7XHJcbiAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5ub25SZW1vdmFibGVMaXN0ID1cclxuICAgICAgICB0aGlzLmxpc3REZXRhaWxzLm5vblJlbW92YWJsZVVzZXJzTGlzdDtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IHNlbGVjdGVkRGF0YS5tYXAoKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGVsZVt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0pIHtcclxuICAgICAgICAgIHJldHVybiBlbGVbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldFVzZXJzTGlzdCh7XHJcbiAgICAgIC8vIHA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgPT09IDEgPyAnJyA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UsXHJcbiAgICAgIHA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgPz8gMSxcclxuICAgICAgdHlwZTogJycsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZm9vdGVyRGV0YWlscy5kaXNwbGF5RWxlbWVudEtleSA9IHRoaXMubGlzdERldGFpbHMuZGlzcGxheUVsZW1lbnRLZXk7XHJcbiAgICB0aGlzLmZvb3RlckRldGFpbHMuZWxlbWVudElkID0gdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXk7XHJcbiAgICBpZiAodGhpcy5ncm91cHNFbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCh7fSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5saXN0RGV0YWlscy5zZWxlY3RlZEdyb3VwTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRncm91cExpc3QgPSBbLi4ubmV3IFNldCh0aGlzLmxpc3REZXRhaWxzLnNlbGVjdGVkR3JvdXBMaXN0KV07XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IFsuLi5uZXcgU2V0KHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRHcm91cExpc3QpXTtcclxuICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHNlbGVjdGVkRGF0YTtcclxuICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLm5vblJlbW92YWJsZUxpc3QgPVxyXG4gICAgICAgIHRoaXMubGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0O1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMgPSBzZWxlY3RlZERhdGEubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlbGVbdGhpcy5saXN0RGV0YWlscy5ncm91cElka2V5XSkge1xyXG4gICAgICAgICAgcmV0dXJuIGVsZVt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5jZWxDaGFuZ2VzKCkge31cclxuICByZW1vdmVFbGVtZW50KGV2ZW50OiBhbnkpIHt9XHJcbiAgc3VibWl0Q2hhbmdlcygpIHt9XHJcbiAgc2VsZWN0QWxsKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICB0aGlzLnNlYXJjaExpc3QuZm9yRWFjaCgoc2VhcmNoRWxlbWVudCkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLnNlbGVjdGVkSWRzLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICBzZWFyY2hFbGVtZW50W3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QucHVzaChzZWFyY2hFbGVtZW50KTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChzZWFyY2hFbGVtZW50W3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XSk7XHJcbiAgICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gdGhpcy5zZWxlY3RlZExpc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoTGlzdC5mb3JFYWNoKChzZWFyY2hFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIXRoaXMubGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LmluY2x1ZGVzKFxyXG4gICAgICAgICAgICBzZWFyY2hFbGVtZW50W3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkTGlzdC5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgIChlbGUpID0+XHJcbiAgICAgICAgICAgICAgZWxlW3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XSA9PT1cclxuICAgICAgICAgICAgICBzZWFyY2hFbGVtZW50W3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZExpc3QgPSBbLi4udGhpcy5zZWxlY3RlZExpc3RdO1xyXG4gICAgICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWRMaXN0O1xyXG5cclxuICAgICAgICAgIGNvbnN0IGlkSW5kZXggPSB0aGlzLnNlbGVjdGVkSWRzLmZpbmRJbmRleChcclxuICAgICAgICAgICAgKGVsZSkgPT4gZWxlID09PSBzZWFyY2hFbGVtZW50W3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuc3BsaWNlKGlkSW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3RzIGFsbCBhZG1pbnMgYW5kIG1hbmFnZXJzIGF0IG9uY2UgYnkgbWFraW5nIGFwaSBjYWxsLlxyXG4gICAqIEBwYXJhbSBldmVudCBjb25zaXN0cyBib29sZWFuIHZhbHVlIHRvIHNlbGVjdCBvZiB1bnNlbGVjdC5cclxuICAgKi9cclxuICBzZWxlY3RBbGxVc2VycyhldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgdGhpcy52TG9hZGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldEFsbFVzZXJzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgcmVzLmZvckVhY2goKHNlYXJjaEVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIXRoaXMuc2VsZWN0ZWRJZHMuaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hFbGVtZW50W3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QucHVzaChzZWFyY2hFbGVtZW50KTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hFbGVtZW50W3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWRMaXN0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWREYXRhID0gWy4uLm5ldyBTZXQodGhpcy5zZWxlY3RlZExpc3QpXTtcclxuICAgICAgY29uc3QgaW5kZXggPSBzZWxlY3RlZERhdGEuZmluZEluZGV4KFxyXG4gICAgICAgIChlbGUpID0+XHJcbiAgICAgICAgICBlbGVbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldID09PVxyXG4gICAgICAgICAgdGhpcy5saXN0RGV0YWlscy5ub25SZW1vdmFibGVVc2Vyc0xpc3RbMF1cclxuICAgICAgKTtcclxuICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgY29uc3Qgb3duZXIgPSBPYmplY3QuYXNzaWduKHNlbGVjdGVkRGF0YVtpbmRleF0pO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0LnB1c2gob3duZXIpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChvd25lci5tZW1iZXJfaWQpO1xyXG4gICAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSB0aGlzLnNlbGVjdGVkTGlzdDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdEFsbEdyb3VwcyhldmVudDogYW55KSB7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2ZldGNoX2FsbCcsIDEpO1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMudkxvYWRlckdyb3VwcyA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRBbGxHcm91cHMocGFyYW1zKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5kYXRhLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIHJlcy5kYXRhLmZvckVhY2goKHNlYXJjaEVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIXRoaXMuc2VsZWN0ZWRHcm91cElkcy5pbmNsdWRlcyhcclxuICAgICAgICAgICAgICAgIHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5ncm91cElka2V5XVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZGdyb3VwTGlzdC5wdXNoKHNlYXJjaEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgc2VhcmNoRWxlbWVudFt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gdGhpcy5zZWxlY3RlZGdyb3VwTGlzdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudkxvYWRlckdyb3VwcyA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRncm91cExpc3QgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWRzID0gW107XHJcbiAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdEFsbHNlYXJjaGdyb3VwcyhldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgdGhpcy5ncm91cGRhdGEuZm9yRWFjaCgoc2VhcmNoRWxlbWVudCkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLnNlbGVjdGVkR3JvdXBJZHMuaW5jbHVkZXMoXHJcbiAgICAgICAgICAgIHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5ncm91cElka2V5XVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZGdyb3VwTGlzdC5wdXNoKHNlYXJjaEVsZW1lbnQpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWRzLnB1c2goXHJcbiAgICAgICAgICAgIHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5ncm91cElka2V5XVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSB0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0ID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcyA9IFtdO1xyXG4gICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3RzIGNoZWNrZWQgaXRlbSBmcm9tIHRoZSBsaXN0LlxyXG4gICAqIEluIGNhc2Ugb2YgdXNlcidzIGxpc3QgY2FsY3VsYXRlcyBudW1iZXIgb2YgYWRtaW5zL21hbmFnZXMgdG8gc2V0IHZpc2liaWxpdHkoZWl0aGVyIHRvIGFsbCBhZG1pbnMvIGFkbWlucyBhbmQgbWFuYWdlcnMpXHJcbiAgICogQHBhcmFtIGRhdGEgaXMgdGhlIHNlbGVjdGVkIGVsZW1lbnRcclxuICAgKi9cclxuICBzZWxlY3RFbGVtZW50KGRhdGE6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJZHMuaW5jbHVkZXMoZGF0YVt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0pKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGhpcy5saXN0RGV0YWlscy5ub25SZW1vdmFibGVVc2Vyc0xpc3QuaW5jbHVkZXMoXHJcbiAgICAgICAgICBkYXRhW3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkTGlzdC5maW5kSW5kZXgoXHJcbiAgICAgICAgICAoZWxlKSA9PlxyXG4gICAgICAgICAgICBlbGVbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldID09PVxyXG4gICAgICAgICAgICBkYXRhW3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gdGhpcy5zZWxlY3RlZExpc3Q7XHJcblxyXG4gICAgICAgIGNvbnN0IGlkSW5kZXggPSB0aGlzLnNlbGVjdGVkSWRzLmZpbmRJbmRleChcclxuICAgICAgICAgIChlbGUpID0+IGVsZSA9PT0gZGF0YVt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnNwbGljZShpZEluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZExpc3QucHVzaChkYXRhKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGRhdGFbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldKTtcclxuICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWRMaXN0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0R3JvdXBFbGVtZW50KGRhdGE6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cElkcy5pbmNsdWRlcyhkYXRhW3RoaXMubGlzdERldGFpbHMuZ3JvdXBJZGtleV0pKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZGdyb3VwTGlzdC5maW5kSW5kZXgoXHJcbiAgICAgICAgKGVsZTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+XHJcbiAgICAgICAgICBlbGVbdGhpcy5saXN0RGV0YWlscy5ncm91cElka2V5XSA9PT0gZGF0YVt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRncm91cExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWRncm91cExpc3Q7XHJcbiAgICAgIGNvbnN0IGlkSW5kZXggPSB0aGlzLnNlbGVjdGVkR3JvdXBJZHMuZmluZEluZGV4KFxyXG4gICAgICAgIChlbGUpID0+IGVsZSA9PT0gZGF0YVt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcy5zcGxpY2UoaWRJbmRleCwgMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0LnB1c2goZGF0YSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcy5wdXNoKGRhdGFbdGhpcy5saXN0RGV0YWlscy5ncm91cElka2V5XSk7XHJcbiAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSB0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0O1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBJdCBpcyB1c2VkIHRvIHNldCBhbmQgc2VhcmNoIHZhbHVlIGluY2FzZSBvZiBiYWNrZW5kIGRyaXZlbiBsaXN0IHRvIGRpZmZlcmVudGlhdGUgc2VhcmNoIGxpc3QgYW5kIG9yaWdpbmFsIGxpc3RcclxuICAgKi9cclxuICBzZXRTZWFyY2hWYWx1ZSgpIHtcclxuICAgIGlmICh0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlICE9PSB0aGlzLnNlYXJjaFZhbHVlKSB7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZTtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uRmlsdGVyKHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogaXQgaXMgdXNlZCBjaGVjayBzZWxlY3QgYWxsIGNvbmRpdGlvbiBpbmNhc2Ugb2YgYmFja2VuZCBkcml2ZW4gc2VhcmNoXHJcbiAgICovXHJcbiAgY2hlY2tTZWxlY3RBbGwoKSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZGF0YTogYm9vbGVhbiA9IHRoaXMuc2VhcmNoTGlzdC5ldmVyeSgoZWxlKSA9PlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuaW5jbHVkZXMoZWxlW3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XSlcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBpdCBpcyB1c2VkIGNoZWNrIHNlbGVjdCBhbGwgZ3JvdXBzIGNvbmRpdGlvbiBpbmNhc2Ugb2YgYmFja2VuZCBkcml2ZW4gc2VhcmNoXHJcbiAgICovXHJcbiAgY2hlY2tTZWxlY3RBbGxHcm91cHMoKSB7XHJcbiAgICBpZiAodGhpcy5ncm91cGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBkYXRhOiBib29sZWFuID0gdGhpcy5ncm91cGRhdGEuZXZlcnkoKGVsZSkgPT5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMuaW5jbHVkZXMoZWxlW3RoaXMubGlzdERldGFpbHMuZ3JvdXBJZGtleV0pXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmlsdGVyIGxpc3QgdXNlcidzIGxpc3QgYmFzZWQgb24gcGFnaW5hdGlvbiBieSBtYWtpbmcgYXBpIGNhbGxcclxuICAgKiBAcGFyYW0gZXZlbnQgc3BlY2lmaWVzIGEgYm9vbGVhbiB2YWx1ZSB0byBjYWxsIGFwaVxyXG4gICAqL1xyXG4gIHBhZ2luYXRpb25GaWx0ZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCFldmVudCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuZ3JvdXBzRW5hYmxlZCkge1xyXG4gICAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5jdXJyZW50VGFiID09ICdVU0VSJykge1xyXG4gICAgICAgIHRoaXMuZ2V0VXNlcnNMaXN0KHtcclxuICAgICAgICAgIC8vIHA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgPT09IDEgPyAnJyA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UsXHJcbiAgICAgICAgICBwOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlID8/IDEsXHJcbiAgICAgICAgICB0eXBlOiAnJyxcclxuICAgICAgICAgIHE6ICF0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlXHJcbiAgICAgICAgICAgID8gJydcclxuICAgICAgICAgICAgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZ2V0T3JnYW5pemF0aW9uVXNlcnNDb3VudCh7XHJcbiAgICAgICAgICBwOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlID8/IDEsXHJcbiAgICAgICAgICB0eXBlOiAnJyxcclxuICAgICAgICAgIHE6ICF0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlXHJcbiAgICAgICAgICAgID8gJydcclxuICAgICAgICAgICAgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCh7XHJcbiAgICAgICAgICBwYWdlOlxyXG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlID09PSAxXHJcbiAgICAgICAgICAgICAgPyAnJ1xyXG4gICAgICAgICAgICAgIDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSxcclxuICAgICAgICAgIGdyb3VwTmFtZTogIXRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWVcclxuICAgICAgICAgICAgPyAnJ1xyXG4gICAgICAgICAgICA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudkxvYWRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuZ2V0VXNlcnNMaXN0KHtcclxuICAgICAgICAvLyBwOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlID09PSAxID8gJycgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlLFxyXG4gICAgICAgIHA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgPz8gMSxcclxuICAgICAgICB0eXBlOiAnJyxcclxuICAgICAgICBxOiAhdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZWFyY2hWYWx1ZVxyXG4gICAgICAgICAgPyAnJ1xyXG4gICAgICAgICAgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5nZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KHtcclxuICAgICAgICBwOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlID8/IDEsXHJcbiAgICAgICAgdHlwZTogJycsXHJcbiAgICAgICAgcTogIXRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWVcclxuICAgICAgICAgID8gJydcclxuICAgICAgICAgIDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZWFyY2hWYWx1ZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdXNlcidzIGxpc3QgIGJ5IG1ha2luZyBhcGkgY2FsbFxyXG4gICAqIEBwYXJhbSB1cmwgY29udGFpbnMgdXNlcmxpc3QgZmlsdGVyIGRldGFpbHNcclxuICAgKi9cclxuICBnZXRVc2Vyc0xpc3QodXJsOiBhbnkpIHtcclxuICAgIHRoaXMudkxvYWRlciA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlXHJcbiAgICAgIC5nZXRPcmdhbml6YXRpb25Vc2Vycyh1cmwgPyB1cmwgOiAnJylcclxuICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hMaXN0ID0gcmVzO1xyXG4gICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgZ2V0R3JvdXBzTGlzdChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnZMb2FkZXJHcm91cHMgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBpZiAoZXZlbnQuaGFzT3duUHJvcGVydHkoJ2dyb3VwTmFtZScpKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2dyb3VwTmFtZScsIGV2ZW50Wydncm91cE5hbWUnXSk7XHJcbiAgICB9XHJcbiAgICBpZiAoZXZlbnQuaGFzT3duUHJvcGVydHkoJ3BhZ2UnKSAmJiAhdGhpcy5zZWFyY2hWYWx1ZSkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwYWdlJywgZXZlbnRbJ3BhZ2UnXSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50b3RhbGdyb3Vwc2NvdW50ID4gMzAgJiYgIXRoaXMuc2VhcmNoVmFsdWUpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnbGltaXQnLCAzMCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0QWxsR3JvdXBzKHBhcmFtcykuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmdyb3VwZGF0YSA9IHJlcz8uZGF0YTtcclxuICAgICAgdGhpcy52TG9hZGVyR3JvdXBzID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudG90YWxncm91cHMgPSByZXMudG90YWxfaXRlbXM7XHJcbiAgICAgIHRoaXMudG90YWxfZ3JvdXBfcGFnZXMgPSByZXMudG90YWxfcGFnZXM7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIG9uIGNsaWNrIG9uIG5leHQgYnV0dG9uIGZyb20gdGhlIGxpc3QsIGl0IGVtaXRzIHRoZSBzZWxlY3RlZCBsaXN0IG9mIGVsZW1lbnRzIHRvIHBhcmVudCBjb21wb25lbnQuXHJcbiAgICovXHJcbiAgb25TdWJtaXQoKSB7XHJcbiAgICAvLyBjb25zdCBkYXRhID0gWy4uLm5ldyBTZXQodGhpcy5zZWxlY3RlZExpc3QpXTtcclxuICAgIC8vIGRhdGEucHVzaCh0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0KVxyXG4gICAgdGhpcy5zYXZlU2VsZWN0ZWRVc2Vycy5lbWl0KHtcclxuICAgICAgdXNlcnM6IHRoaXMuc2VsZWN0ZWRMaXN0LFxyXG4gICAgICBncm91cHM6IHRoaXMuc2VsZWN0ZWRncm91cExpc3QsXHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UucmVzZXQoKTtcclxuICB9XHJcbiAgY3VycmVudFRhYiA9ICdVU0VSJztcclxuICBzd2l0Y2hUYWIodGFiOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UucmVzZXQoKTtcclxuICAgIHRoaXMuZ2V0T3JnYW5pemF0aW9uVXNlcnNDb3VudCgnJyk7XHJcbiAgICB0aGlzLmN1cnJlbnRUYWIgPSB0YWI7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50VGFiID09ICdVU0VSJykge1xyXG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XHJcbiAgICAgIHRoaXMuZ2V0VXNlcnNMaXN0KHsgcDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5nZXRHcm91cHNMaXN0KHt9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE9yZ2FuaXphdGlvblVzZXJzQ291bnQoVXJsOiBhbnkpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KFVybCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgdGhpcy50b3RhbExpc3QgPSByZXMudG90YWxfbWVtYmVycztcclxuICAgICAgaWYgKHJlcy50b3RhbF9tZW1iZXJzICYmIHJlcy5saW1pdF9wZXJfcGFnZSA+IDEpIHtcclxuICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSByZXMuY3JlYXRlX3BhZ2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gMTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ1c2VyLWxpc3RcIiBbY2xhc3MuYW5pbWF0ZS1zbGlkZUluUmlnaHRdPVwiYW5pbWF0aW9uXCI+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJ1c2VyLWxpc3QtaGVhZCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1wbC00IHZ4LXByLTRcIlxyXG4gID5cclxuICAgIDxkaXYgY2xhc3M9XCJ2eC1mcy0xNCB2eC1mdy01MDAgdngtbGFiZWwtdHh0XCI+XHJcbiAgICAgIFdobyBjYW4gdmlldyB0aGlzIGRhc2hib2FyZD9cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3QtYm9keVwiPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cInVzZXItbGlzdC10YWIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1tYi0yXCJcclxuICAgICAgKm5nSWY9XCJncm91cHNFbmFibGVkXCJcclxuICAgID5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIoJ1VTRVInKVwiXHJcbiAgICAgICAgY2xhc3M9XCJ0YWItYnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtbGgtNFwiXHJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50VGFiID09PSAnVVNFUidcIlxyXG4gICAgICA+XHJcbiAgICAgICAgVVNFUlNcclxuICAgICAgICA8c3BhblxyXG4gICAgICAgICAgY2xhc3M9XCJ2eC1wbC0xIHZ4LXByLTEgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1tbC0yIHZ4LWxoLTRcIlxyXG4gICAgICAgICAgPnt7IHRvdGFsTGlzdCB9fTwvc3BhblxyXG4gICAgICAgID5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBpZD1cInN3aXRjaHRhYlwiXHJcbiAgICAgICAgKGNsaWNrKT1cInN3aXRjaFRhYignR1JPVVAnKVwiXHJcbiAgICAgICAgY2xhc3M9XCJ0YWItYnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtbGgtNFwiXHJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50VGFiID09PSAnR1JPVVAnXCJcclxuICAgICAgPlxyXG4gICAgICAgIFVTRVIgR1JPVVBTXHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGlkPVwiZ3JvdXBzY291bnRcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ2eC1wbC0xIHZ4LXByLTEgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1tbC0yIHZ4LWxoLTRcIlxyXG4gICAgICAgICAgPnt7IHRvdGFsZ3JvdXBzIH19PC9zcGFuXHJcbiAgICAgICAgPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3Qtc2VhcmNoIHZ4LW1iLTJcIj5cclxuICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MGI7PC9pPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xyXG4gICAgICAgICAgY3VycmVudFRhYiA9PT0gJ1VTRVInID8gJ1NlYXJjaCBVc2VyKHMpJyA6ICdTZWFyY2ggVXNlciBHcm91cChzKSdcclxuICAgICAgICB9fSB3aG8gY2FuIHZpZXcgdGhpcyBkYXNoYm9hcmRcIlxyXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZXRTZWFyY2hWYWx1ZSgpXCJcclxuICAgICAgICAoZm9jdXNvdXQpPVwic2V0U2VhcmNoVmFsdWUoKVwiXHJcbiAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFRhYiA9PT0gJ1VTRVInXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1lbmRcIlxyXG4gICAgICAgICpuZ0lmPVwidG90YWxQYWdlcyA+IDFcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJwYWdpbmF0aW9uLWJveFwiXHJcbiAgICAgICAgICAqbmdJZj1cInRvdGFsUGFnZXMgPiAxICYmIHNlYXJjaExpc3QubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGFwcC1wYWdpbmF0aW9uXHJcbiAgICAgICAgICAgIChwYWdpbmF0aW9uRmlsdGVyKT1cInBhZ2luYXRpb25GaWx0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtsaW1pdF09XCJsaW1pdFwiXHJcbiAgICAgICAgICAgIFt0b3RhbFBhZ2VzXT1cInRvdGFsUGFnZXNcIlxyXG4gICAgICAgICAgICBbdG90YWxMaXN0XT1cInRvdGFsTGlzdFwiXHJcbiAgICAgICAgICA+PC9hcHAtcGFnaW5hdGlvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3QtYm9keS10b3BcIiAqbmdJZj1cInNlYXJjaExpc3QubGVuZ3RoICE9PSAwXCI+XHJcbiAgICAgICAgPGFwcC1jcy1jaGVja2JveFxyXG4gICAgICAgICAgKm5nSWY9XCIhc2VhcmNoVmFsdWUgJiYgc2VhcmNoTGlzdC5sZW5ndGggPiAxXCJcclxuICAgICAgICAgIFtuZ1ZhbHVlXT1cInNlbGVjdGVkTGlzdC5sZW5ndGggPT0gdG90YWxMaXN0XCJcclxuICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cInNlbGVjdEFsbFVzZXJzKCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzdHJvbmc+e3tcclxuICAgICAgICAgICAgc2VsZWN0ZWRMaXN0Lmxlbmd0aCA9PSB0b3RhbExpc3QgPyBcIkRlc2VsZWN0IEFsbFwiIDogXCJTZWxlY3QgQWxsXCJcclxuICAgICAgICAgIH19PC9zdHJvbmc+XHJcbiAgICAgICAgPC9hcHAtY3MtY2hlY2tib3g+XHJcbiAgICAgICAgPGFwcC1jcy1jaGVja2JveFxyXG4gICAgICAgICAgKm5nSWY9XCJzZWFyY2hWYWx1ZSAmJiBzZWFyY2hMaXN0Lmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgW25nVmFsdWVdPVwiY2hlY2tTZWxlY3RBbGwoKVwiXHJcbiAgICAgICAgICAobmdWYWx1ZUNoYW5nZSk9XCJzZWxlY3RBbGwoJGV2ZW50KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHN0cm9uZz57e1xyXG4gICAgICAgICAgICBzZWxlY3RlZExpc3QubGVuZ3RoID09IHRvdGFsTGlzdCA/IFwiRGVzZWxlY3QgQWxsXCIgOiBcIlNlbGVjdCBBbGxcIlxyXG4gICAgICAgICAgfX08L3N0cm9uZz5cclxuICAgICAgICA8L2FwcC1jcy1jaGVja2JveD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LW9mLXVzZXJcIj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cInNlbGVjdGlvbi1saXN0IHZ4LW1iLTRcIlxyXG4gICAgICAgICAgW2NsYXNzLndpdGgtZ3JvdXBdPVwiZ3JvdXBzRW5hYmxlZFwiXHJcbiAgICAgICAgICBbY2xhc3Mud2l0aC1ub0RhdGFdPVwic2VhcmNoTGlzdC5sZW5ndGggPT0gMFwiXHJcbiAgICAgICAgICBbY2xhc3Mud2l0aC1wYWdpbmF0aW9uXT1cInRvdGFsUGFnZXMgPiAxICYmIHNlYXJjaExpc3QubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHVsICpuZ0lmPVwic2VhcmNoTGlzdC5sZW5ndGggIT09IDBcIj5cclxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkYXRhIG9mIHNlYXJjaExpc3Q7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8YXBwLWNzLWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgICAgICAgICAgIGxpc3REZXRhaWxzLm5vblJlbW92YWJsZVVzZXJzTGlzdC5pbmNsdWRlcyhcclxuICAgICAgICAgICAgICAgICAgICBkYXRhW2xpc3REZXRhaWxzLmVsZW1lbnRJZEtleV1cclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cIlxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZExpc3QubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZElkcy5pbmNsdWRlcyhkYXRhW2xpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0pXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgKG5nVmFsdWVDaGFuZ2UpPVwic2VsZWN0RWxlbWVudChkYXRhKVwiXHJcbiAgICAgICAgICAgICAgICBbYXJUb29sdGlwXT1cImRhdGFbbGlzdERldGFpbHMudG9vbHRpcEtleV1cIlxyXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgPnt7IGRhdGFbbGlzdERldGFpbHMuZGlzcGxheUVsZW1lbnRLZXldIH19PC9hcHAtY3MtY2hlY2tib3hcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICAgIDxhcHAtbm8tZGF0YVxyXG4gICAgICAgICAgICAqbmdJZj1cIiF2TG9hZGVyICYmIHNlYXJjaExpc3QubGVuZ3RoID09IDBcIlxyXG4gICAgICAgICAgICBbbm9EYXRhSW1hZ2VdPVwiQVNTRVRTLnNlYXJjaF9kYXRhXCJcclxuICAgICAgICAgICAgW25vRGF0YVRleHRdPVwiJ05vIGRhdGEgdG8gZGlzcGxheSdcIlxyXG4gICAgICAgICAgPjwvYXBwLW5vLWRhdGE+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cInZMb2FkZXJcIj48L2FwcC1sb2FkZXItaW5saW5lPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50VGFiID09PSAnR1JPVVAnICYmIGdyb3Vwc0VuYWJsZWRcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwZGF0YSBhcyBncm91cHNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWVuZFwiICpuZ0lmPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRpb24tYm94XCIgKm5nSWY9XCJ0b3RhbF9ncm91cF9wYWdlcyA+IDFcIj5cclxuICAgICAgICAgICAgPGFwcC1wYWdpbmF0aW9uXHJcbiAgICAgICAgICAgICAgKHBhZ2luYXRpb25GaWx0ZXIpPVwicGFnaW5hdGlvbkZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBbbGltaXRdPVwibGltaXRcIlxyXG4gICAgICAgICAgICAgIFt0b3RhbFBhZ2VzXT1cInRvdGFsX2dyb3VwX3BhZ2VzXCJcclxuICAgICAgICAgICAgICBbdG90YWxMaXN0XT1cInRvdGFsZ3JvdXBzXCJcclxuICAgICAgICAgICAgPjwvYXBwLXBhZ2luYXRpb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cInVzZXItbGlzdC1taWQgdngtbWItNFwiXHJcbiAgICAgICAgICAgIFtjbGFzcy53aXRoLXBhZ2luYXRpb25dPVwidG90YWxfZ3JvdXBfcGFnZXMgPiAxXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3Vwcz8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3Qtc2VsZWN0IHZ4LW1iLTRcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3MtY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhc2VhcmNoVmFsdWUgJiYgZ3JvdXBzLmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJzZWxlY3RlZGdyb3VwTGlzdC5sZW5ndGggPT0gdG90YWxncm91cHNcIlxyXG4gICAgICAgICAgICAgICAgICAobmdWYWx1ZUNoYW5nZSk9XCJzZWxlY3RBbGxHcm91cHMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVzZXItbmFtZSB2eC1mcy0xMiB2eC1mdy02MDAgdngtbGFiZWwtdHh0IHZ4LXR0LW5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkZ3JvdXBMaXN0Lmxlbmd0aCA9PSB0b3RhbGdyb3Vwc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiRGVzZWxlY3QgQWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlNlbGVjdCBBbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtY3MtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWNzLWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VhcmNoVmFsdWUgJiYgZ3JvdXBzLmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJjaGVja1NlbGVjdEFsbEdyb3VwcygpXCJcclxuICAgICAgICAgICAgICAgICAgKG5nVmFsdWVDaGFuZ2UpPVwic2VsZWN0QWxsc2VhcmNoZ3JvdXBzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1c2VyLW5hbWUgdngtZnMtMTIgdngtZnctNjAwIHZ4LWxhYmVsLXR4dCB2eC10dC1ub25lXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZGdyb3VwTGlzdC5sZW5ndGggPT0gdG90YWxncm91cHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcIkRlc2VsZWN0IEFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJTZWxlY3QgQWxsXCJcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWNzLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3QtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwidngtbS0wIHZ4LXAtMCB2eC1kLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1tYi00XCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBncm91cHM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jcy1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgKG5nVmFsdWVDaGFuZ2UpPVwic2VsZWN0R3JvdXBFbGVtZW50KGRhdGEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRncm91cExpc3QubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEdyb3VwSWRzLmluY2x1ZGVzKGRhdGFbbGlzdERldGFpbHMuZ3JvdXBJZGtleV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLW5hbWUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJUb29sdGlwXT1cImRhdGFbbGlzdERldGFpbHMuZGlzcGxheUdyb3VwS2V5XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhW2xpc3REZXRhaWxzLmRpc3BsYXlHcm91cEtleV0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ1c2Vyc29mZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRlciB2eC1mcy05IHZ4LWZ3LTYwMCB2eC1wbC0xIHZ4LXByLTEgdngtbGgtMyB2eC10dC11cHBlcmNhc2UgdngtbWwtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGRhdGFbXCJhc3NvY2lhdGVkVXNlcnNcIl0ubGVuZ3RoIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbXCJhc3NvY2lhdGVkVXNlcnNcIl0ubGVuZ3RoID4gMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiVVNFUlNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiVVNFUlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtY3MtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3Vwcz8ubGVuZ3RoID09IDAgJiYgIXZMb2FkZXJHcm91cHNcIj5cclxuICAgICAgICAgICAgICA8YXBwLW5vLWRhdGFcclxuICAgICAgICAgICAgICAgIFtub0RhdGFJbWFnZV09XCJBU1NFVFMuc2VhcmNoX2RhdGFcIlxyXG4gICAgICAgICAgICAgICAgW25vRGF0YVRleHRdPVwiXHJcbiAgICAgICAgICAgICAgICAgIChzZWFyY2hWYWx1ZT8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgID8gJ05vIG1hdGNoIGZvdW5kLidcclxuICAgICAgICAgICAgICAgICAgICA6ICdObyBkYXRhIHRvIGRpc3BsYXkuJ1xyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID48L2FwcC1uby1kYXRhPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGFwcC1sb2FkZXItaW5saW5lICpuZ0lmPVwidkxvYWRlckdyb3Vwc1wiPjwvYXBwLWxvYWRlci1pbmxpbmU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidXNlci1mbG9hdGluZy1iYXJcIiAqbmdJZj1cImdyb3Vwc0VuYWJsZWRcIj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwidXNlci1mbG9hdGluZy1iYXItY29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0IHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJjb3VudGVyIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgdngtbS0wIHZ4LXBsLTEgdngtcHItMVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRMaXN0Py5sZW5ndGhcIlxyXG4gICAgICAgICAgICBhcHBQb3BvdmVyXHJcbiAgICAgICAgICAgIChjbGljayk9XCJ1c2VyQ291bnQucG9wb3ZlcigpXCJcclxuICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHNlbGVjdGVkTGlzdD8ubGVuZ3RoIH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lIHZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMlwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkTGlzdD8ubGVuZ3RoID09PSAxXCJcclxuICAgICAgICAgICAgICA+VXNlclxyXG4gICAgICAgICAgICAgIHt7IHNlbGVjdGVkZ3JvdXBMaXN0Py5sZW5ndGggPiAwID8gXCIgJiBcIiA6IFwic2VsZWN0ZWRcIiB9fTwvc3BhblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRMaXN0Py5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgICA+VXNlcnNcclxuICAgICAgICAgICAgICB7eyBzZWxlY3RlZGdyb3VwTGlzdD8ubGVuZ3RoID4gMCA/IFwiICYgXCIgOiBcImFyZSBzZWxlY3RlZFwiIH19PC9zcGFuXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzcz1cImNvdW50ZXIgZ3JvdXAgdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCB2eC1tbC0yIHZ4LXBsLTEgdngtcHItMVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRncm91cExpc3Q/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgIGFwcFBvcG92ZXJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImdyb3VwQ291bnQucG9wb3ZlcigpXCJcclxuICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHNlbGVjdGVkZ3JvdXBMaXN0Py5sZW5ndGggfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWUgdngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRncm91cExpc3Q/Lmxlbmd0aCA9PT0gMVwiXHJcbiAgICAgICAgICAgICAgPlVzZXIgR3JvdXAgc2VsZWN0ZWQ8L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkZ3JvdXBMaXN0Py5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgICA+VXNlciBHcm91cHMgc2VsZWN0ZWQ8L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGFwcC1wb3BvdmVyICN1c2VyQ291bnQgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIHNlbGVjdGVkTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXJUb29sdGlwXT1cImVsZW1lbnQubWVtYmVyX25hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcy1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEVsZW1lbnQoZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICFsaXN0RGV0YWlscy5ub25SZW1vdmFibGVVc2Vyc0xpc3QuaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Py5tZW1iZXJfaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudC5tZW1iZXJfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuXHJcbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI2dyb3VwQ291bnQgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIHNlbGVjdGVkZ3JvdXBMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthclRvb2x0aXBdPVwiZWxlbWVudD8uZ3JvdXBfbmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzLWljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0R3JvdXBFbGVtZW50KGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXHJcbiAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50Py5ncm91cF9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbFwiIChjbGljayk9XCJjbG9zZVVzZXJMaXN0LmVtaXQoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiZmFsc2VcIiAoY2xpY2spPVwib25TdWJtaXQoKVwiPlxyXG4gICAgICAgICAgICBOZXh0IDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTFlOzwvaT5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3QtZm9vdGVyXCIgKm5nSWY9XCIhZ3JvdXBzRW5hYmxlZFwiPlxyXG4gICAgICA8YXBwLWRhc2hib2FyZC1mb290ZXJcclxuICAgICAgICBbZm9vdGVyRGV0YWlsc109XCJmb290ZXJEZXRhaWxzXCJcclxuICAgICAgICAoY2FuY2VsRXZlbnQpPVwiY2xvc2VVc2VyTGlzdC5lbWl0KCk7IHBhZ2luYXRpb25TZXJ2aWNlLnJlc2V0KClcIlxyXG4gICAgICAgIChkZWxldGVFdmVudCk9XCJzZWxlY3RFbGVtZW50KCRldmVudClcIlxyXG4gICAgICAgIChzdWJtaXRFdmVudCk9XCJvblN1Ym1pdCgpXCJcclxuICAgICAgICBbdXNlckJ1dHRvbkNvbG9yXT1cIidncmVlbkJnJ1wiXHJcbiAgICAgID48L2FwcC1kYXNoYm9hcmQtZm9vdGVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=