@decidables/accumulable-elements 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,20 +4,20 @@
4
4
  * SPDX-License-Identifier: BSD-3-Clause
5
5
  */
6
6
  const t$1 = globalThis,
7
- e$2 = t$1.ShadowRoot && (void 0 === t$1.ShadyCSS || t$1.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype,
8
- s$2 = Symbol(),
7
+ e$2 = t$1.ShadowRoot && (undefined === t$1.ShadyCSS || t$1.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype,
8
+ s$1 = Symbol(),
9
9
  o$3 = new WeakMap();
10
10
  let n$2 = class n {
11
11
  constructor(t, e, o) {
12
- if (this._$cssResult$ = !0, o !== s$2) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");
12
+ if (this._$cssResult$ = true, o !== s$1) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");
13
13
  this.cssText = t, this.t = e;
14
14
  }
15
15
  get styleSheet() {
16
16
  let t = this.o;
17
17
  const s = this.t;
18
- if (e$2 && void 0 === t) {
19
- const e = void 0 !== s && 1 === s.length;
20
- e && (t = o$3.get(s)), void 0 === t && ((this.o = t = new CSSStyleSheet()).replaceSync(this.cssText), e && o$3.set(s, t));
18
+ if (e$2 && undefined === t) {
19
+ const e = undefined !== s && 1 === s.length;
20
+ e && (t = o$3.get(s)), undefined === t && ((this.o = t = new CSSStyleSheet()).replaceSync(this.cssText), e && o$3.set(s, t));
21
21
  }
22
22
  return t;
23
23
  }
@@ -25,20 +25,20 @@ let n$2 = class n {
25
25
  return this.cssText;
26
26
  }
27
27
  };
28
- const r$3 = t => new n$2("string" == typeof t ? t : t + "", void 0, s$2),
29
- i$2 = (t, ...e) => {
28
+ const r$3 = t => new n$2("string" == typeof t ? t : t + "", undefined, s$1),
29
+ i$3 = (t, ...e) => {
30
30
  const o = 1 === t.length ? t[0] : e.reduce((e, s, o) => e + (t => {
31
- if (!0 === t._$cssResult$) return t.cssText;
31
+ if (true === t._$cssResult$) return t.cssText;
32
32
  if ("number" == typeof t) return t;
33
33
  throw Error("Value passed to 'css' function must be a 'css' function result: " + t + ". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.");
34
34
  })(s) + t[o + 1], t[0]);
35
- return new n$2(o, t, s$2);
35
+ return new n$2(o, t, s$1);
36
36
  },
37
37
  S$1 = (s, o) => {
38
38
  if (e$2) s.adoptedStyleSheets = o.map(t => t instanceof CSSStyleSheet ? t : t.styleSheet);else for (const e of o) {
39
39
  const o = document.createElement("style"),
40
40
  n = t$1.litNonce;
41
- void 0 !== n && o.setAttribute("nonce", n), o.textContent = e.cssText, s.appendChild(o);
41
+ undefined !== n && o.setAttribute("nonce", n), o.textContent = e.cssText, s.appendChild(o);
42
42
  }
43
43
  },
44
44
  c$2 = e$2 ? t => t : t => t instanceof CSSStyleSheet ? (t => {
@@ -53,7 +53,7 @@ const r$3 = t => new n$2("string" == typeof t ? t : t + "", void 0, s$2),
53
53
  * SPDX-License-Identifier: BSD-3-Clause
54
54
  */
55
55
  const {
56
- is: i$1,
56
+ is: i$2,
57
57
  defineProperty: e$1,
58
58
  getOwnPropertyDescriptor: r$2,
59
59
  getOwnPropertyNames: h$1,
@@ -97,12 +97,12 @@ const {
97
97
  return i;
98
98
  }
99
99
  },
100
- f$1 = (t, s) => !i$1(t, s),
100
+ f$1 = (t, s) => !i$2(t, s),
101
101
  y$2 = {
102
- attribute: !0,
102
+ attribute: true,
103
103
  type: String,
104
104
  converter: u$1,
105
- reflect: !1,
105
+ reflect: false,
106
106
  hasChanged: f$1
107
107
  };
108
108
  Symbol.metadata ??= Symbol("metadata"), a$1.litPropertyMetadata ??= new WeakMap();
@@ -114,10 +114,10 @@ let b$1 = class b extends HTMLElement {
114
114
  return this.finalize(), this._$Eh && [...this._$Eh.keys()];
115
115
  }
116
116
  static createProperty(t, s = y$2) {
117
- if (s.state && (s.attribute = !1), this._$Ei(), this.elementProperties.set(t, s), !s.noAccessor) {
117
+ if (s.state && (s.attribute = false), this._$Ei(), this.elementProperties.set(t, s), !s.noAccessor) {
118
118
  const i = Symbol(),
119
119
  r = this.getPropertyDescriptor(t, i, s);
120
- void 0 !== r && e$1(this.prototype, t, r);
120
+ undefined !== r && e$1(this.prototype, t, r);
121
121
  }
122
122
  }
123
123
  static getPropertyDescriptor(t, s, i) {
@@ -140,8 +140,8 @@ let b$1 = class b extends HTMLElement {
140
140
  const r = e?.call(this);
141
141
  h.call(this, s), this.requestUpdate(t, r, i);
142
142
  },
143
- configurable: !0,
144
- enumerable: !0
143
+ configurable: true,
144
+ enumerable: true
145
145
  };
146
146
  }
147
147
  static getPropertyOptions(t) {
@@ -150,11 +150,11 @@ let b$1 = class b extends HTMLElement {
150
150
  static _$Ei() {
151
151
  if (this.hasOwnProperty(d$1("elementProperties"))) return;
152
152
  const t = n$1(this);
153
- t.finalize(), void 0 !== t.l && (this.l = [...t.l]), this.elementProperties = new Map(t.elementProperties);
153
+ t.finalize(), undefined !== t.l && (this.l = [...t.l]), this.elementProperties = new Map(t.elementProperties);
154
154
  }
155
155
  static finalize() {
156
156
  if (this.hasOwnProperty(d$1("finalized"))) return;
157
- if (this.finalized = !0, this._$Ei(), this.hasOwnProperty(d$1("properties"))) {
157
+ if (this.finalized = true, this._$Ei(), this.hasOwnProperty(d$1("properties"))) {
158
158
  const t = this.properties,
159
159
  s = [...h$1(t), ...o$2(t)];
160
160
  for (const i of s) this.createProperty(i, t[i]);
@@ -162,12 +162,12 @@ let b$1 = class b extends HTMLElement {
162
162
  const t = this[Symbol.metadata];
163
163
  if (null !== t) {
164
164
  const s = litPropertyMetadata.get(t);
165
- if (void 0 !== s) for (const [t, i] of s) this.elementProperties.set(t, i);
165
+ if (undefined !== s) for (const [t, i] of s) this.elementProperties.set(t, i);
166
166
  }
167
167
  this._$Eh = new Map();
168
168
  for (const [t, s] of this.elementProperties) {
169
169
  const i = this._$Eu(t, s);
170
- void 0 !== i && this._$Eh.set(i, t);
170
+ undefined !== i && this._$Eh.set(i, t);
171
171
  }
172
172
  this.elementStyles = this.finalizeStyles(this.styles);
173
173
  }
@@ -176,21 +176,21 @@ let b$1 = class b extends HTMLElement {
176
176
  if (Array.isArray(s)) {
177
177
  const e = new Set(s.flat(1 / 0).reverse());
178
178
  for (const s of e) i.unshift(c$2(s));
179
- } else void 0 !== s && i.push(c$2(s));
179
+ } else undefined !== s && i.push(c$2(s));
180
180
  return i;
181
181
  }
182
182
  static _$Eu(t, s) {
183
183
  const i = s.attribute;
184
- return !1 === i ? void 0 : "string" == typeof i ? i : "string" == typeof t ? t.toLowerCase() : void 0;
184
+ return false === i ? undefined : "string" == typeof i ? i : "string" == typeof t ? t.toLowerCase() : undefined;
185
185
  }
186
186
  constructor() {
187
- super(), this._$Ep = void 0, this.isUpdatePending = !1, this.hasUpdated = !1, this._$Em = null, this._$Ev();
187
+ super(), this._$Ep = undefined, this.isUpdatePending = false, this.hasUpdated = false, this._$Em = null, this._$Ev();
188
188
  }
189
189
  _$Ev() {
190
190
  this._$ES = new Promise(t => this.enableUpdating = t), this._$AL = new Map(), this._$E_(), this.requestUpdate(), this.constructor.l?.forEach(t => t(this));
191
191
  }
192
192
  addController(t) {
193
- (this._$EO ??= new Set()).add(t), void 0 !== this.renderRoot && this.isConnected && t.hostConnected?.();
193
+ (this._$EO ??= new Set()).add(t), undefined !== this.renderRoot && this.isConnected && t.hostConnected?.();
194
194
  }
195
195
  removeController(t) {
196
196
  this._$EO?.delete(t);
@@ -206,7 +206,7 @@ let b$1 = class b extends HTMLElement {
206
206
  return S$1(t, this.constructor.elementStyles), t;
207
207
  }
208
208
  connectedCallback() {
209
- this.renderRoot ??= this.createRenderRoot(), this.enableUpdating(!0), this._$EO?.forEach(t => t.hostConnected?.());
209
+ this.renderRoot ??= this.createRenderRoot(), this.enableUpdating(true), this._$EO?.forEach(t => t.hostConnected?.());
210
210
  }
211
211
  enableUpdating(t) {}
212
212
  disconnectedCallback() {
@@ -218,34 +218,34 @@ let b$1 = class b extends HTMLElement {
218
218
  _$EC(t, s) {
219
219
  const i = this.constructor.elementProperties.get(t),
220
220
  e = this.constructor._$Eu(t, i);
221
- if (void 0 !== e && !0 === i.reflect) {
222
- const r = (void 0 !== i.converter?.toAttribute ? i.converter : u$1).toAttribute(s, i.type);
221
+ if (undefined !== e && true === i.reflect) {
222
+ const r = (undefined !== i.converter?.toAttribute ? i.converter : u$1).toAttribute(s, i.type);
223
223
  this._$Em = t, null == r ? this.removeAttribute(e) : this.setAttribute(e, r), this._$Em = null;
224
224
  }
225
225
  }
226
226
  _$AK(t, s) {
227
227
  const i = this.constructor,
228
228
  e = i._$Eh.get(t);
229
- if (void 0 !== e && this._$Em !== e) {
229
+ if (undefined !== e && this._$Em !== e) {
230
230
  const t = i.getPropertyOptions(e),
231
231
  r = "function" == typeof t.converter ? {
232
232
  fromAttribute: t.converter
233
- } : void 0 !== t.converter?.fromAttribute ? t.converter : u$1;
233
+ } : undefined !== t.converter?.fromAttribute ? t.converter : u$1;
234
234
  this._$Em = e, this[e] = r.fromAttribute(s, t.type), this._$Em = null;
235
235
  }
236
236
  }
237
237
  requestUpdate(t, s, i) {
238
- if (void 0 !== t) {
238
+ if (undefined !== t) {
239
239
  if (i ??= this.constructor.getPropertyOptions(t), !(i.hasChanged ?? f$1)(this[t], s)) return;
240
240
  this.P(t, s, i);
241
241
  }
242
- !1 === this.isUpdatePending && (this._$ES = this._$ET());
242
+ false === this.isUpdatePending && (this._$ES = this._$ET());
243
243
  }
244
244
  P(t, s, i) {
245
- this._$AL.has(t) || this._$AL.set(t, s), !0 === i.reflect && this._$Em !== t && (this._$Ej ??= new Set()).add(t);
245
+ this._$AL.has(t) || this._$AL.set(t, s), true === i.reflect && this._$Em !== t && (this._$Ej ??= new Set()).add(t);
246
246
  }
247
247
  async _$ET() {
248
- this.isUpdatePending = !0;
248
+ this.isUpdatePending = true;
249
249
  try {
250
250
  await this._$ES;
251
251
  } catch (t) {
@@ -262,26 +262,26 @@ let b$1 = class b extends HTMLElement {
262
262
  if (!this.hasUpdated) {
263
263
  if (this.renderRoot ??= this.createRenderRoot(), this._$Ep) {
264
264
  for (const [t, s] of this._$Ep) this[t] = s;
265
- this._$Ep = void 0;
265
+ this._$Ep = undefined;
266
266
  }
267
267
  const t = this.constructor.elementProperties;
268
- if (t.size > 0) for (const [s, i] of t) !0 !== i.wrapped || this._$AL.has(s) || void 0 === this[s] || this.P(s, this[s], i);
268
+ if (t.size > 0) for (const [s, i] of t) true !== i.wrapped || this._$AL.has(s) || undefined === this[s] || this.P(s, this[s], i);
269
269
  }
270
- let t = !1;
270
+ let t = false;
271
271
  const s = this._$AL;
272
272
  try {
273
273
  t = this.shouldUpdate(s), t ? (this.willUpdate(s), this._$EO?.forEach(t => t.hostUpdate?.()), this.update(s)) : this._$EU();
274
274
  } catch (s) {
275
- throw t = !1, this._$EU(), s;
275
+ throw t = false, this._$EU(), s;
276
276
  }
277
277
  t && this._$AE(s);
278
278
  }
279
279
  willUpdate(t) {}
280
280
  _$AE(t) {
281
- this._$EO?.forEach(t => t.hostUpdated?.()), this.hasUpdated || (this.hasUpdated = !0, this.firstUpdated(t)), this.updated(t);
281
+ this._$EO?.forEach(t => t.hostUpdated?.()), this.hasUpdated || (this.hasUpdated = true, this.firstUpdated(t)), this.updated(t);
282
282
  }
283
283
  _$EU() {
284
- this._$AL = new Map(), this.isUpdatePending = !1;
284
+ this._$AL = new Map(), this.isUpdatePending = false;
285
285
  }
286
286
  get updateComplete() {
287
287
  return this.getUpdateComplete();
@@ -290,7 +290,7 @@ let b$1 = class b extends HTMLElement {
290
290
  return this._$ES;
291
291
  }
292
292
  shouldUpdate(t) {
293
- return !0;
293
+ return true;
294
294
  }
295
295
  update(t) {
296
296
  this._$Ej &&= this._$Ej.forEach(t => this._$EC(t, this[t])), this._$EU();
@@ -310,10 +310,10 @@ b$1.elementStyles = [], b$1.shadowRootOptions = {
310
310
  * SPDX-License-Identifier: BSD-3-Clause
311
311
  */
312
312
  const t = globalThis,
313
- i = t.trustedTypes,
314
- s$1 = i ? i.createPolicy("lit-html", {
313
+ i$1 = t.trustedTypes,
314
+ s = i$1 ? i$1.createPolicy("lit-html", {
315
315
  createHTML: t => t
316
- }) : void 0,
316
+ }) : undefined,
317
317
  e = "$lit$",
318
318
  h = `lit$${Math.random().toFixed(9).slice(2)}$`,
319
319
  o$1 = "?" + h,
@@ -338,19 +338,19 @@ const t = globalThis,
338
338
  }),
339
339
  x$1 = y$1(1),
340
340
  b = y$1(2),
341
- w = Symbol.for("lit-noChange"),
342
- T = Symbol.for("lit-nothing"),
341
+ T = Symbol.for("lit-noChange"),
342
+ E = Symbol.for("lit-nothing"),
343
343
  A = new WeakMap(),
344
- E = r$1.createTreeWalker(r$1, 129);
345
- function C(t, i) {
346
- if (!Array.isArray(t) || !t.hasOwnProperty("raw")) throw Error("invalid template strings array");
347
- return void 0 !== s$1 ? s$1.createHTML(i) : i;
344
+ C = r$1.createTreeWalker(r$1, 129);
345
+ function P(t, i) {
346
+ if (!a(t) || !t.hasOwnProperty("raw")) throw Error("invalid template strings array");
347
+ return undefined !== s ? s.createHTML(i) : i;
348
348
  }
349
- const P = (t, i) => {
349
+ const V = (t, i) => {
350
350
  const s = t.length - 1,
351
351
  o = [];
352
352
  let r,
353
- l = 2 === i ? "<svg>" : "",
353
+ l = 2 === i ? "<svg>" : 3 === i ? "<math>" : "",
354
354
  c = f;
355
355
  for (let i = 0; i < s; i++) {
356
356
  const s = t[i];
@@ -358,13 +358,13 @@ const P = (t, i) => {
358
358
  u,
359
359
  d = -1,
360
360
  y = 0;
361
- for (; y < s.length && (c.lastIndex = y, u = c.exec(s), null !== u);) y = c.lastIndex, c === f ? "!--" === u[1] ? c = v : void 0 !== u[1] ? c = _ : void 0 !== u[2] ? ($.test(u[2]) && (r = RegExp("</" + u[2], "g")), c = m) : void 0 !== u[3] && (c = m) : c === m ? ">" === u[0] ? (c = r ?? f, d = -1) : void 0 === u[1] ? d = -2 : (d = c.lastIndex - u[2].length, a = u[1], c = void 0 === u[3] ? m : '"' === u[3] ? g : p) : c === g || c === p ? c = m : c === v || c === _ ? c = f : (c = m, r = void 0);
361
+ for (; y < s.length && (c.lastIndex = y, u = c.exec(s), null !== u);) y = c.lastIndex, c === f ? "!--" === u[1] ? c = v : undefined !== u[1] ? c = _ : undefined !== u[2] ? ($.test(u[2]) && (r = RegExp("</" + u[2], "g")), c = m) : undefined !== u[3] && (c = m) : c === m ? ">" === u[0] ? (c = r ?? f, d = -1) : undefined === u[1] ? d = -2 : (d = c.lastIndex - u[2].length, a = u[1], c = undefined === u[3] ? m : '"' === u[3] ? g : p) : c === g || c === p ? c = m : c === v || c === _ ? c = f : (c = m, r = undefined);
362
362
  const x = c === m && t[i + 1].startsWith("/>") ? " " : "";
363
363
  l += c === f ? s + n : d >= 0 ? (o.push(a), s.slice(0, d) + e + s.slice(d) + h + x) : s + h + (-2 === d ? i : x);
364
364
  }
365
- return [C(t, l + (t[s] || "<?>") + (2 === i ? "</svg>" : "")), o];
365
+ return [P(t, l + (t[s] || "<?>") + (2 === i ? "</svg>" : 3 === i ? "</math>" : "")), o];
366
366
  };
367
- class V {
367
+ class N {
368
368
  constructor({
369
369
  strings: t,
370
370
  _$litType$: s
@@ -375,12 +375,12 @@ class V {
375
375
  a = 0;
376
376
  const u = t.length - 1,
377
377
  d = this.parts,
378
- [f, v] = P(t, s);
379
- if (this.el = V.createElement(f, n), E.currentNode = this.el.content, 2 === s) {
378
+ [f, v] = V(t, s);
379
+ if (this.el = N.createElement(f, n), C.currentNode = this.el.content, 2 === s || 3 === s) {
380
380
  const t = this.el.content.firstChild;
381
381
  t.replaceWith(...t.childNodes);
382
382
  }
383
- for (; null !== (r = E.nextNode()) && d.length < u;) {
383
+ for (; null !== (r = C.nextNode()) && d.length < u;) {
384
384
  if (1 === r.nodeType) {
385
385
  if (r.hasAttributes()) for (const t of r.getAttributeNames()) if (t.endsWith(e)) {
386
386
  const i = v[a++],
@@ -391,7 +391,7 @@ class V {
391
391
  index: c,
392
392
  name: e[2],
393
393
  strings: s,
394
- ctor: "." === e[1] ? k : "?" === e[1] ? H : "@" === e[1] ? I : R
394
+ ctor: "." === e[1] ? H : "?" === e[1] ? I : "@" === e[1] ? L : k
395
395
  }), r.removeAttribute(t);
396
396
  } else t.startsWith(h) && (d.push({
397
397
  type: 6,
@@ -401,8 +401,8 @@ class V {
401
401
  const t = r.textContent.split(h),
402
402
  s = t.length - 1;
403
403
  if (s > 0) {
404
- r.textContent = i ? i.emptyScript : "";
405
- for (let i = 0; i < s; i++) r.append(t[i], l()), E.nextNode(), d.push({
404
+ r.textContent = i$1 ? i$1.emptyScript : "";
405
+ for (let i = 0; i < s; i++) r.append(t[i], l()), C.nextNode(), d.push({
406
406
  type: 2,
407
407
  index: ++c
408
408
  });
@@ -427,15 +427,15 @@ class V {
427
427
  return s.innerHTML = t, s;
428
428
  }
429
429
  }
430
- function N(t, i, s = t, e) {
431
- if (i === w) return i;
432
- let h = void 0 !== e ? s._$Co?.[e] : s._$Cl;
433
- const o = c(i) ? void 0 : i._$litDirective$;
434
- return h?.constructor !== o && (h?._$AO?.(!1), void 0 === o ? h = void 0 : (h = new o(t), h._$AT(t, s, e)), void 0 !== e ? (s._$Co ??= [])[e] = h : s._$Cl = h), void 0 !== h && (i = N(t, h._$AS(t, i.values), h, e)), i;
430
+ function S(t, i, s = t, e) {
431
+ if (i === T) return i;
432
+ let h = undefined !== e ? s._$Co?.[e] : s._$Cl;
433
+ const o = c(i) ? undefined : i._$litDirective$;
434
+ return h?.constructor !== o && (h?._$AO?.(false), undefined === o ? h = undefined : (h = new o(t), h._$AT(t, s, e)), undefined !== e ? (s._$Co ??= [])[e] = h : s._$Cl = h), undefined !== h && (i = S(t, h._$AS(t, i.values), h, e)), i;
435
435
  }
436
- class S {
436
+ class M {
437
437
  constructor(t, i) {
438
- this._$AV = [], this._$AN = void 0, this._$AD = t, this._$AM = i;
438
+ this._$AV = [], this._$AN = undefined, this._$AD = t, this._$AM = i;
439
439
  }
440
440
  get parentNode() {
441
441
  return this._$AM.parentNode;
@@ -450,37 +450,37 @@ class S {
450
450
  },
451
451
  parts: s
452
452
  } = this._$AD,
453
- e = (t?.creationScope ?? r$1).importNode(i, !0);
454
- E.currentNode = e;
455
- let h = E.nextNode(),
453
+ e = (t?.creationScope ?? r$1).importNode(i, true);
454
+ C.currentNode = e;
455
+ let h = C.nextNode(),
456
456
  o = 0,
457
457
  n = 0,
458
458
  l = s[0];
459
- for (; void 0 !== l;) {
459
+ for (; undefined !== l;) {
460
460
  if (o === l.index) {
461
461
  let i;
462
- 2 === l.type ? i = new M(h, h.nextSibling, this, t) : 1 === l.type ? i = new l.ctor(h, l.name, l.strings, this, t) : 6 === l.type && (i = new L(h, this, t)), this._$AV.push(i), l = s[++n];
462
+ 2 === l.type ? i = new R(h, h.nextSibling, this, t) : 1 === l.type ? i = new l.ctor(h, l.name, l.strings, this, t) : 6 === l.type && (i = new z(h, this, t)), this._$AV.push(i), l = s[++n];
463
463
  }
464
- o !== l?.index && (h = E.nextNode(), o++);
464
+ o !== l?.index && (h = C.nextNode(), o++);
465
465
  }
466
- return E.currentNode = r$1, e;
466
+ return C.currentNode = r$1, e;
467
467
  }
468
468
  p(t) {
469
469
  let i = 0;
470
- for (const s of this._$AV) void 0 !== s && (void 0 !== s.strings ? (s._$AI(t, s, i), i += s.strings.length - 2) : s._$AI(t[i])), i++;
470
+ for (const s of this._$AV) undefined !== s && (undefined !== s.strings ? (s._$AI(t, s, i), i += s.strings.length - 2) : s._$AI(t[i])), i++;
471
471
  }
472
472
  }
473
- class M {
473
+ class R {
474
474
  get _$AU() {
475
475
  return this._$AM?._$AU ?? this._$Cv;
476
476
  }
477
477
  constructor(t, i, s, e) {
478
- this.type = 2, this._$AH = T, this._$AN = void 0, this._$AA = t, this._$AB = i, this._$AM = s, this.options = e, this._$Cv = e?.isConnected ?? !0;
478
+ this.type = 2, this._$AH = E, this._$AN = undefined, this._$AA = t, this._$AB = i, this._$AM = s, this.options = e, this._$Cv = e?.isConnected ?? true;
479
479
  }
480
480
  get parentNode() {
481
481
  let t = this._$AA.parentNode;
482
482
  const i = this._$AM;
483
- return void 0 !== i && 11 === t?.nodeType && (t = i.parentNode), t;
483
+ return undefined !== i && 11 === t?.nodeType && (t = i.parentNode), t;
484
484
  }
485
485
  get startNode() {
486
486
  return this._$AA;
@@ -489,52 +489,52 @@ class M {
489
489
  return this._$AB;
490
490
  }
491
491
  _$AI(t, i = this) {
492
- t = N(this, t, i), c(t) ? t === T || null == t || "" === t ? (this._$AH !== T && this._$AR(), this._$AH = T) : t !== this._$AH && t !== w && this._(t) : void 0 !== t._$litType$ ? this.$(t) : void 0 !== t.nodeType ? this.T(t) : u(t) ? this.k(t) : this._(t);
492
+ t = S(this, t, i), c(t) ? t === E || null == t || "" === t ? (this._$AH !== E && this._$AR(), this._$AH = E) : t !== this._$AH && t !== T && this._(t) : undefined !== t._$litType$ ? this.$(t) : undefined !== t.nodeType ? this.T(t) : u(t) ? this.k(t) : this._(t);
493
493
  }
494
- S(t) {
494
+ O(t) {
495
495
  return this._$AA.parentNode.insertBefore(t, this._$AB);
496
496
  }
497
497
  T(t) {
498
- this._$AH !== t && (this._$AR(), this._$AH = this.S(t));
498
+ this._$AH !== t && (this._$AR(), this._$AH = this.O(t));
499
499
  }
500
500
  _(t) {
501
- this._$AH !== T && c(this._$AH) ? this._$AA.nextSibling.data = t : this.T(r$1.createTextNode(t)), this._$AH = t;
501
+ this._$AH !== E && c(this._$AH) ? this._$AA.nextSibling.data = t : this.T(r$1.createTextNode(t)), this._$AH = t;
502
502
  }
503
503
  $(t) {
504
504
  const {
505
505
  values: i,
506
506
  _$litType$: s
507
507
  } = t,
508
- e = "number" == typeof s ? this._$AC(t) : (void 0 === s.el && (s.el = V.createElement(C(s.h, s.h[0]), this.options)), s);
508
+ e = "number" == typeof s ? this._$AC(t) : (undefined === s.el && (s.el = N.createElement(P(s.h, s.h[0]), this.options)), s);
509
509
  if (this._$AH?._$AD === e) this._$AH.p(i);else {
510
- const t = new S(e, this),
510
+ const t = new M(e, this),
511
511
  s = t.u(this.options);
512
512
  t.p(i), this.T(s), this._$AH = t;
513
513
  }
514
514
  }
515
515
  _$AC(t) {
516
516
  let i = A.get(t.strings);
517
- return void 0 === i && A.set(t.strings, i = new V(t)), i;
517
+ return undefined === i && A.set(t.strings, i = new N(t)), i;
518
518
  }
519
519
  k(t) {
520
520
  a(this._$AH) || (this._$AH = [], this._$AR());
521
521
  const i = this._$AH;
522
522
  let s,
523
523
  e = 0;
524
- for (const h of t) e === i.length ? i.push(s = new M(this.S(l()), this.S(l()), this, this.options)) : s = i[e], s._$AI(h), e++;
524
+ for (const h of t) e === i.length ? i.push(s = new R(this.O(l()), this.O(l()), this, this.options)) : s = i[e], s._$AI(h), e++;
525
525
  e < i.length && (this._$AR(s && s._$AB.nextSibling, e), i.length = e);
526
526
  }
527
527
  _$AR(t = this._$AA.nextSibling, i) {
528
- for (this._$AP?.(!1, !0, i); t && t !== this._$AB;) {
528
+ for (this._$AP?.(false, true, i); t && t !== this._$AB;) {
529
529
  const i = t.nextSibling;
530
530
  t.remove(), t = i;
531
531
  }
532
532
  }
533
533
  setConnected(t) {
534
- void 0 === this._$AM && (this._$Cv = t, this._$AP?.(t));
534
+ undefined === this._$AM && (this._$Cv = t, this._$AP?.(t));
535
535
  }
536
536
  }
537
- class R {
537
+ class k {
538
538
  get tagName() {
539
539
  return this.element.tagName;
540
540
  }
@@ -542,72 +542,72 @@ class R {
542
542
  return this._$AM._$AU;
543
543
  }
544
544
  constructor(t, i, s, e, h) {
545
- this.type = 1, this._$AH = T, this._$AN = void 0, this.element = t, this.name = i, this._$AM = e, this.options = h, s.length > 2 || "" !== s[0] || "" !== s[1] ? (this._$AH = Array(s.length - 1).fill(new String()), this.strings = s) : this._$AH = T;
545
+ this.type = 1, this._$AH = E, this._$AN = undefined, this.element = t, this.name = i, this._$AM = e, this.options = h, s.length > 2 || "" !== s[0] || "" !== s[1] ? (this._$AH = Array(s.length - 1).fill(new String()), this.strings = s) : this._$AH = E;
546
546
  }
547
547
  _$AI(t, i = this, s, e) {
548
548
  const h = this.strings;
549
- let o = !1;
550
- if (void 0 === h) t = N(this, t, i, 0), o = !c(t) || t !== this._$AH && t !== w, o && (this._$AH = t);else {
549
+ let o = false;
550
+ if (undefined === h) t = S(this, t, i, 0), o = !c(t) || t !== this._$AH && t !== T, o && (this._$AH = t);else {
551
551
  const e = t;
552
552
  let n, r;
553
- for (t = h[0], n = 0; n < h.length - 1; n++) r = N(this, e[s + n], i, n), r === w && (r = this._$AH[n]), o ||= !c(r) || r !== this._$AH[n], r === T ? t = T : t !== T && (t += (r ?? "") + h[n + 1]), this._$AH[n] = r;
553
+ for (t = h[0], n = 0; n < h.length - 1; n++) r = S(this, e[s + n], i, n), r === T && (r = this._$AH[n]), o ||= !c(r) || r !== this._$AH[n], r === E ? t = E : t !== E && (t += (r ?? "") + h[n + 1]), this._$AH[n] = r;
554
554
  }
555
555
  o && !e && this.j(t);
556
556
  }
557
557
  j(t) {
558
- t === T ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t ?? "");
558
+ t === E ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t ?? "");
559
559
  }
560
560
  }
561
- class k extends R {
561
+ class H extends k {
562
562
  constructor() {
563
563
  super(...arguments), this.type = 3;
564
564
  }
565
565
  j(t) {
566
- this.element[this.name] = t === T ? void 0 : t;
566
+ this.element[this.name] = t === E ? undefined : t;
567
567
  }
568
568
  }
569
- class H extends R {
569
+ class I extends k {
570
570
  constructor() {
571
571
  super(...arguments), this.type = 4;
572
572
  }
573
573
  j(t) {
574
- this.element.toggleAttribute(this.name, !!t && t !== T);
574
+ this.element.toggleAttribute(this.name, !!t && t !== E);
575
575
  }
576
576
  }
577
- class I extends R {
577
+ class L extends k {
578
578
  constructor(t, i, s, e, h) {
579
579
  super(t, i, s, e, h), this.type = 5;
580
580
  }
581
581
  _$AI(t, i = this) {
582
- if ((t = N(this, t, i, 0) ?? T) === w) return;
582
+ if ((t = S(this, t, i, 0) ?? E) === T) return;
583
583
  const s = this._$AH,
584
- e = t === T && s !== T || t.capture !== s.capture || t.once !== s.once || t.passive !== s.passive,
585
- h = t !== T && (s === T || e);
584
+ e = t === E && s !== E || t.capture !== s.capture || t.once !== s.once || t.passive !== s.passive,
585
+ h = t !== E && (s === E || e);
586
586
  e && this.element.removeEventListener(this.name, this, s), h && this.element.addEventListener(this.name, this, t), this._$AH = t;
587
587
  }
588
588
  handleEvent(t) {
589
589
  "function" == typeof this._$AH ? this._$AH.call(this.options?.host ?? this.element, t) : this._$AH.handleEvent(t);
590
590
  }
591
591
  }
592
- class L {
592
+ class z {
593
593
  constructor(t, i, s) {
594
- this.element = t, this.type = 6, this._$AN = void 0, this._$AM = i, this.options = s;
594
+ this.element = t, this.type = 6, this._$AN = undefined, this._$AM = i, this.options = s;
595
595
  }
596
596
  get _$AU() {
597
597
  return this._$AM._$AU;
598
598
  }
599
599
  _$AI(t) {
600
- N(this, t);
600
+ S(this, t);
601
601
  }
602
602
  }
603
- const Z = t.litHtmlPolyfillSupport;
604
- Z?.(V, M), (t.litHtmlVersions ??= []).push("3.1.3");
605
- const j = (t, i, s) => {
603
+ const j = t.litHtmlPolyfillSupport;
604
+ j?.(N, R), (t.litHtmlVersions ??= []).push("3.2.1");
605
+ const B = (t, i, s) => {
606
606
  const e = s?.renderBefore ?? i;
607
607
  let h = e._$litPart$;
608
- if (void 0 === h) {
608
+ if (undefined === h) {
609
609
  const t = s?.renderBefore ?? null;
610
- e._$litPart$ = h = new M(i.insertBefore(l(), t), t, void 0, s ?? {});
610
+ e._$litPart$ = h = new R(i.insertBefore(l(), t), t, undefined, s ?? {});
611
611
  }
612
612
  return h._$AI(t), h;
613
613
  };
@@ -617,38 +617,38 @@ const j = (t, i, s) => {
617
617
  * Copyright 2017 Google LLC
618
618
  * SPDX-License-Identifier: BSD-3-Clause
619
619
  */
620
- class s extends b$1 {
620
+ class r extends b$1 {
621
621
  constructor() {
622
622
  super(...arguments), this.renderOptions = {
623
623
  host: this
624
- }, this._$Do = void 0;
624
+ }, this._$Do = undefined;
625
625
  }
626
626
  createRenderRoot() {
627
627
  const t = super.createRenderRoot();
628
628
  return this.renderOptions.renderBefore ??= t.firstChild, t;
629
629
  }
630
630
  update(t) {
631
- const i = this.render();
632
- this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t), this._$Do = j(i, this.renderRoot, this.renderOptions);
631
+ const s = this.render();
632
+ this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t), this._$Do = B(s, this.renderRoot, this.renderOptions);
633
633
  }
634
634
  connectedCallback() {
635
- super.connectedCallback(), this._$Do?.setConnected(!0);
635
+ super.connectedCallback(), this._$Do?.setConnected(true);
636
636
  }
637
637
  disconnectedCallback() {
638
- super.disconnectedCallback(), this._$Do?.setConnected(!1);
638
+ super.disconnectedCallback(), this._$Do?.setConnected(false);
639
639
  }
640
640
  render() {
641
- return w;
641
+ return T;
642
642
  }
643
643
  }
644
- s._$litElement$ = !0, s[("finalized")] = !0, globalThis.litElementHydrateSupport?.({
645
- LitElement: s
644
+ r._$litElement$ = true, r["finalized"] = true, globalThis.litElementHydrateSupport?.({
645
+ LitElement: r
646
646
  });
647
- const r = globalThis.litElementPolyfillSupport;
648
- r?.({
649
- LitElement: s
647
+ const i = globalThis.litElementPolyfillSupport;
648
+ i?.({
649
+ LitElement: r
650
650
  });
651
- (globalThis.litElementVersions ??= []).push("4.0.5");
651
+ (globalThis.litElementVersions ??= []).push("4.1.1");
652
652
 
653
653
  function ascending$1(a, b) {
654
654
  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
@@ -1888,7 +1888,7 @@ function yesdrag(view, noclick) {
1888
1888
  }
1889
1889
  }
1890
1890
 
1891
- var constant$2 = (x => () => x);
1891
+ var constant$2 = x => () => x;
1892
1892
 
1893
1893
  function DragEvent(type, {
1894
1894
  sourceEvent,
@@ -2494,7 +2494,7 @@ function hsl2rgb(h, m1, m2) {
2494
2494
  return (h < 60 ? m1 + (m2 - m1) * h / 60 : h < 180 ? m2 : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 : m1) * 255;
2495
2495
  }
2496
2496
 
2497
- var constant$1 = (x => () => x);
2497
+ var constant$1 = x => () => x;
2498
2498
 
2499
2499
  function linear$2(a, d) {
2500
2500
  return function (t) {
@@ -4566,7 +4566,7 @@ Transform.prototype;
4566
4566
  DecidablesElement Base Class - Not intended for instantiation!
4567
4567
  <decidables-element>
4568
4568
  */
4569
- class DecidablesElement extends s {
4569
+ class DecidablesElement extends r {
4570
4570
  getComputedStyleValue(property) {
4571
4571
  return getComputedStyle(this).getPropertyValue(property).trim();
4572
4572
  }
@@ -4819,7 +4819,7 @@ class DecidablesElement extends s {
4819
4819
  `;
4820
4820
  }
4821
4821
  static get styles() {
4822
- return i$2`
4822
+ return i$3`
4823
4823
  :host {
4824
4824
  ---shadow-0: var(--shadow-0, ${r$3(this.cssBoxShadow(0))});
4825
4825
  ---shadow-2: var(--shadow-2, ${r$3(this.cssBoxShadow(2))});
@@ -4897,8 +4897,11 @@ class DecidablesButton extends DecidablesElement {
4897
4897
  this.disabled = false;
4898
4898
  }
4899
4899
  static get styles() {
4900
- return [super.styles, i$2`
4900
+ return [super.styles, i$3`
4901
4901
  :host {
4902
+ ---decidables-button-background-color-disabled: var(--decidables-button-background-color, var(---color-element-disabled));
4903
+ ---decidables-button-background-color-enabled: var(--decidables-button-background-color, var(---color-element-enabled));
4904
+
4902
4905
  margin: 0.25rem;
4903
4906
  }
4904
4907
 
@@ -4918,7 +4921,7 @@ class DecidablesButton extends DecidablesElement {
4918
4921
  }
4919
4922
 
4920
4923
  button:disabled {
4921
- background-color: var(--decidables-button-background-color, var(---color-element-disabled));
4924
+ background-color: var(---decidables-button-background-color-disabled);
4922
4925
  outline: none;
4923
4926
  box-shadow: none;
4924
4927
  }
@@ -4926,7 +4929,7 @@ class DecidablesButton extends DecidablesElement {
4926
4929
  button:enabled {
4927
4930
  cursor: pointer;
4928
4931
 
4929
- background-color: var(--decidables-button-background-color, var(---color-element-enabled));
4932
+ background-color: var(---decidables-button-background-color-enabled);
4930
4933
  outline: none;
4931
4934
  box-shadow: var(---shadow-2);
4932
4935
  }
@@ -4967,7 +4970,7 @@ customElements.define('decidables-button', DecidablesButton);
4967
4970
  * Copyright 2018 Google LLC
4968
4971
  * SPDX-License-Identifier: BSD-3-Clause
4969
4972
  */
4970
- const o = o => o ?? T;
4973
+ const o = o => o ?? E;
4971
4974
 
4972
4975
  class DecidablesSlider extends DecidablesElement {
4973
4976
  static get properties() {
@@ -4977,6 +4980,11 @@ class DecidablesSlider extends DecidablesElement {
4977
4980
  type: Boolean,
4978
4981
  reflect: true
4979
4982
  },
4983
+ scale: {
4984
+ attribute: 'scale',
4985
+ type: Boolean,
4986
+ reflect: true
4987
+ },
4980
4988
  max: {
4981
4989
  attribute: 'max',
4982
4990
  type: Number,
@@ -4996,6 +5004,11 @@ class DecidablesSlider extends DecidablesElement {
4996
5004
  attribute: 'value',
4997
5005
  type: Number,
4998
5006
  reflect: true
5007
+ },
5008
+ nonlinear: {
5009
+ attribute: false,
5010
+ type: Boolean,
5011
+ reflect: false
4999
5012
  }
5000
5013
  };
5001
5014
  }
@@ -5004,13 +5017,30 @@ class DecidablesSlider extends DecidablesElement {
5004
5017
 
5005
5018
  // Attributes
5006
5019
  this.disabled = false;
5020
+ this.scale = false;
5007
5021
  this.max = undefined;
5008
5022
  this.min = undefined;
5009
5023
  this.step = undefined;
5010
5024
  this.value = undefined;
5011
- }
5012
- changed(event) {
5013
- this.value = event.target.value;
5025
+ this.nonlinear = false;
5026
+
5027
+ // Properties
5028
+ this.rangeMax = undefined;
5029
+ this.rangeMin = undefined;
5030
+ this.rangeStep = undefined;
5031
+ this.rangeValue = undefined;
5032
+
5033
+ // Transform
5034
+ this.toRange = undefined;
5035
+ this.fromRange = undefined;
5036
+ }
5037
+ nonlinearRange(nonlinear, toRange, fromRange) {
5038
+ this.nonlinear = nonlinear;
5039
+ this.toRange = nonlinear ? toRange : undefined;
5040
+ this.fromRange = nonlinear ? fromRange : undefined;
5041
+ }
5042
+ rangeChanged(event) {
5043
+ this.value = this.nonlinear ? this.fromRange(event.target.value) : event.target.value;
5014
5044
  this.dispatchEvent(new CustomEvent('change', {
5015
5045
  detail: {
5016
5046
  value: this.value
@@ -5018,12 +5048,25 @@ class DecidablesSlider extends DecidablesElement {
5018
5048
  bubbles: true
5019
5049
  }));
5020
5050
  }
5021
- inputted(event) {
5051
+ rangeInputted(event) {
5052
+ this.value = this.nonlinear ? this.fromRange(event.target.value) : event.target.value;
5053
+ }
5054
+ spinnerInputted(event) {
5022
5055
  this.value = event.target.value;
5023
5056
  }
5057
+ willUpdate() {
5058
+ this.rangeMax = this.max === undefined ? undefined : this.nonlinear ? this.toRange(this.max) : this.max;
5059
+ this.rangeMin = this.min === undefined ? undefined : this.nonlinear ? this.toRange(this.min) : this.min;
5060
+ this.rangeStep = this.step === undefined ? undefined : this.nonlinear ? 'any' : this.step;
5061
+ this.rangeValue = this.value === undefined ? undefined : this.nonlinear ? this.toRange(this.value) : this.value;
5062
+ }
5024
5063
  static get styles() {
5025
- return [super.styles, i$2`
5064
+ return [super.styles, i$3`
5026
5065
  :host {
5066
+ ---decidables-slider-background-color: var(--decidables-slider-background-color, var(---color-element-disabled));
5067
+ ---decidables-slider-color: var(--decidables-slider-color, var(---color-element-enabled));
5068
+ ---decidables-spinner-background-color: var(--decidables-slider-background-color, none);
5069
+
5027
5070
  ---shadow-2-rotate: var(--shadow-2-rotate, ${r$3(this.cssBoxShadow(2, true, false))});
5028
5071
  ---shadow-4-rotate: var(--shadow-4-rotate, ${r$3(this.cssBoxShadow(4, true, false))});
5029
5072
  ---shadow-8-rotate: var(--shadow-8-rotate, ${r$3(this.cssBoxShadow(8, true, false))});
@@ -5041,7 +5084,10 @@ class DecidablesSlider extends DecidablesElement {
5041
5084
  }
5042
5085
 
5043
5086
  .range {
5044
- display: inline-block;
5087
+ position: relative;
5088
+ display: flex;
5089
+
5090
+ flex-direction: row;
5045
5091
 
5046
5092
  width: 3.5rem;
5047
5093
  height: 4.75rem;
@@ -5052,6 +5098,8 @@ class DecidablesSlider extends DecidablesElement {
5052
5098
  --decidables-spinner-input-width: 3.5rem;
5053
5099
 
5054
5100
  margin: 0 0.25rem 0.25rem;
5101
+
5102
+ background: var(---decidables-spinner-background-color);
5055
5103
  }
5056
5104
 
5057
5105
  /* Adapted from http://danielstern.ca/range.css/#/ */
@@ -5090,14 +5138,14 @@ class DecidablesSlider extends DecidablesElement {
5090
5138
  width: 100%;
5091
5139
  height: 4px;
5092
5140
 
5093
- background: var(---color-element-disabled);
5141
+ background: var(---decidables-slider-background-color);
5094
5142
  border: 0;
5095
5143
  border-radius: 2px;
5096
5144
  box-shadow: none;
5097
5145
  }
5098
5146
 
5099
5147
  input[type=range]:focus::-webkit-slider-runnable-track {
5100
- background: var(---color-element-disabled);
5148
+ background: var(---decidables-slider-background-color);
5101
5149
  }
5102
5150
 
5103
5151
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
@@ -5105,7 +5153,7 @@ class DecidablesSlider extends DecidablesElement {
5105
5153
  width: 100%;
5106
5154
  height: 4px;
5107
5155
 
5108
- background: var(---color-element-disabled);
5156
+ background: var(---decidables-slider-background-color);
5109
5157
  border: 0;
5110
5158
  border-radius: 2px;
5111
5159
  box-shadow: none;
@@ -5125,7 +5173,7 @@ class DecidablesSlider extends DecidablesElement {
5125
5173
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
5126
5174
  input[type=range]::-ms-fill-lower {
5127
5175
  background: #cccccc;
5128
- /* background: var(---color-element-disabled); */
5176
+ /* background: var(---decidables-slider-background-color); */
5129
5177
  border: 0;
5130
5178
  border-radius: 2px;
5131
5179
  box-shadow: none;
@@ -5134,7 +5182,7 @@ class DecidablesSlider extends DecidablesElement {
5134
5182
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
5135
5183
  input[type=range]::-ms-fill-upper {
5136
5184
  background: #cccccc;
5137
- /* background: var(---color-element-disabled); */
5185
+ /* background: var(---decidables-slider-background-color); */
5138
5186
  border: 0;
5139
5187
  border-radius: 2px;
5140
5188
  box-shadow: none;
@@ -5142,12 +5190,12 @@ class DecidablesSlider extends DecidablesElement {
5142
5190
 
5143
5191
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
5144
5192
  input[type=range]:focus::-ms-fill-lower {
5145
- background: var(---color-element-disabled);
5193
+ background: var(---decidables-slider-background-color);
5146
5194
  }
5147
5195
 
5148
5196
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
5149
5197
  input[type=range]:focus::-ms-fill-upper {
5150
- background: var(---color-element-disabled);
5198
+ background: var(---decidables-slider-background-color);
5151
5199
  }
5152
5200
 
5153
5201
  /* Thumb */
@@ -5165,12 +5213,12 @@ class DecidablesSlider extends DecidablesElement {
5165
5213
  }
5166
5214
 
5167
5215
  input[type=range]:disabled::-webkit-slider-thumb {
5168
- background: var(---color-element-disabled);
5216
+ background: var(---decidables-slider-background-color);
5169
5217
  box-shadow: none;
5170
5218
  }
5171
5219
 
5172
5220
  input[type=range]:enabled::-webkit-slider-thumb {
5173
- background: var(---color-element-enabled);
5221
+ background: var(---decidables-slider-color);
5174
5222
  box-shadow: var(---shadow-2-rotate);
5175
5223
  }
5176
5224
 
@@ -5201,13 +5249,13 @@ class DecidablesSlider extends DecidablesElement {
5201
5249
 
5202
5250
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
5203
5251
  input[type=range]:disabled::-moz-range-thumb {
5204
- background: var(---color-element-disabled);
5252
+ background: var(---decidables-slider-background-color);
5205
5253
  box-shadow: none;
5206
5254
  }
5207
5255
 
5208
5256
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
5209
5257
  input[type=range]:enabled::-moz-range-thumb {
5210
- background: var(---color-element-enabled);
5258
+ background: var(---decidables-slider-color);
5211
5259
  box-shadow: var(---shadow-2-rotate);
5212
5260
  }
5213
5261
 
@@ -5244,13 +5292,13 @@ class DecidablesSlider extends DecidablesElement {
5244
5292
 
5245
5293
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
5246
5294
  input[type=range]:disabled::-ms-thumb {
5247
- background: var(---color-element-disabled);
5295
+ background: var(---decidables-slider-background-color);
5248
5296
  box-shadow: none;
5249
5297
  }
5250
5298
 
5251
5299
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
5252
5300
  input[type=range]:enabled::-ms-thumb {
5253
- background: var(---color-element-enabled);
5301
+ background: var(---decidables-slider-color);
5254
5302
  box-shadow: var(---shadow-2-rotate);
5255
5303
  }
5256
5304
 
@@ -5272,6 +5320,33 @@ class DecidablesSlider extends DecidablesElement {
5272
5320
  :host(.keyboard) input[type=range]:enabled:focus:active::-ms-thumb {
5273
5321
  box-shadow: var(---shadow-8-rotate);
5274
5322
  }
5323
+
5324
+ datalist {
5325
+ position: absolute;
5326
+ left: 2rem;
5327
+ z-index: -1;
5328
+ display: flex;
5329
+
5330
+ flex-direction: column;
5331
+
5332
+ align-items: flex-start;
5333
+ justify-content: space-between;
5334
+
5335
+ height: 4.75rem;
5336
+
5337
+ font-size: 0.75rem;
5338
+ }
5339
+
5340
+ option {
5341
+ padding: 0;
5342
+
5343
+ line-height: 0.8;
5344
+ min-block-size: 0;
5345
+ }
5346
+
5347
+ option::before {
5348
+ content: "– ";
5349
+ }
5275
5350
  `];
5276
5351
  }
5277
5352
  render() {
@@ -5280,9 +5355,15 @@ class DecidablesSlider extends DecidablesElement {
5280
5355
  <slot></slot>
5281
5356
  </label>
5282
5357
  <div class="range">
5283
- <input ?disabled=${this.disabled} type="range" id="slider" min=${o(this.min)} max=${o(this.max)} step=${o(this.step)} .value=${this.value} @change=${this.changed.bind(this)} @input=${this.inputted.bind(this)}>
5358
+ <input ?disabled=${this.disabled} type="range" id="slider" min=${o(this.rangeMin)} max=${o(this.rangeMax)} step=${o(this.rangeStep)} .value=${this.rangeValue} @change=${this.rangeChanged.bind(this)} @input=${this.rangeInputted.bind(this)}>
5359
+ ${this.scale ? x$1`
5360
+ <datalist id="ticks">
5361
+ <option value=${o(this.rangeMax)} label=${o(this.max)}></option>
5362
+ <option value=${o(this.rangeMin)} label=${o(this.min)}></option>
5363
+ </datalist>
5364
+ ` : x$1``}
5284
5365
  </div>
5285
- <decidables-spinner ?disabled=${this.disabled} min=${o(this.min)} max=${o(this.max)} step=${o(this.step)} .value=${this.value} @input=${this.inputted.bind(this)}></decidables-spinner>
5366
+ <decidables-spinner ?disabled=${this.disabled} min=${o(this.min)} max=${o(this.max)} step=${o(this.step)} .value=${this.value} @input=${this.spinnerInputted.bind(this)}></decidables-spinner>
5286
5367
  `;
5287
5368
  }
5288
5369
  }
@@ -5332,7 +5413,7 @@ class DecidablesSpinner extends DecidablesElement {
5332
5413
  this.value = event.target.value;
5333
5414
  }
5334
5415
  static get styles() {
5335
- return [super.styles, i$2`
5416
+ return [super.styles, i$3`
5336
5417
  :host {
5337
5418
  ---decidables-spinner-font-size: var(--decidables-spinner-font-size, 1.125rem);
5338
5419
  ---decidables-spinner-input-width: var(--decidables-spinner-input-width, 4rem);
@@ -5471,7 +5552,7 @@ class DecidablesSwitch extends DecidablesElement {
5471
5552
  }));
5472
5553
  }
5473
5554
  static get styles() {
5474
- return [super.styles, i$2`
5555
+ return [super.styles, i$3`
5475
5556
  :host {
5476
5557
  display: flex;
5477
5558
 
@@ -5624,7 +5705,7 @@ class DecidablesToggle extends DecidablesElement {
5624
5705
  this.disabled = false;
5625
5706
  }
5626
5707
  static get styles() {
5627
- return [super.styles, i$2`
5708
+ return [super.styles, i$3`
5628
5709
  fieldset {
5629
5710
  display: flex;
5630
5711
 
@@ -5699,7 +5780,7 @@ class DecidablesToggleOption extends DecidablesElement {
5699
5780
  }));
5700
5781
  }
5701
5782
  static get styles() {
5702
- return [super.styles, i$2`
5783
+ return [super.styles, i$3`
5703
5784
  :host {
5704
5785
  display: flex;
5705
5786
  }
@@ -5893,7 +5974,7 @@ class AccumulableElement extends DecidablesElement {
5893
5974
  }, {});
5894
5975
  }
5895
5976
  static get styles() {
5896
- return [super.styles, i$2`
5977
+ return [super.styles, i$3`
5897
5978
  :host {
5898
5979
  /* Declare base colors */
5899
5980
  ${r$3(Object.keys(AccumulableElement.colors).map(color => {
@@ -6056,7 +6137,7 @@ class AccumulableControl extends AccumulableElement {
6056
6137
  this.state = 'ended';
6057
6138
  }
6058
6139
  static get styles() {
6059
- return [super.styles, i$2`
6140
+ return [super.styles, i$3`
6060
6141
  :host {
6061
6142
  display: inline-block;
6062
6143
  }
@@ -6083,15 +6164,15 @@ class AccumulableControl extends AccumulableElement {
6083
6164
  render() {
6084
6165
  return x$1`
6085
6166
  <div class="holder">
6086
- ${this.trials ? x$1`<decidables-slider class="trials" min="1" max="100" step="1" .value=${this.trials} @change=${this.setTrials.bind(this)} @input=${this.setTrials.bind(this)}>Trials</decidables-slider>` : x$1``}
6167
+ ${this.trials != null ? x$1`<decidables-slider class="trials" min="1" max="100" step="1" .value=${this.trials} @change=${this.setTrials.bind(this)} @input=${this.setTrials.bind(this)}>Trials</decidables-slider>` : x$1``}
6087
6168
  ${this.resample ? x$1`
6088
6169
  <div class="buttons">
6089
6170
  ${this.resample ? x$1`<decidables-button name="resample" @click=${this.doResample.bind(this)}>Resample</decidables-button>` : x$1``}
6090
6171
  </div>
6091
6172
  ` : x$1``}
6092
- ${this.duration ? x$1`<decidables-slider class="duration" min="10" max="2000" step="10" .value=${this.duration} @change=${this.setDuration.bind(this)} @input=${this.setDuration.bind(this)}>Duration</decidables-slider>` : x$1``}
6093
- ${this.coherence ? x$1`<decidables-slider class="coherence" min="0" max="1" step=".01" .value=${this.coherence} @change=${this.setCoherence.bind(this)} @input=${this.setCoherence.bind(this)}>Coherence</decidables-slider>` : x$1``}
6094
- ${this.color !== undefined ? x$1`
6173
+ ${this.duration != null ? x$1`<decidables-slider class="duration" min="10" max="2000" step="10" .value=${this.duration} @change=${this.setDuration.bind(this)} @input=${this.setDuration.bind(this)}>Duration</decidables-slider>` : x$1``}
6174
+ ${this.coherence != null ? x$1`<decidables-slider class="coherence" min="0" max="1" step=".01" .value=${this.coherence} @change=${this.setCoherence.bind(this)} @input=${this.setCoherence.bind(this)}>Coherence</decidables-slider>` : x$1``}
6175
+ ${this.color != null ? x$1`
6095
6176
  <decidables-toggle class="color" @change=${this.chooseColor.bind(this)}>
6096
6177
  <span slot="label">Emphasis</span>
6097
6178
  <decidables-toggle-option name="toggle" value="none" ?checked=${this.color === 'none'}>None</decidables-toggle-option>
@@ -6116,13 +6197,13 @@ customElements.define('accumulable-control', AccumulableControl);
6116
6197
  DDMMath Static Class - Not intended for instantiation!
6117
6198
 
6118
6199
  Model parameters:
6119
- a = boundary separation
6120
- z = starting point as a proportion of a
6121
- v = drift rate (per second)
6122
- t0 = non-decision time (in milliseconds)
6123
- s = within-trial variability in drift rate (s^2 = infinitesimal variance)
6200
+ a = boundary separation [0, Infinity)
6201
+ z = starting point as a proportion of a (0, 1)
6202
+ v = drift rate (per second) (-Infinity, Infinity)
6203
+ t0 = non-decision time (in milliseconds) (0, Infinity)
6204
+ s = within-trial variability in drift rate (s^2 = infinitesimal variance) [0, Infinity)
6124
6205
 
6125
- zPrime = starting point on a 0-to-a scale (typically used in published equations)
6206
+ zPrime = starting point on a 0-to-a scale (typically used in published equations) [0, Infinity)
6126
6207
 
6127
6208
  Behavioral variables:
6128
6209
  pE = proportion of error trials
@@ -6142,7 +6223,37 @@ customElements.define('accumulable-control', AccumulableControl);
6142
6223
  EZ-diffusion model (Wagenmakers et al., 2007)
6143
6224
  */
6144
6225
  class DDMMath {
6145
- static s = 1;
6226
+ static s = {
6227
+ DEFAULT: 1
6228
+ };
6229
+ static a = {
6230
+ DEFAULT: 1.2,
6231
+ MIN: 0.01,
6232
+ MAX: 2.0,
6233
+ STEP: 0.01,
6234
+ JUMP: 0.1
6235
+ };
6236
+ static z = {
6237
+ DEFAULT: 0.55,
6238
+ MIN: 0.01,
6239
+ MAX: 0.99,
6240
+ STEP: 0.01,
6241
+ JUMP: 0.1
6242
+ };
6243
+ static v = {
6244
+ DEFAULT: 1.5,
6245
+ MIN: 0.01,
6246
+ MAX: 5.0,
6247
+ STEP: 0.01,
6248
+ JUMP: 0.1
6249
+ };
6250
+ static t0 = {
6251
+ DEFAULT: 150,
6252
+ MIN: 0,
6253
+ MAX: 500,
6254
+ STEP: 1,
6255
+ JUMP: 10
6256
+ };
6146
6257
 
6147
6258
  // Calculate a bunch of statistics for an array of trials
6148
6259
  static trials2stats(trials) {
@@ -6210,7 +6321,7 @@ class DDMMath {
6210
6321
  }
6211
6322
 
6212
6323
  // Probability of an Error Response
6213
- static azv2pE(a, z, v, s = DDMMath.s) {
6324
+ static azv2pE(a, z, v, s = DDMMath.s.DEFAULT) {
6214
6325
  const zPrime = a * z;
6215
6326
  const A = Math.exp(-2 * v * a / s ** 2);
6216
6327
  const Z = Math.exp(-2 * v * zPrime / s ** 2);
@@ -6218,13 +6329,13 @@ class DDMMath {
6218
6329
  }
6219
6330
 
6220
6331
  // Probability of a Correct Response
6221
- static azv2pC(a, z, v, s = DDMMath.s) {
6332
+ static azv2pC(a, z, v, s = DDMMath.s.DEFAULT) {
6222
6333
  return DDMMath.azv2pE(a, 1 - z, -v, s);
6223
6334
  }
6224
6335
 
6225
6336
  // Mean Overall RT
6226
6337
  // Equation 5 (Grasman et al., 2009)
6227
- static azvt02m(a, z, v, t0, s = DDMMath.s) {
6338
+ static azvt02m(a, z, v, t0, s = DDMMath.s.DEFAULT) {
6228
6339
  const zPrime = a * z;
6229
6340
  const A = Math.exp(-2 * v * a / s ** 2) - 1;
6230
6341
  const Z = Math.exp(-2 * v * zPrime / s ** 2) - 1;
@@ -6234,7 +6345,7 @@ class DDMMath {
6234
6345
 
6235
6346
  // SD Overall RT
6236
6347
  // Equation 6 (Grasman et al., 2009)
6237
- static azv2sd(a, z, v, s = DDMMath.s) {
6348
+ static azv2sd(a, z, v, s = DDMMath.s.DEFAULT) {
6238
6349
  const zPrime = a * z;
6239
6350
  const A = Math.exp(-2 * v * a / s ** 2) - 1;
6240
6351
  const Z = Math.exp(-2 * v * zPrime / s ** 2) - 1;
@@ -6244,7 +6355,7 @@ class DDMMath {
6244
6355
 
6245
6356
  // Mean Error RT
6246
6357
  // Equation 13 (Grasman et al., 2009)
6247
- static azvt02mE(a, z, v, t0, s = DDMMath.s) {
6358
+ static azvt02mE(a, z, v, t0, s = DDMMath.s.DEFAULT) {
6248
6359
  function phi(x, y) {
6249
6360
  return Math.exp(2 * v * y / s ** 2) - Math.exp(2 * v * x / s ** 2);
6250
6361
  }
@@ -6255,7 +6366,7 @@ class DDMMath {
6255
6366
 
6256
6367
  // SD Error RT
6257
6368
  // Equation 14 (Grasman et al., 2009)
6258
- static azv2sdE(a, z, v, s = DDMMath.s) {
6369
+ static azv2sdE(a, z, v, s = DDMMath.s.DEFAULT) {
6259
6370
  function phi(x, y) {
6260
6371
  return Math.exp(2 * v * y / s ** 2) - Math.exp(2 * v * x / s ** 2);
6261
6372
  }
@@ -6265,17 +6376,17 @@ class DDMMath {
6265
6376
  }
6266
6377
 
6267
6378
  // Mean Correct RT
6268
- static azvt02mC(a, z, v, t0, s = DDMMath.s) {
6379
+ static azvt02mC(a, z, v, t0, s = DDMMath.s.DEFAULT) {
6269
6380
  return DDMMath.azvt02mE(a, 1 - z, -v, t0, s);
6270
6381
  }
6271
6382
 
6272
6383
  // SD Correct RT
6273
- static azv2sdC(a, z, v, s = DDMMath.s) {
6384
+ static azv2sdC(a, z, v, s = DDMMath.s.DEFAULT) {
6274
6385
  return DDMMath.azv2sdE(a, 1 - z, -v, s);
6275
6386
  }
6276
6387
 
6277
6388
  // Density of Error RT
6278
- static tazv2gE(t, a, z, v, s = DDMMath.s) {
6389
+ static tazv2gE(t, a, z, v, s = DDMMath.s.DEFAULT) {
6279
6390
  if (!t) return 0;
6280
6391
  const zPrime = a * z;
6281
6392
  const base = Math.PI * s ** 2 / a ** 2 * Math.exp(-zPrime * v / s ** 2);
@@ -6292,7 +6403,7 @@ class DDMMath {
6292
6403
  }
6293
6404
 
6294
6405
  // Density of Correct RT
6295
- static tazv2gC(t, a, z, v, s = DDMMath.s) {
6406
+ static tazv2gC(t, a, z, v, s = DDMMath.s.DEFAULT) {
6296
6407
  return DDMMath.tazv2gE(t, a, 1 - z, -v, s);
6297
6408
  }
6298
6409
 
@@ -6427,10 +6538,7 @@ class AccumulableResponse extends AccumulableElement {
6427
6538
  this.startTime = undefined; // Start time of current trial
6428
6539
  this.rt = undefined; // RT for current trial
6429
6540
 
6430
- this.correctCount = 0; // Count of Correct Trials
6431
- this.errorCount = 0; // Count of Error Trials
6432
- this.nrCount = 0; // Count of No Response trials
6433
-
6541
+ this.data = {};
6434
6542
  this.trials = []; // Record of trials in block
6435
6543
  this.alignState();
6436
6544
  }
@@ -6447,11 +6555,10 @@ class AccumulableResponse extends AccumulableElement {
6447
6555
  }
6448
6556
  }
6449
6557
  get totalPayoff() {
6450
- return this.correctCount * this.correctPayoff + this.errorCount * this.errorPayoff + this.nrCount * this.nrPayoff;
6558
+ return this.data.correctCount * this.correctPayoff + this.data.errorCount * this.errorPayoff + this.data.nrCount * this.nrPayoff;
6451
6559
  }
6452
6560
  alignState() {
6453
- const stats = DDMMath.trials2stats(this.trials);
6454
- Object.assign(this, stats);
6561
+ this.data = DDMMath.trials2stats(this.trials);
6455
6562
  }
6456
6563
  start(signal, trial) {
6457
6564
  this.startTime = Date.now();
@@ -6466,7 +6573,6 @@ class AccumulableResponse extends AccumulableElement {
6466
6573
  this.state = 'feedback';
6467
6574
  if (this.response === undefined) {
6468
6575
  this.outcome = 'nr';
6469
- this.nrCount += 1;
6470
6576
  this.rt = undefined;
6471
6577
  this.trials.push({
6472
6578
  trial: this.trialCount,
@@ -6491,10 +6597,8 @@ class AccumulableResponse extends AccumulableElement {
6491
6597
  this.response = response;
6492
6598
  if (this.signal === this.response) {
6493
6599
  this.outcome = 'correct';
6494
- this.correctCount += 1;
6495
6600
  } else if (this.signal !== this.response) {
6496
6601
  this.outcome = 'error';
6497
- this.errorCount += 1;
6498
6602
  }
6499
6603
  this.trials.push({
6500
6604
  trial: this.trialCount,
@@ -6513,16 +6617,7 @@ class AccumulableResponse extends AccumulableElement {
6513
6617
  response: this.response,
6514
6618
  outcome: this.outcome,
6515
6619
  payoff: this.trialPayoff,
6516
- correctCount: this.correctCount,
6517
- errorCount: this.errorCount,
6518
- nrCount: this.nrCount,
6519
- accuracy: this.accuracy,
6520
- meanRT: this.meanRT,
6521
- correctMeanRT: this.correctMeanRT,
6522
- errorMeanRT: this.errorMeanRT,
6523
- sdRT: this.sdRT,
6524
- correctSDRT: this.correctSDRT,
6525
- errorSDRT: this.errorSDRT,
6620
+ data: this.data,
6526
6621
  totalPayoff: this.totalPayoff
6527
6622
  },
6528
6623
  bubbles: true
@@ -6535,9 +6630,6 @@ class AccumulableResponse extends AccumulableElement {
6535
6630
  this.signal = undefined;
6536
6631
  this.response = undefined;
6537
6632
  this.outcome = undefined;
6538
- this.correctCount = 0;
6539
- this.errorCount = 0;
6540
- this.nrCount = 0;
6541
6633
  this.trials = [];
6542
6634
  this.alignState();
6543
6635
  }
@@ -6561,7 +6653,7 @@ class AccumulableResponse extends AccumulableElement {
6561
6653
  super.disconnectedCallback();
6562
6654
  }
6563
6655
  static get styles() {
6564
- return [super.styles, i$2`
6656
+ return [super.styles, i$3`
6565
6657
  :host {
6566
6658
  display: inline-block;
6567
6659
  }
@@ -6891,7 +6983,7 @@ class AccumulableTable extends AccumulableElement {
6891
6983
  this.sendEvent();
6892
6984
  }
6893
6985
  static get styles() {
6894
- return [super.styles, i$2`
6986
+ return [super.styles, i$3`
6895
6987
  :host {
6896
6988
  display: inline-block;
6897
6989
  }
@@ -7228,7 +7320,7 @@ function createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {
7228
7320
  };
7229
7321
  }
7230
7322
 
7231
- var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyoKICAgIERETU1hdGggU3RhdGljIENsYXNzIC0gTm90IGludGVuZGVkIGZvciBpbnN0YW50aWF0aW9uIQoKICAgIE1vZGVsIHBhcmFtZXRlcnM6CiAgICAgIGEgPSBib3VuZGFyeSBzZXBhcmF0aW9uCiAgICAgIHogPSBzdGFydGluZyBwb2ludCBhcyBhIHByb3BvcnRpb24gb2YgYQogICAgICB2ID0gZHJpZnQgcmF0ZSAocGVyIHNlY29uZCkKICAgICAgdDAgPSBub24tZGVjaXNpb24gdGltZSAoaW4gbWlsbGlzZWNvbmRzKQogICAgICBzID0gd2l0aGluLXRyaWFsIHZhcmlhYmlsaXR5IGluIGRyaWZ0IHJhdGUgKHNeMiA9IGluZmluaXRlc2ltYWwgdmFyaWFuY2UpCgogICAgICB6UHJpbWUgPSBzdGFydGluZyBwb2ludCBvbiBhIDAtdG8tYSBzY2FsZSAodHlwaWNhbGx5IHVzZWQgaW4gcHVibGlzaGVkIGVxdWF0aW9ucykKCiAgICBCZWhhdmlvcmFsIHZhcmlhYmxlczoKICAgICAgcEUgPSBwcm9wb3J0aW9uIG9mIGVycm9yIHRyaWFscwogICAgICBwQyA9IHByb3BvcnRpb24gb2YgY29ycmVjdCB0cmlhbHMKICAgICAgbSA9IG1lYW4gb2Ygb3ZlcmFsbCBSVHMgKGluIG1pbGxpc2Vjb25kcykKICAgICAgbUUgPSBtZWFuIG9mIGVycm9yIFJUcyAoaW4gbWlsbGlzZWNvbmRzKQogICAgICBtQyA9IG1lYW4gY29ycmVjdCBSVHMgKGluIG1pbGxpc2Vjb25kcykKICAgICAgc2QgPSBzdGFuZGFyZCBkZXZpYXRpb24gb2Ygb3ZlcmFsbCBSVHMgKGluIG1pbGxpc2Vjb25kcykKICAgICAgc2RFID0gc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGVycm9yIFJUcyAoaW4gbWlsbGlzZWNvbmRzKQogICAgICBzZEMgPSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgY29ycmVjdCBSVHMgKGluIG1pbGxpc2Vjb25kcykKCiAgICBFcXVhdGlvbnM6CiAgICAgIFByb2JhYmlsaXR5IG9mIGNvcnJlY3QgYW5kIGVycm9yIHJlc3BvbnNlcyAoQWxleGFuZHJvd2ljeiwgMjAyMCkKICAgICAgTWVhbiBvZiBvdmVyYWxsLCBlcnJvciwgYW5kIGNvcnJlY3QgUlRzIChHcmFzbWFuIGV0IGFsLiwgMjAwOSkKICAgICAgU3RhbmRhcmQgZGV2aWF0aW9uIG9mIG92ZXJhbGwsIGVycm9yLCBhbmQgY29ycmVjdCBSVHMgKEdyYXNtYW4gZXQgYWwuLCAyMDA5KQogICAgICBEZW5zaXR5IG9mIGVycm9yIGFuZCBjb3JyZWN0IFJUIGRpc3RyaWJ1dGlvbnMgKEFsZXhhbmRyb3dpY3osIDIwMjApCiAgICAgIEVaLWRpZmZ1c2lvbiBtb2RlbCAoV2FnZW5tYWtlcnMgZXQgYWwuLCAyMDA3KQogICovCiAgY2xhc3MgRERNTWF0aCB7CiAgICBzdGF0aWMgcyA9IDE7CgogICAgLy8gQ2FsY3VsYXRlIGEgYnVuY2ggb2Ygc3RhdGlzdGljcyBmb3IgYW4gYXJyYXkgb2YgdHJpYWxzCiAgICBzdGF0aWMgdHJpYWxzMnN0YXRzKHRyaWFscykgewogICAgICBjb25zdCBzdGF0cyA9IHt9OwoKICAgICAgLy8gRmlyc3Qtb3JkZXIgc3VtcwogICAgICBjb25zdCBzdW1zID0gdHJpYWxzLnJlZHVjZSgoYWNjdW11bGF0b3IsIHRyaWFsKSA9PiB7CiAgICAgICAgc3dpdGNoICh0cmlhbC5vdXRjb21lKSB7CiAgICAgICAgICBjYXNlICdjb3JyZWN0JzoKICAgICAgICAgICAgYWNjdW11bGF0b3IuY29ycmVjdENvdW50ICs9IDE7CiAgICAgICAgICAgIGFjY3VtdWxhdG9yLmNvcnJlY3RSVFN1bSArPSB0cmlhbC5ydDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdlcnJvcic6CiAgICAgICAgICAgIGFjY3VtdWxhdG9yLmVycm9yQ291bnQgKz0gMTsKICAgICAgICAgICAgYWNjdW11bGF0b3IuZXJyb3JSVFN1bSArPSB0cmlhbC5ydDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICducic6CiAgICAgICAgICAgIGFjY3VtdWxhdG9yLm5yQ291bnQgKz0gMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAvLyBOby1vcAogICAgICAgIH0KICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7CiAgICAgIH0sIHsKICAgICAgICBjb3JyZWN0Q291bnQ6IDAsCiAgICAgICAgZXJyb3JDb3VudDogMCwKICAgICAgICBuckNvdW50OiAwLAogICAgICAgIGNvcnJlY3RSVFN1bTogMCwKICAgICAgICBlcnJvclJUU3VtOiAwCiAgICAgIH0pOwoKICAgICAgLy8gRmlyc3Qtb3JkZXIgc3RhdHMKICAgICAgc3RhdHMuY29ycmVjdENvdW50ID0gc3Vtcy5jb3JyZWN0Q291bnQ7CiAgICAgIHN0YXRzLmVycm9yQ291bnQgPSBzdW1zLmVycm9yQ291bnQ7CiAgICAgIHN0YXRzLm5yQ291bnQgPSBzdW1zLm5yQ291bnQ7CiAgICAgIHN0YXRzLmFjY3VyYWN5ID0gc3Vtcy5jb3JyZWN0Q291bnQgLyAoc3Vtcy5jb3JyZWN0Q291bnQgKyBzdW1zLmVycm9yQ291bnQgKyBzdW1zLm5yQ291bnQpOwogICAgICBzdGF0cy5jb3JyZWN0TWVhblJUID0gc3Vtcy5jb3JyZWN0UlRTdW0gLyBzdW1zLmNvcnJlY3RDb3VudDsKICAgICAgc3RhdHMuZXJyb3JNZWFuUlQgPSBzdW1zLmVycm9yUlRTdW0gLyBzdW1zLmVycm9yQ291bnQ7CiAgICAgIHN0YXRzLm1lYW5SVCA9IChzdW1zLmNvcnJlY3RSVFN1bSArIHN1bXMuZXJyb3JSVFN1bSkgLyAoc3Vtcy5jb3JyZWN0Q291bnQgKyBzdW1zLmVycm9yQ291bnQpOwoKICAgICAgLy8gU2Vjb25kLW9yZGVyIHN1bXMKICAgICAgY29uc3Qgc3VtczIgPSB0cmlhbHMucmVkdWNlKChhY2N1bXVsYXRvciwgdHJpYWwpID0+IHsKICAgICAgICBzd2l0Y2ggKHRyaWFsLm91dGNvbWUpIHsKICAgICAgICAgIGNhc2UgJ2NvcnJlY3QnOgogICAgICAgICAgICBhY2N1bXVsYXRvci5zcyArPSAodHJpYWwucnQgLSBzdGF0cy5tZWFuUlQpICoqIDI7CiAgICAgICAgICAgIGFjY3VtdWxhdG9yLmNvcnJlY3RTUyArPSAodHJpYWwucnQgLSBzdGF0cy5jb3JyZWN0TWVhblJUKSAqKiAyOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ2Vycm9yJzoKICAgICAgICAgICAgYWNjdW11bGF0b3Iuc3MgKz0gKHRyaWFsLnJ0IC0gc3RhdHMubWVhblJUKSAqKiAyOwogICAgICAgICAgICBhY2N1bXVsYXRvci5lcnJvclNTICs9ICh0cmlhbC5ydCAtIHN0YXRzLmVycm9yTWVhblJUKSAqKiAyOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIC8vIE5vLW9wCiAgICAgICAgfQogICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjsKICAgICAgfSwgewogICAgICAgIHNzOiAwLAogICAgICAgIGNvcnJlY3RTUzogMCwKICAgICAgICBlcnJvclNTOiAwCiAgICAgIH0pOwoKICAgICAgLy8gU2Vjb25kLW9yZGVyIHN0YXRzCiAgICAgIHN0YXRzLmNvcnJlY3RTRFJUID0gc3RhdHMuY29ycmVjdENvdW50ID4gMSA/IE1hdGguc3FydChzdW1zMi5jb3JyZWN0U1MgLyAoc3RhdHMuY29ycmVjdENvdW50IC0gMSkpIDogTmFOOwogICAgICBzdGF0cy5lcnJvclNEUlQgPSBzdGF0cy5lcnJvckNvdW50ID4gMSA/IE1hdGguc3FydChzdW1zMi5lcnJvclNTIC8gKHN0YXRzLmVycm9yQ291bnQgLSAxKSkgOiBOYU47CiAgICAgIHN0YXRzLnNkUlQgPSBzdGF0cy5jb3JyZWN0Q291bnQgKyBzdGF0cy5lcnJvckNvdW50ID4gMSA/IE1hdGguc3FydChzdW1zMi5zcyAvIChzdGF0cy5jb3JyZWN0Q291bnQgKyBzdGF0cy5lcnJvckNvdW50IC0gMSkpIDogTmFOOwogICAgICByZXR1cm4gc3RhdHM7CiAgICB9CgogICAgLy8gUHJvYmFiaWxpdHkgb2YgYW4gRXJyb3IgUmVzcG9uc2UKICAgIHN0YXRpYyBhenYycEUoYSwgeiwgdiwgcyA9IERETU1hdGgucykgewogICAgICBjb25zdCB6UHJpbWUgPSBhICogejsKICAgICAgY29uc3QgQSA9IE1hdGguZXhwKC0yICogdiAqIGEgLyBzICoqIDIpOwogICAgICBjb25zdCBaID0gTWF0aC5leHAoLTIgKiB2ICogelByaW1lIC8gcyAqKiAyKTsKICAgICAgcmV0dXJuIChBIC0gWikgLyAoQSAtIDEpOwogICAgfQoKICAgIC8vIFByb2JhYmlsaXR5IG9mIGEgQ29ycmVjdCBSZXNwb25zZQogICAgc3RhdGljIGF6djJwQyhhLCB6LCB2LCBzID0gRERNTWF0aC5zKSB7CiAgICAgIHJldHVybiBERE1NYXRoLmF6djJwRShhLCAxIC0geiwgLXYsIHMpOwogICAgfQoKICAgIC8vIE1lYW4gT3ZlcmFsbCBSVAogICAgLy8gRXF1YXRpb24gNSAoR3Jhc21hbiBldCBhbC4sIDIwMDkpCiAgICBzdGF0aWMgYXp2dDAybShhLCB6LCB2LCB0MCwgcyA9IERETU1hdGgucykgewogICAgICBjb25zdCB6UHJpbWUgPSBhICogejsKICAgICAgY29uc3QgQSA9IE1hdGguZXhwKC0yICogdiAqIGEgLyBzICoqIDIpIC0gMTsKICAgICAgY29uc3QgWiA9IE1hdGguZXhwKC0yICogdiAqIHpQcmltZSAvIHMgKiogMikgLSAxOwogICAgICBjb25zdCBtZWFuID0gLSh6UHJpbWUgLyB2KSArIGEgLyB2ICogKFogLyBBKTsKICAgICAgcmV0dXJuIHQwICsgbWVhbiAqIDEwMDA7CiAgICB9CgogICAgLy8gU0QgT3ZlcmFsbCBSVAogICAgLy8gRXF1YXRpb24gNiAoR3Jhc21hbiBldCBhbC4sIDIwMDkpCiAgICBzdGF0aWMgYXp2MnNkKGEsIHosIHYsIHMgPSBERE1NYXRoLnMpIHsKICAgICAgY29uc3QgelByaW1lID0gYSAqIHo7CiAgICAgIGNvbnN0IEEgPSBNYXRoLmV4cCgtMiAqIHYgKiBhIC8gcyAqKiAyKSAtIDE7CiAgICAgIGNvbnN0IFogPSBNYXRoLmV4cCgtMiAqIHYgKiB6UHJpbWUgLyBzICoqIDIpIC0gMTsKICAgICAgY29uc3QgdmFyaWFuY2UgPSAoLXYgKiBhICoqIDIgKiAoWiArIDQpICogWiAvIEEgKiogMiArICgoLTMgKiB2ICogYSAqKiAyICsgNCAqIHYgKiB6UHJpbWUgKiBhICsgcyAqKiAyICogYSkgKiBaICsgNCAqIHYgKiB6UHJpbWUgKiBhKSAvIEEgLSBzICoqIDIgKiB6UHJpbWUpIC8gdiAqKiAzOwogICAgICByZXR1cm4gTWF0aC5zcXJ0KHZhcmlhbmNlKSAqIDEwMDA7CiAgICB9CgogICAgLy8gTWVhbiBFcnJvciBSVAogICAgLy8gRXF1YXRpb24gMTMgKEdyYXNtYW4gZXQgYWwuLCAyMDA5KQogICAgc3RhdGljIGF6dnQwMm1FKGEsIHosIHYsIHQwLCBzID0gRERNTWF0aC5zKSB7CiAgICAgIGZ1bmN0aW9uIHBoaSh4LCB5KSB7CiAgICAgICAgcmV0dXJuIE1hdGguZXhwKDIgKiB2ICogeSAvIHMgKiogMikgLSBNYXRoLmV4cCgyICogdiAqIHggLyBzICoqIDIpOwogICAgICB9CiAgICAgIGNvbnN0IHpQcmltZSA9IGEgKiB6OwogICAgICBjb25zdCBtZWFuID0gKHpQcmltZSAqIChwaGkoelByaW1lIC0gYSwgYSkgKyBwaGkoMCwgelByaW1lKSkgKyAyICogYSAqIHBoaSh6UHJpbWUsIDApKSAvICh2ICogcGhpKHpQcmltZSwgYSkgKiBwaGkoLWEsIDApKTsKICAgICAgcmV0dXJuIHQwICsgbWVhbiAqIDEwMDA7CiAgICB9CgogICAgLy8gU0QgRXJyb3IgUlQKICAgIC8vIEVxdWF0aW9uIDE0IChHcmFzbWFuIGV0IGFsLiwgMjAwOSkKICAgIHN0YXRpYyBhenYyc2RFKGEsIHosIHYsIHMgPSBERE1NYXRoLnMpIHsKICAgICAgZnVuY3Rpb24gcGhpKHgsIHkpIHsKICAgICAgICByZXR1cm4gTWF0aC5leHAoMiAqIHYgKiB5IC8gcyAqKiAyKSAtIE1hdGguZXhwKDIgKiB2ICogeCAvIHMgKiogMik7CiAgICAgIH0KICAgICAgY29uc3QgelByaW1lID0gYSAqIHo7CiAgICAgIGNvbnN0IHZhcmlhbmNlID0gLTIgKiBhICogcGhpKDAsIHpQcmltZSkgKiAoMiAqIHYgKiBhICogcGhpKHpQcmltZSwgMiAqIGEpICsgcyAqKiAyICogcGhpKDAsIGEpICogcGhpKHpQcmltZSwgYSkpICogTWF0aC5leHAoMiAqIHYgKiBhIC8gcyAqKiAyKSAvICh2ICoqIDMgKiBwaGkoMCwgYSkgKiogMiAqIHBoaSh6UHJpbWUsIGEpICoqIDIpICsgKDQgKiB2ICogelByaW1lICogKDIgKiBhIC0gelByaW1lKSAqIE1hdGguZXhwKDIgKiB2ICogKHpQcmltZSArIGEpIC8gcyAqKiAyKSArIHpQcmltZSAqIHMgKiogMiAqIHBoaSgyICogelByaW1lLCAyICogYSkpIC8gKHYgKiogMyAqIHBoaSh6UHJpbWUsIGEpICoqIDIpOwogICAgICByZXR1cm4gTWF0aC5zcXJ0KHZhcmlhbmNlKSAqIDEwMDA7CiAgICB9CgogICAgLy8gTWVhbiBDb3JyZWN0IFJUCiAgICBzdGF0aWMgYXp2dDAybUMoYSwgeiwgdiwgdDAsIHMgPSBERE1NYXRoLnMpIHsKICAgICAgcmV0dXJuIERETU1hdGguYXp2dDAybUUoYSwgMSAtIHosIC12LCB0MCwgcyk7CiAgICB9CgogICAgLy8gU0QgQ29ycmVjdCBSVAogICAgc3RhdGljIGF6djJzZEMoYSwgeiwgdiwgcyA9IERETU1hdGgucykgewogICAgICByZXR1cm4gRERNTWF0aC5henYyc2RFKGEsIDEgLSB6LCAtdiwgcyk7CiAgICB9CgogICAgLy8gRGVuc2l0eSBvZiBFcnJvciBSVAogICAgc3RhdGljIHRhenYyZ0UodCwgYSwgeiwgdiwgcyA9IERETU1hdGgucykgewogICAgICBpZiAoIXQpIHJldHVybiAwOwogICAgICBjb25zdCB6UHJpbWUgPSBhICogejsKICAgICAgY29uc3QgYmFzZSA9IE1hdGguUEkgKiBzICoqIDIgLyBhICoqIDIgKiBNYXRoLmV4cCgtelByaW1lICogdiAvIHMgKiogMik7CiAgICAgIGxldCBrID0gMDsKICAgICAgbGV0IHRlcm0gPSAwOwogICAgICBsZXQgc3VtID0gMDsKICAgICAgZG8gewogICAgICAgIGsgKz0gMTsKICAgICAgICB0ZXJtID0gayAqIE1hdGguc2luKE1hdGguUEkgKiB6UHJpbWUgKiBrIC8gYSkgKiBNYXRoLmV4cCgtMC41ICogKHYgKiogMiAvIHMgKiogMiArIE1hdGguUEkgKiogMiAqIGsgKiogMiAqIHMgKiogMiAvIGEgKiogMikgKiB0KTsKICAgICAgICBzdW0gKz0gdGVybTsKICAgICAgfSB3aGlsZSAoayA8IDIwMCk7IC8vID8/IEhBQ0sKCiAgICAgIHJldHVybiBiYXNlICogc3VtOwogICAgfQoKICAgIC8vIERlbnNpdHkgb2YgQ29ycmVjdCBSVAogICAgc3RhdGljIHRhenYyZ0ModCwgYSwgeiwgdiwgcyA9IERETU1hdGgucykgewogICAgICByZXR1cm4gRERNTWF0aC50YXp2MmdFKHQsIGEsIDEgLSB6LCAtdiwgcyk7CiAgICB9CgogICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vcmFvdWwuc29jc2NpLnV2YS5ubC9FWjIvRVoyX25ldy5odG1sCiAgICAvLyBFWi1mdW5jdGlvbiBmb3Igc3RhcnRpbmcgdmFsdWVzCiAgICAvLyBpbnB1dDogb2JqIC0gT2JqZWN0IHdpdGggcHJvcGVydGllcwogICAgLy8gICAgcEMgLSBQcm9wb3J0aW9uIGNvcnJlY3QKICAgIC8vICAgIHNkIC0gc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgUlQncyBpbiBtcwogICAgLy8gICAgbSAtIHNhbXBsZSBtZWFuIG9mIHRoZSBSVCdzIGluIG1zCiAgICAvLyAgICBzIC0gZGlmZnVzaW9uIHN0YW5kYXJkIGRldmlhdGlvbgogICAgLy8gcmV0dXJuczogT2JqZWN0IHdpdGggcHJvcGVydGllcyB2LCBhLCBhbmQgdDAsIGNvbnRhaW5pbmcgRVotZXN0aW1hdGVzIG9mIHRoZXNlIHBhcmFtZXRlcnMKICAgIHN0YXRpYyBkYXRhMmV6KHsKICAgICAgYWNjdXJhY3k6IHBDLAogICAgICBzZFJUOiBzZCwKICAgICAgbWVhblJUOiBtLAogICAgICBzCiAgICB9KSB7CiAgICAgIGZ1bmN0aW9uIHNpZ24ocikgewogICAgICAgIHJldHVybiByID4gMCA/IDEgOiByID09PSAwID8gMCA6IC0xOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGxvZ2l0KHApIHsKICAgICAgICByZXR1cm4gTWF0aC5sb2cocCAvICgxIC0gcCkpOwogICAgICB9CiAgICAgIGNvbnN0IHZydCA9IChzZCAvIDEwMDApICoqIDI7CiAgICAgIGNvbnN0IG1ydCA9IG0gLyAxMDAwOwogICAgICBjb25zdCBzMiA9IHMgKiogMjsKICAgICAgY29uc3QgbCA9IGxvZ2l0KHBDKTsKICAgICAgY29uc3QgeCA9IGwgKiAobCAqIHBDICoqIDIgLSBsICogcEMgKyBwQyAtIDAuNSkgLyB2cnQ7CiAgICAgIGNvbnN0IHYgPSBzaWduKHBDIC0gMC41KSAqIHMgKiB4ICoqICgxIC8gNCk7CiAgICAgIGNvbnN0IGEgPSBzMiAqIGxvZ2l0KHBDKSAvIHY7CiAgICAgIGNvbnN0IHkgPSAtdiAqIGEgLyBzMjsKICAgICAgY29uc3QgbWR0ID0gYSAvICgyICogdikgKiAoMSAtIE1hdGguZXhwKHkpKSAvICgxICsgTWF0aC5leHAoeSkpOwogICAgICBjb25zdCB0MCA9IG1ydCA/IG1ydCAtIG1kdCA6IG51bGw7IC8vIGNvbXB1dGUgVGVyIG9ubHkgaWYgTVJUIHdhcyBwcm92aWRlZAoKICAgICAgY29uc3QgdDBQcmltZSA9IHQwICogMTAwMDsKICAgICAgcmV0dXJuIHsKICAgICAgICB2LAogICAgICAgIGEsCiAgICAgICAgdDA6IHQwUHJpbWUsCiAgICAgICAgcwogICAgICB9OwogICAgfQogICAgc3RhdGljIGRhdGEyZXoyKCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGEyZXoyIGlzIG5vdCBpbXBsZW1lbnRlZCEnKTsKICAgIH0KICB9CgogIC8vIEludGVybmFsIGRlcGVuZGVuY2llcwoKICAvKiBlc2xpbnQgbm8tcmVzdHJpY3RlZC1nbG9iYWxzOiBbIm9mZiIsICJzZWxmIl0gKi8KCiAgc2VsZi5vbm1lc3NhZ2UgPSBldmVudCA9PiB7CiAgICBjb25zdCBwYXJhbXMgPSBERE1NYXRoLmRhdGEyZXooewogICAgICAuLi5ldmVudC5kYXRhLAogICAgICBzOiBERE1NYXRoLnMKICAgIH0pOwoKICAgIC8vICMjIyMjIEFyYml0cmFyeSBkZWZhdWx0IHZhbHVlcyEhIQogICAgY29uc3QgYSA9ICFpc05hTihwYXJhbXMuYSkgPyBwYXJhbXMuYSA6IDEuNTsKICAgIGNvbnN0IHogPSAhaXNOYU4ocGFyYW1zLnopID8gcGFyYW1zLnogOiAwLjU7CiAgICBjb25zdCB2ID0gIWlzTmFOKHBhcmFtcy52KSA/IHBhcmFtcy52IDogMC4xOwogICAgY29uc3QgdDAgPSAhaXNOYU4ocGFyYW1zLnQwKSA/IHBhcmFtcy50MCA6IDEwMDsKICAgIGNvbnN0IHMgPSAhaXNOYU4ocGFyYW1zLnMpID8gcGFyYW1zLnMgOiBERE1NYXRoLnM7CiAgICBjb25zdCBwcmVkaWN0ZWQgPSB7CiAgICAgIGFjY3VyYWN5OiBERE1NYXRoLmF6djJwQyhhLCB6LCB2KSwKICAgICAgY29ycmVjdE1lYW5SVDogRERNTWF0aC5henZ0MDJtQyhhLCB6LCB2LCB0MCksCiAgICAgIGVycm9yTWVhblJUOiBERE1NYXRoLmF6dnQwMm1FKGEsIHosIHYsIHQwKSwKICAgICAgbWVhblJUOiBERE1NYXRoLmF6dnQwMm0oYSwgeiwgdiwgdDApLAogICAgICBjb3JyZWN0U0RSVDogRERNTWF0aC5henYyc2RDKGEsIHosIHYpLAogICAgICBlcnJvclNEUlQ6IERETU1hdGguYXp2MnNkRShhLCB6LCB2KSwKICAgICAgc2RSVDogRERNTWF0aC5henYyc2QoYSwgeiwgdikKICAgIH07CiAgICBzZWxmLnBvc3RNZXNzYWdlKHsKICAgICAgcGFyYW1zOiB7CiAgICAgICAgYSwKICAgICAgICB6LAogICAgICAgIHYsCiAgICAgICAgdDAsCiAgICAgICAgcwogICAgICB9LAogICAgICBwcmVkaWN0ZWQKICAgIH0pOwogIH07Cgp9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1kZG0tZml0LXdvcmtlci5qcy5tYXAKCg==', 'data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGRtLWZpdC13b3JrZXIuanMiLCJzb3VyY2VzIjpbIi4uL2FjY3VtdWxhYmxlLW1hdGgvc3JjL2RkbS1tYXRoLmpzIiwiLi4vYWNjdW11bGFibGUtbWF0aC9zcmMvaW5kZXguanMiLCJzcmMvY29tcG9uZW50cy9kZG0tZml0LXdvcmtlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qXG4gIERETU1hdGggU3RhdGljIENsYXNzIC0gTm90IGludGVuZGVkIGZvciBpbnN0YW50aWF0aW9uIVxuXG4gIE1vZGVsIHBhcmFtZXRlcnM6XG4gICAgYSA9IGJvdW5kYXJ5IHNlcGFyYXRpb25cbiAgICB6ID0gc3RhcnRpbmcgcG9pbnQgYXMgYSBwcm9wb3J0aW9uIG9mIGFcbiAgICB2ID0gZHJpZnQgcmF0ZSAocGVyIHNlY29uZClcbiAgICB0MCA9IG5vbi1kZWNpc2lvbiB0aW1lIChpbiBtaWxsaXNlY29uZHMpXG4gICAgcyA9IHdpdGhpbi10cmlhbCB2YXJpYWJpbGl0eSBpbiBkcmlmdCByYXRlIChzXjIgPSBpbmZpbml0ZXNpbWFsIHZhcmlhbmNlKVxuXG4gICAgelByaW1lID0gc3RhcnRpbmcgcG9pbnQgb24gYSAwLXRvLWEgc2NhbGUgKHR5cGljYWxseSB1c2VkIGluIHB1Ymxpc2hlZCBlcXVhdGlvbnMpXG5cbiAgQmVoYXZpb3JhbCB2YXJpYWJsZXM6XG4gICAgcEUgPSBwcm9wb3J0aW9uIG9mIGVycm9yIHRyaWFsc1xuICAgIHBDID0gcHJvcG9ydGlvbiBvZiBjb3JyZWN0IHRyaWFsc1xuICAgIG0gPSBtZWFuIG9mIG92ZXJhbGwgUlRzIChpbiBtaWxsaXNlY29uZHMpXG4gICAgbUUgPSBtZWFuIG9mIGVycm9yIFJUcyAoaW4gbWlsbGlzZWNvbmRzKVxuICAgIG1DID0gbWVhbiBjb3JyZWN0IFJUcyAoaW4gbWlsbGlzZWNvbmRzKVxuICAgIHNkID0gc3RhbmRhcmQgZGV2aWF0aW9uIG9mIG92ZXJhbGwgUlRzIChpbiBtaWxsaXNlY29uZHMpXG4gICAgc2RFID0gc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGVycm9yIFJUcyAoaW4gbWlsbGlzZWNvbmRzKVxuICAgIHNkQyA9IHN0YW5kYXJkIGRldmlhdGlvbiBvZiBjb3JyZWN0IFJUcyAoaW4gbWlsbGlzZWNvbmRzKVxuXG4gIEVxdWF0aW9uczpcbiAgICBQcm9iYWJpbGl0eSBvZiBjb3JyZWN0IGFuZCBlcnJvciByZXNwb25zZXMgKEFsZXhhbmRyb3dpY3osIDIwMjApXG4gICAgTWVhbiBvZiBvdmVyYWxsLCBlcnJvciwgYW5kIGNvcnJlY3QgUlRzIChHcmFzbWFuIGV0IGFsLiwgMjAwOSlcbiAgICBTdGFuZGFyZCBkZXZpYXRpb24gb2Ygb3ZlcmFsbCwgZXJyb3IsIGFuZCBjb3JyZWN0IFJUcyAoR3Jhc21hbiBldCBhbC4sIDIwMDkpXG4gICAgRGVuc2l0eSBvZiBlcnJvciBhbmQgY29ycmVjdCBSVCBkaXN0cmlidXRpb25zIChBbGV4YW5kcm93aWN6LCAyMDIwKVxuICAgIEVaLWRpZmZ1c2lvbiBtb2RlbCAoV2FnZW5tYWtlcnMgZXQgYWwuLCAyMDA3KVxuKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERETU1hdGgge1xuICBzdGF0aWMgcyA9IDE7XG5cbiAgLy8gQ2FsY3VsYXRlIGEgYnVuY2ggb2Ygc3RhdGlzdGljcyBmb3IgYW4gYXJyYXkgb2YgdHJpYWxzXG4gIHN0YXRpYyB0cmlhbHMyc3RhdHModHJpYWxzKSB7XG4gICAgY29uc3Qgc3RhdHMgPSB7fTtcblxuICAgIC8vIEZpcnN0LW9yZGVyIHN1bXNcbiAgICBjb25zdCBzdW1zID0gdHJpYWxzLnJlZHVjZShcbiAgICAgIChhY2N1bXVsYXRvciwgdHJpYWwpID0+IHtcbiAgICAgICAgc3dpdGNoICh0cmlhbC5vdXRjb21lKSB7XG4gICAgICAgICAgY2FzZSAnY29ycmVjdCc6XG4gICAgICAgICAgICBhY2N1bXVsYXRvci5jb3JyZWN0Q291bnQgKz0gMTtcbiAgICAgICAgICAgIGFjY3VtdWxhdG9yLmNvcnJlY3RSVFN1bSArPSB0cmlhbC5ydDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgIGFjY3VtdWxhdG9yLmVycm9yQ291bnQgKz0gMTtcbiAgICAgICAgICAgIGFjY3VtdWxhdG9yLmVycm9yUlRTdW0gKz0gdHJpYWwucnQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICducic6XG4gICAgICAgICAgICBhY2N1bXVsYXRvci5uckNvdW50ICs9IDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gTm8tb3BcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb3JyZWN0Q291bnQ6IDAsXG4gICAgICAgIGVycm9yQ291bnQ6IDAsXG4gICAgICAgIG5yQ291bnQ6IDAsXG5cbiAgICAgICAgY29ycmVjdFJUU3VtOiAwLFxuICAgICAgICBlcnJvclJUU3VtOiAwLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gRmlyc3Qtb3JkZXIgc3RhdHNcbiAgICBzdGF0cy5jb3JyZWN0Q291bnQgPSBzdW1zLmNvcnJlY3RDb3VudDtcbiAgICBzdGF0cy5lcnJvckNvdW50ID0gc3Vtcy5lcnJvckNvdW50O1xuICAgIHN0YXRzLm5yQ291bnQgPSBzdW1zLm5yQ291bnQ7XG4gICAgc3RhdHMuYWNjdXJhY3kgPSBzdW1zLmNvcnJlY3RDb3VudCAvIChzdW1zLmNvcnJlY3RDb3VudCArIHN1bXMuZXJyb3JDb3VudCArIHN1bXMubnJDb3VudCk7XG5cbiAgICBzdGF0cy5jb3JyZWN0TWVhblJUID0gc3Vtcy5jb3JyZWN0UlRTdW0gLyBzdW1zLmNvcnJlY3RDb3VudDtcbiAgICBzdGF0cy5lcnJvck1lYW5SVCA9IHN1bXMuZXJyb3JSVFN1bSAvIHN1bXMuZXJyb3JDb3VudDtcbiAgICBzdGF0cy5tZWFuUlQgPSAoc3Vtcy5jb3JyZWN0UlRTdW0gKyBzdW1zLmVycm9yUlRTdW0pIC8gKHN1bXMuY29ycmVjdENvdW50ICsgc3Vtcy5lcnJvckNvdW50KTtcblxuICAgIC8vIFNlY29uZC1vcmRlciBzdW1zXG4gICAgY29uc3Qgc3VtczIgPSB0cmlhbHMucmVkdWNlKFxuICAgICAgKGFjY3VtdWxhdG9yLCB0cmlhbCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKHRyaWFsLm91dGNvbWUpIHtcbiAgICAgICAgICBjYXNlICdjb3JyZWN0JzpcbiAgICAgICAgICAgIGFjY3VtdWxhdG9yLnNzICs9ICh0cmlhbC5ydCAtIHN0YXRzLm1lYW5SVCkgKiogMjtcbiAgICAgICAgICAgIGFjY3VtdWxhdG9yLmNvcnJlY3RTUyArPSAodHJpYWwucnQgLSBzdGF0cy5jb3JyZWN0TWVhblJUKSAqKiAyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgYWNjdW11bGF0b3Iuc3MgKz0gKHRyaWFsLnJ0IC0gc3RhdHMubWVhblJUKSAqKiAyO1xuICAgICAgICAgICAgYWNjdW11bGF0b3IuZXJyb3JTUyArPSAodHJpYWwucnQgLSBzdGF0cy5lcnJvck1lYW5SVCkgKiogMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBOby1vcFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNzOiAwLFxuICAgICAgICBjb3JyZWN0U1M6IDAsXG4gICAgICAgIGVycm9yU1M6IDAsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBTZWNvbmQtb3JkZXIgc3RhdHNcbiAgICBzdGF0cy5jb3JyZWN0U0RSVCA9IChzdGF0cy5jb3JyZWN0Q291bnQgPiAxKVxuICAgICAgPyBNYXRoLnNxcnQoc3VtczIuY29ycmVjdFNTIC8gKHN0YXRzLmNvcnJlY3RDb3VudCAtIDEpKVxuICAgICAgOiBOYU47XG4gICAgc3RhdHMuZXJyb3JTRFJUID0gKHN0YXRzLmVycm9yQ291bnQgPiAxKVxuICAgICAgPyBNYXRoLnNxcnQoc3VtczIuZXJyb3JTUyAvIChzdGF0cy5lcnJvckNvdW50IC0gMSkpXG4gICAgICA6IE5hTjtcbiAgICBzdGF0cy5zZFJUID0gKHN0YXRzLmNvcnJlY3RDb3VudCArIHN0YXRzLmVycm9yQ291bnQgPiAxKVxuICAgICAgPyBNYXRoLnNxcnQoc3VtczIuc3MgLyAoc3RhdHMuY29ycmVjdENvdW50ICsgc3RhdHMuZXJyb3JDb3VudCAtIDEpKVxuICAgICAgOiBOYU47XG5cbiAgICByZXR1cm4gc3RhdHM7XG4gIH1cblxuICAvLyBQcm9iYWJpbGl0eSBvZiBhbiBFcnJvciBSZXNwb25zZVxuICBzdGF0aWMgYXp2MnBFKGEsIHosIHYsIHMgPSBERE1NYXRoLnMpIHtcbiAgICBjb25zdCB6UHJpbWUgPSBhICogejtcblxuICAgIGNvbnN0IEEgPSBNYXRoLmV4cCgoLTIgKiB2ICogYSkgLyBzICoqIDIpO1xuICAgIGNvbnN0IFogPSBNYXRoLmV4cCgoLTIgKiB2ICogelByaW1lKSAvIHMgKiogMik7XG5cbiAgICByZXR1cm4gKEEgLSBaKSAvIChBIC0gMSk7XG4gIH1cblxuICAvLyBQcm9iYWJpbGl0eSBvZiBhIENvcnJlY3QgUmVzcG9uc2VcbiAgc3RhdGljIGF6djJwQyhhLCB6LCB2LCBzID0gRERNTWF0aC5zKSB7XG4gICAgcmV0dXJuIERETU1hdGguYXp2MnBFKGEsIDEgLSB6LCAtdiwgcyk7XG4gIH1cblxuICAvLyBNZWFuIE92ZXJhbGwgUlRcbiAgLy8gRXF1YXRpb24gNSAoR3Jhc21hbiBldCBhbC4sIDIwMDkpXG4gIHN0YXRpYyBhenZ0MDJtKGEsIHosIHYsIHQwLCBzID0gRERNTWF0aC5zKSB7XG4gICAgY29uc3QgelByaW1lID0gYSAqIHo7XG4gICAgY29uc3QgQSA9IE1hdGguZXhwKCgtMiAqIHYgKiBhKSAvIHMgKiogMikgLSAxO1xuICAgIGNvbnN0IFogPSBNYXRoLmV4cCgoLTIgKiB2ICogelByaW1lKSAvIHMgKiogMikgLSAxO1xuXG4gICAgY29uc3QgbWVhbiA9IC0oelByaW1lIC8gdikgKyAoYSAvIHYpICogKFogLyBBKTtcbiAgICByZXR1cm4gdDAgKyBtZWFuICogMTAwMDtcbiAgfVxuXG4gIC8vIFNEIE92ZXJhbGwgUlRcbiAgLy8gRXF1YXRpb24gNiAoR3Jhc21hbiBldCBhbC4sIDIwMDkpXG4gIHN0YXRpYyBhenYyc2QoYSwgeiwgdiwgcyA9IERETU1hdGgucykge1xuICAgIGNvbnN0IHpQcmltZSA9IGEgKiB6O1xuICAgIGNvbnN0IEEgPSBNYXRoLmV4cCgoLTIgKiB2ICogYSkgLyBzICoqIDIpIC0gMTtcbiAgICBjb25zdCBaID0gTWF0aC5leHAoKC0yICogdiAqIHpQcmltZSkgLyBzICoqIDIpIC0gMTtcblxuICAgIGNvbnN0IHZhcmlhbmNlID0gKFxuICAgICAgKFxuICAgICAgICAoLXYgKiBhICoqIDIgKiAoWiArIDQpICogWikgLyBBICoqIDJcbiAgICAgICkgKyAoXG4gICAgICAgICgoLTMgKiB2ICogYSAqKiAyICsgNCAqIHYgKiB6UHJpbWUgKiBhICsgcyAqKiAyICogYSkgKiBaICsgNCAqIHYgKiB6UHJpbWUgKiBhKSAvIEFcbiAgICAgICkgLSAoXG4gICAgICAgIHMgKiogMiAqIHpQcmltZVxuICAgICAgKVxuICAgICkgLyB2ICoqIDM7XG5cbiAgICByZXR1cm4gTWF0aC5zcXJ0KHZhcmlhbmNlKSAqIDEwMDA7XG4gIH1cblxuICAvLyBNZWFuIEVycm9yIFJUXG4gIC8vIEVxdWF0aW9uIDEzIChHcmFzbWFuIGV0IGFsLiwgMjAwOSlcbiAgc3RhdGljIGF6dnQwMm1FKGEsIHosIHYsIHQwLCBzID0gRERNTWF0aC5zKSB7XG4gICAgZnVuY3Rpb24gcGhpKHgsIHkpIHtcbiAgICAgIHJldHVybiBNYXRoLmV4cCgoMiAqIHYgKiB5KSAvIChzICoqIDIpKSAtIE1hdGguZXhwKCgyICogdiAqIHgpIC8gKHMgKiogMikpO1xuICAgIH1cbiAgICBjb25zdCB6UHJpbWUgPSBhICogejtcblxuICAgIGNvbnN0IG1lYW4gPSAoelByaW1lICogKHBoaSh6UHJpbWUgLSBhLCBhKSArIHBoaSgwLCB6UHJpbWUpKSArIDIgKiBhICogcGhpKHpQcmltZSwgMCkpXG4gICAgICAvICh2ICogcGhpKHpQcmltZSwgYSkgKiBwaGkoLWEsIDApKTtcbiAgICByZXR1cm4gdDAgKyBtZWFuICogMTAwMDtcbiAgfVxuXG4gIC8vIFNEIEVycm9yIFJUXG4gIC8vIEVxdWF0aW9uIDE0IChHcmFzbWFuIGV0IGFsLiwgMjAwOSlcbiAgc3RhdGljIGF6djJzZEUoYSwgeiwgdiwgcyA9IERETU1hdGgucykge1xuICAgIGZ1bmN0aW9uIHBoaSh4LCB5KSB7XG4gICAgICByZXR1cm4gTWF0aC5leHAoKDIgKiB2ICogeSkgLyAocyAqKiAyKSkgLSBNYXRoLmV4cCgoMiAqIHYgKiB4KSAvIChzICoqIDIpKTtcbiAgICB9XG4gICAgY29uc3QgelByaW1lID0gYSAqIHo7XG5cbiAgICBjb25zdCB2YXJpYW5jZSA9IChcbiAgICAgIChcbiAgICAgICAgLTIgKiBhICogcGhpKDAsIHpQcmltZSlcbiAgICAgICAgKiAoKDIgKiB2ICogYSAqIHBoaSh6UHJpbWUsIDIgKiBhKSkgKyAocyAqKiAyICogcGhpKDAsIGEpICogcGhpKHpQcmltZSwgYSkpKVxuICAgICAgICAqIE1hdGguZXhwKCgyICogdiAqIGEpIC8gcyAqKiAyKVxuICAgICAgKSAvIChcbiAgICAgICAgdiAqKiAzICogcGhpKDAsIGEpICoqIDIgKiBwaGkoelByaW1lLCBhKSAqKiAyXG4gICAgICApXG4gICAgKSArIChcbiAgICAgIChcbiAgICAgICAgNCAqIHYgKiB6UHJpbWUgKiAoMiAqIGEgLSB6UHJpbWUpICogTWF0aC5leHAoKDIgKiB2ICogKHpQcmltZSArIGEpKSAvIHMgKiogMilcbiAgICAgICAgKyB6UHJpbWUgKiBzICoqIDIgKiBwaGkoMiAqIHpQcmltZSwgMiAqIGEpXG4gICAgICApIC8gKFxuICAgICAgICB2ICoqIDMgKiBwaGkoelByaW1lLCBhKSAqKiAyXG4gICAgICApXG4gICAgKTtcblxuICAgIHJldHVybiBNYXRoLnNxcnQodmFyaWFuY2UpICogMTAwMDtcbiAgfVxuXG4gIC8vIE1lYW4gQ29ycmVjdCBSVFxuICBzdGF0aWMgYXp2dDAybUMoYSwgeiwgdiwgdDAsIHMgPSBERE1NYXRoLnMpIHtcbiAgICByZXR1cm4gRERNTWF0aC5henZ0MDJtRShhLCAxIC0geiwgLXYsIHQwLCBzKTtcbiAgfVxuXG4gIC8vIFNEIENvcnJlY3QgUlRcbiAgc3RhdGljIGF6djJzZEMoYSwgeiwgdiwgcyA9IERETU1hdGgucykge1xuICAgIHJldHVybiBERE1NYXRoLmF6djJzZEUoYSwgMSAtIHosIC12LCBzKTtcbiAgfVxuXG4gIC8vIERlbnNpdHkgb2YgRXJyb3IgUlRcbiAgc3RhdGljIHRhenYyZ0UodCwgYSwgeiwgdiwgcyA9IERETU1hdGgucykge1xuICAgIGlmICghdCkgcmV0dXJuIDA7XG5cbiAgICBjb25zdCB6UHJpbWUgPSBhICogejtcbiAgICBjb25zdCBiYXNlID0gKChNYXRoLlBJICogcyAqKiAyKSAvIGEgKiogMikgKiBNYXRoLmV4cCgoLXpQcmltZSAqIHYpIC8gcyAqKiAyKTtcblxuICAgIGxldCBrID0gMDtcbiAgICBsZXQgdGVybSA9IDA7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZG8ge1xuICAgICAgayArPSAxO1xuXG4gICAgICB0ZXJtID0ga1xuICAgICAgICAqIE1hdGguc2luKChNYXRoLlBJICogelByaW1lICogaykgLyBhKVxuICAgICAgICAqIE1hdGguZXhwKC0wLjUgKiAoKHYgKiogMiAvIHMgKiogMikgKyAoKE1hdGguUEkgKiogMiAqIGsgKiogMiAqIHMgKiogMikgLyBhICoqIDIpKSAqIHQpO1xuXG4gICAgICBzdW0gKz0gdGVybTtcbiAgICB9IHdoaWxlIChrIDwgMjAwKTsgLy8gPz8gSEFDS1xuXG4gICAgcmV0dXJuIGJhc2UgKiBzdW07XG4gIH1cblxuICAvLyBEZW5zaXR5IG9mIENvcnJlY3QgUlRcbiAgc3RhdGljIHRhenYyZ0ModCwgYSwgeiwgdiwgcyA9IERETU1hdGgucykge1xuICAgIHJldHVybiBERE1NYXRoLnRhenYyZ0UodCwgYSwgMSAtIHosIC12LCBzKTtcbiAgfVxuXG4gIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL3Jhb3VsLnNvY3NjaS51dmEubmwvRVoyL0VaMl9uZXcuaHRtbFxuICAvLyBFWi1mdW5jdGlvbiBmb3Igc3RhcnRpbmcgdmFsdWVzXG4gIC8vIGlucHV0OiBvYmogLSBPYmplY3Qgd2l0aCBwcm9wZXJ0aWVzXG4gIC8vICAgIHBDIC0gUHJvcG9ydGlvbiBjb3JyZWN0XG4gIC8vICAgIHNkIC0gc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgUlQncyBpbiBtc1xuICAvLyAgICBtIC0gc2FtcGxlIG1lYW4gb2YgdGhlIFJUJ3MgaW4gbXNcbiAgLy8gICAgcyAtIGRpZmZ1c2lvbiBzdGFuZGFyZCBkZXZpYXRpb25cbiAgLy8gcmV0dXJuczogT2JqZWN0IHdpdGggcHJvcGVydGllcyB2LCBhLCBhbmQgdDAsIGNvbnRhaW5pbmcgRVotZXN0aW1hdGVzIG9mIHRoZXNlIHBhcmFtZXRlcnNcbiAgc3RhdGljIGRhdGEyZXooe1xuICAgIGFjY3VyYWN5OiBwQyxcbiAgICBzZFJUOiBzZCxcbiAgICBtZWFuUlQ6IG0sXG4gICAgcyxcbiAgfSkge1xuICAgIGZ1bmN0aW9uIHNpZ24ocikge1xuICAgICAgcmV0dXJuICgociA+IDApID8gMSA6ICgociA9PT0gMCkgPyAwIDogLTEpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2dpdChwKSB7XG4gICAgICByZXR1cm4gTWF0aC5sb2cocCAvICgxIC0gcCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHZydCA9IChzZCAvIDEwMDApICoqIDI7XG4gICAgY29uc3QgbXJ0ID0gbSAvIDEwMDA7XG5cbiAgICBjb25zdCBzMiA9IHMgKiogMjtcbiAgICBjb25zdCBsID0gbG9naXQocEMpO1xuICAgIGNvbnN0IHggPSAobCAqIChsICogcEMgKiogMiAtIGwgKiBwQyArIHBDIC0gMC41KSkgLyB2cnQ7XG4gICAgY29uc3QgdiA9IHNpZ24ocEMgLSAwLjUpICogcyAqIHggKiogKDEgLyA0KTtcbiAgICBjb25zdCBhID0gKHMyICogbG9naXQocEMpKSAvIHY7XG4gICAgY29uc3QgeSA9ICgtdiAqIGEpIC8gczI7XG4gICAgY29uc3QgbWR0ID0gKChhIC8gKDIgKiB2KSkgKiAoMSAtIE1hdGguZXhwKHkpKSkgLyAoMSArIE1hdGguZXhwKHkpKTtcbiAgICBjb25zdCB0MCA9IChtcnQgPyBtcnQgLSBtZHQgOiBudWxsKTsgLy8gY29tcHV0ZSBUZXIgb25seSBpZiBNUlQgd2FzIHByb3ZpZGVkXG5cbiAgICBjb25zdCB0MFByaW1lID0gdDAgKiAxMDAwO1xuICAgIHJldHVybiB7XG4gICAgICB2LFxuICAgICAgYSxcbiAgICAgIHQwOiB0MFByaW1lLFxuICAgICAgcyxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGRhdGEyZXoyKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGF0YTJlejIgaXMgbm90IGltcGxlbWVudGVkIScpO1xuICB9XG59XG4iLCJcbi8vIEludGVybmFsIGRlcGVuZGVuY2llc1xuaW1wb3J0IERETU1hdGggZnJvbSAnLi9kZG0tbWF0aCc7XG5cbmV4cG9ydCBkZWZhdWx0IERETU1hdGg7XG4iLCIvKiBlc2xpbnQgbm8tcmVzdHJpY3RlZC1nbG9iYWxzOiBbXCJvZmZcIiwgXCJzZWxmXCJdICovXG5cbmltcG9ydCBERE1NYXRoIGZyb20gJ0BkZWNpZGFibGVzL2FjY3VtdWxhYmxlLW1hdGgnO1xuXG5zZWxmLm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSBERE1NYXRoLmRhdGEyZXooey4uLmV2ZW50LmRhdGEsIHM6IERETU1hdGguc30pO1xuXG4gIC8vICMjIyMjIEFyYml0cmFyeSBkZWZhdWx0IHZhbHVlcyEhIVxuICBjb25zdCBhID0gIWlzTmFOKHBhcmFtcy5hKSA/IHBhcmFtcy5hIDogMS41O1xuICBjb25zdCB6ID0gIWlzTmFOKHBhcmFtcy56KSA/IHBhcmFtcy56IDogMC41O1xuICBjb25zdCB2ID0gIWlzTmFOKHBhcmFtcy52KSA/IHBhcmFtcy52IDogMC4xO1xuICBjb25zdCB0MCA9ICFpc05hTihwYXJhbXMudDApID8gcGFyYW1zLnQwIDogMTAwO1xuICBjb25zdCBzID0gIWlzTmFOKHBhcmFtcy5zKSA/IHBhcmFtcy5zIDogRERNTWF0aC5zO1xuXG4gIGNvbnN0IHByZWRpY3RlZCA9IHtcbiAgICBhY2N1cmFjeTogRERNTWF0aC5henYycEMoYSwgeiwgdiksXG4gICAgY29ycmVjdE1lYW5SVDogRERNTWF0aC5henZ0MDJtQyhhLCB6LCB2LCB0MCksXG4gICAgZXJyb3JNZWFuUlQ6IERETU1hdGguYXp2dDAybUUoYSwgeiwgdiwgdDApLFxuICAgIG1lYW5SVDogRERNTWF0aC5henZ0MDJtKGEsIHosIHYsIHQwKSxcbiAgICBjb3JyZWN0U0RSVDogRERNTWF0aC5henYyc2RDKGEsIHosIHYpLFxuICAgIGVycm9yU0RSVDogRERNTWF0aC5henYyc2RFKGEsIHosIHYpLFxuICAgIHNkUlQ6IERETU1hdGguYXp2MnNkKGEsIHosIHYpLFxuICB9O1xuXG4gIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgIHBhcmFtczoge1xuICAgICAgYSwgeiwgdiwgdDAsIHMsXG4gICAgfSxcbiAgICBwcmVkaWN0ZWQsXG4gIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJERE1NYXRoIiwicyIsInRyaWFsczJzdGF0cyIsInRyaWFscyIsInN0YXRzIiwic3VtcyIsInJlZHVjZSIsImFjY3VtdWxhdG9yIiwidHJpYWwiLCJvdXRjb21lIiwiY29ycmVjdENvdW50IiwiY29ycmVjdFJUU3VtIiwicnQiLCJlcnJvckNvdW50IiwiZXJyb3JSVFN1bSIsIm5yQ291bnQiLCJhY2N1cmFjeSIsImNvcnJlY3RNZWFuUlQiLCJlcnJvck1lYW5SVCIsIm1lYW5SVCIsInN1bXMyIiwic3MiLCJjb3JyZWN0U1MiLCJlcnJvclNTIiwiY29ycmVjdFNEUlQiLCJNYXRoIiwic3FydCIsIk5hTiIsImVycm9yU0RSVCIsInNkUlQiLCJhenYycEUiLCJhIiwieiIsInYiLCJ6UHJpbWUiLCJBIiwiZXhwIiwiWiIsImF6djJwQyIsImF6dnQwMm0iLCJ0MCIsIm1lYW4iLCJhenYyc2QiLCJ2YXJpYW5jZSIsImF6dnQwMm1FIiwicGhpIiwieCIsInkiLCJhenYyc2RFIiwiYXp2dDAybUMiLCJhenYyc2RDIiwidGF6djJnRSIsInQiLCJiYXNlIiwiUEkiLCJrIiwidGVybSIsInN1bSIsInNpbiIsInRhenYyZ0MiLCJkYXRhMmV6IiwicEMiLCJzZCIsIm0iLCJzaWduIiwiciIsImxvZ2l0IiwicCIsImxvZyIsInZydCIsIm1ydCIsInMyIiwibCIsIm1kdCIsInQwUHJpbWUiLCJkYXRhMmV6MiIsIkVycm9yIiwic2VsZiIsIm9ubWVzc2FnZSIsImV2ZW50IiwicGFyYW1zIiwiZGF0YSIsImlzTmFOIiwicHJlZGljdGVkIiwicG9zdE1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7OztFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDZSxNQUFNQSxPQUFPLENBQUM7SUFDM0IsT0FBT0MsQ0FBQyxHQUFHLENBQUMsQ0FBQTs7RUFFWjtJQUNBLE9BQU9DLFlBQVlBLENBQUNDLE1BQU0sRUFBRTtNQUMxQixNQUFNQyxLQUFLLEdBQUcsRUFBRSxDQUFBOztFQUVoQjtNQUNBLE1BQU1DLElBQUksR0FBR0YsTUFBTSxDQUFDRyxNQUFNLENBQ3hCLENBQUNDLFdBQVcsRUFBRUMsS0FBSyxLQUFLO1FBQ3RCLFFBQVFBLEtBQUssQ0FBQ0MsT0FBTztFQUNuQixRQUFBLEtBQUssU0FBUztZQUNaRixXQUFXLENBQUNHLFlBQVksSUFBSSxDQUFDLENBQUE7RUFDN0JILFVBQUFBLFdBQVcsQ0FB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');
7323
+ var WorkerFactory = /*#__PURE__*/createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyoKICAgIERETU1hdGggU3RhdGljIENsYXNzIC0gTm90IGludGVuZGVkIGZvciBpbnN0YW50aWF0aW9uIQoKICAgIE1vZGVsIHBhcmFtZXRlcnM6CiAgICAgIGEgPSBib3VuZGFyeSBzZXBhcmF0aW9uIFswLCBJbmZpbml0eSkKICAgICAgeiA9IHN0YXJ0aW5nIHBvaW50IGFzIGEgcHJvcG9ydGlvbiBvZiBhICgwLCAxKQogICAgICB2ID0gZHJpZnQgcmF0ZSAocGVyIHNlY29uZCkgKC1JbmZpbml0eSwgSW5maW5pdHkpCiAgICAgIHQwID0gbm9uLWRlY2lzaW9uIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgKDAsIEluZmluaXR5KQogICAgICBzID0gd2l0aGluLXRyaWFsIHZhcmlhYmlsaXR5IGluIGRyaWZ0IHJhdGUgKHNeMiA9IGluZmluaXRlc2ltYWwgdmFyaWFuY2UpIFswLCBJbmZpbml0eSkKCiAgICAgIHpQcmltZSA9IHN0YXJ0aW5nIHBvaW50IG9uIGEgMC10by1hIHNjYWxlICh0eXBpY2FsbHkgdXNlZCBpbiBwdWJsaXNoZWQgZXF1YXRpb25zKSBbMCwgSW5maW5pdHkpCgogICAgQmVoYXZpb3JhbCB2YXJpYWJsZXM6CiAgICAgIHBFID0gcHJvcG9ydGlvbiBvZiBlcnJvciB0cmlhbHMKICAgICAgcEMgPSBwcm9wb3J0aW9uIG9mIGNvcnJlY3QgdHJpYWxzCiAgICAgIG0gPSBtZWFuIG9mIG92ZXJhbGwgUlRzIChpbiBtaWxsaXNlY29uZHMpCiAgICAgIG1FID0gbWVhbiBvZiBlcnJvciBSVHMgKGluIG1pbGxpc2Vjb25kcykKICAgICAgbUMgPSBtZWFuIGNvcnJlY3QgUlRzIChpbiBtaWxsaXNlY29uZHMpCiAgICAgIHNkID0gc3RhbmRhcmQgZGV2aWF0aW9uIG9mIG92ZXJhbGwgUlRzIChpbiBtaWxsaXNlY29uZHMpCiAgICAgIHNkRSA9IHN0YW5kYXJkIGRldmlhdGlvbiBvZiBlcnJvciBSVHMgKGluIG1pbGxpc2Vjb25kcykKICAgICAgc2RDID0gc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGNvcnJlY3QgUlRzIChpbiBtaWxsaXNlY29uZHMpCgogICAgRXF1YXRpb25zOgogICAgICBQcm9iYWJpbGl0eSBvZiBjb3JyZWN0IGFuZCBlcnJvciByZXNwb25zZXMgKEFsZXhhbmRyb3dpY3osIDIwMjApCiAgICAgIE1lYW4gb2Ygb3ZlcmFsbCwgZXJyb3IsIGFuZCBjb3JyZWN0IFJUcyAoR3Jhc21hbiBldCBhbC4sIDIwMDkpCiAgICAgIFN0YW5kYXJkIGRldmlhdGlvbiBvZiBvdmVyYWxsLCBlcnJvciwgYW5kIGNvcnJlY3QgUlRzIChHcmFzbWFuIGV0IGFsLiwgMjAwOSkKICAgICAgRGVuc2l0eSBvZiBlcnJvciBhbmQgY29ycmVjdCBSVCBkaXN0cmlidXRpb25zIChBbGV4YW5kcm93aWN6LCAyMDIwKQogICAgICBFWi1kaWZmdXNpb24gbW9kZWwgKFdhZ2VubWFrZXJzIGV0IGFsLiwgMjAwNykKICAqLwogIGNsYXNzIERETU1hdGggewogICAgc3RhdGljIHMgPSB7CiAgICAgIERFRkFVTFQ6IDEKICAgIH07CiAgICBzdGF0aWMgYSA9IHsKICAgICAgREVGQVVMVDogMS4yLAogICAgICBNSU46IDAuMDEsCiAgICAgIE1BWDogMi4wLAogICAgICBTVEVQOiAwLjAxLAogICAgICBKVU1QOiAwLjEKICAgIH07CiAgICBzdGF0aWMgeiA9IHsKICAgICAgREVGQVVMVDogMC41NSwKICAgICAgTUlOOiAwLjAxLAogICAgICBNQVg6IDAuOTksCiAgICAgIFNURVA6IDAuMDEsCiAgICAgIEpVTVA6IDAuMQogICAgfTsKICAgIHN0YXRpYyB2ID0gewogICAgICBERUZBVUxUOiAxLjUsCiAgICAgIE1JTjogMC4wMSwKICAgICAgTUFYOiA1LjAsCiAgICAgIFNURVA6IDAuMDEsCiAgICAgIEpVTVA6IDAuMQogICAgfTsKICAgIHN0YXRpYyB0MCA9IHsKICAgICAgREVGQVVMVDogMTUwLAogICAgICBNSU46IDAsCiAgICAgIE1BWDogNTAwLAogICAgICBTVEVQOiAxLAogICAgICBKVU1QOiAxMAogICAgfTsKCiAgICAvLyBDYWxjdWxhdGUgYSBidW5jaCBvZiBzdGF0aXN0aWNzIGZvciBhbiBhcnJheSBvZiB0cmlhbHMKICAgIHN0YXRpYyB0cmlhbHMyc3RhdHModHJpYWxzKSB7CiAgICAgIGNvbnN0IHN0YXRzID0ge307CgogICAgICAvLyBGaXJzdC1vcmRlciBzdW1zCiAgICAgIGNvbnN0IHN1bXMgPSB0cmlhbHMucmVkdWNlKChhY2N1bXVsYXRvciwgdHJpYWwpID0+IHsKICAgICAgICBzd2l0Y2ggKHRyaWFsLm91dGNvbWUpIHsKICAgICAgICAgIGNhc2UgJ2NvcnJlY3QnOgogICAgICAgICAgICBhY2N1bXVsYXRvci5jb3JyZWN0Q291bnQgKz0gMTsKICAgICAgICAgICAgYWNjdW11bGF0b3IuY29ycmVjdFJUU3VtICs9IHRyaWFsLnJ0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ2Vycm9yJzoKICAgICAgICAgICAgYWNjdW11bGF0b3IuZXJyb3JDb3VudCArPSAxOwogICAgICAgICAgICBhY2N1bXVsYXRvci5lcnJvclJUU3VtICs9IHRyaWFsLnJ0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ25yJzoKICAgICAgICAgICAgYWNjdW11bGF0b3IubnJDb3VudCArPSAxOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIC8vIE5vLW9wCiAgICAgICAgfQogICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjsKICAgICAgfSwgewogICAgICAgIGNvcnJlY3RDb3VudDogMCwKICAgICAgICBlcnJvckNvdW50OiAwLAogICAgICAgIG5yQ291bnQ6IDAsCiAgICAgICAgY29ycmVjdFJUU3VtOiAwLAogICAgICAgIGVycm9yUlRTdW06IDAKICAgICAgfSk7CgogICAgICAvLyBGaXJzdC1vcmRlciBzdGF0cwogICAgICBzdGF0cy5jb3JyZWN0Q291bnQgPSBzdW1zLmNvcnJlY3RDb3VudDsKICAgICAgc3RhdHMuZXJyb3JDb3VudCA9IHN1bXMuZXJyb3JDb3VudDsKICAgICAgc3RhdHMubnJDb3VudCA9IHN1bXMubnJDb3VudDsKICAgICAgc3RhdHMuYWNjdXJhY3kgPSBzdW1zLmNvcnJlY3RDb3VudCAvIChzdW1zLmNvcnJlY3RDb3VudCArIHN1bXMuZXJyb3JDb3VudCArIHN1bXMubnJDb3VudCk7CiAgICAgIHN0YXRzLmNvcnJlY3RNZWFuUlQgPSBzdW1zLmNvcnJlY3RSVFN1bSAvIHN1bXMuY29ycmVjdENvdW50OwogICAgICBzdGF0cy5lcnJvck1lYW5SVCA9IHN1bXMuZXJyb3JSVFN1bSAvIHN1bXMuZXJyb3JDb3VudDsKICAgICAgc3RhdHMubWVhblJUID0gKHN1bXMuY29ycmVjdFJUU3VtICsgc3Vtcy5lcnJvclJUU3VtKSAvIChzdW1zLmNvcnJlY3RDb3VudCArIHN1bXMuZXJyb3JDb3VudCk7CgogICAgICAvLyBTZWNvbmQtb3JkZXIgc3VtcwogICAgICBjb25zdCBzdW1zMiA9IHRyaWFscy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCB0cmlhbCkgPT4gewogICAgICAgIHN3aXRjaCAodHJpYWwub3V0Y29tZSkgewogICAgICAgICAgY2FzZSAnY29ycmVjdCc6CiAgICAgICAgICAgIGFjY3VtdWxhdG9yLnNzICs9ICh0cmlhbC5ydCAtIHN0YXRzLm1lYW5SVCkgKiogMjsKICAgICAgICAgICAgYWNjdW11bGF0b3IuY29ycmVjdFNTICs9ICh0cmlhbC5ydCAtIHN0YXRzLmNvcnJlY3RNZWFuUlQpICoqIDI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAnZXJyb3InOgogICAgICAgICAgICBhY2N1bXVsYXRvci5zcyArPSAodHJpYWwucnQgLSBzdGF0cy5tZWFuUlQpICoqIDI7CiAgICAgICAgICAgIGFjY3VtdWxhdG9yLmVycm9yU1MgKz0gKHRyaWFsLnJ0IC0gc3RhdHMuZXJyb3JNZWFuUlQpICoqIDI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgLy8gTm8tb3AKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogICAgICB9LCB7CiAgICAgICAgc3M6IDAsCiAgICAgICAgY29ycmVjdFNTOiAwLAogICAgICAgIGVycm9yU1M6IDAKICAgICAgfSk7CgogICAgICAvLyBTZWNvbmQtb3JkZXIgc3RhdHMKICAgICAgc3RhdHMuY29ycmVjdFNEUlQgPSBzdGF0cy5jb3JyZWN0Q291bnQgPiAxID8gTWF0aC5zcXJ0KHN1bXMyLmNvcnJlY3RTUyAvIChzdGF0cy5jb3JyZWN0Q291bnQgLSAxKSkgOiBOYU47CiAgICAgIHN0YXRzLmVycm9yU0RSVCA9IHN0YXRzLmVycm9yQ291bnQgPiAxID8gTWF0aC5zcXJ0KHN1bXMyLmVycm9yU1MgLyAoc3RhdHMuZXJyb3JDb3VudCAtIDEpKSA6IE5hTjsKICAgICAgc3RhdHMuc2RSVCA9IHN0YXRzLmNvcnJlY3RDb3VudCArIHN0YXRzLmVycm9yQ291bnQgPiAxID8gTWF0aC5zcXJ0KHN1bXMyLnNzIC8gKHN0YXRzLmNvcnJlY3RDb3VudCArIHN0YXRzLmVycm9yQ291bnQgLSAxKSkgOiBOYU47CiAgICAgIHJldHVybiBzdGF0czsKICAgIH0KCiAgICAvLyBQcm9iYWJpbGl0eSBvZiBhbiBFcnJvciBSZXNwb25zZQogICAgc3RhdGljIGF6djJwRShhLCB6LCB2LCBzID0gRERNTWF0aC5zLkRFRkFVTFQpIHsKICAgICAgY29uc3QgelByaW1lID0gYSAqIHo7CiAgICAgIGNvbnN0IEEgPSBNYXRoLmV4cCgtMiAqIHYgKiBhIC8gcyAqKiAyKTsKICAgICAgY29uc3QgWiA9IE1hdGguZXhwKC0yICogdiAqIHpQcmltZSAvIHMgKiogMik7CiAgICAgIHJldHVybiAoQSAtIFopIC8gKEEgLSAxKTsKICAgIH0KCiAgICAvLyBQcm9iYWJpbGl0eSBvZiBhIENvcnJlY3QgUmVzcG9uc2UKICAgIHN0YXRpYyBhenYycEMoYSwgeiwgdiwgcyA9IERETU1hdGgucy5ERUZBVUxUKSB7CiAgICAgIHJldHVybiBERE1NYXRoLmF6djJwRShhLCAxIC0geiwgLXYsIHMpOwogICAgfQoKICAgIC8vIE1lYW4gT3ZlcmFsbCBSVAogICAgLy8gRXF1YXRpb24gNSAoR3Jhc21hbiBldCBhbC4sIDIwMDkpCiAgICBzdGF0aWMgYXp2dDAybShhLCB6LCB2LCB0MCwgcyA9IERETU1hdGgucy5ERUZBVUxUKSB7CiAgICAgIGNvbnN0IHpQcmltZSA9IGEgKiB6OwogICAgICBjb25zdCBBID0gTWF0aC5leHAoLTIgKiB2ICogYSAvIHMgKiogMikgLSAxOwogICAgICBjb25zdCBaID0gTWF0aC5leHAoLTIgKiB2ICogelByaW1lIC8gcyAqKiAyKSAtIDE7CiAgICAgIGNvbnN0IG1lYW4gPSAtKHpQcmltZSAvIHYpICsgYSAvIHYgKiAoWiAvIEEpOwogICAgICByZXR1cm4gdDAgKyBtZWFuICogMTAwMDsKICAgIH0KCiAgICAvLyBTRCBPdmVyYWxsIFJUCiAgICAvLyBFcXVhdGlvbiA2IChHcmFzbWFuIGV0IGFsLiwgMjAwOSkKICAgIHN0YXRpYyBhenYyc2QoYSwgeiwgdiwgcyA9IERETU1hdGgucy5ERUZBVUxUKSB7CiAgICAgIGNvbnN0IHpQcmltZSA9IGEgKiB6OwogICAgICBjb25zdCBBID0gTWF0aC5leHAoLTIgKiB2ICogYSAvIHMgKiogMikgLSAxOwogICAgICBjb25zdCBaID0gTWF0aC5leHAoLTIgKiB2ICogelByaW1lIC8gcyAqKiAyKSAtIDE7CiAgICAgIGNvbnN0IHZhcmlhbmNlID0gKC12ICogYSAqKiAyICogKFogKyA0KSAqIFogLyBBICoqIDIgKyAoKC0zICogdiAqIGEgKiogMiArIDQgKiB2ICogelByaW1lICogYSArIHMgKiogMiAqIGEpICogWiArIDQgKiB2ICogelByaW1lICogYSkgLyBBIC0gcyAqKiAyICogelByaW1lKSAvIHYgKiogMzsKICAgICAgcmV0dXJuIE1hdGguc3FydCh2YXJpYW5jZSkgKiAxMDAwOwogICAgfQoKICAgIC8vIE1lYW4gRXJyb3IgUlQKICAgIC8vIEVxdWF0aW9uIDEzIChHcmFzbWFuIGV0IGFsLiwgMjAwOSkKICAgIHN0YXRpYyBhenZ0MDJtRShhLCB6LCB2LCB0MCwgcyA9IERETU1hdGgucy5ERUZBVUxUKSB7CiAgICAgIGZ1bmN0aW9uIHBoaSh4LCB5KSB7CiAgICAgICAgcmV0dXJuIE1hdGguZXhwKDIgKiB2ICogeSAvIHMgKiogMikgLSBNYXRoLmV4cCgyICogdiAqIHggLyBzICoqIDIpOwogICAgICB9CiAgICAgIGNvbnN0IHpQcmltZSA9IGEgKiB6OwogICAgICBjb25zdCBtZWFuID0gKHpQcmltZSAqIChwaGkoelByaW1lIC0gYSwgYSkgKyBwaGkoMCwgelByaW1lKSkgKyAyICogYSAqIHBoaSh6UHJpbWUsIDApKSAvICh2ICogcGhpKHpQcmltZSwgYSkgKiBwaGkoLWEsIDApKTsKICAgICAgcmV0dXJuIHQwICsgbWVhbiAqIDEwMDA7CiAgICB9CgogICAgLy8gU0QgRXJyb3IgUlQKICAgIC8vIEVxdWF0aW9uIDE0IChHcmFzbWFuIGV0IGFsLiwgMjAwOSkKICAgIHN0YXRpYyBhenYyc2RFKGEsIHosIHYsIHMgPSBERE1NYXRoLnMuREVGQVVMVCkgewogICAgICBmdW5jdGlvbiBwaGkoeCwgeSkgewogICAgICAgIHJldHVybiBNYXRoLmV4cCgyICogdiAqIHkgLyBzICoqIDIpIC0gTWF0aC5leHAoMiAqIHYgKiB4IC8gcyAqKiAyKTsKICAgICAgfQogICAgICBjb25zdCB6UHJpbWUgPSBhICogejsKICAgICAgY29uc3QgdmFyaWFuY2UgPSAtMiAqIGEgKiBwaGkoMCwgelByaW1lKSAqICgyICogdiAqIGEgKiBwaGkoelByaW1lLCAyICogYSkgKyBzICoqIDIgKiBwaGkoMCwgYSkgKiBwaGkoelByaW1lLCBhKSkgKiBNYXRoLmV4cCgyICogdiAqIGEgLyBzICoqIDIpIC8gKHYgKiogMyAqIHBoaSgwLCBhKSAqKiAyICogcGhpKHpQcmltZSwgYSkgKiogMikgKyAoNCAqIHYgKiB6UHJpbWUgKiAoMiAqIGEgLSB6UHJpbWUpICogTWF0aC5leHAoMiAqIHYgKiAoelByaW1lICsgYSkgLyBzICoqIDIpICsgelByaW1lICogcyAqKiAyICogcGhpKDIgKiB6UHJpbWUsIDIgKiBhKSkgLyAodiAqKiAzICogcGhpKHpQcmltZSwgYSkgKiogMik7CiAgICAgIHJldHVybiBNYXRoLnNxcnQodmFyaWFuY2UpICogMTAwMDsKICAgIH0KCiAgICAvLyBNZWFuIENvcnJlY3QgUlQKICAgIHN0YXRpYyBhenZ0MDJtQyhhLCB6LCB2LCB0MCwgcyA9IERETU1hdGgucy5ERUZBVUxUKSB7CiAgICAgIHJldHVybiBERE1NYXRoLmF6dnQwMm1FKGEsIDEgLSB6LCAtdiwgdDAsIHMpOwogICAgfQoKICAgIC8vIFNEIENvcnJlY3QgUlQKICAgIHN0YXRpYyBhenYyc2RDKGEsIHosIHYsIHMgPSBERE1NYXRoLnMuREVGQVVMVCkgewogICAgICByZXR1cm4gRERNTWF0aC5henYyc2RFKGEsIDEgLSB6LCAtdiwgcyk7CiAgICB9CgogICAgLy8gRGVuc2l0eSBvZiBFcnJvciBSVAogICAgc3RhdGljIHRhenYyZ0UodCwgYSwgeiwgdiwgcyA9IERETU1hdGgucy5ERUZBVUxUKSB7CiAgICAgIGlmICghdCkgcmV0dXJuIDA7CiAgICAgIGNvbnN0IHpQcmltZSA9IGEgKiB6OwogICAgICBjb25zdCBiYXNlID0gTWF0aC5QSSAqIHMgKiogMiAvIGEgKiogMiAqIE1hdGguZXhwKC16UHJpbWUgKiB2IC8gcyAqKiAyKTsKICAgICAgbGV0IGsgPSAwOwogICAgICBsZXQgdGVybSA9IDA7CiAgICAgIGxldCBzdW0gPSAwOwogICAgICBkbyB7CiAgICAgICAgayArPSAxOwogICAgICAgIHRlcm0gPSBrICogTWF0aC5zaW4oTWF0aC5QSSAqIHpQcmltZSAqIGsgLyBhKSAqIE1hdGguZXhwKC0wLjUgKiAodiAqKiAyIC8gcyAqKiAyICsgTWF0aC5QSSAqKiAyICogayAqKiAyICogcyAqKiAyIC8gYSAqKiAyKSAqIHQpOwogICAgICAgIHN1bSArPSB0ZXJtOwogICAgICB9IHdoaWxlIChrIDwgMjAwKTsgLy8gPz8gSEFDSwoKICAgICAgcmV0dXJuIGJhc2UgKiBzdW07CiAgICB9CgogICAgLy8gRGVuc2l0eSBvZiBDb3JyZWN0IFJUCiAgICBzdGF0aWMgdGF6djJnQyh0LCBhLCB6LCB2LCBzID0gRERNTWF0aC5zLkRFRkFVTFQpIHsKICAgICAgcmV0dXJuIERETU1hdGgudGF6djJnRSh0LCBhLCAxIC0geiwgLXYsIHMpOwogICAgfQoKICAgIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL3Jhb3VsLnNvY3NjaS51dmEubmwvRVoyL0VaMl9uZXcuaHRtbAogICAgLy8gRVotZnVuY3Rpb24gZm9yIHN0YXJ0aW5nIHZhbHVlcwogICAgLy8gaW5wdXQ6IG9iaiAtIE9iamVjdCB3aXRoIHByb3BlcnRpZXMKICAgIC8vICAgIHBDIC0gUHJvcG9ydGlvbiBjb3JyZWN0CiAgICAvLyAgICBzZCAtIHNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIFJUJ3MgaW4gbXMKICAgIC8vICAgIG0gLSBzYW1wbGUgbWVhbiBvZiB0aGUgUlQncyBpbiBtcwogICAgLy8gICAgcyAtIGRpZmZ1c2lvbiBzdGFuZGFyZCBkZXZpYXRpb24KICAgIC8vIHJldHVybnM6IE9iamVjdCB3aXRoIHByb3BlcnRpZXMgdiwgYSwgYW5kIHQwLCBjb250YWluaW5nIEVaLWVzdGltYXRlcyBvZiB0aGVzZSBwYXJhbWV0ZXJzCiAgICBzdGF0aWMgZGF0YTJleih7CiAgICAgIGFjY3VyYWN5OiBwQywKICAgICAgc2RSVDogc2QsCiAgICAgIG1lYW5SVDogbSwKICAgICAgcwogICAgfSkgewogICAgICBmdW5jdGlvbiBzaWduKHIpIHsKICAgICAgICByZXR1cm4gciA+IDAgPyAxIDogciA9PT0gMCA/IDAgOiAtMTsKICAgICAgfQogICAgICBmdW5jdGlvbiBsb2dpdChwKSB7CiAgICAgICAgcmV0dXJuIE1hdGgubG9nKHAgLyAoMSAtIHApKTsKICAgICAgfQogICAgICBjb25zdCB2cnQgPSAoc2QgLyAxMDAwKSAqKiAyOwogICAgICBjb25zdCBtcnQgPSBtIC8gMTAwMDsKICAgICAgY29uc3QgczIgPSBzICoqIDI7CiAgICAgIGNvbnN0IGwgPSBsb2dpdChwQyk7CiAgICAgIGNvbnN0IHggPSBsICogKGwgKiBwQyAqKiAyIC0gbCAqIHBDICsgcEMgLSAwLjUpIC8gdnJ0OwogICAgICBjb25zdCB2ID0gc2lnbihwQyAtIDAuNSkgKiBzICogeCAqKiAoMSAvIDQpOwogICAgICBjb25zdCBhID0gczIgKiBsb2dpdChwQykgLyB2OwogICAgICBjb25zdCB5ID0gLXYgKiBhIC8gczI7CiAgICAgIGNvbnN0IG1kdCA9IGEgLyAoMiAqIHYpICogKDEgLSBNYXRoLmV4cCh5KSkgLyAoMSArIE1hdGguZXhwKHkpKTsKICAgICAgY29uc3QgdDAgPSBtcnQgPyBtcnQgLSBtZHQgOiBudWxsOyAvLyBjb21wdXRlIFRlciBvbmx5IGlmIE1SVCB3YXMgcHJvdmlkZWQKCiAgICAgIGNvbnN0IHQwUHJpbWUgPSB0MCAqIDEwMDA7CiAgICAgIHJldHVybiB7CiAgICAgICAgdiwKICAgICAgICBhLAogICAgICAgIHQwOiB0MFByaW1lLAogICAgICAgIHMKICAgICAgfTsKICAgIH0KICAgIHN0YXRpYyBkYXRhMmV6MigpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdkYXRhMmV6MiBpcyBub3QgaW1wbGVtZW50ZWQhJyk7CiAgICB9CiAgfQoKICAvLyBJbnRlcm5hbCBkZXBlbmRlbmNpZXMKCiAgLyogZXNsaW50IG5vLXJlc3RyaWN0ZWQtZ2xvYmFsczogWyJvZmYiLCAic2VsZiJdICovCgogIHNlbGYub25tZXNzYWdlID0gZXZlbnQgPT4gewogICAgY29uc3QgcGFyYW1zID0gRERNTWF0aC5kYXRhMmV6KHsKICAgICAgLi4uZXZlbnQuZGF0YSwKICAgICAgczogRERNTWF0aC5zLkRFRkFVTFQKICAgIH0pOwoKICAgIC8vICMjIyMjIEFyYml0cmFyeSBkZWZhdWx0IHZhbHVlcyEhIQogICAgY29uc3QgYSA9ICFpc05hTihwYXJhbXMuYSkgPyBwYXJhbXMuYSA6IDEuNTsKICAgIGNvbnN0IHogPSAhaXNOYU4ocGFyYW1zLnopID8gcGFyYW1zLnogOiAwLjU7CiAgICBjb25zdCB2ID0gIWlzTmFOKHBhcmFtcy52KSA/IHBhcmFtcy52IDogMC4xOwogICAgY29uc3QgdDAgPSAhaXNOYU4ocGFyYW1zLnQwKSA/IHBhcmFtcy50MCA6IDEwMDsKICAgIGNvbnN0IHMgPSAhaXNOYU4ocGFyYW1zLnMpID8gcGFyYW1zLnMgOiBERE1NYXRoLnMuREVGQVVMVDsKICAgIGNvbnN0IHByZWRpY3RlZCA9IHsKICAgICAgYWNjdXJhY3k6IERETU1hdGguYXp2MnBDKGEsIHosIHYpLAogICAgICBjb3JyZWN0TWVhblJUOiBERE1NYXRoLmF6dnQwMm1DKGEsIHosIHYsIHQwKSwKICAgICAgZXJyb3JNZWFuUlQ6IERETU1hdGguYXp2dDAybUUoYSwgeiwgdiwgdDApLAogICAgICBtZWFuUlQ6IERETU1hdGguYXp2dDAybShhLCB6LCB2LCB0MCksCiAgICAgIGNvcnJlY3RTRFJUOiBERE1NYXRoLmF6djJzZEMoYSwgeiwgdiksCiAgICAgIGVycm9yU0RSVDogRERNTWF0aC5henYyc2RFKGEsIHosIHYpLAogICAgICBzZFJUOiBERE1NYXRoLmF6djJzZChhLCB6LCB2KQogICAgfTsKICAgIHNlbGYucG9zdE1lc3NhZ2UoewogICAgICBwYXJhbXM6IHsKICAgICAgICBhLAogICAgICAgIHosCiAgICAgICAgdiwKICAgICAgICB0MCwKICAgICAgICBzCiAgICAgIH0sCiAgICAgIHByZWRpY3RlZAogICAgfSk7CiAgfTsKCn0pKCk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPWRkbS1maXQtd29ya2VyLmpzLm1hcAoK', 'data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGRtLWZpdC13b3JrZXIuanMiLCJzb3VyY2VzIjpbIi4uL2FjY3VtdWxhYmxlLW1hdGgvc3JjL2RkbS1tYXRoLmpzIiwiLi4vYWNjdW11bGFibGUtbWF0aC9zcmMvaW5kZXguanMiLCJzcmMvY29tcG9uZW50cy9kZG0tZml0LXdvcmtlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qXG4gIERETU1hdGggU3RhdGljIENsYXNzIC0gTm90IGludGVuZGVkIGZvciBpbnN0YW50aWF0aW9uIVxuXG4gIE1vZGVsIHBhcmFtZXRlcnM6XG4gICAgYSA9IGJvdW5kYXJ5IHNlcGFyYXRpb24gWzAsIEluZmluaXR5KVxuICAgIHogPSBzdGFydGluZyBwb2ludCBhcyBhIHByb3BvcnRpb24gb2YgYSAoMCwgMSlcbiAgICB2ID0gZHJpZnQgcmF0ZSAocGVyIHNlY29uZCkgKC1JbmZpbml0eSwgSW5maW5pdHkpXG4gICAgdDAgPSBub24tZGVjaXNpb24gdGltZSAoaW4gbWlsbGlzZWNvbmRzKSAoMCwgSW5maW5pdHkpXG4gICAgcyA9IHdpdGhpbi10cmlhbCB2YXJpYWJpbGl0eSBpbiBkcmlmdCByYXRlIChzXjIgPSBpbmZpbml0ZXNpbWFsIHZhcmlhbmNlKSBbMCwgSW5maW5pdHkpXG5cbiAgICB6UHJpbWUgPSBzdGFydGluZyBwb2ludCBvbiBhIDAtdG8tYSBzY2FsZSAodHlwaWNhbGx5IHVzZWQgaW4gcHVibGlzaGVkIGVxdWF0aW9ucykgWzAsIEluZmluaXR5KVxuXG4gIEJlaGF2aW9yYWwgdmFyaWFibGVzOlxuICAgIHBFID0gcHJvcG9ydGlvbiBvZiBlcnJvciB0cmlhbHNcbiAgICBwQyA9IHByb3BvcnRpb24gb2YgY29ycmVjdCB0cmlhbHNcbiAgICBtID0gbWVhbiBvZiBvdmVyYWxsIFJUcyAoaW4gbWlsbGlzZWNvbmRzKVxuICAgIG1FID0gbWVhbiBvZiBlcnJvciBSVHMgKGluIG1pbGxpc2Vjb25kcylcbiAgICBtQyA9IG1lYW4gY29ycmVjdCBSVHMgKGluIG1pbGxpc2Vjb25kcylcbiAgICBzZCA9IHN0YW5kYXJkIGRldmlhdGlvbiBvZiBvdmVyYWxsIFJUcyAoaW4gbWlsbGlzZWNvbmRzKVxuICAgIHNkRSA9IHN0YW5kYXJkIGRldmlhdGlvbiBvZiBlcnJvciBSVHMgKGluIG1pbGxpc2Vjb25kcylcbiAgICBzZEMgPSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgY29ycmVjdCBSVHMgKGluIG1pbGxpc2Vjb25kcylcblxuICBFcXVhdGlvbnM6XG4gICAgUHJvYmFiaWxpdHkgb2YgY29ycmVjdCBhbmQgZXJyb3IgcmVzcG9uc2VzIChBbGV4YW5kcm93aWN6LCAyMDIwKVxuICAgIE1lYW4gb2Ygb3ZlcmFsbCwgZXJyb3IsIGFuZCBjb3JyZWN0IFJUcyAoR3Jhc21hbiBldCBhbC4sIDIwMDkpXG4gICAgU3RhbmRhcmQgZGV2aWF0aW9uIG9mIG92ZXJhbGwsIGVycm9yLCBhbmQgY29ycmVjdCBSVHMgKEdyYXNtYW4gZXQgYWwuLCAyMDA5KVxuICAgIERlbnNpdHkgb2YgZXJyb3IgYW5kIGNvcnJlY3QgUlQgZGlzdHJpYnV0aW9ucyAoQWxleGFuZHJvd2ljeiwgMjAyMClcbiAgICBFWi1kaWZmdXNpb24gbW9kZWwgKFdhZ2VubWFrZXJzIGV0IGFsLiwgMjAwNylcbiovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERE1NYXRoIHtcbiAgc3RhdGljIHMgPSB7XG4gICAgREVGQVVMVDogMSxcbiAgfTtcblxuICBzdGF0aWMgYSA9IHtcbiAgICBERUZBVUxUOiAxLjIsXG4gICAgTUlOOiAwLjAxLFxuICAgIE1BWDogMi4wLFxuICAgIFNURVA6IDAuMDEsXG4gICAgSlVNUDogMC4xLFxuICB9O1xuXG4gIHN0YXRpYyB6ID0ge1xuICAgIERFRkFVTFQ6IDAuNTUsXG4gICAgTUlOOiAwLjAxLFxuICAgIE1BWDogMC45OSxcbiAgICBTVEVQOiAwLjAxLFxuICAgIEpVTVA6IDAuMSxcbiAgfTtcblxuICBzdGF0aWMgdiA9IHtcbiAgICBERUZBVUxUOiAxLjUsXG4gICAgTUlOOiAwLjAxLFxuICAgIE1BWDogNS4wLFxuICAgIFNURVA6IDAuMDEsXG4gICAgSlVNUDogMC4xLFxuICB9O1xuXG4gIHN0YXRpYyB0MCA9IHtcbiAgICBERUZBVUxUOiAxNTAsXG4gICAgTUlOOiAwLFxuICAgIE1BWDogNTAwLFxuICAgIFNURVA6IDEsXG4gICAgSlVNUDogMTAsXG4gIH07XG5cbiAgLy8gQ2FsY3VsYXRlIGEgYnVuY2ggb2Ygc3RhdGlzdGljcyBmb3IgYW4gYXJyYXkgb2YgdHJpYWxzXG4gIHN0YXRpYyB0cmlhbHMyc3RhdHModHJpYWxzKSB7XG4gICAgY29uc3Qgc3RhdHMgPSB7fTtcblxuICAgIC8vIEZpcnN0LW9yZGVyIHN1bXNcbiAgICBjb25zdCBzdW1zID0gdHJpYWxzLnJlZHVjZShcbiAgICAgIChhY2N1bXVsYXRvciwgdHJpYWwpID0+IHtcbiAgICAgICAgc3dpdGNoICh0cmlhbC5vdXRjb21lKSB7XG4gICAgICAgICAgY2FzZSAnY29ycmVjdCc6XG4gICAgICAgICAgICBhY2N1bXVsYXRvci5jb3JyZWN0Q291bnQgKz0gMTtcbiAgICAgICAgICAgIGFjY3VtdWxhdG9yLmNvcnJlY3RSVFN1bSArPSB0cmlhbC5ydDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgIGFjY3VtdWxhdG9yLmVycm9yQ291bnQgKz0gMTtcbiAgICAgICAgICAgIGFjY3VtdWxhdG9yLmVycm9yUlRTdW0gKz0gdHJpYWwucnQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICducic6XG4gICAgICAgICAgICBhY2N1bXVsYXRvci5uckNvdW50ICs9IDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gTm8tb3BcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb3JyZWN0Q291bnQ6IDAsXG4gICAgICAgIGVycm9yQ291bnQ6IDAsXG4gICAgICAgIG5yQ291bnQ6IDAsXG5cbiAgICAgICAgY29ycmVjdFJUU3VtOiAwLFxuICAgICAgICBlcnJvclJUU3VtOiAwLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gRmlyc3Qtb3JkZXIgc3RhdHNcbiAgICBzdGF0cy5jb3JyZWN0Q291bnQgPSBzdW1zLmNvcnJlY3RDb3VudDtcbiAgICBzdGF0cy5lcnJvckNvdW50ID0gc3Vtcy5lcnJvckNvdW50O1xuICAgIHN0YXRzLm5yQ291bnQgPSBzdW1zLm5yQ291bnQ7XG4gICAgc3RhdHMuYWNjdXJhY3kgPSBzdW1zLmNvcnJlY3RDb3VudCAvIChzdW1zLmNvcnJlY3RDb3VudCArIHN1bXMuZXJyb3JDb3VudCArIHN1bXMubnJDb3VudCk7XG5cbiAgICBzdGF0cy5jb3JyZWN0TWVhblJUID0gc3Vtcy5jb3JyZWN0UlRTdW0gLyBzdW1zLmNvcnJlY3RDb3VudDtcbiAgICBzdGF0cy5lcnJvck1lYW5SVCA9IHN1bXMuZXJyb3JSVFN1bSAvIHN1bXMuZXJyb3JDb3VudDtcbiAgICBzdGF0cy5tZWFuUlQgPSAoc3Vtcy5jb3JyZWN0UlRTdW0gKyBzdW1zLmVycm9yUlRTdW0pIC8gKHN1bXMuY29ycmVjdENvdW50ICsgc3Vtcy5lcnJvckNvdW50KTtcblxuICAgIC8vIFNlY29uZC1vcmRlciBzdW1zXG4gICAgY29uc3Qgc3VtczIgPSB0cmlhbHMucmVkdWNlKFxuICAgICAgKGFjY3VtdWxhdG9yLCB0cmlhbCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKHRyaWFsLm91dGNvbWUpIHtcbiAgICAgICAgICBjYXNlICdjb3JyZWN0JzpcbiAgICAgICAgICAgIGFjY3VtdWxhdG9yLnNzICs9ICh0cmlhbC5ydCAtIHN0YXRzLm1lYW5SVCkgKiogMjtcbiAgICAgICAgICAgIGFjY3VtdWxhdG9yLmNvcnJlY3RTUyArPSAodHJpYWwucnQgLSBzdGF0cy5jb3JyZWN0TWVhblJUKSAqKiAyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgYWNjdW11bGF0b3Iuc3MgKz0gKHRyaWFsLnJ0IC0gc3RhdHMubWVhblJUKSAqKiAyO1xuICAgICAgICAgICAgYWNjdW11bGF0b3IuZXJyb3JTUyArPSAodHJpYWwucnQgLSBzdGF0cy5lcnJvck1lYW5SVCkgKiogMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBOby1vcFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNzOiAwLFxuICAgICAgICBjb3JyZWN0U1M6IDAsXG4gICAgICAgIGVycm9yU1M6IDAsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBTZWNvbmQtb3JkZXIgc3RhdHNcbiAgICBzdGF0cy5jb3JyZWN0U0RSVCA9IChzdGF0cy5jb3JyZWN0Q291bnQgPiAxKVxuICAgICAgPyBNYXRoLnNxcnQoc3VtczIuY29ycmVjdFNTIC8gKHN0YXRzLmNvcnJlY3RDb3VudCAtIDEpKVxuICAgICAgOiBOYU47XG4gICAgc3RhdHMuZXJyb3JTRFJUID0gKHN0YXRzLmVycm9yQ291bnQgPiAxKVxuICAgICAgPyBNYXRoLnNxcnQoc3VtczIuZXJyb3JTUyAvIChzdGF0cy5lcnJvckNvdW50IC0gMSkpXG4gICAgICA6IE5hTjtcbiAgICBzdGF0cy5zZFJUID0gKHN0YXRzLmNvcnJlY3RDb3VudCArIHN0YXRzLmVycm9yQ291bnQgPiAxKVxuICAgICAgPyBNYXRoLnNxcnQoc3VtczIuc3MgLyAoc3RhdHMuY29ycmVjdENvdW50ICsgc3RhdHMuZXJyb3JDb3VudCAtIDEpKVxuICAgICAgOiBOYU47XG5cbiAgICByZXR1cm4gc3RhdHM7XG4gIH1cblxuICAvLyBQcm9iYWJpbGl0eSBvZiBhbiBFcnJvciBSZXNwb25zZVxuICBzdGF0aWMgYXp2MnBFKGEsIHosIHYsIHMgPSBERE1NYXRoLnMuREVGQVVMVCkge1xuICAgIGNvbnN0IHpQcmltZSA9IGEgKiB6O1xuXG4gICAgY29uc3QgQSA9IE1hdGguZXhwKCgtMiAqIHYgKiBhKSAvIHMgKiogMik7XG4gICAgY29uc3QgWiA9IE1hdGguZXhwKCgtMiAqIHYgKiB6UHJpbWUpIC8gcyAqKiAyKTtcblxuICAgIHJldHVybiAoQSAtIFopIC8gKEEgLSAxKTtcbiAgfVxuXG4gIC8vIFByb2JhYmlsaXR5IG9mIGEgQ29ycmVjdCBSZXNwb25zZVxuICBzdGF0aWMgYXp2MnBDKGEsIHosIHYsIHMgPSBERE1NYXRoLnMuREVGQVVMVCkge1xuICAgIHJldHVybiBERE1NYXRoLmF6djJwRShhLCAxIC0geiwgLXYsIHMpO1xuICB9XG5cbiAgLy8gTWVhbiBPdmVyYWxsIFJUXG4gIC8vIEVxdWF0aW9uIDUgKEdyYXNtYW4gZXQgYWwuLCAyMDA5KVxuICBzdGF0aWMgYXp2dDAybShhLCB6LCB2LCB0MCwgcyA9IERETU1hdGgucy5ERUZBVUxUKSB7XG4gICAgY29uc3QgelByaW1lID0gYSAqIHo7XG4gICAgY29uc3QgQSA9IE1hdGguZXhwKCgtMiAqIHYgKiBhKSAvIHMgKiogMikgLSAxO1xuICAgIGNvbnN0IFogPSBNYXRoLmV4cCgoLTIgKiB2ICogelByaW1lKSAvIHMgKiogMikgLSAxO1xuXG4gICAgY29uc3QgbWVhbiA9IC0oelByaW1lIC8gdikgKyAoYSAvIHYpICogKFogLyBBKTtcbiAgICByZXR1cm4gdDAgKyBtZWFuICogMTAwMDtcbiAgfVxuXG4gIC8vIFNEIE92ZXJhbGwgUlRcbiAgLy8gRXF1YXRpb24gNiAoR3Jhc21hbiBldCBhbC4sIDIwMDkpXG4gIHN0YXRpYyBhenYyc2QoYSwgeiwgdiwgcyA9IERETU1hdGgucy5ERUZBVUxUKSB7XG4gICAgY29uc3QgelByaW1lID0gYSAqIHo7XG4gICAgY29uc3QgQSA9IE1hdGguZXhwKCgtMiAqIHYgKiBhKSAvIHMgKiogMikgLSAxO1xuICAgIGNvbnN0IFogPSBNYXRoLmV4cCgoLTIgKiB2ICogelByaW1lKSAvIHMgKiogMikgLSAxO1xuXG4gICAgY29uc3QgdmFyaWFuY2UgPSAoXG4gICAgICAoXG4gICAgICAgICgtdiAqIGEgKiogMiAqIChaICsgNCkgKiBaKSAvIEEgKiogMlxuICAgICAgKSArIChcbiAgICAgICAgKCgtMyAqIHYgKiBhICoqIDIgKyA0ICogdiAqIHpQcmltZSAqIGEgKyBzICoqIDIgKiBhKSAqIFogKyA0ICogdiAqIHpQcmltZSAqIGEpIC8gQVxuICAgICAgKSAtIChcbiAgICAgICAgcyAqKiAyICogelByaW1lXG4gICAgICApXG4gICAgKSAvIHYgKiogMztcblxuICAgIHJldHVybiBNYXRoLnNxcnQodmFyaWFuY2UpICogMTAwMDtcbiAgfVxuXG4gIC8vIE1lYW4gRXJyb3IgUlRcbiAgLy8gRXF1YXRpb24gMTMgKEdyYXNtYW4gZXQgYWwuLCAyMDA5KVxuICBzdGF0aWMgYXp2dDAybUUoYSwgeiwgdiwgdDAsIHMgPSBERE1NYXRoLnMuREVGQVVMVCkge1xuICAgIGZ1bmN0aW9uIHBoaSh4LCB5KSB7XG4gICAgICByZXR1cm4gTWF0aC5leHAoKDIgKiB2ICogeSkgLyAocyAqKiAyKSkgLSBNYXRoLmV4cCgoMiAqIHYgKiB4KSAvIChzICoqIDIpKTtcbiAgICB9XG4gICAgY29uc3QgelByaW1lID0gYSAqIHo7XG5cbiAgICBjb25zdCBtZWFuID0gKHpQcmltZSAqIChwaGkoelByaW1lIC0gYSwgYSkgKyBwaGkoMCwgelByaW1lKSkgKyAyICogYSAqIHBoaSh6UHJpbWUsIDApKVxuICAgICAgLyAodiAqIHBoaSh6UHJpbWUsIGEpICogcGhpKC1hLCAwKSk7XG4gICAgcmV0dXJuIHQwICsgbWVhbiAqIDEwMDA7XG4gIH1cblxuICAvLyBTRCBFcnJvciBSVFxuICAvLyBFcXVhdGlvbiAxNCAoR3Jhc21hbiBldCBhbC4sIDIwMDkpXG4gIHN0YXRpYyBhenYyc2RFKGEsIHosIHYsIHMgPSBERE1NYXRoLnMuREVGQVVMVCkge1xuICAgIGZ1bmN0aW9uIHBoaSh4LCB5KSB7XG4gICAgICByZXR1cm4gTWF0aC5leHAoKDIgKiB2ICogeSkgLyAocyAqKiAyKSkgLSBNYXRoLmV4cCgoMiAqIHYgKiB4KSAvIChzICoqIDIpKTtcbiAgICB9XG4gICAgY29uc3QgelByaW1lID0gYSAqIHo7XG5cbiAgICBjb25zdCB2YXJpYW5jZSA9IChcbiAgICAgIChcbiAgICAgICAgLTIgKiBhICogcGhpKDAsIHpQcmltZSlcbiAgICAgICAgKiAoKDIgKiB2ICogYSAqIHBoaSh6UHJpbWUsIDIgKiBhKSkgKyAocyAqKiAyICogcGhpKDAsIGEpICogcGhpKHpQcmltZSwgYSkpKVxuICAgICAgICAqIE1hdGguZXhwKCgyICogdiAqIGEpIC8gcyAqKiAyKVxuICAgICAgKSAvIChcbiAgICAgICAgdiAqKiAzICogcGhpKDAsIGEpICoqIDIgKiBwaGkoelByaW1lLCBhKSAqKiAyXG4gICAgICApXG4gICAgKSArIChcbiAgICAgIChcbiAgICAgICAgNCAqIHYgKiB6UHJpbWUgKiAoMiAqIGEgLSB6UHJpbWUpICogTWF0aC5leHAoKDIgKiB2ICogKHpQcmltZSArIGEpKSAvIHMgKiogMilcbiAgICAgICAgKyB6UHJpbWUgKiBzICoqIDIgKiBwaGkoMiAqIHpQcmltZSwgMiAqIGEpXG4gICAgICApIC8gKFxuICAgICAgICB2ICoqIDMgKiBwaGkoelByaW1lLCBhKSAqKiAyXG4gICAgICApXG4gICAgKTtcblxuICAgIHJldHVybiBNYXRoLnNxcnQodmFyaWFuY2UpICogMTAwMDtcbiAgfVxuXG4gIC8vIE1lYW4gQ29ycmVjdCBSVFxuICBzdGF0aWMgYXp2dDAybUMoYSwgeiwgdiwgdDAsIHMgPSBERE1NYXRoLnMuREVGQVVMVCkge1xuICAgIHJldHVybiBERE1NYXRoLmF6dnQwMm1FKGEsIDEgLSB6LCAtdiwgdDAsIHMpO1xuICB9XG5cbiAgLy8gU0QgQ29ycmVjdCBSVFxuICBzdGF0aWMgYXp2MnNkQyhhLCB6LCB2LCBzID0gRERNTWF0aC5zLkRFRkFVTFQpIHtcbiAgICByZXR1cm4gRERNTWF0aC5henYyc2RFKGEsIDEgLSB6LCAtdiwgcyk7XG4gIH1cblxuICAvLyBEZW5zaXR5IG9mIEVycm9yIFJUXG4gIHN0YXRpYyB0YXp2MmdFKHQsIGEsIHosIHYsIHMgPSBERE1NYXRoLnMuREVGQVVMVCkge1xuICAgIGlmICghdCkgcmV0dXJuIDA7XG5cbiAgICBjb25zdCB6UHJpbWUgPSBhICogejtcbiAgICBjb25zdCBiYXNlID0gKChNYXRoLlBJICogcyAqKiAyKSAvIGEgKiogMikgKiBNYXRoLmV4cCgoLXpQcmltZSAqIHYpIC8gcyAqKiAyKTtcblxuICAgIGxldCBrID0gMDtcbiAgICBsZXQgdGVybSA9IDA7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZG8ge1xuICAgICAgayArPSAxO1xuXG4gICAgICB0ZXJtID0ga1xuICAgICAgICAqIE1hdGguc2luKChNYXRoLlBJICogelByaW1lICogaykgLyBhKVxuICAgICAgICAqIE1hdGguZXhwKC0wLjUgKiAoKHYgKiogMiAvIHMgKiogMikgKyAoKE1hdGguUEkgKiogMiAqIGsgKiogMiAqIHMgKiogMikgLyBhICoqIDIpKSAqIHQpO1xuXG4gICAgICBzdW0gKz0gdGVybTtcbiAgICB9IHdoaWxlIChrIDwgMjAwKTsgLy8gPz8gSEFDS1xuXG4gICAgcmV0dXJuIGJhc2UgKiBzdW07XG4gIH1cblxuICAvLyBEZW5zaXR5IG9mIENvcnJlY3QgUlRcbiAgc3RhdGljIHRhenYyZ0ModCwgYSwgeiwgdiwgcyA9IERETU1hdGgucy5ERUZBVUxUKSB7XG4gICAgcmV0dXJuIERETU1hdGgudGF6djJnRSh0LCBhLCAxIC0geiwgLXYsIHMpO1xuICB9XG5cbiAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vcmFvdWwuc29jc2NpLnV2YS5ubC9FWjIvRVoyX25ldy5odG1sXG4gIC8vIEVaLWZ1bmN0aW9uIGZvciBzdGFydGluZyB2YWx1ZXNcbiAgLy8gaW5wdXQ6IG9iaiAtIE9iamVjdCB3aXRoIHByb3BlcnRpZXNcbiAgLy8gICAgcEMgLSBQcm9wb3J0aW9uIGNvcnJlY3RcbiAgLy8gICAgc2QgLSBzYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBSVCdzIGluIG1zXG4gIC8vICAgIG0gLSBzYW1wbGUgbWVhbiBvZiB0aGUgUlQncyBpbiBtc1xuICAvLyAgICBzIC0gZGlmZnVzaW9uIHN0YW5kYXJkIGRldmlhdGlvblxuICAvLyByZXR1cm5zOiBPYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHYsIGEsIGFuZCB0MCwgY29udGFpbmluZyBFWi1lc3RpbWF0ZXMgb2YgdGhlc2UgcGFyYW1ldGVyc1xuICBzdGF0aWMgZGF0YTJleih7XG4gICAgYWNjdXJhY3k6IHBDLFxuICAgIHNkUlQ6IHNkLFxuICAgIG1lYW5SVDogbSxcbiAgICBzLFxuICB9KSB7XG4gICAgZnVuY3Rpb24gc2lnbihyKSB7XG4gICAgICByZXR1cm4gKChyID4gMCkgPyAxIDogKChyID09PSAwKSA/IDAgOiAtMSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvZ2l0KHApIHtcbiAgICAgIHJldHVybiBNYXRoLmxvZyhwIC8gKDEgLSBwKSk7XG4gICAgfVxuXG4gICAgY29uc3QgdnJ0ID0gKHNkIC8gMTAwMCkgKiogMjtcbiAgICBjb25zdCBtcnQgPSBtIC8gMTAwMDtcblxuICAgIGNvbnN0IHMyID0gcyAqKiAyO1xuICAgIGNvbnN0IGwgPSBsb2dpdChwQyk7XG4gICAgY29uc3QgeCA9IChsICogKGwgKiBwQyAqKiAyIC0gbCAqIHBDICsgcEMgLSAwLjUpKSAvIHZydDtcbiAgICBjb25zdCB2ID0gc2lnbihwQyAtIDAuNSkgKiBzICogeCAqKiAoMSAvIDQpO1xuICAgIGNvbnN0IGEgPSAoczIgKiBsb2dpdChwQykpIC8gdjtcbiAgICBjb25zdCB5ID0gKC12ICogYSkgLyBzMjtcbiAgICBjb25zdCBtZHQgPSAoKGEgLyAoMiAqIHYpKSAqICgxIC0gTWF0aC5leHAoeSkpKSAvICgxICsgTWF0aC5leHAoeSkpO1xuICAgIGNvbnN0IHQwID0gKG1ydCA/IG1ydCAtIG1kdCA6IG51bGwpOyAvLyBjb21wdXRlIFRlciBvbmx5IGlmIE1SVCB3YXMgcHJvdmlkZWRcblxuICAgIGNvbnN0IHQwUHJpbWUgPSB0MCAqIDEwMDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIHYsXG4gICAgICBhLFxuICAgICAgdDA6IHQwUHJpbWUsXG4gICAgICBzLFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZGF0YTJlejIoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkYXRhMmV6MiBpcyBub3QgaW1wbGVtZW50ZWQhJyk7XG4gIH1cbn1cbiIsIlxuLy8gSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG5pbXBvcnQgRERNTWF0aCBmcm9tICcuL2RkbS1tYXRoJztcblxuZXhwb3J0IGRlZmF1bHQgRERNTWF0aDtcbiIsIi8qIGVzbGludCBuby1yZXN0cmljdGVkLWdsb2JhbHM6IFtcIm9mZlwiLCBcInNlbGZcIl0gKi9cblxuaW1wb3J0IERETU1hdGggZnJvbSAnQGRlY2lkYWJsZXMvYWNjdW11bGFibGUtbWF0aCc7XG5cbnNlbGYub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IHBhcmFtcyA9IERETU1hdGguZGF0YTJleih7Li4uZXZlbnQuZGF0YSwgczogRERNTWF0aC5zLkRFRkFVTFR9KTtcblxuICAvLyAjIyMjIyBBcmJpdHJhcnkgZGVmYXVsdCB2YWx1ZXMhISFcbiAgY29uc3QgYSA9ICFpc05hTihwYXJhbXMuYSkgPyBwYXJhbXMuYSA6IDEuNTtcbiAgY29uc3QgeiA9ICFpc05hTihwYXJhbXMueikgPyBwYXJhbXMueiA6IDAuNTtcbiAgY29uc3QgdiA9ICFpc05hTihwYXJhbXMudikgPyBwYXJhbXMudiA6IDAuMTtcbiAgY29uc3QgdDAgPSAhaXNOYU4ocGFyYW1zLnQwKSA/IHBhcmFtcy50MCA6IDEwMDtcbiAgY29uc3QgcyA9ICFpc05hTihwYXJhbXMucykgPyBwYXJhbXMucyA6IERETU1hdGgucy5ERUZBVUxUO1xuXG4gIGNvbnN0IHByZWRpY3RlZCA9IHtcbiAgICBhY2N1cmFjeTogRERNTWF0aC5henYycEMoYSwgeiwgdiksXG4gICAgY29ycmVjdE1lYW5SVDogRERNTWF0aC5henZ0MDJtQyhhLCB6LCB2LCB0MCksXG4gICAgZXJyb3JNZWFuUlQ6IERETU1hdGguYXp2dDAybUUoYSwgeiwgdiwgdDApLFxuICAgIG1lYW5SVDogRERNTWF0aC5henZ0MDJtKGEsIHosIHYsIHQwKSxcbiAgICBjb3JyZWN0U0RSVDogRERNTWF0aC5henYyc2RDKGEsIHosIHYpLFxuICAgIGVycm9yU0RSVDogRERNTWF0aC5henYyc2RFKGEsIHosIHYpLFxuICAgIHNkUlQ6IERETU1hdGguYXp2MnNkKGEsIHosIHYpLFxuICB9O1xuXG4gIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgIHBhcmFtczoge1xuICAgICAgYSwgeiwgdiwgdDAsIHMsXG4gICAgfSxcbiAgICBwcmVkaWN0ZWQsXG4gIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJERE1NYXRoIiwicyIsIkRFRkFVTFQiLCJhIiwiTUlOIiwiTUFYIiwiU1RFUCIsIkpVTVAiLCJ6IiwidiIsInQwIiwidHJpYWxzMnN0YXRzIiwidHJpYWxzIiwic3RhdHMiLCJzdW1zIiwicmVkdWNlIiwiYWNjdW11bGF0b3IiLCJ0cmlhbCIsIm91dGNvbWUiLCJjb3JyZWN0Q291bnQiLCJjb3JyZWN0UlRTdW0iLCJydCIsImVycm9yQ291bnQiLCJlcnJvclJUU3VtIiwibnJDb3VudCIsImFjY3VyYWN5IiwiY29ycmVjdE1lYW5SVCIsImVycm9yTWVhblJUIiwibWVhblJUIiwic3VtczIiLCJzcyIsImNvcnJlY3RTUyIsImVycm9yU1MiLCJjb3JyZWN0U0RSVCIsIk1hdGgiLCJzcXJ0IiwiTmFOIiwiZXJyb3JTRFJUIiwic2RSVCIsImF6djJwRSIsInpQcmltZSIsIkEiLCJleHAiLCJaIiwiYXp2MnBDIiwiYXp2dDAybSIsIm1lYW4iLCJhenYyc2QiLCJ2YXJpYW5jZSIsImF6dnQwMm1FIiwicGhpIiwieCIsInkiLCJhenYyc2RFIiwiYXp2dDAybUMiLCJhenYyc2RDIiwidGF6djJnRSIsInQiLCJiYXNlIiwiUEkiLCJrIiwidGVybSIsInN1bSIsInNpbiIsInRhenYyZ0MiLCJkYXRhMmV6IiwicEMiLCJzZCIsIm0iLCJzaWduIiwiciIsImxvZ2l0IiwicCIsImxvZyIsInZydCIsIm1ydCIsInMyIiwibCIsIm1kdCIsInQwUHJpbWUiLCJkYXRhMmV6MiIsIkVycm9yIiwic2VsZiIsIm9ubWVzc2FnZSIsImV2ZW50IiwicGFyYW1zIiwiZGF0YSIsImlzTmFOIiwicHJlZGljdGVkIiwicG9zdE1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7OztFQUNBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztFQUVBOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNlLE1BQU1BLE9BQU8sQ0FBQztFQUMzQixFQUFBLE9BQU9DLENBQUMsR0FBRztFQUNUQyxJQUFBQSxPQUFPLEVBQUU7S0FDVjtFQUVELEVBQUEsT0FBT0MsQ0FBQyxHQUFHO0VBQ1RELElBQUFBLE9BQU8sRUFBRSxHQUFHO0VBQ1pFLElBQUFBLEdBQUcsRUFBRSxJQUFJO0VBQ1RDLElBQUFBLEdBQUcsRUFBRSxHQUFHO0VBQ1JDLElBQUFBLElBQUksRUFBRSxJQUFJO0VBQ1ZDLElBQUFBLElBQUksRUFBRTtLQUNQO0VBRUQsRUFBQSxPQUFPQyxDQUFDLEdBQUc7RUFDVE4sSUFBQUEsT0FBTyxFQUFFLElBQUk7RUFDYkUsSUFBQUEsR0FBRyxFQUFFLElBQUk7RUFDVEMsSUFBQUEsR0FBRyxFQUFFLElBQUk7RUFDVEMsSUFBQUEsSUFBSSxFQUFFLElBQUk7RUFDVkMsSUFBQUEsSUFBSSxFQUFFO0tBQ1A7RUFFRCxFQUFBLE9BQU9FLENBQUMsR0FBRztFQUNUUCxJQUFBQSxPQUFPLEVBQUUsR0FBRztFQUNaRSxJQUFBQSxHQUFHLEVBQUUsSUFBSTtFQUNUQyxJQUFBQSxHQUFHLEVBQUUsR0FBRztFQUNSQyxJQUFBQSxJQUFJLEVBQUUsSUFBSTtFQUNWQyxJQUFBQSxJQUFJLEVBQUU7S0FDUDtFQUVE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');
7232
7324
  /* eslint-enable */
7233
7325
 
7234
7326
  /*
@@ -7244,10 +7336,10 @@ class DDMFit extends AccumulableElement {
7244
7336
  }
7245
7337
  constructor() {
7246
7338
  super();
7247
- this.a = 1.2;
7248
- this.z = 0.35;
7249
- this.v = 1.5;
7250
- this.t0 = 150;
7339
+ this.a = DDMMath.a.DEFAULT;
7340
+ this.z = DDMMath.z.DEFAULT;
7341
+ this.v = DDMMath.v.DEFAULT;
7342
+ this.t0 = DDMMath.t0.DEFAULT;
7251
7343
  this.observed = {};
7252
7344
  this.predicted = {};
7253
7345
  this.working = false;
@@ -7295,7 +7387,7 @@ class DDMFit extends AccumulableElement {
7295
7387
  this.fit();
7296
7388
  }
7297
7389
  static get styles() {
7298
- return [super.styles, i$2`
7390
+ return [super.styles, i$3`
7299
7391
  :host {
7300
7392
  display: inline-block;
7301
7393
  }
@@ -7412,7 +7504,7 @@ class DDMParameters extends AccumulableElement {
7412
7504
  }));
7413
7505
  }
7414
7506
  static get styles() {
7415
- return [super.styles, i$2`
7507
+ return [super.styles, i$3`
7416
7508
  :host {
7417
7509
  display: inline-block;
7418
7510
  }
@@ -7434,15 +7526,71 @@ class DDMParameters extends AccumulableElement {
7434
7526
  decidables-slider div {
7435
7527
  margin-bottom: 0.25rem;
7436
7528
  }
7529
+
7530
+ .a {
7531
+ --decidables-slider-background-color: var(---color-a-light);
7532
+ --decidables-slider-color: var(---color-a);
7533
+ }
7534
+
7535
+ .z {
7536
+ --decidables-slider-background-color: var(---color-z-light);
7537
+ --decidables-slider-color: var(---color-z);
7538
+ }
7539
+
7540
+ .v {
7541
+ --decidables-slider-background-color: var(---color-v-light);
7542
+ --decidables-slider-color: var(---color-v);
7543
+ }
7544
+
7545
+ .t0 {
7546
+ --decidables-slider-background-color: var(---color-t0-light);
7547
+ --decidables-slider-color: var(---color-t0);
7548
+ }
7437
7549
  `];
7438
7550
  }
7439
7551
  render() {
7440
7552
  return x$1`
7441
7553
  <div class="holder">
7442
- ${this.a != null ? x$1`<decidables-slider class="a" ?disabled=${!this.interactive} min="0.01" max="2" step="0.01" .value=${+this.a.toFixed(2)} @change=${this.setBoundarySeparation.bind(this)} @input=${this.setBoundarySeparation.bind(this)}><div>Boundary Separation<br><span class="math-var">a</span></div></decidables-slider>` : x$1``}
7443
- ${this.z != null ? x$1`<decidables-slider class="z" ?disabled=${!this.interactive} min="0.01" max="0.99" step="0.01" .value=${+this.z.toFixed(2)} @change=${this.setStartingPoint.bind(this)} @input=${this.setStartingPoint.bind(this)}><div>Starting Point<br><span class="math-var">z</span></div></decidables-slider>` : x$1``}
7444
- ${this.v != null ? x$1`<decidables-slider class="v" ?disabled=${!this.interactive} min="0.01" max="5" step="0.01" .value=${+this.v.toFixed(2)} @change=${this.setDriftRate.bind(this)} @input=${this.setDriftRate.bind(this)}><div>Drift Rate<br><span class="math-var">v</span></div></decidables-slider>` : x$1``}
7445
- ${this.t0 != null ? x$1`<decidables-slider class="t0" ?disabled=${!this.interactive} min="0" max="500" step="1" .value=${+this.t0.toFixed(0)} @change=${this.setNondecisionTime.bind(this)} @input=${this.setNondecisionTime.bind(this)}><div>Nondecision Time<br><span class="math-var">t₀</span></div></decidables-slider>` : x$1``}
7554
+ ${this.a != null ? x$1`<decidables-slider class="a"
7555
+ ?disabled=${!this.interactive}
7556
+ scale
7557
+ min=${DDMMath.a.MIN}
7558
+ max=${DDMMath.a.MAX}
7559
+ step=${DDMMath.a.STEP}
7560
+ .value=${+this.a.toFixed(2)}
7561
+ @change=${this.setBoundarySeparation.bind(this)}
7562
+ @input=${this.setBoundarySeparation.bind(this)}
7563
+ ><div>Boundary Separation<br><span class="math-var">a</span></div></decidables-slider>` : x$1``}
7564
+ ${this.z != null ? x$1`<decidables-slider class="z"
7565
+ ?disabled=${!this.interactive}
7566
+ scale
7567
+ min=${DDMMath.z.MIN}
7568
+ max=${DDMMath.z.MAX}
7569
+ step=${DDMMath.z.STEP}
7570
+ .value=${+this.z.toFixed(2)}
7571
+ @change=${this.setStartingPoint.bind(this)}
7572
+ @input=${this.setStartingPoint.bind(this)}
7573
+ ><div>Starting Point<br><span class="math-var">z</span></div></decidables-slider>` : x$1``}
7574
+ ${this.v != null ? x$1`<decidables-slider class="v"
7575
+ ?disabled=${!this.interactive}
7576
+ scale
7577
+ min=${DDMMath.v.MIN}
7578
+ max=${DDMMath.v.MAX}
7579
+ step=${DDMMath.v.STEP}
7580
+ .value=${+this.v.toFixed(2)}
7581
+ @change=${this.setDriftRate.bind(this)}
7582
+ @input=${this.setDriftRate.bind(this)}
7583
+ ><div>Drift Rate<br><span class="math-var">v</span></div></decidables-slider>` : x$1``}
7584
+ ${this.t0 != null ? x$1`<decidables-slider class="t0"
7585
+ ?disabled=${!this.interactive}
7586
+ scale
7587
+ min=${DDMMath.t0.MIN}
7588
+ max=${DDMMath.t0.MAX}
7589
+ step=${DDMMath.t0.STEP}
7590
+ .value=${+this.t0.toFixed(0)}
7591
+ @change=${this.setNondecisionTime.bind(this)}
7592
+ @input=${this.setNondecisionTime.bind(this)}
7593
+ ><div>Nondecision Time<br><span class="math-var">t₀</span></div></decidables-slider>` : x$1``}
7446
7594
  </div>`;
7447
7595
  }
7448
7596
  }
@@ -7580,10 +7728,10 @@ class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {
7580
7728
  this.resample();
7581
7729
  this.human = false;
7582
7730
  this.trials = 10;
7583
- this.a = 1.2;
7584
- this.z = 0.35;
7585
- this.v = 1.5;
7586
- this.t0 = 150;
7731
+ this.a = DDMMath.a.DEFAULT;
7732
+ this.z = DDMMath.z.DEFAULT;
7733
+ this.v = DDMMath.v.DEFAULT;
7734
+ this.t0 = DDMMath.t0.DEFAULT;
7587
7735
 
7588
7736
  // this.s = null;
7589
7737
  // this.sz = null;
@@ -7644,7 +7792,7 @@ class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {
7644
7792
  while (path.at(-1).e > bounds.lower && path.at(-1).e < bounds.upper) {
7645
7793
  path.push({
7646
7794
  t: path.at(-1).t + this.precision * 1000,
7647
- e: path.at(-1).e + drift + DDMMath.s * random()
7795
+ e: path.at(-1).e + drift + DDMMath.s.DEFAULT * random()
7648
7796
  });
7649
7797
  }
7650
7798
  return path;
@@ -7748,7 +7896,7 @@ class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {
7748
7896
  }));
7749
7897
  }
7750
7898
  static get styles() {
7751
- return [super.styles, i$2`
7899
+ return [super.styles, i$3`
7752
7900
  :host {
7753
7901
  display: inline-block;
7754
7902
 
@@ -7934,10 +8082,25 @@ class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {
7934
8082
 
7935
8083
  .t0z .point {
7936
8084
  fill: var(---color-element-emphasis);
8085
+ stroke-width: 0;
7937
8086
 
7938
8087
  r: 6px;
7939
8088
  }
7940
8089
 
8090
+ /* Make larger targets for touch users */
8091
+ .interactive .touch {
8092
+ stroke: #000000;
8093
+ stroke-dasharray: none;
8094
+ stroke-opacity: 0;
8095
+ }
8096
+
8097
+ @media (pointer: coarse) {
8098
+ .interactive .touch {
8099
+ stroke-linecap: round;
8100
+ stroke-width: 12;
8101
+ }
8102
+ }
8103
+
7941
8104
  .measure {
7942
8105
  stroke-width: 2;
7943
8106
  }
@@ -8112,9 +8275,9 @@ class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {
8112
8275
  let t0 = timeScale.invert(event.x);
8113
8276
  let z = (evidenceScale.invert(event.y) + this.a / 2) / this.a;
8114
8277
  // Clamp t0
8115
- t0 = shift === 'z' ? timeScale.invert(event.subject.x) : t0 < 0 ? 0 : t0 > 500 ? 500 : t0;
8278
+ t0 = shift === 'z' ? timeScale.invert(event.subject.x) : t0 < DDMMath.t0.MIN ? DDMMath.t0.MIN : t0 > DDMMath.t0.MAX ? DDMMath.t0.MAX : t0;
8116
8279
  // Clamp z
8117
- z = shift === 't0' ? (evidenceScale.invert(event.subject.y) + this.a / 2) / this.a : z < 0.01 ? 0.01 : z > 0.99 ? 0.99 : z;
8280
+ z = shift === 't0' ? (evidenceScale.invert(event.subject.y) + this.a / 2) / this.a : z < DDMMath.z.MIN ? DDMMath.z.MIN : z > DDMMath.z.MAX ? DDMMath.z.MAX : z;
8118
8281
  this.t0 = t0;
8119
8282
  this.z = z;
8120
8283
  this.alignState();
@@ -8144,7 +8307,7 @@ class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {
8144
8307
  this.drag = true;
8145
8308
  let v = (evidenceScale.invert(event.y) - this.startingPoint) / (timeScale.invert(event.x) - this.t0) * 1000;
8146
8309
  // Clamp drift rate
8147
- v = v < 0.01 ? 0.01 : v > 5 ? 5 : v;
8310
+ v = v < DDMMath.v.MIN ? DDMMath.v.MIN : v > DDMMath.v.MAX ? DDMMath.v.MAX : v;
8148
8311
  this.v = v;
8149
8312
  this.alignState();
8150
8313
  this.dispatchEvent(new CustomEvent('ddm-model-v', {
@@ -8168,12 +8331,13 @@ class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {
8168
8331
  }).on('start', event => {
8169
8332
  const element = event.currentTarget;
8170
8333
  select(element).classed('dragging', true);
8171
- }).on('drag', (event, datum) => {
8334
+ }).on('drag', event => {
8172
8335
  this.drag = true;
8173
- let boundary = evidenceScale.invert(event.y);
8174
- // Clamp boundaries to visible evidence
8175
- boundary = boundary < this.scale.evidence.min ? this.scale.evidence.min : boundary > this.scale.evidence.max ? this.scale.evidence.max : datum.bound === 'upper' && boundary < 0.005 ? 0.005 : datum.bound === 'lower' && boundary > -0.005 ? -0.005 : boundary;
8176
- this.a = Math.abs(boundary * 2);
8336
+ const boundary = evidenceScale.invert(event.y);
8337
+ let a = Math.abs(boundary * 2);
8338
+ // Clamp a
8339
+ a = a < DDMMath.a.MIN ? DDMMath.a.MIN : a > DDMMath.a.MAX ? DDMMath.a.MAX : a;
8340
+ this.a = a;
8177
8341
  this.alignState();
8178
8342
  this.dispatchEvent(new CustomEvent('ddm-model-a', {
8179
8343
  detail: {
@@ -8364,8 +8528,8 @@ class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {
8364
8528
  });
8365
8529
  accuracyUnderlayerEnter.append('g').classed('axis accuracy', true);
8366
8530
  // MERGE
8367
- const evidenceScaleMerge = evidenceUnderlayerMerge.select('.axis.evidence').attr('transform', `translate(${-0.25 * this.rem}, 0)`);
8368
- const densityScaleMerge = densityUnderlayerMerge.select('.axis.density').attr('transform', `translate(${-0.25 * this.rem}, 0)`);
8531
+ const evidenceScaleMerge = evidenceUnderlayerMerge.select('.axis.evidence').attr('transform', `translate(${ -0.25 * this.rem}, 0)`);
8532
+ const densityScaleMerge = densityUnderlayerMerge.select('.axis.density').attr('transform', `translate(${ -0.25 * this.rem}, 0)`);
8369
8533
  const accuracyScaleMerge = accuracyUnderlayerMerge.select('.axis.accuracy').attr('transform', `translate(${accuracyWidth + 0.25 * this.rem}, 0)`);
8370
8534
  const evidenceScaleTransition = evidenceScaleMerge.transition().duration(transitionDuration).ease(cubicOut).call(axisLeft(evidenceScale)).attr('font-size', null).attr('font-family', null);
8371
8535
  const densityScaleTransition = densityScaleMerge.transition().duration(transitionDuration).ease(cubicOut).each((datum, index, elements) => {
@@ -8387,8 +8551,8 @@ class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {
8387
8551
  densityTitleEnter.append('tspan').classed('name', true).text('Density');
8388
8552
  accuracyTitleEnter.append('tspan').classed('name', true).text('Accuracy');
8389
8553
  // MERGE
8390
- evidenceUnderlayerMerge.select('.title.evidence').transition().duration(transitionDuration).ease(cubicOut).attr('transform', `translate(${-2.5 * this.rem}, ${evidenceHeight / 2})rotate(-90)`);
8391
- densityUnderlayerMerge.select('.title.density').transition().duration(transitionDuration).ease(cubicOut).attr('transform', `translate(${-2.5 * this.rem}, ${densityHeight / 2})rotate(-90)`);
8554
+ evidenceUnderlayerMerge.select('.title.evidence').transition().duration(transitionDuration).ease(cubicOut).attr('transform', `translate(${ -2.5 * this.rem}, ${evidenceHeight / 2})rotate(-90)`);
8555
+ densityUnderlayerMerge.select('.title.density').transition().duration(transitionDuration).ease(cubicOut).attr('transform', `translate(${ -2.5 * this.rem}, ${densityHeight / 2})rotate(-90)`);
8392
8556
  accuracyUnderlayerMerge.select('.title.accuracy').transition().duration(transitionDuration).ease(cubicOut).attr('transform', `translate(${accuracyWidth + 2.25 * this.rem}, ${height / 2})rotate(90)`);
8393
8557
 
8394
8558
  //
@@ -8614,20 +8778,23 @@ class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {
8614
8778
  return `boundary ${index === 0 ? 'correct' : 'error'}`;
8615
8779
  });
8616
8780
  boundaryEnter.append('line').classed('line', true);
8781
+ boundaryEnter.append('line').classed('line touch', true);
8617
8782
  // MERGE
8618
8783
  const boundaryMerge = boundaryEnter.merge(boundaryUpdate).attr('tabindex', this.interactive ? 0 : null).classed('interactive', this.interactive).on('keydown', this.interactive ? (event, datum) => {
8619
8784
  if (['ArrowUp', 'ArrowDown'].includes(event.key)) {
8620
- let a = this.a; /* eslint-disable-line prefer-destructuring */
8785
+ let {
8786
+ a
8787
+ } = this;
8621
8788
  switch (event.key) {
8622
8789
  case 'ArrowUp':
8623
- a += datum.bound === 'upper' ? event.shiftKey ? 0.01 : 0.1 : event.shiftKey ? -0.01 : -0.1;
8790
+ a += datum.bound === 'upper' ? event.shiftKey ? DDMMath.a.STEP : DDMMath.a.JUMP : event.shiftKey ? -0.01 : -0.1;
8624
8791
  break;
8625
8792
  case 'ArrowDown':
8626
- a += datum.bound === 'upper' ? event.shiftKey ? -0.01 : -0.1 : event.shiftKey ? 0.01 : 0.1;
8793
+ a += datum.bound === 'upper' ? event.shiftKey ? -0.01 : -0.1 : event.shiftKey ? DDMMath.a.STEP : DDMMath.a.JUMP;
8627
8794
  break;
8628
8795
  }
8629
- // Clamp boundaries to visible evidence
8630
- a = a < 0.01 ? 0.01 : a > this.scale.evidence.max * 2 ? this.scale.evidence.max * 2 : a;
8796
+ // Clamp a
8797
+ a = a < DDMMath.a.MIN ? DDMMath.a.MIN : a > DDMMath.a.MAX ? DDMMath.a.MAX : a;
8631
8798
  this.a = a;
8632
8799
  this.alignState();
8633
8800
  this.dispatchEvent(new CustomEvent('ddm-model-a', {
@@ -8651,6 +8818,11 @@ class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {
8651
8818
  }).attr('y2', datum => {
8652
8819
  return evidenceScale(datum.value);
8653
8820
  });
8821
+ boundaryMerge.select('.line.touch').transition().duration(this.drag ? 0 : transitionDuration).ease(cubicOut).attr('x1', timeScale(this.scale.time.min)).attr('x2', timeScale(this.scale.time.max)).attr('y1', datum => {
8822
+ return evidenceScale(datum.value);
8823
+ }).attr('y2', datum => {
8824
+ return evidenceScale(datum.value);
8825
+ });
8654
8826
  // EXIT
8655
8827
  boundaryUpdate.exit().remove();
8656
8828
 
@@ -8664,21 +8836,25 @@ class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {
8664
8836
  // ENTER
8665
8837
  const driftEnter = driftUpdate.enter().append('g').classed('drift', true);
8666
8838
  driftEnter.append('line').classed('line', true);
8839
+ driftEnter.append('line').classed('line touch', true);
8667
8840
  driftEnter.append('path').classed('arrow', true);
8841
+ driftEnter.append('path').classed('arrow touch', true);
8668
8842
  // MERGE
8669
8843
  const driftMerge = driftEnter.merge(driftUpdate).attr('tabindex', this.interactive ? 0 : null).classed('interactive', this.interactive).on('keydown', this.interactive ? event => {
8670
8844
  if (['ArrowUp', 'ArrowDown'].includes(event.key)) {
8671
- let v = this.v; /* eslint-disable-line prefer-destructuring */
8845
+ let {
8846
+ v
8847
+ } = this;
8672
8848
  switch (event.key) {
8673
8849
  case 'ArrowUp':
8674
- v += event.shiftKey ? 0.01 : 0.1;
8850
+ v += event.shiftKey ? DDMMath.v.STEP : DDMMath.v.JUMP;
8675
8851
  break;
8676
8852
  case 'ArrowDown':
8677
- v -= event.shiftKey ? 0.01 : 0.1;
8853
+ v -= event.shiftKey ? DDMMath.v.STEP : DDMMath.v.JUMP;
8678
8854
  break;
8679
8855
  }
8680
8856
  // Clamp z
8681
- v = v < 0.01 ? 0.01 : v > 5 ? 5 : v;
8857
+ v = v < DDMMath.v.MIN ? DDMMath.v.MIN : v > DDMMath.v.MAX ? DDMMath.v.MAX : v;
8682
8858
  this.v = v;
8683
8859
  this.alignState();
8684
8860
  this.dispatchEvent(new CustomEvent('ddm-model-v', {
@@ -8703,11 +8879,17 @@ class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {
8703
8879
  rotate(${-Math.atan(datum.v / 1000 * scaleRatio) * (180 / Math.PI)})`;
8704
8880
  });
8705
8881
  driftMerge.select('.line').attr('x2', timeScale(200));
8882
+ driftMerge.select('.line.touch').attr('x2', timeScale(200));
8706
8883
  driftMerge.select('.arrow').attr('d', `
8707
8884
  M ${timeScale(200) - this.rem * 0.5},${-this.rem * 0.5}
8708
8885
  l ${this.rem * 0.5},${this.rem * 0.5}
8709
8886
  l ${-this.rem * 0.5},${this.rem * 0.5}
8710
8887
  `);
8888
+ driftMerge.select('.arrow.touch').attr('d', `
8889
+ M ${timeScale(200) - this.rem * 0.5},${-this.rem * 0.5}
8890
+ l ${this.rem * 0.5},${this.rem * 0.5}
8891
+ l ${-this.rem * 0.5},${this.rem * 0.5}
8892
+ `);
8711
8893
  // EXIT
8712
8894
  driftUpdate.exit().remove();
8713
8895
 
@@ -8720,21 +8902,24 @@ class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {
8720
8902
  // ENTER
8721
8903
  const t0zEnter = t0zUpdate.enter().append('g').classed('t0z', true);
8722
8904
  t0zEnter.append('line').classed('line', true);
8723
- t0zEnter.append('circle').classed('point', true);
8905
+ t0zEnter.append('line').classed('line touch', true);
8906
+ t0zEnter.append('circle').classed('point touch', true);
8724
8907
  // MERGE
8725
8908
  const t0zMerge = t0zEnter.merge(t0zUpdate).attr('tabindex', this.interactive ? 0 : null).classed('interactive', this.interactive).on('keydown', this.interactive ? event => {
8726
8909
  if (['ArrowUp', 'ArrowDown'].includes(event.key)) {
8727
- let z = this.z; /* eslint-disable-line prefer-destructuring */
8910
+ let {
8911
+ z
8912
+ } = this;
8728
8913
  switch (event.key) {
8729
8914
  case 'ArrowUp':
8730
- z += event.shiftKey ? 0.01 : 0.1;
8915
+ z += event.shiftKey ? DDMMath.z.STEP : DDMMath.z.JUMP;
8731
8916
  break;
8732
8917
  case 'ArrowDown':
8733
- z -= event.shiftKey ? 0.01 : 0.1;
8918
+ z -= event.shiftKey ? DDMMath.z.STEP : DDMMath.z.JUMP;
8734
8919
  break;
8735
8920
  }
8736
8921
  // Clamp z
8737
- z = z < 0.01 ? 0.01 : z > 0.99 ? 0.99 : z;
8922
+ z = z < DDMMath.z.MIN ? DDMMath.z.MIN : z > DDMMath.z.MAX ? DDMMath.z.MAX : z;
8738
8923
  this.z = z;
8739
8924
  this.alignState();
8740
8925
  this.dispatchEvent(new CustomEvent('ddm-model-z', {
@@ -8749,14 +8934,14 @@ class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {
8749
8934
  let t0 = this.t0; /* eslint-disable-line prefer-destructuring */
8750
8935
  switch (event.key) {
8751
8936
  case 'ArrowRight':
8752
- t0 += event.shiftKey ? 1 : 10;
8937
+ t0 += event.shiftKey ? DDMMath.t0.STEP : DDMMath.t0.JUMP;
8753
8938
  break;
8754
8939
  case 'ArrowLeft':
8755
- t0 -= event.shiftKey ? 1 : 10;
8940
+ t0 -= event.shiftKey ? DDMMath.t0.STEP : DDMMath.t0.JUMP;
8756
8941
  break;
8757
8942
  }
8758
8943
  // Clamp t0
8759
- t0 = t0 < 0 ? 0 : t0 > 500 ? 500 : t0;
8944
+ t0 = t0 < DDMMath.t0.MIN ? DDMMath.t0.MIN : t0 > DDMMath.t0.MAX ? DDMMath.t0.MAX : t0;
8760
8945
  this.t0 = t0;
8761
8946
  this.alignState();
8762
8947
  this.dispatchEvent(new CustomEvent('ddm-model-t0', {
@@ -8782,6 +8967,13 @@ class DDMModel extends DecidablesMixinResizeable(AccumulableElement) {
8782
8967
  }).attr('y2', datum => {
8783
8968
  return evidenceScale(datum.startingPoint);
8784
8969
  });
8970
+ t0zMerge.select('.line.touch').transition().duration(this.drag ? 0 : transitionDuration).ease(cubicOut).attr('x1', timeScale(0)).attr('x2', datum => {
8971
+ return timeScale(datum.t0);
8972
+ }).attr('y1', datum => {
8973
+ return evidenceScale(datum.startingPoint);
8974
+ }).attr('y2', datum => {
8975
+ return evidenceScale(datum.startingPoint);
8976
+ });
8785
8977
  t0zMerge.select('.point').transition().duration(this.drag ? 0 : transitionDuration).ease(cubicOut).attr('cx', datum => {
8786
8978
  return timeScale(datum.t0);
8787
8979
  }).attr('cy', datum => {
@@ -9088,7 +9280,7 @@ class RDK2AFCTask extends DecidablesMixinResizeable(AccumulableElement) {
9088
9280
  this.yScale = undefined; // D3 Scale for y-axis
9089
9281
  }
9090
9282
  static get styles() {
9091
- return [super.styles, i$2`
9283
+ return [super.styles, i$3`
9092
9284
  :host {
9093
9285
  display: inline-block;
9094
9286
 
@@ -9269,7 +9461,7 @@ class RDK2AFCTask extends DecidablesMixinResizeable(AccumulableElement) {
9269
9461
  const queryUpdate = select(this.renderRoot).select('.content').selectAll('.query').data([]);
9270
9462
  queryUpdate.exit().remove();
9271
9463
  }
9272
- run( /* elapsed */
9464
+ run(/* elapsed */
9273
9465
  ) {
9274
9466
  const realTime = now();
9275
9467
  const currentTime = this.baseTime ? realTime - this.baseTime : 0;
@@ -9465,7 +9657,7 @@ class DDMEquation extends AccumulableElement {
9465
9657
  this.numeric = false;
9466
9658
  }
9467
9659
  static get styles() {
9468
- return [super.styles, i$2`
9660
+ return [super.styles, i$3`
9469
9661
  :host {
9470
9662
  display: block;
9471
9663
 
@@ -9664,9 +9856,9 @@ class DDMEquationAZV2PC extends DDMEquation {
9664
9856
  }
9665
9857
  constructor() {
9666
9858
  super();
9667
- this.a = 1.5;
9668
- this.z = 0.5;
9669
- this.v = 0.1;
9859
+ this.a = DDMMath.a.DEFAULT;
9860
+ this.z = DDMMath.z.DEFAULT;
9861
+ this.v = DDMMath.v.DEFAULT;
9670
9862
  this.alignState();
9671
9863
  }
9672
9864
  alignState() {
@@ -9708,19 +9900,46 @@ class DDMEquationAZV2PC extends DDMEquation {
9708
9900
  let s;
9709
9901
  let accuracy;
9710
9902
  if (this.numeric) {
9711
- a = x$1`<decidables-spinner class="a bottom" ?disabled=${!this.interactive} min="0.1" max="2" step="0.01" .value="${this.a}" @input=${this.aInput.bind(this)}>
9903
+ a = x$1`<decidables-spinner class="a bottom"
9904
+ ?disabled=${!this.interactive}
9905
+ min=${DDMMath.a.MIN}
9906
+ max=${DDMMath.a.MAX}
9907
+ step=${DDMMath.a.STEP}
9908
+ .value=${this.a}
9909
+ @input=${this.aInput.bind(this)}
9910
+ >
9712
9911
  <var class="math-var">a</var>
9713
9912
  </decidables-spinner>`;
9714
- z = x$1`<decidables-spinner class="z bottom" ?disabled=${!this.interactive} min="0.01" max="0.99" step="0.01" .value="${this.z}" @input=${this.zInput.bind(this)}>
9913
+ z = x$1`<decidables-spinner class="z bottom"
9914
+ ?disabled=${!this.interactive}
9915
+ min=${DDMMath.z.MIN}
9916
+ max=${DDMMath.z.MAX}
9917
+ step=${DDMMath.z.STEP}
9918
+ .value=${this.z}
9919
+ @input=${this.zInput.bind(this)}
9920
+ >
9715
9921
  <var class="math-var">z</var>
9716
9922
  </decidables-spinner>`;
9717
- v = x$1`<decidables-spinner class="v bottom" ?disabled=${!this.interactive} min="0.01" max="5" step="0.01" .value="${this.v}" @input=${this.vInput.bind(this)}>
9923
+ v = x$1`<decidables-spinner class="v bottom"
9924
+ ?disabled=${!this.interactive}
9925
+ min=${DDMMath.v.MIN}
9926
+ max=${DDMMath.v.MAX}
9927
+ step=${DDMMath.v.STEP}
9928
+ .value=${this.v}
9929
+ @input=${this.vInput.bind(this)}
9930
+ >
9718
9931
  <var class="math-var">v</var>
9719
9932
  </decidables-spinner>`;
9720
- s = x$1`<decidables-spinner class="s bottom" disabled min="0.01" max="1" step="0.01" .value="${DDMMath.s}">
9933
+ s = x$1`<decidables-spinner class="s bottom"
9934
+ disabled
9935
+ .value=${DDMMath.s.DEFAULT}
9936
+ >
9721
9937
  <var class="math-var">s</var>
9722
9938
  </decidables-spinner>`;
9723
- accuracy = x$1`<decidables-spinner class="accuracy bottom" disabled min="0" max="1" step="0.01" .value="${+this.accuracy.toFixed(2)}">
9939
+ accuracy = x$1`<decidables-spinner class="accuracy bottom"
9940
+ disabled
9941
+ .value=${+this.accuracy.toFixed(2)}
9942
+ >
9724
9943
  <var>Accuracy</var>
9725
9944
  </decidables-spinner>`;
9726
9945
  } else {
@@ -9798,10 +10017,10 @@ class DDMEquationAZVT02M extends DDMEquation {
9798
10017
  }
9799
10018
  constructor() {
9800
10019
  super();
9801
- this.a = 1.5;
9802
- this.z = 0.5;
9803
- this.v = 0.1;
9804
- this.t0 = 200;
10020
+ this.a = DDMMath.a.DEFAULT;
10021
+ this.z = DDMMath.z.DEFAULT;
10022
+ this.v = DDMMath.v.DEFAULT;
10023
+ this.t0 = DDMMath.t0.DEFAULT;
9805
10024
  this.alignState();
9806
10025
  }
9807
10026
  alignState() {
@@ -9850,22 +10069,56 @@ class DDMEquationAZVT02M extends DDMEquation {
9850
10069
  let s;
9851
10070
  let meanRT;
9852
10071
  if (this.numeric) {
9853
- a = x$1`<decidables-spinner class="a bottom" ?disabled=${!this.interactive} min="0.1" max="2" step="0.01" .value="${this.a}" @input=${this.aInput.bind(this)}>
10072
+ a = x$1`<decidables-spinner class="a bottom"
10073
+ ?disabled=${!this.interactive}
10074
+ min=${DDMMath.a.MIN}
10075
+ max=${DDMMath.a.MAX}
10076
+ step=${DDMMath.a.STEP}
10077
+ .value=${this.a}
10078
+ @input=${this.aInput.bind(this)}
10079
+ >
9854
10080
  <var class="math-var">a</var>
9855
10081
  </decidables-spinner>`;
9856
- z = x$1`<decidables-spinner class="z bottom" ?disabled=${!this.interactive} min="0.01" max="0.99" step="0.01" .value="${this.z}" @input=${this.zInput.bind(this)}>
10082
+ z = x$1`<decidables-spinner class="z bottom"
10083
+ ?disabled=${!this.interactive}
10084
+ min=${DDMMath.z.MIN}
10085
+ max=${DDMMath.z.MAX}
10086
+ step=${DDMMath.z.STEP}
10087
+ .value=${this.z}
10088
+ @input=${this.zInput.bind(this)}
10089
+ >
9857
10090
  <var class="math-var">z</var>
9858
10091
  </decidables-spinner>`;
9859
- v = x$1`<decidables-spinner class="v bottom" ?disabled=${!this.interactive} min="0.01" max="5" step="0.01" .value="${this.v}" @input=${this.vInput.bind(this)}>
10092
+ v = x$1`<decidables-spinner class="v bottom"
10093
+ ?disabled=${!this.interactive}
10094
+ min=${DDMMath.v.MIN}
10095
+ max=${DDMMath.v.MAX}
10096
+ step=${DDMMath.v.STEP}
10097
+ .value=${this.v}
10098
+ @input=${this.vInput.bind(this)}
10099
+ >
9860
10100
  <var class="math-var">v</var>
9861
10101
  </decidables-spinner>`;
9862
- t0 = x$1`<decidables-spinner class="t0 bottom" ?disabled=${!this.interactive} min="0" max="500" step="1" .value="${this.t0}" @input=${this.t0Input.bind(this)}>
10102
+ t0 = x$1`<decidables-spinner class="t0 bottom"
10103
+ ?disabled=${!this.interactive}
10104
+ min=${DDMMath.t0.MIN}
10105
+ max=${DDMMath.t0.MAX}
10106
+ step=${DDMMath.t0.STEP}
10107
+ .value=${this.t0}
10108
+ @input=${this.t0Input.bind(this)}
10109
+ >
9863
10110
  <var class="math-var">t<sub>0</sub></var>
9864
10111
  </decidables-spinner>`;
9865
- s = x$1`<decidables-spinner class="s bottom" disabled min="0.01" max="1" step="0.01" .value="${DDMMath.s}">
10112
+ s = x$1`<decidables-spinner class="s bottom"
10113
+ disabled
10114
+ .value=${DDMMath.s.DEFAULT}
10115
+ >
9866
10116
  <var class="math-var">s</var>
9867
10117
  </decidables-spinner>`;
9868
- meanRT = x$1`<decidables-spinner class="mean-rt bottom" disabled min="0" max="1" step="0.01" .value="${+this.meanRT.toFixed(0)}">
10118
+ meanRT = x$1`<decidables-spinner class="mean-rt bottom"
10119
+ disabled
10120
+ .value=${+this.meanRT.toFixed(0)}
10121
+ >
9869
10122
  <var>Mean RT</var>
9870
10123
  </decidables-spinner>`;
9871
10124
  } else {
@@ -9929,7 +10182,7 @@ customElements.define('ddm-equation-azvt02m', DDMEquationAZVT02M);
9929
10182
  */
9930
10183
  class DDMExample extends AccumulableElement {
9931
10184
  static get styles() {
9932
- return [super.styles, i$2`
10185
+ return [super.styles, i$3`
9933
10186
  :host {
9934
10187
  ---border: var(--border, 1px solid var(---color-border));
9935
10188
  display: inline-block;
@@ -9988,17 +10241,74 @@ class DDMExample extends AccumulableElement {
9988
10241
  }
9989
10242
  customElements.define('ddm-example', DDMExample);
9990
10243
 
9991
- // import DDMMath from '@decidables/accumulable-math';
9992
-
9993
-
9994
10244
  /*
9995
10245
  DDMExampleHuman element
9996
10246
  <ddm-example-human>
9997
10247
  */
9998
10248
  class DDMExampleHuman extends DDMExample {
10249
+ static get properties() {
10250
+ return {
10251
+ trials: {
10252
+ attribute: 'trials',
10253
+ type: Number,
10254
+ reflect: true
10255
+ },
10256
+ duration: {
10257
+ attribute: 'duration',
10258
+ type: Number,
10259
+ reflect: true
10260
+ },
10261
+ coherence: {
10262
+ attribute: 'coherence',
10263
+ type: Number,
10264
+ reflect: true
10265
+ },
10266
+ color: {
10267
+ attribute: 'color',
10268
+ type: String,
10269
+ reflect: true
10270
+ },
10271
+ a: {
10272
+ attribute: false,
10273
+ type: Number,
10274
+ reflect: false
10275
+ },
10276
+ z: {
10277
+ attribute: false,
10278
+ type: Number,
10279
+ reflect: false
10280
+ },
10281
+ v: {
10282
+ attribute: false,
10283
+ type: Number,
10284
+ reflect: false
10285
+ },
10286
+ t0: {
10287
+ attribute: false,
10288
+ type: Number,
10289
+ reflect: false
10290
+ }
10291
+ };
10292
+ }
9999
10293
  constructor() {
10000
10294
  super();
10001
- this.trialCount = 0;
10295
+ this.trials = 10;
10296
+ this.duration = 2000;
10297
+ this.coherence = 0.5;
10298
+ this.colors = ['none', 'measure', 'outcome', 'all'];
10299
+ this.color = 'outcome';
10300
+ this.a = DDMMath.a.DEFAULT;
10301
+ this.z = DDMMath.z.DEFAULT;
10302
+ this.v = DDMMath.v.DEFAULT;
10303
+ this.t0 = DDMMath.t0.DEFAULT;
10304
+ this.accumulableControl = null;
10305
+ this.rdkTask = null;
10306
+ this.accumulableResponse = null;
10307
+ this.accumulableTable = null;
10308
+ this.ddmParameters = null;
10309
+ this.ddmModel = null;
10310
+ this.ddmFit = null;
10311
+ this.data = undefined;
10002
10312
  }
10003
10313
  connectedCallback() {
10004
10314
  super.connectedCallback();
@@ -10012,57 +10322,32 @@ class DDMExampleHuman extends DDMExample {
10012
10322
 
10013
10323
  // Initialize
10014
10324
  this.ddmModel.clear();
10015
- if (this.accumulableControl && this.accumulableControl.hasAttribute('trials')) {
10325
+ if (this.accumulableControl) {
10016
10326
  this.accumulableControl.addEventListener('accumulable-control-trials', event => {
10017
- if (this.rdkTask) {
10018
- this.rdkTask.trials = event.detail.trials;
10019
- }
10020
- if (this.accumulableResponse) {
10021
- this.accumulableResponse.trialTotal = event.detail.trials;
10022
- }
10327
+ this.trials = event.detail.trials;
10023
10328
  });
10024
- }
10025
- if (this.accumulableControl && this.accumulableControl.hasAttribute('duration')) {
10026
10329
  this.accumulableControl.addEventListener('accumulable-control-duration', event => {
10027
- if (this.rdkTask) {
10028
- this.rdkTask.duration = event.detail.duration;
10029
- this.rdkTask.wait = event.detail.duration;
10030
- this.rdkTask.iti = event.detail.duration;
10031
- }
10330
+ this.duration = event.detail.duration;
10032
10331
  });
10033
- }
10034
- if (this.accumulableControl && this.accumulableControl.hasAttribute('coherence')) {
10035
10332
  this.accumulableControl.addEventListener('accumulable-control-coherence', event => {
10036
- if (this.rdkTask) {
10037
- this.rdkTask.coherence = event.detail.coherence;
10038
- }
10333
+ this.coherence = event.detail.coherence;
10039
10334
  });
10040
- }
10041
- if (this.accumulableControl && this.accumulableControl.hasAttribute('color')) {
10042
10335
  this.accumulableControl.addEventListener('accumulable-control-color', event => {
10043
- if (this.accumulableTable) {
10044
- this.accumulableTable.color = event.detail.color;
10045
- }
10336
+ this.color = event.detail.color;
10046
10337
  });
10047
- }
10048
- if (this.accumulableControl && this.accumulableControl.hasAttribute('run')) {
10049
- this.accumulableControl.addEventListener('accumulable-control-run', ( /* event */
10338
+ this.accumulableControl.addEventListener('accumulable-control-run', (/* event */
10050
10339
  ) => {
10051
10340
  if (this.rdkTask) {
10052
10341
  this.rdkTask.running = true;
10053
10342
  }
10054
10343
  });
10055
- }
10056
- if (this.accumulableControl && this.accumulableControl.hasAttribute('pause')) {
10057
- this.accumulableControl.addEventListener('accumulable-control-pause', ( /* event */
10344
+ this.accumulableControl.addEventListener('accumulable-control-pause', (/* event */
10058
10345
  ) => {
10059
10346
  if (this.rdkTask) {
10060
10347
  this.rdkTask.running = false;
10061
10348
  }
10062
10349
  });
10063
- }
10064
- if (this.accumulableControl && this.accumulableControl.hasAttribute('reset')) {
10065
- this.accumulableControl.addEventListener('accumulable-control-reset', ( /* event */
10350
+ this.accumulableControl.addEventListener('accumulable-control-reset', (/* event */
10066
10351
  ) => {
10067
10352
  if (this.rdkTask) {
10068
10353
  this.rdkTask.reset();
@@ -10094,11 +10379,6 @@ class DDMExampleHuman extends DDMExample {
10094
10379
  }
10095
10380
  });
10096
10381
  }
10097
- if (this.rdkTask) {
10098
- if (this.accumulableResponse) {
10099
- this.accumulableResponse.trialTotal = this.rdkTask.trials;
10100
- }
10101
- }
10102
10382
  if (this.rdkTask) {
10103
10383
  this.rdkTask.addEventListener('rdk-trial-start', event => {
10104
10384
  if (this.accumulableResponse) {
@@ -10107,7 +10387,7 @@ class DDMExampleHuman extends DDMExample {
10107
10387
  });
10108
10388
  }
10109
10389
  if (this.rdkTask) {
10110
- this.rdkTask.addEventListener('rdk-trial-end', ( /* event */
10390
+ this.rdkTask.addEventListener('rdk-trial-end', (/* event */
10111
10391
  ) => {
10112
10392
  if (this.accumulableResponse) {
10113
10393
  this.accumulableResponse.stop();
@@ -10115,7 +10395,7 @@ class DDMExampleHuman extends DDMExample {
10115
10395
  });
10116
10396
  }
10117
10397
  if (this.rdkTask) {
10118
- this.rdkTask.addEventListener('rdk-block-end', ( /* event */
10398
+ this.rdkTask.addEventListener('rdk-block-end', (/* event */
10119
10399
  ) => {
10120
10400
  if (this.accumulableControl) {
10121
10401
  this.accumulableControl.complete();
@@ -10124,18 +10404,7 @@ class DDMExampleHuman extends DDMExample {
10124
10404
  }
10125
10405
  if (this.accumulableResponse) {
10126
10406
  this.accumulableResponse.addEventListener('accumulable-response', event => {
10127
- if (this.accumulableTable) {
10128
- this.accumulableTable.correctCount = event.detail.correctCount;
10129
- this.accumulableTable.errorCount = event.detail.errorCount;
10130
- this.accumulableTable.nrCount = event.detail.nrCount;
10131
- this.accumulableTable.accuracy = event.detail.accuracy;
10132
- this.accumulableTable.correctMeanRT = event.detail.correctMeanRT;
10133
- this.accumulableTable.errorMeanRT = event.detail.errorMeanRT;
10134
- this.accumulableTable.meanRT = event.detail.meanRT;
10135
- this.accumulableTable.correctSDRT = event.detail.correctSDRT;
10136
- this.accumulableTable.errorSDRT = event.detail.errorSDRT;
10137
- this.accumulableTable.sdRT = event.detail.sdRT;
10138
- }
10407
+ this.data = event.detail.data;
10139
10408
  if (this.ddmModel) {
10140
10409
  this.ddmModel.trial({
10141
10410
  index: event.detail.trial,
@@ -10145,34 +10414,73 @@ class DDMExampleHuman extends DDMExample {
10145
10414
  }
10146
10415
  if (this.ddmFit) {
10147
10416
  this.ddmFit.set({
10148
- accuracy: event.detail.accuracy,
10149
- correctMeanRT: event.detail.correctMeanRT,
10150
- errorMeanRT: event.detail.errorMeanRT,
10151
- meanRT: event.detail.meanRT,
10152
- correctSDRT: event.detail.correctSDRT,
10153
- errorSDRT: event.detail.errorSDRT,
10154
- sdRT: event.detail.sdRT
10417
+ accuracy: event.detail.data.accuracy,
10418
+ correctMeanRT: event.detail.data.correctMeanRT,
10419
+ errorMeanRT: event.detail.data.errorMeanRT,
10420
+ meanRT: event.detail.data.meanRT,
10421
+ correctSDRT: event.detail.data.correctSDRT,
10422
+ errorSDRT: event.detail.data.errorSDRT,
10423
+ sdRT: event.detail.data.sdRT
10155
10424
  });
10156
10425
  }
10426
+ this.requestUpdate();
10157
10427
  });
10158
10428
  }
10159
10429
  if (this.ddmFit) {
10160
10430
  this.ddmFit.addEventListener('ddm-fit-update', event => {
10161
- if (this.ddmParameters) {
10162
- this.ddmParameters.a = event.detail.a;
10163
- this.ddmParameters.z = 0.5; // event.detail.z;
10164
- this.ddmParameters.v = event.detail.v;
10165
- this.ddmParameters.t0 = event.detail.t0;
10166
- }
10167
- if (this.ddmModel) {
10168
- this.ddmModel.a = event.detail.a;
10169
- this.ddmModel.z = 0.5; // event.detail.z;
10170
- this.ddmModel.v = event.detail.v;
10171
- this.ddmModel.t0 = event.detail.t0;
10172
- }
10431
+ this.a = event.detail.a;
10432
+ this.z = 0.5; // event.detail.z;
10433
+ this.v = event.detail.v;
10434
+ this.t0 = event.detail.t0;
10173
10435
  });
10174
10436
  }
10175
10437
  }
10438
+ update(changedProperties) {
10439
+ super.update(changedProperties);
10440
+ if (this.accumulableControl) {
10441
+ this.accumulableControl.trials = this.accumulableControl.trials != null ? this.trials : undefined;
10442
+ this.accumulableControl.duration = this.accumulableControl.duration != null ? this.duration : undefined;
10443
+ this.accumulableControl.coherence = this.accumulableControl.coherence != null ? this.coherence : undefined;
10444
+ this.accumulableControl.color = this.accumulableControl.color != null ? this.color : undefined;
10445
+ }
10446
+ if (this.rdkTask) {
10447
+ this.rdkTask.trials = this.trials;
10448
+ this.rdkTask.duration = this.duration;
10449
+ this.rdkTask.wait = this.duration;
10450
+ this.rdkTask.iti = this.duration;
10451
+ this.rdkTask.coherence = this.coherence;
10452
+ }
10453
+ if (this.ddmParameters) {
10454
+ this.ddmParameters.a = this.ddmParameters.a != null ? this.a : undefined;
10455
+ this.ddmParameters.z = this.ddmParameters.z != null ? this.z : undefined;
10456
+ this.ddmParameters.v = this.ddmParameters.a != null ? this.v : undefined;
10457
+ this.ddmParameters.t0 = this.ddmParameters.t0 != null ? this.t0 : undefined;
10458
+ }
10459
+ if (this.ddmModel) {
10460
+ this.ddmModel.a = +this.a;
10461
+ this.ddmModel.z = +this.z;
10462
+ this.ddmModel.v = +this.v;
10463
+ this.ddmModel.t0 = +this.t0;
10464
+ }
10465
+ if (this.accumulableResponse) {
10466
+ this.accumulableResponse.trialTotal = this.trials;
10467
+ }
10468
+ if (this.accumulableTable) {
10469
+ this.accumulableTable.color = this.color;
10470
+ }
10471
+ if (this.accumulableTable && this.data) {
10472
+ this.accumulableTable.correctCount = this.data.correctCount;
10473
+ this.accumulableTable.errorCount = this.data.errorCount;
10474
+ this.accumulableTable.nrCount = this.data.nrCount;
10475
+ this.accumulableTable.accuracy = this.data.accuracy;
10476
+ this.accumulableTable.correctMeanRT = this.data.correctMeanRT;
10477
+ this.accumulableTable.errorMeanRT = this.data.errorMeanRT;
10478
+ this.accumulableTable.meanRT = this.data.meanRT;
10479
+ this.accumulableTable.correctSDRT = this.data.correctSDRT;
10480
+ this.accumulableTable.errorSDRT = this.data.errorSDRT;
10481
+ this.accumulableTable.sdRT = this.data.sdRT;
10482
+ }
10483
+ }
10176
10484
  }
10177
10485
  customElements.define('ddm-example-human', DDMExampleHuman);
10178
10486
 
@@ -10188,6 +10496,11 @@ class DDMExampleInteractive extends DDMExample {
10188
10496
  type: Number,
10189
10497
  reflect: true
10190
10498
  },
10499
+ color: {
10500
+ attribute: 'color',
10501
+ type: String,
10502
+ reflect: true
10503
+ },
10191
10504
  a: {
10192
10505
  attribute: 'boundary-separation',
10193
10506
  type: Number,
@@ -10213,10 +10526,12 @@ class DDMExampleInteractive extends DDMExample {
10213
10526
  constructor() {
10214
10527
  super();
10215
10528
  this.trials = 10;
10216
- this.a = 1.2;
10217
- this.z = 0.35;
10218
- this.v = 1.5;
10219
- this.t0 = 150;
10529
+ this.colors = ['none', 'measure', 'outcome', 'all'];
10530
+ this.color = 'outcome';
10531
+ this.a = DDMMath.a.DEFAULT;
10532
+ this.z = DDMMath.z.DEFAULT;
10533
+ this.v = DDMMath.v.DEFAULT;
10534
+ this.t0 = DDMMath.t0.DEFAULT;
10220
10535
  this.accumulableControl = null;
10221
10536
  this.accumulableTable = null;
10222
10537
  this.ddmParameters = null;
@@ -10231,7 +10546,7 @@ class DDMExampleInteractive extends DDMExample {
10231
10546
  this.ddmParameters = this.querySelector('ddm-parameters');
10232
10547
  this.ddmModel = this.querySelector('ddm-model');
10233
10548
  if (this.accumulableControl) {
10234
- this.accumulableControl.addEventListener('accumulable-control-resample', ( /* event */
10549
+ this.accumulableControl.addEventListener('accumulable-control-resample', (/* event */
10235
10550
  ) => {
10236
10551
  this.ddmModel?.resample();
10237
10552
  this.requestUpdate();
@@ -10239,6 +10554,9 @@ class DDMExampleInteractive extends DDMExample {
10239
10554
  this.accumulableControl.addEventListener('accumulable-control-trials', event => {
10240
10555
  this.trials = event.detail.trials;
10241
10556
  });
10557
+ this.accumulableControl.addEventListener('accumulable-control-color', event => {
10558
+ this.color = event.detail.color;
10559
+ });
10242
10560
  }
10243
10561
  if (this.ddmParameters) {
10244
10562
  this.ddmParameters.addEventListener('ddm-parameters-a', event => {
@@ -10278,7 +10596,11 @@ class DDMExampleInteractive extends DDMExample {
10278
10596
  update(changedProperties) {
10279
10597
  super.update(changedProperties);
10280
10598
  if (this.accumulableControl) {
10281
- this.accumulableControl.trials = this.trials;
10599
+ this.accumulableControl.trials = this.accumulableControl.trials != null ? this.trials : undefined;
10600
+ this.accumulableControl.color = this.accumulableControl.color != null ? this.color : undefined;
10601
+ }
10602
+ if (this.accumulableTable) {
10603
+ this.accumulableTable.color = this.color;
10282
10604
  }
10283
10605
  if (this.accumulableTable && this.data) {
10284
10606
  this.accumulableTable.correctCount = this.data.correctCount;
@@ -10293,10 +10615,10 @@ class DDMExampleInteractive extends DDMExample {
10293
10615
  this.accumulableTable.sdRT = this.data.sdRT;
10294
10616
  }
10295
10617
  if (this.ddmParameters) {
10296
- this.ddmParameters.a = this.a;
10297
- this.ddmParameters.z = this.z;
10298
- this.ddmParameters.v = this.v;
10299
- this.ddmParameters.t0 = this.t0;
10618
+ this.ddmParameters.a = this.ddmParameters.a != null ? this.a : undefined;
10619
+ this.ddmParameters.z = this.ddmParameters.z != null ? this.z : undefined;
10620
+ this.ddmParameters.v = this.ddmParameters.a != null ? this.v : undefined;
10621
+ this.ddmParameters.t0 = this.ddmParameters.t0 != null ? this.t0 : undefined;
10300
10622
  }
10301
10623
  if (this.ddmModel) {
10302
10624
  this.ddmModel.trials = this.trials;
@@ -10309,9 +10631,6 @@ class DDMExampleInteractive extends DDMExample {
10309
10631
  }
10310
10632
  customElements.define('ddm-example-interactive', DDMExampleInteractive);
10311
10633
 
10312
- // import DDMMath from '@decidables/accumulable-math';
10313
-
10314
-
10315
10634
  /*
10316
10635
  DDMExampleModel element
10317
10636
  <ddm-example-model>
@@ -10368,10 +10687,10 @@ class DDMExampleModel extends DDMExample {
10368
10687
  this.coherence = 0.5;
10369
10688
  this.colors = ['none', 'measure', 'outcome', 'all'];
10370
10689
  this.color = 'outcome';
10371
- this.a = 1.2;
10372
- this.z = 0.35;
10373
- this.v = 1.5;
10374
- this.t0 = 150;
10690
+ this.a = DDMMath.a.DEFAULT;
10691
+ this.z = DDMMath.z.DEFAULT;
10692
+ this.v = DDMMath.v.DEFAULT;
10693
+ this.t0 = DDMMath.t0.DEFAULT;
10375
10694
  this.accumulableControl = null;
10376
10695
  this.rdkTask = null;
10377
10696
  this.ddmParameters = null;
@@ -10393,60 +10712,48 @@ class DDMExampleModel extends DDMExample {
10393
10712
  this.accumulableResponse = this.querySelector('accumulable-response');
10394
10713
  this.accumulableTable = this.querySelector('accumulable-table');
10395
10714
  if (this.accumulableControl) {
10396
- if (this.accumulableControl.hasAttribute('trials')) {
10397
- this.accumulableControl.addEventListener('accumulable-control-trials', event => {
10398
- this.trials = event.detail.trials;
10399
- });
10400
- }
10401
- if (this.accumulableControl.hasAttribute('duration')) {
10402
- this.accumulableControl.addEventListener('accumulable-control-duration', event => {
10403
- this.duration = event.detail.duration;
10404
- });
10405
- }
10406
- if (this.accumulableControl.hasAttribute('color')) {
10407
- this.accumulableControl.addEventListener('accumulable-control-color', event => {
10408
- this.color = event.detail.color;
10409
- });
10410
- }
10411
- if (this.accumulableControl.hasAttribute('run')) {
10412
- this.accumulableControl.addEventListener('accumulable-control-run', ( /* event */
10413
- ) => {
10414
- if (this.rdkTask) {
10415
- this.rdkTask.running = true;
10416
- }
10417
- if (this.ddmModel) {
10418
- this.ddmModel.resumeTrial();
10419
- }
10420
- });
10421
- }
10422
- if (this.accumulableControl.hasAttribute('pause')) {
10423
- this.accumulableControl.addEventListener('accumulable-control-pause', ( /* event */
10424
- ) => {
10425
- if (this.rdkTask) {
10426
- this.rdkTask.running = false;
10427
- }
10428
- if (this.ddmModel) {
10429
- this.ddmModel.pauseTrial();
10430
- }
10431
- });
10432
- }
10433
- if (this.accumulableControl.hasAttribute('reset')) {
10434
- this.accumulableControl.addEventListener('accumulable-control-reset', ( /* event */
10435
- ) => {
10436
- this.trialCount = 0;
10437
- this.signal = undefined;
10438
- if (this.rdkTask) {
10439
- this.rdkTask.reset();
10440
- }
10441
- if (this.ddmModel) {
10442
- this.ddmModel.trials = this.trialCount;
10443
- }
10444
- if (this.accumulableResponse) {
10445
- this.accumulableResponse.reset();
10446
- }
10447
- if (this.accumulableTable) ;
10448
- });
10449
- }
10715
+ this.accumulableControl.addEventListener('accumulable-control-trials', event => {
10716
+ this.trials = event.detail.trials;
10717
+ });
10718
+ this.accumulableControl.addEventListener('accumulable-control-duration', event => {
10719
+ this.duration = event.detail.duration;
10720
+ });
10721
+ this.accumulableControl.addEventListener('accumulable-control-color', event => {
10722
+ this.color = event.detail.color;
10723
+ });
10724
+ this.accumulableControl.addEventListener('accumulable-control-run', (/* event */
10725
+ ) => {
10726
+ if (this.rdkTask) {
10727
+ this.rdkTask.running = true;
10728
+ }
10729
+ if (this.ddmModel) {
10730
+ this.ddmModel.resumeTrial();
10731
+ }
10732
+ });
10733
+ this.accumulableControl.addEventListener('accumulable-control-pause', (/* event */
10734
+ ) => {
10735
+ if (this.rdkTask) {
10736
+ this.rdkTask.running = false;
10737
+ }
10738
+ if (this.ddmModel) {
10739
+ this.ddmModel.pauseTrial();
10740
+ }
10741
+ });
10742
+ this.accumulableControl.addEventListener('accumulable-control-reset', (/* event */
10743
+ ) => {
10744
+ this.trialCount = 0;
10745
+ this.signal = undefined;
10746
+ if (this.rdkTask) {
10747
+ this.rdkTask.reset();
10748
+ }
10749
+ if (this.ddmModel) {
10750
+ this.ddmModel.trials = this.trialCount;
10751
+ }
10752
+ if (this.accumulableResponse) {
10753
+ this.accumulableResponse.reset();
10754
+ }
10755
+ if (this.accumulableTable) ;
10756
+ });
10450
10757
  }
10451
10758
  if (this.rdkTask) {
10452
10759
  this.rdkTask.addEventListener('rdk-trial-start', event => {
@@ -10459,14 +10766,14 @@ class DDMExampleModel extends DDMExample {
10459
10766
  this.ddmModel.trial();
10460
10767
  }
10461
10768
  });
10462
- this.rdkTask.addEventListener('rdk-trial-end', ( /* event */
10769
+ this.rdkTask.addEventListener('rdk-trial-end', (/* event */
10463
10770
  ) => {
10464
10771
  this.signal = undefined;
10465
10772
  if (this.accumulableResponse) {
10466
10773
  this.accumulableResponse.stop();
10467
10774
  }
10468
10775
  });
10469
- this.rdkTask.addEventListener('rdk-block-end', ( /* event */
10776
+ this.rdkTask.addEventListener('rdk-block-end', (/* event */
10470
10777
  ) => {
10471
10778
  if (this.accumulableControl) {
10472
10779
  this.accumulableControl.complete();
@@ -10505,17 +10812,15 @@ class DDMExampleModel extends DDMExample {
10505
10812
  this.model = event.detail.model;
10506
10813
  this.requestUpdate();
10507
10814
  });
10508
- if (this.ddmModel) {
10509
- this.ddmModel.addEventListener('accumulable-response', event => {
10510
- if (this.accumulableResponse) {
10511
- const response = event.detail.outcome === 'correct' ? this.signal : this.signal === 'left' ? 'right' : 'left';
10512
- this.accumulableResponse.responded(response);
10513
- }
10514
- this.data = event.detail.data;
10515
- this.model = event.detail.model;
10516
- this.requestUpdate();
10517
- });
10518
- }
10815
+ this.ddmModel.addEventListener('accumulable-response', event => {
10816
+ if (this.accumulableResponse) {
10817
+ const response = event.detail.outcome === 'correct' ? this.signal : this.signal === 'left' ? 'right' : 'left';
10818
+ this.accumulableResponse.responded(response);
10819
+ }
10820
+ this.data = event.detail.data;
10821
+ this.model = event.detail.model;
10822
+ this.requestUpdate();
10823
+ });
10519
10824
  }
10520
10825
  this.requestUpdate();
10521
10826
  }
@@ -10525,10 +10830,10 @@ class DDMExampleModel extends DDMExample {
10525
10830
  this.trialCount = this.trials;
10526
10831
  }
10527
10832
  if (this.accumulableControl) {
10528
- this.accumulableControl.trials = this.trials;
10529
- this.accumulableControl.duration = this.duration;
10530
- this.accumulableControl.coherence = this.coherence;
10531
- this.accumulableControl.color = this.color;
10833
+ this.accumulableControl.trials = this.accumulableControl.trials != null ? this.trials : undefined;
10834
+ this.accumulableControl.duration = this.accumulableControl.duration != null ? this.duration : undefined;
10835
+ this.accumulableControl.coherence = this.accumulableControl.coherence != null ? this.coherence : undefined;
10836
+ this.accumulableControl.color = this.accumulableControl.color != null ? this.color : undefined;
10532
10837
  }
10533
10838
  if (this.rdkTask) {
10534
10839
  this.rdkTask.trials = this.trials;
@@ -10536,10 +10841,10 @@ class DDMExampleModel extends DDMExample {
10536
10841
  this.rdkTask.coherence = this.coherence;
10537
10842
  }
10538
10843
  if (this.ddmParameters) {
10539
- this.ddmParameters.a = this.a;
10540
- this.ddmParameters.z = this.z;
10541
- this.ddmParameters.v = this.v;
10542
- this.ddmParameters.t0 = this.t0;
10844
+ this.ddmParameters.a = this.ddmParameters.a != null ? this.a : undefined;
10845
+ this.ddmParameters.z = this.ddmParameters.z != null ? this.z : undefined;
10846
+ this.ddmParameters.v = this.ddmParameters.a != null ? this.v : undefined;
10847
+ this.ddmParameters.t0 = this.ddmParameters.t0 != null ? this.t0 : undefined;
10543
10848
  }
10544
10849
  if (this.ddmModel) {
10545
10850
  this.ddmModel.trials = this.trialCount;