@sbb-esta/lyne-elements 2.0.1 → 2.0.3

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 (296) hide show
  1. package/accordion/accordion.d.ts +1 -2
  2. package/accordion/accordion.d.ts.map +1 -1
  3. package/accordion.js +39 -44
  4. package/alert/alert-group/alert-group.d.ts +1 -2
  5. package/alert/alert-group/alert-group.d.ts.map +1 -1
  6. package/alert/alert-group.js +29 -34
  7. package/autocomplete/autocomplete-base-element.d.ts +1 -0
  8. package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  9. package/autocomplete/autocomplete.d.ts +1 -1
  10. package/autocomplete/autocomplete.d.ts.map +1 -1
  11. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts +1 -1
  12. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts.map +1 -1
  13. package/autocomplete-grid/autocomplete-grid.js +18 -22
  14. package/autocomplete.js +17 -18
  15. package/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts +1 -2
  16. package/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts.map +1 -1
  17. package/breadcrumb/breadcrumb-group.js +26 -30
  18. package/button/common.js +4 -4
  19. package/calendar/calendar.d.ts +3 -3
  20. package/calendar/calendar.d.ts.map +1 -1
  21. package/checkbox/checkbox-group/checkbox-group.d.ts +1 -1
  22. package/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -1
  23. package/checkbox/checkbox-group.js +34 -36
  24. package/core/base-elements/button-base-element.d.ts +1 -1
  25. package/core/base-elements/button-base-element.d.ts.map +1 -1
  26. package/core/base-elements.js +1 -1
  27. package/core/controllers/connected-abort-controller.d.ts +4 -0
  28. package/core/controllers/connected-abort-controller.d.ts.map +1 -1
  29. package/core/eventing/forward-event.d.ts +7 -1
  30. package/core/eventing/forward-event.d.ts.map +1 -1
  31. package/core/eventing.js +14 -12
  32. package/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
  33. package/core/mixins/form-associated-mixin.d.ts +2 -4
  34. package/core/mixins/form-associated-mixin.d.ts.map +1 -1
  35. package/core/mixins/form-associated-radio-button-mixin.d.ts +4 -3
  36. package/core/mixins/form-associated-radio-button-mixin.d.ts.map +1 -1
  37. package/core/mixins.js +278 -284
  38. package/core/styles/core.scss +13 -12
  39. package/core/styles/mixins/buttons.scss +1 -1
  40. package/core/styles/mixins/lists.scss +100 -35
  41. package/core.css +2 -1
  42. package/custom-elements.json +390 -492
  43. package/datepicker/common/datepicker-button.d.ts +1 -1
  44. package/datepicker/common/datepicker-button.d.ts.map +1 -1
  45. package/datepicker/common.js +24 -24
  46. package/datepicker/datepicker/datepicker.d.ts +1 -1
  47. package/datepicker/datepicker/datepicker.d.ts.map +1 -1
  48. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +1 -2
  49. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  50. package/datepicker/datepicker-toggle.js +76 -75
  51. package/datepicker/datepicker.js +58 -60
  52. package/development/accordion/accordion.d.ts +1 -2
  53. package/development/accordion/accordion.d.ts.map +1 -1
  54. package/development/accordion.js +16 -23
  55. package/development/alert/alert-group/alert-group.d.ts +1 -2
  56. package/development/alert/alert-group/alert-group.d.ts.map +1 -1
  57. package/development/alert/alert-group.js +12 -17
  58. package/development/autocomplete/autocomplete-base-element.d.ts +1 -0
  59. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  60. package/development/autocomplete/autocomplete.d.ts +1 -1
  61. package/development/autocomplete/autocomplete.d.ts.map +1 -1
  62. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts +1 -1
  63. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts.map +1 -1
  64. package/development/autocomplete-grid/autocomplete-grid.js +9 -12
  65. package/development/autocomplete.js +12 -12
  66. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts +1 -2
  67. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts.map +1 -1
  68. package/development/breadcrumb/breadcrumb-group.js +13 -17
  69. package/development/button/common.js +20 -6
  70. package/development/calendar/calendar.d.ts +3 -3
  71. package/development/calendar/calendar.d.ts.map +1 -1
  72. package/development/calendar.js +1 -1
  73. package/development/checkbox/checkbox-group/checkbox-group.d.ts +1 -1
  74. package/development/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -1
  75. package/development/checkbox/checkbox-group.js +10 -15
  76. package/development/core/base-elements/button-base-element.d.ts +1 -1
  77. package/development/core/base-elements/button-base-element.d.ts.map +1 -1
  78. package/development/core/base-elements.js +2 -2
  79. package/development/core/controllers/connected-abort-controller.d.ts +4 -0
  80. package/development/core/controllers/connected-abort-controller.d.ts.map +1 -1
  81. package/development/core/controllers.js +1 -1
  82. package/development/core/eventing/forward-event.d.ts +7 -1
  83. package/development/core/eventing/forward-event.d.ts.map +1 -1
  84. package/development/core/eventing.js +5 -3
  85. package/development/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
  86. package/development/core/mixins/form-associated-mixin.d.ts +2 -4
  87. package/development/core/mixins/form-associated-mixin.d.ts.map +1 -1
  88. package/development/core/mixins/form-associated-radio-button-mixin.d.ts +4 -3
  89. package/development/core/mixins/form-associated-radio-button-mixin.d.ts.map +1 -1
  90. package/development/core/mixins.js +51 -64
  91. package/development/datepicker/common/datepicker-button.d.ts +1 -1
  92. package/development/datepicker/common/datepicker-button.d.ts.map +1 -1
  93. package/development/datepicker/common.js +6 -7
  94. package/development/datepicker/datepicker/datepicker.d.ts +1 -1
  95. package/development/datepicker/datepicker/datepicker.d.ts.map +1 -1
  96. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +1 -2
  97. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  98. package/development/datepicker/datepicker-toggle.js +14 -14
  99. package/development/datepicker/datepicker.js +8 -11
  100. package/development/dialog/dialog/dialog.d.ts +1 -1
  101. package/development/dialog/dialog/dialog.d.ts.map +1 -1
  102. package/development/dialog/dialog-content/dialog-content.d.ts.map +1 -1
  103. package/development/dialog/dialog-content.js +3 -2
  104. package/development/dialog/dialog.js +7 -13
  105. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts +1 -1
  106. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
  107. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts +1 -2
  108. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts.map +1 -1
  109. package/development/expansion-panel/expansion-panel-header.js +7 -11
  110. package/development/expansion-panel/expansion-panel.js +5 -7
  111. package/development/file-selector/common.js +3 -3
  112. package/development/flip-card/flip-card/flip-card.d.ts +1 -2
  113. package/development/flip-card/flip-card/flip-card.d.ts.map +1 -1
  114. package/development/flip-card/flip-card.js +12 -15
  115. package/development/footer/footer.d.ts +1 -1
  116. package/development/footer.js +2 -2
  117. package/development/form-field/form-field-clear/form-field-clear.d.ts +1 -1
  118. package/development/form-field/form-field-clear/form-field-clear.d.ts.map +1 -1
  119. package/development/form-field/form-field-clear.js +5 -6
  120. package/development/image/image.d.ts +2 -2
  121. package/development/image.js +1 -1
  122. package/development/map-container/map-container.d.ts.map +1 -1
  123. package/development/map-container.js +3 -2
  124. package/development/menu/menu/menu.d.ts +2 -1
  125. package/development/menu/menu/menu.d.ts.map +1 -1
  126. package/development/menu/menu.js +20 -13
  127. package/development/message.js +2 -1
  128. package/development/navigation/common/navigation-action-common.d.ts +1 -1
  129. package/development/navigation/common/navigation-action-common.d.ts.map +1 -1
  130. package/development/navigation/common.js +11 -13
  131. package/development/navigation/navigation/navigation.d.ts +0 -1
  132. package/development/navigation/navigation/navigation.d.ts.map +1 -1
  133. package/development/navigation/navigation-section/navigation-section.d.ts +1 -0
  134. package/development/navigation/navigation-section/navigation-section.d.ts.map +1 -1
  135. package/development/navigation/navigation-section.js +5 -6
  136. package/development/navigation/navigation.js +9 -10
  137. package/development/notification.js +2 -2
  138. package/development/option/option/option-base-element.d.ts +1 -1
  139. package/development/option/option/option-base-element.d.ts.map +1 -1
  140. package/development/option/option.js +17 -21
  141. package/development/overlay/overlay-base-element.d.ts +1 -0
  142. package/development/overlay/overlay-base-element.d.ts.map +1 -1
  143. package/development/overlay.js +4 -4
  144. package/development/popover/popover/popover.d.ts.map +1 -1
  145. package/development/popover/popover.js +6 -3
  146. package/development/radio-button/common/radio-button-common.d.ts +0 -2
  147. package/development/radio-button/common/radio-button-common.d.ts.map +1 -1
  148. package/development/radio-button/common.js +11 -27
  149. package/development/radio-button/radio-button-group/radio-button-group.d.ts +3 -3
  150. package/development/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  151. package/development/radio-button/radio-button-group.js +6 -10
  152. package/development/radio-button/radio-button-panel/radio-button-panel.d.ts +9 -1
  153. package/development/radio-button/radio-button-panel/radio-button-panel.d.ts.map +1 -1
  154. package/development/radio-button/radio-button-panel.js +17 -7
  155. package/development/select/select.d.ts +5 -2
  156. package/development/select/select.d.ts.map +1 -1
  157. package/development/select.js +59 -34
  158. package/development/selection-expansion-panel/selection-expansion-panel.d.ts +1 -1
  159. package/development/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  160. package/development/selection-expansion-panel.js +6 -8
  161. package/development/slider/slider.d.ts +1 -2
  162. package/development/slider/slider.d.ts.map +1 -1
  163. package/development/slider.js +6 -8
  164. package/development/stepper/step/step.d.ts +5 -5
  165. package/development/stepper/step/step.d.ts.map +1 -1
  166. package/development/stepper/step-label/step-label.d.ts +1 -1
  167. package/development/stepper/step-label/step-label.d.ts.map +1 -1
  168. package/development/stepper/step-label.js +12 -14
  169. package/development/stepper/step.js +8 -10
  170. package/development/stepper/stepper/stepper.d.ts +9 -8
  171. package/development/stepper/stepper/stepper.d.ts.map +1 -1
  172. package/development/stepper/stepper.js +28 -27
  173. package/development/tabs/tab-group/tab-group.d.ts +1 -2
  174. package/development/tabs/tab-group/tab-group.d.ts.map +1 -1
  175. package/development/tabs/tab-group.js +9 -14
  176. package/development/tag/tag/tag.d.ts +1 -1
  177. package/development/tag/tag/tag.d.ts.map +1 -1
  178. package/development/tag/tag-group/tag-group.d.ts +1 -1
  179. package/development/tag/tag-group/tag-group.d.ts.map +1 -1
  180. package/development/tag/tag-group.js +1 -1
  181. package/development/tag/tag.js +5 -6
  182. package/development/teaser-hero.js +6 -2
  183. package/development/time-input/time-input.d.ts +1 -1
  184. package/development/time-input/time-input.d.ts.map +1 -1
  185. package/development/time-input.js +6 -4
  186. package/development/toast/toast.d.ts +1 -1
  187. package/development/toast/toast.d.ts.map +1 -1
  188. package/development/toast.js +6 -7
  189. package/development/toggle/toggle/toggle.d.ts +1 -1
  190. package/development/toggle/toggle/toggle.d.ts.map +1 -1
  191. package/development/toggle/toggle-option/toggle-option.d.ts +1 -1
  192. package/development/toggle/toggle-option/toggle-option.d.ts.map +1 -1
  193. package/development/toggle/toggle-option.js +9 -13
  194. package/development/toggle/toggle.js +6 -8
  195. package/development/train/train-formation/train-formation.d.ts +1 -2
  196. package/development/train/train-formation/train-formation.d.ts.map +1 -1
  197. package/development/train/train-formation.js +8 -12
  198. package/dialog/dialog/dialog.d.ts +1 -1
  199. package/dialog/dialog/dialog.d.ts.map +1 -1
  200. package/dialog/dialog-content/dialog-content.d.ts.map +1 -1
  201. package/dialog/dialog-content.js +8 -7
  202. package/dialog/dialog.js +36 -42
  203. package/expansion-panel/expansion-panel/expansion-panel.d.ts +1 -1
  204. package/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
  205. package/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts +1 -2
  206. package/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts.map +1 -1
  207. package/expansion-panel/expansion-panel-header.js +29 -33
  208. package/expansion-panel/expansion-panel.js +58 -60
  209. package/file-selector/common.js +5 -5
  210. package/flip-card/flip-card/flip-card.d.ts +1 -2
  211. package/flip-card/flip-card/flip-card.d.ts.map +1 -1
  212. package/flip-card/flip-card.js +34 -36
  213. package/footer/footer.d.ts +1 -1
  214. package/footer.js +1 -1
  215. package/form-field/form-field-clear/form-field-clear.d.ts +1 -1
  216. package/form-field/form-field-clear/form-field-clear.d.ts.map +1 -1
  217. package/form-field/form-field-clear.js +10 -11
  218. package/image/image.d.ts +2 -2
  219. package/lists.css +46 -62
  220. package/map-container/map-container.d.ts.map +1 -1
  221. package/map-container.js +22 -21
  222. package/menu/menu/menu.d.ts +2 -1
  223. package/menu/menu/menu.d.ts.map +1 -1
  224. package/menu/menu.js +84 -77
  225. package/message.js +12 -12
  226. package/navigation/common/navigation-action-common.d.ts +1 -1
  227. package/navigation/common/navigation-action-common.d.ts.map +1 -1
  228. package/navigation/common.js +24 -26
  229. package/navigation/navigation/navigation.d.ts +0 -1
  230. package/navigation/navigation/navigation.d.ts.map +1 -1
  231. package/navigation/navigation-section/navigation-section.d.ts +1 -0
  232. package/navigation/navigation-section/navigation-section.d.ts.map +1 -1
  233. package/navigation/navigation-section.js +35 -36
  234. package/navigation/navigation.js +64 -65
  235. package/notification.js +1 -1
  236. package/option/option/option-base-element.d.ts +1 -1
  237. package/option/option/option-base-element.d.ts.map +1 -1
  238. package/option/option.js +125 -125
  239. package/overlay/overlay-base-element.d.ts +1 -0
  240. package/overlay/overlay-base-element.d.ts.map +1 -1
  241. package/overlay.js +35 -35
  242. package/package.json +1 -1
  243. package/popover/popover/popover.d.ts.map +1 -1
  244. package/popover/popover.js +6 -3
  245. package/radio-button/common/radio-button-common.d.ts +0 -2
  246. package/radio-button/common/radio-button-common.d.ts.map +1 -1
  247. package/radio-button/common.js +17 -23
  248. package/radio-button/radio-button-group/radio-button-group.d.ts +3 -3
  249. package/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  250. package/radio-button/radio-button-group.js +21 -25
  251. package/radio-button/radio-button-panel/radio-button-panel.d.ts +9 -1
  252. package/radio-button/radio-button-panel/radio-button-panel.d.ts.map +1 -1
  253. package/radio-button/radio-button-panel.js +40 -38
  254. package/select/select.d.ts +5 -2
  255. package/select/select.d.ts.map +1 -1
  256. package/select.js +96 -84
  257. package/selection-expansion-panel/selection-expansion-panel.d.ts +1 -1
  258. package/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  259. package/selection-expansion-panel.js +17 -18
  260. package/slider/slider.d.ts +1 -2
  261. package/slider/slider.d.ts.map +1 -1
  262. package/slider.js +23 -25
  263. package/standard-theme.css +48 -63
  264. package/stepper/step/step.d.ts +5 -5
  265. package/stepper/step/step.d.ts.map +1 -1
  266. package/stepper/step-label/step-label.d.ts +1 -1
  267. package/stepper/step-label/step-label.d.ts.map +1 -1
  268. package/stepper/step-label.js +16 -18
  269. package/stepper/step.js +22 -24
  270. package/stepper/stepper/stepper.d.ts +9 -8
  271. package/stepper/stepper/stepper.d.ts.map +1 -1
  272. package/stepper/stepper.js +57 -58
  273. package/tabs/tab-group/tab-group.d.ts +1 -2
  274. package/tabs/tab-group/tab-group.d.ts.map +1 -1
  275. package/tabs/tab-group.js +83 -88
  276. package/tag/tag/tag.d.ts +1 -1
  277. package/tag/tag/tag.d.ts.map +1 -1
  278. package/tag/tag-group/tag-group.d.ts +1 -1
  279. package/tag/tag-group/tag-group.d.ts.map +1 -1
  280. package/tag/tag.js +30 -30
  281. package/teaser-hero.js +19 -19
  282. package/time-input/time-input.d.ts +1 -1
  283. package/time-input/time-input.d.ts.map +1 -1
  284. package/time-input.js +7 -5
  285. package/toast/toast.d.ts +1 -1
  286. package/toast/toast.d.ts.map +1 -1
  287. package/toast.js +32 -33
  288. package/toggle/toggle/toggle.d.ts +1 -1
  289. package/toggle/toggle/toggle.d.ts.map +1 -1
  290. package/toggle/toggle-option/toggle-option.d.ts +1 -1
  291. package/toggle/toggle-option/toggle-option.d.ts.map +1 -1
  292. package/toggle/toggle-option.js +31 -35
  293. package/toggle/toggle.js +31 -33
  294. package/train/train-formation/train-formation.d.ts +1 -2
  295. package/train/train-formation/train-formation.d.ts.map +1 -1
  296. package/train/train-formation.js +35 -39
