@wavemaker/app-ng-runtime 12.0.0-next.45104 → 12.0.0-next.45127

Sign up to get free protection for your applications and to get access to all the features.
Files changed (304) hide show
  1. app-ng-runtime/build-task/bundles/index.umd.js +46 -38
  2. app-ng-runtime/build-task/esm2022/basic/default/anchor/anchor.build.mjs +2 -2
  3. app-ng-runtime/build-task/esm2022/basic/default/html/html.build.mjs +2 -2
  4. app-ng-runtime/build-task/esm2022/basic/default/icon/icon.build.mjs +2 -2
  5. app-ng-runtime/build-task/esm2022/basic/default/label/label.build.mjs +2 -2
  6. app-ng-runtime/build-task/esm2022/basic/default/picture/picture.build.mjs +2 -2
  7. app-ng-runtime/build-task/esm2022/basic/default/spinner/spinner.build.mjs +2 -2
  8. app-ng-runtime/build-task/esm2022/basic/progress/progress-circle/progress-circle.build.mjs +7 -2
  9. app-ng-runtime/build-task/esm2022/basic/rich-text-editor/rich-text-editor.build.mjs +2 -2
  10. app-ng-runtime/build-task/esm2022/containers/tile/tile.build.mjs +2 -2
  11. app-ng-runtime/build-task/esm2022/data/form/form-field/form-field.build.mjs +2 -2
  12. app-ng-runtime/build-task/esm2022/device/barcode-scanner/barcode-scanner.build.mjs +2 -2
  13. app-ng-runtime/build-task/esm2022/device/camera/camera.build.mjs +2 -2
  14. app-ng-runtime/build-task/esm2022/dialogs/alert-dialog/alert-dialog.build.mjs +2 -2
  15. app-ng-runtime/build-task/esm2022/input/calendar/calendar.build.mjs +2 -2
  16. app-ng-runtime/build-task/esm2022/input/color-picker/color-picker.build.mjs +3 -3
  17. app-ng-runtime/build-task/esm2022/input/currency/currency.build.mjs +3 -3
  18. app-ng-runtime/build-task/esm2022/input/default/button/button.build.mjs +2 -2
  19. app-ng-runtime/build-task/esm2022/input/default/button-group/button-group.build.mjs +2 -2
  20. app-ng-runtime/build-task/esm2022/input/default/switch/switch.build.mjs +2 -2
  21. app-ng-runtime/build-task/esm2022/input/file-upload/file-upload.build.mjs +5 -1
  22. app-ng-runtime/build-task/esm2022/page/footer/footer.build.mjs +2 -2
  23. app-ng-runtime/build-task/esm2022/page/header/header.build.mjs +2 -2
  24. app-ng-runtime/build-task/esm2022/page/layout.build.mjs +2 -2
  25. app-ng-runtime/build-task/esm2022/page/left-panel/left-panel.build.mjs +2 -2
  26. app-ng-runtime/build-task/esm2022/page/page.build.mjs +2 -2
  27. app-ng-runtime/build-task/esm2022/page/right-panel/right-panel.build.mjs +2 -2
  28. app-ng-runtime/build-task/esm2022/page/top-nav/top-nav.build.mjs +2 -2
  29. app-ng-runtime/build-task/fesm2022/index.mjs +46 -38
  30. app-ng-runtime/build-task/fesm2022/index.mjs.map +1 -1
  31. app-ng-runtime/components/advanced/carousel/bundles/index.umd.js +1 -1
  32. app-ng-runtime/components/advanced/carousel/esm2022/carousel.animator.mjs +2 -2
  33. app-ng-runtime/components/advanced/carousel/fesm2022/index.mjs +1 -1
  34. app-ng-runtime/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
  35. app-ng-runtime/components/base/bundles/index.umd.js +8 -2
  36. app-ng-runtime/components/base/esm2022/pipes/custom-pipes.mjs +3 -3
  37. app-ng-runtime/components/base/esm2022/utils/live-utils.mjs +8 -2
  38. app-ng-runtime/components/base/fesm2022/index.mjs +8 -2
  39. app-ng-runtime/components/base/fesm2022/index.mjs.map +1 -1
  40. app-ng-runtime/components/base/pipes/custom-pipes.d.ts +1 -1
  41. app-ng-runtime/components/base/widgets/common/base/base-field-validations.d.ts +1 -1
  42. app-ng-runtime/components/basic/default/anchor/anchor.component.d.ts +1 -0
  43. app-ng-runtime/components/basic/default/audio/audio.component.d.ts +1 -0
  44. app-ng-runtime/components/basic/default/bundles/index.umd.js +27 -18
  45. app-ng-runtime/components/basic/default/esm2022/anchor/anchor.component.mjs +4 -4
  46. app-ng-runtime/components/basic/default/esm2022/anchor/anchor.props.mjs +2 -1
  47. app-ng-runtime/components/basic/default/esm2022/audio/audio.component.mjs +5 -5
  48. app-ng-runtime/components/basic/default/esm2022/audio/audio.props.mjs +2 -1
  49. app-ng-runtime/components/basic/default/esm2022/html/html.props.mjs +2 -1
  50. app-ng-runtime/components/basic/default/esm2022/icon/icon.component.mjs +6 -7
  51. app-ng-runtime/components/basic/default/esm2022/icon/icon.props.mjs +2 -1
  52. app-ng-runtime/components/basic/default/esm2022/iframe/iframe.component.mjs +3 -3
  53. app-ng-runtime/components/basic/default/esm2022/iframe/iframe.props.mjs +3 -2
  54. app-ng-runtime/components/basic/default/esm2022/label/label.props.mjs +1 -1
  55. app-ng-runtime/components/basic/default/esm2022/picture/picture.directive.mjs +2 -2
  56. app-ng-runtime/components/basic/default/esm2022/picture/picture.props.mjs +3 -1
  57. app-ng-runtime/components/basic/default/esm2022/spinner/spinner.props.mjs +3 -2
  58. app-ng-runtime/components/basic/default/esm2022/video/video.component.mjs +5 -4
  59. app-ng-runtime/components/basic/default/esm2022/video/video.props.mjs +2 -1
  60. app-ng-runtime/components/basic/default/fesm2022/index.mjs +27 -18
  61. app-ng-runtime/components/basic/default/fesm2022/index.mjs.map +1 -1
  62. app-ng-runtime/components/basic/default/icon/icon.component.d.ts +1 -0
  63. app-ng-runtime/components/basic/default/iframe/iframe.component.d.ts +1 -0
  64. app-ng-runtime/components/basic/default/picture/picture.directive.d.ts +2 -1
  65. app-ng-runtime/components/basic/default/video/video.component.d.ts +1 -0
  66. app-ng-runtime/components/basic/progress/bundles/index.umd.js +12 -8
  67. app-ng-runtime/components/basic/progress/esm2022/progress-bar/progress-bar.component.mjs +4 -4
  68. app-ng-runtime/components/basic/progress/esm2022/progress-bar/progress-bar.props.mjs +2 -1
  69. app-ng-runtime/components/basic/progress/esm2022/progress-circle/progress-circle.component.mjs +8 -6
  70. app-ng-runtime/components/basic/progress/esm2022/progress-circle/progress-circle.props.mjs +2 -1
  71. app-ng-runtime/components/basic/progress/fesm2022/index.mjs +12 -8
  72. app-ng-runtime/components/basic/progress/fesm2022/index.mjs.map +1 -1
  73. app-ng-runtime/components/basic/progress/progress-bar/progress-bar.component.d.ts +1 -0
  74. app-ng-runtime/components/basic/progress/progress-circle/progress-circle.component.d.ts +3 -1
  75. app-ng-runtime/components/basic/rich-text-editor/bundles/index.umd.js +2 -0
  76. app-ng-runtime/components/basic/rich-text-editor/esm2022/rich-text-editor.component.mjs +2 -1
  77. app-ng-runtime/components/basic/rich-text-editor/esm2022/rich-text-editor.props.mjs +2 -1
  78. app-ng-runtime/components/basic/rich-text-editor/fesm2022/index.mjs +2 -0
  79. app-ng-runtime/components/basic/rich-text-editor/fesm2022/index.mjs.map +1 -1
  80. app-ng-runtime/components/basic/search/bundles/index.umd.js +11 -9
  81. app-ng-runtime/components/basic/search/esm2022/search.component.mjs +14 -13
  82. app-ng-runtime/components/basic/search/esm2022/search.props.mjs +2 -1
  83. app-ng-runtime/components/basic/search/fesm2022/index.mjs +11 -9
  84. app-ng-runtime/components/basic/search/fesm2022/index.mjs.map +1 -1
  85. app-ng-runtime/components/basic/search/search.component.d.ts +1 -0
  86. app-ng-runtime/components/containers/accordion/bundles/index.umd.js +3 -3
  87. app-ng-runtime/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +4 -4
  88. app-ng-runtime/components/containers/accordion/fesm2022/index.mjs +3 -3
  89. app-ng-runtime/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  90. app-ng-runtime/components/containers/panel/bundles/index.umd.js +14 -14
  91. app-ng-runtime/components/containers/panel/esm2022/panel.component.mjs +15 -15
  92. app-ng-runtime/components/containers/panel/fesm2022/index.mjs +14 -14
  93. app-ng-runtime/components/containers/panel/fesm2022/index.mjs.map +1 -1
  94. app-ng-runtime/components/containers/tabs/bundles/index.umd.js +2 -2
  95. app-ng-runtime/components/containers/tabs/esm2022/tabs.component.mjs +3 -3
  96. app-ng-runtime/components/containers/tabs/fesm2022/index.mjs +2 -2
  97. app-ng-runtime/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  98. app-ng-runtime/components/containers/wizard/bundles/index.umd.js +17 -0
  99. app-ng-runtime/components/containers/wizard/esm2022/wizard.component.mjs +18 -1
  100. app-ng-runtime/components/containers/wizard/fesm2022/index.mjs +17 -0
  101. app-ng-runtime/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  102. app-ng-runtime/components/containers/wizard/wizard.component.d.ts +1 -0
  103. app-ng-runtime/components/data/form/bundles/index.umd.js +4 -0
  104. app-ng-runtime/components/data/form/esm2022/form-field/form-field.directive.mjs +5 -3
  105. app-ng-runtime/components/data/form/fesm2022/index.mjs +4 -2
  106. app-ng-runtime/components/data/form/fesm2022/index.mjs.map +1 -1
  107. app-ng-runtime/components/data/form/form-field/form-field.directive.d.ts +1 -0
  108. app-ng-runtime/components/data/live-table/bundles/index.umd.js +2 -2
  109. app-ng-runtime/components/data/live-table/esm2022/live-table.component.mjs +3 -3
  110. app-ng-runtime/components/data/live-table/fesm2022/index.mjs +2 -2
  111. app-ng-runtime/components/data/live-table/fesm2022/index.mjs.map +1 -1
  112. app-ng-runtime/components/data/pagination/bundles/index.umd.js +2 -0
  113. app-ng-runtime/components/data/pagination/esm2022/pagination.component.mjs +3 -1
  114. app-ng-runtime/components/data/pagination/fesm2022/index.mjs +2 -0
  115. app-ng-runtime/components/data/pagination/fesm2022/index.mjs.map +1 -1
  116. app-ng-runtime/components/data/table/bundles/index.umd.js +44 -10
  117. app-ng-runtime/components/data/table/esm2022/table-column/table-column.directive.mjs +14 -5
  118. app-ng-runtime/components/data/table/esm2022/table.component.mjs +30 -7
  119. app-ng-runtime/components/data/table/esm2022/table.props.mjs +3 -1
  120. app-ng-runtime/components/data/table/fesm2022/index.mjs +45 -11
  121. app-ng-runtime/components/data/table/fesm2022/index.mjs.map +1 -1
  122. app-ng-runtime/components/data/table/table.component.d.ts +8 -1
  123. app-ng-runtime/components/dialogs/alert-dialog/bundles/index.umd.js +6 -4
  124. app-ng-runtime/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +7 -5
  125. app-ng-runtime/components/dialogs/alert-dialog/fesm2022/index.mjs +6 -4
  126. app-ng-runtime/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
  127. app-ng-runtime/components/dialogs/confirm-dialog/bundles/index.umd.js +8 -5
  128. app-ng-runtime/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +9 -6
  129. app-ng-runtime/components/dialogs/confirm-dialog/fesm2022/index.mjs +8 -5
  130. app-ng-runtime/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -1
  131. app-ng-runtime/components/dialogs/default/bundles/index.umd.js +20 -3
  132. app-ng-runtime/components/dialogs/default/dialog-header/dialog-header.component.d.ts +2 -1
  133. app-ng-runtime/components/dialogs/default/esm2022/base-dialog.mjs +13 -1
  134. app-ng-runtime/components/dialogs/default/esm2022/dialog-header/dialog-header.component.mjs +9 -4
  135. app-ng-runtime/components/dialogs/default/fesm2022/index.mjs +20 -3
  136. app-ng-runtime/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  137. app-ng-runtime/components/dialogs/design-dialog/bundles/index.umd.js +4 -4
  138. app-ng-runtime/components/dialogs/design-dialog/esm2022/dialog.component.mjs +5 -5
  139. app-ng-runtime/components/dialogs/design-dialog/fesm2022/index.mjs +4 -4
  140. app-ng-runtime/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
  141. app-ng-runtime/components/dialogs/iframe-dialog/bundles/index.umd.js +9 -5
  142. app-ng-runtime/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +10 -6
  143. app-ng-runtime/components/dialogs/iframe-dialog/fesm2022/index.mjs +9 -5
  144. app-ng-runtime/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
  145. app-ng-runtime/components/dialogs/partial-dialog/bundles/index.umd.js +9 -5
  146. app-ng-runtime/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +10 -6
  147. app-ng-runtime/components/dialogs/partial-dialog/fesm2022/index.mjs +9 -5
  148. app-ng-runtime/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
  149. app-ng-runtime/components/input/calendar/bundles/index.umd.js +2 -4
  150. app-ng-runtime/components/input/calendar/esm2022/calendar.component.mjs +3 -5
  151. app-ng-runtime/components/input/calendar/fesm2022/index.mjs +2 -4
  152. app-ng-runtime/components/input/calendar/fesm2022/index.mjs.map +1 -1
  153. app-ng-runtime/components/input/chips/bundles/index.umd.js +3 -2
  154. app-ng-runtime/components/input/chips/esm2022/chips.component.mjs +3 -3
  155. app-ng-runtime/components/input/chips/esm2022/chips.props.mjs +2 -1
  156. app-ng-runtime/components/input/chips/fesm2022/index.mjs +3 -2
  157. app-ng-runtime/components/input/chips/fesm2022/index.mjs.map +1 -1
  158. app-ng-runtime/components/input/color-picker/bundles/index.umd.js +5 -3
  159. app-ng-runtime/components/input/color-picker/color-picker.component.d.ts +1 -0
  160. app-ng-runtime/components/input/color-picker/esm2022/color-picker.component.mjs +6 -5
  161. app-ng-runtime/components/input/color-picker/esm2022/color-picker.props.mjs +2 -1
  162. app-ng-runtime/components/input/color-picker/fesm2022/index.mjs +5 -3
  163. app-ng-runtime/components/input/color-picker/fesm2022/index.mjs.map +1 -1
  164. app-ng-runtime/components/input/currency/bundles/index.umd.js +4 -3
  165. app-ng-runtime/components/input/currency/currency.component.d.ts +1 -0
  166. app-ng-runtime/components/input/currency/esm2022/currency.component.mjs +6 -6
  167. app-ng-runtime/components/input/currency/esm2022/currency.props.mjs +2 -1
  168. app-ng-runtime/components/input/currency/fesm2022/index.mjs +4 -3
  169. app-ng-runtime/components/input/currency/fesm2022/index.mjs.map +1 -1
  170. app-ng-runtime/components/input/default/bundles/index.umd.js +206 -110
  171. app-ng-runtime/components/input/default/button/button.component.d.ts +1 -0
  172. app-ng-runtime/components/input/default/checkbox/checkbox.component.d.ts +1 -0
  173. app-ng-runtime/components/input/default/esm2022/button/button.component.mjs +1 -1
  174. app-ng-runtime/components/input/default/esm2022/button/button.props.mjs +2 -1
  175. app-ng-runtime/components/input/default/esm2022/caption-position.directive.mjs +8 -7
  176. app-ng-runtime/components/input/default/esm2022/checkbox/checkbox.component.mjs +7 -7
  177. app-ng-runtime/components/input/default/esm2022/checkbox/checkbox.props.mjs +2 -1
  178. app-ng-runtime/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +21 -16
  179. app-ng-runtime/components/input/default/esm2022/number/number.component.mjs +5 -5
  180. app-ng-runtime/components/input/default/esm2022/number/number.props.mjs +3 -1
  181. app-ng-runtime/components/input/default/esm2022/radioset/radioset.component.mjs +28 -23
  182. app-ng-runtime/components/input/default/esm2022/select/select.component.mjs +60 -30
  183. app-ng-runtime/components/input/default/esm2022/select/select.props.mjs +2 -1
  184. app-ng-runtime/components/input/default/esm2022/switch/switch.component.mjs +6 -5
  185. app-ng-runtime/components/input/default/esm2022/switch/switch.props.mjs +2 -1
  186. app-ng-runtime/components/input/default/esm2022/text/calendar/input-calendar.component.mjs +5 -5
  187. app-ng-runtime/components/input/default/esm2022/text/calendar/input-calendar.props.mjs +2 -1
  188. app-ng-runtime/components/input/default/esm2022/text/color/input-color.component.mjs +5 -5
  189. app-ng-runtime/components/input/default/esm2022/text/color/input-color.props.mjs +2 -1
  190. app-ng-runtime/components/input/default/esm2022/text/email/input-email.component.mjs +5 -5
  191. app-ng-runtime/components/input/default/esm2022/text/email/input-email.props.mjs +2 -1
  192. app-ng-runtime/components/input/default/esm2022/text/locale/number-locale.mjs +51 -14
  193. app-ng-runtime/components/input/default/esm2022/text/number/input-number.component.mjs +5 -5
  194. app-ng-runtime/components/input/default/esm2022/text/number/input-number.props.mjs +2 -1
  195. app-ng-runtime/components/input/default/esm2022/text/text/input-text.component.mjs +5 -5
  196. app-ng-runtime/components/input/default/esm2022/text/text/input-text.props.mjs +2 -1
  197. app-ng-runtime/components/input/default/esm2022/textarea/textarea.component.mjs +9 -6
  198. app-ng-runtime/components/input/default/esm2022/textarea/textarea.props.mjs +2 -1
  199. app-ng-runtime/components/input/default/fesm2022/index.mjs +206 -110
  200. app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
  201. app-ng-runtime/components/input/default/number/number.component.d.ts +1 -0
  202. app-ng-runtime/components/input/default/select/select.component.d.ts +4 -4
  203. app-ng-runtime/components/input/default/text/calendar/input-calendar.component.d.ts +1 -0
  204. app-ng-runtime/components/input/default/text/color/input-color.component.d.ts +1 -0
  205. app-ng-runtime/components/input/default/text/email/input-email.component.d.ts +1 -0
  206. app-ng-runtime/components/input/default/text/locale/number-locale.d.ts +1 -0
  207. app-ng-runtime/components/input/default/text/number/input-number.component.d.ts +1 -0
  208. app-ng-runtime/components/input/default/text/text/input-text.component.d.ts +1 -0
  209. app-ng-runtime/components/input/default/textarea/textarea.component.d.ts +4 -2
  210. app-ng-runtime/components/input/epoch/bundles/index.umd.js +15 -9
  211. app-ng-runtime/components/input/epoch/date/date.component.d.ts +1 -0
  212. app-ng-runtime/components/input/epoch/date-time/date-time.component.d.ts +2 -1
  213. app-ng-runtime/components/input/epoch/esm2022/date/date.component.mjs +6 -6
  214. app-ng-runtime/components/input/epoch/esm2022/date/date.props.mjs +2 -1
  215. app-ng-runtime/components/input/epoch/esm2022/date-time/date-time.component.mjs +10 -7
  216. app-ng-runtime/components/input/epoch/esm2022/date-time/date-time.props.mjs +2 -1
  217. app-ng-runtime/components/input/epoch/esm2022/time/time.component.mjs +7 -7
  218. app-ng-runtime/components/input/epoch/esm2022/time/time.props.mjs +2 -1
  219. app-ng-runtime/components/input/epoch/fesm2022/index.mjs +15 -9
  220. app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
  221. app-ng-runtime/components/input/epoch/time/time.component.d.ts +1 -0
  222. app-ng-runtime/components/input/file-upload/bundles/index.umd.js +208 -95
  223. app-ng-runtime/components/input/file-upload/esm2022/file-upload.component.mjs +206 -98
  224. app-ng-runtime/components/input/file-upload/esm2022/file-upload.props.mjs +6 -1
  225. app-ng-runtime/components/input/file-upload/fesm2022/index.mjs +209 -96
  226. app-ng-runtime/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  227. app-ng-runtime/components/input/file-upload/file-upload.component.d.ts +17 -11
  228. app-ng-runtime/components/input/slider/bundles/index.umd.js +5 -6
  229. app-ng-runtime/components/input/slider/esm2022/slider.component.mjs +6 -8
  230. app-ng-runtime/components/input/slider/esm2022/slider.props.mjs +2 -1
  231. app-ng-runtime/components/input/slider/fesm2022/index.mjs +5 -6
  232. app-ng-runtime/components/input/slider/fesm2022/index.mjs.map +1 -1
  233. app-ng-runtime/components/input/slider/slider.component.d.ts +1 -0
  234. app-ng-runtime/components/navigation/menu/bundles/index.umd.js +10 -8
  235. app-ng-runtime/components/navigation/menu/esm2022/menu.component.mjs +9 -8
  236. app-ng-runtime/components/navigation/menu/esm2022/menu.props.mjs +2 -1
  237. app-ng-runtime/components/navigation/menu/esm2022/nav/nav.component.mjs +2 -2
  238. app-ng-runtime/components/navigation/menu/fesm2022/index.mjs +10 -8
  239. app-ng-runtime/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  240. app-ng-runtime/components/navigation/menu/menu.component.d.ts +1 -0
  241. app-ng-runtime/components/navigation/popover/bundles/index.umd.js +121 -13
  242. app-ng-runtime/components/navigation/popover/esm2022/popover.component.mjs +122 -15
  243. app-ng-runtime/components/navigation/popover/esm2022/popover.props.mjs +2 -1
  244. app-ng-runtime/components/navigation/popover/fesm2022/index.mjs +121 -13
  245. app-ng-runtime/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  246. app-ng-runtime/components/navigation/popover/popover.component.d.ts +15 -3
  247. app-ng-runtime/components/page/default/bundles/index.umd.js +2 -1
  248. app-ng-runtime/components/page/default/esm2022/page.props.mjs +4 -3
  249. app-ng-runtime/components/page/default/fesm2022/index.mjs +2 -1
  250. app-ng-runtime/components/page/default/fesm2022/index.mjs.map +1 -1
  251. app-ng-runtime/components/page/footer/bundles/index.umd.js +2 -1
  252. app-ng-runtime/components/page/footer/esm2022/footer.props.mjs +3 -2
  253. app-ng-runtime/components/page/footer/fesm2022/index.mjs +2 -1
  254. app-ng-runtime/components/page/footer/fesm2022/index.mjs.map +1 -1
  255. app-ng-runtime/components/page/header/bundles/index.umd.js +2 -1
  256. app-ng-runtime/components/page/header/esm2022/header.props.mjs +3 -2
  257. app-ng-runtime/components/page/header/fesm2022/index.mjs +2 -1
  258. app-ng-runtime/components/page/header/fesm2022/index.mjs.map +1 -1
  259. app-ng-runtime/components/page/left-panel/bundles/index.umd.js +2 -1
  260. app-ng-runtime/components/page/left-panel/esm2022/left-panel.props.mjs +3 -2
  261. app-ng-runtime/components/page/left-panel/fesm2022/index.mjs +2 -1
  262. app-ng-runtime/components/page/left-panel/fesm2022/index.mjs.map +1 -1
  263. app-ng-runtime/components/page/right-panel/bundles/index.umd.js +2 -1
  264. app-ng-runtime/components/page/right-panel/esm2022/right-panel.props.mjs +3 -2
  265. app-ng-runtime/components/page/right-panel/fesm2022/index.mjs +2 -1
  266. app-ng-runtime/components/page/right-panel/fesm2022/index.mjs.map +1 -1
  267. app-ng-runtime/components/page/top-nav/bundles/index.umd.js +2 -1
  268. app-ng-runtime/components/page/top-nav/esm2022/top-nav.props.mjs +3 -2
  269. app-ng-runtime/components/page/top-nav/fesm2022/index.mjs +2 -1
  270. app-ng-runtime/components/page/top-nav/fesm2022/index.mjs.map +1 -1
  271. app-ng-runtime/core/bundles/index.umd.js +12 -9
  272. app-ng-runtime/core/esm2022/public_api.mjs +2 -2
  273. app-ng-runtime/core/esm2022/utils/build-utils.mjs +7 -7
  274. app-ng-runtime/core/esm2022/utils/utils.mjs +5 -4
  275. app-ng-runtime/core/fesm2022/index.mjs +12 -10
  276. app-ng-runtime/core/fesm2022/index.mjs.map +1 -1
  277. app-ng-runtime/core/public_api.d.ts +1 -1
  278. app-ng-runtime/core/utils/utils.d.ts +1 -0
  279. app-ng-runtime/locales/moment-timezone/moment-timezone-with-data.js +37 -37
  280. app-ng-runtime/mobile/components/device/barcode-scanner/bundles/index.umd.js +2 -1
  281. app-ng-runtime/mobile/components/device/barcode-scanner/esm2022/barcode-scanner.props.mjs +3 -2
  282. app-ng-runtime/mobile/components/device/barcode-scanner/fesm2022/index.mjs +2 -1
  283. app-ng-runtime/mobile/components/device/barcode-scanner/fesm2022/index.mjs.map +1 -1
  284. app-ng-runtime/mobile/components/device/camera/bundles/index.umd.js +2 -1
  285. app-ng-runtime/mobile/components/device/camera/esm2022/camera.props.mjs +3 -2
  286. app-ng-runtime/mobile/components/device/camera/fesm2022/index.mjs +2 -1
  287. app-ng-runtime/mobile/components/device/camera/fesm2022/index.mjs.map +1 -1
  288. app-ng-runtime/mobile/core/bundles/index.umd.js +18 -2
  289. app-ng-runtime/mobile/core/esm2022/native.xhr.mjs +19 -3
  290. app-ng-runtime/mobile/core/fesm2022/index.mjs +18 -2
  291. app-ng-runtime/mobile/core/fesm2022/index.mjs.map +1 -1
  292. app-ng-runtime/package.json +1 -1
  293. app-ng-runtime/runtime/base/bundles/index.umd.js +7 -5
  294. app-ng-runtime/runtime/base/components/app-component/app.component.d.ts +2 -3
  295. app-ng-runtime/runtime/base/esm2022/components/app-component/app.component.mjs +5 -5
  296. app-ng-runtime/runtime/base/esm2022/guards/can-deactivate-page.guard.mjs +5 -4
  297. app-ng-runtime/runtime/base/esm2022/services/i18n.service.mjs +2 -2
  298. app-ng-runtime/runtime/base/fesm2022/index.mjs +7 -5
  299. app-ng-runtime/runtime/base/fesm2022/index.mjs.map +1 -1
  300. app-ng-runtime/runtime/base/guards/can-deactivate-page.guard.d.ts +2 -1
  301. app-ng-runtime/runtime/base/services/i18n.service.d.ts +1 -1
  302. app-ng-runtime/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
  303. app-ng-runtime/scripts/datatable/datatable.js +29 -29
  304. app-ng-runtime/scripts/summernote/dist/summernote-lite.min.js +2 -3
