@sbb-esta/lyne-elements 3.0.1 → 3.2.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 (274) hide show
  1. package/autocomplete/autocomplete.component.d.ts.map +1 -1
  2. package/autocomplete/autocomplete.component.js +1 -1
  3. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.d.ts.map +1 -1
  4. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +4 -4
  5. package/button/accent-button/accent-button.component.d.ts +2 -1
  6. package/button/accent-button/accent-button.component.d.ts.map +1 -1
  7. package/button/accent-button-link/accent-button-link.component.d.ts +2 -1
  8. package/button/accent-button-link/accent-button-link.component.d.ts.map +1 -1
  9. package/button/accent-button-static/accent-button-static.component.d.ts +2 -1
  10. package/button/accent-button-static/accent-button-static.component.d.ts.map +1 -1
  11. package/button/button/button.component.d.ts +2 -1
  12. package/button/button/button.component.d.ts.map +1 -1
  13. package/button/button-link/button-link.component.d.ts +2 -1
  14. package/button/button-link/button-link.component.d.ts.map +1 -1
  15. package/button/button-static/button-static.component.d.ts +2 -1
  16. package/button/button-static/button-static.component.d.ts.map +1 -1
  17. package/button/common/button-common.d.ts +1 -0
  18. package/button/common/button-common.d.ts.map +1 -1
  19. package/button/common/button-common.js +52 -28
  20. package/button/common.js +1 -1
  21. package/button/mini-button/mini-button.component.d.ts +1 -0
  22. package/button/mini-button/mini-button.component.d.ts.map +1 -1
  23. package/button/mini-button/mini-button.component.js +20 -14
  24. package/button/secondary-button/secondary-button.component.d.ts +2 -1
  25. package/button/secondary-button/secondary-button.component.d.ts.map +1 -1
  26. package/button/secondary-button-link/secondary-button-link.component.d.ts +2 -1
  27. package/button/secondary-button-link/secondary-button-link.component.d.ts.map +1 -1
  28. package/button/secondary-button-static/secondary-button-static.component.d.ts +2 -1
  29. package/button/secondary-button-static/secondary-button-static.component.d.ts.map +1 -1
  30. package/button/transparent-button/transparent-button.component.d.ts +2 -1
  31. package/button/transparent-button/transparent-button.component.d.ts.map +1 -1
  32. package/button/transparent-button-link/transparent-button-link.component.d.ts +2 -1
  33. package/button/transparent-button-link/transparent-button-link.component.d.ts.map +1 -1
  34. package/button/transparent-button-static/transparent-button-static.component.d.ts +2 -1
  35. package/button/transparent-button-static/transparent-button-static.component.d.ts.map +1 -1
  36. package/button.js +1 -1
  37. package/checkbox/checkbox-group/checkbox-group.component.d.ts.map +1 -1
  38. package/checkbox/checkbox-group/checkbox-group.component.js +4 -4
  39. package/checkbox/checkbox-panel/checkbox-panel.component.d.ts +3 -0
  40. package/checkbox/checkbox-panel/checkbox-panel.component.d.ts.map +1 -1
  41. package/core/a11y/live-announcer.d.ts.map +1 -1
  42. package/core/a11y/live-announcer.js +10 -8
  43. package/core/base-elements/link-base-element.d.ts +1 -0
  44. package/core/base-elements/link-base-element.d.ts.map +1 -1
  45. package/core/base-elements/link-base-element.js +18 -17
  46. package/core/config/config.d.ts +5 -0
  47. package/core/config/config.d.ts.map +1 -1
  48. package/core/mixins/selection-panel-mixin.d.ts +23 -0
  49. package/core/mixins/selection-panel-mixin.d.ts.map +1 -0
  50. package/core/mixins/selection-panel-mixin.js +87 -0
  51. package/core/mixins.d.ts +1 -0
  52. package/core/mixins.d.ts.map +1 -1
  53. package/core/mixins.js +12 -10
  54. package/core/styles/_index.scss +1 -0
  55. package/core/styles/core.scss +44 -15
  56. package/core/styles/mixins/popover.scss +14 -0
  57. package/core.css +22 -1
  58. package/custom-elements.json +3603 -913
  59. package/development/autocomplete/autocomplete.component.d.ts.map +1 -1
  60. package/development/autocomplete/autocomplete.component.js +2 -2
  61. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.d.ts.map +1 -1
  62. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +2 -2
  63. package/development/button/accent-button/accent-button.component.d.ts +2 -1
  64. package/development/button/accent-button/accent-button.component.d.ts.map +1 -1
  65. package/development/button/accent-button/accent-button.component.js +1 -1
  66. package/development/button/accent-button-link/accent-button-link.component.d.ts +2 -1
  67. package/development/button/accent-button-link/accent-button-link.component.d.ts.map +1 -1
  68. package/development/button/accent-button-link/accent-button-link.component.js +1 -1
  69. package/development/button/accent-button-static/accent-button-static.component.d.ts +2 -1
  70. package/development/button/accent-button-static/accent-button-static.component.d.ts.map +1 -1
  71. package/development/button/accent-button-static/accent-button-static.component.js +1 -1
  72. package/development/button/button/button.component.d.ts +2 -1
  73. package/development/button/button/button.component.d.ts.map +1 -1
  74. package/development/button/button/button.component.js +1 -1
  75. package/development/button/button-link/button-link.component.d.ts +2 -1
  76. package/development/button/button-link/button-link.component.d.ts.map +1 -1
  77. package/development/button/button-link/button-link.component.js +1 -1
  78. package/development/button/button-static/button-static.component.d.ts +2 -1
  79. package/development/button/button-static/button-static.component.d.ts.map +1 -1
  80. package/development/button/button-static/button-static.component.js +1 -1
  81. package/development/button/common/button-common.d.ts +1 -0
  82. package/development/button/common/button-common.d.ts.map +1 -1
  83. package/development/button/common/button-common.js +42 -5
  84. package/development/button/common.js +1 -1
  85. package/development/button/mini-button/mini-button.component.d.ts +1 -0
  86. package/development/button/mini-button/mini-button.component.d.ts.map +1 -1
  87. package/development/button/mini-button/mini-button.component.js +41 -2
  88. package/development/button/secondary-button/secondary-button.component.d.ts +2 -1
  89. package/development/button/secondary-button/secondary-button.component.d.ts.map +1 -1
  90. package/development/button/secondary-button/secondary-button.component.js +1 -1
  91. package/development/button/secondary-button-link/secondary-button-link.component.d.ts +2 -1
  92. package/development/button/secondary-button-link/secondary-button-link.component.d.ts.map +1 -1
  93. package/development/button/secondary-button-link/secondary-button-link.component.js +1 -1
  94. package/development/button/secondary-button-static/secondary-button-static.component.d.ts +2 -1
  95. package/development/button/secondary-button-static/secondary-button-static.component.d.ts.map +1 -1
  96. package/development/button/secondary-button-static/secondary-button-static.component.js +1 -1
  97. package/development/button/transparent-button/transparent-button.component.d.ts +2 -1
  98. package/development/button/transparent-button/transparent-button.component.d.ts.map +1 -1
  99. package/development/button/transparent-button/transparent-button.component.js +1 -1
  100. package/development/button/transparent-button-link/transparent-button-link.component.d.ts +2 -1
  101. package/development/button/transparent-button-link/transparent-button-link.component.d.ts.map +1 -1
  102. package/development/button/transparent-button-link/transparent-button-link.component.js +1 -1
  103. package/development/button/transparent-button-static/transparent-button-static.component.d.ts +2 -1
  104. package/development/button/transparent-button-static/transparent-button-static.component.d.ts.map +1 -1
  105. package/development/button/transparent-button-static/transparent-button-static.component.js +1 -1
  106. package/development/button.js +1 -1
  107. package/development/checkbox/checkbox-group/checkbox-group.component.d.ts.map +1 -1
  108. package/development/checkbox/checkbox-group/checkbox-group.component.js +2 -2
  109. package/development/checkbox/checkbox-panel/checkbox-panel.component.d.ts +3 -0
  110. package/development/checkbox/checkbox-panel/checkbox-panel.component.d.ts.map +1 -1
  111. package/development/checkbox/checkbox-panel/checkbox-panel.component.js +1 -1
  112. package/development/core/a11y/live-announcer.d.ts.map +1 -1
  113. package/development/core/a11y/live-announcer.js +10 -6
  114. package/development/core/base-elements/link-base-element.d.ts +1 -0
  115. package/development/core/base-elements/link-base-element.d.ts.map +1 -1
  116. package/development/core/base-elements/link-base-element.js +3 -1
  117. package/development/core/config/config.d.ts +5 -0
  118. package/development/core/config/config.d.ts.map +1 -1
  119. package/development/core/config/config.js +1 -1
  120. package/development/core/mixins/selection-panel-mixin.d.ts +23 -0
  121. package/development/core/mixins/selection-panel-mixin.d.ts.map +1 -0
  122. package/development/core/mixins/selection-panel-mixin.js +120 -0
  123. package/development/core/mixins.d.ts +1 -0
  124. package/development/core/mixins.d.ts.map +1 -1
  125. package/development/core/mixins.js +7 -5
  126. package/development/dialog/dialog/dialog.component.d.ts +4 -2
  127. package/development/dialog/dialog/dialog.component.d.ts.map +1 -1
  128. package/development/dialog/dialog/dialog.component.js +61 -11
  129. package/development/dialog/dialog-actions/dialog-actions.component.d.ts +1 -0
  130. package/development/dialog/dialog-actions/dialog-actions.component.d.ts.map +1 -1
  131. package/development/dialog/dialog-actions/dialog-actions.component.js +10 -1
  132. package/development/dialog/dialog-close-button/dialog-close-button.component.d.ts +22 -0
  133. package/development/dialog/dialog-close-button/dialog-close-button.component.d.ts.map +1 -0
  134. package/development/dialog/dialog-close-button/dialog-close-button.component.js +53 -0
  135. package/development/dialog/dialog-close-button.d.ts +5 -0
  136. package/development/dialog/dialog-close-button.d.ts.map +1 -0
  137. package/development/dialog/dialog-close-button.js +5 -0
  138. package/development/dialog/dialog-content/dialog-content.component.js +1 -1
  139. package/development/dialog/dialog-title/dialog-title.component.d.ts +1 -0
  140. package/development/dialog/dialog-title/dialog-title.component.d.ts.map +1 -1
  141. package/development/dialog/dialog-title/dialog-title.component.js +6 -2
  142. package/development/dialog.d.ts +1 -0
  143. package/development/dialog.d.ts.map +1 -1
  144. package/development/dialog.js +3 -1
  145. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +3 -2
  146. package/development/form-field/form-field/form-field.component.d.ts +23 -1
  147. package/development/form-field/form-field/form-field.component.d.ts.map +1 -1
  148. package/development/form-field/form-field/form-field.component.js +39 -12
  149. package/development/form-field/form-field.js +2 -1
  150. package/development/form-field.js +2 -1
  151. package/development/header/header-environment/header-environment.component.d.ts +23 -0
  152. package/development/header/header-environment/header-environment.component.d.ts.map +1 -0
  153. package/development/header/header-environment/header-environment.component.js +111 -0
  154. package/development/header/header-environment.d.ts +5 -0
  155. package/development/header/header-environment.d.ts.map +1 -0
  156. package/development/header/header-environment.js +5 -0
  157. package/development/menu/menu/menu.component.d.ts +1 -0
  158. package/development/menu/menu/menu.component.d.ts.map +1 -1
  159. package/development/menu/menu/menu.component.js +2 -2
  160. package/development/menu/menu-button/menu-button.component.d.ts +1 -0
  161. package/development/menu/menu-button/menu-button.component.d.ts.map +1 -1
  162. package/development/menu/menu-button/menu-button.component.js +2 -3
  163. package/development/menu/menu-link/menu-link.component.d.ts +1 -0
  164. package/development/menu/menu-link/menu-link.component.d.ts.map +1 -1
  165. package/development/menu/menu-link/menu-link.component.js +5 -1
  166. package/development/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  167. package/development/option/optgroup/optgroup-base-element.js +8 -6
  168. package/development/option/option-hint/option-hint.component.d.ts +18 -0
  169. package/development/option/option-hint/option-hint.component.d.ts.map +1 -0
  170. package/development/option/option-hint/option-hint.component.js +74 -0
  171. package/development/option/option-hint.d.ts +5 -0
  172. package/development/option/option-hint.d.ts.map +1 -0
  173. package/development/option/option-hint.js +5 -0
  174. package/development/option.d.ts +1 -0
  175. package/development/option.d.ts.map +1 -1
  176. package/development/option.js +4 -2
  177. package/development/overlay/overlay-base-element.d.ts +1 -0
  178. package/development/overlay/overlay-base-element.d.ts.map +1 -1
  179. package/development/overlay/overlay-base-element.js +3 -3
  180. package/development/popover/popover/popover.component.d.ts +18 -4
  181. package/development/popover/popover/popover.component.d.ts.map +1 -1
  182. package/development/popover/popover/popover.component.js +35 -30
  183. package/development/radio-button/radio-button-panel/radio-button-panel.component.d.ts +6 -3
  184. package/development/radio-button/radio-button-panel/radio-button-panel.component.d.ts.map +1 -1
  185. package/development/radio-button/radio-button-panel/radio-button-panel.component.js +7 -7
  186. package/development/select/select.component.d.ts.map +1 -1
  187. package/development/select/select.component.js +2 -2
  188. package/development/selection-action-panel/selection-action-panel.component.d.ts +22 -0
  189. package/development/selection-action-panel/selection-action-panel.component.d.ts.map +1 -0
  190. package/development/selection-action-panel/selection-action-panel.component.js +105 -0
  191. package/development/selection-action-panel.d.ts +5 -0
  192. package/development/selection-action-panel.d.ts.map +1 -0
  193. package/development/selection-action-panel.js +5 -0
  194. package/development/selection-expansion-panel/selection-expansion-panel.component.d.ts +4 -24
  195. package/development/selection-expansion-panel/selection-expansion-panel.component.d.ts.map +1 -1
  196. package/development/selection-expansion-panel/selection-expansion-panel.component.js +26 -106
  197. package/development/{transparent-button-Ddb_s0a0.js → transparent-button-Dun6bh2G.js} +89 -8
  198. package/dialog/dialog/dialog.component.d.ts +4 -2
  199. package/dialog/dialog/dialog.component.d.ts.map +1 -1
  200. package/dialog/dialog/dialog.component.js +63 -56
  201. package/dialog/dialog-actions/dialog-actions.component.d.ts +1 -0
  202. package/dialog/dialog-actions/dialog-actions.component.d.ts.map +1 -1
  203. package/dialog/dialog-actions/dialog-actions.component.js +13 -9
  204. package/dialog/dialog-close-button/dialog-close-button.component.d.ts +22 -0
  205. package/dialog/dialog-close-button/dialog-close-button.component.d.ts.map +1 -0
  206. package/dialog/dialog-close-button/dialog-close-button.component.js +31 -0
  207. package/dialog/dialog-close-button.d.ts +5 -0
  208. package/dialog/dialog-close-button.d.ts.map +1 -0
  209. package/dialog/dialog-close-button.js +4 -0
  210. package/dialog/dialog-content/dialog-content.component.js +6 -6
  211. package/dialog/dialog-title/dialog-title.component.d.ts +1 -0
  212. package/dialog/dialog-title/dialog-title.component.d.ts.map +1 -1
  213. package/dialog/dialog-title/dialog-title.component.js +11 -8
  214. package/dialog.d.ts +1 -0
  215. package/dialog.d.ts.map +1 -1
  216. package/dialog.js +6 -4
  217. package/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +7 -7
  218. package/form-field/form-field/form-field.component.d.ts +23 -1
  219. package/form-field/form-field/form-field.component.d.ts.map +1 -1
  220. package/form-field/form-field/form-field.component.js +52 -41
  221. package/form-field/form-field.js +3 -2
  222. package/form-field.js +5 -4
  223. package/header/header-environment/header-environment.component.d.ts +23 -0
  224. package/header/header-environment/header-environment.component.d.ts.map +1 -0
  225. package/header/header-environment/header-environment.component.js +37 -0
  226. package/header/header-environment.d.ts +5 -0
  227. package/header/header-environment.d.ts.map +1 -0
  228. package/header/header-environment.js +4 -0
  229. package/index.d.ts +8 -0
  230. package/index.js +8 -0
  231. package/menu/menu/menu.component.d.ts +1 -0
  232. package/menu/menu/menu.component.d.ts.map +1 -1
  233. package/menu/menu/menu.component.js +1 -1
  234. package/menu/menu-button/menu-button.component.d.ts +1 -0
  235. package/menu/menu-button/menu-button.component.d.ts.map +1 -1
  236. package/menu/menu-button/menu-button.component.js +8 -8
  237. package/menu/menu-link/menu-link.component.d.ts +1 -0
  238. package/menu/menu-link/menu-link.component.d.ts.map +1 -1
  239. package/menu/menu-link/menu-link.component.js +9 -6
  240. package/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  241. package/option/optgroup/optgroup-base-element.js +19 -17
  242. package/option/option-hint/option-hint.component.d.ts +18 -0
  243. package/option/option-hint/option-hint.component.d.ts.map +1 -0
  244. package/option/option-hint/option-hint.component.js +27 -0
  245. package/option/option-hint.d.ts +5 -0
  246. package/option/option-hint.d.ts.map +1 -0
  247. package/option/option-hint.js +4 -0
  248. package/option.d.ts +1 -0
  249. package/option.d.ts.map +1 -1
  250. package/option.js +5 -3
  251. package/overlay/overlay-base-element.d.ts +1 -0
  252. package/overlay/overlay-base-element.d.ts.map +1 -1
  253. package/overlay/overlay-base-element.js +21 -21
  254. package/package.json +23 -3
  255. package/popover/popover/popover.component.d.ts +18 -4
  256. package/popover/popover/popover.component.d.ts.map +1 -1
  257. package/popover/popover/popover.component.js +104 -95
  258. package/radio-button/radio-button-panel/radio-button-panel.component.d.ts +6 -3
  259. package/radio-button/radio-button-panel/radio-button-panel.component.d.ts.map +1 -1
  260. package/radio-button/radio-button-panel/radio-button-panel.component.js +9 -9
  261. package/select/select.component.d.ts.map +1 -1
  262. package/select/select.component.js +1 -1
  263. package/selection-action-panel/selection-action-panel.component.d.ts +22 -0
  264. package/selection-action-panel/selection-action-panel.component.d.ts.map +1 -0
  265. package/selection-action-panel/selection-action-panel.component.js +34 -0
  266. package/selection-action-panel.d.ts +5 -0
  267. package/selection-action-panel.d.ts.map +1 -0
  268. package/selection-action-panel.js +4 -0
  269. package/selection-expansion-panel/selection-expansion-panel.component.d.ts +4 -24
  270. package/selection-expansion-panel/selection-expansion-panel.component.d.ts.map +1 -1
  271. package/selection-expansion-panel/selection-expansion-panel.component.js +45 -102
  272. package/standard-theme.css +22 -1
  273. package/transparent-button-rf30m88X.js +9 -0
  274. package/transparent-button-BlbvexCb.js +0 -9
