@wavemaker/app-ng-runtime 11.10.5-rc.6100 → 11.11.0-rc.6106

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 (1167) hide show
  1. package/build-task/bundles/index.umd.js +94 -68
  2. package/build-task/esm2022/advanced/carousel/carousel-template/carousel-template.build.mjs +8 -8
  3. package/build-task/esm2022/containers/repeat-template.build.mjs +5 -5
  4. package/build-task/esm2022/containers/wizard/wizard-step/wizard-step.build.mjs +2 -2
  5. package/build-task/esm2022/containers/wizard/wizard.build.mjs +33 -4
  6. package/build-task/esm2022/data/form/form-field/form-field.build.mjs +10 -10
  7. package/build-task/esm2022/data/table/table-column/table-column.build.mjs +15 -11
  8. package/build-task/esm2022/page/page.build.mjs +2 -8
  9. package/build-task/esm2022/public_api.mjs +1 -1
  10. package/build-task/fesm2022/index.mjs +95 -69
  11. package/build-task/fesm2022/index.mjs.map +1 -1
  12. package/components/advanced/carousel/bundles/index.umd.js +8 -36
  13. package/components/advanced/carousel/carousel-template/carousel-template.directive.d.ts +1 -1
  14. package/components/advanced/carousel/carousel.directive.d.ts +1 -1
  15. package/components/advanced/carousel/esm2022/carousel-template/carousel-template.directive.mjs +3 -2
  16. package/components/advanced/carousel/esm2022/carousel.directive.mjs +3 -2
  17. package/components/advanced/carousel/esm2022/public_api.mjs +1 -2
  18. package/components/advanced/carousel/fesm2022/index.mjs +8 -36
  19. package/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
  20. package/components/advanced/carousel/public_api.d.ts +0 -1
  21. package/components/advanced/custom/bundles/index.umd.js +8 -33
  22. package/components/advanced/custom/custom-widget-container/custom-widget-container.directive.d.ts +1 -1
  23. package/components/advanced/custom/custom-widget.directive.d.ts +1 -1
  24. package/components/advanced/custom/esm2022/custom-widget-container/custom-widget-container.directive.mjs +3 -2
  25. package/components/advanced/custom/esm2022/custom-widget.directive.mjs +3 -2
  26. package/components/advanced/custom/esm2022/public_api.mjs +1 -2
  27. package/components/advanced/custom/fesm2022/index.mjs +7 -32
  28. package/components/advanced/custom/fesm2022/index.mjs.map +1 -1
  29. package/components/advanced/custom/public_api.d.ts +0 -1
  30. package/components/advanced/login/bundles/index.umd.js +10 -34
  31. package/components/advanced/login/esm2022/login.component.mjs +7 -6
  32. package/components/advanced/login/esm2022/public_api.mjs +1 -2
  33. package/components/advanced/login/fesm2022/index.mjs +8 -32
  34. package/components/advanced/login/fesm2022/index.mjs.map +1 -1
  35. package/components/advanced/login/login.component.d.ts +1 -1
  36. package/components/advanced/login/public_api.d.ts +0 -1
  37. package/components/advanced/marquee/bundles/index.umd.js +6 -29
  38. package/components/advanced/marquee/esm2022/marquee.directive.mjs +3 -2
  39. package/components/advanced/marquee/esm2022/public_api.mjs +1 -2
  40. package/components/advanced/marquee/fesm2022/index.mjs +5 -28
  41. package/components/advanced/marquee/fesm2022/index.mjs.map +1 -1
  42. package/components/advanced/marquee/marquee.directive.d.ts +1 -1
  43. package/components/advanced/marquee/public_api.d.ts +0 -1
  44. package/components/base/bundles/index.umd.js +76 -274
  45. package/components/base/components.module.d.ts +13 -15
  46. package/components/base/directives/show-in-device.directive.d.ts +1 -1
  47. package/components/base/esm2022/components.module.mjs +7 -13
  48. package/components/base/esm2022/directives/show-in-device.directive.mjs +3 -2
  49. package/components/base/esm2022/pipes/custom-pipes.mjs +32 -16
  50. package/components/base/esm2022/pipes/image.pipe.mjs +3 -2
  51. package/components/base/esm2022/pipes/sanitize.pipe.mjs +3 -2
  52. package/components/base/esm2022/pipes/trust-as.pipe.mjs +3 -2
  53. package/components/base/esm2022/public_api.mjs +1 -2
  54. package/components/base/esm2022/utils/form-utils.mjs +2 -1
  55. package/components/base/esm2022/utils/live-utils.mjs +3 -7
  56. package/components/base/esm2022/widgets/common/base/base.component.mjs +3 -5
  57. package/components/base/esm2022/widgets/common/base/custom-widget-container.directive.mjs +3 -2
  58. package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +3 -2
  59. package/components/base/esm2022/widgets/common/base/text-content.directive.mjs +3 -2
  60. package/components/base/esm2022/widgets/common/container/container.directive.mjs +3 -2
  61. package/components/base/esm2022/widgets/common/dialog/dialog.service.mjs +3 -3
  62. package/components/base/esm2022/widgets/common/item-template/item-template.directive.mjs +3 -2
  63. package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +3 -2
  64. package/components/base/esm2022/widgets/common/message/message.component.mjs +5 -5
  65. package/components/base/esm2022/widgets/common/partial/partial.directive.mjs +3 -2
  66. package/components/base/esm2022/widgets/common/partial-param/partial-param.directive.mjs +5 -3
  67. package/components/base/esm2022/widgets/common/redraw/redrawable.directive.mjs +3 -2
  68. package/components/base/esm2022/widgets/common/repeat-template/repeat-template.directive.mjs +3 -2
  69. package/components/base/fesm2022/index.mjs +76 -272
  70. package/components/base/fesm2022/index.mjs.map +1 -1
  71. package/components/base/pipes/custom-pipes.d.ts +16 -16
  72. package/components/base/pipes/image.pipe.d.ts +1 -1
  73. package/components/base/pipes/sanitize.pipe.d.ts +1 -1
  74. package/components/base/pipes/trust-as.pipe.d.ts +1 -1
  75. package/components/base/public_api.d.ts +0 -1
  76. package/components/base/widgets/common/base/custom-widget-container.directive.d.ts +1 -1
  77. package/components/base/widgets/common/base/partial-container.directive.d.ts +1 -1
  78. package/components/base/widgets/common/base/text-content.directive.d.ts +1 -1
  79. package/components/base/widgets/common/container/container.directive.d.ts +1 -1
  80. package/components/base/widgets/common/item-template/item-template.directive.d.ts +1 -1
  81. package/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +1 -1
  82. package/components/base/widgets/common/message/message.component.d.ts +1 -1
  83. package/components/base/widgets/common/partial/partial.directive.d.ts +1 -1
  84. package/components/base/widgets/common/partial-param/partial-param.directive.d.ts +2 -2
  85. package/components/base/widgets/common/redraw/redrawable.directive.d.ts +1 -1
  86. package/components/base/widgets/common/repeat-template/repeat-template.directive.d.ts +1 -1
  87. package/components/basic/default/anchor/anchor.component.d.ts +1 -1
  88. package/components/basic/default/audio/audio.component.d.ts +1 -1
  89. package/components/basic/default/bundles/index.umd.js +100 -148
  90. package/components/basic/default/esm2022/anchor/anchor.component.mjs +23 -21
  91. package/components/basic/default/esm2022/audio/audio.component.mjs +7 -6
  92. package/components/basic/default/esm2022/html/html.directive.mjs +3 -2
  93. package/components/basic/default/esm2022/icon/icon.component.mjs +17 -16
  94. package/components/basic/default/esm2022/iframe/iframe.component.mjs +14 -13
  95. package/components/basic/default/esm2022/label/label.directive.mjs +3 -2
  96. package/components/basic/default/esm2022/picture/picture.directive.mjs +3 -2
  97. package/components/basic/default/esm2022/picture/picture.props.mjs +1 -5
  98. package/components/basic/default/esm2022/public_api.mjs +1 -2
  99. package/components/basic/default/esm2022/spinner/spinner.component.mjs +26 -24
  100. package/components/basic/default/esm2022/video/video.component.mjs +19 -18
  101. package/components/basic/default/fesm2022/index.mjs +101 -148
  102. package/components/basic/default/fesm2022/index.mjs.map +1 -1
  103. package/components/basic/default/html/html.directive.d.ts +1 -1
  104. package/components/basic/default/icon/icon.component.d.ts +1 -1
  105. package/components/basic/default/iframe/iframe.component.d.ts +1 -1
  106. package/components/basic/default/label/label.directive.d.ts +1 -1
  107. package/components/basic/default/picture/picture.directive.d.ts +1 -1
  108. package/components/basic/default/public_api.d.ts +0 -1
  109. package/components/basic/default/spinner/spinner.component.d.ts +1 -1
  110. package/components/basic/default/video/video.component.d.ts +1 -1
  111. package/components/basic/progress/bundles/index.umd.js +20 -51
  112. package/components/basic/progress/esm2022/progress-bar/progress-bar.component.mjs +12 -11
  113. package/components/basic/progress/esm2022/progress-circle/progress-circle.component.mjs +8 -6
  114. package/components/basic/progress/esm2022/public_api.mjs +1 -2
  115. package/components/basic/progress/fesm2022/index.mjs +19 -49
  116. package/components/basic/progress/fesm2022/index.mjs.map +1 -1
  117. package/components/basic/progress/progress-bar/progress-bar.component.d.ts +1 -1
  118. package/components/basic/progress/progress-circle/progress-circle.component.d.ts +1 -1
  119. package/components/basic/progress/public_api.d.ts +0 -1
  120. package/components/basic/rich-text-editor/bundles/index.umd.js +15 -40
  121. package/components/basic/rich-text-editor/esm2022/public_api.mjs +1 -2
  122. package/components/basic/rich-text-editor/esm2022/rich-text-editor.component.mjs +13 -12
  123. package/components/basic/rich-text-editor/fesm2022/index.mjs +13 -37
  124. package/components/basic/rich-text-editor/fesm2022/index.mjs.map +1 -1
  125. package/components/basic/rich-text-editor/public_api.d.ts +0 -1
  126. package/components/basic/rich-text-editor/rich-text-editor.component.d.ts +1 -1
  127. package/components/basic/search/bundles/index.umd.js +170 -207
  128. package/components/basic/search/esm2022/public_api.mjs +1 -2
  129. package/components/basic/search/esm2022/scrollable.directive.mjs +3 -2
  130. package/components/basic/search/esm2022/search.component.mjs +76 -72
  131. package/components/basic/search/fesm2022/index.mjs +107 -143
  132. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  133. package/components/basic/search/public_api.d.ts +0 -1
  134. package/components/basic/search/scrollable.directive.d.ts +1 -1
  135. package/components/basic/search/search.component.d.ts +1 -1
  136. package/components/basic/tree/bundles/index.umd.js +9 -33
  137. package/components/basic/tree/esm2022/public_api.mjs +1 -2
  138. package/components/basic/tree/esm2022/tree.component.mjs +7 -6
  139. package/components/basic/tree/fesm2022/index.mjs +8 -32
  140. package/components/basic/tree/fesm2022/index.mjs.map +1 -1
  141. package/components/basic/tree/public_api.d.ts +0 -1
  142. package/components/basic/tree/tree.component.d.ts +1 -1
  143. package/components/chart/bundles/index.umd.js +25 -53
  144. package/components/chart/chart.component.d.ts +1 -1
  145. package/components/chart/esm2022/chart.component.mjs +26 -24
  146. package/components/chart/esm2022/chart.utils.mjs +2 -1
  147. package/components/chart/esm2022/public_api.mjs +1 -2
  148. package/components/chart/fesm2022/index.mjs +26 -52
  149. package/components/chart/fesm2022/index.mjs.map +1 -1
  150. package/components/chart/public_api.d.ts +0 -1
  151. package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +1 -1
  152. package/components/containers/accordion/accordion.directive.d.ts +1 -1
  153. package/components/containers/accordion/bundles/index.umd.js +208 -237
  154. package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +10 -11
  155. package/components/containers/accordion/esm2022/accordion.directive.mjs +5 -4
  156. package/components/containers/accordion/esm2022/public_api.mjs +1 -2
  157. package/components/containers/accordion/fesm2022/index.mjs +189 -217
  158. package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  159. package/components/containers/accordion/public_api.d.ts +0 -1
  160. package/components/containers/layout-grid/bundles/index.umd.js +13 -43
  161. package/components/containers/layout-grid/esm2022/layout-grid-column/layout-grid-column.directive.mjs +7 -9
  162. package/components/containers/layout-grid/esm2022/layout-grid-row/layout-grid-row.directive.mjs +3 -2
  163. package/components/containers/layout-grid/esm2022/layout-grid.directive.mjs +3 -2
  164. package/components/containers/layout-grid/esm2022/public_api.mjs +1 -2
  165. package/components/containers/layout-grid/fesm2022/index.mjs +13 -43
  166. package/components/containers/layout-grid/fesm2022/index.mjs.map +1 -1
  167. package/components/containers/layout-grid/layout-grid-column/layout-grid-column.directive.d.ts +1 -1
  168. package/components/containers/layout-grid/layout-grid-row/layout-grid-row.directive.d.ts +1 -1
  169. package/components/containers/layout-grid/layout-grid.directive.d.ts +1 -1
  170. package/components/containers/layout-grid/public_api.d.ts +0 -1
  171. package/components/containers/linear-layout/bundles/index.umd.js +8 -33
  172. package/components/containers/linear-layout/esm2022/linear-layout-item/linear-layout-item.directive.mjs +3 -2
  173. package/components/containers/linear-layout/esm2022/linear-layout.directive.mjs +3 -2
  174. package/components/containers/linear-layout/esm2022/public_api.mjs +1 -2
  175. package/components/containers/linear-layout/fesm2022/index.mjs +7 -32
  176. package/components/containers/linear-layout/fesm2022/index.mjs.map +1 -1
  177. package/components/containers/linear-layout/linear-layout-item/linear-layout-item.directive.d.ts +1 -1
  178. package/components/containers/linear-layout/linear-layout.directive.d.ts +1 -1
  179. package/components/containers/linear-layout/public_api.d.ts +0 -1
  180. package/components/containers/panel/bundles/index.umd.js +87 -118
  181. package/components/containers/panel/esm2022/panel.component.mjs +48 -46
  182. package/components/containers/panel/esm2022/public_api.mjs +1 -2
  183. package/components/containers/panel/fesm2022/index.mjs +49 -79
  184. package/components/containers/panel/fesm2022/index.mjs.map +1 -1
  185. package/components/containers/panel/panel.component.d.ts +1 -1
  186. package/components/containers/panel/public_api.d.ts +0 -1
  187. package/components/containers/tabs/bundles/index.umd.js +84 -116
  188. package/components/containers/tabs/esm2022/public_api.mjs +1 -2
  189. package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +8 -10
  190. package/components/containers/tabs/esm2022/tabs.component.mjs +35 -33
  191. package/components/containers/tabs/esm2022/tabs.props.mjs +1 -5
  192. package/components/containers/tabs/fesm2022/index.mjs +45 -76
  193. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  194. package/components/containers/tabs/public_api.d.ts +0 -1
  195. package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +1 -1
  196. package/components/containers/tabs/tabs.component.d.ts +1 -1
  197. package/components/containers/tile/bundles/index.umd.js +6 -29
  198. package/components/containers/tile/esm2022/public_api.mjs +1 -2
  199. package/components/containers/tile/esm2022/tile.directive.mjs +3 -2
  200. package/components/containers/tile/fesm2022/index.mjs +5 -28
  201. package/components/containers/tile/fesm2022/index.mjs.map +1 -1
  202. package/components/containers/tile/public_api.d.ts +0 -1
  203. package/components/containers/tile/tile.directive.d.ts +1 -1
  204. package/components/containers/wizard/bundles/index.umd.js +355 -186
  205. package/components/containers/wizard/esm2022/public_api.mjs +2 -3
  206. package/components/containers/wizard/esm2022/wizard-action/wizard-action.directive.mjs +3 -2
  207. package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +176 -0
  208. package/components/containers/wizard/esm2022/wizard-step/wizard-step.props.mjs +8 -5
  209. package/components/containers/wizard/esm2022/wizard.component.mjs +264 -102
  210. package/components/containers/wizard/esm2022/wizard.props.mjs +8 -4
  211. package/components/containers/wizard/fesm2022/index.mjs +323 -152
  212. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  213. package/components/containers/wizard/public_api.d.ts +1 -2
  214. package/components/containers/wizard/wizard-action/wizard-action.directive.d.ts +1 -1
  215. package/components/containers/wizard/wizard-step/{wizard-step.directive.d.ts → wizard-step.component.d.ts} +12 -6
  216. package/components/containers/wizard/wizard.component.d.ts +64 -18
  217. package/components/data/card/bundles/index.umd.js +92 -135
  218. package/components/data/card/card-actions/card-actions.directive.d.ts +1 -1
  219. package/components/data/card/card-content/card-content.component.d.ts +1 -1
  220. package/components/data/card/card-footer/card-footer.directive.d.ts +1 -1
  221. package/components/data/card/card.component.d.ts +1 -1
  222. package/components/data/card/esm2022/card-actions/card-actions.directive.mjs +3 -2
  223. package/components/data/card/esm2022/card-content/card-content.component.mjs +7 -6
  224. package/components/data/card/esm2022/card-footer/card-footer.directive.mjs +3 -2
  225. package/components/data/card/esm2022/card.component.mjs +39 -38
  226. package/components/data/card/esm2022/public_api.mjs +1 -2
  227. package/components/data/card/fesm2022/index.mjs +49 -92
  228. package/components/data/card/fesm2022/index.mjs.map +1 -1
  229. package/components/data/card/public_api.d.ts +0 -1
  230. package/components/data/form/bundles/index.umd.js +115 -182
  231. package/components/data/form/esm2022/form-action/form-action.directive.mjs +3 -2
  232. package/components/data/form/esm2022/form-field/form-field.directive.mjs +3 -2
  233. package/components/data/form/esm2022/form-widget.directive.mjs +3 -2
  234. package/components/data/form/esm2022/form.component.mjs +101 -104
  235. package/components/data/form/esm2022/form.props.mjs +1 -11
  236. package/components/data/form/esm2022/live-actions/dependson.directive.mjs +3 -2
  237. package/components/data/form/esm2022/live-actions/live-actions.directive.mjs +3 -2
  238. package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +3 -2
  239. package/components/data/form/esm2022/live-form/live-form.directive.mjs +3 -6
  240. package/components/data/form/esm2022/public_api.mjs +1 -2
  241. package/components/data/form/fesm2022/index.mjs +117 -184
  242. package/components/data/form/fesm2022/index.mjs.map +1 -1
  243. package/components/data/form/form-action/form-action.directive.d.ts +1 -1
  244. package/components/data/form/form-field/form-field.directive.d.ts +1 -1
  245. package/components/data/form/form-widget.directive.d.ts +1 -1
  246. package/components/data/form/form.component.d.ts +1 -1
  247. package/components/data/form/live-actions/dependson.directive.d.ts +1 -1
  248. package/components/data/form/live-actions/live-actions.directive.d.ts +1 -1
  249. package/components/data/form/live-filter/live-filter.directive.d.ts +1 -1
  250. package/components/data/form/live-form/live-form.directive.d.ts +1 -1
  251. package/components/data/form/public_api.d.ts +0 -1
  252. package/components/data/list/bundles/index.umd.js +195 -504
  253. package/components/data/list/esm2022/list-item.directive.mjs +4 -3
  254. package/components/data/list/esm2022/list.component.mjs +187 -232
  255. package/components/data/list/esm2022/list.props.mjs +2 -3
  256. package/components/data/list/esm2022/public_api.mjs +1 -2
  257. package/components/data/list/fesm2022/index.mjs +193 -502
  258. package/components/data/list/fesm2022/index.mjs.map +1 -1
  259. package/components/data/list/list-item.directive.d.ts +1 -1
  260. package/components/data/list/list.component.d.ts +1 -1
  261. package/components/data/list/public_api.d.ts +0 -1
  262. package/components/data/live-table/bundles/index.umd.js +9 -33
  263. package/components/data/live-table/esm2022/live-table.component.mjs +7 -6
  264. package/components/data/live-table/esm2022/public_api.mjs +1 -2
  265. package/components/data/live-table/fesm2022/index.mjs +8 -32
  266. package/components/data/live-table/fesm2022/index.mjs.map +1 -1
  267. package/components/data/live-table/live-table.component.d.ts +1 -1
  268. package/components/data/live-table/public_api.d.ts +0 -1
  269. package/components/data/pagination/bundles/index.umd.js +80 -110
  270. package/components/data/pagination/esm2022/pagination.component.mjs +80 -76
  271. package/components/data/pagination/esm2022/public_api.mjs +1 -2
  272. package/components/data/pagination/fesm2022/index.mjs +81 -110
  273. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  274. package/components/data/pagination/pagination.component.d.ts +1 -1
  275. package/components/data/pagination/public_api.d.ts +0 -1
  276. package/components/data/table/bundles/index.umd.js +66 -135
  277. package/components/data/table/esm2022/public_api.mjs +1 -2
  278. package/components/data/table/esm2022/table-action/table-action.directive.mjs +3 -2
  279. package/components/data/table/esm2022/table-column/table-column.directive.mjs +3 -2
  280. package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +3 -2
  281. package/components/data/table/esm2022/table-cud.directive.mjs +3 -2
  282. package/components/data/table/esm2022/table-filter.directive.mjs +4 -2
  283. package/components/data/table/esm2022/table-row/table-row.directive.mjs +3 -2
  284. package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +3 -2
  285. package/components/data/table/esm2022/table.component.mjs +50 -49
  286. package/components/data/table/fesm2022/index.mjs +70 -140
  287. package/components/data/table/fesm2022/index.mjs.map +1 -1
  288. package/components/data/table/public_api.d.ts +0 -1
  289. package/components/data/table/table-action/table-action.directive.d.ts +1 -1
  290. package/components/data/table/table-column/table-column.directive.d.ts +1 -1
  291. package/components/data/table/table-column-group/table-column-group.directive.d.ts +1 -1
  292. package/components/data/table/table-cud.directive.d.ts +1 -1
  293. package/components/data/table/table-filter.directive.d.ts +1 -1
  294. package/components/data/table/table-row/table-row.directive.d.ts +1 -1
  295. package/components/data/table/table-row-action/table-row-action.directive.d.ts +1 -1
  296. package/components/data/table/table.component.d.ts +1 -1
  297. package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +1 -1
  298. package/components/dialogs/alert-dialog/bundles/index.umd.js +32 -64
  299. package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +10 -10
  300. package/components/dialogs/alert-dialog/esm2022/public_api.mjs +1 -2
  301. package/components/dialogs/alert-dialog/fesm2022/index.mjs +11 -43
  302. package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
  303. package/components/dialogs/alert-dialog/public_api.d.ts +0 -1
  304. package/components/dialogs/confirm-dialog/bundles/index.umd.js +10 -42
  305. package/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +1 -1
  306. package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +9 -9
  307. package/components/dialogs/confirm-dialog/esm2022/public_api.mjs +1 -2
  308. package/components/dialogs/confirm-dialog/fesm2022/index.mjs +10 -42
  309. package/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -1
  310. package/components/dialogs/confirm-dialog/public_api.d.ts +0 -1
  311. package/components/dialogs/default/bundles/index.umd.js +76 -136
  312. package/components/dialogs/default/dialog-body/dialog-body.directive.d.ts +1 -1
  313. package/components/dialogs/default/dialog-footer/dialog-footer.directive.d.ts +1 -1
  314. package/components/dialogs/default/dialog-header/dialog-header.component.d.ts +1 -1
  315. package/components/dialogs/default/esm2022/base-dialog.mjs +3 -3
  316. package/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +3 -2
  317. package/components/dialogs/default/esm2022/dialog-footer/dialog-footer.directive.mjs +3 -2
  318. package/components/dialogs/default/esm2022/dialog-header/dialog-header.component.mjs +70 -97
  319. package/components/dialogs/default/esm2022/public_api.mjs +1 -2
  320. package/components/dialogs/default/fesm2022/index.mjs +78 -137
  321. package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  322. package/components/dialogs/default/public_api.d.ts +0 -1
  323. package/components/dialogs/design-dialog/bundles/index.umd.js +16 -47
  324. package/components/dialogs/design-dialog/dialog.component.d.ts +1 -1
  325. package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +14 -13
  326. package/components/dialogs/design-dialog/esm2022/public_api.mjs +1 -2
  327. package/components/dialogs/design-dialog/fesm2022/index.mjs +14 -45
  328. package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
  329. package/components/dialogs/design-dialog/public_api.d.ts +0 -1
  330. package/components/dialogs/iframe-dialog/bundles/index.umd.js +20 -57
  331. package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +21 -21
  332. package/components/dialogs/iframe-dialog/esm2022/public_api.mjs +1 -2
  333. package/components/dialogs/iframe-dialog/fesm2022/index.mjs +21 -57
  334. package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
  335. package/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +1 -1
  336. package/components/dialogs/iframe-dialog/public_api.d.ts +0 -1
  337. package/components/dialogs/login-dialog/bundles/index.umd.js +6 -38
  338. package/components/dialogs/login-dialog/esm2022/login-dialog.directive.mjs +3 -2
  339. package/components/dialogs/login-dialog/esm2022/public_api.mjs +1 -2
  340. package/components/dialogs/login-dialog/fesm2022/index.mjs +6 -41
  341. package/components/dialogs/login-dialog/fesm2022/index.mjs.map +1 -1
  342. package/components/dialogs/login-dialog/login-dialog.directive.d.ts +1 -1
  343. package/components/dialogs/login-dialog/public_api.d.ts +0 -1
  344. package/components/dialogs/partial-dialog/bundles/index.umd.js +17 -49
  345. package/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +16 -15
  346. package/components/dialogs/partial-dialog/esm2022/public_api.mjs +1 -2
  347. package/components/dialogs/partial-dialog/fesm2022/index.mjs +16 -47
  348. package/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
  349. package/components/dialogs/partial-dialog/partial-dialog.component.d.ts +1 -1
  350. package/components/dialogs/partial-dialog/public_api.d.ts +0 -1
  351. package/components/input/calendar/bundles/index.umd.js +19 -46
  352. package/components/input/calendar/calendar.component.d.ts +1 -1
  353. package/components/input/calendar/esm2022/calendar.component.mjs +24 -10
  354. package/components/input/calendar/esm2022/calendar.props.mjs +1 -1
  355. package/components/input/calendar/esm2022/public_api.mjs +1 -2
  356. package/components/input/calendar/fesm2022/index.mjs +26 -48
  357. package/components/input/calendar/fesm2022/index.mjs.map +1 -1
  358. package/components/input/calendar/public_api.d.ts +0 -1
  359. package/components/input/chips/bundles/index.umd.js +86 -114
  360. package/components/input/chips/chips.component.d.ts +1 -1
  361. package/components/input/chips/esm2022/chips.component.mjs +28 -27
  362. package/components/input/chips/esm2022/public_api.mjs +1 -2
  363. package/components/input/chips/fesm2022/index.mjs +29 -56
  364. package/components/input/chips/fesm2022/index.mjs.map +1 -1
  365. package/components/input/chips/public_api.d.ts +0 -1
  366. package/components/input/color-picker/bundles/index.umd.js +10 -40
  367. package/components/input/color-picker/color-picker.component.d.ts +1 -1
  368. package/components/input/color-picker/esm2022/color-picker.component.mjs +10 -6
  369. package/components/input/color-picker/esm2022/public_api.mjs +1 -2
  370. package/components/input/color-picker/fesm2022/index.mjs +11 -40
  371. package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
  372. package/components/input/color-picker/public_api.d.ts +0 -1
  373. package/components/input/currency/bundles/index.umd.js +11 -41
  374. package/components/input/currency/currency.component.d.ts +1 -1
  375. package/components/input/currency/esm2022/currency.component.mjs +8 -6
  376. package/components/input/currency/esm2022/public_api.mjs +1 -2
  377. package/components/input/currency/fesm2022/index.mjs +11 -41
  378. package/components/input/currency/fesm2022/index.mjs.map +1 -1
  379. package/components/input/currency/public_api.d.ts +0 -1
  380. package/components/input/default/bundles/index.umd.js +2183 -2263
  381. package/components/input/default/button/button.component.d.ts +1 -1
  382. package/components/input/default/button-group/button-group.directive.d.ts +1 -1
  383. package/components/input/default/caption-position.directive.d.ts +1 -1
  384. package/components/input/default/checkbox/checkbox.component.d.ts +1 -1
  385. package/components/input/default/checkboxset/checkboxset.component.d.ts +1 -1
  386. package/components/input/default/composite/composite.directive.d.ts +1 -1
  387. package/components/input/default/esm2022/button/button.component.mjs +23 -21
  388. package/components/input/default/esm2022/button-group/button-group.directive.mjs +3 -2
  389. package/components/input/default/esm2022/caption-position.directive.mjs +3 -2
  390. package/components/input/default/esm2022/checkbox/checkbox.component.mjs +9 -6
  391. package/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +73 -72
  392. package/components/input/default/esm2022/composite/composite.directive.mjs +3 -2
  393. package/components/input/default/esm2022/number/number.component.mjs +9 -6
  394. package/components/input/default/esm2022/public_api.mjs +1 -2
  395. package/components/input/default/esm2022/radioset/radioset.component.mjs +73 -72
  396. package/components/input/default/esm2022/select/select.component.mjs +29 -32
  397. package/components/input/default/esm2022/switch/switch.component.mjs +29 -27
  398. package/components/input/default/esm2022/text/calendar/input-calendar.component.mjs +9 -6
  399. package/components/input/default/esm2022/text/color/input-color.component.mjs +9 -6
  400. package/components/input/default/esm2022/text/email/input-email.component.mjs +9 -6
  401. package/components/input/default/esm2022/text/number/input-number.component.mjs +9 -6
  402. package/components/input/default/esm2022/text/text/input-text.component.mjs +10 -6
  403. package/components/input/default/esm2022/textarea/textarea.component.mjs +14 -11
  404. package/components/input/default/fesm2022/index.mjs +2198 -2277
  405. package/components/input/default/fesm2022/index.mjs.map +1 -1
  406. package/components/input/default/number/number.component.d.ts +1 -1
  407. package/components/input/default/public_api.d.ts +0 -1
  408. package/components/input/default/radioset/radioset.component.d.ts +1 -1
  409. package/components/input/default/select/select.component.d.ts +1 -1
  410. package/components/input/default/switch/switch.component.d.ts +1 -1
  411. package/components/input/default/text/calendar/input-calendar.component.d.ts +1 -1
  412. package/components/input/default/text/color/input-color.component.d.ts +1 -1
  413. package/components/input/default/text/email/input-email.component.d.ts +1 -1
  414. package/components/input/default/text/number/input-number.component.d.ts +1 -1
  415. package/components/input/default/text/text/input-text.component.d.ts +1 -1
  416. package/components/input/default/textarea/textarea.component.d.ts +1 -1
  417. package/components/input/epoch/base-date-time.component.d.ts +0 -1
  418. package/components/input/epoch/bundles/index.umd.js +181 -229
  419. package/components/input/epoch/date/date.component.d.ts +1 -1
  420. package/components/input/epoch/date/imaskUtil.d.ts +2 -2
  421. package/components/input/epoch/date-time/date-time-picker.component.d.ts +6 -6
  422. package/components/input/epoch/date-time/date-time.component.d.ts +1 -1
  423. package/components/input/epoch/esm2022/base-date-time.component.mjs +5 -9
  424. package/components/input/epoch/esm2022/date/date.component.mjs +19 -18
  425. package/components/input/epoch/esm2022/date/imaskUtil.mjs +2 -1
  426. package/components/input/epoch/esm2022/date-time/date-time-picker.component.mjs +75 -62
  427. package/components/input/epoch/esm2022/date-time/date-time.component.mjs +27 -24
  428. package/components/input/epoch/esm2022/picker/picker.component.mjs +33 -28
  429. package/components/input/epoch/esm2022/public_api.mjs +1 -2
  430. package/components/input/epoch/esm2022/time/time.component.mjs +24 -21
  431. package/components/input/epoch/fesm2022/index.mjs +158 -204
  432. package/components/input/epoch/fesm2022/index.mjs.map +1 -1
  433. package/components/input/epoch/picker/picker.component.d.ts +2 -2
  434. package/components/input/epoch/public_api.d.ts +0 -1
  435. package/components/input/epoch/time/time.component.d.ts +1 -1
  436. package/components/input/file-upload/bundles/index.umd.js +135 -178
  437. package/components/input/file-upload/esm2022/file-upload.component.mjs +133 -150
  438. package/components/input/file-upload/esm2022/public_api.mjs +1 -2
  439. package/components/input/file-upload/fesm2022/index.mjs +133 -175
  440. package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  441. package/components/input/file-upload/file-upload.component.d.ts +1 -2
  442. package/components/input/file-upload/public_api.d.ts +0 -1
  443. package/components/input/rating/bundles/index.umd.js +50 -77
  444. package/components/input/rating/esm2022/public_api.mjs +1 -2
  445. package/components/input/rating/esm2022/rating.component.mjs +23 -20
  446. package/components/input/rating/fesm2022/index.mjs +23 -49
  447. package/components/input/rating/fesm2022/index.mjs.map +1 -1
  448. package/components/input/rating/public_api.d.ts +0 -1
  449. package/components/input/rating/rating.component.d.ts +1 -1
  450. package/components/input/slider/bundles/index.umd.js +35 -63
  451. package/components/input/slider/esm2022/public_api.mjs +1 -2
  452. package/components/input/slider/esm2022/slider.component.mjs +15 -13
  453. package/components/input/slider/fesm2022/index.mjs +15 -42
  454. package/components/input/slider/fesm2022/index.mjs.map +1 -1
  455. package/components/input/slider/public_api.d.ts +0 -1
  456. package/components/input/slider/slider.component.d.ts +1 -1
  457. package/components/navigation/breadcrumb/breadcrumb.component.d.ts +1 -1
  458. package/components/navigation/breadcrumb/bundles/index.umd.js +40 -67
  459. package/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +23 -21
  460. package/components/navigation/breadcrumb/esm2022/public_api.mjs +1 -2
  461. package/components/navigation/breadcrumb/fesm2022/index.mjs +23 -50
  462. package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
  463. package/components/navigation/breadcrumb/public_api.d.ts +0 -1
  464. package/components/navigation/menu/bundles/index.umd.js +642 -696
  465. package/components/navigation/menu/esm2022/menu-adapator.component.mjs +1 -1
  466. package/components/navigation/menu/esm2022/menu-dropdown/menu-dropdown.component.mjs +11 -9
  467. package/components/navigation/menu/esm2022/menu-dropdown-item/menu-dropdown-item.component.mjs +24 -18
  468. package/components/navigation/menu/esm2022/menu.component.mjs +34 -31
  469. package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +3 -2
  470. package/components/navigation/menu/esm2022/nav/nav.component.mjs +39 -29
  471. package/components/navigation/menu/esm2022/nav/navigation-control.directive.mjs +6 -3
  472. package/components/navigation/menu/esm2022/public_api.mjs +1 -2
  473. package/components/navigation/menu/fesm2022/index.mjs +534 -587
  474. package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  475. package/components/navigation/menu/menu-dropdown/menu-dropdown.component.d.ts +1 -1
  476. package/components/navigation/menu/menu-dropdown-item/menu-dropdown-item.component.d.ts +1 -1
  477. package/components/navigation/menu/menu.component.d.ts +1 -1
  478. package/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +1 -1
  479. package/components/navigation/menu/nav/nav.component.d.ts +1 -1
  480. package/components/navigation/menu/nav/navigation-control.directive.d.ts +1 -1
  481. package/components/navigation/menu/public_api.d.ts +0 -1
  482. package/components/navigation/navbar/bundles/index.umd.js +20 -44
  483. package/components/navigation/navbar/esm2022/navbar.component.mjs +18 -16
  484. package/components/navigation/navbar/esm2022/public_api.mjs +1 -2
  485. package/components/navigation/navbar/fesm2022/index.mjs +18 -41
  486. package/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
  487. package/components/navigation/navbar/navbar.component.d.ts +1 -1
  488. package/components/navigation/navbar/public_api.d.ts +0 -1
  489. package/components/navigation/popover/bundles/index.umd.js +12 -43
  490. package/components/navigation/popover/esm2022/popover.component.mjs +11 -9
  491. package/components/navigation/popover/esm2022/public_api.mjs +1 -2
  492. package/components/navigation/popover/fesm2022/index.mjs +11 -41
  493. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  494. package/components/navigation/popover/popover.component.d.ts +1 -1
  495. package/components/navigation/popover/public_api.d.ts +0 -1
  496. package/components/page/default/bundles/index.umd.js +96 -138
  497. package/components/page/default/content/content.component.d.ts +1 -1
  498. package/components/page/default/esm2022/content/content.component.mjs +7 -6
  499. package/components/page/default/esm2022/layout.directive.mjs +3 -2
  500. package/components/page/default/esm2022/page-content/page-content.component.mjs +7 -6
  501. package/components/page/default/esm2022/page-content/page-content.props.mjs +2 -3
  502. package/components/page/default/esm2022/page.directive.mjs +3 -2
  503. package/components/page/default/esm2022/public_api.mjs +1 -2
  504. package/components/page/default/esm2022/router-outlet.directive.mjs +3 -2
  505. package/components/page/default/esm2022/spa-page.directive.mjs +3 -2
  506. package/components/page/default/fesm2022/index.mjs +96 -138
  507. package/components/page/default/fesm2022/index.mjs.map +1 -1
  508. package/components/page/default/layout.directive.d.ts +1 -1
  509. package/components/page/default/page-content/page-content.component.d.ts +1 -1
  510. package/components/page/default/page.directive.d.ts +1 -1
  511. package/components/page/default/public_api.d.ts +0 -1
  512. package/components/page/default/router-outlet.directive.d.ts +1 -1
  513. package/components/page/default/spa-page.directive.d.ts +1 -1
  514. package/components/page/footer/bundles/index.umd.js +6 -29
  515. package/components/page/footer/esm2022/footer.directive.mjs +3 -2
  516. package/components/page/footer/esm2022/public_api.mjs +1 -2
  517. package/components/page/footer/fesm2022/index.mjs +5 -28
  518. package/components/page/footer/fesm2022/index.mjs.map +1 -1
  519. package/components/page/footer/footer.directive.d.ts +1 -1
  520. package/components/page/footer/public_api.d.ts +0 -1
  521. package/components/page/header/bundles/index.umd.js +9 -33
  522. package/components/page/header/esm2022/header.component.mjs +7 -6
  523. package/components/page/header/esm2022/public_api.mjs +1 -2
  524. package/components/page/header/fesm2022/index.mjs +8 -32
  525. package/components/page/header/fesm2022/index.mjs.map +1 -1
  526. package/components/page/header/header.component.d.ts +1 -1
  527. package/components/page/header/public_api.d.ts +0 -1
  528. package/components/page/left-panel/bundles/index.umd.js +6 -29
  529. package/components/page/left-panel/esm2022/left-panel.directive.mjs +3 -2
  530. package/components/page/left-panel/esm2022/public_api.mjs +1 -2
  531. package/components/page/left-panel/fesm2022/index.mjs +5 -28
  532. package/components/page/left-panel/fesm2022/index.mjs.map +1 -1
  533. package/components/page/left-panel/left-panel.directive.d.ts +1 -1
  534. package/components/page/left-panel/public_api.d.ts +0 -1
  535. package/components/page/right-panel/bundles/index.umd.js +6 -29
  536. package/components/page/right-panel/esm2022/public_api.mjs +1 -2
  537. package/components/page/right-panel/esm2022/right-panel.directive.mjs +3 -2
  538. package/components/page/right-panel/fesm2022/index.mjs +5 -28
  539. package/components/page/right-panel/fesm2022/index.mjs.map +1 -1
  540. package/components/page/right-panel/public_api.d.ts +0 -1
  541. package/components/page/right-panel/right-panel.directive.d.ts +1 -1
  542. package/components/page/top-nav/bundles/index.umd.js +6 -29
  543. package/components/page/top-nav/esm2022/public_api.mjs +1 -2
  544. package/components/page/top-nav/esm2022/top-nav.directive.mjs +3 -2
  545. package/components/page/top-nav/fesm2022/index.mjs +5 -28
  546. package/components/page/top-nav/fesm2022/index.mjs.map +1 -1
  547. package/components/page/top-nav/public_api.d.ts +0 -1
  548. package/components/page/top-nav/top-nav.directive.d.ts +1 -1
  549. package/components/prefab/bundles/index.umd.js +8 -33
  550. package/components/prefab/esm2022/prefab-container/prefab-container.directive.mjs +3 -2
  551. package/components/prefab/esm2022/prefab.directive.mjs +3 -2
  552. package/components/prefab/esm2022/public_api.mjs +1 -2
  553. package/components/prefab/fesm2022/index.mjs +7 -32
  554. package/components/prefab/fesm2022/index.mjs.map +1 -1
  555. package/components/prefab/prefab-container/prefab-container.directive.d.ts +1 -1
  556. package/components/prefab/prefab.directive.d.ts +1 -1
  557. package/components/prefab/public_api.d.ts +0 -1
  558. package/core/bundles/index.umd.js +30 -85
  559. package/core/esm2022/public_api.mjs +2 -3
  560. package/core/esm2022/utils/build-utils.mjs +9 -5
  561. package/core/esm2022/utils/utils.mjs +11 -40
  562. package/core/fesm2022/index.mjs +31 -81
  563. package/core/fesm2022/index.mjs.map +1 -1
  564. package/core/public_api.d.ts +1 -2
  565. package/core/utils/utils.d.ts +1 -3
  566. package/http/bundles/index.umd.js +9 -34
  567. package/http/esm2022/http.service.mjs +6 -3
  568. package/http/esm2022/public_api.mjs +4 -2
  569. package/http/fesm2022/index.mjs +9 -34
  570. package/http/fesm2022/index.mjs.map +1 -1
  571. package/http/public_api.d.ts +3 -1
  572. package/npm-shrinkwrap.json +2 -2
  573. package/oAuth/bundles/index.umd.js +7 -42
  574. package/oAuth/esm2022/oAuth.utils.mjs +6 -23
  575. package/oAuth/esm2022/public_api.mjs +1 -2
  576. package/oAuth/fesm2022/index.mjs +7 -40
  577. package/oAuth/fesm2022/index.mjs.map +1 -1
  578. package/oAuth/public_api.d.ts +0 -1
  579. package/package-lock.json +2 -2
  580. package/package.json +1 -1
  581. package/runtime/base/bundles/index.umd.js +681 -596
  582. package/runtime/base/components/app-component/app.component.d.ts +1 -1
  583. package/runtime/base/components/app-spinner.component.d.ts +1 -1
  584. package/runtime/base/components/custom-toaster.component.d.ts +1 -1
  585. package/runtime/base/components/empty-component/empty-page.component.d.ts +1 -1
  586. package/runtime/base/components/prefab-preview.component.d.ts +1 -1
  587. package/runtime/base/directives/accessroles.directive.d.ts +1 -1
  588. package/runtime/base/directives/prefab.directive.d.ts +1 -1
  589. package/runtime/base/esm2022/components/app-component/app.component.mjs +42 -49
  590. package/runtime/base/esm2022/components/app-spinner.component.mjs +29 -21
  591. package/runtime/base/esm2022/components/base-page.component.mjs +3 -11
  592. package/runtime/base/esm2022/components/base-spa-page.component.mjs +3 -11
  593. package/runtime/base/esm2022/components/custom-toaster.component.mjs +20 -14
  594. package/runtime/base/esm2022/components/empty-component/empty-page.component.mjs +4 -3
  595. package/runtime/base/esm2022/components/prefab-preview.component.mjs +8 -6
  596. package/runtime/base/esm2022/directives/accessroles.directive.mjs +3 -2
  597. package/runtime/base/esm2022/directives/prefab.directive.mjs +3 -2
  598. package/runtime/base/esm2022/public_api.mjs +1 -1
  599. package/runtime/base/esm2022/resolves/security-config.resolve.mjs +4 -6
  600. package/runtime/base/esm2022/runtime-base.module.mjs +486 -337
  601. package/runtime/base/esm2022/services/app.manager.service.mjs +31 -48
  602. package/runtime/base/esm2022/services/i18n.service.mjs +37 -72
  603. package/runtime/base/fesm2022/index.mjs +689 -605
  604. package/runtime/base/fesm2022/index.mjs.map +1 -1
  605. package/runtime/base/runtime-base.module.d.ts +115 -84
  606. package/runtime/base/services/i18n.service.d.ts +1 -1
  607. package/runtime/dynamic/app/components/page-wrapper.component.d.ts +1 -1
  608. package/runtime/dynamic/bundles/index.umd.js +113 -69
  609. package/runtime/dynamic/esm2022/app/app.module.mjs +151 -105
  610. package/runtime/dynamic/esm2022/app/components/page-wrapper.component.mjs +7 -4
  611. package/runtime/dynamic/esm2022/app/services/component-ref-provider.service.mjs +4 -2
  612. package/runtime/dynamic/esm2022/main.mjs +2 -7
  613. package/runtime/dynamic/fesm2022/index.mjs +159 -114
  614. package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  615. package/security/bundles/index.umd.js +3 -34
  616. package/security/esm2022/public_api.mjs +1 -2
  617. package/security/esm2022/security.service.mjs +4 -15
  618. package/security/fesm2022/index.mjs +5 -32
  619. package/security/fesm2022/index.mjs.map +1 -1
  620. package/security/public_api.d.ts +0 -1
  621. package/transpiler/bundles/index.umd.js +271 -168
  622. package/transpiler/esm2022/build.mjs +1 -6
  623. package/transpiler/esm2022/imports.mjs +268 -161
  624. package/transpiler/fesm2022/index.mjs +267 -165
  625. package/transpiler/fesm2022/index.mjs.map +1 -1
  626. package/variables/bundles/index.umd.js +14 -198
  627. package/variables/constants/variables.constants.d.ts +0 -2
  628. package/variables/esm2022/constants/variables.constants.mjs +1 -3
  629. package/variables/esm2022/factory/variable-manager.factory.mjs +1 -3
  630. package/variables/esm2022/factory/variable.factory.mjs +1 -5
  631. package/variables/esm2022/manager/action/logout-action.manager.mjs +5 -7
  632. package/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +3 -3
  633. package/variables/esm2022/public_api.mjs +1 -5
  634. package/variables/esm2022/service/metadata-service/metadata.service.mjs +6 -11
  635. package/variables/esm2022/util/variable/service-variable.utils.mjs +1 -4
  636. package/variables/esm2022/util/variable/variables.utils.mjs +4 -19
  637. package/variables/fesm2022/index.mjs +15 -198
  638. package/variables/fesm2022/index.mjs.map +1 -1
  639. package/variables/public_api.d.ts +0 -4
  640. package/components/advanced/carousel/carousel.module.d.ts +0 -11
  641. package/components/advanced/carousel/esm2022/carousel.module.mjs +0 -36
  642. package/components/advanced/custom/custom-widget.module.d.ts +0 -10
  643. package/components/advanced/custom/esm2022/custom-widget.module.mjs +0 -32
  644. package/components/advanced/login/esm2022/login.module.mjs +0 -28
  645. package/components/advanced/login/login.module.d.ts +0 -9
  646. package/components/advanced/marquee/esm2022/marquee.module.mjs +0 -28
  647. package/components/advanced/marquee/marquee.module.d.ts +0 -9
  648. package/components/base/esm2022/widgets/common/smooth-scroll/smooth-scroll.directive.mjs +0 -221
  649. package/components/base/widgets/common/smooth-scroll/smooth-scroll.directive.d.ts +0 -22
  650. package/components/basic/default/basic.module.d.ts +0 -17
  651. package/components/basic/default/esm2022/basic.module.mjs +0 -60
  652. package/components/basic/progress/esm2022/progress.module.mjs +0 -36
  653. package/components/basic/progress/progress.module.d.ts +0 -11
  654. package/components/basic/rich-text-editor/esm2022/rich-text-editor.module.mjs +0 -28
  655. package/components/basic/rich-text-editor/rich-text-editor.module.d.ts +0 -9
  656. package/components/basic/search/esm2022/search.module.mjs +0 -45
  657. package/components/basic/search/search.module.d.ts +0 -12
  658. package/components/basic/tree/esm2022/tree.module.mjs +0 -28
  659. package/components/basic/tree/tree.module.d.ts +0 -9
  660. package/components/chart/chart.module.d.ts +0 -10
  661. package/components/chart/esm2022/chart.module.mjs +0 -32
  662. package/components/containers/accordion/accordion.module.d.ts +0 -10
  663. package/components/containers/accordion/esm2022/accordion.module.mjs +0 -32
  664. package/components/containers/layout-grid/esm2022/layout-grid.module.mjs +0 -36
  665. package/components/containers/layout-grid/layout-grid.module.d.ts +0 -11
  666. package/components/containers/linear-layout/esm2022/linear-layout.module.mjs +0 -32
  667. package/components/containers/linear-layout/linear-layout.module.d.ts +0 -10
  668. package/components/containers/panel/esm2022/panel.module.mjs +0 -36
  669. package/components/containers/panel/panel.module.d.ts +0 -11
  670. package/components/containers/tabs/esm2022/tabs.module.mjs +0 -32
  671. package/components/containers/tabs/tabs.module.d.ts +0 -10
  672. package/components/containers/tile/esm2022/tile.module.mjs +0 -28
  673. package/components/containers/tile/tile.module.d.ts +0 -9
  674. package/components/containers/wizard/esm2022/wizard-step/wizard-step.directive.mjs +0 -140
  675. package/components/containers/wizard/esm2022/wizard.module.mjs +0 -40
  676. package/components/containers/wizard/wizard.module.d.ts +0 -12
  677. package/components/data/card/card.module.d.ts +0 -15
  678. package/components/data/card/esm2022/card.module.mjs +0 -52
  679. package/components/data/form/esm2022/form.module.mjs +0 -68
  680. package/components/data/form/form.module.d.ts +0 -19
  681. package/components/data/list/esm2022/list.module.mjs +0 -40
  682. package/components/data/list/list.module.d.ts +0 -11
  683. package/components/data/live-table/esm2022/live-table.module.mjs +0 -28
  684. package/components/data/live-table/live-table.module.d.ts +0 -9
  685. package/components/data/pagination/esm2022/pagination.module.mjs +0 -36
  686. package/components/data/pagination/pagination.module.d.ts +0 -11
  687. package/components/data/table/esm2022/table.module.mjs +0 -91
  688. package/components/data/table/table.module.d.ts +0 -24
  689. package/components/dialogs/alert-dialog/alert-dialog.module.d.ts +0 -11
  690. package/components/dialogs/alert-dialog/esm2022/alert-dialog.module.mjs +0 -36
  691. package/components/dialogs/confirm-dialog/confirm-dialog.module.d.ts +0 -11
  692. package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.module.mjs +0 -36
  693. package/components/dialogs/default/dialog.module.d.ts +0 -12
  694. package/components/dialogs/default/esm2022/dialog.module.mjs +0 -40
  695. package/components/dialogs/design-dialog/design-dialog.module.d.ts +0 -11
  696. package/components/dialogs/design-dialog/esm2022/design-dialog.module.mjs +0 -36
  697. package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.module.mjs +0 -40
  698. package/components/dialogs/iframe-dialog/iframe-dialog.module.d.ts +0 -12
  699. package/components/dialogs/login-dialog/esm2022/login-dialog.module.mjs +0 -40
  700. package/components/dialogs/login-dialog/login-dialog.module.d.ts +0 -12
  701. package/components/dialogs/partial-dialog/esm2022/partial-dialog.module.mjs +0 -36
  702. package/components/dialogs/partial-dialog/partial-dialog.module.d.ts +0 -11
  703. package/components/input/calendar/calendar.module.d.ts +0 -12
  704. package/components/input/calendar/esm2022/calendar.module.mjs +0 -40
  705. package/components/input/chips/chips.module.d.ts +0 -10
  706. package/components/input/chips/esm2022/chips.module.mjs +0 -32
  707. package/components/input/color-picker/color-picker.module.d.ts +0 -11
  708. package/components/input/color-picker/esm2022/color-picker.module.mjs +0 -36
  709. package/components/input/currency/currency.module.d.ts +0 -11
  710. package/components/input/currency/esm2022/currency.module.mjs +0 -36
  711. package/components/input/default/esm2022/input.module.mjs +0 -96
  712. package/components/input/default/input.module.d.ts +0 -26
  713. package/components/input/epoch/epoch.module.d.ts +0 -18
  714. package/components/input/epoch/esm2022/epoch.module.mjs +0 -70
  715. package/components/input/file-upload/esm2022/file-upload.module.mjs +0 -28
  716. package/components/input/file-upload/file-upload.module.d.ts +0 -9
  717. package/components/input/rating/esm2022/rating.module.mjs +0 -32
  718. package/components/input/rating/rating.module.d.ts +0 -10
  719. package/components/input/slider/esm2022/slider.module.mjs +0 -32
  720. package/components/input/slider/slider.module.d.ts +0 -10
  721. package/components/navigation/breadcrumb/breadcrumb.module.d.ts +0 -10
  722. package/components/navigation/breadcrumb/esm2022/breadcrumb.module.mjs +0 -32
  723. package/components/navigation/menu/esm2022/menu.module.mjs +0 -71
  724. package/components/navigation/menu/menu.module.d.ts +0 -17
  725. package/components/navigation/navbar/esm2022/navbar.module.mjs +0 -28
  726. package/components/navigation/navbar/navbar.module.d.ts +0 -9
  727. package/components/navigation/popover/esm2022/popover.module.mjs +0 -36
  728. package/components/navigation/popover/popover.module.d.ts +0 -11
  729. package/components/page/default/esm2022/page.module.mjs +0 -55
  730. package/components/page/default/page.module.d.ts +0 -14
  731. package/components/page/footer/esm2022/footer.module.mjs +0 -28
  732. package/components/page/footer/footer.module.d.ts +0 -9
  733. package/components/page/header/esm2022/header.module.mjs +0 -28
  734. package/components/page/header/header.module.d.ts +0 -9
  735. package/components/page/left-panel/esm2022/left-panel.module.mjs +0 -28
  736. package/components/page/left-panel/left-panel.module.d.ts +0 -9
  737. package/components/page/right-panel/esm2022/right-panel.module.mjs +0 -28
  738. package/components/page/right-panel/right-panel.module.d.ts +0 -9
  739. package/components/page/top-nav/esm2022/top-nav.module.mjs +0 -28
  740. package/components/page/top-nav/top-nav.module.d.ts +0 -9
  741. package/components/prefab/esm2022/prefab.module.mjs +0 -32
  742. package/components/prefab/prefab.module.d.ts +0 -10
  743. package/core/core.module.d.ts +0 -9
  744. package/core/esm2022/core.module.mjs +0 -27
  745. package/http/esm2022/http-service.module.mjs +0 -36
  746. package/http/http-service.module.d.ts +0 -14
  747. package/locales/fullcalendar/af.js +0 -27
  748. package/locales/fullcalendar/ar-dz.js +0 -28
  749. package/locales/fullcalendar/ar-kw.js +0 -28
  750. package/locales/fullcalendar/ar-ly.js +0 -28
  751. package/locales/fullcalendar/ar-ma.js +0 -28
  752. package/locales/fullcalendar/ar-sa.js +0 -28
  753. package/locales/fullcalendar/ar-tn.js +0 -28
  754. package/locales/fullcalendar/ar.js +0 -28
  755. package/locales/fullcalendar/az.js +0 -29
  756. package/locales/fullcalendar/bg.js +0 -28
  757. package/locales/fullcalendar/bs.js +0 -29
  758. package/locales/fullcalendar/ca.js +0 -27
  759. package/locales/fullcalendar/cs.js +0 -29
  760. package/locales/fullcalendar/da.js +0 -27
  761. package/locales/fullcalendar/de.js +0 -30
  762. package/locales/fullcalendar/el.js +0 -27
  763. package/locales/fullcalendar/en-au.js +0 -14
  764. package/locales/fullcalendar/en-gb.js +0 -14
  765. package/locales/fullcalendar/en-nz.js +0 -14
  766. package/locales/fullcalendar/es-us.js +0 -27
  767. package/locales/fullcalendar/es.js +0 -27
  768. package/locales/fullcalendar/et.js +0 -29
  769. package/locales/fullcalendar/eu.js +0 -27
  770. package/locales/fullcalendar/fa.js +0 -30
  771. package/locales/fullcalendar/fi.js +0 -27
  772. package/locales/fullcalendar/fr-ca.js +0 -24
  773. package/locales/fullcalendar/fr-ch.js +0 -28
  774. package/locales/fullcalendar/fr.js +0 -28
  775. package/locales/fullcalendar/gl.js +0 -27
  776. package/locales/fullcalendar/he.js +0 -24
  777. package/locales/fullcalendar/hi.js +0 -29
  778. package/locales/fullcalendar/hr.js +0 -29
  779. package/locales/fullcalendar/hu.js +0 -27
  780. package/locales/fullcalendar/id.js +0 -27
  781. package/locales/fullcalendar/is.js +0 -27
  782. package/locales/fullcalendar/it.js +0 -29
  783. package/locales/fullcalendar/ja.js +0 -25
  784. package/locales/fullcalendar/ka.js +0 -29
  785. package/locales/fullcalendar/kk.js +0 -29
  786. package/locales/fullcalendar/ko.js +0 -23
  787. package/locales/fullcalendar/lb.js +0 -27
  788. package/locales/fullcalendar/lt.js +0 -27
  789. package/locales/fullcalendar/lv.js +0 -29
  790. package/locales/fullcalendar/mk.js +0 -25
  791. package/locales/fullcalendar/ms.js +0 -29
  792. package/locales/fullcalendar/nb.js +0 -27
  793. package/locales/fullcalendar/ne.js +0 -27
  794. package/locales/fullcalendar/nl.js +0 -27
  795. package/locales/fullcalendar/nn.js +0 -27
  796. package/locales/fullcalendar/pl.js +0 -27
  797. package/locales/fullcalendar/pt-br.js +0 -25
  798. package/locales/fullcalendar/pt.js +0 -27
  799. package/locales/fullcalendar/ro.js +0 -29
  800. package/locales/fullcalendar/ru.js +0 -29
  801. package/locales/fullcalendar/sk.js +0 -29
  802. package/locales/fullcalendar/sl.js +0 -27
  803. package/locales/fullcalendar/sq.js +0 -29
  804. package/locales/fullcalendar/sr-cyrl.js +0 -29
  805. package/locales/fullcalendar/sr.js +0 -29
  806. package/locales/fullcalendar/sv.js +0 -27
  807. package/locales/fullcalendar/th.js +0 -30
  808. package/locales/fullcalendar/tr.js +0 -27
  809. package/locales/fullcalendar/ug.js +0 -17
  810. package/locales/fullcalendar/uk.js +0 -29
  811. package/locales/fullcalendar/uz.js +0 -21
  812. package/locales/fullcalendar/vi.js +0 -29
  813. package/locales/fullcalendar/zh-cn.js +0 -30
  814. package/locales/fullcalendar/zh-tw.js +0 -23
  815. package/mobile/components/basic/default/.npmignore +0 -2
  816. package/mobile/components/basic/default/anchor/anchor.directive.d.ts +0 -8
  817. package/mobile/components/basic/default/app-update/app-update.component.d.ts +0 -26
  818. package/mobile/components/basic/default/basic.module.d.ts +0 -15
  819. package/mobile/components/basic/default/bundles/index.umd.js +0 -980
  820. package/mobile/components/basic/default/esm2022/anchor/anchor.directive.mjs +0 -44
  821. package/mobile/components/basic/default/esm2022/app-update/app-update.component.mjs +0 -116
  822. package/mobile/components/basic/default/esm2022/basic.module.mjs +0 -52
  823. package/mobile/components/basic/default/esm2022/file-browser/file-browser.component.mjs +0 -236
  824. package/mobile/components/basic/default/esm2022/file-browser/file-selector.service.mjs +0 -85
  825. package/mobile/components/basic/default/esm2022/image-cache/image-cache.directive.mjs +0 -61
  826. package/mobile/components/basic/default/esm2022/index.mjs +0 -5
  827. package/mobile/components/basic/default/esm2022/network-info-toaster/network-info-toaster.component.mjs +0 -183
  828. package/mobile/components/basic/default/esm2022/network-info-toaster/network-info-toaster.props.mjs +0 -5
  829. package/mobile/components/basic/default/esm2022/process-manager/process-management.service.mjs +0 -47
  830. package/mobile/components/basic/default/esm2022/process-manager/process-manager.component.mjs +0 -175
  831. package/mobile/components/basic/default/esm2022/public_api.mjs +0 -10
  832. package/mobile/components/basic/default/fesm2022/index.mjs +0 -958
  833. package/mobile/components/basic/default/fesm2022/index.mjs.map +0 -1
  834. package/mobile/components/basic/default/file-browser/file-browser.component.d.ts +0 -39
  835. package/mobile/components/basic/default/file-browser/file-selector.service.d.ts +0 -27
  836. package/mobile/components/basic/default/image-cache/image-cache.directive.d.ts +0 -18
  837. package/mobile/components/basic/default/index.d.ts +0 -5
  838. package/mobile/components/basic/default/network-info-toaster/network-info-toaster.component.d.ts +0 -28
  839. package/mobile/components/basic/default/network-info-toaster/network-info-toaster.props.d.ts +0 -1
  840. package/mobile/components/basic/default/package.json +0 -23
  841. package/mobile/components/basic/default/process-manager/process-management.service.d.ts +0 -36
  842. package/mobile/components/basic/default/process-manager/process-manager.component.d.ts +0 -33
  843. package/mobile/components/basic/default/public_api.d.ts +0 -9
  844. package/mobile/components/basic/search/.npmignore +0 -2
  845. package/mobile/components/basic/search/bundles/index.umd.js +0 -66
  846. package/mobile/components/basic/search/esm2022/index.mjs +0 -5
  847. package/mobile/components/basic/search/esm2022/public_api.mjs +0 -3
  848. package/mobile/components/basic/search/esm2022/search.directive.mjs +0 -17
  849. package/mobile/components/basic/search/esm2022/search.module.mjs +0 -28
  850. package/mobile/components/basic/search/fesm2022/index.mjs +0 -49
  851. package/mobile/components/basic/search/fesm2022/index.mjs.map +0 -1
  852. package/mobile/components/basic/search/index.d.ts +0 -5
  853. package/mobile/components/basic/search/package.json +0 -23
  854. package/mobile/components/basic/search/public_api.d.ts +0 -2
  855. package/mobile/components/basic/search/search.directive.d.ts +0 -7
  856. package/mobile/components/basic/search/search.module.d.ts +0 -9
  857. package/mobile/components/containers/segmented-control/.npmignore +0 -2
  858. package/mobile/components/containers/segmented-control/bundles/index.umd.js +0 -281
  859. package/mobile/components/containers/segmented-control/esm2022/index.mjs +0 -5
  860. package/mobile/components/containers/segmented-control/esm2022/public_api.mjs +0 -4
  861. package/mobile/components/containers/segmented-control/esm2022/segment-content/segment-content.component.mjs +0 -70
  862. package/mobile/components/containers/segmented-control/esm2022/segment-content/segment-content.props.mjs +0 -14
  863. package/mobile/components/containers/segmented-control/esm2022/segmented-control.component.mjs +0 -147
  864. package/mobile/components/containers/segmented-control/esm2022/segmented-control.module.mjs +0 -32
  865. package/mobile/components/containers/segmented-control/esm2022/segmented-control.props.mjs +0 -9
  866. package/mobile/components/containers/segmented-control/fesm2022/index.mjs +0 -264
  867. package/mobile/components/containers/segmented-control/fesm2022/index.mjs.map +0 -1
  868. package/mobile/components/containers/segmented-control/index.d.ts +0 -5
  869. package/mobile/components/containers/segmented-control/package.json +0 -23
  870. package/mobile/components/containers/segmented-control/public_api.d.ts +0 -3
  871. package/mobile/components/containers/segmented-control/segment-content/segment-content.component.d.ts +0 -18
  872. package/mobile/components/containers/segmented-control/segment-content/segment-content.props.d.ts +0 -1
  873. package/mobile/components/containers/segmented-control/segmented-control.component.d.ts +0 -20
  874. package/mobile/components/containers/segmented-control/segmented-control.module.d.ts +0 -10
  875. package/mobile/components/containers/segmented-control/segmented-control.props.d.ts +0 -1
  876. package/mobile/components/data/media-list/.npmignore +0 -2
  877. package/mobile/components/data/media-list/bundles/index.umd.js +0 -310
  878. package/mobile/components/data/media-list/esm2022/index.mjs +0 -5
  879. package/mobile/components/data/media-list/esm2022/media-list-item/media-list-item.directive.mjs +0 -24
  880. package/mobile/components/data/media-list/esm2022/media-list.component.mjs +0 -213
  881. package/mobile/components/data/media-list/esm2022/media-list.module.mjs +0 -48
  882. package/mobile/components/data/media-list/esm2022/media-list.props.mjs +0 -16
  883. package/mobile/components/data/media-list/esm2022/public_api.mjs +0 -4
  884. package/mobile/components/data/media-list/fesm2022/index.mjs +0 -297
  885. package/mobile/components/data/media-list/fesm2022/index.mjs.map +0 -1
  886. package/mobile/components/data/media-list/index.d.ts +0 -5
  887. package/mobile/components/data/media-list/media-list-item/media-list-item.directive.d.ts +0 -8
  888. package/mobile/components/data/media-list/media-list.component.d.ts +0 -33
  889. package/mobile/components/data/media-list/media-list.module.d.ts +0 -14
  890. package/mobile/components/data/media-list/media-list.props.d.ts +0 -1
  891. package/mobile/components/data/media-list/package.json +0 -23
  892. package/mobile/components/data/media-list/public_api.d.ts +0 -3
  893. package/mobile/components/device/barcode-scanner/.npmignore +0 -2
  894. package/mobile/components/device/barcode-scanner/barcode-scanner.component.d.ts +0 -18
  895. package/mobile/components/device/barcode-scanner/barcode-scanner.module.d.ts +0 -9
  896. package/mobile/components/device/barcode-scanner/barcode-scanner.props.d.ts +0 -1
  897. package/mobile/components/device/barcode-scanner/bundles/index.umd.js +0 -129
  898. package/mobile/components/device/barcode-scanner/esm2022/barcode-scanner.component.mjs +0 -69
  899. package/mobile/components/device/barcode-scanner/esm2022/barcode-scanner.module.mjs +0 -28
  900. package/mobile/components/device/barcode-scanner/esm2022/barcode-scanner.props.mjs +0 -15
  901. package/mobile/components/device/barcode-scanner/esm2022/index.mjs +0 -5
  902. package/mobile/components/device/barcode-scanner/esm2022/public_api.mjs +0 -3
  903. package/mobile/components/device/barcode-scanner/fesm2022/index.mjs +0 -112
  904. package/mobile/components/device/barcode-scanner/fesm2022/index.mjs.map +0 -1
  905. package/mobile/components/device/barcode-scanner/index.d.ts +0 -5
  906. package/mobile/components/device/barcode-scanner/package.json +0 -23
  907. package/mobile/components/device/barcode-scanner/public_api.d.ts +0 -2
  908. package/mobile/components/device/camera/.npmignore +0 -2
  909. package/mobile/components/device/camera/bundles/index.umd.js +0 -170
  910. package/mobile/components/device/camera/camera.component.d.ts +0 -37
  911. package/mobile/components/device/camera/camera.module.d.ts +0 -9
  912. package/mobile/components/device/camera/camera.props.d.ts +0 -1
  913. package/mobile/components/device/camera/esm2022/camera.component.mjs +0 -101
  914. package/mobile/components/device/camera/esm2022/camera.module.mjs +0 -28
  915. package/mobile/components/device/camera/esm2022/camera.props.mjs +0 -25
  916. package/mobile/components/device/camera/esm2022/index.mjs +0 -5
  917. package/mobile/components/device/camera/esm2022/public_api.mjs +0 -3
  918. package/mobile/components/device/camera/fesm2022/index.mjs +0 -153
  919. package/mobile/components/device/camera/fesm2022/index.mjs.map +0 -1
  920. package/mobile/components/device/camera/index.d.ts +0 -5
  921. package/mobile/components/device/camera/package.json +0 -23
  922. package/mobile/components/device/camera/public_api.d.ts +0 -2
  923. package/mobile/components/input/file-upload/.npmignore +0 -2
  924. package/mobile/components/input/file-upload/bundles/index.umd.js +0 -88
  925. package/mobile/components/input/file-upload/esm2022/file-upload.directive.mjs +0 -41
  926. package/mobile/components/input/file-upload/esm2022/file-upload.module.mjs +0 -28
  927. package/mobile/components/input/file-upload/esm2022/index.mjs +0 -5
  928. package/mobile/components/input/file-upload/esm2022/public_api.mjs +0 -3
  929. package/mobile/components/input/file-upload/fesm2022/index.mjs +0 -71
  930. package/mobile/components/input/file-upload/fesm2022/index.mjs.map +0 -1
  931. package/mobile/components/input/file-upload/file-upload.directive.d.ts +0 -11
  932. package/mobile/components/input/file-upload/file-upload.module.d.ts +0 -9
  933. package/mobile/components/input/file-upload/index.d.ts +0 -5
  934. package/mobile/components/input/file-upload/package.json +0 -23
  935. package/mobile/components/input/file-upload/public_api.d.ts +0 -2
  936. package/mobile/components/page/default/.npmignore +0 -2
  937. package/mobile/components/page/default/bundles/index.umd.js +0 -127
  938. package/mobile/components/page/default/esm2022/index.mjs +0 -5
  939. package/mobile/components/page/default/esm2022/page-content-loader/page-content-loader.component.mjs +0 -24
  940. package/mobile/components/page/default/esm2022/page.directive.mjs +0 -58
  941. package/mobile/components/page/default/esm2022/page.module.mjs +0 -32
  942. package/mobile/components/page/default/esm2022/public_api.mjs +0 -4
  943. package/mobile/components/page/default/fesm2022/index.mjs +0 -110
  944. package/mobile/components/page/default/fesm2022/index.mjs.map +0 -1
  945. package/mobile/components/page/default/index.d.ts +0 -5
  946. package/mobile/components/page/default/package.json +0 -23
  947. package/mobile/components/page/default/page-content-loader/page-content-loader.component.d.ts +0 -7
  948. package/mobile/components/page/default/page.directive.d.ts +0 -19
  949. package/mobile/components/page/default/page.module.d.ts +0 -10
  950. package/mobile/components/page/default/public_api.d.ts +0 -3
  951. package/mobile/components/page/left-panel/.npmignore +0 -2
  952. package/mobile/components/page/left-panel/bundles/index.umd.js +0 -91
  953. package/mobile/components/page/left-panel/esm2022/index.mjs +0 -5
  954. package/mobile/components/page/left-panel/esm2022/left-panel.directive.mjs +0 -45
  955. package/mobile/components/page/left-panel/esm2022/left-panel.module.mjs +0 -28
  956. package/mobile/components/page/left-panel/esm2022/public_api.mjs +0 -3
  957. package/mobile/components/page/left-panel/fesm2022/index.mjs +0 -74
  958. package/mobile/components/page/left-panel/fesm2022/index.mjs.map +0 -1
  959. package/mobile/components/page/left-panel/index.d.ts +0 -5
  960. package/mobile/components/page/left-panel/left-panel.directive.d.ts +0 -16
  961. package/mobile/components/page/left-panel/left-panel.module.d.ts +0 -9
  962. package/mobile/components/page/left-panel/package.json +0 -23
  963. package/mobile/components/page/left-panel/public_api.d.ts +0 -2
  964. package/mobile/components/page/mobile-navbar/.npmignore +0 -2
  965. package/mobile/components/page/mobile-navbar/bundles/index.umd.js +0 -332
  966. package/mobile/components/page/mobile-navbar/esm2022/index.mjs +0 -5
  967. package/mobile/components/page/mobile-navbar/esm2022/mobile-navbar.component.mjs +0 -247
  968. package/mobile/components/page/mobile-navbar/esm2022/mobile-navbar.module.mjs +0 -32
  969. package/mobile/components/page/mobile-navbar/esm2022/mobile-navbar.props.mjs +0 -41
  970. package/mobile/components/page/mobile-navbar/esm2022/public_api.mjs +0 -3
  971. package/mobile/components/page/mobile-navbar/fesm2022/index.mjs +0 -317
  972. package/mobile/components/page/mobile-navbar/fesm2022/index.mjs.map +0 -1
  973. package/mobile/components/page/mobile-navbar/index.d.ts +0 -5
  974. package/mobile/components/page/mobile-navbar/mobile-navbar.component.d.ts +0 -50
  975. package/mobile/components/page/mobile-navbar/mobile-navbar.module.d.ts +0 -10
  976. package/mobile/components/page/mobile-navbar/mobile-navbar.props.d.ts +0 -2
  977. package/mobile/components/page/mobile-navbar/package.json +0 -23
  978. package/mobile/components/page/mobile-navbar/public_api.d.ts +0 -2
  979. package/mobile/components/page/tab-bar/.npmignore +0 -2
  980. package/mobile/components/page/tab-bar/bundles/index.umd.js +0 -279
  981. package/mobile/components/page/tab-bar/esm2022/index.mjs +0 -5
  982. package/mobile/components/page/tab-bar/esm2022/public_api.mjs +0 -3
  983. package/mobile/components/page/tab-bar/esm2022/tab-bar.module.mjs +0 -28
  984. package/mobile/components/page/tab-bar/esm2022/tabbar.component.mjs +0 -219
  985. package/mobile/components/page/tab-bar/esm2022/tabbar.props.mjs +0 -15
  986. package/mobile/components/page/tab-bar/fesm2022/index.mjs +0 -262
  987. package/mobile/components/page/tab-bar/fesm2022/index.mjs.map +0 -1
  988. package/mobile/components/page/tab-bar/index.d.ts +0 -5
  989. package/mobile/components/page/tab-bar/package.json +0 -23
  990. package/mobile/components/page/tab-bar/public_api.d.ts +0 -2
  991. package/mobile/components/page/tab-bar/tab-bar.module.d.ts +0 -9
  992. package/mobile/components/page/tab-bar/tabbar.component.d.ts +0 -40
  993. package/mobile/components/page/tab-bar/tabbar.props.d.ts +0 -1
  994. package/mobile/core/.npmignore +0 -2
  995. package/mobile/core/bundles/index.umd.js +0 -1658
  996. package/mobile/core/core.module.d.ts +0 -15
  997. package/mobile/core/esm2022/core.module.mjs +0 -79
  998. package/mobile/core/esm2022/index.mjs +0 -5
  999. package/mobile/core/esm2022/native.xhr.mjs +0 -340
  1000. package/mobile/core/esm2022/public_api.mjs +0 -12
  1001. package/mobile/core/esm2022/services/device-file-cache.service.mjs +0 -92
  1002. package/mobile/core/esm2022/services/device-file-download.service.mjs +0 -154
  1003. package/mobile/core/esm2022/services/device-file-opener.service.mjs +0 -112
  1004. package/mobile/core/esm2022/services/device-file-upload.service.mjs +0 -91
  1005. package/mobile/core/esm2022/services/device-file.service.mjs +0 -237
  1006. package/mobile/core/esm2022/services/device-start-up-service.mjs +0 -2
  1007. package/mobile/core/esm2022/services/device.service.mjs +0 -150
  1008. package/mobile/core/esm2022/services/ext-app-message.service.mjs +0 -114
  1009. package/mobile/core/esm2022/services/network.service.mjs +0 -358
  1010. package/mobile/core/fesm2022/index.mjs +0 -1660
  1011. package/mobile/core/fesm2022/index.mjs.map +0 -1
  1012. package/mobile/core/index.d.ts +0 -5
  1013. package/mobile/core/native.xhr.d.ts +0 -36
  1014. package/mobile/core/package.json +0 -28
  1015. package/mobile/core/public_api.d.ts +0 -11
  1016. package/mobile/core/services/device-file-cache.service.d.ts +0 -24
  1017. package/mobile/core/services/device-file-download.service.d.ts +0 -36
  1018. package/mobile/core/services/device-file-opener.service.d.ts +0 -25
  1019. package/mobile/core/services/device-file-upload.service.d.ts +0 -27
  1020. package/mobile/core/services/device-file.service.d.ts +0 -45
  1021. package/mobile/core/services/device-start-up-service.d.ts +0 -4
  1022. package/mobile/core/services/device.service.d.ts +0 -52
  1023. package/mobile/core/services/ext-app-message.service.d.ts +0 -24
  1024. package/mobile/core/services/network.service.d.ts +0 -118
  1025. package/mobile/offline/.npmignore +0 -2
  1026. package/mobile/offline/bundles/index.umd.js +0 -3512
  1027. package/mobile/offline/esm2022/index.mjs +0 -5
  1028. package/mobile/offline/esm2022/models/config.mjs +0 -64
  1029. package/mobile/offline/esm2022/models/local-db-store.mjs +0 -412
  1030. package/mobile/offline/esm2022/offline.module.mjs +0 -100
  1031. package/mobile/offline/esm2022/public_api.mjs +0 -7
  1032. package/mobile/offline/esm2022/services/change-log.service.mjs +0 -332
  1033. package/mobile/offline/esm2022/services/local-db-data-pull.service.mjs +0 -525
  1034. package/mobile/offline/esm2022/services/local-db-management.service.mjs +0 -855
  1035. package/mobile/offline/esm2022/services/local-db.service.mjs +0 -193
  1036. package/mobile/offline/esm2022/services/local-key-value.service.mjs +0 -87
  1037. package/mobile/offline/esm2022/services/push.service.mjs +0 -49
  1038. package/mobile/offline/esm2022/services/workers/error-blocker.mjs +0 -115
  1039. package/mobile/offline/esm2022/services/workers/file-handler.mjs +0 -162
  1040. package/mobile/offline/esm2022/services/workers/id-resolver.mjs +0 -154
  1041. package/mobile/offline/esm2022/services/workers/multi-part-param-transformer.mjs +0 -63
  1042. package/mobile/offline/esm2022/utils/file-upload.utils.mjs +0 -59
  1043. package/mobile/offline/esm2022/utils/live-variable.utils.mjs +0 -232
  1044. package/mobile/offline/esm2022/utils/query-executor.utils.mjs +0 -82
  1045. package/mobile/offline/esm2022/utils/security.utils.mjs +0 -119
  1046. package/mobile/offline/esm2022/utils/utils.mjs +0 -8
  1047. package/mobile/offline/fesm2022/index.mjs +0 -3529
  1048. package/mobile/offline/fesm2022/index.mjs.map +0 -1
  1049. package/mobile/offline/index.d.ts +0 -5
  1050. package/mobile/offline/models/config.d.ts +0 -80
  1051. package/mobile/offline/models/local-db-store.d.ts +0 -119
  1052. package/mobile/offline/offline.module.d.ts +0 -17
  1053. package/mobile/offline/package.json +0 -28
  1054. package/mobile/offline/public_api.d.ts +0 -6
  1055. package/mobile/offline/services/change-log.service.d.ts +0 -112
  1056. package/mobile/offline/services/local-db-data-pull.service.d.ts +0 -139
  1057. package/mobile/offline/services/local-db-management.service.d.ts +0 -179
  1058. package/mobile/offline/services/local-db.service.d.ts +0 -83
  1059. package/mobile/offline/services/local-key-value.service.d.ts +0 -38
  1060. package/mobile/offline/services/push.service.d.ts +0 -11
  1061. package/mobile/offline/services/workers/error-blocker.d.ts +0 -26
  1062. package/mobile/offline/services/workers/file-handler.d.ts +0 -56
  1063. package/mobile/offline/services/workers/id-resolver.d.ts +0 -26
  1064. package/mobile/offline/services/workers/multi-part-param-transformer.d.ts +0 -11
  1065. package/mobile/offline/utils/file-upload.utils.d.ts +0 -14
  1066. package/mobile/offline/utils/live-variable.utils.d.ts +0 -24
  1067. package/mobile/offline/utils/query-executor.utils.d.ts +0 -15
  1068. package/mobile/offline/utils/security.utils.d.ts +0 -19
  1069. package/mobile/offline/utils/utils.d.ts +0 -2
  1070. package/mobile/placeholder/runtime/.npmignore +0 -2
  1071. package/mobile/placeholder/runtime/bundles/index.umd.js +0 -70
  1072. package/mobile/placeholder/runtime/components/app-ext.component.d.ts +0 -5
  1073. package/mobile/placeholder/runtime/esm2022/components/app-ext.component.mjs +0 -19
  1074. package/mobile/placeholder/runtime/esm2022/index.mjs +0 -5
  1075. package/mobile/placeholder/runtime/esm2022/mobile-runtime.module.mjs +0 -27
  1076. package/mobile/placeholder/runtime/esm2022/public_api.mjs +0 -3
  1077. package/mobile/placeholder/runtime/fesm2022/index.mjs +0 -50
  1078. package/mobile/placeholder/runtime/fesm2022/index.mjs.map +0 -1
  1079. package/mobile/placeholder/runtime/index.d.ts +0 -5
  1080. package/mobile/placeholder/runtime/mobile-runtime.module.d.ts +0 -9
  1081. package/mobile/placeholder/runtime/package.json +0 -27
  1082. package/mobile/placeholder/runtime/public_api.d.ts +0 -2
  1083. package/mobile/placeholder/runtime-dynamic/.npmignore +0 -2
  1084. package/mobile/placeholder/runtime-dynamic/bundles/index.umd.js +0 -40
  1085. package/mobile/placeholder/runtime-dynamic/esm2022/index.mjs +0 -5
  1086. package/mobile/placeholder/runtime-dynamic/esm2022/mobile-runtime-dynamic.module.mjs +0 -13
  1087. package/mobile/placeholder/runtime-dynamic/esm2022/public_api.mjs +0 -2
  1088. package/mobile/placeholder/runtime-dynamic/fesm2022/index.mjs +0 -20
  1089. package/mobile/placeholder/runtime-dynamic/fesm2022/index.mjs.map +0 -1
  1090. package/mobile/placeholder/runtime-dynamic/index.d.ts +0 -5
  1091. package/mobile/placeholder/runtime-dynamic/mobile-runtime-dynamic.module.d.ts +0 -7
  1092. package/mobile/placeholder/runtime-dynamic/package.json +0 -23
  1093. package/mobile/placeholder/runtime-dynamic/public_api.d.ts +0 -1
  1094. package/mobile/runtime/.npmignore +0 -2
  1095. package/mobile/runtime/bundles/index.umd.js +0 -732
  1096. package/mobile/runtime/components/app-ext.component.d.ts +0 -14
  1097. package/mobile/runtime/esm2022/components/app-ext.component.mjs +0 -59
  1098. package/mobile/runtime/esm2022/index.mjs +0 -5
  1099. package/mobile/runtime/esm2022/mobile-runtime.module.mjs +0 -351
  1100. package/mobile/runtime/esm2022/public_api.mjs +0 -6
  1101. package/mobile/runtime/esm2022/services/cookie.service.mjs +0 -135
  1102. package/mobile/runtime/esm2022/services/http-interceptor.service.mjs +0 -147
  1103. package/mobile/runtime/esm2022/services/webprocess.service.mjs +0 -76
  1104. package/mobile/runtime/fesm2022/index.mjs +0 -742
  1105. package/mobile/runtime/fesm2022/index.mjs.map +0 -1
  1106. package/mobile/runtime/index.d.ts +0 -5
  1107. package/mobile/runtime/mobile-runtime.module.d.ts +0 -51
  1108. package/mobile/runtime/package.json +0 -28
  1109. package/mobile/runtime/public_api.d.ts +0 -5
  1110. package/mobile/runtime/services/cookie.service.d.ts +0 -31
  1111. package/mobile/runtime/services/http-interceptor.service.d.ts +0 -19
  1112. package/mobile/runtime/services/webprocess.service.d.ts +0 -15
  1113. package/mobile/runtime-dynamic/.npmignore +0 -2
  1114. package/mobile/runtime-dynamic/bundles/index.umd.js +0 -461
  1115. package/mobile/runtime-dynamic/esm2022/index.mjs +0 -5
  1116. package/mobile/runtime-dynamic/esm2022/mobile-runtime-dynamic.module.mjs +0 -48
  1117. package/mobile/runtime-dynamic/esm2022/public_api.mjs +0 -2
  1118. package/mobile/runtime-dynamic/esm2022/services/live-sync.service.mjs +0 -404
  1119. package/mobile/runtime-dynamic/fesm2022/index.mjs +0 -454
  1120. package/mobile/runtime-dynamic/fesm2022/index.mjs.map +0 -1
  1121. package/mobile/runtime-dynamic/index.d.ts +0 -5
  1122. package/mobile/runtime-dynamic/mobile-runtime-dynamic.module.d.ts +0 -8
  1123. package/mobile/runtime-dynamic/package.json +0 -23
  1124. package/mobile/runtime-dynamic/public_api.d.ts +0 -1
  1125. package/mobile/runtime-dynamic/services/live-sync.service.d.ts +0 -38
  1126. package/mobile/variables/.npmignore +0 -2
  1127. package/mobile/variables/bundles/index.umd.js +0 -1166
  1128. package/mobile/variables/esm2022/index.mjs +0 -5
  1129. package/mobile/variables/esm2022/public_api.mjs +0 -10
  1130. package/mobile/variables/esm2022/services/calendar-service.mjs +0 -77
  1131. package/mobile/variables/esm2022/services/camera-service.mjs +0 -70
  1132. package/mobile/variables/esm2022/services/contacts-service.mjs +0 -74
  1133. package/mobile/variables/esm2022/services/datasync-service.mjs +0 -363
  1134. package/mobile/variables/esm2022/services/device-service/device-service.mjs +0 -161
  1135. package/mobile/variables/esm2022/services/device-service/location-service.mjs +0 -200
  1136. package/mobile/variables/esm2022/services/file-service.mjs +0 -87
  1137. package/mobile/variables/esm2022/services/scan-service.mjs +0 -60
  1138. package/mobile/variables/esm2022/variables.module.mjs +0 -78
  1139. package/mobile/variables/fesm2022/index.mjs +0 -1143
  1140. package/mobile/variables/fesm2022/index.mjs.map +0 -1
  1141. package/mobile/variables/index.d.ts +0 -5
  1142. package/mobile/variables/package.json +0 -28
  1143. package/mobile/variables/public_api.d.ts +0 -9
  1144. package/mobile/variables/services/calendar-service.d.ts +0 -10
  1145. package/mobile/variables/services/camera-service.d.ts +0 -8
  1146. package/mobile/variables/services/contacts-service.d.ts +0 -6
  1147. package/mobile/variables/services/datasync-service.d.ts +0 -11
  1148. package/mobile/variables/services/device-service/device-service.d.ts +0 -17
  1149. package/mobile/variables/services/device-service/location-service.d.ts +0 -63
  1150. package/mobile/variables/services/file-service.d.ts +0 -7
  1151. package/mobile/variables/services/scan-service.d.ts +0 -7
  1152. package/mobile/variables/variables.module.d.ts +0 -25
  1153. package/oAuth/esm2022/oAuth.module.mjs +0 -19
  1154. package/oAuth/oAuth.module.d.ts +0 -8
  1155. package/scripts/fullcalendar/main.min.js +0 -6
  1156. package/security/esm2022/security.module.mjs +0 -19
  1157. package/security/security.module.d.ts +0 -8
  1158. package/variables/esm2022/manager/variable/device-variable-manager.mjs +0 -48
  1159. package/variables/esm2022/manager/variable/device-variable-operation.mjs +0 -2
  1160. package/variables/esm2022/manager/variable/device-variable-service.mjs +0 -45
  1161. package/variables/esm2022/model/variable/device-variable.mjs +0 -19
  1162. package/variables/esm2022/variables.module.mjs +0 -52
  1163. package/variables/manager/variable/device-variable-manager.d.ts +0 -26
  1164. package/variables/manager/variable/device-variable-operation.d.ts +0 -37
  1165. package/variables/manager/variable/device-variable-service.d.ts +0 -6
  1166. package/variables/model/variable/device-variable.d.ts +0 -6
  1167. package/variables/variables.module.d.ts +0 -16
