@wavemaker/app-ng-runtime 11.4.1-next.141652 → 11.4.1-next.141654

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 (504) hide show
  1. app-ng-runtime/components/advanced/carousel/bundles/index.umd.js +12 -23
  2. app-ng-runtime/components/advanced/carousel/carousel-template/carousel-template.directive.d.ts +2 -4
  3. app-ng-runtime/components/advanced/carousel/carousel.directive.d.ts +2 -4
  4. app-ng-runtime/components/advanced/carousel/esm2020/carousel-template/carousel-template.directive.mjs +6 -11
  5. app-ng-runtime/components/advanced/carousel/esm2020/carousel.directive.mjs +6 -11
  6. app-ng-runtime/components/advanced/carousel/fesm2015/index.mjs +9 -20
  7. app-ng-runtime/components/advanced/carousel/fesm2015/index.mjs.map +1 -1
  8. app-ng-runtime/components/advanced/carousel/fesm2020/index.mjs +9 -16
  9. app-ng-runtime/components/advanced/carousel/fesm2020/index.mjs.map +1 -1
  10. app-ng-runtime/components/advanced/login/bundles/index.umd.js +21 -27
  11. app-ng-runtime/components/advanced/login/esm2020/login.component.mjs +8 -13
  12. app-ng-runtime/components/advanced/login/fesm2015/index.mjs +7 -13
  13. app-ng-runtime/components/advanced/login/fesm2015/index.mjs.map +1 -1
  14. app-ng-runtime/components/advanced/login/fesm2020/index.mjs +7 -11
  15. app-ng-runtime/components/advanced/login/fesm2020/index.mjs.map +1 -1
  16. app-ng-runtime/components/advanced/login/login.component.d.ts +2 -4
  17. app-ng-runtime/components/advanced/marquee/bundles/index.umd.js +8 -14
  18. app-ng-runtime/components/advanced/marquee/esm2020/marquee.directive.mjs +6 -11
  19. app-ng-runtime/components/advanced/marquee/fesm2015/index.mjs +5 -11
  20. app-ng-runtime/components/advanced/marquee/fesm2015/index.mjs.map +1 -1
  21. app-ng-runtime/components/advanced/marquee/fesm2020/index.mjs +5 -9
  22. app-ng-runtime/components/advanced/marquee/fesm2020/index.mjs.map +1 -1
  23. app-ng-runtime/components/advanced/marquee/marquee.directive.d.ts +2 -4
  24. app-ng-runtime/components/base/bundles/index.umd.js +31 -61
  25. app-ng-runtime/components/base/esm2020/widgets/common/base/base-container.component.mjs +4 -6
  26. app-ng-runtime/components/base/esm2020/widgets/common/base/base.component.mjs +5 -6
  27. app-ng-runtime/components/base/esm2020/widgets/common/base/dataset-aware-nav.component.mjs +3 -3
  28. app-ng-runtime/components/base/esm2020/widgets/common/container/container.directive.mjs +7 -11
  29. app-ng-runtime/components/base/esm2020/widgets/common/item-template/item-template.directive.mjs +7 -10
  30. app-ng-runtime/components/base/esm2020/widgets/common/lazy-load/lazy-load.directive.mjs +6 -10
  31. app-ng-runtime/components/base/esm2020/widgets/common/message/message.component.mjs +7 -11
  32. app-ng-runtime/components/base/esm2020/widgets/common/partial/partial.directive.mjs +7 -10
  33. app-ng-runtime/components/base/esm2020/widgets/common/repeat-template/repeat-template.directive.mjs +6 -11
  34. app-ng-runtime/components/base/fesm2015/index.mjs +32 -62
  35. app-ng-runtime/components/base/fesm2015/index.mjs.map +1 -1
  36. app-ng-runtime/components/base/fesm2020/index.mjs +32 -50
  37. app-ng-runtime/components/base/fesm2020/index.mjs.map +1 -1
  38. app-ng-runtime/components/base/widgets/common/base/base-container.component.d.ts +1 -2
  39. app-ng-runtime/components/base/widgets/common/base/base.component.d.ts +2 -3
  40. app-ng-runtime/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +1 -2
  41. app-ng-runtime/components/base/widgets/common/container/container.directive.d.ts +2 -4
  42. app-ng-runtime/components/base/widgets/common/item-template/item-template.directive.d.ts +3 -4
  43. app-ng-runtime/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +2 -4
  44. app-ng-runtime/components/base/widgets/common/message/message.component.d.ts +2 -4
  45. app-ng-runtime/components/base/widgets/common/partial/partial.directive.d.ts +3 -4
  46. app-ng-runtime/components/base/widgets/common/repeat-template/repeat-template.directive.d.ts +2 -4
  47. app-ng-runtime/components/basic/default/anchor/anchor.component.d.ts +3 -4
  48. app-ng-runtime/components/basic/default/audio/audio.component.d.ts +2 -4
  49. app-ng-runtime/components/basic/default/bundles/index.umd.js +247 -290
  50. app-ng-runtime/components/basic/default/esm2020/anchor/anchor.component.mjs +7 -10
  51. app-ng-runtime/components/basic/default/esm2020/audio/audio.component.mjs +8 -13
  52. app-ng-runtime/components/basic/default/esm2020/html/html.directive.mjs +7 -11
  53. app-ng-runtime/components/basic/default/esm2020/icon/icon.component.mjs +9 -14
  54. app-ng-runtime/components/basic/default/esm2020/iframe/iframe.component.mjs +9 -13
  55. app-ng-runtime/components/basic/default/esm2020/label/label.directive.mjs +7 -11
  56. app-ng-runtime/components/basic/default/esm2020/picture/picture.directive.mjs +7 -11
  57. app-ng-runtime/components/basic/default/esm2020/spinner/spinner.component.mjs +9 -13
  58. app-ng-runtime/components/basic/default/esm2020/video/video.component.mjs +9 -13
  59. app-ng-runtime/components/basic/default/fesm2015/index.mjs +46 -89
  60. app-ng-runtime/components/basic/default/fesm2015/index.mjs.map +1 -1
  61. app-ng-runtime/components/basic/default/fesm2020/index.mjs +46 -73
  62. app-ng-runtime/components/basic/default/fesm2020/index.mjs.map +1 -1
  63. app-ng-runtime/components/basic/default/html/html.directive.d.ts +2 -4
  64. app-ng-runtime/components/basic/default/icon/icon.component.d.ts +2 -4
  65. app-ng-runtime/components/basic/default/iframe/iframe.component.d.ts +2 -4
  66. app-ng-runtime/components/basic/default/label/label.directive.d.ts +2 -4
  67. app-ng-runtime/components/basic/default/picture/picture.directive.d.ts +2 -4
  68. app-ng-runtime/components/basic/default/spinner/spinner.component.d.ts +2 -4
  69. app-ng-runtime/components/basic/default/video/video.component.d.ts +2 -4
  70. app-ng-runtime/components/basic/progress/bundles/index.umd.js +23 -32
  71. app-ng-runtime/components/basic/progress/esm2020/progress-bar/progress-bar.component.mjs +8 -12
  72. app-ng-runtime/components/basic/progress/esm2020/progress-circle/progress-circle.component.mjs +8 -13
  73. app-ng-runtime/components/basic/progress/fesm2015/index.mjs +12 -21
  74. app-ng-runtime/components/basic/progress/fesm2015/index.mjs.map +1 -1
  75. app-ng-runtime/components/basic/progress/fesm2020/index.mjs +12 -19
  76. app-ng-runtime/components/basic/progress/fesm2020/index.mjs.map +1 -1
  77. app-ng-runtime/components/basic/progress/progress-bar/progress-bar.component.d.ts +2 -4
  78. app-ng-runtime/components/basic/progress/progress-circle/progress-circle.component.d.ts +2 -4
  79. app-ng-runtime/components/basic/rich-text-editor/bundles/index.umd.js +14 -20
  80. app-ng-runtime/components/basic/rich-text-editor/esm2020/rich-text-editor.component.mjs +9 -13
  81. app-ng-runtime/components/basic/rich-text-editor/fesm2015/index.mjs +7 -13
  82. app-ng-runtime/components/basic/rich-text-editor/fesm2015/index.mjs.map +1 -1
  83. app-ng-runtime/components/basic/rich-text-editor/fesm2020/index.mjs +7 -11
  84. app-ng-runtime/components/basic/rich-text-editor/fesm2020/index.mjs.map +1 -1
  85. app-ng-runtime/components/basic/rich-text-editor/rich-text-editor.component.d.ts +2 -4
  86. app-ng-runtime/components/basic/search/bundles/index.umd.js +3 -6
  87. app-ng-runtime/components/basic/search/esm2020/search.component.mjs +6 -9
  88. app-ng-runtime/components/basic/search/fesm2015/index.mjs +4 -7
  89. app-ng-runtime/components/basic/search/fesm2015/index.mjs.map +1 -1
  90. app-ng-runtime/components/basic/search/fesm2020/index.mjs +4 -7
  91. app-ng-runtime/components/basic/search/fesm2020/index.mjs.map +1 -1
  92. app-ng-runtime/components/basic/search/search.component.d.ts +3 -4
  93. app-ng-runtime/components/chart/bundles/index.umd.js +4 -9
  94. app-ng-runtime/components/chart/chart.component.d.ts +3 -4
  95. app-ng-runtime/components/chart/esm2020/chart.component.mjs +7 -10
  96. app-ng-runtime/components/chart/fesm2015/index.mjs +5 -10
  97. app-ng-runtime/components/chart/fesm2015/index.mjs.map +1 -1
  98. app-ng-runtime/components/chart/fesm2020/index.mjs +5 -8
  99. app-ng-runtime/components/chart/fesm2020/index.mjs.map +1 -1
  100. app-ng-runtime/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -4
  101. app-ng-runtime/components/containers/accordion/accordion.directive.d.ts +3 -4
  102. app-ng-runtime/components/containers/accordion/bundles/index.umd.js +56 -66
  103. app-ng-runtime/components/containers/accordion/esm2020/accordion-pane/accordion-pane.component.mjs +10 -14
  104. app-ng-runtime/components/containers/accordion/esm2020/accordion.directive.mjs +7 -10
  105. app-ng-runtime/components/containers/accordion/fesm2015/index.mjs +12 -22
  106. app-ng-runtime/components/containers/accordion/fesm2015/index.mjs.map +1 -1
  107. app-ng-runtime/components/containers/accordion/fesm2020/index.mjs +12 -18
  108. app-ng-runtime/components/containers/accordion/fesm2020/index.mjs.map +1 -1
  109. app-ng-runtime/components/containers/layout-grid/bundles/index.umd.js +12 -25
  110. app-ng-runtime/components/containers/layout-grid/esm2020/layout-grid-column/layout-grid-column.directive.mjs +7 -10
  111. app-ng-runtime/components/containers/layout-grid/esm2020/layout-grid-row/layout-grid-row.directive.mjs +6 -11
  112. app-ng-runtime/components/containers/layout-grid/esm2020/layout-grid.directive.mjs +6 -11
  113. app-ng-runtime/components/containers/layout-grid/fesm2015/index.mjs +13 -26
  114. app-ng-runtime/components/containers/layout-grid/fesm2015/index.mjs.map +1 -1
  115. app-ng-runtime/components/containers/layout-grid/fesm2020/index.mjs +13 -22
  116. app-ng-runtime/components/containers/layout-grid/fesm2020/index.mjs.map +1 -1
  117. app-ng-runtime/components/containers/layout-grid/layout-grid-column/layout-grid-column.directive.d.ts +3 -4
  118. app-ng-runtime/components/containers/layout-grid/layout-grid-row/layout-grid-row.directive.d.ts +2 -4
  119. app-ng-runtime/components/containers/layout-grid/layout-grid.directive.d.ts +2 -4
  120. app-ng-runtime/components/containers/linear-layout/bundles/index.umd.js +12 -23
  121. app-ng-runtime/components/containers/linear-layout/esm2020/linear-layout-item/linear-layout-item.directive.mjs +6 -11
  122. app-ng-runtime/components/containers/linear-layout/esm2020/linear-layout.directive.mjs +6 -11
  123. app-ng-runtime/components/containers/linear-layout/fesm2015/index.mjs +9 -20
  124. app-ng-runtime/components/containers/linear-layout/fesm2015/index.mjs.map +1 -1
  125. app-ng-runtime/components/containers/linear-layout/fesm2020/index.mjs +9 -16
  126. app-ng-runtime/components/containers/linear-layout/fesm2020/index.mjs.map +1 -1
  127. app-ng-runtime/components/containers/linear-layout/linear-layout-item/linear-layout-item.directive.d.ts +2 -4
  128. app-ng-runtime/components/containers/linear-layout/linear-layout.directive.d.ts +2 -4
  129. app-ng-runtime/components/containers/panel/bundles/index.umd.js +65 -71
  130. app-ng-runtime/components/containers/panel/esm2020/panel.component.mjs +12 -16
  131. app-ng-runtime/components/containers/panel/fesm2015/index.mjs +10 -16
  132. app-ng-runtime/components/containers/panel/fesm2015/index.mjs.map +1 -1
  133. app-ng-runtime/components/containers/panel/fesm2020/index.mjs +10 -14
  134. app-ng-runtime/components/containers/panel/fesm2020/index.mjs.map +1 -1
  135. app-ng-runtime/components/containers/panel/panel.component.d.ts +2 -4
  136. app-ng-runtime/components/containers/tabs/bundles/index.umd.js +57 -63
  137. app-ng-runtime/components/containers/tabs/esm2020/tab-pane/tab-pane.component.mjs +8 -12
  138. app-ng-runtime/components/containers/tabs/esm2020/tabs.component.mjs +7 -10
  139. app-ng-runtime/components/containers/tabs/fesm2015/index.mjs +12 -18
  140. app-ng-runtime/components/containers/tabs/fesm2015/index.mjs.map +1 -1
  141. app-ng-runtime/components/containers/tabs/fesm2020/index.mjs +12 -18
  142. app-ng-runtime/components/containers/tabs/fesm2020/index.mjs.map +1 -1
  143. app-ng-runtime/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -4
  144. app-ng-runtime/components/containers/tabs/tabs.component.d.ts +3 -4
  145. app-ng-runtime/components/containers/tile/bundles/index.umd.js +8 -14
  146. app-ng-runtime/components/containers/tile/esm2020/tile.directive.mjs +6 -11
  147. app-ng-runtime/components/containers/tile/fesm2015/index.mjs +5 -11
  148. app-ng-runtime/components/containers/tile/fesm2015/index.mjs.map +1 -1
  149. app-ng-runtime/components/containers/tile/fesm2020/index.mjs +5 -9
  150. app-ng-runtime/components/containers/tile/fesm2020/index.mjs.map +1 -1
  151. app-ng-runtime/components/containers/tile/tile.directive.d.ts +2 -4
  152. app-ng-runtime/components/containers/wizard/bundles/index.umd.js +48 -57
  153. app-ng-runtime/components/containers/wizard/esm2020/wizard-step/wizard-step.directive.mjs +5 -10
  154. app-ng-runtime/components/containers/wizard/esm2020/wizard.component.mjs +10 -14
  155. app-ng-runtime/components/containers/wizard/fesm2015/index.mjs +11 -20
  156. app-ng-runtime/components/containers/wizard/fesm2015/index.mjs.map +1 -1
  157. app-ng-runtime/components/containers/wizard/fesm2020/index.mjs +11 -18
  158. app-ng-runtime/components/containers/wizard/fesm2020/index.mjs.map +1 -1
  159. app-ng-runtime/components/containers/wizard/wizard-step/wizard-step.directive.d.ts +2 -4
  160. app-ng-runtime/components/containers/wizard/wizard.component.d.ts +2 -4
  161. app-ng-runtime/components/data/card/bundles/index.umd.js +83 -106
  162. app-ng-runtime/components/data/card/card-actions/card-actions.directive.d.ts +2 -4
  163. app-ng-runtime/components/data/card/card-content/card-content.component.d.ts +2 -4
  164. app-ng-runtime/components/data/card/card-footer/card-footer.directive.d.ts +2 -4
  165. app-ng-runtime/components/data/card/card.component.d.ts +2 -4
  166. app-ng-runtime/components/data/card/esm2020/card-actions/card-actions.directive.mjs +6 -11
  167. app-ng-runtime/components/data/card/esm2020/card-content/card-content.component.mjs +6 -11
  168. app-ng-runtime/components/data/card/esm2020/card-footer/card-footer.directive.mjs +6 -11
  169. app-ng-runtime/components/data/card/esm2020/card.component.mjs +12 -18
  170. app-ng-runtime/components/data/card/fesm2015/index.mjs +23 -46
  171. app-ng-runtime/components/data/card/fesm2015/index.mjs.map +1 -1
  172. app-ng-runtime/components/data/card/fesm2020/index.mjs +23 -38
  173. app-ng-runtime/components/data/card/fesm2020/index.mjs.map +1 -1
  174. app-ng-runtime/components/data/form/bundles/index.umd.js +128 -137
  175. app-ng-runtime/components/data/form/esm2020/form-action/form-action.directive.mjs +4 -9
  176. app-ng-runtime/components/data/form/esm2020/form-field/form-field.directive.mjs +5 -8
  177. app-ng-runtime/components/data/form/esm2020/form.component.mjs +5 -8
  178. app-ng-runtime/components/data/form/fesm2015/index.mjs +20 -29
  179. app-ng-runtime/components/data/form/fesm2015/index.mjs.map +1 -1
  180. app-ng-runtime/components/data/form/fesm2020/index.mjs +20 -29
  181. app-ng-runtime/components/data/form/fesm2020/index.mjs.map +1 -1
  182. app-ng-runtime/components/data/form/form-action/form-action.directive.d.ts +2 -4
  183. app-ng-runtime/components/data/form/form-field/form-field.directive.d.ts +3 -4
  184. app-ng-runtime/components/data/form/form.component.d.ts +3 -4
  185. app-ng-runtime/components/data/list/bundles/index.umd.js +4 -7
  186. app-ng-runtime/components/data/list/esm2020/list.component.mjs +7 -10
  187. app-ng-runtime/components/data/list/fesm2015/index.mjs +4 -7
  188. app-ng-runtime/components/data/list/fesm2015/index.mjs.map +1 -1
  189. app-ng-runtime/components/data/list/fesm2020/index.mjs +4 -7
  190. app-ng-runtime/components/data/list/fesm2020/index.mjs.map +1 -1
  191. app-ng-runtime/components/data/list/list.component.d.ts +3 -4
  192. app-ng-runtime/components/data/live-table/bundles/index.umd.js +3 -6
  193. app-ng-runtime/components/data/live-table/esm2020/live-table.component.mjs +6 -9
  194. app-ng-runtime/components/data/live-table/fesm2015/index.mjs +4 -7
  195. app-ng-runtime/components/data/live-table/fesm2015/index.mjs.map +1 -1
  196. app-ng-runtime/components/data/live-table/fesm2020/index.mjs +4 -7
  197. app-ng-runtime/components/data/live-table/fesm2020/index.mjs.map +1 -1
  198. app-ng-runtime/components/data/live-table/live-table.component.d.ts +3 -4
  199. app-ng-runtime/components/data/pagination/bundles/index.umd.js +30 -34
  200. app-ng-runtime/components/data/pagination/esm2020/pagination.component.mjs +10 -14
  201. app-ng-runtime/components/data/pagination/fesm2015/index.mjs +8 -12
  202. app-ng-runtime/components/data/pagination/fesm2015/index.mjs.map +1 -1
  203. app-ng-runtime/components/data/pagination/fesm2020/index.mjs +8 -12
  204. app-ng-runtime/components/data/pagination/fesm2020/index.mjs.map +1 -1
  205. app-ng-runtime/components/data/pagination/pagination.component.d.ts +2 -4
  206. app-ng-runtime/components/data/table/bundles/index.umd.js +19 -37
  207. app-ng-runtime/components/data/table/esm2020/table-action/table-action.directive.mjs +4 -9
  208. app-ng-runtime/components/data/table/esm2020/table-column/table-column.directive.mjs +5 -8
  209. app-ng-runtime/components/data/table/esm2020/table-column-group/table-column-group.directive.mjs +4 -9
  210. app-ng-runtime/components/data/table/esm2020/table-row/table-row.directive.mjs +4 -9
  211. app-ng-runtime/components/data/table/esm2020/table-row-action/table-row-action.directive.mjs +4 -9
  212. app-ng-runtime/components/data/table/esm2020/table.component.mjs +6 -9
  213. app-ng-runtime/components/data/table/fesm2015/index.mjs +19 -37
  214. app-ng-runtime/components/data/table/fesm2015/index.mjs.map +1 -1
  215. app-ng-runtime/components/data/table/fesm2020/index.mjs +19 -37
  216. app-ng-runtime/components/data/table/fesm2020/index.mjs.map +1 -1
  217. app-ng-runtime/components/data/table/table-action/table-action.directive.d.ts +2 -4
  218. app-ng-runtime/components/data/table/table-column/table-column.directive.d.ts +3 -4
  219. app-ng-runtime/components/data/table/table-column-group/table-column-group.directive.d.ts +2 -4
  220. app-ng-runtime/components/data/table/table-row/table-row.directive.d.ts +2 -4
  221. app-ng-runtime/components/data/table/table-row-action/table-row-action.directive.d.ts +2 -4
  222. app-ng-runtime/components/data/table/table.component.d.ts +3 -4
  223. app-ng-runtime/components/dialogs/alert-dialog/alert-dialog.component.d.ts +2 -4
  224. app-ng-runtime/components/dialogs/alert-dialog/bundles/index.umd.js +40 -46
  225. app-ng-runtime/components/dialogs/alert-dialog/esm2020/alert-dialog.component.mjs +9 -15
  226. app-ng-runtime/components/dialogs/alert-dialog/fesm2015/index.mjs +8 -14
  227. app-ng-runtime/components/dialogs/alert-dialog/fesm2015/index.mjs.map +1 -1
  228. app-ng-runtime/components/dialogs/alert-dialog/fesm2020/index.mjs +8 -14
  229. app-ng-runtime/components/dialogs/alert-dialog/fesm2020/index.mjs.map +1 -1
  230. app-ng-runtime/components/dialogs/confirm-dialog/bundles/index.umd.js +16 -22
  231. app-ng-runtime/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +2 -4
  232. app-ng-runtime/components/dialogs/confirm-dialog/esm2020/confirm-dialog.component.mjs +8 -14
  233. app-ng-runtime/components/dialogs/confirm-dialog/fesm2015/index.mjs +7 -13
  234. app-ng-runtime/components/dialogs/confirm-dialog/fesm2015/index.mjs.map +1 -1
  235. app-ng-runtime/components/dialogs/confirm-dialog/fesm2020/index.mjs +7 -13
  236. app-ng-runtime/components/dialogs/confirm-dialog/fesm2020/index.mjs.map +1 -1
  237. app-ng-runtime/components/dialogs/default/base-dialog.d.ts +1 -2
  238. app-ng-runtime/components/dialogs/default/bundles/index.umd.js +25 -31
  239. app-ng-runtime/components/dialogs/default/dialog-footer/dialog-footer.directive.d.ts +2 -4
  240. app-ng-runtime/components/dialogs/default/esm2020/base-dialog.mjs +7 -8
  241. app-ng-runtime/components/dialogs/default/esm2020/dialog-footer/dialog-footer.directive.mjs +6 -11
  242. app-ng-runtime/components/dialogs/default/fesm2015/index.mjs +11 -17
  243. app-ng-runtime/components/dialogs/default/fesm2015/index.mjs.map +1 -1
  244. app-ng-runtime/components/dialogs/default/fesm2020/index.mjs +11 -15
  245. app-ng-runtime/components/dialogs/default/fesm2020/index.mjs.map +1 -1
  246. app-ng-runtime/components/dialogs/design-dialog/bundles/index.umd.js +17 -23
  247. app-ng-runtime/components/dialogs/design-dialog/dialog.component.d.ts +2 -4
  248. app-ng-runtime/components/dialogs/design-dialog/esm2020/dialog.component.mjs +8 -14
  249. app-ng-runtime/components/dialogs/design-dialog/fesm2015/index.mjs +7 -13
  250. app-ng-runtime/components/dialogs/design-dialog/fesm2015/index.mjs.map +1 -1
  251. app-ng-runtime/components/dialogs/design-dialog/fesm2020/index.mjs +7 -13
  252. app-ng-runtime/components/dialogs/design-dialog/fesm2020/index.mjs.map +1 -1
  253. app-ng-runtime/components/dialogs/iframe-dialog/bundles/index.umd.js +24 -30
  254. app-ng-runtime/components/dialogs/iframe-dialog/esm2020/iframe-dialog.component.mjs +10 -16
  255. app-ng-runtime/components/dialogs/iframe-dialog/fesm2015/index.mjs +9 -15
  256. app-ng-runtime/components/dialogs/iframe-dialog/fesm2015/index.mjs.map +1 -1
  257. app-ng-runtime/components/dialogs/iframe-dialog/fesm2020/index.mjs +9 -15
  258. app-ng-runtime/components/dialogs/iframe-dialog/fesm2020/index.mjs.map +1 -1
  259. app-ng-runtime/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +2 -4
  260. app-ng-runtime/components/dialogs/partial-dialog/bundles/index.umd.js +3 -8
  261. app-ng-runtime/components/dialogs/partial-dialog/esm2020/partial-dialog.component.mjs +5 -10
  262. app-ng-runtime/components/dialogs/partial-dialog/fesm2015/index.mjs +4 -9
  263. app-ng-runtime/components/dialogs/partial-dialog/fesm2015/index.mjs.map +1 -1
  264. app-ng-runtime/components/dialogs/partial-dialog/fesm2020/index.mjs +4 -9
  265. app-ng-runtime/components/dialogs/partial-dialog/fesm2020/index.mjs.map +1 -1
  266. app-ng-runtime/components/dialogs/partial-dialog/partial-dialog.component.d.ts +3 -4
  267. app-ng-runtime/components/input/calendar/bundles/index.umd.js +5 -10
  268. app-ng-runtime/components/input/calendar/calendar.component.d.ts +3 -4
  269. app-ng-runtime/components/input/calendar/esm2020/calendar.component.mjs +8 -11
  270. app-ng-runtime/components/input/calendar/fesm2015/index.mjs +6 -11
  271. app-ng-runtime/components/input/calendar/fesm2015/index.mjs.map +1 -1
  272. app-ng-runtime/components/input/calendar/fesm2020/index.mjs +6 -9
  273. app-ng-runtime/components/input/calendar/fesm2020/index.mjs.map +1 -1
  274. app-ng-runtime/components/input/chips/bundles/index.umd.js +87 -93
  275. app-ng-runtime/components/input/chips/chips.component.d.ts +2 -4
  276. app-ng-runtime/components/input/chips/esm2020/chips.component.mjs +9 -15
  277. app-ng-runtime/components/input/chips/fesm2015/index.mjs +8 -14
  278. app-ng-runtime/components/input/chips/fesm2015/index.mjs.map +1 -1
  279. app-ng-runtime/components/input/chips/fesm2020/index.mjs +8 -14
  280. app-ng-runtime/components/input/chips/fesm2020/index.mjs.map +1 -1
  281. app-ng-runtime/components/input/color-picker/bundles/index.umd.js +22 -28
  282. app-ng-runtime/components/input/color-picker/color-picker.component.d.ts +2 -4
  283. app-ng-runtime/components/input/color-picker/esm2020/color-picker.component.mjs +10 -14
  284. app-ng-runtime/components/input/color-picker/fesm2015/index.mjs +8 -14
  285. app-ng-runtime/components/input/color-picker/fesm2015/index.mjs.map +1 -1
  286. app-ng-runtime/components/input/color-picker/fesm2020/index.mjs +8 -12
  287. app-ng-runtime/components/input/color-picker/fesm2020/index.mjs.map +1 -1
  288. app-ng-runtime/components/input/currency/bundles/index.umd.js +4 -9
  289. app-ng-runtime/components/input/currency/currency.component.d.ts +3 -4
  290. app-ng-runtime/components/input/currency/esm2020/currency.component.mjs +7 -10
  291. app-ng-runtime/components/input/currency/fesm2015/index.mjs +5 -10
  292. app-ng-runtime/components/input/currency/fesm2015/index.mjs.map +1 -1
  293. app-ng-runtime/components/input/currency/fesm2020/index.mjs +5 -8
  294. app-ng-runtime/components/input/currency/fesm2020/index.mjs.map +1 -1
  295. app-ng-runtime/components/input/default/base-form.component.d.ts +1 -2
  296. app-ng-runtime/components/input/default/bundles/index.umd.js +575 -648
  297. app-ng-runtime/components/input/default/button/button.component.d.ts +2 -4
  298. app-ng-runtime/components/input/default/button-group/button-group.directive.d.ts +2 -4
  299. app-ng-runtime/components/input/default/checkbox/checkbox.component.d.ts +2 -4
  300. app-ng-runtime/components/input/default/checkboxset/checkboxset.component.d.ts +2 -4
  301. app-ng-runtime/components/input/default/composite/composite.directive.d.ts +2 -4
  302. app-ng-runtime/components/input/default/dataset-aware-form.component.d.ts +2 -3
  303. app-ng-runtime/components/input/default/esm2020/base-form.component.mjs +6 -7
  304. app-ng-runtime/components/input/default/esm2020/button/button.component.mjs +9 -14
  305. app-ng-runtime/components/input/default/esm2020/button-group/button-group.directive.mjs +6 -11
  306. app-ng-runtime/components/input/default/esm2020/checkbox/checkbox.component.mjs +9 -13
  307. app-ng-runtime/components/input/default/esm2020/checkboxset/checkboxset.component.mjs +10 -14
  308. app-ng-runtime/components/input/default/esm2020/composite/composite.directive.mjs +7 -11
  309. app-ng-runtime/components/input/default/esm2020/dataset-aware-form.component.mjs +6 -7
  310. app-ng-runtime/components/input/default/esm2020/number/number.component.mjs +7 -10
  311. app-ng-runtime/components/input/default/esm2020/radioset/radioset.component.mjs +10 -14
  312. app-ng-runtime/components/input/default/esm2020/select/select.component.mjs +11 -15
  313. app-ng-runtime/components/input/default/esm2020/switch/switch.component.mjs +10 -14
  314. app-ng-runtime/components/input/default/esm2020/text/base/base-input.mjs +6 -7
  315. app-ng-runtime/components/input/default/esm2020/text/calendar/input-calendar.component.mjs +8 -13
  316. app-ng-runtime/components/input/default/esm2020/text/color/input-color.component.mjs +8 -13
  317. app-ng-runtime/components/input/default/esm2020/text/email/input-email.component.mjs +8 -13
  318. app-ng-runtime/components/input/default/esm2020/text/locale/number-locale.mjs +3 -3
  319. app-ng-runtime/components/input/default/esm2020/text/number/input-number.component.mjs +9 -14
  320. app-ng-runtime/components/input/default/esm2020/text/text/input-text.component.mjs +9 -14
  321. app-ng-runtime/components/input/default/esm2020/textarea/textarea.component.mjs +9 -14
  322. app-ng-runtime/components/input/default/fesm2015/index.mjs +94 -167
  323. app-ng-runtime/components/input/default/fesm2015/index.mjs.map +1 -1
  324. app-ng-runtime/components/input/default/fesm2020/index.mjs +94 -139
  325. app-ng-runtime/components/input/default/fesm2020/index.mjs.map +1 -1
  326. app-ng-runtime/components/input/default/number/number.component.d.ts +3 -4
  327. app-ng-runtime/components/input/default/radioset/radioset.component.d.ts +2 -4
  328. app-ng-runtime/components/input/default/select/select.component.d.ts +2 -4
  329. app-ng-runtime/components/input/default/switch/switch.component.d.ts +2 -4
  330. app-ng-runtime/components/input/default/text/base/base-input.d.ts +1 -2
  331. app-ng-runtime/components/input/default/text/calendar/input-calendar.component.d.ts +2 -4
  332. app-ng-runtime/components/input/default/text/color/input-color.component.d.ts +2 -4
  333. app-ng-runtime/components/input/default/text/email/input-email.component.d.ts +2 -4
  334. app-ng-runtime/components/input/default/text/locale/number-locale.d.ts +2 -2
  335. app-ng-runtime/components/input/default/text/number/input-number.component.d.ts +2 -4
  336. app-ng-runtime/components/input/default/text/text/input-text.component.d.ts +2 -4
  337. app-ng-runtime/components/input/default/textarea/textarea.component.d.ts +2 -4
  338. app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +1 -2
  339. app-ng-runtime/components/input/epoch/bundles/index.umd.js +12 -21
  340. app-ng-runtime/components/input/epoch/date/date.component.d.ts +3 -4
  341. app-ng-runtime/components/input/epoch/date-time/date-time.component.d.ts +3 -4
  342. app-ng-runtime/components/input/epoch/esm2020/base-date-time.component.mjs +5 -6
  343. app-ng-runtime/components/input/epoch/esm2020/date/date.component.mjs +6 -9
  344. app-ng-runtime/components/input/epoch/esm2020/date-time/date-time.component.mjs +6 -9
  345. app-ng-runtime/components/input/epoch/esm2020/time/time.component.mjs +6 -9
  346. app-ng-runtime/components/input/epoch/fesm2015/index.mjs +13 -22
  347. app-ng-runtime/components/input/epoch/fesm2015/index.mjs.map +1 -1
  348. app-ng-runtime/components/input/epoch/fesm2020/index.mjs +13 -22
  349. app-ng-runtime/components/input/epoch/fesm2020/index.mjs.map +1 -1
  350. app-ng-runtime/components/input/epoch/time/time.component.d.ts +3 -4
  351. app-ng-runtime/components/input/file-upload/bundles/index.umd.js +3 -6
  352. app-ng-runtime/components/input/file-upload/esm2020/file-upload.component.mjs +6 -9
  353. app-ng-runtime/components/input/file-upload/fesm2015/index.mjs +4 -7
  354. app-ng-runtime/components/input/file-upload/fesm2015/index.mjs.map +1 -1
  355. app-ng-runtime/components/input/file-upload/fesm2020/index.mjs +4 -7
  356. app-ng-runtime/components/input/file-upload/fesm2020/index.mjs.map +1 -1
  357. app-ng-runtime/components/input/file-upload/file-upload.component.d.ts +3 -4
  358. app-ng-runtime/components/input/rating/bundles/index.umd.js +45 -51
  359. app-ng-runtime/components/input/rating/esm2020/rating.component.mjs +11 -15
  360. app-ng-runtime/components/input/rating/fesm2015/index.mjs +9 -15
  361. app-ng-runtime/components/input/rating/fesm2015/index.mjs.map +1 -1
  362. app-ng-runtime/components/input/rating/fesm2020/index.mjs +9 -13
  363. app-ng-runtime/components/input/rating/fesm2020/index.mjs.map +1 -1
  364. app-ng-runtime/components/input/rating/rating.component.d.ts +2 -4
  365. app-ng-runtime/components/input/slider/bundles/index.umd.js +37 -43
  366. app-ng-runtime/components/input/slider/esm2020/slider.component.mjs +10 -15
  367. app-ng-runtime/components/input/slider/fesm2015/index.mjs +9 -15
  368. app-ng-runtime/components/input/slider/fesm2015/index.mjs.map +1 -1
  369. app-ng-runtime/components/input/slider/fesm2020/index.mjs +9 -13
  370. app-ng-runtime/components/input/slider/fesm2020/index.mjs.map +1 -1
  371. app-ng-runtime/components/input/slider/slider.component.d.ts +2 -4
  372. app-ng-runtime/components/navigation/menu/bundles/index.umd.js +13 -25
  373. app-ng-runtime/components/navigation/menu/esm2020/menu-adapator.component.mjs +4 -6
  374. app-ng-runtime/components/navigation/menu/esm2020/menu.component.mjs +4 -7
  375. app-ng-runtime/components/navigation/menu/esm2020/nav/nav-item/nav-item.directive.mjs +7 -11
  376. app-ng-runtime/components/navigation/menu/esm2020/nav/nav.component.mjs +5 -9
  377. app-ng-runtime/components/navigation/menu/fesm2015/index.mjs +14 -26
  378. app-ng-runtime/components/navigation/menu/fesm2015/index.mjs.map +1 -1
  379. app-ng-runtime/components/navigation/menu/fesm2020/index.mjs +14 -24
  380. app-ng-runtime/components/navigation/menu/fesm2020/index.mjs.map +1 -1
  381. app-ng-runtime/components/navigation/menu/menu-adapator.component.d.ts +1 -2
  382. app-ng-runtime/components/navigation/menu/menu.component.d.ts +2 -3
  383. app-ng-runtime/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +2 -4
  384. app-ng-runtime/components/navigation/menu/nav/nav.component.d.ts +3 -3
  385. app-ng-runtime/components/navigation/navbar/bundles/index.umd.js +28 -34
  386. app-ng-runtime/components/navigation/navbar/esm2020/navbar.component.mjs +9 -14
  387. app-ng-runtime/components/navigation/navbar/fesm2015/index.mjs +8 -14
  388. app-ng-runtime/components/navigation/navbar/fesm2015/index.mjs.map +1 -1
  389. app-ng-runtime/components/navigation/navbar/fesm2020/index.mjs +8 -12
  390. app-ng-runtime/components/navigation/navbar/fesm2020/index.mjs.map +1 -1
  391. app-ng-runtime/components/navigation/navbar/navbar.component.d.ts +2 -4
  392. app-ng-runtime/components/page/default/bundles/index.umd.js +32 -64
  393. app-ng-runtime/components/page/default/content/content.component.d.ts +2 -4
  394. app-ng-runtime/components/page/default/esm2020/content/content.component.mjs +6 -11
  395. app-ng-runtime/components/page/default/esm2020/layout.directive.mjs +7 -11
  396. app-ng-runtime/components/page/default/esm2020/page-content/page-content.component.mjs +7 -10
  397. app-ng-runtime/components/page/default/esm2020/page.directive.mjs +7 -12
  398. app-ng-runtime/components/page/default/esm2020/router-outlet.directive.mjs +7 -11
  399. app-ng-runtime/components/page/default/esm2020/spa-page.directive.mjs +7 -10
  400. app-ng-runtime/components/page/default/fesm2015/index.mjs +26 -58
  401. app-ng-runtime/components/page/default/fesm2015/index.mjs.map +1 -1
  402. app-ng-runtime/components/page/default/fesm2020/index.mjs +26 -46
  403. app-ng-runtime/components/page/default/fesm2020/index.mjs.map +1 -1
  404. app-ng-runtime/components/page/default/layout.directive.d.ts +2 -4
  405. app-ng-runtime/components/page/default/page-content/page-content.component.d.ts +3 -4
  406. app-ng-runtime/components/page/default/page.directive.d.ts +3 -4
  407. app-ng-runtime/components/page/default/router-outlet.directive.d.ts +2 -4
  408. app-ng-runtime/components/page/default/spa-page.directive.d.ts +3 -4
  409. app-ng-runtime/components/page/footer/bundles/index.umd.js +8 -14
  410. app-ng-runtime/components/page/footer/esm2020/footer.directive.mjs +6 -11
  411. app-ng-runtime/components/page/footer/fesm2015/index.mjs +5 -11
  412. app-ng-runtime/components/page/footer/fesm2015/index.mjs.map +1 -1
  413. app-ng-runtime/components/page/footer/fesm2020/index.mjs +5 -9
  414. app-ng-runtime/components/page/footer/fesm2020/index.mjs.map +1 -1
  415. app-ng-runtime/components/page/footer/footer.directive.d.ts +2 -4
  416. app-ng-runtime/components/page/header/bundles/index.umd.js +8 -14
  417. app-ng-runtime/components/page/header/esm2020/header.component.mjs +6 -11
  418. app-ng-runtime/components/page/header/fesm2015/index.mjs +5 -11
  419. app-ng-runtime/components/page/header/fesm2015/index.mjs.map +1 -1
  420. app-ng-runtime/components/page/header/fesm2020/index.mjs +5 -9
  421. app-ng-runtime/components/page/header/fesm2020/index.mjs.map +1 -1
  422. app-ng-runtime/components/page/header/header.component.d.ts +2 -4
  423. app-ng-runtime/components/page/left-panel/bundles/index.umd.js +4 -7
  424. app-ng-runtime/components/page/left-panel/esm2020/left-panel.directive.mjs +6 -9
  425. app-ng-runtime/components/page/left-panel/fesm2015/index.mjs +4 -7
  426. app-ng-runtime/components/page/left-panel/fesm2015/index.mjs.map +1 -1
  427. app-ng-runtime/components/page/left-panel/fesm2020/index.mjs +4 -7
  428. app-ng-runtime/components/page/left-panel/fesm2020/index.mjs.map +1 -1
  429. app-ng-runtime/components/page/left-panel/left-panel.directive.d.ts +3 -4
  430. app-ng-runtime/components/page/right-panel/bundles/index.umd.js +6 -12
  431. app-ng-runtime/components/page/right-panel/esm2020/right-panel.directive.mjs +7 -11
  432. app-ng-runtime/components/page/right-panel/fesm2015/index.mjs +5 -11
  433. app-ng-runtime/components/page/right-panel/fesm2015/index.mjs.map +1 -1
  434. app-ng-runtime/components/page/right-panel/fesm2020/index.mjs +5 -9
  435. app-ng-runtime/components/page/right-panel/fesm2020/index.mjs.map +1 -1
  436. app-ng-runtime/components/page/right-panel/right-panel.directive.d.ts +2 -4
  437. app-ng-runtime/components/page/top-nav/bundles/index.umd.js +8 -14
  438. app-ng-runtime/components/page/top-nav/esm2020/top-nav.directive.mjs +6 -11
  439. app-ng-runtime/components/page/top-nav/fesm2015/index.mjs +5 -11
  440. app-ng-runtime/components/page/top-nav/fesm2015/index.mjs.map +1 -1
  441. app-ng-runtime/components/page/top-nav/fesm2020/index.mjs +5 -9
  442. app-ng-runtime/components/page/top-nav/fesm2020/index.mjs.map +1 -1
  443. app-ng-runtime/components/page/top-nav/top-nav.directive.d.ts +2 -4
  444. app-ng-runtime/components/prefab/bundles/index.umd.js +7 -15
  445. app-ng-runtime/components/prefab/esm2020/prefab-container/prefab-container.directive.mjs +7 -10
  446. app-ng-runtime/components/prefab/esm2020/prefab.directive.mjs +6 -10
  447. app-ng-runtime/components/prefab/fesm2015/index.mjs +8 -16
  448. app-ng-runtime/components/prefab/fesm2015/index.mjs.map +1 -1
  449. app-ng-runtime/components/prefab/fesm2020/index.mjs +8 -14
  450. app-ng-runtime/components/prefab/fesm2020/index.mjs.map +1 -1
  451. app-ng-runtime/components/prefab/prefab-container/prefab-container.directive.d.ts +3 -4
  452. app-ng-runtime/components/prefab/prefab.directive.d.ts +2 -4
  453. app-ng-runtime/mobile/components/basic/default/bundles/index.umd.js +32 -37
  454. app-ng-runtime/mobile/components/basic/default/esm2020/network-info-toaster/network-info-toaster.component.mjs +7 -10
  455. app-ng-runtime/mobile/components/basic/default/fesm2015/index.mjs +10 -15
  456. app-ng-runtime/mobile/components/basic/default/fesm2015/index.mjs.map +1 -1
  457. app-ng-runtime/mobile/components/basic/default/fesm2020/index.mjs +10 -13
  458. app-ng-runtime/mobile/components/basic/default/fesm2020/index.mjs.map +1 -1
  459. app-ng-runtime/mobile/components/basic/default/network-info-toaster/network-info-toaster.component.d.ts +3 -4
  460. app-ng-runtime/mobile/components/containers/segmented-control/bundles/index.umd.js +18 -29
  461. app-ng-runtime/mobile/components/containers/segmented-control/esm2020/segment-content/segment-content.component.mjs +8 -13
  462. app-ng-runtime/mobile/components/containers/segmented-control/esm2020/segmented-control.component.mjs +9 -13
  463. app-ng-runtime/mobile/components/containers/segmented-control/fesm2015/index.mjs +12 -23
  464. app-ng-runtime/mobile/components/containers/segmented-control/fesm2015/index.mjs.map +1 -1
  465. app-ng-runtime/mobile/components/containers/segmented-control/fesm2020/index.mjs +12 -19
  466. app-ng-runtime/mobile/components/containers/segmented-control/fesm2020/index.mjs.map +1 -1
  467. app-ng-runtime/mobile/components/containers/segmented-control/segment-content/segment-content.component.d.ts +2 -4
  468. app-ng-runtime/mobile/components/containers/segmented-control/segmented-control.component.d.ts +2 -4
  469. app-ng-runtime/mobile/components/data/media-list/bundles/index.umd.js +30 -36
  470. app-ng-runtime/mobile/components/data/media-list/esm2020/media-list.component.mjs +14 -18
  471. app-ng-runtime/mobile/components/data/media-list/fesm2015/index.mjs +11 -17
  472. app-ng-runtime/mobile/components/data/media-list/fesm2015/index.mjs.map +1 -1
  473. app-ng-runtime/mobile/components/data/media-list/fesm2020/index.mjs +11 -15
  474. app-ng-runtime/mobile/components/data/media-list/fesm2020/index.mjs.map +1 -1
  475. app-ng-runtime/mobile/components/data/media-list/media-list.component.d.ts +2 -4
  476. app-ng-runtime/mobile/components/device/barcode-scanner/barcode-scanner.component.d.ts +2 -4
  477. app-ng-runtime/mobile/components/device/barcode-scanner/bundles/index.umd.js +28 -34
  478. app-ng-runtime/mobile/components/device/barcode-scanner/esm2020/barcode-scanner.component.mjs +10 -14
  479. app-ng-runtime/mobile/components/device/barcode-scanner/fesm2015/index.mjs +8 -14
  480. app-ng-runtime/mobile/components/device/barcode-scanner/fesm2015/index.mjs.map +1 -1
  481. app-ng-runtime/mobile/components/device/barcode-scanner/fesm2020/index.mjs +8 -12
  482. app-ng-runtime/mobile/components/device/barcode-scanner/fesm2020/index.mjs.map +1 -1
  483. app-ng-runtime/mobile/components/device/camera/bundles/index.umd.js +12 -18
  484. app-ng-runtime/mobile/components/device/camera/camera.component.d.ts +2 -4
  485. app-ng-runtime/mobile/components/device/camera/esm2020/camera.component.mjs +9 -13
  486. app-ng-runtime/mobile/components/device/camera/fesm2015/index.mjs +7 -13
  487. app-ng-runtime/mobile/components/device/camera/fesm2015/index.mjs.map +1 -1
  488. app-ng-runtime/mobile/components/device/camera/fesm2020/index.mjs +7 -11
  489. app-ng-runtime/mobile/components/device/camera/fesm2020/index.mjs.map +1 -1
  490. app-ng-runtime/mobile/components/page/mobile-navbar/bundles/index.umd.js +3 -6
  491. app-ng-runtime/mobile/components/page/mobile-navbar/esm2020/mobile-navbar.component.mjs +6 -9
  492. app-ng-runtime/mobile/components/page/mobile-navbar/fesm2015/index.mjs +4 -7
  493. app-ng-runtime/mobile/components/page/mobile-navbar/fesm2015/index.mjs.map +1 -1
  494. app-ng-runtime/mobile/components/page/mobile-navbar/fesm2020/index.mjs +4 -7
  495. app-ng-runtime/mobile/components/page/mobile-navbar/fesm2020/index.mjs.map +1 -1
  496. app-ng-runtime/mobile/components/page/mobile-navbar/mobile-navbar.component.d.ts +3 -4
  497. app-ng-runtime/mobile/components/page/tab-bar/bundles/index.umd.js +32 -36
  498. app-ng-runtime/mobile/components/page/tab-bar/esm2020/tabbar.component.mjs +8 -13
  499. app-ng-runtime/mobile/components/page/tab-bar/fesm2015/index.mjs +7 -11
  500. app-ng-runtime/mobile/components/page/tab-bar/fesm2015/index.mjs.map +1 -1
  501. app-ng-runtime/mobile/components/page/tab-bar/fesm2020/index.mjs +7 -11
  502. app-ng-runtime/mobile/components/page/tab-bar/fesm2020/index.mjs.map +1 -1
  503. app-ng-runtime/mobile/components/page/tab-bar/tabbar.component.d.ts +2 -4
  504. app-ng-runtime/package.json +1 -1
