desy-angular 12.0.0 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/esm2022/lib/desy-angular.module.mjs +10 -9
  2. package/esm2022/lib/desy-buttons/components/button/button.component.mjs +5 -4
  3. package/esm2022/lib/desy-buttons/components/button-loader/button-loader.component.mjs +8 -5
  4. package/esm2022/lib/desy-buttons/components/dropdown/dropdown.component.mjs +11 -6
  5. package/esm2022/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.mjs +3 -3
  6. package/esm2022/lib/desy-buttons/components/listbox/listbox.component.mjs +6 -5
  7. package/esm2022/lib/desy-buttons/components/pill/pill.component.mjs +5 -4
  8. package/esm2022/lib/desy-buttons/components/toggle/toggle.component.mjs +4 -3
  9. package/esm2022/lib/desy-buttons/desy-buttons.module.mjs +15 -15
  10. package/esm2022/lib/desy-buttons/interfaces/listbox-item-data.mjs +1 -1
  11. package/esm2022/lib/desy-commons/interfaces/title-data.mjs +1 -1
  12. package/esm2022/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.mjs +6 -5
  13. package/esm2022/lib/desy-forms/components/checkboxes/checkboxes.component.mjs +11 -10
  14. package/esm2022/lib/desy-forms/components/date-input/date-input.component.mjs +10 -9
  15. package/esm2022/lib/desy-forms/components/datepicker/datepicker.component.mjs +190 -0
  16. package/esm2022/lib/desy-forms/components/datepicker/datepicker.pipe.mjs +34 -0
  17. package/esm2022/lib/desy-forms/components/error-message/error-message.component.mjs +4 -3
  18. package/esm2022/lib/desy-forms/components/fieldset/fieldset.component.mjs +5 -4
  19. package/esm2022/lib/desy-forms/components/file-upload/file-upload.component.mjs +8 -7
  20. package/esm2022/lib/desy-forms/components/hint/hint.component.mjs +4 -3
  21. package/esm2022/lib/desy-forms/components/input/input.component.mjs +8 -7
  22. package/esm2022/lib/desy-forms/components/input-group/input-group.component.mjs +11 -10
  23. package/esm2022/lib/desy-forms/components/label/label.component.mjs +4 -3
  24. package/esm2022/lib/desy-forms/components/radios/radio-item/radio-item.component.mjs +6 -5
  25. package/esm2022/lib/desy-forms/components/radios/radios.component.mjs +11 -10
  26. package/esm2022/lib/desy-forms/components/search-bar/search-bar.component.mjs +7 -6
  27. package/esm2022/lib/desy-forms/components/select/select.component.mjs +8 -7
  28. package/esm2022/lib/desy-forms/components/textarea/textarea.component.mjs +8 -7
  29. package/esm2022/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.mjs +4 -3
  30. package/esm2022/lib/desy-forms/components/tree/tree-item/tree-item.component.mjs +13 -12
  31. package/esm2022/lib/desy-forms/components/tree/tree-sub/tree-sub.component.mjs +5 -4
  32. package/esm2022/lib/desy-forms/components/tree/tree.component.mjs +12 -9
  33. package/esm2022/lib/desy-forms/desy-forms.module.mjs +40 -24
  34. package/esm2022/lib/desy-forms/interfaces/error-message-data.mjs +1 -1
  35. package/esm2022/lib/desy-forms/interfaces/fieldset-data.mjs +1 -1
  36. package/esm2022/lib/desy-forms/interfaces/hint-data.mjs +1 -1
  37. package/esm2022/lib/desy-forms/interfaces/item-checkbox-data.mjs +1 -1
  38. package/esm2022/lib/desy-forms/interfaces/item-date-input-data.mjs +1 -1
  39. package/esm2022/lib/desy-forms/interfaces/item-input-group-data.mjs +1 -1
  40. package/esm2022/lib/desy-forms/interfaces/item-radio-data.mjs +1 -1
  41. package/esm2022/lib/desy-forms/interfaces/label-data.mjs +1 -1
  42. package/esm2022/lib/desy-forms/interfaces/select-item-data.mjs +1 -1
  43. package/esm2022/lib/desy-modals/components/dialog/dialog.component.mjs +4 -3
  44. package/esm2022/lib/desy-modals/components/modal/modal.component.mjs +15 -14
  45. package/esm2022/lib/desy-modals/interfaces/dialog-options.mjs +1 -1
  46. package/esm2022/lib/desy-modals/interfaces/modal-options.mjs +1 -1
  47. package/esm2022/lib/desy-modals/services/dialog.service.mjs +2 -2
  48. package/esm2022/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.mjs +4 -3
  49. package/esm2022/lib/desy-nav/components/error-summary/error-summary.component.mjs +5 -4
  50. package/esm2022/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.mjs +4 -2
  51. package/esm2022/lib/desy-nav/components/footer/footer.component.mjs +6 -5
  52. package/esm2022/lib/desy-nav/components/header/header-mobileText/header-mobile-text.component.mjs +246 -2
  53. package/esm2022/lib/desy-nav/components/header/header-navigation/header-navigation.component.mjs +4 -3
  54. package/esm2022/lib/desy-nav/components/header/header.component.mjs +15 -14
  55. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-dropdown/header-advanced-dropdown.component.mjs +1 -1
  56. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.mjs +3 -3
  57. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.mjs +3 -3
  58. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced.component.mjs +6 -5
  59. package/esm2022/lib/desy-nav/components/header-mini/header-mini.component.mjs +5 -4
  60. package/esm2022/lib/desy-nav/components/links-list/links-list-icon-right/links-list-icon-right.component.mjs +16 -0
  61. package/esm2022/lib/desy-nav/components/links-list/links-list-item/links-list-item.component.mjs +7 -3
  62. package/esm2022/lib/desy-nav/components/links-list/links-list.component.mjs +8 -5
  63. package/esm2022/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.mjs +6 -5
  64. package/esm2022/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.mjs +3 -3
  65. package/esm2022/lib/desy-nav/components/menu-navigation/menu-navigation.component.mjs +280 -31
  66. package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.mjs +3 -3
  67. package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.mjs +3 -3
  68. package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical.component.mjs +6 -5
  69. package/esm2022/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.mjs +3 -3
  70. package/esm2022/lib/desy-nav/components/menubar/menubar.component.mjs +281 -32
  71. package/esm2022/lib/desy-nav/components/nav/nav-item/nav-item.component.mjs +3 -3
  72. package/esm2022/lib/desy-nav/components/nav/nav.component.mjs +6 -5
  73. package/esm2022/lib/desy-nav/components/notification/notification.component.mjs +7 -6
  74. package/esm2022/lib/desy-nav/components/skip-link/skip-link.component.mjs +8 -3
  75. package/esm2022/lib/desy-nav/desy-nav.module.mjs +6 -5
  76. package/esm2022/lib/desy-nav/interfaces/breadcrumbs.data.mjs +1 -1
  77. package/esm2022/lib/desy-nav/interfaces/error-summary-data.mjs +1 -1
  78. package/esm2022/lib/desy-nav/interfaces/footer-data.mjs +1 -1
  79. package/esm2022/lib/desy-nav/interfaces/footer-logo.mjs +2 -1
  80. package/esm2022/lib/desy-nav/interfaces/header-dropdown-data.mjs +1 -1
  81. package/esm2022/lib/desy-nav/interfaces/header-mobile-text-data.mjs +1 -1
  82. package/esm2022/lib/desy-nav/interfaces/header-navigation-item-data.mjs +1 -1
  83. package/esm2022/lib/desy-nav/interfaces/header-subnav-data.mjs +1 -1
  84. package/esm2022/lib/desy-nav/interfaces/menu-horizontal-item-data.mjs +1 -1
  85. package/esm2022/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.mjs +1 -1
  86. package/esm2022/lib/desy-nav/interfaces/menu-navigation-item-sub-item.mjs +1 -1
  87. package/esm2022/lib/desy-nav/interfaces/menu-navigation.mjs +1 -1
  88. package/esm2022/lib/desy-nav/interfaces/menu-vertical-items-data.mjs +1 -1
  89. package/esm2022/lib/desy-nav/interfaces/menu-vertical-sub-data.mjs +1 -1
  90. package/esm2022/lib/desy-nav/interfaces/menu-vertical-sub-items-data.mjs +1 -1
  91. package/esm2022/lib/desy-nav/interfaces/menubar-item-sub.mjs +1 -1
  92. package/esm2022/lib/desy-nav/interfaces/menubar-item.mjs +1 -1
  93. package/esm2022/lib/desy-nav/interfaces/nav-item.data.mjs +1 -1
  94. package/esm2022/lib/desy-nav/interfaces/notification-items-data.mjs +1 -1
  95. package/esm2022/lib/desy-nav/interfaces/notification-options.mjs +1 -1
  96. package/esm2022/lib/desy-pagination/components/pagination/pagination.component.mjs +22 -22
  97. package/esm2022/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.mjs +2 -2
  98. package/esm2022/lib/desy-pagination/desy-pagination.module.mjs +16 -8
  99. package/esm2022/lib/desy-tables/components/table/table.component.mjs +26 -5
  100. package/esm2022/lib/desy-tables/components/table-advanced/table-advanced.component.mjs +16 -16
  101. package/esm2022/lib/desy-tables/directives/focus-clicked-cell.directive.mjs +12 -7
  102. package/esm2022/lib/desy-tables/interfaces/cell-data.mjs +1 -1
  103. package/esm2022/lib/desy-tables/interfaces/wrapper-data.mjs +1 -1
  104. package/esm2022/lib/desy-views/components/accordion/accordion.component.mjs +279 -30
  105. package/esm2022/lib/desy-views/components/accordion-history/accordion-history.component.mjs +5 -4
  106. package/esm2022/lib/desy-views/components/alert/alert.component.mjs +4 -3
  107. package/esm2022/lib/desy-views/components/card/card.component.mjs +4 -3
  108. package/esm2022/lib/desy-views/components/collapsible/collapsible.component.mjs +13 -4
  109. package/esm2022/lib/desy-views/components/description-list/description-list.component.mjs +4 -3
  110. package/esm2022/lib/desy-views/components/details/details.component.mjs +4 -3
  111. package/esm2022/lib/desy-views/components/item/item.component.mjs +11 -10
  112. package/esm2022/lib/desy-views/components/media-object/media-object.component.mjs +280 -32
  113. package/esm2022/lib/desy-views/components/status/status.component.mjs +283 -32
  114. package/esm2022/lib/desy-views/components/status-item/status-item.component.mjs +286 -37
  115. package/esm2022/lib/desy-views/components/tabs/tabs.component.mjs +284 -35
  116. package/esm2022/lib/desy-views/components/tooltip/tooltip.component.mjs +281 -33
  117. package/esm2022/lib/desy-views/desy-views.module.mjs +27 -32
  118. package/esm2022/lib/desy-views/interfaces/accordion-item.data.mjs +1 -1
  119. package/esm2022/lib/desy-views/interfaces/alert-options.mjs +1 -1
  120. package/esm2022/lib/desy-views/interfaces/description-item.data.mjs +1 -1
  121. package/esm2022/lib/desy-views/interfaces/status-data.mjs +1 -1
  122. package/esm2022/lib/desy-views/interfaces/tabs-items-data.mjs +1 -1
  123. package/esm2022/lib/desy-views/interfaces/tabs-panel-data.mjs +1 -1
  124. package/esm2022/lib/desy-views/interfaces/term-definition.data.mjs +1 -1
  125. package/esm2022/lib/shared/components/accessibility/accessibility-attributes.mjs +78 -0
  126. package/esm2022/lib/shared/components/accessibility/accessibility.component.mjs +124 -2
  127. package/esm2022/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.mjs +126 -2
  128. package/esm2022/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.mjs +126 -2
  129. package/esm2022/lib/shared/components/index.mjs +4 -3
  130. package/esm2022/lib/shared/components/spinner/spinner.component.mjs +329 -0
  131. package/esm2022/lib/shared/directives/accessibility-directive.mjs +52 -0
  132. package/esm2022/lib/shared/directives/custom-inner-content.directive.mjs +21 -4
  133. package/esm2022/lib/shared/interfaces/accessibility-data.mjs +2 -0
  134. package/esm2022/lib/shared/pipes/make-html-list.pipe.mjs +2 -2
  135. package/esm2022/lib/shared/shared.module.mjs +12 -7
  136. package/esm2022/lib/shared/sharedExternal.module.mjs +24 -0
  137. package/esm2022/lib/shared/utils/search-utils.mjs +5 -1
  138. package/esm2022/public-api.mjs +5 -2
  139. package/fesm2022/desy-angular.mjs +4273 -965
  140. package/fesm2022/desy-angular.mjs.map +1 -1
  141. package/lib/desy-angular.module.d.ts +2 -1
  142. package/lib/desy-buttons/components/button-loader/button-loader.component.d.ts +2 -0
  143. package/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.d.ts +3 -3
  144. package/lib/desy-buttons/desy-buttons.module.d.ts +3 -3
  145. package/lib/desy-buttons/interfaces/listbox-item-data.d.ts +2 -2
  146. package/lib/desy-commons/interfaces/title-data.d.ts +2 -2
  147. package/lib/desy-forms/components/datepicker/datepicker.component.d.ts +31 -0
  148. package/lib/desy-forms/components/datepicker/datepicker.pipe.d.ts +7 -0
  149. package/lib/desy-forms/components/tree/tree-item/tree-item.component.d.ts +5 -5
  150. package/lib/desy-forms/components/tree/tree.component.d.ts +5 -4
  151. package/lib/desy-forms/desy-forms.module.d.ts +10 -6
  152. package/lib/desy-forms/interfaces/error-message-data.d.ts +2 -2
  153. package/lib/desy-forms/interfaces/fieldset-data.d.ts +2 -2
  154. package/lib/desy-forms/interfaces/hint-data.d.ts +2 -2
  155. package/lib/desy-forms/interfaces/item-checkbox-data.d.ts +3 -3
  156. package/lib/desy-forms/interfaces/item-date-input-data.d.ts +3 -3
  157. package/lib/desy-forms/interfaces/item-input-group-data.d.ts +3 -3
  158. package/lib/desy-forms/interfaces/item-radio-data.d.ts +3 -3
  159. package/lib/desy-forms/interfaces/label-data.d.ts +2 -2
  160. package/lib/desy-forms/interfaces/select-item-data.d.ts +2 -2
  161. package/lib/desy-modals/components/modal/modal.component.d.ts +8 -8
  162. package/lib/desy-modals/interfaces/dialog-options.d.ts +2 -2
  163. package/lib/desy-modals/interfaces/modal-options.d.ts +4 -4
  164. package/lib/desy-modals/services/dialog.service.d.ts +1 -1
  165. package/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.d.ts +2 -1
  166. package/lib/desy-nav/components/header/header-mobileText/header-mobile-text.component.d.ts +61 -0
  167. package/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.d.ts +1 -1
  168. package/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.d.ts +1 -1
  169. package/lib/desy-nav/components/header-mini/header-mini.component.d.ts +1 -1
  170. package/lib/desy-nav/components/links-list/links-list-icon-right/links-list-icon-right.component.d.ts +8 -0
  171. package/lib/desy-nav/components/links-list/links-list-item/links-list-item.component.d.ts +4 -2
  172. package/lib/desy-nav/components/links-list/links-list.component.d.ts +2 -1
  173. package/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.d.ts +2 -2
  174. package/lib/desy-nav/components/menu-navigation/menu-navigation.component.d.ts +75 -13
  175. package/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.d.ts +3 -3
  176. package/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.d.ts +3 -3
  177. package/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.d.ts +3 -3
  178. package/lib/desy-nav/components/menubar/menubar.component.d.ts +75 -13
  179. package/lib/desy-nav/components/nav/nav-item/nav-item.component.d.ts +2 -2
  180. package/lib/desy-nav/components/notification/notification.component.d.ts +2 -2
  181. package/lib/desy-nav/desy-nav.module.d.ts +29 -28
  182. package/lib/desy-nav/interfaces/breadcrumbs.data.d.ts +2 -2
  183. package/lib/desy-nav/interfaces/error-summary-data.d.ts +2 -2
  184. package/lib/desy-nav/interfaces/footer-data.d.ts +3 -3
  185. package/lib/desy-nav/interfaces/footer-logo.d.ts +1 -0
  186. package/lib/desy-nav/interfaces/header-dropdown-data.d.ts +2 -2
  187. package/lib/desy-nav/interfaces/header-mobile-text-data.d.ts +2 -2
  188. package/lib/desy-nav/interfaces/header-navigation-item-data.d.ts +2 -2
  189. package/lib/desy-nav/interfaces/header-subnav-data.d.ts +2 -2
  190. package/lib/desy-nav/interfaces/menu-horizontal-item-data.d.ts +2 -2
  191. package/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.d.ts +2 -2
  192. package/lib/desy-nav/interfaces/menu-navigation-item-sub-item.d.ts +2 -2
  193. package/lib/desy-nav/interfaces/menu-navigation.d.ts +2 -2
  194. package/lib/desy-nav/interfaces/menu-vertical-items-data.d.ts +2 -2
  195. package/lib/desy-nav/interfaces/menu-vertical-sub-data.d.ts +2 -2
  196. package/lib/desy-nav/interfaces/menu-vertical-sub-items-data.d.ts +2 -2
  197. package/lib/desy-nav/interfaces/menubar-item-sub.d.ts +2 -2
  198. package/lib/desy-nav/interfaces/menubar-item.d.ts +3 -3
  199. package/lib/desy-nav/interfaces/nav-item.data.d.ts +2 -2
  200. package/lib/desy-nav/interfaces/notification-items-data.d.ts +2 -2
  201. package/lib/desy-nav/interfaces/notification-options.d.ts +4 -4
  202. package/lib/desy-pagination/components/pagination/pagination.component.d.ts +4 -4
  203. package/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.d.ts +3 -3
  204. package/lib/desy-pagination/desy-pagination.module.d.ts +3 -1
  205. package/lib/desy-tables/components/table/table.component.d.ts +3 -0
  206. package/lib/desy-tables/components/table-advanced/table-advanced.component.d.ts +1 -1
  207. package/lib/desy-tables/directives/focus-clicked-cell.directive.d.ts +1 -0
  208. package/lib/desy-tables/interfaces/cell-data.d.ts +2 -2
  209. package/lib/desy-tables/interfaces/wrapper-data.d.ts +2 -2
  210. package/lib/desy-views/components/accordion/accordion.component.d.ts +75 -13
  211. package/lib/desy-views/components/collapsible/collapsible.component.d.ts +5 -1
  212. package/lib/desy-views/components/item/item.component.d.ts +7 -7
  213. package/lib/desy-views/components/media-object/media-object.component.d.ts +75 -13
  214. package/lib/desy-views/components/status/status.component.d.ts +75 -13
  215. package/lib/desy-views/components/status-item/status-item.component.d.ts +77 -15
  216. package/lib/desy-views/components/tabs/tabs.component.d.ts +77 -15
  217. package/lib/desy-views/components/tooltip/tooltip.component.d.ts +75 -13
  218. package/lib/desy-views/desy-views.module.d.ts +30 -31
  219. package/lib/desy-views/interfaces/accordion-item.data.d.ts +2 -2
  220. package/lib/desy-views/interfaces/alert-options.d.ts +2 -2
  221. package/lib/desy-views/interfaces/description-item.data.d.ts +2 -2
  222. package/lib/desy-views/interfaces/status-data.d.ts +2 -2
  223. package/lib/desy-views/interfaces/tabs-items-data.d.ts +2 -2
  224. package/lib/desy-views/interfaces/tabs-panel-data.d.ts +2 -2
  225. package/lib/desy-views/interfaces/term-definition.data.d.ts +2 -2
  226. package/lib/shared/components/accessibility/accessibility-attributes.d.ts +1 -0
  227. package/lib/shared/components/accessibility/accessibility.component.d.ts +78 -17
  228. package/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.d.ts +79 -16
  229. package/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.d.ts +79 -16
  230. package/lib/shared/components/index.d.ts +3 -2
  231. package/lib/shared/components/spinner/spinner.component.d.ts +86 -0
  232. package/lib/shared/directives/accessibility-directive.d.ts +16 -0
  233. package/lib/shared/directives/custom-inner-content.directive.d.ts +3 -2
  234. package/lib/shared/interfaces/accessibility-data.d.ts +77 -0
  235. package/lib/shared/shared.module.d.ts +4 -3
  236. package/lib/shared/sharedExternal.module.d.ts +8 -0
  237. package/package.json +2 -2
  238. package/public-api.d.ts +4 -1
  239. package/esm2022/lib/desy-forms/interfaces/accesibility-data.mjs +0 -2
  240. package/esm2022/lib/desy-pagination/interfaces/index.mjs +0 -2
  241. package/esm2022/lib/desy-views/components/spinner/spinner.component.mjs +0 -81
  242. package/esm2022/lib/shared/interfaces/accesibility-data.mjs +0 -2
  243. package/lib/desy-forms/interfaces/accesibility-data.d.ts +0 -15
  244. package/lib/desy-pagination/interfaces/index.d.ts +0 -1
  245. package/lib/desy-views/components/spinner/spinner.component.d.ts +0 -24
  246. package/lib/shared/interfaces/accesibility-data.d.ts +0 -16
@@ -13,9 +13,10 @@ import * as i1 from "@angular/common";
13
13
  import * as i2 from "@angular/router";
14
14
  import * as i3 from "../../../shared/directives/attribute-change.directive";
15
15
  import * as i4 from "../../../shared/directives/custom-inner-content.directive";
