@ardium-ui/ui 2.4.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/esm2022/lib/_internal/boolean-component.mjs +1 -1
  2. package/esm2022/lib/_internal/clear-button/clear-button.component.mjs +9 -6
  3. package/esm2022/lib/_internal/disablable-component.mjs +5 -4
  4. package/esm2022/lib/_internal/focusable-component.mjs +5 -2
  5. package/esm2022/lib/_internal/item-storages/dropdown-item-storage.mjs +30 -23
  6. package/esm2022/lib/_internal/item-storages/simple-item-storage.mjs +4 -5
  7. package/esm2022/lib/_internal/item-storages/simplest-item-storage.mjs +7 -8
  8. package/esm2022/lib/_internal/models/pagination.model.mjs +3 -3
  9. package/esm2022/lib/_internal/ngmodel-component.mjs +1 -2
  10. package/esm2022/lib/_internal/selectable-list-component.mjs +2 -22
  11. package/esm2022/lib/badge/badge.defaults.mjs +12 -6
  12. package/esm2022/lib/badge/badge.directive.mjs +1 -1
  13. package/esm2022/lib/badge/index.mjs +1 -1
  14. package/esm2022/lib/buttons/_button-base.defaults.mjs +1 -1
  15. package/esm2022/lib/buttons/_button-base.mjs +6 -5
  16. package/esm2022/lib/buttons/button/button.component.mjs +11 -9
  17. package/esm2022/lib/buttons/button/button.defaults.mjs +11 -7
  18. package/esm2022/lib/buttons/button/index.mjs +1 -1
  19. package/esm2022/lib/buttons/fab/fab.component.mjs +15 -14
  20. package/esm2022/lib/buttons/fab/fab.defaults.mjs +11 -5
  21. package/esm2022/lib/buttons/fab/index.mjs +1 -1
  22. package/esm2022/lib/buttons/general-button.types.mjs +2 -2
  23. package/esm2022/lib/buttons/icon-button/icon-button.component.mjs +11 -9
  24. package/esm2022/lib/buttons/icon-button/icon-button.defaults.mjs +4 -1
  25. package/esm2022/lib/buttons/icon-button/index.mjs +1 -1
  26. package/esm2022/lib/card/card.children.mjs +4 -4
  27. package/esm2022/lib/card/card.component.mjs +2 -2
  28. package/esm2022/lib/card/card.defaults.mjs +10 -4
  29. package/esm2022/lib/card/index.mjs +1 -1
  30. package/esm2022/lib/checkbox/checkbox.component.mjs +13 -17
  31. package/esm2022/lib/checkbox/checkbox.defaults.mjs +10 -4
  32. package/esm2022/lib/checkbox/index.mjs +1 -1
  33. package/esm2022/lib/checkbox-list/checkbox-list.component.mjs +11 -9
  34. package/esm2022/lib/checkbox-list/checkbox-list.defaults.mjs +17 -11
  35. package/esm2022/lib/checkbox-list/index.mjs +3 -2
  36. package/esm2022/lib/chip/chip.component.mjs +11 -9
  37. package/esm2022/lib/chip/chip.defaults.mjs +4 -1
  38. package/esm2022/lib/chip/deletable-chip/deletable-chip.component.mjs +11 -9
  39. package/esm2022/lib/chip/deletable-chip/deletable-chip.defaults.mjs +10 -4
  40. package/esm2022/lib/chip/index.mjs +5 -2
  41. package/esm2022/lib/chip/selectable-chip/selectable-chip.component.mjs +11 -9
  42. package/esm2022/lib/chip/selectable-chip/selectable-chip.defaults.mjs +11 -5
  43. package/esm2022/lib/color/color-display/color-display.component.mjs +13 -12
  44. package/esm2022/lib/color/color-display/color-display.defaults.mjs +16 -0
  45. package/esm2022/lib/color/color-display/index.mjs +3 -2
  46. package/esm2022/lib/dialog/dialog.component.mjs +23 -22
  47. package/esm2022/lib/dialog/dialog.defaults.mjs +24 -0
  48. package/esm2022/lib/dialog/dialog.types.mjs +1 -1
  49. package/esm2022/lib/dialog/index.mjs +4 -3
  50. package/esm2022/lib/divider/divider.component.mjs +1 -1
  51. package/esm2022/lib/divider/divider.defaults.mjs +8 -2
  52. package/esm2022/lib/divider/index.mjs +3 -2
  53. package/esm2022/lib/dropdown-panel/dropdown-panel.component.mjs +10 -9
  54. package/esm2022/lib/dropdown-panel/dropdown-panel.defaults.mjs +17 -0
  55. package/esm2022/lib/dropdown-panel/index.mjs +3 -2
  56. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.component.mjs +14 -12
  57. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.defaults.mjs +18 -0
  58. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.module.mjs +1 -1
  59. package/esm2022/lib/file-inputs/file-drop-area/index.mjs +3 -2
  60. package/esm2022/lib/file-inputs/file-input/file-input.component.mjs +23 -25
  61. package/esm2022/lib/file-inputs/file-input/file-input.defaults.mjs +23 -0
  62. package/esm2022/lib/file-inputs/file-input/index.mjs +3 -2
  63. package/esm2022/lib/file-inputs/file-input-base.defaults.mjs +8 -0
  64. package/esm2022/lib/file-inputs/file-input-base.mjs +2 -2
  65. package/esm2022/lib/form-field-frame/form-field-frame.component.mjs +12 -8
  66. package/esm2022/lib/form-field-frame/form-field-frame.defaults.mjs +18 -0
  67. package/esm2022/lib/form-field-frame/index.mjs +3 -2
  68. package/esm2022/lib/icon/icon.component.mjs +6 -4
  69. package/esm2022/lib/icon/icon.defaults.mjs +17 -0
  70. package/esm2022/lib/icon/index.mjs +3 -2
  71. package/esm2022/lib/inputs/_simple-input-base.mjs +159 -0
  72. package/esm2022/lib/inputs/digit-input/digit-input.component.mjs +17 -15
  73. package/esm2022/lib/inputs/digit-input/digit-input.defaults.mjs +21 -0
  74. package/esm2022/lib/inputs/digit-input/digit-input.model.mjs +1 -1
  75. package/esm2022/lib/inputs/digit-input/digit-input.types.mjs +1 -1
  76. package/esm2022/lib/inputs/digit-input/digit-input.utils.mjs +1 -1
  77. package/esm2022/lib/inputs/digit-input/index.mjs +3 -2
  78. package/esm2022/lib/inputs/hex-input/hex-input.component.mjs +24 -23
  79. package/esm2022/lib/inputs/hex-input/hex-input.defaults.mjs +26 -0
  80. package/esm2022/lib/inputs/hex-input/hex-input.model.mjs +97 -0
  81. package/esm2022/lib/inputs/hex-input/hex-input.module.mjs +1 -1
  82. package/esm2022/lib/inputs/hex-input/index.mjs +3 -2
  83. package/esm2022/lib/inputs/input/index.mjs +1 -1
  84. package/esm2022/lib/inputs/input/input.component.mjs +28 -48
  85. package/esm2022/lib/inputs/input/input.defaults.mjs +17 -0
  86. package/esm2022/lib/inputs/input/input.directives.mjs +1 -1
  87. package/esm2022/lib/inputs/input/input.module.mjs +1 -1
  88. package/esm2022/lib/inputs/input-transformers.mjs +1 -1
  89. package/esm2022/lib/inputs/input-utils.mjs +1 -1
  90. package/esm2022/lib/inputs/number-input/index.mjs +3 -2
  91. package/esm2022/lib/inputs/number-input/number-input.component.mjs +34 -30
  92. package/esm2022/lib/inputs/number-input/number-input.defaults.mjs +27 -0
  93. package/esm2022/lib/inputs/password-input/index.mjs +3 -2
  94. package/esm2022/lib/inputs/password-input/password-input.component.mjs +23 -18
  95. package/esm2022/lib/inputs/password-input/password-input.defaults.mjs +24 -0
  96. package/esm2022/lib/inputs/password-input/password-input.types.mjs +1 -1
  97. package/esm2022/lib/inputs/simple-input/index.mjs +3 -2
  98. package/esm2022/lib/inputs/simple-input/simple-input.component.mjs +15 -145
  99. package/esm2022/lib/inputs/simple-input/simple-input.defaults.mjs +25 -0
  100. package/esm2022/lib/kbd/index.mjs +2 -1
  101. package/esm2022/lib/kbd/kbd.component.mjs +6 -4
  102. package/esm2022/lib/kbd/kbd.defaults.mjs +15 -0
  103. package/esm2022/lib/kbd/kbd.directive.mjs +1 -1
  104. package/esm2022/lib/kbd/kbd.pipe.mjs +7 -3
  105. package/esm2022/lib/kbd-shortcut/index.mjs +3 -2
  106. package/esm2022/lib/kbd-shortcut/kbd-shortcut.component.mjs +12 -7
  107. package/esm2022/lib/kbd-shortcut/kbd-shortcut.defaults.mjs +8 -0
  108. package/esm2022/lib/modal/index.mjs +3 -2
  109. package/esm2022/lib/modal/modal.component.mjs +14 -11
  110. package/esm2022/lib/modal/modal.defaults.mjs +20 -0
  111. package/esm2022/lib/option/index.mjs +1 -1
  112. package/esm2022/lib/option/option.component.mjs +1 -1
  113. package/esm2022/lib/progress-bar/index.mjs +4 -3
  114. package/esm2022/lib/progress-bar/progress-bar.component.mjs +19 -18
  115. package/esm2022/lib/progress-bar/progress-bar.defaults.mjs +21 -0
  116. package/esm2022/lib/progress-bar/progress-bar.types.mjs +1 -1
  117. package/esm2022/lib/progress-circle/index.mjs +4 -3
  118. package/esm2022/lib/progress-circle/progress-circle.component.mjs +18 -22
  119. package/esm2022/lib/progress-circle/progress-circle.defaults.mjs +21 -0
  120. package/esm2022/lib/progress-circle/progress-circle.module.mjs +4 -4
  121. package/esm2022/lib/progress-circle/progress-circle.types.mjs +1 -1
  122. package/esm2022/lib/radio/index.mjs +4 -3
  123. package/esm2022/lib/radio/radio/radio.component.mjs +13 -10
  124. package/esm2022/lib/radio/radio/radio.defaults.mjs +16 -0
  125. package/esm2022/lib/radio/radio-group.component.mjs +7 -7
  126. package/esm2022/lib/search-functions.mjs +2 -2
  127. package/esm2022/lib/segment/index.mjs +3 -2
  128. package/esm2022/lib/segment/segment.component.mjs +22 -21
  129. package/esm2022/lib/segment/segment.defaults.mjs +26 -0
  130. package/esm2022/lib/segment/segment.directives.mjs +1 -1
  131. package/esm2022/lib/select/index.mjs +3 -2
  132. package/esm2022/lib/select/select.component.mjs +76 -101
  133. package/esm2022/lib/select/select.defaults.mjs +53 -0
  134. package/esm2022/lib/select/select.directive.mjs +1 -1
  135. package/esm2022/lib/select/select.types.mjs +1 -1
  136. package/esm2022/lib/slide-toggle/index.mjs +2 -1
  137. package/esm2022/lib/slide-toggle/slide-toggle.component.mjs +17 -15
  138. package/esm2022/lib/slide-toggle/slide-toggle.defaults.mjs +21 -0
  139. package/esm2022/lib/slide-toggle/slide-toggle.types.mjs +1 -1
  140. package/esm2022/lib/slider/abstract-slider.mjs +44 -34
  141. package/esm2022/lib/slider/index.mjs +5 -4
  142. package/esm2022/lib/slider/range-slider/range-slider.component.mjs +13 -9
  143. package/esm2022/lib/slider/slider.component.mjs +13 -9
  144. package/esm2022/lib/slider/slider.defaults.mjs +14 -0
  145. package/esm2022/lib/slider/slider.module.mjs +1 -1
  146. package/esm2022/lib/slider/slider.types.mjs +1 -1
  147. package/esm2022/lib/snackbar/snackbar-ref.mjs +1 -1
  148. package/esm2022/lib/snackbar/snackbar.component.mjs +3 -3
  149. package/esm2022/lib/snackbar/snackbar.service.mjs +8 -12
  150. package/esm2022/lib/snackbar/snackbar.token.mjs +12 -6
  151. package/esm2022/lib/snackbar/snackbar.types.mjs +1 -1
  152. package/esm2022/lib/spinner/index.mjs +3 -2
  153. package/esm2022/lib/spinner/spinner.component.mjs +7 -6
  154. package/esm2022/lib/spinner/spinner.defaults.mjs +14 -0
  155. package/esm2022/lib/star/index.mjs +3 -2
  156. package/esm2022/lib/star/star-button/index.mjs +3 -2
  157. package/esm2022/lib/star/star-button/star-button.component.mjs +14 -11
  158. package/esm2022/lib/star/star-button/star-button.defaults.mjs +18 -0
  159. package/esm2022/lib/star/star-display/index.mjs +3 -2
  160. package/esm2022/lib/star/star-display/star-display.component.mjs +10 -8
  161. package/esm2022/lib/star/star-display/star-display.defaults.mjs +16 -0
  162. package/esm2022/lib/star/star-input/index.mjs +3 -2
  163. package/esm2022/lib/star/star-input/star-input.component.mjs +14 -11
  164. package/esm2022/lib/star/star-input/star-input.defaults.mjs +17 -0
  165. package/esm2022/lib/star/star.component.mjs +15 -8
  166. package/esm2022/lib/star/star.defaults.mjs +15 -0
  167. package/esm2022/lib/statebox/index.mjs +2 -1
  168. package/esm2022/lib/statebox/statebox.component.mjs +19 -25
  169. package/esm2022/lib/statebox/statebox.defaults.mjs +20 -0
  170. package/esm2022/lib/statebox/statebox.types.mjs +1 -1
  171. package/esm2022/lib/tabber/index.mjs +5 -3
  172. package/esm2022/lib/tabber/tab/tab.component.mjs +7 -5
  173. package/esm2022/lib/tabber/tab/tab.defaults.mjs +13 -0
  174. package/esm2022/lib/tabber/tabber.component.mjs +10 -10
  175. package/esm2022/lib/tabber/tabber.defaults.mjs +19 -0
  176. package/esm2022/lib/tabber/tabber.module.mjs +1 -1
  177. package/esm2022/lib/table/index.mjs +3 -2
  178. package/esm2022/lib/table/table-item-storage.mjs +4 -4
  179. package/esm2022/lib/table/table.component.mjs +69 -50
  180. package/esm2022/lib/table/table.defaults.mjs +53 -0
  181. package/esm2022/lib/table/table.directives.mjs +1 -1
  182. package/esm2022/lib/table/table.module.mjs +8 -7
  183. package/esm2022/lib/table-from-csv/index.mjs +3 -2
  184. package/esm2022/lib/table-from-csv/table-from-csv.component.mjs +44 -44
  185. package/esm2022/lib/table-from-csv/table-from-csv.defaults.mjs +15 -0
  186. package/esm2022/lib/table-pagination/index.mjs +3 -2
  187. package/esm2022/lib/table-pagination/table-pagination.component.mjs +13 -9
  188. package/esm2022/lib/table-pagination/table-pagination.defaults.mjs +25 -0
  189. package/esm2022/lib/types/button.types.mjs +1 -1
  190. package/esm2022/lib/types/item-storage.types.mjs +1 -1
  191. package/esm2022/lib/types/utility.types.mjs +1 -1
  192. package/esm2022/public-api.mjs +1 -1
  193. package/fesm2022/ardium-ui-ui.mjs +2632 -1980
  194. package/fesm2022/ardium-ui-ui.mjs.map +1 -1
  195. package/lib/_internal/clear-button/clear-button.component.d.ts +1 -0
  196. package/lib/_internal/disablable-component.d.ts +1 -0
  197. package/lib/_internal/item-storages/dropdown-item-storage.d.ts +9 -19
  198. package/lib/_internal/item-storages/simple-item-storage.d.ts +1 -1
  199. package/lib/_internal/item-storages/simplest-item-storage.d.ts +3 -3
  200. package/lib/_internal/models/pagination.model.d.ts +2 -2
  201. package/lib/_internal/selectable-list-component.d.ts +0 -1
  202. package/lib/badge/badge.defaults.d.ts +2 -1
  203. package/lib/buttons/_button-base.d.ts +1 -0
  204. package/lib/buttons/button/button.component.d.ts +3 -1
  205. package/lib/buttons/button/button.defaults.d.ts +2 -1
  206. package/lib/buttons/fab/fab.component.d.ts +5 -5
  207. package/lib/buttons/fab/fab.defaults.d.ts +4 -4
  208. package/lib/buttons/general-button.types.d.ts +2 -2
  209. package/lib/buttons/icon-button/icon-button.component.d.ts +3 -1
  210. package/lib/buttons/icon-button/icon-button.defaults.d.ts +2 -1
  211. package/lib/card/card.defaults.d.ts +2 -1
  212. package/lib/checkbox/checkbox.component.d.ts +4 -3
  213. package/lib/checkbox/checkbox.defaults.d.ts +2 -1
  214. package/lib/checkbox-list/checkbox-list.component.d.ts +4 -2
  215. package/lib/checkbox-list/checkbox-list.defaults.d.ts +2 -1
  216. package/lib/checkbox-list/index.d.ts +2 -1
  217. package/lib/chip/chip.component.d.ts +3 -1
  218. package/lib/chip/chip.defaults.d.ts +3 -10
  219. package/lib/chip/deletable-chip/deletable-chip.component.d.ts +3 -1
  220. package/lib/chip/deletable-chip/deletable-chip.defaults.d.ts +2 -1
  221. package/lib/chip/index.d.ts +4 -1
  222. package/lib/chip/selectable-chip/selectable-chip.component.d.ts +3 -1
  223. package/lib/chip/selectable-chip/selectable-chip.defaults.d.ts +2 -1
  224. package/lib/color/color-display/color-display.component.d.ts +2 -1
  225. package/lib/color/color-display/color-display.defaults.d.ts +9 -0
  226. package/lib/color/color-display/index.d.ts +2 -1
  227. package/lib/dialog/dialog.component.d.ts +1 -0
  228. package/lib/dialog/dialog.defaults.d.ts +16 -0
  229. package/lib/dialog/index.d.ts +3 -2
  230. package/lib/divider/divider.defaults.d.ts +2 -1
  231. package/lib/divider/index.d.ts +2 -1
  232. package/lib/dropdown-panel/dropdown-panel.component.d.ts +1 -0
  233. package/lib/dropdown-panel/dropdown-panel.defaults.d.ts +10 -0
  234. package/lib/dropdown-panel/index.d.ts +2 -1
  235. package/lib/file-inputs/file-drop-area/file-drop-area.component.d.ts +5 -2
  236. package/lib/file-inputs/file-drop-area/file-drop-area.defaults.d.ts +10 -0
  237. package/lib/file-inputs/file-drop-area/index.d.ts +2 -1
  238. package/lib/file-inputs/file-input/file-input.component.d.ts +4 -4
  239. package/lib/file-inputs/file-input/file-input.defaults.d.ts +15 -0
  240. package/lib/file-inputs/file-input/index.d.ts +2 -1
  241. package/lib/file-inputs/file-input-base.d.ts +2 -0
  242. package/lib/file-inputs/file-input-base.defaults.d.ts +7 -0
  243. package/lib/form-field-frame/form-field-frame.component.d.ts +3 -0
  244. package/lib/form-field-frame/form-field-frame.defaults.d.ts +10 -0
  245. package/lib/form-field-frame/index.d.ts +2 -1
  246. package/lib/icon/icon.component.d.ts +7 -3
  247. package/lib/icon/icon.defaults.d.ts +11 -0
  248. package/lib/icon/index.d.ts +2 -1
  249. package/lib/inputs/_simple-input-base.d.ts +62 -0
  250. package/lib/inputs/digit-input/digit-input.component.d.ts +3 -0
  251. package/lib/inputs/digit-input/digit-input.defaults.d.ts +13 -0
  252. package/lib/inputs/digit-input/index.d.ts +2 -1
  253. package/lib/inputs/hex-input/hex-input.component.d.ts +4 -4
  254. package/lib/inputs/hex-input/hex-input.defaults.d.ts +19 -0
  255. package/lib/inputs/{hex-input.model.d.ts → hex-input/hex-input.model.d.ts} +2 -2
  256. package/lib/inputs/hex-input/index.d.ts +2 -1
  257. package/lib/inputs/input/input.component.d.ts +10 -17
  258. package/lib/inputs/input/input.defaults.d.ts +9 -0
  259. package/lib/inputs/number-input/index.d.ts +2 -1
  260. package/lib/inputs/number-input/number-input.component.d.ts +3 -1
  261. package/lib/inputs/number-input/number-input.defaults.d.ts +19 -0
  262. package/lib/inputs/password-input/index.d.ts +2 -1
  263. package/lib/inputs/password-input/password-input.component.d.ts +3 -0
  264. package/lib/inputs/password-input/password-input.defaults.d.ts +17 -0
  265. package/lib/inputs/simple-input/index.d.ts +2 -1
  266. package/lib/inputs/simple-input/simple-input.component.d.ts +6 -50
  267. package/lib/inputs/simple-input/simple-input.defaults.d.ts +6 -0
  268. package/lib/kbd/index.d.ts +1 -0
  269. package/lib/kbd/kbd.component.d.ts +1 -0
  270. package/lib/kbd/kbd.defaults.d.ts +8 -0
  271. package/lib/kbd/kbd.pipe.d.ts +1 -0
  272. package/lib/kbd-shortcut/index.d.ts +2 -1
  273. package/lib/kbd-shortcut/kbd-shortcut.component.d.ts +2 -0
  274. package/lib/kbd-shortcut/kbd-shortcut.defaults.d.ts +8 -0
  275. package/lib/modal/index.d.ts +2 -1
  276. package/lib/modal/modal.component.d.ts +1 -0
  277. package/lib/modal/modal.defaults.d.ts +14 -0
  278. package/lib/progress-bar/index.d.ts +3 -2
  279. package/lib/progress-bar/progress-bar.component.d.ts +3 -1
  280. package/lib/progress-bar/progress-bar.defaults.d.ts +14 -0
  281. package/lib/progress-circle/index.d.ts +3 -2
  282. package/lib/progress-circle/progress-circle.component.d.ts +3 -1
  283. package/lib/progress-circle/progress-circle.defaults.d.ts +14 -0
  284. package/lib/progress-circle/progress-circle.module.d.ts +1 -1
  285. package/lib/radio/index.d.ts +3 -2
  286. package/lib/radio/radio/radio.component.d.ts +5 -2
  287. package/lib/radio/radio/radio.defaults.d.ts +8 -0
  288. package/lib/segment/index.d.ts +2 -1
  289. package/lib/segment/segment.component.d.ts +3 -0
  290. package/lib/segment/segment.defaults.d.ts +18 -0
  291. package/lib/select/index.d.ts +2 -1
  292. package/lib/select/select.component.d.ts +11 -22
  293. package/lib/select/select.defaults.d.ts +49 -0
  294. package/lib/slide-toggle/index.d.ts +1 -0
  295. package/lib/slide-toggle/slide-toggle.component.d.ts +9 -6
  296. package/lib/slide-toggle/slide-toggle.defaults.d.ts +14 -0
  297. package/lib/slider/abstract-slider.d.ts +22 -5
  298. package/lib/slider/index.d.ts +4 -3
  299. package/lib/slider/range-slider/range-slider.component.d.ts +3 -0
  300. package/lib/slider/slider.component.d.ts +3 -0
  301. package/lib/slider/slider.defaults.d.ts +6 -0
  302. package/lib/snackbar/snackbar.service.d.ts +1 -2
  303. package/lib/snackbar/snackbar.token.d.ts +3 -3
  304. package/lib/spinner/index.d.ts +2 -1
  305. package/lib/spinner/spinner.component.d.ts +1 -0
  306. package/lib/spinner/spinner.defaults.d.ts +7 -0
  307. package/lib/star/index.d.ts +2 -1
  308. package/lib/star/star-button/index.d.ts +2 -1
  309. package/lib/star/star-button/star-button.component.d.ts +3 -0
  310. package/lib/star/star-button/star-button.defaults.d.ts +10 -0
  311. package/lib/star/star-display/index.d.ts +2 -1
  312. package/lib/star/star-display/star-display.component.d.ts +1 -0
  313. package/lib/star/star-display/star-display.defaults.d.ts +9 -0
  314. package/lib/star/star-input/index.d.ts +2 -1
  315. package/lib/star/star-input/star-input.component.d.ts +3 -1
  316. package/lib/star/star-input/star-input.defaults.d.ts +9 -0
  317. package/lib/star/star.component.d.ts +4 -2
  318. package/lib/star/star.defaults.d.ts +8 -0
  319. package/lib/statebox/index.d.ts +1 -0
  320. package/lib/statebox/statebox.component.d.ts +7 -6
  321. package/lib/statebox/statebox.defaults.d.ts +10 -0
  322. package/lib/tabber/index.d.ts +4 -2
  323. package/lib/tabber/tab/tab.component.d.ts +1 -0
  324. package/lib/tabber/tab/tab.defaults.d.ts +6 -0
  325. package/lib/tabber/tabber.component.d.ts +1 -0
  326. package/lib/tabber/tabber.defaults.d.ts +12 -0
  327. package/lib/table/index.d.ts +2 -1
  328. package/lib/table/table-item-storage.d.ts +5 -10
  329. package/lib/table/table.component.d.ts +11 -9
  330. package/lib/table/table.defaults.d.ts +50 -0
  331. package/lib/table/table.module.d.ts +2 -1
  332. package/lib/table-from-csv/index.d.ts +2 -1
  333. package/lib/table-from-csv/table-from-csv.component.d.ts +7 -5
  334. package/lib/table-from-csv/table-from-csv.defaults.d.ts +7 -0
  335. package/lib/table-pagination/index.d.ts +2 -1
  336. package/lib/table-pagination/table-pagination.component.d.ts +3 -0
  337. package/lib/table-pagination/table-pagination.defaults.d.ts +20 -0
  338. package/lib/types/button.types.d.ts +1 -1
  339. package/lib/types/item-storage.types.d.ts +3 -63
  340. package/package.json +1 -1
  341. package/prebuilt-themes/default/buttons/fab.css +1 -1
  342. package/prebuilt-themes/default/buttons/icon-button.css +7 -12
  343. package/prebuilt-themes/default/buttons/icon-button.css.map +1 -1
  344. package/prebuilt-themes/default/checkbox.css.map +1 -1
  345. package/prebuilt-themes/default/inputs/color-input.css +5 -0
  346. package/prebuilt-themes/default/inputs/color-input.css.map +1 -1
  347. package/prebuilt-themes/default/inputs/file-input.css +5 -0
  348. package/prebuilt-themes/default/inputs/file-input.css.map +1 -1
  349. package/prebuilt-themes/default/inputs/hex-input.css +5 -0
  350. package/prebuilt-themes/default/inputs/hex-input.css.map +1 -1
  351. package/prebuilt-themes/default/inputs/input.css +5 -0
  352. package/prebuilt-themes/default/inputs/input.css.map +1 -1
  353. package/prebuilt-themes/default/inputs/number-input.css +5 -0
  354. package/prebuilt-themes/default/inputs/number-input.css.map +1 -1
  355. package/prebuilt-themes/default/inputs/password-input.css +5 -0
  356. package/prebuilt-themes/default/inputs/password-input.css.map +1 -1
  357. package/prebuilt-themes/default/inputs/search-bar.css +5 -0
  358. package/prebuilt-themes/default/inputs/search-bar.css.map +1 -1
  359. package/prebuilt-themes/default/inputs/simple-input.css +5 -0
  360. package/prebuilt-themes/default/inputs/simple-input.css.map +1 -1
  361. package/prebuilt-themes/default/segment.css.map +1 -1
  362. package/prebuilt-themes/default/select.css +4 -0
  363. package/prebuilt-themes/default/select.css.map +1 -1
  364. package/prebuilt-themes/default/tabber.css +2 -0
  365. package/prebuilt-themes/default/tabber.css.map +1 -1
  366. package/prebuilt-themes/default/table.css +17 -0
  367. package/prebuilt-themes/default/table.css.map +1 -1
  368. package/themes/default/_clear-button.scss +73 -73
  369. package/themes/default/badge.scss +94 -94
  370. package/themes/default/buttons/button.scss +72 -72
  371. package/themes/default/buttons/fab.scss +74 -74
  372. package/themes/default/buttons/icon-button.scss +55 -62
  373. package/themes/default/card.scss +129 -129
  374. package/themes/default/checkbox.scss +1 -1
  375. package/themes/default/chips.scss +200 -200
  376. package/themes/default/core.scss +99 -99
  377. package/themes/default/inputs/_shared.scss +5 -0
  378. package/themes/default/inputs/digit-input.scss +56 -56
  379. package/themes/default/inputs/file-input.scss +85 -85
  380. package/themes/default/inputs/hex-input.scss +27 -27
  381. package/themes/default/modal.scss +93 -93
  382. package/themes/default/segment.scss +355 -351
  383. package/themes/default/select.scss +259 -255
  384. package/themes/default/snackbar.scss +58 -58
  385. package/themes/default/tabber.scss +89 -87
  386. package/themes/default/table.scss +20 -0
  387. package/esm2022/lib/color/color-picker/color-picker.types.mjs +0 -11
  388. package/esm2022/lib/inputs/color-input/color-input.directives.mjs +0 -101
  389. package/esm2022/lib/inputs/color-input/color-input.types.mjs +0 -2
  390. package/esm2022/lib/inputs/hex-input.model.mjs +0 -97
  391. package/lib/color/color-picker/color-picker.types.d.ts +0 -21
  392. package/lib/inputs/color-input/color-input.directives.d.ts +0 -52
  393. package/lib/inputs/color-input/color-input.types.d.ts +0 -5
