@wavemaker/app-ng-runtime 11.8.0-next.141669 → 11.8.0-next.141671

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 (1448) hide show
  1. package/build-task/bundles/index.umd.js +33 -9
  2. package/build-task/esm2022/advanced/carousel/carousel-template/carousel-template.build.mjs +4 -2
  3. package/build-task/esm2022/advanced/carousel/carousel.build.mjs +1 -1
  4. package/build-task/esm2022/basic/default/label/label.build.mjs +1 -1
  5. package/build-task/esm2022/basic/progress/progress-bar/progress-bar.build.mjs +1 -1
  6. package/build-task/esm2022/containers/accordion/accordion.build.mjs +1 -1
  7. package/build-task/esm2022/containers/repeat-template.build.mjs +4 -2
  8. package/build-task/esm2022/containers/tabs/tabs.build.mjs +1 -1
  9. package/build-task/esm2022/data/form/form-field/form-field.build.mjs +1 -1
  10. package/build-task/esm2022/data/form/form.build.mjs +5 -2
  11. package/build-task/esm2022/data/list/list.build.mjs +1 -1
  12. package/build-task/esm2022/data/media-list/media-list.build.mjs +1 -1
  13. package/build-task/esm2022/data/table/table-column/table-column.build.mjs +1 -1
  14. package/build-task/esm2022/data/table/table.build.mjs +1 -1
  15. package/build-task/esm2022/dialogs/partial-dialog/partial-dialog.build.mjs +1 -1
  16. package/build-task/esm2022/input/file-upload/file-upload.build.mjs +1 -1
  17. package/build-task/esm2022/navigation/menu/menu.build.mjs +19 -2
  18. package/build-task/esm2022/navigation/popover/popover.build.mjs +1 -1
  19. package/build-task/esm2022/page/page-content/page-content.build.mjs +1 -1
  20. package/build-task/esm2022/page/page.build.mjs +3 -2
  21. package/build-task/esm2022/utils/utils.mjs +1 -1
  22. package/build-task/fesm2022/index.mjs +31 -6
  23. package/build-task/fesm2022/index.mjs.map +1 -1
  24. package/components/advanced/carousel/bundles/index.umd.js +26 -16
  25. package/components/advanced/carousel/carousel-template/carousel-template.directive.d.ts +2 -2
  26. package/components/advanced/carousel/carousel.directive.d.ts +2 -2
  27. package/components/advanced/carousel/esm2022/carousel-template/carousel-template.directive.mjs +12 -7
  28. package/components/advanced/carousel/esm2022/carousel.animator.mjs +3 -2
  29. package/components/advanced/carousel/esm2022/carousel.directive.mjs +12 -7
  30. package/components/advanced/carousel/esm2022/carousel.module.mjs +2 -2
  31. package/components/advanced/carousel/fesm2022/index.mjs +25 -14
  32. package/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
  33. package/components/advanced/login/bundles/index.umd.js +19 -13
  34. package/components/advanced/login/esm2022/login.component.mjs +17 -10
  35. package/components/advanced/login/esm2022/login.module.mjs +2 -2
  36. package/components/advanced/login/fesm2022/index.mjs +18 -11
  37. package/components/advanced/login/fesm2022/index.mjs.map +1 -1
  38. package/components/advanced/login/login.component.d.ts +2 -2
  39. package/components/advanced/marquee/bundles/index.umd.js +11 -6
  40. package/components/advanced/marquee/esm2022/marquee.directive.mjs +12 -7
  41. package/components/advanced/marquee/esm2022/marquee.module.mjs +2 -2
  42. package/components/advanced/marquee/fesm2022/index.mjs +13 -8
  43. package/components/advanced/marquee/fesm2022/index.mjs.map +1 -1
  44. package/components/advanced/marquee/marquee.directive.d.ts +2 -2
  45. package/components/base/bundles/index.umd.js +357 -270
  46. package/components/base/esm2022/components.module.mjs +2 -2
  47. package/components/base/esm2022/directives/show-in-device.directive.mjs +4 -4
  48. package/components/base/esm2022/pipes/custom-pipes.mjs +35 -34
  49. package/components/base/esm2022/pipes/image.pipe.mjs +2 -2
  50. package/components/base/esm2022/pipes/sanitize.pipe.mjs +3 -3
  51. package/components/base/esm2022/pipes/trust-as.pipe.mjs +3 -3
  52. package/components/base/esm2022/pipes/wm-pipe.mjs +3 -2
  53. package/components/base/esm2022/utils/data-utils.mjs +29 -28
  54. package/components/base/esm2022/utils/form-utils.mjs +48 -42
  55. package/components/base/esm2022/utils/live-utils.mjs +8 -7
  56. package/components/base/esm2022/utils/widget-utils.mjs +28 -27
  57. package/components/base/esm2022/widgets/common/base/base-container.component.mjs +8 -7
  58. package/components/base/esm2022/widgets/common/base/base-field-validations.mjs +24 -21
  59. package/components/base/esm2022/widgets/common/base/base.component.mjs +42 -16
  60. package/components/base/esm2022/widgets/common/base/dataset-aware-nav.component.mjs +52 -18
  61. package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +6 -5
  62. package/components/base/esm2022/widgets/common/base/stylable.component.mjs +3 -3
  63. package/components/base/esm2022/widgets/common/base/text-content.directive.mjs +3 -3
  64. package/components/base/esm2022/widgets/common/container/container.directive.mjs +12 -7
  65. package/components/base/esm2022/widgets/common/dialog/dialog.service.mjs +5 -4
  66. package/components/base/esm2022/widgets/common/item-template/item-template.directive.mjs +12 -7
  67. package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +3 -3
  68. package/components/base/esm2022/widgets/common/message/message.component.mjs +16 -10
  69. package/components/base/esm2022/widgets/common/partial/partial.directive.mjs +14 -8
  70. package/components/base/esm2022/widgets/common/partial-param/partial-param.directive.mjs +9 -8
  71. package/components/base/esm2022/widgets/common/pull-to-refresh/pull-to-refresh.mjs +1 -1
  72. package/components/base/esm2022/widgets/common/redraw/redrawable.directive.mjs +4 -4
  73. package/components/base/esm2022/widgets/common/repeat-template/repeat-template.directive.mjs +12 -7
  74. package/components/base/esm2022/widgets/common/smooth-scroll/smooth-scroll.directive.mjs +11 -10
  75. package/components/base/esm2022/widgets/framework/deviceview.mjs +1 -1
  76. package/components/base/esm2022/widgets/framework/property-change-handler.mjs +3 -2
  77. package/components/base/esm2022/widgets/framework/styler.mjs +1 -1
  78. package/components/base/esm2022/widgets/framework/widget-props.mjs +1 -1
  79. package/components/base/esm2022/widgets/framework/widget-proxy-provider.mjs +4 -3
  80. package/components/base/esm2022/widgets/framework/widget-registry.mjs +1 -1
  81. package/components/base/fesm2022/index.mjs +362 -272
  82. package/components/base/fesm2022/index.mjs.map +1 -1
  83. package/components/base/pipes/custom-pipes.d.ts +1 -1
  84. package/components/base/utils/widget-utils.d.ts +2 -2
  85. package/components/base/widgets/common/base/base-container.component.d.ts +1 -1
  86. package/components/base/widgets/common/base/base-field-validations.d.ts +1 -1
  87. package/components/base/widgets/common/base/base.component.d.ts +4 -2
  88. package/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +1 -1
  89. package/components/base/widgets/common/base/partial-container.directive.d.ts +1 -1
  90. package/components/base/widgets/common/container/container.directive.d.ts +2 -2
  91. package/components/base/widgets/common/item-template/item-template.directive.d.ts +2 -2
  92. package/components/base/widgets/common/message/message.component.d.ts +2 -2
  93. package/components/base/widgets/common/partial/partial.directive.d.ts +2 -2
  94. package/components/base/widgets/common/repeat-template/repeat-template.directive.d.ts +2 -2
  95. package/components/basic/default/anchor/anchor.component.d.ts +2 -2
  96. package/components/basic/default/audio/audio.component.d.ts +3 -2
  97. package/components/basic/default/bundles/index.umd.js +163 -119
  98. package/components/basic/default/esm2022/anchor/anchor.component.mjs +31 -27
  99. package/components/basic/default/esm2022/audio/audio.component.mjs +18 -11
  100. package/components/basic/default/esm2022/basic.module.mjs +2 -2
  101. package/components/basic/default/esm2022/html/html.directive.mjs +13 -8
  102. package/components/basic/default/esm2022/icon/icon.component.mjs +19 -14
  103. package/components/basic/default/esm2022/iframe/iframe.component.mjs +15 -9
  104. package/components/basic/default/esm2022/label/label.directive.mjs +15 -9
  105. package/components/basic/default/esm2022/picture/picture.directive.mjs +12 -7
  106. package/components/basic/default/esm2022/picture/picture.props.mjs +1 -1
  107. package/components/basic/default/esm2022/spinner/spinner.component.mjs +34 -30
  108. package/components/basic/default/esm2022/video/video.component.mjs +21 -17
  109. package/components/basic/default/fesm2022/index.mjs +162 -117
  110. package/components/basic/default/fesm2022/index.mjs.map +1 -1
  111. package/components/basic/default/html/html.directive.d.ts +2 -2
  112. package/components/basic/default/icon/icon.component.d.ts +2 -2
  113. package/components/basic/default/iframe/iframe.component.d.ts +2 -2
  114. package/components/basic/default/label/label.directive.d.ts +2 -2
  115. package/components/basic/default/picture/picture.directive.d.ts +2 -2
  116. package/components/basic/default/spinner/spinner.component.d.ts +2 -2
  117. package/components/basic/default/video/video.component.d.ts +2 -2
  118. package/components/basic/progress/bundles/index.umd.js +45 -32
  119. package/components/basic/progress/esm2022/progress-bar/progress-bar.component.mjs +24 -17
  120. package/components/basic/progress/esm2022/progress-circle/progress-circle.component.mjs +20 -12
  121. package/components/basic/progress/esm2022/progress.module.mjs +2 -2
  122. package/components/basic/progress/esm2022/utils.mjs +3 -3
  123. package/components/basic/progress/fesm2022/index.mjs +44 -30
  124. package/components/basic/progress/fesm2022/index.mjs.map +1 -1
  125. package/components/basic/progress/progress-bar/progress-bar.component.d.ts +2 -2
  126. package/components/basic/progress/progress-circle/progress-circle.component.d.ts +3 -2
  127. package/components/basic/rich-text-editor/bundles/index.umd.js +19 -13
  128. package/components/basic/rich-text-editor/esm2022/rich-text-editor.component.mjs +17 -10
  129. package/components/basic/rich-text-editor/esm2022/rich-text-editor.module.mjs +2 -2
  130. package/components/basic/rich-text-editor/fesm2022/index.mjs +18 -11
  131. package/components/basic/rich-text-editor/fesm2022/index.mjs.map +1 -1
  132. package/components/basic/rich-text-editor/rich-text-editor.component.d.ts +2 -2
  133. package/components/basic/search/bundles/index.umd.js +185 -175
  134. package/components/basic/search/esm2022/data-provider/data-provider.mjs +1 -1
  135. package/components/basic/search/esm2022/data-provider/local-data-provider.mjs +26 -23
  136. package/components/basic/search/esm2022/data-provider/remote-data-provider.mjs +12 -11
  137. package/components/basic/search/esm2022/scrollable.directive.mjs +3 -3
  138. package/components/basic/search/esm2022/search.component.mjs +147 -138
  139. package/components/basic/search/esm2022/search.module.mjs +2 -2
  140. package/components/basic/search/fesm2022/index.mjs +185 -174
  141. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  142. package/components/basic/search/search.component.d.ts +2 -2
  143. package/components/basic/tree/bundles/index.umd.js +23 -17
  144. package/components/basic/tree/esm2022/tree.component.mjs +21 -14
  145. package/components/basic/tree/esm2022/tree.module.mjs +2 -2
  146. package/components/basic/tree/fesm2022/index.mjs +22 -15
  147. package/components/basic/tree/fesm2022/index.mjs.map +1 -1
  148. package/components/basic/tree/tree.component.d.ts +2 -2
  149. package/components/chart/bundles/index.umd.js +97 -84
  150. package/components/chart/chart.component.d.ts +3 -3
  151. package/components/chart/chart.utils.d.ts +3 -3
  152. package/components/chart/esm2022/chart.component.mjs +82 -68
  153. package/components/chart/esm2022/chart.module.mjs +2 -2
  154. package/components/chart/esm2022/chart.utils.mjs +14 -13
  155. package/components/chart/fesm2022/index.mjs +95 -81
  156. package/components/chart/fesm2022/index.mjs.map +1 -1
  157. package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -2
  158. package/components/containers/accordion/accordion.directive.d.ts +2 -2
  159. package/components/containers/accordion/bundles/index.umd.js +51 -40
  160. package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +23 -17
  161. package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.props.mjs +4 -4
  162. package/components/containers/accordion/esm2022/accordion.directive.mjs +25 -19
  163. package/components/containers/accordion/esm2022/accordion.module.mjs +2 -2
  164. package/components/containers/accordion/fesm2022/index.mjs +50 -38
  165. package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  166. package/components/containers/layout-grid/bundles/index.umd.js +32 -17
  167. package/components/containers/layout-grid/esm2022/layout-grid-column/layout-grid-column.directive.mjs +13 -8
  168. package/components/containers/layout-grid/esm2022/layout-grid-row/layout-grid-row.directive.mjs +12 -7
  169. package/components/containers/layout-grid/esm2022/layout-grid.directive.mjs +12 -7
  170. package/components/containers/layout-grid/esm2022/layout-grid.module.mjs +2 -2
  171. package/components/containers/layout-grid/fesm2022/index.mjs +34 -19
  172. package/components/containers/layout-grid/fesm2022/index.mjs.map +1 -1
  173. package/components/containers/layout-grid/layout-grid-column/layout-grid-column.directive.d.ts +2 -2
  174. package/components/containers/layout-grid/layout-grid-row/layout-grid-row.directive.d.ts +2 -2
  175. package/components/containers/layout-grid/layout-grid.directive.d.ts +2 -2
  176. package/components/containers/linear-layout/bundles/index.umd.js +21 -11
  177. package/components/containers/linear-layout/esm2022/linear-layout-item/linear-layout-item.directive.mjs +12 -7
  178. package/components/containers/linear-layout/esm2022/linear-layout.directive.mjs +12 -7
  179. package/components/containers/linear-layout/esm2022/linear-layout.module.mjs +2 -2
  180. package/components/containers/linear-layout/fesm2022/index.mjs +23 -13
  181. package/components/containers/linear-layout/fesm2022/index.mjs.map +1 -1
  182. package/components/containers/linear-layout/linear-layout-item/linear-layout-item.directive.d.ts +2 -2
  183. package/components/containers/linear-layout/linear-layout.directive.d.ts +2 -2
  184. package/components/containers/panel/bundles/index.umd.js +85 -85
  185. package/components/containers/panel/esm2022/panel.component.mjs +83 -82
  186. package/components/containers/panel/esm2022/panel.module.mjs +2 -2
  187. package/components/containers/panel/fesm2022/index.mjs +84 -83
  188. package/components/containers/panel/fesm2022/index.mjs.map +1 -1
  189. package/components/containers/panel/panel.component.d.ts +3 -3
  190. package/components/containers/tabs/bundles/index.umd.js +74 -63
  191. package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +14 -8
  192. package/components/containers/tabs/esm2022/tab-pane/tab-pane.props.mjs +4 -4
  193. package/components/containers/tabs/esm2022/tabs.animator.mjs +1 -1
  194. package/components/containers/tabs/esm2022/tabs.component.mjs +57 -51
  195. package/components/containers/tabs/esm2022/tabs.module.mjs +2 -2
  196. package/components/containers/tabs/esm2022/tabs.props.mjs +1 -1
  197. package/components/containers/tabs/fesm2022/index.mjs +73 -61
  198. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  199. package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -2
  200. package/components/containers/tabs/tabs.component.d.ts +2 -2
  201. package/components/containers/tile/bundles/index.umd.js +11 -6
  202. package/components/containers/tile/esm2022/tile.directive.mjs +12 -7
  203. package/components/containers/tile/esm2022/tile.module.mjs +2 -2
  204. package/components/containers/tile/fesm2022/index.mjs +13 -8
  205. package/components/containers/tile/fesm2022/index.mjs.map +1 -1
  206. package/components/containers/tile/tile.directive.d.ts +2 -2
  207. package/components/containers/wizard/bundles/index.umd.js +102 -98
  208. package/components/containers/wizard/esm2022/wizard-step/wizard-step.directive.mjs +13 -8
  209. package/components/containers/wizard/esm2022/wizard.component.mjs +92 -93
  210. package/components/containers/wizard/esm2022/wizard.module.mjs +2 -2
  211. package/components/containers/wizard/fesm2022/index.mjs +104 -100
  212. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  213. package/components/containers/wizard/wizard-step/wizard-step.directive.d.ts +2 -2
  214. package/components/containers/wizard/wizard.component.d.ts +2 -2
  215. package/components/data/card/bundles/index.umd.js +70 -50
  216. package/components/data/card/card-actions/card-actions.directive.d.ts +2 -2
  217. package/components/data/card/card-content/card-content.component.d.ts +2 -2
  218. package/components/data/card/card-footer/card-footer.directive.d.ts +2 -2
  219. package/components/data/card/card.component.d.ts +2 -2
  220. package/components/data/card/esm2022/card-actions/card-actions.directive.mjs +12 -7
  221. package/components/data/card/esm2022/card-content/card-content.component.mjs +15 -9
  222. package/components/data/card/esm2022/card-footer/card-footer.directive.mjs +12 -7
  223. package/components/data/card/esm2022/card.component.mjs +38 -34
  224. package/components/data/card/esm2022/card.module.mjs +2 -2
  225. package/components/data/card/fesm2022/index.mjs +72 -52
  226. package/components/data/card/fesm2022/index.mjs.map +1 -1
  227. package/components/data/form/bundles/index.umd.js +202 -188
  228. package/components/data/form/esm2022/form-action/form-action.directive.mjs +15 -9
  229. package/components/data/form/esm2022/form-field/form-field.directive.mjs +21 -16
  230. package/components/data/form/esm2022/form-field/form-field.props.mjs +1 -1
  231. package/components/data/form/esm2022/form-widget.directive.mjs +4 -4
  232. package/components/data/form/esm2022/form.component.mjs +139 -135
  233. package/components/data/form/esm2022/form.module.mjs +2 -2
  234. package/components/data/form/esm2022/form.props.mjs +1 -1
  235. package/components/data/form/esm2022/live-actions/dependson.directive.mjs +4 -4
  236. package/components/data/form/esm2022/live-actions/live-actions.directive.mjs +4 -4
  237. package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +7 -6
  238. package/components/data/form/esm2022/live-form/live-form.directive.mjs +18 -15
  239. package/components/data/form/fesm2022/index.mjs +206 -191
  240. package/components/data/form/fesm2022/index.mjs.map +1 -1
  241. package/components/data/form/form-action/form-action.directive.d.ts +2 -2
  242. package/components/data/form/form-field/form-field.directive.d.ts +2 -2
  243. package/components/data/form/form.component.d.ts +4 -4
  244. package/components/data/form/live-form/live-form.directive.d.ts +1 -1
  245. package/components/data/list/bundles/index.umd.js +826 -818
  246. package/components/data/list/esm2022/list-item.directive.mjs +4 -4
  247. package/components/data/list/esm2022/list.animator.mjs +5 -3
  248. package/components/data/list/esm2022/list.component.mjs +818 -810
  249. package/components/data/list/esm2022/list.module.mjs +2 -2
  250. package/components/data/list/fesm2022/index.mjs +825 -816
  251. package/components/data/list/fesm2022/index.mjs.map +1 -1
  252. package/components/data/list/list.component.d.ts +55 -54
  253. package/components/data/live-table/bundles/index.umd.js +13 -7
  254. package/components/data/live-table/esm2022/live-table.component.mjs +14 -8
  255. package/components/data/live-table/esm2022/live-table.module.mjs +2 -2
  256. package/components/data/live-table/fesm2022/index.mjs +15 -9
  257. package/components/data/live-table/fesm2022/index.mjs.map +1 -1
  258. package/components/data/live-table/live-table.component.d.ts +2 -2
  259. package/components/data/pagination/bundles/index.umd.js +111 -109
  260. package/components/data/pagination/esm2022/pagination.component.mjs +109 -106
  261. package/components/data/pagination/esm2022/pagination.module.mjs +2 -2
  262. package/components/data/pagination/fesm2022/index.mjs +110 -107
  263. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  264. package/components/data/pagination/pagination.component.d.ts +2 -2
  265. package/components/data/table/bundles/index.umd.js +311 -268
  266. package/components/data/table/esm2022/table-action/table-action.directive.mjs +15 -9
  267. package/components/data/table/esm2022/table-column/table-column.directive.mjs +40 -25
  268. package/components/data/table/esm2022/table-column/table-column.props.mjs +2 -2
  269. package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +13 -8
  270. package/components/data/table/esm2022/table-cud.directive.mjs +10 -9
  271. package/components/data/table/esm2022/table-filter.directive.mjs +56 -58
  272. package/components/data/table/esm2022/table-row/table-row.directive.mjs +13 -8
  273. package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +14 -8
  274. package/components/data/table/esm2022/table.component.mjs +162 -149
  275. package/components/data/table/esm2022/table.module.mjs +2 -2
  276. package/components/data/table/esm2022/table.props.mjs +2 -2
  277. package/components/data/table/fesm2022/index.mjs +310 -266
  278. package/components/data/table/fesm2022/index.mjs.map +1 -1
  279. package/components/data/table/table-action/table-action.directive.d.ts +2 -2
  280. package/components/data/table/table-column/table-column.directive.d.ts +8 -8
  281. package/components/data/table/table-column-group/table-column-group.directive.d.ts +2 -2
  282. package/components/data/table/table-row/table-row.directive.d.ts +2 -2
  283. package/components/data/table/table-row-action/table-row-action.directive.d.ts +2 -2
  284. package/components/data/table/table.component.d.ts +4 -4
  285. package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +2 -2
  286. package/components/dialogs/alert-dialog/bundles/index.umd.js +15 -9
  287. package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +16 -10
  288. package/components/dialogs/alert-dialog/esm2022/alert-dialog.module.mjs +2 -2
  289. package/components/dialogs/alert-dialog/fesm2022/index.mjs +17 -11
  290. package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
  291. package/components/dialogs/confirm-dialog/bundles/index.umd.js +17 -11
  292. package/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +2 -2
  293. package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +18 -12
  294. package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.module.mjs +2 -2
  295. package/components/dialogs/confirm-dialog/fesm2022/index.mjs +19 -13
  296. package/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -1
  297. package/components/dialogs/default/base-dialog.d.ts +2 -2
  298. package/components/dialogs/default/bundles/index.umd.js +75 -71
  299. package/components/dialogs/default/dialog-footer/dialog-footer.directive.d.ts +2 -2
  300. package/components/dialogs/default/esm2022/base-dialog.mjs +14 -9
  301. package/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +4 -4
  302. package/components/dialogs/default/esm2022/dialog-footer/dialog-footer.directive.mjs +12 -7
  303. package/components/dialogs/default/esm2022/dialog-header/dialog-header.component.mjs +49 -55
  304. package/components/dialogs/default/esm2022/dialog.module.mjs +2 -2
  305. package/components/dialogs/default/fesm2022/index.mjs +76 -72
  306. package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  307. package/components/dialogs/design-dialog/bundles/index.umd.js +20 -14
  308. package/components/dialogs/design-dialog/dialog.component.d.ts +2 -2
  309. package/components/dialogs/design-dialog/esm2022/design-dialog.module.mjs +2 -2
  310. package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +21 -15
  311. package/components/dialogs/design-dialog/fesm2022/index.mjs +22 -16
  312. package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
  313. package/components/dialogs/iframe-dialog/bundles/index.umd.js +20 -14
  314. package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +21 -15
  315. package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.module.mjs +2 -2
  316. package/components/dialogs/iframe-dialog/fesm2022/index.mjs +22 -16
  317. package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
  318. package/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +2 -2
  319. package/components/dialogs/login-dialog/bundles/index.umd.js +4 -4
  320. package/components/dialogs/login-dialog/esm2022/login-dialog.directive.mjs +4 -4
  321. package/components/dialogs/login-dialog/esm2022/login-dialog.module.mjs +2 -2
  322. package/components/dialogs/login-dialog/fesm2022/index.mjs +4 -4
  323. package/components/dialogs/login-dialog/fesm2022/index.mjs.map +1 -1
  324. package/components/dialogs/partial-dialog/bundles/index.umd.js +16 -10
  325. package/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +17 -11
  326. package/components/dialogs/partial-dialog/esm2022/partial-dialog.module.mjs +2 -2
  327. package/components/dialogs/partial-dialog/fesm2022/index.mjs +18 -12
  328. package/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
  329. package/components/dialogs/partial-dialog/partial-dialog.component.d.ts +2 -2
  330. package/components/input/calendar/bundles/index.umd.js +46 -38
  331. package/components/input/calendar/calendar.component.d.ts +2 -2
  332. package/components/input/calendar/esm2022/calendar.component.mjs +44 -35
  333. package/components/input/calendar/esm2022/calendar.module.mjs +2 -2
  334. package/components/input/calendar/fesm2022/index.mjs +45 -36
  335. package/components/input/calendar/fesm2022/index.mjs.map +1 -1
  336. package/components/input/chips/bundles/index.umd.js +69 -61
  337. package/components/input/chips/chips.component.d.ts +3 -3
  338. package/components/input/chips/esm2022/chips.component.mjs +67 -58
  339. package/components/input/chips/esm2022/chips.module.mjs +2 -2
  340. package/components/input/chips/fesm2022/index.mjs +67 -58
  341. package/components/input/chips/fesm2022/index.mjs.map +1 -1
  342. package/components/input/color-picker/bundles/index.umd.js +24 -11
  343. package/components/input/color-picker/color-picker.component.d.ts +2 -2
  344. package/components/input/color-picker/esm2022/color-picker.component.mjs +25 -12
  345. package/components/input/color-picker/esm2022/color-picker.module.mjs +2 -2
  346. package/components/input/color-picker/fesm2022/index.mjs +25 -12
  347. package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
  348. package/components/input/currency/bundles/index.umd.js +18 -11
  349. package/components/input/currency/currency.component.d.ts +2 -2
  350. package/components/input/currency/esm2022/currency.component.mjs +19 -12
  351. package/components/input/currency/esm2022/currency.module.mjs +2 -2
  352. package/components/input/currency/fesm2022/index.mjs +19 -12
  353. package/components/input/currency/fesm2022/index.mjs.map +1 -1
  354. package/components/input/default/base-form.component.d.ts +3 -3
  355. package/components/input/default/bundles/index.umd.js +600 -482
  356. package/components/input/default/button/button.component.d.ts +2 -2
  357. package/components/input/default/button-group/button-group.directive.d.ts +2 -2
  358. package/components/input/default/checkbox/checkbox.component.d.ts +3 -2
  359. package/components/input/default/checkboxset/checkboxset.component.d.ts +2 -2
  360. package/components/input/default/composite/composite.directive.d.ts +2 -2
  361. package/components/input/default/dataset-aware-form.component.d.ts +4 -4
  362. package/components/input/default/esm2022/base-form-custom.component.mjs +3 -3
  363. package/components/input/default/esm2022/base-form.component.mjs +17 -11
  364. package/components/input/default/esm2022/button/button.component.mjs +32 -28
  365. package/components/input/default/esm2022/button-group/button-group.directive.mjs +12 -7
  366. package/components/input/default/esm2022/caption-position.directive.mjs +6 -6
  367. package/components/input/default/esm2022/checkbox/checkbox.component.mjs +24 -15
  368. package/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +107 -103
  369. package/components/input/default/esm2022/composite/composite.directive.mjs +12 -7
  370. package/components/input/default/esm2022/dataset-aware-form.component.mjs +32 -26
  371. package/components/input/default/esm2022/input.module.mjs +2 -2
  372. package/components/input/default/esm2022/number/number.component.mjs +17 -10
  373. package/components/input/default/esm2022/radioset/radioset.component.mjs +105 -102
  374. package/components/input/default/esm2022/select/select.component.mjs +69 -68
  375. package/components/input/default/esm2022/switch/switch.component.mjs +38 -31
  376. package/components/input/default/esm2022/text/base/base-input.mjs +16 -10
  377. package/components/input/default/esm2022/text/calendar/input-calendar.component.mjs +21 -11
  378. package/components/input/default/esm2022/text/color/input-color.component.mjs +21 -11
  379. package/components/input/default/esm2022/text/email/input-email.component.mjs +20 -11
  380. package/components/input/default/esm2022/text/locale/number-locale.mjs +35 -24
  381. package/components/input/default/esm2022/text/number/input-number.component.mjs +21 -12
  382. package/components/input/default/esm2022/text/text/input-text.component.mjs +20 -11
  383. package/components/input/default/esm2022/textarea/textarea.component.mjs +21 -12
  384. package/components/input/default/fesm2022/index.mjs +603 -483
  385. package/components/input/default/fesm2022/index.mjs.map +1 -1
  386. package/components/input/default/number/number.component.d.ts +2 -2
  387. package/components/input/default/radioset/radioset.component.d.ts +2 -2
  388. package/components/input/default/select/select.component.d.ts +3 -4
  389. package/components/input/default/switch/switch.component.d.ts +2 -2
  390. package/components/input/default/text/base/base-input.d.ts +2 -2
  391. package/components/input/default/text/calendar/input-calendar.component.d.ts +2 -2
  392. package/components/input/default/text/color/input-color.component.d.ts +2 -2
  393. package/components/input/default/text/email/input-email.component.d.ts +2 -2
  394. package/components/input/default/text/locale/number-locale.d.ts +1 -1
  395. package/components/input/default/text/number/input-number.component.d.ts +2 -2
  396. package/components/input/default/text/text/input-text.component.d.ts +2 -2
  397. package/components/input/default/textarea/textarea.component.d.ts +2 -2
  398. package/components/input/epoch/base-date-time.component.d.ts +2 -2
  399. package/components/input/epoch/bundles/index.umd.js +221 -162
  400. package/components/input/epoch/date/date.component.d.ts +3 -2
  401. package/components/input/epoch/date-time/date-time.component.d.ts +2 -2
  402. package/components/input/epoch/esm2022/base-date-time.component.mjs +45 -36
  403. package/components/input/epoch/esm2022/date/date.component.mjs +48 -23
  404. package/components/input/epoch/esm2022/date/date.props.mjs +2 -2
  405. package/components/input/epoch/esm2022/date/imaskUtil.mjs +8 -2
  406. package/components/input/epoch/esm2022/date-time/date-time-picker.component.mjs +42 -41
  407. package/components/input/epoch/esm2022/date-time/date-time.component.mjs +47 -36
  408. package/components/input/epoch/esm2022/epoch.module.mjs +2 -2
  409. package/components/input/epoch/esm2022/picker/picker.component.mjs +7 -5
  410. package/components/input/epoch/esm2022/time/time.component.mjs +33 -23
  411. package/components/input/epoch/fesm2022/index.mjs +219 -159
  412. package/components/input/epoch/fesm2022/index.mjs.map +1 -1
  413. package/components/input/epoch/time/time.component.d.ts +2 -2
  414. package/components/input/file-upload/bundles/index.umd.js +133 -135
  415. package/components/input/file-upload/esm2022/file-upload.component.mjs +131 -132
  416. package/components/input/file-upload/esm2022/file-upload.module.mjs +2 -2
  417. package/components/input/file-upload/fesm2022/index.mjs +132 -133
  418. package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  419. package/components/input/file-upload/file-upload.component.d.ts +2 -2
  420. package/components/input/rating/bundles/index.umd.js +57 -50
  421. package/components/input/rating/esm2022/rating.component.mjs +55 -47
  422. package/components/input/rating/esm2022/rating.module.mjs +2 -2
  423. package/components/input/rating/fesm2022/index.mjs +55 -47
  424. package/components/input/rating/fesm2022/index.mjs.map +1 -1
  425. package/components/input/rating/rating.component.d.ts +2 -2
  426. package/components/input/slider/bundles/index.umd.js +21 -12
  427. package/components/input/slider/esm2022/slider.component.mjs +22 -13
  428. package/components/input/slider/esm2022/slider.module.mjs +2 -2
  429. package/components/input/slider/fesm2022/index.mjs +22 -13
  430. package/components/input/slider/fesm2022/index.mjs.map +1 -1
  431. package/components/input/slider/slider.component.d.ts +2 -2
  432. package/components/navigation/breadcrumb/breadcrumb.component.d.ts +2 -2
  433. package/components/navigation/breadcrumb/bundles/index.umd.js +33 -28
  434. package/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +34 -29
  435. package/components/navigation/breadcrumb/esm2022/breadcrumb.module.mjs +2 -2
  436. package/components/navigation/breadcrumb/fesm2022/index.mjs +35 -30
  437. package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
  438. package/components/navigation/menu/bundles/index.umd.js +154 -137
  439. package/components/navigation/menu/esm2022/menu-adapator.component.mjs +13 -7
  440. package/components/navigation/menu/esm2022/menu-dropdown/menu-dropdown.component.mjs +5 -4
  441. package/components/navigation/menu/esm2022/menu-dropdown-item/menu-dropdown-item.component.mjs +27 -26
  442. package/components/navigation/menu/esm2022/menu.component.mjs +44 -40
  443. package/components/navigation/menu/esm2022/menu.module.mjs +2 -2
  444. package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +12 -7
  445. package/components/navigation/menu/esm2022/nav/nav.component.mjs +60 -56
  446. package/components/navigation/menu/esm2022/nav/navigation-control.directive.mjs +3 -3
  447. package/components/navigation/menu/fesm2022/index.mjs +153 -135
  448. package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  449. package/components/navigation/menu/menu-adapator.component.d.ts +1 -1
  450. package/components/navigation/menu/menu-dropdown-item/menu-dropdown-item.component.d.ts +12 -1
  451. package/components/navigation/menu/menu.component.d.ts +2 -2
  452. package/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +2 -2
  453. package/components/navigation/menu/nav/nav.component.d.ts +2 -2
  454. package/components/navigation/navbar/bundles/index.umd.js +29 -22
  455. package/components/navigation/navbar/esm2022/navbar.component.mjs +30 -23
  456. package/components/navigation/navbar/esm2022/navbar.module.mjs +2 -2
  457. package/components/navigation/navbar/fesm2022/index.mjs +31 -24
  458. package/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
  459. package/components/navigation/navbar/navbar.component.d.ts +2 -2
  460. package/components/navigation/popover/bundles/index.umd.js +18 -11
  461. package/components/navigation/popover/esm2022/popover.component.mjs +19 -12
  462. package/components/navigation/popover/esm2022/popover.module.mjs +2 -2
  463. package/components/navigation/popover/fesm2022/index.mjs +20 -13
  464. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  465. package/components/navigation/popover/popover.component.d.ts +2 -2
  466. package/components/page/default/bundles/index.umd.js +63 -31
  467. package/components/page/default/content/content.component.d.ts +2 -2
  468. package/components/page/default/esm2022/content/content.component.mjs +13 -7
  469. package/components/page/default/esm2022/layout.directive.mjs +12 -7
  470. package/components/page/default/esm2022/page-content/page-content.component.mjs +13 -7
  471. package/components/page/default/esm2022/page.directive.mjs +12 -7
  472. package/components/page/default/esm2022/page.module.mjs +2 -2
  473. package/components/page/default/esm2022/router-outlet.directive.mjs +12 -7
  474. package/components/page/default/esm2022/spa-page.directive.mjs +12 -7
  475. package/components/page/default/fesm2022/index.mjs +65 -33
  476. package/components/page/default/fesm2022/index.mjs.map +1 -1
  477. package/components/page/default/layout.directive.d.ts +2 -2
  478. package/components/page/default/page-content/page-content.component.d.ts +2 -2
  479. package/components/page/default/page.directive.d.ts +2 -2
  480. package/components/page/default/router-outlet.directive.d.ts +2 -2
  481. package/components/page/default/spa-page.directive.d.ts +2 -2
  482. package/components/page/footer/bundles/index.umd.js +11 -6
  483. package/components/page/footer/esm2022/footer.directive.mjs +12 -7
  484. package/components/page/footer/esm2022/footer.module.mjs +2 -2
  485. package/components/page/footer/fesm2022/index.mjs +13 -8
  486. package/components/page/footer/fesm2022/index.mjs.map +1 -1
  487. package/components/page/footer/footer.directive.d.ts +2 -2
  488. package/components/page/header/bundles/index.umd.js +12 -6
  489. package/components/page/header/esm2022/header.component.mjs +13 -7
  490. package/components/page/header/esm2022/header.module.mjs +2 -2
  491. package/components/page/header/fesm2022/index.mjs +14 -8
  492. package/components/page/header/fesm2022/index.mjs.map +1 -1
  493. package/components/page/header/header.component.d.ts +2 -2
  494. package/components/page/left-panel/bundles/index.umd.js +12 -7
  495. package/components/page/left-panel/esm2022/left-panel.animator.mjs +1 -1
  496. package/components/page/left-panel/esm2022/left-panel.directive.mjs +13 -8
  497. package/components/page/left-panel/esm2022/left-panel.module.mjs +2 -2
  498. package/components/page/left-panel/fesm2022/index.mjs +14 -9
  499. package/components/page/left-panel/fesm2022/index.mjs.map +1 -1
  500. package/components/page/left-panel/left-panel.directive.d.ts +2 -2
  501. package/components/page/right-panel/bundles/index.umd.js +11 -6
  502. package/components/page/right-panel/esm2022/right-panel.directive.mjs +12 -7
  503. package/components/page/right-panel/esm2022/right-panel.module.mjs +2 -2
  504. package/components/page/right-panel/fesm2022/index.mjs +13 -8
  505. package/components/page/right-panel/fesm2022/index.mjs.map +1 -1
  506. package/components/page/right-panel/right-panel.directive.d.ts +2 -2
  507. package/components/page/top-nav/bundles/index.umd.js +11 -6
  508. package/components/page/top-nav/esm2022/top-nav.directive.mjs +12 -7
  509. package/components/page/top-nav/esm2022/top-nav.module.mjs +2 -2
  510. package/components/page/top-nav/fesm2022/index.mjs +13 -8
  511. package/components/page/top-nav/fesm2022/index.mjs.map +1 -1
  512. package/components/page/top-nav/top-nav.directive.d.ts +2 -2
  513. package/components/prefab/bundles/index.umd.js +28 -18
  514. package/components/prefab/esm2022/prefab-container/prefab-container.directive.mjs +14 -8
  515. package/components/prefab/esm2022/prefab.directive.mjs +15 -9
  516. package/components/prefab/esm2022/prefab.module.mjs +2 -2
  517. package/components/prefab/fesm2022/index.mjs +26 -15
  518. package/components/prefab/fesm2022/index.mjs.map +1 -1
  519. package/components/prefab/prefab-container/prefab-container.directive.d.ts +2 -2
  520. package/components/prefab/prefab.directive.d.ts +2 -2
  521. package/core/bundles/index.umd.js +135 -146
  522. package/core/esm2022/core.module.mjs +2 -2
  523. package/core/esm2022/public_api.mjs +2 -2
  524. package/core/esm2022/services/constant.service.mjs +2 -2
  525. package/core/esm2022/services/field-type.service.mjs +5 -4
  526. package/core/esm2022/services/field-widget.service.mjs +5 -4
  527. package/core/esm2022/services/pagination.service.mjs +8 -7
  528. package/core/esm2022/services/script-loader.service.mjs +3 -3
  529. package/core/esm2022/services/state-persistence.service.mjs +18 -17
  530. package/core/esm2022/services/user-custom-pipe-manager.service.mjs +2 -2
  531. package/core/esm2022/services/utils.service.mjs +5 -4
  532. package/core/esm2022/services/viewport.service.mjs +5 -4
  533. package/core/esm2022/utils/build-utils.mjs +5 -4
  534. package/core/esm2022/utils/dom.mjs +1 -1
  535. package/core/esm2022/utils/event-notifier.mjs +1 -1
  536. package/core/esm2022/utils/expression-parser.mjs +6 -5
  537. package/core/esm2022/utils/id-generator.mjs +1 -1
  538. package/core/esm2022/utils/lru-cache.mjs +3 -2
  539. package/core/esm2022/utils/utils.mjs +79 -82
  540. package/core/esm2022/utils/watcher.mjs +9 -7
  541. package/core/esm2022/utils/wm-project-properties.mjs +1 -1
  542. package/core/fesm2022/index.mjs +134 -140
  543. package/core/fesm2022/index.mjs.map +1 -1
  544. package/core/public_api.d.ts +1 -1
  545. package/core/services/pagination.service.d.ts +1 -1
  546. package/core/utils/utils.d.ts +5 -9
  547. package/http/bundles/index.umd.js +10 -10
  548. package/http/esm2022/http-service.module.mjs +2 -2
  549. package/http/esm2022/http.service.mjs +7 -6
  550. package/http/esm2022/wm-http-request.mjs +1 -1
  551. package/http/esm2022/wm-http-response.mjs +1 -1
  552. package/http/fesm2022/index.mjs +7 -6
  553. package/http/fesm2022/index.mjs.map +1 -1
  554. package/locales/angular/global/af-na.js +4 -4
  555. package/locales/angular/global/af.js +4 -4
  556. package/locales/angular/global/agq.js +4 -4
  557. package/locales/angular/global/ak.js +4 -4
  558. package/locales/angular/global/am.js +4 -4
  559. package/locales/angular/global/ar-ae.js +4 -4
  560. package/locales/angular/global/ar-bh.js +4 -4
  561. package/locales/angular/global/ar-dj.js +4 -4
  562. package/locales/angular/global/ar-dz.js +4 -4
  563. package/locales/angular/global/ar-eg.js +4 -4
  564. package/locales/angular/global/ar-eh.js +4 -4
  565. package/locales/angular/global/ar-er.js +4 -4
  566. package/locales/angular/global/ar-il.js +4 -4
  567. package/locales/angular/global/ar-iq.js +4 -4
  568. package/locales/angular/global/ar-jo.js +4 -4
  569. package/locales/angular/global/ar-km.js +4 -4
  570. package/locales/angular/global/ar-kw.js +4 -4
  571. package/locales/angular/global/ar-lb.js +4 -4
  572. package/locales/angular/global/ar-ly.js +4 -4
  573. package/locales/angular/global/ar-ma.js +4 -4
  574. package/locales/angular/global/ar-mr.js +4 -4
  575. package/locales/angular/global/ar-om.js +4 -4
  576. package/locales/angular/global/ar-ps.js +4 -4
  577. package/locales/angular/global/ar-qa.js +4 -4
  578. package/locales/angular/global/ar-sa.js +4 -4
  579. package/locales/angular/global/ar-sd.js +4 -4
  580. package/locales/angular/global/ar-so.js +4 -4
  581. package/locales/angular/global/ar-ss.js +4 -4
  582. package/locales/angular/global/ar-sy.js +4 -4
  583. package/locales/angular/global/ar-td.js +4 -4
  584. package/locales/angular/global/ar-tn.js +4 -4
  585. package/locales/angular/global/ar-ye.js +4 -4
  586. package/locales/angular/global/ar.js +4 -4
  587. package/locales/angular/global/as.js +4 -4
  588. package/locales/angular/global/asa.js +4 -4
  589. package/locales/angular/global/ast.js +4 -4
  590. package/locales/angular/global/az-cyrl.js +4 -4
  591. package/locales/angular/global/az-latn.js +4 -4
  592. package/locales/angular/global/az.js +4 -4
  593. package/locales/angular/global/bas.js +4 -4
  594. package/locales/angular/global/be-tarask.js +4 -4
  595. package/locales/angular/global/be.js +4 -4
  596. package/locales/angular/global/bem.js +4 -4
  597. package/locales/angular/global/bez.js +4 -4
  598. package/locales/angular/global/bg.js +4 -4
  599. package/locales/angular/global/bm.js +4 -4
  600. package/locales/angular/global/bn-in.js +4 -4
  601. package/locales/angular/global/bn.js +4 -4
  602. package/locales/angular/global/bo-in.js +4 -4
  603. package/locales/angular/global/bo.js +4 -4
  604. package/locales/angular/global/br.js +4 -4
  605. package/locales/angular/global/brx.js +4 -4
  606. package/locales/angular/global/bs-cyrl.js +4 -4
  607. package/locales/angular/global/bs-latn.js +4 -4
  608. package/locales/angular/global/bs.js +4 -4
  609. package/locales/angular/global/ca-ad.js +4 -4
  610. package/locales/angular/global/ca-es-valencia.js +4 -4
  611. package/locales/angular/global/ca-fr.js +4 -4
  612. package/locales/angular/global/ca-it.js +4 -4
  613. package/locales/angular/global/ca.js +4 -4
  614. package/locales/angular/global/ccp-in.js +4 -4
  615. package/locales/angular/global/ccp.js +4 -4
  616. package/locales/angular/global/ce.js +4 -4
  617. package/locales/angular/global/ceb.js +4 -4
  618. package/locales/angular/global/cgg.js +4 -4
  619. package/locales/angular/global/chr.js +4 -4
  620. package/locales/angular/global/ckb-ir.js +4 -4
  621. package/locales/angular/global/ckb.js +4 -4
  622. package/locales/angular/global/cs.js +4 -4
  623. package/locales/angular/global/cy.js +4 -4
  624. package/locales/angular/global/da-gl.js +4 -4
  625. package/locales/angular/global/da.js +4 -4
  626. package/locales/angular/global/dav.js +4 -4
  627. package/locales/angular/global/de-at.js +4 -4
  628. package/locales/angular/global/de-be.js +4 -4
  629. package/locales/angular/global/de-ch.js +4 -4
  630. package/locales/angular/global/de-it.js +4 -4
  631. package/locales/angular/global/de-li.js +4 -4
  632. package/locales/angular/global/de-lu.js +4 -4
  633. package/locales/angular/global/de.js +4 -4
  634. package/locales/angular/global/dje.js +4 -4
  635. package/locales/angular/global/doi.js +4 -4
  636. package/locales/angular/global/dsb.js +4 -4
  637. package/locales/angular/global/dua.js +4 -4
  638. package/locales/angular/global/dyo.js +4 -4
  639. package/locales/angular/global/dz.js +4 -4
  640. package/locales/angular/global/ebu.js +4 -4
  641. package/locales/angular/global/ee-tg.js +4 -4
  642. package/locales/angular/global/ee.js +4 -4
  643. package/locales/angular/global/el-cy.js +4 -4
  644. package/locales/angular/global/el.js +4 -4
  645. package/locales/angular/global/en-001.js +4 -4
  646. package/locales/angular/global/en-150.js +4 -4
  647. package/locales/angular/global/en-ae.js +4 -4
  648. package/locales/angular/global/en-ag.js +4 -4
  649. package/locales/angular/global/en-ai.js +4 -4
  650. package/locales/angular/global/en-as.js +4 -4
  651. package/locales/angular/global/en-at.js +4 -4
  652. package/locales/angular/global/en-au.js +4 -4
  653. package/locales/angular/global/en-bb.js +4 -4
  654. package/locales/angular/global/en-be.js +4 -4
  655. package/locales/angular/global/en-bi.js +4 -4
  656. package/locales/angular/global/en-bm.js +4 -4
  657. package/locales/angular/global/en-bs.js +4 -4
  658. package/locales/angular/global/en-bw.js +4 -4
  659. package/locales/angular/global/en-bz.js +4 -4
  660. package/locales/angular/global/en-ca.js +4 -4
  661. package/locales/angular/global/en-cc.js +4 -4
  662. package/locales/angular/global/en-ch.js +4 -4
  663. package/locales/angular/global/en-ck.js +4 -4
  664. package/locales/angular/global/en-cm.js +4 -4
  665. package/locales/angular/global/en-cx.js +4 -4
  666. package/locales/angular/global/en-cy.js +4 -4
  667. package/locales/angular/global/en-de.js +4 -4
  668. package/locales/angular/global/en-dg.js +4 -4
  669. package/locales/angular/global/en-dk.js +4 -4
  670. package/locales/angular/global/en-dm.js +4 -4
  671. package/locales/angular/global/en-er.js +4 -4
  672. package/locales/angular/global/en-fi.js +4 -4
  673. package/locales/angular/global/en-fj.js +4 -4
  674. package/locales/angular/global/en-fk.js +4 -4
  675. package/locales/angular/global/en-fm.js +4 -4
  676. package/locales/angular/global/en-gb.js +4 -4
  677. package/locales/angular/global/en-gd.js +4 -4
  678. package/locales/angular/global/en-gg.js +4 -4
  679. package/locales/angular/global/en-gh.js +4 -4
  680. package/locales/angular/global/en-gi.js +4 -4
  681. package/locales/angular/global/en-gm.js +4 -4
  682. package/locales/angular/global/en-gu.js +4 -4
  683. package/locales/angular/global/en-gy.js +4 -4
  684. package/locales/angular/global/en-hk.js +4 -4
  685. package/locales/angular/global/en-ie.js +4 -4
  686. package/locales/angular/global/en-il.js +4 -4
  687. package/locales/angular/global/en-im.js +4 -4
  688. package/locales/angular/global/en-in.js +4 -4
  689. package/locales/angular/global/en-io.js +4 -4
  690. package/locales/angular/global/en-je.js +4 -4
  691. package/locales/angular/global/en-jm.js +4 -4
  692. package/locales/angular/global/en-ke.js +4 -4
  693. package/locales/angular/global/en-ki.js +4 -4
  694. package/locales/angular/global/en-kn.js +4 -4
  695. package/locales/angular/global/en-ky.js +4 -4
  696. package/locales/angular/global/en-lc.js +4 -4
  697. package/locales/angular/global/en-lr.js +4 -4
  698. package/locales/angular/global/en-ls.js +4 -4
  699. package/locales/angular/global/en-mg.js +4 -4
  700. package/locales/angular/global/en-mh.js +4 -4
  701. package/locales/angular/global/en-mo.js +4 -4
  702. package/locales/angular/global/en-mp.js +4 -4
  703. package/locales/angular/global/en-ms.js +4 -4
  704. package/locales/angular/global/en-mt.js +4 -4
  705. package/locales/angular/global/en-mu.js +4 -4
  706. package/locales/angular/global/en-mv.js +4 -4
  707. package/locales/angular/global/en-mw.js +4 -4
  708. package/locales/angular/global/en-my.js +4 -4
  709. package/locales/angular/global/en-na.js +4 -4
  710. package/locales/angular/global/en-nf.js +4 -4
  711. package/locales/angular/global/en-ng.js +4 -4
  712. package/locales/angular/global/en-nl.js +4 -4
  713. package/locales/angular/global/en-nr.js +4 -4
  714. package/locales/angular/global/en-nu.js +4 -4
  715. package/locales/angular/global/en-nz.js +4 -4
  716. package/locales/angular/global/en-pg.js +4 -4
  717. package/locales/angular/global/en-ph.js +4 -4
  718. package/locales/angular/global/en-pk.js +4 -4
  719. package/locales/angular/global/en-pn.js +4 -4
  720. package/locales/angular/global/en-pr.js +4 -4
  721. package/locales/angular/global/en-pw.js +4 -4
  722. package/locales/angular/global/en-rw.js +4 -4
  723. package/locales/angular/global/en-sb.js +4 -4
  724. package/locales/angular/global/en-sc.js +4 -4
  725. package/locales/angular/global/en-sd.js +4 -4
  726. package/locales/angular/global/en-se.js +4 -4
  727. package/locales/angular/global/en-sg.js +4 -4
  728. package/locales/angular/global/en-sh.js +4 -4
  729. package/locales/angular/global/en-si.js +4 -4
  730. package/locales/angular/global/en-sl.js +4 -4
  731. package/locales/angular/global/en-ss.js +4 -4
  732. package/locales/angular/global/en-sx.js +4 -4
  733. package/locales/angular/global/en-sz.js +4 -4
  734. package/locales/angular/global/en-tc.js +4 -4
  735. package/locales/angular/global/en-tk.js +4 -4
  736. package/locales/angular/global/en-to.js +4 -4
  737. package/locales/angular/global/en-tt.js +4 -4
  738. package/locales/angular/global/en-tv.js +4 -4
  739. package/locales/angular/global/en-tz.js +4 -4
  740. package/locales/angular/global/en-ug.js +4 -4
  741. package/locales/angular/global/en-um.js +4 -4
  742. package/locales/angular/global/en-vc.js +4 -4
  743. package/locales/angular/global/en-vg.js +4 -4
  744. package/locales/angular/global/en-vi.js +4 -4
  745. package/locales/angular/global/en-vu.js +4 -4
  746. package/locales/angular/global/en-ws.js +4 -4
  747. package/locales/angular/global/en-za.js +4 -4
  748. package/locales/angular/global/en-zm.js +4 -4
  749. package/locales/angular/global/en-zw.js +4 -4
  750. package/locales/angular/global/en.js +4 -4
  751. package/locales/angular/global/eo.js +4 -4
  752. package/locales/angular/global/es-419.js +4 -4
  753. package/locales/angular/global/es-ar.js +4 -4
  754. package/locales/angular/global/es-bo.js +4 -4
  755. package/locales/angular/global/es-br.js +4 -4
  756. package/locales/angular/global/es-bz.js +4 -4
  757. package/locales/angular/global/es-cl.js +4 -4
  758. package/locales/angular/global/es-co.js +4 -4
  759. package/locales/angular/global/es-cr.js +4 -4
  760. package/locales/angular/global/es-cu.js +4 -4
  761. package/locales/angular/global/es-do.js +4 -4
  762. package/locales/angular/global/es-ea.js +4 -4
  763. package/locales/angular/global/es-ec.js +4 -4
  764. package/locales/angular/global/es-gq.js +4 -4
  765. package/locales/angular/global/es-gt.js +4 -4
  766. package/locales/angular/global/es-hn.js +4 -4
  767. package/locales/angular/global/es-ic.js +4 -4
  768. package/locales/angular/global/es-mx.js +4 -4
  769. package/locales/angular/global/es-ni.js +4 -4
  770. package/locales/angular/global/es-pa.js +4 -4
  771. package/locales/angular/global/es-pe.js +4 -4
  772. package/locales/angular/global/es-ph.js +4 -4
  773. package/locales/angular/global/es-pr.js +4 -4
  774. package/locales/angular/global/es-py.js +4 -4
  775. package/locales/angular/global/es-sv.js +4 -4
  776. package/locales/angular/global/es-us.js +4 -4
  777. package/locales/angular/global/es-uy.js +4 -4
  778. package/locales/angular/global/es-ve.js +4 -4
  779. package/locales/angular/global/es.js +4 -4
  780. package/locales/angular/global/et.js +4 -4
  781. package/locales/angular/global/eu.js +4 -4
  782. package/locales/angular/global/ewo.js +4 -4
  783. package/locales/angular/global/fa-af.js +4 -4
  784. package/locales/angular/global/fa.js +4 -4
  785. package/locales/angular/global/ff-adlm-bf.js +4 -4
  786. package/locales/angular/global/ff-adlm-cm.js +4 -4
  787. package/locales/angular/global/ff-adlm-gh.js +4 -4
  788. package/locales/angular/global/ff-adlm-gm.js +4 -4
  789. package/locales/angular/global/ff-adlm-gw.js +4 -4
  790. package/locales/angular/global/ff-adlm-lr.js +4 -4
  791. package/locales/angular/global/ff-adlm-mr.js +4 -4
  792. package/locales/angular/global/ff-adlm-ne.js +4 -4
  793. package/locales/angular/global/ff-adlm-ng.js +4 -4
  794. package/locales/angular/global/ff-adlm-sl.js +4 -4
  795. package/locales/angular/global/ff-adlm-sn.js +4 -4
  796. package/locales/angular/global/ff-adlm.js +4 -4
  797. package/locales/angular/global/ff-cm.js +58 -44
  798. package/locales/angular/global/ff-gn.js +58 -44
  799. package/locales/angular/global/ff-latn-bf.js +4 -4
  800. package/locales/angular/global/ff-latn-cm.js +4 -4
  801. package/locales/angular/global/ff-latn-gh.js +4 -4
  802. package/locales/angular/global/ff-latn-gm.js +4 -4
  803. package/locales/angular/global/ff-latn-gn.js +4 -4
  804. package/locales/angular/global/ff-latn-gw.js +4 -4
  805. package/locales/angular/global/ff-latn-lr.js +4 -4
  806. package/locales/angular/global/ff-latn-mr.js +4 -4
  807. package/locales/angular/global/ff-latn-ne.js +4 -4
  808. package/locales/angular/global/ff-latn-ng.js +4 -4
  809. package/locales/angular/global/ff-latn-sl.js +4 -4
  810. package/locales/angular/global/ff-latn.js +4 -4
  811. package/locales/angular/global/ff-mr.js +58 -44
  812. package/locales/angular/global/ff.js +4 -4
  813. package/locales/angular/global/fi.js +4 -4
  814. package/locales/angular/global/fil.js +4 -4
  815. package/locales/angular/global/fo-dk.js +4 -4
  816. package/locales/angular/global/fo.js +4 -4
  817. package/locales/angular/global/fr-be.js +4 -4
  818. package/locales/angular/global/fr-bf.js +4 -4
  819. package/locales/angular/global/fr-bi.js +4 -4
  820. package/locales/angular/global/fr-bj.js +4 -4
  821. package/locales/angular/global/fr-bl.js +4 -4
  822. package/locales/angular/global/fr-ca.js +4 -4
  823. package/locales/angular/global/fr-cd.js +4 -4
  824. package/locales/angular/global/fr-cf.js +4 -4
  825. package/locales/angular/global/fr-cg.js +4 -4
  826. package/locales/angular/global/fr-ch.js +4 -4
  827. package/locales/angular/global/fr-ci.js +4 -4
  828. package/locales/angular/global/fr-cm.js +4 -4
  829. package/locales/angular/global/fr-dj.js +4 -4
  830. package/locales/angular/global/fr-dz.js +4 -4
  831. package/locales/angular/global/fr-ga.js +4 -4
  832. package/locales/angular/global/fr-gf.js +4 -4
  833. package/locales/angular/global/fr-gn.js +4 -4
  834. package/locales/angular/global/fr-gp.js +4 -4
  835. package/locales/angular/global/fr-gq.js +4 -4
  836. package/locales/angular/global/fr-ht.js +4 -4
  837. package/locales/angular/global/fr-km.js +4 -4
  838. package/locales/angular/global/fr-lu.js +4 -4
  839. package/locales/angular/global/fr-ma.js +4 -4
  840. package/locales/angular/global/fr-mc.js +4 -4
  841. package/locales/angular/global/fr-mf.js +4 -4
  842. package/locales/angular/global/fr-mg.js +4 -4
  843. package/locales/angular/global/fr-ml.js +4 -4
  844. package/locales/angular/global/fr-mq.js +4 -4
  845. package/locales/angular/global/fr-mr.js +4 -4
  846. package/locales/angular/global/fr-mu.js +4 -4
  847. package/locales/angular/global/fr-nc.js +4 -4
  848. package/locales/angular/global/fr-ne.js +4 -4
  849. package/locales/angular/global/fr-pf.js +4 -4
  850. package/locales/angular/global/fr-pm.js +4 -4
  851. package/locales/angular/global/fr-re.js +4 -4
  852. package/locales/angular/global/fr-rw.js +4 -4
  853. package/locales/angular/global/fr-sc.js +4 -4
  854. package/locales/angular/global/fr-sn.js +4 -4
  855. package/locales/angular/global/fr-sy.js +4 -4
  856. package/locales/angular/global/fr-td.js +4 -4
  857. package/locales/angular/global/fr-tg.js +4 -4
  858. package/locales/angular/global/fr-tn.js +4 -4
  859. package/locales/angular/global/fr-vu.js +4 -4
  860. package/locales/angular/global/fr-wf.js +4 -4
  861. package/locales/angular/global/fr-yt.js +4 -4
  862. package/locales/angular/global/fr.js +4 -4
  863. package/locales/angular/global/fur.js +4 -4
  864. package/locales/angular/global/fy.js +4 -4
  865. package/locales/angular/global/ga-gb.js +4 -4
  866. package/locales/angular/global/ga.js +4 -4
  867. package/locales/angular/global/gd.js +4 -4
  868. package/locales/angular/global/gl.js +4 -4
  869. package/locales/angular/global/gsw-fr.js +4 -4
  870. package/locales/angular/global/gsw-li.js +4 -4
  871. package/locales/angular/global/gsw.js +4 -4
  872. package/locales/angular/global/gu.js +4 -4
  873. package/locales/angular/global/guz.js +4 -4
  874. package/locales/angular/global/gv.js +4 -4
  875. package/locales/angular/global/ha-gh.js +4 -4
  876. package/locales/angular/global/ha-ne.js +4 -4
  877. package/locales/angular/global/ha.js +4 -4
  878. package/locales/angular/global/haw.js +4 -4
  879. package/locales/angular/global/he.js +4 -4
  880. package/locales/angular/global/hi-latn.js +4 -4
  881. package/locales/angular/global/hi.js +4 -4
  882. package/locales/angular/global/hr-ba.js +4 -4
  883. package/locales/angular/global/hr.js +4 -4
  884. package/locales/angular/global/hsb.js +4 -4
  885. package/locales/angular/global/hu.js +4 -4
  886. package/locales/angular/global/hy.js +4 -4
  887. package/locales/angular/global/ia.js +4 -4
  888. package/locales/angular/global/id.js +4 -4
  889. package/locales/angular/global/ig.js +4 -4
  890. package/locales/angular/global/ii.js +4 -4
  891. package/locales/angular/global/is.js +4 -4
  892. package/locales/angular/global/it-ch.js +4 -4
  893. package/locales/angular/global/it-sm.js +4 -4
  894. package/locales/angular/global/it-va.js +4 -4
  895. package/locales/angular/global/it.js +4 -4
  896. package/locales/angular/global/ja.js +4 -4
  897. package/locales/angular/global/jgo.js +4 -4
  898. package/locales/angular/global/jmc.js +4 -4
  899. package/locales/angular/global/jv.js +4 -4
  900. package/locales/angular/global/ka.js +4 -4
  901. package/locales/angular/global/kab.js +4 -4
  902. package/locales/angular/global/kam.js +4 -4
  903. package/locales/angular/global/kde.js +4 -4
  904. package/locales/angular/global/kea.js +4 -4
  905. package/locales/angular/global/kgp.js +4 -4
  906. package/locales/angular/global/khq.js +4 -4
  907. package/locales/angular/global/ki.js +4 -4
  908. package/locales/angular/global/kk.js +4 -4
  909. package/locales/angular/global/kkj.js +4 -4
  910. package/locales/angular/global/kl.js +4 -4
  911. package/locales/angular/global/kln.js +4 -4
  912. package/locales/angular/global/km.js +4 -4
  913. package/locales/angular/global/kn.js +4 -4
  914. package/locales/angular/global/ko-kp.js +4 -4
  915. package/locales/angular/global/ko.js +4 -4
  916. package/locales/angular/global/kok.js +4 -4
  917. package/locales/angular/global/ks-arab.js +4 -4
  918. package/locales/angular/global/ks-deva.js +4 -4
  919. package/locales/angular/global/ks.js +4 -4
  920. package/locales/angular/global/ksb.js +4 -4
  921. package/locales/angular/global/ksf.js +4 -4
  922. package/locales/angular/global/ksh.js +4 -4
  923. package/locales/angular/global/ku.js +4 -4
  924. package/locales/angular/global/kw.js +4 -4
  925. package/locales/angular/global/ky.js +4 -4
  926. package/locales/angular/global/lag.js +4 -4
  927. package/locales/angular/global/lb.js +4 -4
  928. package/locales/angular/global/lg.js +4 -4
  929. package/locales/angular/global/lkt.js +4 -4
  930. package/locales/angular/global/ln-ao.js +4 -4
  931. package/locales/angular/global/ln-cf.js +4 -4
  932. package/locales/angular/global/ln-cg.js +4 -4
  933. package/locales/angular/global/ln.js +4 -4
  934. package/locales/angular/global/lo.js +4 -4
  935. package/locales/angular/global/lrc-iq.js +4 -4
  936. package/locales/angular/global/lrc.js +4 -4
  937. package/locales/angular/global/lt.js +4 -4
  938. package/locales/angular/global/lu.js +4 -4
  939. package/locales/angular/global/luo.js +4 -4
  940. package/locales/angular/global/luy.js +4 -4
  941. package/locales/angular/global/lv.js +4 -4
  942. package/locales/angular/global/mai.js +4 -4
  943. package/locales/angular/global/mas-tz.js +4 -4
  944. package/locales/angular/global/mas.js +4 -4
  945. package/locales/angular/global/mer.js +4 -4
  946. package/locales/angular/global/mfe.js +4 -4
  947. package/locales/angular/global/mg.js +4 -4
  948. package/locales/angular/global/mgh.js +4 -4
  949. package/locales/angular/global/mgo.js +4 -4
  950. package/locales/angular/global/mi.js +4 -4
  951. package/locales/angular/global/mk.js +4 -4
  952. package/locales/angular/global/ml.js +4 -4
  953. package/locales/angular/global/mn.js +4 -4
  954. package/locales/angular/global/mni-beng.js +4 -4
  955. package/locales/angular/global/mni.js +4 -4
  956. package/locales/angular/global/mr.js +4 -4
  957. package/locales/angular/global/ms-bn.js +4 -4
  958. package/locales/angular/global/ms-id.js +4 -4
  959. package/locales/angular/global/ms-sg.js +4 -4
  960. package/locales/angular/global/ms.js +4 -4
  961. package/locales/angular/global/mt.js +4 -4
  962. package/locales/angular/global/mua.js +4 -4
  963. package/locales/angular/global/my.js +4 -4
  964. package/locales/angular/global/mzn.js +4 -4
  965. package/locales/angular/global/naq.js +4 -4
  966. package/locales/angular/global/nb-sj.js +4 -4
  967. package/locales/angular/global/nb.js +4 -4
  968. package/locales/angular/global/nd.js +4 -4
  969. package/locales/angular/global/nds-nl.js +4 -4
  970. package/locales/angular/global/nds.js +4 -4
  971. package/locales/angular/global/ne-in.js +4 -4
  972. package/locales/angular/global/ne.js +4 -4
  973. package/locales/angular/global/nl-aw.js +4 -4
  974. package/locales/angular/global/nl-be.js +4 -4
  975. package/locales/angular/global/nl-bq.js +4 -4
  976. package/locales/angular/global/nl-cw.js +4 -4
  977. package/locales/angular/global/nl-sr.js +4 -4
  978. package/locales/angular/global/nl-sx.js +4 -4
  979. package/locales/angular/global/nl.js +4 -4
  980. package/locales/angular/global/nmg.js +4 -4
  981. package/locales/angular/global/nn.js +4 -4
  982. package/locales/angular/global/nnh.js +4 -4
  983. package/locales/angular/global/no.js +4 -4
  984. package/locales/angular/global/nus.js +4 -4
  985. package/locales/angular/global/nyn.js +4 -4
  986. package/locales/angular/global/om-ke.js +4 -4
  987. package/locales/angular/global/om.js +4 -4
  988. package/locales/angular/global/or.js +4 -4
  989. package/locales/angular/global/os-ru.js +4 -4
  990. package/locales/angular/global/os.js +4 -4
  991. package/locales/angular/global/pa-arab.js +4 -4
  992. package/locales/angular/global/pa-guru.js +4 -4
  993. package/locales/angular/global/pa.js +4 -4
  994. package/locales/angular/global/pcm.js +4 -4
  995. package/locales/angular/global/pl.js +4 -4
  996. package/locales/angular/global/ps-pk.js +4 -4
  997. package/locales/angular/global/ps.js +4 -4
  998. package/locales/angular/global/pt-ao.js +4 -4
  999. package/locales/angular/global/pt-ch.js +4 -4
  1000. package/locales/angular/global/pt-cv.js +4 -4
  1001. package/locales/angular/global/pt-gq.js +4 -4
  1002. package/locales/angular/global/pt-gw.js +4 -4
  1003. package/locales/angular/global/pt-lu.js +4 -4
  1004. package/locales/angular/global/pt-mo.js +4 -4
  1005. package/locales/angular/global/pt-mz.js +4 -4
  1006. package/locales/angular/global/pt-pt.js +4 -4
  1007. package/locales/angular/global/pt-st.js +4 -4
  1008. package/locales/angular/global/pt-tl.js +4 -4
  1009. package/locales/angular/global/pt.js +4 -4
  1010. package/locales/angular/global/qu-bo.js +4 -4
  1011. package/locales/angular/global/qu-ec.js +4 -4
  1012. package/locales/angular/global/qu.js +4 -4
  1013. package/locales/angular/global/rm.js +4 -4
  1014. package/locales/angular/global/rn.js +4 -4
  1015. package/locales/angular/global/ro-md.js +4 -4
  1016. package/locales/angular/global/ro.js +4 -4
  1017. package/locales/angular/global/rof.js +4 -4
  1018. package/locales/angular/global/ru-by.js +4 -4
  1019. package/locales/angular/global/ru-kg.js +4 -4
  1020. package/locales/angular/global/ru-kz.js +4 -4
  1021. package/locales/angular/global/ru-md.js +4 -4
  1022. package/locales/angular/global/ru-ua.js +4 -4
  1023. package/locales/angular/global/ru.js +4 -4
  1024. package/locales/angular/global/rw.js +4 -4
  1025. package/locales/angular/global/rwk.js +4 -4
  1026. package/locales/angular/global/sa.js +4 -4
  1027. package/locales/angular/global/sah.js +4 -4
  1028. package/locales/angular/global/saq.js +4 -4
  1029. package/locales/angular/global/sat-olck.js +4 -4
  1030. package/locales/angular/global/sat.js +4 -4
  1031. package/locales/angular/global/sbp.js +4 -4
  1032. package/locales/angular/global/sc.js +4 -4
  1033. package/locales/angular/global/sd-arab.js +4 -4
  1034. package/locales/angular/global/sd-deva.js +4 -4
  1035. package/locales/angular/global/sd.js +4 -4
  1036. package/locales/angular/global/se-fi.js +4 -4
  1037. package/locales/angular/global/se-se.js +4 -4
  1038. package/locales/angular/global/se.js +4 -4
  1039. package/locales/angular/global/seh.js +4 -4
  1040. package/locales/angular/global/ses.js +4 -4
  1041. package/locales/angular/global/sg.js +4 -4
  1042. package/locales/angular/global/shi-latn.js +4 -4
  1043. package/locales/angular/global/shi-tfng.js +4 -4
  1044. package/locales/angular/global/shi.js +4 -4
  1045. package/locales/angular/global/si.js +4 -4
  1046. package/locales/angular/global/sk.js +4 -4
  1047. package/locales/angular/global/sl.js +4 -4
  1048. package/locales/angular/global/smn.js +4 -4
  1049. package/locales/angular/global/sn.js +4 -4
  1050. package/locales/angular/global/so-dj.js +4 -4
  1051. package/locales/angular/global/so-et.js +4 -4
  1052. package/locales/angular/global/so-ke.js +4 -4
  1053. package/locales/angular/global/so.js +4 -4
  1054. package/locales/angular/global/sq-mk.js +4 -4
  1055. package/locales/angular/global/sq-xk.js +4 -4
  1056. package/locales/angular/global/sq.js +4 -4
  1057. package/locales/angular/global/sr-cyrl-ba.js +4 -4
  1058. package/locales/angular/global/sr-cyrl-me.js +4 -4
  1059. package/locales/angular/global/sr-cyrl-xk.js +4 -4
  1060. package/locales/angular/global/sr-cyrl.js +4 -4
  1061. package/locales/angular/global/sr-latn-ba.js +4 -4
  1062. package/locales/angular/global/sr-latn-me.js +4 -4
  1063. package/locales/angular/global/sr-latn-xk.js +4 -4
  1064. package/locales/angular/global/sr-latn.js +4 -4
  1065. package/locales/angular/global/sr.js +4 -4
  1066. package/locales/angular/global/su-latn.js +4 -4
  1067. package/locales/angular/global/su.js +4 -4
  1068. package/locales/angular/global/sv-ax.js +4 -4
  1069. package/locales/angular/global/sv-fi.js +4 -4
  1070. package/locales/angular/global/sv.js +4 -4
  1071. package/locales/angular/global/sw-cd.js +4 -4
  1072. package/locales/angular/global/sw-ke.js +4 -4
  1073. package/locales/angular/global/sw-ug.js +4 -4
  1074. package/locales/angular/global/sw.js +4 -4
  1075. package/locales/angular/global/ta-lk.js +4 -4
  1076. package/locales/angular/global/ta-my.js +4 -4
  1077. package/locales/angular/global/ta-sg.js +4 -4
  1078. package/locales/angular/global/ta.js +4 -4
  1079. package/locales/angular/global/te.js +4 -4
  1080. package/locales/angular/global/teo-ke.js +4 -4
  1081. package/locales/angular/global/teo.js +4 -4
  1082. package/locales/angular/global/tg.js +4 -4
  1083. package/locales/angular/global/th.js +4 -4
  1084. package/locales/angular/global/ti-er.js +4 -4
  1085. package/locales/angular/global/ti.js +4 -4
  1086. package/locales/angular/global/tk.js +4 -4
  1087. package/locales/angular/global/to.js +4 -4
  1088. package/locales/angular/global/tr-cy.js +4 -4
  1089. package/locales/angular/global/tr.js +4 -4
  1090. package/locales/angular/global/tt.js +4 -4
  1091. package/locales/angular/global/twq.js +4 -4
  1092. package/locales/angular/global/tzm.js +4 -4
  1093. package/locales/angular/global/ug.js +4 -4
  1094. package/locales/angular/global/uk.js +4 -4
  1095. package/locales/angular/global/und.js +4 -4
  1096. package/locales/angular/global/ur-in.js +4 -4
  1097. package/locales/angular/global/ur.js +4 -4
  1098. package/locales/angular/global/uz-arab.js +4 -4
  1099. package/locales/angular/global/uz-cyrl.js +4 -4
  1100. package/locales/angular/global/uz-latn.js +4 -4
  1101. package/locales/angular/global/uz.js +4 -4
  1102. package/locales/angular/global/vai-latn.js +4 -4
  1103. package/locales/angular/global/vai-vaii.js +4 -4
  1104. package/locales/angular/global/vai.js +4 -4
  1105. package/locales/angular/global/vi.js +4 -4
  1106. package/locales/angular/global/vun.js +4 -4
  1107. package/locales/angular/global/wae.js +4 -4
  1108. package/locales/angular/global/wo.js +4 -4
  1109. package/locales/angular/global/xh.js +4 -4
  1110. package/locales/angular/global/xog.js +4 -4
  1111. package/locales/angular/global/yav.js +4 -4
  1112. package/locales/angular/global/yi.js +4 -4
  1113. package/locales/angular/global/yo-bj.js +4 -4
  1114. package/locales/angular/global/yo.js +4 -4
  1115. package/locales/angular/global/yrl-co.js +4 -4
  1116. package/locales/angular/global/yrl-ve.js +4 -4
  1117. package/locales/angular/global/yrl.js +4 -4
  1118. package/locales/angular/global/yue-hans.js +4 -4
  1119. package/locales/angular/global/yue-hant.js +4 -4
  1120. package/locales/angular/global/yue.js +4 -4
  1121. package/locales/angular/global/zgh.js +4 -4
  1122. package/locales/angular/global/zh-hans-hk.js +4 -4
  1123. package/locales/angular/global/zh-hans-mo.js +4 -4
  1124. package/locales/angular/global/zh-hans-sg.js +4 -4
  1125. package/locales/angular/global/zh-hans.js +4 -4
  1126. package/locales/angular/global/zh-hant-hk.js +4 -4
  1127. package/locales/angular/global/zh-hant-mo.js +4 -4
  1128. package/locales/angular/global/zh-hant.js +4 -4
  1129. package/locales/angular/global/zh.js +4 -4
  1130. package/locales/angular/global/zu.js +4 -4
  1131. package/mobile/components/basic/default/bundles/index.umd.js +148 -143
  1132. package/mobile/components/basic/default/esm2022/anchor/anchor.directive.mjs +8 -7
  1133. package/mobile/components/basic/default/esm2022/app-update/app-update.component.mjs +7 -6
  1134. package/mobile/components/basic/default/esm2022/basic.module.mjs +2 -2
  1135. package/mobile/components/basic/default/esm2022/file-browser/file-browser.component.mjs +47 -43
  1136. package/mobile/components/basic/default/esm2022/file-browser/file-selector.service.mjs +7 -5
  1137. package/mobile/components/basic/default/esm2022/image-cache/image-cache.directive.mjs +6 -5
  1138. package/mobile/components/basic/default/esm2022/network-info-toaster/network-info-toaster.component.mjs +49 -47
  1139. package/mobile/components/basic/default/esm2022/process-manager/process-management.service.mjs +2 -2
  1140. package/mobile/components/basic/default/esm2022/process-manager/process-manager.component.mjs +31 -32
  1141. package/mobile/components/basic/default/fesm2022/index.mjs +146 -140
  1142. package/mobile/components/basic/default/fesm2022/index.mjs.map +1 -1
  1143. package/mobile/components/basic/default/network-info-toaster/network-info-toaster.component.d.ts +2 -2
  1144. package/mobile/components/basic/search/bundles/index.umd.js +3 -3
  1145. package/mobile/components/basic/search/esm2022/search.directive.mjs +3 -3
  1146. package/mobile/components/basic/search/esm2022/search.module.mjs +2 -2
  1147. package/mobile/components/basic/search/fesm2022/index.mjs +3 -3
  1148. package/mobile/components/basic/search/fesm2022/index.mjs.map +1 -1
  1149. package/mobile/components/containers/segmented-control/bundles/index.umd.js +42 -30
  1150. package/mobile/components/containers/segmented-control/esm2022/segment-content/segment-content.component.mjs +14 -8
  1151. package/mobile/components/containers/segmented-control/esm2022/segmented-control.component.mjs +28 -21
  1152. package/mobile/components/containers/segmented-control/esm2022/segmented-control.module.mjs +2 -2
  1153. package/mobile/components/containers/segmented-control/fesm2022/index.mjs +41 -28
  1154. package/mobile/components/containers/segmented-control/fesm2022/index.mjs.map +1 -1
  1155. package/mobile/components/containers/segmented-control/segment-content/segment-content.component.d.ts +2 -2
  1156. package/mobile/components/containers/segmented-control/segmented-control.component.d.ts +2 -2
  1157. package/mobile/components/data/media-list/bundles/index.umd.js +53 -48
  1158. package/mobile/components/data/media-list/esm2022/media-list-item/media-list-item.directive.mjs +2 -2
  1159. package/mobile/components/data/media-list/esm2022/media-list.component.mjs +48 -42
  1160. package/mobile/components/data/media-list/esm2022/media-list.module.mjs +2 -2
  1161. package/mobile/components/data/media-list/fesm2022/index.mjs +50 -44
  1162. package/mobile/components/data/media-list/fesm2022/index.mjs.map +1 -1
  1163. package/mobile/components/data/media-list/media-list.component.d.ts +2 -2
  1164. package/mobile/components/device/barcode-scanner/barcode-scanner.component.d.ts +2 -2
  1165. package/mobile/components/device/barcode-scanner/bundles/index.umd.js +14 -8
  1166. package/mobile/components/device/barcode-scanner/esm2022/barcode-scanner.component.mjs +15 -9
  1167. package/mobile/components/device/barcode-scanner/esm2022/barcode-scanner.module.mjs +2 -2
  1168. package/mobile/components/device/barcode-scanner/fesm2022/index.mjs +16 -10
  1169. package/mobile/components/device/barcode-scanner/fesm2022/index.mjs.map +1 -1
  1170. package/mobile/components/device/camera/bundles/index.umd.js +15 -9
  1171. package/mobile/components/device/camera/camera.component.d.ts +2 -2
  1172. package/mobile/components/device/camera/esm2022/camera.component.mjs +16 -10
  1173. package/mobile/components/device/camera/esm2022/camera.module.mjs +2 -2
  1174. package/mobile/components/device/camera/fesm2022/index.mjs +17 -11
  1175. package/mobile/components/device/camera/fesm2022/index.mjs.map +1 -1
  1176. package/mobile/components/input/file-upload/bundles/index.umd.js +3 -3
  1177. package/mobile/components/input/file-upload/esm2022/file-upload.directive.mjs +3 -3
  1178. package/mobile/components/input/file-upload/esm2022/file-upload.module.mjs +2 -2
  1179. package/mobile/components/input/file-upload/fesm2022/index.mjs +3 -3
  1180. package/mobile/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  1181. package/mobile/components/page/default/bundles/index.umd.js +11 -10
  1182. package/mobile/components/page/default/esm2022/page-content-loader/page-content-loader.component.mjs +4 -3
  1183. package/mobile/components/page/default/esm2022/page.directive.mjs +5 -4
  1184. package/mobile/components/page/default/esm2022/page.module.mjs +2 -2
  1185. package/mobile/components/page/default/fesm2022/index.mjs +8 -6
  1186. package/mobile/components/page/default/fesm2022/index.mjs.map +1 -1
  1187. package/mobile/components/page/left-panel/bundles/index.umd.js +3 -3
  1188. package/mobile/components/page/left-panel/esm2022/left-panel.directive.mjs +3 -3
  1189. package/mobile/components/page/left-panel/esm2022/left-panel.module.mjs +2 -2
  1190. package/mobile/components/page/left-panel/fesm2022/index.mjs +3 -3
  1191. package/mobile/components/page/left-panel/fesm2022/index.mjs.map +1 -1
  1192. package/mobile/components/page/mobile-navbar/bundles/index.umd.js +40 -35
  1193. package/mobile/components/page/mobile-navbar/esm2022/mobile-navbar.component.mjs +41 -36
  1194. package/mobile/components/page/mobile-navbar/esm2022/mobile-navbar.module.mjs +2 -2
  1195. package/mobile/components/page/mobile-navbar/fesm2022/index.mjs +41 -36
  1196. package/mobile/components/page/mobile-navbar/fesm2022/index.mjs.map +1 -1
  1197. package/mobile/components/page/mobile-navbar/mobile-navbar.component.d.ts +2 -2
  1198. package/mobile/components/page/tab-bar/bundles/index.umd.js +52 -46
  1199. package/mobile/components/page/tab-bar/esm2022/tab-bar.module.mjs +2 -2
  1200. package/mobile/components/page/tab-bar/esm2022/tabbar.component.mjs +50 -43
  1201. package/mobile/components/page/tab-bar/fesm2022/index.mjs +51 -44
  1202. package/mobile/components/page/tab-bar/fesm2022/index.mjs.map +1 -1
  1203. package/mobile/components/page/tab-bar/tabbar.component.d.ts +2 -2
  1204. package/mobile/core/bundles/index.umd.js +43 -43
  1205. package/mobile/core/esm2022/core.module.mjs +3 -3
  1206. package/mobile/core/esm2022/native.xhr.mjs +1 -1
  1207. package/mobile/core/esm2022/services/device-file-cache.service.mjs +3 -3
  1208. package/mobile/core/esm2022/services/device-file-download.service.mjs +7 -6
  1209. package/mobile/core/esm2022/services/device-file-opener.service.mjs +5 -4
  1210. package/mobile/core/esm2022/services/device-file-upload.service.mjs +6 -5
  1211. package/mobile/core/esm2022/services/device-file.service.mjs +8 -7
  1212. package/mobile/core/esm2022/services/device.service.mjs +5 -4
  1213. package/mobile/core/esm2022/services/ext-app-message.service.mjs +7 -6
  1214. package/mobile/core/esm2022/services/network.service.mjs +11 -10
  1215. package/mobile/core/fesm2022/index.mjs +40 -39
  1216. package/mobile/core/fesm2022/index.mjs.map +1 -1
  1217. package/mobile/core/services/ext-app-message.service.d.ts +1 -1
  1218. package/mobile/core/services/network.service.d.ts +7 -1
  1219. package/mobile/offline/bundles/index.umd.js +176 -159
  1220. package/mobile/offline/esm2022/models/local-db-store.mjs +23 -21
  1221. package/mobile/offline/esm2022/offline.module.mjs +3 -3
  1222. package/mobile/offline/esm2022/services/change-log.service.mjs +9 -8
  1223. package/mobile/offline/esm2022/services/local-db-data-pull.service.mjs +39 -37
  1224. package/mobile/offline/esm2022/services/local-db-management.service.mjs +56 -47
  1225. package/mobile/offline/esm2022/services/local-db.service.mjs +7 -6
  1226. package/mobile/offline/esm2022/services/local-key-value.service.mjs +2 -2
  1227. package/mobile/offline/esm2022/services/push.service.mjs +3 -3
  1228. package/mobile/offline/esm2022/services/workers/error-blocker.mjs +4 -3
  1229. package/mobile/offline/esm2022/services/workers/file-handler.mjs +18 -13
  1230. package/mobile/offline/esm2022/services/workers/id-resolver.mjs +3 -3
  1231. package/mobile/offline/esm2022/services/workers/multi-part-param-transformer.mjs +9 -5
  1232. package/mobile/offline/esm2022/utils/file-upload.utils.mjs +1 -1
  1233. package/mobile/offline/esm2022/utils/live-variable.utils.mjs +12 -11
  1234. package/mobile/offline/esm2022/utils/query-executor.utils.mjs +5 -4
  1235. package/mobile/offline/esm2022/utils/security.utils.mjs +3 -2
  1236. package/mobile/offline/esm2022/utils/utils.mjs +1 -1
  1237. package/mobile/offline/fesm2022/index.mjs +171 -153
  1238. package/mobile/offline/fesm2022/index.mjs.map +1 -1
  1239. package/mobile/placeholder/runtime/bundles/index.umd.js +3 -2
  1240. package/mobile/placeholder/runtime/esm2022/components/app-ext.component.mjs +3 -2
  1241. package/mobile/placeholder/runtime/esm2022/mobile-runtime.module.mjs +2 -2
  1242. package/mobile/placeholder/runtime/fesm2022/index.mjs +3 -2
  1243. package/mobile/placeholder/runtime/fesm2022/index.mjs.map +1 -1
  1244. package/mobile/placeholder/runtime-dynamic/bundles/index.umd.js +1 -1
  1245. package/mobile/placeholder/runtime-dynamic/esm2022/mobile-runtime-dynamic.module.mjs +2 -2
  1246. package/mobile/placeholder/runtime-dynamic/fesm2022/index.mjs +1 -1
  1247. package/mobile/placeholder/runtime-dynamic/fesm2022/index.mjs.map +1 -1
  1248. package/mobile/runtime/bundles/index.umd.js +21 -17
  1249. package/mobile/runtime/esm2022/components/app-ext.component.mjs +4 -3
  1250. package/mobile/runtime/esm2022/mobile-runtime.module.mjs +5 -4
  1251. package/mobile/runtime/esm2022/services/cookie.service.mjs +7 -3
  1252. package/mobile/runtime/esm2022/services/http-interceptor.service.mjs +6 -5
  1253. package/mobile/runtime/esm2022/services/webprocess.service.mjs +3 -3
  1254. package/mobile/runtime/fesm2022/index.mjs +18 -13
  1255. package/mobile/runtime/fesm2022/index.mjs.map +1 -1
  1256. package/mobile/runtime-dynamic/bundles/index.umd.js +5 -5
  1257. package/mobile/runtime-dynamic/esm2022/mobile-runtime-dynamic.module.mjs +2 -2
  1258. package/mobile/runtime-dynamic/esm2022/services/live-sync.service.mjs +5 -5
  1259. package/mobile/runtime-dynamic/fesm2022/index.mjs +5 -5
  1260. package/mobile/runtime-dynamic/fesm2022/index.mjs.map +1 -1
  1261. package/mobile/variables/bundles/index.umd.js +28 -21
  1262. package/mobile/variables/esm2022/services/camera-service.mjs +5 -5
  1263. package/mobile/variables/esm2022/services/contacts-service.mjs +1 -1
  1264. package/mobile/variables/esm2022/services/datasync-service.mjs +10 -9
  1265. package/mobile/variables/esm2022/services/device-service/device-service.mjs +1 -1
  1266. package/mobile/variables/esm2022/services/device-service/location-service.mjs +1 -1
  1267. package/mobile/variables/esm2022/services/file-service.mjs +11 -3
  1268. package/mobile/variables/esm2022/services/scan-service.mjs +1 -1
  1269. package/mobile/variables/esm2022/variables.module.mjs +3 -3
  1270. package/mobile/variables/fesm2022/index.mjs +24 -16
  1271. package/mobile/variables/fesm2022/index.mjs.map +1 -1
  1272. package/oAuth/bundles/index.umd.js +15 -15
  1273. package/oAuth/esm2022/oAuth.module.mjs +2 -2
  1274. package/oAuth/esm2022/oAuth.service.mjs +6 -5
  1275. package/oAuth/esm2022/oAuth.utils.mjs +8 -7
  1276. package/oAuth/fesm2022/index.mjs +12 -11
  1277. package/oAuth/fesm2022/index.mjs.map +1 -1
  1278. package/package.json +1 -1
  1279. package/runtime/base/bundles/index.umd.js +243 -237
  1280. package/runtime/base/esm2022/components/app-component/app.component.mjs +27 -27
  1281. package/runtime/base/esm2022/components/app-spinner.component.mjs +9 -8
  1282. package/runtime/base/esm2022/components/base-layout.component.mjs +5 -4
  1283. package/runtime/base/esm2022/components/base-page.component.mjs +16 -15
  1284. package/runtime/base/esm2022/components/base-partial.component.mjs +15 -14
  1285. package/runtime/base/esm2022/components/base-prefab.component.mjs +17 -16
  1286. package/runtime/base/esm2022/components/base-spa-page.component.mjs +16 -15
  1287. package/runtime/base/esm2022/components/custom-toaster.component.mjs +17 -15
  1288. package/runtime/base/esm2022/components/empty-component/empty-page.component.mjs +4 -3
  1289. package/runtime/base/esm2022/components/prefab-preview.component.mjs +4 -3
  1290. package/runtime/base/esm2022/directives/accessroles.directive.mjs +13 -12
  1291. package/runtime/base/esm2022/directives/prefab.directive.mjs +4 -4
  1292. package/runtime/base/esm2022/guards/auth.guard.mjs +3 -3
  1293. package/runtime/base/esm2022/guards/can-deactivate-page.guard.mjs +3 -3
  1294. package/runtime/base/esm2022/guards/page-not-found.guard.mjs +3 -3
  1295. package/runtime/base/esm2022/guards/role.guard.mjs +5 -4
  1296. package/runtime/base/esm2022/overrides/wm_dom_renderer.mjs +4 -4
  1297. package/runtime/base/esm2022/overrides/wm_shared_styles_host.mjs +5 -5
  1298. package/runtime/base/esm2022/resolves/app-extension.resolve.mjs +3 -3
  1299. package/runtime/base/esm2022/resolves/app-js.resolve.mjs +3 -3
  1300. package/runtime/base/esm2022/resolves/app-variables.resolve.mjs +3 -3
  1301. package/runtime/base/esm2022/resolves/i18n.resolve.mjs +3 -3
  1302. package/runtime/base/esm2022/resolves/metadata.resolve.mjs +3 -3
  1303. package/runtime/base/esm2022/resolves/security-config.resolve.mjs +3 -3
  1304. package/runtime/base/esm2022/runtime-base.module.mjs +3 -3
  1305. package/runtime/base/esm2022/services/app-defaults.service.mjs +3 -3
  1306. package/runtime/base/esm2022/services/app.manager.service.mjs +19 -16
  1307. package/runtime/base/esm2022/services/app.service.mjs +9 -8
  1308. package/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +5 -4
  1309. package/runtime/base/esm2022/services/http-interceptor.services.mjs +6 -5
  1310. package/runtime/base/esm2022/services/i18n.service.mjs +15 -13
  1311. package/runtime/base/esm2022/services/navigation.service.mjs +10 -9
  1312. package/runtime/base/esm2022/services/pipe-provider.service.mjs +3 -3
  1313. package/runtime/base/esm2022/services/pipe.service.mjs +3 -3
  1314. package/runtime/base/esm2022/services/prefab-manager.service.mjs +5 -4
  1315. package/runtime/base/esm2022/services/spinner.service.mjs +9 -8
  1316. package/runtime/base/esm2022/services/toaster.service.mjs +8 -7
  1317. package/runtime/base/esm2022/util/fragment-monitor.mjs +3 -3
  1318. package/runtime/base/esm2022/util/wm-route-reuse-strategy.mjs +7 -8
  1319. package/runtime/base/fesm2022/index.mjs +253 -247
  1320. package/runtime/base/fesm2022/index.mjs.map +1 -1
  1321. package/runtime/base/overrides/wm_dom_renderer.d.ts +2 -2
  1322. package/runtime/base/services/i18n.service.d.ts +1 -1
  1323. package/runtime/dynamic/bundles/index.umd.js +22 -21
  1324. package/runtime/dynamic/esm2022/app/app.module.mjs +1 -1
  1325. package/runtime/dynamic/esm2022/app/components/page-wrapper.component.mjs +4 -3
  1326. package/runtime/dynamic/esm2022/app/services/app-extension.service.mjs +3 -3
  1327. package/runtime/dynamic/esm2022/app/services/app-js-provider.service.mjs +3 -3
  1328. package/runtime/dynamic/esm2022/app/services/app-resource-manager.service.mjs +3 -3
  1329. package/runtime/dynamic/esm2022/app/services/app-variables-provider.service.mjs +3 -3
  1330. package/runtime/dynamic/esm2022/app/services/component-ref-provider.service.mjs +6 -5
  1331. package/runtime/dynamic/esm2022/app/services/prefab-config-provider.service.mjs +3 -3
  1332. package/runtime/dynamic/esm2022/main.mjs +3 -2
  1333. package/runtime/dynamic/fesm2022/index.mjs +21 -19
  1334. package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  1335. package/scripts/datatable/datatable.js +2 -1
  1336. package/scripts/jquery-ui/ui/widgets/droppable.js +7 -7
  1337. package/scripts/jquery-ui/ui/widgets/resizable.js +13 -10
  1338. package/scripts/jquery-ui/ui/widgets/sortable.js +7 -7
  1339. package/security/bundles/index.umd.js +17 -17
  1340. package/security/esm2022/security.module.mjs +2 -2
  1341. package/security/esm2022/security.service.mjs +14 -13
  1342. package/security/fesm2022/index.mjs +14 -13
  1343. package/security/fesm2022/index.mjs.map +1 -1
  1344. package/security/security.service.d.ts +1 -1
  1345. package/swipey/esm2022/swipe.animation.mjs +1 -1
  1346. package/swipey/fesm2022/index.mjs.map +1 -1
  1347. package/transpiler/bundles/index.umd.js +10 -9
  1348. package/transpiler/esm2022/build.mjs +8 -6
  1349. package/transpiler/fesm2022/index.mjs +7 -5
  1350. package/transpiler/fesm2022/index.mjs.map +1 -1
  1351. package/variables/bundles/index.umd.js +160 -150
  1352. package/variables/esm2022/factory/variable.factory.mjs +1 -1
  1353. package/variables/esm2022/manager/action/login-action.manager.mjs +15 -14
  1354. package/variables/esm2022/manager/action/logout-action.manager.mjs +1 -1
  1355. package/variables/esm2022/manager/action/notification-action.manager.mjs +9 -8
  1356. package/variables/esm2022/manager/variable/base-variable.manager.mjs +3 -2
  1357. package/variables/esm2022/manager/variable/device-variable-manager.mjs +1 -1
  1358. package/variables/esm2022/manager/variable/device-variable-service.mjs +1 -1
  1359. package/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +11 -10
  1360. package/variables/esm2022/model/action/notification-action.mjs +1 -1
  1361. package/variables/esm2022/service/metadata-service/metadata.service.mjs +3 -3
  1362. package/variables/esm2022/service/variables.service.mjs +9 -8
  1363. package/variables/esm2022/util/action/navigation-action.utils.mjs +4 -4
  1364. package/variables/esm2022/util/variable/pagination.utils.mjs +30 -23
  1365. package/variables/esm2022/util/variable/service-variable.utils.mjs +29 -28
  1366. package/variables/esm2022/util/variable/variables.utils.mjs +75 -70
  1367. package/variables/esm2022/variables.module.mjs +2 -2
  1368. package/variables/fesm2022/index.mjs +174 -163
  1369. package/variables/fesm2022/index.mjs.map +1 -1
  1370. package/variables/util/variable/service-variable.utils.d.ts +1 -1
  1371. package/build-task/package.json +0 -28
  1372. package/components/advanced/carousel/package.json +0 -23
  1373. package/components/advanced/login/package.json +0 -23
  1374. package/components/advanced/marquee/package.json +0 -23
  1375. package/components/base/package.json +0 -28
  1376. package/components/basic/default/package.json +0 -23
  1377. package/components/basic/progress/package.json +0 -23
  1378. package/components/basic/rich-text-editor/package.json +0 -23
  1379. package/components/basic/search/package.json +0 -23
  1380. package/components/basic/tree/package.json +0 -23
  1381. package/components/chart/package.json +0 -23
  1382. package/components/containers/accordion/package.json +0 -23
  1383. package/components/containers/layout-grid/package.json +0 -23
  1384. package/components/containers/linear-layout/package.json +0 -23
  1385. package/components/containers/panel/package.json +0 -23
  1386. package/components/containers/tabs/package.json +0 -23
  1387. package/components/containers/tile/package.json +0 -23
  1388. package/components/containers/wizard/package.json +0 -23
  1389. package/components/data/card/package.json +0 -23
  1390. package/components/data/form/package.json +0 -23
  1391. package/components/data/list/package.json +0 -23
  1392. package/components/data/live-table/package.json +0 -23
  1393. package/components/data/pagination/package.json +0 -23
  1394. package/components/data/table/package.json +0 -23
  1395. package/components/dialogs/alert-dialog/package.json +0 -23
  1396. package/components/dialogs/confirm-dialog/package.json +0 -23
  1397. package/components/dialogs/default/package.json +0 -23
  1398. package/components/dialogs/design-dialog/package.json +0 -23
  1399. package/components/dialogs/iframe-dialog/package.json +0 -23
  1400. package/components/dialogs/login-dialog/package.json +0 -23
  1401. package/components/dialogs/partial-dialog/package.json +0 -23
  1402. package/components/input/calendar/package.json +0 -23
  1403. package/components/input/chips/package.json +0 -23
  1404. package/components/input/color-picker/package.json +0 -23
  1405. package/components/input/currency/package.json +0 -23
  1406. package/components/input/default/package.json +0 -23
  1407. package/components/input/epoch/package.json +0 -23
  1408. package/components/input/file-upload/package.json +0 -23
  1409. package/components/input/rating/package.json +0 -23
  1410. package/components/input/slider/package.json +0 -23
  1411. package/components/navigation/breadcrumb/package.json +0 -23
  1412. package/components/navigation/menu/package.json +0 -23
  1413. package/components/navigation/navbar/package.json +0 -23
  1414. package/components/navigation/popover/package.json +0 -23
  1415. package/components/page/default/package.json +0 -23
  1416. package/components/page/footer/package.json +0 -23
  1417. package/components/page/header/package.json +0 -23
  1418. package/components/page/left-panel/package.json +0 -23
  1419. package/components/page/right-panel/package.json +0 -23
  1420. package/components/page/top-nav/package.json +0 -23
  1421. package/components/prefab/package.json +0 -23
  1422. package/core/package.json +0 -29
  1423. package/http/package.json +0 -28
  1424. package/mobile/components/basic/default/package.json +0 -23
  1425. package/mobile/components/basic/search/package.json +0 -23
  1426. package/mobile/components/containers/segmented-control/package.json +0 -23
  1427. package/mobile/components/data/media-list/package.json +0 -23
  1428. package/mobile/components/device/barcode-scanner/package.json +0 -23
  1429. package/mobile/components/device/camera/package.json +0 -23
  1430. package/mobile/components/input/file-upload/package.json +0 -23
  1431. package/mobile/components/page/default/package.json +0 -23
  1432. package/mobile/components/page/left-panel/package.json +0 -23
  1433. package/mobile/components/page/mobile-navbar/package.json +0 -23
  1434. package/mobile/components/page/tab-bar/package.json +0 -23
  1435. package/mobile/core/package.json +0 -28
  1436. package/mobile/offline/package.json +0 -28
  1437. package/mobile/placeholder/runtime/package.json +0 -27
  1438. package/mobile/placeholder/runtime-dynamic/package.json +0 -23
  1439. package/mobile/runtime/package.json +0 -28
  1440. package/mobile/runtime-dynamic/package.json +0 -23
  1441. package/mobile/variables/package.json +0 -28
  1442. package/oAuth/package.json +0 -28
  1443. package/runtime/base/package.json +0 -28
  1444. package/runtime/dynamic/package.json +0 -28
  1445. package/security/package.json +0 -28
  1446. package/swipey/package.json +0 -28
  1447. package/transpiler/package.json +0 -29
  1448. package/variables/package.json +0 -28
