@sbb-esta/lyne-elements 1.5.0 → 1.7.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 (600) hide show
  1. package/accordion/accordion.d.ts +0 -1
  2. package/action-group/action-group.d.ts +0 -1
  3. package/alert/alert/alert.d.ts +22 -17
  4. package/alert/alert/alert.d.ts.map +1 -1
  5. package/alert/alert-group/alert-group.d.ts +1 -2
  6. package/alert/alert-group/alert-group.d.ts.map +1 -1
  7. package/alert/alert-group.js +31 -26
  8. package/alert/alert.js +45 -37
  9. package/autocomplete/autocomplete-base-element.d.ts +0 -1
  10. package/autocomplete/autocomplete.d.ts +0 -1
  11. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts +0 -1
  12. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts +0 -1
  13. package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.d.ts +0 -1
  14. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +0 -1
  15. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts +0 -1
  16. package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.d.ts +0 -1
  17. package/autocomplete.js +1 -1
  18. package/breadcrumb/breadcrumb/breadcrumb.d.ts +0 -1
  19. package/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts +0 -1
  20. package/breadcrumb/breadcrumb-group.js +2 -2
  21. package/breadcrumb/breadcrumb.js +11 -11
  22. package/button/button/button.d.ts +0 -1
  23. package/button/button-link/button-link.d.ts +0 -1
  24. package/button/button-static/button-static.d.ts +0 -1
  25. package/button/common/button-common.d.ts +0 -1
  26. package/button/mini-button/mini-button-base-element.d.ts +0 -1
  27. package/button/mini-button/mini-button.d.ts +0 -1
  28. package/button/mini-button-group/index.d.ts +2 -0
  29. package/button/mini-button-group/index.d.ts.map +1 -0
  30. package/button/mini-button-group/mini-button-group.d.ts +28 -0
  31. package/button/mini-button-group/mini-button-group.d.ts.map +1 -0
  32. package/button/mini-button-group.d.ts +2 -0
  33. package/button/mini-button-group.d.ts.map +1 -0
  34. package/button/mini-button-group.js +47 -0
  35. package/button/secondary-button/secondary-button.d.ts +0 -1
  36. package/button/secondary-button-link/secondary-button-link.d.ts +0 -1
  37. package/button/secondary-button-static/secondary-button-static.d.ts +0 -1
  38. package/button/tertiary-button/tertiary-button.d.ts +0 -1
  39. package/button/tertiary-button-link/tertiary-button-link.d.ts +0 -1
  40. package/button/tertiary-button-static/tertiary-button-static.d.ts +0 -1
  41. package/button/transparent-button/transparent-button.d.ts +0 -1
  42. package/button/transparent-button-link/transparent-button-link.d.ts +0 -1
  43. package/button/transparent-button-static/transparent-button-static.d.ts +0 -1
  44. package/button.d.ts +1 -0
  45. package/button.d.ts.map +1 -1
  46. package/button.js +1 -0
  47. package/calendar/calendar.d.ts +0 -1
  48. package/calendar.js +1 -1
  49. package/card/card/card.d.ts +0 -1
  50. package/card/card-badge/card-badge.d.ts +0 -1
  51. package/card/card-button/card-button.d.ts +0 -1
  52. package/card/card-link/card-link.d.ts +0 -1
  53. package/card/card.js +1 -1
  54. package/card/common/card-action-common.d.ts +0 -1
  55. package/checkbox/checkbox/checkbox.d.ts +0 -1
  56. package/checkbox/checkbox-group/checkbox-group.d.ts +0 -1
  57. package/checkbox/checkbox-panel/checkbox-panel.d.ts +0 -1
  58. package/checkbox/common/checkbox-common.d.ts +0 -1
  59. package/chip/chip.d.ts +0 -1
  60. package/chip.js +1 -1
  61. package/clock/clock.d.ts +0 -1
  62. package/clock/clock.d.ts.map +1 -1
  63. package/clock.js +14 -14
  64. package/container/container/container.d.ts +1 -1
  65. package/container/container/container.d.ts.map +1 -1
  66. package/container/container.js +21 -16
  67. package/container/sticky-bar/sticky-bar.d.ts +0 -1
  68. package/container/sticky-bar.js +5 -5
  69. package/core/a11y/focus-visible-within-controller.d.ts +0 -1
  70. package/core/base-elements/action-base-element.d.ts +0 -1
  71. package/core/base-elements/button-base-element.d.ts +0 -1
  72. package/core/base-elements/link-base-element.d.ts +0 -1
  73. package/core/base-elements/open-close-base-element.d.ts +0 -1
  74. package/core/config/config.d.ts +0 -1
  75. package/core/controllers/connected-abort-controller.d.ts +0 -1
  76. package/core/controllers/language-controller.d.ts +0 -1
  77. package/core/controllers/slot-state-controller.d.ts +0 -1
  78. package/core/datetime/native-date-adapter.d.ts +0 -1
  79. package/core/decorators/host-attributes.d.ts +0 -1
  80. package/core/decorators/slot-state.d.ts +0 -1
  81. package/core/dom/ssr.d.ts +0 -1
  82. package/core/eventing/form-element-handlers.d.ts +0 -1
  83. package/core/i18n/i18n.d.ts +0 -1
  84. package/core/i18n.js +1 -1
  85. package/core/images.d.ts.map +1 -1
  86. package/core/mixins/disabled-mixin.d.ts +0 -1
  87. package/core/mixins/form-associated-checkbox-mixin.d.ts +0 -1
  88. package/core/mixins/form-associated-mixin.d.ts +0 -1
  89. package/core/mixins/hydration-mixin.d.ts +0 -1
  90. package/core/mixins/named-slot-list-mixin.d.ts +7 -2
  91. package/core/mixins/named-slot-list-mixin.d.ts.map +1 -1
  92. package/core/mixins/negative-mixin.d.ts +0 -1
  93. package/core/mixins/panel-mixin.d.ts +0 -1
  94. package/core/mixins/required-mixin.d.ts +0 -1
  95. package/core/mixins/update-scheduler-mixin.d.ts +0 -1
  96. package/core/mixins.js +100 -88
  97. package/core/overlay/overlay.d.ts +0 -1
  98. package/core/styles/core.scss +21 -19
  99. package/core/styles/mixins/link.scss +9 -6
  100. package/core/styles/mixins/lists.scss +5 -5
  101. package/core/styles/mixins/pearl-chain-bullet.scss +14 -9
  102. package/core/styles/mixins/table.scss +19 -17
  103. package/core/testing/mocha-extensions.d.ts +0 -1
  104. package/core/testing/wait-for-event.d.ts +2 -0
  105. package/core/testing/wait-for-event.d.ts.map +1 -0
  106. package/core/testing/wait-for-image-ready.d.ts +0 -1
  107. package/core/testing/wait-for-render.d.ts +0 -1
  108. package/core/testing.d.ts +1 -0
  109. package/core/testing.d.ts.map +1 -1
  110. package/core/testing.js +49 -36
  111. package/core.css +10 -8
  112. package/custom-elements.json +3104 -742
  113. package/datepicker/common/datepicker-button.d.ts +0 -1
  114. package/datepicker/datepicker/datepicker.d.ts +0 -1
  115. package/datepicker/datepicker-next-day/datepicker-next-day.d.ts +0 -1
  116. package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +0 -1
  117. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +0 -1
  118. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  119. package/development/accordion/accordion.d.ts +0 -1
  120. package/development/action-group/action-group.d.ts +0 -1
  121. package/development/alert/alert/alert.d.ts +22 -17
  122. package/development/alert/alert/alert.d.ts.map +1 -1
  123. package/development/alert/alert-group/alert-group.d.ts +1 -2
  124. package/development/alert/alert-group/alert-group.d.ts.map +1 -1
  125. package/development/alert/alert-group.js +16 -11
  126. package/development/alert/alert.js +66 -25
  127. package/development/autocomplete/autocomplete-base-element.d.ts +0 -1
  128. package/development/autocomplete/autocomplete.d.ts +0 -1
  129. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts +0 -1
  130. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts +0 -1
  131. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.d.ts +0 -1
  132. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +0 -1
  133. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts +0 -1
  134. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.d.ts +0 -1
  135. package/development/autocomplete.js +7 -5
  136. package/development/breadcrumb/breadcrumb/breadcrumb.d.ts +0 -1
  137. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts +0 -1
  138. package/development/breadcrumb/breadcrumb-group.js +4 -4
  139. package/development/breadcrumb/breadcrumb.js +8 -6
  140. package/development/button/button/button.d.ts +0 -1
  141. package/development/button/button-link/button-link.d.ts +0 -1
  142. package/development/button/button-static/button-static.d.ts +0 -1
  143. package/development/button/common/button-common.d.ts +0 -1
  144. package/development/button/mini-button/mini-button-base-element.d.ts +0 -1
  145. package/development/button/mini-button/mini-button.d.ts +0 -1
  146. package/development/button/mini-button-group/index.d.ts +2 -0
  147. package/development/button/mini-button-group/index.d.ts.map +1 -0
  148. package/development/button/mini-button-group/mini-button-group.d.ts +28 -0
  149. package/development/button/mini-button-group/mini-button-group.d.ts.map +1 -0
  150. package/development/button/mini-button-group.d.ts +2 -0
  151. package/development/button/mini-button-group.d.ts.map +1 -0
  152. package/development/button/mini-button-group.js +142 -0
  153. package/development/button/secondary-button/secondary-button.d.ts +0 -1
  154. package/development/button/secondary-button-link/secondary-button-link.d.ts +0 -1
  155. package/development/button/secondary-button-static/secondary-button-static.d.ts +0 -1
  156. package/development/button/tertiary-button/tertiary-button.d.ts +0 -1
  157. package/development/button/tertiary-button-link/tertiary-button-link.d.ts +0 -1
  158. package/development/button/tertiary-button-static/tertiary-button-static.d.ts +0 -1
  159. package/development/button/transparent-button/transparent-button.d.ts +0 -1
  160. package/development/button/transparent-button-link/transparent-button-link.d.ts +0 -1
  161. package/development/button/transparent-button-static/transparent-button-static.d.ts +0 -1
  162. package/development/button.d.ts +1 -0
  163. package/development/button.d.ts.map +1 -1
  164. package/development/button.js +2 -1
  165. package/development/calendar/calendar.d.ts +0 -1
  166. package/development/calendar.js +3 -3
  167. package/development/card/card/card.d.ts +0 -1
  168. package/development/card/card-badge/card-badge.d.ts +0 -1
  169. package/development/card/card-button/card-button.d.ts +0 -1
  170. package/development/card/card-link/card-link.d.ts +0 -1
  171. package/development/card/card.js +3 -3
  172. package/development/card/common/card-action-common.d.ts +0 -1
  173. package/development/checkbox/checkbox/checkbox.d.ts +0 -1
  174. package/development/checkbox/checkbox-group/checkbox-group.d.ts +0 -1
  175. package/development/checkbox/checkbox-panel/checkbox-panel.d.ts +0 -1
  176. package/development/checkbox/common/checkbox-common.d.ts +0 -1
  177. package/development/chip/chip.d.ts +0 -1
  178. package/development/chip.js +4 -2
  179. package/development/clock/clock.d.ts +0 -1
  180. package/development/clock/clock.d.ts.map +1 -1
  181. package/development/clock.js +3 -2
  182. package/development/container/container/container.d.ts +1 -1
  183. package/development/container/container/container.d.ts.map +1 -1
  184. package/development/container/container.js +39 -3
  185. package/development/container/sticky-bar/sticky-bar.d.ts +0 -1
  186. package/development/container/sticky-bar.js +1 -4
  187. package/development/core/a11y/focus-visible-within-controller.d.ts +0 -1
  188. package/development/core/base-elements/action-base-element.d.ts +0 -1
  189. package/development/core/base-elements/button-base-element.d.ts +0 -1
  190. package/development/core/base-elements/link-base-element.d.ts +0 -1
  191. package/development/core/base-elements/open-close-base-element.d.ts +0 -1
  192. package/development/core/config/config.d.ts +0 -1
  193. package/development/core/controllers/connected-abort-controller.d.ts +0 -1
  194. package/development/core/controllers/language-controller.d.ts +0 -1
  195. package/development/core/controllers/slot-state-controller.d.ts +0 -1
  196. package/development/core/datetime/native-date-adapter.d.ts +0 -1
  197. package/development/core/decorators/host-attributes.d.ts +0 -1
  198. package/development/core/decorators/slot-state.d.ts +0 -1
  199. package/development/core/dom/ssr.d.ts +0 -1
  200. package/development/core/eventing/form-element-handlers.d.ts +0 -1
  201. package/development/core/i18n/i18n.d.ts +0 -1
  202. package/development/core/i18n.js +2 -2
  203. package/development/core/images.d.ts.map +1 -1
  204. package/development/core/mixins/disabled-mixin.d.ts +0 -1
  205. package/development/core/mixins/form-associated-checkbox-mixin.d.ts +0 -1
  206. package/development/core/mixins/form-associated-mixin.d.ts +0 -1
  207. package/development/core/mixins/hydration-mixin.d.ts +0 -1
  208. package/development/core/mixins/named-slot-list-mixin.d.ts +7 -2
  209. package/development/core/mixins/named-slot-list-mixin.d.ts.map +1 -1
  210. package/development/core/mixins/negative-mixin.d.ts +0 -1
  211. package/development/core/mixins/panel-mixin.d.ts +0 -1
  212. package/development/core/mixins/required-mixin.d.ts +0 -1
  213. package/development/core/mixins/update-scheduler-mixin.d.ts +0 -1
  214. package/development/core/mixins.js +24 -12
  215. package/development/core/overlay/overlay.d.ts +0 -1
  216. package/development/core/testing/mocha-extensions.d.ts +0 -1
  217. package/development/core/testing/wait-for-event.d.ts +2 -0
  218. package/development/core/testing/wait-for-event.d.ts.map +1 -0
  219. package/development/core/testing/wait-for-image-ready.d.ts +0 -1
  220. package/development/core/testing/wait-for-render.d.ts +0 -1
  221. package/development/core/testing.d.ts +1 -0
  222. package/development/core/testing.d.ts.map +1 -1
  223. package/development/core/testing.js +17 -1
  224. package/development/datepicker/common/datepicker-button.d.ts +0 -1
  225. package/development/datepicker/datepicker/datepicker.d.ts +0 -1
  226. package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts +0 -1
  227. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +0 -1
  228. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +0 -1
  229. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  230. package/development/datepicker/datepicker-toggle.js +4 -2
  231. package/development/dialog/dialog/dialog.d.ts +0 -1
  232. package/development/dialog/dialog/dialog.d.ts.map +1 -1
  233. package/development/dialog/dialog-actions/dialog-actions.d.ts +0 -1
  234. package/development/dialog/dialog-content/dialog-content.d.ts +0 -1
  235. package/development/dialog/dialog-content.js +8 -6
  236. package/development/dialog/dialog-title/dialog-title.d.ts +0 -1
  237. package/development/dialog/dialog.js +7 -3
  238. package/development/divider/divider.d.ts +0 -1
  239. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts +0 -1
  240. package/development/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts +0 -1
  241. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts +0 -1
  242. package/development/expansion-panel/expansion-panel-header.js +1 -1
  243. package/development/file-selector/file-selector.d.ts +0 -1
  244. package/development/flip-card/flip-card/flip-card.d.ts +22 -7
  245. package/development/flip-card/flip-card/flip-card.d.ts.map +1 -1
  246. package/development/flip-card/flip-card-details/flip-card-details.d.ts +0 -1
  247. package/development/flip-card/flip-card-summary/flip-card-summary.d.ts +0 -1
  248. package/development/flip-card/flip-card-summary.js +3 -1
  249. package/development/flip-card/flip-card.js +93 -24
  250. package/development/footer/footer.d.ts +0 -1
  251. package/development/footer.js +1 -1
  252. package/development/form-error/form-error.d.ts +0 -1
  253. package/development/form-error.js +4 -4
  254. package/development/form-field/form-field/form-field.d.ts +1 -2
  255. package/development/form-field/form-field/form-field.d.ts.map +1 -1
  256. package/development/form-field/form-field-clear/form-field-clear.d.ts +0 -1
  257. package/development/form-field/form-field.js +72 -29
  258. package/development/header/common/header-action-common.d.ts +0 -1
  259. package/development/header/common.js +2 -2
  260. package/development/header/header/header.d.ts +0 -1
  261. package/development/header/header-button/header-button.d.ts +0 -1
  262. package/development/header/header-link/header-link.d.ts +0 -1
  263. package/development/header/header.js +2 -2
  264. package/development/icon/icon-base.d.ts +0 -1
  265. package/development/icon/icon-name-mixin.d.ts +0 -1
  266. package/development/icon/icon.d.ts +9 -2
  267. package/development/icon/icon.d.ts.map +1 -1
  268. package/development/icon.js +16 -2
  269. package/development/image/image.d.ts +0 -1
  270. package/development/image.js +2 -2
  271. package/development/journey-header/journey-header.d.ts +0 -1
  272. package/development/lead-container/lead-container.d.ts +0 -1
  273. package/development/lead-container.js +1 -1
  274. package/development/link/block-link/block-link.d.ts +0 -1
  275. package/development/link/block-link-button/block-link-button.d.ts +0 -1
  276. package/development/link/block-link-static/block-link-static.d.ts +0 -1
  277. package/development/link/common/block-link-common.d.ts +0 -1
  278. package/development/link/common/inline-link-common.d.ts +0 -1
  279. package/development/link/common/link-common.d.ts +0 -1
  280. package/development/link/common.js +9 -7
  281. package/development/link/link/link.d.ts +0 -1
  282. package/development/link/link-button/link-button.d.ts +0 -1
  283. package/development/link/link-static/link-static.d.ts +0 -1
  284. package/development/link-list/common/link-list-base.d.ts +27 -0
  285. package/development/link-list/common/link-list-base.d.ts.map +1 -0
  286. package/development/link-list/common.d.ts +2 -0
  287. package/development/link-list/common.d.ts.map +1 -0
  288. package/development/link-list/common.js +113 -0
  289. package/development/link-list/link-list/link-list.d.ts +22 -0
  290. package/development/link-list/link-list/link-list.d.ts.map +1 -0
  291. package/development/link-list/link-list-anchor/index.d.ts +2 -0
  292. package/development/link-list/link-list-anchor/index.d.ts.map +1 -0
  293. package/development/link-list/link-list-anchor/link-list-anchor.d.ts +17 -0
  294. package/development/link-list/link-list-anchor/link-list-anchor.d.ts.map +1 -0
  295. package/development/link-list/link-list-anchor.d.ts +2 -0
  296. package/development/link-list/link-list-anchor.d.ts.map +1 -0
  297. package/development/link-list/link-list-anchor.js +91 -0
  298. package/development/link-list/link-list.d.ts +1 -38
  299. package/development/link-list/link-list.d.ts.map +1 -1
  300. package/development/link-list/link-list.js +194 -0
  301. package/development/link-list.d.ts +2 -0
  302. package/development/link-list.d.ts.map +1 -1
  303. package/development/link-list.js +4 -260
  304. package/development/loading-indicator/loading-indicator.d.ts +0 -1
  305. package/development/logo/logo.d.ts +0 -1
  306. package/development/logo.js +2 -2
  307. package/development/map-container/map-container.d.ts +0 -1
  308. package/development/map-container.js +13 -11
  309. package/development/menu/common/menu-action-common.d.ts +0 -1
  310. package/development/menu/menu/menu.d.ts +0 -1
  311. package/development/menu/menu/menu.d.ts.map +1 -1
  312. package/development/menu/menu-button/menu-button.d.ts +0 -1
  313. package/development/menu/menu-link/menu-link.d.ts +0 -1
  314. package/development/menu/menu.js +9 -6
  315. package/development/message/message.d.ts +0 -1
  316. package/development/navigation/common/navigation-action-common.d.ts +0 -1
  317. package/development/navigation/navigation/navigation.d.ts +0 -1
  318. package/development/navigation/navigation/navigation.d.ts.map +1 -1
  319. package/development/navigation/navigation-button/navigation-button.d.ts +0 -1
  320. package/development/navigation/navigation-link/navigation-link.d.ts +0 -1
  321. package/development/navigation/navigation-list/navigation-list.d.ts +0 -1
  322. package/development/navigation/navigation-marker/navigation-marker.d.ts +0 -1
  323. package/development/navigation/navigation-section/navigation-section.d.ts +0 -1
  324. package/development/navigation/navigation-section.js +7 -5
  325. package/development/navigation/navigation.js +14 -11
  326. package/development/notification/notification.d.ts +4 -5
  327. package/development/notification.js +1 -1
  328. package/development/option/optgroup/optgroup-base-element.d.ts +0 -1
  329. package/development/option/optgroup/optgroup.d.ts +0 -1
  330. package/development/option/option/option-base-element.d.ts +0 -1
  331. package/development/option/option/option.d.ts +0 -1
  332. package/development/overlay/overlay-base-element.d.ts +0 -1
  333. package/development/overlay/overlay-base-element.d.ts.map +1 -1
  334. package/development/overlay/overlay.d.ts +0 -1
  335. package/development/overlay/overlay.d.ts.map +1 -1
  336. package/development/overlay.js +43 -21
  337. package/development/popover/popover/popover.d.ts +0 -1
  338. package/development/popover/popover/popover.d.ts.map +1 -1
  339. package/development/popover/popover-trigger/popover-trigger.d.ts +0 -1
  340. package/development/popover/popover-trigger.js +3 -3
  341. package/development/popover/popover.js +5 -3
  342. package/development/radio-button/common/radio-button-common.d.ts +0 -1
  343. package/development/radio-button/common.js +6 -6
  344. package/development/radio-button/radio-button/radio-button.d.ts +0 -1
  345. package/development/radio-button/radio-button-group/radio-button-group.d.ts +0 -1
  346. package/development/radio-button/radio-button-panel/radio-button-panel.d.ts +0 -1
  347. package/development/screen-reader-only/screen-reader-only.d.ts +0 -1
  348. package/development/select/select.d.ts +0 -1
  349. package/development/select.js +7 -5
  350. package/development/selection-expansion-panel/selection-expansion-panel.d.ts +0 -1
  351. package/development/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  352. package/development/selection-expansion-panel.js +6 -2
  353. package/development/signet/signet.d.ts +0 -1
  354. package/development/signet.js +1 -1
  355. package/development/skiplink-list/skiplink-list.d.ts +0 -1
  356. package/development/slider/slider.d.ts +0 -1
  357. package/development/slider.js +4 -4
  358. package/development/status/status.d.ts +0 -1
  359. package/development/stepper/step/step.d.ts +0 -1
  360. package/development/stepper/step-label/step-label.d.ts +0 -1
  361. package/development/stepper/stepper/stepper.d.ts +0 -1
  362. package/development/table/table-wrapper/table-wrapper.d.ts +0 -1
  363. package/development/tabs/tab/tab.d.ts +0 -1
  364. package/development/tabs/tab-group/tab-group.d.ts +0 -1
  365. package/development/tabs/tab-label/tab-label.d.ts +0 -1
  366. package/development/tabs/tab-label.js +10 -10
  367. package/development/tag/tag/tag.d.ts +0 -1
  368. package/development/tag/tag-group/tag-group.d.ts +0 -1
  369. package/development/tag/tag.js +3 -3
  370. package/development/teaser/teaser.d.ts +0 -1
  371. package/development/teaser-hero/teaser-hero.d.ts +27 -0
  372. package/development/teaser-hero/teaser-hero.d.ts.map +1 -0
  373. package/development/teaser-hero.d.ts +2 -0
  374. package/development/teaser-hero.d.ts.map +1 -0
  375. package/development/teaser-hero.js +207 -0
  376. package/development/teaser-product/common/teaser-product-common.d.ts +7 -0
  377. package/development/teaser-product/common/teaser-product-common.d.ts.map +1 -0
  378. package/development/teaser-product/common.d.ts +2 -0
  379. package/development/teaser-product/common.d.ts.map +1 -0
  380. package/development/teaser-product/common.js +219 -0
  381. package/development/teaser-product/teaser-product/teaser-product.d.ts +22 -0
  382. package/development/teaser-product/teaser-product/teaser-product.d.ts.map +1 -0
  383. package/development/teaser-product/teaser-product-static/teaser-product-static.d.ts +22 -0
  384. package/development/teaser-product/teaser-product-static/teaser-product-static.d.ts.map +1 -0
  385. package/development/teaser-product/teaser-product-static.d.ts +2 -0
  386. package/development/teaser-product/teaser-product-static.d.ts.map +1 -0
  387. package/development/teaser-product/teaser-product-static.js +25 -0
  388. package/development/teaser-product/teaser-product.d.ts +2 -0
  389. package/development/teaser-product/teaser-product.d.ts.map +1 -0
  390. package/development/teaser-product/teaser-product.js +80 -0
  391. package/development/teaser-product.d.ts +4 -0
  392. package/development/teaser-product.d.ts.map +1 -0
  393. package/development/teaser-product.js +4 -0
  394. package/development/time-input/time-input.d.ts +0 -1
  395. package/development/timetable-occupancy/timetable-occupancy.d.ts +0 -1
  396. package/development/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +0 -1
  397. package/development/timetable-occupancy.js +1 -1
  398. package/development/title/title-base.d.ts +0 -1
  399. package/development/title/title.d.ts +0 -1
  400. package/development/toast/toast.d.ts +0 -1
  401. package/development/toggle/toggle/toggle.d.ts +0 -1
  402. package/development/toggle/toggle-option/toggle-option.d.ts +0 -1
  403. package/development/toggle/toggle.js +2 -2
  404. package/development/toggle-check/toggle-check.d.ts +0 -1
  405. package/development/train/train/train.d.ts +0 -1
  406. package/development/train/train-blocked-passage/train-blocked-passage.d.ts +0 -1
  407. package/development/train/train-blocked-passage.js +1 -1
  408. package/development/train/train-formation/train-formation.d.ts +0 -1
  409. package/development/train/train-formation.js +9 -7
  410. package/development/train/train-wagon/train-wagon.d.ts +0 -1
  411. package/development/train/train-wagon.js +1 -1
  412. package/development/train/train.js +1 -1
  413. package/development/visual-checkbox/visual-checkbox.d.ts +0 -1
  414. package/development/visual-checkbox.js +1 -1
  415. package/dialog/dialog/dialog.d.ts +0 -1
  416. package/dialog/dialog/dialog.d.ts.map +1 -1
  417. package/dialog/dialog-actions/dialog-actions.d.ts +0 -1
  418. package/dialog/dialog-content/dialog-content.d.ts +0 -1
  419. package/dialog/dialog-content.js +1 -1
  420. package/dialog/dialog-title/dialog-title.d.ts +0 -1
  421. package/dialog/dialog.js +3 -3
  422. package/divider/divider.d.ts +0 -1
  423. package/expansion-panel/expansion-panel/expansion-panel.d.ts +0 -1
  424. package/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts +0 -1
  425. package/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts +0 -1
  426. package/expansion-panel/expansion-panel-header.js +1 -1
  427. package/file-selector/file-selector.d.ts +0 -1
  428. package/flip-card/flip-card/flip-card.d.ts +22 -7
  429. package/flip-card/flip-card/flip-card.d.ts.map +1 -1
  430. package/flip-card/flip-card-details/flip-card-details.d.ts +0 -1
  431. package/flip-card/flip-card-summary/flip-card-summary.d.ts +0 -1
  432. package/flip-card/flip-card-summary.js +8 -8
  433. package/flip-card/flip-card.js +63 -32
  434. package/footer/footer.d.ts +0 -1
  435. package/footer.js +1 -1
  436. package/form-error/form-error.d.ts +0 -1
  437. package/form-error.js +1 -1
  438. package/form-field/form-field/form-field.d.ts +1 -2
  439. package/form-field/form-field/form-field.d.ts.map +1 -1
  440. package/form-field/form-field-clear/form-field-clear.d.ts +0 -1
  441. package/form-field/form-field.js +22 -22
  442. package/header/common/header-action-common.d.ts +0 -1
  443. package/header/common.js +1 -1
  444. package/header/header/header.d.ts +0 -1
  445. package/header/header-button/header-button.d.ts +0 -1
  446. package/header/header-link/header-link.d.ts +0 -1
  447. package/header/header.js +1 -1
  448. package/icon/icon-base.d.ts +0 -1
  449. package/icon/icon-name-mixin.d.ts +0 -1
  450. package/icon/icon.d.ts +9 -2
  451. package/icon/icon.d.ts.map +1 -1
  452. package/icon.js +71 -62
  453. package/image/image.d.ts +0 -1
  454. package/image.js +25 -25
  455. package/index.d.ts +11 -1
  456. package/index.js +11 -1
  457. package/journey-header/journey-header.d.ts +0 -1
  458. package/lead-container/lead-container.d.ts +0 -1
  459. package/lead-container.js +1 -1
  460. package/link/block-link/block-link.d.ts +0 -1
  461. package/link/block-link-button/block-link-button.d.ts +0 -1
  462. package/link/block-link-static/block-link-static.d.ts +0 -1
  463. package/link/common/block-link-common.d.ts +0 -1
  464. package/link/common/inline-link-common.d.ts +0 -1
  465. package/link/common/link-common.d.ts +0 -1
  466. package/link/common.js +6 -6
  467. package/link/link/link.d.ts +0 -1
  468. package/link/link-button/link-button.d.ts +0 -1
  469. package/link/link-static/link-static.d.ts +0 -1
  470. package/link-list/common/link-list-base.d.ts +27 -0
  471. package/link-list/common/link-list-base.d.ts.map +1 -0
  472. package/link-list/common.d.ts +2 -0
  473. package/link-list/common.d.ts.map +1 -0
  474. package/link-list/common.js +59 -0
  475. package/link-list/link-list/link-list.d.ts +22 -0
  476. package/link-list/link-list/link-list.d.ts.map +1 -0
  477. package/link-list/link-list-anchor/index.d.ts +2 -0
  478. package/link-list/link-list-anchor/index.d.ts.map +1 -0
  479. package/link-list/link-list-anchor/link-list-anchor.d.ts +17 -0
  480. package/link-list/link-list-anchor/link-list-anchor.d.ts.map +1 -0
  481. package/link-list/link-list-anchor.d.ts +2 -0
  482. package/link-list/link-list-anchor.d.ts.map +1 -0
  483. package/link-list/link-list-anchor.js +18 -0
  484. package/link-list/link-list.d.ts +1 -38
  485. package/link-list/link-list.d.ts.map +1 -1
  486. package/link-list/link-list.js +27 -0
  487. package/link-list.d.ts +2 -0
  488. package/link-list.d.ts.map +1 -1
  489. package/link-list.js +3 -66
  490. package/loading-indicator/loading-indicator.d.ts +0 -1
  491. package/logo/logo.d.ts +0 -1
  492. package/logo.js +1 -1
  493. package/map-container/map-container.d.ts +0 -1
  494. package/map-container.js +1 -1
  495. package/menu/common/menu-action-common.d.ts +0 -1
  496. package/menu/menu/menu.d.ts +0 -1
  497. package/menu/menu/menu.d.ts.map +1 -1
  498. package/menu/menu-button/menu-button.d.ts +0 -1
  499. package/menu/menu-link/menu-link.d.ts +0 -1
  500. package/menu/menu.js +4 -4
  501. package/message/message.d.ts +0 -1
  502. package/navigation/common/navigation-action-common.d.ts +0 -1
  503. package/navigation/navigation/navigation.d.ts +0 -1
  504. package/navigation/navigation/navigation.d.ts.map +1 -1
  505. package/navigation/navigation-button/navigation-button.d.ts +0 -1
  506. package/navigation/navigation-link/navigation-link.d.ts +0 -1
  507. package/navigation/navigation-list/navigation-list.d.ts +0 -1
  508. package/navigation/navigation-marker/navigation-marker.d.ts +0 -1
  509. package/navigation/navigation-section/navigation-section.d.ts +0 -1
  510. package/navigation/navigation-section.js +1 -1
  511. package/navigation/navigation.js +5 -5
  512. package/notification/notification.d.ts +4 -5
  513. package/option/optgroup/optgroup-base-element.d.ts +0 -1
  514. package/option/optgroup/optgroup.d.ts +0 -1
  515. package/option/option/option-base-element.d.ts +0 -1
  516. package/option/option/option.d.ts +0 -1
  517. package/overlay/overlay-base-element.d.ts +0 -1
  518. package/overlay/overlay-base-element.d.ts.map +1 -1
  519. package/overlay/overlay.d.ts +0 -1
  520. package/overlay/overlay.d.ts.map +1 -1
  521. package/overlay.js +33 -33
  522. package/package.json +46 -1
  523. package/popover/popover/popover.d.ts +0 -1
  524. package/popover/popover/popover.d.ts.map +1 -1
  525. package/popover/popover-trigger/popover-trigger.d.ts +0 -1
  526. package/popover/popover-trigger.js +1 -1
  527. package/popover/popover.js +1 -1
  528. package/radio-button/common/radio-button-common.d.ts +0 -1
  529. package/radio-button/common.js +1 -1
  530. package/radio-button/radio-button/radio-button.d.ts +0 -1
  531. package/radio-button/radio-button-group/radio-button-group.d.ts +0 -1
  532. package/radio-button/radio-button-panel/radio-button-panel.d.ts +0 -1
  533. package/screen-reader-only/screen-reader-only.d.ts +0 -1
  534. package/select/select.d.ts +0 -1
  535. package/select.js +1 -1
  536. package/selection-expansion-panel/selection-expansion-panel.d.ts +0 -1
  537. package/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  538. package/signet/signet.d.ts +0 -1
  539. package/signet.js +1 -1
  540. package/skiplink-list/skiplink-list.d.ts +0 -1
  541. package/slider/slider.d.ts +0 -1
  542. package/slider.js +1 -1
  543. package/standard-theme.css +19 -13
  544. package/status/status.d.ts +0 -1
  545. package/stepper/step/step.d.ts +0 -1
  546. package/stepper/step-label/step-label.d.ts +0 -1
  547. package/stepper/stepper/stepper.d.ts +0 -1
  548. package/table/table-wrapper/table-wrapper.d.ts +0 -1
  549. package/tabs/tab/tab.d.ts +0 -1
  550. package/tabs/tab-group/tab-group.d.ts +0 -1
  551. package/tabs/tab-label/tab-label.d.ts +0 -1
  552. package/tabs/tab-label.js +1 -1
  553. package/tag/tag/tag.d.ts +0 -1
  554. package/tag/tag-group/tag-group.d.ts +0 -1
  555. package/tag/tag.js +1 -1
  556. package/teaser/teaser.d.ts +0 -1
  557. package/teaser-hero/teaser-hero.d.ts +27 -0
  558. package/teaser-hero/teaser-hero.d.ts.map +1 -0
  559. package/teaser-hero.d.ts +2 -0
  560. package/teaser-hero.d.ts.map +1 -0
  561. package/teaser-hero.js +58 -0
  562. package/teaser-product/common/teaser-product-common.d.ts +7 -0
  563. package/teaser-product/common/teaser-product-common.d.ts.map +1 -0
  564. package/teaser-product/common.d.ts +2 -0
  565. package/teaser-product/common.d.ts.map +1 -0
  566. package/teaser-product/common.js +38 -0
  567. package/teaser-product/teaser-product/teaser-product.d.ts +22 -0
  568. package/teaser-product/teaser-product/teaser-product.d.ts.map +1 -0
  569. package/teaser-product/teaser-product-static/teaser-product-static.d.ts +22 -0
  570. package/teaser-product/teaser-product-static/teaser-product-static.d.ts.map +1 -0
  571. package/teaser-product/teaser-product-static.d.ts +2 -0
  572. package/teaser-product/teaser-product-static.d.ts.map +1 -0
  573. package/teaser-product/teaser-product-static.js +19 -0
  574. package/teaser-product/teaser-product.d.ts +2 -0
  575. package/teaser-product/teaser-product.d.ts.map +1 -0
  576. package/teaser-product/teaser-product.js +21 -0
  577. package/teaser-product.d.ts +4 -0
  578. package/teaser-product.d.ts.map +1 -0
  579. package/teaser-product.js +3 -0
  580. package/time-input/time-input.d.ts +0 -1
  581. package/timetable-occupancy/timetable-occupancy.d.ts +0 -1
  582. package/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +0 -1
  583. package/timetable-occupancy.js +1 -1
  584. package/title/title-base.d.ts +0 -1
  585. package/title/title.d.ts +0 -1
  586. package/toast/toast.d.ts +0 -1
  587. package/toggle/toggle/toggle.d.ts +0 -1
  588. package/toggle/toggle-option/toggle-option.d.ts +0 -1
  589. package/toggle/toggle.js +1 -1
  590. package/toggle-check/toggle-check.d.ts +0 -1
  591. package/train/train/train.d.ts +0 -1
  592. package/train/train-blocked-passage/train-blocked-passage.d.ts +0 -1
  593. package/train/train-blocked-passage.js +1 -1
  594. package/train/train-formation/train-formation.d.ts +0 -1
  595. package/train/train-formation.js +1 -1
  596. package/train/train-wagon/train-wagon.d.ts +0 -1
  597. package/train/train-wagon.js +1 -1
  598. package/train/train.js +1 -1
  599. package/visual-checkbox/visual-checkbox.d.ts +0 -1
  600. package/visual-checkbox.js +1 -1
