@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.
- package/CHANGELOG.md +28 -0
- package/README.md +72 -33
- package/lib/accumulableElements.esm.js +747 -442
- package/lib/accumulableElements.esm.js.map +1 -1
- package/lib/accumulableElements.esm.min.js +298 -121
- package/lib/accumulableElements.esm.min.js.map +1 -1
- package/lib/accumulableElements.umd.js +747 -442
- package/lib/accumulableElements.umd.js.map +1 -1
- package/lib/accumulableElements.umd.min.js +298 -121
- package/lib/accumulableElements.umd.min.js.map +1 -1
- package/package.json +6 -6
- package/src/components/accumulable-control.js +4 -4
- package/src/components/accumulable-response.js +6 -24
- package/src/components/ddm-fit-worker.js +2 -2
- package/src/components/ddm-fit.js +6 -4
- package/src/components/ddm-model.js +130 -62
- package/src/components/ddm-parameters.js +61 -4
- package/src/equations/azv2pc.js +35 -8
- package/src/equations/azvt02m.js +44 -10
- package/src/examples/human.js +156 -71
- package/src/examples/interactive.js +39 -9
- package/src/examples/model.js +95 -93
|
@@ -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 && (
|
|
8
|
-
s$
|
|
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$ =
|
|
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 &&
|
|
19
|
-
const e =
|
|
20
|
-
e && (t = o$3.get(s)),
|
|
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 + "",
|
|
29
|
-
i$
|
|
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 (
|
|
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$
|
|
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
|
-
|
|
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$
|
|
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$
|
|
100
|
+
f$1 = (t, s) => !i$2(t, s),
|
|
101
101
|
y$2 = {
|
|
102
|
-
attribute:
|
|
102
|
+
attribute: true,
|
|
103
103
|
type: String,
|
|
104
104
|
converter: u$1,
|
|
105
|
-
reflect:
|
|
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 =
|
|
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
|
-
|
|
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:
|
|
144
|
-
enumerable:
|
|
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(),
|
|
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 =
|
|
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 (
|
|
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
|
-
|
|
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
|
|
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
|
|
184
|
+
return false === i ? undefined : "string" == typeof i ? i : "string" == typeof t ? t.toLowerCase() : undefined;
|
|
185
185
|
}
|
|
186
186
|
constructor() {
|
|
187
|
-
super(), this._$Ep =
|
|
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),
|
|
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(
|
|
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 (
|
|
222
|
-
const r = (
|
|
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 (
|
|
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
|
-
} :
|
|
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 (
|
|
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
|
-
|
|
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),
|
|
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 =
|
|
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 =
|
|
265
|
+
this._$Ep = undefined;
|
|
266
266
|
}
|
|
267
267
|
const t = this.constructor.elementProperties;
|
|
268
|
-
if (t.size > 0) for (const [s, i] of t)
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
|
313
|
+
i$1 = t.trustedTypes,
|
|
314
|
+
s = i$1 ? i$1.createPolicy("lit-html", {
|
|
315
315
|
createHTML: t => t
|
|
316
|
-
}) :
|
|
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
|
-
|
|
342
|
-
|
|
341
|
+
T = Symbol.for("lit-noChange"),
|
|
342
|
+
E = Symbol.for("lit-nothing"),
|
|
343
343
|
A = new WeakMap(),
|
|
344
|
-
|
|
345
|
-
function
|
|
346
|
-
if (!
|
|
347
|
-
return
|
|
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
|
|
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 :
|
|
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 [
|
|
365
|
+
return [P(t, l + (t[s] || "<?>") + (2 === i ? "</svg>" : 3 === i ? "</math>" : "")), o];
|
|
366
366
|
};
|
|
367
|
-
class
|
|
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] =
|
|
379
|
-
if (this.el =
|
|
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 =
|
|
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] ?
|
|
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()),
|
|
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
|
|
431
|
-
if (i ===
|
|
432
|
-
let h =
|
|
433
|
-
const o = c(i) ?
|
|
434
|
-
return h?.constructor !== o && (h?._$AO?.(
|
|
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
|
|
436
|
+
class M {
|
|
437
437
|
constructor(t, i) {
|
|
438
|
-
this._$AV = [], this._$AN =
|
|
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,
|
|
454
|
-
|
|
455
|
-
let h =
|
|
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 (;
|
|
459
|
+
for (; undefined !== l;) {
|
|
460
460
|
if (o === l.index) {
|
|
461
461
|
let i;
|
|
462
|
-
2 === l.type ? i = new
|
|
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 =
|
|
464
|
+
o !== l?.index && (h = C.nextNode(), o++);
|
|
465
465
|
}
|
|
466
|
-
return
|
|
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)
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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.
|
|
498
|
+
this._$AH !== t && (this._$AR(), this._$AH = this.O(t));
|
|
499
499
|
}
|
|
500
500
|
_(t) {
|
|
501
|
-
this._$AH !==
|
|
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) : (
|
|
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
|
|
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
|
|
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
|
|
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?.(
|
|
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
|
-
|
|
534
|
+
undefined === this._$AM && (this._$Cv = t, this._$AP?.(t));
|
|
535
535
|
}
|
|
536
536
|
}
|
|
537
|
-
class
|
|
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 =
|
|
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 =
|
|
550
|
-
if (
|
|
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 =
|
|
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 ===
|
|
558
|
+
t === E ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t ?? "");
|
|
559
559
|
}
|
|
560
560
|
}
|
|
561
|
-
class
|
|
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 ===
|
|
566
|
+
this.element[this.name] = t === E ? undefined : t;
|
|
567
567
|
}
|
|
568
568
|
}
|
|
569
|
-
class
|
|
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 !==
|
|
574
|
+
this.element.toggleAttribute(this.name, !!t && t !== E);
|
|
575
575
|
}
|
|
576
576
|
}
|
|
577
|
-
class
|
|
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 =
|
|
582
|
+
if ((t = S(this, t, i, 0) ?? E) === T) return;
|
|
583
583
|
const s = this._$AH,
|
|
584
|
-
e = t ===
|
|
585
|
-
h = t !==
|
|
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
|
|
592
|
+
class z {
|
|
593
593
|
constructor(t, i, s) {
|
|
594
|
-
this.element = t, this.type = 6, this._$AN =
|
|
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
|
-
|
|
600
|
+
S(this, t);
|
|
601
601
|
}
|
|
602
602
|
}
|
|
603
|
-
const
|
|
604
|
-
|
|
605
|
-
const
|
|
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 (
|
|
608
|
+
if (undefined === h) {
|
|
609
609
|
const t = s?.renderBefore ?? null;
|
|
610
|
-
e._$litPart$ = h = new
|
|
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
|
|
620
|
+
class r extends b$1 {
|
|
621
621
|
constructor() {
|
|
622
622
|
super(...arguments), this.renderOptions = {
|
|
623
623
|
host: this
|
|
624
|
-
}, this._$Do =
|
|
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
|
|
632
|
-
this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t), this._$Do =
|
|
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(
|
|
635
|
+
super.connectedCallback(), this._$Do?.setConnected(true);
|
|
636
636
|
}
|
|
637
637
|
disconnectedCallback() {
|
|
638
|
-
super.disconnectedCallback(), this._$Do?.setConnected(
|
|
638
|
+
super.disconnectedCallback(), this._$Do?.setConnected(false);
|
|
639
639
|
}
|
|
640
640
|
render() {
|
|
641
|
-
return
|
|
641
|
+
return T;
|
|
642
642
|
}
|
|
643
643
|
}
|
|
644
|
-
|
|
645
|
-
LitElement:
|
|
644
|
+
r._$litElement$ = true, r["finalized"] = true, globalThis.litElementHydrateSupport?.({
|
|
645
|
+
LitElement: r
|
|
646
646
|
});
|
|
647
|
-
const
|
|
648
|
-
|
|
649
|
-
LitElement:
|
|
647
|
+
const i = globalThis.litElementPolyfillSupport;
|
|
648
|
+
i?.({
|
|
649
|
+
LitElement: r
|
|
650
650
|
});
|
|
651
|
-
(globalThis.litElementVersions ??= []).push("4.
|
|
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 =
|
|
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 =
|
|
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
|
|
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$
|
|
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$
|
|
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(
|
|
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(
|
|
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 ??
|
|
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
|
-
|
|
5013
|
-
|
|
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
|
-
|
|
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$
|
|
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
|
-
|
|
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(---
|
|
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(---
|
|
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(---
|
|
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(---
|
|
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(---
|
|
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(---
|
|
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(---
|
|
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(---
|
|
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(---
|
|
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(---
|
|
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(---
|
|
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(---
|
|
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(---
|
|
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.
|
|
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.
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
|
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 =
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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$
|
|
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$
|
|
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 =
|
|
7248
|
-
this.z =
|
|
7249
|
-
this.v =
|
|
7250
|
-
this.t0 =
|
|
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$
|
|
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$
|
|
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"
|
|
7443
|
-
|
|
7444
|
-
|
|
7445
|
-
|
|
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 =
|
|
7584
|
-
this.z =
|
|
7585
|
-
this.v =
|
|
7586
|
-
this.t0 =
|
|
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$
|
|
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 <
|
|
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 <
|
|
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 <
|
|
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',
|
|
8334
|
+
}).on('drag', event => {
|
|
8172
8335
|
this.drag = true;
|
|
8173
|
-
|
|
8174
|
-
|
|
8175
|
-
|
|
8176
|
-
|
|
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
|
|
8785
|
+
let {
|
|
8786
|
+
a
|
|
8787
|
+
} = this;
|
|
8621
8788
|
switch (event.key) {
|
|
8622
8789
|
case 'ArrowUp':
|
|
8623
|
-
a += datum.bound === 'upper' ? event.shiftKey ?
|
|
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 ?
|
|
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
|
|
8630
|
-
a = 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
|
|
8845
|
+
let {
|
|
8846
|
+
v
|
|
8847
|
+
} = this;
|
|
8672
8848
|
switch (event.key) {
|
|
8673
8849
|
case 'ArrowUp':
|
|
8674
|
-
v += event.shiftKey ?
|
|
8850
|
+
v += event.shiftKey ? DDMMath.v.STEP : DDMMath.v.JUMP;
|
|
8675
8851
|
break;
|
|
8676
8852
|
case 'ArrowDown':
|
|
8677
|
-
v -= event.shiftKey ?
|
|
8853
|
+
v -= event.shiftKey ? DDMMath.v.STEP : DDMMath.v.JUMP;
|
|
8678
8854
|
break;
|
|
8679
8855
|
}
|
|
8680
8856
|
// Clamp z
|
|
8681
|
-
v = 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('
|
|
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
|
|
8910
|
+
let {
|
|
8911
|
+
z
|
|
8912
|
+
} = this;
|
|
8728
8913
|
switch (event.key) {
|
|
8729
8914
|
case 'ArrowUp':
|
|
8730
|
-
z += event.shiftKey ?
|
|
8915
|
+
z += event.shiftKey ? DDMMath.z.STEP : DDMMath.z.JUMP;
|
|
8731
8916
|
break;
|
|
8732
8917
|
case 'ArrowDown':
|
|
8733
|
-
z -= event.shiftKey ?
|
|
8918
|
+
z -= event.shiftKey ? DDMMath.z.STEP : DDMMath.z.JUMP;
|
|
8734
8919
|
break;
|
|
8735
8920
|
}
|
|
8736
8921
|
// Clamp z
|
|
8737
|
-
z = 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 ?
|
|
8937
|
+
t0 += event.shiftKey ? DDMMath.t0.STEP : DDMMath.t0.JUMP;
|
|
8753
8938
|
break;
|
|
8754
8939
|
case 'ArrowLeft':
|
|
8755
|
-
t0 -= event.shiftKey ?
|
|
8940
|
+
t0 -= event.shiftKey ? DDMMath.t0.STEP : DDMMath.t0.JUMP;
|
|
8756
8941
|
break;
|
|
8757
8942
|
}
|
|
8758
8943
|
// Clamp t0
|
|
8759
|
-
t0 = 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$
|
|
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(
|
|
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$
|
|
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 =
|
|
9668
|
-
this.z =
|
|
9669
|
-
this.v =
|
|
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"
|
|
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"
|
|
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"
|
|
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"
|
|
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"
|
|
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 =
|
|
9802
|
-
this.z =
|
|
9803
|
-
this.v =
|
|
9804
|
-
this.t0 =
|
|
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"
|
|
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"
|
|
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"
|
|
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"
|
|
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"
|
|
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"
|
|
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$
|
|
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.
|
|
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
|
|
10325
|
+
if (this.accumulableControl) {
|
|
10016
10326
|
this.accumulableControl.addEventListener('accumulable-control-trials', event => {
|
|
10017
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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', (
|
|
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', (
|
|
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
|
-
|
|
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
|
-
|
|
10162
|
-
|
|
10163
|
-
|
|
10164
|
-
|
|
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.
|
|
10217
|
-
this.
|
|
10218
|
-
this.
|
|
10219
|
-
this.
|
|
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', (
|
|
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 =
|
|
10372
|
-
this.z =
|
|
10373
|
-
this.v =
|
|
10374
|
-
this.t0 =
|
|
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
|
-
|
|
10397
|
-
this.
|
|
10398
|
-
|
|
10399
|
-
|
|
10400
|
-
|
|
10401
|
-
|
|
10402
|
-
|
|
10403
|
-
|
|
10404
|
-
|
|
10405
|
-
|
|
10406
|
-
|
|
10407
|
-
this.
|
|
10408
|
-
this.
|
|
10409
|
-
}
|
|
10410
|
-
|
|
10411
|
-
|
|
10412
|
-
|
|
10413
|
-
|
|
10414
|
-
|
|
10415
|
-
|
|
10416
|
-
|
|
10417
|
-
|
|
10418
|
-
|
|
10419
|
-
|
|
10420
|
-
|
|
10421
|
-
|
|
10422
|
-
|
|
10423
|
-
|
|
10424
|
-
|
|
10425
|
-
|
|
10426
|
-
|
|
10427
|
-
|
|
10428
|
-
|
|
10429
|
-
|
|
10430
|
-
|
|
10431
|
-
|
|
10432
|
-
|
|
10433
|
-
|
|
10434
|
-
|
|
10435
|
-
|
|
10436
|
-
|
|
10437
|
-
|
|
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', (
|
|
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', (
|
|
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
|
-
|
|
10509
|
-
this.
|
|
10510
|
-
|
|
10511
|
-
|
|
10512
|
-
|
|
10513
|
-
|
|
10514
|
-
|
|
10515
|
-
|
|
10516
|
-
|
|
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;
|