16
- import * as i5 from "./directives/menubaritem.directive";
17
- import * as i6 from "../../../shared/pipes/make-html-list.pipe";
18
- import * as i7 from "../../../shared/pipes/external-href.pipe";
16
+ import * as i5 from "../../../shared/directives/accessibility-directive";
17
+ import * as i6 from "./directives/menubaritem.directive";
18
+ import * as i7 from "../../../shared/pipes/make-html-list.pipe";
19
+ import * as i8 from "../../../shared/pipes/external-href.pipe";
19
20
  export class MenubarComponent extends AccessibilityComponent {
20
21
  constructor(changeDetectorRef) {
21
22
  super();
@@ -24,23 +25,85 @@ export class MenubarComponent extends AccessibilityComponent {
24
25
  this.activeItemChange = new EventEmitter();
25
26
  this.activeSubItemChange = new EventEmitter();
26
27
  this.cfg = true;
28
+ this.role = null;
29
+ this.ariaLabel = null;
30
+ this.ariaDescribedBy = null;
31
+ this.ariaLabelledBy = null;
32
+ this.ariaHidden = null;
33
+ this.ariaDisabled = null;
34
+ this.ariaControls = null;
35
+ this.ariaCurrent = null;
36
+ this.ariaLive = null;
37
+ this.ariaExpanded = null;
38
+ this.ariaErrorMessage = null;
39
+ this.ariaHasPopup = null;
40
+ this.ariaModal = null;
41
+ this.ariaChecked = null;
42
+ this.ariaPressed = null;
43
+ this.ariaReadonly = null;
44
+ this.ariaRequired = null;
45
+ this.ariaSelected = null;
46
+ this.ariaValuemin = null;
47
+ this.ariaValuemax = null;
48
+ this.ariaValuenow = null;
49
+ this.ariaValuetext = null;
50
+ this.ariaOrientation = null;
51
+ this.ariaLevel = null;
52
+ this.ariaMultiselectable = null;
53
+ this.ariaPlaceholder = null;
54
+ this.ariaPosinset = null;
55
+ this.ariaSetsize = null;
56
+ this.ariaSort = null;
57
+ this.ariaBusy = null;
58
+ this.ariaDropeffect = null;
59
+ this.ariaGrabbed = null;
60
+ this.ariaActivedescendant = null;
61
+ this.ariaAtomic = null;
62
+ this.ariaAutocomplete = null;
63
+ this.ariaBraillelabel = null;
64
+ this.ariaBrailleroledescription = null;
65
+ this.ariaColcount = null;
66
+ this.ariaColindex = null;
67
+ this.ariaColindextext = null;
68
+ this.ariaColspan = null;
69
+ this.ariaDescription = null;
70
+ this.ariaDetails = null;
71
+ this.ariaFlowto = null;
72
+ this.ariaInvalid = null;
73
+ this.ariaKeyshortcuts = null;
74
+ this.ariaOwns = null;
75
+ this.ariaRelevant = null;
76
+ this.ariaRoledescription = null;
77
+ this.ariaRowcount = null;
78
+ this.ariaRowindex = null;
79
+ this.ariaRowindextext = null;
80
+ this.ariaRowspan = null;
81
+ this.tabindex = null;
82
+ this.title = null;
83
+ this.alt = null;
84
+ this.lang = null;
85
+ this.accesskey = null;
86
+ this.autocomplete = null;
87
+ this.autofocus = null;
88
+ this.contenteditable = null;
89
+ this.dir = null;
90
+ this.draggable = null;
91
+ this.enterkeyhint = null;
92
+ this.hidden = null;
93
+ this.inputmode = null;
94
+ this.spellcheck = null;
95
+ this.translate = null;
96
+ this.ariaMultiline = null;
97
+ this.for = null;
98
+ this.form = null;
99
+ this.headers = null;
100
+ this.placeholder = null;
101
+ this.readonly = null;
102
+ this.required = null;
27
103
  this.viewInit = false;
28
104
  this.currentFocusItemIndex = 0;
29
105
  }
30
106
  ngOnChanges(changes) {
31
- this.roleData = this.role ? this.role : null;
32
- this.ariaLabelData = this.ariaLabel ? this.ariaLabel : null;
33
- this.ariaDescribedbyData = this.ariaDescribedBy ? this.ariaDescribedBy : null;
34
- this.ariaLabelledbyData = this.ariaLabelledBy ? this.ariaLabelledBy : null;
35
- this.ariaHiddenData = this.ariaHidden ? this.ariaHidden : null;
36
- this.ariaDisabledData = this.ariaDisabled ? this.ariaDisabled : null;
37
- this.ariaControlsData = this.ariaControls ? this.ariaControls : null;
38
- this.ariaCurrentData = this.ariaCurrent ? this.ariaCurrent : null;
39
- this.ariaLiveData = this.ariaLive ? this.ariaLive : null;
40
- this.ariaExpandedData = this.ariaExpanded ? this.ariaExpanded : null;
41
- this.ariaErrormessageData = this.ariaErrorMessage ? this.ariaErrorMessage : null;
42
- this.ariaHaspopupData = this.ariaHasPopup ? this.ariaHasPopup : null;
43
- this.ariaModalData = this.ariaModal ? this.ariaModal : null;
44
107
  if (this.viewInit) {
45
108
  this.checkChanges();
46
109
  }
@@ -620,7 +683,7 @@ export class MenubarComponent extends AccessibilityComponent {
620
683
  return ariaChecked;
621
684
  }
622
685
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MenubarComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
623
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MenubarComponent, selector: "desy-menubar", inputs: { idPrefix: "idPrefix", items: "items", labelRef: "labelRef", labelData: "labelData", labelText: "labelText", classes: "classes", id: "id" }, outputs: { itemsChange: "itemsChange", activeItemChange: "activeItemChange", activeSubItemChange: "activeSubItemChange" }, host: { properties: { "class": "this.classes", "class.c-menubar": "this.cfg", "attr.id": "this.id", "attr.role": "this.roleData", "attr.aria-label": "this.ariaLabelData", "attr.aria-describedby": "this.ariaDescribedbyData", "attr.aria-labelledby": "this.ariaLabelledbyData", "attr.aria-hidden": "this.ariaHiddenData", "attr.aria-disabled": "this.ariaDisabledData", "attr.aria-controls": "this.ariaControlsData", "attr.aria-current": "this.ariaCurrentData", "attr.aria-live": "this.ariaLiveData", "attr.aria-expanded": "this.ariaExpandedData", "attr.aria-errormessage": "this.ariaErrormessageData", "attr.aria-haspopup": "this.ariaHaspopupData", "attr.aria-modal": "this.ariaModalData" } }, queries: [{ propertyName: "labelComponent", predicate: MenubarLabelComponent }, { propertyName: "itemComponentList", predicate: MenubarItemComponent }], viewQueries: [{ propertyName: "menubar", first: true, predicate: ["menubar"], descendants: true, read: ElementRef }, { propertyName: "menuItems", predicate: MenubaritemDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: " <ng-container *ngIf=\"getLabelRef()\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelComponent ? labelComponent.classes : (labelData ? labelData.classes : null)] | makeHtmlList\">\n <ng-container *ngTemplateOutlet=\"getLabelRef()\"></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!getLabelRef() && (labelData || labelText)\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelData ? labelData.classes : null] | makeHtmlList\">\n <ng-container *desyCustomInnerContent=\"{ html: getLabelContent() }\"></ng-container>\n </div>\n </ng-container>\n <ul #menubar [id]=\"id + '-menubar'\" class=\"lg:flex lg:flex-wrap\" role=\"menubar\"\n (focusin)=\"handleMenuFocusIn()\"\n (focusout)=\"handleMenuFocusOut($event)\"\n [ngClass]=\"{ 'focus': isFocused }\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"getLabelRef() || labelData || labelText ? id + '-label' : null\">\n <ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n <li class=\"relative\" role=\"none\" desyMenubaritem (contentChanged)=\"checkChanges()\">\n <a *ngIf=\"item.sub\" #link\n role=\"menuitem\" aria-haspopup=\"true\" aria-expanded=\"false\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\" \n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy ? item.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current]=\"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live]=\"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-modal]=\"item.ariaModal ? item.ariaModal : null\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span>\n <svg class=\"inline-block -mr-2 align-middle -my-px\" viewBox=\"0 0 96 96\" aria-hidden=\"true\" fill=\"currentColor\" focusable=\"false\" width=\"1.5em\" height=\"1.5em\"><g><path d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\"/></g></svg>\n </a>\n <a *ngIf=\"item.routerLink && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledBy]=\"item.ariaLabelledBy ? item.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current]=\"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live]=\"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-expanded]=\"item.ariaExpanded ? item.ariaExpanded : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"item.ariaHasPopup ? item.ariaHasPopup : null\"\n [attr.aria-modal]=\"item.ariaModal ? item.ariaModal : null\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n <a *ngIf=\"!item.routerLink && item.href && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [href]=\"item.href | externalHref\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledBy]=\"item.ariaLabelledBy ? item.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current]=\"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live]=\"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-expanded]=\"item.ariaExpanded ? item.ariaExpanded : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"item.ariaHasPopup ? item.ariaHasPopup : null\"\n [attr.aria-modal]=\"item.ariaModal ? item.ariaModal : null\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n\n <ul *ngIf=\"item.sub && getItemSubitems(item)\" #popupMenu role=\"menu\" tabindex=\"-1\"\n [ngStyle]=\"getPopupStyle(itemIndex)\"\n [class]=\"['c-menubar__tooltip w-max max-w-64 hidden border border-neutral-base shadow-md bg-white text-sm', item.sub.classes] | makeHtmlList\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : (item.sub.ariaLabel ? item.sub.ariaLabel : null)\"\n [attr.aria-describedby]=\"item.sub.ariaDescribedBy ? item.sub.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"item.sub.ariaLabelledBy ? item.sub.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.sub.ariaHidden ? item.sub.ariaHidden : null\"\n [attr.aria-disabled]=\"item.sub.ariaDisabled ? item.sub.ariaDisabled : null\"\n [attr.aria-controls]=\"item.sub.ariaControls ? item.sub.ariaControls : null\"\n [attr.aria-current]=\"item.sub.ariaCurrent ? item.sub.ariaCurrent : null\"\n [attr.aria-live]=\"item.sub.ariaLive ? item.sub.ariaLive : null\"\n [attr.aria-expanded]=\"!!(menuData && menuData[itemIndex].open)\"\n [attr.aria-errormessage]=\"item.sub.ariaErrorMessage ? item.sub.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"item.sub.ariaHasPopup ? item.sub.ariaHasPopup : null\"\n [attr.aria-modal]=\"item.sub.ariaModal ? item.sub.ariaModal : null\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\n <ng-container [ngSwitch]=\"subItem.role\">\n <li #popupMenuItem *ngSwitchCase=\"'none'\" role=\"none\" tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li *ngSwitchCase=\"'group'\" role=\"none\">\n <ul role=\"group\" [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-label]=\"subItem.ariaLabel ? subItem.ariaLabel : null\">\n <ng-container *ngFor=\"let subsubitem of getSubItemSubitems(subItem); index as subsubIndex\">\n <ng-container *ngIf=\"subsubitem\">\n <li #popupMenuItem [attr.role]=\"subsubitem.role ? subsubitem.role : null\" tabindex=\"-1\"\n [id]=\"getSubItemId(subsubitem, subsubIndex, getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex)))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex, subsubIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex, subsubIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex, subsubIndex)\"\n [attr.aria-checked]=\"getSubSubItemAriaChecked(subsubitem)\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subsubitem, html: subsubitem.html, text: subsubitem.text}\"></ng-container>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitem'\" role=\"menuitem\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white focus:bg-primary-base focus:text-white focus:outline-none\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitemcheckbox'\" role=\"menuitemcheckbox\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-checked]=\"!!subItem.checked\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'separator'\" role=\"separator\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"my-sm border-b border-neutral-base\">\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i3.AttributeChangeDirective, selector: "[desyAttributeChange]", inputs: ["attributesToCheck", "desyAttributeChangeEnabled"], outputs: ["desyAttributeChange", "desyAttributeChangeMutation"] }, { kind: "directive", type: i4.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "directive", type: i5.MenubaritemDirective, selector: "[desyMenubaritem]", outputs: ["contentChanged"] }, { kind: "pipe", type: i6.MakeHtmlListPipe, name: "makeHtmlList" }, { kind: "pipe", type: i7.ExternalHrefPipe, name: "externalHref" }] }); }
686
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MenubarComponent, selector: "desy-menubar", inputs: { idPrefix: "idPrefix", items: "items", labelRef: "labelRef", labelData: "labelData", labelText: "labelText", classes: "classes", id: "id" }, outputs: { itemsChange: "itemsChange", activeItemChange: "activeItemChange", activeSubItemChange: "activeSubItemChange" }, host: { properties: { "class": "this.classes", "class.c-menubar": "this.cfg", "attr.id": "this.id", "attr.role": "this.role", "attr.aria-label": "this.ariaLabel", "attr.aria-describedby": "this.ariaDescribedBy", "attr.aria-labelledby": "this.ariaLabelledBy", "attr.aria-hidden": "this.ariaHidden", "attr.aria-disabled": "this.ariaDisabled", "attr.aria-controls": "this.ariaControls", "attr.aria-current": "this.ariaCurrent", "attr.aria-live": "this.ariaLive", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-errormessage": "this.ariaErrorMessage", "attr.aria-haspopup": "this.ariaHasPopup", "attr.aria-modal": "this.ariaModal", "attr.aria-checked": "this.ariaChecked", "attr.aria-pressed": "this.ariaPressed", "attr.aria-readonly": "this.ariaReadonly", "attr.aria-required": "this.ariaRequired", "attr.aria-selected": "this.ariaSelected", "attr.aria-valuemin": "this.ariaValuemin", "attr.aria-valuemax": "this.ariaValuemax", "attr.aria-valuenow": "this.ariaValuenow", "attr.aria-valuetext": "this.ariaValuetext", "attr.aria-orientation": "this.ariaOrientation", "attr.aria-level": "this.ariaLevel", "attr.aria-multiselectable": "this.ariaMultiselectable", "attr.aria-placeholder": "this.ariaPlaceholder", "attr.aria-posinset": "this.ariaPosinset", "attr.aria-setsize": "this.ariaSetsize", "attr.aria-sort": "this.ariaSort", "attr.aria-busy": "this.ariaBusy", "attr.aria-dropeffect": "this.ariaDropeffect", "attr.aria-grabbed": "this.ariaGrabbed", "attr.aria-activedescendant": "this.ariaActivedescendant", "attr.aria-atomic": "this.ariaAtomic", "attr.aria-autocomplete": "this.ariaAutocomplete", "attr.aria-braillelabel": "this.ariaBraillelabel", "attr.aria-brailleroledescription": "this.ariaBrailleroledescription", "attr.aria-colcount": "this.ariaColcount", "attr.aria-colindex": "this.ariaColindex", "attr.aria-colindextext": "this.ariaColindextext", "attr.aria-colspan": "this.ariaColspan", "attr.aria-description": "this.ariaDescription", "attr.aria-details": "this.ariaDetails", "attr.aria-flowto": "this.ariaFlowto", "attr.aria-invalid": "this.ariaInvalid", "attr.aria-keyshortcuts": "this.ariaKeyshortcuts", "attr.aria-owns": "this.ariaOwns", "attr.aria-relevant": "this.ariaRelevant", "attr.aria-roledescription": "this.ariaRoledescription", "attr.aria-rowcount": "this.ariaRowcount", "attr.aria-rowindex": "this.ariaRowindex", "attr.aria-rowindextext": "this.ariaRowindextext", "attr.aria-rowspan": "this.ariaRowspan", "attr.tabindex": "this.tabindex", "attr.title": "this.title", "attr.alt": "this.alt", "attr.lang": "this.lang", "attr.accesskey": "this.accesskey", "attr.autocomplete": "this.autocomplete", "attr.autofocus": "this.autofocus", "attr.contenteditable": "this.contenteditable", "attr.dir": "this.dir", "attr.draggable": "this.draggable", "attr.enterkeyhint": "this.enterkeyhint", "attr.hidden": "this.hidden", "attr.inputmode": "this.inputmode", "attr.spellcheck": "this.spellcheck", "attr.translate": "this.translate", "attr.aria-multiline": "this.ariaMultiline", "attr.for": "this.for", "attr.form": "this.form", "attr.headers": "this.headers", "attr.placeholder": "this.placeholder", "attr.readonly": "this.readonly", "attr.required": "this.required" } }, queries: [{ propertyName: "labelComponent", predicate: MenubarLabelComponent }, { propertyName: "itemComponentList", predicate: MenubarItemComponent }], viewQueries: [{ propertyName: "menubar", first: true, predicate: ["menubar"], descendants: true, read: ElementRef }, { propertyName: "menuItems", predicate: MenubaritemDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: " <ng-container *ngIf=\"getLabelRef()\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelComponent ? labelComponent.classes : (labelData ? labelData.classes : null)] | makeHtmlList\">\n <ng-container *ngTemplateOutlet=\"getLabelRef()\"></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!getLabelRef() && (labelData || labelText)\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelData ? labelData.classes : null] | makeHtmlList\">\n <ng-container *desyCustomInnerContent=\"{ html: getLabelContent() }\"></ng-container>\n </div>\n </ng-container>\n <ul #menubar [id]=\"id + '-menubar'\" class=\"lg:flex lg:flex-wrap\" role=\"menubar\"\n (focusin)=\"handleMenuFocusIn()\"\n (focusout)=\"handleMenuFocusOut($event)\"\n [ngClass]=\"{ 'focus': isFocused }\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"getLabelRef() || labelData || labelText ? id + '-label' : null\">\n <ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n <li class=\"relative\" role=\"none\" desyMenubaritem (contentChanged)=\"checkChanges()\">\n <a *ngIf=\"item.sub\" #link\n role=\"menuitem\" aria-haspopup=\"true\" \n [attr.aria-expanded]=\"menuData && menuData[itemIndex] ? menuData[itemIndex].open ? 'true' : 'false' : 'false'\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\" \n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [desyAppAccessibility]=\"item\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span>\n <svg class=\"inline-block -mr-2 align-middle -my-px\" viewBox=\"0 0 96 96\" aria-hidden=\"true\" fill=\"currentColor\" focusable=\"false\" width=\"1.5em\" height=\"1.5em\"><g><path d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\"/></g></svg>\n </a>\n <a *ngIf=\"item.routerLink && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [desyAppAccessibility]=\"item\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n <a *ngIf=\"!item.routerLink && item.href && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [href]=\"item.href | externalHref\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [desyAppAccessibility]=\"item\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n\n <ul *ngIf=\"item.sub && getItemSubitems(item)\" #popupMenu role=\"menu\" tabindex=\"-1\"\n [ngStyle]=\"getPopupStyle(itemIndex)\"\n [class]=\"['c-menubar__tooltip w-max max-w-64 hidden border border-neutral-base shadow-md bg-white text-sm', item.sub.classes] | makeHtmlList\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : (item.sub.ariaLabel ? item.sub.ariaLabel : null)\"\n [desyAppAccessibility]=\"item.sub\"\n [attr.aria-expanded]=\"!!(menuData && menuData[itemIndex].open)\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\n <ng-container [ngSwitch]=\"subItem.role\">\n <li #popupMenuItem *ngSwitchCase=\"'none'\" role=\"none\" tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li *ngSwitchCase=\"'group'\" role=\"none\">\n <ul role=\"group\" [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-label]=\"subItem.ariaLabel ? subItem.ariaLabel : null\">\n <ng-container *ngFor=\"let subsubitem of getSubItemSubitems(subItem); index as subsubIndex\">\n <ng-container *ngIf=\"subsubitem\">\n <li #popupMenuItem [attr.role]=\"subsubitem.role ? subsubitem.role : null\" tabindex=\"-1\"\n [id]=\"getSubItemId(subsubitem, subsubIndex, getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex)))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex, subsubIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex, subsubIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex, subsubIndex)\"\n [attr.aria-checked]=\"getSubSubItemAriaChecked(subsubitem)\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subsubitem, html: subsubitem.html, text: subsubitem.text}\"></ng-container>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitem'\" role=\"menuitem\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white focus:bg-primary-base focus:text-white focus:outline-none\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitemcheckbox'\" role=\"menuitemcheckbox\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-checked]=\"!!subItem.checked\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'separator'\" role=\"separator\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"my-sm border-b border-neutral-base\">\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i3.AttributeChangeDirective, selector: "[desyAttributeChange]", inputs: ["attributesToCheck", "desyAttributeChangeEnabled"], outputs: ["desyAttributeChange", "desyAttributeChangeMutation"] }, { kind: "directive", type: i4.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "directive", type: i5.AccessibilityDirective, selector: "[desyAppAccessibility]", inputs: ["desyAppAccessibility"] }, { kind: "directive", type: i6.MenubaritemDirective, selector: "[desyMenubaritem]", outputs: ["contentChanged"] }, { kind: "pipe", type: i7.MakeHtmlListPipe, name: "makeHtmlList" }, { kind: "pipe", type: i8.ExternalHrefPipe, name: "externalHref" }] }); }
624
687
  }
625
688
  __decorate([
626
689
  DesyContentChild(),
@@ -628,7 +691,7 @@ __decorate([
628
691
  ], MenubarComponent.prototype, "labelComponent", void 0);
629
692
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MenubarComponent, decorators: [{
630
693
  type: Component,
631
- args: [{ selector: 'desy-menubar', template: " <ng-container *ngIf=\"getLabelRef()\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelComponent ? labelComponent.classes : (labelData ? labelData.classes : null)] | makeHtmlList\">\n <ng-container *ngTemplateOutlet=\"getLabelRef()\"></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!getLabelRef() && (labelData || labelText)\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelData ? labelData.classes : null] | makeHtmlList\">\n <ng-container *desyCustomInnerContent=\"{ html: getLabelContent() }\"></ng-container>\n </div>\n </ng-container>\n <ul #menubar [id]=\"id + '-menubar'\" class=\"lg:flex lg:flex-wrap\" role=\"menubar\"\n (focusin)=\"handleMenuFocusIn()\"\n (focusout)=\"handleMenuFocusOut($event)\"\n [ngClass]=\"{ 'focus': isFocused }\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"getLabelRef() || labelData || labelText ? id + '-label' : null\">\n <ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n <li class=\"relative\" role=\"none\" desyMenubaritem (contentChanged)=\"checkChanges()\">\n <a *ngIf=\"item.sub\" #link\n role=\"menuitem\" aria-haspopup=\"true\" aria-expanded=\"false\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\" \n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy ? item.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current]=\"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live]=\"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-modal]=\"item.ariaModal ? item.ariaModal : null\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span>\n <svg class=\"inline-block -mr-2 align-middle -my-px\" viewBox=\"0 0 96 96\" aria-hidden=\"true\" fill=\"currentColor\" focusable=\"false\" width=\"1.5em\" height=\"1.5em\"><g><path d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\"/></g></svg>\n </a>\n <a *ngIf=\"item.routerLink && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledBy]=\"item.ariaLabelledBy ? item.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current]=\"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live]=\"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-expanded]=\"item.ariaExpanded ? item.ariaExpanded : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"item.ariaHasPopup ? item.ariaHasPopup : null\"\n [attr.aria-modal]=\"item.ariaModal ? item.ariaModal : null\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n <a *ngIf=\"!item.routerLink && item.href && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [href]=\"item.href | externalHref\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledBy]=\"item.ariaLabelledBy ? item.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current]=\"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live]=\"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-expanded]=\"item.ariaExpanded ? item.ariaExpanded : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"item.ariaHasPopup ? item.ariaHasPopup : null\"\n [attr.aria-modal]=\"item.ariaModal ? item.ariaModal : null\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n\n <ul *ngIf=\"item.sub && getItemSubitems(item)\" #popupMenu role=\"menu\" tabindex=\"-1\"\n [ngStyle]=\"getPopupStyle(itemIndex)\"\n [class]=\"['c-menubar__tooltip w-max max-w-64 hidden border border-neutral-base shadow-md bg-white text-sm', item.sub.classes] | makeHtmlList\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : (item.sub.ariaLabel ? item.sub.ariaLabel : null)\"\n [attr.aria-describedby]=\"item.sub.ariaDescribedBy ? item.sub.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"item.sub.ariaLabelledBy ? item.sub.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.sub.ariaHidden ? item.sub.ariaHidden : null\"\n [attr.aria-disabled]=\"item.sub.ariaDisabled ? item.sub.ariaDisabled : null\"\n [attr.aria-controls]=\"item.sub.ariaControls ? item.sub.ariaControls : null\"\n [attr.aria-current]=\"item.sub.ariaCurrent ? item.sub.ariaCurrent : null\"\n [attr.aria-live]=\"item.sub.ariaLive ? item.sub.ariaLive : null\"\n [attr.aria-expanded]=\"!!(menuData && menuData[itemIndex].open)\"\n [attr.aria-errormessage]=\"item.sub.ariaErrorMessage ? item.sub.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"item.sub.ariaHasPopup ? item.sub.ariaHasPopup : null\"\n [attr.aria-modal]=\"item.sub.ariaModal ? item.sub.ariaModal : null\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\n <ng-container [ngSwitch]=\"subItem.role\">\n <li #popupMenuItem *ngSwitchCase=\"'none'\" role=\"none\" tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li *ngSwitchCase=\"'group'\" role=\"none\">\n <ul role=\"group\" [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-label]=\"subItem.ariaLabel ? subItem.ariaLabel : null\">\n <ng-container *ngFor=\"let subsubitem of getSubItemSubitems(subItem); index as subsubIndex\">\n <ng-container *ngIf=\"subsubitem\">\n <li #popupMenuItem [attr.role]=\"subsubitem.role ? subsubitem.role : null\" tabindex=\"-1\"\n [id]=\"getSubItemId(subsubitem, subsubIndex, getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex)))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex, subsubIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex, subsubIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex, subsubIndex)\"\n [attr.aria-checked]=\"getSubSubItemAriaChecked(subsubitem)\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subsubitem, html: subsubitem.html, text: subsubitem.text}\"></ng-container>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitem'\" role=\"menuitem\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white focus:bg-primary-base focus:text-white focus:outline-none\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitemcheckbox'\" role=\"menuitemcheckbox\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-checked]=\"!!subItem.checked\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'separator'\" role=\"separator\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"my-sm border-b border-neutral-base\">\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n" }]
694
+ args: [{ selector: 'desy-menubar', template: " <ng-container *ngIf=\"getLabelRef()\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelComponent ? labelComponent.classes : (labelData ? labelData.classes : null)] | makeHtmlList\">\n <ng-container *ngTemplateOutlet=\"getLabelRef()\"></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!getLabelRef() && (labelData || labelText)\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelData ? labelData.classes : null] | makeHtmlList\">\n <ng-container *desyCustomInnerContent=\"{ html: getLabelContent() }\"></ng-container>\n </div>\n </ng-container>\n <ul #menubar [id]=\"id + '-menubar'\" class=\"lg:flex lg:flex-wrap\" role=\"menubar\"\n (focusin)=\"handleMenuFocusIn()\"\n (focusout)=\"handleMenuFocusOut($event)\"\n [ngClass]=\"{ 'focus': isFocused }\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"getLabelRef() || labelData || labelText ? id + '-label' : null\">\n <ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n <li class=\"relative\" role=\"none\" desyMenubaritem (contentChanged)=\"checkChanges()\">\n <a *ngIf=\"item.sub\" #link\n role=\"menuitem\" aria-haspopup=\"true\" \n [attr.aria-expanded]=\"menuData && menuData[itemIndex] ? menuData[itemIndex].open ? 'true' : 'false' : 'false'\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\" \n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [desyAppAccessibility]=\"item\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span>\n <svg class=\"inline-block -mr-2 align-middle -my-px\" viewBox=\"0 0 96 96\" aria-hidden=\"true\" fill=\"currentColor\" focusable=\"false\" width=\"1.5em\" height=\"1.5em\"><g><path d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\"/></g></svg>\n </a>\n <a *ngIf=\"item.routerLink && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [desyAppAccessibility]=\"item\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n <a *ngIf=\"!item.routerLink && item.href && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [href]=\"item.href | externalHref\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [desyAppAccessibility]=\"item\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n\n <ul *ngIf=\"item.sub && getItemSubitems(item)\" #popupMenu role=\"menu\" tabindex=\"-1\"\n [ngStyle]=\"getPopupStyle(itemIndex)\"\n [class]=\"['c-menubar__tooltip w-max max-w-64 hidden border border-neutral-base shadow-md bg-white text-sm', item.sub.classes] | makeHtmlList\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : (item.sub.ariaLabel ? item.sub.ariaLabel : null)\"\n [desyAppAccessibility]=\"item.sub\"\n [attr.aria-expanded]=\"!!(menuData && menuData[itemIndex].open)\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\n <ng-container [ngSwitch]=\"subItem.role\">\n <li #popupMenuItem *ngSwitchCase=\"'none'\" role=\"none\" tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li *ngSwitchCase=\"'group'\" role=\"none\">\n <ul role=\"group\" [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-label]=\"subItem.ariaLabel ? subItem.ariaLabel : null\">\n <ng-container *ngFor=\"let subsubitem of getSubItemSubitems(subItem); index as subsubIndex\">\n <ng-container *ngIf=\"subsubitem\">\n <li #popupMenuItem [attr.role]=\"subsubitem.role ? subsubitem.role : null\" tabindex=\"-1\"\n [id]=\"getSubItemId(subsubitem, subsubIndex, getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex)))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex, subsubIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex, subsubIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex, subsubIndex)\"\n [attr.aria-checked]=\"getSubSubItemAriaChecked(subsubitem)\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subsubitem, html: subsubitem.html, text: subsubitem.text}\"></ng-container>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitem'\" role=\"menuitem\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white focus:bg-primary-base focus:text-white focus:outline-none\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitemcheckbox'\" role=\"menuitemcheckbox\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-checked]=\"!!subItem.checked\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'separator'\" role=\"separator\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"my-sm border-b border-neutral-base\">\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n" }]
632
695
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { idPrefix: [{
633
696
  type: Input
634
697
  }], items: [{
@@ -658,45 +721,231 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
658
721
  }, {
659
722
  type: HostBinding,
660
723
  args: ['attr.id']
661
- }], roleData: [{
724
+ }], role: [{
662
725
  type: HostBinding,
663
726
  args: ['attr.role']
664
- }], ariaLabelData: [{
727
+ }], ariaLabel: [{
665
728
  type: HostBinding,
666
729
  args: ['attr.aria-label']
667
- }], ariaDescribedbyData: [{
730
+ }], ariaDescribedBy: [{
668
731
  type: HostBinding,
669
732
  args: ['attr.aria-describedby']
670
- }], ariaLabelledbyData: [{
733
+ }], ariaLabelledBy: [{
671
734
  type: HostBinding,
672
735
  args: ['attr.aria-labelledby']
673
- }], ariaHiddenData: [{
736
+ }], ariaHidden: [{
674
737
  type: HostBinding,
675
738
  args: ['attr.aria-hidden']
676
- }], ariaDisabledData: [{
739
+ }], ariaDisabled: [{
677
740
  type: HostBinding,
678
741
  args: ['attr.aria-disabled']
679
- }], ariaControlsData: [{
742
+ }], ariaControls: [{
680
743
  type: HostBinding,
681
744
  args: ['attr.aria-controls']
682
- }], ariaCurrentData: [{
745
+ }], ariaCurrent: [{
683
746
  type: HostBinding,
684
747
  args: ['attr.aria-current']
685
- }], ariaLiveData: [{
748
+ }], ariaLive: [{
686
749
  type: HostBinding,
687
750
  args: ['attr.aria-live']
688
- }], ariaExpandedData: [{
751
+ }], ariaExpanded: [{
689
752
  type: HostBinding,
690
753
  args: ['attr.aria-expanded']
691
- }], ariaErrormessageData: [{
754
+ }], ariaErrorMessage: [{
692
755
  type: HostBinding,
693
756
  args: ['attr.aria-errormessage']
694
- }], ariaHaspopupData: [{
757
+ }], ariaHasPopup: [{
695
758
  type: HostBinding,
696
759
  args: ['attr.aria-haspopup']
697
- }], ariaModalData: [{
760
+ }], ariaModal: [{
698
761
  type: HostBinding,
699
762
  args: ['attr.aria-modal']
763
+ }], ariaChecked: [{
764
+ type: HostBinding,
765
+ args: ['attr.aria-checked']
766
+ }], ariaPressed: [{
767
+ type: HostBinding,
768
+ args: ['attr.aria-pressed']
769
+ }], ariaReadonly: [{
770
+ type: HostBinding,
771
+ args: ['attr.aria-readonly']
772
+ }], ariaRequired: [{
773
+ type: HostBinding,
774
+ args: ['attr.aria-required']
775
+ }], ariaSelected: [{
776
+ type: HostBinding,
777
+ args: ['attr.aria-selected']
778
+ }], ariaValuemin: [{
779
+ type: HostBinding,
780
+ args: ['attr.aria-valuemin']
781
+ }], ariaValuemax: [{
782
+ type: HostBinding,
783
+ args: ['attr.aria-valuemax']
784
+ }], ariaValuenow: [{
785
+ type: HostBinding,
786
+ args: ['attr.aria-valuenow']
787
+ }], ariaValuetext: [{
788
+ type: HostBinding,
789
+ args: ['attr.aria-valuetext']
790
+ }], ariaOrientation: [{
791
+ type: HostBinding,
792
+ args: ['attr.aria-orientation']
793
+ }], ariaLevel: [{
794
+ type: HostBinding,
795
+ args: ['attr.aria-level']
796
+ }], ariaMultiselectable: [{
797
+ type: HostBinding,
798
+ args: ['attr.aria-multiselectable']
799
+ }], ariaPlaceholder: [{
800
+ type: HostBinding,
801
+ args: ['attr.aria-placeholder']
802
+ }], ariaPosinset: [{
803
+ type: HostBinding,
804
+ args: ['attr.aria-posinset']
805
+ }], ariaSetsize: [{
806
+ type: HostBinding,
807
+ args: ['attr.aria-setsize']
808
+ }], ariaSort: [{
809
+ type: HostBinding,
810
+ args: ['attr.aria-sort']
811
+ }], ariaBusy: [{
812
+ type: HostBinding,
813
+ args: ['attr.aria-busy']
814
+ }], ariaDropeffect: [{
815
+ type: HostBinding,
816
+ args: ['attr.aria-dropeffect']
817
+ }], ariaGrabbed: [{
818
+ type: HostBinding,
819
+ args: ['attr.aria-grabbed']
820
+ }], ariaActivedescendant: [{
821
+ type: HostBinding,
822
+ args: ['attr.aria-activedescendant']
823
+ }], ariaAtomic: [{
824
+ type: HostBinding,
825
+ args: ['attr.aria-atomic']
826
+ }], ariaAutocomplete: [{
827
+ type: HostBinding,
828
+ args: ['attr.aria-autocomplete']
829
+ }], ariaBraillelabel: [{
830
+ type: HostBinding,
831
+ args: ['attr.aria-braillelabel']
832
+ }], ariaBrailleroledescription: [{
833
+ type: HostBinding,
834
+ args: ['attr.aria-brailleroledescription']
835
+ }], ariaColcount: [{
836
+ type: HostBinding,
837
+ args: ['attr.aria-colcount']
838
+ }], ariaColindex: [{
839
+ type: HostBinding,
840
+ args: ['attr.aria-colindex']
841
+ }], ariaColindextext: [{
842
+ type: HostBinding,
843
+ args: ['attr.aria-colindextext']
844
+ }], ariaColspan: [{
845
+ type: HostBinding,
846
+ args: ['attr.aria-colspan']
847
+ }], ariaDescription: [{
848
+ type: HostBinding,
849
+ args: ['attr.aria-description']
850
+ }], ariaDetails: [{
851
+ type: HostBinding,
852
+ args: ['attr.aria-details']
853
+ }], ariaFlowto: [{
854
+ type: HostBinding,
855
+ args: ['attr.aria-flowto']
856
+ }], ariaInvalid: [{
857
+ type: HostBinding,
858
+ args: ['attr.aria-invalid']
859
+ }], ariaKeyshortcuts: [{
860
+ type: HostBinding,
861
+ args: ['attr.aria-keyshortcuts']
862
+ }], ariaOwns: [{
863
+ type: HostBinding,
864
+ args: ['attr.aria-owns']
865
+ }], ariaRelevant: [{
866
+ type: HostBinding,
867
+ args: ['attr.aria-relevant']
868
+ }], ariaRoledescription: [{
869
+ type: HostBinding,
870
+ args: ['attr.aria-roledescription']
871
+ }], ariaRowcount: [{
872
+ type: HostBinding,
873
+ args: ['attr.aria-rowcount']
874
+ }], ariaRowindex: [{
875
+ type: HostBinding,
876
+ args: ['attr.aria-rowindex']
877
+ }], ariaRowindextext: [{
878
+ type: HostBinding,
879
+ args: ['attr.aria-rowindextext']
880
+ }], ariaRowspan: [{
881
+ type: HostBinding,
882
+ args: ['attr.aria-rowspan']
883
+ }], tabindex: [{
884
+ type: HostBinding,
885
+ args: ['attr.tabindex']
886
+ }], title: [{
887
+ type: HostBinding,
888
+ args: ['attr.title']
889
+ }], alt: [{
890
+ type: HostBinding,
891
+ args: ['attr.alt']
892
+ }], lang: [{
893
+ type: HostBinding,
894
+ args: ['attr.lang']
895
+ }], accesskey: [{
896
+ type: HostBinding,
897
+ args: ['attr.accesskey']
898
+ }], autocomplete: [{
899
+ type: HostBinding,
900
+ args: ['attr.autocomplete']
901
+ }], autofocus: [{
902
+ type: HostBinding,
903
+ args: ['attr.autofocus']
904
+ }], contenteditable: [{
905
+ type: HostBinding,
906
+ args: ['attr.contenteditable']
907
+ }], dir: [{
908
+ type: HostBinding,
909
+ args: ['attr.dir']
910
+ }], draggable: [{
911
+ type: HostBinding,
912
+ args: ['attr.draggable']
913
+ }], enterkeyhint: [{
914
+ type: HostBinding,
915
+ args: ['attr.enterkeyhint']
916
+ }], hidden: [{
917
+ type: HostBinding,
918
+ args: ['attr.hidden']
919
+ }], inputmode: [{
920
+ type: HostBinding,
921
+ args: ['attr.inputmode']
922
+ }], spellcheck: [{
923
+ type: HostBinding,
924
+ args: ['attr.spellcheck']
925
+ }], translate: [{
926
+ type: HostBinding,
927
+ args: ['attr.translate']
928
+ }], ariaMultiline: [{
929
+ type: HostBinding,
930
+ args: ['attr.aria-multiline']
931
+ }], for: [{
932
+ type: HostBinding,
933
+ args: ['attr.for']
934
+ }], form: [{
935
+ type: HostBinding,
936
+ args: ['attr.form']
937
+ }], headers: [{
938
+ type: HostBinding,
939
+ args: ['attr.headers']
940
+ }], placeholder: [{
941
+ type: HostBinding,
942
+ args: ['attr.placeholder']
943
+ }], readonly: [{
944
+ type: HostBinding,
945
+ args: ['attr.readonly']
946
+ }], required: [{
947
+ type: HostBinding,
948
+ args: ['attr.required']
700
949
  }], menubar: [{
701
950
  type: ViewChild,
702
951
  args: ['menubar', { read: ElementRef }]
@@ -710,4 +959,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
710
959
  type: ContentChildren,
711
960
  args: [MenubarItemComponent]
712
961
  }] } });
713
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnViYXIvbWVudWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnViYXIvbWVudWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNVLGlCQUFpQixFQUNoQyxTQUFTLEVBQUUsZUFBZSxFQUMxQixVQUFVLEVBQUUsWUFBWSxFQUN4QixXQUFXLEVBQ1gsS0FBSyxFQUNNLE1BQU0sRUFDakIsU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUlqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN4RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7O0FBTTFFLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxzQkFBc0I7SUErQzFELFlBQW9CLGlCQUFvQztRQUN0RCxLQUFLLEVBQUUsQ0FBQztR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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYWJlbENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Rlc3ktZm9ybXMvY29tcG9uZW50cy9sYWJlbC9sYWJlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGFiZWxEYXRhIH0gZnJvbSAnLi4vLi4vLi4vZGVzeS1mb3Jtcy9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFjY2Vzc2liaWxpdHlDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBEZXN5Q29udGVudENoaWxkIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2RlY29yYXRvcnMvZGVzeS1jb250ZW50LWNoaWxkLmRlY29yYXRvcic7XG5pbXBvcnQgeyBTdHJpbmdVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9zdHJpbmctdXRpbHMnO1xuaW1wb3J0IHsgTWVudWJhckl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL21lbnViYXItaXRlbSc7XG5pbXBvcnQgeyBNZW51YmFySXRlbVN1Ykl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL21lbnViYXItaXRlbS1zdWItaXRlbSc7XG5pbXBvcnQgeyBNZW51YmFySXRlbVN1Ykl0ZW1TdWJJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9tZW51YmFyLWl0ZW0tc3ViLWl0ZW0tc3ViLWl0ZW0nO1xuaW1wb3J0IHsgTWVudWJhckl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbWVudWJhci1pdGVtL21lbnViYXItaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVudWJhckxhYmVsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnViYXItbGFiZWwvbWVudWJhci1sYWJlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVudWJhclN1Yml0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbWVudWJhci1zdWJpdGVtL21lbnViYXItc3ViaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVudWJhclN1YnN1Yml0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbWVudWJhci1zdWJzdWJpdGVtL21lbnViYXItc3Vic3ViaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVudWJhcml0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvbWVudWJhcml0ZW0uZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGVzeS1tZW51YmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnViYXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIE1lbnViYXJDb21wb25lbnQgZXh0ZW5kcyBBY2Nlc3NpYmlsaXR5Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcblxuICBASW5wdXQoKSBpZFByZWZpeDogc3RyaW5nO1xuICBASW5wdXQoKSBpdGVtczogTWVudWJhckl0ZW1bXTtcbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51YmFySXRlbVtdPigpO1xuICBAT3V0cHV0KCkgYWN0aXZlSXRlbUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVudWJhckl0ZW0+KCk7XG4gIEBPdXRwdXQoKSBhY3RpdmVTdWJJdGVtQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51YmFySXRlbVN1Ykl0ZW18TWVudWJhckl0ZW1TdWJJdGVtU3ViSXRlbT4oKTtcblxuICAvKipcbiAgICogbGFiZWwsIGRpZmVyZW50ZXMgZm9ybWFzIGRlIGltcGxlbWVudGFyLCBlbnVtZXJhZGFzIHBvciBwcmlvcmlkYWRcbiAgICogMSkgaW5jbHVpciBjb21wb25lbnRlIG1lbnViYXItbGFiZWwgYW5pZGFkb1xuICAgKiAyKSBpbmNsdWlyIHRlbXBsYXRlXG4gICAqIDMpIGluY2x1aXIgb2JqZXRvIGxhYmVsIChpbnRlcmZheiBleHB1ZXN0YSlcbiAgICogNCkgaW5jbHVpciBsZWdlbmRUZXh0IC0gaW5jbHVpciB1biBsYWJlbCBjb24gc29sbyB1biB0ZXh0b1xuICAgKi9cbiAgQElucHV0KCkgbGFiZWxSZWY6IFRlbXBsYXRlUmVmPExhYmVsQ29tcG9uZW50PjtcbiAgQElucHV0KCkgbGFiZWxEYXRhOiBMYWJlbERhdGE7XG4gIEBJbnB1dCgpIGxhYmVsVGV4dDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIEBIb3N0QmluZGluZygnY2xhc3MnKSBjbGFzc2VzOiBhbnk7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYy1tZW51YmFyJykgY2ZnID0gdHJ1ZVxuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBpZDogYW55O1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZURhdGE6IGFueTtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKSBhcmlhTGFiZWxEYXRhOiBhbnk7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgYXJpYURlc2NyaWJlZGJ5RGF0YTogYW55O1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbGxlZGJ5JykgYXJpYUxhYmVsbGVkYnlEYXRhOiBhbnk7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhpZGRlbicpIGFyaWFIaWRkZW5EYXRhOiBhbnk7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRpc2FibGVkJykgYXJpYURpc2FibGVkRGF0YTogYW55O1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb250cm9scycpIGFyaWFDb250cm9sc0RhdGE6IGFueTtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY3VycmVudCcpIGFyaWFDdXJyZW50RGF0YTogYW55O1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1saXZlJykgYXJpYUxpdmVEYXRhOiBhbnk7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJykgYXJpYUV4cGFuZGVkRGF0YTogYW55O1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2UnKSBhcmlhRXJyb3JtZXNzYWdlRGF0YTogYW55O1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1oYXNwb3B1cCcpIGFyaWFIYXNwb3B1cERhdGE6IGFueTtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbW9kYWwnKSBhcmlhTW9kYWxEYXRhOiBhbnlcblxuICBAVmlld0NoaWxkKCdtZW51YmFyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIG1lbnViYXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGRyZW4oTWVudWJhcml0ZW1EaXJlY3RpdmUpIG1lbnVJdGVtczogUXVlcnlMaXN0PE1lbnViYXJpdGVtRGlyZWN0aXZlPjtcbiAgQERlc3lDb250ZW50Q2hpbGQoKSBAQ29udGVudENoaWxkcmVuKE1lbnViYXJMYWJlbENvbXBvbmVudCkgbGFiZWxDb21wb25lbnQ6IE1lbnViYXJMYWJlbENvbXBvbmVudDtcbiAgQENvbnRlbnRDaGlsZHJlbihNZW51YmFySXRlbUNvbXBvbmVudCkgaXRlbUNvbXBvbmVudExpc3Q6IFF1ZXJ5TGlzdDxNZW51YmFySXRlbUNvbXBvbmVudD47XG5cbiAgbWVudURhdGE6IGFueVtdO1xuICB2aWV3SW5pdCA9IGZhbHNlO1xuICBpc0ZvY3VzZWQ6IGJvb2xlYW47XG4gIGN1cnJlbnRGb2N1c0l0ZW1JbmRleCA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlcz86IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLnJvbGVEYXRhID0gdGhpcy5yb2xlID8gdGhpcy5yb2xlIDogbnVsbDtcbiAgICB0aGlzLmFyaWFMYWJlbERhdGEgPSB0aGlzLmFyaWFMYWJlbCA/IHRoaXMuYXJpYUxhYmVsIDogbnVsbDtcbiAgICB0aGlzLmFyaWFEZXNjcmliZWRieURhdGEgPSB0aGlzLmFyaWFEZXNjcmliZWRCeSA/IHRoaXMuYXJpYURlc2NyaWJlZEJ5IDogbnVsbDtcbiAgICB0aGlzLmFyaWFMYWJlbGxlZGJ5RGF0YSA9IHRoaXMuYXJpYUxhYmVsbGVkQnkgPyB0aGlzLmFyaWFMYWJlbGxlZEJ5IDogbnVsbDtcbiAgICB0aGlzLmFyaWFIaWRkZW5EYXRhID0gdGhpcy5hcmlhSGlkZGVuID8gdGhpcy5hcmlhSGlkZGVuIDogbnVsbDtcbiAgICB0aGlzLmFyaWFEaXNhYmxlZERhdGEgPSB0aGlzLmFyaWFEaXNhYmxlZCA/IHRoaXMuYXJpYURpc2FibGVkIDogbnVsbDtcbiAgICB0aGlzLmFyaWFDb250cm9sc0RhdGEgPSB0aGlzLmFyaWFDb250cm9scyA/IHRoaXMuYXJpYUNvbnRyb2xzIDogbnVsbDtcbiAgICB0aGlzLmFyaWFDdXJyZW50RGF0YSA9IHRoaXMuYXJpYUN1cnJlbnQgPyB0aGlzLmFyaWFDdXJyZW50IDogbnVsbDtcbiAgICB0aGlzLmFyaWFMaXZlRGF0YSA9IHRoaXMuYXJpYUxpdmUgPyB0aGlzLmFyaWFMaXZlIDogbnVsbDtcbiAgICB0aGlzLmFyaWFFeHBhbmRlZERhdGEgPSB0aGlzLmFyaWFFeHBhbmRlZCA/IHRoaXMuYXJpYUV4cGFuZGVkIDogbnVsbDtcbiAgICB0aGlzLmFyaWFFcnJvcm1lc3NhZ2VEYXRhID0gdGhpcy5hcmlhRXJyb3JNZXNzYWdlID8gdGhpcy5hcmlhRXJyb3JNZXNzYWdlIDogbnVsbDtcbiAgICB0aGlzLmFyaWFIYXNwb3B1cERhdGEgPSB0aGlzLmFyaWFIYXNQb3B1cCA/IHRoaXMuYXJpYUhhc1BvcHVwIDogbnVsbDtcbiAgICB0aGlzLmFyaWFNb2RhbERhdGEgPSB0aGlzLmFyaWFNb2RhbCA/IHRoaXMuYXJpYU1vZGFsIDogbnVsbDtcbiAgICBpZiAodGhpcy52aWV3SW5pdCkge1xuICAgICAgdGhpcy5jaGVja0NoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3SW5pdCA9IHRydWU7XG4gICAgdGhpcy5jaGVja0NoYW5nZXMoKTtcbiAgfVxuXG4gIGNoZWNrQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubWVudUl0ZW1zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIHRoaXMubWVudURhdGEgPSBbXTtcbiAgICB0aGlzLmdldEl0ZW1zKCkuZm9yRWFjaCgoXywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1EYXRhID0ge1xuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgY3VycmVudEZvY3VzU3ViSXRlbUluZGV4OiAwLFxuICAgICAgICBjdXJyZW50Rm9jdXNTdWJTdWJJdGVtSW5kZXg6IDAsXG4gICAgICAgIG1lbnVJdGVtOiB0aGlzLm1lbnVJdGVtcy50b0FycmF5KClbaW5kZXhdXG4gICAgICB9O1xuICAgICAgdGhpcy5tZW51RGF0YS5wdXNoKGl0ZW1EYXRhKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnZpZXdJbml0KSB7XG4gICAgICB0aGlzLmNoZWNrUmVxdWlyZWQoKTtcbiAgICB9XG5cblxuICAgIGNvbnN0IGxhc3RDdXJyZW50Rm9jdXNJdGVtSW5kZXggPSB0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBpZiAoaXRlbXMpIHtcbiAgICAgIHdoaWxlICghdGhpcy5pc0l0ZW1Gb2N1c2FibGUodGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXggJSBpdGVtcy5sZW5ndGgpKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ID0gKHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ICsgaXRlbXMubGVuZ3RoICsgMSkgJSBpdGVtcy5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCA9PT0gbGFzdEN1cnJlbnRGb2N1c0l0ZW1JbmRleCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICAvKlxuICAgKiBFdmVudG9zXG4gICAqL1xuXG4gIGhhbmRsZU1lbnVGb2N1c0luKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGhhbmRsZU1lbnVGb2N1c091dChldmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tZW51YmFyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgIHRoaXMuY2xvc2VNZW51KCk7XG4gICAgfVxuICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBoYW5kbGVNZW51SXRlbUNsaWNrKGV2ZW50LCBpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgaXNPcGVuID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm9wZW47XG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgICAgaWYgKCFpc09wZW4pIHtcbiAgICAgICAgdGhpcy5vcGVuTWVudShpdGVtSW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGl2YXRlTWVudUl0ZW0oaXRlbUluZGV4KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVNZW51SXRlbUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgIGNhc2UgJyAnOlxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLm9wZW5NZW51KGl0ZW1JbmRleCk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzRmlyc3RTdWJJdGVtKGl0ZW1JbmRleCkpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlSXRlbShpdGVtSW5kZXgsIC0xKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVJdGVtKGl0ZW1JbmRleCwgKzEpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMub3Blbk1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZm9jdXNMYXN0U3ViSXRlbShpdGVtSW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNGaXJzdEl0ZW0oKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMuY2xvc2VNZW51KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c0xhc3RJdGVtKCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHRoaXMuaXNQcmludGFibGVDaGFyKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzSXRlbUJ5Rmlyc3RDaGFyKGV2ZW50LmtleSk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBoYW5kbGVNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1JbmRleCwgdHJ1ZSk7XG4gIH1cblxuICBoYW5kbGVQb3B1cE1lbnVJdGVtQ2xpY2soaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlUG9wdXBNZW51SXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KTtcbiAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgpO1xuICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gIH1cblxuICBoYW5kbGVQb3B1cE1lbnVJdGVtS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50U3ViSW5kZXggPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViSXRlbUluZGV4O1xuICAgIGNvbnN0IGN1cnJlbnRTdWJTdWJJbmRleCA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJTdWJJdGVtSW5kZXg7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJyAnOlxuICAgICAgICB0aGlzLmFjdGl2YXRlUG9wdXBNZW51SXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KTtcbiAgICAgICAgaWYgKHRoaXMubXVzdENsb3NlQWZ0ZXJTZWxlY3RQb3B1cEl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1JbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIHRoaXMuYWN0aXZhdGVQb3B1cE1lbnVJdGVtKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1JbmRleCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShpdGVtSW5kZXgsIGN1cnJlbnRTdWJJbmRleCwgY3VycmVudFN1YlN1YkluZGV4LCAtMSk7XG4gICAgICAgIC8vIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgKGN1cnJlbnRTdWJJbmRleCArIGxpc3RMZW5ndGggLSAxKSAlIGxpc3RMZW5ndGgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShpdGVtSW5kZXgsIGN1cnJlbnRTdWJJbmRleCwgY3VycmVudFN1YlN1YkluZGV4LCArMSk7XG4gICAgICAgIC8vIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgKGN1cnJlbnRTdWJJbmRleCArIGxpc3RMZW5ndGggKyAxKSAlIGxpc3RMZW5ndGgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKChpdGVtSW5kZXggKyBpdGVtcy5sZW5ndGggLSAxKSAlIGl0ZW1zLmxlbmd0aCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKChpdGVtSW5kZXggKyBpdGVtcy5sZW5ndGggKyAxKSAlIGl0ZW1zLmxlbmd0aCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICBjYXNlICdQYWdlVXAnOlxuICAgICAgICB0aGlzLmZvY3VzRmlyc3RTdWJJdGVtKGl0ZW1JbmRleCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgdGhpcy5mb2N1c0xhc3RTdWJJdGVtKGl0ZW1JbmRleCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh0aGlzLmlzUHJpbnRhYmxlQ2hhcihldmVudC5rZXkpKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c1N1Ykl0ZW1CeUZpcnN0Q2hhcihpdGVtSW5kZXgsIGV2ZW50LmtleSk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBoYW5kbGVQb3B1cE1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gIH1cblxuICAvKlxuICAgKiBDb211bmVzXG4gICAqL1xuXG4gIGNoZWNrUmVxdWlyZWQoKTogdm9pZCB7XG5cblxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuXG4gICAgLy8gTm8gc2UgaGEgcHVlc3RvIGxhYmVsIHJlcXVpcmVkIHBvcnF1ZSBlbiBhbGd1bm9zIGVqZW1wbG9zIGRlIGRlc3ktaHRtbCBubyBhcGFyZWNlXG4gIH1cblxuXG4gIGFjdGl2YXRlTWVudUl0ZW0oaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICB0aGlzLmFjdGl2ZUl0ZW1DaGFuZ2UuZW1pdChpdGVtc1tpdGVtSW5kZXhdIGFzIE1lbnViYXJJdGVtKTtcbiAgICBpZiAoaXRlbXNbaXRlbUluZGV4XSBpbnN0YW5jZW9mIE1lbnViYXJJdGVtQ29tcG9uZW50KSB7XG4gICAgICAoaXRlbXNbaXRlbUluZGV4XSBhcyBNZW51YmFySXRlbUNvbXBvbmVudCkuc2VsZWN0ZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIGFjdGl2YXRlUG9wdXBNZW51SXRlbShpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgbGV0IGl0ZW06IE1lbnViYXJJdGVtU3ViSXRlbXxNZW51YmFySXRlbVN1Ykl0ZW1TdWJJdGVtID0gc3ViSXRlbXNbc3ViSXRlbUluZGV4XTtcbiAgICBsZXQgc3ViU3ViSXRlbXMgPSBbXTtcbiAgICBpZiAoc3ViU3ViSXRlbUluZGV4ICE9PSBudWxsICYmIHN1YlN1Ykl0ZW1JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzdWJTdWJJdGVtcyA9IHRoaXMuZ2V0U3ViSXRlbVN1Yml0ZW1zKGl0ZW0pO1xuICAgICAgaXRlbSA9IHN1YlN1Ykl0ZW1zW3N1YlN1Ykl0ZW1JbmRleF07XG4gICAgfVxuXG4gICAgbGV0IGNoZWNrZWRDaGFuZ2UgPSBmYWxzZTtcbiAgICBpZiAoaXRlbS5yb2xlID09PSAnbWVudWl0ZW1jaGVja2JveCcpIHtcbiAgICAgIGl0ZW0uY2hlY2tlZCA9ICFpdGVtLmNoZWNrZWQ7XG4gICAgICBjaGVja2VkQ2hhbmdlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGl0ZW0ucm9sZSA9PT0gJ21lbnVpdGVtcmFkaW8nKSB7XG4gICAgICBjaGVja2VkQ2hhbmdlID0gIWl0ZW0uY2hlY2tlZDtcbiAgICAgIHN1YlN1Ykl0ZW1zLmZvckVhY2goaSA9PiBpLmNoZWNrZWQgPSBmYWxzZSk7XG4gICAgICBpdGVtLmNoZWNrZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuaXRlbXNDaGFuZ2UuZW1pdChpdGVtcyk7XG4gICAgdGhpcy5hY3RpdmVTdWJJdGVtQ2hhbmdlLmVtaXQoaXRlbSBhcyBNZW51YmFySXRlbSk7XG4gICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBNZW51YmFyU3ViaXRlbUNvbXBvbmVudCB8fCBpdGVtIGluc3RhbmNlb2YgTWVudWJhclN1YnN1Yml0ZW1Db21wb25lbnQpIHtcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuZW1pdCgpO1xuXG4gICAgICBpZiAoY2hlY2tlZENoYW5nZSkge1xuICAgICAgICBpdGVtLmNoZWNrZWRDaGFuZ2UuZW1pdChpdGVtLmNoZWNrZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG11c3RDbG9zZUFmdGVyU2VsZWN0UG9wdXBJdGVtKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBsZXQgaXRlbTogTWVudWJhckl0ZW1TdWJJdGVtfE1lbnViYXJJdGVtU3ViSXRlbVN1Ykl0ZW0gPSBzdWJJdGVtc1tzdWJJdGVtSW5kZXhdO1xuICAgIGlmIChzdWJTdWJJdGVtSW5kZXggIT09IG51bGwgJiYgc3ViU3ViSXRlbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHN1YlN1Ykl0ZW1zID0gdGhpcy5nZXRTdWJJdGVtU3ViaXRlbXMoaXRlbSk7XG4gICAgICBpdGVtID0gc3ViU3ViSXRlbXNbc3ViU3ViSXRlbUluZGV4XTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbS5yb2xlICE9PSAnbWVudWl0ZW1jaGVja2JveCcgJiYgaXRlbS5yb2xlICE9PSAnbWVudWl0ZW1yYWRpbyc7XG4gIH1cblxuICBvcGVuTWVudShpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHdhc09wZW5lZCA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5vcGVuO1xuICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5vcGVuID0gdHJ1ZTtcbiAgICBpZiAod2FzT3BlbmVkKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlTWVudUl0ZW0oaXRlbUluZGV4KTtcbiAgICB9XG4gIH1cblxuICBjbG9zZU1lbnUoaXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGl0ZW1JbmRleCAhPT0gbnVsbCAmJiBpdGVtSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm9wZW4gPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZW51RGF0YS5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5vcGVuID0gZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGhhc1BvcHVwTWVudShpdGVtSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgcmV0dXJuIGl0ZW1zW2l0ZW1JbmRleF0uc3ViICYmIHN1Ykl0ZW1zICYmIHN1Ykl0ZW1zLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwcml2YXRlIGlzUHJpbnRhYmxlQ2hhcihzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdHIubGVuZ3RoID09PSAxICYmICEhc3RyLm1hdGNoKC9cXFMvKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWVudURhdGFJbmRleChpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IG1lbnVEYXRhSW5kZXggPSAwO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJJdGVtSW5kZXg7IGkrKykge1xuICAgICAgY29uc3Qgc3ViSXRlbSA9IHN1Ykl0ZW1zW2ldO1xuICAgICAgY29uc3Qgc3ViU3ViSXRlbXMgPSB0aGlzLmdldFN1Ykl0ZW1TdWJpdGVtcyhzdWJJdGVtKTtcbiAgICAgIG1lbnVEYXRhSW5kZXggKz0gc3ViU3ViSXRlbXMgJiYgc3ViU3ViSXRlbXMubGVuZ3RoID4gMCA/IHN1YlN1Ykl0ZW1zLmxlbmd0aCA6IDE7XG4gICAgfVxuXG4gICAgaWYgKHN1YlN1Ykl0ZW1JbmRleCAhPT0gbnVsbCAmJiBzdWJTdWJJdGVtSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbWVudURhdGFJbmRleCArPSBzdWJTdWJJdGVtSW5kZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbnVEYXRhSW5kZXg7XG4gIH1cblxuICAvKlxuICAgKiBDb211bmVzIC0gZm9jdXNcbiAgICovXG5cbiAgZm9jdXNJdGVtKGl0ZW1JbmRleDogbnVtYmVyLCBob3Zlcj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBoYXNGb2N1cyA9IHRoaXMubWVudWJhci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMubWVudURhdGFbdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXhdLm9wZW47XG5cbiAgICBpZiAoIWhvdmVyIHx8IGhhc0ZvY3VzKSB7XG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ubWVudUl0ZW0ubGluay5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICBpZiAoaXNPcGVuICYmIHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgIHRoaXMub3Blbk1lbnUoaXRlbUluZGV4KTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCA9IGl0ZW1JbmRleDtcbiAgfVxuXG4gIGZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oZnJvbUl0ZW1JbmRleDogbnVtYmVyLCBzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgbmV4dEl0ZW0gPSBmcm9tSXRlbUluZGV4O1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGRvIHtcbiAgICAgIG5leHRJdGVtID0gKG5leHRJdGVtICsgaXRlbXMubGVuZ3RoICsgc3RlcCkgJSBpdGVtcy5sZW5ndGg7XG4gICAgfSB3aGlsZSAoIXRoaXMuaXNJdGVtRm9jdXNhYmxlKG5leHRJdGVtKSAmJiBuZXh0SXRlbSAhPT0gZnJvbUl0ZW1JbmRleCk7XG5cbiAgICBpZiAobmV4dEl0ZW0gIT09IGZyb21JdGVtSW5kZXgpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKG5leHRJdGVtKTtcbiAgICB9XG4gIH1cblxuICBmb2N1c0ZpcnN0SXRlbSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0l0ZW1Gb2N1c2FibGUoMCkpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oMCwgKzEpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzTGFzdEl0ZW0oKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgaWYgKHRoaXMuaXNJdGVtRm9jdXNhYmxlKGl0ZW1zLmxlbmd0aCAtIDEpKSB7XG4gICAgICB0aGlzLmZvY3VzSXRlbShpdGVtcy5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVJdGVtKGl0ZW1zLmxlbmd0aCAtIDEsIC0xKTtcbiAgICB9XG4gIH1cblxuICBpc0l0ZW1Gb2N1c2FibGUoaXRlbUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZ2V0SXRlbXMoKVtpdGVtSW5kZXhdLmRpc2FibGVkO1xuICB9XG5cbiAgZm9jdXNJdGVtQnlGaXJzdENoYXIoY2hhcjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbUNvbnRlbnRzOiBzdHJpbmdbXSA9IHRoaXMubWVudUl0ZW1zLm1hcChtZW51SXRlbSA9PiBtZW51SXRlbS5pdGVtQ29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCk7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXg7XG4gICAgbGV0IGZvdW5kSW5kZXggPSAtMTtcbiAgICBkbyB7XG4gICAgICBpbmRleCA9IChpbmRleCArIGl0ZW1Db250ZW50cy5sZW5ndGggKyAxKSAlIGl0ZW1Db250ZW50cy5sZW5ndGg7XG4gICAgICBpZiAoaXRlbUNvbnRlbnRzW2luZGV4XSAmJiBpdGVtQ29udGVudHNbaW5kZXhdLnRyaW0oKS5zdWJzdHIoMCwgMSkudG9Mb3dlckNhc2UoKSA9PT0gY2hhci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgJiYgdGhpcy5pc0l0ZW1Gb2N1c2FibGUoaW5kZXgpKSB7XG4gICAgICAgIGZvdW5kSW5kZXggPSBpbmRleDtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChmb3VuZEluZGV4ID09PSAtMSAmJiBpbmRleCAhPT0gdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXgpO1xuXG4gICAgaWYgKGZvdW5kSW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0oZm91bmRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNTdWJJdGVtKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5tZW51SXRlbS5wb3B1cE1lbnVJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtZW51RGF0YUluZGV4ID0gdGhpcy5nZXRNZW51RGF0YUluZGV4KGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpO1xuXG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViSXRlbUluZGV4ID0gc3ViSXRlbUluZGV4O1xuICAgICAgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleCA9IHN1YlN1Ykl0ZW1JbmRleDtcbiAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ubWVudUl0ZW0ucG9wdXBNZW51SXRlbXMudG9BcnJheSgpW21lbnVEYXRhSW5kZXhdLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoZWxlbSkge1xuICAgICAgICBlbGVtLmZvY3VzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzdWJpdGVtIHRvIGZvY3VzJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHN1Yml0ZW1zJyk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShpdGVtSW5kZXg6IG51bWJlciwgZnJvbUl0ZW1TdWJJbmRleDogbnVtYmVyLCBmcm9tSXRlbVN1YlN1YkluZGV4OiBudW1iZXIsIHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBuZXh0U3ViSW5kZXggPSBmcm9tSXRlbVN1YkluZGV4O1xuICAgIGxldCBuZXh0U3ViU3ViSW5kZXggPSBmcm9tSXRlbVN1YlN1YkluZGV4O1xuICAgIGxldCBhbGxTdWJJdGVtc0NoZWNrZWQ7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgZG8ge1xuICAgICAgY29uc3QgbmV4dEluZGV4ZXMgPSB0aGlzLmdldE5leHRTdWJJdGVtSW5kZXhlcyhpdGVtcywgaXRlbUluZGV4LCBuZXh0U3ViSW5kZXgsIG5leHRTdWJTdWJJbmRleCwgc3RlcCk7XG4gICAgICBuZXh0U3ViSW5kZXggPSBuZXh0SW5kZXhlcy5zdWJJbmRleDtcbiAgICAgIG5leHRTdWJTdWJJbmRleCA9IG5leHRJbmRleGVzLnN1YlN1YkluZGV4O1xuICAgICAgYWxsU3ViSXRlbXNDaGVja2VkID0gKGZyb21JdGVtU3ViSW5kZXggPT09IG5leHRTdWJJbmRleCAmJiBmcm9tSXRlbVN1YlN1YkluZGV4ID09PSBuZXh0U3ViU3ViSW5kZXgpO1xuICAgIH0gd2hpbGUgKCF0aGlzLmlzU3ViSXRlbUZvY3VzYWJsZShpdGVtSW5kZXgsIG5leHRTdWJJbmRleCwgbmV4dFN1YlN1YkluZGV4KSAmJiAhYWxsU3ViSXRlbXNDaGVja2VkKTtcblxuICAgIGlmICghYWxsU3ViSXRlbXNDaGVja2VkKSB7XG4gICAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIG5leHRTdWJJbmRleCwgbmV4dFN1YlN1YkluZGV4KTtcbiAgICB9XG4gIH1cblxuICBmb2N1c0ZpcnN0U3ViSXRlbShpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBmaXJzdFN1YlN1Ykl0ZW0gPSBudWxsO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgY29uc3Qgc3ViU3ViSXRlbXMgPSB0aGlzLmdldFN1Ykl0ZW1TdWJpdGVtcyhzdWJJdGVtc1swXSk7XG4gICAgaWYgKHN1YlN1Ykl0ZW1zICYmIHN1YlN1Ykl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZpcnN0U3ViU3ViSXRlbSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleCwgMCwgZmlyc3RTdWJTdWJJdGVtKSkge1xuICAgICAgdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCAwLCBmaXJzdFN1YlN1Ykl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZVN1Ykl0ZW0oaXRlbUluZGV4LCAwLCBmaXJzdFN1YlN1Ykl0ZW0sICsxKTtcbiAgICB9XG4gIH1cblxuICBmb2N1c0xhc3RTdWJJdGVtKGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBjb25zdCBsYXN0SXRlbUluZGV4ID0gc3ViSXRlbXMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBsYXN0SXRlbSA9IHN1Ykl0ZW1zW2xhc3RJdGVtSW5kZXhdO1xuICAgIGNvbnN0IHN1YlN1Ykl0ZW1zID0gdGhpcy5nZXRTdWJJdGVtU3ViaXRlbXMobGFzdEl0ZW0pO1xuICAgIGxldCBsYXN0U3ViU3ViSXRlbSA9IG51bGw7XG4gICAgaWYgKHN1YlN1Ykl0ZW1zICYmIHN1YlN1Ykl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGxhc3RTdWJTdWJJdGVtID0gc3ViU3ViSXRlbXMubGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4LCBsYXN0SXRlbUluZGV4LCBsYXN0U3ViU3ViSXRlbSkpIHtcbiAgICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgbGFzdEl0ZW1JbmRleCwgbGFzdFN1YlN1Ykl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZVN1Ykl0ZW0oaXRlbUluZGV4LCBsYXN0SXRlbUluZGV4LCBsYXN0U3ViU3ViSXRlbSwgLTEpO1xuICAgIH1cbiAgfVxuXG4gIGlzU3ViSXRlbUZvY3VzYWJsZShpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgbGV0IGl0ZW06IE1lbnViYXJJdGVtU3ViSXRlbXxNZW51YmFySXRlbVN1Ykl0ZW1TdWJJdGVtID0gc3ViSXRlbXNbc3ViSXRlbUluZGV4XTtcbiAgICBpZiAoc3ViU3ViSXRlbUluZGV4ICE9PSBudWxsICYmIHN1YlN1Ykl0ZW1JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzdWJTdWJJdGVtcyA9IHRoaXMuZ2V0U3ViSXRlbVN1Yml0ZW1zKGl0ZW0pO1xuICAgICAgaXRlbSA9IHN1YlN1Ykl0ZW1zW3N1YlN1Ykl0ZW1JbmRleF07XG4gICAgfVxuXG4gICAgbGV0IGlzRm9jdXNhYmxlID0gZmFsc2U7XG4gICAgaWYgKGl0ZW0ucm9sZSAhPT0gJ3NlcGFyYXRvcicgJiYgaXRlbS5yb2xlICE9PSAnbm9uZScpIHtcbiAgICAgIGlzRm9jdXNhYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNGb2N1c2FibGU7XG4gIH1cblxuICBmb2N1c1N1Ykl0ZW1CeUZpcnN0Q2hhcihpdGVtSW5kZXg6IG51bWJlciwgY2hhcjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbUNvbnRlbnRzOiBzdHJpbmdbXSA9IHRoaXMubWVudUl0ZW1zLnRvQXJyYXkoKVtpdGVtSW5kZXhdLnBvcHVwTWVudUl0ZW1zLm1hcChtZW51SXRlbSA9PiBtZW51SXRlbS5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50KTtcbiAgICBsZXQgc3ViSXRlbUluZGV4ID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1Ykl0ZW1JbmRleDtcbiAgICBsZXQgc3ViU3ViSXRlbUluZGV4ID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleDtcbiAgICBsZXQgZm91bmRTdWJJbmRleCA9IC0xO1xuICAgIGxldCBmb3VuZFN1YlN1YkluZGV4ID0gbnVsbDtcbiAgICBsZXQgYWxsU3ViSXRlbXNDaGVja2VkID0gZmFsc2U7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgZG8ge1xuICAgICAgY29uc3QgbmV4dEluZGV4ZXMgPSB0aGlzLmdldE5leHRTdWJJdGVtSW5kZXhlcyhpdGVtcywgaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCwgKzEpO1xuICAgICAgc3ViSXRlbUluZGV4ID0gbmV4dEluZGV4ZXMuc3ViSW5kZXg7XG4gICAgICBzdWJTdWJJdGVtSW5kZXggPSBuZXh0SW5kZXhlcy5zdWJTdWJJbmRleDtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRNZW51RGF0YUluZGV4KGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpO1xuICAgICAgaWYgKGl0ZW1Db250ZW50c1tpbmRleF0gJiYgaXRlbUNvbnRlbnRzW2luZGV4XS50cmltKCkuc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkgPT09IGNoYXIudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICYmIHRoaXMuaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpKSB7XG4gICAgICAgIGZvdW5kU3ViSW5kZXggPSBzdWJJdGVtSW5kZXg7XG4gICAgICAgIGZvdW5kU3ViU3ViSW5kZXggPSBzdWJTdWJJdGVtSW5kZXg7XG4gICAgICB9XG4gICAgICBhbGxTdWJJdGVtc0NoZWNrZWQgPSAodGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1Ykl0ZW1JbmRleCA9PT0gc3ViSXRlbUluZGV4XG4gICAgICAgICYmIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJTdWJJdGVtSW5kZXggPT09IHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgfSB3aGlsZSAoZm91bmRTdWJJbmRleCA9PT0gLTEgJiYgIWFsbFN1Ykl0ZW1zQ2hlY2tlZCk7XG5cbiAgICBpZiAoZm91bmRTdWJJbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIGZvdW5kU3ViSW5kZXgsIGZvdW5kU3ViU3ViSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gICAqIE1ldG9kb3MgcGFyYSBmYWNpbGl0YXIgY29udGVuaWRvXG4gICAqL1xuXG4gIGdldEl0ZW1zKCk6IE1lbnViYXJJdGVtW118TWVudWJhckl0ZW1Db21wb25lbnRbXSB7XG4gICAgbGV0IGl0ZW1zO1xuICAgIGlmICh0aGlzLml0ZW1Db21wb25lbnRMaXN0ICYmIHRoaXMuaXRlbUNvbXBvbmVudExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgaXRlbXMgPSB0aGlzLml0ZW1Db21wb25lbnRMaXN0LnRvQXJyYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBnZXRJdGVtU3ViaXRlbXMoaXRlbTogTWVudWJhckl0ZW18TWVudWJhckl0ZW1Db21wb25lbnQpOiBNZW51YmFySXRlbVN1Ykl0ZW1bXXxNZW51YmFyU3ViaXRlbUNvbXBvbmVudFtdIHtcbiAgICBsZXQgc3ViSXRlbXMgPSBbXTtcbiAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIE1lbnViYXJJdGVtQ29tcG9uZW50KXtcbiAgICAgIHN1Ykl0ZW1zID0gaXRlbS5nZXRTdWJJdGVtcygpO1xuICAgIH1cblxuICAgIGlmICghc3ViSXRlbXMgfHwgc3ViSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBzdWJJdGVtcyA9IGl0ZW0uc3ViID8gaXRlbS5zdWIuaXRlbXMgOiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3ViSXRlbXM7XG4gIH1cblxuICBnZXRTdWJJdGVtU3ViaXRlbXMoaXRlbTogTWVudWJhckl0ZW1TdWJJdGVtfE1lbnViYXJTdWJpdGVtQ29tcG9uZW50KTogTWVudWJhckl0ZW1TdWJJdGVtU3ViSXRlbVtdfE1lbnViYXJTdWJzdWJpdGVtQ29tcG9uZW50W10ge1xuICAgIGxldCBzdWJJdGVtcyA9IFtdO1xuXG4gICAgaWYgKGl0ZW0ucm9sZSA9PT0gJ2dyb3VwJykge1xuICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBNZW51YmFyU3ViaXRlbUNvbXBvbmVudCkge1xuICAgICAgICBzdWJJdGVtcyA9IGl0ZW0uZ2V0U3ViSXRlbXMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzdWJJdGVtcyB8fCBzdWJJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgc3ViSXRlbXMgPSBpdGVtLml0ZW1zID8gaXRlbS5pdGVtcyA6IFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJJdGVtcztcbiAgfVxuXG4gIGdldE5leHRTdWJJdGVtSW5kZXhlcyhpdGVtcywgaXRlbUluZGV4LCBuZXh0U3ViSW5kZXgsIG5leHRTdWJTdWJJbmRleCwgc3RlcCk6IHsgc3ViSW5kZXg6IG51bWJlciwgc3ViU3ViSW5kZXg/OiBudW1iZXJ9IHtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGNvbnN0IHN1YlN1Ykl0ZW1zID0gdGhpcy5nZXRTdWJJdGVtU3ViaXRlbXMoc3ViSXRlbXNbbmV4dFN1YkluZGV4XSk7XG5cbiAgICBsZXQgY2hlY2tOZXh0U3ViSXRlbSA9IHRydWU7XG4gICAgaWYgKHN1YlN1Ykl0ZW1zICYmIHN1YlN1Ykl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChuZXh0U3ViU3ViSW5kZXggKyBzdGVwID49IDAgJiYgbmV4dFN1YlN1YkluZGV4ICsgc3RlcCA8IHN1YlN1Ykl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBuZXh0U3ViU3ViSW5kZXggKz0gc3RlcDtcbiAgICAgICAgY2hlY2tOZXh0U3ViSXRlbSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGVja05leHRTdWJJdGVtKSB7XG4gICAgICBuZXh0U3ViSW5kZXggPSAobmV4dFN1YkluZGV4ICsgc3RlcCArIHN1Ykl0ZW1zLmxlbmd0aCkgJSBzdWJJdGVtcy5sZW5ndGg7XG4gICAgICBjb25zdCBuZXh0U3ViSXRlbUl0ZW1zID0gdGhpcy5nZXRTdWJJdGVtU3ViaXRlbXMoc3ViSXRlbXNbbmV4dFN1YkluZGV4XSk7XG4gICAgICBpZiAobmV4dFN1Ykl0ZW1JdGVtcyAmJiBuZXh0U3ViSXRlbUl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbmV4dFN1YlN1YkluZGV4ID0gKChzdGVwID4gMCA/IC0xIDogMCkgKyBzdGVwICsgbmV4dFN1Ykl0ZW1JdGVtcy5sZW5ndGgpICUgbmV4dFN1Ykl0ZW1JdGVtcy5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0U3ViU3ViSW5kZXggPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7c3ViSW5kZXg6IG5leHRTdWJJbmRleCwgc3ViU3ViSW5kZXg6IG5leHRTdWJTdWJJbmRleH07XG4gIH1cblxuICBnZXRJZFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCA6IHRoaXMuaWQgKyAnbWVudWJhci1pdGVtJztcbiAgfVxuXG4gIGdldExhYmVsUmVmKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmxhYmVsQ29tcG9uZW50ID8gdGhpcy5sYWJlbENvbXBvbmVudC5nZXRDb250ZW50KCkgOiB0aGlzLmxhYmVsUmVmO1xuICB9XG5cbiAgZ2V0TGFiZWxDb250ZW50KCk6IHN0cmluZyB7XG4gICAgbGV0IGNvbnRlbnQ6IHN0cmluZztcbiAgICBpZiAodGhpcy5sYWJlbERhdGEpIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLmxhYmVsRGF0YS5odG1sID8gdGhpcy5sYWJlbERhdGEuaHRtbCA6IGA8cD4keyBTdHJpbmdVdGlscy5lc2NhcGVIdG1sKHRoaXMubGFiZWxEYXRhLnRleHQpIH08L3A+YDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGFiZWxUZXh0KSB7XG4gICAgICBjb250ZW50ID0gYDxwPiR7IFN0cmluZ1V0aWxzLmVzY2FwZUh0bWwodGhpcy5sYWJlbFRleHQpIH08L3A+YDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBnZXRJdGVtSWQoaXRlbSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IGlkOiBzdHJpbmc7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICAgIGlkID0gaXRlbS5pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlkID0gYCR7dGhpcy5nZXRJZFByZWZpeCgpfS0keysraW5kZXh9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgZ2V0UG9wdXBTdHlsZShpdGVtSW5kZXg6IG51bWJlcik6IG9iamVjdCB7XG4gICAgbGV0IHN0eWxlID0ge307XG4gICAgaWYgKHRoaXMubWVudURhdGEgJiYgaXRlbUluZGV4IDwgdGhpcy5tZW51RGF0YS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG1lbnVJdGVtID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm1lbnVJdGVtO1xuICAgICAgY29uc3QgcmVjdCA9IG1lbnVJdGVtLmxpbmsubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGlmICh0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ub3Blbikge1xuICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICB0b3A6IChyZWN0LmhlaWdodCAtIDEpICsgJ3B4JyxcbiAgICAgICAgICBsZWZ0OiAnMHB4JyxcbiAgICAgICAgICB6SW5kZXg6IDEwMCxcbiAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICB6SW5kZXg6IDAsXG4gICAgICAgICAgZGlzcGxheTogJ25vbmUnXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG5cbiAgZ2V0U3ViSXRlbUlkKGl0ZW0sIGluZGV4OiBudW1iZXIsIHBhcmVudElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBpZDogc3RyaW5nO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBpZiAoaXRlbS5pZCkge1xuICAgICAgICBpZCA9IGl0ZW0uaWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZCA9IGBzdWItJHtwYXJlbnRJZH0tJHsrK2luZGV4fWA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIGdldFN1YlN1Ykl0ZW1BcmlhQ2hlY2tlZChzdWJzdWJpdGVtKTogc3RyaW5nIHtcbiAgICBsZXQgYXJpYUNoZWNrZWQgPSBudWxsO1xuICAgIGlmIChzdWJzdWJpdGVtLnJvbGUgPT09ICdtZW51aXRlbWNoZWNrYm94JyB8fCBzdWJzdWJpdGVtLnJvbGUgPT09ICdtZW51aXRlbXJhZGlvJykge1xuICAgICAgYXJpYUNoZWNrZWQgPSAhIXN1YnN1Yml0ZW0uY2hlY2tlZDtcbiAgICB9XG4gICAgcmV0dXJuIGFyaWFDaGVja2VkO1xuICB9XG59XG4iLCIgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRMYWJlbFJlZigpXCI+XG4gICAgPGRpdiBbaWRdPVwiaWQgKyAnLWxhYmVsJ1wiIFtjbGFzc109XCJbJ21iLXNtJywgbGFiZWxDb21wb25lbnQgPyBsYWJlbENvbXBvbmVudC5jbGFzc2VzIDogKGxhYmVsRGF0YSA/IGxhYmVsRGF0YS5jbGFzc2VzIDogbnVsbCldIHwgbWFrZUh0bWxMaXN0XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0TGFiZWxSZWYoKVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFnZXRMYWJlbFJlZigpICYmIChsYWJlbERhdGEgfHwgbGFiZWxUZXh0KVwiPlxuICAgIDxkaXYgW2lkXT1cImlkICsgJy1sYWJlbCdcIiBbY2xhc3NdPVwiWydtYi1zbScsIGxhYmVsRGF0YSA/IGxhYmVsRGF0YS5jbGFzc2VzIDogbnVsbF0gfCBtYWtlSHRtbExpc3RcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGh0bWw6IGdldExhYmVsQ29udGVudCgpIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDx1bCAjbWVudWJhciBbaWRdPVwiaWQgKyAnLW1lbnViYXInXCIgY2xhc3M9XCJsZzpmbGV4IGxnOmZsZXgtd3JhcFwiIHJvbGU9XCJtZW51YmFyXCJcbiAgICAgIChmb2N1c2luKT1cImhhbmRsZU1lbnVGb2N1c0luKClcIlxuICAgICAgKGZvY3Vzb3V0KT1cImhhbmRsZU1lbnVGb2N1c091dCgkZXZlbnQpXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2ZvY3VzJzogaXNGb2N1c2VkIH1cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgPyBhcmlhTGFiZWwgOiBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZ2V0TGFiZWxSZWYoKSB8fCBsYWJlbERhdGEgfHwgbGFiZWxUZXh0ID8gaWQgKyAnLWxhYmVsJyA6IG51bGxcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEl0ZW1zKCk7IGluZGV4IGFzIGl0ZW1JbmRleFwiPlxuICAgICAgPGxpIGNsYXNzPVwicmVsYXRpdmVcIiByb2xlPVwibm9uZVwiIGRlc3lNZW51YmFyaXRlbSAoY29udGVudENoYW5nZWQpPVwiY2hlY2tDaGFuZ2VzKClcIj5cbiAgICAgICAgPGEgKm5nSWY9XCJpdGVtLnN1YlwiICNsaW5rXG4gICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU1lbnVJdGVtQ2xpY2soJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChkZXN5QXR0cmlidXRlQ2hhbmdlKT1cImNoZWNrQ2hhbmdlcygpXCIgW2F0dHJpYnV0ZXNUb0NoZWNrXT1cIidkaXNhYmxlZCdcIlxuICAgICAgICAgICBbaWRdPVwiZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleClcIlxuICAgICAgICAgICBbY2xhc3NdPVwiWydjLW1lbnViYXJfX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J2MtbWVudWJhcl9fYnV0dG9uLS1kaXNhYmxlZCc6IGl0ZW0uZGlzYWJsZWQsICdjLW1lbnViYXJfX2J1dHRvbi0taGFzLXNlbGVjdGlvbic6IGl0ZW0uYWN0aXZlfVwiICAgICAgICAgICBcbiAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IChpdGVtLmFyaWFEaXNhYmxlZCA/IGl0ZW0uYXJpYURpc2FibGVkIDogbnVsbClcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIml0ZW0uYXJpYURlc2NyaWJlZEJ5ID8gaXRlbS5hcmlhRGVzY3JpYmVkQnkgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIml0ZW0uYXJpYUxhYmVsbGVkQnkgPyBpdGVtLmFyaWFMYWJlbGxlZEJ5IDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIml0ZW0uYXJpYUhpZGRlbiA/IGl0ZW0uYXJpYUhpZGRlbiA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIml0ZW0uYXJpYUNvbnRyb2xzID8gaXRlbS5hcmlhQ29udHJvbHMgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIml0ZW0uYXJpYUN1cnJlbnQgPyBpdGVtLmFyaWFDdXJyZW50IDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGl2ZV09XCJpdGVtLmFyaWFMaXZlID8gaXRlbS5hcmlhTGl2ZSA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJpdGVtLmFyaWFFcnJvck1lc3NhZ2UgPyBpdGVtLmFyaWFFcnJvck1lc3NhZ2UgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1tb2RhbF09XCJpdGVtLmFyaWFNb2RhbCA/IGl0ZW0uYXJpYU1vZGFsIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIml0ZW0uZGlzYWJsZWQgPyAtMSA6IChpdGVtSW5kZXggPT09IGN1cnJlbnRGb2N1c0l0ZW1JbmRleCA/IDAgOiAtMSlcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlubGluZS1mbGV4IHNlbGYtY2VudGVyIG1heC13LXhzIGFsaWduLW1pZGRsZSB0cnVuY2F0ZVwiICNpdGVtQ29udGVudFdyYXBwZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW0sIGh0bWw6IGl0ZW0uaHRtbCwgdGV4dDogaXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3ZnIGNsYXNzPVwiaW5saW5lLWJsb2NrIC1tci0yICBhbGlnbi1taWRkbGUgLW15LXB4XCIgdmlld0JveD1cIjAgMCA5NiA5NlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBmb2N1c2FibGU9XCJmYWxzZVwiIHdpZHRoPVwiMS41ZW1cIiBoZWlnaHQ9XCIxLjVlbVwiPjxnPjxwYXRoIGQ9XCJNNDYuNzEgNTguMDM3YTEuODIzIDEuODIzIDAgMDAyLjU4MSAwTDYyLjA0OCA0NS4yOGExLjgyMyAxLjgyMyAwIDAwLTEuMjktMy4xMTNIMzUuMjQzYTEuODIzIDEuODIzIDAgMDAtMS4yOTEgMy4xMTN6XCIvPjwvZz48L3N2Zz5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YSAqbmdJZj1cIml0ZW0ucm91dGVyTGluayAmJiAhaXRlbS5zdWJcIiAjbGluayAjaXRlbUNvbnRlbnRXcmFwcGVyXG4gICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgIChjbGljayk9XCJoYW5kbGVNZW51SXRlbUNsaWNrKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZU1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZU1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleClcIlxuICAgICAgICAgICAoZGVzeUF0dHJpYnV0ZUNoYW5nZSk9XCJjaGVja0NoYW5nZXMoKVwiIFthdHRyaWJ1dGVzVG9DaGVja109XCInZGlzYWJsZWQnXCJcbiAgICAgICAgICAgW2lkXT1cImdldEl0ZW1JZChpdGVtLCBpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiaXRlbS5yb3V0ZXJMaW5rQWN0aXZlQ2xhc3NlcyA/IGl0ZW0ucm91dGVyTGlua0FjdGl2ZUNsYXNzZXMgOiBbXVwiXG4gICAgICAgICAgIFtmcmFnbWVudF09XCJpdGVtLmZyYWdtZW50XCJcbiAgICAgICAgICAgW2NsYXNzXT1cIlsnYy1tZW51YmFyX19idXR0b24nLCBpdGVtLmNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwieydjLW1lbnViYXJfX2J1dHRvbi0tZGlzYWJsZWQnOiBpdGVtLmRpc2FibGVkLCAnYy1tZW51YmFyX19idXR0b24tLWhhcy1zZWxlY3Rpb24nOiBpdGVtLmFjdGl2ZX1cIlxuICAgICAgICAgICBbYXR0ci50aXRsZV09XCJpdGVtLnRpdGxlID8gaXRlbS50aXRsZSA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogKGl0ZW0uYXJpYURpc2FibGVkID8gaXRlbS5hcmlhRGlzYWJsZWQgOiBudWxsKVwiXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIml0ZW0uZGlzYWJsZWQgPyAtMSA6IChpdGVtSW5kZXggPT09IGN1cnJlbnRGb2N1c0l0ZW1JbmRleCA/IDAgOiAtMSlcIlxuICAgICAgICAgICBbYXR0ci50YXJnZXRdPVwiaXRlbS50YXJnZXQgPyBpdGVtLnRhcmdldCA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIml0ZW0uYXJpYURlc2NyaWJlZEJ5ID8gaXRlbS5hcmlhRGVzY3JpYmVkQnkgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZEJ5XT1cIml0ZW0uYXJpYUxhYmVsbGVkQnkgPyBpdGVtLmFyaWFMYWJlbGxlZEJ5IDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIml0ZW0uYXJpYUhpZGRlbiA/IGl0ZW0uYXJpYUhpZGRlbiA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIml0ZW0uYXJpYUNvbnRyb2xzID8gaXRlbS5hcmlhQ29udHJvbHMgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIml0ZW0uYXJpYUN1cnJlbnQgPyBpdGVtLmFyaWFDdXJyZW50IDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGl2ZV09XCJpdGVtLmFyaWFMaXZlID8gaXRlbS5hcmlhTGl2ZSA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIml0ZW0uYXJpYUV4cGFuZGVkID8gaXRlbS5hcmlhRXhwYW5kZWQgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2VdPVwiaXRlbS5hcmlhRXJyb3JNZXNzYWdlID8gaXRlbS5hcmlhRXJyb3JNZXNzYWdlIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiaXRlbS5hcmlhSGFzUG9wdXAgPyBpdGVtLmFyaWFIYXNQb3B1cCA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLW1vZGFsXT1cIml0ZW0uYXJpYU1vZGFsID8gaXRlbS5hcmlhTW9kYWwgOiBudWxsXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBpdGVtLCBodG1sOiBpdGVtLmh0bWwsIHRleHQ6IGl0ZW0udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YSAqbmdJZj1cIiFpdGVtLnJvdXRlckxpbmsgJiYgaXRlbS5ocmVmICYmICFpdGVtLnN1YlwiICNsaW5rICNpdGVtQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU1lbnVJdGVtQ2xpY2soJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChkZXN5QXR0cmlidXRlQ2hhbmdlKT1cImNoZWNrQ2hhbmdlcygpXCIgW2F0dHJpYnV0ZXNUb0NoZWNrXT1cIidkaXNhYmxlZCdcIlxuICAgICAgICAgICBbaWRdPVwiZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleClcIlxuICAgICAgICAgICBbaHJlZl09XCJpdGVtLmhyZWYgfCBleHRlcm5hbEhyZWZcIlxuICAgICAgICAgICBbY2xhc3NdPVwiWydjLW1lbnViYXJfX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J2MtbWVudWJhcl9fYnV0dG9uLS1kaXNhYmxlZCc6IGl0ZW0uZGlzYWJsZWQsICdjLW1lbnViYXJfX2J1dHRvbi0taGFzLXNlbGVjdGlvbic6IGl0ZW0uYWN0aXZlfVwiXG4gICAgICAgICAgIFthdHRyLnRpdGxlXT1cIml0ZW0udGl0bGUgPyBpdGVtLnRpdGxlIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCA/IGl0ZW0uZGlzYWJsZWQgOiAoaXRlbS5hcmlhRGlzYWJsZWQgPyBpdGVtLmFyaWFEaXNhYmxlZCA6IG51bGwpXCJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXRlbS5kaXNhYmxlZCA/IC0xIDogKGl0ZW1JbmRleCA9PT0gY3VycmVudEZvY3VzSXRlbUluZGV4ID8gMCA6IC0xKVwiXG4gICAgICAgICAgIFthdHRyLnRhcmdldF09XCJpdGVtLnRhcmdldCA/IGl0ZW0udGFyZ2V0IDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaXRlbS5hcmlhRGVzY3JpYmVkQnkgPyBpdGVtLmFyaWFEZXNjcmliZWRCeSA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkQnldPVwiaXRlbS5hcmlhTGFiZWxsZWRCeSA/IGl0ZW0uYXJpYUxhYmVsbGVkQnkgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiaXRlbS5hcmlhSGlkZGVuID8gaXRlbS5hcmlhSGlkZGVuIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXRlbS5hcmlhQ29udHJvbHMgPyBpdGVtLmFyaWFDb250cm9scyA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiaXRlbS5hcmlhQ3VycmVudCA/IGl0ZW0uYXJpYUN1cnJlbnQgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1saXZlXT1cIml0ZW0uYXJpYUxpdmUgPyBpdGVtLmFyaWFMaXZlIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXRlbS5hcmlhRXhwYW5kZWQgPyBpdGVtLmFyaWFFeHBhbmRlZCA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJpdGVtLmFyaWFFcnJvck1lc3NhZ2UgPyBpdGVtLmFyaWFFcnJvck1lc3NhZ2UgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJpdGVtLmFyaWFIYXNQb3B1cCA/IGl0ZW0uYXJpYUhhc1BvcHVwIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbW9kYWxdPVwiaXRlbS5hcmlhTW9kYWwgPyBpdGVtLmFyaWFNb2RhbCA6IG51bGxcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW0sIGh0bWw6IGl0ZW0uaHRtbCwgdGV4dDogaXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2E+XG5cbiAgICAgICAgPHVsICpuZ0lmPVwiaXRlbS5zdWIgJiYgZ2V0SXRlbVN1Yml0ZW1zKGl0ZW0pXCIgI3BvcHVwTWVudSByb2xlPVwibWVudVwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0UG9wdXBTdHlsZShpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJbJ2MtbWVudWJhcl9fdG9vbHRpcCB3LW1heCBtYXgtdy02NCBoaWRkZW4gYm9yZGVyIGJvcmRlci1uZXV0cmFsLWJhc2Ugc2hhZG93LW1kIGJnLXdoaXRlIHRleHQtc20nLCBpdGVtLnN1Yi5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0uYXJpYUxhYmVsID8gaXRlbS5hcmlhTGFiZWwgOiAoaXRlbS5zdWIuYXJpYUxhYmVsID8gaXRlbS5zdWIuYXJpYUxhYmVsIDogbnVsbClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpdGVtLnN1Yi5hcmlhRGVzY3JpYmVkQnkgPyBpdGVtLnN1Yi5hcmlhRGVzY3JpYmVkQnkgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpdGVtLnN1Yi5hcmlhTGFiZWxsZWRCeSA/IGl0ZW0uc3ViLmFyaWFMYWJlbGxlZEJ5IDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCJpdGVtLnN1Yi5hcmlhSGlkZGVuID8gaXRlbS5zdWIuYXJpYUhpZGRlbiA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLnN1Yi5hcmlhRGlzYWJsZWQgPyBpdGVtLnN1Yi5hcmlhRGlzYWJsZWQgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXRlbS5zdWIuYXJpYUNvbnRyb2xzID8gaXRlbS5zdWIuYXJpYUNvbnRyb2xzIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiaXRlbS5zdWIuYXJpYUN1cnJlbnQgPyBpdGVtLnN1Yi5hcmlhQ3VycmVudCA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1saXZlXT1cIml0ZW0uc3ViLmFyaWFMaXZlID8gaXRlbS5zdWIuYXJpYUxpdmUgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiISEobWVudURhdGEgJiYgbWVudURhdGFbaXRlbUluZGV4XS5vcGVuKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJpdGVtLnN1Yi5hcmlhRXJyb3JNZXNzYWdlID8gaXRlbS5zdWIuYXJpYUVycm9yTWVzc2FnZSA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJpdGVtLnN1Yi5hcmlhSGFzUG9wdXAgPyBpdGVtLnN1Yi5hcmlhSGFzUG9wdXAgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbW9kYWxdPVwiaXRlbS5zdWIuYXJpYU1vZGFsID8gaXRlbS5zdWIuYXJpYU1vZGFsIDogbnVsbFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1Ykl0ZW0gb2YgZ2V0SXRlbVN1Yml0ZW1zKGl0ZW0pOyBpbmRleCBhcyBzdWJJdGVtSW5kZXhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInN1Ykl0ZW0ucm9sZVwiPlxuICAgICAgICAgICAgICA8bGkgI3BvcHVwTWVudUl0ZW0gKm5nU3dpdGNoQ2FzZT1cIidub25lJ1wiIHJvbGU9XCJub25lXCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVQb3B1cE1lbnVJdGVtQ2xpY2soaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IHN1Ykl0ZW0sIGh0bWw6IHN1Ykl0ZW0uaHRtbCwgdGV4dDogc3ViSXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgKm5nU3dpdGNoQ2FzZT1cIidncm91cCdcIiByb2xlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgIDx1bCByb2xlPVwiZ3JvdXBcIiBbaWRdPVwiZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzdWJJdGVtLmFyaWFMYWJlbCA/IHN1Ykl0ZW0uYXJpYUxhYmVsIDogbnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3Vic3ViaXRlbSBvZiBnZXRTdWJJdGVtU3ViaXRlbXMoc3ViSXRlbSk7IGluZGV4IGFzIHN1YnN1YkluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdWJzdWJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxpICNwb3B1cE1lbnVJdGVtIFthdHRyLnJvbGVdPVwic3Vic3ViaXRlbS5yb2xlID8gc3Vic3ViaXRlbS5yb2xlIDogbnVsbFwiICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFN1Ykl0ZW1JZChzdWJzdWJpdGVtLCBzdWJzdWJJbmRleCwgZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVQb3B1cE1lbnVJdGVtQ2xpY2soaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YnN1YkluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3Vic3ViSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3Vic3ViSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImdldFN1YlN1Ykl0ZW1BcmlhQ2hlY2tlZChzdWJzdWJpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcHItYmFzZSBwbC1sZyBweS1zbSBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1wcmltYXJ5LWJhc2UgaG92ZXI6dGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBzdWJzdWJpdGVtLCBodG1sOiBzdWJzdWJpdGVtLmh0bWwsIHRleHQ6IHN1YnN1Yml0ZW0udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxsaSAjcG9wdXBNZW51SXRlbSAqbmdTd2l0Y2hDYXNlPVwiJ21lbnVpdGVtJ1wiIHJvbGU9XCJtZW51aXRlbVwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcHItYmFzZSBwbC1sZyBweS1zbSBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1wcmltYXJ5LWJhc2UgaG92ZXI6dGV4dC13aGl0ZSBmb2N1czpiZy1wcmltYXJ5LWJhc2UgZm9jdXM6dGV4dC13aGl0ZSBmb2N1czpvdXRsaW5lLW5vbmVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IHN1Ykl0ZW0sIGh0bWw6IHN1Ykl0ZW0uaHRtbCwgdGV4dDogc3ViSXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgI3BvcHVwTWVudUl0ZW0gKm5nU3dpdGNoQ2FzZT1cIidtZW51aXRlbWNoZWNrYm94J1wiIHJvbGU9XCJtZW51aXRlbWNoZWNrYm94XCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlUG9wdXBNZW51SXRlbUNsaWNrKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRTdWJJdGVtSWQoc3ViSXRlbSwgc3ViSXRlbUluZGV4LCBnZXRJdGVtSWQoaXRlbSwgaXRlbUluZGV4KSlcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cIiEhc3ViSXRlbS5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcHItYmFzZSBwbC1sZyBweS1zbSBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1wcmltYXJ5LWJhc2UgaG92ZXI6dGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogc3ViSXRlbSwgaHRtbDogc3ViSXRlbS5odG1sLCB0ZXh0OiBzdWJJdGVtLnRleHR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxsaSAjcG9wdXBNZW51SXRlbSAqbmdTd2l0Y2hDYXNlPVwiJ3NlcGFyYXRvcidcIiByb2xlPVwic2VwYXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRTdWJJdGVtSWQoc3ViSXRlbSwgc3ViSXRlbUluZGV4LCBnZXRJdGVtSWQoaXRlbSwgaXRlbUluZGV4KSlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteS1zbSBib3JkZXItYiBib3JkZXItbmV1dHJhbC1iYXNlXCI+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdWw+XG4iXX0=
962
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnViYXIvbWVudWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnViYXIvbWVudWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNVLGlCQUFpQixFQUNoQyxTQUFTLEVBQUUsZUFBZSxFQUMxQixVQUFVLEVBQUUsWUFBWSxFQUN4QixXQUFXLEVBQ1gsS0FBSyxFQUNNLE1BQU0sRUFDakIsU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUlqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN4RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7OztBQU0xRSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsc0JBQXNCO0lBNkcxRCxZQUFvQixpQkFBb0M7UUFDdEQsS0FBSyxFQUFFLENBQUM7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LGtCQUFrQjtnQkFDRCxRQUFRO3NCQUFyQyxXQUFXO3VCQUFDLGVBQWU7Z0JBQ0UsUUFBUTtzQkFBckMsV0FBVzt1QkFBQyxlQUFlO2dCQUVnQixPQUFPO3NCQUFsRCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ04sU0FBUztzQkFBNUMsWUFBWTt1QkFBQyxvQkFBb0I7Z0JBQzBCLGNBQWM7c0JBQXJELGVBQWU7dUJBQUMscUJBQXFCO2dCQUNuQixpQkFBaUI7c0JBQXZELGVBQWU7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLCBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGFiZWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9kZXN5LWZvcm1zL2NvbXBvbmVudHMvbGFiZWwvbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7IExhYmVsRGF0YSB9IGZyb20gJy4uLy4uLy4uL2Rlc3ktZm9ybXMvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBY2Nlc3NpYmlsaXR5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgRGVzeUNvbnRlbnRDaGlsZCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktY29udGVudC1jaGlsZC5kZWNvcmF0b3InO1xuaW1wb3J0IHsgU3RyaW5nVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMvc3RyaW5nLXV0aWxzJztcbmltcG9ydCB7IE1lbnViYXJJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9tZW51YmFyLWl0ZW0nO1xuaW1wb3J0IHsgTWVudWJhckl0ZW1TdWJJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9tZW51YmFyLWl0ZW0tc3ViLWl0ZW0nO1xuaW1wb3J0IHsgTWVudWJhckl0ZW1TdWJJdGVtU3ViSXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbWVudWJhci1pdGVtLXN1Yi1pdGVtLXN1Yi1pdGVtJztcbmltcG9ydCB7IE1lbnViYXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnViYXItaXRlbS9tZW51YmFyLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IE1lbnViYXJMYWJlbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tZW51YmFyLWxhYmVsL21lbnViYXItbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7IE1lbnViYXJTdWJpdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnViYXItc3ViaXRlbS9tZW51YmFyLXN1Yml0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IE1lbnViYXJTdWJzdWJpdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnViYXItc3Vic3ViaXRlbS9tZW51YmFyLXN1YnN1Yml0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IE1lbnViYXJpdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL21lbnViYXJpdGVtLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Rlc3ktbWVudWJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51YmFyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBNZW51YmFyQ29tcG9uZW50IGV4dGVuZHMgQWNjZXNzaWJpbGl0eUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQElucHV0KCkgaWRQcmVmaXg6IHN0cmluZztcbiAgQElucHV0KCkgaXRlbXM6IE1lbnViYXJJdGVtW107XG4gIEBPdXRwdXQoKSBpdGVtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVudWJhckl0ZW1bXT4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZUl0ZW1DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnViYXJJdGVtPigpO1xuICBAT3V0cHV0KCkgYWN0aXZlU3ViSXRlbUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVudWJhckl0ZW1TdWJJdGVtfE1lbnViYXJJdGVtU3ViSXRlbVN1Ykl0ZW0+KCk7XG5cbiAgLyoqXG4gICAqIGxhYmVsLCBkaWZlcmVudGVzIGZvcm1hcyBkZSBpbXBsZW1lbnRhciwgZW51bWVyYWRhcyBwb3IgcHJpb3JpZGFkXG4gICAqIDEpIGluY2x1aXIgY29tcG9uZW50ZSBtZW51YmFyLWxhYmVsIGFuaWRhZG9cbiAgICogMikgaW5jbHVpciB0ZW1wbGF0ZVxuICAgKiAzKSBpbmNsdWlyIG9iamV0byBsYWJlbCAoaW50ZXJmYXogZXhwdWVzdGEpXG4gICAqIDQpIGluY2x1aXIgbGVnZW5kVGV4dCAtIGluY2x1aXIgdW4gbGFiZWwgY29uIHNvbG8gdW4gdGV4dG9cbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsUmVmOiBUZW1wbGF0ZVJlZjxMYWJlbENvbXBvbmVudD47XG4gIEBJbnB1dCgpIGxhYmVsRGF0YTogTGFiZWxEYXRhO1xuICBASW5wdXQoKSBsYWJlbFRleHQ6IHN0cmluZztcblxuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2NsYXNzJykgY2xhc3NlczogYW55O1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmMtbWVudWJhcicpIGNmZyA9IHRydWVcbiAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJykgaWQ6IGFueTtcbiAgXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKSBhcmlhTGFiZWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgYXJpYURlc2NyaWJlZEJ5OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbGxlZGJ5JykgYXJpYUxhYmVsbGVkQnk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhpZGRlbicpIGFyaWFIaWRkZW46IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRpc2FibGVkJykgYXJpYURpc2FibGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb250cm9scycpIGFyaWFDb250cm9sczogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY3VycmVudCcpIGFyaWFDdXJyZW50OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1saXZlJykgYXJpYUxpdmU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJykgYXJpYUV4cGFuZGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2UnKSBhcmlhRXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1oYXNwb3B1cCcpIGFyaWFIYXNQb3B1cDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbW9kYWwnKSBhcmlhTW9kYWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNoZWNrZWQnKSBhcmlhQ2hlY2tlZDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcHJlc3NlZCcpIGFyaWFQcmVzc2VkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yZWFkb25seScpIGFyaWFSZWFkb25seTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcmVxdWlyZWQnKSBhcmlhUmVxdWlyZWQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJykgYXJpYVNlbGVjdGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZW1pbicpIGFyaWFWYWx1ZW1pbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtdmFsdWVtYXgnKSBhcmlhVmFsdWVtYXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXZhbHVlbm93JykgYXJpYVZhbHVlbm93OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZXRleHQnKSBhcmlhVmFsdWV0ZXh0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vcmllbnRhdGlvbicpIGFyaWFPcmllbnRhdGlvbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGV2ZWwnKSBhcmlhTGV2ZWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZScpIGFyaWFNdWx0aXNlbGVjdGFibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXBsYWNlaG9sZGVyJykgYXJpYVBsYWNlaG9sZGVyOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1wb3NpbnNldCcpIGFyaWFQb3NpbnNldDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2V0c2l6ZScpIGFyaWFTZXRzaXplOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1zb3J0JykgYXJpYVNvcnQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWJ1c3knKSBhcmlhQnVzeTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZHJvcGVmZmVjdCcpIGFyaWFEcm9wZWZmZWN0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1ncmFiYmVkJykgYXJpYUdyYWJiZWQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKSBhcmlhQWN0aXZlZGVzY2VuZGFudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYXRvbWljJykgYXJpYUF0b21pYzogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYXV0b2NvbXBsZXRlJykgYXJpYUF1dG9jb21wbGV0ZTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYnJhaWxsZWxhYmVsJykgYXJpYUJyYWlsbGVsYWJlbDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYnJhaWxsZXJvbGVkZXNjcmlwdGlvbicpIGFyaWFCcmFpbGxlcm9sZWRlc2NyaXB0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb2xjb3VudCcpIGFyaWFDb2xjb3VudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY29saW5kZXgnKSBhcmlhQ29saW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNvbGluZGV4dGV4dCcpIGFyaWFDb2xpbmRleHRleHQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNvbHNwYW4nKSBhcmlhQ29sc3Bhbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpcHRpb24nKSBhcmlhRGVzY3JpcHRpb246IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRldGFpbHMnKSBhcmlhRGV0YWlsczogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZmxvd3RvJykgYXJpYUZsb3d0bzogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtaW52YWxpZCcpIGFyaWFJbnZhbGlkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1rZXlzaG9ydGN1dHMnKSBhcmlhS2V5c2hvcnRjdXRzOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vd25zJykgYXJpYU93bnM6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJlbGV2YW50JykgYXJpYVJlbGV2YW50OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb24nKSBhcmlhUm9sZWRlc2NyaXB0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb3djb3VudCcpIGFyaWFSb3djb3VudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcm93aW5kZXgnKSBhcmlhUm93aW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJvd2luZGV4dGV4dCcpIGFyaWFSb3dpbmRleHRleHQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJvd3NwYW4nKSBhcmlhUm93c3Bhbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JykgdGFiaW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci50aXRsZScpIHRpdGxlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYWx0JykgYWx0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIubGFuZycpIGxhbmc6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hY2Nlc3NrZXknKSBhY2Nlc3NrZXk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hdXRvY29tcGxldGUnKSBhdXRvY29tcGxldGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hdXRvZm9jdXMnKSBhdXRvZm9jdXM6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5jb250ZW50ZWRpdGFibGUnKSBjb250ZW50ZWRpdGFibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kaXInKSBkaXI6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kcmFnZ2FibGUnKSBkcmFnZ2FibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5lbnRlcmtleWhpbnQnKSBlbnRlcmtleWhpbnQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5oaWRkZW4nKSBoaWRkZW46IGJvb2xlYW4gPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuaW5wdXRtb2RlJykgaW5wdXRtb2RlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuc3BlbGxjaGVjaycpIHNwZWxsY2hlY2s6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci50cmFuc2xhdGUnKSB0cmFuc2xhdGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW11bHRpbGluZScpIGFyaWFNdWx0aWxpbmU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5mb3InKSBmb3I6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5mb3JtJykgZm9ybTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmhlYWRlcnMnKSBoZWFkZXJzOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIucGxhY2Vob2xkZXInKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJlYWRvbmx5JykgcmVhZG9ubHk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5yZXF1aXJlZCcpIHJlcXVpcmVkOiBzdHJpbmcgPSBudWxsO1xuXG4gIEBWaWV3Q2hpbGQoJ21lbnViYXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbWVudWJhcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZHJlbihNZW51YmFyaXRlbURpcmVjdGl2ZSkgbWVudUl0ZW1zOiBRdWVyeUxpc3Q8TWVudWJhcml0ZW1EaXJlY3RpdmU+O1xuICBARGVzeUNvbnRlbnRDaGlsZCgpIEBDb250ZW50Q2hpbGRyZW4oTWVudWJhckxhYmVsQ29tcG9uZW50KSBsYWJlbENvbXBvbmVudDogTWVudWJhckxhYmVsQ29tcG9uZW50O1xuICBAQ29udGVudENoaWxkcmVuKE1lbnViYXJJdGVtQ29tcG9uZW50KSBpdGVtQ29tcG9uZW50TGlzdDogUXVlcnlMaXN0PE1lbnViYXJJdGVtQ29tcG9uZW50PjtcblxuICBtZW51RGF0YTogYW55W107XG4gIHZpZXdJbml0ID0gZmFsc2U7XG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgY3VycmVudEZvY3VzSXRlbUluZGV4ID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzPzogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZXdJbml0KSB7XG4gICAgICB0aGlzLmNoZWNrQ2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdJbml0ID0gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrQ2hhbmdlcygpO1xuICB9XG5cbiAgY2hlY2tDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tZW51SXRlbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5tZW51RGF0YSA9IFtdO1xuICAgIHRoaXMuZ2V0SXRlbXMoKS5mb3JFYWNoKChfLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaXRlbURhdGEgPSB7XG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBjdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXg6IDAsXG4gICAgICAgIGN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleDogMCxcbiAgICAgICAgbWVudUl0ZW06IHRoaXMubWVudUl0ZW1zLnRvQXJyYXkoKVtpbmRleF1cbiAgICAgIH07XG4gICAgICB0aGlzLm1lbnVEYXRhLnB1c2goaXRlbURhdGEpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMudmlld0luaXQpIHtcbiAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZCgpO1xuICAgIH1cblxuXG4gICAgY29uc3QgbGFzdEN1cnJlbnRGb2N1c0l0ZW1JbmRleCA9IHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4O1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGlmIChpdGVtcykge1xuICAgICAgd2hpbGUgKCF0aGlzLmlzSXRlbUZvY3VzYWJsZSh0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCAlIGl0ZW1zLmxlbmd0aCkpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXggPSAodGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXggKyBpdGVtcy5sZW5ndGggKyAxKSAlIGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ID09PSBsYXN0Q3VycmVudEZvY3VzSXRlbUluZGV4KSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8qXG4gICAqIEV2ZW50b3NcbiAgICovXG5cbiAgaGFuZGxlTWVudUZvY3VzSW4oKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaGFuZGxlTWVudUZvY3VzT3V0KGV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm1lbnViYXIubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICB9XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGhhbmRsZU1lbnVJdGVtQ2xpY2soZXZlbnQsIGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBpc09wZW4gPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbjtcbiAgICAgIHRoaXMuY2xvc2VNZW51KCk7XG4gICAgICBpZiAoIWlzT3Blbikge1xuICAgICAgICB0aGlzLm9wZW5NZW51KGl0ZW1JbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVNZW51SXRlbShpdGVtSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU1lbnVJdGVtS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnICc6XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMub3Blbk1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZm9jdXNGaXJzdFN1Ykl0ZW0oaXRlbUluZGV4KSk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVJdGVtKGl0ZW1JbmRleCwgLTEpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oaXRlbUluZGV4LCArMSk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5vcGVuTWVudShpdGVtSW5kZXgpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb2N1c0xhc3RTdWJJdGVtKGl0ZW1JbmRleCkpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICBjYXNlICdQYWdlVXAnOlxuICAgICAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMuY2xvc2VNZW51KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c0ZpcnN0SXRlbSgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICBjYXNlICdQYWdlRG93bic6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzTGFzdEl0ZW0oKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAodGhpcy5pc1ByaW50YWJsZUNoYXIoZXZlbnQua2V5KSkge1xuICAgICAgICAgIHRoaXMuZm9jdXNJdGVtQnlGaXJzdENoYXIoZXZlbnQua2V5KTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4LCB0cnVlKTtcbiAgfVxuXG4gIGhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZhdGVQb3B1cE1lbnVJdGVtKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpO1xuICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1JbmRleCk7XG4gICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgfVxuXG4gIGhhbmRsZVBvcHVwTWVudUl0ZW1LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTdWJJbmRleCA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXg7XG4gICAgY29uc3QgY3VycmVudFN1YlN1YkluZGV4ID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnICc6XG4gICAgICAgIHRoaXMuYWN0aXZhdGVQb3B1cE1lbnVJdGVtKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpO1xuICAgICAgICBpZiAodGhpcy5tdXN0Q2xvc2VBZnRlclNlbGVjdFBvcHVwSXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1JbmRleCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleCwgY3VycmVudFN1YkluZGV4LCBjdXJyZW50U3ViU3ViSW5kZXgsIC0xKTtcbiAgICAgICAgLy8gdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCAoY3VycmVudFN1YkluZGV4ICsgbGlzdExlbmd0aCAtIDEpICUgbGlzdExlbmd0aCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleCwgY3VycmVudFN1YkluZGV4LCBjdXJyZW50U3ViU3ViSW5kZXgsICsxKTtcbiAgICAgICAgLy8gdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCAoY3VycmVudFN1YkluZGV4ICsgbGlzdExlbmd0aCArIDEpICUgbGlzdExlbmd0aCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oKGl0ZW1JbmRleCArIGl0ZW1zLmxlbmd0aCAtIDEpICUgaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oKGl0ZW1JbmRleCArIGl0ZW1zLmxlbmd0aCArIDEpICUgaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIHRoaXMuZm9jdXNGaXJzdFN1Ykl0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICB0aGlzLmZvY3VzTGFzdFN1Ykl0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHRoaXMuaXNQcmludGFibGVDaGFyKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzU3ViSXRlbUJ5Rmlyc3RDaGFyKGl0ZW1JbmRleCwgZXZlbnQua2V5KTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KTtcbiAgfVxuXG4gIC8qXG4gICAqIENvbXVuZXNcbiAgICovXG5cbiAgY2hlY2tSZXF1aXJlZCgpOiB2b2lkIHtcblxuXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG5cbiAgICAvLyBObyBzZSBoYSBwdWVzdG8gbGFiZWwgcmVxdWlyZWQgcG9ycXVlIGVuIGFsZ3Vub3MgZWplbXBsb3MgZGUgZGVzeS1odG1sIG5vIGFwYXJlY2VcbiAgfVxuXG5cbiAgYWN0aXZhdGVNZW51SXRlbShpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIHRoaXMuYWN0aXZlSXRlbUNoYW5nZS5lbWl0KGl0ZW1zW2l0ZW1JbmRleF0gYXMgTWVudWJhckl0ZW0pO1xuICAgIGlmIChpdGVtc1tpdGVtSW5kZXhdIGluc3RhbmNlb2YgTWVudWJhckl0ZW1Db21wb25lbnQpIHtcbiAgICAgIChpdGVtc1tpdGVtSW5kZXhdIGFzIE1lbnViYXJJdGVtQ29tcG9uZW50KS5zZWxlY3RlZC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgYWN0aXZhdGVQb3B1cE1lbnVJdGVtKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBsZXQgaXRlbTogTWVudWJhckl0ZW1TdWJJdGVtfE1lbnViYXJJdGVtU3ViSXRlbVN1Ykl0ZW0gPSBzdWJJdGVtc1tzdWJJdGVtSW5kZXhdO1xuICAgIGxldCBzdWJTdWJJdGVtcyA9IFtdO1xuICAgIGlmIChzdWJTdWJJdGVtSW5kZXggIT09IG51bGwgJiYgc3ViU3ViSXRlbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHN1YlN1Ykl0ZW1zID0gdGhpcy5nZXRTdWJJdGVtU3ViaXRlbXMoaXRlbSk7XG4gICAgICBpdGVtID0gc3ViU3ViSXRlbXNbc3ViU3ViSXRlbUluZGV4XTtcbiAgICB9XG5cbiAgICBsZXQgY2hlY2tlZENoYW5nZSA9IGZhbHNlO1xuICAgIGlmIChpdGVtLnJvbGUgPT09ICdtZW51aXRlbWNoZWNrYm94Jykge1xuICAgICAgaXRlbS5jaGVja2VkID0gIWl0ZW0uY2hlY2tlZDtcbiAgICAgIGNoZWNrZWRDaGFuZ2UgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaXRlbS5yb2xlID09PSAnbWVudWl0ZW1yYWRpbycpIHtcbiAgICAgIGNoZWNrZWRDaGFuZ2UgPSAhaXRlbS5jaGVja2VkO1xuICAgICAgc3ViU3ViSXRlbXMuZm9yRWFjaChpID0+IGkuY2hlY2tlZCA9IGZhbHNlKTtcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICB0aGlzLmFjdGl2ZVN1Ykl0ZW1DaGFuZ2UuZW1pdChpdGVtIGFzIE1lbnViYXJJdGVtKTtcbiAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIE1lbnViYXJTdWJpdGVtQ29tcG9uZW50IHx8IGl0ZW0gaW5zdGFuY2VvZiBNZW51YmFyU3Vic3ViaXRlbUNvbXBvbmVudCkge1xuICAgICAgaXRlbS5zZWxlY3RlZC5lbWl0KCk7XG5cbiAgICAgIGlmIChjaGVja2VkQ2hhbmdlKSB7XG4gICAgICAgIGl0ZW0uY2hlY2tlZENoYW5nZS5lbWl0KGl0ZW0uY2hlY2tlZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbXVzdENsb3NlQWZ0ZXJTZWxlY3RQb3B1cEl0ZW0oaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGxldCBpdGVtOiBNZW51YmFySXRlbVN1Ykl0ZW18TWVudWJhckl0ZW1TdWJJdGVtU3ViSXRlbSA9IHN1Ykl0ZW1zW3N1Ykl0ZW1JbmRleF07XG4gICAgaWYgKHN1YlN1Ykl0ZW1JbmRleCAhPT0gbnVsbCAmJiBzdWJTdWJJdGVtSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgc3ViU3ViSXRlbXMgPSB0aGlzLmdldFN1Ykl0ZW1TdWJpdGVtcyhpdGVtKTtcbiAgICAgIGl0ZW0gPSBzdWJTdWJJdGVtc1tzdWJTdWJJdGVtSW5kZXhdO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtLnJvbGUgIT09ICdtZW51aXRlbWNoZWNrYm94JyAmJiBpdGVtLnJvbGUgIT09ICdtZW51aXRlbXJhZGlvJztcbiAgfVxuXG4gIG9wZW5NZW51KGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd2FzT3BlbmVkID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm9wZW47XG4gICAgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm9wZW4gPSB0cnVlO1xuICAgIGlmICh3YXNPcGVuZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVNZW51SXRlbShpdGVtSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlTWVudShpdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaXRlbUluZGV4ICE9PSBudWxsICYmIGl0ZW1JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lbnVEYXRhLmZvckVhY2goaXRlbSA9PiBpdGVtLm9wZW4gPSBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgaGFzUG9wdXBNZW51KGl0ZW1JbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICByZXR1cm4gaXRlbXNbaXRlbUluZGV4XS5zdWIgJiYgc3ViSXRlbXMgJiYgc3ViSXRlbXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgaXNQcmludGFibGVDaGFyKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0ci5sZW5ndGggPT09IDEgJiYgISFzdHIubWF0Y2goL1xcUy8pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZW51RGF0YUluZGV4KGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgbWVudURhdGFJbmRleCA9IDA7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1Ykl0ZW1JbmRleDsgaSsrKSB7XG4gICAgICBjb25zdCBzdWJJdGVtID0gc3ViSXRlbXNbaV07XG4gICAgICBjb25zdCBzdWJTdWJJdGVtcyA9IHRoaXMuZ2V0U3ViSXRlbVN1Yml0ZW1zKHN1Ykl0ZW0pO1xuICAgICAgbWVudURhdGFJbmRleCArPSBzdWJTdWJJdGVtcyAmJiBzdWJTdWJJdGVtcy5sZW5ndGggPiAwID8gc3ViU3ViSXRlbXMubGVuZ3RoIDogMTtcbiAgICB9XG5cbiAgICBpZiAoc3ViU3ViSXRlbUluZGV4ICE9PSBudWxsICYmIHN1YlN1Ykl0ZW1JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBtZW51RGF0YUluZGV4ICs9IHN1YlN1Ykl0ZW1JbmRleDtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVudURhdGFJbmRleDtcbiAgfVxuXG4gIC8qXG4gICAqIENvbXVuZXMgLSBmb2N1c1xuICAgKi9cblxuICBmb2N1c0l0ZW0oaXRlbUluZGV4OiBudW1iZXIsIGhvdmVyPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGhhc0ZvY3VzID0gdGhpcy5tZW51YmFyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgY29uc3QgaXNPcGVuID0gdGhpcy5tZW51RGF0YVt0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleF0ub3BlbjtcblxuICAgIGlmICghaG92ZXIgfHwgaGFzRm9jdXMpIHtcbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5tZW51SXRlbS5saW5rLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgIGlmIChpc09wZW4gJiYgdGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgdGhpcy5vcGVuTWVudShpdGVtSW5kZXgpO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ID0gaXRlbUluZGV4O1xuICB9XG5cbiAgZm9jdXNOZXh0QXZhaWxhYmxlSXRlbShmcm9tSXRlbUluZGV4OiBudW1iZXIsIHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBuZXh0SXRlbSA9IGZyb21JdGVtSW5kZXg7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgZG8ge1xuICAgICAgbmV4dEl0ZW0gPSAobmV4dEl0ZW0gKyBpdGVtcy5sZW5ndGggKyBzdGVwKSAlIGl0ZW1zLmxlbmd0aDtcbiAgICB9IHdoaWxlICghdGhpcy5pc0l0ZW1Gb2N1c2FibGUobmV4dEl0ZW0pICYmIG5leHRJdGVtICE9PSBmcm9tSXRlbUluZGV4KTtcblxuICAgIGlmIChuZXh0SXRlbSAhPT0gZnJvbUl0ZW1JbmRleCkge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0obmV4dEl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzRmlyc3RJdGVtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzSXRlbUZvY3VzYWJsZSgwKSkge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0oMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlSXRlbSgwLCArMSk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNMYXN0SXRlbSgpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBpZiAodGhpcy5pc0l0ZW1Gb2N1c2FibGUoaXRlbXMubGVuZ3RoIC0gMSkpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1zLmxlbmd0aCAtIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oaXRlbXMubGVuZ3RoIC0gMSwgLTEpO1xuICAgIH1cbiAgfVxuXG4gIGlzSXRlbUZvY3VzYWJsZShpdGVtSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5nZXRJdGVtcygpW2l0ZW1JbmRleF0uZGlzYWJsZWQ7XG4gIH1cblxuICBmb2N1c0l0ZW1CeUZpcnN0Q2hhcihjaGFyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQ29udGVudHM6IHN0cmluZ1tdID0gdGhpcy5tZW51SXRlbXMubWFwKG1lbnVJdGVtID0+IG1lbnVJdGVtLml0ZW1Db250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50KTtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleDtcbiAgICBsZXQgZm91bmRJbmRleCA9IC0xO1xuICAgIGRvIHtcbiAgICAgIGluZGV4ID0gKGluZGV4ICsgaXRlbUNvbnRlbnRzLmxlbmd0aCArIDEpICUgaXRlbUNvbnRlbnRzLmxlbmd0aDtcbiAgICAgIGlmIChpdGVtQ29udGVudHNbaW5kZXhdICYmIGl0ZW1Db250ZW50c1tpbmRleF0udHJpbSgpLnN1YnN0cigwLCAxKS50b0xvd2VyQ2FzZSgpID09PSBjaGFyLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAmJiB0aGlzLmlzSXRlbUZvY3VzYWJsZShpbmRleCkpIHtcbiAgICAgICAgZm91bmRJbmRleCA9IGluZGV4O1xuICAgICAgfVxuICAgIH0gd2hpbGUgKGZvdW5kSW5kZXggPT09IC0xICYmIGluZGV4ICE9PSB0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCk7XG5cbiAgICBpZiAoZm91bmRJbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLmZvY3VzSXRlbShmb3VuZEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBmb2N1c1N1Ykl0ZW0oaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm1lbnVJdGVtLnBvcHVwTWVudUl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1lbnVEYXRhSW5kZXggPSB0aGlzLmdldE1lbnVEYXRhSW5kZXgoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG5cbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXggPSBzdWJJdGVtSW5kZXg7XG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4ID0gc3ViU3ViSXRlbUluZGV4O1xuICAgICAgY29uc3QgZWxlbSA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5tZW51SXRlbS5wb3B1cE1lbnVJdGVtcy50b0FycmF5KClbbWVudURhdGFJbmRleF0ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgIGVsZW0uZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHN1Yml0ZW0gdG8gZm9jdXMnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignTm8gc3ViaXRlbXMnKTtcbiAgICB9XG4gIH1cblxuICBmb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleDogbnVtYmVyLCBmcm9tSXRlbVN1YkluZGV4OiBudW1iZXIsIGZyb21JdGVtU3ViU3ViSW5kZXg6IG51bWJlciwgc3RlcDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IG5leHRTdWJJbmRleCA9IGZyb21JdGVtU3ViSW5kZXg7XG4gICAgbGV0IG5leHRTdWJTdWJJbmRleCA9IGZyb21JdGVtU3ViU3ViSW5kZXg7XG4gICAgbGV0IGFsbFN1Ykl0ZW1zQ2hlY2tlZDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBkbyB7XG4gICAgICBjb25zdCBuZXh0SW5kZXhlcyA9IHRoaXMuZ2V0TmV4dFN1Ykl0ZW1JbmRleGVzKGl0ZW1zLCBpdGVtSW5kZXgsIG5leHRTdWJJbmRleCwgbmV4dFN1YlN1YkluZGV4LCBzdGVwKTtcbiAgICAgIG5leHRTdWJJbmRleCA9IG5leHRJbmRleGVzLnN1YkluZGV4O1xuICAgICAgbmV4dFN1YlN1YkluZGV4ID0gbmV4dEluZGV4ZXMuc3ViU3ViSW5kZXg7XG4gICAgICBhbGxTdWJJdGVtc0NoZWNrZWQgPSAoZnJvbUl0ZW1TdWJJbmRleCA9PT0gbmV4dFN1YkluZGV4ICYmIGZyb21JdGVtU3ViU3ViSW5kZXggPT09IG5leHRTdWJTdWJJbmRleCk7XG4gICAgfSB3aGlsZSAoIXRoaXMuaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgpICYmICFhbGxTdWJJdGVtc0NoZWNrZWQpO1xuXG4gICAgaWYgKCFhbGxTdWJJdGVtc0NoZWNrZWQpIHtcbiAgICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzRmlyc3RTdWJJdGVtKGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IGZpcnN0U3ViU3ViSXRlbSA9IG51bGw7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBjb25zdCBzdWJTdWJJdGVtcyA9IHRoaXMuZ2V0U3ViSXRlbVN1Yml0ZW1zKHN1Ykl0ZW1zWzBdKTtcbiAgICBpZiAoc3ViU3ViSXRlbXMgJiYgc3ViU3ViSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgZmlyc3RTdWJTdWJJdGVtID0gMDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4LCAwLCBmaXJzdFN1YlN1Ykl0ZW0pKSB7XG4gICAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIDAsIGZpcnN0U3ViU3ViSXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShpdGVtSW5kZXgsIDAsIGZpcnN0U3ViU3ViSXRlbSwgKzEpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzTGFzdFN1Ykl0ZW0oaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGNvbnN0IGxhc3RJdGVtSW5kZXggPSBzdWJJdGVtcy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGxhc3RJdGVtID0gc3ViSXRlbXNbbGFzdEl0ZW1JbmRleF07XG4gICAgY29uc3Qgc3ViU3ViSXRlbXMgPSB0aGlzLmdldFN1Ykl0ZW1TdWJpdGVtcyhsYXN0SXRlbSk7XG4gICAgbGV0IGxhc3RTdWJTdWJJdGVtID0gbnVsbDtcbiAgICBpZiAoc3ViU3ViSXRlbXMgJiYgc3ViU3ViSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgbGFzdFN1YlN1Ykl0ZW0gPSBzdWJTdWJJdGVtcy5sZW5ndGggLSAxO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU3ViSXRlbUZvY3VzYWJsZShpdGVtSW5kZXgsIGxhc3RJdGVtSW5kZXgsIGxhc3RTdWJTdWJJdGVtKSkge1xuICAgICAgdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCBsYXN0SXRlbUluZGV4LCBsYXN0U3ViU3ViSXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShpdGVtSW5kZXgsIGxhc3RJdGVtSW5kZXgsIGxhc3RTdWJTdWJJdGVtLCAtMSk7XG4gICAgfVxuICB9XG5cbiAgaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBsZXQgaXRlbTogTWVudWJhckl0ZW1TdWJJdGVtfE1lbnViYXJJdGVtU3ViSXRlbVN1Ykl0ZW0gPSBzdWJJdGVtc1tzdWJJdGVtSW5kZXhdO1xuICAgIGlmIChzdWJTdWJJdGVtSW5kZXggIT09IG51bGwgJiYgc3ViU3ViSXRlbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHN1YlN1Ykl0ZW1zID0gdGhpcy5nZXRTdWJJdGVtU3ViaXRlbXMoaXRlbSk7XG4gICAgICBpdGVtID0gc3ViU3ViSXRlbXNbc3ViU3ViSXRlbUluZGV4XTtcbiAgICB9XG5cbiAgICBsZXQgaXNGb2N1c2FibGUgPSBmYWxzZTtcbiAgICBpZiAoaXRlbS5yb2xlICE9PSAnc2VwYXJhdG9yJyAmJiBpdGVtLnJvbGUgIT09ICdub25lJykge1xuICAgICAgaXNGb2N1c2FibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBpc0ZvY3VzYWJsZTtcbiAgfVxuXG4gIGZvY3VzU3ViSXRlbUJ5Rmlyc3RDaGFyKGl0ZW1JbmRleDogbnVtYmVyLCBjaGFyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQ29udGVudHM6IHN0cmluZ1tdID0gdGhpcy5tZW51SXRlbXMudG9BcnJheSgpW2l0ZW1JbmRleF0ucG9wdXBNZW51SXRlbXMubWFwKG1lbnVJdGVtID0+IG1lbnVJdGVtLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQpO1xuICAgIGxldCBzdWJJdGVtSW5kZXggPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViSXRlbUluZGV4O1xuICAgIGxldCBzdWJTdWJJdGVtSW5kZXggPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4O1xuICAgIGxldCBmb3VuZFN1YkluZGV4ID0gLTE7XG4gICAgbGV0IGZvdW5kU3ViU3ViSW5kZXggPSBudWxsO1xuICAgIGxldCBhbGxTdWJJdGVtc0NoZWNrZWQgPSBmYWxzZTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBkbyB7XG4gICAgICBjb25zdCBuZXh0SW5kZXhlcyA9IHRoaXMuZ2V0TmV4dFN1Ykl0ZW1JbmRleGVzKGl0ZW1zLCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4LCArMSk7XG4gICAgICBzdWJJdGVtSW5kZXggPSBuZXh0SW5kZXhlcy5zdWJJbmRleDtcbiAgICAgIHN1YlN1Ykl0ZW1JbmRleCA9IG5leHRJbmRleGVzLnN1YlN1YkluZGV4O1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldE1lbnVEYXRhSW5kZXgoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgICBpZiAoaXRlbUNvbnRlbnRzW2luZGV4XSAmJiBpdGVtQ29udGVudHNbaW5kZXhdLnRyaW0oKS5zdWJzdHIoMCwgMSkudG9Mb3dlckNhc2UoKSA9PT0gY2hhci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgJiYgdGhpcy5pc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCkpIHtcbiAgICAgICAgZm91bmRTdWJJbmRleCA9IHN1Ykl0ZW1JbmRleDtcbiAgICAgICAgZm91bmRTdWJTdWJJbmRleCA9IHN1YlN1Ykl0ZW1JbmRleDtcbiAgICAgIH1cbiAgICAgIGFsbFN1Ykl0ZW1zQ2hlY2tlZCA9ICh0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViSXRlbUluZGV4ID09PSBzdWJJdGVtSW5kZXhcbiAgICAgICAgJiYgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleCA9PT0gc3ViU3ViSXRlbUluZGV4KTtcbiAgICB9IHdoaWxlIChmb3VuZFN1YkluZGV4ID09PSAtMSAmJiAhYWxsU3ViSXRlbXNDaGVja2VkKTtcblxuICAgIGlmIChmb3VuZFN1YkluZGV4ID49IDApIHtcbiAgICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgZm91bmRTdWJJbmRleCwgZm91bmRTdWJTdWJJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogTWV0b2RvcyBwYXJhIGZhY2lsaXRhciBjb250ZW5pZG9cbiAgICovXG5cbiAgZ2V0SXRlbXMoKTogTWVudWJhckl0ZW1bXXxNZW51YmFySXRlbUNvbXBvbmVudFtdIHtcbiAgICBsZXQgaXRlbXM7XG4gICAgaWYgKHRoaXMuaXRlbUNvbXBvbmVudExpc3QgJiYgdGhpcy5pdGVtQ29tcG9uZW50TGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBpdGVtcyA9IHRoaXMuaXRlbUNvbXBvbmVudExpc3QudG9BcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIGdldEl0ZW1TdWJpdGVtcyhpdGVtOiBNZW51YmFySXRlbXxNZW51YmFySXRlbUNvbXBvbmVudCk6IE1lbnViYXJJdGVtU3ViSXRlbVtdfE1lbnViYXJTdWJpdGVtQ29tcG9uZW50W10ge1xuICAgIGxldCBzdWJJdGVtcyA9IFtdO1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTWVudWJhckl0ZW1Db21wb25lbnQpe1xuICAgICAgc3ViSXRlbXMgPSBpdGVtLmdldFN1Ykl0ZW1zKCk7XG4gICAgfVxuXG4gICAgaWYgKCFzdWJJdGVtcyB8fCBzdWJJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHN1Ykl0ZW1zID0gaXRlbS5zdWIgPyBpdGVtLnN1Yi5pdGVtcyA6IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJJdGVtcztcbiAgfVxuXG4gIGdldFN1Ykl0ZW1TdWJpdGVtcyhpdGVtOiBNZW51YmFySXRlbVN1Ykl0ZW18TWVudWJhclN1Yml0ZW1Db21wb25lbnQpOiBNZW51YmFySXRlbVN1Ykl0ZW1TdWJJdGVtW118TWVudWJhclN1YnN1Yml0ZW1Db21wb25lbnRbXSB7XG4gICAgbGV0IHN1Ykl0ZW1zID0gW107XG5cbiAgICBpZiAoaXRlbS5yb2xlID09PSAnZ3JvdXAnKSB7XG4gICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIE1lbnViYXJTdWJpdGVtQ29tcG9uZW50KSB7XG4gICAgICAgIHN1Ykl0ZW1zID0gaXRlbS5nZXRTdWJJdGVtcygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN1Ykl0ZW1zIHx8IHN1Ykl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBzdWJJdGVtcyA9IGl0ZW0uaXRlbXMgPyBpdGVtLml0ZW1zIDogW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Ykl0ZW1zO1xuICB9XG5cbiAgZ2V0TmV4dFN1Ykl0ZW1JbmRleGVzKGl0ZW1zLCBpdGVtSW5kZXgsIG5leHRTdWJJbmRleCwgbmV4dFN1YlN1YkluZGV4LCBzdGVwKTogeyBzdWJJbmRleDogbnVtYmVyLCBzdWJTdWJJbmRleD86IG51bWJlcn0ge1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgY29uc3Qgc3ViU3ViSXRlbXMgPSB0aGlzLmdldFN1Ykl0ZW1TdWJpdGVtcyhzdWJJdGVtc1tuZXh0U3ViSW5kZXhdKTtcblxuICAgIGxldCBjaGVja05leHRTdWJJdGVtID0gdHJ1ZTtcbiAgICBpZiAoc3ViU3ViSXRlbXMgJiYgc3ViU3ViSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKG5leHRTdWJTdWJJbmRleCArIHN0ZXAgPj0gMCAmJiBuZXh0U3ViU3ViSW5kZXggKyBzdGVwIDwgc3ViU3ViSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIG5leHRTdWJTdWJJbmRleCArPSBzdGVwO1xuICAgICAgICBjaGVja05leHRTdWJJdGVtID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrTmV4dFN1Ykl0ZW0pIHtcbiAgICAgIG5leHRTdWJJbmRleCA9IChuZXh0U3ViSW5kZXggKyBzdGVwICsgc3ViSXRlbXMubGVuZ3RoKSAlIHN1Ykl0ZW1zLmxlbmd0aDtcbiAgICAgIGNvbnN0IG5leHRTdWJJdGVtSXRlbXMgPSB0aGlzLmdldFN1Ykl0ZW1TdWJpdGVtcyhzdWJJdGVtc1tuZXh0U3ViSW5kZXhdKTtcbiAgICAgIGlmIChuZXh0U3ViSXRlbUl0ZW1zICYmIG5leHRTdWJJdGVtSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICBuZXh0U3ViU3ViSW5kZXggPSAoKHN0ZXAgPiAwID8gLTEgOiAwKSArIHN0ZXAgKyBuZXh0U3ViSXRlbUl0ZW1zLmxlbmd0aCkgJSBuZXh0U3ViSXRlbUl0ZW1zLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRTdWJTdWJJbmRleCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtzdWJJbmRleDogbmV4dFN1YkluZGV4LCBzdWJTdWJJbmRleDogbmV4dFN1YlN1YkluZGV4fTtcbiAgfVxuXG4gIGdldElkUHJlZml4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWRQcmVmaXggPyB0aGlzLmlkUHJlZml4IDogdGhpcy5pZCArICdtZW51YmFyLWl0ZW0nO1xuICB9XG5cbiAgZ2V0TGFiZWxSZWYoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxDb21wb25lbnQgPyB0aGlzLmxhYmVsQ29tcG9uZW50LmdldENvbnRlbnQoKSA6IHRoaXMubGFiZWxSZWY7XG4gIH1cblxuICBnZXRMYWJlbENvbnRlbnQoKTogc3RyaW5nIHtcbiAgICBsZXQgY29udGVudDogc3RyaW5nO1xuICAgIGlmICh0aGlzLmxhYmVsRGF0YSkge1xuICAgICAgY29udGVudCA9IHRoaXMubGFiZWxEYXRhLmh0bWwgPyB0aGlzLmxhYmVsRGF0YS5odG1sIDogYDxwPiR7IFN0cmluZ1V0aWxzLmVzY2FwZUh0bWwodGhpcy5sYWJlbERhdGEudGV4dCkgfTwvcD5gO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sYWJlbFRleHQpIHtcbiAgICAgIGNvbnRlbnQgPSBgPHA+JHsgU3RyaW5nVXRpbHMuZXNjYXBlSHRtbCh0aGlzLmxhYmVsVGV4dCkgfTwvcD5gO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGdldEl0ZW1JZChpdGVtLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBsZXQgaWQ6IHN0cmluZztcbiAgICBpZiAoaXRlbSkge1xuICAgICAgaWYgKGl0ZW0uaWQpIHtcbiAgICAgICAgaWQgPSBpdGVtLmlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWQgPSBgJHt0aGlzLmdldElkUHJlZml4KCl9LSR7KytpbmRleH1gO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICBnZXRQb3B1cFN0eWxlKGl0ZW1JbmRleDogbnVtYmVyKTogb2JqZWN0IHtcbiAgICBsZXQgc3R5bGUgPSB7fTtcbiAgICBpZiAodGhpcy5tZW51RGF0YSAmJiBpdGVtSW5kZXggPCB0aGlzLm1lbnVEYXRhLmxlbmd0aCkge1xuICAgICAgY29uc3QgbWVudUl0ZW0gPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ubWVudUl0ZW07XG4gICAgICBjb25zdCByZWN0ID0gbWVudUl0ZW0ubGluay5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5vcGVuKSB7XG4gICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgIHRvcDogKHJlY3QuaGVpZ2h0IC0gMSkgKyAncHgnLFxuICAgICAgICAgIGxlZnQ6ICcwcHgnLFxuICAgICAgICAgIHpJbmRleDogMTAwLFxuICAgICAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgIHpJbmRleDogMCxcbiAgICAgICAgICBkaXNwbGF5OiAnbm9uZSdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxuICBnZXRTdWJJdGVtSWQoaXRlbSwgaW5kZXg6IG51bWJlciwgcGFyZW50SWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGlkOiBzdHJpbmc7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICAgIGlkID0gaXRlbS5pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlkID0gYHN1Yi0ke3BhcmVudElkfS0keysraW5kZXh9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgZ2V0U3ViU3ViSXRlbUFyaWFDaGVja2VkKHN1YnN1Yml0ZW0pOiBzdHJpbmcge1xuICAgIGxldCBhcmlhQ2hlY2tlZCA9IG51bGw7XG4gICAgaWYgKHN1YnN1Yml0ZW0ucm9sZSA9PT0gJ21lbnVpdGVtY2hlY2tib3gnIHx8IHN1YnN1Yml0ZW0ucm9sZSA9PT0gJ21lbnVpdGVtcmFkaW8nKSB7XG4gICAgICBhcmlhQ2hlY2tlZCA9ICEhc3Vic3ViaXRlbS5jaGVja2VkO1xuICAgIH1cbiAgICByZXR1cm4gYXJpYUNoZWNrZWQ7XG4gIH1cbn1cbiIsIiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldExhYmVsUmVmKClcIj5cbiAgICA8ZGl2IFtpZF09XCJpZCArICctbGFiZWwnXCIgW2NsYXNzXT1cIlsnbWItc20nLCBsYWJlbENvbXBvbmVudCA/IGxhYmVsQ29tcG9uZW50LmNsYXNzZXMgOiAobGFiZWxEYXRhID8gbGFiZWxEYXRhLmNsYXNzZXMgOiBudWxsKV0gfCBtYWtlSHRtbExpc3RcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRMYWJlbFJlZigpXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdldExhYmVsUmVmKCkgJiYgKGxhYmVsRGF0YSB8fCBsYWJlbFRleHQpXCI+XG4gICAgPGRpdiBbaWRdPVwiaWQgKyAnLWxhYmVsJ1wiIFtjbGFzc109XCJbJ21iLXNtJywgbGFiZWxEYXRhID8gbGFiZWxEYXRhLmNsYXNzZXMgOiBudWxsXSB8IG1ha2VIdG1sTGlzdFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgaHRtbDogZ2V0TGFiZWxDb250ZW50KCkgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPHVsICNtZW51YmFyIFtpZF09XCJpZCArICctbWVudWJhcidcIiBjbGFzcz1cImxnOmZsZXggbGc6ZmxleC13cmFwXCIgcm9sZT1cIm1lbnViYXJcIlxuICAgICAgKGZvY3VzaW4pPVwiaGFuZGxlTWVudUZvY3VzSW4oKVwiXG4gICAgICAoZm9jdXNvdXQpPVwiaGFuZGxlTWVudUZvY3VzT3V0KCRldmVudClcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnZm9jdXMnOiBpc0ZvY3VzZWQgfVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCA/IGFyaWFMYWJlbCA6IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJnZXRMYWJlbFJlZigpIHx8IGxhYmVsRGF0YSB8fCBsYWJlbFRleHQgPyBpZCArICctbGFiZWwnIDogbnVsbFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0SXRlbXMoKTsgaW5kZXggYXMgaXRlbUluZGV4XCI+XG4gICAgICA8bGkgY2xhc3M9XCJyZWxhdGl2ZVwiIHJvbGU9XCJub25lXCIgZGVzeU1lbnViYXJpdGVtIChjb250ZW50Q2hhbmdlZCk9XCJjaGVja0NoYW5nZXMoKVwiPlxuICAgICAgICA8YSAqbmdJZj1cIml0ZW0uc3ViXCIgI2xpbmtcbiAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBcbiAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJtZW51RGF0YSAmJiBtZW51RGF0YVtpdGVtSW5kZXhdID8gbWVudURhdGFbaXRlbUluZGV4XS5vcGVuID8gJ3RydWUnIDogJ2ZhbHNlJyA6ICdmYWxzZSdcIlxuICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlTWVudUl0ZW1DbGljaygkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJoYW5kbGVNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgKGRlc3lBdHRyaWJ1dGVDaGFuZ2UpPVwiY2hlY2tDaGFuZ2VzKClcIiBbYXR0cmlidXRlc1RvQ2hlY2tdPVwiJ2Rpc2FibGVkJ1wiXG4gICAgICAgICAgIFtpZF09XCJnZXRJdGVtSWQoaXRlbSwgaXRlbUluZGV4KVwiXG4gICAgICAgICAgIFtjbGFzc109XCJbJ2MtbWVudWJhcl9fYnV0dG9uJywgaXRlbS5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYy1tZW51YmFyX19idXR0b24tLWRpc2FibGVkJzogaXRlbS5kaXNhYmxlZCwgJ2MtbWVudWJhcl9fYnV0dG9uLS1oYXMtc2VsZWN0aW9uJzogaXRlbS5hY3RpdmV9XCIgICAgICAgICAgIFxuICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogKGl0ZW0uYXJpYURpc2FibGVkID8gaXRlbS5hcmlhRGlzYWJsZWQgOiBudWxsKVwiXG4gICAgICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJpdGVtXCJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXRlbS5kaXNhYmxlZCA/IC0xIDogKGl0ZW1JbmRleCA9PT0gY3VycmVudEZvY3VzSXRlbUluZGV4ID8gMCA6IC0xKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5saW5lLWZsZXggc2VsZi1jZW50ZXIgbWF4LXcteHMgYWxpZ24tbWlkZGxlIHRydW5jYXRlXCIgI2l0ZW1Db250ZW50V3JhcHBlcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbSwgaHRtbDogaXRlbS5odG1sLCB0ZXh0OiBpdGVtLnRleHR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJpbmxpbmUtYmxvY2sgLW1yLTIgIGFsaWduLW1pZGRsZSAtbXktcHhcIiB2aWV3Qm94PVwiMCAwIDk2IDk2XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGZvY3VzYWJsZT1cImZhbHNlXCIgd2lkdGg9XCIxLjVlbVwiIGhlaWdodD1cIjEuNWVtXCI+PGc+PHBhdGggZD1cIk00Ni43MSA1OC4wMzdhMS44MjMgMS44MjMgMCAwMDIuNTgxIDBMNjIuMDQ4IDQ1LjI4YTEuODIzIDEuODIzIDAgMDAtMS4yOS0zLjExM0gzNS4yNDNhMS44MjMgMS44MjMgMCAwMC0xLjI5MSAzLjExM3pcIi8+PC9nPjwvc3ZnPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxhICpuZ0lmPVwiaXRlbS5yb3V0ZXJMaW5rICYmICFpdGVtLnN1YlwiICNsaW5rICNpdGVtQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU1lbnVJdGVtQ2xpY2soJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChkZXN5QXR0cmlidXRlQ2hhbmdlKT1cImNoZWNrQ2hhbmdlcygpXCIgW2F0dHJpYnV0ZXNUb0NoZWNrXT1cIidkaXNhYmxlZCdcIlxuICAgICAgICAgICBbaWRdPVwiZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleClcIlxuICAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnJvdXRlckxpbmtcIlxuICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCJpdGVtLnJvdXRlckxpbmtBY3RpdmVDbGFzc2VzID8gaXRlbS5yb3V0ZXJMaW5rQWN0aXZlQ2xhc3NlcyA6IFtdXCJcbiAgICAgICAgICAgW2ZyYWdtZW50XT1cIml0ZW0uZnJhZ21lbnRcIlxuICAgICAgICAgICBbY2xhc3NdPVwiWydjLW1lbnViYXJfX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J2MtbWVudWJhcl9fYnV0dG9uLS1kaXNhYmxlZCc6IGl0ZW0uZGlzYWJsZWQsICdjLW1lbnViYXJfX2J1dHRvbi0taGFzLXNlbGVjdGlvbic6IGl0ZW0uYWN0aXZlfVwiXG4gICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCA/IGl0ZW0uZGlzYWJsZWQgOiAoaXRlbS5hcmlhRGlzYWJsZWQgPyBpdGVtLmFyaWFEaXNhYmxlZCA6IG51bGwpXCJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXRlbS5kaXNhYmxlZCA/IC0xIDogKGl0ZW1JbmRleCA9PT0gY3VycmVudEZvY3VzSXRlbUluZGV4ID8gMCA6IC0xKVwiXG4gICAgICAgICAgIFthdHRyLnRhcmdldF09XCJpdGVtLnRhcmdldCA/IGl0ZW0udGFyZ2V0IDogbnVsbFwiXG4gICAgICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJpdGVtXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBpdGVtLCBodG1sOiBpdGVtLmh0bWwsIHRleHQ6IGl0ZW0udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YSAqbmdJZj1cIiFpdGVtLnJvdXRlckxpbmsgJiYgaXRlbS5ocmVmICYmICFpdGVtLnN1YlwiICNsaW5rICNpdGVtQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU1lbnVJdGVtQ2xpY2soJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChkZXN5QXR0cmlidXRlQ2hhbmdlKT1cImNoZWNrQ2hhbmdlcygpXCIgW2F0dHJpYnV0ZXNUb0NoZWNrXT1cIidkaXNhYmxlZCdcIlxuICAgICAgICAgICBbaWRdPVwiZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleClcIlxuICAgICAgICAgICBbaHJlZl09XCJpdGVtLmhyZWYgfCBleHRlcm5hbEhyZWZcIlxuICAgICAgICAgICBbY2xhc3NdPVwiWydjLW1lbnViYXJfX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J2MtbWVudWJhcl9fYnV0dG9uLS1kaXNhYmxlZCc6IGl0ZW0uZGlzYWJsZWQsICdjLW1lbnViYXJfX2J1dHRvbi0taGFzLXNlbGVjdGlvbic6IGl0ZW0uYWN0aXZlfVwiXG4gICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCA/IGl0ZW0uZGlzYWJsZWQgOiAoaXRlbS5hcmlhRGlzYWJsZWQgPyBpdGVtLmFyaWFEaXNhYmxlZCA6IG51bGwpXCJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXRlbS5kaXNhYmxlZCA/IC0xIDogKGl0ZW1JbmRleCA9PT0gY3VycmVudEZvY3VzSXRlbUluZGV4ID8gMCA6IC0xKVwiXG4gICAgICAgICAgIFthdHRyLnRhcmdldF09XCJpdGVtLnRhcmdldCA/IGl0ZW0udGFyZ2V0IDogbnVsbFwiXG4gICAgICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJpdGVtXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBpdGVtLCBodG1sOiBpdGVtLmh0bWwsIHRleHQ6IGl0ZW0udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9hPlxuXG4gICAgICAgIDx1bCAqbmdJZj1cIml0ZW0uc3ViICYmIGdldEl0ZW1TdWJpdGVtcyhpdGVtKVwiICNwb3B1cE1lbnUgcm9sZT1cIm1lbnVcIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldFBvcHVwU3R5bGUoaXRlbUluZGV4KVwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiWydjLW1lbnViYXJfX3Rvb2x0aXAgdy1tYXggbWF4LXctNjQgaGlkZGVuIGJvcmRlciBib3JkZXItbmV1dHJhbC1iYXNlIHNoYWRvdy1tZCBiZy13aGl0ZSB0ZXh0LXNtJywgaXRlbS5zdWIuY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLmFyaWFMYWJlbCA/IGl0ZW0uYXJpYUxhYmVsIDogKGl0ZW0uc3ViLmFyaWFMYWJlbCA/IGl0ZW0uc3ViLmFyaWFMYWJlbCA6IG51bGwpXCJcbiAgICAgICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJpdGVtLnN1YlwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiEhKG1lbnVEYXRhICYmIG1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbilcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJJdGVtIG9mIGdldEl0ZW1TdWJpdGVtcyhpdGVtKTsgaW5kZXggYXMgc3ViSXRlbUluZGV4XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzdWJJdGVtLnJvbGVcIj5cbiAgICAgICAgICAgICAgPGxpICNwb3B1cE1lbnVJdGVtICpuZ1N3aXRjaENhc2U9XCInbm9uZSdcIiByb2xlPVwibm9uZVwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFN1Ykl0ZW1JZChzdWJJdGVtLCBzdWJJdGVtSW5kZXgsIGdldEl0ZW1JZChpdGVtLCBpdGVtSW5kZXgpKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlUG9wdXBNZW51SXRlbUNsaWNrKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBzdWJJdGVtLCBodG1sOiBzdWJJdGVtLmh0bWwsIHRleHQ6IHN1Ykl0ZW0udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPGxpICpuZ1N3aXRjaENhc2U9XCInZ3JvdXAnXCIgcm9sZT1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICA8dWwgcm9sZT1cImdyb3VwXCIgW2lkXT1cImdldFN1Ykl0ZW1JZChzdWJJdGVtLCBzdWJJdGVtSW5kZXgsIGdldEl0ZW1JZChpdGVtLCBpdGVtSW5kZXgpKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic3ViSXRlbS5hcmlhTGFiZWwgPyBzdWJJdGVtLmFyaWFMYWJlbCA6IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1YnN1Yml0ZW0gb2YgZ2V0U3ViSXRlbVN1Yml0ZW1zKHN1Ykl0ZW0pOyBpbmRleCBhcyBzdWJzdWJJbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3Vic3ViaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsaSAjcG9wdXBNZW51SXRlbSBbYXR0ci5yb2xlXT1cInN1YnN1Yml0ZW0ucm9sZSA/IHN1YnN1Yml0ZW0ucm9sZSA6IG51bGxcIiAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRTdWJJdGVtSWQoc3Vic3ViaXRlbSwgc3Vic3ViSW5kZXgsIGdldFN1Ykl0ZW1JZChzdWJJdGVtLCBzdWJJdGVtSW5kZXgsIGdldEl0ZW1JZChpdGVtLCBpdGVtSW5kZXgpKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlUG9wdXBNZW51SXRlbUNsaWNrKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJzdWJJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YnN1YkluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YnN1YkluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJnZXRTdWJTdWJJdGVtQXJpYUNoZWNrZWQoc3Vic3ViaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHByLWJhc2UgcGwtbGcgcHktc20gY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctcHJpbWFyeS1iYXNlIGhvdmVyOnRleHQtd2hpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogc3Vic3ViaXRlbSwgaHRtbDogc3Vic3ViaXRlbS5odG1sLCB0ZXh0OiBzdWJzdWJpdGVtLnRleHR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgI3BvcHVwTWVudUl0ZW0gKm5nU3dpdGNoQ2FzZT1cIidtZW51aXRlbSdcIiByb2xlPVwibWVudWl0ZW1cIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVQb3B1cE1lbnVJdGVtQ2xpY2soaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFN1Ykl0ZW1JZChzdWJJdGVtLCBzdWJJdGVtSW5kZXgsIGdldEl0ZW1JZChpdGVtLCBpdGVtSW5kZXgpKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHByLWJhc2UgcGwtbGcgcHktc20gY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctcHJpbWFyeS1iYXNlIGhvdmVyOnRleHQtd2hpdGUgZm9jdXM6YmctcHJpbWFyeS1iYXNlIGZvY3VzOnRleHQtd2hpdGUgZm9jdXM6b3V0bGluZS1ub25lXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBzdWJJdGVtLCBodG1sOiBzdWJJdGVtLmh0bWwsIHRleHQ6IHN1Ykl0ZW0udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPGxpICNwb3B1cE1lbnVJdGVtICpuZ1N3aXRjaENhc2U9XCInbWVudWl0ZW1jaGVja2JveCdcIiByb2xlPVwibWVudWl0ZW1jaGVja2JveFwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCIhIXN1Ykl0ZW0uY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHByLWJhc2UgcGwtbGcgcHktc20gY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctcHJpbWFyeS1iYXNlIGhvdmVyOnRleHQtd2hpdGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IHN1Ykl0ZW0sIGh0bWw6IHN1Ykl0ZW0uaHRtbCwgdGV4dDogc3ViSXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgI3BvcHVwTWVudUl0ZW0gKm5nU3dpdGNoQ2FzZT1cIidzZXBhcmF0b3InXCIgcm9sZT1cInNlcGFyYXRvclwiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXktc20gYm9yZGVyLWIgYm9yZGVyLW5ldXRyYWwtYmFzZVwiPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3VsPlxuIl19