@@ -247,9 +247,6 @@ const style = css`/**
247
247
  }
248
248
 
249
249
  .sbb-select__options {
250
- --sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);
251
- /* Scrollbar itself */
252
- /* Hide button (top and bottom of the scrollbar) */
253
250
  background-color: var(--sbb-options-panel-background-color);
254
251
  padding-block: var(--sbb-spacing-fixed-3x);
255
252
  padding-inline: 0;
@@ -261,7 +258,9 @@ const style = css`/**
261
258
  animation-name: var(--sbb-options-panel-animation-name);
262
259
  animation-duration: var(--sbb-options-panel-animation-duration);
263
260
  animation-timing-function: var(--sbb-options-panel-animation-timing-function);
264
- padding-block: var(--sbb-spacing-fixed-2x);
261
+ --sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);
262
+ /* Scrollbar itself */
263
+ /* Hide button (top and bottom of the scrollbar) */
265
264
  }
266
265
  .sbb-select__options::-webkit-scrollbar {
267
266
  width: var(--sbb-scrollbar-width);
@@ -290,6 +289,9 @@ const style = css`/**
290
289
  scrollbar-color: var(--sbb-scrollbar-color, currentcolor) var(--sbb-scrollbar-track-color, transparent);
291
290
  }
292
291
  }
292
+ .sbb-select__options {
293
+ padding-block: var(--sbb-spacing-fixed-2x);
294
+ }
293
295
  @media (forced-colors: active) {
294
296
  .sbb-select__options {
295
297
  border: var(--sbb-border-width-1x) solid CanvasText;
@@ -894,4 +896,4 @@ SbbSelectElement = __decorateClass([
894
896
  export {
895
897
  SbbSelectElement
896
898
  };
897
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2VsZWN0L3NlbGVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBQcm9wZXJ0eVZhbHVlcywgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaHRtbCwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4IH0gZnJvbSAnLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vY29yZS9iYXNlLWVsZW1lbnRzLmpzJztcbmltcG9ydCB7IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlciB9IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgaG9zdEF0dHJpYnV0ZXMgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnRXcml0aW5nTW9kZSwgaXNOZXh0anMsIGlzU2FmYXJpIH0gZnJvbSAnLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQgeyBTYmJEaXNhYmxlZE1peGluLCBTYmJOZWdhdGl2ZU1peGluLCBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpbiB9IGZyb20gJy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7IGlzRXZlbnRPbkVsZW1lbnQsIG92ZXJsYXlHYXBGaXhDb3JuZXJzLCBzZXRPdmVybGF5UG9zaXRpb24gfSBmcm9tICcuLi9jb3JlL292ZXJsYXkuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPcHRHcm91cEVsZW1lbnQsIFNiYk9wdGlvbkVsZW1lbnQgfSBmcm9tICcuLi9vcHRpb24uanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zZWxlY3Quc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBPbiBTYWZhcmksIHRoZSBhcmlhIHJvbGUgJ2xpc3Rib3gnIG11c3QgYmUgb24gdGhlIGhvc3QgZWxlbWVudCwgb3IgZWxzZSBWb2ljZU92ZXIgd29uJ3Qgd29yayBhdCBhbGwuXG4gKiBPbiB0aGUgb3RoZXIgaGFuZCwgSkFXUyBhbmQgTlZEQSBuZWVkIHRoZSByb2xlIHRvIGJlIGFuIFwiaW1tZWRpYXRlIHBhcmVudFwiIHRvIHRoZSBvcHRpb25zLCBvciBlbHNlIG9wdGdyb3VwcyB3b24ndCB3b3JrLlxuICovXG5jb25zdCBhcmlhUm9sZU9uSG9zdCA9IGlzU2FmYXJpO1xuXG5sZXQgbmV4dElkID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RDaGFuZ2Uge1xuICB0eXBlOiAndmFsdWUnO1xuICB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYSBwYW5lbCB3aXRoIHNlbGVjdGFibGUgb3B0aW9ucy5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBvcHRpb25zLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkQ2hhbmdlIC0gRGVwcmVjYXRlZC4gdXNlZCBmb3IgUmVhY3QuIFdpbGwgcHJvYmFibHkgYmUgcmVtb3ZlZCBvbmNlIFJlYWN0IDE5IGlzIGF2YWlsYWJsZS5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGNoYW5nZSAtIE5vdGlmaWVzIHRoYXQgdGhlIGNvbXBvbmVudCdzIHZhbHVlIGhhcyBjaGFuZ2VkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gaW5wdXQgLSBOb3RpZmllcyB0aGF0IGFuIG9wdGlvbiB2YWx1ZSBoYXMgYmVlbiBzZWxlY3RlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IHdpbGxPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItc2VsZWN0YCBzdGFydHMgdGhlIG9wZW5pbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXNlbGVjdGAgaXMgb3BlbmVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItc2VsZWN0YCBiZWdpbnMgdGhlIGNsb3NpbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1zZWxlY3RgIGlzIGNsb3NlZC5cbiAqIEBjc3Nwcm9wIFstLXNiYi1zZWxlY3Qtei1pbmRleD12YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpXSAtIFRvIHNwZWNpZnkgYSBjdXN0b20gc3RhY2sgb3JkZXIsXG4gKiB0aGUgYHotaW5kZXhgIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nIHRoaXMgQ1NTIHZhcmlhYmxlLiBUaGUgZGVmYXVsdCBgei1pbmRleGAgb2YgdGhlXG4gKiBjb21wb25lbnQgaXMgc2V0IHRvIGB2YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpYCB3aXRoIGEgdmFsdWUgb2YgYDEwMDBgLlxuICovXG5AY3VzdG9tRWxlbWVudCgnc2JiLXNlbGVjdCcpXG5AaG9zdEF0dHJpYnV0ZXMoe1xuICBkaXI6IGdldERvY3VtZW50V3JpdGluZ01vZGUoKSxcbiAgcm9sZTogYXJpYVJvbGVPbkhvc3QgPyAnbGlzdGJveCcgOiBudWxsLFxufSlcbmV4cG9ydCBjbGFzcyBTYmJTZWxlY3RFbGVtZW50IGV4dGVuZHMgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4oXG4gIFNiYkRpc2FibGVkTWl4aW4oU2JiTmVnYXRpdmVNaXhpbihTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCkpLFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuXG4gIC8vIEZJWE1FIHVzaW5nIC4uLnN1cGVyLmV2ZW50cyByZXF1aXJlczogaHR0cHM6Ly9naXRodWIuY29tL3NiYi1kZXNpZ24tc3lzdGVtcy9seW5lLWNvbXBvbmVudHMvaXNzdWVzLzI2MDBcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBldmVudHMgPSB7XG4gICAgZGlkQ2hhbmdlOiAnZGlkQ2hhbmdlJyxcbiAgICBjaGFuZ2U6ICdjaGFuZ2UnLFxuICAgIGlucHV0OiAnaW5wdXQnLFxuICAgIHN0YXRlQ2hhbmdlOiAnc3RhdGVDaGFuZ2UnLFxuICAgIHdpbGxPcGVuOiAnd2lsbE9wZW4nLFxuICAgIGRpZE9wZW46ICdkaWRPcGVuJyxcbiAgICB3aWxsQ2xvc2U6ICd3aWxsQ2xvc2UnLFxuICAgIGRpZENsb3NlOiAnZGlkQ2xvc2UnLFxuICB9IGFzIGNvbnN0O1xuXG4gIC8qKiBUaGUgdmFsdWUgb2YgdGhlIHNlbGVjdCBjb21wb25lbnQuIElmIGBtdWx0aXBsZWAgaXMgdHJ1ZSwgaXQncyBhbiBhcnJheS4gKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIHZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqIFRoZSBwbGFjZWhvbGRlciB1c2VkIGlmIG5vIHZhbHVlIGhhcyBiZWVuIHNlbGVjdGVkLiAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHNlbGVjdCBhbGxvd3MgZm9yIG11bHRpcGxlIHNlbGVjdGlvbi4gKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgbXVsdGlwbGUgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgc2VsZWN0IGlzIHJlcXVpcmVkLiAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3QgaXMgcmVhZG9ubHkuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgLyoqIFRoZSB2YWx1ZSBkaXNwbGF5ZWQgYnkgdGhlIGNvbXBvbmVudC4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBfZGlzcGxheVZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgb25seSB1c2VkIGZvciBSZWFjdC4gV2lsbCBwcm9iYWJseSBiZSByZW1vdmVkIG9uY2UgUmVhY3QgMTkgaXMgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBfZGlkQ2hhbmdlOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYlNlbGVjdEVsZW1lbnQuZXZlbnRzLmRpZENoYW5nZSk7XG5cbiAgLyoqIE5vdGlmaWVzIHRoYXQgdGhlIGNvbXBvbmVudCdzIHZhbHVlIGhhcyBjaGFuZ2VkLiAqL1xuICBwcml2YXRlIF9jaGFuZ2U6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIodGhpcywgU2JiU2VsZWN0RWxlbWVudC5ldmVudHMuY2hhbmdlKTtcblxuICAvKiogTm90aWZpZXMgdGhhdCBhbiBvcHRpb24gdmFsdWUgaGFzIGJlZW4gc2VsZWN0ZWQuICovXG4gIHByaXZhdGUgX2lucHV0OiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYlNlbGVjdEVsZW1lbnQuZXZlbnRzLmlucHV0KTtcblxuICAvKiogQGludGVybmFsICovXG4gIHByaXZhdGUgX3N0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8U2VsZWN0Q2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJTZWxlY3RFbGVtZW50LmV2ZW50cy5zdGF0ZUNoYW5nZSxcbiAgICB7XG4gICAgICBjb21wb3NlZDogZmFsc2UsXG4gICAgfSxcbiAgKTtcblxuICBwcml2YXRlIF9vdmVybGF5ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX29wdGlvbkNvbnRhaW5lciE6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9vcmlnaW5FbGVtZW50ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3RyaWdnZXJFbGVtZW50ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX292ZXJsYXlJZCA9IGBzYmItc2VsZWN0LSR7KytuZXh0SWR9YDtcbiAgcHJpdmF0ZSBfYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gIHByaXZhdGUgX3NlYXJjaFRpbWVvdXQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgcHJpdmF0ZSBfc2VhcmNoU3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2RpZExvYWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNQb2ludGVyRG93bkV2ZW50T25NZW51OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2Fib3J0ID0gbmV3IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlcih0aGlzKTtcblxuICAvKipcbiAgICogVGhlICdjb21ib2JveCcgaW5wdXQgZWxlbWVudFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fdHJpZ2dlckVsZW1lbnQ7XG4gIH1cblxuICAvKiogR2V0cyBhbGwgdGhlIFNiYk9wdGlvbkVsZW1lbnQgcHJvamVjdGVkIGluIHRoZSBzZWxlY3QuICovXG4gIHByaXZhdGUgZ2V0IF9vcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1vcHRpb24nKSA/PyBbXSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfZmlsdGVyZWRPcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuZmlsdGVyKFxuICAgICAgKG9wdDogU2JiT3B0aW9uRWxlbWVudCkgPT4gIW9wdC5kaXNhYmxlZCAmJiAhb3B0Lmhhc0F0dHJpYnV0ZSgnZGF0YS1ncm91cC1kaXNhYmxlZCcpLFxuICAgICk7XG4gIH1cblxuICAvKiogT3BlbnMgdGhlIHNlbGVjdGlvbiBwYW5lbC4gKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdjbG9zZWQnIHx8ICF0aGlzLl9vdmVybGF5IHx8IHRoaXMuX29wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLndpbGxPcGVuLmVtaXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpO1xuICB9XG5cbiAgLyoqIENsb3NlcyB0aGUgc2VsZWN0aW9uIHBhbmVsLiAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLndpbGxDbG9zZS5lbWl0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zaW5nJztcbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLmFib3J0KCk7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgY3VycmVudCBkaXNwbGF5ZWQgdmFsdWUuICovXG4gIHB1YmxpYyBnZXREaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gIXRoaXMuX2Rpc3BsYXlWYWx1ZSA/ICcnIDogdGhpcy5fZGlzcGxheVZhbHVlO1xuICB9XG5cbiAgLyoqIExpc3RlbnMgdG8gb3B0aW9uIGNoYW5nZXMuICovXG4gIHByaXZhdGUgX29uT3B0aW9uQ2hhbmdlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiT3B0aW9uRWxlbWVudDtcbiAgICBpZiAodGFyZ2V0LnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLl9vbk9wdGlvblNlbGVjdGVkKHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29uT3B0aW9uRGVzZWxlY3RlZCh0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29uT3B0aW9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiU2VsZWN0RWxlbWVudCB8IFNiYk9wdGlvbkVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldC5sb2NhbE5hbWUgIT09ICdzYmItb3B0aW9uJyB8fCB0YXJnZXQuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKiogU2V0cyB0aGUgX2Rpc3BsYXlWYWx1ZSBieSBjaGVja2luZyB0aGUgaW50ZXJuYWwgc2JiLW9wdGlvbnMgYW5kIHNldHRpbmcgdGhlIGNvcnJlY3QgYHNlbGVjdGVkYCB2YWx1ZSBvbiB0aGVtLiAqL1xuICBwcml2YXRlIF9vblZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZmlsdGVyZWRPcHRpb25zO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbkVsZW1lbnQgPSBvcHRpb25zLmZpbmQoKG8pID0+IChvLnZhbHVlID8/IG8uZ2V0QXR0cmlidXRlKCd2YWx1ZScpKSA9PT0gbmV3VmFsdWUpO1xuICAgICAgaWYgKG9wdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgb3B0aW9uRWxlbWVudC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBvcHRpb25zXG4gICAgICAgIC5maWx0ZXIoKG8pID0+IChvLnZhbHVlID8/IG8uZ2V0QXR0cmlidXRlKCd2YWx1ZScpKSAhPT0gbmV3VmFsdWUpXG4gICAgICAgIC5mb3JFYWNoKChvKSA9PiAoby5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSBvcHRpb25FbGVtZW50Py50ZXh0Q29udGVudCB8fCBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zXG4gICAgICAgIC5maWx0ZXIoKG8pID0+ICFuZXdWYWx1ZS5pbmNsdWRlcyhvLnZhbHVlID8/IG8uZ2V0QXR0cmlidXRlKCd2YWx1ZScpKSlcbiAgICAgICAgLmZvckVhY2goKGUpID0+IChlLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uRWxlbWVudHMgPSBvcHRpb25zLmZpbHRlcigobykgPT5cbiAgICAgICAgbmV3VmFsdWUuaW5jbHVkZXMoby52YWx1ZSA/PyBvLmdldEF0dHJpYnV0ZSgndmFsdWUnKSksXG4gICAgICApO1xuICAgICAgc2VsZWN0ZWRPcHRpb25FbGVtZW50cy5mb3JFYWNoKChvKSA9PiAoby5zZWxlY3RlZCA9IHRydWUpKTtcbiAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IHNlbGVjdGVkT3B0aW9uRWxlbWVudHMubWFwKChvKSA9PiBvLnRleHRDb250ZW50KS5qb2luKCcsICcpIHx8IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX3N0YXRlQ2hhbmdlLmVtaXQoeyB0eXBlOiAndmFsdWUnLCB2YWx1ZTogbmV3VmFsdWUgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCBmb2N1cyBiZWhhdmlvclxuICAgIHRoaXMuZm9jdXMgPSAoKSA9PiB0aGlzLl90cmlnZ2VyRWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMuYmx1ciA9ICgpID0+IHRoaXMuX3RyaWdnZXJFbGVtZW50LmJsdXIoKTtcblxuICAgIC8vIFdhaXQgZm9yIHNzciBoeWRyYXRpb25cbiAgICBpZiAoIWlzTmV4dGpzKCkpIHtcbiAgICAgIHRoaXMuc3RhcnRVcGRhdGUoKTtcbiAgICAgIHRoaXMuX3NldHVwU2VsZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgZWxlbWVudCdzIGZpcnN0IGF0dHJpYnV0ZSB3aG9zZSBxdWFsaWZpZWQgbmFtZSBpcyBxdWFsaWZpZWROYW1lLlxuICAgKlxuICAgKiBbTUROIFJlZmVyZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0VsZW1lbnQvcmVtb3ZlQXR0cmlidXRlKVxuICAgKiBAaW50ZXJuYWwgV2UgbmVlZCB0byBvdmVycmlkZSB0aGlzIGR1ZSB0byBhIGh5ZHJhdGlvbiBpc3N1ZSB3aXRoIE5leHQuanMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQXR0cmlidXRlKHF1YWxpZmllZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEluIE5leHQuanMgdGhlIGh5ZHJhdGlvbiBuZWVkcyB0byBmaW5pc2ggYmVmb3JlIHdlIGNhbiBtYW5pcHVsYXRlIHRoZSBsaWdodCBET00uXG4gICAgLy8gQGxpdC9yZWFjdCBjYWxscyByZW1vdmVBdHRyaWJ1dGUoJ2RlZmVyLWh5ZHJhdGlvbicpIGluIGEgdXNlTGF5b3V0RWZmZWN0LFxuICAgIC8vIHdoaWNoIGlzIGRvbmUgYWZ0ZXIgaHlkcmF0aW9uIGlzIGZpbmlzaGVkLiBEdWUgdG8gdGhpcyB3ZSBpbnRlcmNlcHQgdGhpcyBjYWxsXG4gICAgLy8gaW4gb3ZlcnJpZGluZyByZW1vdmVBdHRyaWJ1dGUgdG8gZmluaXNoIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzYmItc2VsZWN0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9saXQvbGl0L2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC9zcmMvY3JlYXRlLWNvbXBvbmVudC50cyNMMjkzLUwyOTZcbiAgICAvLyBXZSBhbHNvIG5lZWQgdG8gd2FpdCBmb3IgdXBkYXRlIGNvbXBsZXRlIGluIG9yZGVyIHRvIGJlIHN1cmUgdGhhdCB0aGUgc2hhZG93IERPTSBoYXMgYmVlbiByZW5kZXJlZC5cbiAgICBpZiAoaXNOZXh0anMoKSAmJiBxdWFsaWZpZWROYW1lID09PSAnZGVmZXItaHlkcmF0aW9uJyAmJiAhdGhpcy5fZGlkTG9hZCkge1xuICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuX3NldHVwU2VsZWN0KCkpO1xuICAgIH1cbiAgICBzdXBlci5yZW1vdmVBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGlmIChhcmlhUm9sZU9uSG9zdCkge1xuICAgICAgdGhpcy5pZCB8fD0gdGhpcy5fb3ZlcmxheUlkO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuX2Fib3J0LnNpZ25hbDtcbiAgICBjb25zdCBmb3JtRmllbGQgPSB0aGlzLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKSA/PyB0aGlzLmNsb3Nlc3Q/LignW2RhdGEtZm9ybS1maWVsZF0nKTtcblxuICAgIGlmIChmb3JtRmllbGQpIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSBmb3JtRmllbGQuaGFzQXR0cmlidXRlKCduZWdhdGl2ZScpO1xuICAgIH1cbiAgICB0aGlzLl9zeW5jUHJvcGVydGllcygpO1xuXG4gICAgaWYgKHRoaXMuX2RpZExvYWQpIHtcbiAgICAgIHRoaXMuX3NldHVwT3JpZ2luKCk7XG4gICAgICB0aGlzLl9zZXR1cFRyaWdnZXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMuX29uVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdvcHRpb25TZWxlY3Rpb25DaGFuZ2UnLFxuICAgICAgKGU6IEN1c3RvbUV2ZW50PHZvaWQ+KSA9PiB0aGlzLl9vbk9wdGlvbkNoYW5nZWQoZSksXG4gICAgICB7IHNpZ25hbCB9LFxuICAgICk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuX29uT3B0aW9uQ2xpY2soZSk7XG4gICAgICAgIHRoaXMuX3RvZ2dsZU9wZW5pbmcoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbCB9LFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3ZhbHVlJykpIHtcbiAgICAgIHRoaXMuX29uVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUhKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbmVnYXRpdmUnKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ211bHRpcGxlJykpIHtcbiAgICAgIHRoaXMuX3N5bmNQcm9wZXJ0aWVzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5wcmVwZW5kKHRoaXMuX3RyaWdnZXJFbGVtZW50KTsgLy8gVGFrZSBiYWNrIHRoZSB0cmlnZ2VyIGVsZW1lbnQgcHJldmlvdXNseSBtb3ZlZCB0byB0aGUgbGlnaHQgRE9NXG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItZGl2aWRlcicpLmZvckVhY2goKGVsZW1lbnQpID0+IChlbGVtZW50Lm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZSkpO1xuXG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiT3B0aW9uRWxlbWVudCB8IFNiYk9wdEdyb3VwRWxlbWVudD4oXG4gICAgICAnc2JiLW9wdGlvbiwgc2JiLW9wdGdyb3VwJyxcbiAgICApLmZvckVhY2goKGVsZW1lbnQ6IFNiYk9wdGlvbkVsZW1lbnQgfCBTYmJPcHRHcm91cEVsZW1lbnQpID0+IHtcbiAgICAgIGVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCdkYXRhLW5lZ2F0aXZlJywgdGhpcy5uZWdhdGl2ZSk7XG4gICAgICBlbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1tdWx0aXBsZScsIHRoaXMubXVsdGlwbGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBTZWxlY3QoKTogdm9pZCB7XG4gICAgdGhpcy5fc2V0dXBPcmlnaW4oKTtcbiAgICB0aGlzLl9zZXR1cFRyaWdnZXIoKTtcbiAgICB0aGlzLl9kaWRMb2FkID0gdHJ1ZTtcbiAgICB0aGlzLmNvbXBsZXRlVXBkYXRlKCk7XG4gIH1cblxuICAvKiogU2V0cyB0aGUgb3JpZ2luRWxlbWVudDsgaWYgdGhlIGNvbXBvbmVudCBpcyB1c2VkIGluIGEgc2JiLWZvcm0tZmllbGQgdXNlcyBpdCwgb3RoZXJ3aXNlIHVzZXMgdGhlIHBhcmVudEVsZW1lbnQuICovXG4gIHByaXZhdGUgX3NldHVwT3JpZ2luKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1GaWVsZCA9IHRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpO1xuICAgIHRoaXMuX29yaWdpbkVsZW1lbnQgPVxuICAgICAgZm9ybUZpZWxkPy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPy4oJyNvdmVybGF5LWFuY2hvcicpID8/IHRoaXMucGFyZW50RWxlbWVudCE7XG4gICAgaWYgKHRoaXMuX29yaWdpbkVsZW1lbnQpIHtcbiAgICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKFxuICAgICAgICAnZGF0YS1vcHRpb24tcGFuZWwtb3JpZ2luLWJvcmRlcmxlc3MnLFxuICAgICAgICAhIWZvcm1GaWVsZD8uaGFzQXR0cmlidXRlPy4oJ2JvcmRlcmxlc3MnKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvIGFzc2VzcyBzY3JlZW4tcmVhZGVycyBwcm9ibGVtcyBjYXVzZWQgYnkgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYXJpYSBwYXR0ZXJucyBhbmQgc2hhZG93IERPTSxcbiAgICogd2UgYXJlIGZvcmNlZCB0byBtb3ZlIHRoZSAnY29tYm9ib3gnIHRyaWdnZXIgZWxlbWVudCB0byB0aGUgbGlnaHQgRE9NXG4gICAqL1xuICBwcml2YXRlIF9zZXR1cFRyaWdnZXIoKTogdm9pZCB7XG4gICAgLy8gTW92ZSB0aGUgdHJpZ2dlciBiZWZvcmUgdGhlIHNiYi1zZWxlY3RcbiAgICB0aGlzLnBhcmVudEVsZW1lbnQhLmluc2VydEJlZm9yZT8uKHRoaXMuX3RyaWdnZXJFbGVtZW50LCB0aGlzKTtcblxuICAgIC8vIFNldCB0aGUgaW52aXNpYmxlIHRyaWdnZXIgZWxlbWVudCBkaW1lbnNpb24gdG8gbWF0Y2ggdGhlIHBhcmVudCAobmVlZGVkIGZvciBzY3JlZW4gcmVhZGVycylcbiAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gdGhpcy5jbG9zZXN0Py4oJ3NiYi1mb3JtLWZpZWxkJykgPz8gdGhpcztcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zdHlsZS50b3AgPSAnMHB4JztcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtjb250YWluZXJFbGVtZW50Lm9mZnNldEhlaWdodH1weGA7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtjb250YWluZXJFbGVtZW50Lm9mZnNldFdpZHRofXB4YDtcbiAgfVxuXG4gIHByaXZhdGUgX3NldE92ZXJsYXlQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBzZXRPdmVybGF5UG9zaXRpb24oXG4gICAgICB0aGlzLl9vdmVybGF5LFxuICAgICAgdGhpcy5fb3JpZ2luRWxlbWVudCxcbiAgICAgIHRoaXMuX29wdGlvbkNvbnRhaW5lcixcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignLnNiYi1zZWxlY3RfX2NvbnRhaW5lcicpISxcbiAgICAgIHRoaXMsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEluIHJhcmUgY2FzZXMgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gIC8vIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgcHJpdmF0ZSBfb25BbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdvcGVuJyAmJiB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX29uT3BlbkFuaW1hdGlvbkVuZCgpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuX29uQ2xvc2VBbmltYXRpb25FbmQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vbk9wZW5BbmltYXRpb25FbmQoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuZWQnO1xuICAgIHRoaXMuX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG5cbiAgICB0aGlzLmRpZE9wZW4uZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25DbG9zZUFuaW1hdGlvbkVuZCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgdGhpcy5fcmVzZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgdGhpcy5fb3B0aW9uQ29udGFpbmVyLnNjcm9sbFRvcCA9IDA7XG4gICAgdGhpcy5kaWRDbG9zZS5lbWl0KCk7XG4gIH1cblxuICAvKiogV2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQsIHVwZGF0ZXMgdGhlIGRpc3BsYXlWYWx1ZTsgaXQgYWxzbyBjbG9zZXMgdGhlIHNlbGVjdCBpZiBub3QgYG11bHRpcGxlYC4gKi9cbiAgcHJpdmF0ZSBfb25PcHRpb25TZWxlY3RlZChvcHRpb25TZWxlY3Rpb25DaGFuZ2U6IFNiYk9wdGlvbkVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX2ZpbHRlcmVkT3B0aW9uc1xuICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5pZCAhPT0gb3B0aW9uU2VsZWN0aW9uQ2hhbmdlLmlkKVxuICAgICAgICAuZm9yRWFjaCgob3B0aW9uKSA9PiAob3B0aW9uLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25TZWxlY3Rpb25DaGFuZ2UudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gW29wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSFdO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy52YWx1ZS5pbmNsdWRlcyhvcHRpb25TZWxlY3Rpb25DaGFuZ2UudmFsdWUhKSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIG9wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2lucHV0LmVtaXQoKTtcbiAgICB0aGlzLl9jaGFuZ2UuZW1pdCgpO1xuICAgIHRoaXMuX2RpZENoYW5nZS5lbWl0KCk7XG4gIH1cblxuICAvKiogV2hlbiBhbiBvcHRpb24gaXMgdW5zZWxlY3RlZCBpbiBgbXVsdGlwbGVgLCByZW1vdmVzIGl0IGZyb20gdmFsdWUgYW5kIHVwZGF0ZXMgZGlzcGxheVZhbHVlLiAqL1xuICBwcml2YXRlIF9vbk9wdGlvbkRlc2VsZWN0ZWQob3B0aW9uU2VsZWN0aW9uQ2hhbmdlOiBTYmJPcHRpb25FbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAodGhpcy52YWx1ZSBhcyBzdHJpbmdbXSkuZmlsdGVyKFxuICAgICAgICAoZWw6IHN0cmluZykgPT4gZWwgIT09IG9wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuX2lucHV0LmVtaXQoKTtcbiAgICAgIHRoaXMuX2NoYW5nZS5lbWl0KCk7XG4gICAgICB0aGlzLl9kaWRDaGFuZ2UuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgLy8gUmVjYWxjdWxhdGUgdGhlIG92ZXJsYXkgcG9zaXRpb24gb24gc2Nyb2xsIGFuZCB3aW5kb3cgcmVzaXplXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4gdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBtZW51IG9uIGJhY2tkcm9wIGNsaWNrXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGV2KSA9PiB0aGlzLl9wb2ludGVyRG93bkxpc3RlbmVyKGV2KSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgKGV2KSA9PiB0aGlzLl9jbG9zZU9uQmFja2Ryb3BDbGljayhldiksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9vbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuZWQnKSB7XG4gICAgICBhd2FpdCB0aGlzLl9vcGVuZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2Nsb3NlZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfY2xvc2VkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2NoZWNrRm9yTGV0dGVyU2VsZWN0aW9uKGV2ZW50KSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb25CeVRleHQoZXZlbnQpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vcGVuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX29wZW5lZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkgfHwgdGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hlY2tGb3JMZXR0ZXJTZWxlY3Rpb24oZXZlbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBhd2FpdCB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fc2VsZWN0QnlLZXlib2FyZCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgMCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCB0aGlzLl9maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRm9yTGV0dGVyU2VsZWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgfHxcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0NsZWFyJyB8fFxuICAgICAgKGV2ZW50LmtleS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgZXZlbnQua2V5ICE9PSAnICcgJiZcbiAgICAgICAgIWV2ZW50LmFsdEtleSAmJlxuICAgICAgICAhZXZlbnQuY3RybEtleSAmJlxuICAgICAgICAhZXZlbnQubWV0YUtleSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudDogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFNldCB0aW1lb3V0IGFuZCB0aGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAgICBpZiAodHlwZW9mIHRoaXMuX3NlYXJjaFRpbWVvdXQgPT09IHR5cGVvZiBzZXRUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2VhcmNoVGltZW91dCk7XG4gICAgfVxuICAgIHRoaXMuX3NlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLl9zZWFyY2hTdHJpbmcgPSAnJyksIDEwMDApO1xuICAgIHRoaXMuX3NlYXJjaFN0cmluZyArPSBldmVudC5rZXk7XG5cbiAgICAvLyBSZW9yZGVyIHRoZSBfZmlsdGVyZWRPcHRpb24gYXJyYXkgdG8gaGF2ZSB0aGUgbGFzdCBzZWxlY3RlZCBlbGVtZW50IGF0IHRoZSBib3R0b20uXG4gICAgY29uc3QgaW5kZXhGb3JTbGljZTogbnVtYmVyID0gdGhpcy5fYWN0aXZlSXRlbUluZGV4ICsgMTtcbiAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQ6IFNiYk9wdGlvbkVsZW1lbnRbXSA9IFtcbiAgICAgIC4uLnRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5zbGljZShpbmRleEZvclNsaWNlKSxcbiAgICAgIC4uLnRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5zbGljZSgwLCBpbmRleEZvclNsaWNlKSxcbiAgICBdO1xuXG4gICAgY29uc3QgbWF0Y2ggPSBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQuZmluZChcbiAgICAgIChvcHRpb246IFNiYk9wdGlvbkVsZW1lbnQpID0+XG4gICAgICAgIG9wdGlvbi50ZXh0Q29udGVudD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX3NlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSA9PT0gMCxcbiAgICApO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgLy8gSWYgYW4gZXhhY3QgbWF0Y2ggaGFzIGJlZW4gZm91bmQsIGdvIHRvIHRoYXQgb3B0aW9uLlxuICAgICAgYXdhaXQgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgdGhpcy5fZmlsdGVyZWRPcHRpb25zLmluZGV4T2YobWF0Y2gpKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nLmxlbmd0aCA+IDEgJiZcbiAgICAgIG5ldyBSZWdFeHAoYF4ke3RoaXMuX3NlYXJjaFN0cmluZy5jaGFyQXQoMCl9KiRgKS50ZXN0KHRoaXMuX3NlYXJjaFN0cmluZylcbiAgICApIHtcbiAgICAgIC8vIElmIG5vIGV4YWN0IG1hdGNoIGhhcyBiZWVuIGZvdW5kIGJ1dCB0aGUgc3RyaW5nIHRvIHNlYXJjaCBpcyBtYWRlIGJ5IHRoZSBzYW1lIHJlcGVhdGVkIGxldHRlcixcbiAgICAgIC8vIGdvIHRvIHRoZSBmaXJzdCBlbGVtZW50LCBpZiBleGlzdHMsIHRoYXQgbWF0Y2hlcyB0aGUgbGV0dGVyLlxuICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpbHRlcmVkT3B0aW9uc1NvcnRlZC5maW5kKFxuICAgICAgICAob3B0aW9uOiBTYmJPcHRpb25FbGVtZW50KSA9PlxuICAgICAgICAgIG9wdGlvbi50ZXh0Q29udGVudD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX3NlYXJjaFN0cmluZ1swXS50b0xvd2VyQ2FzZSgpKSA9PT0gMCxcbiAgICAgICk7XG4gICAgICBpZiAoZmlyc3RNYXRjaCkge1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCB0aGlzLl9maWx0ZXJlZE9wdGlvbnMuaW5kZXhPZihmaXJzdE1hdGNoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIG1hdGNoIGZvdW5kLCBjbGVhciB0aGUgdGltZW91dCBhbmQgdGhlIHNlYXJjaCB0ZXJtLlxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NlYXJjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfc2VsZWN0QnlLZXlib2FyZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQgPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICBhd2FpdCBhY3RpdmVPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24oIWFjdGl2ZU9wdGlvbi5zZWxlY3RlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleD86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5leHRJbmRleCA9XG4gICAgICBpbmRleCA/PyBnZXROZXh0RWxlbWVudEluZGV4KGV2ZW50LCB0aGlzLl9hY3RpdmVJdGVtSW5kZXgsIHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpO1xuICAgIGNvbnN0IG5leHRPcHRpb24gPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbbmV4dEluZGV4XTtcbiAgICBjb25zdCBhY3RpdmVPcHRpb24gPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIHRoaXMuX3NldEFjdGl2ZUVsZW1lbnQobmV4dE9wdGlvbiwgYWN0aXZlT3B0aW9uKTtcblxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgYXdhaXQgdGhpcy5fc2V0U2VsZWN0ZWRFbGVtZW50KG5leHRPcHRpb24sIGFjdGl2ZU9wdGlvbik7XG4gICAgfSBlbHNlIGlmIChldmVudD8uc2hpZnRLZXkpIHtcbiAgICAgIGF3YWl0IG5leHRPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24oIW5leHRPcHRpb24uc2VsZWN0ZWQpO1xuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSBuZXh0SW5kZXg7XG4gIH1cblxuICBwcml2YXRlIF9zZXRBY3RpdmVFbGVtZW50KFxuICAgIG5leHRBY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQsXG4gICAgbGFzdEFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uRWxlbWVudCB8IG51bGwgPSBudWxsLFxuICAgIHNldEFjdGl2ZURlc2NlbmRhbnQgPSB0cnVlLFxuICApOiB2b2lkIHtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLmFjdGl2ZSA9IHRydWU7XG4gICAgbmV4dEFjdGl2ZU9wdGlvbi5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcgfSk7XG5cbiAgICBpZiAoc2V0QWN0aXZlRGVzY2VuZGFudCkge1xuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBuZXh0QWN0aXZlT3B0aW9uLmlkKTtcbiAgICB9XG5cbiAgICAvLyBSZXNldCB0aGUgcHJldmlvdXNcbiAgICBpZiAobGFzdEFjdGl2ZU9wdGlvbiAmJiBsYXN0QWN0aXZlT3B0aW9uICE9PSBuZXh0QWN0aXZlT3B0aW9uKSB7XG4gICAgICBsYXN0QWN0aXZlT3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3NldFNlbGVjdGVkRWxlbWVudChcbiAgICBuZXh0QWN0aXZlT3B0aW9uOiBTYmJPcHRpb25FbGVtZW50LFxuICAgIGxhc3RBY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG5leHRBY3RpdmVPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24odHJ1ZSk7XG5cbiAgICBpZiAobGFzdEFjdGl2ZU9wdGlvbiAmJiBsYXN0QWN0aXZlT3B0aW9uICE9PSBuZXh0QWN0aXZlT3B0aW9uKSB7XG4gICAgICBhd2FpdCBsYXN0QWN0aXZlT3B0aW9uLnNldFNlbGVjdGVkVmlhVXNlckludGVyYWN0aW9uKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZXNldEFjdGl2ZUVsZW1lbnQoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9uc1t0aGlzLl9hY3RpdmVJdGVtSW5kZXhdO1xuXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQuYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcG9pbnRlcmRvd24gZXZlbnQgdGFyZ2V0IGlzIHRyaWdnZXJlZCBvbiB0aGUgbWVudS5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ID0gaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCk7XG4gIH07XG5cbiAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGljay5cbiAgcHJpdmF0ZSBfY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSBhc3luYyAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICghdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ICYmICFpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9zZXRWYWx1ZUZyb21TZWxlY3RlZE9wdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5fZmlsdGVyZWRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKTtcbiAgICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbiA9PT0gc2VsZWN0ZWRPcHRpb24sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBzZWxlY3RlZE9wdGlvbi52YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKTtcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB2YWx1ZTogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIHZhbHVlLnB1c2gob3B0aW9uLnZhbHVlISk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RvZ2dsZU9wZW5pbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uZm9jdXMoKTtcblxuICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgY2FzZSAnb3BlbmVkJzoge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY2xvc2VkJzoge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDwhLS0gVGhpcyBlbGVtZW50IGlzIHZpc3VhbGx5IGhpZGRlbiBhbmQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgbGlnaHQgRE9NIHRvIGFsbG93IHNjcmVlblxuICAgICAgcmVhZGVycyB0byB3b3JrIHByb3Blcmx5IC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIlxuICAgICAgICB0YWJpbmRleD0ke3RoaXMuZGlzYWJsZWQgPyBub3RoaW5nIDogJzAnfVxuICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkLnRvU3RyaW5nKCl9XG4gICAgICAgIGFyaWEtY29udHJvbHM9JHt0aGlzLl9vdmVybGF5SWR9XG4gICAgICAgIGFyaWEtb3ducz0ke3RoaXMuX292ZXJsYXlJZH1cbiAgICAgICAgQGtleWRvd249JHt0aGlzLl9vbktleURvd259XG4gICAgICAgIEBjbGljaz0ke3RoaXMuX3RvZ2dsZU9wZW5pbmd9XG4gICAgICAgICR7cmVmKChyZWYpID0+ICh0aGlzLl90cmlnZ2VyRWxlbWVudCA9IHJlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgPlxuICAgICAgICAke3RoaXMuX2Rpc3BsYXlWYWx1ZSA/IGh0bWxgJHt0aGlzLl9kaXNwbGF5VmFsdWV9YCA6IGh0bWxgPHNwYW4+JHt0aGlzLnBsYWNlaG9sZGVyfTwvc3Bhbj5gfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gVmlzdWFsbHkgZGlzcGxheSB0aGUgdmFsdWUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fdHJpZ2dlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAke3RoaXMuX2Rpc3BsYXlWYWx1ZVxuICAgICAgICAgID8gaHRtbGAke3RoaXMuX2Rpc3BsYXlWYWx1ZX1gXG4gICAgICAgICAgOiBodG1sYDxzcGFuIGNsYXNzPVwic2JiLXNlbGVjdF9fdHJpZ2dlci0tcGxhY2Vob2xkZXJcIj4ke3RoaXMucGxhY2Vob2xkZXJ9PC9zcGFuPmB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX2dhcC1maXhcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X19jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX2dhcC1maXhcIj4ke292ZXJsYXlHYXBGaXhDb3JuZXJzKCl9PC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBAYW5pbWF0aW9uZW5kPSR7dGhpcy5fb25BbmltYXRpb25FbmR9XG4gICAgICAgICAgY2xhc3M9XCJzYmItc2VsZWN0X19wYW5lbFwiXG4gICAgICAgICAgJHtyZWYoKGRpYWxvZ1JlZikgPT4gKHRoaXMuX292ZXJsYXkgPSBkaWFsb2dSZWYgYXMgSFRNTEVsZW1lbnQpKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X193cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGlkPSR7IWFyaWFSb2xlT25Ib3N0ID8gdGhpcy5fb3ZlcmxheUlkIDogbm90aGluZ31cbiAgICAgICAgICAgICAgY2xhc3M9XCJzYmItc2VsZWN0X19vcHRpb25zXCJcbiAgICAgICAgICAgICAgcm9sZT0keyFhcmlhUm9sZU9uSG9zdCA/ICdsaXN0Ym94JyA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgID9hcmlhLW11bHRpc2VsZWN0YWJsZT0ke3RoaXMubXVsdGlwbGV9XG4gICAgICAgICAgICAgICR7cmVmKChjb250YWluZXJSZWYpID0+ICh0aGlzLl9vcHRpb25Db250YWluZXIgPSBjb250YWluZXJSZWYgYXMgSFRNTEVsZW1lbnQpKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl9zZXRWYWx1ZUZyb21TZWxlY3RlZE9wdGlvbn0+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXNlbGVjdCc6IFNiYlNlbGVjdEVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJyZWYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
899
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2VsZWN0L3NlbGVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBQcm9wZXJ0eVZhbHVlcywgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaHRtbCwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4IH0gZnJvbSAnLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vY29yZS9iYXNlLWVsZW1lbnRzLmpzJztcbmltcG9ydCB7IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlciB9IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgaG9zdEF0dHJpYnV0ZXMgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnRXcml0aW5nTW9kZSwgaXNOZXh0anMsIGlzU2FmYXJpIH0gZnJvbSAnLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQgeyBTYmJEaXNhYmxlZE1peGluLCBTYmJOZWdhdGl2ZU1peGluLCBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpbiB9IGZyb20gJy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7IGlzRXZlbnRPbkVsZW1lbnQsIG92ZXJsYXlHYXBGaXhDb3JuZXJzLCBzZXRPdmVybGF5UG9zaXRpb24gfSBmcm9tICcuLi9jb3JlL292ZXJsYXkuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPcHRHcm91cEVsZW1lbnQsIFNiYk9wdGlvbkVsZW1lbnQgfSBmcm9tICcuLi9vcHRpb24uanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zZWxlY3Quc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBPbiBTYWZhcmksIHRoZSBhcmlhIHJvbGUgJ2xpc3Rib3gnIG11c3QgYmUgb24gdGhlIGhvc3QgZWxlbWVudCwgb3IgZWxzZSBWb2ljZU92ZXIgd29uJ3Qgd29yayBhdCBhbGwuXG4gKiBPbiB0aGUgb3RoZXIgaGFuZCwgSkFXUyBhbmQgTlZEQSBuZWVkIHRoZSByb2xlIHRvIGJlIGFuIFwiaW1tZWRpYXRlIHBhcmVudFwiIHRvIHRoZSBvcHRpb25zLCBvciBlbHNlIG9wdGdyb3VwcyB3b24ndCB3b3JrLlxuICovXG5jb25zdCBhcmlhUm9sZU9uSG9zdCA9IGlzU2FmYXJpO1xuXG5sZXQgbmV4dElkID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RDaGFuZ2Uge1xuICB0eXBlOiAndmFsdWUnO1xuICB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYSBwYW5lbCB3aXRoIHNlbGVjdGFibGUgb3B0aW9ucy5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBvcHRpb25zLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkQ2hhbmdlIC0gRGVwcmVjYXRlZC4gdXNlZCBmb3IgUmVhY3QuIFdpbGwgcHJvYmFibHkgYmUgcmVtb3ZlZCBvbmNlIFJlYWN0IDE5IGlzIGF2YWlsYWJsZS5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGNoYW5nZSAtIE5vdGlmaWVzIHRoYXQgdGhlIGNvbXBvbmVudCdzIHZhbHVlIGhhcyBjaGFuZ2VkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gaW5wdXQgLSBOb3RpZmllcyB0aGF0IGFuIG9wdGlvbiB2YWx1ZSBoYXMgYmVlbiBzZWxlY3RlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IHdpbGxPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItc2VsZWN0YCBzdGFydHMgdGhlIG9wZW5pbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXNlbGVjdGAgaXMgb3BlbmVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItc2VsZWN0YCBiZWdpbnMgdGhlIGNsb3NpbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1zZWxlY3RgIGlzIGNsb3NlZC5cbiAqIEBjc3Nwcm9wIFstLXNiYi1zZWxlY3Qtei1pbmRleD12YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpXSAtIFRvIHNwZWNpZnkgYSBjdXN0b20gc3RhY2sgb3JkZXIsXG4gKiB0aGUgYHotaW5kZXhgIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nIHRoaXMgQ1NTIHZhcmlhYmxlLiBUaGUgZGVmYXVsdCBgei1pbmRleGAgb2YgdGhlXG4gKiBjb21wb25lbnQgaXMgc2V0IHRvIGB2YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpYCB3aXRoIGEgdmFsdWUgb2YgYDEwMDBgLlxuICovXG5AY3VzdG9tRWxlbWVudCgnc2JiLXNlbGVjdCcpXG5AaG9zdEF0dHJpYnV0ZXMoe1xuICBkaXI6IGdldERvY3VtZW50V3JpdGluZ01vZGUoKSxcbiAgcm9sZTogYXJpYVJvbGVPbkhvc3QgPyAnbGlzdGJveCcgOiBudWxsLFxufSlcbmV4cG9ydCBjbGFzcyBTYmJTZWxlY3RFbGVtZW50IGV4dGVuZHMgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4oXG4gIFNiYkRpc2FibGVkTWl4aW4oU2JiTmVnYXRpdmVNaXhpbihTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCkpLFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuXG4gIC8vIEZJWE1FIHVzaW5nIC4uLnN1cGVyLmV2ZW50cyByZXF1aXJlczogaHR0cHM6Ly9naXRodWIuY29tL3NiYi1kZXNpZ24tc3lzdGVtcy9seW5lLWNvbXBvbmVudHMvaXNzdWVzLzI2MDBcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBldmVudHMgPSB7XG4gICAgZGlkQ2hhbmdlOiAnZGlkQ2hhbmdlJyxcbiAgICBjaGFuZ2U6ICdjaGFuZ2UnLFxuICAgIGlucHV0OiAnaW5wdXQnLFxuICAgIHN0YXRlQ2hhbmdlOiAnc3RhdGVDaGFuZ2UnLFxuICAgIHdpbGxPcGVuOiAnd2lsbE9wZW4nLFxuICAgIGRpZE9wZW46ICdkaWRPcGVuJyxcbiAgICB3aWxsQ2xvc2U6ICd3aWxsQ2xvc2UnLFxuICAgIGRpZENsb3NlOiAnZGlkQ2xvc2UnLFxuICB9IGFzIGNvbnN0O1xuXG4gIC8qKiBUaGUgdmFsdWUgb2YgdGhlIHNlbGVjdCBjb21wb25lbnQuIElmIGBtdWx0aXBsZWAgaXMgdHJ1ZSwgaXQncyBhbiBhcnJheS4gKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIHZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqIFRoZSBwbGFjZWhvbGRlciB1c2VkIGlmIG5vIHZhbHVlIGhhcyBiZWVuIHNlbGVjdGVkLiAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHNlbGVjdCBhbGxvd3MgZm9yIG11bHRpcGxlIHNlbGVjdGlvbi4gKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgbXVsdGlwbGUgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgc2VsZWN0IGlzIHJlcXVpcmVkLiAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3QgaXMgcmVhZG9ubHkuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgLyoqIFRoZSB2YWx1ZSBkaXNwbGF5ZWQgYnkgdGhlIGNvbXBvbmVudC4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBfZGlzcGxheVZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgb25seSB1c2VkIGZvciBSZWFjdC4gV2lsbCBwcm9iYWJseSBiZSByZW1vdmVkIG9uY2UgUmVhY3QgMTkgaXMgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBfZGlkQ2hhbmdlOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYlNlbGVjdEVsZW1lbnQuZXZlbnRzLmRpZENoYW5nZSk7XG5cbiAgLyoqIE5vdGlmaWVzIHRoYXQgdGhlIGNvbXBvbmVudCdzIHZhbHVlIGhhcyBjaGFuZ2VkLiAqL1xuICBwcml2YXRlIF9jaGFuZ2U6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIodGhpcywgU2JiU2VsZWN0RWxlbWVudC5ldmVudHMuY2hhbmdlKTtcblxuICAvKiogTm90aWZpZXMgdGhhdCBhbiBvcHRpb24gdmFsdWUgaGFzIGJlZW4gc2VsZWN0ZWQuICovXG4gIHByaXZhdGUgX2lucHV0OiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYlNlbGVjdEVsZW1lbnQuZXZlbnRzLmlucHV0KTtcblxuICAvKiogQGludGVybmFsICovXG4gIHByaXZhdGUgX3N0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8U2VsZWN0Q2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJTZWxlY3RFbGVtZW50LmV2ZW50cy5zdGF0ZUNoYW5nZSxcbiAgICB7XG4gICAgICBjb21wb3NlZDogZmFsc2UsXG4gICAgfSxcbiAgKTtcblxuICBwcml2YXRlIF9vdmVybGF5ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX29wdGlvbkNvbnRhaW5lciE6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9vcmlnaW5FbGVtZW50ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3RyaWdnZXJFbGVtZW50ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX292ZXJsYXlJZCA9IGBzYmItc2VsZWN0LSR7KytuZXh0SWR9YDtcbiAgcHJpdmF0ZSBfYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gIHByaXZhdGUgX3NlYXJjaFRpbWVvdXQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgcHJpdmF0ZSBfc2VhcmNoU3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2RpZExvYWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNQb2ludGVyRG93bkV2ZW50T25NZW51OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2Fib3J0ID0gbmV3IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlcih0aGlzKTtcblxuICAvKipcbiAgICogVGhlICdjb21ib2JveCcgaW5wdXQgZWxlbWVudFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fdHJpZ2dlckVsZW1lbnQ7XG4gIH1cblxuICAvKiogR2V0cyBhbGwgdGhlIFNiYk9wdGlvbkVsZW1lbnQgcHJvamVjdGVkIGluIHRoZSBzZWxlY3QuICovXG4gIHByaXZhdGUgZ2V0IF9vcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1vcHRpb24nKSA/PyBbXSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfZmlsdGVyZWRPcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuZmlsdGVyKFxuICAgICAgKG9wdDogU2JiT3B0aW9uRWxlbWVudCkgPT4gIW9wdC5kaXNhYmxlZCAmJiAhb3B0Lmhhc0F0dHJpYnV0ZSgnZGF0YS1ncm91cC1kaXNhYmxlZCcpLFxuICAgICk7XG4gIH1cblxuICAvKiogT3BlbnMgdGhlIHNlbGVjdGlvbiBwYW5lbC4gKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdjbG9zZWQnIHx8ICF0aGlzLl9vdmVybGF5IHx8IHRoaXMuX29wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLndpbGxPcGVuLmVtaXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpO1xuICB9XG5cbiAgLyoqIENsb3NlcyB0aGUgc2VsZWN0aW9uIHBhbmVsLiAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLndpbGxDbG9zZS5lbWl0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zaW5nJztcbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLmFib3J0KCk7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgY3VycmVudCBkaXNwbGF5ZWQgdmFsdWUuICovXG4gIHB1YmxpYyBnZXREaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gIXRoaXMuX2Rpc3BsYXlWYWx1ZSA/ICcnIDogdGhpcy5fZGlzcGxheVZhbHVlO1xuICB9XG5cbiAgLyoqIExpc3RlbnMgdG8gb3B0aW9uIGNoYW5nZXMuICovXG4gIHByaXZhdGUgX29uT3B0aW9uQ2hhbmdlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiT3B0aW9uRWxlbWVudDtcbiAgICBpZiAodGFyZ2V0LnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLl9vbk9wdGlvblNlbGVjdGVkKHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29uT3B0aW9uRGVzZWxlY3RlZCh0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29uT3B0aW9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiU2VsZWN0RWxlbWVudCB8IFNiYk9wdGlvbkVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldC5sb2NhbE5hbWUgIT09ICdzYmItb3B0aW9uJyB8fCB0YXJnZXQuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKiogU2V0cyB0aGUgX2Rpc3BsYXlWYWx1ZSBieSBjaGVja2luZyB0aGUgaW50ZXJuYWwgc2JiLW9wdGlvbnMgYW5kIHNldHRpbmcgdGhlIGNvcnJlY3QgYHNlbGVjdGVkYCB2YWx1ZSBvbiB0aGVtLiAqL1xuICBwcml2YXRlIF9vblZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZmlsdGVyZWRPcHRpb25zO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbkVsZW1lbnQgPSBvcHRpb25zLmZpbmQoKG8pID0+IChvLnZhbHVlID8/IG8uZ2V0QXR0cmlidXRlKCd2YWx1ZScpKSA9PT0gbmV3VmFsdWUpO1xuICAgICAgaWYgKG9wdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgb3B0aW9uRWxlbWVudC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBvcHRpb25zXG4gICAgICAgIC5maWx0ZXIoKG8pID0+IChvLnZhbHVlID8/IG8uZ2V0QXR0cmlidXRlKCd2YWx1ZScpKSAhPT0gbmV3VmFsdWUpXG4gICAgICAgIC5mb3JFYWNoKChvKSA9PiAoby5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSBvcHRpb25FbGVtZW50Py50ZXh0Q29udGVudCB8fCBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zXG4gICAgICAgIC5maWx0ZXIoKG8pID0+ICFuZXdWYWx1ZS5pbmNsdWRlcyhvLnZhbHVlID8/IG8uZ2V0QXR0cmlidXRlKCd2YWx1ZScpKSlcbiAgICAgICAgLmZvckVhY2goKGUpID0+IChlLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uRWxlbWVudHMgPSBvcHRpb25zLmZpbHRlcigobykgPT5cbiAgICAgICAgbmV3VmFsdWUuaW5jbHVkZXMoby52YWx1ZSA/PyBvLmdldEF0dHJpYnV0ZSgndmFsdWUnKSksXG4gICAgICApO1xuICAgICAgc2VsZWN0ZWRPcHRpb25FbGVtZW50cy5mb3JFYWNoKChvKSA9PiAoby5zZWxlY3RlZCA9IHRydWUpKTtcbiAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IHNlbGVjdGVkT3B0aW9uRWxlbWVudHMubWFwKChvKSA9PiBvLnRleHRDb250ZW50KS5qb2luKCcsICcpIHx8IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX3N0YXRlQ2hhbmdlLmVtaXQoeyB0eXBlOiAndmFsdWUnLCB2YWx1ZTogbmV3VmFsdWUgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCBmb2N1cyBiZWhhdmlvclxuICAgIHRoaXMuZm9jdXMgPSAoKSA9PiB0aGlzLl90cmlnZ2VyRWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMuYmx1ciA9ICgpID0+IHRoaXMuX3RyaWdnZXJFbGVtZW50LmJsdXIoKTtcblxuICAgIC8vIFdhaXQgZm9yIHNzciBoeWRyYXRpb25cbiAgICBpZiAoIWlzTmV4dGpzKCkpIHtcbiAgICAgIHRoaXMuc3RhcnRVcGRhdGUoKTtcbiAgICAgIHRoaXMuX3NldHVwU2VsZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgZWxlbWVudCdzIGZpcnN0IGF0dHJpYnV0ZSB3aG9zZSBxdWFsaWZpZWQgbmFtZSBpcyBxdWFsaWZpZWROYW1lLlxuICAgKlxuICAgKiBbTUROIFJlZmVyZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0VsZW1lbnQvcmVtb3ZlQXR0cmlidXRlKVxuICAgKiBAaW50ZXJuYWwgV2UgbmVlZCB0byBvdmVycmlkZSB0aGlzIGR1ZSB0byBhIGh5ZHJhdGlvbiBpc3N1ZSB3aXRoIE5leHQuanMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQXR0cmlidXRlKHF1YWxpZmllZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEluIE5leHQuanMgdGhlIGh5ZHJhdGlvbiBuZWVkcyB0byBmaW5pc2ggYmVmb3JlIHdlIGNhbiBtYW5pcHVsYXRlIHRoZSBsaWdodCBET00uXG4gICAgLy8gQGxpdC9yZWFjdCBjYWxscyByZW1vdmVBdHRyaWJ1dGUoJ2RlZmVyLWh5ZHJhdGlvbicpIGluIGEgdXNlTGF5b3V0RWZmZWN0LFxuICAgIC8vIHdoaWNoIGlzIGRvbmUgYWZ0ZXIgaHlkcmF0aW9uIGlzIGZpbmlzaGVkLiBEdWUgdG8gdGhpcyB3ZSBpbnRlcmNlcHQgdGhpcyBjYWxsXG4gICAgLy8gaW4gb3ZlcnJpZGluZyByZW1vdmVBdHRyaWJ1dGUgdG8gZmluaXNoIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzYmItc2VsZWN0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9saXQvbGl0L2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC9zcmMvY3JlYXRlLWNvbXBvbmVudC50cyNMMjkzLUwyOTZcbiAgICAvLyBXZSBhbHNvIG5lZWQgdG8gd2FpdCBmb3IgdXBkYXRlIGNvbXBsZXRlIGluIG9yZGVyIHRvIGJlIHN1cmUgdGhhdCB0aGUgc2hhZG93IERPTSBoYXMgYmVlbiByZW5kZXJlZC5cbiAgICBpZiAoaXNOZXh0anMoKSAmJiBxdWFsaWZpZWROYW1lID09PSAnZGVmZXItaHlkcmF0aW9uJyAmJiAhdGhpcy5fZGlkTG9hZCkge1xuICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuX3NldHVwU2VsZWN0KCkpO1xuICAgIH1cbiAgICBzdXBlci5yZW1vdmVBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGlmIChhcmlhUm9sZU9uSG9zdCkge1xuICAgICAgdGhpcy5pZCB8fD0gdGhpcy5fb3ZlcmxheUlkO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuX2Fib3J0LnNpZ25hbDtcbiAgICBjb25zdCBmb3JtRmllbGQgPSB0aGlzLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKSA/PyB0aGlzLmNsb3Nlc3Q/LignW2RhdGEtZm9ybS1maWVsZF0nKTtcblxuICAgIGlmIChmb3JtRmllbGQpIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSBmb3JtRmllbGQuaGFzQXR0cmlidXRlKCduZWdhdGl2ZScpO1xuICAgIH1cbiAgICB0aGlzLl9zeW5jUHJvcGVydGllcygpO1xuXG4gICAgaWYgKHRoaXMuX2RpZExvYWQpIHtcbiAgICAgIHRoaXMuX3NldHVwT3JpZ2luKCk7XG4gICAgICB0aGlzLl9zZXR1cFRyaWdnZXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMuX29uVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdvcHRpb25TZWxlY3Rpb25DaGFuZ2UnLFxuICAgICAgKGU6IEN1c3RvbUV2ZW50PHZvaWQ+KSA9PiB0aGlzLl9vbk9wdGlvbkNoYW5nZWQoZSksXG4gICAgICB7IHNpZ25hbCB9LFxuICAgICk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuX29uT3B0aW9uQ2xpY2soZSk7XG4gICAgICAgIHRoaXMuX3RvZ2dsZU9wZW5pbmcoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbCB9LFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3ZhbHVlJykpIHtcbiAgICAgIHRoaXMuX29uVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUhKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbmVnYXRpdmUnKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ211bHRpcGxlJykpIHtcbiAgICAgIHRoaXMuX3N5bmNQcm9wZXJ0aWVzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5wcmVwZW5kKHRoaXMuX3RyaWdnZXJFbGVtZW50KTsgLy8gVGFrZSBiYWNrIHRoZSB0cmlnZ2VyIGVsZW1lbnQgcHJldmlvdXNseSBtb3ZlZCB0byB0aGUgbGlnaHQgRE9NXG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItZGl2aWRlcicpLmZvckVhY2goKGVsZW1lbnQpID0+IChlbGVtZW50Lm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZSkpO1xuXG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiT3B0aW9uRWxlbWVudCB8IFNiYk9wdEdyb3VwRWxlbWVudD4oXG4gICAgICAnc2JiLW9wdGlvbiwgc2JiLW9wdGdyb3VwJyxcbiAgICApLmZvckVhY2goKGVsZW1lbnQ6IFNiYk9wdGlvbkVsZW1lbnQgfCBTYmJPcHRHcm91cEVsZW1lbnQpID0+IHtcbiAgICAgIGVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCdkYXRhLW5lZ2F0aXZlJywgdGhpcy5uZWdhdGl2ZSk7XG4gICAgICBlbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1tdWx0aXBsZScsIHRoaXMubXVsdGlwbGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBTZWxlY3QoKTogdm9pZCB7XG4gICAgdGhpcy5fc2V0dXBPcmlnaW4oKTtcbiAgICB0aGlzLl9zZXR1cFRyaWdnZXIoKTtcbiAgICB0aGlzLl9kaWRMb2FkID0gdHJ1ZTtcbiAgICB0aGlzLmNvbXBsZXRlVXBkYXRlKCk7XG4gIH1cblxuICAvKiogU2V0cyB0aGUgb3JpZ2luRWxlbWVudDsgaWYgdGhlIGNvbXBvbmVudCBpcyB1c2VkIGluIGEgc2JiLWZvcm0tZmllbGQgdXNlcyBpdCwgb3RoZXJ3aXNlIHVzZXMgdGhlIHBhcmVudEVsZW1lbnQuICovXG4gIHByaXZhdGUgX3NldHVwT3JpZ2luKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1GaWVsZCA9IHRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpO1xuICAgIHRoaXMuX29yaWdpbkVsZW1lbnQgPVxuICAgICAgZm9ybUZpZWxkPy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPy4oJyNvdmVybGF5LWFuY2hvcicpID8/IHRoaXMucGFyZW50RWxlbWVudCE7XG4gICAgaWYgKHRoaXMuX29yaWdpbkVsZW1lbnQpIHtcbiAgICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKFxuICAgICAgICAnZGF0YS1vcHRpb24tcGFuZWwtb3JpZ2luLWJvcmRlcmxlc3MnLFxuICAgICAgICAhIWZvcm1GaWVsZD8uaGFzQXR0cmlidXRlPy4oJ2JvcmRlcmxlc3MnKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvIGFzc2VzcyBzY3JlZW4tcmVhZGVycyBwcm9ibGVtcyBjYXVzZWQgYnkgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYXJpYSBwYXR0ZXJucyBhbmQgc2hhZG93IERPTSxcbiAgICogd2UgYXJlIGZvcmNlZCB0byBtb3ZlIHRoZSAnY29tYm9ib3gnIHRyaWdnZXIgZWxlbWVudCB0byB0aGUgbGlnaHQgRE9NXG4gICAqL1xuICBwcml2YXRlIF9zZXR1cFRyaWdnZXIoKTogdm9pZCB7XG4gICAgLy8gTW92ZSB0aGUgdHJpZ2dlciBiZWZvcmUgdGhlIHNiYi1zZWxlY3RcbiAgICB0aGlzLnBhcmVudEVsZW1lbnQhLmluc2VydEJlZm9yZT8uKHRoaXMuX3RyaWdnZXJFbGVtZW50LCB0aGlzKTtcblxuICAgIC8vIFNldCB0aGUgaW52aXNpYmxlIHRyaWdnZXIgZWxlbWVudCBkaW1lbnNpb24gdG8gbWF0Y2ggdGhlIHBhcmVudCAobmVlZGVkIGZvciBzY3JlZW4gcmVhZGVycylcbiAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gdGhpcy5jbG9zZXN0Py4oJ3NiYi1mb3JtLWZpZWxkJykgPz8gdGhpcztcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zdHlsZS50b3AgPSAnMHB4JztcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtjb250YWluZXJFbGVtZW50Lm9mZnNldEhlaWdodH1weGA7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtjb250YWluZXJFbGVtZW50Lm9mZnNldFdpZHRofXB4YDtcbiAgfVxuXG4gIHByaXZhdGUgX3NldE92ZXJsYXlQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBzZXRPdmVybGF5UG9zaXRpb24oXG4gICAgICB0aGlzLl9vdmVybGF5LFxuICAgICAgdGhpcy5fb3JpZ2luRWxlbWVudCxcbiAgICAgIHRoaXMuX29wdGlvbkNvbnRhaW5lcixcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignLnNiYi1zZWxlY3RfX2NvbnRhaW5lcicpISxcbiAgICAgIHRoaXMsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEluIHJhcmUgY2FzZXMgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gIC8vIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgcHJpdmF0ZSBfb25BbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdvcGVuJyAmJiB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX29uT3BlbkFuaW1hdGlvbkVuZCgpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuX29uQ2xvc2VBbmltYXRpb25FbmQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vbk9wZW5BbmltYXRpb25FbmQoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuZWQnO1xuICAgIHRoaXMuX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG5cbiAgICB0aGlzLmRpZE9wZW4uZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25DbG9zZUFuaW1hdGlvbkVuZCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgdGhpcy5fcmVzZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgdGhpcy5fb3B0aW9uQ29udGFpbmVyLnNjcm9sbFRvcCA9IDA7XG4gICAgdGhpcy5kaWRDbG9zZS5lbWl0KCk7XG4gIH1cblxuICAvKiogV2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQsIHVwZGF0ZXMgdGhlIGRpc3BsYXlWYWx1ZTsgaXQgYWxzbyBjbG9zZXMgdGhlIHNlbGVjdCBpZiBub3QgYG11bHRpcGxlYC4gKi9cbiAgcHJpdmF0ZSBfb25PcHRpb25TZWxlY3RlZChvcHRpb25TZWxlY3Rpb25DaGFuZ2U6IFNiYk9wdGlvbkVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX2ZpbHRlcmVkT3B0aW9uc1xuICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5pZCAhPT0gb3B0aW9uU2VsZWN0aW9uQ2hhbmdlLmlkKVxuICAgICAgICAuZm9yRWFjaCgob3B0aW9uKSA9PiAob3B0aW9uLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25TZWxlY3Rpb25DaGFuZ2UudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gW29wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSFdO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy52YWx1ZS5pbmNsdWRlcyhvcHRpb25TZWxlY3Rpb25DaGFuZ2UudmFsdWUhKSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIG9wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2lucHV0LmVtaXQoKTtcbiAgICB0aGlzLl9jaGFuZ2UuZW1pdCgpO1xuICAgIHRoaXMuX2RpZENoYW5nZS5lbWl0KCk7XG4gIH1cblxuICAvKiogV2hlbiBhbiBvcHRpb24gaXMgdW5zZWxlY3RlZCBpbiBgbXVsdGlwbGVgLCByZW1vdmVzIGl0IGZyb20gdmFsdWUgYW5kIHVwZGF0ZXMgZGlzcGxheVZhbHVlLiAqL1xuICBwcml2YXRlIF9vbk9wdGlvbkRlc2VsZWN0ZWQob3B0aW9uU2VsZWN0aW9uQ2hhbmdlOiBTYmJPcHRpb25FbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAodGhpcy52YWx1ZSBhcyBzdHJpbmdbXSkuZmlsdGVyKFxuICAgICAgICAoZWw6IHN0cmluZykgPT4gZWwgIT09IG9wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuX2lucHV0LmVtaXQoKTtcbiAgICAgIHRoaXMuX2NoYW5nZS5lbWl0KCk7XG4gICAgICB0aGlzLl9kaWRDaGFuZ2UuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgLy8gUmVjYWxjdWxhdGUgdGhlIG92ZXJsYXkgcG9zaXRpb24gb24gc2Nyb2xsIGFuZCB3aW5kb3cgcmVzaXplXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4gdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBtZW51IG9uIGJhY2tkcm9wIGNsaWNrXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGV2KSA9PiB0aGlzLl9wb2ludGVyRG93bkxpc3RlbmVyKGV2KSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgKGV2KSA9PiB0aGlzLl9jbG9zZU9uQmFja2Ryb3BDbGljayhldiksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9vbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuZWQnKSB7XG4gICAgICBhd2FpdCB0aGlzLl9vcGVuZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2Nsb3NlZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfY2xvc2VkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2NoZWNrRm9yTGV0dGVyU2VsZWN0aW9uKGV2ZW50KSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb25CeVRleHQoZXZlbnQpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vcGVuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX29wZW5lZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkgfHwgdGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hlY2tGb3JMZXR0ZXJTZWxlY3Rpb24oZXZlbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBhd2FpdCB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fc2VsZWN0QnlLZXlib2FyZCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgMCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCB0aGlzLl9maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRm9yTGV0dGVyU2VsZWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgfHxcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0NsZWFyJyB8fFxuICAgICAgKGV2ZW50LmtleS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgZXZlbnQua2V5ICE9PSAnICcgJiZcbiAgICAgICAgIWV2ZW50LmFsdEtleSAmJlxuICAgICAgICAhZXZlbnQuY3RybEtleSAmJlxuICAgICAgICAhZXZlbnQubWV0YUtleSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudDogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFNldCB0aW1lb3V0IGFuZCB0aGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAgICBpZiAodHlwZW9mIHRoaXMuX3NlYXJjaFRpbWVvdXQgPT09IHR5cGVvZiBzZXRUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2VhcmNoVGltZW91dCk7XG4gICAgfVxuICAgIHRoaXMuX3NlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLl9zZWFyY2hTdHJpbmcgPSAnJyksIDEwMDApO1xuICAgIHRoaXMuX3NlYXJjaFN0cmluZyArPSBldmVudC5rZXk7XG5cbiAgICAvLyBSZW9yZGVyIHRoZSBfZmlsdGVyZWRPcHRpb24gYXJyYXkgdG8gaGF2ZSB0aGUgbGFzdCBzZWxlY3RlZCBlbGVtZW50IGF0IHRoZSBib3R0b20uXG4gICAgY29uc3QgaW5kZXhGb3JTbGljZTogbnVtYmVyID0gdGhpcy5fYWN0aXZlSXRlbUluZGV4ICsgMTtcbiAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQ6IFNiYk9wdGlvbkVsZW1lbnRbXSA9IFtcbiAgICAgIC4uLnRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5zbGljZShpbmRleEZvclNsaWNlKSxcbiAgICAgIC4uLnRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5zbGljZSgwLCBpbmRleEZvclNsaWNlKSxcbiAgICBdO1xuXG4gICAgY29uc3QgbWF0Y2ggPSBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQuZmluZChcbiAgICAgIChvcHRpb246IFNiYk9wdGlvbkVsZW1lbnQpID0+XG4gICAgICAgIG9wdGlvbi50ZXh0Q29udGVudD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX3NlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSA9PT0gMCxcbiAgICApO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgLy8gSWYgYW4gZXhhY3QgbWF0Y2ggaGFzIGJlZW4gZm91bmQsIGdvIHRvIHRoYXQgb3B0aW9uLlxuICAgICAgYXdhaXQgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgdGhpcy5fZmlsdGVyZWRPcHRpb25zLmluZGV4T2YobWF0Y2gpKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nLmxlbmd0aCA+IDEgJiZcbiAgICAgIG5ldyBSZWdFeHAoYF4ke3RoaXMuX3NlYXJjaFN0cmluZy5jaGFyQXQoMCl9KiRgKS50ZXN0KHRoaXMuX3NlYXJjaFN0cmluZylcbiAgICApIHtcbiAgICAgIC8vIElmIG5vIGV4YWN0IG1hdGNoIGhhcyBiZWVuIGZvdW5kIGJ1dCB0aGUgc3RyaW5nIHRvIHNlYXJjaCBpcyBtYWRlIGJ5IHRoZSBzYW1lIHJlcGVhdGVkIGxldHRlcixcbiAgICAgIC8vIGdvIHRvIHRoZSBmaXJzdCBlbGVtZW50LCBpZiBleGlzdHMsIHRoYXQgbWF0Y2hlcyB0aGUgbGV0dGVyLlxuICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpbHRlcmVkT3B0aW9uc1NvcnRlZC5maW5kKFxuICAgICAgICAob3B0aW9uOiBTYmJPcHRpb25FbGVtZW50KSA9PlxuICAgICAgICAgIG9wdGlvbi50ZXh0Q29udGVudD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX3NlYXJjaFN0cmluZ1swXS50b0xvd2VyQ2FzZSgpKSA9PT0gMCxcbiAgICAgICk7XG4gICAgICBpZiAoZmlyc3RNYXRjaCkge1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCB0aGlzLl9maWx0ZXJlZE9wdGlvbnMuaW5kZXhPZihmaXJzdE1hdGNoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIG1hdGNoIGZvdW5kLCBjbGVhciB0aGUgdGltZW91dCBhbmQgdGhlIHNlYXJjaCB0ZXJtLlxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NlYXJjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfc2VsZWN0QnlLZXlib2FyZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQgPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICBhd2FpdCBhY3RpdmVPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24oIWFjdGl2ZU9wdGlvbi5zZWxlY3RlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleD86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5leHRJbmRleCA9XG4gICAgICBpbmRleCA/PyBnZXROZXh0RWxlbWVudEluZGV4KGV2ZW50LCB0aGlzLl9hY3RpdmVJdGVtSW5kZXgsIHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpO1xuICAgIGNvbnN0IG5leHRPcHRpb24gPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbbmV4dEluZGV4XTtcbiAgICBjb25zdCBhY3RpdmVPcHRpb24gPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIHRoaXMuX3NldEFjdGl2ZUVsZW1lbnQobmV4dE9wdGlvbiwgYWN0aXZlT3B0aW9uKTtcblxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgYXdhaXQgdGhpcy5fc2V0U2VsZWN0ZWRFbGVtZW50KG5leHRPcHRpb24sIGFjdGl2ZU9wdGlvbik7XG4gICAgfSBlbHNlIGlmIChldmVudD8uc2hpZnRLZXkpIHtcbiAgICAgIGF3YWl0IG5leHRPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24oIW5leHRPcHRpb24uc2VsZWN0ZWQpO1xuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSBuZXh0SW5kZXg7XG4gIH1cblxuICBwcml2YXRlIF9zZXRBY3RpdmVFbGVtZW50KFxuICAgIG5leHRBY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQsXG4gICAgbGFzdEFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uRWxlbWVudCB8IG51bGwgPSBudWxsLFxuICAgIHNldEFjdGl2ZURlc2NlbmRhbnQgPSB0cnVlLFxuICApOiB2b2lkIHtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLmFjdGl2ZSA9IHRydWU7XG4gICAgbmV4dEFjdGl2ZU9wdGlvbi5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcgfSk7XG5cbiAgICBpZiAoc2V0QWN0aXZlRGVzY2VuZGFudCkge1xuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBuZXh0QWN0aXZlT3B0aW9uLmlkKTtcbiAgICB9XG5cbiAgICAvLyBSZXNldCB0aGUgcHJldmlvdXNcbiAgICBpZiAobGFzdEFjdGl2ZU9wdGlvbiAmJiBsYXN0QWN0aXZlT3B0aW9uICE9PSBuZXh0QWN0aXZlT3B0aW9uKSB7XG4gICAgICBsYXN0QWN0aXZlT3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3NldFNlbGVjdGVkRWxlbWVudChcbiAgICBuZXh0QWN0aXZlT3B0aW9uOiBTYmJPcHRpb25FbGVtZW50LFxuICAgIGxhc3RBY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG5leHRBY3RpdmVPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24odHJ1ZSk7XG5cbiAgICBpZiAobGFzdEFjdGl2ZU9wdGlvbiAmJiBsYXN0QWN0aXZlT3B0aW9uICE9PSBuZXh0QWN0aXZlT3B0aW9uKSB7XG4gICAgICBhd2FpdCBsYXN0QWN0aXZlT3B0aW9uLnNldFNlbGVjdGVkVmlhVXNlckludGVyYWN0aW9uKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZXNldEFjdGl2ZUVsZW1lbnQoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9uc1t0aGlzLl9hY3RpdmVJdGVtSW5kZXhdO1xuXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQuYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcG9pbnRlcmRvd24gZXZlbnQgdGFyZ2V0IGlzIHRyaWdnZXJlZCBvbiB0aGUgbWVudS5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ID0gaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCk7XG4gIH07XG5cbiAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGljay5cbiAgcHJpdmF0ZSBfY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSBhc3luYyAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICghdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ICYmICFpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9zZXRWYWx1ZUZyb21TZWxlY3RlZE9wdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5fZmlsdGVyZWRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKTtcbiAgICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbiA9PT0gc2VsZWN0ZWRPcHRpb24sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBzZWxlY3RlZE9wdGlvbi52YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKTtcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB2YWx1ZTogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIHZhbHVlLnB1c2gob3B0aW9uLnZhbHVlISk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RvZ2dsZU9wZW5pbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uZm9jdXMoKTtcblxuICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgY2FzZSAnb3BlbmVkJzoge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY2xvc2VkJzoge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDwhLS0gVGhpcyBlbGVtZW50IGlzIHZpc3VhbGx5IGhpZGRlbiBhbmQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgbGlnaHQgRE9NIHRvIGFsbG93IHNjcmVlblxuICAgICAgcmVhZGVycyB0byB3b3JrIHByb3Blcmx5IC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIlxuICAgICAgICB0YWJpbmRleD0ke3RoaXMuZGlzYWJsZWQgPyBub3RoaW5nIDogJzAnfVxuICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkLnRvU3RyaW5nKCl9XG4gICAgICAgIGFyaWEtY29udHJvbHM9JHt0aGlzLl9vdmVybGF5SWR9XG4gICAgICAgIGFyaWEtb3ducz0ke3RoaXMuX292ZXJsYXlJZH1cbiAgICAgICAgQGtleWRvd249JHt0aGlzLl9vbktleURvd259XG4gICAgICAgIEBjbGljaz0ke3RoaXMuX3RvZ2dsZU9wZW5pbmd9XG4gICAgICAgICR7cmVmKChyZWYpID0+ICh0aGlzLl90cmlnZ2VyRWxlbWVudCA9IHJlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgPlxuICAgICAgICAke3RoaXMuX2Rpc3BsYXlWYWx1ZSA/IGh0bWxgJHt0aGlzLl9kaXNwbGF5VmFsdWV9YCA6IGh0bWxgPHNwYW4+JHt0aGlzLnBsYWNlaG9sZGVyfTwvc3Bhbj5gfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gVmlzdWFsbHkgZGlzcGxheSB0aGUgdmFsdWUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fdHJpZ2dlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAke3RoaXMuX2Rpc3BsYXlWYWx1ZVxuICAgICAgICAgID8gaHRtbGAke3RoaXMuX2Rpc3BsYXlWYWx1ZX1gXG4gICAgICAgICAgOiBodG1sYDxzcGFuIGNsYXNzPVwic2JiLXNlbGVjdF9fdHJpZ2dlci0tcGxhY2Vob2xkZXJcIj4ke3RoaXMucGxhY2Vob2xkZXJ9PC9zcGFuPmB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX2dhcC1maXhcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X19jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX2dhcC1maXhcIj4ke292ZXJsYXlHYXBGaXhDb3JuZXJzKCl9PC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBAYW5pbWF0aW9uZW5kPSR7dGhpcy5fb25BbmltYXRpb25FbmR9XG4gICAgICAgICAgY2xhc3M9XCJzYmItc2VsZWN0X19wYW5lbFwiXG4gICAgICAgICAgJHtyZWYoKGRpYWxvZ1JlZikgPT4gKHRoaXMuX292ZXJsYXkgPSBkaWFsb2dSZWYgYXMgSFRNTEVsZW1lbnQpKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X193cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGlkPSR7IWFyaWFSb2xlT25Ib3N0ID8gdGhpcy5fb3ZlcmxheUlkIDogbm90aGluZ31cbiAgICAgICAgICAgICAgY2xhc3M9XCJzYmItc2VsZWN0X19vcHRpb25zXCJcbiAgICAgICAgICAgICAgcm9sZT0keyFhcmlhUm9sZU9uSG9zdCA/ICdsaXN0Ym94JyA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgID9hcmlhLW11bHRpc2VsZWN0YWJsZT0ke3RoaXMubXVsdGlwbGV9XG4gICAgICAgICAgICAgICR7cmVmKChjb250YWluZXJSZWYpID0+ICh0aGlzLl9vcHRpb25Db250YWluZXIgPSBjb250YWluZXJSZWYgYXMgSFRNTEVsZW1lbnQpKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl9zZXRWYWx1ZUZyb21TZWxlY3RlZE9wdGlvbn0+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXNlbGVjdCc6IFNiYlNlbGVjdEVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJyZWYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -1,5 +1,4 @@
1
1
  import { CSSResultGroup, PropertyValues, TemplateResult, LitElement } from 'lit';
2
-
3
2
  declare const SbbSelectionExpansionPanelElement_base: import('../core/mixins.js').AbstractConstructor<import('../core/mixins.js').SbbHydrationMixinType> & typeof LitElement;
4
3
  /**
5
4
  * It displays an expandable panel connected to a `sbb-checkbox` or to a `sbb-radio-button`.
@@ -1 +1 @@
1
- {"version":3,"file":"selection-expansion-panel.d.ts","sourceRoot":"","sources":["../../../../src/elements/selection-expansion-panel/selection-expansion-panel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC1E,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAcvC,OAAO,eAAe,CAAC;;AAEvB;;;;;;;;;GASG;AACH,qBAEa,iCAAkC,SAAQ,sCAA6B;IAElF,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,gBAAuB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK1C;IAEX,yCAAyC;IACtB,KAAK,EAAE,OAAO,GAAG,MAAM,CAAW;IAErD,qDAAqD;IACQ,SAAS,UAAS;IAE/E,iDAAiD;IACE,UAAU,UAAS;IAEtE,wCAAwC;IAExC,OAAO,KAAK,MAAM,QAEjB;IACD,OAAO,KAAK,MAAM,GAEjB;IAED,8CAA8C;IAC9C,OAAO,KAAK,QAAQ,QAEnB;IACD,OAAO,KAAK,QAAQ,GAEnB;IAED,+CAA+C;IAC/C,OAAO,KAAK,SAAS,QAEpB;IAED,wEAAwE;IACxE,OAAO,CAAC,SAAS,CAGf;IAEF,oDAAoD;IACpD,OAAO,CAAC,QAAQ,CAGd;IAEF,wEAAwE;IACxE,OAAO,CAAC,UAAU,CAGhB;IAEF,oDAAoD;IACpD,OAAO,CAAC,SAAS,CAGf;IAEF,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,YAAY,CAAkB;IAEtC;;OAEG;IACH,OAAO,KAAK,WAAW,GAGtB;IAEe,iBAAiB,IAAI,IAAI;cAUtB,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAQzD,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAM9E,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,eAAe;YAUT,oBAAoB;cAoBf,MAAM,IAAI,cAAc;CAmB5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,+BAA+B,EAAE,iCAAiC,CAAC;KACpE;CACF"}
1
+ {"version":3,"file":"selection-expansion-panel.d.ts","sourceRoot":"","sources":["../../../../src/elements/selection-expansion-panel/selection-expansion-panel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC1E,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAcvC,OAAO,eAAe,CAAC;;AAEvB;;;;;;;;;GASG;AACH,qBAEa,iCAAkC,SAAQ,sCAA6B;IAElF,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,gBAAuB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK1C;IAEX,yCAAyC;IACtB,KAAK,EAAE,OAAO,GAAG,MAAM,CAAW;IAErD,qDAAqD;IACQ,SAAS,UAAS;IAE/E,iDAAiD;IACE,UAAU,UAAS;IAEtE,wCAAwC;IAExC,OAAO,KAAK,MAAM,QAEjB;IACD,OAAO,KAAK,MAAM,GAEjB;IAED,8CAA8C;IAC9C,OAAO,KAAK,QAAQ,QAEnB;IACD,OAAO,KAAK,QAAQ,GAEnB;IAED,+CAA+C;IAC/C,OAAO,KAAK,SAAS,QAEpB;IAED,wEAAwE;IACxE,OAAO,CAAC,SAAS,CAGf;IAEF,oDAAoD;IACpD,OAAO,CAAC,QAAQ,CAGd;IAEF,wEAAwE;IACxE,OAAO,CAAC,UAAU,CAGhB;IAEF,oDAAoD;IACpD,OAAO,CAAC,SAAS,CAGf;IAEF,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,YAAY,CAAkB;IAEtC;;OAEG;IACH,OAAO,KAAK,WAAW,GAGtB;IAEe,iBAAiB,IAAI,IAAI;cAUtB,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAQzD,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAM9E,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,eAAe;YAUT,oBAAoB;cAoBf,MAAM,IAAI,cAAc;CAmB5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,+BAA+B,EAAE,iCAAiC,CAAC;KACpE;CACF"}
@@ -238,7 +238,11 @@ let SbbSelectionExpansionPanelElement = class extends SbbHydrationMixin(LitEleme
238
238
  if (!this._hasContent) {
239
239
  return;
240
240
  }
241
- this.forceOpen || this._checked ? this._open(!this._initialized) : this._close();
241
+ if (this.forceOpen || this._checked) {
242
+ this._open(!this._initialized);
243
+ } else {
244
+ this._close();
245
+ }
242
246
  this._updateExpandedLabel(this.forceOpen || this._checked);
243
247
  }
244
248
  _open(skipAnimation = false) {
@@ -344,4 +348,4 @@ SbbSelectionExpansionPanelElement = __decorateClass([
344
348
  export {
345
349
  SbbSelectionExpansionPanelElement
346
350
  };
347
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWV4cGFuc2lvbi1wYW5lbC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3NlbGVjdGlvbi1leHBhbnNpb24tcGFuZWwvc2VsZWN0aW9uLWV4cGFuc2lvbi1wYW5lbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBQcm9wZXJ0eVZhbHVlcywgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgU2JiQ2hlY2tib3hQYW5lbEVsZW1lbnQgfSBmcm9tICcuLi9jaGVja2JveC5qcyc7XG5pbXBvcnQgeyBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIsIFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgc2xvdFN0YXRlIH0gZnJvbSAnLi4vY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJy4uL2NvcmUvZXZlbnRpbmcuanMnO1xuaW1wb3J0IHsgaTE4bkNvbGxhcHNlZCwgaTE4bkV4cGFuZGVkIH0gZnJvbSAnLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiT3BlbmVkQ2xvc2VkU3RhdGUsIFNiYlN0YXRlQ2hhbmdlIH0gZnJvbSAnLi4vY29yZS9pbnRlcmZhY2VzLmpzJztcbmltcG9ydCB7IFNiYkh5ZHJhdGlvbk1peGluIH0gZnJvbSAnLi4vY29yZS9taXhpbnMuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJSYWRpb0J1dHRvblBhbmVsRWxlbWVudCB9IGZyb20gJy4uL3JhZGlvLWJ1dHRvbi5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3NlbGVjdGlvbi1leHBhbnNpb24tcGFuZWwuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICcuLi9kaXZpZGVyLmpzJztcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhbiBleHBhbmRhYmxlIHBhbmVsIGNvbm5lY3RlZCB0byBhIGBzYmItY2hlY2tib3hgIG9yIHRvIGEgYHNiYi1yYWRpby1idXR0b25gLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGBzYmItY2hlY2tib3hgIG9yIGBzYmItcmFkaW8tYnV0dG9uYCBlbGVtZW50cyB0byB0aGUgYHNiYi1zZWxlY3Rpb24tZXhwYW5zaW9uLXBhbmVsYC5cbiAqIEBzbG90IGNvbnRlbnQgLSBVc2UgdGhpcyBzbG90IHRvIHByb3ZpZGUgY3VzdG9tIGNvbnRlbnQgZm9yIHRoZSBwYW5lbCAob3B0aW9uYWwpLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgY29udGVudCBzZWN0aW9uIHN0YXJ0cyB0aGUgb3BlbmluZyB0cmFuc2l0aW9uLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBjb250ZW50IHNlY3Rpb24gaXMgb3BlbmVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGNvbnRlbnQgc2VjdGlvbiBiZWdpbnMgdGhlIGNsb3NpbmcgdHJhbnNpdGlvbi5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGRpZENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGNvbnRlbnQgc2VjdGlvbiBpcyBjbG9zZWQuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdzYmItc2VsZWN0aW9uLWV4cGFuc2lvbi1wYW5lbCcpXG5Ac2xvdFN0YXRlKClcbmV4cG9ydCBjbGFzcyBTYmJTZWxlY3Rpb25FeHBhbnNpb25QYW5lbEVsZW1lbnQgZXh0ZW5kcyBTYmJIeWRyYXRpb25NaXhpbihMaXRFbGVtZW50KSB7XG4gIC8vIEZJWE1FIGluaGVyaXRpbmcgZnJvbSBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCByZXF1aXJlczogaHR0cHM6Ly9naXRodWIuY29tL29wZW4td2MvY3VzdG9tLWVsZW1lbnRzLW1hbmlmZXN0L2lzc3Vlcy8yNTNcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIHdpbGxPcGVuOiAnd2lsbE9wZW4nLFxuICAgIGRpZE9wZW46ICdkaWRPcGVuJyxcbiAgICB3aWxsQ2xvc2U6ICd3aWxsQ2xvc2UnLFxuICAgIGRpZENsb3NlOiAnZGlkQ2xvc2UnLFxuICB9IGFzIGNvbnN0O1xuXG4gIC8qKiBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcGFuZWwuICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBjb2xvcjogJ3doaXRlJyB8ICdtaWxrJyA9ICd3aGl0ZSc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGNvbnRlbnQgc2VjdGlvbiBpcyBhbHdheXMgdmlzaWJsZS4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZm9yY2Utb3BlbicsIHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIGZvcmNlT3BlbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSB1bnNlbGVjdGVkIHBhbmVsIGhhcyBhIGJvcmRlci4gKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KSBwdWJsaWMgYm9yZGVybGVzcyA9IGZhbHNlO1xuXG4gIC8qKiBUaGUgc3RhdGUgb2YgdGhlIHNlbGVjdGlvbiBwYW5lbC4gKi9cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBzZXQgX3N0YXRlKHN0YXRlOiBTYmJPcGVuZWRDbG9zZWRTdGF0ZSkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdkYXRhLXN0YXRlJywgc3RhdGUpO1xuICB9XG4gIHByaXZhdGUgZ2V0IF9zdGF0ZSgpOiBTYmJPcGVuZWRDbG9zZWRTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLXN0YXRlJykgYXMgU2JiT3BlbmVkQ2xvc2VkU3RhdGU7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgc2VsZWN0aW9uIHBhbmVsIGlzIGNoZWNrZWQuICovXG4gIHByaXZhdGUgc2V0IF9jaGVja2VkKGNoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1jaGVja2VkJywgY2hlY2tlZCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgX2NoZWNrZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKCdkYXRhLWNoZWNrZWQnKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gcGFuZWwgaXMgZGlzYWJsZWQuICovXG4gIHByaXZhdGUgc2V0IF9kaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWRpc2FibGVkJywgZGlzYWJsZWQpO1xuICB9XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBjb250ZW50IHNlY3Rpb24gc3RhcnRzIHRoZSBvcGVuaW5nIHRyYW5zaXRpb24uICovXG4gIHByaXZhdGUgX3dpbGxPcGVuOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiU2VsZWN0aW9uRXhwYW5zaW9uUGFuZWxFbGVtZW50LmV2ZW50cy53aWxsT3BlbixcbiAgKTtcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGNvbnRlbnQgc2VjdGlvbiBpcyBvcGVuZWQuICovXG4gIHByaXZhdGUgX2RpZE9wZW46IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJTZWxlY3Rpb25FeHBhbnNpb25QYW5lbEVsZW1lbnQuZXZlbnRzLmRpZE9wZW4sXG4gICk7XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBjb250ZW50IHNlY3Rpb24gYmVnaW5zIHRoZSBjbG9zaW5nIHRyYW5zaXRpb24uICovXG4gIHByaXZhdGUgX3dpbGxDbG9zZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYlNlbGVjdGlvbkV4cGFuc2lvblBhbmVsRWxlbWVudC5ldmVudHMud2lsbENsb3NlLFxuICApO1xuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgY29udGVudCBzZWN0aW9uIGlzIGNsb3NlZC4gKi9cbiAgcHJpdmF0ZSBfZGlkQ2xvc2U6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJTZWxlY3Rpb25FeHBhbnNpb25QYW5lbEVsZW1lbnQuZXZlbnRzLmRpZENsb3NlLFxuICApO1xuXG4gIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfYWJvcnQgPSBuZXcgU2JiQ29ubmVjdGVkQWJvcnRDb250cm9sbGVyKHRoaXMpO1xuICBwcml2YXRlIF9pbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGl0IGhhcyBhbiBleHBhbmRhYmxlIGNvbnRlbnRcbiAgICovXG4gIHByaXZhdGUgZ2V0IF9oYXNDb250ZW50KCk6IGJvb2xlYW4ge1xuICAgIC8vIFdlIGNhbm5vdCB1c2UgdGhlIE5hbWVkU2xvdHMgYmVjYXVzZSBpdCdzIHRvbyBzbG93IHRvIGluaXRpYWxpemVcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ1tzbG90PVwiY29udGVudFwiXScpLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncGFuZWxDb25uZWN0ZWQnLCB0aGlzLl9pbml0RnJvbUlucHV0LmJpbmQodGhpcyksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fYWJvcnQuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fc3RhdGUgfHw9ICdjbG9zZWQnO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdmb3JjZU9wZW4nKSkge1xuICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2hhc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZvcmNlT3BlbiB8fCB0aGlzLl9jaGVja2VkID8gdGhpcy5fb3BlbighdGhpcy5faW5pdGlhbGl6ZWQpIDogdGhpcy5fY2xvc2UoKTtcbiAgICB0aGlzLl91cGRhdGVFeHBhbmRlZExhYmVsKHRoaXMuZm9yY2VPcGVuIHx8IHRoaXMuX2NoZWNrZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb3Blbihza2lwQW5pbWF0aW9uID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgIT09ICdjbG9zZWQnICYmIHRoaXMuX3N0YXRlICE9PSAnY2xvc2luZycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9ICdvcGVuaW5nJztcbiAgICB0aGlzLl93aWxsT3Blbi5lbWl0KCk7XG5cbiAgICBpZiAoc2tpcEFuaW1hdGlvbikge1xuICAgICAgdGhpcy5fc3RhdGUgPSAnb3BlbmVkJztcbiAgICAgIHRoaXMuX2RpZE9wZW4uZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Nsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gJ29wZW5lZCcgJiYgdGhpcy5fc3RhdGUgIT09ICdvcGVuaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gJ2Nsb3NpbmcnO1xuICAgIHRoaXMuX3dpbGxDbG9zZS5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0RnJvbUlucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIFNiYkNoZWNrYm94UGFuZWxFbGVtZW50IHwgU2JiUmFkaW9CdXR0b25QYW5lbEVsZW1lbnQ7XG5cbiAgICB0aGlzLl9jaGVja2VkID0gaW5wdXQuY2hlY2tlZDtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGlucHV0LmRpc2FibGVkO1xuICAgIHRoaXMuX3VwZGF0ZVN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF9vbklucHV0U3RhdGVDaGFuZ2UoZXZlbnQ6IEN1c3RvbUV2ZW50PFNiYlN0YXRlQ2hhbmdlPik6IHZvaWQge1xuICAgIGlmIChldmVudC5kZXRhaWwudHlwZSA9PT0gJ2Rpc2FibGVkJykge1xuICAgICAgdGhpcy5fZGlzYWJsZWQgPSBldmVudC5kZXRhaWwuZGlzYWJsZWQ7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChldmVudC5kZXRhaWwudHlwZSAhPT0gJ2NoZWNrZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2hlY2tlZCA9IGV2ZW50LmRldGFpbC5jaGVja2VkO1xuICAgIHRoaXMuX3VwZGF0ZVN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF9vbkFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4tb3BhY2l0eScgJiYgdGhpcy5fc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5fc3RhdGUgPSAnb3BlbmVkJztcbiAgICAgIHRoaXMuX2RpZE9wZW4uZW1pdCgpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLl9zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLl9zdGF0ZSA9ICdjbG9zZWQnO1xuICAgICAgdGhpcy5fZGlkQ2xvc2UuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3VwZGF0ZUV4cGFuZGVkTGFiZWwob3BlbjogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuaHlkcmF0aW9uQ29tcGxldGU7XG5cbiAgICBjb25zdCBwYW5lbEVsZW1lbnQgPSB0aGlzLnF1ZXJ5U2VsZWN0b3I8U2JiUmFkaW9CdXR0b25QYW5lbEVsZW1lbnQgfCBTYmJDaGVja2JveFBhbmVsRWxlbWVudD4oXG4gICAgICAnc2JiLXJhZGlvLWJ1dHRvbi1wYW5lbCwgc2JiLWNoZWNrYm94LXBhbmVsJyxcbiAgICApO1xuICAgIGlmICghcGFuZWxFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9oYXNDb250ZW50KSB7XG4gICAgICBwYW5lbEVsZW1lbnQuZXhwYW5zaW9uU3RhdGUgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwYW5lbEVsZW1lbnQuZXhwYW5zaW9uU3RhdGUgPSBvcGVuXG4gICAgICA/ICcsICcgKyBpMThuRXhwYW5kZWRbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF1cbiAgICAgIDogJywgJyArIGkxOG5Db2xsYXBzZWRbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF07XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0aW9uLWV4cGFuc2lvbi1wYW5lbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdGlvbi1leHBhbnNpb24tcGFuZWxfX2lucHV0XCIgQHN0YXRlQ2hhbmdlPSR7dGhpcy5fb25JbnB1dFN0YXRlQ2hhbmdlfT5cbiAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJzYmItc2VsZWN0aW9uLWV4cGFuc2lvbi1wYW5lbF9fY29udGVudC0td3JhcHBlclwiXG4gICAgICAgICAgLmluZXJ0PSR7dGhpcy5fc3RhdGUgIT09ICdvcGVuZWQnfVxuICAgICAgICAgIEBhbmltYXRpb25lbmQ9JHsoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSA9PiB0aGlzLl9vbkFuaW1hdGlvbkVuZChldmVudCl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdGlvbi1leHBhbnNpb24tcGFuZWxfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgIDxzYmItZGl2aWRlcj48L3NiYi1kaXZpZGVyPlxuICAgICAgICAgICAgPHNsb3QgbmFtZT1cImNvbnRlbnRcIj48L3Nsb3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXNlbGVjdGlvbi1leHBhbnNpb24tcGFuZWwnOiBTYmJTZWxlY3Rpb25FeHBhbnNpb25QYW5lbEVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJzdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZCTyxJQUFNLG9DQUFOLGNBQWdELGtCQUFrQixVQUFVLEVBQUU7QUFBQSxFQUE5RSxjQUFBO0FBQUEsVUFBQSxHQUFBLFNBQUE7QUFXTyxTQUFPLFFBQTBCO0FBR1MsU0FBTyxZQUFZO0FBRzdCLFNBQU8sYUFBYTtBQXlCaEUsU0FBUSxZQUFnQyxJQUFJO0FBQUEsTUFDMUM7QUFBQSxNQUNBLGtDQUFrQyxPQUFPO0FBQUEsSUFBQTtBQUkzQyxTQUFRLFdBQStCLElBQUk7QUFBQSxNQUN6QztBQUFBLE1BQ0Esa0NBQWtDLE9BQU87QUFBQSxJQUFBO0FBSTNDLFNBQVEsYUFBaUMsSUFBSTtBQUFBLE1BQzNDO0FBQUEsTUFDQSxrQ0FBa0MsT0FBTztBQUFBLElBQUE7QUFJM0MsU0FBUSxZQUFnQyxJQUFJO0FBQUEsTUFDMUM7QUFBQSxNQUNBLGtDQUFrQyxPQUFPO0FBQUEsSUFBQTtBQUduQyxTQUFBLFlBQVksSUFBSSxzQkFBc0IsSUFBSTtBQUMxQyxTQUFBLFNBQVMsSUFBSSw0QkFBNEIsSUFBSTtBQUNyRCxTQUFRLGVBQXdCO0FBQUEsRUFBQTtBQUFBLEVBOUNoQyxJQUFZLE9BQU9BLFFBQTZCO0FBQ3pDLFNBQUEsYUFBYSxjQUFjQSxNQUFLO0FBQUEsRUFDdkM7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
351
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWV4cGFuc2lvbi1wYW5lbC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3NlbGVjdGlvbi1leHBhbnNpb24tcGFuZWwvc2VsZWN0aW9uLWV4cGFuc2lvbi1wYW5lbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBQcm9wZXJ0eVZhbHVlcywgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgU2JiQ2hlY2tib3hQYW5lbEVsZW1lbnQgfSBmcm9tICcuLi9jaGVja2JveC5qcyc7XG5pbXBvcnQgeyBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIsIFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgc2xvdFN0YXRlIH0gZnJvbSAnLi4vY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJy4uL2NvcmUvZXZlbnRpbmcuanMnO1xuaW1wb3J0IHsgaTE4bkNvbGxhcHNlZCwgaTE4bkV4cGFuZGVkIH0gZnJvbSAnLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiT3BlbmVkQ2xvc2VkU3RhdGUsIFNiYlN0YXRlQ2hhbmdlIH0gZnJvbSAnLi4vY29yZS9pbnRlcmZhY2VzLmpzJztcbmltcG9ydCB7IFNiYkh5ZHJhdGlvbk1peGluIH0gZnJvbSAnLi4vY29yZS9taXhpbnMuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJSYWRpb0J1dHRvblBhbmVsRWxlbWVudCB9IGZyb20gJy4uL3JhZGlvLWJ1dHRvbi5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3NlbGVjdGlvbi1leHBhbnNpb24tcGFuZWwuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICcuLi9kaXZpZGVyLmpzJztcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhbiBleHBhbmRhYmxlIHBhbmVsIGNvbm5lY3RlZCB0byBhIGBzYmItY2hlY2tib3hgIG9yIHRvIGEgYHNiYi1yYWRpby1idXR0b25gLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGBzYmItY2hlY2tib3hgIG9yIGBzYmItcmFkaW8tYnV0dG9uYCBlbGVtZW50cyB0byB0aGUgYHNiYi1zZWxlY3Rpb24tZXhwYW5zaW9uLXBhbmVsYC5cbiAqIEBzbG90IGNvbnRlbnQgLSBVc2UgdGhpcyBzbG90IHRvIHByb3ZpZGUgY3VzdG9tIGNvbnRlbnQgZm9yIHRoZSBwYW5lbCAob3B0aW9uYWwpLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgY29udGVudCBzZWN0aW9uIHN0YXJ0cyB0aGUgb3BlbmluZyB0cmFuc2l0aW9uLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBjb250ZW50IHNlY3Rpb24gaXMgb3BlbmVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGNvbnRlbnQgc2VjdGlvbiBiZWdpbnMgdGhlIGNsb3NpbmcgdHJhbnNpdGlvbi5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGRpZENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGNvbnRlbnQgc2VjdGlvbiBpcyBjbG9zZWQuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdzYmItc2VsZWN0aW9uLWV4cGFuc2lvbi1wYW5lbCcpXG5Ac2xvdFN0YXRlKClcbmV4cG9ydCBjbGFzcyBTYmJTZWxlY3Rpb25FeHBhbnNpb25QYW5lbEVsZW1lbnQgZXh0ZW5kcyBTYmJIeWRyYXRpb25NaXhpbihMaXRFbGVtZW50KSB7XG4gIC8vIEZJWE1FIGluaGVyaXRpbmcgZnJvbSBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCByZXF1aXJlczogaHR0cHM6Ly9naXRodWIuY29tL29wZW4td2MvY3VzdG9tLWVsZW1lbnRzLW1hbmlmZXN0L2lzc3Vlcy8yNTNcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIHdpbGxPcGVuOiAnd2lsbE9wZW4nLFxuICAgIGRpZE9wZW46ICdkaWRPcGVuJyxcbiAgICB3aWxsQ2xvc2U6ICd3aWxsQ2xvc2UnLFxuICAgIGRpZENsb3NlOiAnZGlkQ2xvc2UnLFxuICB9IGFzIGNvbnN0O1xuXG4gIC8qKiBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcGFuZWwuICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBjb2xvcjogJ3doaXRlJyB8ICdtaWxrJyA9ICd3aGl0ZSc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGNvbnRlbnQgc2VjdGlvbiBpcyBhbHdheXMgdmlzaWJsZS4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZm9yY2Utb3BlbicsIHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIGZvcmNlT3BlbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSB1bnNlbGVjdGVkIHBhbmVsIGhhcyBhIGJvcmRlci4gKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KSBwdWJsaWMgYm9yZGVybGVzcyA9IGZhbHNlO1xuXG4gIC8qKiBUaGUgc3RhdGUgb2YgdGhlIHNlbGVjdGlvbiBwYW5lbC4gKi9cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBzZXQgX3N0YXRlKHN0YXRlOiBTYmJPcGVuZWRDbG9zZWRTdGF0ZSkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdkYXRhLXN0YXRlJywgc3RhdGUpO1xuICB9XG4gIHByaXZhdGUgZ2V0IF9zdGF0ZSgpOiBTYmJPcGVuZWRDbG9zZWRTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLXN0YXRlJykgYXMgU2JiT3BlbmVkQ2xvc2VkU3RhdGU7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgc2VsZWN0aW9uIHBhbmVsIGlzIGNoZWNrZWQuICovXG4gIHByaXZhdGUgc2V0IF9jaGVja2VkKGNoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1jaGVja2VkJywgY2hlY2tlZCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgX2NoZWNrZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKCdkYXRhLWNoZWNrZWQnKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gcGFuZWwgaXMgZGlzYWJsZWQuICovXG4gIHByaXZhdGUgc2V0IF9kaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWRpc2FibGVkJywgZGlzYWJsZWQpO1xuICB9XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBjb250ZW50IHNlY3Rpb24gc3RhcnRzIHRoZSBvcGVuaW5nIHRyYW5zaXRpb24uICovXG4gIHByaXZhdGUgX3dpbGxPcGVuOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiU2VsZWN0aW9uRXhwYW5zaW9uUGFuZWxFbGVtZW50LmV2ZW50cy53aWxsT3BlbixcbiAgKTtcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGNvbnRlbnQgc2VjdGlvbiBpcyBvcGVuZWQuICovXG4gIHByaXZhdGUgX2RpZE9wZW46IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJTZWxlY3Rpb25FeHBhbnNpb25QYW5lbEVsZW1lbnQuZXZlbnRzLmRpZE9wZW4sXG4gICk7XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBjb250ZW50IHNlY3Rpb24gYmVnaW5zIHRoZSBjbG9zaW5nIHRyYW5zaXRpb24uICovXG4gIHByaXZhdGUgX3dpbGxDbG9zZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYlNlbGVjdGlvbkV4cGFuc2lvblBhbmVsRWxlbWVudC5ldmVudHMud2lsbENsb3NlLFxuICApO1xuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgY29udGVudCBzZWN0aW9uIGlzIGNsb3NlZC4gKi9cbiAgcHJpdmF0ZSBfZGlkQ2xvc2U6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJTZWxlY3Rpb25FeHBhbnNpb25QYW5lbEVsZW1lbnQuZXZlbnRzLmRpZENsb3NlLFxuICApO1xuXG4gIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfYWJvcnQgPSBuZXcgU2JiQ29ubmVjdGVkQWJvcnRDb250cm9sbGVyKHRoaXMpO1xuICBwcml2YXRlIF9pbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGl0IGhhcyBhbiBleHBhbmRhYmxlIGNvbnRlbnRcbiAgICovXG4gIHByaXZhdGUgZ2V0IF9oYXNDb250ZW50KCk6IGJvb2xlYW4ge1xuICAgIC8vIFdlIGNhbm5vdCB1c2UgdGhlIE5hbWVkU2xvdHMgYmVjYXVzZSBpdCdzIHRvbyBzbG93IHRvIGluaXRpYWxpemVcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ1tzbG90PVwiY29udGVudFwiXScpLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncGFuZWxDb25uZWN0ZWQnLCB0aGlzLl9pbml0RnJvbUlucHV0LmJpbmQodGhpcyksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fYWJvcnQuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fc3RhdGUgfHw9ICdjbG9zZWQnO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdmb3JjZU9wZW4nKSkge1xuICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2hhc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mb3JjZU9wZW4gfHwgdGhpcy5fY2hlY2tlZCkge1xuICAgICAgdGhpcy5fb3BlbighdGhpcy5faW5pdGlhbGl6ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jbG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLl91cGRhdGVFeHBhbmRlZExhYmVsKHRoaXMuZm9yY2VPcGVuIHx8IHRoaXMuX2NoZWNrZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb3Blbihza2lwQW5pbWF0aW9uID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgIT09ICdjbG9zZWQnICYmIHRoaXMuX3N0YXRlICE9PSAnY2xvc2luZycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9ICdvcGVuaW5nJztcbiAgICB0aGlzLl93aWxsT3Blbi5lbWl0KCk7XG5cbiAgICBpZiAoc2tpcEFuaW1hdGlvbikge1xuICAgICAgdGhpcy5fc3RhdGUgPSAnb3BlbmVkJztcbiAgICAgIHRoaXMuX2RpZE9wZW4uZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Nsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gJ29wZW5lZCcgJiYgdGhpcy5fc3RhdGUgIT09ICdvcGVuaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gJ2Nsb3NpbmcnO1xuICAgIHRoaXMuX3dpbGxDbG9zZS5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0RnJvbUlucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIFNiYkNoZWNrYm94UGFuZWxFbGVtZW50IHwgU2JiUmFkaW9CdXR0b25QYW5lbEVsZW1lbnQ7XG5cbiAgICB0aGlzLl9jaGVja2VkID0gaW5wdXQuY2hlY2tlZDtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGlucHV0LmRpc2FibGVkO1xuICAgIHRoaXMuX3VwZGF0ZVN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF9vbklucHV0U3RhdGVDaGFuZ2UoZXZlbnQ6IEN1c3RvbUV2ZW50PFNiYlN0YXRlQ2hhbmdlPik6IHZvaWQge1xuICAgIGlmIChldmVudC5kZXRhaWwudHlwZSA9PT0gJ2Rpc2FibGVkJykge1xuICAgICAgdGhpcy5fZGlzYWJsZWQgPSBldmVudC5kZXRhaWwuZGlzYWJsZWQ7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChldmVudC5kZXRhaWwudHlwZSAhPT0gJ2NoZWNrZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2hlY2tlZCA9IGV2ZW50LmRldGFpbC5jaGVja2VkO1xuICAgIHRoaXMuX3VwZGF0ZVN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF9vbkFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4tb3BhY2l0eScgJiYgdGhpcy5fc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5fc3RhdGUgPSAnb3BlbmVkJztcbiAgICAgIHRoaXMuX2RpZE9wZW4uZW1pdCgpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLl9zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLl9zdGF0ZSA9ICdjbG9zZWQnO1xuICAgICAgdGhpcy5fZGlkQ2xvc2UuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3VwZGF0ZUV4cGFuZGVkTGFiZWwob3BlbjogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuaHlkcmF0aW9uQ29tcGxldGU7XG5cbiAgICBjb25zdCBwYW5lbEVsZW1lbnQgPSB0aGlzLnF1ZXJ5U2VsZWN0b3I8U2JiUmFkaW9CdXR0b25QYW5lbEVsZW1lbnQgfCBTYmJDaGVja2JveFBhbmVsRWxlbWVudD4oXG4gICAgICAnc2JiLXJhZGlvLWJ1dHRvbi1wYW5lbCwgc2JiLWNoZWNrYm94LXBhbmVsJyxcbiAgICApO1xuICAgIGlmICghcGFuZWxFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9oYXNDb250ZW50KSB7XG4gICAgICBwYW5lbEVsZW1lbnQuZXhwYW5zaW9uU3RhdGUgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwYW5lbEVsZW1lbnQuZXhwYW5zaW9uU3RhdGUgPSBvcGVuXG4gICAgICA/ICcsICcgKyBpMThuRXhwYW5kZWRbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF1cbiAgICAgIDogJywgJyArIGkxOG5Db2xsYXBzZWRbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF07XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0aW9uLWV4cGFuc2lvbi1wYW5lbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdGlvbi1leHBhbnNpb24tcGFuZWxfX2lucHV0XCIgQHN0YXRlQ2hhbmdlPSR7dGhpcy5fb25JbnB1dFN0YXRlQ2hhbmdlfT5cbiAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJzYmItc2VsZWN0aW9uLWV4cGFuc2lvbi1wYW5lbF9fY29udGVudC0td3JhcHBlclwiXG4gICAgICAgICAgLmluZXJ0PSR7dGhpcy5fc3RhdGUgIT09ICdvcGVuZWQnfVxuICAgICAgICAgIEBhbmltYXRpb25lbmQ9JHsoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSA9PiB0aGlzLl9vbkFuaW1hdGlvbkVuZChldmVudCl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdGlvbi1leHBhbnNpb24tcGFuZWxfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgIDxzYmItZGl2aWRlcj48L3NiYi1kaXZpZGVyPlxuICAgICAgICAgICAgPHNsb3QgbmFtZT1cImNvbnRlbnRcIj48L3Nsb3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXNlbGVjdGlvbi1leHBhbnNpb24tcGFuZWwnOiBTYmJTZWxlY3Rpb25FeHBhbnNpb25QYW5lbEVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJzdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZCTyxJQUFNLG9DQUFOLGNBQWdELGtCQUFrQixVQUFVLEVBQUU7QUFBQSxFQUE5RSxjQUFBO0FBQUEsVUFBQSxHQUFBLFNBQUE7QUFXTyxTQUFPLFFBQTBCO0FBR1MsU0FBTyxZQUFZO0FBRzdCLFNBQU8sYUFBYTtBQXlCaEUsU0FBUSxZQUFnQyxJQUFJO0FBQUEsTUFDMUM7QUFBQSxNQUNBLGtDQUFrQyxPQUFPO0FBQUEsSUFBQTtBQUkzQyxTQUFRLFdBQStCLElBQUk7QUFBQSxNQUN6QztBQUFBLE1BQ0Esa0NBQWtDLE9BQU87QUFBQSxJQUFBO0FBSTNDLFNBQVEsYUFBaUMsSUFBSTtBQUFBLE1BQzNDO0FBQUEsTUFDQSxrQ0FBa0MsT0FBTztBQUFBLElBQUE7QUFJM0MsU0FBUSxZQUFnQyxJQUFJO0FBQUEsTUFDMUM7QUFBQSxNQUNBLGtDQUFrQyxPQUFPO0FBQUEsSUFBQTtBQUduQyxTQUFBLFlBQVksSUFBSSxzQkFBc0IsSUFBSTtBQUMxQyxTQUFBLFNBQVMsSUFBSSw0QkFBNEIsSUFBSTtBQUNyRCxTQUFRLGVBQXdCO0FBQUEsRUFBQTtBQUFBLEVBOUNoQyxJQUFZLE9BQU9BLFFBQTZC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
@@ -1,6 +1,5 @@
1
1
  import { CSSResultGroup, TemplateResult, LitElement } from 'lit';
2
2
  import { SbbProtectiveRoom } from '../core/interfaces.js';
3
-
4
3
  /**
5
4
  * It displays the SBB signet.
6
5
  */
@@ -27,11 +27,11 @@ const style = css`/**
27
27
  }
28
28
 
29
29
  :host {
30
+ display: block;
30
31
  --sbb-signet-background-color: var(--sbb-color-red);
31
32
  --sbb-signet-icon-color: var(--sbb-color-white);
32
33
  --sbb-signet-aspect-ratio: 2 / 1;
33
34
  --sbb-signet-svg-container-height: auto;
34
- display: block;
35
35
  }
36
36
  @media (forced-colors: active) {
37
37
  :host {
@@ -2,7 +2,6 @@ import { CSSResultGroup, LitElement, PropertyValues, TemplateResult } from 'lit'
2
2
  import { WithListChildren } from '../core/mixins.js';
3
3
  import { SbbBlockLinkButtonElement, SbbBlockLinkElement } from '../link.js';
4
4
  import { SbbTitleLevel } from '../title.js';
5
-
6
5
  declare const SbbSkiplinkListElement_base: import('../core/mixins.js').AbstractConstructor<import('../core/mixins.js').SbbNamedSlotListMixinType<SbbBlockLinkElement | SbbBlockLinkButtonElement>> & typeof LitElement;
7
6
  /**
8
7
  * It displays a list of `sbb-block-link`/`sbb-block-link-button` which are visible only when focused.
@@ -1,5 +1,4 @@
1
1
  import { CSSResultGroup, PropertyValues, TemplateResult, LitElement } from 'lit';
2
-
3
2
  declare const SbbSliderElement_base: import('../core/mixins.js').AbstractConstructor<import('../core/mixins.js').SbbDisabledMixinType> & typeof LitElement;
4
3
  /**
5
4
  * It displays an input knob that can be moved in a range.
@@ -36,6 +36,10 @@ const style = css`@charset "UTF-8";
36
36
  }
37
37
 
38
38
  :host {
39
+ outline: none !important;
40
+ display: inline-block;
41
+ min-width: 9.375rem;
42
+ width: min(25rem, 100%);
39
43
  --sbb-slider-line-height: 0.25rem;
40
44
  --sbb-slider-value-fraction: 0;
41
45
  --sbb-slider-knob-size: 1.75rem;
@@ -49,10 +53,6 @@ const style = css`@charset "UTF-8";
49
53
  --sbb-slider-selected-line-disabled-color: var(--sbb-color-smoke);
50
54
  --sbb-slider-line-color: var(--sbb-color-smoke);
51
55
  --sbb-slider-line-disabled-color: var(--sbb-color-graphite);
52
- outline: none !important;
53
- display: inline-block;
54
- min-width: 9.375rem;
55
- width: min(25rem, 100%);
56
56
  }
57
57
  @media (forced-colors: active) {
58
58
  :host {
@@ -1,6 +1,5 @@
1
1
  import { CSSResultGroup, TemplateResult, LitElement } from 'lit';
2
2
  import { SbbTitleLevel } from '../title.js';
3
-
4
3
  export type SbbStatusType = 'info' | 'success' | 'warning' | 'error' | 'pending' | 'incomplete' | 'not-started' | 'in-progress';
5
4
  declare const SbbStatusElement_base: import('../core/mixins.js').AbstractConstructor<import('../icon.js').SbbIconNameMixinType> & typeof LitElement;
6
5
  /**
@@ -1,6 +1,5 @@
1
1
  import { CSSResultGroup, LitElement, TemplateResult, PropertyValues } from 'lit';
2
2
  import { SbbStepLabelElement } from '../step-label.js';
3
-
4
3
  export type SbbStepValidateEventDetails = {
5
4
  currentIndex?: number;
6
5
  currentStep?: SbbStepElement;
@@ -1,7 +1,6 @@
1
1
  import { CSSResultGroup, TemplateResult, PropertyValues } from 'lit';
2
2
  import { SbbButtonBaseElement } from '../../core/base-elements.js';
3
3
  import { SbbStepElement } from '../step.js';
4
-
5
4
  declare const SbbStepLabelElement_base: import('../../core/mixins.js').AbstractConstructor<import('../../icon.js').SbbIconNameMixinType> & import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbDisabledMixinType> & typeof SbbButtonBaseElement;
6
5
  /**
7
6
  * Combined with a `sbb-stepper`, it displays a step's label.
@@ -1,7 +1,6 @@
1
1
  import { CSSResultGroup, LitElement, TemplateResult, PropertyValues } from 'lit';
2
2
  import { SbbHorizontalFrom, SbbOrientation } from '../../core/interfaces.js';
3
3
  import { SbbStepElement } from '../step.js';
4
-
5
4
  declare const SbbStepperElement_base: import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbHydrationMixinType> & typeof LitElement;
6
5
  /**
7
6
  * Provides a structured, step-by-step workflow for user interactions.
@@ -1,5 +1,4 @@
1
1
  import { CSSResultGroup, LitElement, PropertyValues, TemplateResult } from 'lit';
2
-
3
2
  declare const SbbTableWrapperElement_base: import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbNegativeMixinType> & typeof LitElement;
4
3
  /**
5
4
  * Wraps a table to enhance its functionality
@@ -1,6 +1,5 @@
1
1
  import { CSSResultGroup, TemplateResult, LitElement } from 'lit';
2
2
  import { SbbTabLabelElement } from '../tab-label.js';
3
-
4
3
  /**
5
4
  * Combined with a `sbb-tab-group`, it displays a tab's content.
6
5
  *
@@ -1,7 +1,6 @@
1
1
  import { CSSResultGroup, PropertyValues, TemplateResult, LitElement } from 'lit';
2
2
  import { SbbTabLabelElement } from '../tab-label.js';
3
3
  import { SbbTabElement } from '../tab.js';
4
-
5
4
  export type SbbTabChangedEventDetails = {
6
5
  activeIndex: number;
7
6
  activeTabLabel: SbbTabLabelElement;
@@ -1,6 +1,5 @@
1
1
  import { CSSResultGroup, TemplateResult, LitElement } from 'lit';
2
2
  import { SbbTitleLevel } from '../../title.js';
3
-
4
3
  declare const SbbTabLabelElement_base: import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbDisabledMixinType> & import('../../core/mixins.js').AbstractConstructor<import('../../icon.js').SbbIconNameMixinType> & typeof LitElement;
5
4
  /**
6
5
  * Combined with a `sbb-tab-group`, it displays a tab's title.
@@ -173,6 +173,13 @@ const style = css`/**
173
173
  }
174
174
 
175
175
  .sbb-tab-label__text {
176
+ color: var(--sbb-tab-label-color);
177
+ transition: color var(--sbb-tab-label-animation-duration) var(--sbb-tab-label-animation-easing);
178
+ -webkit-font-smoothing: antialiased;
179
+ -moz-osx-font-smoothing: grayscale;
180
+ overflow: hidden;
181
+ white-space: nowrap;
182
+ text-overflow: ellipsis;
176
183
  --sbb-text-font-size: var(--sbb-font-size-text-m);
177
184
  font-family: var(--sbb-typo-font-family);
178
185
  font-weight: normal;
@@ -180,13 +187,6 @@ const style = css`/**
180
187
  letter-spacing: var(--sbb-typo-letter-spacing-body-text);
181
188
  font-size: var(--sbb-text-font-size);
182
189
  font-weight: bold;
183
- -webkit-font-smoothing: antialiased;
184
- -moz-osx-font-smoothing: grayscale;
185
- overflow: hidden;
186
- white-space: nowrap;
187
- text-overflow: ellipsis;
188
- color: var(--sbb-tab-label-color);
189
- transition: color var(--sbb-tab-label-animation-duration) var(--sbb-tab-label-animation-easing);
190
190
  }
191
191
  :host([data-size=s]) .sbb-tab-label__text {
192
192
  --sbb-text-font-size: var(--sbb-font-size-text-s);
@@ -208,6 +208,9 @@ const style = css`/**
208
208
  }
209
209
 
210
210
  .sbb-tab-label__amount {
211
+ display: flex;
212
+ color: var(--sbb-tab-label-amount-color);
213
+ transition: color var(--sbb-tab-label-animation-duration) var(--sbb-tab-label-animation-easing);
211
214
  --sbb-text-font-size: var(--sbb-font-size-text-m);
212
215
  font-family: var(--sbb-typo-font-family);
213
216
  font-weight: normal;
@@ -216,9 +219,6 @@ const style = css`/**
216
219
  font-size: var(--sbb-text-font-size);
217
220
  -webkit-font-smoothing: antialiased;
218
221
  -moz-osx-font-smoothing: grayscale;
219
- display: flex;
220
- color: var(--sbb-tab-label-amount-color);
221
- transition: color var(--sbb-tab-label-animation-duration) var(--sbb-tab-label-animation-easing);
222
222
  }
223
223
  :host(:not([data-slot-names~=amount], [amount])) .sbb-tab-label__amount {
224
224
  display: none;
@@ -1,6 +1,5 @@
1
1
  import { CSSResultGroup, PropertyValues, TemplateResult } from 'lit';
2
2
  import { SbbButtonBaseElement } from '../../core/base-elements.js';
3
-
4
3
  export type SbbTagSize = 's' | 'm';
5
4
  declare const SbbTagElement_base: import('../../core/mixins.js').AbstractConstructor<import('../../icon.js').SbbIconNameMixinType> & import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbDisabledMixinType> & typeof SbbButtonBaseElement;
6
5
  /**
@@ -1,7 +1,6 @@
1
1
  import { CSSResultGroup, LitElement, PropertyValues, TemplateResult } from 'lit';
2
2
  import { WithListChildren } from '../../core/mixins.js';
3
3
  import { SbbTagElement, SbbTagSize } from '../tag.js';
4
-
5
4
  declare const SbbTagGroupElement_base: import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbNamedSlotListMixinType<SbbTagElement>> & typeof LitElement;
6
5
  /**
7
6
  * It can be used as a container for one or more `sbb-tag`.
@@ -33,6 +33,9 @@ const style = css`/**
33
33
  }
34
34
 
35
35
  :host {
36
+ display: inline-block;
37
+ outline: none !important;
38
+ max-width: 100%;
36
39
  --sbb-tag-border-radius: var(--sbb-border-radius-infinity);
37
40
  --sbb-tag-background-color: var(--sbb-color-white);
38
41
  --sbb-tag-border-color: var(--sbb-color-cloud);
@@ -50,9 +53,6 @@ const style = css`/**
50
53
  --sbb-tag-animation-easing: var(--sbb-animation-easing);
51
54
  --sbb-tag-padding-inline: var(--sbb-spacing-fixed-5x);
52
55
  --sbb-tag-gap: var(--sbb-spacing-fixed-2x);
53
- display: inline-block;
54
- outline: none !important;
55
- max-width: 100%;
56
56
  }
57
57
  @media (forced-colors: active) {
58
58
  :host {
@@ -1,7 +1,6 @@
1
1
  import { CSSResultGroup, TemplateResult } from 'lit';
2
2
  import { SbbLinkBaseElement } from '../core/base-elements.js';
3
3
  import { SbbTitleLevel } from '../title.js';
4
-
5
4
  /**
6
5
  * It displays an interactive image with caption.
7
6
  *