@@ -1,8 +1,12 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { WmComponentsModule } from "@wm/components/base";
3
+ import { FormsModule } from '@angular/forms';
4
+ import { ScrollableDirective } from './scrollable.directive';
1
5
  import { Attribute, Component, ElementRef, Inject, Injector, Optional, QueryList, ViewChild, ViewChildren } from '@angular/core';
2
6
  import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
3
7
  import { from, Observable, of } from 'rxjs';
4
8
  import { filter, mergeMap } from 'rxjs/operators';
5
- import { TypeaheadDirective } from 'ngx-bootstrap/typeahead';
9
+ import { TypeaheadDirective, TypeaheadModule } from 'ngx-bootstrap/typeahead';
6
10
  import { addClass, adjustContainerPosition, App, DataSource, isDefined, isMobile, toBoolean } from '@wm/core';
7
11
  import { ALLFIELDS, convertDataToObject, extractDataAsArray, getContainerTargetClass, getUniqObjsByDataField, provideAs, provideAsWidgetRef, styler, transformFormData } from '@wm/components/base';
8
12
  import { DatasetAwareFormComponent } from '@wm/components/input';
@@ -11,6 +15,10 @@ import { DataProvider } from './data-provider/data-provider';
11
15
  import { debounce, find, get, includes, isArray, isEmpty, isEqual, isObject, isUndefined, map, split, toString, trim } from "lodash-es";
