@sbb-esta/lyne-elements 1.12.1 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/autocomplete-grid/autocomplete-grid-button.js +1 -1
  2. package/button/common.js +1 -1
  3. package/button/mini-button.js +5 -5
  4. package/core/mixins/form-associated-checkbox-mixin.d.ts +1 -0
  5. package/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
  6. package/core/mixins/form-associated-mixin.d.ts +6 -6
  7. package/core/mixins/form-associated-mixin.d.ts.map +1 -1
  8. package/core/mixins/required-mixin.d.ts +1 -1
  9. package/core/mixins/required-mixin.d.ts.map +1 -1
  10. package/core/mixins.js +2 -6
  11. package/core/styles/mixins/buttons.scss +1 -1
  12. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables.scss +4 -0
  13. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables_css--mixin.scss +5 -1
  14. package/core.css +5 -1
  15. package/custom-elements.json +526 -267
  16. package/datepicker/datepicker-next-day.js +1 -1
  17. package/datepicker/datepicker-previous-day.js +1 -1
  18. package/development/autocomplete-grid/autocomplete-grid-button.js +1 -1
  19. package/development/button/common.js +1 -1
  20. package/development/button/mini-button.js +1 -1
  21. package/development/core/mixins/form-associated-checkbox-mixin.d.ts +1 -0
  22. package/development/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
  23. package/development/core/mixins/form-associated-mixin.d.ts +6 -6
  24. package/development/core/mixins/form-associated-mixin.d.ts.map +1 -1
  25. package/development/core/mixins/required-mixin.d.ts +1 -1
  26. package/development/core/mixins/required-mixin.d.ts.map +1 -1
  27. package/development/core/mixins.js +3 -6
  28. package/development/datepicker/datepicker-next-day.js +1 -1
  29. package/development/datepicker/datepicker-previous-day.js +1 -1
  30. package/development/file-selector/file-selector.d.ts +18 -8
  31. package/development/file-selector/file-selector.d.ts.map +1 -1
  32. package/development/file-selector.js +72 -36
  33. package/development/form-field/form-field-clear.js +1 -1
  34. package/development/header/common.js +52 -5
  35. package/development/image.js +1 -1
  36. package/development/loading-indicator.js +2 -6
  37. package/development/paginator/paginator.d.ts +1 -1
  38. package/development/paginator/paginator.d.ts.map +1 -1
  39. package/development/paginator.js +36 -14
  40. package/development/popover/popover-trigger.js +1 -1
  41. package/development/select/select.d.ts +12 -5
  42. package/development/select/select.d.ts.map +1 -1
  43. package/development/select.js +50 -17
  44. package/development/slider/slider.d.ts +2 -1
  45. package/development/slider/slider.d.ts.map +1 -1
  46. package/development/slider.js +4 -1
  47. package/file-selector/file-selector.d.ts +18 -8
  48. package/file-selector/file-selector.d.ts.map +1 -1
  49. package/file-selector.js +91 -67
  50. package/form-field/form-field-clear.js +1 -1
  51. package/header/common.js +11 -11
  52. package/loading-indicator.js +5 -5
  53. package/package.json +3 -3
  54. package/paginator/paginator.d.ts +1 -1
  55. package/paginator/paginator.d.ts.map +1 -1
  56. package/paginator.js +57 -55
  57. package/popover/popover-trigger.js +1 -1
  58. package/select/select.d.ts +12 -5
  59. package/select/select.d.ts.map +1 -1
  60. package/select.js +111 -83
  61. package/slider/slider.d.ts +2 -1
  62. package/slider/slider.d.ts.map +1 -1
  63. package/slider.js +3 -0
  64. package/standard-theme.css +5 -1
  65. package/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts +0 -2
  66. package/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts.map +0 -1
  67. package/button/mini-button-group/index.d.ts +0 -2
  68. package/button/mini-button-group/index.d.ts.map +0 -1
  69. package/development/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts +0 -2
  70. package/development/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts.map +0 -1
  71. package/development/button/mini-button-group/index.d.ts +0 -2
  72. package/development/button/mini-button-group/index.d.ts.map +0 -1
  73. package/development/flip-card/flip-card/index.d.ts +0 -2
  74. package/development/flip-card/flip-card/index.d.ts.map +0 -1
  75. package/development/flip-card/flip-card-details/index.d.ts +0 -2
  76. package/development/flip-card/flip-card-details/index.d.ts.map +0 -1
  77. package/development/flip-card/flip-card-summary/index.d.ts +0 -2
  78. package/development/flip-card/flip-card-summary/index.d.ts.map +0 -1
  79. package/development/link-list/link-list-anchor/index.d.ts +0 -2
  80. package/development/link-list/link-list-anchor/index.d.ts.map +0 -1
  81. package/development/paginator/index.d.ts +0 -2
  82. package/development/paginator/index.d.ts.map +0 -1
  83. package/development/radio-button/radio-button-panel/index.d.ts +0 -2
  84. package/development/radio-button/radio-button-panel/index.d.ts.map +0 -1
  85. package/development/tabs/tab/index.d.ts +0 -2
  86. package/development/tabs/tab/index.d.ts.map +0 -1
  87. package/flip-card/flip-card/index.d.ts +0 -2
  88. package/flip-card/flip-card/index.d.ts.map +0 -1
  89. package/flip-card/flip-card-details/index.d.ts +0 -2
  90. package/flip-card/flip-card-details/index.d.ts.map +0 -1
  91. package/flip-card/flip-card-summary/index.d.ts +0 -2
  92. package/flip-card/flip-card-summary/index.d.ts.map +0 -1
  93. package/link-list/link-list-anchor/index.d.ts +0 -2
  94. package/link-list/link-list-anchor/index.d.ts.map +0 -1
  95. package/paginator/index.d.ts +0 -2
  96. package/paginator/index.d.ts.map +0 -1
  97. package/radio-button/radio-button-panel/index.d.ts +0 -2
  98. package/radio-button/radio-button-panel/index.d.ts.map +0 -1
  99. package/tabs/tab/index.d.ts +0 -2
  100. package/tabs/tab/index.d.ts.map +0 -1
@@ -9,7 +9,7 @@ import { SbbConnectedAbortController } from "./core/controllers.js";
9
9
  import { hostAttributes } from "./core/decorators.js";
10
10
  import { isNextjs, isSafari } from "./core/dom.js";
11
11
  import { EventEmitter } from "./core/eventing.js";
12
- import { SbbUpdateSchedulerMixin, SbbDisabledMixin, SbbNegativeMixin, SbbHydrationMixin } from "./core/mixins.js";
12
+ import { SbbUpdateSchedulerMixin, SbbDisabledMixin, SbbNegativeMixin, SbbHydrationMixin, SbbRequiredMixin, SbbFormAssociatedMixin } from "./core/mixins.js";
13
13
  import { isEventOnElement, setOverlayPosition, overlayGapFixCorners } from "./core/overlay.js";