@@ -0,0 +1,53 @@
1
+ import { __esDecorate, __runInitializers } from "tslib";
2
+ import { customElement } from "lit/decorators.js";
3
+ import { SbbSecondaryButtonElement } from "../../button/secondary-button.js";
4
+ import { SbbLanguageController } from "../../core/controllers.js";
5
+ import { i18nCloseDialog } from "../../core/i18n.js";
6
+ import { css } from "lit";
7
+ const style = css`*,
8
+ ::before,
9
+ ::after {
10
+ box-sizing: border-box;
11
+ }
12
+
13
+ :host {
14
+ display: block;
15
+ height: fit-content;
16
+ }`;
17
+ let SbbDialogCloseButtonElement = (() => {
18
+ var _a;
19
+ let _classDecorators = [customElement("sbb-dialog-close-button")];
20
+ let _classDescriptor;
21
+ let _classExtraInitializers = [];
22
+ let _classThis;
23
+ let _classSuper = SbbSecondaryButtonElement;
24
+ _a = class extends _classSuper {
25
+ constructor() {
26
+ super();
27
+ this._languageController = new SbbLanguageController(this);
28
+ this.iconName = "cross-small";
29
+ this.size = "s";
30
+ }
31
+ connectedCallback() {
32
+ super.connectedCallback();
33
+ this.slot ||= "title-section";
34
+ }
35
+ willUpdate(changedProperties) {
36
+ super.willUpdate(changedProperties);
37
+ this.internals.ariaLabel = i18nCloseDialog[this._languageController.current];
38
+ }
39
+ renderTemplate() {
40
+ return super.renderIconSlot();
41
+ }
42
+ }, _classThis = _a, (() => {
43
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
44
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
45
+ _classThis = _classDescriptor.value;
46
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
47
+ })(), _a.styles = [SbbSecondaryButtonElement.styles, style], __runInitializers(_classThis, _classExtraInitializers), _a;
48
+ return _classThis;
49
+ })();
50
+ export {
51
+ SbbDialogCloseButtonElement
52
+ };
53
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWNsb3NlLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9kaWFsb2cvZGlhbG9nLWNsb3NlLWJ1dHRvbi9kaWFsb2ctY2xvc2UtYnV0dG9uLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBQcm9wZXJ0eVZhbHVlcywgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgU2JiU2Vjb25kYXJ5QnV0dG9uRWxlbWVudCB9IGZyb20gJy4uLy4uL2J1dHRvbi9zZWNvbmRhcnktYnV0dG9uLmpzJztcbmltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgaTE4bkNsb3NlRGlhbG9nIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLmpzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vZGlhbG9nLWNsb3NlLWJ1dHRvbi5zY3NzP2xpdCZpbmxpbmUnO1xuXG4vKipcbiAqIERpYWxvZyBjbG9zZSBidXR0b24sIGludGVuZGVkIHRvIGJlIHBsYWNlZCBpbnNpZGUgc2JiLWRpYWxvZy5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBjb250ZW50IHRvIHRoZSBkaWFsb2ctY2xvc2UtYnV0dG9uLiBOb3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiB0aGlzIGNvbnRleHQuXG4gKiBAc2xvdCBpY29uIC0gU2xvdCB1c2VkIHRvIGRpc3BsYXkgdGhlIGljb24sIGlmIG9uZSBpcyBzZXQuIE5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGluIHRoaXMgY29udGV4dC5cbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLWRpYWxvZy1jbG9zZS1idXR0b24nKVxuY2xhc3MgU2JiRGlhbG9nQ2xvc2VCdXR0b25FbGVtZW50IGV4dGVuZHMgU2JiU2Vjb25kYXJ5QnV0dG9uRWxlbWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtTYmJTZWNvbmRhcnlCdXR0b25FbGVtZW50LnN0eWxlcywgc3R5bGVdO1xuXG4gIHByaXZhdGUgX2xhbmd1YWdlQ29udHJvbGxlciA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5pY29uTmFtZSA9ICdjcm9zcy1zbWFsbCc7XG4gICAgdGhpcy5zaXplID0gJ3MnIGFzIHRoaXNbJ3NpemUnXTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2xvdCB8fD0gJ3RpdGxlLXNlY3Rpb24nO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgdGhpcy5pbnRlcm5hbHMuYXJpYUxhYmVsID0gaTE4bkNsb3NlRGlhbG9nW3RoaXMuX2xhbmd1YWdlQ29udHJvbGxlci5jdXJyZW50XTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXJUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIHN1cGVyLnJlbmRlckljb25TbG90KCk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1kaWFsb2ctY2xvc2UtYnV0dG9uJzogU2JiRGlhbG9nQ2xvc2VCdXR0b25FbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztJQWlCTSwrQkFBMkIsTUFBQTs7MEJBRGhDLGNBQWMseUJBQXlCLENBQUM7Ozs7b0JBQ0M7QUFBUixFQUFBLG1CQUFRLFlBQXlCO0FBQUEsSUFLakUsY0FBQTtBQUNFLFlBQUE7QUFITSxXQUFBLHNCQUFzQixJQUFJLHNCQUFzQixJQUFJO0FBSTFELFdBQUssV0FBVztBQUNoQixXQUFLLE9BQU87QUFBQSxJQUNkO0FBQUEsSUFFZ0Isb0JBQWlCO0FBQy9CLFlBQU0sa0JBQUE7QUFDTixXQUFLLFNBQVM7QUFBQSxJQUNoQjtBQUFBLElBRW1CLFdBQVcsbUJBQXVDO0FBQ25FLFlBQU0sV0FBVyxpQkFBaUI7QUFDbEMsV0FBSyxVQUFVLFlBQVksZ0JBQWdCLEtBQUssb0JBQW9CLE9BQU87QUFBQSxJQUM3RTtBQUFBLElBRW1CLGlCQUFjO0FBQy9CLGFBQU8sTUFBTSxlQUFBO0FBQUEsSUFDZjtBQUFBOztBQXZCRixpQkFBQSxNQUFBLG1CQUFBLEVBQUEsT0FBQSxXQUFBLEdBQUEsa0JBQUEsRUFBQSxNQUFBLFNBQUEsTUFBQSxXQUFBLE1BQUEsVUFBQSxVQUFBLEdBQUEsTUFBQSx1QkFBQTs7O1FBQ3lCLEdBQUEsU0FBeUIsQ0FBQywwQkFBMEIsUUFBUSxLQUFLLEdBRHBGLGtCQUFBLFlBQUEsdUJBQUEsR0FBNEI7OzsifQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @entrypoint
3
+ */
4
+ export * from './dialog-close-button/dialog-close-button.component.js';
5
+ //# sourceMappingURL=dialog-close-button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog-close-button.d.ts","sourceRoot":"","sources":["../../../../src/elements/dialog/dialog-close-button.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,wDAAwD,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { SbbDialogCloseButtonElement } from "./dialog-close-button/dialog-close-button.component.js";
2
+ export {
3
+ SbbDialogCloseButtonElement
4
+ };
5
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWNsb3NlLWJ1dHRvbi5qcyIsInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W10sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7In0=
@@ -9,7 +9,7 @@ const style = css`*,
9
9
 
10
10
  :host {
11
11
  display: block;
12
- margin-block: var(--sbb-dialog-padding-block);
12
+ padding-block: var(--sbb-dialog-padding-block);
13
13
  margin-inline: var(--sbb-dialog-padding-inline);
14
14
  }`;