12
16
  import * as i0 from "@angular/core";
13
17
  import * as i1 from "@wm/core";
18
+ import * as i2 from "@angular/common";
19
+ import * as i3 from "@wm/components/base";
20
+ import * as i4 from "@angular/forms";
21
+ import * as i5 from "ngx-bootstrap/typeahead";
14
22
  const _c0 = ["ulElement"];
15
23
  const _c1 = ["liElements"];
16
24
  const _c2 = ["wmSearch", ""];
@@ -20,18 +28,18 @@ const _c5 = (a0, a1, a2, a3) => ({ item: a0, index: a1, match: a2, query: a3 });
20
28
  const _c6 = () => ({ standalone: true });
21
29
  const _c7 = a0 => ({ "show-btn": a0 });
22
30
  const _c8 = a0 => ({ "disabled": a0 });
23
- function SearchComponent_ng_template_0_a_0_img_1_Template(rf, ctx) { if (rf & 1) {
24
- i0.ɵɵelement(0, "img", 10);
31
+ function SearchComponent_ng_template_0_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
32
+ i0.ɵɵelement(0, "img", 7);
25
33
  } if (rf & 2) {
26
34
  const model_r1 = i0.ɵɵnextContext(2).item;
27
35
  const ctx_r1 = i0.ɵɵnextContext();
28
36
  i0.ɵɵstyleProp("width", ctx_r1.imagewidth);
29
37
  i0.ɵɵproperty("src", model_r1.imgSrc, i0.ɵɵsanitizeUrl);
30
38
  } }
31
- function SearchComponent_ng_template_0_a_0_Template(rf, ctx) { if (rf & 1) {
39
+ function SearchComponent_ng_template_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
32
40
  i0.ɵɵelementStart(0, "a");
33
- i0.ɵɵtemplate(1, SearchComponent_ng_template_0_a_0_img_1_Template, 1, 3, "img", 8);
34
- i0.ɵɵelement(2, "span", 9);
41
+ i0.ɵɵtemplate(1, SearchComponent_ng_template_0_Conditional_0_Conditional_1_Template, 1, 3, "img", 5);
42
+ i0.ɵɵelement(2, "span", 6);
35
43
  i0.ɵɵelementEnd();
36
44
  } if (rf & 2) {
37
45
  const ctx_r2 = i0.ɵɵnextContext();
@@ -40,13 +48,13 @@ function SearchComponent_ng_template_0_a_0_Template(rf, ctx) { if (rf & 1) {
40
48
  const match_r5 = ctx_r2.match;
41
49
  const ctx_r1 = i0.ɵɵnextContext();
42
50
  i0.ɵɵadvance();
43
- i0.ɵɵproperty("ngIf", model_r1.imgSrc);
51
+ i0.ɵɵconditional(model_r1.imgSrc ? 1 : -1);
44
52
  i0.ɵɵadvance();
45
53
  i0.ɵɵproperty("title", model_r1.label)("innerHtml", ctx_r1.highlight(match_r5, query_r4) || model_r1.label, i0.ɵɵsanitizeHtml);
46
54
  } }
47
- function SearchComponent_ng_template_0_a_1_Template(rf, ctx) { if (rf & 1) {
48
- i0.ɵɵelementStart(0, "a", 11);
49
- i0.ɵɵelement(1, "div", 12);
55
+ function SearchComponent_ng_template_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
56
+ i0.ɵɵelementStart(0, "a", 4);
57
+ i0.ɵɵelement(1, "div", 8);
50
58
  i0.ɵɵelementEnd();
51
59
  } if (rf & 2) {
52
60
  const match_r5 = i0.ɵɵnextContext().match;
@@ -54,15 +62,15 @@ function SearchComponent_ng_template_0_a_1_Template(rf, ctx) { if (rf & 1) {
54
62
  i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c3, ctx_r1.content))("wmItemTemplate", ctx_r1.content)("userComponentParams", match_r5.item);
55
63
  } }
56
64
  function SearchComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {
57
- i0.ɵɵtemplate(0, SearchComponent_ng_template_0_a_0_Template, 3, 3, "a", 6)(1, SearchComponent_ng_template_0_a_1_Template, 2, 5, "a", 7);
65
+ i0.ɵɵtemplate(0, SearchComponent_ng_template_0_Conditional_0_Template, 3, 3, "a")(1, SearchComponent_ng_template_0_Conditional_1_Template, 2, 5, "a", 4);
58
66
  } if (rf & 2) {
59
67
  const ctx_r1 = i0.ɵɵnextContext();
60
- i0.ɵɵproperty("ngIf", !ctx_r1.content);
68
+ i0.ɵɵconditional(!ctx_r1.content ? 0 : -1);
61
69
  i0.ɵɵadvance();
62
- i0.ɵɵproperty("ngIf", ctx_r1.content);
70
+ i0.ɵɵconditional(ctx_r1.content ? 1 : -1);
63
71
  } }
64
- function SearchComponent_ng_template_2_li_2_h4_2_Template(rf, ctx) { if (rf & 1) {
65
- i0.ɵɵelementStart(0, "h4", 21);
72
+ function SearchComponent_ng_template_2_For_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
73
+ i0.ɵɵelementStart(0, "h4", 15);
66
74
  i0.ɵɵtext(1);
67
75
  i0.ɵɵelementEnd();
68
76
  } if (rf & 2) {
@@ -70,47 +78,47 @@ function SearchComponent_ng_template_2_li_2_h4_2_Template(rf, ctx) { if (rf & 1)
70
78
  i0.ɵɵadvance();
71
79
  i0.ɵɵtextInterpolate(match_r7.value);
72
80
  } }
73
- function SearchComponent_ng_template_2_li_2_ng_container_3_Template(rf, ctx) { if (rf & 1) {
74
- i0.ɵɵelementContainer(0, 22);
81
+ function SearchComponent_ng_template_2_For_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
82
+ i0.ɵɵelementContainer(0, 16);
75
83
  } if (rf & 2) {
76
84
  const ctx_r7 = i0.ɵɵnextContext();
77
85
  const match_r7 = ctx_r7.$implicit;
78
- const i_r9 = ctx_r7.index;
86
+ const ɵ$index_20_r9 = ctx_r7.$index;
79
87
  const ctx_r9 = i0.ɵɵnextContext();
80
88
  const itemTemplate_r11 = ctx_r9.itemTemplate;
81
89
  const query_r12 = ctx_r9.query;
82
- i0.ɵɵproperty("ngTemplateOutlet", itemTemplate_r11)("ngTemplateOutletContext", i0.ɵɵpureFunction4(2, _c5, match_r7.item, i_r9, match_r7, query_r12));
90
+ i0.ɵɵproperty("ngTemplateOutlet", itemTemplate_r11)("ngTemplateOutletContext", i0.ɵɵpureFunction4(2, _c5, match_r7.item, ɵ$index_20_r9, match_r7, query_r12));
83
91
  } }
84
- function SearchComponent_ng_template_2_li_2_Template(rf, ctx) { if (rf & 1) {
92
+ function SearchComponent_ng_template_2_For_3_Template(rf, ctx) { if (rf & 1) {
85
93
  const _r6 = i0.ɵɵgetCurrentView();
86
- i0.ɵɵelementStart(0, "li", 18, 4);
87
- i0.ɵɵlistener("mouseenter", function SearchComponent_ng_template_2_li_2_Template_li_mouseenter_0_listener() { const match_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.typeaheadContainer.selectActive(match_r7)); })("click", function SearchComponent_ng_template_2_li_2_Template_li_click_0_listener($event) { const match_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); match_r7 && !match_r7.isHeader() && ctx_r1.typeaheadContainer.selectMatch(match_r7, $event); ctx_r1.$typeaheadEvent = $event; return i0.ɵɵresetView(ctx_r1.notifySubscriber()); });
88
- i0.ɵɵtemplate(2, SearchComponent_ng_template_2_li_2_h4_2_Template, 2, 1, "h4", 19)(3, SearchComponent_ng_template_2_li_2_ng_container_3_Template, 1, 7, "ng-container", 20);
94
+ i0.ɵɵelementStart(0, "li", 14, 3);
95
+ i0.ɵɵlistener("mouseenter", function SearchComponent_ng_template_2_For_3_Template_li_mouseenter_0_listener() { const match_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.typeaheadContainer.selectActive(match_r7)); })("click", function SearchComponent_ng_template_2_For_3_Template_li_click_0_listener($event) { const match_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); match_r7 && !match_r7.isHeader() && ctx_r1.typeaheadContainer.selectMatch(match_r7, $event); ctx_r1.$typeaheadEvent = $event; return i0.ɵɵresetView(ctx_r1.notifySubscriber()); });
96
+ i0.ɵɵtemplate(2, SearchComponent_ng_template_2_For_3_Conditional_2_Template, 2, 1, "h4", 15)(3, SearchComponent_ng_template_2_For_3_Conditional_3_Template, 1, 7, "ng-container", 16);
89
97
  i0.ɵɵelementEnd();
90
98
  } if (rf & 2) {
91
99
  const match_r7 = ctx.$implicit;
92
100
  const ctx_r1 = i0.ɵɵnextContext(2);
93
101
  i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(3, _c4, ctx_r1.typeaheadContainer && ctx_r1.typeaheadContainer.isActive(match_r7), match_r7 && match_r7.isHeader()));
94
102
  i0.ɵɵadvance(2);
95
- i0.ɵɵproperty("ngIf", match_r7.isHeader());
103
+ i0.ɵɵconditional(match_r7.isHeader() ? 2 : -1);
96
104
  i0.ɵɵadvance();
97
- i0.ɵɵproperty("ngIf", !match_r7.isHeader());
105
+ i0.ɵɵconditional(!match_r7.isHeader() ? 3 : -1);
98
106
  } }
99
107
  function SearchComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
100
- i0.ɵɵelementStart(0, "ul", 13, 3);
101
- i0.ɵɵtemplate(2, SearchComponent_ng_template_2_li_2_Template, 4, 6, "li", 14);
102
- i0.ɵɵelementStart(3, "div", 15);
103
- i0.ɵɵelement(4, "span", 16);
108
+ i0.ɵɵelementStart(0, "ul", 9, 2);
109
+ i0.ɵɵrepeaterCreate(2, SearchComponent_ng_template_2_For_3_Template, 4, 6, "li", 10, i0.ɵɵrepeaterTrackByIdentity);
110
+ i0.ɵɵelementStart(4, "div", 11);
111
+ i0.ɵɵelement(5, "span", 12);
104
112
  i0.ɵɵelementEnd();
105
- i0.ɵɵelementStart(5, "div", 15);
106
- i0.ɵɵelement(6, "i", 17)(7, "span", 16);
113
+ i0.ɵɵelementStart(6, "div", 11);
114
+ i0.ɵɵelement(7, "i", 13)(8, "span", 12);
107
115
  i0.ɵɵelementEnd()();
108
116
  } if (rf & 2) {
109
117
  const matches_r13 = ctx.matches;
110
118
  const ctx_r1 = i0.ɵɵnextContext();
111
119
  i0.ɵɵadvance(2);
112
- i0.ɵɵproperty("ngForOf", matches_r13);
113
- i0.ɵɵadvance();
120
+ i0.ɵɵrepeater(matches_r13);
121
+ i0.ɵɵadvance(2);
114
122
  i0.ɵɵproperty("hidden", ctx_r1._loadingItems || !(ctx_r1.datacompletemsg && ctx_r1.dataProvider.isLastPage));
115
123
  i0.ɵɵadvance();
116
124
  i0.ɵɵproperty("textContent", ctx_r1.datacompletemsg);
@@ -119,22 +127,19 @@ function SearchComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
119
127
  i0.ɵɵadvance(2);
120
128
  i0.ɵɵproperty("textContent", ctx_r1.loadingdatamsg);
121
129
  } }
122
- function SearchComponent_ng_container_4_Template(rf, ctx) { if (rf & 1) {
130
+ function SearchComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
123
131
  const _r14 = i0.ɵɵgetCurrentView();
124
- i0.ɵɵelementContainerStart(0);
125
- i0.ɵɵelementStart(1, "input", 23);
126
- i0.ɵɵtwoWayListener("ngModelChange", function SearchComponent_ng_container_4_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.query, $event) || (ctx_r1.query = $event); return i0.ɵɵresetView($event); });
127
- i0.ɵɵlistener("input", function SearchComponent_ng_container_4_Template_input_input_1_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onInputChange($event)); })("keydown", function SearchComponent_ng_container_4_Template_input_keydown_1_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.listenQuery = true); })("keydown.enter", function SearchComponent_ng_container_4_Template_input_keydown_enter_1_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.$typeaheadEvent = $event; return i0.ɵɵresetView(ctx_r1.handleEnterEvent($event)); })("keydown.arrowdown", function SearchComponent_ng_container_4_Template_input_keydown_arrowdown_1_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectNext($event)); })("blur", function SearchComponent_ng_container_4_Template_input_blur_1_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.invokeOnTouched($event)); })("click", function SearchComponent_ng_container_4_Template_input_click_1_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleFocus($event)); })("focus", function SearchComponent_ng_container_4_Template_input_focus_1_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1._unsubscribeDv = false; ctx_r1.listenQuery = true; ctx_r1.handleFocus($event); return i0.ɵɵresetView(ctx_r1.invokeOnFocus($event)); })("focusout", function SearchComponent_ng_container_4_Template_input_focusout_1_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onFocusOut()); })("typeaheadLoading", function SearchComponent_ng_container_4_Template_input_typeaheadLoading_1_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1._loadingItems); })("typeaheadOnSelect", function SearchComponent_ng_container_4_Template_input_typeaheadOnSelect_1_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.typeaheadOnSelect($event)); });
132
+ i0.ɵɵelementStart(0, "input", 17);
133
+ i0.ɵɵtwoWayListener("ngModelChange", function SearchComponent_Conditional_4_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.query, $event) || (ctx_r1.query = $event); return i0.ɵɵresetView($event); });
134
+ i0.ɵɵlistener("input", function SearchComponent_Conditional_4_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onInputChange($event)); })("keydown", function SearchComponent_Conditional_4_Template_input_keydown_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.listenQuery = true); })("keydown.enter", function SearchComponent_Conditional_4_Template_input_keydown_enter_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.$typeaheadEvent = $event; return i0.ɵɵresetView(ctx_r1.handleEnterEvent($event)); })("keydown.arrowdown", function SearchComponent_Conditional_4_Template_input_keydown_arrowdown_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectNext($event)); })("blur", function SearchComponent_Conditional_4_Template_input_blur_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.invokeOnTouched($event)); })("click", function SearchComponent_Conditional_4_Template_input_click_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleFocus($event)); })("focus", function SearchComponent_Conditional_4_Template_input_focus_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1._unsubscribeDv = false; ctx_r1.listenQuery = true; ctx_r1.handleFocus($event); return i0.ɵɵresetView(ctx_r1.invokeOnFocus($event)); })("focusout", function SearchComponent_Conditional_4_Template_input_focusout_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onFocusOut()); })("typeaheadLoading", function SearchComponent_Conditional_4_Template_input_typeaheadLoading_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1._loadingItems); })("typeaheadOnSelect", function SearchComponent_Conditional_4_Template_input_typeaheadOnSelect_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.typeaheadOnSelect($event)); });
128
135
  i0.ɵɵelementEnd();
129
- i0.ɵɵelementStart(2, "i", 24);
130
- i0.ɵɵlistener("click", function SearchComponent_ng_container_4_Template_i_click_2_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.clearSearch($event)); });
136
+ i0.ɵɵelementStart(1, "i", 18);
137
+ i0.ɵɵlistener("click", function SearchComponent_Conditional_4_Template_i_click_1_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.clearSearch($event)); });
131
138
  i0.ɵɵelementEnd();
132
- i0.ɵɵelementContainerEnd();
133
139
  } if (rf & 2) {
134
140
  const ctx_r1 = i0.ɵɵnextContext();
135
141
  const customItemTemplate_r15 = i0.ɵɵreference(1);
136
142
  const customListTemplate_r16 = i0.ɵɵreference(3);
137
- i0.ɵɵadvance();
138
143
  i0.ɵɵproperty("title", ctx_r1.query || "")("placeholder", ctx_r1.placeholder || "")("disabled", ctx_r1.disabled);
139
144
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.query);
140
145
  i0.ɵɵproperty("ngModelOptions", i0.ɵɵpureFunction0(23, _c6))("readonly", ctx_r1.readonly)("typeahead", ctx_r1.typeaheadDataSource)("typeaheadWaitMs", ctx_r1.debouncetime)("typeaheadItemTemplate", customItemTemplate_r15)("optionsListTemplate", customListTemplate_r16)("typeaheadMinLength", ctx_r1.minchars)("typeaheadOptionsLimit", ctx_r1.limit)("typeaheadGroupField", ctx_r1.groupby ? "groupby" : null)("typeaheadAsync", true)("typeaheadScrollable", true)("adaptivePosition", true)("typeaheadOptionsInScrollableView", ctx_r1.optionslimitinscrollableview)("dropup", ctx_r1.dropup)("tabindex", ctx_r1.tabindex);
@@ -142,13 +147,13 @@ function SearchComponent_ng_container_4_Template(rf, ctx) { if (rf & 1) {
142
147
  i0.ɵɵadvance();
143
148
  i0.ɵɵproperty("hidden", !ctx_r1.showClosebtn);
144
149
  } }
145
- function SearchComponent_ng_template_5_span_6_Template(rf, ctx) { if (rf & 1) {
146
- i0.ɵɵelement(0, "span", 32);
150
+ function SearchComponent_Conditional_5_Conditional_6_Template(rf, ctx) { if (rf & 1) {
151
+ i0.ɵɵelement(0, "span", 23);
147
152
  } }
148
- function SearchComponent_ng_template_5_span_11_Template(rf, ctx) { if (rf & 1) {
153
+ function SearchComponent_Conditional_5_Conditional_11_Template(rf, ctx) { if (rf & 1) {
149
154
  const _r18 = i0.ɵɵgetCurrentView();
150
- i0.ɵɵelementStart(0, "span", 33)(1, "form")(2, "button", 34);
151
- i0.ɵɵlistener("click", function SearchComponent_ng_template_5_span_11_Template_button_click_2_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onSearchSelect($event)); });
155
+ i0.ɵɵelementStart(0, "span", 25)(1, "form")(2, "button", 26);
156
+ i0.ɵɵlistener("click", function SearchComponent_Conditional_5_Conditional_11_Template_button_click_2_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onSearchSelect($event)); });
152
157
  i0.ɵɵelement(3, "i");
153
158
  i0.ɵɵelementEnd()()();
154
159
  } if (rf & 2) {
@@ -159,29 +164,29 @@ function SearchComponent_ng_template_5_span_11_Template(rf, ctx) { if (rf & 1) {
159
164
  i0.ɵɵadvance();
160
165
  i0.ɵɵclassMapInterpolate1("app-icon ", ctx_r1.searchiconclass, "");
161
166
  } }
162
- function SearchComponent_ng_template_5_Template(rf, ctx) { if (rf & 1) {
167
+ function SearchComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
163
168
  const _r17 = i0.ɵɵgetCurrentView();
164
- i0.ɵɵelementStart(0, "button", 25);
165
- i0.ɵɵlistener("click", function SearchComponent_ng_template_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeSearch()); });
169
+ i0.ɵɵelementStart(0, "button", 19);
170
+ i0.ɵɵlistener("click", function SearchComponent_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeSearch()); });
166
171
  i0.ɵɵelement(1, "i");
167
172
  i0.ɵɵelementEnd();
168
- i0.ɵɵelementStart(2, "span", 26);
173
+ i0.ɵɵelementStart(2, "span", 20);
169
174
  i0.ɵɵtext(3, "Back button");
170
175
  i0.ɵɵelementEnd();
171
- i0.ɵɵelementStart(4, "input", 27);
172
- i0.ɵɵtwoWayListener("ngModelChange", function SearchComponent_ng_template_5_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.query, $event) || (ctx_r1.query = $event); return i0.ɵɵresetView($event); });
173
- i0.ɵɵlistener("input", function SearchComponent_ng_template_5_Template_input_input_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onInputChange($event)); })("keydown", function SearchComponent_ng_template_5_Template_input_keydown_4_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.listenQuery = true); })("keydown.enter", function SearchComponent_ng_template_5_Template_input_keydown_enter_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.$typeaheadEvent = $event; return i0.ɵɵresetView(ctx_r1.handleEnterEvent($event)); })("keydown.arrowdown", function SearchComponent_ng_template_5_Template_input_keydown_arrowdown_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectNext($event)); })("blur", function SearchComponent_ng_template_5_Template_input_blur_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.invokeOnTouched($event); return i0.ɵɵresetView(ctx_r1.onFocusOut()); })("click", function SearchComponent_ng_template_5_Template_input_click_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleFocus($event)); })("focus", function SearchComponent_ng_template_5_Template_input_focus_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1._unsubscribeDv = false; ctx_r1.listenQuery = true; ctx_r1.handleFocus($event); return i0.ɵɵresetView(ctx_r1.invokeOnFocus($event)); })("typeaheadLoading", function SearchComponent_ng_template_5_Template_input_typeaheadLoading_4_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1._loadingItems); })("typeaheadOnSelect", function SearchComponent_ng_template_5_Template_input_typeaheadOnSelect_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.typeaheadOnSelect($event)); });
176
+ i0.ɵɵelementStart(4, "input", 21);
177
+ i0.ɵɵtwoWayListener("ngModelChange", function SearchComponent_Conditional_5_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.query, $event) || (ctx_r1.query = $event); return i0.ɵɵresetView($event); });
178
+ i0.ɵɵlistener("input", function SearchComponent_Conditional_5_Template_input_input_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onInputChange($event)); })("keydown", function SearchComponent_Conditional_5_Template_input_keydown_4_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.listenQuery = true); })("keydown.enter", function SearchComponent_Conditional_5_Template_input_keydown_enter_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.$typeaheadEvent = $event; return i0.ɵɵresetView(ctx_r1.handleEnterEvent($event)); })("keydown.arrowdown", function SearchComponent_Conditional_5_Template_input_keydown_arrowdown_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectNext($event)); })("blur", function SearchComponent_Conditional_5_Template_input_blur_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.invokeOnTouched($event); return i0.ɵɵresetView(ctx_r1.onFocusOut()); })("click", function SearchComponent_Conditional_5_Template_input_click_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleFocus($event)); })("focus", function SearchComponent_Conditional_5_Template_input_focus_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1._unsubscribeDv = false; ctx_r1.listenQuery = true; ctx_r1.handleFocus($event); return i0.ɵɵresetView(ctx_r1.invokeOnFocus($event)); })("typeaheadLoading", function SearchComponent_Conditional_5_Template_input_typeaheadLoading_4_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1._loadingItems); })("typeaheadOnSelect", function SearchComponent_Conditional_5_Template_input_typeaheadOnSelect_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.typeaheadOnSelect($event)); });
174
179
  i0.ɵɵelementEnd();
175
- i0.ɵɵelement(5, "input", 28);
176
- i0.ɵɵtemplate(6, SearchComponent_ng_template_5_span_6_Template, 1, 0, "span", 29);
177
- i0.ɵɵelementStart(7, "button", 30);
178
- i0.ɵɵlistener("click", function SearchComponent_ng_template_5_Template_button_click_7_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.clearSearch($event, true)); });
180
+ i0.ɵɵelement(5, "input", 22);
181
+ i0.ɵɵtemplate(6, SearchComponent_Conditional_5_Conditional_6_Template, 1, 0, "span", 23);
182
+ i0.ɵɵelementStart(7, "button", 24);
183
+ i0.ɵɵlistener("click", function SearchComponent_Conditional_5_Template_button_click_7_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.clearSearch($event, true)); });
179
184
  i0.ɵɵelement(8, "i");
180
185
  i0.ɵɵelementEnd();
181
- i0.ɵɵelementStart(9, "span", 26);
186
+ i0.ɵɵelementStart(9, "span", 20);
182
187
  i0.ɵɵtext(10, "Clear button");
183
188
  i0.ɵɵelementEnd();
184
- i0.ɵɵtemplate(11, SearchComponent_ng_template_5_span_11_Template, 4, 7, "span", 31);
189
+ i0.ɵɵtemplate(11, SearchComponent_Conditional_5_Conditional_11_Template, 4, 7, "span", 25);
185
190
  } if (rf & 2) {
186
191
  const ctx_r1 = i0.ɵɵnextContext();
187
192
  const customItemTemplate_r15 = i0.ɵɵreference(1);
@@ -194,13 +199,13 @@ function SearchComponent_ng_template_5_Template(rf, ctx) { if (rf & 1) {
194
199
  i0.ɵɵproperty("ngModelOptions", i0.ɵɵpureFunction0(32, _c6))("readonly", ctx_r1.readonly)("typeahead", ctx_r1.typeaheadDataSource)("typeaheadWaitMs", ctx_r1.debouncetime)("typeaheadItemTemplate", customItemTemplate_r15)("optionsListTemplate", customListTemplate_r16)("typeaheadMinLength", ctx_r1.minchars)("typeaheadOptionsLimit", ctx_r1.limit)("typeaheadGroupField", ctx_r1.groupby ? "groupby" : null)("typeaheadAsync", true)("typeaheadScrollable", true)("adaptivePosition", true)("typeaheadOptionsInScrollableView", ctx_r1.optionslimitinscrollableview)("tabindex", ctx_r1.tabindex)("dropup", ctx_r1.dropup);
195
200
  i0.ɵɵattribute("accesskey", ctx_r1.shortcutkey)("name", ctx_r1.name)("aria-label", ctx_r1.arialabel || "Search field");
196
201
  i0.ɵɵadvance(2);
197
- i0.ɵɵproperty("ngIf", ctx_r1._loadingItems);
202
+ i0.ɵɵconditional(ctx_r1._loadingItems ? 6 : -1);
198
203
  i0.ɵɵadvance();
199
204
  i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(33, _c7, ctx_r1.isQueryEntered()));
200
205
  i0.ɵɵadvance();
201
206
  i0.ɵɵclassMapInterpolate1("app-icon ", ctx_r1.clearsearchiconclass, "");
202
207
  i0.ɵɵadvance(3);
203
- i0.ɵɵproperty("ngIf", ctx_r1.showsearchicon);
208
+ i0.ɵɵconditional(ctx_r1.showsearchicon ? 11 : -1);
204
209
  } }
205
210
  const WIDGET_CONFIG = { widgetType: 'wm-search', hostClass: 'input-group' };
