@sbb-esta/lyne-elements 1.12.1 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (936) hide show
  1. package/accordion/accordion.d.ts +4 -8
  2. package/accordion/accordion.d.ts.map +1 -1
  3. package/accordion.js +90 -81
  4. package/action-group/action-group.d.ts +5 -5
  5. package/action-group/action-group.d.ts.map +1 -1
  6. package/action-group.js +100 -50
  7. package/alert/alert/alert.d.ts +11 -11
  8. package/alert/alert/alert.d.ts.map +1 -1
  9. package/alert/alert-group/alert-group.d.ts +4 -4
  10. package/alert/alert-group/alert-group.d.ts.map +1 -1
  11. package/alert/alert-group.js +101 -69
  12. package/alert/alert.js +191 -104
  13. package/autocomplete/autocomplete-base-element.d.ts +3 -7
  14. package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  15. package/autocomplete/autocomplete.d.ts.map +1 -1
  16. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts.map +1 -1
  17. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts +1 -0
  18. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
  19. package/autocomplete-grid/autocomplete-grid-button.js +53 -60
  20. package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.d.ts.map +1 -1
  21. package/autocomplete-grid/autocomplete-grid-cell.js +20 -22
  22. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts.map +1 -1
  23. package/autocomplete-grid/autocomplete-grid-optgroup.js +31 -35
  24. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts.map +1 -1
  25. package/autocomplete-grid/autocomplete-grid-option.js +45 -63
  26. package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.d.ts.map +1 -1
  27. package/autocomplete-grid/autocomplete-grid-row.js +23 -25
  28. package/autocomplete-grid/autocomplete-grid.js +112 -133
  29. package/autocomplete.js +283 -295
  30. package/breadcrumb/breadcrumb/breadcrumb.d.ts +1 -1
  31. package/breadcrumb/breadcrumb/breadcrumb.d.ts.map +1 -1
  32. package/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts.map +1 -1
  33. package/breadcrumb/breadcrumb-group.js +107 -114
  34. package/breadcrumb/breadcrumb.js +44 -35
  35. package/button/button/button.d.ts.map +1 -1
  36. package/button/button-link/button-link.d.ts.map +1 -1
  37. package/button/button-link.js +15 -18
  38. package/button/button-static/button-static.d.ts.map +1 -1
  39. package/button/button-static.js +15 -18
  40. package/button/button.js +15 -18
  41. package/button/common/button-common.d.ts +4 -4
  42. package/button/common/button-common.d.ts.map +1 -1
  43. package/button/common.js +41 -30
  44. package/button/mini-button/mini-button-base-element.d.ts.map +1 -1
  45. package/button/mini-button/mini-button.d.ts.map +1 -1
  46. package/button/mini-button-group/mini-button-group.d.ts +2 -2
  47. package/button/mini-button-group/mini-button-group.d.ts.map +1 -1
  48. package/button/mini-button-group.js +55 -43
  49. package/button/mini-button.js +28 -32
  50. package/button/secondary-button/secondary-button.d.ts.map +1 -1
  51. package/button/secondary-button-link/secondary-button-link.d.ts.map +1 -1
  52. package/button/secondary-button-link.js +15 -18
  53. package/button/secondary-button-static/secondary-button-static.d.ts.map +1 -1
  54. package/button/secondary-button-static.js +15 -18
  55. package/button/secondary-button.js +15 -18
  56. package/button/tertiary-button/tertiary-button.d.ts.map +1 -1
  57. package/button/tertiary-button-link/tertiary-button-link.d.ts.map +1 -1
  58. package/button/tertiary-button-link.js +15 -18
  59. package/button/tertiary-button-static/tertiary-button-static.d.ts.map +1 -1
  60. package/button/tertiary-button-static.js +15 -18
  61. package/button/tertiary-button.js +15 -18
  62. package/button/transparent-button/transparent-button.d.ts.map +1 -1
  63. package/button/transparent-button-link/transparent-button-link.d.ts.map +1 -1
  64. package/button/transparent-button-link.js +15 -18
  65. package/button/transparent-button-static/transparent-button-static.d.ts.map +1 -1
  66. package/button/transparent-button-static.js +15 -18
  67. package/button/transparent-button.js +15 -18
  68. package/calendar/calendar.d.ts +7 -7
  69. package/calendar/calendar.d.ts.map +1 -1
  70. package/calendar.js +638 -692
  71. package/card/card/card.d.ts +2 -2
  72. package/card/card/card.d.ts.map +1 -1
  73. package/card/card-badge/card-badge.d.ts +1 -1
  74. package/card/card-badge/card-badge.d.ts.map +1 -1
  75. package/card/card-badge.js +45 -34
  76. package/card/card-button/card-button.d.ts.map +1 -1
  77. package/card/card-button.js +16 -16
  78. package/card/card-link/card-link.d.ts.map +1 -1
  79. package/card/card-link.js +17 -17
  80. package/card/card.js +55 -36
  81. package/card/common/card-action-common.d.ts +1 -1
  82. package/card/common/card-action-common.d.ts.map +1 -1
  83. package/card/common.js +27 -33
  84. package/checkbox/checkbox/checkbox.d.ts +3 -4
  85. package/checkbox/checkbox/checkbox.d.ts.map +1 -1
  86. package/checkbox/checkbox-group/checkbox-group.d.ts +4 -4
  87. package/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -1
  88. package/checkbox/checkbox-group.js +99 -76
  89. package/checkbox/checkbox-panel/checkbox-panel.d.ts +2 -3
  90. package/checkbox/checkbox-panel/checkbox-panel.d.ts.map +1 -1
  91. package/checkbox/checkbox-panel.js +51 -50
  92. package/checkbox/checkbox.js +54 -43
  93. package/checkbox/common/checkbox-common.d.ts +1 -1
  94. package/checkbox/common/checkbox-common.d.ts.map +1 -1
  95. package/checkbox/common.js +39 -24
  96. package/chip/chip.d.ts +2 -2
  97. package/chip/chip.d.ts.map +1 -1
  98. package/chip.js +45 -26
  99. package/clock/clock.d.ts +1 -1
  100. package/clock/clock.d.ts.map +1 -1
  101. package/clock.js +136 -144
  102. package/container/container/container.d.ts +3 -3
  103. package/container/container/container.d.ts.map +1 -1
  104. package/container/container.js +60 -35
  105. package/container/sticky-bar/sticky-bar.d.ts +1 -1
  106. package/container/sticky-bar/sticky-bar.d.ts.map +1 -1
  107. package/container/sticky-bar.js +55 -47
  108. package/core/a11y.js +29 -51
  109. package/core/base-elements/action-base-element.d.ts.map +1 -1
  110. package/core/base-elements/button-base-element.d.ts +2 -2
  111. package/core/base-elements/button-base-element.d.ts.map +1 -1
  112. package/core/base-elements/link-base-element.d.ts +5 -5
  113. package/core/base-elements/link-base-element.d.ts.map +1 -1
  114. package/core/base-elements.js +243 -196
  115. package/core/controllers.js +8 -13
  116. package/core/decorators/base.d.ts +14 -0
  117. package/core/decorators/base.d.ts.map +1 -0
  118. package/core/decorators/force-type.d.ts +8 -0
  119. package/core/decorators/force-type.d.ts.map +1 -0
  120. package/core/decorators/get-override.d.ts +7 -0
  121. package/core/decorators/get-override.d.ts.map +1 -0
  122. package/core/decorators/handle-distinct-change.d.ts +8 -0
  123. package/core/decorators/handle-distinct-change.d.ts.map +1 -0
  124. package/core/decorators/omit-empty-converter.d.ts +8 -0
  125. package/core/decorators/omit-empty-converter.d.ts.map +1 -0
  126. package/core/decorators.d.ts +4 -0
  127. package/core/decorators.d.ts.map +1 -1
  128. package/core/decorators.js +59 -15
  129. package/core/dom.js +1 -5
  130. package/core/eventing.js +1 -4
  131. package/core/interfaces/paginator-page.d.ts +7 -0
  132. package/core/interfaces/paginator-page.d.ts.map +1 -0
  133. package/core/interfaces.d.ts +1 -0
  134. package/core/interfaces.d.ts.map +1 -1
  135. package/core/mixins/disabled-mixin.d.ts +2 -3
  136. package/core/mixins/disabled-mixin.d.ts.map +1 -1
  137. package/core/mixins/form-associated-checkbox-mixin.d.ts +1 -0
  138. package/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
  139. package/core/mixins/form-associated-mixin.d.ts +6 -6
  140. package/core/mixins/form-associated-mixin.d.ts.map +1 -1
  141. package/core/mixins/named-slot-list-mixin.d.ts +1 -1
  142. package/core/mixins/named-slot-list-mixin.d.ts.map +1 -1
  143. package/core/mixins/negative-mixin.d.ts +1 -1
  144. package/core/mixins/negative-mixin.d.ts.map +1 -1
  145. package/core/mixins/panel-mixin.d.ts +3 -3
  146. package/core/mixins/panel-mixin.d.ts.map +1 -1
  147. package/core/mixins/required-mixin.d.ts +2 -3
  148. package/core/mixins/required-mixin.d.ts.map +1 -1
  149. package/core/mixins.js +291 -242
  150. package/core/styles/mixins/buttons.scss +1 -1
  151. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables.scss +4 -0
  152. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables_css--mixin.scss +5 -1
  153. package/core/testing/private.d.ts +1 -0
  154. package/core/testing/private.d.ts.map +1 -1
  155. package/core/testing.js +7 -13
  156. package/core.css +5 -1
  157. package/custom-elements.json +14515 -13465
  158. package/datepicker/common/datepicker-button.d.ts +2 -2
  159. package/datepicker/common/datepicker-button.d.ts.map +1 -1
  160. package/datepicker/common.js +110 -116
  161. package/datepicker/datepicker/datepicker.d.ts +6 -6
  162. package/datepicker/datepicker/datepicker.d.ts.map +1 -1
  163. package/datepicker/datepicker-next-day/datepicker-next-day.d.ts.map +1 -1
  164. package/datepicker/datepicker-next-day.js +24 -26
  165. package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts.map +1 -1
  166. package/datepicker/datepicker-previous-day.js +25 -27
  167. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +6 -6
  168. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  169. package/datepicker/datepicker-toggle.js +154 -136
  170. package/datepicker/datepicker.js +248 -213
  171. package/development/accordion/accordion.d.ts +4 -8
  172. package/development/accordion/accordion.d.ts.map +1 -1
  173. package/development/accordion.js +118 -93
  174. package/development/action-group/action-group.d.ts +5 -5
  175. package/development/action-group/action-group.d.ts.map +1 -1
  176. package/development/action-group.js +138 -64
  177. package/development/alert/alert/alert.d.ts +11 -11
  178. package/development/alert/alert/alert.d.ts.map +1 -1
  179. package/development/alert/alert-group/alert-group.d.ts +4 -4
  180. package/development/alert/alert-group/alert-group.d.ts.map +1 -1
  181. package/development/alert/alert-group.js +135 -79
  182. package/development/alert/alert.js +259 -109
  183. package/development/autocomplete/autocomplete-base-element.d.ts +3 -7
  184. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  185. package/development/autocomplete/autocomplete.d.ts.map +1 -1
  186. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts.map +1 -1
  187. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts +1 -0
  188. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
  189. package/development/autocomplete-grid/autocomplete-grid-button.js +75 -76
  190. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.d.ts.map +1 -1
  191. package/development/autocomplete-grid/autocomplete-grid-cell.js +24 -24
  192. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts.map +1 -1
  193. package/development/autocomplete-grid/autocomplete-grid-optgroup.js +38 -39
  194. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts.map +1 -1
  195. package/development/autocomplete-grid/autocomplete-grid-option.js +57 -73
  196. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.d.ts.map +1 -1
  197. package/development/autocomplete-grid/autocomplete-grid-row.js +28 -28
  198. package/development/autocomplete-grid/autocomplete-grid.js +142 -160
  199. package/development/autocomplete.js +394 -393
  200. package/development/breadcrumb/breadcrumb/breadcrumb.d.ts +1 -1
  201. package/development/breadcrumb/breadcrumb/breadcrumb.d.ts.map +1 -1
  202. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts.map +1 -1
  203. package/development/breadcrumb/breadcrumb-group.js +130 -130
  204. package/development/breadcrumb/breadcrumb.js +53 -36
  205. package/development/button/button/button.d.ts.map +1 -1
  206. package/development/button/button-link/button-link.d.ts.map +1 -1
  207. package/development/button/button-link.js +18 -19
  208. package/development/button/button-static/button-static.d.ts.map +1 -1
  209. package/development/button/button-static.js +18 -19
  210. package/development/button/button.js +18 -19
  211. package/development/button/common/button-common.d.ts +4 -4
  212. package/development/button/common/button-common.d.ts.map +1 -1
  213. package/development/button/common.js +51 -30
  214. package/development/button/mini-button/mini-button-base-element.d.ts.map +1 -1
  215. package/development/button/mini-button/mini-button.d.ts.map +1 -1
  216. package/development/button/mini-button-group/mini-button-group.d.ts +2 -2
  217. package/development/button/mini-button-group/mini-button-group.d.ts.map +1 -1
  218. package/development/button/mini-button-group.js +77 -50
  219. package/development/button/mini-button.js +39 -38
  220. package/development/button/secondary-button/secondary-button.d.ts.map +1 -1
  221. package/development/button/secondary-button-link/secondary-button-link.d.ts.map +1 -1
  222. package/development/button/secondary-button-link.js +18 -19
  223. package/development/button/secondary-button-static/secondary-button-static.d.ts.map +1 -1
  224. package/development/button/secondary-button-static.js +18 -19
  225. package/development/button/secondary-button.js +18 -19
  226. package/development/button/tertiary-button/tertiary-button.d.ts.map +1 -1
  227. package/development/button/tertiary-button-link/tertiary-button-link.d.ts.map +1 -1
  228. package/development/button/tertiary-button-link.js +18 -19
  229. package/development/button/tertiary-button-static/tertiary-button-static.d.ts.map +1 -1
  230. package/development/button/tertiary-button-static.js +18 -19
  231. package/development/button/tertiary-button.js +18 -19
  232. package/development/button/transparent-button/transparent-button.d.ts.map +1 -1
  233. package/development/button/transparent-button-link/transparent-button-link.d.ts.map +1 -1
  234. package/development/button/transparent-button-link.js +18 -19
  235. package/development/button/transparent-button-static/transparent-button-static.d.ts.map +1 -1
  236. package/development/button/transparent-button-static.js +18 -19
  237. package/development/button/transparent-button.js +18 -19
  238. package/development/calendar/calendar.d.ts +7 -7
  239. package/development/calendar/calendar.d.ts.map +1 -1
  240. package/development/calendar.js +768 -766
  241. package/development/card/card/card.d.ts +2 -2
  242. package/development/card/card/card.d.ts.map +1 -1
  243. package/development/card/card-badge/card-badge.d.ts +1 -1
  244. package/development/card/card-badge/card-badge.d.ts.map +1 -1
  245. package/development/card/card-badge.js +65 -45
  246. package/development/card/card-button/card-button.d.ts.map +1 -1
  247. package/development/card/card-button.js +23 -20
  248. package/development/card/card-link/card-link.d.ts.map +1 -1
  249. package/development/card/card-link.js +23 -20
  250. package/development/card/card.js +72 -41
  251. package/development/card/common/card-action-common.d.ts +1 -1
  252. package/development/card/common/card-action-common.d.ts.map +1 -1
  253. package/development/card/common.js +74 -73
  254. package/development/checkbox/checkbox/checkbox.d.ts +3 -4
  255. package/development/checkbox/checkbox/checkbox.d.ts.map +1 -1
  256. package/development/checkbox/checkbox-group/checkbox-group.d.ts +4 -4
  257. package/development/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -1
  258. package/development/checkbox/checkbox-group.js +139 -92
  259. package/development/checkbox/checkbox-panel/checkbox-panel.d.ts +2 -3
  260. package/development/checkbox/checkbox-panel/checkbox-panel.d.ts.map +1 -1
  261. package/development/checkbox/checkbox-panel.js +68 -60
  262. package/development/checkbox/checkbox.js +69 -46
  263. package/development/checkbox/common/checkbox-common.d.ts +1 -1
  264. package/development/checkbox/common/checkbox-common.d.ts.map +1 -1
  265. package/development/checkbox/common.js +65 -46
  266. package/development/chip/chip.d.ts +2 -2
  267. package/development/chip/chip.d.ts.map +1 -1
  268. package/development/chip.js +64 -33
  269. package/development/clock/clock.d.ts +1 -1
  270. package/development/clock/clock.d.ts.map +1 -1
  271. package/development/clock.js +203 -201
  272. package/development/container/container/container.d.ts +3 -3
  273. package/development/container/container/container.d.ts.map +1 -1
  274. package/development/container/container.js +86 -45
  275. package/development/container/sticky-bar/sticky-bar.d.ts +1 -1
  276. package/development/container/sticky-bar/sticky-bar.d.ts.map +1 -1
  277. package/development/container/sticky-bar.js +76 -58
  278. package/development/core/a11y.js +40 -62
  279. package/development/core/base-elements/action-base-element.d.ts.map +1 -1
  280. package/development/core/base-elements/button-base-element.d.ts +2 -2
  281. package/development/core/base-elements/button-base-element.d.ts.map +1 -1
  282. package/development/core/base-elements/link-base-element.d.ts +5 -5
  283. package/development/core/base-elements/link-base-element.d.ts.map +1 -1
  284. package/development/core/base-elements.js +329 -226
  285. package/development/core/config.js +1 -1
  286. package/development/core/controllers.js +13 -21
  287. package/development/core/datetime.js +1 -1
  288. package/development/core/decorators/base.d.ts +14 -0
  289. package/development/core/decorators/base.d.ts.map +1 -0
  290. package/development/core/decorators/force-type.d.ts +8 -0
  291. package/development/core/decorators/force-type.d.ts.map +1 -0
  292. package/development/core/decorators/get-override.d.ts +7 -0
  293. package/development/core/decorators/get-override.d.ts.map +1 -0
  294. package/development/core/decorators/handle-distinct-change.d.ts +8 -0
  295. package/development/core/decorators/handle-distinct-change.d.ts.map +1 -0
  296. package/development/core/decorators/omit-empty-converter.d.ts +8 -0
  297. package/development/core/decorators/omit-empty-converter.d.ts.map +1 -0
  298. package/development/core/decorators.d.ts +4 -0
  299. package/development/core/decorators.d.ts.map +1 -1
  300. package/development/core/decorators.js +69 -5
  301. package/development/core/dom.js +2 -6
  302. package/development/core/eventing.js +2 -5
  303. package/development/core/i18n.js +1 -1
  304. package/development/core/interfaces/paginator-page.d.ts +7 -0
  305. package/development/core/interfaces/paginator-page.d.ts.map +1 -0
  306. package/development/core/interfaces.d.ts +1 -0
  307. package/development/core/interfaces.d.ts.map +1 -1
  308. package/development/core/mixins/disabled-mixin.d.ts +2 -3
  309. package/development/core/mixins/disabled-mixin.d.ts.map +1 -1
  310. package/development/core/mixins/form-associated-checkbox-mixin.d.ts +1 -0
  311. package/development/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
  312. package/development/core/mixins/form-associated-mixin.d.ts +6 -6
  313. package/development/core/mixins/form-associated-mixin.d.ts.map +1 -1
  314. package/development/core/mixins/named-slot-list-mixin.d.ts +1 -1
  315. package/development/core/mixins/named-slot-list-mixin.d.ts.map +1 -1
  316. package/development/core/mixins/negative-mixin.d.ts +1 -1
  317. package/development/core/mixins/negative-mixin.d.ts.map +1 -1
  318. package/development/core/mixins/panel-mixin.d.ts +3 -3
  319. package/development/core/mixins/panel-mixin.d.ts.map +1 -1
  320. package/development/core/mixins/required-mixin.d.ts +2 -3
  321. package/development/core/mixins/required-mixin.d.ts.map +1 -1
  322. package/development/core/mixins.js +573 -478
  323. package/development/core/observers.js +1 -1
  324. package/development/core/overlay.js +1 -1
  325. package/development/core/testing/private.d.ts +1 -0
  326. package/development/core/testing/private.d.ts.map +1 -1
  327. package/development/core/testing.js +16 -22
  328. package/development/datepicker/common/datepicker-button.d.ts +2 -2
  329. package/development/datepicker/common/datepicker-button.d.ts.map +1 -1
  330. package/development/datepicker/common.js +144 -142
  331. package/development/datepicker/datepicker/datepicker.d.ts +6 -6
  332. package/development/datepicker/datepicker/datepicker.d.ts.map +1 -1
  333. package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts.map +1 -1
  334. package/development/datepicker/datepicker-next-day.js +33 -33
  335. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts.map +1 -1
  336. package/development/datepicker/datepicker-previous-day.js +33 -33
  337. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +6 -6
  338. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  339. package/development/datepicker/datepicker-toggle.js +227 -174
  340. package/development/datepicker/datepicker.js +327 -249
  341. package/development/dialog/dialog/dialog.d.ts +1 -1
  342. package/development/dialog/dialog/dialog.d.ts.map +1 -1
  343. package/development/dialog/dialog-actions/dialog-actions.d.ts.map +1 -1
  344. package/development/dialog/dialog-actions.js +21 -20
  345. package/development/dialog/dialog-content/dialog-content.d.ts.map +1 -1
  346. package/development/dialog/dialog-content.js +22 -21
  347. package/development/dialog/dialog-title/dialog-title.d.ts +3 -3
  348. package/development/dialog/dialog-title/dialog-title.d.ts.map +1 -1
  349. package/development/dialog/dialog-title.js +121 -66
  350. package/development/dialog/dialog.js +205 -191
  351. package/development/divider/divider.d.ts +1 -1
  352. package/development/divider/divider.d.ts.map +1 -1
  353. package/development/divider.js +55 -36
  354. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts +4 -4
  355. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
  356. package/development/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts.map +1 -1
  357. package/development/expansion-panel/expansion-panel-content.js +25 -25
  358. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts.map +1 -1
  359. package/development/expansion-panel/expansion-panel-header.js +56 -63
  360. package/development/expansion-panel/expansion-panel.js +227 -182
  361. package/development/file-selector/file-selector.d.ts +26 -15
  362. package/development/file-selector/file-selector.d.ts.map +1 -1
  363. package/development/file-selector.js +305 -172
  364. package/development/flip-card/flip-card/flip-card.d.ts +2 -2
  365. package/development/flip-card/flip-card/flip-card.d.ts.map +1 -1
  366. package/development/flip-card/flip-card-details/flip-card-details.d.ts.map +1 -1
  367. package/development/flip-card/flip-card-details.js +39 -39
  368. package/development/flip-card/flip-card-summary/flip-card-summary.d.ts +1 -1
  369. package/development/flip-card/flip-card-summary/flip-card-summary.d.ts.map +1 -1
  370. package/development/flip-card/flip-card-summary.js +57 -38
  371. package/development/flip-card/flip-card.js +110 -78
  372. package/development/footer/footer.d.ts +4 -4
  373. package/development/footer/footer.d.ts.map +1 -1
  374. package/development/footer.js +103 -41
  375. package/development/form-error/form-error.d.ts.map +1 -1
  376. package/development/form-error.js +29 -28
  377. package/development/form-field/form-field/form-field.d.ts +10 -10
  378. package/development/form-field/form-field/form-field.d.ts.map +1 -1
  379. package/development/form-field/form-field-clear/form-field-clear.d.ts.map +1 -1
  380. package/development/form-field/form-field-clear.js +51 -51
  381. package/development/form-field/form-field.js +439 -328
  382. package/development/header/common/header-action-common.d.ts +2 -2
  383. package/development/header/common/header-action-common.d.ts.map +1 -1
  384. package/development/header/common.js +95 -28
  385. package/development/header/header/header.d.ts +4 -4
  386. package/development/header/header/header.d.ts.map +1 -1
  387. package/development/header/header-button/header-button.d.ts.map +1 -1
  388. package/development/header/header-button.js +19 -18
  389. package/development/header/header-link/header-link.d.ts.map +1 -1
  390. package/development/header/header-link.js +19 -16
  391. package/development/header/header.js +198 -140
  392. package/development/icon/icon-base.d.ts +3 -4
  393. package/development/icon/icon-base.d.ts.map +1 -1
  394. package/development/icon/icon-name-mixin.d.ts +1 -1
  395. package/development/icon/icon-name-mixin.d.ts.map +1 -1
  396. package/development/icon/icon.d.ts +2 -2
  397. package/development/icon/icon.d.ts.map +1 -1
  398. package/development/icon.js +258 -157
  399. package/development/image/image.d.ts +17 -17
  400. package/development/image/image.d.ts.map +1 -1
  401. package/development/image.js +584 -216
  402. package/development/journey-header/journey-header.d.ts +5 -5
  403. package/development/journey-header/journey-header.d.ts.map +1 -1
  404. package/development/journey-header.js +115 -43
  405. package/development/lead-container/lead-container.d.ts.map +1 -1
  406. package/development/lead-container.js +22 -21
  407. package/development/link/block-link/block-link.d.ts.map +1 -1
  408. package/development/link/block-link-button/block-link-button.d.ts.map +1 -1
  409. package/development/link/block-link-button.js +19 -18
  410. package/development/link/block-link-static/block-link-static.d.ts.map +1 -1
  411. package/development/link/block-link-static.js +19 -18
  412. package/development/link/block-link.js +19 -18
  413. package/development/link/common/block-link-common.d.ts +4 -3
  414. package/development/link/common/block-link-common.d.ts.map +1 -1
  415. package/development/link/common/link-common.d.ts +1 -1
  416. package/development/link/common/link-common.d.ts.map +1 -1
  417. package/development/link/common.js +81 -51
  418. package/development/link/link/link.d.ts.map +1 -1
  419. package/development/link/link-button/link-button.d.ts.map +1 -1
  420. package/development/link/link-button.js +19 -18
  421. package/development/link/link-static/link-static.d.ts.map +1 -1
  422. package/development/link/link-static.js +19 -18
  423. package/development/link/link.js +19 -18
  424. package/development/link-list/common/link-list-base.d.ts +3 -3
  425. package/development/link-list/common/link-list-base.d.ts.map +1 -1
  426. package/development/link-list/common.js +97 -48
  427. package/development/link-list/link-list/link-list.d.ts +2 -2
  428. package/development/link-list/link-list/link-list.d.ts.map +1 -1
  429. package/development/link-list/link-list-anchor/link-list-anchor.d.ts.map +1 -1
  430. package/development/link-list/link-list-anchor.js +18 -17
  431. package/development/link-list/link-list.js +60 -28
  432. package/development/loading-indicator/loading-indicator.d.ts +3 -3
  433. package/development/loading-indicator/loading-indicator.d.ts.map +1 -1
  434. package/development/loading-indicator.js +83 -45
  435. package/development/logo/logo.d.ts +2 -2
  436. package/development/logo/logo.d.ts.map +1 -1
  437. package/development/logo.js +64 -32
  438. package/development/map-container/map-container.d.ts +2 -2
  439. package/development/map-container/map-container.d.ts.map +1 -1
  440. package/development/map-container.js +107 -75
  441. package/development/menu/common/menu-action-common.d.ts +2 -2
  442. package/development/menu/common/menu-action-common.d.ts.map +1 -1
  443. package/development/menu/common.js +41 -20
  444. package/development/menu/menu/menu.d.ts +1 -1
  445. package/development/menu/menu/menu.d.ts.map +1 -1
  446. package/development/menu/menu-button/menu-button.d.ts.map +1 -1
  447. package/development/menu/menu-button.js +19 -18
  448. package/development/menu/menu-link/menu-link.d.ts.map +1 -1
  449. package/development/menu/menu-link.js +19 -18
  450. package/development/menu/menu.js +261 -241
  451. package/development/message/message.d.ts +2 -2
  452. package/development/message/message.d.ts.map +1 -1
  453. package/development/message.js +65 -32
  454. package/development/navigation/common/navigation-action-common.d.ts +1 -1
  455. package/development/navigation/common/navigation-action-common.d.ts.map +1 -1
  456. package/development/navigation/common.js +63 -52
  457. package/development/navigation/navigation/navigation.d.ts +2 -2
  458. package/development/navigation/navigation/navigation.d.ts.map +1 -1
  459. package/development/navigation/navigation-button/navigation-button.d.ts.map +1 -1
  460. package/development/navigation/navigation-button.js +19 -18
  461. package/development/navigation/navigation-link/navigation-link.d.ts.map +1 -1
  462. package/development/navigation/navigation-link.js +19 -18
  463. package/development/navigation/navigation-list/navigation-list.d.ts +1 -1
  464. package/development/navigation/navigation-list/navigation-list.d.ts.map +1 -1
  465. package/development/navigation/navigation-list.js +64 -41
  466. package/development/navigation/navigation-marker/navigation-marker.d.ts +1 -1
  467. package/development/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
  468. package/development/navigation/navigation-marker.js +108 -91
  469. package/development/navigation/navigation-section/navigation-section.d.ts +3 -3
  470. package/development/navigation/navigation-section/navigation-section.d.ts.map +1 -1
  471. package/development/navigation/navigation-section.js +282 -236
  472. package/development/navigation/navigation.js +278 -254
  473. package/development/notification/notification.d.ts +6 -6
  474. package/development/notification/notification.d.ts.map +1 -1
  475. package/development/notification.js +212 -146
  476. package/development/option/optgroup/optgroup-base-element.d.ts +3 -3
  477. package/development/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  478. package/development/option/optgroup/optgroup.d.ts.map +1 -1
  479. package/development/option/optgroup.js +187 -142
  480. package/development/option/option/option-base-element.d.ts +7 -7
  481. package/development/option/option/option-base-element.d.ts.map +1 -1
  482. package/development/option/option/option.d.ts.map +1 -1
  483. package/development/option/option.js +392 -296
  484. package/development/overlay/overlay-base-element.d.ts +1 -1
  485. package/development/overlay/overlay-base-element.d.ts.map +1 -1
  486. package/development/overlay/overlay.d.ts +4 -4
  487. package/development/overlay/overlay.d.ts.map +1 -1
  488. package/development/overlay.js +260 -207
  489. package/development/paginator/common/paginator-common.d.ts +26 -0
  490. package/development/paginator/common/paginator-common.d.ts.map +1 -0
  491. package/development/paginator/common.d.ts +2 -0
  492. package/development/paginator/common.d.ts.map +1 -0
  493. package/development/paginator/common.js +189 -0
  494. package/development/paginator/compact-paginator/compact-paginator.d.ts +20 -0
  495. package/development/paginator/compact-paginator/compact-paginator.d.ts.map +1 -0
  496. package/development/paginator/compact-paginator.d.ts +2 -0
  497. package/development/paginator/compact-paginator.d.ts.map +1 -0
  498. package/development/paginator/compact-paginator.js +96 -0
  499. package/development/paginator/paginator/paginator.d.ts +51 -0
  500. package/development/paginator/paginator/paginator.d.ts.map +1 -0
  501. package/development/paginator/paginator.d.ts +1 -90
  502. package/development/paginator/paginator.d.ts.map +1 -1
  503. package/development/paginator/paginator.js +449 -0
  504. package/development/paginator.d.ts +2 -0
  505. package/development/paginator.d.ts.map +1 -1
  506. package/development/paginator.js +4 -519
  507. package/development/popover/popover/popover.d.ts +6 -7
  508. package/development/popover/popover/popover.d.ts.map +1 -1
  509. package/development/popover/popover-trigger/popover-trigger.d.ts.map +1 -1
  510. package/development/popover/popover-trigger.js +29 -30
  511. package/development/popover/popover.js +358 -303
  512. package/development/radio-button/common/radio-button-common.d.ts +1 -1
  513. package/development/radio-button/common/radio-button-common.d.ts.map +1 -1
  514. package/development/radio-button/common.js +170 -127
  515. package/development/radio-button/radio-button/radio-button.d.ts +2 -6
  516. package/development/radio-button/radio-button/radio-button.d.ts.map +1 -1
  517. package/development/radio-button/radio-button-group/radio-button-group.d.ts +6 -6
  518. package/development/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  519. package/development/radio-button/radio-button-group.js +269 -199
  520. package/development/radio-button/radio-button-panel/radio-button-panel.d.ts +2 -6
  521. package/development/radio-button/radio-button-panel/radio-button-panel.d.ts.map +1 -1
  522. package/development/radio-button/radio-button-panel.js +60 -48
  523. package/development/radio-button/radio-button.js +54 -40
  524. package/development/screen-reader-only/screen-reader-only.d.ts.map +1 -1
  525. package/development/screen-reader-only.js +22 -21
  526. package/development/select/select.d.ts +17 -9
  527. package/development/select/select.d.ts.map +1 -1
  528. package/development/select.js +557 -524
  529. package/development/selection-expansion-panel/selection-expansion-panel.d.ts +3 -3
  530. package/development/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  531. package/development/selection-expansion-panel.js +223 -193
  532. package/development/signet/signet.d.ts +2 -2
  533. package/development/signet/signet.d.ts.map +1 -1
  534. package/development/signet.js +65 -33
  535. package/development/skiplink-list/skiplink-list.d.ts +2 -2
  536. package/development/skiplink-list/skiplink-list.d.ts.map +1 -1
  537. package/development/skiplink-list.js +74 -41
  538. package/development/slider/slider.d.ts +7 -5
  539. package/development/slider/slider.d.ts.map +1 -1
  540. package/development/slider.js +260 -181
  541. package/development/status/status.d.ts +3 -3
  542. package/development/status/status.d.ts.map +1 -1
  543. package/development/status.js +96 -51
  544. package/development/stepper/step/step.d.ts.map +1 -1
  545. package/development/stepper/step-label/step-label.d.ts.map +1 -1
  546. package/development/stepper/step-label.js +86 -90
  547. package/development/stepper/step.js +122 -126
  548. package/development/stepper/stepper/stepper.d.ts +3 -3
  549. package/development/stepper/stepper/stepper.d.ts.map +1 -1
  550. package/development/stepper/stepper.js +291 -241
  551. package/development/table/table-wrapper/table-wrapper.d.ts.map +1 -1
  552. package/development/table/table-wrapper.js +37 -39
  553. package/development/tabs/tab/tab.d.ts.map +1 -1
  554. package/development/tabs/tab-group/tab-group.d.ts +2 -2
  555. package/development/tabs/tab-group/tab-group.d.ts.map +1 -1
  556. package/development/tabs/tab-group.js +296 -279
  557. package/development/tabs/tab-label/tab-label.d.ts +3 -3
  558. package/development/tabs/tab-label/tab-label.d.ts.map +1 -1
  559. package/development/tabs/tab-label.js +83 -37
  560. package/development/tabs/tab.js +40 -39
  561. package/development/tag/tag/tag.d.ts +3 -5
  562. package/development/tag/tag/tag.d.ts.map +1 -1
  563. package/development/tag/tag-group/tag-group.d.ts +3 -3
  564. package/development/tag/tag-group/tag-group.d.ts.map +1 -1
  565. package/development/tag/tag-group.js +143 -88
  566. package/development/tag/tag.js +126 -89
  567. package/development/teaser/teaser.d.ts +4 -4
  568. package/development/teaser/teaser.d.ts.map +1 -1
  569. package/development/teaser-hero/teaser-hero.d.ts +3 -3
  570. package/development/teaser-hero/teaser-hero.d.ts.map +1 -1
  571. package/development/teaser-hero.js +83 -36
  572. package/development/teaser-product/common/teaser-product-common.d.ts +1 -1
  573. package/development/teaser-product/common/teaser-product-common.d.ts.map +1 -1
  574. package/development/teaser-product/common.js +51 -26
  575. package/development/teaser-product/teaser-product/teaser-product.d.ts.map +1 -1
  576. package/development/teaser-product/teaser-product-static/teaser-product-static.d.ts.map +1 -1
  577. package/development/teaser-product/teaser-product-static.js +18 -19
  578. package/development/teaser-product/teaser-product.js +18 -19
  579. package/development/teaser.js +94 -40
  580. package/development/time-input/time-input.d.ts +1 -1
  581. package/development/time-input/time-input.d.ts.map +1 -1
  582. package/development/time-input.js +225 -219
  583. package/development/timetable-occupancy/timetable-occupancy.d.ts +2 -2
  584. package/development/timetable-occupancy/timetable-occupancy.d.ts.map +1 -1
  585. package/development/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +1 -1
  586. package/development/timetable-occupancy-icon/timetable-occupancy-icon.d.ts.map +1 -1
  587. package/development/timetable-occupancy-icon.js +78 -57
  588. package/development/timetable-occupancy.js +67 -35
  589. package/development/title/title-base.d.ts +3 -3
  590. package/development/title/title-base.d.ts.map +1 -1
  591. package/development/title/title.d.ts.map +1 -1
  592. package/development/title.js +106 -58
  593. package/development/toast/toast.d.ts +4 -4
  594. package/development/toast/toast.d.ts.map +1 -1
  595. package/development/toast.js +204 -146
  596. package/development/toggle/toggle/toggle.d.ts +3 -5
  597. package/development/toggle/toggle/toggle.d.ts.map +1 -1
  598. package/development/toggle/toggle-option/toggle-option.d.ts +2 -2
  599. package/development/toggle/toggle-option/toggle-option.d.ts.map +1 -1
  600. package/development/toggle/toggle-option.js +127 -93
  601. package/development/toggle/toggle.js +200 -163
  602. package/development/toggle-check/toggle-check.d.ts +4 -3
  603. package/development/toggle-check/toggle-check.d.ts.map +1 -1
  604. package/development/toggle-check.js +87 -49
  605. package/development/train/train/train.d.ts +5 -5
  606. package/development/train/train/train.d.ts.map +1 -1
  607. package/development/train/train-blocked-passage/train-blocked-passage.d.ts.map +1 -1
  608. package/development/train/train-blocked-passage.js +22 -21
  609. package/development/train/train-formation/train-formation.d.ts +2 -2
  610. package/development/train/train-formation/train-formation.d.ts.map +1 -1
  611. package/development/train/train-formation.js +113 -90
  612. package/development/train/train-wagon/train-wagon.d.ts +7 -9
  613. package/development/train/train-wagon/train-wagon.d.ts.map +1 -1
  614. package/development/train/train-wagon.js +166 -87
  615. package/development/train/train.js +142 -75
  616. package/development/visual-checkbox/visual-checkbox.d.ts +3 -3
  617. package/development/visual-checkbox/visual-checkbox.d.ts.map +1 -1
  618. package/development/visual-checkbox.js +79 -36
  619. package/dialog/dialog/dialog.d.ts +1 -1
  620. package/dialog/dialog/dialog.d.ts.map +1 -1
  621. package/dialog/dialog-actions/dialog-actions.d.ts.map +1 -1
  622. package/dialog/dialog-actions.js +18 -19
  623. package/dialog/dialog-content/dialog-content.d.ts.map +1 -1
  624. package/dialog/dialog-content.js +17 -18
  625. package/dialog/dialog-title/dialog-title.d.ts +3 -3
  626. package/dialog/dialog-title/dialog-title.d.ts.map +1 -1
  627. package/dialog/dialog-title.js +98 -66
  628. package/dialog/dialog.js +120 -114
  629. package/divider/divider.d.ts +1 -1
  630. package/divider/divider.d.ts.map +1 -1
  631. package/divider.js +41 -30
  632. package/expansion-panel/expansion-panel/expansion-panel.d.ts +4 -4
  633. package/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
  634. package/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts.map +1 -1
  635. package/expansion-panel/expansion-panel-content.js +20 -22
  636. package/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts.map +1 -1
  637. package/expansion-panel/expansion-panel-header.js +53 -61
  638. package/expansion-panel/expansion-panel.js +145 -130
  639. package/file-selector/file-selector.d.ts +26 -15
  640. package/file-selector/file-selector.d.ts.map +1 -1
  641. package/file-selector.js +227 -153
  642. package/flip-card/flip-card/flip-card.d.ts +2 -2
  643. package/flip-card/flip-card/flip-card.d.ts.map +1 -1
  644. package/flip-card/flip-card-details/flip-card-details.d.ts.map +1 -1
  645. package/flip-card/flip-card-details.js +36 -38
  646. package/flip-card/flip-card-summary/flip-card-summary.d.ts +1 -1
  647. package/flip-card/flip-card-summary/flip-card-summary.d.ts.map +1 -1
  648. package/flip-card/flip-card-summary.js +42 -31
  649. package/flip-card/flip-card.js +88 -69
  650. package/footer/footer.d.ts +4 -4
  651. package/footer/footer.d.ts.map +1 -1
  652. package/footer.js +78 -37
  653. package/form-error/form-error.d.ts.map +1 -1
  654. package/form-error.js +24 -25
  655. package/form-field/form-field/form-field.d.ts +10 -10
  656. package/form-field/form-field/form-field.d.ts.map +1 -1
  657. package/form-field/form-field-clear/form-field-clear.d.ts.map +1 -1
  658. package/form-field/form-field-clear.js +39 -41
  659. package/form-field/form-field.js +295 -239
  660. package/header/common/header-action-common.d.ts +2 -2
  661. package/header/common/header-action-common.d.ts.map +1 -1
  662. package/header/common.js +36 -21
  663. package/header/header/header.d.ts +4 -4
  664. package/header/header/header.d.ts.map +1 -1
  665. package/header/header-button/header-button.d.ts.map +1 -1
  666. package/header/header-button.js +14 -16
  667. package/header/header-link/header-link.d.ts.map +1 -1
  668. package/header/header-link.js +14 -14
  669. package/header/header.js +138 -109
  670. package/icon/icon-base.d.ts +3 -4
  671. package/icon/icon-base.d.ts.map +1 -1
  672. package/icon/icon-name-mixin.d.ts +1 -1
  673. package/icon/icon-name-mixin.d.ts.map +1 -1
  674. package/icon/icon.d.ts +2 -2
  675. package/icon/icon.d.ts.map +1 -1
  676. package/icon.js +230 -165
  677. package/image/image.d.ts +17 -17
  678. package/image/image.d.ts.map +1 -1
  679. package/image.js +465 -195
  680. package/index.d.ts +3 -1
  681. package/index.js +3 -1
  682. package/journey-header/journey-header.d.ts +5 -5
  683. package/journey-header/journey-header.d.ts.map +1 -1
  684. package/journey-header.js +89 -49
  685. package/lead-container/lead-container.d.ts.map +1 -1
  686. package/lead-container.js +17 -18
  687. package/link/block-link/block-link.d.ts.map +1 -1
  688. package/link/block-link-button/block-link-button.d.ts.map +1 -1
  689. package/link/block-link-button.js +15 -17
  690. package/link/block-link-static/block-link-static.d.ts.map +1 -1
  691. package/link/block-link-static.js +14 -16
  692. package/link/block-link.js +15 -17
  693. package/link/common/block-link-common.d.ts +4 -3
  694. package/link/common/block-link-common.d.ts.map +1 -1
  695. package/link/common/link-common.d.ts +1 -1
  696. package/link/common/link-common.d.ts.map +1 -1
  697. package/link/common.js +64 -46
  698. package/link/link/link.d.ts.map +1 -1
  699. package/link/link-button/link-button.d.ts.map +1 -1
  700. package/link/link-button.js +15 -17
  701. package/link/link-static/link-static.d.ts.map +1 -1
  702. package/link/link-static.js +15 -17
  703. package/link/link.js +15 -17
  704. package/link-list/common/link-list-base.d.ts +3 -3
  705. package/link-list/common/link-list-base.d.ts.map +1 -1
  706. package/link-list/common.js +72 -44
  707. package/link-list/link-list/link-list.d.ts +2 -2
  708. package/link-list/link-list/link-list.d.ts.map +1 -1
  709. package/link-list/link-list-anchor/link-list-anchor.d.ts.map +1 -1
  710. package/link-list/link-list-anchor.js +15 -16
  711. package/link-list/link-list.js +43 -24
  712. package/loading-indicator/loading-indicator.d.ts +3 -3
  713. package/loading-indicator/loading-indicator.d.ts.map +1 -1
  714. package/loading-indicator.js +61 -36
  715. package/logo/logo.d.ts +2 -2
  716. package/logo/logo.d.ts.map +1 -1
  717. package/logo.js +47 -27
  718. package/map-container/map-container.d.ts +2 -2
  719. package/map-container/map-container.d.ts.map +1 -1
  720. package/map-container.js +84 -65
  721. package/menu/common/menu-action-common.d.ts +2 -2
  722. package/menu/common/menu-action-common.d.ts.map +1 -1
  723. package/menu/common.js +37 -22
  724. package/menu/menu/menu.d.ts +1 -1
  725. package/menu/menu/menu.d.ts.map +1 -1
  726. package/menu/menu-button/menu-button.d.ts.map +1 -1
  727. package/menu/menu-button.js +14 -16
  728. package/menu/menu-link/menu-link.d.ts.map +1 -1
  729. package/menu/menu-link.js +15 -17
  730. package/menu/menu.js +175 -170
  731. package/message/message.d.ts +2 -2
  732. package/message/message.d.ts.map +1 -1
  733. package/message.js +47 -27
  734. package/navigation/common/navigation-action-common.d.ts +1 -1
  735. package/navigation/common/navigation-action-common.d.ts.map +1 -1
  736. package/navigation/common.js +38 -33
  737. package/navigation/navigation/navigation.d.ts +2 -2
  738. package/navigation/navigation/navigation.d.ts.map +1 -1
  739. package/navigation/navigation-button/navigation-button.d.ts.map +1 -1
  740. package/navigation/navigation-button.js +14 -16
  741. package/navigation/navigation-link/navigation-link.d.ts.map +1 -1
  742. package/navigation/navigation-link.js +14 -16
  743. package/navigation/navigation-list/navigation-list.d.ts +1 -1
  744. package/navigation/navigation-list/navigation-list.d.ts.map +1 -1
  745. package/navigation/navigation-list.js +48 -35
  746. package/navigation/navigation-marker/navigation-marker.d.ts +1 -1
  747. package/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
  748. package/navigation/navigation-marker.js +77 -69
  749. package/navigation/navigation-section/navigation-section.d.ts +3 -3
  750. package/navigation/navigation-section/navigation-section.d.ts.map +1 -1
  751. package/navigation/navigation-section.js +192 -171
  752. package/navigation/navigation.js +185 -181
  753. package/notification/notification.d.ts +6 -6
  754. package/notification/notification.d.ts.map +1 -1
  755. package/notification.js +147 -116
  756. package/option/optgroup/optgroup-base-element.d.ts +3 -3
  757. package/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  758. package/option/optgroup/optgroup.d.ts.map +1 -1
  759. package/option/optgroup.js +131 -112
  760. package/option/option/option-base-element.d.ts +7 -7
  761. package/option/option/option-base-element.d.ts.map +1 -1
  762. package/option/option/option.d.ts.map +1 -1
  763. package/option/option.js +295 -252
  764. package/overlay/overlay-base-element.d.ts +1 -1
  765. package/overlay/overlay-base-element.d.ts.map +1 -1
  766. package/overlay/overlay.d.ts +4 -4
  767. package/overlay/overlay.d.ts.map +1 -1
  768. package/overlay.js +194 -165
  769. package/package.json +19 -3
  770. package/paginator/common/paginator-common.d.ts +26 -0
  771. package/paginator/common/paginator-common.d.ts.map +1 -0
  772. package/paginator/common.d.ts +2 -0
  773. package/paginator/common.d.ts.map +1 -0
  774. package/paginator/common.js +145 -0
  775. package/paginator/compact-paginator/compact-paginator.d.ts +20 -0
  776. package/paginator/compact-paginator/compact-paginator.d.ts.map +1 -0
  777. package/paginator/compact-paginator.d.ts +2 -0
  778. package/paginator/compact-paginator.d.ts.map +1 -0
  779. package/paginator/compact-paginator.js +40 -0
  780. package/paginator/paginator/paginator.d.ts +51 -0
  781. package/paginator/paginator/paginator.d.ts.map +1 -0
  782. package/paginator/paginator.d.ts +1 -90
  783. package/paginator/paginator.d.ts.map +1 -1
  784. package/paginator/paginator.js +171 -0
  785. package/paginator.d.ts +2 -0
  786. package/paginator.d.ts.map +1 -1
  787. package/paginator.js +3 -263
  788. package/popover/popover/popover.d.ts +6 -7
  789. package/popover/popover/popover.d.ts.map +1 -1
  790. package/popover/popover-trigger/popover-trigger.d.ts.map +1 -1
  791. package/popover/popover-trigger.js +26 -29
  792. package/popover/popover.js +230 -208
  793. package/radio-button/common/radio-button-common.d.ts +1 -1
  794. package/radio-button/common/radio-button-common.d.ts.map +1 -1
  795. package/radio-button/common.js +67 -43
  796. package/radio-button/radio-button/radio-button.d.ts +2 -6
  797. package/radio-button/radio-button/radio-button.d.ts.map +1 -1
  798. package/radio-button/radio-button-group/radio-button-group.d.ts +6 -6
  799. package/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  800. package/radio-button/radio-button-group.js +192 -156
  801. package/radio-button/radio-button-panel/radio-button-panel.d.ts +2 -6
  802. package/radio-button/radio-button-panel/radio-button-panel.d.ts.map +1 -1
  803. package/radio-button/radio-button-panel.js +49 -45
  804. package/radio-button/radio-button.js +43 -37
  805. package/screen-reader-only/screen-reader-only.d.ts.map +1 -1
  806. package/screen-reader-only.js +17 -18
  807. package/select/select.d.ts +17 -9
  808. package/select/select.d.ts.map +1 -1
  809. package/select.js +377 -373
  810. package/selection-expansion-panel/selection-expansion-panel.d.ts +3 -3
  811. package/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  812. package/selection-expansion-panel.js +157 -148
  813. package/signet/signet.d.ts +2 -2
  814. package/signet/signet.d.ts.map +1 -1
  815. package/signet.js +48 -28
  816. package/skiplink-list/skiplink-list.d.ts +2 -2
  817. package/skiplink-list/skiplink-list.d.ts.map +1 -1
  818. package/skiplink-list.js +54 -36
  819. package/slider/slider.d.ts +7 -5
  820. package/slider/slider.d.ts.map +1 -1
  821. package/slider.js +197 -155
  822. package/standard-theme.css +5 -1
  823. package/status/status.d.ts +3 -3
  824. package/status/status.d.ts.map +1 -1
  825. package/status.js +71 -46
  826. package/stepper/step/step.d.ts.map +1 -1
  827. package/stepper/step-label/step-label.d.ts.map +1 -1
  828. package/stepper/step-label.js +69 -75
  829. package/stepper/step.js +99 -104
  830. package/stepper/stepper/stepper.d.ts +3 -3
  831. package/stepper/stepper/stepper.d.ts.map +1 -1
  832. package/stepper/stepper.js +208 -188
  833. package/table/table-wrapper/table-wrapper.d.ts.map +1 -1
  834. package/table/table-wrapper.js +32 -36
  835. package/tabs/tab/tab.d.ts.map +1 -1
  836. package/tabs/tab-group/tab-group.d.ts +2 -2
  837. package/tabs/tab-group/tab-group.d.ts.map +1 -1
  838. package/tabs/tab-group.js +200 -193
  839. package/tabs/tab-label/tab-label.d.ts +3 -3
  840. package/tabs/tab-label/tab-label.d.ts.map +1 -1
  841. package/tabs/tab-label.js +65 -37
  842. package/tabs/tab.js +34 -35
  843. package/tag/tag/tag.d.ts +3 -5
  844. package/tag/tag/tag.d.ts.map +1 -1
  845. package/tag/tag-group/tag-group.d.ts +3 -3
  846. package/tag/tag-group/tag-group.d.ts.map +1 -1
  847. package/tag/tag-group.js +107 -75
  848. package/tag/tag.js +92 -73
  849. package/teaser/teaser.d.ts +4 -4
  850. package/teaser/teaser.d.ts.map +1 -1
  851. package/teaser-hero/teaser-hero.d.ts +3 -3
  852. package/teaser-hero/teaser-hero.d.ts.map +1 -1
  853. package/teaser-hero.js +66 -38
  854. package/teaser-product/common/teaser-product-common.d.ts +1 -1
  855. package/teaser-product/common/teaser-product-common.d.ts.map +1 -1
  856. package/teaser-product/common.js +36 -21
  857. package/teaser-product/teaser-product/teaser-product.d.ts.map +1 -1
  858. package/teaser-product/teaser-product-static/teaser-product-static.d.ts.map +1 -1
  859. package/teaser-product/teaser-product-static.js +14 -17
  860. package/teaser-product/teaser-product.js +14 -17
  861. package/teaser.js +69 -37
  862. package/time-input/time-input.d.ts +1 -1
  863. package/time-input/time-input.d.ts.map +1 -1
  864. package/time-input.js +160 -166
  865. package/timetable-occupancy/timetable-occupancy.d.ts +2 -2
  866. package/timetable-occupancy/timetable-occupancy.d.ts.map +1 -1
  867. package/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +1 -1
  868. package/timetable-occupancy-icon/timetable-occupancy-icon.d.ts.map +1 -1
  869. package/timetable-occupancy-icon.js +60 -48
  870. package/timetable-occupancy.js +55 -38
  871. package/title/title-base.d.ts +3 -3
  872. package/title/title-base.d.ts.map +1 -1
  873. package/title/title.d.ts.map +1 -1
  874. package/title.js +81 -53
  875. package/toast/toast.d.ts +4 -4
  876. package/toast/toast.d.ts.map +1 -1
  877. package/toast.js +156 -123
  878. package/toggle/toggle/toggle.d.ts +3 -5
  879. package/toggle/toggle/toggle.d.ts.map +1 -1
  880. package/toggle/toggle-option/toggle-option.d.ts +2 -2
  881. package/toggle/toggle-option/toggle-option.d.ts.map +1 -1
  882. package/toggle/toggle-option.js +89 -72
  883. package/toggle/toggle.js +139 -122
  884. package/toggle-check/toggle-check.d.ts +4 -3
  885. package/toggle-check/toggle-check.d.ts.map +1 -1
  886. package/toggle-check.js +63 -41
  887. package/train/train/train.d.ts +5 -5
  888. package/train/train/train.d.ts.map +1 -1
  889. package/train/train-blocked-passage/train-blocked-passage.d.ts.map +1 -1
  890. package/train/train-blocked-passage.js +17 -18
  891. package/train/train-formation/train-formation.d.ts +2 -2
  892. package/train/train-formation/train-formation.d.ts.map +1 -1
  893. package/train/train-formation.js +96 -87
  894. package/train/train-wagon/train-wagon.d.ts +7 -9
  895. package/train/train-wagon/train-wagon.d.ts.map +1 -1
  896. package/train/train-wagon.js +150 -110
  897. package/train/train.js +108 -71
  898. package/visual-checkbox/visual-checkbox.d.ts +3 -3
  899. package/visual-checkbox/visual-checkbox.d.ts.map +1 -1
  900. package/visual-checkbox.js +59 -32
  901. package/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts +0 -2
  902. package/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts.map +0 -1
  903. package/button/mini-button-group/index.d.ts +0 -2
  904. package/button/mini-button-group/index.d.ts.map +0 -1
  905. package/development/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts +0 -2
  906. package/development/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts.map +0 -1
  907. package/development/button/mini-button-group/index.d.ts +0 -2
  908. package/development/button/mini-button-group/index.d.ts.map +0 -1
  909. package/development/flip-card/flip-card/index.d.ts +0 -2
  910. package/development/flip-card/flip-card/index.d.ts.map +0 -1
  911. package/development/flip-card/flip-card-details/index.d.ts +0 -2
  912. package/development/flip-card/flip-card-details/index.d.ts.map +0 -1
  913. package/development/flip-card/flip-card-summary/index.d.ts +0 -2
  914. package/development/flip-card/flip-card-summary/index.d.ts.map +0 -1
  915. package/development/link-list/link-list-anchor/index.d.ts +0 -2
  916. package/development/link-list/link-list-anchor/index.d.ts.map +0 -1
  917. package/development/paginator/index.d.ts +0 -2
  918. package/development/paginator/index.d.ts.map +0 -1
  919. package/development/radio-button/radio-button-panel/index.d.ts +0 -2
  920. package/development/radio-button/radio-button-panel/index.d.ts.map +0 -1
  921. package/development/tabs/tab/index.d.ts +0 -2
  922. package/development/tabs/tab/index.d.ts.map +0 -1
  923. package/flip-card/flip-card/index.d.ts +0 -2
  924. package/flip-card/flip-card/index.d.ts.map +0 -1
  925. package/flip-card/flip-card-details/index.d.ts +0 -2
  926. package/flip-card/flip-card-details/index.d.ts.map +0 -1
  927. package/flip-card/flip-card-summary/index.d.ts +0 -2
  928. package/flip-card/flip-card-summary/index.d.ts.map +0 -1
  929. package/link-list/link-list-anchor/index.d.ts +0 -2
  930. package/link-list/link-list-anchor/index.d.ts.map +0 -1
  931. package/paginator/index.d.ts +0 -2
  932. package/paginator/index.d.ts.map +0 -1
  933. package/radio-button/radio-button-panel/index.d.ts +0 -2
  934. package/radio-button/radio-button-panel/index.d.ts.map +0 -1
  935. package/tabs/tab/index.d.ts +0 -2
  936. package/tabs/tab/index.d.ts.map +0 -1