@@ -39,6 +39,7 @@
39
39
  ['contentsource', { value: 'partial', ...base.PROP_STRING }],
40
40
  ['encodeurl', base.PROP_BOOLEAN],
41
41
  ['hint', base.PROP_STRING],
42
+ ['arialabel', base.PROP_STRING],
42
43
  ['hyperlink', { value: 'javascript:void(0)', PROP_STRING: base.PROP_STRING }],
43
44
  ['iconclass', base.PROP_STRING],
44
45
  ['iconheight', base.PROP_STRING],
@@ -76,25 +77,105 @@
76
77
  let activePopover;
77
78
  class PopoverComponent extends base.StylableComponent {
78
79
  static { this.initializeProps = registerProps(); }
79
- constructor(inj, app, explicitContext) {
80
+ static { this.activePopovers = []; }
81
+ constructor(inj, app, explicitContext, cdr) {
80
82
  super(inj, WIDGET_CONFIG, explicitContext);
81
83
  this.app = app;
84
+ this.cdr = cdr;
82
85
  this.isOpen = false;
83
86
  this.canPopoverOpen = true;
87
+ this.isClosingProgrammatically = false;
84
88
  this.popoverContainerCls = `app-popover-${this.widgetId}`;
85
89
  }
90
+ setupDocumentClickHandler() {
91
+ if (this.documentClickHandler) {
92
+ document.removeEventListener('click', this.documentClickHandler, true);
93
+ }
94
+ this.documentClickHandler = (event) => {
95
+ if (!this.isOpen)
96
+ return;
97
+ const target = event.target;
98
+ // Check if the clicked element or any of its parents is part of the datepicker, dropdown, or typeahead containers
99
+ const isInsideSpecialContainer = !!(target.closest('.bs-datepicker-container') ||
100
+ target.closest(".dropdown-menu"));
101
+ if (isInsideSpecialContainer) {
102
+ // If the click was inside one of these containers, we do not close the popover
103
+ return;
104
+ }
105
+ const clickedPopoverIndex = PopoverComponent.activePopovers.findIndex(popover => {
106
+ const popoverContainer = document.querySelector(`.${popover.popoverContainerCls}`);
107
+ return popoverContainer?.contains(target);
108
+ });
109
+ if (this.anchorRef.nativeElement.contains(target)) {
110
+ event.preventDefault();
111
+ event.stopPropagation();
112
+ this.isOpen ? this.close() : this.open();
113
+ return;
114
+ }
115
+ if (clickedPopoverIndex === -1) {
116
+ // Click is outside all popovers
117
+ if (this.outsideclick) {
118
+ this.closeAllPopovers();
119
+ }
120
+ }
121
+ else {
122
+ // Click is inside a popover
123
+ this.closeInnerPopovers(clickedPopoverIndex);
124
+ }
125
+ };
126
+ document.addEventListener('click', this.documentClickHandler, true);
127
+ }
128
+ closeAllPopovers() {
129
+ PopoverComponent.activePopovers.forEach(popover => {
130
+ if (popover.outsideclick) {
131
+ popover.isClosingProgrammatically = true;
132
+ popover.close();
133
+ }
134
+ });
135
+ }
136
+ closeInnerPopovers(clickedIndex) {
137
+ for (let i = clickedIndex + 1; i < PopoverComponent.activePopovers.length; i++) {
138
+ const popover = PopoverComponent.activePopovers[i];
139
+ if (popover.outsideclick) {
140
+ popover.isClosingProgrammatically = true;
141
+ popover.close();
142
+ }
143
+ }
144
+ }
145
+ isChildPopover() {
146
+ return !!$(this.nativeElement).closest('.popover').length;
147
+ }
86
148
  // This mehtod is used to show/open the popover. This refers to the same method showPopover.
87
149
  open() {
88
150
  this.showPopover();
151
+ if (!PopoverComponent.activePopovers.includes(this)) {
152
+ PopoverComponent.activePopovers.push(this);
153
+ }
154
+ this.cdr.detectChanges();
89
155
  }
90
156
  // This mehtod is used to hide/close the popover.
91
157
  close() {
92
- this.isOpen = false;
158
+ if (this.isOpen) {
159
+ this.isClosingProgrammatically = true;
160
+ this.isOpen = false;
161
+ this.bsPopoverDirective.hide();
162
+ const index = PopoverComponent.activePopovers.indexOf(this);
163
+ if (index > -1) {
164
+ PopoverComponent.activePopovers.splice(index, 1);
165
+ }
166
+ this.cdr.detectChanges();
167
+ }
93
168
  }
94
169
  // Trigger on hiding popover
95
170
  onHidden() {
96
- this.invokeEventCallback('hide', { $event: { type: 'hide' } });
97
- this.isOpen = false;
171
+ if (!this.isChildPopover() || this.isClosingProgrammatically) {
172
+ this.invokeEventCallback('hide', { $event: { type: 'hide' } });
173
+ this.isOpen = false;
174
+ if (activePopover === this) {
175
+ activePopover = null;
176
+ }
177
+ }
178
+ this.isClosingProgrammatically = false;
98
179
  }
99
180
  setFocusToPopoverLink() {
100
181
  setTimeout(() => this.anchorRef.nativeElement.focus(), 10);
@@ -146,12 +227,26 @@
146
227
  $('body > popover-container').wrap('<' + root + '/>');
147
228
  }
148
229
  // Fix for [WMS-25125]: Not closing the existing opened popovers when the autoclose property is DISABLED
149
- if (activePopover && activePopover.isOpen && activePopover.autoclose !== base.AUTOCLOSE_TYPE.DISABLED) {
150
- activePopover.isOpen = false;
230
+ if (!this.isChildPopover()) {
231
+ if (activePopover && activePopover !== this &&
232
+ activePopover.autoclose !== base.AUTOCLOSE_TYPE.DISABLED) {
233
+ activePopover.isClosingProgrammatically = true;
234
+ activePopover.close();
235
+ }
236
+ activePopover = this;
237
+ }
238
+ this.isOpen = true;
239
+ if (!PopoverComponent.activePopovers.includes(this)) {
240
+ PopoverComponent.activePopovers.push(this);
151
241
  }
152
- activePopover = this;
153
- activePopover.isOpen = true;
154
242
  const popoverContainer = document.querySelector(`.${this.popoverContainerCls}`);
243
+ if (popoverContainer) {
244
+ popoverContainer.setAttribute('data-popover-id', this.widgetId);
245
+ // Add click event listener to stop propagation
246
+ popoverContainer.addEventListener('click', (event) => {
247
+ event.stopPropagation();
248
+ });
249
+ }
155
250
  i1.setCSSFromObj(popoverContainer, {
156
251
  height: this.popoverheight,
157
252
  minWidth: this.popoverwidth,
@@ -168,6 +263,9 @@
168
263
  this.anchorRef.nativeElement.onmouseenter = () => clearTimeout(this.closePopoverTimeout);
169
264
  this.anchorRef.nativeElement.onmouseleave = () => this.hidePopover();
170
265
  }
266
+ if (this.outsideclick) {
267
+ this.setupDocumentClickHandler();
268
+ }
171
269
  setTimeout(() => {
172
270
  this.anchorRef.nativeElement.removeAttribute('aria-describedby');
173
271
  });
@@ -234,6 +332,7 @@
234
332
  }
235
333
  }
236
334
  hidePopover() {
335
+ this.isClosingProgrammatically = true;
237
336
  this.closePopoverTimeout = setTimeout(() => this.isOpen = false, 500);
238
337
  }
239
338
  showPopover() {
@@ -287,7 +386,16 @@
287
386
  // Hide the popover container while attaching the next component as part of page reuse strategy.
288
387
  this.bsPopoverDirective.hide();
289
388
  }
290
- static { this.ɵfac = function PopoverComponent_Factory(t) { return new (t || PopoverComponent)(i0__namespace.ɵɵdirectiveInject(i0__namespace.Injector), i0__namespace.ɵɵdirectiveInject(i1__namespace.App), i0__namespace.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
389
+ OnDestroy() {
390
+ if (this.documentClickHandler) {
391
+ document.removeEventListener('click', this.documentClickHandler, true);
392
+ }
393
+ const index = PopoverComponent.activePopovers.indexOf(this);
394
+ if (index > -1) {
395
+ PopoverComponent.activePopovers.splice(index, 1);
396
+ }
397
+ }
398
+ static { this.ɵfac = function PopoverComponent_Factory(t) { return new (t || PopoverComponent)(i0__namespace.ɵɵdirectiveInject(i0__namespace.Injector), i0__namespace.ɵɵdirectiveInject(i1__namespace.App), i0__namespace.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8), i0__namespace.ɵɵdirectiveInject(i0__namespace.ChangeDetectorRef)); }; }
291
399
  static { this.ɵcmp = /*@__PURE__*/ i0__namespace.ɵɵdefineComponent({ type: PopoverComponent, selectors: [["wm-popover"]], contentQueries: function PopoverComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
292
400
  i0__namespace.ɵɵcontentQuery(dirIndex, i0.TemplateRef, 5);
293
401
  i0__namespace.ɵɵcontentQuery(dirIndex, _c0, 5);
@@ -313,20 +421,20 @@
313
421
  i0__namespace.ɵɵclassMap(ctx.class);
314
422
  i0__namespace.ɵɵpropertyInterpolate2("containerClass", "app-popover animated ", ctx.contentanimation, " ", ctx.popoverContainerCls, "");
315
423
  i0__namespace.ɵɵproperty("popover", ctx.popoverTemplate)("popoverContext", ctx.context)("popoverTitle", ctx.title)("placement", ctx.popoverplacement)("outsideClick", ctx.outsideclick)("triggers", ctx.event)("container", ctx.containerTarget || ".wm-app")("isOpen", ctx.isOpen)("tabindex", ctx.tabindex)("name", ctx.name)("ngClass", i0__namespace.ɵɵpureFunction1(19, _c2, !ctx.canPopoverOpen))("adaptivePosition", ctx.adaptiveposition);
316
- i0__namespace.ɵɵattribute("aria-label", ctx.hint || "Popover menu")("aria-expanded", ctx.isOpen);
424
+ i0__namespace.ɵɵattribute("aria-label", ctx.arialabel || (ctx.badgevalue ? ctx.caption + " " + ctx.badgevalue : ctx.caption) || "Popover menu")("aria-expanded", ctx.isOpen);
317
425
  } }, dependencies: [i2__namespace.NgClass, i3__namespace.AnchorComponent, i4__namespace.PopoverDirective], encapsulation: 2 }); }
318
426
  }
319
427
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0__namespace.ɵsetClassMetadata(PopoverComponent, [{
320
428
  type: i0.Component,
321
429
  args: [{ selector: 'wm-popover', providers: [
322
430
  base.provideAsWidgetRef(PopoverComponent)
323
- ], template: "<a [popover]=\"popoverTemplate\"\n [popoverContext]=\"context\"\n [popoverTitle]=\"title\"\n [placement]=\"popoverplacement\"\n [outsideClick]=\"outsideclick\"\n [triggers]=\"event\"\n (onShown)=\"onShown()\"\n (onHidden)=\"onHidden()\"\n containerClass=\"app-popover animated {{contentanimation}} {{popoverContainerCls}}\"\n [container]=\"containerTarget || '.wm-app'\"\n [isOpen]=\"isOpen\"\n [tabindex]=\"tabindex\"\n [name]=\"name\"\n [class]=\"class\"\n [ngClass]=\"{'disable-popover': !canPopoverOpen}\"\n [adaptivePosition]=\"adaptiveposition\"\n boundariesElement=\"window\"\n [attr.aria-label]=\"hint || 'Popover menu'\"\n [attr.aria-expanded]=\"isOpen\"\n role=\"button\"\n #anchor\n name.bind=\"name\"\n wmAnchor\n animation.bind=\"animation\"\n badgevalue.bind=\"badgevalue\"\n caption.bind=\"caption\"\n encodeurl.bind=\"encodeurl\"\n hint.bind=\"hint\"\n hyperlink.bind=\"hyperlink\"\n iconurl.bind=\"iconurl\"\n iconwidth.bind=\"iconwidth\"\n iconheight.bind=\"iconheight\"\n iconmargin.bind=\"iconmargin\"\n iconclass.bind=\"iconclass\"\n iconposition.bind=\"iconposition\"\n shortcutkey.bind=\"shortcutkey\"\n tabindex.bind=\"tabindex\"\n (keydown)=\"onPopoverAnchorKeydown($event)\">\n</a>\n" }]
431
+ ], template: "<a [popover]=\"popoverTemplate\"\n [popoverContext]=\"context\"\n [popoverTitle]=\"title\"\n [placement]=\"popoverplacement\"\n [outsideClick]=\"outsideclick\"\n [triggers]=\"event\"\n (onShown)=\"onShown()\"\n (onHidden)=\"onHidden()\"\n containerClass=\"app-popover animated {{contentanimation}} {{popoverContainerCls}}\"\n [container]=\"containerTarget || '.wm-app'\"\n [isOpen]=\"isOpen\"\n [tabindex]=\"tabindex\"\n [name]=\"name\"\n [class]=\"class\"\n [ngClass]=\"{'disable-popover': !canPopoverOpen}\"\n [adaptivePosition]=\"adaptiveposition\"\n boundariesElement=\"window\"\n [attr.aria-label]=\"arialabel || (badgevalue ? caption + ' ' + badgevalue : caption) || 'Popover menu'\"\n [attr.aria-expanded]=\"isOpen\"\n role=\"button\"\n #anchor\n name.bind=\"name\"\n wmAnchor\n animation.bind=\"animation\"\n badgevalue.bind=\"badgevalue\"\n caption.bind=\"caption\"\n encodeurl.bind=\"encodeurl\"\n hint.bind=\"hint\"\n hyperlink.bind=\"hyperlink\"\n iconurl.bind=\"iconurl\"\n iconwidth.bind=\"iconwidth\"\n iconheight.bind=\"iconheight\"\n iconmargin.bind=\"iconmargin\"\n iconclass.bind=\"iconclass\"\n iconposition.bind=\"iconposition\"\n shortcutkey.bind=\"shortcutkey\"\n tabindex.bind=\"tabindex\"\n (keydown)=\"onPopoverAnchorKeydown($event)\">\n</a>\n" }]
324
432
  }], () => [{ type: i0__namespace.Injector }, { type: i1__namespace.App }, { type: undefined, decorators: [{
325
433
  type: i0.Inject,
326
434
  args: ['EXPLICIT_CONTEXT']
327
435
  }, {
328
436
  type: i0.Optional
329
- }] }], { bsPopoverDirective: [{
437
+ }] }, { type: i0__namespace.ChangeDetectorRef }], { bsPopoverDirective: [{
330
438
  type: i0.ViewChild,
331
439
  args: [i4.PopoverDirective]
332
440
  }], anchorRef: [{
@@ -339,7 +447,7 @@
339
447
  type: i0.ContentChild,
340
448
  args: ['partial']
341
449
  }] }); })();