@@ -1,5 +1,5 @@
1
- import { Component, HostBinding, Injector, ViewEncapsulation, Optional } from '@angular/core';
2
- import { App, DataSource, getClonedObject, isDataSourceEqual, isEmptyObject, isNumberType, prettifyLabels, removeAttr, triggerFn, UserDefinedExecutionContext } from '@wm/core';
1
+ import { Component, HostBinding, Injector, ViewEncapsulation } from '@angular/core';
2
+ import { App, DataSource, getClonedObject, isDataSourceEqual, isEmptyObject, isNumberType, prettifyLabels, removeAttr, triggerFn } from '@wm/core';
3
3
  import { APPLY_STYLES_TYPE, provideAsWidgetRef, StylableComponent, styler, } from '@wm/components/base';
4
4
  import { registerProps } from './chart.props';
5
5
  import { allShapes, getDateList, getSampleData, initChart, isAreaChart, isAxisDomainValid, isBarChart, isBubbleChart, isChartDataArray, isChartDataJSON, isLineTypeChart, isPieType, postPlotChartProcess } from './chart.utils';
@@ -910,10 +910,9 @@ export class ChartComponent extends StylableComponent {
910
910
  break;
911
911
  }
912
912
  }
913
- constructor(inj, app, _viewParent) {
914
- super(inj, WIDGET_CONFIG, _viewParent);
913
+ constructor(inj, app) {
914
+ super(inj, WIDGET_CONFIG);
915
915
  this.app = app;
916
- this._viewParent = _viewParent;
917
916
  this.iconclass = '';
918
917
  this.nonPrimaryColumns = [];
919
918
  this.xDataKeyArr = [];
@@ -962,7 +961,7 @@ export class ChartComponent extends StylableComponent {
962
961
  }
963
962
  }
964
963
  ChartComponent.initializeProps = registerProps();
965
- ChartComponent.ɵfac = function ChartComponent_Factory(t) { return new (t || ChartComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.App), i0.ɵɵdirectiveInject(i1.UserDefinedExecutionContext, 8)); };
964
+ ChartComponent.ɵfac = function ChartComponent_Factory(t) { return new (t || ChartComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.App)); };
966
965
  ChartComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ChartComponent, selectors: [["div", "wmChart", ""]], hostVars: 2, hostBindings: function ChartComponent_HostBindings(rf, ctx) { if (rf & 2) {
967
966
  i0.ɵɵclassProp("panel", ctx.title);
968
967
  } }, features: [i0.ɵɵProvidersFeature([
@@ -988,10 +987,8 @@ ChartComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ChartCompone
988
987
  args: [{ selector: 'div[wmChart]', providers: [
989
988
  provideAsWidgetRef(ChartComponent)
990
989
  ], encapsulation: ViewEncapsulation.None, template: "<div class=\"panel-heading\" *ngIf=\"title\">\n <h3 class=\"panel-title\">\n <div class=\"pull-left\"><i class=\"app-icon panel-icon {{iconclass}}\" [class.ng-hide]=\"!iconclass\"></i></div>\n <div class=\"heading\" [innerHTML]=\"title\"></div>\n <div class=\"description\" *ngIf=\"subheading\" [innerHTML]=\"subheading\"></div>\n </h3>\n</div>\n<div class=\"app-chart-inner\" [ngClass]=\"{'loading':isLoadInProgress, 'panel-body': title}\">\n <svg></svg>\n <div class=\"wm-content-info readonly-wrapper\" *ngIf=\"showContentLoadError && showNoDataMsg\">\n <p class=\"wm-message\" [title]=\"hintMsg\" [ngClass]=\"{'error': invalidConfig}\" [innerText]=\"errMsg\"></p>\n </div>\n <div wmSpinner show.bind=\"isLoadInProgress\" caption.bind=\"loadingdatamsg\"></div>\n</div>\n", styles: [".nvd3 .nv-axis line,.nvd3 .nv-axis path{fill:none;shape-rendering:crispEdges}.nv-brush .extent,.nvd3 .background path,.nvd3 .nv-axis line,.nvd3 .nv-axis path{shape-rendering:crispEdges}.nv-distx,.nv-disty,.nv-noninteractive,.nvd3 .nv-axis,.nvd3.nv-pie .nv-label,.nvd3.nv-sparklineplus g.nv-hoverValue{pointer-events:none}.nvd3 .nv-axis{opacity:1}.nvd3 .nv-axis.nv-disabled,.nvd3 .nv-controlsWrap .nv-legend .nv-check-box .nv-check{opacity:0}.nvd3 .nv-axis path{stroke:#000;stroke-opacity:.75}.nvd3 .nv-axis path.domain{stroke-opacity:.75}.nvd3 .nv-axis.nv-x path.domain{stroke-opacity:0}.nvd3 .nv-axis line{stroke:#e5e5e5}.nvd3 .nv-axis .zero line,.nvd3 .nv-axis line.zero{stroke-opacity:.75}.nvd3 .nv-axis .nv-axisMaxMin text{font-weight:700}.nvd3 .x .nv-axis .nv-axisMaxMin text,.nvd3 .x2 .nv-axis .nv-axisMaxMin text,.nvd3 .x3 .nv-axis .nv-axisMaxMin text{text-anchor:middle}.nvd3 .nv-bars rect{fill-opacity:.75;transition:fill-opacity .25s linear}.nvd3 .nv-bars rect.hover{fill-opacity:1}.nvd3 .nv-bars .hover rect{fill:#add8e6}.nvd3 .nv-bars text{fill:transparent}.nvd3 .nv-bars .hover text{fill:#000}.nvd3 .nv-discretebar .nv-groups rect,.nvd3 .nv-multibar .nv-groups rect,.nvd3 .nv-multibarHorizontal .nv-groups rect{stroke-opacity:0;transition:fill-opacity .25s linear}.with-transitions .nv-candlestickBar .nv-ticks .nv-tick,.with-transitions .nvd3 .nv-groups .nv-point{transition:stroke-width .25s linear,stroke-opacity .25s linear}.nvd3 .nv-candlestickBar .nv-ticks rect:hover,.nvd3 .nv-discretebar .nv-groups rect:hover,.nvd3 .nv-multibar .nv-groups rect:hover,.nvd3 .nv-multibarHorizontal .nv-groups rect:hover{fill-opacity:1}.nvd3 .nv-discretebar .nv-groups text,.nvd3 .nv-multibarHorizontal .nv-groups text{font-weight:700;fill:#000;stroke:transparent}.nvd3 .nv-boxplot circle{fill-opacity:.5}.nvd3 .nv-boxplot circle:hover,.nvd3 .nv-boxplot rect:hover{fill-opacity:1}.nvd3 line.nv-boxplot-median{stroke:#000}.nv-boxplot-tick:hover{stroke-width:2.5px}.nvd3.nv-bullet{font:10px sans-serif}.nvd3.nv-bullet .nv-measure{fill-opacity:.8}.nvd3.nv-bullet .nv-measure:hover{fill-opacity:1}.nvd3.nv-bullet .nv-marker{stroke:#000;stroke-width:2px}.nvd3.nv-bullet .nv-markerTriangle{stroke:#000;fill:#fff;stroke-width:1.5px}.nvd3.nv-bullet .nv-markerLine{stroke:#000;stroke-width:1.5px}.nvd3.nv-bullet .nv-tick line{stroke:#666;stroke-width:.5px}.nvd3.nv-bullet .nv-range.nv-s0{fill:#eee}.nvd3.nv-bullet .nv-range.nv-s1{fill:#ddd}.nvd3.nv-bullet .nv-range.nv-s2{fill:#ccc}.nvd3.nv-bullet .nv-title{font-size:14px;font-weight:700}.nvd3.nv-bullet .nv-subtitle{fill:#999}.nvd3.nv-bullet .nv-range{fill:#bababa;fill-opacity:.4}.nvd3.nv-bullet .nv-range:hover{fill-opacity:.7}.nvd3.nv-candlestickBar .nv-ticks .nv-tick{stroke-width:1px}.nvd3.nv-candlestickBar .nv-ticks .nv-tick.hover{stroke-width:2px}.nvd3.nv-candlestickBar .nv-ticks .nv-tick.positive rect{stroke:#2ca02c;fill:#2ca02c}.nvd3.nv-candlestickBar .nv-ticks .nv-tick.negative rect{stroke:#d62728;fill:#d62728}.nvd3.nv-candlestickBar .nv-ticks line{stroke:#333}.nv-force-node{stroke:#fff;stroke-width:1.5px}.nv-force-link{stroke:#999;stroke-opacity:.6}.nv-force-node text{stroke-width:0}.nvd3 .nv-check-box .nv-box{fill-opacity:0;stroke-width:2}.nvd3 .nv-check-box .nv-check{fill-opacity:0;stroke-width:4}.nvd3 .nv-series.nv-disabled .nv-check-box .nv-check{fill-opacity:0;stroke-opacity:0}.nvd3.nv-linePlusBar .nv-bar rect{fill-opacity:.75}.nvd3.nv-linePlusBar .nv-bar rect:hover{fill-opacity:1}.nvd3 .nv-groups path.nv-line{fill:none}.nvd3 .nv-groups path.nv-area{stroke:none}.nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point{fill-opacity:0;stroke-opacity:0}.nvd3.nv-scatter.nv-single-point .nv-groups .nv-point{fill-opacity:.5!important;stroke-opacity:.5!important}.nvd3 .nv-groups .nv-point.hover,.nvd3.nv-scatter .nv-groups .nv-point.hover{stroke-width:7px;fill-opacity:.95!important;stroke-opacity:.95!important}.nvd3 .nv-point-paths path{stroke:#aaa;stroke-opacity:0;fill:#eee;fill-opacity:0}.nvd3 .nv-indexLine{cursor:ew-resize}svg.nvd3-svg{-webkit-user-select:none;-moz-user-select:none;user-select:none;display:block;width:100%;height:100%}.nvtooltip.with-3d-shadow,.with-3d-shadow .nvtooltip{box-shadow:0 5px 10px #0003;border-radius:5px}.nvd3 text{font:400 12px Arial,sans-serif}.nvd3 .title{font:700 14px Arial,sans-serif}.nvd3 .nv-background{fill:#fff;fill-opacity:0}.nvd3.nv-noData{font-size:18px;font-weight:700}.nv-brush .extent{fill-opacity:.125}.nv-brush .resize path{fill:#eee;stroke:#666}.nvd3 .nv-legend .nv-series{cursor:pointer}.nvd3 .nv-legend .nv-disabled circle{fill-opacity:0}.nvd3 .nv-brush .extent{fill-opacity:0!important}.nvd3 .nv-brushBackground rect{stroke:#000;stroke-width:.4;fill:#fff;fill-opacity:.7}@media print{.nvd3 text{stroke-width:0;fill-opacity:1}}.nvd3.nv-ohlcBar .nv-ticks .nv-tick{stroke-width:1px}.nvd3.nv-ohlcBar .nv-ticks .nv-tick.hover{stroke-width:2px}.nvd3.nv-ohlcBar .nv-ticks .nv-tick.positive{stroke:#2ca02c}.nvd3.nv-ohlcBar .nv-ticks .nv-tick.negative{stroke:#d62728}.nvd3 .background path{fill:none;stroke:#eee;stroke-opacity:.4}.nvd3 .foreground path{fill:none;stroke-opacity:.7}.nvd3 .nv-parallelCoordinates-brush .extent{fill:#fff;fill-opacity:.6;stroke:gray;shape-rendering:crispEdges}.nvd3 .nv-parallelCoordinates .hover{fill-opacity:1;stroke-width:3px}.nvd3 .missingValuesline line{fill:none;stroke:#000;stroke-width:1;stroke-opacity:1;stroke-dasharray:5,5}.nvd3.nv-pie .nv-pie-title{font-size:24px;fill:#13c4f996}.nvd3.nv-pie .nv-slice text{stroke:#000;stroke-width:0}.nvd3.nv-pie path{transition:fill-opacity .25s linear,stroke-width .25s linear,stroke-opacity .25s linear;stroke:#fff;stroke-width:1px;stroke-opacity:1;fill-opacity:.7}.nvd3.nv-pie .hover path{fill-opacity:1}.nvd3.nv-pie .nv-label rect{fill-opacity:0;stroke-opacity:0}.nvd3 .nv-groups .nv-point.hover{stroke-width:20px;stroke-opacity:.5}.nvd3 .nv-scatter .nv-point.hover{fill-opacity:1}.nvd3.nv-sparkline path{fill:none}.nvd3.nv-sparklineplus .nv-hoverValue line{stroke:#333;stroke-width:1.5px}.nvd3.nv-sparklineplus,.nvd3.nv-sparklineplus g{pointer-events:all}.nvd3 .nv-interactiveGuideLine,.nvtooltip{pointer-events:none}.nvd3 .nv-hoverArea{fill-opacity:0;stroke-opacity:0}.nvd3.nv-sparklineplus .nv-xValue,.nvd3.nv-sparklineplus .nv-yValue{stroke-width:0;font-size:.9em;font-weight:400}.nvd3.nv-sparklineplus .nv-yValue{stroke:#f66}.nvd3.nv-sparklineplus .nv-maxValue{stroke:#2ca02c;fill:#2ca02c}.nvd3.nv-sparklineplus .nv-minValue{stroke:#d62728;fill:#d62728}.nvd3.nv-sparklineplus .nv-currentValue{font-weight:700;font-size:1.1em}.nvtooltip h3,.nvtooltip table td.key{font-weight:400}.nvd3.nv-stackedarea path.nv-area{fill-opacity:.7;stroke-opacity:0;transition:fill-opacity .25s linear,stroke-opacity .25s linear}.nvd3.nv-stackedarea path.nv-area.hover{fill-opacity:.9}.nvd3.nv-stackedarea .nv-groups .nv-point{stroke-opacity:0;fill-opacity:0}.nvtooltip{position:absolute;color:#000;padding:1px;z-index:10000;display:block;font-family:Arial,sans-serif;font-size:13px;text-align:left;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none;background:rgba(255,255,255,.8);border:1px solid rgba(0,0,0,.5);border-radius:4px}.nvtooltip h3,.nvtooltip p{margin:0;text-align:center}.nvtooltip.with-transitions,.with-transitions .nvtooltip{transition:opacity 50ms linear;transition-delay:.2s}.nvtooltip.x-nvtooltip,.nvtooltip.y-nvtooltip{padding:8px}.nvtooltip h3{padding:4px 14px;line-height:18px;background-color:#f7f7f7bf;color:#000;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.nvtooltip p{padding:5px 14px}.nvtooltip span{display:inline-block;margin:2px 0}.nvtooltip table{margin:6px;border-spacing:0}.nvtooltip table td{padding:2px 9px 2px 0;vertical-align:middle}.nvtooltip table td.key.total{font-weight:700}.nvtooltip table td.value{text-align:right;font-weight:700}.nvtooltip table td.percent{color:#a9a9a9}.nvtooltip table tr.highlight td{padding:1px 9px 1px 0;border-bottom-style:solid;border-bottom-width:1px;border-top-style:solid;border-top-width:1px}.nvtooltip table td.legend-color-guide div{vertical-align:middle;width:12px;height:12px;border:1px solid #999}.nvtooltip .footer{padding:3px;text-align:center}.nvtooltip-pending-removal{pointer-events:none;display:none}.nvd3 line.nv-guideline{stroke:#ccc}\n"] }]
991
- }], function () { return [{ type: i0.Injector }, { type: i1.App }, { type: i1.UserDefinedExecutionContext, decorators: [{
992
- type: Optional
993
- }] }]; }, { title: [{
990
+ }], function () { return [{ type: i0.Injector }, { type: i1.App }]; }, { title: [{
994
991
  type: HostBinding,
995
992
  args: ['class.panel']
996
993
  }] }); })();