@@ -1,9 +1,18 @@
1
- import { css, LitElement, isServer, html } from "lit";
2
- import { property, state, customElement } from "lit/decorators.js";
1
+ var __typeError = (msg) => {
2
+ throw TypeError(msg);
3
+ };
4
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
8
+ import { __runInitializers, __esDecorate } from "tslib";
9
+ import { css, isServer, html, LitElement } from "lit";
10
+ import { customElement, property, state } from "lit/decorators.js";
3
11
  import { readConfig } from "../core/config.js";
4
12
  import { SbbConnectedAbortController, SbbLanguageController } from "../core/controllers.js";
5
13
  import { defaultDateAdapter } from "../core/datetime.js";
6
- import { findReferencedElement, findInput } from "../core/dom.js";
14
+ import { forceType } from "../core/decorators.js";
15
+ import { findInput, findReferencedElement } from "../core/dom.js";
7
16
  import { EventEmitter } from "../core/eventing.js";
8
17
  import { i18nDatePickerPlaceholder, i18nDateChangedTo } from "../core/i18n.js";
9
18
  const style = css`:host {
@@ -17,16 +26,6 @@ const style = css`:host {
17
26
  white-space: nowrap;
18
27
  width: 1px;
19
28
  }`;
20
- var __defProp = Object.defineProperty;
21
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
22
- var __decorateClass = (decorators, target, key, kind) => {
23
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
24
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
25
- if (decorator = decorators[i])
26
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
27
- if (kind && result) __defProp(target, key, result);
28
- return result;
29
- };
30
29
  function getDatePicker(element, trigger) {
31
30
  var _a, _b;
32
31
  if (!trigger) {
@@ -73,262 +72,341 @@ const datepickerControlRegisteredEventFactory = () => new CustomEvent("datepicke
73
72
  bubbles: false,
74
73
  composed: true
75
74
  });
76
- let SbbDatepickerElement = class extends LitElement {
77
- constructor() {
78
- var _a;
79
- super(...arguments);
80
- this.wide = false;
81
- this.dateFilter = () => true;
82
- this._didChange = new EventEmitter(this, SbbDatepickerElement.events.didChange, {
83
- bubbles: true,
84
- cancelable: true
85
- });
86
- this._change = new EventEmitter(this, SbbDatepickerElement.events.change, {
87
- bubbles: true
88
- });
89
- this._inputUpdated = new EventEmitter(
90
- this,
91
- SbbDatepickerElement.events.inputUpdated,
92
- { bubbles: true, cancelable: true }
93
- );
94
- this._datePickerUpdated = new EventEmitter(
95
- this,
96
- SbbDatepickerElement.events.datePickerUpdated,
97
- {
75
+ let SbbDatepickerElement = (() => {
76
+ var _wide_accessor_storage, _dateFilter_accessor_storage, _dateParser_accessor_storage, _format_accessor_storage, _input_accessor_storage, __inputElement_accessor_storage, _a;
77
+ let _classDecorators = [customElement("sbb-datepicker")];
78
+ let _classDescriptor;
79
+ let _classExtraInitializers = [];
80
+ let _classThis;
81
+ let _classSuper = LitElement;
82
+ let _instanceExtraInitializers = [];
83
+ let _wide_decorators;
84
+ let _wide_initializers = [];
85
+ let _wide_extraInitializers = [];
86
+ let _dateFilter_decorators;
87
+ let _dateFilter_initializers = [];
88
+ let _dateFilter_extraInitializers = [];
89
+ let _dateParser_decorators;
90
+ let _dateParser_initializers = [];
91
+ let _dateParser_extraInitializers = [];
92
+ let _format_decorators;
93
+ let _format_initializers = [];
94
+ let _format_extraInitializers = [];
95
+ let _input_decorators;
96
+ let _input_initializers = [];
97
+ let _input_extraInitializers = [];
98
+ let _set_now_decorators;
99
+ let _set_valueAsDate_decorators;
100
+ let __inputElement_decorators;
101
+ let __inputElement_initializers = [];
102
+ let __inputElement_extraInitializers = [];
103
+ var SbbDatepickerElement2 = (_a = class extends _classSuper {
104
+ constructor() {
105
+ var _a2;
106
+ super(...arguments);
107
+ __privateAdd(this, _wide_accessor_storage);
108
+ __privateAdd(this, _dateFilter_accessor_storage);
109
+ __privateAdd(this, _dateParser_accessor_storage);
110
+ __privateAdd(this, _format_accessor_storage);
111
+ __privateAdd(this, _input_accessor_storage);
112
+ __privateAdd(this, __inputElement_accessor_storage);
113
+ __privateSet(this, _wide_accessor_storage, (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _wide_initializers, false)));
114
+ __privateSet(this, _dateFilter_accessor_storage, (__runInitializers(this, _wide_extraInitializers), __runInitializers(this, _dateFilter_initializers, () => true)));
115
+ __privateSet(this, _dateParser_accessor_storage, (__runInitializers(this, _dateFilter_extraInitializers), __runInitializers(this, _dateParser_initializers, null)));
116
+ __privateSet(this, _format_accessor_storage, (__runInitializers(this, _dateParser_extraInitializers), __runInitializers(this, _format_initializers, null)));
117
+ __privateSet(this, _input_accessor_storage, (__runInitializers(this, _format_extraInitializers), __runInitializers(this, _input_initializers, null)));
118
+ this._now = __runInitializers(this, _input_extraInitializers);
119
+ this._didChange = new EventEmitter(this, SbbDatepickerElement2.events.didChange, {
98
120
  bubbles: true,
99
121
  cancelable: true
100
- }
101
- );
102
- this._validationChange = new EventEmitter(
103
- this,
104
- SbbDatepickerElement.events.validationChange
105
- );
106
- this._inputElement = null;
107
- this._inputElementPlaceholderMutable = false;
108
- this._inputObserver = !isServer ? new MutationObserver((mutationsList) => {
109
- this._emitInputUpdated();
110
- if (this._inputElement && (mutationsList == null ? void 0 : mutationsList.some((e) => e.attributeName === "value"))) {
111
- const value = this._inputElement.getAttribute("value");
112
- this.valueAsDate = this._dateAdapter.parse(value, this.now) ?? value;
113
- }
114
- }) : null;
115
- this._dateAdapter = ((_a = readConfig().datetime) == null ? void 0 : _a.dateAdapter) ?? defaultDateAdapter;
116
- this._abort = new SbbConnectedAbortController(this);
117
- this._language = new SbbLanguageController(this).withHandler(() => {
118
- if (this._inputElement) {
119
- if (this._inputElementPlaceholderMutable) {
120
- this._inputElement.placeholder = i18nDatePickerPlaceholder[this._language.current];
122
+ });
123
+ this._change = new EventEmitter(this, SbbDatepickerElement2.events.change, {
124
+ bubbles: true
125
+ });
126
+ this._inputUpdated = new EventEmitter(this, SbbDatepickerElement2.events.inputUpdated, { bubbles: true, cancelable: true });
127
+ this._datePickerUpdated = new EventEmitter(this, SbbDatepickerElement2.events.datePickerUpdated, {
128
+ bubbles: true,
129
+ cancelable: true
130
+ });
131
+ this._validationChange = new EventEmitter(this, SbbDatepickerElement2.events.validationChange);
132
+ __privateSet(this, __inputElement_accessor_storage, __runInitializers(this, __inputElement_initializers, null));
133
+ this._inputElementPlaceholderMutable = (__runInitializers(this, __inputElement_extraInitializers), false);
134
+ this._inputObserver = !isServer ? new MutationObserver((mutationsList) => {
135
+ this._emitInputUpdated();
136
+ if (this._inputElement && (mutationsList == null ? void 0 : mutationsList.some((e) => e.attributeName === "value"))) {
137
+ const value = this._inputElement.getAttribute("value");
138
+ this.valueAsDate = this._dateAdapter.parse(value, this.now) ?? value;
121
139
  }
122
- if (this.valueAsDate) {
123
- this._inputElement.value = this._format(this.valueAsDate);
140
+ }) : null;
141
+ this._dateAdapter = ((_a2 = readConfig().datetime) == null ? void 0 : _a2.dateAdapter) ?? defaultDateAdapter;
142
+ this._abort = new SbbConnectedAbortController(this);
143
+ this._language = new SbbLanguageController(this).withHandler(() => {
144
+ if (this._inputElement) {
145
+ if (this._inputElementPlaceholderMutable) {
146
+ this._inputElement.placeholder = i18nDatePickerPlaceholder[this._language.current];
147
+ }
148
+ if (this.valueAsDate) {
149
+ this._inputElement.value = this._format(this.valueAsDate);
150
+ }
124
151
  }
152
+ });
153
+ }
154
+ /** If set to true, two months are displayed. */
155
+ get wide() {
156
+ return __privateGet(this, _wide_accessor_storage);
157
+ }
158
+ set wide(value) {
159
+ __privateSet(this, _wide_accessor_storage, value);
160
+ }
161
+ /** A function used to filter out dates. */
162
+ get dateFilter() {
163
+ return __privateGet(this, _dateFilter_accessor_storage);
164
+ }
165
+ set dateFilter(value) {
166
+ __privateSet(this, _dateFilter_accessor_storage, value);
167
+ }
168
+ /**
169
+ * A function used to parse string value into dates.
170
+ * @deprecated No longer required.
171
+ */
172
+ get dateParser() {
173
+ return __privateGet(this, _dateParser_accessor_storage);
174
+ }
175
+ set dateParser(value) {
176
+ __privateSet(this, _dateParser_accessor_storage, value);
177
+ }
178
+ /**
179
+ * A function used to format dates into the preferred string format.
180
+ * @deprecated No longer required.
181
+ */
182
+ get format() {
183
+ return __privateGet(this, _format_accessor_storage);
184
+ }
185
+ set format(value) {
186
+ __privateSet(this, _format_accessor_storage, value);
187
+ }
188
+ /** Reference of the native input connected to the datepicker. */
189
+ get input() {
190
+ return __privateGet(this, _input_accessor_storage);
191
+ }
192
+ set input(value) {
193
+ __privateSet(this, _input_accessor_storage, value);
194
+ }
195
+ // TODO: Change undefined to null as a breaking change.
196
+ /** A configured date which acts as the current date instead of the real current date. Recommended for testing purposes. */
197
+ set now(value) {
198
+ this._now = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
199
+ }
200
+ get now() {
201
+ return this._now ?? this._dateAdapter.today();
202
+ }
203
+ /** The currently selected date as a Date or custom date provider instance. */
204
+ set valueAsDate(value) {
205
+ this._valueAsDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
206
+ if (this._tryApplyFormatToInput()) {
207
+ this._inputElement.dispatchEvent(new Event("blur", { composed: true }));
125
208
  }
126
- });
127
- }
128
- set now(value) {
129
- this._now = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
130
- }
131
- get now() {
132
- return this._now ?? this._dateAdapter.today();
133
- }
134
- set valueAsDate(value) {
135
- this._valueAsDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
136
- if (this._tryApplyFormatToInput()) {
137
- this._inputElement.dispatchEvent(new Event("blur", { composed: true }));
138
209
  }
139
- }
140
- get valueAsDate() {
141
- return this._valueAsDate ?? null;
142
- }
143
- connectedCallback() {
144
- super.connectedCallback();
145
- this.addEventListener("datepickerControlRegistered", () => this._emitInputUpdated(), {
146
- signal: this._abort.signal
147
- });
148
- this._attachInput();
149
- if (this._inputElement) {
150
- this._emitInputUpdated();
210
+ get valueAsDate() {
211
+ return this._valueAsDate ?? null;
151
212
  }
152
- }
153
- willUpdate(changedProperties) {
154
- super.willUpdate(changedProperties);
155
- if (changedProperties.has("input")) {
213
+ get _inputElement() {
214
+ return __privateGet(this, __inputElement_accessor_storage);
215
+ }
216
+ set _inputElement(value) {
217
+ __privateSet(this, __inputElement_accessor_storage, value);
218
+ }
219
+ connectedCallback() {
220
+ super.connectedCallback();
221
+ this.addEventListener("datepickerControlRegistered", () => this._emitInputUpdated(), {
222
+ signal: this._abort.signal
223
+ });
156
224
  this._attachInput();
225
+ if (this._inputElement) {
226
+ this._emitInputUpdated();
227
+ }
228
+ }
229
+ willUpdate(changedProperties) {
230
+ super.willUpdate(changedProperties);
231
+ if (changedProperties.has("input")) {
232
+ this._attachInput();
233
+ }
234
+ if (changedProperties.has("wide") || changedProperties.has("dateFilter") || changedProperties.has("now")) {
235
+ this._datePickerUpdated.emit();
236
+ }
237
+ if (changedProperties.has("valueAsDate")) {
238
+ this._setAriaLiveMessage();
239
+ }
157
240
  }
158
- if (changedProperties.has("wide") || changedProperties.has("dateFilter") || changedProperties.has("now")) {
159
- this._datePickerUpdated.emit();
241
+ disconnectedCallback() {
242
+ var _a2, _b;
243
+ super.disconnectedCallback();
244
+ (_a2 = this._inputObserver) == null ? void 0 : _a2.disconnect();
245
+ (_b = this._datePickerController) == null ? void 0 : _b.abort();
160
246
  }
161
- if (changedProperties.has("valueAsDate")) {
247
+ firstUpdated(changedProperties) {
248
+ super.firstUpdated(changedProperties);
162
249
  this._setAriaLiveMessage();
163
250
  }
164
- }
165
- disconnectedCallback() {
166
- var _a, _b;
167
- super.disconnectedCallback();
168
- (_a = this._inputObserver) == null ? void 0 : _a.disconnect();
169
- (_b = this._datePickerController) == null ? void 0 : _b.abort();
170
- }
171
- firstUpdated(changedProperties) {
172
- super.firstUpdated(changedProperties);
173
- this._setAriaLiveMessage();
174
- }
175
- /**
176
- * Gets the input value with the correct date format.
177
- * @deprecated Use property valueAsDate instead.
178
- */
179
- getValueAsDate() {
180
- return this.valueAsDate ?? void 0;
181
- }
182
- /**
183
- * Set the input value to the correctly formatted value.
184
- * @deprecated Use property valueAsDate instead.
185
- */
186
- setValueAsDate(date) {
187
- this.valueAsDate = date;
188
- }
189
- /**
190
- * @internal
191
- * Whether a custom now is configured.
192
- */
193
- hasCustomNow() {
194
- return !!this._now;
195
- }
196
- _attachInput() {
197
- var _a, _b, _c;
198
- const input = findInput(this, this.input);
199
- if (this._inputElement === input) {
200
- return;
201
- } else if (this._inputElement) {
202
- (_a = this._datePickerController) == null ? void 0 : _a.abort();
203
- (_b = this._inputObserver) == null ? void 0 : _b.disconnect();
204
- }
205
- this._inputElement = input;
206
- if (input) {
207
- this._datePickerController = new AbortController();
208
- (_c = this._inputObserver) == null ? void 0 : _c.observe(input, {
209
- attributeFilter: ["disabled", "readonly", "min", "max", "value"]
210
- });
211
- this._inputElementPlaceholderMutable = !input.placeholder;
212
- input.type = "text";
213
- if (this._inputElementPlaceholderMutable) {
214
- input.placeholder = i18nDatePickerPlaceholder[this._language.current];
251
+ /**
252
+ * Gets the input value with the correct date format.
253
+ * @deprecated Use property valueAsDate instead.
254
+ */
255
+ getValueAsDate() {
256
+ return this.valueAsDate ?? void 0;
257
+ }
258
+ /**
259
+ * Set the input value to the correctly formatted value.
260
+ * @deprecated Use property valueAsDate instead.
261
+ */
262
+ setValueAsDate(date) {
263
+ this.valueAsDate = date;
264
+ }
265
+ /**
266
+ * @internal
267
+ * Whether a custom now is configured.
268
+ */
269
+ hasCustomNow() {
270
+ return !!this._now;
271
+ }
272
+ _attachInput() {
273
+ var _a2, _b, _c;
274
+ const input = findInput(this, this.input);
275
+ if (this._inputElement === input) {
276
+ return;
277
+ } else if (this._inputElement) {
278
+ (_a2 = this._datePickerController) == null ? void 0 : _a2.abort();
279
+ (_b = this._inputObserver) == null ? void 0 : _b.disconnect();
280
+ }
281
+ this._inputElement = input;
282
+ if (input) {
283
+ this._datePickerController = new AbortController();
284
+ (_c = this._inputObserver) == null ? void 0 : _c.observe(input, {
285
+ attributeFilter: ["disabled", "readonly", "min", "max", "value"]
286
+ });
287
+ this._inputElementPlaceholderMutable = !input.placeholder;
288
+ input.type = "text";
289
+ if (this._inputElementPlaceholderMutable) {
290
+ input.placeholder = i18nDatePickerPlaceholder[this._language.current];
291
+ }
292
+ const options = { signal: this._datePickerController.signal };
293
+ input.addEventListener("input", () => this._parseInput(), options);
294
+ input.addEventListener("change", () => this._handleInputChange(), options);
295
+ this._parseInput(true);
296
+ this._tryApplyFormatToInput();
297
+ this._validateDate();
298
+ }
299
+ }
300
+ _emitInputUpdated() {
301
+ const { disabled, readOnly: readonly, min, max } = this._inputElement ?? {};
302
+ this._inputUpdated.emit({ disabled, readonly, min, max });
303
+ }
304
+ _handleInputChange() {
305
+ if (this._tryApplyFormatToInput()) {
306
+ return;
215
307
  }
216
- const options = { signal: this._datePickerController.signal };
217
- input.addEventListener("input", () => this._parseInput(), options);
218
- input.addEventListener("change", () => this._handleInputChange(), options);
219
- this._parseInput(true);
220
- this._tryApplyFormatToInput();
221
308
  this._validateDate();
309
+ this._setAriaLiveMessage();
310
+ this._change.emit();
311
+ this._didChange.emit();
222
312
  }
223
- }
224
- _emitInputUpdated() {
225
- const { disabled, readOnly: readonly, min, max } = this._inputElement ?? {};
226
- this._inputUpdated.emit({ disabled, readonly, min, max });
227
- }
228
- _handleInputChange() {
229
- if (this._tryApplyFormatToInput()) {
230
- return;
231
- }
232
- this._validateDate();
233
- this._setAriaLiveMessage();
234
- this._change.emit();
235
- this._didChange.emit();
236
- }
237
- _tryApplyFormatToInput() {
238
- if (!this._inputElement) {
313
+ _tryApplyFormatToInput() {
314
+ if (!this._inputElement) {
315
+ return false;
316
+ }
317
+ const formattedDate = this.valueAsDate ? this._format(this.valueAsDate) : "";
318
+ if (formattedDate && this._inputElement.value !== formattedDate) {
319
+ this._inputElement.value = formattedDate;
320
+ this._inputElement.dispatchEvent(new InputEvent("input", { bubbles: true, composed: true }));
321
+ this._inputElement.dispatchEvent(new Event("change", { bubbles: true, composed: true }));
322
+ return true;
323
+ }
239
324
  return false;
240
325
  }
241
- const formattedDate = this.valueAsDate ? this._format(this.valueAsDate) : "";
242
- if (formattedDate && this._inputElement.value !== formattedDate) {
243
- this._inputElement.value = formattedDate;
244
- this._inputElement.dispatchEvent(new InputEvent("input", { bubbles: true, composed: true }));
245
- this._inputElement.dispatchEvent(new Event("change", { bubbles: true, composed: true }));
246
- return true;
326
+ _validateDate() {
327
+ var _a2, _b;
328
+ if (!this._inputElement) {
329
+ return;
330
+ }
331
+ const isEmptyOrValid = !this._inputElement.value || !!this.valueAsDate && isDateAvailable(this.valueAsDate, this.dateFilter, (_a2 = this._inputElement) == null ? void 0 : _a2.min, (_b = this._inputElement) == null ? void 0 : _b.max);
332
+ const wasValid = !this._inputElement.hasAttribute("data-sbb-invalid");
333
+ this._inputElement.toggleAttribute("data-sbb-invalid", !isEmptyOrValid);
334
+ if (wasValid !== isEmptyOrValid) {
335
+ this._validationChange.emit({ valid: isEmptyOrValid });
336
+ }
247
337
  }
248
- return false;
249
- }
250
- _validateDate() {
251
- var _a, _b;
252
- if (!this._inputElement) {
253
- return;
254
- }
255
- const isEmptyOrValid = !this._inputElement.value || !!this.valueAsDate && isDateAvailable(
256
- this.valueAsDate,
257
- this.dateFilter,
258
- (_a = this._inputElement) == null ? void 0 : _a.min,
259
- (_b = this._inputElement) == null ? void 0 : _b.max
260
- );
261
- const wasValid = !this._inputElement.hasAttribute("data-sbb-invalid");
262
- this._inputElement.toggleAttribute("data-sbb-invalid", !isEmptyOrValid);
263
- if (wasValid !== isEmptyOrValid) {
264
- this._validationChange.emit({ valid: isEmptyOrValid });
338
+ _parseInput(deserializeAsFallback = false) {
339
+ const value = this._inputElement.value;
340
+ const parse = this.dateParser ?? ((v) => this._dateAdapter.parse(v, this.now));
341
+ this._valueAsDate = this._dateAdapter.getValidDateOrNull(parse(value));
342
+ if (deserializeAsFallback && !this._valueAsDate) {
343
+ this._valueAsDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
344
+ }
265
345
  }
266
- }
267
- _parseInput(deserializeAsFallback = false) {
268
- const value = this._inputElement.value;
269
- const parse = this.dateParser ?? ((v) => this._dateAdapter.parse(v, this.now));
270
- this._valueAsDate = this._dateAdapter.getValidDateOrNull(parse(value));
271
- if (deserializeAsFallback && !this._valueAsDate) {
272
- this._valueAsDate = this._dateAdapter.getValidDateOrNull(
273
- this._dateAdapter.deserialize(value)
274
- );
346
+ _format(date) {
347
+ return this.format ? this.format(date) : this._dateAdapter.format(date);
275
348
  }
276
- }
277
- _format(date) {
278
- return this.format ? this.format(date) : this._dateAdapter.format(date);
279
- }
280
- _setAriaLiveMessage() {
281
- var _a, _b;
282
- const containerElement = (_b = (_a = this.shadowRoot) == null ? void 0 : _a.querySelector) == null ? void 0 : _b.call(_a, "#status-container");
283
- if (!containerElement) {
284
- return;
285
- } else if (!this.valueAsDate) {
286
- containerElement.innerText = "";
287
- } else {
288
- const date = this._dateAdapter.format(this.valueAsDate, { weekdayStyle: "long" });
289
- containerElement.innerText = `${i18nDateChangedTo[this._language.current]} ${date}`;
349
+ _setAriaLiveMessage() {
350
+ var _a2, _b;
351
+ const containerElement = (_b = (_a2 = this.shadowRoot) == null ? void 0 : _a2.querySelector) == null ? void 0 : _b.call(_a2, "#status-container");
352
+ if (!containerElement) {
353
+ return;
354
+ } else if (!this.valueAsDate) {
355
+ containerElement.innerText = "";
356
+ } else {
357
+ const date = this._dateAdapter.format(this.valueAsDate, { weekdayStyle: "long" });
358
+ containerElement.innerText = `${i18nDateChangedTo[this._language.current]} ${date}`;
359
+ }
290
360
  }
291
- }
292
- render() {
293
- return html`<p id="status-container" role="status"></p>`;
294
- }
295
- /* eslint-enable @typescript-eslint/member-ordering */
296
- };
297
- SbbDatepickerElement.styles = style;
298
- SbbDatepickerElement.events = {
299
- didChange: "didChange",
300
- change: "change",
301
- inputUpdated: "inputUpdated",
302
- datePickerUpdated: "datePickerUpdated",
303
- validationChange: "validationChange"
304
- };
305
- __decorateClass([
306
- property({ type: Boolean })
307
- ], SbbDatepickerElement.prototype, "wide", 2);
308
- __decorateClass([
309
- property({ attribute: false })
310
- ], SbbDatepickerElement.prototype, "dateFilter", 2);
311
- __decorateClass([
312
- property({ attribute: false })
313
- ], SbbDatepickerElement.prototype, "dateParser", 2);
314
- __decorateClass([
315
- property({ attribute: false })
316
- ], SbbDatepickerElement.prototype, "format", 2);
317
- __decorateClass([
318
- property()
319
- ], SbbDatepickerElement.prototype, "input", 2);
320
- __decorateClass([
321
- property()
322
- ], SbbDatepickerElement.prototype, "now", 1);
323
- __decorateClass([
324
- property({ attribute: false })
325
- ], SbbDatepickerElement.prototype, "valueAsDate", 1);
326
- __decorateClass([
327
- state()
328
- ], SbbDatepickerElement.prototype, "_inputElement", 2);
329
- SbbDatepickerElement = __decorateClass([
330
- customElement("sbb-datepicker")
331
- ], SbbDatepickerElement);
361
+ render() {
362
+ return html`<p id="status-container" role="status"></p>`;
363
+ }
364
+ }, _wide_accessor_storage = new WeakMap(), _dateFilter_accessor_storage = new WeakMap(), _dateParser_accessor_storage = new WeakMap(), _format_accessor_storage = new WeakMap(), _input_accessor_storage = new WeakMap(), __inputElement_accessor_storage = new WeakMap(), _classThis = _a, (() => {
365
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
366
+ _wide_decorators = [forceType(), property({ type: Boolean })];
367
+ _dateFilter_decorators = [property({ attribute: false })];
368
+ _dateParser_decorators = [property({ attribute: false })];
369
+ _format_decorators = [property({ attribute: false })];
370
+ _input_decorators = [property()];
371
+ _set_now_decorators = [property()];
372
+ _set_valueAsDate_decorators = [property({ attribute: false })];
373
+ __inputElement_decorators = [state()];
374
+ __esDecorate(_a, null, _wide_decorators, { kind: "accessor", name: "wide", static: false, private: false, access: { has: (obj) => "wide" in obj, get: (obj) => obj.wide, set: (obj, value) => {
375
+ obj.wide = value;
376
+ } }, metadata: _metadata }, _wide_initializers, _wide_extraInitializers);
377
+ __esDecorate(_a, null, _dateFilter_decorators, { kind: "accessor", name: "dateFilter", static: false, private: false, access: { has: (obj) => "dateFilter" in obj, get: (obj) => obj.dateFilter, set: (obj, value) => {
378
+ obj.dateFilter = value;
379
+ } }, metadata: _metadata }, _dateFilter_initializers, _dateFilter_extraInitializers);
380
+ __esDecorate(_a, null, _dateParser_decorators, { kind: "accessor", name: "dateParser", static: false, private: false, access: { has: (obj) => "dateParser" in obj, get: (obj) => obj.dateParser, set: (obj, value) => {
381
+ obj.dateParser = value;
382
+ } }, metadata: _metadata }, _dateParser_initializers, _dateParser_extraInitializers);
383
+ __esDecorate(_a, null, _format_decorators, { kind: "accessor", name: "format", static: false, private: false, access: { has: (obj) => "format" in obj, get: (obj) => obj.format, set: (obj, value) => {
384
+ obj.format = value;
385
+ } }, metadata: _metadata }, _format_initializers, _format_extraInitializers);
386
+ __esDecorate(_a, null, _input_decorators, { kind: "accessor", name: "input", static: false, private: false, access: { has: (obj) => "input" in obj, get: (obj) => obj.input, set: (obj, value) => {
387
+ obj.input = value;
388
+ } }, metadata: _metadata }, _input_initializers, _input_extraInitializers);
389
+ __esDecorate(_a, null, _set_now_decorators, { kind: "setter", name: "now", static: false, private: false, access: { has: (obj) => "now" in obj, set: (obj, value) => {
390
+ obj.now = value;
391
+ } }, metadata: _metadata }, null, _instanceExtraInitializers);
392
+ __esDecorate(_a, null, _set_valueAsDate_decorators, { kind: "setter", name: "valueAsDate", static: false, private: false, access: { has: (obj) => "valueAsDate" in obj, set: (obj, value) => {
393
+ obj.valueAsDate = value;
394
+ } }, metadata: _metadata }, null, _instanceExtraInitializers);
395
+ __esDecorate(_a, null, __inputElement_decorators, { kind: "accessor", name: "_inputElement", static: false, private: false, access: { has: (obj) => "_inputElement" in obj, get: (obj) => obj._inputElement, set: (obj, value) => {
396
+ obj._inputElement = value;
397
+ } }, metadata: _metadata }, __inputElement_initializers, __inputElement_extraInitializers);
398
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
399
+ SbbDatepickerElement2 = _classThis = _classDescriptor.value;
400
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
401
+ })(), _a.styles = style, _a.events = {
402
+ didChange: "didChange",
403
+ change: "change",
404
+ inputUpdated: "inputUpdated",
405
+ datePickerUpdated: "datePickerUpdated",
406
+ validationChange: "validationChange"
407
+ }, __runInitializers(_classThis, _classExtraInitializers), _a);
408
+ return SbbDatepickerElement2 = _classThis;
409
+ })();
332
410
  export {
333
411
  SbbDatepickerElement,
334
412
  datepickerControlRegisteredEventFactory,
@@ -338,4 +416,4 @@ export {
338
416
  getDatePicker,
339
417
  isDateAvailable
340
418
  };
341
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci9kYXRlcGlja2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIGlzU2VydmVyLFxuICBMaXRFbGVtZW50LFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxuICB0eXBlIFRlbXBsYXRlUmVzdWx0LFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29yZS9jb25maWcuanMnO1xuaW1wb3J0IHsgU2JiQ29ubmVjdGVkQWJvcnRDb250cm9sbGVyLCBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IHR5cGUgRGF0ZUFkYXB0ZXIsIGRlZmF1bHREYXRlQWRhcHRlciB9IGZyb20gJy4uLy4uL2NvcmUvZGF0ZXRpbWUuanMnO1xuaW1wb3J0IHsgZmluZElucHV0LCBmaW5kUmVmZXJlbmNlZEVsZW1lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuLi8uLi9jb3JlL2V2ZW50aW5nLmpzJztcbmltcG9ydCB7IGkxOG5EYXRlQ2hhbmdlZFRvLCBpMThuRGF0ZVBpY2tlclBsYWNlaG9sZGVyIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiRGF0ZUxpa2UsIFNiYlZhbGlkYXRpb25DaGFuZ2VFdmVudCB9IGZyb20gJy4uLy4uL2NvcmUvaW50ZXJmYWNlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYkRhdGVwaWNrZXJCdXR0b24gfSBmcm9tICcuLi9jb21tb24uanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEYXRlcGlja2VyVG9nZ2xlRWxlbWVudCB9IGZyb20gJy4uL2RhdGVwaWNrZXItdG9nZ2xlLmpzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vZGF0ZXBpY2tlci5zY3NzP2xpdCZpbmxpbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNiYklucHV0VXBkYXRlRXZlbnQge1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHJlYWRvbmx5PzogYm9vbGVhbjtcbiAgbWluPzogc3RyaW5nIHwgbnVtYmVyO1xuICBtYXg/OiBzdHJpbmcgfCBudW1iZXI7XG59XG5cbi8vIFRPRE8oYnJlYWtpbmctY2hhbmdlKTogSW5saW5lIGRlcHJlY2F0ZWQgZnVuY3Rpb25zIGluIFNiYkRhdGVwaWNrZXJFbGVtZW50IGFzIHB1YmxpYyBtZXRob2RzXG4vLyB3aGVyZSBwb3NzaWJsZSBhbmQgdXNlIHRoZXNlIG1ldGhvZHMgd2hlcmUgdGhlIGZ1bmN0aW9ucyBhcmUgY3VycmVudGx5IHVzZWQuXG5cbi8qKlxuICogR2l2ZW4gYSBTYmJEYXRlcGlja2VyUHJldmlvdXNEYXlFbGVtZW50LCBhIFNiYkRhdGVwaWNrZXJOZXh0RGF5RWxlbWVudCBvciBhIFNiYkRhdGVwaWNrZXJUb2dnbGVFbGVtZW50IGNvbXBvbmVudCxcbiAqIGl0IHJldHVybnMgdGhlIHJlbGF0ZWQgU2JiRGF0ZXBpY2tlckVsZW1lbnQgcmVmZXJlbmNlLCBpZiBleGlzdHMuXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCBwb3RlbnRpYWxseSBjb25uZWN0ZWQgdG8gdGhlIFNiYkRhdGVwaWNrZXJFbGVtZW50LlxuICogQHBhcmFtIHRyaWdnZXIgVGhlIGlkIG9yIHRoZSByZWZlcmVuY2Ugb2YgdGhlIFNiYkRhdGVQaWNrZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlUGlja2VyPFQgPSBEYXRlPihcbiAgZWxlbWVudDogU2JiRGF0ZXBpY2tlckJ1dHRvbjxUPiB8IFNiYkRhdGVwaWNrZXJUb2dnbGVFbGVtZW50PFQ+LFxuICB0cmlnZ2VyPzogc3RyaW5nIHwgSFRNTEVsZW1lbnQsXG4pOiBTYmJEYXRlcGlja2VyRWxlbWVudDxUPiB8IG51bGwgfCB1bmRlZmluZWQge1xuICBpZiAoIXRyaWdnZXIpIHtcbiAgICByZXR1cm4gZWxlbWVudFxuICAgICAgLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKVxuICAgICAgPy5xdWVyeVNlbGVjdG9yPFNiYkRhdGVwaWNrZXJFbGVtZW50PFQ+Pignc2JiLWRhdGVwaWNrZXInKTtcbiAgfVxuXG4gIHJldHVybiBmaW5kUmVmZXJlbmNlZEVsZW1lbnQ8U2JiRGF0ZXBpY2tlckVsZW1lbnQ8VD4+KHRyaWdnZXIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGF2YWlsYWJsZSBkYXRlIGJlZm9yZSBvciBhZnRlciBhIGdpdmVuIG9uZSwgY29uc2lkZXJpbmcgdGhlIFNiYkRhdGVwaWNrZXJFbGVtZW50IGBkYXRlRmlsdGVyYCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBkYXRlIFRoZSBzdGFydGluZyBkYXRlIGZvciBjYWxjdWxhdGlvbnMuXG4gKiBAcGFyYW0gZGVsdGEgVGhlIG51bWJlciBvZiBkYXlzIHRvIGFkZC9zdWJ0cmFjdCBmcm9tIHRoZSBzdGFydGluZyBvbmUuXG4gKiBAcGFyYW0gZGF0ZUZpbHRlciBUaGUgZGF0ZUZpbHRlciBmdW5jdGlvbiBmcm9tIHRoZSBTYmJEYXRlcGlja2VyRWxlbWVudC5cbiAqIEBwYXJhbSBkYXRlQWRhcHRlciBUaGUgYWRhcHRlciBjbGFzcy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBOb3QgaW50ZW5kZWQgYXMgcHVibGljIEFQSS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF2YWlsYWJsZURhdGU8VCA9IERhdGU+KFxuICBkYXRlOiBULFxuICBkZWx0YTogbnVtYmVyLFxuICBkYXRlRmlsdGVyOiAoKGRhdGU6IFQpID0+IGJvb2xlYW4pIHwgbnVsbCxcbiAgZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPFQ+LFxuKTogVCB7XG4gIGxldCBhdmFpbGFibGVEYXRlID0gZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKGRhdGUsIGRlbHRhKTtcblxuICBpZiAoZGF0ZUZpbHRlcikge1xuICAgIHdoaWxlICghZGF0ZUZpbHRlcihhdmFpbGFibGVEYXRlKSkge1xuICAgICAgYXZhaWxhYmxlRGF0ZSA9IGRhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhhdmFpbGFibGVEYXRlLCBkZWx0YSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGF2YWlsYWJsZURhdGU7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZmlyc3QgYXZhaWxhYmxlIGRhdGUgYmVmb3JlIHRoZSBnaXZlbiBvbmUsXG4gKiBjb25zaWRlcmluZyB0aGUgU2JiRGF0ZXBpY2tlckVsZW1lbnQgYGRhdGVGaWx0ZXJgIHByb3BlcnR5IGFuZCBgbWluYCBwYXJhbWV0ZXIgKGUuZy4gZnJvbSB0aGUgc2VsZi1uYW1lZCBpbnB1dCdzIGF0dHJpYnV0ZSkuXG4gKiBAcGFyYW0gZGF0ZSBUaGUgc3RhcnRpbmcgZGF0ZSBmb3IgY2FsY3VsYXRpb25zLlxuICogQHBhcmFtIGRhdGVGaWx0ZXIgVGhlIGRhdGVGaWx0ZXIgZnVuY3Rpb24gZnJvbSB0aGUgU2JiRGF0ZXBpY2tlckVsZW1lbnQuXG4gKiBAcGFyYW0gZGF0ZUFkYXB0ZXIgVGhlIGFkYXB0ZXIgY2xhc3MuXG4gKiBAcGFyYW0gbWluIFRoZSBtaW5pbXVtIHZhbHVlIHRvIGNvbnNpZGVyIGluIGNhbGN1bGF0aW9ucy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBOb3QgaW50ZW5kZWQgYXMgcHVibGljIEFQSS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQcmV2aW91c0F2YWlsYWJsZURhdGU8VCA9IERhdGU+KFxuICBkYXRlOiBULFxuICBkYXRlRmlsdGVyOiAoKGRhdGU6IFQpID0+IGJvb2xlYW4pIHwgbnVsbCxcbiAgZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPFQ+LFxuICBtaW46IHN0cmluZyB8IG51bWJlciB8IG51bGwsXG4pOiBUIHtcbiAgY29uc3QgcHJldmlvdXNEYXRlID0gZ2V0QXZhaWxhYmxlRGF0ZShkYXRlLCAtMSwgZGF0ZUZpbHRlciwgZGF0ZUFkYXB0ZXIpO1xuICBjb25zdCBkYXRlTWluID0gZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUobWluKTtcblxuICBpZiAoXG4gICAgIWRhdGVNaW4gfHxcbiAgICAoZGF0ZUFkYXB0ZXIuaXNWYWxpZChkYXRlTWluKSAmJiBkYXRlQWRhcHRlci5jb21wYXJlRGF0ZShwcmV2aW91c0RhdGUsIGRhdGVNaW4pID49IDApXG4gICkge1xuICAgIHJldHVybiBwcmV2aW91c0RhdGU7XG4gIH1cbiAgcmV0dXJuIGRhdGU7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZmlyc3QgYXZhaWxhYmxlIGRhdGUgYWZ0ZXIgdGhlIGdpdmVuIG9uZSxcbiAqIGNvbnNpZGVyaW5nIHRoZSBTYmJEYXRlcGlja2VyRWxlbWVudCBgZGF0ZUZpbHRlcmAgcHJvcGVydHkgYW5kIGBtYXhgIHBhcmFtZXRlciAoZS5nLiBmcm9tIHRoZSBzZWxmLW5hbWVkIGlucHV0J3MgYXR0cmlidXRlKS5cbiAqIEBwYXJhbSBkYXRlIFRoZSBzdGFydGluZyBkYXRlIGZvciBjYWxjdWxhdGlvbnMuXG4gKiBAcGFyYW0gZGF0ZUZpbHRlciBUaGUgZGF0ZUZpbHRlciBmdW5jdGlvbiBmcm9tIHRoZSBTYmJEYXRlcGlja2VyRWxlbWVudC5cbiAqIEBwYXJhbSBkYXRlQWRhcHRlciBUaGUgYWRhcHRlciBjbGFzcy5cbiAqIEBwYXJhbSBtYXggVGhlIG1heGltdW0gdmFsdWUgdG8gY29uc2lkZXIgaW4gY2FsY3VsYXRpb25zLlxuICpcbiAqIEBkZXByZWNhdGVkIE5vdCBpbnRlbmRlZCBhcyBwdWJsaWMgQVBJLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE5leHRBdmFpbGFibGVEYXRlPFQgPSBEYXRlPihcbiAgZGF0ZTogVCxcbiAgZGF0ZUZpbHRlcjogKChkYXRlOiBUKSA9PiBib29sZWFuKSB8IG51bGwsXG4gIGRhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxUPixcbiAgbWF4OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsLFxuKTogVCB7XG4gIGNvbnN0IG5leHREYXRlID0gZ2V0QXZhaWxhYmxlRGF0ZShkYXRlLCAxLCBkYXRlRmlsdGVyLCBkYXRlQWRhcHRlcik7XG4gIGNvbnN0IGRhdGVNYXggPSBkYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShtYXgpO1xuXG4gIGlmIChcbiAgICAhZGF0ZU1heCB8fFxuICAgIChkYXRlQWRhcHRlci5pc1ZhbGlkKGRhdGVNYXgpICYmIGRhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKG5leHREYXRlLCBkYXRlTWF4KSA8PSAwKVxuICApIHtcbiAgICByZXR1cm4gbmV4dERhdGU7XG4gIH1cbiAgcmV0dXJuIGRhdGU7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCBkYXRlIGlzIGEgdmFsaWQgb25lLCBjb25zaWRlcmluZyB0aGUgU2JiRGF0ZXBpY2tlckVsZW1lbnQgYGRhdGVGaWx0ZXJgIHByb3BlcnR5XG4gKiBhbmQgYG1pbmAgYW5kIGBtYXhgIHBhcmFtZXRlcnMgKGUuZy4gZnJvbSB0aGUgc2VsZi1uYW1lZCBpbnB1dCdzIGF0dHJpYnV0ZXMpLlxuICogQHBhcmFtIGRhdGUgVGhlIHN0YXJ0aW5nIGRhdGUgZm9yIGNhbGN1bGF0aW9ucy5cbiAqIEBwYXJhbSBkYXRlRmlsdGVyIFRoZSBkYXRlRmlsdGVyIGZ1bmN0aW9uIGZyb20gdGhlIFNiYkRhdGVwaWNrZXJFbGVtZW50LlxuICogQHBhcmFtIG1pbiBUaGUgbWluaW11bSB2YWx1ZSB0byBjb25zaWRlciBpbiBjYWxjdWxhdGlvbnMuXG4gKiBAcGFyYW0gbWF4IFRoZSBtYXhpbXVtIHZhbHVlIHRvIGNvbnNpZGVyIGluIGNhbGN1bGF0aW9ucy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBOb3QgaW50ZW5kZWQgYXMgcHVibGljIEFQSS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZUF2YWlsYWJsZTxUID0gRGF0ZT4oXG4gIGRhdGU6IFQsXG4gIGRhdGVGaWx0ZXI6ICgoZGF0ZTogVCkgPT4gYm9vbGVhbikgfCBudWxsLFxuICBtaW46IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG1heDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IGJvb2xlYW4ge1xuICAvLyBUT0RPOiBHZXQgZGF0ZSBhZGFwdGVyIGZyb20gY29uZmlnXG4gIGNvbnN0IGRhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxUPiA9IHJlYWRDb25maWcoKS5kYXRldGltZT8uZGF0ZUFkYXB0ZXIgPz8gZGVmYXVsdERhdGVBZGFwdGVyO1xuICBjb25zdCBkYXRlTWluID0gZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUobWluKTtcbiAgY29uc3QgZGF0ZU1heCA9IGRhdGVBZGFwdGVyLmRlc2VyaWFsaXplKG1heCk7XG5cbiAgaWYgKFxuICAgIChkYXRlQWRhcHRlci5pc1ZhbGlkKGRhdGVNaW4pICYmIGRhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKGRhdGUsIGRhdGVNaW4hKSA8IDApIHx8XG4gICAgKGRhdGVBZGFwdGVyLmlzVmFsaWQoZGF0ZU1heCkgJiYgZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUoZGF0ZSwgZGF0ZU1heCEpID4gMClcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGRhdGVGaWx0ZXIgPyBkYXRlRmlsdGVyKGRhdGUpIDogdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IGRhdGVwaWNrZXJDb250cm9sUmVnaXN0ZXJlZEV2ZW50RmFjdG9yeSA9ICgpOiBDdXN0b21FdmVudCA9PlxuICBuZXcgQ3VzdG9tRXZlbnQoJ2RhdGVwaWNrZXJDb250cm9sUmVnaXN0ZXJlZCcsIHtcbiAgICBidWJibGVzOiBmYWxzZSxcbiAgICBjb21wb3NlZDogdHJ1ZSxcbiAgfSk7XG5cbi8qKlxuICogQ29tYmluZWQgd2l0aCBhIG5hdGl2ZSBpbnB1dCwgaXQgZGlzcGxheXMgdGhlIGlucHV0J3MgdmFsdWUgYXMgYSBmb3JtYXR0ZWQgZGF0ZS5cbiAqXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBkaWRDaGFuZ2UgLSBEZXByZWNhdGVkLiB1c2VkIGZvciBSZWFjdC4gV2lsbCBwcm9iYWJseSBiZSByZW1vdmVkIG9uY2UgUmVhY3QgMTkgaXMgYXZhaWxhYmxlLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gY2hhbmdlIC0gTm90aWZpZXMgdGhhdCB0aGUgY29ubmVjdGVkIGlucHV0IGhhcyBjaGFuZ2VzLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDxTYmJJbnB1dFVwZGF0ZUV2ZW50Pn0gaW5wdXRVcGRhdGVkIC0gTm90aWZpZXMgdGhhdCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgaW5wdXQgY29ubmVjdGVkIHRvIHRoZSBkYXRlcGlja2VyIGhhdmUgY2hhbmdlcy5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGRhdGVQaWNrZXJVcGRhdGVkIC0gTm90aWZpZXMgdGhhdCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZGF0ZXBpY2tlciBoYXZlIGNoYW5nZXMuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PFNiYlZhbGlkYXRpb25DaGFuZ2VFdmVudD59IHZhbGlkYXRpb25DaGFuZ2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgaW50ZXJuYWwgdmFsaWRhdGlvbiBzdGF0ZSBjaGFuZ2VzLlxuICovXG5AY3VzdG9tRWxlbWVudCgnc2JiLWRhdGVwaWNrZXInKVxuZXhwb3J0IGNsYXNzIFNiYkRhdGVwaWNrZXJFbGVtZW50PFQgPSBEYXRlPiBleHRlbmRzIExpdEVsZW1lbnQge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nIC0tXG4gICAqIFdlIGRlYWN0aXZhdGUgbWVtYmVyLW9yZGVyaW5nIGJlY2F1c2Ugb2YgdGhlIEBwcm9wZXJ0eSBkZWNvcmF0ZWQgbWV0aG9kcyBkYXRlRmlsdGVyLCBkYXRlUGFyc2VyIGFuZCBmb3JtYXQuXG4gICAqL1xuXG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICBkaWRDaGFuZ2U6ICdkaWRDaGFuZ2UnLFxuICAgIGNoYW5nZTogJ2NoYW5nZScsXG4gICAgaW5wdXRVcGRhdGVkOiAnaW5wdXRVcGRhdGVkJyxcbiAgICBkYXRlUGlja2VyVXBkYXRlZDogJ2RhdGVQaWNrZXJVcGRhdGVkJyxcbiAgICB2YWxpZGF0aW9uQ2hhbmdlOiAndmFsaWRhdGlvbkNoYW5nZScsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIElmIHNldCB0byB0cnVlLCB0d28gbW9udGhzIGFyZSBkaXNwbGF5ZWQuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIHdpZGUgPSBmYWxzZTtcblxuICAvKiogQSBmdW5jdGlvbiB1c2VkIHRvIGZpbHRlciBvdXQgZGF0ZXMuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UgfSkgcHVibGljIGRhdGVGaWx0ZXI6IChkYXRlOiBUIHwgbnVsbCkgPT4gYm9vbGVhbiA9ICgpID0+IHRydWU7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdXNlZCB0byBwYXJzZSBzdHJpbmcgdmFsdWUgaW50byBkYXRlcy5cbiAgICogQGRlcHJlY2F0ZWQgTm8gbG9uZ2VyIHJlcXVpcmVkLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBmYWxzZSB9KSBwdWJsaWMgZGF0ZVBhcnNlcj86ICh2YWx1ZTogc3RyaW5nKSA9PiBUIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHVzZWQgdG8gZm9ybWF0IGRhdGVzIGludG8gdGhlIHByZWZlcnJlZCBzdHJpbmcgZm9ybWF0LlxuICAgKiBAZGVwcmVjYXRlZCBObyBsb25nZXIgcmVxdWlyZWQuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pIHB1YmxpYyBmb3JtYXQ/OiAoZGF0ZTogVCkgPT4gc3RyaW5nO1xuXG4gIC8qKiBSZWZlcmVuY2Ugb2YgdGhlIG5hdGl2ZSBpbnB1dCBjb25uZWN0ZWQgdG8gdGhlIGRhdGVwaWNrZXIuICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBpbnB1dD86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuXG4gIC8vIFRPRE86IENoYW5nZSB1bmRlZmluZWQgdG8gbnVsbCBhcyBhIGJyZWFraW5nIGNoYW5nZS5cbiAgLyoqIEEgY29uZmlndXJlZCBkYXRlIHdoaWNoIGFjdHMgYXMgdGhlIGN1cnJlbnQgZGF0ZSBpbnN0ZWFkIG9mIHRoZSByZWFsIGN1cnJlbnQgZGF0ZS4gUmVjb21tZW5kZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgbm93KHZhbHVlOiBTYmJEYXRlTGlrZTxUPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX25vdyA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICB9XG4gIHB1YmxpYyBnZXQgbm93KCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9ub3cgPz8gdGhpcy5fZGF0ZUFkYXB0ZXIudG9kYXkoKTtcbiAgfVxuICBwcml2YXRlIF9ub3c/OiBUIHwgbnVsbDtcblxuICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlIGFzIGEgRGF0ZSBvciBjdXN0b20gZGF0ZSBwcm92aWRlciBpbnN0YW5jZS4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBmYWxzZSB9KVxuICBwdWJsaWMgc2V0IHZhbHVlQXNEYXRlKHZhbHVlOiBTYmJEYXRlTGlrZTxUPiB8IG51bGwpIHtcbiAgICB0aGlzLl92YWx1ZUFzRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICAgIGlmICh0aGlzLl90cnlBcHBseUZvcm1hdFRvSW5wdXQoKSkge1xuICAgICAgLyogRW1pdCBibHVyIGV2ZW50IHdoZW4gdmFsdWUgaXMgY2hhbmdlZCBwcm9ncmFtbWF0aWNhbGx5IHRvIG5vdGlmeVxuICAgICAgZnJhbWV3b3JrcyB0aGF0IHJlbHkgb24gdGhhdCBldmVudCB0byB1cGRhdGUgZm9ybSBzdGF0dXMuICovXG4gICAgICB0aGlzLl9pbnB1dEVsZW1lbnQhLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdibHVyJywgeyBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWVBc0RhdGUoKTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZUFzRGF0ZSA/PyBudWxsO1xuICB9XG4gIHByaXZhdGUgX3ZhbHVlQXNEYXRlPzogVCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIG9ubHkgdXNlZCBmb3IgUmVhY3QuIFdpbGwgcHJvYmFibHkgYmUgcmVtb3ZlZCBvbmNlIFJlYWN0IDE5IGlzIGF2YWlsYWJsZS5cbiAgICovXG4gIHByaXZhdGUgX2RpZENoYW5nZTogRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcih0aGlzLCBTYmJEYXRlcGlja2VyRWxlbWVudC5ldmVudHMuZGlkQ2hhbmdlLCB7XG4gICAgYnViYmxlczogdHJ1ZSxcbiAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICB9KTtcblxuICAvKiogTm90aWZpZXMgdGhhdCB0aGUgY29ubmVjdGVkIGlucHV0IGhhcyBjaGFuZ2VzLiAqL1xuICBwcml2YXRlIF9jaGFuZ2U6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIodGhpcywgU2JiRGF0ZXBpY2tlckVsZW1lbnQuZXZlbnRzLmNoYW5nZSwge1xuICAgIGJ1YmJsZXM6IHRydWUsXG4gIH0pO1xuXG4gIC8qKiBOb3RpZmllcyB0aGF0IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBpbnB1dCBjb25uZWN0ZWQgdG8gdGhlIGRhdGVwaWNrZXIgaGF2ZSBjaGFuZ2VzLiAqL1xuICBwcml2YXRlIF9pbnB1dFVwZGF0ZWQ6IEV2ZW50RW1pdHRlcjxTYmJJbnB1dFVwZGF0ZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJEYXRlcGlja2VyRWxlbWVudC5ldmVudHMuaW5wdXRVcGRhdGVkLFxuICAgIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9LFxuICApO1xuXG4gIC8qKiBOb3RpZmllcyB0aGF0IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBkYXRlcGlja2VyIGhhdmUgY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfZGF0ZVBpY2tlclVwZGF0ZWQ6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJEYXRlcGlja2VyRWxlbWVudC5ldmVudHMuZGF0ZVBpY2tlclVwZGF0ZWQsXG4gICAge1xuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGludGVybmFsIHZhbGlkYXRpb24gc3RhdGUgY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfdmFsaWRhdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPFNiYlZhbGlkYXRpb25DaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiRGF0ZXBpY2tlckVsZW1lbnQuZXZlbnRzLnZhbGlkYXRpb25DaGFuZ2UsXG4gICk7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfaW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2lucHV0RWxlbWVudFBsYWNlaG9sZGVyTXV0YWJsZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2RhdGVQaWNrZXJDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuXG4gIHByaXZhdGUgX2lucHV0T2JzZXJ2ZXIgPSAhaXNTZXJ2ZXJcbiAgICA/IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnNMaXN0KSA9PiB7XG4gICAgICAgIHRoaXMuX2VtaXRJbnB1dFVwZGF0ZWQoKTtcbiAgICAgICAgLy8gVE9ETzogRGVjaWRlIHdoZXRoZXIgdG8gcmVtb3ZlIHRoaXMgbG9naWMgYnkgYWRkaW5nIGEgdmFsdWUgcHJvcGVydHkgdG8gdGhlIGRhdGVwaWNrZXIuXG4gICAgICAgIGlmICh0aGlzLl9pbnB1dEVsZW1lbnQgJiYgbXV0YXRpb25zTGlzdD8uc29tZSgoZSkgPT4gZS5hdHRyaWJ1dGVOYW1lID09PSAndmFsdWUnKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5faW5wdXRFbGVtZW50LmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICAgICAgICB0aGlzLnZhbHVlQXNEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIucGFyc2UodmFsdWUsIHRoaXMubm93KSA/PyB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICA6IG51bGw7XG5cbiAgcHJpdmF0ZSBfZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPFQ+ID0gcmVhZENvbmZpZygpLmRhdGV0aW1lPy5kYXRlQWRhcHRlciA/PyBkZWZhdWx0RGF0ZUFkYXB0ZXI7XG5cbiAgcHJpdmF0ZSBfYWJvcnQgPSBuZXcgU2JiQ29ubmVjdGVkQWJvcnRDb250cm9sbGVyKHRoaXMpO1xuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcykud2l0aEhhbmRsZXIoKCkgPT4ge1xuICAgIGlmICh0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLl9pbnB1dEVsZW1lbnRQbGFjZWhvbGRlck11dGFibGUpIHtcbiAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50LnBsYWNlaG9sZGVyID0gaTE4bkRhdGVQaWNrZXJQbGFjZWhvbGRlclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnZhbHVlQXNEYXRlKSB7XG4gICAgICAgIHRoaXMuX2lucHV0RWxlbWVudC52YWx1ZSA9IHRoaXMuX2Zvcm1hdCh0aGlzLnZhbHVlQXNEYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZGF0ZXBpY2tlckNvbnRyb2xSZWdpc3RlcmVkJywgKCkgPT4gdGhpcy5fZW1pdElucHV0VXBkYXRlZCgpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX2Fib3J0LnNpZ25hbCxcbiAgICB9KTtcbiAgICB0aGlzLl9hdHRhY2hJbnB1dCgpO1xuICAgIGlmICh0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2VtaXRJbnB1dFVwZGF0ZWQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2lucHV0JykpIHtcbiAgICAgIHRoaXMuX2F0dGFjaElucHV0KCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnd2lkZScpIHx8XG4gICAgICBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2RhdGVGaWx0ZXInKSB8fFxuICAgICAgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdub3cnKVxuICAgICkge1xuICAgICAgdGhpcy5fZGF0ZVBpY2tlclVwZGF0ZWQuZW1pdCgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCd2YWx1ZUFzRGF0ZScpKSB7XG4gICAgICB0aGlzLl9zZXRBcmlhTGl2ZU1lc3NhZ2UoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9pbnB1dE9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5fZGF0ZVBpY2tlckNvbnRyb2xsZXI/LmFib3J0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgdGhpcy5fc2V0QXJpYUxpdmVNZXNzYWdlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaW5wdXQgdmFsdWUgd2l0aCB0aGUgY29ycmVjdCBkYXRlIGZvcm1hdC5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHByb3BlcnR5IHZhbHVlQXNEYXRlIGluc3RlYWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0VmFsdWVBc0RhdGUoKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVBc0RhdGUgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgaW5wdXQgdmFsdWUgdG8gdGhlIGNvcnJlY3RseSBmb3JtYXR0ZWQgdmFsdWUuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBwcm9wZXJ0eSB2YWx1ZUFzRGF0ZSBpbnN0ZWFkLlxuICAgKi9cbiAgcHVibGljIHNldFZhbHVlQXNEYXRlKGRhdGU6IFNiYkRhdGVMaWtlPFQ+KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZUFzRGF0ZSA9IGRhdGU7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFdoZXRoZXIgYSBjdXN0b20gbm93IGlzIGNvbmZpZ3VyZWQuXG4gICAqL1xuICBwdWJsaWMgaGFzQ3VzdG9tTm93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuX25vdztcbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaElucHV0KCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZmluZElucHV0KHRoaXMsIHRoaXMuaW5wdXQpO1xuICAgIGlmICh0aGlzLl9pbnB1dEVsZW1lbnQgPT09IGlucHV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2RhdGVQaWNrZXJDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgICAgdGhpcy5faW5wdXRPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIHRoaXMuX2lucHV0RWxlbWVudCA9IGlucHV0O1xuICAgIGlmIChpbnB1dCkge1xuICAgICAgdGhpcy5fZGF0ZVBpY2tlckNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICB0aGlzLl9pbnB1dE9ic2VydmVyPy5vYnNlcnZlKGlucHV0LCB7XG4gICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydkaXNhYmxlZCcsICdyZWFkb25seScsICdtaW4nLCAnbWF4JywgJ3ZhbHVlJ10sXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5faW5wdXRFbGVtZW50UGxhY2Vob2xkZXJNdXRhYmxlID0gIWlucHV0LnBsYWNlaG9sZGVyO1xuICAgICAgaW5wdXQudHlwZSA9ICd0ZXh0JztcbiAgICAgIGlmICh0aGlzLl9pbnB1dEVsZW1lbnRQbGFjZWhvbGRlck11dGFibGUpIHtcbiAgICAgICAgaW5wdXQucGxhY2Vob2xkZXIgPSBpMThuRGF0ZVBpY2tlclBsYWNlaG9sZGVyW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvcHRpb25zOiBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyA9IHsgc2lnbmFsOiB0aGlzLl9kYXRlUGlja2VyQ29udHJvbGxlci5zaWduYWwgfTtcbiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4gdGhpcy5fcGFyc2VJbnB1dCgpLCBvcHRpb25zKTtcbiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHRoaXMuX2hhbmRsZUlucHV0Q2hhbmdlKCksIG9wdGlvbnMpO1xuICAgICAgdGhpcy5fcGFyc2VJbnB1dCh0cnVlKTtcbiAgICAgIHRoaXMuX3RyeUFwcGx5Rm9ybWF0VG9JbnB1dCgpO1xuICAgICAgdGhpcy5fdmFsaWRhdGVEYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZW1pdElucHV0VXBkYXRlZCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGRpc2FibGVkLCByZWFkT25seTogcmVhZG9ubHksIG1pbiwgbWF4IH0gPSB0aGlzLl9pbnB1dEVsZW1lbnQgPz8ge307XG4gICAgdGhpcy5faW5wdXRVcGRhdGVkLmVtaXQoeyBkaXNhYmxlZCwgcmVhZG9ubHksIG1pbiwgbWF4IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlSW5wdXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3RyeUFwcGx5Rm9ybWF0VG9JbnB1dCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3ZhbGlkYXRlRGF0ZSgpO1xuICAgIHRoaXMuX3NldEFyaWFMaXZlTWVzc2FnZSgpO1xuICAgIHRoaXMuX2NoYW5nZS5lbWl0KCk7XG4gICAgdGhpcy5fZGlkQ2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyeUFwcGx5Rm9ybWF0VG9JbnB1dCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX2lucHV0RWxlbWVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSB0aGlzLnZhbHVlQXNEYXRlID8gdGhpcy5fZm9ybWF0KHRoaXMudmFsdWVBc0RhdGUhKSA6ICcnO1xuICAgIGlmIChmb3JtYXR0ZWREYXRlICYmIHRoaXMuX2lucHV0RWxlbWVudC52YWx1ZSAhPT0gZm9ybWF0dGVkRGF0ZSkge1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50LnZhbHVlID0gZm9ybWF0dGVkRGF0ZTtcbiAgICAgIHRoaXMuX2lucHV0RWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSkpO1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgX3ZhbGlkYXRlRGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lucHV0RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRW1wdHlPclZhbGlkID1cbiAgICAgICF0aGlzLl9pbnB1dEVsZW1lbnQudmFsdWUgfHxcbiAgICAgICghIXRoaXMudmFsdWVBc0RhdGUgJiZcbiAgICAgICAgaXNEYXRlQXZhaWxhYmxlKFxuICAgICAgICAgIHRoaXMudmFsdWVBc0RhdGUsXG4gICAgICAgICAgdGhpcy5kYXRlRmlsdGVyLFxuICAgICAgICAgIHRoaXMuX2lucHV0RWxlbWVudD8ubWluLFxuICAgICAgICAgIHRoaXMuX2lucHV0RWxlbWVudD8ubWF4LFxuICAgICAgICApKTtcbiAgICBjb25zdCB3YXNWYWxpZCA9ICF0aGlzLl9pbnB1dEVsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLXNiYi1pbnZhbGlkJyk7XG4gICAgdGhpcy5faW5wdXRFbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1zYmItaW52YWxpZCcsICFpc0VtcHR5T3JWYWxpZCk7XG4gICAgaWYgKHdhc1ZhbGlkICE9PSBpc0VtcHR5T3JWYWxpZCkge1xuICAgICAgdGhpcy5fdmFsaWRhdGlvbkNoYW5nZS5lbWl0KHsgdmFsaWQ6IGlzRW1wdHlPclZhbGlkIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlSW5wdXQoZGVzZXJpYWxpemVBc0ZhbGxiYWNrID0gZmFsc2UpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2lucHV0RWxlbWVudCEudmFsdWU7XG4gICAgY29uc3QgcGFyc2UgPSB0aGlzLmRhdGVQYXJzZXIgPz8gKCh2OiBzdHJpbmcpID0+IHRoaXMuX2RhdGVBZGFwdGVyLnBhcnNlKHYsIHRoaXMubm93KSk7XG4gICAgLy8gV2UgYXJlIGFzc2lnbmluZyBkaXJlY3RseSB0byB0aGUgcHJpdmF0ZSBiYWNraW5nIHByb3BlcnR5IG9mIHZhbHVlQXNEYXRlXG4gICAgLy8gYXMgd2UgZG9uJ3Qgd2FudCB0byB0cmlnZ2VyIGEgYmx1ciBldmVudCBkdXJpbmcgdGhpcyB0aW1lLlxuICAgIHRoaXMuX3ZhbHVlQXNEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHBhcnNlKHZhbHVlKSk7XG4gICAgaWYgKGRlc2VyaWFsaXplQXNGYWxsYmFjayAmJiAhdGhpcy5fdmFsdWVBc0RhdGUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlQXNEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Zvcm1hdChkYXRlOiBUKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXQgPyB0aGlzLmZvcm1hdChkYXRlKSA6IHRoaXMuX2RhdGVBZGFwdGVyLmZvcm1hdChkYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldEFyaWFMaXZlTWVzc2FnZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250YWluZXJFbGVtZW50OiBIVE1MUGFyYWdyYXBoRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQgPVxuICAgICAgdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPy48SFRNTFBhcmFncmFwaEVsZW1lbnQ+KCcjc3RhdHVzLWNvbnRhaW5lcicpO1xuXG4gICAgaWYgKCFjb250YWluZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICghdGhpcy52YWx1ZUFzRGF0ZSkge1xuICAgICAgY29udGFpbmVyRWxlbWVudC5pbm5lclRleHQgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmZvcm1hdCh0aGlzLnZhbHVlQXNEYXRlLCB7IHdlZWtkYXlTdHlsZTogJ2xvbmcnIH0pO1xuICAgICAgY29udGFpbmVyRWxlbWVudC5pbm5lclRleHQgPSBgJHtpMThuRGF0ZUNoYW5nZWRUb1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtkYXRlfWA7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPHAgaWQ9XCJzdGF0dXMtY29udGFpbmVyXCIgcm9sZT1cInN0YXR1c1wiPjwvcD5gO1xuICB9XG4gIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZyAqL1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWRhdGVwaWNrZXInOiBTYmJEYXRlcGlja2VyRWxlbWVudDtcbiAgfVxuXG4gIGludGVyZmFjZSBHbG9iYWxFdmVudEhhbmRsZXJzRXZlbnRNYXAge1xuICAgIGlucHV0VXBkYXRlZDogQ3VzdG9tRXZlbnQ8U2JiSW5wdXRVcGRhdGVFdmVudD47XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNDZ0IsU0FBQSxjQUNkLFNBQ0EsU0FDNEM7O0FBQzVDLE1BQUksQ0FBQyxTQUFTO0FBQ1osWUFBTyxtQkFDSixZQURJLGlDQUNNLHNCQUROLG1CQUVILGNBQXVDO0FBQUEsRUFDN0M7QUFFQSxTQUFPLHNCQUErQyxPQUFPO0FBQy9EO0FBV08sU0FBUyxpQkFDZCxNQUNBLE9BQ0EsWUFDQSxhQUNHO0FBQ0gsTUFBSSxnQkFBZ0IsWUFBWSxnQkFBZ0IsTUFBTSxLQUFLO0FBRTNELE1BQUksWUFBWTtBQUNQLFdBQUEsQ0FBQyxXQUFXLGFBQWEsR0FBRztBQUNqQixzQkFBQSxZQUFZLGdCQUFnQixlQUFlLEtBQUs7QUFBQSxJQUNsRTtBQUFBLEVBQ0Y7QUFFTyxTQUFBO0FBQ1Q7QUFZTyxTQUFTLDBCQUNkLE1BQ0EsWUFDQSxhQUNBLEtBQ0c7QUFDSCxRQUFNLGVBQWUsaUJBQWlCLE1BQU0sSUFBSSxZQUFZLFdBQVc7QUFDakUsUUFBQSxVQUFVLFlBQVksWUFBWSxHQUFHO0FBR3pDLE1BQUEsQ0FBQyxXQUNBLFlBQVksUUFBUSxPQUFPLEtBQUssWUFBWSxZQUFZLGNBQWMsT0FBTyxLQUFLLEdBQ25GO0FBQ08sV0FBQTtBQUFBLEVBQ1Q7QUFDTyxTQUFBO0FBQ1Q7QUFZTyxTQUFTLHNCQUNkLE1BQ0EsWUFDQSxhQUNBLEtBQ0c7QUFDSCxRQUFNLFdBQVcsaUJBQWlCLE1BQU0sR0FBRyxZQUFZLFdBQVc7QUFDNUQsUUFBQSxVQUFVLFlBQVksWUFBWSxHQUFHO0FBR3pDLE1BQUEsQ0FBQyxXQUNBLFlBQVksUUFBUSxPQUFPLEtBQUssWUFBWSxZQUFZLFVBQVUsT0FBTyxLQUFLLEdBQy9FO0FBQ08sV0FBQTtBQUFBLEVBQ1Q7QUFDTyxTQUFBO0FBQ1Q7QUFZTyxTQUFTLGdCQUNkLE1B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
419
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci9kYXRlcGlja2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIGlzU2VydmVyLFxuICBMaXRFbGVtZW50LFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxuICB0eXBlIFRlbXBsYXRlUmVzdWx0LFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29yZS9jb25maWcuanMnO1xuaW1wb3J0IHsgU2JiQ29ubmVjdGVkQWJvcnRDb250cm9sbGVyLCBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IHR5cGUgRGF0ZUFkYXB0ZXIsIGRlZmF1bHREYXRlQWRhcHRlciB9IGZyb20gJy4uLy4uL2NvcmUvZGF0ZXRpbWUuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlIH0gZnJvbSAnLi4vLi4vY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGZpbmRJbnB1dCwgZmluZFJlZmVyZW5jZWRFbGVtZW50IH0gZnJvbSAnLi4vLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQgeyBpMThuRGF0ZUNoYW5nZWRUbywgaTE4bkRhdGVQaWNrZXJQbGFjZWhvbGRlciB9IGZyb20gJy4uLy4uL2NvcmUvaTE4bi5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYkRhdGVMaWtlLCBTYmJWYWxpZGF0aW9uQ2hhbmdlRXZlbnQgfSBmcm9tICcuLi8uLi9jb3JlL2ludGVyZmFjZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEYXRlcGlja2VyQnV0dG9uIH0gZnJvbSAnLi4vY29tbW9uLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiRGF0ZXBpY2tlclRvZ2dsZUVsZW1lbnQgfSBmcm9tICcuLi9kYXRlcGlja2VyLXRvZ2dsZS5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2RhdGVwaWNrZXIuc2Nzcz9saXQmaW5saW5lJztcblxuZXhwb3J0IGludGVyZmFjZSBTYmJJbnB1dFVwZGF0ZUV2ZW50IHtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICByZWFkb25seT86IGJvb2xlYW47XG4gIG1pbj86IHN0cmluZyB8IG51bWJlcjtcbiAgbWF4Pzogc3RyaW5nIHwgbnVtYmVyO1xufVxuXG4vLyBUT0RPKGJyZWFraW5nLWNoYW5nZSk6IElubGluZSBkZXByZWNhdGVkIGZ1bmN0aW9ucyBpbiBTYmJEYXRlcGlja2VyRWxlbWVudCBhcyBwdWJsaWMgbWV0aG9kc1xuLy8gd2hlcmUgcG9zc2libGUgYW5kIHVzZSB0aGVzZSBtZXRob2RzIHdoZXJlIHRoZSBmdW5jdGlvbnMgYXJlIGN1cnJlbnRseSB1c2VkLlxuXG4vKipcbiAqIEdpdmVuIGEgU2JiRGF0ZXBpY2tlclByZXZpb3VzRGF5RWxlbWVudCwgYSBTYmJEYXRlcGlja2VyTmV4dERheUVsZW1lbnQgb3IgYSBTYmJEYXRlcGlja2VyVG9nZ2xlRWxlbWVudCBjb21wb25lbnQsXG4gKiBpdCByZXR1cm5zIHRoZSByZWxhdGVkIFNiYkRhdGVwaWNrZXJFbGVtZW50IHJlZmVyZW5jZSwgaWYgZXhpc3RzLlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgcG90ZW50aWFsbHkgY29ubmVjdGVkIHRvIHRoZSBTYmJEYXRlcGlja2VyRWxlbWVudC5cbiAqIEBwYXJhbSB0cmlnZ2VyIFRoZSBpZCBvciB0aGUgcmVmZXJlbmNlIG9mIHRoZSBTYmJEYXRlUGlja2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVBpY2tlcjxUID0gRGF0ZT4oXG4gIGVsZW1lbnQ6IFNiYkRhdGVwaWNrZXJCdXR0b248VD4gfCBTYmJEYXRlcGlja2VyVG9nZ2xlRWxlbWVudDxUPixcbiAgdHJpZ2dlcj86IHN0cmluZyB8IEhUTUxFbGVtZW50LFxuKTogU2JiRGF0ZXBpY2tlckVsZW1lbnQ8VD4gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF0cmlnZ2VyKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRcbiAgICAgIC5jbG9zZXN0Py4oJ3NiYi1mb3JtLWZpZWxkJylcbiAgICAgID8ucXVlcnlTZWxlY3RvcjxTYmJEYXRlcGlja2VyRWxlbWVudDxUPj4oJ3NiYi1kYXRlcGlja2VyJyk7XG4gIH1cblxuICByZXR1cm4gZmluZFJlZmVyZW5jZWRFbGVtZW50PFNiYkRhdGVwaWNrZXJFbGVtZW50PFQ+Pih0cmlnZ2VyKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaXJzdCBhdmFpbGFibGUgZGF0ZSBiZWZvcmUgb3IgYWZ0ZXIgYSBnaXZlbiBvbmUsIGNvbnNpZGVyaW5nIHRoZSBTYmJEYXRlcGlja2VyRWxlbWVudCBgZGF0ZUZpbHRlcmAgcHJvcGVydHkuXG4gKiBAcGFyYW0gZGF0ZSBUaGUgc3RhcnRpbmcgZGF0ZSBmb3IgY2FsY3VsYXRpb25zLlxuICogQHBhcmFtIGRlbHRhIFRoZSBudW1iZXIgb2YgZGF5cyB0byBhZGQvc3VidHJhY3QgZnJvbSB0aGUgc3RhcnRpbmcgb25lLlxuICogQHBhcmFtIGRhdGVGaWx0ZXIgVGhlIGRhdGVGaWx0ZXIgZnVuY3Rpb24gZnJvbSB0aGUgU2JiRGF0ZXBpY2tlckVsZW1lbnQuXG4gKiBAcGFyYW0gZGF0ZUFkYXB0ZXIgVGhlIGFkYXB0ZXIgY2xhc3MuXG4gKlxuICogQGRlcHJlY2F0ZWQgTm90IGludGVuZGVkIGFzIHB1YmxpYyBBUEkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmFpbGFibGVEYXRlPFQgPSBEYXRlPihcbiAgZGF0ZTogVCxcbiAgZGVsdGE6IG51bWJlcixcbiAgZGF0ZUZpbHRlcjogKChkYXRlOiBUKSA9PiBib29sZWFuKSB8IG51bGwsXG4gIGRhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxUPixcbik6IFQge1xuICBsZXQgYXZhaWxhYmxlRGF0ZSA9IGRhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhkYXRlLCBkZWx0YSk7XG5cbiAgaWYgKGRhdGVGaWx0ZXIpIHtcbiAgICB3aGlsZSAoIWRhdGVGaWx0ZXIoYXZhaWxhYmxlRGF0ZSkpIHtcbiAgICAgIGF2YWlsYWJsZURhdGUgPSBkYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoYXZhaWxhYmxlRGF0ZSwgZGVsdGEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhdmFpbGFibGVEYXRlO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGZpcnN0IGF2YWlsYWJsZSBkYXRlIGJlZm9yZSB0aGUgZ2l2ZW4gb25lLFxuICogY29uc2lkZXJpbmcgdGhlIFNiYkRhdGVwaWNrZXJFbGVtZW50IGBkYXRlRmlsdGVyYCBwcm9wZXJ0eSBhbmQgYG1pbmAgcGFyYW1ldGVyIChlLmcuIGZyb20gdGhlIHNlbGYtbmFtZWQgaW5wdXQncyBhdHRyaWJ1dGUpLlxuICogQHBhcmFtIGRhdGUgVGhlIHN0YXJ0aW5nIGRhdGUgZm9yIGNhbGN1bGF0aW9ucy5cbiAqIEBwYXJhbSBkYXRlRmlsdGVyIFRoZSBkYXRlRmlsdGVyIGZ1bmN0aW9uIGZyb20gdGhlIFNiYkRhdGVwaWNrZXJFbGVtZW50LlxuICogQHBhcmFtIGRhdGVBZGFwdGVyIFRoZSBhZGFwdGVyIGNsYXNzLlxuICogQHBhcmFtIG1pbiBUaGUgbWluaW11bSB2YWx1ZSB0byBjb25zaWRlciBpbiBjYWxjdWxhdGlvbnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgTm90IGludGVuZGVkIGFzIHB1YmxpYyBBUEkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUHJldmlvdXNBdmFpbGFibGVEYXRlPFQgPSBEYXRlPihcbiAgZGF0ZTogVCxcbiAgZGF0ZUZpbHRlcjogKChkYXRlOiBUKSA9PiBib29sZWFuKSB8IG51bGwsXG4gIGRhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxUPixcbiAgbWluOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsLFxuKTogVCB7XG4gIGNvbnN0IHByZXZpb3VzRGF0ZSA9IGdldEF2YWlsYWJsZURhdGUoZGF0ZSwgLTEsIGRhdGVGaWx0ZXIsIGRhdGVBZGFwdGVyKTtcbiAgY29uc3QgZGF0ZU1pbiA9IGRhdGVBZGFwdGVyLmRlc2VyaWFsaXplKG1pbik7XG5cbiAgaWYgKFxuICAgICFkYXRlTWluIHx8XG4gICAgKGRhdGVBZGFwdGVyLmlzVmFsaWQoZGF0ZU1pbikgJiYgZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUocHJldmlvdXNEYXRlLCBkYXRlTWluKSA+PSAwKVxuICApIHtcbiAgICByZXR1cm4gcHJldmlvdXNEYXRlO1xuICB9XG4gIHJldHVybiBkYXRlO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGZpcnN0IGF2YWlsYWJsZSBkYXRlIGFmdGVyIHRoZSBnaXZlbiBvbmUsXG4gKiBjb25zaWRlcmluZyB0aGUgU2JiRGF0ZXBpY2tlckVsZW1lbnQgYGRhdGVGaWx0ZXJgIHByb3BlcnR5IGFuZCBgbWF4YCBwYXJhbWV0ZXIgKGUuZy4gZnJvbSB0aGUgc2VsZi1uYW1lZCBpbnB1dCdzIGF0dHJpYnV0ZSkuXG4gKiBAcGFyYW0gZGF0ZSBUaGUgc3RhcnRpbmcgZGF0ZSBmb3IgY2FsY3VsYXRpb25zLlxuICogQHBhcmFtIGRhdGVGaWx0ZXIgVGhlIGRhdGVGaWx0ZXIgZnVuY3Rpb24gZnJvbSB0aGUgU2JiRGF0ZXBpY2tlckVsZW1lbnQuXG4gKiBAcGFyYW0gZGF0ZUFkYXB0ZXIgVGhlIGFkYXB0ZXIgY2xhc3MuXG4gKiBAcGFyYW0gbWF4IFRoZSBtYXhpbXVtIHZhbHVlIHRvIGNvbnNpZGVyIGluIGNhbGN1bGF0aW9ucy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBOb3QgaW50ZW5kZWQgYXMgcHVibGljIEFQSS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmROZXh0QXZhaWxhYmxlRGF0ZTxUID0gRGF0ZT4oXG4gIGRhdGU6IFQsXG4gIGRhdGVGaWx0ZXI6ICgoZGF0ZTogVCkgPT4gYm9vbGVhbikgfCBudWxsLFxuICBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8VD4sXG4gIG1heDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCxcbik6IFQge1xuICBjb25zdCBuZXh0RGF0ZSA9IGdldEF2YWlsYWJsZURhdGUoZGF0ZSwgMSwgZGF0ZUZpbHRlciwgZGF0ZUFkYXB0ZXIpO1xuICBjb25zdCBkYXRlTWF4ID0gZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUobWF4KTtcblxuICBpZiAoXG4gICAgIWRhdGVNYXggfHxcbiAgICAoZGF0ZUFkYXB0ZXIuaXNWYWxpZChkYXRlTWF4KSAmJiBkYXRlQWRhcHRlci5jb21wYXJlRGF0ZShuZXh0RGF0ZSwgZGF0ZU1heCkgPD0gMClcbiAgKSB7XG4gICAgcmV0dXJuIG5leHREYXRlO1xuICB9XG4gIHJldHVybiBkYXRlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgcHJvdmlkZWQgZGF0ZSBpcyBhIHZhbGlkIG9uZSwgY29uc2lkZXJpbmcgdGhlIFNiYkRhdGVwaWNrZXJFbGVtZW50IGBkYXRlRmlsdGVyYCBwcm9wZXJ0eVxuICogYW5kIGBtaW5gIGFuZCBgbWF4YCBwYXJhbWV0ZXJzIChlLmcuIGZyb20gdGhlIHNlbGYtbmFtZWQgaW5wdXQncyBhdHRyaWJ1dGVzKS5cbiAqIEBwYXJhbSBkYXRlIFRoZSBzdGFydGluZyBkYXRlIGZvciBjYWxjdWxhdGlvbnMuXG4gKiBAcGFyYW0gZGF0ZUZpbHRlciBUaGUgZGF0ZUZpbHRlciBmdW5jdGlvbiBmcm9tIHRoZSBTYmJEYXRlcGlja2VyRWxlbWVudC5cbiAqIEBwYXJhbSBtaW4gVGhlIG1pbmltdW0gdmFsdWUgdG8gY29uc2lkZXIgaW4gY2FsY3VsYXRpb25zLlxuICogQHBhcmFtIG1heCBUaGUgbWF4aW11bSB2YWx1ZSB0byBjb25zaWRlciBpbiBjYWxjdWxhdGlvbnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgTm90IGludGVuZGVkIGFzIHB1YmxpYyBBUEkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGVBdmFpbGFibGU8VCA9IERhdGU+KFxuICBkYXRlOiBULFxuICBkYXRlRmlsdGVyOiAoKGRhdGU6IFQpID0+IGJvb2xlYW4pIHwgbnVsbCxcbiAgbWluOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBtYXg6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiBib29sZWFuIHtcbiAgLy8gVE9ETzogR2V0IGRhdGUgYWRhcHRlciBmcm9tIGNvbmZpZ1xuICBjb25zdCBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8VD4gPSByZWFkQ29uZmlnKCkuZGF0ZXRpbWU/LmRhdGVBZGFwdGVyID8/IGRlZmF1bHREYXRlQWRhcHRlcjtcbiAgY29uc3QgZGF0ZU1pbiA9IGRhdGVBZGFwdGVyLmRlc2VyaWFsaXplKG1pbik7XG4gIGNvbnN0IGRhdGVNYXggPSBkYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShtYXgpO1xuXG4gIGlmIChcbiAgICAoZGF0ZUFkYXB0ZXIuaXNWYWxpZChkYXRlTWluKSAmJiBkYXRlQWRhcHRlci5jb21wYXJlRGF0ZShkYXRlLCBkYXRlTWluISkgPCAwKSB8fFxuICAgIChkYXRlQWRhcHRlci5pc1ZhbGlkKGRhdGVNYXgpICYmIGRhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKGRhdGUsIGRhdGVNYXghKSA+IDApXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBkYXRlRmlsdGVyID8gZGF0ZUZpbHRlcihkYXRlKSA6IHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCBkYXRlcGlja2VyQ29udHJvbFJlZ2lzdGVyZWRFdmVudEZhY3RvcnkgPSAoKTogQ3VzdG9tRXZlbnQgPT5cbiAgbmV3IEN1c3RvbUV2ZW50KCdkYXRlcGlja2VyQ29udHJvbFJlZ2lzdGVyZWQnLCB7XG4gICAgYnViYmxlczogZmFsc2UsXG4gICAgY29tcG9zZWQ6IHRydWUsXG4gIH0pO1xuXG4vKipcbiAqIENvbWJpbmVkIHdpdGggYSBuYXRpdmUgaW5wdXQsIGl0IGRpc3BsYXlzIHRoZSBpbnB1dCdzIHZhbHVlIGFzIGEgZm9ybWF0dGVkIGRhdGUuXG4gKlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkQ2hhbmdlIC0gRGVwcmVjYXRlZC4gdXNlZCBmb3IgUmVhY3QuIFdpbGwgcHJvYmFibHkgYmUgcmVtb3ZlZCBvbmNlIFJlYWN0IDE5IGlzIGF2YWlsYWJsZS5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGNoYW5nZSAtIE5vdGlmaWVzIHRoYXQgdGhlIGNvbm5lY3RlZCBpbnB1dCBoYXMgY2hhbmdlcy5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8U2JiSW5wdXRVcGRhdGVFdmVudD59IGlucHV0VXBkYXRlZCAtIE5vdGlmaWVzIHRoYXQgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGlucHV0IGNvbm5lY3RlZCB0byB0aGUgZGF0ZXBpY2tlciBoYXZlIGNoYW5nZXMuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBkYXRlUGlja2VyVXBkYXRlZCAtIE5vdGlmaWVzIHRoYXQgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGRhdGVwaWNrZXIgaGF2ZSBjaGFuZ2VzLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDxTYmJWYWxpZGF0aW9uQ2hhbmdlRXZlbnQ+fSB2YWxpZGF0aW9uQ2hhbmdlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGludGVybmFsIHZhbGlkYXRpb24gc3RhdGUgY2hhbmdlcy5cbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLWRhdGVwaWNrZXInKVxuY2xhc3MgU2JiRGF0ZXBpY2tlckVsZW1lbnQ8VCA9IERhdGU+IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICBkaWRDaGFuZ2U6ICdkaWRDaGFuZ2UnLFxuICAgIGNoYW5nZTogJ2NoYW5nZScsXG4gICAgaW5wdXRVcGRhdGVkOiAnaW5wdXRVcGRhdGVkJyxcbiAgICBkYXRlUGlja2VyVXBkYXRlZDogJ2RhdGVQaWNrZXJVcGRhdGVkJyxcbiAgICB2YWxpZGF0aW9uQ2hhbmdlOiAndmFsaWRhdGlvbkNoYW5nZScsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIElmIHNldCB0byB0cnVlLCB0d28gbW9udGhzIGFyZSBkaXNwbGF5ZWQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciB3aWRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEEgZnVuY3Rpb24gdXNlZCB0byBmaWx0ZXIgb3V0IGRhdGVzLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pIHB1YmxpYyBhY2Nlc3NvciBkYXRlRmlsdGVyOiAoZGF0ZTogVCB8IG51bGwpID0+IGJvb2xlYW4gPSAoKSA9PlxuICAgIHRydWU7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdXNlZCB0byBwYXJzZSBzdHJpbmcgdmFsdWUgaW50byBkYXRlcy5cbiAgICogQGRlcHJlY2F0ZWQgTm8gbG9uZ2VyIHJlcXVpcmVkLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBmYWxzZSB9KSBwdWJsaWMgYWNjZXNzb3IgZGF0ZVBhcnNlcjogKCh2YWx1ZTogc3RyaW5nKSA9PiBUKSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHVzZWQgdG8gZm9ybWF0IGRhdGVzIGludG8gdGhlIHByZWZlcnJlZCBzdHJpbmcgZm9ybWF0LlxuICAgKiBAZGVwcmVjYXRlZCBObyBsb25nZXIgcmVxdWlyZWQuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pIHB1YmxpYyBhY2Nlc3NvciBmb3JtYXQ6ICgoZGF0ZTogVCkgPT4gc3RyaW5nKSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBSZWZlcmVuY2Ugb2YgdGhlIG5hdGl2ZSBpbnB1dCBjb25uZWN0ZWQgdG8gdGhlIGRhdGVwaWNrZXIuICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBhY2Nlc3NvciBpbnB1dDogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAvLyBUT0RPOiBDaGFuZ2UgdW5kZWZpbmVkIHRvIG51bGwgYXMgYSBicmVha2luZyBjaGFuZ2UuXG4gIC8qKiBBIGNvbmZpZ3VyZWQgZGF0ZSB3aGljaCBhY3RzIGFzIHRoZSBjdXJyZW50IGRhdGUgaW5zdGVhZCBvZiB0aGUgcmVhbCBjdXJyZW50IGRhdGUuIFJlY29tbWVuZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IG5vdyh2YWx1ZTogU2JiRGF0ZUxpa2U8VD4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9ub3cgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwodGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG5vdygpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fbm93ID8/IHRoaXMuX2RhdGVBZGFwdGVyLnRvZGF5KCk7XG4gIH1cbiAgcHJpdmF0ZSBfbm93PzogVCB8IG51bGw7XG5cbiAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZSBhcyBhIERhdGUgb3IgY3VzdG9tIGRhdGUgcHJvdmlkZXIgaW5zdGFuY2UuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgcHVibGljIHNldCB2YWx1ZUFzRGF0ZSh2YWx1ZTogU2JiRGF0ZUxpa2U8VD4gfCBudWxsKSB7XG4gICAgdGhpcy5fdmFsdWVBc0RhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwodGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgICBpZiAodGhpcy5fdHJ5QXBwbHlGb3JtYXRUb0lucHV0KCkpIHtcbiAgICAgIC8qIEVtaXQgYmx1ciBldmVudCB3aGVuIHZhbHVlIGlzIGNoYW5nZWQgcHJvZ3JhbW1hdGljYWxseSB0byBub3RpZnlcbiAgICAgIGZyYW1ld29ya3MgdGhhdCByZWx5IG9uIHRoYXQgZXZlbnQgdG8gdXBkYXRlIGZvcm0gc3RhdHVzLiAqL1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50IS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnYmx1cicsIHsgY29tcG9zZWQ6IHRydWUgfSkpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlQXNEYXRlKCk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVBc0RhdGUgPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIF92YWx1ZUFzRGF0ZT86IFQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBvbmx5IHVzZWQgZm9yIFJlYWN0LiBXaWxsIHByb2JhYmx5IGJlIHJlbW92ZWQgb25jZSBSZWFjdCAxOSBpcyBhdmFpbGFibGUuXG4gICAqL1xuICBwcml2YXRlIF9kaWRDaGFuZ2U6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIodGhpcywgU2JiRGF0ZXBpY2tlckVsZW1lbnQuZXZlbnRzLmRpZENoYW5nZSwge1xuICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqIE5vdGlmaWVzIHRoYXQgdGhlIGNvbm5lY3RlZCBpbnB1dCBoYXMgY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfY2hhbmdlOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYkRhdGVwaWNrZXJFbGVtZW50LmV2ZW50cy5jaGFuZ2UsIHtcbiAgICBidWJibGVzOiB0cnVlLFxuICB9KTtcblxuICAvKiogTm90aWZpZXMgdGhhdCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgaW5wdXQgY29ubmVjdGVkIHRvIHRoZSBkYXRlcGlja2VyIGhhdmUgY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfaW5wdXRVcGRhdGVkOiBFdmVudEVtaXR0ZXI8U2JiSW5wdXRVcGRhdGVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiRGF0ZXBpY2tlckVsZW1lbnQuZXZlbnRzLmlucHV0VXBkYXRlZCxcbiAgICB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSxcbiAgKTtcblxuICAvKiogTm90aWZpZXMgdGhhdCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZGF0ZXBpY2tlciBoYXZlIGNoYW5nZXMuICovXG4gIHByaXZhdGUgX2RhdGVQaWNrZXJVcGRhdGVkOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiRGF0ZXBpY2tlckVsZW1lbnQuZXZlbnRzLmRhdGVQaWNrZXJVcGRhdGVkLFxuICAgIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBpbnRlcm5hbCB2YWxpZGF0aW9uIHN0YXRlIGNoYW5nZXMuICovXG4gIHByaXZhdGUgX3ZhbGlkYXRpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxTYmJWYWxpZGF0aW9uQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYkRhdGVwaWNrZXJFbGVtZW50LmV2ZW50cy52YWxpZGF0aW9uQ2hhbmdlLFxuICApO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgYWNjZXNzb3IgX2lucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9pbnB1dEVsZW1lbnRQbGFjZWhvbGRlck11dGFibGUgPSBmYWxzZTtcblxuICBwcml2YXRlIF9kYXRlUGlja2VyQ29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcblxuICBwcml2YXRlIF9pbnB1dE9ic2VydmVyID0gIWlzU2VydmVyXG4gICAgPyBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zTGlzdCkgPT4ge1xuICAgICAgICB0aGlzLl9lbWl0SW5wdXRVcGRhdGVkKCk7XG4gICAgICAgIC8vIFRPRE86IERlY2lkZSB3aGV0aGVyIHRvIHJlbW92ZSB0aGlzIGxvZ2ljIGJ5IGFkZGluZyBhIHZhbHVlIHByb3BlcnR5IHRvIHRoZSBkYXRlcGlja2VyLlxuICAgICAgICBpZiAodGhpcy5faW5wdXRFbGVtZW50ICYmIG11dGF0aW9uc0xpc3Q/LnNvbWUoKGUpID0+IGUuYXR0cmlidXRlTmFtZSA9PT0gJ3ZhbHVlJykpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2lucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG4gICAgICAgICAgdGhpcy52YWx1ZUFzRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLnBhcnNlKHZhbHVlLCB0aGlzLm5vdykgPz8gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgOiBudWxsO1xuXG4gIHByaXZhdGUgX2RhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxUPiA9IHJlYWRDb25maWcoKS5kYXRldGltZT8uZGF0ZUFkYXB0ZXIgPz8gZGVmYXVsdERhdGVBZGFwdGVyO1xuXG4gIHByaXZhdGUgX2Fib3J0ID0gbmV3IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpLndpdGhIYW5kbGVyKCgpID0+IHtcbiAgICBpZiAodGhpcy5faW5wdXRFbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5faW5wdXRFbGVtZW50UGxhY2Vob2xkZXJNdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuX2lucHV0RWxlbWVudC5wbGFjZWhvbGRlciA9IGkxOG5EYXRlUGlja2VyUGxhY2Vob2xkZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52YWx1ZUFzRGF0ZSkge1xuICAgICAgICB0aGlzLl9pbnB1dEVsZW1lbnQudmFsdWUgPSB0aGlzLl9mb3JtYXQodGhpcy52YWx1ZUFzRGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2RhdGVwaWNrZXJDb250cm9sUmVnaXN0ZXJlZCcsICgpID0+IHRoaXMuX2VtaXRJbnB1dFVwZGF0ZWQoKSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9hYm9ydC5zaWduYWwsXG4gICAgfSk7XG4gICAgdGhpcy5fYXR0YWNoSW5wdXQoKTtcbiAgICBpZiAodGhpcy5faW5wdXRFbGVtZW50KSB7XG4gICAgICB0aGlzLl9lbWl0SW5wdXRVcGRhdGVkKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdpbnB1dCcpKSB7XG4gICAgICB0aGlzLl9hdHRhY2hJbnB1dCgpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3dpZGUnKSB8fFxuICAgICAgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdkYXRlRmlsdGVyJykgfHxcbiAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbm93JylcbiAgICApIHtcbiAgICAgIHRoaXMuX2RhdGVQaWNrZXJVcGRhdGVkLmVtaXQoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygndmFsdWVBc0RhdGUnKSkge1xuICAgICAgdGhpcy5fc2V0QXJpYUxpdmVNZXNzYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5faW5wdXRPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuX2RhdGVQaWNrZXJDb250cm9sbGVyPy5hYm9ydCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgIHRoaXMuX3NldEFyaWFMaXZlTWVzc2FnZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGlucHV0IHZhbHVlIHdpdGggdGhlIGNvcnJlY3QgZGF0ZSBmb3JtYXQuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBwcm9wZXJ0eSB2YWx1ZUFzRGF0ZSBpbnN0ZWFkLlxuICAgKi9cbiAgcHVibGljIGdldFZhbHVlQXNEYXRlKCk6IFQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnZhbHVlQXNEYXRlID8/IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGlucHV0IHZhbHVlIHRvIHRoZSBjb3JyZWN0bHkgZm9ybWF0dGVkIHZhbHVlLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgcHJvcGVydHkgdmFsdWVBc0RhdGUgaW5zdGVhZC5cbiAgICovXG4gIHB1YmxpYyBzZXRWYWx1ZUFzRGF0ZShkYXRlOiBTYmJEYXRlTGlrZTxUPik6IHZvaWQge1xuICAgIHRoaXMudmFsdWVBc0RhdGUgPSBkYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBXaGV0aGVyIGEgY3VzdG9tIG5vdyBpcyBjb25maWd1cmVkLlxuICAgKi9cbiAgcHVibGljIGhhc0N1c3RvbU5vdygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLl9ub3c7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hJbnB1dCgpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGZpbmRJbnB1dCh0aGlzLCB0aGlzLmlucHV0KTtcbiAgICBpZiAodGhpcy5faW5wdXRFbGVtZW50ID09PSBpbnB1dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXRFbGVtZW50KSB7XG4gICAgICB0aGlzLl9kYXRlUGlja2VyQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICAgIHRoaXMuX2lucHV0T2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnB1dEVsZW1lbnQgPSBpbnB1dDtcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIHRoaXMuX2RhdGVQaWNrZXJDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgdGhpcy5faW5wdXRPYnNlcnZlcj8ub2JzZXJ2ZShpbnB1dCwge1xuICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsnZGlzYWJsZWQnLCAncmVhZG9ubHknLCAnbWluJywgJ21heCcsICd2YWx1ZSddLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX2lucHV0RWxlbWVudFBsYWNlaG9sZGVyTXV0YWJsZSA9ICFpbnB1dC5wbGFjZWhvbGRlcjtcbiAgICAgIGlucHV0LnR5cGUgPSAndGV4dCc7XG4gICAgICBpZiAodGhpcy5faW5wdXRFbGVtZW50UGxhY2Vob2xkZXJNdXRhYmxlKSB7XG4gICAgICAgIGlucHV0LnBsYWNlaG9sZGVyID0gaTE4bkRhdGVQaWNrZXJQbGFjZWhvbGRlclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3B0aW9uczogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSB7IHNpZ25hbDogdGhpcy5fZGF0ZVBpY2tlckNvbnRyb2xsZXIuc2lnbmFsIH07XG4gICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHRoaXMuX3BhcnNlSW5wdXQoKSwgb3B0aW9ucyk7XG4gICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB0aGlzLl9oYW5kbGVJbnB1dENoYW5nZSgpLCBvcHRpb25zKTtcbiAgICAgIHRoaXMuX3BhcnNlSW5wdXQodHJ1ZSk7XG4gICAgICB0aGlzLl90cnlBcHBseUZvcm1hdFRvSW5wdXQoKTtcbiAgICAgIHRoaXMuX3ZhbGlkYXRlRGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2VtaXRJbnB1dFVwZGF0ZWQoKTogdm9pZCB7XG4gICAgY29uc3QgeyBkaXNhYmxlZCwgcmVhZE9ubHk6IHJlYWRvbmx5LCBtaW4sIG1heCB9ID0gdGhpcy5faW5wdXRFbGVtZW50ID8/IHt9O1xuICAgIHRoaXMuX2lucHV0VXBkYXRlZC5lbWl0KHsgZGlzYWJsZWQsIHJlYWRvbmx5LCBtaW4sIG1heCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUlucHV0Q2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl90cnlBcHBseUZvcm1hdFRvSW5wdXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl92YWxpZGF0ZURhdGUoKTtcbiAgICB0aGlzLl9zZXRBcmlhTGl2ZU1lc3NhZ2UoKTtcbiAgICB0aGlzLl9jaGFuZ2UuZW1pdCgpO1xuICAgIHRoaXMuX2RpZENoYW5nZS5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIF90cnlBcHBseUZvcm1hdFRvSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gdGhpcy52YWx1ZUFzRGF0ZSA/IHRoaXMuX2Zvcm1hdCh0aGlzLnZhbHVlQXNEYXRlISkgOiAnJztcbiAgICBpZiAoZm9ybWF0dGVkRGF0ZSAmJiB0aGlzLl9pbnB1dEVsZW1lbnQudmFsdWUgIT09IGZvcm1hdHRlZERhdGUpIHtcbiAgICAgIHRoaXMuX2lucHV0RWxlbWVudC52YWx1ZSA9IGZvcm1hdHRlZERhdGU7XG4gICAgICB0aGlzLl9pbnB1dEVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTtcbiAgICAgIHRoaXMuX2lucHV0RWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF92YWxpZGF0ZURhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc0VtcHR5T3JWYWxpZCA9XG4gICAgICAhdGhpcy5faW5wdXRFbGVtZW50LnZhbHVlIHx8XG4gICAgICAoISF0aGlzLnZhbHVlQXNEYXRlICYmXG4gICAgICAgIGlzRGF0ZUF2YWlsYWJsZShcbiAgICAgICAgICB0aGlzLnZhbHVlQXNEYXRlLFxuICAgICAgICAgIHRoaXMuZGF0ZUZpbHRlcixcbiAgICAgICAgICB0aGlzLl9pbnB1dEVsZW1lbnQ/Lm1pbixcbiAgICAgICAgICB0aGlzLl9pbnB1dEVsZW1lbnQ/Lm1heCxcbiAgICAgICAgKSk7XG4gICAgY29uc3Qgd2FzVmFsaWQgPSAhdGhpcy5faW5wdXRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS1zYmItaW52YWxpZCcpO1xuICAgIHRoaXMuX2lucHV0RWxlbWVudC50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtc2JiLWludmFsaWQnLCAhaXNFbXB0eU9yVmFsaWQpO1xuICAgIGlmICh3YXNWYWxpZCAhPT0gaXNFbXB0eU9yVmFsaWQpIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRpb25DaGFuZ2UuZW1pdCh7IHZhbGlkOiBpc0VtcHR5T3JWYWxpZCB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZUlucHV0KGRlc2VyaWFsaXplQXNGYWxsYmFjayA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9pbnB1dEVsZW1lbnQhLnZhbHVlO1xuICAgIGNvbnN0IHBhcnNlID0gdGhpcy5kYXRlUGFyc2VyID8/ICgodjogc3RyaW5nKSA9PiB0aGlzLl9kYXRlQWRhcHRlci5wYXJzZSh2LCB0aGlzLm5vdykpO1xuICAgIC8vIFdlIGFyZSBhc3NpZ25pbmcgZGlyZWN0bHkgdG8gdGhlIHByaXZhdGUgYmFja2luZyBwcm9wZXJ0eSBvZiB2YWx1ZUFzRGF0ZVxuICAgIC8vIGFzIHdlIGRvbid0IHdhbnQgdG8gdHJpZ2dlciBhIGJsdXIgZXZlbnQgZHVyaW5nIHRoaXMgdGltZS5cbiAgICB0aGlzLl92YWx1ZUFzRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbChwYXJzZSh2YWx1ZSkpO1xuICAgIGlmIChkZXNlcmlhbGl6ZUFzRmFsbGJhY2sgJiYgIXRoaXMuX3ZhbHVlQXNEYXRlKSB7XG4gICAgICB0aGlzLl92YWx1ZUFzRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbChcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9mb3JtYXQoZGF0ZTogVCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0ID8gdGhpcy5mb3JtYXQoZGF0ZSkgOiB0aGlzLl9kYXRlQWRhcHRlci5mb3JtYXQoZGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRBcmlhTGl2ZU1lc3NhZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyRWxlbWVudDogSFRNTFBhcmFncmFwaEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkID1cbiAgICAgIHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3Rvcj8uPEhUTUxQYXJhZ3JhcGhFbGVtZW50PignI3N0YXR1cy1jb250YWluZXInKTtcblxuICAgIGlmICghY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMudmFsdWVBc0RhdGUpIHtcbiAgICAgIGNvbnRhaW5lckVsZW1lbnQuaW5uZXJUZXh0ID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5mb3JtYXQodGhpcy52YWx1ZUFzRGF0ZSwgeyB3ZWVrZGF5U3R5bGU6ICdsb25nJyB9KTtcbiAgICAgIGNvbnRhaW5lckVsZW1lbnQuaW5uZXJUZXh0ID0gYCR7aTE4bkRhdGVDaGFuZ2VkVG9bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7ZGF0ZX1gO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYDxwIGlkPVwic3RhdHVzLWNvbnRhaW5lclwiIHJvbGU9XCJzdGF0dXNcIj48L3A+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWRhdGVwaWNrZXInOiBTYmJEYXRlcGlja2VyRWxlbWVudDtcbiAgfVxuXG4gIGludGVyZmFjZSBHbG9iYWxFdmVudEhhbmRsZXJzRXZlbnRNYXAge1xuICAgIGlucHV0VXBkYXRlZDogQ3VzdG9tRXZlbnQ8U2JiSW5wdXRVcGRhdGVFdmVudD47XG4gIH1c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