342
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0__namespace.ɵsetClassDebugInfo(PopoverComponent, { className: "PopoverComponent", filePath: "popover.component.ts", lineNumber: 57 }); })();
450
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0__namespace.ɵsetClassDebugInfo(PopoverComponent, { className: "PopoverComponent", filePath: "popover.component.ts", lineNumber: 60 }); })();
343
451
 
344
452
  const components = [
345
453
  PopoverComponent
@@ -1,4 +1,4 @@
1
- import { Component, ContentChild, ElementRef, Inject, Injector, Optional, TemplateRef, ViewChild } from '@angular/core';
1
+ import { ChangeDetectorRef, Component, ContentChild, ElementRef, Inject, Injector, Optional, TemplateRef, ViewChild } from '@angular/core';
2
2
  import { PopoverDirective } from 'ngx-bootstrap/popover';
3
3
  import { addClass, adjustContainerPosition, adjustContainerRightEdges, App, findRootContainer, setCSSFromObj } from '@wm/core';
4
4
  import { AUTOCLOSE_TYPE, getContainerTargetClass, provideAsWidgetRef, StylableComponent, styler } from '@wm/components/base';
@@ -24,25 +24,105 @@ const eventsMap = {
24
24
  let activePopover;
25
25
  export class PopoverComponent extends StylableComponent {
26
26
  static { this.initializeProps = registerProps(); }
27
- constructor(inj, app, explicitContext) {
27
+ static { this.activePopovers = []; }
28
+ constructor(inj, app, explicitContext, cdr) {
28
29
  super(inj, WIDGET_CONFIG, explicitContext);
29
30
  this.app = app;
31
+ this.cdr = cdr;
30
32
  this.isOpen = false;
31
33
  this.canPopoverOpen = true;
34
+ this.isClosingProgrammatically = false;
32
35
  this.popoverContainerCls = `app-popover-${this.widgetId}`;
33
36
  }
37
+ setupDocumentClickHandler() {
38
+ if (this.documentClickHandler) {
39
+ document.removeEventListener('click', this.documentClickHandler, true);
40
+ }
41
+ this.documentClickHandler = (event) => {
42
+ if (!this.isOpen)
43
+ return;
44
+ const target = event.target;
45
+ // Check if the clicked element or any of its parents is part of the datepicker, dropdown, or typeahead containers
46
+ const isInsideSpecialContainer = !!(target.closest('.bs-datepicker-container') ||
47
+ target.closest(".dropdown-menu"));
48
+ if (isInsideSpecialContainer) {
49
+ // If the click was inside one of these containers, we do not close the popover
50
+ return;
51
+ }
52
+ const clickedPopoverIndex = PopoverComponent.activePopovers.findIndex(popover => {
53
+ const popoverContainer = document.querySelector(`.${popover.popoverContainerCls}`);
54
+ return popoverContainer?.contains(target);
55
+ });
56
+ if (this.anchorRef.nativeElement.contains(target)) {
57
+ event.preventDefault();
58
+ event.stopPropagation();
59
+ this.isOpen ? this.close() : this.open();
60
+ return;
61
+ }
62
+ if (clickedPopoverIndex === -1) {
63
+ // Click is outside all popovers
64
+ if (this.outsideclick) {
65
+ this.closeAllPopovers();
66
+ }
67
+ }
68
+ else {
69
+ // Click is inside a popover
70
+ this.closeInnerPopovers(clickedPopoverIndex);
71
+ }
72
+ };
73
+ document.addEventListener('click', this.documentClickHandler, true);
74
+ }
75
+ closeAllPopovers() {
76
+ PopoverComponent.activePopovers.forEach(popover => {
77
+ if (popover.outsideclick) {
78
+ popover.isClosingProgrammatically = true;
79
+ popover.close();
80
+ }
81
+ });
82
+ }
83
+ closeInnerPopovers(clickedIndex) {
84
+ for (let i = clickedIndex + 1; i < PopoverComponent.activePopovers.length; i++) {
85
+ const popover = PopoverComponent.activePopovers[i];
86
+ if (popover.outsideclick) {
87
+ popover.isClosingProgrammatically = true;
88
+ popover.close();
89
+ }
90
+ }
91
+ }
92
+ isChildPopover() {
93
+ return !!$(this.nativeElement).closest('.popover').length;
94
+ }
34
95
  // This mehtod is used to show/open the popover. This refers to the same method showPopover.
35
96
  open() {
36
97
  this.showPopover();
98
+ if (!PopoverComponent.activePopovers.includes(this)) {
99
+ PopoverComponent.activePopovers.push(this);
100
+ }
101
+ this.cdr.detectChanges();
37
102
  }
38
103
  // This mehtod is used to hide/close the popover.
39
104
  close() {
40
- this.isOpen = false;
105
+ if (this.isOpen) {
106
+ this.isClosingProgrammatically = true;
107
+ this.isOpen = false;
108
+ this.bsPopoverDirective.hide();
109
+ const index = PopoverComponent.activePopovers.indexOf(this);
110
+ if (index > -1) {
111
+ PopoverComponent.activePopovers.splice(index, 1);
112
+ }
113
+ this.cdr.detectChanges();
114
+ }
41
115
  }
42
116
  // Trigger on hiding popover
43
117
  onHidden() {
44
- this.invokeEventCallback('hide', { $event: { type: 'hide' } });
45
- this.isOpen = false;
118
+ if (!this.isChildPopover() || this.isClosingProgrammatically) {
119
+ this.invokeEventCallback('hide', { $event: { type: 'hide' } });
120
+ this.isOpen = false;
121
+ if (activePopover === this) {
122
+ activePopover = null;
123
+ }
124
+ }
125
+ this.isClosingProgrammatically = false;
46
126
  }
47
127
  setFocusToPopoverLink() {
48
128
  setTimeout(() => this.anchorRef.nativeElement.focus(), 10);
@@ -94,12 +174,26 @@ export class PopoverComponent extends StylableComponent {
94
174
  $('body > popover-container').wrap('<' + root + '/>');
95
175
  }
96
176
  // Fix for [WMS-25125]: Not closing the existing opened popovers when the autoclose property is DISABLED
97
- if (activePopover && activePopover.isOpen && activePopover.autoclose !== AUTOCLOSE_TYPE.DISABLED) {
98
- activePopover.isOpen = false;
177
+ if (!this.isChildPopover()) {
178
+ if (activePopover && activePopover !== this &&
179
+ activePopover.autoclose !== AUTOCLOSE_TYPE.DISABLED) {
180
+ activePopover.isClosingProgrammatically = true;
181
+ activePopover.close();
182
+ }
183
+ activePopover = this;
184
+ }
185
+ this.isOpen = true;
186
+ if (!PopoverComponent.activePopovers.includes(this)) {
187
+ PopoverComponent.activePopovers.push(this);
99
188
  }
100
- activePopover = this;
101
- activePopover.isOpen = true;
102
189
  const popoverContainer = document.querySelector(`.${this.popoverContainerCls}`);
190
+ if (popoverContainer) {
191
+ popoverContainer.setAttribute('data-popover-id', this.widgetId);
192
+ // Add click event listener to stop propagation
193
+ popoverContainer.addEventListener('click', (event) => {
194
+ event.stopPropagation();
195
+ });
196
+ }
103
197
  setCSSFromObj(popoverContainer, {
104
198
  height: this.popoverheight,
105
199
  minWidth: this.popoverwidth,
@@ -116,6 +210,9 @@ export class PopoverComponent extends StylableComponent {
116
210
  this.anchorRef.nativeElement.onmouseenter = () => clearTimeout(this.closePopoverTimeout);
117
211
  this.anchorRef.nativeElement.onmouseleave = () => this.hidePopover();
118
212
  }
213
+ if (this.outsideclick) {
214
+ this.setupDocumentClickHandler();
215
+ }
119
216
  setTimeout(() => {
120
217
  this.anchorRef.nativeElement.removeAttribute('aria-describedby');
121
218
  });
@@ -182,6 +279,7 @@ export class PopoverComponent extends StylableComponent {
182
279
  }
183
280
  }
184
281
  hidePopover() {
282
+ this.isClosingProgrammatically = true;
185
283
  this.closePopoverTimeout = setTimeout(() => this.isOpen = false, 500);
186
284
  }
187
285
  showPopover() {
@@ -235,7 +333,16 @@ export class PopoverComponent extends StylableComponent {
235
333
  // Hide the popover container while attaching the next component as part of page reuse strategy.
236
334
  this.bsPopoverDirective.hide();
237
335
  }
238
- static { this.ɵfac = function PopoverComponent_Factory(t) { return new (t || PopoverComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.App), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
336
+ OnDestroy() {
337
+ if (this.documentClickHandler) {
338
+ document.removeEventListener('click', this.documentClickHandler, true);
339
+ }
340
+ const index = PopoverComponent.activePopovers.indexOf(this);
341
+ if (index > -1) {
342
+ PopoverComponent.activePopovers.splice(index, 1);
343
+ }
344
+ }
345
+ static { this.ɵfac = function PopoverComponent_Factory(t) { return new (t || PopoverComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.App), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
239
346
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PopoverComponent, selectors: [["wm-popover"]], contentQueries: function PopoverComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
240
347
  i0.ɵɵcontentQuery(dirIndex, TemplateRef, 5);
241
348
  i0.ɵɵcontentQuery(dirIndex, _c0, 5);
@@ -261,20 +368,20 @@ export class PopoverComponent extends StylableComponent {
261
368
  i0.ɵɵclassMap(ctx.class);
262
369
  i0.ɵɵpropertyInterpolate2("containerClass", "app-popover animated ", ctx.contentanimation, " ", ctx.popoverContainerCls, "");
263
370
  i0.ɵɵproperty("popover", ctx.popoverTemplate)("popoverContext", ctx.context)("popoverTitle", ctx.title)("placement", ctx.popoverplacement)("outsideClick", ctx.outsideclick)("triggers", ctx.event)("container", ctx.containerTarget || ".wm-app")("isOpen", ctx.isOpen)("tabindex", ctx.tabindex)("name", ctx.name)("ngClass", i0.ɵɵpureFunction1(19, _c2, !ctx.canPopoverOpen))("adaptivePosition", ctx.adaptiveposition);
264
- i0.ɵɵattribute("aria-label", ctx.hint || "Popover menu")("aria-expanded", ctx.isOpen);
371
+ i0.ɵɵattribute("aria-label", ctx.arialabel || (ctx.badgevalue ? ctx.caption + " " + ctx.badgevalue : ctx.caption) || "Popover menu")("aria-expanded", ctx.isOpen);
265
372
  } }, dependencies: [i2.NgClass, i3.AnchorComponent, i4.PopoverDirective], encapsulation: 2 }); }
266
373
  }
267
374
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PopoverComponent, [{
268
375
  type: Component,
269
376
  args: [{ selector: 'wm-popover', providers: [
270
377
  provideAsWidgetRef(PopoverComponent)
271
- ], template: "<a [popover]=\"popoverTemplate\"\n [popoverContext]=\"context\"\n [popoverTitle]=\"title\"\n [placement]=\"popoverplacement\"\n [outsideClick]=\"outsideclick\"\n [triggers]=\"event\"\n (onShown)=\"onShown()\"\n (onHidden)=\"onHidden()\"\n containerClass=\"app-popover animated {{contentanimation}} {{popoverContainerCls}}\"\n [container]=\"containerTarget || '.wm-app'\"\n [isOpen]=\"isOpen\"\n [tabindex]=\"tabindex\"\n [name]=\"name\"\n [class]=\"class\"\n [ngClass]=\"{'disable-popover': !canPopoverOpen}\"\n [adaptivePosition]=\"adaptiveposition\"\n boundariesElement=\"window\"\n [attr.aria-label]=\"hint || 'Popover menu'\"\n [attr.aria-expanded]=\"isOpen\"\n role=\"button\"\n #anchor\n name.bind=\"name\"\n wmAnchor\n animation.bind=\"animation\"\n badgevalue.bind=\"badgevalue\"\n caption.bind=\"caption\"\n encodeurl.bind=\"encodeurl\"\n hint.bind=\"hint\"\n hyperlink.bind=\"hyperlink\"\n iconurl.bind=\"iconurl\"\n iconwidth.bind=\"iconwidth\"\n iconheight.bind=\"iconheight\"\n iconmargin.bind=\"iconmargin\"\n iconclass.bind=\"iconclass\"\n iconposition.bind=\"iconposition\"\n shortcutkey.bind=\"shortcutkey\"\n tabindex.bind=\"tabindex\"\n (keydown)=\"onPopoverAnchorKeydown($event)\">\n</a>\n" }]
378
+ ], template: "<a [popover]=\"popoverTemplate\"\n [popoverContext]=\"context\"\n [popoverTitle]=\"title\"\n [placement]=\"popoverplacement\"\n [outsideClick]=\"outsideclick\"\n [triggers]=\"event\"\n (onShown)=\"onShown()\"\n (onHidden)=\"onHidden()\"\n containerClass=\"app-popover animated {{contentanimation}} {{popoverContainerCls}}\"\n [container]=\"containerTarget || '.wm-app'\"\n [isOpen]=\"isOpen\"\n [tabindex]=\"tabindex\"\n [name]=\"name\"\n [class]=\"class\"\n [ngClass]=\"{'disable-popover': !canPopoverOpen}\"\n [adaptivePosition]=\"adaptiveposition\"\n boundariesElement=\"window\"\n [attr.aria-label]=\"arialabel || (badgevalue ? caption + ' ' + badgevalue : caption) || 'Popover menu'\"\n [attr.aria-expanded]=\"isOpen\"\n role=\"button\"\n #anchor\n name.bind=\"name\"\n wmAnchor\n animation.bind=\"animation\"\n badgevalue.bind=\"badgevalue\"\n caption.bind=\"caption\"\n encodeurl.bind=\"encodeurl\"\n hint.bind=\"hint\"\n hyperlink.bind=\"hyperlink\"\n iconurl.bind=\"iconurl\"\n iconwidth.bind=\"iconwidth\"\n iconheight.bind=\"iconheight\"\n iconmargin.bind=\"iconmargin\"\n iconclass.bind=\"iconclass\"\n iconposition.bind=\"iconposition\"\n shortcutkey.bind=\"shortcutkey\"\n tabindex.bind=\"tabindex\"\n (keydown)=\"onPopoverAnchorKeydown($event)\">\n</a>\n" }]
272
379
  }], () => [{ type: i0.Injector }, { type: i1.App }, { type: undefined, decorators: [{
273
380
  type: Inject,
274
381
  args: ['EXPLICIT_CONTEXT']
275
382
  }, {
276
383
  type: Optional
277
- }] }], { bsPopoverDirective: [{
384
+ }] }, { type: i0.ChangeDetectorRef }], { bsPopoverDirective: [{
278
385
  type: ViewChild,
279
386
  args: [PopoverDirective]
280
387
  }], anchorRef: [{
@@ -287,5 +394,5 @@ export class PopoverComponent extends StylableComponent {
287
394
  type: ContentChild,
288
395
  args: ['partial']
289
396
  }] }); })();
290
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PopoverComponent, { className: "PopoverComponent", filePath: "popover.component.ts", lineNumber: 57 }); })();
291
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvbmF2aWdhdGlvbi9wb3BvdmVyL3NyYy9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9uYXZpZ2F0aW9uL3BvcG92ZXIvc3JjL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUFFLE1BQU0sRUFDbEIsUUFBUSxFQUNBLFFBQVEsRUFDaEIsV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQ0gsUUFBUSxFQUNSLHVCQUF1QixFQUN2Qix5QkFBeUIsRUFDekIsR0FBRyxFQUNILGlCQUFpQixFQUNqQixhQUFhLEVBQ2hCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDSCxjQUFjLEVBQ2QsdUJBQXVCLEVBRXZCLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsTUFBTSxFQUNULE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7QUFJOUMsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQUM7QUFDMUMsTUFBTSxhQUFhLEdBQWtCO0lBQ2pDLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFNBQVMsRUFBRSxXQUFXO0NBQ3pCLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBRztJQUNkLEtBQUssRUFBRSxPQUFPO0lBQ2QsS0FBSyxFQUFFLGtCQUFrQjtJQUN6QixPQUFPLEVBQUUsa0JBQWtCO0NBQzlCLENBQUM7QUFFRixJQUFJLGFBQStCLENBQUM7QUFVcEMsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGlCQUFpQjthQUM1QyxvQkFBZSxHQUFHLGFBQWEsRUFBRSxBQUFsQixDQUFtQjtJQW1DekMsWUFBWSxHQUFhLEVBQVUsR0FBUSxFQUEwQyxlQUFvQjtRQUNyRyxLQUFLLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQztRQURaLFFBQUcsR0FBSCxHQUFHLENBQUs7UUFoQ3BDLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFHZixtQkFBYyxHQUFHLElBQUksQ0FBQztRQStCekIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGVBQWUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFRCw0RkFBNEY7SUFDckYsSUFBSTtRQUNQLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsaURBQWlEO0lBQzFDLEtBQUs7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsNEJBQTRCO0lBQ3JCLFFBQVE7UUFDWCxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUMsTUFBTSxFQUFFLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBQyxFQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRU8scUJBQXFCO1FBQ3pCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU8sMEJBQTBCLENBQUMsV0FBVyxFQUFFLGdCQUFnQjtRQUM1RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM3RCxXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxPQUFPO1FBRW5DLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixJQUFJLFdBQVcsR0FBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQzdDLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDaEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDNUUsZ0VBQWdFO1FBQ2hFLElBQUksV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzRixNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQztZQUMzQixNQUFNLGNBQWMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7WUFDN0YsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsaUVBQWlFO1FBQ2pFLElBQUksV0FBVyxHQUFHLFlBQVksR0FBRyxhQUFhLEVBQUUsQ0FBQztZQUM3Qyx5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0YsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDeEMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsR0FBRyxhQUFhLENBQUM7Z0JBQ3ZFLE1BQU0sZ0JBQWdCLEdBQUksV0FBVyxHQUFHLGlCQUFpQixDQUFDO2dCQUMxRCxJQUFJLGNBQWMsQ0FBRTtnQkFDcEIsSUFBRyxXQUFXLElBQUUsR0FBRyxFQUFDLENBQUM7b0JBQ2pCLGNBQWMsR0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO2dCQUN2RixDQUFDO3FCQUFJLENBQUM7b0JBQ0YsY0FBYyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDM0YsQ0FBQztnQkFDRCxJQUFHLGFBQWEsR0FBRyxHQUFHLEVBQUMsQ0FBQztvQkFDcEIsY0FBYyxJQUFJLEVBQUUsQ0FBQztnQkFDekIsQ0FBQztnQkFDRixJQUFJLENBQUMsMEJBQTBCLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNMLENBQUM7SUFFRCw2QkFBNkI7SUFDdEIsT0FBTztRQUNWLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5Qyw2RkFBNkY7UUFDN0YsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNQLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFDRCx3R0FBd0c7UUFDeEcsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLE1BQU0sSUFBSSxhQUFhLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvRixhQUFhLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNqQyxDQUFDO1FBRUQsYUFBYSxHQUFHLElBQUksQ0FBQztRQUNyQixhQUFhLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUU1QixNQUFNLGdCQUFnQixHQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBZ0IsQ0FBQztRQUNoRyxhQUFhLENBQUMsZ0JBQWdCLEVBQUU7WUFDNUIsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQzFCLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUMzQixLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDM0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNyQixRQUFRLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNoRixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBRWpFLG1DQUFtQztZQUNuQyx5RUFBeUU7WUFDekUsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM3RSxnQkFBZ0IsQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDekYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFO1lBQ3hGLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLFVBQVUsRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxlQUFlLEdBQWdCLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sYUFBYSxHQUFnQixnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEYsZUFBZSxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xDLDBCQUEwQjtZQUMxQixJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMvQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUFZLENBQUM7UUFDekMsQ0FBQyxDQUFDO1FBQ0YsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2hDLG9CQUFvQjtZQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQy9CLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQVksQ0FBQztRQUN6QyxDQUFDLENBQUM7UUFFRiw0SEFBNEg7UUFDNUgsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQyxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xELENBQUM7UUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLHVFQUF1RTtRQUN2RSxVQUFVLENBQUUsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRyxDQUFDO2dCQUMxQixJQUFJLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNuRCxDQUFDO1lBQ0QseUVBQXlFO1lBQ3pFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELG9CQUFvQjtRQUNoQixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDcEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7Z0JBQzdDLElBQUksWUFBWSxDQUFDO2dCQUVqQixJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNULFlBQVksR0FBSSxNQUFNLENBQUMsTUFBTSxDQUFDO29CQUM5QixJQUFJLENBQUMsT0FBTyxHQUFLLFlBQVksQ0FBQyxPQUFPLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBSyxZQUFZLENBQUMsT0FBTyxDQUFDO29CQUN0QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBQyxNQUFNLEVBQUUsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFDLEVBQUMsQ0FBQyxDQUFDO2dCQUMvRCxDQUFDO2dCQUNELGtCQUFrQixFQUFFLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxPQUFPLEdBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDekMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBQyxNQUFNLEVBQUUsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7SUFDTCxDQUFDO0lBRU8sV0FBVztRQUNmLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVPLFdBQVc7UUFDZixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELHNCQUFzQixDQUFDLE1BQU07UUFDekIsK0lBQStJO1FBQy9JLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsT0FBTztRQUNWLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDekIsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsRUFBTyxFQUFFLEVBQVE7UUFDM0MsSUFBSSxHQUFHLEtBQUssT0FBTyxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN4QyxPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksR0FBRyxLQUFLLGVBQWUsRUFBRSxDQUFDO1lBQzFCLHdFQUF3RTtZQUN4RSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUNoQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDO1FBQ0QsSUFBSSxHQUFHLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUUsS0FBSyxjQUFjLENBQUMsWUFBWSxJQUFJLEVBQUUsS0FBSyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzVHLENBQUM7UUFDRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGVBQWU7UUFDWCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxlQUFlLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25FLDJEQUEyRDtRQUMzRCx1REFBdUQ7UUFDdkQsc0RBQXNEO1FBQ3RELDZEQUE2RDtRQUM3RCxxQ0FBcUM7UUFDckMsSUFBSTtJQUNSLENBQUM7SUFFRCxVQUFVO1FBQ04sZ0dBQWdHO1FBQ2hHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDO2lGQXJRUSxnQkFBZ0Isd0ZBb0M0QixrQkFBa0I7b0VBcEM5RCxnQkFBZ0I7d0NBaUNYLFdBQVc7Ozs7Ozs7MkJBRmQsZ0JBQWdCOzs7Ozs7OENBcENoQjtnQkFDUCxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQzthQUN2Qzs7WUNyREwsK0JBcUMrQztZQUEzQyxBQTlCQSxBQURBLGtJQUFXLGFBQVMsS0FBQyx1SEFDVCxjQUFVLEtBQUMsMkhBOEJaLGtDQUE4QixLQUFDO1lBQzlDLGlCQUFJOztZQXpCQSx3QkFBZTtZQUxmLDRIQUFrRjtZQU9sRixBQURBLEFBRkEsQUFEQSxBQURBLEFBREEsQUFKQSxBQURBLEFBREEsQUFEQSxBQURBLEFBREQsNkNBQTJCLCtCQUNBLDJCQUNKLG1DQUNRLGtDQUNELHVCQUNYLCtDQUl3QixzQkFDekIsMEJBQ0ksa0JBQ1IsNkRBRW1DLDBDQUNYOzs7O2lGRHlDNUIsZ0JBQWdCO2NBUjVCLFNBQVM7MkJBQ0ksWUFBWSxhQUVYO29CQUNQLGtCQUFrQixrQkFBa0I7aUJBQ3ZDOztzQkF1QzZDLE1BQU07dUJBQUMsa0JBQWtCOztzQkFBRyxRQUFRO3FCQUw3QyxrQkFBa0I7a0JBQXRELFNBQVM7bUJBQUMsZ0JBQWdCO1lBQ1ksU0FBUztrQkFBL0MsU0FBUzttQkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBQ1YsZUFBZTtrQkFBekMsWUFBWTttQkFBQyxXQUFXO1lBQ0EsVUFBVTtrQkFBbEMsWUFBWTttQkFBQyxTQUFTOztrRkFsQ2QsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZiwgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIE9uSW5pdCwgT3B0aW9uYWwsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1BvcG92ZXJEaXJlY3RpdmV9IGZyb20gJ25neC1ib290c3RyYXAvcG9wb3Zlcic7XG5cbmltcG9ydCB7XG4gICAgYWRkQ2xhc3MsXG4gICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24sXG4gICAgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcyxcbiAgICBBcHAsXG4gICAgZmluZFJvb3RDb250YWluZXIsXG4gICAgc2V0Q1NTRnJvbU9ialxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge1xuICAgIEFVVE9DTE9TRV9UWVBFLFxuICAgIGdldENvbnRhaW5lclRhcmdldENsYXNzLFxuICAgIElXaWRnZXRDb25maWcsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIHN0eWxlclxufSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHtyZWdpc3RlclByb3BzfSBmcm9tICcuL3BvcG92ZXIucHJvcHMnO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2FwcC1wb3BvdmVyLXdyYXBwZXInO1xuY29uc3QgV0lER0VUX0NPTkZJRzogSVdpZGdldENvbmZpZyA9IHtcbiAgICB3aWRnZXRUeXBlOiAnd20tcG9wb3ZlcicsXG4gICAgaG9zdENsYXNzOiBERUZBVUxUX0NMU1xufTtcblxuY29uc3QgZXZlbnRzTWFwID0ge1xuICAgIGNsaWNrOiAnY2xpY2snLFxuICAgIGhvdmVyOiAnbW91c2VlbnRlcjpjbGljaycsXG4gICAgZGVmYXVsdDogJ2NsaWNrIG1vdXNlZW50ZXInXG59O1xuXG5sZXQgYWN0aXZlUG9wb3ZlcjogUG9wb3ZlckNvbXBvbmVudDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd3bS1wb3BvdmVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihQb3BvdmVyQ29tcG9uZW50KVxuICAgIF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBQb3BvdmVyQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBwdWJsaWMgZXZlbnQ6IHN0cmluZztcbiAgICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBjbG9zZVBvcG92ZXJUaW1lb3V0O1xuICAgIHB1YmxpYyByZWFkb25seSBwb3BvdmVyQ29udGFpbmVyQ2xzO1xuICAgIHB1YmxpYyBjYW5Qb3BvdmVyT3BlbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBXaWRnZXRzO1xuICAgIHByaXZhdGUgVmFyaWFibGVzO1xuICAgIHByaXZhdGUgQWN0aW9ucztcblxuICAgIHB1YmxpYyBpbnRlcmFjdGlvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBwb3BvdmVyYXJyb3c6IGJvb2xlYW47XG4gICAgcHVibGljIHBvcG92ZXJ3aWR0aDogc3RyaW5nO1xuICAgIHB1YmxpYyBwb3BvdmVyaGVpZ2h0OiBzdHJpbmc7XG4gICAgcHVibGljIGNvbnRlbnRhbmltYXRpb246IHN0cmluZztcbiAgICBwdWJsaWMgY29udGVudHNvdXJjZTogc3RyaW5nO1xuICAgIHB1YmxpYyBjb250ZW50OiBzdHJpbmc7XG4gICAgcHVibGljIHBvcG92ZXJwbGFjZW1lbnQ6IHN0cmluZztcbiAgICBwdWJsaWMgb3V0c2lkZWNsaWNrOiBib29sZWFuO1xuICAgIHB1YmxpYyBhdXRvY2xvc2U6IHN0cmluZztcblxuICAgIHB1YmxpYyBjbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xuICAgIHB1YmxpYyB0YWJpbmRleDogYW55O1xuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gICAgcHVibGljIGFkYXB0aXZlcG9zaXRpb246Ym9vbGVhbjtcbiAgICBwdWJsaWMgY29udGFpbmVyVGFyZ2V0OiBzdHJpbmc7XG4gICAgcHVibGljIGhpbnQ6IHN0cmluZztcblxuICAgIEBWaWV3Q2hpbGQoUG9wb3ZlckRpcmVjdGl2ZSkgcHJpdmF0ZSBic1BvcG92ZXJEaXJlY3RpdmU7XG4gICAgQFZpZXdDaGlsZCgnYW5jaG9yJywgeyBzdGF0aWM6IHRydWUgfSkgYW5jaG9yUmVmOiBFbGVtZW50UmVmO1xuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpIHBvcG92ZXJUZW1wbGF0ZTtcbiAgICBAQ29udGVudENoaWxkKCdwYXJ0aWFsJykgcGFydGlhbFJlZjtcblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIHByaXZhdGUgYXBwOiBBcHAsIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbnRhaW5lckNscyA9IGBhcHAtcG9wb3Zlci0ke3RoaXMud2lkZ2V0SWR9YDtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG1laHRvZCBpcyB1c2VkIHRvIHNob3cvb3BlbiB0aGUgcG9wb3Zlci4gVGhpcyByZWZlcnMgdG8gdGhlIHNhbWUgbWV0aG9kIHNob3dQb3BvdmVyLlxuICAgIHB1YmxpYyBvcGVuKCkge1xuICAgICAgICB0aGlzLnNob3dQb3BvdmVyKCk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZWh0b2QgaXMgdXNlZCB0byBoaWRlL2Nsb3NlIHRoZSBwb3BvdmVyLlxuICAgIHB1YmxpYyBjbG9zZSgpIHtcbiAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyIG9uIGhpZGluZyBwb3BvdmVyXG4gICAgcHVibGljIG9uSGlkZGVuKCkge1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2hpZGUnLCB7JGV2ZW50OiB7dHlwZTogJ2hpZGUnfX0pO1xuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Rm9jdXNUb1BvcG92ZXJMaW5rKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSwgMTApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRqdXN0UG9wb3ZlckFycm93UG9zaXRpb24ocG9wb3ZlckVsZW0sIHBvcG92ZXJMZWZ0U2hpZnQpIHtcbiAgICAgICAgdGhpcy5ic1BvcG92ZXJEaXJlY3RpdmUuX3BvcG92ZXIuX25nWm9uZS5vblN0YWJsZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgcG9wb3ZlckVsZW0uZmluZCgnLnBvcG92ZXItYXJyb3cnKS5jc3MoJ2xlZnQnLCBwb3BvdmVyTGVmdFNoaWZ0ICsgJ3B4Jyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlUG9wb3ZlclBvc3Rpb24oZWxlbWVudCkge1xuXG4gICAgICAgIGNvbnN0IHBvcG92ZXJFbGVtID0gJChlbGVtZW50KTtcbiAgICAgICAgbGV0IHBvcG92ZXJMZWZ0ID0gIHBvcG92ZXJFbGVtLm9mZnNldCgpLmxlZnQ7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJXaWR0aCA9IHBvcG92ZXJFbGVtWzBdLm9mZnNldFdpZHRoO1xuICAgICAgICBjb25zdCB2aWV3UG9ydFdpZHRoID0gJCh3aW5kb3cpLndpZHRoKCk7XG4gICAgICAgIGNvbnN0IHBhcmVudERpbWVzaW9uID0gdGhpcy5hbmNob3JSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgLy8gQWRqdXN0aW5nIHBvcG92ZXIgcG9zaXRpb24sIGlmIGl0IGlzIG5vdCB2aXNpYmxlIGF0IGxlZnQgc2lkZVxuICAgICAgICBpZiAocG9wb3ZlckxlZnQgPCAwKSB7XG4gICAgICAgICAgICBhZGp1c3RDb250YWluZXJQb3NpdGlvbihwb3BvdmVyRWxlbSwgdGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLmJzUG9wb3ZlckRpcmVjdGl2ZS5fcG9wb3Zlcik7XG4gICAgICAgICAgICBjb25zdCBwb3BvdmVyTGVmdFNoaWZ0ID0gNDtcbiAgICAgICAgICAgIGNvbnN0IGFycm93TGVmdFNoaWZ0ID0gKHBhcmVudERpbWVzaW9uLmxlZnQgKyAocGFyZW50RGltZXNpb24ud2lkdGggLyAyKSkgLSBwb3BvdmVyTGVmdFNoaWZ0O1xuICAgICAgICAgICAgdGhpcy5hZGp1c3RQb3BvdmVyQXJyb3dQb3NpdGlvbihwb3BvdmVyRWxlbSwgYXJyb3dMZWZ0U2hpZnQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFkanVzdGluZyBwb3BvdmVyIHBvc2l0aW9uLCBpZiBpdCBpcyBub3QgdmlzaWJsZSBhdCByaWdodCBzaWRlXG4gICAgICAgIGlmIChwb3BvdmVyTGVmdCArIHBvcG92ZXJXaWR0aCA+IHZpZXdQb3J0V2lkdGgpIHtcbiAgICAgICAgICAgIGFkanVzdENvbnRhaW5lclJpZ2h0RWRnZXMocG9wb3ZlckVsZW0sIHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcy5ic1BvcG92ZXJEaXJlY3RpdmUuX3BvcG92ZXIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcG9wb3ZlckxlZnQgPSBwb3BvdmVyRWxlbS5vZmZzZXQoKS5sZWZ0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcG92ZXJMZWZ0QWRqdXN0ID0gKHBvcG92ZXJMZWZ0ICsgcG9wb3ZlcldpZHRoKSAtIHZpZXdQb3J0V2lkdGg7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9wb3ZlckxlZnRTaGlmdCA9ICBwb3BvdmVyTGVmdCAtIHBvcG92ZXJMZWZ0QWRqdXN0O1xuICAgICAgICAgICAgICAgIGxldCBhcnJvd0xlZnRTaGlmdCA7XG4gICAgICAgICAgICAgICAgaWYocG9wb3ZlckxlZnQ8PTEwMCl7XG4gICAgICAgICAgICAgICAgICAgIGFycm93TGVmdFNoaWZ0ID0gIChwYXJlbnREaW1lc2lvbi5sZWZ0ICsgKHBhcmVudERpbWVzaW9uLndpZHRoIC8gMikpIC0gcG9wb3ZlckxlZnQ7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGFycm93TGVmdFNoaWZ0ID0gKHBhcmVudERpbWVzaW9uLmxlZnQgKyAocGFyZW50RGltZXNpb24ud2lkdGggLyAyKSkgLSBwb3BvdmVyTGVmdFNoaWZ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZih2aWV3UG9ydFdpZHRoID4gNTAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXJyb3dMZWZ0U2hpZnQgKz0gMzA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RQb3BvdmVyQXJyb3dQb3NpdGlvbihwb3BvdmVyRWxlbSwgYXJyb3dMZWZ0U2hpZnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyIG9uIHNob3dpbmcgcG9wb3ZlclxuICAgIHB1YmxpYyBvblNob3duKCkge1xuICAgICAgICBjb25zdCByb290ID0gZmluZFJvb3RDb250YWluZXIodGhpcy4kZWxlbWVudCk7XG4gICAgICAgIC8vIGlmIHBhZ2Ugc3R5bGVzIGhhdmUgdG8gYmUgYXBwbGllZCB0byBwb3BvdmVyIHRoZW4gcG9wb3ZlciBoYXMgdG8gYmUgY2hpbGQgb2YgcGFnZSBlbGVtZW50LlxuICAgICAgICBpZiAocm9vdCkge1xuICAgICAgICAgICAgJCgnYm9keSA+IHBvcG92ZXItY29udGFpbmVyJykud3JhcCgnPCcgKyByb290ICsgJy8+Jyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRml4IGZvciBbV01TLTI1MTI1XTogTm90IGNsb3NpbmcgdGhlIGV4aXN0aW5nIG9wZW5lZCBwb3BvdmVycyB3aGVuIHRoZSBhdXRvY2xvc2UgcHJvcGVydHkgaXMgRElTQUJMRURcbiAgICAgICAgaWYgKGFjdGl2ZVBvcG92ZXIgJiYgYWN0aXZlUG9wb3Zlci5pc09wZW4gJiYgYWN0aXZlUG9wb3Zlci5hdXRvY2xvc2UgIT09IEFVVE9DTE9TRV9UWVBFLkRJU0FCTEVEKSB7XG4gICAgICAgICAgICBhY3RpdmVQb3BvdmVyLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgYWN0aXZlUG9wb3ZlciA9IHRoaXM7XG4gICAgICAgIGFjdGl2ZVBvcG92ZXIuaXNPcGVuID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBwb3BvdmVyQ29udGFpbmVyICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMucG9wb3ZlckNvbnRhaW5lckNsc31gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgc2V0Q1NTRnJvbU9iaihwb3BvdmVyQ29udGFpbmVyLCB7XG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMucG9wb3ZlcmhlaWdodCxcbiAgICAgICAgICAgIG1pbldpZHRoOiB0aGlzLnBvcG92ZXJ3aWR0aCxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLnBvcG92ZXJ3aWR0aFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXJhcnJvdykge1xuICAgICAgICAgICAgYWRkQ2xhc3MocG9wb3ZlckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuYXJyb3cnKSBhcyBIVE1MRWxlbWVudCwgJ2hpZGRlbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmludGVyYWN0aW9uID09PSAnaG92ZXInIHx8IHRoaXMuaW50ZXJhY3Rpb24gPT09ICdkZWZhdWx0Jykge1xuXG4gICAgICAgICAgICAvLyBkbyBub3QgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaGVyZVxuICAgICAgICAgICAgLy8gYXR0YWNoaW5nIHRoZSBldmVudCB0aGlzIHdheSB3aWxsIG92ZXJyaWRlIHRoZSBleGlzdGluZyBldmVudCBoYW5kbGVyc1xuICAgICAgICAgICAgcG9wb3ZlckNvbnRhaW5lci5vbm1vdXNlZW50ZXIgPSAoKSA9PiBjbGVhclRpbWVvdXQodGhpcy5jbG9zZVBvcG92ZXJUaW1lb3V0KTtcbiAgICAgICAgICAgIHBvcG92ZXJDb250YWluZXIub25tb3VzZWxlYXZlID0gKCkgPT4gdGhpcy5oaWRlUG9wb3ZlcigpO1xuICAgICAgICAgICAgdGhpcy5hbmNob3JSZWYubmF0aXZlRWxlbWVudC5vbm1vdXNlZW50ZXIgPSAoKSA9PiBjbGVhclRpbWVvdXQodGhpcy5jbG9zZVBvcG92ZXJUaW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMuYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQub25tb3VzZWxlYXZlID0gKCkgPT4gdGhpcy5oaWRlUG9wb3ZlcigpO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbmNob3JSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRlUmVnaXN0ZXIgPSB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHBvcG92ZXJDb250YWluZXIsICdrZXlkb3duLmVzYycsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNldEZvY3VzVG9Qb3BvdmVyTGluaygpO1xuICAgICAgICAgICAgZGVSZWdpc3RlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcG9wb3ZlclN0YXJ0QnRuOiBIVE1MRWxlbWVudCA9IHBvcG92ZXJDb250YWluZXIucXVlcnlTZWxlY3RvcignLnBvcG92ZXItc3RhcnQnKTtcbiAgICAgICAgY29uc3QgcG9wb3ZlckVuZEJ0bjogSFRNTEVsZW1lbnQgPSBwb3BvdmVyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5wb3BvdmVyLWVuZCcpO1xuICAgICAgICBwb3BvdmVyU3RhcnRCdG4ub25rZXlkb3duID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgU2hpZnQrVGFiIGtleVxuICAgICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJzUG9wb3ZlckRpcmVjdGl2ZS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzVG9Qb3BvdmVyTGluaygpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7ICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBwb3BvdmVyRW5kQnRuLm9ua2V5ZG93biA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFRhYiBrZXlcbiAgICAgICAgICAgIGlmICghZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICAgICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLmhpZGUoKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNUb1BvcG92ZXJMaW5rKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy9XaGVuZXZlciBhdXRvY2xvc2UgcHJvcGVydHkgaXMgc2V0IHRvICdhbHdheXMnLCBhZGRpbmcgdGhlIG9uY2xpY2sgbGlzdGVuZXIgdG8gdGhlIHBvcG92ZXIgY29udGFpbmVyIHRvIGNsb3NlIHRoZSBwb3BvdmVyLlxuICAgICAgICBpZiAodGhpcy5hdXRvY2xvc2UgPT09IEFVVE9DTE9TRV9UWVBFLkFMV0FZUykge1xuICAgICAgICAgICAgcG9wb3ZlckNvbnRhaW5lci5vbmNsaWNrID0gKCkgPT4gdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwb3BvdmVyU3RhcnRCdG4uZm9jdXMoKSwgNTApO1xuICAgICAgICAvLyBBZGp1c3RpbmcgcG9wb3ZlciBwb3NpdGlvbiBpZiB0aGUgcG9wb3ZlciBwbGFjZW1lbnQgaXMgdG9wIG9yIGJvdHRvbVxuICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWRhcHRpdmVwb3NpdGlvbiApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVBvcG92ZXJQb3N0aW9uKHBvcG92ZXJDb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdHJpZ2dlcmluZyBvbmxvYWQgYW5kIG9uc2hvdyBldmVudHMgYWZ0ZXIgcG9wb3ZlciBjb250ZW50IGhhcyByZW5kZXJlZFxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyUG9wb3ZlckV2ZW50cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0cmlnZ2VyUG9wb3ZlckV2ZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGVudHNvdXJjZSA9PT0gJ3BhcnRpYWwnKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5jZWxTdWJzY3JpcHRpb24gPSB0aGlzLmFwcC5zdWJzY3JpYmUoJ3BhcnRpYWxMb2FkZWQnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhckVsZSA9IHRoaXMucGFydGlhbFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIGxldCBwYXJ0aWFsU2NvcGU7XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyRWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRpYWxTY29wZSAgPSBwYXJFbGUud2lkZ2V0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLldpZGdldHMgICA9IHBhcnRpYWxTY29wZS5XaWRnZXRzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLlZhcmlhYmxlcyA9IHBhcnRpYWxTY29wZS5WYXJpYWJsZXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuQWN0aW9ucyAgID0gcGFydGlhbFNjb3BlLkFjdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnbG9hZCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Nob3cnLCB7JGV2ZW50OiB7dHlwZTogJ3Nob3cnfX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYW5jZWxTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5XaWRnZXRzICAgPSB0aGlzLnZpZXdQYXJlbnQuV2lkZ2V0cztcbiAgICAgICAgICAgIHRoaXMuVmFyaWFibGVzID0gdGhpcy52aWV3UGFyZW50LlZhcmlhYmxlcztcbiAgICAgICAgICAgIHRoaXMuQWN0aW9ucyAgID0gdGhpcy52aWV3UGFyZW50LkFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Nob3cnLCB7JGV2ZW50OiB7dHlwZTogJ3Nob3cnfX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWRlUG9wb3ZlcigpIHtcbiAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXJUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmlzT3BlbiA9IGZhbHNlLCA1MDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd1BvcG92ZXIoKSB7XG4gICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLnNob3coKTtcbiAgICB9XG5cbiAgICBvblBvcG92ZXJBbmNob3JLZXlkb3duKCRldmVudCkge1xuICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBjb250ZW50IGF2YWlsYWJsZSwgdGhlIHBvcG92ZXIgc2hvdWxkIG5vdCBvcGVuIHRocm91Z2ggZW50ZXIga2V5LiBTbyBjaGVja2luZyB3aGV0aGVyIHRoZSBjYW5Qb3BvdmVyT3BlbiBmbGFnIGlzIHRydWUgb3Igbm90LlxuICAgICAgICBpZiAoIXRoaXMuY2FuUG9wb3Zlck9wZW4pIHtcbiAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdjbGFzcycgfHwga2V5ID09PSAndGFiaW5kZXgnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2NvbnRlbnRzb3VyY2UnKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBwYXJ0aWFsIGNvbnRlbnQgYXZhaWxhYmxlLCB0aGUgcG9wb3ZlciBzaG91bGQgbm90IG9wZW5cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRzb3VyY2UgPT09ICdwYXJ0aWFsJyAmJiAhdGhpcy5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5Qb3BvdmVyT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdjb250ZW50JyAmJiBudikge1xuICAgICAgICAgICAgdGhpcy5jYW5Qb3BvdmVyT3BlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2F1dG9jbG9zZScpIHtcbiAgICAgICAgICAgIHRoaXMub3V0c2lkZWNsaWNrID0gKG52ID09PSBBVVRPQ0xPU0VfVFlQRS5PVVRTSURFQ0xJQ0sgfHwgbnYgPT09IEFVVE9DTE9TRV9UWVBFLkFMV0FZUykgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuZXZlbnQgPSBldmVudHNNYXBbdGhpcy5pbnRlcmFjdGlvbl07XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgc3R5bGVyKHRoaXMuYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lclRhcmdldCA9IGdldENvbnRhaW5lclRhcmdldENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIC8vIGxldCBwYXJlbnRFbGVtUG9wb3ZlciA9ICQodGhpcy5uYXRpdmVFbGVtZW50KS5wYXJlbnRzKCk7XG4gICAgICAgIC8vIGlmIChwYXJlbnRFbGVtUG9wb3Zlci5jbG9zZXN0KCdbd21UYWJsZV0nKS5sZW5ndGggfHxcbiAgICAgICAgLy8gICAgIHBhcmVudEVsZW1Qb3BvdmVyLmNsb3Nlc3QoJ1t3bXRhYnNdJykubGVuZ3RoIHx8XG4gICAgICAgIC8vICAgICBwYXJlbnRFbGVtUG9wb3Zlci5jbG9zZXN0KCdtb2RhbC1jb250YWluZXInKS5sZW5ndGgpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuYWRhcHRpdmVwb3NpdGlvbiA9IGZhbHNlO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgbmdPbkRldGFjaCgpIHtcbiAgICAgICAgLy8gSGlkZSB0aGUgcG9wb3ZlciBjb250YWluZXIgd2hpbGUgYXR0YWNoaW5nIHRoZSBuZXh0IGNvbXBvbmVudCBhcyBwYXJ0IG9mIHBhZ2UgcmV1c2Ugc3RyYXRlZ3kuXG4gICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLmhpZGUoKTtcbiAgICB9XG59XG4iLCI8YSBbcG9wb3Zlcl09XCJwb3BvdmVyVGVtcGxhdGVcIlxuICAgIFtwb3BvdmVyQ29udGV4dF09XCJjb250ZXh0XCJcbiAgICBbcG9wb3ZlclRpdGxlXT1cInRpdGxlXCJcbiAgICBbcGxhY2VtZW50XT1cInBvcG92ZXJwbGFjZW1lbnRcIlxuICAgIFtvdXRzaWRlQ2xpY2tdPVwib3V0c2lkZWNsaWNrXCJcbiAgICBbdHJpZ2dlcnNdPVwiZXZlbnRcIlxuICAgIChvblNob3duKT1cIm9uU2hvd24oKVwiXG4gICAgKG9uSGlkZGVuKT1cIm9uSGlkZGVuKClcIlxuICAgIGNvbnRhaW5lckNsYXNzPVwiYXBwLXBvcG92ZXIgYW5pbWF0ZWQge3tjb250ZW50YW5pbWF0aW9ufX0ge3twb3BvdmVyQ29udGFpbmVyQ2xzfX1cIlxuICAgIFtjb250YWluZXJdPVwiY29udGFpbmVyVGFyZ2V0IHx8ICcud20tYXBwJ1wiXG4gICAgW2lzT3Blbl09XCJpc09wZW5cIlxuICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgW25hbWVdPVwibmFtZVwiXG4gICAgW2NsYXNzXT1cImNsYXNzXCJcbiAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGUtcG9wb3Zlcic6ICFjYW5Qb3BvdmVyT3Blbn1cIlxuICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImFkYXB0aXZlcG9zaXRpb25cIlxuICAgYm91bmRhcmllc0VsZW1lbnQ9XCJ3aW5kb3dcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaGludCB8fCAnUG9wb3ZlciBtZW51J1wiXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIlxuICAgIHJvbGU9XCJidXR0b25cIlxuICAgICNhbmNob3JcbiAgICBuYW1lLmJpbmQ9XCJuYW1lXCJcbiAgICB3bUFuY2hvclxuICAgIGFuaW1hdGlvbi5iaW5kPVwiYW5pbWF0aW9uXCJcbiAgICBiYWRnZXZhbHVlLmJpbmQ9XCJiYWRnZXZhbHVlXCJcbiAgICBjYXB0aW9uLmJpbmQ9XCJjYXB0aW9uXCJcbiAgICBlbmNvZGV1cmwuYmluZD1cImVuY29kZXVybFwiXG4gICAgaGludC5iaW5kPVwiaGludFwiXG4gICAgaHlwZXJsaW5rLmJpbmQ9XCJoeXBlcmxpbmtcIlxuICAgIGljb251cmwuYmluZD1cImljb251cmxcIlxuICAgIGljb253aWR0aC5iaW5kPVwiaWNvbndpZHRoXCJcbiAgICBpY29uaGVpZ2h0LmJpbmQ9XCJpY29uaGVpZ2h0XCJcbiAgICBpY29ubWFyZ2luLmJpbmQ9XCJpY29ubWFyZ2luXCJcbiAgICBpY29uY2xhc3MuYmluZD1cImljb25jbGFzc1wiXG4gICAgaWNvbnBvc2l0aW9uLmJpbmQ9XCJpY29ucG9zaXRpb25cIlxuICAgIHNob3J0Y3V0a2V5LmJpbmQ9XCJzaG9ydGN1dGtleVwiXG4gICAgdGFiaW5kZXguYmluZD1cInRhYmluZGV4XCJcbiAgICAoa2V5ZG93bik9XCJvblBvcG92ZXJBbmNob3JLZXlkb3duKCRldmVudClcIj5cbjwvYT5cbiJdfQ==
397
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PopoverComponent, { className: "PopoverComponent", filePath: "popover.component.ts", lineNumber: 60 }); })();
398
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvbmF2aWdhdGlvbi9wb3BvdmVyL3NyYy9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9uYXZpZ2F0aW9uL3BvcG92ZXIvc3JjL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sUUFBUSxFQUVSLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE9BQU8sRUFDSCxRQUFRLEVBQ1IsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6QixHQUFHLEVBQ0gsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDaEIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUNILGNBQWMsRUFDZCx1QkFBdUIsRUFFdkIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixNQUFNLEVBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7OztBQUk5QyxNQUFNLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQztBQUMxQyxNQUFNLGFBQWEsR0FBa0I7SUFDakMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsU0FBUyxFQUFFLFdBQVc7Q0FDekIsQ0FBQztBQUVGLE1BQU0sU0FBUyxHQUFHO0lBQ2QsS0FBSyxFQUFFLE9BQU87SUFDZCxLQUFLLEVBQUUsa0JBQWtCO0lBQ3pCLE9BQU8sRUFBRSxrQkFBa0I7Q0FDOUIsQ0FBQztBQUVGLElBQUks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QUFlO2tCQUF6QyxZQUFZO21CQUFDLFdBQVc7WUFDQSxVQUFVO2tCQUFsQyxZQUFZO21CQUFDLFNBQVM7O2tGQXhDZCxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1BvcG92ZXJEaXJlY3RpdmV9IGZyb20gJ25neC1ib290c3RyYXAvcG9wb3Zlcic7XG5cbmltcG9ydCB7XG4gICAgYWRkQ2xhc3MsXG4gICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24sXG4gICAgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcyxcbiAgICBBcHAsXG4gICAgZmluZFJvb3RDb250YWluZXIsXG4gICAgc2V0Q1NTRnJvbU9ialxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge1xuICAgIEFVVE9DTE9TRV9UWVBFLFxuICAgIGdldENvbnRhaW5lclRhcmdldENsYXNzLFxuICAgIElXaWRnZXRDb25maWcsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIHN0eWxlclxufSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHtyZWdpc3RlclByb3BzfSBmcm9tICcuL3BvcG92ZXIucHJvcHMnO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2FwcC1wb3BvdmVyLXdyYXBwZXInO1xuY29uc3QgV0lER0VUX0NPTkZJRzogSVdpZGdldENvbmZpZyA9IHtcbiAgICB3aWRnZXRUeXBlOiAnd20tcG9wb3ZlcicsXG4gICAgaG9zdENsYXNzOiBERUZBVUxUX0NMU1xufTtcblxuY29uc3QgZXZlbnRzTWFwID0ge1xuICAgIGNsaWNrOiAnY2xpY2snLFxuICAgIGhvdmVyOiAnbW91c2VlbnRlcjpjbGljaycsXG4gICAgZGVmYXVsdDogJ2NsaWNrIG1vdXNlZW50ZXInXG59O1xuXG5sZXQgYWN0aXZlUG9wb3ZlcjogUG9wb3ZlckNvbXBvbmVudDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd3bS1wb3BvdmVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihQb3BvdmVyQ29tcG9uZW50KVxuICAgIF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBQb3BvdmVyQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBwdWJsaWMgZXZlbnQ6IHN0cmluZztcbiAgICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBjbG9zZVBvcG92ZXJUaW1lb3V0O1xuICAgIHB1YmxpYyByZWFkb25seSBwb3BvdmVyQ29udGFpbmVyQ2xzO1xuICAgIHB1YmxpYyBjYW5Qb3BvdmVyT3BlbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBXaWRnZXRzO1xuICAgIHByaXZhdGUgVmFyaWFibGVzO1xuICAgIHByaXZhdGUgQWN0aW9ucztcblxuICAgIHB1YmxpYyBpbnRlcmFjdGlvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBwb3BvdmVyYXJyb3c6IGJvb2xlYW47XG4gICAgcHVibGljIHBvcG92ZXJ3aWR0aDogc3RyaW5nO1xuICAgIHB1YmxpYyBwb3BvdmVyaGVpZ2h0OiBzdHJpbmc7XG4gICAgcHVibGljIGNvbnRlbnRhbmltYXRpb246IHN0cmluZztcbiAgICBwdWJsaWMgY29udGVudHNvdXJjZTogc3RyaW5nO1xuICAgIHB1YmxpYyBjb250ZW50OiBzdHJpbmc7XG4gICAgcHVibGljIHBvcG92ZXJwbGFjZW1lbnQ6IHN0cmluZztcbiAgICBwdWJsaWMgb3V0c2lkZWNsaWNrOiBib29sZWFuO1xuICAgIHB1YmxpYyBhdXRvY2xvc2U6IHN0cmluZztcblxuICAgIHB1YmxpYyBjbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xuICAgIHB1YmxpYyB0YWJpbmRleDogYW55O1xuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gICAgcHVibGljIGFkYXB0aXZlcG9zaXRpb246Ym9vbGVhbjtcbiAgICBwdWJsaWMgY29udGFpbmVyVGFyZ2V0OiBzdHJpbmc7XG4gICAgcHVibGljIGhpbnQ6IHN0cmluZztcbiAgICBwdWJsaWMgYXJpYWxhYmVsOiBzdHJpbmc7XG4gICAgcHVibGljIGNhcHRpb246IHN0cmluZztcbiAgICBwdWJsaWMgYmFkZ2V2YWx1ZTogc3RyaW5nO1xuICAgIHByaXZhdGUgZG9jdW1lbnRDbGlja0hhbmRsZXI6IChlOiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIHByaXZhdGUgaXNDbG9zaW5nUHJvZ3JhbW1hdGljYWxseSA9IGZhbHNlO1xuICAgIHByaXZhdGUgc3RhdGljIGFjdGl2ZVBvcG92ZXJzOiBQb3BvdmVyQ29tcG9uZW50W10gPSBbXTtcblxuICAgIEBWaWV3Q2hpbGQoUG9wb3ZlckRpcmVjdGl2ZSkgcHJpdmF0ZSBic1BvcG92ZXJEaXJlY3RpdmU7XG4gICAgQFZpZXdDaGlsZCgnYW5jaG9yJywgeyBzdGF0aWM6IHRydWUgfSkgYW5jaG9yUmVmOiBFbGVtZW50UmVmO1xuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpIHBvcG92ZXJUZW1wbGF0ZTtcbiAgICBAQ29udGVudENoaWxkKCdwYXJ0aWFsJykgcGFydGlhbFJlZjtcblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIHByaXZhdGUgYXBwOiBBcHAsIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgZXhwbGljaXRDb250ZXh0KTtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29udGFpbmVyQ2xzID0gYGFwcC1wb3BvdmVyLSR7dGhpcy53aWRnZXRJZH1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBEb2N1bWVudENsaWNrSGFuZGxlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrSGFuZGxlciwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdGhpcy5kb2N1bWVudENsaWNrSGFuZGxlciA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzT3BlbikgcmV0dXJuO1xuICAgIFxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIFxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNsaWNrZWQgZWxlbWVudCBvciBhbnkgb2YgaXRzIHBhcmVudHMgaXMgcGFydCBvZiB0aGUgZGF0ZXBpY2tlciwgZHJvcGRvd24sIG9yIHR5cGVhaGVhZCBjb250YWluZXJzXG4gICAgICAgICAgICBjb25zdCBpc0luc2lkZVNwZWNpYWxDb250YWluZXIgPSAhIShcbiAgICAgICAgICAgICAgICB0YXJnZXQuY2xvc2VzdCgnLmJzLWRhdGVwaWNrZXItY29udGFpbmVyJykgfHwgXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmNsb3Nlc3QoXCIuZHJvcGRvd24tbWVudVwiKVxuICAgICAgICAgICAgKTtcbiAgICBcbiAgICAgICAgICAgIGlmIChpc0luc2lkZVNwZWNpYWxDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2xpY2sgd2FzIGluc2lkZSBvbmUgb2YgdGhlc2UgY29udGFpbmVycywgd2UgZG8gbm90IGNsb3NlIHRoZSBwb3BvdmVyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgY29uc3QgY2xpY2tlZFBvcG92ZXJJbmRleCA9IFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMuZmluZEluZGV4KHBvcG92ZXIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcG92ZXJDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtwb3BvdmVyLnBvcG92ZXJDb250YWluZXJDbHN9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvcG92ZXJDb250YWluZXI/LmNvbnRhaW5zKHRhcmdldCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW4gPyB0aGlzLmNsb3NlKCkgOiB0aGlzLm9wZW4oKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIGlmIChjbGlja2VkUG9wb3ZlckluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIC8vIENsaWNrIGlzIG91dHNpZGUgYWxsIHBvcG92ZXJzXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3V0c2lkZWNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VBbGxQb3BvdmVycygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xpY2sgaXMgaW5zaWRlIGEgcG9wb3ZlclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VJbm5lclBvcG92ZXJzKGNsaWNrZWRQb3BvdmVySW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIFxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIsIHRydWUpO1xuICAgIH1cbiAgICBcblxuICAgIHByaXZhdGUgY2xvc2VBbGxQb3BvdmVycygpIHtcbiAgICAgICAgUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5mb3JFYWNoKHBvcG92ZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHBvcG92ZXIub3V0c2lkZWNsaWNrKSB7XG4gICAgICAgICAgICAgICAgcG9wb3Zlci5pc0Nsb3NpbmdQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwb3BvdmVyLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VJbm5lclBvcG92ZXJzKGNsaWNrZWRJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBjbGlja2VkSW5kZXggKyAxOyBpIDwgUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcG9wb3ZlciA9IFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnNbaV07XG4gICAgICAgICAgICBpZiAocG9wb3Zlci5vdXRzaWRlY2xpY2spIHtcbiAgICAgICAgICAgICAgICBwb3BvdmVyLmlzQ2xvc2luZ1Byb2dyYW1tYXRpY2FsbHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHBvcG92ZXIuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNDaGlsZFBvcG92ZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhISQodGhpcy5uYXRpdmVFbGVtZW50KS5jbG9zZXN0KCcucG9wb3ZlcicpLmxlbmd0aDtcbiAgICB9XG4gICAgLy8gVGhpcyBtZWh0b2QgaXMgdXNlZCB0byBzaG93L29wZW4gdGhlIHBvcG92ZXIuIFRoaXMgcmVmZXJzIHRvIHRoZSBzYW1lIG1ldGhvZCBzaG93UG9wb3Zlci5cbiAgICBwdWJsaWMgb3BlbigpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wb3ZlcigpO1xuICAgICAgICBpZiAoIVBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMuaW5jbHVkZXModGhpcykpIHtcbiAgICAgICAgICAgIFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMucHVzaCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZWh0b2QgaXMgdXNlZCB0byBoaWRlL2Nsb3NlIHRoZSBwb3BvdmVyLlxuICAgIHB1YmxpYyBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmlzQ2xvc2luZ1Byb2dyYW1tYXRpY2FsbHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLmhpZGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5pbmRleE9mKHRoaXMpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBQb3BvdmVyQ29tcG9uZW50LmFjdGl2ZVBvcG92ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyIG9uIGhpZGluZyBwb3BvdmVyXG4gICAgcHVibGljIG9uSGlkZGVuKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNDaGlsZFBvcG92ZXIoKSB8fCB0aGlzLmlzQ2xvc2luZ1Byb2dyYW1tYXRpY2FsbHkpIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnaGlkZScsIHskZXZlbnQ6IHt0eXBlOiAnaGlkZSd9fSk7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGFjdGl2ZVBvcG92ZXIgPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVQb3BvdmVyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzQ2xvc2luZ1Byb2dyYW1tYXRpY2FsbHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZvY3VzVG9Qb3BvdmVyTGluaygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFuY2hvclJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCksIDEwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkanVzdFBvcG92ZXJBcnJvd1Bvc2l0aW9uKHBvcG92ZXJFbGVtLCBwb3BvdmVyTGVmdFNoaWZ0KSB7XG4gICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLl9wb3BvdmVyLl9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHBvcG92ZXJFbGVtLmZpbmQoJy5wb3BvdmVyLWFycm93JykuY3NzKCdsZWZ0JywgcG9wb3ZlckxlZnRTaGlmdCArICdweCcpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZVBvcG92ZXJQb3N0aW9uKGVsZW1lbnQpIHtcblxuICAgICAgICBjb25zdCBwb3BvdmVyRWxlbSA9ICQoZWxlbWVudCk7XG4gICAgICAgIGxldCBwb3BvdmVyTGVmdCA9ICBwb3BvdmVyRWxlbS5vZmZzZXQoKS5sZWZ0O1xuICAgICAgICBjb25zdCBwb3BvdmVyV2lkdGggPSBwb3BvdmVyRWxlbVswXS5vZmZzZXRXaWR0aDtcbiAgICAgICAgY29uc3Qgdmlld1BvcnRXaWR0aCA9ICQod2luZG93KS53aWR0aCgpO1xuICAgICAgICBjb25zdCBwYXJlbnREaW1lc2lvbiA9IHRoaXMuYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIC8vIEFkanVzdGluZyBwb3BvdmVyIHBvc2l0aW9uLCBpZiBpdCBpcyBub3QgdmlzaWJsZSBhdCBsZWZ0IHNpZGVcbiAgICAgICAgaWYgKHBvcG92ZXJMZWZ0IDwgMCkge1xuICAgICAgICAgICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24ocG9wb3ZlckVsZW0sIHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcy5ic1BvcG92ZXJEaXJlY3RpdmUuX3BvcG92ZXIpO1xuICAgICAgICAgICAgY29uc3QgcG9wb3ZlckxlZnRTaGlmdCA9IDQ7XG4gICAgICAgICAgICBjb25zdCBhcnJvd0xlZnRTaGlmdCA9IChwYXJlbnREaW1lc2lvbi5sZWZ0ICsgKHBhcmVudERpbWVzaW9uLndpZHRoIC8gMikpIC0gcG9wb3ZlckxlZnRTaGlmdDtcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0UG9wb3ZlckFycm93UG9zaXRpb24ocG9wb3ZlckVsZW0sIGFycm93TGVmdFNoaWZ0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBZGp1c3RpbmcgcG9wb3ZlciBwb3NpdGlvbiwgaWYgaXQgaXMgbm90IHZpc2libGUgYXQgcmlnaHQgc2lkZVxuICAgICAgICBpZiAocG9wb3ZlckxlZnQgKyBwb3BvdmVyV2lkdGggPiB2aWV3UG9ydFdpZHRoKSB7XG4gICAgICAgICAgICBhZGp1c3RDb250YWluZXJSaWdodEVkZ2VzKHBvcG92ZXJFbGVtLCB0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLl9wb3BvdmVyKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHBvcG92ZXJMZWZ0ID0gcG9wb3ZlckVsZW0ub2Zmc2V0KCkubGVmdDtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3BvdmVyTGVmdEFkanVzdCA9IChwb3BvdmVyTGVmdCArIHBvcG92ZXJXaWR0aCkgLSB2aWV3UG9ydFdpZHRoO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcG92ZXJMZWZ0U2hpZnQgPSAgcG9wb3ZlckxlZnQgLSBwb3BvdmVyTGVmdEFkanVzdDtcbiAgICAgICAgICAgICAgICBsZXQgYXJyb3dMZWZ0U2hpZnQgO1xuICAgICAgICAgICAgICAgIGlmKHBvcG92ZXJMZWZ0PD0xMDApe1xuICAgICAgICAgICAgICAgICAgICBhcnJvd0xlZnRTaGlmdCA9ICAocGFyZW50RGltZXNpb24ubGVmdCArIChwYXJlbnREaW1lc2lvbi53aWR0aCAvIDIpKSAtIHBvcG92ZXJMZWZ0O1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBhcnJvd0xlZnRTaGlmdCA9IChwYXJlbnREaW1lc2lvbi5sZWZ0ICsgKHBhcmVudERpbWVzaW9uLndpZHRoIC8gMikpIC0gcG9wb3ZlckxlZnRTaGlmdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYodmlld1BvcnRXaWR0aCA+IDUwMCl7XG4gICAgICAgICAgICAgICAgICAgIGFycm93TGVmdFNoaWZ0ICs9IDMwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0UG9wb3ZlckFycm93UG9zaXRpb24ocG9wb3ZlckVsZW0sIGFycm93TGVmdFNoaWZ0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciBvbiBzaG93aW5nIHBvcG92ZXJcbiAgICBwdWJsaWMgb25TaG93bigpIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IGZpbmRSb290Q29udGFpbmVyKHRoaXMuJGVsZW1lbnQpO1xuICAgICAgICAvLyBpZiBwYWdlIHN0eWxlcyBoYXZlIHRvIGJlIGFwcGxpZWQgdG8gcG9wb3ZlciB0aGVuIHBvcG92ZXIgaGFzIHRvIGJlIGNoaWxkIG9mIHBhZ2UgZWxlbWVudC5cbiAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgICQoJ2JvZHkgPiBwb3BvdmVyLWNvbnRhaW5lcicpLndyYXAoJzwnICsgcm9vdCArICcvPicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yNTEyNV06IE5vdCBjbG9zaW5nIHRoZSBleGlzdGluZyBvcGVuZWQgcG9wb3ZlcnMgd2hlbiB0aGUgYXV0b2Nsb3NlIHByb3BlcnR5IGlzIERJU0FCTEVEXG4gICAgICAgIGlmICghdGhpcy5pc0NoaWxkUG9wb3ZlcigpKSB7XG4gICAgICAgICAgICBpZiAoYWN0aXZlUG9wb3ZlciAmJiBhY3RpdmVQb3BvdmVyICE9PSB0aGlzICYmIFxuICAgICAgICAgICAgICAgIGFjdGl2ZVBvcG92ZXIuYXV0b2Nsb3NlICE9PSBBVVRPQ0xPU0VfVFlQRS5ESVNBQkxFRCkge1xuICAgICAgICAgICAgICAgIGFjdGl2ZVBvcG92ZXIuaXNDbG9zaW5nUHJvZ3JhbW1hdGljYWxseSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYWN0aXZlUG9wb3Zlci5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aXZlUG9wb3ZlciA9IHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICAgIGlmICghUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5pbmNsdWRlcyh0aGlzKSkge1xuICAgICAgICAgICAgUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5wdXNoKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvcG92ZXJDb250YWluZXIgID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7dGhpcy5wb3BvdmVyQ29udGFpbmVyQ2xzfWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAocG9wb3ZlckNvbnRhaW5lcikge1xuICAgICAgICAgICAgcG9wb3ZlckNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2RhdGEtcG9wb3Zlci1pZCcsIHRoaXMud2lkZ2V0SWQpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBZGQgY2xpY2sgZXZlbnQgbGlzdGVuZXIgdG8gc3RvcCBwcm9wYWdhdGlvblxuICAgICAgICAgICAgcG9wb3ZlckNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldENTU0Zyb21PYmoocG9wb3ZlckNvbnRhaW5lciwge1xuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLnBvcG92ZXJoZWlnaHQsXG4gICAgICAgICAgICBtaW5XaWR0aDogdGhpcy5wb3BvdmVyd2lkdGgsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5wb3BvdmVyd2lkdGhcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpcy5wb3BvdmVyYXJyb3cpIHtcbiAgICAgICAgICAgIGFkZENsYXNzKHBvcG92ZXJDb250YWluZXIucXVlcnlTZWxlY3RvcignLmFycm93JykgYXMgSFRNTEVsZW1lbnQsICdoaWRkZW4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGlvbiA9PT0gJ2hvdmVyJyB8fCB0aGlzLmludGVyYWN0aW9uID09PSAnZGVmYXVsdCcpIHtcblxuICAgICAgICAgICAgLy8gZG8gbm90IHVzZSBhZGRFdmVudExpc3RlbmVyIGhlcmVcbiAgICAgICAgICAgIC8vIGF0dGFjaGluZyB0aGUgZXZlbnQgdGhpcyB3YXkgd2lsbCBvdmVycmlkZSB0aGUgZXhpc3RpbmcgZXZlbnQgaGFuZGxlcnNcbiAgICAgICAgICAgIHBvcG92ZXJDb250YWluZXIub25tb3VzZWVudGVyID0gKCkgPT4gY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2VQb3BvdmVyVGltZW91dCk7XG4gICAgICAgICAgICBwb3BvdmVyQ29udGFpbmVyLm9ubW91c2VsZWF2ZSA9ICgpID0+IHRoaXMuaGlkZVBvcG92ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQub25tb3VzZWVudGVyID0gKCkgPT4gY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2VQb3BvdmVyVGltZW91dCk7XG4gICAgICAgICAgICB0aGlzLmFuY2hvclJlZi5uYXRpdmVFbGVtZW50Lm9ubW91c2VsZWF2ZSA9ICgpID0+IHRoaXMuaGlkZVBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vdXRzaWRlY2xpY2spIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBEb2N1bWVudENsaWNrSGFuZGxlcigpO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbmNob3JSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRlUmVnaXN0ZXIgPSB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHBvcG92ZXJDb250YWluZXIsICdrZXlkb3duLmVzYycsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNldEZvY3VzVG9Qb3BvdmVyTGluaygpO1xuICAgICAgICAgICAgZGVSZWdpc3RlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcG9wb3ZlclN0YXJ0QnRuOiBIVE1MRWxlbWVudCA9IHBvcG92ZXJDb250YWluZXIucXVlcnlTZWxlY3RvcignLnBvcG92ZXItc3RhcnQnKTtcbiAgICAgICAgY29uc3QgcG9wb3ZlckVuZEJ0bjogSFRNTEVsZW1lbnQgPSBwb3BvdmVyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5wb3BvdmVyLWVuZCcpO1xuICAgICAgICBwb3BvdmVyU3RhcnRCdG4ub25rZXlkb3duID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgU2hpZnQrVGFiIGtleVxuICAgICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJzUG9wb3ZlckRpcmVjdGl2ZS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzVG9Qb3BvdmVyTGluaygpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7ICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBwb3BvdmVyRW5kQnRuLm9ua2V5ZG93biA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFRhYiBrZXlcbiAgICAgICAgICAgIGlmICghZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICAgICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLmhpZGUoKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNUb1BvcG92ZXJMaW5rKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy9XaGVuZXZlciBhdXRvY2xvc2UgcHJvcGVydHkgaXMgc2V0IHRvICdhbHdheXMnLCBhZGRpbmcgdGhlIG9uY2xpY2sgbGlzdGVuZXIgdG8gdGhlIHBvcG92ZXIgY29udGFpbmVyIHRvIGNsb3NlIHRoZSBwb3BvdmVyLlxuICAgICAgICBpZiAodGhpcy5hdXRvY2xvc2UgPT09IEFVVE9DTE9TRV9UWVBFLkFMV0FZUykge1xuICAgICAgICAgICAgcG9wb3ZlckNvbnRhaW5lci5vbmNsaWNrID0gKCkgPT4gdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwb3BvdmVyU3RhcnRCdG4uZm9jdXMoKSwgNTApO1xuICAgICAgICAvLyBBZGp1c3RpbmcgcG9wb3ZlciBwb3NpdGlvbiBpZiB0aGUgcG9wb3ZlciBwbGFjZW1lbnQgaXMgdG9wIG9yIGJvdHRvbVxuICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWRhcHRpdmVwb3NpdGlvbiApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVBvcG92ZXJQb3N0aW9uKHBvcG92ZXJDb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdHJpZ2dlcmluZyBvbmxvYWQgYW5kIG9uc2hvdyBldmVudHMgYWZ0ZXIgcG9wb3ZlciBjb250ZW50IGhhcyByZW5kZXJlZFxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyUG9wb3ZlckV2ZW50cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0cmlnZ2VyUG9wb3ZlckV2ZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGVudHNvdXJjZSA9PT0gJ3BhcnRpYWwnKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5jZWxTdWJzY3JpcHRpb24gPSB0aGlzLmFwcC5zdWJzY3JpYmUoJ3BhcnRpYWxMb2FkZWQnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhckVsZSA9IHRoaXMucGFydGlhbFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIGxldCBwYXJ0aWFsU2NvcGU7XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyRWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRpYWxTY29wZSAgPSBwYXJFbGUud2lkZ2V0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLldpZGdldHMgICA9IHBhcnRpYWxTY29wZS5XaWRnZXRzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLlZhcmlhYmxlcyA9IHBhcnRpYWxTY29wZS5WYXJpYWJsZXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuQWN0aW9ucyAgID0gcGFydGlhbFNjb3BlLkFjdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnbG9hZCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Nob3cnLCB7JGV2ZW50OiB7dHlwZTogJ3Nob3cnfX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYW5jZWxTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5XaWRnZXRzICAgPSB0aGlzLnZpZXdQYXJlbnQuV2lkZ2V0cztcbiAgICAgICAgICAgIHRoaXMuVmFyaWFibGVzID0gdGhpcy52aWV3UGFyZW50LlZhcmlhYmxlcztcbiAgICAgICAgICAgIHRoaXMuQWN0aW9ucyAgID0gdGhpcy52aWV3UGFyZW50LkFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Nob3cnLCB7JGV2ZW50OiB7dHlwZTogJ3Nob3cnfX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWRlUG9wb3ZlcigpIHtcbiAgICAgICAgdGhpcy5pc0Nsb3NpbmdQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXJUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmlzT3BlbiA9IGZhbHNlLCA1MDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd1BvcG92ZXIoKSB7XG4gICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLnNob3coKTtcbiAgICB9XG5cbiAgICBvblBvcG92ZXJBbmNob3JLZXlkb3duKCRldmVudCkge1xuICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBjb250ZW50IGF2YWlsYWJsZSwgdGhlIHBvcG92ZXIgc2hvdWxkIG5vdCBvcGVuIHRocm91Z2ggZW50ZXIga2V5LiBTbyBjaGVja2luZyB3aGV0aGVyIHRoZSBjYW5Qb3BvdmVyT3BlbiBmbGFnIGlzIHRydWUgb3Igbm90LlxuICAgICAgICBpZiAoIXRoaXMuY2FuUG9wb3Zlck9wZW4pIHtcbiAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdjbGFzcycgfHwga2V5ID09PSAndGFiaW5kZXgnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2NvbnRlbnRzb3VyY2UnKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBwYXJ0aWFsIGNvbnRlbnQgYXZhaWxhYmxlLCB0aGUgcG9wb3ZlciBzaG91bGQgbm90IG9wZW5cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRzb3VyY2UgPT09ICdwYXJ0aWFsJyAmJiAhdGhpcy5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5Qb3BvdmVyT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdjb250ZW50JyAmJiBudikge1xuICAgICAgICAgICAgdGhpcy5jYW5Qb3BvdmVyT3BlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2F1dG9jbG9zZScpIHtcbiAgICAgICAgICAgIHRoaXMub3V0c2lkZWNsaWNrID0gKG52ID09PSBBVVRPQ0xPU0VfVFlQRS5PVVRTSURFQ0xJQ0sgfHwgbnYgPT09IEFVVE9DTE9TRV9UWVBFLkFMV0FZUykgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuZXZlbnQgPSBldmVudHNNYXBbdGhpcy5pbnRlcmFjdGlvbl07XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgc3R5bGVyKHRoaXMuYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lclRhcmdldCA9IGdldENvbnRhaW5lclRhcmdldENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIC8vIGxldCBwYXJlbnRFbGVtUG9wb3ZlciA9ICQodGhpcy5uYXRpdmVFbGVtZW50KS5wYXJlbnRzKCk7XG4gICAgICAgIC8vIGlmIChwYXJlbnRFbGVtUG9wb3Zlci5jbG9zZXN0KCdbd21UYWJsZV0nKS5sZW5ndGggfHxcbiAgICAgICAgLy8gICAgIHBhcmVudEVsZW1Qb3BvdmVyLmNsb3Nlc3QoJ1t3bXRhYnNdJykubGVuZ3RoIHx8XG4gICAgICAgIC8vICAgICBwYXJlbnRFbGVtUG9wb3Zlci5jbG9zZXN0KCdtb2RhbC1jb250YWluZXInKS5sZW5ndGgpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuYWRhcHRpdmVwb3NpdGlvbiA9IGZhbHNlO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgbmdPbkRldGFjaCgpIHtcbiAgICAgICAgLy8gSGlkZSB0aGUgcG9wb3ZlciBjb250YWluZXIgd2hpbGUgYXR0YWNoaW5nIHRoZSBuZXh0IGNvbXBvbmVudCBhcyBwYXJ0IG9mIHBhZ2UgcmV1c2Ugc3RyYXRlZ3kuXG4gICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLmhpZGUoKTtcbiAgICB9XG5cbiAgICBPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50Q2xpY2tIYW5kbGVyKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5pbmRleE9mKHRoaXMpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGEgW3BvcG92ZXJdPVwicG9wb3ZlclRlbXBsYXRlXCJcbiAgICBbcG9wb3ZlckNvbnRleHRdPVwiY29udGV4dFwiXG4gICAgW3BvcG92ZXJUaXRsZV09XCJ0aXRsZVwiXG4gICAgW3BsYWNlbWVudF09XCJwb3BvdmVycGxhY2VtZW50XCJcbiAgICBbb3V0c2lkZUNsaWNrXT1cIm91dHNpZGVjbGlja1wiXG4gICAgW3RyaWdnZXJzXT1cImV2ZW50XCJcbiAgICAob25TaG93bik9XCJvblNob3duKClcIlxuICAgIChvbkhpZGRlbik9XCJvbkhpZGRlbigpXCJcbiAgICBjb250YWluZXJDbGFzcz1cImFwcC1wb3BvdmVyIGFuaW1hdGVkIHt7Y29udGVudGFuaW1hdGlvbn19IHt7cG9wb3ZlckNvbnRhaW5lckNsc319XCJcbiAgICBbY29udGFpbmVyXT1cImNvbnRhaW5lclRhcmdldCB8fCAnLndtLWFwcCdcIlxuICAgIFtpc09wZW5dPVwiaXNPcGVuXCJcbiAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgIFtjbGFzc109XCJjbGFzc1wiXG4gICAgW25nQ2xhc3NdPVwieydkaXNhYmxlLXBvcG92ZXInOiAhY2FuUG9wb3Zlck9wZW59XCJcbiAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJhZGFwdGl2ZXBvc2l0aW9uXCJcbiAgIGJvdW5kYXJpZXNFbGVtZW50PVwid2luZG93XCJcbiAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYWxhYmVsIHx8IChiYWRnZXZhbHVlID8gY2FwdGlvbiArICcgJyArIGJhZGdldmFsdWUgOiBjYXB0aW9uKSB8fCAnUG9wb3ZlciBtZW51J1wiXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIlxuICAgIHJvbGU9XCJidXR0b25cIlxuICAgICNhbmNob3JcbiAgICBuYW1lLmJpbmQ9XCJuYW1lXCJcbiAgICB3bUFuY2hvclxuICAgIGFuaW1hdGlvbi5iaW5kPVwiYW5pbWF0aW9uXCJcbiAgICBiYWRnZXZhbHVlLmJpbmQ9XCJiYWRnZXZhbHVlXCJcbiAgICBjYXB0aW9uLmJpbmQ9XCJjYXB0aW9uXCJcbiAgICBlbmNvZGV1cmwuYmluZD1cImVuY29kZXVybFwiXG4gICAgaGludC5iaW5kPVwiaGludFwiXG4gICAgaHlwZXJsaW5rLmJpbmQ9XCJoeXBlcmxpbmtcIlxuICAgIGljb251cmwuYmluZD1cImljb251cmxcIlxuICAgIGljb253aWR0aC5iaW5kPVwiaWNvbndpZHRoXCJcbiAgICBpY29uaGVpZ2h0LmJpbmQ9XCJpY29uaGVpZ2h0XCJcbiAgICBpY29ubWFyZ2luLmJpbmQ9XCJpY29ubWFyZ2luXCJcbiAgICBpY29uY2xhc3MuYmluZD1cImljb25jbGFzc1wiXG4gICAgaWNvbnBvc2l0aW9uLmJpbmQ9XCJpY29ucG9zaXRpb25cIlxuICAgIHNob3J0Y3V0a2V5LmJpbmQ9XCJzaG9ydGN1dGtleVwiXG4gICAgdGFiaW5kZXguYmluZD1cInRhYmluZGV4XCJcbiAgICAoa2V5ZG93bik9XCJvblBvcG92ZXJBbmNob3JLZXlkb3duKCRldmVudClcIj5cbjwvYT5cbiJdfQ==
@@ -11,6 +11,7 @@ export const registerProps = () => {
11
11
  ['contentsource', { value: 'partial', ...PROP_STRING }],
12
12
  ['encodeurl', PROP_BOOLEAN],
13
13
  ['hint', PROP_STRING],
14
+ ['arialabel', PROP_STRING],
14
15
  ['hyperlink', { value: 'javascript:void(0)', PROP_STRING }],
15
16
  ['iconclass', PROP_STRING],
16
17
  ['iconheight', PROP_STRING],
@@ -31,4 +32,4 @@ export const registerProps = () => {
31
32
  ['adaptiveposition', { value: true, ...PROP_BOOLEAN }]
32
33
  ]));