@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core';
2
2
  import { AppVersion } from '@awesome-cordova-plugins/app-version/ngx';
3
3
  import { File } from '@awesome-cordova-plugins/file/ngx';
4
4
  import { SQLite } from '@awesome-cordova-plugins/sqlite/ngx';
5
- import { DataType, DEFAULT_FORMATS, executePromiseChain, extractType, isAndroid, isArray, isIos, noop, toPromise, transformFileURI } from '@wm/core';
5
+ import { DataType, DEFAULT_FORMATS, executePromiseChain, extractType, isAndroid, isIos, noop, toPromise, transformFileURI } from '@wm/core';
6
6
  import { DeviceFileService, DeviceService } from '@wm/mobile/core';
7
7
  import { SecurityService } from '@wm/security';
8
8
  import { formatDate } from '@wm/variables';
@@ -10,6 +10,7 @@ import { LocalKeyValueService } from './local-key-value.service';
10
10
  import { LocalDBStore } from '../models/local-db-store';
11
11
  import { escapeName } from '../utils/utils';
12
12
  import { ColumnInfo, DBInfo, PullType } from '../models/config';
13
+ import { chain, find, forEach, isEmpty, isUndefined, map, now, parseInt, replace, toUpper, toString, values, isArray, assignIn } from "lodash-es";
13
14
  import * as i0 from "@angular/core";
