desy-angular 14.1.0 → 15.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 (342) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/desy-angular.mjs +1842 -1402
  3. package/fesm2022/desy-angular.mjs.map +1 -1
  4. package/index.d.ts +3 -0
  5. package/lib/desy-forms/components/character-count/character-count.component.d.ts +1 -8
  6. package/lib/desy-forms/components/checkboxes/checkboxes-parent.component.d.ts +8 -0
  7. package/lib/desy-forms/components/checkboxes/checkboxes.component.d.ts +26 -0
  8. package/lib/desy-forms/components/date-input/date-input.component.d.ts +13 -7
  9. package/lib/desy-forms/components/datepicker/datepicker.component.d.ts +1 -5
  10. package/lib/desy-forms/components/fieldset/fieldset.component.d.ts +7 -0
  11. package/lib/desy-forms/components/file-upload/file-upload.component.d.ts +5 -0
  12. package/lib/desy-forms/components/input/input.component.d.ts +1 -4
  13. package/lib/desy-forms/components/input-group/input-group.component.d.ts +7 -0
  14. package/lib/desy-forms/components/label/label.component.d.ts +1 -2
  15. package/lib/desy-forms/components/radios/radios-parent.component.d.ts +8 -0
  16. package/lib/desy-forms/components/radios/radios.component.d.ts +26 -0
  17. package/lib/desy-forms/components/search-bar/search-bar.component.d.ts +1 -2
  18. package/lib/desy-forms/components/select/option/option.component.d.ts +1 -2
  19. package/lib/desy-forms/components/textarea/textarea.component.d.ts +1 -3
  20. package/lib/desy-forms/components/tree/interfaces/quit-tree-item-focus-options.d.ts +1 -1
  21. package/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.d.ts +3 -3
  22. package/lib/desy-forms/components/tree/tree-item/tree-item.component.d.ts +11 -7
  23. package/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.d.ts +1 -1
  24. package/lib/desy-forms/components/tree/tree-sub/tree-sub.component.d.ts +2 -2
  25. package/lib/desy-forms/components/tree/tree.component.d.ts +67 -7
  26. package/lib/desy-forms/directives/condition.directive.d.ts +5 -0
  27. package/lib/desy-forms/interfaces/select-item-data.d.ts +1 -1
  28. package/lib/desy-modals/components/dialog/dialog.component.d.ts +1 -1
  29. package/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.d.ts +2 -2
  30. package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.d.ts +7 -0
  31. package/lib/desy-nav/components/header/header-subnav/header-subnav.component.d.ts +1 -1
  32. package/lib/desy-nav/components/header-advanced/header-advanced-dropdown/header-advanced-dropdown.component.d.ts +2 -2
  33. package/lib/desy-nav/components/menubar/menubar.component.d.ts +7 -0
  34. package/lib/desy-nav/interfaces/header-dropdown-data.d.ts +1 -1
  35. package/lib/desy-nav/interfaces/header-mobile-text-data.d.ts +1 -1
  36. package/lib/desy-nav/interfaces/header-subnav-data.d.ts +1 -1
  37. package/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.d.ts +2 -2
  38. package/lib/desy-nav/interfaces/nav-item-event.data.d.ts +1 -1
  39. package/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.d.ts +1 -1
  40. package/lib/desy-tables/components/table-advanced/table-advanced.component.d.ts +56 -1
  41. package/lib/desy-tables/directives/cell.directive.d.ts +3 -0
  42. package/lib/desy-tables/directives/row.directive.d.ts +7 -0
  43. package/lib/desy-tables/interfaces/head-cell-data.d.ts +1 -1
  44. package/lib/desy-views/components/alert/alert.component.d.ts +1 -1
  45. package/lib/shared/components/accessibility/accessibility.component.d.ts +3 -0
  46. package/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.d.ts +8 -0
  47. package/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.d.ts +6 -0
  48. package/lib/shared/components/content-base/content-base.component.d.ts +3 -0
  49. package/lib/shared/components/text-or-html-required/text-or-html-required.component.d.ts +4 -0
  50. package/lib/shared/decorators/desy-content-child.decorator.d.ts +11 -0
  51. package/lib/shared/decorators/desy-on-input-change.decorator.d.ts +4 -0
  52. package/lib/shared/directives/content-change.directive.d.ts +4 -0
  53. package/lib/shared/directives/custom-inner-content.directive.d.ts +6 -0
  54. package/lib/shared/pipes/external-href.pipe.d.ts +4 -0
  55. package/lib/shared/utils/search-utils.d.ts +10 -0
  56. package/lib/shared/utils/string-utils.d.ts +7 -0
  57. package/package.json +9 -11
  58. package/esm2022/desy-angular.mjs +0 -2
  59. package/esm2022/lib/desy-angular.module.mjs +0 -76
  60. package/esm2022/lib/desy-buttons/components/button/button.component.mjs +0 -118
  61. package/esm2022/lib/desy-buttons/components/button-loader/button-loader.component.mjs +0 -66
  62. package/esm2022/lib/desy-buttons/components/dropdown/dropdown.component.mjs +0 -158
  63. package/esm2022/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.mjs +0 -39
  64. package/esm2022/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.mjs +0 -14
  65. package/esm2022/lib/desy-buttons/components/listbox/listbox.component.mjs +0 -335
  66. package/esm2022/lib/desy-buttons/components/pill/pill.component.mjs +0 -83
  67. package/esm2022/lib/desy-buttons/components/toggle/toggle-off-state/toggle-off-state.component.mjs +0 -17
  68. package/esm2022/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.mjs +0 -17
  69. package/esm2022/lib/desy-buttons/components/toggle/toggle.component.mjs +0 -62
  70. package/esm2022/lib/desy-buttons/desy-buttons.module.mjs +0 -81
  71. package/esm2022/lib/desy-buttons/interfaces/listbox-item-data.mjs +0 -2
  72. package/esm2022/lib/desy-buttons/interfaces/listbox-label-data.mjs +0 -2
  73. package/esm2022/lib/desy-commons/components/content/content.component.mjs +0 -14
  74. package/esm2022/lib/desy-commons/components/description/description.component.mjs +0 -19
  75. package/esm2022/lib/desy-commons/components/divider/divider.component.mjs +0 -16
  76. package/esm2022/lib/desy-commons/components/icon/icon.component.mjs +0 -16
  77. package/esm2022/lib/desy-commons/components/title/title.component.mjs +0 -17
  78. package/esm2022/lib/desy-commons/desy-commons.module.mjs +0 -52
  79. package/esm2022/lib/desy-commons/interfaces/content-data.mjs +0 -2
  80. package/esm2022/lib/desy-commons/interfaces/description-data.mjs +0 -2
  81. package/esm2022/lib/desy-commons/interfaces/divider-data.mjs +0 -2
  82. package/esm2022/lib/desy-commons/interfaces/icon-data.mjs +0 -2
  83. package/esm2022/lib/desy-commons/interfaces/index.mjs +0 -6
  84. package/esm2022/lib/desy-commons/interfaces/title-data.mjs +0 -2
  85. package/esm2022/lib/desy-forms/components/character-count/character-count.component.mjs +0 -156
  86. package/esm2022/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.mjs +0 -189
  87. package/esm2022/lib/desy-forms/components/checkboxes/checkboxes-parent.component.mjs +0 -15
  88. package/esm2022/lib/desy-forms/components/checkboxes/checkboxes.component.mjs +0 -269
  89. package/esm2022/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.mjs +0 -55
  90. package/esm2022/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.mjs +0 -19
  91. package/esm2022/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.mjs +0 -42
  92. package/esm2022/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.mjs +0 -55
  93. package/esm2022/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.mjs +0 -51
  94. package/esm2022/lib/desy-forms/components/date-input/date-input.component.mjs +0 -294
  95. package/esm2022/lib/desy-forms/components/datepicker/datepicker.component.mjs +0 -190
  96. package/esm2022/lib/desy-forms/components/datepicker/datepicker.pipe.mjs +0 -34
  97. package/esm2022/lib/desy-forms/components/error-message/error-message.component.mjs +0 -32
  98. package/esm2022/lib/desy-forms/components/fieldset/fieldset.component.mjs +0 -59
  99. package/esm2022/lib/desy-forms/components/fieldset/legend/legend.component.mjs +0 -34
  100. package/esm2022/lib/desy-forms/components/file-upload/file-upload.component.mjs +0 -78
  101. package/esm2022/lib/desy-forms/components/form-field/form-field.component.mjs +0 -120
  102. package/esm2022/lib/desy-forms/components/hint/hint.component.mjs +0 -30
  103. package/esm2022/lib/desy-forms/components/input/input.component.mjs +0 -110
  104. package/esm2022/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.mjs +0 -20
  105. package/esm2022/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.mjs +0 -59
  106. package/esm2022/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.mjs +0 -42
  107. package/esm2022/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.mjs +0 -51
  108. package/esm2022/lib/desy-forms/components/input-group/input-group.component.mjs +0 -229
  109. package/esm2022/lib/desy-forms/components/label/label.component.mjs +0 -39
  110. package/esm2022/lib/desy-forms/components/radios/radio-item/radio-item.component.mjs +0 -136
  111. package/esm2022/lib/desy-forms/components/radios/radios-parent.component.mjs +0 -15
  112. package/esm2022/lib/desy-forms/components/radios/radios.component.mjs +0 -282
  113. package/esm2022/lib/desy-forms/components/search-bar/search-bar.component.mjs +0 -65
  114. package/esm2022/lib/desy-forms/components/select/option/option.component.mjs +0 -22
  115. package/esm2022/lib/desy-forms/components/select/option-group/option-group.component.mjs +0 -18
  116. package/esm2022/lib/desy-forms/components/select/select-item/select-item.component.mjs +0 -14
  117. package/esm2022/lib/desy-forms/components/select/select.component.mjs +0 -94
  118. package/esm2022/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.mjs +0 -12
  119. package/esm2022/lib/desy-forms/components/textarea/textarea.component.mjs +0 -86
  120. package/esm2022/lib/desy-forms/components/tree/interfaces/itree-item.mjs +0 -3
  121. package/esm2022/lib/desy-forms/components/tree/interfaces/quit-tree-item-focus-options.mjs +0 -2
  122. package/esm2022/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.mjs +0 -174
  123. package/esm2022/lib/desy-forms/components/tree/tree-item/tree-item.component.mjs +0 -378
  124. package/esm2022/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.mjs +0 -25
  125. package/esm2022/lib/desy-forms/components/tree/tree-sub/tree-sub.component.mjs +0 -16
  126. package/esm2022/lib/desy-forms/components/tree/tree.component.mjs +0 -359
  127. package/esm2022/lib/desy-forms/desy-forms.module.mjs +0 -223
  128. package/esm2022/lib/desy-forms/directives/condition.directive.mjs +0 -34
  129. package/esm2022/lib/desy-forms/interfaces/error-message-data.mjs +0 -2
  130. package/esm2022/lib/desy-forms/interfaces/fieldset-data.mjs +0 -2
  131. package/esm2022/lib/desy-forms/interfaces/hint-data.mjs +0 -2
  132. package/esm2022/lib/desy-forms/interfaces/index.mjs +0 -13
  133. package/esm2022/lib/desy-forms/interfaces/item-checkbox-data.mjs +0 -2
  134. package/esm2022/lib/desy-forms/interfaces/item-date-input-data.mjs +0 -2
  135. package/esm2022/lib/desy-forms/interfaces/item-divider-date-input-data.mjs +0 -2
  136. package/esm2022/lib/desy-forms/interfaces/item-divider-input-group-data.mjs +0 -2
  137. package/esm2022/lib/desy-forms/interfaces/item-input-group-data.mjs +0 -2
  138. package/esm2022/lib/desy-forms/interfaces/item-radio-data.mjs +0 -2
  139. package/esm2022/lib/desy-forms/interfaces/item-radio-with-template-data.mjs +0 -2
  140. package/esm2022/lib/desy-forms/interfaces/label-data.mjs +0 -2
  141. package/esm2022/lib/desy-forms/interfaces/legend-data.mjs +0 -2
  142. package/esm2022/lib/desy-forms/interfaces/select-item-data.mjs +0 -2
  143. package/esm2022/lib/desy-modals/components/dialog/dialog.component.mjs +0 -151
  144. package/esm2022/lib/desy-modals/components/modal/modal-button-loader-primary/modal-button-loader-primary.component.mjs +0 -25
  145. package/esm2022/lib/desy-modals/components/modal/modal-button-loader-secondary/modal-button-loader-secondary.component.mjs +0 -23
  146. package/esm2022/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.mjs +0 -23
  147. package/esm2022/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.mjs +0 -23
  148. package/esm2022/lib/desy-modals/components/modal/modal.component.mjs +0 -183
  149. package/esm2022/lib/desy-modals/desy-modals.module.mjs +0 -61
  150. package/esm2022/lib/desy-modals/interfaces/dialog-options.mjs +0 -2
  151. package/esm2022/lib/desy-modals/interfaces/index.mjs +0 -7
  152. package/esm2022/lib/desy-modals/interfaces/modal-button-data.mjs +0 -2
  153. package/esm2022/lib/desy-modals/interfaces/modal-data.mjs +0 -2
  154. package/esm2022/lib/desy-modals/interfaces/modal-icon-data.mjs +0 -2
  155. package/esm2022/lib/desy-modals/interfaces/modal-options.mjs +0 -2
  156. package/esm2022/lib/desy-modals/interfaces/open-dialog-result.mjs +0 -2
  157. package/esm2022/lib/desy-modals/services/dialog.service.mjs +0 -114
  158. package/esm2022/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.mjs +0 -16
  159. package/esm2022/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.mjs +0 -53
  160. package/esm2022/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.mjs +0 -19
  161. package/esm2022/lib/desy-nav/components/error-summary/error-summary.component.mjs +0 -67
  162. package/esm2022/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.mjs +0 -25
  163. package/esm2022/lib/desy-nav/components/footer/footer-meta/footer-meta.component.mjs +0 -31
  164. package/esm2022/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.mjs +0 -25
  165. package/esm2022/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.mjs +0 -21
  166. package/esm2022/lib/desy-nav/components/footer/footer.component.mjs +0 -89
  167. package/esm2022/lib/desy-nav/components/header/header-custom-navigation/header-custom-navigation.component.mjs +0 -15
  168. package/esm2022/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.mjs +0 -46
  169. package/esm2022/lib/desy-nav/components/header/header-mobileText/header-mobile-text.component.mjs +0 -336
  170. package/esm2022/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.mjs +0 -31
  171. package/esm2022/lib/desy-nav/components/header/header-navigation/header-navigation.component.mjs +0 -36
  172. package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.mjs +0 -20
  173. package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.mjs +0 -15
  174. package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.mjs +0 -93
  175. package/esm2022/lib/desy-nav/components/header/header-subnav/header-subnav.component.mjs +0 -41
  176. package/esm2022/lib/desy-nav/components/header/header.component.mjs +0 -119
  177. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-custom-navigation/header-custom-navigation.component.mjs +0 -14
  178. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-dropdown/header-advanced-dropdown.component.mjs +0 -38
  179. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-logo/header-advanced-logo.component.mjs +0 -37
  180. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.mjs +0 -42
  181. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-subtitle/header-advanced-subtitle.component.mjs +0 -14
  182. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.mjs +0 -42
  183. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-title/header-advanced-title.component.mjs +0 -19
  184. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-title-container/header-advanced-title-container.component.mjs +0 -38
  185. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced.component.mjs +0 -54
  186. package/esm2022/lib/desy-nav/components/header-mini/header-mini.component.mjs +0 -32
  187. package/esm2022/lib/desy-nav/components/links-list/links-list-icon-right/links-list-icon-right.component.mjs +0 -16
  188. package/esm2022/lib/desy-nav/components/links-list/links-list-item/links-list-item.component.mjs +0 -46
  189. package/esm2022/lib/desy-nav/components/links-list/links-list-item-sub/links-list-item-sub.component.mjs +0 -14
  190. package/esm2022/lib/desy-nav/components/links-list/links-list.component.mjs +0 -44
  191. package/esm2022/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.mjs +0 -42
  192. package/esm2022/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.mjs +0 -76
  193. package/esm2022/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.mjs +0 -55
  194. package/esm2022/lib/desy-nav/components/menu-navigation/components/menu-navigation-subitem/menu-navigation-subitem.component.mjs +0 -49
  195. package/esm2022/lib/desy-nav/components/menu-navigation/menu-navigation.component.mjs +0 -854
  196. package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.mjs +0 -44
  197. package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.mjs +0 -18
  198. package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.mjs +0 -34
  199. package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical.component.mjs +0 -102
  200. package/esm2022/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.mjs +0 -51
  201. package/esm2022/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.mjs +0 -14
  202. package/esm2022/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.mjs +0 -36
  203. package/esm2022/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.mjs +0 -27
  204. package/esm2022/lib/desy-nav/components/menubar/directives/menubaritem.directive.mjs +0 -45
  205. package/esm2022/lib/desy-nav/components/menubar/menubar.component.mjs +0 -962
  206. package/esm2022/lib/desy-nav/components/nav/nav-item/nav-item.component.mjs +0 -43
  207. package/esm2022/lib/desy-nav/components/nav/nav.component.mjs +0 -115
  208. package/esm2022/lib/desy-nav/components/notification/notification-item/notification-item.component.mjs +0 -25
  209. package/esm2022/lib/desy-nav/components/notification/notification.component.mjs +0 -135
  210. package/esm2022/lib/desy-nav/components/skip-link/skip-link.component.mjs +0 -62
  211. package/esm2022/lib/desy-nav/desy-nav.module.mjs +0 -301
  212. package/esm2022/lib/desy-nav/directives/dynamic-heading.directive.mjs +0 -40
  213. package/esm2022/lib/desy-nav/interfaces/breadcrumbs.data.mjs +0 -2
  214. package/esm2022/lib/desy-nav/interfaces/error-summary-data.mjs +0 -2
  215. package/esm2022/lib/desy-nav/interfaces/footer-data.mjs +0 -2
  216. package/esm2022/lib/desy-nav/interfaces/footer-logo.mjs +0 -10
  217. package/esm2022/lib/desy-nav/interfaces/header-advanced-logo.mjs +0 -7
  218. package/esm2022/lib/desy-nav/interfaces/header-dropdown-data.mjs +0 -2
  219. package/esm2022/lib/desy-nav/interfaces/header-mobile-text-data.mjs +0 -2
  220. package/esm2022/lib/desy-nav/interfaces/header-navigation-data.mjs +0 -2
  221. package/esm2022/lib/desy-nav/interfaces/header-navigation-item-data.mjs +0 -2
  222. package/esm2022/lib/desy-nav/interfaces/header-offcanvas-data.mjs +0 -2
  223. package/esm2022/lib/desy-nav/interfaces/header-skiplink-data.mjs +0 -2
  224. package/esm2022/lib/desy-nav/interfaces/header-subnav-data.mjs +0 -2
  225. package/esm2022/lib/desy-nav/interfaces/index.mjs +0 -21
  226. package/esm2022/lib/desy-nav/interfaces/menu-horizontal-item-data.mjs +0 -2
  227. package/esm2022/lib/desy-nav/interfaces/menu-horizontal-item-event-data.mjs +0 -2
  228. package/esm2022/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.mjs +0 -2
  229. package/esm2022/lib/desy-nav/interfaces/menu-navigation-item-sub-item.mjs +0 -2
  230. package/esm2022/lib/desy-nav/interfaces/menu-navigation.mjs +0 -2
  231. package/esm2022/lib/desy-nav/interfaces/menu-vertical-items-data.mjs +0 -2
  232. package/esm2022/lib/desy-nav/interfaces/menu-vertical-sub-data.mjs +0 -2
  233. package/esm2022/lib/desy-nav/interfaces/menu-vertical-sub-items-data.mjs +0 -2
  234. package/esm2022/lib/desy-nav/interfaces/menubar-item-sub-item-sub-item.mjs +0 -2
  235. package/esm2022/lib/desy-nav/interfaces/menubar-item-sub-item.mjs +0 -2
  236. package/esm2022/lib/desy-nav/interfaces/menubar-item-sub.mjs +0 -2
  237. package/esm2022/lib/desy-nav/interfaces/menubar-item.mjs +0 -2
  238. package/esm2022/lib/desy-nav/interfaces/nav-item-event.data.mjs +0 -2
  239. package/esm2022/lib/desy-nav/interfaces/nav-item.data.mjs +0 -2
  240. package/esm2022/lib/desy-nav/interfaces/notification-items-data.mjs +0 -2
  241. package/esm2022/lib/desy-nav/interfaces/notification-options.mjs +0 -2
  242. package/esm2022/lib/desy-pagination/components/pagination/pagination.component.mjs +0 -237
  243. package/esm2022/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.mjs +0 -19
  244. package/esm2022/lib/desy-pagination/components/pagination-listbox-label/pagination-listbox-label.component.mjs +0 -17
  245. package/esm2022/lib/desy-pagination/desy-pagination.module.mjs +0 -54
  246. package/esm2022/lib/desy-pagination/interfaces/pagination-item.data.mjs +0 -2
  247. package/esm2022/lib/desy-tables/components/table/components/table-caption.component.mjs +0 -17
  248. package/esm2022/lib/desy-tables/components/table/components/table-cell.component.mjs +0 -23
  249. package/esm2022/lib/desy-tables/components/table/components/table-footer.component.mjs +0 -18
  250. package/esm2022/lib/desy-tables/components/table/components/table-header.component.mjs +0 -18
  251. package/esm2022/lib/desy-tables/components/table/components/table-row.component.mjs +0 -18
  252. package/esm2022/lib/desy-tables/components/table/table.component.mjs +0 -120
  253. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-footer-cell.component.mjs +0 -23
  254. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-footer.component.mjs +0 -27
  255. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.mjs +0 -56
  256. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.mjs +0 -18
  257. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.mjs +0 -23
  258. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.mjs +0 -27
  259. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.mjs +0 -28
  260. package/esm2022/lib/desy-tables/components/table-advanced/table-advanced.component.mjs +0 -494
  261. package/esm2022/lib/desy-tables/desy-tables.module.mjs +0 -117
  262. package/esm2022/lib/desy-tables/directives/cell.directive.mjs +0 -25
  263. package/esm2022/lib/desy-tables/directives/focus-clicked-cell.directive.mjs +0 -86
  264. package/esm2022/lib/desy-tables/directives/row.directive.mjs +0 -22
  265. package/esm2022/lib/desy-tables/interfaces/cell-data.mjs +0 -2
  266. package/esm2022/lib/desy-tables/interfaces/head-cell-data.mjs +0 -7
  267. package/esm2022/lib/desy-tables/interfaces/index.mjs +0 -5
  268. package/esm2022/lib/desy-tables/interfaces/recalculate-table-params.mjs +0 -2
  269. package/esm2022/lib/desy-tables/interfaces/row-data.mjs +0 -2
  270. package/esm2022/lib/desy-tables/interfaces/wrapper-data.mjs +0 -2
  271. package/esm2022/lib/desy-views/components/accordion/accordion-header/accordion-header.component.mjs +0 -17
  272. package/esm2022/lib/desy-views/components/accordion/accordion-item/accordion-item.component.mjs +0 -61
  273. package/esm2022/lib/desy-views/components/accordion/accordion.component.mjs +0 -447
  274. package/esm2022/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.mjs +0 -41
  275. package/esm2022/lib/desy-views/components/accordion-history/accordion-history.component.mjs +0 -20
  276. package/esm2022/lib/desy-views/components/accordion-history/accordion-item-hide-button/accordion-item-hide-button.component.mjs +0 -17
  277. package/esm2022/lib/desy-views/components/accordion-history/accordion-item-show-button/accordion-item-show-button.component.mjs +0 -17
  278. package/esm2022/lib/desy-views/components/alert/alert.component.mjs +0 -82
  279. package/esm2022/lib/desy-views/components/card/card-sectors/card-left.component.mjs +0 -21
  280. package/esm2022/lib/desy-views/components/card/card-sectors/card-right.component.mjs +0 -21
  281. package/esm2022/lib/desy-views/components/card/card-sectors/card-sub.component.mjs +0 -21
  282. package/esm2022/lib/desy-views/components/card/card-sectors/card-super.component.mjs +0 -21
  283. package/esm2022/lib/desy-views/components/card/card.component.mjs +0 -48
  284. package/esm2022/lib/desy-views/components/collapsible/collapsible.component.mjs +0 -66
  285. package/esm2022/lib/desy-views/components/description-list/definition/definition.component.mjs +0 -19
  286. package/esm2022/lib/desy-views/components/description-list/description-item/description-item.component.mjs +0 -36
  287. package/esm2022/lib/desy-views/components/description-list/description-list.component.mjs +0 -29
  288. package/esm2022/lib/desy-views/components/description-list/term/term.component.mjs +0 -19
  289. package/esm2022/lib/desy-views/components/details/details.component.mjs +0 -43
  290. package/esm2022/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.mjs +0 -17
  291. package/esm2022/lib/desy-views/components/item/item-content-right/item-content-right.component.mjs +0 -15
  292. package/esm2022/lib/desy-views/components/item/item-item/item-item.component.mjs +0 -15
  293. package/esm2022/lib/desy-views/components/item/item.component.mjs +0 -122
  294. package/esm2022/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.mjs +0 -12
  295. package/esm2022/lib/desy-views/components/media-object/media-object.component.mjs +0 -369
  296. package/esm2022/lib/desy-views/components/status/status.component.mjs +0 -366
  297. package/esm2022/lib/desy-views/components/status-item/status-item.component.mjs +0 -401
  298. package/esm2022/lib/desy-views/components/tabs/panel/panel.component.mjs +0 -19
  299. package/esm2022/lib/desy-views/components/tabs/tab-item/tab-item.component.mjs +0 -41
  300. package/esm2022/lib/desy-views/components/tabs/tabs.component.mjs +0 -445
  301. package/esm2022/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.mjs +0 -12
  302. package/esm2022/lib/desy-views/components/tooltip/tooltip.component.mjs +0 -444
  303. package/esm2022/lib/desy-views/desy-views.module.mjs +0 -195
  304. package/esm2022/lib/desy-views/interfaces/accordion-header.data.mjs +0 -2
  305. package/esm2022/lib/desy-views/interfaces/accordion-item.data.mjs +0 -2
  306. package/esm2022/lib/desy-views/interfaces/alert-options.mjs +0 -2
  307. package/esm2022/lib/desy-views/interfaces/description-item.data.mjs +0 -2
  308. package/esm2022/lib/desy-views/interfaces/index.mjs +0 -11
  309. package/esm2022/lib/desy-views/interfaces/open-alert-result.mjs +0 -2
  310. package/esm2022/lib/desy-views/interfaces/status-data.mjs +0 -2
  311. package/esm2022/lib/desy-views/interfaces/status-icon-data.mjs +0 -2
  312. package/esm2022/lib/desy-views/interfaces/status-item-title-data.mjs +0 -2
  313. package/esm2022/lib/desy-views/interfaces/tabs-items-data.mjs +0 -2
  314. package/esm2022/lib/desy-views/interfaces/tabs-panel-data.mjs +0 -2
  315. package/esm2022/lib/desy-views/interfaces/term-definition.data.mjs +0 -2
  316. package/esm2022/lib/desy-views/services/alert.service.mjs +0 -88
  317. package/esm2022/lib/shared/components/accessibility/accessibility-attributes.mjs +0 -78
  318. package/esm2022/lib/shared/components/accessibility/accessibility.component.mjs +0 -164
  319. package/esm2022/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.mjs +0 -168
  320. package/esm2022/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.mjs +0 -165
  321. package/esm2022/lib/shared/components/content-base/content-base.component.mjs +0 -21
  322. package/esm2022/lib/shared/components/index.mjs +0 -7
  323. package/esm2022/lib/shared/components/spinner/spinner.component.mjs +0 -329
  324. package/esm2022/lib/shared/components/text-or-html-required/text-or-html-required.component.mjs +0 -18
  325. package/esm2022/lib/shared/decorators/desy-content-child.decorator.mjs +0 -30
  326. package/esm2022/lib/shared/decorators/desy-on-input-change.decorator.mjs +0 -15
  327. package/esm2022/lib/shared/directives/accessibility-directive.mjs +0 -52
  328. package/esm2022/lib/shared/directives/attribute-change.directive.mjs +0 -50
  329. package/esm2022/lib/shared/directives/click-outside.directive.mjs +0 -40
  330. package/esm2022/lib/shared/directives/content-change.directive.mjs +0 -41
  331. package/esm2022/lib/shared/directives/custom-inner-content.directive.mjs +0 -61
  332. package/esm2022/lib/shared/directives/inner-content.directive.mjs +0 -37
  333. package/esm2022/lib/shared/interfaces/accessibility-data.mjs +0 -2
  334. package/esm2022/lib/shared/pipes/external-href.pipe.mjs +0 -28
  335. package/esm2022/lib/shared/pipes/inner-html.pipe.mjs +0 -21
  336. package/esm2022/lib/shared/pipes/make-html-list.pipe.mjs +0 -20
  337. package/esm2022/lib/shared/shared.module.mjs +0 -88
  338. package/esm2022/lib/shared/sharedExternal.module.mjs +0 -24
  339. package/esm2022/lib/shared/utils/focus-utils.mjs +0 -51
  340. package/esm2022/lib/shared/utils/search-utils.mjs +0 -70
  341. package/esm2022/lib/shared/utils/string-utils.mjs +0 -11
  342. package/esm2022/public-api.mjs +0 -225