206
211
  export class SearchComponent extends DatasetAwareFormComponent {
@@ -893,25 +898,24 @@ export class SearchComponent extends DatasetAwareFormComponent {
893
898
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.typeahead = _t.first);
894
899
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.ulElement = _t.first);
895
900
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.liElements = _t);
896
- } }, features: [i0.ɵɵProvidersFeature([
901
+ } }, standalone: true, features: [i0.ɵɵProvidersFeature([
897
902
  provideAs(SearchComponent, NG_VALUE_ACCESSOR, true),
898
903
  provideAs(SearchComponent, NG_VALIDATORS, true),
899
904
  provideAsWidgetRef(SearchComponent)
900
- ]), i0.ɵɵInheritDefinitionFeature], attrs: _c2, decls: 7, vars: 2, consts: [["customItemTemplate", ""], ["customListTemplate", ""], ["searchTemplate", ""], ["ulElement", ""], ["liElements", ""], [4, "ngIf", "ngIfElse"], [4, "ngIf"], ["partialContainer", "", 3, "ngClass", "wmItemTemplate", "userComponentParams", 4, "ngIf"], ["alt", "Search", 3, "src", "width", 4, "ngIf"], [3, "title", "innerHtml"], ["alt", "Search", 3, "src"], ["partialContainer", "", 3, "ngClass", "wmItemTemplate", "userComponentParams"], ["partial-container-target", ""], ["scrollable", "", 1, "app-search", "dropdown-menu"], [3, "ngClass", "mouseenter", "click", 4, "ngFor", "ngForOf"], [1, "status", 3, "hidden"], [3, "textContent"], [1, "fa", "fa-circle-o-notch", "fa-spin"], [3, "mouseenter", "click", "ngClass"], ["class", "group-title", 4, "ngIf"], [3, "ngTemplateOutlet", "ngTemplateOutletContext", 4, "ngIf"], [1, "group-title"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], ["type", "text", "focus-target", "", "container", "body", "autocomplete", "off", "typeaheadOptionField", "label", 1, "app-textbox", "form-control", "list-of-objs", "app-search-input", 3, "ngModelChange", "input", "keydown", "keydown.enter", "keydown.arrowdown", "blur", "click", "focus", "focusout", "typeaheadLoading", "typeaheadOnSelect", "title", "placeholder", "disabled", "ngModel", "ngModelOptions", "readonly", "typeahead", "typeaheadWaitMs", "typeaheadItemTemplate", "optionsListTemplate", "typeaheadMinLength", "typeaheadOptionsLimit", "typeaheadGroupField", "typeaheadAsync", "typeaheadScrollable", "adaptivePosition", "typeaheadOptionsInScrollableView", "dropup", "tabindex"], [1, "btn-close", "wi", "wi-cancel", 3, "click", "hidden"], ["aria-hidden", "true", 1, "btn", "btn-icon", "form-control-feedback", "back-btn", 3, "click"], [1, "sr-only"], ["type", "text", "focus-target", "", "autocomplete", "off", "typeaheadOptionField", "label", 1, "app-textbox", "form-control", "list-of-objs", "app-search-input", 3, "ngModelChange", "input", "keydown", "keydown.enter", "keydown.arrowdown", "blur", "click", "focus", "typeaheadLoading", "typeaheadOnSelect", "title", "placeholder", "container", "disabled", "ngModel", "ngModelOptions", "readonly", "typeahead", "typeaheadWaitMs", "typeaheadItemTemplate", "optionsListTemplate", "typeaheadMinLength", "typeaheadOptionsLimit", "typeaheadGroupField", "typeaheadAsync", "typeaheadScrollable", "adaptivePosition", "typeaheadOptionsInScrollableView", "tabindex", "dropup"], ["ng-model", "proxyModel", "ng-required", "required", "tabindex", "-1", "aria-hidden", "true", 1, "model-holder"], ["aria-hidden", "true", "class", "fa fa-circle-o-notch fa-spin form-control-feedback", 4, "ngIf"], [1, "btn", "btn-icon", "form-control-feedback", "clear-btn", 3, "click", "ngClass"], ["class", "input-group-addon", 3, "ngClass", 4, "ngIf"], ["aria-hidden", "true", 1, "fa", "fa-circle-o-notch", "fa-spin", "form-control-feedback"], [1, "input-group-addon", 3, "ngClass"], ["title", "Search", "type", "submit", 1, "app-search-button", "btn", "btn-icon", 3, "click", "disabled"]], template: function SearchComponent_Template(rf, ctx) { if (rf & 1) {
901
- i0.ɵɵtemplate(0, SearchComponent_ng_template_0_Template, 2, 2, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(2, SearchComponent_ng_template_2_Template, 8, 5, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor)(4, SearchComponent_ng_container_4_Template, 3, 24, "ng-container", 5)(5, SearchComponent_ng_template_5_Template, 12, 35, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
905
+ ]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], attrs: _c2, decls: 6, vars: 1, consts: [["customItemTemplate", ""], ["customListTemplate", ""], ["ulElement", ""], ["liElements", ""], ["partialContainer", "", 3, "ngClass", "wmItemTemplate", "userComponentParams"], ["alt", "Search", 3, "src", "width"], [3, "title", "innerHtml"], ["alt", "Search", 3, "src"], ["partial-container-target", ""], ["scrollable", "", 1, "app-search", "dropdown-menu"], [3, "ngClass"], [1, "status", 3, "hidden"], [3, "textContent"], [1, "fa", "fa-circle-o-notch", "fa-spin"], [3, "mouseenter", "click", "ngClass"], [1, "group-title"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], ["type", "text", "focus-target", "", "container", "body", "autocomplete", "off", "typeaheadOptionField", "label", 1, "app-textbox", "form-control", "list-of-objs", "app-search-input", 3, "ngModelChange", "input", "keydown", "keydown.enter", "keydown.arrowdown", "blur", "click", "focus", "focusout", "typeaheadLoading", "typeaheadOnSelect", "title", "placeholder", "disabled", "ngModel", "ngModelOptions", "readonly", "typeahead", "typeaheadWaitMs", "typeaheadItemTemplate", "optionsListTemplate", "typeaheadMinLength", "typeaheadOptionsLimit", "typeaheadGroupField", "typeaheadAsync", "typeaheadScrollable", "adaptivePosition", "typeaheadOptionsInScrollableView", "dropup", "tabindex"], [1, "btn-close", "wi", "wi-cancel", 3, "click", "hidden"], ["aria-hidden", "true", 1, "btn", "btn-icon", "form-control-feedback", "back-btn", 3, "click"], [1, "sr-only"], ["type", "text", "focus-target", "", "autocomplete", "off", "typeaheadOptionField", "label", 1, "app-textbox", "form-control", "list-of-objs", "app-search-input", 3, "ngModelChange", "input", "keydown", "keydown.enter", "keydown.arrowdown", "blur", "click", "focus", "typeaheadLoading", "typeaheadOnSelect", "title", "placeholder", "container", "disabled", "ngModel", "ngModelOptions", "readonly", "typeahead", "typeaheadWaitMs", "typeaheadItemTemplate", "optionsListTemplate", "typeaheadMinLength", "typeaheadOptionsLimit", "typeaheadGroupField", "typeaheadAsync", "typeaheadScrollable", "adaptivePosition", "typeaheadOptionsInScrollableView", "tabindex", "dropup"], ["ng-model", "proxyModel", "ng-required", "required", "tabindex", "-1", "aria-hidden", "true", 1, "model-holder"], ["aria-hidden", "true", 1, "fa", "fa-circle-o-notch", "fa-spin", "form-control-feedback"], [1, "btn", "btn-icon", "form-control-feedback", "clear-btn", 3, "click", "ngClass"], [1, "input-group-addon", 3, "ngClass"], ["title", "Search", "type", "submit", 1, "app-search-button", "btn", "btn-icon", 3, "click", "disabled"]], template: function SearchComponent_Template(rf, ctx) { if (rf & 1) {
906
+ i0.ɵɵtemplate(0, SearchComponent_ng_template_0_Template, 2, 2, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(2, SearchComponent_ng_template_2_Template, 9, 4, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor)(4, SearchComponent_Conditional_4_Template, 2, 24)(5, SearchComponent_Conditional_5_Template, 12, 35);
902
907
  } if (rf & 2) {
903
- const searchTemplate_r19 = i0.ɵɵreference(6);
904
908
  i0.ɵɵadvance(4);
905
- i0.ɵɵproperty("ngIf", ctx.navsearchbar)("ngIfElse", searchTemplate_r19);
906
- } }, encapsulation: 2 }); }
909
+ i0.ɵɵconditional(ctx.navsearchbar ? 4 : 5);
910
+ } }, dependencies: [CommonModule, i2.NgClass, i2.NgTemplateOutlet, WmComponentsModule, i3.ItemTemplateDirective, i3.PartialParamHandlerDirective, i3.PartialContainerDirective, i3.TextContentDirective, FormsModule, i4.ɵNgNoValidate, i4.DefaultValueAccessor, i4.NgControlStatus, i4.NgControlStatusGroup, i4.NgModel, i4.NgForm, ScrollableDirective, TypeaheadModule, i5.TypeaheadDirective], encapsulation: 2 }); }
907
911
  }
908
912
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchComponent, [{
909
913
  type: Component,
910
- args: [{ selector: '[wmSearch]', providers: [
914
+ args: [{ standalone: true, imports: [CommonModule, WmComponentsModule, FormsModule, ScrollableDirective, TypeaheadModule], selector: '[wmSearch]', providers: [
911
915
  provideAs(SearchComponent, NG_VALUE_ACCESSOR, true),
912
916
  provideAs(SearchComponent, NG_VALIDATORS, true),
913
917
  provideAsWidgetRef(SearchComponent)
914
- ], template: "<ng-template #customItemTemplate let-model=\"item\" let-index=\"index\" let-query=\"query\" let-match=\"match\">\n <!-- Default item template -->\n <a *ngIf=\"!content\">\n <img *ngIf=\"model.imgSrc\" [src]=\"model.imgSrc\" alt=\"Search\" [style.width]=\"imagewidth\">\n <span [title]=\"model.label\" [innerHtml]=\"highlight(match, query) || model.label\"></span>\n </a>\n <!-- Custom partial template -->\n <a *ngIf=\"content\" [ngClass]=\"{customTemplate: content}\" partialContainer [wmItemTemplate]=\"content\" [userComponentParams]=\"match.item\">\n <div partial-container-target></div>\n </a>\n</ng-template>\n\n<ng-template #customListTemplate let-matches=\"matches\" let-itemTemplate=\"itemTemplate\" let-query=\"query\">\n <ul #ulElement class=\"app-search dropdown-menu\" scrollable>\n <li #liElements *ngFor=\"let match of matches; let i = index;\" [ngClass]=\"{active: typeaheadContainer && typeaheadContainer.isActive(match), 'list-group-header': match && match.isHeader()}\"\n (mouseenter)=\"typeaheadContainer.selectActive(match);\"\n (click)=\"match && !match.isHeader() && typeaheadContainer.selectMatch(match, $event); $typeaheadEvent = $event; notifySubscriber();\">\n <!-- itemTemplate comes from the <input> -->\n <h4 *ngIf=\"match.isHeader()\" class=\"group-title\">{{match.value}}</h4>\n <ng-container *ngIf=\"!match.isHeader()\" [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{item: match.item, index: i, match: match, query: query}\">\n </ng-container>\n </li>\n <div class=\"status\" [hidden]=\"_loadingItems || !(datacompletemsg && dataProvider.isLastPage)\">\n <span [textContent]=\"datacompletemsg\"></span>\n </div>\n <div class=\"status\" [hidden]=\"!_loadingItems\">\n <i class=\"fa fa-circle-o-notch fa-spin\"></i>\n <span [textContent]=\"loadingdatamsg\"></span>\n </div>\n </ul>\n</ng-template>\n\n<!--This template is for search inside mobile navbar.-->\n<ng-container *ngIf=\"navsearchbar; else searchTemplate\">\n <input [title]=\"query || ''\" type=\"text\" class=\"app-textbox form-control list-of-objs app-search-input\" [placeholder]=\"placeholder || ''\"\n focus-target\n container=\"body\"\n [disabled]=\"disabled\"\n [attr.accesskey]=\"shortcutkey\"\n autocomplete=\"off\"\n [(ngModel)]=\"query\"\n [ngModelOptions]=\"{standalone: true}\"\n [readonly]=\"readonly\"\n [typeahead]=\"typeaheadDataSource\"\n [typeaheadWaitMs]=\"debouncetime\"\n [typeaheadItemTemplate]=\"customItemTemplate\"\n [optionsListTemplate]=\"customListTemplate\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"listenQuery = true\"\n (keydown.enter)=\"$typeaheadEvent = $event;handleEnterEvent($event)\"\n (keydown.arrowdown)=\"selectNext($event)\"\n (blur)=\"invokeOnTouched($event)\"\n (click)=\"handleFocus($event);\"\n (focus)=\"_unsubscribeDv = false; listenQuery = true; handleFocus($event); invokeOnFocus($event);\"\n (focusout)=\"onFocusOut()\"\n [typeaheadMinLength]=\"minchars\"\n [typeaheadOptionsLimit]=\"limit\"\n (typeaheadLoading)=\"_loadingItems\"\n (typeaheadOnSelect)=\"typeaheadOnSelect($event)\"\n typeaheadOptionField=\"label\"\n [typeaheadGroupField]=\"groupby ? 'groupby' : null\"\n [typeaheadAsync]=\"true\"\n [typeaheadScrollable]=\"true\"\n [adaptivePosition]=\"true\"\n [typeaheadOptionsInScrollableView]=\"optionslimitinscrollableview\"\n [dropup]=\"dropup\"\n [tabindex]=\"tabindex\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel || 'Search field'\"/>\n <i class=\"btn-close wi wi-cancel\" [hidden]=\"!showClosebtn\" (click)=\"clearSearch($event);\"></i>\n</ng-container>\n<!--This template is for both web and fullscreen mode in mobile.-->\n<ng-template #searchTemplate>\n <button class=\"btn btn-icon form-control-feedback back-btn\" aria-hidden=\"true\" (click)=\"closeSearch()\"><i class=\"app-icon {{backsearchiconclass}}\"></i></button>\n <span class=\"sr-only\">Back button</span>\n <input [title]=\"query || ''\" type=\"text\" class=\"app-textbox form-control list-of-objs app-search-input\" [placeholder]=\"placeholder || ''\"\n focus-target\n [container]=\"containerTarget || '.wm-app'\"\n [disabled]=\"disabled\"\n [attr.accesskey]=\"shortcutkey\"\n autocomplete=\"off\"\n [(ngModel)]=\"query\"\n [ngModelOptions]=\"{standalone: true}\"\n [readonly]=\"readonly\"\n [typeahead]=\"typeaheadDataSource\"\n [typeaheadWaitMs]=\"debouncetime\"\n [typeaheadItemTemplate]=\"customItemTemplate\"\n [optionsListTemplate]=\"customListTemplate\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"listenQuery = true\"\n (keydown.enter)=\"$typeaheadEvent = $event;handleEnterEvent($event)\"\n (keydown.arrowdown)=\"selectNext($event)\"\n (blur)=\"invokeOnTouched($event); onFocusOut()\"\n (click)=\"handleFocus($event);\"\n (focus)=\"_unsubscribeDv = false; listenQuery = true; handleFocus($event); invokeOnFocus($event)\"\n [typeaheadMinLength]=\"minchars\"\n [typeaheadOptionsLimit]=\"limit\"\n (typeaheadLoading)=\"_loadingItems\"\n (typeaheadOnSelect)=\"typeaheadOnSelect($event)\"\n typeaheadOptionField=\"label\"\n [typeaheadGroupField]=\"groupby ? 'groupby' : null\"\n [typeaheadAsync]=\"true\"\n [typeaheadScrollable]=\"true\"\n [adaptivePosition]=\"true\"\n [typeaheadOptionsInScrollableView]=\"optionslimitinscrollableview\"\n [tabindex]=\"tabindex\"\n [dropup]=\"dropup\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel || 'Search field'\">\n <input class=\"model-holder\" ng-model=\"proxyModel\" ng-required=\"required\" tabindex=\"-1\" aria-hidden=\"true\">\n <span *ngIf=\"_loadingItems\" aria-hidden=\"true\" class=\"fa fa-circle-o-notch fa-spin form-control-feedback\"></span>\n <button class=\"btn btn-icon form-control-feedback clear-btn\" [ngClass]=\"{'show-btn': isQueryEntered()}\" (click)=\"clearSearch($event, true)\"><i class=\"app-icon {{clearsearchiconclass}}\"></i></button>\n <span class=\"sr-only\">Clear button</span>\n <span *ngIf=\"showsearchicon\" [ngClass]=\"{'disabled': disabled}\" class=\"input-group-addon\">\n <form>\n <button title=\"Search\" [disabled]=\"disabled\" class=\"app-search-button btn btn-icon\" type=\"submit\"\n (click)=\"onSearchSelect($event)\">\n <i class=\"app-icon {{searchiconclass}}\"></i></button>\n </form>\n </span>\n</ng-template>\n" }]
918
+ ], template: "<ng-template #customItemTemplate let-model=\"item\" let-index=\"index\" let-query=\"query\" let-match=\"match\">\n <!-- Default item template -->\n @if (!content) {\n <a>\n @if (model.imgSrc) {\n <img [src]=\"model.imgSrc\" alt=\"Search\" [style.width]=\"imagewidth\">\n }\n <span [title]=\"model.label\" [innerHtml]=\"highlight(match, query) || model.label\"></span>\n </a>\n }\n <!-- Custom partial template -->\n @if (content) {\n <a [ngClass]=\"{customTemplate: content}\" partialContainer [wmItemTemplate]=\"content\" [userComponentParams]=\"match.item\">\n <div partial-container-target></div>\n </a>\n }\n</ng-template>\n\n<ng-template #customListTemplate let-matches=\"matches\" let-itemTemplate=\"itemTemplate\" let-query=\"query\">\n <ul #ulElement class=\"app-search dropdown-menu\" scrollable>\n @for (match of matches; track match; let i = $index) {\n <li #liElements [ngClass]=\"{active: typeaheadContainer && typeaheadContainer.isActive(match), 'list-group-header': match && match.isHeader()}\"\n (mouseenter)=\"typeaheadContainer.selectActive(match);\"\n (click)=\"match && !match.isHeader() && typeaheadContainer.selectMatch(match, $event); $typeaheadEvent = $event; notifySubscriber();\">\n <!-- itemTemplate comes from the <input> -->\n @if (match.isHeader()) {\n <h4 class=\"group-title\">{{match.value}}</h4>\n }\n @if (!match.isHeader()) {\n <ng-container [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{item: match.item, index: i, match: match, query: query}\">\n </ng-container>\n }\n </li>\n }\n <div class=\"status\" [hidden]=\"_loadingItems || !(datacompletemsg && dataProvider.isLastPage)\">\n <span [textContent]=\"datacompletemsg\"></span>\n </div>\n <div class=\"status\" [hidden]=\"!_loadingItems\">\n <i class=\"fa fa-circle-o-notch fa-spin\"></i>\n <span [textContent]=\"loadingdatamsg\"></span>\n </div>\n </ul>\n</ng-template>\n\n<!--This template is for search inside mobile navbar.-->\n@if (navsearchbar) {\n <input [title]=\"query || ''\" type=\"text\" class=\"app-textbox form-control list-of-objs app-search-input\" [placeholder]=\"placeholder || ''\"\n focus-target\n container=\"body\"\n [disabled]=\"disabled\"\n [attr.accesskey]=\"shortcutkey\"\n autocomplete=\"off\"\n [(ngModel)]=\"query\"\n [ngModelOptions]=\"{standalone: true}\"\n [readonly]=\"readonly\"\n [typeahead]=\"typeaheadDataSource\"\n [typeaheadWaitMs]=\"debouncetime\"\n [typeaheadItemTemplate]=\"customItemTemplate\"\n [optionsListTemplate]=\"customListTemplate\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"listenQuery = true\"\n (keydown.enter)=\"$typeaheadEvent = $event;handleEnterEvent($event)\"\n (keydown.arrowdown)=\"selectNext($event)\"\n (blur)=\"invokeOnTouched($event)\"\n (click)=\"handleFocus($event);\"\n (focus)=\"_unsubscribeDv = false; listenQuery = true; handleFocus($event); invokeOnFocus($event);\"\n (focusout)=\"onFocusOut()\"\n [typeaheadMinLength]=\"minchars\"\n [typeaheadOptionsLimit]=\"limit\"\n (typeaheadLoading)=\"_loadingItems\"\n (typeaheadOnSelect)=\"typeaheadOnSelect($event)\"\n typeaheadOptionField=\"label\"\n [typeaheadGroupField]=\"groupby ? 'groupby' : null\"\n [typeaheadAsync]=\"true\"\n [typeaheadScrollable]=\"true\"\n [adaptivePosition]=\"true\"\n [typeaheadOptionsInScrollableView]=\"optionslimitinscrollableview\"\n [dropup]=\"dropup\"\n [tabindex]=\"tabindex\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel || 'Search field'\"/>\n <i class=\"btn-close wi wi-cancel\" [hidden]=\"!showClosebtn\" (click)=\"clearSearch($event);\"></i>\n} @else {\n <button class=\"btn btn-icon form-control-feedback back-btn\" aria-hidden=\"true\" (click)=\"closeSearch()\"><i class=\"app-icon {{backsearchiconclass}}\"></i></button>\n <span class=\"sr-only\">Back button</span>\n <input [title]=\"query || ''\" type=\"text\" class=\"app-textbox form-control list-of-objs app-search-input\" [placeholder]=\"placeholder || ''\"\n focus-target\n [container]=\"containerTarget || '.wm-app'\"\n [disabled]=\"disabled\"\n [attr.accesskey]=\"shortcutkey\"\n autocomplete=\"off\"\n [(ngModel)]=\"query\"\n [ngModelOptions]=\"{standalone: true}\"\n [readonly]=\"readonly\"\n [typeahead]=\"typeaheadDataSource\"\n [typeaheadWaitMs]=\"debouncetime\"\n [typeaheadItemTemplate]=\"customItemTemplate\"\n [optionsListTemplate]=\"customListTemplate\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"listenQuery = true\"\n (keydown.enter)=\"$typeaheadEvent = $event;handleEnterEvent($event)\"\n (keydown.arrowdown)=\"selectNext($event)\"\n (blur)=\"invokeOnTouched($event); onFocusOut()\"\n (click)=\"handleFocus($event);\"\n (focus)=\"_unsubscribeDv = false; listenQuery = true; handleFocus($event); invokeOnFocus($event)\"\n [typeaheadMinLength]=\"minchars\"\n [typeaheadOptionsLimit]=\"limit\"\n (typeaheadLoading)=\"_loadingItems\"\n (typeaheadOnSelect)=\"typeaheadOnSelect($event)\"\n typeaheadOptionField=\"label\"\n [typeaheadGroupField]=\"groupby ? 'groupby' : null\"\n [typeaheadAsync]=\"true\"\n [typeaheadScrollable]=\"true\"\n [adaptivePosition]=\"true\"\n [typeaheadOptionsInScrollableView]=\"optionslimitinscrollableview\"\n [tabindex]=\"tabindex\"\n [dropup]=\"dropup\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel || 'Search field'\">\n <input class=\"model-holder\" ng-model=\"proxyModel\" ng-required=\"required\" tabindex=\"-1\" aria-hidden=\"true\">\n @if (_loadingItems) {\n <span aria-hidden=\"true\" class=\"fa fa-circle-o-notch fa-spin form-control-feedback\"></span>\n }\n <button class=\"btn btn-icon form-control-feedback clear-btn\" [ngClass]=\"{'show-btn': isQueryEntered()}\" (click)=\"clearSearch($event, true)\"><i class=\"app-icon {{clearsearchiconclass}}\"></i></button>\n <span class=\"sr-only\">Clear button</span>\n @if (showsearchicon) {\n <span [ngClass]=\"{'disabled': disabled}\" class=\"input-group-addon\">\n <form>\n <button title=\"Search\" [disabled]=\"disabled\" class=\"app-search-button btn btn-icon\" type=\"submit\"\n (click)=\"onSearchSelect($event)\">\n <i class=\"app-icon {{searchiconclass}}\"></i></button>\n </form>\n </span>\n }\n }\n <!--This template is for both web and fullscreen mode in mobile.-->\n" }]
915
919
  }], () => [{ type: i0.Injector }, { type: i1.App }, { type: undefined, decorators: [{
916
920
  type: Attribute,
917
921
  args: ['datavalue.bind']
@@ -933,5 +937,5 @@ export class SearchComponent extends DatasetAwareFormComponent {
933
937
  type: ViewChildren,
934
938
  args: ['liElements']
935
939
  }] }); })();