14
15
  import * as i1 from "@awesome-cordova-plugins/app-version/ngx";
15
16
  import * as i2 from "@wm/mobile/core";
@@ -117,7 +118,8 @@ export class LocalDBManagementService {
117
118
  return new Promise((resolve, reject) => {
118
119
  // Before closing databases, give some time for the pending transactions (if any).
119
120
  setTimeout(() => {
120
- const closePromises = _.map(_.values(this.databases), db => db.sqliteObject.close());
121
+ // @ts-ignore
122
+ const closePromises = map(values(this.databases), db => db.sqliteObject.close());
121
123
  Promise.all(closePromises).then(resolve, reject);
122
124
  }, 1000);
123
125
  });
@@ -141,14 +143,14 @@ export class LocalDBManagementService {
141
143
  return Promise.reject(`Query by name ' ${queryName} ' Not Found`);
142
144
  }
143
145
  queryData = this.databases[dbName].queries[queryName];
144
- paramPromises = _.chain(queryData.params)
146
+ paramPromises = chain(queryData.params)
145
147
  .filter(p => p.variableType !== 'PROMPT')
146
148
  .forEach(p => {
147
149
  const paramValue = this.systemProperties[p.variableType].value(p.name, params);
148
150
  return toPromise(paramValue).then(v => params[p.name] = v);
149
151
  }).value();
150
152
  return Promise.all(paramPromises).then(() => {
151
- params = _.map(queryData.params, p => {
153
+ params = map(queryData.params, p => {
152
154
  // Sqlite will accept DateTime value as below format.
153
155
  if (typeof params[p.name] !== 'string'
154
156
  && (p.type === DataType.DATETIME || p.type === DataType.LOCALDATETIME)) {
@@ -163,18 +165,18 @@ export class LocalDBManagementService {
163
165
  return this.executeSQLQuery(dbName, queryData.query, params)
164
166
  .then(result => {
165
167
  let firstRow, needTransform;
166
- if (!_.isEmpty(result.rows)) {
168
+ if (!isEmpty(result.rows)) {
167
169
  firstRow = result.rows[0];
168
- needTransform = _.find(queryData.response.properties, p => !firstRow.hasOwnProperty(p.fieldName));
169
- if (!_.isUndefined(needTransform)) {
170
- result.rows = _.map(result.rows, row => {
170
+ needTransform = find(queryData.response.properties, p => !firstRow.hasOwnProperty(p.fieldName));
171
+ if (!isUndefined(needTransform)) {
172
+ result.rows = map(result.rows, row => {
171
173
  const transformedRow = {}, rowWithUpperKeys = {};
172
174
  // This is to make search for data as case-insensitive
173
- _.forEach(row, (v, k) => rowWithUpperKeys[k.toUpperCase()] = v);
174
- _.forEach(queryData.response.properties, p => {
175
+ forEach(row, (v, k) => rowWithUpperKeys[k.toUpperCase()] = v);
176
+ forEach(queryData.response.properties, p => {
175
177
  // format the value depending on the typeRef specified in properties.
176
178
  const propType = extractType(p.fieldType.typeRef);
177
- const formatValue = DEFAULT_FORMATS[_.toUpper(propType)];
179
+ const formatValue = DEFAULT_FORMATS[toUpper(propType)];
178
180
  const fieldVal = row[p.name];
179
181
  if (fieldVal && typeof fieldVal !== 'string'
180
182
  && (propType === DataType.DATETIME || propType === DataType.LOCALDATETIME || propType === DataType.DATE)) {
@@ -208,7 +210,7 @@ export class LocalDBManagementService {
208
210
  */
209
211
  exportDB() {
210
212
  return new Promise((resolve, reject) => {
211
- const folderToExport = 'offline_temp_' + _.now(), folderToExportFullPath = cordova.file.cacheDirectory + folderToExport + '/', zipFileName = '_offline_data.zip', metaInfo = {
213
+ const folderToExport = 'offline_temp_' + now(), folderToExportFullPath = cordova.file.cacheDirectory + folderToExport + '/', zipFileName = '_offline_data.zip', metaInfo = {
212
214
  app: null,
213
215
  OS: '',
214
216
  createdOn: 0
@@ -238,7 +240,7 @@ export class LocalDBManagementService {
238
240
  else if (isAndroid()) {
239
241
  metaInfo.OS = 'ANDROID';
240
242
  }
241
- metaInfo.createdOn = _.now();
243
+ metaInfo.createdOn = now();
242
244
  return metaInfo;
243
245
  }).then(() => executePromiseChain(this.getCallbacksFor('preExport'), [folderToExportFullPath, metaInfo]))
244
246
  .then(() => {
@@ -291,7 +293,7 @@ export class LocalDBManagementService {
291
293
  */
292
294
  importDB(zipPath, revertIfFails) {
293
295
  return new Promise((resolve, reject) => {
294
- const importFolder = 'offline_temp_' + _.now(), importFolderFullPath = cordova.file.cacheDirectory + importFolder + '/';
296
+ const importFolder = 'offline_temp_' + now(), importFolderFullPath = cordova.file.cacheDirectory + importFolder + '/';
295
297
  let zipMeta;
296
298
  // Create a temporary folder to unzip the contents of the zip.
297
299
  this.file.createDir(cordova.file.cacheDirectory, importFolder, false)
@@ -411,7 +413,7 @@ export class LocalDBManagementService {
411
413
  .then(metadata => this.loadNamedQueries(metadata))
412
414
  .then(metadata => this.loadOfflineConfig(metadata))
413
415
  .then(metadata => {
414
- return Promise.all(_.map(metadata, dbMetadata => {
416
+ return Promise.all(map(metadata, dbMetadata => {
415
417
  return this.openDatabase(dbMetadata)
416
418
  .then(database => {
417
419
  this.databases[dbMetadata.schema.name] = database;
@@ -430,9 +432,9 @@ export class LocalDBManagementService {
430
432
  .then(() => this.disableForeignKeys())
431
433
  .then(() => this.deviceService.getAppBuildTime())
432
434
  .then(dbSeedCreationTime => {
433
- return executePromiseChain(_.map(this.callbacks, 'onDbCreate'), [{
435
+ return executePromiseChain(map(this.callbacks, 'onDbCreate'), [{
434
436
  'databases': this.databases,
435
- 'dbCreatedOn': _.now(),
437
+ 'dbCreatedOn': now(),
436
438
  'dbSeedCreatedOn': dbSeedCreationTime
437
439
  }]);
438
440
  }).then(() => this.databases);
@@ -492,13 +494,13 @@ export class LocalDBManagementService {
492
494
  let defaultValue = col.columnValue ? col.columnValue.defaultValue : '';
493
495
  const type = col.sqlType;
494
496
  if (type === 'number' && !col.primaryKey) {
495
- defaultValue = _.isEmpty(defaultValue) ? null : _.parseInt(defaultValue);
497
+ defaultValue = isEmpty(defaultValue) ? null : parseInt(defaultValue);
496
498
  }
497
499
  else if (type === 'boolean') {
498
- defaultValue = _.isEmpty(defaultValue) ? null : (defaultValue === 'true' ? 1 : 0);
500
+ defaultValue = isEmpty(defaultValue) ? null : (defaultValue === 'true' ? 1 : 0);
499
501
  }
500
502
  else {
501
- defaultValue = _.isEmpty(defaultValue) ? null : defaultValue;
503
+ defaultValue = isEmpty(defaultValue) ? null : defaultValue;
502
504
  }
503
505
  reqEntity.columns.push({
504
506
  name: col['name'],
@@ -509,10 +511,10 @@ export class LocalDBManagementService {
509
511
  defaultValue: defaultValue
510
512
  });
511
513
  });
512
- _.forEach(entity.relations, r => {
514
+ forEach(entity.relations, r => {
513
515
  let targetEntitySchema, targetEntity, col, sourceColumn, mapping;
514
516
  if (r.cardinality === 'ManyToOne' || r.cardinality === 'OneToOne') {
515
- targetEntity = _.find(schema.tables, t => t.name === r.targetTable);
517
+ targetEntity = find(schema.tables, t => t.name === r.targetTable);
516
518
  mapping = r.mappings[0];
517
519
  if (targetEntity) {
518
520
  targetEntity = targetEntity.entityName;
@@ -529,7 +531,8 @@ export class LocalDBManagementService {
529
531
  targetFieldName: targetEntitySchema.columns.find(column => column.name === mapping.targetColumn).fieldName
530
532
  };
531
533
  foreignRelation.targetPath = foreignRelation.sourceFieldName + '.' + foreignRelation.targetFieldName;
532
- foreignRelation.dataMapper = _.chain(targetEntitySchema.columns)
534
+ // @ts-ignore
535
+ foreignRelation.dataMapper = chain(targetEntitySchema.columns)
533
536
  .keyBy(childCol => foreignRelation.sourceFieldName + '.' + childCol.fieldName)
534
537
  .mapValues(childCol => new ColumnInfo(childCol.name, childCol.fieldName)).value();
535
538
  col.foreignRelations = col.foreignRelations || [];
@@ -542,25 +545,25 @@ export class LocalDBManagementService {
542
545
  // Loads necessary details of queries
543
546
  compactQueries(queriesByDB) {
544
547
  const queries = new Map();
545
- _.forEach(queriesByDB.queries, queryData => {
548
+ forEach(queriesByDB.queries, queryData => {
546
549
  let query, params;
547
550
  if (queryData.nativeSql && queryData.type === 'SELECT') {
548
- query = _.isEmpty(queryData.offlineQueryString) ? queryData.queryString : queryData.offlineQueryString;
549
- params = _.map(this.extractQueryParams(query), p => {
550
- const paramObj = _.find(queryData.parameters, { 'name': p });
551
+ query = isEmpty(queryData.offlineQueryString) ? queryData.queryString : queryData.offlineQueryString;
552
+ params = map(this.extractQueryParams(query), p => {
553
+ const paramObj = find(queryData.parameters, { 'name': p });
551
554
  return {
552
555
  name: paramObj.name,
553
556
  type: paramObj.type,
554
557
  variableType: paramObj.variableType
555
558
  };
556
559
  });
557
- params.forEach(p => query = _.replace(query, ':' + p.name, '?'));
560
+ params.forEach(p => query = replace(query, ':' + p.name, '?'));
558
561
  queries[queryData.name] = {
559
562
  name: queryData.name,
560
563
  query: query,
561
564
  params: params,
562
565
  response: {
563
- properties: _.map(queryData.response.properties, p => {
566
+ properties: map(queryData.response.properties, p => {
564
567
  p.nameInUpperCase = p.name.toUpperCase();
565
568
  return p;
566
569
  })
@@ -586,7 +589,7 @@ export class LocalDBManagementService {
586
589
  return dbInfo;
587
590
  }
588
591
  convertBoolToInt(bool) {
589
- return _.toString(bool) === 'true' ? 1 : 0;
592
+ return toString(bool) === 'true' ? 1 : 0;
590
593
  }
591
594
  convertIntToBool(int) {
592
595
  return int ? true : false;
@@ -596,7 +599,8 @@ export class LocalDBManagementService {
596
599
  * @returns {*}
597
600
  */
598
601
  disableForeignKeys() {
599
- return Promise.all(_.map(this.databases, db => this.executeSQLQuery(db.schema.name, 'PRAGMA foreign_keys = OFF')));
602
+ // @ts-ignore
603
+ return Promise.all(map(this.databases, db => this.executeSQLQuery(db.schema.name, 'PRAGMA foreign_keys = OFF')));
600
604
  }
601
605
  /**
602
606
  * Executes SQL query;
@@ -679,7 +683,7 @@ export class LocalDBManagementService {
679
683
  getMetaInfo(fileNameRegex) {
680
684
  const folder = cordova.file.applicationDirectory + META_LOCATION + '/';
681
685
  return this.deviceFileService.listFiles(folder, fileNameRegex)
682
- .then(files => Promise.all(_.map(files, f => {
686
+ .then(files => Promise.all(map(files, f => {
683
687
  return new Promise((resolve, reject) => {
684
688
  // Cordova File reader has buffer issues with large files.
685
689
  // so, using ajax to retrieve local json
@@ -725,7 +729,7 @@ export class LocalDBManagementService {
725
729
  loadNamedQueries(metadata) {
726
730
  return this.getMetaInfo(/.+_query\.json$/)
727
731
  .then((queriesByDBs) => {
728
- queriesByDBs = _.isArray(queriesByDBs) ? queriesByDBs : [queriesByDBs];
732
+ queriesByDBs = isArray(queriesByDBs) ? queriesByDBs : [queriesByDBs];
729
733
  queriesByDBs.map(e => metadata[e.name].queries = this.compactQueries(e));
730
734
  return metadata;
731
735
  });
@@ -739,10 +743,12 @@ export class LocalDBManagementService {
739
743
  loadOfflineConfig(metadata) {
740
744
  return this.getMetaInfo(/.+_offline\.json$/)
741
745
  .then(configs => {
742
- _.forEach(configs, config => {
743
- _.forEach(config.entities, entityConfig => {
744
- const entitySchema = _.find(metadata[config.name].schema.entities, schema => schema.name === entityConfig.name);
745
- _.assignIn(entitySchema, entityConfig);
746
+ forEach(configs, config => {
747
+ // @ts-ignore
748
+ forEach(config.entities, entityConfig => {
749
+ // @ts-ignore
750
+ const entitySchema = find(metadata[config.name].schema.entities, schema => schema.name === entityConfig.name);
751
+ assignIn(entitySchema, entityConfig);
746
752
  });
747
753
  });
748
754
  return metadata;
@@ -751,14 +757,14 @@ export class LocalDBManagementService {
751
757
  logSql(sqliteObject) {
752
758
  const logger = console, originalExecuteSql = sqliteObject.executeSql;
753
759
  sqliteObject.executeSql = (sql, params, logOutput) => {
754
- const startTime = _.now();
760
+ const startTime = now();
755
761
  return originalExecuteSql.call(sqliteObject, sql, params).then(result => {
756
762
  if (logOutput || this._logSql) {
757
763
  const objArr = [], rowCount = result.rows.length;
758
764
  for (let i = 0; i < rowCount; i++) {
759
765
  objArr.push(result.rows.item(i));
760
766
  }
761
- logger.debug('SQL "%s" with params %O took [%d ms]. And the result is %O', sql, params, _.now() - startTime, objArr);
767
+ logger.debug('SQL "%s" with params %O took [%d ms]. And the result is %O', sql, params, now() - startTime, objArr);
762
768
  }
763
769
  return result;
764
770
  }, error => {
@@ -786,10 +792,12 @@ export class LocalDBManagementService {
786
792
  * @returns {*}
787
793
  */
788
794
  normalizeData() {
789
- return Promise.all(_.map(this.databases, database => {
790
- return Promise.all(_.map(database.schema.entities, entitySchema => {
791
- return Promise.all(_.map(entitySchema.columns, column => {
795
+ return Promise.all(map(this.databases, database => {
796
+ // @ts-ignore
797
+ return Promise.all(map(database.schema.entities, entitySchema => {
798
+ return Promise.all(map(entitySchema.columns, column => {
792
799
  if (column.sqlType === 'boolean') {
800
+ // @ts-ignore
793
801
  return this.normalizeBooleanData(database.schema.name, entitySchema.name, column.name);
794
802
  }
795
803
  }));
@@ -803,12 +811,13 @@ export class LocalDBManagementService {
803
811
  }).then(sqliteObject => {
804
812
  database.sqliteObject = sqliteObject;
805
813
  this.logSql(sqliteObject);
806
- const storePromises = _.map(database.schema.entities, entitySchema => {
814
+ const storePromises = map(database.schema.entities, entitySchema => {
815
+ // @ts-ignore
807
816
  const store = new LocalDBStore(this.deviceFileService, entitySchema, this.file, this, sqliteObject);
808
817
  return store.create();
809
818
  });
810
819
  return Promise.all(storePromises).then(stores => {
811
- _.forEach(stores, store => {
820
+ forEach(stores, store => {
812
821
  database.stores[store.entitySchema.entityName] = store;
813
822
  });
814
823
  return database;
@@ -839,8 +848,8 @@ export class LocalDBManagementService {
839
848
  static { this.ɵfac = function LocalDBManagementService_Factory(t) { return new (t || LocalDBManagementService)(i0.ɵɵinject(i1.AppVersion), i0.ɵɵinject(i2.DeviceService), i0.ɵɵinject(i2.DeviceFileService), i0.ɵɵinject(i3.File), i0.ɵɵinject(i4.LocalKeyValueService), i0.ɵɵinject(i5.SecurityService), i0.ɵɵinject(i6.SQLite)); }; }
840
849
  static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: LocalDBManagementService, factory: LocalDBManagementService.ɵfac, providedIn: 'root' }); }
841
850
  }
842
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LocalDBManagementService, [{
851
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LocalDBManagementService, [{
843
852
  type: Injectable,
844
853
  args: [{ providedIn: 'root' }]
845
- }], function () { return [{ type: i1.AppVersion }, { type: i2.DeviceService }, { type: i2.DeviceFileService }, { type: i3.File }, { type: i4.LocalKeyValueService }, { type: i5.SecurityService }, { type: i6.SQLite }]; }, null); })();
846
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtZGItbWFuYWdlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW9iaWxlL29mZmxpbmUvc3JjL3NlcnZpY2VzL2xvY2FsLWRiLW1hbmFnZW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxxQ0FBcUMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNySixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQThCLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7OztBQU81RixNQUFPLGFBQWEsR0FBRywwQkFBMEIsQ0FBQztBQUNsRCxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQztB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O1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssY0FBYztRQUNsQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFO2FBQ3RDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRTtnQkFDN0QsT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUU7cUJBQzlCLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ1AsTUFBTSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7b0JBQ2pDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUM3RCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDM0I7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7eUZBOXlCUSx3QkFBd0I7dUVBQXhCLHdCQUF3QixXQUF4Qix3QkFBd0IsbUJBRFosTUFBTTs7dUZBQ2xCLHdCQUF3QjtjQURwQyxVQUFVO2VBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBcHBWZXJzaW9uIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2FwcC12ZXJzaW9uL25neCc7XG5pbXBvcnQgeyBGaWxlIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2ZpbGUvbmd4JztcbmltcG9ydCB7IFNRTGl0ZSwgU1FMaXRlT2JqZWN0IH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3NxbGl0ZS9uZ3gnO1xuXG5pbXBvcnQgeyBEYXRhVHlwZSwgREVGQVVMVF9GT1JNQVRTLCBleGVjdXRlUHJvbWlzZUNoYWluLCBleHRyYWN0VHlwZSwgaXNBbmRyb2lkLCBpc0FycmF5LCBpc0lvcywgbm9vcCwgdG9Qcm9taXNlLCB0cmFuc2Zvcm1GaWxlVVJJIH0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgRGV2aWNlRmlsZVNlcnZpY2UsIERldmljZVNlcnZpY2UgfSBmcm9tICdAd20vbW9iaWxlL2NvcmUnO1xuaW1wb3J0IHsgU2VjdXJpdHlTZXJ2aWNlIH0gZnJvbSAnQHdtL3NlY3VyaXR5JztcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAd20vdmFyaWFibGVzJztcblxuaW1wb3J0IHsgTG9jYWxLZXlWYWx1ZVNlcnZpY2UgfSBmcm9tICcuL2xvY2FsLWtleS12YWx1ZS5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsREJTdG9yZSB9IGZyb20gJy4uL21vZGVscy9sb2NhbC1kYi1zdG9yZSc7XG5pbXBvcnQgeyBlc2NhcGVOYW1lIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mbywgREJJbmZvLCBFbnRpdHlJbmZvLCBOYW1lZFF1ZXJ5SW5mbywgUHVsbFR5cGUgfSBmcm9tICcuLi9tb2RlbHMvY29uZmlnJztcblxuZGVjbGFyZSBjb25zdCBfO1xuZGVjbGFyZSBjb25zdCBjb3Jkb3ZhO1xuZGVjbGFyZSBjb25zdCBtb21lbnQ7XG5kZWNsYXJlIGNvbnN0IFplZXA7XG5cbmNvbnN0ICBORVhUX0lEX0NPVU5UID0gJ2xvY2FsREJTdG9yZS5uZXh0SWRDb3VudCc7XG5jb25zdCBNRVRBX0xPQ0FUSU9OID0gJ3d3dy9tZXRhZGF0YS9hcHAnO1xuY29uc3QgT0ZGTElORV9XQVZFTUFLRVJfREFUQUJBU0VfU0NIRU1BID0ge1xuICAgIG5hbWU6ICd3YXZlbWFrZXInLFxuICAgIHZlcnNpb246IDEsXG4gICAgaXNJbnRlcm5hbDogdHJ1ZSxcbiAgICB0YWJsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2tleV92YWx1ZScsXG4gICAgICAgICAgICBlbnRpdHlOYW1lOiAna2V5LXZhbHVlJyxcbiAgICAgICAgICAgIGNvbHVtbnM6IFt7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgZ2VuZXJhdG9yVHlwZSA6ICdkYXRhYmFzZUlkZW50aXR5JyxcbiAgICAgICAgICAgICAgICBzcWxUeXBlIDogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgcHJpbWFyeUtleTogdHJ1ZVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleSdcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogJ3ZhbHVlJ1xuICAgICAgICAgICAgfV1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ29mZmxpbmVDaGFuZ2VMb2cnLFxuICAgICAgICAgICAgZW50aXR5TmFtZTogJ29mZmxpbmVDaGFuZ2VMb2cnLFxuICAgICAgICAgICAgY29sdW1uczogW3tcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICBnZW5lcmF0b3JUeXBlOiAnZGF0YWJhc2VJZGVudGl0eScsXG4gICAgICAgICAgICAgICAgc3FsVHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgcHJpbWFyeUtleTogdHJ1ZVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdzZXJ2aWNlJyxcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6ICdzZXJ2aWNlJ1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdvcGVyYXRpb24nLFxuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogJ29wZXJhdGlvbidcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6ICdwYXJhbXMnXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3RpbWVzdGFtcCcsXG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiAndGltZXN0YW1wJ1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdoYXNFcnJvcicsXG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiAnaGFzRXJyb3InXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Vycm9yTWVzc2FnZScsXG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiAnZXJyb3JNZXNzYWdlJ1xuICAgICAgICAgICAgfV1cbiAgICAgICAgfVxuICAgIF1cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsbEJhY2sge1xuICAgIG9uRGJDcmVhdGU/OiAoaW5mbzogYW55KSA9PiBhbnk7XG4gICAgcG9zdEltcG9ydD86IChpbXBvcnRGb2xkZXJQYXRoOiBzdHJpbmcsIG1ldGFJbmZvOiBhbnkpID0+IGFueTtcbiAgICBwcmVFeHBvcnQ/OiAoZm9sZGVyVG9FeHBvcnRGdWxsUGF0aDogc3RyaW5nLCBtZXRhSW5mbzogYW55KSA9PiBhbnk7XG59XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIExvY2FsREJNYW5hZ2VtZW50U2VydmljZSB7XG4gICAgc3RhdGljIHJlYWRvbmx5IFNFUlZJQ0VfTkFNRSA9ICdMb2NhbERCTWFuYWdlbWVudFNlcnZpY2UnO1xuICAgIHByaXZhdGUgY2FsbGJhY2tzOiBDYWxsQmFja1tdID0gW107XG4gICAgcHJpdmF0ZSBkYkluc3RhbGxEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIGRiSW5zdGFsbERpcmVjdG9yeU5hbWU6IHN0cmluZztcbiAgICBwcml2YXRlIGRiSW5zdGFsbFBhcmVudERpcmVjdG9yeTogc3RyaW5nO1xuICAgIHByaXZhdGUgZGF0YWJhc2VzOiBNYXA8c3RyaW5nLCBEQkluZm8+O1xuICAgIHByaXZhdGUgX2xvZ1NxbCA9IGZhbHNlO1xuICAgIHB1YmxpYyBuZXh0SWQgPSAxMDAwMDAwMDAwMDA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzeXN0ZW1Qcm9wZXJ0aWVzID0ge1xuICAgICAgICAnVVNFUl9JRCcgOiB7XG4gICAgICAgICAgICAnbmFtZScgOiAnVVNFUl9JRCcsXG4gICAgICAgICAgICAndmFsdWUnIDogKCkgPT4gdGhpcy5zZWN1cml0eVNlcnZpY2UuZ2V0TG9nZ2VkSW5Vc2VyKCkudGhlbiggdXNlckluZm8gPT4gdXNlckluZm8udXNlcklkKVxuICAgICAgICB9LFxuICAgICAgICAnVVNFUl9OQU1FJyA6IHtcbiAgICAgICAgICAgICduYW1lJyA6ICdVU0VSX05BTUUnLFxuICAgICAgICAgICAgJ3ZhbHVlJyA6ICgpID0+IHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmdldExvZ2dlZEluVXNlcigpLnRoZW4oIHVzZXJJbmZvID0+IHVzZXJJbmZvLnVzZXJOYW1lKVxuICAgICAgICB9LFxuICAgICAgICAnREFURV9USU1FJyA6IHtcbiAgICAgICAgICAgICduYW1lJyA6ICdEQVRFX1RJTUUnLFxuICAgICAgICAgICAgJ3ZhbHVlJyA6ICgpID0+IG1vbWVudCgpLmZvcm1hdCgnWVlZWS1NTS1ERFRoaDptbTpzcycpXG4gICAgICAgIH0sXG4gICAgICAgICdEQVRFJyA6IHtcbiAgICAgICAgICAgICduYW1lJyA6ICdDVVJSRU5UX0RBVEUnLFxuICAgICAgICAgICAgJ3ZhbHVlJyA6ICgpID0+IG1vbWVudCgpLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG4gICAgICAgIH0sXG4gICAgICAgICdUSU1FJyA6IHtcbiAgICAgICAgICAgICduYW1lJyA6ICdUSU1FJyxcbiAgICAgICAgICAgICd2YWx1ZScgOiAoKSA9PiBtb21lbnQoKS5mb3JtYXQoJ2hoOm1tOnNzJylcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhcHBWZXJzaW9uOiBBcHBWZXJzaW9uLFxuICAgICAgICBwcml2YXRlIGRldmljZVNlcnZpY2U6IERldmljZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGV2aWNlRmlsZVNlcnZpY2U6IERldmljZUZpbGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZpbGU6IEZpbGUsXG4gICAgICAgIHByaXZhdGUgbG9jYWxLZXlWYWx1ZVNlcnZpY2U6IExvY2FsS2V5VmFsdWVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNxbGl0ZTogU1FMaXRlXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2VzIGFsbCBkYXRhYmFzZXMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBhIHByb21pc2UuXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAvLyBCZWZvcmUgY2xvc2luZyBkYXRhYmFzZXMsIGdpdmUgc29tZSB0aW1lIGZvciB0aGUgcGVuZGluZyB0cmFuc2FjdGlvbnMgKGlmIGFueSkuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbG9zZVByb21pc2VzID0gXy5tYXAoXy52YWx1ZXModGhpcy5kYXRhYmFzZXMpLCBkYiA9PiBkYi5zcWxpdGVPYmplY3QuY2xvc2UoKSk7XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwoY2xvc2VQcm9taXNlcykudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXh0SWRDb3VudCgpIHtcbiAgICAgICAgdGhpcy5uZXh0SWQgPSB0aGlzLm5leHRJZCArIDE7XG4gICAgICAgIHRoaXMubG9jYWxLZXlWYWx1ZVNlcnZpY2UucHV0KE5FWFRfSURfQ09VTlQsIHRoaXMubmV4dElkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dElkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIGEgbmFtZWQgcXVlcnkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGJOYW1lIG5hbWUgb2YgZGF0YWJhc2Ugb24gd2hpY2ggdGhlIG5hbWVkIHF1ZXJ5IGhhcyB0byBiZSBydW5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlOYW1lIG5hbWUgb2YgdGhlIHF1ZXJ5IHRvIGV4ZWN1dGVcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gcGFyYW1zIHBhcmFtZXRlcnMgcmVxdWlyZWQgZm9yIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtvYmplY3R9IGEgcHJvbWlzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhlY3V0ZU5hbWVkUXVlcnkoZGJOYW1lOiBzdHJpbmcsIHF1ZXJ5TmFtZTogc3RyaW5nLCBwYXJhbXM6IGFueSkge1xuICAgICAgICBsZXQgcXVlcnlEYXRhLCBwYXJhbVByb21pc2VzO1xuICAgICAgICBpZiAoIXRoaXMuZGF0YWJhc2VzW2RiTmFtZV0gfHwgIXRoaXMuZGF0YWJhc2VzW2RiTmFtZV0ucXVlcmllc1txdWVyeU5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYFF1ZXJ5IGJ5IG5hbWUgJyAke3F1ZXJ5TmFtZX0gJyBOb3QgRm91bmRgKTtcbiAgICAgICAgfVxuICAgICAgICBxdWVyeURhdGEgPSB0aGlzLmRhdGFiYXNlc1tkYk5hbWVdLnF1ZXJpZXNbcXVlcnlOYW1lXTtcbiAgICAgICAgcGFyYW1Qcm9taXNlcyA9IF8uY2hhaW4ocXVlcnlEYXRhLnBhcmFtcylcbiAgICAgICAgICAgIC5maWx0ZXIocCA9PiBwLnZhcmlhYmxlVHlwZSAhPT0gJ1BST01QVCcpXG4gICAgICAgICAgICAuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbVZhbHVlID0gdGhpcy5zeXN0ZW1Qcm9wZXJ0aWVzW3AudmFyaWFibGVUeXBlXS52YWx1ZShwLm5hbWUsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvUHJvbWlzZShwYXJhbVZhbHVlKS50aGVuKHYgPT4gcGFyYW1zW3AubmFtZV0gPSB2KTtcbiAgICAgICAgICAgIH0pLnZhbHVlKCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwYXJhbVByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHBhcmFtcyA9IF8ubWFwKHF1ZXJ5RGF0YS5wYXJhbXMsIHAgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFNxbGl0ZSB3aWxsIGFjY2VwdCBEYXRlVGltZSB2YWx1ZSBhcyBiZWxvdyBmb3JtYXQuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXNbcC5uYW1lXSAhPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgJiYgKHAudHlwZSA9PT0gRGF0YVR5cGUuREFURVRJTUUgfHwgcC50eXBlID09PSBEYXRhVHlwZS5MT0NBTERBVEVUSU1FKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0RGF0ZShwYXJhbXNbcC5uYW1lXSwgcC50eXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc3FsaXRlIGFjY2VwdHMgdGhlIGJvb2wgdmFsIGFzIDEsMCBoZW5jZSBjb252ZXJ0IHRoZSBib29sZWFuIHZhbHVlIHRvIG51bWJlclxuICAgICAgICAgICAgICAgIGlmIChwLnR5cGUgPT09IERhdGFUeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydEJvb2xUb0ludChwYXJhbXNbcC5uYW1lXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbXNbcC5uYW1lXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVNRTFF1ZXJ5KGRiTmFtZSwgcXVlcnlEYXRhLnF1ZXJ5LCBwYXJhbXMpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0Um93LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfLmlzRW1wdHkocmVzdWx0LnJvd3MpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJvdyA9IHJlc3VsdC5yb3dzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFRyYW5zZm9ybSA9IF8uZmluZChxdWVyeURhdGEucmVzcG9uc2UucHJvcGVydGllcywgcCA9PiAhZmlyc3RSb3cuaGFzT3duUHJvcGVydHkocC5maWVsZE5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChuZWVkVHJhbnNmb3JtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yb3dzID0gXy5tYXAocmVzdWx0LnJvd3MsIHJvdyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUm93ID0ge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dXaXRoVXBwZXJLZXlzID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gbWFrZSBzZWFyY2ggZm9yIGRhdGEgYXMgY2FzZS1pbnNlbnNpdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmZvckVhY2gocm93LCAodiwgaykgPT4gcm93V2l0aFVwcGVyS2V5c1trLnRvVXBwZXJDYXNlKCldID0gdik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uZm9yRWFjaChxdWVyeURhdGEucmVzcG9uc2UucHJvcGVydGllcywgcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JtYXQgdGhlIHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgdHlwZVJlZiBzcGVjaWZpZWQgaW4gcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BUeXBlID0gZXh0cmFjdFR5cGUocC5maWVsZFR5cGUudHlwZVJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXRWYWx1ZSA9IERFRkFVTFRfRk9STUFUU1tfLnRvVXBwZXIocHJvcFR5cGUpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsID0gcm93W3AubmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRWYWwgJiYgdHlwZW9mIGZpZWxkVmFsICE9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChwcm9wVHlwZSA9PT0gRGF0YVR5cGUuREFURVRJTUUgfHwgcHJvcFR5cGUgPT09IERhdGFUeXBlLkxPQ0FMREFURVRJTUUgfHwgcHJvcFR5cGUgPT09IERhdGFUeXBlLkRBVEUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vbWVudChmaWVsZFZhbCkuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1twLm5hbWVdID0gZm9ybWF0RGF0ZShmaWVsZFZhbCwgcHJvcFR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobW9tZW50KGZpZWxkVmFsLCAnSEg6bW0nKS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHZhbHVlIGlzIGluIEhIOm1tOnNzIGZvcm1hdCwgaXQgcmV0dXJucyBhIHdyb25nIGRhdGUuIFNvIGFwcGVuZCB0aGUgZGF0ZSB0byB0aGUgZ2l2ZW4gdmFsdWUgdG8gZ2V0IGRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W3AubmFtZV0gPSBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tREQnKSArICdUJyArIGZpZWxkVmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wVHlwZSA9PT0gRGF0YVR5cGUuQk9PTEVBTikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1twLm5hbWVdID0gdGhpcy5jb252ZXJ0SW50VG9Cb29sKGZpZWxkVmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1dpdGhVcHBlcktleXNbcC5uYW1lSW5VcHBlckNhc2VdID0gcm93W3AubmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFJvd1twLm5hbWVdID0gcm93W3AubmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFJvd1twLmZpZWxkTmFtZV0gPSByb3dbcC5maWVsZE5hbWVdIHx8IHJvd1dpdGhVcHBlcktleXNbcC5uYW1lSW5VcHBlckNhc2VdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkUm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBleHBvcnQgdGhlIGRhdGFiYXNlcyBpbiBhIHppcCBmb3JtYXQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHppcCBpcyBjcmVhdGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBleHBvcnREQigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb2xkZXJUb0V4cG9ydCA9ICdvZmZsaW5lX3RlbXBfJyArIF8ubm93KCksXG4gICAgICAgICAgICAgICAgZm9sZGVyVG9FeHBvcnRGdWxsUGF0aCA9IGNvcmRvdmEuZmlsZS5jYWNoZURpcmVjdG9yeSArIGZvbGRlclRvRXhwb3J0ICsgJy8nLFxuICAgICAgICAgICAgICAgIHppcEZpbGVOYW1lID0gJ19vZmZsaW5lX2RhdGEuemlwJyxcbiAgICAgICAgICAgICAgICBtZXRhSW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgYXBwOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBPUzogJycsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRPbjogMFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsZXQgemlwRGlyZWN0b3J5O1xuICAgICAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBJbiBJT1MsIHNhdmUgemlwIHRvIGRvY3VtZW50cyBkaXJlY3Rvcnkgc28gdGhhdCB1c2VyIGNhbiBleHBvcnQgdGhlIGZpbGUgZnJvbSBJT1MgZGV2aWNlcyB1c2luZyBpVFVORVMuXG4gICAgICAgICAgICAgICAgemlwRGlyZWN0b3J5ID0gY29yZG92YS5maWxlLmRvY3VtZW50c0RpcmVjdG9yeTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSW4gQW5kcm9pZCwgc2F2ZSB6aXAgdG8gZG93bmxvYWQgZGlyZWN0b3J5LlxuICAgICAgICAgICAgICAgIHppcERpcmVjdG9yeSA9IGNvcmRvdmEuZmlsZS5leHRlcm5hbFJvb3REaXJlY3RvcnkgKyAnRG93bmxvYWQvJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBmb2xkZXIgdG8gY29weSBhbGwgdGhlIGNvbnRlbnQgdG8gZXhwb3J0XG4gICAgICAgICAgICB0aGlzLmZpbGUuY3JlYXRlRGlyKGNvcmRvdmEuZmlsZS5jYWNoZURpcmVjdG9yeSwgZm9sZGVyVG9FeHBvcnQsIGZhbHNlKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29weSBkYXRhYmFzZXMgdG8gdGVtcG9yYXJ5IGZvbGRlciBmb3IgZXhwb3J0XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGUuY29weURpcih0aGlzLmRiSW5zdGFsbFBhcmVudERpcmVjdG9yeSwgdGhpcy5kYkluc3RhbGxEaXJlY3RvcnlOYW1lLCBmb2xkZXJUb0V4cG9ydEZ1bGxQYXRoLCAnZGF0YWJhc2VzJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVwYXJlIG1ldGEgaW5mbyB0byBpZGVudGlmeSB0aGUgemlwIGFuZCBvdGhlciBpbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwSW5mbygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihhcHBJbmZvID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhSW5mby5hcHAgPSAoYXBwSW5mbyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFJbmZvLk9TID0gJ0lPUyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0FuZHJvaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhSW5mby5PUyA9ICdBTkRST0lEJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YUluZm8uY3JlYXRlZE9uID0gXy5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWV0YUluZm87XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IGV4ZWN1dGVQcm9taXNlQ2hhaW4odGhpcy5nZXRDYWxsYmFja3NGb3IoJ3ByZUV4cG9ydCcpLCBbZm9sZGVyVG9FeHBvcnRGdWxsUGF0aCwgbWV0YUluZm9dKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSBtZXRhIGRhdGEgdG8gTUVUQS5qc29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZS53cml0ZUZpbGUoZm9sZGVyVG9FeHBvcnRGdWxsUGF0aCwgJ01FVEEuanNvbicsIEpTT04uc3RyaW5naWZ5KG1ldGFJbmZvKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGFyZSBuYW1lIHRvIHVzZSBmb3IgdGhlIHppcC5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGFwcE5hbWUgPSBtZXRhSW5mby5hcHAubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYXBwTmFtZSA9IGFwcE5hbWUucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VGaWxlU2VydmljZS5uZXdGaWxlTmFtZSh6aXBEaXJlY3RvcnksIGFwcE5hbWUgKyB6aXBGaWxlTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZpbGVOYW1lID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBaaXAgdGhlIHRlbXBvcmFyeSBmb2xkZXIgZm9yIGV4cG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocnMsIHJlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFplZXAuemlwKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gOiBmb2xkZXJUb0V4cG9ydEZ1bGxQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gICA6IHppcERpcmVjdG9yeSArIGZpbGVOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sICgpID0+IHJzKHppcERpcmVjdG9yeSArIGZpbGVOYW1lKSwgcmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXNvbHZlLCByZWplY3QpXG4gICAgICAgICAgICAgICAgLmNhdGNoKG5vb3ApLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGVtcG9yYXJ5IGZvbGRlciBmb3IgZXhwb3J0XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLnJlbW92ZURpcihjb3Jkb3ZhLmZpbGUuY2FjaGVEaXJlY3RvcnkgKyBmb2xkZXJUb0V4cG9ydCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICByZXR1cm5zIHN0b3JlIGJvdW5kIHRvIHRoZSBkYXRhTW9kZWxOYW1lIGFuZCBlbnRpdHlOYW1lLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFNb2RlbE5hbWVcbiAgICAgKiBAcGFyYW0gZW50aXR5TmFtZVxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTdG9yZShkYXRhTW9kZWxOYW1lOiBzdHJpbmcsIGVudGl0eU5hbWU6IHN0cmluZyk6IFByb21pc2U8TG9jYWxEQlN0b3JlPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhYmFzZXNbZGF0YU1vZGVsTmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuZGF0YWJhc2VzW2RhdGFNb2RlbE5hbWVdLnN0b3Jlc1tlbnRpdHlOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWplY3QoYHN0b3JlIHdpdGggbmFtZScke2VudGl0eU5hbWV9JyBpbiBkYXRhbW9kZWwgJyR7ZGF0YU1vZGVsTmFtZX0nIGlzIG5vdCBmb3VuZGApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVwbGFjZSB0aGUgZGF0YWJhc2VzIHdpdGggdGhlIGZpbGVzIHByb3ZpZGVkIGluIHppcC4gSWYgaW1wb3J0IGdldHMgZmFpbGVkLFxuICAgICAqIHRoZW4gYXBwIHJldmVydHMgYmFjayB0byB1c2Ugb2xkIGRhdGFiYXNlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB6aXBQYXRoIGxvY2F0aW9uIG9mIHRoZSB6aXAgZmlsZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJldmVydElmRmFpbHMgSWYgdHJ1ZSwgdGhlbiBhIGJhY2t1cCBpcyBjcmVhdGVkIGFuZCB3aGVuIGltcG9ydCBmYWlscywgYmFja3VwIGlzIHJldmVydGVkIGJhY2suXG4gICAgICogQHJldHVybnMge29iamVjdH0gYSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB6aXAgaXMgY3JlYXRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaW1wb3J0REIoemlwUGF0aDogc3RyaW5nLCByZXZlcnRJZkZhaWxzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbXBvcnRGb2xkZXIgPSAnb2ZmbGluZV90ZW1wXycgKyBfLm5vdygpLFxuICAgICAgICAgICAgICAgIGltcG9ydEZvbGRlckZ1bGxQYXRoID0gY29yZG92YS5maWxlLmNhY2hlRGlyZWN0b3J5ICsgaW1wb3J0Rm9sZGVyICsgJy8nO1xuICAgICAgICAgICAgbGV0IHppcE1ldGE7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgZm9sZGVyIHRvIHVuemlwIHRoZSBjb250ZW50cyBvZiB0aGUgemlwLlxuICAgICAgICAgICAgdGhpcy5maWxlLmNyZWF0ZURpcihjb3Jkb3ZhLmZpbGUuY2FjaGVEaXJlY3RvcnksIGltcG9ydEZvbGRlciwgZmFsc2UpXG4gICAgICAgICAgICAgICAgLnRoZW4oICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChycywgcmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVuemlwIHRvIHRlbXBvcmFyeSBsb2NhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgWmVlcC51bnppcCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogemlwUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bzogaW1wb3J0Rm9sZGVyRnVsbFBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJzLCByZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogcmVhZCBtZXRhIGRhdGEgYW5kIGFsbG93IGltcG9ydCBvbmx5IHBhY2thZ2UgbmFtZSBvZiB0aGUgYXBwIGZyb20gd2hpY2ggdGhpcyB6aXAgaXMgY3JlYXRlZFxuICAgICAgICAgICAgICAgICAqIGFuZCB0aGUgcGFja2FnZSBuYW1lIG9mIHRoaXMgYXBwIGFyZSBzYW1lLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGUucmVhZEFzVGV4dChpbXBvcnRGb2xkZXJGdWxsUGF0aCwgJ01FVEEuanNvbicpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHRleHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB6aXBNZXRhID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwSW5mbygpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oYXBwSW5mbyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghemlwTWV0YS5hcHApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnbWV0YSBpbmZvcm1hdGlvbiBpcyBub3QgZm91bmQgaW4gemlwJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHppcE1ldGEuYXBwLnBhY2thZ2VOYW1lICE9PSBhcHBJbmZvLnBhY2thZ2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ2RhdGFiYXNlIHppcCBvZiBhcHAgd2l0aCBzYW1lIHBhY2thZ2UgbmFtZSBjYW4gb25seSBiZSBpbXBvcnRlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgYmFja3VwWmlwO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldmVydElmRmFpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYmFja3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0REIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihwYXRoID0+IGJhY2t1cFppcCA9IHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSBleGlzdGluZyBkYXRhYmFzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLnJlbW92ZURpcih0aGlzLmRiSW5zdGFsbERpcmVjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29weSBpbXBvcnRlZCBkYXRhYmFzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGUuY29weURpcihpbXBvcnRGb2xkZXJGdWxsUGF0aCwgJ2RhdGFiYXNlcycsIHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5LCB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbG9hZCBkYXRhYmFzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YWJhc2VzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWREYXRhYmFzZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiBleGVjdXRlUHJvbWlzZUNoYWluKHRoaXMuZ2V0Q2FsbGJhY2tzRm9yKCdwb3N0SW1wb3J0JyksIFtpbXBvcnRGb2xkZXJGdWxsUGF0aCwgemlwTWV0YV0pKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFja3VwWmlwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV2aWNlRmlsZVNlcnZpY2UucmVtb3ZlRmlsZShiYWNrdXBaaXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFja3VwWmlwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0REIoYmFja3VwWmlwLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2VGaWxlU2VydmljZS5yZW1vdmVGaWxlKGJhY2t1cFppcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKHJlc29sdmUsIHJlamVjdClcbiAgICAgICAgICAgIC5jYXRjaChub29wKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLnJlbW92ZURpcihjb3Jkb3ZhLmZpbGUuY2FjaGVEaXJlY3RvcnkgKyBpbXBvcnRGb2xkZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhTW9kZWxOYW1lIE5hbWUgb2YgdGhlIGRhdGEgbW9kZWxcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZW50aXR5TmFtZSBOYW1lIG9mIHRoZSBlbnRpdHlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0aW9uIE5hbWUgb2YgdGhlIG9wZXJhdGlvbiAoUkVBRCwgSU5TRVJULCBVUERBVEUsIERFTEVURSlcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlLCBpZiB0aGUgZ2l2ZW4gb3BlcmF0aW9uIGNhbiBiZSBwZXJmb3JtZWQgYXMgcGVyIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIGlzT3BlcmF0aW9uQWxsb3dlZChkYXRhTW9kZWxOYW1lOiBzdHJpbmcsIGVudGl0eU5hbWU6IHN0cmluZywgb3BlcmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmUoZGF0YU1vZGVsTmFtZSwgZW50aXR5TmFtZSkudGhlbiggc3RvcmUgPT4ge1xuICAgICAgICAgICAgaWYgKCFzdG9yZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdSRUFEJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZS5lbnRpdHlTY2hlbWEucHVzaENvbmZpZy5yZWFkRW5hYmxlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdJTlNFUlQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmVudGl0eVNjaGVtYS5wdXNoQ29uZmlnLmluc2VydEVuYWJsZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnVVBEQVRFJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZS5lbnRpdHlTY2hlbWEucHVzaENvbmZpZy51cGRhdGVFbmFibGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ0RFTEVURScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmUuZW50aXR5U2NoZW1hLnB1c2hDb25maWcuZGVsZXRlRW5hYmxlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZERhdGFiYXNlcygpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBsZXQgbmV3RGF0YWJhc2VzQ3JlYXRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5kYXRhYmFzZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5kYXRhYmFzZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWUgPSAnTG9jYWxEYXRhYmFzZSc7XG4gICAgICAgICAgICAgICAgdGhpcy5kYkluc3RhbGxQYXJlbnREaXJlY3RvcnkgPSBjb3Jkb3ZhLmZpbGUuYXBwbGljYXRpb25TdG9yYWdlRGlyZWN0b3J5ICsgICdMaWJyYXJ5Lyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGJJbnN0YWxsRGlyZWN0b3J5TmFtZSA9ICdkYXRhYmFzZXMnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5ID0gY29yZG92YS5maWxlLmFwcGxpY2F0aW9uU3RvcmFnZURpcmVjdG9yeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGJJbnN0YWxsRGlyZWN0b3J5ID0gdGhpcy5kYkluc3RhbGxQYXJlbnREaXJlY3RvcnkgKyB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWU7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2VzID0gbmV3IE1hcDxzdHJpbmcsIERCSW5mbz4oKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldFVwRGF0YWJhc2VzKClcbiAgICAgICAgICAgICAgICAudGhlbiggZmxhZyA9PiBuZXdEYXRhYmFzZXNDcmVhdGVkID0gZmxhZylcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmxvYWREQlNjaGVtYXMoKSlcbiAgICAgICAgICAgICAgICAudGhlbihtZXRhZGF0YSA9PiB0aGlzLmxvYWROYW1lZFF1ZXJpZXMobWV0YWRhdGEpKVxuICAgICAgICAgICAgICAgIC50aGVuKG1ldGFkYXRhID0+IHRoaXMubG9hZE9mZmxpbmVDb25maWcobWV0YWRhdGEpKVxuICAgICAgICAgICAgICAgIC50aGVuKG1ldGFkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKF8ubWFwKG1ldGFkYXRhLCBkYk1ldGFkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5EYXRhYmFzZShkYk1ldGFkYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGRhdGFiYXNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhYmFzZXNbZGJNZXRhZGF0YS5zY2hlbWEubmFtZV0gPSBkYXRhYmFzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdG9yZSgnd2F2ZW1ha2VyJywgJ2tleS12YWx1ZScpLnRoZW4oIHN0b3JlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYWxLZXlWYWx1ZVNlcnZpY2UuaW5pdChzdG9yZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbEtleVZhbHVlU2VydmljZS5nZXQoTkVYVF9JRF9DT1VOVCkudGhlbih2YWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0SWQgPSB2YWwgfHwgdGhpcy5uZXh0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdEYXRhYmFzZXNDcmVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVEYXRhKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmRpc2FibGVGb3JlaWduS2V5cygpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuZGV2aWNlU2VydmljZS5nZXRBcHBCdWlsZFRpbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihkYlNlZWRDcmVhdGlvblRpbWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhlY3V0ZVByb21pc2VDaGFpbihfLm1hcCh0aGlzLmNhbGxiYWNrcywgJ29uRGJDcmVhdGUnKSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhYmFzZXMnIDogdGhpcy5kYXRhYmFzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJDcmVhdGVkT24nIDogXy5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYlNlZWRDcmVhdGVkT24nIDogZGJTZWVkQ3JlYXRpb25UaW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHRoaXMuZGF0YWJhc2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFiYXNlcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdXNpbmcgdGhpcyBmdW5jdGlvbiBvbmUgY2FuIGxpc3RlbiBldmVudHMgc3VjaCBhcyBvbkRiQ3JlYXRlLCAncHJlRXhwb3J0JyBhbmQgJ3Bvc3RJbXBvcnQnLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGxpc3RlbmVyIGFuIG9iamVjdCB3aXRoIGZ1bmN0aW9ucyBtYXBwZWQgdG8gZXZlbnQgbmFtZXMuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyQ2FsbGJhY2sobGlzdGVuZXI6IENhbGxCYWNrKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2tzLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRMb2dTUWwoZmxhZzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9sb2dTcWwgPSBmbGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYW55IGV4aXN0aW5nIGRhdGFiYXNlcyAoZXhjZXB0IHdhdmVtYWtlciBkYikgYW5kIGNvcGllcyB0aGUgZGF0YWJhc2VzIHRoYXQgYXJlIHBhY2thZ2VkIHdpdGggdGhlIGFwcC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHByaXZhdGUgY2xlYW5BbmRDb3B5RGF0YWJhc2VzKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGRiU2VlZEZvbGRlciA9IGNvcmRvdmEuZmlsZS5hcHBsaWNhdGlvbkRpcmVjdG9yeSArIE1FVEFfTE9DQVRJT047XG4gICAgICAgIHJldHVybiB0aGlzLmZpbGUuY3JlYXRlRGlyKHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5LCB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWUsIGZhbHNlKVxuICAgICAgICAgICAgLmNhdGNoKG5vb3ApXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLmxpc3RGaWxlcyh0aGlzLmRiSW5zdGFsbERpcmVjdG9yeSwgLy4rXFwuZGIkLykpXG4gICAgICAgICAgICAudGhlbihmaWxlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGZpbGVzLm1hcChmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmWyduYW1lJ10gIT09ICd3YXZlbWFrZXIuZGInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZS5yZW1vdmVGaWxlKHRoaXMuZGJJbnN0YWxsRGlyZWN0b3J5LCBmWyduYW1lJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCAoKSA9PiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLmxpc3RGaWxlcyhkYlNlZWRGb2xkZXIsIC8uK1xcLmRiJC8pKVxuICAgICAgICAgICAgLnRoZW4oZmlsZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGUuY3JlYXRlRGlyKHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5LCB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWUsIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKG5vb3ApXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiBQcm9taXNlLmFsbChmaWxlcy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPT4gdGhpcy5maWxlLmNvcHlGaWxlKGRiU2VlZEZvbGRlciwgZlsnbmFtZSddLCB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeSwgZlsnbmFtZSddKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBpY2tzIGVzc2VudGlhbCBkZXRhaWxzIGZyb20gdGhlIGdpdmVuIHNjaGVtYS5cbiAgICBwcml2YXRlIGNvbXBhY3RFbnRpdHlTY2hlbWEoc2NoZW1hLCBlbnRpdHksIHRyYW5zZm9ybWVkU2NoZW1hcyk6IEVudGl0eUluZm8ge1xuICAgICAgICBjb25zdCByZXFFbnRpdHkgPSB0cmFuc2Zvcm1lZFNjaGVtYXNbZW50aXR5WydlbnRpdHlOYW1lJ11dIGFzIEVudGl0eUluZm87XG4gICAgICAgIHJlcUVudGl0eS5lbnRpdHlOYW1lID0gZW50aXR5WydlbnRpdHlOYW1lJ107XG4gICAgICAgIHJlcUVudGl0eS5uYW1lID0gZW50aXR5WyduYW1lJ107XG4gICAgICAgIHJlcUVudGl0eS5jb2x1bW5zID0gW107XG4gICAgICAgIGVudGl0eS5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIGxldCBkZWZhdWx0VmFsdWUgPSBjb2wuY29sdW1uVmFsdWUgPyBjb2wuY29sdW1uVmFsdWUuZGVmYXVsdFZhbHVlIDogJyc7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gY29sLnNxbFR5cGU7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgIWNvbC5wcmltYXJ5S2V5KSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gXy5pc0VtcHR5KGRlZmF1bHRWYWx1ZSkgPyBudWxsIDogXy5wYXJzZUludChkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBfLmlzRW1wdHkoZGVmYXVsdFZhbHVlKSA/IG51bGwgOiAoZGVmYXVsdFZhbHVlID09PSAndHJ1ZScgPyAxIDogMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IF8uaXNFbXB0eShkZWZhdWx0VmFsdWUpID8gbnVsbCA6IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcUVudGl0eS5jb2x1bW5zLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IGNvbFsnbmFtZSddLFxuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogY29sWydmaWVsZE5hbWUnXSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0b3JUeXBlOiBjb2xbJ2dlbmVyYXRvclR5cGUnXSxcbiAgICAgICAgICAgICAgICBzcWxUeXBlOiBjb2xbJ3NxbFR5cGUnXSxcbiAgICAgICAgICAgICAgICBwcmltYXJ5S2V5OiBjb2xbJ3ByaW1hcnlLZXknXSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF8uZm9yRWFjaChlbnRpdHkucmVsYXRpb25zLCByID0+IHtcbiAgICAgICAgICAgIGxldCB0YXJnZXRFbnRpdHlTY2hlbWEsIHRhcmdldEVudGl0eSwgY29sLCBzb3VyY2VDb2x1bW4sIG1hcHBpbmc7XG4gICAgICAgICAgICBpZiAoci5jYXJkaW5hbGl0eSA9PT0gJ01hbnlUb09uZScgfHwgci5jYXJkaW5hbGl0eSA9PT0gJ09uZVRvT25lJykge1xuICAgICAgICAgICAgICAgIHRhcmdldEVudGl0eSA9IF8uZmluZChzY2hlbWEudGFibGVzLCB0ID0+IHQubmFtZSA9PT0gci50YXJnZXRUYWJsZSk7XG4gICAgICAgICAgICAgICAgbWFwcGluZyA9IHIubWFwcGluZ3NbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldEVudGl0eSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbnRpdHkgPSB0YXJnZXRFbnRpdHkuZW50aXR5TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlQ29sdW1uID0gbWFwcGluZy5zb3VyY2VDb2x1bW47XG4gICAgICAgICAgICAgICAgICAgIGNvbCA9IHJlcUVudGl0eS5jb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbi5uYW1lID09PSBzb3VyY2VDb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbnRpdHlTY2hlbWEgPSBzY2hlbWEudGFibGVzLmZpbmQodGFibGUgPT4gdGFibGUubmFtZSA9PT0gci50YXJnZXRUYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcmVpZ25SZWxhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkTmFtZTogci5maWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbnRpdHk6IHRhcmdldEVudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFRhYmxlOiByLnRhcmdldFRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29sdW1uOiBtYXBwaW5nLnRhcmdldENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFBhdGg6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcHBlcjogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRGaWVsZE5hbWU6IHRhcmdldEVudGl0eVNjaGVtYS5jb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbi5uYW1lID09PSBtYXBwaW5nLnRhcmdldENvbHVtbikuZmllbGROYW1lXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGZvcmVpZ25SZWxhdGlvbi50YXJnZXRQYXRoID0gZm9yZWlnblJlbGF0aW9uLnNvdXJjZUZpZWxkTmFtZSArICcuJyArIGZvcmVpZ25SZWxhdGlvbi50YXJnZXRGaWVsZE5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGZvcmVpZ25SZWxhdGlvbi5kYXRhTWFwcGVyID0gXy5jaGFpbih0YXJnZXRFbnRpdHlTY2hlbWEuY29sdW1ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5rZXlCeShjaGlsZENvbCA9PiBmb3JlaWduUmVsYXRpb24uc291cmNlRmllbGROYW1lICsgJy4nICsgY2hpbGRDb2wuZmllbGROYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcFZhbHVlcyhjaGlsZENvbCA9PiBuZXcgQ29sdW1uSW5mbyhjaGlsZENvbC5uYW1lLCBjaGlsZENvbC5maWVsZE5hbWUpKS52YWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb2wuZm9yZWlnblJlbGF0aW9ucyA9IGNvbC5mb3JlaWduUmVsYXRpb25zIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb2wuZm9yZWlnblJlbGF0aW9ucy5wdXNoKGZvcmVpZ25SZWxhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcUVudGl0eTtcbiAgICB9XG5cbiAgICAvLyBMb2FkcyBuZWNlc3NhcnkgZGV0YWlscyBvZiBxdWVyaWVzXG4gICAgcHJpdmF0ZSBjb21wYWN0UXVlcmllcyhxdWVyaWVzQnlEQik6IE1hcDxzdHJpbmcsIE5hbWVkUXVlcnlJbmZvPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBuZXcgTWFwPHN0cmluZywgTmFtZWRRdWVyeUluZm8+KCk7XG5cbiAgICAgICAgXy5mb3JFYWNoKHF1ZXJpZXNCeURCLnF1ZXJpZXMsIHF1ZXJ5RGF0YSA9PiB7XG4gICAgICAgICAgICBsZXQgcXVlcnksIHBhcmFtcztcbiAgICAgICAgICAgIGlmIChxdWVyeURhdGEubmF0aXZlU3FsICYmIHF1ZXJ5RGF0YS50eXBlID09PSAnU0VMRUNUJykge1xuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gXy5pc0VtcHR5KHF1ZXJ5RGF0YS5vZmZsaW5lUXVlcnlTdHJpbmcpID8gcXVlcnlEYXRhLnF1ZXJ5U3RyaW5nIDogcXVlcnlEYXRhLm9mZmxpbmVRdWVyeVN0cmluZztcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBfLm1hcCh0aGlzLmV4dHJhY3RRdWVyeVBhcmFtcyhxdWVyeSksIHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbU9iaiA9IF8uZmluZChxdWVyeURhdGEucGFyYW1ldGVycywgeyduYW1lJzogcH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcGFyYW1PYmoubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHBhcmFtT2JqLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZVR5cGU6IHBhcmFtT2JqLnZhcmlhYmxlVHlwZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHBhcmFtcy5mb3JFYWNoKHAgPT4gcXVlcnkgPSBfLnJlcGxhY2UocXVlcnksICc6JyArIHAubmFtZSwgJz8nKSk7XG4gICAgICAgICAgICAgICAgcXVlcmllc1txdWVyeURhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHF1ZXJ5RGF0YS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogXy5tYXAocXVlcnlEYXRhLnJlc3BvbnNlLnByb3BlcnRpZXMsIHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAubmFtZUluVXBwZXJDYXNlID0gcC5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBxdWVyaWVzO1xuICAgIH1cblxuICAgIC8vIExvYWRzIG5lY2Vzc2FyeSBkZXRhaWxzIG9mIHJlbW90ZSBzY2hlbWFcbiAgICBwcml2YXRlIGNvbXBhY3RTY2hlbWEoc2NoZW1hKTogREJJbmZvIHtcbiAgICAgICAgY29uc3QgZGJJbmZvID0gbmV3IERCSW5mbygpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFNjaGVtYXMgPSBuZXcgTWFwPHN0cmluZywgRW50aXR5SW5mbz4oKTtcbiAgICAgICAgc2NoZW1hLnRhYmxlcy5mb3JFYWNoKGVudGl0eVNjaGVtYSA9PiB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFNjaGVtYXNbZW50aXR5U2NoZW1hLmVudGl0eU5hbWVdID0ge307XG4gICAgICAgIH0pO1xuICAgICAgICBzY2hlbWEudGFibGVzLmZvckVhY2goZW50aXR5U2NoZW1hID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcGFjdEVudGl0eVNjaGVtYShzY2hlbWEsIGVudGl0eVNjaGVtYSwgdHJhbnNmb3JtZWRTY2hlbWFzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRiSW5mby5zY2hlbWEubmFtZSA9IHNjaGVtYS5uYW1lO1xuICAgICAgICBkYkluZm8uc2NoZW1hLmlzSW50ZXJuYWwgPSBzY2hlbWEuaXNJbnRlcm5hbDtcbiAgICAgICAgZGJJbmZvLnNjaGVtYS5lbnRpdGllcyA9IHRyYW5zZm9ybWVkU2NoZW1hcztcbiAgICAgICAgcmV0dXJuIGRiSW5mbztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRCb29sVG9JbnQoYm9vbDogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gXy50b1N0cmluZyhib29sKSA9PT0gJ3RydWUnID8gMSA6IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb252ZXJ0SW50VG9Cb29sKGludDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBpbnQgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHVybnMgb2ZmIGZvcmVpZ24ga2V5c1xuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHByaXZhdGUgZGlzYWJsZUZvcmVpZ25LZXlzKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXy5tYXAodGhpcy5kYXRhYmFzZXMsIGRiID0+XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVTUUxRdWVyeShkYi5zY2hlbWEubmFtZSwgJ1BSQUdNQSBmb3JlaWduX2tleXMgPSBPRkYnKVxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyBTUUwgcXVlcnk7XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGJOYW1lXG4gICAgICogQHBhcmFtIHNxbFxuICAgICAqIEBwYXJhbSBwYXJhbXNcbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhlY3V0ZVNRTFF1ZXJ5KGRiTmFtZSwgc3FsLCBwYXJhbXM/OiBhbnlbXSwgbG9nT3V0cHV0PzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBkYiA9IHRoaXMuZGF0YWJhc2VzW2RiTmFtZV07XG4gICAgICAgIGlmIChkYikge1xuICAgICAgICAgICAgcmV0dXJuIGRiLnNxbGl0ZU9iamVjdC5leGVjdXRlU3FsKHNxbCwgcGFyYW1zLCBsb2dPdXRwdXQpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm93cyA9IHJlc3VsdC5yb3dzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChyb3dzLml0ZW0oaSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAncm93c0FmZmVjdGVkJyAgOiByZXN1bHQucm93c0FmZmVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3Jvd3MnICAgICAgICAgIDogZGF0YVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChgTm8gRGF0YWJhc2Ugd2l0aCBuYW1lICR7ZGJOYW1lfSBmb3VuZGApO1xuICAgIH1cblxuICAgIC8vIGdldCB0aGUgcGFyYW1zIG9mIHRoZSBxdWVyeSBvciBwcm9jZWR1cmUuXG4gICAgcHJpdmF0ZSBleHRyYWN0UXVlcnlQYXJhbXMocXVlcnkpIHtcbiAgICAgICAgbGV0IHBhcmFtcywgYWxpYXNQYXJhbXM7XG4gICAgICAgIGFsaWFzUGFyYW1zID0gcXVlcnkubWF0Y2goL1teXCInXFx3XFxcXF06XFxzKlxcdytcXHMqL2cpIHx8IFtdO1xuICAgICAgICBpZiAoYWxpYXNQYXJhbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBhbGlhc1BhcmFtcy5tYXAoeCA9PiAoL1s9fFxcV10vZy50ZXN0KHgpKSA/IHgucmVwbGFjZSgvXFxXL2csICcnKS50cmltKCkgOiB4LnRyaW0oKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIGFwcGxpY2F0aW9uIGluZm8gc3VjaCBhcyBwYWNrYWdlTmFtZSwgYXBwTmFtZSwgdmVyc2lvbk51bWJlciwgdmVyc2lvbkNvZGUuXG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRBcHBJbmZvKCkge1xuICAgICAgICBjb25zdCBhcHBJbmZvID0ge1xuICAgICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgICBwYWNrYWdlTmFtZTogJycsXG4gICAgICAgICAgICB2ZXJzaW9uTnVtYmVyOiAnJyxcbiAgICAgICAgICAgIHZlcnNpb25Db2RlOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLmFwcFZlcnNpb24uZ2V0UGFja2FnZU5hbWUoKVxuICAgICAgICAgICAgLnRoZW4ocGFja2FnZU5hbWUgPT4ge1xuICAgICAgICAgICAgICAgIGFwcEluZm8ucGFja2FnZU5hbWUgPSBwYWNrYWdlTmFtZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBWZXJzaW9uLmdldEFwcE5hbWUoKTtcbiAgICAgICAgICAgIH0pLnRoZW4oYXBwTmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgYXBwSW5mby5uYW1lID0gYXBwTmFtZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBWZXJzaW9uLmdldFZlcnNpb25OdW1iZXIoKTtcbiAgICAgICAgICAgIH0pLnRoZW4odmVyc2lvbk51bWJlciA9PiB7XG4gICAgICAgICAgICAgICAgYXBwSW5mby52ZXJzaW9uTnVtYmVyID0gdmVyc2lvbk51bWJlcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBWZXJzaW9uLmdldFZlcnNpb25Db2RlKCk7XG4gICAgICAgICAgICB9KS50aGVuKHZlcnNpb25Db2RlID0+IHtcbiAgICAgICAgICAgICAgICBhcHBJbmZvLnZlcnNpb25Db2RlID0gKHZlcnNpb25Db2RlIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcEluZm87XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENhbGxiYWNrc0ZvcihldmVudDogc3RyaW5nKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsYmFja3MubWFwKGMgPT4ge1xuICAgICAgICAgICAgaWYgKGNbZXZlbnRdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNbZXZlbnRdLmJpbmQoYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoZXMgZm9yIHRoZSBmaWxlcyB3aXRoIGdpdmVuIHJlZ2V4IGluICd3d3cvbWV0YWRhdGEvYXBwJ2FuZCByZXR1cm5zIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIEpTT05cbiAgICAgKiBjb250ZW50IHByZXNlbnQgaW4gZWFjaCBmaWxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lUmVnZXggcmVnZXggcGF0dGVybiB0byBzZWFyY2ggZm9yIGZpbGVzLlxuICAgICAqIEByZXR1cm5zIHsqfSBBIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIGFuIGFycmF5XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRNZXRhSW5mbyhmaWxlTmFtZVJlZ2V4OiBSZWdFeHApIHtcbiAgICAgICAgY29uc3QgZm9sZGVyID0gY29yZG92YS5maWxlLmFwcGxpY2F0aW9uRGlyZWN0b3J5ICsgTUVUQV9MT0NBVElPTiArICcvJztcbiAgICAgICAgcmV0dXJuIHRoaXMuZGV2aWNlRmlsZVNlcnZpY2UubGlzdEZpbGVzKGZvbGRlciwgZmlsZU5hbWVSZWdleClcbiAgICAgICAgICAgIC50aGVuKGZpbGVzID0+IFByb21pc2UuYWxsKF8ubWFwKGZpbGVzLCBmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvcmRvdmEgRmlsZSByZWFkZXIgaGFzIGJ1ZmZlciBpc3N1ZXMgd2l0aCBsYXJnZSBmaWxlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvLCB1c2luZyBhamF4IHRvIHJldHJpZXZlIGxvY2FsIGpzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICQuZ2V0SlNPTih0cmFuc2Zvcm1GaWxlVVJJKGZvbGRlcikgKyBmWyduYW1lJ10sIGRhdGEgPT4gcmVzb2x2ZShkYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUsIGlmIHRoZSBnaXZlbiBlbnRpdHkncyBkYXRhIGlzIGJ1bmRsZWQgYWxvbmcgd2l0aCBhcHBsaWNhdGlvbiBpbnN0YWxsZXIuXG4gICAgICogQHBhcmFtIGRhdGFNb2RlbE5hbWUgbmFtZSBvZiB0aGUgZGF0YSBtb2RlbFxuICAgICAqIEBwYXJhbSBlbnRpdHlOYW1lIG5hbWUgb2YgdGhlIGVudGl0eVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAgICovXG4gICAgcHVibGljIGlzQnVuZGxlZChkYXRhTW9kZWxOYW1lLCBlbnRpdHlOYW1lKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmUoZGF0YU1vZGVsTmFtZSwgZW50aXR5TmFtZSkudGhlbihzdG9yZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZW50aXR5U2NoZW1hLnB1bGxDb25maWcucHVsbFR5cGUgPT09IFB1bGxUeXBlLkJVTkRMRUQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIGxvY2FsIGRhdGFiYXNlIHNjaGVtYXMgZnJvbSAqX2RhdGFfbW9kZWwuanNvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHsqfSBBIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIG1ldGFkYXRhLlxuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZERCU2NoZW1hcygpOiBQcm9taXNlPE1hcDxzdHJpbmcsIERCSW5mbz4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWV0YUluZm8oLy4rX2RhdGFNb2RlbFxcLmpzb24kLylcbiAgICAgICAgICAgIC50aGVuKCAoc2NoZW1hczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBuZXcgTWFwPHN0cmluZywgREJJbmZvPigpO1xuICAgICAgICAgICAgICAgIHNjaGVtYXMgPSBpc0FycmF5KHNjaGVtYXMpID8gc2NoZW1hcyA6IFtzY2hlbWFzXTtcbiAgICAgICAgICAgICAgICBzY2hlbWFzLnB1c2goT0ZGTElORV9XQVZFTUFLRVJfREFUQUJBU0VfU0NIRU1BKTtcbiAgICAgICAgICAgICAgICBzY2hlbWFzLm1hcChzID0+IHRoaXMuY29tcGFjdFNjaGVtYShzKSlcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2gocyA9PiAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGFbcy5zY2hlbWEubmFtZV0gPSBzO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0YWRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIG5hbWVkIHF1ZXJpZXMgZnJvbSAqX3F1ZXJ5Lmpzb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0geyp9IG1ldGFkYXRhXG4gICAgICogQHJldHVybnMgeyp9IEEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdpdGggbWV0YWRhdGFcbiAgICAgKi9cbiAgICBwcml2YXRlIGxvYWROYW1lZFF1ZXJpZXMobWV0YWRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWV0YUluZm8oLy4rX3F1ZXJ5XFwuanNvbiQvKVxuICAgICAgICAgICAgLnRoZW4oKHF1ZXJpZXNCeURCczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcXVlcmllc0J5REJzID0gXy5pc0FycmF5KHF1ZXJpZXNCeURCcykgPyBxdWVyaWVzQnlEQnMgOiBbcXVlcmllc0J5REJzXTtcbiAgICAgICAgICAgICAgICBxdWVyaWVzQnlEQnMubWFwKGUgPT4gbWV0YWRhdGFbZS5uYW1lXS5xdWVyaWVzID0gdGhpcy5jb21wYWN0UXVlcmllcyhlKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCBvZmZsaW5lIGNvbmZpZ3VyYXRpb24gZnJvbSAqX29mZmxpbmUuanNvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Kn0gbWV0YWRhdGFcbiAgICAgKiBAcmV0dXJucyB7Kn0gQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2l0aCBtZXRhZGF0YVxuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZE9mZmxpbmVDb25maWcobWV0YWRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWV0YUluZm8oLy4rX29mZmxpbmVcXC5qc29uJC8pXG4gICAgICAgICAgICAudGhlbihjb25maWdzID0+IHtcbiAgICAgICAgICAgICAgICBfLmZvckVhY2goY29uZmlncywgY29uZmlnID0+IHtcbiAgICAgICAgICAgICAgICAgICAgXy5mb3JFYWNoKGNvbmZpZy5lbnRpdGllcywgZW50aXR5Q29uZmlnID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eVNjaGVtYSA9IF8uZmluZChtZXRhZGF0YVtjb25maWcubmFtZV0uc2NoZW1hLmVudGl0aWVzLCBzY2hlbWEgPT4gc2NoZW1hLm5hbWUgPT09IGVudGl0eUNvbmZpZy5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF8uYXNzaWduSW4oZW50aXR5U2NoZW1hLCBlbnRpdHlDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0YWRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvZ1NxbChzcWxpdGVPYmplY3Q6IFNRTGl0ZU9iamVjdCkge1xuICAgICAgICBjb25zdCBsb2dnZXIgPSBjb25zb2xlLFxuICAgICAgICAgICAgb3JpZ2luYWxFeGVjdXRlU3FsID0gc3FsaXRlT2JqZWN0LmV4ZWN1dGVTcWw7XG4gICAgICAgIHNxbGl0ZU9iamVjdC5leGVjdXRlU3FsID0gKHNxbCwgcGFyYW1zLCBsb2dPdXRwdXQ/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBfLm5vdygpO1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRXhlY3V0ZVNxbC5jYWxsKHNxbGl0ZU9iamVjdCwgc3FsLCBwYXJhbXMpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobG9nT3V0cHV0IHx8IHRoaXMuX2xvZ1NxbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmpBcnIgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0NvdW50ID0gcmVzdWx0LnJvd3MubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iakFyci5wdXNoKHJlc3VsdC5yb3dzLml0ZW0oaSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnU1FMIFwiJXNcIiAgd2l0aCBwYXJhbXMgJU8gdG9vayBbJWQgbXNdLiBBbmQgdGhlIHJlc3VsdCBpcyAlTycsIHNxbCwgcGFyYW1zLCBfLm5vdygpIC0gc3RhcnRUaW1lLCBvYmpBcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU1FMIFwiJXNcIiB3aXRoIHBhcmFtcyAlTyBmYWlsZWQgd2l0aCBlcnJvciBtZXNzYWdlICVzJywgc3FsLCBwYXJhbXMsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTUUxpdGUgZG9lcyBub3Qgc3VwcG9ydCBib29sZWFuIGRhdGEuIEluc3RlYWQgb2YgdXNpbmcgYm9vbGVhbiB2YWx1ZXMsIGRhdGEgd2lsbCBiZSBjaGFuZ2VkIHRvIDAgb3IgMS5cbiAgICAgKiBJZiB0aGUgdmFsdWUgaXMgJ3RydWUnLCB0aGVuIDEgaXMgc2V0IGFzIHZhbHVlLiBJZiB2YWx1ZSBpcyBub3QgMSBub3IgbnVsbCwgdGhlbiBjb2x1bW4gdmFsdWUgaXMgc2V0IGFzIDAuXG4gICAgICogQHBhcmFtIGRiTmFtZVxuICAgICAqIEBwYXJhbSB0YWJsZU5hbWVcbiAgICAgKiBAcGFyYW0gY29sTmFtZVxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHByaXZhdGUgbm9ybWFsaXplQm9vbGVhbkRhdGEoZGJOYW1lLCB0YWJsZU5hbWUsIGNvbE5hbWUpIHtcbiAgICAgICAgY29uc3QgdHJ1ZVRvMVF1ZXJ5ID0gYHVwZGF0ZSAke2VzY2FwZU5hbWUodGFibGVOYW1lKX0gc2V0ICR7ZXNjYXBlTmFtZShjb2xOYW1lKX0gPSAxIHdoZXJlICR7ZXNjYXBlTmFtZShjb2xOYW1lKX0gPSAndHJ1ZSdgLFxuICAgICAgICAgICAgZXhjZXB0TnVsbEFuZDF0bzBRdWVyeSA9IGB1cGRhdGUgJHtlc2NhcGVOYW1lKHRhYmxlTmFtZSl9IHNldCAke2VzY2FwZU5hbWUoY29sTmFtZSl9ID0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlICR7ZXNjYXBlTmFtZShjb2xOYW1lKX0gaXMgbm90IG51bGwgYW5kICR7ZXNjYXBlTmFtZShjb2xOYW1lKX0gIT0gMWA7XG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGVTUUxRdWVyeShkYk5hbWUsIHRydWVUbzFRdWVyeSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuZXhlY3V0ZVNRTFF1ZXJ5KGRiTmFtZSwgZXhjZXB0TnVsbEFuZDF0bzBRdWVyeSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGRhdGEgdG8gc3VwcG9ydCBTUUxpdGUuXG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICovXG4gICAgcHJpdmF0ZSBub3JtYWxpemVEYXRhKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXy5tYXAodGhpcy5kYXRhYmFzZXMsIGRhdGFiYXNlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChfLm1hcChkYXRhYmFzZS5zY2hlbWEuZW50aXRpZXMsIGVudGl0eVNjaGVtYSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKF8ubWFwKGVudGl0eVNjaGVtYS5jb2x1bW5zLCBjb2x1bW4gPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnNxbFR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplQm9vbGVhbkRhdGEoZGF0YWJhc2Uuc2NoZW1hLm5hbWUsIGVudGl0eVNjaGVtYS5uYW1lLCBjb2x1bW4ubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5EYXRhYmFzZShkYXRhYmFzZTogREJJbmZvKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNxbGl0ZS5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IGRhdGFiYXNlLnNjaGVtYS5uYW1lICsgJy5kYicsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246ICdkZWZhdWx0J1xuICAgICAgICB9KS50aGVuKHNxbGl0ZU9iamVjdCA9PiB7XG4gICAgICAgICAgICBkYXRhYmFzZS5zcWxpdGVPYmplY3QgPSBzcWxpdGVPYmplY3Q7XG4gICAgICAgICAgICB0aGlzLmxvZ1NxbChzcWxpdGVPYmplY3QpO1xuICAgICAgICAgICAgY29uc3Qgc3RvcmVQcm9taXNlcyA9IF8ubWFwKGRhdGFiYXNlLnNjaGVtYS5lbnRpdGllcywgZW50aXR5U2NoZW1hID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdG9yZSA9IG5ldyBMb2NhbERCU3RvcmUodGhpcy5kZXZpY2VGaWxlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5U2NoZW1hLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIHNxbGl0ZU9iamVjdFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZS5jcmVhdGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHN0b3JlUHJvbWlzZXMpLnRoZW4oc3RvcmVzID0+IHtcbiAgICAgICAgICAgICAgICBfLmZvckVhY2goc3RvcmVzLCBzdG9yZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlLnN0b3Jlc1tzdG9yZS5lbnRpdHlTY2hlbWEuZW50aXR5TmFtZV0gPSBzdG9yZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YWJhc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hlbiBhcHAgaXMgb3BlbmVkIGZvciBmaXJzdCB0aW1lICBhZnRlciBhIGZyZXNoIGluc3RhbGwgb3IgdXBkYXRlLCB0aGVuIG9sZCBkYXRhYmFzZXMgYXJlIHJlbW92ZWQgYW5kXG4gICAgICogbmV3IGRhdGFiYXNlcyBhcmUgY3JlYXRlZCB1c2luZyBidW5kbGVkIGRhdGFiYXNlcy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHsqfSBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIHRydWUsIGlmIHRoZSBkYXRhYmFzZXMgYXJlIG5ld2x5IGNyZWF0ZWQgb3IgcmVzb2x2ZWQgd2l0aCBmYWxzZVxuICAgICAqIGlmIGV4aXN0aW5nIGRhdGFiYXNlcyBhcmUgYmVpbmcgdXNlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldFVwRGF0YWJhc2VzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VTZXJ2aWNlLmdldEFwcEJ1aWxkVGltZSgpXG4gICAgICAgICAgICAudGhlbigoYnVpbGRUaW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGJJbmZvID0gdGhpcy5kZXZpY2VTZXJ2aWNlLmdldEVudHJ5KCdkYXRhYmFzZScpIHx8IHt9O1xuICAgICAgICAgICAgICAgIGlmICghZGJJbmZvLmxhc3RCdWlsZFRpbWUgfHwgZGJJbmZvLmxhc3RCdWlsZFRpbWUgIT09IGJ1aWxkVGltZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbkFuZENvcHlEYXRhYmFzZXMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiSW5mby5sYXN0QnVpbGRUaW1lID0gYnVpbGRUaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRldmljZVNlcnZpY2Uuc3RvcmVFbnRyeSgnZGF0YWJhc2UnLCBkYkluZm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
854
+ }], () => [{ type: i1.AppVersion }, { type: i2.DeviceService }, { type: i2.DeviceFileService }, { type: i3.File }, { type: i4.LocalKeyValueService }, { type: i5.SecurityService }, { type: i6.SQLite }], null); })();
855
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtZGItbWFuYWdlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW9iaWxlL29mZmxpbmUvc3JjL3NlcnZpY2VzL2xvY2FsLWRiLW1hbmFnZW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxxQ0FBcUMsQ0FBQztBQUUzRSxPQUFPLEVBQ0gsUUFBUSxFQUNSLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLFNBQVMsRUFDVCxLQUFLLEVBQ0wsSUFBSSxFQUNKLFNBQVMsRUFDVCxnQkFBZ0IsRUFDbkIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUE4QixRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RixPQUFPLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixPQUFPLEVBQ1AsT0FBTyxFQUNQLFdBQVcsRUFDWCxHQUFHLEVBQ0gsR0FBRyxF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RkFDbEIsd0JBQXdCO2NBRHBDLFVBQVU7ZUFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFwcFZlcnNpb24gfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvYXBwLXZlcnNpb24vbmd4JztcbmltcG9ydCB7IEZpbGUgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvZmlsZS9uZ3gnO1xuaW1wb3J0IHsgU1FMaXRlLCBTUUxpdGVPYmplY3QgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvc3FsaXRlL25neCc7XG5cbmltcG9ydCB7XG4gICAgRGF0YVR5cGUsXG4gICAgREVGQVVMVF9GT1JNQVRTLFxuICAgIGV4ZWN1dGVQcm9taXNlQ2hhaW4sXG4gICAgZXh0cmFjdFR5cGUsXG4gICAgaXNBbmRyb2lkLFxuICAgIGlzSW9zLFxuICAgIG5vb3AsXG4gICAgdG9Qcm9taXNlLFxuICAgIHRyYW5zZm9ybUZpbGVVUklcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgRGV2aWNlRmlsZVNlcnZpY2UsIERldmljZVNlcnZpY2UgfSBmcm9tICdAd20vbW9iaWxlL2NvcmUnO1xuaW1wb3J0IHsgU2VjdXJpdHlTZXJ2aWNlIH0gZnJvbSAnQHdtL3NlY3VyaXR5JztcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAd20vdmFyaWFibGVzJztcblxuaW1wb3J0IHsgTG9jYWxLZXlWYWx1ZVNlcnZpY2UgfSBmcm9tICcuL2xvY2FsLWtleS12YWx1ZS5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsREJTdG9yZSB9IGZyb20gJy4uL21vZGVscy9sb2NhbC1kYi1zdG9yZSc7XG5pbXBvcnQgeyBlc2NhcGVOYW1lIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mbywgREJJbmZvLCBFbnRpdHlJbmZvLCBOYW1lZFF1ZXJ5SW5mbywgUHVsbFR5cGUgfSBmcm9tICcuLi9tb2RlbHMvY29uZmlnJztcbmltcG9ydCB7XG4gICAgY2hhaW4sXG4gICAgZmluZCxcbiAgICBmb3JFYWNoLFxuICAgIGlzRW1wdHksXG4gICAgaXNVbmRlZmluZWQsXG4gICAgbWFwLFxuICAgIG5vdyxcbiAgICBwYXJzZUludCxcbiAgICByZXBsYWNlLFxuICAgIHRvVXBwZXIsXG4gICAgdG9TdHJpbmcsXG4gICAgdmFsdWVzLFxuICAgIGlzQXJyYXksIGFzc2lnbkluXG59IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmRlY2xhcmUgY29uc3QgbW9tZW50O1xuZGVjbGFyZSBjb25zdCBjb3Jkb3ZhO1xuZGVjbGFyZSBjb25zdCBaZWVwO1xuXG5jb25zdCAgTkVYVF9JRF9DT1VOVCA9ICdsb2NhbERCU3RvcmUubmV4dElkQ291bnQnO1xuY29uc3QgTUVUQV9MT0NBVElPTiA9ICd3d3cvbWV0YWRhdGEvYXBwJztcbmNvbnN0IE9GRkxJTkVfV0FWRU1BS0VSX0RBVEFCQVNFX1NDSEVNQSA9IHtcbiAgICBuYW1lOiAnd2F2ZW1ha2VyJyxcbiAgICB2ZXJzaW9uOiAxLFxuICAgIGlzSW50ZXJuYWw6IHRydWUsXG4gICAgdGFibGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdrZXlfdmFsdWUnLFxuICAgICAgICAgICAgZW50aXR5TmFtZTogJ2tleS12YWx1ZScsXG4gICAgICAgICAgICBjb2x1bW5zOiBbe1xuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIGdlbmVyYXRvclR5cGUgOiAnZGF0YWJhc2VJZGVudGl0eScsXG4gICAgICAgICAgICAgICAgc3FsVHlwZSA6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHByaW1hcnlLZXk6IHRydWVcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6ICdrZXknLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdrZXknXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6ICd2YWx1ZSdcbiAgICAgICAgICAgIH1dXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdvZmZsaW5lQ2hhbmdlTG9nJyxcbiAgICAgICAgICAgIGVudGl0eU5hbWU6ICdvZmZsaW5lQ2hhbmdlTG9nJyxcbiAgICAgICAgICAgIGNvbHVtbnM6IFt7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgZ2VuZXJhdG9yVHlwZTogJ2RhdGFiYXNlSWRlbnRpdHknLFxuICAgICAgICAgICAgICAgIHNxbFR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHByaW1hcnlLZXk6IHRydWVcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2VydmljZScsXG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiAnc2VydmljZSdcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnb3BlcmF0aW9uJyxcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6ICdvcGVyYXRpb24nXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiAncGFyYW1zJ1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICd0aW1lc3RhbXAnLFxuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogJ3RpbWVzdGFtcCdcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaGFzRXJyb3InLFxuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogJ2hhc0Vycm9yJ1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdlcnJvck1lc3NhZ2UnLFxuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogJ2Vycm9yTWVzc2FnZSdcbiAgICAgICAgICAgIH1dXG4gICAgICAgIH1cbiAgICBdXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGxCYWNrIHtcbiAgICBvbkRiQ3JlYXRlPzogKGluZm86IGFueSkgPT4gYW55O1xuICAgIHBvc3RJbXBvcnQ/OiAoaW1wb3J0Rm9sZGVyUGF0aDogc3RyaW5nLCBtZXRhSW5mbzogYW55KSA9PiBhbnk7XG4gICAgcHJlRXhwb3J0PzogKGZvbGRlclRvRXhwb3J0RnVsbFBhdGg6IHN0cmluZywgbWV0YUluZm86IGFueSkgPT4gYW55O1xufVxuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBMb2NhbERCTWFuYWdlbWVudFNlcnZpY2Uge1xuICAgIHN0YXRpYyByZWFkb25seSBTRVJWSUNFX05BTUUgPSAnTG9jYWxEQk1hbmFnZW1lbnRTZXJ2aWNlJztcbiAgICBwcml2YXRlIGNhbGxiYWNrczogQ2FsbEJhY2tbXSA9IFtdO1xuICAgIHByaXZhdGUgZGJJbnN0YWxsRGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBkYkluc3RhbGxEaXJlY3RvcnlOYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBkYkluc3RhbGxQYXJlbnREaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIGRhdGFiYXNlczogTWFwPHN0cmluZywgREJJbmZvPjtcbiAgICBwcml2YXRlIF9sb2dTcWwgPSBmYWxzZTtcbiAgICBwdWJsaWMgbmV4dElkID0gMTAwMDAwMDAwMDAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3lzdGVtUHJvcGVydGllcyA9IHtcbiAgICAgICAgJ1VTRVJfSUQnIDoge1xuICAgICAgICAgICAgJ25hbWUnIDogJ1VTRVJfSUQnLFxuICAgICAgICAgICAgJ3ZhbHVlJyA6ICgpID0+IHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmdldExvZ2dlZEluVXNlcigpLnRoZW4oIHVzZXJJbmZvID0+IHVzZXJJbmZvLnVzZXJJZClcbiAgICAgICAgfSxcbiAgICAgICAgJ1VTRVJfTkFNRScgOiB7XG4gICAgICAgICAgICAnbmFtZScgOiAnVVNFUl9OQU1FJyxcbiAgICAgICAgICAgICd2YWx1ZScgOiAoKSA9PiB0aGlzLnNlY3VyaXR5U2VydmljZS5nZXRMb2dnZWRJblVzZXIoKS50aGVuKCB1c2VySW5mbyA9PiB1c2VySW5mby51c2VyTmFtZSlcbiAgICAgICAgfSxcbiAgICAgICAgJ0RBVEVfVElNRScgOiB7XG4gICAgICAgICAgICAnbmFtZScgOiAnREFURV9USU1FJyxcbiAgICAgICAgICAgICd2YWx1ZScgOiAoKSA9PiBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tRERUaGg6bW06c3MnKVxuICAgICAgICB9LFxuICAgICAgICAnREFURScgOiB7XG4gICAgICAgICAgICAnbmFtZScgOiAnQ1VSUkVOVF9EQVRFJyxcbiAgICAgICAgICAgICd2YWx1ZScgOiAoKSA9PiBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuICAgICAgICB9LFxuICAgICAgICAnVElNRScgOiB7XG4gICAgICAgICAgICAnbmFtZScgOiAnVElNRScsXG4gICAgICAgICAgICAndmFsdWUnIDogKCkgPT4gbW9tZW50KCkuZm9ybWF0KCdoaDptbTpzcycpXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgYXBwVmVyc2lvbjogQXBwVmVyc2lvbixcbiAgICAgICAgcHJpdmF0ZSBkZXZpY2VTZXJ2aWNlOiBEZXZpY2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRldmljZUZpbGVTZXJ2aWNlOiBEZXZpY2VGaWxlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBmaWxlOiBGaWxlLFxuICAgICAgICBwcml2YXRlIGxvY2FsS2V5VmFsdWVTZXJ2aWNlOiBMb2NhbEtleVZhbHVlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzcWxpdGU6IFNRTGl0ZVxuICAgICkge31cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyBhbGwgZGF0YWJhc2VzLlxuICAgICAqXG4gICAgICogQHJldHVybnMge29iamVjdH0gYSBwcm9taXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZSgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgLy8gQmVmb3JlIGNsb3NpbmcgZGF0YWJhc2VzLCBnaXZlIHNvbWUgdGltZSBmb3IgdGhlIHBlbmRpbmcgdHJhbnNhY3Rpb25zIChpZiBhbnkpLlxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGNvbnN0IGNsb3NlUHJvbWlzZXMgPSBtYXAodmFsdWVzKHRoaXMuZGF0YWJhc2VzKSwgZGIgPT4gZGIuc3FsaXRlT2JqZWN0LmNsb3NlKCkpO1xuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmV4dElkQ291bnQoKSB7XG4gICAgICAgIHRoaXMubmV4dElkID0gdGhpcy5uZXh0SWQgKyAxO1xuICAgICAgICB0aGlzLmxvY2FsS2V5VmFsdWVTZXJ2aWNlLnB1dChORVhUX0lEX0NPVU5ULCB0aGlzLm5leHRJZCk7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyBhIG5hbWVkIHF1ZXJ5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRiTmFtZSBuYW1lIG9mIGRhdGFiYXNlIG9uIHdoaWNoIHRoZSBuYW1lZCBxdWVyeSBoYXMgdG8gYmUgcnVuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5TmFtZSBuYW1lIG9mIHRoZSBxdWVyeSB0byBleGVjdXRlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyBwYXJhbWV0ZXJzIHJlcXVpcmVkIGZvciBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBhIHByb21pc2UuXG4gICAgICovXG4gICAgcHVibGljIGV4ZWN1dGVOYW1lZFF1ZXJ5KGRiTmFtZTogc3RyaW5nLCBxdWVyeU5hbWU6IHN0cmluZywgcGFyYW1zOiBhbnkpIHtcbiAgICAgICAgbGV0IHF1ZXJ5RGF0YSwgcGFyYW1Qcm9taXNlcztcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFiYXNlc1tkYk5hbWVdIHx8ICF0aGlzLmRhdGFiYXNlc1tkYk5hbWVdLnF1ZXJpZXNbcXVlcnlOYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGBRdWVyeSBieSBuYW1lICcgJHtxdWVyeU5hbWV9ICcgTm90IEZvdW5kYCk7XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnlEYXRhID0gdGhpcy5kYXRhYmFzZXNbZGJOYW1lXS5xdWVyaWVzW3F1ZXJ5TmFtZV07XG4gICAgICAgIHBhcmFtUHJvbWlzZXMgPSBjaGFpbihxdWVyeURhdGEucGFyYW1zKVxuICAgICAgICAgICAgLmZpbHRlcihwID0+IHAudmFyaWFibGVUeXBlICE9PSAnUFJPTVBUJylcbiAgICAgICAgICAgIC5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSB0aGlzLnN5c3RlbVByb3BlcnRpZXNbcC52YXJpYWJsZVR5cGVdLnZhbHVlKHAubmFtZSwgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9Qcm9taXNlKHBhcmFtVmFsdWUpLnRoZW4odiA9PiBwYXJhbXNbcC5uYW1lXSA9IHYpO1xuICAgICAgICAgICAgfSkudmFsdWUoKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBhcmFtUHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcGFyYW1zID0gbWFwKHF1ZXJ5RGF0YS5wYXJhbXMsIHAgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFNxbGl0ZSB3aWxsIGFjY2VwdCBEYXRlVGltZSB2YWx1ZSBhcyBiZWxvdyBmb3JtYXQuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXNbcC5uYW1lXSAhPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgJiYgKHAudHlwZSA9PT0gRGF0YVR5cGUuREFURVRJTUUgfHwgcC50eXBlID09PSBEYXRhVHlwZS5MT0NBTERBVEVUSU1FKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0RGF0ZShwYXJhbXNbcC5uYW1lXSwgcC50eXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc3FsaXRlIGFjY2VwdHMgdGhlIGJvb2wgdmFsIGFzIDEsMCBoZW5jZSBjb252ZXJ0IHRoZSBib29sZWFuIHZhbHVlIHRvIG51bWJlclxuICAgICAgICAgICAgICAgIGlmIChwLnR5cGUgPT09IERhdGFUeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydEJvb2xUb0ludChwYXJhbXNbcC5uYW1lXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbXNbcC5uYW1lXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVNRTFF1ZXJ5KGRiTmFtZSwgcXVlcnlEYXRhLnF1ZXJ5LCBwYXJhbXMpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0Um93LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHJlc3VsdC5yb3dzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSb3cgPSByZXN1bHQucm93c1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRUcmFuc2Zvcm0gPSBmaW5kKHF1ZXJ5RGF0YS5yZXNwb25zZS5wcm9wZXJ0aWVzLCBwID0+ICFmaXJzdFJvdy5oYXNPd25Qcm9wZXJ0eShwLmZpZWxkTmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChuZWVkVHJhbnNmb3JtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yb3dzID0gbWFwKHJlc3VsdC5yb3dzLCByb3cgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFJvdyA9IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93V2l0aFVwcGVyS2V5cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRvIG1ha2Ugc2VhcmNoIGZvciBkYXRhIGFzIGNhc2UtaW5zZW5zaXRpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChyb3csICh2LCBrKSA9PiByb3dXaXRoVXBwZXJLZXlzW2sudG9VcHBlckNhc2UoKV0gPSB2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChxdWVyeURhdGEucmVzcG9uc2UucHJvcGVydGllcywgcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JtYXQgdGhlIHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgdHlwZVJlZiBzcGVjaWZpZWQgaW4gcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BUeXBlID0gZXh0cmFjdFR5cGUocC5maWVsZFR5cGUudHlwZVJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXRWYWx1ZSA9IERFRkFVTFRfRk9STUFUU1t0b1VwcGVyKHByb3BUeXBlKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZFZhbCA9IHJvd1twLm5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkVmFsICYmIHR5cGVvZiBmaWVsZFZhbCAhPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAocHJvcFR5cGUgPT09IERhdGFUeXBlLkRBVEVUSU1FIHx8IHByb3BUeXBlID09PSBEYXRhVHlwZS5MT0NBTERBVEVUSU1FIHx8IHByb3BUeXBlID09PSBEYXRhVHlwZS5EQVRFKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb21lbnQoZmllbGRWYWwpLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbcC5uYW1lXSA9IGZvcm1hdERhdGUoZmllbGRWYWwsIHByb3BUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1vbWVudChmaWVsZFZhbCwgJ0hIOm1tJykuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBpbiBISDptbTpzcyBmb3JtYXQsIGl0IHJldHVybnMgYSB3cm9uZyBkYXRlLiBTbyBhcHBlbmQgdGhlIGRhdGUgdG8gdGhlIGdpdmVuIHZhbHVlIHRvIGdldCBkYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1twLm5hbWVdID0gbW9tZW50KCkuZm9ybWF0KCdZWVlZLU1NLUREJykgKyAnVCcgKyBmaWVsZFZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcFR5cGUgPT09IERhdGFUeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbcC5uYW1lXSA9IHRoaXMuY29udmVydEludFRvQm9vbChmaWVsZFZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dXaXRoVXBwZXJLZXlzW3AubmFtZUluVXBwZXJDYXNlXSA9IHJvd1twLm5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRSb3dbcC5uYW1lXSA9IHJvd1twLm5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRSb3dbcC5maWVsZE5hbWVdID0gcm93W3AuZmllbGROYW1lXSB8fCByb3dXaXRoVXBwZXJLZXlzW3AubmFtZUluVXBwZXJDYXNlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZFJvdztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZXhwb3J0IHRoZSBkYXRhYmFzZXMgaW4gYSB6aXAgZm9ybWF0LlxuICAgICAqXG4gICAgICogQHJldHVybnMge29iamVjdH0gYSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB6aXAgaXMgY3JlYXRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwb3J0REIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9sZGVyVG9FeHBvcnQgPSAnb2ZmbGluZV90ZW1wXycgKyBub3coKSxcbiAgICAgICAgICAgICAgICBmb2xkZXJUb0V4cG9ydEZ1bGxQYXRoID0gY29yZG92YS5maWxlLmNhY2hlRGlyZWN0b3J5ICsgZm9sZGVyVG9FeHBvcnQgKyAnLycsXG4gICAgICAgICAgICAgICAgemlwRmlsZU5hbWUgPSAnX29mZmxpbmVfZGF0YS56aXAnLFxuICAgICAgICAgICAgICAgIG1ldGFJbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICBhcHA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIE9TOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZE9uOiAwXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCB6aXBEaXJlY3Rvcnk7XG4gICAgICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgICAgIC8vIEluIElPUywgc2F2ZSB6aXAgdG8gZG9jdW1lbnRzIGRpcmVjdG9yeSBzbyB0aGF0IHVzZXIgY2FuIGV4cG9ydCB0aGUgZmlsZSBmcm9tIElPUyBkZXZpY2VzIHVzaW5nIGlUVU5FUy5cbiAgICAgICAgICAgICAgICB6aXBEaXJlY3RvcnkgPSBjb3Jkb3ZhLmZpbGUuZG9jdW1lbnRzRGlyZWN0b3J5O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJbiBBbmRyb2lkLCBzYXZlIHppcCB0byBkb3dubG9hZCBkaXJlY3RvcnkuXG4gICAgICAgICAgICAgICAgemlwRGlyZWN0b3J5ID0gY29yZG92YS5maWxlLmV4dGVybmFsUm9vdERpcmVjdG9yeSArICdEb3dubG9hZC8nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGZvbGRlciB0byBjb3B5IGFsbCB0aGUgY29udGVudCB0byBleHBvcnRcbiAgICAgICAgICAgIHRoaXMuZmlsZS5jcmVhdGVEaXIoY29yZG92YS5maWxlLmNhY2hlRGlyZWN0b3J5LCBmb2xkZXJUb0V4cG9ydCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb3B5IGRhdGFiYXNlcyB0byB0ZW1wb3JhcnkgZm9sZGVyIGZvciBleHBvcnRcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZS5jb3B5RGlyKHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5LCB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWUsIGZvbGRlclRvRXhwb3J0RnVsbFBhdGgsICdkYXRhYmFzZXMnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXBhcmUgbWV0YSBpbmZvIHRvIGlkZW50aWZ5IHRoZSB6aXAgYW5kIG90aGVyIGluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBcHBJbmZvKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGFwcEluZm8gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFJbmZvLmFwcCA9IChhcHBJbmZvIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YUluZm8uT1MgPSAnSU9TJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzQW5kcm9pZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFJbmZvLk9TID0gJ0FORFJPSUQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhSW5mby5jcmVhdGVkT24gPSBub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWV0YUluZm87XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IGV4ZWN1dGVQcm9taXNlQ2hhaW4odGhpcy5nZXRDYWxsYmFja3NGb3IoJ3ByZUV4cG9ydCcpLCBbZm9sZGVyVG9FeHBvcnRGdWxsUGF0aCwgbWV0YUluZm9dKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSBtZXRhIGRhdGEgdG8gTUVUQS5qc29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZS53cml0ZUZpbGUoZm9sZGVyVG9FeHBvcnRGdWxsUGF0aCwgJ01FVEEuanNvbicsIEpTT04uc3RyaW5naWZ5KG1ldGFJbmZvKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGFyZSBuYW1lIHRvIHVzZSBmb3IgdGhlIHppcC5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGFwcE5hbWUgPSBtZXRhSW5mby5hcHAubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYXBwTmFtZSA9IGFwcE5hbWUucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VGaWxlU2VydmljZS5uZXdGaWxlTmFtZSh6aXBEaXJlY3RvcnksIGFwcE5hbWUgKyB6aXBGaWxlTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZpbGVOYW1lID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBaaXAgdGhlIHRlbXBvcmFyeSBmb2xkZXIgZm9yIGV4cG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocnMsIHJlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFplZXAuemlwKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gOiBmb2xkZXJUb0V4cG9ydEZ1bGxQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gICA6IHppcERpcmVjdG9yeSArIGZpbGVOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sICgpID0+IHJzKHppcERpcmVjdG9yeSArIGZpbGVOYW1lKSwgcmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXNvbHZlLCByZWplY3QpXG4gICAgICAgICAgICAgICAgLmNhdGNoKG5vb3ApLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGVtcG9yYXJ5IGZvbGRlciBmb3IgZXhwb3J0XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLnJlbW92ZURpcihjb3Jkb3ZhLmZpbGUuY2FjaGVEaXJlY3RvcnkgKyBmb2xkZXJUb0V4cG9ydCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICByZXR1cm5zIHN0b3JlIGJvdW5kIHRvIHRoZSBkYXRhTW9kZWxOYW1lIGFuZCBlbnRpdHlOYW1lLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFNb2RlbE5hbWVcbiAgICAgKiBAcGFyYW0gZW50aXR5TmFtZVxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTdG9yZShkYXRhTW9kZWxOYW1lOiBzdHJpbmcsIGVudGl0eU5hbWU6IHN0cmluZyk6IFByb21pc2U8TG9jYWxEQlN0b3JlPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhYmFzZXNbZGF0YU1vZGVsTmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuZGF0YWJhc2VzW2RhdGFNb2RlbE5hbWVdLnN0b3Jlc1tlbnRpdHlOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWplY3QoYHN0b3JlIHdpdGggbmFtZScke2VudGl0eU5hbWV9JyBpbiBkYXRhbW9kZWwgJyR7ZGF0YU1vZGVsTmFtZX0nIGlzIG5vdCBmb3VuZGApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVwbGFjZSB0aGUgZGF0YWJhc2VzIHdpdGggdGhlIGZpbGVzIHByb3ZpZGVkIGluIHppcC4gSWYgaW1wb3J0IGdldHMgZmFpbGVkLFxuICAgICAqIHRoZW4gYXBwIHJldmVydHMgYmFjayB0byB1c2Ugb2xkIGRhdGFiYXNlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB6aXBQYXRoIGxvY2F0aW9uIG9mIHRoZSB6aXAgZmlsZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJldmVydElmRmFpbHMgSWYgdHJ1ZSwgdGhlbiBhIGJhY2t1cCBpcyBjcmVhdGVkIGFuZCB3aGVuIGltcG9ydCBmYWlscywgYmFja3VwIGlzIHJldmVydGVkIGJhY2suXG4gICAgICogQHJldHVybnMge29iamVjdH0gYSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB6aXAgaXMgY3JlYXRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaW1wb3J0REIoemlwUGF0aDogc3RyaW5nLCByZXZlcnRJZkZhaWxzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbXBvcnRGb2xkZXIgPSAnb2ZmbGluZV90ZW1wXycgKyBub3coKSxcbiAgICAgICAgICAgICAgICBpbXBvcnRGb2xkZXJGdWxsUGF0aCA9IGNvcmRvdmEuZmlsZS5jYWNoZURpcmVjdG9yeSArIGltcG9ydEZvbGRlciArICcvJztcbiAgICAgICAgICAgIGxldCB6aXBNZXRhO1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGZvbGRlciB0byB1bnppcCB0aGUgY29udGVudHMgb2YgdGhlIHppcC5cbiAgICAgICAgICAgIHRoaXMuZmlsZS5jcmVhdGVEaXIoY29yZG92YS5maWxlLmNhY2hlRGlyZWN0b3J5LCBpbXBvcnRGb2xkZXIsIGZhbHNlKVxuICAgICAgICAgICAgICAgIC50aGVuKCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocnMsIHJlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVbnppcCB0byB0ZW1wb3JhcnkgbG9jYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFplZXAudW56aXAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IHppcFBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG86IGltcG9ydEZvbGRlckZ1bGxQYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBycywgcmUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAqIHJlYWQgbWV0YSBkYXRhIGFuZCBhbGxvdyBpbXBvcnQgb25seSBwYWNrYWdlIG5hbWUgb2YgdGhlIGFwcCBmcm9tIHdoaWNoIHRoaXMgemlwIGlzIGNyZWF0ZWRcbiAgICAgICAgICAgICAgICAgKiBhbmQgdGhlIHBhY2thZ2UgbmFtZSBvZiB0aGlzIGFwcCBhcmUgc2FtZS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWxlLnJlYWRBc1RleHQoaW1wb3J0Rm9sZGVyRnVsbFBhdGgsICdNRVRBLmpzb24nKVxuICAgICAgICAgICAgICAgICAgICAudGhlbih0ZXh0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgemlwTWV0YSA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEFwcEluZm8oKTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFwcEluZm8gPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXppcE1ldGEuYXBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ21ldGEgaW5mb3JtYXRpb24gaXMgbm90IGZvdW5kIGluIHppcCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh6aXBNZXRhLmFwcC5wYWNrYWdlTmFtZSAhPT0gYXBwSW5mby5wYWNrYWdlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdkYXRhYmFzZSB6aXAgb2YgYXBwIHdpdGggc2FtZSBwYWNrYWdlIG5hbWUgY2FuIG9ubHkgYmUgaW1wb3J0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGJhY2t1cFppcDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zZSgpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXZlcnRJZkZhaWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGJhY2t1cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cG9ydERCKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocGF0aCA9PiBiYWNrdXBaaXAgPSBwYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWxldGUgZXhpc3RpbmcgZGF0YWJhc2VzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VGaWxlU2VydmljZS5yZW1vdmVEaXIodGhpcy5kYkluc3RhbGxEaXJlY3RvcnkpO1xuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcHkgaW1wb3J0ZWQgZGF0YWJhc2VzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWxlLmNvcHlEaXIoaW1wb3J0Rm9sZGVyRnVsbFBhdGgsICdkYXRhYmFzZXMnLCB0aGlzLmRiSW5zdGFsbFBhcmVudERpcmVjdG9yeSwgdGhpcy5kYkluc3RhbGxEaXJlY3RvcnlOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWxvYWQgZGF0YWJhc2VzXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFiYXNlcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkRGF0YWJhc2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gZXhlY3V0ZVByb21pc2VDaGFpbih0aGlzLmdldENhbGxiYWNrc0ZvcigncG9zdEltcG9ydCcpLCBbaW1wb3J0Rm9sZGVyRnVsbFBhdGgsIHppcE1ldGFdKSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhY2t1cFppcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLnJlbW92ZUZpbGUoYmFja3VwWmlwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgKHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhY2t1cFppcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydERCKGJhY2t1cFppcCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlRmlsZVNlcnZpY2UucmVtb3ZlRmlsZShiYWNrdXBaaXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbihyZXNvbHZlLCByZWplY3QpXG4gICAgICAgICAgICAuY2F0Y2gobm9vcClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VGaWxlU2VydmljZS5yZW1vdmVEaXIoY29yZG92YS5maWxlLmNhY2hlRGlyZWN0b3J5ICsgaW1wb3J0Rm9sZGVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YU1vZGVsTmFtZSBOYW1lIG9mIHRoZSBkYXRhIG1vZGVsXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGVudGl0eU5hbWUgTmFtZSBvZiB0aGUgZW50aXR5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdGlvbiBOYW1lIG9mIHRoZSBvcGVyYXRpb24gKFJFQUQsIElOU0VSVCwgVVBEQVRFLCBERUxFVEUpXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSwgaWYgdGhlIGdpdmVuIG9wZXJhdGlvbiBjYW4gYmUgcGVyZm9ybWVkIGFzIHBlciBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBpc09wZXJhdGlvbkFsbG93ZWQoZGF0YU1vZGVsTmFtZTogc3RyaW5nLCBlbnRpdHlOYW1lOiBzdHJpbmcsIG9wZXJhdGlvbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlKGRhdGFNb2RlbE5hbWUsIGVudGl0eU5hbWUpLnRoZW4oIHN0b3JlID0+IHtcbiAgICAgICAgICAgIGlmICghc3RvcmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnUkVBRCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmUuZW50aXR5U2NoZW1hLnB1c2hDb25maWcucmVhZEVuYWJsZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnSU5TRVJUJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZS5lbnRpdHlTY2hlbWEucHVzaENvbmZpZy5pbnNlcnRFbmFibGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ1VQREFURScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmUuZW50aXR5U2NoZW1hLnB1c2hDb25maWcudXBkYXRlRW5hYmxlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdERUxFVEUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmVudGl0eVNjaGVtYS5wdXNoQ29uZmlnLmRlbGV0ZUVuYWJsZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWREYXRhYmFzZXMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgbGV0IG5ld0RhdGFiYXNlc0NyZWF0ZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YWJhc2VzKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZGF0YWJhc2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYkluc3RhbGxEaXJlY3RvcnlOYW1lID0gJ0xvY2FsRGF0YWJhc2UnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5ID0gY29yZG92YS5maWxlLmFwcGxpY2F0aW9uU3RvcmFnZURpcmVjdG9yeSArICAnTGlicmFyeS8nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWUgPSAnZGF0YWJhc2VzJztcbiAgICAgICAgICAgICAgICB0aGlzLmRiSW5zdGFsbFBhcmVudERpcmVjdG9yeSA9IGNvcmRvdmEuZmlsZS5hcHBsaWNhdGlvblN0b3JhZ2VEaXJlY3Rvcnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeSA9IHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5ICsgdGhpcy5kYkluc3RhbGxEaXJlY3RvcnlOYW1lO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlcyA9IG5ldyBNYXA8c3RyaW5nLCBEQkluZm8+KCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRVcERhdGFiYXNlcygpXG4gICAgICAgICAgICAgICAgLnRoZW4oIGZsYWcgPT4gbmV3RGF0YWJhc2VzQ3JlYXRlZCA9IGZsYWcpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5sb2FkREJTY2hlbWFzKCkpXG4gICAgICAgICAgICAgICAgLnRoZW4obWV0YWRhdGEgPT4gdGhpcy5sb2FkTmFtZWRRdWVyaWVzKG1ldGFkYXRhKSlcbiAgICAgICAgICAgICAgICAudGhlbihtZXRhZGF0YSA9PiB0aGlzLmxvYWRPZmZsaW5lQ29uZmlnKG1ldGFkYXRhKSlcbiAgICAgICAgICAgICAgICAudGhlbihtZXRhZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChtYXAobWV0YWRhdGEsIGRiTWV0YWRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbkRhdGFiYXNlKGRiTWV0YWRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZGF0YWJhc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFiYXNlc1tkYk1ldGFkYXRhLnNjaGVtYS5uYW1lXSA9IGRhdGFiYXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlKCd3YXZlbWFrZXInLCAna2V5LXZhbHVlJykudGhlbiggc3RvcmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhbEtleVZhbHVlU2VydmljZS5pbml0KHN0b3JlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsS2V5VmFsdWVTZXJ2aWNlLmdldChORVhUX0lEX0NPVU5UKS50aGVuKHZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRJZCA9IHZhbCB8fCB0aGlzLm5leHRJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0RhdGFiYXNlc0NyZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZURhdGEoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuZGlzYWJsZUZvcmVpZ25LZXlzKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5kZXZpY2VTZXJ2aWNlLmdldEFwcEJ1aWxkVGltZSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGRiU2VlZENyZWF0aW9uVGltZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGVjdXRlUHJvbWlzZUNoYWluKG1hcCh0aGlzLmNhbGxiYWNrcywgJ29uRGJDcmVhdGUnKSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhYmFzZXMnIDogdGhpcy5kYXRhYmFzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJDcmVhdGVkT24nOiBub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYlNlZWRDcmVhdGVkT24nIDogZGJTZWVkQ3JlYXRpb25UaW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHRoaXMuZGF0YWJhc2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFiYXNlcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdXNpbmcgdGhpcyBmdW5jdGlvbiBvbmUgY2FuIGxpc3RlbiBldmVudHMgc3VjaCBhcyBvbkRiQ3JlYXRlLCAncHJlRXhwb3J0JyBhbmQgJ3Bvc3RJbXBvcnQnLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGxpc3RlbmVyIGFuIG9iamVjdCB3aXRoIGZ1bmN0aW9ucyBtYXBwZWQgdG8gZXZlbnQgbmFtZXMuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyQ2FsbGJhY2sobGlzdGVuZXI6IENhbGxCYWNrKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2tzLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRMb2dTUWwoZmxhZzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9sb2dTcWwgPSBmbGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYW55IGV4aXN0aW5nIGRhdGFiYXNlcyAoZXhjZXB0IHdhdmVtYWtlciBkYikgYW5kIGNvcGllcyB0aGUgZGF0YWJhc2VzIHRoYXQgYXJlIHBhY2thZ2VkIHdpdGggdGhlIGFwcC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHByaXZhdGUgY2xlYW5BbmRDb3B5RGF0YWJhc2VzKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGRiU2VlZEZvbGRlciA9IGNvcmRvdmEuZmlsZS5hcHBsaWNhdGlvbkRpcmVjdG9yeSArIE1FVEFfTE9DQVRJT047XG4gICAgICAgIHJldHVybiB0aGlzLmZpbGUuY3JlYXRlRGlyKHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5LCB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWUsIGZhbHNlKVxuICAgICAgICAgICAgLmNhdGNoKG5vb3ApXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLmxpc3RGaWxlcyh0aGlzLmRiSW5zdGFsbERpcmVjdG9yeSwgLy4rXFwuZGIkLykpXG4gICAgICAgICAgICAudGhlbihmaWxlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGZpbGVzLm1hcChmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmWyduYW1lJ10gIT09ICd3YXZlbWFrZXIuZGInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZS5yZW1vdmVGaWxlKHRoaXMuZGJJbnN0YWxsRGlyZWN0b3J5LCBmWyduYW1lJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCAoKSA9PiB0aGlzLmRldmljZUZpbGVTZXJ2aWNlLmxpc3RGaWxlcyhkYlNlZWRGb2xkZXIsIC8uK1xcLmRiJC8pKVxuICAgICAgICAgICAgLnRoZW4oZmlsZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGUuY3JlYXRlRGlyKHRoaXMuZGJJbnN0YWxsUGFyZW50RGlyZWN0b3J5LCB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeU5hbWUsIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKG5vb3ApXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiBQcm9taXNlLmFsbChmaWxlcy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPT4gdGhpcy5maWxlLmNvcHlGaWxlKGRiU2VlZEZvbGRlciwgZlsnbmFtZSddLCB0aGlzLmRiSW5zdGFsbERpcmVjdG9yeSwgZlsnbmFtZSddKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBpY2tzIGVzc2VudGlhbCBkZXRhaWxzIGZyb20gdGhlIGdpdmVuIHNjaGVtYS5cbiAgICBwcml2YXRlIGNvbXBhY3RFbnRpdHlTY2hlbWEoc2NoZW1hLCBlbnRpdHksIHRyYW5zZm9ybWVkU2NoZW1hcyk6IEVudGl0eUluZm8ge1xuICAgICAgICBjb25zdCByZXFFbnRpdHkgPSB0cmFuc2Zvcm1lZFNjaGVtYXNbZW50aXR5WydlbnRpdHlOYW1lJ11dIGFzIEVudGl0eUluZm87XG4gICAgICAgIHJlcUVudGl0eS5lbnRpdHlOYW1lID0gZW50aXR5WydlbnRpdHlOYW1lJ107XG4gICAgICAgIHJlcUVudGl0eS5uYW1lID0gZW50aXR5WyduYW1lJ107XG4gICAgICAgIHJlcUVudGl0eS5jb2x1bW5zID0gW107XG4gICAgICAgIGVudGl0eS5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIGxldCBkZWZhdWx0VmFsdWUgPSBjb2wuY29sdW1uVmFsdWUgPyBjb2wuY29sdW1uVmFsdWUuZGVmYXVsdFZhbHVlIDogJyc7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gY29sLnNxbFR5cGU7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgIWNvbC5wcmltYXJ5S2V5KSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gaXNFbXB0eShkZWZhdWx0VmFsdWUpID8gbnVsbCA6IHBhcnNlSW50KGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGlzRW1wdHkoZGVmYXVsdFZhbHVlKSA/IG51bGwgOiAoZGVmYXVsdFZhbHVlID09PSAndHJ1ZScgPyAxIDogMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGlzRW1wdHkoZGVmYXVsdFZhbHVlKSA/IG51bGwgOiBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXFFbnRpdHkuY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBjb2xbJ25hbWUnXSxcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGNvbFsnZmllbGROYW1lJ10sXG4gICAgICAgICAgICAgICAgZ2VuZXJhdG9yVHlwZTogY29sWydnZW5lcmF0b3JUeXBlJ10sXG4gICAgICAgICAgICAgICAgc3FsVHlwZTogY29sWydzcWxUeXBlJ10sXG4gICAgICAgICAgICAgICAgcHJpbWFyeUtleTogY29sWydwcmltYXJ5S2V5J10sXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3JFYWNoKGVudGl0eS5yZWxhdGlvbnMsIHIgPT4ge1xuICAgICAgICAgICAgbGV0IHRhcmdldEVudGl0eVNjaGVtYSwgdGFyZ2V0RW50aXR5LCBjb2wsIHNvdXJjZUNvbHVtbiwgbWFwcGluZztcbiAgICAgICAgICAgIGlmIChyLmNhcmRpbmFsaXR5ID09PSAnTWFueVRvT25lJyB8fCByLmNhcmRpbmFsaXR5ID09PSAnT25lVG9PbmUnKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0RW50aXR5ID0gZmluZChzY2hlbWEudGFibGVzLCB0ID0+IHQubmFtZSA9PT0gci50YXJnZXRUYWJsZSk7XG4gICAgICAgICAgICAgICAgbWFwcGluZyA9IHIubWFwcGluZ3NbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldEVudGl0eSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbnRpdHkgPSB0YXJnZXRFbnRpdHkuZW50aXR5TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlQ29sdW1uID0gbWFwcGluZy5zb3VyY2VDb2x1bW47XG4gICAgICAgICAgICAgICAgICAgIGNvbCA9IHJlcUVudGl0eS5jb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbi5uYW1lID09PSBzb3VyY2VDb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbnRpdHlTY2hlbWEgPSBzY2hlbWEudGFibGVzLmZpbmQodGFibGUgPT4gdGFibGUubmFtZSA9PT0gci50YXJnZXRUYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcmVpZ25SZWxhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkTmFtZTogci5maWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbnRpdHk6IHRhcmdldEVudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFRhYmxlOiByLnRhcmdldFRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29sdW1uOiBtYXBwaW5nLnRhcmdldENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFBhdGg6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcHBlcjogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRGaWVsZE5hbWU6IHRhcmdldEVudGl0eVNjaGVtYS5jb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbi5uYW1lID09PSBtYXBwaW5nLnRhcmdldENvbHVtbikuZmllbGROYW1lXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGZvcmVpZ25SZWxhdGlvbi50YXJnZXRQYXRoID0gZm9yZWlnblJlbGF0aW9uLnNvdXJjZUZpZWxkTmFtZSArICcuJyArIGZvcmVpZ25SZWxhdGlvbi50YXJnZXRGaWVsZE5hbWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgZm9yZWlnblJlbGF0aW9uLmRhdGFNYXBwZXIgPSBjaGFpbih0YXJnZXRFbnRpdHlTY2hlbWEuY29sdW1ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5rZXlCeShjaGlsZENvbCA9PiBmb3JlaWduUmVsYXRpb24uc291cmNlRmllbGROYW1lICsgJy4nICsgY2hpbGRDb2wuZmllbGROYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcFZhbHVlcyhjaGlsZENvbCA9PiBuZXcgQ29sdW1uSW5mbyhjaGlsZENvbC5uYW1lLCBjaGlsZENvbC5maWVsZE5hbWUpKS52YWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb2wuZm9yZWlnblJlbGF0aW9ucyA9IGNvbC5mb3JlaWduUmVsYXRpb25zIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb2wuZm9yZWlnblJlbGF0aW9ucy5wdXNoKGZvcmVpZ25SZWxhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcUVudGl0eTtcbiAgICB9XG5cbiAgICAvLyBMb2FkcyBuZWNlc3NhcnkgZGV0YWlscyBvZiBxdWVyaWVzXG4gICAgcHJpdmF0ZSBjb21wYWN0UXVlcmllcyhxdWVyaWVzQnlEQik6IE1hcDxzdHJpbmcsIE5hbWVkUXVlcnlJbmZvPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBuZXcgTWFwPHN0cmluZywgTmFtZWRRdWVyeUluZm8+KCk7XG5cbiAgICAgICAgZm9yRWFjaChxdWVyaWVzQnlEQi5xdWVyaWVzLCBxdWVyeURhdGEgPT4ge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5LCBwYXJhbXM7XG4gICAgICAgICAgICBpZiAocXVlcnlEYXRhLm5hdGl2ZVNxbCAmJiBxdWVyeURhdGEudHlwZSA9PT0gJ1NFTEVDVCcpIHtcbiAgICAgICAgICAgICAgICBxdWVyeSA9IGlzRW1wdHkocXVlcnlEYXRhLm9mZmxpbmVRdWVyeVN0cmluZykgPyBxdWVyeURhdGEucXVlcnlTdHJpbmcgOiBxdWVyeURhdGEub2ZmbGluZVF1ZXJ5U3RyaW5nO1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IG1hcCh0aGlzLmV4dHJhY3RRdWVyeVBhcmFtcyhxdWVyeSksIHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbU9iaiA9IGZpbmQocXVlcnlEYXRhLnBhcmFtZXRlcnMsIHsnbmFtZSc6IHB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcmFtT2JqLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBwYXJhbU9iai50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVUeXBlOiBwYXJhbU9iai52YXJpYWJsZVR5cGVcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBwYXJhbXMuZm9yRWFjaChwID0+IHF1ZXJ5ID0gcmVwbGFjZShxdWVyeSwgJzonICsgcC5uYW1lLCAnPycpKTtcbiAgICAgICAgICAgICAgICBxdWVyaWVzW3F1ZXJ5RGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogcXVlcnlEYXRhLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBtYXAocXVlcnlEYXRhLnJlc3BvbnNlLnByb3BlcnRpZXMsIHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAubmFtZUluVXBwZXJDYXNlID0gcC5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBxdWVyaWVzO1xuICAgIH1cblxuICAgIC8vIExvYWRzIG5lY2Vzc2FyeSBkZXRhaWxzIG9mIHJlbW90ZSBzY2hlbWFcbiAgICBwcml2YXRlIGNvbXBhY3RTY2hlbWEoc2NoZW1hKTogREJJbmZvIHtcbiAgICAgICAgY29uc3QgZGJJbmZvID0gbmV3IERCSW5mbygpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFNjaGVtYXMgPSBuZXcgTWFwPHN0cmluZywgRW50aXR5SW5mbz4oKTtcbiAgICAgICAgc2NoZW1hLnRhYmxlcy5mb3JFYWNoKGVudGl0eVNjaGVtYSA9PiB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFNjaGVtYXNbZW50aXR5U2NoZW1hLmVudGl0eU5hbWVdID0ge307XG4gICAgICAgIH0pO1xuICAgICAgICBzY2hlbWEudGFibGVzLmZvckVhY2goZW50aXR5U2NoZW1hID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcGFjdEVudGl0eVNjaGVtYShzY2hlbWEsIGVudGl0eVNjaGVtYSwgdHJhbnNmb3JtZWRTY2hlbWFzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRiSW5mby5zY2hlbWEubmFtZSA9IHNjaGVtYS5uYW1lO1xuICAgICAgICBkYkluZm8uc2NoZW1hLmlzSW50ZXJuYWwgPSBzY2hlbWEuaXNJbnRlcm5hbDtcbiAgICAgICAgZGJJbmZvLnNjaGVtYS5lbnRpdGllcyA9IHRyYW5zZm9ybWVkU2NoZW1hcztcbiAgICAgICAgcmV0dXJuIGRiSW5mbztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRCb29sVG9JbnQoYm9vbDogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gdG9TdHJpbmcoYm9vbCkgPT09ICd0cnVlJyA/IDEgOiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydEludFRvQm9vbChpbnQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gaW50ID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFR1cm5zIG9mZiBmb3JlaWduIGtleXNcbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGRpc2FibGVGb3JlaWduS2V5cygpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobWFwKHRoaXMuZGF0YWJhc2VzLCBkYiA9PiB0aGlzLmV4ZWN1dGVTUUxRdWVyeShkYi5zY2hlbWEubmFtZSwgJ1BSQUdNQSBmb3JlaWduX2tleXMgPSBPRkYnKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIFNRTCBxdWVyeTtcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYk5hbWVcbiAgICAgKiBAcGFyYW0gc3FsXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHB1YmxpYyBleGVjdXRlU1FMUXVlcnkoZGJOYW1lLCBzcWwsIHBhcmFtcz86IGFueVtdLCBsb2dPdXRwdXQ/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGRiID0gdGhpcy5kYXRhYmFzZXNbZGJOYW1lXTtcbiAgICAgICAgaWYgKGRiKSB7XG4gICAgICAgICAgICByZXR1cm4gZGIuc3FsaXRlT2JqZWN0LmV4ZWN1dGVTcWwoc3FsLCBwYXJhbXMsIGxvZ091dHB1dClcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dzID0gcmVzdWx0LnJvd3M7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKHJvd3MuaXRlbShpKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdyb3dzQWZmZWN0ZWQnICA6IHJlc3VsdC5yb3dzQWZmZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAncm93cycgICAgICAgICAgOiBkYXRhXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGBObyBEYXRhYmFzZSB3aXRoIG5hbWUgJHtkYk5hbWV9IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSBwYXJhbXMgb2YgdGhlIHF1ZXJ5IG9yIHByb2NlZHVyZS5cbiAgICBwcml2YXRlIGV4dHJhY3RRdWVyeVBhcmFtcyhxdWVyeSkge1xuICAgICAgICBsZXQgcGFyYW1zLCBhbGlhc1BhcmFtcztcbiAgICAgICAgYWxpYXNQYXJhbXMgPSBxdWVyeS5tYXRjaCgvW15cIidcXHdcXFxcXTpcXHMqXFx3K1xccyovZykgfHwgW107XG4gICAgICAgIGlmIChhbGlhc1BhcmFtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IGFsaWFzUGFyYW1zLm1hcCh4ID0+ICgvWz18XFxXXS9nLnRlc3QoeCkpID8geC5yZXBsYWNlKC9cXFcvZywgJycpLnRyaW0oKSA6IHgudHJpbSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdpdGggYXBwbGljYXRpb24gaW5mbyBzdWNoIGFzIHBhY2thZ2VOYW1lLCBhcHBOYW1lLCB2ZXJzaW9uTnVtYmVyLCB2ZXJzaW9uQ29kZS5cbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEFwcEluZm8oKSB7XG4gICAgICAgIGNvbnN0IGFwcEluZm8gPSB7XG4gICAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICAgIHBhY2thZ2VOYW1lOiAnJyxcbiAgICAgICAgICAgIHZlcnNpb25OdW1iZXI6ICcnLFxuICAgICAgICAgICAgdmVyc2lvbkNvZGU6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwVmVyc2lvbi5nZXRQYWNrYWdlTmFtZSgpXG4gICAgICAgICAgICAudGhlbihwYWNrYWdlTmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgYXBwSW5mby5wYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcFZlcnNpb24uZ2V0QXBwTmFtZSgpO1xuICAgICAgICAgICAgfSkudGhlbihhcHBOYW1lID0+IHtcbiAgICAgICAgICAgICAgICBhcHBJbmZvLm5hbWUgPSBhcHBOYW1lO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcFZlcnNpb24uZ2V0VmVyc2lvbk51bWJlcigpO1xuICAgICAgICAgICAgfSkudGhlbih2ZXJzaW9uTnVtYmVyID0+IHtcbiAgICAgICAgICAgICAgICBhcHBJbmZvLnZlcnNpb25OdW1iZXIgPSB2ZXJzaW9uTnVtYmVyO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcFZlcnNpb24uZ2V0VmVyc2lvbkNvZGUoKTtcbiAgICAgICAgICAgIH0pLnRoZW4odmVyc2lvbkNvZGUgPT4ge1xuICAgICAgICAgICAgICAgIGFwcEluZm8udmVyc2lvbkNvZGUgPSAodmVyc2lvbkNvZGUgYXMgYW55KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwSW5mbztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2FsbGJhY2tzRm9yKGV2ZW50OiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxiYWNrcy5tYXAoYyA9PiB7XG4gICAgICAgICAgICBpZiAoY1tldmVudF0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY1tldmVudF0uYmluZChjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWFyY2hlcyBmb3IgdGhlIGZpbGVzIHdpdGggZ2l2ZW4gcmVnZXggaW4gJ3d3dy9tZXRhZGF0YS9hcHAnYW5kIHJldHVybnMgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgSlNPTlxuICAgICAqIGNvbnRlbnQgcHJlc2VudCBpbiBlYWNoIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVSZWdleCByZWdleCBwYXR0ZXJuIHRvIHNlYXJjaCBmb3IgZmlsZXMuXG4gICAgICogQHJldHVybnMgeyp9IEEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdpdGggYW4gYXJyYXlcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1ldGFJbmZvKGZpbGVOYW1lUmVnZXg6IFJlZ0V4cCkge1xuICAgICAgICBjb25zdCBmb2xkZXIgPSBjb3Jkb3ZhLmZpbGUuYXBwbGljYXRpb25EaXJlY3RvcnkgKyBNRVRBX0xPQ0FUSU9OICsgJy8nO1xuICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VGaWxlU2VydmljZS5saXN0RmlsZXMoZm9sZGVyLCBmaWxlTmFtZVJlZ2V4KVxuICAgICAgICAgICAgLnRoZW4oZmlsZXMgPT4gUHJvbWlzZS5hbGwobWFwKGZpbGVzLCBmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvcmRvdmEgRmlsZSByZWFkZXIgaGFzIGJ1ZmZlciBpc3N1ZXMgd2l0aCBsYXJnZSBmaWxlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvLCB1c2luZyBhamF4IHRvIHJldHJpZXZlIGxvY2FsIGpzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICQuZ2V0SlNPTih0cmFuc2Zvcm1GaWxlVVJJKGZvbGRlcikgKyBmWyduYW1lJ10sIGRhdGEgPT4gcmVzb2x2ZShkYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUsIGlmIHRoZSBnaXZlbiBlbnRpdHkncyBkYXRhIGlzIGJ1bmRsZWQgYWxvbmcgd2l0aCBhcHBsaWNhdGlvbiBpbnN0YWxsZXIuXG4gICAgICogQHBhcmFtIGRhdGFNb2RlbE5hbWUgbmFtZSBvZiB0aGUgZGF0YSBtb2RlbFxuICAgICAqIEBwYXJhbSBlbnRpdHlOYW1lIG5hbWUgb2YgdGhlIGVudGl0eVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAgICovXG4gICAgcHVibGljIGlzQnVuZGxlZChkYXRhTW9kZWxOYW1lLCBlbnRpdHlOYW1lKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmUoZGF0YU1vZGVsTmFtZSwgZW50aXR5TmFtZSkudGhlbihzdG9yZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZW50aXR5U2NoZW1hLnB1bGxDb25maWcucHVsbFR5cGUgPT09IFB1bGxUeXBlLkJVTkRMRUQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIGxvY2FsIGRhdGFiYXNlIHNjaGVtYXMgZnJvbSAqX2RhdGFfbW9kZWwuanNvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHsqfSBBIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIG1ldGFkYXRhLlxuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZERCU2NoZW1hcygpOiBQcm9taXNlPE1hcDxzdHJpbmcsIERCSW5mbz4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWV0YUluZm8oLy4rX2RhdGFNb2RlbFxcLmpzb24kLylcbiAgICAgICAgICAgIC50aGVuKCAoc2NoZW1hczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBuZXcgTWFwPHN0cmluZywgREJJbmZvPigpO1xuICAgICAgICAgICAgICAgIHNjaGVtYXMgPSBpc0FycmF5KHNjaGVtYXMpID8gc2NoZW1hcyA6IFtzY2hlbWFzXTtcbiAgICAgICAgICAgICAgICBzY2hlbWFzLnB1c2goT0ZGTElORV9XQVZFTUFLRVJfREFUQUJBU0VfU0NIRU1BKTtcbiAgICAgICAgICAgICAgICBzY2hlbWFzLm1hcChzID0+IHRoaXMuY29tcGFjdFNjaGVtYShzKSlcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2gocyA9PiAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGFbcy5zY2hlbWEubmFtZV0gPSBzO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0YWRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIG5hbWVkIHF1ZXJpZXMgZnJvbSAqX3F1ZXJ5Lmpzb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0geyp9IG1ldGFkYXRhXG4gICAgICogQHJldHVybnMgeyp9IEEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdpdGggbWV0YWRhdGFcbiAgICAgKi9cbiAgICBwcml2YXRlIGxvYWROYW1lZFF1ZXJpZXMobWV0YWRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWV0YUluZm8oLy4rX3F1ZXJ5XFwuanNvbiQvKVxuICAgICAgICAgICAgLnRoZW4oKHF1ZXJpZXNCeURCczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcXVlcmllc0J5REJzID0gaXNBcnJheShxdWVyaWVzQnlEQnMpID8gcXVlcmllc0J5REJzIDogW3F1ZXJpZXNCeURCc107XG4gICAgICAgICAgICAgICAgcXVlcmllc0J5REJzLm1hcChlID0+IG1ldGFkYXRhW2UubmFtZV0ucXVlcmllcyA9IHRoaXMuY29tcGFjdFF1ZXJpZXMoZSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgb2ZmbGluZSBjb25maWd1cmF0aW9uIGZyb20gKl9vZmZsaW5lLmpzb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0geyp9IG1ldGFkYXRhXG4gICAgICogQHJldHVybnMgeyp9IEEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdpdGggbWV0YWRhdGFcbiAgICAgKi9cbiAgICBwcml2YXRlIGxvYWRPZmZsaW5lQ29uZmlnKG1ldGFkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1ldGFJbmZvKC8uK19vZmZsaW5lXFwuanNvbiQvKVxuICAgICAgICAgICAgLnRoZW4oY29uZmlncyA9PiB7XG4gICAgICAgICAgICAgICAgZm9yRWFjaChjb25maWdzLCBjb25maWcgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGZvckVhY2goY29uZmlnLmVudGl0aWVzLCBlbnRpdHlDb25maWcgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50aXR5U2NoZW1hID0gZmluZChtZXRhZGF0YVtjb25maWcubmFtZV0uc2NoZW1hLmVudGl0aWVzLCBzY2hlbWEgPT4gc2NoZW1hLm5hbWUgPT09IGVudGl0eUNvbmZpZy5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbkluKGVudGl0eVNjaGVtYSwgZW50aXR5Q29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2dTcWwoc3FsaXRlT2JqZWN0OiBTUUxpdGVPYmplY3QpIHtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0gY29uc29sZSxcbiAgICAgICAgICAgIG9yaWdpbmFsRXhlY3V0ZVNxbCA9IHNxbGl0ZU9iamVjdC5leGVjdXRlU3FsO1xuICAgICAgICBzcWxpdGVPYmplY3QuZXhlY3V0ZVNxbCA9IChzcWwsIHBhcmFtcywgbG9nT3V0cHV0PzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbm93KCk7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxFeGVjdXRlU3FsLmNhbGwoc3FsaXRlT2JqZWN0LCBzcWwsIHBhcmFtcykudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChsb2dPdXRwdXQgfHwgdGhpcy5fbG9nU3FsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iakFyciA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm93Q291bnQgPSByZXN1bHQucm93cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqQXJyLnB1c2gocmVzdWx0LnJvd3MuaXRlbShpKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdTUUwgXCIlc1wiICB3aXRoIHBhcmFtcyAlTyB0b29rIFslZCBtc10uIEFuZCB0aGUgcmVzdWx0IGlzICVPJywgc3FsLCBwYXJhbXMsIG5vdygpIC0gc3RhcnRUaW1lLCBvYmpBcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU1FMIFwiJXNcIiB3aXRoIHBhcmFtcyAlTyBmYWlsZWQgd2l0aCBlcnJvciBtZXNzYWdlICVzJywgc3FsLCBwYXJhbXMsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTUUxpdGUgZG9lcyBub3Qgc3VwcG9ydCBib29sZWFuIGRhdGEuIEluc3RlYWQgb2YgdXNpbmcgYm9vbGVhbiB2YWx1ZXMsIGRhdGEgd2lsbCBiZSBjaGFuZ2VkIHRvIDAgb3IgMS5cbiAgICAgKiBJZiB0aGUgdmFsdWUgaXMgJ3RydWUnLCB0aGVuIDEgaXMgc2V0IGFzIHZhbHVlLiBJZiB2YWx1ZSBpcyBub3QgMSBub3IgbnVsbCwgdGhlbiBjb2x1bW4gdmFsdWUgaXMgc2V0IGFzIDAuXG4gICAgICogQHBhcmFtIGRiTmFtZVxuICAgICAqIEBwYXJhbSB0YWJsZU5hbWVcbiAgICAgKiBAcGFyYW0gY29sTmFtZVxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHByaXZhdGUgbm9ybWFsaXplQm9vbGVhbkRhdGEoZGJOYW1lLCB0YWJsZU5hbWUsIGNvbE5hbWUpIHtcbiAgICAgICAgY29uc3QgdHJ1ZVRvMVF1ZXJ5ID0gYHVwZGF0ZSAke2VzY2FwZU5hbWUodGFibGVOYW1lKX0gc2V0ICR7ZXNjYXBlTmFtZShjb2xOYW1lKX0gPSAxIHdoZXJlICR7ZXNjYXBlTmFtZShjb2xOYW1lKX0gPSAndHJ1ZSdgLFxuICAgICAgICAgICAgZXhjZXB0TnVsbEFuZDF0bzBRdWVyeSA9IGB1cGRhdGUgJHtlc2NhcGVOYW1lKHRhYmxlTmFtZSl9IHNldCAke2VzY2FwZU5hbWUoY29sTmFtZSl9ID0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlICR7ZXNjYXBlTmFtZShjb2xOYW1lKX0gaXMgbm90IG51bGwgYW5kICR7ZXNjYXBlTmFtZShjb2xOYW1lKX0gIT0gMWA7XG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGVTUUxRdWVyeShkYk5hbWUsIHRydWVUbzFRdWVyeSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuZXhlY3V0ZVNRTFF1ZXJ5KGRiTmFtZSwgZXhjZXB0TnVsbEFuZDF0bzBRdWVyeSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGRhdGEgdG8gc3VwcG9ydCBTUUxpdGUuXG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICovXG4gICAgcHJpdmF0ZSBub3JtYWxpemVEYXRhKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobWFwKHRoaXMuZGF0YWJhc2VzLCBkYXRhYmFzZSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobWFwKGRhdGFiYXNlLnNjaGVtYS5lbnRpdGllcywgZW50aXR5U2NoZW1hID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobWFwKGVudGl0eVNjaGVtYS5jb2x1bW5zLCBjb2x1bW4gPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnNxbFR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplQm9vbGVhbkRhdGEoZGF0YWJhc2Uuc2NoZW1hLm5hbWUsIGVudGl0eVNjaGVtYS5uYW1lLCBjb2x1bW4ubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5EYXRhYmFzZShkYXRhYmFzZTogREJJbmZvKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNxbGl0ZS5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IGRhdGFiYXNlLnNjaGVtYS5uYW1lICsgJy5kYicsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246ICdkZWZhdWx0J1xuICAgICAgICB9KS50aGVuKHNxbGl0ZU9iamVjdCA9PiB7XG4gICAgICAgICAgICBkYXRhYmFzZS5zcWxpdGVPYmplY3QgPSBzcWxpdGVPYmplY3Q7XG4gICAgICAgICAgICB0aGlzLmxvZ1NxbChzcWxpdGVPYmplY3QpO1xuICAgICAgICAgICAgY29uc3Qgc3RvcmVQcm9taXNlcyA9IG1hcChkYXRhYmFzZS5zY2hlbWEuZW50aXRpZXMsIGVudGl0eVNjaGVtYSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gbmV3IExvY2FsREJTdG9yZSh0aGlzLmRldmljZUZpbGVTZXJ2aWNlLCBlbnRpdHlTY2hlbWEsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgc3FsaXRlT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmNyZWF0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoc3RvcmVQcm9taXNlcykudGhlbihzdG9yZXMgPT4ge1xuICAgICAgICAgICAgICAgIGZvckVhY2goc3RvcmVzLCBzdG9yZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlLnN0b3Jlc1tzdG9yZS5lbnRpdHlTY2hlbWEuZW50aXR5TmFtZV0gPSBzdG9yZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YWJhc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hlbiBhcHAgaXMgb3BlbmVkIGZvciBmaXJzdCB0aW1lICBhZnRlciBhIGZyZXNoIGluc3RhbGwgb3IgdXBkYXRlLCB0aGVuIG9sZCBkYXRhYmFzZXMgYXJlIHJlbW92ZWQgYW5kXG4gICAgICogbmV3IGRhdGFiYXNlcyBhcmUgY3JlYXRlZCB1c2luZyBidW5kbGVkIGRhdGFiYXNlcy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHsqfSBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIHRydWUsIGlmIHRoZSBkYXRhYmFzZXMgYXJlIG5ld2x5IGNyZWF0ZWQgb3IgcmVzb2x2ZWQgd2l0aCBmYWxzZVxuICAgICAqIGlmIGV4aXN0aW5nIGRhdGFiYXNlcyBhcmUgYmVpbmcgdXNlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldFVwRGF0YWJhc2VzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VTZXJ2aWNlLmdldEFwcEJ1aWxkVGltZSgpXG4gICAgICAgICAgICAudGhlbigoYnVpbGRUaW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGJJbmZvID0gdGhpcy5kZXZpY2VTZXJ2aWNlLmdldEVudHJ5KCdkYXRhYmFzZScpIHx8IHt9O1xuICAgICAgICAgICAgICAgIGlmICghZGJJbmZvLmxhc3RCdWlsZFRpbWUgfHwgZGJJbmZvLmxhc3RCdWlsZFRpbWUgIT09IGJ1aWxkVGltZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbkFuZENvcHlEYXRhYmFzZXMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiSW5mby5sYXN0QnVpbGRUaW1lID0gYnVpbGRUaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRldmljZVNlcnZpY2Uuc3RvcmVFbnRyeSgnZGF0YWJhc2UnLCBkYkluZm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIl19