@sbb-esta/lyne-elements 4.0.0-next.3 → 4.0.0-next.4

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 (600) hide show
  1. package/accordion/accordion.component.d.ts.map +1 -1
  2. package/accordion/accordion.component.js +29 -27
  3. package/action-group/action-group.component.js +1 -1
  4. package/alert/alert/alert.component.js +7 -7
  5. package/alert/alert-group/alert-group.component.d.ts +1 -1
  6. package/alert/alert-group/alert-group.component.d.ts.map +1 -1
  7. package/alert/alert-group/alert-group.component.js +23 -23
  8. package/autocomplete/autocomplete-base-element.d.ts +1 -0
  9. package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  10. package/autocomplete/autocomplete-base-element.js +58 -56
  11. package/autocomplete/autocomplete.component.d.ts.map +1 -1
  12. package/autocomplete/autocomplete.component.js +12 -12
  13. package/breadcrumb/breadcrumb/breadcrumb.component.js +5 -5
  14. package/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts +2 -3
  15. package/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts.map +1 -1
  16. package/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +53 -47
  17. package/button/common/button-common.d.ts.map +1 -1
  18. package/button/common/button-common.js +40 -42
  19. package/button/common.js +1 -1
  20. package/button.js +1 -1
  21. package/calendar/calendar.component.d.ts +4 -4
  22. package/calendar/calendar.component.d.ts.map +1 -1
  23. package/calendar/calendar.component.js +183 -183
  24. package/card/card/card.component.d.ts +3 -6
  25. package/card/card/card.component.d.ts.map +1 -1
  26. package/card/card/card.component.js +32 -47
  27. package/card/card-badge/card-badge.component.d.ts +0 -2
  28. package/card/card-badge/card-badge.component.d.ts.map +1 -1
  29. package/card/card-badge/card-badge.component.js +29 -36
  30. package/card/common/card-action-common.d.ts.map +1 -1
  31. package/card/common/card-action-common.js +36 -24
  32. package/checkbox/checkbox/checkbox.component.d.ts +1 -1
  33. package/checkbox/checkbox/checkbox.component.js +1 -1
  34. package/checkbox/checkbox-group/checkbox-group.component.d.ts +1 -2
  35. package/checkbox/checkbox-group/checkbox-group.component.d.ts.map +1 -1
  36. package/checkbox/checkbox-group/checkbox-group.component.js +39 -38
  37. package/checkbox/checkbox-panel/checkbox-panel.component.d.ts +1 -14
  38. package/checkbox/checkbox-panel/checkbox-panel.component.d.ts.map +1 -1
  39. package/checkbox/checkbox-panel/checkbox-panel.component.js +35 -55
  40. package/checkbox/common.js +1 -1
  41. package/checkbox-common-t04WeA36.js +5 -0
  42. package/checkbox.js +1 -1
  43. package/chip/chip-group/chip-group.component.d.ts +1 -0
  44. package/chip/chip-group/chip-group.component.d.ts.map +1 -1
  45. package/chip/chip-group/chip-group.component.js +23 -23
  46. package/clock/clock.component.d.ts +3 -1
  47. package/clock/clock.component.d.ts.map +1 -1
  48. package/clock/clock.component.js +40 -39
  49. package/container/container/container.component.d.ts.map +1 -1
  50. package/container/container/container.component.js +27 -24
  51. package/container/sticky-bar/sticky-bar.component.d.ts +3 -1
  52. package/container/sticky-bar/sticky-bar.component.d.ts.map +1 -1
  53. package/container/sticky-bar/sticky-bar.component.js +41 -41
  54. package/core/a11y/focus-visible-within-controller.d.ts +2 -1
  55. package/core/a11y/focus-visible-within-controller.d.ts.map +1 -1
  56. package/core/a11y/focus-visible-within-controller.js +8 -7
  57. package/core/base-elements/action-base-element.d.ts +1 -0
  58. package/core/base-elements/action-base-element.d.ts.map +1 -1
  59. package/core/base-elements/action-base-element.js +37 -45
  60. package/core/base-elements/button-base-element.d.ts +1 -1
  61. package/core/base-elements/button-base-element.d.ts.map +1 -1
  62. package/core/base-elements/button-base-element.js +55 -56
  63. package/core/base-elements/link-base-element.d.ts.map +1 -1
  64. package/core/base-elements/link-base-element.js +62 -64
  65. package/core/base-elements/open-close-base-element.d.ts +2 -1
  66. package/core/base-elements/open-close-base-element.d.ts.map +1 -1
  67. package/core/base-elements/open-close-base-element.js +8 -8
  68. package/core/controllers/media-matchers-controller.d.ts +4 -1
  69. package/core/controllers/media-matchers-controller.d.ts.map +1 -1
  70. package/core/controllers/media-matchers-controller.js +30 -26
  71. package/core/controllers/overlay-position-controller.d.ts +3 -2
  72. package/core/controllers/overlay-position-controller.d.ts.map +1 -1
  73. package/core/controllers/overlay-position-controller.js +35 -35
  74. package/core/controllers/property-watcher-controller.d.ts +16 -0
  75. package/core/controllers/property-watcher-controller.d.ts.map +1 -0
  76. package/core/controllers/property-watcher-controller.js +58 -0
  77. package/core/controllers.d.ts +1 -1
  78. package/core/controllers.js +21 -18
  79. package/core/datetime/date-adapter.d.ts +1 -3
  80. package/core/datetime/date-adapter.d.ts.map +1 -1
  81. package/core/dom/animation.d.ts.map +1 -1
  82. package/core/dom/animation.js +2 -2
  83. package/core/dom/set-or-remove-attribute.d.ts +0 -14
  84. package/core/dom/set-or-remove-attribute.d.ts.map +1 -1
  85. package/core/dom/set-or-remove-attribute.js +3 -11
  86. package/core/dom.d.ts +0 -2
  87. package/core/dom.d.ts.map +1 -1
  88. package/core/dom.js +25 -33
  89. package/core/i18n/i18n.d.ts +0 -2
  90. package/core/i18n/i18n.d.ts.map +1 -1
  91. package/core/i18n/i18n.js +60 -66
  92. package/core/i18n.js +53 -54
  93. package/core/interfaces/types.d.ts +0 -14
  94. package/core/interfaces/types.d.ts.map +1 -1
  95. package/core/mixins/element-internals-mixin.d.ts +14 -1
  96. package/core/mixins/element-internals-mixin.d.ts.map +1 -1
  97. package/core/mixins/element-internals-mixin.js +102 -75
  98. package/core/mixins/form-associated-mixin.js +1 -1
  99. package/core/mixins/form-associated-radio-button-mixin.js +16 -16
  100. package/core/mixins/panel-mixin.d.ts +10 -2
  101. package/core/mixins/panel-mixin.d.ts.map +1 -1
  102. package/core/mixins/panel-mixin.js +51 -37
  103. package/core/mixins/selection-panel-mixin.d.ts +5 -11
  104. package/core/mixins/selection-panel-mixin.d.ts.map +1 -1
  105. package/core/mixins/selection-panel-mixin.js +35 -83
  106. package/core/mixins.js +28 -27
  107. package/core/overlay/overlay-option-panel.d.ts +2 -1
  108. package/core/overlay/overlay-option-panel.d.ts.map +1 -1
  109. package/core/overlay/overlay-option-panel.js +9 -6
  110. package/core/styles/core.scss +32 -11
  111. package/core/styles/mixins/card.scss +71 -55
  112. package/core/testing/wait-for-render.d.ts +1 -1
  113. package/core.css +151 -26
  114. package/custom-elements.json +8452 -8203
  115. package/date-input/date-input.component.d.ts +0 -5
  116. package/date-input/date-input.component.d.ts.map +1 -1
  117. package/date-input/date-input.component.js +0 -7
  118. package/development/accordion/accordion.component.d.ts.map +1 -1
  119. package/development/accordion/accordion.component.js +5 -4
  120. package/development/action-group/action-group.component.js +2 -2
  121. package/development/alert/alert/alert.component.js +5 -5
  122. package/development/alert/alert-group/alert-group.component.d.ts +1 -1
  123. package/development/alert/alert-group/alert-group.component.d.ts.map +1 -1
  124. package/development/alert/alert-group/alert-group.component.js +5 -5
  125. package/development/autocomplete/autocomplete-base-element.d.ts +1 -0
  126. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  127. package/development/autocomplete/autocomplete-base-element.js +28 -32
  128. package/development/autocomplete/autocomplete.component.d.ts.map +1 -1
  129. package/development/autocomplete/autocomplete.component.js +2 -3
  130. package/development/breadcrumb/breadcrumb/breadcrumb.component.js +1 -1
  131. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts +2 -3
  132. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts.map +1 -1
  133. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +33 -24
  134. package/development/button/common/button-common.d.ts.map +1 -1
  135. package/development/button/common/button-common.js +8 -17
  136. package/development/button/common.js +1 -1
  137. package/development/button.js +1 -1
  138. package/development/calendar/calendar.component.d.ts +4 -4
  139. package/development/calendar/calendar.component.d.ts.map +1 -1
  140. package/development/calendar/calendar.component.js +11 -11
  141. package/development/card/card/card.component.d.ts +3 -6
  142. package/development/card/card/card.component.d.ts.map +1 -1
  143. package/development/card/card/card.component.js +91 -146
  144. package/development/card/card-badge/card-badge.component.d.ts +0 -2
  145. package/development/card/card-badge/card-badge.component.d.ts.map +1 -1
  146. package/development/card/card-badge/card-badge.component.js +34 -71
  147. package/development/card/common/card-action-common.d.ts.map +1 -1
  148. package/development/card/common/card-action-common.js +21 -10
  149. package/development/checkbox/checkbox/checkbox.component.d.ts +1 -1
  150. package/development/checkbox/checkbox/checkbox.component.js +2 -2
  151. package/development/checkbox/checkbox-group/checkbox-group.component.d.ts +1 -2
  152. package/development/checkbox/checkbox-group/checkbox-group.component.d.ts.map +1 -1
  153. package/development/checkbox/checkbox-group/checkbox-group.component.js +13 -15
  154. package/development/checkbox/checkbox-panel/checkbox-panel.component.d.ts +1 -14
  155. package/development/checkbox/checkbox-panel/checkbox-panel.component.d.ts.map +1 -1
  156. package/development/checkbox/checkbox-panel/checkbox-panel.component.js +6 -41
  157. package/development/checkbox/common.js +1 -1
  158. package/development/{checkbox-common-CX17vF7q.js → checkbox-common-D2-QcV8n.js} +4 -1
  159. package/development/checkbox.js +1 -1
  160. package/development/chip/chip-group/chip-group.component.d.ts +1 -0
  161. package/development/chip/chip-group/chip-group.component.d.ts.map +1 -1
  162. package/development/chip/chip-group/chip-group.component.js +11 -5
  163. package/development/clock/clock.component.d.ts +3 -1
  164. package/development/clock/clock.component.d.ts.map +1 -1
  165. package/development/clock/clock.component.js +5 -4
  166. package/development/container/container/container.component.d.ts.map +1 -1
  167. package/development/container/container/container.component.js +4 -3
  168. package/development/container/sticky-bar/sticky-bar.component.d.ts +3 -1
  169. package/development/container/sticky-bar/sticky-bar.component.d.ts.map +1 -1
  170. package/development/container/sticky-bar/sticky-bar.component.js +40 -34
  171. package/development/core/a11y/focus-visible-within-controller.d.ts +2 -1
  172. package/development/core/a11y/focus-visible-within-controller.d.ts.map +1 -1
  173. package/development/core/a11y/focus-visible-within-controller.js +4 -3
  174. package/development/core/a11y/interactivity-checker.js +1 -1
  175. package/development/core/base-elements/action-base-element.d.ts +1 -0
  176. package/development/core/base-elements/action-base-element.d.ts.map +1 -1
  177. package/development/core/base-elements/action-base-element.js +41 -56
  178. package/development/core/base-elements/button-base-element.d.ts +1 -1
  179. package/development/core/base-elements/button-base-element.d.ts.map +1 -1
  180. package/development/core/base-elements/button-base-element.js +7 -7
  181. package/development/core/base-elements/link-base-element.d.ts.map +1 -1
  182. package/development/core/base-elements/link-base-element.js +6 -15
  183. package/development/core/base-elements/open-close-base-element.d.ts +2 -1
  184. package/development/core/base-elements/open-close-base-element.d.ts.map +1 -1
  185. package/development/core/base-elements/open-close-base-element.js +12 -6
  186. package/development/core/controllers/media-matchers-controller.d.ts +4 -1
  187. package/development/core/controllers/media-matchers-controller.d.ts.map +1 -1
  188. package/development/core/controllers/media-matchers-controller.js +12 -5
  189. package/development/core/controllers/overlay-position-controller.d.ts +3 -2
  190. package/development/core/controllers/overlay-position-controller.d.ts.map +1 -1
  191. package/development/core/controllers/overlay-position-controller.js +3 -3
  192. package/development/core/controllers/property-watcher-controller.d.ts +16 -0
  193. package/development/core/controllers/property-watcher-controller.d.ts.map +1 -0
  194. package/development/core/controllers/property-watcher-controller.js +101 -0
  195. package/development/core/controllers.d.ts +1 -1
  196. package/development/core/controllers.js +6 -3
  197. package/development/core/datetime/date-adapter.d.ts +1 -3
  198. package/development/core/datetime/date-adapter.d.ts.map +1 -1
  199. package/development/core/datetime/date-adapter.js +1 -1
  200. package/development/core/dom/animation.d.ts.map +1 -1
  201. package/development/core/dom/animation.js +2 -2
  202. package/development/core/dom/set-or-remove-attribute.d.ts +0 -14
  203. package/development/core/dom/set-or-remove-attribute.d.ts.map +1 -1
  204. package/development/core/dom/set-or-remove-attribute.js +1 -9
  205. package/development/core/dom.d.ts +0 -2
  206. package/development/core/dom.d.ts.map +1 -1
  207. package/development/core/dom.js +2 -10
  208. package/development/core/i18n/i18n.d.ts +0 -2
  209. package/development/core/i18n/i18n.d.ts.map +1 -1
  210. package/development/core/i18n/i18n.js +1 -8
  211. package/development/core/i18n.js +1 -2
  212. package/development/core/interfaces/types.d.ts +0 -14
  213. package/development/core/interfaces/types.d.ts.map +1 -1
  214. package/development/core/mixins/element-internals-mixin.d.ts +14 -1
  215. package/development/core/mixins/element-internals-mixin.d.ts.map +1 -1
  216. package/development/core/mixins/element-internals-mixin.js +58 -10
  217. package/development/core/mixins/form-associated-input-mixin.js +1 -1
  218. package/development/core/mixins/form-associated-mixin.js +2 -2
  219. package/development/core/mixins/form-associated-radio-button-mixin.js +2 -2
  220. package/development/core/mixins/panel-mixin.d.ts +10 -2
  221. package/development/core/mixins/panel-mixin.d.ts.map +1 -1
  222. package/development/core/mixins/panel-mixin.js +24 -6
  223. package/development/core/mixins/selection-panel-mixin.d.ts +5 -11
  224. package/development/core/mixins/selection-panel-mixin.d.ts.map +1 -1
  225. package/development/core/mixins/selection-panel-mixin.js +47 -111
  226. package/development/core/mixins.js +18 -9
  227. package/development/core/overlay/overlay-option-panel.d.ts +2 -1
  228. package/development/core/overlay/overlay-option-panel.d.ts.map +1 -1
  229. package/development/core/overlay/overlay-option-panel.js +10 -2
  230. package/development/core/overlay/position.js +1 -1
  231. package/development/core/testing/wait-for-render.d.ts +1 -1
  232. package/development/core/testing/wait-for-render.js +1 -1
  233. package/development/date-input/date-input.component.d.ts +0 -5
  234. package/development/date-input/date-input.component.d.ts.map +1 -1
  235. package/development/date-input/date-input.component.js +1 -8
  236. package/development/dialog/dialog/dialog.component.js +7 -7
  237. package/development/expansion-panel/expansion-panel/expansion-panel.component.d.ts +4 -6
  238. package/development/expansion-panel/expansion-panel/expansion-panel.component.d.ts.map +1 -1
  239. package/development/expansion-panel/expansion-panel/expansion-panel.component.js +30 -33
  240. package/development/expansion-panel/expansion-panel-content/expansion-panel-content.component.d.ts +2 -0
  241. package/development/expansion-panel/expansion-panel-content/expansion-panel-content.component.d.ts.map +1 -1
  242. package/development/expansion-panel/expansion-panel-content/expansion-panel-content.component.js +17 -2
  243. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.component.d.ts +1 -0
  244. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.component.d.ts.map +1 -1
  245. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +17 -6
  246. package/development/file-selector/common/file-selector-common.d.ts.map +1 -1
  247. package/development/file-selector/common/file-selector-common.js +5 -5
  248. package/development/flip-card/flip-card/flip-card.component.d.ts +2 -1
  249. package/development/flip-card/flip-card/flip-card.component.d.ts.map +1 -1
  250. package/development/flip-card/flip-card/flip-card.component.js +25 -14
  251. package/development/flip-card/flip-card-details/flip-card-details.component.d.ts +3 -1
  252. package/development/flip-card/flip-card-details/flip-card-details.component.d.ts.map +1 -1
  253. package/development/flip-card/flip-card-details/flip-card-details.component.js +7 -6
  254. package/development/flip-card/flip-card-summary/flip-card-summary.component.d.ts +1 -2
  255. package/development/flip-card/flip-card-summary/flip-card-summary.component.d.ts.map +1 -1
  256. package/development/flip-card/flip-card-summary/flip-card-summary.component.js +1 -7
  257. package/development/form-field/error/error.component.js +2 -2
  258. package/development/form-field/form-field/form-field.component.d.ts +1 -1
  259. package/development/form-field/form-field/form-field.component.d.ts.map +1 -1
  260. package/development/form-field/form-field/form-field.component.js +2 -2
  261. package/development/form-field/form-field-clear/form-field-clear.component.js +2 -2
  262. package/development/header/common/header-action-common.js +5 -5
  263. package/development/header/header/header.component.d.ts +1 -1
  264. package/development/header/header/header.component.d.ts.map +1 -1
  265. package/development/header/header/header.component.js +14 -14
  266. package/development/header/header-environment/header-environment.component.d.ts +1 -0
  267. package/development/header/header-environment/header-environment.component.d.ts.map +1 -1
  268. package/development/header/header-environment/header-environment.component.js +8 -5
  269. package/development/icon/icon-base.d.ts +1 -0
  270. package/development/icon/icon-base.d.ts.map +1 -1
  271. package/development/icon/icon-base.js +21 -25
  272. package/development/icon/icon-validate.js +2 -2
  273. package/development/{icon-sidebar-button-common-C6QChtaa.js → icon-sidebar-button-common-DR6eQvkq.js} +4 -4
  274. package/development/image/image.component.d.ts +5 -3
  275. package/development/image/image.component.d.ts.map +1 -1
  276. package/development/image/image.component.js +10 -9
  277. package/development/link/common/block-link-common.js +1 -1
  278. package/development/link/common/inline-link-common.js +1 -1
  279. package/development/link/common/link-common.d.ts.map +1 -1
  280. package/development/link/common/link-common.js +2 -3
  281. package/development/link/common.js +1 -1
  282. package/development/{link-common-DYZHRSSJ.js → link-common-CYr3PeRf.js} +9 -16
  283. package/development/link-list/link-list-anchor/link-list-anchor.component.js +6 -6
  284. package/development/link.js +1 -1
  285. package/development/map-container/map-container.component.d.ts +3 -1
  286. package/development/map-container/map-container.component.d.ts.map +1 -1
  287. package/development/map-container/map-container.component.js +5 -4
  288. package/development/menu/common/menu-action-common.js +2 -2
  289. package/development/menu/menu/menu.component.d.ts +1 -1
  290. package/development/menu/menu/menu.component.d.ts.map +1 -1
  291. package/development/menu/menu/menu.component.js +29 -23
  292. package/development/{mini-button-common-TSDaMUCP.js → mini-button-common-CWTMR_Lu.js} +15 -15
  293. package/development/mini-calendar/mini-calendar/mini-calendar.component.d.ts.map +1 -1
  294. package/development/mini-calendar/mini-calendar/mini-calendar.component.js +7 -6
  295. package/development/mini-calendar/mini-calendar-month/mini-calendar-month.component.js +4 -4
  296. package/development/navigation/common/navigation-action-common.js +7 -7
  297. package/development/navigation/navigation/navigation.component.d.ts +0 -1
  298. package/development/navigation/navigation/navigation.component.d.ts.map +1 -1
  299. package/development/navigation/navigation/navigation.component.js +26 -38
  300. package/development/navigation/navigation-marker/navigation-marker.component.d.ts +1 -1
  301. package/development/navigation/navigation-marker/navigation-marker.component.d.ts.map +1 -1
  302. package/development/navigation/navigation-marker/navigation-marker.component.js +8 -8
  303. package/development/navigation/navigation-section/navigation-section.component.d.ts +8 -7
  304. package/development/navigation/navigation-section/navigation-section.component.d.ts.map +1 -1
  305. package/development/navigation/navigation-section/navigation-section.component.js +48 -45
  306. package/development/notification/notification.component.d.ts +3 -2
  307. package/development/notification/notification.component.d.ts.map +1 -1
  308. package/development/notification/notification.component.js +22 -19
  309. package/development/option/optgroup/optgroup-base-element.d.ts +0 -3
  310. package/development/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  311. package/development/option/optgroup/optgroup-base-element.js +6 -32
  312. package/development/option/optgroup/optgroup.component.d.ts +2 -2
  313. package/development/option/optgroup/optgroup.component.d.ts.map +1 -1
  314. package/development/option/optgroup/optgroup.component.js +21 -13
  315. package/development/option/option/option-base-element.d.ts +0 -5
  316. package/development/option/option/option-base-element.d.ts.map +1 -1
  317. package/development/option/option/option-base-element.js +8 -41
  318. package/development/option/option/option.component.d.ts +5 -4
  319. package/development/option/option/option.component.d.ts.map +1 -1
  320. package/development/option/option/option.component.js +52 -39
  321. package/development/overlay/overlay-base-element.d.ts +1 -1
  322. package/development/overlay/overlay-base-element.js +2 -2
  323. package/development/overlay/overlay.component.js +7 -7
  324. package/development/paginator/common/paginator-common.d.ts +0 -1
  325. package/development/paginator/common/paginator-common.d.ts.map +1 -1
  326. package/development/paginator/common/paginator-common.js +1 -1
  327. package/development/paginator/paginator/paginator.component.d.ts +1 -1
  328. package/development/paginator/paginator/paginator.component.d.ts.map +1 -1
  329. package/development/paginator/paginator/paginator.component.js +8 -14
  330. package/development/popover/{popover/popover.component.d.ts → popover.component.d.ts} +2 -2
  331. package/development/popover/popover.component.d.ts.map +1 -0
  332. package/development/popover/popover.component.js +720 -0
  333. package/development/popover.d.ts +1 -1
  334. package/development/popover.d.ts.map +1 -1
  335. package/development/popover.js +1 -1
  336. package/development/radio-button/common.js +1 -1
  337. package/development/radio-button/radio-button/radio-button.component.d.ts +0 -1
  338. package/development/radio-button/radio-button/radio-button.component.d.ts.map +1 -1
  339. package/development/radio-button/radio-button/radio-button.component.js +1 -2
  340. package/development/radio-button/radio-button-group/radio-button-group.component.d.ts +0 -1
  341. package/development/radio-button/radio-button-group/radio-button-group.component.d.ts.map +1 -1
  342. package/development/radio-button/radio-button-group/radio-button-group.component.js +28 -43
  343. package/development/radio-button/radio-button-panel/radio-button-panel.component.d.ts +0 -12
  344. package/development/radio-button/radio-button-panel/radio-button-panel.component.d.ts.map +1 -1
  345. package/development/radio-button/radio-button-panel/radio-button-panel.component.js +5 -37
  346. package/development/{radio-button-common-BPrInmpg.js → radio-button-common-B3kVD7QV.js} +19 -42
  347. package/development/radio-button.js +1 -1
  348. package/development/{sbb-tokens-DZrHvErO.js → sbb-tokens-CZCt5L4q.js} +9 -9
  349. package/development/select/select.component.d.ts +1 -1
  350. package/development/select/select.component.d.ts.map +1 -1
  351. package/development/select/select.component.js +31 -36
  352. package/development/selection-action-panel/selection-action-panel.component.d.ts +0 -1
  353. package/development/selection-action-panel/selection-action-panel.component.d.ts.map +1 -1
  354. package/development/selection-action-panel/selection-action-panel.component.js +22 -9
  355. package/development/selection-expansion-panel/selection-expansion-panel.component.d.ts +5 -6
  356. package/development/selection-expansion-panel/selection-expansion-panel.component.d.ts.map +1 -1
  357. package/development/selection-expansion-panel/selection-expansion-panel.component.js +35 -30
  358. package/development/sidebar/common.js +1 -1
  359. package/development/sidebar/sidebar/sidebar.component.d.ts.map +1 -1
  360. package/development/sidebar/sidebar/sidebar.component.js +13 -14
  361. package/development/sidebar/sidebar-container/sidebar-container.component.d.ts.map +1 -1
  362. package/development/sidebar/sidebar-container/sidebar-container.component.js +10 -8
  363. package/development/sidebar.js +1 -1
  364. package/development/skiplink-list/skiplink-list.component.js +1 -1
  365. package/development/stepper/step/step.component.d.ts +3 -1
  366. package/development/stepper/step/step.component.d.ts.map +1 -1
  367. package/development/stepper/step/step.component.js +25 -12
  368. package/development/stepper/step-label/step-label.component.d.ts +4 -1
  369. package/development/stepper/step-label/step-label.component.d.ts.map +1 -1
  370. package/development/stepper/step-label/step-label.component.js +40 -17
  371. package/development/stepper/stepper/stepper.component.d.ts +2 -2
  372. package/development/stepper/stepper/stepper.component.d.ts.map +1 -1
  373. package/development/stepper/stepper/stepper.component.js +21 -22
  374. package/development/tabs/tab/tab.component.d.ts +0 -5
  375. package/development/tabs/tab/tab.component.d.ts.map +1 -1
  376. package/development/tabs/tab/tab.component.js +3 -9
  377. package/development/tabs/tab-group/tab-group.component.d.ts +1 -25
  378. package/development/tabs/tab-group/tab-group.component.d.ts.map +1 -1
  379. package/development/tabs/tab-group/tab-group.component.js +19 -23
  380. package/development/tabs/tab-label/tab-label.component.d.ts +1 -0
  381. package/development/tabs/tab-label/tab-label.component.d.ts.map +1 -1
  382. package/development/tabs/tab-label/tab-label.component.js +20 -7
  383. package/development/tag/tag/tag.component.js +9 -9
  384. package/development/teaser/teaser.component.js +2 -2
  385. package/development/teaser-product/common.js +1 -1
  386. package/development/teaser-product/teaser-product/teaser-product.component.js +2 -2
  387. package/development/{teaser-product-common-v3BvyFdH.js → teaser-product-common-CJfmvweQ.js} +2 -2
  388. package/development/teaser-product.js +1 -1
  389. package/development/time-input/time-input.component.d.ts +0 -5
  390. package/development/time-input/time-input.component.d.ts.map +1 -1
  391. package/development/time-input/time-input.component.js +1 -8
  392. package/development/toast/toast.component.js +5 -5
  393. package/development/toggle/toggle/toggle.component.js +4 -4
  394. package/development/toggle/toggle-option/toggle-option.component.d.ts.map +1 -1
  395. package/development/toggle/toggle-option/toggle-option.component.js +2 -3
  396. package/development/toggle-check/toggle-check.component.js +4 -4
  397. package/development/tooltip/tooltip.component.d.ts.map +1 -1
  398. package/development/tooltip/tooltip.component.js +7 -7
  399. package/development/visual-checkbox/visual-checkbox.component.js +8 -4
  400. package/dialog/dialog/dialog.component.js +20 -20
  401. package/expansion-panel/expansion-panel/expansion-panel.component.d.ts +4 -6
  402. package/expansion-panel/expansion-panel/expansion-panel.component.d.ts.map +1 -1
  403. package/expansion-panel/expansion-panel/expansion-panel.component.js +51 -56
  404. package/expansion-panel/expansion-panel-content/expansion-panel-content.component.d.ts +2 -0
  405. package/expansion-panel/expansion-panel-content/expansion-panel-content.component.d.ts.map +1 -1
  406. package/expansion-panel/expansion-panel-content/expansion-panel-content.component.js +21 -13
  407. package/expansion-panel/expansion-panel-header/expansion-panel-header.component.d.ts +1 -0
  408. package/expansion-panel/expansion-panel-header/expansion-panel-header.component.d.ts.map +1 -1
  409. package/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +24 -20
  410. package/file-selector/common/file-selector-common.d.ts.map +1 -1
  411. package/file-selector/common/file-selector-common.js +28 -28
  412. package/flip-card/flip-card/flip-card.component.d.ts +2 -1
  413. package/flip-card/flip-card/flip-card.component.d.ts.map +1 -1
  414. package/flip-card/flip-card/flip-card.component.js +44 -40
  415. package/flip-card/flip-card-details/flip-card-details.component.d.ts +3 -1
  416. package/flip-card/flip-card-details/flip-card-details.component.d.ts.map +1 -1
  417. package/flip-card/flip-card-details/flip-card-details.component.js +15 -14
  418. package/flip-card/flip-card-summary/flip-card-summary.component.d.ts +1 -2
  419. package/flip-card/flip-card-summary/flip-card-summary.component.d.ts.map +1 -1
  420. package/flip-card/flip-card-summary/flip-card-summary.component.js +23 -26
  421. package/form-field/error/error.component.js +3 -3
  422. package/form-field/form-field/form-field.component.d.ts +1 -1
  423. package/form-field/form-field/form-field.component.d.ts.map +1 -1
  424. package/form-field/form-field/form-field.component.js +1 -1
  425. package/form-field/form-field-clear/form-field-clear.component.js +7 -7
  426. package/header/common/header-action-common.js +14 -14
  427. package/header/header/header.component.d.ts +1 -1
  428. package/header/header/header.component.d.ts.map +1 -1
  429. package/header/header/header.component.js +40 -40
  430. package/header/header-environment/header-environment.component.d.ts +1 -0
  431. package/header/header-environment/header-environment.component.d.ts.map +1 -1
  432. package/header/header-environment/header-environment.component.js +8 -9
  433. package/icon/icon-base.d.ts +1 -0
  434. package/icon/icon-base.d.ts.map +1 -1
  435. package/icon/icon-base.js +45 -48
  436. package/icon/icon-validate.js +3 -3
  437. package/{icon-sidebar-button-common-W6GYJbVt.js → icon-sidebar-button-common-ffAscVDk.js} +1 -1
  438. package/image/image.component.d.ts +5 -3
  439. package/image/image.component.d.ts.map +1 -1
  440. package/image/image.component.js +31 -30
  441. package/index.d.ts +1 -1
  442. package/index.js +1 -1
  443. package/link/common/block-link-common.js +1 -1
  444. package/link/common/inline-link-common.js +1 -1
  445. package/link/common/link-common.d.ts.map +1 -1
  446. package/link/common/link-common.js +2 -3
  447. package/link/common.js +1 -1
  448. package/link-common-D9TmX32v.js +45 -0
  449. package/link-list/link-list-anchor/link-list-anchor.component.js +9 -9
  450. package/link.js +1 -1
  451. package/map-container/map-container.component.d.ts +3 -1
  452. package/map-container/map-container.component.d.ts.map +1 -1
  453. package/map-container/map-container.component.js +18 -17
  454. package/menu/common/menu-action-common.js +5 -5
  455. package/menu/menu/menu.component.d.ts +1 -1
  456. package/menu/menu/menu.component.d.ts.map +1 -1
  457. package/menu/menu/menu.component.js +29 -28
  458. package/mini-button-common-Bb4ri3Rn.js +10 -0
  459. package/mini-calendar/mini-calendar/mini-calendar.component.d.ts.map +1 -1
  460. package/mini-calendar/mini-calendar/mini-calendar.component.js +22 -21
  461. package/navigation/common/navigation-action-common.js +10 -10
  462. package/navigation/navigation/navigation.component.d.ts +0 -1
  463. package/navigation/navigation/navigation.component.d.ts.map +1 -1
  464. package/navigation/navigation/navigation.component.js +46 -55
  465. package/navigation/navigation-marker/navigation-marker.component.d.ts +1 -1
  466. package/navigation/navigation-marker/navigation-marker.component.d.ts.map +1 -1
  467. package/navigation/navigation-marker/navigation-marker.component.js +20 -20
  468. package/navigation/navigation-section/navigation-section.component.d.ts +8 -7
  469. package/navigation/navigation-section/navigation-section.component.d.ts.map +1 -1
  470. package/navigation/navigation-section/navigation-section.component.js +65 -65
  471. package/notification/notification.component.d.ts +3 -2
  472. package/notification/notification.component.d.ts.map +1 -1
  473. package/notification/notification.component.js +22 -25
  474. package/off-brand-theme.css +151 -26
  475. package/option/optgroup/optgroup-base-element.d.ts +0 -3
  476. package/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  477. package/option/optgroup/optgroup-base-element.js +45 -64
  478. package/option/optgroup/optgroup.component.d.ts +2 -2
  479. package/option/optgroup/optgroup.component.d.ts.map +1 -1
  480. package/option/optgroup/optgroup.component.js +27 -19
  481. package/option/option/option-base-element.d.ts +0 -5
  482. package/option/option/option-base-element.d.ts.map +1 -1
  483. package/option/option/option-base-element.js +58 -74
  484. package/option/option/option.component.d.ts +5 -4
  485. package/option/option/option.component.d.ts.map +1 -1
  486. package/option/option/option.component.js +40 -36
  487. package/overlay/overlay-base-element.d.ts +1 -1
  488. package/overlay/overlay-base-element.js +1 -1
  489. package/overlay/overlay.component.js +28 -28
  490. package/package.json +1 -6
  491. package/paginator/common/paginator-common.d.ts +0 -1
  492. package/paginator/common/paginator-common.d.ts.map +1 -1
  493. package/paginator/paginator/paginator.component.d.ts +1 -1
  494. package/paginator/paginator/paginator.component.d.ts.map +1 -1
  495. package/paginator/paginator/paginator.component.js +17 -20
  496. package/popover/{popover/popover.component.d.ts → popover.component.d.ts} +2 -2
  497. package/popover/popover.component.d.ts.map +1 -0
  498. package/popover/popover.component.js +316 -0
  499. package/popover.d.ts +1 -1
  500. package/popover.d.ts.map +1 -1
  501. package/popover.js +1 -1
  502. package/radio-button/common.js +1 -1
  503. package/radio-button/radio-button/radio-button.component.d.ts +0 -1
  504. package/radio-button/radio-button/radio-button.component.d.ts.map +1 -1
  505. package/radio-button/radio-button/radio-button.component.js +4 -5
  506. package/radio-button/radio-button-group/radio-button-group.component.d.ts +0 -1
  507. package/radio-button/radio-button-group/radio-button-group.component.d.ts.map +1 -1
  508. package/radio-button/radio-button-group/radio-button-group.component.js +45 -46
  509. package/radio-button/radio-button-panel/radio-button-panel.component.d.ts +0 -12
  510. package/radio-button/radio-button-panel/radio-button-panel.component.d.ts.map +1 -1
  511. package/radio-button/radio-button-panel/radio-button-panel.component.js +36 -54
  512. package/radio-button-common-1Yg7p8dc.js +5 -0
  513. package/radio-button.js +1 -1
  514. package/safety-theme.css +151 -26
  515. package/{sbb-tokens-BNWpZrLn.js → sbb-tokens-DruExozg.js} +8 -8
  516. package/select/select.component.d.ts +1 -1
  517. package/select/select.component.d.ts.map +1 -1
  518. package/select/select.component.js +52 -52
  519. package/selection-action-panel/selection-action-panel.component.d.ts +0 -1
  520. package/selection-action-panel/selection-action-panel.component.d.ts.map +1 -1
  521. package/selection-action-panel/selection-action-panel.component.js +9 -13
  522. package/selection-expansion-panel/selection-expansion-panel.component.d.ts +5 -6
  523. package/selection-expansion-panel/selection-expansion-panel.component.d.ts.map +1 -1
  524. package/selection-expansion-panel/selection-expansion-panel.component.js +49 -55
  525. package/sidebar/common.js +1 -1
  526. package/sidebar/sidebar/sidebar.component.d.ts.map +1 -1
  527. package/sidebar/sidebar/sidebar.component.js +26 -32
  528. package/sidebar/sidebar-container/sidebar-container.component.d.ts.map +1 -1
  529. package/sidebar/sidebar-container/sidebar-container.component.js +33 -32
  530. package/sidebar.js +1 -1
  531. package/skiplink-list/skiplink-list.component.js +1 -1
  532. package/standard-theme.css +151 -26
  533. package/stepper/step/step.component.d.ts +3 -1
  534. package/stepper/step/step.component.d.ts.map +1 -1
  535. package/stepper/step/step.component.js +28 -20
  536. package/stepper/step-label/step-label.component.d.ts +4 -1
  537. package/stepper/step-label/step-label.component.d.ts.map +1 -1
  538. package/stepper/step-label/step-label.component.js +35 -23
  539. package/stepper/stepper/stepper.component.d.ts +2 -2
  540. package/stepper/stepper/stepper.component.d.ts.map +1 -1
  541. package/stepper/stepper/stepper.component.js +49 -48
  542. package/tabs/tab/tab.component.d.ts +0 -5
  543. package/tabs/tab/tab.component.d.ts.map +1 -1
  544. package/tabs/tab/tab.component.js +12 -18
  545. package/tabs/tab-group/tab-group.component.d.ts +1 -25
  546. package/tabs/tab-group/tab-group.component.d.ts.map +1 -1
  547. package/tabs/tab-group/tab-group.component.js +48 -50
  548. package/tabs/tab-label/tab-label.component.d.ts +1 -0
  549. package/tabs/tab-label/tab-label.component.d.ts.map +1 -1
  550. package/tabs/tab-label/tab-label.component.js +34 -29
  551. package/tag/tag/tag.component.js +12 -12
  552. package/teaser/teaser.component.js +1 -1
  553. package/teaser-product/common.js +1 -1
  554. package/teaser-product/teaser-product/teaser-product.component.js +1 -1
  555. package/teaser-product-common-DwaWdQEh.js +5 -0
  556. package/teaser-product.js +1 -1
  557. package/time-input/time-input.component.d.ts +0 -5
  558. package/time-input/time-input.component.d.ts.map +1 -1
  559. package/time-input/time-input.component.js +3 -10
  560. package/toast/toast.component.js +23 -23
  561. package/toggle/toggle/toggle.component.js +13 -13
  562. package/toggle/toggle-option/toggle-option.component.d.ts.map +1 -1
  563. package/toggle/toggle-option/toggle-option.component.js +20 -21
  564. package/toggle-check/toggle-check.component.js +8 -8
  565. package/tooltip/tooltip.component.d.ts.map +1 -1
  566. package/tooltip/tooltip.component.js +39 -39
  567. package/visual-checkbox/visual-checkbox.component.js +15 -15
  568. package/checkbox-common-DK5WsQPi.js +0 -5
  569. package/core/controllers/ancestor-watcher-controller.d.ts +0 -14
  570. package/core/controllers/ancestor-watcher-controller.d.ts.map +0 -1
  571. package/core/controllers/ancestor-watcher-controller.js +0 -51
  572. package/core/dom/breakpoint.d.ts +0 -16
  573. package/core/dom/breakpoint.d.ts.map +0 -1
  574. package/core/dom/breakpoint.js +0 -12
  575. package/core/dom/host-context.d.ts +0 -11
  576. package/core/dom/host-context.d.ts.map +0 -1
  577. package/core/dom/host-context.js +0 -17
  578. package/development/core/controllers/ancestor-watcher-controller.d.ts +0 -14
  579. package/development/core/controllers/ancestor-watcher-controller.d.ts.map +0 -1
  580. package/development/core/controllers/ancestor-watcher-controller.js +0 -87
  581. package/development/core/dom/breakpoint.d.ts +0 -16
  582. package/development/core/dom/breakpoint.d.ts.map +0 -1
  583. package/development/core/dom/breakpoint.js +0 -19
  584. package/development/core/dom/host-context.d.ts +0 -11
  585. package/development/core/dom/host-context.d.ts.map +0 -1
  586. package/development/core/dom/host-context.js +0 -21
  587. package/development/popover/popover/popover.component.d.ts.map +0 -1
  588. package/development/popover/popover/popover.component.js +0 -722
  589. package/development/popover/popover.d.ts +0 -5
  590. package/development/popover/popover.d.ts.map +0 -1
  591. package/development/popover/popover.js +0 -6
  592. package/link-common-CdQBSga7.js +0 -46
  593. package/mini-button-common-C3-aFB4L.js +0 -10
  594. package/popover/popover/popover.component.d.ts.map +0 -1
  595. package/popover/popover/popover.component.js +0 -321
  596. package/popover/popover.d.ts +0 -5
  597. package/popover/popover.d.ts.map +0 -1
  598. package/popover/popover.js +0 -5
  599. package/radio-button-common-chJrmIBn.js +0 -5
  600. package/teaser-product-common-a4NenpSA.js +0 -5
