primeng 18.0.0-beta.1 → 18.0.0-beta.3

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 (783) hide show
  1. package/README.md +1 -1
  2. package/accordion/accordion.d.ts +148 -23
  3. package/accordion/public_api.d.ts +1 -1
  4. package/accordion/style/accordionstyle.d.ts +37 -0
  5. package/api/translation.d.ts +2 -0
  6. package/autocomplete/autocomplete.d.ts +2 -3
  7. package/autocomplete/public_api.d.ts +1 -0
  8. package/autocomplete/style/autocompletestyle.d.ts +69 -0
  9. package/avatar/public_api.d.ts +1 -0
  10. package/avatar/style/avatarstyle.d.ts +25 -0
  11. package/avatargroup/avatargroup.d.ts +1 -1
  12. package/avatargroup/public_api.d.ts +1 -0
  13. package/avatargroup/style/avatargroupstyle.d.ts +14 -0
  14. package/badge/badge.d.ts +20 -26
  15. package/badge/public_api.d.ts +1 -0
  16. package/badge/style/badgestyle.d.ts +17 -0
  17. package/base/style/basestyle.d.ts +8 -0
  18. package/blockui/blockui.d.ts +1 -1
  19. package/blockui/public_api.d.ts +1 -0
  20. package/blockui/style/blockuistyle.d.ts +17 -0
  21. package/breadcrumb/breadcrumb.d.ts +0 -1
  22. package/breadcrumb/public_api.d.ts +1 -0
  23. package/breadcrumb/style/breadcrumbstyle.d.ts +45 -0
  24. package/button/button.d.ts +0 -1
  25. package/button/public_api.d.ts +1 -0
  26. package/button/style/buttonstyle.d.ts +29 -0
  27. package/buttongroup/buttongroup.d.ts +1 -1
  28. package/buttongroup/public_api.d.ts +1 -0
  29. package/buttongroup/style/buttongroupstyle.d.ts +17 -0
  30. package/calendar/public_api.d.ts +1 -0
  31. package/card/public_api.d.ts +1 -0
  32. package/card/style/cardstyle.d.ts +45 -0
  33. package/carousel/public_api.d.ts +1 -0
  34. package/carousel/style/carouselstyle.d.ts +69 -0
  35. package/cascadeselect/cascadeselect.d.ts +2 -2
  36. package/cascadeselect/public_api.d.ts +1 -0
  37. package/cascadeselect/style/cascadeselectstyle.d.ts +65 -0
  38. package/chart/public_api.d.ts +1 -0
  39. package/chart/style/chartstyle.d.ts +32 -0
  40. package/checkbox/public_api.d.ts +1 -0
  41. package/checkbox/style/checkboxstyle.d.ts +29 -0
  42. package/chip/public_api.d.ts +1 -0
  43. package/chip/style/chipstyle.d.ts +33 -0
  44. package/colorpicker/colorpicker.d.ts +1 -1
  45. package/colorpicker/public_api.d.ts +1 -0
  46. package/colorpicker/style/colorpickerstyle.d.ts +45 -0
  47. package/confirmdialog/confirmdialog.d.ts +1 -1
  48. package/confirmdialog/public_api.d.ts +1 -0
  49. package/confirmdialog/style/confirmdialogstyle.d.ts +33 -0
  50. package/confirmpopup/confirmpopup.d.ts +3 -3
  51. package/confirmpopup/public_api.d.ts +1 -0
  52. package/confirmpopup/style/confirmpopupstyle.d.ts +41 -0
  53. package/contextmenu/contextmenu.d.ts +2 -2
  54. package/contextmenu/public_api.d.ts +1 -0
  55. package/contextmenu/style/contextmenustyle.d.ts +54 -0
  56. package/dataview/dataview.d.ts +1 -1
  57. package/dataview/public_api.d.ts +1 -0
  58. package/dataview/style/dataviewstyle.d.ts +37 -0
  59. package/datepicker/datepicker.d.ts +1 -1
  60. package/datepicker/public_api.d.ts +1 -0
  61. package/datepicker/style/datepickerstyle.d.ts +165 -0
  62. package/dialog/style/dialogstyle.d.ts +49 -0
  63. package/divider/style/dividerstyle.d.ts +21 -0
  64. package/dock/public_api.d.ts +1 -0
  65. package/dock/style/dockstyle.d.ts +41 -0
  66. package/drawer/public_api.d.ts +1 -0
  67. package/drawer/style/drawerstyle.d.ts +37 -0
  68. package/dropdown/public_api.d.ts +1 -0
  69. package/dropdown/style/dropdownstyle.d.ts +14 -0
  70. package/dynamicdialog/dynamicdialog.d.ts +5 -0
  71. package/dynamicdialog/public_api.d.ts +1 -0
  72. package/dynamicdialog/style/dynamicdialogstyle.d.ts +49 -0
  73. package/editor/public_api.d.ts +1 -0
  74. package/editor/style/editorstyle.d.ts +25 -0
  75. package/esm2022/accordion/accordion.mjs +431 -81
  76. package/esm2022/accordion/public_api.mjs +2 -2
  77. package/esm2022/accordion/style/accordionstyle.mjs +39 -2
  78. package/esm2022/api/primengconfig.mjs +3 -1
  79. package/esm2022/api/translation.mjs +1 -1
  80. package/esm2022/autocomplete/autocomplete.mjs +6 -6
  81. package/esm2022/autocomplete/public_api.mjs +2 -1
  82. package/esm2022/autocomplete/style/autocompletestyle.mjs +69 -1
  83. package/esm2022/avatar/avatar.mjs +3 -2
  84. package/esm2022/avatar/public_api.mjs +2 -1
  85. package/esm2022/avatar/style/avatarstyle.mjs +25 -1
  86. package/esm2022/avatargroup/avatargroup.mjs +3 -3
  87. package/esm2022/avatargroup/public_api.mjs +2 -1
  88. package/esm2022/avatargroup/style/avatargroupstyle.mjs +14 -1
  89. package/esm2022/badge/badge.mjs +39 -51
  90. package/esm2022/badge/public_api.mjs +2 -1
  91. package/esm2022/badge/style/badgestyle.mjs +17 -1
  92. package/esm2022/basecomponent/basecomponent.mjs +3 -4
  93. package/esm2022/blockui/blockui.mjs +3 -3
  94. package/esm2022/blockui/public_api.mjs +2 -1
  95. package/esm2022/blockui/style/blockuistyle.mjs +17 -1
  96. package/esm2022/breadcrumb/breadcrumb.mjs +98 -119
  97. package/esm2022/breadcrumb/public_api.mjs +2 -1
  98. package/esm2022/breadcrumb/style/breadcrumbstyle.mjs +45 -1
  99. package/esm2022/button/button.mjs +3 -7
  100. package/esm2022/button/public_api.mjs +2 -1
  101. package/esm2022/button/style/buttonstyle.mjs +29 -1
  102. package/esm2022/buttongroup/buttongroup.mjs +3 -3
  103. package/esm2022/buttongroup/public_api.mjs +2 -1
  104. package/esm2022/buttongroup/style/buttongroupstyle.mjs +17 -1
  105. package/esm2022/calendar/calendar.mjs +2 -2
  106. package/esm2022/calendar/public_api.mjs +2 -1
  107. package/esm2022/card/public_api.mjs +2 -1
  108. package/esm2022/card/style/cardstyle.mjs +45 -1
  109. package/esm2022/carousel/public_api.mjs +2 -1
  110. package/esm2022/carousel/style/carouselstyle.mjs +69 -1
  111. package/esm2022/cascadeselect/cascadeselect.mjs +15 -19
  112. package/esm2022/cascadeselect/public_api.mjs +2 -1
  113. package/esm2022/cascadeselect/style/cascadeselectstyle.mjs +65 -1
  114. package/esm2022/chart/public_api.mjs +2 -1
  115. package/esm2022/chart/style/chartstyle.mjs +36 -0
  116. package/esm2022/checkbox/checkbox.mjs +1 -1
  117. package/esm2022/checkbox/public_api.mjs +2 -1
  118. package/esm2022/checkbox/style/checkboxstyle.mjs +29 -1
  119. package/esm2022/chip/public_api.mjs +2 -1
  120. package/esm2022/chip/style/chipstyle.mjs +33 -1
  121. package/esm2022/colorpicker/colorpicker.mjs +3 -3
  122. package/esm2022/colorpicker/public_api.mjs +2 -1
  123. package/esm2022/colorpicker/style/colorpickerstyle.mjs +45 -1
  124. package/esm2022/confirmdialog/confirmdialog.mjs +3 -3
  125. package/esm2022/confirmdialog/public_api.mjs +2 -1
  126. package/esm2022/confirmdialog/style/confirmdialogstyle.mjs +33 -1
  127. package/esm2022/confirmpopup/confirmpopup.mjs +11 -11
  128. package/esm2022/confirmpopup/public_api.mjs +2 -1
  129. package/esm2022/confirmpopup/style/confirmpopupstyle.mjs +41 -1
  130. package/esm2022/contextmenu/contextmenu.mjs +15 -15
  131. package/esm2022/contextmenu/public_api.mjs +2 -1
  132. package/esm2022/contextmenu/style/contextmenustyle.mjs +54 -1
  133. package/esm2022/dataview/dataview.mjs +3 -3
  134. package/esm2022/dataview/public_api.mjs +2 -1
  135. package/esm2022/dataview/style/dataviewstyle.mjs +37 -1
  136. package/esm2022/datepicker/datepicker.mjs +20 -8
  137. package/esm2022/datepicker/public_api.mjs +2 -1
  138. package/esm2022/datepicker/style/datepickerstyle.mjs +165 -1
  139. package/esm2022/dialog/dialog.mjs +21 -16
  140. package/esm2022/dialog/style/dialogstyle.mjs +49 -1
  141. package/esm2022/divider/divider.mjs +4 -4
  142. package/esm2022/divider/style/dividerstyle.mjs +21 -1
  143. package/esm2022/dock/public_api.mjs +2 -1
  144. package/esm2022/dock/style/dockstyle.mjs +41 -1
  145. package/esm2022/drawer/drawer.mjs +17 -13
  146. package/esm2022/drawer/public_api.mjs +2 -1
  147. package/esm2022/drawer/style/drawerstyle.mjs +37 -1
  148. package/esm2022/dropdown/dropdown.mjs +10 -10
  149. package/esm2022/dropdown/public_api.mjs +2 -1
  150. package/esm2022/dropdown/style/dropdownstyle.mjs +5 -2
  151. package/esm2022/dynamicdialog/dynamicdialog.mjs +94 -24
  152. package/esm2022/dynamicdialog/public_api.mjs +2 -1
  153. package/esm2022/dynamicdialog/style/dynamicdialogstyle.mjs +49 -1
  154. package/esm2022/editor/editor.mjs +6 -5
  155. package/esm2022/editor/public_api.mjs +2 -1
  156. package/esm2022/editor/style/editorstyle.mjs +25 -1
  157. package/esm2022/fieldset/fieldset.mjs +11 -21
  158. package/esm2022/fieldset/public_api.mjs +2 -1
  159. package/esm2022/fieldset/style/fieldsetstyle.mjs +37 -1
  160. package/esm2022/fileupload/fileupload.interface.mjs +1 -1
  161. package/esm2022/fileupload/fileupload.mjs +46 -13
  162. package/esm2022/fileupload/public_api.mjs +2 -1
  163. package/esm2022/fileupload/style/fileuploadstyle.mjs +73 -1
  164. package/esm2022/floatlabel/floatlabel.mjs +18 -13
  165. package/esm2022/floatlabel/public_api.mjs +2 -1
  166. package/esm2022/floatlabel/style/floatlabelstyle.mjs +79 -28
  167. package/esm2022/fluid/public_api.mjs +2 -1
  168. package/esm2022/fluid/style/fluidstyle.mjs +17 -1
  169. package/esm2022/galleria/galleria.mjs +113 -124
  170. package/esm2022/galleria/public_api.mjs +2 -1
  171. package/esm2022/galleria/style/galleriastyle.mjs +125 -1
  172. package/esm2022/iconfield/iconfield.mjs +4 -4
  173. package/esm2022/iconfield/public_api.mjs +2 -1
  174. package/esm2022/iconfield/style/iconfieldstyle.mjs +26 -17
  175. package/esm2022/iftalabel/iftalabel.mjs +43 -0
  176. package/esm2022/iftalabel/primeng-iftalabel.mjs +5 -0
  177. package/esm2022/iftalabel/public_api.mjs +3 -0
  178. package/esm2022/iftalabel/style/iftalabelstyle.mjs +96 -0
  179. package/esm2022/image/image.interface.mjs +1 -1
  180. package/esm2022/image/image.mjs +86 -42
  181. package/esm2022/image/public_api.mjs +2 -1
  182. package/esm2022/image/style/imagestyle.mjs +57 -1
  183. package/esm2022/inplace/inplace.mjs +3 -3
  184. package/esm2022/inplace/public_api.mjs +2 -1
  185. package/esm2022/inplace/style/inplacestyle.mjs +25 -1
  186. package/esm2022/inputgroup/public_api.mjs +2 -1
  187. package/esm2022/inputgroup/style/inputgroupstyle.mjs +46 -17
  188. package/esm2022/inputgroupaddon/inputgroupaddon.mjs +15 -13
  189. package/esm2022/inputgroupaddon/public_api.mjs +2 -1
  190. package/esm2022/inputicon/inputicon.mjs +7 -4
  191. package/esm2022/inputicon/public_api.mjs +2 -1
  192. package/esm2022/inputmask/inputmask.mjs +2 -2
  193. package/esm2022/inputmask/public_api.mjs +2 -1
  194. package/esm2022/inputmask/style/inputmaskstyle.mjs +17 -1
  195. package/esm2022/inputnumber/inputnumber.mjs +219 -221
  196. package/esm2022/inputnumber/public_api.mjs +2 -1
  197. package/esm2022/inputnumber/style/inputnumberstyle.mjs +38 -1
  198. package/esm2022/inputotp/inputotp.mjs +4 -4
  199. package/esm2022/inputotp/public_api.mjs +2 -1
  200. package/esm2022/inputotp/style/inputotpstyle.mjs +21 -1
  201. package/esm2022/inputswitch/public_api.mjs +2 -1
  202. package/esm2022/inputtext/inputtext.mjs +11 -2
  203. package/esm2022/inputtext/public_api.mjs +2 -1
  204. package/esm2022/inputtext/style/inputtextstyle.mjs +17 -1
  205. package/esm2022/inputtextarea/public_api.mjs +2 -1
  206. package/esm2022/inputtextarea/style/textareastyle.mjs +17 -1
  207. package/esm2022/knob/public_api.mjs +2 -1
  208. package/esm2022/knob/style/knobstyle.mjs +29 -1
  209. package/esm2022/listbox/listbox.mjs +45 -20
  210. package/esm2022/listbox/public_api.mjs +2 -1
  211. package/esm2022/listbox/style/listboxstyle.mjs +53 -1
  212. package/esm2022/megamenu/megamenu.mjs +15 -15
  213. package/esm2022/megamenu/public_api.mjs +2 -1
  214. package/esm2022/megamenu/style/megamenustyle.mjs +81 -1
  215. package/esm2022/menu/menu.mjs +5 -3
  216. package/esm2022/menu/public_api.mjs +2 -1
  217. package/esm2022/menu/style/menustyle.mjs +57 -1
  218. package/esm2022/menubar/menubar.mjs +3 -3
  219. package/esm2022/menubar/public_api.mjs +2 -1
  220. package/esm2022/menubar/style/menubarstyle.mjs +65 -1
  221. package/esm2022/message/message.mjs +2 -34
  222. package/esm2022/message/style/messagestyle.mjs +38 -2
  223. package/esm2022/messages/public_api.mjs +2 -1
  224. package/esm2022/metergroup/metergroup.mjs +10 -10
  225. package/esm2022/metergroup/public_api.mjs +2 -1
  226. package/esm2022/metergroup/style/metergroupstyle.mjs +45 -1
  227. package/esm2022/multiselect/multiselect.mjs +683 -677
  228. package/esm2022/multiselect/public_api.mjs +2 -1
  229. package/esm2022/multiselect/style/multiselectstyle.mjs +85 -1
  230. package/esm2022/orderlist/orderlist.mjs +89 -17
  231. package/esm2022/orderlist/public_api.mjs +2 -1
  232. package/esm2022/orderlist/style/orderliststyle.mjs +21 -1
  233. package/esm2022/organizationchart/organizationchart.mjs +5 -5
  234. package/esm2022/organizationchart/public_api.mjs +2 -1
  235. package/esm2022/organizationchart/style/organizationchartstyle.mjs +53 -1
  236. package/esm2022/overlay/overlay.mjs +1 -1
  237. package/esm2022/overlay/public_api.mjs +2 -1
  238. package/esm2022/overlaybadge/overlaybadge.mjs +4 -6
  239. package/esm2022/overlaybadge/public_api.mjs +2 -1
  240. package/esm2022/overlaypanel/public_api.mjs +2 -1
  241. package/esm2022/overlaypanel/style/popoverstyle.mjs +21 -1
  242. package/esm2022/paginator/paginator.mjs +6 -6
  243. package/esm2022/paginator/public_api.mjs +2 -1
  244. package/esm2022/paginator/style/paginatorstyle.mjs +81 -1
  245. package/esm2022/panel/style/panelstyle.mjs +45 -1
  246. package/esm2022/panelmenu/panelmenu.mjs +30 -22
  247. package/esm2022/panelmenu/public_api.mjs +2 -1
  248. package/esm2022/panelmenu/style/panelmenustyle.mjs +83 -2
  249. package/esm2022/password/password.mjs +5 -3
  250. package/esm2022/password/public_api.mjs +2 -1
  251. package/esm2022/password/style/passwordstyle.mjs +45 -1
  252. package/esm2022/picklist/picklist.mjs +187 -17
  253. package/esm2022/picklist/public_api.mjs +2 -1
  254. package/esm2022/picklist/style/pickliststyle.mjs +37 -1
  255. package/esm2022/popover/public_api.mjs +2 -1
  256. package/esm2022/progressbar/progressbar.mjs +3 -3
  257. package/esm2022/progressbar/public_api.mjs +2 -1
  258. package/esm2022/progressbar/style/progressbarstyle.mjs +25 -1
  259. package/esm2022/progressspinner/progressspinner.mjs +3 -3
  260. package/esm2022/progressspinner/public_api.mjs +2 -1
  261. package/esm2022/progressspinner/style/progressspinnerstyle.mjs +25 -1
  262. package/esm2022/radiobutton/public_api.mjs +2 -1
  263. package/esm2022/radiobutton/radiobutton.mjs +4 -4
  264. package/esm2022/radiobutton/style/radiobuttonstyle.mjs +29 -1
  265. package/esm2022/rating/public_api.mjs +2 -1
  266. package/esm2022/rating/rating.mjs +11 -108
  267. package/esm2022/rating/style/ratingstyle.mjs +29 -1
  268. package/esm2022/ripple/public_api.mjs +2 -1
  269. package/esm2022/ripple/ripple.mjs +17 -12
  270. package/esm2022/ripple/style/ripplestyle.mjs +17 -1
  271. package/esm2022/scroller/public_api.mjs +2 -1
  272. package/esm2022/scroller/scroller.mjs +6 -6
  273. package/esm2022/scroller/style/scrollerstyle.mjs +104 -0
  274. package/esm2022/scrollpanel/public_api.mjs +2 -1
  275. package/esm2022/scrollpanel/scrollpanel.mjs +3 -3
  276. package/esm2022/scrollpanel/style/scrollpanelstyle.mjs +33 -1
  277. package/esm2022/scrolltop/public_api.mjs +2 -1
  278. package/esm2022/scrolltop/scrolltop.mjs +21 -16
  279. package/esm2022/scrolltop/style/scrolltopstyle.mjs +21 -1
  280. package/esm2022/select/public_api.mjs +2 -1
  281. package/esm2022/select/select.mjs +17 -25
  282. package/esm2022/select/style/selectstyle.mjs +86 -2
  283. package/esm2022/selectbutton/public_api.mjs +2 -1
  284. package/esm2022/selectbutton/selectbutton.mjs +8 -8
  285. package/esm2022/selectbutton/style/selectbuttonstyle.mjs +19 -3
  286. package/esm2022/sidebar/public_api.mjs +2 -1
  287. package/esm2022/skeleton/public_api.mjs +2 -1
  288. package/esm2022/skeleton/style/skeletonstyle.mjs +17 -1
  289. package/esm2022/slider/public_api.mjs +2 -1
  290. package/esm2022/slider/style/sliderstyle.mjs +25 -1
  291. package/esm2022/speeddial/public_api.mjs +2 -1
  292. package/esm2022/speeddial/speeddial.interface.mjs +1 -1
  293. package/esm2022/speeddial/speeddial.mjs +74 -50
  294. package/esm2022/speeddial/style/speeddialstyle.mjs +42 -2
  295. package/esm2022/splitbutton/public_api.mjs +2 -1
  296. package/esm2022/splitbutton/splitbutton.mjs +25 -12
  297. package/esm2022/splitbutton/style/splitbuttonstyle.mjs +25 -1
  298. package/esm2022/splitter/public_api.mjs +2 -1
  299. package/esm2022/splitter/style/splitterstyle.mjs +25 -1
  300. package/esm2022/stepper/public_api.mjs +2 -2
  301. package/esm2022/stepper/stepper.mjs +367 -660
  302. package/esm2022/stepper/style/stepperstyle.mjs +21 -2
  303. package/esm2022/steps/public_api.mjs +2 -1
  304. package/esm2022/steps/style/stepsstyle.mjs +37 -1
  305. package/esm2022/table/public_api.mjs +2 -1
  306. package/esm2022/table/style/tablestyle.mjs +899 -0
  307. package/esm2022/table/table.mjs +46 -42
  308. package/esm2022/tabmenu/public_api.mjs +2 -1
  309. package/esm2022/tabmenu/style/tabmenustyle.mjs +42 -2
  310. package/esm2022/tabmenu/tabmenu.mjs +11 -7
  311. package/esm2022/tabs/public_api.mjs +6 -2
  312. package/esm2022/tabs/style/tabsstyle.mjs +49 -1
  313. package/esm2022/tabs/tab.mjs +171 -0
  314. package/esm2022/tabs/tablist.mjs +256 -0
  315. package/esm2022/tabs/tabpanel.mjs +49 -0
  316. package/esm2022/tabs/tabpanels.mjs +30 -0
  317. package/esm2022/tabs/tabs.mjs +45 -948
  318. package/esm2022/tabview/public_api.mjs +2 -1
  319. package/esm2022/tabview/style/tabsstyle.mjs +49 -1
  320. package/esm2022/tag/public_api.mjs +2 -1
  321. package/esm2022/tag/style/tagstyle.mjs +25 -1
  322. package/esm2022/terminal/public_api.mjs +2 -1
  323. package/esm2022/terminal/style/terminalstyle.mjs +49 -1
  324. package/esm2022/textarea/public_api.mjs +2 -1
  325. package/esm2022/textarea/style/textareastyle.mjs +17 -1
  326. package/esm2022/textarea/textarea.mjs +1 -2
  327. package/esm2022/themes/aura/aura.mjs +7 -3
  328. package/esm2022/themes/aura/floatlabel/index.mjs +29 -1
  329. package/esm2022/themes/aura/iftalabel/index.mjs +16 -0
  330. package/esm2022/themes/lara/floatlabel/index.mjs +27 -1
  331. package/esm2022/themes/lara/iftalabel/index.mjs +16 -0
  332. package/esm2022/themes/lara/lara.mjs +7 -3
  333. package/esm2022/themes/nora/floatlabel/index.mjs +27 -1
  334. package/esm2022/themes/nora/iftalabel/index.mjs +16 -0
  335. package/esm2022/themes/nora/nora.mjs +7 -3
  336. package/esm2022/tieredmenu/public_api.mjs +2 -1
  337. package/esm2022/tieredmenu/style/tieredmenustyle.mjs +61 -1
  338. package/esm2022/tieredmenu/tieredmenu.mjs +15 -15
  339. package/esm2022/timeline/public_api.mjs +2 -1
  340. package/esm2022/timeline/style/timelinestyle.mjs +41 -1
  341. package/esm2022/timeline/timeline.mjs +54 -68
  342. package/esm2022/toast/public_api.mjs +2 -1
  343. package/esm2022/toast/style/toaststyle.mjs +49 -1
  344. package/esm2022/togglebutton/public_api.mjs +2 -1
  345. package/esm2022/togglebutton/style/togglebuttonstyle.mjs +26 -2
  346. package/esm2022/togglebutton/togglebutton.mjs +84 -77
  347. package/esm2022/toggleswitch/public_api.mjs +2 -1
  348. package/esm2022/toggleswitch/style/toggleswitchstyle.mjs +32 -5
  349. package/esm2022/toggleswitch/toggleswitch.mjs +44 -48
  350. package/esm2022/toolbar/public_api.mjs +2 -1
  351. package/esm2022/toolbar/style/toolbarstyle.mjs +29 -1
  352. package/esm2022/tooltip/public_api.mjs +2 -1
  353. package/esm2022/tooltip/style/tooltipstyle.mjs +25 -1
  354. package/esm2022/tree/public_api.mjs +2 -1
  355. package/esm2022/tree/style/treestyle.mjs +69 -1
  356. package/esm2022/tree/tree.mjs +15 -12
  357. package/esm2022/treeselect/public_api.mjs +2 -1
  358. package/esm2022/treeselect/style/treeselectstyle.mjs +53 -1
  359. package/esm2022/treeselect/treeselect.mjs +9 -58
  360. package/esm2022/treetable/public_api.mjs +2 -1
  361. package/esm2022/treetable/style/treetablestyle.mjs +98 -2
  362. package/esm2022/treetable/treetable.mjs +6 -6
  363. package/esm2022/utils/inpututils.mjs +7 -0
  364. package/esm2022/utils/public_api.mjs +3 -2
  365. package/fesm2022/primeng-accordion.mjs +470 -83
  366. package/fesm2022/primeng-accordion.mjs.map +1 -1
  367. package/fesm2022/primeng-api.mjs +2 -0
  368. package/fesm2022/primeng-api.mjs.map +1 -1
  369. package/fesm2022/primeng-autocomplete.mjs +74 -6
  370. package/fesm2022/primeng-autocomplete.mjs.map +1 -1
  371. package/fesm2022/primeng-avatar.mjs +27 -2
  372. package/fesm2022/primeng-avatar.mjs.map +1 -1
  373. package/fesm2022/primeng-avatargroup.mjs +16 -3
  374. package/fesm2022/primeng-avatargroup.mjs.map +1 -1
  375. package/fesm2022/primeng-badge.mjs +55 -51
  376. package/fesm2022/primeng-badge.mjs.map +1 -1
  377. package/fesm2022/primeng-basecomponent.mjs +2 -3
  378. package/fesm2022/primeng-basecomponent.mjs.map +1 -1
  379. package/fesm2022/primeng-blockui.mjs +19 -3
  380. package/fesm2022/primeng-blockui.mjs.map +1 -1
  381. package/fesm2022/primeng-breadcrumb.mjs +142 -119
  382. package/fesm2022/primeng-breadcrumb.mjs.map +1 -1
  383. package/fesm2022/primeng-button.mjs +31 -7
  384. package/fesm2022/primeng-button.mjs.map +1 -1
  385. package/fesm2022/primeng-buttongroup.mjs +19 -3
  386. package/fesm2022/primeng-buttongroup.mjs.map +1 -1
  387. package/fesm2022/primeng-calendar.mjs +2 -2
  388. package/fesm2022/primeng-calendar.mjs.map +1 -1
  389. package/fesm2022/primeng-card.mjs +45 -1
  390. package/fesm2022/primeng-card.mjs.map +1 -1
  391. package/fesm2022/primeng-carousel.mjs +69 -1
  392. package/fesm2022/primeng-carousel.mjs.map +1 -1
  393. package/fesm2022/primeng-cascadeselect.mjs +79 -19
  394. package/fesm2022/primeng-cascadeselect.mjs.map +1 -1
  395. package/fesm2022/primeng-chart.mjs +36 -2
  396. package/fesm2022/primeng-chart.mjs.map +1 -1
  397. package/fesm2022/primeng-checkbox.mjs +29 -1
  398. package/fesm2022/primeng-checkbox.mjs.map +1 -1
  399. package/fesm2022/primeng-chip.mjs +33 -1
  400. package/fesm2022/primeng-chip.mjs.map +1 -1
  401. package/fesm2022/primeng-colorpicker.mjs +47 -3
  402. package/fesm2022/primeng-colorpicker.mjs.map +1 -1
  403. package/fesm2022/primeng-confirmdialog.mjs +35 -3
  404. package/fesm2022/primeng-confirmdialog.mjs.map +1 -1
  405. package/fesm2022/primeng-confirmpopup.mjs +50 -10
  406. package/fesm2022/primeng-confirmpopup.mjs.map +1 -1
  407. package/fesm2022/primeng-contextmenu.mjs +68 -15
  408. package/fesm2022/primeng-contextmenu.mjs.map +1 -1
  409. package/fesm2022/primeng-dataview.mjs +39 -3
  410. package/fesm2022/primeng-dataview.mjs.map +1 -1
  411. package/fesm2022/primeng-datepicker.mjs +184 -8
  412. package/fesm2022/primeng-datepicker.mjs.map +1 -1
  413. package/fesm2022/primeng-dialog.mjs +69 -16
  414. package/fesm2022/primeng-dialog.mjs.map +1 -1
  415. package/fesm2022/primeng-divider.mjs +24 -4
  416. package/fesm2022/primeng-divider.mjs.map +1 -1
  417. package/fesm2022/primeng-dock.mjs +41 -1
  418. package/fesm2022/primeng-dock.mjs.map +1 -1
  419. package/fesm2022/primeng-drawer.mjs +53 -13
  420. package/fesm2022/primeng-drawer.mjs.map +1 -1
  421. package/fesm2022/primeng-dropdown.mjs +14 -11
  422. package/fesm2022/primeng-dropdown.mjs.map +1 -1
  423. package/fesm2022/primeng-dynamicdialog.mjs +142 -24
  424. package/fesm2022/primeng-dynamicdialog.mjs.map +1 -1
  425. package/fesm2022/primeng-editor.mjs +29 -4
  426. package/fesm2022/primeng-editor.mjs.map +1 -1
  427. package/fesm2022/primeng-fieldset.mjs +47 -21
  428. package/fesm2022/primeng-fieldset.mjs.map +1 -1
  429. package/fesm2022/primeng-fileupload.mjs +118 -13
  430. package/fesm2022/primeng-fileupload.mjs.map +1 -1
  431. package/fesm2022/primeng-floatlabel.mjs +96 -40
  432. package/fesm2022/primeng-floatlabel.mjs.map +1 -1
  433. package/fesm2022/primeng-fluid.mjs +17 -1
  434. package/fesm2022/primeng-fluid.mjs.map +1 -1
  435. package/fesm2022/primeng-galleria.mjs +237 -124
  436. package/fesm2022/primeng-galleria.mjs.map +1 -1
  437. package/fesm2022/primeng-iconfield.mjs +29 -20
  438. package/fesm2022/primeng-iconfield.mjs.map +1 -1
  439. package/fesm2022/primeng-iftalabel.mjs +143 -0
  440. package/fesm2022/primeng-iftalabel.mjs.map +1 -0
  441. package/fesm2022/primeng-image.mjs +141 -41
  442. package/fesm2022/primeng-image.mjs.map +1 -1
  443. package/fesm2022/primeng-inplace.mjs +27 -3
  444. package/fesm2022/primeng-inplace.mjs.map +1 -1
  445. package/fesm2022/primeng-inputgroup.mjs +46 -17
  446. package/fesm2022/primeng-inputgroup.mjs.map +1 -1
  447. package/fesm2022/primeng-inputgroupaddon.mjs +15 -13
  448. package/fesm2022/primeng-inputgroupaddon.mjs.map +1 -1
  449. package/fesm2022/primeng-inputicon.mjs +7 -4
  450. package/fesm2022/primeng-inputicon.mjs.map +1 -1
  451. package/fesm2022/primeng-inputmask.mjs +18 -2
  452. package/fesm2022/primeng-inputmask.mjs.map +1 -1
  453. package/fesm2022/primeng-inputnumber.mjs +256 -221
  454. package/fesm2022/primeng-inputnumber.mjs.map +1 -1
  455. package/fesm2022/primeng-inputotp.mjs +24 -4
  456. package/fesm2022/primeng-inputotp.mjs.map +1 -1
  457. package/fesm2022/primeng-inputswitch.mjs +1 -1
  458. package/fesm2022/primeng-inputtext.mjs +27 -2
  459. package/fesm2022/primeng-inputtext.mjs.map +1 -1
  460. package/fesm2022/primeng-inputtextarea.mjs +17 -1
  461. package/fesm2022/primeng-inputtextarea.mjs.map +1 -1
  462. package/fesm2022/primeng-knob.mjs +29 -1
  463. package/fesm2022/primeng-knob.mjs.map +1 -1
  464. package/fesm2022/primeng-listbox.mjs +97 -20
  465. package/fesm2022/primeng-listbox.mjs.map +1 -1
  466. package/fesm2022/primeng-megamenu.mjs +95 -15
  467. package/fesm2022/primeng-megamenu.mjs.map +1 -1
  468. package/fesm2022/primeng-menu.mjs +60 -2
  469. package/fesm2022/primeng-menu.mjs.map +1 -1
  470. package/fesm2022/primeng-menubar.mjs +67 -3
  471. package/fesm2022/primeng-menubar.mjs.map +1 -1
  472. package/fesm2022/primeng-message.mjs +39 -35
  473. package/fesm2022/primeng-message.mjs.map +1 -1
  474. package/fesm2022/primeng-messages.mjs +1 -1
  475. package/fesm2022/primeng-metergroup.mjs +54 -10
  476. package/fesm2022/primeng-metergroup.mjs.map +1 -1
  477. package/fesm2022/primeng-multiselect.mjs +767 -677
  478. package/fesm2022/primeng-multiselect.mjs.map +1 -1
  479. package/fesm2022/primeng-orderlist.mjs +108 -16
  480. package/fesm2022/primeng-orderlist.mjs.map +1 -1
  481. package/fesm2022/primeng-organizationchart.mjs +57 -5
  482. package/fesm2022/primeng-organizationchart.mjs.map +1 -1
  483. package/fesm2022/primeng-overlay.mjs +1 -1
  484. package/fesm2022/primeng-overlay.mjs.map +1 -1
  485. package/fesm2022/primeng-overlaybadge.mjs +4 -6
  486. package/fesm2022/primeng-overlaybadge.mjs.map +1 -1
  487. package/fesm2022/primeng-overlaypanel.mjs +21 -1
  488. package/fesm2022/primeng-overlaypanel.mjs.map +1 -1
  489. package/fesm2022/primeng-paginator.mjs +86 -6
  490. package/fesm2022/primeng-paginator.mjs.map +1 -1
  491. package/fesm2022/primeng-panel.mjs +45 -1
  492. package/fesm2022/primeng-panel.mjs.map +1 -1
  493. package/fesm2022/primeng-panelmenu.mjs +111 -22
  494. package/fesm2022/primeng-panelmenu.mjs.map +1 -1
  495. package/fesm2022/primeng-password.mjs +48 -2
  496. package/fesm2022/primeng-password.mjs.map +1 -1
  497. package/fesm2022/primeng-picklist.mjs +222 -16
  498. package/fesm2022/primeng-picklist.mjs.map +1 -1
  499. package/fesm2022/primeng-popover.mjs +1 -1
  500. package/fesm2022/primeng-progressbar.mjs +27 -3
  501. package/fesm2022/primeng-progressbar.mjs.map +1 -1
  502. package/fesm2022/primeng-progressspinner.mjs +27 -3
  503. package/fesm2022/primeng-progressspinner.mjs.map +1 -1
  504. package/fesm2022/primeng-radiobutton.mjs +32 -4
  505. package/fesm2022/primeng-radiobutton.mjs.map +1 -1
  506. package/fesm2022/primeng-rating.mjs +39 -108
  507. package/fesm2022/primeng-rating.mjs.map +1 -1
  508. package/fesm2022/primeng-ripple.mjs +33 -12
  509. package/fesm2022/primeng-ripple.mjs.map +1 -1
  510. package/fesm2022/primeng-scroller.mjs +41 -9
  511. package/fesm2022/primeng-scroller.mjs.map +1 -1
  512. package/fesm2022/primeng-scrollpanel.mjs +35 -3
  513. package/fesm2022/primeng-scrollpanel.mjs.map +1 -1
  514. package/fesm2022/primeng-scrolltop.mjs +41 -16
  515. package/fesm2022/primeng-scrolltop.mjs.map +1 -1
  516. package/fesm2022/primeng-select.mjs +102 -26
  517. package/fesm2022/primeng-select.mjs.map +1 -1
  518. package/fesm2022/primeng-selectbutton.mjs +26 -10
  519. package/fesm2022/primeng-selectbutton.mjs.map +1 -1
  520. package/fesm2022/primeng-sidebar.mjs +1 -1
  521. package/fesm2022/primeng-skeleton.mjs +17 -1
  522. package/fesm2022/primeng-skeleton.mjs.map +1 -1
  523. package/fesm2022/primeng-slider.mjs +25 -1
  524. package/fesm2022/primeng-slider.mjs.map +1 -1
  525. package/fesm2022/primeng-speeddial.mjs +114 -50
  526. package/fesm2022/primeng-speeddial.mjs.map +1 -1
  527. package/fesm2022/primeng-splitbutton.mjs +49 -12
  528. package/fesm2022/primeng-splitbutton.mjs.map +1 -1
  529. package/fesm2022/primeng-splitter.mjs +25 -1
  530. package/fesm2022/primeng-splitter.mjs.map +1 -1
  531. package/fesm2022/primeng-stepper.mjs +388 -662
  532. package/fesm2022/primeng-stepper.mjs.map +1 -1
  533. package/fesm2022/primeng-steps.mjs +37 -1
  534. package/fesm2022/primeng-steps.mjs.map +1 -1
  535. package/fesm2022/primeng-table.mjs +253 -75
  536. package/fesm2022/primeng-table.mjs.map +1 -1
  537. package/fesm2022/primeng-tabmenu.mjs +51 -7
  538. package/fesm2022/primeng-tabmenu.mjs.map +1 -1
  539. package/fesm2022/primeng-tabs.mjs +494 -872
  540. package/fesm2022/primeng-tabs.mjs.map +1 -1
  541. package/fesm2022/primeng-tabview.mjs +49 -1
  542. package/fesm2022/primeng-tabview.mjs.map +1 -1
  543. package/fesm2022/primeng-tag.mjs +25 -1
  544. package/fesm2022/primeng-tag.mjs.map +1 -1
  545. package/fesm2022/primeng-terminal.mjs +49 -1
  546. package/fesm2022/primeng-terminal.mjs.map +1 -1
  547. package/fesm2022/primeng-textarea.mjs +17 -2
  548. package/fesm2022/primeng-textarea.mjs.map +1 -1
  549. package/fesm2022/primeng-themes-aura.mjs +49 -2
  550. package/fesm2022/primeng-themes-aura.mjs.map +1 -1
  551. package/fesm2022/primeng-themes-lara.mjs +47 -2
  552. package/fesm2022/primeng-themes-lara.mjs.map +1 -1
  553. package/fesm2022/primeng-themes-nora.mjs +47 -2
  554. package/fesm2022/primeng-themes-nora.mjs.map +1 -1
  555. package/fesm2022/primeng-tieredmenu.mjs +75 -15
  556. package/fesm2022/primeng-tieredmenu.mjs.map +1 -1
  557. package/fesm2022/primeng-timeline.mjs +94 -68
  558. package/fesm2022/primeng-timeline.mjs.map +1 -1
  559. package/fesm2022/primeng-toast.mjs +49 -1
  560. package/fesm2022/primeng-toast.mjs.map +1 -1
  561. package/fesm2022/primeng-togglebutton.mjs +109 -78
  562. package/fesm2022/primeng-togglebutton.mjs.map +1 -1
  563. package/fesm2022/primeng-toggleswitch.mjs +74 -51
  564. package/fesm2022/primeng-toggleswitch.mjs.map +1 -1
  565. package/fesm2022/primeng-toolbar.mjs +29 -1
  566. package/fesm2022/primeng-toolbar.mjs.map +1 -1
  567. package/fesm2022/primeng-tooltip.mjs +25 -1
  568. package/fesm2022/primeng-tooltip.mjs.map +1 -1
  569. package/fesm2022/primeng-tree.mjs +83 -12
  570. package/fesm2022/primeng-tree.mjs.map +1 -1
  571. package/fesm2022/primeng-treeselect.mjs +61 -58
  572. package/fesm2022/primeng-treeselect.mjs.map +1 -1
  573. package/fesm2022/primeng-treetable.mjs +102 -6
  574. package/fesm2022/primeng-treetable.mjs.map +1 -1
  575. package/fesm2022/primeng-utils.mjs +8 -1
  576. package/fesm2022/primeng-utils.mjs.map +1 -1
  577. package/fieldset/fieldset.d.ts +1 -6
  578. package/fieldset/public_api.d.ts +1 -0
  579. package/fieldset/style/fieldsetstyle.d.ts +37 -0
  580. package/fileupload/fileupload.d.ts +4 -1
  581. package/fileupload/fileupload.interface.d.ts +9 -0
  582. package/fileupload/public_api.d.ts +1 -0
  583. package/fileupload/style/fileuploadstyle.d.ts +73 -0
  584. package/floatlabel/floatlabel.d.ts +6 -1
  585. package/floatlabel/public_api.d.ts +1 -0
  586. package/floatlabel/style/floatlabelstyle.d.ts +20 -6
  587. package/fluid/public_api.d.ts +1 -0
  588. package/fluid/style/fluidstyle.d.ts +17 -0
  589. package/galleria/public_api.d.ts +1 -0
  590. package/galleria/style/galleriastyle.d.ts +125 -0
  591. package/iconfield/iconfield.d.ts +1 -1
  592. package/iconfield/public_api.d.ts +1 -0
  593. package/iconfield/style/iconfieldstyle.d.ts +17 -0
  594. package/iftalabel/iftalabel.d.ts +20 -0
  595. package/iftalabel/index.d.ts +5 -0
  596. package/iftalabel/public_api.d.ts +2 -0
  597. package/iftalabel/style/iftalabelstyle.d.ts +30 -0
  598. package/image/image.d.ts +2 -0
  599. package/image/image.interface.d.ts +32 -0
  600. package/image/public_api.d.ts +1 -0
  601. package/image/style/imagestyle.d.ts +57 -0
  602. package/inplace/public_api.d.ts +1 -0
  603. package/inplace/style/inplacestyle.d.ts +25 -0
  604. package/inputgroup/public_api.d.ts +1 -0
  605. package/inputgroup/style/inputgroupstyle.d.ts +17 -0
  606. package/inputgroupaddon/inputgroupaddon.d.ts +3 -0
  607. package/inputgroupaddon/public_api.d.ts +1 -0
  608. package/inputicon/public_api.d.ts +1 -0
  609. package/inputmask/public_api.d.ts +1 -0
  610. package/inputmask/style/inputmaskstyle.d.ts +17 -0
  611. package/inputnumber/inputnumber.d.ts +2 -1
  612. package/inputnumber/public_api.d.ts +1 -0
  613. package/inputnumber/style/inputnumberstyle.d.ts +33 -0
  614. package/inputotp/inputotp.d.ts +1 -1
  615. package/inputotp/public_api.d.ts +1 -0
  616. package/inputotp/style/inputotpstyle.d.ts +21 -0
  617. package/inputswitch/public_api.d.ts +1 -0
  618. package/inputtext/inputtext.d.ts +6 -1
  619. package/inputtext/public_api.d.ts +1 -0
  620. package/inputtext/style/inputtextstyle.d.ts +17 -0
  621. package/inputtextarea/public_api.d.ts +1 -0
  622. package/inputtextarea/style/textareastyle.d.ts +17 -0
  623. package/knob/public_api.d.ts +1 -0
  624. package/knob/style/knobstyle.d.ts +29 -0
  625. package/listbox/listbox.d.ts +14 -6
  626. package/listbox/public_api.d.ts +1 -0
  627. package/listbox/style/listboxstyle.d.ts +53 -0
  628. package/megamenu/megamenu.d.ts +2 -2
  629. package/megamenu/public_api.d.ts +1 -0
  630. package/megamenu/style/megamenustyle.d.ts +81 -0
  631. package/menu/public_api.d.ts +1 -0
  632. package/menu/style/menustyle.d.ts +57 -0
  633. package/menubar/public_api.d.ts +1 -0
  634. package/menubar/style/menubarstyle.d.ts +65 -0
  635. package/message/style/messagestyle.d.ts +37 -0
  636. package/messages/public_api.d.ts +1 -0
  637. package/metergroup/metergroup.d.ts +2 -2
  638. package/metergroup/public_api.d.ts +1 -0
  639. package/metergroup/style/metergroupstyle.d.ts +45 -0
  640. package/multiselect/multiselect.d.ts +5 -6
  641. package/multiselect/public_api.d.ts +1 -0
  642. package/multiselect/style/multiselectstyle.d.ts +85 -0
  643. package/orderlist/orderlist.d.ts +28 -1
  644. package/orderlist/public_api.d.ts +1 -0
  645. package/orderlist/style/orderliststyle.d.ts +21 -0
  646. package/organizationchart/organizationchart.d.ts +1 -1
  647. package/organizationchart/public_api.d.ts +1 -0
  648. package/organizationchart/style/organizationchartstyle.d.ts +53 -0
  649. package/overlay/public_api.d.ts +1 -0
  650. package/overlaybadge/overlaybadge.d.ts +2 -2
  651. package/overlaybadge/public_api.d.ts +1 -0
  652. package/overlaypanel/public_api.d.ts +1 -0
  653. package/overlaypanel/style/popoverstyle.d.ts +21 -0
  654. package/package.json +371 -365
  655. package/paginator/public_api.d.ts +1 -0
  656. package/paginator/style/paginatorstyle.d.ts +81 -0
  657. package/panel/style/panelstyle.d.ts +43 -0
  658. package/panelmenu/panelmenu.d.ts +4 -4
  659. package/panelmenu/public_api.d.ts +1 -0
  660. package/panelmenu/style/panelmenustyle.d.ts +82 -0
  661. package/password/password.d.ts +1 -1
  662. package/password/public_api.d.ts +1 -0
  663. package/password/style/passwordstyle.d.ts +45 -0
  664. package/picklist/picklist.d.ts +52 -5
  665. package/picklist/public_api.d.ts +1 -0
  666. package/picklist/style/pickliststyle.d.ts +37 -0
  667. package/popover/public_api.d.ts +1 -0
  668. package/progressbar/progressbar.d.ts +1 -1
  669. package/progressbar/public_api.d.ts +1 -0
  670. package/progressbar/style/progressbarstyle.d.ts +25 -0
  671. package/progressspinner/progressspinner.d.ts +1 -1
  672. package/progressspinner/public_api.d.ts +1 -0
  673. package/progressspinner/style/progressspinnerstyle.d.ts +25 -0
  674. package/radiobutton/public_api.d.ts +1 -0
  675. package/radiobutton/radiobutton.d.ts +1 -1
  676. package/radiobutton/style/radiobuttonstyle.d.ts +29 -0
  677. package/rating/public_api.d.ts +1 -0
  678. package/rating/rating.d.ts +1 -20
  679. package/rating/style/ratingstyle.d.ts +29 -0
  680. package/ripple/public_api.d.ts +1 -0
  681. package/ripple/ripple.d.ts +1 -0
  682. package/ripple/style/ripplestyle.d.ts +17 -0
  683. package/scroller/public_api.d.ts +1 -0
  684. package/scroller/scroller.d.ts +2 -2
  685. package/scroller/style/scrollerstyle.d.ts +43 -0
  686. package/scrollpanel/public_api.d.ts +1 -0
  687. package/scrollpanel/scrollpanel.d.ts +1 -1
  688. package/scrollpanel/style/scrollpanelstyle.d.ts +33 -0
  689. package/scrolltop/public_api.d.ts +1 -0
  690. package/scrolltop/scrolltop.d.ts +1 -1
  691. package/scrolltop/style/scrolltopstyle.d.ts +21 -0
  692. package/select/public_api.d.ts +1 -0
  693. package/select/style/selectstyle.d.ts +85 -0
  694. package/selectbutton/public_api.d.ts +1 -0
  695. package/selectbutton/selectbutton.d.ts +1 -1
  696. package/selectbutton/style/selectbuttonstyle.d.ts +17 -0
  697. package/sidebar/public_api.d.ts +1 -0
  698. package/skeleton/public_api.d.ts +1 -0
  699. package/skeleton/style/skeletonstyle.d.ts +17 -0
  700. package/slider/public_api.d.ts +1 -0
  701. package/slider/style/sliderstyle.d.ts +25 -0
  702. package/speeddial/public_api.d.ts +1 -0
  703. package/speeddial/speeddial.d.ts +25 -2
  704. package/speeddial/speeddial.interface.d.ts +17 -1
  705. package/speeddial/style/speeddialstyle.d.ts +41 -0
  706. package/splitbutton/public_api.d.ts +1 -0
  707. package/splitbutton/splitbutton.d.ts +6 -1
  708. package/splitbutton/style/splitbuttonstyle.d.ts +25 -0
  709. package/splitter/public_api.d.ts +1 -0
  710. package/splitter/style/splitterstyle.d.ts +25 -0
  711. package/stepper/public_api.d.ts +1 -1
  712. package/stepper/stepper.d.ts +140 -88
  713. package/stepper/style/stepperstyle.d.ts +21 -0
  714. package/steps/public_api.d.ts +1 -0
  715. package/steps/style/stepsstyle.d.ts +37 -0
  716. package/table/public_api.d.ts +1 -0
  717. package/table/style/tablestyle.d.ts +327 -0
  718. package/table/table.d.ts +5 -5
  719. package/tabmenu/public_api.d.ts +1 -0
  720. package/tabmenu/style/tabmenustyle.d.ts +41 -0
  721. package/tabmenu/tabmenu.d.ts +2 -1
  722. package/tabs/public_api.d.ts +5 -1
  723. package/tabs/style/tabsstyle.d.ts +49 -0
  724. package/tabs/tab.d.ts +47 -0
  725. package/tabs/tablist.d.ts +51 -0
  726. package/tabs/tabpanel.d.ts +20 -0
  727. package/tabs/tabpanels.d.ts +10 -0
  728. package/tabs/tabs.d.ts +31 -237
  729. package/tabview/public_api.d.ts +1 -0
  730. package/tabview/style/tabsstyle.d.ts +49 -0
  731. package/tag/public_api.d.ts +1 -0
  732. package/tag/style/tagstyle.d.ts +25 -0
  733. package/terminal/public_api.d.ts +1 -0
  734. package/terminal/style/terminalstyle.d.ts +49 -0
  735. package/textarea/public_api.d.ts +1 -0
  736. package/textarea/style/textareastyle.d.ts +17 -0
  737. package/themes/aura/aura.d.ts +45 -0
  738. package/themes/aura/floatlabel/index.d.ts +28 -0
  739. package/themes/aura/iftalabel/index.d.ts +16 -0
  740. package/themes/lara/floatlabel/index.d.ts +26 -0
  741. package/themes/lara/iftalabel/index.d.ts +16 -0
  742. package/themes/lara/lara.d.ts +43 -0
  743. package/themes/nora/floatlabel/index.d.ts +26 -0
  744. package/themes/nora/iftalabel/index.d.ts +16 -0
  745. package/themes/nora/nora.d.ts +43 -0
  746. package/tieredmenu/public_api.d.ts +1 -0
  747. package/tieredmenu/style/tieredmenustyle.d.ts +61 -0
  748. package/tieredmenu/tieredmenu.d.ts +2 -2
  749. package/timeline/public_api.d.ts +1 -0
  750. package/timeline/style/timelinestyle.d.ts +41 -0
  751. package/timeline/timeline.d.ts +1 -0
  752. package/toast/public_api.d.ts +1 -0
  753. package/toast/style/toaststyle.d.ts +49 -0
  754. package/togglebutton/public_api.d.ts +1 -0
  755. package/togglebutton/style/togglebuttonstyle.d.ts +25 -0
  756. package/togglebutton/togglebutton.d.ts +6 -7
  757. package/toggleswitch/public_api.d.ts +1 -0
  758. package/toggleswitch/style/toggleswitchstyle.d.ts +25 -0
  759. package/toolbar/public_api.d.ts +1 -0
  760. package/toolbar/style/toolbarstyle.d.ts +29 -0
  761. package/tooltip/public_api.d.ts +1 -0
  762. package/tooltip/style/tooltipstyle.d.ts +25 -0
  763. package/tree/public_api.d.ts +1 -0
  764. package/tree/style/treestyle.d.ts +69 -0
  765. package/tree/tree.d.ts +1 -0
  766. package/treeselect/public_api.d.ts +1 -0
  767. package/treeselect/style/treeselectstyle.d.ts +53 -0
  768. package/treeselect/treeselect.d.ts +1 -1
  769. package/treetable/public_api.d.ts +1 -0
  770. package/treetable/style/treetablestyle.d.ts +97 -0
  771. package/treetable/treetable.d.ts +1 -1
  772. package/utils/inpututils.d.ts +2 -0
  773. package/utils/public_api.d.ts +2 -1
  774. package/accordion/accordion.interface.d.ts +0 -49
  775. package/esm2022/accordion/accordion.interface.mjs +0 -2
  776. package/esm2022/scroller/style/virtualscrollerstyle.mjs +0 -72
  777. package/esm2022/stepper/stepper.interface.mjs +0 -2
  778. package/esm2022/table/style/datatablestyle.mjs +0 -725
  779. package/esm2022/tabs/tabs.interface.mjs +0 -2
  780. package/scroller/style/virtualscrollerstyle.d.ts +0 -10
  781. package/stepper/stepper.interface.d.ts +0 -26
  782. package/table/style/datatablestyle.d.ts +0 -124
  783. package/tabs/tabs.interface.d.ts +0 -49