@@ -1,12 +1,12 @@
1
- import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, contentChildren, input, output, signal } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, contentChildren, inject, input, output, signal, } from '@angular/core';
2
2
  import { coerceBooleanProperty } from '@ardium-ui/devkit';
3
- import { OneAxisAlignment } from '../types/alignment.types';
4
- import { ComponentColor } from '../types/colors.types';
5
3
  import { ArdiumTabComponent } from './tab/tab.component';
4
+ import { ARD_TABBER_DEFAULTS } from './tabber.defaults';
6
5
  import * as i0 from "@angular/core";
7
6
  import * as i1 from "@angular/common";
8
7
  export class ArdiumTabberComponent {
9
8
  constructor() {
9
+ this._DEFAULTS = inject(ARD_TABBER_DEFAULTS);
10
10
  this.tabs = contentChildren(ArdiumTabComponent, { descendants: true });
11
11
  this.currentTab = signal(null);
12
12
  this.currentFocusedTab = signal(null);
@@ -15,12 +15,12 @@ export class ArdiumTabberComponent {
15
15
  this.blurEvent = output({ alias: 'blur' });
16
16
  this.changeTab = output();
17
17
  //! appearance
18
- this.color = input(ComponentColor.Primary);
18
+ this.color = input(this._DEFAULTS.color);
19
19
  this.ngClasses = computed(() => [`ard-color-${this.color()}`].join(' '));
20
20
  //! tab container settings
21
- this.stretchTabs = input(false, { transform: v => coerceBooleanProperty(v) });
22
- this.uniformTabWidths = input(false, { transform: v => coerceBooleanProperty(v) });
23
- this.tabAlignment = input(OneAxisAlignment.Left);
21
+ this.stretchTabs = input(this._DEFAULTS.stretchTabs, { transform: v => coerceBooleanProperty(v) });
22
+ this.uniformTabWidths = input(this._DEFAULTS.uniformTabWidths, { transform: v => coerceBooleanProperty(v) });
23
+ this.tabAlignment = input(this._DEFAULTS.tabAlignment);
24
24
  this.tabContainerClasses = computed(() => [
25
25
  this.uniformTabWidths() && !this.stretchTabs() ? 'ard-uniform-tab-widths' : '',
26
26
  this.stretchTabs() ? 'ard-stretch-tabs' : '',
@@ -81,10 +81,10 @@ export class ArdiumTabberComponent {
81
81
  this.currentFocusedTab.set(null);
82
82
  }
83
83
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ArdiumTabberComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
84
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: ArdiumTabberComponent, selector: "ard-tabber", inputs: { initialTab: { classPropertyName: "initialTab", publicName: "initialTab", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, stretchTabs: { classPropertyName: "stretchTabs", publicName: "stretchTabs", isSignal: true, isRequired: false, transformFunction: null }, uniformTabWidths: { classPropertyName: "uniformTabWidths", publicName: "uniformTabWidths", isSignal: true, isRequired: false, transformFunction: null }, tabAlignment: { classPropertyName: "tabAlignment", publicName: "tabAlignment", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { focusEvent: "focus", blurEvent: "blur", changeTab: "changeTab" }, queries: [{ propertyName: "tabs", predicate: ArdiumTabComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div\r\n class=\"ard-tabber\"\r\n [ngClass]=\"ngClasses()\"\r\n>\r\n <div\r\n class=\"ard-tabber-tabs\"\r\n [ngClass]=\"tabContainerClasses()\"\r\n [style]=\"{ '--ard-_tabber-tabs': tabs().length }\"\r\n >\r\n @for (tab of tabs(); track tab) {\r\n <button\r\n #focusableElement\r\n type=\"button\"\r\n role=\"tab\"\r\n class=\"ard-tab-button\"\r\n [id]=\"tab.tabId()\"\r\n [class.ard-tab-active]=\"tab === currentTab()\"\r\n [class.ard-tab-focused]=\"tab === currentFocusedTab()\"\r\n (click)=\"!tab.selected() && onTabClick(tab)\"\r\n (focus)=\"onTabFocus(tab)\"\r\n (blur)=\"onTabBlur(tab)\"\r\n [tabindex]=\"tabIndex()\"\r\n >\r\n <div class=\"ard-focus-overlay\"></div>\r\n {{ tab.label() }}\r\n </button>\r\n }\r\n </div>\r\n <div\r\n role=\"tabpanel\"\r\n class=\"ard-tabber-content\"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n", styles: [".ard-tabber ard-tab{display:none}.ard-tabber ard-tab.ard-tab-selected{display:block}.ard-tabber .ard-tabber-tabs.ard-uniform-tab-widths{display:grid;grid-template-columns:repeat(var(--ard-_tabber-tabs),1fr);max-width:max-content}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
84
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: ArdiumTabberComponent, selector: "ard-tabber", inputs: { initialTab: { classPropertyName: "initialTab", publicName: "initialTab", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, stretchTabs: { classPropertyName: "stretchTabs", publicName: "stretchTabs", isSignal: true, isRequired: false, transformFunction: null }, uniformTabWidths: { classPropertyName: "uniformTabWidths", publicName: "uniformTabWidths", isSignal: true, isRequired: false, transformFunction: null }, tabAlignment: { classPropertyName: "tabAlignment", publicName: "tabAlignment", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { focusEvent: "focus", blurEvent: "blur", changeTab: "changeTab" }, queries: [{ propertyName: "tabs", predicate: ArdiumTabComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"ard-tabber\"\n [ngClass]=\"ngClasses()\"\n>\n <div\n class=\"ard-tabber-tabs\"\n [ngClass]=\"tabContainerClasses()\"\n [style]=\"{ '--ard-_tabber-tabs': tabs().length }\"\n >\n @for (tab of tabs(); track tab) {\n <button\n #focusableElement\n type=\"button\"\n role=\"tab\"\n class=\"ard-tab-button\"\n [id]=\"tab.tabId()\"\n [class.ard-tab-active]=\"tab === currentTab()\"\n [class.ard-tab-focused]=\"tab === currentFocusedTab()\"\n (click)=\"!tab.selected() && onTabClick(tab)\"\n (focus)=\"onTabFocus(tab)\"\n (blur)=\"onTabBlur(tab)\"\n [tabindex]=\"tabIndex()\"\n >\n <div class=\"ard-focus-overlay\"></div>\n {{ tab.label() }}\n </button>\n }\n </div>\n <div\n role=\"tabpanel\"\n class=\"ard-tabber-content\"\n >\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".ard-tabber ard-tab{display:none}.ard-tabber ard-tab.ard-tab-selected{display:block}.ard-tabber .ard-tabber-tabs.ard-uniform-tab-widths{display:grid;grid-template-columns:repeat(var(--ard-_tabber-tabs),1fr);max-width:max-content}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
85
85
  }
86
86
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ArdiumTabberComponent, decorators: [{
87
87
  type: Component,
88
- args: [{ selector: 'ard-tabber', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n class=\"ard-tabber\"\r\n [ngClass]=\"ngClasses()\"\r\n>\r\n <div\r\n class=\"ard-tabber-tabs\"\r\n [ngClass]=\"tabContainerClasses()\"\r\n [style]=\"{ '--ard-_tabber-tabs': tabs().length }\"\r\n >\r\n @for (tab of tabs(); track tab) {\r\n <button\r\n #focusableElement\r\n type=\"button\"\r\n role=\"tab\"\r\n class=\"ard-tab-button\"\r\n [id]=\"tab.tabId()\"\r\n [class.ard-tab-active]=\"tab === currentTab()\"\r\n [class.ard-tab-focused]=\"tab === currentFocusedTab()\"\r\n (click)=\"!tab.selected() && onTabClick(tab)\"\r\n (focus)=\"onTabFocus(tab)\"\r\n (blur)=\"onTabBlur(tab)\"\r\n [tabindex]=\"tabIndex()\"\r\n >\r\n <div class=\"ard-focus-overlay\"></div>\r\n {{ tab.label() }}\r\n </button>\r\n }\r\n </div>\r\n <div\r\n role=\"tabpanel\"\r\n class=\"ard-tabber-content\"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n", styles: [".ard-tabber ard-tab{display:none}.ard-tabber ard-tab.ard-tab-selected{display:block}.ard-tabber .ard-tabber-tabs.ard-uniform-tab-widths{display:grid;grid-template-columns:repeat(var(--ard-_tabber-tabs),1fr);max-width:max-content}\n"] }]
88
+ args: [{ selector: 'ard-tabber', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"ard-tabber\"\n [ngClass]=\"ngClasses()\"\n>\n <div\n class=\"ard-tabber-tabs\"\n [ngClass]=\"tabContainerClasses()\"\n [style]=\"{ '--ard-_tabber-tabs': tabs().length }\"\n >\n @for (tab of tabs(); track tab) {\n <button\n #focusableElement\n type=\"button\"\n role=\"tab\"\n class=\"ard-tab-button\"\n [id]=\"tab.tabId()\"\n [class.ard-tab-active]=\"tab === currentTab()\"\n [class.ard-tab-focused]=\"tab === currentFocusedTab()\"\n (click)=\"!tab.selected() && onTabClick(tab)\"\n (focus)=\"onTabFocus(tab)\"\n (blur)=\"onTabBlur(tab)\"\n [tabindex]=\"tabIndex()\"\n >\n <div class=\"ard-focus-overlay\"></div>\n {{ tab.label() }}\n </button>\n }\n </div>\n <div\n role=\"tabpanel\"\n class=\"ard-tabber-content\"\n >\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".ard-tabber ard-tab{display:none}.ard-tabber ard-tab.ard-tab-selected{display:block}.ard-tabber .ard-tabber-tabs.ard-uniform-tab-widths{display:grid;grid-template-columns:repeat(var(--ard-_tabber-tabs),1fr);max-width:max-content}\n"] }]
89
89
  }] });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiYmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvdGFiYmVyL3RhYmJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL3RhYmJlci90YWJiZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixlQUFlLEVBQ2YsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7QUFTekQsTUFBTSxPQUFPLHFCQUFxQjtJQVBsQztRQVFrQixTQUFJLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFekUsZUFBVSxHQUFHLE1BQU0sQ0FBNEIsSUFBSSxDQUFDLENBQUM7UUFDckQsc0JBQWlCLEdBQUcsTUFBTSxDQUE0QixJQUFJLENBQUMsQ0FBQztRQUU1RCxlQUFVLEdBQUcsS0FBSyxDQUFxQixTQUFTLENBQUMsQ0FBQztRQThEbEQsZUFBVSxHQUFHLE1BQU0sQ0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELGNBQVMsR0FBRyxNQUFNLENBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM5QyxjQUFTLEdBQUcsTUFBTSxFQUFVLENB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QUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7OEdBbEVVLHFCQUFxQjtrR0FBckIscUJBQXFCLGc5QkFDTyxrQkFBa0IsZ0VDeEIzRCwrN0JBbUNBOzsyRkRaYSxxQkFBcUI7a0JBUGpDLFNBQVM7K0JBQ0UsWUFBWSxpQkFHUCxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBjb21wdXRlZCxcclxuICBjb250ZW50Q2hpbGRyZW4sXHJcbiAgaW5wdXQsXHJcbiAgb3V0cHV0LFxyXG4gIHNpZ25hbFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYXJkaXVtLXVpL2RldmtpdCc7XHJcbmltcG9ydCB7IE9uZUF4aXNBbGlnbm1lbnQgfSBmcm9tICcuLi90eXBlcy9hbGlnbm1lbnQudHlwZXMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb2xvciB9IGZyb20gJy4uL3R5cGVzL2NvbG9ycy50eXBlcyc7XHJcbmltcG9ydCB7IEFyZGl1bVRhYkNvbXBvbmVudCB9IGZyb20gJy4vdGFiL3RhYi5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcmQtdGFiYmVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFiYmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdGFiYmVyLmNvbXBvbmVudC5zY3NzJyxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXJkaXVtVGFiYmVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XHJcbiAgcHVibGljIHJlYWRvbmx5IHRhYnMgPSBjb250ZW50Q2hpbGRyZW4oQXJkaXVtVGFiQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pO1xyXG5cclxuICByZWFkb25seSBjdXJyZW50VGFiID0gc2lnbmFsPEFyZGl1bVRhYkNvbXBvbmVudCB8IG51bGw+KG51bGwpO1xyXG4gIHJlYWRvbmx5IGN1cnJlbnRGb2N1c2VkVGFiID0gc2lnbmFsPEFyZGl1bVRhYkNvbXBvbmVudCB8IG51bGw+KG51bGwpO1xyXG5cclxuICByZWFkb25seSBpbml0aWFsVGFiID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICBsZXQgc2VsZWN0ZWRDbXA6IEFyZGl1bVRhYkNvbXBvbmVudCB8IG51bGwgPSBudWxsO1xyXG4gICAgZm9yIChjb25zdCBjbXAgb2YgdGhpcy50YWJzKCkpIHtcclxuICAgICAgaWYgKGNtcC5zZWxlY3RlZCgpKSB7XHJcbiAgICAgICAgLy8gZW5zdXJlIG9ubHkgb25lIHRhYiBpcyBzZWxlY3RlZFxyXG4gICAgICAgIGlmIChzZWxlY3RlZENtcCkge1xyXG4gICAgICAgICAgY21wLnNlbGVjdGVkLnNldChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZWxlY3RlZENtcCA9IGNtcDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY21wLmZvY3VzRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmZvY3VzRXZlbnQuZW1pdChjbXAudGFiSWQoKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjbXAuYmx1ckV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ibHVyRXZlbnQuZW1pdChjbXAudGFiSWQoKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjbXAuc2VsZWN0ZWRDaGFuZ2Uuc3Vic2NyaWJlKGlzU2VsZWN0ZWQgPT4ge1xyXG4gICAgICAgIGlmICghaXNTZWxlY3RlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlVGFiLmVtaXQoY21wLnRhYklkKCkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXNlbGVjdGVkQ21wKSB7XHJcbiAgICAgIGNvbnN0IGluaXRpYWxseVNlbGVjdGVkVGFiID0gdGhpcy50YWJzKCkuZmluZCh0YWIgPT4gdGFiLnRhYklkKCkgPT09IHRoaXMuaW5pdGlhbFRhYigpKVxyXG4gICAgICBzZWxlY3RlZENtcCA9IGluaXRpYWxseVNlbGVjdGVkVGFiID8/IHRoaXMudGFicygpWzBdID8/IG51bGw7XHJcblxyXG4gICAgICBpZiAoc2VsZWN0ZWRDbXApIHtcclxuICAgICAgICBzZWxlY3RlZENtcC5zZWxlY3RlZC5zZXQodHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmN1cnJlbnRUYWIuc2V0KHNlbGVjdGVkQ21wKTtcclxuICB9XHJcblxyXG4gIG9uVGFiQ2xpY2sodGFiOiBBcmRpdW1UYWJDb21wb25lbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnIgPSB0aGlzLmN1cnJlbnRUYWIoKTtcclxuICAgIGlmIChjdXJyKSB7XHJcbiAgICAgIGN1cnIuc2VsZWN0ZWQuc2V0KGZhbHNlKTtcclxuICAgICAgY3Vyci5zZWxlY3RlZENoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgIH1cclxuICAgIHRoaXMuY3VycmVudFRhYi5zZXQodGFiKTtcclxuXHJcbiAgICB0YWIuc2VsZWN0ZWQuc2V0KHRydWUpO1xyXG4gICAgdGFiLnNlbGVjdGVkQ2hhbmdlLmVtaXQodHJ1ZSk7XHJcbiAgfVxyXG4gIG9uVGFiRm9jdXModGFiOiBBcmRpdW1UYWJDb21wb25lbnQpOiB2b2lkIHtcclxuICAgIHRhYi5mb2N1c0V2ZW50LmVtaXQoKTtcclxuICAgIHRhYi5mb2N1c2VkLnNldCh0cnVlKTtcclxuXHJcbiAgICB0aGlzLmN1cnJlbnRGb2N1c2VkVGFiLnNldCh0YWIpO1xyXG4gIH1cclxuICBvblRhYkJsdXIodGFiOiBBcmRpdW1UYWJDb21wb25lbnQpOiB2b2lkIHtcclxuICAgIHRhYi5ibHVyRXZlbnQuZW1pdCgpO1xyXG4gICAgdGFiLmZvY3VzZWQuc2V0KGZhbHNlKTtcclxuXHJcbiAgICB0aGlzLmN1cnJlbnRGb2N1c2VkVGFiLnNldChudWxsKTtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IGZvY3VzRXZlbnQgPSBvdXRwdXQ8c3RyaW5nPih7IGFsaWFzOiAnZm9jdXMnIH0pO1xyXG4gIHJlYWRvbmx5IGJsdXJFdmVudCA9IG91dHB1dDxzdHJpbmc+KHsgYWxpYXM6ICdibHVyJyB9KTtcclxuICByZWFkb25seSBjaGFuZ2VUYWIgPSBvdXRwdXQ8c3RyaW5nPigpO1xyXG5cclxuICAvLyEgYXBwZWFyYW5jZVxyXG4gIHJlYWRvbmx5IGNvbG9yID0gaW5wdXQ8Q29tcG9uZW50Q29sb3I+KENvbXBvbmVudENvbG9yLlByaW1hcnkpO1xyXG5cclxuICByZWFkb25seSBuZ0NsYXNzZXMgPSBjb21wdXRlZCgoKSA9PiBbYGFyZC1jb2xvci0ke3RoaXMuY29sb3IoKX1gXS5qb2luKCcgJykpO1xyXG5cclxuICAvLyEgdGFiIGNvbnRhaW5lciBzZXR0aW5nc1xyXG4gIHJlYWRvbmx5IHN0cmV0Y2hUYWJzID0gaW5wdXQ8Ym9vbGVhbiwgYW55PihmYWxzZSwgeyB0cmFuc2Zvcm06IHYgPT4gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpIH0pO1xyXG4gIHJlYWRvbmx5IHVuaWZvcm1UYWJXaWR0aHMgPSBpbnB1dDxib29sZWFuLCBhbnk+KGZhbHNlLCB7IHRyYW5zZm9ybTogdiA9PiBjb2VyY2VCb29sZWFuUHJvcGVydHkodikgfSk7XHJcbiAgcmVhZG9ubHkgdGFiQWxpZ25tZW50ID0gaW5wdXQ8T25lQXhpc0FsaWdubWVudD4oT25lQXhpc0FsaWdubWVudC5MZWZ0KTtcclxuXHJcbiAgcmVhZG9ubHkgdGFiQ29udGFpbmVyQ2xhc3NlcyA9IGNvbXB1dGVkKCgpID0+XHJcbiAgICBbXHJcbiAgICAgIHRoaXMudW5pZm9ybVRhYldpZHRocygpICYmICF0aGlzLnN0cmV0Y2hUYWJzKCkgPyAnYXJkLXVuaWZvcm0tdGFiLXdpZHRocycgOiAnJyxcclxuICAgICAgdGhpcy5zdHJldGNoVGFicygpID8gJ2FyZC1zdHJldGNoLXRhYnMnIDogJycsXHJcbiAgICAgIHRoaXMuc3RyZXRjaFRhYnMoKSA/ICcnIDogYGFyZC10YWItYWxpZ24tJHt0aGlzLnRhYkFsaWdubWVudCgpfWAsXHJcbiAgICBdLmpvaW4oJyAnKVxyXG4gICk7XHJcblxyXG4gIC8vISBvdGhlclxyXG4gIHJlYWRvbmx5IHRhYkluZGV4ID0gaW5wdXQ8bnVtYmVyIHwgc3RyaW5nPigwKTtcclxufVxyXG4iLCI8ZGl2XHJcbiAgY2xhc3M9XCJhcmQtdGFiYmVyXCJcclxuICBbbmdDbGFzc109XCJuZ0NsYXNzZXMoKVwiXHJcbj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImFyZC10YWJiZXItdGFic1wiXHJcbiAgICBbbmdDbGFzc109XCJ0YWJDb250YWluZXJDbGFzc2VzKClcIlxyXG4gICAgW3N0eWxlXT1cInsgJy0tYXJkLV90YWJiZXItdGFicyc6IHRhYnMoKS5sZW5ndGggfVwiXHJcbiAgPlxyXG4gICAgQGZvciAodGFiIG9mIHRhYnMoKTsgdHJhY2sgdGFiKSB7XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICNmb2N1c2FibGVFbGVtZW50XHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICByb2xlPVwidGFiXCJcclxuICAgICAgY2xhc3M9XCJhcmQtdGFiLWJ1dHRvblwiXHJcbiAgICAgIFtpZF09XCJ0YWIudGFiSWQoKVwiXHJcbiAgICAgIFtjbGFzcy5hcmQtdGFiLWFjdGl2ZV09XCJ0YWIgPT09IGN1cnJlbnRUYWIoKVwiXHJcbiAgICAgIFtjbGFzcy5hcmQtdGFiLWZvY3VzZWRdPVwidGFiID09PSBjdXJyZW50Rm9jdXNlZFRhYigpXCJcclxuICAgICAgKGNsaWNrKT1cIiF0YWIuc2VsZWN0ZWQoKSAmJiBvblRhYkNsaWNrKHRhYilcIlxyXG4gICAgICAoZm9jdXMpPVwib25UYWJGb2N1cyh0YWIpXCJcclxuICAgICAgKGJsdXIpPVwib25UYWJCbHVyKHRhYilcIlxyXG4gICAgICBbdGFiaW5kZXhdPVwidGFiSW5kZXgoKVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhcmQtZm9jdXMtb3ZlcmxheVwiPjwvZGl2PlxyXG4gICAgICB7eyB0YWIubGFiZWwoKSB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgcm9sZT1cInRhYnBhbmVsXCJcclxuICAgIGNsYXNzPVwiYXJkLXRhYmJlci1jb250ZW50XCJcclxuICA+XHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiYmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvdGFiYmVyL3RhYmJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL3RhYmJlci90YWJiZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixlQUFlLEVBQ2YsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFTeEQsTUFBTSxPQUFPLHFCQUFxQjtJQVBsQztRQVFxQixjQUFTLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFM0MsU0FBSSxHQUFHLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXpFLGVBQVUsR0FBRyxNQUFNLENBQTRCLElBQUksQ0FBQyxDQUFDO1FBQ3JELHNCQUFpQixHQUFHLE1BQU0sQ0FBNEIsSUFBSSxDQUFDLENBQUM7UUFFNUQsZUFBVSxHQUFHLEtBQUssQ0FBcUIsU0FBUyxDQUFDLENBQUM7UUE4RGxELGVBQVUsR0FBRyxNQUFNLENBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNoRCxjQUFTLEdBQUcsTUFBTSxDQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDOUMsY0FBUyxHQUFHLE1B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Q0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDOzhHQXBFVSxxQkFBcUI7a0dBQXJCLHFCQUFxQixnOUJBR08sa0JBQWtCLGdFQzVCM0QseTVCQW1DQTs7MkZEVmEscUJBQXFCO2tCQVBqQyxTQUFTOytCQUNFLFlBQVksaUJBR1AsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgY29udGVudENoaWxkcmVuLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYXJkaXVtLXVpL2RldmtpdCc7XG5pbXBvcnQgeyBPbmVBeGlzQWxpZ25tZW50IH0gZnJvbSAnLi4vdHlwZXMvYWxpZ25tZW50LnR5cGVzJztcbmltcG9ydCB7IENvbXBvbmVudENvbG9yIH0gZnJvbSAnLi4vdHlwZXMvY29sb3JzLnR5cGVzJztcbmltcG9ydCB7IEFyZGl1bVRhYkNvbXBvbmVudCB9IGZyb20gJy4vdGFiL3RhYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVJEX1RBQkJFUl9ERUZBVUxUUyB9IGZyb20gJy4vdGFiYmVyLmRlZmF1bHRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXJkLXRhYmJlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJiZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdGFiYmVyLmNvbXBvbmVudC5zY3NzJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFyZGl1bVRhYmJlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX0RFRkFVTFRTID0gaW5qZWN0KEFSRF9UQUJCRVJfREVGQVVMVFMpO1xuXG4gIHB1YmxpYyByZWFkb25seSB0YWJzID0gY29udGVudENoaWxkcmVuKEFyZGl1bVRhYkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KTtcblxuICByZWFkb25seSBjdXJyZW50VGFiID0gc2lnbmFsPEFyZGl1bVRhYkNvbXBvbmVudCB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBjdXJyZW50Rm9jdXNlZFRhYiA9IHNpZ25hbDxBcmRpdW1UYWJDb21wb25lbnQgfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBpbml0aWFsVGFiID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBsZXQgc2VsZWN0ZWRDbXA6IEFyZGl1bVRhYkNvbXBvbmVudCB8IG51bGwgPSBudWxsO1xuICAgIGZvciAoY29uc3QgY21wIG9mIHRoaXMudGFicygpKSB7XG4gICAgICBpZiAoY21wLnNlbGVjdGVkKCkpIHtcbiAgICAgICAgLy8gZW5zdXJlIG9ubHkgb25lIHRhYiBpcyBzZWxlY3RlZFxuICAgICAgICBpZiAoc2VsZWN0ZWRDbXApIHtcbiAgICAgICAgICBjbXAuc2VsZWN0ZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGVjdGVkQ21wID0gY21wO1xuICAgICAgfVxuXG4gICAgICBjbXAuZm9jdXNFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmZvY3VzRXZlbnQuZW1pdChjbXAudGFiSWQoKSk7XG4gICAgICB9KTtcbiAgICAgIGNtcC5ibHVyRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5ibHVyRXZlbnQuZW1pdChjbXAudGFiSWQoKSk7XG4gICAgICB9KTtcbiAgICAgIGNtcC5zZWxlY3RlZENoYW5nZS5zdWJzY3JpYmUoaXNTZWxlY3RlZCA9PiB7XG4gICAgICAgIGlmICghaXNTZWxlY3RlZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmNoYW5nZVRhYi5lbWl0KGNtcC50YWJJZCgpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghc2VsZWN0ZWRDbXApIHtcbiAgICAgIGNvbnN0IGluaXRpYWxseVNlbGVjdGVkVGFiID0gdGhpcy50YWJzKCkuZmluZCh0YWIgPT4gdGFiLnRhYklkKCkgPT09IHRoaXMuaW5pdGlhbFRhYigpKTtcbiAgICAgIHNlbGVjdGVkQ21wID0gaW5pdGlhbGx5U2VsZWN0ZWRUYWIgPz8gdGhpcy50YWJzKClbMF0gPz8gbnVsbDtcblxuICAgICAgaWYgKHNlbGVjdGVkQ21wKSB7XG4gICAgICAgIHNlbGVjdGVkQ21wLnNlbGVjdGVkLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRUYWIuc2V0KHNlbGVjdGVkQ21wKTtcbiAgfVxuXG4gIG9uVGFiQ2xpY2sodGFiOiBBcmRpdW1UYWJDb21wb25lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyID0gdGhpcy5jdXJyZW50VGFiKCk7XG4gICAgaWYgKGN1cnIpIHtcbiAgICAgIGN1cnIuc2VsZWN0ZWQuc2V0KGZhbHNlKTtcbiAgICAgIGN1cnIuc2VsZWN0ZWRDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFRhYi5zZXQodGFiKTtcblxuICAgIHRhYi5zZWxlY3RlZC5zZXQodHJ1ZSk7XG4gICAgdGFiLnNlbGVjdGVkQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gIH1cbiAgb25UYWJGb2N1cyh0YWI6IEFyZGl1bVRhYkNvbXBvbmVudCk6IHZvaWQge1xuICAgIHRhYi5mb2N1c0V2ZW50LmVtaXQoKTtcbiAgICB0YWIuZm9jdXNlZC5zZXQodHJ1ZSk7XG5cbiAgICB0aGlzLmN1cnJlbnRGb2N1c2VkVGFiLnNldCh0YWIpO1xuICB9XG4gIG9uVGFiQmx1cih0YWI6IEFyZGl1bVRhYkNvbXBvbmVudCk6IHZvaWQge1xuICAgIHRhYi5ibHVyRXZlbnQuZW1pdCgpO1xuICAgIHRhYi5mb2N1c2VkLnNldChmYWxzZSk7XG5cbiAgICB0aGlzLmN1cnJlbnRGb2N1c2VkVGFiLnNldChudWxsKTtcbiAgfVxuXG4gIHJlYWRvbmx5IGZvY3VzRXZlbnQgPSBvdXRwdXQ8c3RyaW5nPih7IGFsaWFzOiAnZm9jdXMnIH0pO1xuICByZWFkb25seSBibHVyRXZlbnQgPSBvdXRwdXQ8c3RyaW5nPih7IGFsaWFzOiAnYmx1cicgfSk7XG4gIHJlYWRvbmx5IGNoYW5nZVRhYiA9IG91dHB1dDxzdHJpbmc+KCk7XG5cbiAgLy8hIGFwcGVhcmFuY2VcbiAgcmVhZG9ubHkgY29sb3IgPSBpbnB1dDxDb21wb25lbnRDb2xvcj4odGhpcy5fREVGQVVMVFMuY29sb3IpO1xuXG4gIHJlYWRvbmx5IG5nQ2xhc3NlcyA9IGNvbXB1dGVkKCgpID0+IFtgYXJkLWNvbG9yLSR7dGhpcy5jb2xvcigpfWBdLmpvaW4oJyAnKSk7XG5cbiAgLy8hIHRhYiBjb250YWluZXIgc2V0dGluZ3NcbiAgcmVhZG9ubHkgc3RyZXRjaFRhYnMgPSBpbnB1dDxib29sZWFuLCBhbnk+KHRoaXMuX0RFRkFVTFRTLnN0cmV0Y2hUYWJzLCB7IHRyYW5zZm9ybTogdiA9PiBjb2VyY2VCb29sZWFuUHJvcGVydHkodikgfSk7XG4gIHJlYWRvbmx5IHVuaWZvcm1UYWJXaWR0aHMgPSBpbnB1dDxib29sZWFuLCBhbnk+KHRoaXMuX0RFRkFVTFRTLnVuaWZvcm1UYWJXaWR0aHMsIHsgdHJhbnNmb3JtOiB2ID0+IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KSB9KTtcbiAgcmVhZG9ubHkgdGFiQWxpZ25tZW50ID0gaW5wdXQ8T25lQXhpc0FsaWdubWVudD4odGhpcy5fREVGQVVMVFMudGFiQWxpZ25tZW50KTtcblxuICByZWFkb25seSB0YWJDb250YWluZXJDbGFzc2VzID0gY29tcHV0ZWQoKCkgPT5cbiAgICBbXG4gICAgICB0aGlzLnVuaWZvcm1UYWJXaWR0aHMoKSAmJiAhdGhpcy5zdHJldGNoVGFicygpID8gJ2FyZC11bmlmb3JtLXRhYi13aWR0aHMnIDogJycsXG4gICAgICB0aGlzLnN0cmV0Y2hUYWJzKCkgPyAnYXJkLXN0cmV0Y2gtdGFicycgOiAnJyxcbiAgICAgIHRoaXMuc3RyZXRjaFRhYnMoKSA/ICcnIDogYGFyZC10YWItYWxpZ24tJHt0aGlzLnRhYkFsaWdubWVudCgpfWAsXG4gICAgXS5qb2luKCcgJylcbiAgKTtcblxuICAvLyEgb3RoZXJcbiAgcmVhZG9ubHkgdGFiSW5kZXggPSBpbnB1dDxudW1iZXIgfCBzdHJpbmc+KDApO1xufVxuIiwiPGRpdlxuICBjbGFzcz1cImFyZC10YWJiZXJcIlxuICBbbmdDbGFzc109XCJuZ0NsYXNzZXMoKVwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImFyZC10YWJiZXItdGFic1wiXG4gICAgW25nQ2xhc3NdPVwidGFiQ29udGFpbmVyQ2xhc3NlcygpXCJcbiAgICBbc3R5bGVdPVwieyAnLS1hcmQtX3RhYmJlci10YWJzJzogdGFicygpLmxlbmd0aCB9XCJcbiAgPlxuICAgIEBmb3IgKHRhYiBvZiB0YWJzKCk7IHRyYWNrIHRhYikge1xuICAgICAgPGJ1dHRvblxuICAgICAgICAjZm9jdXNhYmxlRWxlbWVudFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgcm9sZT1cInRhYlwiXG4gICAgICAgIGNsYXNzPVwiYXJkLXRhYi1idXR0b25cIlxuICAgICAgICBbaWRdPVwidGFiLnRhYklkKClcIlxuICAgICAgICBbY2xhc3MuYXJkLXRhYi1hY3RpdmVdPVwidGFiID09PSBjdXJyZW50VGFiKClcIlxuICAgICAgICBbY2xhc3MuYXJkLXRhYi1mb2N1c2VkXT1cInRhYiA9PT0gY3VycmVudEZvY3VzZWRUYWIoKVwiXG4gICAgICAgIChjbGljayk9XCIhdGFiLnNlbGVjdGVkKCkgJiYgb25UYWJDbGljayh0YWIpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uVGFiRm9jdXModGFiKVwiXG4gICAgICAgIChibHVyKT1cIm9uVGFiQmx1cih0YWIpXCJcbiAgICAgICAgW3RhYmluZGV4XT1cInRhYkluZGV4KClcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLWZvY3VzLW92ZXJsYXlcIj48L2Rpdj5cbiAgICAgICAge3sgdGFiLmxhYmVsKCkgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICByb2xlPVwidGFicGFuZWxcIlxuICAgIGNsYXNzPVwiYXJkLXRhYmJlci1jb250ZW50XCJcbiAgPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { OneAxisAlignment } from './../types/alignment.types';
3
+ import { ComponentColor } from './../types/colors.types';
4
+ const _tabberDefaults = {
5
+ color: ComponentColor.Primary,
6
+ stretchTabs: false,
7
+ uniformTabWidths: false,
8
+ tabAlignment: OneAxisAlignment.Left,
9
+ tabIndex: 0,
10
+ };
11
+ export const ARD_TABBER_DEFAULTS = new InjectionToken('ard-tabber-defaults', {
12
+ factory: () => ({
13
+ ..._tabberDefaults,
14
+ }),
15
+ });
16
+ export function provideTabberDefaults(config) {
17
+ return { provide: ARD_TABBER_DEFAULTS, useValue: { ..._tabberDefaults, ...config } };
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiYmVyLmRlZmF1bHRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi90YWJiZXIvdGFiYmVyLmRlZmF1bHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBVXpELE1BQU0sZUFBZSxHQUFzQjtJQUN6QyxLQUFLLEVBQUUsY0FBYyxDQUFDLE9BQU87SUFDN0IsV0FBVyxFQUFFLEtBQUs7SUFDbEIsZ0JBQWdCLEVBQUUsS0FBSztJQUN2QixZQUFZLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtJQUNuQyxRQUFRLEVBQUUsQ0FBQztDQUNaLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FBb0IscUJBQXFCLEVBQUU7SUFDOUYsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDZCxHQUFHLGVBQWU7S0FDbkIsQ0FBQztDQUNILENBQUMsQ0FBQztBQUVILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxNQUFrQztJQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsZUFBZSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUN2RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPbmVBeGlzQWxpZ25tZW50IH0gZnJvbSAnLi8uLi90eXBlcy9hbGlnbm1lbnQudHlwZXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50Q29sb3IgfSBmcm9tICcuLy4uL3R5cGVzL2NvbG9ycy50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJkVGFiYmVyRGVmYXVsdHMge1xuICBjb2xvcjogQ29tcG9uZW50Q29sb3I7XG4gIHN0cmV0Y2hUYWJzOiBib29sZWFuO1xuICB1bmlmb3JtVGFiV2lkdGhzOiBib29sZWFuO1xuICB0YWJBbGlnbm1lbnQ6IE9uZUF4aXNBbGlnbm1lbnQ7XG4gIHRhYkluZGV4OiBudW1iZXI7XG59XG5cbmNvbnN0IF90YWJiZXJEZWZhdWx0czogQXJkVGFiYmVyRGVmYXVsdHMgPSB7XG4gIGNvbG9yOiBDb21wb25lbnRDb2xvci5QcmltYXJ5LFxuICBzdHJldGNoVGFiczogZmFsc2UsXG4gIHVuaWZvcm1UYWJXaWR0aHM6IGZhbHNlLFxuICB0YWJBbGlnbm1lbnQ6IE9uZUF4aXNBbGlnbm1lbnQuTGVmdCxcbiAgdGFiSW5kZXg6IDAsXG59O1xuXG5leHBvcnQgY29uc3QgQVJEX1RBQkJFUl9ERUZBVUxUUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBcmRUYWJiZXJEZWZhdWx0cz4oJ2FyZC10YWJiZXItZGVmYXVsdHMnLCB7XG4gIGZhY3Rvcnk6ICgpID0+ICh7XG4gICAgLi4uX3RhYmJlckRlZmF1bHRzLFxuICB9KSxcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVRhYmJlckRlZmF1bHRzKGNvbmZpZzogUGFydGlhbDxBcmRUYWJiZXJEZWZhdWx0cz4pOiBQcm92aWRlciB7XG4gIHJldHVybiB7IHByb3ZpZGU6IEFSRF9UQUJCRVJfREVGQVVMVFMsIHVzZVZhbHVlOiB7IC4uLl90YWJiZXJEZWZhdWx0cywgLi4uY29uZmlnIH0gfTtcbn1cbiJdfQ==
@@ -16,4 +16,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
16
16
  exports: [ArdiumTabberComponent, ArdiumTabComponent],
17
17
  }]
18
18
  }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiYmVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvdGFiYmVyL3RhYmJlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBT3pELE1BQU0sT0FBTyxrQkFBa0I7OEdBQWxCLGtCQUFrQjsrR0FBbEIsa0JBQWtCLGlCQUpkLHFCQUFxQixFQUFFLGtCQUFrQixhQUM5QyxZQUFZLGFBQ1oscUJBQXFCLEVBQUUsa0JBQWtCOytHQUV4QyxrQkFBa0IsWUFIbkIsWUFBWTs7MkZBR1gsa0JBQWtCO2tCQUw5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHFCQUFxQixFQUFFLGtCQUFrQixDQUFDO29CQUN6RCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixFQUFFLGtCQUFrQixDQUFDO2lCQUNyRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFyZGl1bVRhYmJlckNvbXBvbmVudCB9IGZyb20gJy4vdGFiYmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFyZGl1bVRhYkNvbXBvbmVudCB9IGZyb20gJy4vdGFiL3RhYi5jb21wb25lbnQnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtBcmRpdW1UYWJiZXJDb21wb25lbnQsIEFyZGl1bVRhYkNvbXBvbmVudF0sXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgZXhwb3J0czogW0FyZGl1bVRhYmJlckNvbXBvbmVudCwgQXJkaXVtVGFiQ29tcG9uZW50XSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFyZGl1bVRhYmJlck1vZHVsZSB7fVxyXG4iXX0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiYmVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvdGFiYmVyL3RhYmJlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBT3pELE1BQU0sT0FBTyxrQkFBa0I7OEdBQWxCLGtCQUFrQjsrR0FBbEIsa0JBQWtCLGlCQUpkLHFCQUFxQixFQUFFLGtCQUFrQixhQUM5QyxZQUFZLGFBQ1oscUJBQXFCLEVBQUUsa0JBQWtCOytHQUV4QyxrQkFBa0IsWUFIbkIsWUFBWTs7MkZBR1gsa0JBQWtCO2tCQUw5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHFCQUFxQixFQUFFLGtCQUFrQixDQUFDO29CQUN6RCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixFQUFFLGtCQUFrQixDQUFDO2lCQUNyRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQXJkaXVtVGFiYmVyQ29tcG9uZW50IH0gZnJvbSAnLi90YWJiZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFyZGl1bVRhYkNvbXBvbmVudCB9IGZyb20gJy4vdGFiL3RhYi5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtBcmRpdW1UYWJiZXJDb21wb25lbnQsIEFyZGl1bVRhYkNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBleHBvcnRzOiBbQXJkaXVtVGFiYmVyQ29tcG9uZW50LCBBcmRpdW1UYWJDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBBcmRpdW1UYWJiZXJNb2R1bGUge31cbiJdfQ==
@@ -1,5 +1,6 @@
1
- export * from './table.module';
2
1
  export * from './table.component';
2
+ export { ARD_TABLE_DEFAULTS, provideTableDefaults } from './table.defaults';
3
3
  export * from './table.directives';
4
+ export * from './table.module';
4
5
  export * from './table.types';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL3RhYmxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90YWJsZS5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuZGlyZWN0aXZlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUudHlwZXMnO1xyXG4iXX0=
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL3RhYmxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsT0FBTyxFQUFFLGtCQUFrQixFQUFvQixvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlGLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdGFibGUuY29tcG9uZW50JztcbmV4cG9ydCB7IEFSRF9UQUJMRV9ERUZBVUxUUywgQXJkVGFibGVEZWZhdWx0cywgcHJvdmlkZVRhYmxlRGVmYXVsdHMgfSBmcm9tICcuL3RhYmxlLmRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuZGlyZWN0aXZlcyc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLnR5cGVzJztcbiJdfQ==
@@ -265,13 +265,13 @@ export class TableItemStorage {
265
265
  //get data
266
266
  const [data, dataColumns] = this._getRowData(rawItemData, index);
267
267
  //get bold
268
- const rowBoldFromPath = this._ardParentComp.rowBoldFrom() ?? this._ardParentComp.DEFAULTS.rowBoldFrom;
268
+ const rowBoldFromPath = this._ardParentComp.rowBoldFrom();
269
269
  let bold = resolvePath(rawItemData, rowBoldFromPath);
270
270
  if (this._ardParentComp.invertRowBold()) {
271
271
  bold = !bold;
272
272
  }
273
273
  //get disabled
274
- const disabledPath = this._ardParentComp.rowDisabledFrom() ?? this._ardParentComp.DEFAULTS.rowDisabledFrom;
274
+ const disabledPath = this._ardParentComp.rowDisabledFrom();
275
275
  let disabled = evaluate(resolvePath(rawItemData, disabledPath));
276
276
  if (this._ardParentComp.invertRowDisabled()) {
277
277
  disabled = !disabled;
@@ -537,7 +537,7 @@ export class TableItemStorage {
537
537
  }
538
538
  _generateSortedRows(justReverse) {
539
539
  if (justReverse) {
540
- this._sortedItems().reverse();
540
+ this._sortedItems.update(v => [...v.reverse()]);
541
541
  return;
542
542
  }
543
543
  const sortColumnIndex = this._currentSortColumn;
@@ -561,4 +561,4 @@ export class TableItemStorage {
561
561
  this._sortedItems.set([...this.items()].sort((a, b) => sortFn(a.data()[sortColumnIndex], b.data()[sortColumnIndex])));
562
562
  }
563
563
  }
564
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaXRlbS1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS1pdGVtLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxRCxPQUFPLEVBQUUsUUFBUSxFQUFtQix1QkFBdUIsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU3RSxNQUFNLE9BQU8sV0FBVztJQXdCdEIsWUFDRSxRQUFhLEVBQ2IsS0FBYSxFQUNiLElBQVcsRUFDWCxXQUE4QixFQUM5QixRQUFpQixFQUNqQixJQUFhLEVBQ2IsT0FBTyxHQUFHLEtBQUs7UUE5QkEsY0FBUyxHQUFHLE1BQU0sQ0FBTSxTQUFTLENBQUMsQ0FBQztRQUMzQyxhQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUvQixXQUFNLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsVUFBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFekIsYUFBUSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUMxQyxZQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUU3QixVQUFLLEdBQUcsTUFBTSxDQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLFNBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxD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QUMsR0FBRyxDQUFDO29CQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO2dCQUNqQyxPQUFPLENBQUMsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hbCwgY29tcHV0ZWQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyByZXNvbHZlUGF0aCB9IGZyb20gJ3Jlc29sdmUtb2JqZWN0LXBhdGgnO1xyXG5pbXBvcnQgeyBldmFsdWF0ZSwgaXNEZWZpbmVkLCBpc051bGwgfSBmcm9tICdzaW1wbGUtYm9vbCc7XHJcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnLi4vdHlwZXMvdXRpbGl0eS50eXBlcyc7XHJcbmltcG9ydCB7IFNvcnRUeXBlLCBUYWJsZURhdGFDb2x1bW4sIFRhYmxlUGFnaW5hdGlvblN0cmF0ZWd5LCBUYWJsZVN1YmhlYWRlciB9IGZyb20gJy4vdGFibGUudHlwZXMnO1xyXG5pbXBvcnQgeyBhcmVBbGxEYXRhQ29sdW1ucywgaXNUYWJsZVN1YmhlYWRlciwgbWVyZ2UyZEFycmF5cyB9IGZyb20gJy4vdXRpbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFyZFRhYmxlUm93IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtRGF0YSA9IHNpZ25hbDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgcmVhZG9ubHkgaXRlbURhdGEgPSB0aGlzLl9pdGVtRGF0YS5hc1JlYWRvbmx5KCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2luZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xyXG4gIHJlYWRvbmx5IGluZGV4ID0gdGhpcy5faW5kZXguYXNSZWFkb25seSgpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9pc0VtcHR5ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSBpc0VtcHR5ID0gdGhpcy5faXNFbXB0eS5hc1JlYWRvbmx5KCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGEgPSBzaWduYWw8YW55W10+KFtdKTtcclxuICByZWFkb25seSBkYXRhID0gdGhpcy5fZGF0YS5hc1JlYWRvbmx5KCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFDb2x1bW5zID0gc2lnbmFsPFRhYmxlRGF0YUNvbHVtbltdPihbXSk7XHJcbiAgcmVhZG9ubHkgZGF0YUNvbHVtbnMgPSB0aGlzLl9kYXRhQ29sdW1ucy5hc1JlYWRvbmx5KCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NsYXNzID0gc2lnbmFsPHN0cmluZz4oJycpO1xyXG4gIHJlYWRvbmx5IGNsYXNzID0gdGhpcy5fY2xhc3MuYXNSZWFkb25seSgpO1xyXG5cclxuICByZWFkb25seSBkaXNhYmxlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgYm9sZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgc2VsZWN0ZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5IGhpZ2hsaWdodGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBpdGVtRGF0YTogYW55LFxyXG4gICAgaW5kZXg6IG51bWJlcixcclxuICAgIGRhdGE6IGFueVtdLFxyXG4gICAgZGF0YUNvbHVtbnM6IFRhYmxlRGF0YUNvbHVtbltdLFxyXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW4sXHJcbiAgICBib2xkOiBib29sZWFuLFxyXG4gICAgaXNFbXB0eSA9IGZhbHNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9pdGVtRGF0YS5zZXQoaXRlbURhdGEpO1xyXG4gICAgdGhpcy5faW5kZXguc2V0KGluZGV4KTtcclxuICAgIHRoaXMuX2RhdGEuc2V0KGRhdGEpO1xyXG4gICAgdGhpcy5fZGF0YUNvbHVtbnMuc2V0KGRhdGFDb2x1bW5zKTtcclxuICAgIHRoaXMuZGlzYWJsZWQuc2V0KGRpc2FibGVkKTtcclxuICAgIHRoaXMuYm9sZC5zZXQoYm9sZCk7XHJcbiAgICB0aGlzLl9pc0VtcHR5LnNldChpc0VtcHR5KTtcclxuICB9XHJcbiAgc3RhdGljIG5ld0VtcHR5Q2VsbChpbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gbmV3IEFyZFRhYmxlUm93KG51bGwsIGluZGV4LCBbXSwgW10sIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVJdGVtU3RvcmFnZUhvc3REZWZhdWx0cyB7XHJcbiAgcmVhZG9ubHkgcm93RGlzYWJsZWRGcm9tOiBzdHJpbmc7XHJcbiAgcmVhZG9ubHkgcm93Qm9sZEZyb206IHN0cmluZztcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlSXRlbVN0b3JhZ2VIb3N0IHtcclxuICByZWFkb25seSByb3dEaXNhYmxlZEZyb206IFNpZ25hbDxOdWxsYWJsZTxzdHJpbmc+PjtcclxuICByZWFkb25seSByb3dCb2xkRnJvbTogU2lnbmFsPE51bGxhYmxlPHN0cmluZz4+O1xyXG4gIHJlYWRvbmx5IGludmVydFJvd0Rpc2FibGVkOiBTaWduYWw8TnVsbGFibGU8Ym9vbGVhbj4+O1xyXG4gIHJlYWRvbmx5IGludmVydFJvd0JvbGQ6IFNpZ25hbDxOdWxsYWJsZTxib29sZWFuPj47XHJcbiAgcmVhZG9ubHkgZGF0YTogU2lnbmFsPE51bGxhYmxlPGFueT4+W107XHJcbiAgcmVhZG9ubHkgREVGQVVMVFM6IFRhYmxlSXRlbVN0b3JhZ2VIb3N0RGVmYXVsdHM7XHJcbiAgcmVhZG9ubHkgbWF4U2VsZWN0ZWRJdGVtczogU2lnbmFsPE51bGxhYmxlPG51bWJlcj4+O1xyXG4gIHJlYWRvbmx5IHRyZWF0RGF0YVNvdXJjZUFzU3RyaW5nOiBTaWduYWw8TnVsbGFibGU8Ym9vbGVhbj4+O1xyXG5cclxuICByZWFkb25seSBwYWdpbmF0ZWQ6IFNpZ25hbDxib29sZWFuPjtcclxuICByZWFkb25seSBwYWdpbmF0aW9uU3RyYXRlZ3k6IFNpZ25hbDxUYWJsZVBhZ2luYXRpb25TdHJhdGVneT47XHJcbiAgcmVhZG9ubHkgaXRlbXNQZXJQYWdlOiBTaWduYWw8bnVtYmVyPjtcclxuICByZWFkb25seSBwYWdlOiBTaWduYWw8bnVtYmVyPjtcclxufVxyXG5leHBvcnQgY2xhc3MgSGVhZGVyQ2VsbCB7XHJcbiAgcmVhZG9ubHkgY2VsbCA9IHNpZ25hbDxUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcj4odW5kZWZpbmVkIGFzIGFueSk7XHJcbiAgcmVhZG9ubHkgY29sc3BhbiA9IHNpZ25hbDxudW1iZXI+KDEpO1xyXG4gIHJlYWRvbmx5IHJvd3NwYW4gPSBzaWduYWw8bnVtYmVyPigxKTtcclxuXHJcbiAgY29uc3RydWN0b3IoY2VsbDogVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIsIGNvbHNwYW4gPSAxLCByb3dzcGFuID0gMSkge1xyXG4gICAgdGhpcy5jZWxsLnNldChjZWxsKTtcclxuICAgIHRoaXMuY29sc3Bhbi5zZXQoY29sc3Bhbik7XHJcbiAgICB0aGlzLnJvd3NwYW4uc2V0KHJvd3NwYW4pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdpZHRoKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgY29uc3QgY2VsbCA9IHRoaXMuY2VsbCgpO1xyXG4gICAgaWYgKGlzVGFibGVTdWJoZWFkZXIoY2VsbCkpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldFdpZHRoKGNlbGwud2lkdGgpO1xyXG4gIH1cclxuICBnZXQgbWluV2lkdGgoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBjb25zdCBjZWxsID0gdGhpcy5jZWxsKCk7XHJcbiAgICBpZiAoaXNUYWJsZVN1YmhlYWRlcihjZWxsKSkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5fZ2V0V2lkdGgoY2VsbC5taW5XaWR0aCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRocmFuc2Zvcm1zIGEgbnVtZXJpYyB3aWR0aCBpbnRvIGEgQ1NTIHN0cmluZyBpZiBuZWVkZWQuIFB1cmUgZnVuY3Rpb24uXHJcbiAgICogQHBhcmFtIHdpZHRoIHRoZSB3aWR0aCB0byBiZSBjb252ZXJ0ZWQuXHJcbiAgICogQHJldHVybnMgVGhlIHdpZHRoIGV4cHJlc3NlZCBhcyBhIENTUy1jb21wYXRpYmxlIHN0cmluZyBvciBudWxsLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldFdpZHRoKHdpZHRoOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICghd2lkdGgpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHR5cGVvZiB3aWR0aCA9PT0gJ251bWJlcicpIHJldHVybiBgJHt3aWR0aH1weGA7XHJcbiAgICByZXR1cm4gd2lkdGg7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVGFibGVJdGVtU3RvcmFnZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfaXRlbXMgPSBzaWduYWw8QXJkVGFibGVSb3dbXT4oW10pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NvcnRlZEl0ZW1zID0gc2lnbmFsPEFyZFRhYmxlUm93W10+KFtdKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YUNvbHVtbnMgPSBzaWduYWw8VGFibGVEYXRhQ29sdW1uW10+KFtdKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9oZWFkZXJDZWxscyA9IHNpZ25hbDxIZWFkZXJDZWxsW11bXT4oW10pO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9hcmRQYXJlbnRDb21wOiBUYWJsZUl0ZW1TdG9yYWdlSG9zdCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbGwgaXRlbXMuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaXRlbXMgPSB0aGlzLl9pdGVtcy5hc1JlYWRvbmx5KCk7XHJcbiAgcmVhZG9ubHkgc29ydGVkSXRlbXMgPSB0aGlzLl9zb3J0ZWRJdGVtcy5hc1JlYWRvbmx5KCk7XHJcbiAgLyoqXHJcbiAgICogR2V0cyBpdGVtcyBiYXNlZCBvbiB0aGUgY3VycmVudCBwYWdpbmF0aW9uIHN0YXRlLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHBhZ2luYXRlZEl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKCF0aGlzLl9hcmRQYXJlbnRDb21wLnBhZ2luYXRlZCgpIHx8IHRoaXMuX2FyZFBhcmVudENvbXAucGFnaW5hdGlvblN0cmF0ZWd5KCkgPT09IFRhYmxlUGFnaW5hdGlvblN0cmF0ZWd5Lk5vb3ApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc29ydGVkSXRlbXMoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLl9hcmRQYXJlbnRDb21wLnBhZ2UoKTtcclxuICAgIGNvbnN0IElQUCA9IHRoaXMuX2FyZFBhcmVudENvbXAuaXRlbXNQZXJQYWdlKCk7XHJcbiAgICBjb25zdCBpdGVtc1N0YXJ0ID0gKHBhZ2UgLSAxKSAqIElQUDtcclxuICAgIGNvbnN0IGl0ZW1zRW5kID0gcGFnZSAqIElQUDtcclxuICAgIHJldHVybiB0aGlzLnNvcnRlZEl0ZW1zKCkuc2xpY2UoaXRlbXNTdGFydCwgaXRlbXNFbmQpO1xyXG4gIH0pO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgYWxsIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcy5cclxuICAgKi9cclxuICByZWFkb25seSBzZWxlY3RlZEl0ZW1zID0gY29tcHV0ZWQ8QXJkVGFibGVSb3dbXT4oKCkgPT4gdGhpcy5pdGVtcygpLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VsZWN0ZWQoKSkpO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgYWxsIGN1cnJlbnRseSBoaWdobGlnaHRlZCBpdGVtcy5cclxuICAgKi9cclxuICByZWFkb25seSBoaWdobGlnaHRlZEl0ZW1zID0gY29tcHV0ZWQ8QXJkVGFibGVSb3dbXT4oKCkgPT4gdGhpcy5pdGVtcygpLmZpbHRlcihpdGVtID0+IGl0ZW0uaGlnaGxpZ2h0ZWQoKSkpO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgYWxsIGhpZ2hsaWdodGFibGUgaXRlbXMuIEFuIGl0ZW0gaXMgY29uc2lkZXJlZCBoaWdobGlnaHRhYmxlIGlmIGl0IGlzICoqbm90KiogZGlzYWJsZWQuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaGlnaGxpZ2h0YWJsZUl0ZW1zID0gY29tcHV0ZWQ8QXJkVGFibGVSb3dbXT4oKCkgPT4gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCgpKSk7XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdmFsdWVzIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbXMuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgdmFsdWUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9pdGVtc1RvVmFsdWUodGhpcy5zZWxlY3RlZEl0ZW1zKCkpKTtcclxuICAvKipcclxuICAgKiBNYXBzIGFuIGFycmF5IG9mIGl0ZW1zIGludG8gdGhlaXIgdmFsdWVzLlxyXG4gICAqIEBwYXJhbSBpdGVtcyBUaGUgaXRlbXMgdG8gY29udmVydCB0byB2YWx1ZS5cclxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBpdGVtIHZhbHVlcy5cclxuICAgKi9cclxuICBwcml2YXRlIF9pdGVtc1RvVmFsdWUoaXRlbXM6IEFyZFRhYmxlUm93W10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5pdGVtRGF0YSgpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgaXRlbSBpcyBoaWdobGlnaHRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGlzQW55SXRlbUhpZ2hsaWdodGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5oaWdobGlnaHRlZEl0ZW1zKCkubGVuZ3RoID4gMCk7XHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGFueSBpdGVtIGluIHRoZSB0YWJsZSBpcyBzZWxlY3RlZC5cclxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBpZiBhbnkgaXRlbSBpcyBzZWxlY3RlZC5cclxuICAgKi9cclxuICByZWFkb25seSBpc0FueUl0ZW1TZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRJdGVtcygpLmxlbmd0aCA+IDApO1xyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhbGwgaXRlbXMgaW4gdGhlIHRhYmxlIGFyZSBzZWxlY3RlZC5cclxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBpZiBhbGwgaXRlbXMgYXJlIHNlbGVjdGVkLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGFyZUFsbFNlbGVjdGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZEl0ZW1zKCkubGVuZ3RoID09PSB0aGlzLl9pdGVtcygpLmZpbHRlcihpdGVtID0+ICFpdGVtLmRpc2FibGVkKCkpLmxlbmd0aCk7XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXJlbnQgY29tcG9uZW50IGRlZmluZXMgdGhlIGxpbWl0IG9mIGNvbmN1cnJlbnRseSBzZWxlY3RhYmxlIGl0ZW1zIGFuZCB0aGUgYW1vdW50IG9mIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcyBtYXRjaGVzIHRoYXQgbGltaXQuIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxyXG4gICAqXHJcbiAgICogKipUTERSKio6IHRydWUgaWYgYG1heFNlbGVjdGVkSXRlbXNgIGlzIGRlZmluZWQgYW5kIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbXMgbWF0Y2hlcyB0aGF0IHZhbHVlLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGlzSXRlbUxpbWl0UmVhY2hlZCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IG1heCA9IHRoaXMuX2FyZFBhcmVudENvbXAubWF4U2VsZWN0ZWRJdGVtcygpO1xyXG4gICAgaWYgKCFpc0RlZmluZWQobWF4KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWF4IDw9IHRoaXMuc2VsZWN0ZWRJdGVtcygpLmxlbmd0aDtcclxuICB9KTtcclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgaGVhZGVyIGNlbGxzIG9mIHRoZSB0YWJsZS5cclxuICAgKiBAcmV0dXJucyBhIDJEIGFycmF5IG9mIGhlYWRlciBjZWxscy5cclxuICAgKi9cclxuICByZWFkb25seSBoZWFkZXJDZWxscyA9IHRoaXMuX2hlYWRlckNlbGxzLmFzUmVhZG9ubHkoKTtcclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgdGhlIHRhYmxlIGhhcyBkZWZpbmVkIGNvbHVtbnMuXHJcbiAgICogQHJldHVybnMgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHRhYmxlIGhhcyBkZWZpbmVkIGNvbHVtbnMuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaGFzRGVmaW5lZENvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9kYXRhQ29sdW1ucygpLmxlbmd0aCA+IDApO1xyXG5cclxuICAvLyEgc2V0dGluZyBjb2x1bW5zXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgY29sdW1ucyBvZiB0aGUgdGFibGUuXHJcbiAgICogQHBhcmFtIGNvbHMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zIG9yIHRhYmxlIHN1YmhlYWRlcnMuXHJcbiAgICovXHJcbiAgc2V0Q29sdW1ucyhjb2xzOiAoVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIpW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IG1heE5lc3RpbmdMZXZlbCA9IHRoaXMuX2dldEhlYWRlck1heE5lc3RpbmcoY29scyk7XHJcbiAgICBjb25zdCBoZWFkZXJDZWxscyA9IHRoaXMuX21hcENvbHVtbnNUb0FycmF5KGNvbHMsIG1heE5lc3RpbmdMZXZlbCwgMCk7XHJcbiAgICB0aGlzLl9oZWFkZXJDZWxscy5zZXQodGhpcy5fZmlsdGVySGVhZGVyQ2VsbHMoaGVhZGVyQ2VsbHMpKTtcclxuICAgIHRoaXMuX2RhdGFDb2x1bW5zLnNldCh0aGlzLl9leHRyYWN0RGF0YVNvdXJjZXMoY29scykpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBGaWx0ZXJzIG91dCBudWxsIHZhbHVlcyBmcm9tIHRoZSBoZWFkZXIgY2VsbHMgYXJyYXkuIFB1cmUgZnVuY3Rpb24uXHJcbiAgICogQHBhcmFtIGNlbGxzIGEgMkQgYXJyYXkgb2YgaGVhZGVyIGNlbGxzIG9yIG51bGwgdmFsdWVzLlxyXG4gICAqIEByZXR1cm5zIGEgMkQgYXJyYXkgb2YgaGVhZGVyIGNlbGxzIHdpdGhvdXQgbnVsbCB2YWx1ZXMgYW5kIGVtcHR5IGFycmF5cy5cclxuICAgKi9cclxuICBwcml2YXRlIF9maWx0ZXJIZWFkZXJDZWxscyhjZWxsczogKEhlYWRlckNlbGwgfCBudWxsKVtdW10pOiBIZWFkZXJDZWxsW11bXSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNlbGxzW2ldID0gY2VsbHNbaV0uZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2VsbHMuZmlsdGVyKHJvdyA9PiByb3cubGVuZ3RoKSBhcyBIZWFkZXJDZWxsW11bXTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdHMgdGhlIGRhdGEgc291cmNlcyBmcm9tIHRoZSBjb2x1bW5zIGFycmF5LiBQdXJlIGZ1bmN0aW9uLlxyXG4gICAqIEBwYXJhbSBjb2xzIGFuIGFycmF5IG9mIHRhYmxlIGRhdGEgY29sdW1ucyBvciB0YWJsZSBzdWJoZWFkZXJzLlxyXG4gICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIHRhYmxlIGRhdGEgY29sdW1ucy5cclxuICAgKi9cclxuICBwcml2YXRlIF9leHRyYWN0RGF0YVNvdXJjZXMoY29sczogKFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyKVtdKTogVGFibGVEYXRhQ29sdW1uW10ge1xyXG4gICAgY29uc3QgZGF0YUNvbHVtbnM6IFRhYmxlRGF0YUNvbHVtbltdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29scykge1xyXG4gICAgICBpZiAoIWlzVGFibGVTdWJoZWFkZXIoY29sKSkge1xyXG4gICAgICAgIGRhdGFDb2x1bW5zLnB1c2goY29sKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBkYXRhQ29sdW1ucy5wdXNoKC4uLnRoaXMuX2V4dHJhY3REYXRhU291cmNlcyhjb2wuY2hpbGRyZW4pKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0YUNvbHVtbnM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIG1heGltdW0gbmVzdGluZyBsZXZlbCBvZiB0aGUgY29sdW1ucyBhcnJheS4gUHVyZSBmdW5jdGlvbi5cclxuICAgKiBAcGFyYW0gY29scyBhbiBhcnJheSBvZiB0YWJsZSBkYXRhIGNvbHVtbnMgb3IgdGFibGUgc3ViaGVhZGVycy5cclxuICAgKiBAcmV0dXJucyB0aGUgbWF4aW11bSBuZXN0aW5nIGxldmVsIGFzIGEgbnVtYmVyLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldEhlYWRlck1heE5lc3RpbmcoY29sczogKFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyKVtdKTogbnVtYmVyIHtcclxuICAgIGlmIChhcmVBbGxEYXRhQ29sdW1ucyhjb2xzKSkgcmV0dXJuIDE7XHJcbiAgICBsZXQgbWF4ID0gMTtcclxuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMuZmlsdGVyKHYgPT4gaXNUYWJsZVN1YmhlYWRlcih2KSkgYXMgVGFibGVTdWJoZWFkZXJbXSkge1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSAxICsgdGhpcy5fZ2V0SGVhZGVyTWF4TmVzdGluZyhjb2wuY2hpbGRyZW4pO1xyXG4gICAgICBpZiAoaGVpZ2h0ID4gbWF4KSBtYXggPSBoZWlnaHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWF4O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBNYXBzIHRoZSBjb2x1bW5zIHRyZWUgdG8gYSAyRCBhcnJheSBvZiBoZWFkZXIgY2VsbHMgb3IgbnVsbCB2YWx1ZXMuIFB1cmUgZnVuY3Rpb24uXHJcbiAgICogQHBhcmFtIGNvbHMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zIG9yIHRhYmxlIHN1YmhlYWRlcnMuXHJcbiAgICogQHBhcmFtIG1heE5lc3RpbmcgdGhlIG1heGltdW0gbmVzdGluZyBsZXZlbCBvZiB0aGUgY29sdW1ucyBhcnJheS5cclxuICAgKiBAcGFyYW0gY3VycmVudE5lc3RpbmcgdGhlIGN1cnJlbnQgbmVzdGluZyBsZXZlbCBvZiB0aGUgY29sdW1ucyBhcnJheS5cclxuICAgKiBAcmV0dXJucyBhIDJEIGFycmF5IG9mIGhlYWRlciBjZWxscyBvciBudWxsIHZhbHVlcy5cclxuICAgKi9cclxuICBwcml2YXRlIF9tYXBDb2x1bW5zVG9BcnJheShcclxuICAgIGNvbHM6IChUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcilbXSxcclxuICAgIG1heE5lc3Rpbmc6IG51bWJlcixcclxuICAgIGN1cnJlbnROZXN0aW5nOiBudW1iZXJcclxuICApOiAoSGVhZGVyQ2VsbCB8IG51bGwpW11bXSB7XHJcbiAgICBpZiAoYXJlQWxsRGF0YUNvbHVtbnMoY29scykpIHtcclxuICAgICAgcmV0dXJuIFtjb2xzLm1hcChjb2wgPT4gbmV3IEhlYWRlckNlbGwoY29sLCAxLCBtYXhOZXN0aW5nIC0gY3VycmVudE5lc3RpbmcpKV07XHJcbiAgICB9XHJcbiAgICBjb25zdCBoZWFkZXJDZWxsczogKEhlYWRlckNlbGwgfCBudWxsKVtdW10gPSBbW11dO1xyXG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29scykge1xyXG4gICAgICBpZiAoIWlzVGFibGVTdWJoZWFkZXIoY29sKSkge1xyXG4gICAgICAgIGhlYWRlckNlbGxzWzBdLnB1c2gobmV3IEhlYWRlckNlbGwoY29sLCAxLCBtYXhOZXN0aW5nIC0gY3VycmVudE5lc3RpbmcpKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjaGlsZENlbGxzOiAoSGVhZGVyQ2VsbCB8IG51bGwpW11bXSA9IFtbXSwgLi4udGhpcy5fbWFwQ29sdW1uc1RvQXJyYXkoY29sLmNoaWxkcmVuLCBtYXhOZXN0aW5nLCBjdXJyZW50TmVzdGluZyArIDEpXTtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gY2hpbGRDZWxscy5sZW5ndGggLSAxO1xyXG4gICAgICBjb25zdCB3aWR0aCA9IGNoaWxkQ2VsbHNbMV0ubGVuZ3RoO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XHJcbiAgICAgICAgaGVhZGVyQ2VsbHMucHVzaChbbnVsbF0pO1xyXG4gICAgICB9XHJcbiAgICAgIGhlYWRlckNlbGxzWzBdLnB1c2gobmV3IEhlYWRlckNlbGwoY29sLCB3aWR0aCwgMSkpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdpZHRoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgaGVhZGVyQ2VsbHNbMF0ucHVzaChudWxsKTtcclxuICAgICAgfVxyXG4gICAgICBtZXJnZTJkQXJyYXlzKGhlYWRlckNlbGxzLCBjaGlsZENlbGxzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBoZWFkZXJDZWxscztcclxuICB9XHJcblxyXG4gIC8vISBzZXR0aW5nIGl0ZW1zXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgY29tcG9uZW50J3MgaXRlbXMuIFRha2VzIGludG8gYWNjb3VudCB0aGUgdmFsdWVzIGRlZmluZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQgZm9yIGByb3dEaXNhYmxlZEZyb21gLCBgcm93Qm9sZEZyb21gLCBhbmQgYHJvd0hpZ2hsaWdodGVkRnJvbWAuXHJcbiAgICogQHBhcmFtIGl0ZW1zIEFuIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHNldCBhcyB0aGUgY29tcG9uZW50J3MgaXRlbXMuXHJcbiAgICovXHJcbiAgc2V0SXRlbXMoaXRlbXM6IGFueVtdKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaGFzRGVmaW5lZENvbHVtbnMoKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG1hcHBlZEl0ZW1zID0gaXRlbXMubWFwKChpdGVtLCBpKSA9PiB0aGlzLl9zZXRJdGVtc01hcEZuKGl0ZW0sIGkpKTtcclxuICAgIHRoaXMuX2l0ZW1zLnNldChtYXBwZWRJdGVtcyk7XHJcbiAgICB0aGlzLl9zb3J0ZWRJdGVtcy5zZXQobWFwcGVkSXRlbXMpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBNYXBzIHJhdyBpdGVtIGRhdGEgdG8gYW4ge0BsaW5rIEFyZFRhYmxlUm93fSBvYmplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueX0gcmF3SXRlbURhdGEgLSBUaGUgcmF3IGRhdGEgb2YgdGhlIGl0ZW0uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBpdGVtLlxyXG4gICAqIEByZXR1cm5zIHtBcmRUYWJsZVJvd30gUmV0dXJucyBhbiBBcmRUYWJsZVJvdyBvYmplY3Qgd2l0aCBtYXBwZWQgcHJvcGVydGllcy5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3NldEl0ZW1zTWFwRm4ocmF3SXRlbURhdGE6IGFueSwgaW5kZXg6IG51bWJlcik6IEFyZFRhYmxlUm93IHtcclxuICAgIC8vZ2V0IGRhdGFcclxuICAgIGNvbnN0IFtkYXRhLCBkYXRhQ29sdW1uc10gPSB0aGlzLl9nZXRSb3dEYXRhKHJhd0l0ZW1EYXRhLCBpbmRleCk7XHJcblxyXG4gICAgLy9nZXQgYm9sZFxyXG4gICAgY29uc3Qgcm93Qm9sZEZyb21QYXRoID0gdGhpcy5fYXJkUGFyZW50Q29tcC5yb3dCb2xkRnJvbSgpID8/IHRoaXMuX2FyZFBhcmVudENvbXAuREVGQVVMVFMucm93Qm9sZEZyb207XHJcbiAgICBsZXQgYm9sZCA9IHJlc29sdmVQYXRoKHJhd0l0ZW1EYXRhLCByb3dCb2xkRnJvbVBhdGgpO1xyXG4gICAgaWYgKHRoaXMuX2FyZFBhcmVudENvbXAuaW52ZXJ0Um93Qm9sZCgpKSB7XHJcbiAgICAgIGJvbGQgPSAhYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICAvL2dldCBkaXNhYmxlZFxyXG4gICAgY29uc3QgZGlzYWJsZWRQYXRoID0gdGhpcy5fYXJkUGFyZW50Q29tcC5yb3dEaXNhYmxlZEZyb20oKSA/PyB0aGlzLl9hcmRQYXJlbnRDb21wLkRFRkFVTFRTLnJvd0Rpc2FibGVkRnJvbTtcclxuICAgIGxldCBkaXNhYmxlZCA9IGV2YWx1YXRlKHJlc29sdmVQYXRoKHJhd0l0ZW1EYXRhLCBkaXNhYmxlZFBhdGgpKTtcclxuICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLmludmVydFJvd0Rpc2FibGVkKCkpIHtcclxuICAgICAgZGlzYWJsZWQgPSAhZGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBBcmRUYWJsZVJvdyhyYXdJdGVtRGF0YSwgaW5kZXgsIGRhdGEsIGRhdGFDb2x1bW5zLCBkaXNhYmxlZCwgYm9sZCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBkYXRhIGZvciBhIHJvdyBiYXNlZCBvbiBkYXRhIGNvbHVtbnMgY29uZmlndXJhdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSByYXdJdGVtRGF0YSAtIFRoZSByYXcgZGF0YSBvZiB0aGUgaXRlbS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGl0ZW0uXHJcbiAgICogQHJldHVybnMge2FueVtdfSBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHJvdyBkYXRhLlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZ2V0Um93RGF0YShyYXdJdGVtRGF0YTogYW55LCBpbmRleDogbnVtYmVyKTogW2FueVtdLCBUYWJsZURhdGFDb2x1bW5bXV0ge1xyXG4gICAgY29uc3QgZGF0YTogYW55W10gPSBbXTtcclxuICAgIGNvbnN0IF9jb2xzID0gdGhpcy5fZGF0YUNvbHVtbnMoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgX2NvbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZGF0YUNvbHVtbiA9IF9jb2xzW2ldO1xyXG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gZGF0YUNvbHVtbi5kYXRhU291cmNlO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQYXRoID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLnRyZWF0RGF0YVNvdXJjZUFzU3RyaW5nKCkpIHtcclxuICAgICAgICAgIGRhdGEucHVzaChyYXdJdGVtRGF0YVtzb3VyY2VQYXRoXSk7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0YS5wdXNoKHJlc29sdmVQYXRoKHJhd0l0ZW1EYXRhLCBzb3VyY2VQYXRoKSk7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNvdXJjZVBhdGgudHlwZSA9PT0gJ2F1dG9jb3VudCcpIHtcclxuICAgICAgICBkYXRhLnB1c2goaW5kZXggKyAxKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc291cmNlUGF0aC50eXBlID09PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgZGF0YS5wdXNoKHsgX2FyZENoZWNrYm94OiB0cnVlLCBpbmRleCB9KTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzb3VyY2VTdHJpbmcgPSB0eXBlb2Ygc291cmNlUGF0aCA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShzb3VyY2VQYXRoKSA6IHNvdXJjZVBhdGg7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQVJELUZUNTA1MjogVW5leHBlY3RlZCBkYXRhIHNvdXJjZSBcIiR7c291cmNlU3RyaW5nfVwiIGF0IGluZGV4ICR7aX0uYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW2RhdGEsIHRoaXMuX2RhdGFDb2x1bW5zKCldO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBXcml0ZXMgYSBuZXcgdmFsdWUgdG8gdGhlIGl0ZW0gc3RvcmFnZS4gU2VsZWN0cyB0aGUgY29ycmVjdCBpdGVtcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdmFsdWVzLCB3YXJuaW5nIHRoZSB1c2VyIGlmIHRoZSB2YWx1ZSBpcyBub3QgZm91bmQuXHJcbiAgICogQHBhcmFtIGluZGV4ZXMgVGhlIHZhbHVlIG9mIHRoZSBuZ01vZGVsIHRvIHNldC5cclxuICAgKi9cclxuICB3cml0ZVZhbHVlKGluZGV4ZXM6IG51bWJlcltdKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mb3JjZVVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLnNlbGVjdEl0ZW0oLi4uaW5kZXhlcyk7XHJcbiAgfVxyXG5cclxuICAvLyEgc2VsZWN0aW5nIGl0ZW1zXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGFuIGl0ZW0gd2l0aCB0aGUgZ2l2ZW4gaW5kZXggaXMgc2VsZWN0ZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIGNoZWNrLlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBfdHJ1ZV8gaWYgdGhlIGl0ZW0gaXMgc2VsZWN0ZWQsIG90aGVyd2lzZSBfZmFsc2VfLlxyXG4gICAqL1xyXG4gIGlzSXRlbVNlbGVjdGVkKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMoKS5zb21lKGl0ZW0gPT4gaXRlbS5pbmRleCgpID09PSBpbmRleCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdHMgYWxsIGl0ZW1zLlxyXG4gICAqXHJcbiAgICogQWNjb3VudHMgZm9yIHRoZSBsaW1pdCBvZiBjb25jdXJyZW50bHkgc2VsZWN0ZWQgaXRlbXMgZGVmaW5lZCBieSB0aGUgcGFyZW50IGNvbXBvbmVudC5cclxuICAgKiBAcmV0dXJucyBhIHR1cGxlIGNvbnRhaW5pbmcgdHdvIGFycmF5czpcclxuICAgKiAqIEFuIGFycmF5IG9mIGl0ZW1zIHNlbGVjdGVkLlxyXG4gICAqICogQW4gYXJyYXkgb2YgaXRlbXMgZmFpbGVkIHRvIHNlbGVjdC5cclxuICAgKi9cclxuICBzZWxlY3RBbGwoKTogW2FueVtdLCBhbnlbXV0ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0SXRlbSguLi50aGlzLl9pdGVtcygpLm1hcCh2ID0+IHYuaW5kZXgoKSkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBVbnNlbGVjdHMgYWxsIHNlbGVjdGVkIGl0ZW1zLlxyXG4gICAqXHJcbiAgICogSWYgdGhlIHBhcmVudCBjb21wb25lbnQgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHZhbHVlIHRvIGJlIHNlbGVjdGVkIGF0IGFsbCB0aW1lcywgdGhlIGZpcnN0IHNlbGVjdGVkIGl0ZW1zIGlzIGxlZnQgc2VsZWN0ZWQuXHJcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgaXRlbXMgY2xlYXJlZCwgbWFwcGVkIHRvIG9ubHkgdGhlaXIgdmFsdWVzLlxyXG4gICAqL1xyXG4gIHVuc2VsZWN0QWxsKCk6IGFueVtdIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEl0ZW1zKCk7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc2VsZWN0ZWQpIHtcclxuICAgICAgaXRlbS5zZWxlY3RlZC5zZXQoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9pdGVtc1RvVmFsdWUoc2VsZWN0ZWQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBVbnNlbGVjdHMgYWxsIHNlbGVjdGVkIGl0ZW1zLCBubyBtYXR0ZXIgd2hhdCB0aGUgY29tcG9uZW50IHNldHRpbmdzIGFyZS5cclxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBpdGVtcyBjbGVhcmVkLCBtYXBwZWQgdG8gb25seSB0aGVpciB2YWx1ZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZm9yY2VVbnNlbGVjdEFsbCgpOiBhbnlbXSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtcygpO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHNlbGVjdGVkKSB7XHJcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5faXRlbXNUb1ZhbHVlKHNlbGVjdGVkKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2VsZWN0cyBvbmUgb3IgbXVsdGlwbGUgaXRlbXMuXHJcbiAgICpcclxuICAgKiBBY2NvdW50cyBmb3IgdGhlIGxpbWl0IG9mIGNvbmN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcyBkZWZpbmVkIGJ5IHRoZSBwYXJlbnQgY29tcG9uZW50LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGluZGV4ZXMgQSByZXN0IG9wZXJhdG9yIGFycmF5IG9mIGl0ZW0gaW5kZXhlcyB0byBiZSBzZWxlY3RlZC5cclxuICAgKiBAcmV0dXJucyBhIHR1cGxlIGNvbnRhaW5pbmcgdHdvIGFycmF5czpcclxuICAgKiAtIEFuIGFycmF5IG9mIGl0ZW1zIHNlbGVjdGVkLlxyXG4gICAqIC0gQW4gYXJyYXkgb2YgaXRlbXMgZmFpbGVkIHRvIHNlbGVjdC5cclxuICAgKi9cclxuICBzZWxlY3RJdGVtKC4uLmluZGV4ZXM6IG51bWJlcltdKTogW2FueVtdLCBhbnlbXV0ge1xyXG4gICAgY29uc3QgaXRlbXNUb0JlU2VsZWN0ZWQgPSB0aGlzLl9pdGVtcygpLmZpbHRlcihpdGVtID0+ICFpdGVtLmRpc2FibGVkKCkgJiYgaW5kZXhlcy5pbmNsdWRlcyhpdGVtLmluZGV4KCkpKTtcclxuICAgIGlmICh0aGlzLmlzSXRlbUxpbWl0UmVhY2hlZCgpKSB7XHJcbiAgICAgIHJldHVybiBbW10sIHRoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtc1RvQmVTZWxlY3RlZCldO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpdGVtc1NlbGVjdGVkQ291bnQgPSAwO1xyXG4gICAgY29uc3QgaXRlbXNTZWxlY3RlZCA9IFtdO1xyXG4gICAgbGV0IGl0ZW1zTGVmdFVudGlsTGltaXQgPSAodGhpcy5fYXJkUGFyZW50Q29tcC5tYXhTZWxlY3RlZEl0ZW1zKCkgPz8gSW5maW5pdHkpIC0gdGhpcy5zZWxlY3RlZEl0ZW1zKCkubGVuZ3RoO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zVG9CZVNlbGVjdGVkKSB7XHJcbiAgICAgIGl0ZW1zU2VsZWN0ZWRDb3VudCsrO1xyXG4gICAgICBpZiAoaXRlbS5zZWxlY3RlZCgpKSBjb250aW51ZTtcclxuICAgICAgaWYgKGl0ZW1zTGVmdFVudGlsTGltaXQgPD0gMCkge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGl0ZW1zTGVmdFVudGlsTGltaXQtLTtcclxuICAgICAgaXRlbS5zZWxlY3RlZC5zZXQodHJ1ZSk7XHJcbiAgICAgIGl0ZW1zU2VsZWN0ZWQucHVzaChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpdGVtc0ZhaWxlZFRvU2VsZWN0ID0gaXRlbXNUb0JlU2VsZWN0ZWQuc2xpY2UoaXRlbXNTZWxlY3RlZENvdW50IC0gMSk7XHJcbiAgICByZXR1cm4gW3RoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtc1NlbGVjdGVkKSwgdGhpcy5faXRlbXNUb1ZhbHVlKGl0ZW1zRmFpbGVkVG9TZWxlY3QpXTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVW5zZWxlY3RzIG9uZSBvciBtdWx0aXBsZSBpdGVtcy5cclxuICAgKiBAcGFyYW0gaXRlbXMgQSByZXN0IG9wZXJhdG9yIGFycmF5IG9mIGl0ZW0gaW5kZXhlcyB0byBiZSB1bnNlbGVjdGVkLlxyXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGl0ZW1zIHVuc2VsZWN0ZWQsIG1hcHBlZCB0byBvbmx5IHRoZWlyIHZhbHVlcy5cclxuICAgKi9cclxuICB1bnNlbGVjdEl0ZW0oLi4uaW5kZXhlczogbnVtYmVyW10pOiBhbnlbXSB7XHJcbiAgICBjb25zdCBpdGVtc1RvQmVVbnNlbGVjdGVkID0gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpbmRleGVzLmluY2x1ZGVzKGl0ZW0uaW5kZXgoKSkpO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zVG9CZVVuc2VsZWN0ZWQpIHtcclxuICAgICAgaXRlbS5zZWxlY3RlZC5zZXQoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9pdGVtc1RvVmFsdWUoaXRlbXNUb0JlVW5zZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICAvLyEgaGlnaGxpZ2h0aW5nIGl0ZW1zXHJcbiAgLyoqXHJcbiAgICogVW5oaWdobGlnaHRzIGFsbCBjdXJyZW50bHkgaGlnaGxpZ2h0ZWQgaXRlbXMuXHJcbiAgICovXHJcbiAgdW5oaWdobGlnaHRBbGwoKTogdm9pZCB7XHJcbiAgICBjb25zdCBoaWdobGlnaHRlZCA9IHRoaXMuaGlnaGxpZ2h0ZWRJdGVtcygpO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGhpZ2hsaWdodGVkKSB7XHJcbiAgICAgIGl0ZW0uaGlnaGxpZ2h0ZWQuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGlnaGxpZ2h0cyB0aGUgZ2l2ZW4gaXRlbSwgd2hpbGUgdW5oaWdobGlnaHRpbmcgYWxsIG90aGVyIGl0ZW1zLiBEb2VzIG5vdGhpbmcgd2hlbiB0aGUgaXRlbSBpcyBkaXNhYmxlZC5cclxuICAgKiBAcGFyYW0gaXRlbSBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gdG8gYmUgaGlnaGxpZ2h0ZWQuXHJcbiAgICogQHJldHVybnMgVGhlIGhpZ2hsaWdodGVkIGl0ZW0uXHJcbiAgICovXHJcbiAgaGlnaGxpZ2h0U2luZ2xlSXRlbShpbmRleDogbnVtYmVyKTogQXJkVGFibGVSb3cgfCBudWxsIHtcclxuICAgIHRoaXMudW5oaWdobGlnaHRBbGwoKTtcclxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0oaW5kZXgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBIaWdobGlnaHRzIGFsbCBnaXZlbiBpdGVtcy5cclxuICAgKiBAcGFyYW0gaXRlbXMgQSByZXN0IG9wZXJhdG9yIGFycmF5IG9mIGl0ZW0gaW5kZXhlcyB0byBiZSBoaWdobGlnaHRlZC5cclxuICAgKiBAcmV0dXJucyBUaGUgbGFzdCBoaWdobGlnaHRlZCBpdGVtLlxyXG4gICAqL1xyXG4gIGhpZ2hsaWdodEl0ZW0oLi4uaW5kZXhlczogbnVtYmVyW10pOiBBcmRUYWJsZVJvdyB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2l0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gaW5kZXhlcy5pbmNsdWRlcyhpdGVtLmluZGV4KCkpKTtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xyXG4gICAgICBpdGVtLmhpZ2hsaWdodGVkLnNldCh0cnVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpdGVtcy5sYXN0KCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFVuaGlnaGxpZ2h0cyBhbGwgZ2l2ZW4gaXRlbXMuXHJcbiAgICogQHBhcmFtIGl0ZW1zIEEgcmVzdCBvcGVyYXRvciBhcnJheSBvZiBpdGVtIGluZGV4ZXMgdG8gYmUgdW5oaWdobGlnaHRlZC5cclxuICAgKi9cclxuICB1bmhpZ2hsaWdodEl0ZW0oLi4uaW5kZXhlczogbnVtYmVyW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpbmRleGVzLmluY2x1ZGVzKGl0ZW0uaW5kZXgoKSkpO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgIGlmICghaXRlbSB8fCAhaXRlbS5oaWdobGlnaHRlZCgpKSByZXR1cm47XHJcblxyXG4gICAgICBpdGVtLmhpZ2hsaWdodGVkLnNldChmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhpZ2hsaWdodHMgdGhlIGZpcnN0IGl0ZW0gb3V0IG9mIGFsbCBpdGVtcy5cclxuICAgKiBAcmV0dXJucyBUaGUgaGlnaGxpZ2h0ZWQgaXRlbS5cclxuICAgKi9cclxuICBoaWdobGlnaHRGaXJzdEl0ZW0oKTogQXJkVGFibGVSb3cgfCBudWxsIHtcclxuICAgIHRoaXMudW5oaWdobGlnaHRBbGwoKTtcclxuXHJcbiAgICBjb25zdCBpdGVtVG9IaWdobGlnaHQgPSB0aGlzLmhpZ2hsaWdodGFibGVJdGVtcygpLmZpcnN0KCkuaW5kZXgoKTtcclxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0oaXRlbVRvSGlnaGxpZ2h0KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGlnaGxpZ2h0cyB0aGUgbGFzdCBpdGVtIG91dCBvZiBhbGwgaXRlbXMuXHJcbiAgICogQHJldHVybnMgVGhlIGhpZ2hsaWdodGVkIGl0ZW0uXHJcbiAgICovXHJcbiAgaGlnaGxpZ2h0TGFzdEl0ZW0oKTogQXJkVGFibGVSb3cgfCBudWxsIHtcclxuICAgIHRoaXMudW5oaWdobGlnaHRBbGwoKTtcclxuXHJcbiAgICBjb25zdCBpdGVtVG9IaWdobGlnaHQgPSB0aGlzLmhpZ2hsaWdodGFibGVJdGVtcygpLmxhc3QoKS5pbmRleCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SXRlbShpdGVtVG9IaWdobGlnaHQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBIaWdobGlnaHRzIGFsbCBub24tZGlzYWJsZWQgaXRlbXMuXHJcbiAgICovXHJcbiAgaGlnaGxpZ2h0QWxsSXRlbXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpdGVtc1RvSGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHRhYmxlSXRlbXMoKS5tYXAodiA9PiB2LmluZGV4KCkpO1xyXG4gICAgdGhpcy5oaWdobGlnaHRJdGVtKC4uLml0ZW1zVG9IaWdobGlnaHQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBIaWdobGlnaHRzIHRoZSBuZXh0IG5vbi1kaXNhYmxlZCBpdGVtIGRlZmluZWQgYnkgdGhlIG9mZnNldCBhbW91bnQuXHJcbiAgICpcclxuICAgKiBJZiBgaGFzU2hpZnRgIGlzIHNldCB0byB0cnVlLCBhbGwgb3JpZ2luYWxseSBoaWdobGlnaHRlZCBpdGVtcyBhcmUga2VwdC4gT3RoZXJ3aXNlLCBhbGwgb3JpZ2luYWwgaXRlbXMgYXJlIHVuc2VsZWN0ZWQuXHJcbiAgICogQHBhcmFtIG9mZnNldCBUaGUgYW1vdW50IG9mIGl0ZW1zIHRvIG9mZnNldCB0aGUgaGlnaGxpZ2h0IGJ5LlxyXG4gICAqIEBwYXJhbSBoYXNTaGlmdCBXaGV0aGVyIHRoZSB1c2VyIGhhcyB0aGUgc2hpZnQga2V5IHByZXNzZWQuXHJcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gaGlnaGxpZ2h0ZWQuXHJcbiAgICovXHJcbiAgaGlnaGxpZ2h0TmV4dEl0ZW0ob2Zmc2V0OiBudW1iZXIsIGhhc1NoaWZ0PzogYm9vbGVhbik6IEFyZFRhYmxlUm93IHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMuaXNBbnlJdGVtSGlnaGxpZ2h0ZWQoKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRGaXJzdEl0ZW0oKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdGhpcy5oaWdobGlnaHRlZEl0ZW1zKCkubGFzdCgpO1xyXG4gICAgY29uc3QgaXRlbXNXaXRob3V0RGlzYWJsZWQgPSB0aGlzLl9pdGVtcygpLmZpbHRlcihcclxuICAgICAgaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCgpICYmICghdGhpcy5pc0l0ZW1MaW1pdFJlYWNoZWQoKSB8fCBpdGVtLnNlbGVjdGVkKCkpXHJcbiAgICApO1xyXG4gICAgY29uc3QgY3VycmVudEluZGV4SW5JdGVtcyA9IGl0ZW1zV2l0aG91dERpc2FibGVkLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaW5kZXgoKSA9PT0gY3VycmVudEl0ZW0uaW5kZXgoKSk7XHJcblxyXG4gICAgbGV0IG5leHRJdGVtSW5kZXggPSBjdXJyZW50SW5kZXhJbkl0ZW1zICsgb2Zmc2V0O1xyXG4gICAgaWYgKG5leHRJdGVtSW5kZXggPj0gaXRlbXNXaXRob3V0RGlzYWJsZWQubGVuZ3RoKSB7XHJcbiAgICAgIG5leHRJdGVtSW5kZXggLT0gaXRlbXNXaXRob3V0RGlzYWJsZWQubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgaWYgKG5leHRJdGVtSW5kZXggPCAwKSB7XHJcbiAgICAgIG5leHRJdGVtSW5kZXggKz0gaXRlbXNXaXRob3V0RGlzYWJsZWQubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXRlbVRvSGlnaGxpZ2h0ID0gaXRlbXNXaXRob3V0RGlzYWJsZWRbbmV4dEl0ZW1JbmRleF07XHJcblxyXG4gICAgaWYgKGhhc1NoaWZ0KSB7XHJcbiAgICAgIGlmIChpdGVtVG9IaWdobGlnaHQuaGlnaGxpZ2h0ZWQoKSkge1xyXG4gICAgICAgIHRoaXMudW5oaWdobGlnaHRJdGVtKG5leHRJdGVtSW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0obmV4dEl0ZW1JbmRleCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRTaW5nbGVJdGVtKG5leHRJdGVtSW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLy8hIHNvcnRpbmdcclxuICBwcml2YXRlIF9jdXJyZW50U29ydENvbHVtbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfY3VycmVudFNvcnRUeXBlOiBTb3J0VHlwZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICB0b2dnbGVDdXJyZW50U29ydENvbHVtbihjb2x1bW46IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTb3J0Q29sdW1uID09PSBjb2x1bW4pIHtcclxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTb3J0VHlwZSA9PT0gU29ydFR5cGUuQXNjZW5kaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fY3VycmVudFNvcnRUeXBlID0gU29ydFR5cGUuRGVzY2VuZGluZztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9jdXJyZW50U29ydFR5cGUgPSBTb3J0VHlwZS5Bc2NlbmRpbmc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fZ2VuZXJhdGVTb3J0ZWRSb3dzKHRydWUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9jdXJyZW50U29ydENvbHVtbiA9IGNvbHVtbjtcclxuICAgIHRoaXMuX2N1cnJlbnRTb3J0VHlwZSA9IFNvcnRUeXBlLkFzY2VuZGluZztcclxuICAgIHRoaXMuX2dlbmVyYXRlU29ydGVkUm93cygpO1xyXG4gIH1cclxuICByZXNldFNvcnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jdXJyZW50U29ydENvbHVtbiA9IG51bGw7XHJcbiAgICB0aGlzLl9jdXJyZW50U29ydFR5cGUgPSBudWxsO1xyXG4gICAgdGhpcy5fc29ydGVkSXRlbXMuc2V0KFsuLi50aGlzLml0ZW1zKCldKTtcclxuICB9XHJcbiAgZ2V0Q29sdW1uU29ydFR5cGUoY29sdW1uOiBudW1iZXIpOiBTb3J0VHlwZSB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTb3J0Q29sdW1uID09PSBjb2x1bW4pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTb3J0VHlwZTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICBwcml2YXRlIF9nZW5lcmF0ZVNvcnRlZFJvd3MoanVzdFJldmVyc2U/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoanVzdFJldmVyc2UpIHtcclxuICAgICAgdGhpcy5fc29ydGVkSXRlbXMoKS5yZXZlcnNlKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNvcnRDb2x1bW5JbmRleCA9IHRoaXMuX2N1cnJlbnRTb3J0Q29sdW1uO1xyXG4gICAgaWYgKGlzTnVsbChzb3J0Q29sdW1uSW5kZXgpIHx8ICF0aGlzLl9jdXJyZW50U29ydFR5cGUpIHtcclxuICAgICAgdGhpcy5fc29ydGVkSXRlbXMuc2V0KHRoaXMuaXRlbXMoKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNvcnRDb2x1bW4gPSB0aGlzLl9kYXRhQ29sdW1ucygpW3NvcnRDb2x1bW5JbmRleF07XHJcbiAgICBpZiAoIXNvcnRDb2x1bW4pIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBBUkQtSVM1MDU5OiBFbmNvdW50ZXJlZCBhbiBpc3N1ZSBpbiA8YXJkLXRhYmxlPjogY291bGQgbm90IGZpbmQgdGhlIGNvbHVtbiB3aXRoIGluZGV4ICR7c29ydENvbHVtbkluZGV4fS4gVGhpcyBpcyBtb3N0IGxpa2VseSBhbiBBcmRpdW0gVUkgYnVnLCBwbGVhc2UgcmVwb3J0IGl0IHRvIHRoZSBjcmVhdG9ycy5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5fY3VycmVudFNvcnRUeXBlID09PSBTb3J0VHlwZS5Bc2NlbmRpbmcgPyAxIDogLTE7XHJcbiAgICBjb25zdCBzb3J0Rm4gPVxyXG4gICAgICBzb3J0Q29sdW1uLnNvcnRGbiA/P1xyXG4gICAgICAoKGEsIGIpID0+IHtcclxuICAgICAgICBpZiAoYSA+IGIpIHJldHVybiBkaXJlY3Rpb247XHJcbiAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTEgKiBkaXJlY3Rpb247XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3NvcnRlZEl0ZW1zLnNldChbLi4udGhpcy5pdGVtcygpXS5zb3J0KChhLCBiKSA9PiBzb3J0Rm4oYS5kYXRhKClbc29ydENvbHVtbkluZGV4XSwgYi5kYXRhKClbc29ydENvbHVtbkluZGV4XSkpKTtcclxuICB9XHJcbn1cclxuIl19
564
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaXRlbS1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS1pdGVtLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxRCxPQUFPLEVBQUUsUUFBUSxFQUFtQix1QkFBdUIsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU3RSxNQUFNLE9BQU8sV0FBVztJQXdCdEIsWUFDRSxRQUFhLEVBQ2IsS0FBYSxFQUNiLElBQVcsRUFDWCxXQUE4QixFQUM5QixRQUFpQixFQUNqQixJQUFhLEVBQ2IsT0FBTyxHQUFHLEtBQUs7UUE5QkEsY0FBUyxHQUFHLE1BQU0sQ0FBTSxTQUFTLENBQUMsQ0FBQztRQUMzQyxhQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUvQixXQUFNLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsVUFBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFekIsYUFBUSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUMxQyxZQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUU3QixVQUFLLEdBQUcsTUFBTSxDQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLFNBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxD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QUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztnQkFDakMsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4SCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWwsIGNvbXB1dGVkLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJlc29sdmVQYXRoIH0gZnJvbSAncmVzb2x2ZS1vYmplY3QtcGF0aCc7XG5pbXBvcnQgeyBldmFsdWF0ZSwgaXNEZWZpbmVkLCBpc051bGwgfSBmcm9tICdzaW1wbGUtYm9vbCc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJy4uL3R5cGVzL3V0aWxpdHkudHlwZXMnO1xuaW1wb3J0IHsgU29ydFR5cGUsIFRhYmxlRGF0YUNvbHVtbiwgVGFibGVQYWdpbmF0aW9uU3RyYXRlZ3ksIFRhYmxlU3ViaGVhZGVyIH0gZnJvbSAnLi90YWJsZS50eXBlcyc7XG5pbXBvcnQgeyBhcmVBbGxEYXRhQ29sdW1ucywgaXNUYWJsZVN1YmhlYWRlciwgbWVyZ2UyZEFycmF5cyB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQXJkVGFibGVSb3cge1xuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtRGF0YSA9IHNpZ25hbDxhbnk+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGl0ZW1EYXRhID0gdGhpcy5faXRlbURhdGEuYXNSZWFkb25seSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2luZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuICByZWFkb25seSBpbmRleCA9IHRoaXMuX2luZGV4LmFzUmVhZG9ubHkoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9pc0VtcHR5ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaXNFbXB0eSA9IHRoaXMuX2lzRW1wdHkuYXNSZWFkb25seSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGEgPSBzaWduYWw8YW55W10+KFtdKTtcbiAgcmVhZG9ubHkgZGF0YSA9IHRoaXMuX2RhdGEuYXNSZWFkb25seSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFDb2x1bW5zID0gc2lnbmFsPFRhYmxlRGF0YUNvbHVtbltdPihbXSk7XG4gIHJlYWRvbmx5IGRhdGFDb2x1bW5zID0gdGhpcy5fZGF0YUNvbHVtbnMuYXNSZWFkb25seSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NsYXNzID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICByZWFkb25seSBjbGFzcyA9IHRoaXMuX2NsYXNzLmFzUmVhZG9ubHkoKTtcblxuICByZWFkb25seSBkaXNhYmxlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGJvbGQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBzZWxlY3RlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGhpZ2hsaWdodGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpdGVtRGF0YTogYW55LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZGF0YTogYW55W10sXG4gICAgZGF0YUNvbHVtbnM6IFRhYmxlRGF0YUNvbHVtbltdLFxuICAgIGRpc2FibGVkOiBib29sZWFuLFxuICAgIGJvbGQ6IGJvb2xlYW4sXG4gICAgaXNFbXB0eSA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMuX2l0ZW1EYXRhLnNldChpdGVtRGF0YSk7XG4gICAgdGhpcy5faW5kZXguc2V0KGluZGV4KTtcbiAgICB0aGlzLl9kYXRhLnNldChkYXRhKTtcbiAgICB0aGlzLl9kYXRhQ29sdW1ucy5zZXQoZGF0YUNvbHVtbnMpO1xuICAgIHRoaXMuZGlzYWJsZWQuc2V0KGRpc2FibGVkKTtcbiAgICB0aGlzLmJvbGQuc2V0KGJvbGQpO1xuICAgIHRoaXMuX2lzRW1wdHkuc2V0KGlzRW1wdHkpO1xuICB9XG4gIHN0YXRpYyBuZXdFbXB0eUNlbGwoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgQXJkVGFibGVSb3cobnVsbCwgaW5kZXgsIFtdLCBbXSwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUl0ZW1TdG9yYWdlSG9zdCB7XG4gIHJlYWRvbmx5IHJvd0Rpc2FibGVkRnJvbTogU2lnbmFsPHN0cmluZz47XG4gIHJlYWRvbmx5IHJvd0JvbGRGcm9tOiBTaWduYWw8c3RyaW5nPjtcbiAgcmVhZG9ubHkgaW52ZXJ0Um93RGlzYWJsZWQ6IFNpZ25hbDxib29sZWFuPjtcbiAgcmVhZG9ubHkgaW52ZXJ0Um93Qm9sZDogU2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBkYXRhOiBTaWduYWw8TnVsbGFibGU8YW55Pj5bXTtcbiAgcmVhZG9ubHkgbWF4U2VsZWN0ZWRJdGVtczogU2lnbmFsPE51bGxhYmxlPG51bWJlcj4+O1xuICByZWFkb25seSB0cmVhdERhdGFTb3VyY2VBc1N0cmluZzogU2lnbmFsPGJvb2xlYW4+O1xuXG4gIHJlYWRvbmx5IHBhZ2luYXRlZDogU2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBwYWdpbmF0aW9uU3RyYXRlZ3k6IFNpZ25hbDxUYWJsZVBhZ2luYXRpb25TdHJhdGVneT47XG4gIHJlYWRvbmx5IGl0ZW1zUGVyUGFnZTogU2lnbmFsPG51bWJlcj47XG4gIHJlYWRvbmx5IHBhZ2U6IFNpZ25hbDxudW1iZXI+O1xufVxuZXhwb3J0IGNsYXNzIEhlYWRlckNlbGwge1xuICByZWFkb25seSBjZWxsID0gc2lnbmFsPFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyPih1bmRlZmluZWQgYXMgYW55KTtcbiAgcmVhZG9ubHkgY29sc3BhbiA9IHNpZ25hbDxudW1iZXI+KDEpO1xuICByZWFkb25seSByb3dzcGFuID0gc2lnbmFsPG51bWJlcj4oMSk7XG5cbiAgY29uc3RydWN0b3IoY2VsbDogVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIsIGNvbHNwYW4gPSAxLCByb3dzcGFuID0gMSkge1xuICAgIHRoaXMuY2VsbC5zZXQoY2VsbCk7XG4gICAgdGhpcy5jb2xzcGFuLnNldChjb2xzcGFuKTtcbiAgICB0aGlzLnJvd3NwYW4uc2V0KHJvd3NwYW4pO1xuICB9XG5cbiAgZ2V0IHdpZHRoKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGNlbGwgPSB0aGlzLmNlbGwoKTtcbiAgICBpZiAoaXNUYWJsZVN1YmhlYWRlcihjZWxsKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuX2dldFdpZHRoKGNlbGwud2lkdGgpO1xuICB9XG4gIGdldCBtaW5XaWR0aCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBjZWxsID0gdGhpcy5jZWxsKCk7XG4gICAgaWYgKGlzVGFibGVTdWJoZWFkZXIoY2VsbCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLl9nZXRXaWR0aChjZWxsLm1pbldpZHRoKTtcbiAgfVxuICAvKipcbiAgICogVGhyYW5zZm9ybXMgYSBudW1lcmljIHdpZHRoIGludG8gYSBDU1Mgc3RyaW5nIGlmIG5lZWRlZC4gUHVyZSBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHdpZHRoIHRoZSB3aWR0aCB0byBiZSBjb252ZXJ0ZWQuXG4gICAqIEByZXR1cm5zIFRoZSB3aWR0aCBleHByZXNzZWQgYXMgYSBDU1MtY29tcGF0aWJsZSBzdHJpbmcgb3IgbnVsbC5cbiAgICovXG4gIHByaXZhdGUgX2dldFdpZHRoKHdpZHRoOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIXdpZHRoKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodHlwZW9mIHdpZHRoID09PSAnbnVtYmVyJykgcmV0dXJuIGAke3dpZHRofXB4YDtcbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlSXRlbVN0b3JhZ2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtcyA9IHNpZ25hbDxBcmRUYWJsZVJvd1tdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NvcnRlZEl0ZW1zID0gc2lnbmFsPEFyZFRhYmxlUm93W10+KFtdKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhQ29sdW1ucyA9IHNpZ25hbDxUYWJsZURhdGFDb2x1bW5bXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9oZWFkZXJDZWxscyA9IHNpZ25hbDxIZWFkZXJDZWxsW11bXT4oW10pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX2FyZFBhcmVudENvbXA6IFRhYmxlSXRlbVN0b3JhZ2VIb3N0KSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIGFsbCBpdGVtcy5cbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zID0gdGhpcy5faXRlbXMuYXNSZWFkb25seSgpO1xuICByZWFkb25seSBzb3J0ZWRJdGVtcyA9IHRoaXMuX3NvcnRlZEl0ZW1zLmFzUmVhZG9ubHkoKTtcbiAgLyoqXG4gICAqIEdldHMgaXRlbXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgcGFnaW5hdGlvbiBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhZ2luYXRlZEl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghdGhpcy5fYXJkUGFyZW50Q29tcC5wYWdpbmF0ZWQoKSB8fCB0aGlzLl9hcmRQYXJlbnRDb21wLnBhZ2luYXRpb25TdHJhdGVneSgpID09PSBUYWJsZVBhZ2luYXRpb25TdHJhdGVneS5Ob29wKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3J0ZWRJdGVtcygpO1xuICAgIH1cbiAgICBjb25zdCBwYWdlID0gdGhpcy5fYXJkUGFyZW50Q29tcC5wYWdlKCk7XG4gICAgY29uc3QgSVBQID0gdGhpcy5fYXJkUGFyZW50Q29tcC5pdGVtc1BlclBhZ2UoKTtcbiAgICBjb25zdCBpdGVtc1N0YXJ0ID0gKHBhZ2UgLSAxKSAqIElQUDtcbiAgICBjb25zdCBpdGVtc0VuZCA9IHBhZ2UgKiBJUFA7XG4gICAgcmV0dXJuIHRoaXMuc29ydGVkSXRlbXMoKS5zbGljZShpdGVtc1N0YXJ0LCBpdGVtc0VuZCk7XG4gIH0pO1xuICAvKipcbiAgICogR2V0cyBhbGwgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtcyA9IGNvbXB1dGVkPEFyZFRhYmxlUm93W10+KCgpID0+IHRoaXMuaXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKCkpKTtcbiAgLyoqXG4gICAqIEdldHMgYWxsIGN1cnJlbnRseSBoaWdobGlnaHRlZCBpdGVtcy5cbiAgICovXG4gIHJlYWRvbmx5IGhpZ2hsaWdodGVkSXRlbXMgPSBjb21wdXRlZDxBcmRUYWJsZVJvd1tdPigoKSA9PiB0aGlzLml0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5oaWdobGlnaHRlZCgpKSk7XG4gIC8qKlxuICAgKiBHZXRzIGFsbCBoaWdobGlnaHRhYmxlIGl0ZW1zLiBBbiBpdGVtIGlzIGNvbnNpZGVyZWQgaGlnaGxpZ2h0YWJsZSBpZiBpdCBpcyAqKm5vdCoqIGRpc2FibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaGlnaGxpZ2h0YWJsZUl0ZW1zID0gY29tcHV0ZWQ8QXJkVGFibGVSb3dbXT4oKCkgPT4gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCgpKSk7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZXMgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcy5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5faXRlbXNUb1ZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtcygpKSk7XG4gIC8qKlxuICAgKiBNYXBzIGFuIGFycmF5IG9mIGl0ZW1zIGludG8gdGhlaXIgdmFsdWVzLlxuICAgKiBAcGFyYW0gaXRlbXMgVGhlIGl0ZW1zIHRvIGNvbnZlcnQgdG8gdmFsdWUuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGl0ZW0gdmFsdWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBfaXRlbXNUb1ZhbHVlKGl0ZW1zOiBBcmRUYWJsZVJvd1tdKTogYW55W10ge1xuICAgIHJldHVybiBpdGVtcy5tYXAoaXRlbSA9PiBpdGVtLml0ZW1EYXRhKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgaXRlbSBpcyBoaWdobGlnaHRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNBbnlJdGVtSGlnaGxpZ2h0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmhpZ2hsaWdodGVkSXRlbXMoKS5sZW5ndGggPiAwKTtcbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbnkgaXRlbSBpbiB0aGUgdGFibGUgaXMgc2VsZWN0ZWQuXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIGFueSBpdGVtIGlzIHNlbGVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNBbnlJdGVtU2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlbGVjdGVkSXRlbXMoKS5sZW5ndGggPiAwKTtcbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbGwgaXRlbXMgaW4gdGhlIHRhYmxlIGFyZSBzZWxlY3RlZC5cbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgYWxsIGl0ZW1zIGFyZSBzZWxlY3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFyZUFsbFNlbGVjdGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZEl0ZW1zKCkubGVuZ3RoID09PSB0aGlzLl9pdGVtcygpLmZpbHRlcihpdGVtID0+ICFpdGVtLmRpc2FibGVkKCkpLmxlbmd0aCk7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhcmVudCBjb21wb25lbnQgZGVmaW5lcyB0aGUgbGltaXQgb2YgY29uY3VycmVudGx5IHNlbGVjdGFibGUgaXRlbXMgYW5kIHRoZSBhbW91bnQgb2YgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zIG1hdGNoZXMgdGhhdCBsaW1pdC4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gICAqXG4gICAqICoqVExEUioqOiB0cnVlIGlmIGBtYXhTZWxlY3RlZEl0ZW1zYCBpcyBkZWZpbmVkIGFuZCB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW1zIG1hdGNoZXMgdGhhdCB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGlzSXRlbUxpbWl0UmVhY2hlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtYXggPSB0aGlzLl9hcmRQYXJlbnRDb21wLm1heFNlbGVjdGVkSXRlbXMoKTtcbiAgICBpZiAoIWlzRGVmaW5lZChtYXgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBtYXggPD0gdGhpcy5zZWxlY3RlZEl0ZW1zKCkubGVuZ3RoO1xuICB9KTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgaGVhZGVyIGNlbGxzIG9mIHRoZSB0YWJsZS5cbiAgICogQHJldHVybnMgYSAyRCBhcnJheSBvZiBoZWFkZXIgY2VsbHMuXG4gICAqL1xuICByZWFkb25seSBoZWFkZXJDZWxscyA9IHRoaXMuX2hlYWRlckNlbGxzLmFzUmVhZG9ubHkoKTtcbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgdGFibGUgaGFzIGRlZmluZWQgY29sdW1ucy5cbiAgICogQHJldHVybnMgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHRhYmxlIGhhcyBkZWZpbmVkIGNvbHVtbnMuXG4gICAqL1xuICByZWFkb25seSBoYXNEZWZpbmVkQ29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2RhdGFDb2x1bW5zKCkubGVuZ3RoID4gMCk7XG5cbiAgLy8hIHNldHRpbmcgY29sdW1uc1xuICAvKipcbiAgICogU2V0cyB0aGUgY29sdW1ucyBvZiB0aGUgdGFibGUuXG4gICAqIEBwYXJhbSBjb2xzIGFuIGFycmF5IG9mIHRhYmxlIGRhdGEgY29sdW1ucyBvciB0YWJsZSBzdWJoZWFkZXJzLlxuICAgKi9cbiAgc2V0Q29sdW1ucyhjb2xzOiAoVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIpW10pOiB2b2lkIHtcbiAgICBjb25zdCBtYXhOZXN0aW5nTGV2ZWwgPSB0aGlzLl9nZXRIZWFkZXJNYXhOZXN0aW5nKGNvbHMpO1xuICAgIGNvbnN0IGhlYWRlckNlbGxzID0gdGhpcy5fbWFwQ29sdW1uc1RvQXJyYXkoY29scywgbWF4TmVzdGluZ0xldmVsLCAwKTtcbiAgICB0aGlzLl9oZWFkZXJDZWxscy5zZXQodGhpcy5fZmlsdGVySGVhZGVyQ2VsbHMoaGVhZGVyQ2VsbHMpKTtcbiAgICB0aGlzLl9kYXRhQ29sdW1ucy5zZXQodGhpcy5fZXh0cmFjdERhdGFTb3VyY2VzKGNvbHMpKTtcbiAgfVxuICAvKipcbiAgICogRmlsdGVycyBvdXQgbnVsbCB2YWx1ZXMgZnJvbSB0aGUgaGVhZGVyIGNlbGxzIGFycmF5LiBQdXJlIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gY2VsbHMgYSAyRCBhcnJheSBvZiBoZWFkZXIgY2VsbHMgb3IgbnVsbCB2YWx1ZXMuXG4gICAqIEByZXR1cm5zIGEgMkQgYXJyYXkgb2YgaGVhZGVyIGNlbGxzIHdpdGhvdXQgbnVsbCB2YWx1ZXMgYW5kIGVtcHR5IGFycmF5cy5cbiAgICovXG4gIHByaXZhdGUgX2ZpbHRlckhlYWRlckNlbGxzKGNlbGxzOiAoSGVhZGVyQ2VsbCB8IG51bGwpW11bXSk6IEhlYWRlckNlbGxbXVtdIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjZWxsc1tpXSA9IGNlbGxzW2ldLmZpbHRlcih2ID0+IHYgIT09IG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gY2VsbHMuZmlsdGVyKHJvdyA9PiByb3cubGVuZ3RoKSBhcyBIZWFkZXJDZWxsW11bXTtcbiAgfVxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIGRhdGEgc291cmNlcyBmcm9tIHRoZSBjb2x1bW5zIGFycmF5LiBQdXJlIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gY29scyBhbiBhcnJheSBvZiB0YWJsZSBkYXRhIGNvbHVtbnMgb3IgdGFibGUgc3ViaGVhZGVycy5cbiAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zLlxuICAgKi9cbiAgcHJpdmF0ZSBfZXh0cmFjdERhdGFTb3VyY2VzKGNvbHM6IChUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcilbXSk6IFRhYmxlRGF0YUNvbHVtbltdIHtcbiAgICBjb25zdCBkYXRhQ29sdW1uczogVGFibGVEYXRhQ29sdW1uW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMpIHtcbiAgICAgIGlmICghaXNUYWJsZVN1YmhlYWRlcihjb2wpKSB7XG4gICAgICAgIGRhdGFDb2x1bW5zLnB1c2goY29sKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBkYXRhQ29sdW1ucy5wdXNoKC4uLnRoaXMuX2V4dHJhY3REYXRhU291cmNlcyhjb2wuY2hpbGRyZW4pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YUNvbHVtbnM7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1heGltdW0gbmVzdGluZyBsZXZlbCBvZiB0aGUgY29sdW1ucyBhcnJheS4gUHVyZSBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGNvbHMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zIG9yIHRhYmxlIHN1YmhlYWRlcnMuXG4gICAqIEByZXR1cm5zIHRoZSBtYXhpbXVtIG5lc3RpbmcgbGV2ZWwgYXMgYSBudW1iZXIuXG4gICAqL1xuICBwcml2YXRlIF9nZXRIZWFkZXJNYXhOZXN0aW5nKGNvbHM6IChUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcilbXSk6IG51bWJlciB7XG4gICAgaWYgKGFyZUFsbERhdGFDb2x1bW5zKGNvbHMpKSByZXR1cm4gMTtcbiAgICBsZXQgbWF4ID0gMTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzLmZpbHRlcih2ID0+IGlzVGFibGVTdWJoZWFkZXIodikpIGFzIFRhYmxlU3ViaGVhZGVyW10pIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IDEgKyB0aGlzLl9nZXRIZWFkZXJNYXhOZXN0aW5nKGNvbC5jaGlsZHJlbik7XG4gICAgICBpZiAoaGVpZ2h0ID4gbWF4KSBtYXggPSBoZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiBtYXg7XG4gIH1cbiAgLyoqXG4gICAqIE1hcHMgdGhlIGNvbHVtbnMgdHJlZSB0byBhIDJEIGFycmF5IG9mIGhlYWRlciBjZWxscyBvciBudWxsIHZhbHVlcy4gUHVyZSBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGNvbHMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zIG9yIHRhYmxlIHN1YmhlYWRlcnMuXG4gICAqIEBwYXJhbSBtYXhOZXN0aW5nIHRoZSBtYXhpbXVtIG5lc3RpbmcgbGV2ZWwgb2YgdGhlIGNvbHVtbnMgYXJyYXkuXG4gICAqIEBwYXJhbSBjdXJyZW50TmVzdGluZyB0aGUgY3VycmVudCBuZXN0aW5nIGxldmVsIG9mIHRoZSBjb2x1bW5zIGFycmF5LlxuICAgKiBAcmV0dXJucyBhIDJEIGFycmF5IG9mIGhlYWRlciBjZWxscyBvciBudWxsIHZhbHVlcy5cbiAgICovXG4gIHByaXZhdGUgX21hcENvbHVtbnNUb0FycmF5KFxuICAgIGNvbHM6IChUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcilbXSxcbiAgICBtYXhOZXN0aW5nOiBudW1iZXIsXG4gICAgY3VycmVudE5lc3Rpbmc6IG51bWJlclxuICApOiAoSGVhZGVyQ2VsbCB8IG51bGwpW11bXSB7XG4gICAgaWYgKGFyZUFsbERhdGFDb2x1bW5zKGNvbHMpKSB7XG4gICAgICByZXR1cm4gW2NvbHMubWFwKGNvbCA9PiBuZXcgSGVhZGVyQ2VsbChjb2wsIDEsIG1heE5lc3RpbmcgLSBjdXJyZW50TmVzdGluZykpXTtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVyQ2VsbHM6IChIZWFkZXJDZWxsIHwgbnVsbClbXVtdID0gW1tdXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICBpZiAoIWlzVGFibGVTdWJoZWFkZXIoY29sKSkge1xuICAgICAgICBoZWFkZXJDZWxsc1swXS5wdXNoKG5ldyBIZWFkZXJDZWxsKGNvbCwgMSwgbWF4TmVzdGluZyAtIGN1cnJlbnROZXN0aW5nKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hpbGRDZWxsczogKEhlYWRlckNlbGwgfCBudWxsKVtdW10gPSBbW10sIC4uLnRoaXMuX21hcENvbHVtbnNUb0FycmF5KGNvbC5jaGlsZHJlbiwgbWF4TmVzdGluZywgY3VycmVudE5lc3RpbmcgKyAxKV07XG4gICAgICBjb25zdCBoZWlnaHQgPSBjaGlsZENlbGxzLmxlbmd0aCAtIDE7XG4gICAgICBjb25zdCB3aWR0aCA9IGNoaWxkQ2VsbHNbMV0ubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgICBoZWFkZXJDZWxscy5wdXNoKFtudWxsXSk7XG4gICAgICB9XG4gICAgICBoZWFkZXJDZWxsc1swXS5wdXNoKG5ldyBIZWFkZXJDZWxsKGNvbCwgd2lkdGgsIDEpKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd2lkdGggLSAxOyBpKyspIHtcbiAgICAgICAgaGVhZGVyQ2VsbHNbMF0ucHVzaChudWxsKTtcbiAgICAgIH1cbiAgICAgIG1lcmdlMmRBcnJheXMoaGVhZGVyQ2VsbHMsIGNoaWxkQ2VsbHMpO1xuICAgIH1cbiAgICByZXR1cm4gaGVhZGVyQ2VsbHM7XG4gIH1cblxuICAvLyEgc2V0dGluZyBpdGVtc1xuICAvKipcbiAgICogU2V0cyB0aGUgY29tcG9uZW50J3MgaXRlbXMuIFRha2VzIGludG8gYWNjb3VudCB0aGUgdmFsdWVzIGRlZmluZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQgZm9yIGByb3dEaXNhYmxlZEZyb21gLCBgcm93Qm9sZEZyb21gLCBhbmQgYHJvd0hpZ2hsaWdodGVkRnJvbWAuXG4gICAqIEBwYXJhbSBpdGVtcyBBbiBhcnJheSBvZiBpdGVtcyB0byBiZSBzZXQgYXMgdGhlIGNvbXBvbmVudCdzIGl0ZW1zLlxuICAgKi9cbiAgc2V0SXRlbXMoaXRlbXM6IGFueVtdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhhc0RlZmluZWRDb2x1bW5zKCkpIHJldHVybjtcblxuICAgIGNvbnN0IG1hcHBlZEl0ZW1zID0gaXRlbXMubWFwKChpdGVtLCBpKSA9PiB0aGlzLl9zZXRJdGVtc01hcEZuKGl0ZW0sIGkpKTtcbiAgICB0aGlzLl9pdGVtcy5zZXQobWFwcGVkSXRlbXMpO1xuICAgIHRoaXMuX3NvcnRlZEl0ZW1zLnNldChtYXBwZWRJdGVtcyk7XG4gIH1cbiAgLyoqXG4gICAqIE1hcHMgcmF3IGl0ZW0gZGF0YSB0byBhbiB7QGxpbmsgQXJkVGFibGVSb3d9IG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHJhd0l0ZW1EYXRhIC0gVGhlIHJhdyBkYXRhIG9mIHRoZSBpdGVtLlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGl0ZW0uXG4gICAqIEByZXR1cm5zIHtBcmRUYWJsZVJvd30gUmV0dXJucyBhbiBBcmRUYWJsZVJvdyBvYmplY3Qgd2l0aCBtYXBwZWQgcHJvcGVydGllcy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3NldEl0ZW1zTWFwRm4ocmF3SXRlbURhdGE6IGFueSwgaW5kZXg6IG51bWJlcik6IEFyZFRhYmxlUm93IHtcbiAgICAvL2dldCBkYXRhXG4gICAgY29uc3QgW2RhdGEsIGRhdGFDb2x1bW5zXSA9IHRoaXMuX2dldFJvd0RhdGEocmF3SXRlbURhdGEsIGluZGV4KTtcblxuICAgIC8vZ2V0IGJvbGRcbiAgICBjb25zdCByb3dCb2xkRnJvbVBhdGggPSB0aGlzLl9hcmRQYXJlbnRDb21wLnJvd0JvbGRGcm9tKCk7XG4gICAgbGV0IGJvbGQgPSByZXNvbHZlUGF0aChyYXdJdGVtRGF0YSwgcm93Qm9sZEZyb21QYXRoKTtcbiAgICBpZiAodGhpcy5fYXJkUGFyZW50Q29tcC5pbnZlcnRSb3dCb2xkKCkpIHtcbiAgICAgIGJvbGQgPSAhYm9sZDtcbiAgICB9XG5cbiAgICAvL2dldCBkaXNhYmxlZFxuICAgIGNvbnN0IGRpc2FibGVkUGF0aCA9IHRoaXMuX2FyZFBhcmVudENvbXAucm93RGlzYWJsZWRGcm9tKCk7XG4gICAgbGV0IGRpc2FibGVkID0gZXZhbHVhdGUocmVzb2x2ZVBhdGgocmF3SXRlbURhdGEsIGRpc2FibGVkUGF0aCkpO1xuICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLmludmVydFJvd0Rpc2FibGVkKCkpIHtcbiAgICAgIGRpc2FibGVkID0gIWRpc2FibGVkO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXJkVGFibGVSb3cocmF3SXRlbURhdGEsIGluZGV4LCBkYXRhLCBkYXRhQ29sdW1ucywgZGlzYWJsZWQsIGJvbGQpO1xuICB9XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgZGF0YSBmb3IgYSByb3cgYmFzZWQgb24gZGF0YSBjb2x1bW5zIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSByYXdJdGVtRGF0YSAtIFRoZSByYXcgZGF0YSBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBpdGVtLlxuICAgKiBAcmV0dXJucyB7YW55W119IFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgcm93IGRhdGEuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9nZXRSb3dEYXRhKHJhd0l0ZW1EYXRhOiBhbnksIGluZGV4OiBudW1iZXIpOiBbYW55W10sIFRhYmxlRGF0YUNvbHVtbltdXSB7XG4gICAgY29uc3QgZGF0YTogYW55W10gPSBbXTtcbiAgICBjb25zdCBfY29scyA9IHRoaXMuX2RhdGFDb2x1bW5zKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBfY29scy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZGF0YUNvbHVtbiA9IF9jb2xzW2ldO1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGRhdGFDb2x1bW4uZGF0YVNvdXJjZTtcblxuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodGhpcy5fYXJkUGFyZW50Q29tcC50cmVhdERhdGFTb3VyY2VBc1N0cmluZygpKSB7XG4gICAgICAgICAgZGF0YS5wdXNoKHJhd0l0ZW1EYXRhW3NvdXJjZVBhdGhdKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLnB1c2gocmVzb2x2ZVBhdGgocmF3SXRlbURhdGEsIHNvdXJjZVBhdGgpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aC50eXBlID09PSAnYXV0b2NvdW50Jykge1xuICAgICAgICBkYXRhLnB1c2goaW5kZXggKyAxKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aC50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgIGRhdGEucHVzaCh7IF9hcmRDaGVja2JveDogdHJ1ZSwgaW5kZXggfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc291cmNlU3RyaW5nID0gdHlwZW9mIHNvdXJjZVBhdGggPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoc291cmNlUGF0aCkgOiBzb3VyY2VQYXRoO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBUkQtRlQ1MDUyOiBVbmV4cGVjdGVkIGRhdGEgc291cmNlIFwiJHtzb3VyY2VTdHJpbmd9XCIgYXQgaW5kZXggJHtpfS5gKTtcbiAgICB9XG4gICAgcmV0dXJuIFtkYXRhLCB0aGlzLl9kYXRhQ29sdW1ucygpXTtcbiAgfVxuICAvKipcbiAgICogV3JpdGVzIGEgbmV3IHZhbHVlIHRvIHRoZSBpdGVtIHN0b3JhZ2UuIFNlbGVjdHMgdGhlIGNvcnJlY3QgaXRlbXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHZhbHVlcywgd2FybmluZyB0aGUgdXNlciBpZiB0aGUgdmFsdWUgaXMgbm90IGZvdW5kLlxuICAgKiBAcGFyYW0gaW5kZXhlcyBUaGUgdmFsdWUgb2YgdGhlIG5nTW9kZWwgdG8gc2V0LlxuICAgKi9cbiAgd3JpdGVWYWx1ZShpbmRleGVzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIHRoaXMuX2ZvcmNlVW5zZWxlY3RBbGwoKTtcbiAgICB0aGlzLnNlbGVjdEl0ZW0oLi4uaW5kZXhlcyk7XG4gIH1cblxuICAvLyEgc2VsZWN0aW5nIGl0ZW1zXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYW4gaXRlbSB3aXRoIHRoZSBnaXZlbiBpbmRleCBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IF90cnVlXyBpZiB0aGUgaXRlbSBpcyBzZWxlY3RlZCwgb3RoZXJ3aXNlIF9mYWxzZV8uXG4gICAqL1xuICBpc0l0ZW1TZWxlY3RlZChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcygpLnNvbWUoaXRlbSA9PiBpdGVtLmluZGV4KCkgPT09IGluZGV4KTtcbiAgfVxuICAvKipcbiAgICogU2VsZWN0cyBhbGwgaXRlbXMuXG4gICAqXG4gICAqIEFjY291bnRzIGZvciB0aGUgbGltaXQgb2YgY29uY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zIGRlZmluZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyB0d28gYXJyYXlzOlxuICAgKiAqIEFuIGFycmF5IG9mIGl0ZW1zIHNlbGVjdGVkLlxuICAgKiAqIEFuIGFycmF5IG9mIGl0ZW1zIGZhaWxlZCB0byBzZWxlY3QuXG4gICAqL1xuICBzZWxlY3RBbGwoKTogW2FueVtdLCBhbnlbXV0ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdEl0ZW0oLi4udGhpcy5faXRlbXMoKS5tYXAodiA9PiB2LmluZGV4KCkpKTtcbiAgfVxuICAvKipcbiAgICogVW5zZWxlY3RzIGFsbCBzZWxlY3RlZCBpdGVtcy5cbiAgICpcbiAgICogSWYgdGhlIHBhcmVudCBjb21wb25lbnQgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHZhbHVlIHRvIGJlIHNlbGVjdGVkIGF0IGFsbCB0aW1lcywgdGhlIGZpcnN0IHNlbGVjdGVkIGl0ZW1zIGlzIGxlZnQgc2VsZWN0ZWQuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGl0ZW1zIGNsZWFyZWQsIG1hcHBlZCB0byBvbmx5IHRoZWlyIHZhbHVlcy5cbiAgICovXG4gIHVuc2VsZWN0QWxsKCk6IGFueVtdIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtcygpO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBzZWxlY3RlZCkge1xuICAgICAgaXRlbS5zZWxlY3RlZC5zZXQoZmFsc2UpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pdGVtc1RvVmFsdWUoc2VsZWN0ZWQpO1xuICB9XG4gIC8qKlxuICAgKiBVbnNlbGVjdHMgYWxsIHNlbGVjdGVkIGl0ZW1zLCBubyBtYXR0ZXIgd2hhdCB0aGUgY29tcG9uZW50IHNldHRpbmdzIGFyZS5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgaXRlbXMgY2xlYXJlZCwgbWFwcGVkIHRvIG9ubHkgdGhlaXIgdmFsdWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBfZm9yY2VVbnNlbGVjdEFsbCgpOiBhbnlbXSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSXRlbXMoKTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc2VsZWN0ZWQpIHtcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuc2V0KGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5faXRlbXNUb1ZhbHVlKHNlbGVjdGVkKTtcbiAgfVxuICAvKipcbiAgICogU2VsZWN0cyBvbmUgb3IgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEFjY291bnRzIGZvciB0aGUgbGltaXQgb2YgY29uY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zIGRlZmluZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBpbmRleGVzIEEgcmVzdCBvcGVyYXRvciBhcnJheSBvZiBpdGVtIGluZGV4ZXMgdG8gYmUgc2VsZWN0ZWQuXG4gICAqIEByZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyB0d28gYXJyYXlzOlxuICAgKiAtIEFuIGFycmF5IG9mIGl0ZW1zIHNlbGVjdGVkLlxuICAgKiAtIEFuIGFycmF5IG9mIGl0ZW1zIGZhaWxlZCB0byBzZWxlY3QuXG4gICAqL1xuICBzZWxlY3RJdGVtKC4uLmluZGV4ZXM6IG51bWJlcltdKTogW2FueVtdLCBhbnlbXV0ge1xuICAgIGNvbnN0IGl0ZW1zVG9CZVNlbGVjdGVkID0gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCgpICYmIGluZGV4ZXMuaW5jbHVkZXMoaXRlbS5pbmRleCgpKSk7XG4gICAgaWYgKHRoaXMuaXNJdGVtTGltaXRSZWFjaGVkKCkpIHtcbiAgICAgIHJldHVybiBbW10sIHRoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtc1RvQmVTZWxlY3RlZCldO1xuICAgIH1cblxuICAgIGxldCBpdGVtc1NlbGVjdGVkQ291bnQgPSAwO1xuICAgIGNvbnN0IGl0ZW1zU2VsZWN0ZWQgPSBbXTtcbiAgICBsZXQgaXRlbXNMZWZ0VW50aWxMaW1pdCA9ICh0aGlzLl9hcmRQYXJlbnRDb21wLm1heFNlbGVjdGVkSXRlbXMoKSA/PyBJbmZpbml0eSkgLSB0aGlzLnNlbGVjdGVkSXRlbXMoKS5sZW5ndGg7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zVG9CZVNlbGVjdGVkKSB7XG4gICAgICBpdGVtc1NlbGVjdGVkQ291bnQrKztcbiAgICAgIGlmIChpdGVtLnNlbGVjdGVkKCkpIGNvbnRpbnVlO1xuICAgICAgaWYgKGl0ZW1zTGVmdFVudGlsTGltaXQgPD0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGl0ZW1zTGVmdFVudGlsTGltaXQtLTtcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuc2V0KHRydWUpO1xuICAgICAgaXRlbXNTZWxlY3RlZC5wdXNoKGl0ZW0pO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1zRmFpbGVkVG9TZWxlY3QgPSBpdGVtc1RvQmVTZWxlY3RlZC5zbGljZShpdGVtc1NlbGVjdGVkQ291bnQgLSAxKTtcbiAgICByZXR1cm4gW3RoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtc1NlbGVjdGVkKSwgdGhpcy5faXRlbXNUb1ZhbHVlKGl0ZW1zRmFpbGVkVG9TZWxlY3QpXTtcbiAgfVxuICAvKipcbiAgICogVW5zZWxlY3RzIG9uZSBvciBtdWx0aXBsZSBpdGVtcy5cbiAgICogQHBhcmFtIGl0ZW1zIEEgcmVzdCBvcGVyYXRvciBhcnJheSBvZiBpdGVtIGluZGV4ZXMgdG8gYmUgdW5zZWxlY3RlZC5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgaXRlbXMgdW5zZWxlY3RlZCwgbWFwcGVkIHRvIG9ubHkgdGhlaXIgdmFsdWVzLlxuICAgKi9cbiAgdW5zZWxlY3RJdGVtKC4uLmluZGV4ZXM6IG51bWJlcltdKTogYW55W10ge1xuICAgIGNvbnN0IGl0ZW1zVG9CZVVuc2VsZWN0ZWQgPSB0aGlzLl9pdGVtcygpLmZpbHRlcihpdGVtID0+IGluZGV4ZXMuaW5jbHVkZXMoaXRlbS5pbmRleCgpKSk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zVG9CZVVuc2VsZWN0ZWQpIHtcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuc2V0KGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5faXRlbXNUb1ZhbHVlKGl0ZW1zVG9CZVVuc2VsZWN0ZWQpO1xuICB9XG5cbiAgLy8hIGhpZ2hsaWdodGluZyBpdGVtc1xuICAvKipcbiAgICogVW5oaWdobGlnaHRzIGFsbCBjdXJyZW50bHkgaGlnaGxpZ2h0ZWQgaXRlbXMuXG4gICAqL1xuICB1bmhpZ2hsaWdodEFsbCgpOiB2b2lkIHtcbiAgICBjb25zdCBoaWdobGlnaHRlZCA9IHRoaXMuaGlnaGxpZ2h0ZWRJdGVtcygpO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBoaWdobGlnaHRlZCkge1xuICAgICAgaXRlbS5oaWdobGlnaHRlZC5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogSGlnaGxpZ2h0cyB0aGUgZ2l2ZW4gaXRlbSwgd2hpbGUgdW5oaWdobGlnaHRpbmcgYWxsIG90aGVyIGl0ZW1zLiBEb2VzIG5vdGhpbmcgd2hlbiB0aGUgaXRlbSBpcyBkaXNhYmxlZC5cbiAgICogQHBhcmFtIGl0ZW0gVGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIGJlIGhpZ2hsaWdodGVkLlxuICAgKiBAcmV0dXJucyBUaGUgaGlnaGxpZ2h0ZWQgaXRlbS5cbiAgICovXG4gIGhpZ2hsaWdodFNpbmdsZUl0ZW0oaW5kZXg6IG51bWJlcik6IEFyZFRhYmxlUm93IHwgbnVsbCB7XG4gICAgdGhpcy51bmhpZ2hsaWdodEFsbCgpO1xuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0oaW5kZXgpO1xuICB9XG4gIC8qKlxuICAgKiBIaWdobGlnaHRzIGFsbCBnaXZlbiBpdGVtcy5cbiAgICogQHBhcmFtIGl0ZW1zIEEgcmVzdCBvcGVyYXRvciBhcnJheSBvZiBpdGVtIGluZGV4ZXMgdG8gYmUgaGlnaGxpZ2h0ZWQuXG4gICAqIEByZXR1cm5zIFRoZSBsYXN0IGhpZ2hsaWdodGVkIGl0ZW0uXG4gICAqL1xuICBoaWdobGlnaHRJdGVtKC4uLmluZGV4ZXM6IG51bWJlcltdKTogQXJkVGFibGVSb3cge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpbmRleGVzLmluY2x1ZGVzKGl0ZW0uaW5kZXgoKSkpO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgaXRlbS5oaWdobGlnaHRlZC5zZXQodHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcy5sYXN0KCk7XG4gIH1cbiAgLyoqXG4gICAqIFVuaGlnaGxpZ2h0cyBhbGwgZ2l2ZW4gaXRlbXMuXG4gICAqIEBwYXJhbSBpdGVtcyBBIHJlc3Qgb3BlcmF0b3IgYXJyYXkgb2YgaXRlbSBpbmRleGVzIHRvIGJlIHVuaGlnaGxpZ2h0ZWQuXG4gICAqL1xuICB1bmhpZ2hsaWdodEl0ZW0oLi4uaW5kZXhlczogbnVtYmVyW10pOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2l0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gaW5kZXhlcy5pbmNsdWRlcyhpdGVtLmluZGV4KCkpKTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGlmICghaXRlbSB8fCAhaXRlbS5oaWdobGlnaHRlZCgpKSByZXR1cm47XG5cbiAgICAgIGl0ZW0uaGlnaGxpZ2h0ZWQuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEhpZ2hsaWdodHMgdGhlIGZpcnN0IGl0ZW0gb3V0IG9mIGFsbCBpdGVtcy5cbiAgICogQHJldHVybnMgVGhlIGhpZ2hsaWdodGVkIGl0ZW0uXG4gICAqL1xuICBoaWdobGlnaHRGaXJzdEl0ZW0oKTogQXJkVGFibGVSb3cgfCBudWxsIHtcbiAgICB0aGlzLnVuaGlnaGxpZ2h0QWxsKCk7XG5cbiAgICBjb25zdCBpdGVtVG9IaWdobGlnaHQgPSB0aGlzLmhpZ2hsaWdodGFibGVJdGVtcygpLmZpcnN0KCkuaW5kZXgoKTtcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRJdGVtKGl0ZW1Ub0hpZ2hsaWdodCk7XG4gIH1cbiAgLyoqXG4gICAqIEhpZ2hsaWdodHMgdGhlIGxhc3QgaXRlbSBvdXQgb2YgYWxsIGl0ZW1zLlxuICAgKiBAcmV0dXJucyBUaGUgaGlnaGxpZ2h0ZWQgaXRlbS5cbiAgICovXG4gIGhpZ2hsaWdodExhc3RJdGVtKCk6IEFyZFRhYmxlUm93IHwgbnVsbCB7XG4gICAgdGhpcy51bmhpZ2hsaWdodEFsbCgpO1xuXG4gICAgY29uc3QgaXRlbVRvSGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHRhYmxlSXRlbXMoKS5sYXN0KCkuaW5kZXgoKTtcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRJdGVtKGl0ZW1Ub0hpZ2hsaWdodCk7XG4gIH1cbiAgLyoqXG4gICAqIEhpZ2hsaWdodHMgYWxsIG5vbi1kaXNhYmxlZCBpdGVtcy5cbiAgICovXG4gIGhpZ2hsaWdodEFsbEl0ZW1zKCk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zVG9IaWdobGlnaHQgPSB0aGlzLmhpZ2hsaWdodGFibGVJdGVtcygpLm1hcCh2ID0+IHYuaW5kZXgoKSk7XG4gICAgdGhpcy5oaWdobGlnaHRJdGVtKC4uLml0ZW1zVG9IaWdobGlnaHQpO1xuICB9XG4gIC8qKlxuICAgKiBIaWdobGlnaHRzIHRoZSBuZXh0IG5vbi1kaXNhYmxlZCBpdGVtIGRlZmluZWQgYnkgdGhlIG9mZnNldCBhbW91bnQuXG4gICAqXG4gICAqIElmIGBoYXNTaGlmdGAgaXMgc2V0IHRvIHRydWUsIGFsbCBvcmlnaW5hbGx5IGhpZ2hsaWdodGVkIGl0ZW1zIGFyZSBrZXB0LiBPdGhlcndpc2UsIGFsbCBvcmlnaW5hbCBpdGVtcyBhcmUgdW5zZWxlY3RlZC5cbiAgICogQHBhcmFtIG9mZnNldCBUaGUgYW1vdW50IG9mIGl0ZW1zIHRvIG9mZnNldCB0aGUgaGlnaGxpZ2h0IGJ5LlxuICAgKiBAcGFyYW0gaGFzU2hpZnQgV2hldGhlciB0aGUgdXNlciBoYXMgdGhlIHNoaWZ0IGtleSBwcmVzc2VkLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBoaWdobGlnaHRlZC5cbiAgICovXG4gIGhpZ2hsaWdodE5leHRJdGVtKG9mZnNldDogbnVtYmVyLCBoYXNTaGlmdD86IGJvb2xlYW4pOiBBcmRUYWJsZVJvdyB8IG51bGwge1xuICAgIGlmICghdGhpcy5pc0FueUl0ZW1IaWdobGlnaHRlZCgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRGaXJzdEl0ZW0oKTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEl0ZW0gPSB0aGlzLmhpZ2hsaWdodGVkSXRlbXMoKS5sYXN0KCk7XG4gICAgY29uc3QgaXRlbXNXaXRob3V0RGlzYWJsZWQgPSB0aGlzLl9pdGVtcygpLmZpbHRlcihcbiAgICAgIGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQoKSAmJiAoIXRoaXMuaXNJdGVtTGltaXRSZWFjaGVkKCkgfHwgaXRlbS5zZWxlY3RlZCgpKVxuICAgICk7XG4gICAgY29uc3QgY3VycmVudEluZGV4SW5JdGVtcyA9IGl0ZW1zV2l0aG91dERpc2FibGVkLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaW5kZXgoKSA9PT0gY3VycmVudEl0ZW0uaW5kZXgoKSk7XG5cbiAgICBsZXQgbmV4dEl0ZW1JbmRleCA9IGN1cnJlbnRJbmRleEluSXRlbXMgKyBvZmZzZXQ7XG4gICAgaWYgKG5leHRJdGVtSW5kZXggPj0gaXRlbXNXaXRob3V0RGlzYWJsZWQubGVuZ3RoKSB7XG4gICAgICBuZXh0SXRlbUluZGV4IC09IGl0ZW1zV2l0aG91dERpc2FibGVkLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKG5leHRJdGVtSW5kZXggPCAwKSB7XG4gICAgICBuZXh0SXRlbUluZGV4ICs9IGl0ZW1zV2l0aG91dERpc2FibGVkLmxlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgaXRlbVRvSGlnaGxpZ2h0ID0gaXRlbXNXaXRob3V0RGlzYWJsZWRbbmV4dEl0ZW1JbmRleF07XG5cbiAgICBpZiAoaGFzU2hpZnQpIHtcbiAgICAgIGlmIChpdGVtVG9IaWdobGlnaHQuaGlnaGxpZ2h0ZWQoKSkge1xuICAgICAgICB0aGlzLnVuaGlnaGxpZ2h0SXRlbShuZXh0SXRlbUluZGV4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0obmV4dEl0ZW1JbmRleCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodFNpbmdsZUl0ZW0obmV4dEl0ZW1JbmRleCk7XG4gIH1cblxuICAvLyEgc29ydGluZ1xuICBwcml2YXRlIF9jdXJyZW50U29ydENvbHVtbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2N1cnJlbnRTb3J0VHlwZTogU29ydFR5cGUgfCBudWxsID0gbnVsbDtcblxuICB0b2dnbGVDdXJyZW50U29ydENvbHVtbihjb2x1bW46IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uKSB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudFNvcnRUeXBlID09PSBTb3J0VHlwZS5Bc2NlbmRpbmcpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFNvcnRUeXBlID0gU29ydFR5cGUuRGVzY2VuZGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRTb3J0VHlwZSA9IFNvcnRUeXBlLkFzY2VuZGluZztcbiAgICAgIH1cbiAgICAgIHRoaXMuX2dlbmVyYXRlU29ydGVkUm93cyh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY3VycmVudFNvcnRDb2x1bW4gPSBjb2x1bW47XG4gICAgdGhpcy5fY3VycmVudFNvcnRUeXBlID0gU29ydFR5cGUuQXNjZW5kaW5nO1xuICAgIHRoaXMuX2dlbmVyYXRlU29ydGVkUm93cygpO1xuICB9XG4gIHJlc2V0U29ydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50U29ydENvbHVtbiA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudFNvcnRUeXBlID0gbnVsbDtcbiAgICB0aGlzLl9zb3J0ZWRJdGVtcy5zZXQoWy4uLnRoaXMuaXRlbXMoKV0pO1xuICB9XG4gIGdldENvbHVtblNvcnRUeXBlKGNvbHVtbjogbnVtYmVyKTogU29ydFR5cGUgfCBudWxsIHtcbiAgICBpZiAodGhpcy5fY3VycmVudFNvcnRDb2x1bW4gPT09IGNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTb3J0VHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfZ2VuZXJhdGVTb3J0ZWRSb3dzKGp1c3RSZXZlcnNlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChqdXN0UmV2ZXJzZSkge1xuICAgICAgdGhpcy5fc29ydGVkSXRlbXMudXBkYXRlKHYgPT4gWy4uLnYucmV2ZXJzZSgpXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNvcnRDb2x1bW5JbmRleCA9IHRoaXMuX2N1cnJlbnRTb3J0Q29sdW1uO1xuICAgIGlmIChpc051bGwoc29ydENvbHVtbkluZGV4KSB8fCAhdGhpcy5fY3VycmVudFNvcnRUeXBlKSB7XG4gICAgICB0aGlzLl9zb3J0ZWRJdGVtcy5zZXQodGhpcy5pdGVtcygpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc29ydENvbHVtbiA9IHRoaXMuX2RhdGFDb2x1bW5zKClbc29ydENvbHVtbkluZGV4XTtcbiAgICBpZiAoIXNvcnRDb2x1bW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFSRC1JUzUwNTk6IEVuY291bnRlcmVkIGFuIGlzc3VlIGluIDxhcmQtdGFibGU+OiBjb3VsZCBub3QgZmluZCB0aGUgY29sdW1uIHdpdGggaW5kZXggJHtzb3J0Q29sdW1uSW5kZXh9LiBUaGlzIGlzIG1vc3QgbGlrZWx5IGFuIEFyZGl1bSBVSSBidWcsIHBsZWFzZSByZXBvcnQgaXQgdG8gdGhlIGNyZWF0b3JzLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5fY3VycmVudFNvcnRUeXBlID09PSBTb3J0VHlwZS5Bc2NlbmRpbmcgPyAxIDogLTE7XG4gICAgY29uc3Qgc29ydEZuID1cbiAgICAgIHNvcnRDb2x1bW4uc29ydEZuID8/XG4gICAgICAoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gZGlyZWN0aW9uO1xuICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMSAqIGRpcmVjdGlvbjtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3NvcnRlZEl0ZW1zLnNldChbLi4udGhpcy5pdGVtcygpXS5zb3J0KChhLCBiKSA9PiBzb3J0Rm4oYS5kYXRhKClbc29ydENvbHVtbkluZGV4XSwgYi5kYXRhKClbc29ydENvbHVtbkluZGV4XSkpKTtcbiAgfVxufVxuIl19