@@ -16,6 +16,7 @@ import { idReference } from "../../core/decorators.js";
16
16
  import { SbbScrollHandler, isZeroAnimationDuration } from "../../core/dom.js";
17
17
  import { forwardEvent } from "../../core/eventing.js";
18
18
  import { i18nGoBack } from "../../core/i18n/i18n.js";
19
+ import { ɵstateController as _stateController } from "../../core/mixins.js";
19
20
  import { isEventOnElement, removeAriaOverlayTriggerAttributes, setAriaOverlayTriggerAttributes, getElementPosition, getElementPositionHorizontal } from "../../core/overlay.js";
20
21
  import { boxSizingStyles } from "../../core/styles.js";
21
22
  import "../../divider.js";
@@ -59,12 +60,12 @@ const style = css`:host {
59
60
  }
60
61
  }
61
62
 
62
- :host(:is([data-state=opened], [data-state=opening])) {
63
+ :host(:is(:is(:state(state-opened),[state--state-opened]), :is(:state(state-opening),[state--state-opening]))) {
63
64
  --sbb-menu-visibility: visible;
64
65
  --sbb-menu-backdrop-color: color-mix(in srgb, var(--sbb-color-black) 20%, transparent);
65
66
  }
66
67
  @media (min-width: calc(64rem)) {
67
- :host(:is([data-state=opened], [data-state=opening])) {
68
+ :host(:is(:is(:state(state-opened),[state--state-opened]), :is(:state(state-opening),[state--state-opening]))) {
68
69
  --sbb-menu-backdrop-color: transparent;
69
70
  }
70
71
  }
@@ -73,7 +74,7 @@ const style = css`:host {
73
74
  --sbb-menu-back-button-display: none;
74
75
  }