@@ -13,7 +13,7 @@ import { ref } from "lit/directives/ref.js";
13
13
  import { until } from "lit/directives/until.js";
14
14
  import { getNextElementIndex } from "./core/a11y.js";
15
15
  import { SbbOpenCloseBaseElement } from "./core/base-elements.js";
16
- import { SbbConnectedAbortController, SbbLanguageController } from "./core/controllers.js";
16
+ import { SbbLanguageController } from "./core/controllers.js";
17
17
  import { hostAttributes, forceType } from "./core/decorators.js";
18
18
  import { setOrRemoveAttribute, isZeroAnimationDuration, isNextjs, isSafari } from "./core/dom.js";
19
19
  import { EventEmitter } from "./core/eventing.js";
@@ -326,6 +326,7 @@ let SbbSelectElement = (() => {
326
326
  let __displayValue_extraInitializers = [];
327
327
  var SbbSelectElement2 = (_a = class extends _classSuper {
328
328
  constructor() {
329
+ var _a2, _b, _c;
329
330
  super();
330
331
  __privateAdd(this, _placeholder_accessor_storage);
331
332
  __privateAdd(this, _multiple_accessor_storage);
@@ -345,7 +346,6 @@ let SbbSelectElement = (() => {
345
346
  this._searchString = "";
346
347
  this._didLoad = false;
347
348
  this._isPointerDownEventOnMenu = false;
348
- this._abort = new SbbConnectedAbortController(this);
349
349
  this._pointerDownListener = (event) => {
350
350
  this._isPointerDownEventOnMenu = isEventOnElement(this._overlay, event);
351
351
  };
@@ -354,6 +354,19 @@ let SbbSelectElement = (() => {
354
354
  this.close();
355
355
  }
356
356
  };
357
+ (_a2 = this.addEventListener) == null ? void 0 : _a2.call(this, "optionSelectionChange", (e) => this._onOptionChanged(e));
358
+ (_b = this.addEventListener) == null ? void 0 : _b.call(this, "optionLabelChanged", (e) => this._onOptionLabelChanged(e));
359
+ (_c = this.addEventListener) == null ? void 0 : _c.call(this, "click", (e) => {
360
+ const target = e.target;
361
+ if (target.localName === "sbb-option") {
362
+ if (!this.multiple && !target.disabled) {
363
+ this.close();
364
+ this.focus();
365
+ }
366
+ } else {
367
+ this._toggleOpening();
368
+ }
369
+ });
357
370
  new MutationController(this, {
358
371
  config: { attributeFilter: ["aria-labelledby", "aria-label", "aria-describedby"] },
359
372
  callback: () => this._syncAriaLabels()
@@ -466,21 +479,39 @@ let SbbSelectElement = (() => {
466
479
  this._onOptionDeselected(target);
467
480
  }
468
481
  }
482
+ /** Listens to option changes. */
483
+ _onOptionLabelChanged(event) {
484
+ const target = event.target;
485
+ const selected = this._getSelected();
486
+ if (!Array.isArray(selected) && target !== selected || Array.isArray(selected) && !selected.includes(target)) {
487
+ return;
488
+ }
489
+ this._updateDisplayValue(selected);
490
+ }
491
+ _updateDisplayValue(selected) {
492
+ if (Array.isArray(selected)) {
493
+ this._displayValue = selected.map((o) => o.textContent).join(", ") || null;
494
+ } else if (selected) {
495
+ this._displayValue = (selected == null ? void 0 : selected.textContent) || null;
496
+ } else {
497
+ this._displayValue = null;
498
+ }
499
+ }
469
500
  /** Sets the _displayValue by checking the internal sbb-options and setting the correct `selected` value on them. */
470
501
  _onValueChanged(newValue) {
471
502
  const options = this._filteredOptions;
472
503
  if (!Array.isArray(newValue)) {
473
- const optionElement = options.find((o) => (o.value ?? o.getAttribute("value")) === newValue);
504
+ const optionElement = options.find((o) => (o.value ?? o.getAttribute("value")) === newValue) ?? null;
474
505
  if (optionElement) {
475
506
  optionElement.selected = true;
476
507
  }
477
508
  options.filter((o) => (o.value ?? o.getAttribute("value")) !== newValue).forEach((o) => o.selected = false);
478
- this._displayValue = (optionElement == null ? void 0 : optionElement.textContent) || null;
509
+ this._updateDisplayValue(optionElement);
479
510
  } else {
480
511
  options.filter((o) => !newValue.includes(o.value ?? o.getAttribute("value"))).forEach((e) => e.selected = false);
481
- const selectedOptionElements = options.filter((o) => newValue.includes(o.value ?? o.getAttribute("value")));
482
- selectedOptionElements.forEach((o) => o.selected = true);
483
- this._displayValue = selectedOptionElements.map((o) => o.textContent).join(", ") || null;
512
+ const selectedElements = options.filter((o) => newValue.includes(o.value ?? o.getAttribute("value")));
513
+ selectedElements.forEach((o) => o.selected = true);
514
+ this._updateDisplayValue(selectedElements);
484
515
  }
485
516
  this._stateChange.emit({ type: "value", value: newValue });
486
517
  }
@@ -511,7 +542,6 @@ let SbbSelectElement = (() => {
511
542
  if (ariaRoleOnHost) {
512
543
  this.id || (this.id = this._overlayId);
513
544
  }
514
- const signal = this._abort.signal;
515
545
  const formField = ((_a2 = this.closest) == null ? void 0 : _a2.call(this, "sbb-form-field")) ?? ((_b = this.closest) == null ? void 0 : _b.call(this, "[data-form-field]"));
516
546
  if (formField) {
517
547
  this.negative = formField.hasAttribute("negative");
@@ -525,18 +555,6 @@ let SbbSelectElement = (() => {
525
555
  if (this.value) {
526
556
  this._onValueChanged(this.value);
527
557
  }
528
- this.addEventListener("optionSelectionChange", (e) => this._onOptionChanged(e), { signal });
529
- this.addEventListener("click", (e) => {
530
- const target = e.target;
531
- if (target.localName === "sbb-option") {
532
- if (!this.multiple && !target.disabled) {
533
- this.close();
534
- this.focus();
535
- }
536
- } else {
537
- this._toggleOpening();
538
- }
539
- }, { signal });
540
558
  }
541
559
  willUpdate(changedProperties) {
542
560
  super.willUpdate(changedProperties);
@@ -670,7 +688,10 @@ let SbbSelectElement = (() => {
670
688
  this._openPanelEventsController = new AbortController();
671
689
  document.addEventListener("scroll", () => this._setOverlayPosition(), {
672
690
  passive: true,
673
- signal: this._openPanelEventsController.signal
691
+ signal: this._openPanelEventsController.signal,
692
+ // Without capture, other scroll contexts would not bubble to this event listener.
693
+ // Capture allows us to react to all scroll contexts in this DOM.
694
+ capture: true
674
695
  });
675
696
  window.addEventListener("resize", () => this._setOverlayPosition(), {
676
697
  passive: true,
@@ -818,22 +839,26 @@ let SbbSelectElement = (() => {
818
839
  this._activeItemIndex = -1;
819
840
  this._triggerElement.removeAttribute("aria-activedescendant");
820
841
  }
821
- _setValueFromSelectedOption() {
822
- if (!this.multiple) {
823
- const selectedOption = this._filteredOptions.find((option) => option.selected);
824
- if (selectedOption) {
825
- this._activeItemIndex = this._filteredOptions.findIndex((option) => option === selectedOption);
826
- this.value = selectedOption.value;
827
- }
828
- } else {
829
- const options = this._filteredOptions.filter((option) => option.selected);
830
- if (options && options.length > 0) {
842
+ _setValueFromSelected() {
843
+ const selected = this._getSelected();
844
+ if (Array.isArray(selected)) {
845
+ if (selected && selected.length > 0) {
831
846
  const value = [];
832
- for (const option of options) {
847
+ for (const option of selected) {
833
848
  value.push(option.value);
834
849
  }
835
850
  this.value = value;
836
851
  }
852
+ } else if (selected) {
853
+ this._activeItemIndex = this._filteredOptions.findIndex((option) => option === selected);
854
+ this.value = selected.value;
855
+ }
856
+ }
857
+ _getSelected() {
858
+ if (this.multiple) {
859
+ return this._filteredOptions.filter((option) => option.selected);
860
+ } else {
861
+ return this._filteredOptions.find((option) => option.selected) ?? null;
837
862
  }
838
863
  }
839
864
  _toggleOpening() {
@@ -903,7 +928,7 @@ let SbbSelectElement = (() => {
903
928
  ?aria-multiselectable=${this.multiple}
904
929
  ${ref((containerRef) => this._optionContainer = containerRef)}
905
930
  >
906
- <slot @slotchange=${this._setValueFromSelectedOption}></slot>
931
+ <slot @slotchange=${this._setValueFromSelected}></slot>
907
932
  </div>
908
933
  </div>
909
934
  </div>
@@ -945,4 +970,4 @@ let SbbSelectElement = (() => {
945
970
  export {
946
971
  SbbSelectElement
947
972
  };
948
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2VsZWN0L3NlbGVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNdXRhdGlvbkNvbnRyb2xsZXIgfSBmcm9tICdAbGl0LWxhYnMvb2JzZXJ2ZXJzL211dGF0aW9uLWNvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgUHJvcGVydHlWYWx1ZXMsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGh0bWwsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcbmltcG9ydCB7IHVudGlsIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvdW50aWwuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4IH0gZnJvbSAnLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vY29yZS9iYXNlLWVsZW1lbnRzLmpzJztcbmltcG9ydCB7IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlciwgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUsIGhvc3RBdHRyaWJ1dGVzIH0gZnJvbSAnLi4vY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGlzTmV4dGpzLCBpc1NhZmFyaSwgaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24sIHNldE9yUmVtb3ZlQXR0cmlidXRlIH0gZnJvbSAnLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQge1xuICB0eXBlIEZvcm1SZXN0b3JlUmVhc29uLFxuICB0eXBlIEZvcm1SZXN0b3JlU3RhdGUsXG4gIFNiYkRpc2FibGVkTWl4aW4sXG4gIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4sXG4gIFNiYkh5ZHJhdGlvbk1peGluLFxuICBTYmJOZWdhdGl2ZU1peGluLFxuICBTYmJSZXF1aXJlZE1peGluLFxuICBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpbixcbn0gZnJvbSAnLi4vY29yZS9taXhpbnMuanMnO1xuaW1wb3J0IHsgaXNFdmVudE9uRWxlbWVudCwgb3ZlcmxheUdhcEZpeENvcm5lcnMsIHNldE92ZXJsYXlQb3NpdGlvbiB9IGZyb20gJy4uL2NvcmUvb3ZlcmxheS5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYk9wdEdyb3VwRWxlbWVudCwgU2JiT3B0aW9uRWxlbWVudCB9IGZyb20gJy4uL29wdGlvbi5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3NlbGVjdC5zY3NzP2xpdCZpbmxpbmUnO1xuXG4vKipcbiAqIE9uIFNhZmFyaSwgdGhlIGFyaWEgcm9sZSAnbGlzdGJveCcgbXVzdCBiZSBvbiB0aGUgaG9zdCBlbGVtZW50LCBvciBlbHNlIFZvaWNlT3ZlciB3b24ndCB3b3JrIGF0IGFsbC5cbiAqIE9uIHRoZSBvdGhlciBoYW5kLCBKQVdTIGFuZCBOVkRBIG5lZWQgdGhlIHJvbGUgdG8gYmUgYW4gXCJpbW1lZGlhdGUgcGFyZW50XCIgdG8gdGhlIG9wdGlvbnMsIG9yIGVsc2Ugb3B0Z3JvdXBzIHdvbid0IHdvcmsuXG4gKi9cbmNvbnN0IGFyaWFSb2xlT25Ib3N0ID0gaXNTYWZhcmk7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdENoYW5nZSB7XG4gIHR5cGU6ICd2YWx1ZSc7XG4gIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhIHBhbmVsIHdpdGggc2VsZWN0YWJsZSBvcHRpb25zLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIG9wdGlvbnMuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBjaGFuZ2UgLSBOb3RpZmllcyB0aGF0IHRoZSBjb21wb25lbnQncyB2YWx1ZSBoYXMgY2hhbmdlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGlucHV0IC0gTm90aWZpZXMgdGhhdCBhbiBvcHRpb24gdmFsdWUgaGFzIGJlZW4gc2VsZWN0ZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSB3aWxsT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXNlbGVjdGAgc3RhcnRzIHRoZSBvcGVuaW5nIHRyYW5zaXRpb24uIENhbiBiZSBjYW5jZWxlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGRpZE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1zZWxlY3RgIGlzIG9wZW5lZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IHdpbGxDbG9zZSAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXNlbGVjdGAgYmVnaW5zIHRoZSBjbG9zaW5nIHRyYW5zaXRpb24uIENhbiBiZSBjYW5jZWxlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGRpZENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItc2VsZWN0YCBpcyBjbG9zZWQuXG4gKiBAY3NzcHJvcCBbLS1zYmItc2VsZWN0LXotaW5kZXg9dmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KV0gLSBUbyBzcGVjaWZ5IGEgY3VzdG9tIHN0YWNrIG9yZGVyLFxuICogdGhlIGB6LWluZGV4YCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyB0aGlzIENTUyB2YXJpYWJsZS4gVGhlIGRlZmF1bHQgYHotaW5kZXhgIG9mIHRoZVxuICogY29tcG9uZW50IGlzIHNldCB0byBgdmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KWAgd2l0aCBhIHZhbHVlIG9mIGAxMDAwYC5cbiAqIEBvdmVycmlkZVR5cGUgdmFsdWUgLSBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGxcbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLXNlbGVjdCcpXG5AaG9zdEF0dHJpYnV0ZXMoe1xuICByb2xlOiBhcmlhUm9sZU9uSG9zdCA/ICdsaXN0Ym94JyA6IG51bGwsXG59KVxuY2xhc3MgU2JiU2VsZWN0RWxlbWVudCBleHRlbmRzIFNiYlVwZGF0ZVNjaGVkdWxlck1peGluKFxuICBTYmJEaXNhYmxlZE1peGluKFxuICAgIFNiYk5lZ2F0aXZlTWl4aW4oXG4gICAgICBTYmJIeWRyYXRpb25NaXhpbihcbiAgICAgICAgU2JiUmVxdWlyZWRNaXhpbihcbiAgICAgICAgICBTYmJGb3JtQXNzb2NpYXRlZE1peGluPHR5cGVvZiBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCwgc3RyaW5nIHwgc3RyaW5nW10+KFxuICAgICAgICAgICAgU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKSxcbiAgKSxcbikge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICAvLyBUT0RPOiBmaXggdXNpbmcgLi4uc3VwZXIuZXZlbnRzIHJlcXVpcmVzOiBodHRwczovL2dpdGh1Yi5jb20vc2JiLWRlc2lnbi1zeXN0ZW1zL2x5bmUtY29tcG9uZW50cy9pc3N1ZXMvMjYwMFxuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICBjaGFuZ2U6ICdjaGFuZ2UnLFxuICAgIGlucHV0OiAnaW5wdXQnLFxuICAgIHN0YXRlQ2hhbmdlOiAnc3RhdGVDaGFuZ2UnLFxuICAgIHdpbGxPcGVuOiAnd2lsbE9wZW4nLFxuICAgIGRpZE9wZW46ICdkaWRPcGVuJyxcbiAgICB3aWxsQ2xvc2U6ICd3aWxsQ2xvc2UnLFxuICAgIGRpZENsb3NlOiAnZGlkQ2xvc2UnLFxuICB9IGFzIGNvbnN0O1xuXG4gIC8qKiBUaGUgcGxhY2Vob2xkZXIgdXNlZCBpZiBubyB2YWx1ZSBoYXMgYmVlbiBzZWxlY3RlZC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBhY2Nlc3NvciBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHNlbGVjdCBhbGxvd3MgZm9yIG11bHRpcGxlIHNlbGVjdGlvbi4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIG11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHNlbGVjdCBpcyByZWFkb25seS4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEZvcm0gdHlwZSBvZiBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCAnc2VsZWN0LW9uZSAvIHNlbGVjdC1tdWx0aXBsZSdcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gJ3NlbGVjdC1tdWx0aXBsZScgOiAnc2VsZWN0LW9uZSc7XG4gIH1cblxuICAvKiogVGhlIHZhbHVlIGRpc3BsYXllZCBieSB0aGUgY29tcG9uZW50LiAqL1xuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9kaXNwbGF5VmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBOb3RpZmllcyB0aGF0IHRoZSBjb21wb25lbnQncyB2YWx1ZSBoYXMgY2hhbmdlZC4gKi9cbiAgcHJpdmF0ZSBfY2hhbmdlOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYlNlbGVjdEVsZW1lbnQuZXZlbnRzLmNoYW5nZSk7XG5cbiAgLyoqIE5vdGlmaWVzIHRoYXQgYW4gb3B0aW9uIHZhbHVlIGhhcyBiZWVuIHNlbGVjdGVkLiAqL1xuICBwcml2YXRlIF9pbnB1dDogRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcih0aGlzLCBTYmJTZWxlY3RFbGVtZW50LmV2ZW50cy5pbnB1dCk7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIF9zdGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPFNlbGVjdENoYW5nZT4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiU2VsZWN0RWxlbWVudC5ldmVudHMuc3RhdGVDaGFuZ2UsXG4gICAge1xuICAgICAgY29tcG9zZWQ6IGZhbHNlLFxuICAgIH0sXG4gICk7XG5cbiAgcHJpdmF0ZSBfb3ZlcmxheSE6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9vcHRpb25Db250YWluZXIhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfb3JpZ2luRWxlbWVudCE6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF90cmlnZ2VyRWxlbWVudCE6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIF9vdmVybGF5SWQgPSBgc2JiLXNlbGVjdC0keysrbmV4dElkfWA7XG4gIHByaXZhdGUgX2FjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICBwcml2YXRlIF9zZWFyY2hUaW1lb3V0PzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgX3NlYXJjaFN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9kaWRMb2FkID0gZmFsc2U7XG4gIHByaXZhdGUgX2lzUG9pbnRlckRvd25FdmVudE9uTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9hYm9ydCA9IG5ldyBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIodGhpcyk7XG5cbiAgLyoqXG4gICAqIFRoZSAnY29tYm9ib3gnIGlucHV0IGVsZW1lbnRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlucHV0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX3RyaWdnZXJFbGVtZW50O1xuICB9XG5cbiAgLyoqIEdldHMgYWxsIHRoZSBTYmJPcHRpb25FbGVtZW50IHByb2plY3RlZCBpbiB0aGUgc2VsZWN0LiAqL1xuICBwcml2YXRlIGdldCBfb3B0aW9ucygpOiBTYmJPcHRpb25FbGVtZW50W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItb3B0aW9uJykgPz8gW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgX2ZpbHRlcmVkT3B0aW9ucygpOiBTYmJPcHRpb25FbGVtZW50W10ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zLmZpbHRlcihcbiAgICAgIChvcHQ6IFNiYk9wdGlvbkVsZW1lbnQpID0+ICFvcHQuZGlzYWJsZWQgJiYgIW9wdC5oYXNBdHRyaWJ1dGUoJ2RhdGEtZ3JvdXAtZGlzYWJsZWQnKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBuZXcgTXV0YXRpb25Db250cm9sbGVyKHRoaXMsIHtcbiAgICAgIGNvbmZpZzogeyBhdHRyaWJ1dGVGaWx0ZXI6IFsnYXJpYS1sYWJlbGxlZGJ5JywgJ2FyaWEtbGFiZWwnLCAnYXJpYS1kZXNjcmliZWRieSddIH0sXG4gICAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5fc3luY0FyaWFMYWJlbHMoKSxcbiAgICB9KTtcblxuICAgIG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcykud2l0aEhhbmRsZXIoKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0aGlzLl9zeW5jQXJpYUxhYmVscygpKSk7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jQXJpYUxhYmVscygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RyaWdnZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0T3JSZW1vdmVBdHRyaWJ1dGUoXG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudCxcbiAgICAgICdhcmlhLWxhYmVsbGVkYnknLFxuICAgICAgdGhpcy5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScpLFxuICAgICk7XG4gICAgc2V0T3JSZW1vdmVBdHRyaWJ1dGUodGhpcy5fdHJpZ2dlckVsZW1lbnQsICdhcmlhLWxhYmVsJywgdGhpcy5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSk7XG4gICAgc2V0T3JSZW1vdmVBdHRyaWJ1dGUoXG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudCxcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JyxcbiAgICAgIHRoaXMuZ2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JyksXG4gICAgKTtcblxuICAgIC8vIFVzaW5nIHRoZSBhc3NvY2lhdGVkIGxhYmVscyBpcyBvbmx5IGEgZmFsbGJhY2suXG4gICAgLy8gVGhlIGRyYXdiYWNrIGlzLCB0aGF0IGl0IGRvZXNuJ3QgZ2V0IHVwZGF0ZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBsaXN0IG9mIGxhYmVsIGNoYW5nZXMuXG4gICAgaWYgKFxuICAgICAgIXRoaXMuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykgJiZcbiAgICAgICF0aGlzLmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JykgJiZcbiAgICAgIHRoaXMuaW50ZXJuYWxzLmxhYmVscy5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICdhcmlhLWxhYmVsJyxcbiAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmludGVybmFscy5sYWJlbHMpXG4gICAgICAgICAgLm1hcCgobGFiZWwpID0+IGxhYmVsLnRleHRDb250ZW50KVxuICAgICAgICAgIC5qb2luKCcsICcpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKiogT3BlbnMgdGhlIHNlbGVjdGlvbiBwYW5lbC4gKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCcgfHxcbiAgICAgICF0aGlzLl9vdmVybGF5IHx8XG4gICAgICB0aGlzLl9vcHRpb25zLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgdGhpcy5kaXNhYmxlZCB8fFxuICAgICAgdGhpcy5mb3JtRGlzYWJsZWRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMud2lsbE9wZW4uZW1pdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmluZyc7XG4gICAgdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCk7XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgb3BlbmVkYCBzdGF0ZS5cbiAgICBpZiAodGhpcy5faXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbG9zZXMgdGhlIHNlbGVjdGlvbiBwYW5lbC4gKi9cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy53aWxsQ2xvc2UuZW1pdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5hYm9ydCgpO1xuXG4gICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHNldCB0aGUgYGNsb3NlZGAgc3RhdGUuXG4gICAgaWYgKHRoaXMuX2lzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24odGhpcywgJy0tc2JiLW9wdGlvbnMtcGFuZWwtYW5pbWF0aW9uLWR1cmF0aW9uJyk7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgY3VycmVudCBkaXNwbGF5ZWQgdmFsdWUuICovXG4gIHB1YmxpYyBnZXREaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheVZhbHVlID8/ICcnO1xuICB9XG5cbiAgLyoqIExpc3RlbnMgdG8gb3B0aW9uIGNoYW5nZXMuICovXG4gIHByaXZhdGUgX29uT3B0aW9uQ2hhbmdlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiT3B0aW9uRWxlbWVudDtcbiAgICBpZiAodGFyZ2V0LnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLl9vbk9wdGlvblNlbGVjdGVkKHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29uT3B0aW9uRGVzZWxlY3RlZCh0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZXRzIHRoZSBfZGlzcGxheVZhbHVlIGJ5IGNoZWNraW5nIHRoZSBpbnRlcm5hbCBzYmItb3B0aW9ucyBhbmQgc2V0dGluZyB0aGUgY29ycmVjdCBgc2VsZWN0ZWRgIHZhbHVlIG9uIHRoZW0uICovXG4gIHByaXZhdGUgX29uVmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnM7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkge1xuICAgICAgY29uc3Qgb3B0aW9uRWxlbWVudCA9IG9wdGlvbnMuZmluZCgobykgPT4gKG8udmFsdWUgPz8gby5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpID09PSBuZXdWYWx1ZSk7XG4gICAgICBpZiAob3B0aW9uRWxlbWVudCkge1xuICAgICAgICBvcHRpb25FbGVtZW50LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnNcbiAgICAgICAgLmZpbHRlcigobykgPT4gKG8udmFsdWUgPz8gby5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpICE9PSBuZXdWYWx1ZSlcbiAgICAgICAgLmZvckVhY2goKG8pID0+IChvLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IG9wdGlvbkVsZW1lbnQ/LnRleHRDb250ZW50IHx8IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnNcbiAgICAgICAgLmZpbHRlcigobykgPT4gIW5ld1ZhbHVlLmluY2x1ZGVzKG8udmFsdWUgPz8gby5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpKVxuICAgICAgICAuZm9yRWFjaCgoZSkgPT4gKGUuc2VsZWN0ZWQgPSBmYWxzZSkpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25FbGVtZW50cyA9IG9wdGlvbnMuZmlsdGVyKChvKSA9PlxuICAgICAgICBuZXdWYWx1ZS5pbmNsdWRlcyhvLnZhbHVlID8/IG8uZ2V0QXR0cmlidXRlKCd2YWx1ZScpKSxcbiAgICAgICk7XG4gICAgICBzZWxlY3RlZE9wdGlvbkVsZW1lbnRzLmZvckVhY2goKG8pID0+IChvLnNlbGVjdGVkID0gdHJ1ZSkpO1xuICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gc2VsZWN0ZWRPcHRpb25FbGVtZW50cy5tYXAoKG8pID0+IG8udGV4dENvbnRlbnQpLmpvaW4oJywgJykgfHwgbnVsbDtcbiAgICB9XG4gICAgdGhpcy5fc3RhdGVDaGFuZ2UuZW1pdCh7IHR5cGU6ICd2YWx1ZScsIHZhbHVlOiBuZXdWYWx1ZSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGZvY3VzIGJlaGF2aW9yXG4gICAgdGhpcy5mb2N1cyA9ICgpID0+IHRoaXMuX3RyaWdnZXJFbGVtZW50LmZvY3VzKCk7XG4gICAgdGhpcy5ibHVyID0gKCkgPT4gdGhpcy5fdHJpZ2dlckVsZW1lbnQuYmx1cigpO1xuXG4gICAgLy8gV2FpdCBmb3Igc3NyIGh5ZHJhdGlvblxuICAgIGlmICghaXNOZXh0anMoKSkge1xuICAgICAgdGhpcy5zdGFydFVwZGF0ZSgpO1xuICAgICAgdGhpcy5fc2V0dXBTZWxlY3QoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBlbGVtZW50J3MgZmlyc3QgYXR0cmlidXRlIHdob3NlIHF1YWxpZmllZCBuYW1lIGlzIHF1YWxpZmllZE5hbWUuXG4gICAqXG4gICAqIFtNRE4gUmVmZXJlbmNlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvRWxlbWVudC9yZW1vdmVBdHRyaWJ1dGUpXG4gICAqIEBpbnRlcm5hbCBXZSBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgZHVlIHRvIGEgaHlkcmF0aW9uIGlzc3VlIHdpdGggTmV4dC5qcy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSByZW1vdmVBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gSW4gTmV4dC5qcyB0aGUgaHlkcmF0aW9uIG5lZWRzIHRvIGZpbmlzaCBiZWZvcmUgd2UgY2FuIG1hbmlwdWxhdGUgdGhlIGxpZ2h0IERPTS5cbiAgICAvLyBAbGl0L3JlYWN0IGNhbGxzIHJlbW92ZUF0dHJpYnV0ZSgnZGVmZXItaHlkcmF0aW9uJykgaW4gYSB1c2VMYXlvdXRFZmZlY3QsXG4gICAgLy8gd2hpY2ggaXMgZG9uZSBhZnRlciBoeWRyYXRpb24gaXMgZmluaXNoZWQuIER1ZSB0byB0aGlzIHdlIGludGVyY2VwdCB0aGlzIGNhbGxcbiAgICAvLyBpbiBvdmVycmlkaW5nIHJlbW92ZUF0dHJpYnV0ZSB0byBmaW5pc2ggaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNiYi1zZWxlY3QuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2xpdC9saXQvYmxvYi9tYWluL3BhY2thZ2VzL3JlYWN0L3NyYy9jcmVhdGUtY29tcG9uZW50LnRzI0wyOTMtTDI5NlxuICAgIC8vIFdlIGFsc28gbmVlZCB0byB3YWl0IGZvciB1cGRhdGUgY29tcGxldGUgaW4gb3JkZXIgdG8gYmUgc3VyZSB0aGF0IHRoZSBzaGFkb3cgRE9NIGhhcyBiZWVuIHJlbmRlcmVkLlxuICAgIGlmIChpc05leHRqcygpICYmIHF1YWxpZmllZE5hbWUgPT09ICdkZWZlci1oeWRyYXRpb24nICYmICF0aGlzLl9kaWRMb2FkKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5fc2V0dXBTZWxlY3QoKSk7XG4gICAgfVxuICAgIHN1cGVyLnJlbW92ZUF0dHJpYnV0ZShxdWFsaWZpZWROYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgaWYgKGFyaWFSb2xlT25Ib3N0KSB7XG4gICAgICB0aGlzLmlkIHx8PSB0aGlzLl9vdmVybGF5SWQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmFsID0gdGhpcy5fYWJvcnQuc2lnbmFsO1xuICAgIGNvbnN0IGZvcm1GaWVsZCA9IHRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpID8/IHRoaXMuY2xvc2VzdD8uKCdbZGF0YS1mb3JtLWZpZWxkXScpO1xuXG4gICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IGZvcm1GaWVsZC5oYXNBdHRyaWJ1dGUoJ25lZ2F0aXZlJyk7XG4gICAgfVxuICAgIHRoaXMuX3N5bmNQcm9wZXJ0aWVzKCk7XG4gICAgdGhpcy5fc3luY0FyaWFMYWJlbHMoKTtcblxuICAgIGlmICh0aGlzLl9kaWRMb2FkKSB7XG4gICAgICB0aGlzLl9zZXR1cE9yaWdpbigpO1xuICAgICAgdGhpcy5fc2V0dXBUcmlnZ2VyKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICB0aGlzLl9vblZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnb3B0aW9uU2VsZWN0aW9uQ2hhbmdlJyxcbiAgICAgIChlOiBDdXN0b21FdmVudDx2b2lkPikgPT4gdGhpcy5fb25PcHRpb25DaGFuZ2VkKGUpLFxuICAgICAgeyBzaWduYWwgfSxcbiAgICApO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdjbGljaycsXG4gICAgICAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBTYmJTZWxlY3RFbGVtZW50IHwgU2JiT3B0aW9uRWxlbWVudDtcbiAgICAgICAgaWYgKHRhcmdldC5sb2NhbE5hbWUgPT09ICdzYmItb3B0aW9uJykge1xuICAgICAgICAgIC8vIE9wdGlvbiBjbGlja1xuICAgICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiAhdGFyZ2V0LmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3RvZ2dsZU9wZW5pbmcoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgLy8gT24gaW5pdGlhbGl6YXRpb24sIHRoZSAnX29uVmFsdWVDaGFuZ2VkJyBpcyBjYWxsZWQgYnkgdGhlIGNvbm5lY3RlZENhbGxiYWNrXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygndmFsdWUnKSAmJiB0aGlzLl9kaWRMb2FkKSB7XG4gICAgICB0aGlzLl9vblZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlISk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ25lZ2F0aXZlJykgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdtdWx0aXBsZScpKSB7XG4gICAgICB0aGlzLl9zeW5jUHJvcGVydGllcygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMucHJlcGVuZCh0aGlzLl90cmlnZ2VyRWxlbWVudCk7IC8vIFRha2UgYmFjayB0aGUgdHJpZ2dlciBlbGVtZW50IHByZXZpb3VzbHkgbW92ZWQgdG8gdGhlIGxpZ2h0IERPTVxuICAgIHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlRm9ybVZhbHVlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm11bHRpcGxlICYmIHRoaXMudmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgY29uc3QgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgKHRoaXMudmFsdWUgYXMgc3RyaW5nW10pLmZvckVhY2goKGVsKSA9PiBkYXRhLmFwcGVuZCh0aGlzLm5hbWUsIGVsKSk7XG4gICAgICB0aGlzLmludGVybmFscy5zZXRGb3JtVmFsdWUoZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLnNldEZvcm1WYWx1ZSh0aGlzLnZhbHVlIGFzIHN0cmluZyB8IG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVzZXQgdmFsdWUgaXMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSAodGhlIHNldHVwIHZhbHVlKSwgbnVsbCBvdGhlcndpc2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmhhc0F0dHJpYnV0ZSgndmFsdWUnKSA/IHRoaXMuZ2V0QXR0cmlidXRlKCd2YWx1ZScpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgIF9yZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICApOiB2b2lkIHtcbiAgICBpZiAoIXN0YXRlKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgLy8gaWYgbXVsdGlwbGUsIHRoZSBzdGF0ZSBmb3JtYXQgaXMgWydmaWVsZC1uYW1lJywgJ3ZhbHVlJ11bXVxuICAgICAgdGhpcy52YWx1ZSA9IChzdGF0ZSBhcyBbc3RyaW5nLCBzdHJpbmddW10pLm1hcCgoZW50cmllcykgPT4gZW50cmllc1sxXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSBzdGF0ZSBhcyBzdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc3luY1Byb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1kaXZpZGVyJykuZm9yRWFjaCgoZWxlbWVudCkgPT4gKGVsZW1lbnQubmVnYXRpdmUgPSB0aGlzLm5lZ2F0aXZlKSk7XG5cbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJPcHRpb25FbGVtZW50IHwgU2JiT3B0R3JvdXBFbGVtZW50PihcbiAgICAgICdzYmItb3B0aW9uLCBzYmItb3B0Z3JvdXAnLFxuICAgICkuZm9yRWFjaCgoZWxlbWVudDogU2JiT3B0aW9uRWxlbWVudCB8IFNiYk9wdEdyb3VwRWxlbWVudCkgPT4ge1xuICAgICAgZWxlbWVudC50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtbmVnYXRpdmUnLCB0aGlzLm5lZ2F0aXZlKTtcbiAgICAgIGVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCdkYXRhLW11bHRpcGxlJywgdGhpcy5tdWx0aXBsZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cFNlbGVjdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXR1cE9yaWdpbigpO1xuICAgIHRoaXMuX3NldHVwVHJpZ2dlcigpO1xuICAgIHRoaXMuX2RpZExvYWQgPSB0cnVlO1xuICAgIHRoaXMuY29tcGxldGVVcGRhdGUoKTtcbiAgfVxuXG4gIC8qKiBTZXRzIHRoZSBvcmlnaW5FbGVtZW50OyBpZiB0aGUgY29tcG9uZW50IGlzIHVzZWQgaW4gYSBzYmItZm9ybS1maWVsZCB1c2VzIGl0LCBvdGhlcndpc2UgdXNlcyB0aGUgcGFyZW50RWxlbWVudC4gKi9cbiAgcHJpdmF0ZSBfc2V0dXBPcmlnaW4oKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUZpZWxkID0gdGhpcy5jbG9zZXN0Py4oJ3NiYi1mb3JtLWZpZWxkJyk7XG4gICAgdGhpcy5fb3JpZ2luRWxlbWVudCA9XG4gICAgICBmb3JtRmllbGQ/LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3I/LignI292ZXJsYXktYW5jaG9yJykgPz8gdGhpcy5wYXJlbnRFbGVtZW50ITtcbiAgICBpZiAodGhpcy5fb3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoXG4gICAgICAgICdkYXRhLW9wdGlvbi1wYW5lbC1vcmlnaW4tYm9yZGVybGVzcycsXG4gICAgICAgICEhZm9ybUZpZWxkPy5oYXNBdHRyaWJ1dGU/LignYm9yZGVybGVzcycpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG8gYXNzZXNzIHNjcmVlbi1yZWFkZXJzIHByb2JsZW1zIGNhdXNlZCBieSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBhcmlhIHBhdHRlcm5zIGFuZCBzaGFkb3cgRE9NLFxuICAgKiB3ZSBhcmUgZm9yY2VkIHRvIG1vdmUgdGhlICdjb21ib2JveCcgdHJpZ2dlciBlbGVtZW50IHRvIHRoZSBsaWdodCBET01cbiAgICovXG4gIHByaXZhdGUgX3NldHVwVHJpZ2dlcigpOiB2b2lkIHtcbiAgICAvLyBNb3ZlIHRoZSB0cmlnZ2VyIGJlZm9yZSB0aGUgc2JiLXNlbGVjdFxuICAgIHRoaXMucGFyZW50RWxlbWVudCEuaW5zZXJ0QmVmb3JlPy4odGhpcy5fdHJpZ2dlckVsZW1lbnQsIHRoaXMpO1xuXG4gICAgLy8gU2V0IHRoZSBpbnZpc2libGUgdHJpZ2dlciBlbGVtZW50IGRpbWVuc2lvbiB0byBtYXRjaCB0aGUgcGFyZW50IChuZWVkZWQgZm9yIHNjcmVlbiByZWFkZXJzKVxuICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKSA/PyB0aGlzO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnN0eWxlLnRvcCA9ICcwcHgnO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2NvbnRhaW5lckVsZW1lbnQub2Zmc2V0SGVpZ2h0fXB4YDtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2NvbnRhaW5lckVsZW1lbnQub2Zmc2V0V2lkdGh9cHhgO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0T3ZlcmxheVBvc2l0aW9uKCk6IHZvaWQge1xuICAgIHNldE92ZXJsYXlQb3NpdGlvbihcbiAgICAgIHRoaXMuX292ZXJsYXksXG4gICAgICB0aGlzLl9vcmlnaW5FbGVtZW50LFxuICAgICAgdGhpcy5fb3B0aW9uQ29udGFpbmVyLFxuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcuc2JiLXNlbGVjdF9fY29udGFpbmVyJykhLFxuICAgICAgdGhpcyxcbiAgICApO1xuICB9XG5cbiAgLy8gSW4gcmFyZSBjYXNlcyBpdCBjYW4gYmUgdGhhdCB0aGUgYW5pbWF0aW9uRW5kIGV2ZW50IGlzIHRyaWdnZXJlZCB0d2ljZS5cbiAgLy8gVG8gYXZvaWQgZW50ZXJpbmcgYSBjb3JydXB0IHN0YXRlLCBleGl0IHdoZW4gc3RhdGUgaXMgbm90IGV4cGVjdGVkLlxuICBwcml2YXRlIF9vbkFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4nICYmIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVPcGVuaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmVkJztcbiAgICB0aGlzLl9hdHRhY2hPcGVuUGFuZWxFdmVudHMoKTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuXG4gICAgdGhpcy5kaWRPcGVuLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUNsb3NpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICAgIHRoaXMuX3Jlc2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIHRoaXMuX29wdGlvbkNvbnRhaW5lci5zY3JvbGxUb3AgPSAwO1xuICAgIHRoaXMuZGlkQ2xvc2UuZW1pdCgpO1xuICB9XG5cbiAgLyoqIFdoZW4gYW4gb3B0aW9uIGlzIHNlbGVjdGVkLCB1cGRhdGVzIHRoZSBkaXNwbGF5VmFsdWU7IGl0IGFsc28gY2xvc2VzIHRoZSBzZWxlY3QgaWYgbm90IGBtdWx0aXBsZWAuICovXG4gIHByaXZhdGUgX29uT3B0aW9uU2VsZWN0ZWQob3B0aW9uU2VsZWN0aW9uQ2hhbmdlOiBTYmJPcHRpb25FbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLl9maWx0ZXJlZE9wdGlvbnNcbiAgICAgICAgLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24uaWQgIT09IG9wdGlvblNlbGVjdGlvbkNoYW5nZS5pZClcbiAgICAgICAgLmZvckVhY2goKG9wdGlvbikgPT4gKG9wdGlvbi5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICB0aGlzLnZhbHVlID0gb3B0aW9uU2VsZWN0aW9uQ2hhbmdlLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtvcHRpb25TZWxlY3Rpb25DaGFuZ2UudmFsdWUhXTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMudmFsdWUuaW5jbHVkZXMob3B0aW9uU2VsZWN0aW9uQ2hhbmdlLnZhbHVlISkpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IFsuLi50aGlzLnZhbHVlLCBvcHRpb25TZWxlY3Rpb25DaGFuZ2UudmFsdWUhXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9pbnB1dC5lbWl0KCk7XG4gICAgdGhpcy5fY2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIC8qKiBXaGVuIGFuIG9wdGlvbiBpcyB1bnNlbGVjdGVkIGluIGBtdWx0aXBsZWAsIHJlbW92ZXMgaXQgZnJvbSB2YWx1ZSBhbmQgdXBkYXRlcyBkaXNwbGF5VmFsdWUuICovXG4gIHByaXZhdGUgX29uT3B0aW9uRGVzZWxlY3RlZChvcHRpb25TZWxlY3Rpb25DaGFuZ2U6IFNiYk9wdGlvbkVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy52YWx1ZSA9ICh0aGlzLnZhbHVlIGFzIHN0cmluZ1tdKS5maWx0ZXIoXG4gICAgICAgIChlbDogc3RyaW5nKSA9PiBlbCAhPT0gb3B0aW9uU2VsZWN0aW9uQ2hhbmdlLnZhbHVlLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5faW5wdXQuZW1pdCgpO1xuICAgICAgdGhpcy5fY2hhbmdlLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hPcGVuUGFuZWxFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIC8vIFJlY2FsY3VsYXRlIHRoZSBvdmVybGF5IHBvc2l0aW9uIG9uIHNjcm9sbCBhbmQgd2luZG93IHJlc2l6ZVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4gdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGlja1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIChldikgPT4gdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lcihldiksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIChldikgPT4gdGhpcy5fY2xvc2VPbkJhY2tkcm9wQ2xpY2soZXYpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcpIHtcbiAgICAgIHRoaXMuX29wZW5lZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgdGhpcy5fY2xvc2VkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jbG9zZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hlY2tGb3JMZXR0ZXJTZWxlY3Rpb24oZXZlbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgIGNhc2UgJyAnOlxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hlY2tGb3JMZXR0ZXJTZWxlY3Rpb24oZXZlbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0QnlLZXlib2FyZCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgMCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCB0aGlzLl9maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRm9yTGV0dGVyU2VsZWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgfHxcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0NsZWFyJyB8fFxuICAgICAgKGV2ZW50LmtleS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgZXZlbnQua2V5ICE9PSAnICcgJiZcbiAgICAgICAgIWV2ZW50LmFsdEtleSAmJlxuICAgICAgICAhZXZlbnQuY3RybEtleSAmJlxuICAgICAgICAhZXZlbnQubWV0YUtleSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIC8vIFNldCB0aW1lb3V0IGFuZCB0aGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAgICBpZiAodHlwZW9mIHRoaXMuX3NlYXJjaFRpbWVvdXQgPT09IHR5cGVvZiBzZXRUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2VhcmNoVGltZW91dCk7XG4gICAgfVxuICAgIHRoaXMuX3NlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLl9zZWFyY2hTdHJpbmcgPSAnJyksIDEwMDApO1xuICAgIHRoaXMuX3NlYXJjaFN0cmluZyArPSBldmVudC5rZXk7XG5cbiAgICAvLyBSZW9yZGVyIHRoZSBfZmlsdGVyZWRPcHRpb24gYXJyYXkgdG8gaGF2ZSB0aGUgbGFzdCBzZWxlY3RlZCBlbGVtZW50IGF0IHRoZSBib3R0b20uXG4gICAgY29uc3QgaW5kZXhGb3JTbGljZTogbnVtYmVyID0gdGhpcy5fYWN0aXZlSXRlbUluZGV4ICsgMTtcbiAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQ6IFNiYk9wdGlvbkVsZW1lbnRbXSA9IFtcbiAgICAgIC4uLnRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5zbGljZShpbmRleEZvclNsaWNlKSxcbiAgICAgIC4uLnRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5zbGljZSgwLCBpbmRleEZvclNsaWNlKSxcbiAgICBdO1xuXG4gICAgY29uc3QgbWF0Y2ggPSBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQuZmluZChcbiAgICAgIChvcHRpb246IFNiYk9wdGlvbkVsZW1lbnQpID0+XG4gICAgICAgIG9wdGlvbi50ZXh0Q29udGVudD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX3NlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSA9PT0gMCxcbiAgICApO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgLy8gSWYgYW4gZXhhY3QgbWF0Y2ggaGFzIGJlZW4gZm91bmQsIGdvIHRvIHRoYXQgb3B0aW9uLlxuICAgICAgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgdGhpcy5fZmlsdGVyZWRPcHRpb25zLmluZGV4T2YobWF0Y2gpKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nLmxlbmd0aCA+IDEgJiZcbiAgICAgIG5ldyBSZWdFeHAoYF4ke3RoaXMuX3NlYXJjaFN0cmluZy5jaGFyQXQoMCl9KiRgKS50ZXN0KHRoaXMuX3NlYXJjaFN0cmluZylcbiAgICApIHtcbiAgICAgIC8vIElmIG5vIGV4YWN0IG1hdGNoIGhhcyBiZWVuIGZvdW5kIGJ1dCB0aGUgc3RyaW5nIHRvIHNlYXJjaCBpcyBtYWRlIGJ5IHRoZSBzYW1lIHJlcGVhdGVkIGxldHRlcixcbiAgICAgIC8vIGdvIHRvIHRoZSBmaXJzdCBlbGVtZW50LCBpZiBleGlzdHMsIHRoYXQgbWF0Y2hlcyB0aGUgbGV0dGVyLlxuICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpbHRlcmVkT3B0aW9uc1NvcnRlZC5maW5kKFxuICAgICAgICAob3B0aW9uOiBTYmJPcHRpb25FbGVtZW50KSA9PlxuICAgICAgICAgIG9wdGlvbi50ZXh0Q29udGVudD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX3NlYXJjaFN0cmluZ1swXS50b0xvd2VyQ2FzZSgpKSA9PT0gMCxcbiAgICAgICk7XG4gICAgICBpZiAoZmlyc3RNYXRjaCkge1xuICAgICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCB0aGlzLl9maWx0ZXJlZE9wdGlvbnMuaW5kZXhPZihmaXJzdE1hdGNoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIG1hdGNoIGZvdW5kLCBjbGVhciB0aGUgdGltZW91dCBhbmQgdGhlIHNlYXJjaCB0ZXJtLlxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NlYXJjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0QnlLZXlib2FyZCgpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQgPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICBhY3RpdmVPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24oIWFjdGl2ZU9wdGlvbi5zZWxlY3RlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5leHRJbmRleCA9XG4gICAgICBpbmRleCA/PyBnZXROZXh0RWxlbWVudEluZGV4KGV2ZW50LCB0aGlzLl9hY3RpdmVJdGVtSW5kZXgsIHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpO1xuICAgIGNvbnN0IG5leHRPcHRpb24gPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbbmV4dEluZGV4XTtcbiAgICBjb25zdCBhY3RpdmVPcHRpb24gPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIHRoaXMuX3NldEFjdGl2ZUVsZW1lbnQobmV4dE9wdGlvbiwgYWN0aXZlT3B0aW9uKTtcblxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRFbGVtZW50KG5leHRPcHRpb24sIGFjdGl2ZU9wdGlvbik7XG4gICAgfSBlbHNlIGlmIChldmVudD8uc2hpZnRLZXkpIHtcbiAgICAgIG5leHRPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24oIW5leHRPcHRpb24uc2VsZWN0ZWQpO1xuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSBuZXh0SW5kZXg7XG4gIH1cblxuICBwcml2YXRlIF9zZXRBY3RpdmVFbGVtZW50KFxuICAgIG5leHRBY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQsXG4gICAgbGFzdEFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uRWxlbWVudCB8IG51bGwgPSBudWxsLFxuICAgIHNldEFjdGl2ZURlc2NlbmRhbnQgPSB0cnVlLFxuICApOiB2b2lkIHtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLnNldEFjdGl2ZSh0cnVlKTtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JyB9KTtcblxuICAgIGlmIChzZXRBY3RpdmVEZXNjZW5kYW50KSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIG5leHRBY3RpdmVPcHRpb24uaWQpO1xuICAgIH1cblxuICAgIC8vIFJlc2V0IHRoZSBwcmV2aW91c1xuICAgIGlmIChsYXN0QWN0aXZlT3B0aW9uICYmIGxhc3RBY3RpdmVPcHRpb24gIT09IG5leHRBY3RpdmVPcHRpb24pIHtcbiAgICAgIGxhc3RBY3RpdmVPcHRpb24uc2V0QWN0aXZlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRTZWxlY3RlZEVsZW1lbnQoXG4gICAgbmV4dEFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uRWxlbWVudCxcbiAgICBsYXN0QWN0aXZlT3B0aW9uOiBTYmJPcHRpb25FbGVtZW50LFxuICApOiB2b2lkIHtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLnNldFNlbGVjdGVkVmlhVXNlckludGVyYWN0aW9uKHRydWUpO1xuXG4gICAgaWYgKGxhc3RBY3RpdmVPcHRpb24gJiYgbGFzdEFjdGl2ZU9wdGlvbiAhPT0gbmV4dEFjdGl2ZU9wdGlvbikge1xuICAgICAgbGFzdEFjdGl2ZU9wdGlvbi5zZXRTZWxlY3RlZFZpYVVzZXJJbnRlcmFjdGlvbihmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVzZXRBY3RpdmVFbGVtZW50KCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIGlmIChhY3RpdmVFbGVtZW50KSB7XG4gICAgICBhY3RpdmVFbGVtZW50LnNldEFjdGl2ZShmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcG9pbnRlcmRvd24gZXZlbnQgdGFyZ2V0IGlzIHRyaWdnZXJlZCBvbiB0aGUgbWVudS5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ID0gaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCk7XG4gIH07XG5cbiAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGljay5cbiAgcHJpdmF0ZSBfY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ICYmICFpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9zZXRWYWx1ZUZyb21TZWxlY3RlZE9wdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5fZmlsdGVyZWRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKTtcbiAgICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbiA9PT0gc2VsZWN0ZWRPcHRpb24sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBzZWxlY3RlZE9wdGlvbi52YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKTtcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB2YWx1ZTogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIHZhbHVlLnB1c2gob3B0aW9uLnZhbHVlISk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RvZ2dsZU9wZW5pbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uZm9jdXMoKTtcblxuICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgY2FzZSAnb3BlbmVkJzoge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY2xvc2VkJzoge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zcHJlYWREZWZlcnJlZERpc3BsYXlWYWx1ZShcbiAgICBwbGFjZWhvbGRlcjogVGVtcGxhdGVSZXN1bHQsXG4gICk6IChUZW1wbGF0ZVJlc3VsdCB8IFByb21pc2U8VGVtcGxhdGVSZXN1bHQ+KVtdIHtcbiAgICByZXR1cm4gW3RoaXMuX2RlZmVycmVkRGlzcGxheVZhbHVlKHBsYWNlaG9sZGVyKSwgcGxhY2Vob2xkZXJdO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZGVmZXJyZWREaXNwbGF5VmFsdWUocGxhY2Vob2xkZXI6IFRlbXBsYXRlUmVzdWx0KTogUHJvbWlzZTxUZW1wbGF0ZVJlc3VsdD4ge1xuICAgIGlmICh0aGlzLmh5ZHJhdGlvblJlcXVpcmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLmh5ZHJhdGlvbkNvbXBsZXRlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheVZhbHVlID8gaHRtbGAke3RoaXMuX2Rpc3BsYXlWYWx1ZX1gIDogcGxhY2Vob2xkZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDwhLS0gVGhpcyBlbGVtZW50IGlzIHZpc3VhbGx5IGhpZGRlbiBhbmQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgbGlnaHQgRE9NIHRvIGFsbG93IHNjcmVlblxuICAgICAgcmVhZGVycyB0byB3b3JrIHByb3Blcmx5IC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIlxuICAgICAgICB0YWJpbmRleD0ke3RoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWQgPyBub3RoaW5nIDogJzAnfVxuICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkLnRvU3RyaW5nKCl9XG4gICAgICAgIGFyaWEtY29udHJvbHM9JHt0aGlzLl9vdmVybGF5SWR9XG4gICAgICAgIGFyaWEtb3ducz0ke3RoaXMuX292ZXJsYXlJZH1cbiAgICAgICAgQGtleWRvd249JHt0aGlzLl9vbktleURvd259XG4gICAgICAgIEBjbGljaz0ke3RoaXMuX3RvZ2dsZU9wZW5pbmd9XG4gICAgICAgICR7cmVmKChyZWYpID0+ICh0aGlzLl90cmlnZ2VyRWxlbWVudCA9IHJlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgPlxuICAgICAgICAke3VudGlsKC4uLnRoaXMuX3NwcmVhZERlZmVycmVkRGlzcGxheVZhbHVlKGh0bWxgPHNwYW4+JHt0aGlzLnBsYWNlaG9sZGVyfTwvc3Bhbj5gKSl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBWaXN1YWxseSBkaXNwbGF5IHRoZSB2YWx1ZSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X190cmlnZ2VyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICR7dW50aWwoXG4gICAgICAgICAgLi4udGhpcy5fc3ByZWFkRGVmZXJyZWREaXNwbGF5VmFsdWUoXG4gICAgICAgICAgICBodG1sYDxzcGFuIGNsYXNzPVwic2JiLXNlbGVjdF9fdHJpZ2dlci0tcGxhY2Vob2xkZXJcIj4ke3RoaXMucGxhY2Vob2xkZXJ9PC9zcGFuPmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fZ2FwLWZpeFwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX2NvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fZ2FwLWZpeFwiPiR7b3ZlcmxheUdhcEZpeENvcm5lcnMoKX08L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIEBhbmltYXRpb25lbmQ9JHt0aGlzLl9vbkFuaW1hdGlvbkVuZH1cbiAgICAgICAgICBjbGFzcz1cInNiYi1zZWxlY3RfX3BhbmVsXCJcbiAgICAgICAgICAke3JlZigoZGlhbG9nUmVmKSA9PiAodGhpcy5fb3ZlcmxheSA9IGRpYWxvZ1JlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX3dyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgaWQ9JHshYXJpYVJvbGVPbkhvc3QgPyB0aGlzLl9vdmVybGF5SWQgOiBub3RoaW5nfVxuICAgICAgICAgICAgICBjbGFzcz1cInNiYi1zZWxlY3RfX29wdGlvbnNcIlxuICAgICAgICAgICAgICByb2xlPSR7IWFyaWFSb2xlT25Ib3N0ID8gJ2xpc3Rib3gnIDogbm90aGluZ31cbiAgICAgICAgICAgICAgP2FyaWEtbXVsdGlzZWxlY3RhYmxlPSR7dGhpcy5tdWx0aXBsZX1cbiAgICAgICAgICAgICAgJHtyZWYoKGNvbnRhaW5lclJlZikgPT4gKHRoaXMuX29wdGlvbkNvbnRhaW5lciA9IGNvbnRhaW5lclJlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuX3NldFZhbHVlRnJvbVNlbGVjdGVkT3B0aW9ufT48L3Nsb3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItc2VsZWN0JzogU2JiU2VsZWN0RWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlNiYlNlbGVjdEVsZW1lbnQiLCJfYSIsInN0YXRlIiwicmVmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
973
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2VsZWN0L3NlbGVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNdXRhdGlvbkNvbnRyb2xsZXIgfSBmcm9tICdAbGl0LWxhYnMvb2JzZXJ2ZXJzL211dGF0aW9uLWNvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgUHJvcGVydHlWYWx1ZXMsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGh0bWwsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcbmltcG9ydCB7IHVudGlsIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvdW50aWwuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4IH0gZnJvbSAnLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vY29yZS9iYXNlLWVsZW1lbnRzLmpzJztcbmltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlLCBob3N0QXR0cmlidXRlcyB9IGZyb20gJy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBpc05leHRqcywgaXNTYWZhcmksIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uLCBzZXRPclJlbW92ZUF0dHJpYnV0ZSB9IGZyb20gJy4uL2NvcmUvZG9tLmpzJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJy4uL2NvcmUvZXZlbnRpbmcuanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJEaXNhYmxlZE1peGluLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxuICBTYmJIeWRyYXRpb25NaXhpbixcbiAgU2JiTmVnYXRpdmVNaXhpbixcbiAgU2JiUmVxdWlyZWRNaXhpbixcbiAgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4sXG59IGZyb20gJy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7IGlzRXZlbnRPbkVsZW1lbnQsIG92ZXJsYXlHYXBGaXhDb3JuZXJzLCBzZXRPdmVybGF5UG9zaXRpb24gfSBmcm9tICcuLi9jb3JlL292ZXJsYXkuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPcHRHcm91cEVsZW1lbnQsIFNiYk9wdGlvbkVsZW1lbnQgfSBmcm9tICcuLi9vcHRpb24uanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zZWxlY3Quc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBPbiBTYWZhcmksIHRoZSBhcmlhIHJvbGUgJ2xpc3Rib3gnIG11c3QgYmUgb24gdGhlIGhvc3QgZWxlbWVudCwgb3IgZWxzZSBWb2ljZU92ZXIgd29uJ3Qgd29yayBhdCBhbGwuXG4gKiBPbiB0aGUgb3RoZXIgaGFuZCwgSkFXUyBhbmQgTlZEQSBuZWVkIHRoZSByb2xlIHRvIGJlIGFuIFwiaW1tZWRpYXRlIHBhcmVudFwiIHRvIHRoZSBvcHRpb25zLCBvciBlbHNlIG9wdGdyb3VwcyB3b24ndCB3b3JrLlxuICovXG5jb25zdCBhcmlhUm9sZU9uSG9zdCA9IGlzU2FmYXJpO1xuXG5sZXQgbmV4dElkID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RDaGFuZ2Uge1xuICB0eXBlOiAndmFsdWUnO1xuICB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYSBwYW5lbCB3aXRoIHNlbGVjdGFibGUgb3B0aW9ucy5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBvcHRpb25zLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gY2hhbmdlIC0gTm90aWZpZXMgdGhhdCB0aGUgY29tcG9uZW50J3MgdmFsdWUgaGFzIGNoYW5nZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBpbnB1dCAtIE5vdGlmaWVzIHRoYXQgYW4gb3B0aW9uIHZhbHVlIGhhcyBiZWVuIHNlbGVjdGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1zZWxlY3RgIHN0YXJ0cyB0aGUgb3BlbmluZyB0cmFuc2l0aW9uLiBDYW4gYmUgY2FuY2VsZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBkaWRPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItc2VsZWN0YCBpcyBvcGVuZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSB3aWxsQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1zZWxlY3RgIGJlZ2lucyB0aGUgY2xvc2luZyB0cmFuc2l0aW9uLiBDYW4gYmUgY2FuY2VsZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBkaWRDbG9zZSAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXNlbGVjdGAgaXMgY2xvc2VkLlxuICogQGNzc3Byb3AgWy0tc2JiLXNlbGVjdC16LWluZGV4PXZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleCldIC0gVG8gc3BlY2lmeSBhIGN1c3RvbSBzdGFjayBvcmRlcixcbiAqIHRoZSBgei1pbmRleGAgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgdGhpcyBDU1MgdmFyaWFibGUuIFRoZSBkZWZhdWx0IGB6LWluZGV4YCBvZiB0aGVcbiAqIGNvbXBvbmVudCBpcyBzZXQgdG8gYHZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleClgIHdpdGggYSB2YWx1ZSBvZiBgMTAwMGAuXG4gKiBAb3ZlcnJpZGVUeXBlIHZhbHVlIC0gc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1zZWxlY3QnKVxuQGhvc3RBdHRyaWJ1dGVzKHtcbiAgcm9sZTogYXJpYVJvbGVPbkhvc3QgPyAnbGlzdGJveCcgOiBudWxsLFxufSlcbmNsYXNzIFNiYlNlbGVjdEVsZW1lbnQgZXh0ZW5kcyBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpbihcbiAgU2JiRGlzYWJsZWRNaXhpbihcbiAgICBTYmJOZWdhdGl2ZU1peGluKFxuICAgICAgU2JiSHlkcmF0aW9uTWl4aW4oXG4gICAgICAgIFNiYlJlcXVpcmVkTWl4aW4oXG4gICAgICAgICAgU2JiRm9ybUFzc29jaWF0ZWRNaXhpbjx0eXBlb2YgU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQsIHN0cmluZyB8IHN0cmluZ1tdPihcbiAgICAgICAgICAgIFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50LFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICksXG4gICksXG4pIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgLy8gVE9ETzogZml4IHVzaW5nIC4uLnN1cGVyLmV2ZW50cyByZXF1aXJlczogaHR0cHM6Ly9naXRodWIuY29tL3NiYi1kZXNpZ24tc3lzdGVtcy9seW5lLWNvbXBvbmVudHMvaXNzdWVzLzI2MDBcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBldmVudHMgPSB7XG4gICAgY2hhbmdlOiAnY2hhbmdlJyxcbiAgICBpbnB1dDogJ2lucHV0JyxcbiAgICBzdGF0ZUNoYW5nZTogJ3N0YXRlQ2hhbmdlJyxcbiAgICB3aWxsT3BlbjogJ3dpbGxPcGVuJyxcbiAgICBkaWRPcGVuOiAnZGlkT3BlbicsXG4gICAgd2lsbENsb3NlOiAnd2lsbENsb3NlJyxcbiAgICBkaWRDbG9zZTogJ2RpZENsb3NlJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKiogVGhlIHBsYWNlaG9sZGVyIHVzZWQgaWYgbm8gdmFsdWUgaGFzIGJlZW4gc2VsZWN0ZWQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgYWNjZXNzb3IgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3QgYWxsb3dzIGZvciBtdWx0aXBsZSBzZWxlY3Rpb24uICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3QgaXMgcmVhZG9ubHkuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBGb3JtIHR5cGUgb2YgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgJ3NlbGVjdC1vbmUgLyBzZWxlY3QtbXVsdGlwbGUnXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/ICdzZWxlY3QtbXVsdGlwbGUnIDogJ3NlbGVjdC1vbmUnO1xuICB9XG5cbiAgLyoqIFRoZSB2YWx1ZSBkaXNwbGF5ZWQgYnkgdGhlIGNvbXBvbmVudC4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBhY2Nlc3NvciBfZGlzcGxheVZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKiogTm90aWZpZXMgdGhhdCB0aGUgY29tcG9uZW50J3MgdmFsdWUgaGFzIGNoYW5nZWQuICovXG4gIHByaXZhdGUgX2NoYW5nZTogRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcih0aGlzLCBTYmJTZWxlY3RFbGVtZW50LmV2ZW50cy5jaGFuZ2UpO1xuXG4gIC8qKiBOb3RpZmllcyB0aGF0IGFuIG9wdGlvbiB2YWx1ZSBoYXMgYmVlbiBzZWxlY3RlZC4gKi9cbiAgcHJpdmF0ZSBfaW5wdXQ6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIodGhpcywgU2JiU2VsZWN0RWxlbWVudC5ldmVudHMuaW5wdXQpO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJpdmF0ZSBfc3RhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxTZWxlY3RDaGFuZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYlNlbGVjdEVsZW1lbnQuZXZlbnRzLnN0YXRlQ2hhbmdlLFxuICAgIHtcbiAgICAgIGNvbXBvc2VkOiBmYWxzZSxcbiAgICB9LFxuICApO1xuXG4gIHByaXZhdGUgX292ZXJsYXkhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfb3B0aW9uQ29udGFpbmVyITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX29yaWdpbkVsZW1lbnQhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfb3ZlcmxheUlkID0gYHNiYi1zZWxlY3QtJHsrK25leHRJZH1gO1xuICBwcml2YXRlIF9hY3RpdmVJdGVtSW5kZXggPSAtMTtcbiAgcHJpdmF0ZSBfc2VhcmNoVGltZW91dD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBwcml2YXRlIF9zZWFyY2hTdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfZGlkTG9hZCA9IGZhbHNlO1xuICBwcml2YXRlIF9pc1BvaW50ZXJEb3duRXZlbnRPbk1lbnU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlICdjb21ib2JveCcgaW5wdXQgZWxlbWVudFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fdHJpZ2dlckVsZW1lbnQ7XG4gIH1cblxuICAvKiogR2V0cyBhbGwgdGhlIFNiYk9wdGlvbkVsZW1lbnQgcHJvamVjdGVkIGluIHRoZSBzZWxlY3QuICovXG4gIHByaXZhdGUgZ2V0IF9vcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1vcHRpb24nKSA/PyBbXSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfZmlsdGVyZWRPcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuZmlsdGVyKFxuICAgICAgKG9wdDogU2JiT3B0aW9uRWxlbWVudCkgPT4gIW9wdC5kaXNhYmxlZCAmJiAhb3B0Lmhhc0F0dHJpYnV0ZSgnZGF0YS1ncm91cC1kaXNhYmxlZCcpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Lignb3B0aW9uU2VsZWN0aW9uQ2hhbmdlJywgKGU6IEN1c3RvbUV2ZW50PHZvaWQ+KSA9PlxuICAgICAgdGhpcy5fb25PcHRpb25DaGFuZ2VkKGUpLFxuICAgICk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ29wdGlvbkxhYmVsQ2hhbmdlZCcsIChlOiBFdmVudCkgPT4gdGhpcy5fb25PcHRpb25MYWJlbENoYW5nZWQoZSkpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdjbGljaycsIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBTYmJTZWxlY3RFbGVtZW50IHwgU2JiT3B0aW9uRWxlbWVudDtcbiAgICAgIGlmICh0YXJnZXQubG9jYWxOYW1lID09PSAnc2JiLW9wdGlvbicpIHtcbiAgICAgICAgLy8gT3B0aW9uIGNsaWNrXG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiAhdGFyZ2V0LmRpc2FibGVkKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fdG9nZ2xlT3BlbmluZygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbmV3IE11dGF0aW9uQ29udHJvbGxlcih0aGlzLCB7XG4gICAgICBjb25maWc6IHsgYXR0cmlidXRlRmlsdGVyOiBbJ2FyaWEtbGFiZWxsZWRieScsICdhcmlhLWxhYmVsJywgJ2FyaWEtZGVzY3JpYmVkYnknXSB9LFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHRoaXMuX3N5bmNBcmlhTGFiZWxzKCksXG4gICAgfSk7XG5cbiAgICBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpLndpdGhIYW5kbGVyKCgpID0+IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fc3luY0FyaWFMYWJlbHMoKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3luY0FyaWFMYWJlbHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90cmlnZ2VyRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldE9yUmVtb3ZlQXR0cmlidXRlKFxuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQsXG4gICAgICAnYXJpYS1sYWJlbGxlZGJ5JyxcbiAgICAgIHRoaXMuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknKSxcbiAgICApO1xuICAgIHNldE9yUmVtb3ZlQXR0cmlidXRlKHRoaXMuX3RyaWdnZXJFbGVtZW50LCAnYXJpYS1sYWJlbCcsIHRoaXMuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykpO1xuICAgIHNldE9yUmVtb3ZlQXR0cmlidXRlKFxuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQsXG4gICAgICAnYXJpYS1kZXNjcmliZWRieScsXG4gICAgICB0aGlzLmdldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpLFxuICAgICk7XG5cbiAgICAvLyBVc2luZyB0aGUgYXNzb2NpYXRlZCBsYWJlbHMgaXMgb25seSBhIGZhbGxiYWNrLlxuICAgIC8vIFRoZSBkcmF3YmFjayBpcywgdGhhdCBpdCBkb2Vzbid0IGdldCB1cGRhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgbGlzdCBvZiBsYWJlbCBjaGFuZ2VzLlxuICAgIGlmIChcbiAgICAgICF0aGlzLmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpICYmXG4gICAgICAhdGhpcy5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScpICYmXG4gICAgICB0aGlzLmludGVybmFscy5sYWJlbHMubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKFxuICAgICAgICAnYXJpYS1sYWJlbCcsXG4gICAgICAgIEFycmF5LmZyb20odGhpcy5pbnRlcm5hbHMubGFiZWxzKVxuICAgICAgICAgIC5tYXAoKGxhYmVsKSA9PiBsYWJlbC50ZXh0Q29udGVudClcbiAgICAgICAgICAuam9pbignLCAnKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIE9wZW5zIHRoZSBzZWxlY3Rpb24gcGFuZWwuICovXG4gIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhdGUgIT09ICdjbG9zZWQnIHx8XG4gICAgICAhdGhpcy5fb3ZlcmxheSB8fFxuICAgICAgdGhpcy5fb3B0aW9ucy5sZW5ndGggPT09IDAgfHxcbiAgICAgIHRoaXMuZGlzYWJsZWQgfHxcbiAgICAgIHRoaXMuZm9ybURpc2FibGVkXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLndpbGxPcGVuLmVtaXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpO1xuXG4gICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHNldCB0aGUgYG9wZW5lZGAgc3RhdGUuXG4gICAgaWYgKHRoaXMuX2lzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuX2hhbmRsZU9wZW5pbmcoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2xvc2VzIHRoZSBzZWxlY3Rpb24gcGFuZWwuICovXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMud2lsbENsb3NlLmVtaXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NpbmcnO1xuICAgIHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuYWJvcnQoKTtcblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBjbG9zZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKHRoaXMsICctLXNiYi1vcHRpb25zLXBhbmVsLWFuaW1hdGlvbi1kdXJhdGlvbicpO1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIGN1cnJlbnQgZGlzcGxheWVkIHZhbHVlLiAqL1xuICBwdWJsaWMgZ2V0RGlzcGxheVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlWYWx1ZSA/PyAnJztcbiAgfVxuXG4gIC8qKiBMaXN0ZW5zIHRvIG9wdGlvbiBjaGFuZ2VzLiAqL1xuICBwcml2YXRlIF9vbk9wdGlvbkNoYW5nZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIFNiYk9wdGlvbkVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldC5zZWxlY3RlZCkge1xuICAgICAgdGhpcy5fb25PcHRpb25TZWxlY3RlZCh0YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vbk9wdGlvbkRlc2VsZWN0ZWQodGFyZ2V0KTtcbiAgICB9XG4gIH1cblxuICAvKiogTGlzdGVucyB0byBvcHRpb24gY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfb25PcHRpb25MYWJlbENoYW5nZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIFNiYk9wdGlvbkVsZW1lbnQ7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLl9nZXRTZWxlY3RlZCgpO1xuXG4gICAgaWYgKFxuICAgICAgKCFBcnJheS5pc0FycmF5KHNlbGVjdGVkKSAmJiB0YXJnZXQgIT09IHNlbGVjdGVkKSB8fFxuICAgICAgKEFycmF5LmlzQXJyYXkoc2VsZWN0ZWQpICYmICFzZWxlY3RlZC5pbmNsdWRlcyh0YXJnZXQpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZURpc3BsYXlWYWx1ZShzZWxlY3RlZCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVEaXNwbGF5VmFsdWUoc2VsZWN0ZWQ6IFNiYk9wdGlvbkVsZW1lbnQgfCBTYmJPcHRpb25FbGVtZW50W10gfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2VsZWN0ZWQpKSB7XG4gICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSBzZWxlY3RlZC5tYXAoKG8pID0+IG8udGV4dENvbnRlbnQpLmpvaW4oJywgJykgfHwgbnVsbDtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkKSB7XG4gICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSBzZWxlY3RlZD8udGV4dENvbnRlbnQgfHwgbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogU2V0cyB0aGUgX2Rpc3BsYXlWYWx1ZSBieSBjaGVja2luZyB0aGUgaW50ZXJuYWwgc2JiLW9wdGlvbnMgYW5kIHNldHRpbmcgdGhlIGNvcnJlY3QgYHNlbGVjdGVkYCB2YWx1ZSBvbiB0aGVtLiAqL1xuICBwcml2YXRlIF9vblZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZmlsdGVyZWRPcHRpb25zO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbkVsZW1lbnQgPVxuICAgICAgICBvcHRpb25zLmZpbmQoKG8pID0+IChvLnZhbHVlID8/IG8uZ2V0QXR0cmlidXRlKCd2YWx1ZScpKSA9PT0gbmV3VmFsdWUpID8/IG51bGw7XG4gICAgICBpZiAob3B0aW9uRWxlbWVudCkge1xuICAgICAgICBvcHRpb25FbGVtZW50LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnNcbiAgICAgICAgLmZpbHRlcigobykgPT4gKG8udmFsdWUgPz8gby5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpICE9PSBuZXdWYWx1ZSlcbiAgICAgICAgLmZvckVhY2goKG8pID0+IChvLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICAgIHRoaXMuX3VwZGF0ZURpc3BsYXlWYWx1ZShvcHRpb25FbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uc1xuICAgICAgICAuZmlsdGVyKChvKSA9PiAhbmV3VmFsdWUuaW5jbHVkZXMoby52YWx1ZSA/PyBvLmdldEF0dHJpYnV0ZSgndmFsdWUnKSkpXG4gICAgICAgIC5mb3JFYWNoKChlKSA9PiAoZS5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gb3B0aW9ucy5maWx0ZXIoKG8pID0+XG4gICAgICAgIG5ld1ZhbHVlLmluY2x1ZGVzKG8udmFsdWUgPz8gby5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLFxuICAgICAgKTtcbiAgICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaCgobykgPT4gKG8uc2VsZWN0ZWQgPSB0cnVlKSk7XG4gICAgICB0aGlzLl91cGRhdGVEaXNwbGF5VmFsdWUoc2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgfVxuICAgIHRoaXMuX3N0YXRlQ2hhbmdlLmVtaXQoeyB0eXBlOiAndmFsdWUnLCB2YWx1ZTogbmV3VmFsdWUgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCBmb2N1cyBiZWhhdmlvclxuICAgIHRoaXMuZm9jdXMgPSAoKSA9PiB0aGlzLl90cmlnZ2VyRWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMuYmx1ciA9ICgpID0+IHRoaXMuX3RyaWdnZXJFbGVtZW50LmJsdXIoKTtcblxuICAgIC8vIFdhaXQgZm9yIHNzciBoeWRyYXRpb25cbiAgICBpZiAoIWlzTmV4dGpzKCkpIHtcbiAgICAgIHRoaXMuc3RhcnRVcGRhdGUoKTtcbiAgICAgIHRoaXMuX3NldHVwU2VsZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgZWxlbWVudCdzIGZpcnN0IGF0dHJpYnV0ZSB3aG9zZSBxdWFsaWZpZWQgbmFtZSBpcyBxdWFsaWZpZWROYW1lLlxuICAgKlxuICAgKiBbTUROIFJlZmVyZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0VsZW1lbnQvcmVtb3ZlQXR0cmlidXRlKVxuICAgKiBAaW50ZXJuYWwgV2UgbmVlZCB0byBvdmVycmlkZSB0aGlzIGR1ZSB0byBhIGh5ZHJhdGlvbiBpc3N1ZSB3aXRoIE5leHQuanMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQXR0cmlidXRlKHF1YWxpZmllZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEluIE5leHQuanMgdGhlIGh5ZHJhdGlvbiBuZWVkcyB0byBmaW5pc2ggYmVmb3JlIHdlIGNhbiBtYW5pcHVsYXRlIHRoZSBsaWdodCBET00uXG4gICAgLy8gQGxpdC9yZWFjdCBjYWxscyByZW1vdmVBdHRyaWJ1dGUoJ2RlZmVyLWh5ZHJhdGlvbicpIGluIGEgdXNlTGF5b3V0RWZmZWN0LFxuICAgIC8vIHdoaWNoIGlzIGRvbmUgYWZ0ZXIgaHlkcmF0aW9uIGlzIGZpbmlzaGVkLiBEdWUgdG8gdGhpcyB3ZSBpbnRlcmNlcHQgdGhpcyBjYWxsXG4gICAgLy8gaW4gb3ZlcnJpZGluZyByZW1vdmVBdHRyaWJ1dGUgdG8gZmluaXNoIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzYmItc2VsZWN0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9saXQvbGl0L2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC9zcmMvY3JlYXRlLWNvbXBvbmVudC50cyNMMjkzLUwyOTZcbiAgICAvLyBXZSBhbHNvIG5lZWQgdG8gd2FpdCBmb3IgdXBkYXRlIGNvbXBsZXRlIGluIG9yZGVyIHRvIGJlIHN1cmUgdGhhdCB0aGUgc2hhZG93IERPTSBoYXMgYmVlbiByZW5kZXJlZC5cbiAgICBpZiAoaXNOZXh0anMoKSAmJiBxdWFsaWZpZWROYW1lID09PSAnZGVmZXItaHlkcmF0aW9uJyAmJiAhdGhpcy5fZGlkTG9hZCkge1xuICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuX3NldHVwU2VsZWN0KCkpO1xuICAgIH1cbiAgICBzdXBlci5yZW1vdmVBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGlmIChhcmlhUm9sZU9uSG9zdCkge1xuICAgICAgdGhpcy5pZCB8fD0gdGhpcy5fb3ZlcmxheUlkO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1GaWVsZCA9IHRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpID8/IHRoaXMuY2xvc2VzdD8uKCdbZGF0YS1mb3JtLWZpZWxkXScpO1xuXG4gICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IGZvcm1GaWVsZC5oYXNBdHRyaWJ1dGUoJ25lZ2F0aXZlJyk7XG4gICAgfVxuICAgIHRoaXMuX3N5bmNQcm9wZXJ0aWVzKCk7XG4gICAgdGhpcy5fc3luY0FyaWFMYWJlbHMoKTtcblxuICAgIGlmICh0aGlzLl9kaWRMb2FkKSB7XG4gICAgICB0aGlzLl9zZXR1cE9yaWdpbigpO1xuICAgICAgdGhpcy5fc2V0dXBUcmlnZ2VyKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICB0aGlzLl9vblZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIC8vIE9uIGluaXRpYWxpemF0aW9uLCB0aGUgJ19vblZhbHVlQ2hhbmdlZCcgaXMgY2FsbGVkIGJ5IHRoZSBjb25uZWN0ZWRDYWxsYmFja1xuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3ZhbHVlJykgJiYgdGhpcy5fZGlkTG9hZCkge1xuICAgICAgdGhpcy5fb25WYWx1ZUNoYW5nZWQodGhpcy52YWx1ZSEpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCduZWdhdGl2ZScpIHx8IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbXVsdGlwbGUnKSkge1xuICAgICAgdGhpcy5fc3luY1Byb3BlcnRpZXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnByZXBlbmQodGhpcy5fdHJpZ2dlckVsZW1lbnQpOyAvLyBUYWtlIGJhY2sgdGhlIHRyaWdnZXIgZWxlbWVudCBwcmV2aW91c2x5IG1vdmVkIHRvIHRoZSBsaWdodCBET01cbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyPy5hYm9ydCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICh0aGlzLnZhbHVlIGFzIHN0cmluZ1tdKS5mb3JFYWNoKChlbCkgPT4gZGF0YS5hcHBlbmQodGhpcy5uYW1lLCBlbCkpO1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc2V0Rm9ybVZhbHVlKGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVybmFscy5zZXRGb3JtVmFsdWUodGhpcy52YWx1ZSBhcyBzdHJpbmcgfCBudWxsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlc2V0IHZhbHVlIGlzIHRoZSBhdHRyaWJ1dGUgdmFsdWUgKHRoZSBzZXR1cCB2YWx1ZSksIG51bGwgb3RoZXJ3aXNlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBmb3JtUmVzZXRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5oYXNBdHRyaWJ1dGUoJ3ZhbHVlJykgPyB0aGlzLmdldEF0dHJpYnV0ZSgndmFsdWUnKSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKFxuICAgIHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCxcbiAgICBfcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbixcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIC8vIGlmIG11bHRpcGxlLCB0aGUgc3RhdGUgZm9ybWF0IGlzIFsnZmllbGQtbmFtZScsICd2YWx1ZSddW11cbiAgICAgIHRoaXMudmFsdWUgPSAoc3RhdGUgYXMgW3N0cmluZywgc3RyaW5nXVtdKS5tYXAoKGVudHJpZXMpID0+IGVudHJpZXNbMV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gc3RhdGUgYXMgc3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItZGl2aWRlcicpLmZvckVhY2goKGVsZW1lbnQpID0+IChlbGVtZW50Lm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZSkpO1xuXG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiT3B0aW9uRWxlbWVudCB8IFNiYk9wdEdyb3VwRWxlbWVudD4oXG4gICAgICAnc2JiLW9wdGlvbiwgc2JiLW9wdGdyb3VwJyxcbiAgICApLmZvckVhY2goKGVsZW1lbnQ6IFNiYk9wdGlvbkVsZW1lbnQgfCBTYmJPcHRHcm91cEVsZW1lbnQpID0+IHtcbiAgICAgIGVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCdkYXRhLW5lZ2F0aXZlJywgdGhpcy5uZWdhdGl2ZSk7XG4gICAgICBlbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1tdWx0aXBsZScsIHRoaXMubXVsdGlwbGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBTZWxlY3QoKTogdm9pZCB7XG4gICAgdGhpcy5fc2V0dXBPcmlnaW4oKTtcbiAgICB0aGlzLl9zZXR1cFRyaWdnZXIoKTtcbiAgICB0aGlzLl9kaWRMb2FkID0gdHJ1ZTtcbiAgICB0aGlzLmNvbXBsZXRlVXBkYXRlKCk7XG4gIH1cblxuICAvKiogU2V0cyB0aGUgb3JpZ2luRWxlbWVudDsgaWYgdGhlIGNvbXBvbmVudCBpcyB1c2VkIGluIGEgc2JiLWZvcm0tZmllbGQgdXNlcyBpdCwgb3RoZXJ3aXNlIHVzZXMgdGhlIHBhcmVudEVsZW1lbnQuICovXG4gIHByaXZhdGUgX3NldHVwT3JpZ2luKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1GaWVsZCA9IHRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpO1xuICAgIHRoaXMuX29yaWdpbkVsZW1lbnQgPVxuICAgICAgZm9ybUZpZWxkPy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPy4oJyNvdmVybGF5LWFuY2hvcicpID8/IHRoaXMucGFyZW50RWxlbWVudCE7XG4gICAgaWYgKHRoaXMuX29yaWdpbkVsZW1lbnQpIHtcbiAgICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKFxuICAgICAgICAnZGF0YS1vcHRpb24tcGFuZWwtb3JpZ2luLWJvcmRlcmxlc3MnLFxuICAgICAgICAhIWZvcm1GaWVsZD8uaGFzQXR0cmlidXRlPy4oJ2JvcmRlcmxlc3MnKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvIGFzc2VzcyBzY3JlZW4tcmVhZGVycyBwcm9ibGVtcyBjYXVzZWQgYnkgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYXJpYSBwYXR0ZXJucyBhbmQgc2hhZG93IERPTSxcbiAgICogd2UgYXJlIGZvcmNlZCB0byBtb3ZlIHRoZSAnY29tYm9ib3gnIHRyaWdnZXIgZWxlbWVudCB0byB0aGUgbGlnaHQgRE9NXG4gICAqL1xuICBwcml2YXRlIF9zZXR1cFRyaWdnZXIoKTogdm9pZCB7XG4gICAgLy8gTW92ZSB0aGUgdHJpZ2dlciBiZWZvcmUgdGhlIHNiYi1zZWxlY3RcbiAgICB0aGlzLnBhcmVudEVsZW1lbnQhLmluc2VydEJlZm9yZT8uKHRoaXMuX3RyaWdnZXJFbGVtZW50LCB0aGlzKTtcblxuICAgIC8vIFNldCB0aGUgaW52aXNpYmxlIHRyaWdnZXIgZWxlbWVudCBkaW1lbnNpb24gdG8gbWF0Y2ggdGhlIHBhcmVudCAobmVlZGVkIGZvciBzY3JlZW4gcmVhZGVycylcbiAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gdGhpcy5jbG9zZXN0Py4oJ3NiYi1mb3JtLWZpZWxkJykgPz8gdGhpcztcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zdHlsZS50b3AgPSAnMHB4JztcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtjb250YWluZXJFbGVtZW50Lm9mZnNldEhlaWdodH1weGA7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtjb250YWluZXJFbGVtZW50Lm9mZnNldFdpZHRofXB4YDtcbiAgfVxuXG4gIHByaXZhdGUgX3NldE92ZXJsYXlQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBzZXRPdmVybGF5UG9zaXRpb24oXG4gICAgICB0aGlzLl9vdmVybGF5LFxuICAgICAgdGhpcy5fb3JpZ2luRWxlbWVudCxcbiAgICAgIHRoaXMuX29wdGlvbkNvbnRhaW5lcixcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignLnNiYi1zZWxlY3RfX2NvbnRhaW5lcicpISxcbiAgICAgIHRoaXMsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEluIHJhcmUgY2FzZXMgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gIC8vIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgcHJpdmF0ZSBfb25BbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdvcGVuJyAmJiB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX2hhbmRsZU9wZW5pbmcoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdjbG9zZScgJiYgdGhpcy5zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlT3BlbmluZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5lZCc7XG4gICAgdGhpcy5fYXR0YWNoT3BlblBhbmVsRXZlbnRzKCk7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTtcblxuICAgIHRoaXMuZGlkT3Blbi5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVDbG9zaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2VkJztcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICB0aGlzLl9yZXNldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICB0aGlzLl9vcHRpb25Db250YWluZXIuc2Nyb2xsVG9wID0gMDtcbiAgICB0aGlzLmRpZENsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIC8qKiBXaGVuIGFuIG9wdGlvbiBpcyBzZWxlY3RlZCwgdXBkYXRlcyB0aGUgZGlzcGxheVZhbHVlOyBpdCBhbHNvIGNsb3NlcyB0aGUgc2VsZWN0IGlmIG5vdCBgbXVsdGlwbGVgLiAqL1xuICBwcml2YXRlIF9vbk9wdGlvblNlbGVjdGVkKG9wdGlvblNlbGVjdGlvbkNoYW5nZTogU2JiT3B0aW9uRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5fZmlsdGVyZWRPcHRpb25zXG4gICAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLmlkICE9PSBvcHRpb25TZWxlY3Rpb25DaGFuZ2UuaWQpXG4gICAgICAgIC5mb3JFYWNoKChvcHRpb24pID0+IChvcHRpb24uc2VsZWN0ZWQgPSBmYWxzZSkpO1xuICAgICAgdGhpcy52YWx1ZSA9IG9wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBbb3B0aW9uU2VsZWN0aW9uQ2hhbmdlLnZhbHVlIV07XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLnZhbHVlLmluY2x1ZGVzKG9wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSEpKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgb3B0aW9uU2VsZWN0aW9uQ2hhbmdlLnZhbHVlIV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5faW5wdXQuZW1pdCgpO1xuICAgIHRoaXMuX2NoYW5nZS5lbWl0KCk7XG4gIH1cblxuICAvKiogV2hlbiBhbiBvcHRpb24gaXMgdW5zZWxlY3RlZCBpbiBgbXVsdGlwbGVgLCByZW1vdmVzIGl0IGZyb20gdmFsdWUgYW5kIHVwZGF0ZXMgZGlzcGxheVZhbHVlLiAqL1xuICBwcml2YXRlIF9vbk9wdGlvbkRlc2VsZWN0ZWQob3B0aW9uU2VsZWN0aW9uQ2hhbmdlOiBTYmJPcHRpb25FbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAodGhpcy52YWx1ZSBhcyBzdHJpbmdbXSkuZmlsdGVyKFxuICAgICAgICAoZWw6IHN0cmluZykgPT4gZWwgIT09IG9wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuX2lucHV0LmVtaXQoKTtcbiAgICAgIHRoaXMuX2NoYW5nZS5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXR0YWNoT3BlblBhbmVsRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICAvLyBSZWNhbGN1bGF0ZSB0aGUgb3ZlcmxheSBwb3NpdGlvbiBvbiBzY3JvbGwgYW5kIHdpbmRvdyByZXNpemVcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgICAvLyBXaXRob3V0IGNhcHR1cmUsIG90aGVyIHNjcm9sbCBjb250ZXh0cyB3b3VsZCBub3QgYnViYmxlIHRvIHRoaXMgZXZlbnQgbGlzdGVuZXIuXG4gICAgICAvLyBDYXB0dXJlIGFsbG93cyB1cyB0byByZWFjdCB0byBhbGwgc2Nyb2xsIGNvbnRleHRzIGluIHRoaXMgRE9NLlxuICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4gdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGlja1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIChldikgPT4gdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lcihldiksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIChldikgPT4gdGhpcy5fY2xvc2VPbkJhY2tkcm9wQ2xpY2soZXYpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcpIHtcbiAgICAgIHRoaXMuX29wZW5lZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgdGhpcy5fY2xvc2VkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jbG9zZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hlY2tGb3JMZXR0ZXJTZWxlY3Rpb24oZXZlbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgIGNhc2UgJyAnOlxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hlY2tGb3JMZXR0ZXJTZWxlY3Rpb24oZXZlbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0QnlLZXlib2FyZCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgMCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCB0aGlzLl9maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRm9yTGV0dGVyU2VsZWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgfHxcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0NsZWFyJyB8fFxuICAgICAgKGV2ZW50LmtleS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgZXZlbnQua2V5ICE9PSAnICcgJiZcbiAgICAgICAgIWV2ZW50LmFsdEtleSAmJlxuICAgICAgICAhZXZlbnQuY3RybEtleSAmJlxuICAgICAgICAhZXZlbnQubWV0YUtleSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIC8vIFNldCB0aW1lb3V0IGFuZCB0aGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAgICBpZiAodHlwZW9mIHRoaXMuX3NlYXJjaFRpbWVvdXQgPT09IHR5cGVvZiBzZXRUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2VhcmNoVGltZW91dCk7XG4gICAgfVxuICAgIHRoaXMuX3NlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLl9zZWFyY2hTdHJpbmcgPSAnJyksIDEwMDApO1xuICAgIHRoaXMuX3NlYXJjaFN0cmluZyArPSBldmVudC5rZXk7XG5cbiAgICAvLyBSZW9yZGVyIHRoZSBfZmlsdGVyZWRPcHRpb24gYXJyYXkgdG8gaGF2ZSB0aGUgbGFzdCBzZWxlY3RlZCBlbGVtZW50IGF0IHRoZSBib3R0b20uXG4gICAgY29uc3QgaW5kZXhGb3JTbGljZTogbnVtYmVyID0gdGhpcy5fYWN0aXZlSXRlbUluZGV4ICsgMTtcbiAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQ6IFNiYk9wdGlvbkVsZW1lbnRbXSA9IFtcbiAgICAgIC4uLnRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5zbGljZShpbmRleEZvclNsaWNlKSxcbiAgICAgIC4uLnRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5zbGljZSgwLCBpbmRleEZvclNsaWNlKSxcbiAgICBdO1xuXG4gICAgY29uc3QgbWF0Y2ggPSBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQuZmluZChcbiAgICAgIChvcHRpb246IFNiYk9wdGlvbkVsZW1lbnQpID0+XG4gICAgICAgIG9wdGlvbi50ZXh0Q29udGVudD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX3NlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSA9PT0gMCxcbiAgICApO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgLy8gSWYgYW4gZXhhY3QgbWF0Y2ggaGFzIGJlZW4gZm91bmQsIGdvIHRvIHRoYXQgb3B0aW9uLlxuICAgICAgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgdGhpcy5fZmlsdGVyZWRPcHRpb25zLmluZGV4T2YobWF0Y2gpKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nLmxlbmd0aCA+IDEgJiZcbiAgICAgIG5ldyBSZWdFeHAoYF4ke3RoaXMuX3NlYXJjaFN0cmluZy5jaGFyQXQoMCl9KiRgKS50ZXN0KHRoaXMuX3NlYXJjaFN0cmluZylcbiAgICApIHtcbiAgICAgIC8vIElmIG5vIGV4YWN0IG1hdGNoIGhhcyBiZWVuIGZvdW5kIGJ1dCB0aGUgc3RyaW5nIHRvIHNlYXJjaCBpcyBtYWRlIGJ5IHRoZSBzYW1lIHJlcGVhdGVkIGxldHRlcixcbiAgICAgIC8vIGdvIHRvIHRoZSBmaXJzdCBlbGVtZW50LCBpZiBleGlzdHMsIHRoYXQgbWF0Y2hlcyB0aGUgbGV0dGVyLlxuICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpbHRlcmVkT3B0aW9uc1NvcnRlZC5maW5kKFxuICAgICAgICAob3B0aW9uOiBTYmJPcHRpb25FbGVtZW50KSA9PlxuICAgICAgICAgIG9wdGlvbi50ZXh0Q29udGVudD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX3NlYXJjaFN0cmluZ1swXS50b0xvd2VyQ2FzZSgpKSA9PT0gMCxcbiAgICAgICk7XG4gICAgICBpZiAoZmlyc3RNYXRjaCkge1xuICAgICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCB0aGlzLl9maWx0ZXJlZE9wdGlvbnMuaW5kZXhPZihmaXJzdE1hdGNoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIG1hdGNoIGZvdW5kLCBjbGVhciB0aGUgdGltZW91dCBhbmQgdGhlIHNlYXJjaCB0ZXJtLlxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NlYXJjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0QnlLZXlib2FyZCgpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQgPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICBhY3RpdmVPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24oIWFjdGl2ZU9wdGlvbi5zZWxlY3RlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5leHRJbmRleCA9XG4gICAgICBpbmRleCA/PyBnZXROZXh0RWxlbWVudEluZGV4KGV2ZW50LCB0aGlzLl9hY3RpdmVJdGVtSW5kZXgsIHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpO1xuICAgIGNvbnN0IG5leHRPcHRpb24gPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbbmV4dEluZGV4XTtcbiAgICBjb25zdCBhY3RpdmVPcHRpb24gPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIHRoaXMuX3NldEFjdGl2ZUVsZW1lbnQobmV4dE9wdGlvbiwgYWN0aXZlT3B0aW9uKTtcblxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRFbGVtZW50KG5leHRPcHRpb24sIGFjdGl2ZU9wdGlvbik7XG4gICAgfSBlbHNlIGlmIChldmVudD8uc2hpZnRLZXkpIHtcbiAgICAgIG5leHRPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24oIW5leHRPcHRpb24uc2VsZWN0ZWQpO1xuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSBuZXh0SW5kZXg7XG4gIH1cblxuICBwcml2YXRlIF9zZXRBY3RpdmVFbGVtZW50KFxuICAgIG5leHRBY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQsXG4gICAgbGFzdEFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uRWxlbWVudCB8IG51bGwgPSBudWxsLFxuICAgIHNldEFjdGl2ZURlc2NlbmRhbnQgPSB0cnVlLFxuICApOiB2b2lkIHtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLnNldEFjdGl2ZSh0cnVlKTtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JyB9KTtcblxuICAgIGlmIChzZXRBY3RpdmVEZXNjZW5kYW50KSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIG5leHRBY3RpdmVPcHRpb24uaWQpO1xuICAgIH1cblxuICAgIC8vIFJlc2V0IHRoZSBwcmV2aW91c1xuICAgIGlmIChsYXN0QWN0aXZlT3B0aW9uICYmIGxhc3RBY3RpdmVPcHRpb24gIT09IG5leHRBY3RpdmVPcHRpb24pIHtcbiAgICAgIGxhc3RBY3RpdmVPcHRpb24uc2V0QWN0aXZlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRTZWxlY3RlZEVsZW1lbnQoXG4gICAgbmV4dEFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uRWxlbWVudCxcbiAgICBsYXN0QWN0aXZlT3B0aW9uOiBTYmJPcHRpb25FbGVtZW50LFxuICApOiB2b2lkIHtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLnNldFNlbGVjdGVkVmlhVXNlckludGVyYWN0aW9uKHRydWUpO1xuXG4gICAgaWYgKGxhc3RBY3RpdmVPcHRpb24gJiYgbGFzdEFjdGl2ZU9wdGlvbiAhPT0gbmV4dEFjdGl2ZU9wdGlvbikge1xuICAgICAgbGFzdEFjdGl2ZU9wdGlvbi5zZXRTZWxlY3RlZFZpYVVzZXJJbnRlcmFjdGlvbihmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVzZXRBY3RpdmVFbGVtZW50KCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIGlmIChhY3RpdmVFbGVtZW50KSB7XG4gICAgICBhY3RpdmVFbGVtZW50LnNldEFjdGl2ZShmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcG9pbnRlcmRvd24gZXZlbnQgdGFyZ2V0IGlzIHRyaWdnZXJlZCBvbiB0aGUgbWVudS5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ID0gaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCk7XG4gIH07XG5cbiAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGljay5cbiAgcHJpdmF0ZSBfY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ICYmICFpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9zZXRWYWx1ZUZyb21TZWxlY3RlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuX2dldFNlbGVjdGVkKCk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RlZCkpIHtcbiAgICAgIGlmIChzZWxlY3RlZCAmJiBzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBzZWxlY3RlZCkge1xuICAgICAgICAgIHZhbHVlLnB1c2gob3B0aW9uLnZhbHVlISk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5maW5kSW5kZXgoKG9wdGlvbikgPT4gb3B0aW9uID09PSBzZWxlY3RlZCk7XG4gICAgICB0aGlzLnZhbHVlID0gc2VsZWN0ZWQudmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U2VsZWN0ZWQoKTogU2JiT3B0aW9uRWxlbWVudCB8IFNiYk9wdGlvbkVsZW1lbnRbXSB8IG51bGwge1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyZWRPcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24uc2VsZWN0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyZWRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKSA/PyBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RvZ2dsZU9wZW5pbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uZm9jdXMoKTtcblxuICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgY2FzZSAnb3BlbmVkJzoge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY2xvc2VkJzoge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zcHJlYWREZWZlcnJlZERpc3BsYXlWYWx1ZShcbiAgICBwbGFjZWhvbGRlcjogVGVtcGxhdGVSZXN1bHQsXG4gICk6IChUZW1wbGF0ZVJlc3VsdCB8IFByb21pc2U8VGVtcGxhdGVSZXN1bHQ+KVtdIHtcbiAgICByZXR1cm4gW3RoaXMuX2RlZmVycmVkRGlzcGxheVZhbHVlKHBsYWNlaG9sZGVyKSwgcGxhY2Vob2xkZXJdO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZGVmZXJyZWREaXNwbGF5VmFsdWUocGxhY2Vob2xkZXI6IFRlbXBsYXRlUmVzdWx0KTogUHJvbWlzZTxUZW1wbGF0ZVJlc3VsdD4ge1xuICAgIGlmICh0aGlzLmh5ZHJhdGlvblJlcXVpcmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLmh5ZHJhdGlvbkNvbXBsZXRlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheVZhbHVlID8gaHRtbGAke3RoaXMuX2Rpc3BsYXlWYWx1ZX1gIDogcGxhY2Vob2xkZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDwhLS0gVGhpcyBlbGVtZW50IGlzIHZpc3VhbGx5IGhpZGRlbiBhbmQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgbGlnaHQgRE9NIHRvIGFsbG93IHNjcmVlblxuICAgICAgcmVhZGVycyB0byB3b3JrIHByb3Blcmx5IC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIlxuICAgICAgICB0YWJpbmRleD0ke3RoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWQgPyBub3RoaW5nIDogJzAnfVxuICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkLnRvU3RyaW5nKCl9XG4gICAgICAgIGFyaWEtY29udHJvbHM9JHt0aGlzLl9vdmVybGF5SWR9XG4gICAgICAgIGFyaWEtb3ducz0ke3RoaXMuX292ZXJsYXlJZH1cbiAgICAgICAgQGtleWRvd249JHt0aGlzLl9vbktleURvd259XG4gICAgICAgIEBjbGljaz0ke3RoaXMuX3RvZ2dsZU9wZW5pbmd9XG4gICAgICAgICR7cmVmKChyZWYpID0+ICh0aGlzLl90cmlnZ2VyRWxlbWVudCA9IHJlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgPlxuICAgICAgICAke3VudGlsKC4uLnRoaXMuX3NwcmVhZERlZmVycmVkRGlzcGxheVZhbHVlKGh0bWxgPHNwYW4+JHt0aGlzLnBsYWNlaG9sZGVyfTwvc3Bhbj5gKSl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBWaXN1YWxseSBkaXNwbGF5IHRoZSB2YWx1ZSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X190cmlnZ2VyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICR7dW50aWwoXG4gICAgICAgICAgLi4udGhpcy5fc3ByZWFkRGVmZXJyZWREaXNwbGF5VmFsdWUoXG4gICAgICAgICAgICBodG1sYDxzcGFuIGNsYXNzPVwic2JiLXNlbGVjdF9fdHJpZ2dlci0tcGxhY2Vob2xkZXJcIj4ke3RoaXMucGxhY2Vob2xkZXJ9PC9zcGFuPmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fZ2FwLWZpeFwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX2NvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fZ2FwLWZpeFwiPiR7b3ZlcmxheUdhcEZpeENvcm5lcnMoKX08L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIEBhbmltYXRpb25lbmQ9JHt0aGlzLl9vbkFuaW1hdGlvbkVuZH1cbiAgICAgICAgICBjbGFzcz1cInNiYi1zZWxlY3RfX3BhbmVsXCJcbiAgICAgICAgICAke3JlZigoZGlhbG9nUmVmKSA9PiAodGhpcy5fb3ZlcmxheSA9IGRpYWxvZ1JlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX3dyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgaWQ9JHshYXJpYVJvbGVPbkhvc3QgPyB0aGlzLl9vdmVybGF5SWQgOiBub3RoaW5nfVxuICAgICAgICAgICAgICBjbGFzcz1cInNiYi1zZWxlY3RfX29wdGlvbnNcIlxuICAgICAgICAgICAgICByb2xlPSR7IWFyaWFSb2xlT25Ib3N0ID8gJ2xpc3Rib3gnIDogbm90aGluZ31cbiAgICAgICAgICAgICAgP2FyaWEtbXVsdGlzZWxlY3RhYmxlPSR7dGhpcy5tdWx0aXBsZX1cbiAgICAgICAgICAgICAgJHtyZWYoKGNvbnRhaW5lclJlZikgPT4gKHRoaXMuX29wdGlvbkNvbnRhaW5lciA9IGNvbnRhaW5lclJlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuX3NldFZhbHVlRnJvbVNlbGVjdGVkfT48L3Nsb3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItc2VsZWN0JzogU2JiU2VsZWN0RWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlNiYlNlbGVjdEVsZW1lbnQiLCJfYSIsInN0YXRlIiwicmVmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -36,12 +36,12 @@ export declare class SbbSelectionExpansionPanelElement extends SbbSelectionExpan
36
36
  /** Emits whenever the content section is closed. */
37
37
  private _didClose;
38
38
  private _language;
39
- private _abort;
40
39
  private _initialized;
41
40
  private _sizeAttributeObserver;
42
41
  /** Whether it has an expandable content */
43
42
  private get _hasContent();
44
43
  private get _group();
44
+ constructor();
45
45
  connectedCallback(): void;
46
46
  disconnectedCallback(): void;
47
47
  protected willUpdate(changedProperties: PropertyValues<this>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"selection-expansion-panel.d.ts","sourceRoot":"","sources":["../../../../src/elements/selection-expansion-panel/selection-expansion-panel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGnB,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,KAAK,CAAC;AAeb,OAAO,eAAe,CAAC;;AAEvB;;;;;;;;;GASG;AACH,qBAGM,iCAAkC,SAAQ,sCAA6B;IAE3E,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,gBAAuB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK1C;IAEX,yCAAyC;IACzC,SAA4B,KAAK,EAAE,OAAO,GAAG,MAAM,CAAW;IAE9D,qDAAqD;IACrD,SAEgB,SAAS,EAAE,OAAO,CAAS;IAE3C,iDAAiD;IACjD,SAEgB,UAAU,EAAE,OAAO,CAAS;IAE5C,wCAAwC;IAExC,OAAO,KAAK,MAAM,QAEjB;IACD,OAAO,KAAK,MAAM,GAEjB;IAED,8CAA8C;IAC9C,OAAO,KAAK,QAAQ,QAEnB;IACD,OAAO,KAAK,QAAQ,GAEnB;IAED,+CAA+C;IAC/C,OAAO,KAAK,SAAS,QAEpB;IAED,wEAAwE;IACxE,OAAO,CAAC,SAAS,CAIf;IAEF,oDAAoD;IACpD,OAAO,CAAC,QAAQ,CAId;IAEF,wEAAwE;IACxE,OAAO,CAAC,UAAU,CAIhB;IAEF,oDAAoD;IACpD,OAAO,CAAC,SAAS,CAIf;IAEF,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,sBAAsB,CAIrB;IAET,2CAA2C;IAC3C,OAAO,KAAK,WAAW,GAGtB;IAED,OAAO,KAAK,MAAM,GAIjB;IAEe,iBAAiB,IAAI,IAAI;IAUzB,oBAAoB,IAAI,IAAI;cAKzB,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAQzD,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAM9E,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,KAAK;IAeb,OAAO,CAAC,MAAM;IAed,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,cAAc;IAWtB;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,eAAe;YAQT,oBAAoB;cAoBf,MAAM,IAAI,cAAc;CAmB5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,+BAA+B,EAAE,iCAAiC,CAAC;KACpE;CACF"}
1
+ {"version":3,"file":"selection-expansion-panel.d.ts","sourceRoot":"","sources":["../../../../src/elements/selection-expansion-panel/selection-expansion-panel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGnB,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,KAAK,CAAC;AAeb,OAAO,eAAe,CAAC;;AAEvB;;;;;;;;;GASG;AACH,qBAGM,iCAAkC,SAAQ,sCAA6B;IAE3E,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,gBAAuB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK1C;IAEX,yCAAyC;IACzC,SAA4B,KAAK,EAAE,OAAO,GAAG,MAAM,CAAW;IAE9D,qDAAqD;IACrD,SAEgB,SAAS,EAAE,OAAO,CAAS;IAE3C,iDAAiD;IACjD,SAEgB,UAAU,EAAE,OAAO,CAAS;IAE5C,wCAAwC;IAExC,OAAO,KAAK,MAAM,QAEjB;IACD,OAAO,KAAK,MAAM,GAEjB;IAED,8CAA8C;IAC9C,OAAO,KAAK,QAAQ,QAEnB;IACD,OAAO,KAAK,QAAQ,GAEnB;IAED,+CAA+C;IAC/C,OAAO,KAAK,SAAS,QAEpB;IAED,wEAAwE;IACxE,OAAO,CAAC,SAAS,CAIf;IAEF,oDAAoD;IACpD,OAAO,CAAC,QAAQ,CAId;IAEF,wEAAwE;IACxE,OAAO,CAAC,UAAU,CAIhB;IAEF,oDAAoD;IACpD,OAAO,CAAC,SAAS,CAIf;IAEF,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,sBAAsB,CAIrB;IAET,2CAA2C;IAC3C,OAAO,KAAK,WAAW,GAGtB;IAED,OAAO,KAAK,MAAM,GAIjB;;IAOe,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;cAKzB,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAQzD,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAM9E,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,KAAK;IAeb,OAAO,CAAC,MAAM;IAed,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,cAAc;IAWtB;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,eAAe;YAQT,oBAAoB;cAoBf,MAAM,IAAI,cAAc;CAmB5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,+BAA+B,EAAE,iCAAiC,CAAC;KACpE;CACF"}