@@ -1,854 +0,0 @@
1
- import { ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, Input, Output, QueryList, ViewChild, ViewChildren } from '@angular/core';
2
- import { AccessibilityComponent } from '../../../shared/components';
3
- import { MenubaritemDirective } from '../menubar/directives/menubaritem.directive';
4
- import { MenuNavigationItemComponent } from './components/menu-navigation-item/menu-navigation-item.component';
5
- import { MenuNavigationSubitemComponent } from './components/menu-navigation-subitem/menu-navigation-subitem.component';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common";
8
- import * as i2 from "@angular/router";
9
- import * as i3 from "../../../shared/directives/attribute-change.directive";
10
- import * as i4 from "../../../shared/directives/custom-inner-content.directive";
11
- import * as i5 from "../../../shared/directives/accessibility-directive";
12
- import * as i6 from "../menubar/directives/menubaritem.directive";
13
- import * as i7 from "../../../shared/pipes/make-html-list.pipe";
14
- export class MenuNavigationComponent extends AccessibilityComponent {
15
- set items(items) {
16
- this._items = items;
17
- this.activeItemIfSubItemIsActive(items);
18
- }
19
- get items() {
20
- return this._items;
21
- }
22
- constructor(changeDetectorRef) {
23
- super();
24
- this.changeDetectorRef = changeDetectorRef;
25
- this.itemsChange = new EventEmitter();
26
- this.activeItemChange = new EventEmitter();
27
- this.activeSubItemChange = new EventEmitter();
28
- this.cfg = true;
29
- this.role = null;
30
- this.ariaLabel = null;
31
- this.ariaDescribedBy = null;
32
- this.ariaLabelledBy = null;
33
- this.ariaHidden = null;
34
- this.ariaDisabled = null;
35
- this.ariaControls = null;
36
- this.ariaCurrent = null;
37
- this.ariaLive = null;
38
- this.ariaExpanded = null;
39
- this.ariaErrorMessage = null;
40
- this.ariaHasPopup = null;
41
- this.ariaModal = null;
42
- this.ariaChecked = null;
43
- this.ariaPressed = null;
44
- this.ariaReadonly = null;
45
- this.ariaRequired = null;
46
- this.ariaSelected = null;
47
- this.ariaValuemin = null;
48
- this.ariaValuemax = null;
49
- this.ariaValuenow = null;
50
- this.ariaValuetext = null;
51
- this.ariaOrientation = null;
52
- this.ariaLevel = null;
53
- this.ariaMultiselectable = null;
54
- this.ariaPlaceholder = null;
55
- this.ariaPosinset = null;
56
- this.ariaSetsize = null;
57
- this.ariaSort = null;
58
- this.ariaBusy = null;
59
- this.ariaDropeffect = null;
60
- this.ariaGrabbed = null;
61
- this.ariaActivedescendant = null;
62
- this.ariaAtomic = null;
63
- this.ariaAutocomplete = null;
64
- this.ariaBraillelabel = null;
65
- this.ariaBrailleroledescription = null;
66
- this.ariaColcount = null;
67
- this.ariaColindex = null;
68
- this.ariaColindextext = null;
69
- this.ariaColspan = null;
70
- this.ariaDescription = null;
71
- this.ariaDetails = null;
72
- this.ariaFlowto = null;
73
- this.ariaInvalid = null;
74
- this.ariaKeyshortcuts = null;
75
- this.ariaOwns = null;
76
- this.ariaRelevant = null;
77
- this.ariaRoledescription = null;
78
- this.ariaRowcount = null;
79
- this.ariaRowindex = null;
80
- this.ariaRowindextext = null;
81
- this.ariaRowspan = null;
82
- this.tabindex = null;
83
- this.title = null;
84
- this.alt = null;
85
- this.lang = null;
86
- this.accesskey = null;
87
- this.autocomplete = null;
88
- this.autofocus = null;
89
- this.contenteditable = null;
90
- this.dir = null;
91
- this.draggable = null;
92
- this.enterkeyhint = null;
93
- this.hidden = null;
94
- this.inputmode = null;
95
- this.spellcheck = null;
96
- this.translate = null;
97
- this.ariaMultiline = null;
98
- this.for = null;
99
- this.form = null;
100
- this.headers = null;
101
- this.placeholder = null;
102
- this.readonly = null;
103
- this.required = null;
104
- this.viewInit = false;
105
- this.currentFocusItemIndex = 0;
106
- }
107
- ngOnChanges(changes) {
108
- if (this.viewInit) {
109
- this.checkChanges();
110
- }
111
- }
112
- ngAfterViewInit() {
113
- this.viewInit = true;
114
- this.checkChanges();
115
- this.itemComponentList.changes.subscribe((items) => this.activeItemIfSubItemIsActive(items.toArray()));
116
- }
117
- checkChanges() {
118
- if (!this.menuItems) {
119
- return;
120
- }
121
- this.menuData = [];
122
- this.getItems().forEach((_, index) => {
123
- const itemData = {
124
- open: false,
125
- currentFocusSubItemIndex: 0,
126
- currentFocusSubSubItemIndex: 0,
127
- menuItem: this.menuItems.toArray()[index]
128
- };
129
- this.menuData.push(itemData);
130
- });
131
- if (this.viewInit) {
132
- this.checkRequired();
133
- }
134
- const lastCurrentFocusItemIndex = this.currentFocusItemIndex;
135
- const items = this.getItems();
136
- if (items) {
137
- while (!this.isItemFocusable(this.currentFocusItemIndex % items.length)) {
138
- this.currentFocusItemIndex = (this.currentFocusItemIndex + items.length + 1) % items.length;
139
- if (this.currentFocusItemIndex === lastCurrentFocusItemIndex) {
140
- break;
141
- }
142
- }
143
- }
144
- }
145
- activeItemIfSubItemIsActive(items) {
146
- items.forEach((item) => {
147
- let subItems = this.getItemSubitems(item);
148
- if (subItems instanceof MenuNavigationItemComponent) {
149
- item.active = subItems.sub.items.filter(subItem => subItem.active).length > 0;
150
- }
151
- else if (item?.sub?.items) {
152
- item.active = item.sub.items.filter(subItem => subItem.active).length > 0;
153
- }
154
- });
155
- }
156
- handleMenuFocusIn() {
157
- this.isFocused = true;
158
- this.changeDetectorRef.detectChanges();
159
- }
160
- handleMenuFocusOut(event) {
161
- if (!this.menunavigation.nativeElement.contains(event.relatedTarget)) {
162
- this.closeMenu();
163
- }
164
- this.isFocused = false;
165
- this.changeDetectorRef.detectChanges();
166
- }
167
- handleMenuItemClick(event, itemIndex) {
168
- if (this.hasPopupMenu(itemIndex)) {
169
- event.preventDefault();
170
- const isOpen = this.menuData[itemIndex].open;
171
- this.closeMenu();
172
- if (!isOpen) {
173
- this.openMenu(itemIndex);
174
- }
175
- }
176
- else {
177
- this.activateMenuItem(itemIndex);
178
- }
179
- }
180
- handleMenuItemKeydown(event, itemIndex) {
181
- switch (event.key) {
182
- case 'Enter':
183
- case ' ':
184
- case 'ArrowDown':
185
- if (this.hasPopupMenu(itemIndex)) {
186
- this.openMenu(itemIndex);
187
- setTimeout(() => this.focusFirstSubItem(itemIndex));
188
- event.stopPropagation();
189
- event.preventDefault();
190
- }
191
- break;
192
- case 'Escape':
193
- if (this.hasPopupMenu(itemIndex)) {
194
- this.closeMenu(itemIndex);
195
- }
196
- event.stopPropagation();
197
- event.preventDefault();
198
- break;
199
- case 'ArrowLeft':
200
- this.focusNextAvailableItem(itemIndex, -1);
201
- event.stopPropagation();
202
- event.preventDefault();
203
- break;
204
- case 'ArrowRight':
205
- this.focusNextAvailableItem(itemIndex, +1);
206
- event.stopPropagation();
207
- event.preventDefault();
208
- break;
209
- case 'ArrowUp':
210
- if (this.hasPopupMenu(itemIndex)) {
211
- this.openMenu(itemIndex);
212
- setTimeout(() => this.focusLastSubItem(itemIndex));
213
- }
214
- event.stopPropagation();
215
- event.preventDefault();
216
- break;
217
- case 'Home':
218
- case 'PageUp':
219
- if (this.hasPopupMenu(itemIndex)) {
220
- this.closeMenu();
221
- }
222
- this.focusFirstItem();
223
- event.stopPropagation();
224
- event.preventDefault();
225
- break;
226
- case 'End':
227
- case 'PageDown':
228
- if (this.hasPopupMenu(itemIndex)) {
229
- this.closeMenu();
230
- }
231
- this.focusLastItem();
232
- event.stopPropagation();
233
- event.preventDefault();
234
- break;
235
- default:
236
- if (this.isPrintableChar(event.key)) {
237
- this.focusItemByFirstChar(event.key);
238
- event.stopPropagation();
239
- event.preventDefault();
240
- }
241
- break;
242
- }
243
- }
244
- handleMenuItemMouseOver(itemIndex) {
245
- this.focusItem(itemIndex, true);
246
- }
247
- handlePopupMenuItemClick(itemIndex, subItemIndex, subSubItemIndex) {
248
- this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);
249
- this.focusItem(itemIndex);
250
- this.closeMenu(itemIndex);
251
- }
252
- handlePopupMenuItemKeydown(event, itemIndex, subItemIndex, subSubItemIndex) {
253
- const currentSubIndex = this.menuData[itemIndex].currentFocusSubItemIndex;
254
- const currentSubSubIndex = this.menuData[itemIndex].currentFocusSubSubItemIndex;
255
- const items = this.getItems();
256
- switch (event.key) {
257
- case ' ':
258
- this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);
259
- if (this.mustCloseAfterSelectPopupItem(itemIndex, subItemIndex, subSubItemIndex)) {
260
- this.closeMenu(itemIndex);
261
- this.focusItem(itemIndex);
262
- }
263
- event.stopPropagation();
264
- event.preventDefault();
265
- break;
266
- case 'Enter':
267
- this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);
268
- this.closeMenu(itemIndex);
269
- this.focusItem(itemIndex);
270
- event.stopPropagation();
271
- event.preventDefault();
272
- break;
273
- case 'Escape':
274
- this.closeMenu(itemIndex);
275
- this.focusItem(itemIndex);
276
- event.stopPropagation();
277
- event.preventDefault();
278
- break;
279
- case 'ArrowUp':
280
- this.focusNextAvailableSubItem(itemIndex, currentSubIndex, currentSubSubIndex, -1);
281
- event.stopPropagation();
282
- event.preventDefault();
283
- break;
284
- case 'ArrowDown':
285
- this.focusNextAvailableSubItem(itemIndex, currentSubIndex, currentSubSubIndex, +1);
286
- event.stopPropagation();
287
- event.preventDefault();
288
- break;
289
- case 'ArrowLeft':
290
- this.closeMenu(itemIndex);
291
- this.focusItem((itemIndex + items.length - 1) % items.length);
292
- event.stopPropagation();
293
- event.preventDefault();
294
- break;
295
- case 'ArrowRight':
296
- this.closeMenu(itemIndex);
297
- this.focusItem((itemIndex + items.length + 1) % items.length);
298
- event.stopPropagation();
299
- event.preventDefault();
300
- break;
301
- case 'Home':
302
- case 'PageUp':
303
- this.focusFirstSubItem(itemIndex);
304
- event.stopPropagation();
305
- event.preventDefault();
306
- break;
307
- case 'End':
308
- case 'PageDown':
309
- this.focusLastSubItem(itemIndex);
310
- event.stopPropagation();
311
- event.preventDefault();
312
- break;
313
- case 'Tab':
314
- this.closeMenu(itemIndex);
315
- this.focusItem(itemIndex);
316
- break;
317
- default:
318
- if (this.isPrintableChar(event.key)) {
319
- this.focusSubItemByFirstChar(itemIndex, event.key);
320
- event.stopPropagation();
321
- event.preventDefault();
322
- }
323
- break;
324
- }
325
- }
326
- handlePopupMenuItemMouseOver(itemIndex, subItemIndex, subSubItemIndex) {
327
- this.focusSubItem(itemIndex, subItemIndex, subSubItemIndex);
328
- }
329
- checkRequired() {
330
- const items = this.getItems();
331
- }
332
- activateMenuItem(itemIndex) {
333
- const items = this.getItems();
334
- this.activeItemChange.emit(items[itemIndex]);
335
- if (items[itemIndex] instanceof MenuNavigationItemComponent) {
336
- items[itemIndex].selected.emit();
337
- }
338
- }
339
- activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex) {
340
- const items = this.getItems();
341
- const subItems = this.getItemSubitems(items[itemIndex]);
342
- let item = subItems[subItemIndex];
343
- this.itemsChange.emit(items);
344
- this.activeSubItemChange.emit(item);
345
- if (item instanceof MenuNavigationSubitemComponent) {
346
- item.selected.emit();
347
- }
348
- }
349
- mustCloseAfterSelectPopupItem(itemIndex, subItemIndex, subSubItemIndex) {
350
- const items = this.getItems();
351
- const subItems = this.getItemSubitems(items[itemIndex]);
352
- let item = subItems[subItemIndex];
353
- return item.role !== 'menuitemcheckbox' && item.role !== 'menuitemradio';
354
- }
355
- openMenu(itemIndex) {
356
- const wasOpened = this.menuData[itemIndex].open;
357
- this.menuData[itemIndex].open = true;
358
- if (wasOpened) {
359
- this.activateMenuItem(itemIndex);
360
- }
361
- }
362
- closeMenu(itemIndex) {
363
- if (itemIndex !== null && itemIndex !== undefined) {
364
- this.menuData[itemIndex].open = false;
365
- }
366
- else {
367
- this.menuData.forEach(item => item.open = false);
368
- }
369
- }
370
- hasPopupMenu(itemIndex) {
371
- const items = this.getItems();
372
- const subItems = this.getItemSubitems(items[itemIndex]);
373
- return items[itemIndex].sub && subItems && subItems.length > 0;
374
- }
375
- isPrintableChar(str) {
376
- return str.length === 1 && !!str.match(/\S/);
377
- }
378
- focusItem(itemIndex, hover) {
379
- const hasFocus = this.menunavigation.nativeElement.contains(document.activeElement);
380
- const isOpen = this.menuData[this.currentFocusItemIndex].open;
381
- if (!hover || hasFocus) {
382
- this.menuData[itemIndex].menuItem.link.nativeElement.focus();
383
- }
384
- this.closeMenu();
385
- if (isOpen && this.hasPopupMenu(itemIndex)) {
386
- this.openMenu(itemIndex);
387
- }
388
- this.currentFocusItemIndex = itemIndex;
389
- }
390
- focusNextAvailableItem(fromItemIndex, step) {
391
- let nextItem = fromItemIndex;
392
- const items = this.getItems();
393
- do {
394
- nextItem = (nextItem + items.length + step) % items.length;
395
- } while (!this.isItemFocusable(nextItem) && nextItem !== fromItemIndex);
396
- if (nextItem !== fromItemIndex) {
397
- this.focusItem(nextItem);
398
- }
399
- }
400
- focusFirstItem() {
401
- if (this.isItemFocusable(0)) {
402
- this.focusItem(0);
403
- }
404
- else {
405
- this.focusNextAvailableItem(0, +1);
406
- }
407
- }
408
- focusLastItem() {
409
- const items = this.getItems();
410
- if (this.isItemFocusable(items.length - 1)) {
411
- this.focusItem(items.length - 1);
412
- }
413
- else {
414
- this.focusNextAvailableItem(items.length - 1, -1);
415
- }
416
- }
417
- isItemFocusable(itemIndex) {
418
- return !this.getItems()[itemIndex].disabled;
419
- }
420
- focusItemByFirstChar(char) {
421
- const itemContents = this.menuItems.map(menuItem => menuItem.itemContentWrapper.nativeElement.textContent);
422
- let index = this.currentFocusItemIndex;
423
- let foundIndex = -1;
424
- do {
425
- index = (index + itemContents.length + 1) % itemContents.length;
426
- if (itemContents[index] && itemContents[index].trim().substr(0, 1).toLowerCase() === char.toLowerCase()
427
- && this.isItemFocusable(index)) {
428
- foundIndex = index;
429
- }
430
- } while (foundIndex === -1 && index !== this.currentFocusItemIndex);
431
- if (foundIndex >= 0) {
432
- this.focusItem(foundIndex);
433
- }
434
- }
435
- focusSubItem(itemIndex, subItemIndex, subSubItemIndex) {
436
- if (this.menuData[itemIndex].menuItem.popupMenuItems.length > 0) {
437
- const menuDataIndex = subItemIndex;
438
- this.menuData[itemIndex].currentFocusSubItemIndex = subItemIndex;
439
- this.menuData[itemIndex].currentFocusSubSubItemIndex = subSubItemIndex;
440
- const elem = this.menuData[itemIndex].menuItem.popupMenuItems.toArray()[menuDataIndex].nativeElement;
441
- if (elem) {
442
- const aElem = elem.querySelector('a');
443
- if (aElem) {
444
- aElem.focus();
445
- }
446
- else {
447
- elem.focus();
448
- }
449
- }
450
- else {
451
- console.error('No subitem to focus');
452
- }
453
- }
454
- else {
455
- console.error('No subitems');
456
- }
457
- }
458
- focusNextAvailableSubItem(itemIndex, fromItemSubIndex, fromItemSubSubIndex, step) {
459
- let nextSubIndex = fromItemSubIndex;
460
- let nextSubSubIndex = fromItemSubSubIndex;
461
- let allSubItemsChecked;
462
- const items = this.getItems();
463
- do {
464
- const nextIndexes = this.getNextSubItemIndexes(items, itemIndex, nextSubIndex, nextSubSubIndex, step);
465
- nextSubIndex = nextIndexes.subIndex;
466
- nextSubSubIndex = nextIndexes.subSubIndex;
467
- allSubItemsChecked = (fromItemSubIndex === nextSubIndex && fromItemSubSubIndex === nextSubSubIndex);
468
- } while (!this.isSubItemFocusable(itemIndex, nextSubIndex, nextSubSubIndex) && !allSubItemsChecked);
469
- if (!allSubItemsChecked) {
470
- this.focusSubItem(itemIndex, nextSubIndex, nextSubSubIndex);
471
- }
472
- }
473
- focusFirstSubItem(itemIndex) {
474
- let firstSubSubItem = null;
475
- const items = this.getItems();
476
- const subItems = this.getItemSubitems(items[itemIndex]);
477
- if (subItems && subItems.length > 0) {
478
- firstSubSubItem = 0;
479
- }
480
- if (this.isSubItemFocusable(itemIndex, 0, firstSubSubItem)) {
481
- this.focusSubItem(itemIndex, 0, firstSubSubItem);
482
- }
483
- else {
484
- this.focusNextAvailableSubItem(itemIndex, 0, firstSubSubItem, +1);
485
- }
486
- }
487
- focusLastSubItem(itemIndex) {
488
- const items = this.getItems();
489
- const subItems = this.getItemSubitems(items[itemIndex]);
490
- const lastItemIndex = subItems.length - 1;
491
- const lastItem = subItems[lastItemIndex];
492
- let lastSubSubItem = null;
493
- if (this.isSubItemFocusable(itemIndex, lastItemIndex, lastSubSubItem)) {
494
- this.focusSubItem(itemIndex, lastItemIndex, lastSubSubItem);
495
- }
496
- else {
497
- this.focusNextAvailableSubItem(itemIndex, lastItemIndex, lastSubSubItem, -1);
498
- }
499
- }
500
- isSubItemFocusable(itemIndex, subItemIndex, subSubItemIndex) {
501
- const items = this.getItems();
502
- const subItems = this.getItemSubitems(items[itemIndex]);
503
- let item = subItems[subItemIndex];
504
- let isFocusable = false;
505
- if (item.role !== 'separator' && item.role !== 'none') {
506
- isFocusable = true;
507
- }
508
- return isFocusable;
509
- }
510
- focusSubItemByFirstChar(itemIndex, char) {
511
- const itemContents = this.menuItems.toArray()[itemIndex].popupMenuItems.map(menuItem => menuItem.nativeElement.textContent);
512
- let subItemIndex = this.menuData[itemIndex].currentFocusSubItemIndex;
513
- let subSubItemIndex = this.menuData[itemIndex].currentFocusSubSubItemIndex;
514
- let foundSubIndex = -1;
515
- let foundSubSubIndex = null;
516
- let allSubItemsChecked = false;
517
- const items = this.getItems();
518
- do {
519
- const nextIndexes = this.getNextSubItemIndexes(items, itemIndex, subItemIndex, subSubItemIndex, +1);
520
- subItemIndex = nextIndexes.subIndex;
521
- subSubItemIndex = nextIndexes.subSubIndex;
522
- const index = subItemIndex;
523
- if (itemContents[index] && itemContents[index].trim().substr(0, 1).toLowerCase() === char.toLowerCase()
524
- && this.isSubItemFocusable(itemIndex, subItemIndex, subSubItemIndex)) {
525
- foundSubIndex = subItemIndex;
526
- foundSubSubIndex = subSubItemIndex;
527
- }
528
- allSubItemsChecked = (this.menuData[itemIndex].currentFocusSubItemIndex === subItemIndex
529
- && this.menuData[itemIndex].currentFocusSubSubItemIndex === subSubItemIndex);
530
- } while (foundSubIndex === -1 && !allSubItemsChecked);
531
- if (foundSubIndex >= 0) {
532
- this.focusSubItem(itemIndex, foundSubIndex, foundSubSubIndex);
533
- }
534
- }
535
- getItems() {
536
- let items;
537
- if (this.itemComponentList && this.itemComponentList.length > 0) {
538
- items = this.itemComponentList.toArray();
539
- }
540
- else {
541
- items = this.items;
542
- }
543
- return items;
544
- }
545
- getItemSubitems(item) {
546
- let subItems = [];
547
- if (item instanceof MenuNavigationItemComponent) {
548
- subItems = item.getSubItems();
549
- }
550
- if (!subItems || subItems.length === 0) {
551
- subItems = item.sub ? item.sub.items : [];
552
- }
553
- return subItems;
554
- }
555
- getNextSubItemIndexes(items, itemIndex, nextSubIndex, nextSubSubIndex, step) {
556
- const subItems = this.getItemSubitems(items[itemIndex]);
557
- let checkNextSubItem = true;
558
- if (checkNextSubItem) {
559
- nextSubIndex = (nextSubIndex + step + subItems.length) % subItems.length;
560
- }
561
- return { subIndex: nextSubIndex, subSubIndex: nextSubSubIndex };
562
- }
563
- getIdPrefix() {
564
- return this.idPrefix ? this.idPrefix : this.id + 'menunavigation-item';
565
- }
566
- getItemId(item, index) {
567
- let id;
568
- if (item) {
569
- if (item.id) {
570
- id = item.id;
571
- }
572
- else {
573
- id = `${this.getIdPrefix()}-${++index}`;
574
- }
575
- }
576
- return id;
577
- }
578
- getSubItemId(item, index, parentId) {
579
- let id;
580
- if (item) {
581
- if (item.id) {
582
- id = item.id;
583
- }
584
- else {
585
- id = `sub-${parentId}-${++index}`;
586
- }
587
- }
588
- return id;
589
- }
590
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MenuNavigationComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
591
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MenuNavigationComponent, selector: "desy-menu-navigation", inputs: { idPrefix: "idPrefix", items: "items", classes: "classes", id: "id" }, outputs: { itemsChange: "itemsChange", activeItemChange: "activeItemChange", activeSubItemChange: "activeSubItemChange" }, host: { properties: { "class": "this.classes", "class.c-menu-navigation": "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: "itemComponentList", predicate: MenuNavigationItemComponent }], viewQueries: [{ propertyName: "menunavigation", first: true, predicate: ["menunavigation"], descendants: true, read: ElementRef }, { propertyName: "menuItems", predicate: MenubaritemDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ul #menunavigation [id]=\"id + '-menu-navigation'\" class=\"flex flex-wrap gap-base\"\n(focusin)=\"handleMenuFocusIn()\"\n(focusout)=\"handleMenuFocusOut($event)\"\n[ngClass]=\"{ 'focus': isFocused }\"\n[attr.aria-label]=\"ariaLabel ? ariaLabel : null\">\n<ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n<li class=\"relative\" desyMenubaritem (contentChanged)=\"checkChanges()\">\n <a *ngIf=\"item.href\" #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [href]=\"item.href\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menu-navigation__button--disabled': item.disabled, 'c-menu-navigation__button--primary': item.active, 'c-menu-navigation__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.aria-current]=\"item.disabled ? 'page' : (item.ariaCurrent ? item.ariaCurrent : 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 pointer-events-none\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span> \n </a>\n <a *ngIf=\"!item.href && item.routerLink\" #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menu-navigation__button--disabled': item.disabled, 'c-menu-navigation__button--primary': item.active, 'c-menu-navigation__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 [desyAppAccessibility]=\"item\"\n [attr.aria-current]=\"item.disabled ? 'page' : (item.ariaCurrent ? item.ariaCurrent : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span> \n </a>\n <button *ngIf=\"!item.href && !item.routerLink\" #link #itemContentWrapper\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menu-navigation__button--disabled': item.disabled, 'c-menu-navigation__button--primary': item.active, 'c-menu-navigation__button--has-selection': item.active}\"\n [attr.aria-expanded]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.aria-haspopup]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-controls]=\"item.sub ? (item.ariaControls ? item.ariaControls : id + '-sub-list') : null\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span *ngIf=\"item.active\" class=\"sr-only\">Item activo: </span>\n <span class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span>\n <svg *ngIf=\"item.sub\" class=\"inline-block -mr-2 align-middle -my-px pointer-events-none\" 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 </button> \n\n <div *ngIf=\"item.sub && getItemSubitems(item)\" class=\"c-menu-navigation__sub absolute bottom-0 left-0\">\n <ul [id]=\"id + '-sub-list'\" [style]=\"menuData && menuData[itemIndex].open?'display:block':'display:none'\" #popupMenu role=\"menu\" tabindex=\"-1\"\n [class]=\"item.sub.classes ? item.sub.classes : 'c-menu-navigation__tooltip w-max max-w-64 border border-neutral-base shadow-md bg-white text-sm'\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : (item.sub.ariaLabel ? item.sub.ariaLabel : null)\"\n [attr.aria-disabled]=\"item.sub.ariaDisabled ? item.sub.ariaDisabled : null\"\n [desyAppAccessibility]=\"item.sub\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\t\t\t\t\n <li #popupMenuItem 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 <a *ngIf=\"subItem.href\" #itemContentWrapper\n [href]=\"subItem.href\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"['flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', subItem.classes] | makeHtmlList\"\n [ngClass]=\"{'pointer-events-none': subItem.disabled}\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong class=\"font-bold\" *ngIf=\"subItem.active; else noActive\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </ng-template>\n <svg *ngIf=\"subItem.disabled\" viewBox=\"0 0 140 140\" height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\" class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\" aria-hidden=\"true\" focusable=\"false\" ><path d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\"/></svg>\n </a>\n <a *ngIf=\"!subItem.href && subItem.routerLink\" #itemContentWrapper\n [routerLink]=\"subItem.routerLink\"\n [routerLinkActive]=\"subItem.routerLinkActiveClasses ? subItem.routerLinkActiveClasses : []\"\n [fragment]=\"subItem.fragment\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"['flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', subItem.classes] | makeHtmlList\"\n [ngClass]=\"{'pointer-events-none': subItem.disabled}\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong class=\"font-bold\" *ngIf=\"subItem.active; else noActive\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </ng-template>\n <svg *ngIf=\"subItem.disabled\" viewBox=\"0 0 140 140\" height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\" class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\" aria-hidden=\"true\" focusable=\"false\" ><path d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\"/></svg>\n </a>\n </li>\n <li *ngIf=\"subItem.divider\" class=\"my-sm border-b border-neutral-base\">\n <div class=\"sr-only\">Separador</div>\n </li>\n </ng-container>\n </ul>\n </div>\n</li>\n<li #popupMenuItem *ngIf=\"item.divider\" [class]=\"item.divider.classes\" role=\"presentation\" aria-hidden=\"true\">\n <ng-container *desyCustomInnerContent=\"{ component: item.divider, html: item.divider.html, text: item.divider.text}\"></ng-container>\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: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "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" }] }); }
592
- }
593
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MenuNavigationComponent, decorators: [{
594
- type: Component,
595
- args: [{ selector: 'desy-menu-navigation', template: "<ul #menunavigation [id]=\"id + '-menu-navigation'\" class=\"flex flex-wrap gap-base\"\n(focusin)=\"handleMenuFocusIn()\"\n(focusout)=\"handleMenuFocusOut($event)\"\n[ngClass]=\"{ 'focus': isFocused }\"\n[attr.aria-label]=\"ariaLabel ? ariaLabel : null\">\n<ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n<li class=\"relative\" desyMenubaritem (contentChanged)=\"checkChanges()\">\n <a *ngIf=\"item.href\" #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [href]=\"item.href\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menu-navigation__button--disabled': item.disabled, 'c-menu-navigation__button--primary': item.active, 'c-menu-navigation__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.aria-current]=\"item.disabled ? 'page' : (item.ariaCurrent ? item.ariaCurrent : 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 pointer-events-none\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span> \n </a>\n <a *ngIf=\"!item.href && item.routerLink\" #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menu-navigation__button--disabled': item.disabled, 'c-menu-navigation__button--primary': item.active, 'c-menu-navigation__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 [desyAppAccessibility]=\"item\"\n [attr.aria-current]=\"item.disabled ? 'page' : (item.ariaCurrent ? item.ariaCurrent : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span> \n </a>\n <button *ngIf=\"!item.href && !item.routerLink\" #link #itemContentWrapper\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menu-navigation__button--disabled': item.disabled, 'c-menu-navigation__button--primary': item.active, 'c-menu-navigation__button--has-selection': item.active}\"\n [attr.aria-expanded]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.aria-haspopup]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-controls]=\"item.sub ? (item.ariaControls ? item.ariaControls : id + '-sub-list') : null\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span *ngIf=\"item.active\" class=\"sr-only\">Item activo: </span>\n <span class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span>\n <svg *ngIf=\"item.sub\" class=\"inline-block -mr-2 align-middle -my-px pointer-events-none\" 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 </button> \n\n <div *ngIf=\"item.sub && getItemSubitems(item)\" class=\"c-menu-navigation__sub absolute bottom-0 left-0\">\n <ul [id]=\"id + '-sub-list'\" [style]=\"menuData && menuData[itemIndex].open?'display:block':'display:none'\" #popupMenu role=\"menu\" tabindex=\"-1\"\n [class]=\"item.sub.classes ? item.sub.classes : 'c-menu-navigation__tooltip w-max max-w-64 border border-neutral-base shadow-md bg-white text-sm'\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : (item.sub.ariaLabel ? item.sub.ariaLabel : null)\"\n [attr.aria-disabled]=\"item.sub.ariaDisabled ? item.sub.ariaDisabled : null\"\n [desyAppAccessibility]=\"item.sub\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\t\t\t\t\n <li #popupMenuItem 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 <a *ngIf=\"subItem.href\" #itemContentWrapper\n [href]=\"subItem.href\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"['flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', subItem.classes] | makeHtmlList\"\n [ngClass]=\"{'pointer-events-none': subItem.disabled}\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong class=\"font-bold\" *ngIf=\"subItem.active; else noActive\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </ng-template>\n <svg *ngIf=\"subItem.disabled\" viewBox=\"0 0 140 140\" height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\" class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\" aria-hidden=\"true\" focusable=\"false\" ><path d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\"/></svg>\n </a>\n <a *ngIf=\"!subItem.href && subItem.routerLink\" #itemContentWrapper\n [routerLink]=\"subItem.routerLink\"\n [routerLinkActive]=\"subItem.routerLinkActiveClasses ? subItem.routerLinkActiveClasses : []\"\n [fragment]=\"subItem.fragment\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"['flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', subItem.classes] | makeHtmlList\"\n [ngClass]=\"{'pointer-events-none': subItem.disabled}\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong class=\"font-bold\" *ngIf=\"subItem.active; else noActive\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </ng-template>\n <svg *ngIf=\"subItem.disabled\" viewBox=\"0 0 140 140\" height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\" class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\" aria-hidden=\"true\" focusable=\"false\" ><path d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\"/></svg>\n </a>\n </li>\n <li *ngIf=\"subItem.divider\" class=\"my-sm border-b border-neutral-base\">\n <div class=\"sr-only\">Separador</div>\n </li>\n </ng-container>\n </ul>\n </div>\n</li>\n<li #popupMenuItem *ngIf=\"item.divider\" [class]=\"item.divider.classes\" role=\"presentation\" aria-hidden=\"true\">\n <ng-container *desyCustomInnerContent=\"{ component: item.divider, html: item.divider.html, text: item.divider.text}\"></ng-container>\n</li>\n</ng-container>\n</ul>\n" }]
596
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { idPrefix: [{
597
- type: Input
598
- }], items: [{
599
- type: Input
600
- }], itemsChange: [{
601
- type: Output
602
- }], activeItemChange: [{
603
- type: Output
604
- }], activeSubItemChange: [{
605
- type: Output
606
- }], menunavigation: [{
607
- type: ViewChild,
608
- args: ['menunavigation', { read: ElementRef }]
609
- }], menuItems: [{
610
- type: ViewChildren,
611
- args: [MenubaritemDirective]
612
- }], itemComponentList: [{
613
- type: ContentChildren,
614
- args: [MenuNavigationItemComponent]
615
- }], classes: [{
616
- type: Input
617
- }, {
618
- type: HostBinding,
619
- args: ['class']
620
- }], cfg: [{
621
- type: HostBinding,
622
- args: ['class.c-menu-navigation']
623
- }], id: [{
624
- type: Input
625
- }, {
626
- type: HostBinding,
627
- args: ['attr.id']
628
- }], role: [{
629
- type: HostBinding,
630
- args: ['attr.role']
631
- }], ariaLabel: [{
632
- type: HostBinding,
633
- args: ['attr.aria-label']
634
- }], ariaDescribedBy: [{
635
- type: HostBinding,
636
- args: ['attr.aria-describedby']
637
- }], ariaLabelledBy: [{
638
- type: HostBinding,
639
- args: ['attr.aria-labelledby']
640
- }], ariaHidden: [{
641
- type: HostBinding,
642
- args: ['attr.aria-hidden']
643
- }], ariaDisabled: [{
644
- type: HostBinding,
645
- args: ['attr.aria-disabled']
646
- }], ariaControls: [{
647
- type: HostBinding,
648
- args: ['attr.aria-controls']
649
- }], ariaCurrent: [{
650
- type: HostBinding,
651
- args: ['attr.aria-current']
652
- }], ariaLive: [{
653
- type: HostBinding,
654
- args: ['attr.aria-live']
655
- }], ariaExpanded: [{
656
- type: HostBinding,
657
- args: ['attr.aria-expanded']
658
- }], ariaErrorMessage: [{
659
- type: HostBinding,
660
- args: ['attr.aria-errormessage']
661
- }], ariaHasPopup: [{
662
- type: HostBinding,
663
- args: ['attr.aria-haspopup']
664
- }], ariaModal: [{
665
- type: HostBinding,
666
- args: ['attr.aria-modal']
667
- }], ariaChecked: [{
668
- type: HostBinding,
669
- args: ['attr.aria-checked']
670
- }], ariaPressed: [{
671
- type: HostBinding,
672
- args: ['attr.aria-pressed']
673
- }], ariaReadonly: [{
674
- type: HostBinding,
675
- args: ['attr.aria-readonly']
676
- }], ariaRequired: [{
677
- type: HostBinding,
678
- args: ['attr.aria-required']
679
- }], ariaSelected: [{
680
- type: HostBinding,
681
- args: ['attr.aria-selected']
682
- }], ariaValuemin: [{
683
- type: HostBinding,
684
- args: ['attr.aria-valuemin']
685
- }], ariaValuemax: [{
686
- type: HostBinding,
687
- args: ['attr.aria-valuemax']
688
- }], ariaValuenow: [{
689
- type: HostBinding,
690
- args: ['attr.aria-valuenow']
691
- }], ariaValuetext: [{
692
- type: HostBinding,
693
- args: ['attr.aria-valuetext']
694
- }], ariaOrientation: [{
695
- type: HostBinding,
696
- args: ['attr.aria-orientation']
697
- }], ariaLevel: [{
698
- type: HostBinding,
699
- args: ['attr.aria-level']
700
- }], ariaMultiselectable: [{
701
- type: HostBinding,
702
- args: ['attr.aria-multiselectable']
703
- }], ariaPlaceholder: [{
704
- type: HostBinding,
705
- args: ['attr.aria-placeholder']
706
- }], ariaPosinset: [{
707
- type: HostBinding,
708
- args: ['attr.aria-posinset']
709
- }], ariaSetsize: [{
710
- type: HostBinding,
711
- args: ['attr.aria-setsize']
712
- }], ariaSort: [{
713
- type: HostBinding,
714
- args: ['attr.aria-sort']
715
- }], ariaBusy: [{
716
- type: HostBinding,
717
- args: ['attr.aria-busy']
718
- }], ariaDropeffect: [{
719
- type: HostBinding,
720
- args: ['attr.aria-dropeffect']
721
- }], ariaGrabbed: [{
722
- type: HostBinding,
723
- args: ['attr.aria-grabbed']
724
- }], ariaActivedescendant: [{
725
- type: HostBinding,
726
- args: ['attr.aria-activedescendant']
727
- }], ariaAtomic: [{
728
- type: HostBinding,
729
- args: ['attr.aria-atomic']
730
- }], ariaAutocomplete: [{
731
- type: HostBinding,
732
- args: ['attr.aria-autocomplete']
733
- }], ariaBraillelabel: [{
734
- type: HostBinding,
735
- args: ['attr.aria-braillelabel']
736
- }], ariaBrailleroledescription: [{
737
- type: HostBinding,
738
- args: ['attr.aria-brailleroledescription']
739
- }], ariaColcount: [{
740
- type: HostBinding,
741
- args: ['attr.aria-colcount']
742
- }], ariaColindex: [{
743
- type: HostBinding,
744
- args: ['attr.aria-colindex']
745
- }], ariaColindextext: [{
746
- type: HostBinding,
747
- args: ['attr.aria-colindextext']
748
- }], ariaColspan: [{
749
- type: HostBinding,
750
- args: ['attr.aria-colspan']
751
- }], ariaDescription: [{
752
- type: HostBinding,
753
- args: ['attr.aria-description']
754
- }], ariaDetails: [{
755
- type: HostBinding,
756
- args: ['attr.aria-details']
757
- }], ariaFlowto: [{
758
- type: HostBinding,
759
- args: ['attr.aria-flowto']
760
- }], ariaInvalid: [{
761
- type: HostBinding,
762
- args: ['attr.aria-invalid']
763
- }], ariaKeyshortcuts: [{
764
- type: HostBinding,
765
- args: ['attr.aria-keyshortcuts']
766
- }], ariaOwns: [{
767
- type: HostBinding,
768
- args: ['attr.aria-owns']
769
- }], ariaRelevant: [{
770
- type: HostBinding,
771
- args: ['attr.aria-relevant']
772
- }], ariaRoledescription: [{
773
- type: HostBinding,
774
- args: ['attr.aria-roledescription']
775
- }], ariaRowcount: [{
776
- type: HostBinding,
777
- args: ['attr.aria-rowcount']
778
- }], ariaRowindex: [{
779
- type: HostBinding,
780
- args: ['attr.aria-rowindex']
781
- }], ariaRowindextext: [{
782
- type: HostBinding,
783
- args: ['attr.aria-rowindextext']
784
- }], ariaRowspan: [{
785
- type: HostBinding,
786
- args: ['attr.aria-rowspan']
787
- }], tabindex: [{
788
- type: HostBinding,
789
- args: ['attr.tabindex']
790
- }], title: [{
791
- type: HostBinding,
792
- args: ['attr.title']
793
- }], alt: [{
794
- type: HostBinding,
795
- args: ['attr.alt']
796
- }], lang: [{
797
- type: HostBinding,
798
- args: ['attr.lang']
799
- }], accesskey: [{
800
- type: HostBinding,
801
- args: ['attr.accesskey']
802
- }], autocomplete: [{
803
- type: HostBinding,
804
- args: ['attr.autocomplete']
805
- }], autofocus: [{
806
- type: HostBinding,
807
- args: ['attr.autofocus']
808
- }], contenteditable: [{
809
- type: HostBinding,
810
- args: ['attr.contenteditable']
811
- }], dir: [{
812
- type: HostBinding,
813
- args: ['attr.dir']
814
- }], draggable: [{
815
- type: HostBinding,
816
- args: ['attr.draggable']
817
- }], enterkeyhint: [{
818
- type: HostBinding,
819
- args: ['attr.enterkeyhint']
820
- }], hidden: [{
821
- type: HostBinding,
822
- args: ['attr.hidden']
823
- }], inputmode: [{
824
- type: HostBinding,
825
- args: ['attr.inputmode']
826
- }], spellcheck: [{
827
- type: HostBinding,
828
- args: ['attr.spellcheck']
829
- }], translate: [{
830
- type: HostBinding,
831
- args: ['attr.translate']
832
- }], ariaMultiline: [{
833
- type: HostBinding,
834
- args: ['attr.aria-multiline']
835
- }], for: [{
836
- type: HostBinding,
837
- args: ['attr.for']
838
- }], form: [{
839
- type: HostBinding,
840
- args: ['attr.form']
841
- }], headers: [{
842
- type: HostBinding,
843
- args: ['attr.headers']
844
- }], placeholder: [{
845
- type: HostBinding,
846
- args: ['attr.placeholder']
847
- }], readonly: [{
848
- type: HostBinding,
849
- args: ['attr.readonly']
850
- }], required: [{
851
- type: HostBinding,
852
- args: ['attr.required']
853
- }] } });
854
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1uYXZpZ2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc3ktYW5ndWxhci9zcmMvbGliL2Rlc3ktbmF2L2NvbXBvbmVudHMvbWVudS1uYXZpZ2F0aW9uL21lbnUtbmF2aWdhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnUtbmF2aWdhdGlvbi9tZW51LW5hdmlnYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUVULFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDL0csT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7Ozs7Ozs7OztBQU14SCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsc0JBQXNCO0lBSWpFLElBQ0ksS0FBSyxDQUFDLEtBQTJCO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QyxDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFBO0lBQ3BCLENBQUM7SUE4RkQsWUFBb0IsaUJBQW9DO1FBQ3RELEtBQUssRUFBRSxDQUFDO1FBRFUsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQTdGOUMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUN2RCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBc0IsQ0FBQztRQUMxRCx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBZ0UsQ0FBQztRQU96RSxRQUFHLEdBQUcsSUFBSSxDQUFBO1FBR3hCLFNBQUksR0FBVyxJQUFJLENBQUM7UUFDZCxjQUFTLEdBQVcsSUFBSSxDQUFDO1FBQ25CLG9CQUFlLEdBQVcsSUFBSSxDQUFDO1FBQ2hDLG1CQUFjLEdBQVcsSUFBSSxDQUFDO1FBQ2xDLGVBQVUsR0FBVyxJQUFJLENBQUM7UUFDeEIsaUJBQVksR0FBVyxJQUFJLENBQUM7UUFDNUIsaUJBQVksR0FBVyxJQUFJLENBQUM7UUFDN0IsZ0JBQVcsR0FBVyxJQUFJLENBQUM7UUFDOUIsYUFBUSxHQUFXLElBQUksQ0FBQztRQUNwQixpQkFBWSxHQUFXLElBQUksQ0FBQztRQUN4QixxQkFBZ0IsR0FBVyxJQUFJLENBQUM7UUFDcEMsaUJBQVksR0FBVyxJQUFJLENBQUM7UUFDL0IsY0FBUyxHQUFXLElBQUksQ0FBQztRQUN2QixnQkFBVyxHQUFXLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUFXLElBQUksQ0FBQztRQUMxQixpQkFBWSxHQUFXLElBQUksQ0FBQztRQUM1QixpQkFBWSxHQUFXLElBQUksQ0FBQztRQUM1QixpQkFBWSxHQUFXLElBQUksQ0FBQztRQUM1QixpQkFBWSxHQUFXLElBQUksQ0FBQztRQUM1QixpQkFBWSxHQUFXLElBQUksQ0FBQztRQUM1QixpQkFBWSxHQUFXLElBQUksQ0FBQztRQUMzQixrQkFBYSxHQUFXLElBQUksQ0FBQztRQUMzQixvQkFBZSxHQUFXLElBQUksQ0FBQztRQUNyQyxjQUFTLEdBQVcsSUFBSSxDQUFDO1FBQ2Ysd0JBQW1CLEdBQVcsSUFBSSxDQUFDO1FBQ3ZDLG9CQUFlLEdBQVcsSUFBSSxDQUFDO1FBQ2xDLGlCQUFZLEdBQVcsSUFBSSxDQUFDO1FBQzdCLGdCQUFXLEdBQVcsSUFBSSxDQUFDO1FBQzlCLGFBQVEsR0FBVyxJQUFJLENBQUM7UUFDeEIsYUFBUSxHQUFXLElBQUksQ0FBQztRQUNsQixtQkFBYyxHQUFXLElBQUksQ0FBQztRQUNqQyxnQkFBVyxHQUFXLElBQUksQ0FBQztRQUNsQix5QkFBb0IsR0FBVyxJQUFJLENBQUM7UUFDOUMsZUFBVSxHQUFXLElBQUksQ0FBQztRQUNwQixxQkFBZ0IsR0FBVyxJQUFJLENBQUM7UUFDaEMscUJBQWdCLEdBQVcsSUFBSSxDQUFDO1FBQ3RCLCtCQUEwQixHQUFXLElBQUksQ0FBQztRQUN4RCxpQkFBWSxHQUFXLElBQUksQ0FBQztRQUM1QixpQkFBWSxHQUFXLElBQUksQ0FBQztRQUN4QixxQkFBZ0IsR0FBVyxJQUFJLENBQUM7UUFDckMsZ0JBQVcsR0FBVyxJQUFJLENBQUM7UUFDdkIsb0JBQWUsR0FBVyxJQUFJLENBQUM7UUFDbkMsZ0JBQVcsR0FBVyxJQUFJLENBQUM7UUFDNUIsZUFBVSxHQUFXLElBQUksQ0FBQztRQUN6QixnQkFBVyxHQUFXLElBQUksQ0FBQztRQUN0QixxQkFBZ0IsR0FBVyxJQUFJLENBQUM7UUFDeEMsYUFBUSxHQUFXLElBQUksQ0FBQztRQUNwQixpQkFBWSxHQUFXLElBQUksQ0FBQztRQUNyQix3QkFBbUIsR0FBVyxJQUFJLENBQUM7UUFDMUMsaUJBQVksR0FBVyxJQUFJLENBQUM7UUFDNUIsaUJBQVksR0FBVyxJQUFJLENBQUM7UUFDeEIscUJBQWdCLEdBQVcsSUFBSSxDQUFDO1FBQ3JDLGdCQUFXLEdBQVcsSUFBSSxDQUFDO1FBQy9CLGFBQVEsR0FBVyxJQUFJLENBQUM7UUFDM0IsVUFBSyxHQUFXLElBQUksQ0FBQztRQUN2QixRQUFHLEdBQVcsSUFBSSxDQUFDO1FBQ2xCLFNBQUksR0FBVyxJQUFJLENBQUM7UUFDZixjQUFTLEdBQVcsSUFBSSxDQUFDO1FBQ3RCLGlCQUFZLEdBQVcsSUFBSSxDQUFDO1FBQy9CLGNBQVMsR0FBVyxJQUFJLENBQUM7UUFDbkIsb0JBQWUsR0FBVyxJQUFJLENBQUM7UUFDM0MsUUFBRyxHQUFXLElBQUksQ0FBQztRQUNiLGNBQVMsR0FBVyxJQUFJLENBQUM7UUFDdEIsaUJBQVksR0FBVyxJQUFJLENBQUM7UUFDbEMsV0FBTSxHQUFZLElBQUksQ0FBQztRQUNwQixjQUFTLEdBQVcsSUFBSSxDQUFDO1FBQ3hCLGVBQVUsR0FBVyxJQUFJLENBQUM7UUFDM0IsY0FBUyxHQUFXLElBQUksQ0FBQztRQUNwQixrQkFBYSxHQUFXLElBQUksQ0FBQztRQUN4QyxRQUFHLEdBQVcsSUFBSSxDQUFDO1FBQ2xCLFNBQUksR0FBVyxJQUFJLENBQUM7UUFDakIsWUFBTyxHQUFXLElBQUksQ0FBQztRQUNuQixnQkFBVyxHQUFXLElBQUksQ0FBQztRQUM5QixhQUFRLEdBQVcsSUFBSSxDQUFDO1FBQ3hCLGFBQVEsR0FBVyxJQUFJLENBQUM7UUFHdEQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQiwwQkFBcUIsR0FBRyxDQUFDLENBQUM7SUFJMUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUF1QjtRQUNqQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUN4RyxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ25DLE1BQU0sUUFBUSxHQUFHO2dCQUNmLElBQUksRUFBRSxLQUFLO2dCQUNYLHdCQUF3QixFQUFFLENBQUM7Z0JBQzNCLDJCQUEyQixFQUFFLENBQUM7Z0JBQzlCLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQzthQUMxQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUdELE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQzdELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN4RSxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUM1RixJQUFJLElBQUksQ0FBQyxxQkFBcUIsS0FBSyx5QkFBeUIsRUFBRSxDQUFDO29CQUM3RCxNQUFNO2dCQUNSLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxLQUEyRDtRQUNyRixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDckIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN6QyxJQUFJLFFBQVEsWUFBWSwyQkFBMkIsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2hGLENBQUM7aUJBQU0sSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzVFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFNRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQUs7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNyRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQWlCO1FBQzFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2pDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUM3QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsS0FBb0IsRUFBRSxTQUFpQjtRQUMzRCxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNsQixLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssR0FBRyxDQUFDO1lBQ1QsS0FBSyxXQUFXO2dCQUNkLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN6QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QixDQUFDO2dCQUNELE1BQU07WUFFUixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzVCLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU07WUFFUixLQUFLLFdBQVc7Z0JBQ2QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsTUFBTTtZQUVSLEtBQUssWUFBWTtnQkFDZixJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixNQUFNO1lBRVIsS0FBSyxTQUFTO2dCQUNaLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN6QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELENBQUM7Z0JBQ0QsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU07WUFFUixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssUUFBUTtnQkFDWCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQixDQUFDO2dCQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU07WUFFUixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssVUFBVTtnQkFDYixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQixDQUFDO2dCQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU07WUFFUjtnQkFDRSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3JDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QixDQUFDO2dCQUNELE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVELHVCQUF1QixDQUFDLFNBQWlCO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxTQUFpQixFQUFFLFlBQW9CLEVBQUUsZUFBd0I7UUFDeEYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxLQUFvQixFQUFFLFNBQWlCLEVBQUUsWUFBb0IsRUFBRSxlQUF3QjtRQUNoSCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDO1FBQzFFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQywyQkFBMkIsQ0FBQztRQUNoRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbEIsS0FBSyxHQUFHO2dCQUNOLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUNyRSxJQUFJLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxFQUFFLENBQUM7b0JBQ2pGLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzVCLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU07WUFFUixLQUFLLE9BQU87Z0JBQ1YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixNQUFNO1lBRVIsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixNQUFNO1lBRVIsS0FBSyxTQUFTO2dCQUNaLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRW5GLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixNQUFNO1lBRVIsS0FBSyxXQUFXO2dCQUNkLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRW5GLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixNQUFNO1lBRVIsS0FBSyxXQUFXO2dCQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixNQUFNO1lBRVIsS0FBSyxZQUFZO2dCQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixNQUFNO1lBRVIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNsQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsTUFBTTtZQUVSLEtBQUssS0FBSyxDQUFDO1lBQ1gsS0FBSyxVQUFVO2dCQUNiLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDakMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU07WUFFUixLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDMUIsTUFBTTtZQUVSO2dCQUNFLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ25ELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QixDQUFDO2dCQUNELE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVELDRCQUE0QixDQUFDLFNBQWlCLEVBQUUsWUFBb0IsRUFBRSxlQUF3QjtRQUM1RixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQU1ELGFBQWE7UUFDWCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUdELGdCQUFnQixDQUFDLFNBQWlCO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQXVCLENBQUMsQ0FBQztRQUNuRSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsWUFBWSwyQkFBMkIsRUFBRSxDQUFDO1lBQzNELEtBQUssQ0FBQyxTQUFTLENBQWlDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BFLENBQUM7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsU0FBaUIsRUFBRSxZQUFvQixFQUFFLGVBQXdCO1FBQ3JGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQUksSUFBSSxHQUFpRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFaEcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUEwQixDQUFDLENBQUM7UUFDMUQsSUFBSSxJQUFJLFlBQVksOEJBQThCLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsNkJBQTZCLENBQUMsU0FBaUIsRUFBRSxZQUFvQixFQUFFLGVBQXdCO1FBQzdGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQUksSUFBSSxHQUFpRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFaEcsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGtCQUFrQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDO0lBQzNFLENBQUM7SUFFRCxRQUFRLENBQUMsU0FBaUI7UUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsU0FBa0I7UUFDMUIsSUFBSSxTQUFTLEtBQUssSUFBSSxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDeEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsU0FBaUI7UUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sZUFBZSxDQUFDLEdBQVc7UUFDakMsT0FBTyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBUUQsU0FBUyxDQUFDLFNBQWlCLEVBQUUsS0FBZTtRQUMxQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDO1FBRTlELElBQUksQ0FBQyxLQUFLLElBQUksUUFBUSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvRCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsU0FBUyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxhQUFxQixFQUFFLElBQVk7UUFDeEQsSUFBSSxRQUFRLEdBQUcsYUFBYSxDQUFDO1FBQzdCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixHQUFHLENBQUM7WUFDRixRQUFRLEdBQUcsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzdELENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxLQUFLLGFBQWEsRUFBRTtRQUV4RSxJQUFJLFFBQVEsS0FBSyxhQUFhLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25DLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsU0FBaUI7UUFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDOUMsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVk7UUFDL0IsTUFBTSxZQUFZLEdBQWEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JILElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztRQUN2QyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNwQixHQUFHLENBQUM7WUFDRixLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO1lBQ2hFLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUU7bUJBQ2xHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQyxRQUFRLFVBQVUsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLHFCQUFxQixFQUFFO1FBRXBFLElBQUksVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsU0FBaUIsRUFBRSxZQUFvQixFQUFFLGVBQXdCO1FBQzVFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyx3QkFBd0IsR0FBRyxZQUFZLENBQUM7WUFDakUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQywyQkFBMkIsR0FBRyxlQUFlLENBQUM7WUFDdkUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUNyRyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ1YsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLENBQUM7WUFDSCxDQUFDO2lCQUNJLENBQUM7Z0JBQ0osT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxTQUFpQixFQUFFLGdCQUF3QixFQUFFLG1CQUEyQixFQUFFLElBQVk7UUFDOUcsSUFBSSxZQUFZLEdBQUcsZ0JBQWdCLENBQUM7UUFDcEMsSUFBSSxlQUFlLEdBQUcsbUJBQW1CLENBQUM7UUFDMUMsSUFBSSxrQkFBa0IsQ0FBQztRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsR0FBRyxDQUFDO1lBQ0YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN0RyxZQUFZLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztZQUNwQyxlQUFlLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQztZQUMxQyxrQkFBa0IsR0FBRyxDQUFDLGdCQUFnQixLQUFLLFlBQVksSUFBSSxtQkFBbUIsS0FBSyxlQUFlLENBQUMsQ0FBQztRQUN0RyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1FBRXBHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLFNBQWlCO1FBQ2pDLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQztRQUMzQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUMzRCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDbkQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMseUJBQXlCLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQWlCO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6QyxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFFMUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ3RFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM5RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9FLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsU0FBaUIsRUFBRSxZQUFvQixFQUFFLGVBQXdCO1FBQ2xGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQUksSUFBSSxHQUFpRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFaEcsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN0RCxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsdUJBQXVCLENBQUMsU0FBaUIsRUFBRSxJQUFZO1FBQ3JELE1BQU0sWUFBWSxHQUFhLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEksSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQztRQUNyRSxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDJCQUEyQixDQUFDO1FBQzNFLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixHQUFHLENBQUM7WUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEcsWUFBWSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFDcEMsZUFBZSxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUM7WUFDMUMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDO1lBQzNCLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUU7bUJBQ2xHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZFLGFBQWEsR0FBRyxZQUFZLENBQUM7Z0JBQzdCLGdCQUFnQixHQUFHLGVBQWUsQ0FBQztZQUNyQyxDQUFDO1lBQ0Qsa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLHdCQUF3QixLQUFLLFlBQVk7bUJBQ25GLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsMkJBQTJCLEtBQUssZUFBZSxDQUFDLENBQUM7UUFDakYsQ0FBQyxRQUFRLGFBQWEsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1FBRXRELElBQUksYUFBYSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDO0lBTUQsUUFBUTtRQUNOLElBQUksS0FBSyxDQUFDO1FBQ1YsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNDLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFzRDtRQUNwRSxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxJQUFJLFlBQVksMkJBQTJCLEVBQUUsQ0FBQztZQUNoRCxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsSUFBSTtRQUN6RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRXhELElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixZQUFZLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzNFLENBQUM7UUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcscUJBQXFCLENBQUM7SUFDekUsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBYTtRQUMzQixJQUFJLEVBQVUsQ0FBQztRQUNmLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDWixFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNmLENBQUM7aUJBQU0sQ0FBQztnQkFDTixFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBYSxFQUFFLFFBQWdCO1FBQ2hELElBQUksRUFBVSxDQUFDO1FBQ2YsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNaLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2YsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEVBQUUsR0FBRyxPQUFPLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3BDLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDOytHQWhxQlUsdUJBQXVCO21HQUF2Qix1QkFBdUIsdzZHQWtCakIsMkJBQTJCLDBIQUZQLFVBQVUsNENBQ2pDLG9CQUFvQiw0RkM1Q3BDLG1oV0F3SUE7OzRGRDdHYSx1QkFBdUI7a0JBSm5DLFNBQVM7K0JBQ0Usc0JBQXNCO3NGQUt2QixRQUFRO3NCQUFoQixLQUFLO2dCQUdGLEtBQUs7c0JBRFIsS0FBSztnQkFRSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRTRDLGNBQWM7c0JBQWhFLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNiLFNBQVM7c0JBQTVDLFlBQVk7dUJBQUMsb0JBQW9CO2dCQUNZLGlCQUFpQjtzQkFBOUQsZUFBZTt1QkFBQywyQkFBMkI7Z0JBRWIsT0FBTztzQkFBckMsS0FBSzs7c0JBQUksV0FBVzt1QkFBQyxPQUFPO2dCQUNXLEdBQUc7c0JBQTFDLFdBQVc7dUJBQUMseUJBQXlCO2dCQUNMLEVBQUU7c0JBQWxDLEtBQUs7O3NCQUFJLFdBQVc7dUJBQUMsU0FBUztnQkFFTCxJQUFJO3NCQUE3QixXQUFXO3VCQUFDLFdBQVc7Z0JBQ1EsU0FBUztzQkFBeEMsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBQ1EsZUFBZTtzQkFBcEQsV0FBVzt1QkFBQyx1QkFBdUI7Z0JBQ0MsY0FBYztzQkFBbEQsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBQ0YsVUFBVTtzQkFBMUMsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBQ0ksWUFBWTtzQkFBOUMsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBQ0UsWUFBWTtzQkFBOUMsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBQ0MsV0FBVztzQkFBNUMsV0FBVzt1QkFBQyxtQkFBbUI7Z0JBQ0QsUUFBUTtzQkFBdEMsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBQ00sWUFBWTtzQkFBOUMsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBQ00sZ0JBQWdCO3NCQUF0RCxXQUFXO3VCQUFDLHdCQUF3QjtnQkFDRixZQUFZO3NCQUE5QyxXQUFXO3VCQUFDLG9CQUFvQjtnQkFDRCxTQUFTO3NCQUF4QyxXQUFXO3VCQUFDLGlCQUFpQjtnQkFDSSxXQUFXO3NCQUE1QyxXQUFXO3VCQUFDLG1CQUFtQjtnQkFDRSxXQUFXO3NCQUE1QyxXQUFXO3VCQUFDLG1CQUFtQjtnQkFDRyxZQUFZO3NCQUE5QyxXQUFXO3VCQUFDLG9CQUFvQjtnQkFDRSxZQUFZO3NCQUE5QyxXQUFXO3VCQUFDLG9CQUFvQjtnQkFDRSxZQUFZO3NCQUE5QyxXQUFXO3VCQUFDLG9CQUFvQjtnQkFDRSxZQUFZO3NCQUE5QyxXQUFXO3VCQUFDLG9CQUFvQjtnQkFDRSxZQUFZO3NCQUE5QyxXQUFXO3VCQUFDLG9CQUFvQjtnQkFDRSxZQUFZO3NCQUE5QyxXQUFXO3VCQUFDLG9CQUFvQjtnQkFDRyxhQUFhO3NCQUFoRCxXQUFXO3VCQUFDLHFCQUFxQjtnQkFDSSxlQUFlO3NCQUFwRCxXQUFXO3VCQUFDLHVCQUF1QjtnQkFDSixTQUFTO3NCQUF4QyxXQUFXO3VCQUFDLGlCQUFpQjtnQkFDWSxtQkFBbUI7c0JBQTVELFdBQVc7dUJBQUMsMkJBQTJCO2dCQUNGLGVBQWU7c0JBQXBELFdBQVc7dUJBQUMsdUJBQXVCO2dCQUNELFlBQVk7c0JBQTlDLFdBQVc7dUJBQUMsb0JBQW9CO2dCQUNDLFdBQVc7c0JBQTVDLFdBQVc7dUJBQUMsbUJBQW1CO2dCQUNELFFBQVE7c0JBQXRDLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQUNFLFFBQVE7c0JBQXRDLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQUNRLGNBQWM7c0JBQWxELFdBQVc7dUJBQUMsc0JBQXNCO2dCQUNELFdBQVc7c0JBQTVDLFdBQVc7dUJBQUMsbUJBQW1CO2dCQUNXLG9CQUFvQjtzQkFBOUQsV0FBVzt1QkFBQyw0QkFBNEI7Z0JBQ1IsVUFBVTtzQkFBMUMsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBQ1EsZ0JBQWdCO3NCQUF0RCxXQUFXO3VCQUFDLHdCQUF3QjtnQkFDRSxnQkFBZ0I7c0JBQXRELFdBQVc7dUJBQUMsd0JBQXdCO2dCQUNZLDBCQUEwQjtzQkFBMUUsV0FBVzt1QkFBQyxrQ0FBa0M7Z0JBQ1osWUFBWTtzQkFBOUMsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBQ0UsWUFBWTtzQkFBOUMsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBQ00sZ0JBQWdCO3NCQUF0RCxXQUFXO3VCQUFDLHdCQUF3QjtnQkFDSCxXQUFXO3NCQUE1QyxXQUFXO3VCQUFDLG1CQUFtQjtnQkFDTSxlQUFlO3NCQUFwRCxXQUFXO3VCQUFDLHVCQUF1QjtnQkFDRixXQUFXO3NCQUE1QyxXQUFXO3VCQUFDLG1CQUFtQjtnQkFDQyxVQUFVO3NCQUExQyxXQUFXO3VCQUFDLGtCQUFrQjtnQkFDRyxXQUFXO3NCQUE1QyxXQUFXO3VCQUFDLG1CQUFtQjtnQkFDTyxnQkFBZ0I7c0JBQXRELFdBQVc7dUJBQUMsd0JBQXdCO2dCQUNOLFFBQVE7c0JBQXRDLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQUNNLFlBQVk7c0JBQTlDLFdBQVc7dUJBQUMsb0JBQW9CO2dCQUNTLG1CQUFtQjtzQkFBNUQsV0FBVzt1QkFBQywyQkFBMkI7Z0JBQ0wsWUFBWTtzQkFBOUMsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBQ0UsWUFBWTtzQkFBOUMsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBQ00sZ0JBQWdCO3NCQUF0RCxXQUFXO3VCQUFDLHdCQUF3QjtnQkFDSCxXQUFXO3NCQUE1QyxXQUFXO3VCQUFDLG1CQUFtQjtnQkFDRixRQUFRO3NCQUFyQyxXQUFXO3VCQUFDLGVBQWU7Z0JBQ0QsS0FBSztzQkFBL0IsV0FBVzt1QkFBQyxZQUFZO2dCQUNBLEdBQUc7c0JBQTNCLFdBQVc7dUJBQUMsVUFBVTtnQkFDRyxJQUFJO3NCQUE3QixXQUFXO3VCQUFDLFdBQVc7Z0JBQ08sU0FBUztzQkFBdkMsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBQ0ssWUFBWTtzQkFBN0MsV0FBVzt1QkFBQyxtQkFBbUI7Z0JBQ0QsU0FBUztzQkFBdkMsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBQ1EsZUFBZTtzQkFBbkQsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBQ1YsR0FBRztzQkFBM0IsV0FBVzt1QkFBQyxVQUFVO2dCQUNRLFNBQVM7c0JBQXZDLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQUNLLFlBQVk7c0JBQTdDLFdBQVc7dUJBQUMsbUJBQW1CO2dCQUNKLE1BQU07c0JBQWpDLFdBQVc7dUJBQUMsYUFBYTtnQkFDSyxTQUFTO3NCQUF2QyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFDRyxVQUFVO3NCQUF6QyxXQUFXO3VCQUFDLGlCQUFpQjtnQkFDQyxTQUFTO3NCQUF2QyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFDTyxhQUFhO3NCQUFoRCxXQUFXO3VCQUFDLHFCQUFxQjtnQkFDVCxHQUFHO3NCQUEzQixXQUFXO3VCQUFDLFVBQVU7Z0JBQ0csSUFBSTtzQkFBN0IsV0FBVzt1QkFBQyxXQUFXO2dCQUNLLE9BQU87c0JBQW5DLFdBQVc7dUJBQUMsY0FBYztnQkFDTSxXQUFXO3NCQUEzQyxXQUFXO3VCQUFDLGtCQUFrQjtnQkFDRCxRQUFRO3NCQUFyQyxXQUFXO3VCQUFDLGVBQWU7Z0JBQ0UsUUFBUTtzQkFBckMsV0FBVzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY2Nlc3NpYmlsaXR5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbSwgTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbVN1Ykl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1lbnVOYXZpZ2F0aW9uSXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbWVudS1uYXZpZ2F0aW9uJztcbmltcG9ydCB7IE1lbnViYXJpdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vbWVudWJhci9kaXJlY3RpdmVzL21lbnViYXJpdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbWVudS1uYXZpZ2F0aW9uLWl0ZW0vbWVudS1uYXZpZ2F0aW9uLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IE1lbnVOYXZpZ2F0aW9uU3ViaXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tZW51LW5hdmlnYXRpb24tc3ViaXRlbS9tZW51LW5hdmlnYXRpb24tc3ViaXRlbS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZXN5LW1lbnUtbmF2aWdhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LW5hdmlnYXRpb24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVOYXZpZ2F0aW9uQ29tcG9uZW50IGV4dGVuZHMgQWNjZXNzaWJpbGl0eUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQElucHV0KCkgaWRQcmVmaXg6IHN0cmluZztcbiAgX2l0ZW1zOiBNZW51TmF2aWdhdGlvbkl0ZW1bXTtcbiAgQElucHV0KClcbiAgc2V0IGl0ZW1zKGl0ZW1zOiBNZW51TmF2aWdhdGlvbkl0ZW1bXSkge1xuICAgIHRoaXMuX2l0ZW1zID0gaXRlbXM7XG4gICAgdGhpcy5hY3RpdmVJdGVtSWZTdWJJdGVtSXNBY3RpdmUoaXRlbXMpXG4gIH1cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtc1xuICB9XG4gIEBPdXRwdXQoKSBpdGVtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVudU5hdmlnYXRpb25JdGVtW10+KCk7XG4gIEBPdXRwdXQoKSBhY3RpdmVJdGVtQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51TmF2aWdhdGlvbkl0ZW0+KCk7XG4gIEBPdXRwdXQoKSBhY3RpdmVTdWJJdGVtQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51TmF2aWdhdGlvbkl0ZW1TdWJJdGVtIHwgTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbVN1Ykl0ZW0+KCk7XG5cbiAgQFZpZXdDaGlsZCgnbWVudW5hdmlnYXRpb24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbWVudW5hdmlnYXRpb246IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGRyZW4oTWVudWJhcml0ZW1EaXJlY3RpdmUpIG1lbnVJdGVtczogUXVlcnlMaXN0PE1lbnViYXJpdGVtRGlyZWN0aXZlPjtcbiAgQENvbnRlbnRDaGlsZHJlbihNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQpIGl0ZW1Db21wb25lbnRMaXN0OiBRdWVyeUxpc3Q8TWVudU5hdmlnYXRpb25JdGVtQ29tcG9uZW50PjtcblxuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2NsYXNzJykgY2xhc3NlczogYW55O1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmMtbWVudS1uYXZpZ2F0aW9uJykgY2ZnID0gdHJ1ZVxuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBpZDogYW55O1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKSBhcmlhTGFiZWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgYXJpYURlc2NyaWJlZEJ5OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbGxlZGJ5JykgYXJpYUxhYmVsbGVkQnk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhpZGRlbicpIGFyaWFIaWRkZW46IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRpc2FibGVkJykgYXJpYURpc2FibGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb250cm9scycpIGFyaWFDb250cm9sczogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY3VycmVudCcpIGFyaWFDdXJyZW50OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1saXZlJykgYXJpYUxpdmU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJykgYXJpYUV4cGFuZGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2UnKSBhcmlhRXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1oYXNwb3B1cCcpIGFyaWFIYXNQb3B1cDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbW9kYWwnKSBhcmlhTW9kYWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNoZWNrZWQnKSBhcmlhQ2hlY2tlZDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcHJlc3NlZCcpIGFyaWFQcmVzc2VkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yZWFkb25seScpIGFyaWFSZWFkb25seTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcmVxdWlyZWQnKSBhcmlhUmVxdWlyZWQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJykgYXJpYVNlbGVjdGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZW1pbicpIGFyaWFWYWx1ZW1pbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtdmFsdWVtYXgnKSBhcmlhVmFsdWVtYXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXZhbHVlbm93JykgYXJpYVZhbHVlbm93OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZXRleHQnKSBhcmlhVmFsdWV0ZXh0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vcmllbnRhdGlvbicpIGFyaWFPcmllbnRhdGlvbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGV2ZWwnKSBhcmlhTGV2ZWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZScpIGFyaWFNdWx0aXNlbGVjdGFibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXBsYWNlaG9sZGVyJykgYXJpYVBsYWNlaG9sZGVyOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1wb3NpbnNldCcpIGFyaWFQb3NpbnNldDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2V0c2l6ZScpIGFyaWFTZXRzaXplOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1zb3J0JykgYXJpYVNvcnQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWJ1c3knKSBhcmlhQnVzeTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZHJvcGVmZmVjdCcpIGFyaWFEcm9wZWZmZWN0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1ncmFiYmVkJykgYXJpYUdyYWJiZWQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKSBhcmlhQWN0aXZlZGVzY2VuZGFudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYXRvbWljJykgYXJpYUF0b21pYzogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYXV0b2NvbXBsZXRlJykgYXJpYUF1dG9jb21wbGV0ZTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYnJhaWxsZWxhYmVsJykgYXJpYUJyYWlsbGVsYWJlbDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYnJhaWxsZXJvbGVkZXNjcmlwdGlvbicpIGFyaWFCcmFpbGxlcm9sZWRlc2NyaXB0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb2xjb3VudCcpIGFyaWFDb2xjb3VudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY29saW5kZXgnKSBhcmlhQ29saW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNvbGluZGV4dGV4dCcpIGFyaWFDb2xpbmRleHRleHQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNvbHNwYW4nKSBhcmlhQ29sc3Bhbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpcHRpb24nKSBhcmlhRGVzY3JpcHRpb246IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRldGFpbHMnKSBhcmlhRGV0YWlsczogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZmxvd3RvJykgYXJpYUZsb3d0bzogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtaW52YWxpZCcpIGFyaWFJbnZhbGlkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1rZXlzaG9ydGN1dHMnKSBhcmlhS2V5c2hvcnRjdXRzOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vd25zJykgYXJpYU93bnM6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJlbGV2YW50JykgYXJpYVJlbGV2YW50OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb24nKSBhcmlhUm9sZWRlc2NyaXB0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb3djb3VudCcpIGFyaWFSb3djb3VudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcm93aW5kZXgnKSBhcmlhUm93aW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJvd2luZGV4dGV4dCcpIGFyaWFSb3dpbmRleHRleHQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJvd3NwYW4nKSBhcmlhUm93c3Bhbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JykgdGFiaW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci50aXRsZScpIHRpdGxlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYWx0JykgYWx0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIubGFuZycpIGxhbmc6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hY2Nlc3NrZXknKSBhY2Nlc3NrZXk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hdXRvY29tcGxldGUnKSBhdXRvY29tcGxldGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hdXRvZm9jdXMnKSBhdXRvZm9jdXM6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5jb250ZW50ZWRpdGFibGUnKSBjb250ZW50ZWRpdGFibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kaXInKSBkaXI6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kcmFnZ2FibGUnKSBkcmFnZ2FibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5lbnRlcmtleWhpbnQnKSBlbnRlcmtleWhpbnQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5oaWRkZW4nKSBoaWRkZW46IGJvb2xlYW4gPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuaW5wdXRtb2RlJykgaW5wdXRtb2RlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuc3BlbGxjaGVjaycpIHNwZWxsY2hlY2s6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci50cmFuc2xhdGUnKSB0cmFuc2xhdGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW11bHRpbGluZScpIGFyaWFNdWx0aWxpbmU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5mb3InKSBmb3I6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5mb3JtJykgZm9ybTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmhlYWRlcnMnKSBoZWFkZXJzOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIucGxhY2Vob2xkZXInKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJlYWRvbmx5JykgcmVhZG9ubHk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5yZXF1aXJlZCcpIHJlcXVpcmVkOiBzdHJpbmcgPSBudWxsO1xuXG4gIG1lbnVEYXRhOiBhbnlbXTtcbiAgdmlld0luaXQgPSBmYWxzZTtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBjdXJyZW50Rm9jdXNJdGVtSW5kZXggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM/OiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlld0luaXQpIHtcbiAgICAgIHRoaXMuY2hlY2tDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMudmlld0luaXQgPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tDaGFuZ2VzKCk7XG4gICAgdGhpcy5pdGVtQ29tcG9uZW50TGlzdC5jaGFuZ2VzLnN1YnNjcmliZSgoaXRlbXMpID0+IHRoaXMuYWN0aXZlSXRlbUlmU3ViSXRlbUlzQWN0aXZlKGl0ZW1zLnRvQXJyYXkoKSkpXG4gIH1cblxuICBjaGVja0NoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm1lbnVJdGVtcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWVudURhdGEgPSBbXTtcbiAgICB0aGlzLmdldEl0ZW1zKCkuZm9yRWFjaCgoXywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1EYXRhID0ge1xuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgY3VycmVudEZvY3VzU3ViSXRlbUluZGV4OiAwLFxuICAgICAgICBjdXJyZW50Rm9jdXNTdWJTdWJJdGVtSW5kZXg6IDAsXG4gICAgICAgIG1lbnVJdGVtOiB0aGlzLm1lbnVJdGVtcy50b0FycmF5KClbaW5kZXhdXG4gICAgICB9O1xuICAgICAgdGhpcy5tZW51RGF0YS5wdXNoKGl0ZW1EYXRhKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnZpZXdJbml0KSB7XG4gICAgICB0aGlzLmNoZWNrUmVxdWlyZWQoKTtcbiAgICB9XG5cblxuICAgIGNvbnN0IGxhc3RDdXJyZW50Rm9jdXNJdGVtSW5kZXggPSB0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBpZiAoaXRlbXMpIHtcbiAgICAgIHdoaWxlICghdGhpcy5pc0l0ZW1Gb2N1c2FibGUodGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXggJSBpdGVtcy5sZW5ndGgpKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ID0gKHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ICsgaXRlbXMubGVuZ3RoICsgMSkgJSBpdGVtcy5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCA9PT0gbGFzdEN1cnJlbnRGb2N1c0l0ZW1JbmRleCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWN0aXZlSXRlbUlmU3ViSXRlbUlzQWN0aXZlKGl0ZW1zOiBNZW51TmF2aWdhdGlvbkl0ZW1bXSB8IE1lbnVOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudFtdKSB7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgbGV0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbSlcbiAgICAgIGlmIChzdWJJdGVtcyBpbnN0YW5jZW9mIE1lbnVOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCkge1xuICAgICAgICBpdGVtLmFjdGl2ZSA9IHN1Ykl0ZW1zLnN1Yi5pdGVtcy5maWx0ZXIoc3ViSXRlbSA9PiBzdWJJdGVtLmFjdGl2ZSkubGVuZ3RoID4gMDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbT8uc3ViPy5pdGVtcykge1xuICAgICAgICBpdGVtLmFjdGl2ZSA9IGl0ZW0uc3ViLml0ZW1zLmZpbHRlcihzdWJJdGVtID0+IHN1Ykl0ZW0uYWN0aXZlKS5sZW5ndGggPiAwO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKlxuICAgKiBFdmVudG9zXG4gICAqL1xuXG4gIGhhbmRsZU1lbnVGb2N1c0luKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGhhbmRsZU1lbnVGb2N1c091dChldmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tZW51bmF2aWdhdGlvbi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgIH1cbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1DbGljayhldmVudCwgaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5vcGVuO1xuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub3Blbk1lbnUoaXRlbUluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmF0ZU1lbnVJdGVtKGl0ZW1JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5vcGVuTWVudShpdGVtSW5kZXgpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb2N1c0ZpcnN0U3ViSXRlbShpdGVtSW5kZXgpKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oaXRlbUluZGV4LCAtMSk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlSXRlbShpdGVtSW5kZXgsICsxKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLm9wZW5NZW51KGl0ZW1JbmRleCk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzTGFzdFN1Ykl0ZW0oaXRlbUluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzRmlyc3RJdGVtKCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNMYXN0SXRlbSgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh0aGlzLmlzUHJpbnRhYmxlQ2hhcihldmVudC5rZXkpKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0l0ZW1CeUZpcnN0Q2hhcihldmVudC5rZXkpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgsIHRydWUpO1xuICB9XG5cbiAgaGFuZGxlUG9wdXBNZW51SXRlbUNsaWNrKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICB9XG5cbiAgaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFN1YkluZGV4ID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1Ykl0ZW1JbmRleDtcbiAgICBjb25zdCBjdXJyZW50U3ViU3ViSW5kZXggPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4O1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICcgJzpcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgICAgIGlmICh0aGlzLm11c3RDbG9zZUFmdGVyU2VsZWN0UG9wdXBJdGVtKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICB0aGlzLmFjdGl2YXRlUG9wdXBNZW51SXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZVN1Ykl0ZW0oaXRlbUluZGV4LCBjdXJyZW50U3ViSW5kZXgsIGN1cnJlbnRTdWJTdWJJbmRleCwgLTEpO1xuICAgICAgICAvLyB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIChjdXJyZW50U3ViSW5kZXggKyBsaXN0TGVuZ3RoIC0gMSkgJSBsaXN0TGVuZ3RoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZVN1Ykl0ZW0oaXRlbUluZGV4LCBjdXJyZW50U3ViSW5kZXgsIGN1cnJlbnRTdWJTdWJJbmRleCwgKzEpO1xuICAgICAgICAvLyB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIChjdXJyZW50U3ViSW5kZXggKyBsaXN0TGVuZ3RoICsgMSkgJSBsaXN0TGVuZ3RoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbSgoaXRlbUluZGV4ICsgaXRlbXMubGVuZ3RoIC0gMSkgJSBpdGVtcy5sZW5ndGgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbSgoaXRlbUluZGV4ICsgaXRlbXMubGVuZ3RoICsgMSkgJSBpdGVtcy5sZW5ndGgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgdGhpcy5mb2N1c0ZpcnN0U3ViSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICBjYXNlICdQYWdlRG93bic6XG4gICAgICAgIHRoaXMuZm9jdXNMYXN0U3ViSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1JbmRleCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAodGhpcy5pc1ByaW50YWJsZUNoYXIoZXZlbnQua2V5KSkge1xuICAgICAgICAgIHRoaXMuZm9jdXNTdWJJdGVtQnlGaXJzdENoYXIoaXRlbUluZGV4LCBldmVudC5rZXkpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpO1xuICB9XG5cbiAgLypcbiAgICogQ29tdW5lc1xuICAgKi9cblxuICBjaGVja1JlcXVpcmVkKCk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICB9XG5cblxuICBhY3RpdmF0ZU1lbnVJdGVtKGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgdGhpcy5hY3RpdmVJdGVtQ2hhbmdlLmVtaXQoaXRlbXNbaXRlbUluZGV4XSBhcyBNZW51TmF2aWdhdGlvbkl0ZW0pO1xuICAgIGlmIChpdGVtc1tpdGVtSW5kZXhdIGluc3RhbmNlb2YgTWVudU5hdmlnYXRpb25JdGVtQ29tcG9uZW50KSB7XG4gICAgICAoaXRlbXNbaXRlbUluZGV4XSBhcyBNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQpLnNlbGVjdGVkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBhY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGxldCBpdGVtOiBNZW51TmF2aWdhdGlvbkl0ZW1TdWJJdGVtIHwgTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbVN1Ykl0ZW0gPSBzdWJJdGVtc1tzdWJJdGVtSW5kZXhdO1xuXG4gICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICB0aGlzLmFjdGl2ZVN1Ykl0ZW1DaGFuZ2UuZW1pdChpdGVtIGFzIE1lbnVOYXZpZ2F0aW9uSXRlbSk7XG4gICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBNZW51TmF2aWdhdGlvblN1Yml0ZW1Db21wb25lbnQpIHtcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RDbG9zZUFmdGVyU2VsZWN0UG9wdXBJdGVtKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBsZXQgaXRlbTogTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbSB8IE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW1TdWJJdGVtID0gc3ViSXRlbXNbc3ViSXRlbUluZGV4XTtcblxuICAgIHJldHVybiBpdGVtLnJvbGUgIT09ICdtZW51aXRlbWNoZWNrYm94JyAmJiBpdGVtLnJvbGUgIT09ICdtZW51aXRlbXJhZGlvJztcbiAgfVxuXG4gIG9wZW5NZW51KGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd2FzT3BlbmVkID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm9wZW47XG4gICAgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm9wZW4gPSB0cnVlO1xuICAgIGlmICh3YXNPcGVuZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVNZW51SXRlbShpdGVtSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlTWVudShpdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaXRlbUluZGV4ICE9PSBudWxsICYmIGl0ZW1JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lbnVEYXRhLmZvckVhY2goaXRlbSA9PiBpdGVtLm9wZW4gPSBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgaGFzUG9wdXBNZW51KGl0ZW1JbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICByZXR1cm4gaXRlbXNbaXRlbUluZGV4XS5zdWIgJiYgc3ViSXRlbXMgJiYgc3ViSXRlbXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgaXNQcmludGFibGVDaGFyKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0ci5sZW5ndGggPT09IDEgJiYgISFzdHIubWF0Y2goL1xcUy8pO1xuICB9XG5cblxuXG4gIC8qXG4gICAqIENvbXVuZXMgLSBmb2N1c1xuICAgKi9cblxuICBmb2N1c0l0ZW0oaXRlbUluZGV4OiBudW1iZXIsIGhvdmVyPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGhhc0ZvY3VzID0gdGhpcy5tZW51bmF2aWdhdGlvbi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMubWVudURhdGFbdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXhdLm9wZW47XG5cbiAgICBpZiAoIWhvdmVyIHx8IGhhc0ZvY3VzKSB7XG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ubWVudUl0ZW0ubGluay5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICBpZiAoaXNPcGVuICYmIHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgIHRoaXMub3Blbk1lbnUoaXRlbUluZGV4KTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCA9IGl0ZW1JbmRleDtcbiAgfVxuXG4gIGZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oZnJvbUl0ZW1JbmRleDogbnVtYmVyLCBzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgbmV4dEl0ZW0gPSBmcm9tSXRlbUluZGV4O1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGRvIHtcbiAgICAgIG5leHRJdGVtID0gKG5leHRJdGVtICsgaXRlbXMubGVuZ3RoICsgc3RlcCkgJSBpdGVtcy5sZW5ndGg7XG4gICAgfSB3aGlsZSAoIXRoaXMuaXNJdGVtRm9jdXNhYmxlKG5leHRJdGVtKSAmJiBuZXh0SXRlbSAhPT0gZnJvbUl0ZW1JbmRleCk7XG5cbiAgICBpZiAobmV4dEl0ZW0gIT09IGZyb21JdGVtSW5kZXgpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKG5leHRJdGVtKTtcbiAgICB9XG4gIH1cblxuICBmb2N1c0ZpcnN0SXRlbSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0l0ZW1Gb2N1c2FibGUoMCkpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oMCwgKzEpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzTGFzdEl0ZW0oKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgaWYgKHRoaXMuaXNJdGVtRm9jdXNhYmxlKGl0ZW1zLmxlbmd0aCAtIDEpKSB7XG4gICAgICB0aGlzLmZvY3VzSXRlbShpdGVtcy5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVJdGVtKGl0ZW1zLmxlbmd0aCAtIDEsIC0xKTtcbiAgICB9XG4gIH1cblxuICBpc0l0ZW1Gb2N1c2FibGUoaXRlbUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZ2V0SXRlbXMoKVtpdGVtSW5kZXhdLmRpc2FibGVkO1xuICB9XG5cbiAgZm9jdXNJdGVtQnlGaXJzdENoYXIoY2hhcjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbUNvbnRlbnRzOiBzdHJpbmdbXSA9IHRoaXMubWVudUl0ZW1zLm1hcChtZW51SXRlbSA9PiBtZW51SXRlbS5pdGVtQ29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCk7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXg7XG4gICAgbGV0IGZvdW5kSW5kZXggPSAtMTtcbiAgICBkbyB7XG4gICAgICBpbmRleCA9IChpbmRleCArIGl0ZW1Db250ZW50cy5sZW5ndGggKyAxKSAlIGl0ZW1Db250ZW50cy5sZW5ndGg7XG4gICAgICBpZiAoaXRlbUNvbnRlbnRzW2luZGV4XSAmJiBpdGVtQ29udGVudHNbaW5kZXhdLnRyaW0oKS5zdWJzdHIoMCwgMSkudG9Mb3dlckNhc2UoKSA9PT0gY2hhci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICYmIHRoaXMuaXNJdGVtRm9jdXNhYmxlKGluZGV4KSkge1xuICAgICAgICBmb3VuZEluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmRJbmRleCA9PT0gLTEgJiYgaW5kZXggIT09IHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4KTtcblxuICAgIGlmIChmb3VuZEluZGV4ID49IDApIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGZvdW5kSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzU3ViSXRlbShpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ubWVudUl0ZW0ucG9wdXBNZW51SXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbWVudURhdGFJbmRleCA9IHN1Ykl0ZW1JbmRleDtcbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXggPSBzdWJJdGVtSW5kZXg7XG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4ID0gc3ViU3ViSXRlbUluZGV4O1xuICAgICAgY29uc3QgZWxlbSA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5tZW51SXRlbS5wb3B1cE1lbnVJdGVtcy50b0FycmF5KClbbWVudURhdGFJbmRleF0ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgIGNvbnN0IGFFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKCdhJyk7XG4gICAgICAgIGlmIChhRWxlbSkge1xuICAgICAgICAgIGFFbGVtLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc3ViaXRlbSB0byBmb2N1cycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdObyBzdWJpdGVtcycpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzTmV4dEF2YWlsYWJsZVN1Ykl0ZW0oaXRlbUluZGV4OiBudW1iZXIsIGZyb21JdGVtU3ViSW5kZXg6IG51bWJlciwgZnJvbUl0ZW1TdWJTdWJJbmRleDogbnVtYmVyLCBzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgbmV4dFN1YkluZGV4ID0gZnJvbUl0ZW1TdWJJbmRleDtcbiAgICBsZXQgbmV4dFN1YlN1YkluZGV4ID0gZnJvbUl0ZW1TdWJTdWJJbmRleDtcbiAgICBsZXQgYWxsU3ViSXRlbXNDaGVja2VkO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IG5leHRJbmRleGVzID0gdGhpcy5nZXROZXh0U3ViSXRlbUluZGV4ZXMoaXRlbXMsIGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgsIHN0ZXApO1xuICAgICAgbmV4dFN1YkluZGV4ID0gbmV4dEluZGV4ZXMuc3ViSW5kZXg7XG4gICAgICBuZXh0U3ViU3ViSW5kZXggPSBuZXh0SW5kZXhlcy5zdWJTdWJJbmRleDtcbiAgICAgIGFsbFN1Ykl0ZW1zQ2hlY2tlZCA9IChmcm9tSXRlbVN1YkluZGV4ID09PSBuZXh0U3ViSW5kZXggJiYgZnJvbUl0ZW1TdWJTdWJJbmRleCA9PT0gbmV4dFN1YlN1YkluZGV4KTtcbiAgICB9IHdoaWxlICghdGhpcy5pc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4LCBuZXh0U3ViSW5kZXgsIG5leHRTdWJTdWJJbmRleCkgJiYgIWFsbFN1Ykl0ZW1zQ2hlY2tlZCk7XG5cbiAgICBpZiAoIWFsbFN1Ykl0ZW1zQ2hlY2tlZCkge1xuICAgICAgdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCBuZXh0U3ViSW5kZXgsIG5leHRTdWJTdWJJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNGaXJzdFN1Ykl0ZW0oaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgZmlyc3RTdWJTdWJJdGVtID0gbnVsbDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGlmIChzdWJJdGVtcyAmJiBzdWJJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICBmaXJzdFN1YlN1Ykl0ZW0gPSAwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU3ViSXRlbUZvY3VzYWJsZShpdGVtSW5kZXgsIDAsIGZpcnN0U3ViU3ViSXRlbSkpIHtcbiAgICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgMCwgZmlyc3RTdWJTdWJJdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleCwgMCwgZmlyc3RTdWJTdWJJdGVtLCArMSk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNMYXN0U3ViSXRlbShpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgY29uc3QgbGFzdEl0ZW1JbmRleCA9IHN1Ykl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgY29uc3QgbGFzdEl0ZW0gPSBzdWJJdGVtc1tsYXN0SXRlbUluZGV4XTtcbiAgICBsZXQgbGFzdFN1YlN1Ykl0ZW0gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleCwgbGFzdEl0ZW1JbmRleCwgbGFzdFN1YlN1Ykl0ZW0pKSB7XG4gICAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIGxhc3RJdGVtSW5kZXgsIGxhc3RTdWJTdWJJdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleCwgbGFzdEl0ZW1JbmRleCwgbGFzdFN1YlN1Ykl0ZW0sIC0xKTtcbiAgICB9XG4gIH1cblxuICBpc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGxldCBpdGVtOiBNZW51TmF2aWdhdGlvbkl0ZW1TdWJJdGVtIHwgTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbVN1Ykl0ZW0gPSBzdWJJdGVtc1tzdWJJdGVtSW5kZXhdO1xuXG4gICAgbGV0IGlzRm9jdXNhYmxlID0gZmFsc2U7XG4gICAgaWYgKGl0ZW0ucm9sZSAhPT0gJ3NlcGFyYXRvcicgJiYgaXRlbS5yb2xlICE9PSAnbm9uZScpIHtcbiAgICAgIGlzRm9jdXNhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGlzRm9jdXNhYmxlO1xuICB9XG5cbiAgZm9jdXNTdWJJdGVtQnlGaXJzdENoYXIoaXRlbUluZGV4OiBudW1iZXIsIGNoYXI6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1Db250ZW50czogc3RyaW5nW10gPSB0aGlzLm1lbnVJdGVtcy50b0FycmF5KClbaXRlbUluZGV4XS5wb3B1cE1lbnVJdGVtcy5tYXAobWVudUl0ZW0gPT4gbWVudUl0ZW0ubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCk7XG4gICAgbGV0IHN1Ykl0ZW1JbmRleCA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXg7XG4gICAgbGV0IHN1YlN1Ykl0ZW1JbmRleCA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJTdWJJdGVtSW5kZXg7XG4gICAgbGV0IGZvdW5kU3ViSW5kZXggPSAtMTtcbiAgICBsZXQgZm91bmRTdWJTdWJJbmRleCA9IG51bGw7XG4gICAgbGV0IGFsbFN1Ykl0ZW1zQ2hlY2tlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IG5leHRJbmRleGVzID0gdGhpcy5nZXROZXh0U3ViSXRlbUluZGV4ZXMoaXRlbXMsIGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgsICsxKTtcbiAgICAgIHN1Ykl0ZW1JbmRleCA9IG5leHRJbmRleGVzLnN1YkluZGV4O1xuICAgICAgc3ViU3ViSXRlbUluZGV4ID0gbmV4dEluZGV4ZXMuc3ViU3ViSW5kZXg7XG4gICAgICBjb25zdCBpbmRleCA9IHN1Ykl0ZW1JbmRleDtcbiAgICAgIGlmIChpdGVtQ29udGVudHNbaW5kZXhdICYmIGl0ZW1Db250ZW50c1tpbmRleF0udHJpbSgpLnN1YnN0cigwLCAxKS50b0xvd2VyQ2FzZSgpID09PSBjaGFyLnRvTG93ZXJDYXNlKClcbiAgICAgICAgJiYgdGhpcy5pc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCkpIHtcbiAgICAgICAgZm91bmRTdWJJbmRleCA9IHN1Ykl0ZW1JbmRleDtcbiAgICAgICAgZm91bmRTdWJTdWJJbmRleCA9IHN1YlN1Ykl0ZW1JbmRleDtcbiAgICAgIH1cbiAgICAgIGFsbFN1Ykl0ZW1zQ2hlY2tlZCA9ICh0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViSXRlbUluZGV4ID09PSBzdWJJdGVtSW5kZXhcbiAgICAgICAgJiYgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleCA9PT0gc3ViU3ViSXRlbUluZGV4KTtcbiAgICB9IHdoaWxlIChmb3VuZFN1YkluZGV4ID09PSAtMSAmJiAhYWxsU3ViSXRlbXNDaGVja2VkKTtcblxuICAgIGlmIChmb3VuZFN1YkluZGV4ID49IDApIHtcbiAgICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgZm91bmRTdWJJbmRleCwgZm91bmRTdWJTdWJJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogTWV0b2RvcyBwYXJhIGZhY2lsaXRhciBjb250ZW5pZG9cbiAgICovXG5cbiAgZ2V0SXRlbXMoKTogTWVudU5hdmlnYXRpb25JdGVtW10gfCBNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnRbXSB7XG4gICAgbGV0IGl0ZW1zO1xuICAgIGlmICh0aGlzLml0ZW1Db21wb25lbnRMaXN0ICYmIHRoaXMuaXRlbUNvbXBvbmVudExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgaXRlbXMgPSB0aGlzLml0ZW1Db21wb25lbnRMaXN0LnRvQXJyYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBnZXRJdGVtU3ViaXRlbXMoaXRlbTogTWVudU5hdmlnYXRpb25JdGVtIHwgTWVudU5hdmlnYXRpb25JdGVtQ29tcG9uZW50KTogTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbVtdIHwgTWVudU5hdmlnYXRpb25TdWJpdGVtQ29tcG9uZW50W10ge1xuICAgIGxldCBzdWJJdGVtcyA9IFtdO1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTWVudU5hdmlnYXRpb25JdGVtQ29tcG9uZW50KSB7XG4gICAgICBzdWJJdGVtcyA9IGl0ZW0uZ2V0U3ViSXRlbXMoKTtcbiAgICB9XG5cbiAgICBpZiAoIXN1Ykl0ZW1zIHx8IHN1Ykl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc3ViSXRlbXMgPSBpdGVtLnN1YiA/IGl0ZW0uc3ViLml0ZW1zIDogW107XG4gICAgfVxuICAgIHJldHVybiBzdWJJdGVtcztcbiAgfVxuXG4gIGdldE5leHRTdWJJdGVtSW5kZXhlcyhpdGVtcywgaXRlbUluZGV4LCBuZXh0U3ViSW5kZXgsIG5leHRTdWJTdWJJbmRleCwgc3RlcCk6IHsgc3ViSW5kZXg6IG51bWJlciwgc3ViU3ViSW5kZXg/OiBudW1iZXIgfSB7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcblxuICAgIGxldCBjaGVja05leHRTdWJJdGVtID0gdHJ1ZTtcbiAgICBpZiAoY2hlY2tOZXh0U3ViSXRlbSkge1xuICAgICAgbmV4dFN1YkluZGV4ID0gKG5leHRTdWJJbmRleCArIHN0ZXAgKyBzdWJJdGVtcy5sZW5ndGgpICUgc3ViSXRlbXMubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4geyBzdWJJbmRleDogbmV4dFN1YkluZGV4LCBzdWJTdWJJbmRleDogbmV4dFN1YlN1YkluZGV4IH07XG4gIH1cblxuICBnZXRJZFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCA6IHRoaXMuaWQgKyAnbWVudW5hdmlnYXRpb24taXRlbSc7XG4gIH1cblxuICBnZXRJdGVtSWQoaXRlbSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IGlkOiBzdHJpbmc7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICAgIGlkID0gaXRlbS5pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlkID0gYCR7dGhpcy5nZXRJZFByZWZpeCgpfS0keysraW5kZXh9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgZ2V0U3ViSXRlbUlkKGl0ZW0sIGluZGV4OiBudW1iZXIsIHBhcmVudElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBpZDogc3RyaW5nO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBpZiAoaXRlbS5pZCkge1xuICAgICAgICBpZCA9IGl0ZW0uaWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZCA9IGBzdWItJHtwYXJlbnRJZH0tJHsrK2luZGV4fWA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZDtcbiAgfVxuXG59XG4iLCI8dWwgI21lbnVuYXZpZ2F0aW9uIFtpZF09XCJpZCArICctbWVudS1uYXZpZ2F0aW9uJ1wiIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLWJhc2VcIlxuKGZvY3VzaW4pPVwiaGFuZGxlTWVudUZvY3VzSW4oKVwiXG4oZm9jdXNvdXQpPVwiaGFuZGxlTWVudUZvY3VzT3V0KCRldmVudClcIlxuW25nQ2xhc3NdPVwieyAnZm9jdXMnOiBpc0ZvY3VzZWQgfVwiXG5bYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCA/IGFyaWFMYWJlbCA6IG51bGxcIj5cbjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0SXRlbXMoKTsgaW5kZXggYXMgaXRlbUluZGV4XCI+XG48bGkgY2xhc3M9XCJyZWxhdGl2ZVwiIGRlc3lNZW51YmFyaXRlbSAoY29udGVudENoYW5nZWQpPVwiY2hlY2tDaGFuZ2VzKClcIj5cbiAgPGEgKm5nSWY9XCJpdGVtLmhyZWZcIiAjbGlua1xuICAgICAoY2xpY2spPVwiaGFuZGxlTWVudUl0ZW1DbGljaygkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAobW91c2VvdmVyKT1cImhhbmRsZU1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleClcIlxuICAgICAgKGRlc3lBdHRyaWJ1dGVDaGFuZ2UpPVwiY2hlY2tDaGFuZ2VzKClcIiBbYXR0cmlidXRlc1RvQ2hlY2tdPVwiJ2Rpc2FibGVkJ1wiXG4gICAgICBbYXR0ci5yb2xlXT1cIml0ZW0uZGlzYWJsZWQgPyBsaW5rIDogbnVsbFwiXG4gICAgICBbaWRdPVwiZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleClcIlxuICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldFwiXG4gICAgICBbaHJlZl09XCJpdGVtLmhyZWZcIlxuICAgICAgW2NsYXNzXT1cIlsnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgW25nQ2xhc3NdPVwieydjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCc6IGl0ZW0uZGlzYWJsZWQsICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1wcmltYXJ5JzogaXRlbS5hY3RpdmUsICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1oYXMtc2VsZWN0aW9uJzogaXRlbS5hY3RpdmV9XCJcbiAgICAgIFthdHRyLnRpdGxlXT1cIml0ZW0udGl0bGUgPyBpdGVtLnRpdGxlIDogbnVsbFwiXG4gICAgICBbYXR0ci5kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IChpdGVtLmFyaWFEaXNhYmxlZCA/IGl0ZW0uYXJpYURpc2FibGVkIDogbnVsbClcIlxuICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIml0ZW0uZGlzYWJsZWQgPyAncGFnZScgOiAoaXRlbS5hcmlhQ3VycmVudCA/IGl0ZW0uYXJpYUN1cnJlbnQgOiBudWxsKVwiXG4gICAgICBbZGVzeUFwcEFjY2Vzc2liaWxpdHldPVwiaXRlbVwiXG4gICAgICBbYXR0ci50YWJpbmRleF09XCJpdGVtLmRpc2FibGVkID8gLTEgOiAoaXRlbUluZGV4ID09PSBjdXJyZW50Rm9jdXNJdGVtSW5kZXggPyAwIDogLTEpXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImlubGluZS1mbGV4IHNlbGYtY2VudGVyIG1heC13LXhzIGFsaWduLW1pZGRsZSB0cnVuY2F0ZSBwb2ludGVyLWV2ZW50cy1ub25lXCIgI2l0ZW1Db250ZW50V3JhcHBlcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW0sIGh0bWw6IGl0ZW0uaHRtbCwgdGV4dDogaXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9zcGFuPiAgICAgICAgICBcbiAgPC9hPlxuICA8YSAqbmdJZj1cIiFpdGVtLmhyZWYgJiYgaXRlbS5yb3V0ZXJMaW5rXCIgI2xpbmtcbiAgICAoY2xpY2spPVwiaGFuZGxlTWVudUl0ZW1DbGljaygkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAoa2V5ZG93bik9XCJoYW5kbGVNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgKG1vdXNlb3Zlcik9XCJoYW5kbGVNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgpXCJcbiAgICAgKGRlc3lBdHRyaWJ1dGVDaGFuZ2UpPVwiY2hlY2tDaGFuZ2VzKClcIiBbYXR0cmlidXRlc1RvQ2hlY2tdPVwiJ2Rpc2FibGVkJ1wiXG4gICAgIFthdHRyLnJvbGVdPVwiaXRlbS5kaXNhYmxlZCA/IGxpbmsgOiBudWxsXCJcbiAgICAgW2lkXT1cImdldEl0ZW1JZChpdGVtLCBpdGVtSW5kZXgpXCJcbiAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldFwiXG4gICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVyTGlua1wiXG4gICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIml0ZW0ucm91dGVyTGlua0FjdGl2ZUNsYXNzZXMgPyBpdGVtLnJvdXRlckxpbmtBY3RpdmVDbGFzc2VzIDogW11cIlxuICAgICBbZnJhZ21lbnRdPVwiaXRlbS5mcmFnbWVudFwiXG4gICAgIFtjbGFzc109XCJbJ2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24nLCBpdGVtLmNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgW25nQ2xhc3NdPVwieydjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCc6IGl0ZW0uZGlzYWJsZWQsICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1wcmltYXJ5JzogaXRlbS5hY3RpdmUsICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1oYXMtc2VsZWN0aW9uJzogaXRlbS5hY3RpdmV9XCJcbiAgICAgW2F0dHIuZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCA/IGl0ZW0uZGlzYWJsZWQgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IChpdGVtLmFyaWFEaXNhYmxlZCA/IGl0ZW0uYXJpYURpc2FibGVkIDogbnVsbClcIlxuICAgICBbZGVzeUFwcEFjY2Vzc2liaWxpdHldPVwiaXRlbVwiXG4gICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJpdGVtLmRpc2FibGVkID8gJ3BhZ2UnIDogKGl0ZW0uYXJpYUN1cnJlbnQgPyBpdGVtLmFyaWFDdXJyZW50IDogbnVsbClcIlxuICAgICBbYXR0ci50YWJpbmRleF09XCJpdGVtLmRpc2FibGVkID8gLTEgOiAoaXRlbUluZGV4ID09PSBjdXJyZW50Rm9jdXNJdGVtSW5kZXggPyAwIDogLTEpXCI+XG4gICAgIDxzcGFuIGNsYXNzPVwiaW5saW5lLWZsZXggc2VsZi1jZW50ZXIgbWF4LXcteHMgYWxpZ24tbWlkZGxlIHRydW5jYXRlIHBvaW50ZXItZXZlbnRzLW5vbmVcIiAjaXRlbUNvbnRlbnRXcmFwcGVyPlxuICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBpdGVtLCBodG1sOiBpdGVtLmh0bWwsIHRleHQ6IGl0ZW0udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgPC9zcGFuPiAgICAgICAgICBcbiAgPC9hPlxuICA8YnV0dG9uICpuZ0lmPVwiIWl0ZW0uaHJlZiAmJiAhaXRlbS5yb3V0ZXJMaW5rXCIgI2xpbmsgI2l0ZW1Db250ZW50V3JhcHBlclxuICAgICAoY2xpY2spPVwiaGFuZGxlTWVudUl0ZW1DbGljaygkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAobW91c2VvdmVyKT1cImhhbmRsZU1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleClcIlxuICAgICAgKGRlc3lBdHRyaWJ1dGVDaGFuZ2UpPVwiY2hlY2tDaGFuZ2VzKClcIiBbYXR0cmlidXRlc1RvQ2hlY2tdPVwiJ2Rpc2FibGVkJ1wiXG4gICAgICBbY2xhc3NdPVwiWydjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uJywgaXRlbS5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICBbbmdDbGFzc109XCJ7J2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24tLWRpc2FibGVkJzogaXRlbS5kaXNhYmxlZCwgJ2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24tLXByaW1hcnknOiBpdGVtLmFjdGl2ZSwgJ2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24tLWhhcy1zZWxlY3Rpb24nOiBpdGVtLmFjdGl2ZX1cIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpdGVtLnN1YiA/ICghIShtZW51RGF0YSAmJiBtZW51RGF0YVtpdGVtSW5kZXhdLm9wZW4pID8gIHRydWUgOiAgZmFsc2UpIDogbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIml0ZW0uc3ViID8gKCEhKG1lbnVEYXRhICYmIG1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbikgPyAgdHJ1ZSA6ICBmYWxzZSkgOiBudWxsXCJcbiAgICAgIFthdHRyLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogKGl0ZW0uYXJpYURpc2FibGVkID8gaXRlbS5hcmlhRGlzYWJsZWQgOiBudWxsKVwiXG4gICAgICBbZGVzeUFwcEFjY2Vzc2liaWxpdHldPVwiaXRlbVwiXG4gICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIml0ZW0uc3ViID8gKGl0ZW0uYXJpYUNvbnRyb2xzID8gIGl0ZW0uYXJpYUNvbnRyb2xzIDogIGlkICsgJy1zdWItbGlzdCcpIDogbnVsbFwiXG4gICAgICBbYXR0ci50YWJpbmRleF09XCJpdGVtLmRpc2FibGVkID8gLTEgOiAoaXRlbUluZGV4ID09PSBjdXJyZW50Rm9jdXNJdGVtSW5kZXggPyAwIDogLTEpXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLmFjdGl2ZVwiIGNsYXNzPVwic3Itb25seVwiPkl0ZW0gYWN0aXZvOiA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmxpbmUtZmxleCBzZWxmLWNlbnRlciBtYXgtdy14cyBhbGlnbi1taWRkbGUgdHJ1bmNhdGUgcG9pbnRlci1ldmVudHMtbm9uZVwiICNpdGVtQ29udGVudFdyYXBwZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbSwgaHRtbDogaXRlbS5odG1sLCB0ZXh0OiBpdGVtLnRleHR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHN2ZyAqbmdJZj1cIml0ZW0uc3ViXCIgY2xhc3M9XCJpbmxpbmUtYmxvY2sgLW1yLTIgIGFsaWduLW1pZGRsZSAtbXktcHggcG9pbnRlci1ldmVudHMtbm9uZVwiIHZpZXdCb3g9XCIwIDAgOTYgOTZcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgZm9jdXNhYmxlPVwiZmFsc2VcIiB3aWR0aD1cIjEuNWVtXCIgaGVpZ2h0PVwiMS41ZW1cIj48Zz48cGF0aCBkPVwiTTQ2LjcxIDU4LjAzN2ExLjgyMyAxLjgyMyAwIDAwMi41ODEgMEw2Mi4wNDggNDUuMjhhMS44MjMgMS44MjMgMCAwMC0xLjI5LTMuMTEzSDM1LjI0M2ExLjgyMyAxLjgyMyAwIDAwLTEuMjkxIDMuMTEzelwiLz48L2c+PC9zdmc+XG4gIDwvYnV0dG9uPiAgICAgICAgXG5cbiAgPGRpdiAqbmdJZj1cIml0ZW0uc3ViICYmIGdldEl0ZW1TdWJpdGVtcyhpdGVtKVwiIGNsYXNzPVwiYy1tZW51LW5hdmlnYXRpb25fX3N1YiBhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTBcIj5cbiAgICAgIDx1bCAgW2lkXT1cImlkICsgJy1zdWItbGlzdCdcIiBbc3R5bGVdPVwibWVudURhdGEgJiYgbWVudURhdGFbaXRlbUluZGV4XS5vcGVuPydkaXNwbGF5OmJsb2NrJzonZGlzcGxheTpub25lJ1wiICNwb3B1cE1lbnUgcm9sZT1cIm1lbnVcIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgIFtjbGFzc109XCJpdGVtLnN1Yi5jbGFzc2VzID8gaXRlbS5zdWIuY2xhc3NlcyA6ICdjLW1lbnUtbmF2aWdhdGlvbl9fdG9vbHRpcCB3LW1heCBtYXgtdy02NCBib3JkZXIgYm9yZGVyLW5ldXRyYWwtYmFzZSBzaGFkb3ctbWQgYmctd2hpdGUgdGV4dC1zbSdcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLmFyaWFMYWJlbCA/IGl0ZW0uYXJpYUxhYmVsIDogKGl0ZW0uc3ViLmFyaWFMYWJlbCA/IGl0ZW0uc3ViLmFyaWFMYWJlbCA6IG51bGwpXCJcbiAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5zdWIuYXJpYURpc2FibGVkID8gaXRlbS5zdWIuYXJpYURpc2FibGVkIDogbnVsbFwiXG4gICAgICBbZGVzeUFwcEFjY2Vzc2liaWxpdHldPVwiaXRlbS5zdWJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3ViSXRlbSBvZiBnZXRJdGVtU3ViaXRlbXMoaXRlbSk7IGluZGV4IGFzIHN1Ykl0ZW1JbmRleFwiPlx0XHRcdFx0XG4gICAgICAgICAgICA8bGkgI3BvcHVwTWVudUl0ZW0gdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImdldFN1Ykl0ZW1JZChzdWJJdGVtLCBzdWJJdGVtSW5kZXgsIGdldEl0ZW1JZChpdGVtLCBpdGVtSW5kZXgpKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCI+XG4gICAgICAgICAgICAgIDxhICpuZ0lmPVwic3ViSXRlbS5ocmVmXCIgI2l0ZW1Db250ZW50V3JhcHBlclxuICAgICAgICAgICAgICAgICAgW2hyZWZdPVwic3ViSXRlbS5ocmVmXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVQb3B1cE1lbnVJdGVtQ2xpY2soaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgKGRlc3lBdHRyaWJ1dGVDaGFuZ2UpPVwiY2hlY2tDaGFuZ2VzKClcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIlsnZmxleCBpdGVtcy1jZW50ZXIgcHgtYmFzZSBweS1zbSB0ZXh0LXNtIGhvdmVyOmJnLXByaW1hcnktYmFzZSBob3Zlcjp0ZXh0LXdoaXRlIGZvY3VzOmJnLXdhcm5pbmctYmFzZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6c2hhZG93LW91dGxpbmUtZm9jdXMgZm9jdXM6dGV4dC1ibGFjaycsIHN1Ykl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydwb2ludGVyLWV2ZW50cy1ub25lJzogc3ViSXRlbS5kaXNhYmxlZH1cIlxuICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInN1Ykl0ZW0uZGlzYWJsZWQgPyAtMSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cInN1Ykl0ZW0uYWN0aXZlID8gJ3BhZ2UnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cInN1Ykl0ZW0udGFyZ2V0XCI+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwiZm9udC1ib2xkXCIgKm5nSWY9XCJzdWJJdGVtLmFjdGl2ZTsgZWxzZSBub0FjdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IHN1Ykl0ZW0sIGh0bWw6IHN1Ykl0ZW0uaHRtbCwgdGV4dDogc3ViSXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vQWN0aXZlPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IHN1Ykl0ZW0sIGh0bWw6IHN1Ykl0ZW0uaHRtbCwgdGV4dDogc3ViSXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJzdWJJdGVtLmRpc2FibGVkXCIgdmlld0JveD1cIjAgMCAxNDAgMTQwXCIgaGVpZ2h0PVwiMWVtXCIgd2lkdGg9XCIxZW1cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJpbmxpbmUtYmxvY2sgYWxpZ24tbWlkZGxlIGZsZXgtaW5pdGlhbCBtbC1zbSB0ZXh0LW5ldXRyYWwtYmFzZSBmaWxsLWN1cnJlbnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBmb2N1c2FibGU9XCJmYWxzZVwiID48cGF0aCBkPVwiTTcwIDBhNzAgNzAgMCAxMDcwIDcwQTcwLjA4IDcwLjA4IDAgMDA3MCAwek0yMCA3MGE1MCA1MCAwIDAxNzQuOC00My40IDIuNTEgMi41MSAwIDAxMS4yMyAxLjg0IDIuNDggMi40OCAwIDAxLS43MSAyLjFMMzAuNTQgOTUuMzJhMi41MSAyLjUxIDAgMDEtMy45NC0uNTJBNDkuNjMgNDkuNjMgMCAwMTIwIDcwem0xMDAgMGE1MCA1MCAwIDAxLTc0LjggNDMuNCAyLjUxIDIuNTEgMCAwMS0xLjIzLTEuODQgMi40OCAyLjQ4IDAgMDEuNzEtMi4xbDY0Ljc4LTY0Ljc4YTIuNTEgMi41MSAwIDAxMy45NC41MkE0OS42MyA0OS42MyAwIDAxMTIwIDcwelwiLz48L3N2Zz5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8YSAqbmdJZj1cIiFzdWJJdGVtLmhyZWYgJiYgc3ViSXRlbS5yb3V0ZXJMaW5rXCIgI2l0ZW1Db250ZW50V3JhcHBlclxuICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwic3ViSXRlbS5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cInN1Ykl0ZW0ucm91dGVyTGlua0FjdGl2ZUNsYXNzZXMgPyBzdWJJdGVtLnJvdXRlckxpbmtBY3RpdmVDbGFzc2VzIDogW11cIlxuICAgICAgICAgICAgICAgICAgW2ZyYWdtZW50XT1cInN1Ykl0ZW0uZnJhZ21lbnRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoZGVzeUF0dHJpYnV0ZUNoYW5nZSk9XCJjaGVja0NoYW5nZXMoKVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiWydmbGV4IGl0ZW1zLWNlbnRlciBweC1iYXNlIHB5LXNtIHRleHQtc20gaG92ZXI6YmctcHJpbWFyeS1iYXNlIGhvdmVyOnRleHQtd2hpdGUgZm9jdXM6Ymctd2FybmluZy1iYXNlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpzaGFkb3ctb3V0bGluZS1mb2N1cyBmb2N1czp0ZXh0LWJsYWNrJywgc3ViSXRlbS5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3BvaW50ZXItZXZlbnRzLW5vbmUnOiBzdWJJdGVtLmRpc2FibGVkfVwiXG4gICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwic3ViSXRlbS5kaXNhYmxlZCA/IC0xIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwic3ViSXRlbS5hY3RpdmUgPyAncGFnZScgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwic3ViSXRlbS50YXJnZXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJmb250LWJvbGRcIiAqbmdJZj1cInN1Ykl0ZW0uYWN0aXZlOyBlbHNlIG5vQWN0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogc3ViSXRlbSwgaHRtbDogc3ViSXRlbS5odG1sLCB0ZXh0OiBzdWJJdGVtLnRleHR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9BY3RpdmU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogc3ViSXRlbSwgaHRtbDogc3ViSXRlbS5odG1sLCB0ZXh0OiBzdWJJdGVtLnRleHR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInN1Ykl0ZW0uZGlzYWJsZWRcIiB2aWV3Qm94PVwiMCAwIDE0MCAxNDBcIiBoZWlnaHQ9XCIxZW1cIiB3aWR0aD1cIjFlbVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cImlubGluZS1ibG9jayBhbGlnbi1taWRkbGUgZmxleC1pbml0aWFsIG1sLXNtIHRleHQtbmV1dHJhbC1iYXNlIGZpbGwtY3VycmVudFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGZvY3VzYWJsZT1cImZhbHNlXCIgPjxwYXRoIGQ9XCJNNzAgMGE3MCA3MCAwIDEwNzAgNzBBNzAuMDggNzAuMDggMCAwMDcwIDB6TTIwIDcwYTUwIDUwIDAgMDE3NC44LTQzLjQgMi41MSAyLjUxIDAgMDExLjIzIDEuODQgMi40OCAyLjQ4IDAgMDEtLjcxIDIuMUwzMC41NCA5NS4zMmEyLjUxIDIuNTEgMCAwMS0zLjk0LS41MkE0OS42MyA0OS42MyAwIDAxMjAgNzB6bTEwMCAwYTUwIDUwIDAgMDEtNzQuOCA0My40IDIuNTEgMi41MSAwIDAxLTEuMjMtMS44NCAyLjQ4IDIuNDggMCAwMS43MS0yLjFsNjQuNzgtNjQuNzhhMi41MSAyLjUxIDAgMDEzLjk0LjUyQTQ5LjYzIDQ5LjYzIDAgMDExMjAgNzB6XCIvPjwvc3ZnPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSAqbmdJZj1cInN1Ykl0ZW0uZGl2aWRlclwiIGNsYXNzPVwibXktc20gYm9yZGVyLWIgYm9yZGVyLW5ldXRyYWwtYmFzZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Itb25seVwiPlNlcGFyYWRvcjwvZGl2PlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC91bD5cbiAgPC9kaXY+XG48L2xpPlxuPGxpICNwb3B1cE1lbnVJdGVtICpuZ0lmPVwiaXRlbS5kaXZpZGVyXCIgW2NsYXNzXT1cIml0ZW0uZGl2aWRlci5jbGFzc2VzXCIgcm9sZT1cInByZXNlbnRhdGlvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbS5kaXZpZGVyLCBodG1sOiBpdGVtLmRpdmlkZXIuaHRtbCwgdGV4dDogaXRlbS5kaXZpZGVyLnRleHR9XCI+PC9uZy1jb250YWluZXI+XG48L2xpPlxuPC9uZy1jb250YWluZXI+XG48L3VsPlxuIl19