@@ -1,6 +1,6 @@
1
1
  import { animate, state, style, transition, trigger } from '@angular/animations';
2
2
  import { CommonModule } from '@angular/common';
3
- import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Inject, Input, NgModule, Output, ViewChild, ViewEncapsulation, booleanAttribute, computed, forwardRef, inject, numberAttribute, signal, } from '@angular/core';
3
+ import { booleanAttribute, ChangeDetectionStrategy, Component, computed, ContentChildren, EventEmitter, forwardRef, Inject, inject, Input, NgModule, numberAttribute, Output, signal, ViewChild, ViewEncapsulation, } from '@angular/core';
4
4
  import { RouterModule } from '@angular/router';
5
5
  import { PrimeTemplate, SharedModule } from 'primeng/api';
6
6
  import { DomHandler } from 'primeng/dom';
@@ -101,7 +101,7 @@ export class PanelMenuSub {
101
101
  this.itemToggle.emit(event);
102
102
  }
103
103
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: PanelMenuSub, deps: [{ token: forwardRef(() => PanelMenu) }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
104
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.2", type: PanelMenuSub, selector: "p-panelMenuSub", inputs: { panelId: "panelId", focusedItemId: "focusedItemId", items: "items", itemTemplate: "itemTemplate", level: ["level", "level", numberAttribute], activeItemPath: "activeItemPath", root: ["root", "root", booleanAttribute], tabindex: ["tabindex", "tabindex", numberAttribute], transitionOptions: "transitionOptions", parentExpanded: ["parentExpanded", "parentExpanded", booleanAttribute] }, outputs: { itemToggle: "itemToggle", menuFocus: "menuFocus", menuBlur: "menuBlur", menuKeyDown: "menuKeyDown" }, viewQueries: [{ propertyName: "listViewChild", first: true, predicate: ["list"], descendants: true }], ngImport: i0, template: `
104
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.2", type: PanelMenuSub, selector: "p-panelMenuSub, p-panelmenu-sub", inputs: { panelId: "panelId", focusedItemId: "focusedItemId", items: "items", itemTemplate: "itemTemplate", level: ["level", "level", numberAttribute], activeItemPath: "activeItemPath", root: ["root", "root", booleanAttribute], tabindex: ["tabindex", "tabindex", numberAttribute], transitionOptions: "transitionOptions", parentExpanded: ["parentExpanded", "parentExpanded", booleanAttribute] }, outputs: { itemToggle: "itemToggle", menuFocus: "menuFocus", menuBlur: "menuBlur", menuKeyDown: "menuKeyDown" }, viewQueries: [{ propertyName: "listViewChild", first: true, predicate: ["list"], descendants: true }], ngImport: i0, template: `
105
105
  <ul
106
106
  #list
107
107
  [ngClass]="{ 'p-panelmenu-submenu': true }"
@@ -237,7 +237,7 @@ export class PanelMenuSub {
237
237
  </ng-container>
238
238
  </div>
239
239
  <div class="p-toggleable-content" [@submenu]="getAnimation(processedItem)">
240
- <p-panelMenuSub
240
+ <p-panelmenu-sub
241
241
  *ngIf="isItemVisible(processedItem) && isItemGroup(processedItem) && isItemExpanded(processedItem)"
242
242
  [id]="getItemId(processedItem) + '_list'"
243
243
  [panelId]="panelId"
@@ -249,12 +249,12 @@ export class PanelMenuSub {
249
249
  [level]="level + 1"
250
250
  [parentExpanded]="!!parentExpanded && isItemExpanded(processedItem)"
251
251
  (itemToggle)="onItemToggle($event)"
252
- ></p-panelMenuSub>
252
+ ></p-panelmenu-sub>
253
253
  </div>
254
254
  </li>
255
255
  </ng-template>
256
256
  </ul>
257
- `, isInline: true, dependencies: [{ kind: "directive", type: i0.forwardRef(() => i1.NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgStyle), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(() => i2.RouterLink), selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i0.forwardRef(() => i2.RouterLinkActive), selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i0.forwardRef(() => i3.Tooltip), selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i0.forwardRef(() => AngleDownIcon), selector: "AngleDownIcon" }, { kind: "component", type: i0.forwardRef(() => AngleRightIcon), selector: "AngleRightIcon" }, { kind: "component", type: i0.forwardRef(() => PanelMenuSub), selector: "p-panelMenuSub", inputs: ["panelId", "focusedItemId", "items", "itemTemplate", "level", "activeItemPath", "root", "tabindex", "transitionOptions", "parentExpanded"], outputs: ["itemToggle", "menuFocus", "menuBlur", "menuKeyDown"] }], animations: [
257
+ `, isInline: true, dependencies: [{ kind: "directive", type: i0.forwardRef(() => i1.NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgStyle), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(() => i2.RouterLink), selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i0.forwardRef(() => i2.RouterLinkActive), selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i0.forwardRef(() => i3.Tooltip), selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i0.forwardRef(() => AngleDownIcon), selector: "AngleDownIcon" }, { kind: "component", type: i0.forwardRef(() => AngleRightIcon), selector: "AngleRightIcon" }, { kind: "component", type: i0.forwardRef(() => PanelMenuSub), selector: "p-panelMenuSub, p-panelmenu-sub", inputs: ["panelId", "focusedItemId", "items", "itemTemplate", "level", "activeItemPath", "root", "tabindex", "transitionOptions", "parentExpanded"], outputs: ["itemToggle", "menuFocus", "menuBlur", "menuKeyDown"] }], animations: [
258
258
  trigger('submenu', [
259
259
  state('hidden', style({
260
260
  height: '0',
@@ -270,7 +270,7 @@ export class PanelMenuSub {
270
270
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: PanelMenuSub, decorators: [{
271
271
  type: Component,
272
272
  args: [{
273
- selector: 'p-panelMenuSub',
273
+ selector: 'p-panelMenuSub, p-panelmenu-sub',
274
274
  template: `
275
275
  <ul
276
276
  #list
@@ -407,7 +407,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
407
407
  </ng-container>
408
408
  </div>
409
409
  <div class="p-toggleable-content" [@submenu]="getAnimation(processedItem)">
410
- <p-panelMenuSub
410
+ <p-panelmenu-sub
411
411
  *ngIf="isItemVisible(processedItem) && isItemGroup(processedItem) && isItemExpanded(processedItem)"
412
412
  [id]="getItemId(processedItem) + '_list'"
413
413
  [panelId]="panelId"
@@ -419,7 +419,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
419
419
  [level]="level + 1"
420
420
  [parentExpanded]="!!parentExpanded && isItemExpanded(processedItem)"
421
421
  (itemToggle)="onItemToggle($event)"
422
- ></p-panelMenuSub>
422
+ ></p-panelmenu-sub>
423
423
  </div>
424
424
  </li>
425
425
  </ng-template>
@@ -644,11 +644,19 @@ export class PanelMenuList {
644
644
  }
645
645
  onItemToggle(event) {
646
646
  const { processedItem, expanded } = event;
647
- processedItem.expanded = !processedItem.expanded;
647
+ // Update the original item object's 'expanded' property
648
+ if (processedItem.item) {
649
+ processedItem.item.expanded = !processedItem.item.expanded;
650
+ }
651
+ // Recreate processedItems with updated 'expanded' states
652
+ this.processedItems.set(this.createProcessedItems(this.items || [], 0, {}, ''));
653
+ // Update activeItemPath
648
654
  const activeItemPath = this.activeItemPath().filter((p) => p.parentKey !== processedItem.parentKey);
649
- expanded && activeItemPath.push(processedItem);
655
+ if (expanded) {
656
+ activeItemPath.push(processedItem);
657
+ }
650
658
  this.activeItemPath.set(activeItemPath);
651
- this.processedItems.update((value) => value.map((i) => (i === processedItem ? processedItem : i)));
659
+ // Update focusedItem
652
660
  this.focusedItem.set(processedItem);
653
661
  }
654
662
  onKeyDown(event) {
@@ -809,8 +817,8 @@ export class PanelMenuList {
809
817
  return matched;
810
818
  }
811
819
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: PanelMenuList, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
812
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.2", type: PanelMenuList, selector: "p-panelMenuList", inputs: { panelId: "panelId", id: "id", items: "items", itemTemplate: "itemTemplate", parentExpanded: ["parentExpanded", "parentExpanded", booleanAttribute], expanded: ["expanded", "expanded", booleanAttribute], transitionOptions: "transitionOptions", root: ["root", "root", booleanAttribute], tabindex: ["tabindex", "tabindex", numberAttribute], activeItem: "activeItem" }, outputs: { itemToggle: "itemToggle", headerFocus: "headerFocus" }, viewQueries: [{ propertyName: "subMenuViewChild", first: true, predicate: ["submenu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
813
- <p-panelMenuSub
820
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.2", type: PanelMenuList, selector: "p-panelMenuList, p-panel-menu-list", inputs: { panelId: "panelId", id: "id", items: "items", itemTemplate: "itemTemplate", parentExpanded: ["parentExpanded", "parentExpanded", booleanAttribute], expanded: ["expanded", "expanded", booleanAttribute], transitionOptions: "transitionOptions", root: ["root", "root", booleanAttribute], tabindex: ["tabindex", "tabindex", numberAttribute], activeItem: "activeItem" }, outputs: { itemToggle: "itemToggle", headerFocus: "headerFocus" }, viewQueries: [{ propertyName: "subMenuViewChild", first: true, predicate: ["submenu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
821
+ <p-panelmenu-sub
814
822
  #submenu
815
823
  [root]="true"
816
824
  [id]="panelId + '_list'"
@@ -826,15 +834,15 @@ export class PanelMenuList {
826
834
  (keydown)="onKeyDown($event)"
827
835
  (menuFocus)="onFocus($event)"
828
836
  (menuBlur)="onBlur($event)"
829
- ></p-panelMenuSub>
830
- `, isInline: true, dependencies: [{ kind: "component", type: PanelMenuSub, selector: "p-panelMenuSub", inputs: ["panelId", "focusedItemId", "items", "itemTemplate", "level", "activeItemPath", "root", "tabindex", "transitionOptions", "parentExpanded"], outputs: ["itemToggle", "menuFocus", "menuBlur", "menuKeyDown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
837
+ ></p-panelmenu-sub>
838
+ `, isInline: true, dependencies: [{ kind: "component", type: PanelMenuSub, selector: "p-panelMenuSub, p-panelmenu-sub", inputs: ["panelId", "focusedItemId", "items", "itemTemplate", "level", "activeItemPath", "root", "tabindex", "transitionOptions", "parentExpanded"], outputs: ["itemToggle", "menuFocus", "menuBlur", "menuKeyDown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
831
839
  }
832
840
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: PanelMenuList, decorators: [{
833
841
  type: Component,
834
842
  args: [{
835
- selector: 'p-panelMenuList',
843
+ selector: 'p-panelMenuList, p-panel-menu-list',
836
844
  template: `
837
- <p-panelMenuSub
845
+ <p-panelmenu-sub
838
846
  #submenu
839
847
  [root]="true"
840
848
  [id]="panelId + '_list'"
@@ -850,7 +858,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
850
858
  (keydown)="onKeyDown($event)"
851
859
  (menuFocus)="onFocus($event)"
852
860
  (menuBlur)="onBlur($event)"
853
- ></p-panelMenuSub>
861
+ ></p-panelmenu-sub>
854
862
  `,
855
863
  changeDetection: ChangeDetectionStrategy.OnPush,
856
864
  encapsulation: ViewEncapsulation.None,
@@ -1119,7 +1127,7 @@ export class PanelMenu extends BaseComponent {
1119
1127
  event.preventDefault();
1120
1128
  }
1121
1129
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: PanelMenu, deps: null, target: i0.ɵɵFactoryTarget.Component });
1122
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.2", type: PanelMenu, selector: "p-panelMenu", inputs: { model: "model", style: "style", styleClass: "styleClass", multiple: ["multiple", "multiple", booleanAttribute], transitionOptions: "transitionOptions", id: "id", tabindex: ["tabindex", "tabindex", numberAttribute] }, providers: [PanelMenuStyle], queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
1130
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.2", type: PanelMenu, selector: "p-panelMenu, p-panelmenu", inputs: { model: "model", style: "style", styleClass: "styleClass", multiple: ["multiple", "multiple", booleanAttribute], transitionOptions: "transitionOptions", id: "id", tabindex: ["tabindex", "tabindex", numberAttribute] }, providers: [PanelMenuStyle], queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
1123
1131
  <div [class]="styleClass" [ngStyle]="style" [ngClass]="'p-panelmenu p-component'" #container>
1124
1132
  <ng-container *ngFor="let item of model; let f = first; let l = last; let i = index">
1125
1133
  <div
@@ -1264,7 +1272,7 @@ export class PanelMenu extends BaseComponent {
1264
1272
  </div>
1265
1273
  </ng-container>
1266
1274
  </div>
1267
- `, isInline: true, dependencies: [{ kind: "directive", type: i0.forwardRef(() => i1.NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgStyle), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(() => i2.RouterLink), selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i0.forwardRef(() => i2.RouterLinkActive), selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i0.forwardRef(() => i3.Tooltip), selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i0.forwardRef(() => ChevronDownIcon), selector: "ChevronDownIcon" }, { kind: "component", type: i0.forwardRef(() => ChevronRightIcon), selector: "ChevronRightIcon" }, { kind: "component", type: i0.forwardRef(() => PanelMenuList), selector: "p-panelMenuList", inputs: ["panelId", "id", "items", "itemTemplate", "parentExpanded", "expanded", "transitionOptions", "root", "tabindex", "activeItem"], outputs: ["itemToggle", "headerFocus"] }], animations: [
1275
+ `, isInline: true, dependencies: [{ kind: "directive", type: i0.forwardRef(() => i1.NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgStyle), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(() => i2.RouterLink), selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i0.forwardRef(() => i2.RouterLinkActive), selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i0.forwardRef(() => i3.Tooltip), selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i0.forwardRef(() => ChevronDownIcon), selector: "ChevronDownIcon" }, { kind: "component", type: i0.forwardRef(() => ChevronRightIcon), selector: "ChevronRightIcon" }, { kind: "component", type: i0.forwardRef(() => PanelMenuList), selector: "p-panelMenuList, p-panel-menu-list", inputs: ["panelId", "id", "items", "itemTemplate", "parentExpanded", "expanded", "transitionOptions", "root", "tabindex", "activeItem"], outputs: ["itemToggle", "headerFocus"] }], animations: [
1268
1276
  trigger('rootItem', [
1269
1277
  state('hidden', style({
1270
1278
  height: '0',
@@ -1280,7 +1288,7 @@ export class PanelMenu extends BaseComponent {
1280
1288
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: PanelMenu, decorators: [{
1281
1289
  type: Component,
1282
1290
  args: [{
1283
- selector: 'p-panelMenu',
1291
+ selector: 'p-panelMenu, p-panelmenu',
1284
1292
  template: `
1285
1293
  <div [class]="styleClass" [ngStyle]="style" [ngClass]="'p-panelmenu p-component'" #container>
1286
1294
  <ng-container *ngFor="let item of model; let f = first; let l = last; let i = index">
@@ -1479,4 +1487,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
1479
1487
  declarations: [PanelMenu, PanelMenuSub, PanelMenuList],
1480
1488
  }]
1481
1489
  }] });
1482
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxtZW51LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL3BhbmVsbWVudS9wYW5lbG1lbnUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUVILHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsZUFBZSxFQUVmLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFFUixNQUFNLEVBSU4sU0FBUyxFQUNULGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sZUFBZSxFQUNmLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFZLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0s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QUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUM7b0JBQ3BJLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQztvQkFDL0QsWUFBWSxFQUFFLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUM7aUJBQ3pEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgY29tcHV0ZWQsXG4gICAgZm9yd2FyZFJlZixcbiAgICBpbmplY3QsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTWVudUl0ZW0sIFByaW1lVGVtcGxhdGUsIFNoYXJlZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IERvbUhhbmRsZXIgfSBmcm9tICdwcmltZW5nL2RvbSc7XG5pbXBvcnQgeyBBbmdsZURvd25JY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZWRvd24nO1xuaW1wb3J0IHsgQW5nbGVSaWdodEljb24gfSBmcm9tICdwcmltZW5nL2ljb25zL2FuZ2xlcmlnaHQnO1xuaW1wb3J0IHsgQ2hldnJvbkRvd25JY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9jaGV2cm9uZG93bic7XG5pbXBvcnQgeyBDaGV2cm9uUmlnaHRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9jaGV2cm9ucmlnaHQnO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5pbXBvcnQgeyBPYmplY3RVdGlscywgVW5pcXVlQ29tcG9uZW50SWQgfSBmcm9tICdwcmltZW5nL3V0aWxzJztcbmltcG9ydCB7IFBhbmVsTWVudVN0eWxlIH0gZnJvbSAnLi9zdHlsZS9wYW5lbG1lbnVzdHlsZSc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAncHJpbWVuZy9iYXNlY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLXBhbmVsTWVudVN1YicsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPHVsXG4gICAgICAgICAgICAjbGlzdFxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncC1wYW5lbG1lbnUtc3VibWVudSc6IHRydWUgfVwiXG4gICAgICAgICAgICByb2xlPVwidHJlZVwiXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cImZvY3VzZWRJdGVtSWRcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidtZW51J1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhcGFyZW50RXhwYW5kZWRcIlxuICAgICAgICAgICAgKGZvY3VzaW4pPVwibWVudUZvY3VzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZm9jdXNvdXQpPVwibWVudUJsdXIuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm1lbnVLZXlEb3duLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtcHJvY2Vzc2VkSXRlbSBsZXQtaW5kZXg9XCJpbmRleFwiIFtuZ0Zvck9mXT1cIml0ZW1zXCI+XG4gICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwicHJvY2Vzc2VkSXRlbS5zZXBhcmF0b3JcIiBjbGFzcz1cInAtbWVudWl0ZW0tc2VwYXJhdG9yXCIgcm9sZT1cInNlcGFyYXRvclwiPjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXByb2Nlc3NlZEl0ZW0uc2VwYXJhdG9yICYmIGlzSXRlbVZpc2libGUocHJvY2Vzc2VkSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRJdGVtQ2xhc3MocHJvY2Vzc2VkSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwidHJlZWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJnZXRJdGVtSWQocHJvY2Vzc2VkSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdsYWJlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0l0ZW1Hcm91cChwcm9jZXNzZWRJdGVtKSA/IGlzSXRlbUFjdGl2ZShwcm9jZXNzZWRJdGVtKSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGV2ZWxdPVwibGV2ZWwgKyAxXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZXRzaXplXT1cImdldEFyaWFTZXRTaXplKClcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXBvc2luc2V0XT1cImdldEFyaWFQb3NJbnNldChpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ3N0eWxlQ2xhc3MnKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5wLWhpZGRlbl09XCJwcm9jZXNzZWRJdGVtLnZpc2libGUgPT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnAtZm9jdXNdPVwiaXNJdGVtRm9jdXNlZChwcm9jZXNzZWRJdGVtKSAmJiAhaXNJdGVtRGlzYWJsZWQocHJvY2Vzc2VkSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnc3R5bGUnKVwiXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAndG9vbHRpcCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1wLWRpc2FibGVkXT1cImlzSXRlbURpc2FibGVkKHByb2Nlc3NlZEl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBPcHRpb25zXT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICd0b29sdGlwT3B0aW9ucycpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLW1lbnVpdGVtLWNvbnRlbnRcIiAoY2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50LCBwcm9jZXNzZWRJdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAncm91dGVyTGluaycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaHJlZl09XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAndXJsJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtcGFuZWxtZW51LWl0ZW0tbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3AtZGlzYWJsZWQnOiBnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnZGlzYWJsZWQnKSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAndGFyZ2V0JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ2FjdGlvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCIhIXBhcmVudEV4cGFuZGVkID8gJzAnIDogJy0xJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNJdGVtR3JvdXAocHJvY2Vzc2VkSXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcGFuZWxNZW51LnN1Ym1lbnVJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QW5nbGVEb3duSWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVDbGFzc109XCIncC1wYW5lbG1lbnUtc3VibWVudS1pY29uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJdGVtQWN0aXZlKHByb2Nlc3NlZEl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ2ljb25TdHlsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBbmdsZVJpZ2h0SWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVDbGFzc109XCIncC1wYW5lbG1lbnUtc3VibWVudS1pY29uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzSXRlbUFjdGl2ZShwcm9jZXNzZWRJdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdpY29uU3R5bGUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFuZWxNZW51LnN1Ym1lbnVJY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1wYW5lbG1lbnUtc3VibWVudS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInByb2Nlc3NlZEl0ZW0uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInByb2Nlc3NlZEl0ZW0uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnaWNvblN0eWxlJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtcGFuZWxtZW51LWl0ZW0tbGFiZWxcIiAqbmdJZj1cInByb2Nlc3NlZEl0ZW0uaXRlbT8uZXNjYXBlICE9PSBmYWxzZTsgZWxzZSBodG1sTGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ2xhYmVsJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaHRtbExhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PHNwYW4gY2xhc3M9XCJwLXBhbmVsbWVudS1pdGVtLWxhYmVsXCIgW2lubmVySFRNTF09XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnbGFiZWwnKVwiPjwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLW1lbnVpdGVtLWJhZGdlXCIgKm5nSWY9XCJwcm9jZXNzZWRJdGVtLmJhZGdlXCIgW25nQ2xhc3NdPVwicHJvY2Vzc2VkSXRlbS5iYWRnZVN0eWxlQ2xhc3NcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbS5iYWRnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAncm91dGVyTGluaycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ3JvdXRlckxpbmsnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAncXVlcnlQYXJhbXMnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIidwLXBhbmVsbWVudS1pdGVtLWxpbmstYWN0aXZlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAncm91dGVyTGlua0FjdGl2ZU9wdGlvbnMnKSB8fCB7IGV4YWN0OiBmYWxzZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLXBhbmVsbWVudS1pdGVtLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwLWRpc2FibGVkJzogZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ2Rpc2FibGVkJykgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwiZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ3RhcmdldCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ3RpdGxlJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZnJhZ21lbnRdPVwiZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ2ZyYWdtZW50JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAncXVlcnlQYXJhbXNIYW5kbGluZycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZXNlcnZlRnJhZ21lbnRdPVwiZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ3ByZXNlcnZlRnJhZ21lbnQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtza2lwTG9jYXRpb25DaGFuZ2VdPVwiZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ3NraXBMb2NhdGlvbkNoYW5nZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcGxhY2VVcmxdPVwiZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ3JlcGxhY2VVcmwnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnc3RhdGUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInYWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIiEhcGFyZW50RXhwYW5kZWQgPyAnMCcgOiAnLTEnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0l0ZW1Hcm91cChwcm9jZXNzZWRJdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwYW5lbE1lbnUuc3VibWVudUljb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBbmdsZURvd25JY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJdGVtQWN0aXZlKHByb2Nlc3NlZEl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlQ2xhc3NdPVwiJ3AtcGFuZWxtZW51LXN1Ym1lbnUtaWNvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnaWNvblN0eWxlJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFuZ2xlUmlnaHRJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzSXRlbUFjdGl2ZShwcm9jZXNzZWRJdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZUNsYXNzXT1cIidwLXBhbmVsbWVudS1zdWJtZW51LWljb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ2ljb25TdHlsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYW5lbE1lbnUuc3VibWVudUljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLXBhbmVsbWVudS1zdWJtZW51LWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicHJvY2Vzc2VkSXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicHJvY2Vzc2VkSXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdpY29uU3R5bGUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtcGFuZWxtZW51LWl0ZW0tbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnZXNjYXBlJykgIT09IGZhbHNlOyBlbHNlIGh0bWxSb3V0ZUxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnbGFiZWwnKSB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaHRtbFJvdXRlTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48c3BhbiBjbGFzcz1cInAtcGFuZWxtZW51LWl0ZW0tbGFiZWxcIiBbaW5uZXJIVE1MXT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdsYWJlbCcpXCI+PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLW1lbnVpdGVtLWJhZGdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicHJvY2Vzc2VkSXRlbS5iYWRnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnYmFkZ2VTdHlsZUNsYXNzJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdiYWRnZScpIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9jZXNzZWRJdGVtLml0ZW0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXRvZ2dsZWFibGUtY29udGVudFwiIFtAc3VibWVudV09XCJnZXRBbmltYXRpb24ocHJvY2Vzc2VkSXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLXBhbmVsTWVudVN1YlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJdGVtVmlzaWJsZShwcm9jZXNzZWRJdGVtKSAmJiBpc0l0ZW1Hcm91cChwcm9jZXNzZWRJdGVtKSAmJiBpc0l0ZW1FeHBhbmRlZChwcm9jZXNzZWRJdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldEl0ZW1JZChwcm9jZXNzZWRJdGVtKSArICdfbGlzdCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYW5lbElkXT1cInBhbmVsSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJwcm9jZXNzZWRJdGVtPy5pdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1UZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0cmFuc2l0aW9uT3B0aW9uc109XCJ0cmFuc2l0aW9uT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZvY3VzZWRJdGVtSWRdPVwiZm9jdXNlZEl0ZW1JZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1QYXRoXT1cImFjdGl2ZUl0ZW1QYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGV2ZWxdPVwibGV2ZWwgKyAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyZW50RXhwYW5kZWRdPVwiISFwYXJlbnRFeHBhbmRlZCAmJiBpc0l0ZW1FeHBhbmRlZChwcm9jZXNzZWRJdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW1Ub2dnbGUpPVwib25JdGVtVG9nZ2xlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcC1wYW5lbE1lbnVTdWI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3VsPlxuICAgIGAsXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdzdWJtZW51JywgW1xuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcwJyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcqJyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2aXNpYmxlIDw9PiBoaWRkZW4nLCBbYW5pbWF0ZSgne3t0cmFuc2l0aW9uUGFyYW1zfX0nKV0pLFxuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgYW5pbWF0ZSgwKSksXG4gICAgICAgIF0pLFxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgUGFuZWxNZW51U3ViIHtcbiAgICBASW5wdXQoKSBwYW5lbElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBmb2N1c2VkSXRlbUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBpdGVtczogYW55W107XG5cbiAgICBASW5wdXQoKSBpdGVtVGVtcGxhdGU6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgbGV2ZWw6IG51bWJlciA9IDA7XG5cbiAgICBASW5wdXQoKSBhY3RpdmVJdGVtUGF0aDogYW55W107XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcm9vdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHRhYmluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSB0cmFuc2l0aW9uT3B0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHBhcmVudEV4cGFuZGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgQE91dHB1dCgpIGl0ZW1Ub2dnbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBAT3V0cHV0KCkgbWVudUZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQE91dHB1dCgpIG1lbnVCbHVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQE91dHB1dCgpIG1lbnVLZXlEb3duOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnbGlzdCcpIGxpc3RWaWV3Q2hpbGQ6IEVsZW1lbnRSZWY7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IFBhbmVsTWVudSkpIHB1YmxpYyBwYW5lbE1lbnU6IFBhbmVsTWVudSxcbiAgICAgICAgcHVibGljIGVsOiBFbGVtZW50UmVmLFxuICAgICkge31cblxuICAgIGdldEl0ZW1JZChwcm9jZXNzZWRJdGVtKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzZWRJdGVtLml0ZW0/LmlkID8/IGAke3RoaXMucGFuZWxJZH1fJHtwcm9jZXNzZWRJdGVtLmtleX1gO1xuICAgIH1cblxuICAgIGdldEl0ZW1LZXkocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJdGVtSWQocHJvY2Vzc2VkSXRlbSk7XG4gICAgfVxuXG4gICAgZ2V0SXRlbUNsYXNzKHByb2Nlc3NlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdwLXBhbmVsbWVudS1pdGVtJzogdHJ1ZSxcbiAgICAgICAgICAgICdwLWRpc2FibGVkJzogdGhpcy5pc0l0ZW1EaXNhYmxlZChwcm9jZXNzZWRJdGVtKSxcbiAgICAgICAgICAgICdwLWZvY3VzJzogdGhpcy5pc0l0ZW1Gb2N1c2VkKHByb2Nlc3NlZEl0ZW0pLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sIG5hbWU/LCBwYXJhbXM/KSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzZWRJdGVtICYmIHByb2Nlc3NlZEl0ZW0uaXRlbSA/IE9iamVjdFV0aWxzLmdldEl0ZW1WYWx1ZShwcm9jZXNzZWRJdGVtLml0ZW1bbmFtZV0sIHBhcmFtcykgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZ2V0SXRlbUxhYmVsKHByb2Nlc3NlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ2xhYmVsJyk7XG4gICAgfVxuXG4gICAgaXNJdGVtRXhwYW5kZWQocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkSXRlbS5leHBhbmRlZDtcbiAgICB9XG5cbiAgICBpc0l0ZW1BY3RpdmUocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0l0ZW1FeHBhbmRlZChwcm9jZXNzZWRJdGVtKSB8fCB0aGlzLmFjdGl2ZUl0ZW1QYXRoLnNvbWUoKHBhdGgpID0+IHBhdGggJiYgcGF0aC5rZXkgPT09IHByb2Nlc3NlZEl0ZW0ua2V5KTtcbiAgICB9XG5cbiAgICBpc0l0ZW1WaXNpYmxlKHByb2Nlc3NlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ3Zpc2libGUnKSAhPT0gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNJdGVtRGlzYWJsZWQocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnZGlzYWJsZWQnKTtcbiAgICB9XG5cbiAgICBpc0l0ZW1Gb2N1c2VkKHByb2Nlc3NlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNlZEl0ZW1JZCA9PT0gdGhpcy5nZXRJdGVtSWQocHJvY2Vzc2VkSXRlbSk7XG4gICAgfVxuXG4gICAgaXNJdGVtR3JvdXAocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMuaXNOb3RFbXB0eShwcm9jZXNzZWRJdGVtLml0ZW1zKTtcbiAgICB9XG5cbiAgICBnZXRBbmltYXRpb24ocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0l0ZW1BY3RpdmUocHJvY2Vzc2VkSXRlbSlcbiAgICAgICAgICAgID8geyB2YWx1ZTogJ3Zpc2libGUnLCBwYXJhbXM6IHsgdHJhbnNpdGlvblBhcmFtczogdGhpcy50cmFuc2l0aW9uT3B0aW9ucywgaGVpZ2h0OiAnKicgfSB9XG4gICAgICAgICAgICA6IHsgdmFsdWU6ICdoaWRkZW4nLCBwYXJhbXM6IHsgdHJhbnNpdGlvblBhcmFtczogdGhpcy50cmFuc2l0aW9uT3B0aW9ucywgaGVpZ2h0OiAnMCcgfSB9O1xuICAgIH1cblxuICAgIGdldEFyaWFTZXRTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5maWx0ZXIoKHByb2Nlc3NlZEl0ZW0pID0+IHRoaXMuaXNJdGVtVmlzaWJsZShwcm9jZXNzZWRJdGVtKSAmJiAhdGhpcy5nZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnc2VwYXJhdG9yJykpXG4gICAgICAgICAgICAubGVuZ3RoO1xuICAgIH1cblxuICAgIGdldEFyaWFQb3NJbnNldChpbmRleCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5kZXggLVxuICAgICAgICAgICAgdGhpcy5pdGVtc1xuICAgICAgICAgICAgICAgIC5zbGljZSgwLCBpbmRleClcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChwcm9jZXNzZWRJdGVtKSA9PiB0aGlzLmlzSXRlbVZpc2libGUocHJvY2Vzc2VkSXRlbSkgJiYgdGhpcy5nZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnc2VwYXJhdG9yJykpLmxlbmd0aCArXG4gICAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb25JdGVtQ2xpY2soZXZlbnQsIHByb2Nlc3NlZEl0ZW0pIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzSXRlbURpc2FibGVkKHByb2Nlc3NlZEl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLmdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdjb21tYW5kJywgeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgaXRlbTogcHJvY2Vzc2VkSXRlbS5pdGVtIH0pO1xuICAgICAgICAgICAgdGhpcy5pdGVtVG9nZ2xlLmVtaXQoeyBwcm9jZXNzZWRJdGVtLCBleHBhbmRlZDogIXRoaXMuaXNJdGVtQWN0aXZlKHByb2Nlc3NlZEl0ZW0pIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JdGVtVG9nZ2xlKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXRlbVRvZ2dsZS5lbWl0KGV2ZW50KTtcbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncC1wYW5lbE1lbnVMaXN0JyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8cC1wYW5lbE1lbnVTdWJcbiAgICAgICAgICAgICNzdWJtZW51XG4gICAgICAgICAgICBbcm9vdF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtpZF09XCJwYW5lbElkICsgJ19saXN0J1wiXG4gICAgICAgICAgICBbcGFuZWxJZF09XCJwYW5lbElkXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgICBbaXRlbVRlbXBsYXRlXT1cIml0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICBbZm9jdXNlZEl0ZW1JZF09XCJmb2N1c2VkID8gZm9jdXNlZEl0ZW1JZCA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICBbYWN0aXZlSXRlbVBhdGhdPVwiYWN0aXZlSXRlbVBhdGgoKVwiXG4gICAgICAgICAgICBbdHJhbnNpdGlvbk9wdGlvbnNdPVwidHJhbnNpdGlvbk9wdGlvbnNcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cInByb2Nlc3NlZEl0ZW1zKClcIlxuICAgICAgICAgICAgW3BhcmVudEV4cGFuZGVkXT1cInBhcmVudEV4cGFuZGVkXCJcbiAgICAgICAgICAgIChpdGVtVG9nZ2xlKT1cIm9uSXRlbVRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChtZW51Rm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgIChtZW51Qmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICAgICAgID48L3AtcGFuZWxNZW51U3ViPlxuICAgIGAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgUGFuZWxNZW51TGlzdCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgcGFuZWxJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIGl0ZW1zOiBhbnlbXTtcblxuICAgIEBJbnB1dCgpIGl0ZW1UZW1wbGF0ZTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcGFyZW50RXhwYW5kZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZXhwYW5kZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSB0cmFuc2l0aW9uT3B0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJvb3Q6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgYWN0aXZlSXRlbTogYW55O1xuXG4gICAgQE91dHB1dCgpIGl0ZW1Ub2dnbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBAT3V0cHV0KCkgaGVhZGVyRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdzdWJtZW51Jykgc3ViTWVudVZpZXdDaGlsZDogUGFuZWxNZW51U3ViO1xuXG4gICAgc2VhcmNoVGltZW91dDogYW55O1xuXG4gICAgc2VhcmNoVmFsdWU6IGFueTtcblxuICAgIGZvY3VzZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBmb2N1c2VkSXRlbSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuXG4gICAgYWN0aXZlSXRlbVBhdGggPSBzaWduYWw8YW55W10+KFtdKTtcblxuICAgIHByb2Nlc3NlZEl0ZW1zID0gc2lnbmFsPGFueVtdPihbXSk7XG5cbiAgICB2aXNpYmxlSXRlbXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW1zID0gdGhpcy5wcm9jZXNzZWRJdGVtcygpO1xuICAgICAgICByZXR1cm4gdGhpcy5mbGF0SXRlbXMocHJvY2Vzc2VkSXRlbXMpO1xuICAgIH0pO1xuXG4gICAgZ2V0IGZvY3VzZWRJdGVtSWQoKSB7XG4gICAgICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gdGhpcy5mb2N1c2VkSXRlbSgpO1xuICAgICAgICByZXR1cm4gZm9jdXNlZEl0ZW0gJiYgZm9jdXNlZEl0ZW0uaXRlbT8uaWRcbiAgICAgICAgICAgID8gZm9jdXNlZEl0ZW0uaXRlbS5pZFxuICAgICAgICAgICAgOiBPYmplY3RVdGlscy5pc05vdEVtcHR5KHRoaXMuZm9jdXNlZEl0ZW0oKSlcbiAgICAgICAgICAgICAgPyBgJHt0aGlzLnBhbmVsSWR9XyR7dGhpcy5mb2N1c2VkSXRlbSgpLmtleX1gXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHt9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkSXRlbXMuc2V0KHRoaXMuY3JlYXRlUHJvY2Vzc2VkSXRlbXMoY2hhbmdlcz8uaXRlbXM/LmN1cnJlbnRWYWx1ZSB8fCB0aGlzLml0ZW1zIHx8IFtdKSk7XG4gICAgfVxuXG4gICAgZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgbmFtZSkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkSXRlbSAmJiBwcm9jZXNzZWRJdGVtLml0ZW0gPyBPYmplY3RVdGlscy5nZXRJdGVtVmFsdWUocHJvY2Vzc2VkSXRlbS5pdGVtW25hbWVdKSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXRJdGVtTGFiZWwocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnbGFiZWwnKTtcbiAgICB9XG5cbiAgICBpc0l0ZW1WaXNpYmxlKHByb2Nlc3NlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ3Zpc2libGUnKSAhPT0gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNJdGVtRGlzYWJsZWQocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnZGlzYWJsZWQnKTtcbiAgICB9XG5cbiAgICBpc0l0ZW1BY3RpdmUocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVJdGVtUGF0aCgpLnNvbWUoKHBhdGgpID0+IHBhdGgua2V5ID09PSBwcm9jZXNzZWRJdGVtLnBhcmVudEtleSk7XG4gICAgfVxuXG4gICAgaXNJdGVtR3JvdXAocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMuaXNOb3RFbXB0eShwcm9jZXNzZWRJdGVtLml0ZW1zKTtcbiAgICB9XG5cbiAgICBpc0VsZW1lbnRJblBhbmVsKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHBhbmVsID0gZXZlbnQuY3VycmVudFRhcmdldC5jbG9zZXN0KCdbZGF0YS1wYy1zZWN0aW9uPVwicGFuZWxcIl0nKTtcblxuICAgICAgICByZXR1cm4gcGFuZWwgJiYgcGFuZWwuY29udGFpbnMoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgaXNJdGVtTWF0Y2hlZChwcm9jZXNzZWRJdGVtKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRJdGVtKHByb2Nlc3NlZEl0ZW0pICYmXG4gICAgICAgICAgICB0aGlzLmdldEl0ZW1MYWJlbChwcm9jZXNzZWRJdGVtKS50b0xvY2FsZUxvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodGhpcy5zZWFyY2hWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzVmlzaWJsZUl0ZW0ocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gISFwcm9jZXNzZWRJdGVtICYmIChwcm9jZXNzZWRJdGVtLmxldmVsID09PSAwIHx8IHRoaXMuaXNJdGVtQWN0aXZlKHByb2Nlc3NlZEl0ZW0pKSAmJiB0aGlzLmlzSXRlbVZpc2libGUocHJvY2Vzc2VkSXRlbSk7XG4gICAgfVxuXG4gICAgaXNWYWxpZEl0ZW0ocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gISFwcm9jZXNzZWRJdGVtICYmICF0aGlzLmlzSXRlbURpc2FibGVkKHByb2Nlc3NlZEl0ZW0pICYmICFwcm9jZXNzZWRJdGVtLnNlcGFyYXRvcjtcbiAgICB9XG5cbiAgICBmaW5kRmlyc3RJdGVtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlSXRlbXMoKS5maW5kKChwcm9jZXNzZWRJdGVtKSA9PiB0aGlzLmlzVmFsaWRJdGVtKHByb2Nlc3NlZEl0ZW0pKTtcbiAgICB9XG5cbiAgICBmaW5kTGFzdEl0ZW0oKSB7XG4gICAgICAgIHJldHVybiBPYmplY3RVdGlscy5maW5kTGFzdCh0aGlzLnZpc2libGVJdGVtcygpLCAocHJvY2Vzc2VkSXRlbSkgPT4gdGhpcy5pc1ZhbGlkSXRlbShwcm9jZXNzZWRJdGVtKSk7XG4gICAgfVxuXG4gICAgZmluZEl0ZW1CeUV2ZW50VGFyZ2V0KHRhcmdldDogRXZlbnRUYXJnZXQpOiB1bmRlZmluZWQgfCBhbnkge1xuICAgICAgICBsZXQgcGFyZW50Tm9kZSA9IHRhcmdldCBhcyBQYXJlbnROb2RlICYgRWxlbWVudDtcblxuICAgICAgICB3aGlsZSAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgIT09ICdsaScpIHtcbiAgICAgICAgICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlPy5wYXJlbnROb2RlIGFzIEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcGFyZW50Tm9kZT8uaWQgJiZcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZUl0ZW1zKCkuZmluZChcbiAgICAgICAgICAgICAgICAocHJvY2Vzc2VkSXRlbSkgPT4gdGhpcy5pc1ZhbGlkSXRlbShwcm9jZXNzZWRJdGVtKSAmJiBgJHt0aGlzLnBhbmVsSWR9XyR7cHJvY2Vzc2VkSXRlbS5rZXl9YCA9PT0gcGFyZW50Tm9kZS5pZCxcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjcmVhdGVQcm9jZXNzZWRJdGVtcyhpdGVtcywgbGV2ZWwgPSAwLCBwYXJlbnQgPSB7fSwgcGFyZW50S2V5ID0gJycpIHtcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbXMgPSBbXTtcbiAgICAgICAgaXRlbXMgJiZcbiAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gKHBhcmVudEtleSAhPT0gJycgPyBwYXJlbnRLZXkgKyAnXycgOiAnJykgKyBpbmRleDtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiBpdGVtLmljb24sXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBpdGVtLmV4cGFuZGVkLFxuICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3I6IGl0ZW0uc2VwYXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRLZXksXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIG5ld0l0ZW1bJ2l0ZW1zJ10gPSB0aGlzLmNyZWF0ZVByb2Nlc3NlZEl0ZW1zKGl0ZW0uaXRlbXMsIGxldmVsICsgMSwgbmV3SXRlbSwga2V5KTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWRJdGVtcy5wdXNoKG5ld0l0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwcm9jZXNzZWRJdGVtcztcbiAgICB9XG5cbiAgICBmaW5kUHJvY2Vzc2VkSXRlbUJ5SXRlbUtleShrZXksIHByb2Nlc3NlZEl0ZW1zPywgbGV2ZWwgPSAwKSB7XG4gICAgICAgIHByb2Nlc3NlZEl0ZW1zID0gcHJvY2Vzc2VkSXRlbXMgfHwgdGhpcy5wcm9jZXNzZWRJdGVtcygpO1xuICAgICAgICBpZiAocHJvY2Vzc2VkSXRlbXMgJiYgcHJvY2Vzc2VkSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb2Nlc3NlZEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IHByb2Nlc3NlZEl0ZW1zW2ldO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ2tleScpID09PSBrZXkpIHJldHVybiBwcm9jZXNzZWRJdGVtO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRJdGVtID0gdGhpcy5maW5kUHJvY2Vzc2VkSXRlbUJ5SXRlbUtleShrZXksIHByb2Nlc3NlZEl0ZW0uaXRlbXMsIGxldmVsICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZWRJdGVtKSByZXR1cm4gbWF0Y2hlZEl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmbGF0SXRlbXMocHJvY2Vzc2VkSXRlbXMsIHByb2Nlc3NlZEZsYXR0ZW5JdGVtcyA9IFtdKSB7XG4gICAgICAgIHByb2Nlc3NlZEl0ZW1zICYmXG4gICAgICAgICAgICBwcm9jZXNzZWRJdGVtcy5mb3JFYWNoKChwcm9jZXNzZWRJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWaXNpYmxlSXRlbShwcm9jZXNzZWRJdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRGbGF0dGVuSXRlbXMucHVzaChwcm9jZXNzZWRJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mbGF0SXRlbXMocHJvY2Vzc2VkSXRlbS5pdGVtcywgcHJvY2Vzc2VkRmxhdHRlbkl0ZW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkRmxhdHRlbkl0ZW1zO1xuICAgIH1cblxuICAgIGNoYW5nZUZvY3VzZWRJdGVtKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsgb3JpZ2luYWxFdmVudCwgcHJvY2Vzc2VkSXRlbSwgZm9jdXNPbk5leHQsIHNlbGZDaGVjaywgYWxsb3dIZWFkZXJGb2N1cyA9IHRydWUgfSA9IGV2ZW50O1xuXG4gICAgICAgIGlmIChPYmplY3RVdGlscy5pc05vdEVtcHR5KHRoaXMuZm9jdXNlZEl0ZW0oKSkgJiYgdGhpcy5mb2N1c2VkSXRlbSgpLmtleSAhPT0gcHJvY2Vzc2VkSXRlbS5rZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEl0ZW0uc2V0KHByb2Nlc3NlZEl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxJblZpZXcoKTtcbiAgICAgICAgfSBlbHNlIGlmIChhbGxvd0hlYWRlckZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLmhlYWRlckZvY3VzLmVtaXQoeyBvcmlnaW5hbEV2ZW50LCBmb2N1c09uTmV4dCwgc2VsZkNoZWNrIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2Nyb2xsSW5WaWV3KCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKHRoaXMuc3ViTWVudVZpZXdDaGlsZC5saXN0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQsIGBsaVtpZD1cIiR7YCR7dGhpcy5mb2N1c2VkSXRlbUlkfWB9XCJdYCk7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcgJiYgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcsIGlubGluZTogJ25lYXJlc3QnIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Gb2N1cyhldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWRJdGVtID1cbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJdGVtKCkgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5pc0VsZW1lbnRJblBhbmVsKGV2ZW50LCBldmVudC5yZWxhdGVkVGFyZ2V0KVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZmluZEl0ZW1CeUV2ZW50VGFyZ2V0KGV2ZW50LnRhcmdldCkgfHwgdGhpcy5maW5kRmlyc3RJdGVtKClcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmZpbmRMYXN0SXRlbSgpKTtcbiAgICAgICAgICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0ICE9PSBudWxsKSB0aGlzLmZvY3VzZWRJdGVtLnNldChmb2N1c2VkSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkJsdXIoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcblxuICAgICAgICBpZiAodGhpcy5mb2N1c2VkICYmICF0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRJdGVtLnNldChudWxsKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSXRlbVRvZ2dsZShldmVudCkge1xuICAgICAgICBjb25zdCB7IHByb2Nlc3NlZEl0ZW0sIGV4cGFuZGVkIH0gPSBldmVudDtcbiAgICAgICAgcHJvY2Vzc2VkSXRlbS5leHBhbmRlZCA9ICFwcm9jZXNzZWRJdGVtLmV4cGFuZGVkO1xuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW1QYXRoID0gdGhpcy5hY3RpdmVJdGVtUGF0aCgpLmZpbHRlcigocCkgPT4gcC5wYXJlbnRLZXkgIT09IHByb2Nlc3NlZEl0ZW0ucGFyZW50S2V5KTtcbiAgICAgICAgZXhwYW5kZWQgJiYgYWN0aXZlSXRlbVBhdGgucHVzaChwcm9jZXNzZWRJdGVtKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZUl0ZW1QYXRoLnNldChhY3RpdmVJdGVtUGF0aCk7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkSXRlbXMudXBkYXRlKCh2YWx1ZSkgPT4gdmFsdWUubWFwKChpKSA9PiAoaSA9PT0gcHJvY2Vzc2VkSXRlbSA/IHByb2Nlc3NlZEl0ZW0gOiBpKSkpO1xuICAgICAgICB0aGlzLmZvY3VzZWRJdGVtLnNldChwcm9jZXNzZWRJdGVtKTtcbiAgICB9XG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgbWV0YUtleSA9IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuY3RybEtleTtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkFycm93RG93bktleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd1VwS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXJyb3dMZWZ0S2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkFycm93UmlnaHRLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdIb21lJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uSG9tZUtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVuZEtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ1NwYWNlJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uU3BhY2VLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVudGVyS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgICBjYXNlICdQYWdlRG93bic6XG4gICAgICAgICAgICBjYXNlICdQYWdlVXAnOlxuICAgICAgICAgICAgY2FzZSAnQmFja3NwYWNlJzpcbiAgICAgICAgICAgIGNhc2UgJ1NoaWZ0TGVmdCc6XG4gICAgICAgICAgICBjYXNlICdTaGlmdFJpZ2h0JzpcbiAgICAgICAgICAgICAgICAvL05PT1BcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoIW1ldGFLZXkgJiYgT2JqZWN0VXRpbHMuaXNQcmludGFibGVDaGFyYWN0ZXIoZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEl0ZW1zKGV2ZW50LCBldmVudC5rZXkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25BcnJvd0Rvd25LZXkoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IE9iamVjdFV0aWxzLmlzTm90RW1wdHkodGhpcy5mb2N1c2VkSXRlbSgpKSA/IHRoaXMuZmluZE5leHRJdGVtKHRoaXMuZm9jdXNlZEl0ZW0oKSkgOiB0aGlzLmZpbmRGaXJzdEl0ZW0oKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VGb2N1c2VkSXRlbSh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBwcm9jZXNzZWRJdGVtLCBmb2N1c09uTmV4dDogdHJ1ZSB9KTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgb25BcnJvd1VwS2V5KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW0gPSBPYmplY3RVdGlscy5pc05vdEVtcHR5KHRoaXMuZm9jdXNlZEl0ZW0oKSkgPyB0aGlzLmZpbmRQcmV2SXRlbSh0aGlzLmZvY3VzZWRJdGVtKCkpIDogdGhpcy5maW5kTGFzdEl0ZW0oKTtcblxuICAgICAgICB0aGlzLmNoYW5nZUZvY3VzZWRJdGVtKHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIHByb2Nlc3NlZEl0ZW0sIHNlbGZDaGVjazogdHJ1ZSB9KTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkFycm93TGVmdEtleShldmVudCkge1xuICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNOb3RFbXB0eSh0aGlzLmZvY3VzZWRJdGVtKCkpKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gdGhpcy5hY3RpdmVJdGVtUGF0aCgpLnNvbWUoKHApID0+IHAua2V5ID09PSB0aGlzLmZvY3VzZWRJdGVtKCkua2V5KTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVJdGVtUGF0aCA9IHRoaXMuYWN0aXZlSXRlbVBhdGgoKS5maWx0ZXIoKHApID0+IHAua2V5ICE9PSB0aGlzLmZvY3VzZWRJdGVtKCkua2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUl0ZW1QYXRoLnNldChhY3RpdmVJdGVtUGF0aCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gT2JqZWN0VXRpbHMuaXNOb3RFbXB0eSh0aGlzLmZvY3VzZWRJdGVtKCkucGFyZW50KSA/IHRoaXMuZm9jdXNlZEl0ZW0oKS5wYXJlbnQgOiB0aGlzLmZvY3VzZWRJdGVtKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkSXRlbS5zZXQoZm9jdXNlZEl0ZW0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25BcnJvd1JpZ2h0S2V5KGV2ZW50KSB7XG4gICAgICAgIGlmIChPYmplY3RVdGlscy5pc05vdEVtcHR5KHRoaXMuZm9jdXNlZEl0ZW0oKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB0aGlzLmlzSXRlbUdyb3VwKHRoaXMuZm9jdXNlZEl0ZW0oKSk7XG5cbiAgICAgICAgICAgIGlmIChncm91cGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IHRoaXMuYWN0aXZlSXRlbVBhdGgoKS5zb21lKChwKSA9PiBwLmtleSA9PT0gdGhpcy5mb2N1c2VkSXRlbSgpLmtleSk7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQXJyb3dEb3duS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVJdGVtUGF0aCA9IHRoaXMuYWN0aXZlSXRlbVBhdGgoKS5maWx0ZXIoKHApID0+IHAucGFyZW50S2V5ICE9PSB0aGlzLmZvY3VzZWRJdGVtKCkucGFyZW50S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXRlbVBhdGgucHVzaCh0aGlzLmZvY3VzZWRJdGVtKCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSXRlbVBhdGguc2V0KGFjdGl2ZUl0ZW1QYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkhvbWVLZXkoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VGb2N1c2VkSXRlbSh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBwcm9jZXNzZWRJdGVtOiB0aGlzLmZpbmRGaXJzdEl0ZW0oKSwgYWxsb3dIZWFkZXJGb2N1czogZmFsc2UgfSk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25FbmRLZXkoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VGb2N1c2VkSXRlbSh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBwcm9jZXNzZWRJdGVtOiB0aGlzLmZpbmRMYXN0SXRlbSgpLCBmb2N1c09uTmV4dDogdHJ1ZSwgYWxsb3dIZWFkZXJGb2N1czogZmFsc2UgfSk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25FbnRlcktleShldmVudCkge1xuICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNOb3RFbXB0eSh0aGlzLmZvY3VzZWRJdGVtKCkpKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKHRoaXMuc3ViTWVudVZpZXdDaGlsZC5saXN0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQsIGBsaVtpZD1cIiR7YCR7dGhpcy5mb2N1c2VkSXRlbUlkfWB9XCJdYCk7XG4gICAgICAgICAgICBjb25zdCBhbmNob3JFbGVtZW50ID1cbiAgICAgICAgICAgICAgICBlbGVtZW50ICYmIChEb21IYW5kbGVyLmZpbmRTaW5nbGUoZWxlbWVudCwgJ1tkYXRhLXBjLXNlY3Rpb249XCJhY3Rpb25cIl0nKSB8fCBEb21IYW5kbGVyLmZpbmRTaW5nbGUoZWxlbWVudCwgJ2EsYnV0dG9uJykpO1xuXG4gICAgICAgICAgICBhbmNob3JFbGVtZW50ID8gYW5jaG9yRWxlbWVudC5jbGljaygpIDogZWxlbWVudCAmJiBlbGVtZW50LmNsaWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uU3BhY2VLZXkoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbkVudGVyS2V5KGV2ZW50KTtcbiAgICB9XG5cbiAgICBmaW5kTmV4dEl0ZW0ocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudmlzaWJsZUl0ZW1zKCkuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmtleSA9PT0gcHJvY2Vzc2VkSXRlbS5rZXkpO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoZWRJdGVtID1cbiAgICAgICAgICAgIGluZGV4IDwgdGhpcy52aXNpYmxlSXRlbXMoKS5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgPyB0aGlzLnZpc2libGVJdGVtcygpXG4gICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGluZGV4ICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICAuZmluZCgocEl0ZW0pID0+IHRoaXMuaXNWYWxpZEl0ZW0ocEl0ZW0pKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gbWF0Y2hlZEl0ZW0gfHwgcHJvY2Vzc2VkSXRlbTtcbiAgICB9XG5cbiAgICBmaW5kUHJldkl0ZW0ocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudmlzaWJsZUl0ZW1zKCkuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmtleSA9PT0gcHJvY2Vzc2VkSXRlbS5rZXkpO1xuICAgICAgICBjb25zdCBtYXRjaGVkSXRlbSA9XG4gICAgICAgICAgICBpbmRleCA+IDAgPyBPYmplY3RVdGlscy5maW5kTGFzdCh0aGlzLnZpc2libGVJdGVtcygpLnNsaWNlKDAsIGluZGV4KSwgKHBJdGVtKSA9PiB0aGlzLmlzVmFsaWRJdGVtKHBJdGVtKSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIG1hdGNoZWRJdGVtIHx8IHByb2Nlc3NlZEl0ZW07XG4gICAgfVxuXG4gICAgc2VhcmNoSXRlbXMoZXZlbnQsIGNoYXIpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICh0aGlzLnNlYXJjaFZhbHVlIHx8ICcnKSArIGNoYXI7XG5cbiAgICAgICAgbGV0IG1hdGNoZWRJdGVtID0gbnVsbDtcbiAgICAgICAgbGV0IG1hdGNoZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNOb3RFbXB0eSh0aGlzLmZvY3VzZWRJdGVtKCkpKSB7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkSXRlbUluZGV4ID0gdGhpcy52aXNpYmxlSXRlbXMoKS5maW5kSW5kZXgoKHByb2Nlc3NlZEl0ZW0pID0+IHByb2Nlc3NlZEl0ZW0ua2V5ID09PSB0aGlzLmZvY3VzZWRJdGVtKCkua2V5KTtcblxuICAgICAgICAgICAgbWF0Y2hlZEl0ZW0gPSB0aGlzLnZpc2libGVJdGVtcygpXG4gICAgICAgICAgICAgICAgLnNsaWNlKGZvY3VzZWRJdGVtSW5kZXgpXG4gICAgICAgICAgICAgICAgLmZpbmQoKHByb2Nlc3NlZEl0ZW0pID0+IHRoaXMuaXNJdGVtTWF0Y2hlZChwcm9jZXNzZWRJdGVtKSk7XG4gICAgICAgICAgICBtYXRjaGVkSXRlbSA9IE9iamVjdFV0aWxzLmlzRW1wdHkobWF0Y2hlZEl0ZW0pXG4gICAgICAgICAgICAgICAgPyB0aGlzLnZpc2libGVJdGVtcygpXG4gICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsIGZvY3VzZWRJdGVtSW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgLmZpbmQoKHByb2Nlc3NlZEl0ZW0pID0+IHRoaXMuaXNJdGVtTWF0Y2hlZChwcm9jZXNzZWRJdGVtKSlcbiAgICAgICAgICAgICAgICA6IG1hdGNoZWRJdGVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWF0Y2hlZEl0ZW0gPSB0aGlzLnZpc2libGVJdGVtcygpLmZpbmQoKHByb2Nlc3NlZEl0ZW0pID0+IHRoaXMuaXNJdGVtTWF0Y2hlZChwcm9jZXNzZWRJdGVtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNOb3RFbXB0eShtYXRjaGVkSXRlbSkpIHtcbiAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzRW1wdHkobWF0Y2hlZEl0ZW0pICYmIE9iamVjdFV0aWxzLmlzRW1wdHkodGhpcy5mb2N1c2VkSXRlbSgpKSkge1xuICAgICAgICAgICAgbWF0Y2hlZEl0ZW0gPSB0aGlzLmZpbmRGaXJzdEl0ZW0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChPYmplY3RVdGlscy5pc05vdEVtcHR5KG1hdGNoZWRJdGVtKSkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VGb2N1c2VkSXRlbSh7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbTogbWF0Y2hlZEl0ZW0sXG4gICAgICAgICAgICAgICAgYWxsb3dIZWFkZXJGb2N1czogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9LCA1MDApO1xuXG4gICAgICAgIHJldHVybiBtYXRjaGVkO1xuICAgIH1cbn1cblxuLyoqXG4gKiBQYW5lbE1lbnUgaXMgYSBoeWJyaWQgb2YgQWNjb3JkaW9uIGFuZCBUcmVlIGNvbXBvbmVudHMuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3AtcGFuZWxNZW51JyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8ZGl2IFtjbGFzc109XCJzdHlsZUNsYXNzXCIgW25nU3R5bGVdPVwic3R5bGVcIiBbbmdDbGFzc109XCIncC1wYW5lbG1lbnUgcC1jb21wb25lbnQnXCIgI2NvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbW9kZWw7IGxldCBmID0gZmlyc3Q7IGxldCBsID0gbGFzdDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0l0ZW1WaXNpYmxlKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLXBhbmVsbWVudS1wYW5lbFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICdoZWFkZXJDbGFzcycpXCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ3N0eWxlJylcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ3BhbmVsJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3AtY29tcG9uZW50IHAtcGFuZWxtZW51LWhlYWRlcic6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3AtcGFuZWxtZW51LWhlYWRlci1hY3RpdmUnOiBpc0l0ZW1BY3RpdmUoaXRlbSkgJiYgISFpdGVtLml0ZW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwLWRpc2FibGVkJzogaXNJdGVtRGlzYWJsZWQoaXRlbSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJnZXRJdGVtUHJvcChpdGVtLCAnc3R5bGVDbGFzcycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICdzdHlsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJnZXRJdGVtUHJvcChpdGVtLCAndG9vbHRpcCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImdldEhlYWRlcklkKGl0ZW0sIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBPcHRpb25zXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICd0b29sdGlwT3B0aW9ucycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNJdGVtQWN0aXZlKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ2xhYmVsJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJnZXRDb250ZW50SWQoaXRlbSwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0l0ZW1EaXNhYmxlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXAtaGlnaGxpZ2h0XT1cImlzSXRlbUFjdGl2ZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXAtZGlzYWJsZWRdPVwiaXNJdGVtRGlzYWJsZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidoZWFkZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkhlYWRlckNsaWNrKCRldmVudCwgaXRlbSwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25IZWFkZXJLZXlEb3duKCRldmVudCwgaXRlbSwgaSlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1wYW5lbG1lbnUtaGVhZGVyLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW1UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZ2V0SXRlbVByb3AoaXRlbSwgJ3JvdXRlckxpbmsnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5ocmVmXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICd1cmwnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cImdldEl0ZW1Qcm9wKGl0ZW0sICd0YXJnZXQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJnZXRJdGVtUHJvcChpdGVtLCAndGl0bGUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtcGFuZWxtZW51LWhlYWRlci1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInaGVhZGVyYWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0l0ZW1Hcm91cChpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3VibWVudUljb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hldnJvbkRvd25JY29uIFtzdHlsZUNsYXNzXT1cIidwLXBhbmVsbWVudS1zdWJtZW51LWljb24nXCIgKm5nSWY9XCJpc0l0ZW1BY3RpdmUoaXRlbSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hldnJvblJpZ2h0SWNvbiBbc3R5bGVDbGFzc109XCIncC1wYW5lbG1lbnUtc3VibWVudS1pY29uJ1wiICpuZ0lmPVwiIWlzSXRlbUFjdGl2ZShpdGVtKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VibWVudUljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLXBhbmVsbWVudS1zdWJtZW51LWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICdpY29uU3R5bGUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLXBhbmVsbWVudS1oZWFkZXItbGFiZWxcIiAqbmdJZj1cImdldEl0ZW1Qcm9wKGl0ZW0sICdlc2NhcGUnKSAhPT0gZmFsc2U7IGVsc2UgaHRtbExhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRJdGVtUHJvcChpdGVtLCAnbGFiZWwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2h0bWxMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48c3BhbiBjbGFzcz1cInAtcGFuZWxtZW51LWhlYWRlci1sYWJlbFwiIFtpbm5lckhUTUxdPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ2xhYmVsJylcIj48L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtbWVudWl0ZW0tYmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ2JhZGdlJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICdiYWRnZVN0eWxlQ2xhc3MnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGdldEl0ZW1Qcm9wKGl0ZW0sICdiYWRnZScpIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRJdGVtUHJvcChpdGVtLCAncm91dGVyTGluaycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ3JvdXRlckxpbmsnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJnZXRJdGVtUHJvcChpdGVtLCAncXVlcnlQYXJhbXMnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIidwLXBhbmVsbWVudS1pdGVtLWxpbmstYWN0aXZlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJnZXRJdGVtUHJvcChpdGVtLCAncm91dGVyTGlua0FjdGl2ZU9wdGlvbnMnKSB8fCB7IGV4YWN0OiBmYWxzZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJnZXRJdGVtUHJvcChpdGVtLCAndGFyZ2V0JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtcGFuZWxtZW51LWhlYWRlci1hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcmFnbWVudF09XCJnZXRJdGVtUHJvcChpdGVtLCAnZnJhZ21lbnQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtxdWVyeVBhcmFtc0hhbmRsaW5nXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICdxdWVyeVBhcmFtc0hhbmRsaW5nJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlc2VydmVGcmFnbWVudF09XCJnZXRJdGVtUHJvcChpdGVtLCAncHJlc2VydmVGcmFnbWVudCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NraXBMb2NhdGlvbkNoYW5nZV09XCJnZXRJdGVtUHJvcChpdGVtLCAnc2tpcExvY2F0aW9uQ2hhbmdlJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVwbGFjZVVybF09XCJnZXRJdGVtUHJvcChpdGVtLCAncmVwbGFjZVVybCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICdzdGF0ZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidoZWFkZXJhY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0l0ZW1Hcm91cChpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzdWJtZW51SWNvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoZXZyb25Eb3duSWNvbiBbc3R5bGVDbGFzc109XCIncC1wYW5lbG1lbnUtc3VibWVudS1pY29uJ1wiICpuZ0lmPVwiaXNJdGVtQWN0aXZlKGl0ZW0pXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hldnJvblJpZ2h0SWNvbiBbc3R5bGVDbGFzc109XCIncC1wYW5lbG1lbnUtc3VibWVudS1pY29uJ1wiICpuZ0lmPVwiIWlzSXRlbUFjdGl2ZShpdGVtKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN1Ym1lbnVJY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1wYW5lbG1lbnUtc3VibWVudS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRJdGVtUHJvcChpdGVtLCAnaWNvblN0eWxlJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtcGFuZWxtZW51LWhlYWRlci1sYWJlbFwiICpuZ0lmPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ2VzY2FwZScpICE9PSBmYWxzZTsgZWxzZSBodG1sUm91dGVMYWJlbFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRJdGVtUHJvcChpdGVtLCAnbGFiZWwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNodG1sUm91dGVMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxzcGFuIGNsYXNzPVwicC1wYW5lbG1lbnUtaGVhZGVyLWxhYmVsXCIgW2lubmVySFRNTF09XCJnZXRJdGVtUHJvcChpdGVtLCAnbGFiZWwnKVwiPjwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1tZW51aXRlbS1iYWRnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldEl0ZW1Qcm9wKGl0ZW0sICdiYWRnZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICdiYWRnZVN0eWxlQ2xhc3MnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgZ2V0SXRlbVByb3AoaXRlbSwgJ2JhZGdlJykgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0l0ZW1Hcm91cChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtcGFuZWxtZW51LWNvbnRlbnQtY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtAcm9vdEl0ZW1dPVwiZ2V0QW5pbWF0aW9uKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChAcm9vdEl0ZW0uZG9uZSk9XCJvblRvZ2dsZURvbmUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicmVnaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImdldENvbnRlbnRJZChpdGVtLCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiZ2V0SGVhZGVySWQoaXRlbSwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIid0b2dnbGVhYmxlY29udGVudCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncC1wYW5lbG1lbnUtZXhwYW5kZWQnOiBpc0l0ZW1BY3RpdmUoaXRlbSkgfVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXBhbmVsbWVudS1jb250ZW50XCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidtZW51Y29udGVudCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1wYW5lbE1lbnVMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYW5lbElkXT1cImdldFBhbmVsSWQoaSwgaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ2l0ZW1zJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbVRlbXBsYXRlXT1cIml0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0cmFuc2l0aW9uT3B0aW9uc109XCJ0cmFuc2l0aW9uT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb290XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyZW50RXhwYW5kZWRdPVwiaXNJdGVtQWN0aXZlKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhlYWRlckZvY3VzKT1cInVwZGF0ZUZvY3VzZWRIZWFkZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcC1wYW5lbE1lbnVMaXN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIGAsXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdyb290SXRlbScsIFtcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMCcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ3Zpc2libGUnLFxuICAgICAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnKicsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdHJhbnNpdGlvbigndmlzaWJsZSA8PT4gaGlkZGVuJywgW2FuaW1hdGUoJ3t7dHJhbnNpdGlvblBhcmFtc319JyldKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIGFuaW1hdGUoMCkpLFxuICAgICAgICBdKSxcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbUGFuZWxNZW51U3R5bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBQYW5lbE1lbnUgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgbWVudWl0ZW1zLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIG1vZGVsOiBNZW51SXRlbVtdIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIElubGluZSBzdHlsZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHN0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFN0eWxlIGNsYXNzIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc3R5bGVDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgbXVsdGlwbGUgdGFicyBjYW4gYmUgYWN0aXZhdGVkIGF0IHRoZSBzYW1lIHRpbWUgb3Igbm90LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFRyYW5zaXRpb24gb3B0aW9ucyBvZiB0aGUgYW5pbWF0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRyYW5zaXRpb25PcHRpb25zOiBzdHJpbmcgPSAnNDAwbXMgY3ViaWMtYmV6aWVyKDAuODYsIDAsIDAuMDcsIDEpJztcbiAgICAvKipcbiAgICAgKiBDdXJyZW50IGlkIHN0YXRlIGFzIGEgc3RyaW5nLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSW5kZXggb2YgdGhlIGVsZW1lbnQgaW4gdGFiYmluZyBvcmRlci5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gMDtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oUHJpbWVUZW1wbGF0ZSkgdGVtcGxhdGVzOiBRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWQ7XG5cbiAgICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXJWaWV3Q2hpbGQ6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgICBzdWJtZW51SWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgcHVibGljIGFuaW1hdGluZzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIGFjdGl2ZUl0ZW0gPSBzaWduYWw8YW55PihudWxsKTtcblxuICAgIF9jb21wb25lbnRTdHlsZSA9IGluamVjdChQYW5lbE1lbnVTdHlsZSk7XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5pZCA9IHRoaXMuaWQgfHwgVW5pcXVlQ29tcG9uZW50SWQoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVzPy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0uZ2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3VibWVudWljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1lbnVJY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGFwc2VzIG9wZW4gcGFuZWxzLlxuICAgICAqIEBncm91cCBNZXRob2RcbiAgICAgKi9cbiAgICBjb2xsYXBzZUFsbCgpIHtcbiAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLm1vZGVsISkge1xuICAgICAgICAgICAgaWYgKGl0ZW0uZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvblRvZ2dsZURvbmUoKSB7XG4gICAgICAgIHRoaXMuYW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgY2hhbmdlQWN0aXZlSXRlbShldmVudCwgaXRlbSwgaW5kZXg/OiBudW1iZXIsIHNlbGZBY3RpdmUgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNJdGVtRGlzYWJsZWQoaXRlbSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSBzZWxmQWN0aXZlID8gaXRlbSA6IHRoaXMuYWN0aXZlSXRlbSAmJiBPYmplY3RVdGlscy5lcXVhbHMoaXRlbSwgdGhpcy5hY3RpdmVJdGVtKSA/IG51bGwgOiBpdGVtO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVJdGVtLnNldChhY3RpdmVJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEFuaW1hdGlvbihpdGVtOiBNZW51SXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS5leHBhbmRlZFxuICAgICAgICAgICAgPyB7IHZhbHVlOiAndmlzaWJsZScsIHBhcmFtczogeyB0cmFuc2l0aW9uUGFyYW1zOiB0aGlzLmFuaW1hdGluZyA/IHRoaXMudHJhbnNpdGlvbk9wdGlvbnMgOiAnMG1zJywgaGVpZ2h0OiAnKicgfSB9XG4gICAgICAgICAgICA6IHsgdmFsdWU6ICdoaWRkZW4nLCBwYXJhbXM6IHsgdHJhbnNpdGlvblBhcmFtczogdGhpcy50cmFuc2l0aW9uT3B0aW9ucywgaGVpZ2h0OiAnMCcgfSB9O1xuICAgIH1cblxuICAgIGdldEl0ZW1Qcm9wKGl0ZW0sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gPyBPYmplY3RVdGlscy5nZXRJdGVtVmFsdWUoaXRlbVtuYW1lXSkgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZ2V0SXRlbUxhYmVsKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbVByb3AoaXRlbSwgJ2xhYmVsJyk7XG4gICAgfVxuXG4gICAgaXNJdGVtQWN0aXZlKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgaXNJdGVtVmlzaWJsZShpdGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1Qcm9wKGl0ZW0sICd2aXNpYmxlJykgIT09IGZhbHNlO1xuICAgIH1cblxuICAgIGlzSXRlbURpc2FibGVkKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbVByb3AoaXRlbSwgJ2Rpc2FibGVkJyk7XG4gICAgfVxuXG4gICAgaXNJdGVtR3JvdXAoaXRlbSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMuaXNOb3RFbXB0eShpdGVtLml0ZW1zKTtcbiAgICB9XG5cbiAgICBnZXRQYW5lbElkKGluZGV4LCBpdGVtPykge1xuICAgICAgICByZXR1cm4gaXRlbSAmJiBpdGVtLmlkID8gaXRlbS5pZCA6IGAke3RoaXMuaWR9XyR7aW5kZXh9YDtcbiAgICB9XG5cbiAgICBnZXRIZWFkZXJJZChpdGVtLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gaXRlbS5pZCA/IGl0ZW0uaWQgKyAnX2hlYWRlcicgOiBgJHt0aGlzLmdldFBhbmVsSWQoaW5kZXgpfV9oZWFkZXJgO1xuICAgIH1cblxuICAgIGdldENvbnRlbnRJZChpdGVtLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gaXRlbS5pZCA/IGl0ZW0uaWQgKyAnX2NvbnRlbnQnIDogYCR7dGhpcy5nZXRQYW5lbElkKGluZGV4KX1fY29udGVudGA7XG4gICAgfVxuXG4gICAgdXBkYXRlRm9jdXNlZEhlYWRlcihldmVudCkge1xuICAgICAgICBjb25zdCB7IG9yaWdpbmFsRXZlbnQsIGZvY3VzT25OZXh0LCBzZWxmQ2hlY2sgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBwYW5lbEVsZW1lbnQgPSBvcmlnaW5hbEV2ZW50LmN1cnJlbnRUYXJnZXQuY2xvc2VzdCgnW2RhdGEtcGMtc2VjdGlvbj1cInBhbmVsXCJdJyk7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IHNlbGZDaGVja1xuICAgICAgICAgICAgPyBEb21IYW5kbGVyLmZpbmRTaW5nbGUocGFuZWxFbGVtZW50LCAnW2RhdGEtcGMtc2VjdGlvbj1cImhlYWRlclwiXScpXG4gICAgICAgICAgICA6IGZvY3VzT25OZXh0XG4gICAgICAgICAgICAgID8gdGhpcy5maW5kTmV4dEhlYWRlcihwYW5lbEVsZW1lbnQpXG4gICAgICAgICAgICAgIDogdGhpcy5maW5kUHJldkhlYWRlcihwYW5lbEVsZW1lbnQpO1xuXG4gICAgICAgIGhlYWRlclxuICAgICAgICAgICAgPyB0aGlzLmNoYW5nZUZvY3VzZWRIZWFkZXIob3JpZ2luYWxFdmVudCwgaGVhZGVyKVxuICAgICAgICAgICAgOiBmb2N1c09uTmV4dFxuICAgICAgICAgICAgICA/IHRoaXMub25IZWFkZXJIb21lS2V5KG9yaWdpbmFsRXZlbnQpXG4gICAgICAgICAgICAgIDogdGhpcy5vbkhlYWRlckVuZEtleShvcmlnaW5hbEV2ZW50KTtcbiAgICB9XG5cbiAgICBjaGFuZ2VGb2N1c2VkSGVhZGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQgJiYgRG9tSGFuZGxlci5mb2N1cyhlbGVtZW50KTtcbiAgICB9XG5cbiAgICBmaW5kTmV4dEhlYWRlcihwYW5lbEVsZW1lbnQsIHNlbGZDaGVjayA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IG5leHRQYW5lbEVsZW1lbnQgPSBzZWxmQ2hlY2sgPyBwYW5lbEVsZW1lbnQgOiBwYW5lbEVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICBjb25zdCBoZWFkZXJFbGVtZW50ID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKG5leHRQYW5lbEVsZW1lbnQsICdbZGF0YS1wYy1zZWN0aW9uPVwiaGVhZGVyXCJdJyk7XG5cbiAgICAgICAgcmV0dXJuIGhlYWRlckVsZW1lbnRcbiAgICAgICAgICAgID8gRG9tSGFuZGxlci5nZXRBdHRyaWJ1dGUoaGVhZGVyRWxlbWVudCwgJ2RhdGEtcC1kaXNhYmxlZCcpXG4gICAgICAgICAgICAgICAgPyB0aGlzLmZpbmROZXh0SGVhZGVyKGhlYWRlckVsZW1lbnQucGFyZW50RWxlbWVudClcbiAgICAgICAgICAgICAgICA6IGhlYWRlckVsZW1lbnRcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBmaW5kUHJldkhlYWRlcihwYW5lbEVsZW1lbnQsIHNlbGZDaGVjayA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHByZXZQYW5lbEVsZW1lbnQgPSBzZWxmQ2hlY2sgPyBwYW5lbEVsZW1lbnQgOiBwYW5lbEVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICAgICAgY29uc3QgaGVhZGVyRWxlbWVudCA9IERvbUhhbmRsZXIuZmluZFNpbmdsZShwcmV2UGFuZWxFbGVtZW50LCAnW2RhdGEtcGMtc2VjdGlvbj1cImhlYWRlclwiXScpO1xuXG4gICAgICAgIHJldHVybiBoZWFkZXJFbGVtZW50XG4gICAgICAgICAgICA/IERvbUhhbmRsZXIuZ2V0QXR0cmlidXRlKGhlYWRlckVsZW1lbnQsICdkYXRhLXAtZGlzYWJsZWQnKVxuICAgICAgICAgICAgICAgID8gdGhpcy5maW5kUHJldkhlYWRlcihoZWFkZXJFbGVtZW50LnBhcmVudEVsZW1lbnQpXG4gICAgICAgICAgICAgICAgOiBoZWFkZXJFbGVtZW50XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuXG4gICAgZmluZEZpcnN0SGVhZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kTmV4dEhlYWRlcih0aGlzLmNvbnRhaW5lclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLCB0cnVlKTtcbiAgICB9XG5cbiAgICBmaW5kTGFzdEhlYWRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZFByZXZIZWFkZXIodGhpcy5jb250YWluZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5sYXN0RWxlbWVudENoaWxkLCB0cnVlKTtcbiAgICB9XG5cbiAgICBvbkhlYWRlckNsaWNrKGV2ZW50LCBpdGVtLCBpbmRleCkge1xuICAgICAgICBpZiAodGhpcy5pc0l0ZW1EaXNhYmxlZChpdGVtKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0uY29tbWFuZCkge1xuICAgICAgICAgICAgaXRlbS5jb21tYW5kKHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIGl0ZW0gfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG1vZGVsSXRlbSBvZiB0aGlzLm1vZGVsISkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtICE9PSBtb2RlbEl0ZW0gJiYgbW9kZWxJdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsSXRlbS5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGl0ZW0uZXhwYW5kZWQgPSAhaXRlbS5leHBhbmRlZDtcbiAgICAgICAgdGhpcy5jaGFuZ2VBY3RpdmVJdGVtKGV2ZW50LCBpdGVtLCBpbmRleCk7XG4gICAgICAgIHRoaXMuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgRG9tSGFuZGxlci5mb2N1cyhldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICB9XG5cbiAgICBvbkhlYWRlcktleURvd24oZXZlbnQsIGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uSGVhZGVyQXJyb3dEb3duS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkhlYWRlckFycm93VXBLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdIb21lJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uSGVhZGVySG9tZUtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkhlYWRlckVuZEtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgICAgIGNhc2UgJ1NwYWNlJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uSGVhZGVyRW50ZXJLZXkoZXZlbnQsIGl0ZW0sIGluZGV4KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSGVhZGVyQXJyb3dEb3duS2V5KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHJvb3RMaXN0ID1cbiAgICAgICAgICAgIERvbUhhbmRsZXIuZ2V0QXR0cmlidXRlKGV2ZW50LmN1cnJlbnRUYXJnZXQsICdkYXRhLXAtaGlnaGxpZ2h0JykgPT09IHRydWVcbiAgICAgICAgICAgICAgICA/IERvbUhhbmRsZXIuZmluZFNpbmdsZShldmVudC5jdXJyZW50VGFyZ2V0Lm5leHRFbGVtZW50U2libGluZywgJ1tkYXRhLXBjLXNlY3Rpb249XCJtZW51XCJdJylcbiAgICAgICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgcm9vdExpc3QgPyBEb21IYW5kbGVyLmZvY3VzKHJvb3RMaXN0KSA6IHRoaXMudXBkYXRlRm9jdXNlZEhlYWRlcih7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBmb2N1c09uTmV4dDogdHJ1ZSB9KTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkhlYWRlckFycm93VXBLZXkoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgcHJldkhlYWRlciA9IHRoaXMuZmluZFByZXZIZWFkZXIoZXZlbnQuY3VycmVudFRhcmdldC5wYXJlbnRFbGVtZW50KSB8fCB0aGlzLmZpbmRMYXN0SGVhZGVyKCk7XG4gICAgICAgIGNvbnN0IHJvb3RMaXN0ID1cbiAgICAgICAgICAgIERvbUhhbmRsZXIuZ2V0QXR0cmlidXRlKHByZXZIZWFkZXIsICdkYXRhLXAtaGlnaGxpZ2h0JykgPT09IHRydWVcbiAgICAgICAgICAgICAgICA/IERvbUhhbmRsZXIuZmluZFNpbmdsZShwcmV2SGVhZGVyLm5leHRFbGVtZW50U2libGluZywgJ1tkYXRhLXBjLXNlY3Rpb249XCJtZW51XCJdJylcbiAgICAgICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgcm9vdExpc3QgPyBEb21IYW5kbGVyLmZvY3VzKHJvb3RMaXN0KSA6IHRoaXMudXBkYXRlRm9jdXNlZEhlYWRlcih7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBmb2N1c09uTmV4dDogZmFsc2UgfSk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25IZWFkZXJIb21lS2V5KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuY2hhbmdlRm9jdXNlZEhlYWRlcihldmVudCwgdGhpcy5maW5kRmlyc3RIZWFkZXIoKSk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25IZWFkZXJFbmRLZXkoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VGb2N1c2VkSGVhZGVyKGV2ZW50LCB0aGlzLmZpbmRMYXN0SGVhZGVyKCkpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uSGVhZGVyRW50ZXJLZXkoZXZlbnQsIGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGhlYWRlckFjdGlvbiA9IERvbUhhbmRsZXIuZmluZFNpbmdsZShldmVudC5jdXJyZW50VGFyZ2V0LCAnW2RhdGEtcGMtc2VjdGlvbj1cImhlYWRlcmFjdGlvblwiXScpO1xuXG4gICAgICAgIGhlYWRlckFjdGlvbiA/IGhlYWRlckFjdGlvbi5jbGljaygpIDogdGhpcy5vbkhlYWRlckNsaWNrKGV2ZW50LCBpdGVtLCBpbmRleCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxufVxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSb3V0ZXJNb2R1bGUsIFRvb2x0aXBNb2R1bGUsIFNoYXJlZE1vZHVsZSwgQW5nbGVEb3duSWNvbiwgQW5nbGVSaWdodEljb24sIENoZXZyb25Eb3duSWNvbiwgQ2hldnJvblJpZ2h0SWNvbl0sXG4gICAgZXhwb3J0czogW1BhbmVsTWVudSwgUm91dGVyTW9kdWxlLCBUb29sdGlwTW9kdWxlLCBTaGFyZWRNb2R1bGVdLFxuICAgIGRlY2xhcmF0aW9uczogW1BhbmVsTWVudSwgUGFuZWxNZW51U3ViLCBQYW5lbE1lbnVMaXN0XSxcbn0pXG5leHBvcnQgY2xhc3MgUGFuZWxNZW51TW9kdWxlIHt9XG4iXX0=
1490
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxtZW51LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL3BhbmVsbWVudS9wYW5lbG1lbnUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUVILGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixlQUFlLEVBRWYsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsZUFBZSxFQUVmLE1BQU0sRUFFTixNQUFNLEVBR04sU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFZLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0s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OUcsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZOzsyRkFHckQsZUFBZTtrQkFMM0IsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUM7b0JBQ3BJLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQztvQkFDL0QsWUFBWSxFQUFFLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUM7aUJBQ3pEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdCxcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIHNpZ25hbCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTWVudUl0ZW0sIFByaW1lVGVtcGxhdGUsIFNoYXJlZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IERvbUhhbmRsZXIgfSBmcm9tICdwcmltZW5nL2RvbSc7XG5pbXBvcnQgeyBBbmdsZURvd25JY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZWRvd24nO1xuaW1wb3J0IHsgQW5nbGVSaWdodEljb24gfSBmcm9tICdwcmltZW5nL2ljb25zL2FuZ2xlcmlnaHQnO1xuaW1wb3J0IHsgQ2hldnJvbkRvd25JY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9jaGV2cm9uZG93bic7XG5pbXBvcnQgeyBDaGV2cm9uUmlnaHRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9jaGV2cm9ucmlnaHQnO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5pbXBvcnQgeyBPYmplY3RVdGlscywgVW5pcXVlQ29tcG9uZW50SWQgfSBmcm9tICdwcmltZW5nL3V0aWxzJztcbmltcG9ydCB7IFBhbmVsTWVudVN0eWxlIH0gZnJvbSAnLi9zdHlsZS9wYW5lbG1lbnVzdHlsZSc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAncHJpbWVuZy9iYXNlY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLXBhbmVsTWVudVN1YiwgcC1wYW5lbG1lbnUtc3ViJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8dWxcbiAgICAgICAgICAgICNsaXN0XG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwLXBhbmVsbWVudS1zdWJtZW51JzogdHJ1ZSB9XCJcbiAgICAgICAgICAgIHJvbGU9XCJ0cmVlXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiZm9jdXNlZEl0ZW1JZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ21lbnUnXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIiFwYXJlbnRFeHBhbmRlZFwiXG4gICAgICAgICAgICAoZm9jdXNpbik9XCJtZW51Rm9jdXMuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChmb2N1c291dCk9XCJtZW51Qmx1ci5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwibWVudUtleURvd24uZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1wcm9jZXNzZWRJdGVtIGxldC1pbmRleD1cImluZGV4XCIgW25nRm9yT2ZdPVwiaXRlbXNcIj5cbiAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJwcm9jZXNzZWRJdGVtLnNlcGFyYXRvclwiIGNsYXNzPVwicC1tZW51aXRlbS1zZXBhcmF0b3JcIiByb2xlPVwic2VwYXJhdG9yXCI+PC9saT5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcHJvY2Vzc2VkSXRlbS5zZXBhcmF0b3IgJiYgaXNJdGVtVmlzaWJsZShwcm9jZXNzZWRJdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEl0ZW1DbGFzcyhwcm9jZXNzZWRJdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImdldEl0ZW1JZChwcm9jZXNzZWRJdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ2xhYmVsJylcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzSXRlbUdyb3VwKHByb2Nlc3NlZEl0ZW0pID8gaXNJdGVtQWN0aXZlKHByb2Nlc3NlZEl0ZW0pIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sZXZlbF09XCJsZXZlbCArIDFcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNldHNpemVdPVwiZ2V0QXJpYVNldFNpemUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcG9zaW5zZXRdPVwiZ2V0QXJpYVBvc0luc2V0KGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnc3R5bGVDbGFzcycpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnAtaGlkZGVuXT1cInByb2Nlc3NlZEl0ZW0udmlzaWJsZSA9PT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MucC1mb2N1c109XCJpc0l0ZW1Gb2N1c2VkKHByb2Nlc3NlZEl0ZW0pICYmICFpc0l0ZW1EaXNhYmxlZChwcm9jZXNzZWRJdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdzdHlsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICd0b29sdGlwJylcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXAtZGlzYWJsZWRdPVwiaXNJdGVtRGlzYWJsZWQocHJvY2Vzc2VkSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE9wdGlvbnNdPVwiZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ3Rvb2x0aXBPcHRpb25zJylcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtbWVudWl0ZW0tY29udGVudFwiIChjbGljayk9XCJvbkl0ZW1DbGljaygkZXZlbnQsIHByb2Nlc3NlZEl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW1UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdyb3V0ZXJMaW5rJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5ocmVmXT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICd1cmwnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1wYW5lbG1lbnUtaXRlbS1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncC1kaXNhYmxlZCc6IGdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdkaXNhYmxlZCcpIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICd0YXJnZXQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInYWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIiEhcGFyZW50RXhwYW5kZWQgPyAnMCcgOiAnLTEnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0l0ZW1Hcm91cChwcm9jZXNzZWRJdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwYW5lbE1lbnUuc3VibWVudUljb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBbmdsZURvd25JY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZUNsYXNzXT1cIidwLXBhbmVsbWVudS1zdWJtZW51LWljb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0l0ZW1BY3RpdmUocHJvY2Vzc2VkSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnaWNvblN0eWxlJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFuZ2xlUmlnaHRJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZUNsYXNzXT1cIidwLXBhbmVsbWVudS1zdWJtZW51LWljb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNJdGVtQWN0aXZlKHByb2Nlc3NlZEl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ2ljb25TdHlsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYW5lbE1lbnUuc3VibWVudUljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLXBhbmVsbWVudS1zdWJtZW51LWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicHJvY2Vzc2VkSXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicHJvY2Vzc2VkSXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdpY29uU3R5bGUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1wYW5lbG1lbnUtaXRlbS1sYWJlbFwiICpuZ0lmPVwicHJvY2Vzc2VkSXRlbS5pdGVtPy5lc2NhcGUgIT09IGZhbHNlOyBlbHNlIGh0bWxMYWJlbFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnbGFiZWwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNodG1sTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48c3BhbiBjbGFzcz1cInAtcGFuZWxtZW51LWl0ZW0tbGFiZWxcIiBbaW5uZXJIVE1MXT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdsYWJlbCcpXCI+PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtbWVudWl0ZW0tYmFkZ2VcIiAqbmdJZj1cInByb2Nlc3NlZEl0ZW0uYmFkZ2VcIiBbbmdDbGFzc109XCJwcm9jZXNzZWRJdGVtLmJhZGdlU3R5bGVDbGFzc1wiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRJdGVtLmJhZGdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdyb3V0ZXJMaW5rJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAncm91dGVyTGluaycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdxdWVyeVBhcmFtcycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiJ3AtcGFuZWxtZW51LWl0ZW0tbGluay1hY3RpdmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdyb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucycpIHx8IHsgZXhhY3Q6IGZhbHNlIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtcGFuZWxtZW51LWl0ZW0tbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3AtZGlzYWJsZWQnOiBnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnZGlzYWJsZWQnKSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAndGFyZ2V0JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAndGl0bGUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcmFnbWVudF09XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnZnJhZ21lbnQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtxdWVyeVBhcmFtc0hhbmRsaW5nXT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdxdWVyeVBhcmFtc0hhbmRsaW5nJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlc2VydmVGcmFnbWVudF09XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAncHJlc2VydmVGcmFnbWVudCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NraXBMb2NhdGlvbkNoYW5nZV09XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnc2tpcExvY2F0aW9uQ2hhbmdlJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVwbGFjZVVybF09XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAncmVwbGFjZVVybCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdzdGF0ZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidhY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiISFwYXJlbnRFeHBhbmRlZCA/ICcwJyA6ICctMSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzSXRlbUdyb3VwKHByb2Nlc3NlZEl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXBhbmVsTWVudS5zdWJtZW51SWNvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFuZ2xlRG93bkljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0l0ZW1BY3RpdmUocHJvY2Vzc2VkSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVDbGFzc109XCIncC1wYW5lbG1lbnUtc3VibWVudS1pY29uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdpY29uU3R5bGUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QW5nbGVSaWdodEljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNJdGVtQWN0aXZlKHByb2Nlc3NlZEl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlQ2xhc3NdPVwiJ3AtcGFuZWxtZW51LXN1Ym1lbnUtaWNvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnaWNvblN0eWxlJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInBhbmVsTWVudS5zdWJtZW51SWNvblRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtcGFuZWxtZW51LXN1Ym1lbnUtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJwcm9jZXNzZWRJdGVtLmljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwcm9jZXNzZWRJdGVtLmljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ2ljb25TdHlsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1wYW5lbG1lbnUtaXRlbS1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdlc2NhcGUnKSAhPT0gZmFsc2U7IGVsc2UgaHRtbFJvdXRlTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdsYWJlbCcpIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNodG1sUm91dGVMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxzcGFuIGNsYXNzPVwicC1wYW5lbG1lbnUtaXRlbS1sYWJlbFwiIFtpbm5lckhUTUxdPVwiZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ2xhYmVsJylcIj48L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtbWVudWl0ZW0tYmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwcm9jZXNzZWRJdGVtLmJhZGdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdiYWRnZVN0eWxlQ2xhc3MnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ2JhZGdlJykgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHByb2Nlc3NlZEl0ZW0uaXRlbSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtdG9nZ2xlYWJsZS1jb250ZW50XCIgW0BzdWJtZW51XT1cImdldEFuaW1hdGlvbihwcm9jZXNzZWRJdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtcGFuZWxtZW51LXN1YlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJdGVtVmlzaWJsZShwcm9jZXNzZWRJdGVtKSAmJiBpc0l0ZW1Hcm91cChwcm9jZXNzZWRJdGVtKSAmJiBpc0l0ZW1FeHBhbmRlZChwcm9jZXNzZWRJdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldEl0ZW1JZChwcm9jZXNzZWRJdGVtKSArICdfbGlzdCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYW5lbElkXT1cInBhbmVsSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJwcm9jZXNzZWRJdGVtPy5pdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1UZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0cmFuc2l0aW9uT3B0aW9uc109XCJ0cmFuc2l0aW9uT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZvY3VzZWRJdGVtSWRdPVwiZm9jdXNlZEl0ZW1JZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1QYXRoXT1cImFjdGl2ZUl0ZW1QYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGV2ZWxdPVwibGV2ZWwgKyAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyZW50RXhwYW5kZWRdPVwiISFwYXJlbnRFeHBhbmRlZCAmJiBpc0l0ZW1FeHBhbmRlZChwcm9jZXNzZWRJdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW1Ub2dnbGUpPVwib25JdGVtVG9nZ2xlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcC1wYW5lbG1lbnUtc3ViPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC91bD5cbiAgICBgLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcignc3VibWVudScsIFtcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMCcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ3Zpc2libGUnLFxuICAgICAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnKicsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdHJhbnNpdGlvbigndmlzaWJsZSA8PT4gaGlkZGVuJywgW2FuaW1hdGUoJ3t7dHJhbnNpdGlvblBhcmFtc319JyldKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIGFuaW1hdGUoMCkpLFxuICAgICAgICBdKSxcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIFBhbmVsTWVudVN1YiB7XG4gICAgQElucHV0KCkgcGFuZWxJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgZm9jdXNlZEl0ZW1JZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgaXRlbXM6IGFueVtdO1xuXG4gICAgQElucHV0KCkgaXRlbVRlbXBsYXRlOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIGxldmVsOiBudW1iZXIgPSAwO1xuXG4gICAgQElucHV0KCkgYWN0aXZlSXRlbVBhdGg6IGFueVtdO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJvb3Q6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgdHJhbnNpdGlvbk9wdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBwYXJlbnRFeHBhbmRlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIEBPdXRwdXQoKSBpdGVtVG9nZ2xlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQE91dHB1dCgpIG1lbnVGb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIEBPdXRwdXQoKSBtZW51Qmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIEBPdXRwdXQoKSBtZW51S2V5RG93bjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2xpc3QnKSBsaXN0Vmlld0NoaWxkOiBFbGVtZW50UmVmO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBQYW5lbE1lbnUpKSBwdWJsaWMgcGFuZWxNZW51OiBQYW5lbE1lbnUsXG4gICAgICAgIHB1YmxpYyBlbDogRWxlbWVudFJlZixcbiAgICApIHt9XG5cbiAgICBnZXRJdGVtSWQocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkSXRlbS5pdGVtPy5pZCA/PyBgJHt0aGlzLnBhbmVsSWR9XyR7cHJvY2Vzc2VkSXRlbS5rZXl9YDtcbiAgICB9XG5cbiAgICBnZXRJdGVtS2V5KHByb2Nlc3NlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUlkKHByb2Nlc3NlZEl0ZW0pO1xuICAgIH1cblxuICAgIGdldEl0ZW1DbGFzcyhwcm9jZXNzZWRJdGVtKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAncC1wYW5lbG1lbnUtaXRlbSc6IHRydWUsXG4gICAgICAgICAgICAncC1kaXNhYmxlZCc6IHRoaXMuaXNJdGVtRGlzYWJsZWQocHJvY2Vzc2VkSXRlbSksXG4gICAgICAgICAgICAncC1mb2N1cyc6IHRoaXMuaXNJdGVtRm9jdXNlZChwcm9jZXNzZWRJdGVtKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCBuYW1lPywgcGFyYW1zPykge1xuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkSXRlbSAmJiBwcm9jZXNzZWRJdGVtLml0ZW0gPyBPYmplY3RVdGlscy5nZXRJdGVtVmFsdWUocHJvY2Vzc2VkSXRlbS5pdGVtW25hbWVdLCBwYXJhbXMpIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGdldEl0ZW1MYWJlbChwcm9jZXNzZWRJdGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICdsYWJlbCcpO1xuICAgIH1cblxuICAgIGlzSXRlbUV4cGFuZGVkKHByb2Nlc3NlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3NlZEl0ZW0uZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgaXNJdGVtQWN0aXZlKHByb2Nlc3NlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJdGVtRXhwYW5kZWQocHJvY2Vzc2VkSXRlbSkgfHwgdGhpcy5hY3RpdmVJdGVtUGF0aC5zb21lKChwYXRoKSA9PiBwYXRoICYmIHBhdGgua2V5ID09PSBwcm9jZXNzZWRJdGVtLmtleSk7XG4gICAgfVxuXG4gICAgaXNJdGVtVmlzaWJsZShwcm9jZXNzZWRJdGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1Qcm9wKHByb2Nlc3NlZEl0ZW0sICd2aXNpYmxlJykgIT09IGZhbHNlO1xuICAgIH1cblxuICAgIGlzSXRlbURpc2FibGVkKHByb2Nlc3NlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ2Rpc2FibGVkJyk7XG4gICAgfVxuXG4gICAgaXNJdGVtRm9jdXNlZChwcm9jZXNzZWRJdGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvY3VzZWRJdGVtSWQgPT09IHRoaXMuZ2V0SXRlbUlkKHByb2Nlc3NlZEl0ZW0pO1xuICAgIH1cblxuICAgIGlzSXRlbUdyb3VwKHByb2Nlc3NlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdFV0aWxzLmlzTm90RW1wdHkocHJvY2Vzc2VkSXRlbS5pdGVtcyk7XG4gICAgfVxuXG4gICAgZ2V0QW5pbWF0aW9uKHByb2Nlc3NlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJdGVtQWN0aXZlKHByb2Nlc3NlZEl0ZW0pXG4gICAgICAgICAgICA/IHsgdmFsdWU6ICd2aXNpYmxlJywgcGFyYW1zOiB7IHRyYW5zaXRpb25QYXJhbXM6IHRoaXMudHJhbnNpdGlvbk9wdGlvbnMsIGhlaWdodDogJyonIH0gfVxuICAgICAgICAgICAgOiB7IHZhbHVlOiAnaGlkZGVuJywgcGFyYW1zOiB7IHRyYW5zaXRpb25QYXJhbXM6IHRoaXMudHJhbnNpdGlvbk9wdGlvbnMsIGhlaWdodDogJzAnIH0gfTtcbiAgICB9XG5cbiAgICBnZXRBcmlhU2V0U2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlsdGVyKChwcm9jZXNzZWRJdGVtKSA9PiB0aGlzLmlzSXRlbVZpc2libGUocHJvY2Vzc2VkSXRlbSkgJiYgIXRoaXMuZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ3NlcGFyYXRvcicpKVxuICAgICAgICAgICAgLmxlbmd0aDtcbiAgICB9XG5cbiAgICBnZXRBcmlhUG9zSW5zZXQoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGluZGV4IC1cbiAgICAgICAgICAgIHRoaXMuaXRlbXNcbiAgICAgICAgICAgICAgICAuc2xpY2UoMCwgaW5kZXgpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigocHJvY2Vzc2VkSXRlbSkgPT4gdGhpcy5pc0l0ZW1WaXNpYmxlKHByb2Nlc3NlZEl0ZW0pICYmIHRoaXMuZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ3NlcGFyYXRvcicpKS5sZW5ndGggK1xuICAgICAgICAgICAgMVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG9uSXRlbUNsaWNrKGV2ZW50LCBwcm9jZXNzZWRJdGVtKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0l0ZW1EaXNhYmxlZChwcm9jZXNzZWRJdGVtKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnY29tbWFuZCcsIHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIGl0ZW06IHByb2Nlc3NlZEl0ZW0uaXRlbSB9KTtcbiAgICAgICAgICAgIHRoaXMuaXRlbVRvZ2dsZS5lbWl0KHsgcHJvY2Vzc2VkSXRlbSwgZXhwYW5kZWQ6ICF0aGlzLmlzSXRlbUFjdGl2ZShwcm9jZXNzZWRJdGVtKSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSXRlbVRvZ2dsZShldmVudCkge1xuICAgICAgICB0aGlzLml0ZW1Ub2dnbGUuZW1pdChldmVudCk7XG4gICAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3AtcGFuZWxNZW51TGlzdCwgcC1wYW5lbC1tZW51LWxpc3QnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxwLXBhbmVsbWVudS1zdWJcbiAgICAgICAgICAgICNzdWJtZW51XG4gICAgICAgICAgICBbcm9vdF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtpZF09XCJwYW5lbElkICsgJ19saXN0J1wiXG4gICAgICAgICAgICBbcGFuZWxJZF09XCJwYW5lbElkXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgICBbaXRlbVRlbXBsYXRlXT1cIml0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICBbZm9jdXNlZEl0ZW1JZF09XCJmb2N1c2VkID8gZm9jdXNlZEl0ZW1JZCA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICBbYWN0aXZlSXRlbVBhdGhdPVwiYWN0aXZlSXRlbVBhdGgoKVwiXG4gICAgICAgICAgICBbdHJhbnNpdGlvbk9wdGlvbnNdPVwidHJhbnNpdGlvbk9wdGlvbnNcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cInByb2Nlc3NlZEl0ZW1zKClcIlxuICAgICAgICAgICAgW3BhcmVudEV4cGFuZGVkXT1cInBhcmVudEV4cGFuZGVkXCJcbiAgICAgICAgICAgIChpdGVtVG9nZ2xlKT1cIm9uSXRlbVRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChtZW51Rm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgIChtZW51Qmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICAgICAgID48L3AtcGFuZWxtZW51LXN1Yj5cbiAgICBgLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIFBhbmVsTWVudUxpc3QgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpIHBhbmVsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIGlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBpdGVtczogYW55W107XG5cbiAgICBASW5wdXQoKSBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcGFyZW50RXhwYW5kZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZXhwYW5kZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSB0cmFuc2l0aW9uT3B0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJvb3Q6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgYWN0aXZlSXRlbTogYW55O1xuXG4gICAgQE91dHB1dCgpIGl0ZW1Ub2dnbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBAT3V0cHV0KCkgaGVhZGVyRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdzdWJtZW51Jykgc3ViTWVudVZpZXdDaGlsZDogUGFuZWxNZW51U3ViO1xuXG4gICAgc2VhcmNoVGltZW91dDogYW55O1xuXG4gICAgc2VhcmNoVmFsdWU6IGFueTtcblxuICAgIGZvY3VzZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBmb2N1c2VkSXRlbSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuXG4gICAgYWN0aXZlSXRlbVBhdGggPSBzaWduYWw8YW55W10+KFtdKTtcblxuICAgIHByb2Nlc3NlZEl0ZW1zID0gc2lnbmFsPGFueVtdPihbXSk7XG5cbiAgICB2aXNpYmxlSXRlbXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW1zID0gdGhpcy5wcm9jZXNzZWRJdGVtcygpO1xuICAgICAgICByZXR1cm4gdGhpcy5mbGF0SXRlbXMocHJvY2Vzc2VkSXRlbXMpO1xuICAgIH0pO1xuXG4gICAgZ2V0IGZvY3VzZWRJdGVtSWQoKSB7XG4gICAgICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gdGhpcy5mb2N1c2VkSXRlbSgpO1xuICAgICAgICByZXR1cm4gZm9jdXNlZEl0ZW0gJiYgZm9jdXNlZEl0ZW0uaXRlbT8uaWRcbiAgICAgICAgICAgID8gZm9jdXNlZEl0ZW0uaXRlbS5pZFxuICAgICAgICAgICAgOiBPYmplY3RVdGlscy5pc05vdEVtcHR5KHRoaXMuZm9jdXNlZEl0ZW0oKSlcbiAgICAgICAgICAgICAgPyBgJHt0aGlzLnBhbmVsSWR9XyR7dGhpcy5mb2N1c2VkSXRlbSgpLmtleX1gXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHt9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkSXRlbXMuc2V0KHRoaXMuY3JlYXRlUHJvY2Vzc2VkSXRlbXMoY2hhbmdlcz8uaXRlbXM/LmN1cnJlbnRWYWx1ZSB8fCB0aGlzLml0ZW1zIHx8IFtdKSk7XG4gICAgfVxuXG4gICAgZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgbmFtZSkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkSXRlbSAmJiBwcm9jZXNzZWRJdGVtLml0ZW0gPyBPYmplY3RVdGlscy5nZXRJdGVtVmFsdWUocHJvY2Vzc2VkSXRlbS5pdGVtW25hbWVdKSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXRJdGVtTGFiZWwocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnbGFiZWwnKTtcbiAgICB9XG5cbiAgICBpc0l0ZW1WaXNpYmxlKHByb2Nlc3NlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ3Zpc2libGUnKSAhPT0gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNJdGVtRGlzYWJsZWQocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJdGVtUHJvcChwcm9jZXNzZWRJdGVtLCAnZGlzYWJsZWQnKTtcbiAgICB9XG5cbiAgICBpc0l0ZW1BY3RpdmUocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVJdGVtUGF0aCgpLnNvbWUoKHBhdGgpID0+IHBhdGgua2V5ID09PSBwcm9jZXNzZWRJdGVtLnBhcmVudEtleSk7XG4gICAgfVxuXG4gICAgaXNJdGVtR3JvdXAocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMuaXNOb3RFbXB0eShwcm9jZXNzZWRJdGVtLml0ZW1zKTtcbiAgICB9XG5cbiAgICBpc0VsZW1lbnRJblBhbmVsKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHBhbmVsID0gZXZlbnQuY3VycmVudFRhcmdldC5jbG9zZXN0KCdbZGF0YS1wYy1zZWN0aW9uPVwicGFuZWxcIl0nKTtcblxuICAgICAgICByZXR1cm4gcGFuZWwgJiYgcGFuZWwuY29udGFpbnMoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgaXNJdGVtTWF0Y2hlZChwcm9jZXNzZWRJdGVtKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRJdGVtKHByb2Nlc3NlZEl0ZW0pICYmXG4gICAgICAgICAgICB0aGlzLmdldEl0ZW1MYWJlbChwcm9jZXNzZWRJdGVtKS50b0xvY2FsZUxvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodGhpcy5zZWFyY2hWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzVmlzaWJsZUl0ZW0ocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gISFwcm9jZXNzZWRJdGVtICYmIChwcm9jZXNzZWRJdGVtLmxldmVsID09PSAwIHx8IHRoaXMuaXNJdGVtQWN0aXZlKHByb2Nlc3NlZEl0ZW0pKSAmJiB0aGlzLmlzSXRlbVZpc2libGUocHJvY2Vzc2VkSXRlbSk7XG4gICAgfVxuXG4gICAgaXNWYWxpZEl0ZW0ocHJvY2Vzc2VkSXRlbSkge1xuICAgICAgICByZXR1cm4gISFwcm9jZXNzZWRJdGVtICYmICF0aGlzLmlzSXRlbURpc2FibGVkKHByb2Nlc3NlZEl0ZW0pICYmICFwcm9jZXNzZWRJdGVtLnNlcGFyYXRvcjtcbiAgICB9XG5cbiAgICBmaW5kRmlyc3RJdGVtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlSXRlbXMoKS5maW5kKChwcm9jZXNzZWRJdGVtKSA9PiB0aGlzLmlzVmFsaWRJdGVtKHByb2Nlc3NlZEl0ZW0pKTtcbiAgICB9XG5cbiAgICBmaW5kTGFzdEl0ZW0oKSB7XG4gICAgICAgIHJldHVybiBPYmplY3RVdGlscy5maW5kTGFzdCh0aGlzLnZpc2libGVJdGVtcygpLCAocHJvY2Vzc2VkSXRlbSkgPT4gdGhpcy5pc1ZhbGlkSXRlbShwcm9jZXNzZWRJdGVtKSk7XG4gICAgfVxuXG4gICAgZmluZEl0ZW1CeUV2ZW50VGFyZ2V0KHRhcmdldDogRXZlbnRUYXJnZXQpOiB1bmRlZmluZWQgfCBhbnkge1xuICAgICAgICBsZXQgcGFyZW50Tm9kZSA9IHRhcmdldCBhcyBQYXJlbnROb2RlICYgRWxlbWVudDtcblxuICAgICAgICB3aGlsZSAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgIT09ICdsaScpIHtcbiAgICAgICAgICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlPy5wYXJlbnROb2RlIGFzIEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcGFyZW50Tm9kZT8uaWQgJiZcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZUl0ZW1zKCkuZmluZChcbiAgICAgICAgICAgICAgICAocHJvY2Vzc2VkSXRlbSkgPT4gdGhpcy5pc1ZhbGlkSXRlbShwcm9jZXNzZWRJdGVtKSAmJiBgJHt0aGlzLnBhbmVsSWR9XyR7cHJvY2Vzc2VkSXRlbS5rZXl9YCA9PT0gcGFyZW50Tm9kZS5pZCxcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjcmVhdGVQcm9jZXNzZWRJdGVtcyhpdGVtcywgbGV2ZWwgPSAwLCBwYXJlbnQgPSB7fSwgcGFyZW50S2V5ID0gJycpIHtcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbXMgPSBbXTtcbiAgICAgICAgaXRlbXMgJiZcbiAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gKHBhcmVudEtleSAhPT0gJycgPyBwYXJlbnRLZXkgKyAnXycgOiAnJykgKyBpbmRleDtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiBpdGVtLmljb24sXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBpdGVtLmV4cGFuZGVkLFxuICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3I6IGl0ZW0uc2VwYXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRLZXksXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIG5ld0l0ZW1bJ2l0ZW1zJ10gPSB0aGlzLmNyZWF0ZVByb2Nlc3NlZEl0ZW1zKGl0ZW0uaXRlbXMsIGxldmVsICsgMSwgbmV3SXRlbSwga2V5KTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWRJdGVtcy5wdXNoKG5ld0l0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwcm9jZXNzZWRJdGVtcztcbiAgICB9XG5cbiAgICBmaW5kUHJvY2Vzc2VkSXRlbUJ5SXRlbUtleShrZXksIHByb2Nlc3NlZEl0ZW1zPywgbGV2ZWwgPSAwKSB7XG4gICAgICAgIHByb2Nlc3NlZEl0ZW1zID0gcHJvY2Vzc2VkSXRlbXMgfHwgdGhpcy5wcm9jZXNzZWRJdGVtcygpO1xuICAgICAgICBpZiAocHJvY2Vzc2VkSXRlbXMgJiYgcHJvY2Vzc2VkSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb2Nlc3NlZEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IHByb2Nlc3NlZEl0ZW1zW2ldO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0SXRlbVByb3AocHJvY2Vzc2VkSXRlbSwgJ2tleScpID09PSBrZXkpIHJldHVybiBwcm9jZXNzZWRJdGVtO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRJdGVtID0gdGhpcy5maW5kUHJvY2Vzc2VkSXRlbUJ5SXRlbUtleShrZXksIHByb2Nlc3NlZEl0ZW0uaXRlbXMsIGxldmVsICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZWRJdGVtKSByZXR1cm4gbWF0Y2hlZEl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmbGF0SXRlbXMocHJvY2Vzc2VkSXRlbXMsIHByb2Nlc3NlZEZsYXR0ZW5JdGVtcyA9IFtdKSB7XG4gICAgICAgIHByb2Nlc3NlZEl0ZW1zICYmXG4gICAgICAgICAgICBwcm9jZXNzZWRJdGVtcy5mb3JFYWNoKChwcm9jZXNzZWRJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWaXNpYmxlSXRlbShwcm9jZXNzZWRJdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRGbGF0dGVuSXRlbXMucHVzaChwcm9jZXNzZWRJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mbGF0SXRlbXMocHJvY2Vzc2VkSXRlbS5pdGVtcywgcHJvY2Vzc2VkRmxhdHRlbkl0ZW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkRmxhdHRlbkl0ZW1zO1xuICAgIH1cblxuICAgIGNoYW5nZUZvY3VzZWRJdGVtKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsgb3JpZ2luYWxFdmVudCwgcHJvY2Vzc2VkSXRlbSwgZm9jdXNPbk5leHQsIHNlbGZDaGVjaywgYWxsb3dIZWFkZXJGb2N1cyA9IHRydWUgfSA9IGV2ZW50O1xuXG4gICAgICAgIGlmIChPYmplY3RVdGlscy5pc05vdEVtcHR5KHRoaXMuZm9jdXNlZEl0ZW0oKSkgJiYgdGhpcy5mb2N1c2VkSXRlbSgpLmtleSAhPT0gcHJvY2Vzc2VkSXRlbS5rZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEl0ZW0uc2V0KHByb2Nlc3NlZEl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxJblZpZXcoKTtcbiAgICAgICAgfSBlbHNlIGlmIChhbGxvd0hlYWRlckZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLmhlYWRlckZvY3VzLmVtaXQoeyBvcmlnaW5hbEV2ZW50LCBmb2N1c09uTmV4dCwgc2VsZkNoZWNrIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2Nyb2xsSW5WaWV3KCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKHRoaXMuc3ViTWVudVZpZXdDaGlsZC5saXN0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQsIGBsaVtpZD1cIiR7YCR7dGhpcy5mb2N1c2VkSXRlbUlkfWB9XCJdYCk7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcgJiYgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcsIGlubGluZTogJ25lYXJlc3QnIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Gb2N1cyhldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWRJdGVtID1cbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJdGVtKCkgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5pc0VsZW1lbnRJblBhbmVsKGV2ZW50LCBldmVudC5yZWxhdGVkVGFyZ2V0KVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZmluZEl0ZW1CeUV2ZW50VGFyZ2V0KGV2ZW50LnRhcmdldCkgfHwgdGhpcy5maW5kRmlyc3RJdGVtKClcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmZpbmRMYXN0SXRlbSgpKTtcbiAgICAgICAgICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0ICE9PSBudWxsKSB0aGlzLmZvY3VzZWRJdGVtLnNldChmb2N1c2VkSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkJsdXIoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcblxuICAgICAgICBpZiAodGhpcy5mb2N1c2VkICYmICF0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRJdGVtLnNldChudWxsKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSXRlbVRvZ2dsZShldmVudCkge1xuICAgICAgICBjb25zdCB7IHByb2Nlc3NlZEl0ZW0sIGV4cGFuZGVkIH0gPSBldmVudDtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIG9yaWdpbmFsIGl0ZW0gb2JqZWN0J3MgJ2V4cGFuZGVkJyBwcm9wZXJ0eVxuICAgICAgICBpZiAocHJvY2Vzc2VkSXRlbS5pdGVtKSB7XG4gICAgICAgICAgICBwcm9jZXNzZWRJdGVtLml0ZW0uZXhwYW5kZWQgPSAhcHJvY2Vzc2VkSXRlbS5pdGVtLmV4cGFuZGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVjcmVhdGUgcHJvY2Vzc2VkSXRlbXMgd2l0aCB1cGRhdGVkICdleHBhbmRlZCcgc3RhdGVzXG4gICAgICAgIHRoaXMucHJvY2Vzc2VkSXRlbXMuc2V0KHRoaXMuY3JlYXRlUHJvY2Vzc2VkSXRlbXModGhpcy5pdGVtcyB8fCBbXSwgMCwge30sICcnKSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGFjdGl2ZUl0ZW1QYXRoXG4gICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW1QYXRoID0gdGhpcy5hY3RpdmVJdGVtUGF0aCgpLmZpbHRlcigocCkgPT4gcC5wYXJlbnRLZXkgIT09IHByb2Nlc3NlZEl0ZW0ucGFyZW50S2V5KTtcbiAgICAgICAgaWYgKGV4cGFuZGVkKSB7XG4gICAgICAgICAgICBhY3RpdmVJdGVtUGF0aC5wdXNoKHByb2Nlc3NlZEl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlSXRlbVBhdGguc2V0KGFjdGl2ZUl0ZW1QYXRoKTtcblxuICAgICAgICAvLyBVcGRhdGUgZm9jdXNlZEl0ZW1cbiAgICAgICAgdGhpcy5mb2N1c2VkSXRlbS5zZXQocHJvY2Vzc2VkSXRlbSk7XG4gICAgfVxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IG1ldGFLZXkgPSBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXk7XG5cbiAgICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd0Rvd25LZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXJyb3dVcEtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkFycm93TGVmdEtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd1JpZ2h0S2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkhvbWVLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdFbmQnOlxuICAgICAgICAgICAgICAgIHRoaXMub25FbmRLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdTcGFjZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vblNwYWNlS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgICAgIHRoaXMub25FbnRlcktleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgICBjYXNlICdUYWInOlxuICAgICAgICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICAgICAgICBjYXNlICdTaGlmdExlZnQnOlxuICAgICAgICAgICAgY2FzZSAnU2hpZnRSaWdodCc6XG4gICAgICAgICAgICAgICAgLy9OT09QXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKCFtZXRhS2V5ICYmIE9iamVjdFV0aWxzLmlzUHJpbnRhYmxlQ2hhcmFjdGVyKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hJdGVtcyhldmVudCwgZXZlbnQua2V5KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQXJyb3dEb3duS2V5KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW0gPSBPYmplY3RVdGlscy5pc05vdEVtcHR5KHRoaXMuZm9jdXNlZEl0ZW0oKSkgPyB0aGlzLmZpbmROZXh0SXRlbSh0aGlzLmZvY3VzZWRJdGVtKCkpIDogdGhpcy5maW5kRmlyc3RJdGVtKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRm9jdXNlZEl0ZW0oeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgcHJvY2Vzc2VkSXRlbSwgZm9jdXNPbk5leHQ6IHRydWUgfSk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIG9uQXJyb3dVcEtleShldmVudCkge1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRJdGVtID0gT2JqZWN0VXRpbHMuaXNOb3RFbXB0eSh0aGlzLmZvY3VzZWRJdGVtKCkpID8gdGhpcy5maW5kUHJldkl0ZW0odGhpcy5mb2N1c2VkSXRlbSgpKSA6IHRoaXMuZmluZExhc3RJdGVtKCk7XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VGb2N1c2VkSXRlbSh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBwcm9jZXNzZWRJdGVtLCBzZWxmQ2hlY2s6IHRydWUgfSk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25BcnJvd0xlZnRLZXkoZXZlbnQpIHtcbiAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzTm90RW1wdHkodGhpcy5mb2N1c2VkSXRlbSgpKSkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IHRoaXMuYWN0aXZlSXRlbVBhdGgoKS5zb21lKChwKSA9PiBwLmtleSA9PT0gdGhpcy5mb2N1c2VkSXRlbSgpLmtleSk7XG5cbiAgICAgICAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlSXRlbVBhdGggPSB0aGlzLmFjdGl2ZUl0ZW1QYXRoKCkuZmlsdGVyKChwKSA9PiBwLmtleSAhPT0gdGhpcy5mb2N1c2VkSXRlbSgpLmtleSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVJdGVtUGF0aC5zZXQoYWN0aXZlSXRlbVBhdGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb2N1c2VkSXRlbSA9IE9iamVjdFV0aWxzLmlzTm90RW1wdHkodGhpcy5mb2N1c2VkSXRlbSgpLnBhcmVudCkgPyB0aGlzLmZvY3VzZWRJdGVtKCkucGFyZW50IDogdGhpcy5mb2N1c2VkSXRlbSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEl0ZW0uc2V0KGZvY3VzZWRJdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQXJyb3dSaWdodEtleShldmVudCkge1xuICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNOb3RFbXB0eSh0aGlzLmZvY3VzZWRJdGVtKCkpKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cGVkID0gdGhpcy5pc0l0ZW1Hcm91cCh0aGlzLmZvY3VzZWRJdGVtKCkpO1xuXG4gICAgICAgICAgICBpZiAoZ3JvdXBlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSB0aGlzLmFjdGl2ZUl0ZW1QYXRoKCkuc29tZSgocCkgPT4gcC5rZXkgPT09IHRoaXMuZm9jdXNlZEl0ZW0oKS5rZXkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkFycm93RG93bktleShldmVudCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlSXRlbVBhdGggPSB0aGlzLmFjdGl2ZUl0ZW1QYXRoKCkuZmlsdGVyKChwKSA9PiBwLnBhcmVudEtleSAhPT0gdGhpcy5mb2N1c2VkSXRlbSgpLnBhcmVudEtleSk7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0ZW1QYXRoLnB1c2godGhpcy5mb2N1c2VkSXRlbSgpKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUl0ZW1QYXRoLnNldChhY3RpdmVJdGVtUGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ib21lS2V5KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuY2hhbmdlRm9jdXNlZEl0ZW0oeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgcHJvY2Vzc2VkSXRlbTogdGhpcy5maW5kRmlyc3RJdGVtKCksIGFsbG93SGVhZGVyRm9jdXM6IGZhbHNlIH0pO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uRW5kS2V5KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuY2hhbmdlRm9jdXNlZEl0ZW0oeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgcHJvY2Vzc2VkSXRlbTogdGhpcy5maW5kTGFzdEl0ZW0oKSwgZm9jdXNPbk5leHQ6IHRydWUsIGFsbG93SGVhZGVyRm9jdXM6IGZhbHNlIH0pO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uRW50ZXJLZXkoZXZlbnQpIHtcbiAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzTm90RW1wdHkodGhpcy5mb2N1c2VkSXRlbSgpKSkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IERvbUhhbmRsZXIuZmluZFNpbmdsZSh0aGlzLnN1Yk1lbnVWaWV3Q2hpbGQubGlzdFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LCBgbGlbaWQ9XCIke2Ake3RoaXMuZm9jdXNlZEl0ZW1JZH1gfVwiXWApO1xuICAgICAgICAgICAgY29uc3QgYW5jaG9yRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgZWxlbWVudCAmJiAoRG9tSGFuZGxlci5maW5kU2luZ2xlKGVsZW1lbnQsICdbZGF0YS1wYy1zZWN0aW9uPVwiYWN0aW9uXCJdJykgfHwgRG9tSGFuZGxlci5maW5kU2luZ2xlKGVsZW1lbnQsICdhLGJ1dHRvbicpKTtcblxuICAgICAgICAgICAgYW5jaG9yRWxlbWVudCA/IGFuY2hvckVsZW1lbnQuY2xpY2soKSA6IGVsZW1lbnQgJiYgZWxlbWVudC5jbGljaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvblNwYWNlS2V5KGV2ZW50KSB7XG4gICAgICAgIHRoaXMub25FbnRlcktleShldmVudCk7XG4gICAgfVxuXG4gICAgZmluZE5leHRJdGVtKHByb2Nlc3NlZEl0ZW0pIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnZpc2libGVJdGVtcygpLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5rZXkgPT09IHByb2Nlc3NlZEl0ZW0ua2V5KTtcblxuICAgICAgICBjb25zdCBtYXRjaGVkSXRlbSA9XG4gICAgICAgICAgICBpbmRleCA8IHRoaXMudmlzaWJsZUl0ZW1zKCkubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgID8gdGhpcy52aXNpYmxlSXRlbXMoKVxuICAgICAgICAgICAgICAgICAgICAgIC5zbGljZShpbmRleCArIDEpXG4gICAgICAgICAgICAgICAgICAgICAgLmZpbmQoKHBJdGVtKSA9PiB0aGlzLmlzVmFsaWRJdGVtKHBJdGVtKSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRJdGVtIHx8IHByb2Nlc3NlZEl0ZW07XG4gICAgfVxuXG4gICAgZmluZFByZXZJdGVtKHByb2Nlc3NlZEl0ZW0pIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnZpc2libGVJdGVtcygpLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5rZXkgPT09IHByb2Nlc3NlZEl0ZW0ua2V5KTtcbiAgICAgICAgY29uc3QgbWF0Y2hlZEl0ZW0gPVxuICAgICAgICAgICAgaW5kZXggPiAwID8gT2JqZWN0VXRpbHMuZmluZExhc3QodGhpcy52aXNpYmxlSXRlbXMoKS5zbGljZSgwLCBpbmRleCksIChwSXRlbSkgPT4gdGhpcy5pc1ZhbGlkSXRlbShwSXRlbSkpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiBtYXRjaGVkSXRlbSB8fCBwcm9jZXNzZWRJdGVtO1xuICAgIH1cblxuICAgIHNlYXJjaEl0ZW1zKGV2ZW50LCBjaGFyKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAodGhpcy5zZWFyY2hWYWx1ZSB8fCAnJykgKyBjaGFyO1xuXG4gICAgICAgIGxldCBtYXRjaGVkSXRlbSA9IG51bGw7XG4gICAgICAgIGxldCBtYXRjaGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzTm90RW1wdHkodGhpcy5mb2N1c2VkSXRlbSgpKSkge1xuICAgICAgICAgICAgY29uc3QgZm9jdXNlZEl0ZW1JbmRleCA9IHRoaXMudmlzaWJsZUl0ZW1zKCkuZmluZEluZGV4KChwcm9jZXNzZWRJdGVtKSA9PiBwcm9jZXNzZWRJdGVtLmtleSA9PT0gdGhpcy5mb2N1c2VkSXRlbSgpLmtleSk7XG5cbiAgICAgICAgICAgIG1hdGNoZWRJdGVtID0gdGhpcy52aXNpYmxlSXRlbXMoKVxuICAgICAgICAgICAgICAgIC5zbGljZShmb2N1c2VkSXRlbUluZGV4KVxuICAgICAgICAgICAgICAgIC5maW5kKChwcm9jZXNzZWRJdGVtKSA9PiB0aGlzLmlzSXRlbU1hdGNoZWQocHJvY2Vzc2VkSXRlbSkpO1xuICAgICAgICAgICAgbWF0Y2hlZEl0ZW0gPSBPYmplY3RVdGlscy5pc0VtcHR5KG1hdGNoZWRJdGVtKVxuICAgICAgICAgICAgICAgID8gdGhpcy52aXNpYmxlSXRlbXMoKVxuICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCBmb2N1c2VkSXRlbUluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgIC5maW5kKChwcm9jZXNzZWRJdGVtKSA9PiB0aGlzLmlzSXRlbU1hdGNoZWQocHJvY2Vzc2VkSXRlbSkpXG4gICAgICAgICAgICAgICAgOiBtYXRjaGVkSXRlbTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1hdGNoZWRJdGVtID0gdGhpcy52aXNpYmxlSXRlbXMoKS5maW5kKChwcm9jZXNzZWRJdGVtKSA9PiB0aGlzLmlzSXRlbU1hdGNoZWQocHJvY2Vzc2VkSXRlbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzTm90RW1wdHkobWF0Y2hlZEl0ZW0pKSB7XG4gICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChPYmplY3RVdGlscy5pc0VtcHR5KG1hdGNoZWRJdGVtKSAmJiBPYmplY3RVdGlscy5pc0VtcHR5KHRoaXMuZm9jdXNlZEl0ZW0oKSkpIHtcbiAgICAgICAgICAgIG1hdGNoZWRJdGVtID0gdGhpcy5maW5kRmlyc3RJdGVtKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNOb3RFbXB0eShtYXRjaGVkSXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRm9jdXNlZEl0ZW0oe1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZEl0ZW06IG1hdGNoZWRJdGVtLFxuICAgICAgICAgICAgICAgIGFsbG93SGVhZGVyRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VhcmNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfSwgNTAwKTtcblxuICAgICAgICByZXR1cm4gbWF0Y2hlZDtcbiAgICB9XG59XG5cbi8qKlxuICogUGFuZWxNZW51IGlzIGEgaHlicmlkIG9mIEFjY29yZGlvbiBhbmQgVHJlZSBjb21wb25lbnRzLlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLXBhbmVsTWVudSwgcC1wYW5lbG1lbnUnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgW2NsYXNzXT1cInN0eWxlQ2xhc3NcIiBbbmdTdHlsZV09XCJzdHlsZVwiIFtuZ0NsYXNzXT1cIidwLXBhbmVsbWVudSBwLWNvbXBvbmVudCdcIiAjY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBtb2RlbDsgbGV0IGYgPSBmaXJzdDsgbGV0IGwgPSBsYXN0OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzSXRlbVZpc2libGUoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtcGFuZWxtZW51LXBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ2hlYWRlckNsYXNzJylcIlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRJdGVtUHJvcChpdGVtLCAnc3R5bGUnKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCIncGFuZWwnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncC1jb21wb25lbnQgcC1wYW5lbG1lbnUtaGVhZGVyJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncC1wYW5lbG1lbnUtaGVhZGVyLWFjdGl2ZSc6IGlzSXRlbUFjdGl2ZShpdGVtKSAmJiAhIWl0ZW0uaXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3AtZGlzYWJsZWQnOiBpc0l0ZW1EaXNhYmxlZChpdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICdzdHlsZUNsYXNzJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ3N0eWxlJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICd0b29sdGlwJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiZ2V0SGVhZGVySWQoaXRlbSwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE9wdGlvbnNdPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ3Rvb2x0aXBPcHRpb25zJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0l0ZW1BY3RpdmUoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXRJdGVtUHJvcChpdGVtLCAnbGFiZWwnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImdldENvbnRlbnRJZChpdGVtLCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzSXRlbURpc2FibGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtcC1oaWdobGlnaHRdPVwiaXNJdGVtQWN0aXZlKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtcC1kaXNhYmxlZF09XCJpc0l0ZW1EaXNhYmxlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ2hlYWRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSGVhZGVyQ2xpY2soJGV2ZW50LCBpdGVtLCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkhlYWRlcktleURvd24oJGV2ZW50LCBpdGVtLCBpKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXBhbmVsbWVudS1oZWFkZXItY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbVRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFnZXRJdGVtUHJvcChpdGVtLCAncm91dGVyTGluaycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmhyZWZdPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ3VybCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ3RhcmdldCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICd0aXRsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1wYW5lbG1lbnUtaGVhZGVyLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidoZWFkZXJhY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzSXRlbUdyb3VwKGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzdWJtZW51SWNvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDaGV2cm9uRG93bkljb24gW3N0eWxlQ2xhc3NdPVwiJ3AtcGFuZWxtZW51LXN1Ym1lbnUtaWNvbidcIiAqbmdJZj1cImlzSXRlbUFjdGl2ZShpdGVtKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDaGV2cm9uUmlnaHRJY29uIFtzdHlsZUNsYXNzXT1cIidwLXBhbmVsbWVudS1zdWJtZW51LWljb24nXCIgKm5nSWY9XCIhaXNJdGVtQWN0aXZlKGl0ZW0pXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJtZW51SWNvblRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtcGFuZWxtZW51LXN1Ym1lbnUtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ2ljb25TdHlsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtcGFuZWxtZW51LWhlYWRlci1sYWJlbFwiICpuZ0lmPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ2VzY2FwZScpICE9PSBmYWxzZTsgZWxzZSBodG1sTGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEl0ZW1Qcm9wKGl0ZW0sICdsYWJlbCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaHRtbExhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxzcGFuIGNsYXNzPVwicC1wYW5lbG1lbnUtaGVhZGVyLWxhYmVsXCIgW2lubmVySFRNTF09XCJnZXRJdGVtUHJvcChpdGVtLCAnbGFiZWwnKVwiPjwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1tZW51aXRlbS1iYWRnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRJdGVtUHJvcChpdGVtLCAnYmFkZ2UnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ2JhZGdlU3R5bGVDbGFzcycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgZ2V0SXRlbVByb3AoaXRlbSwgJ2JhZGdlJykgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldEl0ZW1Qcm9wKGl0ZW0sICdyb3V0ZXJMaW5rJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJnZXRJdGVtUHJvcChpdGVtLCAncm91dGVyTGluaycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICdxdWVyeVBhcmFtcycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiJ3AtcGFuZWxtZW51LWl0ZW0tbGluay1hY3RpdmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICdyb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucycpIHx8IHsgZXhhY3Q6IGZhbHNlIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cImdldEl0ZW1Qcm9wKGl0ZW0sICd0YXJnZXQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1wYW5lbG1lbnUtaGVhZGVyLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZyYWdtZW50XT1cImdldEl0ZW1Qcm9wKGl0ZW0sICdmcmFnbWVudCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zSGFuZGxpbmddPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ3F1ZXJ5UGFyYW1zSGFuZGxpbmcnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVzZXJ2ZUZyYWdtZW50XT1cImdldEl0ZW1Qcm9wKGl0ZW0sICdwcmVzZXJ2ZUZyYWdtZW50JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2tpcExvY2F0aW9uQ2hhbmdlXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICdza2lwTG9jYXRpb25DaGFuZ2UnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXBsYWNlVXJsXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICdyZXBsYWNlVXJsJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdGVdPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ3N0YXRlJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ2hlYWRlcmFjdGlvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzSXRlbUdyb3VwKGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN1Ym1lbnVJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hldnJvbkRvd25JY29uIFtzdHlsZUNsYXNzXT1cIidwLXBhbmVsbWVudS1zdWJtZW51LWljb24nXCIgKm5nSWY9XCJpc0l0ZW1BY3RpdmUoaXRlbSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDaGV2cm9uUmlnaHRJY29uIFtzdHlsZUNsYXNzXT1cIidwLXBhbmVsbWVudS1zdWJtZW51LWljb24nXCIgKm5nSWY9XCIhaXNJdGVtQWN0aXZlKGl0ZW0pXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VibWVudUljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLXBhbmVsbWVudS1zdWJtZW51LWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICdpY29uU3R5bGUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1wYW5lbG1lbnUtaGVhZGVyLWxhYmVsXCIgKm5nSWY9XCJnZXRJdGVtUHJvcChpdGVtLCAnZXNjYXBlJykgIT09IGZhbHNlOyBlbHNlIGh0bWxSb3V0ZUxhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEl0ZW1Qcm9wKGl0ZW0sICdsYWJlbCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2h0bWxSb3V0ZUxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PHNwYW4gY2xhc3M9XCJwLXBhbmVsbWVudS1oZWFkZXItbGFiZWxcIiBbaW5uZXJIVE1MXT1cImdldEl0ZW1Qcm9wKGl0ZW0sICdsYWJlbCcpXCI+PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLW1lbnVpdGVtLWJhZGdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ2JhZGdlJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0SXRlbVByb3AoaXRlbSwgJ2JhZGdlU3R5bGVDbGFzcycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBnZXRJdGVtUHJvcChpdGVtLCAnYmFkZ2UnKSB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzSXRlbUdyb3VwKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1wYW5lbG1lbnUtY29udGVudC1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW0Byb290SXRlbV09XCJnZXRBbmltYXRpb24oaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKEByb290SXRlbS5kb25lKT1cIm9uVG9nZ2xlRG9uZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJyZWdpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiZ2V0Q29udGVudElkKGl0ZW0sIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJnZXRIZWFkZXJJZChpdGVtLCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ3RvZ2dsZWFibGVjb250ZW50J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwLXBhbmVsbWVudS1leHBhbmRlZCc6IGlzSXRlbUFjdGl2ZShpdGVtKSB9XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtcGFuZWxtZW51LWNvbnRlbnRcIiBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ21lbnVjb250ZW50J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXBhbmVsTWVudUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhbmVsSWRdPVwiZ2V0UGFuZWxJZChpLCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJnZXRJdGVtUHJvcChpdGVtLCAnaXRlbXMnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtVGVtcGxhdGVdPVwiaXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RyYW5zaXRpb25PcHRpb25zXT1cInRyYW5zaXRpb25PcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvb3RdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW0oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJlbnRFeHBhbmRlZF09XCJpc0l0ZW1BY3RpdmUoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGVhZGVyRm9jdXMpPVwidXBkYXRlRm9jdXNlZEhlYWRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wLXBhbmVsTWVudUxpc3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgYCxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ3Jvb3RJdGVtJywgW1xuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcwJyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcqJyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2aXNpYmxlIDw9PiBoaWRkZW4nLCBbYW5pbWF0ZSgne3t0cmFuc2l0aW9uUGFyYW1zfX0nKV0pLFxuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgYW5pbWF0ZSgwKSksXG4gICAgICAgIF0pLFxuICAgIF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFtQYW5lbE1lbnVTdHlsZV0sXG59KVxuZXhwb3J0IGNsYXNzIFBhbmVsTWVudSBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBtZW51aXRlbXMuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgbW9kZWw6IE1lbnVJdGVtW10gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSW5saW5lIHN0eWxlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc3R5bGU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogU3R5bGUgY2xhc3Mgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBtdWx0aXBsZSB0YWJzIGNhbiBiZSBhY3RpdmF0ZWQgYXQgdGhlIHNhbWUgdGltZSBvciBub3QuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIG11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogVHJhbnNpdGlvbiBvcHRpb25zIG9mIHRoZSBhbmltYXRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgdHJhbnNpdGlvbk9wdGlvbnM6IHN0cmluZyA9ICc0MDBtcyBjdWJpYy1iZXppZXIoMC44NiwgMCwgMC4wNywgMSknO1xuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgaWQgc3RhdGUgYXMgYSBzdHJpbmcuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBJbmRleCBvZiB0aGUgZWxlbWVudCBpbiB0YWJiaW5nIG9yZGVyLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHRhYmluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSAwO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihQcmltZVRlbXBsYXRlKSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IHVuZGVmaW5lZDtcblxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lclZpZXdDaGlsZDogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICAgIHN1Ym1lbnVJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBwdWJsaWMgYW5pbWF0aW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgYWN0aXZlSXRlbSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuXG4gICAgX2NvbXBvbmVudFN0eWxlID0gaW5qZWN0KFBhbmVsTWVudVN0eWxlKTtcblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLmlkID0gdGhpcy5pZCB8fCBVbmlxdWVDb21wb25lbnRJZCgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXM/LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoaXRlbS5nZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzdWJtZW51aWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWVudUljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnaXRlbSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbVRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb2xsYXBzZXMgb3BlbiBwYW5lbHMuXG4gICAgICogQGdyb3VwIE1ldGhvZFxuICAgICAqL1xuICAgIGNvbGxhcHNlQWxsKCkge1xuICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMubW9kZWwhKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5leHBhbmRlZCkge1xuICAgICAgICAgICAgICAgIGl0ZW0uZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG9uVG9nZ2xlRG9uZSgpIHtcbiAgICAgICAgdGhpcy5hbmltYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VBY3RpdmVJdGVtKGV2ZW50LCBpdGVtLCBpbmRleD86IG51bWJlciwgc2VsZkFjdGl2ZSA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0l0ZW1EaXNhYmxlZChpdGVtKSkge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlSXRlbSA9IHNlbGZBY3RpdmUgPyBpdGVtIDogdGhpcy5hY3RpdmVJdGVtICYmIE9iamVjdFV0aWxzLmVxdWFscyhpdGVtLCB0aGlzLmFjdGl2ZUl0ZW0pID8gbnVsbCA6IGl0ZW07XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUl0ZW0uc2V0KGFjdGl2ZUl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QW5pbWF0aW9uKGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmV4cGFuZGVkXG4gICAgICAgICAgICA/IHsgdmFsdWU6ICd2aXNpYmxlJywgcGFyYW1zOiB7IHRyYW5zaXRpb25QYXJhbXM6IHRoaXMuYW5pbWF0aW5nID8gdGhpcy50cmFuc2l0aW9uT3B0aW9ucyA6ICcwbXMnLCBoZWlnaHQ6ICcqJyB9IH1cbiAgICAgICAgICAgIDogeyB2YWx1ZTogJ2hpZGRlbicsIHBhcmFtczogeyB0cmFuc2l0aW9uUGFyYW1zOiB0aGlzLnRyYW5zaXRpb25PcHRpb25zLCBoZWlnaHQ6ICcwJyB9IH07XG4gICAgfVxuXG4gICAgZ2V0SXRlbVByb3AoaXRlbSwgbmFtZSkge1xuICAgICAgICByZXR1cm4gaXRlbSA/IE9iamVjdFV0aWxzLmdldEl0ZW1WYWx1ZShpdGVtW25hbWVdKSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXRJdGVtTGFiZWwoaXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJdGVtUHJvcChpdGVtLCAnbGFiZWwnKTtcbiAgICB9XG5cbiAgICBpc0l0ZW1BY3RpdmUoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS5leHBhbmRlZDtcbiAgICB9XG5cbiAgICBpc0l0ZW1WaXNpYmxlKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbVByb3AoaXRlbSwgJ3Zpc2libGUnKSAhPT0gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNJdGVtRGlzYWJsZWQoaXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJdGVtUHJvcChpdGVtLCAnZGlzYWJsZWQnKTtcbiAgICB9XG5cbiAgICBpc0l0ZW1Hcm91cChpdGVtKSB7XG4gICAgICAgIHJldHVybiBPYmplY3RVdGlscy5pc05vdEVtcHR5KGl0ZW0uaXRlbXMpO1xuICAgIH1cblxuICAgIGdldFBhbmVsSWQoaW5kZXgsIGl0ZW0/KSB7XG4gICAgICAgIHJldHVybiBpdGVtICYmIGl0ZW0uaWQgPyBpdGVtLmlkIDogYCR7dGhpcy5pZH1fJHtpbmRleH1gO1xuICAgIH1cblxuICAgIGdldEhlYWRlcklkKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkID8gaXRlbS5pZCArICdfaGVhZGVyJyA6IGAke3RoaXMuZ2V0UGFuZWxJZChpbmRleCl9X2hlYWRlcmA7XG4gICAgfVxuXG4gICAgZ2V0Q29udGVudElkKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkID8gaXRlbS5pZCArICdfY29udGVudCcgOiBgJHt0aGlzLmdldFBhbmVsSWQoaW5kZXgpfV9jb250ZW50YDtcbiAgICB9XG5cbiAgICB1cGRhdGVGb2N1c2VkSGVhZGVyKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsgb3JpZ2luYWxFdmVudCwgZm9jdXNPbk5leHQsIHNlbGZDaGVjayB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhbmVsRWxlbWVudCA9IG9yaWdpbmFsRXZlbnQuY3VycmVudFRhcmdldC5jbG9zZXN0KCdbZGF0YS1wYy1zZWN0aW9uPVwicGFuZWxcIl0nKTtcbiAgICAgICAgY29uc3QgaGVhZGVyID0gc2VsZkNoZWNrXG4gICAgICAgICAgICA/IERvbUhhbmRsZXIuZmluZFNpbmdsZShwYW5lbEVsZW1lbnQsICdbZGF0YS1wYy1zZWN0aW9uPVwiaGVhZGVyXCJdJylcbiAgICAgICAgICAgIDogZm9jdXNPbk5leHRcbiAgICAgICAgICAgICAgPyB0aGlzLmZpbmROZXh0SGVhZGVyKHBhbmVsRWxlbWVudClcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRQcmV2SGVhZGVyKHBhbmVsRWxlbWVudCk7XG5cbiAgICAgICAgaGVhZGVyXG4gICAgICAgICAgICA/IHRoaXMuY2hhbmdlRm9jdXNlZEhlYWRlcihvcmlnaW5hbEV2ZW50LCBoZWFkZXIpXG4gICAgICAgICAgICA6IGZvY3VzT25OZXh0XG4gICAgICAgICAgICAgID8gdGhpcy5vbkhlYWRlckhvbWVLZXkob3JpZ2luYWxFdmVudClcbiAgICAgICAgICAgICAgOiB0aGlzLm9uSGVhZGVyRW5kS2V5KG9yaWdpbmFsRXZlbnQpO1xuICAgIH1cblxuICAgIGNoYW5nZUZvY3VzZWRIZWFkZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudCAmJiBEb21IYW5kbGVyLmZvY3VzKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGZpbmROZXh0SGVhZGVyKHBhbmVsRWxlbWVudCwgc2VsZkNoZWNrID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgbmV4dFBhbmVsRWxlbWVudCA9IHNlbGZDaGVjayA/IHBhbmVsRWxlbWVudCA6IHBhbmVsRWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgIGNvbnN0IGhlYWRlckVsZW1lbnQgPSBEb21IYW5kbGVyLmZpbmRTaW5nbGUobmV4dFBhbmVsRWxlbWVudCwgJ1tkYXRhLXBjLXNlY3Rpb249XCJoZWFkZXJcIl0nKTtcblxuICAgICAgICByZXR1cm4gaGVhZGVyRWxlbWVudFxuICAgICAgICAgICAgPyBEb21IYW5kbGVyLmdldEF0dHJpYnV0ZShoZWFkZXJFbGVtZW50LCAnZGF0YS1wLWRpc2FibGVkJylcbiAgICAgICAgICAgICAgICA/IHRoaXMuZmluZE5leHRIZWFkZXIoaGVhZGVyRWxlbWVudC5wYXJlbnRFbGVtZW50KVxuICAgICAgICAgICAgICAgIDogaGVhZGVyRWxlbWVudFxuICAgICAgICAgICAgOiBudWxsO1xuICAgIH1cblxuICAgIGZpbmRQcmV2SGVhZGVyKHBhbmVsRWxlbWVudCwgc2VsZkNoZWNrID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgcHJldlBhbmVsRWxlbWVudCA9IHNlbGZDaGVjayA/IHBhbmVsRWxlbWVudCA6IHBhbmVsRWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgICAgICBjb25zdCBoZWFkZXJFbGVtZW50ID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKHByZXZQYW5lbEVsZW1lbnQsICdbZGF0YS1wYy1zZWN0aW9uPVwiaGVhZGVyXCJdJyk7XG5cbiAgICAgICAgcmV0dXJuIGhlYWRlckVsZW1lbnRcbiAgICAgICAgICAgID8gRG9tSGFuZGxlci5nZXRBdHRyaWJ1dGUoaGVhZGVyRWxlbWVudCwgJ2RhdGEtcC1kaXNhYmxlZCcpXG4gICAgICAgICAgICAgICAgPyB0aGlzLmZpbmRQcmV2SGVhZGVyKGhlYWRlckVsZW1lbnQucGFyZW50RWxlbWVudClcbiAgICAgICAgICAgICAgICA6IGhlYWRlckVsZW1lbnRcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBmaW5kRmlyc3RIZWFkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmROZXh0SGVhZGVyKHRoaXMuY29udGFpbmVyVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQsIHRydWUpO1xuICAgIH1cblxuICAgIGZpbmRMYXN0SGVhZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kUHJldkhlYWRlcih0aGlzLmNvbnRhaW5lclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50Lmxhc3RFbGVtZW50Q2hpbGQsIHRydWUpO1xuICAgIH1cblxuICAgIG9uSGVhZGVyQ2xpY2soZXZlbnQsIGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmlzSXRlbURpc2FibGVkKGl0ZW0pKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbS5jb21tYW5kKSB7XG4gICAgICAgICAgICBpdGVtLmNvbW1hbmQoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgaXRlbSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgbW9kZWxJdGVtIG9mIHRoaXMubW9kZWwhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gIT09IG1vZGVsSXRlbSAmJiBtb2RlbEl0ZW0uZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxJdGVtLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaXRlbS5leHBhbmRlZCA9ICFpdGVtLmV4cGFuZGVkO1xuICAgICAgICB0aGlzLmNoYW5nZUFjdGl2ZUl0ZW0oZXZlbnQsIGl0ZW0sIGluZGV4KTtcbiAgICAgICAgdGhpcy5hbmltYXRpbmcgPSB0cnVlO1xuICAgICAgICBEb21IYW5kbGVyLmZvY3VzKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cblxuICAgIG9uSGVhZGVyS2V5RG93bihldmVudCwgaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgICAgIHRoaXMub25IZWFkZXJBcnJvd0Rvd25LZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uSGVhZGVyQXJyb3dVcEtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgICAgICAgICAgIHRoaXMub25IZWFkZXJIb21lS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnRW5kJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uSGVhZGVyRW5kS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgY2FzZSAnU3BhY2UnOlxuICAgICAgICAgICAgICAgIHRoaXMub25IZWFkZXJFbnRlcktleShldmVudCwgaXRlbSwgaW5kZXgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25IZWFkZXJBcnJvd0Rvd25LZXkoZXZlbnQpIHtcbiAgICAgICAgY29uc3Qgcm9vdExpc3QgPVxuICAgICAgICAgICAgRG9tSGFuZGxlci5nZXRBdHRyaWJ1dGUoZXZlbnQuY3VycmVudFRhcmdldCwgJ2RhdGEtcC1oaWdobGlnaHQnKSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgID8gRG9tSGFuZGxlci5maW5kU2luZ2xlKGV2ZW50LmN1cnJlbnRUYXJnZXQubmV4dEVsZW1lbnRTaWJsaW5nLCAnW2RhdGEtcGMtc2VjdGlvbj1cIm1lbnVcIl0nKVxuICAgICAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICByb290TGlzdCA/IERvbUhhbmRsZXIuZm9jdXMocm9vdExpc3QpIDogdGhpcy51cGRhdGVGb2N1c2VkSGVhZGVyKHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIGZvY3VzT25OZXh0OiB0cnVlIH0pO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uSGVhZGVyQXJyb3dVcEtleShldmVudCkge1xuICAgICAgICBjb25zdCBwcmV2SGVhZGVyID0gdGhpcy5maW5kUHJldkhlYWRlcihldmVudC5jdXJyZW50VGFyZ2V0LnBhcmVudEVsZW1lbnQpIHx8IHRoaXMuZmluZExhc3RIZWFkZXIoKTtcbiAgICAgICAgY29uc3Qgcm9vdExpc3QgPVxuICAgICAgICAgICAgRG9tSGFuZGxlci5nZXRBdHRyaWJ1dGUocHJldkhlYWRlciwgJ2RhdGEtcC1oaWdobGlnaHQnKSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgID8gRG9tSGFuZGxlci5maW5kU2luZ2xlKHByZXZIZWFkZXIubmV4dEVsZW1lbnRTaWJsaW5nLCAnW2RhdGEtcGMtc2VjdGlvbj1cIm1lbnVcIl0nKVxuICAgICAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICByb290TGlzdCA/IERvbUhhbmRsZXIuZm9jdXMocm9vdExpc3QpIDogdGhpcy51cGRhdGVGb2N1c2VkSGVhZGVyKHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIGZvY3VzT25OZXh0OiBmYWxzZSB9KTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkhlYWRlckhvbWVLZXkoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VGb2N1c2VkSGVhZGVyKGV2ZW50LCB0aGlzLmZpbmRGaXJzdEhlYWRlcigpKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkhlYWRlckVuZEtleShldmVudCkge1xuICAgICAgICB0aGlzLmNoYW5nZUZvY3VzZWRIZWFkZXIoZXZlbnQsIHRoaXMuZmluZExhc3RIZWFkZXIoKSk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25IZWFkZXJFbnRlcktleShldmVudCwgaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgaGVhZGVyQWN0aW9uID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKGV2ZW50LmN1cnJlbnRUYXJnZXQsICdbZGF0YS1wYy1zZWN0aW9uPVwiaGVhZGVyYWN0aW9uXCJdJyk7XG5cbiAgICAgICAgaGVhZGVyQWN0aW9uID8gaGVhZGVyQWN0aW9uLmNsaWNrKCkgOiB0aGlzLm9uSGVhZGVyQ2xpY2soZXZlbnQsIGl0ZW0sIGluZGV4KTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG59XG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJvdXRlck1vZHVsZSwgVG9vbHRpcE1vZHVsZSwgU2hhcmVkTW9kdWxlLCBBbmdsZURvd25JY29uLCBBbmdsZVJpZ2h0SWNvbiwgQ2hldnJvbkRvd25JY29uLCBDaGV2cm9uUmlnaHRJY29uXSxcbiAgICBleHBvcnRzOiBbUGFuZWxNZW51LCBSb3V0ZXJNb2R1bGUsIFRvb2x0aXBNb2R1bGUsIFNoYXJlZE1vZHVsZV0sXG4gICAgZGVjbGFyYXRpb25zOiBbUGFuZWxNZW51LCBQYW5lbE1lbnVTdWIsIFBhbmVsTWVudUxpc3RdLFxufSlcbmV4cG9ydCBjbGFzcyBQYW5lbE1lbnVNb2R1bGUge31cbiJdfQ==