14
14
  const style = css`*,
15
15
  ::before,
@@ -306,12 +306,21 @@ var __decorateClass = (decorators, target, key, kind) => {
306
306
  const ariaRoleOnHost = isSafari;
307
307
  let nextId = 0;
308
308
  let SbbSelectElement = class extends SbbUpdateSchedulerMixin(
309
- SbbDisabledMixin(SbbNegativeMixin(SbbHydrationMixin(SbbOpenCloseBaseElement)))
309
+ SbbDisabledMixin(
310
+ SbbNegativeMixin(
311
+ SbbHydrationMixin(
312
+ SbbRequiredMixin(
313
+ SbbFormAssociatedMixin(
314
+ SbbOpenCloseBaseElement
315
+ )
316
+ )
317
+ )
318
+ )
319
+ )
310
320
  ) {
311
321
  constructor() {
312
322
  super();
313
323
  this.multiple = false;
314
- this.required = false;
315
324
  this.readonly = false;
316
325
  this._displayValue = null;
317
326
  this._didChange = new EventEmitter(this, SbbSelectElement.events.didChange);
@@ -377,7 +386,7 @@ let SbbSelectElement = class extends SbbUpdateSchedulerMixin(
377
386
  }
378
387
  /** Opens the selection panel. */
379
388
  open() {
380
- if (this.state !== "closed" || !this._overlay || this._options.length === 0) {
389
+ if (this.state !== "closed" || !this._overlay || this._options.length === 0 || this.disabled || this.formDisabled) {
381
390
  return;
382
391
  }
383
392
  if (!this.willOpen.emit()) {
@@ -495,7 +504,7 @@ let SbbSelectElement = class extends SbbUpdateSchedulerMixin(
495
504
  }
496
505
  willUpdate(changedProperties) {
497
506
  super.willUpdate(changedProperties);
498
- if (changedProperties.has("value")) {
507
+ if (changedProperties.has("value") && this._didLoad) {
499
508
  this._onValueChanged(this.value);
500
509
  }
501
510
  if (changedProperties.has("negative") || changedProperties.has("multiple")) {
@@ -508,6 +517,36 @@ let SbbSelectElement = class extends SbbUpdateSchedulerMixin(
508
517
  this.prepend(this._triggerElement);
509
518
  (_a = this._openPanelEventsController) == null ? void 0 : _a.abort();
510
519
  }
520
+ updateFormValue() {
521
+ if (this.multiple && this.value instanceof Array) {
522
+ const data = new FormData();
523
+ this.value.forEach((el) => data.append(this.name, el));
524
+ this.internals.setFormValue(data);
525
+ } else {
526
+ this.internals.setFormValue(this.value);
527
+ }
528
+ }
529
+ /**
530
+ * The reset value is the attribute value (the setup value), null otherwise.
531
+ * @internal
532
+ */
533
+ formResetCallback() {
534
+ this.value = this.hasAttribute("value") ? this.getAttribute("value") : null;
535
+ }
536
+ /**
537
+ * @internal
538
+ */
539
+ formStateRestoreCallback(state2, _reason) {
540
+ if (!state2) {
541
+ this.value = null;
542
+ return;
543
+ }
544
+ if (this.multiple) {
545
+ this.value = state2.map((entries) => entries[1]);
546
+ } else {
547
+ this.value = state2;
548
+ }
549
+ }
511
550
  _syncProperties() {
512
551
  var _a, _b;
513
552
  (_a = this.querySelectorAll) == null ? void 0 : _a.call(this, "sbb-divider").forEach((element) => element.negative = this.negative);
@@ -625,7 +664,7 @@ let SbbSelectElement = class extends SbbUpdateSchedulerMixin(
625
664
  });
626
665
  }
627
666
  _onKeyDown(event) {
628
- if (this.disabled || this.readonly) {
667
+ if (this.readonly) {
629
668
  return;
630
669
  }
631
670
  if (this.state === "opened") {
@@ -650,7 +689,7 @@ let SbbSelectElement = class extends SbbUpdateSchedulerMixin(
650
689
  }
651
690
  }
652
691
  _openedPanelKeyboardInteraction(event) {
653
- if (this.disabled || this.readonly || this.state !== "opened") {
692
+ if (this.readonly || this.state !== "opened") {
654
693
  return;
655
694
  }
656
695
  if (this._checkForLetterSelection(event)) {
@@ -786,7 +825,7 @@ let SbbSelectElement = class extends SbbUpdateSchedulerMixin(
786
825
  }
787
826
  _toggleOpening() {
788
827
  var _a;
789
- if (this.disabled || this.readonly) {
828
+ if (this.disabled || this.formDisabled || this.readonly) {
790
829
  return;
791
830
  }
792
831
  (_a = this._triggerElement) == null ? void 0 : _a.focus();
@@ -816,7 +855,7 @@ let SbbSelectElement = class extends SbbUpdateSchedulerMixin(
816
855
  readers to work properly -->
817
856
  <div
818
857
  class="sbb-screen-reader-only"
819
- tabindex=${this.disabled ? nothing : "0"}
858
+ tabindex=${this.disabled || this.formDisabled ? nothing : "0"}
820
859
  role="combobox"
821
860
  aria-haspopup="listbox"
822
861
  aria-expanded="false"
@@ -874,18 +913,12 @@ SbbSelectElement.events = {
874
913
  willClose: "willClose",
875
914
  didClose: "didClose"
876
915
  };
877
- __decorateClass([
878
- property()
879
- ], SbbSelectElement.prototype, "value", 2);
880
916
  __decorateClass([
881
917
  property()
882
918
  ], SbbSelectElement.prototype, "placeholder", 2);
883
- __decorateClass([
884
- property({ type: Boolean, reflect: true })
885
- ], SbbSelectElement.prototype, "multiple", 2);
886
919
  __decorateClass([
887
920
  property({ reflect: true, type: Boolean })
888
- ], SbbSelectElement.prototype, "required", 2);
921
+ ], SbbSelectElement.prototype, "multiple", 2);
889
922
  __decorateClass([
890
923
  property({ type: Boolean })
891
924
  ], SbbSelectElement.prototype, "readonly", 2);
@@ -901,4 +934,4 @@ SbbSelectElement = __decorateClass([
901
934
  export {
902
935
  SbbSelectElement
903
936
  };
904
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2VsZWN0L3NlbGVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNdXRhdGlvbkNvbnRyb2xsZXIgfSBmcm9tICdAbGl0LWxhYnMvb2JzZXJ2ZXJzL211dGF0aW9uLWNvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgUHJvcGVydHlWYWx1ZXMsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGh0bWwsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcbmltcG9ydCB7IHVudGlsIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvdW50aWwuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4IH0gZnJvbSAnLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vY29yZS9iYXNlLWVsZW1lbnRzLmpzJztcbmltcG9ydCB7IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlciB9IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgaG9zdEF0dHJpYnV0ZXMgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaXNOZXh0anMsIGlzU2FmYXJpIH0gZnJvbSAnLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQge1xuICBTYmJEaXNhYmxlZE1peGluLFxuICBTYmJIeWRyYXRpb25NaXhpbixcbiAgU2JiTmVnYXRpdmVNaXhpbixcbiAgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4sXG59IGZyb20gJy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7IGlzRXZlbnRPbkVsZW1lbnQsIG92ZXJsYXlHYXBGaXhDb3JuZXJzLCBzZXRPdmVybGF5UG9zaXRpb24gfSBmcm9tICcuLi9jb3JlL292ZXJsYXkuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPcHRHcm91cEVsZW1lbnQsIFNiYk9wdGlvbkVsZW1lbnQgfSBmcm9tICcuLi9vcHRpb24uanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zZWxlY3Quc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBPbiBTYWZhcmksIHRoZSBhcmlhIHJvbGUgJ2xpc3Rib3gnIG11c3QgYmUgb24gdGhlIGhvc3QgZWxlbWVudCwgb3IgZWxzZSBWb2ljZU92ZXIgd29uJ3Qgd29yayBhdCBhbGwuXG4gKiBPbiB0aGUgb3RoZXIgaGFuZCwgSkFXUyBhbmQgTlZEQSBuZWVkIHRoZSByb2xlIHRvIGJlIGFuIFwiaW1tZWRpYXRlIHBhcmVudFwiIHRvIHRoZSBvcHRpb25zLCBvciBlbHNlIG9wdGdyb3VwcyB3b24ndCB3b3JrLlxuICovXG5jb25zdCBhcmlhUm9sZU9uSG9zdCA9IGlzU2FmYXJpO1xuXG5sZXQgbmV4dElkID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RDaGFuZ2Uge1xuICB0eXBlOiAndmFsdWUnO1xuICB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYSBwYW5lbCB3aXRoIHNlbGVjdGFibGUgb3B0aW9ucy5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBvcHRpb25zLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkQ2hhbmdlIC0gRGVwcmVjYXRlZC4gdXNlZCBmb3IgUmVhY3QuIFdpbGwgcHJvYmFibHkgYmUgcmVtb3ZlZCBvbmNlIFJlYWN0IDE5IGlzIGF2YWlsYWJsZS5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGNoYW5nZSAtIE5vdGlmaWVzIHRoYXQgdGhlIGNvbXBvbmVudCdzIHZhbHVlIGhhcyBjaGFuZ2VkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gaW5wdXQgLSBOb3RpZmllcyB0aGF0IGFuIG9wdGlvbiB2YWx1ZSBoYXMgYmVlbiBzZWxlY3RlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IHdpbGxPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItc2VsZWN0YCBzdGFydHMgdGhlIG9wZW5pbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXNlbGVjdGAgaXMgb3BlbmVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItc2VsZWN0YCBiZWdpbnMgdGhlIGNsb3NpbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1zZWxlY3RgIGlzIGNsb3NlZC5cbiAqIEBjc3Nwcm9wIFstLXNiYi1zZWxlY3Qtei1pbmRleD12YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpXSAtIFRvIHNwZWNpZnkgYSBjdXN0b20gc3RhY2sgb3JkZXIsXG4gKiB0aGUgYHotaW5kZXhgIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nIHRoaXMgQ1NTIHZhcmlhYmxlLiBUaGUgZGVmYXVsdCBgei1pbmRleGAgb2YgdGhlXG4gKiBjb21wb25lbnQgaXMgc2V0IHRvIGB2YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpYCB3aXRoIGEgdmFsdWUgb2YgYDEwMDBgLlxuICovXG5AY3VzdG9tRWxlbWVudCgnc2JiLXNlbGVjdCcpXG5AaG9zdEF0dHJpYnV0ZXMoe1xuICByb2xlOiBhcmlhUm9sZU9uSG9zdCA/ICdsaXN0Ym94JyA6IG51bGwsXG59KVxuZXhwb3J0IGNsYXNzIFNiYlNlbGVjdEVsZW1lbnQgZXh0ZW5kcyBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpbihcbiAgU2JiRGlzYWJsZWRNaXhpbihTYmJOZWdhdGl2ZU1peGluKFNiYkh5ZHJhdGlvbk1peGluKFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50KSkpLFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuXG4gIC8vIEZJWE1FIHVzaW5nIC4uLnN1cGVyLmV2ZW50cyByZXF1aXJlczogaHR0cHM6Ly9naXRodWIuY29tL3NiYi1kZXNpZ24tc3lzdGVtcy9seW5lLWNvbXBvbmVudHMvaXNzdWVzLzI2MDBcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBldmVudHMgPSB7XG4gICAgZGlkQ2hhbmdlOiAnZGlkQ2hhbmdlJyxcbiAgICBjaGFuZ2U6ICdjaGFuZ2UnLFxuICAgIGlucHV0OiAnaW5wdXQnLFxuICAgIHN0YXRlQ2hhbmdlOiAnc3RhdGVDaGFuZ2UnLFxuICAgIHdpbGxPcGVuOiAnd2lsbE9wZW4nLFxuICAgIGRpZE9wZW46ICdkaWRPcGVuJyxcbiAgICB3aWxsQ2xvc2U6ICd3aWxsQ2xvc2UnLFxuICAgIGRpZENsb3NlOiAnZGlkQ2xvc2UnLFxuICB9IGFzIGNvbnN0O1xuXG4gIC8qKiBUaGUgdmFsdWUgb2YgdGhlIHNlbGVjdCBjb21wb25lbnQuIElmIGBtdWx0aXBsZWAgaXMgdHJ1ZSwgaXQncyBhbiBhcnJheS4gKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIHZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqIFRoZSBwbGFjZWhvbGRlciB1c2VkIGlmIG5vIHZhbHVlIGhhcyBiZWVuIHNlbGVjdGVkLiAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHNlbGVjdCBhbGxvd3MgZm9yIG11bHRpcGxlIHNlbGVjdGlvbi4gKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgbXVsdGlwbGUgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgc2VsZWN0IGlzIHJlcXVpcmVkLiAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3QgaXMgcmVhZG9ubHkuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgLyoqIFRoZSB2YWx1ZSBkaXNwbGF5ZWQgYnkgdGhlIGNvbXBvbmVudC4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBfZGlzcGxheVZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgb25seSB1c2VkIGZvciBSZWFjdC4gV2lsbCBwcm9iYWJseSBiZSByZW1vdmVkIG9uY2UgUmVhY3QgMTkgaXMgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBfZGlkQ2hhbmdlOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYlNlbGVjdEVsZW1lbnQuZXZlbnRzLmRpZENoYW5nZSk7XG5cbiAgLyoqIE5vdGlmaWVzIHRoYXQgdGhlIGNvbXBvbmVudCdzIHZhbHVlIGhhcyBjaGFuZ2VkLiAqL1xuICBwcml2YXRlIF9jaGFuZ2U6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIodGhpcywgU2JiU2VsZWN0RWxlbWVudC5ldmVudHMuY2hhbmdlKTtcblxuICAvKiogTm90aWZpZXMgdGhhdCBhbiBvcHRpb24gdmFsdWUgaGFzIGJlZW4gc2VsZWN0ZWQuICovXG4gIHByaXZhdGUgX2lucHV0OiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYlNlbGVjdEVsZW1lbnQuZXZlbnRzLmlucHV0KTtcblxuICAvKiogQGludGVybmFsICovXG4gIHByaXZhdGUgX3N0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8U2VsZWN0Q2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJTZWxlY3RFbGVtZW50LmV2ZW50cy5zdGF0ZUNoYW5nZSxcbiAgICB7XG4gICAgICBjb21wb3NlZDogZmFsc2UsXG4gICAgfSxcbiAgKTtcblxuICBwcml2YXRlIF9vdmVybGF5ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX29wdGlvbkNvbnRhaW5lciE6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9vcmlnaW5FbGVtZW50ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3RyaWdnZXJFbGVtZW50ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX292ZXJsYXlJZCA9IGBzYmItc2VsZWN0LSR7KytuZXh0SWR9YDtcbiAgcHJpdmF0ZSBfYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gIHByaXZhdGUgX3NlYXJjaFRpbWVvdXQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgcHJpdmF0ZSBfc2VhcmNoU3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2RpZExvYWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNQb2ludGVyRG93bkV2ZW50T25NZW51OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2Fib3J0ID0gbmV3IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlcih0aGlzKTtcblxuICAvKipcbiAgICogVGhlICdjb21ib2JveCcgaW5wdXQgZWxlbWVudFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fdHJpZ2dlckVsZW1lbnQ7XG4gIH1cblxuICAvKiogR2V0cyBhbGwgdGhlIFNiYk9wdGlvbkVsZW1lbnQgcHJvamVjdGVkIGluIHRoZSBzZWxlY3QuICovXG4gIHByaXZhdGUgZ2V0IF9vcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1vcHRpb24nKSA/PyBbXSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfZmlsdGVyZWRPcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuZmlsdGVyKFxuICAgICAgKG9wdDogU2JiT3B0aW9uRWxlbWVudCkgPT4gIW9wdC5kaXNhYmxlZCAmJiAhb3B0Lmhhc0F0dHJpYnV0ZSgnZGF0YS1ncm91cC1kaXNhYmxlZCcpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIG5ldyBNdXRhdGlvbkNvbnRyb2xsZXIodGhpcywge1xuICAgICAgY29uZmlnOiB7IGF0dHJpYnV0ZUZpbHRlcjogWydhcmlhLWxhYmVsbGVkYnknXSB9LFxuICAgICAgY2FsbGJhY2s6IChtdXRhdGlvbnNMaXN0OiBNdXRhdGlvblJlY29yZFtdKSA9PiB0aGlzLl9vblNlbGVjdEF0dHJpYnV0ZXNDaGFuZ2UobXV0YXRpb25zTGlzdCksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVE9ETzogQWNjZXNzaWJpbGl0eSBmaXggcmVxdWlyZWQgdG8gY29ycmVjdGx5IHJlYWQgdGhlIGxhYmVsO1xuICAgKiBjYW4gYmUgcG9zc2libHkgcmVtb3ZlZCBhZnRlciB0aGUgbWVyZ2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL3NiYi1kZXNpZ24tc3lzdGVtcy9seW5lLWNvbXBvbmVudHMvaXNzdWVzLzMwNjJcbiAgICovXG4gIHByaXZhdGUgX29uU2VsZWN0QXR0cmlidXRlc0NoYW5nZShtdXRhdGlvbnNMaXN0OiBNdXRhdGlvblJlY29yZFtdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnNMaXN0KSB7XG4gICAgICBpZiAobXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gJ2FyaWEtbGFiZWxsZWRieScpIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JyxcbiAgICAgICAgICB0aGlzLmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JykhLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBPcGVucyB0aGUgc2VsZWN0aW9uIHBhbmVsLiAqL1xuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCcgfHwgIXRoaXMuX292ZXJsYXkgfHwgdGhpcy5fb3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMud2lsbE9wZW4uZW1pdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmluZyc7XG4gICAgdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCk7XG4gIH1cblxuICAvKiogQ2xvc2VzIHRoZSBzZWxlY3Rpb24gcGFuZWwuICovXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMud2lsbENsb3NlLmVtaXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NpbmcnO1xuICAgIHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSBjdXJyZW50IGRpc3BsYXllZCB2YWx1ZS4gKi9cbiAgcHVibGljIGdldERpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kaXNwbGF5VmFsdWUgPz8gJyc7XG4gIH1cblxuICAvKiogTGlzdGVucyB0byBvcHRpb24gY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfb25PcHRpb25DaGFuZ2VkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBTYmJPcHRpb25FbGVtZW50O1xuICAgIGlmICh0YXJnZXQuc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuX29uT3B0aW9uU2VsZWN0ZWQodGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb25PcHRpb25EZXNlbGVjdGVkKHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25PcHRpb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBTYmJTZWxlY3RFbGVtZW50IHwgU2JiT3B0aW9uRWxlbWVudDtcbiAgICBpZiAodGFyZ2V0LmxvY2FsTmFtZSAhPT0gJ3NiYi1vcHRpb24nIHx8IHRhcmdldC5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZXRzIHRoZSBfZGlzcGxheVZhbHVlIGJ5IGNoZWNraW5nIHRoZSBpbnRlcm5hbCBzYmItb3B0aW9ucyBhbmQgc2V0dGluZyB0aGUgY29ycmVjdCBgc2VsZWN0ZWRgIHZhbHVlIG9uIHRoZW0uICovXG4gIHByaXZhdGUgX29uVmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnM7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkge1xuICAgICAgY29uc3Qgb3B0aW9uRWxlbWVudCA9IG9wdGlvbnMuZmluZCgobykgPT4gKG8udmFsdWUgPz8gby5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpID09PSBuZXdWYWx1ZSk7XG4gICAgICBpZiAob3B0aW9uRWxlbWVudCkge1xuICAgICAgICBvcHRpb25FbGVtZW50LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnNcbiAgICAgICAgLmZpbHRlcigobykgPT4gKG8udmFsdWUgPz8gby5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpICE9PSBuZXdWYWx1ZSlcbiAgICAgICAgLmZvckVhY2goKG8pID0+IChvLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IG9wdGlvbkVsZW1lbnQ/LnRleHRDb250ZW50IHx8IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnNcbiAgICAgICAgLmZpbHRlcigobykgPT4gIW5ld1ZhbHVlLmluY2x1ZGVzKG8udmFsdWUgPz8gby5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpKVxuICAgICAgICAuZm9yRWFjaCgoZSkgPT4gKGUuc2VsZWN0ZWQgPSBmYWxzZSkpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25FbGVtZW50cyA9IG9wdGlvbnMuZmlsdGVyKChvKSA9PlxuICAgICAgICBuZXdWYWx1ZS5pbmNsdWRlcyhvLnZhbHVlID8/IG8uZ2V0QXR0cmlidXRlKCd2YWx1ZScpKSxcbiAgICAgICk7XG4gICAgICBzZWxlY3RlZE9wdGlvbkVsZW1lbnRzLmZvckVhY2goKG8pID0+IChvLnNlbGVjdGVkID0gdHJ1ZSkpO1xuICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gc2VsZWN0ZWRPcHRpb25FbGVtZW50cy5tYXAoKG8pID0+IG8udGV4dENvbnRlbnQpLmpvaW4oJywgJykgfHwgbnVsbDtcbiAgICB9XG4gICAgdGhpcy5fc3RhdGVDaGFuZ2UuZW1pdCh7IHR5cGU6ICd2YWx1ZScsIHZhbHVlOiBuZXdWYWx1ZSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGZvY3VzIGJlaGF2aW9yXG4gICAgdGhpcy5mb2N1cyA9ICgpID0+IHRoaXMuX3RyaWdnZXJFbGVtZW50LmZvY3VzKCk7XG4gICAgdGhpcy5ibHVyID0gKCkgPT4gdGhpcy5fdHJpZ2dlckVsZW1lbnQuYmx1cigpO1xuXG4gICAgLy8gV2FpdCBmb3Igc3NyIGh5ZHJhdGlvblxuICAgIGlmICghaXNOZXh0anMoKSkge1xuICAgICAgdGhpcy5zdGFydFVwZGF0ZSgpO1xuICAgICAgdGhpcy5fc2V0dXBTZWxlY3QoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBlbGVtZW50J3MgZmlyc3QgYXR0cmlidXRlIHdob3NlIHF1YWxpZmllZCBuYW1lIGlzIHF1YWxpZmllZE5hbWUuXG4gICAqXG4gICAqIFtNRE4gUmVmZXJlbmNlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvRWxlbWVudC9yZW1vdmVBdHRyaWJ1dGUpXG4gICAqIEBpbnRlcm5hbCBXZSBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgZHVlIHRvIGEgaHlkcmF0aW9uIGlzc3VlIHdpdGggTmV4dC5qcy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSByZW1vdmVBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gSW4gTmV4dC5qcyB0aGUgaHlkcmF0aW9uIG5lZWRzIHRvIGZpbmlzaCBiZWZvcmUgd2UgY2FuIG1hbmlwdWxhdGUgdGhlIGxpZ2h0IERPTS5cbiAgICAvLyBAbGl0L3JlYWN0IGNhbGxzIHJlbW92ZUF0dHJpYnV0ZSgnZGVmZXItaHlkcmF0aW9uJykgaW4gYSB1c2VMYXlvdXRFZmZlY3QsXG4gICAgLy8gd2hpY2ggaXMgZG9uZSBhZnRlciBoeWRyYXRpb24gaXMgZmluaXNoZWQuIER1ZSB0byB0aGlzIHdlIGludGVyY2VwdCB0aGlzIGNhbGxcbiAgICAvLyBpbiBvdmVycmlkaW5nIHJlbW92ZUF0dHJpYnV0ZSB0byBmaW5pc2ggaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNiYi1zZWxlY3QuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2xpdC9saXQvYmxvYi9tYWluL3BhY2thZ2VzL3JlYWN0L3NyYy9jcmVhdGUtY29tcG9uZW50LnRzI0wyOTMtTDI5NlxuICAgIC8vIFdlIGFsc28gbmVlZCB0byB3YWl0IGZvciB1cGRhdGUgY29tcGxldGUgaW4gb3JkZXIgdG8gYmUgc3VyZSB0aGF0IHRoZSBzaGFkb3cgRE9NIGhhcyBiZWVuIHJlbmRlcmVkLlxuICAgIGlmIChpc05leHRqcygpICYmIHF1YWxpZmllZE5hbWUgPT09ICdkZWZlci1oeWRyYXRpb24nICYmICF0aGlzLl9kaWRMb2FkKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5fc2V0dXBTZWxlY3QoKSk7XG4gICAgfVxuICAgIHN1cGVyLnJlbW92ZUF0dHJpYnV0ZShxdWFsaWZpZWROYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgaWYgKGFyaWFSb2xlT25Ib3N0KSB7XG4gICAgICB0aGlzLmlkIHx8PSB0aGlzLl9vdmVybGF5SWQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmFsID0gdGhpcy5fYWJvcnQuc2lnbmFsO1xuICAgIGNvbnN0IGZvcm1GaWVsZCA9IHRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpID8/IHRoaXMuY2xvc2VzdD8uKCdbZGF0YS1mb3JtLWZpZWxkXScpO1xuXG4gICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IGZvcm1GaWVsZC5oYXNBdHRyaWJ1dGUoJ25lZ2F0aXZlJyk7XG4gICAgfVxuICAgIHRoaXMuX3N5bmNQcm9wZXJ0aWVzKCk7XG5cbiAgICBpZiAodGhpcy5fZGlkTG9hZCkge1xuICAgICAgdGhpcy5fc2V0dXBPcmlnaW4oKTtcbiAgICAgIHRoaXMuX3NldHVwVHJpZ2dlcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5fb25WYWx1ZUNoYW5nZWQodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ29wdGlvblNlbGVjdGlvbkNoYW5nZScsXG4gICAgICAoZTogQ3VzdG9tRXZlbnQ8dm9pZD4pID0+IHRoaXMuX29uT3B0aW9uQ2hhbmdlZChlKSxcbiAgICAgIHsgc2lnbmFsIH0sXG4gICAgKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnY2xpY2snLFxuICAgICAgKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5fb25PcHRpb25DbGljayhlKTtcbiAgICAgICAgdGhpcy5fdG9nZ2xlT3BlbmluZygpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygndmFsdWUnKSkge1xuICAgICAgdGhpcy5fb25WYWx1ZUNoYW5nZWQodGhpcy52YWx1ZSEpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCduZWdhdGl2ZScpIHx8IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbXVsdGlwbGUnKSkge1xuICAgICAgdGhpcy5fc3luY1Byb3BlcnRpZXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnByZXBlbmQodGhpcy5fdHJpZ2dlckVsZW1lbnQpOyAvLyBUYWtlIGJhY2sgdGhlIHRyaWdnZXIgZWxlbWVudCBwcmV2aW91c2x5IG1vdmVkIHRvIHRoZSBsaWdodCBET01cbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyPy5hYm9ydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3luY1Byb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1kaXZpZGVyJykuZm9yRWFjaCgoZWxlbWVudCkgPT4gKGVsZW1lbnQubmVnYXRpdmUgPSB0aGlzLm5lZ2F0aXZlKSk7XG5cbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJPcHRpb25FbGVtZW50IHwgU2JiT3B0R3JvdXBFbGVtZW50PihcbiAgICAgICdzYmItb3B0aW9uLCBzYmItb3B0Z3JvdXAnLFxuICAgICkuZm9yRWFjaCgoZWxlbWVudDogU2JiT3B0aW9uRWxlbWVudCB8IFNiYk9wdEdyb3VwRWxlbWVudCkgPT4ge1xuICAgICAgZWxlbWVudC50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtbmVnYXRpdmUnLCB0aGlzLm5lZ2F0aXZlKTtcbiAgICAgIGVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCdkYXRhLW11bHRpcGxlJywgdGhpcy5tdWx0aXBsZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cFNlbGVjdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXR1cE9yaWdpbigpO1xuICAgIHRoaXMuX3NldHVwVHJpZ2dlcigpO1xuICAgIHRoaXMuX2RpZExvYWQgPSB0cnVlO1xuICAgIHRoaXMuY29tcGxldGVVcGRhdGUoKTtcbiAgfVxuXG4gIC8qKiBTZXRzIHRoZSBvcmlnaW5FbGVtZW50OyBpZiB0aGUgY29tcG9uZW50IGlzIHVzZWQgaW4gYSBzYmItZm9ybS1maWVsZCB1c2VzIGl0LCBvdGhlcndpc2UgdXNlcyB0aGUgcGFyZW50RWxlbWVudC4gKi9cbiAgcHJpdmF0ZSBfc2V0dXBPcmlnaW4oKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUZpZWxkID0gdGhpcy5jbG9zZXN0Py4oJ3NiYi1mb3JtLWZpZWxkJyk7XG4gICAgdGhpcy5fb3JpZ2luRWxlbWVudCA9XG4gICAgICBmb3JtRmllbGQ/LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3I/LignI292ZXJsYXktYW5jaG9yJykgPz8gdGhpcy5wYXJlbnRFbGVtZW50ITtcbiAgICBpZiAodGhpcy5fb3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoXG4gICAgICAgICdkYXRhLW9wdGlvbi1wYW5lbC1vcmlnaW4tYm9yZGVybGVzcycsXG4gICAgICAgICEhZm9ybUZpZWxkPy5oYXNBdHRyaWJ1dGU/LignYm9yZGVybGVzcycpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG8gYXNzZXNzIHNjcmVlbi1yZWFkZXJzIHByb2JsZW1zIGNhdXNlZCBieSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBhcmlhIHBhdHRlcm5zIGFuZCBzaGFkb3cgRE9NLFxuICAgKiB3ZSBhcmUgZm9yY2VkIHRvIG1vdmUgdGhlICdjb21ib2JveCcgdHJpZ2dlciBlbGVtZW50IHRvIHRoZSBsaWdodCBET01cbiAgICovXG4gIHByaXZhdGUgX3NldHVwVHJpZ2dlcigpOiB2b2lkIHtcbiAgICAvLyBNb3ZlIHRoZSB0cmlnZ2VyIGJlZm9yZSB0aGUgc2JiLXNlbGVjdFxuICAgIHRoaXMucGFyZW50RWxlbWVudCEuaW5zZXJ0QmVmb3JlPy4odGhpcy5fdHJpZ2dlckVsZW1lbnQsIHRoaXMpO1xuXG4gICAgLy8gU2V0IHRoZSBpbnZpc2libGUgdHJpZ2dlciBlbGVtZW50IGRpbWVuc2lvbiB0byBtYXRjaCB0aGUgcGFyZW50IChuZWVkZWQgZm9yIHNjcmVlbiByZWFkZXJzKVxuICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKSA/PyB0aGlzO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnN0eWxlLnRvcCA9ICcwcHgnO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2NvbnRhaW5lckVsZW1lbnQub2Zmc2V0SGVpZ2h0fXB4YDtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2NvbnRhaW5lckVsZW1lbnQub2Zmc2V0V2lkdGh9cHhgO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0T3ZlcmxheVBvc2l0aW9uKCk6IHZvaWQge1xuICAgIHNldE92ZXJsYXlQb3NpdGlvbihcbiAgICAgIHRoaXMuX292ZXJsYXksXG4gICAgICB0aGlzLl9vcmlnaW5FbGVtZW50LFxuICAgICAgdGhpcy5fb3B0aW9uQ29udGFpbmVyLFxuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcuc2JiLXNlbGVjdF9fY29udGFpbmVyJykhLFxuICAgICAgdGhpcyxcbiAgICApO1xuICB9XG5cbiAgLy8gSW4gcmFyZSBjYXNlcyBpdCBjYW4gYmUgdGhhdCB0aGUgYW5pbWF0aW9uRW5kIGV2ZW50IGlzIHRyaWdnZXJlZCB0d2ljZS5cbiAgLy8gVG8gYXZvaWQgZW50ZXJpbmcgYSBjb3JydXB0IHN0YXRlLCBleGl0IHdoZW4gc3RhdGUgaXMgbm90IGV4cGVjdGVkLlxuICBwcml2YXRlIF9vbkFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4nICYmIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5fb25PcGVuQW5pbWF0aW9uRW5kKCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnY2xvc2UnICYmIHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJykge1xuICAgICAgdGhpcy5fb25DbG9zZUFuaW1hdGlvbkVuZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29uT3BlbkFuaW1hdGlvbkVuZCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5lZCc7XG4gICAgdGhpcy5fYXR0YWNoT3BlblBhbmVsRXZlbnRzKCk7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTtcblxuICAgIHRoaXMuZGlkT3Blbi5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIF9vbkNsb3NlQW5pbWF0aW9uRW5kKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2VkJztcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICB0aGlzLl9yZXNldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICB0aGlzLl9vcHRpb25Db250YWluZXIuc2Nyb2xsVG9wID0gMDtcbiAgICB0aGlzLmRpZENsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIC8qKiBXaGVuIGFuIG9wdGlvbiBpcyBzZWxlY3RlZCwgdXBkYXRlcyB0aGUgZGlzcGxheVZhbHVlOyBpdCBhbHNvIGNsb3NlcyB0aGUgc2VsZWN0IGlmIG5vdCBgbXVsdGlwbGVgLiAqL1xuICBwcml2YXRlIF9vbk9wdGlvblNlbGVjdGVkKG9wdGlvblNlbGVjdGlvbkNoYW5nZTogU2JiT3B0aW9uRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5fZmlsdGVyZWRPcHRpb25zXG4gICAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLmlkICE9PSBvcHRpb25TZWxlY3Rpb25DaGFuZ2UuaWQpXG4gICAgICAgIC5mb3JFYWNoKChvcHRpb24pID0+IChvcHRpb24uc2VsZWN0ZWQgPSBmYWxzZSkpO1xuICAgICAgdGhpcy52YWx1ZSA9IG9wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBbb3B0aW9uU2VsZWN0aW9uQ2hhbmdlLnZhbHVlIV07XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLnZhbHVlLmluY2x1ZGVzKG9wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSEpKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgb3B0aW9uU2VsZWN0aW9uQ2hhbmdlLnZhbHVlIV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5faW5wdXQuZW1pdCgpO1xuICAgIHRoaXMuX2NoYW5nZS5lbWl0KCk7XG4gICAgdGhpcy5fZGlkQ2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIC8qKiBXaGVuIGFuIG9wdGlvbiBpcyB1bnNlbGVjdGVkIGluIGBtdWx0aXBsZWAsIHJlbW92ZXMgaXQgZnJvbSB2YWx1ZSBhbmQgdXBkYXRlcyBkaXNwbGF5VmFsdWUuICovXG4gIHByaXZhdGUgX29uT3B0aW9uRGVzZWxlY3RlZChvcHRpb25TZWxlY3Rpb25DaGFuZ2U6IFNiYk9wdGlvbkVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy52YWx1ZSA9ICh0aGlzLnZhbHVlIGFzIHN0cmluZ1tdKS5maWx0ZXIoXG4gICAgICAgIChlbDogc3RyaW5nKSA9PiBlbCAhPT0gb3B0aW9uU2VsZWN0aW9uQ2hhbmdlLnZhbHVlLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5faW5wdXQuZW1pdCgpO1xuICAgICAgdGhpcy5fY2hhbmdlLmVtaXQoKTtcbiAgICAgIHRoaXMuX2RpZENoYW5nZS5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXR0YWNoT3BlblBhbmVsRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICAvLyBSZWNhbGN1bGF0ZSB0aGUgb3ZlcmxheSBwb3NpdGlvbiBvbiBzY3JvbGwgYW5kIHdpbmRvdyByZXNpemVcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcblxuICAgIC8vIENsb3NlIG1lbnUgb24gYmFja2Ryb3AgY2xpY2tcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCAoZXYpID0+IHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIoZXYpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCAoZXYpID0+IHRoaXMuX2Nsb3NlT25CYWNrZHJvcENsaWNrKGV2KSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX29uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcpIHtcbiAgICAgIHRoaXMuX29wZW5lZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgdGhpcy5fY2xvc2VkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jbG9zZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hlY2tGb3JMZXR0ZXJTZWxlY3Rpb24oZXZlbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgIGNhc2UgJyAnOlxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSB8fCB0aGlzLnN0YXRlICE9PSAnb3BlbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jaGVja0ZvckxldHRlclNlbGVjdGlvbihldmVudCkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uQnlUZXh0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgIGNhc2UgJyAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9zZWxlY3RCeUtleWJvYXJkKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb24oZXZlbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICBjYXNlICdQYWdlVXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCAwKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICBjYXNlICdQYWdlRG93bic6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb24oZXZlbnQsIHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tGb3JMZXR0ZXJTZWxlY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyB8fFxuICAgICAgZXZlbnQua2V5ID09PSAnQ2xlYXInIHx8XG4gICAgICAoZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBldmVudC5rZXkgIT09ICcgJyAmJlxuICAgICAgICAhZXZlbnQuYWx0S2V5ICYmXG4gICAgICAgICFldmVudC5jdHJsS2V5ICYmXG4gICAgICAgICFldmVudC5tZXRhS2V5KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9zZXROZXh0QWN0aXZlT3B0aW9uQnlUZXh0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgLy8gU2V0IHRpbWVvdXQgYW5kIHRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICAgIGlmICh0eXBlb2YgdGhpcy5fc2VhcmNoVGltZW91dCA9PT0gdHlwZW9mIHNldFRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zZWFyY2hUaW1lb3V0KTtcbiAgICB9XG4gICAgdGhpcy5fc2VhcmNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuX3NlYXJjaFN0cmluZyA9ICcnKSwgMTAwMCk7XG4gICAgdGhpcy5fc2VhcmNoU3RyaW5nICs9IGV2ZW50LmtleTtcblxuICAgIC8vIFJlb3JkZXIgdGhlIF9maWx0ZXJlZE9wdGlvbiBhcnJheSB0byBoYXZlIHRoZSBsYXN0IHNlbGVjdGVkIGVsZW1lbnQgYXQgdGhlIGJvdHRvbS5cbiAgICBjb25zdCBpbmRleEZvclNsaWNlOiBudW1iZXIgPSB0aGlzLl9hY3RpdmVJdGVtSW5kZXggKyAxO1xuICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9uc1NvcnRlZDogU2JiT3B0aW9uRWxlbWVudFtdID0gW1xuICAgICAgLi4udGhpcy5fZmlsdGVyZWRPcHRpb25zLnNsaWNlKGluZGV4Rm9yU2xpY2UpLFxuICAgICAgLi4udGhpcy5fZmlsdGVyZWRPcHRpb25zLnNsaWNlKDAsIGluZGV4Rm9yU2xpY2UpLFxuICAgIF07XG5cbiAgICBjb25zdCBtYXRjaCA9IGZpbHRlcmVkT3B0aW9uc1NvcnRlZC5maW5kKFxuICAgICAgKG9wdGlvbjogU2JiT3B0aW9uRWxlbWVudCkgPT5cbiAgICAgICAgb3B0aW9uLnRleHRDb250ZW50Py50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5fc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkpID09PSAwLFxuICAgICk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICAvLyBJZiBhbiBleGFjdCBtYXRjaCBoYXMgYmVlbiBmb3VuZCwgZ28gdG8gdGhhdCBvcHRpb24uXG4gICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCB0aGlzLl9maWx0ZXJlZE9wdGlvbnMuaW5kZXhPZihtYXRjaCkpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLl9zZWFyY2hTdHJpbmcubGVuZ3RoID4gMSAmJlxuICAgICAgbmV3IFJlZ0V4cChgXiR7dGhpcy5fc2VhcmNoU3RyaW5nLmNoYXJBdCgwKX0qJGApLnRlc3QodGhpcy5fc2VhcmNoU3RyaW5nKVxuICAgICkge1xuICAgICAgLy8gSWYgbm8gZXhhY3QgbWF0Y2ggaGFzIGJlZW4gZm91bmQgYnV0IHRoZSBzdHJpbmcgdG8gc2VhcmNoIGlzIG1hZGUgYnkgdGhlIHNhbWUgcmVwZWF0ZWQgbGV0dGVyLFxuICAgICAgLy8gZ28gdG8gdGhlIGZpcnN0IGVsZW1lbnQsIGlmIGV4aXN0cywgdGhhdCBtYXRjaGVzIHRoZSBsZXR0ZXIuXG4gICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlsdGVyZWRPcHRpb25zU29ydGVkLmZpbmQoXG4gICAgICAgIChvcHRpb246IFNiYk9wdGlvbkVsZW1lbnQpID0+XG4gICAgICAgICAgb3B0aW9uLnRleHRDb250ZW50Py50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5fc2VhcmNoU3RyaW5nWzBdLnRvTG93ZXJDYXNlKCkpID09PSAwLFxuICAgICAgKTtcbiAgICAgIGlmIChmaXJzdE1hdGNoKSB7XG4gICAgICAgIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb24oZXZlbnQsIHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5pbmRleE9mKGZpcnN0TWF0Y2gpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gbWF0Y2ggZm91bmQsIGNsZWFyIHRoZSB0aW1lb3V0IGFuZCB0aGUgc2VhcmNoIHRlcm0uXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2VhcmNoVGltZW91dCk7XG4gICAgICB0aGlzLl9zZWFyY2hTdHJpbmcgPSAnJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RCeUtleWJvYXJkKCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uRWxlbWVudCA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9uc1t0aGlzLl9hY3RpdmVJdGVtSW5kZXhdO1xuXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGFjdGl2ZU9wdGlvbi5zZXRTZWxlY3RlZFZpYVVzZXJJbnRlcmFjdGlvbighYWN0aXZlT3B0aW9uLnNlbGVjdGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldE5leHRBY3RpdmVPcHRpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dEluZGV4ID1cbiAgICAgIGluZGV4ID8/IGdldE5leHRFbGVtZW50SW5kZXgoZXZlbnQsIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCwgdGhpcy5fZmlsdGVyZWRPcHRpb25zLmxlbmd0aCk7XG4gICAgY29uc3QgbmV4dE9wdGlvbiA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9uc1tuZXh0SW5kZXhdO1xuICAgIGNvbnN0IGFjdGl2ZU9wdGlvbiA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9uc1t0aGlzLl9hY3RpdmVJdGVtSW5kZXhdO1xuXG4gICAgdGhpcy5fc2V0QWN0aXZlRWxlbWVudChuZXh0T3B0aW9uLCBhY3RpdmVPcHRpb24pO1xuXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLl9zZXRTZWxlY3RlZEVsZW1lbnQobmV4dE9wdGlvbiwgYWN0aXZlT3B0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50Py5zaGlmdEtleSkge1xuICAgICAgbmV4dE9wdGlvbi5zZXRTZWxlY3RlZFZpYVVzZXJJbnRlcmFjdGlvbighbmV4dE9wdGlvbi5zZWxlY3RlZCk7XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IG5leHRJbmRleDtcbiAgfVxuXG4gIHByaXZhdGUgX3NldEFjdGl2ZUVsZW1lbnQoXG4gICAgbmV4dEFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uRWxlbWVudCxcbiAgICBsYXN0QWN0aXZlT3B0aW9uOiBTYmJPcHRpb25FbGVtZW50IHwgbnVsbCA9IG51bGwsXG4gICAgc2V0QWN0aXZlRGVzY2VuZGFudCA9IHRydWUsXG4gICk6IHZvaWQge1xuICAgIG5leHRBY3RpdmVPcHRpb24uc2V0QWN0aXZlKHRydWUpO1xuICAgIG5leHRBY3RpdmVPcHRpb24uc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pO1xuXG4gICAgaWYgKHNldEFjdGl2ZURlc2NlbmRhbnQpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgbmV4dEFjdGl2ZU9wdGlvbi5pZCk7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgdGhlIHByZXZpb3VzXG4gICAgaWYgKGxhc3RBY3RpdmVPcHRpb24gJiYgbGFzdEFjdGl2ZU9wdGlvbiAhPT0gbmV4dEFjdGl2ZU9wdGlvbikge1xuICAgICAgbGFzdEFjdGl2ZU9wdGlvbi5zZXRBY3RpdmUoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldFNlbGVjdGVkRWxlbWVudChcbiAgICBuZXh0QWN0aXZlT3B0aW9uOiBTYmJPcHRpb25FbGVtZW50LFxuICAgIGxhc3RBY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQsXG4gICk6IHZvaWQge1xuICAgIG5leHRBY3RpdmVPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24odHJ1ZSk7XG5cbiAgICBpZiAobGFzdEFjdGl2ZU9wdGlvbiAmJiBsYXN0QWN0aXZlT3B0aW9uICE9PSBuZXh0QWN0aXZlT3B0aW9uKSB7XG4gICAgICBsYXN0QWN0aXZlT3B0aW9uLnNldFNlbGVjdGVkVmlhVXNlckludGVyYWN0aW9uKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZXNldEFjdGl2ZUVsZW1lbnQoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9uc1t0aGlzLl9hY3RpdmVJdGVtSW5kZXhdO1xuXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQuc2V0QWN0aXZlKGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBwb2ludGVyZG93biBldmVudCB0YXJnZXQgaXMgdHJpZ2dlcmVkIG9uIHRoZSBtZW51LlxuICBwcml2YXRlIF9wb2ludGVyRG93bkxpc3RlbmVyID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLl9pc1BvaW50ZXJEb3duRXZlbnRPbk1lbnUgPSBpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KTtcbiAgfTtcblxuICAvLyBDbG9zZSBtZW51IG9uIGJhY2tkcm9wIGNsaWNrLlxuICBwcml2YXRlIF9jbG9zZU9uQmFja2Ryb3BDbGljayA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKCF0aGlzLl9pc1BvaW50ZXJEb3duRXZlbnRPbk1lbnUgJiYgIWlzRXZlbnRPbkVsZW1lbnQodGhpcy5fb3ZlcmxheSwgZXZlbnQpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX3NldFZhbHVlRnJvbVNlbGVjdGVkT3B0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24uc2VsZWN0ZWQpO1xuICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uID09PSBzZWxlY3RlZE9wdGlvbixcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHNlbGVjdGVkT3B0aW9uLnZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZmlsdGVyZWRPcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24uc2VsZWN0ZWQpO1xuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgdmFsdWUucHVzaChvcHRpb24udmFsdWUhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdG9nZ2xlT3BlbmluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py5mb2N1cygpO1xuXG4gICAgc3dpdGNoICh0aGlzLnN0YXRlKSB7XG4gICAgICBjYXNlICdvcGVuZWQnOiB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdjbG9zZWQnOiB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NwcmVhZERlZmVycmVkRGlzcGxheVZhbHVlKFxuICAgIHBsYWNlaG9sZGVyOiBUZW1wbGF0ZVJlc3VsdCxcbiAgKTogKFRlbXBsYXRlUmVzdWx0IHwgUHJvbWlzZTxUZW1wbGF0ZVJlc3VsdD4pW10ge1xuICAgIHJldHVybiBbdGhpcy5fZGVmZXJyZWREaXNwbGF5VmFsdWUocGxhY2Vob2xkZXIpLCBwbGFjZWhvbGRlcl07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9kZWZlcnJlZERpc3BsYXlWYWx1ZShwbGFjZWhvbGRlcjogVGVtcGxhdGVSZXN1bHQpOiBQcm9taXNlPFRlbXBsYXRlUmVzdWx0PiB7XG4gICAgaWYgKHRoaXMuaHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuaHlkcmF0aW9uQ29tcGxldGU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kaXNwbGF5VmFsdWUgPyBodG1sYCR7dGhpcy5fZGlzcGxheVZhbHVlfWAgOiBwbGFjZWhvbGRlcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPCEtLSBUaGlzIGVsZW1lbnQgaXMgdmlzdWFsbHkgaGlkZGVuIGFuZCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBsaWdodCBET00gdG8gYWxsb3cgc2NyZWVuXG4gICAgICByZWFkZXJzIHRvIHdvcmsgcHJvcGVybHkgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiXG4gICAgICAgIHRhYmluZGV4PSR7dGhpcy5kaXNhYmxlZCA/IG5vdGhpbmcgOiAnMCd9XG4gICAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgYXJpYS1yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWQudG9TdHJpbmcoKX1cbiAgICAgICAgYXJpYS1jb250cm9scz0ke3RoaXMuX292ZXJsYXlJZH1cbiAgICAgICAgYXJpYS1vd25zPSR7dGhpcy5fb3ZlcmxheUlkfVxuICAgICAgICBAa2V5ZG93bj0ke3RoaXMuX29uS2V5RG93bn1cbiAgICAgICAgQGNsaWNrPSR7dGhpcy5fdG9nZ2xlT3BlbmluZ31cbiAgICAgICAgJHtyZWYoKHJlZikgPT4gKHRoaXMuX3RyaWdnZXJFbGVtZW50ID0gcmVmIGFzIEhUTUxFbGVtZW50KSl9XG4gICAgICA+XG4gICAgICAgICR7dW50aWwoLi4udGhpcy5fc3ByZWFkRGVmZXJyZWREaXNwbGF5VmFsdWUoaHRtbGA8c3Bhbj4ke3RoaXMucGxhY2Vob2xkZXJ9PC9zcGFuPmApKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFZpc3VhbGx5IGRpc3BsYXkgdGhlIHZhbHVlIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX3RyaWdnZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgJHt1bnRpbChcbiAgICAgICAgICAuLi50aGlzLl9zcHJlYWREZWZlcnJlZERpc3BsYXlWYWx1ZShcbiAgICAgICAgICAgIGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItc2VsZWN0X190cmlnZ2VyLS1wbGFjZWhvbGRlclwiPiR7dGhpcy5wbGFjZWhvbGRlcn08L3NwYW4+YCxcbiAgICAgICAgICApLFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X19nYXAtZml4XCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X19nYXAtZml4XCI+JHtvdmVybGF5R2FwRml4Q29ybmVycygpfTwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgQGFuaW1hdGlvbmVuZD0ke3RoaXMuX29uQW5pbWF0aW9uRW5kfVxuICAgICAgICAgIGNsYXNzPVwic2JiLXNlbGVjdF9fcGFuZWxcIlxuICAgICAgICAgICR7cmVmKChkaWFsb2dSZWYpID0+ICh0aGlzLl9vdmVybGF5ID0gZGlhbG9nUmVmIGFzIEhUTUxFbGVtZW50KSl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBpZD0keyFhcmlhUm9sZU9uSG9zdCA/IHRoaXMuX292ZXJsYXlJZCA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgIGNsYXNzPVwic2JiLXNlbGVjdF9fb3B0aW9uc1wiXG4gICAgICAgICAgICAgIHJvbGU9JHshYXJpYVJvbGVPbkhvc3QgPyAnbGlzdGJveCcgOiBub3RoaW5nfVxuICAgICAgICAgICAgICA/YXJpYS1tdWx0aXNlbGVjdGFibGU9JHt0aGlzLm11bHRpcGxlfVxuICAgICAgICAgICAgICAke3JlZigoY29udGFpbmVyUmVmKSA9PiAodGhpcy5fb3B0aW9uQ29udGFpbmVyID0gY29udGFpbmVyUmVmIGFzIEhUTUxFbGVtZW50KSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzbG90IEBzbG90Y2hhbmdlPSR7dGhpcy5fc2V0VmFsdWVGcm9tU2VsZWN0ZWRPcHRpb259Pjwvc2xvdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1zZWxlY3QnOiBTYmJTZWxlY3RFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsicmVmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQSxNQUFNLGlCQUFpQjtBQUV2QixJQUFJLFNBQVM7QUEwQk4sSUFBTSxtQkFBTixjQUErQjtBQUFBLEVBQ3BDLGlCQUFpQixpQkFBaUIsa0JBQWtCLHVCQUF1QixDQUFDLENBQUM7QUFDL0UsRUFBRTtBQUFBLEVBcUZPLGNBQWM7QUFDYjtBQWhFb0MsU0FBTyxXQUFXO0FBR2xCLFNBQU8sV0FBVztBQUdqQyxTQUFPLFdBQVc7QUFHdEMsU0FBUSxnQkFBK0I7QUFLaEQsU0FBUSxhQUEyQixJQUFJLGFBQWEsTUFBTSxpQkFBaUIsT0FBTyxTQUFTO0FBRzNGLFNBQVEsVUFBd0IsSUFBSSxhQUFhLE1BQU0saUJBQWlCLE9BQU8sTUFBTTtBQUdyRixTQUFRLFNBQXVCLElBQUksYUFBYSxNQUFNLGlCQUFpQixPQUFPLEtBQUs7QUFHbkYsU0FBUSxlQUEyQyxJQUFJO0FBQUEsTUFDckQ7QUFBQSxNQUNBLGlCQUFpQixPQUFPO0FBQUEsTUFDeEI7QUFBQSxRQUNFLFVBQVU7QUFBQSxNQUNaO0FBQUEsSUFB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
937
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2VsZWN0L3NlbGVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNdXRhdGlvbkNvbnRyb2xsZXIgfSBmcm9tICdAbGl0LWxhYnMvb2JzZXJ2ZXJzL211dGF0aW9uLWNvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgUHJvcGVydHlWYWx1ZXMsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGh0bWwsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcbmltcG9ydCB7IHVudGlsIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvdW50aWwuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4IH0gZnJvbSAnLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vY29yZS9iYXNlLWVsZW1lbnRzLmpzJztcbmltcG9ydCB7IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlciB9IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgaG9zdEF0dHJpYnV0ZXMgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaXNOZXh0anMsIGlzU2FmYXJpIH0gZnJvbSAnLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQge1xuICB0eXBlIEZvcm1SZXN0b3JlUmVhc29uLFxuICB0eXBlIEZvcm1SZXN0b3JlU3RhdGUsXG4gIFNiYkRpc2FibGVkTWl4aW4sXG4gIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4sXG4gIFNiYkh5ZHJhdGlvbk1peGluLFxuICBTYmJOZWdhdGl2ZU1peGluLFxuICBTYmJSZXF1aXJlZE1peGluLFxuICBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpbixcbn0gZnJvbSAnLi4vY29yZS9taXhpbnMuanMnO1xuaW1wb3J0IHsgaXNFdmVudE9uRWxlbWVudCwgb3ZlcmxheUdhcEZpeENvcm5lcnMsIHNldE92ZXJsYXlQb3NpdGlvbiB9IGZyb20gJy4uL2NvcmUvb3ZlcmxheS5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYk9wdEdyb3VwRWxlbWVudCwgU2JiT3B0aW9uRWxlbWVudCB9IGZyb20gJy4uL29wdGlvbi5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3NlbGVjdC5zY3NzP2xpdCZpbmxpbmUnO1xuXG4vKipcbiAqIE9uIFNhZmFyaSwgdGhlIGFyaWEgcm9sZSAnbGlzdGJveCcgbXVzdCBiZSBvbiB0aGUgaG9zdCBlbGVtZW50LCBvciBlbHNlIFZvaWNlT3ZlciB3b24ndCB3b3JrIGF0IGFsbC5cbiAqIE9uIHRoZSBvdGhlciBoYW5kLCBKQVdTIGFuZCBOVkRBIG5lZWQgdGhlIHJvbGUgdG8gYmUgYW4gXCJpbW1lZGlhdGUgcGFyZW50XCIgdG8gdGhlIG9wdGlvbnMsIG9yIGVsc2Ugb3B0Z3JvdXBzIHdvbid0IHdvcmsuXG4gKi9cbmNvbnN0IGFyaWFSb2xlT25Ib3N0ID0gaXNTYWZhcmk7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdENoYW5nZSB7XG4gIHR5cGU6ICd2YWx1ZSc7XG4gIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhIHBhbmVsIHdpdGggc2VsZWN0YWJsZSBvcHRpb25zLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIG9wdGlvbnMuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBkaWRDaGFuZ2UgLSBEZXByZWNhdGVkLiB1c2VkIGZvciBSZWFjdC4gV2lsbCBwcm9iYWJseSBiZSByZW1vdmVkIG9uY2UgUmVhY3QgMTkgaXMgYXZhaWxhYmxlLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gY2hhbmdlIC0gTm90aWZpZXMgdGhhdCB0aGUgY29tcG9uZW50J3MgdmFsdWUgaGFzIGNoYW5nZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBpbnB1dCAtIE5vdGlmaWVzIHRoYXQgYW4gb3B0aW9uIHZhbHVlIGhhcyBiZWVuIHNlbGVjdGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1zZWxlY3RgIHN0YXJ0cyB0aGUgb3BlbmluZyB0cmFuc2l0aW9uLiBDYW4gYmUgY2FuY2VsZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBkaWRPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItc2VsZWN0YCBpcyBvcGVuZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSB3aWxsQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1zZWxlY3RgIGJlZ2lucyB0aGUgY2xvc2luZyB0cmFuc2l0aW9uLiBDYW4gYmUgY2FuY2VsZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBkaWRDbG9zZSAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXNlbGVjdGAgaXMgY2xvc2VkLlxuICogQGNzc3Byb3AgWy0tc2JiLXNlbGVjdC16LWluZGV4PXZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleCldIC0gVG8gc3BlY2lmeSBhIGN1c3RvbSBzdGFjayBvcmRlcixcbiAqIHRoZSBgei1pbmRleGAgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgdGhpcyBDU1MgdmFyaWFibGUuIFRoZSBkZWZhdWx0IGB6LWluZGV4YCBvZiB0aGVcbiAqIGNvbXBvbmVudCBpcyBzZXQgdG8gYHZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleClgIHdpdGggYSB2YWx1ZSBvZiBgMTAwMGAuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdzYmItc2VsZWN0JylcbkBob3N0QXR0cmlidXRlcyh7XG4gIHJvbGU6IGFyaWFSb2xlT25Ib3N0ID8gJ2xpc3Rib3gnIDogbnVsbCxcbn0pXG5leHBvcnQgY2xhc3MgU2JiU2VsZWN0RWxlbWVudCBleHRlbmRzIFNiYlVwZGF0ZVNjaGVkdWxlck1peGluKFxuICBTYmJEaXNhYmxlZE1peGluKFxuICAgIFNiYk5lZ2F0aXZlTWl4aW4oXG4gICAgICBTYmJIeWRyYXRpb25NaXhpbihcbiAgICAgICAgU2JiUmVxdWlyZWRNaXhpbihcbiAgICAgICAgICBTYmJGb3JtQXNzb2NpYXRlZE1peGluPHR5cGVvZiBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCwgc3RyaW5nIHwgc3RyaW5nW10+KFxuICAgICAgICAgICAgU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKSxcbiAgKSxcbikge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICAvLyBGSVhNRSB1c2luZyAuLi5zdXBlci5ldmVudHMgcmVxdWlyZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9zYmItZGVzaWduLXN5c3RlbXMvbHluZS1jb21wb25lbnRzL2lzc3Vlcy8yNjAwXG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGRpZENoYW5nZTogJ2RpZENoYW5nZScsXG4gICAgY2hhbmdlOiAnY2hhbmdlJyxcbiAgICBpbnB1dDogJ2lucHV0JyxcbiAgICBzdGF0ZUNoYW5nZTogJ3N0YXRlQ2hhbmdlJyxcbiAgICB3aWxsT3BlbjogJ3dpbGxPcGVuJyxcbiAgICBkaWRPcGVuOiAnZGlkT3BlbicsXG4gICAgd2lsbENsb3NlOiAnd2lsbENsb3NlJyxcbiAgICBkaWRDbG9zZTogJ2RpZENsb3NlJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKiogVGhlIHBsYWNlaG9sZGVyIHVzZWQgaWYgbm8gdmFsdWUgaGFzIGJlZW4gc2VsZWN0ZWQuICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBwbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAvKiogV2hldGhlciB0aGUgc2VsZWN0IGFsbG93cyBmb3IgbXVsdGlwbGUgc2VsZWN0aW9uLiAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyBtdWx0aXBsZSA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3QgaXMgcmVhZG9ubHkuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgLyoqIFRoZSB2YWx1ZSBkaXNwbGF5ZWQgYnkgdGhlIGNvbXBvbmVudC4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBfZGlzcGxheVZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgb25seSB1c2VkIGZvciBSZWFjdC4gV2lsbCBwcm9iYWJseSBiZSByZW1vdmVkIG9uY2UgUmVhY3QgMTkgaXMgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBfZGlkQ2hhbmdlOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYlNlbGVjdEVsZW1lbnQuZXZlbnRzLmRpZENoYW5nZSk7XG5cbiAgLyoqIE5vdGlmaWVzIHRoYXQgdGhlIGNvbXBvbmVudCdzIHZhbHVlIGhhcyBjaGFuZ2VkLiAqL1xuICBwcml2YXRlIF9jaGFuZ2U6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIodGhpcywgU2JiU2VsZWN0RWxlbWVudC5ldmVudHMuY2hhbmdlKTtcblxuICAvKiogTm90aWZpZXMgdGhhdCBhbiBvcHRpb24gdmFsdWUgaGFzIGJlZW4gc2VsZWN0ZWQuICovXG4gIHByaXZhdGUgX2lucHV0OiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYlNlbGVjdEVsZW1lbnQuZXZlbnRzLmlucHV0KTtcblxuICAvKiogQGludGVybmFsICovXG4gIHByaXZhdGUgX3N0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8U2VsZWN0Q2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJTZWxlY3RFbGVtZW50LmV2ZW50cy5zdGF0ZUNoYW5nZSxcbiAgICB7XG4gICAgICBjb21wb3NlZDogZmFsc2UsXG4gICAgfSxcbiAgKTtcblxuICBwcml2YXRlIF9vdmVybGF5ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX29wdGlvbkNvbnRhaW5lciE6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9vcmlnaW5FbGVtZW50ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3RyaWdnZXJFbGVtZW50ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX292ZXJsYXlJZCA9IGBzYmItc2VsZWN0LSR7KytuZXh0SWR9YDtcbiAgcHJpdmF0ZSBfYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gIHByaXZhdGUgX3NlYXJjaFRpbWVvdXQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgcHJpdmF0ZSBfc2VhcmNoU3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2RpZExvYWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNQb2ludGVyRG93bkV2ZW50T25NZW51OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2Fib3J0ID0gbmV3IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlcih0aGlzKTtcblxuICAvKipcbiAgICogVGhlICdjb21ib2JveCcgaW5wdXQgZWxlbWVudFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fdHJpZ2dlckVsZW1lbnQ7XG4gIH1cblxuICAvKiogR2V0cyBhbGwgdGhlIFNiYk9wdGlvbkVsZW1lbnQgcHJvamVjdGVkIGluIHRoZSBzZWxlY3QuICovXG4gIHByaXZhdGUgZ2V0IF9vcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1vcHRpb24nKSA/PyBbXSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfZmlsdGVyZWRPcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuZmlsdGVyKFxuICAgICAgKG9wdDogU2JiT3B0aW9uRWxlbWVudCkgPT4gIW9wdC5kaXNhYmxlZCAmJiAhb3B0Lmhhc0F0dHJpYnV0ZSgnZGF0YS1ncm91cC1kaXNhYmxlZCcpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIG5ldyBNdXRhdGlvbkNvbnRyb2xsZXIodGhpcywge1xuICAgICAgY29uZmlnOiB7IGF0dHJpYnV0ZUZpbHRlcjogWydhcmlhLWxhYmVsbGVkYnknXSB9LFxuICAgICAgY2FsbGJhY2s6IChtdXRhdGlvbnNMaXN0OiBNdXRhdGlvblJlY29yZFtdKSA9PiB0aGlzLl9vblNlbGVjdEF0dHJpYnV0ZXNDaGFuZ2UobXV0YXRpb25zTGlzdCksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVE9ETzogQWNjZXNzaWJpbGl0eSBmaXggcmVxdWlyZWQgdG8gY29ycmVjdGx5IHJlYWQgdGhlIGxhYmVsO1xuICAgKiBjYW4gYmUgcG9zc2libHkgcmVtb3ZlZCBhZnRlciB0aGUgbWVyZ2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL3NiYi1kZXNpZ24tc3lzdGVtcy9seW5lLWNvbXBvbmVudHMvaXNzdWVzLzMwNjJcbiAgICovXG4gIHByaXZhdGUgX29uU2VsZWN0QXR0cmlidXRlc0NoYW5nZShtdXRhdGlvbnNMaXN0OiBNdXRhdGlvblJlY29yZFtdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnNMaXN0KSB7XG4gICAgICBpZiAobXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gJ2FyaWEtbGFiZWxsZWRieScpIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JyxcbiAgICAgICAgICB0aGlzLmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JykhLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBPcGVucyB0aGUgc2VsZWN0aW9uIHBhbmVsLiAqL1xuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlICE9PSAnY2xvc2VkJyB8fFxuICAgICAgIXRoaXMuX292ZXJsYXkgfHxcbiAgICAgIHRoaXMuX29wdGlvbnMubGVuZ3RoID09PSAwIHx8XG4gICAgICB0aGlzLmRpc2FibGVkIHx8XG4gICAgICB0aGlzLmZvcm1EaXNhYmxlZFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy53aWxsT3Blbi5lbWl0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuaW5nJztcbiAgICB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24oKTtcbiAgfVxuXG4gIC8qKiBDbG9zZXMgdGhlIHNlbGVjdGlvbiBwYW5lbC4gKi9cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy53aWxsQ2xvc2UuZW1pdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5hYm9ydCgpO1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIGN1cnJlbnQgZGlzcGxheWVkIHZhbHVlLiAqL1xuICBwdWJsaWMgZ2V0RGlzcGxheVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlWYWx1ZSA/PyAnJztcbiAgfVxuXG4gIC8qKiBMaXN0ZW5zIHRvIG9wdGlvbiBjaGFuZ2VzLiAqL1xuICBwcml2YXRlIF9vbk9wdGlvbkNoYW5nZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIFNiYk9wdGlvbkVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldC5zZWxlY3RlZCkge1xuICAgICAgdGhpcy5fb25PcHRpb25TZWxlY3RlZCh0YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vbk9wdGlvbkRlc2VsZWN0ZWQodGFyZ2V0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vbk9wdGlvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIFNiYlNlbGVjdEVsZW1lbnQgfCBTYmJPcHRpb25FbGVtZW50O1xuICAgIGlmICh0YXJnZXQubG9jYWxOYW1lICE9PSAnc2JiLW9wdGlvbicgfHwgdGFyZ2V0LmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFNldHMgdGhlIF9kaXNwbGF5VmFsdWUgYnkgY2hlY2tpbmcgdGhlIGludGVybmFsIHNiYi1vcHRpb25zIGFuZCBzZXR0aW5nIHRoZSBjb3JyZWN0IGBzZWxlY3RlZGAgdmFsdWUgb24gdGhlbS4gKi9cbiAgcHJpdmF0ZSBfb25WYWx1ZUNoYW5nZWQobmV3VmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9ucztcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobmV3VmFsdWUpKSB7XG4gICAgICBjb25zdCBvcHRpb25FbGVtZW50ID0gb3B0aW9ucy5maW5kKChvKSA9PiAoby52YWx1ZSA/PyBvLmdldEF0dHJpYnV0ZSgndmFsdWUnKSkgPT09IG5ld1ZhbHVlKTtcbiAgICAgIGlmIChvcHRpb25FbGVtZW50KSB7XG4gICAgICAgIG9wdGlvbkVsZW1lbnQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgb3B0aW9uc1xuICAgICAgICAuZmlsdGVyKChvKSA9PiAoby52YWx1ZSA/PyBvLmdldEF0dHJpYnV0ZSgndmFsdWUnKSkgIT09IG5ld1ZhbHVlKVxuICAgICAgICAuZm9yRWFjaCgobykgPT4gKG8uc2VsZWN0ZWQgPSBmYWxzZSkpO1xuICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gb3B0aW9uRWxlbWVudD8udGV4dENvbnRlbnQgfHwgbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uc1xuICAgICAgICAuZmlsdGVyKChvKSA9PiAhbmV3VmFsdWUuaW5jbHVkZXMoby52YWx1ZSA/PyBvLmdldEF0dHJpYnV0ZSgndmFsdWUnKSkpXG4gICAgICAgIC5mb3JFYWNoKChlKSA9PiAoZS5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbkVsZW1lbnRzID0gb3B0aW9ucy5maWx0ZXIoKG8pID0+XG4gICAgICAgIG5ld1ZhbHVlLmluY2x1ZGVzKG8udmFsdWUgPz8gby5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLFxuICAgICAgKTtcbiAgICAgIHNlbGVjdGVkT3B0aW9uRWxlbWVudHMuZm9yRWFjaCgobykgPT4gKG8uc2VsZWN0ZWQgPSB0cnVlKSk7XG4gICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSBzZWxlY3RlZE9wdGlvbkVsZW1lbnRzLm1hcCgobykgPT4gby50ZXh0Q29udGVudCkuam9pbignLCAnKSB8fCBudWxsO1xuICAgIH1cbiAgICB0aGlzLl9zdGF0ZUNoYW5nZS5lbWl0KHsgdHlwZTogJ3ZhbHVlJywgdmFsdWU6IG5ld1ZhbHVlIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgLy8gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgZm9jdXMgYmVoYXZpb3JcbiAgICB0aGlzLmZvY3VzID0gKCkgPT4gdGhpcy5fdHJpZ2dlckVsZW1lbnQuZm9jdXMoKTtcbiAgICB0aGlzLmJsdXIgPSAoKSA9PiB0aGlzLl90cmlnZ2VyRWxlbWVudC5ibHVyKCk7XG5cbiAgICAvLyBXYWl0IGZvciBzc3IgaHlkcmF0aW9uXG4gICAgaWYgKCFpc05leHRqcygpKSB7XG4gICAgICB0aGlzLnN0YXJ0VXBkYXRlKCk7XG4gICAgICB0aGlzLl9zZXR1cFNlbGVjdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGVsZW1lbnQncyBmaXJzdCBhdHRyaWJ1dGUgd2hvc2UgcXVhbGlmaWVkIG5hbWUgaXMgcXVhbGlmaWVkTmFtZS5cbiAgICpcbiAgICogW01ETiBSZWZlcmVuY2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9FbGVtZW50L3JlbW92ZUF0dHJpYnV0ZSlcbiAgICogQGludGVybmFsIFdlIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBkdWUgdG8gYSBoeWRyYXRpb24gaXNzdWUgd2l0aCBOZXh0LmpzLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHJlbW92ZUF0dHJpYnV0ZShxdWFsaWZpZWROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBJbiBOZXh0LmpzIHRoZSBoeWRyYXRpb24gbmVlZHMgdG8gZmluaXNoIGJlZm9yZSB3ZSBjYW4gbWFuaXB1bGF0ZSB0aGUgbGlnaHQgRE9NLlxuICAgIC8vIEBsaXQvcmVhY3QgY2FsbHMgcmVtb3ZlQXR0cmlidXRlKCdkZWZlci1oeWRyYXRpb24nKSBpbiBhIHVzZUxheW91dEVmZmVjdCxcbiAgICAvLyB3aGljaCBpcyBkb25lIGFmdGVyIGh5ZHJhdGlvbiBpcyBmaW5pc2hlZC4gRHVlIHRvIHRoaXMgd2UgaW50ZXJjZXB0IHRoaXMgY2FsbFxuICAgIC8vIGluIG92ZXJyaWRpbmcgcmVtb3ZlQXR0cmlidXRlIHRvIGZpbmlzaCBpbml0aWFsaXphdGlvbiBvZiB0aGUgc2JiLXNlbGVjdC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbGl0L2xpdC9ibG9iL21haW4vcGFja2FnZXMvcmVhY3Qvc3JjL2NyZWF0ZS1jb21wb25lbnQudHMjTDI5My1MMjk2XG4gICAgLy8gV2UgYWxzbyBuZWVkIHRvIHdhaXQgZm9yIHVwZGF0ZSBjb21wbGV0ZSBpbiBvcmRlciB0byBiZSBzdXJlIHRoYXQgdGhlIHNoYWRvdyBET00gaGFzIGJlZW4gcmVuZGVyZWQuXG4gICAgaWYgKGlzTmV4dGpzKCkgJiYgcXVhbGlmaWVkTmFtZSA9PT0gJ2RlZmVyLWh5ZHJhdGlvbicgJiYgIXRoaXMuX2RpZExvYWQpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLl9zZXR1cFNlbGVjdCgpKTtcbiAgICB9XG4gICAgc3VwZXIucmVtb3ZlQXR0cmlidXRlKHF1YWxpZmllZE5hbWUpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICBpZiAoYXJpYVJvbGVPbkhvc3QpIHtcbiAgICAgIHRoaXMuaWQgfHw9IHRoaXMuX292ZXJsYXlJZDtcbiAgICB9XG5cbiAgICBjb25zdCBzaWduYWwgPSB0aGlzLl9hYm9ydC5zaWduYWw7XG4gICAgY29uc3QgZm9ybUZpZWxkID0gdGhpcy5jbG9zZXN0Py4oJ3NiYi1mb3JtLWZpZWxkJykgPz8gdGhpcy5jbG9zZXN0Py4oJ1tkYXRhLWZvcm0tZmllbGRdJyk7XG5cbiAgICBpZiAoZm9ybUZpZWxkKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gZm9ybUZpZWxkLmhhc0F0dHJpYnV0ZSgnbmVnYXRpdmUnKTtcbiAgICB9XG4gICAgdGhpcy5fc3luY1Byb3BlcnRpZXMoKTtcblxuICAgIGlmICh0aGlzLl9kaWRMb2FkKSB7XG4gICAgICB0aGlzLl9zZXR1cE9yaWdpbigpO1xuICAgICAgdGhpcy5fc2V0dXBUcmlnZ2VyKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICB0aGlzLl9vblZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnb3B0aW9uU2VsZWN0aW9uQ2hhbmdlJyxcbiAgICAgIChlOiBDdXN0b21FdmVudDx2b2lkPikgPT4gdGhpcy5fb25PcHRpb25DaGFuZ2VkKGUpLFxuICAgICAgeyBzaWduYWwgfSxcbiAgICApO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdjbGljaycsXG4gICAgICAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLl9vbk9wdGlvbkNsaWNrKGUpO1xuICAgICAgICB0aGlzLl90b2dnbGVPcGVuaW5nKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWwgfSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAvLyBPbiBpbml0aWFsaXphdGlvbiwgdGhlICdfb25WYWx1ZUNoYW5nZWQnIGlzIGNhbGxlZCBieSB0aGUgY29ubmVjdGVkQ2FsbGJhY2tcbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCd2YWx1ZScpICYmIHRoaXMuX2RpZExvYWQpIHtcbiAgICAgIHRoaXMuX29uVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUhKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbmVnYXRpdmUnKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ211bHRpcGxlJykpIHtcbiAgICAgIHRoaXMuX3N5bmNQcm9wZXJ0aWVzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5wcmVwZW5kKHRoaXMuX3RyaWdnZXJFbGVtZW50KTsgLy8gVGFrZSBiYWNrIHRoZSB0cmlnZ2VyIGVsZW1lbnQgcHJldmlvdXNseSBtb3ZlZCB0byB0aGUgbGlnaHQgRE9NXG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB1cGRhdGVGb3JtVmFsdWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICBjb25zdCBkYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAodGhpcy52YWx1ZSBhcyBzdHJpbmdbXSkuZm9yRWFjaCgoZWwpID0+IGRhdGEuYXBwZW5kKHRoaXMubmFtZSwgZWwpKTtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLnNldEZvcm1WYWx1ZShkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc2V0Rm9ybVZhbHVlKHRoaXMudmFsdWUgYXMgc3RyaW5nIHwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXNldCB2YWx1ZSBpcyB0aGUgYXR0cmlidXRlIHZhbHVlICh0aGUgc2V0dXAgdmFsdWUpLCBudWxsIG90aGVyd2lzZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaGFzQXR0cmlidXRlKCd2YWx1ZScpID8gdGhpcy5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhcbiAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgX3JlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICk6IHZvaWQge1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAvLyBpZiBtdWx0aXBsZSwgdGhlIHN0YXRlIGZvcm1hdCBpcyBbJ2ZpZWxkLW5hbWUnLCAndmFsdWUnXVtdXG4gICAgICB0aGlzLnZhbHVlID0gKHN0YXRlIGFzIFtzdHJpbmcsIHN0cmluZ11bXSkubWFwKChlbnRyaWVzKSA9PiBlbnRyaWVzWzFdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHN0YXRlIGFzIHN0cmluZztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zeW5jUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/Lignc2JiLWRpdmlkZXInKS5mb3JFYWNoKChlbGVtZW50KSA9PiAoZWxlbWVudC5uZWdhdGl2ZSA9IHRoaXMubmVnYXRpdmUpKTtcblxuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uPFNiYk9wdGlvbkVsZW1lbnQgfCBTYmJPcHRHcm91cEVsZW1lbnQ+KFxuICAgICAgJ3NiYi1vcHRpb24sIHNiYi1vcHRncm91cCcsXG4gICAgKS5mb3JFYWNoKChlbGVtZW50OiBTYmJPcHRpb25FbGVtZW50IHwgU2JiT3B0R3JvdXBFbGVtZW50KSA9PiB7XG4gICAgICBlbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1uZWdhdGl2ZScsIHRoaXMubmVnYXRpdmUpO1xuICAgICAgZWxlbWVudC50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtbXVsdGlwbGUnLCB0aGlzLm11bHRpcGxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwU2VsZWN0KCk6IHZvaWQge1xuICAgIHRoaXMuX3NldHVwT3JpZ2luKCk7XG4gICAgdGhpcy5fc2V0dXBUcmlnZ2VyKCk7XG4gICAgdGhpcy5fZGlkTG9hZCA9IHRydWU7XG4gICAgdGhpcy5jb21wbGV0ZVVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqIFNldHMgdGhlIG9yaWdpbkVsZW1lbnQ7IGlmIHRoZSBjb21wb25lbnQgaXMgdXNlZCBpbiBhIHNiYi1mb3JtLWZpZWxkIHVzZXMgaXQsIG90aGVyd2lzZSB1c2VzIHRoZSBwYXJlbnRFbGVtZW50LiAqL1xuICBwcml2YXRlIF9zZXR1cE9yaWdpbigpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRmllbGQgPSB0aGlzLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKTtcbiAgICB0aGlzLl9vcmlnaW5FbGVtZW50ID1cbiAgICAgIGZvcm1GaWVsZD8uc2hhZG93Um9vdD8ucXVlcnlTZWxlY3Rvcj8uKCcjb3ZlcmxheS1hbmNob3InKSA/PyB0aGlzLnBhcmVudEVsZW1lbnQhO1xuICAgIGlmICh0aGlzLl9vcmlnaW5FbGVtZW50KSB7XG4gICAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZShcbiAgICAgICAgJ2RhdGEtb3B0aW9uLXBhbmVsLW9yaWdpbi1ib3JkZXJsZXNzJyxcbiAgICAgICAgISFmb3JtRmllbGQ/Lmhhc0F0dHJpYnV0ZT8uKCdib3JkZXJsZXNzJyksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUbyBhc3Nlc3Mgc2NyZWVuLXJlYWRlcnMgcHJvYmxlbXMgY2F1c2VkIGJ5IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGFyaWEgcGF0dGVybnMgYW5kIHNoYWRvdyBET00sXG4gICAqIHdlIGFyZSBmb3JjZWQgdG8gbW92ZSB0aGUgJ2NvbWJvYm94JyB0cmlnZ2VyIGVsZW1lbnQgdG8gdGhlIGxpZ2h0IERPTVxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0dXBUcmlnZ2VyKCk6IHZvaWQge1xuICAgIC8vIE1vdmUgdGhlIHRyaWdnZXIgYmVmb3JlIHRoZSBzYmItc2VsZWN0XG4gICAgdGhpcy5wYXJlbnRFbGVtZW50IS5pbnNlcnRCZWZvcmU/Lih0aGlzLl90cmlnZ2VyRWxlbWVudCwgdGhpcyk7XG5cbiAgICAvLyBTZXQgdGhlIGludmlzaWJsZSB0cmlnZ2VyIGVsZW1lbnQgZGltZW5zaW9uIHRvIG1hdGNoIHRoZSBwYXJlbnQgKG5lZWRlZCBmb3Igc2NyZWVuIHJlYWRlcnMpXG4gICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpID8/IHRoaXM7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc3R5bGUudG9wID0gJzBweCc7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7Y29udGFpbmVyRWxlbWVudC5vZmZzZXRIZWlnaHR9cHhgO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7Y29udGFpbmVyRWxlbWVudC5vZmZzZXRXaWR0aH1weGA7XG4gIH1cblxuICBwcml2YXRlIF9zZXRPdmVybGF5UG9zaXRpb24oKTogdm9pZCB7XG4gICAgc2V0T3ZlcmxheVBvc2l0aW9uKFxuICAgICAgdGhpcy5fb3ZlcmxheSxcbiAgICAgIHRoaXMuX29yaWdpbkVsZW1lbnQsXG4gICAgICB0aGlzLl9vcHRpb25Db250YWluZXIsXG4gICAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJy5zYmItc2VsZWN0X19jb250YWluZXInKSEsXG4gICAgICB0aGlzLFxuICAgICk7XG4gIH1cblxuICAvLyBJbiByYXJlIGNhc2VzIGl0IGNhbiBiZSB0aGF0IHRoZSBhbmltYXRpb25FbmQgZXZlbnQgaXMgdHJpZ2dlcmVkIHR3aWNlLlxuICAvLyBUbyBhdm9pZCBlbnRlcmluZyBhIGNvcnJ1cHQgc3RhdGUsIGV4aXQgd2hlbiBzdGF0ZSBpcyBub3QgZXhwZWN0ZWQuXG4gIHByaXZhdGUgX29uQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnb3BlbicgJiYgdGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnKSB7XG4gICAgICB0aGlzLl9vbk9wZW5BbmltYXRpb25FbmQoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdjbG9zZScgJiYgdGhpcy5zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLl9vbkNsb3NlQW5pbWF0aW9uRW5kKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25PcGVuQW5pbWF0aW9uRW5kKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmVkJztcbiAgICB0aGlzLl9hdHRhY2hPcGVuUGFuZWxFdmVudHMoKTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuXG4gICAgdGhpcy5kaWRPcGVuLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uQ2xvc2VBbmltYXRpb25FbmQoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICAgIHRoaXMuX3Jlc2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIHRoaXMuX29wdGlvbkNvbnRhaW5lci5zY3JvbGxUb3AgPSAwO1xuICAgIHRoaXMuZGlkQ2xvc2UuZW1pdCgpO1xuICB9XG5cbiAgLyoqIFdoZW4gYW4gb3B0aW9uIGlzIHNlbGVjdGVkLCB1cGRhdGVzIHRoZSBkaXNwbGF5VmFsdWU7IGl0IGFsc28gY2xvc2VzIHRoZSBzZWxlY3QgaWYgbm90IGBtdWx0aXBsZWAuICovXG4gIHByaXZhdGUgX29uT3B0aW9uU2VsZWN0ZWQob3B0aW9uU2VsZWN0aW9uQ2hhbmdlOiBTYmJPcHRpb25FbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLl9maWx0ZXJlZE9wdGlvbnNcbiAgICAgICAgLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24uaWQgIT09IG9wdGlvblNlbGVjdGlvbkNoYW5nZS5pZClcbiAgICAgICAgLmZvckVhY2goKG9wdGlvbikgPT4gKG9wdGlvbi5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICB0aGlzLnZhbHVlID0gb3B0aW9uU2VsZWN0aW9uQ2hhbmdlLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtvcHRpb25TZWxlY3Rpb25DaGFuZ2UudmFsdWUhXTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMudmFsdWUuaW5jbHVkZXMob3B0aW9uU2VsZWN0aW9uQ2hhbmdlLnZhbHVlISkpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IFsuLi50aGlzLnZhbHVlLCBvcHRpb25TZWxlY3Rpb25DaGFuZ2UudmFsdWUhXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9pbnB1dC5lbWl0KCk7XG4gICAgdGhpcy5fY2hhbmdlLmVtaXQoKTtcbiAgICB0aGlzLl9kaWRDaGFuZ2UuZW1pdCgpO1xuICB9XG5cbiAgLyoqIFdoZW4gYW4gb3B0aW9uIGlzIHVuc2VsZWN0ZWQgaW4gYG11bHRpcGxlYCwgcmVtb3ZlcyBpdCBmcm9tIHZhbHVlIGFuZCB1cGRhdGVzIGRpc3BsYXlWYWx1ZS4gKi9cbiAgcHJpdmF0ZSBfb25PcHRpb25EZXNlbGVjdGVkKG9wdGlvblNlbGVjdGlvbkNoYW5nZTogU2JiT3B0aW9uRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLnZhbHVlID0gKHRoaXMudmFsdWUgYXMgc3RyaW5nW10pLmZpbHRlcihcbiAgICAgICAgKGVsOiBzdHJpbmcpID0+IGVsICE9PSBvcHRpb25TZWxlY3Rpb25DaGFuZ2UudmFsdWUsXG4gICAgICApO1xuXG4gICAgICB0aGlzLl9pbnB1dC5lbWl0KCk7XG4gICAgICB0aGlzLl9jaGFuZ2UuZW1pdCgpO1xuICAgICAgdGhpcy5fZGlkQ2hhbmdlLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hPcGVuUGFuZWxFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIC8vIFJlY2FsY3VsYXRlIHRoZSBvdmVybGF5IHBvc2l0aW9uIG9uIHNjcm9sbCBhbmQgd2luZG93IHJlc2l6ZVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4gdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGlja1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIChldikgPT4gdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lcihldiksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIChldikgPT4gdGhpcy5fY2xvc2VPbkJhY2tkcm9wQ2xpY2soZXYpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcpIHtcbiAgICAgIHRoaXMuX29wZW5lZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgdGhpcy5fY2xvc2VkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jbG9zZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hlY2tGb3JMZXR0ZXJTZWxlY3Rpb24oZXZlbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgIGNhc2UgJyAnOlxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hlY2tGb3JMZXR0ZXJTZWxlY3Rpb24oZXZlbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0QnlLZXlib2FyZCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgMCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCB0aGlzLl9maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRm9yTGV0dGVyU2VsZWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgfHxcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0NsZWFyJyB8fFxuICAgICAgKGV2ZW50LmtleS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgZXZlbnQua2V5ICE9PSAnICcgJiZcbiAgICAgICAgIWV2ZW50LmFsdEtleSAmJlxuICAgICAgICAhZXZlbnQuY3RybEtleSAmJlxuICAgICAgICAhZXZlbnQubWV0YUtleSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIC8vIFNldCB0aW1lb3V0IGFuZCB0aGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAgICBpZiAodHlwZW9mIHRoaXMuX3NlYXJjaFRpbWVvdXQgPT09IHR5cGVvZiBzZXRUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2VhcmNoVGltZW91dCk7XG4gICAgfVxuICAgIHRoaXMuX3NlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLl9zZWFyY2hTdHJpbmcgPSAnJyksIDEwMDApO1xuICAgIHRoaXMuX3NlYXJjaFN0cmluZyArPSBldmVudC5rZXk7XG5cbiAgICAvLyBSZW9yZGVyIHRoZSBfZmlsdGVyZWRPcHRpb24gYXJyYXkgdG8gaGF2ZSB0aGUgbGFzdCBzZWxlY3RlZCBlbGVtZW50IGF0IHRoZSBib3R0b20uXG4gICAgY29uc3QgaW5kZXhGb3JTbGljZTogbnVtYmVyID0gdGhpcy5fYWN0aXZlSXRlbUluZGV4ICsgMTtcbiAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQ6IFNiYk9wdGlvbkVsZW1lbnRbXSA9IFtcbiAgICAgIC4uLnRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5zbGljZShpbmRleEZvclNsaWNlKSxcbiAgICAgIC4uLnRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5zbGljZSgwLCBpbmRleEZvclNsaWNlKSxcbiAgICBdO1xuXG4gICAgY29uc3QgbWF0Y2ggPSBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQuZmluZChcbiAgICAgIChvcHRpb246IFNiYk9wdGlvbkVsZW1lbnQpID0+XG4gICAgICAgIG9wdGlvbi50ZXh0Q29udGVudD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX3NlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSA9PT0gMCxcbiAgICApO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgLy8gSWYgYW4gZXhhY3QgbWF0Y2ggaGFzIGJlZW4gZm91bmQsIGdvIHRvIHRoYXQgb3B0aW9uLlxuICAgICAgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgdGhpcy5fZmlsdGVyZWRPcHRpb25zLmluZGV4T2YobWF0Y2gpKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nLmxlbmd0aCA+IDEgJiZcbiAgICAgIG5ldyBSZWdFeHAoYF4ke3RoaXMuX3NlYXJjaFN0cmluZy5jaGFyQXQoMCl9KiRgKS50ZXN0KHRoaXMuX3NlYXJjaFN0cmluZylcbiAgICApIHtcbiAgICAgIC8vIElmIG5vIGV4YWN0IG1hdGNoIGhhcyBiZWVuIGZvdW5kIGJ1dCB0aGUgc3RyaW5nIHRvIHNlYXJjaCBpcyBtYWRlIGJ5IHRoZSBzYW1lIHJlcGVhdGVkIGxldHRlcixcbiAgICAgIC8vIGdvIHRvIHRoZSBmaXJzdCBlbGVtZW50LCBpZiBleGlzdHMsIHRoYXQgbWF0Y2hlcyB0aGUgbGV0dGVyLlxuICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpbHRlcmVkT3B0aW9uc1NvcnRlZC5maW5kKFxuICAgICAgICAob3B0aW9uOiBTYmJPcHRpb25FbGVtZW50KSA9PlxuICAgICAgICAgIG9wdGlvbi50ZXh0Q29udGVudD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX3NlYXJjaFN0cmluZ1swXS50b0xvd2VyQ2FzZSgpKSA9PT0gMCxcbiAgICAgICk7XG4gICAgICBpZiAoZmlyc3RNYXRjaCkge1xuICAgICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCB0aGlzLl9maWx0ZXJlZE9wdGlvbnMuaW5kZXhPZihmaXJzdE1hdGNoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIG1hdGNoIGZvdW5kLCBjbGVhciB0aGUgdGltZW91dCBhbmQgdGhlIHNlYXJjaCB0ZXJtLlxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NlYXJjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0QnlLZXlib2FyZCgpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQgPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICBhY3RpdmVPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24oIWFjdGl2ZU9wdGlvbi5zZWxlY3RlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5leHRJbmRleCA9XG4gICAgICBpbmRleCA/PyBnZXROZXh0RWxlbWVudEluZGV4KGV2ZW50LCB0aGlzLl9hY3RpdmVJdGVtSW5kZXgsIHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpO1xuICAgIGNvbnN0IG5leHRPcHRpb24gPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbbmV4dEluZGV4XTtcbiAgICBjb25zdCBhY3RpdmVPcHRpb24gPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIHRoaXMuX3NldEFjdGl2ZUVsZW1lbnQobmV4dE9wdGlvbiwgYWN0aXZlT3B0aW9uKTtcblxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRFbGVtZW50KG5leHRPcHRpb24sIGFjdGl2ZU9wdGlvbik7XG4gICAgfSBlbHNlIGlmIChldmVudD8uc2hpZnRLZXkpIHtcbiAgICAgIG5leHRPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24oIW5leHRPcHRpb24uc2VsZWN0ZWQpO1xuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSBuZXh0SW5kZXg7XG4gIH1cblxuICBwcml2YXRlIF9zZXRBY3RpdmVFbGVtZW50KFxuICAgIG5leHRBY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQsXG4gICAgbGFzdEFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uRWxlbWVudCB8IG51bGwgPSBudWxsLFxuICAgIHNldEFjdGl2ZURlc2NlbmRhbnQgPSB0cnVlLFxuICApOiB2b2lkIHtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLnNldEFjdGl2ZSh0cnVlKTtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JyB9KTtcblxuICAgIGlmIChzZXRBY3RpdmVEZXNjZW5kYW50KSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIG5leHRBY3RpdmVPcHRpb24uaWQpO1xuICAgIH1cblxuICAgIC8vIFJlc2V0IHRoZSBwcmV2aW91c1xuICAgIGlmIChsYXN0QWN0aXZlT3B0aW9uICYmIGxhc3RBY3RpdmVPcHRpb24gIT09IG5leHRBY3RpdmVPcHRpb24pIHtcbiAgICAgIGxhc3RBY3RpdmVPcHRpb24uc2V0QWN0aXZlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRTZWxlY3RlZEVsZW1lbnQoXG4gICAgbmV4dEFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uRWxlbWVudCxcbiAgICBsYXN0QWN0aXZlT3B0aW9uOiBTYmJPcHRpb25FbGVtZW50LFxuICApOiB2b2lkIHtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLnNldFNlbGVjdGVkVmlhVXNlckludGVyYWN0aW9uKHRydWUpO1xuXG4gICAgaWYgKGxhc3RBY3RpdmVPcHRpb24gJiYgbGFzdEFjdGl2ZU9wdGlvbiAhPT0gbmV4dEFjdGl2ZU9wdGlvbikge1xuICAgICAgbGFzdEFjdGl2ZU9wdGlvbi5zZXRTZWxlY3RlZFZpYVVzZXJJbnRlcmFjdGlvbihmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVzZXRBY3RpdmVFbGVtZW50KCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIGlmIChhY3RpdmVFbGVtZW50KSB7XG4gICAgICBhY3RpdmVFbGVtZW50LnNldEFjdGl2ZShmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcG9pbnRlcmRvd24gZXZlbnQgdGFyZ2V0IGlzIHRyaWdnZXJlZCBvbiB0aGUgbWVudS5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ID0gaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCk7XG4gIH07XG5cbiAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGljay5cbiAgcHJpdmF0ZSBfY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ICYmICFpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9zZXRWYWx1ZUZyb21TZWxlY3RlZE9wdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5fZmlsdGVyZWRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKTtcbiAgICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbiA9PT0gc2VsZWN0ZWRPcHRpb24sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBzZWxlY3RlZE9wdGlvbi52YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKTtcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB2YWx1ZTogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIHZhbHVlLnB1c2gob3B0aW9uLnZhbHVlISk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RvZ2dsZU9wZW5pbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uZm9jdXMoKTtcblxuICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgY2FzZSAnb3BlbmVkJzoge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY2xvc2VkJzoge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zcHJlYWREZWZlcnJlZERpc3BsYXlWYWx1ZShcbiAgICBwbGFjZWhvbGRlcjogVGVtcGxhdGVSZXN1bHQsXG4gICk6IChUZW1wbGF0ZVJlc3VsdCB8IFByb21pc2U8VGVtcGxhdGVSZXN1bHQ+KVtdIHtcbiAgICByZXR1cm4gW3RoaXMuX2RlZmVycmVkRGlzcGxheVZhbHVlKHBsYWNlaG9sZGVyKSwgcGxhY2Vob2xkZXJdO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZGVmZXJyZWREaXNwbGF5VmFsdWUocGxhY2Vob2xkZXI6IFRlbXBsYXRlUmVzdWx0KTogUHJvbWlzZTxUZW1wbGF0ZVJlc3VsdD4ge1xuICAgIGlmICh0aGlzLmh5ZHJhdGlvblJlcXVpcmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLmh5ZHJhdGlvbkNvbXBsZXRlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheVZhbHVlID8gaHRtbGAke3RoaXMuX2Rpc3BsYXlWYWx1ZX1gIDogcGxhY2Vob2xkZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDwhLS0gVGhpcyBlbGVtZW50IGlzIHZpc3VhbGx5IGhpZGRlbiBhbmQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgbGlnaHQgRE9NIHRvIGFsbG93IHNjcmVlblxuICAgICAgcmVhZGVycyB0byB3b3JrIHByb3Blcmx5IC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIlxuICAgICAgICB0YWJpbmRleD0ke3RoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWQgPyBub3RoaW5nIDogJzAnfVxuICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkLnRvU3RyaW5nKCl9XG4gICAgICAgIGFyaWEtY29udHJvbHM9JHt0aGlzLl9vdmVybGF5SWR9XG4gICAgICAgIGFyaWEtb3ducz0ke3RoaXMuX292ZXJsYXlJZH1cbiAgICAgICAgQGtleWRvd249JHt0aGlzLl9vbktleURvd259XG4gICAgICAgIEBjbGljaz0ke3RoaXMuX3RvZ2dsZU9wZW5pbmd9XG4gICAgICAgICR7cmVmKChyZWYpID0+ICh0aGlzLl90cmlnZ2VyRWxlbWVudCA9IHJlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgPlxuICAgICAgICAke3VudGlsKC4uLnRoaXMuX3NwcmVhZERlZmVycmVkRGlzcGxheVZhbHVlKGh0bWxgPHNwYW4+JHt0aGlzLnBsYWNlaG9sZGVyfTwvc3Bhbj5gKSl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBWaXN1YWxseSBkaXNwbGF5IHRoZSB2YWx1ZSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X190cmlnZ2VyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICR7dW50aWwoXG4gICAgICAgICAgLi4udGhpcy5fc3ByZWFkRGVmZXJyZWREaXNwbGF5VmFsdWUoXG4gICAgICAgICAgICBodG1sYDxzcGFuIGNsYXNzPVwic2JiLXNlbGVjdF9fdHJpZ2dlci0tcGxhY2Vob2xkZXJcIj4ke3RoaXMucGxhY2Vob2xkZXJ9PC9zcGFuPmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fZ2FwLWZpeFwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX2NvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fZ2FwLWZpeFwiPiR7b3ZlcmxheUdhcEZpeENvcm5lcnMoKX08L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIEBhbmltYXRpb25lbmQ9JHt0aGlzLl9vbkFuaW1hdGlvbkVuZH1cbiAgICAgICAgICBjbGFzcz1cInNiYi1zZWxlY3RfX3BhbmVsXCJcbiAgICAgICAgICAke3JlZigoZGlhbG9nUmVmKSA9PiAodGhpcy5fb3ZlcmxheSA9IGRpYWxvZ1JlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX3dyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgaWQ9JHshYXJpYVJvbGVPbkhvc3QgPyB0aGlzLl9vdmVybGF5SWQgOiBub3RoaW5nfVxuICAgICAgICAgICAgICBjbGFzcz1cInNiYi1zZWxlY3RfX29wdGlvbnNcIlxuICAgICAgICAgICAgICByb2xlPSR7IWFyaWFSb2xlT25Ib3N0ID8gJ2xpc3Rib3gnIDogbm90aGluZ31cbiAgICAgICAgICAgICAgP2FyaWEtbXVsdGlzZWxlY3RhYmxlPSR7dGhpcy5tdWx0aXBsZX1cbiAgICAgICAgICAgICAgJHtyZWYoKGNvbnRhaW5lclJlZikgPT4gKHRoaXMuX29wdGlvbkNvbnRhaW5lciA9IGNvbnRhaW5lclJlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuX3NldFZhbHVlRnJvbVNlbGVjdGVkT3B0aW9ufT48L3Nsb3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItc2VsZWN0JzogU2JiU2VsZWN0RWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbInN0YXRlIiwicmVmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdDQSxNQUFNLGlCQUFpQjtBQUV2QixJQUFJLFNBQVM7QUEwQk4sSUFBTSxtQkFBTixjQUErQjtBQUFBLEVBQ3BD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
@@ -1,6 +1,6 @@
1
1
  import { CSSResultGroup, PropertyValues, TemplateResult, LitElement } from 'lit';
2
2
  import { FormRestoreReason, FormRestoreState } from '../core/mixins.js';
3
- declare const SbbSliderElement_base: import('../core/mixins.js').AbstractConstructor<import('../core/mixins.js').SbbDisabledMixinType> & import('../core/mixins.js').Constructor<import('../core/mixins.js').SbbFormAssociatedMixinType> & typeof LitElement;
3
+ declare const SbbSliderElement_base: import('../core/mixins.js').AbstractConstructor<import('../core/mixins.js').SbbDisabledMixinType> & import('../core/mixins.js').AbstractConstructor<import('../core/mixins.js').SbbFormAssociatedMixinType<string>> & typeof LitElement;
4
4
  /**
5
5
  * It displays an input knob that can be moved in a range.
6
6
  *
@@ -63,6 +63,7 @@ export declare class SbbSliderElement extends SbbSliderElement_base {
63
63
  * @internal
64
64
  */
65
65
  formStateRestoreCallback(state: FormRestoreState | null, _reason: FormRestoreReason): void;
66
+ protected updateFormValue(): void;
66
67
  /**
67
68
  * If no value is provided, default is the middle point between min and max
68
69
  * (see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/range#value)
@@ -1 +1 @@
1
- {"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../../../src/elements/slider/slider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC1E,OAAO,EAAQ,UAAU,EAAW,MAAM,KAAK,CAAC;AAQhD,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAGtB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,YAAY,CAAC;;AAEpB;;;;;;GAMG;AACH,qBAIa,gBAAiB,SAAQ,qBAAoD;IACxF,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,gBAAuB,MAAM;;MAElB;IAEX;;;OAGG;IACH,IACoB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAQ7C;IACD,IAAoB,KAAK,IAAI,MAAM,CAElC;IAED,oDAAoD;IACpD,IACW,aAAa,CAAC,KAAK,EAAE,MAAM,EAErC;IACD,IAAW,aAAa,IAAI,MAAM,GAAG,IAAI,CAExC;IAED,+DAA+D;IAC/D,IACW,GAAG,CAAC,KAAK,EAAE,MAAM,EAO3B;IACD,IAAW,GAAG,IAAI,MAAM,CAEvB;IACD,OAAO,CAAC,IAAI,CAAe;IAE3B,+DAA+D;IAC/D,IACW,GAAG,CAAC,KAAK,EAAE,MAAM,EAO3B;IACD,IAAW,GAAG,IAAI,MAAM,CAEvB;IACD,OAAO,CAAC,IAAI,CAAiB;IAE7B;;;OAGG;IACiC,QAAQ,CAAC,EAAE,OAAO,CAAS;IAE/D,6FAA6F;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEjE,2FAA2F;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IAE7D;;;OAGG;IACM,OAAO,CAAC,cAAc,CAAK;IAEpC;;OAEG;IACH,OAAO,CAAC,UAAU,CAGf;IAEH,iEAAiE;IACjE,OAAO,CAAC,WAAW,CAAoB;IAEvC,OAAO,CAAC,MAAM,CAAyC;;IAQvC,iBAAiB,IAAI,IAAI;cAUtB,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAc5E;;;OAGG;IACI,iBAAiB,IAAI,IAAI;IAIhC;;OAEG;IACI,wBAAwB,CAC7B,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,OAAO,EAAE,iBAAiB,GACzB,IAAI;IAIP;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,uBAAuB;YASjB,cAAc;IAgC5B,8BAA8B;IAC9B,OAAO,CAAC,WAAW;cAKA,MAAM,IAAI,cAAc;CAmC5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,YAAY,EAAE,gBAAgB,CAAC;KAChC;CACF"}
1
+ {"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../../../src/elements/slider/slider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC1E,OAAO,EAAQ,UAAU,EAAW,MAAM,KAAK,CAAC;AAQhD,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAGtB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,YAAY,CAAC;;AAEpB;;;;;;GAMG;AACH,qBAIa,gBAAiB,SAAQ,qBAAoD;IACxF,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,gBAAuB,MAAM;;MAElB;IAEX;;;OAGG;IACH,IACoB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAQ7C;IACD,IAAoB,KAAK,IAAI,MAAM,CAElC;IAED,oDAAoD;IACpD,IACW,aAAa,CAAC,KAAK,EAAE,MAAM,EAErC;IACD,IAAW,aAAa,IAAI,MAAM,GAAG,IAAI,CAExC;IAED,+DAA+D;IAC/D,IACW,GAAG,CAAC,KAAK,EAAE,MAAM,EAO3B;IACD,IAAW,GAAG,IAAI,MAAM,CAEvB;IACD,OAAO,CAAC,IAAI,CAAe;IAE3B,+DAA+D;IAC/D,IACW,GAAG,CAAC,KAAK,EAAE,MAAM,EAO3B;IACD,IAAW,GAAG,IAAI,MAAM,CAEvB;IACD,OAAO,CAAC,IAAI,CAAiB;IAE7B;;;OAGG;IACiC,QAAQ,CAAC,EAAE,OAAO,CAAS;IAE/D,6FAA6F;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEjE,2FAA2F;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IAE7D;;;OAGG;IACM,OAAO,CAAC,cAAc,CAAK;IAEpC;;OAEG;IACH,OAAO,CAAC,UAAU,CAGf;IAEH,iEAAiE;IACjE,OAAO,CAAC,WAAW,CAAoB;IAEvC,OAAO,CAAC,MAAM,CAAyC;;IAQvC,iBAAiB,IAAI,IAAI;cAUtB,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAc5E;;;OAGG;IACI,iBAAiB,IAAI,IAAI;IAIhC;;OAEG;IACI,wBAAwB,CAC7B,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,OAAO,EAAE,iBAAiB,GACzB,IAAI;cAIY,eAAe,IAAI,IAAI;IAI1C;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,uBAAuB;YASjB,cAAc;IAgC5B,8BAA8B;IAC9B,OAAO,CAAC,WAAW;cAKA,MAAM,IAAI,cAAc;CAmC5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,YAAY,EAAE,gBAAgB,CAAC;KAChC;CACF"}
@@ -236,6 +236,9 @@ let SbbSliderElement = class extends SbbDisabledMixin(SbbFormAssociatedMixin(Lit
236
236
  formStateRestoreCallback(state2, _reason) {
237
237
  this.value = state2;
238
238
  }
239
+ updateFormValue() {
240
+ this.internals.setFormValue(this.value);
241
+ }
239
242
  /**
240
243
  * If no value is provided, default is the middle point between min and max
241
244
  * (see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/range#value)
@@ -364,4 +367,4 @@ SbbSliderElement = __decorateClass([
364
367
  export {
365
368
  SbbSliderElement
366
369
  };
367
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2xpZGVyL3NsaWRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBQcm9wZXJ0eVZhbHVlcywgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuaW1wb3J0IHsgc3R5bGVNYXAgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9zdHlsZS1tYXAuanMnO1xuXG5pbXBvcnQgeyBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIgfSBmcm9tICcuLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IGhvc3RBdHRyaWJ1dGVzIH0gZnJvbSAnLi4vY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgZm9yd2FyZEV2ZW50VG9Ib3N0IH0gZnJvbSAnLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQge1xuICB0eXBlIEZvcm1SZXN0b3JlUmVhc29uLFxuICB0eXBlIEZvcm1SZXN0b3JlU3RhdGUsXG4gIFNiYkRpc2FibGVkTWl4aW4sXG4gIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4sXG59IGZyb20gJy4uL2NvcmUvbWl4aW5zLmpzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vc2xpZGVyLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vaWNvbi5qcyc7XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYW4gaW5wdXQga25vYiB0aGF0IGNhbiBiZSBtb3ZlZCBpbiBhIHJhbmdlLlxuICpcbiAqIEBzbG90IHByZWZpeCAtIFVzZSB0aGlzIHNsb3QgdG8gcmVuZGVyIGFuIGljb24gb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgaW5wdXQuXG4gKiBAc2xvdCBzdWZmaXggLSBVc2UgdGhpcyBzbG90IHRvIHJlbmRlciBhbiBpY29uIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBpbnB1dC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGRpZENoYW5nZSAtIERlcHJlY2F0ZWQuIHVzZWQgZm9yIFJlYWN0LiBXaWxsIHByb2JhYmx5IGJlIHJlbW92ZWQgb25jZSBSZWFjdCAxOSBpcyBhdmFpbGFibGUuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdzYmItc2xpZGVyJylcbkBob3N0QXR0cmlidXRlcyh7XG4gIHRhYmluZGV4OiAnMCcsXG59KVxuZXhwb3J0IGNsYXNzIFNiYlNsaWRlckVsZW1lbnQgZXh0ZW5kcyBTYmJEaXNhYmxlZE1peGluKFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4oTGl0RWxlbWVudCkpIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGRpZENoYW5nZTogJ2RpZENoYW5nZScsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqXG4gICAqIFZhbHVlIG9mIHRoZSBmb3JtIGVsZW1lbnQuXG4gICAqIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBkZWZhdWx0IGlzIHRoZSBtaWRkbGUgcG9pbnQgYmV0d2VlbiBtaW4gYW5kIG1heC5cbiAgICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgdmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICBpZiAodGhpcy5faXNWYWxpZE51bWJlcih2YWx1ZSkpIHtcbiAgICAgIHN1cGVyLnZhbHVlID0gdGhpcy5fYm91bmRCZXR3ZWVuTWluTWF4KHZhbHVlISk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLnZhbHVlID0gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgfVxuICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFWYWx1ZU5vdyA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5fY2FsY3VsYXRlVmFsdWVGcmFjdGlvbigpO1xuICB9XG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VwZXIudmFsdWUhO1xuICB9XG5cbiAgLyoqIE51bWVyaWMgdmFsdWUgZm9yIHRoZSBpbm5lciBIVE1MSW5wdXRFbGVtZW50LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICd2YWx1ZS1hcy1udW1iZXInLCB0eXBlOiBOdW1iZXIgfSlcbiAgcHVibGljIHNldCB2YWx1ZUFzTnVtYmVyKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU/LnRvU3RyaW5nKCk7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZUFzTnVtYmVyKCk6IG51bWJlciB8IG51bGwge1xuICAgIHJldHVybiBOdW1iZXIodGhpcy52YWx1ZSk7XG4gIH1cblxuICAvKiogTWluaW11bSBhY2NlcHRhYmxlIHZhbHVlIGZvciB0aGUgaW5uZXIgSFRNTElucHV0RWxlbWVudC4gKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCBtaW4odmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5faXNWYWxpZE51bWJlcih2YWx1ZSEpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWluID0gdmFsdWU7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuX2JvdW5kQmV0d2Vlbk1pbk1heCh0aGlzLnZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG1pbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9taW47XG4gIH1cbiAgcHJpdmF0ZSBfbWluOiBzdHJpbmcgPSAnMCc7XG5cbiAgLyoqIE1heGltdW0gYWNjZXB0YWJsZSB2YWx1ZSBmb3IgdGhlIGlubmVyIEhUTUxJbnB1dEVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgbWF4KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuX2lzVmFsaWROdW1iZXIodmFsdWUhKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21heCA9IHZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLl9ib3VuZEJldHdlZW5NaW5NYXgodGhpcy52YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBtYXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xuICB9XG4gIHByaXZhdGUgX21heDogc3RyaW5nID0gJzEwMCc7XG5cbiAgLyoqXG4gICAqIFJlYWRvbmx5IHN0YXRlIGZvciB0aGUgaW5uZXIgSFRNTElucHV0RWxlbWVudC5cbiAgICogU2luY2UgdGhlIGlucHV0IHJhbmdlIGRvZXMgbm90IGFsbG93IHRoaXMgYXR0cmlidXRlLCBpdCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBgZGlzYWJsZWRgIG9uZS5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIHJlYWRvbmx5PzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBOYW1lIG9mIHRoZSBpY29uIGF0IGNvbXBvbmVudCdzIHN0YXJ0LCB3aGljaCB3aWxsIGJlIGZvcndhcmQgdG8gdGhlIG5lc3RlZCBgc2JiLWljb25gLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdzdGFydC1pY29uJyB9KSBwdWJsaWMgc3RhcnRJY29uPzogc3RyaW5nO1xuXG4gIC8qKiBOYW1lIG9mIHRoZSBpY29uIGF0IGNvbXBvbmVudCdzIGVuZCwgd2hpY2ggd2lsbCBiZSBmb3J3YXJkIHRvIHRoZSBuZXN0ZWQgYHNiYi1pY29uYC4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZW5kLWljb24nIH0pIHB1YmxpYyBlbmRJY29uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmF0aW8gYmV0d2VlbiB0aGUgYWJzb2x1dGUgdmFsdWUgYW5kIHRoZSB2YWxpZGl0eSBpbnRlcnZhbC5cbiAgICogRS5nLiBnaXZlbiBgbWluPTBgLCBgbWF4PTEwMGAgYW5kIGB2YWx1ZT01MGAsIHRoZW4gYF92YWx1ZUZyYWN0aW9uPTAuNWBcbiAgICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgX3ZhbHVlRnJhY3Rpb24gPSAwO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBvbmx5IHVzZWQgZm9yIFJlYWN0LiBXaWxsIHByb2JhYmx5IGJlIHJlbW92ZWQgb25jZSBSZWFjdCAxOSBpcyBhdmFpbGFibGUuXG4gICAqL1xuICBwcml2YXRlIF9kaWRDaGFuZ2U6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIodGhpcywgU2JiU2xpZGVyRWxlbWVudC5ldmVudHMuZGlkQ2hhbmdlLCB7XG4gICAgYnViYmxlczogdHJ1ZSxcbiAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICB9KTtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBpbm5lciBIVE1MSW5wdXRFbGVtZW50IHdpdGggdHlwZT0ncmFuZ2UnLiAqL1xuICBwcml2YXRlIF9yYW5nZUlucHV0ITogSFRNTElucHV0RWxlbWVudDtcblxuICBwcml2YXRlIF9hYm9ydCA9IG5ldyBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIodGhpcyk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHRoaXMuaW50ZXJuYWxzLnJvbGUgPSAnc2xpZGVyJztcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuX2Fib3J0LnNpZ25hbDtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4gdGhpcy5faGFuZGxlS2V5ZG93bihlKSwgeyBzaWduYWwgfSk7XG5cbiAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLl9nZXREZWZhdWx0VmFsdWUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ21pbicpKSB7XG4gICAgICB0aGlzLmludGVybmFscy5hcmlhVmFsdWVNaW4gPSB0aGlzLm1pbjtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbWF4JykpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFWYWx1ZU1heCA9IHRoaXMubWF4O1xuICAgIH1cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdyZWFkb25seScpKSB7XG4gICAgICB0aGlzLmludGVybmFscy5hcmlhUmVhZE9ubHkgPSBCb29sZWFuKHRoaXMucmVhZG9ubHkpLnRvU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXNldCB2YWx1ZSBpcyB0aGUgYXR0cmlidXRlIHZhbHVlICh0aGUgc2V0dXAgdmFsdWUpLiBJZiBub3QgcHJlc2VudCwgY2FsY3VsYXRlcyB0aGUgZGVmYXVsdC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCd2YWx1ZScpID8/IHRoaXMuX2dldERlZmF1bHRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhcbiAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgX3JlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBzdGF0ZSBhcyBzdHJpbmcgfCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqICBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgZGVmYXVsdCBpcyB0aGUgbWlkZGxlIHBvaW50IGJldHdlZW4gbWluIGFuZCBtYXhcbiAgICogIChzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0L3JhbmdlI3ZhbHVlKVxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0RGVmYXVsdFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICgrdGhpcy5taW4gKyAoK3RoaXMubWF4IC0gK3RoaXMubWluKSAvIDIpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIF9pc1ZhbGlkTnVtYmVyKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdmFsdWUgJiYgIWlzTmFOKE51bWJlcih2YWx1ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RyYWlucyB0aGUgdmFsdWUgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXhcbiAgICovXG4gIHByaXZhdGUgX2JvdW5kQmV0d2Vlbk1pbk1heCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoK3RoaXMubWluLCBNYXRoLm1pbigrdGhpcy5tYXgsICt2YWx1ZSkpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIF9jYWxjdWxhdGVWYWx1ZUZyYWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZUFzTnVtYmVyITtcbiAgICBjb25zdCBtaW4gPSArdGhpcy5taW47XG4gICAgY29uc3QgbWF4ID0gK3RoaXMubWF4O1xuXG4gICAgY29uc3QgbWF0aEZyYWN0aW9uOiBudW1iZXIgPSAodmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbik7XG4gICAgdGhpcy5fdmFsdWVGcmFjdGlvbiA9IGlzTmFOKG1hdGhGcmFjdGlvbikgPyAwIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgbWF0aEZyYWN0aW9uKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9oYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGV2ZW50LmtleSAhPT0gJ1RhYicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnSG9tZScpIHtcbiAgICAgIHRoaXMuX3JhbmdlSW5wdXQudmFsdWUgPSB0aGlzLm1pbjtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VuZCcpIHtcbiAgICAgIHRoaXMuX3JhbmdlSW5wdXQudmFsdWUgPSB0aGlzLm1heDtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgdGhpcy5fcmFuZ2VJbnB1dC5zdGVwRG93bigpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIHRoaXMuX3JhbmdlSW5wdXQuc3RlcFVwKCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdQYWdlRG93bicpIHtcbiAgICAgIHRoaXMuX3JhbmdlSW5wdXQuc3RlcERvd24oKCt0aGlzLm1heCAtICt0aGlzLm1pbikgLyAxMCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdQYWdlVXAnKSB7XG4gICAgICB0aGlzLl9yYW5nZUlucHV0LnN0ZXBVcCgoK3RoaXMubWF4IC0gK3RoaXMubWluKSAvIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFdlIGhhdmUgdG8gbWFudWFsbHkgZmlyZSBldmVudHMgYmVjYXVzZSBwcm9ncmFtbWF0aWMgY2hhbmdlcyBkb24ndCB0cmlnZ2VyIHRoZW1cbiAgICB0aGlzLl9yYW5nZUlucHV0LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgSW5wdXRFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pLFxuICAgICk7XG4gICAgdGhpcy5fcmFuZ2VJbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgfVxuXG4gIC8qKiBFbWl0cyB0aGUgY2hhbmdlIGV2ZW50LiAqL1xuICBwcml2YXRlIF9lbWl0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGZvcndhcmRFdmVudFRvSG9zdChldmVudCwgdGhpcyk7XG4gICAgdGhpcy5fZGlkQ2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1zbGlkZXJfX2hlaWdodC1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zbGlkZXJfX3dyYXBwZXJcIj5cbiAgICAgICAgICA8c2xvdCBuYW1lPVwicHJlZml4XCI+XG4gICAgICAgICAgICAke3RoaXMuc3RhcnRJY29uID8gaHRtbGA8c2JiLWljb24gbmFtZT1cIiR7dGhpcy5zdGFydEljb259XCI+PC9zYmItaWNvbj5gIDogbm90aGluZ31cbiAgICAgICAgICA8L3Nsb3Q+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzYmItc2xpZGVyX19jb250YWluZXJcIlxuICAgICAgICAgICAgc3R5bGU9JHtzdHlsZU1hcCh7ICctLXNiYi1zbGlkZXItdmFsdWUtZnJhY3Rpb24nOiB0aGlzLl92YWx1ZUZyYWN0aW9uLnRvU3RyaW5nKCkgfSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICBtaW49JHt0aGlzLm1pbn1cbiAgICAgICAgICAgICAgbWF4PSR7dGhpcy5tYXh9XG4gICAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seX1cbiAgICAgICAgICAgICAgdmFsdWU9JHt0aGlzLnZhbHVlIHx8IG5vdGhpbmd9XG4gICAgICAgICAgICAgIGNsYXNzPVwic2JiLXNsaWRlcl9fcmFuZ2UtaW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFuZ2VcIlxuICAgICAgICAgICAgICBAY2hhbmdlPSR7KGV2ZW50OiBFdmVudCkgPT4gdGhpcy5fZW1pdENoYW5nZShldmVudCl9XG4gICAgICAgICAgICAgIEBpbnB1dD0keygpID0+ICh0aGlzLnZhbHVlID0gdGhpcy5fcmFuZ2VJbnB1dC52YWx1ZSl9XG4gICAgICAgICAgICAgICR7cmVmKChpbnB1dD86IEVsZW1lbnQpID0+ICh0aGlzLl9yYW5nZUlucHV0ID0gaW5wdXQgYXMgSFRNTElucHV0RWxlbWVudCkpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2xpZGVyX19saW5lXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2xpZGVyX19zZWxlY3RlZC1saW5lXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2xpZGVyX19rbm9iXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNsb3QgbmFtZT1cInN1ZmZpeFwiPlxuICAgICAgICAgICAgJHt0aGlzLmVuZEljb24gPyBodG1sYDxzYmItaWNvbiBuYW1lPVwiJHt0aGlzLmVuZEljb259XCI+PC9zYmItaWNvbj5gIDogbm90aGluZ31cbiAgICAgICAgICA8L3Nsb3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXNsaWRlcic6IFNiYlNsaWRlckVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJzdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0JPLElBQU0sbUJBQU4sY0FBK0IsaUJBQWlCLHVCQUF1QixVQUFVLENBQUMsRUFBRTtBQUFBLEVBOEZsRixjQUFjO0FBQ2I7QUFqRFIsU0FBUSxPQUFlO0FBZXZCLFNBQVEsT0FBZTtBQU1NLFNBQU8sV0FBcUI7QUFZaEQsU0FBUSxpQkFBaUI7QUFLbEMsU0FBUSxhQUEyQixJQUFJLGFBQWEsTUFBTSxpQkFBaUIsT0FBTyxXQUFXO0FBQUEsTUFDM0YsU0FBUztBQUFBLE1BQ1QsWUFBWTtBQUFBLElBQUEsQ0FDYjtBQUtPLFNBQUEsU0FBUyxJQUFJLDRCQUE0QixJQUFJO0FBS25ELFNBQUssVUFBVSxPQUFPO0FBQUEsRUFDeEI7QUFBQSxFQXZGQSxJQUFvQixNQUFNLE9BQXNCO0FBQzFDLFFBQUEsS0FBSyxlQUFlLEtBQUssR0FBRztBQUN4QixZQUFBLFFBQVEsS0FBSyxvQkFBb0IsS0FBTTtBQUFBLElBQUEsT0FDeEM7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
370
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2xpZGVyL3NsaWRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBQcm9wZXJ0eVZhbHVlcywgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuaW1wb3J0IHsgc3R5bGVNYXAgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9zdHlsZS1tYXAuanMnO1xuXG5pbXBvcnQgeyBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIgfSBmcm9tICcuLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IGhvc3RBdHRyaWJ1dGVzIH0gZnJvbSAnLi4vY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgZm9yd2FyZEV2ZW50VG9Ib3N0IH0gZnJvbSAnLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQge1xuICB0eXBlIEZvcm1SZXN0b3JlUmVhc29uLFxuICB0eXBlIEZvcm1SZXN0b3JlU3RhdGUsXG4gIFNiYkRpc2FibGVkTWl4aW4sXG4gIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4sXG59IGZyb20gJy4uL2NvcmUvbWl4aW5zLmpzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vc2xpZGVyLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vaWNvbi5qcyc7XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYW4gaW5wdXQga25vYiB0aGF0IGNhbiBiZSBtb3ZlZCBpbiBhIHJhbmdlLlxuICpcbiAqIEBzbG90IHByZWZpeCAtIFVzZSB0aGlzIHNsb3QgdG8gcmVuZGVyIGFuIGljb24gb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgaW5wdXQuXG4gKiBAc2xvdCBzdWZmaXggLSBVc2UgdGhpcyBzbG90IHRvIHJlbmRlciBhbiBpY29uIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBpbnB1dC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGRpZENoYW5nZSAtIERlcHJlY2F0ZWQuIHVzZWQgZm9yIFJlYWN0LiBXaWxsIHByb2JhYmx5IGJlIHJlbW92ZWQgb25jZSBSZWFjdCAxOSBpcyBhdmFpbGFibGUuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdzYmItc2xpZGVyJylcbkBob3N0QXR0cmlidXRlcyh7XG4gIHRhYmluZGV4OiAnMCcsXG59KVxuZXhwb3J0IGNsYXNzIFNiYlNsaWRlckVsZW1lbnQgZXh0ZW5kcyBTYmJEaXNhYmxlZE1peGluKFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4oTGl0RWxlbWVudCkpIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGRpZENoYW5nZTogJ2RpZENoYW5nZScsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqXG4gICAqIFZhbHVlIG9mIHRoZSBmb3JtIGVsZW1lbnQuXG4gICAqIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBkZWZhdWx0IGlzIHRoZSBtaWRkbGUgcG9pbnQgYmV0d2VlbiBtaW4gYW5kIG1heC5cbiAgICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgdmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICBpZiAodGhpcy5faXNWYWxpZE51bWJlcih2YWx1ZSkpIHtcbiAgICAgIHN1cGVyLnZhbHVlID0gdGhpcy5fYm91bmRCZXR3ZWVuTWluTWF4KHZhbHVlISk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLnZhbHVlID0gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgfVxuICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFWYWx1ZU5vdyA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5fY2FsY3VsYXRlVmFsdWVGcmFjdGlvbigpO1xuICB9XG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VwZXIudmFsdWUhO1xuICB9XG5cbiAgLyoqIE51bWVyaWMgdmFsdWUgZm9yIHRoZSBpbm5lciBIVE1MSW5wdXRFbGVtZW50LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICd2YWx1ZS1hcy1udW1iZXInLCB0eXBlOiBOdW1iZXIgfSlcbiAgcHVibGljIHNldCB2YWx1ZUFzTnVtYmVyKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU/LnRvU3RyaW5nKCk7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZUFzTnVtYmVyKCk6IG51bWJlciB8IG51bGwge1xuICAgIHJldHVybiBOdW1iZXIodGhpcy52YWx1ZSk7XG4gIH1cblxuICAvKiogTWluaW11bSBhY2NlcHRhYmxlIHZhbHVlIGZvciB0aGUgaW5uZXIgSFRNTElucHV0RWxlbWVudC4gKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCBtaW4odmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5faXNWYWxpZE51bWJlcih2YWx1ZSEpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWluID0gdmFsdWU7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuX2JvdW5kQmV0d2Vlbk1pbk1heCh0aGlzLnZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG1pbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9taW47XG4gIH1cbiAgcHJpdmF0ZSBfbWluOiBzdHJpbmcgPSAnMCc7XG5cbiAgLyoqIE1heGltdW0gYWNjZXB0YWJsZSB2YWx1ZSBmb3IgdGhlIGlubmVyIEhUTUxJbnB1dEVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgbWF4KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuX2lzVmFsaWROdW1iZXIodmFsdWUhKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21heCA9IHZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLl9ib3VuZEJldHdlZW5NaW5NYXgodGhpcy52YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBtYXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xuICB9XG4gIHByaXZhdGUgX21heDogc3RyaW5nID0gJzEwMCc7XG5cbiAgLyoqXG4gICAqIFJlYWRvbmx5IHN0YXRlIGZvciB0aGUgaW5uZXIgSFRNTElucHV0RWxlbWVudC5cbiAgICogU2luY2UgdGhlIGlucHV0IHJhbmdlIGRvZXMgbm90IGFsbG93IHRoaXMgYXR0cmlidXRlLCBpdCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBgZGlzYWJsZWRgIG9uZS5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIHJlYWRvbmx5PzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBOYW1lIG9mIHRoZSBpY29uIGF0IGNvbXBvbmVudCdzIHN0YXJ0LCB3aGljaCB3aWxsIGJlIGZvcndhcmQgdG8gdGhlIG5lc3RlZCBgc2JiLWljb25gLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdzdGFydC1pY29uJyB9KSBwdWJsaWMgc3RhcnRJY29uPzogc3RyaW5nO1xuXG4gIC8qKiBOYW1lIG9mIHRoZSBpY29uIGF0IGNvbXBvbmVudCdzIGVuZCwgd2hpY2ggd2lsbCBiZSBmb3J3YXJkIHRvIHRoZSBuZXN0ZWQgYHNiYi1pY29uYC4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZW5kLWljb24nIH0pIHB1YmxpYyBlbmRJY29uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmF0aW8gYmV0d2VlbiB0aGUgYWJzb2x1dGUgdmFsdWUgYW5kIHRoZSB2YWxpZGl0eSBpbnRlcnZhbC5cbiAgICogRS5nLiBnaXZlbiBgbWluPTBgLCBgbWF4PTEwMGAgYW5kIGB2YWx1ZT01MGAsIHRoZW4gYF92YWx1ZUZyYWN0aW9uPTAuNWBcbiAgICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgX3ZhbHVlRnJhY3Rpb24gPSAwO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBvbmx5IHVzZWQgZm9yIFJlYWN0LiBXaWxsIHByb2JhYmx5IGJlIHJlbW92ZWQgb25jZSBSZWFjdCAxOSBpcyBhdmFpbGFibGUuXG4gICAqL1xuICBwcml2YXRlIF9kaWRDaGFuZ2U6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIodGhpcywgU2JiU2xpZGVyRWxlbWVudC5ldmVudHMuZGlkQ2hhbmdlLCB7XG4gICAgYnViYmxlczogdHJ1ZSxcbiAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICB9KTtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBpbm5lciBIVE1MSW5wdXRFbGVtZW50IHdpdGggdHlwZT0ncmFuZ2UnLiAqL1xuICBwcml2YXRlIF9yYW5nZUlucHV0ITogSFRNTElucHV0RWxlbWVudDtcblxuICBwcml2YXRlIF9hYm9ydCA9IG5ldyBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIodGhpcyk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHRoaXMuaW50ZXJuYWxzLnJvbGUgPSAnc2xpZGVyJztcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuX2Fib3J0LnNpZ25hbDtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4gdGhpcy5faGFuZGxlS2V5ZG93bihlKSwgeyBzaWduYWwgfSk7XG5cbiAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLl9nZXREZWZhdWx0VmFsdWUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ21pbicpKSB7XG4gICAgICB0aGlzLmludGVybmFscy5hcmlhVmFsdWVNaW4gPSB0aGlzLm1pbjtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbWF4JykpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFWYWx1ZU1heCA9IHRoaXMubWF4O1xuICAgIH1cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdyZWFkb25seScpKSB7XG4gICAgICB0aGlzLmludGVybmFscy5hcmlhUmVhZE9ubHkgPSBCb29sZWFuKHRoaXMucmVhZG9ubHkpLnRvU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXNldCB2YWx1ZSBpcyB0aGUgYXR0cmlidXRlIHZhbHVlICh0aGUgc2V0dXAgdmFsdWUpLiBJZiBub3QgcHJlc2VudCwgY2FsY3VsYXRlcyB0aGUgZGVmYXVsdC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCd2YWx1ZScpID8/IHRoaXMuX2dldERlZmF1bHRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhcbiAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgX3JlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBzdGF0ZSBhcyBzdHJpbmcgfCBudWxsO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmludGVybmFscy5zZXRGb3JtVmFsdWUodGhpcy52YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBkZWZhdWx0IGlzIHRoZSBtaWRkbGUgcG9pbnQgYmV0d2VlbiBtaW4gYW5kIG1heFxuICAgKiAgKHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQvcmFuZ2UjdmFsdWUpXG4gICAqL1xuICBwcml2YXRlIF9nZXREZWZhdWx0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKCt0aGlzLm1pbiArICgrdGhpcy5tYXggLSArdGhpcy5taW4pIC8gMikudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzVmFsaWROdW1iZXIodmFsdWU6IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF2YWx1ZSAmJiAhaXNOYU4oTnVtYmVyKHZhbHVlKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdHJhaW5zIHRoZSB2YWx1ZSBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heFxuICAgKi9cbiAgcHJpdmF0ZSBfYm91bmRCZXR3ZWVuTWluTWF4KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBNYXRoLm1heCgrdGhpcy5taW4sIE1hdGgubWluKCt0aGlzLm1heCwgK3ZhbHVlKSkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVZhbHVlRnJhY3Rpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlQXNOdW1iZXIhO1xuICAgIGNvbnN0IG1pbiA9ICt0aGlzLm1pbjtcbiAgICBjb25zdCBtYXggPSArdGhpcy5tYXg7XG5cbiAgICBjb25zdCBtYXRoRnJhY3Rpb246IG51bWJlciA9ICh2YWx1ZSAtIG1pbikgLyAobWF4IC0gbWluKTtcbiAgICB0aGlzLl92YWx1ZUZyYWN0aW9uID0gaXNOYU4obWF0aEZyYWN0aW9uKSA/IDAgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBtYXRoRnJhY3Rpb24pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSAnVGFiJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdIb21lJykge1xuICAgICAgdGhpcy5fcmFuZ2VJbnB1dC52YWx1ZSA9IHRoaXMubWluO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRW5kJykge1xuICAgICAgdGhpcy5fcmFuZ2VJbnB1dC52YWx1ZSA9IHRoaXMubWF4O1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICB0aGlzLl9yYW5nZUlucHV0LnN0ZXBEb3duKCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgdGhpcy5fcmFuZ2VJbnB1dC5zdGVwVXAoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ1BhZ2VEb3duJykge1xuICAgICAgdGhpcy5fcmFuZ2VJbnB1dC5zdGVwRG93bigoK3RoaXMubWF4IC0gK3RoaXMubWluKSAvIDEwKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ1BhZ2VVcCcpIHtcbiAgICAgIHRoaXMuX3JhbmdlSW5wdXQuc3RlcFVwKCgrdGhpcy5tYXggLSArdGhpcy5taW4pIC8gMTApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV2UgaGF2ZSB0byBtYW51YWxseSBmaXJlIGV2ZW50cyBiZWNhdXNlIHByb2dyYW1tYXRpYyBjaGFuZ2VzIGRvbid0IHRyaWdnZXIgdGhlbVxuICAgIHRoaXMuX3JhbmdlSW5wdXQuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSksXG4gICAgKTtcbiAgICB0aGlzLl9yYW5nZUlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICB9XG5cbiAgLyoqIEVtaXRzIHRoZSBjaGFuZ2UgZXZlbnQuICovXG4gIHByaXZhdGUgX2VtaXRDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZm9yd2FyZEV2ZW50VG9Ib3N0KGV2ZW50LCB0aGlzKTtcbiAgICB0aGlzLl9kaWRDaGFuZ2UuZW1pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXNsaWRlcl9faGVpZ2h0LWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNsaWRlcl9fd3JhcHBlclwiPlxuICAgICAgICAgIDxzbG90IG5hbWU9XCJwcmVmaXhcIj5cbiAgICAgICAgICAgICR7dGhpcy5zdGFydEljb24gPyBodG1sYDxzYmItaWNvbiBuYW1lPVwiJHt0aGlzLnN0YXJ0SWNvbn1cIj48L3NiYi1pY29uPmAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvc2xvdD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNiYi1zbGlkZXJfX2NvbnRhaW5lclwiXG4gICAgICAgICAgICBzdHlsZT0ke3N0eWxlTWFwKHsgJy0tc2JiLXNsaWRlci12YWx1ZS1mcmFjdGlvbic6IHRoaXMuX3ZhbHVlRnJhY3Rpb24udG9TdHJpbmcoKSB9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgIG1pbj0ke3RoaXMubWlufVxuICAgICAgICAgICAgICBtYXg9JHt0aGlzLm1heH1cbiAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZCB8fCB0aGlzLmZvcm1EaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5fVxuICAgICAgICAgICAgICB2YWx1ZT0ke3RoaXMudmFsdWUgfHwgbm90aGluZ31cbiAgICAgICAgICAgICAgY2xhc3M9XCJzYmItc2xpZGVyX19yYW5nZS1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICAgICAgICAgIEBjaGFuZ2U9JHsoZXZlbnQ6IEV2ZW50KSA9PiB0aGlzLl9lbWl0Q2hhbmdlKGV2ZW50KX1cbiAgICAgICAgICAgICAgQGlucHV0PSR7KCkgPT4gKHRoaXMudmFsdWUgPSB0aGlzLl9yYW5nZUlucHV0LnZhbHVlKX1cbiAgICAgICAgICAgICAgJHtyZWYoKGlucHV0PzogRWxlbWVudCkgPT4gKHRoaXMuX3JhbmdlSW5wdXQgPSBpbnB1dCBhcyBIVE1MSW5wdXRFbGVtZW50KSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zbGlkZXJfX2xpbmVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zbGlkZXJfX3NlbGVjdGVkLWxpbmVcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zbGlkZXJfX2tub2JcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2xvdCBuYW1lPVwic3VmZml4XCI+XG4gICAgICAgICAgICAke3RoaXMuZW5kSWNvbiA/IGh0bWxgPHNiYi1pY29uIG5hbWU9XCIke3RoaXMuZW5kSWNvbn1cIj48L3NiYi1pY29uPmAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvc2xvdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItc2xpZGVyJzogU2JiU2xpZGVyRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbInN0YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErQk8sSUFBTSxtQkFBTixjQUErQixpQkFBaUIsdUJBQXVCLFVBQVUsQ0FBQyxFQUFFO0FBQUEsRUE4RmxGLGNBQWM7QUFDYjtBQWpEUixTQUFRLE9BQWU7QUFldkIsU0FBUSxPQUFlO0FBTU0sU0FBTyxXQUFxQjtBQVloRCxTQUFRLGlCQUFpQjtBQUtsQyxTQUFRLGFBQTJCLElBQUksYUFBYSxNQUFNLGlCQUFpQixPQUFPLFdBQVc7QUFBQSxNQUMzRixTQUFTO0FBQUEsTUFDVCxZQUFZO0FBQUEsSUFBQSxDQUNiO0FBS08sU0FBQSxTQUFTLElBQUksNEJBQTRCLElBQUk7QUFLbkQsU0FBSyxVQUFVLE9BQU87QUFBQSxFQUN4QjtBQUFBLEVB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
@@ -1,11 +1,14 @@
1
- import { CSSResultGroup, TemplateResult, LitElement } from 'lit';
1
+ import { CSSResultGroup, LitElement, TemplateResult } from 'lit';
2
+ import { FormRestoreReason, FormRestoreState } from '../core/mixins.js';
2
3
  export type DOMEvent = globalThis.Event;
3
- declare const SbbFileSelectorElement_base: import('../core/mixins.js').AbstractConstructor<import('../core/mixins.js').SbbDisabledMixinType> & typeof LitElement;
4
+ declare const SbbFileSelectorElement_base: import('../core/mixins.js').AbstractConstructor<import('../core/mixins.js').SbbDisabledMixinType> & import('../core/mixins.js').AbstractConstructor<import('../core/mixins.js').SbbFormAssociatedMixinType<string>> & typeof LitElement;
4
5
  /**
5
6
  * It allows to select one or more file from storage devices and display them.
6
7
  *
7
8
  * @slot error - Use this to provide a `sbb-form-error` to show an error message.
8
9
  * @event {CustomEvent<File[]>} fileChanged - An event which is emitted each time the file list changes.
10
+ * @event change - An event which is emitted each time the user modifies the value. Unlike the input event, the change event is not necessarily fired for each alteration to an element's value
11
+ * @event input - An event which is emitted each time the value changes as a direct result of a user action.
9
12
  */
10
13
  export declare class SbbFileSelectorElement extends SbbFileSelectorElement_base {
11
14
  static styles: CSSResultGroup;
@@ -26,14 +29,17 @@ export declare class SbbFileSelectorElement extends SbbFileSelectorElement_base
26
29
  titleContent?: string;
27
30
  /** This will be forwarded as aria-label to the native input element. */
28
31
  accessibilityLabel: string | undefined;
29
- /** The list of selected files. */
30
- private _files?;
31
- /** An event which is emitted each time the file list changes. */
32
- private _fileChangedEvent;
32
+ /** The path of the first selected file. Empty string ('') if no file is selected */
33
+ set value(value: string | null);
34
+ get value(): string | null;
33
35
  /**
34
- * Gets the currently selected files.
36
+ * The list of selected files.
35
37
  */
38
+ set files(value: File[]);
36
39
  get files(): File[];
40
+ private _files;
41
+ /** An event which is emitted each time the file list changes. */
42
+ private _fileChangedEvent;
37
43
  private _counter;
38
44
  private _loadButton;
39
45
  private _dragTarget?;
@@ -42,9 +48,12 @@ export declare class SbbFileSelectorElement extends SbbFileSelectorElement_base
42
48
  private _liveRegion;
43
49
  private _language;
44
50
  /**
45
- * @deprecated use 'files' property instead
51
+ * @deprecated use the 'files' property instead
46
52
  */
47
53
  getFiles(): File[];
54
+ formResetCallback(): void;
55
+ formStateRestoreCallback(state: FormRestoreState | null, _reason?: FormRestoreReason): void;
56
+ protected updateFormValue(): void;
48
57
  private _blockEvent;
49
58
  private _checkFileEquality;
50
59
  private _onDragEnter;
@@ -58,6 +67,7 @@ export declare class SbbFileSelectorElement extends SbbFileSelectorElement_base
58
67
  private _removeFile;
59
68
  /** Calculates the correct unit for the file's size. */
60
69
  private _formatFileSize;
70
+ private _updateA11yLiveRegion;
61
71
  private _renderDefaultMode;
62
72
  private _renderDropzoneArea;
63
73
  private _renderFileList;
@@ -1 +1 @@
1
- {"version":3,"file":"file-selector.d.ts","sourceRoot":"","sources":["../../../src/elements/file-selector/file-selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAW,MAAM,KAAK,CAAC;AAoB1C,OAAO,+BAA+B,CAAC;AACvC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,YAAY,CAAC;AAEpB,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC;;AAExC;;;;;GAKG;AACH,qBAEa,sBAAuB,SAAQ,2BAA4B;IACtE,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,gBAAuB,MAAM;;MAElB;IAEX,wDAAwD;IACrC,OAAO,EAAE,SAAS,GAAG,UAAU,CAAa;IAE/D,mCAAmC;IACC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAO;IAE1D,kDAAkD;IACd,QAAQ,EAAE,OAAO,CAAS;IAE9D,+EAA+E;IAExE,YAAY,EAAE,SAAS,GAAG,YAAY,CAAa;IAE1D,qEAAqE;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEnC,iDAAiD;IACA,YAAY,CAAC,EAAE,MAAM,CAAC;IAEvE,wEAAwE;IACjB,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9F,kCAAkC;IACzB,OAAO,CAAC,MAAM,CAAC,CAAS;IAEjC,iEAAiE;IACjE,OAAO,CAAC,iBAAiB,CAGvB;IAEF;;OAEG;IACH,IAAW,KAAK,IAAI,IAAI,EAAE,CAEzB;IAID,OAAO,CAAC,QAAQ,CAAa;IAE7B,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,WAAW,CAAwB;IAE3C,OAAO,CAAC,SAAS,CAAmC;IAEpD;;OAEG;IACI,QAAQ,IAAI,IAAI,EAAE;IAIzB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,WAAW;IAYnB,uDAAuD;IACvD,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,eAAe;cA4BJ,MAAM,IAAI,cAAc;CA2C5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,mBAAmB,EAAE,sBAAsB,CAAC;KAC7C;CACF"}
1
+ {"version":3,"file":"file-selector.d.ts","sourceRoot":"","sources":["../../../src/elements/file-selector/file-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,UAAU,EAAW,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAgBpF,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAGtB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,+BAA+B,CAAC;AACvC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,YAAY,CAAC;AAEpB,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC;;AAExC;;;;;;;GAOG;AACH,qBAEa,sBAAuB,SAAQ,2BAAoD;IAC9F,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,gBAAuB,MAAM;;MAElB;IAEX,wDAAwD;IACrC,OAAO,EAAE,SAAS,GAAG,UAAU,CAAa;IAE/D,mCAAmC;IACC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAO;IAE1D,kDAAkD;IACd,QAAQ,EAAE,OAAO,CAAS;IAE9D,+EAA+E;IAExE,YAAY,EAAE,SAAS,GAAG,YAAY,CAAa;IAE1D,qEAAqE;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEnC,iDAAiD;IACA,YAAY,CAAC,EAAE,MAAM,CAAC;IAEvE,wEAAwE;IACjB,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9F,oFAAoF;IACpF,IACoB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAM7C;IACD,IAAoB,KAAK,IAAI,MAAM,GAAG,IAAI,CAEzC;IAED;;OAEG;IACH,IACW,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAS7B;IACD,IAAW,KAAK,IAAI,IAAI,EAAE,CAEzB;IACD,OAAO,CAAC,MAAM,CAAc;IAE5B,iEAAiE;IACjE,OAAO,CAAC,iBAAiB,CAGvB;IAIF,OAAO,CAAC,QAAQ,CAAa;IAE7B,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,WAAW,CAAwB;IAE3C,OAAO,CAAC,SAAS,CAAmC;IAEpD;;OAEG;IACI,QAAQ,IAAI,IAAI,EAAE;IAIT,iBAAiB,IAAI,IAAI;IAIzB,wBAAwB,CACtC,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,IAAI;cAOY,eAAe,IAAI,IAAI;IAM1C,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,WAAW;IAUnB,uDAAuD;IACvD,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,qBAAqB;IAM7B,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,eAAe;cA4BJ,MAAM,IAAI,cAAc;CA2C5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,mBAAmB,EAAE,sBAAsB,CAAC;KAC7C;CACF"}