75
76
 
76
- :host(:not([data-state=closed])) {
77
+ :host(:not(:is(:state(state-closed),[state--state-closed]))) {
77
78
  --sbb-menu-inset: 0;
78
79
  }
79
80
 
@@ -90,10 +91,10 @@ const style = css`:host {
90
91
  :host(:is(:state(nested-child),[state--nested-child])) {
91
92
  --sbb-menu-transform-x: -100%;
92
93
  }
93
- :host(:is(:state(nested),[state--nested])[data-state]:not([data-state=closed])) {
94
+ :host(:is(:state(nested),[state--nested]):is(:is(:state(state-opening),[state--state-opening]), :is(:state(state-opened),[state--state-opened]), :is(:state(state-closing),[state--state-closing]))) {
94
95
  --sbb-menu-open-animation-name: open-sideways;
95
96
  }
96
- :host([data-state][data-state=closing]:is(:state(nested),[state--nested]):not(:is(:state(close-all),[state--close-all]))) {
97
+ :host(:is(:state(state-closing),[state--state-closing]):is(:state(nested),[state--nested]):not(:is(:state(close-all),[state--close-all]))) {
97
98
  --sbb-menu-close-animation-name: close-sideways;
98
99
  }
99
100
  }
@@ -157,7 +158,7 @@ sbb-divider,
157
158
  translate: var(--sbb-menu-transform-x) 0;
158
159
  transition: translate var(--sbb-menu-animation-duration);
159
160
  }
160
- :host([data-state]:not([data-state=closed])) .sbb-menu {
161
+ :host(:is(:is(:state(state-opening),[state--state-opening]), :is(:state(state-opened),[state--state-opened]), :is(:state(state-closing),[state--state-closing]))) .sbb-menu {
161
162
  display: block;
162
163
  opacity: 1;
163
164
  pointer-events: all;
@@ -165,7 +166,7 @@ sbb-divider,
165
166
  animation-duration: var(--sbb-menu-animation-duration);
166
167
  animation-timing-function: var(--sbb-menu-animation-easing);
167
168
  }
168
- :host([data-state][data-state=closing]) .sbb-menu {
169
+ :host(:is(:state(state-closing),[state--state-closing])) .sbb-menu {
169
170
  pointer-events: none;
170
171
  animation-name: var(--sbb-menu-close-animation-name, close);
171
172
  }
@@ -183,7 +184,7 @@ sbb-divider,
183
184
  max-height: fit-content;
184
185
  border-radius: var(--sbb-menu-border-radius);
185
186
  }
186
- :host(:not([data-state=closed])) .sbb-menu {
187
+ :host(:not(:is(:state(state-closed),[state--state-closed]))) .sbb-menu {
187
188
  top: var(--sbb-menu-position-y);
188
189
  left: var(--sbb-menu-position-x);
189
190
  max-height: var(--sbb-menu-max-height);
@@ -236,7 +237,7 @@ sbb-divider,
236
237
  .sbb-menu__content {
237
238
  max-height: fit-content;
238
239
  }
239
- :host(:not([data-state=closed])) .sbb-menu__content {
240
+ :host(:not(:is(:state(state-closed),[state--state-closed]))) .sbb-menu__content {
240
241
  max-height: var(--sbb-menu-max-height);
241
242
  min-height: var(--sbb-menu-min-height);
242
243
  }
@@ -245,7 +246,7 @@ sbb-divider,
245
246
  }
246
247
  }
247
248
 
248
- ::slotted(:is([data-sbb-link], [data-sbb-button])) {
249
+ ::slotted(:is(:is(:state(sbb-link),[state--sbb-link]), :is(:state(sbb-button),[state--sbb-button]))) {
249
250
  color-scheme: only light;
250
251
  }
251
252
 
@@ -374,7 +375,7 @@ let SbbMenuElement = (() => {
374
375
  }
375
376
  if (this._isNested()) {
376
377
  const parentMenu = this._parentMenu();
377
- parentMenu.toggleState("nested-child", true);
378
+ parentMenu.internals.states.add("nested-child");
378
379
  if (parentMenu._nestedMenu !== this) {
379
380
  parentMenu._nestedMenu?.close();
380
381
  }
@@ -395,7 +396,7 @@ let SbbMenuElement = (() => {
395
396
  close() {
396
397
  this._close();
397
398
  }
398
- /** Closes the menu and all related menus nested and parent menus). */
399
+ /** Closes the menu and all related menus (nested and parent menus). */
399
400
  closeAll() {
400
401
  this._mainMenu()._close(true);
401
402
  }
@@ -407,9 +408,14 @@ let SbbMenuElement = (() => {
407
408
  this._nestedMenu?._close(closeAll);
408
409
  if (this._isNested()) {
409
410
  const parentMenu = this._parentMenu();
410
- this.toggleState("close-all", closeAll);
411
- parentMenu.toggleState("skip-animation", closeAll);
412
- parentMenu.toggleState("nested-child", false);
411
+ if (closeAll) {
412
+ this.internals.states.add("close-all");
413
+ parentMenu.internals.states.add("skip-animation");
414
+ } else {
415
+ this.internals.states.delete("close-all");
416
+ parentMenu.internals.states.delete("skip-animation");
417
+ }
418
+ parentMenu.internals.states.delete("nested-child");
413
419
  parentMenu._nestedMenu = null;
414
420
  }
415
421
  this.state = "closing";
@@ -436,8 +442,8 @@ let SbbMenuElement = (() => {
436
442
  }
437
443
  _handleClosing() {
438
444
  this.state = "closed";
439
- this.toggleState("skip-animation", false);
440
- this.toggleState("close-all", false);
445
+ this.internals.states.delete("skip-animation");
446
+ this.internals.states.delete("close-all");
441
447
  this.hidePopover?.();
442
448
  this._menu?.firstElementChild?.scrollTo(0, 0);
443
449
  if (!this._isNested()) {
@@ -474,7 +480,7 @@ let SbbMenuElement = (() => {
474
480
  }
475
481
  break;
476
482
  case "ArrowRight":
477
- if (evt.target.hasAttribute("data-sbb-menu-trigger")) {
483
+ if (evt.target.matches(":is(:state(sbb-menu-trigger),[state--sbb-menu-trigger])")) {
478
484
  evt.target.click();
479
485
  }
480
486
  break;
@@ -535,7 +541,7 @@ let SbbMenuElement = (() => {
535
541
  signal: this._triggerAbortController.signal
536
542
  });
537
543
  this.toggleState("nested", ["sbb-menu-button", "sbb-menu-link"].includes(this._triggerElement.localName));
538
- this._triggerElement.toggleAttribute("data-sbb-menu-trigger", true);
544
+ _stateController(this._triggerElement).add("sbb-menu-trigger");
539
545
  }
540
546
  _attachWindowEvents() {
541
547
  this._windowEventsController = new AbortController();
@@ -562,7 +568,7 @@ let SbbMenuElement = (() => {
562
568
  // Close menu at any click on an interactive element inside the <sbb-menu> that bubbles to the container.
563
569
  _interactiveElementClick(event) {
564
570
  const target = event.target;
565
- if (INTERACTIVE_ELEMENTS.includes(target.nodeName) && !target.hasAttribute("disabled") && !target.hasAttribute("data-sbb-menu-trigger") && target.id !== "sbb-menu__back-button") {
571
+ if (INTERACTIVE_ELEMENTS.includes(target.nodeName) && !target.hasAttribute("disabled") && !target.matches(":is(:state(sbb-menu-trigger),[state--sbb-menu-trigger])") && target.id !== "sbb-menu__back-button") {
566
572
  this.closeAll();
567
573
  }
568
574
  }
@@ -597,7 +603,7 @@ let SbbMenuElement = (() => {
597
603
  if (!isMobile && this._nestedMenu && !element.classList.contains("sbb-menu__content") && !(element.getAttribute("aria-expanded") === "true")) {
598
604
  this._nestedMenu.close();
599
605
  }
600
- if (element.hasAttribute("data-sbb-menu-trigger") && !isMobile) {
606
+ if (element.matches(":is(:state(sbb-menu-trigger),[state--sbb-menu-trigger])") && !isMobile) {
601
607
  element.click();
602
608
  }
603
609
  }
@@ -629,7 +635,7 @@ let SbbMenuElement = (() => {
629
635
  this.style.setProperty("--sbb-menu-max-height", menuPosition.maxHeight);
630
636
  }
631
637
  _syncNegative() {
632
- this.querySelectorAll("[data-sbb-link], [data-sbb-button]")?.forEach((el) => {
638
+ this.querySelectorAll(":is(:state(sbb-link),[state--sbb-link]), :is(:state(sbb-button),[state--sbb-button])")?.forEach((el) => {
633
639
  customElements.upgrade(el);
634
640
  el.negative = !this._darkModeController.matches();
635
641
  });
@@ -680,4 +686,4 @@ let SbbMenuElement = (() => {
680
686
  export {
681
687
  SbbMenuElement
682
688
  };
683
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9tZW51L21lbnUvbWVudS5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIHR5cGUgUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcblxuaW1wb3J0IHtcbiAgZ2V0TmV4dEVsZW1lbnRJbmRleCxcbiAgaW50ZXJhY3Rpdml0eUNoZWNrZXIsXG4gIGlzQXJyb3dLZXlPclBhZ2VLZXlzUHJlc3NlZCxcbiAgU2JiRm9jdXNUcmFwQ29udHJvbGxlcixcbn0gZnJvbSAnLi4vLi4vY29yZS9hMTF5LnRzJztcbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vLi4vY29yZS9iYXNlLWVsZW1lbnRzLnRzJztcbmltcG9ydCB7XG4gIFNiYkRhcmtNb2RlQ29udHJvbGxlcixcbiAgU2JiRXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIsXG4gIFNiYkluZXJ0Q29udHJvbGxlcixcbiAgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLFxuICBTYmJNZWRpYU1hdGNoZXJDb250cm9sbGVyLFxuICBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludFNtYWxsQW5kQmVsb3csXG59IGZyb20gJy4uLy4uL2NvcmUvY29udHJvbGxlcnMudHMnO1xuaW1wb3J0IHsgaWRSZWZlcmVuY2UgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMudHMnO1xuaW1wb3J0IHsgaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24sIFNiYlNjcm9sbEhhbmRsZXIgfSBmcm9tICcuLi8uLi9jb3JlL2RvbS50cyc7XG5pbXBvcnQgeyBmb3J3YXJkRXZlbnQgfSBmcm9tICcuLi8uLi9jb3JlL2V2ZW50aW5nLnRzJztcbmltcG9ydCB7IGkxOG5Hb0JhY2sgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYk5lZ2F0aXZlTWl4aW5UeXBlIH0gZnJvbSAnLi4vLi4vY29yZS9taXhpbnMudHMnO1xuaW1wb3J0IHtcbiAgZ2V0RWxlbWVudFBvc2l0aW9uLFxuICBnZXRFbGVtZW50UG9zaXRpb25Ib3Jpem9udGFsLFxuICBpc0V2ZW50T25FbGVtZW50LFxuICByZW1vdmVBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzLFxuICBzZXRBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzLFxufSBmcm9tICcuLi8uLi9jb3JlL292ZXJsYXkudHMnO1xuaW1wb3J0IHsgYm94U2l6aW5nU3R5bGVzIH0gZnJvbSAnLi4vLi4vY29yZS9zdHlsZXMudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJNZW51QnV0dG9uRWxlbWVudCB9IGZyb20gJy4uL21lbnUtYnV0dG9uLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiTWVudUxpbmtFbGVtZW50IH0gZnJvbSAnLi4vbWVudS1saW5rL21lbnUtbGluay5jb21wb25lbnQudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9tZW51LnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vZGl2aWRlci50cyc7XG5pbXBvcnQgJy4uL21lbnUtYnV0dG9uLnRzJztcblxuY29uc3QgTUVOVV9PRkZTRVQgPSA4O1xuY29uc3QgTkVTVEVEX01FTlVfT0ZGU0VUID0gLTQ7XG5jb25zdCBJTlRFUkFDVElWRV9FTEVNRU5UUyA9IFtcbiAgJ0EnLFxuICAnQlVUVE9OJyxcbiAgJ1NCQi1CVVRUT04nLFxuICAnU0JCLUJVVFRPTi1MSU5LJyxcbiAgJ1NCQi1MSU5LJyxcbiAgJ1NCQi1CTE9DSy1MSU5LJyxcbiAgJ1NCQi1MSU5LLUJVVFRPTicsXG4gICdTQkItQkxPQ0stTElOSy1CVVRUT04nLFxuICAnU0JCLU1FTlUtQlVUVE9OJyxcbiAgJ1NCQi1NRU5VLUxJTksnLFxuXTtcblxubGV0IG5leHRJZCA9IDA7XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYSBjb250ZXh0dWFsIG1lbnUgd2l0aCBvbmUgb3IgbW9yZSBhY3Rpb24gZWxlbWVudC5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBgc2JiLW1lbnUtYnV0dG9uYC9gc2JiLW1lbnUtbGlua2Agb3Igb3RoZXIgZWxlbWVudHMgdG8gdGhlIG1lbnUuXG4gKiBAY3NzcHJvcCBbLS1zYmItbWVudS16LWluZGV4PXZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleCldIC0gVG8gc3BlY2lmeSBhIGN1c3RvbSBzdGFjayBvcmRlcixcbiAqIHRoZSBgei1pbmRleGAgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgdGhpcyBDU1MgdmFyaWFibGUuIFRoZSBkZWZhdWx0IGB6LWluZGV4YCBvZiB0aGVcbiAqIGNvbXBvbmVudCBpcyBzZXQgdG8gYHZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleClgIHdpdGggYSB2YWx1ZSBvZiBgMTAwMGAuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1tZW51JylcbmNsYXNzIFNiYk1lbnVFbGVtZW50IGV4dGVuZHMgU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCBzdHlsZV07XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgcm9sZSA9ICdtZW51JztcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIG1lbnUgb3ZlcmxheS5cbiAgICpcbiAgICogRm9yIGF0dHJpYnV0ZSB1c2FnZSwgcHJvdmlkZSBhbiBpZCByZWZlcmVuY2UuXG4gICAqL1xuICBAaWRSZWZlcmVuY2UoKVxuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgYWNjZXNzb3IgdHJpZ2dlcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9tZW51ITogSFRNTERpdkVsZW1lbnQ7XG4gIHByaXZhdGUgX3RyaWdnZXJFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF90cmlnZ2VyQWJvcnRDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIF9pc1BvaW50ZXJEb3duRXZlbnRPbk1lbnU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfd2luZG93RXZlbnRzQ29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfZXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIgPSBuZXcgU2JiRXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX2ZvY3VzVHJhcENvbnRyb2xsZXIgPSBuZXcgU2JiRm9jdXNUcmFwQ29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfc2Nyb2xsSGFuZGxlciA9IG5ldyBTYmJTY3JvbGxIYW5kbGVyKCk7XG4gIHByaXZhdGUgX2luZXJ0Q29udHJvbGxlciA9IG5ldyBTYmJJbmVydENvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX21vYmlsZUJyZWFrcG9pbnQgPSBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludFNtYWxsQW5kQmVsb3c7XG4gIHByaXZhdGUgX21lZGlhTWF0Y2hlciA9IG5ldyBTYmJNZWRpYU1hdGNoZXJDb250cm9sbGVyKHRoaXMsIHtcbiAgICBbdGhpcy5fbW9iaWxlQnJlYWtwb2ludF06IChtYXRjaGVzKSA9PiB7XG4gICAgICBpZiAobWF0Y2hlcyAmJiAodGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnIHx8IHRoaXMuc3RhdGUgPT09ICdvcGVuZWQnKSkge1xuICAgICAgICB0aGlzLl9zY3JvbGxIYW5kbGVyLmRpc2FibGVTY3JvbGwoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3Njcm9sbEhhbmRsZXIuZW5hYmxlU2Nyb2xsKCk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG4gIHByaXZhdGUgX2RhcmtNb2RlQ29udHJvbGxlciA9IG5ldyBTYmJEYXJrTW9kZUNvbnRyb2xsZXIodGhpcywgKCkgPT4gdGhpcy5fc3luY05lZ2F0aXZlKCkpO1xuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX25lc3RlZE1lbnU6IFNiYk1lbnVFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2tleWRvd24nLCAoZSkgPT4gdGhpcy5faGFuZGxlS2V5RG93bihlKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICB0aGlzLl9jb25maWd1cmVUcmlnZ2VyKCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZXNjYXBlU3RyYXRlZ3koKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUFsbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBtZW51IG9uIHRyaWdnZXIgY2xpY2suXG4gICAqL1xuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlID09PSAnY2xvc2luZycgfHxcbiAgICAgIHRoaXMuc3RhdGUgPT09ICdvcGVuZWQnIHx8XG4gICAgICAhdGhpcy5fbWVudSB8fFxuICAgICAgIXRoaXMuZGlzcGF0Y2hCZWZvcmVPcGVuRXZlbnQoKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc05lc3RlZCgpKSB7XG4gICAgICBjb25zdCBwYXJlbnRNZW51ID0gdGhpcy5fcGFyZW50TWVudSgpITtcbiAgICAgIHBhcmVudE1lbnUudG9nZ2xlU3RhdGUoJ25lc3RlZC1jaGlsZCcsIHRydWUpO1xuXG4gICAgICAvLyBJbiBjYXNlIHdlIGNoYW5nZSBiZXR3ZWVuIGFycm93IGtleSBuYXZpZ2F0aW9uIGFuZCBtb3VzZSBuYXZpZ2F0aW9uLCBpdCBjYW4gYmUgdGhhdCBhbm90aGVyXG4gICAgICAvLyBuZXN0ZWQgcGFyZW50IG1lbnUgaXMgc3RpbGwgb3Blbi4gV2UgaGF2ZSB0byBjbG9zZSBpdC5cbiAgICAgIGlmIChwYXJlbnRNZW51Ll9uZXN0ZWRNZW51ICE9PSB0aGlzKSB7XG4gICAgICAgIHBhcmVudE1lbnUuX25lc3RlZE1lbnU/LmNsb3NlKCk7XG4gICAgICB9XG4gICAgICBwYXJlbnRNZW51Ll9uZXN0ZWRNZW51ID0gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLnNob3dQb3BvdmVyPy4oKTtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuICAgIHRoaXMuX3NldE1lbnVQb3NpdGlvbigpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuXG4gICAgLy8gRnJvbSB6ZXJvIHRvIGxhcmdlLCBkaXNhYmxlIHNjcm9sbFxuICAgIGlmICh0aGlzLl9pc01vYmlsZSgpKSB7XG4gICAgICB0aGlzLl9zY3JvbGxIYW5kbGVyLmRpc2FibGVTY3JvbGwoKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgb3BlbmVkYCBzdGF0ZS5cbiAgICBpZiAodGhpcy5faXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbG9zZXMgdGhlIG1lbnUgYW5kIGFsbCBpdHMgbmVzdGVkIG1lbnVzLiAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fY2xvc2UoKTtcbiAgfVxuXG4gIC8qKiBDbG9zZXMgdGhlIG1lbnUgYW5kIGFsbCByZWxhdGVkIG1lbnVzICBuZXN0ZWQgYW5kIHBhcmVudCBtZW51cykuICovXG4gIHB1YmxpYyBjbG9zZUFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLl9tYWluTWVudSgpLl9jbG9zZSh0cnVlKTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0gW2Nsb3NlQWxsPSdmYWxzZSddIC0gSWYgdHJ1ZSwgaXQgZW5zdXJlcyBhbmltYXRpb25zIGFyZSBjb3JyZWN0IGJ5IHRvZ2dsaW5nIHNvbWUgc3RhdGVzIHdoZW4gY2xvc2luZyBhbGwgcmVsYXRlZCBtZW51cyBhdCBvbmNlLiAqL1xuICBwcml2YXRlIF9jbG9zZShjbG9zZUFsbCA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKCh0aGlzLnN0YXRlID09PSAnb3BlbmluZycgJiYgIXRoaXMuX2lzTmVzdGVkKCkpIHx8ICF0aGlzLmRpc3BhdGNoQmVmb3JlQ2xvc2VFdmVudCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgbmVzdGVkIG1lbnVzIGZpcnN0XG4gICAgdGhpcy5fbmVzdGVkTWVudT8uX2Nsb3NlKGNsb3NlQWxsKTtcblxuICAgIGlmICh0aGlzLl9pc05lc3RlZCgpKSB7XG4gICAgICBjb25zdCBwYXJlbnRNZW51ID0gdGhpcy5fcGFyZW50TWVudSgpITtcbiAgICAgIHRoaXMudG9nZ2xlU3RhdGUoJ2Nsb3NlLWFsbCcsIGNsb3NlQWxsKTtcbiAgICAgIHBhcmVudE1lbnUudG9nZ2xlU3RhdGUoJ3NraXAtYW5pbWF0aW9uJywgY2xvc2VBbGwpO1xuICAgICAgcGFyZW50TWVudS50b2dnbGVTdGF0ZSgnbmVzdGVkLWNoaWxkJywgZmFsc2UpO1xuICAgICAgcGFyZW50TWVudS5fbmVzdGVkTWVudSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zaW5nJztcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgY2xvc2VkYCBzdGF0ZS5cbiAgICBpZiAodGhpcy5faXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgdGhpcy5faGFuZGxlQ2xvc2luZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1plcm9BbmltYXRpb25EdXJhdGlvbih0aGlzLCAnLS1zYmItbWVudS1hbmltYXRpb24tZHVyYXRpb24nKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZU9wZW5pbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuZWQnO1xuXG4gICAgaWYgKCF0aGlzLl9pc05lc3RlZCgpKSB7XG4gICAgICB0aGlzLl9pbmVydENvbnRyb2xsZXIuYWN0aXZhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdXBkYXRlTmVzdGVkSW5lcnQoKTtcbiAgICB9XG4gICAgdGhpcy5fZXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIuY29ubmVjdCgpO1xuICAgIHRoaXMuX2ZvY3VzVHJhcENvbnRyb2xsZXIuZm9jdXNJbml0aWFsRWxlbWVudCgpO1xuICAgIHRoaXMuX2ZvY3VzVHJhcENvbnRyb2xsZXIuZW5hYmxlZCA9IHRydWU7XG4gICAgdGhpcy5fYXR0YWNoV2luZG93RXZlbnRzKCk7XG4gICAgdGhpcy5kaXNwYXRjaE9wZW5FdmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlQ2xvc2luZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgdGhpcy50b2dnbGVTdGF0ZSgnc2tpcC1hbmltYXRpb24nLCBmYWxzZSk7XG4gICAgdGhpcy50b2dnbGVTdGF0ZSgnY2xvc2UtYWxsJywgZmFsc2UpO1xuICAgIHRoaXMuaGlkZVBvcG92ZXI/LigpO1xuXG4gICAgdGhpcy5fbWVudT8uZmlyc3RFbGVtZW50Q2hpbGQ/LnNjcm9sbFRvKDAsIDApO1xuICAgIGlmICghdGhpcy5faXNOZXN0ZWQoKSkge1xuICAgICAgdGhpcy5faW5lcnRDb250cm9sbGVyLmRlYWN0aXZhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdXBkYXRlTmVzdGVkSW5lcnQoKTtcbiAgICB9XG4gICAgLy8gTWFudWFsbHkgZm9jdXMgbGFzdCBmb2N1c2VkIGVsZW1lbnRcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uZm9jdXMoe1xuICAgICAgLy8gV2hlbiBpbnNpZGUgdGhlIHNiYi1oZWFkZXIsIHdlIHByZXZlbnQgdGhlIHNjcm9sbCB0byBhdm9pZCB0aGUgc25hcHBpbmcgdG8gdGhlIHRvcCBvZiB0aGUgcGFnZVxuICAgICAgcHJldmVudFNjcm9sbDogWydzYmItaGVhZGVyLWJ1dHRvbicsICdzYmItaGVhZGVyLWxpbmsnXS5pbmNsdWRlcyhcbiAgICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQubG9jYWxOYW1lLFxuICAgICAgKSxcbiAgICB9KTtcbiAgICB0aGlzLl9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5kaXNwYXRjaENsb3NlRXZlbnQoKTtcbiAgICB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX2ZvY3VzVHJhcENvbnRyb2xsZXIuZW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgLy8gU3RhcnRpbmcgZnJvbSBicmVha3BvaW50IGxhcmdlLCBlbmFibGUgc2Nyb2xsXG4gICAgdGhpcy5fc2Nyb2xsSGFuZGxlci5lbmFibGVTY3JvbGwoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUtleURvd24oZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCFpc0Fycm93S2V5T3JQYWdlS2V5c1ByZXNzZWQoZXZ0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGVuYWJsZWRBY3Rpb25zOiBFbGVtZW50W10gPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPFNiYk1lbnVCdXR0b25FbGVtZW50IHwgU2JiTWVudUxpbmtFbGVtZW50PihcbiAgICAgICAgJ3NiYi1tZW51LWJ1dHRvbiwgc2JiLW1lbnUtbGluaycsXG4gICAgICApLFxuICAgIClcbiAgICAgIC5jb25jYXQodGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCdzYmItbWVudS1idXR0b24nKSEpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoZWwpID0+ICghZWwuZGlzYWJsZWQgfHwgZWwuZGlzYWJsZWRJbnRlcmFjdGl2ZSkgJiYgaW50ZXJhY3Rpdml0eUNoZWNrZXIuaXNWaXNpYmxlKGVsKSxcbiAgICAgICk7XG4gICAgY29uc3QgY3VycmVudCA9IGVuYWJsZWRBY3Rpb25zLmZpbmRJbmRleCgoZTogRWxlbWVudCkgPT4gZSA9PT0gZXZ0LnRhcmdldCk7XG5cbiAgICBsZXQgbmV4dEluZGV4O1xuICAgIHN3aXRjaCAoZXZ0LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBuZXh0SW5kZXggPSBnZXROZXh0RWxlbWVudEluZGV4KGV2dCwgY3VycmVudCwgZW5hYmxlZEFjdGlvbnMubGVuZ3RoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGlmICh0aGlzLl9pc05lc3RlZCgpKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgaWYgKChldnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2JiLW1lbnUtdHJpZ2dlcicpKSB7XG4gICAgICAgICAgKGV2dC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgICAgbmV4dEluZGV4ID0gMDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICBjYXNlICdQYWdlRG93bic6XG4gICAgICAgIG5leHRJbmRleCA9IGVuYWJsZWRBY3Rpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChuZXh0SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgKGVuYWJsZWRBY3Rpb25zW25leHRJbmRleF0gYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVtb3ZlcyB0cmlnZ2VyIGNsaWNrIGxpc3RlbmVyIG9uIHRyaWdnZXIgY2hhbmdlLlxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY3JlYXRlUmVuZGVyUm9vdCgpOiBIVE1MRWxlbWVudCB8IERvY3VtZW50RnJhZ21lbnQge1xuICAgIGNvbnN0IHJlbmRlclJvb3QgPSBzdXBlci5jcmVhdGVSZW5kZXJSb290KCk7XG4gICAgLy8gRHVlIHRvIHRoZSBmYWN0IHRoYXQgbWVudSBjYW4gYm90aCBiZSBhIGxpc3QgYW5kIGp1c3QgYSBjb250YWluZXIsIHdlIG5lZWQgdG8gY2hlY2sgaXRzXG4gICAgLy8gc3RhdGUgYmVmb3JlIHRoZSBTYmJOYW1lZFNsb3RMaXN0TWl4aW4gaGFuZGxlcyB0aGUgc2xvdGNoYW5nZSBldmVudCwgaW4gb3JkZXIgdG8gYXZvaWRcbiAgICAvLyBpdCBpbnRlcnByZXRpbmcgdGhlIG5vbiBsaXN0IGNhc2UgYXMgYSBsaXN0LlxuICAgIHRoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcignc2xvdGNoYW5nZScsICgpID0+IHRoaXMuX3N5bmNOZWdhdGl2ZSgpLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgcmV0dXJuIHJlbmRlclJvb3Q7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgdGhpcy5wb3BvdmVyID0gJ21hbnVhbCc7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmlkIHx8PSBgc2JiLW1lbnUtJHtuZXh0SWQrK31gO1xuICAgIGlmICh0aGlzLmhhc1VwZGF0ZWQpIHtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyZVRyaWdnZXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudCA9IG51bGw7XG4gICAgdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX3Njcm9sbEhhbmRsZXIuZW5hYmxlU2Nyb2xsKCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgcmVxdWVzdFVwZGF0ZShcbiAgICBuYW1lPzogUHJvcGVydHlLZXksXG4gICAgb2xkVmFsdWU/OiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICApOiB2b2lkIHtcbiAgICBzdXBlci5yZXF1ZXN0VXBkYXRlKG5hbWUsIG9sZFZhbHVlLCBvcHRpb25zKTtcblxuICAgIGlmICghaXNTZXJ2ZXIgJiYgKCFuYW1lIHx8IG5hbWUgPT09ICd0cmlnZ2VyJykgJiYgdGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICB0aGlzLl9jb25maWd1cmVUcmlnZ2VyKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHRyaWdnZXIgaXMgdmFsaWQgYW5kIGF0dGFjaCBjbGljayBldmVudCBsaXN0ZW5lcnMuXG4gIHByaXZhdGUgX2NvbmZpZ3VyZVRyaWdnZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gdGhpcy5fdHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHJlbW92ZUFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXModGhpcy5fdHJpZ2dlckVsZW1lbnQpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50ID0gdGhpcy50cmlnZ2VyO1xuXG4gICAgaWYgKCF0aGlzLl90cmlnZ2VyRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldEFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXModGhpcy5fdHJpZ2dlckVsZW1lbnQsICdtZW51JywgdGhpcy5pZCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHRoaXMub3BlbigpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgLy8gQ29uc2lkZXIgdGhlIG1lbnUgYXMgbmVzdGVkIGlmIHRoZSB0cmlnZ2VyIGlzIGEgbWVudSBidXR0b24gb3IgbWVudSBsaW5rLlxuICAgIHRoaXMudG9nZ2xlU3RhdGUoXG4gICAgICAnbmVzdGVkJyxcbiAgICAgIFsnc2JiLW1lbnUtYnV0dG9uJywgJ3NiYi1tZW51LWxpbmsnXS5pbmNsdWRlcyh0aGlzLl90cmlnZ2VyRWxlbWVudC5sb2NhbE5hbWUpLFxuICAgICk7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCdkYXRhLXNiYi1tZW51LXRyaWdnZXInLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaFdpbmRvd0V2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHRoaXMuX3NldE1lbnVQb3NpdGlvbigpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIC8vIFdpdGhvdXQgY2FwdHVyZSwgb3RoZXIgc2Nyb2xsIGNvbnRleHRzIHdvdWxkIG5vdCBidWJibGUgdG8gdGhpcyBldmVudCBsaXN0ZW5lci5cbiAgICAgIC8vIENhcHR1cmUgYWxsb3dzIHVzIHRvIHJlYWN0IHRvIGFsbCBzY3JvbGwgY29udGV4dHMgaW4gdGhpcyBET00uXG4gICAgICBjYXB0dXJlOiB0cnVlLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLl9zZXRNZW51UG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBPbmx5IHRoZSBvdXRlcm1vc3QgbWVudSBuZWVkcyB0byBsaXN0ZW4gdG8gdGhlIGJhY2tkcm9wIGNsaWNrc1xuICAgIGlmICghdGhpcy5faXNOZXN0ZWQoKSkge1xuICAgICAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGlja1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lciwge1xuICAgICAgICBzaWduYWw6IHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5fY2xvc2VPbkJhY2tkcm9wQ2xpY2ssIHtcbiAgICAgICAgc2lnbmFsOiB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIENsb3NlIG1lbnUgYXQgYW55IGNsaWNrIG9uIGFuIGludGVyYWN0aXZlIGVsZW1lbnQgaW5zaWRlIHRoZSA8c2JiLW1lbnU+IHRoYXQgYnViYmxlcyB0byB0aGUgY29udGFpbmVyLlxuICBwcml2YXRlIF9pbnRlcmFjdGl2ZUVsZW1lbnRDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoXG4gICAgICBJTlRFUkFDVElWRV9FTEVNRU5UUy5pbmNsdWRlcyh0YXJnZXQubm9kZU5hbWUpICYmXG4gICAgICAhdGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSAmJlxuICAgICAgIXRhcmdldC5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2JiLW1lbnUtdHJpZ2dlcicpICYmXG4gICAgICB0YXJnZXQuaWQgIT09ICdzYmItbWVudV9fYmFjay1idXR0b24nXG4gICAgKSB7XG4gICAgICB0aGlzLmNsb3NlQWxsKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHBvaW50ZXJkb3duIGV2ZW50IHRhcmdldCBpcyB0cmlnZ2VyZWQgb24gdGhlIG1lbnUuXG4gIHByaXZhdGUgX3BvaW50ZXJEb3duTGlzdGVuZXIgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IG1lbnUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCdzYmItbWVudScpO1xuXG4gICAgLy8gVGhlIHBvaW50ZXIgZG93biBpcyBvbiB0aGUgbWVudSBvciBvbmUgb2YgaXRzIG5lc3RlZCBtZW51cy5cbiAgICB0aGlzLl9pc1BvaW50ZXJEb3duRXZlbnRPbk1lbnUgPVxuICAgICAgaXNFdmVudE9uRWxlbWVudCh0aGlzLl9tZW51LCBldmVudCkgfHwgdGhpcy5fbmVzdGVkTWVudXMoKS5zb21lKChlbCkgPT4gbWVudSA9PT0gZWwpO1xuICB9O1xuXG4gIC8vIENsb3NlIG1lbnUgb24gYmFja2Ryb3AgY2xpY2suXG4gIHByaXZhdGUgX2Nsb3NlT25CYWNrZHJvcENsaWNrID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAvLyBUaGUgYmFja2Ryb3AgaXMgb25seSBsaXN0ZW5lZCBvbiB0aGUgbWFpbiBtZW51IChvdXRlcm1vc3QgbWVudSkuXG4gICAgLy8gVG8gY2xvc2UuXG4gICAgLy8gLSBUaGUgcG9pbnRlciBkb3duIGFuZCB1cCBuZWVkIHRvIGJlIG91dHNpZGUgdGhlIG1lbnUuXG4gICAgLy8gLSBUaGUgdGFyZ2V0IHNob3VsZCBiZSBub3Qgb24gYSBuZXN0ZWQgbWVudVxuICAgIGlmIChcbiAgICAgICF0aGlzLl9pc1BvaW50ZXJEb3duRXZlbnRPbk1lbnUgJiZcbiAgICAgICFpc0V2ZW50T25FbGVtZW50KHRoaXMuX21lbnUsIGV2ZW50KSAmJlxuICAgICAgIXRoaXMuX25lc3RlZE1lbnVzKCkuc29tZSgoZWwpID0+IGVsID09PSB0YXJnZXQpXG4gICAgKSB7XG4gICAgICB0aGlzLmNsb3NlQWxsKCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKiBDb252ZXJ0cyB0aGUgbGlua2VkIGxpc3QgaW50byBhbiBhcnJheSBvZiBTYmJNZW51RWxlbWVudC4gKi9cbiAgcHJpdmF0ZSBfbmVzdGVkTWVudXMoKTogU2JiTWVudUVsZW1lbnRbXSB7XG4gICAgY29uc3QgbWVudXM6IFNiYk1lbnVFbGVtZW50W10gPSBbXTtcbiAgICBsZXQgY3VycmVudCA9IHRoaXMuX25lc3RlZE1lbnU7XG5cbiAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgbWVudXMucHVzaChjdXJyZW50KTtcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Ll9uZXN0ZWRNZW51O1xuICAgIH1cblxuICAgIHJldHVybiBtZW51cztcbiAgfVxuXG4gIHByaXZhdGUgX3BhcmVudE1lbnUoKTogU2JiTWVudUVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LmNsb3Nlc3QoJ3NiYi1tZW51JykgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKiBUaGUgb3V0ZXJtb3N0IG1lbnUuICovXG4gIHByaXZhdGUgX21haW5NZW51KCk6IFNiYk1lbnVFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5faXNOZXN0ZWQoKSA/ICh0aGlzLl9wYXJlbnRNZW51KCk/Ll9tYWluTWVudSgpID8/IHRoaXMpIDogdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgX2lzTmVzdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuX3BhcmVudE1lbnUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZU5lc3RlZEluZXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuX2luZXJ0Q29udHJvbGxlci5yZXN0b3JlQWxsRXhlbXB0ZWQoKTtcbiAgICB0aGlzLl9tYWluTWVudSgpXG4gICAgICAuX25lc3RlZE1lbnVzKClcbiAgICAgIC5mb3JFYWNoKChtZW51KSA9PiB0aGlzLl9pbmVydENvbnRyb2xsZXIuZXhlbXB0KG1lbnUpKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIG5lc3RlZCBtZW51IHNob3VsZCBiZSBjbG9zZWQuXG4gIHByaXZhdGUgX2hhbmRsZU1vdXNlT3ZlcihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgaXNNb2JpbGUgPSB0aGlzLl9pc01vYmlsZSgpO1xuXG4gICAgLy8gQWxsIG5lc3RlZCBtZW51cyBzaG91bGQgY2xvc2UgaW4gZGVza3RvcCBtb2RlIGlmIHRoZSBjdXJzb3IgbGFuZGVkIG9uXG4gICAgLy8gYW55dGhpbmcgb3RoZXIgdGhhbiB0aGUgY29udGFpbmVyLCB0aGUgY29udGFpbmVyJ3Mgc2Nyb2xsYmFyIG9yIHRoZSB0cmlnZ2VyIGl0c2VsZlxuICAgIGlmIChcbiAgICAgICFpc01vYmlsZSAmJlxuICAgICAgdGhpcy5fbmVzdGVkTWVudSAmJlxuICAgICAgIWVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdzYmItbWVudV9fY29udGVudCcpICYmXG4gICAgICAhKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJykgPT09ICd0cnVlJylcbiAgICApIHtcbiAgICAgIHRoaXMuX25lc3RlZE1lbnUuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2JiLW1lbnUtdHJpZ2dlcicpICYmICFpc01vYmlsZSkge1xuICAgICAgZWxlbWVudC5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBtZW51IHBvc2l0aW9uICh4LCB5KSB0byAnMCcgb25jZSB0aGUgbWVudSBpcyBjbG9zZWQgYW5kIHRoZSB0cmFuc2l0aW9uIGVuZGVkIHRvIHByZXZlbnQgdGhlXG4gIC8vIHZpZXdwb3J0IGZyb20gb3ZlcmZsb3dpbmcuIEFuZCBzZXQgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBvbmNlIHRoZSBtZW51IGlzIG9wZW4uXG4gIC8vIEluIHJhcmUgY2FzZXMgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gIC8vIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgcHJpdmF0ZSBfb25NZW51QW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIChldmVudC5hbmltYXRpb25OYW1lID09PSAnb3BlbicgfHwgZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4tc2lkZXdheXMnKSAmJlxuICAgICAgdGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnXG4gICAgKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIChldmVudC5hbmltYXRpb25OYW1lID09PSAnY2xvc2UnIHx8IGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdjbG9zZS1zaWRld2F5cycpICYmXG4gICAgICB0aGlzLnN0YXRlID09PSAnY2xvc2luZydcbiAgICApIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgbWVudSBwb3NpdGlvbiBhbmQgbWF4IGhlaWdodCBpZiB0aGUgYnJlYWtwb2ludCBpcyBsYXJnZS11bHRyYS5cbiAgcHJpdmF0ZSBfc2V0TWVudVBvc2l0aW9uKCk6IHZvaWQge1xuICAgIC8vIFN0YXJ0aW5nIGZyb20gYnJlYWtwb2ludCBsYXJnZVxuICAgIGlmICh0aGlzLl9pc01vYmlsZSgpIHx8ICF0aGlzLl9tZW51IHx8ICF0aGlzLl90cmlnZ2VyRWxlbWVudCB8fCB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZW51UG9zaXRpb24gPSAhdGhpcy5faXNOZXN0ZWQoKVxuICAgICAgPyBnZXRFbGVtZW50UG9zaXRpb24oXG4gICAgICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcuc2JiLW1lbnVfX2NvbnRlbnQnKSEsXG4gICAgICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQsXG4gICAgICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcuc2JiLW1lbnVfX2NvbnRhaW5lcicpISxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0aWNhbE9mZnNldDogTUVOVV9PRkZTRVQsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgOiBnZXRFbGVtZW50UG9zaXRpb25Ib3Jpem9udGFsKFxuICAgICAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignLnNiYi1tZW51X19jb250ZW50JykhLFxuICAgICAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LFxuICAgICAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignLnNiYi1tZW51X19jb250YWluZXInKSEsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaG9yaXpvbnRhbE9mZnNldDogTUVOVV9PRkZTRVQsXG4gICAgICAgICAgICB2ZXJ0aWNhbE9mZnNldDogTkVTVEVEX01FTlVfT0ZGU0VULFxuICAgICAgICAgICAgY29udGVudFNlbGVjdG9yOiAnLnNiYi1tZW51X19jb250ZW50JyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItbWVudS1wb3NpdGlvbi14JywgYCR7bWVudVBvc2l0aW9uLmxlZnR9cHhgKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXNiYi1tZW51LXBvc2l0aW9uLXknLCBgJHttZW51UG9zaXRpb24udG9wfXB4YCk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItbWVudS1tYXgtaGVpZ2h0JywgbWVudVBvc2l0aW9uLm1heEhlaWdodCk7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jTmVnYXRpdmUoKTogdm9pZCB7XG4gICAgLy8gTGlua3MgYW5kIGJ1dHRvbnMgYXJlIHRoZSBtb3N0IGV4cGVjdGVkIGNvbnRlbnRzIHdoaWNoIGhhdmUgYSBuZWdhdGl2ZSBwcm9wZXJ0eVxuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc2JiLWxpbmtdLCBbZGF0YS1zYmItYnV0dG9uXScpPy5mb3JFYWNoKChlbDogRWxlbWVudCkgPT4ge1xuICAgICAgY3VzdG9tRWxlbWVudHMudXBncmFkZShlbCk7XG4gICAgICAoZWwgYXMgRWxlbWVudCAmIFNiYk5lZ2F0aXZlTWl4aW5UeXBlKS5uZWdhdGl2ZSA9ICF0aGlzLl9kYXJrTW9kZUNvbnRyb2xsZXIubWF0Y2hlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX21lZGlhTWF0Y2hlci5tYXRjaGVzKHRoaXMuX21vYmlsZUJyZWFrcG9pbnQpID8/IHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAvLyBUT0RPOiBIYW5kbGUgY2FzZSB3aXRoIG90aGVyIGVsZW1lbnRzIHRoYW4gc2JiLW1lbnUtYnV0dG9uL3NiYi1tZW51LWxpbmsuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLW1lbnVfX2NvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgQGFuaW1hdGlvbmVuZD0ke3RoaXMuX29uTWVudUFuaW1hdGlvbkVuZH1cbiAgICAgICAgICBAbW91c2VvdmVyPSR7KGU6IE1vdXNlRXZlbnQpID0+IHRoaXMuX2hhbmRsZU1vdXNlT3ZlcihlKX1cbiAgICAgICAgICBjbGFzcz1cInNiYi1tZW51XCJcbiAgICAgICAgICAke3JlZigoZWw/OiBFbGVtZW50KSA9PiAodGhpcy5fbWVudSA9IGVsIGFzIEhUTUxEaXZFbGVtZW50KSl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBAY2xpY2s9JHsoZXZlbnQ6IEV2ZW50KSA9PiB0aGlzLl9pbnRlcmFjdGl2ZUVsZW1lbnRDbGljayhldmVudCl9XG4gICAgICAgICAgICBAc2Nyb2xsPSR7KGU6IEV2ZW50KSA9PiBmb3J3YXJkRXZlbnQoZSwgZG9jdW1lbnQpfVxuICAgICAgICAgICAgY2xhc3M9XCJzYmItbWVudV9fY29udGVudFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICAgICAgPHNiYi1kaXZpZGVyPjwvc2JiLWRpdmlkZXI+XG4gICAgICAgICAgICA8c2JiLW1lbnUtYnV0dG9uXG4gICAgICAgICAgICAgIGlkPVwic2JiLW1lbnVfX2JhY2stYnV0dG9uXCJcbiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5jbG9zZSgpfVxuICAgICAgICAgICAgICBpY29uLW5hbWU9XCJjaGV2cm9uLXNtYWxsLWxlZnQtc21hbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAke2kxOG5Hb0JhY2tbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19XG4gICAgICAgICAgICA8L3NiYi1tZW51LWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItbWVudSc6IFNiYk1lbnVFbGVtZW50O1xuICB9XG59XG4iXSwi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
689
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9tZW51L21lbnUvbWVudS5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIHR5cGUgUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcblxuaW1wb3J0IHtcbiAgZ2V0TmV4dEVsZW1lbnRJbmRleCxcbiAgaW50ZXJhY3Rpdml0eUNoZWNrZXIsXG4gIGlzQXJyb3dLZXlPclBhZ2VLZXlzUHJlc3NlZCxcbiAgU2JiRm9jdXNUcmFwQ29udHJvbGxlcixcbn0gZnJvbSAnLi4vLi4vY29yZS9hMTF5LnRzJztcbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vLi4vY29yZS9iYXNlLWVsZW1lbnRzLnRzJztcbmltcG9ydCB7XG4gIFNiYkRhcmtNb2RlQ29udHJvbGxlcixcbiAgU2JiRXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIsXG4gIFNiYkluZXJ0Q29udHJvbGxlcixcbiAgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLFxuICBTYmJNZWRpYU1hdGNoZXJDb250cm9sbGVyLFxuICBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludFNtYWxsQW5kQmVsb3csXG59IGZyb20gJy4uLy4uL2NvcmUvY29udHJvbGxlcnMudHMnO1xuaW1wb3J0IHsgaWRSZWZlcmVuY2UgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMudHMnO1xuaW1wb3J0IHsgaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24sIFNiYlNjcm9sbEhhbmRsZXIgfSBmcm9tICcuLi8uLi9jb3JlL2RvbS50cyc7XG5pbXBvcnQgeyBmb3J3YXJkRXZlbnQgfSBmcm9tICcuLi8uLi9jb3JlL2V2ZW50aW5nLnRzJztcbmltcG9ydCB7IGkxOG5Hb0JhY2sgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyDJtXN0YXRlQ29udHJvbGxlciwgdHlwZSBTYmJOZWdhdGl2ZU1peGluVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLnRzJztcbmltcG9ydCB7XG4gIGdldEVsZW1lbnRQb3NpdGlvbixcbiAgZ2V0RWxlbWVudFBvc2l0aW9uSG9yaXpvbnRhbCxcbiAgaXNFdmVudE9uRWxlbWVudCxcbiAgcmVtb3ZlQXJpYU92ZXJsYXlUcmlnZ2VyQXR0cmlidXRlcyxcbiAgc2V0QXJpYU92ZXJsYXlUcmlnZ2VyQXR0cmlidXRlcyxcbn0gZnJvbSAnLi4vLi4vY29yZS9vdmVybGF5LnRzJztcbmltcG9ydCB7IGJveFNpemluZ1N0eWxlcyB9IGZyb20gJy4uLy4uL2NvcmUvc3R5bGVzLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiTWVudUJ1dHRvbkVsZW1lbnQgfSBmcm9tICcuLi9tZW51LWJ1dHRvbi50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYk1lbnVMaW5rRWxlbWVudCB9IGZyb20gJy4uL21lbnUtbGluay9tZW51LWxpbmsuY29tcG9uZW50LnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vbWVudS5zY3NzP2xpdCZpbmxpbmUnO1xuXG5pbXBvcnQgJy4uLy4uL2RpdmlkZXIudHMnO1xuaW1wb3J0ICcuLi9tZW51LWJ1dHRvbi50cyc7XG5cbmNvbnN0IE1FTlVfT0ZGU0VUID0gODtcbmNvbnN0IE5FU1RFRF9NRU5VX09GRlNFVCA9IC00O1xuY29uc3QgSU5URVJBQ1RJVkVfRUxFTUVOVFMgPSBbXG4gICdBJyxcbiAgJ0JVVFRPTicsXG4gICdTQkItQlVUVE9OJyxcbiAgJ1NCQi1CVVRUT04tTElOSycsXG4gICdTQkItTElOSycsXG4gICdTQkItQkxPQ0stTElOSycsXG4gICdTQkItTElOSy1CVVRUT04nLFxuICAnU0JCLUJMT0NLLUxJTkstQlVUVE9OJyxcbiAgJ1NCQi1NRU5VLUJVVFRPTicsXG4gICdTQkItTUVOVS1MSU5LJyxcbl07XG5cbmxldCBuZXh0SWQgPSAwO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGEgY29udGV4dHVhbCBtZW51IHdpdGggb25lIG9yIG1vcmUgYWN0aW9uIGVsZW1lbnQuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgYHNiYi1tZW51LWJ1dHRvbmAvYHNiYi1tZW51LWxpbmtgIG9yIG90aGVyIGVsZW1lbnRzIHRvIHRoZSBtZW51LlxuICogQGNzc3Byb3AgWy0tc2JiLW1lbnUtei1pbmRleD12YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpXSAtIFRvIHNwZWNpZnkgYSBjdXN0b20gc3RhY2sgb3JkZXIsXG4gKiB0aGUgYHotaW5kZXhgIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nIHRoaXMgQ1NTIHZhcmlhYmxlLiBUaGUgZGVmYXVsdCBgei1pbmRleGAgb2YgdGhlXG4gKiBjb21wb25lbnQgaXMgc2V0IHRvIGB2YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpYCB3aXRoIGEgdmFsdWUgb2YgYDEwMDBgLlxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItbWVudScpXG5jbGFzcyBTYmJNZW51RWxlbWVudCBleHRlbmRzIFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgc3R5bGVdO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IHJvbGUgPSAnbWVudSc7XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoYXQgd2lsbCB0cmlnZ2VyIHRoZSBtZW51IG92ZXJsYXkuXG4gICAqXG4gICAqIEZvciBhdHRyaWJ1dGUgdXNhZ2UsIHByb3ZpZGUgYW4gaWQgcmVmZXJlbmNlLlxuICAgKi9cbiAgQGlkUmVmZXJlbmNlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIHRyaWdnZXI6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfbWVudSE6IEhUTUxEaXZFbGVtZW50O1xuICBwcml2YXRlIF90cmlnZ2VyRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfdHJpZ2dlckFib3J0Q29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfaXNQb2ludGVyRG93bkV2ZW50T25NZW51OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX2VzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyID0gbmV3IFNiYkVzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyKHRoaXMpO1xuICBwcml2YXRlIF9mb2N1c1RyYXBDb250cm9sbGVyID0gbmV3IFNiYkZvY3VzVHJhcENvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX3Njcm9sbEhhbmRsZXIgPSBuZXcgU2JiU2Nyb2xsSGFuZGxlcigpO1xuICBwcml2YXRlIF9pbmVydENvbnRyb2xsZXIgPSBuZXcgU2JiSW5lcnRDb250cm9sbGVyKHRoaXMpO1xuICBwcml2YXRlIF9tb2JpbGVCcmVha3BvaW50ID0gU2JiTWVkaWFRdWVyeUJyZWFrcG9pbnRTbWFsbEFuZEJlbG93O1xuICBwcml2YXRlIF9tZWRpYU1hdGNoZXIgPSBuZXcgU2JiTWVkaWFNYXRjaGVyQ29udHJvbGxlcih0aGlzLCB7XG4gICAgW3RoaXMuX21vYmlsZUJyZWFrcG9pbnRdOiAobWF0Y2hlcykgPT4ge1xuICAgICAgaWYgKG1hdGNoZXMgJiYgKHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJyB8fCB0aGlzLnN0YXRlID09PSAnb3BlbmVkJykpIHtcbiAgICAgICAgdGhpcy5fc2Nyb2xsSGFuZGxlci5kaXNhYmxlU2Nyb2xsKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zY3JvbGxIYW5kbGVyLmVuYWJsZVNjcm9sbCgpO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBwcml2YXRlIF9kYXJrTW9kZUNvbnRyb2xsZXIgPSBuZXcgU2JiRGFya01vZGVDb250cm9sbGVyKHRoaXMsICgpID0+IHRoaXMuX3N5bmNOZWdhdGl2ZSgpKTtcbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuICBwcml2YXRlIF9uZXN0ZWRNZW51OiBTYmJNZW51RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdrZXlkb3duJywgKGUpID0+IHRoaXMuX2hhbmRsZUtleURvd24oZSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgdGhpcy5fY29uZmlndXJlVHJpZ2dlcigpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGVzY2FwZVN0cmF0ZWd5KCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VBbGwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgbWVudSBvbiB0cmlnZ2VyIGNsaWNrLlxuICAgKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zdGF0ZSA9PT0gJ2Nsb3NpbmcnIHx8XG4gICAgICB0aGlzLnN0YXRlID09PSAnb3BlbmVkJyB8fFxuICAgICAgIXRoaXMuX21lbnUgfHxcbiAgICAgICF0aGlzLmRpc3BhdGNoQmVmb3JlT3BlbkV2ZW50KClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faXNOZXN0ZWQoKSkge1xuICAgICAgY29uc3QgcGFyZW50TWVudSA9IHRoaXMuX3BhcmVudE1lbnUoKSE7XG4gICAgICBwYXJlbnRNZW51LmludGVybmFscy5zdGF0ZXMuYWRkKCduZXN0ZWQtY2hpbGQnKTtcblxuICAgICAgLy8gSW4gY2FzZSB3ZSBjaGFuZ2UgYmV0d2VlbiBhcnJvdyBrZXkgbmF2aWdhdGlvbiBhbmQgbW91c2UgbmF2aWdhdGlvbiwgaXQgY2FuIGJlIHRoYXQgYW5vdGhlclxuICAgICAgLy8gbmVzdGVkIHBhcmVudCBtZW51IGlzIHN0aWxsIG9wZW4uIFdlIGhhdmUgdG8gY2xvc2UgaXQuXG4gICAgICBpZiAocGFyZW50TWVudS5fbmVzdGVkTWVudSAhPT0gdGhpcykge1xuICAgICAgICBwYXJlbnRNZW51Ll9uZXN0ZWRNZW51Py5jbG9zZSgpO1xuICAgICAgfVxuICAgICAgcGFyZW50TWVudS5fbmVzdGVkTWVudSA9IHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93UG9wb3Zlcj8uKCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuaW5nJztcbiAgICB0aGlzLl9zZXRNZW51UG9zaXRpb24oKTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTtcblxuICAgIC8vIEZyb20gemVybyB0byBsYXJnZSwgZGlzYWJsZSBzY3JvbGxcbiAgICBpZiAodGhpcy5faXNNb2JpbGUoKSkge1xuICAgICAgdGhpcy5fc2Nyb2xsSGFuZGxlci5kaXNhYmxlU2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHNldCB0aGUgYG9wZW5lZGAgc3RhdGUuXG4gICAgaWYgKHRoaXMuX2lzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuX2hhbmRsZU9wZW5pbmcoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2xvc2VzIHRoZSBtZW51IGFuZCBhbGwgaXRzIG5lc3RlZCBtZW51cy4gKi9cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Nsb3NlKCk7XG4gIH1cblxuICAvKiogQ2xvc2VzIHRoZSBtZW51IGFuZCBhbGwgcmVsYXRlZCBtZW51cyAobmVzdGVkIGFuZCBwYXJlbnQgbWVudXMpLiAqL1xuICBwdWJsaWMgY2xvc2VBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5fbWFpbk1lbnUoKS5fY2xvc2UodHJ1ZSk7XG4gIH1cblxuICAvKiogQHBhcmFtIFtjbG9zZUFsbD0nZmFsc2UnXSAtIElmIHRydWUsIGl0IGVuc3VyZXMgYW5pbWF0aW9ucyBhcmUgY29ycmVjdCBieSB0b2dnbGluZyBzb21lIHN0YXRlcyB3aGVuIGNsb3NpbmcgYWxsIHJlbGF0ZWQgbWVudXMgYXQgb25jZS4gKi9cbiAgcHJpdmF0ZSBfY2xvc2UoY2xvc2VBbGwgPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICgodGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnICYmICF0aGlzLl9pc05lc3RlZCgpKSB8fCAhdGhpcy5kaXNwYXRjaEJlZm9yZUNsb3NlRXZlbnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENsb3NlIG5lc3RlZCBtZW51cyBmaXJzdFxuICAgIHRoaXMuX25lc3RlZE1lbnU/Ll9jbG9zZShjbG9zZUFsbCk7XG5cbiAgICBpZiAodGhpcy5faXNOZXN0ZWQoKSkge1xuICAgICAgY29uc3QgcGFyZW50TWVudSA9IHRoaXMuX3BhcmVudE1lbnUoKSE7XG4gICAgICBpZiAoY2xvc2VBbGwpIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZCgnY2xvc2UtYWxsJyk7XG4gICAgICAgIHBhcmVudE1lbnUuaW50ZXJuYWxzLnN0YXRlcy5hZGQoJ3NraXAtYW5pbWF0aW9uJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKCdjbG9zZS1hbGwnKTtcbiAgICAgICAgcGFyZW50TWVudS5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZSgnc2tpcC1hbmltYXRpb24nKTtcbiAgICAgIH1cbiAgICAgIHBhcmVudE1lbnUuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUoJ25lc3RlZC1jaGlsZCcpO1xuICAgICAgcGFyZW50TWVudS5fbmVzdGVkTWVudSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zaW5nJztcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgY2xvc2VkYCBzdGF0ZS5cbiAgICBpZiAodGhpcy5faXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgdGhpcy5faGFuZGxlQ2xvc2luZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1plcm9BbmltYXRpb25EdXJhdGlvbih0aGlzLCAnLS1zYmItbWVudS1hbmltYXRpb24tZHVyYXRpb24nKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZU9wZW5pbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuZWQnO1xuXG4gICAgaWYgKCF0aGlzLl9pc05lc3RlZCgpKSB7XG4gICAgICB0aGlzLl9pbmVydENvbnRyb2xsZXIuYWN0aXZhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdXBkYXRlTmVzdGVkSW5lcnQoKTtcbiAgICB9XG4gICAgdGhpcy5fZXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIuY29ubmVjdCgpO1xuICAgIHRoaXMuX2ZvY3VzVHJhcENvbnRyb2xsZXIuZm9jdXNJbml0aWFsRWxlbWVudCgpO1xuICAgIHRoaXMuX2ZvY3VzVHJhcENvbnRyb2xsZXIuZW5hYmxlZCA9IHRydWU7XG4gICAgdGhpcy5fYXR0YWNoV2luZG93RXZlbnRzKCk7XG4gICAgdGhpcy5kaXNwYXRjaE9wZW5FdmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlQ2xvc2luZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZSgnc2tpcC1hbmltYXRpb24nKTtcbiAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKCdjbG9zZS1hbGwnKTtcbiAgICB0aGlzLmhpZGVQb3BvdmVyPy4oKTtcblxuICAgIHRoaXMuX21lbnU/LmZpcnN0RWxlbWVudENoaWxkPy5zY3JvbGxUbygwLCAwKTtcbiAgICBpZiAoIXRoaXMuX2lzTmVzdGVkKCkpIHtcbiAgICAgIHRoaXMuX2luZXJ0Q29udHJvbGxlci5kZWFjdGl2YXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3VwZGF0ZU5lc3RlZEluZXJ0KCk7XG4gICAgfVxuICAgIC8vIE1hbnVhbGx5IGZvY3VzIGxhc3QgZm9jdXNlZCBlbGVtZW50XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LmZvY3VzKHtcbiAgICAgIC8vIFdoZW4gaW5zaWRlIHRoZSBzYmItaGVhZGVyLCB3ZSBwcmV2ZW50IHRoZSBzY3JvbGwgdG8gYXZvaWQgdGhlIHNuYXBwaW5nIHRvIHRoZSB0b3Agb2YgdGhlIHBhZ2VcbiAgICAgIHByZXZlbnRTY3JvbGw6IFsnc2JiLWhlYWRlci1idXR0b24nLCAnc2JiLWhlYWRlci1saW5rJ10uaW5jbHVkZXMoXG4gICAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmxvY2FsTmFtZSxcbiAgICAgICksXG4gICAgfSk7XG4gICAgdGhpcy5fZXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuZGlzcGF0Y2hDbG9zZUV2ZW50KCk7XG4gICAgdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9mb2N1c1RyYXBDb250cm9sbGVyLmVuYWJsZWQgPSBmYWxzZTtcblxuICAgIC8vIFN0YXJ0aW5nIGZyb20gYnJlYWtwb2ludCBsYXJnZSwgZW5hYmxlIHNjcm9sbFxuICAgIHRoaXMuX3Njcm9sbEhhbmRsZXIuZW5hYmxlU2Nyb2xsKCk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVLZXlEb3duKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghaXNBcnJvd0tleU9yUGFnZUtleXNQcmVzc2VkKGV2dCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBlbmFibGVkQWN0aW9uczogRWxlbWVudFtdID0gQXJyYXkuZnJvbShcbiAgICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbDxTYmJNZW51QnV0dG9uRWxlbWVudCB8IFNiYk1lbnVMaW5rRWxlbWVudD4oXG4gICAgICAgICdzYmItbWVudS1idXR0b24sIHNiYi1tZW51LWxpbmsnLFxuICAgICAgKSxcbiAgICApXG4gICAgICAuY29uY2F0KHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3Rvcignc2JiLW1lbnUtYnV0dG9uJykhKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGVsKSA9PiAoIWVsLmRpc2FibGVkIHx8IGVsLmRpc2FibGVkSW50ZXJhY3RpdmUpICYmIGludGVyYWN0aXZpdHlDaGVja2VyLmlzVmlzaWJsZShlbCksXG4gICAgICApO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBlbmFibGVkQWN0aW9ucy5maW5kSW5kZXgoKGU6IEVsZW1lbnQpID0+IGUgPT09IGV2dC50YXJnZXQpO1xuXG4gICAgbGV0IG5leHRJbmRleDtcbiAgICBzd2l0Y2ggKGV2dC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgbmV4dEluZGV4ID0gZ2V0TmV4dEVsZW1lbnRJbmRleChldnQsIGN1cnJlbnQsIGVuYWJsZWRBY3Rpb25zLmxlbmd0aCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICBpZiAodGhpcy5faXNOZXN0ZWQoKSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIGlmICgoZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudCkubWF0Y2hlcygnOnN0YXRlKHNiYi1tZW51LXRyaWdnZXIpJykpIHtcbiAgICAgICAgICAoZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgICBuZXh0SW5kZXggPSAwO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgbmV4dEluZGV4ID0gZW5hYmxlZEFjdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKG5leHRJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAoZW5hYmxlZEFjdGlvbnNbbmV4dEluZGV4XSBhcyBIVE1MRWxlbWVudCkuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmVzIHRyaWdnZXIgY2xpY2sgbGlzdGVuZXIgb24gdHJpZ2dlciBjaGFuZ2UuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBjcmVhdGVSZW5kZXJSb290KCk6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgY29uc3QgcmVuZGVyUm9vdCA9IHN1cGVyLmNyZWF0ZVJlbmRlclJvb3QoKTtcbiAgICAvLyBEdWUgdG8gdGhlIGZhY3QgdGhhdCBtZW51IGNhbiBib3RoIGJlIGEgbGlzdCBhbmQganVzdCBhIGNvbnRhaW5lciwgd2UgbmVlZCB0byBjaGVjayBpdHNcbiAgICAvLyBzdGF0ZSBiZWZvcmUgdGhlIFNiYk5hbWVkU2xvdExpc3RNaXhpbiBoYW5kbGVzIHRoZSBzbG90Y2hhbmdlIGV2ZW50LCBpbiBvcmRlciB0byBhdm9pZFxuICAgIC8vIGl0IGludGVycHJldGluZyB0aGUgbm9uIGxpc3QgY2FzZSBhcyBhIGxpc3QuXG4gICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCdzbG90Y2hhbmdlJywgKCkgPT4gdGhpcy5fc3luY05lZ2F0aXZlKCksIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICByZXR1cm4gcmVuZGVyUm9vdDtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLnBvcG92ZXIgPSAnbWFudWFsJztcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuaWQgfHw9IGBzYmItbWVudS0ke25leHRJZCsrfWA7XG4gICAgaWYgKHRoaXMuaGFzVXBkYXRlZCkge1xuICAgICAgdGhpcy5fY29uZmlndXJlVHJpZ2dlcigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fc2Nyb2xsSGFuZGxlci5lbmFibGVTY3JvbGwoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSByZXF1ZXN0VXBkYXRlKFxuICAgIG5hbWU/OiBQcm9wZXJ0eUtleSxcbiAgICBvbGRWYWx1ZT86IHVua25vd24sXG4gICAgb3B0aW9ucz86IFByb3BlcnR5RGVjbGFyYXRpb24sXG4gICk6IHZvaWQge1xuICAgIHN1cGVyLnJlcXVlc3RVcGRhdGUobmFtZSwgb2xkVmFsdWUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFpc1NlcnZlciAmJiAoIW5hbWUgfHwgbmFtZSA9PT0gJ3RyaWdnZXInKSAmJiB0aGlzLmhhc1VwZGF0ZWQpIHtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyZVRyaWdnZXIoKTtcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgdHJpZ2dlciBpcyB2YWxpZCBhbmQgYXR0YWNoIGNsaWNrIGV2ZW50IGxpc3RlbmVycy5cbiAgcHJpdmF0ZSBfY29uZmlndXJlVHJpZ2dlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlnZ2VyID09PSB0aGlzLl90cmlnZ2VyRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgcmVtb3ZlQXJpYU92ZXJsYXlUcmlnZ2VyQXR0cmlidXRlcyh0aGlzLl90cmlnZ2VyRWxlbWVudCk7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQgPSB0aGlzLnRyaWdnZXI7XG5cbiAgICBpZiAoIXRoaXMuX3RyaWdnZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0QXJpYU92ZXJsYXlUcmlnZ2VyQXR0cmlidXRlcyh0aGlzLl90cmlnZ2VyRWxlbWVudCwgJ21lbnUnLCB0aGlzLmlkLCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5vcGVuKCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBDb25zaWRlciB0aGUgbWVudSBhcyBuZXN0ZWQgaWYgdGhlIHRyaWdnZXIgaXMgYSBtZW51IGJ1dHRvbiBvciBtZW51IGxpbmsuXG4gICAgdGhpcy50b2dnbGVTdGF0ZShcbiAgICAgICduZXN0ZWQnLFxuICAgICAgWydzYmItbWVudS1idXR0b24nLCAnc2JiLW1lbnUtbGluayddLmluY2x1ZGVzKHRoaXMuX3RyaWdnZXJFbGVtZW50LmxvY2FsTmFtZSksXG4gICAgKTtcbiAgICDJtXN0YXRlQ29udHJvbGxlcih0aGlzLl90cmlnZ2VyRWxlbWVudCkuYWRkKCdzYmItbWVudS10cmlnZ2VyJyk7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hXaW5kb3dFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB0aGlzLl9zZXRNZW51UG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgICAvLyBXaXRob3V0IGNhcHR1cmUsIG90aGVyIHNjcm9sbCBjb250ZXh0cyB3b3VsZCBub3QgYnViYmxlIHRvIHRoaXMgZXZlbnQgbGlzdGVuZXIuXG4gICAgICAvLyBDYXB0dXJlIGFsbG93cyB1cyB0byByZWFjdCB0byBhbGwgc2Nyb2xsIGNvbnRleHRzIGluIHRoaXMgRE9NLlxuICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4gdGhpcy5fc2V0TWVudVBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgLy8gT25seSB0aGUgb3V0ZXJtb3N0IG1lbnUgbmVlZHMgdG8gbGlzdGVuIHRvIHRoZSBiYWNrZHJvcCBjbGlja3NcbiAgICBpZiAoIXRoaXMuX2lzTmVzdGVkKCkpIHtcbiAgICAgIC8vIENsb3NlIG1lbnUgb24gYmFja2Ryb3AgY2xpY2tcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIsIHtcbiAgICAgICAgc2lnbmFsOiB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMuX2Nsb3NlT25CYWNrZHJvcENsaWNrLCB7XG4gICAgICAgIHNpZ25hbDogdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBDbG9zZSBtZW51IGF0IGFueSBjbGljayBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IGluc2lkZSB0aGUgPHNiYi1tZW51PiB0aGF0IGJ1YmJsZXMgdG8gdGhlIGNvbnRhaW5lci5cbiAgcHJpdmF0ZSBfaW50ZXJhY3RpdmVFbGVtZW50Q2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgaWYgKFxuICAgICAgSU5URVJBQ1RJVkVfRUxFTUVOVFMuaW5jbHVkZXModGFyZ2V0Lm5vZGVOYW1lKSAmJlxuICAgICAgIXRhcmdldC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgJiZcbiAgICAgICF0YXJnZXQubWF0Y2hlcygnOnN0YXRlKHNiYi1tZW51LXRyaWdnZXIpJykgJiZcbiAgICAgIHRhcmdldC5pZCAhPT0gJ3NiYi1tZW51X19iYWNrLWJ1dHRvbidcbiAgICApIHtcbiAgICAgIHRoaXMuY2xvc2VBbGwoKTtcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcG9pbnRlcmRvd24gZXZlbnQgdGFyZ2V0IGlzIHRyaWdnZXJlZCBvbiB0aGUgbWVudS5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgY29uc3QgbWVudSA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJ3NiYi1tZW51Jyk7XG5cbiAgICAvLyBUaGUgcG9pbnRlciBkb3duIGlzIG9uIHRoZSBtZW51IG9yIG9uZSBvZiBpdHMgbmVzdGVkIG1lbnVzLlxuICAgIHRoaXMuX2lzUG9pbnRlckRvd25FdmVudE9uTWVudSA9XG4gICAgICBpc0V2ZW50T25FbGVtZW50KHRoaXMuX21lbnUsIGV2ZW50KSB8fCB0aGlzLl9uZXN0ZWRNZW51cygpLnNvbWUoKGVsKSA9PiBtZW51ID09PSBlbCk7XG4gIH07XG5cbiAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGljay5cbiAgcHJpdmF0ZSBfY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblxuICAgIC8vIFRoZSBiYWNrZHJvcCBpcyBvbmx5IGxpc3RlbmVkIG9uIHRoZSBtYWluIG1lbnUgKG91dGVybW9zdCBtZW51KS5cbiAgICAvLyBUbyBjbG9zZS5cbiAgICAvLyAtIFRoZSBwb2ludGVyIGRvd24gYW5kIHVwIG5lZWQgdG8gYmUgb3V0c2lkZSB0aGUgbWVudS5cbiAgICAvLyAtIFRoZSB0YXJnZXQgc2hvdWxkIGJlIG5vdCBvbiBhIG5lc3RlZCBtZW51XG4gICAgaWYgKFxuICAgICAgIXRoaXMuX2lzUG9pbnRlckRvd25FdmVudE9uTWVudSAmJlxuICAgICAgIWlzRXZlbnRPbkVsZW1lbnQodGhpcy5fbWVudSwgZXZlbnQpICYmXG4gICAgICAhdGhpcy5fbmVzdGVkTWVudXMoKS5zb21lKChlbCkgPT4gZWwgPT09IHRhcmdldClcbiAgICApIHtcbiAgICAgIHRoaXMuY2xvc2VBbGwoKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqIENvbnZlcnRzIHRoZSBsaW5rZWQgbGlzdCBpbnRvIGFuIGFycmF5IG9mIFNiYk1lbnVFbGVtZW50LiAqL1xuICBwcml2YXRlIF9uZXN0ZWRNZW51cygpOiBTYmJNZW51RWxlbWVudFtdIHtcbiAgICBjb25zdCBtZW51czogU2JiTWVudUVsZW1lbnRbXSA9IFtdO1xuICAgIGxldCBjdXJyZW50ID0gdGhpcy5fbmVzdGVkTWVudTtcblxuICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICBtZW51cy5wdXNoKGN1cnJlbnQpO1xuICAgICAgY3VycmVudCA9IGN1cnJlbnQuX25lc3RlZE1lbnU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbnVzO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyZW50TWVudSgpOiBTYmJNZW51RWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl90cmlnZ2VyRWxlbWVudD8uY2xvc2VzdCgnc2JiLW1lbnUnKSA/PyBudWxsO1xuICB9XG5cbiAgLyoqIFRoZSBvdXRlcm1vc3QgbWVudS4gKi9cbiAgcHJpdmF0ZSBfbWFpbk1lbnUoKTogU2JiTWVudUVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl9pc05lc3RlZCgpID8gKHRoaXMuX3BhcmVudE1lbnUoKT8uX21haW5NZW51KCkgPz8gdGhpcykgOiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNOZXN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5fcGFyZW50TWVudSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlTmVzdGVkSW5lcnQoKTogdm9pZCB7XG4gICAgdGhpcy5faW5lcnRDb250cm9sbGVyLnJlc3RvcmVBbGxFeGVtcHRlZCgpO1xuICAgIHRoaXMuX21haW5NZW51KClcbiAgICAgIC5fbmVzdGVkTWVudXMoKVxuICAgICAgLmZvckVhY2goKG1lbnUpID0+IHRoaXMuX2luZXJ0Q29udHJvbGxlci5leGVtcHQobWVudSkpO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgbmVzdGVkIG1lbnUgc2hvdWxkIGJlIGNsb3NlZC5cbiAgcHJpdmF0ZSBfaGFuZGxlTW91c2VPdmVyKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBpc01vYmlsZSA9IHRoaXMuX2lzTW9iaWxlKCk7XG5cbiAgICAvLyBBbGwgbmVzdGVkIG1lbnVzIHNob3VsZCBjbG9zZSBpbiBkZXNrdG9wIG1vZGUgaWYgdGhlIGN1cnNvciBsYW5kZWQgb25cbiAgICAvLyBhbnl0aGluZyBvdGhlciB0aGFuIHRoZSBjb250YWluZXIsIHRoZSBjb250YWluZXIncyBzY3JvbGxiYXIgb3IgdGhlIHRyaWdnZXIgaXRzZWxmXG4gICAgaWYgKFxuICAgICAgIWlzTW9iaWxlICYmXG4gICAgICB0aGlzLl9uZXN0ZWRNZW51ICYmXG4gICAgICAhZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3NiYi1tZW51X19jb250ZW50JykgJiZcbiAgICAgICEoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKSA9PT0gJ3RydWUnKVxuICAgICkge1xuICAgICAgdGhpcy5fbmVzdGVkTWVudS5jbG9zZSgpO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50Lm1hdGNoZXMoJzpzdGF0ZShzYmItbWVudS10cmlnZ2VyKScpICYmICFpc01vYmlsZSkge1xuICAgICAgZWxlbWVudC5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBtZW51IHBvc2l0aW9uICh4LCB5KSB0byAnMCcgb25jZSB0aGUgbWVudSBpcyBjbG9zZWQgYW5kIHRoZSB0cmFuc2l0aW9uIGVuZGVkIHRvIHByZXZlbnQgdGhlXG4gIC8vIHZpZXdwb3J0IGZyb20gb3ZlcmZsb3dpbmcuIEFuZCBzZXQgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBvbmNlIHRoZSBtZW51IGlzIG9wZW4uXG4gIC8vIEluIHJhcmUgY2FzZXMgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gIC8vIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgcHJpdmF0ZSBfb25NZW51QW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIChldmVudC5hbmltYXRpb25OYW1lID09PSAnb3BlbicgfHwgZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4tc2lkZXdheXMnKSAmJlxuICAgICAgdGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnXG4gICAgKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIChldmVudC5hbmltYXRpb25OYW1lID09PSAnY2xvc2UnIHx8IGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdjbG9zZS1zaWRld2F5cycpICYmXG4gICAgICB0aGlzLnN0YXRlID09PSAnY2xvc2luZydcbiAgICApIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgbWVudSBwb3NpdGlvbiBhbmQgbWF4IGhlaWdodCBpZiB0aGUgYnJlYWtwb2ludCBpcyBsYXJnZS11bHRyYS5cbiAgcHJpdmF0ZSBfc2V0TWVudVBvc2l0aW9uKCk6IHZvaWQge1xuICAgIC8vIFN0YXJ0aW5nIGZyb20gYnJlYWtwb2ludCBsYXJnZVxuICAgIGlmICh0aGlzLl9pc01vYmlsZSgpIHx8ICF0aGlzLl9tZW51IHx8ICF0aGlzLl90cmlnZ2VyRWxlbWVudCB8fCB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZW51UG9zaXRpb24gPSAhdGhpcy5faXNOZXN0ZWQoKVxuICAgICAgPyBnZXRFbGVtZW50UG9zaXRpb24oXG4gICAgICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcuc2JiLW1lbnVfX2NvbnRlbnQnKSEsXG4gICAgICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQsXG4gICAgICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcuc2JiLW1lbnVfX2NvbnRhaW5lcicpISxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0aWNhbE9mZnNldDogTUVOVV9PRkZTRVQsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgOiBnZXRFbGVtZW50UG9zaXRpb25Ib3Jpem9udGFsKFxuICAgICAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignLnNiYi1tZW51X19jb250ZW50JykhLFxuICAgICAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LFxuICAgICAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignLnNiYi1tZW51X19jb250YWluZXInKSEsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaG9yaXpvbnRhbE9mZnNldDogTUVOVV9PRkZTRVQsXG4gICAgICAgICAgICB2ZXJ0aWNhbE9mZnNldDogTkVTVEVEX01FTlVfT0ZGU0VULFxuICAgICAgICAgICAgY29udGVudFNlbGVjdG9yOiAnLnNiYi1tZW51X19jb250ZW50JyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItbWVudS1wb3NpdGlvbi14JywgYCR7bWVudVBvc2l0aW9uLmxlZnR9cHhgKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXNiYi1tZW51LXBvc2l0aW9uLXknLCBgJHttZW51UG9zaXRpb24udG9wfXB4YCk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItbWVudS1tYXgtaGVpZ2h0JywgbWVudVBvc2l0aW9uLm1heEhlaWdodCk7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jTmVnYXRpdmUoKTogdm9pZCB7XG4gICAgLy8gTGlua3MgYW5kIGJ1dHRvbnMgYXJlIHRoZSBtb3N0IGV4cGVjdGVkIGNvbnRlbnRzIHdoaWNoIGhhdmUgYSBuZWdhdGl2ZSBwcm9wZXJ0eVxuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgnOnN0YXRlKHNiYi1saW5rKSwgOnN0YXRlKHNiYi1idXR0b24pJyk/LmZvckVhY2goKGVsOiBFbGVtZW50KSA9PiB7XG4gICAgICBjdXN0b21FbGVtZW50cy51cGdyYWRlKGVsKTtcbiAgICAgIChlbCBhcyBFbGVtZW50ICYgU2JiTmVnYXRpdmVNaXhpblR5cGUpLm5lZ2F0aXZlID0gIXRoaXMuX2RhcmtNb2RlQ29udHJvbGxlci5tYXRjaGVzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9pc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbWVkaWFNYXRjaGVyLm1hdGNoZXModGhpcy5fbW9iaWxlQnJlYWtwb2ludCkgPz8gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1tZW51X19jb250YWluZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIEBhbmltYXRpb25lbmQ9JHt0aGlzLl9vbk1lbnVBbmltYXRpb25FbmR9XG4gICAgICAgICAgQG1vdXNlb3Zlcj0keyhlOiBNb3VzZUV2ZW50KSA9PiB0aGlzLl9oYW5kbGVNb3VzZU92ZXIoZSl9XG4gICAgICAgICAgY2xhc3M9XCJzYmItbWVudVwiXG4gICAgICAgICAgJHtyZWYoKGVsPzogRWxlbWVudCkgPT4gKHRoaXMuX21lbnUgPSBlbCBhcyBIVE1MRGl2RWxlbWVudCkpfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgQGNsaWNrPSR7KGV2ZW50OiBFdmVudCkgPT4gdGhpcy5faW50ZXJhY3RpdmVFbGVtZW50Q2xpY2soZXZlbnQpfVxuICAgICAgICAgICAgQHNjcm9sbD0keyhlOiBFdmVudCkgPT4gZm9yd2FyZEV2ZW50KGUsIGRvY3VtZW50KX1cbiAgICAgICAgICAgIGNsYXNzPVwic2JiLW1lbnVfX2NvbnRlbnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgICAgIDxzYmItZGl2aWRlcj48L3NiYi1kaXZpZGVyPlxuICAgICAgICAgICAgPHNiYi1tZW51LWJ1dHRvblxuICAgICAgICAgICAgICBpZD1cInNiYi1tZW51X19iYWNrLWJ1dHRvblwiXG4gICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuY2xvc2UoKX1cbiAgICAgICAgICAgICAgaWNvbi1uYW1lPVwiY2hldnJvbi1zbWFsbC1sZWZ0LXNtYWxsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgJHtpMThuR29CYWNrW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICAgICAgPC9zYmItbWVudS1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLW1lbnUnOiBTYmJNZW51RWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIsm1c3RhdGVDb250cm9sbGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErQ0EsTUFBTSxjQUFjO0FBQ3BCLE1BQU0scUJBQXFCO0FBQzNCLE1BQU0sdUJBQXVCO0FBQUEsRUFDM0I7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7O0FBR0YsSUFBSSxTQUFTO0lBWVAsa0JBQWMsTUFBQTs7MEJBRG5CLGNBQWMsVUFBVSxDQUFDOzs7O29CQUNHOzs7O0FBQVIsRUFBQSxtQkFBUSxZQUF1QjtBQUFBLElBb0NsRCxjQUFBO0FBQ0UsWUFBQTtBQTFCRjtBQUFnQix5QkFBQSwyQkFBQSxrQkFBQSxNQUFBLHVCQUE4QixJQUFJO0FBRTFDLFdBQUEsUUFBSyxrQkFBQSxNQUFBLDBCQUFBO0FBQ0wsV0FBQSxrQkFBc0M7QUFFdEMsV0FBQSw0QkFBcUM7QUFFckMsV0FBQSw4QkFBOEIsSUFBSSw4QkFBOEIsSUFBSTtBQUNwRSxXQUFBLHVCQUF1QixJQUFJLHVCQUF1QixJQUFJO0FBQ3RE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
@@ -68,7 +68,7 @@ const buttonCommon = css`:host {
68
68
  }
69
69
 
70
70
  @media (forced-colors: active) {
71
- :host([data-button]) {
71
+ :host(:is(:state(button),[state--button])) {
72
72
  --sbb-button-color-default-text: ButtonText !important;
73
73
  --sbb-button-color-hover-text: ButtonText !important;
74
74
  --sbb-button-color-active-text: ButtonText !important;
@@ -76,7 +76,7 @@ const buttonCommon = css`:host {
76
76
  }
77
77
 
78
78
  @media (forced-colors: active) {
79
- :host([data-link]) {
79
+ :host(:is(:state(link),[state--link])) {
80
80
  --sbb-button-color-default-text: LinkText !important;
81
81
  --sbb-button-color-hover-text: LinkText !important;
82
82
  --sbb-button-color-active-text: LinkText !important;
@@ -115,7 +115,7 @@ const buttonCommon = css`:host {
115
115
  }
116
116
 
117
117
  @media (any-hover: hover) {
118
- :host(:not([disabled], :disabled, [disabled-interactive], :active, [data-active], [loading]):is(:hover, :is(:state(force-hover),[state--force-hover]))) {
118
+ :host(:not([disabled], :disabled, [disabled-interactive], :active, :is(:state(active),[state--active]), [loading]):is(:hover, :is(:state(force-hover),[state--force-hover]))) {
119
119
  --sbb-button-translate-y-content-hover: -0.0625rem;
120
120
  --sbb-button-shadow-1-offset-y: calc(
121
121
  0.5 * var(--sbb-shadow-elevation-level-3-shadow-1-offset-y)
@@ -130,7 +130,7 @@ const buttonCommon = css`:host {
130
130
  }
131
131
  }
132
132
  @media (forced-colors: active) {
133
- :host(:not([disabled], :disabled, [disabled-interactive], :active, [data-active], [loading]):is(:hover, :is(:state(force-hover),[state--force-hover]))) {
133
+ :host(:not([disabled], :disabled, [disabled-interactive], :active, :is(:state(active),[state--active]), [loading]):is(:hover, :is(:state(force-hover),[state--force-hover]))) {
134
134
  --sbb-button-color-hover-border: Highlight !important;
135
135
  }
136
136
  }
@@ -144,7 +144,7 @@ const buttonCommon = css`:host {
144
144
  var(--_border-color);
145
145
  }
146
146
 
147
- :host(:not([disabled], :disabled, [disabled-interactive]):is(:active, [data-active], [loading])) {
147
+ :host(:not([disabled], :disabled, [disabled-interactive]):is(:active, :is(:state(active),[state--active]), [loading])) {
148
148
  --_color: var(--sbb-button-color-active-text);
149
149
  --_background-color: var(--sbb-button-color-active-background);
150
150
  --_border-color: var(--sbb-button-color-active-border);
@@ -207,7 +207,7 @@ const buttonCommon = css`:host {
207
207
  padding-inline: calc(var(--sbb-button-padding-inline) - var(--sbb-button-loading-border-width));
208
208
  transition-property: none;
209
209
  }
210
- :host([data-focus-visible]) .sbb-action-base::before, :host(:focus-visible) .sbb-action-base::before, .sbb-action-base:focus-visible::before {
210
+ :host(:is(:state(focus-visible),[state--focus-visible])) .sbb-action-base::before, :host(:focus-visible) .sbb-action-base::before, .sbb-action-base:focus-visible::before {
211
211
  outline-offset: var(--sbb-focus-outline-offset);
212
212
  outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);
213
213
  outline-offset: var(--sbb-button-focus-outline-offset-override, var(--sbb-focus-outline-offset));
@@ -339,7 +339,7 @@ const primaryButton = css`:host {
339
339
  );
340
340
  }
341
341
 
342
- :host(:not([disabled], :disabled, [disabled-interactive], :active, [data-active], [loading])) {
342
+ :host(:not([disabled], :disabled, [disabled-interactive], :active, :is(:state(active),[state--active]), [loading])) {
343
343
  --sbb-button-box-shadow: var(--sbb-button-box-shadow-definition);
344
344
  }`;
345
345
  const secondaryButton = css`:host {
@@ -385,7 +385,7 @@ const secondaryButton = css`:host {
385
385
  --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);
386
386
  }
387
387
 
388
- :host(:not([disabled], :disabled, [disabled-interactive], :active, [data-active])) {
388
+ :host(:not([disabled], :disabled, [disabled-interactive], :active, :is(:state(active),[state--active]))) {
389
389
  --sbb-button-box-shadow: var(--sbb-button-box-shadow-definition);
390
390
  }`;
391
391
  const accentButton = css`:host {
@@ -428,7 +428,7 @@ const accentButton = css`:host {
428
428
  --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);
429
429
  }
430
430
 
431
- :host(:not([disabled], :disabled, [disabled-interactive], :active, [data-active], [loading])) {
431
+ :host(:not([disabled], :disabled, [disabled-interactive], :active, :is(:state(active),[state--active]), [loading])) {
432
432
  --sbb-button-box-shadow: var(--sbb-button-box-shadow-definition);
433
433
  }`;
434
434
  const transparentButton = css`:host {
@@ -504,17 +504,17 @@ const miniButtonCommon = css`:host {
504
504
  }
505
505
 
506
506
  @media (any-hover: hover) {
507
- :host(:is(:hover, :is(:state(force-hover),[state--force-hover])):not([disabled], :disabled, [disabled-interactive], [data-disabled], :is(:state(disabled),[state--disabled]), :active, [data-active])) {
507
+ :host(:is(:hover, :is(:state(force-hover),[state--force-hover])):not([disabled], :disabled, [disabled-interactive], :is(:state(disabled),[state--disabled]), :active, :is(:state(active),[state--active]))) {
508
508
  --sbb-mini-button-translate-y-content-hover: -0.0625rem;
509
509
  --sbb-mini-button-color-background: var(--sbb-mini-button-color-hover-background);
510
510
  }
511
511
  }
512
512
 
513
- :host(:is(:active, [data-active]):not([disabled], :disabled, [disabled-interactive], [data-disabled], :is(:state(disabled),[state--disabled]))) {
513
+ :host(:is(:active, :is(:state(active),[state--active])):not([disabled], :disabled, [disabled-interactive], :is(:state(disabled),[state--disabled]))) {
514
514
  --sbb-mini-button-color-background: var(--sbb-mini-button-color-active-background);
515
515
  }
516
516
 
517
- :host(:is([disabled], :disabled, [disabled-interactive], [data-disabled], :is(:state(disabled),[state--disabled]))) {
517
+ :host(:is([disabled], :disabled, [disabled-interactive], :is(:state(disabled),[state--disabled]))) {
518
518
  --sbb-mini-button-color-background: var(--sbb-mini-button-color-disabled-background);
519
519
  --sbb-mini-button-border: var(--sbb-border-width-1x) dashed
520
520
  var(--sbb-mini-button-color-disabled-border);
@@ -523,7 +523,7 @@ const miniButtonCommon = css`:host {
523
523
  --sbb-mini-button-cursor: var(--sbb-cursor-default);
524
524
  }
525
525
 
526
- :host([data-focus-visible]) {
526
+ :host(:is(:state(focus-visible),[state--focus-visible])) {
527
527
  --sbb-focus-outline-style: initial;
528
528
  }
529
529
 
@@ -548,7 +548,7 @@ const miniButtonCommon = css`:host {
548
548
  transition-property: inset, background-color;
549
549
  border: var(--sbb-mini-button-border);
550
550
  }
551
- :host(:is([data-focus-visible], :focus-visible)) .sbb-action-base::before {
551
+ :host(:is(:is(:state(focus-visible),[state--focus-visible]), :focus-visible)) .sbb-action-base::before {
552
552
  outline-offset: var(--sbb-focus-outline-offset);
553
553
  outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);
554
554
  }
@@ -567,4 +567,4 @@ export {
567
567
  secondaryButton as s,
568
568
  transparentButton as t
569
569
  };
570
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaS1idXR0b24tY29tbW9uLVRTRGFNVUNQLmpzIiwic291cmNlcyI6W10sInNvdXJjZXNDb250ZW50IjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9
570
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaS1idXR0b24tY29tbW9uLUNXVE1SX0x1LmpzIiwic291cmNlcyI6W10sInNvdXJjZXNDb250ZW50IjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"mini-calendar.component.d.ts","sourceRoot":"","sources":["../../../../../src/elements/mini-calendar/mini-calendar/mini-calendar.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC1D,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAOvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAM/D;;;;GAIG;AACH,qBAEM,sBAAsB,CAAC,CAAC,GAAG,IAAI,CAAE,SAAQ,UAAU;IACvD,OAAuB,MAAM,EAAE,cAAc,CAAS;IAEtD,+CAA+C;IAC/C,SACgB,WAAW,EAAE,cAAc,CAAgB;IAE3D,OAAO,CAAC,uBAAuB,CAAgC;IAC/D,OAAO,CAAC,YAAY,CAA4E;;IAahG,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,yBAAyB;IAgBjC,OAAO,CAAC,0BAA0B;IAwDlC,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,qBAAqB;IAa7B,gBAAgB;IACA,KAAK,IAAI,IAAI;IAMb,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;cAKzB,MAAM,IAAI,cAAc;CAG5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,mBAAmB,EAAE,sBAAsB,CAAC;KAC7C;CACF"}
1
+ {"version":3,"file":"mini-calendar.component.d.ts","sourceRoot":"","sources":["../../../../../src/elements/mini-calendar/mini-calendar/mini-calendar.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC1D,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAOvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAO/D;;;;GAIG;AACH,qBAEM,sBAAsB,CAAC,CAAC,GAAG,IAAI,CAAE,SAAQ,UAAU;IACvD,OAAuB,MAAM,EAAE,cAAc,CAAS;IAEtD,+CAA+C;IAC/C,SACgB,WAAW,EAAE,cAAc,CAAgB;IAE3D,OAAO,CAAC,uBAAuB,CAAgC;IAC/D,OAAO,CAAC,YAAY,CAA4E;;IAahG,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,yBAAyB;IAgBjC,OAAO,CAAC,0BAA0B;IAwDlC,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,qBAAqB;IAa7B,gBAAgB;IACA,KAAK,IAAI,IAAI;IAMb,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;cAKzB,MAAM,IAAI,cAAc;CAG5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,mBAAmB,EAAE,sBAAsB,CAAC;KAC7C;CACF"}
@@ -12,6 +12,7 @@ import { customElement, property } from "lit/decorators.js";
12
12
  import { isArrowKeyOrPageKeysPressed } from "../../core/a11y.js";
13
13
  import { readConfig } from "../../core/config/config.js";
14
14
  import { defaultDateAdapter } from "../../core/datetime/native-date-adapter.js";
15
+ import { ɵstateController as _stateController } from "../../core/mixins.js";
15
16
  const style = css`:host {
16
17
  display: flex;
17
18
  flex-wrap: wrap;
@@ -54,12 +55,12 @@ let SbbMiniCalendarElement = (() => {
54
55
  }
55
56
  _setMonthsShowYear() {
56
57
  this._getMiniCalendarMonths().forEach((monthElement, index) => {
57
- const splittedDate = monthElement.date.split("-");
58
- if (splittedDate.length > 0) {
59
- if (index === 0 || +splittedDate[1] === 1) {
60
- monthElement["toggleState"]("show-year", true);
58
+ const splitDate = monthElement.date.split("-");
59
+ if (splitDate.length > 0) {
60
+ if (index === 0 || +splitDate[1] === 1) {
61
+ _stateController(monthElement).add("show-year");
61
62
  } else {
62
- monthElement["toggleState"]("show-year", false);
63
+ _stateController(monthElement).delete("show-year");
63
64
  }
64
65
  }
65
66
  });
@@ -190,4 +191,4 @@ let SbbMiniCalendarElement = (() => {
190
191
  export {
191
192
  SbbMiniCalendarElement
192
193
  };
193
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaS1jYWxlbmRhci5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9taW5pLWNhbGVuZGFyL21pbmktY2FsZW5kYXIvbWluaS1jYWxlbmRhci5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTXV0YXRpb25Db250cm9sbGVyIH0gZnJvbSAnQGxpdC1sYWJzL29ic2VydmVycy9tdXRhdGlvbi1jb250cm9sbGVyLmpzJztcbmltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGlzQXJyb3dLZXlPclBhZ2VLZXlzUHJlc3NlZCB9IGZyb20gJy4uLy4uL2NvcmUvYTExeS50cyc7XG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29yZS9jb25maWcvY29uZmlnLnRzJztcbmltcG9ydCB0eXBlIHsgRGF0ZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9jb3JlL2RhdGV0aW1lL2RhdGUtYWRhcHRlci50cyc7XG5pbXBvcnQgeyBkZWZhdWx0RGF0ZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9jb3JlL2RhdGV0aW1lL25hdGl2ZS1kYXRlLWFkYXB0ZXIudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPcmllbnRhdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvaW50ZXJmYWNlcy50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYk1pbmlDYWxlbmRhckRheUVsZW1lbnQgfSBmcm9tICcuLi9taW5pLWNhbGVuZGFyLWRheS50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYk1pbmlDYWxlbmRhck1vbnRoRWxlbWVudCB9IGZyb20gJy4uL21pbmktY2FsZW5kYXItbW9udGgudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9taW5pLWNhbGVuZGFyLnNjc3M/bGl0JmlubGluZSc7XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYSBtaW5pbWFsIGNhbGVuZGFyLCB0b2dldGhlciB3aXRoIHRoZSBgc2JiLW1pbmktY2FsZW5kYXItbW9udGhgIGFuZCBgc2JiLW1pbmktY2FsZW5kYXItZGF5YC5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBgc2JiLW1pbmktY2FsZW5kYXItbW9udGhgIGVsZW1lbnRzLlxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItbWluaS1jYWxlbmRhcicpXG5jbGFzcyBTYmJNaW5pQ2FsZW5kYXJFbGVtZW50PFQgPSBEYXRlPiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICAvKiogVGhlIG9yaWVudGF0aW9uIG9mIGRheXMgaW4gdGhlIGNhbGVuZGFyLiAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBvcmllbnRhdGlvbjogU2JiT3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCc7XG5cbiAgcHJpdmF0ZSBfa2V5ZG93bkFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2RhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxUPiA9IHJlYWRDb25maWcoKS5kYXRldGltZT8uZGF0ZUFkYXB0ZXIgPz8gZGVmYXVsdERhdGVBZGFwdGVyO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5hZGRDb250cm9sbGVyKFxuICAgICAgbmV3IE11dGF0aW9uQ29udHJvbGxlcih0aGlzLCB7XG4gICAgICAgIGNvbmZpZzogeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSxcbiAgICAgICAgY2FsbGJhY2s6ICgpID0+IHRoaXMuX3NldE1vbnRoc1Nob3dZZWFyKCksXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0TWluaUNhbGVuZGFyTW9udGhzKCk6IFNiYk1pbmlDYWxlbmRhck1vbnRoRWxlbWVudFtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/Lignc2JiLW1pbmktY2FsZW5kYXItbW9udGgnKSA/PyBbXSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRNaW5pQ2FsZW5kYXJEYXlzKCk6IFNiYk1pbmlDYWxlbmRhckRheUVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICB0aGlzLl9nZXRNaW5pQ2FsZW5kYXJNb250aHMoKS5mbGF0TWFwKChtb250aCkgPT5cbiAgICAgICAgQXJyYXkuZnJvbShtb250aC5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1taW5pLWNhbGVuZGFyLWRheScpID8/IFtdKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldE1vbnRoc1Nob3dZZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuX2dldE1pbmlDYWxlbmRhck1vbnRocygpLmZvckVhY2goXG4gICAgICAobW9udGhFbGVtZW50OiBTYmJNaW5pQ2FsZW5kYXJNb250aEVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3Qgc3BsaXR0ZWREYXRlID0gbW9udGhFbGVtZW50LmRhdGUuc3BsaXQoJy0nKTtcbiAgICAgICAgaWYgKHNwbGl0dGVkRGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKGluZGV4ID09PSAwIHx8ICtzcGxpdHRlZERhdGVbMV0gPT09IDEpIHtcbiAgICAgICAgICAgIG1vbnRoRWxlbWVudFsndG9nZ2xlU3RhdGUnXSgnc2hvdy15ZWFyJywgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vbnRoRWxlbWVudFsndG9nZ2xlU3RhdGUnXSgnc2hvdy15ZWFyJywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlS2V5ZG93bkNhbGVuZGFyRGF5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGlzQXJyb3dLZXlPclBhZ2VLZXlzUHJlc3NlZChldmVudCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF5czogU2JiTWluaUNhbGVuZGFyRGF5RWxlbWVudFtdID0gdGhpcy5fZ2V0TWluaUNhbGVuZGFyRGF5cygpO1xuICAgIGNvbnN0IGRheSA9IGRheXMuZmluZCgoZSkgPT4gZSA9PT0gZXZlbnQudGFyZ2V0KSE7XG4gICAgY29uc3QgbmV4dEVsOiBTYmJNaW5pQ2FsZW5kYXJEYXlFbGVtZW50ID0gdGhpcy5fbmF2aWdhdGVCeUtleWJvYXJkRGF5VmlldyhkYXlzLCBkYXksIGV2ZW50KTtcbiAgICBjb25zdCBhY3RpdmVFbDogU2JiTWluaUNhbGVuZGFyRGF5RWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgU2JiTWluaUNhbGVuZGFyRGF5RWxlbWVudDtcbiAgICBpZiAobmV4dEVsICE9PSBhY3RpdmVFbCkge1xuICAgICAgbmV4dEVsLnRhYkluZGV4ID0gMDtcbiAgICAgIG5leHRFbD8uZm9jdXMoKTtcbiAgICAgIGFjdGl2ZUVsLnRhYkluZGV4ID0gLTE7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbmF2aWdhdGVCeUtleWJvYXJkRGF5VmlldyhcbiAgICBkYXlzOiBTYmJNaW5pQ2FsZW5kYXJEYXlFbGVtZW50W10sXG4gICAgZGF5OiBTYmJNaW5pQ2FsZW5kYXJEYXlFbGVtZW50LFxuICAgIGV2ZW50OiBLZXlib2FyZEV2ZW50LFxuICApOiBTYmJNaW5pQ2FsZW5kYXJEYXlFbGVtZW50IHtcbiAgICBjb25zdCBhcnJvd3NPZmZzZXQgPVxuICAgICAgdGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnID8geyBsZWZ0UmlnaHQ6IDEsIHVwRG93bjogNyB9IDogeyBsZWZ0UmlnaHQ6IDcsIHVwRG93bjogMSB9O1xuICAgIGNvbnN0IGZ1bGxEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIucGFyc2UoZGF5LmRhdGUpITtcbiAgICBjb25zdCBkYXlEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZShmdWxsRGF0ZSk7XG4gICAgY29uc3Qgb2Zmc2V0Rm9yVmVydGljYWwgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRGaXJzdFdlZWtPZmZzZXQoZnVsbERhdGUpO1xuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheUFycm93S2V5cyhkYXlzLCBkYXksIC1hcnJvd3NPZmZzZXQudXBEb3duKTtcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5QXJyb3dLZXlzKGRheXMsIGRheSwgYXJyb3dzT2Zmc2V0LnVwRG93bik7XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheUFycm93S2V5cyhkYXlzLCBkYXksIC1hcnJvd3NPZmZzZXQubGVmdFJpZ2h0KTtcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheUFycm93S2V5cyhkYXlzLCBkYXksIGFycm93c09mZnNldC5sZWZ0UmlnaHQpO1xuICAgICAgY2FzZSAnUGFnZVVwJzoge1xuICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgY29uc3QgZGVsdGEgPSBkYXlEYXRlIC0gKGRheURhdGUgJSA3IHx8IDcpO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5U3BlY2lhbEtleXMoZGF5cywgZGF5LCAtZGVsdGEsIGFycm93c09mZnNldC51cERvd24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHdlZWtOdW1iZXI6IG51bWJlciA9IE1hdGguY2VpbCgoZGF5RGF0ZSArIG9mZnNldEZvclZlcnRpY2FsKSAvIDcpO1xuICAgICAgICAgIGNvbnN0IGZpcnN0T2ZXZWVrOiBudW1iZXIgPSAod2Vla051bWJlciAtIDEpICogNyAtIG9mZnNldEZvclZlcnRpY2FsICsgMTtcbiAgICAgICAgICBjb25zdCBkZWx0YTogbnVtYmVyID0gZmlyc3RPZldlZWsgLSBkYXlEYXRlO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5U3BlY2lhbEtleXMoZGF5cywgZGF5LCBkZWx0YSwgYXJyb3dzT2Zmc2V0LnVwRG93bik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzoge1xuICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgY29uc3QgbGFzdERheU1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgoZnVsbERhdGUpO1xuICAgICAgICAgIGNvbnN0IGRlbHRhID0gbGFzdERheU1vbnRoIC0gZGF5RGF0ZSAtICgobGFzdERheU1vbnRoIC0gZGF5RGF0ZSkgJSA3KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheVNwZWNpYWxLZXlzKGRheXMsIGRheSwgZGVsdGEsIC1hcnJvd3NPZmZzZXQudXBEb3duKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB3ZWVrTnVtYmVyOiBudW1iZXIgPSBNYXRoLmNlaWwoKGRheURhdGUgKyBvZmZzZXRGb3JWZXJ0aWNhbCkgLyA3KTtcbiAgICAgICAgICBjb25zdCBsYXN0T2ZXZWVrOiBudW1iZXIgPSB3ZWVrTnVtYmVyICogNyAtIG9mZnNldEZvclZlcnRpY2FsO1xuICAgICAgICAgIGNvbnN0IGRlbHRhOiBudW1iZXIgPSBsYXN0T2ZXZWVrIC0gZGF5RGF0ZTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheVNwZWNpYWxLZXlzKGRheXMsIGRheSwgZGVsdGEsIC1hcnJvd3NPZmZzZXQudXBEb3duKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FzZSAnSG9tZSc6IHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IGRheURhdGUgLSAxO1xuICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheVNwZWNpYWxLZXlzKGRheXMsIGRheSwgLWRhdGUsICsxKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VuZCc6IHtcbiAgICAgICAgY29uc3QgbGFzdERheU1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgoZnVsbERhdGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheVNwZWNpYWxLZXlzKGRheXMsIGRheSwgbGFzdERheU1vbnRoIC0gZGF5RGF0ZSwgLTEpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRheTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maW5kRGF5QXJyb3dLZXlzKFxuICAgIGRheXM6IFNiYk1pbmlDYWxlbmRhckRheUVsZW1lbnRbXSxcbiAgICBkYXk6IFNiYk1pbmlDYWxlbmRhckRheUVsZW1lbnQsXG4gICAgZGVsdGE6IG51bWJlcixcbiAgKTogU2JiTWluaUNhbGVuZGFyRGF5RWxlbWVudCB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRheS5kYXRlKSEsXG4gICAgICBkZWx0YSxcbiAgICApO1xuICAgIGNvbnN0IG5ld0RhdGVTdHJpbmcgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEobmV3RGF0ZSk7XG4gICAgY29uc3QgbmV3RGF5ID0gZGF5cy5maW5kKChkKSA9PiBkLmRhdGUgPT09IG5ld0RhdGVTdHJpbmcpO1xuICAgIGlmICghbmV3RGF5KSB7XG4gICAgICByZXR1cm4gZGF5O1xuICAgIH1cbiAgICByZXR1cm4gbmV3RGF5O1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZERheVNwZWNpYWxLZXlzKFxuICAgIGRheXM6IFNiYk1pbmlDYWxlbmRhckRheUVsZW1lbnRbXSxcbiAgICBkYXk6IFNiYk1pbmlDYWxlbmRhckRheUVsZW1lbnQsXG4gICAgZGVsdGE6IG51bWJlcixcbiAgICByZWN1cnNpdmVEZWx0YTogbnVtYmVyLFxuICApOiBTYmJNaW5pQ2FsZW5kYXJEYXlFbGVtZW50IHtcbiAgICBjb25zdCBuZXdEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF5LmRhdGUpISxcbiAgICAgIGRlbHRhLFxuICAgICk7XG4gICAgY29uc3QgbmV3RGF0ZVN0cmluZyA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShuZXdEYXRlKTtcbiAgICBjb25zdCBuZXdEYXkgPSBkYXlzLmZpbmQoKGQpID0+IGQuZGF0ZSA9PT0gbmV3RGF0ZVN0cmluZyk7XG4gICAgaWYgKCFuZXdEYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5U3BlY2lhbEtleXMoZGF5cywgZGF5LCBkZWx0YSArIHJlY3Vyc2l2ZURlbHRhLCByZWN1cnNpdmVEZWx0YSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdEYXkhO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlU2xvdGNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXR1cEtleWRvd25MaXN0ZW5lcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBLZXlkb3duTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgdGhpcy5fa2V5ZG93bkFib3J0Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9rZXlkb3duQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHRoaXMuX2dldE1pbmlDYWxlbmRhckRheXMoKS5mb3JFYWNoKChkYXksIGluZGV4KSA9PiB7XG4gICAgICBkYXkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB0aGlzLl9oYW5kbGVLZXlkb3duQ2FsZW5kYXJEYXkoZSksIHtcbiAgICAgICAgc2lnbmFsOiB0aGlzLl9rZXlkb3duQWJvcnRDb250cm9sbGVyIS5zaWduYWwsXG4gICAgICB9KTtcbiAgICAgIGlmIChpbmRleCAhPT0gMCkge1xuICAgICAgICBkYXkudGFiSW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIG92ZXJyaWRlIGZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2dldE1pbmlDYWxlbmRhckRheXMoKVxuICAgICAgPy5maW5kKChlKSA9PiBlLnRhYkluZGV4ID09PSAwKVxuICAgICAgPy5mb2N1cygpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fc2V0dXBLZXlkb3duTGlzdGVuZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX2tleWRvd25BYm9ydENvbnRyb2xsZXI/LmFib3J0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuX2hhbmRsZVNsb3RjaGFuZ2V9Pjwvc2xvdD5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItbWluaS1jYWxlbmRhcic6IFNiYk1pbmlDYWxlbmRhckVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBc0JNLDBCQUFzQixNQUFBOzswQkFEM0IsY0FBYyxtQkFBbUIsQ0FBQzs7OztvQkFDWTs7OztBQUFSLEVBQUEsbUJBQVEsWUFBVTtBQUFBLElBVXZELGNBQUE7QUFDRSxZQUFBO0FBTkY7QUFBZ0IseUJBQUEsK0JBQUEsa0JBQUEsTUFBQSwyQkFBOEIsWUFBWTtBQUVsRCxXQUFBLDJCQUF1QixrQkFBQSxNQUFBLDhCQUFBLEdBQTJCO0FBQ2xELFdBQUEsZUFBK0IsV0FBQSxFQUFhLFVBQVUsZUFBZTtBQUszRSxXQUFLLGNBQ0gsSUFBSSxtQkFBbUIsTUFBTTtBQUFBLFFBQzNCLFFBQVEsRUFBRSxXQUFXLE1BQU0sU0FBUyxLQUFBO0FBQUEsUUFDcEMsVUFBVSxNQUFNLEtBQUssbUJBQUE7QUFBQSxNQUFrQixDQUN4QyxDQUFDO0FBQUEsSUFFTjtBQUFBO0FBQUEsSUFkQSxJQUFnQixjQUFXO0FBQUEsYUFBQSxtQkFBQTtBQUFBLElBQUE7QUFBQSxJQUEzQixJQUFnQixZQUFXLE9BQUE7QUFBQSx5QkFBQSwrQkFBQTtBQUFBLElBQUE7QUFBQSxJQWdCbkIseUJBQXNCO0FBQzVCLGFBQU8sTUFBTSxLQUFLLEtBQUssbUJBQW1CLHlCQUF5QixLQUFLLEVBQUU7QUFBQSxJQUM1RTtBQUFBLElBRVEsdUJBQW9CO0FBQzFCLGFBQU8sTUFBTSxLQUNYLEtBQUssdUJBQUEsRUFBeUIsUUFBUSxDQUFDLFVBQ3JDLE1BQU0sS0FBSyxNQUFNLG1CQUFtQix1QkFBdUIsS0FBSyxDQUFBLENBQUUsQ0FBQyxDQUNwRTtBQUFBLElBRUw7QUFBQSxJQUVRLHFCQUFrQjtBQUN4QixXQUFLLHVC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
194
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaS1jYWxlbmRhci5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9taW5pLWNhbGVuZGFyL21pbmktY2FsZW5kYXIvbWluaS1jYWxlbmRhci5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTXV0YXRpb25Db250cm9sbGVyIH0gZnJvbSAnQGxpdC1sYWJzL29ic2VydmVycy9tdXRhdGlvbi1jb250cm9sbGVyLmpzJztcbmltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGlzQXJyb3dLZXlPclBhZ2VLZXlzUHJlc3NlZCB9IGZyb20gJy4uLy4uL2NvcmUvYTExeS50cyc7XG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29yZS9jb25maWcvY29uZmlnLnRzJztcbmltcG9ydCB0eXBlIHsgRGF0ZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9jb3JlL2RhdGV0aW1lL2RhdGUtYWRhcHRlci50cyc7XG5pbXBvcnQgeyBkZWZhdWx0RGF0ZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9jb3JlL2RhdGV0aW1lL25hdGl2ZS1kYXRlLWFkYXB0ZXIudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPcmllbnRhdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvaW50ZXJmYWNlcy50cyc7XG5pbXBvcnQgeyDJtXN0YXRlQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiTWluaUNhbGVuZGFyRGF5RWxlbWVudCB9IGZyb20gJy4uL21pbmktY2FsZW5kYXItZGF5LnRzJztcbmltcG9ydCB0eXBlIHsgU2JiTWluaUNhbGVuZGFyTW9udGhFbGVtZW50IH0gZnJvbSAnLi4vbWluaS1jYWxlbmRhci1tb250aC50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL21pbmktY2FsZW5kYXIuc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhIG1pbmltYWwgY2FsZW5kYXIsIHRvZ2V0aGVyIHdpdGggdGhlIGBzYmItbWluaS1jYWxlbmRhci1tb250aGAgYW5kIGBzYmItbWluaS1jYWxlbmRhci1kYXlgLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGBzYmItbWluaS1jYWxlbmRhci1tb250aGAgZWxlbWVudHMuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1taW5pLWNhbGVuZGFyJylcbmNsYXNzIFNiYk1pbmlDYWxlbmRhckVsZW1lbnQ8VCA9IERhdGU+IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuXG4gIC8qKiBUaGUgb3JpZW50YXRpb24gb2YgZGF5cyBpbiB0aGUgY2FsZW5kYXIuICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFjY2Vzc29yIG9yaWVudGF0aW9uOiBTYmJPcmllbnRhdGlvbiA9ICdob3Jpem9udGFsJztcblxuICBwcml2YXRlIF9rZXlkb3duQWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPFQ+ID0gcmVhZENvbmZpZygpLmRhdGV0aW1lPy5kYXRlQWRhcHRlciA/PyBkZWZhdWx0RGF0ZUFkYXB0ZXI7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmFkZENvbnRyb2xsZXIoXG4gICAgICBuZXcgTXV0YXRpb25Db250cm9sbGVyKHRoaXMsIHtcbiAgICAgICAgY29uZmlnOiB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9LFxuICAgICAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5fc2V0TW9udGhzU2hvd1llYXIoKSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRNaW5pQ2FsZW5kYXJNb250aHMoKTogU2JiTWluaUNhbGVuZGFyTW9udGhFbGVtZW50W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItbWluaS1jYWxlbmRhci1tb250aCcpID8/IFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE1pbmlDYWxlbmRhckRheXMoKTogU2JiTWluaUNhbGVuZGFyRGF5RWxlbWVudFtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAgIHRoaXMuX2dldE1pbmlDYWxlbmRhck1vbnRocygpLmZsYXRNYXAoKG1vbnRoKSA9PlxuICAgICAgICBBcnJheS5mcm9tKG1vbnRoLnF1ZXJ5U2VsZWN0b3JBbGw/Lignc2JiLW1pbmktY2FsZW5kYXItZGF5JykgPz8gW10pLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TW9udGhzU2hvd1llYXIoKTogdm9pZCB7XG4gICAgdGhpcy5fZ2V0TWluaUNhbGVuZGFyTW9udGhzKCkuZm9yRWFjaChcbiAgICAgIChtb250aEVsZW1lbnQ6IFNiYk1pbmlDYWxlbmRhck1vbnRoRWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBzcGxpdERhdGUgPSBtb250aEVsZW1lbnQuZGF0ZS5zcGxpdCgnLScpO1xuICAgICAgICBpZiAoc3BsaXREYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAoaW5kZXggPT09IDAgfHwgK3NwbGl0RGF0ZVsxXSA9PT0gMSkge1xuICAgICAgICAgICAgybVzdGF0ZUNvbnRyb2xsZXIobW9udGhFbGVtZW50KS5hZGQoJ3Nob3cteWVhcicpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICDJtXN0YXRlQ29udHJvbGxlcihtb250aEVsZW1lbnQpLmRlbGV0ZSgnc2hvdy15ZWFyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVLZXlkb3duQ2FsZW5kYXJEYXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoaXNBcnJvd0tleU9yUGFnZUtleXNQcmVzc2VkKGV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXlzOiBTYmJNaW5pQ2FsZW5kYXJEYXlFbGVtZW50W10gPSB0aGlzLl9nZXRNaW5pQ2FsZW5kYXJEYXlzKCk7XG4gICAgY29uc3QgZGF5ID0gZGF5cy5maW5kKChlKSA9PiBlID09PSBldmVudC50YXJnZXQpITtcbiAgICBjb25zdCBuZXh0RWw6IFNiYk1pbmlDYWxlbmRhckRheUVsZW1lbnQgPSB0aGlzLl9uYXZpZ2F0ZUJ5S2V5Ym9hcmREYXlWaWV3KGRheXMsIGRheSwgZXZlbnQpO1xuICAgIGNvbnN0IGFjdGl2ZUVsOiBTYmJNaW5pQ2FsZW5kYXJEYXlFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBTYmJNaW5pQ2FsZW5kYXJEYXlFbGVtZW50O1xuICAgIGlmIChuZXh0RWwgIT09IGFjdGl2ZUVsKSB7XG4gICAgICBuZXh0RWwudGFiSW5kZXggPSAwO1xuICAgICAgbmV4dEVsPy5mb2N1cygpO1xuICAgICAgYWN0aXZlRWwudGFiSW5kZXggPSAtMTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9uYXZpZ2F0ZUJ5S2V5Ym9hcmREYXlWaWV3KFxuICAgIGRheXM6IFNiYk1pbmlDYWxlbmRhckRheUVsZW1lbnRbXSxcbiAgICBkYXk6IFNiYk1pbmlDYWxlbmRhckRheUVsZW1lbnQsXG4gICAgZXZlbnQ6IEtleWJvYXJkRXZlbnQsXG4gICk6IFNiYk1pbmlDYWxlbmRhckRheUVsZW1lbnQge1xuICAgIGNvbnN0IGFycm93c09mZnNldCA9XG4gICAgICB0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgPyB7IGxlZnRSaWdodDogMSwgdXBEb3duOiA3IH0gOiB7IGxlZnRSaWdodDogNywgdXBEb3duOiAxIH07XG4gICAgY29uc3QgZnVsbERhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5wYXJzZShkYXkuZGF0ZSkhO1xuICAgIGNvbnN0IGRheURhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKGZ1bGxEYXRlKTtcbiAgICBjb25zdCBvZmZzZXRGb3JWZXJ0aWNhbCA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldEZpcnN0V2Vla09mZnNldChmdWxsRGF0ZSk7XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5QXJyb3dLZXlzKGRheXMsIGRheSwgLWFycm93c09mZnNldC51cERvd24pO1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlBcnJvd0tleXMoZGF5cywgZGF5LCBhcnJvd3NPZmZzZXQudXBEb3duKTtcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5QXJyb3dLZXlzKGRheXMsIGRheSwgLWFycm93c09mZnNldC5sZWZ0UmlnaHQpO1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5QXJyb3dLZXlzKGRheXMsIGRheSwgYXJyb3dzT2Zmc2V0LmxlZnRSaWdodCk7XG4gICAgICBjYXNlICdQYWdlVXAnOiB7XG4gICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBjb25zdCBkZWx0YSA9IGRheURhdGUgLSAoZGF5RGF0ZSAlIDcgfHwgNyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlTcGVjaWFsS2V5cyhkYXlzLCBkYXksIC1kZWx0YSwgYXJyb3dzT2Zmc2V0LnVwRG93bik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgd2Vla051bWJlcjogbnVtYmVyID0gTWF0aC5jZWlsKChkYXlEYXRlICsgb2Zmc2V0Rm9yVmVydGljYWwpIC8gNyk7XG4gICAgICAgICAgY29uc3QgZmlyc3RPZldlZWs6IG51bWJlciA9ICh3ZWVrTnVtYmVyIC0gMSkgKiA3IC0gb2Zmc2V0Rm9yVmVydGljYWwgKyAxO1xuICAgICAgICAgIGNvbnN0IGRlbHRhOiBudW1iZXIgPSBmaXJzdE9mV2VlayAtIGRheURhdGU7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlTcGVjaWFsS2V5cyhkYXlzLCBkYXksIGRlbHRhLCBhcnJvd3NPZmZzZXQudXBEb3duKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FzZSAnUGFnZURvd24nOiB7XG4gICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBjb25zdCBsYXN0RGF5TW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5nZXROdW1EYXlzSW5Nb250aChmdWxsRGF0ZSk7XG4gICAgICAgICAgY29uc3QgZGVsdGEgPSBsYXN0RGF5TW9udGggLSBkYXlEYXRlIC0gKChsYXN0RGF5TW9udGggLSBkYXlEYXRlKSAlIDcpO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5U3BlY2lhbEtleXMoZGF5cywgZGF5LCBkZWx0YSwgLWFycm93c09mZnNldC51cERvd24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHdlZWtOdW1iZXI6IG51bWJlciA9IE1hdGguY2VpbCgoZGF5RGF0ZSArIG9mZnNldEZvclZlcnRpY2FsKSAvIDcpO1xuICAgICAgICAgIGNvbnN0IGxhc3RPZldlZWs6IG51bWJlciA9IHdlZWtOdW1iZXIgKiA3IC0gb2Zmc2V0Rm9yVmVydGljYWw7XG4gICAgICAgICAgY29uc3QgZGVsdGE6IG51bWJlciA9IGxhc3RPZldlZWsgLSBkYXlEYXRlO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5U3BlY2lhbEtleXMoZGF5cywgZGF5LCBkZWx0YSwgLWFycm93c09mZnNldC51cERvd24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXNlICdIb21lJzoge1xuICAgICAgICBjb25zdCBkYXRlID0gZGF5RGF0ZSAtIDE7XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5U3BlY2lhbEtleXMoZGF5cywgZGF5LCAtZGF0ZSwgKzEpO1xuICAgICAgfVxuICAgICAgY2FzZSAnRW5kJzoge1xuICAgICAgICBjb25zdCBsYXN0RGF5TW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5nZXROdW1EYXlzSW5Nb250aChmdWxsRGF0ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5U3BlY2lhbEtleXMoZGF5cywgZGF5LCBsYXN0RGF5TW9udGggLSBkYXlEYXRlLCAtMSk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF5O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmREYXlBcnJvd0tleXMoXG4gICAgZGF5czogU2JiTWluaUNhbGVuZGFyRGF5RWxlbWVudFtdLFxuICAgIGRheTogU2JiTWluaUNhbGVuZGFyRGF5RWxlbWVudCxcbiAgICBkZWx0YTogbnVtYmVyLFxuICApOiBTYmJNaW5pQ2FsZW5kYXJEYXlFbGVtZW50IHtcbiAgICBjb25zdCBuZXdEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF5LmRhdGUpISxcbiAgICAgIGRlbHRhLFxuICAgICk7XG4gICAgY29uc3QgbmV3RGF0ZVN0cmluZyA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShuZXdEYXRlKTtcbiAgICBjb25zdCBuZXdEYXkgPSBkYXlzLmZpbmQoKGQpID0+IGQuZGF0ZSA9PT0gbmV3RGF0ZVN0cmluZyk7XG4gICAgaWYgKCFuZXdEYXkpIHtcbiAgICAgIHJldHVybiBkYXk7XG4gICAgfVxuICAgIHJldHVybiBuZXdEYXk7XG4gIH1cblxuICBwcml2YXRlIF9maW5kRGF5U3BlY2lhbEtleXMoXG4gICAgZGF5czogU2JiTWluaUNhbGVuZGFyRGF5RWxlbWVudFtdLFxuICAgIGRheTogU2JiTWluaUNhbGVuZGFyRGF5RWxlbWVudCxcbiAgICBkZWx0YTogbnVtYmVyLFxuICAgIHJlY3Vyc2l2ZURlbHRhOiBudW1iZXIsXG4gICk6IFNiYk1pbmlDYWxlbmRhckRheUVsZW1lbnQge1xuICAgIGNvbnN0IG5ld0RhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShkYXkuZGF0ZSkhLFxuICAgICAgZGVsdGEsXG4gICAgKTtcbiAgICBjb25zdCBuZXdEYXRlU3RyaW5nID0gdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKG5ld0RhdGUpO1xuICAgIGNvbnN0IG5ld0RheSA9IGRheXMuZmluZCgoZCkgPT4gZC5kYXRlID09PSBuZXdEYXRlU3RyaW5nKTtcbiAgICBpZiAoIW5ld0RheSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlTcGVjaWFsS2V5cyhkYXlzLCBkYXksIGRlbHRhICsgcmVjdXJzaXZlRGVsdGEsIHJlY3Vyc2l2ZURlbHRhKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0RheSE7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVTbG90Y2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuX3NldHVwS2V5ZG93bkxpc3RlbmVyKCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cEtleWRvd25MaXN0ZW5lcigpOiB2b2lkIHtcbiAgICB0aGlzLl9rZXlkb3duQWJvcnRDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX2tleWRvd25BYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5fZ2V0TWluaUNhbGVuZGFyRGF5cygpLmZvckVhY2goKGRheSwgaW5kZXgpID0+IHtcbiAgICAgIGRheS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGUpID0+IHRoaXMuX2hhbmRsZUtleWRvd25DYWxlbmRhckRheShlKSwge1xuICAgICAgICBzaWduYWw6IHRoaXMuX2tleWRvd25BYm9ydENvbnRyb2xsZXIhLnNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgaWYgKGluZGV4ICE9PSAwKSB7XG4gICAgICAgIGRheS50YWJJbmRleCA9IC0xO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZ2V0TWluaUNhbGVuZGFyRGF5cygpXG4gICAgICA/LmZpbmQoKGUpID0+IGUudGFiSW5kZXggPT09IDApXG4gICAgICA/LmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9zZXR1cEtleWRvd25MaXN0ZW5lcigpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fa2V5ZG93bkFib3J0Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYDxzbG90IEBzbG90Y2hhbmdlPSR7dGhpcy5faGFuZGxlU2xvdGNoYW5nZX0+PC9zbG90PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1taW5pLWNhbGVuZGFyJzogU2JiTWluaUNhbGVuZGFyRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIsm1c3RhdGVDb250cm9sbGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQXVCTSwwQkFBc0IsTUFBQTs7MEJBRDNCLGNBQWMsbUJBQW1CLENBQUM7Ozs7b0JBQ1k7Ozs7QUFBUixFQUFBLG1CQUFRLFlBQVU7QUFBQSxJQVV2RCxjQUFBO0FBQ0UsWUFBQTtBQU5GO0FBQWdCLHlCQUFBLCtCQUFBLGtCQUFBLE1BQUEsMkJBQThCLFlBQVk7QUFFbEQsV0FBQSwyQkFBdUIsa0JBQUEsTUFBQSw4QkFBQSxHQUEyQjtBQUNsRCxXQUFBLGVBQStCLFdBQUEsRUFBYSxVQUFVLGVBQWU7QUFLM0UsV0FBSyxjQUNILElBQUksbUJBQW1CLE1BQU07QUFBQSxRQUMzQixRQUFRLEVBQUUsV0FBVyxNQUFNLFNBQVMsS0FBQTtBQUFBLFFBQ3BDLFVBQVUsTUFBTSxLQUFLLG1CQUFBO0FBQUEsTUFBa0IsQ0FDeEMsQ0FBQztBQUFBLElBRU47QUFBQTtBQUFBLElBZEEsSUFBZ0IsY0FBVztBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBM0IsSUFBZ0IsWUFBVyxPQUFBO0FBQUEseUJBQUEsK0JBQUE7QUFBQSxJQUFBO0FBQUEsSUFnQm5CLHlCQUFzQjtBQUM1QixhQUFPLE1BQU0sS0FBSyxLQUFLLG1CQUFtQix5QkFBeUIsS0FBSyxFQUFFO0FBQUEsSUFDNUU7QUFBQSxJQUVRLHVCQUFvQjtBQUMxQixhQUFPLE1BQU0sS0FDWCxLQUFLLHVCQUFBLEVBQXlCLFFBQVEsQ0FBQyxVQUNyQyxNQUFNLEtBQUssTUFBTSxtQkFB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