@sbb-esta/lyne-elements-dev 4.6.0-dev.1772088473 → 4.6.0-dev.1772094630

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.
@@ -1,28 +1,30 @@
1
- var x = (i) => {
1
+ var D = (i) => {
2
2
  throw TypeError(i);
3
3
  };
4
- var I = (i, a, r) => a.has(i) || x("Cannot " + r);
5
- var d = (i, a, r) => (I(i, a, "read from private field"), r ? r.call(i) : a.get(i)), g = (i, a, r) => a.has(i) ? x("Cannot add the same private member more than once") : a instanceof WeakSet ? a.add(i) : a.set(i, r), m = (i, a, r, p) => (I(i, a, "write to private field"), p ? p.call(i, r) : a.set(i, r), r);
6
- import { __esDecorate as c, __runInitializers as b } from "tslib";
7
- import { css as K, LitElement as L, isServer as A, html as O } from "lit";
8
- import { customElement as W, property as _ } from "lit/decorators.js";
9
- import { isArrowKeyPressed as T, getNextElementIndex as q } from "../../core/a11y.js";
10
- import { SbbLanguageController as F, SbbPropertyWatcherController as M } from "../../core/controllers.js";
11
- import { isLean as V } from "../../core/dom/lean-context.js";
12
- import { i18nSelectionRequired as R, i18nChipGroupInputDescription as $ } from "../../core/i18n.js";
13
- import { SbbRequiredMixin as B, SbbDisabledMixin as N, SbbNegativeMixin as j, SbbFormAssociatedMixin as G, SbbElementInternalsMixin as U } from "../../core/mixins.js";
14
- import { boxSizingStyles as J } from "../../core/styles.js";
15
- import { SbbChipElement as P } from "../chip.js";
16
- const H = K`:host{width:100%;display:flex;flex-wrap:wrap;gap:var(--sbb-chip-group-gap);align-items:center;margin-block:var(--sbb-chip-group-margin-block)}:host(:is(:is(:state(size-s),[state--size-s]),:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: 0}:host(:is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: .375rem .3125rem}@media(min-width:64rem){:host(:is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: .3125rem .1875rem}}:host(:is(:state(without-label),[state--without-label]):is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: 0 .4375rem}@media(min-width:64rem){:host(:is(:state(without-label),[state--without-label]):is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: 0 .3125rem}}:host(:is(:is(:state(size-l),[state--size-l]),:is(:state(size-m),[state--size-m]))){--sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default) 0}@media(min-width:64rem){:host(:is(:is(:state(size-l),[state--size-l]),:is(:state(size-m),[state--size-m]))){--sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large) 0}}:host(:is(:state(without-label),[state--without-label]):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: .1875rem .6875rem}@media(min-width:64rem){:host(:is(:state(without-label),[state--without-label]):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: .1875rem .875rem}}:host(:is(:state(without-label),[state--without-label]):not(:is(:state(empty),[state--empty]),:is(:state(size-s),[state--size-s]),:is(:state(size-m),[state--size-m]),:is(:state(size-l),[state--size-l]))){--sbb-chip-group-margin-block: var(--sbb-chip-group-margin-block-no-label-not-empty)}:host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default) var(--_sbb-chip-group-margin-block-start-default-large)}@media(min-width:64rem){:host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large) var(--_sbb-chip-group-margin-block-start-default-large)}}:host(:not(:is(:state(without-label),[state--without-label]),:is(:state(empty),[state--empty]),:is(:state(size-s),[state--size-s]),:is(:state(size-m),[state--size-m]),:is(:state(size-l),[state--size-l]))){--sbb-chip-group-margin-block: var(--sbb-chip-group-margin-block-with-label-not-empty)}:host(:is(:state(without-label),[state--without-label]):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default) 1rem}@media(min-width:64rem){:host(:is(:state(without-label),[state--without-label]):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large) 1.25rem}}:host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default) .46875rem}@media(min-width:64rem){:host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large) .46875rem}}::slotted(input){flex:1 1 var(--sbb-chip-group-input-min-width);max-height:1.5rem}::slotted(sbb-chip){max-width:100%}`;
17
- let ot = (() => {
18
- var h, u, n;
19
- let i = [W("sbb-chip-group")], a, r = [], p, y = B(N(j(G(U(L))))), f = [], v, z, w = [], k = [], E, C = [], S = [];
20
- return n = class extends y {
4
+ var B = (i, a, r) => a.has(i) || D("Cannot " + r);
5
+ var _ = (i, a, r) => (B(i, a, "read from private field"), r ? r.call(i) : a.get(i)), g = (i, a, r) => a.has(i) ? D("Cannot add the same private member more than once") : a instanceof WeakSet ? a.add(i) : a.set(i, r), u = (i, a, r, p) => (B(i, a, "write to private field"), p ? p.call(i, r) : a.set(i, r), r);
6
+ import { __esDecorate as d, __runInitializers as h } from "tslib";
7
+ import { css as W, LitElement as T, isServer as K, html as F } from "lit";
8
+ import { customElement as q, property as y } from "lit/decorators.js";
9
+ import { isArrowKeyPressed as M, getNextElementIndex as V } from "../../core/a11y.js";
10
+ import { SbbLanguageController as R, SbbPropertyWatcherController as $ } from "../../core/controllers.js";
11
+ import { forceType as N } from "../../core/decorators.js";
12
+ import { isLean as j } from "../../core/dom/lean-context.js";
13
+ import { i18nSelectionRequired as G, i18nChipGroupInputDescription as U } from "../../core/i18n.js";
14
+ import { SbbRequiredMixin as J, SbbDisabledMixin as P, SbbNegativeMixin as H, SbbFormAssociatedMixin as Q, SbbElementInternalsMixin as X } from "../../core/mixins.js";
15
+ import { boxSizingStyles as Y } from "../../core/styles.js";
16
+ import { SbbChipElement as Z } from "../chip.js";
17
+ const tt = W`:host{width:100%;display:flex;flex-wrap:wrap;gap:var(--sbb-chip-group-gap);align-items:center;margin-block:var(--sbb-chip-group-margin-block)}:host(:is(:is(:state(size-s),[state--size-s]),:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: 0}:host(:is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: .375rem .3125rem}@media(min-width:64rem){:host(:is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: .3125rem .1875rem}}:host(:is(:state(without-label),[state--without-label]):is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: 0 .4375rem}@media(min-width:64rem){:host(:is(:state(without-label),[state--without-label]):is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: 0 .3125rem}}:host(:is(:is(:state(size-l),[state--size-l]),:is(:state(size-m),[state--size-m]))){--sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default) 0}@media(min-width:64rem){:host(:is(:is(:state(size-l),[state--size-l]),:is(:state(size-m),[state--size-m]))){--sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large) 0}}:host(:is(:state(without-label),[state--without-label]):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: .1875rem .6875rem}@media(min-width:64rem){:host(:is(:state(without-label),[state--without-label]):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: .1875rem .875rem}}:host(:is(:state(without-label),[state--without-label]):not(:is(:state(empty),[state--empty]),:is(:state(size-s),[state--size-s]),:is(:state(size-m),[state--size-m]),:is(:state(size-l),[state--size-l]))){--sbb-chip-group-margin-block: var(--sbb-chip-group-margin-block-no-label-not-empty)}:host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default) var(--_sbb-chip-group-margin-block-start-default-large)}@media(min-width:64rem){:host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large) var(--_sbb-chip-group-margin-block-start-default-large)}}:host(:not(:is(:state(without-label),[state--without-label]),:is(:state(empty),[state--empty]),:is(:state(size-s),[state--size-s]),:is(:state(size-m),[state--size-m]),:is(:state(size-l),[state--size-l]))){--sbb-chip-group-margin-block: var(--sbb-chip-group-margin-block-with-label-not-empty)}:host(:is(:state(without-label),[state--without-label]):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default) 1rem}@media(min-width:64rem){:host(:is(:state(without-label),[state--without-label]):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large) 1.25rem}}:host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default) .46875rem}@media(min-width:64rem){:host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))){--sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large) .46875rem}}::slotted(input){flex:1 1 var(--sbb-chip-group-input-min-width);max-height:1.5rem}::slotted(sbb-chip){max-width:100%}`;
18
+ let ct = (() => {
19
+ var b, m, c, l;
20
+ let i = [q("sbb-chip-group")], a, r = [], p, f = J(P(H(Q(X(T))))), v = [], z, w, k = [], E = [], C, S = [], x = [], I, O = [], A = [];
21
+ return l = class extends f {
21
22
  constructor() {
22
23
  super();
23
- g(this, h);
24
- g(this, u);
25
- m(this, h, (b(this, f), b(this, w, null))), m(this, u, (b(this, k), b(this, C, ["Enter"]))), this._inputAttributeObserver = (b(this, S), A ? null : new MutationObserver(() => this._reactToInputChanges())), this._language = new F(this), this.addEventListener?.(P.events.requestdelete, (t) => this._deleteChip(t.target)), this.addEventListener?.("keydown", (t) => this._onChipKeyDown(t)), this.addController(new M(this, () => this.closest("sbb-form-field"), {
24
+ g(this, b);
25
+ g(this, m);
26
+ g(this, c);
27
+ u(this, b, (h(this, v), h(this, k, null))), u(this, m, (h(this, E), h(this, S, ["Enter"]))), u(this, c, (h(this, x), h(this, O, !1))), this._inputAttributeObserver = (h(this, A), K ? null : new MutationObserver(() => this._reactToInputChanges())), this._language = new R(this), this.addEventListener?.(Z.events.requestdelete, (t) => this._deleteChip(t.target)), this.addEventListener?.("keydown", (t) => this._onChipKeyDown(t)), this.addController(new $(this, () => this.closest("sbb-form-field"), {
26
28
  size: (t) => this._updateSize(t.size),
27
29
  label: (t) => this._updateLabelState(t),
28
30
  hiddenLabel: (t) => this._updateLabelState(t)
@@ -32,30 +34,37 @@ let ot = (() => {
32
34
  set value(t) {
33
35
  t = t ?? [];
34
36
  const e = this.value, s = [...e];
35
- for (const l of t)
36
- s.includes(l) && s.splice(s.indexOf(l), 1);
37
- s.forEach((l) => this._chipElements().find((D) => D.value === l)?.remove());
37
+ for (const n of t)
38
+ s.includes(n) && s.splice(s.indexOf(n), 1);
39
+ s.forEach((n) => this._chipElements().find((L) => L.value === n)?.remove());
38
40
  const o = [...t];
39
- for (const l of e)
40
- o.includes(l) && o.splice(o.indexOf(l), 1);
41
- o.forEach((l) => this._createChipElement(l));
41
+ for (const n of e)
42
+ o.includes(n) && o.splice(o.indexOf(n), 1);
43
+ o.forEach((n) => this._createChipElement(n));
42
44
  }
43
45
  get value() {
44
46
  return this._chipElements().map((t) => t.value);
45
47
  }
46
48
  /** Function that maps a chip's value to its display value. */
47
49
  get displayWith() {
48
- return d(this, h);
50
+ return _(this, b);
49
51
  }
50
52
  set displayWith(t) {
51
- m(this, h, t);
53
+ u(this, b, t);
52
54
  }
53
55
  /** The array of keys that will trigger a `chipinputtokenend` event. Default `['Enter']` */
54
56
  get separatorKeys() {
55
- return d(this, u);
57
+ return _(this, m);
56
58
  }
57
59
  set separatorKeys(t) {
58
- m(this, u, t);
60
+ u(this, m, t);
61
+ }
62
+ /** Whether to automatically add a chip when the input loses focus if there's a value. */
63
+ get addOnBlur() {
64
+ return _(this, c);
65
+ }
66
+ set addOnBlur(t) {
67
+ u(this, c, t);
59
68
  }
60
69
  _updateLabelState(t) {
61
70
  this.toggleState("without-label", !t.label || t.hiddenLabel);
@@ -85,7 +94,7 @@ let ot = (() => {
85
94
  return super.shouldValidate(t) || t === "required" || t === "value";
86
95
  }
87
96
  validate() {
88
- super.validate(), this.required && this.value.length === 0 ? this.setValidityFlag("valueMissing", R[this._language.current]) : this.removeValidityFlag("valueMissing");
97
+ super.validate(), this.required && this.value.length === 0 ? this.setValidityFlag("valueMissing", G[this._language.current]) : this.removeValidityFlag("valueMissing");
89
98
  }
90
99
  /** Return the list of chip elements **/
91
100
  _chipElements() {
@@ -99,6 +108,9 @@ let ot = (() => {
99
108
  const t = this.querySelector("input");
100
109
  t && t !== this._inputElement && (this._inputAbortController?.abort(), this._inputAttributeObserver?.disconnect(), this._inputElement = t, this._inputAbortController = new AbortController(), this._inputElement.addEventListener("keydown", (e) => this._onInputKeyDown(e), {
101
110
  signal: this._inputAbortController.signal
111
+ }), this._inputElement.addEventListener("blur", () => this._onInputBlur(), {
112
+ signal: this._inputAbortController.signal,
113
+ capture: !0
102
114
  }), this._inputElement.addEventListener("inputAutocomplete", (e) => {
103
115
  this._createChipFromInput("autocomplete", e.detail?.option.value);
104
116
  }, {
@@ -106,7 +118,7 @@ let ot = (() => {
106
118
  }), this._inputAttributeObserver?.observe(this._inputElement, {
107
119
  attributes: !0,
108
120
  attributeFilter: ["readonly", "disabled"]
109
- })), (!this._previousSize || !this.closest("sbb-form-field")) && this._updateSize(V() ? "s" : "m"), this.toggleState("empty", this.value.length === 0), this._reactToInputChanges(), this._updateInputDescription(), this.updateFormValue();
121
+ })), (!this._previousSize || !this.closest("sbb-form-field")) && this._updateSize(j() ? "s" : "m"), this.toggleState("empty", this.value.length === 0), this._reactToInputChanges(), this._updateInputDescription(), this.updateFormValue();
110
122
  }
111
123
  /**
112
124
  * Listen for keyboard events on the chip elements
@@ -114,8 +126,8 @@ let ot = (() => {
114
126
  _onChipKeyDown(t) {
115
127
  const e = t.target;
116
128
  if (e.localName === "sbb-chip") {
117
- if (T(t)) {
118
- const s = this._enabledChipElements(), o = q(t, s.indexOf(e), s.length);
129
+ if (M(t)) {
130
+ const s = this._enabledChipElements(), o = V(t, s.indexOf(e), s.length);
119
131
  s[o].focus();
120
132
  return;
121
133
  }
@@ -142,6 +154,12 @@ let ot = (() => {
142
154
  }
143
155
  this.separatorKeys.includes(t.key) && (t.preventDefault(), this._createChipFromInput("input"));
144
156
  }
157
+ /**
158
+ * Handle blur event on the input
159
+ **/
160
+ _onInputBlur() {
161
+ this.addOnBlur && this._createChipFromInput("input");
162
+ }
145
163
  /**
146
164
  * If the input is not empty, create a chip with its value
147
165
  */
@@ -153,8 +171,8 @@ let ot = (() => {
153
171
  origin: t,
154
172
  value: s,
155
173
  label: (e ? this.displayWith?.(e) : null) ?? void 0,
156
- setValue: (l) => o.value = l,
157
- setLabel: (l) => o.label = l
174
+ setValue: (n) => o.value = n,
175
+ setLabel: (n) => o.label = n
158
176
  };
159
177
  this._dispatchChipInputTokenEnd(o) && (this._createChipElement(o.value, o.label), this._inputElement.value = "", this._emitInputEvents());
160
178
  }
@@ -190,7 +208,7 @@ let ot = (() => {
190
208
  this.dispatchEvent(new InputEvent("input", { bubbles: !0, composed: !0 })), this.dispatchEvent(new Event("change", { bubbles: !0 }));
191
209
  }
192
210
  _createChipElement(t, e) {
193
- if (A)
211
+ if (K)
194
212
  return;
195
213
  const s = document.createElement("sbb-chip");
196
214
  s.value = t, s.innerText = e ?? (t ? this.displayWith?.(t) : null) ?? "", this.insertBefore(s, this._inputElement ?? this.querySelector("input"));
@@ -207,26 +225,28 @@ let ot = (() => {
207
225
  this._previousSize && this.internals.states.delete(`size-${this._previousSize}`), this._previousSize = t, this._previousSize && this.internals.states.add(`size-${this._previousSize}`);
208
226
  }
209
227
  _updateInputDescription() {
210
- this._inputElement && this._inputElement.setAttribute("aria-description", `${$[this._language.current]} ${this.value.length}`);
228
+ this._inputElement && this._inputElement.setAttribute("aria-description", `${U[this._language.current]} ${this.value.length}`);
211
229
  }
212
230
  render() {
213
- return O`<slot @slotchange=${this._setupComponent}></slot>`;
231
+ return F`<slot @slotchange=${this._setupComponent}></slot>`;
214
232
  }
215
- }, h = new WeakMap(), u = new WeakMap(), p = n, (() => {
216
- const t = typeof Symbol == "function" && Symbol.metadata ? Object.create(y[Symbol.metadata] ?? null) : void 0;
217
- v = [_({ type: Array })], z = [_({ attribute: !1 })], E = [_({ attribute: "separator-keys", type: Array })], c(n, null, v, { kind: "setter", name: "value", static: !1, private: !1, access: { has: (e) => "value" in e, set: (e, s) => {
233
+ }, b = new WeakMap(), m = new WeakMap(), c = new WeakMap(), p = l, (() => {
234
+ const t = typeof Symbol == "function" && Symbol.metadata ? Object.create(f[Symbol.metadata] ?? null) : void 0;
235
+ z = [y({ type: Array })], w = [y({ attribute: !1 })], C = [y({ attribute: "separator-keys", type: Array })], I = [N(), y({ attribute: "add-on-blur", type: Boolean })], d(l, null, z, { kind: "setter", name: "value", static: !1, private: !1, access: { has: (e) => "value" in e, set: (e, s) => {
218
236
  e.value = s;
219
- } }, metadata: t }, null, f), c(n, null, z, { kind: "accessor", name: "displayWith", static: !1, private: !1, access: { has: (e) => "displayWith" in e, get: (e) => e.displayWith, set: (e, s) => {
237
+ } }, metadata: t }, null, v), d(l, null, w, { kind: "accessor", name: "displayWith", static: !1, private: !1, access: { has: (e) => "displayWith" in e, get: (e) => e.displayWith, set: (e, s) => {
220
238
  e.displayWith = s;
221
- } }, metadata: t }, w, k), c(n, null, E, { kind: "accessor", name: "separatorKeys", static: !1, private: !1, access: { has: (e) => "separatorKeys" in e, get: (e) => e.separatorKeys, set: (e, s) => {
239
+ } }, metadata: t }, k, E), d(l, null, C, { kind: "accessor", name: "separatorKeys", static: !1, private: !1, access: { has: (e) => "separatorKeys" in e, get: (e) => e.separatorKeys, set: (e, s) => {
222
240
  e.separatorKeys = s;
223
- } }, metadata: t }, C, S), c(null, a = { value: p }, i, { kind: "class", name: p.name, metadata: t }, null, r), p = a.value, t && Object.defineProperty(p, Symbol.metadata, { enumerable: !0, configurable: !0, writable: !0, value: t });
224
- })(), n.role = "listbox", n.styles = [J, H], n.events = {
241
+ } }, metadata: t }, S, x), d(l, null, I, { kind: "accessor", name: "addOnBlur", static: !1, private: !1, access: { has: (e) => "addOnBlur" in e, get: (e) => e.addOnBlur, set: (e, s) => {
242
+ e.addOnBlur = s;
243
+ } }, metadata: t }, O, A), d(null, a = { value: p }, i, { kind: "class", name: p.name, metadata: t }, null, r), p = a.value, t && Object.defineProperty(p, Symbol.metadata, { enumerable: !0, configurable: !0, writable: !0, value: t });
244
+ })(), l.role = "listbox", l.styles = [Y, tt], l.events = {
225
245
  input: "input",
226
246
  change: "change",
227
247
  chipinputtokenend: "chipinputtokenend"
228
- }, b(p, r), p;
248
+ }, h(p, r), p;
229
249
  })();
230
250
  export {
231
- ot as SbbChipGroupElement
251
+ ct as SbbChipGroupElement
232
252
  };
@@ -44613,6 +44613,17 @@
44613
44613
  "description": "The array of keys that will trigger a `chipinputtokenend` event. Default `['Enter']`",
44614
44614
  "attribute": "separator-keys"
44615
44615
  },
44616
+ {
44617
+ "kind": "field",
44618
+ "name": "addOnBlur",
44619
+ "type": {
44620
+ "text": "boolean"
44621
+ },
44622
+ "privacy": "public",
44623
+ "default": "false",
44624
+ "description": "Whether to automatically add a chip when the input loses focus if there's a value.",
44625
+ "attribute": "add-on-blur"
44626
+ },
44616
44627
  {
44617
44628
  "kind": "field",
44618
44629
  "name": "_inputAttributeObserver",
@@ -44793,6 +44804,17 @@
44793
44804
  ],
44794
44805
  "description": "Listen for keyboard events on the input"
44795
44806
  },
44807
+ {
44808
+ "kind": "method",
44809
+ "name": "_onInputBlur",
44810
+ "privacy": "private",
44811
+ "return": {
44812
+ "type": {
44813
+ "text": "void"
44814
+ }
44815
+ },
44816
+ "description": "Handle blur event on the input"
44817
+ },
44796
44818
  {
44797
44819
  "kind": "method",
44798
44820
  "name": "_createChipFromInput",
@@ -45412,6 +45434,15 @@
45412
45434
  "description": "The array of keys that will trigger a `chipinputtokenend` event. Default `['Enter']`",
45413
45435
  "fieldName": "separatorKeys"
45414
45436
  },
45437
+ {
45438
+ "name": "add-on-blur",
45439
+ "type": {
45440
+ "text": "boolean"
45441
+ },
45442
+ "default": "false",
45443
+ "description": "Whether to automatically add a chip when the input loses focus if there's a value.",
45444
+ "fieldName": "addOnBlur"
45445
+ },
45415
45446
  {
45416
45447
  "name": "required",
45417
45448
  "description": "Whether the component is required.",
@@ -37,6 +37,8 @@ export declare class SbbChipGroupElement<T = string> extends SbbChipGroupElement
37
37
  accessor displayWith: ((value: T) => string) | null;
38
38
  /** The array of keys that will trigger a `chipinputtokenend` event. Default `['Enter']` */
39
39
  accessor separatorKeys: string[];
40
+ /** Whether to automatically add a chip when the input loses focus if there's a value. */
41
+ accessor addOnBlur: boolean;
40
42
  /**
41
43
  * Listens to the changes on `readonly` and `disabled` attributes of `<input>`.
42
44
  */
@@ -69,6 +71,10 @@ export declare class SbbChipGroupElement<T = string> extends SbbChipGroupElement
69
71
  * Listen for keyboard events on the input
70
72
  **/
71
73
  private _onInputKeyDown;
74
+ /**
75
+ * Handle blur event on the input
76
+ **/
77
+ private _onInputBlur;
72
78
  /**
73
79
  * If the input is not empty, create a chip with its value
74
80
  */
@@ -1 +1 @@
1
- {"version":3,"file":"chip-group.component.d.ts","sourceRoot":"","sources":["../../../../../src/elements/chip/chip-group/chip-group.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGnB,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,KAAK,CAAC;AAOb,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAMtB,MAAM,sBAAsB,CAAC;AAU9B,MAAM,WAAW,gCAAgC,CAAC,CAAC,GAAG,MAAM;IAC1D,mDAAmD;IACnD,MAAM,EAAE,OAAO,GAAG,cAAc,CAAC;IACjC;;;;OAIG;IACH,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;;AAED;;;;;GAKG;AACH,qBAEM,mBAAmB,CAAC,CAAC,GAAG,MAAM,CAAE,SAAQ,wBAE7C;IACC,gBAAgC,IAAI,aAAa;IACjD,OAAuB,MAAM,EAAE,cAAc,CAA4B;IACzE,gBAAuB,MAAM;;;;MAIlB;IAEX,iCAAiC;IACjC,IACW,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,EA2B1C;IACD,IAAW,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAE/B;IAED,8DAA8D;IAC9D,SACgB,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,GAAG,IAAI,CAAQ;IAElE,2FAA2F;IAC3F,SACgB,aAAa,EAAE,MAAM,EAAE,CAAa;IAEpD;;OAEG;IACH,OAAO,CAAC,uBAAuB,CAEtB;IAET,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,aAAa,CAAC,CAA8B;;IAoBpD,OAAO,CAAC,iBAAiB;IAIT,iBAAiB,IAAI,IAAI;cAKtB,UAAU,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IAYtE,gBAAgB;IACT,iBAAiB,IAAI,IAAI;IAIhC,gBAAgB;IACT,wBAAwB,CAC7B,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,OAAO,EAAE,iBAAiB,GACzB,IAAI;YASO,aAAa;cAUR,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO;cAItD,QAAQ,IAAI,IAAI;IASnC,wCAAwC;IACxC,OAAO,CAAC,aAAa;IAIrB,gDAAgD;IAChD,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,eAAe;IAwCvB;;QAEI;IACJ,OAAO,CAAC,cAAc;IAyBtB;;QAEI;IACJ,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuB5B,OAAO,CAAC,0BAA0B;IAelC,OAAO,CAAC,WAAW;IAOnB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,uBAAuB;cAUZ,MAAM,IAAI,cAAc;CAG5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,gBAAgB,EAAE,mBAAmB,CAAC;KACvC;CACF;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,mBAAmB;QAC3B,iBAAiB,EAAE,WAAW,CAAC,gCAAgC,CAAC,GAAG,CAAC,CAAC,CAAC;KACvE;CACF"}
1
+ {"version":3,"file":"chip-group.component.d.ts","sourceRoot":"","sources":["../../../../../src/elements/chip/chip-group/chip-group.component.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import { css, LitElement, isServer, html } from "lit";
10
10
  import { customElement, property } from "lit/decorators.js";
11
11
  import { isArrowKeyPressed, getNextElementIndex } from "../../core/a11y.js";
12
12
  import { SbbLanguageController, SbbPropertyWatcherController } from "../../core/controllers.js";
13
+ import { forceType } from "../../core/decorators.js";
13
14
  import { isLean } from "../../core/dom/lean-context.js";
14
15
  import { i18nSelectionRequired, i18nChipGroupInputDescription } from "../../core/i18n.js";
15
16
  import { SbbRequiredMixin, SbbDisabledMixin, SbbNegativeMixin, SbbFormAssociatedMixin, SbbElementInternalsMixin } from "../../core/mixins.js";
@@ -114,7 +115,7 @@ const style = css`:host {
114
115
  max-width: 100%;
115
116
  }`;
116
117
  let SbbChipGroupElement = (() => {
117
- var _displayWith_accessor_storage, _separatorKeys_accessor_storage, _a;
118
+ var _displayWith_accessor_storage, _separatorKeys_accessor_storage, _addOnBlur_accessor_storage, _a;
118
119
  let _classDecorators = [customElement("sbb-chip-group")];
119
120
  let _classDescriptor;
120
121
  let _classExtraInitializers = [];
@@ -128,14 +129,19 @@ let SbbChipGroupElement = (() => {
128
129
  let _separatorKeys_decorators;
129
130
  let _separatorKeys_initializers = [];
130
131
  let _separatorKeys_extraInitializers = [];
132
+ let _addOnBlur_decorators;
133
+ let _addOnBlur_initializers = [];
134
+ let _addOnBlur_extraInitializers = [];
131
135
  _a = class extends _classSuper {
132
136
  constructor() {
133
137
  super();
134
138
  __privateAdd(this, _displayWith_accessor_storage);
135
139
  __privateAdd(this, _separatorKeys_accessor_storage);
140
+ __privateAdd(this, _addOnBlur_accessor_storage);
136
141
  __privateSet(this, _displayWith_accessor_storage, (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _displayWith_initializers, null)));
137
142
  __privateSet(this, _separatorKeys_accessor_storage, (__runInitializers(this, _displayWith_extraInitializers), __runInitializers(this, _separatorKeys_initializers, ["Enter"])));
138
- this._inputAttributeObserver = (__runInitializers(this, _separatorKeys_extraInitializers), !isServer ? new MutationObserver(() => this._reactToInputChanges()) : null);
143
+ __privateSet(this, _addOnBlur_accessor_storage, (__runInitializers(this, _separatorKeys_extraInitializers), __runInitializers(this, _addOnBlur_initializers, false)));
144
+ this._inputAttributeObserver = (__runInitializers(this, _addOnBlur_extraInitializers), !isServer ? new MutationObserver(() => this._reactToInputChanges()) : null);
139
145
  this._language = new SbbLanguageController(this);
140
146
  this.addEventListener?.(SbbChipElement.events.requestdelete, (ev) => this._deleteChip(ev.target));
141
147
  this.addEventListener?.("keydown", (ev) => this._onChipKeyDown(ev));
@@ -181,6 +187,13 @@ let SbbChipGroupElement = (() => {
181
187
  set separatorKeys(value) {
182
188
  __privateSet(this, _separatorKeys_accessor_storage, value);
183
189
  }
190
+ /** Whether to automatically add a chip when the input loses focus if there's a value. */
191
+ get addOnBlur() {
192
+ return __privateGet(this, _addOnBlur_accessor_storage);
193
+ }
194
+ set addOnBlur(value) {
195
+ __privateSet(this, _addOnBlur_accessor_storage, value);
196
+ }
184
197
  _updateLabelState(formField) {
185
198
  this.toggleState("without-label", !formField.label || formField.hiddenLabel);
186
199
  }
@@ -238,6 +251,10 @@ let SbbChipGroupElement = (() => {
238
251
  this._inputElement.addEventListener("keydown", (ev) => this._onInputKeyDown(ev), {
239
252
  signal: this._inputAbortController.signal
240
253
  });
254
+ this._inputElement.addEventListener("blur", () => this._onInputBlur(), {
255
+ signal: this._inputAbortController.signal,
256
+ capture: true
257
+ });
241
258
  this._inputElement.addEventListener("inputAutocomplete", (event) => {
242
259
  this._createChipFromInput("autocomplete", event.detail?.option.value);
243
260
  }, {
@@ -300,6 +317,14 @@ let SbbChipGroupElement = (() => {
300
317
  this._createChipFromInput("input");
301
318
  }
302
319
  }
320
+ /**
321
+ * Handle blur event on the input
322
+ **/
323
+ _onInputBlur() {
324
+ if (this.addOnBlur) {
325
+ this._createChipFromInput("input");
326
+ }
327
+ }
303
328
  /**
304
329
  * If the input is not empty, create a chip with its value
305
330
  */
@@ -394,11 +419,12 @@ let SbbChipGroupElement = (() => {
394
419
  render() {
395
420
  return html`<slot @slotchange=${this._setupComponent}></slot>`;
396
421
  }
397
- }, _displayWith_accessor_storage = new WeakMap(), _separatorKeys_accessor_storage = new WeakMap(), _classThis = _a, (() => {
422
+ }, _displayWith_accessor_storage = new WeakMap(), _separatorKeys_accessor_storage = new WeakMap(), _addOnBlur_accessor_storage = new WeakMap(), _classThis = _a, (() => {
398
423
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
399
424
  _set_value_decorators = [property({ type: Array })];
400
425
  _displayWith_decorators = [property({ attribute: false })];
401
426
  _separatorKeys_decorators = [property({ attribute: "separator-keys", type: Array })];
427
+ _addOnBlur_decorators = [forceType(), property({ attribute: "add-on-blur", type: Boolean })];
402
428
  __esDecorate(_a, null, _set_value_decorators, { kind: "setter", name: "value", static: false, private: false, access: { has: (obj) => "value" in obj, set: (obj, value) => {
403
429
  obj.value = value;
404
430
  } }, metadata: _metadata }, null, _instanceExtraInitializers);
@@ -408,6 +434,9 @@ let SbbChipGroupElement = (() => {
408
434
  __esDecorate(_a, null, _separatorKeys_decorators, { kind: "accessor", name: "separatorKeys", static: false, private: false, access: { has: (obj) => "separatorKeys" in obj, get: (obj) => obj.separatorKeys, set: (obj, value) => {
409
435
  obj.separatorKeys = value;
410
436
  } }, metadata: _metadata }, _separatorKeys_initializers, _separatorKeys_extraInitializers);
437
+ __esDecorate(_a, null, _addOnBlur_decorators, { kind: "accessor", name: "addOnBlur", static: false, private: false, access: { has: (obj) => "addOnBlur" in obj, get: (obj) => obj.addOnBlur, set: (obj, value) => {
438
+ obj.addOnBlur = value;
439
+ } }, metadata: _metadata }, _addOnBlur_initializers, _addOnBlur_extraInitializers);
411
440
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
412
441
  _classThis = _classDescriptor.value;
413
442
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
@@ -421,4 +450,4 @@ let SbbChipGroupElement = (() => {
421
450
  export {
422
451
  SbbChipGroupElement
423
452
  };
424
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jaGlwL2NoaXAtZ3JvdXAvY2hpcC1ncm91cC5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIExpdEVsZW1lbnQsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgZ2V0TmV4dEVsZW1lbnRJbmRleCwgaXNBcnJvd0tleVByZXNzZWQgfSBmcm9tICcuLi8uLi9jb3JlL2ExMXkudHMnO1xuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLCBTYmJQcm9wZXJ0eVdhdGNoZXJDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy50cyc7XG5pbXBvcnQgeyBpc0xlYW4gfSBmcm9tICcuLi8uLi9jb3JlL2RvbS9sZWFuLWNvbnRleHQudHMnO1xuaW1wb3J0IHsgaTE4bkNoaXBHcm91cElucHV0RGVzY3JpcHRpb24sIGkxOG5TZWxlY3Rpb25SZXF1aXJlZCB9IGZyb20gJy4uLy4uL2NvcmUvaTE4bi50cyc7XG5pbXBvcnQge1xuICB0eXBlIEZvcm1SZXN0b3JlUmVhc29uLFxuICB0eXBlIEZvcm1SZXN0b3JlU3RhdGUsXG4gIFNiYkRpc2FibGVkTWl4aW4sXG4gIFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpbixcbiAgU2JiRm9ybUFzc29jaWF0ZWRNaXhpbixcbiAgU2JiTmVnYXRpdmVNaXhpbixcbiAgU2JiUmVxdWlyZWRNaXhpbixcbn0gZnJvbSAnLi4vLi4vY29yZS9taXhpbnMudHMnO1xuaW1wb3J0IHsgYm94U2l6aW5nU3R5bGVzIH0gZnJvbSAnLi4vLi4vY29yZS9zdHlsZXMudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJGb3JtRmllbGRFbGVtZW50IH0gZnJvbSAnLi4vLi4vZm9ybS1maWVsZC9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50LnRzJztcbmltcG9ydCB0eXBlIHsgU2JiT3B0aW9uQmFzZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9vcHRpb24vb3B0aW9uL29wdGlvbi1iYXNlLWVsZW1lbnQudHMnO1xuaW1wb3J0IHsgU2JiQ2hpcEVsZW1lbnQgfSBmcm9tICcuLi9jaGlwLnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vY2hpcC1ncm91cC5zY3NzP2xpdCZpbmxpbmUnO1xuXG5sZXQgZGlzcGxheVdpdGhXYXJuaW5nTG9nZ2VkID0gZmFsc2U7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2JiQ2hpcElucHV0VG9rZW5FbmRFdmVudERldGFpbHM8VCA9IHN0cmluZz4ge1xuICAvKiogVGhlIGVsZW1lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGNoaXAgY3JlYXRpb24gKi9cbiAgb3JpZ2luOiAnaW5wdXQnIHwgJ2F1dG9jb21wbGV0ZSc7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIG5ldyBjaGlwLiBFaXRoZXIgdGhlIGlucHV0IG9yIHRoZSBvcHRpb24gdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSBvcmlnaW4uXG4gICAqIEVpdGhlciB0aGUgdmFsdWUgZnJvbSB0aGUgaW5wdXQgd2hpY2ggaXMgYWx3YXlzIGBzdHJpbmdgIG9yIHRoZSB2YWx1ZSBmcm9tIHRoZSBzZWxlY3RlZCBvcHRpb25cbiAgICogZnJvbSBhbiBhdXRvY29tcGxldGUsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW55IG90aGVyIHR5cGUuXG4gICAqL1xuICB2YWx1ZTogVCB8IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBTZXQgYSBuZXcgdmFsdWUgZm9yIHRoZSBjaGlwIHRoYXQgd2lsbCBiZSBjcmVhdGVkICovXG4gIHNldFZhbHVlKHZhbHVlOiBUKTogdm9pZDtcbiAgLyoqIFNldCBhIGxhYmVsIGZvciB0aGUgY2hpcCB0aGF0IHdpbGwgYmUgY3JlYXRlZCAqL1xuICBzZXRMYWJlbCh2YWx1ZTogc3RyaW5nKTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgYHNiYi1jaGlwLWdyb3VwYCBjb21wb25lbnQgaXMgdXNlZCBhcyBhIGNvbnRhaW5lciBmb3Igb25lIG9yIG11bHRpcGxlIGBzYmItY2hpcGAuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgYHNiYi1jaGlwYCBlbGVtZW50cy5cbiAqIEBvdmVycmlkZVR5cGUgdmFsdWUgLSAoVCA9IHN0cmluZ1tdKSB8IG51bGxcbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLWNoaXAtZ3JvdXAnKVxuY2xhc3MgU2JiQ2hpcEdyb3VwRWxlbWVudDxUID0gc3RyaW5nPiBleHRlbmRzIFNiYlJlcXVpcmVkTWl4aW4oXG4gIFNiYkRpc2FibGVkTWl4aW4oU2JiTmVnYXRpdmVNaXhpbihTYmJGb3JtQXNzb2NpYXRlZE1peGluKFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpbihMaXRFbGVtZW50KSkpKSxcbikge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IHJvbGUgPSAnbGlzdGJveCc7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtib3hTaXppbmdTdHlsZXMsIHN0eWxlXTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgaW5wdXQ6ICdpbnB1dCcsXG4gICAgY2hhbmdlOiAnY2hhbmdlJyxcbiAgICBjaGlwaW5wdXR0b2tlbmVuZDogJ2NoaXBpbnB1dHRva2VuZW5kJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKiogVmFsdWUgb2YgdGhlIGZvcm0gZWxlbWVudC4gKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogQXJyYXkgfSlcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogKFQgfCBudWxsKVtdIHwgbnVsbCkge1xuICAgIHZhbHVlID0gdmFsdWUgPz8gW107XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xuXG4gICAgLy8gU3VidHJhY3QgZnJvbSAnb2xkVmFsdWUnIHRoZSBuZXcgJ3ZhbHVlJ1xuICAgIC8vIFRoZSByZXN1bHQgYXJlIHRoZSBjaGlwcyB0byByZW1vdmUgKGhhbmRsZSBkdXBsaWNhdGVzKVxuICAgIGNvbnN0IHRvUmVtb3ZlID0gWy4uLm9sZFZhbHVlXTtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdmFsdWUpIHtcbiAgICAgIGlmICh0b1JlbW92ZS5pbmNsdWRlcyhjKSkge1xuICAgICAgICB0b1JlbW92ZS5zcGxpY2UodG9SZW1vdmUuaW5kZXhPZihjKSwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRvUmVtb3ZlLmZvckVhY2goKHZhbHVlKSA9PlxuICAgICAgdGhpcy5fY2hpcEVsZW1lbnRzKClcbiAgICAgICAgLmZpbmQoKGMpID0+IGMudmFsdWUgPT09IHZhbHVlKVxuICAgICAgICA/LnJlbW92ZSgpLFxuICAgICk7XG5cbiAgICAvLyBTdWJ0cmFjdCBmcm9tIHRoZSBuZXcgJ3ZhbHVlJyB3aGF0IHdhcyBhbHJlYWR5IHByZXNlbnRcbiAgICAvLyBUaGUgcmVzdWx0IGFyZSB0aGUgbmV3IGNoaXBzIHRvIGFkZCAoaGFuZGxlIGR1cGxpY2F0ZXMpXG4gICAgY29uc3QgdG9BZGQgPSBbLi4udmFsdWVdO1xuICAgIGZvciAoY29uc3QgYyBvZiBvbGRWYWx1ZSkge1xuICAgICAgaWYgKHRvQWRkLmluY2x1ZGVzKGMpKSB7XG4gICAgICAgIHRvQWRkLnNwbGljZSh0b0FkZC5pbmRleE9mKGMpLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdG9BZGQuZm9yRWFjaCgoYykgPT4gdGhpcy5fY3JlYXRlQ2hpcEVsZW1lbnQoYykpO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogKFQgfCBudWxsKVtdIHtcbiAgICByZXR1cm4gdGhpcy5fY2hpcEVsZW1lbnRzKCkubWFwKChjKSA9PiBjLnZhbHVlKTtcbiAgfVxuXG4gIC8qKiBGdW5jdGlvbiB0aGF0IG1hcHMgYSBjaGlwJ3MgdmFsdWUgdG8gaXRzIGRpc3BsYXkgdmFsdWUuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgcHVibGljIGFjY2Vzc29yIGRpc3BsYXlXaXRoOiAoKHZhbHVlOiBUKSA9PiBzdHJpbmcpIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFRoZSBhcnJheSBvZiBrZXlzIHRoYXQgd2lsbCB0cmlnZ2VyIGEgYGNoaXBpbnB1dHRva2VuZW5kYCBldmVudC4gRGVmYXVsdCBgWydFbnRlciddYCAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdzZXBhcmF0b3Ita2V5cycsIHR5cGU6IEFycmF5IH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBzZXBhcmF0b3JLZXlzOiBzdHJpbmdbXSA9IFsnRW50ZXInXTtcblxuICAvKipcbiAgICogTGlzdGVucyB0byB0aGUgY2hhbmdlcyBvbiBgcmVhZG9ubHlgIGFuZCBgZGlzYWJsZWRgIGF0dHJpYnV0ZXMgb2YgYDxpbnB1dD5gLlxuICAgKi9cbiAgcHJpdmF0ZSBfaW5wdXRBdHRyaWJ1dGVPYnNlcnZlciA9ICFpc1NlcnZlclxuICAgID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gdGhpcy5fcmVhY3RUb0lucHV0Q2hhbmdlcygpKVxuICAgIDogbnVsbDtcblxuICBwcml2YXRlIF9pbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX2lucHV0QWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfcHJldmlvdXNTaXplPzogU2JiRm9ybUZpZWxkRWxlbWVudFsnc2l6ZSddO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oU2JiQ2hpcEVsZW1lbnQuZXZlbnRzLnJlcXVlc3RkZWxldGUsIChldikgPT5cbiAgICAgIHRoaXMuX2RlbGV0ZUNoaXAoZXYudGFyZ2V0IGFzIFNiYkNoaXBFbGVtZW50PFQ+KSxcbiAgICApO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2tleWRvd24nLCAoZXYpID0+IHRoaXMuX29uQ2hpcEtleURvd24oZXYpKTtcblxuICAgIHRoaXMuYWRkQ29udHJvbGxlcihcbiAgICAgIG5ldyBTYmJQcm9wZXJ0eVdhdGNoZXJDb250cm9sbGVyKHRoaXMsICgpID0+IHRoaXMuY2xvc2VzdCgnc2JiLWZvcm0tZmllbGQnKSwge1xuICAgICAgICBzaXplOiAoZm9ybUZpZWxkKSA9PiB0aGlzLl91cGRhdGVTaXplKGZvcm1GaWVsZC5zaXplKSxcbiAgICAgICAgbGFiZWw6IChmb3JtRmllbGQpID0+IHRoaXMuX3VwZGF0ZUxhYmVsU3RhdGUoZm9ybUZpZWxkKSxcbiAgICAgICAgaGlkZGVuTGFiZWw6IChmb3JtRmllbGQpID0+IHRoaXMuX3VwZGF0ZUxhYmVsU3RhdGUoZm9ybUZpZWxkKSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVMYWJlbFN0YXRlKGZvcm1GaWVsZDogU2JiRm9ybUZpZWxkRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ3dpdGhvdXQtbGFiZWwnLCAhZm9ybUZpZWxkLmxhYmVsIHx8IGZvcm1GaWVsZC5oaWRkZW5MYWJlbCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9zZXR1cENvbXBvbmVudCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzKTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoXG4gICAgICBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2Rpc2FibGVkJykgfHxcbiAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnZm9ybURpc2FibGVkJykgfHxcbiAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbmVnYXRpdmUnKVxuICAgICkge1xuICAgICAgdGhpcy5fcHJveHlTdGF0ZVRvQ2hpcHMoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBmb3JtUmVzZXRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhcbiAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgX3JlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICk6IHZvaWQge1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlYWRGb3JtRGF0YShzdGF0ZSBhcyBGb3JtRGF0YSkudGhlbigoYXJyYXkpID0+ICh0aGlzLnZhbHVlID0gYXJyYXkpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3JlYWRGb3JtRGF0YShmb3JtRGF0YTogRm9ybURhdGEpOiBQcm9taXNlPFRbXT4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIGZvcm1EYXRhXG4gICAgICAgIC5nZXRBbGwodGhpcy5uYW1lKVxuICAgICAgICAubWFwKGFzeW5jIChlbnRyeSkgPT5cbiAgICAgICAgICBlbnRyeSBpbnN0YW5jZW9mIEJsb2IgPyBKU09OLnBhcnNlKGF3YWl0IGVudHJ5LnRleHQoKSkgOiAoZW50cnkgYXMgVCksXG4gICAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBzaG91bGRWYWxpZGF0ZShuYW1lOiBQcm9wZXJ0eUtleSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5zaG91bGRWYWxpZGF0ZShuYW1lKSB8fCBuYW1lID09PSAncmVxdWlyZWQnIHx8IG5hbWUgPT09ICd2YWx1ZSc7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmFsaWRhdGUoKTogdm9pZCB7XG4gICAgc3VwZXIudmFsaWRhdGUoKTtcbiAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zZXRWYWxpZGl0eUZsYWcoJ3ZhbHVlTWlzc2luZycsIGkxOG5TZWxlY3Rpb25SZXF1aXJlZFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVtb3ZlVmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmV0dXJuIHRoZSBsaXN0IG9mIGNoaXAgZWxlbWVudHMgKiovXG4gIHByaXZhdGUgX2NoaXBFbGVtZW50cygpOiBTYmJDaGlwRWxlbWVudDxUPltdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJDaGlwRWxlbWVudDxUPj4oJ3NiYi1jaGlwJykgPz8gW10pO1xuICB9XG5cbiAgLyoqIFJldHVybiB0aGUgbGlzdCBvZiBlbmFibGVkIGNoaXAgZWxlbWVudHMgKiovXG4gIHByaXZhdGUgX2VuYWJsZWRDaGlwRWxlbWVudHMoKTogU2JiQ2hpcEVsZW1lbnQ8VD5bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1jaGlwOm5vdChbZGlzYWJsZWRdKScpID8/IFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwQ29tcG9uZW50KCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuXG4gICAgLy8gQ29ubmVjdCB0byB0aGUgaW5wdXRcbiAgICBpZiAoaW5wdXQgJiYgaW5wdXQgIT09IHRoaXMuX2lucHV0RWxlbWVudCkge1xuICAgICAgdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgICB0aGlzLl9pbnB1dEF0dHJpYnV0ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLl9pbnB1dEVsZW1lbnQgPSBpbnB1dDtcblxuICAgICAgdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICB0aGlzLl9pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldikgPT4gdGhpcy5fb25JbnB1dEtleURvd24oZXYpLCB7XG4gICAgICAgIHNpZ25hbDogdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2lucHV0QXV0b2NvbXBsZXRlJyxcbiAgICAgICAgKGV2ZW50OiBDdXN0b21FdmVudDx7IG9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8VD4gfT4pID0+IHtcbiAgICAgICAgICB0aGlzLl9jcmVhdGVDaGlwRnJvbUlucHV0KCdhdXRvY29tcGxldGUnLCBldmVudC5kZXRhaWw/Lm9wdGlvbi52YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuX2lucHV0QXR0cmlidXRlT2JzZXJ2ZXI/Lm9ic2VydmUodGhpcy5faW5wdXRFbGVtZW50LCB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydyZWFkb25seScsICdkaXNhYmxlZCddLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSW5oZXJpdCBzaXplIGZyb20gdGhlIGZvcm0tZmllbGQgYW5kIG9ic2VydmUgZm9yIGNoYW5nZXNcbiAgICBpZiAoIXRoaXMuX3ByZXZpb3VzU2l6ZSB8fCAhdGhpcy5jbG9zZXN0KCdzYmItZm9ybS1maWVsZCcpKSB7XG4gICAgICB0aGlzLl91cGRhdGVTaXplKGlzTGVhbigpID8gJ3MnIDogJ20nKTtcbiAgICB9XG5cbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCdlbXB0eScsIHRoaXMudmFsdWUubGVuZ3RoID09PSAwKTtcbiAgICB0aGlzLl9yZWFjdFRvSW5wdXRDaGFuZ2VzKCk7XG4gICAgdGhpcy5fdXBkYXRlSW5wdXREZXNjcmlwdGlvbigpO1xuICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIGZvciBrZXlib2FyZCBldmVudHMgb24gdGhlIGNoaXAgZWxlbWVudHNcbiAgICoqL1xuICBwcml2YXRlIF9vbkNoaXBLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiQ2hpcEVsZW1lbnQ8VD47XG4gICAgaWYgKGV2ZW50VGFyZ2V0LmxvY2FsTmFtZSAhPT0gJ3NiYi1jaGlwJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFycm93IGtleXMgYWxsb3cgbmF2aWdhdGlvbiBiZXR3ZWVuIGNoaXBzIGZvY3VzIHN0ZXBzXG4gICAgaWYgKGlzQXJyb3dLZXlQcmVzc2VkKGV2ZW50KSkge1xuICAgICAgY29uc3QgZm9jdXNTdGVwcyA9IHRoaXMuX2VuYWJsZWRDaGlwRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IG5leHQgPSBnZXROZXh0RWxlbWVudEluZGV4KGV2ZW50LCBmb2N1c1N0ZXBzLmluZGV4T2YoZXZlbnRUYXJnZXQpLCBmb2N1c1N0ZXBzLmxlbmd0aCk7XG4gICAgICBmb2N1c1N0ZXBzW25leHRdLmZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICBjYXNlICdEZWxldGUnOlxuICAgICAgICBpZiAoIWV2ZW50VGFyZ2V0LnJlYWRPbmx5ICYmICFldmVudFRhcmdldC5kaXNhYmxlZCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5fZGVsZXRlQ2hpcChldmVudFRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiBmb3Iga2V5Ym9hcmQgZXZlbnRzIG9uIHRoZSBpbnB1dFxuICAgKiovXG4gIHByaXZhdGUgX29uSW5wdXRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0RWxlbWVudCEudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLl9mb2N1c0NoaXAoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gUHJldmVudHMgdGhlIGZvcm0gc3VibWl0XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIHR5cGVkIG9uZSBvZiB0aGUgc2VwYXJhdG9yIGtleXMsIHRyaWdnZXIgYSAnY2hpcGlucHV0dG9rZW5lbmQnIGV2ZW50XG4gICAgaWYgKHRoaXMuc2VwYXJhdG9yS2V5cy5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBwcmV2ZW50IHR5cGluZyB0aGUgc2VwYXJhdG9yIGtleSBpbnRvIHRoZSBpbnB1dFxuICAgICAgdGhpcy5fY3JlYXRlQ2hpcEZyb21JbnB1dCgnaW5wdXQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGlucHV0IGlzIG5vdCBlbXB0eSwgY3JlYXRlIGEgY2hpcCB3aXRoIGl0cyB2YWx1ZVxuICAgKi9cbiAgcHJpdmF0ZSBfY3JlYXRlQ2hpcEZyb21JbnB1dChvcmlnaW46ICdpbnB1dCcgfCAnYXV0b2NvbXBsZXRlJyA9ICdpbnB1dCcsIHZhbHVlPzogVCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSB2YWx1ZSA/PyB0aGlzLl9pbnB1dEVsZW1lbnQhLnZhbHVlLnRyaW0oKTtcbiAgICBpZiAoIWlucHV0VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudERldGFpbDogU2JiQ2hpcElucHV0VG9rZW5FbmRFdmVudERldGFpbHM8VD4gPSB7XG4gICAgICBvcmlnaW46IG9yaWdpbixcbiAgICAgIHZhbHVlOiBpbnB1dFZhbHVlLFxuICAgICAgbGFiZWw6ICh2YWx1ZSA/IHRoaXMuZGlzcGxheVdpdGg/Lih2YWx1ZSkgOiBudWxsKSA/PyB1bmRlZmluZWQsXG4gICAgICBzZXRWYWx1ZTogKHZhbHVlOiBUKSA9PiAoZXZlbnREZXRhaWwudmFsdWUgPSB2YWx1ZSksXG4gICAgICBzZXRMYWJlbDogKGxhYmVsOiBzdHJpbmcpID0+IChldmVudERldGFpbC5sYWJlbCA9IGxhYmVsKSxcbiAgICB9O1xuXG4gICAgaWYgKCF0aGlzLl9kaXNwYXRjaENoaXBJbnB1dFRva2VuRW5kKGV2ZW50RGV0YWlsKSkge1xuICAgICAgcmV0dXJuOyAvLyBldmVudCBwcmV2ZW50ZWQ7IGRvIG5vdGhpbmcgKHRoZSBjb25zdW1lciBoYXMgdG8gY3JlYXRlIHRoZSBjaGlwKVxuICAgIH1cblxuICAgIHRoaXMuX2NyZWF0ZUNoaXBFbGVtZW50KGV2ZW50RGV0YWlsLnZhbHVlIGFzIFQsIGV2ZW50RGV0YWlsLmxhYmVsKTtcbiAgICB0aGlzLl9pbnB1dEVsZW1lbnQhLnZhbHVlID0gJyc7IC8vIEVtcHR5IHRoZSBpbnB1dFxuICAgIHRoaXMuX2VtaXRJbnB1dEV2ZW50cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzcGF0Y2hDaGlwSW5wdXRUb2tlbkVuZChldmVudERldGFpbDogU2JiQ2hpcElucHV0VG9rZW5FbmRFdmVudERldGFpbHM8VD4pOiBib29sZWFuIHtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Q3VzdG9tRXZlbnQ8U2JiQ2hpcElucHV0VG9rZW5FbmRFdmVudERldGFpbHM+fVxuICAgICAqIE5vdGlmaWVzIHRoYXQgYSBjaGlwIGlzIGFib3V0IHRvIGJlIGNyZWF0ZWQuIENhbiBiZSBwcmV2ZW50ZWQuXG4gICAgICovXG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudDxTYmJDaGlwSW5wdXRUb2tlbkVuZEV2ZW50RGV0YWlsczxUPj4oJ2NoaXBpbnB1dHRva2VuZW5kJywge1xuICAgICAgICBkZXRhaWw6IGV2ZW50RGV0YWlsLFxuICAgICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9kZWxldGVDaGlwKGNoaXA6IFNiYkNoaXBFbGVtZW50PFQ+KTogdm9pZCB7XG4gICAgY29uc3QgY2hpcHMgPSB0aGlzLl9lbmFibGVkQ2hpcEVsZW1lbnRzKCk7XG4gICAgY2hpcC5yZW1vdmUoKTtcbiAgICB0aGlzLl9lbWl0SW5wdXRFdmVudHMoKTtcbiAgICB0aGlzLl9mb2N1c0NoaXAoY2hpcHMuaW5kZXhPZihjaGlwKSk7IC8vIEZvY3VzIHRoZSBuZXh0IGNoaXBcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyBhbiBlbmFibGVkIGNoaXAuIElmIG5vbmUgYXJlIHByZXNlbnQsIGZvY3VzIHRoZSBpbnB1dFxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBlbmFibGVkIGNoaXAuIElmIG51bGwsIGZvY3VzIHRoZSBsYXN0IG9uZS5cbiAgICovXG4gIHByaXZhdGUgX2ZvY3VzQ2hpcChpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGVuYWJsZWRDaGlwcyA9IHRoaXMuX2VuYWJsZWRDaGlwRWxlbWVudHMoKTtcblxuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkICYmIGVuYWJsZWRDaGlwc1tpbmRleF0pIHtcbiAgICAgIGVuYWJsZWRDaGlwc1tpbmRleF0uZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZW5hYmxlZENoaXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVuYWJsZWRDaGlwc1tlbmFibGVkQ2hpcHMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnB1dEVsZW1lbnQ/LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIF9lbWl0SW5wdXRFdmVudHMoKTogdm9pZCB7XG4gICAgLyoqIFRoZSBpbnB1dCBldmVudCBmaXJlcyB3aGVuIHRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGFzIGEgZGlyZWN0IHJlc3VsdCBvZiBhIHVzZXIgYWN0aW9uLiAqL1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjaGFuZ2UgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBtb2RpZmllcyB0aGUgZWxlbWVudCdzIHZhbHVlLlxuICAgICAqIFVubGlrZSB0aGUgaW5wdXQgZXZlbnQsIHRoZSBjaGFuZ2UgZXZlbnQgaXMgbm90IG5lY2Vzc2FyaWx5IGZpcmVkXG4gICAgICogZm9yIGVhY2ggYWx0ZXJhdGlvbiB0byBhbiBlbGVtZW50J3MgdmFsdWUuXG4gICAgICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZUNoaXBFbGVtZW50KHZhbHVlOiBUIHwgbnVsbCwgbGFiZWw/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV3Q2hpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NiYi1jaGlwJykgYXMgU2JiQ2hpcEVsZW1lbnQ8VD47XG4gICAgbmV3Q2hpcC52YWx1ZSA9IHZhbHVlO1xuICAgIG5ld0NoaXAuaW5uZXJUZXh0ID0gbGFiZWwgPz8gKHZhbHVlID8gdGhpcy5kaXNwbGF5V2l0aD8uKHZhbHVlKSA6IG51bGwpID8/ICcnO1xuICAgIGlmIChcbiAgICAgIGltcG9ydC5tZXRhLmVudi5ERVYgJiZcbiAgICAgICFkaXNwbGF5V2l0aFdhcm5pbmdMb2dnZWQgJiZcbiAgICAgICFsYWJlbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgIXRoaXMuZGlzcGxheVdpdGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYGRpc3BsYXlXaXRoIGhhcyBub3QgYmVlbiBzZXQgeWV0IGZvciBzYmItY2hpcC1ncm91cCBhbmQgdmFsdWUgaXMgYW4gb2JqZWN0LlxuICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBvYmplY3QgdmFsdWVzLCB5b3UgbmVlZCB0byBwcm92aWRlIGRpc3BsYXlXaWR0aCBiZWZvcmVcbiAgICAgICAgIHNldHRpbmcgb3Igc2VsZWN0aW5nIGFueSB2YWx1ZS5gLFxuICAgICAgKTtcbiAgICAgIGRpc3BsYXlXaXRoV2FybmluZ0xvZ2dlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuaW5zZXJ0QmVmb3JlKG5ld0NoaXAsIHRoaXMuX2lucHV0RWxlbWVudCA/PyB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVhY3RUb0lucHV0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5faW5wdXRFbGVtZW50Py5kaXNhYmxlZCA/PyBmYWxzZTtcbiAgICB0aGlzLl9wcm94eVN0YXRlVG9DaGlwcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJveHlTdGF0ZVRvQ2hpcHMoKTogdm9pZCB7XG4gICAgdGhpcy5fY2hpcEVsZW1lbnRzKCkuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgYy5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWQ7XG4gICAgICBjLnJlYWRPbmx5ID0gdGhpcy5faW5wdXRFbGVtZW50Py5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgPz8gZmFsc2U7XG4gICAgICBjLm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVNpemUoc2l6ZTogU2JiRm9ybUZpZWxkRWxlbWVudFsnc2l6ZSddKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ByZXZpb3VzU2l6ZSkge1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZShgc2l6ZS0ke3RoaXMuX3ByZXZpb3VzU2l6ZX1gKTtcbiAgICB9XG4gICAgdGhpcy5fcHJldmlvdXNTaXplID0gc2l6ZTtcbiAgICBpZiAodGhpcy5fcHJldmlvdXNTaXplKSB7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKGBzaXplLSR7dGhpcy5fcHJldmlvdXNTaXplfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUlucHV0RGVzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faW5wdXRFbGVtZW50LnNldEF0dHJpYnV0ZShcbiAgICAgICdhcmlhLWRlc2NyaXB0aW9uJyxcbiAgICAgIGAke2kxOG5DaGlwR3JvdXBJbnB1dERlc2NyaXB0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke3RoaXMudmFsdWUubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYDxzbG90IEBzbG90Y2hhbmdlPSR7dGhpcy5fc2V0dXBDb21wb25lbnR9Pjwvc2xvdD5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItY2hpcC1ncm91cCc6IFNiYkNoaXBHcm91cEVsZW1lbnQ7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRFdmVudE1hcCB7XG4gICAgY2hpcGlucHV0dG9rZW5lbmQ6IEN1c3RvbUV2ZW50PFNiYkNoaXBJbnB1dFRva2VuRW5kRXZlbnREZXRhaWxzPGFueT4+O1xuICB9XG59XG4iXSwibmFtZXMiOlsidmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUF3RE0sdUJBQW1CLE1BQUE7OzBCQUR4QixjQUFjLGdCQUFnQixDQUFDOzs7O0FBQ2MsTUFBQSxjQUFBLGlCQUM1QyxpQkFBaUIsaUJBQWlCLHVCQUF1Qix5QkFBeUIsVUFBVSxDQUFDLENBQUMs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
453
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jaGlwL2NoaXAtZ3JvdXAvY2hpcC1ncm91cC5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIExpdEVsZW1lbnQsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgZ2V0TmV4dEVsZW1lbnRJbmRleCwgaXNBcnJvd0tleVByZXNzZWQgfSBmcm9tICcuLi8uLi9jb3JlL2ExMXkudHMnO1xuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLCBTYmJQcm9wZXJ0eVdhdGNoZXJDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy50cyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMudHMnO1xuaW1wb3J0IHsgaXNMZWFuIH0gZnJvbSAnLi4vLi4vY29yZS9kb20vbGVhbi1jb250ZXh0LnRzJztcbmltcG9ydCB7IGkxOG5DaGlwR3JvdXBJbnB1dERlc2NyaXB0aW9uLCBpMThuU2VsZWN0aW9uUmVxdWlyZWQgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4udHMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJEaXNhYmxlZE1peGluLFxuICBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4sXG4gIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4sXG4gIFNiYk5lZ2F0aXZlTWl4aW4sXG4gIFNiYlJlcXVpcmVkTWl4aW4sXG59IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLnRzJztcbmltcG9ydCB7IGJveFNpemluZ1N0eWxlcyB9IGZyb20gJy4uLy4uL2NvcmUvc3R5bGVzLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiRm9ybUZpZWxkRWxlbWVudCB9IGZyb20gJy4uLy4uL2Zvcm0tZmllbGQvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudC50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYk9wdGlvbkJhc2VFbGVtZW50IH0gZnJvbSAnLi4vLi4vb3B0aW9uL29wdGlvbi9vcHRpb24tYmFzZS1lbGVtZW50LnRzJztcbmltcG9ydCB7IFNiYkNoaXBFbGVtZW50IH0gZnJvbSAnLi4vY2hpcC50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2NoaXAtZ3JvdXAuc2Nzcz9saXQmaW5saW5lJztcblxubGV0IGRpc3BsYXlXaXRoV2FybmluZ0xvZ2dlZCA9IGZhbHNlO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNiYkNoaXBJbnB1dFRva2VuRW5kRXZlbnREZXRhaWxzPFQgPSBzdHJpbmc+IHtcbiAgLyoqIFRoZSBlbGVtZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBjaGlwIGNyZWF0aW9uICovXG4gIG9yaWdpbjogJ2lucHV0JyB8ICdhdXRvY29tcGxldGUnO1xuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBuZXcgY2hpcC4gRWl0aGVyIHRoZSBpbnB1dCBvciB0aGUgb3B0aW9uIHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgb3JpZ2luLlxuICAgKiBFaXRoZXIgdGhlIHZhbHVlIGZyb20gdGhlIGlucHV0IHdoaWNoIGlzIGFsd2F5cyBgc3RyaW5nYCBvciB0aGUgdmFsdWUgZnJvbSB0aGUgc2VsZWN0ZWQgb3B0aW9uXG4gICAqIGZyb20gYW4gYXV0b2NvbXBsZXRlLCB3aGljaCBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGFueSBvdGhlciB0eXBlLlxuICAgKi9cbiAgdmFsdWU6IFQgfCBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogU2V0IGEgbmV3IHZhbHVlIGZvciB0aGUgY2hpcCB0aGF0IHdpbGwgYmUgY3JlYXRlZCAqL1xuICBzZXRWYWx1ZSh2YWx1ZTogVCk6IHZvaWQ7XG4gIC8qKiBTZXQgYSBsYWJlbCBmb3IgdGhlIGNoaXAgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgKi9cbiAgc2V0TGFiZWwodmFsdWU6IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhlIGBzYmItY2hpcC1ncm91cGAgY29tcG9uZW50IGlzIHVzZWQgYXMgYSBjb250YWluZXIgZm9yIG9uZSBvciBtdWx0aXBsZSBgc2JiLWNoaXBgLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGBzYmItY2hpcGAgZWxlbWVudHMuXG4gKiBAb3ZlcnJpZGVUeXBlIHZhbHVlIC0gKFQgPSBzdHJpbmdbXSkgfCBudWxsXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1jaGlwLWdyb3VwJylcbmNsYXNzIFNiYkNoaXBHcm91cEVsZW1lbnQ8VCA9IHN0cmluZz4gZXh0ZW5kcyBTYmJSZXF1aXJlZE1peGluKFxuICBTYmJEaXNhYmxlZE1peGluKFNiYk5lZ2F0aXZlTWl4aW4oU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4oTGl0RWxlbWVudCkpKSksXG4pIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSByb2xlID0gJ2xpc3Rib3gnO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCBzdHlsZV07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGlucHV0OiAnaW5wdXQnLFxuICAgIGNoYW5nZTogJ2NoYW5nZScsXG4gICAgY2hpcGlucHV0dG9rZW5lbmQ6ICdjaGlwaW5wdXR0b2tlbmVuZCcsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIFZhbHVlIG9mIHRoZSBmb3JtIGVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEFycmF5IH0pXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IChUIHwgbnVsbClbXSB8IG51bGwpIHtcbiAgICB2YWx1ZSA9IHZhbHVlID8/IFtdO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcblxuICAgIC8vIFN1YnRyYWN0IGZyb20gJ29sZFZhbHVlJyB0aGUgbmV3ICd2YWx1ZSdcbiAgICAvLyBUaGUgcmVzdWx0IGFyZSB0aGUgY2hpcHMgdG8gcmVtb3ZlIChoYW5kbGUgZHVwbGljYXRlcylcbiAgICBjb25zdCB0b1JlbW92ZSA9IFsuLi5vbGRWYWx1ZV07XG4gICAgZm9yIChjb25zdCBjIG9mIHZhbHVlKSB7XG4gICAgICBpZiAodG9SZW1vdmUuaW5jbHVkZXMoYykpIHtcbiAgICAgICAgdG9SZW1vdmUuc3BsaWNlKHRvUmVtb3ZlLmluZGV4T2YoYyksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0b1JlbW92ZS5mb3JFYWNoKCh2YWx1ZSkgPT5cbiAgICAgIHRoaXMuX2NoaXBFbGVtZW50cygpXG4gICAgICAgIC5maW5kKChjKSA9PiBjLnZhbHVlID09PSB2YWx1ZSlcbiAgICAgICAgPy5yZW1vdmUoKSxcbiAgICApO1xuXG4gICAgLy8gU3VidHJhY3QgZnJvbSB0aGUgbmV3ICd2YWx1ZScgd2hhdCB3YXMgYWxyZWFkeSBwcmVzZW50XG4gICAgLy8gVGhlIHJlc3VsdCBhcmUgdGhlIG5ldyBjaGlwcyB0byBhZGQgKGhhbmRsZSBkdXBsaWNhdGVzKVxuICAgIGNvbnN0IHRvQWRkID0gWy4uLnZhbHVlXTtcbiAgICBmb3IgKGNvbnN0IGMgb2Ygb2xkVmFsdWUpIHtcbiAgICAgIGlmICh0b0FkZC5pbmNsdWRlcyhjKSkge1xuICAgICAgICB0b0FkZC5zcGxpY2UodG9BZGQuaW5kZXhPZihjKSwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRvQWRkLmZvckVhY2goKGMpID0+IHRoaXMuX2NyZWF0ZUNoaXBFbGVtZW50KGMpKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IChUIHwgbnVsbClbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaXBFbGVtZW50cygpLm1hcCgoYykgPT4gYy52YWx1ZSk7XG4gIH1cblxuICAvKiogRnVuY3Rpb24gdGhhdCBtYXBzIGEgY2hpcCdzIHZhbHVlIHRvIGl0cyBkaXNwbGF5IHZhbHVlLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBkaXNwbGF5V2l0aDogKCh2YWx1ZTogVCkgPT4gc3RyaW5nKSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBUaGUgYXJyYXkgb2Yga2V5cyB0aGF0IHdpbGwgdHJpZ2dlciBhIGBjaGlwaW5wdXR0b2tlbmVuZGAgZXZlbnQuIERlZmF1bHQgYFsnRW50ZXInXWAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnc2VwYXJhdG9yLWtleXMnLCB0eXBlOiBBcnJheSB9KVxuICBwdWJsaWMgYWNjZXNzb3Igc2VwYXJhdG9yS2V5czogc3RyaW5nW10gPSBbJ0VudGVyJ107XG5cbiAgLyoqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBhZGQgYSBjaGlwIHdoZW4gdGhlIGlucHV0IGxvc2VzIGZvY3VzIGlmIHRoZXJlJ3MgYSB2YWx1ZS4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FkZC1vbi1ibHVyJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYWRkT25CbHVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIExpc3RlbnMgdG8gdGhlIGNoYW5nZXMgb24gYHJlYWRvbmx5YCBhbmQgYGRpc2FibGVkYCBhdHRyaWJ1dGVzIG9mIGA8aW5wdXQ+YC5cbiAgICovXG4gIHByaXZhdGUgX2lucHV0QXR0cmlidXRlT2JzZXJ2ZXIgPSAhaXNTZXJ2ZXJcbiAgICA/IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHRoaXMuX3JlYWN0VG9JbnB1dENoYW5nZXMoKSlcbiAgICA6IG51bGw7XG5cbiAgcHJpdmF0ZSBfaW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9pbnB1dEFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX3ByZXZpb3VzU2l6ZT86IFNiYkZvcm1GaWVsZEVsZW1lbnRbJ3NpemUnXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFNiYkNoaXBFbGVtZW50LmV2ZW50cy5yZXF1ZXN0ZGVsZXRlLCAoZXYpID0+XG4gICAgICB0aGlzLl9kZWxldGVDaGlwKGV2LnRhcmdldCBhcyBTYmJDaGlwRWxlbWVudDxUPiksXG4gICAgKTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdrZXlkb3duJywgKGV2KSA9PiB0aGlzLl9vbkNoaXBLZXlEb3duKGV2KSk7XG5cbiAgICB0aGlzLmFkZENvbnRyb2xsZXIoXG4gICAgICBuZXcgU2JiUHJvcGVydHlXYXRjaGVyQ29udHJvbGxlcih0aGlzLCAoKSA9PiB0aGlzLmNsb3Nlc3QoJ3NiYi1mb3JtLWZpZWxkJyksIHtcbiAgICAgICAgc2l6ZTogKGZvcm1GaWVsZCkgPT4gdGhpcy5fdXBkYXRlU2l6ZShmb3JtRmllbGQuc2l6ZSksXG4gICAgICAgIGxhYmVsOiAoZm9ybUZpZWxkKSA9PiB0aGlzLl91cGRhdGVMYWJlbFN0YXRlKGZvcm1GaWVsZCksXG4gICAgICAgIGhpZGRlbkxhYmVsOiAoZm9ybUZpZWxkKSA9PiB0aGlzLl91cGRhdGVMYWJlbFN0YXRlKGZvcm1GaWVsZCksXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlTGFiZWxTdGF0ZShmb3JtRmllbGQ6IFNiYkZvcm1GaWVsZEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCd3aXRob3V0LWxhYmVsJywgIWZvcm1GaWVsZC5sYWJlbCB8fCBmb3JtRmllbGQuaGlkZGVuTGFiZWwpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fc2V0dXBDb21wb25lbnQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlcyk6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKFxuICAgICAgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdkaXNhYmxlZCcpIHx8XG4gICAgICBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2Zvcm1EaXNhYmxlZCcpIHx8XG4gICAgICBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ25lZ2F0aXZlJylcbiAgICApIHtcbiAgICAgIHRoaXMuX3Byb3h5U3RhdGVUb0NoaXBzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgIF9yZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICApOiB2b2lkIHtcbiAgICBpZiAoIXN0YXRlKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWFkRm9ybURhdGEoc3RhdGUgYXMgRm9ybURhdGEpLnRoZW4oKGFycmF5KSA9PiAodGhpcy52YWx1ZSA9IGFycmF5KSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9yZWFkRm9ybURhdGEoZm9ybURhdGE6IEZvcm1EYXRhKTogUHJvbWlzZTxUW10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBmb3JtRGF0YVxuICAgICAgICAuZ2V0QWxsKHRoaXMubmFtZSlcbiAgICAgICAgLm1hcChhc3luYyAoZW50cnkpID0+XG4gICAgICAgICAgZW50cnkgaW5zdGFuY2VvZiBCbG9iID8gSlNPTi5wYXJzZShhd2FpdCBlbnRyeS50ZXh0KCkpIDogKGVudHJ5IGFzIFQpLFxuICAgICAgICApLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2hvdWxkVmFsaWRhdGUobmFtZTogUHJvcGVydHlLZXkgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuc2hvdWxkVmFsaWRhdGUobmFtZSkgfHwgbmFtZSA9PT0gJ3JlcXVpcmVkJyB8fCBuYW1lID09PSAndmFsdWUnO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHZhbGlkYXRlKCk6IHZvaWQge1xuICAgIHN1cGVyLnZhbGlkYXRlKCk7XG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2V0VmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnLCBpMThuU2VsZWN0aW9uUmVxdWlyZWRbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZVZhbGlkaXR5RmxhZygndmFsdWVNaXNzaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJldHVybiB0aGUgbGlzdCBvZiBjaGlwIGVsZW1lbnRzICoqL1xuICBwcml2YXRlIF9jaGlwRWxlbWVudHMoKTogU2JiQ2hpcEVsZW1lbnQ8VD5bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiQ2hpcEVsZW1lbnQ8VD4+KCdzYmItY2hpcCcpID8/IFtdKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gdGhlIGxpc3Qgb2YgZW5hYmxlZCBjaGlwIGVsZW1lbnRzICoqL1xuICBwcml2YXRlIF9lbmFibGVkQ2hpcEVsZW1lbnRzKCk6IFNiYkNoaXBFbGVtZW50PFQ+W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItY2hpcDpub3QoW2Rpc2FibGVkXSknKSA/PyBbXSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cENvbXBvbmVudCgpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcblxuICAgIC8vIENvbm5lY3QgdG8gdGhlIGlucHV0XG4gICAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSB0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgICAgdGhpcy5faW5wdXRBdHRyaWJ1dGVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50ID0gaW5wdXQ7XG5cbiAgICAgIHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXYpID0+IHRoaXMuX29uSW5wdXRLZXlEb3duKGV2KSwge1xuICAgICAgICBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB0aGlzLl9vbklucHV0Qmx1cigpLCB7XG4gICAgICAgIHNpZ25hbDogdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2lucHV0QXV0b2NvbXBsZXRlJyxcbiAgICAgICAgKGV2ZW50OiBDdXN0b21FdmVudDx7IG9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8VD4gfT4pID0+IHtcbiAgICAgICAgICB0aGlzLl9jcmVhdGVDaGlwRnJvbUlucHV0KCdhdXRvY29tcGxldGUnLCBldmVudC5kZXRhaWw/Lm9wdGlvbi52YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuX2lucHV0QXR0cmlidXRlT2JzZXJ2ZXI/Lm9ic2VydmUodGhpcy5faW5wdXRFbGVtZW50LCB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydyZWFkb25seScsICdkaXNhYmxlZCddLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSW5oZXJpdCBzaXplIGZyb20gdGhlIGZvcm0tZmllbGQgYW5kIG9ic2VydmUgZm9yIGNoYW5nZXNcbiAgICBpZiAoIXRoaXMuX3ByZXZpb3VzU2l6ZSB8fCAhdGhpcy5jbG9zZXN0KCdzYmItZm9ybS1maWVsZCcpKSB7XG4gICAgICB0aGlzLl91cGRhdGVTaXplKGlzTGVhbigpID8gJ3MnIDogJ20nKTtcbiAgICB9XG5cbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCdlbXB0eScsIHRoaXMudmFsdWUubGVuZ3RoID09PSAwKTtcbiAgICB0aGlzLl9yZWFjdFRvSW5wdXRDaGFuZ2VzKCk7XG4gICAgdGhpcy5fdXBkYXRlSW5wdXREZXNjcmlwdGlvbigpO1xuICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIGZvciBrZXlib2FyZCBldmVudHMgb24gdGhlIGNoaXAgZWxlbWVudHNcbiAgICoqL1xuICBwcml2YXRlIF9vbkNoaXBLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiQ2hpcEVsZW1lbnQ8VD47XG4gICAgaWYgKGV2ZW50VGFyZ2V0LmxvY2FsTmFtZSAhPT0gJ3NiYi1jaGlwJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFycm93IGtleXMgYWxsb3cgbmF2aWdhdGlvbiBiZXR3ZWVuIGNoaXBzIGZvY3VzIHN0ZXBzXG4gICAgaWYgKGlzQXJyb3dLZXlQcmVzc2VkKGV2ZW50KSkge1xuICAgICAgY29uc3QgZm9jdXNTdGVwcyA9IHRoaXMuX2VuYWJsZWRDaGlwRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IG5leHQgPSBnZXROZXh0RWxlbWVudEluZGV4KGV2ZW50LCBmb2N1c1N0ZXBzLmluZGV4T2YoZXZlbnRUYXJnZXQpLCBmb2N1c1N0ZXBzLmxlbmd0aCk7XG4gICAgICBmb2N1c1N0ZXBzW25leHRdLmZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICBjYXNlICdEZWxldGUnOlxuICAgICAgICBpZiAoIWV2ZW50VGFyZ2V0LnJlYWRPbmx5ICYmICFldmVudFRhcmdldC5kaXNhYmxlZCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5fZGVsZXRlQ2hpcChldmVudFRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiBmb3Iga2V5Ym9hcmQgZXZlbnRzIG9uIHRoZSBpbnB1dFxuICAgKiovXG4gIHByaXZhdGUgX29uSW5wdXRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0RWxlbWVudCEudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLl9mb2N1c0NoaXAoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gUHJldmVudHMgdGhlIGZvcm0gc3VibWl0XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIHR5cGVkIG9uZSBvZiB0aGUgc2VwYXJhdG9yIGtleXMsIHRyaWdnZXIgYSAnY2hpcGlucHV0dG9rZW5lbmQnIGV2ZW50XG4gICAgaWYgKHRoaXMuc2VwYXJhdG9yS2V5cy5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBwcmV2ZW50IHR5cGluZyB0aGUgc2VwYXJhdG9yIGtleSBpbnRvIHRoZSBpbnB1dFxuICAgICAgdGhpcy5fY3JlYXRlQ2hpcEZyb21JbnB1dCgnaW5wdXQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGJsdXIgZXZlbnQgb24gdGhlIGlucHV0XG4gICAqKi9cbiAgcHJpdmF0ZSBfb25JbnB1dEJsdXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWRkT25CbHVyKSB7XG4gICAgICB0aGlzLl9jcmVhdGVDaGlwRnJvbUlucHV0KCdpbnB1dCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgaW5wdXQgaXMgbm90IGVtcHR5LCBjcmVhdGUgYSBjaGlwIHdpdGggaXRzIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIF9jcmVhdGVDaGlwRnJvbUlucHV0KG9yaWdpbjogJ2lucHV0JyB8ICdhdXRvY29tcGxldGUnID0gJ2lucHV0JywgdmFsdWU/OiBUKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IHZhbHVlID8/IHRoaXMuX2lucHV0RWxlbWVudCEudmFsdWUudHJpbSgpO1xuICAgIGlmICghaW5wdXRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50RGV0YWlsOiBTYmJDaGlwSW5wdXRUb2tlbkVuZEV2ZW50RGV0YWlsczxUPiA9IHtcbiAgICAgIG9yaWdpbjogb3JpZ2luLFxuICAgICAgdmFsdWU6IGlucHV0VmFsdWUsXG4gICAgICBsYWJlbDogKHZhbHVlID8gdGhpcy5kaXNwbGF5V2l0aD8uKHZhbHVlKSA6IG51bGwpID8/IHVuZGVmaW5lZCxcbiAgICAgIHNldFZhbHVlOiAodmFsdWU6IFQpID0+IChldmVudERldGFpbC52YWx1ZSA9IHZhbHVlKSxcbiAgICAgIHNldExhYmVsOiAobGFiZWw6IHN0cmluZykgPT4gKGV2ZW50RGV0YWlsLmxhYmVsID0gbGFiZWwpLFxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMuX2Rpc3BhdGNoQ2hpcElucHV0VG9rZW5FbmQoZXZlbnREZXRhaWwpKSB7XG4gICAgICByZXR1cm47IC8vIGV2ZW50IHByZXZlbnRlZDsgZG8gbm90aGluZyAodGhlIGNvbnN1bWVyIGhhcyB0byBjcmVhdGUgdGhlIGNoaXApXG4gICAgfVxuXG4gICAgdGhpcy5fY3JlYXRlQ2hpcEVsZW1lbnQoZXZlbnREZXRhaWwudmFsdWUgYXMgVCwgZXZlbnREZXRhaWwubGFiZWwpO1xuICAgIHRoaXMuX2lucHV0RWxlbWVudCEudmFsdWUgPSAnJzsgLy8gRW1wdHkgdGhlIGlucHV0XG4gICAgdGhpcy5fZW1pdElucHV0RXZlbnRzKCk7XG4gIH1cblxuICBwcml2YXRlIF9kaXNwYXRjaENoaXBJbnB1dFRva2VuRW5kKGV2ZW50RGV0YWlsOiBTYmJDaGlwSW5wdXRUb2tlbkVuZEV2ZW50RGV0YWlsczxUPik6IGJvb2xlYW4ge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtDdXN0b21FdmVudDxTYmJDaGlwSW5wdXRUb2tlbkVuZEV2ZW50RGV0YWlscz59XG4gICAgICogTm90aWZpZXMgdGhhdCBhIGNoaXAgaXMgYWJvdXQgdG8gYmUgY3JlYXRlZC4gQ2FuIGJlIHByZXZlbnRlZC5cbiAgICAgKi9cbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PFNiYkNoaXBJbnB1dFRva2VuRW5kRXZlbnREZXRhaWxzPFQ+PignY2hpcGlucHV0dG9rZW5lbmQnLCB7XG4gICAgICAgIGRldGFpbDogZXZlbnREZXRhaWwsXG4gICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RlbGV0ZUNoaXAoY2hpcDogU2JiQ2hpcEVsZW1lbnQ8VD4pOiB2b2lkIHtcbiAgICBjb25zdCBjaGlwcyA9IHRoaXMuX2VuYWJsZWRDaGlwRWxlbWVudHMoKTtcbiAgICBjaGlwLnJlbW92ZSgpO1xuICAgIHRoaXMuX2VtaXRJbnB1dEV2ZW50cygpO1xuICAgIHRoaXMuX2ZvY3VzQ2hpcChjaGlwcy5pbmRleE9mKGNoaXApKTsgLy8gRm9jdXMgdGhlIG5leHQgY2hpcFxuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzIGFuIGVuYWJsZWQgY2hpcC4gSWYgbm9uZSBhcmUgcHJlc2VudCwgZm9jdXMgdGhlIGlucHV0XG4gICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGVuYWJsZWQgY2hpcC4gSWYgbnVsbCwgZm9jdXMgdGhlIGxhc3Qgb25lLlxuICAgKi9cbiAgcHJpdmF0ZSBfZm9jdXNDaGlwKGluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZW5hYmxlZENoaXBzID0gdGhpcy5fZW5hYmxlZENoaXBFbGVtZW50cygpO1xuXG4gICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQgJiYgZW5hYmxlZENoaXBzW2luZGV4XSkge1xuICAgICAgZW5hYmxlZENoaXBzW2luZGV4XS5mb2N1cygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbmFibGVkQ2hpcHMubGVuZ3RoID4gMCkge1xuICAgICAgZW5hYmxlZENoaXBzW2VuYWJsZWRDaGlwcy5sZW5ndGggLSAxXS5mb2N1cygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lucHV0RWxlbWVudD8uZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXRJbnB1dEV2ZW50cygpOiB2b2lkIHtcbiAgICAvKiogVGhlIGlucHV0IGV2ZW50IGZpcmVzIHdoZW4gdGhlIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgYXMgYSBkaXJlY3QgcmVzdWx0IG9mIGEgdXNlciBhY3Rpb24uICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSkpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNoYW5nZSBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIG1vZGlmaWVzIHRoZSBlbGVtZW50J3MgdmFsdWUuXG4gICAgICogVW5saWtlIHRoZSBpbnB1dCBldmVudCwgdGhlIGNoYW5nZSBldmVudCBpcyBub3QgbmVjZXNzYXJpbHkgZmlyZWRcbiAgICAgKiBmb3IgZWFjaCBhbHRlcmF0aW9uIHRvIGFuIGVsZW1lbnQncyB2YWx1ZS5cbiAgICAgKi9cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlQ2hpcEVsZW1lbnQodmFsdWU6IFQgfCBudWxsLCBsYWJlbD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChpc1NlcnZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdDaGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2JiLWNoaXAnKSBhcyBTYmJDaGlwRWxlbWVudDxUPjtcbiAgICBuZXdDaGlwLnZhbHVlID0gdmFsdWU7XG4gICAgbmV3Q2hpcC5pbm5lclRleHQgPSBsYWJlbCA/PyAodmFsdWUgPyB0aGlzLmRpc3BsYXlXaXRoPy4odmFsdWUpIDogbnVsbCkgPz8gJyc7XG4gICAgaWYgKFxuICAgICAgaW1wb3J0Lm1ldGEuZW52LkRFViAmJlxuICAgICAgIWRpc3BsYXlXaXRoV2FybmluZ0xvZ2dlZCAmJlxuICAgICAgIWxhYmVsICYmXG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAhdGhpcy5kaXNwbGF5V2l0aFxuICAgICkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgZGlzcGxheVdpdGggaGFzIG5vdCBiZWVuIHNldCB5ZXQgZm9yIHNiYi1jaGlwLWdyb3VwIGFuZCB2YWx1ZSBpcyBhbiBvYmplY3QuXG4gICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIG9iamVjdCB2YWx1ZXMsIHlvdSBuZWVkIHRvIHByb3ZpZGUgZGlzcGxheVdpZHRoIGJlZm9yZVxuICAgICAgICAgc2V0dGluZyBvciBzZWxlY3RpbmcgYW55IHZhbHVlLmAsXG4gICAgICApO1xuICAgICAgZGlzcGxheVdpdGhXYXJuaW5nTG9nZ2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5pbnNlcnRCZWZvcmUobmV3Q2hpcCwgdGhpcy5faW5wdXRFbGVtZW50ID8/IHRoaXMucXVlcnlTZWxlY3RvcignaW5wdXQnKSk7XG4gIH1cblxuICBwcml2YXRlIF9yZWFjdFRvSW5wdXRDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLl9pbnB1dEVsZW1lbnQ/LmRpc2FibGVkID8/IGZhbHNlO1xuICAgIHRoaXMuX3Byb3h5U3RhdGVUb0NoaXBzKCk7XG4gIH1cblxuICBwcml2YXRlIF9wcm94eVN0YXRlVG9DaGlwcygpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGlwRWxlbWVudHMoKS5mb3JFYWNoKChjKSA9PiB7XG4gICAgICBjLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZCB8fCB0aGlzLmZvcm1EaXNhYmxlZDtcbiAgICAgIGMucmVhZE9ubHkgPSB0aGlzLl9pbnB1dEVsZW1lbnQ/Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSA/PyBmYWxzZTtcbiAgICAgIGMubmVnYXRpdmUgPSB0aGlzLm5lZ2F0aXZlO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlU2l6ZShzaXplOiBTYmJGb3JtRmllbGRFbGVtZW50WydzaXplJ10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcHJldmlvdXNTaXplKSB7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKGBzaXplLSR7dGhpcy5fcHJldmlvdXNTaXplfWApO1xuICAgIH1cbiAgICB0aGlzLl9wcmV2aW91c1NpemUgPSBzaXplO1xuICAgIGlmICh0aGlzLl9wcmV2aW91c1NpemUpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5hZGQoYHNpemUtJHt0aGlzLl9wcmV2aW91c1NpemV9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlSW5wdXREZXNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lucHV0RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pbnB1dEVsZW1lbnQuc2V0QXR0cmlidXRlKFxuICAgICAgJ2FyaWEtZGVzY3JpcHRpb24nLFxuICAgICAgYCR7aTE4bkNoaXBHcm91cElucHV0RGVzY3JpcHRpb25bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7dGhpcy52YWx1ZS5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl9zZXR1cENvbXBvbmVudH0+PC9zbG90PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1jaGlwLWdyb3VwJzogU2JiQ2hpcEdyb3VwRWxlbWVudDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudEV2ZW50TWFwIHtcbiAgICBjaGlwaW5wdXR0b2tlbmVuZDogQ3VzdG9tRXZlbnQ8U2JiQ2hpcElucHV0VG9rZW5FbmRFdmVudERldGFpbHM8YW55Pj47XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJ2YWx1ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUF5RE0sdUJBQW1CLE1BQUE7OzBCQUR4QixjQUFjLGdCQUFnQixDQUFDOzs7O0FBQ2MsTUFBQSxjQUFBLGlCQUM1QyxpQkFBaUIsaUJBQWlCLHVCQUF1Qix5QkFBeUIsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7QUFENUQsRUFBQSxtQkFBUSxZQUU3QztBQUFBLElBb0VDLGNBQUE7QUFDRSxZQUFBO0FBeEJGO0FBSUE7QUFLQTtBQVRnQix5QkFBQSxnQ0EvQ1osa0JBQUEsTUFBQSwwQkFBQSxHQUFtQixrQkFBQSxNQUFBLDJCQStDc0MsSUFBSTtBQUlqRCx5QkFBQSxrQ0FBQSxrQkFBQSxNQUFBLDhCQUFBLEdBQUEsa0JBQUEsTUFBQSw2QkFBMEIsQ0FBQyxPQUFPLENBQUM7QUFLbkMseUJBQUEsOEJBQUEsa0JBQUEsTUFBQSxnQ0FBQSxHQUFBLGtCQUFBLE1BQUEseUJBQXFCLEtBQUs7QUFL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
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@sbb-esta/lyne-elements-dev",
3
- "version": "4.6.0-dev.1772088473",
3
+ "version": "4.6.0-dev.1772094630",
4
4
  "description": "Lyne Design System",
5
5
  "keywords": [
6
6
  "design system",
7
7
  "web components",
8
8
  "lit",
9
9
  "storybook",
10
- "https://github.com/sbb-design-systems/lyne-components/commit/0c239fd7a48c0db7e5f0aac852407126e1fb354e"
10
+ "https://github.com/sbb-design-systems/lyne-components/commit/de3c1c53c8e07f51393fcb6a281ba628e0362c19"
11
11
  ],
12
12
  "type": "module",
13
13
  "exports": {