33
34
  };
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5wcm9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9uYXZpZ2F0aW9uL3BvcG92ZXIvc3JjL3BvcG92ZXIucHJvcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO0lBQzlCLFFBQVEsQ0FDSixZQUFZLEVBQ1osSUFBSSxHQUFHLENBQ0g7UUFDSSxDQUFDLFdBQVcsRUFBRSxFQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsR0FBRyxXQUFXLEVBQUMsQ0FBQztRQUN0RCxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7UUFDM0IsQ0FBQyxTQUFTLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsV0FBVyxFQUFDLENBQUM7UUFDNUMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDO1FBQ3RCLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDO1FBQzlCLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQztRQUN4QixDQUFDLGtCQUFrQixFQUFFLFdBQVcsQ0FBQztRQUNqQyxDQUFDLGVBQWUsRUFBRSxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxXQUFXLEVBQUMsQ0FBQztRQUNyRCxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUM7UUFDM0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO1FBQ3JCLENBQUMsV0FBVyxFQUFFLEVBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBQyxDQUFDO1FBQ3pELENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztRQUMxQixDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7UUFDM0IsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDO1FBQzNCLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQztRQUM3QixDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUM7UUFDeEIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO1FBQzFCLENBQUMsYUFBYSxFQUFFLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLFdBQVcsRUFBQyxDQUFDO1FBQ2pELENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQztRQUNyQixDQUFDLGNBQWMsRUFBRSxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxZQUFZLEVBQUMsQ0FBQztRQUNoRCxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUM7UUFDOUIsQ0FBQyxrQkFBa0IsRUFBRSxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBSSxXQUFXLEVBQUMsQ0FBQztRQUN4RCxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUM7UUFDN0IsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDO1FBQzVCLENBQUMsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLFlBQVksRUFBQyxDQUFDO1FBQ3hDLENBQUMsVUFBVSxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBQyxDQUFDO1FBQ3hDLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQztRQUN0QixDQUFDLGtCQUFrQixFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLFlBQVksRUFBQyxDQUFDO0tBRXZELENBQ0osQ0FDSixDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUFJPUF9BTlksIFBST1BfQk9PTEVBTiwgUFJPUF9OVU1CRVIsIFBST1BfU1RSSU5HLCByZWdpc3RlciB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJQcm9wcyA9ICgpID0+IHtcbiAgICByZWdpc3RlcihcbiAgICAgICAgJ3dtLXBvcG92ZXInLFxuICAgICAgICBuZXcgTWFwKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYXV0b2Nsb3NlJywge3ZhbHVlOiAnb3V0c2lkZUNsaWNrJywgLi4uUFJPUF9TVFJJTkd9XSxcbiAgICAgICAgICAgICAgICBbJ2JhZGdldmFsdWUnLCBQUk9QX1NUUklOR10sXG4gICAgICAgICAgICAgICAgWydjYXB0aW9uJywge3ZhbHVlOiAnTGluaycsIC4uLlBST1BfU1RSSU5HfV0sXG4gICAgICAgICAgICAgICAgWydjbGFzcycsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgICAgICAgICBbJ2NvbmRpdGlvbmFsY2xhc3MnLCBQUk9QX0FOWV0sXG4gICAgICAgICAgICAgICAgWydjb250ZW50JywgUFJPUF9TVFJJTkddLFxuICAgICAgICAgICAgICAgIFsnY29udGVudGFuaW1hdGlvbicsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgICAgICAgICBbJ2NvbnRlbnRzb3VyY2UnLCB7dmFsdWU6ICdwYXJ0aWFsJywgLi4uUFJPUF9TVFJJTkd9XSxcbiAgICAgICAgICAgICAgICBbJ2VuY29kZXVybCcsIFBST1BfQk9PTEVBTl0sXG4gICAgICAgICAgICAgICAgWydoaW50JywgUFJPUF9TVFJJTkddLFxuICAgICAgICAgICAgICAgIFsnaHlwZXJsaW5rJywge3ZhbHVlOiAnamF2YXNjcmlwdDp2b2lkKDApJywgUFJPUF9TVFJJTkd9XSxcbiAgICAgICAgICAgICAgICBbJ2ljb25jbGFzcycsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgICAgICAgICBbJ2ljb25oZWlnaHQnLCBQUk9QX1NUUklOR10sXG4gICAgICAgICAgICAgICAgWydpY29ubWFyZ2luJywgUFJPUF9TVFJJTkddLFxuICAgICAgICAgICAgICAgIFsnaWNvbnBvc2l0aW9uJywgUFJPUF9TVFJJTkddLFxuICAgICAgICAgICAgICAgIFsnaWNvbnVybCcsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgICAgICAgICBbJ2ljb253aWR0aCcsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgICAgICAgICBbJ2ludGVyYWN0aW9uJywge3ZhbHVlOiAnY2xpY2snLCAuLi5QUk9QX1NUUklOR31dLFxuICAgICAgICAgICAgICAgIFsnbmFtZScsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgICAgICAgICBbJ3BvcG92ZXJhcnJvdycsIHt2YWx1ZTogdHJ1ZSwgLi4uUFJPUF9CT09MRUFOfV0sXG4gICAgICAgICAgICAgICAgWydwb3BvdmVyaGVpZ2h0JywgUFJPUF9TVFJJTkddLFxuICAgICAgICAgICAgICAgIFsncG9wb3ZlcnBsYWNlbWVudCcsIHt2YWx1ZTogJ2JvdHRvbScsIC4uLiBQUk9QX1NUUklOR31dLFxuICAgICAgICAgICAgICAgIFsncG9wb3ZlcndpZHRoJywgUFJPUF9TVFJJTkddLFxuICAgICAgICAgICAgICAgIFsnc2hvcnRjdXRrZXknLCBQUk9QX1NUUklOR10sXG4gICAgICAgICAgICAgICAgWydzaG93Jywge3ZhbHVlOiB0cnVlLCAuLi5QUk9QX0JPT0xFQU59XSxcbiAgICAgICAgICAgICAgICBbJ3RhYmluZGV4Jywge3ZhbHVlOiAwLCAuLi5QUk9QX05VTUJFUn1dLFxuICAgICAgICAgICAgICAgIFsndGl0bGUnLCBQUk9QX1NUUklOR10sXG4gICAgICAgICAgICAgICAgWydhZGFwdGl2ZXBvc2l0aW9uJywge3ZhbHVlOiB0cnVlLCAuLi5QUk9QX0JPT0xFQU59XVxuXG4gICAgICAgICAgICBdXG4gICAgICAgIClcbiAgICApO1xufTtcbiJdfQ==
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5wcm9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9uYXZpZ2F0aW9uL3BvcG92ZXIvc3JjL3BvcG92ZXIucHJvcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUUvRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO0lBQzlCLFFBQVEsQ0FDSixZQUFZLEVBQ1osSUFBSSxHQUFHLENBQ0g7UUFDSSxDQUFDLFdBQVcsRUFBRSxFQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsR0FBRyxXQUFXLEVBQUMsQ0FBQztRQUN0RCxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7UUFDM0IsQ0FBQyxTQUFTLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsV0FBVyxFQUFDLENBQUM7UUFDNUMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDO1FBQ3RCLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDO1FBQzlCLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQztRQUN4QixDQUFDLGtCQUFrQixFQUFFLFdBQVcsQ0FBQztRQUNqQyxDQUFDLGVBQWUsRUFBRSxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxXQUFXLEVBQUMsQ0FBQztRQUNyRCxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUM7UUFDM0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO1FBQ3JCLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztRQUMxQixDQUFDLFdBQVcsRUFBRSxFQUFDLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUMsQ0FBQztRQUN6RCxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUM7UUFDMUIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDO1FBQzNCLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQztRQUMzQixDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUM7UUFDN0IsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDO1FBQ3hCLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztRQUMxQixDQUFDLGFBQWEsRUFBRSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxXQUFXLEVBQUMsQ0FBQztRQUNqRCxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUM7UUFDckIsQ0FBQyxjQUFjLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsWUFBWSxFQUFDLENBQUM7UUFDaEQsQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDO1FBQzlCLENBQUMsa0JBQWtCLEVBQUUsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUksV0FBVyxFQUFDLENBQUM7UUFDeEQsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDO1FBQzdCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztRQUM1QixDQUFDLE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxZQUFZLEVBQUMsQ0FBQztRQUN4QyxDQUFDLFVBQVUsRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUMsQ0FBQztRQUN4QyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUM7UUFDdEIsQ0FBQyxrQkFBa0IsRUFBRSxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxZQUFZLEVBQUMsQ0FBQztLQUV2RCxDQUNKLENBQ0osQ0FBQztBQUNOLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UFJPUF9BTlksIFBST1BfQk9PTEVBTiwgUFJPUF9OVU1CRVIsIFBST1BfU1RSSU5HLCByZWdpc3Rlcn0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmV4cG9ydCBjb25zdCByZWdpc3RlclByb3BzID0gKCkgPT4ge1xuICAgIHJlZ2lzdGVyKFxuICAgICAgICAnd20tcG9wb3ZlcicsXG4gICAgICAgIG5ldyBNYXAoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhdXRvY2xvc2UnLCB7dmFsdWU6ICdvdXRzaWRlQ2xpY2snLCAuLi5QUk9QX1NUUklOR31dLFxuICAgICAgICAgICAgICAgIFsnYmFkZ2V2YWx1ZScsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgICAgICAgICBbJ2NhcHRpb24nLCB7dmFsdWU6ICdMaW5rJywgLi4uUFJPUF9TVFJJTkd9XSxcbiAgICAgICAgICAgICAgICBbJ2NsYXNzJywgUFJPUF9TVFJJTkddLFxuICAgICAgICAgICAgICAgIFsnY29uZGl0aW9uYWxjbGFzcycsIFBST1BfQU5ZXSxcbiAgICAgICAgICAgICAgICBbJ2NvbnRlbnQnLCBQUk9QX1NUUklOR10sXG4gICAgICAgICAgICAgICAgWydjb250ZW50YW5pbWF0aW9uJywgUFJPUF9TVFJJTkddLFxuICAgICAgICAgICAgICAgIFsnY29udGVudHNvdXJjZScsIHt2YWx1ZTogJ3BhcnRpYWwnLCAuLi5QUk9QX1NUUklOR31dLFxuICAgICAgICAgICAgICAgIFsnZW5jb2RldXJsJywgUFJPUF9CT09MRUFOXSxcbiAgICAgICAgICAgICAgICBbJ2hpbnQnLCBQUk9QX1NUUklOR10sXG4gICAgICAgICAgICAgICAgWydhcmlhbGFiZWwnLCBQUk9QX1NUUklOR10sXG4gICAgICAgICAgICAgICAgWydoeXBlcmxpbmsnLCB7dmFsdWU6ICdqYXZhc2NyaXB0OnZvaWQoMCknLCBQUk9QX1NUUklOR31dLFxuICAgICAgICAgICAgICAgIFsnaWNvbmNsYXNzJywgUFJPUF9TVFJJTkddLFxuICAgICAgICAgICAgICAgIFsnaWNvbmhlaWdodCcsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgICAgICAgICBbJ2ljb25tYXJnaW4nLCBQUk9QX1NUUklOR10sXG4gICAgICAgICAgICAgICAgWydpY29ucG9zaXRpb24nLCBQUk9QX1NUUklOR10sXG4gICAgICAgICAgICAgICAgWydpY29udXJsJywgUFJPUF9TVFJJTkddLFxuICAgICAgICAgICAgICAgIFsnaWNvbndpZHRoJywgUFJPUF9TVFJJTkddLFxuICAgICAgICAgICAgICAgIFsnaW50ZXJhY3Rpb24nLCB7dmFsdWU6ICdjbGljaycsIC4uLlBST1BfU1RSSU5HfV0sXG4gICAgICAgICAgICAgICAgWyduYW1lJywgUFJPUF9TVFJJTkddLFxuICAgICAgICAgICAgICAgIFsncG9wb3ZlcmFycm93Jywge3ZhbHVlOiB0cnVlLCAuLi5QUk9QX0JPT0xFQU59XSxcbiAgICAgICAgICAgICAgICBbJ3BvcG92ZXJoZWlnaHQnLCBQUk9QX1NUUklOR10sXG4gICAgICAgICAgICAgICAgWydwb3BvdmVycGxhY2VtZW50Jywge3ZhbHVlOiAnYm90dG9tJywgLi4uIFBST1BfU1RSSU5HfV0sXG4gICAgICAgICAgICAgICAgWydwb3BvdmVyd2lkdGgnLCBQUk9QX1NUUklOR10sXG4gICAgICAgICAgICAgICAgWydzaG9ydGN1dGtleScsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgICAgICAgICBbJ3Nob3cnLCB7dmFsdWU6IHRydWUsIC4uLlBST1BfQk9PTEVBTn1dLFxuICAgICAgICAgICAgICAgIFsndGFiaW5kZXgnLCB7dmFsdWU6IDAsIC4uLlBST1BfTlVNQkVSfV0sXG4gICAgICAgICAgICAgICAgWyd0aXRsZScsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgICAgICAgICBbJ2FkYXB0aXZlcG9zaXRpb24nLCB7dmFsdWU6IHRydWUsIC4uLlBST1BfQk9PTEVBTn1dXG5cbiAgICAgICAgICAgIF1cbiAgICAgICAgKVxuICAgICk7XG59O1xuIl19