15
15
  let SbbDialogContentElement = (() => {
@@ -9,6 +9,7 @@ declare const SbbDialogTitleElement_base: import('../../core/mixins.js').Abstrac
9
9
  export declare class SbbDialogTitleElement extends SbbDialogTitleElement_base {
10
10
  static styles: CSSResultGroup;
11
11
  constructor();
12
+ connectedCallback(): void;
12
13
  }
13
14
  declare global {
14
15
  interface HTMLElementTagNameMap {
@@ -1 +1 @@
1
- {"version":3,"file":"dialog-title.component.d.ts","sourceRoot":"","sources":["../../../../../src/elements/dialog/dialog-title/dialog-title.component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAI1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;;AAI9C;;;;GAIG;AACH,qBAEM,qBAAsB,SAAQ,0BAA8B;IAChE,OAAuB,MAAM,EAAE,cAAc,CAAgC;;CAO9E;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,kBAAkB,EAAE,qBAAqB,CAAC;KAC3C;CACF"}
1
+ {"version":3,"file":"dialog-title.component.d.ts","sourceRoot":"","sources":["../../../../../src/elements/dialog/dialog-title/dialog-title.component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAI1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;;AAI9C;;;;GAIG;AACH,qBAEM,qBAAsB,SAAQ,0BAA8B;IAChE,OAAuB,MAAM,EAAE,cAAc,CAAgC;;IAQ7D,iBAAiB,IAAI,IAAI;CAI1C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,kBAAkB,EAAE,qBAAqB,CAAC;KAC3C;CACF"}
@@ -28,7 +28,11 @@ let SbbDialogTitleElement = (() => {
28
28
  constructor() {
29
29
  super();
30
30
  this.level = "2";
31
- this.visualLevel = "3";
31
+ this.visualLevel = "4";
32
+ }
33
+ connectedCallback() {
34
+ super.connectedCallback();
35
+ this.slot ||= "title-section";
32
36
  }
33
37
  }, _classThis = _a, (() => {
34
38
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
@@ -41,4 +45,4 @@ let SbbDialogTitleElement = (() => {
41
45
  export {
42
46
  SbbDialogTitleElement
43
47
  };
44
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLXRpdGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2RpYWxvZy9kaWFsb2ctdGl0bGUvZGlhbG9nLXRpdGxlLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IFNiYk5lZ2F0aXZlTWl4aW4gfSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQgeyBTYmJUaXRsZUJhc2UgfSBmcm9tICcuLi8uLi90aXRsZS5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2RpYWxvZy10aXRsZS5zY3NzP2xpdCZpbmxpbmUnO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGEgdGl0bGUgaW5zaWRlIGEgZGlhbG9nIGhlYWRlci5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IGZvciB0aGUgY29udGVudCBvZiB0aGUgZGlhbG9nLXRpdGxlLlxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItZGlhbG9nLXRpdGxlJylcbmNsYXNzIFNiYkRpYWxvZ1RpdGxlRWxlbWVudCBleHRlbmRzIFNiYk5lZ2F0aXZlTWl4aW4oU2JiVGl0bGVCYXNlKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtTYmJUaXRsZUJhc2Uuc3R5bGVzLCBzdHlsZV07XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sZXZlbCA9ICcyJyBhcyB0aGlzWydsZXZlbCddO1xuICAgIHRoaXMudmlzdWFsTGV2ZWwgPSAnMycgYXMgdGhpc1sndmlzdWFsTGV2ZWwnXTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWRpYWxvZy10aXRsZSc6IFNiYkRpYWxvZ1RpdGxlRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFlTSx5QkFBcUIsTUFBQTs7MEJBRDFCLGNBQWMsa0JBQWtCLENBQUM7Ozs7b0JBQ0UsaUJBQWlCLFlBQVk7QUFBckMsRUFBQSxtQkFBUSxZQUE4QjtBQUFBLElBR2hFLGNBQUE7QUFDRSxZQUFBO0FBQ0EsV0FBSyxRQUFRO0FBQ2IsV0FBSyxjQUFjO0FBQUEsSUFDckI7QUFBQTs7QUFQRixpQkFBQSxNQUFBLG1CQUFBLEVBQUEsT0FBQSxXQUFBLEdBQUEsa0JBQUEsRUFBQSxNQUFBLFNBQUEsTUFBQSxXQUFBLE1BQUEsVUFBQSxVQUFBLEdBQUEsTUFBQSx1QkFBQTs7O1FBQ3lCLEdBQUEsU0FBeUIsQ0FBQyxhQUFhLFFBQVEsS0FBSyxHQUR2RSxrQkFBQSxZQUFBLHVCQUFBLEdBQXNCOzs7In0=
48
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLXRpdGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2RpYWxvZy9kaWFsb2ctdGl0bGUvZGlhbG9nLXRpdGxlLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IFNiYk5lZ2F0aXZlTWl4aW4gfSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQgeyBTYmJUaXRsZUJhc2UgfSBmcm9tICcuLi8uLi90aXRsZS5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2RpYWxvZy10aXRsZS5zY3NzP2xpdCZpbmxpbmUnO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGEgdGl0bGUgaW5zaWRlIGEgZGlhbG9nIGhlYWRlci5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IGZvciB0aGUgY29udGVudCBvZiB0aGUgZGlhbG9nLXRpdGxlLlxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItZGlhbG9nLXRpdGxlJylcbmNsYXNzIFNiYkRpYWxvZ1RpdGxlRWxlbWVudCBleHRlbmRzIFNiYk5lZ2F0aXZlTWl4aW4oU2JiVGl0bGVCYXNlKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtTYmJUaXRsZUJhc2Uuc3R5bGVzLCBzdHlsZV07XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sZXZlbCA9ICcyJyBhcyB0aGlzWydsZXZlbCddO1xuICAgIHRoaXMudmlzdWFsTGV2ZWwgPSAnNCcgYXMgdGhpc1sndmlzdWFsTGV2ZWwnXTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2xvdCB8fD0gJ3RpdGxlLXNlY3Rpb24nO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItZGlhbG9nLXRpdGxlJzogU2JiRGlhbG9nVGl0bGVFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQWVNLHlCQUFxQixNQUFBOzswQkFEMUIsY0FBYyxrQkFBa0IsQ0FBQzs7OztvQkFDRSxpQkFBaUIsWUFBWTtBQUFyQyxFQUFBLG1CQUFRLFlBQThCO0FBQUEsSUFHaEUsY0FBQTtBQUNFLFlBQUE7QUFDQSxXQUFLLFFBQVE7QUFDYixXQUFLLGNBQWM7QUFBQSxJQUNyQjtBQUFBLElBRWdCLG9CQUFpQjtBQUMvQixZQUFNLGtCQUFBO0FBQ04sV0FBSyxTQUFTO0FBQUEsSUFDaEI7QUFBQTs7QUFaRixpQkFBQSxNQUFBLG1CQUFBLEVBQUEsT0FBQSxXQUFBLEdBQUEsa0JBQUEsRUFBQSxNQUFBLFNBQUEsTUFBQSxXQUFBLE1BQUEsVUFBQSxVQUFBLEdBQUEsTUFBQSx1QkFBQTs7O1FBQ3lCLEdBQUEsU0FBeUIsQ0FBQyxhQUFhLFFBQVEsS0FBSyxHQUR2RSxrQkFBQSxZQUFBLHVCQUFBLEdBQXNCOzs7In0=
@@ -3,6 +3,7 @@
3
3
  */
4
4
  export * from './dialog/dialog-actions.js';
5
5
  export * from './dialog/dialog-content.js';
6
+ export * from './dialog/dialog-close-button.js';
6
7
  export * from './dialog/dialog-title.js';
7
8
  export * from './dialog/dialog.js';
8
9
  //# sourceMappingURL=dialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../../src/elements/dialog.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../../src/elements/dialog.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC"}
@@ -1,11 +1,13 @@
1
1
  import { SbbDialogActionsElement } from "./dialog/dialog-actions/dialog-actions.component.js";
2
2
  import { SbbDialogContentElement } from "./dialog/dialog-content/dialog-content.component.js";
3
+ import { SbbDialogCloseButtonElement } from "./dialog/dialog-close-button/dialog-close-button.component.js";
3
4
  import { SbbDialogTitleElement } from "./dialog/dialog-title/dialog-title.component.js";
4
5
  import { SbbDialogElement } from "./dialog/dialog/dialog.component.js";
5
6
  export {
6
7
  SbbDialogActionsElement,
8
+ SbbDialogCloseButtonElement,
7
9
  SbbDialogContentElement,
8
10
  SbbDialogElement,
9
11
  SbbDialogTitleElement
10
12
  };
11
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmpzIiwic291cmNlcyI6W10sInNvdXJjZXNDb250ZW50IjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OzsifQ==
13
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmpzIiwic291cmNlcyI6W10sInNvdXJjZXNDb250ZW50IjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7In0=
@@ -16,6 +16,7 @@ const style = css`*,
16
16
  --sbb-expansion-panel-header-cursor: pointer;
17
17
  --sbb-expansion-panel-header-text-color: var(--sbb-color-charcoal);
18
18
  --sbb-expansion-panel-header-gap: var(--sbb-spacing-fixed-6x);
19
+ --sbb-expansion-panel-header-justify-content: space-between;
19
20
  --sbb-expansion-panel-header-padding-block: var(--sbb-spacing-responsive-xs);
20
21
  --sbb-expansion-panel-header-padding-inline: var(--sbb-spacing-fixed-6x);
21
22
  }
@@ -56,7 +57,7 @@ const style = css`*,
56
57
  letter-spacing: var(--sbb-typo-letter-spacing-body-text);
57
58
  font-size: var(--sbb-text-font-size);
58
59
  display: flex;
59
- justify-content: space-between;
60
+ justify-content: var(--sbb-expansion-panel-header-justify-content);
60
61
  align-items: center;
61
62
  gap: var(--sbb-expansion-panel-header-gap);
62
63
  width: 100%;
@@ -166,4 +167,4 @@ let SbbExpansionPanelHeaderElement = (() => {
166
167
  export {
167
168
  SbbExpansionPanelHeaderElement
168
169
  };
169
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9leHBhbnNpb24tcGFuZWwvZXhwYW5zaW9uLXBhbmVsLWhlYWRlci9leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIENTU1Jlc3VsdEdyb3VwLCBodG1sLCBub3RoaW5nLCB0eXBlIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IFNiYkJ1dHRvbkJhc2VFbGVtZW50IH0gZnJvbSAnLi4vLi4vY29yZS9iYXNlLWVsZW1lbnRzLmpzJztcbmltcG9ydCB7XG4gIFNiYk1lZGlhUXVlcnlIb3ZlcixcbiAgU2JiTWVkaWFNYXRjaGVyQ29udHJvbGxlcixcbiAgU2JiU2xvdFN0YXRlQ29udHJvbGxlcixcbn0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyBTYmJEaXNhYmxlZFRhYkluZGV4QWN0aW9uTWl4aW4gfSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQgeyBTYmJJY29uTmFtZU1peGluIH0gZnJvbSAnLi4vLi4vaWNvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYkV4cGFuc2lvblBhbmVsRWxlbWVudCB9IGZyb20gJy4uL2V4cGFuc2lvbi1wYW5lbC5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2V4cGFuc2lvbi1wYW5lbC1oZWFkZXIuc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBJdCBhY3RzIGFzIGEgbmF0aXZlIGBzdW1tYXJ5YCB0YWcgZm9yIHRoZSBgc2JiLWV4cGFuc2lvbi1wYW5lbGAgY29tcG9uZW50LlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGNvbnRlbnQgdG8gdGhlIGBzYmItZXhwYW5zaW9uLXBhbmVsLWhlYWRlcmAuXG4gKiBAc2xvdCBpY29uIC0gU2xvdCB1c2VkIHRvIHJlbmRlciB0aGUgYHNiYi1leHBhbnNpb24tcGFuZWwtaGVhZGVyYCBpY29uLlxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItZXhwYW5zaW9uLXBhbmVsLWhlYWRlcicpXG5jbGFzcyBTYmJFeHBhbnNpb25QYW5lbEhlYWRlckVsZW1lbnQgZXh0ZW5kcyBTYmJEaXNhYmxlZFRhYkluZGV4QWN0aW9uTWl4aW4oXG4gIFNiYkljb25OYW1lTWl4aW4oU2JiQnV0dG9uQmFzZUVsZW1lbnQpLFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICB0b2dnbGVleHBhbmRlZDogJ3RvZ2dsZWV4cGFuZGVkJyxcbiAgfSBhcyBjb25zdDtcblxuICBwcml2YXRlIF9uYW1lZFNsb3RzID0gbmV3IFNiYlNsb3RTdGF0ZUNvbnRyb2xsZXIodGhpcywgKCkgPT4gdGhpcy5fc2V0RGF0YUljb25BdHRyaWJ1dGUoKSk7XG4gIHByaXZhdGUgX21lZGlhTWF0Y2hlciA9IG5ldyBTYmJNZWRpYU1hdGNoZXJDb250cm9sbGVyKHRoaXMsIHtcbiAgICBbU2JiTWVkaWFRdWVyeUhvdmVyXTogKG0pID0+ICh0aGlzLl9pc0hvdmVyID0gbSksXG4gIH0pO1xuXG4gIHByaXZhdGUgX2lzSG92ZXI6IGJvb2xlYW4gPSB0aGlzLl9tZWRpYU1hdGNoZXIubWF0Y2hlcyhTYmJNZWRpYVF1ZXJ5SG92ZXIpID8/IGZhbHNlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdjbGljaycsICgpID0+IHRoaXMuX2VtaXRFeHBhbmRlZEV2ZW50KCkpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdtb3VzZWVudGVyJywgKCkgPT4gdGhpcy5fb25Nb3VzZU1vdmVtZW50KHRydWUpKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LignbW91c2VsZWF2ZScsICgpID0+IHRoaXMuX29uTW91c2VNb3ZlbWVudChmYWxzZSkpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5zbG90IHx8PSAnaGVhZGVyJztcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXRFeHBhbmRlZEV2ZW50KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgLyoqIE5vdGlmaWVzIHRoYXQgdGhlIGBzYmItZXhwYW5zaW9uLXBhbmVsYCBpcyBhYm91dCB0byBleHBhbmQvc2hyaW5rLiAqL1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgndG9nZ2xlZXhwYW5kZWQnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vbk1vdXNlTW92ZW1lbnQodG9nZ2xlRGF0YUF0dHJpYnV0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHBhcmVudDogU2JiRXhwYW5zaW9uUGFuZWxFbGVtZW50ID0gdGhpcy5jbG9zZXN0KCdzYmItZXhwYW5zaW9uLXBhbmVsJykhO1xuICAgIC8vIFRoZSBgc2JiLmhvdmVyLW1xYCBsb2dpYyBoYXMgYmVlbiByZW1vdmVkIGZyb20gc2NzcywgYnV0IGl0IG11c3QgYmUgcmVwbGljYXRlZCB0byBoYXZlIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9uIG1vYmlsZS5cbiAgICBpZiAoIXRvZ2dsZURhdGFBdHRyaWJ1dGUgfHwgKHBhcmVudCAmJiB0aGlzLl9pc0hvdmVyKSkge1xuICAgICAgcGFyZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS10b2dnbGUtaG92ZXInLCB0b2dnbGVEYXRhQXR0cmlidXRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlICdkYXRhLWljb24nIGlzIHVzZWQgYnkgdGhlICdzYmItZXhwYW5zaW9uLXBhbmVsJy5cbiAgICogSXQgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB0aGUgQHNsb3RjaGFuZ2UgZXZlbnQgYnViYmxlcyB0byB0aGUgJ2V4cGFuc2lvbi1wYW5lbCdcbiAgICogYnV0IGFmdGVyIHRoZSAnU2JiU2xvdFN0YXRlQ29udHJvbGxlcicgaGFzIHJ1bi5cbiAgICovXG4gIHByaXZhdGUgX3NldERhdGFJY29uQXR0cmlidXRlKCk6IHZvaWQge1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWljb24nLCAhISh0aGlzLmljb25OYW1lIHx8IHRoaXMuX25hbWVkU2xvdHMuc2xvdHMuaGFzKCdpY29uJykpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXJUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgdGhpcy5fc2V0RGF0YUljb25BdHRyaWJ1dGUoKTtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJfX3RpdGxlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJfX2ljb25cIj4gJHt0aGlzLnJlbmRlckljb25TbG90KCl9IDwvc3Bhbj5cbiAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPC9zcGFuPlxuICAgICAgJHshdGhpcy5kaXNhYmxlZFxuICAgICAgICA/IGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItZXhwYW5zaW9uLXBhbmVsLWhlYWRlcl9fdG9nZ2xlXCI+XG4gICAgICAgICAgICA8c2JiLWljb25cbiAgICAgICAgICAgICAgbmFtZT1cImNoZXZyb24tc21hbGwtZG93bi1tZWRpdW1cIlxuICAgICAgICAgICAgICBjbGFzcz1cInNiYi1leHBhbnNpb24tcGFuZWwtaGVhZGVyX190b2dnbGUtaWNvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3NiYi1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5gXG4gICAgICAgIDogbm90aGluZ31cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItZXhwYW5zaW9uLXBhbmVsLWhlYWRlcic6IFNiYkV4cGFuc2lvblBhbmVsSGVhZGVyRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUF1Qk0sa0NBQThCLE1BQUE7OzBCQURuQyxjQUFjLDRCQUE0QixDQUFDOzs7O0FBQ0MsTUFBQSxjQUFBLCtCQUMzQyxpQkFBaUIsb0JBQW9CLENBQUM7QUFESCxFQUFBLG1CQUFRLFlBRTVDO0FBQUEsSUFhQyxjQUFBO0FBQ0UsWUFBQTtBQVJNLFdBQUEsY0FBYyxJQUFJLHVCQUF1QixNQUFNLE1BQU0sS0FBSyx1QkFBdUI7QUFDakYsV0FBQSxnQkFBZ0IsSUFBSSwwQkFBMEIsTUFBTTtBQUFBLFFBQzFELENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxNQUFPLEtBQUssV0FBVztBQUFBLE1BQUEsQ0FDL0M7QUFFTyxXQUFBLFdBQW9CLEtBQUssY0FBYyxRQUFRLGtCQUFrQixLQUFLO0FBSTVFLFdBQUssbUJBQW1CLFNBQVMsTUFBTSxLQUFLLG9CQUFvQjtBQUNoRSxXQUFLLG1CQUFtQixjQUFjLE1BQU0sS0FBSyxpQkFBaUIsSUFBSSxDQUFDO0FBQ3ZFLFdBQUssbUJBQW1CLGNBQWMsTUFBTSxLQUFLLGlCQUFpQixLQUFLLENBQUM7QUFBQSxJQUMxRTtBQUFBLElBRWdCLG9CQUFpQjtBQUMvQixZQUFNLGtCQUFBO0FBQ04sV0FBSyxTQUFTO0FBQUEsSUFDaEI7QUFBQSxJQUVRLHFCQUFrQjtBQUN4QixVQUFJLENBQUMsS0FBSyxVQUFVO0FBRWxCLGFBQUssY0FBYyxJQUFJLE1BQU0sa0JBQWtCLEVBQUUsU0FBUyxNQUFNLFVBQVUsS0FBQSxDQUFNLENBQUM7QUFBQSxNQUNuRjtBQUFBLElBQ0Y7QUFBQSxJQUVRLGlCQUFpQixxQkFBNEI7QUFDbkQsWUFBTSxTQUFtQyxLQUFLLFFBQVEscUJBQXFCO0FBRTNFLFVBQUksQ0FBQyx1QkFBd0IsVUFBVSxLQUFLLFVBQVc7QUFDckQsZUFBTyxnQkFBZ0IscUJBQXFCLG1CQUFtQjtBQUFBLE1BQ2pFO0FBQUEsSUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU9RLHdCQUFxQjtBQUMzQixXQUFLLGdCQUFnQixhQUFhLENBQUMsRUFBRSxLQUFLLFlBQVksS0FBSyxZQUFZLE1BQU0sSUFBSSxNQUFNLEVBQUU7QUFBQSxJQUMzRjtBQUFBLElBRW1CLGlCQUFjO0FBQy9CLFdBQUssc0JBQUE7QUFDTCxhQUFPO0FBQUE7QUFBQSwwREFFK0MsS0FBSyxnQkFBZ0I7QUFBQTtBQUFBO0FBQUEsUUFHdkUsQ0FBQyxLQUFLLFdBQ0o7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEscUJBT0EsT0FBTztBQUFBO0FBQUEsSUFFZjtBQUFBOztBQXBFRixpQkFBQSxNQUFBLG1CQUFBLEVBQUEsT0FBQSxXQUFBLEdBQUEsa0JBQUEsRUFBQSxNQUFBLFNBQUEsTUFBQSxXQUFBLE1BQUEsVUFBQSxVQUFBLEdBQUEsTUFBQSx1QkFBQTs7O1FBR3lCLEdBQUEsU0FBeUIsT0FDekIsR0FBQSxTQUFTO0FBQUEsSUFDOUIsZ0JBQWdCO0FBQUEsRUFBQSxHQUxkLGtCQUFBLFlBQUEsdUJBQUEsR0FBK0I7OzsifQ==
170
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9leHBhbnNpb24tcGFuZWwvZXhwYW5zaW9uLXBhbmVsLWhlYWRlci9leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIENTU1Jlc3VsdEdyb3VwLCBodG1sLCBub3RoaW5nLCB0eXBlIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IFNiYkJ1dHRvbkJhc2VFbGVtZW50IH0gZnJvbSAnLi4vLi4vY29yZS9iYXNlLWVsZW1lbnRzLmpzJztcbmltcG9ydCB7XG4gIFNiYk1lZGlhUXVlcnlIb3ZlcixcbiAgU2JiTWVkaWFNYXRjaGVyQ29udHJvbGxlcixcbiAgU2JiU2xvdFN0YXRlQ29udHJvbGxlcixcbn0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyBTYmJEaXNhYmxlZFRhYkluZGV4QWN0aW9uTWl4aW4gfSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQgeyBTYmJJY29uTmFtZU1peGluIH0gZnJvbSAnLi4vLi4vaWNvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYkV4cGFuc2lvblBhbmVsRWxlbWVudCB9IGZyb20gJy4uL2V4cGFuc2lvbi1wYW5lbC5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2V4cGFuc2lvbi1wYW5lbC1oZWFkZXIuc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBJdCBhY3RzIGFzIGEgbmF0aXZlIGBzdW1tYXJ5YCB0YWcgZm9yIHRoZSBgc2JiLWV4cGFuc2lvbi1wYW5lbGAgY29tcG9uZW50LlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGNvbnRlbnQgdG8gdGhlIGBzYmItZXhwYW5zaW9uLXBhbmVsLWhlYWRlcmAuXG4gKiBAc2xvdCBpY29uIC0gU2xvdCB1c2VkIHRvIHJlbmRlciB0aGUgYHNiYi1leHBhbnNpb24tcGFuZWwtaGVhZGVyYCBpY29uLlxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItZXhwYW5zaW9uLXBhbmVsLWhlYWRlcicpXG5jbGFzcyBTYmJFeHBhbnNpb25QYW5lbEhlYWRlckVsZW1lbnQgZXh0ZW5kcyBTYmJEaXNhYmxlZFRhYkluZGV4QWN0aW9uTWl4aW4oXG4gIFNiYkljb25OYW1lTWl4aW4oU2JiQnV0dG9uQmFzZUVsZW1lbnQpLFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICB0b2dnbGVleHBhbmRlZDogJ3RvZ2dsZWV4cGFuZGVkJyxcbiAgfSBhcyBjb25zdDtcblxuICBwcml2YXRlIF9uYW1lZFNsb3RzID0gbmV3IFNiYlNsb3RTdGF0ZUNvbnRyb2xsZXIodGhpcywgKCkgPT4gdGhpcy5fc2V0RGF0YUljb25BdHRyaWJ1dGUoKSk7XG4gIHByaXZhdGUgX21lZGlhTWF0Y2hlciA9IG5ldyBTYmJNZWRpYU1hdGNoZXJDb250cm9sbGVyKHRoaXMsIHtcbiAgICBbU2JiTWVkaWFRdWVyeUhvdmVyXTogKG0pID0+ICh0aGlzLl9pc0hvdmVyID0gbSksXG4gIH0pO1xuXG4gIHByaXZhdGUgX2lzSG92ZXI6IGJvb2xlYW4gPSB0aGlzLl9tZWRpYU1hdGNoZXIubWF0Y2hlcyhTYmJNZWRpYVF1ZXJ5SG92ZXIpID8/IGZhbHNlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdjbGljaycsICgpID0+IHRoaXMuX2VtaXRFeHBhbmRlZEV2ZW50KCkpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdtb3VzZWVudGVyJywgKCkgPT4gdGhpcy5fb25Nb3VzZU1vdmVtZW50KHRydWUpKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LignbW91c2VsZWF2ZScsICgpID0+IHRoaXMuX29uTW91c2VNb3ZlbWVudChmYWxzZSkpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5zbG90IHx8PSAnaGVhZGVyJztcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXRFeHBhbmRlZEV2ZW50KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgLyoqIE5vdGlmaWVzIHRoYXQgdGhlIGBzYmItZXhwYW5zaW9uLXBhbmVsYCBpcyBhYm91dCB0byBleHBhbmQvc2hyaW5rLiAqL1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgndG9nZ2xlZXhwYW5kZWQnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vbk1vdXNlTW92ZW1lbnQodG9nZ2xlRGF0YUF0dHJpYnV0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHBhcmVudDogU2JiRXhwYW5zaW9uUGFuZWxFbGVtZW50ID0gdGhpcy5jbG9zZXN0KCdzYmItZXhwYW5zaW9uLXBhbmVsJykhO1xuICAgIC8vIFRoZSBgc2JiLmhvdmVyLW1xYCBsb2dpYyBoYXMgYmVlbiByZW1vdmVkIGZyb20gc2NzcywgYnV0IGl0IG11c3QgYmUgcmVwbGljYXRlZCB0byBoYXZlIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9uIG1vYmlsZS5cbiAgICBpZiAoIXRvZ2dsZURhdGFBdHRyaWJ1dGUgfHwgKHBhcmVudCAmJiB0aGlzLl9pc0hvdmVyKSkge1xuICAgICAgcGFyZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS10b2dnbGUtaG92ZXInLCB0b2dnbGVEYXRhQXR0cmlidXRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlICdkYXRhLWljb24nIGlzIHVzZWQgYnkgdGhlICdzYmItZXhwYW5zaW9uLXBhbmVsJy5cbiAgICogSXQgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB0aGUgQHNsb3RjaGFuZ2UgZXZlbnQgYnViYmxlcyB0byB0aGUgJ2V4cGFuc2lvbi1wYW5lbCdcbiAgICogYnV0IGFmdGVyIHRoZSAnU2JiU2xvdFN0YXRlQ29udHJvbGxlcicgaGFzIHJ1bi5cbiAgICovXG4gIHByaXZhdGUgX3NldERhdGFJY29uQXR0cmlidXRlKCk6IHZvaWQge1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWljb24nLCAhISh0aGlzLmljb25OYW1lIHx8IHRoaXMuX25hbWVkU2xvdHMuc2xvdHMuaGFzKCdpY29uJykpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXJUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgdGhpcy5fc2V0RGF0YUljb25BdHRyaWJ1dGUoKTtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJfX3RpdGxlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJfX2ljb25cIj4gJHt0aGlzLnJlbmRlckljb25TbG90KCl9IDwvc3Bhbj5cbiAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPC9zcGFuPlxuICAgICAgJHshdGhpcy5kaXNhYmxlZFxuICAgICAgICA/IGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItZXhwYW5zaW9uLXBhbmVsLWhlYWRlcl9fdG9nZ2xlXCI+XG4gICAgICAgICAgICA8c2JiLWljb25cbiAgICAgICAgICAgICAgbmFtZT1cImNoZXZyb24tc21hbGwtZG93bi1tZWRpdW1cIlxuICAgICAgICAgICAgICBjbGFzcz1cInNiYi1leHBhbnNpb24tcGFuZWwtaGVhZGVyX190b2dnbGUtaWNvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3NiYi1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5gXG4gICAgICAgIDogbm90aGluZ31cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItZXhwYW5zaW9uLXBhbmVsLWhlYWRlcic6IFNiYkV4cGFuc2lvblBhbmVsSGVhZGVyRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBdUJNLGtDQUE4QixNQUFBOzswQkFEbkMsY0FBYyw0QkFBNEIsQ0FBQzs7OztBQUNDLE1BQUEsY0FBQSwrQkFDM0MsaUJBQWlCLG9CQUFvQixDQUFDO0FBREgsRUFBQSxtQkFBUSxZQUU1QztBQUFBLElBYUMsY0FBQTtBQUNFLFlBQUE7QUFSTSxXQUFBLGNBQWMsSUFBSSx1QkFBdUIsTUFBTSxNQUFNLEtBQUssdUJBQXVCO0FBQ2pGLFdBQUEsZ0JBQWdCLElBQUksMEJBQTBCLE1BQU07QUFBQSxRQUMxRCxDQUFDLGtCQUFrQixHQUFHLENBQUMsTUFBTyxLQUFLLFdBQVc7QUFBQSxNQUFBLENBQy9DO0FBRU8sV0FBQSxXQUFvQixLQUFLLGNBQWMsUUFBUSxrQkFBa0IsS0FBSztBQUk1RSxXQUFLLG1CQUFtQixTQUFTLE1BQU0sS0FBSyxvQkFBb0I7QUFDaEUsV0FBSyxtQkFBbUIsY0FBYyxNQUFNLEtBQUssaUJBQWlCLElBQUksQ0FBQztBQUN2RSxXQUFLLG1CQUFtQixjQUFjLE1BQU0sS0FBSyxpQkFBaUIsS0FBSyxDQUFDO0FBQUEsSUFDMUU7QUFBQSxJQUVnQixvQkFBaUI7QUFDL0IsWUFBTSxrQkFBQTtBQUNOLFdBQUssU0FBUztBQUFBLElBQ2hCO0FBQUEsSUFFUSxxQkFBa0I7QUFDeEIsVUFBSSxDQUFDLEtBQUssVUFBVTtBQUVsQixhQUFLLGNBQWMsSUFBSSxNQUFNLGtCQUFrQixFQUFFLFNBQVMsTUFBTSxVQUFVLEtBQUEsQ0FBTSxDQUFDO0FBQUEsTUFDbkY7QUFBQSxJQUNGO0FBQUEsSUFFUSxpQkFBaUIscUJBQTRCO0FBQ25ELFlBQU0sU0FBbUMsS0FBSyxRQUFRLHFCQUFxQjtBQUUzRSxVQUFJLENBQUMsdUJBQXdCLFVBQVUsS0FBSyxVQUFXO0FBQ3JELGVBQU8sZ0JBQWdCLHFCQUFxQixtQkFBbUI7QUFBQSxNQUNqRTtBQUFBLElBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPUSx3QkFBcUI7QUFDM0IsV0FBSyxnQkFBZ0IsYUFBYSxDQUFDLEVBQUUsS0FBSyxZQUFZLEtBQUssWUFBWSxNQUFNLElBQUksTUFBTSxFQUFFO0FBQUEsSUFDM0Y7QUFBQSxJQUVtQixpQkFBYztBQUMvQixXQUFLLHNCQUFBO0FBQ0wsYUFBTztBQUFBO0FBQUEsMERBRStDLEtBQUssZ0JBQWdCO0FBQUE7QUFBQTtBQUFBLFFBR3ZFLENBQUMsS0FBSyxXQUNKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHFCQU9BLE9BQU87QUFBQTtBQUFBLElBRWY7QUFBQTs7QUFwRUYsaUJBQUEsTUFBQSxtQkFBQSxFQUFBLE9BQUEsV0FBQSxHQUFBLGtCQUFBLEVBQUEsTUFBQSxTQUFBLE1BQUEsV0FBQSxNQUFBLFVBQUEsVUFBQSxHQUFBLE1BQUEsdUJBQUE7OztRQUd5QixHQUFBLFNBQXlCLE9BQ3pCLEdBQUEsU0FBUztBQUFBLElBQzlCLGdCQUFnQjtBQUFBLEVBQUEsR0FMZCxrQkFBQSxZQUFBLHVCQUFBLEdBQStCOzs7In0=
@@ -1,4 +1,22 @@
1
1
  import { CSSResultGroup, LitElement, PropertyValues, TemplateResult } from 'lit';
2
+ /** An interface which allows a control to work inside of a `SbbFormField`. */
3
+ export interface SbbFormFieldElementControl {
4
+ /** The id of the form field. */
5
+ readonly id: string;
6
+ /** Whether the control is empty. */
7
+ readonly empty: boolean;
8
+ /** Whether the control is readonly. */
9
+ readonly readOnly?: boolean;
10
+ /** Whether the control is disabled. */
11
+ readonly disabled: boolean;
12
+ /** Handles a click on the control's container. */
13
+ onContainerClick(event: MouseEvent): void;
14
+ }
15
+ export declare class SbbFormFieldControlEvent extends Event {
16
+ private _control;
17
+ get control(): SbbFormFieldElementControl | null;
18
+ constructor(control: SbbFormFieldElementControl | null);
19
+ }
2
20
  declare const SbbFormFieldElement_base: import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbNegativeMixinType> & import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbElementInternalsMixinType> & import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbHydrationMixinType> & typeof LitElement & import('../../core/mixins.js').SbbElementInternalsConstructor;
3
21
  /**
4
22
  * It wraps an input element adding label, errors, icon, etc.
@@ -44,13 +62,14 @@ export declare class SbbFormFieldElement extends SbbFormFieldElement_base {
44
62
  /** Reference to the slotted label elements. */
45
63
  private accessor _label;
46
64
  /** Returns the input element. */
47
- get inputElement(): HTMLInputElement | HTMLSelectElement | HTMLElement | undefined;
65
+ get inputElement(): HTMLInputElement | HTMLSelectElement | HTMLElement | null;
48
66
  private _language;
49
67
  /**
50
68
  * Listens to the changes on `readonly` and `disabled` attributes of `<input>`.
51
69
  */
52
70
  private _formFieldAttributeObserver;
53
71
  private _inputFormAbortController;
72
+ private _control;
54
73
  constructor();
55
74
  connectedCallback(): void;
56
75
  protected willUpdate(changedProperties: PropertyValues<this>): void;
@@ -90,6 +109,9 @@ declare global {
90
109
  interface HTMLElementTagNameMap {
91
110
  'sbb-form-field': SbbFormFieldElement;
92
111
  }
112
+ interface HTMLElementEventMap {
113
+ formfieldcontrol: SbbFormFieldControlEvent;
114
+ }
93
115
  }
94
116
  export {};
95
117
  //# sourceMappingURL=form-field.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"form-field.component.d.ts","sourceRoot":"","sources":["../../../../../src/elements/form-field/form-field/form-field.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGnB,UAAU,EAEV,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,KAAK,CAAC;AAoBb,OAAO,eAAe,CAAC;;AAOvB;;;;;;;;GAQG;AACH,qBAGM,mBAAoB,SAAQ,wBAEjC;IACC,OAAuB,MAAM,EAAE,cAAc,CAAS;IAGtD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAuD;IAE9F,OAAO,CAAC,QAAQ,CAAC,oCAAoC,CAOnD;IAEF,OAAO,CAAC,QAAQ,CAAC,iCAAiC,CAQhD;IAEF;;;;OAIG;IACH,SACgB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAU;IAExD,+CAA+C;IAC/C,SAEgB,QAAQ,EAAE,OAAO,CAAS;IAE1C;;;OAGG;IACH,SAA6C,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAwB;IAE1F,0DAA0D;IAC1D,SAEgB,UAAU,EAAE,OAAO,CAAS;IAE5C;;+EAE2E;IAC3E,SAA6C,KAAK,EAAE,SAAS,GAAG,UAAU,CAAa;IAEvF,wFAAwF;IACxF,SAEgB,WAAW,EAAE,OAAO,CAAS;IAE7C,4FAA4F;IAC5F,SAEgB,aAAa,EAAE,OAAO,CAAS;IAE/C,qDAAqD;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAEzD,8CAA8C;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiE;IAEjG,+CAA+C;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAEpD,iCAAiC;IACjC,IAAW,YAAY,IAAI,gBAAgB,GAAG,iBAAiB,GAAG,WAAW,GAAG,SAAS,CAExF;IAED,OAAO,CAAC,SAAS,CAAmC;IAEpD;;OAEG;IACH,OAAO,CAAC,2BAA2B,CAQ1B;IAET,OAAO,CAAC,yBAAyB,CAAyB;;IA6C1C,iBAAiB,IAAI,IAAI;cAQtB,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAW5D,oBAAoB,IAAI,IAAI;IAS5C,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,oBAAoB;IAiD5B,OAAO,CAAC,yBAAyB;IA6BjC,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,2BAA2B;IASnC,qFAAqF;IAC9E,KAAK,IAAI,IAAI;IAIpB,4FAA4F;IACrF,KAAK,IAAI,IAAI;IAQpB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,SAAS;cAME,MAAM,IAAI,cAAc;CAmC5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,gBAAgB,EAAE,mBAAmB,CAAC;KACvC;CACF"}
1
+ {"version":3,"file":"form-field.component.d.ts","sourceRoot":"","sources":["../../../../../src/elements/form-field/form-field/form-field.component.ts"],"names":[],"mappings":"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"}
@@ -408,6 +408,15 @@ const style = css`@charset "UTF-8";
408
408
  let nextId = 0;
409
409
  const patchedInputs = /* @__PURE__ */ new WeakMap();
410
410
  const nativeInputElements = ["input", "textarea", "select"];
411
+ class SbbFormFieldControlEvent extends Event {
412
+ get control() {
413
+ return this._control;
414
+ }
415
+ constructor(control) {
416
+ super("formfieldcontrol");
417
+ this._control = control;
418
+ }
419
+ }
411
420
  let SbbFormFieldElement = (() => {
412
421
  var _errorSpace_accessor_storage, _optional_accessor_storage, _size_accessor_storage, _borderless_accessor_storage, _width_accessor_storage, _hiddenLabel_accessor_storage, _floatingLabel_accessor_storage, __errorElements_accessor_storage, __input_accessor_storage, __label_accessor_storage, _a;
413
422
  let _classDecorators = [customElement("sbb-form-field"), slotState()];
@@ -484,7 +493,7 @@ let SbbFormFieldElement = (() => {
484
493
  __privateSet(this, _hiddenLabel_accessor_storage, (__runInitializers(this, _width_extraInitializers), __runInitializers(this, _hiddenLabel_initializers, false)));
485
494
  __privateSet(this, _floatingLabel_accessor_storage, (__runInitializers(this, _hiddenLabel_extraInitializers), __runInitializers(this, _floatingLabel_initializers, false)));
486
495
  __privateSet(this, __errorElements_accessor_storage, (__runInitializers(this, _floatingLabel_extraInitializers), __runInitializers(this, __errorElements_initializers, [])));
487
- __privateSet(this, __input_accessor_storage, (__runInitializers(this, __errorElements_extraInitializers), __runInitializers(this, __input_initializers, void 0)));
496
+ __privateSet(this, __input_accessor_storage, (__runInitializers(this, __errorElements_extraInitializers), __runInitializers(this, __input_initializers, null)));
488
497
  __privateSet(this, __label_accessor_storage, (__runInitializers(this, __input_extraInitializers), __runInitializers(this, __label_initializers, void 0)));
489
498
  this._language = (__runInitializers(this, __label_extraInitializers), new SbbLanguageController(this));
490
499
  this._formFieldAttributeObserver = !isServer ? new MutationObserver((mutations) => {
@@ -495,6 +504,7 @@ let SbbFormFieldElement = (() => {
495
504
  }
496
505
  }) : null;
497
506
  this._inputFormAbortController = new AbortController();
507
+ this._control = null;
498
508
  this.addEventListener?.("focusin", (event) => {
499
509
  if (event.target === this.inputElement || event.target === this.inputElement?.inputElement) {
500
510
  this.internals.states.add("focus");
@@ -515,6 +525,14 @@ let SbbFormFieldElement = (() => {
515
525
  this.addEventListener("input", () => this._checkAndUpdateInputEmpty());
516
526
  this.addEventListener("displayvaluechange", () => this._checkAndUpdateInputEmpty());
517
527
  this.addEventListener("invalid", (e) => e.preventDefault(), { capture: true });
528
+ this.addEventListener("formfieldcontrol", (e) => {
529
+ this._control = e.control;
530
+ if (this._connectInputElement() === "unchanged") {
531
+ this._assignErrorMessageElements();
532
+ this._readInputState();
533
+ this._checkAndUpdateInputEmpty();
534
+ }
535
+ });
518
536
  }
519
537
  /**
520
538
  * Whether to reserve space for an error message.
@@ -627,7 +645,9 @@ let SbbFormFieldElement = (() => {
627
645
  if (this._isElementFocusExcluded(event)) {
628
646
  return;
629
647
  }
630
- if (event.target.localName !== "label") {
648
+ if (this._control?.onContainerClick) {
649
+ this._control?.onContainerClick(event);
650
+ } else if (event.target.localName !== "label") {
631
651
  if (this._input?.localName === "sbb-select" && event.target.localName !== "sbb-select") {
632
652
  this._input.click();
633
653
  }
@@ -657,10 +677,15 @@ let SbbFormFieldElement = (() => {
657
677
  this.querySelectorAll("sbb-form-error:not([slot])").forEach((e) => e.setAttribute("slot", "error"));
658
678
  }
659
679
  _connectInputElement() {
660
- const inputCandidates = Array.from(this.querySelectorAll("*:not([slot],sbb-chip-group)"));
661
- const newInput = inputCandidates.find((e) => this._isInputElement(e)) || inputCandidates[0];
680
+ let newInput = null;
681
+ if (this._control?.id) {
682
+ newInput = this.getRootNode().getElementById(this._control.id);
683
+ } else {
684
+ const inputCandidates = Array.from(this.querySelectorAll("*:not([slot],sbb-chip-group)"));
685
+ newInput = (inputCandidates.find((e) => this._isInputElement(e)) || inputCandidates[0]) ?? null;
686
+ }
662
687
  if (newInput === this._input) {
663
- return;
688
+ return "unchanged";
664
689
  } else if (this._input) {
665
690
  this.internals.states.delete(`input-type-${this._input.localName}`);
666
691
  if (this._input.localName === "input") {
@@ -668,13 +693,13 @@ let SbbFormFieldElement = (() => {
668
693
  }
669
694
  }
670
695
  if (!newInput) {
671
- this._input = void 0;
672
- return;
696
+ this._input = null;
697
+ return "no-input";
673
698
  }
674
699
  this._input = newInput;
700
+ this._registerInputFormListener();
675
701
  this._assignErrorMessageElements();
676
702
  this._readInputState();
677
- this._registerInputFormListener();
678
703
  this._checkAndUpdateInputEmpty();
679
704
  if (this._input.localName === "textarea") {
680
705
  this._input.setAttribute("rows", this._input.getAttribute("rows") || "3");
@@ -690,6 +715,7 @@ let SbbFormFieldElement = (() => {
690
715
  });
691
716
  this.internals.states.add(`input-type-${this._input.localName}`);
692
717
  this._syncLabelInputReferences();
718
+ return "changed";
693
719
  }
694
720
  _syncLabelInputReferences() {
695
721
  if (!this._input || !this._label) {
@@ -708,8 +734,8 @@ let SbbFormFieldElement = (() => {
708
734
  return nativeInputElements.includes(input.localName) || !!customElements.get(input.localName)?.formAssociated;
709
735
  }
710
736
  _readInputState() {
711
- this.toggleState("readonly", this._input.hasAttribute("readonly"));
712
- this.toggleState("disabled", this._input.hasAttribute("disabled"));
737
+ this.toggleState("readonly", this._control?.readOnly ?? this._input.hasAttribute("readonly"));
738
+ this.toggleState("disabled", this._control?.disabled ?? this._input.hasAttribute("disabled"));
713
739
  this.toggleState("has-popup-open", this._input.hasAttribute("data-expanded"));
714
740
  }
715
741
  _registerInputFormListener() {
@@ -753,7 +779,7 @@ let SbbFormFieldElement = (() => {
753
779
  }
754
780
  }
755
781
  _checkAndUpdateInputEmpty() {
756
- this.toggleState("empty", this._floatingLabelSupportedInputElements.includes(this._input?.localName) && this._isInputEmpty());
782
+ this.toggleState("empty", this._control?.empty ?? (this._floatingLabelSupportedInputElements.includes(this._input?.localName) && this._isInputEmpty()));
757
783
  }
758
784
  _isInputEmpty() {
759
785
  const chipGroupElem = this.querySelector("sbb-chip-group");
@@ -893,6 +919,7 @@ let SbbFormFieldElement = (() => {
893
919
  return _classThis;
894
920
  })();
895
921
  export {
922
+ SbbFormFieldControlEvent,
896
923
  SbbFormFieldElement
897
924
  };
898
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIExpdEVsZW1lbnQsXG4gIG5vdGhpbmcsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgU2JiQXV0b2NvbXBsZXRlQmFzZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9hdXRvY29tcGxldGUuanMnO1xuaW1wb3J0IHsgc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yIH0gZnJvbSAnLi4vLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlLCBzbG90U3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaXNMZWFuIH0gZnJvbSAnLi4vLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgaTE4bk9wdGlvbmFsIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB7XG4gIGFwcGVuZEFyaWFFbGVtZW50cyxcbiAgcmVtb3ZlQXJpYUVsZW1lbnRzLFxuICBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4sXG4gIFNiYkh5ZHJhdGlvbk1peGluLFxuICBTYmJOZWdhdGl2ZU1peGluLFxufSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYlNlbGVjdEVsZW1lbnQgfSBmcm9tICcuLi8uLi9zZWxlY3QuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9mb3JtLWZpZWxkLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vaWNvbi5qcyc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG5jb25zdCBwYXRjaGVkSW5wdXRzID0gbmV3IFdlYWtNYXA8SFRNTElucHV0RWxlbWVudCwgUHJvcGVydHlEZXNjcmlwdG9yPigpO1xuY29uc3QgbmF0aXZlSW5wdXRFbGVtZW50cyA9IFsnaW5wdXQnLCAndGV4dGFyZWEnLCAnc2VsZWN0J107XG5cbi8qKlxuICogSXQgd3JhcHMgYW4gaW5wdXQgZWxlbWVudCBhZGRpbmcgbGFiZWwsIGVycm9ycywgaWNvbiwgZXRjLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYW4gaW5wdXQvc2VsZWN0IG9yIGEgc3VwcG9ydGVkIG5vbi1uYXRpdmUgZWxlbWVudC5cbiAqIEBzbG90IGxhYmVsIC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYSBsYWJlbC5cbiAqIEBzbG90IHByZWZpeCAtIFVzZSB0aGlzIHNsb3QgdG8gcmVuZGVyIGFuIGljb24gb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgaW5wdXQuXG4gKiBAc2xvdCBzdWZmaXggLSBVc2UgdGhpcyBzbG90IHRvIHJlbmRlciBhbiBpY29uIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBpbnB1dC5cbiAqIEBzbG90IGVycm9yIC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYW4gZXJyb3IuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1mb3JtLWZpZWxkJylcbkBzbG90U3RhdGUoKVxuY2xhc3MgU2JiRm9ybUZpZWxkRWxlbWVudCBleHRlbmRzIFNiYk5lZ2F0aXZlTWl4aW4oXG4gIFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpbihTYmJIeWRyYXRpb25NaXhpbihMaXRFbGVtZW50KSksXG4pIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgLy8gTGlzdCBvZiBlbGVtZW50cyB0aGF0IHNob3VsZCBub3QgZm9jdXMgaW5wdXQgb24gY2xpY2tcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhjbHVkZWRGb2N1c0VsZW1lbnRzID0gWydidXR0b24nLCAnc2JiLXBvcG92ZXInLCAnc2JiLW9wdGlvbicsICdzYmItY2hpcCddO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zsb2F0aW5nTGFiZWxTdXBwb3J0ZWRJbnB1dEVsZW1lbnRzID0gW1xuICAgICdpbnB1dCcsXG4gICAgJ3NlbGVjdCcsXG4gICAgJ3NiYi1kYXRlLWlucHV0JyxcbiAgICAnc2JiLXRpbWUtaW5wdXQnLFxuICAgICdzYmItc2VsZWN0JyxcbiAgICAndGV4dGFyZWEnLFxuICBdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zsb2F0aW5nTGFiZWxTdXBwb3J0ZWRJbnB1dFR5cGVzID0gW1xuICAgICdlbWFpbCcsXG4gICAgJ251bWJlcicsXG4gICAgJ3Bhc3N3b3JkJyxcbiAgICAnc2VhcmNoJyxcbiAgICAndGVsJyxcbiAgICAndGV4dCcsXG4gICAgJ3VybCcsXG4gIF07XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICogYG5vbmVgIGRvZXMgbm90IHJlc2VydmUgYW55IHNwYWNlLlxuICAgKiBgcmVzZXJ2ZWAgZG9lcyByZXNlcnZlIG9uZSByb3cgZm9yIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdlcnJvci1zcGFjZScsIHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFjY2Vzc29yIGVycm9yU3BhY2U6ICdub25lJyB8ICdyZXNlcnZlJyA9ICdub25lJztcblxuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGlucHV0IGlzIG9wdGlvbmFsLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3Igb3B0aW9uYWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2l6ZSB2YXJpYW50LCBlaXRoZXIgbCwgbSBvciBzLlxuICAgKiBAZGVmYXVsdCAnbScgLyAncycgKGxlYW4pXG4gICAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciBzaXplOiAnbCcgfCAnbScgfCAncycgPSBpc0xlYW4oKSA/ICdzJyA6ICdtJztcblxuICAvKiogV2hldGhlciB0byBkaXNwbGF5IHRoZSBmb3JtIGZpZWxkIHdpdGhvdXQgYSBib3JkZXIuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBib3JkZXJsZXNzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIERlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBjb21wb25lbnQ6XG4gICAqIC0gYGRlZmF1bHRgOiB0aGUgY29tcG9uZW50IGhhcyBkZWZpbmVkIHdpZHRoIGFuZCBtaW4td2lkdGg7XG4gICAqIC0gYGNvbGxhcHNlYDogdGhlIGNvbXBvbmVudCBhZGFwdHMgaXRzZWxmIHRvIGl0cyBpbm5lciBpbnB1dCBjb250ZW50LiAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciB3aWR0aDogJ2RlZmF1bHQnIHwgJ2NvbGxhcHNlJyA9ICdkZWZhdWx0JztcblxuICAvKiogV2hldGhlciB0byB2aXN1YWxseSBoaWRlIHRoZSBsYWJlbC4gSWYgaGlkZGVuLCBzY3JlZW4gcmVhZGVycyB3aWxsIHN0aWxsIHJlYWQgaXQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdoaWRkZW4tbGFiZWwnLCByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBoaWRkZW5MYWJlbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBsYWJlbCBzaG91bGQgZmxvYXQuIElmIGFjdGl2YXRlZCwgdGhlIHBsYWNlaG9sZGVyIG9mIHRoZSBpbnB1dCBpcyBoaWRkZW4uICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdmbG9hdGluZy1sYWJlbCcsIHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGZsb2F0aW5nTGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogSXQgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGdldCB0aGUgYGVycm9yYCBzbG90LiAqL1xuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9lcnJvckVsZW1lbnRzOiBFbGVtZW50W10gPSBbXTtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBzbG90dGVkIGlucHV0IGVsZW1lbnQuICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX2lucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFNlbGVjdEVsZW1lbnQgfCBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBzbG90dGVkIGxhYmVsIGVsZW1lbnRzLiAqL1xuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9sYWJlbCE6IEhUTUxMYWJlbEVsZW1lbnQ7XG5cbiAgLyoqIFJldHVybnMgdGhlIGlucHV0IGVsZW1lbnQuICovXG4gIHB1YmxpYyBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MU2VsZWN0RWxlbWVudCB8IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXQ7XG4gIH1cblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgLyoqXG4gICAqIExpc3RlbnMgdG8gdGhlIGNoYW5nZXMgb24gYHJlYWRvbmx5YCBhbmQgYGRpc2FibGVkYCBhdHRyaWJ1dGVzIG9mIGA8aW5wdXQ+YC5cbiAgICovXG4gIHByaXZhdGUgX2Zvcm1GaWVsZEF0dHJpYnV0ZU9ic2VydmVyID0gIWlzU2VydmVyXG4gICAgPyBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zOiBNdXRhdGlvblJlY29yZFtdKSA9PiB7XG4gICAgICAgIGlmIChtdXRhdGlvbnMuc29tZSgobSkgPT4gbS50eXBlID09PSAnYXR0cmlidXRlcycpICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5fcmVhZElucHV0U3RhdGUoKTtcbiAgICAgICAgICB0aGlzLl9yZWdpc3RlcklucHV0Rm9ybUxpc3RlbmVyKCk7XG4gICAgICAgICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgOiBudWxsO1xuXG4gIHByaXZhdGUgX2lucHV0Rm9ybUFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LihcbiAgICAgICdmb2N1c2luJyxcbiAgICAgIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZXZlbnQudGFyZ2V0ID09PSB0aGlzLmlucHV0RWxlbWVudCB8fFxuICAgICAgICAgIGV2ZW50LnRhcmdldCA9PT0gKHRoaXMuaW5wdXRFbGVtZW50IGFzIFNiYlNlbGVjdEVsZW1lbnQgfCB1bmRlZmluZWQpPy5pbnB1dEVsZW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZCgnZm9jdXMnKTtcbiAgICAgICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKGBmb2N1cy1vcmlnaW4tJHtzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubW9zdFJlY2VudE1vZGFsaXR5fWApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBwYXNzaXZlOiB0cnVlIH0sXG4gICAgKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LihcbiAgICAgICdmb2N1c291dCcsXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV2ZW50LnRhcmdldCA9PT0gdGhpcy5pbnB1dEVsZW1lbnQgfHxcbiAgICAgICAgICBldmVudC50YXJnZXQgPT09ICh0aGlzLmlucHV0RWxlbWVudCBhcyBTYmJTZWxlY3RFbGVtZW50IHwgdW5kZWZpbmVkKT8uaW5wdXRFbGVtZW50XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuICAgICAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUoJ2ZvY3VzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBzdGF0ZSBvZiB0aGlzLmludGVybmFscy5zdGF0ZXMpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5zdGFydHNXaXRoKCdmb2N1cy1vcmlnaW4tJykpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZShzdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBwYXNzaXZlOiB0cnVlIH0sXG4gICAgKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4gdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCkpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZGlzcGxheXZhbHVlY2hhbmdlJywgKCkgPT4gdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCkpO1xuICAgIC8vIFdlIHdhbnQgdG8gcHJldmVudCB0aGUgbmF0aXZlIGJyb3dzZXIgdmFsaWRhdGlvbiBtZXNzYWdlIHBvcG92ZXJcbiAgICAvLyB0byBiZSBzaG93bi4gVGhpcyBhbHNvIHByZXZlbnRzIGEgYnVnIGluIFdlYktpdCwgd2hpY2ggd291bGQgbm90XG4gICAgLy8gYWxsb3cgaG9zdCBhcyB0aGUgdmFsaWRpdHkgYW5jaG9yOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5ODMyXG4gICAgLy8gVGhpcyBpcyBkdXBsaWNhdGVkIGZyb20gdGhlIGZvcm0gYXNzb2NpYXRlZCBtaXhpbiBmb3IgdGhlIG5hdGl2ZVxuICAgIC8vIGlucHV0IGNvbnRyb2xzIChlLmcuIDxpbnB1dD4gb3IgPHNlbGVjdD4pLlxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignaW52YWxpZCcsIChlKSA9PiBlLnByZXZlbnREZWZhdWx0KCksIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX2Fzc2lnblNsb3RzKCk7XG4gICAgdGhpcy5fY29ubmVjdElucHV0RWxlbWVudCgpO1xuICAgIHRoaXMuX3N5bmNOZWdhdGl2ZSgpO1xuICAgIHRoaXMuX3N5bmNTaXplKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ25lZ2F0aXZlJykpIHtcbiAgICAgIHRoaXMuX3N5bmNOZWdhdGl2ZSgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdzaXplJykpIHtcbiAgICAgIHRoaXMuX3N5bmNTaXplKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fZm9ybUZpZWxkQXR0cmlidXRlT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLl9pbnB1dEZvcm1BYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICBpZiAodGhpcy5faW5wdXQ/LmxvY2FsTmFtZSA9PT0gJ2lucHV0Jykge1xuICAgICAgdGhpcy5fdW5wYXRjaElucHV0VmFsdWUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVXcmFwcGVyQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRWxlbWVudEZvY3VzRXhjbHVkZWQoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKChldmVudC50YXJnZXQgYXMgRWxlbWVudCkubG9jYWxOYW1lICE9PSAnbGFiZWwnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuX2lucHV0Py5sb2NhbE5hbWUgPT09ICdzYmItc2VsZWN0JyAmJlxuICAgICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5sb2NhbE5hbWUgIT09ICdzYmItc2VsZWN0J1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX2lucHV0LmNsaWNrKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9pbnB1dD8uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc0VsZW1lbnRGb2N1c0V4Y2x1ZGVkKGV2ZW50OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBldmVudFxuICAgICAgLmNvbXBvc2VkUGF0aCgpXG4gICAgICAuc29tZShcbiAgICAgICAgKGVsKSA9PlxuICAgICAgICAgIChlbCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCAmJlxuICAgICAgICAgICAgKGVsLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSA9PT0gJzAnIHx8IGVsLmhhc0F0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJykpKSB8fFxuICAgICAgICAgIHRoaXMuX2V4Y2x1ZGVkRm9jdXNFbGVtZW50cy5pbmNsdWRlcygoZWwgYXMgSFRNTEVsZW1lbnQpLmxvY2FsTmFtZSksXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25TbG90TGFiZWxDaGFuZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgbGFiZWxzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xhYmVsJykpO1xuICAgIGlmIChpbXBvcnQubWV0YS5lbnYuREVWICYmIGxhYmVscy5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBEZXRlY3RlZCBtb3JlIHRoYW4gb25lIGxhYmVsIGluIHNiYi1mb3JtLWZpZWxkIyR7dGhpcy5pZH0uIE9ubHkgb25lIGxhYmVsIGlzIHN1cHBvcnRlZC5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fbGFiZWwgPSBsYWJlbHNbMF07XG4gICAgdGhpcy5fc3luY0xhYmVsSW5wdXRSZWZlcmVuY2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogSXQgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGFzc2lnbiB0aGUgYXR0cmlidXRlcyBvZiBgPGlucHV0PmAgdG8gYF9pZGAgYW5kIGBfaW5wdXRgIGFuZCB0byBvYnNlcnZlIHRoZSBuYXRpdmUgcmVhZG9ubHkgYW5kIGRpc2FibGVkIGF0dHJpYnV0ZXMuXG4gICAqL1xuICBwcml2YXRlIF9vblNsb3RJbnB1dENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hc3NpZ25TbG90cygpO1xuICAgIHRoaXMuX2Nvbm5lY3RJbnB1dEVsZW1lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Fzc2lnblNsb3RzKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgnbGFiZWw6bm90KFtzbG90XSknKS5mb3JFYWNoKChlKSA9PiBlLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdsYWJlbCcpKTtcbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NiYi1mb3JtLWVycm9yOm5vdChbc2xvdF0pJykuZm9yRWFjaCgoZSkgPT5cbiAgICAgIGUuc2V0QXR0cmlidXRlKCdzbG90JywgJ2Vycm9yJyksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Nvbm5lY3RJbnB1dEVsZW1lbnQoKTogdm9pZCB7XG4gICAgLy8gRmluZCB0aGUgc2xvdHRlZCBpbnB1dCBlbGVtZW50LCBldmVuIGlmIGl0J3MgbmVzdGVkIChlLmcuIGNoaXAgZ3JvdXApXG4gICAgY29uc3QgaW5wdXRDYW5kaWRhdGVzID0gQXJyYXkuZnJvbShcbiAgICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oJyo6bm90KFtzbG90XSxzYmItY2hpcC1ncm91cCknKSxcbiAgICApO1xuICAgIGNvbnN0IG5ld0lucHV0ID0gaW5wdXRDYW5kaWRhdGVzLmZpbmQoKGUpID0+IHRoaXMuX2lzSW5wdXRFbGVtZW50KGUpKSB8fCBpbnB1dENhbmRpZGF0ZXNbMF07XG5cbiAgICBpZiAobmV3SW5wdXQgPT09IHRoaXMuX2lucHV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dCkge1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZShgaW5wdXQtdHlwZS0ke3RoaXMuX2lucHV0LmxvY2FsTmFtZX1gKTtcbiAgICAgIGlmICh0aGlzLl9pbnB1dC5sb2NhbE5hbWUgPT09ICdpbnB1dCcpIHtcbiAgICAgICAgdGhpcy5fdW5wYXRjaElucHV0VmFsdWUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW5ld0lucHV0KSB7XG4gICAgICB0aGlzLl9pbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnB1dCA9IG5ld0lucHV0O1xuICAgIHRoaXMuX2Fzc2lnbkVycm9yTWVzc2FnZUVsZW1lbnRzKCk7XG4gICAgdGhpcy5fcmVhZElucHV0U3RhdGUoKTtcbiAgICB0aGlzLl9yZWdpc3RlcklucHV0Rm9ybUxpc3RlbmVyKCk7XG4gICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG5cbiAgICBpZiAodGhpcy5faW5wdXQubG9jYWxOYW1lID09PSAndGV4dGFyZWEnKSB7XG4gICAgICB0aGlzLl9pbnB1dC5zZXRBdHRyaWJ1dGUoJ3Jvd3MnLCB0aGlzLl9pbnB1dC5nZXRBdHRyaWJ1dGUoJ3Jvd3MnKSB8fCAnMycpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXQubG9jYWxOYW1lID09PSAnaW5wdXQnKSB7XG4gICAgICB0aGlzLl9wYXRjaElucHV0VmFsdWUoKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgKHRoaXMuX2lucHV0LmxvY2FsTmFtZSA9PT0gJ3NlbGVjdCcgfHwgdGhpcy5faW5wdXQubG9jYWxOYW1lID09PSAnc2JiLXNlbGVjdCcpICYmXG4gICAgICAhdGhpcy5oYXNVcGRhdGVkXG4gICAgKSB7XG4gICAgICAvLyBEdWUgdG8gU1NSIHRoZSBkcm9wZG93biBpY29uIGZvciBzZWxlY3RzIGNhbm5vdCBiZSByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcmVuZGVyIHBhc3MuXG4gICAgICAvLyBEdWUgdG8gdGhpcyB3ZSBzY2hlZHVsZSBhIHJlLXJlbmRlciB0byByZW5kZXIgdGhlIGljb24uXG4gICAgICB0aGlzLmh5ZHJhdGlvbkNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5yZXF1ZXN0VXBkYXRlKCkpO1xuICAgIH1cblxuICAgIHRoaXMuX2Zvcm1GaWVsZEF0dHJpYnV0ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5fZm9ybUZpZWxkQXR0cmlidXRlT2JzZXJ2ZXI/Lm9ic2VydmUodGhpcy5faW5wdXQsIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsncmVhZG9ubHknLCAnZGlzYWJsZWQnLCAnZm9ybScsICdjbGFzcycsICdkYXRhLWV4cGFuZGVkJ10sXG4gICAgfSk7XG4gICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZChgaW5wdXQtdHlwZS0ke3RoaXMuX2lucHV0LmxvY2FsTmFtZX1gKTtcbiAgICB0aGlzLl9zeW5jTGFiZWxJbnB1dFJlZmVyZW5jZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNMYWJlbElucHV0UmVmZXJlbmNlcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lucHV0IHx8ICF0aGlzLl9sYWJlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG5hdGl2ZUlucHV0RWxlbWVudHMuaW5jbHVkZXModGhpcy5faW5wdXQubG9jYWxOYW1lKSB8fFxuICAgICAgKGN1c3RvbUVsZW1lbnRzLmdldCh0aGlzLl9pbnB1dC5sb2NhbE5hbWUpIGFzIHsgZm9ybUFzc29jaWF0ZWQ6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZClcbiAgICAgICAgPy5mb3JtQXNzb2NpYXRlZFxuICAgICkge1xuICAgICAgLy8gRm9yIG5hdGl2ZSBpbnB1dCBlbGVtZW50cyB3ZSB1c2UgdGhlIGBmb3JgIGF0dHJpYnV0ZSBvbiB0aGUgbGFiZWwgdG8gcmVmZXJlbmNlIHRoZSBpbnB1dFxuICAgICAgLy8gdmlhIGlkIHJlZmVyZW5jZS5cbiAgICAgIHRoaXMuX2lucHV0LmlkIHx8PSBgc2JiLWZvcm0tZmllbGQtaW5wdXQtJHtuZXh0SWQrK31gO1xuICAgICAgdGhpcy5fbGFiZWwuaHRtbEZvciA9IHRoaXMuX2lucHV0LmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3Igbm9uLW5hdGl2ZSBpbnB1dCBlbGVtZW50cywgdGhhdCBkbyBub3Qgc3VwcG9ydCByZWZlcmVuY2VzIHZpYSB0aGUgbGFiZWwgZm9yIGF0dHJpYnV0ZSxcbiAgICAgIC8vIHdlIHVzZSBhcmlhLWxhYmVsbGVkYnkgb24gdGhlIGlucHV0IGVsZW1lbnQgdG8gcmVmZXJlbmNlIHRoZSBsYWJlbCBlbGVtZW50IHZpYSBpZC5cbiAgICAgIC8vIFRPRE86IE1pZ3JhdGUgdG8gYXJpYUxhYmVsbGVkQnlFbGVtZW50cyB3aGVuIGF2YWlsYWJsZTpcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L2FyaWFMYWJlbGxlZEJ5RWxlbWVudHNcbiAgICAgIHRoaXMuX2xhYmVsLmlkIHx8PSBgc2JiLWZvcm0tZmllbGQtbGFiZWwtJHtuZXh0SWQrK31gO1xuICAgICAgY29uc3QgbGFiZWxsZWRieSA9XG4gICAgICAgIHRoaXMuX2lucHV0XG4gICAgICAgICAgLmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JylcbiAgICAgICAgICA/LnNwbGl0KCcgJylcbiAgICAgICAgICAuZmlsdGVyKChsKSA9PiAhIWwgJiYgbCAhPT0gdGhpcy5fbGFiZWwhLmlkKSA/PyBbXTtcbiAgICAgIHRoaXMuX2lucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JywgWy4uLmxhYmVsbGVkYnksIHRoaXMuX2xhYmVsLmlkXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzSW5wdXRFbGVtZW50KGlucHV0OiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIG5hdGl2ZUlucHV0RWxlbWVudHMuaW5jbHVkZXMoaW5wdXQubG9jYWxOYW1lKSB8fFxuICAgICAgISEoY3VzdG9tRWxlbWVudHMuZ2V0KGlucHV0LmxvY2FsTmFtZSkgYXMgeyBmb3JtQXNzb2NpYXRlZDogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKVxuICAgICAgICA/LmZvcm1Bc3NvY2lhdGVkXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlYWRJbnB1dFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ3JlYWRvbmx5JywgdGhpcy5faW5wdXQhLmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSk7XG4gICAgdGhpcy50b2dnbGVTdGF0ZSgnZGlzYWJsZWQnLCB0aGlzLl9pbnB1dCEuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKTtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCdoYXMtcG9wdXAtb3BlbicsIHRoaXMuX2lucHV0IS5oYXNBdHRyaWJ1dGUoJ2RhdGEtZXhwYW5kZWQnKSk7XG4gIH1cblxuICBwcml2YXRlIF9yZWdpc3RlcklucHV0Rm9ybUxpc3RlbmVyKCk6IHZvaWQge1xuICAgIHRoaXMuX2lucHV0Rm9ybUFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgIGNvbnN0IHsgc2lnbmFsIH0gPSAodGhpcy5faW5wdXRGb3JtQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpKTtcblxuICAgIGNvbnN0IGZvcm0gPVxuICAgICAgKHRoaXMuX2lucHV0IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MU2VsZWN0RWxlbWVudCB8IHVuZGVmaW5lZCk/LmZvcm0gPz9cbiAgICAgIHRoaXMuX2lucHV0Py5jbG9zZXN0KCdmb3JtJyk7XG4gICAgLy8gVGltZW91dCBuZWVkZWQgdG8gaGF2ZSB2YWx1ZSB1cGRhdGVkXG4gICAgY29uc3QgcmVzZXRIYW5kbGVyID0gKCk6IHVua25vd24gPT4gc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlc2V0KCkpO1xuICAgIGZvcm0/LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2V0JywgcmVzZXRIYW5kbGVyLCB7IHNpZ25hbCB9KTtcbiAgfVxuXG4gIC8vIFdlIG5lZWQgdG8gcGF0Y2ggdGhlIHZhbHVlIHByb3BlcnR5IG9mIHRoZSBIVE1MSW5wdXRFbGVtZW50IGluIG9yZGVyXG4gIC8vIHRvIGJlIGFibGUgdG8gcmVzZXQgdGhlIGZsb2F0aW5nIGxhYmVsIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgcHJpdmF0ZSBfcGF0Y2hJbnB1dFZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IHRoaXMuX2lucHV0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKCFpbnB1dEVsZW1lbnQgfHwgcGF0Y2hlZElucHV0cy5oYXMoaW5wdXRFbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbmFsRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5wdXRFbGVtZW50KSxcbiAgICAgICd2YWx1ZScsXG4gICAgKTtcblxuICAgIGlmICghb3JpZ2luYWxEZXNjcmlwdG9yIHx8ICFvcmlnaW5hbERlc2NyaXB0b3Iuc2V0IHx8ICFvcmlnaW5hbERlc2NyaXB0b3IuZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGF0Y2hlZElucHV0cy5zZXQoaW5wdXRFbGVtZW50LCBvcmlnaW5hbERlc2NyaXB0b3IpO1xuXG4gICAgY29uc3QgeyBnZXQ6IGdldHRlciwgc2V0OiBzZXR0ZXIgfSA9IG9yaWdpbmFsRGVzY3JpcHRvcjtcbiAgICBjb25zdCBjaGVja0FuZFVwZGF0ZUlucHV0RW1wdHkgPSAoKTogdm9pZCA9PiB0aGlzLl9jaGVja0FuZFVwZGF0ZUlucHV0RW1wdHkoKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnB1dEVsZW1lbnQsICd2YWx1ZScsIHtcbiAgICAgIC4uLm9yaWdpbmFsRGVzY3JpcHRvcixcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGdldHRlci5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICAgIHNldChuZXdWYWx1ZSkge1xuICAgICAgICBzZXR0ZXIuY2FsbCh0aGlzLCBuZXdWYWx1ZSk7XG4gICAgICAgIGNoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3VucGF0Y2hJbnB1dFZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IHRoaXMuX2lucHV0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3Qgb3JpZ2luYWxEZXNjcmlwdG9yID0gcGF0Y2hlZElucHV0cy5nZXQoaW5wdXRFbGVtZW50KTtcbiAgICBpZiAob3JpZ2luYWxEZXNjcmlwdG9yKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5wdXRFbGVtZW50LCAndmFsdWUnLCBvcmlnaW5hbERlc2NyaXB0b3IpO1xuICAgICAgcGF0Y2hlZElucHV0cy5kZWxldGUoaW5wdXRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jaGVja0FuZFVwZGF0ZUlucHV0RW1wdHkoKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVTdGF0ZShcbiAgICAgICdlbXB0eScsXG4gICAgICB0aGlzLl9mbG9hdGluZ0xhYmVsU3VwcG9ydGVkSW5wdXRFbGVtZW50cy5pbmNsdWRlcyh0aGlzLl9pbnB1dD8ubG9jYWxOYW1lIGFzIHN0cmluZykgJiZcbiAgICAgICAgdGhpcy5faXNJbnB1dEVtcHR5KCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzSW5wdXRFbXB0eSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjaGlwR3JvdXBFbGVtID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdzYmItY2hpcC1ncm91cCcpO1xuICAgIGlmIChjaGlwR3JvdXBFbGVtKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLl9pc0lucHV0VmFsdWVFbXB0eSgpICYmXG4gICAgICAgIChBcnJheS5pc0FycmF5KGNoaXBHcm91cEVsZW0udmFsdWUpXG4gICAgICAgICAgPyBjaGlwR3JvdXBFbGVtLnZhbHVlLmxlbmd0aCA9PT0gMFxuICAgICAgICAgIDogIWNoaXBHcm91cEVsZW0ucXVlcnlTZWxlY3Rvcignc2JiLWNoaXAnKSlcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuX2Zsb2F0aW5nTGFiZWxTdXBwb3J0ZWRJbnB1dFR5cGVzLmluY2x1ZGVzKHRoaXMuX2lucHV0LnR5cGUpICYmXG4gICAgICAgIHRoaXMuX2lzSW5wdXRWYWx1ZUVtcHR5KClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5wdXQuc2VsZWN0ZWRPcHRpb25zPy5pdGVtKDApPy5sYWJlbD8udHJpbSgpID09PSAnJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lucHV0Py5sb2NhbE5hbWUgPT09ICdzYmItc2VsZWN0Jykge1xuICAgICAgcmV0dXJuICh0aGlzLl9pbnB1dCBhcyBTYmJTZWxlY3RFbGVtZW50KS5nZXREaXNwbGF5VmFsdWU/LigpPy50cmltKCkgPT09ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5faXNJbnB1dFZhbHVlRW1wdHkoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc0lucHV0VmFsdWVFbXB0eSgpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9ICh0aGlzLl9pbnB1dCBhcyB7IHZhbHVlOiBzdHJpbmcgfSkudmFsdWU7XG4gICAgcmV0dXJuIFsnJywgdW5kZWZpbmVkLCBudWxsXS5pbmNsdWRlcyh2YWx1ZSkgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCk7XG4gIH1cblxuICAvKipcbiAgICogSXQgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIHNldCB0aGUgYXJpYS1kZXNjcmliZWRieSBhdHRyaWJ1dGUgZm9yIHRoZSBzbG90dGVkIGlucHV0IHJlZmVyZW5jaW5nIGF2YWlsYWJsZSA8c2JiLWZvcm0tZXJyb3I+IGluc3RhbmNlcy5cbiAgICovXG4gIHByaXZhdGUgX29uU2xvdEVycm9yQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9yRWxlbWVudHMgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxTbG90RWxlbWVudCkuYXNzaWduZWRFbGVtZW50cygpO1xuICAgIGlmICh0aGlzLl9pbnB1dCAmJiB0aGlzLl9pbnB1dC5hcmlhRGVzY3JpYmVkQnlFbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9pbnB1dC5hcmlhRGVzY3JpYmVkQnlFbGVtZW50cyA9IHJlbW92ZUFyaWFFbGVtZW50cyhcbiAgICAgICAgdGhpcy5faW5wdXQuYXJpYURlc2NyaWJlZEJ5RWxlbWVudHMsXG4gICAgICAgIC4uLih0aGlzLl9lcnJvckVsZW1lbnRzID8/IFtdKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fZXJyb3JFbGVtZW50cyA9IGVycm9yRWxlbWVudHM7XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLl9lcnJvckVsZW1lbnRzKSB7XG4gICAgICAvLyBJbnN0ZWFkIG9mIGRlZmluaW5nIGEgY29udGFpbmVyIHdpdGggYW4gYXJpYS1saXZlIHJlZ2lvbiBhcyBleHBlY3RlZCwgd2UgaGFkIHRvIGNoYW5nZVxuICAgICAgLy8gc2V0dGluZyBpdCBmb3IgZXZlcnkgc2xvdHRlZCBlbGVtZW50IHRvIHByb3Blcmx5IHdvcmsgaW4gYWxsIGJyb3dzZXJzIGFuZCBzY3JlZW4gcmVhZGVyIGNvbWJpbmF0aW9ucy5cbiAgICAgIGVsLnJvbGUgfHw9ICdzdGF0dXMnO1xuICAgIH1cblxuICAgIHRoaXMuX2Fzc2lnbkVycm9yTWVzc2FnZUVsZW1lbnRzKCk7XG4gICAgdGhpcy50b2dnbGVTdGF0ZSgnaGFzLWVycm9yJywgISF0aGlzLl9lcnJvckVsZW1lbnRzLmxlbmd0aCk7XG4gICAgdGhpcy5fc3luY05lZ2F0aXZlKCk7XG4gIH1cblxuICBwcml2YXRlIF9hc3NpZ25FcnJvck1lc3NhZ2VFbGVtZW50cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faW5wdXQpIHtcbiAgICAgIHRoaXMuX2lucHV0LmFyaWFEZXNjcmliZWRCeUVsZW1lbnRzID0gYXBwZW5kQXJpYUVsZW1lbnRzKFxuICAgICAgICB0aGlzLl9pbnB1dC5hcmlhRGVzY3JpYmVkQnlFbGVtZW50cyxcbiAgICAgICAgLi4udGhpcy5fZXJyb3JFbGVtZW50cyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIE1hbnVhbGx5IHJlc2V0IHRoZSBmb3JtIGZpZWxkLiBDdXJyZW50bHksIHRoaXMgb25seSByZXNldHMgdGhlIGZsb2F0aW5nIGxhYmVsLiAqL1xuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gIH1cblxuICAvKiogTWFudWFsbHkgY2xlYXJzIHRoZSBpbnB1dCB2YWx1ZS4gSXQgb25seSB3b3JrcyBmb3IgaW5wdXRzLCBzZWxlY3RzIGFyZSBub3Qgc3VwcG9ydGVkLiAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgaWYgKCh0aGlzLl9pbnB1dD8ubG9jYWxOYW1lIGFzIHN0cmluZykgIT09ICdpbnB1dCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKHRoaXMuX2lucHV0IGFzIHsgdmFsdWU6IHN0cmluZyB9KS52YWx1ZSA9ICcnO1xuICAgIHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3luY05lZ2F0aXZlKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKFxuICAgICAgJ3NiYi1mb3JtLWVycm9yLHNiYi1taW5pLWJ1dHRvbixzYmItcG9wb3Zlci10cmlnZ2VyLHNiYi1mb3JtLWZpZWxkLWNsZWFyLHNiYi1kYXRlcGlja2VyLW5leHQtZGF5LHNiYi1kYXRlcGlja2VyLXByZXZpb3VzLWRheSxzYmItZGF0ZXBpY2tlci10b2dnbGUsc2JiLXNlbGVjdCxzYmItYXV0b2NvbXBsZXRlLHNiYi1hdXRvY29tcGxldGUtZ3JpZCxzYmItY2hpcC1ncm91cCcsXG4gICAgKS5mb3JFYWNoKChlbGVtZW50KSA9PiBlbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnbmVnYXRpdmUnLCB0aGlzLm5lZ2F0aXZlKSk7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jU2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJBdXRvY29tcGxldGVCYXNlRWxlbWVudCB8IFNiYlNlbGVjdEVsZW1lbnQ+KFxuICAgICAgJ3NiYi1hdXRvY29tcGxldGUsc2JiLWF1dG9jb21wbGV0ZS1ncmlkLHNiYi1zZWxlY3QnLFxuICAgICkuZm9yRWFjaCgoZWxlbWVudCkgPT4gKGVsZW1lbnQuc2l6ZSA9IHRoaXMuc2l6ZSA9PT0gJ3MnID8gJ3MnIDogJ20nKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fc3BhY2Utd3JhcHBlclwiPlxuICAgICAgICAkey8qIFF1ZXJpZWQgYnkgaWQgZnJvbSB0aGUgYXV0b2NvbXBsZXRlL3NlbGVjdCB0byBiZSB1c2VkIGFzIHRoZSBhbmNob3IgZWxlbWVudCAqLyAnJ31cbiAgICAgICAgPGRpdiBAY2xpY2s9JHt0aGlzLl9oYW5kbGVXcmFwcGVyQ2xpY2t9IGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX3dyYXBwZXJcIiBpZD1cIm92ZXJsYXktYW5jaG9yXCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT1cInByZWZpeFwiIEBzbG90Y2hhbmdlPSR7dGhpcy5fc3luY05lZ2F0aXZlfT48L3Nsb3Q+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1mb3JtLWZpZWxkX19pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2xhYmVsLXNwYWNlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2xhYmVsXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2xhYmVsLWVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImxhYmVsXCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9vblNsb3RMYWJlbENoYW5nZX0+PC9zbG90PlxuICAgICAgICAgICAgICAgICR7dGhpcy5vcHRpb25hbFxuICAgICAgICAgICAgICAgICAgPyBodG1sYCA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4gJHtpMThuT3B0aW9uYWxbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19IDwvc3Bhbj5gXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItZm9ybS1maWVsZF9faW5wdXRcIj5cbiAgICAgICAgICAgICAgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl9vblNsb3RJbnB1dENoYW5nZX0+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAke3RoaXMuaGFzVXBkYXRlZCAmJiBbJ3NlbGVjdCcsICdzYmItc2VsZWN0J10uaW5jbHVkZXModGhpcy5faW5wdXQ/LmxvY2FsTmFtZSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgID8gaHRtbGA8c2JiLWljb25cbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJjaGV2cm9uLXNtYWxsLWRvd24tc21hbGxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fc2VsZWN0LWlucHV0LWljb25cIlxuICAgICAgICAgICAgICAgID48L3NiYi1pY29uPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzbG90IG5hbWU9XCJzdWZmaXhcIiBAc2xvdGNoYW5nZT0ke3RoaXMuX3N5bmNOZWdhdGl2ZX0+PC9zbG90PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2Vycm9yXCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT1cImVycm9yXCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9vblNsb3RFcnJvckNoYW5nZX0+PC9zbG90PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1mb3JtLWZpZWxkJzogU2JiRm9ybUZpZWxkRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbInN0YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThCQSxJQUFJLFNBQVM7QUFFYixNQUFNLG9DQUFvQixRQUFBO0FBQzFCLE1BQU0sc0JBQXNCLENBQUMsU0FBUyxZQUFZLFFBQVE7SUFjcEQsdUJBQW1CLE1BQUE7O0FBRnhCLE1BQUEsbUJBQUEsQ0FBQSxjQUFjLGdCQUFnQixHQUM5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
925
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIExpdEVsZW1lbnQsXG4gIG5vdGhpbmcsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgU2JiQXV0b2NvbXBsZXRlQmFzZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9hdXRvY29tcGxldGUuanMnO1xuaW1wb3J0IHsgc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yIH0gZnJvbSAnLi4vLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlLCBzbG90U3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaXNMZWFuIH0gZnJvbSAnLi4vLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgaTE4bk9wdGlvbmFsIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB7XG4gIGFwcGVuZEFyaWFFbGVtZW50cyxcbiAgcmVtb3ZlQXJpYUVsZW1lbnRzLFxuICBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4sXG4gIFNiYkh5ZHJhdGlvbk1peGluLFxuICBTYmJOZWdhdGl2ZU1peGluLFxufSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYlNlbGVjdEVsZW1lbnQgfSBmcm9tICcuLi8uLi9zZWxlY3QuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9mb3JtLWZpZWxkLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vaWNvbi5qcyc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG5jb25zdCBwYXRjaGVkSW5wdXRzID0gbmV3IFdlYWtNYXA8SFRNTElucHV0RWxlbWVudCwgUHJvcGVydHlEZXNjcmlwdG9yPigpO1xuY29uc3QgbmF0aXZlSW5wdXRFbGVtZW50cyA9IFsnaW5wdXQnLCAndGV4dGFyZWEnLCAnc2VsZWN0J107XG5cbi8qKiBBbiBpbnRlcmZhY2Ugd2hpY2ggYWxsb3dzIGEgY29udHJvbCB0byB3b3JrIGluc2lkZSBvZiBhIGBTYmJGb3JtRmllbGRgLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYmJGb3JtRmllbGRFbGVtZW50Q29udHJvbCB7XG4gIC8qKiBUaGUgaWQgb2YgdGhlIGZvcm0gZmllbGQuICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBjb250cm9sIGlzIGVtcHR5LiAqL1xuICByZWFkb25seSBlbXB0eTogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgcmVhZG9ubHkuICovXG4gIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuICovXG4gIHJlYWRvbmx5IGRpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKiBIYW5kbGVzIGEgY2xpY2sgb24gdGhlIGNvbnRyb2wncyBjb250YWluZXIuICovXG4gIG9uQ29udGFpbmVyQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgU2JiRm9ybUZpZWxkQ29udHJvbEV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICBwcml2YXRlIF9jb250cm9sOiBTYmJGb3JtRmllbGRFbGVtZW50Q29udHJvbCB8IG51bGw7XG5cbiAgcHVibGljIGdldCBjb250cm9sKCk6IFNiYkZvcm1GaWVsZEVsZW1lbnRDb250cm9sIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2w7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IoY29udHJvbDogU2JiRm9ybUZpZWxkRWxlbWVudENvbnRyb2wgfCBudWxsKSB7XG4gICAgc3VwZXIoJ2Zvcm1maWVsZGNvbnRyb2wnKTtcbiAgICB0aGlzLl9jb250cm9sID0gY29udHJvbDtcbiAgfVxufVxuXG4vKipcbiAqIEl0IHdyYXBzIGFuIGlucHV0IGVsZW1lbnQgYWRkaW5nIGxhYmVsLCBlcnJvcnMsIGljb24sIGV0Yy5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGlzIHNsb3QgdG8gcmVuZGVyIGFuIGlucHV0L3NlbGVjdCBvciBhIHN1cHBvcnRlZCBub24tbmF0aXZlIGVsZW1lbnQuXG4gKiBAc2xvdCBsYWJlbCAtIFVzZSB0aGlzIHNsb3QgdG8gcmVuZGVyIGEgbGFiZWwuXG4gKiBAc2xvdCBwcmVmaXggLSBVc2UgdGhpcyBzbG90IHRvIHJlbmRlciBhbiBpY29uIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGlucHV0LlxuICogQHNsb3Qgc3VmZml4IC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYW4gaWNvbiBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgaW5wdXQuXG4gKiBAc2xvdCBlcnJvciAtIFVzZSB0aGlzIHNsb3QgdG8gcmVuZGVyIGFuIGVycm9yLlxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItZm9ybS1maWVsZCcpXG5Ac2xvdFN0YXRlKClcbmNsYXNzIFNiYkZvcm1GaWVsZEVsZW1lbnQgZXh0ZW5kcyBTYmJOZWdhdGl2ZU1peGluKFxuICBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4oU2JiSHlkcmF0aW9uTWl4aW4oTGl0RWxlbWVudCkpLFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuXG4gIC8vIExpc3Qgb2YgZWxlbWVudHMgdGhhdCBzaG91bGQgbm90IGZvY3VzIGlucHV0IG9uIGNsaWNrXG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4Y2x1ZGVkRm9jdXNFbGVtZW50cyA9IFsnYnV0dG9uJywgJ3NiYi1wb3BvdmVyJywgJ3NiYi1vcHRpb24nLCAnc2JiLWNoaXAnXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9mbG9hdGluZ0xhYmVsU3VwcG9ydGVkSW5wdXRFbGVtZW50cyA9IFtcbiAgICAnaW5wdXQnLFxuICAgICdzZWxlY3QnLFxuICAgICdzYmItZGF0ZS1pbnB1dCcsXG4gICAgJ3NiYi10aW1lLWlucHV0JyxcbiAgICAnc2JiLXNlbGVjdCcsXG4gICAgJ3RleHRhcmVhJyxcbiAgXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9mbG9hdGluZ0xhYmVsU3VwcG9ydGVkSW5wdXRUeXBlcyA9IFtcbiAgICAnZW1haWwnLFxuICAgICdudW1iZXInLFxuICAgICdwYXNzd29yZCcsXG4gICAgJ3NlYXJjaCcsXG4gICAgJ3RlbCcsXG4gICAgJ3RleHQnLFxuICAgICd1cmwnLFxuICBdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAqIGBub25lYCBkb2VzIG5vdCByZXNlcnZlIGFueSBzcGFjZS5cbiAgICogYHJlc2VydmVgIGRvZXMgcmVzZXJ2ZSBvbmUgcm93IGZvciBhbiBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZXJyb3Itc3BhY2UnLCByZWZsZWN0OiB0cnVlIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBlcnJvclNwYWNlOiAnbm9uZScgfCAncmVzZXJ2ZScgPSAnbm9uZSc7XG5cbiAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpbnB1dCBpcyBvcHRpb25hbC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIG9wdGlvbmFsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNpemUgdmFyaWFudCwgZWl0aGVyIGwsIG0gb3Igcy5cbiAgICogQGRlZmF1bHQgJ20nIC8gJ3MnIChsZWFuKVxuICAgKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgYWNjZXNzb3Igc2l6ZTogJ2wnIHwgJ20nIHwgJ3MnID0gaXNMZWFuKCkgPyAncycgOiAnbSc7XG5cbiAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgZm9ybSBmaWVsZCB3aXRob3V0IGEgYm9yZGVyLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYm9yZGVybGVzczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBEZWZpbmVzIHRoZSB3aWR0aCBvZiB0aGUgY29tcG9uZW50OlxuICAgKiAtIGBkZWZhdWx0YDogdGhlIGNvbXBvbmVudCBoYXMgZGVmaW5lZCB3aWR0aCBhbmQgbWluLXdpZHRoO1xuICAgKiAtIGBjb2xsYXBzZWA6IHRoZSBjb21wb25lbnQgYWRhcHRzIGl0c2VsZiB0byBpdHMgaW5uZXIgaW5wdXQgY29udGVudC4gKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgYWNjZXNzb3Igd2lkdGg6ICdkZWZhdWx0JyB8ICdjb2xsYXBzZScgPSAnZGVmYXVsdCc7XG5cbiAgLyoqIFdoZXRoZXIgdG8gdmlzdWFsbHkgaGlkZSB0aGUgbGFiZWwuIElmIGhpZGRlbiwgc2NyZWVuIHJlYWRlcnMgd2lsbCBzdGlsbCByZWFkIGl0LiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnaGlkZGVuLWxhYmVsJywgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgaGlkZGVuTGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgbGFiZWwgc2hvdWxkIGZsb2F0LiBJZiBhY3RpdmF0ZWQsIHRoZSBwbGFjZWhvbGRlciBvZiB0aGUgaW5wdXQgaXMgaGlkZGVuLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZmxvYXRpbmctbGFiZWwnLCByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBmbG9hdGluZ0xhYmVsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEl0IGlzIHVzZWQgaW50ZXJuYWxseSB0byBnZXQgdGhlIGBlcnJvcmAgc2xvdC4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBhY2Nlc3NvciBfZXJyb3JFbGVtZW50czogRWxlbWVudFtdID0gW107XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgc2xvdHRlZCBpbnB1dCBlbGVtZW50LiAqL1xuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9pbnB1dDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxTZWxlY3RFbGVtZW50IHwgSFRNTEVsZW1lbnQgfCBudWxsID1cbiAgICBudWxsO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIHNsb3R0ZWQgbGFiZWwgZWxlbWVudHMuICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX2xhYmVsITogSFRNTExhYmVsRWxlbWVudDtcblxuICAvKiogUmV0dXJucyB0aGUgaW5wdXQgZWxlbWVudC4gKi9cbiAgcHVibGljIGdldCBpbnB1dEVsZW1lbnQoKTogSFRNTElucHV0RWxlbWVudCB8IEhUTUxTZWxlY3RFbGVtZW50IHwgSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXQ7XG4gIH1cblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgLyoqXG4gICAqIExpc3RlbnMgdG8gdGhlIGNoYW5nZXMgb24gYHJlYWRvbmx5YCBhbmQgYGRpc2FibGVkYCBhdHRyaWJ1dGVzIG9mIGA8aW5wdXQ+YC5cbiAgICovXG4gIHByaXZhdGUgX2Zvcm1GaWVsZEF0dHJpYnV0ZU9ic2VydmVyID0gIWlzU2VydmVyXG4gICAgPyBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zOiBNdXRhdGlvblJlY29yZFtdKSA9PiB7XG4gICAgICAgIGlmIChtdXRhdGlvbnMuc29tZSgobSkgPT4gbS50eXBlID09PSAnYXR0cmlidXRlcycpICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5fcmVhZElucHV0U3RhdGUoKTtcbiAgICAgICAgICB0aGlzLl9yZWdpc3RlcklucHV0Rm9ybUxpc3RlbmVyKCk7XG4gICAgICAgICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgOiBudWxsO1xuXG4gIHByaXZhdGUgX2lucHV0Rm9ybUFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcHJpdmF0ZSBfY29udHJvbDogU2JiRm9ybUZpZWxkRWxlbWVudENvbnRyb2wgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LihcbiAgICAgICdmb2N1c2luJyxcbiAgICAgIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZXZlbnQudGFyZ2V0ID09PSB0aGlzLmlucHV0RWxlbWVudCB8fFxuICAgICAgICAgIGV2ZW50LnRhcmdldCA9PT0gKHRoaXMuaW5wdXRFbGVtZW50IGFzIFNiYlNlbGVjdEVsZW1lbnQgfCB1bmRlZmluZWQpPy5pbnB1dEVsZW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZCgnZm9jdXMnKTtcbiAgICAgICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKGBmb2N1cy1vcmlnaW4tJHtzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubW9zdFJlY2VudE1vZGFsaXR5fWApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBwYXNzaXZlOiB0cnVlIH0sXG4gICAgKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LihcbiAgICAgICdmb2N1c291dCcsXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV2ZW50LnRhcmdldCA9PT0gdGhpcy5pbnB1dEVsZW1lbnQgfHxcbiAgICAgICAgICBldmVudC50YXJnZXQgPT09ICh0aGlzLmlucHV0RWxlbWVudCBhcyBTYmJTZWxlY3RFbGVtZW50IHwgdW5kZWZpbmVkKT8uaW5wdXRFbGVtZW50XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuICAgICAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUoJ2ZvY3VzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBzdGF0ZSBvZiB0aGlzLmludGVybmFscy5zdGF0ZXMpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5zdGFydHNXaXRoKCdmb2N1cy1vcmlnaW4tJykpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZShzdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBwYXNzaXZlOiB0cnVlIH0sXG4gICAgKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4gdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCkpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZGlzcGxheXZhbHVlY2hhbmdlJywgKCkgPT4gdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCkpO1xuICAgIC8vIFdlIHdhbnQgdG8gcHJldmVudCB0aGUgbmF0aXZlIGJyb3dzZXIgdmFsaWRhdGlvbiBtZXNzYWdlIHBvcG92ZXJcbiAgICAvLyB0byBiZSBzaG93bi4gVGhpcyBhbHNvIHByZXZlbnRzIGEgYnVnIGluIFdlYktpdCwgd2hpY2ggd291bGQgbm90XG4gICAgLy8gYWxsb3cgaG9zdCBhcyB0aGUgdmFsaWRpdHkgYW5jaG9yOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5ODMyXG4gICAgLy8gVGhpcyBpcyBkdXBsaWNhdGVkIGZyb20gdGhlIGZvcm0gYXNzb2NpYXRlZCBtaXhpbiBmb3IgdGhlIG5hdGl2ZVxuICAgIC8vIGlucHV0IGNvbnRyb2xzIChlLmcuIDxpbnB1dD4gb3IgPHNlbGVjdD4pLlxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignaW52YWxpZCcsIChlKSA9PiBlLnByZXZlbnREZWZhdWx0KCksIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Zvcm1maWVsZGNvbnRyb2wnLCAoZTogU2JiRm9ybUZpZWxkQ29udHJvbEV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9jb250cm9sID0gZS5jb250cm9sO1xuICAgICAgaWYgKHRoaXMuX2Nvbm5lY3RJbnB1dEVsZW1lbnQoKSA9PT0gJ3VuY2hhbmdlZCcpIHtcbiAgICAgICAgdGhpcy5fYXNzaWduRXJyb3JNZXNzYWdlRWxlbWVudHMoKTtcbiAgICAgICAgdGhpcy5fcmVhZElucHV0U3RhdGUoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9hc3NpZ25TbG90cygpO1xuICAgIHRoaXMuX2Nvbm5lY3RJbnB1dEVsZW1lbnQoKTtcbiAgICB0aGlzLl9zeW5jTmVnYXRpdmUoKTtcbiAgICB0aGlzLl9zeW5jU2l6ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCduZWdhdGl2ZScpKSB7XG4gICAgICB0aGlzLl9zeW5jTmVnYXRpdmUoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnc2l6ZScpKSB7XG4gICAgICB0aGlzLl9zeW5jU2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX2Zvcm1GaWVsZEF0dHJpYnV0ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5faW5wdXRGb3JtQWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgaWYgKHRoaXMuX2lucHV0Py5sb2NhbE5hbWUgPT09ICdpbnB1dCcpIHtcbiAgICAgIHRoaXMuX3VucGF0Y2hJbnB1dFZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlV3JhcHBlckNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRWxlbWVudEZvY3VzRXhjbHVkZWQoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbnRyb2w/Lm9uQ29udGFpbmVyQ2xpY2spIHtcbiAgICAgIHRoaXMuX2NvbnRyb2w/Lm9uQ29udGFpbmVyQ2xpY2soZXZlbnQpO1xuICAgIH0gZWxzZSBpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5sb2NhbE5hbWUgIT09ICdsYWJlbCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5faW5wdXQ/LmxvY2FsTmFtZSA9PT0gJ3NiYi1zZWxlY3QnICYmXG4gICAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmxvY2FsTmFtZSAhPT0gJ3NiYi1zZWxlY3QnXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5faW5wdXQuY2xpY2soKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lucHV0Py5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzRWxlbWVudEZvY3VzRXhjbHVkZWQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV2ZW50XG4gICAgICAuY29tcG9zZWRQYXRoKClcbiAgICAgIC5zb21lKFxuICAgICAgICAoZWwpID0+XG4gICAgICAgICAgKGVsIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50ICYmXG4gICAgICAgICAgICAoZWwuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpID09PSAnMCcgfHwgZWwuaGFzQXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSkpIHx8XG4gICAgICAgICAgdGhpcy5fZXhjbHVkZWRGb2N1c0VsZW1lbnRzLmluY2x1ZGVzKChlbCBhcyBIVE1MRWxlbWVudCkubG9jYWxOYW1lKSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9vblNsb3RMYWJlbENoYW5nZSgpOiB2b2lkIHtcbiAgICBjb25zdCBsYWJlbHMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgnbGFiZWwnKSk7XG4gICAgaWYgKGltcG9ydC5tZXRhLmVudi5ERVYgJiYgbGFiZWxzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYERldGVjdGVkIG1vcmUgdGhhbiBvbmUgbGFiZWwgaW4gc2JiLWZvcm0tZmllbGQjJHt0aGlzLmlkfS4gT25seSBvbmUgbGFiZWwgaXMgc3VwcG9ydGVkLmAsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLl9sYWJlbCA9IGxhYmVsc1swXTtcbiAgICB0aGlzLl9zeW5jTGFiZWxJbnB1dFJlZmVyZW5jZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBpcyB1c2VkIGludGVybmFsbHkgdG8gYXNzaWduIHRoZSBhdHRyaWJ1dGVzIG9mIGA8aW5wdXQ+YCB0byBgX2lkYCBhbmQgYF9pbnB1dGAgYW5kIHRvIG9ic2VydmUgdGhlIG5hdGl2ZSByZWFkb25seSBhbmQgZGlzYWJsZWQgYXR0cmlidXRlcy5cbiAgICovXG4gIHByaXZhdGUgX29uU2xvdElucHV0Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Fzc2lnblNsb3RzKCk7XG4gICAgdGhpcy5fY29ubmVjdElucHV0RWxlbWVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXNzaWduU2xvdHMoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdsYWJlbDpub3QoW3Nsb3RdKScpLmZvckVhY2goKGUpID0+IGUuc2V0QXR0cmlidXRlKCdzbG90JywgJ2xhYmVsJykpO1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgnc2JiLWZvcm0tZXJyb3I6bm90KFtzbG90XSknKS5mb3JFYWNoKChlKSA9PlxuICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAnZXJyb3InKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29ubmVjdElucHV0RWxlbWVudCgpOiAnY2hhbmdlZCcgfCAnbm8taW5wdXQnIHwgJ3VuY2hhbmdlZCcge1xuICAgIGxldCBuZXdJbnB1dDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAodGhpcy5fY29udHJvbD8uaWQpIHtcbiAgICAgIG5ld0lucHV0ID0gKHRoaXMuZ2V0Um9vdE5vZGUoKSBhcyBEb2N1bWVudCB8IFNoYWRvd1Jvb3QpLmdldEVsZW1lbnRCeUlkKHRoaXMuX2NvbnRyb2wuaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGaW5kIHRoZSBzbG90dGVkIGlucHV0IGVsZW1lbnQsIGV2ZW4gaWYgaXQncyBuZXN0ZWQgKGUuZy4gY2hpcCBncm91cClcbiAgICAgIGNvbnN0IGlucHV0Q2FuZGlkYXRlcyA9IEFycmF5LmZyb20oXG4gICAgICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oJyo6bm90KFtzbG90XSxzYmItY2hpcC1ncm91cCknKSxcbiAgICAgICk7XG4gICAgICBuZXdJbnB1dCA9XG4gICAgICAgIChpbnB1dENhbmRpZGF0ZXMuZmluZCgoZSkgPT4gdGhpcy5faXNJbnB1dEVsZW1lbnQoZSkpIHx8IGlucHV0Q2FuZGlkYXRlc1swXSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobmV3SW5wdXQgPT09IHRoaXMuX2lucHV0KSB7XG4gICAgICByZXR1cm4gJ3VuY2hhbmdlZCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dCkge1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZShgaW5wdXQtdHlwZS0ke3RoaXMuX2lucHV0LmxvY2FsTmFtZX1gKTtcbiAgICAgIGlmICh0aGlzLl9pbnB1dC5sb2NhbE5hbWUgPT09ICdpbnB1dCcpIHtcbiAgICAgICAgdGhpcy5fdW5wYXRjaElucHV0VmFsdWUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW5ld0lucHV0KSB7XG4gICAgICB0aGlzLl9pbnB1dCA9IG51bGw7XG4gICAgICByZXR1cm4gJ25vLWlucHV0JztcbiAgICB9XG5cbiAgICB0aGlzLl9pbnB1dCA9IG5ld0lucHV0O1xuICAgIHRoaXMuX3JlZ2lzdGVySW5wdXRGb3JtTGlzdGVuZXIoKTtcbiAgICB0aGlzLl9hc3NpZ25FcnJvck1lc3NhZ2VFbGVtZW50cygpO1xuICAgIHRoaXMuX3JlYWRJbnB1dFN0YXRlKCk7XG4gICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG5cbiAgICBpZiAodGhpcy5faW5wdXQubG9jYWxOYW1lID09PSAndGV4dGFyZWEnKSB7XG4gICAgICB0aGlzLl9pbnB1dC5zZXRBdHRyaWJ1dGUoJ3Jvd3MnLCB0aGlzLl9pbnB1dC5nZXRBdHRyaWJ1dGUoJ3Jvd3MnKSB8fCAnMycpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXQubG9jYWxOYW1lID09PSAnaW5wdXQnKSB7XG4gICAgICB0aGlzLl9wYXRjaElucHV0VmFsdWUoKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgKHRoaXMuX2lucHV0LmxvY2FsTmFtZSA9PT0gJ3NlbGVjdCcgfHwgdGhpcy5faW5wdXQubG9jYWxOYW1lID09PSAnc2JiLXNlbGVjdCcpICYmXG4gICAgICAhdGhpcy5oYXNVcGRhdGVkXG4gICAgKSB7XG4gICAgICAvLyBEdWUgdG8gU1NSIHRoZSBkcm9wZG93biBpY29uIGZvciBzZWxlY3RzIGNhbm5vdCBiZSByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcmVuZGVyIHBhc3MuXG4gICAgICAvLyBEdWUgdG8gdGhpcyB3ZSBzY2hlZHVsZSBhIHJlLXJlbmRlciB0byByZW5kZXIgdGhlIGljb24uXG4gICAgICB0aGlzLmh5ZHJhdGlvbkNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5yZXF1ZXN0VXBkYXRlKCkpO1xuICAgIH1cblxuICAgIHRoaXMuX2Zvcm1GaWVsZEF0dHJpYnV0ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5fZm9ybUZpZWxkQXR0cmlidXRlT2JzZXJ2ZXI/Lm9ic2VydmUodGhpcy5faW5wdXQsIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsncmVhZG9ubHknLCAnZGlzYWJsZWQnLCAnZm9ybScsICdjbGFzcycsICdkYXRhLWV4cGFuZGVkJ10sXG4gICAgfSk7XG4gICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZChgaW5wdXQtdHlwZS0ke3RoaXMuX2lucHV0LmxvY2FsTmFtZX1gKTtcbiAgICB0aGlzLl9zeW5jTGFiZWxJbnB1dFJlZmVyZW5jZXMoKTtcbiAgICByZXR1cm4gJ2NoYW5nZWQnO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3luY0xhYmVsSW5wdXRSZWZlcmVuY2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5wdXQgfHwgIXRoaXMuX2xhYmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgbmF0aXZlSW5wdXRFbGVtZW50cy5pbmNsdWRlcyh0aGlzLl9pbnB1dC5sb2NhbE5hbWUpIHx8XG4gICAgICAoY3VzdG9tRWxlbWVudHMuZ2V0KHRoaXMuX2lucHV0LmxvY2FsTmFtZSkgYXMgeyBmb3JtQXNzb2NpYXRlZDogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKVxuICAgICAgICA/LmZvcm1Bc3NvY2lhdGVkXG4gICAgKSB7XG4gICAgICAvLyBGb3IgbmF0aXZlIGlucHV0IGVsZW1lbnRzIHdlIHVzZSB0aGUgYGZvcmAgYXR0cmlidXRlIG9uIHRoZSBsYWJlbCB0byByZWZlcmVuY2UgdGhlIGlucHV0XG4gICAgICAvLyB2aWEgaWQgcmVmZXJlbmNlLlxuICAgICAgdGhpcy5faW5wdXQuaWQgfHw9IGBzYmItZm9ybS1maWVsZC1pbnB1dC0ke25leHRJZCsrfWA7XG4gICAgICB0aGlzLl9sYWJlbC5odG1sRm9yID0gdGhpcy5faW5wdXQuaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBub24tbmF0aXZlIGlucHV0IGVsZW1lbnRzLCB0aGF0IGRvIG5vdCBzdXBwb3J0IHJlZmVyZW5jZXMgdmlhIHRoZSBsYWJlbCBmb3IgYXR0cmlidXRlLFxuICAgICAgLy8gd2UgdXNlIGFyaWEtbGFiZWxsZWRieSBvbiB0aGUgaW5wdXQgZWxlbWVudCB0byByZWZlcmVuY2UgdGhlIGxhYmVsIGVsZW1lbnQgdmlhIGlkLlxuICAgICAgLy8gVE9ETzogTWlncmF0ZSB0byBhcmlhTGFiZWxsZWRCeUVsZW1lbnRzIHdoZW4gYXZhaWxhYmxlOlxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvYXJpYUxhYmVsbGVkQnlFbGVtZW50c1xuICAgICAgdGhpcy5fbGFiZWwuaWQgfHw9IGBzYmItZm9ybS1maWVsZC1sYWJlbC0ke25leHRJZCsrfWA7XG4gICAgICBjb25zdCBsYWJlbGxlZGJ5ID1cbiAgICAgICAgdGhpcy5faW5wdXRcbiAgICAgICAgICAuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknKVxuICAgICAgICAgID8uc3BsaXQoJyAnKVxuICAgICAgICAgIC5maWx0ZXIoKGwpID0+ICEhbCAmJiBsICE9PSB0aGlzLl9sYWJlbCEuaWQpID8/IFtdO1xuICAgICAgdGhpcy5faW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknLCBbLi4ubGFiZWxsZWRieSwgdGhpcy5fbGFiZWwuaWRdLmpvaW4oJyAnKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNJbnB1dEVsZW1lbnQoaW5wdXQ6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgbmF0aXZlSW5wdXRFbGVtZW50cy5pbmNsdWRlcyhpbnB1dC5sb2NhbE5hbWUpIHx8XG4gICAgICAhIShjdXN0b21FbGVtZW50cy5nZXQoaW5wdXQubG9jYWxOYW1lKSBhcyB7IGZvcm1Bc3NvY2lhdGVkOiBib29sZWFuIH0gfCB1bmRlZmluZWQpXG4gICAgICAgID8uZm9ybUFzc29jaWF0ZWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVhZElucHV0U3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVTdGF0ZSgncmVhZG9ubHknLCB0aGlzLl9jb250cm9sPy5yZWFkT25seSA/PyB0aGlzLl9pbnB1dCEuaGFzQXR0cmlidXRlKCdyZWFkb25seScpKTtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCdkaXNhYmxlZCcsIHRoaXMuX2NvbnRyb2w/LmRpc2FibGVkID8/IHRoaXMuX2lucHV0IS5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpO1xuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ2hhcy1wb3B1cC1vcGVuJywgdGhpcy5faW5wdXQhLmhhc0F0dHJpYnV0ZSgnZGF0YS1leHBhbmRlZCcpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVySW5wdXRGb3JtTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgdGhpcy5faW5wdXRGb3JtQWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgY29uc3QgeyBzaWduYWwgfSA9ICh0aGlzLl9pbnB1dEZvcm1BYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCkpO1xuXG4gICAgY29uc3QgZm9ybSA9XG4gICAgICAodGhpcy5faW5wdXQgYXMgSFRNTElucHV0RWxlbWVudCB8IEhUTUxTZWxlY3RFbGVtZW50IHwgdW5kZWZpbmVkKT8uZm9ybSA/P1xuICAgICAgdGhpcy5faW5wdXQ/LmNsb3Nlc3QoJ2Zvcm0nKTtcbiAgICAvLyBUaW1lb3V0IG5lZWRlZCB0byBoYXZlIHZhbHVlIHVwZGF0ZWRcbiAgICBjb25zdCByZXNldEhhbmRsZXIgPSAoKTogdW5rbm93biA9PiBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzZXQoKSk7XG4gICAgZm9ybT8uYWRkRXZlbnRMaXN0ZW5lcigncmVzZXQnLCByZXNldEhhbmRsZXIsIHsgc2lnbmFsIH0pO1xuICB9XG5cbiAgLy8gV2UgbmVlZCB0byBwYXRjaCB0aGUgdmFsdWUgcHJvcGVydHkgb2YgdGhlIEhUTUxJbnB1dEVsZW1lbnQgaW4gb3JkZXJcbiAgLy8gdG8gYmUgYWJsZSB0byByZXNldCB0aGUgZmxvYXRpbmcgbGFiZWwgaW4gdGhlIGVtcHR5IHN0YXRlLlxuICBwcml2YXRlIF9wYXRjaElucHV0VmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy5faW5wdXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoIWlucHV0RWxlbWVudCB8fCBwYXRjaGVkSW5wdXRzLmhhcyhpbnB1dEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnB1dEVsZW1lbnQpLFxuICAgICAgJ3ZhbHVlJyxcbiAgICApO1xuXG4gICAgaWYgKCFvcmlnaW5hbERlc2NyaXB0b3IgfHwgIW9yaWdpbmFsRGVzY3JpcHRvci5zZXQgfHwgIW9yaWdpbmFsRGVzY3JpcHRvci5nZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwYXRjaGVkSW5wdXRzLnNldChpbnB1dEVsZW1lbnQsIG9yaWdpbmFsRGVzY3JpcHRvcik7XG5cbiAgICBjb25zdCB7IGdldDogZ2V0dGVyLCBzZXQ6IHNldHRlciB9ID0gb3JpZ2luYWxEZXNjcmlwdG9yO1xuICAgIGNvbnN0IGNoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSA9ICgpOiB2b2lkID0+IHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGlucHV0RWxlbWVudCwgJ3ZhbHVlJywge1xuICAgICAgLi4ub3JpZ2luYWxEZXNjcmlwdG9yLFxuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZ2V0dGVyLmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgICAgc2V0KG5ld1ZhbHVlKSB7XG4gICAgICAgIHNldHRlci5jYWxsKHRoaXMsIG5ld1ZhbHVlKTtcbiAgICAgICAgY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdW5wYXRjaElucHV0VmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy5faW5wdXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBvcmlnaW5hbERlc2NyaXB0b3IgPSBwYXRjaGVkSW5wdXRzLmdldChpbnB1dEVsZW1lbnQpO1xuICAgIGlmIChvcmlnaW5hbERlc2NyaXB0b3IpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnB1dEVsZW1lbnQsICd2YWx1ZScsIG9yaWdpbmFsRGVzY3JpcHRvcik7XG4gICAgICBwYXRjaGVkSW5wdXRzLmRlbGV0ZShpbnB1dEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKFxuICAgICAgJ2VtcHR5JyxcbiAgICAgIHRoaXMuX2NvbnRyb2w/LmVtcHR5ID8/XG4gICAgICAgICh0aGlzLl9mbG9hdGluZ0xhYmVsU3VwcG9ydGVkSW5wdXRFbGVtZW50cy5pbmNsdWRlcyh0aGlzLl9pbnB1dD8ubG9jYWxOYW1lIGFzIHN0cmluZykgJiZcbiAgICAgICAgICB0aGlzLl9pc0lucHV0RW1wdHkoKSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzSW5wdXRFbXB0eSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjaGlwR3JvdXBFbGVtID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdzYmItY2hpcC1ncm91cCcpO1xuICAgIGlmIChjaGlwR3JvdXBFbGVtKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLl9pc0lucHV0VmFsdWVFbXB0eSgpICYmXG4gICAgICAgIChBcnJheS5pc0FycmF5KGNoaXBHcm91cEVsZW0udmFsdWUpXG4gICAgICAgICAgPyBjaGlwR3JvdXBFbGVtLnZhbHVlLmxlbmd0aCA9PT0gMFxuICAgICAgICAgIDogIWNoaXBHcm91cEVsZW0ucXVlcnlTZWxlY3Rvcignc2JiLWNoaXAnKSlcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuX2Zsb2F0aW5nTGFiZWxTdXBwb3J0ZWRJbnB1dFR5cGVzLmluY2x1ZGVzKHRoaXMuX2lucHV0LnR5cGUpICYmXG4gICAgICAgIHRoaXMuX2lzSW5wdXRWYWx1ZUVtcHR5KClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5wdXQuc2VsZWN0ZWRPcHRpb25zPy5pdGVtKDApPy5sYWJlbD8udHJpbSgpID09PSAnJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lucHV0Py5sb2NhbE5hbWUgPT09ICdzYmItc2VsZWN0Jykge1xuICAgICAgcmV0dXJuICh0aGlzLl9pbnB1dCBhcyBTYmJTZWxlY3RFbGVtZW50KS5nZXREaXNwbGF5VmFsdWU/LigpPy50cmltKCkgPT09ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5faXNJbnB1dFZhbHVlRW1wdHkoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc0lucHV0VmFsdWVFbXB0eSgpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9ICh0aGlzLl9pbnB1dCBhcyB7IHZhbHVlOiBzdHJpbmcgfSkudmFsdWU7XG4gICAgcmV0dXJuIFsnJywgdW5kZWZpbmVkLCBudWxsXS5pbmNsdWRlcyh2YWx1ZSkgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCk7XG4gIH1cblxuICAvKipcbiAgICogSXQgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIHNldCB0aGUgYXJpYS1kZXNjcmliZWRieSBhdHRyaWJ1dGUgZm9yIHRoZSBzbG90dGVkIGlucHV0IHJlZmVyZW5jaW5nIGF2YWlsYWJsZSA8c2JiLWZvcm0tZXJyb3I+IGluc3RhbmNlcy5cbiAgICovXG4gIHByaXZhdGUgX29uU2xvdEVycm9yQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9yRWxlbWVudHMgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxTbG90RWxlbWVudCkuYXNzaWduZWRFbGVtZW50cygpO1xuICAgIGlmICh0aGlzLl9pbnB1dCAmJiB0aGlzLl9pbnB1dC5hcmlhRGVzY3JpYmVkQnlFbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9pbnB1dC5hcmlhRGVzY3JpYmVkQnlFbGVtZW50cyA9IHJlbW92ZUFyaWFFbGVtZW50cyhcbiAgICAgICAgdGhpcy5faW5wdXQuYXJpYURlc2NyaWJlZEJ5RWxlbWVudHMsXG4gICAgICAgIC4uLih0aGlzLl9lcnJvckVsZW1lbnRzID8/IFtdKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fZXJyb3JFbGVtZW50cyA9IGVycm9yRWxlbWVudHM7XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLl9lcnJvckVsZW1lbnRzKSB7XG4gICAgICAvLyBJbnN0ZWFkIG9mIGRlZmluaW5nIGEgY29udGFpbmVyIHdpdGggYW4gYXJpYS1saXZlIHJlZ2lvbiBhcyBleHBlY3RlZCwgd2UgaGFkIHRvIGNoYW5nZVxuICAgICAgLy8gc2V0dGluZyBpdCBmb3IgZXZlcnkgc2xvdHRlZCBlbGVtZW50IHRvIHByb3Blcmx5IHdvcmsgaW4gYWxsIGJyb3dzZXJzIGFuZCBzY3JlZW4gcmVhZGVyIGNvbWJpbmF0aW9ucy5cbiAgICAgIGVsLnJvbGUgfHw9ICdzdGF0dXMnO1xuICAgIH1cblxuICAgIHRoaXMuX2Fzc2lnbkVycm9yTWVzc2FnZUVsZW1lbnRzKCk7XG4gICAgdGhpcy50b2dnbGVTdGF0ZSgnaGFzLWVycm9yJywgISF0aGlzLl9lcnJvckVsZW1lbnRzLmxlbmd0aCk7XG4gICAgdGhpcy5fc3luY05lZ2F0aXZlKCk7XG4gIH1cblxuICBwcml2YXRlIF9hc3NpZ25FcnJvck1lc3NhZ2VFbGVtZW50cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faW5wdXQpIHtcbiAgICAgIHRoaXMuX2lucHV0LmFyaWFEZXNjcmliZWRCeUVsZW1lbnRzID0gYXBwZW5kQXJpYUVsZW1lbnRzKFxuICAgICAgICB0aGlzLl9pbnB1dC5hcmlhRGVzY3JpYmVkQnlFbGVtZW50cyxcbiAgICAgICAgLi4udGhpcy5fZXJyb3JFbGVtZW50cyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIE1hbnVhbGx5IHJlc2V0IHRoZSBmb3JtIGZpZWxkLiBDdXJyZW50bHksIHRoaXMgb25seSByZXNldHMgdGhlIGZsb2F0aW5nIGxhYmVsLiAqL1xuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gIH1cblxuICAvKiogTWFudWFsbHkgY2xlYXJzIHRoZSBpbnB1dCB2YWx1ZS4gSXQgb25seSB3b3JrcyBmb3IgaW5wdXRzLCBzZWxlY3RzIGFyZSBub3Qgc3VwcG9ydGVkLiAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgaWYgKCh0aGlzLl9pbnB1dD8ubG9jYWxOYW1lIGFzIHN0cmluZykgIT09ICdpbnB1dCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKHRoaXMuX2lucHV0IGFzIHsgdmFsdWU6IHN0cmluZyB9KS52YWx1ZSA9ICcnO1xuICAgIHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3luY05lZ2F0aXZlKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKFxuICAgICAgJ3NiYi1mb3JtLWVycm9yLHNiYi1taW5pLWJ1dHRvbixzYmItcG9wb3Zlci10cmlnZ2VyLHNiYi1mb3JtLWZpZWxkLWNsZWFyLHNiYi1kYXRlcGlja2VyLW5leHQtZGF5LHNiYi1kYXRlcGlja2VyLXByZXZpb3VzLWRheSxzYmItZGF0ZXBpY2tlci10b2dnbGUsc2JiLXNlbGVjdCxzYmItYXV0b2NvbXBsZXRlLHNiYi1hdXRvY29tcGxldGUtZ3JpZCxzYmItY2hpcC1ncm91cCcsXG4gICAgKS5mb3JFYWNoKChlbGVtZW50KSA9PiBlbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnbmVnYXRpdmUnLCB0aGlzLm5lZ2F0aXZlKSk7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jU2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJBdXRvY29tcGxldGVCYXNlRWxlbWVudCB8IFNiYlNlbGVjdEVsZW1lbnQ+KFxuICAgICAgJ3NiYi1hdXRvY29tcGxldGUsc2JiLWF1dG9jb21wbGV0ZS1ncmlkLHNiYi1zZWxlY3QnLFxuICAgICkuZm9yRWFjaCgoZWxlbWVudCkgPT4gKGVsZW1lbnQuc2l6ZSA9IHRoaXMuc2l6ZSA9PT0gJ3MnID8gJ3MnIDogJ20nKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fc3BhY2Utd3JhcHBlclwiPlxuICAgICAgICAkey8qIFF1ZXJpZWQgYnkgaWQgZnJvbSB0aGUgYXV0b2NvbXBsZXRlL3NlbGVjdCB0byBiZSB1c2VkIGFzIHRoZSBhbmNob3IgZWxlbWVudCAqLyAnJ31cbiAgICAgICAgPGRpdiBAY2xpY2s9JHt0aGlzLl9oYW5kbGVXcmFwcGVyQ2xpY2t9IGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX3dyYXBwZXJcIiBpZD1cIm92ZXJsYXktYW5jaG9yXCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT1cInByZWZpeFwiIEBzbG90Y2hhbmdlPSR7dGhpcy5fc3luY05lZ2F0aXZlfT48L3Nsb3Q+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1mb3JtLWZpZWxkX19pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2xhYmVsLXNwYWNlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2xhYmVsXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2xhYmVsLWVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImxhYmVsXCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9vblNsb3RMYWJlbENoYW5nZX0+PC9zbG90PlxuICAgICAgICAgICAgICAgICR7dGhpcy5vcHRpb25hbFxuICAgICAgICAgICAgICAgICAgPyBodG1sYCA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4gJHtpMThuT3B0aW9uYWxbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19IDwvc3Bhbj5gXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItZm9ybS1maWVsZF9faW5wdXRcIj5cbiAgICAgICAgICAgICAgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl9vblNsb3RJbnB1dENoYW5nZX0+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAke3RoaXMuaGFzVXBkYXRlZCAmJiBbJ3NlbGVjdCcsICdzYmItc2VsZWN0J10uaW5jbHVkZXModGhpcy5faW5wdXQ/LmxvY2FsTmFtZSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgID8gaHRtbGA8c2JiLWljb25cbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJjaGV2cm9uLXNtYWxsLWRvd24tc21hbGxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fc2VsZWN0LWlucHV0LWljb25cIlxuICAgICAgICAgICAgICAgID48L3NiYi1pY29uPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzbG90IG5hbWU9XCJzdWZmaXhcIiBAc2xvdGNoYW5nZT0ke3RoaXMuX3N5bmNOZWdhdGl2ZX0+PC9zbG90PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2Vycm9yXCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT1cImVycm9yXCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9vblNsb3RFcnJvckNoYW5nZX0+PC9zbG90PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1mb3JtLWZpZWxkJzogU2JiRm9ybUZpZWxkRWxlbWVudDtcbiAgfVxuXG4gIGludGVyZmFjZSBIVE1MRWxlbWVudEV2ZW50TWFwIHtcbiAgICBmb3JtZmllbGRjb250cm9sOiBTYmJGb3JtRmllbGRDb250cm9sRXZlbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJzdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QkEsSUFBSSxTQUFTO0FBRWIsTUFBTSxvQ0FBb0IsUUFBQTtBQUMxQixNQUFNLHNCQUFzQixDQUFDLFNBQVMsWUFBWSxRQUFRO0FBaUJwRCxNQUFPLGlDQUFpQyxNQUFLO0FBQUEsRUFHakQsSUFBVyxVQUFP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