997
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0L3NyYy9jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnQvc3JjL2NoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkIsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXRILE9BQU8sRUFDSCxHQUFHLEVBQ0gsVUFBVSxFQUNWLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFlBQVksRUFDWixjQUFjLEVBQ2QsVUFBVSxFQUNWLFNBQVMsRUFHVCwyQkFBMkIsRUFDOUIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEdBQUksTUFBTSxxQkFBcUIsQ0FBQztBQUUvSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7SUNmek4seUJBQTJFOzs7SUFBL0IsZ0VBQXdCOzs7SUFKNUUsOEJBQXlDLFlBQUEsYUFBQTtJQUVWLG9CQUE4RTtJQUFBLGlCQUFNO0lBQzNHLHlCQUErQztJQUMvQyxxRUFBMkU7SUFDL0UsaUJBQUssRUFBQTs7O0lBSHlCLGVBQXlDO0lBQXpDLHVFQUF5QztJQUFD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QWdCO2lCQUNyQyxpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJOztzQkE2OEJTLFFBQVE7d0JBeDVCMUIsS0FBSztrQkFBaEMsV0FBVzttQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIEluamVjdG9yLCBWaWV3RW5jYXBzdWxhdGlvbiwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICAgIEFwcCxcbiAgICBEYXRhU291cmNlLFxuICAgIGdldENsb25lZE9iamVjdCxcbiAgICBpc0RhdGFTb3VyY2VFcXVhbCxcbiAgICBpc0VtcHR5T2JqZWN0LFxuICAgIGlzTnVtYmVyVHlwZSxcbiAgICBwcmV0dGlmeUxhYmVscyxcbiAgICByZW1vdmVBdHRyLFxuICAgIHRyaWdnZXJGbixcbiAgICBpc01vYmlsZUFwcCxcbiAgICBub29wLFxuICAgIFVzZXJEZWZpbmVkRXhlY3V0aW9uQ29udGV4dFxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBBUFBMWV9TVFlMRVNfVFlQRSwgSVJlZHJhd2FibGVDb21wb25lbnQsIHByb3ZpZGVBc1dpZGdldFJlZiwgU3R5bGFibGVDb21wb25lbnQsIHN0eWxlciwgIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL2NoYXJ0LnByb3BzJztcbmltcG9ydCB7IGFsbFNoYXBlcywgZ2V0RGF0ZUxpc3QsIGdldFNhbXBsZURhdGEsIGluaXRDaGFydCwgaXNBcmVhQ2hhcnQsIGlzQXhpc0RvbWFpblZhbGlkLCBpc0JhckNoYXJ0LCBpc0J1YmJsZUNoYXJ0LCBpc0NoYXJ0RGF0YUFycmF5LCBpc0NoYXJ0RGF0YUpTT04sIGlzTGluZVR5cGVDaGFydCwgaXNQaWVUeXBlLCBwb3N0UGxvdENoYXJ0UHJvY2VzcyB9IGZyb20gJy4vY2hhcnQudXRpbHMnO1xuXG5kZWNsYXJlIGNvbnN0ICQsIF8sIGQzLCBudjtcblxuY29uc3QgV0lER0VUX0NPTkZJRyA9IHt3aWRnZXRUeXBlOiAnd20tY2hhcnQnLCBob3N0Q2xhc3M6ICdhcHAtY2hhcnQnfTtcblxuY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgJ0J1YmJsZScgOiBbJ2J1YmJsZXNpemUnLCAnc2hhcGUnXVxuICAgIH0sXG4gICAgTk9ORSA9ICdub25lJyxcbiAgICBhZHZhbmNlRGF0YVByb3BzID0gWydhZ2dyZWdhdGlvbicsICdhZ2dyZWdhdGlvbmNvbHVtbicsICdncm91cGJ5JywgJ29yZGVyYnknXSxcbiAgICAvLyBYUGF0aHMgdG8gZ2V0IGFjdHVhbCBkYXRhIG9mIGRhdGEgcG9pbnRzIGluIGNoYXJ0c1xuICAgIGNoYXJ0RGF0YVBvaW50WHBhdGggPSB7XG4gICAgICAgICdDb2x1bW4nICAgICAgICAgOiAncmVjdC5udi1iYXInLFxuICAgICAgICAnQmFyJyAgICAgICAgICAgIDogJ2cubnYtYmFyJyxcbiAgICAgICAgJ0FyZWEnICAgICAgICAgICA6ICcubnYtc3RhY2tlZGFyZWEgLm52LXBvaW50JyxcbiAgICAgICAgJ0N1bXVsYXRpdmUgTGluZSc6ICcubnYtY3VtdWxhdGl2ZUxpbmUgLm52LXNjYXR0ZXJXcmFwIHBhdGgubnYtcG9pbnQnLFxuICAgICAgICAnTGluZScgICAgICAgICAgIDogJy5udi1saW5lQ2hhcnQgLm52LXNjYXR0ZXJXcmFwIHBhdGgubnYtcG9pbnQnLFxuICAgICAgICAnUGllJyAgICAgICAgICAgIDogJy5udi1waWVDaGFydCAubnYtc2xpY2UgcGF0aCcsXG4gICAgICAgICdEb251dCcgICAgICAgICAgOiAnLm52LXBpZUNoYXJ0IC5udi1zbGljZSBwYXRoJyxcbiAgICAgICAgJ0J1YmJsZScgICAgICAgICA6ICcubnYtc2NhdHRlckNoYXJ0IC5udi1wb2ludC1wYXRocyBwYXRoJ1xuICAgIH0sXG4gICAgLy8gYWxsIHByb3BlcnRpZXMgb2YgdGhlIGNoYXJ0XG4gICAgYWxsT3B0aW9ucyA9IFsnYnViYmxlc2l6ZScsICdzaGFwZSddLFxuICAgIHN0eWxlUHJvcHMgPSB7XG4gICAgICAgICdmb250dW5pdCcgICAgICA6ICdmb250LXNpemUnLFxuICAgICAgICAnZm9udHNpemUnICAgICAgOiAnZm9udC1zaXplJyxcbiAgICAgICAgJ2NvbG9yJyAgICAgICAgIDogJ2ZpbGwnLFxuICAgICAgICAnZm9udGZhbWlseScgICAgOiAnZm9udC1mYW1pbHknLFxuICAgICAgICAnZm9udHdlaWdodCcgICAgOiAnZm9udC13ZWlnaHQnLFxuICAgICAgICAnZm9udHN0eWxlJyAgICAgOiAnZm9udC1zdHlsZScsXG4gICAgICAgICd0ZXh0ZGVjb3JhdGlvbic6ICd0ZXh0LWRlY29yYXRpb24nXG4gICAgfSxcbiAgICAvLyBHZXR0aW5nIHRoZSByZWxldmFudCBhZ2dyZWdhdGlvbiBmdW5jdGlvbiBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgb3B0aW9uXG4gICAgYWdncmVnYXRpb25Gbk1hcCA9IHtcbiAgICAgICAgJ2F2ZXJhZ2UnIDogJ0FWRycsXG4gICAgICAgICdjb3VudCcgICA6ICdDT1VOVCcsXG4gICAgICAgICdtYXhpbXVtJyA6ICdNQVgnLFxuICAgICAgICAnbWluaW11bScgOiAnTUlOJyxcbiAgICAgICAgJ3N1bScgICAgIDogJ1NVTSdcbiAgICB9O1xuXG5jb25zdCBnZXRCb29sZWFuVmFsdWUgPSB2YWwgPT4ge1xuICAgIGlmICh2YWwgPT09IHRydWUgfHwgdmFsID09PSAndHJ1ZScpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh2YWwgPT09IGZhbHNlIHx8IHZhbCA9PT0gJ2ZhbHNlJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vLyByZXR1cm5zIG9yZGVyYnkgY29sdW1ucyBhbmQgdGhlaXIgb3JkZXJzIGluIHR3byBzZXBhcmF0ZSBhcnJheXNcbmNvbnN0IGdldExvZGFzaE9yZGVyQnlGb3JtYXQgPSBvcmRlcmJ5ID0+IHtcbiAgICBsZXQgY29sdW1ucztcbiAgICBjb25zdCBvcmRlckJ5Q29sdW1ucyA9IFtdLFxuICAgICAgICBvcmRlcnMgPSBbXTtcblxuICAgIF8uZm9yRWFjaChfLnNwbGl0KG9yZGVyYnksICcsJyksIGZ1bmN0aW9uIChjb2wpIHtcbiAgICAgICAgY29sdW1ucyA9IF8uc3BsaXQoY29sLCAnOicpO1xuICAgICAgICBvcmRlckJ5Q29sdW1ucy5wdXNoKGNvbHVtbnNbMF0pO1xuICAgICAgICBvcmRlcnMucHVzaChjb2x1bW5zWzFdKTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICAnY29sdW1ucycgOiBvcmRlckJ5Q29sdW1ucyxcbiAgICAgICAgJ29yZGVycycgIDogb3JkZXJzXG4gICAgfTtcbn07XG5cbi8vIFJlcGxhY2luZyB0aGUgJy4nIGJ5IHRoZSAnJCcgYmVjYXVzZSAnLicgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgYWxpYXMgbmFtZXNcbmNvbnN0IGdldFZhbGlkQWxpYXNOYW1lID0gYWxpYXNOYW1lID0+IGFsaWFzTmFtZSA/IGFsaWFzTmFtZS5yZXBsYWNlKC9cXC4vZywgJyQnKSA6IG51bGw7XG5cbi8vIEFwcGx5aW5nIHRoZSBmb250IHJlbGF0ZWQgc3R5bGVzIGZvciB0aGUgY2hhcnRcbmNvbnN0IHNldFRleHRTdHlsZSA9IChwcm9wZXJ0aWVzLCBpZCkgPT4ge1xuICAgIGNvbnN0IGNoYXJ0dGV4dCA9IGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgaWQgKyAnIHN2ZycpLnNlbGVjdEFsbCgndGV4dCcpO1xuICAgIGNoYXJ0dGV4dC5zdHlsZShwcm9wZXJ0aWVzKTtcbn07XG5cbmNvbnN0IGFuZ2xlID0gZCA9PiB7XG4gICAgY29uc3QgYSA9IChkLnN0YXJ0QW5nbGUgKyBkLmVuZEFuZ2xlKSAqIDkwIC8gTWF0aC5QSSAtIDkwO1xuICAgIHJldHVybiBhID4gOTAgPyBhIC0gMTgwIDogYTtcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZGl2W3dtQ2hhcnRdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQHdhdmVtYWtlci5jb20vbnZkMy9idWlsZC9udi5kMy5taW4uY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihDaGFydENvbXBvbmVudClcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgSVJlZHJhd2FibGVDb21wb25lbnQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICB4YXhpc2RhdGFrZXk7XG4gICAgeWF4aXNkYXRha2V5O1xuICAgIGdyb3VwYnk7XG4gICAgYWdncmVnYXRpb247XG4gICAgYWdncmVnYXRpb25jb2x1bW47XG4gICAgaXNWaXN1YWxseUdyb3VwZWQ7XG4gICAgb3JkZXJieTtcbiAgICBpY29uY2xhc3MgPSAnJztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgc2hvd0NvbnRlbnRMb2FkRXJyb3I7XG4gICAgaW52YWxpZENvbmZpZztcbiAgICBlcnJNc2c7XG4gICAgc2hhcGU6IHN0cmluZztcbiAgICBkYXRhc291cmNlOiBhbnk7XG4gICAgZm9udHNpemU6IHN0cmluZztcbiAgICBzZWxlY3RlZGl0ZW06IGFueTtcbiAgICBmb250dW5pdDogc3RyaW5nO1xuICAgIG9mZnNldHRvcDogbnVtYmVyO1xuICAgIG9mZnNldGxlZnQ6IG51bWJlcjtcbiAgICBvZmZzZXRyaWdodDogbnVtYmVyO1xuICAgIG9mZnNldGJvdHRvbTogbnVtYmVyO1xuICAgIHNob3dsYWJlbHM6IGFueTtcbiAgICB0aGVtZTogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSAkaWQ7XG4gICAgcHJpdmF0ZSBzY29wZWRhdGFzZXQ6IGFueTtcbiAgICBwcml2YXRlIGJpbmRkYXRhc2V0OiBhbnk7XG4gICAgcHJpdmF0ZSBzaG93bGFiZWxzb3V0c2lkZTogYW55O1xuICAgIHByaXZhdGUgX3Jlc2l6ZUZuOiBhbnk7XG4gICAgcHJpdmF0ZSBjaGFydDogYW55O1xuICAgIHByaXZhdGUgY2xlYXJDYW52YXM6IGJvb2xlYW47XG4gICAgcHVibGljIGlzTG9hZEluUHJvZ3Jlc3M6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBmaWx0ZXJGaWVsZHM6IGJvb2xlYW4gfCBhbnk7XG4gICAgcHJpdmF0ZSBkYXRhc2V0OiBhbnk7XG4gICAgcHJpdmF0ZSBheGlzb3B0aW9uczogYW55O1xuICAgIHByaXZhdGUgbnVtZXJpY0NvbHVtbnM6IGFueTtcbiAgICBwcml2YXRlIG5vblByaW1hcnlDb2x1bW5zOiBhbnkgPSBbXTtcbiAgICBwcml2YXRlIHZhcmlhYmxlSW5mbGlnaHQ6IGFueTtcbiAgICBwcml2YXRlIGNoYXJ0UmVhZHk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSB4RGF0YUtleUFycjogYW55ID0gW107XG4gICAgcHJpdmF0ZSB4QXhpc0RhdGFUeXBlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBidWJibGVzaXplOiBhbnk7XG4gICAgcHVibGljIHNob3dOb0RhdGFNc2c6IGFueTtcbiAgICBwcml2YXRlIHNhbXBsZURhdGE6IGFueVtdO1xuICAgIHByaXZhdGUgY2hhcnREYXRhOiBhbnlbXSA9IFtdO1xuICAgIHByaXZhdGUgX3Byb2Nlc3NlZERhdGE6IGFueVtdID0gW107XG4gICAgcHJpdmF0ZSBfc3Vic2NpcHRpb25zOiBhbnkgPSBbXTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MucGFuZWwnKSB0aXRsZTtcblxuICAgIGlzR3JvdXBCeUVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhISh0aGlzLmdyb3VwYnkgJiYgdGhpcy5ncm91cGJ5ICE9PSBOT05FKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB4IGFuZCB5IGF4aXMgdGhhdCBhcmUgY2hvc2VuIGFyZSB2YWxpZCB0byBwbG90IGNoYXJ0XG4gICAgaXNWYWxpZEF4aXMoKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHggYXhpcyBhbmQgeSBheGlzIGFyZSBjaG9zZW4gYW5kIGFyZSBub3QgZXF1YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuYmluZGRhdGFzZXQgPyAodGhpcy54YXhpc2RhdGFrZXkgJiYgdGhpcy55YXhpc2RhdGFrZXkpIDogdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBhZ2dyZWdhdGlvbiBpcyBjaG9zZW5cbiAgICBpc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhKCh0aGlzLmlzR3JvdXBCeUVuYWJsZWQoKSAmJiB0aGlzLmFnZ3JlZ2F0aW9uICE9PSBOT05FICYmIHRoaXMuYWdncmVnYXRpb25jb2x1bW4pKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBlaXRoZXIgZ3JvdXBieSwgYWdncmVnYXRpb24gb3Igb3JkZXJieSBpcyBjaG9zZW5cbiAgICBpc0RhdGFGaWx0ZXJpbmdFbmFibGVkKCkge1xuICAgICAgICAvKlF1ZXJ5IG5lZWQgdG8gYmUgdHJpZ2dlcmVkIGlmIGFueSBvZiB0aGUgZm9sbG93aW5nIGNhc2VzIHNhdGlzZnlcbiAgICAgICAgKiAxLiBHcm91cCBCeSBhbmQgYWdncmVnYXRpb24gYm90aCBjaG9zZW5cbiAgICAgICAgKiAyLiBPbmx5IE9yZGVyIEJ5IGlzIGNob3NlblxuICAgICAgICAqICovXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSB8fCAoIXRoaXMuaXNWaXN1YWxseUdyb3VwZWQgJiYgdGhpcy5vcmRlcmJ5KTtcbiAgICB9XG5cbiAgICAvKkNoYXJ0cyBsaWtlIExpbmUsQXJlYSxDdW11bGF0aXZlIExpbmUgZG9lcyBub3Qgc3VwcG9ydCBhbnkgb3RoZXIgZGF0YXR5cGVcbiAgICAgICAgb3RoZXIgdGhhbiBpbnRlZ2VyIHVubGlrZSB0aGUgY29sdW1uIGFuZCBiYXIuSXQgaXMgYSBudmQzIGlzc3VlLiBJbm9yZGVyIHRvXG4gICAgICAgIHN1cHBvcnQgdGhhdCB0aGlzIGlzIGEgZml4Ki9cbiAgICBnZXR4QXhpc1ZhbChkYXRhT2JqLCB4S2V5LCBpbmRleCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IF8uZ2V0KGRhdGFPYmosIHhLZXkpO1xuICAgICAgICAvLyBJZiB4IGF4aXMgaXMgb3RoZXIgdGhhbiBudW1iZXIgdHlwZSB0aGVuIGFkZCBpbmRleGVzXG4gICAgICAgIGlmIChpc0xpbmVUeXBlQ2hhcnQodGhpcy50eXBlKSAmJiAhaXNOdW1iZXJUeXBlKHRoaXMueEF4aXNEYXRhVHlwZSkpIHtcbiAgICAgICAgICAgIC8vIFZlcmlmaWNhdGlvbiB0byBnZXQgdGhlIHVuaXF1ZSBkYXRhIGtleXNcbiAgICAgICAgICAgIHRoaXMueERhdGFLZXlBcnIucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8vIEdldHRpbmcgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBhbW9uZyBhbGwgdGhlIHggdmFsdWVzXG4gICAgZ2V0WE1pbk1heFZhbHVlcyhkYXR1bSkge1xuICAgICAgICBpZiAoIWRhdHVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeFZhbHVlczogYW55ID0ge307XG4gICAgICAgIC8qXG4gICAgICAgICBjb21wdXRlIHRoZSBtaW4geCB2YWx1ZVxuICAgICAgICAgZWc6IFdoZW4gZGF0YSBoYXMgb2JqZWN0c1xuICAgICAgICAgICAgaW5wdXQ6IFt7eDoxLCB5OjJ9LCB7eDoyLCB5OjN9LCB7eDozLCB5OjR9XVxuICAgICAgICAgICAgbWluIHg6IDFcbiAgICAgICAgIGVnOiBXaGVuIGRhdGEgaGFzIGFycmF5c1xuICAgICAgICAgICAgaW5wdXQ6IFtbMTAsIDIwXSwgWzIwLCAzMF0sIFszMCwgNDBdXTtcbiAgICAgICAgICAgIG1pbiB4OiAxMFxuICAgICAgICAqL1xuICAgICAgICB4VmFsdWVzLm1pbiA9IF8ubWluQnkoZGF0dW0udmFsdWVzLCBkYXRhT2JqZWN0ID0+IGRhdGFPYmplY3QueCB8fCBkYXRhT2JqZWN0WzBdKTtcbiAgICAgICAgLypcbiAgICAgICAgIGNvbXB1dGUgdGhlIG1heCB4IHZhbHVlXG4gICAgICAgICBlZzogV2hlbiBkYXRhIGhhcyBvYmplY3RzXG4gICAgICAgICAgICBpbnB1dDogW3t4OjEsIHk6Mn0sIHt4OjIsIHk6M30sIHt4OjMsIHk6NH1dXG4gICAgICAgICAgICBtYXggeDogM1xuICAgICAgICAgZWc6IFdoZW4gZGF0YSBoYXMgYXJyYXlzXG4gICAgICAgICAgICBpbnB1dDogW1sxMCwgMjBdLCBbMjAsIDMwXSwgWzMwLCA0MF1dO1xuICAgICAgICAgICAgbWF4IHg6IDMwXG4gICAgICAgICAqL1xuICAgICAgICB4VmFsdWVzLm1heCA9IF8ubWF4QnkoZGF0dW0udmFsdWVzLCBkYXRhT2JqZWN0ID0+IGRhdGFPYmplY3QueCB8fCBkYXRhT2JqZWN0WzBdKTtcbiAgICAgICAgcmV0dXJuIHhWYWx1ZXM7XG4gICAgfVxuXG4gICAgLy8gR2V0dGluZyB0aGUgbWluIGFuZCBtYXggdmFsdWVzIGFtb25nIGFsbCB0aGUgeSB2YWx1ZXNcbiAgICBnZXRZTWluTWF4VmFsdWVzKGRhdHVtKSB7XG4gICAgICAgIGNvbnN0IHlWYWx1ZXM6IGFueSA9IHt9LFxuICAgICAgICAgICAgbWluVmFsdWVzID0gW10sXG4gICAgICAgICAgICBtYXhWYWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKCFkYXR1bSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgIEdldHRpbmcgdGhlIG1pbiBhbmQgbWF4IHkgdmFsdWVzIGFtb25nIGFsbCB0aGUgc2VyaWVzIG9mIGRhdGFcbiAgICAgICAgIGNvbXB1dGUgdGhlIG1pbiB5IHZhbHVlXG4gICAgICAgICBlZzogV2hlbiBkYXRhIGhhcyBvYmplY3RzXG4gICAgICAgICAgICBpbnB1dDogW1t7eDoxLCB5OjJ9LCB7eDoyLCB5OjN9LCB7eDozLCB5OjR9XSwgW3t4OjIsIHk6M30sIHt4OjMsIHk6NH0sIHt4OjQsIHk6NX1dXVxuICAgICAgICAgICAgbWluIHkgdmFsdWVzIDogJzInKGFtb25nIGZpcnN0IHNldCkgJiAnMycoYW1vbmcgc2Vjb25kIHNldClcbiAgICAgICAgICAgIG1heCB5IHZhbHVlcyA6ICc0JyhhbW9uZyBmaXJzdCBzZXQpICYgJzUnKGFtb25nIHNlY29uZCBzZXQpXG5cbiAgICAgICAgIGVnOiBXaGVuIGRhdGEgaGFzIGFycmF5c1xuICAgICAgICAgICAgaW5wdXQ6IFtbWzEwLCAyMF0sIFsyMCwgMzBdLCBbMzAsIDQwXV0sIFtbMjAsIDMwXSwgWzMwLCA0MF0sIFs0MCwgNTBdXV1cbiAgICAgICAgICAgIG1pbiB5IHZhbHVlcyA6ICcyMCcoYW1vbmcgZmlyc3Qgc2V0KSAmICczMCcoYW1vbmcgc2Vjb25kIHNldClcbiAgICAgICAgICAgIG1heCB5IHZhbHVlcyA6ICc0MCcoYW1vbmcgZmlyc3Qgc2V0KSAmICc1MCcoYW1vbmcgc2Vjb25kIHNldClcbiAgICAgICAgICovXG5cbiAgICAgICAgXy5mb3JFYWNoKGRhdHVtLCBkYXRhID0+IHtcbiAgICAgICAgICAgIG1pblZhbHVlcy5wdXNoKF8ubWluQnkoZGF0YS52YWx1ZXMsIGZ1bmN0aW9uIChkYXRhT2JqZWN0KSB7IHJldHVybiBkYXRhT2JqZWN0LnkgfHwgZGF0YU9iamVjdFsxXTsgfSkpO1xuICAgICAgICAgICAgbWF4VmFsdWVzLnB1c2goXy5tYXhCeShkYXRhLnZhbHVlcywgZnVuY3Rpb24gKGRhdGFPYmplY3QpIHsgcmV0dXJuIGRhdGFPYmplY3QueSB8fCBkYXRhT2JqZWN0WzFdOyB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBHZXRzIHRoZSBsZWFzdCBhbmQgaGlnaGVzdCB2YWx1ZXMgYW1vbmcgYWxsIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgb2YgcmVzcGVjdGl2ZSBzZXJpZXMgb2YgZGF0YVxuICAgICAgICB5VmFsdWVzLm1pbiA9IF8ubWluQnkobWluVmFsdWVzLCBkYXRhT2JqZWN0ID0+IGRhdGFPYmplY3QueSB8fCBkYXRhT2JqZWN0WzFdKTtcbiAgICAgICAgeVZhbHVlcy5tYXggPSBfLm1heEJ5KG1heFZhbHVlcywgZGF0YU9iamVjdCA9PiBkYXRhT2JqZWN0LnkgfHwgZGF0YU9iamVjdFsxXSk7XG4gICAgICAgIHJldHVybiB5VmFsdWVzO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSB4LWF4aXMgdmFsdWVzIGFyZSB1bmRlZmluZWQsIHdlIHJldHVybiBlbXB0eSBhcnJheSBlbHNlIHdlIHJldHVybiB0aGUgdmFsdWVzXG4gICAgZ2V0VmFsaWREYXRhKHZhbHVlcykge1xuICAgICAgICByZXR1cm4gKHZhbHVlcy5sZW5ndGggPT09IDEgJiYgdmFsdWVzWzBdID09PSB1bmRlZmluZWQpID8gW10gOiB2YWx1ZXM7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0aGUgc2luZ2xlIGRhdGEgcG9pbnQgYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIGRhdGEgY2hhcnQgYWNjZXB0c1xuICAgIHZhbHVlRmluZGVyKGRhdGFPYmosIHhLZXksIHlLZXksIGluZGV4Pywgc2hhcGU/KSB7XG4gICAgICAgIGNvbnN0IHhWYWwgPSB0aGlzLmdldHhBeGlzVmFsKGRhdGFPYmosIHhLZXksIGluZGV4KSxcbiAgICAgICAgICAgIHZhbHVlID0gXy5nZXQoZGF0YU9iaiwgeUtleSksXG4gICAgICAgICAgICB5VmFsID0gcGFyc2VGbG9hdCh2YWx1ZSkgfHwgdmFsdWUsXG4gICAgICAgICAgICBzaXplID0gcGFyc2VGbG9hdChkYXRhT2JqW3RoaXMuYnViYmxlc2l6ZV0pIHx8IDI7XG4gICAgICAgIGxldCBkYXRhUG9pbnQ6IGFueSA9IHt9O1xuXG4gICAgICAgIGlmIChpc0NoYXJ0RGF0YUpTT04odGhpcy50eXBlKSkge1xuICAgICAgICAgICAgZGF0YVBvaW50LnggPSB4VmFsO1xuICAgICAgICAgICAgZGF0YVBvaW50LnkgPSB5VmFsO1xuICAgICAgICAgICAgLy8gb25seSBCdWJibGUgY2hhcnQgaGFzIHRoZSB0aGlyZCBkaW1lbnNpb25cbiAgICAgICAgICAgIGlmIChpc0J1YmJsZUNoYXJ0KHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnQuc2l6ZSA9IHNpemU7XG4gICAgICAgICAgICAgICAgZGF0YVBvaW50LnNoYXBlID0gc2hhcGUgfHwgJ2NpcmNsZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDaGFydERhdGFBcnJheSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICBkYXRhUG9pbnQgPSBbeFZhbCwgeVZhbF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWRkaW5nIGFjdHVhbCB1bndyYXBwZWQgZGF0YSB0byBjaGFydCBkYXRhIHRvIHVzZSBhdCB0aGUgdGltZSBvZiBzZWxlY3RlZCBkYXRhIHBvaW50IG9mIGNoYXJ0IGV2ZW50XG4gICAgICAgIGRhdGFQb2ludC5fZGF0YU9iaiA9IGRhdGFPYmo7XG4gICAgICAgIHJldHVybiBkYXRhUG9pbnQ7XG4gICAgfVxuXG4gICAgLy8gU2V0dGluZyBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlc1xuICAgIHNldEVyck1zZyhtZXNzYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dOb0RhdGFNc2cpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbnRlbnRMb2FkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkQ29uZmlnID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIFRPRE86IFNldCB0aGUgbG9jYWxlIGZyb20gdGhlIG1lc3NhZ2VcbiAgICAgICAgICAgIHRoaXMuZXJyTXNnID0gJyc7IC8vICRyb290U2NvcGUubG9jYWxlW21lc3NhZ2VdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzc0NoYXJ0RGF0YSgpIHtcbiAgICAgICAgdGhpcy5zYW1wbGVEYXRhID0gZ2V0U2FtcGxlRGF0YSh0aGlzKTtcbiAgICAgICAgLy8gc2NvcGUgdmFyaWFibGVzIHVzZWQgdG8ga2VlcCB0aGUgYWN0dWFsIGtleSB2YWx1ZXMgZm9yIHgtYXhpc1xuICAgICAgICB0aGlzLnhEYXRhS2V5QXJyID0gW107XG4gICAgICAgIC8vIFBsb3R0aW5nIHRoZSBjaGFydCB3aXRoIHNhbXBsZSBkYXRhIHdoZW4gdGhlIGNoYXJ0IGRhdGFzZXQgaXMgbm90IGJvdW5kXG4gICAgICAgIGlmICghdGhpcy5iaW5kZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy54RGF0YUtleUFyciA9IGdldERhdGVMaXN0KCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zYW1wbGVEYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0RGF0YSB8fCAhdGhpcy5jaGFydERhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGF0dW0gPSBbXSxcbiAgICAgICAgICAgIHlBeGlzS2V5LFxuICAgICAgICAgICAgc2hhcGVzOiBhbnkgPSBbXSxcbiAgICAgICAgICAgIHZhbHVlczogYW55ID0gW107XG4gICAgICAgIGNvbnN0IHhBeGlzS2V5ID0gdGhpcy54YXhpc2RhdGFrZXksXG4gICAgICAgICAgICB5QXhpc0tleXMgPSB0aGlzLnlheGlzZGF0YWtleSA/IHRoaXMueWF4aXNkYXRha2V5LnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgIGRhdGFTZXQgPSB0aGlzLmNoYXJ0RGF0YTtcblxuICAgICAgICBpZiAoXy5pc0FycmF5KGRhdGFTZXQpKSB7XG4gICAgICAgICAgICBpZiAoaXNQaWVUeXBlKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICB5QXhpc0tleSA9IHlBeGlzS2V5c1swXTtcbiAgICAgICAgICAgICAgICBkYXR1bSA9IF8ubWFwKGRhdGFTZXQsIChkYXRhT2JqLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRW1wdHlPYmplY3QoZGF0YVNldFtpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUZpbmRlcihkYXRhU2V0W2luZGV4XSwgeEF4aXNLZXksIHlBeGlzS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRhdHVtID0gdGhpcy5nZXRWYWxpZERhdGEoZGF0dW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNCdWJibGVDaGFydCh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNoYXBlcyA9IHRoaXMuc2hhcGUgPT09ICdyYW5kb20nID8gYWxsU2hhcGVzIDogdGhpcy5zaGFwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeUF4aXNLZXlzLmZvckVhY2goKHlBeGlzS2V5LCBzZXJpZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gIF8ubWFwKGRhdGFTZXQsIChkYXRhT2JqLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5T2JqZWN0KGRhdGFTZXRbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlRmluZGVyKGRhdGFTZXRbaW5kZXhdLCB4QXhpc0tleSwgeUF4aXNLZXksIGluZGV4LCAoXy5pc0FycmF5KHNoYXBlcykgJiYgc2hhcGVzW3Nlcmllc10pIHx8IHRoaXMuc2hhcGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gdGhpcy5nZXRWYWxpZERhdGEodmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0dW0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogcHJldHRpZnlMYWJlbHMoeUF4aXNLZXkpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXR1bTtcbiAgICB9XG5cbiAgICBzZXRDaGFydERhdGEoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc2VkRGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDaGFydERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzZWREYXRhO1xuICAgIH1cblxuICAgIC8vIGNvbnN0cnVjdGluZyB0aGUgZ3JvdXBlZCBkYXRhIGJhc2VkIG9uIHRoZSBzZWxlY3Rpb24gb2Ygb3JkZXJieSwgeCAmIHkgYXhpc1xuICAgIGdldFZpc3VhbGx5R3JvdXBlZERhdGEocXVlcnlSZXNwb25zZSwgZ3JvdXBpbmdDb2x1bW4pIHtcbiAgICAgICAgbGV0IGdyb3VwRGF0YTogYW55ID0ge30sXG4gICAgICAgICAgICBncm91cFZhbHVlczogYW55ID0gW10sXG4gICAgICAgICAgICBvcmRlckJ5RGV0YWlscyxcbiAgICAgICAgICAgIG1heExlbmd0aDtcbiAgICAgICAgY29uc3QgY2hhcnREYXRhOiBhbnkgPSBbXSxcbiAgICAgICAgICAgIF9pc0FyZWFDaGFydCA9IGlzQXJlYUNoYXJ0KHRoaXMudHlwZSksXG4gICAgICAgICAgICB5QXhpc0tleSA9IF8uZmlyc3QoXy5zcGxpdCh0aGlzLnlheGlzZGF0YWtleSwgJywnKSk7XG4gICAgICAgIHRoaXMueERhdGFLZXlBcnIgPSBbXTtcbiAgICAgICAgcXVlcnlSZXNwb25zZSA9IF8ub3JkZXJCeShxdWVyeVJlc3BvbnNlLCBfLnNwbGl0KHRoaXMuZ3JvdXBieSwgJywnKSk7XG4gICAgICAgIGlmICh0aGlzLm9yZGVyYnkpIHtcbiAgICAgICAgICAgIG9yZGVyQnlEZXRhaWxzID0gZ2V0TG9kYXNoT3JkZXJCeUZvcm1hdCh0aGlzLm9yZGVyYnkpO1xuICAgICAgICAgICAgcXVlcnlSZXNwb25zZSA9IF8ub3JkZXJCeShxdWVyeVJlc3BvbnNlLCBvcmRlckJ5RGV0YWlscy5jb2x1bW5zLCBvcmRlckJ5RGV0YWlscy5vcmRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXJ5UmVzcG9uc2UgPSBfLmdyb3VwQnkocXVlcnlSZXNwb25zZSwgZ3JvdXBpbmdDb2x1bW4pO1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGFyZWEgY2hhcnQgYWxsIHRoZSBzZXJpZXMgZGF0YSBzaG91bGQgYmUgb2Ygc2FtZSBsZW5ndGhcbiAgICAgICAgaWYgKF9pc0FyZWFDaGFydCkge1xuICAgICAgICAgICAgbWF4TGVuZ3RoID0gXy5tYXgoXy5tYXAocXVlcnlSZXNwb25zZSwgb2JqID0+IG9iai5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICBfLmZvckVhY2gocXVlcnlSZXNwb25zZSwgKHZhbHVlcywgZ3JvdXBLZXkpID0+IHtcbiAgICAgICAgICAgIGdyb3VwVmFsdWVzID0gaXNBcmVhQ2hhcnQgPyBfLmZpbGwobmV3IEFycmF5KG1heExlbmd0aCksIFswLCAwXSkgOiBbXTtcbiAgICAgICAgICAgIF8uZm9yRWFjaFJpZ2h0KHZhbHVlcywgKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGdyb3VwVmFsdWVzW2luZGV4XSA9IHRoaXMudmFsdWVGaW5kZXIodmFsdWUsIHRoaXMueGF4aXNkYXRha2V5LCB5QXhpc0tleSwgaW5kZXgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBncm91cERhdGEgPSB7XG4gICAgICAgICAgICAgICAga2V5IDogZ3JvdXBLZXksXG4gICAgICAgICAgICAgICAgdmFsdWVzIDogZ3JvdXBWYWx1ZXNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjaGFydERhdGEucHVzaChncm91cERhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNoYXJ0RGF0YTtcbiAgICB9XG5cbiAgICAvKkRlY2lkZXMgd2hldGhlciB0aGUgZGF0YSBzaG91bGQgYmUgdmlzdWFsbHkgZ3JvdXBlZCBvciBub3RcbiAgICAgICAgICAgIFZpc3VhbGx5IGdyb3VwZWQgd2hlbiBhIGRpZmZlcmVudCBjb2x1bW4gaXMgY2hvb3NlbiBpbiB0aGUgZ3JvdXAgYnkgb3RoZXIgdGhhbiB4IGFuZCB5IGF4aXMgYW5kIGFnZ3JlZ2F0aW9uIGlzIG5vdCBjaG9zZW4qL1xuICAgIGdldEdyb3VwaW5nRGV0YWlscygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNHcm91cEJ5RW5hYmxlZCgpICYmICF0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgIGxldCBpc1Zpc3VhbGx5R3JvdXBlZCA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZpc3VhbEdyb3VwaW5nQ29sdW1uLFxuICAgICAgICAgICAgICAgIGdyb3VwaW5nRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICBjb2x1bW5zOiBhbnkgPSBbXSxcbiAgICAgICAgICAgICAgICBncm91cGluZ0NvbHVtbkluZGV4O1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBieUNvbHVtbnMgPSB0aGlzLmdyb3VwYnkgJiYgdGhpcy5ncm91cGJ5ICE9PSBOT05FID8gdGhpcy5ncm91cGJ5LnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgICAgICB5QXhpc0tleXMgPSB0aGlzLnlheGlzZGF0YWtleSA/IHRoaXMueWF4aXNkYXRha2V5LnNwbGl0KCcsJykgOiBbXTtcblxuICAgICAgICAgICAgaWYgKGdyb3VwYnlDb2x1bW5zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAvKkdldHRpbmcgdGhlIGdyb3VwIGJ5IGNvbHVtbiB3aGljaCBpcyBub3Qgc2VsZWN0ZWQgZWl0aGVyIGluIHggb3IgeSBheGlzKi9cbiAgICAgICAgICAgICAgICBncm91cGJ5Q29sdW1ucy5ldmVyeSgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy54YXhpc2RhdGFrZXkgIT09IGNvbHVtbiAmJiAkLmluQXJyYXkoY29sdW1uLCB5QXhpc0tleXMpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNWaXN1YWxseUdyb3VwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlzdWFsR3JvdXBpbmdDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGluZ0NvbHVtbkluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGJ5Q29sdW1ucy5zcGxpY2UoZ3JvdXBpbmdDb2x1bW5JbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gQ29uc3RydWN0aW5nIHRoZSBncm91cGJ5IGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBpZiAodmlzdWFsR3JvdXBpbmdDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHZpc3VhbEdyb3VwaW5nQ29sdW1uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBieUNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBfLmNvbmNhdChjb2x1bW5zLCBncm91cGJ5Q29sdW1ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgeCBhbmQgeSBheGlzIGFyZSBub3QgaW5jbHVkZWQgaW4gYWdncmVnYXRpb24gbmVlZCB0byBiZSBpbmNsdWRlZCBpbiBncm91cGJ5XG4gICAgICAgICAgICBpZiAodGhpcy54YXhpc2RhdGFrZXkgIT09IHRoaXMuYWdncmVnYXRpb25jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2godGhpcy54YXhpc2RhdGFrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXy5mb3JFYWNoKHlBeGlzS2V5cywga2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSB0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZ3JvdXBpbmdFeHByZXNzaW9uID0gIGNvbHVtbnMuam9pbignLCcpO1xuICAgICAgICAgICAgLy8gc2V0IGlzVmlzdWFsbHlHcm91cGVkIGZsYWcgaW4gc2NvcGUgZm9yIGxhdGVyIHVzZVxuICAgICAgICAgICAgdGhpcy5pc1Zpc3VhbGx5R3JvdXBlZCA9IGlzVmlzdWFsbHlHcm91cGVkO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGdyb3VwaW5nRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICBpc1Zpc3VhbGx5R3JvdXBlZDogaXNWaXN1YWxseUdyb3VwZWQsXG4gICAgICAgICAgICAgICAgdmlzdWFsR3JvdXBpbmdDb2x1bW46IHZpc3VhbEdyb3VwaW5nQ29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleHByZXNzaW9uOiAnJyxcbiAgICAgICAgICAgIGlzVmlzdWFsbHlHcm91cGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHZpc3VhbEdyb3VwaW5nQ29sdW1uOiAnJ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRvIGdldCB0aGUgYWdncmVnYXRlZCBkYXRhIGFmdGVyIGFwcGx5aW5nIHRoZSBhZ2dyZWdhdGlvbiAmIGdyb3VwIGJ5IG9yIG9yZGVyIGJ5IG9wZXJhdGlvbnMuXG4gICAgZ2V0QWdncmVnYXRlZERhdGEoY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgdmFyaWFibGU6IGFueSA9IHRoaXMuZGF0YXNvdXJjZSxcbiAgICAgICAgICAgIHlBeGlzS2V5cyA9IHRoaXMueWF4aXNkYXRha2V5ID8gdGhpcy55YXhpc2RhdGFrZXkuc3BsaXQoJywnKSA6IFtdLFxuICAgICAgICAgICAgZGF0YTogYW55ID0ge307XG4gICAgICAgIGxldCBzb3J0RXhwcixcbiAgICAgICAgICAgIGNvbHVtbnM6IGFueSA9IFtdLFxuICAgICAgICAgICAgY29sQWxpYXMsXG4gICAgICAgICAgICBvcmRlckJ5Q29sdW1ucyxcbiAgICAgICAgICAgIGdyb3VwQnlGaWVsZHM6IGFueSA9IFtdO1xuXG4gICAgICAgIGlmICghdmFyaWFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0dyb3VwQnlFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIGdyb3VwQnlGaWVsZHMgPSBfLnNwbGl0KHRoaXMuZ3JvdXBieSwgJywnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcmRlcmJ5KSB7XG4gICAgICAgICAgICBzb3J0RXhwciA9IF8ucmVwbGFjZSh0aGlzLm9yZGVyYnksIC86L2csICcgJyk7XG4gICAgICAgICAgICBjb2x1bW5zID0gXy51bmlxKF8uY29uY2F0KGNvbHVtbnMsIGdyb3VwQnlGaWVsZHMsIFt0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uXSkpO1xuICAgICAgICAgICAgb3JkZXJCeUNvbHVtbnMgPSBnZXRMb2Rhc2hPcmRlckJ5Rm9ybWF0KHRoaXMub3JkZXJieSkuY29sdW1ucztcbiAgICAgICAgICAgIC8vIElmIHRoZSBvcmRlcmJ5IGNvbHVtbiBpcyBjaG9zZW4gZWl0aGVyIGluIGdyb3VwYnkgb3Igb3JkZXJieSB0aGVuIHJlcGxhY2UgLiB3aXRoICQgZm9yIHRoYXQgY29sdW1uXG4gICAgICAgICAgICBfLmZvckVhY2goXy5pbnRlcnNlY3Rpb24oY29sdW1ucywgb3JkZXJCeUNvbHVtbnMpLCBjb2wgPT4ge1xuICAgICAgICAgICAgICAgIGNvbEFsaWFzID0gZ2V0VmFsaWRBbGlhc05hbWUoY29sKTtcbiAgICAgICAgICAgICAgICBzb3J0RXhwciA9IF8ucmVwbGFjZShzb3J0RXhwciwgY29sLCBjb2xBbGlhcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAvLyBTZW5kIHRoZSBncm91cCBieSBpbiB0aGUgYWdncmVnYXRpb25zIGFwaSBvbmx5IGlmIGFnZ3JlZ2F0aW9uIGlzIGFsc28gY2hvc2VuXG4gICAgICAgICAgICBkYXRhLmdyb3VwQnlGaWVsZHMgPSBncm91cEJ5RmllbGRzO1xuICAgICAgICAgICAgZGF0YS5hZ2dyZWdhdGlvbnMgPSAgW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJ2ZpZWxkJzogdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAgYWdncmVnYXRpb25Gbk1hcFt0aGlzLmFnZ3JlZ2F0aW9uXSxcbiAgICAgICAgICAgICAgICAgICAgJ2FsaWFzJzogZ2V0VmFsaWRBbGlhc05hbWUodGhpcy5hZ2dyZWdhdGlvbmNvbHVtbilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV4ZWN1dGUgdGhlIHF1ZXJ5LlxuICAgICAgICB2YXJpYWJsZS5leGVjdXRlKCdnZXRBZ2dyZWdhdGVkRGF0YScsIHtcbiAgICAgICAgICAgICdhZ2dyZWdhdGlvbnMnIDogZGF0YSxcbiAgICAgICAgICAgICdzb3J0JyAgICAgICAgIDogc29ydEV4cHJcbiAgICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIHJlc3VsdCBpbnRvIGEgZm9ybWF0IHN1cHBvcnRlZCBieSB0aGUgY2hhcnQuXG4gICAgICAgICAgICBjb25zdCBjaGFydERhdGE6IGFueSA9IFtdLFxuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uQWxpYXM6IGFueSA9IGdldFZhbGlkQWxpYXNOYW1lKHRoaXMuYWdncmVnYXRpb25jb2x1bW4pLFxuICAgICAgICAgICAgICAgIHhBeGlzQWxpYXNLZXkgPSBnZXRWYWxpZEFsaWFzTmFtZSh0aGlzLnhheGlzZGF0YWtleSksXG4gICAgICAgICAgICAgICAgeUF4aXNBbGlhc0tleXMgPSBbXTtcblxuICAgICAgICAgICAgeUF4aXNLZXlzLmZvckVhY2goeUF4aXNLZXkgPT4geUF4aXNBbGlhc0tleXMucHVzaChnZXRWYWxpZEFsaWFzTmFtZSh5QXhpc0tleSkpKTtcblxuICAgICAgICAgICAgXy5mb3JFYWNoKHJlc3BvbnNlLmJvZHkuY29udGVudCwgKHJlc3BvbnNlQ29udGVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgcmVzcG9uc2UgaW4gdGhlIGNoYXJ0RGF0YSBiYXNlZCBvbiAnYWdncmVnYXRpb25Db2x1bW4nLCAneEF4aXNEYXRhS2V5JyAmICd5QXhpc0RhdGFLZXknLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqW3RoaXMuYWdncmVnYXRpb25jb2x1bW5dID0gcmVzcG9uc2VDb250ZW50W2FnZ3JlZ2F0aW9uQWxpYXNdO1xuICAgICAgICAgICAgICAgICAgICBvYmpbdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbl0gPSBfLmdldChyZXNwb25zZUNvbnRlbnQsIGFnZ3JlZ2F0aW9uQWxpYXMpIHx8IF8uZ2V0KHJlc3BvbnNlQ29udGVudCwgdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgb2JqW3RoaXMueGF4aXNkYXRha2V5XSA9IF8uZ2V0KHJlc3BvbnNlQ29udGVudCwgeEF4aXNBbGlhc0tleSkgfHwgXy5nZXQocmVzcG9uc2VDb250ZW50LCB0aGlzLnhheGlzZGF0YWtleSk7XG5cbiAgICAgICAgICAgICAgICB5QXhpc0tleXMuZm9yRWFjaCgoeUF4aXNLZXksIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ialt5QXhpc0tleV0gPSByZXNwb25zZUNvbnRlbnRbeUF4aXNBbGlhc0tleXNbaW5kZXhdXTtcbiAgICAgICAgICAgICAgICAgICAgb2JqW3lBeGlzS2V5XSA9IF8uZ2V0KHJlc3BvbnNlQ29udGVudCwgeUF4aXNBbGlhc0tleXNbaW5kZXhdKSB8fCBfLmdldChyZXNwb25zZUNvbnRlbnQsIHlBeGlzS2V5KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNoYXJ0RGF0YS5wdXNoKG9iaik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5jaGFydERhdGEgPSBjaGFydERhdGE7XG5cbiAgICAgICAgICAgIHRyaWdnZXJGbihjYWxsYmFjayk7XG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhID0gW107XG4gICAgICAgICAgICB0aGlzLnNldEVyck1zZygnTUVTU0FHRV9FUlJPUl9GRVRDSF9EQVRBJyk7XG4gICAgICAgICAgICB0cmlnZ2VyRm4oY2FsbGJhY2spO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgbWF4aW11bSB3aWR0aCBmb3IgdGhlIGxhYmVscyB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQuVGhpcyB3aWxsIGhlbHBmdWwgd2hlbiB0aGV5IGFyZSBvdmVybGFwcGluZ1xuICAgIHNldExhYmVsc01heFdpZHRoKCkge1xuICAgICAgICBsZXQgeFRpY2tzLFxuICAgICAgICAgICAgdGlja1dpZHRoLFxuICAgICAgICAgICAgbWF4TGVuZ3RoLFxuICAgICAgICAgICAgeERpc3QsXG4gICAgICAgICAgICB5RGlzdCxcbiAgICAgICAgICAgIHRvdGFsSGVpZ2h0LFxuICAgICAgICAgICAgbWF4Tm9MYWJlbHMsXG4gICAgICAgICAgICBudGhFbGVtZW50LFxuICAgICAgICAgICAgbGFiZWxzQXZhaWxhYmxlV2lkdGgsXG4gICAgICAgICAgICBiYXJXcmFwcGVyLFxuICAgICAgICAgICAgeUF4aXNXcmFwcGVyLFxuICAgICAgICAgICAgc3ZnV3JhcHBlcjtcbiAgICAgICAgY29uc3QgZm9udHNpemUgPSBwYXJzZUludCh0aGlzLmZvbnRzaXplLCAxMCkgfHwgMTIsXG4gICAgICAgICAgICBpc0JhcmNoYXJ0ID0gaXNCYXJDaGFydCh0aGlzLnR5cGUpO1xuICAgICAgICAvLyBnZXR0aW5nIHRoZSB4IHRpY2tzIGluIHRoZSBjaGFydFxuICAgICAgICB4VGlja3MgPSAkKCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJykuZmluZCgnZy5udi14JykuZmluZCgnZy50aWNrJykuZmluZCgndGV4dCcpO1xuXG4gICAgICAgIC8vIGdldHRpbmcgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byB2aXNpYmxlIHRpY2tzIGFzc29jaWF0ZWQgd2l0aCB2aXNpYmxlIHRleHRcbiAgICAgICAgeFRpY2tzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgeFRpY2sgPSAkKHRoaXMpO1xuICAgICAgICAgICAgbGV0IHhUcmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgdGlja0Rpc3Q7XG4gICAgICAgICAgICBpZiAoeFRpY2sudGV4dCgpICYmIHhUaWNrLmNzcygnb3BhY2l0eScpID09PSAnMScpIHtcbiAgICAgICAgICAgICAgICB4VHJhbnNmb3JtID0geFRpY2sucGFyZW50KCkuYXR0cigndHJhbnNmb3JtJykuc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICB4RGlzdCA9IHBhcnNlRmxvYXQoeFRyYW5zZm9ybVswXS5zdWJzdHIoMTApKTtcbiAgICAgICAgICAgICAgICB5RGlzdCA9IHBhcnNlRmxvYXQoeFRyYW5zZm9ybVsxXSB8fCAnMCcpO1xuICAgICAgICAgICAgICAgIGlmICghaXNCYXJjaGFydCAmJiB4RGlzdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGlja0Rpc3QgPSB4RGlzdDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHlEaXN0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aWNrRGlzdCA9IHlEaXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGlja1dpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tXaWR0aCA9IHRpY2tEaXN0IC0gdGlja1dpZHRoO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRpY2tXaWR0aCA9IHRpY2tEaXN0O1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJbiBjYXNlIG9mIGJhciBjaGFydCBnZXR0aW5nIHRoZSBhdmFpbGFibGUgc3BhY2UgZm9yIHRoZSBsYWJlbHMgdG8gYmUgZGlzcGxheWVkXG4gICAgICAgIGlmIChpc0JhcmNoYXJ0KSB7XG4gICAgICAgICAgICBiYXJXcmFwcGVyID0gJCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2Zz5nLm52LXdyYXA+Zz5nLm52LWJhcnNXcmFwJylbMF07XG4gICAgICAgICAgICB5QXhpc1dyYXBwZXIgPSAkKCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnPmcubnYtd3JhcD5nPmcubnYteScpWzBdO1xuICAgICAgICAgICAgc3ZnV3JhcHBlciA9ICQoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKVswXTtcbiAgICAgICAgICAgIC8vIGdldHRpbmcgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgY2hhcnRcbiAgICAgICAgICAgIHRvdGFsSGVpZ2h0ID0gYmFyV3JhcHBlciA/IGJhcldyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IDogMDtcbiAgICAgICAgICAgIC8vIGdldHRpbmcgdGhlIGxhYmVscyBhdmFpbGFibGUgc3BhY2VcbiAgICAgICAgICAgIGxhYmVsc0F2YWlsYWJsZVdpZHRoID0geUF4aXNXcmFwcGVyID8gc3ZnV3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAtIHlBeGlzV3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCA6IHN2Z1dyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgICAgICAvLyBTZXR0aW5nIHRoZSBtYXggbGVuZ3RoIGZvciB0aGUgbGFiZWxcbiAgICAgICAgICAgIG1heExlbmd0aCA9IE1hdGgucm91bmQobGFiZWxzQXZhaWxhYmxlV2lkdGggLyBmb250c2l6ZSk7XG4gICAgICAgICAgICAvLyBpZiBhdmFpbGFibGUgc3BhY2UgZm9yIGVhY2ggbGFiZWwgaXMgbGVzcyB0aGFuIHRoZSBmb250LXNpemVcbiAgICAgICAgICAgIC8vIHRoZW4gbGltaXRpbmcgdGhlIGxhYmVscyB0byBiZSBkaXNwbGF5ZWRcbiAgICAgICAgICAgIGlmICh0aWNrV2lkdGggPCBmb250c2l6ZSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgbWF4aW11bSBubyBvZiBsYWJlbHMgdG8gYmUgZml0dGVkXG4gICAgICAgICAgICAgICAgbWF4Tm9MYWJlbHMgPSB0b3RhbEhlaWdodCAvIGZvbnRzaXplO1xuICAgICAgICAgICAgICAgIC8vIHNob3dpbmcgb25seSB0aGUgbnRoIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBudGhFbGVtZW50ID0gTWF0aC5jZWlsKHRoaXMuY2hhcnREYXRhLmxlbmd0aCAvIG1heE5vTGFiZWxzKTtcbiAgICAgICAgICAgICAgICAvLyBzaG93aW5nIHVwIG9ubHkgc29tZSBsYWJlbHNcbiAgICAgICAgICAgICAgICBkMy5zZWxlY3QoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKS5zZWxlY3QoJ2cubnYteCcpLnNlbGVjdEFsbCgnZy50aWNrJykuc2VsZWN0KCd0ZXh0JykuZWFjaChmdW5jdGlvbiAodGV4dCwgaSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBoaWRpbmcgZXZlcnkgbm9uIG50aCBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGlmIChpICUgbnRoRWxlbWVudCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoJ29wYWNpdHknLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gU2V0dGluZyB0aGUgbWF4IGxlbmd0aCBmb3IgdGhlIGxhYmVsXG4gICAgICAgICAgICBtYXhMZW5ndGggPSBNYXRoLnJvdW5kKHRpY2tXaWR0aCAvIGZvbnRzaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1heExlbmd0aCBzaG91bGQgYWx3YXlzIGJlIGEgcG9zaXRpdmUgbnVtYmVyXG4gICAgICAgIG1heExlbmd0aCA9IE1hdGguYWJzKG1heExlbmd0aCk7XG4gICAgICAgIC8vIFZhbGlkYXRpbmcgaWYgZXZlcnkgbGFiZWwgZXhjZWVkcyB0aGUgbWF4IGxlbmd0aCBhbmQgaWYgc28gbGltaXRpbmcgdGhlIGxlbmd0aCBhbmQgYWRkaW5nIGVsbGlwc2lzXG4gICAgICAgIHhUaWNrcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRleHRDb250ZW50Lmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dENvbnRlbnQgPSB0aGlzLnRleHRDb250ZW50LnN1YnN0cigwLCBtYXhMZW5ndGgpICsgJy4uLic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgdGhlIGNvbHVtbnMgb2YgdGhhdCBjYW4gYmUgY2hvb3NlbiBpbiB0aGUgeCBhbmQgeSBheGlzXG4gICAgZ2V0RGVmYXVsdENvbHVtbnMoKSB7XG4gICAgICAgIGxldCB0eXBlLFxuICAgICAgICAgICAgc3RyaW5nQ29sdW1uLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHRlbXA7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5zID0gW10sXG4gICAgICAgICAgICBjb2x1bW5zID0gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1BST1BFUlRJRVNfTUFQKSB8fCBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGggJiYgZGVmYXVsdENvbHVtbnMubGVuZ3RoIDw9IDI7IGkgKz0gMSkge1xuICAgICAgICAgICAgdHlwZSA9IGNvbHVtbnNbaV0udHlwZTtcbiAgICAgICAgICAgIGlmICghY29sdW1uc1tpXS5pc1JlbGF0ZWQgJiYgKGlzTnVtYmVyVHlwZSh0eXBlKSkpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q29sdW1ucy5wdXNoKGNvbHVtbnNbaV0uZmllbGROYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgIXN0cmluZ0NvbHVtbikge1xuICAgICAgICAgICAgICAgIHN0cmluZ0NvbHVtbiA9IGNvbHVtbnNbaV0uZmllbGROYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyIHRoYW4gYnViYmxlIGNoYXJ0IHg6IHN0cmluZyB0eXBlIHk6IG51bWJlciB0eXBlXG4gICAgICAgIC8vIEJ1YmJsZSBjaGFydCB4OiBudW1iZXIgdHlwZSB5OiBudW1iZXIgdHlwZVxuICAgICAgICBpZiAoc3RyaW5nQ29sdW1uICYmIGRlZmF1bHRDb2x1bW5zLmxlbmd0aCA+IDAgJiYgIWlzQnViYmxlQ2hhcnQodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgdGVtcCA9IGRlZmF1bHRDb2x1bW5zWzBdO1xuICAgICAgICAgICAgZGVmYXVsdENvbHVtbnNbMF0gPSBzdHJpbmdDb2x1bW47XG4gICAgICAgICAgICBkZWZhdWx0Q29sdW1uc1sxXSA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVmYXVsdENvbHVtbnM7XG4gICAgfVxuXG4gICAgLy8gQ2FsbCB1c2VyIGRlZmluZWQgamF2YXNjcmlwdCBmdW5jdGlvbiB3aGVuIHVzZXIgbGlua3MgaXQgdG8gY2xpY2sgZXZlbnQgb2YgdGhlIHdpZGdldC5cbiAgICBhdHRhY2hDbGlja0V2ZW50KCkge1xuICAgICAgICBsZXQgZGF0YU9iajtcbiAgICAgICAgZDMuc2VsZWN0KCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJykuc2VsZWN0QWxsKGNoYXJ0RGF0YVBvaW50WHBhdGhbdGhpcy50eXBlXSkuc3R5bGUoJ3BvaW50ZXItZXZlbnRzJywgJ2FsbCcpXG4gICAgICAgICAgICAub24oJ2NsaWNrJywgKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ29sdW1uJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQmFyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFPYmogPSBkYXRhLl9kYXRhT2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BpZSc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RvbnV0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFPYmogPSBkYXRhLmRhdGEuX2RhdGFPYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQXJlYSc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0N1bXVsYXRpdmUgTGluZSc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xpbmUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGFbMF0uX2RhdGFPYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQnViYmxlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFPYmogPSBkYXRhLmRhdGEucG9pbnRbNF0uX2RhdGFPYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZGl0ZW0gPSBkYXRhT2JqO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2VsZWN0JywgeyRldmVudDogZDMuZXZlbnQsIHNlbGVjdGVkQ2hhcnRJdGVtOiBkYXRhLCBzZWxlY3RlZEl0ZW06IHRoaXMuc2VsZWN0ZWRpdGVtfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIC8qICBSZXR1cm5zIFkgU2NhbGUgbWluIHZhbHVlXG4gICAgICAgICAgIEV4OiBJbnB1dCAgIDogOC45N1xuICAgICAgICAgICAgICAgT3V0cHV0ICA6IDguODdcblxuICAgICAgICAgICAgICAgSW5wdXQgICA6IDhcbiAgICAgICAgICAgICAgIE91dHB1dCAgOiA3XG4gICAgICAgKi9cblxuICAgIHBvc3RQbG90UHJvY2VzcyhjaGFydCkge1xuICAgICAgICBsZXQgY2hhcnRTdmcsXG4gICAgICAgICAgICBwaWVMYWJlbHMsXG4gICAgICAgICAgICBwaWVHcm91cHMsXG4gICAgICAgICAgICBhbmdsZUFycmF5O1xuICAgICAgICBjb25zdCBzdHlsZU9iaiA9IHt9O1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4kZWxlbWVudDtcblxuICAgICAgICBwb3N0UGxvdENoYXJ0UHJvY2Vzcyh0aGlzKTtcblxuICAgICAgICBpZiAoIWlzUGllVHlwZSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLnNldExhYmVsc01heFdpZHRoKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc2hvd2xhYmVsc291dHNpZGUpIHtcbiAgICAgICAgICAgIC8qKiBOdmQzIGhhcyBhIGlzc3VlIGluIHJvdGF0aW5nIHRleHQuIFNvIHdlIHdpbGwgdXNlIHRoaXMgYXMgYSB0ZW1wIGZpeC5cbiAgICAgICAgICAgICAqIElmIHRoZSBpc3N1ZSBpcyByZXNvbHZlZCB0aGVyZSwgd2UgY2FuIHJlbW92ZSB0aGlzLiovXG4gICAgICAgICAgICAvKiBJZiBpdCBpcyBhIGRvbnV0IGNoYXJ0LCB0aGVuIHJvdGF0ZSB0aGUgdGV4dCBhbmQgcG9zaXRpb24gdGhlbSovXG4gICAgICAgICAgICBjaGFydFN2ZyA9IGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpO1xuICAgICAgICAgICAgcGllTGFiZWxzID0gY2hhcnRTdmcuc2VsZWN0KCcubnYtcGllTGFiZWxzJykuc2VsZWN0QWxsKCcubnYtbGFiZWwnKTtcbiAgICAgICAgICAgIHBpZUdyb3VwcyA9IGNoYXJ0U3ZnLnNlbGVjdCgnLm52LXBpZScpLnNlbGVjdEFsbCgnLm52LXNsaWNlJyk7XG4gICAgICAgICAgICBhbmdsZUFycmF5ID0gW107XG4gICAgICAgICAgICBpZiAocGllR3JvdXBzICYmIHBpZUdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBwaWVHcm91cHMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVBcnJheS5wdXNoKGFuZ2xlKGQpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcGllTGFiZWxzLmVhY2goZnVuY3Rpb24gKGQsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBkMy5zZWxlY3QodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICQoZ3JvdXBbMF1bMF0pLmZpbmQoJ3RleHQnKS5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKCcgKyBhbmdsZUFycmF5W2ldICsgJyknKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHByZXBhcmUgdGV4dCBzdHlsZSBwcm9wcyBvYmplY3QgYW5kIHNldFxuICAgICAgICBfLmZvckVhY2goc3R5bGVQcm9wcywgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdmb250c2l6ZScgfHwga2V5ID09PSAnZm9udHVuaXQnKSB7XG4gICAgICAgICAgICAgICAgc3R5bGVPYmpbdmFsdWVdID0gdGhpcy5mb250c2l6ZSArIHRoaXMuZm9udHVuaXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0eWxlT2JqW3ZhbHVlXSA9IHRoaXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNldFRleHRTdHlsZShzdHlsZU9iaiwgdGhpcy4kaWQpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIGFsbG93IHdpbmRvdy1yZXNpemUgZnVuY3Rpb25hbGl0eSwgZm9yIG9ubHktcnVuIG1vZGUgYXNcbiAgICAgICAgICogdXBkYXRpbmcgY2hhcnQgaXMgYmVpbmcgaGFuZGxlZCBieSB3YXRjaGVycyBvZiBoZWlnaHQgJiB3aWR0aCBpbiBzdHVkaW8tbW9kZVxuICAgICAgICAgKiAqL1xuICAgICAgICB0cmlnZ2VyRm4odGhpcy5fcmVzaXplRm4gJiYgdGhpcy5fcmVzaXplRm4uY2xlYXIpO1xuICAgICAgICB0aGlzLl9yZXNpemVGbiA9IG52LnV0aWxzLndpbmRvd1Jlc2l6ZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBjaGFydC51cGRhdGUoKTtcbiAgICAgICAgICAgICAgICBwb3N0UGxvdENoYXJ0UHJvY2Vzcyh0aGlzKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzUGllVHlwZSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TGFiZWxzTWF4V2lkdGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IGdldCBwYXJlbnRzIG9mIGFjY29yZGlvbiB0eXBlXG4gICAgICAgICAgICAgICAgLypsZXQgcGFyZW50ID0gZWxlbWVudC5jbG9zZXN0KCcuYXBwLWFjY29yZGlvbi1wYW5lbCwgLnRhYi1wYW5lJykuaXNvbGF0ZVNjb3BlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9Ki9cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcHJlcGFyZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIGNoYXJ0IHByb3BlcnRpZXNcbiAgICBjb25maWd1cmVDaGFydCgpIHtcbiAgICAgICAgLy8gQ29weSB0aGUgZGF0YSBvbmx5IGluIGNhc2Ugb2YgcGllIGNoYXJ0IHdpdGggZGVmYXVsdCBkYXRhXG4gICAgICAgIC8vIFJlYXNvbiA6IHdoZW4gbXVsdGlwbGUgcGllIGNoYXJ0cyBhcmUgYm91bmQgdG8gc2FtZSBkYXRhLCBmaXJzdCBjaGFydCB0aGVtZSB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIGNoYXJ0c1xuICAgICAgICBsZXQgeERvbWFpblZhbHVlcztcbiAgICAgICAgbGV0IHlEb21haW5WYWx1ZXM7XG4gICAgICAgIGxldCBjaGFydDtcbiAgICAgICAgbGV0IGJlZm9yZVJlbmRlclZhbDtcbiAgICAgICAgY29uc3QgeWZvcm1hdE9wdGlvbnM6IGFueSA9IHt9O1xuXG4gICAgICAgIGlmICh0aGlzLl9wcm9jZXNzZWREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChpc0F4aXNEb21haW5WYWxpZCh0aGlzLCAneCcpKSB7XG4gICAgICAgICAgICAgICAgeERvbWFpblZhbHVlcyA9IHRoaXMuYmluZGRhdGFzZXQgPyB0aGlzLmdldFhNaW5NYXhWYWx1ZXModGhpcy5fcHJvY2Vzc2VkRGF0YVswXSkgOiB7ICdtaW4nIDogeyd4JzogMX0sICAnbWF4JyA6IHsneCcgOiA1fX07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNBeGlzRG9tYWluVmFsaWQodGhpcywgJ3knKSkge1xuICAgICAgICAgICAgICAgIHlEb21haW5WYWx1ZXMgPSB0aGlzLmJpbmRkYXRhc2V0ID8gdGhpcy5nZXRZTWluTWF4VmFsdWVzKHRoaXMuX3Byb2Nlc3NlZERhdGEpIDogeyAnbWluJyA6IHsneScgOiAxfSwgJ21heCcgOiB7J3knIDogNX19O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUGllVHlwZSh0aGlzLnR5cGUpICYmICghdGhpcy5iaW5kZGF0YXNldCB8fCAhdGhpcy5zY29wZWRhdGFzZXQpKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzZWREYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuc2NvcGVkYXRhc2V0IHx8IHRoaXMuX3Byb2Nlc3NlZERhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZ2V0IHRoZSBjaGFydCBvYmplY3RcbiAgICAgICAgY2hhcnQgPSBpbml0Q2hhcnQodGhpcywgeERvbWFpblZhbHVlcywgeURvbWFpblZhbHVlcywgbnVsbCwgIXRoaXMuYmluZGRhdGFzZXQpO1xuXG4gICAgICAgIGlmIChfLmlzQXJyYXkodGhpcy5fcHJvY2Vzc2VkRGF0YSkpIHtcbiAgICAgICAgICAgIC8vIFdNUy0xOTQ5OTogIFRvIHJlbW92ZSBjaGFydCBYLWF4aXMgb2xkIHRpY2tzIHdoZW4gY2hhcnQgZGF0YSBsb2FkZWQgZHluYW1pY2FsbHkuXG4gICAgICAgICAgICBjb25zdCBvbGRnVGlja3MgPSAgJCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpLmZpbmQoJ2cubnYteCcpLmZpbmQoJ2cudGljaycpO1xuICAgICAgICAgICAgaWYgKG9sZGdUaWNrcyAmJiBvbGRnVGlja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb2xkZ1RpY2tzLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYmVmb3JlUmVuZGVyVmFsID0gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyZW5kZXInLCB7ICdjaGFydEluc3RhbmNlJyA6IGNoYXJ0fSk7XG4gICAgICAgICAgICBpZiAoYmVmb3JlUmVuZGVyVmFsKSB7XG4gICAgICAgICAgICAgICAgY2hhcnQgPSBiZWZvcmVSZW5kZXJWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoYXJ0ID0gY2hhcnQ7XG4gICAgICAgICAgICAvLyBjaGFuZ2luZyB0aGUgZGVmYXVsdCBubyBkYXRhIG1lc3NhZ2VcbiAgICAgICAgICAgIGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpXG4gICAgICAgICAgICAgICAgLmRhdHVtKHRoaXMuX3Byb2Nlc3NlZERhdGEpXG4gICAgICAgICAgICAgICAgLmNhbGwodGhpcy5jaGFydCk7XG4gICAgICAgICAgICB0aGlzLnBvc3RQbG90UHJvY2VzcyhjaGFydCk7XG4gICAgICAgICAgICByZXR1cm4gY2hhcnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQbG90dGluZyB0aGUgY2hhcnQgd2l0aCBzZXQgb2YgdGhlIHByb3BlcnRpZXMgc2V0IHRvIGl0XG4gICAgcGxvdENoYXJ0KCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4kZWxlbWVudDtcbiAgICAgICAgLy8gY2FsbCB1c2VyLXRyYW5zZm9ybWVkIGZ1bmN0aW9uXG4gICAgICAgIHRoaXMuY2hhcnREYXRhID0gKHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygndHJhbnNmb3JtJykpIHx8IHRoaXMuY2hhcnREYXRhO1xuXG4gICAgICAgIC8vIEdldHRpbmcgdGhlIG9yZGVyIGJ5IGRhdGEgb25seSBpbiBydW4gbW9kZS4gVGhlIG9yZGVyIGJ5IGFwcGxpZXMgZm9yIGFsbCB0aGUgY2hhcnRzIG90aGVyIHRoYW4gcGllIGFuZCBkb251dCBjaGFydHNcbiAgICAgICAgaWYgKHRoaXMuaXNWaXN1YWxseUdyb3VwZWQgJiYgIWlzUGllVHlwZSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzZWREYXRhID0gdGhpcy5jaGFydERhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzZWREYXRhID0gdGhpcy5wcm9jZXNzQ2hhcnREYXRhKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2tpbmcgdGhlIHBhcmVudCBjb250YWluZXIgYmVmb3JlIHBsb3R0aW5nIHRoZSBjaGFydFxuICAgICAgICBpZiAoIWVsZW1lbnRbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2xlYXJDYW52YXMpIHtcbiAgICAgICAgICAgIC8vIGVtcHR5IHN2ZyB0byBhZGQtbmV3IGNoYXJ0XG4gICAgICAgICAgICBlbGVtZW50LmZpbmQoJ3N2ZycpLnJlcGxhY2VXaXRoKCc8c3ZnPjwvc3ZnPicpO1xuICAgICAgICAgICAgdGhpcy5jbGVhckNhbnZhcyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW4gY2FzZSBvZiBpbnZhbGlkIGF4aXMgc2hvdyBubyBkYXRhIGF2YWlsYWJsZSBtZXNzYWdlXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkQXhpcygpKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzZWREYXRhID0gW107XG4gICAgICAgIH1cbiAgICAgICAgbnYuYWRkR3JhcGgoKCkgPT4gdGhpcy5jb25maWd1cmVDaGFydCgpLCAgKCkgPT4ge1xuICAgICAgICAgICAgLypCdWJibGUgY2hhcnQgaGFzIGFuIHRpbWUgb3V0IGRlbGF5IG9mIDMwMG1zIGluIHRoZWlyIGltcGxlbWVudGF0aW9uIGR1ZSB0byB3aGljaCB3ZVxuICAgICAgICAgICAgKiB3b24ndCBiZSBnZXR0aW5nIHJlcXVpcmVkIGRhdGEgcG9pbnRzIG9uIGF0dGFjaGluZyBldmVudHNcbiAgICAgICAgICAgICogaGVuY2UgZGVsYXlpbmcgaXQgNjAwbXMqL1xuICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoQ2xpY2tFdmVudCgpO1xuICAgICAgICAgICAgfSwgNjAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXNMb2FkSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIH1cbiAgICAvLyBUT0RPOiBOZWVkIHdheSB0byBmaWd1cmUgb3V0IGlmIHRoZSBkYXRhc291cmNlIGlzIGEgbGl2ZSBzb3VyY2VcbiAgICBnZXQgaXNMaXZlVmFyaWFibGUoKSB7XG4gICAgICAgIC8vIHNldHRpbmcgdGhlIGZsYWcgZm9yIHRoZSBsaXZlIHZhcmlhYmxlIGluIHRoZSBzY29wZSBmb3IgdGhlIGNoZWNrc1xuICAgICAgICBjb25zdCB2YXJpYWJsZU9iaiA9IHRoaXMuZGF0YXNvdXJjZTtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlT2JqICYmIHZhcmlhYmxlT2JqLmNhdGVnb3J5ID09PSAnd20uTGl2ZVZhcmlhYmxlJztcbiAgICB9XG5cbiAgICBwbG90Q2hhcnRQcm94eSgpIHtcbiAgICAgICAgdGhpcy5zaG93Q29udGVudExvYWRFcnJvciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmludmFsaWRDb25maWcgPSBmYWxzZTtcbiAgICAgICAgLy8gQ2hlY2tpbmcgaWYgeCBhbmQgeSBheGlzIGFyZSBjaG9zZW5cbiAgICAgICAgdGhpcy5pc0xvYWRJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZ3JvdXBpbmdEZXRhaWxzID0gdGhpcy5nZXRHcm91cGluZ0RldGFpbHMoKTtcbiAgICAgICAgLy8gSWYgYWdncmVnYXRpb24vZ3JvdXAgYnkvb3JkZXIgYnkgcHJvcGVydGllcyBoYXZlIGJlZW4gc2V0LCB0aGVuIGdldCB0aGUgYWdncmVnYXRlZCBkYXRhIGFuZCBwbG90IHRoZSByZXN1bHQgaW4gdGhlIGNoYXJ0LlxuICAgICAgICAvLyBUT0RPOiBkYXRhc291cmNlIGZvciBsaXZlIHZhcmlhYmxlIGRldGVjdGlvblxuICAgICAgICBpZiAodGhpcy5iaW5kZGF0YXNldCAmJiB0aGlzLmlzTGl2ZVZhcmlhYmxlICYmICh0aGlzLmZpbHRlckZpZWxkcyB8fCB0aGlzLmlzRGF0YUZpbHRlcmluZ0VuYWJsZWQoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QWdncmVnYXRlZERhdGEoKCkgPT4gdGhpcy5wbG90Q2hhcnQoKSk7XG4gICAgICAgIH0gZWxzZSB7IC8vIEVsc2UsIHNpbXBseSBwbG90IHRoZSBjaGFydC5cbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgbGl2ZSB2YXJpYWJsZSByZXNldHRpbmcgdGhlIGFnZ3JlZ2F0ZWQgZGF0YSB0byB0aGUgbm9ybWFsIGRhdGFzZXQgd2hlbiB0aGUgYWdncmVnYXRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNldCAmJiB0aGlzLmlzTGl2ZVZhcmlhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFydERhdGEgPSB0aGlzLmRhdGFzZXQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNHcm91cEJ5RW5hYmxlZCgpICYmIGdyb3VwaW5nRGV0YWlscy5pc1Zpc3VhbGx5R3JvdXBlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IHRoaXMuZ2V0VmlzdWFsbHlHcm91cGVkRGF0YSh0aGlzLmNoYXJ0RGF0YSwgZ3JvdXBpbmdEZXRhaWxzLnZpc3VhbEdyb3VwaW5nQ29sdW1uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGxvdENoYXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXRzIHRoZSBkZWZhdWx0IHggYW5kIHkgYXhpcyBvcHRpb25zXG4gICAgc2V0RGVmYXVsdEF4aXNPcHRpb25zKCkge1xuICAgICAgICBjb25zdCBkZWZhdWx0Q29sdW1ucyA9IHRoaXMuZ2V0RGVmYXVsdENvbHVtbnMoKTtcbiAgICAgICAgLy8gSWYgd2UgZ2V0IHRoZSB2YWxpZCBkZWZhdWx0IGNvbHVtbnMgdGhlbiBhc3NpZ24gdGhlbSBhcyB0aGUgeCBhbmQgeSBheGlzXG4gICAgICAgIC8vIEluIGNhc2Ugb2Ygc2VydmljZSB2YXJpYWJsZSB3ZSBtYXkgbm90IGdldCB0aGUgdmFsaWQgY29sdW1ucyBiZWNhdXNlIHdlIGNhbm5vdCBrbm93IHRoZSBkYXRhdHlwZXNcbiAgICAgICAgdGhpcy54YXhpc2RhdGFrZXkgPSBkZWZhdWx0Q29sdW1uc1swXSB8fCBudWxsO1xuICAgICAgICB0aGlzLnlheGlzZGF0YWtleSA9IGRlZmF1bHRDb2x1bW5zWzFdIHx8IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0Q3V0b21pemVkT3B0aW9ucyhwcm9wLCBmaWVsZHMpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBCeUNvbHVtbnMgPSBfLnNwbGl0KHRoaXMuZ3JvdXBieSwgJywnKSxcbiAgICAgICAgICAgIGFnZ0NvbHVtbnMgPSBfLnNwbGl0KHRoaXMuYWdncmVnYXRpb25jb2x1bW4sICcsJyk7XG4gICAgICAgIGlmICghdGhpcy5iaW5kZGF0YXNldCkge1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuYXhpc29wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXhpc29wdGlvbnMgPSBmaWVsZHM7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld09wdGlvbnM7XG4gICAgICAgIHN3aXRjaCAocHJvcCkge1xuICAgICAgICAgICAgY2FzZSAneGF4aXNkYXRha2V5JzpcbiAgICAgICAgICAgICAgICAvLyBJZiBncm91cCBieSBlbmFibGVkLCBjb2x1bW5zIGNob3NlbiBpbiBncm91cGJ5IHdpbGwgYmUgcG9wdWxhdGVkIGluIHggYXhpcyBvcHRpb25zXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNHcm91cEJ5RW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSBncm91cEJ5Q29sdW1ucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd5YXhpc2RhdGFrZXknOlxuICAgICAgICAgICAgICAgIC8vIElmIGFnZ3JlZ2F0aW9uIGJ5IGVuYWJsZWQsIGNvbHVtbnMgY2hvc2VuIGluIGFnZ3JlZ2F0aW9uIHdpbGwgYmUgcG9wdWxhdGVkIGluIHkgYXhpcyBvcHRpb25zXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gYWdnQ29sdW1ucztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNMaXZlVmFyaWFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBsaXZlIHZhcmlhYmxlIHBvcHVsYXRpbmcgb25seSBudW1lcmljIGNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IHRoaXMubnVtZXJpY0NvbHVtbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZ3JvdXBieSc6XG4gICAgICAgICAgICAgICAgLy8gRmlsdGVyaW5nIG9ubHkgbm9uIHByaW1hcnkga2V5IGNvbHVtbnNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xpdmVWYXJpYWJsZSAmJiB0aGlzLm5vblByaW1hcnlDb2x1bW5zICYmIHRoaXMubm9uUHJpbWFyeUNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSB0aGlzLm5vblByaW1hcnlDb2x1bW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FnZ3JlZ2F0aW9uY29sdW1uJzpcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlICdhZ2dyZWdhdGlvbkNvbHVtbicgdG8gc2hvdyBhbGwga2V5cyBpbiBjYXNlIG9mIGFnZ3JlZ2F0aW9uIGZ1bmN0aW9uIGlzIGNvdW50IG9yIHRvIG51bWVyaWMga2V5cyBpbiBhbGwgb3RoZXIgY2FzZXMuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXZlVmFyaWFibGUgJiYgdGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpICYmIHRoaXMuYWdncmVnYXRpb24gIT09ICdjb3VudCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IHRoaXMubnVtZXJpY0NvbHVtbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb3JkZXJieSc6XG4gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSAnYWdncmVnYXRpb25Db2x1bW4nIHRvIHNob3cgYWxsIGtleXMgaW4gY2FzZSBvZiBhZ2dyZWdhdGlvbiBmdW5jdGlvbiBpcyBjb3VudCBvciB0byBudW1lcmljIGtleXMgaW4gYWxsIG90aGVyIGNhc2VzLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGl2ZVZhcmlhYmxlICYmIHRoaXMuaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gXy51bmlxKF8uY29uY2F0KGdyb3VwQnlDb2x1bW5zLCBhZ2dDb2x1bW5zKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYnViYmxlc2l6ZSc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubnVtZXJpY0NvbHVtbnMgJiYgdGhpcy5udW1lcmljQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IHRoaXMubnVtZXJpY0NvbHVtbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld09wdGlvbnMgfHwgZmllbGRzIHx8IHRoaXMuYXhpc29wdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdGhhdCBpdGVyYXRlcyB0aHJvdWdoIGFsbCB0aGUgY29sdW1ucyBhbmQgdGhlbiBmZXRjaGluZyB0aGUgbnVtZXJpYyBhbmQgbm9uIHByaW1hcnkgY29sdW1ucyBhbW9uZyB0aGVtXG4gICAgc2V0TnVtZXJpY2FuZE5vblByaW1hcnlDb2x1bW5zKCkge1xuICAgICAgICBsZXQgY29sdW1ucyxcbiAgICAgICAgICAgIHR5cGU7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNNYXAgPSB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfUFJPUEVSVElFU19NQVApO1xuICAgICAgICB0aGlzLm51bWVyaWNDb2x1bW5zID0gW107XG4gICAgICAgIHRoaXMubm9uUHJpbWFyeUNvbHVtbnMgPSBbXTtcbiAgICAgICAgLy8gRmV0Y2hpbmcgYWxsIHRoZSBjb2x1bW5zXG4gICAgICAgIGlmICh0aGlzLmRhdGFzZXQgJiYgIV8uaXNFbXB0eShwcm9wZXJ0aWVzTWFwKSkge1xuICAgICAgICAgICAgY29sdW1ucyA9IFtdOyAvLyBUT0RPOiBmZXRjaFByb3BlcnRpZXNNYXBDb2x1bW5zKHByb3BlcnRpZXNNYXApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbHVtbnMpIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdGluZyB0aHJvdWdoIGFsbCB0aGUgY29sdW1ucyBhbmQgZmV0Y2hpbmcgdGhlIG51bWVyaWMgYW5kIG5vbiBwcmltYXJ5IGtleSBjb2x1bW5zXG4gICAgICAgICAgICBfLmZvckVhY2goT2JqZWN0LmtleXMoY29sdW1ucyksIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICB0eXBlID0gY29sdW1uc1trZXldLnR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyVHlwZSh0eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWVyaWNDb2x1bW5zLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSGlkaW5nIG9ubHkgdGFibGUncyBwcmltYXJ5IGtleVxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5zW2tleV0uaXNSZWxhdGVkUGsgPT09ICd0cnVlJyB8fCAhY29sdW1uc1trZXldLmlzUHJpbWFyeUtleSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vblByaW1hcnlDb2x1bW5zLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubnVtZXJpY0NvbHVtbnMgPSB0aGlzLm51bWVyaWNDb2x1bW5zLnNvcnQoKTtcbiAgICAgICAgICAgIHRoaXMubm9uUHJpbWFyeUNvbHVtbnMgPSB0aGlzLm5vblByaW1hcnlDb2x1bW5zLnNvcnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHBsb3QgdGhlIGNoYXJ0XG4gICAgaGFuZGxlRGF0YVNldChuZXdWYWwpIHtcbiAgICAgICAgdGhpcy5lcnJNc2cgPSAnJztcbiAgICAgICAgLy8gUmVzZXR0aW5nIHRoZSBmbGFnIHRvIGZhbHNlIHdoZW4gdGhlIGJpbmRpbmcgd2FzIHJlbW92ZWRcbiAgICAgICAgaWYgKCFuZXdWYWwgJiYgIXRoaXMuYmluZGRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWaXN1YWxseUdyb3VwZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYXhpc29wdGlvbnMgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbGl2ZVZhcmlhYmxlcyBjb250YWluIGRhdGEgaW4gJ2RhdGEnIHByb3BlcnR5JyBvZiB0aGUgdmFyaWFibGVcbiAgICAgICAgdGhpcy5jaGFydERhdGEgPSB0aGlzLmlzTGl2ZVZhcmlhYmxlID8gbmV3VmFsIHx8ICcnIDogKG5ld1ZhbCAmJiBuZXdWYWwuZGF0YVZhbHVlID09PSAnJyAmJiBfLmtleXMobmV3VmFsKS5sZW5ndGggPT09IDEpID8gJycgOiBuZXdWYWw7XG5cbiAgICAgICAgLy8gaWYgdGhlIGRhdGEgcmV0dXJuZWQgaXMgYW4gb2JqZWN0IG1ha2UgaXQgYW4gYXJyYXkgb2Ygb2JqZWN0XG4gICAgICAgIGlmICghXy5pc0FycmF5KHRoaXMuY2hhcnREYXRhKSAmJiBfLmlzT2JqZWN0KHRoaXMuY2hhcnREYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5jaGFydERhdGEgPSBbdGhpcy5jaGFydERhdGFdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld1ZhbCAmJiBuZXdWYWwuZmlsdGVyRmllbGRzKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckZpZWxkcyA9IG5ld1ZhbC5maWx0ZXJGaWVsZHM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwbG90Y2hhcnQgZm9yIG9ubHkgdmFsaWQgZGF0YSBhbmQgb25seSBhZnRlciBib3VuZCB2YXJpYWJsZSByZXR1cm5zIGRhdGFcbiAgICAgICAgaWYgKHRoaXMuY2hhcnREYXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9wbG90Q2hhcnRQcm94eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3Bsb3RDaGFydFByb3h5ID0gXy5kZWJvdW5jZSh0aGlzLnBsb3RDaGFydFByb3h5LmJpbmQodGhpcyksIDEwMCk7XG5cbiAgICAvLyBzZXRzIHRoZSBjZW50ZXIgbGFiZWwgZm9yIGRvbnV0IGNoYXJ0IHR5cGVcbiAgICBzZXREb251dENlbnRlckxhYmVsKGxhYmVsVmFsdWUpIHtcbiAgICAgICAgbGV0IGNoYXJ0U3ZnLCBwaWVHcm91cHM7XG4gICAgICAgIGNoYXJ0U3ZnID0gZDMuc2VsZWN0KCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJyk7XG5cbiAgICAgICAgcGllR3JvdXBzID0gY2hhcnRTdmcuc2VsZWN0KCcubnYtd3JhcC5udi1waWUnKS5zZWxlY3QoJy5udi1waWUnKTtcbiAgICAgICAgcGllR3JvdXBzLnRleHQoJycpO1xuICAgICAgICBwaWVHcm91cHMuYXBwZW5kKCd0ZXh0JylcbiAgICAgICAgICAgIC5hdHRyKCdkeScsICcuMzVlbScpXG4gICAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdudi1waWUtdGl0bGUnKVxuICAgICAgICAgICAgLnRleHQobGFiZWxWYWx1ZSlcbiAgICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQzdGV4dCA9IGQzLnNlbGVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBjaXJjID0gZDMuc2VsZWN0KHRoaXMucGFyZW50RWxlbWVudCksXG4gICAgICAgICAgICAgICAgdG90YWxXaWR0aCA9IE51bWJlcihjaXJjLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCksXG4gICAgICAgICAgICAgICAgLy8gbWludXMgdGhlIHJpbmcgd2lkdGggZnJvbSB0b3RhbCB3aWR0aFxuICAgICAgICAgICAgICAgIGF2YWlsV2lkdGggPSB0b3RhbFdpZHRoIC0gMzAsXG4gICAgICAgICAgICAgICAgdGV4dFdpZHRoID0gdGhpcy5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtcbiAgICAgICAgICAgICAgICBkM3RleHQuYXR0cihcImRhdGEtc2NhbGVcIiwgYXZhaWxXaWR0aCAvIHRleHRXaWR0aCk7XG4gICAgICAgICAgICAgIH0pLnN0eWxlKFwiZm9udC1zaXplXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIC8vIDE2IGlzIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSB0byBtdWx0aXBseSB3aXRoIHRoZSBzY2FsZWQgdmFsdWUgYW5kIDI0IGlzIHRoZSBtYXhpbXVtIGZvbnQgc2l6ZSB0aGF0IGNhbiBiZSBhcHBsaWVkXG4gICAgICAgICAgICAgICAgdmFyIGZvbnRTaXplID0gMTYgKiBkMy5zZWxlY3QodGhpcykuYXR0cihcImRhdGEtc2NhbGVcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRTaXplID4gMjQgPyAyNCA6IGZvbnRTaXplICsgXCJweFwiO1xuICAgICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleSwgbmV3VmFsLCBvbGRWYWw/KSB7XG4gICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBuZXdWYWwsIG9sZFZhbCk7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdkYXRhc2V0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZURhdGFTZXQobmV3VmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NlbnRlcmxhYmVsJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LnRpdGxlKG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RG9udXRDZW50ZXJMYWJlbChuZXdWYWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3R5cGUnOlxuICAgICAgICAgICAgICAgIC8vIEJhc2VkIG9uIHRoZSBjaGFuZ2UgaW4gdHlwZSBkZWNpZGluZyB0aGUgZGVmYXVsdCBtYXJnaW5zXG4gICAgICAgICAgICAgICAgaWYgKGlzUGllVHlwZSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0dG9wID0gMjA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0cmlnaHQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldGJvdHRvbSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0bGVmdCA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvbGRWYWwgPT09ICdQaWUnIHx8IG9sZFZhbCA9PT0gJ0RvbnV0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldHRvcCA9IDI1O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldHJpZ2h0ID0gMjU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0Ym90dG9tID0gNTU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0bGVmdCA9IDc1O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChvbGRWYWwgIT09IG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQ2FudmFzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSW4gc3R1ZGlvIG1vZGUsIGNvbmZpZ3VyZSBwcm9wZXJ0aWVzIGRlcGVuZGVudCBvbiBjaGFydCB0eXBlXG4gICAgICAgICAgICAgICAgdGhpcy5fcGxvdENoYXJ0UHJveHkoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gSW4gUnVuTW9kZSwgdGhlIHBsb3RjaGFydCBtZXRob2Qgd2lsbCBub3QgYmUgY2FsbGVkIGZvciBhbGwgcHJvcGVydHkgY2hhbmdlXG4gICAgICAgICAgICAgICAgdGhpcy5fcGxvdENoYXJ0UHJveHkoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy5pbmNsdWRlcyhhZHZhbmNlRGF0YVByb3BzLCBrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLl9wbG90Q2hhcnRQcm94eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlTG9hZGluZyhkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmRhdGFzb3VyY2U7XG4gICAgICAgIGlmIChkYXRhU291cmNlICYmIGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUpICYmIGlzRGF0YVNvdXJjZUVxdWFsKGRhdGEudmFyaWFibGUsIGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBkYXRhLmFjdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkSW5Qcm9ncmVzcyA9IGRhdGEuYWN0aXZlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGlkZVRvb2x0aXAoKSB7XG4gICAgICAgIGQzLnNlbGVjdEFsbCgnLm52dG9vbHRpcCcpLnN0eWxlKCdvcGFjaXR5JywgMCk7XG4gICAgfVxuXG4gICAgb25TdHlsZUNoYW5nZShrZXksIG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlT2JqID0ge307XG4gICAgICAgIHN1cGVyLm9uU3R5bGVDaGFuZ2Uoa2V5LCBuZXdWYWwsIG9sZFZhbCk7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdmb250c2l6ZSc6XG4gICAgICAgICAgICBjYXNlICdmb250dW5pdCc6XG4gICAgICAgICAgICBjYXNlICdjb2xvcic6XG4gICAgICAgICAgICBjYXNlICdmb250ZmFtaWx5JzpcbiAgICAgICAgICAgIGNhc2UgJ2ZvbnR3ZWlnaHQnOlxuICAgICAgICAgICAgY2FzZSAnZm9udHN0eWxlJzpcbiAgICAgICAgICAgIGNhc2UgJ3RleHRkZWNvcmF0aW9uJzpcbiAgICAgICAgICAgICAgICBzdHlsZU9ialtzdHlsZVByb3BzW2tleV1dID0gKGtleSA9PT0gJ2ZvbnRzaXplJyB8fCBrZXkgPT09ICdmb250dW5pdCcpID8gdGhpcy5mb250c2l6ZSArIHRoaXMuZm9udHVuaXQgOiBuZXdWYWw7XG4gICAgICAgICAgICAgICAgc2V0VGV4dFN0eWxlKHN0eWxlT2JqLCB0aGlzLiRpZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBwcml2YXRlIGFwcDogQXBwLCBAT3B0aW9uYWwoKSBwdWJsaWMgX3ZpZXdQYXJlbnQ6IFVzZXJEZWZpbmVkRXhlY3V0aW9uQ29udGV4dCkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIF92aWV3UGFyZW50KTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcywgQVBQTFlfU1RZTEVTX1RZUEUuQ09OVEFJTkVSLCBbJ2ZvbnRzaXplJywgJ2ZvbnR1bml0JywgJ2NvbG9yJywgJ2ZvbnRmYW1pbHknLCAnZm9udHdlaWdodCcsICdmb250c3R5bGUnLCAndGV4dGRlY29yYXRpb24nXSk7XG5cbiAgICAgICAgLy8gZ2VuZXJhdGUgdW5pcXVlIGlkIGZvciB0aGUgY29tcG9uZW50XG4gICAgICAgIHRoaXMuJGlkID0gdGhpcy53aWRnZXRJZCB8fCBNYXRoLnJhbmRvbSgpO1xuICAgICAgICAvLyByZW1vdmUgdGl0bGUgYXR0cmlidXRlIGFzIHRoZSBlbGVtZW50IG9uIGhvdmVyIHNob3dzIHlvdSB0aGUgaGludCB0aHJvdWdoLW91dCB0aGUgZWxlbWVudFxuICAgICAgICByZW1vdmVBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgJ3RpdGxlJyk7XG4gICAgICAgIHRoaXMuY2hhcnRSZWFkeSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJpbmRkYXRhc2V0ID0gdGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJyk7XG4gICAgICAgIC8vIFNob3cgbG9hZGluZyBzdGF0dXMgYmFzZWQgb24gdGhlIHZhcmlhYmxlIGxpZmUgY3ljbGVcbiAgICAgICAgdGhpcy5fc3Vic2NpcHRpb25zLnB1c2godGhpcy5hcHAuc3Vic2NyaWJlKCd0b2dnbGUtdmFyaWFibGUtc3RhdGUnLCB0aGlzLmhhbmRsZUxvYWRpbmcuYmluZCh0aGlzKSkpO1xuICAgICAgICAvLyBXaWxsIGhpZGUgdG9sbHRpcCBvZiBhIGNoYXJ0IGluIG1vYmlsZSB3aGVuIHRoZSB1c2VyIHNjcm9sbHMuXG4gICAgICAgIHRoaXMuX3N1YnNjaXB0aW9ucy5wdXNoKHRoaXMuYXBwLnN1YnNjcmliZSgnaXNjcm9sbC1zdGFydCcsICgpID0+IHt0aGlzLmhpZGVUb29sdGlwKCk7fSkpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIC8vIEZvciBvbGQgcHJvamVjdHNcbiAgICAgICAgaWYgKCFfLmluY2x1ZGVzKFsnb3V0c2lkZScsICdpbnNpZGUnLCAnaGlkZSddLCB0aGlzLnNob3dsYWJlbHMpKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dsYWJlbHMgICAgICAgID0gZ2V0Qm9vbGVhblZhbHVlKHRoaXMuc2hvd2xhYmVscyk7XG4gICAgICAgICAgICB0aGlzLnNob3dsYWJlbHNvdXRzaWRlID0gZ2V0Qm9vbGVhblZhbHVlKHRoaXMuc2hvd2xhYmVsc291dHNpZGUpO1xuICAgICAgICAgICAgdGhpcy5zaG93bGFiZWxzICAgICAgICA9IHRoaXMuc2hvd2xhYmVscyA/ICh0aGlzLnNob3dsYWJlbHNvdXRzaWRlID8gJ291dHNpZGUnIDogJ2luc2lkZScpIDogJ2hpZGUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRoZW1lKSB7XG4gICAgICAgICAgICAvLyBEZWZhdWx0IHRoZW1lIGZvciBwaWUvZG9udXQgaXMgQXp1cmUgYW5kIGZvciBvdGhlciBpdCBpcyBUZXJyZXN0cmlhbFxuICAgICAgICAgICAgdGhpcy50aGVtZSA9IGlzUGllVHlwZSh0aGlzLnR5cGUpID8gJ0F6dXJlJyA6ICdUZXJyZXN0cmlhbCc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsICd3bUNoYXJ0JyArIHRoaXMuJGlkKTtcbiAgICAgICAgLy8gV2hlbiB0aGVyZSBpcyBub3QgdmFsdWUgYmluZGluZywgdGhlbiBwbG90IHRoZSBjaGFydCB3aXRoIHNhbXBsZSBkYXRhXG4gICAgICAgIGlmICghdGhpcy5iaW5kZGF0YXNldCAmJiAhdGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnc2NvcGVkYXRhc2V0JykpIHtcbiAgICAgICAgICAgIHRoaXMuX3Bsb3RDaGFydFByb3h5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gZGVzdHJveSBhbGwgc3Vic2NyaXB0aW9ucyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrLlxuICAgICAgICB0aGlzLmhpZGVUb29sdGlwKCk7XG4gICAgICAgIHRoaXMuX3N1YnNjaXB0aW9ucy5mb3JFYWNoKChzdWJzY3JpcHRpb24pPT57XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuICAgIHJlZHJhdyA9IHRoaXMuX3Bsb3RDaGFydFByb3h5LmJpbmQodGhpcyk7XG59XG4iLCI8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGluZ1wiICpuZ0lmPVwidGl0bGVcIj5cbiAgICA8aDMgY2xhc3M9XCJwYW5lbC10aXRsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+PGkgY2xhc3M9XCJhcHAtaWNvbiBwYW5lbC1pY29uIHt7aWNvbmNsYXNzfX1cIiBbY2xhc3MubmctaGlkZV09XCIhaWNvbmNsYXNzXCI+PC9pPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiIFtpbm5lckhUTUxdPVwidGl0bGVcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCIgKm5nSWY9XCJzdWJoZWFkaW5nXCIgW2lubmVySFRNTF09XCJzdWJoZWFkaW5nXCI+PC9kaXY+XG4gICAgPC9oMz5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImFwcC1jaGFydC1pbm5lclwiIFtuZ0NsYXNzXT1cInsnbG9hZGluZyc6aXNMb2FkSW5Qcm9ncmVzcywgJ3BhbmVsLWJvZHknOiB0aXRsZX1cIj5cbiAgICA8c3ZnPjwvc3ZnPlxuICAgIDxkaXYgY2xhc3M9XCJ3bS1jb250ZW50LWluZm8gcmVhZG9ubHktd3JhcHBlclwiICpuZ0lmPVwic2hvd0NvbnRlbnRMb2FkRXJyb3IgJiYgc2hvd05vRGF0YU1zZ1wiPlxuICAgICAgICA8cCBjbGFzcz1cIndtLW1lc3NhZ2VcIiBbdGl0bGVdPVwiaGludE1zZ1wiIFtuZ0NsYXNzXT1cInsnZXJyb3InOiBpbnZhbGlkQ29uZmlnfVwiIFtpbm5lclRleHRdPVwiZXJyTXNnXCI+PC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgd21TcGlubmVyIHNob3cuYmluZD1cImlzTG9hZEluUHJvZ3Jlc3NcIiBjYXB0aW9uLmJpbmQ9XCJsb2FkaW5nZGF0YW1zZ1wiPjwvZGl2PlxuPC9kaXY+XG4iXX0=
994
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0L3NyYy9jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnQvc3JjL2NoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkIsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQVcsTUFBTSxlQUFlLENBQUM7QUFFdEgsT0FBTyxFQUNILEdBQUcsRUFDSCxVQUFVLEVBQ1YsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsWUFBWSxFQUNaLGNBQWMsRUFDZCxVQUFVLEVBQ1YsU0FBUyxFQUlaLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0Isa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxHQUFJLE1BQU0scUJBQXFCLENBQUM7QUFFL0gsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0lDZnpOLHlCQUEyRTs7O0lBQS9CLGdFQUF3Qjs7O0lBSjVFLDhCQUF5QyxZQUFBLGFBQUE7SUFFVixvQkFBOEU7SUFBQSxpQkFBTTtJQUMzRyx5QkFBK0M7SUFDL0MscUVBQTJFO0lBQy9FLGlCQUFLLEVBQUE7OztJQUh5QixlQUF5QztJQUF6Qyx1RUFBeUM7SUFBQyw0Q0FBNEI7SUFDM0UsZUFBbUI7SUFB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dXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbmplY3RvciwgVmlld0VuY2Fwc3VsYXRpb24sIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgICBBcHAsXG4gICAgRGF0YVNvdXJjZSxcbiAgICBnZXRDbG9uZWRPYmplY3QsXG4gICAgaXNEYXRhU291cmNlRXF1YWwsXG4gICAgaXNFbXB0eU9iamVjdCxcbiAgICBpc051bWJlclR5cGUsXG4gICAgcHJldHRpZnlMYWJlbHMsXG4gICAgcmVtb3ZlQXR0cixcbiAgICB0cmlnZ2VyRm4sXG4gICAgaXNNb2JpbGVBcHAsXG4gICAgbm9vcCxcbiAgICBVc2VyRGVmaW5lZEV4ZWN1dGlvbkNvbnRleHRcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgQVBQTFlfU1RZTEVTX1RZUEUsIElSZWRyYXdhYmxlQ29tcG9uZW50LCBwcm92aWRlQXNXaWRnZXRSZWYsIFN0eWxhYmxlQ29tcG9uZW50LCBzdHlsZXIsICB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuXG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi9jaGFydC5wcm9wcyc7XG5pbXBvcnQgeyBhbGxTaGFwZXMsIGdldERhdGVMaXN0LCBnZXRTYW1wbGVEYXRhLCBpbml0Q2hhcnQsIGlzQXJlYUNoYXJ0LCBpc0F4aXNEb21haW5WYWxpZCwgaXNCYXJDaGFydCwgaXNCdWJibGVDaGFydCwgaXNDaGFydERhdGFBcnJheSwgaXNDaGFydERhdGFKU09OLCBpc0xpbmVUeXBlQ2hhcnQsIGlzUGllVHlwZSwgcG9zdFBsb3RDaGFydFByb2Nlc3MgfSBmcm9tICcuL2NoYXJ0LnV0aWxzJztcblxuZGVjbGFyZSBjb25zdCAkLCBfLCBkMywgbnY7XG5cbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLWNoYXJ0JywgaG9zdENsYXNzOiAnYXBwLWNoYXJ0J307XG5cbmNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICdCdWJibGUnIDogWydidWJibGVzaXplJywgJ3NoYXBlJ11cbiAgICB9LFxuICAgIE5PTkUgPSAnbm9uZScsXG4gICAgYWR2YW5jZURhdGFQcm9wcyA9IFsnYWdncmVnYXRpb24nLCAnYWdncmVnYXRpb25jb2x1bW4nLCAnZ3JvdXBieScsICdvcmRlcmJ5J10sXG4gICAgLy8gWFBhdGhzIHRvIGdldCBhY3R1YWwgZGF0YSBvZiBkYXRhIHBvaW50cyBpbiBjaGFydHNcbiAgICBjaGFydERhdGFQb2ludFhwYXRoID0ge1xuICAgICAgICAnQ29sdW1uJyAgICAgICAgIDogJ3JlY3QubnYtYmFyJyxcbiAgICAgICAgJ0JhcicgICAgICAgICAgICA6ICdnLm52LWJhcicsXG4gICAgICAgICdBcmVhJyAgICAgICAgICAgOiAnLm52LXN0YWNrZWRhcmVhIC5udi1wb2ludCcsXG4gICAgICAgICdDdW11bGF0aXZlIExpbmUnOiAnLm52LWN1bXVsYXRpdmVMaW5lIC5udi1zY2F0dGVyV3JhcCBwYXRoLm52LXBvaW50JyxcbiAgICAgICAgJ0xpbmUnICAgICAgICAgICA6ICcubnYtbGluZUNoYXJ0IC5udi1zY2F0dGVyV3JhcCBwYXRoLm52LXBvaW50JyxcbiAgICAgICAgJ1BpZScgICAgICAgICAgICA6ICcubnYtcGllQ2hhcnQgLm52LXNsaWNlIHBhdGgnLFxuICAgICAgICAnRG9udXQnICAgICAgICAgIDogJy5udi1waWVDaGFydCAubnYtc2xpY2UgcGF0aCcsXG4gICAgICAgICdCdWJibGUnICAgICAgICAgOiAnLm52LXNjYXR0ZXJDaGFydCAubnYtcG9pbnQtcGF0aHMgcGF0aCdcbiAgICB9LFxuICAgIC8vIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBjaGFydFxuICAgIGFsbE9wdGlvbnMgPSBbJ2J1YmJsZXNpemUnLCAnc2hhcGUnXSxcbiAgICBzdHlsZVByb3BzID0ge1xuICAgICAgICAnZm9udHVuaXQnICAgICAgOiAnZm9udC1zaXplJyxcbiAgICAgICAgJ2ZvbnRzaXplJyAgICAgIDogJ2ZvbnQtc2l6ZScsXG4gICAgICAgICdjb2xvcicgICAgICAgICA6ICdmaWxsJyxcbiAgICAgICAgJ2ZvbnRmYW1pbHknICAgIDogJ2ZvbnQtZmFtaWx5JyxcbiAgICAgICAgJ2ZvbnR3ZWlnaHQnICAgIDogJ2ZvbnQtd2VpZ2h0JyxcbiAgICAgICAgJ2ZvbnRzdHlsZScgICAgIDogJ2ZvbnQtc3R5bGUnLFxuICAgICAgICAndGV4dGRlY29yYXRpb24nOiAndGV4dC1kZWNvcmF0aW9uJ1xuICAgIH0sXG4gICAgLy8gR2V0dGluZyB0aGUgcmVsZXZhbnQgYWdncmVnYXRpb24gZnVuY3Rpb24gYmFzZWQgb24gdGhlIHNlbGVjdGVkIG9wdGlvblxuICAgIGFnZ3JlZ2F0aW9uRm5NYXAgPSB7XG4gICAgICAgICdhdmVyYWdlJyA6ICdBVkcnLFxuICAgICAgICAnY291bnQnICAgOiAnQ09VTlQnLFxuICAgICAgICAnbWF4aW11bScgOiAnTUFYJyxcbiAgICAgICAgJ21pbmltdW0nIDogJ01JTicsXG4gICAgICAgICdzdW0nICAgICA6ICdTVU0nXG4gICAgfTtcblxuY29uc3QgZ2V0Qm9vbGVhblZhbHVlID0gdmFsID0+IHtcbiAgICBpZiAodmFsID09PSB0cnVlIHx8IHZhbCA9PT0gJ3RydWUnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodmFsID09PSBmYWxzZSB8fCB2YWwgPT09ICdmYWxzZScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufTtcblxuLy8gcmV0dXJucyBvcmRlcmJ5IGNvbHVtbnMgYW5kIHRoZWlyIG9yZGVycyBpbiB0d28gc2VwYXJhdGUgYXJyYXlzXG5jb25zdCBnZXRMb2Rhc2hPcmRlckJ5Rm9ybWF0ID0gb3JkZXJieSA9PiB7XG4gICAgbGV0IGNvbHVtbnM7XG4gICAgY29uc3Qgb3JkZXJCeUNvbHVtbnMgPSBbXSxcbiAgICAgICAgb3JkZXJzID0gW107XG5cbiAgICBfLmZvckVhY2goXy5zcGxpdChvcmRlcmJ5LCAnLCcpLCBmdW5jdGlvbiAoY29sKSB7XG4gICAgICAgIGNvbHVtbnMgPSBfLnNwbGl0KGNvbCwgJzonKTtcbiAgICAgICAgb3JkZXJCeUNvbHVtbnMucHVzaChjb2x1bW5zWzBdKTtcbiAgICAgICAgb3JkZXJzLnB1c2goY29sdW1uc1sxXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ2NvbHVtbnMnIDogb3JkZXJCeUNvbHVtbnMsXG4gICAgICAgICdvcmRlcnMnICA6IG9yZGVyc1xuICAgIH07XG59O1xuXG4vLyBSZXBsYWNpbmcgdGhlICcuJyBieSB0aGUgJyQnIGJlY2F1c2UgJy4nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGFsaWFzIG5hbWVzXG5jb25zdCBnZXRWYWxpZEFsaWFzTmFtZSA9IGFsaWFzTmFtZSA9PiBhbGlhc05hbWUgPyBhbGlhc05hbWUucmVwbGFjZSgvXFwuL2csICckJykgOiBudWxsO1xuXG4vLyBBcHBseWluZyB0aGUgZm9udCByZWxhdGVkIHN0eWxlcyBmb3IgdGhlIGNoYXJ0XG5jb25zdCBzZXRUZXh0U3R5bGUgPSAocHJvcGVydGllcywgaWQpID0+IHtcbiAgICBjb25zdCBjaGFydHRleHQgPSBkMy5zZWxlY3QoJyN3bUNoYXJ0JyArIGlkICsgJyBzdmcnKS5zZWxlY3RBbGwoJ3RleHQnKTtcbiAgICBjaGFydHRleHQuc3R5bGUocHJvcGVydGllcyk7XG59O1xuXG5jb25zdCBhbmdsZSA9IGQgPT4ge1xuICAgIGNvbnN0IGEgPSAoZC5zdGFydEFuZ2xlICsgZC5lbmRBbmdsZSkgKiA5MCAvIE1hdGguUEkgLSA5MDtcbiAgICByZXR1cm4gYSA+IDkwID8gYSAtIDE4MCA6IGE7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2Rpdlt3bUNoYXJ0XScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B3YXZlbWFrZXIuY29tL252ZDMvYnVpbGQvbnYuZDMubWluLmNzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoQ2hhcnRDb21wb25lbnQpXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0Q29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIElSZWRyYXdhYmxlQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgeGF4aXNkYXRha2V5O1xuICAgIHlheGlzZGF0YWtleTtcbiAgICBncm91cGJ5O1xuICAgIGFnZ3JlZ2F0aW9uO1xuICAgIGFnZ3JlZ2F0aW9uY29sdW1uO1xuICAgIGlzVmlzdWFsbHlHcm91cGVkO1xuICAgIG9yZGVyYnk7XG4gICAgaWNvbmNsYXNzID0gJyc7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHNob3dDb250ZW50TG9hZEVycm9yO1xuICAgIGludmFsaWRDb25maWc7XG4gICAgZXJyTXNnO1xuICAgIHNoYXBlOiBzdHJpbmc7XG4gICAgZGF0YXNvdXJjZTogYW55O1xuICAgIGZvbnRzaXplOiBzdHJpbmc7XG4gICAgc2VsZWN0ZWRpdGVtOiBhbnk7XG4gICAgZm9udHVuaXQ6IHN0cmluZztcbiAgICBvZmZzZXR0b3A6IG51bWJlcjtcbiAgICBvZmZzZXRsZWZ0OiBudW1iZXI7XG4gICAgb2Zmc2V0cmlnaHQ6IG51bWJlcjtcbiAgICBvZmZzZXRib3R0b206IG51bWJlcjtcbiAgICBzaG93bGFiZWxzOiBhbnk7XG4gICAgdGhlbWU6IHN0cmluZztcblxuICAgIHByaXZhdGUgJGlkO1xuICAgIHByaXZhdGUgc2NvcGVkYXRhc2V0OiBhbnk7XG4gICAgcHJpdmF0ZSBiaW5kZGF0YXNldDogYW55O1xuICAgIHByaXZhdGUgc2hvd2xhYmVsc291dHNpZGU6IGFueTtcbiAgICBwcml2YXRlIF9yZXNpemVGbjogYW55O1xuICAgIHByaXZhdGUgY2hhcnQ6IGFueTtcbiAgICBwcml2YXRlIGNsZWFyQ2FudmFzOiBib29sZWFuO1xuICAgIHB1YmxpYyBpc0xvYWRJblByb2dyZXNzOiBib29sZWFuO1xuICAgIHByaXZhdGUgZmlsdGVyRmllbGRzOiBib29sZWFuIHwgYW55O1xuICAgIHByaXZhdGUgZGF0YXNldDogYW55O1xuICAgIHByaXZhdGUgYXhpc29wdGlvbnM6IGFueTtcbiAgICBwcml2YXRlIG51bWVyaWNDb2x1bW5zOiBhbnk7XG4gICAgcHJpdmF0ZSBub25QcmltYXJ5Q29sdW1uczogYW55ID0gW107XG4gICAgcHJpdmF0ZSB2YXJpYWJsZUluZmxpZ2h0OiBhbnk7XG4gICAgcHJpdmF0ZSBjaGFydFJlYWR5OiBib29sZWFuO1xuICAgIHByaXZhdGUgeERhdGFLZXlBcnI6IGFueSA9IFtdO1xuICAgIHByaXZhdGUgeEF4aXNEYXRhVHlwZTogc3RyaW5nO1xuICAgIHByaXZhdGUgYnViYmxlc2l6ZTogYW55O1xuICAgIHB1YmxpYyBzaG93Tm9EYXRhTXNnOiBhbnk7XG4gICAgcHJpdmF0ZSBzYW1wbGVEYXRhOiBhbnlbXTtcbiAgICBwcml2YXRlIGNoYXJ0RGF0YTogYW55W10gPSBbXTtcbiAgICBwcml2YXRlIF9wcm9jZXNzZWREYXRhOiBhbnlbXSA9IFtdO1xuICAgIHByaXZhdGUgX3N1YnNjaXB0aW9uczogYW55ID0gW107XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnBhbmVsJykgdGl0bGU7XG5cbiAgICBpc0dyb3VwQnlFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gISEodGhpcy5ncm91cGJ5ICYmIHRoaXMuZ3JvdXBieSAhPT0gTk9ORSk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgeCBhbmQgeSBheGlzIHRoYXQgYXJlIGNob3NlbiBhcmUgdmFsaWQgdG8gcGxvdCBjaGFydFxuICAgIGlzVmFsaWRBeGlzKCkge1xuICAgICAgICAvLyBDaGVjayBpZiB4IGF4aXMgYW5kIHkgYXhpcyBhcmUgY2hvc2VuIGFuZCBhcmUgbm90IGVxdWFsXG4gICAgICAgIHJldHVybiB0aGlzLmJpbmRkYXRhc2V0ID8gKHRoaXMueGF4aXNkYXRha2V5ICYmIHRoaXMueWF4aXNkYXRha2V5KSA6IHRydWU7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgYWdncmVnYXRpb24gaXMgY2hvc2VuXG4gICAgaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhISgodGhpcy5pc0dyb3VwQnlFbmFibGVkKCkgJiYgdGhpcy5hZ2dyZWdhdGlvbiAhPT0gTk9ORSAmJiB0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uKSk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgZWl0aGVyIGdyb3VwYnksIGFnZ3JlZ2F0aW9uIG9yIG9yZGVyYnkgaXMgY2hvc2VuXG4gICAgaXNEYXRhRmlsdGVyaW5nRW5hYmxlZCgpIHtcbiAgICAgICAgLypRdWVyeSBuZWVkIHRvIGJlIHRyaWdnZXJlZCBpZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjYXNlcyBzYXRpc2Z5XG4gICAgICAgICogMS4gR3JvdXAgQnkgYW5kIGFnZ3JlZ2F0aW9uIGJvdGggY2hvc2VuXG4gICAgICAgICogMi4gT25seSBPcmRlciBCeSBpcyBjaG9zZW5cbiAgICAgICAgKiAqL1xuXG4gICAgICAgIHJldHVybiB0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkgfHwgKCF0aGlzLmlzVmlzdWFsbHlHcm91cGVkICYmIHRoaXMub3JkZXJieSk7XG4gICAgfVxuXG4gICAgLypDaGFydHMgbGlrZSBMaW5lLEFyZWEsQ3VtdWxhdGl2ZSBMaW5lIGRvZXMgbm90IHN1cHBvcnQgYW55IG90aGVyIGRhdGF0eXBlXG4gICAgICAgIG90aGVyIHRoYW4gaW50ZWdlciB1bmxpa2UgdGhlIGNvbHVtbiBhbmQgYmFyLkl0IGlzIGEgbnZkMyBpc3N1ZS4gSW5vcmRlciB0b1xuICAgICAgICBzdXBwb3J0IHRoYXQgdGhpcyBpcyBhIGZpeCovXG4gICAgZ2V0eEF4aXNWYWwoZGF0YU9iaiwgeEtleSwgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBfLmdldChkYXRhT2JqLCB4S2V5KTtcbiAgICAgICAgLy8gSWYgeCBheGlzIGlzIG90aGVyIHRoYW4gbnVtYmVyIHR5cGUgdGhlbiBhZGQgaW5kZXhlc1xuICAgICAgICBpZiAoaXNMaW5lVHlwZUNoYXJ0KHRoaXMudHlwZSkgJiYgIWlzTnVtYmVyVHlwZSh0aGlzLnhBeGlzRGF0YVR5cGUpKSB7XG4gICAgICAgICAgICAvLyBWZXJpZmljYXRpb24gdG8gZ2V0IHRoZSB1bmlxdWUgZGF0YSBrZXlzXG4gICAgICAgICAgICB0aGlzLnhEYXRhS2V5QXJyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBHZXR0aW5nIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgYW1vbmcgYWxsIHRoZSB4IHZhbHVlc1xuICAgIGdldFhNaW5NYXhWYWx1ZXMoZGF0dW0pIHtcbiAgICAgICAgaWYgKCFkYXR1bSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHhWYWx1ZXM6IGFueSA9IHt9O1xuICAgICAgICAvKlxuICAgICAgICAgY29tcHV0ZSB0aGUgbWluIHggdmFsdWVcbiAgICAgICAgIGVnOiBXaGVuIGRhdGEgaGFzIG9iamVjdHNcbiAgICAgICAgICAgIGlucHV0OiBbe3g6MSwgeToyfSwge3g6MiwgeTozfSwge3g6MywgeTo0fV1cbiAgICAgICAgICAgIG1pbiB4OiAxXG4gICAgICAgICBlZzogV2hlbiBkYXRhIGhhcyBhcnJheXNcbiAgICAgICAgICAgIGlucHV0OiBbWzEwLCAyMF0sIFsyMCwgMzBdLCBbMzAsIDQwXV07XG4gICAgICAgICAgICBtaW4geDogMTBcbiAgICAgICAgKi9cbiAgICAgICAgeFZhbHVlcy5taW4gPSBfLm1pbkJ5KGRhdHVtLnZhbHVlcywgZGF0YU9iamVjdCA9PiBkYXRhT2JqZWN0LnggfHwgZGF0YU9iamVjdFswXSk7XG4gICAgICAgIC8qXG4gICAgICAgICBjb21wdXRlIHRoZSBtYXggeCB2YWx1ZVxuICAgICAgICAgZWc6IFdoZW4gZGF0YSBoYXMgb2JqZWN0c1xuICAgICAgICAgICAgaW5wdXQ6IFt7eDoxLCB5OjJ9LCB7eDoyLCB5OjN9LCB7eDozLCB5OjR9XVxuICAgICAgICAgICAgbWF4IHg6IDNcbiAgICAgICAgIGVnOiBXaGVuIGRhdGEgaGFzIGFycmF5c1xuICAgICAgICAgICAgaW5wdXQ6IFtbMTAsIDIwXSwgWzIwLCAzMF0sIFszMCwgNDBdXTtcbiAgICAgICAgICAgIG1heCB4OiAzMFxuICAgICAgICAgKi9cbiAgICAgICAgeFZhbHVlcy5tYXggPSBfLm1heEJ5KGRhdHVtLnZhbHVlcywgZGF0YU9iamVjdCA9PiBkYXRhT2JqZWN0LnggfHwgZGF0YU9iamVjdFswXSk7XG4gICAgICAgIHJldHVybiB4VmFsdWVzO1xuICAgIH1cblxuICAgIC8vIEdldHRpbmcgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBhbW9uZyBhbGwgdGhlIHkgdmFsdWVzXG4gICAgZ2V0WU1pbk1heFZhbHVlcyhkYXR1bSkge1xuICAgICAgICBjb25zdCB5VmFsdWVzOiBhbnkgPSB7fSxcbiAgICAgICAgICAgIG1pblZhbHVlcyA9IFtdLFxuICAgICAgICAgICAgbWF4VmFsdWVzID0gW107XG4gICAgICAgIGlmICghZGF0dW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgICBHZXR0aW5nIHRoZSBtaW4gYW5kIG1heCB5IHZhbHVlcyBhbW9uZyBhbGwgdGhlIHNlcmllcyBvZiBkYXRhXG4gICAgICAgICBjb21wdXRlIHRoZSBtaW4geSB2YWx1ZVxuICAgICAgICAgZWc6IFdoZW4gZGF0YSBoYXMgb2JqZWN0c1xuICAgICAgICAgICAgaW5wdXQ6IFtbe3g6MSwgeToyfSwge3g6MiwgeTozfSwge3g6MywgeTo0fV0sIFt7eDoyLCB5OjN9LCB7eDozLCB5OjR9LCB7eDo0LCB5OjV9XV1cbiAgICAgICAgICAgIG1pbiB5IHZhbHVlcyA6ICcyJyhhbW9uZyBmaXJzdCBzZXQpICYgJzMnKGFtb25nIHNlY29uZCBzZXQpXG4gICAgICAgICAgICBtYXggeSB2YWx1ZXMgOiAnNCcoYW1vbmcgZmlyc3Qgc2V0KSAmICc1JyhhbW9uZyBzZWNvbmQgc2V0KVxuXG4gICAgICAgICBlZzogV2hlbiBkYXRhIGhhcyBhcnJheXNcbiAgICAgICAgICAgIGlucHV0OiBbW1sxMCwgMjBdLCBbMjAsIDMwXSwgWzMwLCA0MF1dLCBbWzIwLCAzMF0sIFszMCwgNDBdLCBbNDAsIDUwXV1dXG4gICAgICAgICAgICBtaW4geSB2YWx1ZXMgOiAnMjAnKGFtb25nIGZpcnN0IHNldCkgJiAnMzAnKGFtb25nIHNlY29uZCBzZXQpXG4gICAgICAgICAgICBtYXggeSB2YWx1ZXMgOiAnNDAnKGFtb25nIGZpcnN0IHNldCkgJiAnNTAnKGFtb25nIHNlY29uZCBzZXQpXG4gICAgICAgICAqL1xuXG4gICAgICAgIF8uZm9yRWFjaChkYXR1bSwgZGF0YSA9PiB7XG4gICAgICAgICAgICBtaW5WYWx1ZXMucHVzaChfLm1pbkJ5KGRhdGEudmFsdWVzLCBmdW5jdGlvbiAoZGF0YU9iamVjdCkgeyByZXR1cm4gZGF0YU9iamVjdC55IHx8IGRhdGFPYmplY3RbMV07IH0pKTtcbiAgICAgICAgICAgIG1heFZhbHVlcy5wdXNoKF8ubWF4QnkoZGF0YS52YWx1ZXMsIGZ1bmN0aW9uIChkYXRhT2JqZWN0KSB7IHJldHVybiBkYXRhT2JqZWN0LnkgfHwgZGF0YU9iamVjdFsxXTsgfSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gR2V0cyB0aGUgbGVhc3QgYW5kIGhpZ2hlc3QgdmFsdWVzIGFtb25nIGFsbCB0aGUgbWluIGFuZCBtYXggdmFsdWVzIG9mIHJlc3BlY3RpdmUgc2VyaWVzIG9mIGRhdGFcbiAgICAgICAgeVZhbHVlcy5taW4gPSBfLm1pbkJ5KG1pblZhbHVlcywgZGF0YU9iamVjdCA9PiBkYXRhT2JqZWN0LnkgfHwgZGF0YU9iamVjdFsxXSk7XG4gICAgICAgIHlWYWx1ZXMubWF4ID0gXy5tYXhCeShtYXhWYWx1ZXMsIGRhdGFPYmplY3QgPT4gZGF0YU9iamVjdC55IHx8IGRhdGFPYmplY3RbMV0pO1xuICAgICAgICByZXR1cm4geVZhbHVlcztcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgeC1heGlzIHZhbHVlcyBhcmUgdW5kZWZpbmVkLCB3ZSByZXR1cm4gZW1wdHkgYXJyYXkgZWxzZSB3ZSByZXR1cm4gdGhlIHZhbHVlc1xuICAgIGdldFZhbGlkRGF0YSh2YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoID09PSAxICYmIHZhbHVlc1swXSA9PT0gdW5kZWZpbmVkKSA/IFtdIDogdmFsdWVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgdGhlIHNpbmdsZSBkYXRhIHBvaW50IGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZSBkYXRhIGNoYXJ0IGFjY2VwdHNcbiAgICB2YWx1ZUZpbmRlcihkYXRhT2JqLCB4S2V5LCB5S2V5LCBpbmRleD8sIHNoYXBlPykge1xuICAgICAgICBjb25zdCB4VmFsID0gdGhpcy5nZXR4QXhpc1ZhbChkYXRhT2JqLCB4S2V5LCBpbmRleCksXG4gICAgICAgICAgICB2YWx1ZSA9IF8uZ2V0KGRhdGFPYmosIHlLZXkpLFxuICAgICAgICAgICAgeVZhbCA9IHBhcnNlRmxvYXQodmFsdWUpIHx8IHZhbHVlLFxuICAgICAgICAgICAgc2l6ZSA9IHBhcnNlRmxvYXQoZGF0YU9ialt0aGlzLmJ1YmJsZXNpemVdKSB8fCAyO1xuICAgICAgICBsZXQgZGF0YVBvaW50OiBhbnkgPSB7fTtcblxuICAgICAgICBpZiAoaXNDaGFydERhdGFKU09OKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgIGRhdGFQb2ludC54ID0geFZhbDtcbiAgICAgICAgICAgIGRhdGFQb2ludC55ID0geVZhbDtcbiAgICAgICAgICAgIC8vIG9ubHkgQnViYmxlIGNoYXJ0IGhhcyB0aGUgdGhpcmQgZGltZW5zaW9uXG4gICAgICAgICAgICBpZiAoaXNCdWJibGVDaGFydCh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgZGF0YVBvaW50LnNpemUgPSBzaXplO1xuICAgICAgICAgICAgICAgIGRhdGFQb2ludC5zaGFwZSA9IHNoYXBlIHx8ICdjaXJjbGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzQ2hhcnREYXRhQXJyYXkodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgZGF0YVBvaW50ID0gW3hWYWwsIHlWYWxdO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFkZGluZyBhY3R1YWwgdW53cmFwcGVkIGRhdGEgdG8gY2hhcnQgZGF0YSB0byB1c2UgYXQgdGhlIHRpbWUgb2Ygc2VsZWN0ZWQgZGF0YSBwb2ludCBvZiBjaGFydCBldmVudFxuICAgICAgICBkYXRhUG9pbnQuX2RhdGFPYmogPSBkYXRhT2JqO1xuICAgICAgICByZXR1cm4gZGF0YVBvaW50O1xuICAgIH1cblxuICAgIC8vIFNldHRpbmcgYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZXNcbiAgICBzZXRFcnJNc2cobWVzc2FnZSkge1xuICAgICAgICBpZiAodGhpcy5zaG93Tm9EYXRhTXNnKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dDb250ZW50TG9hZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZENvbmZpZyA9IHRydWU7XG4gICAgICAgICAgICAvLyBUT0RPOiBTZXQgdGhlIGxvY2FsZSBmcm9tIHRoZSBtZXNzYWdlXG4gICAgICAgICAgICB0aGlzLmVyck1zZyA9ICcnOyAvLyAkcm9vdFNjb3BlLmxvY2FsZVttZXNzYWdlXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3NDaGFydERhdGEoKSB7XG4gICAgICAgIHRoaXMuc2FtcGxlRGF0YSA9IGdldFNhbXBsZURhdGEodGhpcyk7XG4gICAgICAgIC8vIHNjb3BlIHZhcmlhYmxlcyB1c2VkIHRvIGtlZXAgdGhlIGFjdHVhbCBrZXkgdmFsdWVzIGZvciB4LWF4aXNcbiAgICAgICAgdGhpcy54RGF0YUtleUFyciA9IFtdO1xuICAgICAgICAvLyBQbG90dGluZyB0aGUgY2hhcnQgd2l0aCBzYW1wbGUgZGF0YSB3aGVuIHRoZSBjaGFydCBkYXRhc2V0IGlzIG5vdCBib3VuZFxuICAgICAgICBpZiAoIXRoaXMuYmluZGRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMueERhdGFLZXlBcnIgPSBnZXREYXRlTGlzdCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2FtcGxlRGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jaGFydERhdGEgfHwgIXRoaXMuY2hhcnREYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRhdHVtID0gW10sXG4gICAgICAgICAgICB5QXhpc0tleSxcbiAgICAgICAgICAgIHNoYXBlczogYW55ID0gW10sXG4gICAgICAgICAgICB2YWx1ZXM6IGFueSA9IFtdO1xuICAgICAgICBjb25zdCB4QXhpc0tleSA9IHRoaXMueGF4aXNkYXRha2V5LFxuICAgICAgICAgICAgeUF4aXNLZXlzID0gdGhpcy55YXhpc2RhdGFrZXkgPyB0aGlzLnlheGlzZGF0YWtleS5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICBkYXRhU2V0ID0gdGhpcy5jaGFydERhdGE7XG5cbiAgICAgICAgaWYgKF8uaXNBcnJheShkYXRhU2V0KSkge1xuICAgICAgICAgICAgaWYgKGlzUGllVHlwZSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgeUF4aXNLZXkgPSB5QXhpc0tleXNbMF07XG4gICAgICAgICAgICAgICAgZGF0dW0gPSBfLm1hcChkYXRhU2V0LCAoZGF0YU9iaiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5T2JqZWN0KGRhdGFTZXRbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVGaW5kZXIoZGF0YVNldFtpbmRleF0sIHhBeGlzS2V5LCB5QXhpc0tleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBkYXR1bSA9IHRoaXMuZ2V0VmFsaWREYXRhKGRhdHVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQnViYmxlQ2hhcnQodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBzaGFwZXMgPSB0aGlzLnNoYXBlID09PSAncmFuZG9tJyA/IGFsbFNoYXBlcyA6IHRoaXMuc2hhcGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlBeGlzS2V5cy5mb3JFYWNoKCh5QXhpc0tleSwgc2VyaWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9ICBfLm1hcChkYXRhU2V0LCAoZGF0YU9iaiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eU9iamVjdChkYXRhU2V0W2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUZpbmRlcihkYXRhU2V0W2luZGV4XSwgeEF4aXNLZXksIHlBeGlzS2V5LCBpbmRleCwgKF8uaXNBcnJheShzaGFwZXMpICYmIHNoYXBlc1tzZXJpZXNdKSB8fCB0aGlzLnNoYXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMuZ2V0VmFsaWREYXRhKHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIGRhdHVtLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHByZXR0aWZ5TGFiZWxzKHlBeGlzS2V5KVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0dW07XG4gICAgfVxuXG4gICAgc2V0Q2hhcnREYXRhKGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NlZERhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q2hhcnREYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc2VkRGF0YTtcbiAgICB9XG5cbiAgICAvLyBjb25zdHJ1Y3RpbmcgdGhlIGdyb3VwZWQgZGF0YSBiYXNlZCBvbiB0aGUgc2VsZWN0aW9uIG9mIG9yZGVyYnksIHggJiB5IGF4aXNcbiAgICBnZXRWaXN1YWxseUdyb3VwZWREYXRhKHF1ZXJ5UmVzcG9uc2UsIGdyb3VwaW5nQ29sdW1uKSB7XG4gICAgICAgIGxldCBncm91cERhdGE6IGFueSA9IHt9LFxuICAgICAgICAgICAgZ3JvdXBWYWx1ZXM6IGFueSA9IFtdLFxuICAgICAgICAgICAgb3JkZXJCeURldGFpbHMsXG4gICAgICAgICAgICBtYXhMZW5ndGg7XG4gICAgICAgIGNvbnN0IGNoYXJ0RGF0YTogYW55ID0gW10sXG4gICAgICAgICAgICBfaXNBcmVhQ2hhcnQgPSBpc0FyZWFDaGFydCh0aGlzLnR5cGUpLFxuICAgICAgICAgICAgeUF4aXNLZXkgPSBfLmZpcnN0KF8uc3BsaXQodGhpcy55YXhpc2RhdGFrZXksICcsJykpO1xuICAgICAgICB0aGlzLnhEYXRhS2V5QXJyID0gW107XG4gICAgICAgIHF1ZXJ5UmVzcG9uc2UgPSBfLm9yZGVyQnkocXVlcnlSZXNwb25zZSwgXy5zcGxpdCh0aGlzLmdyb3VwYnksICcsJykpO1xuICAgICAgICBpZiAodGhpcy5vcmRlcmJ5KSB7XG4gICAgICAgICAgICBvcmRlckJ5RGV0YWlscyA9IGdldExvZGFzaE9yZGVyQnlGb3JtYXQodGhpcy5vcmRlcmJ5KTtcbiAgICAgICAgICAgIHF1ZXJ5UmVzcG9uc2UgPSBfLm9yZGVyQnkocXVlcnlSZXNwb25zZSwgb3JkZXJCeURldGFpbHMuY29sdW1ucywgb3JkZXJCeURldGFpbHMub3JkZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBxdWVyeVJlc3BvbnNlID0gXy5ncm91cEJ5KHF1ZXJ5UmVzcG9uc2UsIGdyb3VwaW5nQ29sdW1uKTtcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBhcmVhIGNoYXJ0IGFsbCB0aGUgc2VyaWVzIGRhdGEgc2hvdWxkIGJlIG9mIHNhbWUgbGVuZ3RoXG4gICAgICAgIGlmIChfaXNBcmVhQ2hhcnQpIHtcbiAgICAgICAgICAgIG1heExlbmd0aCA9IF8ubWF4KF8ubWFwKHF1ZXJ5UmVzcG9uc2UsIG9iaiA9PiBvYmoubGVuZ3RoKSk7XG4gICAgICAgIH1cbiAgICAgICAgXy5mb3JFYWNoKHF1ZXJ5UmVzcG9uc2UsICh2YWx1ZXMsIGdyb3VwS2V5KSA9PiB7XG4gICAgICAgICAgICBncm91cFZhbHVlcyA9IGlzQXJlYUNoYXJ0ID8gXy5maWxsKG5ldyBBcnJheShtYXhMZW5ndGgpLCBbMCwgMF0pIDogW107XG4gICAgICAgICAgICBfLmZvckVhY2hSaWdodCh2YWx1ZXMsICh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBncm91cFZhbHVlc1tpbmRleF0gPSB0aGlzLnZhbHVlRmluZGVyKHZhbHVlLCB0aGlzLnhheGlzZGF0YWtleSwgeUF4aXNLZXksIGluZGV4KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZ3JvdXBEYXRhID0ge1xuICAgICAgICAgICAgICAgIGtleSA6IGdyb3VwS2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlcyA6IGdyb3VwVmFsdWVzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2hhcnREYXRhLnB1c2goZ3JvdXBEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjaGFydERhdGE7XG4gICAgfVxuXG4gICAgLypEZWNpZGVzIHdoZXRoZXIgdGhlIGRhdGEgc2hvdWxkIGJlIHZpc3VhbGx5IGdyb3VwZWQgb3Igbm90XG4gICAgICAgICAgICBWaXN1YWxseSBncm91cGVkIHdoZW4gYSBkaWZmZXJlbnQgY29sdW1uIGlzIGNob29zZW4gaW4gdGhlIGdyb3VwIGJ5IG90aGVyIHRoYW4geCBhbmQgeSBheGlzIGFuZCBhZ2dyZWdhdGlvbiBpcyBub3QgY2hvc2VuKi9cbiAgICBnZXRHcm91cGluZ0RldGFpbHMoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzR3JvdXBCeUVuYWJsZWQoKSAmJiAhdGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBsZXQgaXNWaXN1YWxseUdyb3VwZWQgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICB2aXN1YWxHcm91cGluZ0NvbHVtbixcbiAgICAgICAgICAgICAgICBncm91cGluZ0V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgY29sdW1uczogYW55ID0gW10sXG4gICAgICAgICAgICAgICAgZ3JvdXBpbmdDb2x1bW5JbmRleDtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwYnlDb2x1bW5zID0gdGhpcy5ncm91cGJ5ICYmIHRoaXMuZ3JvdXBieSAhPT0gTk9ORSA/IHRoaXMuZ3JvdXBieS5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICAgICAgeUF4aXNLZXlzID0gdGhpcy55YXhpc2RhdGFrZXkgPyB0aGlzLnlheGlzZGF0YWtleS5zcGxpdCgnLCcpIDogW107XG5cbiAgICAgICAgICAgIGlmIChncm91cGJ5Q29sdW1ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgLypHZXR0aW5nIHRoZSBncm91cCBieSBjb2x1bW4gd2hpY2ggaXMgbm90IHNlbGVjdGVkIGVpdGhlciBpbiB4IG9yIHkgYXhpcyovXG4gICAgICAgICAgICAgICAgZ3JvdXBieUNvbHVtbnMuZXZlcnkoKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMueGF4aXNkYXRha2V5ICE9PSBjb2x1bW4gJiYgJC5pbkFycmF5KGNvbHVtbiwgeUF4aXNLZXlzKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVmlzdWFsbHlHcm91cGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc3VhbEdyb3VwaW5nQ29sdW1uID0gY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBpbmdDb2x1bW5JbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBieUNvbHVtbnMuc3BsaWNlKGdyb3VwaW5nQ29sdW1uSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdGluZyB0aGUgZ3JvdXBieSBleHByZXNzaW9uXG4gICAgICAgICAgICAgICAgaWYgKHZpc3VhbEdyb3VwaW5nQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh2aXN1YWxHcm91cGluZ0NvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwYnlDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0gXy5jb25jYXQoY29sdW1ucywgZ3JvdXBieUNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHggYW5kIHkgYXhpcyBhcmUgbm90IGluY2x1ZGVkIGluIGFnZ3JlZ2F0aW9uIG5lZWQgdG8gYmUgaW5jbHVkZWQgaW4gZ3JvdXBieVxuICAgICAgICAgICAgaWYgKHRoaXMueGF4aXNkYXRha2V5ICE9PSB0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHRoaXMueGF4aXNkYXRha2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF8uZm9yRWFjaCh5QXhpc0tleXMsIGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGdyb3VwaW5nRXhwcmVzc2lvbiA9ICBjb2x1bW5zLmpvaW4oJywnKTtcbiAgICAgICAgICAgIC8vIHNldCBpc1Zpc3VhbGx5R3JvdXBlZCBmbGFnIGluIHNjb3BlIGZvciBsYXRlciB1c2VcbiAgICAgICAgICAgIHRoaXMuaXNWaXN1YWxseUdyb3VwZWQgPSBpc1Zpc3VhbGx5R3JvdXBlZDtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBncm91cGluZ0V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgaXNWaXN1YWxseUdyb3VwZWQ6IGlzVmlzdWFsbHlHcm91cGVkLFxuICAgICAgICAgICAgICAgIHZpc3VhbEdyb3VwaW5nQ29sdW1uOiB2aXN1YWxHcm91cGluZ0NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXhwcmVzc2lvbjogJycsXG4gICAgICAgICAgICBpc1Zpc3VhbGx5R3JvdXBlZDogZmFsc2UsXG4gICAgICAgICAgICB2aXN1YWxHcm91cGluZ0NvbHVtbjogJydcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0byBnZXQgdGhlIGFnZ3JlZ2F0ZWQgZGF0YSBhZnRlciBhcHBseWluZyB0aGUgYWdncmVnYXRpb24gJiBncm91cCBieSBvciBvcmRlciBieSBvcGVyYXRpb25zLlxuICAgIGdldEFnZ3JlZ2F0ZWREYXRhKGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlOiBhbnkgPSB0aGlzLmRhdGFzb3VyY2UsXG4gICAgICAgICAgICB5QXhpc0tleXMgPSB0aGlzLnlheGlzZGF0YWtleSA/IHRoaXMueWF4aXNkYXRha2V5LnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgIGRhdGE6IGFueSA9IHt9O1xuICAgICAgICBsZXQgc29ydEV4cHIsXG4gICAgICAgICAgICBjb2x1bW5zOiBhbnkgPSBbXSxcbiAgICAgICAgICAgIGNvbEFsaWFzLFxuICAgICAgICAgICAgb3JkZXJCeUNvbHVtbnMsXG4gICAgICAgICAgICBncm91cEJ5RmllbGRzOiBhbnkgPSBbXTtcblxuICAgICAgICBpZiAoIXZhcmlhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNHcm91cEJ5RW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBncm91cEJ5RmllbGRzID0gXy5zcGxpdCh0aGlzLmdyb3VwYnksICcsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3JkZXJieSkge1xuICAgICAgICAgICAgc29ydEV4cHIgPSBfLnJlcGxhY2UodGhpcy5vcmRlcmJ5LCAvOi9nLCAnICcpO1xuICAgICAgICAgICAgY29sdW1ucyA9IF8udW5pcShfLmNvbmNhdChjb2x1bW5zLCBncm91cEJ5RmllbGRzLCBbdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbl0pKTtcbiAgICAgICAgICAgIG9yZGVyQnlDb2x1bW5zID0gZ2V0TG9kYXNoT3JkZXJCeUZvcm1hdCh0aGlzLm9yZGVyYnkpLmNvbHVtbnM7XG4gICAgICAgICAgICAvLyBJZiB0aGUgb3JkZXJieSBjb2x1bW4gaXMgY2hvc2VuIGVpdGhlciBpbiBncm91cGJ5IG9yIG9yZGVyYnkgdGhlbiByZXBsYWNlIC4gd2l0aCAkIGZvciB0aGF0IGNvbHVtblxuICAgICAgICAgICAgXy5mb3JFYWNoKF8uaW50ZXJzZWN0aW9uKGNvbHVtbnMsIG9yZGVyQnlDb2x1bW5zKSwgY29sID0+IHtcbiAgICAgICAgICAgICAgICBjb2xBbGlhcyA9IGdldFZhbGlkQWxpYXNOYW1lKGNvbCk7XG4gICAgICAgICAgICAgICAgc29ydEV4cHIgPSBfLnJlcGxhY2Uoc29ydEV4cHIsIGNvbCwgY29sQWxpYXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgLy8gU2VuZCB0aGUgZ3JvdXAgYnkgaW4gdGhlIGFnZ3JlZ2F0aW9ucyBhcGkgb25seSBpZiBhZ2dyZWdhdGlvbiBpcyBhbHNvIGNob3NlblxuICAgICAgICAgICAgZGF0YS5ncm91cEJ5RmllbGRzID0gZ3JvdXBCeUZpZWxkcztcbiAgICAgICAgICAgIGRhdGEuYWdncmVnYXRpb25zID0gIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICdmaWVsZCc6IHRoaXMuYWdncmVnYXRpb25jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICd0eXBlJzogIGFnZ3JlZ2F0aW9uRm5NYXBbdGhpcy5hZ2dyZWdhdGlvbl0sXG4gICAgICAgICAgICAgICAgICAgICdhbGlhcyc6IGdldFZhbGlkQWxpYXNOYW1lKHRoaXMuYWdncmVnYXRpb25jb2x1bW4pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBxdWVyeS5cbiAgICAgICAgdmFyaWFibGUuZXhlY3V0ZSgnZ2V0QWdncmVnYXRlZERhdGEnLCB7XG4gICAgICAgICAgICAnYWdncmVnYXRpb25zJyA6IGRhdGEsXG4gICAgICAgICAgICAnc29ydCcgICAgICAgICA6IHNvcnRFeHByXG4gICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSByZXN1bHQgaW50byBhIGZvcm1hdCBzdXBwb3J0ZWQgYnkgdGhlIGNoYXJ0LlxuICAgICAgICAgICAgY29uc3QgY2hhcnREYXRhOiBhbnkgPSBbXSxcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbkFsaWFzOiBhbnkgPSBnZXRWYWxpZEFsaWFzTmFtZSh0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uKSxcbiAgICAgICAgICAgICAgICB4QXhpc0FsaWFzS2V5ID0gZ2V0VmFsaWRBbGlhc05hbWUodGhpcy54YXhpc2RhdGFrZXkpLFxuICAgICAgICAgICAgICAgIHlBeGlzQWxpYXNLZXlzID0gW107XG5cbiAgICAgICAgICAgIHlBeGlzS2V5cy5mb3JFYWNoKHlBeGlzS2V5ID0+IHlBeGlzQWxpYXNLZXlzLnB1c2goZ2V0VmFsaWRBbGlhc05hbWUoeUF4aXNLZXkpKSk7XG5cbiAgICAgICAgICAgIF8uZm9yRWFjaChyZXNwb25zZS5ib2R5LmNvbnRlbnQsIChyZXNwb25zZUNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHJlc3BvbnNlIGluIHRoZSBjaGFydERhdGEgYmFzZWQgb24gJ2FnZ3JlZ2F0aW9uQ29sdW1uJywgJ3hBeGlzRGF0YUtleScgJiAneUF4aXNEYXRhS2V5Jy5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialt0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uXSA9IHJlc3BvbnNlQ29udGVudFthZ2dyZWdhdGlvbkFsaWFzXTtcbiAgICAgICAgICAgICAgICAgICAgb2JqW3RoaXMuYWdncmVnYXRpb25jb2x1bW5dID0gXy5nZXQocmVzcG9uc2VDb250ZW50LCBhZ2dyZWdhdGlvbkFsaWFzKSB8fCBfLmdldChyZXNwb25zZUNvbnRlbnQsIHRoaXMuYWdncmVnYXRpb25jb2x1bW4pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG9ialt0aGlzLnhheGlzZGF0YWtleV0gPSBfLmdldChyZXNwb25zZUNvbnRlbnQsIHhBeGlzQWxpYXNLZXkpIHx8IF8uZ2V0KHJlc3BvbnNlQ29udGVudCwgdGhpcy54YXhpc2RhdGFrZXkpO1xuXG4gICAgICAgICAgICAgICAgeUF4aXNLZXlzLmZvckVhY2goKHlBeGlzS2V5LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYmpbeUF4aXNLZXldID0gcmVzcG9uc2VDb250ZW50W3lBeGlzQWxpYXNLZXlzW2luZGV4XV07XG4gICAgICAgICAgICAgICAgICAgIG9ialt5QXhpc0tleV0gPSBfLmdldChyZXNwb25zZUNvbnRlbnQsIHlBeGlzQWxpYXNLZXlzW2luZGV4XSkgfHwgXy5nZXQocmVzcG9uc2VDb250ZW50LCB5QXhpc0tleSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjaGFydERhdGEucHVzaChvYmopO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhID0gY2hhcnREYXRhO1xuXG4gICAgICAgICAgICB0cmlnZ2VyRm4oY2FsbGJhY2spO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5zZXRFcnJNc2coJ01FU1NBR0VfRVJST1JfRkVUQ0hfREFUQScpO1xuICAgICAgICAgICAgdHJpZ2dlckZuKGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIG1heGltdW0gd2lkdGggZm9yIHRoZSBsYWJlbHMgdGhhdCBjYW4gYmUgZGlzcGxheWVkLlRoaXMgd2lsbCBoZWxwZnVsIHdoZW4gdGhleSBhcmUgb3ZlcmxhcHBpbmdcbiAgICBzZXRMYWJlbHNNYXhXaWR0aCgpIHtcbiAgICAgICAgbGV0IHhUaWNrcyxcbiAgICAgICAgICAgIHRpY2tXaWR0aCxcbiAgICAgICAgICAgIG1heExlbmd0aCxcbiAgICAgICAgICAgIHhEaXN0LFxuICAgICAgICAgICAgeURpc3QsXG4gICAgICAgICAgICB0b3RhbEhlaWdodCxcbiAgICAgICAgICAgIG1heE5vTGFiZWxzLFxuICAgICAgICAgICAgbnRoRWxlbWVudCxcbiAgICAgICAgICAgIGxhYmVsc0F2YWlsYWJsZVdpZHRoLFxuICAgICAgICAgICAgYmFyV3JhcHBlcixcbiAgICAgICAgICAgIHlBeGlzV3JhcHBlcixcbiAgICAgICAgICAgIHN2Z1dyYXBwZXI7XG4gICAgICAgIGNvbnN0IGZvbnRzaXplID0gcGFyc2VJbnQodGhpcy5mb250c2l6ZSwgMTApIHx8IDEyLFxuICAgICAgICAgICAgaXNCYXJjaGFydCA9IGlzQmFyQ2hhcnQodGhpcy50eXBlKTtcbiAgICAgICAgLy8gZ2V0dGluZyB0aGUgeCB0aWNrcyBpbiB0aGUgY2hhcnRcbiAgICAgICAgeFRpY2tzID0gJCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpLmZpbmQoJ2cubnYteCcpLmZpbmQoJ2cudGljaycpLmZpbmQoJ3RleHQnKTtcblxuICAgICAgICAvLyBnZXR0aW5nIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0d28gdmlzaWJsZSB0aWNrcyBhc3NvY2lhdGVkIHdpdGggdmlzaWJsZSB0ZXh0XG4gICAgICAgIHhUaWNrcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHhUaWNrID0gJCh0aGlzKTtcbiAgICAgICAgICAgIGxldCB4VHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgIHRpY2tEaXN0O1xuICAgICAgICAgICAgaWYgKHhUaWNrLnRleHQoKSAmJiB4VGljay5jc3MoJ29wYWNpdHknKSA9PT0gJzEnKSB7XG4gICAgICAgICAgICAgICAgeFRyYW5zZm9ybSA9IHhUaWNrLnBhcmVudCgpLmF0dHIoJ3RyYW5zZm9ybScpLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgeERpc3QgPSBwYXJzZUZsb2F0KHhUcmFuc2Zvcm1bMF0uc3Vic3RyKDEwKSk7XG4gICAgICAgICAgICAgICAgeURpc3QgPSBwYXJzZUZsb2F0KHhUcmFuc2Zvcm1bMV0gfHwgJzAnKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzQmFyY2hhcnQgJiYgeERpc3QgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tEaXN0ID0geERpc3Q7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh5RGlzdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGlja0Rpc3QgPSB5RGlzdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpY2tXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aWNrV2lkdGggPSB0aWNrRGlzdCAtIHRpY2tXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aWNrV2lkdGggPSB0aWNrRGlzdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSW4gY2FzZSBvZiBiYXIgY2hhcnQgZ2V0dGluZyB0aGUgYXZhaWxhYmxlIHNwYWNlIGZvciB0aGUgbGFiZWxzIHRvIGJlIGRpc3BsYXllZFxuICAgICAgICBpZiAoaXNCYXJjaGFydCkge1xuICAgICAgICAgICAgYmFyV3JhcHBlciA9ICQoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmc+Zy5udi13cmFwPmc+Zy5udi1iYXJzV3JhcCcpWzBdO1xuICAgICAgICAgICAgeUF4aXNXcmFwcGVyID0gJCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2Zz5nLm52LXdyYXA+Zz5nLm52LXknKVswXTtcbiAgICAgICAgICAgIHN2Z1dyYXBwZXIgPSAkKCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJylbMF07XG4gICAgICAgICAgICAvLyBnZXR0aW5nIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGNoYXJ0XG4gICAgICAgICAgICB0b3RhbEhlaWdodCA9IGJhcldyYXBwZXIgPyBiYXJXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCA6IDA7XG4gICAgICAgICAgICAvLyBnZXR0aW5nIHRoZSBsYWJlbHMgYXZhaWxhYmxlIHNwYWNlXG4gICAgICAgICAgICBsYWJlbHNBdmFpbGFibGVXaWR0aCA9IHlBeGlzV3JhcHBlciA/IHN2Z1dyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLSB5QXhpc1dyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggOiBzdmdXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgLy8gU2V0dGluZyB0aGUgbWF4IGxlbmd0aCBmb3IgdGhlIGxhYmVsXG4gICAgICAgICAgICBtYXhMZW5ndGggPSBNYXRoLnJvdW5kKGxhYmVsc0F2YWlsYWJsZVdpZHRoIC8gZm9udHNpemUpO1xuICAgICAgICAgICAgLy8gaWYgYXZhaWxhYmxlIHNwYWNlIGZvciBlYWNoIGxhYmVsIGlzIGxlc3MgdGhhbiB0aGUgZm9udC1zaXplXG4gICAgICAgICAgICAvLyB0aGVuIGxpbWl0aW5nIHRoZSBsYWJlbHMgdG8gYmUgZGlzcGxheWVkXG4gICAgICAgICAgICBpZiAodGlja1dpZHRoIDwgZm9udHNpemUpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIG1heGltdW0gbm8gb2YgbGFiZWxzIHRvIGJlIGZpdHRlZFxuICAgICAgICAgICAgICAgIG1heE5vTGFiZWxzID0gdG90YWxIZWlnaHQgLyBmb250c2l6ZTtcbiAgICAgICAgICAgICAgICAvLyBzaG93aW5nIG9ubHkgdGhlIG50aCBlbGVtZW50XG4gICAgICAgICAgICAgICAgbnRoRWxlbWVudCA9IE1hdGguY2VpbCh0aGlzLmNoYXJ0RGF0YS5sZW5ndGggLyBtYXhOb0xhYmVscyk7XG4gICAgICAgICAgICAgICAgLy8gc2hvd2luZyB1cCBvbmx5IHNvbWUgbGFiZWxzXG4gICAgICAgICAgICAgICAgZDMuc2VsZWN0KCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJykuc2VsZWN0KCdnLm52LXgnKS5zZWxlY3RBbGwoJ2cudGljaycpLnNlbGVjdCgndGV4dCcpLmVhY2goZnVuY3Rpb24gKHRleHQsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaGlkaW5nIGV2ZXJ5IG5vbiBudGggZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAlIG50aEVsZW1lbnQgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS5hdHRyKCdvcGFjaXR5JywgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNldHRpbmcgdGhlIG1heCBsZW5ndGggZm9yIHRoZSBsYWJlbFxuICAgICAgICAgICAgbWF4TGVuZ3RoID0gTWF0aC5yb3VuZCh0aWNrV2lkdGggLyBmb250c2l6ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtYXhMZW5ndGggc2hvdWxkIGFsd2F5cyBiZSBhIHBvc2l0aXZlIG51bWJlclxuICAgICAgICBtYXhMZW5ndGggPSBNYXRoLmFicyhtYXhMZW5ndGgpO1xuICAgICAgICAvLyBWYWxpZGF0aW5nIGlmIGV2ZXJ5IGxhYmVsIGV4Y2VlZHMgdGhlIG1heCBsZW5ndGggYW5kIGlmIHNvIGxpbWl0aW5nIHRoZSBsZW5ndGggYW5kIGFkZGluZyBlbGxpcHNpc1xuICAgICAgICB4VGlja3MuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXh0Q29udGVudC5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRDb250ZW50ID0gdGhpcy50ZXh0Q29udGVudC5zdWJzdHIoMCwgbWF4TGVuZ3RoKSArICcuLi4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHRoZSBjb2x1bW5zIG9mIHRoYXQgY2FuIGJlIGNob29zZW4gaW4gdGhlIHggYW5kIHkgYXhpc1xuICAgIGdldERlZmF1bHRDb2x1bW5zKCkge1xuICAgICAgICBsZXQgdHlwZSxcbiAgICAgICAgICAgIHN0cmluZ0NvbHVtbixcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICB0ZW1wO1xuICAgICAgICBjb25zdCBkZWZhdWx0Q29sdW1ucyA9IFtdLFxuICAgICAgICAgICAgY29sdW1ucyA9IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QUk9QRVJUSUVTX01BUCkgfHwgW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoICYmIGRlZmF1bHRDb2x1bW5zLmxlbmd0aCA8PSAyOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHR5cGUgPSBjb2x1bW5zW2ldLnR5cGU7XG4gICAgICAgICAgICBpZiAoIWNvbHVtbnNbaV0uaXNSZWxhdGVkICYmIChpc051bWJlclR5cGUodHlwZSkpKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdENvbHVtbnMucHVzaChjb2x1bW5zW2ldLmZpZWxkTmFtZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmICFzdHJpbmdDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBzdHJpbmdDb2x1bW4gPSBjb2x1bW5zW2ldLmZpZWxkTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBPdGhlciB0aGFuIGJ1YmJsZSBjaGFydCB4OiBzdHJpbmcgdHlwZSB5OiBudW1iZXIgdHlwZVxuICAgICAgICAvLyBCdWJibGUgY2hhcnQgeDogbnVtYmVyIHR5cGUgeTogbnVtYmVyIHR5cGVcbiAgICAgICAgaWYgKHN0cmluZ0NvbHVtbiAmJiBkZWZhdWx0Q29sdW1ucy5sZW5ndGggPiAwICYmICFpc0J1YmJsZUNoYXJ0KHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgIHRlbXAgPSBkZWZhdWx0Q29sdW1uc1swXTtcbiAgICAgICAgICAgIGRlZmF1bHRDb2x1bW5zWzBdID0gc3RyaW5nQ29sdW1uO1xuICAgICAgICAgICAgZGVmYXVsdENvbHVtbnNbMV0gPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRDb2x1bW5zO1xuICAgIH1cblxuICAgIC8vIENhbGwgdXNlciBkZWZpbmVkIGphdmFzY3JpcHQgZnVuY3Rpb24gd2hlbiB1c2VyIGxpbmtzIGl0IHRvIGNsaWNrIGV2ZW50IG9mIHRoZSB3aWRnZXQuXG4gICAgYXR0YWNoQ2xpY2tFdmVudCgpIHtcbiAgICAgICAgbGV0IGRhdGFPYmo7XG4gICAgICAgIGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpLnNlbGVjdEFsbChjaGFydERhdGFQb2ludFhwYXRoW3RoaXMudHlwZV0pLnN0eWxlKCdwb2ludGVyLWV2ZW50cycsICdhbGwnKVxuICAgICAgICAgICAgLm9uKCdjbGljaycsIChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NvbHVtbic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0Jhcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhT2JqID0gZGF0YS5fZGF0YU9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdQaWUnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdEb251dCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhT2JqID0gZGF0YS5kYXRhLl9kYXRhT2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0FyZWEnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdDdW11bGF0aXZlIExpbmUnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdMaW5lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFPYmogPSBkYXRhWzBdLl9kYXRhT2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0J1YmJsZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhT2JqID0gZGF0YS5kYXRhLnBvaW50WzRdLl9kYXRhT2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRpdGVtID0gZGF0YU9iajtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdCcsIHskZXZlbnQ6IGQzLmV2ZW50LCBzZWxlY3RlZENoYXJ0SXRlbTogZGF0YSwgc2VsZWN0ZWRJdGVtOiB0aGlzLnNlbGVjdGVkaXRlbX0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICAvKiAgUmV0dXJucyBZIFNjYWxlIG1pbiB2YWx1ZVxuICAgICAgICAgICBFeDogSW5wdXQgICA6IDguOTdcbiAgICAgICAgICAgICAgIE91dHB1dCAgOiA4Ljg3XG5cbiAgICAgICAgICAgICAgIElucHV0ICAgOiA4XG4gICAgICAgICAgICAgICBPdXRwdXQgIDogN1xuICAgICAgICovXG5cbiAgICBwb3N0UGxvdFByb2Nlc3MoY2hhcnQpIHtcbiAgICAgICAgbGV0IGNoYXJ0U3ZnLFxuICAgICAgICAgICAgcGllTGFiZWxzLFxuICAgICAgICAgICAgcGllR3JvdXBzLFxuICAgICAgICAgICAgYW5nbGVBcnJheTtcbiAgICAgICAgY29uc3Qgc3R5bGVPYmogPSB7fTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuJGVsZW1lbnQ7XG5cbiAgICAgICAgcG9zdFBsb3RDaGFydFByb2Nlc3ModGhpcyk7XG5cbiAgICAgICAgaWYgKCFpc1BpZVR5cGUodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRMYWJlbHNNYXhXaWR0aCgpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnNob3dsYWJlbHNvdXRzaWRlKSB7XG4gICAgICAgICAgICAvKiogTnZkMyBoYXMgYSBpc3N1ZSBpbiByb3RhdGluZyB0ZXh0LiBTbyB3ZSB3aWxsIHVzZSB0aGlzIGFzIGEgdGVtcCBmaXguXG4gICAgICAgICAgICAgKiBJZiB0aGUgaXNzdWUgaXMgcmVzb2x2ZWQgdGhlcmUsIHdlIGNhbiByZW1vdmUgdGhpcy4qL1xuICAgICAgICAgICAgLyogSWYgaXQgaXMgYSBkb251dCBjaGFydCwgdGhlbiByb3RhdGUgdGhlIHRleHQgYW5kIHBvc2l0aW9uIHRoZW0qL1xuICAgICAgICAgICAgY2hhcnRTdmcgPSBkMy5zZWxlY3QoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKTtcbiAgICAgICAgICAgIHBpZUxhYmVscyA9IGNoYXJ0U3ZnLnNlbGVjdCgnLm52LXBpZUxhYmVscycpLnNlbGVjdEFsbCgnLm52LWxhYmVsJyk7XG4gICAgICAgICAgICBwaWVHcm91cHMgPSBjaGFydFN2Zy5zZWxlY3QoJy5udi1waWUnKS5zZWxlY3RBbGwoJy5udi1zbGljZScpO1xuICAgICAgICAgICAgYW5nbGVBcnJheSA9IFtdO1xuICAgICAgICAgICAgaWYgKHBpZUdyb3VwcyAmJiBwaWVHcm91cHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcGllR3JvdXBzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBkMy5zZWxlY3QodGhpcykuYXR0cigndHJhbnNmb3JtJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlQXJyYXkucHVzaChhbmdsZShkKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHBpZUxhYmVscy5lYWNoKGZ1bmN0aW9uIChkLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gZDMuc2VsZWN0KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAkKGdyb3VwWzBdWzBdKS5maW5kKCd0ZXh0JykuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgnICsgYW5nbGVBcnJheVtpXSArICcpJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwcmVwYXJlIHRleHQgc3R5bGUgcHJvcHMgb2JqZWN0IGFuZCBzZXRcbiAgICAgICAgXy5mb3JFYWNoKHN0eWxlUHJvcHMsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnZm9udHNpemUnIHx8IGtleSA9PT0gJ2ZvbnR1bml0Jykge1xuICAgICAgICAgICAgICAgIHN0eWxlT2JqW3ZhbHVlXSA9IHRoaXMuZm9udHNpemUgKyB0aGlzLmZvbnR1bml0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHlsZU9ialt2YWx1ZV0gPSB0aGlzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRUZXh0U3R5bGUoc3R5bGVPYmosIHRoaXMuJGlkKTtcblxuICAgICAgICAvKlxuICAgICAgICAgKiBhbGxvdyB3aW5kb3ctcmVzaXplIGZ1bmN0aW9uYWxpdHksIGZvciBvbmx5LXJ1biBtb2RlIGFzXG4gICAgICAgICAqIHVwZGF0aW5nIGNoYXJ0IGlzIGJlaW5nIGhhbmRsZWQgYnkgd2F0Y2hlcnMgb2YgaGVpZ2h0ICYgd2lkdGggaW4gc3R1ZGlvLW1vZGVcbiAgICAgICAgICogKi9cbiAgICAgICAgdHJpZ2dlckZuKHRoaXMuX3Jlc2l6ZUZuICYmIHRoaXMuX3Jlc2l6ZUZuLmNsZWFyKTtcbiAgICAgICAgdGhpcy5fcmVzaXplRm4gPSBudi51dGlscy53aW5kb3dSZXNpemUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgY2hhcnQudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgcG9zdFBsb3RDaGFydFByb2Nlc3ModGhpcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1BpZVR5cGUodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExhYmVsc01heFdpZHRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBnZXQgcGFyZW50cyBvZiBhY2NvcmRpb24gdHlwZVxuICAgICAgICAgICAgICAgIC8qbGV0IHBhcmVudCA9IGVsZW1lbnQuY2xvc2VzdCgnLmFwcC1hY2NvcmRpb24tcGFuZWwsIC50YWItcGFuZScpLmlzb2xhdGVTY29wZSgpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSovXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHByZXBhcmVzIGFuZCBjb25maWd1cmVzIHRoZSBjaGFydCBwcm9wZXJ0aWVzXG4gICAgY29uZmlndXJlQ2hhcnQoKSB7XG4gICAgICAgIC8vIENvcHkgdGhlIGRhdGEgb25seSBpbiBjYXNlIG9mIHBpZSBjaGFydCB3aXRoIGRlZmF1bHQgZGF0YVxuICAgICAgICAvLyBSZWFzb24gOiB3aGVuIG11bHRpcGxlIHBpZSBjaGFydHMgYXJlIGJvdW5kIHRvIHNhbWUgZGF0YSwgZmlyc3QgY2hhcnQgdGhlbWUgd2lsbCBiZSBhcHBsaWVkIHRvIGFsbCBjaGFydHNcbiAgICAgICAgbGV0IHhEb21haW5WYWx1ZXM7XG4gICAgICAgIGxldCB5RG9tYWluVmFsdWVzO1xuICAgICAgICBsZXQgY2hhcnQ7XG4gICAgICAgIGxldCBiZWZvcmVSZW5kZXJWYWw7XG4gICAgICAgIGNvbnN0IHlmb3JtYXRPcHRpb25zOiBhbnkgPSB7fTtcblxuICAgICAgICBpZiAodGhpcy5fcHJvY2Vzc2VkRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoaXNBeGlzRG9tYWluVmFsaWQodGhpcywgJ3gnKSkge1xuICAgICAgICAgICAgICAgIHhEb21haW5WYWx1ZXMgPSB0aGlzLmJpbmRkYXRhc2V0ID8gdGhpcy5nZXRYTWluTWF4VmFsdWVzKHRoaXMuX3Byb2Nlc3NlZERhdGFbMF0pIDogeyAnbWluJyA6IHsneCc6IDF9LCAgJ21heCcgOiB7J3gnIDogNX19O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzQXhpc0RvbWFpblZhbGlkKHRoaXMsICd5JykpIHtcbiAgICAgICAgICAgICAgICB5RG9tYWluVmFsdWVzID0gdGhpcy5iaW5kZGF0YXNldCA/IHRoaXMuZ2V0WU1pbk1heFZhbHVlcyh0aGlzLl9wcm9jZXNzZWREYXRhKSA6IHsgJ21pbicgOiB7J3knIDogMX0sICdtYXgnIDogeyd5JyA6IDV9fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1BpZVR5cGUodGhpcy50eXBlKSAmJiAoIXRoaXMuYmluZGRhdGFzZXQgfHwgIXRoaXMuc2NvcGVkYXRhc2V0KSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc2VkRGF0YSA9IGdldENsb25lZE9iamVjdCh0aGlzLnNjb3BlZGF0YXNldCB8fCB0aGlzLl9wcm9jZXNzZWREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGdldCB0aGUgY2hhcnQgb2JqZWN0XG4gICAgICAgIGNoYXJ0ID0gaW5pdENoYXJ0KHRoaXMsIHhEb21haW5WYWx1ZXMsIHlEb21haW5WYWx1ZXMsIG51bGwsICF0aGlzLmJpbmRkYXRhc2V0KTtcblxuICAgICAgICBpZiAoXy5pc0FycmF5KHRoaXMuX3Byb2Nlc3NlZERhdGEpKSB7XG4gICAgICAgICAgICAvLyBXTVMtMTk0OTk6ICBUbyByZW1vdmUgY2hhcnQgWC1heGlzIG9sZCB0aWNrcyB3aGVuIGNoYXJ0IGRhdGEgbG9hZGVkIGR5bmFtaWNhbGx5LlxuICAgICAgICAgICAgY29uc3Qgb2xkZ1RpY2tzID0gICQoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKS5maW5kKCdnLm52LXgnKS5maW5kKCdnLnRpY2snKTtcbiAgICAgICAgICAgIGlmIChvbGRnVGlja3MgJiYgb2xkZ1RpY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG9sZGdUaWNrcy5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJlZm9yZVJlbmRlclZhbCA9IHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlcmVuZGVyJywgeyAnY2hhcnRJbnN0YW5jZScgOiBjaGFydH0pO1xuICAgICAgICAgICAgaWYgKGJlZm9yZVJlbmRlclZhbCkge1xuICAgICAgICAgICAgICAgIGNoYXJ0ID0gYmVmb3JlUmVuZGVyVmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jaGFydCA9IGNoYXJ0O1xuICAgICAgICAgICAgLy8gY2hhbmdpbmcgdGhlIGRlZmF1bHQgbm8gZGF0YSBtZXNzYWdlXG4gICAgICAgICAgICBkMy5zZWxlY3QoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKVxuICAgICAgICAgICAgICAgIC5kYXR1bSh0aGlzLl9wcm9jZXNzZWREYXRhKVxuICAgICAgICAgICAgICAgIC5jYWxsKHRoaXMuY2hhcnQpO1xuICAgICAgICAgICAgdGhpcy5wb3N0UGxvdFByb2Nlc3MoY2hhcnQpO1xuICAgICAgICAgICAgcmV0dXJuIGNoYXJ0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUGxvdHRpbmcgdGhlIGNoYXJ0IHdpdGggc2V0IG9mIHRoZSBwcm9wZXJ0aWVzIHNldCB0byBpdFxuICAgIHBsb3RDaGFydCgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuJGVsZW1lbnQ7XG4gICAgICAgIC8vIGNhbGwgdXNlci10cmFuc2Zvcm1lZCBmdW5jdGlvblxuICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9ICh0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3RyYW5zZm9ybScpKSB8fCB0aGlzLmNoYXJ0RGF0YTtcblxuICAgICAgICAvLyBHZXR0aW5nIHRoZSBvcmRlciBieSBkYXRhIG9ubHkgaW4gcnVuIG1vZGUuIFRoZSBvcmRlciBieSBhcHBsaWVzIGZvciBhbGwgdGhlIGNoYXJ0cyBvdGhlciB0aGFuIHBpZSBhbmQgZG9udXQgY2hhcnRzXG4gICAgICAgIGlmICh0aGlzLmlzVmlzdWFsbHlHcm91cGVkICYmICFpc1BpZVR5cGUodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc2VkRGF0YSA9IHRoaXMuY2hhcnREYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc2VkRGF0YSA9IHRoaXMucHJvY2Vzc0NoYXJ0RGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNraW5nIHRoZSBwYXJlbnQgY29udGFpbmVyIGJlZm9yZSBwbG90dGluZyB0aGUgY2hhcnRcbiAgICAgICAgaWYgKCFlbGVtZW50WzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNsZWFyQ2FudmFzKSB7XG4gICAgICAgICAgICAvLyBlbXB0eSBzdmcgdG8gYWRkLW5ldyBjaGFydFxuICAgICAgICAgICAgZWxlbWVudC5maW5kKCdzdmcnKS5yZXBsYWNlV2l0aCgnPHN2Zz48L3N2Zz4nKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDYW52YXMgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluIGNhc2Ugb2YgaW52YWxpZCBheGlzIHNob3cgbm8gZGF0YSBhdmFpbGFibGUgbWVzc2FnZVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZEF4aXMoKSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc2VkRGF0YSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIG52LmFkZEdyYXBoKCgpID0+IHRoaXMuY29uZmlndXJlQ2hhcnQoKSwgICgpID0+IHtcbiAgICAgICAgICAgIC8qQnViYmxlIGNoYXJ0IGhhcyBhbiB0aW1lIG91dCBkZWxheSBvZiAzMDBtcyBpbiB0aGVpciBpbXBsZW1lbnRhdGlvbiBkdWUgdG8gd2hpY2ggd2VcbiAgICAgICAgICAgICogd29uJ3QgYmUgZ2V0dGluZyByZXF1aXJlZCBkYXRhIHBvaW50cyBvbiBhdHRhY2hpbmcgZXZlbnRzXG4gICAgICAgICAgICAqIGhlbmNlIGRlbGF5aW5nIGl0IDYwMG1zKi9cbiAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaENsaWNrRXZlbnQoKTtcbiAgICAgICAgICAgIH0sIDYwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlzTG9hZEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICB9XG4gICAgLy8gVE9ETzogTmVlZCB3YXkgdG8gZmlndXJlIG91dCBpZiB0aGUgZGF0YXNvdXJjZSBpcyBhIGxpdmUgc291cmNlXG4gICAgZ2V0IGlzTGl2ZVZhcmlhYmxlKCkge1xuICAgICAgICAvLyBzZXR0aW5nIHRoZSBmbGFnIGZvciB0aGUgbGl2ZSB2YXJpYWJsZSBpbiB0aGUgc2NvcGUgZm9yIHRoZSBjaGVja3NcbiAgICAgICAgY29uc3QgdmFyaWFibGVPYmogPSB0aGlzLmRhdGFzb3VyY2U7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZU9iaiAmJiB2YXJpYWJsZU9iai5jYXRlZ29yeSA9PT0gJ3dtLkxpdmVWYXJpYWJsZSc7XG4gICAgfVxuXG4gICAgcGxvdENoYXJ0UHJveHkoKSB7XG4gICAgICAgIHRoaXMuc2hvd0NvbnRlbnRMb2FkRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnZhbGlkQ29uZmlnID0gZmFsc2U7XG4gICAgICAgIC8vIENoZWNraW5nIGlmIHggYW5kIHkgYXhpcyBhcmUgY2hvc2VuXG4gICAgICAgIHRoaXMuaXNMb2FkSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGdyb3VwaW5nRGV0YWlscyA9IHRoaXMuZ2V0R3JvdXBpbmdEZXRhaWxzKCk7XG4gICAgICAgIC8vIElmIGFnZ3JlZ2F0aW9uL2dyb3VwIGJ5L29yZGVyIGJ5IHByb3BlcnRpZXMgaGF2ZSBiZWVuIHNldCwgdGhlbiBnZXQgdGhlIGFnZ3JlZ2F0ZWQgZGF0YSBhbmQgcGxvdCB0aGUgcmVzdWx0IGluIHRoZSBjaGFydC5cbiAgICAgICAgLy8gVE9ETzogZGF0YXNvdXJjZSBmb3IgbGl2ZSB2YXJpYWJsZSBkZXRlY3Rpb25cbiAgICAgICAgaWYgKHRoaXMuYmluZGRhdGFzZXQgJiYgdGhpcy5pc0xpdmVWYXJpYWJsZSAmJiAodGhpcy5maWx0ZXJGaWVsZHMgfHwgdGhpcy5pc0RhdGFGaWx0ZXJpbmdFbmFibGVkKCkpKSB7XG4gICAgICAgICAgICB0aGlzLmdldEFnZ3JlZ2F0ZWREYXRhKCgpID0+IHRoaXMucGxvdENoYXJ0KCkpO1xuICAgICAgICB9IGVsc2UgeyAvLyBFbHNlLCBzaW1wbHkgcGxvdCB0aGUgY2hhcnQuXG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGxpdmUgdmFyaWFibGUgcmVzZXR0aW5nIHRoZSBhZ2dyZWdhdGVkIGRhdGEgdG8gdGhlIG5vcm1hbCBkYXRhc2V0IHdoZW4gdGhlIGFnZ3JlZ2F0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFzZXQgJiYgdGhpcy5pc0xpdmVWYXJpYWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhID0gdGhpcy5kYXRhc2V0O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzR3JvdXBCeUVuYWJsZWQoKSAmJiBncm91cGluZ0RldGFpbHMuaXNWaXN1YWxseUdyb3VwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydERhdGEgPSB0aGlzLmdldFZpc3VhbGx5R3JvdXBlZERhdGEodGhpcy5jaGFydERhdGEsIGdyb3VwaW5nRGV0YWlscy52aXN1YWxHcm91cGluZ0NvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBsb3RDaGFydCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0cyB0aGUgZGVmYXVsdCB4IGFuZCB5IGF4aXMgb3B0aW9uc1xuICAgIHNldERlZmF1bHRBeGlzT3B0aW9ucygpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdENvbHVtbnMgPSB0aGlzLmdldERlZmF1bHRDb2x1bW5zKCk7XG4gICAgICAgIC8vIElmIHdlIGdldCB0aGUgdmFsaWQgZGVmYXVsdCBjb2x1bW5zIHRoZW4gYXNzaWduIHRoZW0gYXMgdGhlIHggYW5kIHkgYXhpc1xuICAgICAgICAvLyBJbiBjYXNlIG9mIHNlcnZpY2UgdmFyaWFibGUgd2UgbWF5IG5vdCBnZXQgdGhlIHZhbGlkIGNvbHVtbnMgYmVjYXVzZSB3ZSBjYW5ub3Qga25vdyB0aGUgZGF0YXR5cGVzXG4gICAgICAgIHRoaXMueGF4aXNkYXRha2V5ID0gZGVmYXVsdENvbHVtbnNbMF0gfHwgbnVsbDtcbiAgICAgICAgdGhpcy55YXhpc2RhdGFrZXkgPSBkZWZhdWx0Q29sdW1uc1sxXSB8fCBudWxsO1xuICAgIH1cblxuICAgIGdldEN1dG9taXplZE9wdGlvbnMocHJvcCwgZmllbGRzKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwQnlDb2x1bW5zID0gXy5zcGxpdCh0aGlzLmdyb3VwYnksICcsJyksXG4gICAgICAgICAgICBhZ2dDb2x1bW5zID0gXy5zcGxpdCh0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uLCAnLCcpO1xuICAgICAgICBpZiAoIXRoaXMuYmluZGRhdGFzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmF4aXNvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmF4aXNvcHRpb25zID0gZmllbGRzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuZXdPcHRpb25zO1xuICAgICAgICBzd2l0Y2ggKHByb3ApIHtcbiAgICAgICAgICAgIGNhc2UgJ3hheGlzZGF0YWtleSc6XG4gICAgICAgICAgICAgICAgLy8gSWYgZ3JvdXAgYnkgZW5hYmxlZCwgY29sdW1ucyBjaG9zZW4gaW4gZ3JvdXBieSB3aWxsIGJlIHBvcHVsYXRlZCBpbiB4IGF4aXMgb3B0aW9uc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzR3JvdXBCeUVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gZ3JvdXBCeUNvbHVtbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneWF4aXNkYXRha2V5JzpcbiAgICAgICAgICAgICAgICAvLyBJZiBhZ2dyZWdhdGlvbiBieSBlbmFibGVkLCBjb2x1bW5zIGNob3NlbiBpbiBhZ2dyZWdhdGlvbiB3aWxsIGJlIHBvcHVsYXRlZCBpbiB5IGF4aXMgb3B0aW9uc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IGFnZ0NvbHVtbnM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTGl2ZVZhcmlhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgbGl2ZSB2YXJpYWJsZSBwb3B1bGF0aW5nIG9ubHkgbnVtZXJpYyBjb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSB0aGlzLm51bWVyaWNDb2x1bW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwYnknOlxuICAgICAgICAgICAgICAgIC8vIEZpbHRlcmluZyBvbmx5IG5vbiBwcmltYXJ5IGtleSBjb2x1bW5zXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXZlVmFyaWFibGUgJiYgdGhpcy5ub25QcmltYXJ5Q29sdW1ucyAmJiB0aGlzLm5vblByaW1hcnlDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gdGhpcy5ub25QcmltYXJ5Q29sdW1ucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhZ2dyZWdhdGlvbmNvbHVtbic6XG4gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSAnYWdncmVnYXRpb25Db2x1bW4nIHRvIHNob3cgYWxsIGtleXMgaW4gY2FzZSBvZiBhZ2dyZWdhdGlvbiBmdW5jdGlvbiBpcyBjb3VudCBvciB0byBudW1lcmljIGtleXMgaW4gYWxsIG90aGVyIGNhc2VzLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGl2ZVZhcmlhYmxlICYmIHRoaXMuaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSAmJiB0aGlzLmFnZ3JlZ2F0aW9uICE9PSAnY291bnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSB0aGlzLm51bWVyaWNDb2x1bW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29yZGVyYnknOlxuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgJ2FnZ3JlZ2F0aW9uQ29sdW1uJyB0byBzaG93IGFsbCBrZXlzIGluIGNhc2Ugb2YgYWdncmVnYXRpb24gZnVuY3Rpb24gaXMgY291bnQgb3IgdG8gbnVtZXJpYyBrZXlzIGluIGFsbCBvdGhlciBjYXNlcy5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xpdmVWYXJpYWJsZSAmJiB0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IF8udW5pcShfLmNvbmNhdChncm91cEJ5Q29sdW1ucywgYWdnQ29sdW1ucykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2J1YmJsZXNpemUnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm51bWVyaWNDb2x1bW5zICYmIHRoaXMubnVtZXJpY0NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSB0aGlzLm51bWVyaWNDb2x1bW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdPcHRpb25zIHx8IGZpZWxkcyB8fCB0aGlzLmF4aXNvcHRpb25zO1xuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCBhbGwgdGhlIGNvbHVtbnMgYW5kIHRoZW4gZmV0Y2hpbmcgdGhlIG51bWVyaWMgYW5kIG5vbiBwcmltYXJ5IGNvbHVtbnMgYW1vbmcgdGhlbVxuICAgIHNldE51bWVyaWNhbmROb25QcmltYXJ5Q29sdW1ucygpIHtcbiAgICAgICAgbGV0IGNvbHVtbnMsXG4gICAgICAgICAgICB0eXBlO1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzTWFwID0gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1BST1BFUlRJRVNfTUFQKTtcbiAgICAgICAgdGhpcy5udW1lcmljQ29sdW1ucyA9IFtdO1xuICAgICAgICB0aGlzLm5vblByaW1hcnlDb2x1bW5zID0gW107XG4gICAgICAgIC8vIEZldGNoaW5nIGFsbCB0aGUgY29sdW1uc1xuICAgICAgICBpZiAodGhpcy5kYXRhc2V0ICYmICFfLmlzRW1wdHkocHJvcGVydGllc01hcCkpIHtcbiAgICAgICAgICAgIGNvbHVtbnMgPSBbXTsgLy8gVE9ETzogZmV0Y2hQcm9wZXJ0aWVzTWFwQ29sdW1ucyhwcm9wZXJ0aWVzTWFwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRpbmcgdGhyb3VnaCBhbGwgdGhlIGNvbHVtbnMgYW5kIGZldGNoaW5nIHRoZSBudW1lcmljIGFuZCBub24gcHJpbWFyeSBrZXkgY29sdW1uc1xuICAgICAgICAgICAgXy5mb3JFYWNoKE9iamVjdC5rZXlzKGNvbHVtbnMpLCAoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgdHlwZSA9IGNvbHVtbnNba2V5XS50eXBlO1xuICAgICAgICAgICAgICAgIGlmIChpc051bWJlclR5cGUodHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1lcmljQ29sdW1ucy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEhpZGluZyBvbmx5IHRhYmxlJ3MgcHJpbWFyeSBrZXlcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uc1trZXldLmlzUmVsYXRlZFBrID09PSAndHJ1ZScgfHwgIWNvbHVtbnNba2V5XS5pc1ByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub25QcmltYXJ5Q29sdW1ucy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm51bWVyaWNDb2x1bW5zID0gdGhpcy5udW1lcmljQ29sdW1ucy5zb3J0KCk7XG4gICAgICAgICAgICB0aGlzLm5vblByaW1hcnlDb2x1bW5zID0gdGhpcy5ub25QcmltYXJ5Q29sdW1ucy5zb3J0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBwbG90IHRoZSBjaGFydFxuICAgIGhhbmRsZURhdGFTZXQobmV3VmFsKSB7XG4gICAgICAgIHRoaXMuZXJyTXNnID0gJyc7XG4gICAgICAgIC8vIFJlc2V0dGluZyB0aGUgZmxhZyB0byBmYWxzZSB3aGVuIHRoZSBiaW5kaW5nIHdhcyByZW1vdmVkXG4gICAgICAgIGlmICghbmV3VmFsICYmICF0aGlzLmJpbmRkYXRhc2V0KSB7XG4gICAgICAgICAgICB0aGlzLmlzVmlzdWFsbHlHcm91cGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmF4aXNvcHRpb25zID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxpdmVWYXJpYWJsZXMgY29udGFpbiBkYXRhIGluICdkYXRhJyBwcm9wZXJ0eScgb2YgdGhlIHZhcmlhYmxlXG4gICAgICAgIHRoaXMuY2hhcnREYXRhID0gdGhpcy5pc0xpdmVWYXJpYWJsZSA/IG5ld1ZhbCB8fCAnJyA6IChuZXdWYWwgJiYgbmV3VmFsLmRhdGFWYWx1ZSA9PT0gJycgJiYgXy5rZXlzKG5ld1ZhbCkubGVuZ3RoID09PSAxKSA/ICcnIDogbmV3VmFsO1xuXG4gICAgICAgIC8vIGlmIHRoZSBkYXRhIHJldHVybmVkIGlzIGFuIG9iamVjdCBtYWtlIGl0IGFuIGFycmF5IG9mIG9iamVjdFxuICAgICAgICBpZiAoIV8uaXNBcnJheSh0aGlzLmNoYXJ0RGF0YSkgJiYgXy5pc09iamVjdCh0aGlzLmNoYXJ0RGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhID0gW3RoaXMuY2hhcnREYXRhXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdWYWwgJiYgbmV3VmFsLmZpbHRlckZpZWxkcykge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJGaWVsZHMgPSBuZXdWYWwuZmlsdGVyRmllbGRzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGxvdGNoYXJ0IGZvciBvbmx5IHZhbGlkIGRhdGEgYW5kIG9ubHkgYWZ0ZXIgYm91bmQgdmFyaWFibGUgcmV0dXJucyBkYXRhXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YSkge1xuICAgICAgICAgICAgdGhpcy5fcGxvdENoYXJ0UHJveHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9wbG90Q2hhcnRQcm94eSA9IF8uZGVib3VuY2UodGhpcy5wbG90Q2hhcnRQcm94eS5iaW5kKHRoaXMpLCAxMDApO1xuXG4gICAgLy8gc2V0cyB0aGUgY2VudGVyIGxhYmVsIGZvciBkb251dCBjaGFydCB0eXBlXG4gICAgc2V0RG9udXRDZW50ZXJMYWJlbChsYWJlbFZhbHVlKSB7XG4gICAgICAgIGxldCBjaGFydFN2ZywgcGllR3JvdXBzO1xuICAgICAgICBjaGFydFN2ZyA9IGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpO1xuXG4gICAgICAgIHBpZUdyb3VwcyA9IGNoYXJ0U3ZnLnNlbGVjdCgnLm52LXdyYXAubnYtcGllJykuc2VsZWN0KCcubnYtcGllJyk7XG4gICAgICAgIHBpZUdyb3Vwcy50ZXh0KCcnKTtcbiAgICAgICAgcGllR3JvdXBzLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgICAuYXR0cignZHknLCAnLjM1ZW0nKVxuICAgICAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbnYtcGllLXRpdGxlJylcbiAgICAgICAgICAgIC50ZXh0KGxhYmVsVmFsdWUpXG4gICAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHZhciBkM3RleHQgPSBkMy5zZWxlY3QodGhpcyksXG4gICAgICAgICAgICAgICAgY2lyYyA9IGQzLnNlbGVjdCh0aGlzLnBhcmVudEVsZW1lbnQpLFxuICAgICAgICAgICAgICAgIHRvdGFsV2lkdGggPSBOdW1iZXIoY2lyYy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpLFxuICAgICAgICAgICAgICAgIC8vIG1pbnVzIHRoZSByaW5nIHdpZHRoIGZyb20gdG90YWwgd2lkdGhcbiAgICAgICAgICAgICAgICBhdmFpbFdpZHRoID0gdG90YWxXaWR0aCAtIDMwLFxuICAgICAgICAgICAgICAgIHRleHRXaWR0aCA9IHRoaXMuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk7XG4gICAgICAgICAgICAgICAgZDN0ZXh0LmF0dHIoXCJkYXRhLXNjYWxlXCIsIGF2YWlsV2lkdGggLyB0ZXh0V2lkdGgpO1xuICAgICAgICAgICAgICB9KS5zdHlsZShcImZvbnQtc2l6ZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAvLyAxNiBpcyB0aGUgZGVmYXVsdCBmb250IHNpemUgdG8gbXVsdGlwbHkgd2l0aCB0aGUgc2NhbGVkIHZhbHVlIGFuZCAyNCBpcyB0aGUgbWF4aW11bSBmb250IHNpemUgdGhhdCBjYW4gYmUgYXBwbGllZFxuICAgICAgICAgICAgICAgIHZhciBmb250U2l6ZSA9IDE2ICogZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJkYXRhLXNjYWxlXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmb250U2l6ZSA+IDI0ID8gMjQgOiBmb250U2l6ZSArIFwicHhcIjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG5ld1ZhbCwgb2xkVmFsPykge1xuICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbmV3VmFsLCBvbGRWYWwpO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnZGF0YXNldCc6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVEYXRhU2V0KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjZW50ZXJsYWJlbCc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydC50aXRsZShuZXdWYWwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERvbnV0Q2VudGVyTGFiZWwobmV3VmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0eXBlJzpcbiAgICAgICAgICAgICAgICAvLyBCYXNlZCBvbiB0aGUgY2hhbmdlIGluIHR5cGUgZGVjaWRpbmcgdGhlIGRlZmF1bHQgbWFyZ2luc1xuICAgICAgICAgICAgICAgIGlmIChpc1BpZVR5cGUodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldHRvcCA9IDIwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldHJpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRib3R0b20gPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldGxlZnQgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2xkVmFsID09PSAnUGllJyB8fCBvbGRWYWwgPT09ICdEb251dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXR0b3AgPSAyNTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRyaWdodCA9IDI1O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldGJvdHRvbSA9IDU1O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldGxlZnQgPSA3NTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAob2xkVmFsICE9PSBuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckNhbnZhcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEluIHN0dWRpbyBtb2RlLCBjb25maWd1cmUgcHJvcGVydGllcyBkZXBlbmRlbnQgb24gY2hhcnQgdHlwZVxuICAgICAgICAgICAgICAgIHRoaXMuX3Bsb3RDaGFydFByb3h5KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIC8vIEluIFJ1bk1vZGUsIHRoZSBwbG90Y2hhcnQgbWV0aG9kIHdpbGwgbm90IGJlIGNhbGxlZCBmb3IgYWxsIHByb3BlcnR5IGNoYW5nZVxuICAgICAgICAgICAgICAgIHRoaXMuX3Bsb3RDaGFydFByb3h5KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaW5jbHVkZXMoYWR2YW5jZURhdGFQcm9wcywga2V5KSkge1xuICAgICAgICAgICAgdGhpcy5fcGxvdENoYXJ0UHJveHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUxvYWRpbmcoZGF0YSkge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy5kYXRhc291cmNlO1xuICAgICAgICBpZiAoZGF0YVNvdXJjZSAmJiBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFKSAmJiBpc0RhdGFTb3VyY2VFcXVhbChkYXRhLnZhcmlhYmxlLCBkYXRhU291cmNlKSkge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZGF0YS5hY3RpdmU7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZEluUHJvZ3Jlc3MgPSBkYXRhLmFjdGl2ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhpZGVUb29sdGlwKCkge1xuICAgICAgICBkMy5zZWxlY3RBbGwoJy5udnRvb2x0aXAnKS5zdHlsZSgnb3BhY2l0eScsIDApO1xuICAgIH1cblxuICAgIG9uU3R5bGVDaGFuZ2Uoa2V5LCBuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgICBjb25zdCBzdHlsZU9iaiA9IHt9O1xuICAgICAgICBzdXBlci5vblN0eWxlQ2hhbmdlKGtleSwgbmV3VmFsLCBvbGRWYWwpO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnZm9udHNpemUnOlxuICAgICAgICAgICAgY2FzZSAnZm9udHVuaXQnOlxuICAgICAgICAgICAgY2FzZSAnY29sb3InOlxuICAgICAgICAgICAgY2FzZSAnZm9udGZhbWlseSc6XG4gICAgICAgICAgICBjYXNlICdmb250d2VpZ2h0JzpcbiAgICAgICAgICAgIGNhc2UgJ2ZvbnRzdHlsZSc6XG4gICAgICAgICAgICBjYXNlICd0ZXh0ZGVjb3JhdGlvbic6XG4gICAgICAgICAgICAgICAgc3R5bGVPYmpbc3R5bGVQcm9wc1trZXldXSA9IChrZXkgPT09ICdmb250c2l6ZScgfHwga2V5ID09PSAnZm9udHVuaXQnKSA/IHRoaXMuZm9udHNpemUgKyB0aGlzLmZvbnR1bml0IDogbmV3VmFsO1xuICAgICAgICAgICAgICAgIHNldFRleHRTdHlsZShzdHlsZU9iaiwgdGhpcy4kaWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoaW5qOiBJbmplY3RvciwgcHJpdmF0ZSBhcHA6IEFwcCkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLCBBUFBMWV9TVFlMRVNfVFlQRS5DT05UQUlORVIsIFsnZm9udHNpemUnLCAnZm9udHVuaXQnLCAnY29sb3InLCAnZm9udGZhbWlseScsICdmb250d2VpZ2h0JywgJ2ZvbnRzdHlsZScsICd0ZXh0ZGVjb3JhdGlvbiddKTtcblxuICAgICAgICAvLyBnZW5lcmF0ZSB1bmlxdWUgaWQgZm9yIHRoZSBjb21wb25lbnRcbiAgICAgICAgdGhpcy4kaWQgPSB0aGlzLndpZGdldElkIHx8IE1hdGgucmFuZG9tKCk7XG4gICAgICAgIC8vIHJlbW92ZSB0aXRsZSBhdHRyaWJ1dGUgYXMgdGhlIGVsZW1lbnQgb24gaG92ZXIgc2hvd3MgeW91IHRoZSBoaW50IHRocm91Z2gtb3V0IHRoZSBlbGVtZW50XG4gICAgICAgIHJlbW92ZUF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAndGl0bGUnKTtcbiAgICAgICAgdGhpcy5jaGFydFJlYWR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYmluZGRhdGFzZXQgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhc2V0LmJpbmQnKTtcbiAgICAgICAgLy8gU2hvdyBsb2FkaW5nIHN0YXR1cyBiYXNlZCBvbiB0aGUgdmFyaWFibGUgbGlmZSBjeWNsZVxuICAgICAgICB0aGlzLl9zdWJzY2lwdGlvbnMucHVzaCh0aGlzLmFwcC5zdWJzY3JpYmUoJ3RvZ2dsZS12YXJpYWJsZS1zdGF0ZScsIHRoaXMuaGFuZGxlTG9hZGluZy5iaW5kKHRoaXMpKSk7XG4gICAgICAgIC8vIFdpbGwgaGlkZSB0b2xsdGlwIG9mIGEgY2hhcnQgaW4gbW9iaWxlIHdoZW4gdGhlIHVzZXIgc2Nyb2xscy5cbiAgICAgICAgdGhpcy5fc3Vic2NpcHRpb25zLnB1c2godGhpcy5hcHAuc3Vic2NyaWJlKCdpc2Nyb2xsLXN0YXJ0JywgKCkgPT4ge3RoaXMuaGlkZVRvb2x0aXAoKTt9KSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgLy8gRm9yIG9sZCBwcm9qZWN0c1xuICAgICAgICBpZiAoIV8uaW5jbHVkZXMoWydvdXRzaWRlJywgJ2luc2lkZScsICdoaWRlJ10sIHRoaXMuc2hvd2xhYmVscykpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd2xhYmVscyAgICAgICAgPSBnZXRCb29sZWFuVmFsdWUodGhpcy5zaG93bGFiZWxzKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd2xhYmVsc291dHNpZGUgPSBnZXRCb29sZWFuVmFsdWUodGhpcy5zaG93bGFiZWxzb3V0c2lkZSk7XG4gICAgICAgICAgICB0aGlzLnNob3dsYWJlbHMgICAgICAgID0gdGhpcy5zaG93bGFiZWxzID8gKHRoaXMuc2hvd2xhYmVsc291dHNpZGUgPyAnb3V0c2lkZScgOiAnaW5zaWRlJykgOiAnaGlkZSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMudGhlbWUpIHtcbiAgICAgICAgICAgIC8vIERlZmF1bHQgdGhlbWUgZm9yIHBpZS9kb251dCBpcyBBenVyZSBhbmQgZm9yIG90aGVyIGl0IGlzIFRlcnJlc3RyaWFsXG4gICAgICAgICAgICB0aGlzLnRoZW1lID0gaXNQaWVUeXBlKHRoaXMudHlwZSkgPyAnQXp1cmUnIDogJ1RlcnJlc3RyaWFsJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3dtQ2hhcnQnICsgdGhpcy4kaWQpO1xuICAgICAgICAvLyBXaGVuIHRoZXJlIGlzIG5vdCB2YWx1ZSBiaW5kaW5nLCB0aGVuIHBsb3QgdGhlIGNoYXJ0IHdpdGggc2FtcGxlIGRhdGFcbiAgICAgICAgaWYgKCF0aGlzLmJpbmRkYXRhc2V0ICYmICF0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzY29wZWRhdGFzZXQnKSkge1xuICAgICAgICAgICAgdGhpcy5fcGxvdENoYXJ0UHJveHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvLyBkZXN0cm95IGFsbCBzdWJzY3JpcHRpb25zIHRvIHByZXZlbnQgbWVtb3J5IGxlYWsuXG4gICAgICAgIHRoaXMuaGlkZVRvb2x0aXAoKTtcbiAgICAgICAgdGhpcy5fc3Vic2NpcHRpb25zLmZvckVhY2goKHN1YnNjcmlwdGlvbik9PntcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG4gICAgcmVkcmF3ID0gdGhpcy5fcGxvdENoYXJ0UHJveHkuYmluZCh0aGlzKTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCIgKm5nSWY9XCJ0aXRsZVwiPlxuICAgIDxoMyBjbGFzcz1cInBhbmVsLXRpdGxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj48aSBjbGFzcz1cImFwcC1pY29uIHBhbmVsLWljb24ge3tpY29uY2xhc3N9fVwiIFtjbGFzcy5uZy1oaWRlXT1cIiFpY29uY2xhc3NcIj48L2k+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCIgW2lubmVySFRNTF09XCJ0aXRsZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIiAqbmdJZj1cInN1YmhlYWRpbmdcIiBbaW5uZXJIVE1MXT1cInN1YmhlYWRpbmdcIj48L2Rpdj5cbiAgICA8L2gzPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiYXBwLWNoYXJ0LWlubmVyXCIgW25nQ2xhc3NdPVwieydsb2FkaW5nJzppc0xvYWRJblByb2dyZXNzLCAncGFuZWwtYm9keSc6IHRpdGxlfVwiPlxuICAgIDxzdmc+PC9zdmc+XG4gICAgPGRpdiBjbGFzcz1cIndtLWNvbnRlbnQtaW5mbyByZWFkb25seS13cmFwcGVyXCIgKm5nSWY9XCJzaG93Q29udGVudExvYWRFcnJvciAmJiBzaG93Tm9EYXRhTXNnXCI+XG4gICAgICAgIDxwIGNsYXNzPVwid20tbWVzc2FnZVwiIFt0aXRsZV09XCJoaW50TXNnXCIgW25nQ2xhc3NdPVwieydlcnJvcic6IGludmFsaWRDb25maWd9XCIgW2lubmVyVGV4dF09XCJlcnJNc2dcIj48L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB3bVNwaW5uZXIgc2hvdy5iaW5kPVwiaXNMb2FkSW5Qcm9ncmVzc1wiIGNhcHRpb24uYmluZD1cImxvYWRpbmdkYXRhbXNnXCI+PC9kaXY+XG48L2Rpdj5cbiJdfQ==