936
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SearchComponent, { className: "SearchComponent", filePath: "search.component.ts", lineNumber: 66 }); })();
937
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9iYXNpYy9zZWFyY2gvc3JjL3NlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvc2VhcmNoL3NyYy9zZWFyY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBRVIsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQThCLGtCQUFrQixFQUFpQixNQUFNLHlCQUF5QixDQUFDO0FBRXhHLE9BQU8sRUFBQyxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM1RyxPQUFPLEVBQ0gsU0FBUyxFQUNULG1CQUFtQixFQUVuQixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLE1BQU0sRUFDTixpQkFBaUIsRUFDcEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUUvRCxPQUFPLEVBQUMs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Q25ELFNBQVMsQ0FBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQztnQkFDL0Msa0JBQWtCLENBQUMsZUFBZSxDQUFDO2FBQ3RDO1lDVUwsQUF2Q0EsQUF0QkEsQUFaQSxpSEFBd0csb0dBWUMsc0VBc0JqRCxzR0F1QzNCOzs7WUF2Q2QsZUFBb0I7WUFBQSxBQUFwQix1Q0FBb0IsZ0NBQW1COzs7aUZEK0J6QyxlQUFlO2NBVDNCLFNBQVM7MkJBQ0ksWUFBWSxhQUVYO29CQUNQLFNBQVMsa0JBQWtCLGlCQUFpQixFQUFFLElBQUksQ0FBQztvQkFDbkQsU0FBUyxrQkFBa0IsYUFBYSxFQUFFLElBQUksQ0FBQztvQkFDL0Msa0JBQWtCLGlCQUFpQjtpQkFDdEM7O3NCQStFSSxTQUFTO3VCQUFDLGdCQUFnQjs7c0JBQzFCLFNBQVM7dUJBQUMsY0FBYzs7c0JBQ3hCLE1BQU07dUJBQUMsa0JBQWtCOztzQkFBRyxRQUFRO3FCQTVDVixTQUFTO2tCQUF2QyxTQUFTO21CQUFDLGtCQUFrQjtZQUNMLFNBQVM7a0JBQWhDLFNBQVM7bUJBQUMsV0FBVztZQUNNLFVBQVU7a0JBQXJDLFlBQVk7bUJBQUMsWUFBWTs7a0ZBckNqQixlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7ZnJvbSwgT2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIG1lcmdlTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7VHlwZWFoZWFkQ29udGFpbmVyQ29tcG9uZW50LCBUeXBlYWhlYWREaXJlY3RpdmUsIFR5cGVhaGVhZE1hdGNofSBmcm9tICduZ3gtYm9vdHN0cmFwL3R5cGVhaGVhZCc7XG5cbmltcG9ydCB7YWRkQ2xhc3MsIGFkanVzdENvbnRhaW5lclBvc2l0aW9uLCBBcHAsIERhdGFTb3VyY2UsIGlzRGVmaW5lZCwgaXNNb2JpbGUsIHRvQm9vbGVhbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBTExGSUVMRFMsXG4gICAgY29udmVydERhdGFUb09iamVjdCxcbiAgICBEYXRhU2V0SXRlbSxcbiAgICBleHRyYWN0RGF0YUFzQXJyYXksXG4gICAgZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3MsXG4gICAgZ2V0VW5pcU9ianNCeURhdGFGaWVsZCxcbiAgICBwcm92aWRlQXMsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIHN0eWxlcixcbiAgICB0cmFuc2Zvcm1Gb3JtRGF0YVxufSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7RGF0YXNldEF3YXJlRm9ybUNvbXBvbmVudH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvaW5wdXQnO1xuXG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vc2VhcmNoLnByb3BzJztcbmltcG9ydCB7RGF0YVByb3ZpZGVyLCBJRGF0YVByb3ZpZGVyLCBJRGF0YVByb3ZpZGVyQ29uZmlnfSBmcm9tICcuL2RhdGEtcHJvdmlkZXIvZGF0YS1wcm92aWRlcic7XG5pbXBvcnQge1xuICAgIGRlYm91bmNlLFxuICAgIGZpbmQsXG4gICAgZ2V0LFxuICAgIGluY2x1ZGVzLFxuICAgIGlzQXJyYXksXG4gICAgaXNFbXB0eSxcbiAgICBpc0VxdWFsLFxuICAgIGlzT2JqZWN0LFxuICAgIGlzVW5kZWZpbmVkLFxuICAgIG1hcCxcbiAgICBzcGxpdCxcbiAgICB0b1N0cmluZyxcbiAgICB0cmltXG59IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgV0lER0VUX0NPTkZJRyA9IHsgd2lkZ2V0VHlwZTogJ3dtLXNlYXJjaCcsIGhvc3RDbGFzczogJ2lucHV0LWdyb3VwJyB9O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ1t3bVNlYXJjaF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXMoU2VhcmNoQ29tcG9uZW50LCBOR19WQUxVRV9BQ0NFU1NPUiwgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBcyhTZWFyY2hDb21wb25lbnQsIE5HX1ZBTElEQVRPUlMsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoU2VhcmNoQ29tcG9uZW50KVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoQ29tcG9uZW50IGV4dGVuZHMgRGF0YXNldEF3YXJlRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICBwdWJsaWMgY2FzZXNlbnNpdGl2ZTogYm9vbGVhbjtcbiAgICBwdWJsaWMgc2VhcmNoa2V5OiBzdHJpbmc7XG4gICAgcHVibGljIHF1ZXJ5TW9kZWw6IEFycmF5PERhdGFTZXRJdGVtPiB8IHN0cmluZztcbiAgICBwdWJsaWMgcXVlcnkgPSAnJztcbiAgICBwdWJsaWMgbGltaXQ6IGFueTtcbiAgICBwdWJsaWMgc2hvd3NlYXJjaGljb246IGJvb2xlYW47XG4gICAgcHVibGljIG1pbmNoYXJzOiBudW1iZXI7XG4gICAgcHVibGljIHR5cGU6IHN0cmluZztcbiAgICBwdWJsaWMgbmF2c2VhcmNoYmFyOiBhbnk7XG4gICAgcHVibGljIGRlYm91bmNldGltZTogbnVtYmVyO1xuICAgIHB1YmxpYyBoaW50OiBzdHJpbmc7XG4gICAgcHVibGljIGFyaWFsYWJlbDogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBhcHA6IEFwcDtcbiAgICBwcml2YXRlIHR5cGVhaGVhZERhdGFTb3VyY2U6IE9ic2VydmFibGU8YW55PjtcbiAgICBwcml2YXRlIHBhZ2VzaXplOiBhbnk7XG4gICAgcHJpdmF0ZSBwYWdlID0gMTtcbiAgICBwdWJsaWMgX2xvYWRpbmdJdGVtczogYm9vbGVhbjtcbiAgICBwcml2YXRlIGRhdGFQcm92aWRlcjogSURhdGFQcm92aWRlcjtcbiAgICBwcml2YXRlIHJlc3VsdDogQXJyYXk8YW55PjsgLy8gY29udGFpbnMgdGhlIHNlYXJjaCByZXN1bHQgaS5lLiBtYXRjaGVzXG4gICAgcHJpdmF0ZSBmb3JtYXR0ZWREYXRhc2V0OiBhbnk7XG4gICAgcHJpdmF0ZSBpc2Zvcm1maWVsZDogYm9vbGVhbjtcbiAgICBwcml2YXRlICR0eXBlYWhlYWRFdmVudDogRXZlbnQ7XG5cbiAgICBwdWJsaWMgdGFiaW5kZXg6IG51bWJlcjtcbiAgICBwdWJsaWMgc3RhcnRJbmRleDogbnVtYmVyO1xuICAgIHB1YmxpYyBiaW5kZGlzcGxheWxhYmVsOiBzdHJpbmc7XG4gICAgcHVibGljIHR5cGVhaGVhZENvbnRhaW5lcjogVHlwZWFoZWFkQ29udGFpbmVyQ29tcG9uZW50O1xuICAgIHB1YmxpYyBjb250YWluZXJUYXJnZXQ6IHN0cmluZztcbiAgICBwdWJsaWMgY2xlYXJzZWFyY2hpY29uY2xhc3M6IHN0cmluZztcbiAgICBwdWJsaWMgYmFja3NlYXJjaGljb25jbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBzZWFyY2hpY29uY2xhc3M6IHN0cmluZztcblxuICAgIEBWaWV3Q2hpbGQoVHlwZWFoZWFkRGlyZWN0aXZlKSB0eXBlYWhlYWQ6IFR5cGVhaGVhZERpcmVjdGl2ZTtcbiAgICBAVmlld0NoaWxkKCd1bEVsZW1lbnQnKSB1bEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZHJlbignbGlFbGVtZW50cycpIGxpRWxlbWVudHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICAgIHByaXZhdGUgYWxsb3dvbmx5c2VsZWN0OiBib29sZWFuO1xuICAgIHByaXZhdGUgY2xhc3M6IHN0cmluZztcblxuICAgIHByaXZhdGUgbGFzdFNlbGVjdGVkSW5kZXg6IG51bWJlcjtcbiAgICBwcml2YXRlIGRhdGFvcHRpb25zOiBhbnk7XG4gICAgcHVibGljIGRyb3Bkb3duRWw6IGFueTtcbiAgICBwcml2YXRlIF9sYXN0UXVlcnk6IHN0cmluZztcbiAgICBwcml2YXRlIF9sYXN0UmVzdWx0OiBhbnk7XG4gICAgcHJpdmF0ZSBfaXNPcGVuOiBib29sZWFuOyAvLyBzZXQgdG8gdHJ1ZSB3aGVuIGRyb3Bkb3duIGlzIG9wZW5cbiAgICBwcml2YXRlIHNob3dDbG9zZWJ0bjogYm9vbGVhbjtcbiAgICBwcml2YXRlIF91bnN1YnNjcmliZUR2OiBib29sZWFuO1xuICAgIHByaXZhdGUgX2RhdGFzb3VyY2U6IGFueTtcbiAgICBwcml2YXRlIGlzU2Nyb2xsZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBwYXJlbnRFbDogYW55O1xuICAgIHByaXZhdGUgcG9zaXRpb246IHN0cmluZztcbiAgICBwcml2YXRlIGVsSW5kZXg6IG51bWJlcjtcbiAgICBwcml2YXRlIGxpc3RlblF1ZXJ5OiBib29sZWFuO1xuICAgIHByaXZhdGUgX2RvbVVwZGF0ZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBzZWFyY2hvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgc2hvd2NsZWFyOiBib29sZWFuO1xuICAgIHB1YmxpYyBtYXRjaG1vZGU6IHN0cmluZztcbiAgICBwcml2YXRlIGNsZWFyRGF0YTogYm9vbGVhbjtcblxuXG4gICAgLy8gZ2V0dGVyIHNldHRlciBpcyBhZGRlZCB0byBwYXNzIHRoZSBkYXRhc291cmNlIHRvIHNlYXJjaGNvbXBvbmVudC5cbiAgICBnZXQgZGF0YXNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFzb3VyY2U7XG4gICAgfVxuXG4gICAgc2V0IGRhdGFzb3VyY2UobnYpIHtcbiAgICAgICAgdGhpcy5fZGF0YXNvdXJjZSA9IG52O1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhdmFsdWUgfHwgdGhpcy50b0JlUHJvY2Vzc2VkRGF0YXZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZUJ5RGF0YXZhbHVlKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBhcHA6IEFwcCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXZhbHVlLmJpbmQnKSBwdWJsaWMgYmluZGRhdGF2YWx1ZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJykgcHVibGljIGJpbmRkYXRhc2V0LFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnlcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICAvLyB0aGlzIGZsYWcgd2lsbCBub3QgYWxsb3cgdGhlIGVtcHR5IGRhdGFmaWVsZCB2YWx1ZXMuXG4gICAgICAgIHRoaXMuYWxsb3dlbXB0eSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCAnYXBwLXNlYXJjaCcsIHRydWUpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMaXN0ZW5zIGZvciB0aGUgY2hhbmdlIGluIHRoZSBuZ01vZGVsIG9uIGV2ZXJ5IHNlYXJjaCBhbmQgcmV0cmlldmVzIHRoZSBkYXRhIGFzIG9ic2VydmFibGUuXG4gICAgICAgICAqIFRoaXMgb2JzZXJ2YWJsZSBkYXRhIGlzIHBhc3NlZCB0byB0aGUgdHlwZWFoZWFkLlxuICAgICAgICAgKiBAdHlwZSB7T2JzZXJ2YWJsZTxhbnk+fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50eXBlYWhlYWREYXRhU291cmNlID0gT2JzZXJ2YWJsZVxuICAgICAgICAgICAgLmNyZWF0ZSgob2JzZXJ2ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFJ1bnMgb24gZXZlcnkgc2VhcmNoXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuUXVlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFF1ZXJ5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMucXVlcnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBvbiBrZXlkb3duLCB3aGlsZSBzY3JvbGxpbmcgdGhlIGRyb3Bkb3duIGl0ZW1zLCB3aGVuIGxhc3QgaXRlbSBpcyByZWFjaGVkIG5leHQgY2FsbCBpcyB0cmlnZ2VyZWRcbiAgICAgICAgICAgICAgICAvLyB1bmxlc3MgdGhlIGNhbGwgaXMgcmVzb2x2ZWQsIHdlIGFyZSBhYmxlIHRvIHNjcm9sbCBuZXh0IHRvIGZpcnN0IGl0ZW0gYW5kIHNvb25cbiAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3dzIGZsaWNrZXJpbmcgZnJvbSBmaXJzdCBpdGVtIHRvIG5leHQgbmV3IGl0ZW1zIGFwcGVuZGVkLlxuICAgICAgICAgICAgICAgIC8vIEJ5IHNldHRpbmcgY29udGFpbmVyIHRvIHVuZGVmaW5lZCwga2V5IGV2ZW50cyBjaGFuZ2VzIHdpbGwgYmUgc3RvcHBlZCB3aGlsZSBsb2FkaW5nIGl0ZW1zXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuX2NvbnRhaW5lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMubWluY2hhcnMgPT09IDAgfHwgKHRoaXMucXVlcnkgJiYgdGhpcy5xdWVyeS5sZW5ndGggPj0gdGhpcy5taW5jaGFycykpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKCh0b2tlbjogc3RyaW5nKSA9PiB0aGlzLmdldERhdGFTb3VyY2VBc09ic2VydmFibGUodG9rZW4pKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmRhdGFQcm92aWRlciA9IG5ldyBEYXRhUHJvdmlkZXIoKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogV2hlbiBkZWZhdWx0IGRhdGF2YWx1ZSBpcyBub3QgZm91bmQgd2l0aGluIHRoZSBkYXRhc2V0LCBhIGZpbHRlciBjYWxsIGlzIG1hZGUgdG8gZ2V0IHRoZSByZWNvcmQgdXNpbmcgZmV0Y2hEZWZhdWx0TW9kZWwuXG4gICAgICAgICAqIGFmdGVyIGdldHRpbmcgdGhlIHJlc3BvbnNlLCBzZXQgdGhlIHF1ZXJ5TW9kZWwgYW5kIHF1ZXJ5LlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgZGF0YXZhbHVlU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhdmFsdWUkLnN1YnNjcmliZSgodmFsOiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gKGlzQXJyYXkodmFsKSA/IHZhbFswXSA6IHZhbCkgYXMgc3RyaW5nO1xuXG4gICAgICAgICAgICBpZiAocXVlcnkgPT09IG51bGwgfHwgcXVlcnkgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgdGhlIHF1ZXJ5LlxuICAgICAgICAgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLnF1ZXJ5TW9kZWwgPSAnJztcbiAgICAgICAgICAgICAgICAvLyBvbiBjbGVhciBvciByZXNldCBmaWx0ZXIsIGVtcHR5IHRoZSBsYXN0UmVzdWx0cyB0byBmZXRjaCBuZXcgcmVjb3Jkcy5cbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0UmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLl91bnN1YnNjcmliZUR2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFF1ZXJ5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIGlmIHByZXYgZGF0YXZhbHVlIGlzIG5vdCBlcXVhbCB0byBjdXJyZW50IGRhdGF2YWx1ZSB0aGVuIGNsZWFyIHRoZSBtb2RlbEJ5S2V5IGFuZCBxdWVyeU1vZGVsXG4gICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdCh2YWwpICYmICh0aGlzIGFzIGFueSkucHJldkRhdGF2YWx1ZSAhPT0gdmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsQnlLZXkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLnF1ZXJ5TW9kZWwgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGRhdGFmaWVsZCBpcyBBTExGSUxFRFMgZG8gbm90IGZldGNoIHRoZSByZWNvcmRzXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBxdWVyeSBtb2RlbCB3aXRoIHRoZSB2YWx1ZXMgd2UgaGF2ZVxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQnlEYXRhdmFsdWUodmFsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdHVybiBvbiBzaG93Q2xvc2VCdG4gd2hlbiBhIGRlZmF1bHQgdmFsdWUgaXMgZ2l2ZW5cbiAgICAgICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gKHRoaXMucXVlcnkgIT09ICcnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gZGF0YXZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgIGNvbnN0IGRhdGFzZXRTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGFzZXQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAvLyBzZXQgdGhlIG5leHQgaXRlbSBpbmRleC5cbiAgICAgICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IHRoaXMuZGF0YXNldEl0ZW1zLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmRhdGF2YWx1ZSB8fCB0aGlzLnRvQmVQcm9jZXNzZWREYXRhdmFsdWU7XG4gICAgICAgICAgICAvLyBpbnZva2luZyB1cGRhdGVCeURhdGFzZXQgb25seSB3aGVuIGRhdGF2YWx1ZSBpcyBwcmVzZW50LCBhcyBlbnRlcmVkIHZhbHVlIGkuZS4gcXVlcnkgaXMgc2V0dGluZyBiYWNrIHRvICcnXG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ5RGF0YXNldChkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBkYXRhc2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIC8vIG9uIGNsZWFyLCB0cmlnZ2VyIHNlYXJjaCB3aXRoIHBhZ2Ugc2l6ZSAxXG4gICAgcHJpdmF0ZSBjbGVhclNlYXJjaCgkZXZlbnQsIGxvYWRPbkNsZWFyKSB7XG4gICAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKCRldmVudCk7XG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IGZhbHNlO1xuICAgICAgICBpZiAobG9hZE9uQ2xlYXIpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9yZURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NsZWFyc2VhcmNoJyk7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAvLyB3aGVuIHNlYXJjaCBpbnB1dCBpcyBjbGVhcmVkLCBmb2N1cyBvbiB0aGUgaW5wdXQgZmllbGRcbiAgICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcuYXBwLXNlYXJjaC1pbnB1dCcpLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmdW5jdGlvbiB0byAgY2xlYXIgdGhlIGlucHV0IHZhbHVlXG4gICAgcHVibGljIGNsZWFyVGV4dCgpIHtcbiAgICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENsb3NlIHRoZSBmdWxsIHNjcmVlbiBtb2RlIGluIG1vYmlsZSB2aWV3IG9mIGF1dG8gY29tcGxldGVcbiAgICBwcml2YXRlIGNsb3NlU2VhcmNoKCkge1xuICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYWdlID0gMTtcbiAgICAgICAgLy8gYWZ0ZXIgY2xvc2luZyB0aGUgc2VhcmNoLCBpbnNlcnQgdGhlIGVsZW1lbnQgYXQgaXRzIHByZXZpb3VzIHBvc2l0aW9uIChlbEluZGV4KVxuICAgICAgICB0aGlzLmluc2VydEF0SW5kZXgodGhpcy5lbEluZGV4KTtcbiAgICAgICAgdGhpcy5lbEluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnBhcmVudEVsID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCdmdWxsLXNjcmVlbicpO1xuICAgICAgICBpZiAodGhpcy5fZG9tVXBkYXRlZCkge1xuICAgICAgICAgICAgdGhpcy5fZG9tVXBkYXRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IHRydWU7XG4gICAgICAgIHRoaXMudHlwZWFoZWFkLmhpZGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlck1vYmlsZUF1dG9Db21wbGV0ZSgpIHtcbiAgICAgICAgLy8gR2V0IHRoZSBwYXJlbnQgZWxlbWVudCBvZiB0aGUgc2VhcmNoIGVsZW1lbnQgd2hpY2ggY2FuIGJlIG5leHQgb3IgcHJldiBlbGVtZW50LCBpZiBib3RoIGFyZSBlbXB0eSB0aGVuIGdldCB0aGUgcGFyZW50IG9mIGVsZW1lbnQuXG4gICAgICAgIGlmICghaXNEZWZpbmVkKHRoaXMuZWxJbmRleCkpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50RWwgPSB0aGlzLiRlbGVtZW50LnBhcmVudCgpO1xuICAgICAgICAgICAgdGhpcy5lbEluZGV4ID0gdGhpcy5wYXJlbnRFbC5jaGlsZHJlbigpLmluZGV4KHRoaXMuJGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZnVsbC1zY3JlZW4nKSkge1xuICAgICAgICAgICAgLy8gdGhpcyBmbGFnIGlzIHNldCB0byBub3RpZnkgdGhhdCB0aGUgdHlwZWFoZWFkLWNvbnRhaW5lciBkb20gaGFzIGNoYW5nZWQgaXRzIHBvc2l0aW9uXG4gICAgICAgICAgICB0aGlzLl9kb21VcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIEFkZCBmdWxsIHNjcmVlbiBjbGFzcyBvbiBmb2N1cyBvZiB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ2Z1bGwtc2NyZWVuJyk7XG5cbiAgICAgICAgICAgIC8vIEFkZCBwb3NpdGlvbiB0byBzZXQgdGhlIGhlaWdodCB0byBhdXRvXG4gICAgICAgICAgICBpZiAodGhpcy5wb3NpdGlvbiA9PT0gJ2lubGluZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMucG9zaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZvY3VzIGlzIGxvc3Qgd2hlbiBlbGVtZW50IGlzIGNoYW5nZWQgdG8gZnVsbC1zY3JlZW4sIGtleWRvd24gdG8gc2VsZWN0IG5leHQgaXRlbXMgd2lsbCBub3Qgd29ya1xuICAgICAgICAvLyBIZW5jZSBleHBsaWNpdGx5IGZvY3VzaW5nIHRoZSBpbnB1dFxuICAgICAgICBpZiAodGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZnVsbC1zY3JlZW4nKSkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcuYXBwLXNlYXJjaC1pbnB1dCcpLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGFTb3VyY2VBc09ic2VydmFibGUocXVlcnk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIC8vIHNob3cgZHJvcGRvd24gb25seSB3aGVuIHRoZXJlIGlzIGNoYW5nZSBpbiBxdWVyeS4gVGhpcyBzaG91bGQgbm90IGFwcGx5IHdoZW4gZGF0YW9wdGlvbnMgd2l0aCBmaWx0ZXJGaWVsZHMgYXJlIHVwZGF0ZWQuXG4gICAgICAgIC8vIHdoZW4gbGFzdFJlc3VsdCBpcyBub3QgYXZhaWxhYmxlIGkuZS4gc3RpbGwgdGhlIGZpcnN0IGNhbGwgaXMgcGVuZGluZyBhbmQgc2Vjb25kIHF1ZXJ5IGlzIGludm9rZWQgdGhlbiBkbyBub3QgcmV0dXJuLlxuICAgICAgICBpZiAodGhpcy5fbGFzdFF1ZXJ5ID09PSBxdWVyeSAmJiAhZ2V0KHRoaXMuZGF0YW9wdGlvbnMsICdmaWx0ZXJGaWVsZHMnKSAmJiBpc0RlZmluZWQodGhpcy5fbGFzdFJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMuX2xhc3RSZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgICAgICBXTVMtMTkxNzc6IE9uIGZvY3VzIG9mIGlucHV0IGZpZWxkIGZvciBhdXRvY29tcGxldGUgdHlwZSwgZG8gbm90IHRyaWdnZXIgYXBpIGNhbGwgd2hlblxuICAgICAgICAgICAgICAgICBhKSBzZWFyY2hrZXkgYW5kIGRpc3BsYXlleHByZXNzaW9uIGFyZSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgICAgYikgYmluZGRpc3BsYXlsYWJlbCBjb250YWlucyBtdWx0aXBsZSB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgYykgYmluZGRpc3BsYXlsYWJlbCBjb250YWlucyBzaW5nbGUgdmFsdWUgd2hpY2ggZG9lcyBub3QgbWF0Y2ggd2l0aCBzZWFyY2hrZXlcbiAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScgJiYgdGhpcy5zZWFyY2hrZXkgJiYgdGhpcy5xdWVyeSAmJiB0aGlzLmRhdGF2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IGJpbmREaXNwbGF5TGFiZWxBcnJheSA9IFtdO1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoS2V5QXJyYXkgPSBzcGxpdCh0aGlzLnNlYXJjaGtleSwgJywnKTtcbiAgICAgICAgICAgIGxldCBkaXNwbGF5bGFiZWw7XG4gICAgICAgICAgICBpZiAodGhpcy5iaW5kZGlzcGxheWxhYmVsKSB7XG4gICAgICAgICAgICAgICAgYmluZERpc3BsYXlMYWJlbEFycmF5ID0gc3BsaXQodGhpcy5iaW5kZGlzcGxheWxhYmVsLCAnKycpO1xuICAgICAgICAgICAgICAgIGlmIChiaW5kRGlzcGxheUxhYmVsQXJyYXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5jbHVkZXMoYmluZERpc3BsYXlMYWJlbEFycmF5WzBdLCAnfCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IC9cXFsoLio/KVxcXS87XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5bGFiZWwgPSByZWdleC5leGVjKGJpbmREaXNwbGF5TGFiZWxBcnJheVswXSlbMV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5bGFiZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChiaW5kRGlzcGxheUxhYmVsQXJyYXkubGVuZ3RoID4gMSB8fCAoZGlzcGxheWxhYmVsICYmICFpbmNsdWRlcyhzZWFyY2hLZXlBcnJheSwgZGlzcGxheWxhYmVsKSlcbiAgICAgICAgICAgICAgICB8fCAodGhpcy5kaXNwbGF5ZXhwcmVzc2lvbiAmJiAhaW5jbHVkZXMoc2VhcmNoS2V5QXJyYXksIHRoaXMuZGlzcGxheWV4cHJlc3Npb24pKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhc3RRdWVyeSA9IHRoaXMucXVlcnk7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMuZ2V0RGF0YVNvdXJjZShxdWVyeSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVFdmVudChub2RlOiBIVE1MRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIGV2ZW50Q2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICBpZiAoIWluY2x1ZGVzKFsnYmx1cicsICdmb2N1cycsICdzZWxlY3QnLCAnc3VibWl0JywgJ2NoYW5nZSddLCBldmVudE5hbWUpKSB7XG4gICAgICAgICAgICBzdXBlci5oYW5kbGVFdmVudChub2RlLCBldmVudE5hbWUsIGV2ZW50Q2FsbGJhY2ssIGxvY2Fscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBoaWdobGlnaHQgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIGRyb3Bkb3duIG1hdGNoaW5nIHRoZSBxdWVyeS5cbiAgICBwcml2YXRlIGhpZ2hsaWdodChtYXRjaDogVHlwZWFoZWFkTWF0Y2gsIHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAvLyBoaWdobGlnaHQgb2YgY2hhcnMgd2lsbCB3b3JrIG9ubHkgd2hlbiBsYWJlbCBhcmUgc3RyaW5ncy5cbiAgICAgICAgICAgIChtYXRjaCBhcyBhbnkpLnZhbHVlID0gbWF0Y2guaXRlbS5sYWJlbC50b1N0cmluZygpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLmhpZ2hsaWdodChtYXRjaCwgcXVlcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaW5zZXJ0cyB0aGUgZWxlbWVudCBhdCB0aGUgaW5kZXggcG9zaXRpb25cbiAgICBwcml2YXRlIGluc2VydEF0SW5kZXgoaSkge1xuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRFbC5wcmVwZW5kKHRoaXMuJGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgJGVsQXRJbmRleCA9IHRoaXMucGFyZW50RWwuY2hpbGRyZW4oKS5lcShpKTtcbiAgICAgICAgICAgIGlmICgkZWxBdEluZGV4Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMucGFyZW50RWwuY2hpbGRyZW4oKS5lcShpKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuaW5zZXJ0QWZ0ZXIodGhpcy5wYXJlbnRFbC5jaGlsZHJlbigpLmVxKGkgLSAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgd2lkZ2V0IGlzIG9mIHR5cGUgYXV0b2NvbXBsZXRlIGluIG1vYmlsZSB2aWV3LyBhcHBcbiAgICBwdWJsaWMgaXNNb2JpbGVBdXRvQ29tcGxldGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdhdXRvY29tcGxldGUnICYmIGlzTW9iaWxlKCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHF1ZXJ5IGlzIGVudGVyZWQgaW4gdGhlIGlucHV0IGFuZCB0aGUgdmlldyBpcyBub3QgbW9iaWxlXG4gICAgcHVibGljIGlzUXVlcnlFbnRlcmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93Y2xlYXIgJiYgdGhpcy5zaG93Q2xvc2VidG47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkTW9yZURhdGEoaW5jcmVtZW50UGFnZT86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbmNyZWFzZSB0aGUgcGFnZSBudW1iZXIgYW5kIHRyaWdnZXIgZm9yY2UgcXVlcnkgdXBkYXRlXG4gICAgICAgIHRoaXMucGFnZSA9IGluY3JlbWVudFBhZ2UgPyB0aGlzLnBhZ2UgKyAxIDogdGhpcy5wYWdlO1xuXG4gICAgICAgIHRoaXMuaXNTY3JvbGxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IHRydWU7XG5cbiAgICAgICAgLy8gd2hlbiBpbnZva2luZyBuZXcgc2V0IG9mIHJlc3VsdHMsIHJlc2V0IHRoZSBsYXN0UXVlcnkuXG4gICAgICAgIGlmIChpbmNyZW1lbnRQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0UXVlcnkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0cmlnZ2VyIHRoZSB0eXBlYWhlYWQgY2hhbmdlIG1hbnVhbGx5IHRvIGZldGNoIHRoZSBuZXh0IHNldCBvZiByZXN1bHRzLlxuICAgICAgICB0aGlzLnR5cGVhaGVhZC5vbklucHV0KHtcbiAgICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0cmltKHRoaXMucXVlcnkpIHx8ICcwJyAvLyBkdW1teSBkYXRhIHRvIG5vdGlmeSB0aGUgb2JzZXJ2YWJsZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gb24gZm9jdXNvdXQsIHN1YnNjcmliZSB0byB0aGUgZGF0YXZhbHVlIGNoYW5nZXMgYWdhaW5cbiAgICBwcml2YXRlIG9uRm9jdXNPdXQoKSB7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgIC8vIHJlc2V0IHRoZSBwYWdlIHZhbHVlIG9uIGZvY3Vzb3V0LlxuICAgICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgICAgICAvLyBpZiBkb21VcGRhdGVkIGlzIHRydWUgdGhlbiBkbyBub3QgaGlkZSB0aGUgZHJvcGRvd24gaW4gdGhlIGZ1bGxzY3JlZW5cbiAgICAgICAgaWYgKCF0aGlzLl9kb21VcGRhdGVkICYmIHRoaXMuX2lzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzT3BlbiA9IGZhbHNlO1xuICAgICAgICAvLyBvbiBvdXRzaWRlIGNsaWNrLCB0eXBlYWhlYWQgaXMgaGlkZGVuLiBUbyBhdm9pZCB0aGlzLCB3aGVuIGZ1bGxzY3JlZW4gaXMgc2V0LCBvdmVycmlkZGluZyBpc0ZvY3VzZWQgZmxhZyBvbiB0aGUgdHlwZWFoZWFkIGNvbnRhaW5lclxuICAgICAgICBpZiAodGhpcy5fZG9tVXBkYXRlZCAmJiB0aGlzLnR5cGVhaGVhZCAmJiAodGhpcy50eXBlYWhlYWQgYXMgYW55KS5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICAodGhpcy50eXBlYWhlYWQgYXMgYW55KS5fY29udGFpbmVyLmlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uSW5wdXRDaGFuZ2UoJGV2ZW50KSB7XG4gICAgICAgIC8vIHJlc2V0IGFsbCB0aGUgcHJldmlvdXMgcGFnZSBkZXRhaWxzIGluIG9yZGVyIHRvIGZldGNoIG5ldyBzZXQgb2YgcmVzdWx0LlxuICAgICAgICB0aGlzLnJlc3VsdCA9IFtdO1xuICAgICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gdGhpcy5pc1VwZGF0ZU9uS2V5UHJlc3MoKTtcbiAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIHdoZW4gaW5wdXQgaXMgY2xlYXJlZCwgcmVzZXQgdGhlIGRhdGF2YWx1ZVxuICAgICAgICBpZiAodGhpcy5xdWVyeSA9PT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZEYXRhdmFsdWUodGhpcy5fbGFzdFF1ZXJ5KTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5fbW9kZWxCeVZhbHVlLCB7fSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2xlYXInLCB7ICRldmVudCB9KTtcblxuICAgICAgICAgICAgLy8gdHJpZ2dlciBvblN1Ym1pdCBvbmx5IHdoZW4gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGVhcmVkIG9mZiBhbmQgZG8gbm90IHRyaWdnZXIgd2hlbiB0YWIgaXMgcHJlc3NlZC5cbiAgICAgICAgICAgIGlmICgkZXZlbnQgJiYgJGV2ZW50LndoaWNoICE9PSA5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzdWJtaXQnLCB7ICRldmVudCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGludm9raW5nIGNoYW5nZSBldmVudCBvbiBldmVyeSBpbnB1dCB2YWx1ZSBjaGFuZ2UuXG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAkZXZlbnQ6ICRldmVudCxcbiAgICAgICAgICAgICAgICBuZXdWYWw6IHRoaXMuX21vZGVsQnlWYWx1ZSB8fCB0aGlzLnF1ZXJ5LFxuICAgICAgICAgICAgICAgIG9sZFZhbDogKHRoaXMgYXMgYW55KS5wcmV2RGF0YXZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9ICh0aGlzLnF1ZXJ5ICE9PSAnJyk7XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlcmVkIGZvciBlbnRlciBldmVudFxuICAgIHByaXZhdGUgaGFuZGxlRW50ZXJFdmVudCgkZXZlbnQpIHtcbiAgICAgICAgLy8gc3VibWl0IGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZXJlIGlzIG5vIHNlYXJjaCByZXN1bHRzXG4gICAgICAgIGlmICghZ2V0KHRoaXMudHlwZWFoZWFkLCAnbWF0Y2hlcy5sZW5ndGgnKSkge1xuICAgICAgICAgICAgdGhpcy5vblNlYXJjaFNlbGVjdCgkZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFRyaWdnZXJyZWQgd2hlbiB0eXBlYWhlYWQgb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgIHByaXZhdGUgb25TZWFyY2hTZWxlY3QoJGV2ZW50OiBFdmVudCkge1xuICAgICAgICBsZXQgaXRlbTtcbiAgICAgICAgLy8gV01TLTIyNTMzOiBCZWZvcmUgYWRkaW5nIGFjdGl2ZSB0eXBlYWhlYWQgZWwsIGNoZWNrIGlmIHRoZSBlbnRlcmVkIHF1ZXJ5IG1hdGNoZXMgd2l0aCB0aGUgYWN0aXZlIGVsIG9yIG5vdFxuICAgICAgICBjb25zdCBpc1F1ZXJ5TWF0Y2ggPSB0aGlzLnR5cGVhaGVhZENvbnRhaW5lcj8uYWN0aXZlPy52YWx1ZSA9PT0gdGhpcy5xdWVyeTtcblxuICAgICAgICBpZiAodGhpcy50eXBlYWhlYWRDb250YWluZXIgJiYgdGhpcy50eXBlYWhlYWRDb250YWluZXIuYWN0aXZlICYmIGlzUXVlcnlNYXRjaCkge1xuICAgICAgICAgICAgaXRlbSA9IHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLmFjdGl2ZS5pdGVtO1xuICAgICAgICB9XG4gICAgICAgICRldmVudCA9IHRoaXMuZXZlbnREYXRhKCRldmVudCwgaXRlbSB8fCB7fSk7XG5cbiAgICAgICAgLy8gc2VhcmNoT24gaXMgc2V0IGFzIG9uQnRuQ2xpY2ssIHRoZW4gaW52b2tlIHRoZSBzZWFyY2ggYXBpIGNhbGwgbWFudWFsbHkuXG4gICAgICAgIGlmICghdGhpcy5pc1VwZGF0ZU9uS2V5UHJlc3MoKSkge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IHRydWU7XG4gICAgICAgICAgICAvLyB0cmlnZ2VyIHRoZSB0eXBlYWhlYWQgY2hhbmdlIG1hbnVhbGx5IHRvIGZldGNoIHRoZSBuZXh0IHNldCBvZiByZXN1bHRzLlxuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQub25JbnB1dCh7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnF1ZXJ5IC8vIGR1bW15IGRhdGEgdG8gbm90aWZ5IHRoZSBvYnNlcnZhYmxlc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdoZW4gbWF0Y2hlcyBhcmUgYXZhaWxhYmxlLlxuICAgICAgICBpZiAodGhpcy50eXBlYWhlYWRDb250YWluZXIgJiYgdGhpcy5saUVsZW1lbnRzLmxlbmd0aCAmJiBpc1F1ZXJ5TWF0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLnNlbGVjdEFjdGl2ZU1hdGNoKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSB0aGlzLnF1ZXJ5O1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzdWJtaXQnLCB7ICRldmVudCB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW52b2tlT25CZWZvcmVTZXJ2aWNlQ2FsbChpbnB1dERhdGEpIHtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVzZXJ2aWNlY2FsbCcsIHsgaW5wdXREYXRhIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Ecm9wZG93bk9wZW4oKSB7XG4gICAgICAgIGlmICh0aGlzLmNsZWFyRGF0YSkge1xuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldHRpbmcgdGhlIHVsRWxlbWVudHMsIGxpRWxlbWVudCBvbiB0eXBlYWhlYWRDb250YWluZXIuXG4gICAgICAgIC8vIGFzIHdlIGFyZSB1c2luZyBjdXN0b21PcHRpb24gdGVtcGxhdGUsIGxpRWxlbWVudHMgYXJlIG5vdCBhdmFpbGFibGUgb24gdHlwZWFoZWFkQ29udGFpbmVyIHNvIGFwcGVuZCB0aGVtIGV4cGxpY2l0bHkuXG4gICAgICAgIGNvbnN0IGZuID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkQ29udGFpbmVyID0gdGhpcy50eXBlYWhlYWQuX2NvbnRhaW5lciB8fCAodGhpcy50eXBlYWhlYWQgYXMgYW55KS5fdHlwZWFoZWFkLmluc3RhbmNlO1xuICAgICAgICAgICAgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyIGFzIGFueSkubGlFbGVtZW50cyA9IHRoaXMubGlFbGVtZW50cztcbiAgICAgICAgICAgICh0aGlzLnR5cGVhaGVhZENvbnRhaW5lciBhcyBhbnkpLnVsRWxlbWVudCA9IHRoaXMudWxFbGVtZW50O1xuICAgICAgICAgICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24oJCgndHlwZWFoZWFkLWNvbnRhaW5lcicpLCB0aGlzLm5hdGl2ZUVsZW1lbnQsICh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLl90eXBlYWhlYWQsICQoJ3R5cGVhaGVhZC1jb250YWluZXIgLmRyb3Bkb3duLW1lbnUnKSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm4oKTtcblxuICAgICAgICAvLyBvcGVuIGZ1bGwtc2NyZWVuIHNlYXJjaCB2aWV3XG4gICAgICAgIGlmICh0aGlzLmlzTW9iaWxlQXV0b0NvbXBsZXRlKCkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZnVsbC1zY3JlZW4nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyTW9iaWxlQXV0b0NvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkcm9wZG93bkVsID0gdGhpcy5kcm9wZG93bkVsLmNsb3Nlc3QoJ3R5cGVhaGVhZC1jb250YWluZXInKTtcblxuICAgICAgICAgICAgZHJvcGRvd25FbC5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50LmZpbmQoJ2lucHV0JykuZmlyc3QoKSk7XG4gICAgICAgICAgICBjb25zdCBzY3JlZW5IZWlnaHQgPSB0aGlzLiRlbGVtZW50LmNsb3Nlc3QoJy5hcHAtY29udGVudCcpLmhlaWdodCgpO1xuICAgICAgICAgICAgZHJvcGRvd25FbC5jc3MoeyBwb3NpdGlvbjogJ3JlbGF0aXZlJywgdG9wOiAwLCBoZWlnaHQ6IHNjcmVlbkhlaWdodCArICdweCcgfSk7XG4gICAgICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9IHRoaXMucXVlcnkgJiYgdGhpcy5xdWVyeSAhPT0gJyc7XG5cbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSkgJiYgIXRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJTZWFyY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0TmV4dCgpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLm1hdGNoZXM7XG5cbiAgICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBtYXRjaGVzLmluZGV4T2YodGhpcy50eXBlYWhlYWRDb250YWluZXIuYWN0aXZlKTtcblxuICAgICAgICAvLyBvbiBrZXlkb3duLCBpZiBzY3JvbGwgaXMgYXQgdGhlIGJvdHRvbSBhbmQgbmV4dCBwYWdlIHJlY29yZHMgYXJlIGF2YWlsYWJsZSwgZmV0Y2ggbmV4dCBwYWdlIGl0ZW1zLlxuICAgICAgICBpZiAoIXRoaXMuX2xvYWRpbmdJdGVtcyAmJiAhdGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSAmJiBpbmRleCArIDEgPiBtYXRjaGVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIC8vIGluZGV4IGlzIHNhdmVkIGluIG9yZGVyIHRvIHNlbGVjdCB0aGUgbGFzdFNlbGVjdGVkIGl0ZW0gaW4gdGhlIGRyb3Bkb3duIGFmdGVyIGZldGNoaW5nIG5leHQgcGFnZSBpdGVtcy5cbiAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmVEYXRhKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMYXN0QWN0aXZlTWF0Y2hBc1NlbGVjdGVkKCkge1xuICAgICAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWRJbmRleCkge1xuICAgICAgICAgICAgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyIGFzIGFueSkuX2FjdGl2ZSA9IHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLm1hdGNoZXNbdGhpcy5sYXN0U2VsZWN0ZWRJbmRleF07XG4gICAgICAgICAgICB0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5uZXh0QWN0aXZlTWF0Y2goKTtcbiAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRyaWdnZXJTZWFyY2goKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlIHx8ICF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmdWxsLXNjcmVlbicpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHlwZUFoZWFkRHJvcERvd24gPSB0aGlzLmRyb3Bkb3duRWw7XG4gICAgICAgIGNvbnN0ICRsYXN0SXRlbSA9IHR5cGVBaGVhZERyb3BEb3duLmZpbmQoJ2xpJykubGFzdCgpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGxhc3QgaXRlbSBpcyBub3QgYmVsb3cgdGhlIGZ1bGwgc2NyZWVuXG4gICAgICAgIGlmICgkbGFzdEl0ZW0ubGVuZ3RoICYmIHR5cGVBaGVhZERyb3BEb3duLmxlbmd0aCAmJiAodHlwZUFoZWFkRHJvcERvd24uaGVpZ2h0KCkgKyB0eXBlQWhlYWREcm9wRG93bi5wb3NpdGlvbigpLnRvcCA+ICRsYXN0SXRlbS5oZWlnaHQoKSArICRsYXN0SXRlbS5wb3NpdGlvbigpLnRvcCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmVEYXRhKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1VwZGF0ZU9uS2V5UHJlc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaG9uID09PSAndHlwaW5nJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlYm91bmNlRGVmYXVsdFF1ZXJ5KGRhdGEpIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFF1ZXJ5SW52b2tlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2V0RGF0YVNvdXJjZShkYXRhLCB0cnVlKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RRdWVyeSA9IHRoaXMucXVlcnkgPSB0aGlzLnF1ZXJ5TW9kZWxbMF0ubGFiZWwgfHwgJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gdGhpcy5xdWVyeU1vZGVsWzBdLnZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsQnlLZXkgPSB0aGlzLnF1ZXJ5TW9kZWxbMF0ua2V5O1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gKHRoaXMucXVlcnkgIT09ICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jbGVhckRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0KCh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLCAnX3R5cGVhaGVhZC5pc1Nob3duJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVCeURhdGF2YWx1ZShkYXRhKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQnlEYXRhc2V0KGRhdGEpO1xuICAgICAgICB0aGlzLnVwZGF0ZUJ5RGF0YVNvdXJjZShkYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJ5RGF0YVNvdXJjZShkYXRhKSB7XG4gICAgICAgIC8vIHZhbHVlIGlzIHByZXNlbnQgYnV0IHRoZSBjb3JyZXNwb25kaW5nIGtleSBpcyBub3QgZm91bmQgdGhlbiBmZXRjaCBuZXh0IHNldFxuICAgICAgICAvLyBtb2RlbEJ5S2V5IHdpbGwgYmUgc2V0IG9ubHkgd2hlbiBkYXRhdmFsdWUgaXMgYXZhaWxhYmxlIGluc2lkZSB0aGUgbG9jYWxEYXRhIG90aGVyd2lzZSBtYWtlIGEgTi93IGNhbGwuXG4gICAgICAgIGlmIChpc0RlZmluZWQoZGF0YSkgJiYgIWlzT2JqZWN0KGRhdGEpICYmIHRoaXMuZGF0YXNvdXJjZSAmJiAhaXNEZWZpbmVkKHRoaXMuX21vZGVsQnlLZXkpICYmIHRoaXMuZGF0YWZpZWxkICE9PSBBTExGSUVMRFMpIHtcbiAgICAgICAgICAgIC8vIEF2b2lkIG1ha2luZyBkZWZhdWx0IHF1ZXJ5IGlmIHF1ZXJ5TW9kZWwgYWxyZWFkeSBleGlzdHMuXG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXMucXVlcnlNb2RlbCkgJiYgIWlzRW1wdHkodGhpcy5xdWVyeU1vZGVsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YXZhbHVlRnJvbVF1ZXJ5TW9kZWwoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1ha2UgZGVmYXVsdCBxdWVyeSBjYWxsIG9ubHkgd2hlbiBkYXRhc291cmNlIHN1cHBvcnRzIENSVUQgKGxpdmUgdmFyaWFibGUpLlxuICAgICAgICAgICAgaWYgKCF0aGlzLl9kZWZhdWx0UXVlcnlJbnZva2VkICYmIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLlNVUFBPUlRTX0NSVUQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWJvdW5jZURlZmF1bHRRdWVyeShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHVwZGF0ZXMgdGhlIG1vZGVsIHZhbHVlIHVzaW5nIHF1ZXJ5TW9kZWxcbiAgICBwcml2YXRlIHVwZGF0ZURhdGF2YWx1ZUZyb21RdWVyeU1vZGVsKCkge1xuICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXMucXVlcnlNb2RlbCkpIHtcbiAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IGlzQXJyYXkodGhpcy5xdWVyeU1vZGVsKSA/ICh0aGlzLnF1ZXJ5TW9kZWxbMF0gYXMgRGF0YVNldEl0ZW0pLnZhbHVlIDogdGhpcy5xdWVyeU1vZGVsO1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeUtleSA9IGlzQXJyYXkodGhpcy5xdWVyeU1vZGVsKSA/ICh0aGlzLnF1ZXJ5TW9kZWxbMF0gYXMgRGF0YVNldEl0ZW0pLmtleSA6IHRoaXMucXVlcnlNb2RlbDtcbiAgICAgICAgICAgIHRoaXMudG9CZVByb2Nlc3NlZERhdGF2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQnlEYXRhc2V0KGRhdGE6IGFueSkge1xuICAgICAgICAvLyBkZWZhdWx0IHF1ZXJ5IGlzIGFscmVhZHkgaW52b2tlZCB0aGVuIGRvIG5vdCBtYWtlIG90aGVyIGRlZmF1bHQgcXVlcnkgY2FsbC5cbiAgICAgICAgLy8gRm9yIGxvY2FsIHNlYXJjaCBpLmUuIHNlYXJjaGtleSBpcyB1bmRlZmluZWQsIGRvIG5vdCByZXR1cm4sIHZlcmlmeSB0aGUgZGF0YXZhbHVlIGFnYWluc3QgdGhlIGRhdGFzZXRJdGVtcyAuXG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0UXVlcnlJbnZva2VkICYmIHRoaXMuc2VhcmNoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gZmluZCh0aGlzLmRhdGFzZXRJdGVtcywgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoaXNPYmplY3QoaXRlbS52YWx1ZSkgPyBpc0VxdWFsKGl0ZW0udmFsdWUsIGRhdGEpIDogKHRvU3RyaW5nKGl0ZW0udmFsdWUpKS50b0xvd2VyQ2FzZSgpID09PSAodG9TdHJpbmcoZGF0YSkpLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGRlZmF1bHQgb25seSB3aGVuIGl0IGlzIGF2YWlsYWJsZSBpbiBkYXRhc2V0LlxuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSBbc2VsZWN0ZWRJdGVtXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGFmaWVsZCA9PT0gQUxMRklFTERTICYmIGlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YShleHRyYWN0RGF0YUFzQXJyYXkoZGF0YSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVzZXR0aW5nIHRoZSBxdWVyeU1vZGVsIG9ubHkgd2hlbiBwcmV2RGF0YXZhbHVlIGlzIGVxdWFsIHRvIGRhdGFcbiAgICAgICAgICAgIGlmICgodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWUgIT09IGRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZURhdGF2YWx1ZUZyb21RdWVyeU1vZGVsKCk7XG5cbiAgICAgICAgLy8gU2hvdyB0aGUgbGFiZWwgdmFsdWUgb24gaW5wdXQuXG4gICAgICAgIHRoaXMuX2xhc3RRdWVyeSA9IHRoaXMucXVlcnkgPSBpc0RlZmluZWQodGhpcy5xdWVyeU1vZGVsKSAmJiB0aGlzLnF1ZXJ5TW9kZWwubGVuZ3RoID8gZ2V0KHRoaXMucXVlcnlNb2RlbFswXSwgJ2xhYmVsJykgOiAnJztcbiAgICAgICAgdGhpcy5zaG93Q2xvc2VidG4gPSAodGhpcy5xdWVyeSAhPT0gJycpO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGhhdmUgbGFzdCBzZWFyY2ggcmVzdWx0cyB0aGVuIG9wZW4gZHJvcGRvd24gb24gZm9jdXNcbiAgICBwcml2YXRlIGhhbmRsZUZvY3VzKCRldmVudCkge1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnc2VhcmNoJyAmJiB0aGlzLnF1ZXJ5ID09PSB0aGlzLl9sYXN0UXVlcnkgJiYgdGhpcy5fbGFzdFJlc3VsdCkge1xuICAgICAgICAgICAgKHRoaXMudHlwZWFoZWFkIGFzIGFueSkua2V5VXBFdmVudEVtaXR0ZXIuZW1pdCh0aGlzLnF1ZXJ5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBub3RpZnlTdWJzY3JpYmVyKCkge1xuICAgICAgICBjb25zdCBwYXJlbnRFbCA9ICQodGhpcy5uYXRpdmVFbGVtZW50KS5jbG9zZXN0KCcuYXBwLWNvbXBvc2l0ZS13aWRnZXQuY2FwdGlvbi1mbG9hdGluZycpO1xuICAgICAgICBpZiAocGFyZW50RWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hcHAubm90aWZ5KCdjYXB0aW9uUG9zaXRpb25BbmltYXRlJywge2Rpc3BsYXlWYWw6IHRydWUsIG5hdGl2ZUVsOiBwYXJlbnRFbH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIHByb21pc2UgdGhhdCBwcm92aWRlcyB0aGUgZmlsdGVyZWQgZGF0YSBmcm9tIHRoZSBkYXRhc291cmNlLlxuICAgIHB1YmxpYyBnZXREYXRhU291cmNlKHF1ZXJ5OiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nLCBzZWFyY2hPbkRhdGFGaWVsZD86IGJvb2xlYW4sIG5leHRJdGVtSW5kZXg/OiBudW1iZXIpOiBQcm9taXNlPERhdGFTZXRJdGVtW10+IHtcbiAgICAgICAgLy8gRm9yIGRlZmF1bHQgcXVlcnksIHNlYXJjaE9uRGF0YUZpZWxkIGlzIHNldCB0byB0cnVlLCB0aGVuIGRvIG5vdCBtYWtlIGEgbi93IGNhbGwgd2hlbiBkYXRhZmllbGQgaXMgQUxMRklFTERTXG4gICAgICAgIGlmIChzZWFyY2hPbkRhdGFGaWVsZCAmJiB0aGlzLmRhdGFmaWVsZCA9PT0gQUxMRklFTERTKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yIGRlZmF1bHQgZGF0YXZhbHVlLCBzZWFyY2gga2V5IGFzIHRvIGJlIG9uIGRhdGFmaWVsZCB0byBnZXQgdGhlIGRlZmF1bHQgZGF0YSBmcm9tIHRoZSBmaWx0ZXIgY2FsbC5cbiAgICAgICAgY29uc3QgZGF0YUNvbmZpZzogSURhdGFQcm92aWRlckNvbmZpZyA9IHtcbiAgICAgICAgICAgIGRhdGFzZXQ6IHRoaXMuZGF0YXNldCA/IGNvbnZlcnREYXRhVG9PYmplY3QodGhpcy5kYXRhc2V0KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGJpbmRkYXRhc2V0OiB0aGlzLmJpbmRkYXRhc2V0LFxuICAgICAgICAgICAgZGF0YXNvdXJjZTogdGhpcy5kYXRhc291cmNlLFxuICAgICAgICAgICAgZGF0YWZpZWxkOiB0aGlzLmRhdGFmaWVsZCxcbiAgICAgICAgICAgIGhhc0RhdGE6IHRoaXMuZGF0YXNldCAmJiB0aGlzLmRhdGFzZXQubGVuZ3RoLFxuICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5LFxuICAgICAgICAgICAgaXNMb2NhbEZpbHRlcjogIXRoaXMuc2VhcmNoa2V5LFxuICAgICAgICAgICAgc2VhcmNoS2V5OiBzZWFyY2hPbkRhdGFGaWVsZCA/IHRoaXMuZGF0YWZpZWxkIDogdGhpcy5zZWFyY2hrZXksXG4gICAgICAgICAgICAvLyBkZWZhdWx0IHNlYXJjaCBjYWxsIG1hdGNoIG1vZGUgc2hvdWxkIGJlIHN0YXJ0aWdub3JlY2FzZVxuICAgICAgICAgICAgbWF0Y2hNb2RlOiBzZWFyY2hPbkRhdGFGaWVsZCA/ICdzdGFydGlnbm9yZWNhc2UnIDogdGhpcy5tYXRjaG1vZGUsXG4gICAgICAgICAgICBjYXNlc2Vuc2l0aXZlOiB0aGlzLmNhc2VzZW5zaXRpdmUsXG4gICAgICAgICAgICBpc2Zvcm1maWVsZDogdGhpcy5pc2Zvcm1maWVsZCxcbiAgICAgICAgICAgIG9yZGVyYnk6IHRoaXMub3JkZXJieSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLmxpbWl0LFxuICAgICAgICAgICAgcGFnZXNpemU6IHRoaXMucGFnZXNpemUsXG4gICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICBvbkJlZm9yZXNlcnZpY2VjYWxsOiB0aGlzLmludm9rZU9uQmVmb3JlU2VydmljZUNhbGwuYmluZCh0aGlzKVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGFvcHRpb25zKSB7XG4gICAgICAgICAgICBkYXRhQ29uZmlnLmRhdGFvcHRpb25zID0gdGhpcy5kYXRhb3B0aW9ucztcbiAgICAgICAgICAgIGRhdGFDb25maWcudmlld1BhcmVudCA9IHRoaXMudmlld1BhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVByb3ZpZGVyLmZpbHRlcihkYXRhQ29uZmlnKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAvLyByZXNwb25zZSBmcm9tIGRhdGFQcm92aWRlciByZXR1cm5zIGFsd2F5cyBkYXRhIG9iamVjdC5cbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlLmRhdGEgfHwgcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgLy8gZm9yIHNlcnZpY2UgdmFyaWFibGUsIHVwZGF0aW5nIHRoZSBkYXRhc2V0IG9ubHkgaWYgaXQgaXMgbm90IGRlZmluZWQgb3IgZW1wdHlcbiAgICAgICAgICAgICAgICBpZiAoKCFpc0RlZmluZWQodGhpcy5kYXRhc2V0KSB8fCAhdGhpcy5kYXRhc2V0Lmxlbmd0aCkgJiYgdGhpcy5kYXRhUHJvdmlkZXIudXBkYXRlRGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzZXQgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIuaGFzTW9yZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhc2V0ID0gdGhpcy5mb3JtYXR0ZWREYXRhc2V0LmNvbmNhdChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhc2V0ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gZXhwbGljaXRseSBzZXR0aW5nIHRoZSBvcHRpb25zbGltaXQgYXMgdGhlIG1hdGNoZXMgbW9yZSB0aGFuIDIwIHdpbGwgYmUgaWdub3JlZCBpZiBvcHRpb25zbGltaXQgaXMgbm90IHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtYXR0ZWREYXRhc2V0Lmxlbmd0aCA+IDIwICYmICFpc0RlZmluZWQodGhpcy5saW1pdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQudHlwZWFoZWFkT3B0aW9uc0xpbWl0ID0gdGhpcy5mb3JtYXR0ZWREYXRhc2V0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBJbiBtb2JpbGUsIHRyaWdnZXIgdGhlIHNlYXJjaCBieSBkZWZhdWx0IHVudGlsIHRoZSByZXN1bHRzIGhhdmUgaGVpZ2h0IHVwdG8gcGFnZSBoZWlnaHQuIE90aGVyIHJlc3VsdHMgY2FuIGJlIGZldGNoZWQgYnkgc2Nyb2xsaW5nXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc09wZW4gJiYgdGhpcy5pc01vYmlsZUF1dG9Db21wbGV0ZSgpICYmICFpc1VuZGVmaW5lZCh0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlKSAmJiAhdGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJTZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YSh0aGlzLmZvcm1hdHRlZERhdGFzZXQsIG5leHRJdGVtSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVzdWx0IGNvbnRhaW5zIHRoZSBkYXRhZmllbGQgdmFsdWVzLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdCA9IG1hcCh0cmFuc2Zvcm1lZERhdGEsICd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZERhdGE7XG4gICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICApLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1Njcm9sbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIChkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExhc3RBY3RpdmVNYXRjaEFzU2VsZWN0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMzApKSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2Nyb2xsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gV2hlbiBubyByZXN1bHQgaXMgZm91bmQsIHNldCB0aGUgZGF0YXZhbHVlIHRvIHVuZGVmaW5lZC5cbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSAocXVlcnkgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gb24gZm9jdXNvdXQgaS5lLiBvbiBvdGhlciB3aWRnZXQgZm9jdXMsIGlmIG4vdyBpcyBwZW5kaW5nIGxvYWRpbmcgaWNvbiBpcyBzaG93biwgd2hlbiBkYXRhIGlzIGF2YWlsYWJsZSB0aGVuIGRyb3Bkb3duIGlzIHNob3duIGFnYWluLlxuICAgICAgICAgICAgICAgIC8vIG9uIHVuc3Vic2NyaWJpbmcgZG8gbm90IHNob3cgdGhlIHJlc3VsdHMuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Vuc3Vic2NyaWJlRHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RSZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHBhcmVudCBjb250ZXh0IGkuZS4gUGFnZSBjb250ZXh0IGFuZCBub3QgcGFyZW50IGNvbXBvbmVudCdzIGNvbnRleHQuXG4gICAgcHJpdmF0ZSBnZXRDb250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgaWYgKGNvbnRleHQgJiYgZ2V0KGNvbnRleHQsICd3aWRnZXQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29udGV4dChjb250ZXh0LnZpZXdQYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUcmFuc2Zvcm1lZERhdGEoZGF0YTogYW55LCBpdGVtSW5kZXg/OiBudW1iZXIsIGlzY3VzdG9tPzogYm9vbGVhbik6IERhdGFTZXRJdGVtW10ge1xuICAgICAgICBpZiAoaXNEZWZpbmVkKGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICAgIGl0ZW1JbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhID0gdHJhbnNmb3JtRm9ybURhdGEoXG4gICAgICAgICAgICB0aGlzLmdldENvbnRleHQodGhpcy52aWV3UGFyZW50KSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB0aGlzLmRhdGFmaWVsZCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHRoaXMuZGlzcGxheWxhYmVsIHx8IHRoaXMuZGlzcGxheWZpZWxkLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByOiBpc2N1c3RvbSA/ICcnIDogdGhpcy5kaXNwbGF5ZXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICBiaW5kRGlzcGxheUV4cHI6IGlzY3VzdG9tID8gJycgOiB0aGlzLmJpbmRkaXNwbGF5bGFiZWwsXG4gICAgICAgICAgICAgICAgYmluZERpc3BsYXlJbWdTcmM6IHRoaXMuYmluZGRpc3BsYXlpbWFnZXNyYyxcbiAgICAgICAgICAgICAgICBkaXNwbGF5SW1nU3JjOiB0aGlzLmRpc3BsYXlpbWFnZXNyY1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGl0ZW1JbmRleCxcbiAgICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGdldFVuaXFPYmpzQnlEYXRhRmllbGQodHJhbnNmb3JtZWREYXRhLCB0aGlzLmRhdGFmaWVsZCwgdGhpcy5kaXNwbGF5ZmllbGQgfHwgdGhpcy5kaXNwbGF5bGFiZWwsIHRvQm9vbGVhbih0aGlzLmFsbG93ZW1wdHkpKTtcbiAgICB9XG5cbiAgICAvLyBPcHRpb25zTGlzdFRlbXBsYXRlIGxpc3RlbnMgdG8gdGhlIHNjcm9sbCBldmVudCBhbmQgdHJpZ2dlcnMgdGhpcyBmdW5jdGlvbi5cbiAgICBwdWJsaWMgb25TY3JvbGwoJHNjcm9sbEVsOiBFbGVtZW50LCBldnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRvdGFsSGVpZ2h0ID0gJHNjcm9sbEVsLnNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgIGNsaWVudEhlaWdodCA9ICRzY3JvbGxFbC5jbGllbnRIZWlnaHQ7XG5cbiAgICAgICAgLy8gSWYgc2Nyb2xsIGlzIGF0IHRoZSBib3R0b20gYW5kIG5vIHJlcXVlc3QgaXMgaW4gcHJvZ3Jlc3MgYW5kIG5leHQgcGFnZSByZWNvcmRzIGFyZSBhdmFpbGFibGUsIGZldGNoIG5leHQgcGFnZSBpdGVtcy5cbiAgICAgICAgaWYgKCF0aGlzLl9sb2FkaW5nSXRlbXMgJiYgIXRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UgJiYgKCRzY3JvbGxFbC5zY3JvbGxUb3AgKyBjbGllbnRIZWlnaHQgPj0gdG90YWxIZWlnaHQpKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb3JlRGF0YSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICBpZiAoIWlzRGVmaW5lZCh0aGlzLm1pbmNoYXJzKSkge1xuICAgICAgICAgICAgLy8gZm9yIGF1dG9jb21wbGV0ZSBzZXQgdGhlIG1pbmNoYXJzIHRvIDBcbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdhdXRvY29tcGxldGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5taW5jaGFycyA9IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubWluY2hhcnMgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IHRoaXMuaXNVcGRhdGVPbktleVByZXNzKCk7XG5cbiAgICAgICAgLy8gYnkgZGVmYXVsdCBmb3IgYXV0b2NvbXBsZXRlIGRvIG5vdCBzaG93IHRoZSBzZWFyY2ggaWNvblxuICAgICAgICAvLyBieSBkZWZhdWx0IHNob3cgdGhlIHNlYXJjaGljb24gZm9yIHR5cGUgPSBzZWFyY2hcbiAgICAgICAgdGhpcy5zaG93c2VhcmNoaWNvbiA9IGlzRGVmaW5lZCh0aGlzLnNob3dzZWFyY2hpY29uKSA/IHRoaXMuc2hvd3NlYXJjaGljb24gOiAodGhpcy50eXBlID09PSAnc2VhcmNoJyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG5cbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCwgdGhpcyk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyVGFyZ2V0ID0gZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3ModGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICBjb25zdCBzZWFyY2hJbnB1dEVsID0gJCgnLmFwcC1zZWFyY2gtaW5wdXQnKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0RWwpIHtcbiAgICAgICAgICAgIHNlYXJjaElucHV0RWwucmVtb3ZlQXR0cignYXJpYS1leHBhbmRlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudERhdGEoJGV2ZW50LCBpdGVtKSB7XG4gICAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgICAgICRldmVudFsnZGF0YSddID0ge1xuICAgICAgICAgICAgICAgIGl0ZW0gIDogaXRlbS5kYXRhT2JqZWN0LFxuICAgICAgICAgICAgICAgIG1vZGVsIDogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICBsYWJlbCA6IGl0ZW0ubGFiZWwsXG4gICAgICAgICAgICAgICAgcXVlcnkgOiB0aGlzLnF1ZXJ5XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICRldmVudDtcbiAgICB9XG5cbiAgICAvLyB0cmlnZ2VyZWQgb24gc2VsZWN0IG9uIG9wdGlvbiBmcm9tIHRoZSBsaXN0LiBTZXQgdGhlIHF1ZXJ5TW9kZWwsIHF1ZXJ5IGFuZCBtb2RlbEJ5S2V5IGZyb20gdGhlIG1hdGNoZWQgaXRlbS5cbiAgICBwdWJsaWMgdHlwZWFoZWFkT25TZWxlY3QobWF0Y2g6IFR5cGVhaGVhZE1hdGNoLCAkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBtYXRjaC5pdGVtO1xuICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSBpdGVtO1xuICAgICAgICBpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5xdWVyeSA9IGl0ZW0ubGFiZWw7XG4gICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gKHRoaXMucXVlcnkgIT09ICcnKTtcbiAgICAgICAgJGV2ZW50ID0gJGV2ZW50IHx8IHRoaXMuJHR5cGVhaGVhZEV2ZW50O1xuXG4gICAgICAgIC8vIEFzIGl0ZW0ua2V5IGNhbiB2YXJ5IGZyb20ga2V5IGluIHRoZSBkYXRhc2V0SXRlbXNcbiAgICAgICAgdGhpcy5fbW9kZWxCeUtleSA9IGl0ZW0ua2V5O1xuICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBpdGVtLnZhbHVlO1xuXG4gICAgICAgICRldmVudCA9IHRoaXMuZXZlbnREYXRhKCRldmVudCwgaXRlbSk7XG5cbiAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgJGV2ZW50IHx8IHt9KTtcbiAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhcmlhYmxlIGJvdW5kIHRvIGRlZmF1bHQgdmFsdWUgYXMgaW52b2tlT25DaGFuZ2UgaXMgbm90IHVwZGF0aW5nIHRoZSB2YXJpYWJsZS5cbiAgICAgICAgaWYgKHRoaXMuZGF0YXZhbHVlICE9PSAodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQm91bmRWYXJpYWJsZSh0aGlzLmRhdGF2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2Z1bGwtc2NyZWVuJykpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VTZWFyY2goKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdCcsIHsgJGV2ZW50LCBzZWxlY3RlZFZhbHVlOiB0aGlzLmRhdGF2YWx1ZSB9KTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzdWJtaXQnLCB7ICRldmVudCB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVByZXZEYXRhdmFsdWUodGhpcy5kYXRhdmFsdWUpO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92OiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmFja3dhcmQgY29tcGF0YWJpbGl0eSBmcm9tIDEwLjMuMSB0byAxMC4zLjJcbiAgICAgICAgLy8gMTAuMy4xIHdlIGhhZCBkaXNwbGF5bGFiZWwgYXMgbW9kYWwgdmFsdWVcbiAgICAgICAgLy8gRnJvbSAxMC4zLjIgb253b3JkcyB3ZSB3aWxsIGJlIGhhdmluZyBkaXNwbGF5ZXhwcmVzaW9uIGFzIG1vZGFsIHZhbHVlXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdhdXRvY29tcGxldGUnICYmIGtleSA9PT0gJ2Rpc3BsYXlsYWJlbCcgJiYgdGhpcy5kaXNwbGF5bGFiZWwgJiYgKCF0aGlzLmRpc3BsYXlleHByZXNzaW9uIHx8ICh0aGlzLmRpc3BsYXlleHByZXNzaW9uICYmICF0aGlzLmRhdGFzb3VyY2UpKSkgIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWV4cHJlc3Npb24gPSB0aGlzLmRpc3BsYXlsYWJlbDtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWxhYmVsID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2hlbiBkYXRhb3B0aW9ucyBhcmUgcHJvdmlkZWQgYW5kIHRoZXJlIGlzIG5vIGRpc3BsYXlsYWJlbCBnaXZlbiB0aGVuIGRpc3BsYXlsYWJlbCBpcyBzZXQgYXMgdGhlIHJlbGF0ZWRmaWVsZFxuICAgICAgICBpZiAoa2V5ID09PSAnZGlzcGxheWxhYmVsJyAmJiB0aGlzLmRhdGFvcHRpb25zICYmIHRoaXMuYmluZGRpc3BsYXlsYWJlbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5xdWVyeSA9IGdldCh0aGlzLl9tb2RlbEJ5VmFsdWUsIG52KSB8fCB0aGlzLl9tb2RlbEJ5VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGVuIHNlYXJjaCBpcyBkaXNhYmxlZCwgZG8gbm90IGxvYWQgYW55IG1vcmUgZGF0YSBvciBqdXN0IGNsZWFyIHRoZSBkYXRhIHRoYXQgaXMgYWxyZWFkeSBpbiBwcm9jZXNzIG9yIGxvYWRlZC5cbiAgICAgICAgaWYgKGtleSA9PT0gJ2Rpc2FibGVkJykge1xuICAgICAgICAgICAgaWYgKG52ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJEYXRhID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJEYXRhID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0KCh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLCAnX3R5cGVhaGVhZC5pc1Nob3duJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjY3VzdG9tSXRlbVRlbXBsYXRlIGxldC1tb2RlbD1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiIGxldC1xdWVyeT1cInF1ZXJ5XCIgbGV0LW1hdGNoPVwibWF0Y2hcIj5cbiAgICA8IS0tIERlZmF1bHQgaXRlbSB0ZW1wbGF0ZSAtLT5cbiAgICA8YSAqbmdJZj1cIiFjb250ZW50XCI+XG4gICAgICAgIDxpbWcgKm5nSWY9XCJtb2RlbC5pbWdTcmNcIiBbc3JjXT1cIm1vZGVsLmltZ1NyY1wiIGFsdD1cIlNlYXJjaFwiIFtzdHlsZS53aWR0aF09XCJpbWFnZXdpZHRoXCI+XG4gICAgICAgIDxzcGFuIFt0aXRsZV09XCJtb2RlbC5sYWJlbFwiIFtpbm5lckh0bWxdPVwiaGlnaGxpZ2h0KG1hdGNoLCBxdWVyeSkgfHwgbW9kZWwubGFiZWxcIj48L3NwYW4+XG4gICAgPC9hPlxuICAgIDwhLS0gQ3VzdG9tIHBhcnRpYWwgdGVtcGxhdGUgLS0+XG4gICAgPGEgKm5nSWY9XCJjb250ZW50XCIgW25nQ2xhc3NdPVwie2N1c3RvbVRlbXBsYXRlOiBjb250ZW50fVwiIHBhcnRpYWxDb250YWluZXIgW3dtSXRlbVRlbXBsYXRlXT1cImNvbnRlbnRcIiBbdXNlckNvbXBvbmVudFBhcmFtc109XCJtYXRjaC5pdGVtXCI+XG4gICAgICAgIDxkaXYgcGFydGlhbC1jb250YWluZXItdGFyZ2V0PjwvZGl2PlxuICAgIDwvYT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tTGlzdFRlbXBsYXRlIGxldC1tYXRjaGVzPVwibWF0Y2hlc1wiIGxldC1pdGVtVGVtcGxhdGU9XCJpdGVtVGVtcGxhdGVcIiBsZXQtcXVlcnk9XCJxdWVyeVwiPlxuICAgIDx1bCAjdWxFbGVtZW50IGNsYXNzPVwiYXBwLXNlYXJjaCBkcm9wZG93bi1tZW51XCIgc2Nyb2xsYWJsZT5cbiAgICAgICAgPGxpICNsaUVsZW1lbnRzICpuZ0Zvcj1cImxldCBtYXRjaCBvZiBtYXRjaGVzOyBsZXQgaSA9IGluZGV4O1wiIFtuZ0NsYXNzXT1cInthY3RpdmU6IHR5cGVhaGVhZENvbnRhaW5lciAmJiB0eXBlYWhlYWRDb250YWluZXIuaXNBY3RpdmUobWF0Y2gpLCAnbGlzdC1ncm91cC1oZWFkZXInOiBtYXRjaCAmJiBtYXRjaC5pc0hlYWRlcigpfVwiXG4gICAgICAgICAgICAobW91c2VlbnRlcik9XCJ0eXBlYWhlYWRDb250YWluZXIuc2VsZWN0QWN0aXZlKG1hdGNoKTtcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1hdGNoICYmICFtYXRjaC5pc0hlYWRlcigpICYmIHR5cGVhaGVhZENvbnRhaW5lci5zZWxlY3RNYXRjaChtYXRjaCwgJGV2ZW50KTsgJHR5cGVhaGVhZEV2ZW50ID0gJGV2ZW50OyBub3RpZnlTdWJzY3JpYmVyKCk7XCI+XG4gICAgICAgICAgICA8IS0tIGl0ZW1UZW1wbGF0ZSBjb21lcyBmcm9tIHRoZSA8aW5wdXQ+IC0tPlxuICAgICAgICAgICAgPGg0ICpuZ0lmPVwibWF0Y2guaXNIZWFkZXIoKVwiIGNsYXNzPVwiZ3JvdXAtdGl0bGVcIj57e21hdGNoLnZhbHVlfX08L2g0PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtYXRjaC5pc0hlYWRlcigpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpdGVtOiBtYXRjaC5pdGVtLCBpbmRleDogaSwgbWF0Y2g6IG1hdGNoLCBxdWVyeTogcXVlcnl9XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1c1wiIFtoaWRkZW5dPVwiX2xvYWRpbmdJdGVtcyB8fCAhKGRhdGFjb21wbGV0ZW1zZyAmJiBkYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSlcIj5cbiAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJkYXRhY29tcGxldGVtc2dcIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzXCIgW2hpZGRlbl09XCIhX2xvYWRpbmdJdGVtc1wiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cImxvYWRpbmdkYXRhbXNnXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLVRoaXMgdGVtcGxhdGUgaXMgZm9yIHNlYXJjaCBpbnNpZGUgbW9iaWxlIG5hdmJhci4tLT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJuYXZzZWFyY2hiYXI7IGVsc2Ugc2VhcmNoVGVtcGxhdGVcIj5cbiAgICA8aW5wdXQgW3RpdGxlXT1cInF1ZXJ5IHx8ICcnXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImFwcC10ZXh0Ym94IGZvcm0tY29udHJvbCBsaXN0LW9mLW9ianMgYXBwLXNlYXJjaC1pbnB1dFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCAnJ1wiXG4gICAgICAgICAgIGZvY3VzLXRhcmdldFxuICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgW2F0dHIuYWNjZXNza2V5XT1cInNob3J0Y3V0a2V5XCJcbiAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgWyhuZ01vZGVsKV09XCJxdWVyeVwiXG4gICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICBbdHlwZWFoZWFkXT1cInR5cGVhaGVhZERhdGFTb3VyY2VcIlxuICAgICAgICAgICBbdHlwZWFoZWFkV2FpdE1zXT1cImRlYm91bmNldGltZVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRJdGVtVGVtcGxhdGVdPVwiY3VzdG9tSXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgW29wdGlvbnNMaXN0VGVtcGxhdGVdPVwiY3VzdG9tTGlzdFRlbXBsYXRlXCJcbiAgICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgIChrZXlkb3duKT1cImxpc3RlblF1ZXJ5ID0gdHJ1ZVwiXG4gICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiR0eXBlYWhlYWRFdmVudCA9ICRldmVudDtoYW5kbGVFbnRlckV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAoa2V5ZG93bi5hcnJvd2Rvd24pPVwic2VsZWN0TmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgKGJsdXIpPVwiaW52b2tlT25Ub3VjaGVkKCRldmVudClcIlxuICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRm9jdXMoJGV2ZW50KTtcIlxuICAgICAgICAgICAoZm9jdXMpPVwiX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTsgbGlzdGVuUXVlcnkgPSB0cnVlOyBoYW5kbGVGb2N1cygkZXZlbnQpOyBpbnZva2VPbkZvY3VzKCRldmVudCk7XCJcbiAgICAgICAgICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoKVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRNaW5MZW5ndGhdPVwibWluY2hhcnNcIlxuICAgICAgICAgICBbdHlwZWFoZWFkT3B0aW9uc0xpbWl0XT1cImxpbWl0XCJcbiAgICAgICAgICAgKHR5cGVhaGVhZExvYWRpbmcpPVwiX2xvYWRpbmdJdGVtc1wiXG4gICAgICAgICAgICh0eXBlYWhlYWRPblNlbGVjdCk9XCJ0eXBlYWhlYWRPblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgdHlwZWFoZWFkT3B0aW9uRmllbGQ9XCJsYWJlbFwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRHcm91cEZpZWxkXT1cImdyb3VwYnkgPyAnZ3JvdXBieScgOiBudWxsXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZEFzeW5jXT1cInRydWVcIlxuICAgICAgICAgICBbdHlwZWFoZWFkU2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRPcHRpb25zSW5TY3JvbGxhYmxlVmlld109XCJvcHRpb25zbGltaXRpbnNjcm9sbGFibGV2aWV3XCJcbiAgICAgICAgICAgW2Ryb3B1cF09XCJkcm9wdXBcIlxuICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFsYWJlbCB8fCAnU2VhcmNoIGZpZWxkJ1wiLz5cbiAgICA8aSBjbGFzcz1cImJ0bi1jbG9zZSB3aSB3aS1jYW5jZWxcIiBbaGlkZGVuXT1cIiFzaG93Q2xvc2VidG5cIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goJGV2ZW50KTtcIj48L2k+XG48L25nLWNvbnRhaW5lcj5cbjwhLS1UaGlzIHRlbXBsYXRlIGlzIGZvciBib3RoIHdlYiBhbmQgZnVsbHNjcmVlbiBtb2RlIGluIG1vYmlsZS4tLT5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoVGVtcGxhdGU+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4taWNvbiBmb3JtLWNvbnRyb2wtZmVlZGJhY2sgYmFjay1idG5cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAoY2xpY2spPVwiY2xvc2VTZWFyY2goKVwiPjxpIGNsYXNzPVwiYXBwLWljb24ge3tiYWNrc2VhcmNoaWNvbmNsYXNzfX1cIj48L2k+PC9idXR0b24+XG4gICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+QmFjayBidXR0b248L3NwYW4+XG4gICAgPGlucHV0IFt0aXRsZV09XCJxdWVyeSB8fCAnJ1wiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJhcHAtdGV4dGJveCBmb3JtLWNvbnRyb2wgbGlzdC1vZi1vYmpzIGFwcC1zZWFyY2gtaW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgICBmb2N1cy10YXJnZXRcbiAgICAgICAgICAgW2NvbnRhaW5lcl09XCJjb250YWluZXJUYXJnZXQgfHwgJy53bS1hcHAnXCJcbiAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgW2F0dHIuYWNjZXNza2V5XT1cInNob3J0Y3V0a2V5XCJcbiAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgWyhuZ01vZGVsKV09XCJxdWVyeVwiXG4gICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICBbdHlwZWFoZWFkXT1cInR5cGVhaGVhZERhdGFTb3VyY2VcIlxuICAgICAgICAgICBbdHlwZWFoZWFkV2FpdE1zXT1cImRlYm91bmNldGltZVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRJdGVtVGVtcGxhdGVdPVwiY3VzdG9tSXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgW29wdGlvbnNMaXN0VGVtcGxhdGVdPVwiY3VzdG9tTGlzdFRlbXBsYXRlXCJcbiAgICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgIChrZXlkb3duKT1cImxpc3RlblF1ZXJ5ID0gdHJ1ZVwiXG4gICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiR0eXBlYWhlYWRFdmVudCA9ICRldmVudDtoYW5kbGVFbnRlckV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAoa2V5ZG93bi5hcnJvd2Rvd24pPVwic2VsZWN0TmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgKGJsdXIpPVwiaW52b2tlT25Ub3VjaGVkKCRldmVudCk7IG9uRm9jdXNPdXQoKVwiXG4gICAgICAgICAgIChjbGljayk9XCJoYW5kbGVGb2N1cygkZXZlbnQpO1wiXG4gICAgICAgICAgIChmb2N1cyk9XCJfdW5zdWJzY3JpYmVEdiA9IGZhbHNlOyBsaXN0ZW5RdWVyeSA9IHRydWU7IGhhbmRsZUZvY3VzKCRldmVudCk7IGludm9rZU9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRNaW5MZW5ndGhdPVwibWluY2hhcnNcIlxuICAgICAgICAgICBbdHlwZWFoZWFkT3B0aW9uc0xpbWl0XT1cImxpbWl0XCJcbiAgICAgICAgICAgKHR5cGVhaGVhZExvYWRpbmcpPVwiX2xvYWRpbmdJdGVtc1wiXG4gICAgICAgICAgICh0eXBlYWhlYWRPblNlbGVjdCk9XCJ0eXBlYWhlYWRPblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgdHlwZWFoZWFkT3B0aW9uRmllbGQ9XCJsYWJlbFwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRHcm91cEZpZWxkXT1cImdyb3VwYnkgPyAnZ3JvdXBieScgOiBudWxsXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZEFzeW5jXT1cInRydWVcIlxuICAgICAgICAgICBbdHlwZWFoZWFkU2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRPcHRpb25zSW5TY3JvbGxhYmxlVmlld109XCJvcHRpb25zbGltaXRpbnNjcm9sbGFibGV2aWV3XCJcbiAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgW2Ryb3B1cF09XCJkcm9wdXBcIlxuICAgICAgICAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFsYWJlbCB8fCAnU2VhcmNoIGZpZWxkJ1wiPlxuICAgIDxpbnB1dCBjbGFzcz1cIm1vZGVsLWhvbGRlclwiIG5nLW1vZGVsPVwicHJveHlNb2RlbFwiIG5nLXJlcXVpcmVkPVwicmVxdWlyZWRcIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJfbG9hZGluZ0l0ZW1zXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJmYSBmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluIGZvcm0tY29udHJvbC1mZWVkYmFja1wiPjwvc3Bhbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGZvcm0tY29udHJvbC1mZWVkYmFjayBjbGVhci1idG5cIiBbbmdDbGFzc109XCJ7J3Nob3ctYnRuJzogaXNRdWVyeUVudGVyZWQoKX1cIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goJGV2ZW50LCB0cnVlKVwiPjxpIGNsYXNzPVwiYXBwLWljb24ge3tjbGVhcnNlYXJjaGljb25jbGFzc319XCI+PC9pPjwvYnV0dG9uPlxuICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsZWFyIGJ1dHRvbjwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInNob3dzZWFyY2hpY29uXCIgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6IGRpc2FibGVkfVwiIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb25cIj5cbiAgICAgICAgPGZvcm0+XG4gICAgICAgICAgICA8YnV0dG9uIHRpdGxlPVwiU2VhcmNoXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgY2xhc3M9XCJhcHAtc2VhcmNoLWJ1dHRvbiBidG4gYnRuLWljb25cIiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VhcmNoU2VsZWN0KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJhcHAtaWNvbiB7e3NlYXJjaGljb25jbGFzc319XCI+PC9pPjwvYnV0dG9uPlxuICAgICAgICA8L2Zvcm0+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
940
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SearchComponent, { className: "SearchComponent", filePath: "search.component.ts", lineNumber: 72 }); })();
941
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9iYXNpYy9zZWFyY2gvc3JjL3NlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvc2VhcmNoL3NyYy9zZWFyY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBR0gsU0FBUyxFQUNULFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFFUixRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFBOEIsa0JBQWtCLEVBQWtCLGVBQWUsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRXpILE9BQU8sRUFBQyxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM1RyxPQUFPLEVBQ0gs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LHdGQTZFVCxnQkFBZ0Isd0JBQ2hCLGNBQWMsd0JBQ2pCLGtCQUFrQjtvRUEvRXJCLGVBQWU7MkJBbUNiLGtCQUFrQjs7Ozs7Ozs7Z0VBekNsQjtnQkFDUCxTQUFTLENBQUMsZUFBZSxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQztnQkFDbkQsU0FBUyxDQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDO2dCQUMvQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUM7YUFDdEM7WUNjSCxBQXJDRixBQTVCQSxBQWxCQSxpSEFBd0csb0dBa0JDLGtEQTRCckYsbURBcUNYOztZQXJDVCxlQXlGRztZQXpGSCwwQ0F5Rkc7NEJEekVTLFlBQVksbUNBQUUsa0JBQWtCLG9IQUFFLFdBQVcsaUhBQUUsbUJBQW1CLEVBQUUsZUFBZTs7aUZBU2xGLGVBQWU7Y0FYM0IsU0FBUzs2QkFDSSxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsQ0FBQyxZQUNsRixZQUFZLGFBRVg7b0JBQ1AsU0FBUyxrQkFBa0IsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO29CQUNuRCxTQUFTLGtCQUFrQixhQUFhLEVBQUUsSUFBSSxDQUFDO29CQUMvQyxrQkFBa0IsaUJBQWlCO2lCQUN0Qzs7c0JBK0VJLFNBQVM7dUJBQUMsZ0JBQWdCOztzQkFDMUIsU0FBUzt1QkFBQyxjQUFjOztzQkFDeEIsTUFBTTt1QkFBQyxrQkFBa0I7O3NCQUFHLFFBQVE7cUJBNUNWLFNBQVM7a0JBQXZDLFNBQVM7bUJBQUMsa0JBQWtCO1lBQ0wsU0FBUztrQkFBaEMsU0FBUzttQkFBQyxXQUFXO1lBQ00sVUFBVTtrQkFBckMsWUFBWTttQkFBQyxZQUFZOztrRkFyQ2pCLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgV21Db21wb25lbnRzTW9kdWxlIH0gZnJvbSBcIkB3bS9jb21wb25lbnRzL2Jhc2VcIjtcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2Nyb2xsYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4vc2Nyb2xsYWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7ZnJvbSwgT2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIG1lcmdlTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7VHlwZWFoZWFkQ29udGFpbmVyQ29tcG9uZW50LCBUeXBlYWhlYWREaXJlY3RpdmUsIFR5cGVhaGVhZE1hdGNoLCBUeXBlYWhlYWRNb2R1bGV9IGZyb20gJ25neC1ib290c3RyYXAvdHlwZWFoZWFkJztcblxuaW1wb3J0IHthZGRDbGFzcywgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24sIEFwcCwgRGF0YVNvdXJjZSwgaXNEZWZpbmVkLCBpc01vYmlsZSwgdG9Cb29sZWFufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge1xuICAgIEFMTEZJRUxEUyxcbiAgICBjb252ZXJ0RGF0YVRvT2JqZWN0LFxuICAgIERhdGFTZXRJdGVtLFxuICAgIGV4dHJhY3REYXRhQXNBcnJheSxcbiAgICBnZXRDb250YWluZXJUYXJnZXRDbGFzcyxcbiAgICBnZXRVbmlxT2Jqc0J5RGF0YUZpZWxkLFxuICAgIHByb3ZpZGVBcyxcbiAgICBwcm92aWRlQXNXaWRnZXRSZWYsXG4gICAgc3R5bGVyLFxuICAgIHRyYW5zZm9ybUZvcm1EYXRhXG59IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHtEYXRhc2V0QXdhcmVGb3JtQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9pbnB1dCc7XG5cbmltcG9ydCB7cmVnaXN0ZXJQcm9wc30gZnJvbSAnLi9zZWFyY2gucHJvcHMnO1xuaW1wb3J0IHtEYXRhUHJvdmlkZXIsIElEYXRhUHJvdmlkZXIsIElEYXRhUHJvdmlkZXJDb25maWd9IGZyb20gJy4vZGF0YS1wcm92aWRlci9kYXRhLXByb3ZpZGVyJztcbmltcG9ydCB7XG4gICAgZGVib3VuY2UsXG4gICAgZmluZCxcbiAgICBnZXQsXG4gICAgaW5jbHVkZXMsXG4gICAgaXNBcnJheSxcbiAgICBpc0VtcHR5LFxuICAgIGlzRXF1YWwsXG4gICAgaXNPYmplY3QsXG4gICAgaXNVbmRlZmluZWQsXG4gICAgbWFwLFxuICAgIHNwbGl0LFxuICAgIHRvU3RyaW5nLFxuICAgIHRyaW1cbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5jb25zdCBXSURHRVRfQ09ORklHID0geyB3aWRnZXRUeXBlOiAnd20tc2VhcmNoJywgaG9zdENsYXNzOiAnaW5wdXQtZ3JvdXAnIH07XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBXbUNvbXBvbmVudHNNb2R1bGUsIEZvcm1zTW9kdWxlLCBTY3JvbGxhYmxlRGlyZWN0aXZlLCBUeXBlYWhlYWRNb2R1bGVdLFxuICAgIHNlbGVjdG9yOiAnW3dtU2VhcmNoXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBcyhTZWFyY2hDb21wb25lbnQsIE5HX1ZBTFVFX0FDQ0VTU09SLCB0cnVlKSxcbiAgICAgICAgcHJvdmlkZUFzKFNlYXJjaENvbXBvbmVudCwgTkdfVkFMSURBVE9SUywgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihTZWFyY2hDb21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hDb21wb25lbnQgZXh0ZW5kcyBEYXRhc2V0QXdhcmVGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBBZnRlclZpZXdDaGVja2VkIHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuICAgIHB1YmxpYyBjYXNlc2Vuc2l0aXZlOiBib29sZWFuO1xuICAgIHB1YmxpYyBzZWFyY2hrZXk6IHN0cmluZztcbiAgICBwdWJsaWMgcXVlcnlNb2RlbDogQXJyYXk8RGF0YVNldEl0ZW0+IHwgc3RyaW5nO1xuICAgIHB1YmxpYyBxdWVyeSA9ICcnO1xuICAgIHB1YmxpYyBsaW1pdDogYW55O1xuICAgIHB1YmxpYyBzaG93c2VhcmNoaWNvbjogYm9vbGVhbjtcbiAgICBwdWJsaWMgbWluY2hhcnM6IG51bWJlcjtcbiAgICBwdWJsaWMgdHlwZTogc3RyaW5nO1xuICAgIHB1YmxpYyBuYXZzZWFyY2hiYXI6IGFueTtcbiAgICBwdWJsaWMgZGVib3VuY2V0aW1lOiBudW1iZXI7XG4gICAgcHVibGljIGhpbnQ6IHN0cmluZztcbiAgICBwdWJsaWMgYXJpYWxhYmVsOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIGFwcDogQXBwO1xuICAgIHByaXZhdGUgdHlwZWFoZWFkRGF0YVNvdXJjZTogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIHByaXZhdGUgcGFnZXNpemU6IGFueTtcbiAgICBwcml2YXRlIHBhZ2UgPSAxO1xuICAgIHB1YmxpYyBfbG9hZGluZ0l0ZW1zOiBib29sZWFuO1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyOiBJRGF0YVByb3ZpZGVyO1xuICAgIHByaXZhdGUgcmVzdWx0OiBBcnJheTxhbnk+OyAvLyBjb250YWlucyB0aGUgc2VhcmNoIHJlc3VsdCBpLmUuIG1hdGNoZXNcbiAgICBwcml2YXRlIGZvcm1hdHRlZERhdGFzZXQ6IGFueTtcbiAgICBwcml2YXRlIGlzZm9ybWZpZWxkOiBib29sZWFuO1xuICAgIHByaXZhdGUgJHR5cGVhaGVhZEV2ZW50OiBFdmVudDtcblxuICAgIHB1YmxpYyB0YWJpbmRleDogbnVtYmVyO1xuICAgIHB1YmxpYyBzdGFydEluZGV4OiBudW1iZXI7XG4gICAgcHVibGljIGJpbmRkaXNwbGF5bGFiZWw6IHN0cmluZztcbiAgICBwdWJsaWMgdHlwZWFoZWFkQ29udGFpbmVyOiBUeXBlYWhlYWRDb250YWluZXJDb21wb25lbnQ7XG4gICAgcHVibGljIGNvbnRhaW5lclRhcmdldDogc3RyaW5nO1xuICAgIHB1YmxpYyBjbGVhcnNlYXJjaGljb25jbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBiYWNrc2VhcmNoaWNvbmNsYXNzOiBzdHJpbmc7XG4gICAgcHVibGljIHNlYXJjaGljb25jbGFzczogc3RyaW5nO1xuXG4gICAgQFZpZXdDaGlsZChUeXBlYWhlYWREaXJlY3RpdmUpIHR5cGVhaGVhZDogVHlwZWFoZWFkRGlyZWN0aXZlO1xuICAgIEBWaWV3Q2hpbGQoJ3VsRWxlbWVudCcpIHVsRWxlbWVudDogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkcmVuKCdsaUVsZW1lbnRzJykgbGlFbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gICAgcHJpdmF0ZSBhbGxvd29ubHlzZWxlY3Q6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBjbGFzczogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBsYXN0U2VsZWN0ZWRJbmRleDogbnVtYmVyO1xuICAgIHByaXZhdGUgZGF0YW9wdGlvbnM6IGFueTtcbiAgICBwdWJsaWMgZHJvcGRvd25FbDogYW55O1xuICAgIHByaXZhdGUgX2xhc3RRdWVyeTogc3RyaW5nO1xuICAgIHByaXZhdGUgX2xhc3RSZXN1bHQ6IGFueTtcbiAgICBwcml2YXRlIF9pc09wZW46IGJvb2xlYW47IC8vIHNldCB0byB0cnVlIHdoZW4gZHJvcGRvd24gaXMgb3BlblxuICAgIHByaXZhdGUgc2hvd0Nsb3NlYnRuOiBib29sZWFuO1xuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlRHY6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfZGF0YXNvdXJjZTogYW55O1xuICAgIHByaXZhdGUgaXNTY3JvbGxlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIHBhcmVudEVsOiBhbnk7XG4gICAgcHJpdmF0ZSBwb3NpdGlvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgZWxJbmRleDogbnVtYmVyO1xuICAgIHByaXZhdGUgbGlzdGVuUXVlcnk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfZG9tVXBkYXRlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIHNlYXJjaG9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzaG93Y2xlYXI6IGJvb2xlYW47XG4gICAgcHVibGljIG1hdGNobW9kZTogc3RyaW5nO1xuICAgIHByaXZhdGUgY2xlYXJEYXRhOiBib29sZWFuO1xuXG5cbiAgICAvLyBnZXR0ZXIgc2V0dGVyIGlzIGFkZGVkIHRvIHBhc3MgdGhlIGRhdGFzb3VyY2UgdG8gc2VhcmNoY29tcG9uZW50LlxuICAgIGdldCBkYXRhc291cmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YXNvdXJjZTtcbiAgICB9XG5cbiAgICBzZXQgZGF0YXNvdXJjZShudikge1xuICAgICAgICB0aGlzLl9kYXRhc291cmNlID0gbnY7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGF2YWx1ZSB8fCB0aGlzLnRvQmVQcm9jZXNzZWREYXRhdmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlQnlEYXRhdmFsdWUoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIGFwcDogQXBwLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhdmFsdWUuYmluZCcpIHB1YmxpYyBiaW5kZGF0YXZhbHVlLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhc2V0LmJpbmQnKSBwdWJsaWMgYmluZGRhdGFzZXQsXG4gICAgICAgIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIC8vIHRoaXMgZmxhZyB3aWxsIG5vdCBhbGxvdyB0aGUgZW1wdHkgZGF0YWZpZWxkIHZhbHVlcy5cbiAgICAgICAgdGhpcy5hbGxvd2VtcHR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYXBwID0gYXBwO1xuICAgICAgICBhZGRDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsICdhcHAtc2VhcmNoJywgdHJ1ZSk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIExpc3RlbnMgZm9yIHRoZSBjaGFuZ2UgaW4gdGhlIG5nTW9kZWwgb24gZXZlcnkgc2VhcmNoIGFuZCByZXRyaWV2ZXMgdGhlIGRhdGEgYXMgb2JzZXJ2YWJsZS5cbiAgICAgICAgICogVGhpcyBvYnNlcnZhYmxlIGRhdGEgaXMgcGFzc2VkIHRvIHRoZSB0eXBlYWhlYWQuXG4gICAgICAgICAqIEB0eXBlIHtPYnNlcnZhYmxlPGFueT59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnR5cGVhaGVhZERhdGFTb3VyY2UgPSBPYnNlcnZhYmxlXG4gICAgICAgICAgICAuY3JlYXRlKChvYnNlcnZlcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gUnVucyBvbiBldmVyeSBzZWFyY2hcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5saXN0ZW5RdWVyeSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0UXVlcnlJbnZva2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodGhpcy5xdWVyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG9uIGtleWRvd24sIHdoaWxlIHNjcm9sbGluZyB0aGUgZHJvcGRvd24gaXRlbXMsIHdoZW4gbGFzdCBpdGVtIGlzIHJlYWNoZWQgbmV4dCBjYWxsIGlzIHRyaWdnZXJlZFxuICAgICAgICAgICAgICAgIC8vIHVubGVzcyB0aGUgY2FsbCBpcyByZXNvbHZlZCwgd2UgYXJlIGFibGUgdG8gc2Nyb2xsIG5leHQgdG8gZmlyc3QgaXRlbSBhbmQgc29vblxuICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hvd3MgZmxpY2tlcmluZyBmcm9tIGZpcnN0IGl0ZW0gdG8gbmV4dCBuZXcgaXRlbXMgYXBwZW5kZWQuXG4gICAgICAgICAgICAgICAgLy8gQnkgc2V0dGluZyBjb250YWluZXIgdG8gdW5kZWZpbmVkLCBrZXkgZXZlbnRzIGNoYW5nZXMgd2lsbCBiZSBzdG9wcGVkIHdoaWxlIGxvYWRpbmcgaXRlbXNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC5fY29udGFpbmVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5taW5jaGFycyA9PT0gMCB8fCAodGhpcy5xdWVyeSAmJiB0aGlzLnF1ZXJ5Lmxlbmd0aCA+PSB0aGlzLm1pbmNoYXJzKSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKHRva2VuOiBzdHJpbmcpID0+IHRoaXMuZ2V0RGF0YVNvdXJjZUFzT2JzZXJ2YWJsZSh0b2tlbikpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyID0gbmV3IERhdGFQcm92aWRlcigpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaGVuIGRlZmF1bHQgZGF0YXZhbHVlIGlzIG5vdCBmb3VuZCB3aXRoaW4gdGhlIGRhdGFzZXQsIGEgZmlsdGVyIGNhbGwgaXMgbWFkZSB0byBnZXQgdGhlIHJlY29yZCB1c2luZyBmZXRjaERlZmF1bHRNb2RlbC5cbiAgICAgICAgICogYWZ0ZXIgZ2V0dGluZyB0aGUgcmVzcG9uc2UsIHNldCB0aGUgcXVlcnlNb2RlbCBhbmQgcXVlcnkuXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBkYXRhdmFsdWVTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGF2YWx1ZSQuc3Vic2NyaWJlKCh2YWw6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgcXVlcnkgPSAoaXNBcnJheSh2YWwpID8gdmFsWzBdIDogdmFsKSBhcyBzdHJpbmc7XG5cbiAgICAgICAgICAgIGlmIChxdWVyeSA9PT0gbnVsbCB8fCBxdWVyeSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAvLyByZXNldCB0aGUgcXVlcnkuXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMucXVlcnlNb2RlbCA9ICcnO1xuICAgICAgICAgICAgICAgIC8vIG9uIGNsZWFyIG9yIHJlc2V0IGZpbHRlciwgZW1wdHkgdGhlIGxhc3RSZXN1bHRzIHRvIGZldGNoIG5ldyByZWNvcmRzLlxuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3Vuc3Vic2NyaWJlRHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0UXVlcnlJbnZva2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gaWYgcHJldiBkYXRhdmFsdWUgaXMgbm90IGVxdWFsIHRvIGN1cnJlbnQgZGF0YXZhbHVlIHRoZW4gY2xlYXIgdGhlIG1vZGVsQnlLZXkgYW5kIHF1ZXJ5TW9kZWxcbiAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KHZhbCkgJiYgKHRoaXMgYXMgYW55KS5wcmV2RGF0YXZhbHVlICE9PSB2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeUtleSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMucXVlcnlNb2RlbCA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZGF0YWZpZWxkIGlzIEFMTEZJTEVEUyBkbyBub3QgZmV0Y2ggdGhlIHJlY29yZHNcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIHF1ZXJ5IG1vZGVsIHdpdGggdGhlIHZhbHVlcyB3ZSBoYXZlXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVCeURhdGF2YWx1ZSh2YWwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0dXJuIG9uIHNob3dDbG9zZUJ0biB3aGVuIGEgZGVmYXVsdCB2YWx1ZSBpcyBnaXZlblxuICAgICAgICAgICAgdGhpcy5zaG93Q2xvc2VidG4gPSAodGhpcy5xdWVyeSAhPT0gJycpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBkYXRhdmFsdWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG5cbiAgICAgICAgY29uc3QgZGF0YXNldFN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YXNldCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIC8vIHNldCB0aGUgbmV4dCBpdGVtIGluZGV4LlxuICAgICAgICAgICAgdGhpcy5zdGFydEluZGV4ID0gdGhpcy5kYXRhc2V0SXRlbXMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5fbGFzdFJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMuZGF0YXZhbHVlIHx8IHRoaXMudG9CZVByb2Nlc3NlZERhdGF2YWx1ZTtcbiAgICAgICAgICAgIC8vIGludm9raW5nIHVwZGF0ZUJ5RGF0YXNldCBvbmx5IHdoZW4gZGF0YXZhbHVlIGlzIHByZXNlbnQsIGFzIGVudGVyZWQgdmFsdWUgaS5lLiBxdWVyeSBpcyBzZXR0aW5nIGJhY2sgdG8gJydcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQnlEYXRhc2V0KGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IGRhdGFzZXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgLy8gb24gY2xlYXIsIHRyaWdnZXIgc2VhcmNoIHdpdGggcGFnZSBzaXplIDFcbiAgICBwcml2YXRlIGNsZWFyU2VhcmNoKCRldmVudCwgbG9hZE9uQ2xlYXIpIHtcbiAgICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2UoJGV2ZW50KTtcbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gZmFsc2U7XG4gICAgICAgIGlmIChsb2FkT25DbGVhcikge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl91bnN1YnNjcmliZUR2ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb3JlRGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2xlYXJzZWFyY2gnKTtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgIC8vIHdoZW4gc2VhcmNoIGlucHV0IGlzIGNsZWFyZWQsIGZvY3VzIG9uIHRoZSBpbnB1dCBmaWVsZFxuICAgICAgICBpZiAoJGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5hcHAtc2VhcmNoLWlucHV0JykuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZ1bmN0aW9uIHRvICBjbGVhciB0aGUgaW5wdXQgdmFsdWVcbiAgICBwdWJsaWMgY2xlYXJUZXh0KCkge1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgdGhlIGZ1bGwgc2NyZWVuIG1vZGUgaW4gbW9iaWxlIHZpZXcgb2YgYXV0byBjb21wbGV0ZVxuICAgIHByaXZhdGUgY2xvc2VTZWFyY2goKSB7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgICAgICAvLyBhZnRlciBjbG9zaW5nIHRoZSBzZWFyY2gsIGluc2VydCB0aGUgZWxlbWVudCBhdCBpdHMgcHJldmlvdXMgcG9zaXRpb24gKGVsSW5kZXgpXG4gICAgICAgIHRoaXMuaW5zZXJ0QXRJbmRleCh0aGlzLmVsSW5kZXgpO1xuICAgICAgICB0aGlzLmVsSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucGFyZW50RWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2Z1bGwtc2NyZWVuJyk7XG4gICAgICAgIGlmICh0aGlzLl9kb21VcGRhdGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9kb21VcGRhdGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUR2ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50eXBlYWhlYWQuaGlkZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyTW9iaWxlQXV0b0NvbXBsZXRlKCkge1xuICAgICAgICAvLyBHZXQgdGhlIHBhcmVudCBlbGVtZW50IG9mIHRoZSBzZWFyY2ggZWxlbWVudCB3aGljaCBjYW4gYmUgbmV4dCBvciBwcmV2IGVsZW1lbnQsIGlmIGJvdGggYXJlIGVtcHR5IHRoZW4gZ2V0IHRoZSBwYXJlbnQgb2YgZWxlbWVudC5cbiAgICAgICAgaWYgKCFpc0RlZmluZWQodGhpcy5lbEluZGV4KSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRFbCA9IHRoaXMuJGVsZW1lbnQucGFyZW50KCk7XG4gICAgICAgICAgICB0aGlzLmVsSW5kZXggPSB0aGlzLnBhcmVudEVsLmNoaWxkcmVuKCkuaW5kZXgodGhpcy4kZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmdWxsLXNjcmVlbicpKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGZsYWcgaXMgc2V0IHRvIG5vdGlmeSB0aGF0IHRoZSB0eXBlYWhlYWQtY29udGFpbmVyIGRvbSBoYXMgY2hhbmdlZCBpdHMgcG9zaXRpb25cbiAgICAgICAgICAgIHRoaXMuX2RvbVVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgLy8gQWRkIGZ1bGwgc2NyZWVuIGNsYXNzIG9uIGZvY3VzIG9mIHRoZSBpbnB1dCBlbGVtZW50LlxuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcygnZnVsbC1zY3JlZW4nKTtcblxuICAgICAgICAgICAgLy8gQWRkIHBvc2l0aW9uIHRvIHNldCB0aGUgaGVpZ2h0IHRvIGF1dG9cbiAgICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSAnaW5saW5lJykge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3ModGhpcy5wb3NpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9jdXMgaXMgbG9zdCB3aGVuIGVsZW1lbnQgaXMgY2hhbmdlZCB0byBmdWxsLXNjcmVlbiwga2V5ZG93biB0byBzZWxlY3QgbmV4dCBpdGVtcyB3aWxsIG5vdCB3b3JrXG4gICAgICAgIC8vIEhlbmNlIGV4cGxpY2l0bHkgZm9jdXNpbmcgdGhlIGlucHV0XG4gICAgICAgIGlmICh0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmdWxsLXNjcmVlbicpKSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5hcHAtc2VhcmNoLWlucHV0JykuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0YVNvdXJjZUFzT2JzZXJ2YWJsZShxdWVyeTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgLy8gc2hvdyBkcm9wZG93biBvbmx5IHdoZW4gdGhlcmUgaXMgY2hhbmdlIGluIHF1ZXJ5LiBUaGlzIHNob3VsZCBub3QgYXBwbHkgd2hlbiBkYXRhb3B0aW9ucyB3aXRoIGZpbHRlckZpZWxkcyBhcmUgdXBkYXRlZC5cbiAgICAgICAgLy8gd2hlbiBsYXN0UmVzdWx0IGlzIG5vdCBhdmFpbGFibGUgaS5lLiBzdGlsbCB0aGUgZmlyc3QgY2FsbCBpcyBwZW5kaW5nIGFuZCBzZWNvbmQgcXVlcnkgaXMgaW52b2tlZCB0aGVuIGRvIG5vdCByZXR1cm4uXG4gICAgICAgIGlmICh0aGlzLl9sYXN0UXVlcnkgPT09IHF1ZXJ5ICYmICFnZXQodGhpcy5kYXRhb3B0aW9ucywgJ2ZpbHRlckZpZWxkcycpICYmIGlzRGVmaW5lZCh0aGlzLl9sYXN0UmVzdWx0KSkge1xuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gb2YodGhpcy5fbGFzdFJlc3VsdCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAgICAgIFdNUy0xOTE3NzogT24gZm9jdXMgb2YgaW5wdXQgZmllbGQgZm9yIGF1dG9jb21wbGV0ZSB0eXBlLCBkbyBub3QgdHJpZ2dlciBhcGkgY2FsbCB3aGVuXG4gICAgICAgICAgICAgICAgIGEpIHNlYXJjaGtleSBhbmQgZGlzcGxheWV4cHJlc3Npb24gYXJlIGRpZmZlcmVudFxuICAgICAgICAgICAgICAgICBiKSBiaW5kZGlzcGxheWxhYmVsIGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlc1xuICAgICAgICAgICAgICAgICBjKSBiaW5kZGlzcGxheWxhYmVsIGNvbnRhaW5zIHNpbmdsZSB2YWx1ZSB3aGljaCBkb2VzIG5vdCBtYXRjaCB3aXRoIHNlYXJjaGtleVxuICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnYXV0b2NvbXBsZXRlJyAmJiB0aGlzLnNlYXJjaGtleSAmJiB0aGlzLnF1ZXJ5ICYmIHRoaXMuZGF0YXZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgYmluZERpc3BsYXlMYWJlbEFycmF5ID0gW107XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hLZXlBcnJheSA9IHNwbGl0KHRoaXMuc2VhcmNoa2V5LCAnLCcpO1xuICAgICAgICAgICAgbGV0IGRpc3BsYXlsYWJlbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJpbmRkaXNwbGF5bGFiZWwpIHtcbiAgICAgICAgICAgICAgICBiaW5kRGlzcGxheUxhYmVsQXJyYXkgPSBzcGxpdCh0aGlzLmJpbmRkaXNwbGF5bGFiZWwsICcrJyk7XG4gICAgICAgICAgICAgICAgaWYgKGJpbmREaXNwbGF5TGFiZWxBcnJheS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmNsdWRlcyhiaW5kRGlzcGxheUxhYmVsQXJyYXlbMF0sICd8JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gL1xcWyguKj8pXFxdLztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlsYWJlbCA9IHJlZ2V4LmV4ZWMoYmluZERpc3BsYXlMYWJlbEFycmF5WzBdKVsxXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlsYWJlbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKGJpbmREaXNwbGF5TGFiZWxBcnJheS5sZW5ndGggPiAxIHx8IChkaXNwbGF5bGFiZWwgJiYgIWluY2x1ZGVzKHNlYXJjaEtleUFycmF5LCBkaXNwbGF5bGFiZWwpKVxuICAgICAgICAgICAgICAgIHx8ICh0aGlzLmRpc3BsYXlleHByZXNzaW9uICYmICFpbmNsdWRlcyhzZWFyY2hLZXlBcnJheSwgdGhpcy5kaXNwbGF5ZXhwcmVzc2lvbikpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGFzdFF1ZXJ5ID0gdGhpcy5xdWVyeTtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5nZXREYXRhU291cmNlKHF1ZXJ5KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZUV2ZW50KG5vZGU6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgZXZlbnRDYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55KSB7XG4gICAgICAgIGlmICghaW5jbHVkZXMoWydibHVyJywgJ2ZvY3VzJywgJ3NlbGVjdCcsICdzdWJtaXQnLCAnY2hhbmdlJ10sIGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgIHN1cGVyLmhhbmRsZUV2ZW50KG5vZGUsIGV2ZW50TmFtZSwgZXZlbnRDYWxsYmFjaywgbG9jYWxzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGhpZ2hsaWdodCB0aGUgY2hhcmFjdGVycyBpbiB0aGUgZHJvcGRvd24gbWF0Y2hpbmcgdGhlIHF1ZXJ5LlxuICAgIHByaXZhdGUgaGlnaGxpZ2h0KG1hdGNoOiBUeXBlYWhlYWRNYXRjaCwgcXVlcnk6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy50eXBlYWhlYWRDb250YWluZXIpIHtcbiAgICAgICAgICAgIC8vIGhpZ2hsaWdodCBvZiBjaGFycyB3aWxsIHdvcmsgb25seSB3aGVuIGxhYmVsIGFyZSBzdHJpbmdzLlxuICAgICAgICAgICAgKG1hdGNoIGFzIGFueSkudmFsdWUgPSBtYXRjaC5pdGVtLmxhYmVsLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50eXBlYWhlYWRDb250YWluZXIuaGlnaGxpZ2h0KG1hdGNoLCBxdWVyeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpbnNlcnRzIHRoZSBlbGVtZW50IGF0IHRoZSBpbmRleCBwb3NpdGlvblxuICAgIHByaXZhdGUgaW5zZXJ0QXRJbmRleChpKSB7XG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudEVsLnByZXBlbmQodGhpcy4kZWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCAkZWxBdEluZGV4ID0gdGhpcy5wYXJlbnRFbC5jaGlsZHJlbigpLmVxKGkpO1xuICAgICAgICAgICAgaWYgKCRlbEF0SW5kZXgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5wYXJlbnRFbC5jaGlsZHJlbigpLmVxKGkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5pbnNlcnRBZnRlcih0aGlzLnBhcmVudEVsLmNoaWxkcmVuKCkuZXEoaSAtIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSB3aWRnZXQgaXMgb2YgdHlwZSBhdXRvY29tcGxldGUgaW4gbW9iaWxlIHZpZXcvIGFwcFxuICAgIHB1YmxpYyBpc01vYmlsZUF1dG9Db21wbGV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScgJiYgaXNNb2JpbGUoKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgcXVlcnkgaXMgZW50ZXJlZCBpbiB0aGUgaW5wdXQgYW5kIHRoZSB2aWV3IGlzIG5vdCBtb2JpbGVcbiAgICBwdWJsaWMgaXNRdWVyeUVudGVyZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3djbGVhciAmJiB0aGlzLnNob3dDbG9zZWJ0bjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRNb3JlRGF0YShpbmNyZW1lbnRQYWdlPzogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEluY3JlYXNlIHRoZSBwYWdlIG51bWJlciBhbmQgdHJpZ2dlciBmb3JjZSBxdWVyeSB1cGRhdGVcbiAgICAgICAgdGhpcy5wYWdlID0gaW5jcmVtZW50UGFnZSA/IHRoaXMucGFnZSArIDEgOiB0aGlzLnBhZ2U7XG5cbiAgICAgICAgdGhpcy5pc1Njcm9sbGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gdHJ1ZTtcblxuICAgICAgICAvLyB3aGVuIGludm9raW5nIG5ldyBzZXQgb2YgcmVzdWx0cywgcmVzZXQgdGhlIGxhc3RRdWVyeS5cbiAgICAgICAgaWYgKGluY3JlbWVudFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RRdWVyeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRyaWdnZXIgdGhlIHR5cGVhaGVhZCBjaGFuZ2UgbWFudWFsbHkgdG8gZmV0Y2ggdGhlIG5leHQgc2V0IG9mIHJlc3VsdHMuXG4gICAgICAgIHRoaXMudHlwZWFoZWFkLm9uSW5wdXQoe1xuICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRyaW0odGhpcy5xdWVyeSkgfHwgJzAnIC8vIGR1bW15IGRhdGEgdG8gbm90aWZ5IHRoZSBvYnNlcnZhYmxlc1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBvbiBmb2N1c291dCwgc3Vic2NyaWJlIHRvIHRoZSBkYXRhdmFsdWUgY2hhbmdlcyBhZ2FpblxuICAgIHByaXZhdGUgb25Gb2N1c091dCgpIHtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgLy8gcmVzZXQgdGhlIHBhZ2UgdmFsdWUgb24gZm9jdXNvdXQuXG4gICAgICAgIHRoaXMucGFnZSA9IDE7XG4gICAgICAgIC8vIGlmIGRvbVVwZGF0ZWQgaXMgdHJ1ZSB0aGVuIGRvIG5vdCBoaWRlIHRoZSBkcm9wZG93biBpbiB0aGUgZnVsbHNjcmVlblxuICAgICAgICBpZiAoIXRoaXMuX2RvbVVwZGF0ZWQgJiYgdGhpcy5faXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XG4gICAgICAgIC8vIG9uIG91dHNpZGUgY2xpY2ssIHR5cGVhaGVhZCBpcyBoaWRkZW4uIFRvIGF2b2lkIHRoaXMsIHdoZW4gZnVsbHNjcmVlbiBpcyBzZXQsIG92ZXJyaWRkaW5nIGlzRm9jdXNlZCBmbGFnIG9uIHRoZSB0eXBlYWhlYWQgY29udGFpbmVyXG4gICAgICAgIGlmICh0aGlzLl9kb21VcGRhdGVkICYmIHRoaXMudHlwZWFoZWFkICYmICh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgICh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLl9jb250YWluZXIuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25JbnB1dENoYW5nZSgkZXZlbnQpIHtcbiAgICAgICAgLy8gcmVzZXQgYWxsIHRoZSBwcmV2aW91cyBwYWdlIGRldGFpbHMgaW4gb3JkZXIgdG8gZmV0Y2ggbmV3IHNldCBvZiByZXN1bHQuXG4gICAgICAgIHRoaXMucmVzdWx0ID0gW107XG4gICAgICAgIHRoaXMucGFnZSA9IDE7XG4gICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSB0aGlzLmlzVXBkYXRlT25LZXlQcmVzcygpO1xuICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gd2hlbiBpbnB1dCBpcyBjbGVhcmVkLCByZXNldCB0aGUgZGF0YXZhbHVlXG4gICAgICAgIGlmICh0aGlzLnF1ZXJ5ID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gJyc7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSAnJztcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldkRhdGF2YWx1ZSh0aGlzLl9sYXN0UXVlcnkpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLl9tb2RlbEJ5VmFsdWUsIHt9LCB0cnVlKTtcblxuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjbGVhcicsIHsgJGV2ZW50IH0pO1xuXG4gICAgICAgICAgICAvLyB0cmlnZ2VyIG9uU3VibWl0IG9ubHkgd2hlbiB0aGUgc2VhcmNoIGlucHV0IGlzIGNsZWFyZWQgb2ZmIGFuZCBkbyBub3QgdHJpZ2dlciB3aGVuIHRhYiBpcyBwcmVzc2VkLlxuICAgICAgICAgICAgaWYgKCRldmVudCAmJiAkZXZlbnQud2hpY2ggIT09IDkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3N1Ym1pdCcsIHsgJGV2ZW50IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaW52b2tpbmcgY2hhbmdlIGV2ZW50IG9uIGV2ZXJ5IGlucHV0IHZhbHVlIGNoYW5nZS5cbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICRldmVudDogJGV2ZW50LFxuICAgICAgICAgICAgICAgIG5ld1ZhbDogdGhpcy5fbW9kZWxCeVZhbHVlIHx8IHRoaXMucXVlcnksXG4gICAgICAgICAgICAgICAgb2xkVmFsOiAodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gKHRoaXMucXVlcnkgIT09ICcnKTtcbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyZWQgZm9yIGVudGVyIGV2ZW50XG4gICAgcHJpdmF0ZSBoYW5kbGVFbnRlckV2ZW50KCRldmVudCkge1xuICAgICAgICAvLyBzdWJtaXQgZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlcmUgaXMgbm8gc2VhcmNoIHJlc3VsdHNcbiAgICAgICAgaWYgKCFnZXQodGhpcy50eXBlYWhlYWQsICdtYXRjaGVzLmxlbmd0aCcpKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoU2VsZWN0KCRldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVHJpZ2dlcnJlZCB3aGVuIHR5cGVhaGVhZCBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAgcHJpdmF0ZSBvblNlYXJjaFNlbGVjdCgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGxldCBpdGVtO1xuICAgICAgICAvLyBXTVMtMjI1MzM6IEJlZm9yZSBhZGRpbmcgYWN0aXZlIHR5cGVhaGVhZCBlbCwgY2hlY2sgaWYgdGhlIGVudGVyZWQgcXVlcnkgbWF0Y2hlcyB3aXRoIHRoZSBhY3RpdmUgZWwgb3Igbm90XG4gICAgICAgIGNvbnN0IGlzUXVlcnlNYXRjaCA9IHRoaXMudHlwZWFoZWFkQ29udGFpbmVyPy5hY3RpdmU/LnZhbHVlID09PSB0aGlzLnF1ZXJ5O1xuXG4gICAgICAgIGlmICh0aGlzLnR5cGVhaGVhZENvbnRhaW5lciAmJiB0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5hY3RpdmUgJiYgaXNRdWVyeU1hdGNoKSB7XG4gICAgICAgICAgICBpdGVtID0gdGhpcy50eXBlYWhlYWRDb250YWluZXIuYWN0aXZlLml0ZW07XG4gICAgICAgIH1cbiAgICAgICAgJGV2ZW50ID0gdGhpcy5ldmVudERhdGEoJGV2ZW50LCBpdGVtIHx8IHt9KTtcblxuICAgICAgICAvLyBzZWFyY2hPbiBpcyBzZXQgYXMgb25CdG5DbGljaywgdGhlbiBpbnZva2UgdGhlIHNlYXJjaCBhcGkgY2FsbCBtYW51YWxseS5cbiAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRlT25LZXlQcmVzcygpKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIHRyaWdnZXIgdGhlIHR5cGVhaGVhZCBjaGFuZ2UgbWFudWFsbHkgdG8gZmV0Y2ggdGhlIG5leHQgc2V0IG9mIHJlc3VsdHMuXG4gICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC5vbklucHV0KHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMucXVlcnkgLy8gZHVtbXkgZGF0YSB0byBub3RpZnkgdGhlIG9ic2VydmFibGVzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2hlbiBtYXRjaGVzIGFyZSBhdmFpbGFibGUuXG4gICAgICAgIGlmICh0aGlzLnR5cGVhaGVhZENvbnRhaW5lciAmJiB0aGlzLmxpRWxlbWVudHMubGVuZ3RoICYmIGlzUXVlcnlNYXRjaCkge1xuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWRDb250YWluZXIuc2VsZWN0QWN0aXZlTWF0Y2goKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IHRoaXMucXVlcnk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3N1Ym1pdCcsIHsgJGV2ZW50IH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnZva2VPbkJlZm9yZVNlcnZpY2VDYWxsKGlucHV0RGF0YSkge1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXNlcnZpY2VjYWxsJywgeyBpbnB1dERhdGEgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRyb3Bkb3duT3BlbigpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJEYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2V0dGluZyB0aGUgdWxFbGVtZW50cywgbGlFbGVtZW50IG9uIHR5cGVhaGVhZENvbnRhaW5lci5cbiAgICAgICAgLy8gYXMgd2UgYXJlIHVzaW5nIGN1c3RvbU9wdGlvbiB0ZW1wbGF0ZSwgbGlFbGVtZW50cyBhcmUgbm90IGF2YWlsYWJsZSBvbiB0eXBlYWhlYWRDb250YWluZXIgc28gYXBwZW5kIHRoZW0gZXhwbGljaXRseS5cbiAgICAgICAgY29uc3QgZm4gPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pc09wZW4gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWRDb250YWluZXIgPSB0aGlzLnR5cGVhaGVhZC5fY29udGFpbmVyIHx8ICh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLl90eXBlYWhlYWQuaW5zdGFuY2U7XG4gICAgICAgICAgICAodGhpcy50eXBlYWhlYWRDb250YWluZXIgYXMgYW55KS5saUVsZW1lbnRzID0gdGhpcy5saUVsZW1lbnRzO1xuICAgICAgICAgICAgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyIGFzIGFueSkudWxFbGVtZW50ID0gdGhpcy51bEVsZW1lbnQ7XG4gICAgICAgICAgICBhZGp1c3RDb250YWluZXJQb3NpdGlvbigkKCd0eXBlYWhlYWQtY29udGFpbmVyJyksIHRoaXMubmF0aXZlRWxlbWVudCwgKHRoaXMudHlwZWFoZWFkIGFzIGFueSkuX3R5cGVhaGVhZCwgJCgndHlwZWFoZWFkLWNvbnRhaW5lciAuZHJvcGRvd24tbWVudScpKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBmbigpO1xuXG4gICAgICAgIC8vIG9wZW4gZnVsbC1zY3JlZW4gc2VhcmNoIHZpZXdcbiAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVBdXRvQ29tcGxldGUoKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmdWxsLXNjcmVlbicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJNb2JpbGVBdXRvQ29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRyb3Bkb3duRWwgPSB0aGlzLmRyb3Bkb3duRWwuY2xvc2VzdCgndHlwZWFoZWFkLWNvbnRhaW5lcicpO1xuXG4gICAgICAgICAgICBkcm9wZG93bkVsLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQuZmluZCgnaW5wdXQnKS5maXJzdCgpKTtcbiAgICAgICAgICAgIGNvbnN0IHNjcmVlbkhlaWdodCA9IHRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnLmFwcC1jb250ZW50JykuaGVpZ2h0KCk7XG4gICAgICAgICAgICBkcm9wZG93bkVsLmNzcyh7IHBvc2l0aW9uOiAncmVsYXRpdmUnLCB0b3A6IDAsIGhlaWdodDogc2NyZWVuSGVpZ2h0ICsgJ3B4JyB9KTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gdGhpcy5xdWVyeSAmJiB0aGlzLnF1ZXJ5ICE9PSAnJztcblxuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlKSAmJiAhdGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclNlYXJjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3ROZXh0KCkge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy50eXBlYWhlYWRDb250YWluZXIubWF0Y2hlcztcblxuICAgICAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IG1hdGNoZXMuaW5kZXhPZih0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5hY3RpdmUpO1xuXG4gICAgICAgIC8vIG9uIGtleWRvd24sIGlmIHNjcm9sbCBpcyBhdCB0aGUgYm90dG9tIGFuZCBuZXh0IHBhZ2UgcmVjb3JkcyBhcmUgYXZhaWxhYmxlLCBmZXRjaCBuZXh0IHBhZ2UgaXRlbXMuXG4gICAgICAgIGlmICghdGhpcy5fbG9hZGluZ0l0ZW1zICYmICF0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlICYmIGluZGV4ICsgMSA+IG1hdGNoZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgLy8gaW5kZXggaXMgc2F2ZWQgaW4gb3JkZXIgdG8gc2VsZWN0IHRoZSBsYXN0U2VsZWN0ZWQgaXRlbSBpbiB0aGUgZHJvcGRvd24gYWZ0ZXIgZmV0Y2hpbmcgbmV4dCBwYWdlIGl0ZW1zLlxuICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9yZURhdGEodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldExhc3RBY3RpdmVNYXRjaEFzU2VsZWN0ZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhc3RTZWxlY3RlZEluZGV4KSB7XG4gICAgICAgICAgICAodGhpcy50eXBlYWhlYWRDb250YWluZXIgYXMgYW55KS5fYWN0aXZlID0gdGhpcy50eXBlYWhlYWRDb250YWluZXIubWF0Y2hlc1t0aGlzLmxhc3RTZWxlY3RlZEluZGV4XTtcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLm5leHRBY3RpdmVNYXRjaCgpO1xuICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlclNlYXJjaCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UgfHwgIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2Z1bGwtc2NyZWVuJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0eXBlQWhlYWREcm9wRG93biA9IHRoaXMuZHJvcGRvd25FbDtcbiAgICAgICAgY29uc3QgJGxhc3RJdGVtID0gdHlwZUFoZWFkRHJvcERvd24uZmluZCgnbGknKS5sYXN0KCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgbGFzdCBpdGVtIGlzIG5vdCBiZWxvdyB0aGUgZnVsbCBzY3JlZW5cbiAgICAgICAgaWYgKCRsYXN0SXRlbS5sZW5ndGggJiYgdHlwZUFoZWFkRHJvcERvd24ubGVuZ3RoICYmICh0eXBlQWhlYWREcm9wRG93bi5oZWlnaHQoKSArIHR5cGVBaGVhZERyb3BEb3duLnBvc2l0aW9uKCkudG9wID4gJGxhc3RJdGVtLmhlaWdodCgpICsgJGxhc3RJdGVtLnBvc2l0aW9uKCkudG9wKSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9yZURhdGEodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVXBkYXRlT25LZXlQcmVzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNob24gPT09ICd0eXBpbmcnO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVib3VuY2VEZWZhdWx0UXVlcnkoZGF0YSkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0UXVlcnlJbnZva2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nZXREYXRhU291cmNlKGRhdGEsIHRydWUpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdFF1ZXJ5ID0gdGhpcy5xdWVyeSA9IHRoaXMucXVlcnlNb2RlbFswXS5sYWJlbCB8fCAnJztcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSB0aGlzLnF1ZXJ5TW9kZWxbMF0udmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeUtleSA9IHRoaXMucXVlcnlNb2RlbFswXS5rZXk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93Q2xvc2VidG4gPSAodGhpcy5xdWVyeSAhPT0gJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNsZWFyRGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChnZXQoKHRoaXMudHlwZWFoZWFkIGFzIGFueSksICdfdHlwZWFoZWFkLmlzU2hvd24nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJ5RGF0YXZhbHVlKGRhdGEpIHtcbiAgICAgICAgdGhpcy51cGRhdGVCeURhdGFzZXQoZGF0YSk7XG4gICAgICAgIHRoaXMudXBkYXRlQnlEYXRhU291cmNlKGRhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQnlEYXRhU291cmNlKGRhdGEpIHtcbiAgICAgICAgLy8gdmFsdWUgaXMgcHJlc2VudCBidXQgdGhlIGNvcnJlc3BvbmRpbmcga2V5IGlzIG5vdCBmb3VuZCB0aGVuIGZldGNoIG5leHQgc2V0XG4gICAgICAgIC8vIG1vZGVsQnlLZXkgd2lsbCBiZSBzZXQgb25seSB3aGVuIGRhdGF2YWx1ZSBpcyBhdmFpbGFibGUgaW5zaWRlIHRoZSBsb2NhbERhdGEgb3RoZXJ3aXNlIG1ha2UgYSBOL3cgY2FsbC5cbiAgICAgICAgaWYgKGlzRGVmaW5lZChkYXRhKSAmJiAhaXNPYmplY3QoZGF0YSkgJiYgdGhpcy5kYXRhc291cmNlICYmICFpc0RlZmluZWQodGhpcy5fbW9kZWxCeUtleSkgJiYgdGhpcy5kYXRhZmllbGQgIT09IEFMTEZJRUxEUykge1xuICAgICAgICAgICAgLy8gQXZvaWQgbWFraW5nIGRlZmF1bHQgcXVlcnkgaWYgcXVlcnlNb2RlbCBhbHJlYWR5IGV4aXN0cy5cbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5xdWVyeU1vZGVsKSAmJiAhaXNFbXB0eSh0aGlzLnF1ZXJ5TW9kZWwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhdmFsdWVGcm9tUXVlcnlNb2RlbCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTWFrZSBkZWZhdWx0IHF1ZXJ5IGNhbGwgb25seSB3aGVuIGRhdGFzb3VyY2Ugc3VwcG9ydHMgQ1JVRCAobGl2ZSB2YXJpYWJsZSkuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RlZmF1bHRRdWVyeUludm9rZWQgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uU1VQUE9SVFNfQ1JVRCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYm91bmNlRGVmYXVsdFF1ZXJ5KGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlcyB0aGUgbW9kZWwgdmFsdWUgdXNpbmcgcXVlcnlNb2RlbFxuICAgIHByaXZhdGUgdXBkYXRlRGF0YXZhbHVlRnJvbVF1ZXJ5TW9kZWwoKSB7XG4gICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5xdWVyeU1vZGVsKSkge1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gaXNBcnJheSh0aGlzLnF1ZXJ5TW9kZWwpID8gKHRoaXMucXVlcnlNb2RlbFswXSBhcyBEYXRhU2V0SXRlbSkudmFsdWUgOiB0aGlzLnF1ZXJ5TW9kZWw7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5S2V5ID0gaXNBcnJheSh0aGlzLnF1ZXJ5TW9kZWwpID8gKHRoaXMucXVlcnlNb2RlbFswXSBhcyBEYXRhU2V0SXRlbSkua2V5IDogdGhpcy5xdWVyeU1vZGVsO1xuICAgICAgICAgICAgdGhpcy50b0JlUHJvY2Vzc2VkRGF0YXZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVCeURhdGFzZXQoZGF0YTogYW55KSB7XG4gICAgICAgIC8vIGRlZmF1bHQgcXVlcnkgaXMgYWxyZWFkeSBpbnZva2VkIHRoZW4gZG8gbm90IG1ha2Ugb3RoZXIgZGVmYXVsdCBxdWVyeSBjYWxsLlxuICAgICAgICAvLyBGb3IgbG9jYWwgc2VhcmNoIGkuZS4gc2VhcmNoa2V5IGlzIHVuZGVmaW5lZCwgZG8gbm90IHJldHVybiwgdmVyaWZ5IHRoZSBkYXRhdmFsdWUgYWdhaW5zdCB0aGUgZGF0YXNldEl0ZW1zIC5cbiAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRRdWVyeUludm9rZWQgJiYgdGhpcy5zZWFyY2hrZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSBmaW5kKHRoaXMuZGF0YXNldEl0ZW1zLCAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChpc09iamVjdChpdGVtLnZhbHVlKSA/IGlzRXF1YWwoaXRlbS52YWx1ZSwgZGF0YSkgOiAodG9TdHJpbmcoaXRlbS52YWx1ZSkpLnRvTG93ZXJDYXNlKCkgPT09ICh0b1N0cmluZyhkYXRhKSkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgZGVmYXVsdCBvbmx5IHdoZW4gaXQgaXMgYXZhaWxhYmxlIGluIGRhdGFzZXQuXG4gICAgICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IFtzZWxlY3RlZEl0ZW1dO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YWZpZWxkID09PSBBTExGSUVMRFMgJiYgaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IHRoaXMuZ2V0VHJhbnNmb3JtZWREYXRhKGV4dHJhY3REYXRhQXNBcnJheShkYXRhKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZXNldHRpbmcgdGhlIHF1ZXJ5TW9kZWwgb25seSB3aGVuIHByZXZEYXRhdmFsdWUgaXMgZXF1YWwgdG8gZGF0YVxuICAgICAgICAgICAgaWYgKCh0aGlzIGFzIGFueSkucHJldkRhdGF2YWx1ZSAhPT0gZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlRGF0YXZhbHVlRnJvbVF1ZXJ5TW9kZWwoKTtcblxuICAgICAgICAvLyBTaG93IHRoZSBsYWJlbCB2YWx1ZSBvbiBpbnB1dC5cbiAgICAgICAgdGhpcy5fbGFzdFF1ZXJ5ID0gdGhpcy5xdWVyeSA9IGlzRGVmaW5lZCh0aGlzLnF1ZXJ5TW9kZWwpICYmIHRoaXMucXVlcnlNb2RlbC5sZW5ndGggPyBnZXQodGhpcy5xdWVyeU1vZGVsWzBdLCAnbGFiZWwnKSA6ICcnO1xuICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9ICh0aGlzLnF1ZXJ5ICE9PSAnJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgaGF2ZSBsYXN0IHNlYXJjaCByZXN1bHRzIHRoZW4gb3BlbiBkcm9wZG93biBvbiBmb2N1c1xuICAgIHByaXZhdGUgaGFuZGxlRm9jdXMoJGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdzZWFyY2gnICYmIHRoaXMucXVlcnkgPT09IHRoaXMuX2xhc3RRdWVyeSAmJiB0aGlzLl9sYXN0UmVzdWx0KSB7XG4gICAgICAgICAgICAodGhpcy50eXBlYWhlYWQgYXMgYW55KS5rZXlVcEV2ZW50RW1pdHRlci5lbWl0KHRoaXMucXVlcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeVN1YnNjcmliZXIoKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEVsID0gJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoJy5hcHAtY29tcG9zaXRlLXdpZGdldC5jYXB0aW9uLWZsb2F0aW5nJyk7XG4gICAgICAgIGlmIChwYXJlbnRFbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFwcC5ub3RpZnkoJ2NhcHRpb25Qb3NpdGlvbkFuaW1hdGUnLCB7ZGlzcGxheVZhbDogdHJ1ZSwgbmF0aXZlRWw6IHBhcmVudEVsfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHByb3ZpZGVzIHRoZSBmaWx0ZXJlZCBkYXRhIGZyb20gdGhlIGRhdGFzb3VyY2UuXG4gICAgcHVibGljIGdldERhdGFTb3VyY2UocXVlcnk6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcsIHNlYXJjaE9uRGF0YUZpZWxkPzogYm9vbGVhbiwgbmV4dEl0ZW1JbmRleD86IG51bWJlcik6IFByb21pc2U8RGF0YVNldEl0ZW1bXT4ge1xuICAgICAgICAvLyBGb3IgZGVmYXVsdCBxdWVyeSwgc2VhcmNoT25EYXRhRmllbGQgaXMgc2V0IHRvIHRydWUsIHRoZW4gZG8gbm90IG1ha2UgYSBuL3cgY2FsbCB3aGVuIGRhdGFmaWVsZCBpcyBBTExGSUVMRFNcbiAgICAgICAgaWYgKHNlYXJjaE9uRGF0YUZpZWxkICYmIHRoaXMuZGF0YWZpZWxkID09PSBBTExGSUVMRFMpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb3IgZGVmYXVsdCBkYXRhdmFsdWUsIHNlYXJjaCBrZXkgYXMgdG8gYmUgb24gZGF0YWZpZWxkIHRvIGdldCB0aGUgZGVmYXVsdCBkYXRhIGZyb20gdGhlIGZpbHRlciBjYWxsLlxuICAgICAgICBjb25zdCBkYXRhQ29uZmlnOiBJRGF0YVByb3ZpZGVyQ29uZmlnID0ge1xuICAgICAgICAgICAgZGF0YXNldDogdGhpcy5kYXRhc2V0ID8gY29udmVydERhdGFUb09iamVjdCh0aGlzLmRhdGFzZXQpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYmluZGRhdGFzZXQ6IHRoaXMuYmluZGRhdGFzZXQsXG4gICAgICAgICAgICBkYXRhc291cmNlOiB0aGlzLmRhdGFzb3VyY2UsXG4gICAgICAgICAgICBkYXRhZmllbGQ6IHRoaXMuZGF0YWZpZWxkLFxuICAgICAgICAgICAgaGFzRGF0YTogdGhpcy5kYXRhc2V0ICYmIHRoaXMuZGF0YXNldC5sZW5ndGgsXG4gICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICBpc0xvY2FsRmlsdGVyOiAhdGhpcy5zZWFyY2hrZXksXG4gICAgICAgICAgICBzZWFyY2hLZXk6IHNlYXJjaE9uRGF0YUZpZWxkID8gdGhpcy5kYXRhZmllbGQgOiB0aGlzLnNlYXJjaGtleSxcbiAgICAgICAgICAgIC8vIGRlZmF1bHQgc2VhcmNoIGNhbGwgbWF0Y2ggbW9kZSBzaG91bGQgYmUgc3RhcnRpZ25vcmVjYXNlXG4gICAgICAgICAgICBtYXRjaE1vZGU6IHNlYXJjaE9uRGF0YUZpZWxkID8gJ3N0YXJ0aWdub3JlY2FzZScgOiB0aGlzLm1hdGNobW9kZSxcbiAgICAgICAgICAgIGNhc2VzZW5zaXRpdmU6IHRoaXMuY2FzZXNlbnNpdGl2ZSxcbiAgICAgICAgICAgIGlzZm9ybWZpZWxkOiB0aGlzLmlzZm9ybWZpZWxkLFxuICAgICAgICAgICAgb3JkZXJieTogdGhpcy5vcmRlcmJ5LFxuICAgICAgICAgICAgbGltaXQ6IHRoaXMubGltaXQsXG4gICAgICAgICAgICBwYWdlc2l6ZTogdGhpcy5wYWdlc2l6ZSxcbiAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgIG9uQmVmb3Jlc2VydmljZWNhbGw6IHRoaXMuaW52b2tlT25CZWZvcmVTZXJ2aWNlQ2FsbC5iaW5kKHRoaXMpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YW9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRhdGFDb25maWcuZGF0YW9wdGlvbnMgPSB0aGlzLmRhdGFvcHRpb25zO1xuICAgICAgICAgICAgZGF0YUNvbmZpZy52aWV3UGFyZW50ID0gdGhpcy52aWV3UGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXIuZmlsdGVyKGRhdGFDb25maWcpXG4gICAgICAgICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHJlc3BvbnNlIGZyb20gZGF0YVByb3ZpZGVyIHJldHVybnMgYWx3YXlzIGRhdGEgb2JqZWN0LlxuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2UuZGF0YSB8fCByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAvLyBmb3Igc2VydmljZSB2YXJpYWJsZSwgdXBkYXRpbmcgdGhlIGRhdGFzZXQgb25seSBpZiBpdCBpcyBub3QgZGVmaW5lZCBvciBlbXB0eVxuICAgICAgICAgICAgICAgIGlmICgoIWlzRGVmaW5lZCh0aGlzLmRhdGFzZXQpIHx8ICF0aGlzLmRhdGFzZXQubGVuZ3RoKSAmJiB0aGlzLmRhdGFQcm92aWRlci51cGRhdGVEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNldCA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlci5oYXNNb3JlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZERhdGFzZXQgPSB0aGlzLmZvcm1hdHRlZERhdGFzZXQuY29uY2F0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZERhdGFzZXQgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBleHBsaWNpdGx5IHNldHRpbmcgdGhlIG9wdGlvbnNsaW1pdCBhcyB0aGUgbWF0Y2hlcyBtb3JlIHRoYW4gMjAgd2lsbCBiZSBpZ25vcmVkIGlmIG9wdGlvbnNsaW1pdCBpcyBub3Qgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm1hdHRlZERhdGFzZXQubGVuZ3RoID4gMjAgJiYgIWlzRGVmaW5lZCh0aGlzLmxpbWl0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC50eXBlYWhlYWRPcHRpb25zTGltaXQgPSB0aGlzLmZvcm1hdHRlZERhdGFzZXQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIEluIG1vYmlsZSwgdHJpZ2dlciB0aGUgc2VhcmNoIGJ5IGRlZmF1bHQgdW50aWwgdGhlIHJlc3VsdHMgaGF2ZSBoZWlnaHQgdXB0byBwYWdlIGhlaWdodC4gT3RoZXIgcmVzdWx0cyBjYW4gYmUgZmV0Y2hlZCBieSBzY3JvbGxpbmdcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzT3BlbiAmJiB0aGlzLmlzTW9iaWxlQXV0b0NvbXBsZXRlKCkgJiYgIWlzVW5kZWZpbmVkKHRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UpICYmICF0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclNlYXJjaCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHRoaXMuZ2V0VHJhbnNmb3JtZWREYXRhKHRoaXMuZm9ybWF0dGVkRGF0YXNldCwgbmV4dEl0ZW1JbmRleCk7XG5cbiAgICAgICAgICAgICAgICAvLyByZXN1bHQgY29udGFpbnMgdGhlIGRhdGFmaWVsZCB2YWx1ZXMuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gbWFwKHRyYW5zZm9ybWVkRGF0YSwgJ3ZhbHVlJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkRGF0YTtcbiAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgKGRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TGFzdEFjdGl2ZU1hdGNoQXNTZWxlY3RlZCgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAzMCkpKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBXaGVuIG5vIHJlc3VsdCBpcyBmb3VuZCwgc2V0IHRoZSBkYXRhdmFsdWUgdG8gdW5kZWZpbmVkLlxuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IChxdWVyeSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBvbiBmb2N1c291dCBpLmUuIG9uIG90aGVyIHdpZGdldCBmb2N1cywgaWYgbi93IGlzIHBlbmRpbmcgbG9hZGluZyBpY29uIGlzIHNob3duLCB3aGVuIGRhdGEgaXMgYXZhaWxhYmxlIHRoZW4gZHJvcGRvd24gaXMgc2hvd24gYWdhaW4uXG4gICAgICAgICAgICAgICAgLy8gb24gdW5zdWJzY3JpYmluZyBkbyBub3Qgc2hvdyB0aGUgcmVzdWx0cy5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdW5zdWJzY3JpYmVEdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdFJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcGFyZW50IGNvbnRleHQgaS5lLiBQYWdlIGNvbnRleHQgYW5kIG5vdCBwYXJlbnQgY29tcG9uZW50J3MgY29udGV4dC5cbiAgICBwcml2YXRlIGdldENvbnRleHQoY29udGV4dCkge1xuICAgICAgICBpZiAoY29udGV4dCAmJiBnZXQoY29udGV4dCwgJ3dpZGdldCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb250ZXh0KGNvbnRleHQudmlld1BhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRyYW5zZm9ybWVkRGF0YShkYXRhOiBhbnksIGl0ZW1JbmRleD86IG51bWJlciwgaXNjdXN0b20/OiBib29sZWFuKTogRGF0YVNldEl0ZW1bXSB7XG4gICAgICAgIGlmIChpc0RlZmluZWQoaXRlbUluZGV4KSkge1xuICAgICAgICAgICAgaXRlbUluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0cmFuc2Zvcm1Gb3JtRGF0YShcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udGV4dCh0aGlzLnZpZXdQYXJlbnQpLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHRoaXMuZGF0YWZpZWxkLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogdGhpcy5kaXNwbGF5bGFiZWwgfHwgdGhpcy5kaXNwbGF5ZmllbGQsXG4gICAgICAgICAgICAgICAgZGlzcGxheUV4cHI6IGlzY3VzdG9tID8gJycgOiB0aGlzLmRpc3BsYXlleHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIGJpbmREaXNwbGF5RXhwcjogaXNjdXN0b20gPyAnJyA6IHRoaXMuYmluZGRpc3BsYXlsYWJlbCxcbiAgICAgICAgICAgICAgICBiaW5kRGlzcGxheUltZ1NyYzogdGhpcy5iaW5kZGlzcGxheWltYWdlc3JjLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlJbWdTcmM6IHRoaXMuZGlzcGxheWltYWdlc3JjXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXRlbUluZGV4LFxuICAgICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZ2V0VW5pcU9ianNCeURhdGFGaWVsZCh0cmFuc2Zvcm1lZERhdGEsIHRoaXMuZGF0YWZpZWxkLCB0aGlzLmRpc3BsYXlmaWVsZCB8fCB0aGlzLmRpc3BsYXlsYWJlbCwgdG9Cb29sZWFuKHRoaXMuYWxsb3dlbXB0eSkpO1xuICAgIH1cblxuICAgIC8vIE9wdGlvbnNMaXN0VGVtcGxhdGUgbGlzdGVucyB0byB0aGUgc2Nyb2xsIGV2ZW50IGFuZCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLlxuICAgIHB1YmxpYyBvblNjcm9sbCgkc2Nyb2xsRWw6IEVsZW1lbnQsIGV2dDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSAkc2Nyb2xsRWwuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgICAgY2xpZW50SGVpZ2h0ID0gJHNjcm9sbEVsLmNsaWVudEhlaWdodDtcblxuICAgICAgICAvLyBJZiBzY3JvbGwgaXMgYXQgdGhlIGJvdHRvbSBhbmQgbm8gcmVxdWVzdCBpcyBpbiBwcm9ncmVzcyBhbmQgbmV4dCBwYWdlIHJlY29yZHMgYXJlIGF2YWlsYWJsZSwgZmV0Y2ggbmV4dCBwYWdlIGl0ZW1zLlxuICAgICAgICBpZiAoIXRoaXMuX2xvYWRpbmdJdGVtcyAmJiAhdGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSAmJiAoJHNjcm9sbEVsLnNjcm9sbFRvcCArIGNsaWVudEhlaWdodCA+PSB0b3RhbEhlaWdodCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmVEYXRhKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIGlmICghaXNEZWZpbmVkKHRoaXMubWluY2hhcnMpKSB7XG4gICAgICAgICAgICAvLyBmb3IgYXV0b2NvbXBsZXRlIHNldCB0aGUgbWluY2hhcnMgdG8gMFxuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1pbmNoYXJzID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5taW5jaGFycyA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gdGhpcy5pc1VwZGF0ZU9uS2V5UHJlc3MoKTtcblxuICAgICAgICAvLyBieSBkZWZhdWx0IGZvciBhdXRvY29tcGxldGUgZG8gbm90IHNob3cgdGhlIHNlYXJjaCBpY29uXG4gICAgICAgIC8vIGJ5IGRlZmF1bHQgc2hvdyB0aGUgc2VhcmNoaWNvbiBmb3IgdHlwZSA9IHNlYXJjaFxuICAgICAgICB0aGlzLnNob3dzZWFyY2hpY29uID0gaXNEZWZpbmVkKHRoaXMuc2hvd3NlYXJjaGljb24pID8gdGhpcy5zaG93c2VhcmNoaWNvbiA6ICh0aGlzLnR5cGUgPT09ICdzZWFyY2gnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcblxuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50LCB0aGlzKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJUYXJnZXQgPSBnZXRDb250YWluZXJUYXJnZXRDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaElucHV0RWwgPSAkKCcuYXBwLXNlYXJjaC1pbnB1dCcpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRFbCkge1xuICAgICAgICAgICAgc2VhcmNoSW5wdXRFbC5yZW1vdmVBdHRyKCdhcmlhLWV4cGFuZGVkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV2ZW50RGF0YSgkZXZlbnQsIGl0ZW0pIHtcbiAgICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICAgICAgJGV2ZW50WydkYXRhJ10gPSB7XG4gICAgICAgICAgICAgICAgaXRlbSAgOiBpdGVtLmRhdGFPYmplY3QsXG4gICAgICAgICAgICAgICAgbW9kZWwgOiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgIGxhYmVsIDogaXRlbS5sYWJlbCxcbiAgICAgICAgICAgICAgICBxdWVyeSA6IHRoaXMucXVlcnlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJGV2ZW50O1xuICAgIH1cblxuICAgIC8vIHRyaWdnZXJlZCBvbiBzZWxlY3Qgb24gb3B0aW9uIGZyb20gdGhlIGxpc3QuIFNldCB0aGUgcXVlcnlNb2RlbCwgcXVlcnkgYW5kIG1vZGVsQnlLZXkgZnJvbSB0aGUgbWF0Y2hlZCBpdGVtLlxuICAgIHB1YmxpYyB0eXBlYWhlYWRPblNlbGVjdChtYXRjaDogVHlwZWFoZWFkTWF0Y2gsICRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IG1hdGNoLml0ZW07XG4gICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IGl0ZW07XG4gICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gaXRlbS5sYWJlbDtcbiAgICAgICAgdGhpcy5zaG93Q2xvc2VidG4gPSAodGhpcy5xdWVyeSAhPT0gJycpO1xuICAgICAgICAkZXZlbnQgPSAkZXZlbnQgfHwgdGhpcy4kdHlwZWFoZWFkRXZlbnQ7XG5cbiAgICAgICAgLy8gQXMgaXRlbS5rZXkgY2FuIHZhcnkgZnJvbSBrZXkgaW4gdGhlIGRhdGFzZXRJdGVtc1xuICAgICAgICB0aGlzLl9tb2RlbEJ5S2V5ID0gaXRlbS5rZXk7XG4gICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IGl0ZW0udmFsdWU7XG5cbiAgICAgICAgJGV2ZW50ID0gdGhpcy5ldmVudERhdGEoJGV2ZW50LCBpdGVtKTtcblxuICAgICAgICB0aGlzLmludm9rZU9uVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCAkZXZlbnQgfHwge30pO1xuICAgICAgICAvLyB1cGRhdGluZyB0aGUgdmFyaWFibGUgYm91bmQgdG8gZGVmYXVsdCB2YWx1ZSBhcyBpbnZva2VPbkNoYW5nZSBpcyBub3QgdXBkYXRpbmcgdGhlIHZhcmlhYmxlLlxuICAgICAgICBpZiAodGhpcy5kYXRhdmFsdWUgIT09ICh0aGlzIGFzIGFueSkucHJldkRhdGF2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVCb3VuZFZhcmlhYmxlKHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZnVsbC1zY3JlZW4nKSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVNlYXJjaCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2VsZWN0JywgeyAkZXZlbnQsIHNlbGVjdGVkVmFsdWU6IHRoaXMuZGF0YXZhbHVlIH0pO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3N1Ym1pdCcsIHsgJGV2ZW50IH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlUHJldkRhdGF2YWx1ZSh0aGlzLmRhdGF2YWx1ZSk7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y6IGFueSkge1xuICAgICAgICBpZiAoa2V5ID09PSAndGFiaW5kZXgnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCYWNrd2FyZCBjb21wYXRhYmlsaXR5IGZyb20gMTAuMy4xIHRvIDEwLjMuMlxuICAgICAgICAvLyAxMC4zLjEgd2UgaGFkIGRpc3BsYXlsYWJlbCBhcyBtb2RhbCB2YWx1ZVxuICAgICAgICAvLyBGcm9tIDEwLjMuMiBvbndvcmRzIHdlIHdpbGwgYmUgaGF2aW5nIGRpc3BsYXlleHByZXNpb24gYXMgbW9kYWwgdmFsdWVcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScgJiYga2V5ID09PSAnZGlzcGxheWxhYmVsJyAmJiB0aGlzLmRpc3BsYXlsYWJlbCAmJiAoIXRoaXMuZGlzcGxheWV4cHJlc3Npb24gfHwgKHRoaXMuZGlzcGxheWV4cHJlc3Npb24gJiYgIXRoaXMuZGF0YXNvdXJjZSkpKSAge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZXhwcmVzc2lvbiA9IHRoaXMuZGlzcGxheWxhYmVsO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5bGFiZWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGVuIGRhdGFvcHRpb25zIGFyZSBwcm92aWRlZCBhbmQgdGhlcmUgaXMgbm8gZGlzcGxheWxhYmVsIGdpdmVuIHRoZW4gZGlzcGxheWxhYmVsIGlzIHNldCBhcyB0aGUgcmVsYXRlZGZpZWxkXG4gICAgICAgIGlmIChrZXkgPT09ICdkaXNwbGF5bGFiZWwnICYmIHRoaXMuZGF0YW9wdGlvbnMgJiYgdGhpcy5iaW5kZGlzcGxheWxhYmVsID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gZ2V0KHRoaXMuX21vZGVsQnlWYWx1ZSwgbnYpIHx8IHRoaXMuX21vZGVsQnlWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdoZW4gc2VhcmNoIGlzIGRpc2FibGVkLCBkbyBub3QgbG9hZCBhbnkgbW9yZSBkYXRhIG9yIGp1c3QgY2xlYXIgdGhlIGRhdGEgdGhhdCBpcyBhbHJlYWR5IGluIHByb2Nlc3Mgb3IgbG9hZGVkLlxuICAgICAgICBpZiAoa2V5ID09PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgICAgICBpZiAobnYgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckRhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckRhdGEgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChnZXQoKHRoaXMudHlwZWFoZWFkIGFzIGFueSksICdfdHlwZWFoZWFkLmlzU2hvd24nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNjdXN0b21JdGVtVGVtcGxhdGUgbGV0LW1vZGVsPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgbGV0LXF1ZXJ5PVwicXVlcnlcIiBsZXQtbWF0Y2g9XCJtYXRjaFwiPlxuICA8IS0tIERlZmF1bHQgaXRlbSB0ZW1wbGF0ZSAtLT5cbiAgQGlmICghY29udGVudCkge1xuICAgIDxhPlxuICAgICAgQGlmIChtb2RlbC5pbWdTcmMpIHtcbiAgICAgICAgPGltZyBbc3JjXT1cIm1vZGVsLmltZ1NyY1wiIGFsdD1cIlNlYXJjaFwiIFtzdHlsZS53aWR0aF09XCJpbWFnZXdpZHRoXCI+XG4gICAgICB9XG4gICAgICA8c3BhbiBbdGl0bGVdPVwibW9kZWwubGFiZWxcIiBbaW5uZXJIdG1sXT1cImhpZ2hsaWdodChtYXRjaCwgcXVlcnkpIHx8IG1vZGVsLmxhYmVsXCI+PC9zcGFuPlxuICAgIDwvYT5cbiAgfVxuICA8IS0tIEN1c3RvbSBwYXJ0aWFsIHRlbXBsYXRlIC0tPlxuICBAaWYgKGNvbnRlbnQpIHtcbiAgICA8YSBbbmdDbGFzc109XCJ7Y3VzdG9tVGVtcGxhdGU6IGNvbnRlbnR9XCIgcGFydGlhbENvbnRhaW5lciBbd21JdGVtVGVtcGxhdGVdPVwiY29udGVudFwiIFt1c2VyQ29tcG9uZW50UGFyYW1zXT1cIm1hdGNoLml0ZW1cIj5cbiAgICAgIDxkaXYgcGFydGlhbC1jb250YWluZXItdGFyZ2V0PjwvZGl2PlxuICAgIDwvYT5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjdXN0b21MaXN0VGVtcGxhdGUgbGV0LW1hdGNoZXM9XCJtYXRjaGVzXCIgbGV0LWl0ZW1UZW1wbGF0ZT1cIml0ZW1UZW1wbGF0ZVwiIGxldC1xdWVyeT1cInF1ZXJ5XCI+XG4gIDx1bCAjdWxFbGVtZW50IGNsYXNzPVwiYXBwLXNlYXJjaCBkcm9wZG93bi1tZW51XCIgc2Nyb2xsYWJsZT5cbiAgICBAZm9yIChtYXRjaCBvZiBtYXRjaGVzOyB0cmFjayBtYXRjaDsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgIDxsaSAjbGlFbGVtZW50cyBbbmdDbGFzc109XCJ7YWN0aXZlOiB0eXBlYWhlYWRDb250YWluZXIgJiYgdHlwZWFoZWFkQ29udGFpbmVyLmlzQWN0aXZlKG1hdGNoKSwgJ2xpc3QtZ3JvdXAtaGVhZGVyJzogbWF0Y2ggJiYgbWF0Y2guaXNIZWFkZXIoKX1cIlxuICAgICAgICAobW91c2VlbnRlcik9XCJ0eXBlYWhlYWRDb250YWluZXIuc2VsZWN0QWN0aXZlKG1hdGNoKTtcIlxuICAgICAgICAoY2xpY2spPVwibWF0Y2ggJiYgIW1hdGNoLmlzSGVhZGVyKCkgJiYgdHlwZWFoZWFkQ29udGFpbmVyLnNlbGVjdE1hdGNoKG1hdGNoLCAkZXZlbnQpOyAkdHlwZWFoZWFkRXZlbnQgPSAkZXZlbnQ7IG5vdGlmeVN1YnNjcmliZXIoKTtcIj5cbiAgICAgICAgPCEtLSBpdGVtVGVtcGxhdGUgY29tZXMgZnJvbSB0aGUgPGlucHV0PiAtLT5cbiAgICAgICAgQGlmIChtYXRjaC5pc0hlYWRlcigpKSB7XG4gICAgICAgICAgPGg0IGNsYXNzPVwiZ3JvdXAtdGl0bGVcIj57e21hdGNoLnZhbHVlfX08L2g0PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIW1hdGNoLmlzSGVhZGVyKCkpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06IG1hdGNoLml0ZW0sIGluZGV4OiBpLCBtYXRjaDogbWF0Y2gsIHF1ZXJ5OiBxdWVyeX1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC9saT5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cInN0YXR1c1wiIFtoaWRkZW5dPVwiX2xvYWRpbmdJdGVtcyB8fCAhKGRhdGFjb21wbGV0ZW1zZyAmJiBkYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSlcIj5cbiAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJkYXRhY29tcGxldGVtc2dcIj48L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInN0YXR1c1wiIFtoaWRkZW5dPVwiIV9sb2FkaW5nSXRlbXNcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2lyY2xlLW8tbm90Y2ggZmEtc3BpblwiPjwvaT5cbiAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJsb2FkaW5nZGF0YW1zZ1wiPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS1UaGlzIHRlbXBsYXRlIGlzIGZvciBzZWFyY2ggaW5zaWRlIG1vYmlsZSBuYXZiYXIuLS0+XG5AaWYgKG5hdnNlYXJjaGJhcikge1xuICA8aW5wdXQgW3RpdGxlXT1cInF1ZXJ5IHx8ICcnXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImFwcC10ZXh0Ym94IGZvcm0tY29udHJvbCBsaXN0LW9mLW9ianMgYXBwLXNlYXJjaC1pbnB1dFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCAnJ1wiXG4gICAgZm9jdXMtdGFyZ2V0XG4gICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbYXR0ci5hY2Nlc3NrZXldPVwic2hvcnRjdXRrZXlcIlxuICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgWyhuZ01vZGVsKV09XCJxdWVyeVwiXG4gICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXG4gICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICBbdHlwZWFoZWFkXT1cInR5cGVhaGVhZERhdGFTb3VyY2VcIlxuICAgIFt0eXBlYWhlYWRXYWl0TXNdPVwiZGVib3VuY2V0aW1lXCJcbiAgICBbdHlwZWFoZWFkSXRlbVRlbXBsYXRlXT1cImN1c3RvbUl0ZW1UZW1wbGF0ZVwiXG4gICAgW29wdGlvbnNMaXN0VGVtcGxhdGVdPVwiY3VzdG9tTGlzdFRlbXBsYXRlXCJcbiAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAoa2V5ZG93bik9XCJsaXN0ZW5RdWVyeSA9IHRydWVcIlxuICAgIChrZXlkb3duLmVudGVyKT1cIiR0eXBlYWhlYWRFdmVudCA9ICRldmVudDtoYW5kbGVFbnRlckV2ZW50KCRldmVudClcIlxuICAgIChrZXlkb3duLmFycm93ZG93bik9XCJzZWxlY3ROZXh0KCRldmVudClcIlxuICAgIChibHVyKT1cImludm9rZU9uVG91Y2hlZCgkZXZlbnQpXCJcbiAgICAoY2xpY2spPVwiaGFuZGxlRm9jdXMoJGV2ZW50KTtcIlxuICAgIChmb2N1cyk9XCJfdW5zdWJzY3JpYmVEdiA9IGZhbHNlOyBsaXN0ZW5RdWVyeSA9IHRydWU7IGhhbmRsZUZvY3VzKCRldmVudCk7IGludm9rZU9uRm9jdXMoJGV2ZW50KTtcIlxuICAgIChmb2N1c291dCk9XCJvbkZvY3VzT3V0KClcIlxuICAgIFt0eXBlYWhlYWRNaW5MZW5ndGhdPVwibWluY2hhcnNcIlxuICAgIFt0eXBlYWhlYWRPcHRpb25zTGltaXRdPVwibGltaXRcIlxuICAgICh0eXBlYWhlYWRMb2FkaW5nKT1cIl9sb2FkaW5nSXRlbXNcIlxuICAgICh0eXBlYWhlYWRPblNlbGVjdCk9XCJ0eXBlYWhlYWRPblNlbGVjdCgkZXZlbnQpXCJcbiAgICB0eXBlYWhlYWRPcHRpb25GaWVsZD1cImxhYmVsXCJcbiAgICBbdHlwZWFoZWFkR3JvdXBGaWVsZF09XCJncm91cGJ5ID8gJ2dyb3VwYnknIDogbnVsbFwiXG4gICAgW3R5cGVhaGVhZEFzeW5jXT1cInRydWVcIlxuICAgIFt0eXBlYWhlYWRTY3JvbGxhYmxlXT1cInRydWVcIlxuICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cInRydWVcIlxuICAgIFt0eXBlYWhlYWRPcHRpb25zSW5TY3JvbGxhYmxlVmlld109XCJvcHRpb25zbGltaXRpbnNjcm9sbGFibGV2aWV3XCJcbiAgICBbZHJvcHVwXT1cImRyb3B1cFwiXG4gICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYWxhYmVsIHx8ICdTZWFyY2ggZmllbGQnXCIvPlxuICA8aSBjbGFzcz1cImJ0bi1jbG9zZSB3aSB3aS1jYW5jZWxcIiBbaGlkZGVuXT1cIiFzaG93Q2xvc2VidG5cIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goJGV2ZW50KTtcIj48L2k+XG59IEBlbHNlIHtcbiAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4taWNvbiBmb3JtLWNvbnRyb2wtZmVlZGJhY2sgYmFjay1idG5cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAoY2xpY2spPVwiY2xvc2VTZWFyY2goKVwiPjxpIGNsYXNzPVwiYXBwLWljb24ge3tiYWNrc2VhcmNoaWNvbmNsYXNzfX1cIj48L2k+PC9idXR0b24+XG4gIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkJhY2sgYnV0dG9uPC9zcGFuPlxuICA8aW5wdXQgW3RpdGxlXT1cInF1ZXJ5IHx8ICcnXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImFwcC10ZXh0Ym94IGZvcm0tY29udHJvbCBsaXN0LW9mLW9ianMgYXBwLXNlYXJjaC1pbnB1dFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCAnJ1wiXG4gICAgZm9jdXMtdGFyZ2V0XG4gICAgW2NvbnRhaW5lcl09XCJjb250YWluZXJUYXJnZXQgfHwgJy53bS1hcHAnXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFthdHRyLmFjY2Vzc2tleV09XCJzaG9ydGN1dGtleVwiXG4gICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICBbKG5nTW9kZWwpXT1cInF1ZXJ5XCJcbiAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcbiAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgIFt0eXBlYWhlYWRdPVwidHlwZWFoZWFkRGF0YVNvdXJjZVwiXG4gICAgW3R5cGVhaGVhZFdhaXRNc109XCJkZWJvdW5jZXRpbWVcIlxuICAgIFt0eXBlYWhlYWRJdGVtVGVtcGxhdGVdPVwiY3VzdG9tSXRlbVRlbXBsYXRlXCJcbiAgICBbb3B0aW9uc0xpc3RUZW1wbGF0ZV09XCJjdXN0b21MaXN0VGVtcGxhdGVcIlxuICAgIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIlxuICAgIChrZXlkb3duKT1cImxpc3RlblF1ZXJ5ID0gdHJ1ZVwiXG4gICAgKGtleWRvd24uZW50ZXIpPVwiJHR5cGVhaGVhZEV2ZW50ID0gJGV2ZW50O2hhbmRsZUVudGVyRXZlbnQoJGV2ZW50KVwiXG4gICAgKGtleWRvd24uYXJyb3dkb3duKT1cInNlbGVjdE5leHQoJGV2ZW50KVwiXG4gICAgKGJsdXIpPVwiaW52b2tlT25Ub3VjaGVkKCRldmVudCk7IG9uRm9jdXNPdXQoKVwiXG4gICAgKGNsaWNrKT1cImhhbmRsZUZvY3VzKCRldmVudCk7XCJcbiAgICAoZm9jdXMpPVwiX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTsgbGlzdGVuUXVlcnkgPSB0cnVlOyBoYW5kbGVGb2N1cygkZXZlbnQpOyBpbnZva2VPbkZvY3VzKCRldmVudClcIlxuICAgIFt0eXBlYWhlYWRNaW5MZW5ndGhdPVwibWluY2hhcnNcIlxuICAgIFt0eXBlYWhlYWRPcHRpb25zTGltaXRdPVwibGltaXRcIlxuICAgICh0eXBlYWhlYWRMb2FkaW5nKT1cIl9sb2FkaW5nSXRlbXNcIlxuICAgICh0eXBlYWhlYWRPblNlbGVjdCk9XCJ0eXBlYWhlYWRPblNlbGVjdCgkZXZlbnQpXCJcbiAgICB0eXBlYWhlYWRPcHRpb25GaWVsZD1cImxhYmVsXCJcbiAgICBbdHlwZWFoZWFkR3JvdXBGaWVsZF09XCJncm91cGJ5ID8gJ2dyb3VwYnknIDogbnVsbFwiXG4gICAgW3R5cGVhaGVhZEFzeW5jXT1cInRydWVcIlxuICAgIFt0eXBlYWhlYWRTY3JvbGxhYmxlXT1cInRydWVcIlxuICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cInRydWVcIlxuICAgIFt0eXBlYWhlYWRPcHRpb25zSW5TY3JvbGxhYmxlVmlld109XCJvcHRpb25zbGltaXRpbnNjcm9sbGFibGV2aWV3XCJcbiAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgIFtkcm9wdXBdPVwiZHJvcHVwXCJcbiAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYWxhYmVsIHx8ICdTZWFyY2ggZmllbGQnXCI+XG4gIDxpbnB1dCBjbGFzcz1cIm1vZGVsLWhvbGRlclwiIG5nLW1vZGVsPVwicHJveHlNb2RlbFwiIG5nLXJlcXVpcmVkPVwicmVxdWlyZWRcIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gIEBpZiAoX2xvYWRpbmdJdGVtcykge1xuICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiZmEgZmEtY2lyY2xlLW8tbm90Y2ggZmEtc3BpbiBmb3JtLWNvbnRyb2wtZmVlZGJhY2tcIj48L3NwYW4+XG4gIH1cbiAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4taWNvbiBmb3JtLWNvbnRyb2wtZmVlZGJhY2sgY2xlYXItYnRuXCIgW25nQ2xhc3NdPVwieydzaG93LWJ0bic6IGlzUXVlcnlFbnRlcmVkKCl9XCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKCRldmVudCwgdHJ1ZSlcIj48aSBjbGFzcz1cImFwcC1pY29uIHt7Y2xlYXJzZWFyY2hpY29uY2xhc3N9fVwiPjwvaT48L2J1dHRvbj5cbiAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xlYXIgYnV0dG9uPC9zcGFuPlxuICBAaWYgKHNob3dzZWFyY2hpY29uKSB7XG4gICAgPHNwYW4gW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6IGRpc2FibGVkfVwiIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb25cIj5cbiAgICAgIDxmb3JtPlxuICAgICAgICA8YnV0dG9uIHRpdGxlPVwiU2VhcmNoXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgY2xhc3M9XCJhcHAtc2VhcmNoLWJ1dHRvbiBidG4gYnRuLWljb25cIiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAoY2xpY2spPVwib25TZWFyY2hTZWxlY3QoJGV2ZW50KVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiYXBwLWljb24ge3tzZWFyY2hpY29uY2xhc3N9fVwiPjwvaT48L2J1dHRvbj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9zcGFuPlxuICAgIH1cbiAgfVxuICA8IS0tVGhpcyB0ZW1wbGF0ZSBpcyBmb3IgYm90aCB3ZWIgYW5kIGZ1bGxzY3JlZW4gbW9kZSBpbiBtb2JpbGUuLS0+XG4iXX0=