mesh-avatar 0.3.0 → 0.3.1

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/dist/index.js CHANGED
@@ -21,25 +21,25 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
21
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
22
  SOFTWARE.
23
23
  */
24
- const te = (n, e, t) => {
24
+ const ee = (n, e, t) => {
25
25
  (typeof n != "number" || !Number.isFinite(n)) && t.push(`${e}: expected a finite number`);
26
- }, Re = (n, e, t) => {
27
- te(n, e, t), typeof n == "number" && n <= 0 && t.push(`${e}: must be positive`);
28
- }, xe = (n, e, t) => {
29
- Re(n, e, t), typeof n == "number" && !Number.isInteger(n) && t.push(`${e}: expected an integer`);
30
- }, Fe = (n, e, t) => {
31
- te(n, e, t), typeof n == "number" && !Number.isInteger(n) && t.push(`${e}: expected an integer`);
32
- }, Ft = (n, e, t) => {
26
+ }, _e = (n, e, t) => {
27
+ ee(n, e, t), typeof n == "number" && n <= 0 && t.push(`${e}: must be positive`);
28
+ }, Ae = (n, e, t) => {
29
+ _e(n, e, t), typeof n == "number" && !Number.isInteger(n) && t.push(`${e}: expected an integer`);
30
+ }, Ue = (n, e, t) => {
31
+ ee(n, e, t), typeof n == "number" && !Number.isInteger(n) && t.push(`${e}: expected an integer`);
32
+ }, Bt = (n, e, t) => {
33
33
  (typeof n != "string" || !n.trim()) && t.push(`${e}: expected a non-empty string`);
34
- }, de = (n, e = 0, t = 1 / 0) => (r, a, o) => {
34
+ }, ge = (n, e = 0, t = 1 / 0) => (r, a, o) => {
35
35
  if (!Array.isArray(r)) {
36
36
  o.push(`${a}: expected an array`);
37
37
  return;
38
38
  }
39
39
  (r.length < e || r.length > t) && o.push(`${a}: expected ${e}..${t} items`), r.forEach((i, f) => n(i, `${a}[${f}]`, o));
40
- }, ge = de(te, 2, 2), he = (n, e, t) => {
41
- ge(n, e, t), Array.isArray(n) && n.length === 2 && n[0] >= n[1] && t.push(`${e}: start must be less than end`);
42
- }, se = (n, e = []) => (t, r, a) => {
40
+ }, ye = ge(ee, 2, 2), he = (n, e, t) => {
41
+ ye(n, e, t), Array.isArray(n) && n.length === 2 && n[0] >= n[1] && t.push(`${e}: start must be less than end`);
42
+ }, oe = (n, e = []) => (t, r, a) => {
43
43
  if (!t || typeof t != "object" || Array.isArray(t)) {
44
44
  a.push(`${r}: expected an object`);
45
45
  return;
@@ -47,79 +47,79 @@ const te = (n, e, t) => {
47
47
  const o = t;
48
48
  for (const [i, f] of Object.entries(n))
49
49
  o[i] === void 0 && e.includes(i) || f(o[i], `${r}.${i}`, a);
50
- }, je = { cx: te, cy: te, rx: Re, ry: Re }, ye = se(je), He = de(ge, 3), Bt = de(ge, 2), Qe = (n, e, t) => {
51
- te(n, e, t), typeof n == "number" && (n < 0 || n > 1) && t.push(`${e}: must be between 0 and 1`);
52
- }, vn = (n) => se({
50
+ }, $e = { cx: ee, cy: ee, rx: _e, ry: _e }, ve = oe($e), Ze = ge(ye, 3), Ut = ge(ye, 2), et = (n, e, t) => {
51
+ ee(n, e, t), typeof n == "number" && (n < 0 || n > 1) && t.push(`${e}: must be between 0 and 1`);
52
+ }, vn = (n) => oe({
53
53
  version: (e, t, r) => {
54
54
  e !== 1 && r.push(`${t}: only version 1 is supported`);
55
55
  },
56
- image: se({ width: xe, height: xe }),
57
- head: se({
58
- ...je,
59
- shiftX: te,
60
- shiftY: te,
61
- pivotX: te,
62
- pivotY: te,
63
- maxRoll: te,
56
+ image: oe({ width: Ae, height: Ae }),
57
+ head: oe({
58
+ ...$e,
59
+ shiftX: ee,
60
+ shiftY: ee,
61
+ pivotX: ee,
62
+ pivotY: ee,
63
+ maxRoll: ee,
64
64
  weightBand: he,
65
65
  turnBand: he
66
66
  }),
67
- body: se({
68
- pivotX: te,
69
- pivotY: te,
70
- maxRoll: te,
67
+ body: oe({
68
+ pivotX: ee,
69
+ pivotY: ee,
70
+ maxRoll: ee,
71
71
  breathBand: he,
72
72
  rollBand: he,
73
- chest: ye,
74
- shoulders: de(ye)
73
+ chest: ve,
74
+ shoulders: ge(ve)
75
75
  }),
76
- face: se({
77
- nose: ye,
78
- mouth: ye,
79
- eyeA: ye,
80
- eyeB: ye,
81
- earL: ye,
82
- earR: ye,
83
- brow: se({ ...je, band: he }),
84
- jaw: se({ ...je, band: he })
76
+ face: oe({
77
+ nose: ve,
78
+ mouth: ve,
79
+ eyeA: ve,
80
+ eyeB: ve,
81
+ earL: ve,
82
+ earR: ve,
83
+ brow: oe({ ...$e, band: he }),
84
+ jaw: oe({ ...$e, band: he })
85
85
  }),
86
- buns: se({ bunL: ye, bunR: ye }, ["bunL", "bunR"]),
87
- eyes: de(se({
88
- opening: He,
89
- roi: He,
90
- x0: te,
91
- x1: te,
92
- top: de(te, 24, 24),
93
- bot: de(te, 24, 24)
86
+ buns: oe({ bunL: ve, bunR: ve }, ["bunL", "bunR"]),
87
+ eyes: ge(oe({
88
+ opening: Ze,
89
+ roi: Ze,
90
+ x0: ee,
91
+ x1: ee,
92
+ top: ge(ee, 24, 24),
93
+ bot: ge(ee, 24, 24)
94
94
  }, n ? ["x0", "x1", "top", "bot"] : []), 2, 2),
95
- mouth: se({
96
- cx: te,
97
- cy: te,
98
- angle: te,
99
- halfLen: Re,
100
- bow: te,
101
- area: se({ ...je, angle: te })
95
+ mouth: oe({
96
+ cx: ee,
97
+ cy: ee,
98
+ angle: ee,
99
+ halfLen: _e,
100
+ bow: ee,
101
+ area: oe({ ...$e, angle: ee })
102
102
  }),
103
- cheeks: de(ge, 2, 2),
104
- strands: de(se({ name: Ft, nodes: Bt, sigma: Re, k: Re, max: Re })),
105
- accessories: de(se({
106
- name: Ft,
107
- pivot: ge,
108
- tip: ge,
109
- split: Qe,
110
- box: de(Fe, 4, 4),
111
- color: se({ redness: Qe, minRed: te })
103
+ cheeks: ge(ye, 2, 2),
104
+ strands: ge(oe({ name: Bt, nodes: Ut, sigma: _e, k: _e, max: _e })),
105
+ accessories: ge(oe({
106
+ name: Bt,
107
+ pivot: ye,
108
+ tip: ye,
109
+ split: et,
110
+ box: ge(Ue, 4, 4),
111
+ color: oe({ redness: et, minRed: ee })
112
112
  })),
113
- hand: se({
114
- outline: He,
115
- jaw: Bt,
113
+ hand: oe({
114
+ outline: Ze,
115
+ jaw: Ut,
116
116
  jawRange: he,
117
- background: He,
118
- elbow: ge,
119
- wrist: ge,
120
- knuckle: ge,
121
- contact: ge,
122
- forearmShare: Qe,
117
+ background: Ze,
118
+ elbow: ye,
119
+ wrist: ye,
120
+ knuckle: ye,
121
+ contact: ye,
122
+ forearmShare: et,
123
123
  armBand: he,
124
124
  wristBand: he,
125
125
  handBand: he,
@@ -127,24 +127,24 @@ const te = (n, e, t) => {
127
127
  fingerYBand: he,
128
128
  pinBand: he
129
129
  }),
130
- mesh: se({
131
- baseCell: xe,
132
- fine: se({
133
- x0: Fe,
134
- x1: Fe,
135
- y0: Fe,
136
- y1: Fe,
137
- cell: xe
130
+ mesh: oe({
131
+ baseCell: Ae,
132
+ fine: oe({
133
+ x0: Ue,
134
+ x1: Ue,
135
+ y0: Ue,
136
+ y1: Ue,
137
+ cell: Ae
138
138
  }),
139
- handCell: xe,
140
- tasselCell: xe,
141
- eyeBallCell: xe,
142
- eyeCell: xe,
143
- spriteCell: xe
139
+ handCell: Ae,
140
+ tasselCell: Ae,
141
+ eyeBallCell: Ae,
142
+ eyeCell: Ae,
143
+ spriteCell: Ae
144
144
  }),
145
- view: se({ padTop: te, padSide: te, gazeCenter: ge }, ["gazeCenter"])
145
+ view: oe({ padTop: ee, padSide: ee, gazeCenter: ye }, ["gazeCenter"])
146
146
  }, ["buns", "strands", "accessories", "hand"]);
147
- function Kt(n, e = {}) {
147
+ function Qt(n, e = {}) {
148
148
  const t = [];
149
149
  if (vn(e.draft ?? !1)(n, "rig", t), t.length) return t;
150
150
  const r = n;
@@ -164,14 +164,14 @@ function Kt(n, e = {}) {
164
164
  (o.box[0] < 0 || o.box[1] < 0 || o.box[2] > r.image.width || o.box[3] > r.image.height) && t.push(`rig.accessories[${a}].box: rectangle must stay inside the image`), (o.split <= 0 || o.split >= 1) && t.push(`rig.accessories[${a}].split: must be strictly between 0 and 1`), o.pivot.every((i, f) => i === o.tip[f]) && t.push(`rig.accessories[${a}].tip: must differ from pivot`), (o.box[0] >= o.box[2] || o.box[1] >= o.box[3]) && t.push(`rig.accessories[${a}].box: rectangle must have positive area`);
165
165
  return t;
166
166
  }
167
- function xt(n) {
168
- const e = Kt(n);
167
+ function wt(n) {
168
+ const e = Qt(n);
169
169
  if (e.length) throw new Error(`Invalid rig:
170
170
  ${e.join(`
171
171
  `)}`);
172
172
  return structuredClone(n);
173
173
  }
174
- const Ze = [
174
+ const We = [
175
175
  { id: "angleX", label: "Face angle X", min: -30, max: 30, def: 0, group: "Head and body" },
176
176
  { id: "angleY", label: "Face angle Y", min: -30, max: 30, def: 0, group: "Head and body" },
177
177
  { id: "angleZ", label: "Face roll", min: -30, max: 30, def: 0, group: "Head and body" },
@@ -193,162 +193,162 @@ const Ze = [
193
193
  { id: "fingerTap", label: "Finger tap", min: 0, max: 1, def: 0, group: "Hand" }
194
194
  ];
195
195
  function bn(n) {
196
- const e = { w: n.image.width, h: n.image.height }, t = (v, A, E) => E ? Math.exp(-(((v - E.cx) / E.rx) ** 2 + ((A - E.cy) / E.ry) ** 2)) : 0, r = 24, a = n.eyes;
197
- function o(v, A) {
198
- const E = Math.min(1, Math.max(0, A)) * (r - 1), k = Math.min(Math.floor(E), r - 2), N = E - k;
199
- return v[k] + (v[k + 1] - v[k]) * N;
196
+ const e = { w: n.image.width, h: n.image.height }, t = (b, M, S) => S ? Math.exp(-(((b - S.cx) / S.rx) ** 2 + ((M - S.cy) / S.ry) ** 2)) : 0, r = 24, a = n.eyes;
197
+ function o(b, M) {
198
+ const S = Math.min(1, Math.max(0, M)) * (r - 1), L = Math.min(Math.floor(S), r - 2), U = S - L;
199
+ return b[L] + (b[L + 1] - b[L]) * U;
200
200
  }
201
- function i(v, A, E, k) {
202
- A = Math.min(1, Math.max(0, A));
203
- const N = o(v.top, A), z = o(v.bot, A), F = 1 - E, X = 4 * A * (1 - A), M = o(v.bot, 0.5) - o(v.top, 0.5), L = v.top[0] + (v.top[r - 1] - v.top[0]) * A - 0.3 * M * X, W = Math.max(N, z + 1 + (L - z - 1) * k);
204
- return [(W - N) * Math.max(F, -0.07), F > 0 ? (W - z) * F * k : 0];
201
+ function i(b, M, S, L) {
202
+ M = Math.min(1, Math.max(0, M));
203
+ const U = o(b.top, M), X = o(b.bot, M), k = 1 - S, P = 4 * M * (1 - M), A = o(b.bot, 0.5) - o(b.top, 0.5), R = b.top[0] + (b.top[r - 1] - b.top[0]) * M - 0.3 * A * P, C = Math.max(U, X + 1 + (R - X - 1) * L);
204
+ return [(C - U) * Math.max(k, -0.07), k > 0 ? (C - X) * k * L : 0];
205
205
  }
206
206
  const f = [[-2, 1], [-1, 2], [0, 3], [1, 2], [2, 1]], m = 5;
207
- function g(v, A, E, k) {
208
- let N = 0, z = 0;
209
- for (const [L, W] of f) {
210
- const [Q, ne] = i(v, (A + L * m - v.x0) / (v.x1 - v.x0), E, k);
211
- N += Q * W / 9, z += ne * W / 9;
212
- }
213
- const F = Math.min(1, Math.max(0, (A - v.x0) / (v.x1 - v.x0))), X = o(v.top, F), M = o(v.bot, F);
214
- return { top: X, bot: M, b: 1 - E, lid: X + N, bc: M + z };
215
- }
216
- function p(v, A, E, k, N, z) {
217
- const F = g(v, E, N, z);
218
- return A === "lash" ? F.lid - (F.top - k) * (1 - 0.3 * Math.min(1, Math.max(0, F.b))) : A === "low" ? k + (F.bc - F.bot) : A === "crease" ? k + (F.lid - F.top) * 0.22 : k;
219
- }
220
- function l(v, A, E) {
221
- const k = Math.min(1, Math.max(0, 1 - A));
222
- return v === "low" ? 1 - Math.min(1, k * E * 1.2) : v === "crease" ? 1 - 0.45 * k : 1;
223
- }
224
- const h = n.mouth, S = n.cheeks, y = n.head, u = n.body, b = (v, A, E) => {
225
- const k = Math.min(1, Math.max(0, (E - v) / (A - v)));
226
- return k * k * (3 - 2 * k);
207
+ function g(b, M, S, L) {
208
+ let U = 0, X = 0;
209
+ for (const [R, C] of f) {
210
+ const [Q, te] = i(b, (M + R * m - b.x0) / (b.x1 - b.x0), S, L);
211
+ U += Q * C / 9, X += te * C / 9;
212
+ }
213
+ const k = Math.min(1, Math.max(0, (M - b.x0) / (b.x1 - b.x0))), P = o(b.top, k), A = o(b.bot, k);
214
+ return { top: P, bot: A, b: 1 - S, lid: P + U, bc: A + X };
215
+ }
216
+ function p(b, M, S, L, U, X) {
217
+ const k = g(b, S, U, X);
218
+ return M === "lash" ? k.lid - (k.top - L) * (1 - 0.3 * Math.min(1, Math.max(0, k.b))) : M === "low" ? L + (k.bc - k.bot) : M === "crease" ? L + (k.lid - k.top) * 0.22 : L;
219
+ }
220
+ function l(b, M, S) {
221
+ const L = Math.min(1, Math.max(0, 1 - M));
222
+ return b === "low" ? 1 - Math.min(1, L * S * 1.2) : b === "crease" ? 1 - 0.45 * L : 1;
223
+ }
224
+ const h = n.mouth, E = n.cheeks, y = n.head, u = n.body, v = (b, M, S) => {
225
+ const L = Math.min(1, Math.max(0, (S - b) / (M - b)));
226
+ return L * L * (3 - 2 * L);
227
227
  };
228
- function x(v, A) {
229
- return 1 - b(...y.weightBand, A);
228
+ function x(b, M) {
229
+ return 1 - v(...y.weightBand, M);
230
230
  }
231
- function s(v, A) {
232
- return 1 - b(...y.turnBand, A);
231
+ function s(b, M) {
232
+ return 1 - v(...y.turnBand, M);
233
233
  }
234
234
  const c = n.strands ?? [];
235
- function T(v, A, E) {
236
- let k = 1 / 0, N = 0;
237
- const z = E.length - 1;
238
- for (let F = 0; F < z; F++) {
239
- const [X, M] = E[F], [L, W] = E[F + 1], Q = L - X, ne = W - M, ee = Math.min(1, Math.max(0, ((v - X) * Q + (A - M) * ne) / (Q * Q + ne * ne))), ce = Math.hypot(v - X - Q * ee, A - M - ne * ee);
240
- ce < k && (k = ce, N = (F + ee) / z);
241
- }
242
- return [k, N];
243
- }
244
- function d(v, A, E) {
245
- if (E < 0.02) return [];
246
- const k = [];
247
- let N = 0;
248
- c.forEach((F, X) => {
249
- const [M, L] = T(v, A, F.nodes), W = Math.exp(-((M / F.sigma) ** 2));
250
- W < 0.02 || (k.push([X, W, L]), N += W);
235
+ function T(b, M, S) {
236
+ let L = 1 / 0, U = 0;
237
+ const X = S.length - 1;
238
+ for (let k = 0; k < X; k++) {
239
+ const [P, A] = S[k], [R, C] = S[k + 1], Q = R - P, te = C - A, ne = Math.min(1, Math.max(0, ((b - P) * Q + (M - A) * te) / (Q * Q + te * te))), ie = Math.hypot(b - P - Q * ne, M - A - te * ne);
240
+ ie < L && (L = ie, U = (k + ne) / X);
241
+ }
242
+ return [L, U];
243
+ }
244
+ function d(b, M, S) {
245
+ if (S < 0.02) return [];
246
+ const L = [];
247
+ let U = 0;
248
+ c.forEach((k, P) => {
249
+ const [A, R] = T(b, M, k.nodes), C = Math.exp(-((A / k.sigma) ** 2));
250
+ C < 0.02 || (L.push([P, C, R]), U += C);
251
251
  });
252
- const z = Math.max(1, N);
253
- return k.map(([F, X, M]) => [F, E * X / z * b(0.04, 0.55, M), M]);
252
+ const X = Math.max(1, U);
253
+ return L.map(([k, P, A]) => [k, S * P / X * v(0.04, 0.55, A), A]);
254
254
  }
255
- function w(v, A, E = 1) {
255
+ function w(b, M, S = 1) {
256
256
  return {
257
- head: x(v, A),
258
- turn: s(v, A),
259
- strands: d(v, A, E),
260
- bunL: t(v, A, n.buns?.bunL),
261
- bunR: t(v, A, n.buns?.bunR),
262
- brow: t(v, A, n.face.brow) * (1 - b(...n.face.brow.band, A)),
257
+ head: x(b, M),
258
+ turn: s(b, M),
259
+ strands: d(b, M, S),
260
+ bunL: t(b, M, n.buns?.bunL),
261
+ bunR: t(b, M, n.buns?.bunR),
262
+ brow: t(b, M, n.face.brow) * (1 - v(...n.face.brow.band, M)),
263
263
  // chin below the mouth line drops a little when the mouth opens
264
- jaw: t(v, A, n.face.jaw) * b(...n.face.jaw.band, A),
264
+ jaw: t(b, M, n.face.jaw) * v(...n.face.jaw.band, M),
265
265
  // per-feature depth for head turns (nose sticks out most, ears sit at the back)
266
- nose: t(v, A, n.face.nose),
267
- mouth: t(v, A, n.face.mouth),
268
- eyeA: t(v, A, n.face.eyeA),
269
- eyeB: t(v, A, n.face.eyeB),
270
- earR: t(v, A, n.face.earR),
271
- earL: t(v, A, n.face.earL),
272
- chest: t(v, A, u.chest),
273
- breath: 1 - b(...u.breathBand, A),
274
- shoulder: u.shoulders.reduce((k, N) => k + t(v, A, N), 0)
266
+ nose: t(b, M, n.face.nose),
267
+ mouth: t(b, M, n.face.mouth),
268
+ eyeA: t(b, M, n.face.eyeA),
269
+ eyeB: t(b, M, n.face.eyeB),
270
+ earR: t(b, M, n.face.earR),
271
+ earL: t(b, M, n.face.earL),
272
+ chest: t(b, M, u.chest),
273
+ breath: 1 - v(...u.breathBand, M),
274
+ shoulder: u.shoulders.reduce((L, U) => L + t(b, M, U), 0)
275
275
  };
276
276
  }
277
- function B(v, A, E, k) {
278
- const N = (v - y.cx) / y.rx, z = (A - y.cy) / y.ry, F = 1 - N * N - z * z;
279
- if (F <= 0) return [0, 0];
280
- const X = b(0, 0.84, F);
281
- return [E * y.shiftX * X, -k * y.shiftY * X];
282
- }
283
- function Y(v, A, E, k) {
284
- const N = Math.cos(k), z = Math.sin(k), F = v[0] - A, X = v[1] - E;
285
- v[0] = A + F * N - X * z, v[1] = E + F * z + X * N;
286
- }
287
- function I(v, A, E, k = A) {
288
- const N = B(v[0], v[1], E.angleX / 30, E.angleY / 30);
289
- v[0] += N[0] * k, v[1] += N[1] * k, !(A <= 0) && Y(v, y.pivotX, y.pivotY, -E.angleZ / 30 * y.maxRoll * A);
290
- }
291
- function _(v, A, E, k = 0, N = 1, z = 0) {
292
- const F = E.breath;
293
- v[1] -= F * (5 * N + 4 * z), v[0] += (v[0] - u.chest.cx) * 0.012 * F * k, v[0] += E.bodyAngleX / 10 * (7 + 9 * k), Y(v, u.pivotX, u.pivotY, -E.bodyAngleZ / 10 * u.maxRoll * (1 - b(...u.rollBand, A)));
294
- }
295
- function U(v, A, E, k, N, z) {
296
- const F = z;
297
- F[0] = v, F[1] = A;
298
- const X = N.gain;
299
- for (const [W, Q, ne] of E.strands) {
300
- const ee = N.strands?.[W];
301
- if (!ee) continue;
302
- const ce = ne * 3, oe = Math.min(2, Math.floor(ce)), _e = ce - oe;
303
- F[0] += (ee[oe][0] + (ee[oe + 1][0] - ee[oe][0]) * _e) * Q * X, F[1] += (ee[oe][1] + (ee[oe + 1][1] - ee[oe][1]) * _e) * Q * X;
304
- }
305
- if (F[0] += (N.bunL[0] * E.bunL + N.bunR[0] * E.bunR) * X, F[1] += (N.bunL[1] * E.bunL + N.bunR[1] * E.bunR) * X, F[1] -= k.browY * 7 * E.brow, E.brow > 0.01) {
306
- const W = k.browAngle * 0.12 * E.brow;
307
- F[1] += (v - n.face.brow.cx) * Math.sin(W);
308
- }
309
- F[1] += k.mouthOpen * 3.5 * E.jaw;
310
- const M = k.angleX / 30, L = k.angleY / 30;
311
- return F[0] += M * (8 * E.nose + 5 * E.mouth) + (v - n.face.eyeA.cx) * 0.12 * M * E.eyeA - (v - n.face.eyeB.cx) * 0.12 * M * E.eyeB - M * 9 * E.earR + M * 4 * E.earL - M * 10 * (E.bunL + E.bunR), F[1] -= L * (6 * E.nose + 3 * E.mouth), F[1] += (A - n.face.eyeA.cy) * -0.06 * Math.abs(L) * E.eyeA + (A - n.face.eyeB.cy) * -0.06 * Math.abs(L) * E.eyeB, I(F, E.head, k, E.turn), _(F, A, k, E.chest, E.breath, E.shoulder), F;
312
- }
313
- const O = n.hand, C = O?.elbow ?? [0, 0], $ = O?.wrist ?? [0, 0], V = O?.knuckle ?? [0, 0], j = O?.contact ?? [0, 0], D = O?.forearmShare ?? 0;
314
- function H(v, A) {
277
+ function F(b, M, S, L) {
278
+ const U = (b - y.cx) / y.rx, X = (M - y.cy) / y.ry, k = 1 - U * U - X * X;
279
+ if (k <= 0) return [0, 0];
280
+ const P = v(0, 0.84, k);
281
+ return [S * y.shiftX * P, -L * y.shiftY * P];
282
+ }
283
+ function Y(b, M, S, L) {
284
+ const U = Math.cos(L), X = Math.sin(L), k = b[0] - M, P = b[1] - S;
285
+ b[0] = M + k * U - P * X, b[1] = S + k * X + P * U;
286
+ }
287
+ function I(b, M, S, L = M) {
288
+ const U = F(b[0], b[1], S.angleX / 30, S.angleY / 30);
289
+ b[0] += U[0] * L, b[1] += U[1] * L, !(M <= 0) && Y(b, y.pivotX, y.pivotY, -S.angleZ / 30 * y.maxRoll * M);
290
+ }
291
+ function _(b, M, S, L = 0, U = 1, X = 0) {
292
+ const k = S.breath;
293
+ b[1] -= k * (5 * U + 4 * X), b[0] += (b[0] - u.chest.cx) * 0.012 * k * L, b[0] += S.bodyAngleX / 10 * (7 + 9 * L), Y(b, u.pivotX, u.pivotY, -S.bodyAngleZ / 10 * u.maxRoll * (1 - v(...u.rollBand, M)));
294
+ }
295
+ function B(b, M, S, L, U, X) {
296
+ const k = X;
297
+ k[0] = b, k[1] = M;
298
+ const P = U.gain;
299
+ for (const [C, Q, te] of S.strands) {
300
+ const ne = U.strands?.[C];
301
+ if (!ne) continue;
302
+ const ie = te * 3, se = Math.min(2, Math.floor(ie)), me = ie - se;
303
+ k[0] += (ne[se][0] + (ne[se + 1][0] - ne[se][0]) * me) * Q * P, k[1] += (ne[se][1] + (ne[se + 1][1] - ne[se][1]) * me) * Q * P;
304
+ }
305
+ if (k[0] += (U.bunL[0] * S.bunL + U.bunR[0] * S.bunR) * P, k[1] += (U.bunL[1] * S.bunL + U.bunR[1] * S.bunR) * P, k[1] -= L.browY * 7 * S.brow, S.brow > 0.01) {
306
+ const C = L.browAngle * 0.12 * S.brow;
307
+ k[1] += (b - n.face.brow.cx) * Math.sin(C);
308
+ }
309
+ k[1] += L.mouthOpen * 3.5 * S.jaw;
310
+ const A = L.angleX / 30, R = L.angleY / 30;
311
+ return k[0] += A * (8 * S.nose + 5 * S.mouth) + (b - n.face.eyeA.cx) * 0.12 * A * S.eyeA - (b - n.face.eyeB.cx) * 0.12 * A * S.eyeB - A * 9 * S.earR + A * 4 * S.earL - A * 10 * (S.bunL + S.bunR), k[1] -= R * (6 * S.nose + 3 * S.mouth), k[1] += (M - n.face.eyeA.cy) * -0.06 * Math.abs(R) * S.eyeA + (M - n.face.eyeB.cy) * -0.06 * Math.abs(R) * S.eyeB, I(k, S.head, L, S.turn), _(k, M, L, S.chest, S.breath, S.shoulder), k;
312
+ }
313
+ const O = n.hand, z = O?.elbow ?? [0, 0], D = O?.wrist ?? [0, 0], J = O?.knuckle ?? [0, 0], j = O?.contact ?? [0, 0], H = O?.forearmShare ?? 0;
314
+ function Z(b, M) {
315
315
  return O ? {
316
- arm: 1 - b(...O.armBand, A),
317
- wrist: 1 - b(...O.wristBand, A),
318
- hand: 1 - b(...O.handBand, A),
319
- finger: b(...O.fingerXBand, v) * (1 - b(...O.fingerYBand, A)),
320
- pinBottom: b(...O.pinBand, A)
316
+ arm: 1 - v(...O.armBand, M),
317
+ wrist: 1 - v(...O.wristBand, M),
318
+ hand: 1 - v(...O.handBand, M),
319
+ finger: v(...O.fingerXBand, b) * (1 - v(...O.fingerYBand, M)),
320
+ pinBottom: v(...O.pinBand, M)
321
321
  } : { arm: 0, wrist: 0, hand: 0, finger: 0, pinBottom: 0 };
322
322
  }
323
- const R = (v, A, E, k) => {
324
- const N = v[0] - A[0], z = v[1] - A[1];
325
- return [A[0] + N * E - z * k, A[1] + N * k + z * E];
326
- }, Z = (v) => Math.atan2(v[1], v[0]);
327
- function P(v) {
328
- const A = [...j];
329
- I(A, x(...j), v, s(...j)), _(A, j[1], v, 0, 1, 0);
330
- const E = [...C];
331
- _(E, C[1], v, 0, 0, 0);
332
- const N = (Z([A[0] - E[0], A[1] - E[1]]) - Z([j[0] - C[0], j[1] - C[1]])) * D, z = Math.cos(N), F = Math.sin(N), X = (ne) => {
333
- const ee = R(ne, C, z, F);
334
- return [ee[0] + E[0] - C[0], ee[1] + E[1] - C[1]];
335
- }, M = X($), L = X(j), W = Z([A[0] - M[0], A[1] - M[1]]) - Z([L[0] - M[0], L[1] - M[1]]), Q = Math.min(1.03, Math.max(0.97, Math.hypot(A[0] - M[0], A[1] - M[1]) / Math.hypot(L[0] - M[0], L[1] - M[1])));
336
- return { tr: X, w: M, b: W, k: Q };
337
- }
338
- function G(v, A, E, k, N, z) {
339
- let F = [v, A];
340
- F = R(F, V, Math.cos(k.fingerTap * 0.07 * E.finger), Math.sin(k.fingerTap * 0.07 * E.finger));
341
- const X = -k.handAngle / 10 * 0.045 * E.wrist, M = -k.armAngle / 10 * 0.015 * E.arm;
342
- F = R(F, $, Math.cos(X), Math.sin(X)), F = R(F, C, Math.cos(M), Math.sin(M)), F = N.tr(F);
343
- const L = N.b * E.hand, W = 1 + (N.k - 1) * E.hand;
344
- return F = R(F, N.w, Math.cos(L) * W, Math.sin(L) * W), F[1] += (A - F[1]) * E.pinBottom, z[0] = F[0], z[1] = F[1], z;
345
- }
346
- const J = n.accessories ?? [];
347
- function q(v, A, E, k) {
348
- const N = w(v.pivot[0], v.pivot[1]);
349
- return U(v.pivot[0], v.pivot[1], N, A, E, k);
350
- }
351
- return { IMG: e, EYES: a, MOUTH: h, CHEEKS: S, STRANDS: c, TASSELS: J, headWeight: x, turnWeight: s, baseWeights: w, deformBase: U, applyHead: I, applyBody: _, handWeights: H, handFrame: P, deformHand: G, eyePartY: p, eyePartAlpha: l, tasselAnchor: q };
323
+ const $ = (b, M, S, L) => {
324
+ const U = b[0] - M[0], X = b[1] - M[1];
325
+ return [M[0] + U * S - X * L, M[1] + U * L + X * S];
326
+ }, q = (b) => Math.atan2(b[1], b[0]);
327
+ function W(b) {
328
+ const M = [...j];
329
+ I(M, x(...j), b, s(...j)), _(M, j[1], b, 0, 1, 0);
330
+ const S = [...z];
331
+ _(S, z[1], b, 0, 0, 0);
332
+ const U = (q([M[0] - S[0], M[1] - S[1]]) - q([j[0] - z[0], j[1] - z[1]])) * H, X = Math.cos(U), k = Math.sin(U), P = (te) => {
333
+ const ne = $(te, z, X, k);
334
+ return [ne[0] + S[0] - z[0], ne[1] + S[1] - z[1]];
335
+ }, A = P(D), R = P(j), C = q([M[0] - A[0], M[1] - A[1]]) - q([R[0] - A[0], R[1] - A[1]]), Q = Math.min(1.03, Math.max(0.97, Math.hypot(M[0] - A[0], M[1] - A[1]) / Math.hypot(R[0] - A[0], R[1] - A[1])));
336
+ return { tr: P, w: A, b: C, k: Q };
337
+ }
338
+ function N(b, M, S, L, U, X) {
339
+ let k = [b, M];
340
+ k = $(k, J, Math.cos(L.fingerTap * 0.07 * S.finger), Math.sin(L.fingerTap * 0.07 * S.finger));
341
+ const P = -L.handAngle / 10 * 0.045 * S.wrist, A = -L.armAngle / 10 * 0.015 * S.arm;
342
+ k = $(k, D, Math.cos(P), Math.sin(P)), k = $(k, z, Math.cos(A), Math.sin(A)), k = U.tr(k);
343
+ const R = U.b * S.hand, C = 1 + (U.k - 1) * S.hand;
344
+ return k = $(k, U.w, Math.cos(R) * C, Math.sin(R) * C), k[1] += (M - k[1]) * S.pinBottom, X[0] = k[0], X[1] = k[1], X;
345
+ }
346
+ const G = n.accessories ?? [];
347
+ function V(b, M, S, L) {
348
+ const U = w(b.pivot[0], b.pivot[1]);
349
+ return B(b.pivot[0], b.pivot[1], U, M, S, L);
350
+ }
351
+ return { IMG: e, EYES: a, MOUTH: h, CHEEKS: E, STRANDS: c, TASSELS: G, headWeight: x, turnWeight: s, baseWeights: w, deformBase: B, applyHead: I, applyBody: _, handWeights: Z, handFrame: W, deformHand: N, eyePartY: p, eyePartAlpha: l, tasselAnchor: V };
352
352
  }
353
353
  function xn(n, e, t, r = !1) {
354
354
  const a = r ? Math.max(e, t) * 2 : 1, o = new Float32Array(n.length), i = Math.SQRT2;
@@ -373,34 +373,34 @@ function xn(n, e, t, r = !1) {
373
373
  }
374
374
  return o;
375
375
  }
376
- function et(n, e, t) {
376
+ function tt(n, e, t) {
377
377
  return Math.exp(-(((n - t.cx) / t.rx) ** 2 + ((e - t.cy) / t.ry) ** 2));
378
378
  }
379
379
  function wn(n, e, t) {
380
380
  const r = ((n - t.head.cx) / t.head.rx) ** 2 + ((e - t.head.cy) / t.head.ry) ** 2;
381
- let a = t.head.rx * 0.8 * Math.sqrt(Math.max(0, 1 - r)) + t.body.chest.rx * 0.23 * et(n, e, t.body.chest);
382
- a += t.face.nose.rx * 0.2 * et(n, e, t.face.nose);
383
- for (const [o, i] of t.cheeks) a += t.head.rx * 0.012 * et(n, e, { cx: o, cy: i, rx: t.head.rx * 0.3, ry: t.head.ry * 0.16 });
381
+ let a = t.head.rx * 0.8 * Math.sqrt(Math.max(0, 1 - r)) + t.body.chest.rx * 0.23 * tt(n, e, t.body.chest);
382
+ a += t.face.nose.rx * 0.2 * tt(n, e, t.face.nose);
383
+ for (const [o, i] of t.cheeks) a += t.head.rx * 0.012 * tt(n, e, { cx: o, cy: i, rx: t.head.rx * 0.3, ry: t.head.ry * 0.16 });
384
384
  return a;
385
385
  }
386
- function Ve(n, e, t, r) {
386
+ function qe(n, e, t, r) {
387
387
  const a = new Float32Array(n.length), o = new Float32Array(n.length), i = (f, m, g, p, l, h) => {
388
- for (let S = 0; S < p; S++) {
389
- const y = S * h;
390
- let u = 0, b = 0;
388
+ for (let E = 0; E < p; E++) {
389
+ const y = E * h;
390
+ let u = 0, v = 0;
391
391
  for (let x = 0; x < Math.min(r, g - 1) + 1; x++)
392
- u += f[y + x * l], b++;
392
+ u += f[y + x * l], v++;
393
393
  for (let x = 0; x < g; x++) {
394
- m[y + x * l] = u / b;
394
+ m[y + x * l] = u / v;
395
395
  const s = x + r + 1, c = x - r;
396
- s < g && (u += f[y + s * l], b++), c >= 0 && (u -= f[y + c * l], b--);
396
+ s < g && (u += f[y + s * l], v++), c >= 0 && (u -= f[y + c * l], v--);
397
397
  }
398
398
  }
399
399
  };
400
400
  return i(n, a, e, t, 1, e), i(a, o, t, e, e, 1), o;
401
401
  }
402
402
  function An(n, e, t, r) {
403
- const a = Ve(n, t, r, 1), o = Ve(n, t, r, 6), i = new Float32Array(n.length);
403
+ const a = qe(n, t, r, 1), o = qe(n, t, r, 6), i = new Float32Array(n.length);
404
404
  for (let g = 0; g < i.length; g++) i[g] = e[g] > 128 ? a[g] - o[g] : 0;
405
405
  const f = new Float32Array(n.length * 2), m = (g, p) => i[Math.max(0, Math.min(r - 1, p)) * t + Math.max(0, Math.min(t - 1, g))];
406
406
  for (let g = 0; g < r; g++) for (let p = 0; p < t; p++) {
@@ -410,35 +410,35 @@ function An(n, e, t, r) {
410
410
  return f;
411
411
  }
412
412
  function Mn(n, e, t, r, a, o = !0, i) {
413
- const f = !!a && r[0] === 0 && r[1] === 0 && r[2] === a.image.width && r[3] === a.image.height, m = xn(n, e, t, f), g = new Float32Array(n.length), p = r[2] / e, l = r[3] / t, h = Math.min(p, l), S = Math.min(r[2], r[3]) * 0.08;
413
+ const f = !!a && r[0] === 0 && r[1] === 0 && r[2] === a.image.width && r[3] === a.image.height, m = xn(n, e, t, f), g = new Float32Array(n.length), p = r[2] / e, l = r[3] / t, h = Math.min(p, l), E = Math.min(r[2], r[3]) * 0.08;
414
414
  for (let s = 0; s < t; s++) for (let c = 0; c < e; c++) {
415
415
  const T = s * e + c;
416
- g[T] = (o ? Math.sqrt(m[T] * h * S) * 0.55 : 0) + (a ? wn(r[0] + (c + 0.5) * p, r[1] + (s + 0.5) * l, a) : 0);
416
+ g[T] = (o ? Math.sqrt(m[T] * h * E) * 0.55 : 0) + (a ? wn(r[0] + (c + 0.5) * p, r[1] + (s + 0.5) * l, a) : 0);
417
417
  }
418
418
  const y = Math.max(1, Math.round(Math.min(e, t) * 0.02));
419
- g.set(Ve(Ve(g, e, t, y), e, t, y));
420
- const u = i ? An(i, n, e, t) : null, b = new Uint8Array(e * t * 4), x = (s, c) => g[Math.max(0, Math.min(t - 1, c)) * e + Math.max(0, Math.min(e - 1, s))];
419
+ g.set(qe(qe(g, e, t, y), e, t, y));
420
+ const u = i ? An(i, n, e, t) : null, v = new Uint8Array(e * t * 4), x = (s, c) => g[Math.max(0, Math.min(t - 1, c)) * e + Math.max(0, Math.min(e - 1, s))];
421
421
  for (let s = 0; s < t; s++) for (let c = 0; c < e; c++) {
422
- const T = -(x(c + 2, s) - x(c - 2, s)) / (4 * p), d = -(x(c, s + 2) - x(c, s - 2)) / (4 * l), w = Math.hypot(T, d, 1), B = (s * e + c) * 4, Y = s * e + c;
423
- b[B] = Math.round((T / w * 0.5 + 0.5) * 255), b[B + 1] = Math.round((d / w * 0.5 + 0.5) * 255), b[B + 2] = Math.round(((u?.[2 * Y] ?? 0) * 0.5 + 0.5) * 255), b[B + 3] = Math.round(((u?.[2 * Y + 1] ?? 0) * 0.5 + 0.5) * 255);
422
+ const T = -(x(c + 2, s) - x(c - 2, s)) / (4 * p), d = -(x(c, s + 2) - x(c, s - 2)) / (4 * l), w = Math.hypot(T, d, 1), F = (s * e + c) * 4, Y = s * e + c;
423
+ v[F] = Math.round((T / w * 0.5 + 0.5) * 255), v[F + 1] = Math.round((d / w * 0.5 + 0.5) * 255), v[F + 2] = Math.round(((u?.[2 * Y] ?? 0) * 0.5 + 0.5) * 255), v[F + 3] = Math.round(((u?.[2 * Y + 1] ?? 0) * 0.5 + 0.5) * 255);
424
424
  }
425
- return b;
425
+ return v;
426
426
  }
427
- const Ut = /* @__PURE__ */ new WeakMap();
427
+ const Yt = /* @__PURE__ */ new WeakMap();
428
428
  function En(n, e, t, r) {
429
- const a = JSON.stringify([e, t.head, t.body.chest, t.face.nose, t.cheeks, r]), o = Ut.get(n);
429
+ const a = JSON.stringify([e, t.head, t.body.chest, t.face.nose, t.cheeks, r]), o = Yt.get(n);
430
430
  if (o?.key === a) return { ...o, computed: !1, ms: 0 };
431
431
  const i = performance.now(), f = Math.min(1, 512 / Math.max(n.width, n.height)), m = Math.max(1, Math.round(n.width * f)), g = Math.max(1, Math.round(n.height * f)), p = document.createElement("canvas");
432
432
  p.width = m, p.height = g;
433
433
  const l = p.getContext("2d", { willReadFrequently: !0 });
434
434
  l.drawImage(n, 0, 0, m, g);
435
- const h = l.getImageData(0, 0, m, g).data, S = new Uint8Array(m * g), y = new Float32Array(m * g);
436
- for (let b = 0; b < S.length; b++)
437
- S[b] = h[4 * b + 3], y[b] = (0.2126 * h[4 * b] + 0.7152 * h[4 * b + 1] + 0.0722 * h[4 * b + 2]) / 255;
438
- const u = { key: a, data: Mn(S, m, g, e, t, r, r ? y : void 0), width: m, height: g };
439
- return Ut.set(n, u), { ...u, computed: !0, ms: performance.now() - i };
435
+ const h = l.getImageData(0, 0, m, g).data, E = new Uint8Array(m * g), y = new Float32Array(m * g);
436
+ for (let v = 0; v < E.length; v++)
437
+ E[v] = h[4 * v + 3], y[v] = (0.2126 * h[4 * v] + 0.7152 * h[4 * v + 1] + 0.0722 * h[4 * v + 2]) / 255;
438
+ const u = { key: a, data: Mn(E, m, g, e, t, r, r ? y : void 0), width: m, height: g };
439
+ return Yt.set(n, u), { ...u, computed: !0, ms: performance.now() - i };
440
440
  }
441
- const Le = Object.freeze({
441
+ const Fe = Object.freeze({
442
442
  enabled: !1,
443
443
  x: 0.2,
444
444
  y: 0.2,
@@ -455,7 +455,7 @@ const Le = Object.freeze({
455
455
  specular: 0.12,
456
456
  rim: 0.3,
457
457
  detail: 0.4
458
- }), Yt = {
458
+ }), It = {
459
459
  x: [0, 1],
460
460
  y: [0, 1],
461
461
  z: [0.1, 2],
@@ -473,23 +473,23 @@ const Le = Object.freeze({
473
473
  function Tn(n) {
474
474
  if (!n || typeof n != "object" || Array.isArray(n)) return null;
475
475
  const e = n;
476
- if (Object.keys(e).length !== Object.keys(Le).length || Object.keys(e).some((r) => !(r in Le)) || ![!0, !1].includes(e.enabled) || ![!0, !1].includes(e.shadow) || !["soft", "cel"].includes(e.mode)) return null;
477
- const t = { ...Le, enabled: e.enabled, shadow: e.shadow, mode: e.mode };
478
- for (const r of Object.keys(Yt)) {
479
- const a = e[r], [o, i] = Yt[r];
476
+ if (Object.keys(e).length !== Object.keys(Fe).length || Object.keys(e).some((r) => !(r in Fe)) || ![!0, !1].includes(e.enabled) || ![!0, !1].includes(e.shadow) || !["soft", "cel"].includes(e.mode)) return null;
477
+ const t = { ...Fe, enabled: e.enabled, shadow: e.shadow, mode: e.mode };
478
+ for (const r of Object.keys(It)) {
479
+ const a = e[r], [o, i] = It[r];
480
480
  if (typeof a != "number" || !Number.isFinite(a) || Sn.has(r) && !Number.isInteger(a)) return null;
481
481
  t[r] = Math.max(o, Math.min(i, a));
482
482
  }
483
483
  return t;
484
484
  }
485
- function kr(n) {
485
+ function _r(n) {
486
486
  return `#${n.toString(16).padStart(6, "0")}`;
487
487
  }
488
- const We = -0.1, On = 0.9, Rn = 1, Ln = 1.06;
489
- function kn(n, e) {
488
+ const Ge = -0.1, On = 0.9, Rn = 1, Ln = 1.06;
489
+ function _n(n, e) {
490
490
  return [(0.5 - n) * 0.12, (0.5 - e) * 0.12];
491
491
  }
492
- function _n(n, e, t, r) {
492
+ function kn(n, e, t, r) {
493
493
  const a = n * Math.PI / 180, o = e * Math.PI / 180, i = -t / 30 * r, f = Math.cos(a), m = Math.sin(a), g = Math.cos(o), p = Math.sin(o), l = Math.cos(i), h = Math.sin(i);
494
494
  return [
495
495
  l * f,
@@ -532,7 +532,7 @@ class Fn {
532
532
  composite(e) {
533
533
  const t = this.gl, { prog: r, u: a } = this.program, o = this.width, i = this.height;
534
534
  t.useProgram(r), t.bindVertexArray(this.vao), t.activeTexture(t.TEXTURE0), t.uniform1i(a.uTex, 0), t.disable(t.BLEND), t.bindFramebuffer(t.FRAMEBUFFER, this.targets[1].framebuffer), t.viewport(0, 0, Math.ceil(o / 2), Math.ceil(i / 2)), t.bindTexture(t.TEXTURE_2D, this.targets[0].texture), t.uniform1i(a.uPass, 0), t.uniform2f(a.uShift, 0, 0), t.uniform2f(a.uStep, 3 / o, 0), t.drawArrays(t.TRIANGLES, 0, 3), t.bindFramebuffer(t.FRAMEBUFFER, null), t.viewport(0, 0, o, i), t.clearColor(0, 0, 0, 0), t.clear(t.COLOR_BUFFER_BIT), t.enable(t.BLEND), t.bindTexture(t.TEXTURE_2D, this.targets[1].texture);
535
- const f = kn(e.x, e.y);
535
+ const f = _n(e.x, e.y);
536
536
  t.uniform1i(a.uPass, 1), t.uniform2f(a.uShift, f[0], -f[1]), t.uniform2f(a.uStep, 0, 3 / i), t.drawArrays(t.TRIANGLES, 0, 3), t.bindTexture(t.TEXTURE_2D, this.targets[0].texture), t.uniform1i(a.uPass, 2), t.drawArrays(t.TRIANGLES, 0, 3), t.bindVertexArray(null);
537
537
  }
538
538
  clearTargets() {
@@ -673,10 +673,10 @@ function Bn(n, e) {
673
673
  float diffuse;
674
674
  if (uCel == 1) {
675
675
  float w = 0.01 + uSurface.x * 0.08;
676
- diffuse = 0.2 + 0.45 * smoothstep(${We.toFixed(3)} - w, ${We.toFixed(3)} + w, ndl) + 0.35 * smoothstep(0.55 - w, 0.55 + w, ndl);
676
+ diffuse = 0.2 + 0.45 * smoothstep(${Ge.toFixed(3)} - w, ${Ge.toFixed(3)} + w, ndl) + 0.35 * smoothstep(0.55 - w, 0.55 + w, ndl);
677
677
  } else {
678
678
  float s = 0.05 + uSurface.x * 0.5;
679
- diffuse = smoothstep(${We.toFixed(3)} - s, ${We.toFixed(3)} + s, ndl) * (0.35 + 0.65 * max(0.0, ndl));
679
+ diffuse = smoothstep(${Ge.toFixed(3)} - s, ${Ge.toFixed(3)} + s, ndl) * (0.35 + 0.65 * max(0.0, ndl));
680
680
  }
681
681
  float reach = dot(toLight, toLight) / (uLighting.w * uLighting.w);
682
682
  float attenuation = 1.0 / (1.0 + reach);
@@ -699,51 +699,51 @@ function Bn(n, e) {
699
699
  in vec2 aPos; uniform vec2 uScale; uniform vec2 uOffset;
700
700
  void main() { gl_Position = vec4(aPos * uScale + uOffset, 0.0, 1.0); gl_PointSize = 7.0; }`, l = `#version 300 es
701
701
  precision mediump float; uniform vec4 uColor; out vec4 o; void main() { o = uColor; }`;
702
- function h(b, x, s) {
703
- const c = b.createProgram();
704
- for (const [w, B] of [[b.VERTEX_SHADER, x], [b.FRAGMENT_SHADER, s]]) {
705
- const Y = b.createShader(w);
706
- if (b.shaderSource(Y, B), b.compileShader(Y), !b.getShaderParameter(Y, b.COMPILE_STATUS)) throw new Error(b.getShaderInfoLog(Y));
707
- b.attachShader(c, Y), b.deleteShader(Y);
708
- }
709
- if (b.bindAttribLocation(c, 0, "aPos"), b.bindAttribLocation(c, 1, "aUv"), b.bindAttribLocation(c, 2, "aHeadWeight"), b.linkProgram(c), !b.getProgramParameter(c, b.LINK_STATUS)) throw new Error(b.getProgramInfoLog(c));
710
- const T = {}, d = b.getProgramParameter(c, b.ACTIVE_UNIFORMS);
702
+ function h(v, x, s) {
703
+ const c = v.createProgram();
704
+ for (const [w, F] of [[v.VERTEX_SHADER, x], [v.FRAGMENT_SHADER, s]]) {
705
+ const Y = v.createShader(w);
706
+ if (v.shaderSource(Y, F), v.compileShader(Y), !v.getShaderParameter(Y, v.COMPILE_STATUS)) throw new Error(v.getShaderInfoLog(Y));
707
+ v.attachShader(c, Y), v.deleteShader(Y);
708
+ }
709
+ if (v.bindAttribLocation(c, 0, "aPos"), v.bindAttribLocation(c, 1, "aUv"), v.bindAttribLocation(c, 2, "aHeadWeight"), v.linkProgram(c), !v.getProgramParameter(c, v.LINK_STATUS)) throw new Error(v.getProgramInfoLog(c));
710
+ const T = {}, d = v.getProgramParameter(c, v.ACTIVE_UNIFORMS);
711
711
  for (let w = 0; w < d; w++) {
712
- const B = b.getActiveUniform(c, w).name.replace("[0]", "");
713
- T[B] = b.getUniformLocation(c, B);
712
+ const F = v.getActiveUniform(c, w).name.replace("[0]", "");
713
+ T[F] = v.getUniformLocation(c, F);
714
714
  }
715
715
  return { prog: c, u: T };
716
716
  }
717
- function S(b, x, s, c) {
718
- const T = [b];
719
- let d = b;
720
- for (; d < b + x - 0.5; ) {
717
+ function E(v, x, s, c) {
718
+ const T = [v];
719
+ let d = v;
720
+ for (; d < v + x - 0.5; ) {
721
721
  const w = c && d >= c.from && d < c.to ? c.cell : s;
722
- d = Math.min(b + x, d + w), T.push(d);
722
+ d = Math.min(v + x, d + w), T.push(d);
723
723
  }
724
724
  return T;
725
725
  }
726
- function y(b, x, s, c, T = null) {
727
- const [d, w, B, Y] = b, I = S(d, B, x, T && { from: T.x0, to: T.x1, cell: T.cell }), _ = S(w, Y, x, T && { from: T.y0, to: T.y1, cell: T.cell }), U = I.length - 1, O = _.length - 1, C = (U + 1) * (O + 1), $ = new Float32Array(C * 2), V = new Float32Array(C * 2);
728
- for (let Z = 0; Z <= O; Z++) for (let P = 0; P <= U; P++) {
729
- const G = Z * (U + 1) + P;
730
- $[G * 2] = I[P], $[G * 2 + 1] = _[Z], V[G * 2] = (I[P] - d) / B, V[G * 2 + 1] = (_[Z] - w) / Y;
731
- }
732
- const j = [], D = [], H = s.length / c, R = c === 1 ? 0 : 1;
733
- for (let Z = 0; Z < O; Z++) for (let P = 0; P < U; P++) {
734
- const G = Math.floor(I[P] - d) * R - 2, J = Math.ceil(I[P + 1] - d) * R + 2, q = Math.floor(_[Z] - w) * R - 2, v = Math.ceil(_[Z + 1] - w) * R + 2;
735
- let A = !1;
736
- for (let F = Math.max(0, q); F < Math.min(H, v) && !A; F += 1)
737
- for (let X = Math.max(0, G); X < Math.min(c, J); X += 1)
738
- if (s[F * c + X] > 3) {
739
- A = !0;
726
+ function y(v, x, s, c, T = null) {
727
+ const [d, w, F, Y] = v, I = E(d, F, x, T && { from: T.x0, to: T.x1, cell: T.cell }), _ = E(w, Y, x, T && { from: T.y0, to: T.y1, cell: T.cell }), B = I.length - 1, O = _.length - 1, z = (B + 1) * (O + 1), D = new Float32Array(z * 2), J = new Float32Array(z * 2);
728
+ for (let q = 0; q <= O; q++) for (let W = 0; W <= B; W++) {
729
+ const N = q * (B + 1) + W;
730
+ D[N * 2] = I[W], D[N * 2 + 1] = _[q], J[N * 2] = (I[W] - d) / F, J[N * 2 + 1] = (_[q] - w) / Y;
731
+ }
732
+ const j = [], H = [], Z = s.length / c, $ = c === 1 ? 0 : 1;
733
+ for (let q = 0; q < O; q++) for (let W = 0; W < B; W++) {
734
+ const N = Math.floor(I[W] - d) * $ - 2, G = Math.ceil(I[W + 1] - d) * $ + 2, V = Math.floor(_[q] - w) * $ - 2, b = Math.ceil(_[q + 1] - w) * $ + 2;
735
+ let M = !1;
736
+ for (let k = Math.max(0, V); k < Math.min(Z, b) && !M; k += 1)
737
+ for (let P = Math.max(0, N); P < Math.min(c, G); P += 1)
738
+ if (s[k * c + P] > 3) {
739
+ M = !0;
740
740
  break;
741
741
  }
742
- if (!A) continue;
743
- const E = Z * (U + 1) + P, k = E + 1, N = E + U + 1, z = N + 1;
744
- j.push(E, k, N, k, z, N), D.push(E, k, E, N, k, N), P === U - 1 && D.push(k, z), Z === O - 1 && D.push(N, z);
742
+ if (!M) continue;
743
+ const S = q * (B + 1) + W, L = S + 1, U = S + B + 1, X = U + 1;
744
+ j.push(S, L, U, L, X, U), H.push(S, L, S, U, L, U), W === B - 1 && H.push(L, X), q === O - 1 && H.push(U, X);
745
745
  }
746
- return { rect: b, cols: U, rows: O, rest: $, uv: V, pos: new Float32Array($), tris: new Uint32Array(j), lines: new Uint32Array(D) };
746
+ return { rect: v, cols: B, rows: O, rest: D, uv: J, pos: new Float32Array(D), tris: new Uint32Array(j), lines: new Uint32Array(H) };
747
747
  }
748
748
  class u {
749
749
  // padTop / padSide: margin around the image, as a share of its height / width. A negative
@@ -752,7 +752,7 @@ function Bn(n, e) {
752
752
  this.pad = { top: s, side: c }, this.fit = T;
753
753
  const d = x.getContext("webgl2", { premultipliedAlpha: !0, antialias: !0, alpha: !0, preserveDrawingBuffer: !0 });
754
754
  if (!d) throw new Error("WebGL2 is not available");
755
- this.gl = d, this.canvas = x, this.main = h(d, i, f), this.line = h(d, p, l), this.layers = [], this.lighting = Le, this.lightingStats = { normalMs: 0, computedLayers: 0, cachedLayers: 0 }, d.enable(d.BLEND), d.blendFunc(d.ONE, d.ONE_MINUS_SRC_ALPHA);
755
+ this.gl = d, this.canvas = x, this.main = h(d, i, f), this.line = h(d, p, l), this.layers = [], this.lighting = Fe, this.lightingStats = { normalMs: 0, computedLayers: 0, cachedLayers: 0 }, d.enable(d.BLEND), d.blendFunc(d.ONE, d.ONE_MINUS_SRC_ALPHA);
756
756
  }
757
757
  texture(x) {
758
758
  const s = this.gl, c = s.createTexture();
@@ -761,11 +761,11 @@ function Bn(n, e) {
761
761
  addLayer(x, s, c, T = {}) {
762
762
  const d = this.gl, w = d.createVertexArray();
763
763
  d.bindVertexArray(w);
764
- const B = d.createBuffer();
765
- d.bindBuffer(d.ARRAY_BUFFER, B), d.bufferData(d.ARRAY_BUFFER, c.pos, d.DYNAMIC_DRAW);
766
- for (const C of [this.main, this.line]) {
767
- const $ = d.getAttribLocation(C.prog, "aPos");
768
- d.enableVertexAttribArray($), d.vertexAttribPointer($, 2, d.FLOAT, !1, 0, 0);
764
+ const F = d.createBuffer();
765
+ d.bindBuffer(d.ARRAY_BUFFER, F), d.bufferData(d.ARRAY_BUFFER, c.pos, d.DYNAMIC_DRAW);
766
+ for (const z of [this.main, this.line]) {
767
+ const D = d.getAttribLocation(z.prog, "aPos");
768
+ d.enableVertexAttribArray(D), d.vertexAttribPointer(D, 2, d.FLOAT, !1, 0, 0);
769
769
  }
770
770
  const Y = d.createBuffer();
771
771
  d.bindBuffer(d.ARRAY_BUFFER, Y), d.bufferData(d.ARRAY_BUFFER, c.uv, d.STATIC_DRAW);
@@ -773,9 +773,9 @@ function Bn(n, e) {
773
773
  d.enableVertexAttribArray(I), d.vertexAttribPointer(I, 2, d.FLOAT, !1, 0, 0);
774
774
  const _ = d.createBuffer();
775
775
  d.bindBuffer(d.ELEMENT_ARRAY_BUFFER, _), d.bufferData(d.ELEMENT_ARRAY_BUFFER, c.tris, d.STATIC_DRAW), d.bindVertexArray(null);
776
- const U = d.createBuffer();
777
- d.bindBuffer(d.ELEMENT_ARRAY_BUFFER, U), d.bufferData(d.ELEMENT_ARRAY_BUFFER, c.lines, d.STATIC_DRAW);
778
- const O = { name: x, image: s, mesh: c, tex: this.texture(s), vao: w, posBuf: B, uvBuf: Y, triBuf: _, lineBuf: U, visible: !0, face: !!T.face, eyeBall: T.eyeBall, color: T.color || [1, 1, 1, 1] };
776
+ const B = d.createBuffer();
777
+ d.bindBuffer(d.ELEMENT_ARRAY_BUFFER, B), d.bufferData(d.ELEMENT_ARRAY_BUFFER, c.lines, d.STATIC_DRAW);
778
+ const O = { name: x, image: s, mesh: c, tex: this.texture(s), vao: w, posBuf: F, uvBuf: Y, triBuf: _, lineBuf: B, visible: !0, face: !!T.face, eyeBall: T.eyeBall, color: T.color || [1, 1, 1, 1] };
779
779
  return this.layers.push(O), O;
780
780
  }
781
781
  destroy() {
@@ -787,7 +787,7 @@ function Bn(n, e) {
787
787
  x.deleteProgram(this.main.prog), x.deleteProgram(this.line.prog), this.lit && x.deleteProgram(this.lit.prog), this.shadow?.destroy(), this.layers.length = 0;
788
788
  }
789
789
  setLighting(x) {
790
- if (this.lighting = Tn({ ...Le, ...x }) ?? Le, !this.lighting.enabled) return;
790
+ if (this.lighting = Tn({ ...Fe, ...x }) ?? Fe, !this.lighting.enabled) return;
791
791
  const s = this.gl;
792
792
  this.lit || (this.lit = h(s, m, g));
793
793
  for (const c of this.layers) {
@@ -803,8 +803,8 @@ function Bn(n, e) {
803
803
  resize() {
804
804
  const x = this.canvas, s = Math.min(window.devicePixelRatio || 1, 2), c = Math.round(x.clientWidth * s), T = Math.round(x.clientHeight * s);
805
805
  (x.width !== c || x.height !== T) && (x.width = c, x.height = T);
806
- const d = (this.fit === "cover" ? Math.max : Math.min)(c / (t.w * (1 + 2 * this.pad.side)), T / (t.h * (1 + this.pad.top))), w = (c - t.w * d) / 2, B = (T - t.h * d) / (this.fit === "cover" ? 2 : 1);
807
- this.scale = [2 * d / c, -2 * d / T], this.offset = [-1 + 2 * w / c, 1 - 2 * B / T], this.pxScale = d, this.pxOff = [w, B];
806
+ const d = (this.fit === "cover" ? Math.max : Math.min)(c / (t.w * (1 + 2 * this.pad.side)), T / (t.h * (1 + this.pad.top))), w = (c - t.w * d) / 2, F = (T - t.h * d) / (this.fit === "cover" ? 2 : 1);
807
+ this.scale = [2 * d / c, -2 * d / T], this.offset = [-1 + 2 * w / c, 1 - 2 * F / T], this.pxScale = d, this.pxOff = [w, F];
808
808
  }
809
809
  draw(x) {
810
810
  const s = this.gl;
@@ -814,7 +814,7 @@ function Bn(n, e) {
814
814
  const d = c ? this.lit : this.main;
815
815
  if (this.current = d, s.useProgram(d.prog), c) {
816
816
  const w = this.lighting;
817
- s.uniform1i(d.u.uNormal, 1), s.uniform3f(d.u.uLight, w.x, w.y, w.z), s.uniform3f(d.u.uLightColor, (w.color >> 16 & 255) / 255, (w.color >> 8 & 255) / 255, (w.color & 255) / 255), s.uniform3f(d.u.uAmbientColor, (w.ambientColor >> 16 & 255) / 255, (w.ambientColor >> 8 & 255) / 255, (w.ambientColor & 255) / 255), s.uniform4f(d.u.uLighting, w.strength, w.intensity, w.ambient, w.reach), s.uniform4f(d.u.uSurface, w.softness, w.specular, w.rim, w.detail), s.uniform1f(d.u.uAspect, this.canvas.width / this.canvas.height), s.uniform1i(d.u.uCel, w.mode === "cel" ? 1 : 0), s.uniformMatrix3fv(d.u.uHeadRotation, !1, _n(x.angleX ?? 0, x.angleY ?? 0, x.angleZ ?? 0, e.head.maxRoll));
817
+ s.uniform1i(d.u.uNormal, 1), s.uniform3f(d.u.uLight, w.x, w.y, w.z), s.uniform3f(d.u.uLightColor, (w.color >> 16 & 255) / 255, (w.color >> 8 & 255) / 255, (w.color & 255) / 255), s.uniform3f(d.u.uAmbientColor, (w.ambientColor >> 16 & 255) / 255, (w.ambientColor >> 8 & 255) / 255, (w.ambientColor & 255) / 255), s.uniform4f(d.u.uLighting, w.strength, w.intensity, w.ambient, w.reach), s.uniform4f(d.u.uSurface, w.softness, w.specular, w.rim, w.detail), s.uniform1f(d.u.uAspect, this.canvas.width / this.canvas.height), s.uniform1i(d.u.uCel, w.mode === "cel" ? 1 : 0), s.uniformMatrix3fv(d.u.uHeadRotation, !1, kn(x.angleX ?? 0, x.angleY ?? 0, x.angleZ ?? 0, e.head.maxRoll));
818
818
  }
819
819
  s.uniform2fv(d.u.uScale, this.scale), s.uniform2fv(d.u.uOffset, this.offset), s.uniform1i(d.u.uTex, 0), s.uniform4fv(d.u.uEyeBox, r.flatMap((w) => [w.x0, w.x1, 0, 0])), s.uniform1fv(d.u.uEyeTop, r.flatMap((w) => w.top)), s.uniform1fv(d.u.uEyeBot, r.flatMap((w) => w.bot)), s.uniform4fv(d.u.uEyeState, x.eyes), s.uniform4f(d.u.uMouth, a.cx, a.cy, a.angle, a.halfLen), s.uniform4f(d.u.uMouthState, x.mouthOpen, x.mouthForm, a.bow, 0), s.uniform4f(d.u.uCheeks, o[0][0], o[0][1], o[1][0], o[1][1]), s.uniform1f(d.u.uCheek, x.cheek), s.activeTexture(s.TEXTURE0);
820
820
  for (const w of this.layers)
@@ -822,8 +822,8 @@ function Bn(n, e) {
822
822
  if (this.original && x.originalAlpha > 0 && this.drawLayer(this.original, x.originalAlpha), T && this.shadow.composite(this.lighting), x.showMesh) {
823
823
  const w = this.line;
824
824
  s.useProgram(w.prog), s.uniform2fv(w.u.uScale, this.scale), s.uniform2fv(w.u.uOffset, this.offset);
825
- for (const B of this.layers)
826
- !B.visible || B.overlay || (s.bindVertexArray(B.vao), s.bindBuffer(s.ELEMENT_ARRAY_BUFFER, B.lineBuf), s.uniform4fv(w.u.uColor, B.color), s.drawElements(s.LINES, B.mesh.lines.length, s.UNSIGNED_INT, 0), s.bindBuffer(s.ELEMENT_ARRAY_BUFFER, B.triBuf));
825
+ for (const F of this.layers)
826
+ !F.visible || F.overlay || (s.bindVertexArray(F.vao), s.bindBuffer(s.ELEMENT_ARRAY_BUFFER, F.lineBuf), s.uniform4fv(w.u.uColor, F.color), s.drawElements(s.LINES, F.mesh.lines.length, s.UNSIGNED_INT, 0), s.bindBuffer(s.ELEMENT_ARRAY_BUFFER, F.triBuf));
827
827
  x.joints?.length && this.drawPoints(x.joints), s.bindVertexArray(null);
828
828
  }
829
829
  }
@@ -853,16 +853,16 @@ function Un(n, e) {
853
853
  const { applyHead: t, applyBody: r, TASSELS: a, tasselAnchor: o } = n, i = (e.strands ?? []).map((s) => {
854
854
  if (s.nodes.length === 4) return s;
855
855
  const c = Array.from({ length: 4 }, (T, d) => {
856
- const w = d / 3 * (s.nodes.length - 1), B = Math.min(s.nodes.length - 2, Math.floor(w)), Y = w - B;
857
- return [0, 1].map((I) => s.nodes[B][I] + (s.nodes[B + 1][I] - s.nodes[B][I]) * Y);
856
+ const w = d / 3 * (s.nodes.length - 1), F = Math.min(s.nodes.length - 2, Math.floor(w)), Y = w - F;
857
+ return [0, 1].map((I) => s.nodes[F][I] + (s.nodes[F + 1][I] - s.nodes[F][I]) * Y);
858
858
  });
859
859
  return { ...s, nodes: c };
860
- }), f = [0, 300, 200, 140], m = 0.9, g = 7, p = { stiff: 1.7, damp: 1.6, couple: 0.85, reach: 0.9, bind: 4 }, l = Math.min(6, i.filter((s) => s.name.startsWith("bang")).length), h = { freq: 0.7, zeta: 0.22, hang: 0.85, inertia: 0.32, wind: 0.03, max: 0.55, smooth: 6 }, S = (s, c) => [s[0] * Math.cos(c) - s[1] * Math.sin(c), s[0] * Math.sin(c) + s[1] * Math.cos(c)], y = (s, c) => {
860
+ }), f = [0, 300, 200, 140], m = 0.9, g = 7, p = { stiff: 1.7, damp: 1.6, couple: 0.85, reach: 0.9, bind: 4 }, l = Math.min(6, i.filter((s) => s.name.startsWith("bang")).length), h = { freq: 0.7, zeta: 0.22, hang: 0.85, inertia: 0.32, wind: 0.03, max: 0.55, smooth: 6 }, E = (s, c) => [s[0] * Math.cos(c) - s[1] * Math.sin(c), s[0] * Math.sin(c) + s[1] * Math.cos(c)], y = (s, c) => {
861
861
  const T = Math.hypot(s[0], s[1]);
862
862
  if (T < 1e-6) return s;
863
863
  const d = c * Math.tanh(T / c) / T;
864
864
  return [s[0] * d, s[1] * d];
865
- }, u = Object.fromEntries(Object.entries(e.buns ?? {}).map(([s, c]) => [s, { at: [c.cx, c.cy], k: 260, c: 11, hang: 3, max: 4 }])), b = (s, c) => {
865
+ }, u = Object.fromEntries(Object.entries(e.buns ?? {}).map(([s, c]) => [s, { at: [c.cx, c.cy], k: 260, c: 11, hang: 3, max: 4 }])), v = (s, c) => {
866
866
  const T = Math.hypot(s[0], s[1]);
867
867
  T > c && (s[0] *= c / T, s[1] *= c / T);
868
868
  };
@@ -872,8 +872,8 @@ function Un(n, e) {
872
872
  for (const c of Object.keys(u))
873
873
  this.hair[c] = { p: null, v: [0, 0] }, this.out[c] = [0, 0];
874
874
  this.strands = i.map(() => ({ p: null, v: [[0, 0], [0, 0], [0, 0], [0, 0]] })), this.out.strands = i.map(() => [[0, 0], [0, 0], [0, 0], [0, 0]]), this.chains = a.map((c) => {
875
- const T = c.tip[0] - c.pivot[0], d = c.tip[1] - c.pivot[1], w = Math.hypot(T, d), B = [T / w, d / w];
876
- return { t: c, dir: B, L1: w * c.split, L2: w * (1 - c.split), pts: null, prev: null, phi: [0, 0], anchor: [0, 0] };
875
+ const T = c.tip[0] - c.pivot[0], d = c.tip[1] - c.pivot[1], w = Math.hypot(T, d), F = [T / w, d / w];
876
+ return { t: c, dir: F, L1: w * c.split, L2: w * (1 - c.split), pts: null, prev: null, phi: [0, 0], anchor: [0, 0] };
877
877
  }), this.time = 0;
878
878
  }
879
879
  hairAnchor(c, T) {
@@ -881,57 +881,57 @@ function Un(n, e) {
881
881
  return t(d, 1, T), r(d, c[1], T), d;
882
882
  }
883
883
  step(c, T) {
884
- const d = Math.max(1, Math.ceil(T / 0.004166666666666667)), w = Math.min(T, 0.05) / d, B = -c.angleZ / 30 * e.head.maxRoll - c.bodyAngleZ / 10 * e.body.maxRoll, Y = this.gain;
885
- i.forEach((_, U) => {
886
- const O = this.strands[U], C = this.out.strands[U], $ = _.nodes.map((j) => this.hairAnchor(j, c));
887
- O.p || (O.p = $.map((j) => [...j]));
888
- const V = U * 1.7;
884
+ const d = Math.max(1, Math.ceil(T / 0.004166666666666667)), w = Math.min(T, 0.05) / d, F = -c.angleZ / 30 * e.head.maxRoll - c.bodyAngleZ / 10 * e.body.maxRoll, Y = this.gain;
885
+ i.forEach((_, B) => {
886
+ const O = this.strands[B], z = this.out.strands[B], D = _.nodes.map((j) => this.hairAnchor(j, c));
887
+ O.p || (O.p = D.map((j) => [...j]));
888
+ const J = B * 1.7;
889
889
  for (let j = 0; j < d; j++) {
890
- const D = this.time + j * w;
891
- for (let H = 1; H < 4; H++) {
892
- const R = Math.hypot(_.nodes[H][0] - _.nodes[0][0], _.nodes[H][1] - _.nodes[0][1]), Z = (Math.sin(D * 1.3) * 0.5 + Math.sin(D * 3.1) * 0.3 + Math.sin(D * 4.7 + V) * 0.2) * _.max * 0.1 * H / 3, P = [O.p[H - 1][0] - $[H - 1][0], O.p[H - 1][1] - $[H - 1][1]], G = $[H][0] + P[0] * m * p.couple - Math.sin(B) * R * 0.12 + Z, J = $[H][1] + P[1] * m * p.couple, q = f[H] * _.k * p.stiff / Math.max(0.35, Y), v = g * p.damp * Math.sqrt(p.stiff) / Math.max(0.5, Math.sqrt(Y)), A = O.v[H], E = O.p[H];
893
- A[0] += (q * (G - E[0]) - v * A[0]) * w, A[1] += (q * (J - E[1]) - v * A[1]) * w, E[0] += A[0] * w, E[1] += A[1] * w;
890
+ const H = this.time + j * w;
891
+ for (let Z = 1; Z < 4; Z++) {
892
+ const $ = Math.hypot(_.nodes[Z][0] - _.nodes[0][0], _.nodes[Z][1] - _.nodes[0][1]), q = (Math.sin(H * 1.3) * 0.5 + Math.sin(H * 3.1) * 0.3 + Math.sin(H * 4.7 + J) * 0.2) * _.max * 0.1 * Z / 3, W = [O.p[Z - 1][0] - D[Z - 1][0], O.p[Z - 1][1] - D[Z - 1][1]], N = D[Z][0] + W[0] * m * p.couple - Math.sin(F) * $ * 0.12 + q, G = D[Z][1] + W[1] * m * p.couple, V = f[Z] * _.k * p.stiff / Math.max(0.35, Y), b = g * p.damp * Math.sqrt(p.stiff) / Math.max(0.5, Math.sqrt(Y)), M = O.v[Z], S = O.p[Z];
893
+ M[0] += (V * (N - S[0]) - b * M[0]) * w, M[1] += (V * (G - S[1]) - b * M[1]) * w, S[0] += M[0] * w, S[1] += M[1] * w;
894
894
  }
895
- O.p[0] = [...$[0]];
895
+ O.p[0] = [...D[0]];
896
896
  }
897
897
  for (let j = 0; j < 4; j++) {
898
- const D = [O.p[j][0] - $[j][0], O.p[j][1] - $[j][1]];
899
- C[j] = y(D, Math.max(0.5, _.max * p.reach * Math.max(1, Y) * j / 3));
898
+ const H = [O.p[j][0] - D[j][0], O.p[j][1] - D[j][1]];
899
+ z[j] = y(H, Math.max(0.5, _.max * p.reach * Math.max(1, Y) * j / 3));
900
900
  }
901
901
  });
902
- for (const [_, U] of Object.entries(u)) {
903
- const O = this.hair[_], C = this.hairAnchor(U.at, c), $ = Math.sin(this.time * 1.3 + U.at[0] * 0.01) * 0.6 + Math.sin(this.time * 2.9 + U.at[1] * 0.02) * 0.4, V = C[0] - Math.sin(B) * U.hang + $ * U.max * 0.12, j = C[1];
904
- O.p || (O.p = [V, j]);
905
- const D = U.k / Math.max(0.35, Y), H = U.c / Math.max(0.5, Math.sqrt(Y));
906
- for (let Z = 0; Z < d; Z++)
907
- O.v[0] += (D * (V - O.p[0]) - H * O.v[0]) * w, O.v[1] += (D * (j - O.p[1]) - H * O.v[1]) * w, O.p[0] += O.v[0] * w, O.p[1] += O.v[1] * w;
908
- const R = [O.p[0] - C[0], O.p[1] - C[1]];
909
- b(R, U.max * Math.max(1, Y)), this.out[_] = R;
902
+ for (const [_, B] of Object.entries(u)) {
903
+ const O = this.hair[_], z = this.hairAnchor(B.at, c), D = Math.sin(this.time * 1.3 + B.at[0] * 0.01) * 0.6 + Math.sin(this.time * 2.9 + B.at[1] * 0.02) * 0.4, J = z[0] - Math.sin(F) * B.hang + D * B.max * 0.12, j = z[1];
904
+ O.p || (O.p = [J, j]);
905
+ const H = B.k / Math.max(0.35, Y), Z = B.c / Math.max(0.5, Math.sqrt(Y));
906
+ for (let q = 0; q < d; q++)
907
+ O.v[0] += (H * (J - O.p[0]) - Z * O.v[0]) * w, O.v[1] += (H * (j - O.p[1]) - Z * O.v[1]) * w, O.p[0] += O.v[0] * w, O.p[1] += O.v[1] * w;
908
+ const $ = [O.p[0] - z[0], O.p[1] - z[1]];
909
+ v($, B.max * Math.max(1, Y)), this.out[_] = $;
910
910
  }
911
911
  this.out.gain = 1;
912
912
  const I = this.out.strands;
913
- for (let _ = 0; _ < p.bind; _++) for (let U = 1; U < 4; U++) {
914
- const O = I.slice(0, l).map((C) => [...C[U]]);
915
- for (let C = 0; C < l; C++) {
916
- const $ = O[Math.max(0, C - 1)], V = O[Math.min(l - 1, C + 1)];
917
- for (const j of [0, 1]) I[C][U][j] = O[C][j] * 0.5 + ($[j] + V[j]) * 0.25;
913
+ for (let _ = 0; _ < p.bind; _++) for (let B = 1; B < 4; B++) {
914
+ const O = I.slice(0, l).map((z) => [...z[B]]);
915
+ for (let z = 0; z < l; z++) {
916
+ const D = O[Math.max(0, z - 1)], J = O[Math.min(l - 1, z + 1)];
917
+ for (const j of [0, 1]) I[z][B][j] = O[z][j] * 0.5 + (D[j] + J[j]) * 0.25;
918
918
  }
919
919
  }
920
920
  for (const _ of this.chains) {
921
- const U = o(_.t, c, this.out, [0, 0]);
922
- _.st || (_.st = { th: [0, 0], w: [0, 0], pos: [...U], vel: [0, 0], acc: [0, 0] });
923
- const O = _.st, C = h, $ = [(U[0] - O.pos[0]) / Math.max(T, 1e-3), (U[1] - O.pos[1]) / Math.max(T, 1e-3)], V = 1 - Math.exp(-T * C.smooth), j = [($[0] - O.vel[0]) / Math.max(T, 1e-3), ($[1] - O.vel[1]) / Math.max(T, 1e-3)];
924
- O.acc = [O.acc[0] + (j[0] - O.acc[0]) * V, O.acc[1] + (j[1] - O.acc[1]) * V], O.vel = [O.vel[0] + ($[0] - O.vel[0]) * V, O.vel[1] + ($[1] - O.vel[1]) * V], O.pos = [...U];
925
- const D = [-_.dir[1], _.dir[0]], H = -(O.acc[0] * D[0] + O.acc[1] * D[1]) / (_.L1 + _.L2) * C.inertia, R = (Math.sin(this.time * 0.9 + _.t.pivot[0]) * 0.6 + Math.sin(this.time * 0.37 + _.t.pivot[1]) * 0.4) * C.wind, Z = -B * C.hang + R, P = 2 * Math.PI * C.freq / Math.sqrt(Math.max(0.4, Y)), G = P * 1.35;
926
- for (let A = 0; A < d; A++) {
927
- const E = -P * P * (O.th[0] - Z) - 2 * C.zeta * P * O.w[0] + H;
928
- O.w[0] += E * w, O.th[0] += O.w[0] * w;
929
- const k = -G * G * (O.th[1] - O.th[0]) - 2 * C.zeta * G * O.w[1] + H * 0.4 + E * 0.5;
930
- O.w[1] += k * w, O.th[1] += O.w[1] * w;
921
+ const B = o(_.t, c, this.out, [0, 0]);
922
+ _.st || (_.st = { th: [0, 0], w: [0, 0], pos: [...B], vel: [0, 0], acc: [0, 0] });
923
+ const O = _.st, z = h, D = [(B[0] - O.pos[0]) / Math.max(T, 1e-3), (B[1] - O.pos[1]) / Math.max(T, 1e-3)], J = 1 - Math.exp(-T * z.smooth), j = [(D[0] - O.vel[0]) / Math.max(T, 1e-3), (D[1] - O.vel[1]) / Math.max(T, 1e-3)];
924
+ O.acc = [O.acc[0] + (j[0] - O.acc[0]) * J, O.acc[1] + (j[1] - O.acc[1]) * J], O.vel = [O.vel[0] + (D[0] - O.vel[0]) * J, O.vel[1] + (D[1] - O.vel[1]) * J], O.pos = [...B];
925
+ const H = [-_.dir[1], _.dir[0]], Z = -(O.acc[0] * H[0] + O.acc[1] * H[1]) / (_.L1 + _.L2) * z.inertia, $ = (Math.sin(this.time * 0.9 + _.t.pivot[0]) * 0.6 + Math.sin(this.time * 0.37 + _.t.pivot[1]) * 0.4) * z.wind, q = -F * z.hang + $, W = 2 * Math.PI * z.freq / Math.sqrt(Math.max(0.4, Y)), N = W * 1.35;
926
+ for (let M = 0; M < d; M++) {
927
+ const S = -W * W * (O.th[0] - q) - 2 * z.zeta * W * O.w[0] + Z;
928
+ O.w[0] += S * w, O.th[0] += O.w[0] * w;
929
+ const L = -N * N * (O.th[1] - O.th[0]) - 2 * z.zeta * N * O.w[1] + Z * 0.4 + S * 0.5;
930
+ O.w[1] += L * w, O.th[1] += O.w[1] * w;
931
931
  }
932
- O.th[0] = Math.max(-0.55, Math.min(C.max, O.th[0])), O.th[1] = Math.max(-0.55 * 1.4, Math.min(C.max * 1.4, O.th[1])), _.phi = [O.th[0], O.th[1]];
933
- const J = S(_.dir, O.th[0]), q = S(_.dir, O.th[1]), v = [U[0] + J[0] * _.L1, U[1] + J[1] * _.L1];
934
- _.pts = [[...U], v, [v[0] + q[0] * _.L2, v[1] + q[1] * _.L2]], _.anchor = U;
932
+ O.th[0] = Math.max(-0.55, Math.min(z.max, O.th[0])), O.th[1] = Math.max(-0.55 * 1.4, Math.min(z.max * 1.4, O.th[1])), _.phi = [O.th[0], O.th[1]];
933
+ const G = E(_.dir, O.th[0]), V = E(_.dir, O.th[1]), b = [B[0] + G[0] * _.L1, B[1] + G[1] * _.L1];
934
+ _.pts = [[...B], b, [b[0] + V[0] * _.L2, b[1] + V[1] * _.L2]], _.anchor = B;
935
935
  }
936
936
  return this.time += T, this.out;
937
937
  }
@@ -939,8 +939,8 @@ function Un(n, e) {
939
939
  return { Physics: x };
940
940
  }
941
941
  function Yn(n, e) {
942
- const { baseWeights: t, deformBase: r, MOUTH: a } = n, o = (d, w, B) => {
943
- const Y = Math.min(1, Math.max(0, (B - d) / (w - d)));
942
+ const { baseWeights: t, deformBase: r, MOUTH: a } = n, o = (d, w, F) => {
943
+ const Y = Math.min(1, Math.max(0, (F - d) / (w - d)));
944
944
  return Y * Y * (3 - 2 * Y);
945
945
  }, i = e.mouth.area, f = {
946
946
  a: { sprite: "mouth_a", ref: 0.9, width: 1 },
@@ -951,16 +951,16 @@ function Yn(n, e) {
951
951
  u: { sprite: "mouth_o", ref: 0.75, width: 0.78 }
952
952
  }, m = 0.16, g = ["angry", "sad"];
953
953
  function p(d, w) {
954
- const Y = (U, O, C) => U >= O - (w ? 0.07 : 0) && U < C + (w ? 0.07 : 0), I = [["i", -9, -0.55], ["e", -0.55, -0.2], ["a", -0.2, 0.35], ["o", 0.35, 0.75], ["u", 0.75, 9]], _ = w && I.find((U) => U[0] === w || w === "aHalf" && U[0] === "a");
955
- return _ && Y(d, _[1], _[2]) ? _[0] : I.find((U) => d >= U[1] && d < U[2])[0];
954
+ const Y = (B, O, z) => B >= O - (w ? 0.07 : 0) && B < z + (w ? 0.07 : 0), I = [["i", -9, -0.55], ["e", -0.55, -0.2], ["a", -0.2, 0.35], ["o", 0.35, 0.75], ["u", 0.75, 9]], _ = w && I.find((B) => B[0] === w || w === "aHalf" && B[0] === "a");
955
+ return _ && Y(d, _[1], _[2]) ? _[0] : I.find((B) => d >= B[1] && d < B[2])[0];
956
956
  }
957
- const l = 0.75, h = 0.3, S = 0.06, y = ["sad", "surprise"];
958
- function u(d, w, B = null) {
959
- return B && d >= h ? B : d >= l ? null : d < h ? w >= 0.5 ? "eyes_smile" : "eyes_closed" : "eyes_half";
957
+ const l = 0.75, h = 0.3, E = 0.06, y = ["sad", "surprise"];
958
+ function u(d, w, F = null) {
959
+ return F && d >= h ? F : d >= l ? null : d < h ? w >= 0.5 ? "eyes_smile" : "eyes_closed" : "eyes_half";
960
960
  }
961
- function b(d, w, B = null) {
961
+ function v(d, w, F = null) {
962
962
  if (d < m) return null;
963
- const Y = p(w, B);
963
+ const Y = p(w, F);
964
964
  return Y === "a" ? d >= 0.6 ? "a" : "aHalf" : Y;
965
965
  }
966
966
  function x(d) {
@@ -970,77 +970,80 @@ function Yn(n, e) {
970
970
  return i.cx;
971
971
  }
972
972
  function c(d, w) {
973
- const B = Math.cos(-i.angle), Y = Math.sin(-i.angle), I = d - i.cx, _ = w - i.cy, U = (I * B - _ * Y) / i.rx, O = (I * Y + _ * B) / i.ry;
974
- return 1 - o(0.55, 0.95, Math.hypot(U, O));
975
- }
976
- function T(d, w, B, Y, I) {
977
- const _ = {}, U = (R) => R.startsWith("eyes_closed") || R.startsWith("eyes_smile"), O = (R) => g.some((Z) => R === `mouth_${Z}`), C = (R) => U(R) ? 1 : R.startsWith("eyes_") ? 0 : O(R) ? 2 : 3, $ = Object.entries(w.layers).sort((R, Z) => C(R[0]) - C(Z[0]));
978
- for (const [R, Z] of $) {
979
- const P = Y(Z, e.mesh.spriteCell, I(B[R]), B[R].width), G = [], J = [];
980
- for (let v = 0; v < P.rest.length / 2; v++) {
981
- const A = P.rest[v * 2], E = P.rest[v * 2 + 1];
982
- G.push(t(A, E, 0)), J.push(R.startsWith("mouth") ? c(A, E) : 0);
973
+ const F = Math.cos(-i.angle), Y = Math.sin(-i.angle), I = d - i.cx, _ = w - i.cy, B = (I * F - _ * Y) / i.rx, O = (I * Y + _ * F) / i.ry;
974
+ return 1 - o(0.55, 0.95, Math.hypot(B, O));
975
+ }
976
+ function T(d, w, F, Y, I) {
977
+ const _ = {}, B = (N) => N.startsWith("eyes_closed") || N.startsWith("eyes_smile"), O = (N) => g.some((G) => N === `mouth_${G}`), z = (N) => B(N) ? 1 : N.startsWith("eyes_") ? 0 : O(N) ? 2 : 3, D = Object.entries(w.layers).sort((N, G) => z(N[0]) - z(G[0]));
978
+ for (const [N, G] of D) {
979
+ const V = Y(G, e.mesh.spriteCell, I(F[N]), F[N].width), b = [], M = [];
980
+ for (let L = 0; L < V.rest.length / 2; L++) {
981
+ const U = V.rest[L * 2], X = V.rest[L * 2 + 1];
982
+ b.push(t(U, X, 0)), M.push(N.startsWith("mouth") ? c(U, X) : 0);
983
983
  }
984
- const q = d.addLayer(R, B[R], P, { color: [0.4, 1, 0.8, 0.6] });
985
- q.visible = !1, _[R] = { mesh: P, W: G, inner: J, layer: q };
986
- }
987
- const V = [0, 0];
988
- let j = null;
989
- const D = [0, 1].map(() => ({ cur: "open", prev: "open", t: 1 }));
990
- function H(R, Z, P, G, J = 1) {
991
- const q = R.mesh.rest, v = R.mesh.pos;
992
- for (let A = 0; A < R.W.length; A++) {
993
- let E = q[A * 2], k = q[A * 2 + 1];
994
- const N = R.inner[A];
995
- if (N > 0) {
996
- const z = x(E);
997
- k = z + (k - z) * (1 + (G - 1) * N), E = s() + (E - s()) * (1 + (J - 1) * N);
984
+ const S = d.addLayer(N, F[N], V, { color: [0.4, 1, 0.8, 0.6] });
985
+ S.visible = !1, _[N] = { mesh: V, W: b, inner: M, layer: S };
986
+ }
987
+ const J = [0, 1].map((N) => !!(_[`eyes_closed_${N}`] && _[`eyes_half_${N}`])), j = Object.values(f).some((N) => _[N.sprite]), H = (N, G) => (N === "eyes_smile" && !_[`eyes_smile_${G}`] && (N = "eyes_closed"), N === "open" || _[`${N}_${G}`] ? N : "open"), Z = [0, 0];
988
+ let $ = null;
989
+ const q = [0, 1].map(() => ({ cur: "open", prev: "open", t: 1 }));
990
+ function W(N, G, V, b, M = 1) {
991
+ const S = N.mesh.rest, L = N.mesh.pos;
992
+ for (let U = 0; U < N.W.length; U++) {
993
+ let X = S[U * 2], k = S[U * 2 + 1];
994
+ const P = N.inner[U];
995
+ if (P > 0) {
996
+ const A = x(X);
997
+ k = A + (k - A) * (1 + (b - 1) * P), X = s() + (X - s()) * (1 + (M - 1) * P);
998
998
  }
999
- r(E, k, R.W[A], Z, P, V), v[A * 2] = V[0], v[A * 2 + 1] = V[1];
999
+ r(X, k, N.W[U], G, V, Z), L[U * 2] = Z[0], L[U * 2 + 1] = Z[1];
1000
1000
  }
1001
1001
  }
1002
1002
  return {
1003
1003
  /**
1004
1004
  * Show / hide and deform the sprites for this frame.
1005
- * Returns which eyes are covered by a sprite, so the layered eye parts can be hidden.
1005
+ * Returns which eyes are covered by a sprite, so the layered eye parts can be hidden, and
1006
+ * whether a drawing shows the mouth, so the shader mouth can be left out.
1006
1007
  * `mood` (angry / sad / surprise) picks drawn expression eyes (sad, surprise) and closed
1007
1008
  * mouths (angry, sad) when the avatar has them.
1008
1009
  */
1009
- update(R, Z, P = 1 / 60, G = null) {
1010
- for (const N of Object.values(_)) N.layer.visible = !1;
1011
- const J = [!1, !1];
1010
+ update(N, G, V = 1 / 60, b = null) {
1011
+ for (const P of Object.values(_)) P.layer.visible = !1;
1012
+ const M = [!1, !1];
1012
1013
  [
1013
- [R.eyeROpen, R.eyeSmile],
1014
- [R.eyeLOpen, R.eyeSmileL ?? R.eyeSmile]
1015
- ].forEach(([N, z], F) => {
1016
- const X = D[F], M = y.includes(G) && _[`eyes_${G}_${F}`] ? `eyes_${G}` : null, L = u(N, z, M) ?? "open";
1017
- L !== X.cur && (X.prev = X.cur, X.cur = L, X.t = 0), X.t = P > 0 ? Math.min(1, X.t + P / S) : 1;
1018
- const W = o(0, 1, X.t), Q = (ee, ce) => {
1019
- if (ee === "open" || ce <= 1e-3) return;
1020
- const oe = _[`${ee}_${F}`];
1021
- oe && (oe.layer.visible = !0, oe.layer.alpha = ce, H(oe, R, Z, 1));
1022
- }, ne = (ee) => ee === "open" ? -1 : U(ee) ? 1 : 0;
1023
- X.t >= 1 ? Q(X.cur, 1) : ne(X.cur) > ne(X.prev) ? (Q(X.prev, 1), Q(X.cur, W)) : (Q(X.cur, 1), Q(X.prev, 1 - W)), J[F] = X.cur !== "open" && W >= 0.999;
1014
+ [N.eyeROpen, N.eyeSmile],
1015
+ [N.eyeLOpen, N.eyeSmileL ?? N.eyeSmile]
1016
+ ].forEach(([P, A], R) => {
1017
+ const C = q[R], Q = y.includes(b) && _[`eyes_${b}_${R}`] ? `eyes_${b}` : null, te = H(u(P, A, Q) ?? "open", R);
1018
+ te !== C.cur && (C.prev = C.cur, C.cur = te, C.t = 0), C.t = V > 0 ? Math.min(1, C.t + V / E) : 1;
1019
+ const ne = o(0, 1, C.t), ie = (me, He) => {
1020
+ if (me === "open" || He <= 1e-3) return;
1021
+ const we = _[`${me}_${R}`];
1022
+ we && (we.layer.visible = !0, we.layer.alpha = He, W(we, N, G, 1));
1023
+ }, se = (me) => me === "open" ? -1 : B(me) ? 1 : 0;
1024
+ C.t >= 1 ? ie(C.cur, 1) : se(C.cur) > se(C.prev) ? (ie(C.prev, 1), ie(C.cur, ne)) : (ie(C.cur, 1), ie(C.prev, 1 - ne)), M[R] = C.cur !== "open" && ne >= 0.999;
1024
1025
  });
1025
- const v = b(R.mouthOpen, R.mouthForm, j);
1026
- j = v;
1027
- const A = v && f[v], E = A && _[A.sprite], k = g.includes(G) && _[`mouth_${G}`];
1028
- if (k && (!E || R.mouthOpen < m + 0.04) && (k.layer.visible = !0, k.layer.alpha = 1, H(k, R, Z, 1)), E) {
1029
- E.layer.visible = !0, E.layer.alpha = o(m, m + 0.04, R.mouthOpen);
1030
- const N = Math.min(1.1, Math.max(0.5, R.mouthOpen / A.ref));
1031
- H(E, R, Z, N, A.width);
1026
+ const L = v(N.mouthOpen, N.mouthForm, $);
1027
+ $ = L;
1028
+ const U = L && f[L], X = U && _[U.sprite], k = g.includes(b) && _[`mouth_${b}`];
1029
+ if (k && (!X || N.mouthOpen < m + 0.04) && (k.layer.visible = !0, k.layer.alpha = 1, W(k, N, G, 1)), X) {
1030
+ X.layer.visible = !0, X.layer.alpha = o(m, m + 0.04, N.mouthOpen);
1031
+ const P = Math.min(1.1, Math.max(0.5, N.mouthOpen / U.ref));
1032
+ W(X, N, G, P, U.width);
1032
1033
  }
1033
- return { eyes: J, mouth: v };
1034
- }
1034
+ return { eyes: M, mouth: L, mouthDrawn: j && (!U || !!X) };
1035
+ },
1036
+ /** Whether each eye has the closed and half-closed drawings, so the layered eye stays open. */
1037
+ eyesDrawn: J
1035
1038
  };
1036
1039
  }
1037
- return { createSprites: T, mouthShape: b, eyeSprite: u };
1040
+ return { createSprites: T, mouthShape: v, eyeSprite: u };
1038
1041
  }
1039
- const It = { angry: "angry", angryTalk: "angry", sad: "sad", sadTalk: "sad", surprise: "surprise", surprisedTalk: "surprise" };
1042
+ const Nt = { angry: "angry", angryTalk: "angry", sad: "sad", sadTalk: "sad", surprise: "surprise", surprisedTalk: "surprise" };
1040
1043
  function In(n, e) {
1041
- return n && n !== "neutral" ? It[n] ?? null : (e && It[e]) ?? null;
1044
+ return n && n !== "neutral" ? Nt[n] ?? null : (e && Nt[e]) ?? null;
1042
1045
  }
1043
- function wt(n) {
1046
+ function At(n) {
1044
1047
  if (!n || typeof n != "object" || Array.isArray(n)) throw new TypeError("lipSync: expected an object");
1045
1048
  const e = n, t = {};
1046
1049
  for (const r of ["granularity", "openness", "closeSpeed"]) {
@@ -1058,29 +1061,29 @@ function wt(n) {
1058
1061
  }
1059
1062
  return t;
1060
1063
  }
1061
- function Nt(n = {}, e = {
1064
+ function jt(n = {}, e = {
1062
1065
  granularity: 0.5,
1063
1066
  openness: 0.5,
1064
1067
  closeSpeed: 0.5
1065
1068
  }) {
1066
- const t = wt(n);
1069
+ const t = At(n);
1067
1070
  return {
1068
1071
  granularity: t.granularity ?? e.granularity,
1069
1072
  openness: t.openness ?? e.openness,
1070
1073
  closeSpeed: t.closeSpeed ?? e.closeSpeed
1071
1074
  };
1072
1075
  }
1073
- const Me = (n, e, t, r) => n === 0.5 ? t : n < 0.5 ? e + (t - e) * n * 2 : t + (r - t) * (n - 0.5) * 2;
1074
- function jt(n) {
1076
+ const Se = (n, e, t, r) => n === 0.5 ? t : n < 0.5 ? e + (t - e) * n * 2 : t + (r - t) * (n - 0.5) * 2;
1077
+ function Xt(n) {
1075
1078
  return {
1076
- arm: Me(n.granularity, 0.2, 0.6, 0.9),
1077
- trigger: Me(n.granularity, 0.65, 0.8, 0.95),
1078
- relax: Me(n.granularity, 1.5, 5, 12),
1079
- range: Me(n.granularity, 0.7, 0.3, 0.05),
1080
- risePower: Me(n.granularity, 0.05, 0.3, 0.8),
1081
- openness: Me(n.openness, 0.55, 1, 1.25),
1082
- audioRelease: Me(n.closeSpeed, 6, 32, 45),
1083
- kanaRelease: Me(n.closeSpeed, 6, 22, 45)
1079
+ arm: Se(n.granularity, 0.2, 0.6, 0.9),
1080
+ trigger: Se(n.granularity, 0.65, 0.8, 0.95),
1081
+ relax: Se(n.granularity, 1.5, 5, 12),
1082
+ range: Se(n.granularity, 0.7, 0.3, 0.05),
1083
+ risePower: Se(n.granularity, 0.05, 0.3, 0.8),
1084
+ openness: Se(n.openness, 0.55, 1, 1.25),
1085
+ audioRelease: Se(n.closeSpeed, 6, 32, 45),
1086
+ kanaRelease: Se(n.closeSpeed, 6, 22, 45)
1084
1087
  };
1085
1088
  }
1086
1089
  const Nn = /* @__PURE__ */ new Set([
@@ -1093,7 +1096,7 @@ const Nn = /* @__PURE__ */ new Set([
1093
1096
  "handAngle",
1094
1097
  "gazeX",
1095
1098
  "gazeY"
1096
- ]), At = {
1099
+ ]), Mt = {
1097
1100
  nod: {
1098
1101
  label: "Nod",
1099
1102
  dur: 1.7,
@@ -1241,7 +1244,7 @@ const Nn = /* @__PURE__ */ new Set([
1241
1244
  blush: [[0, 0], [1.6, 0.3], [2.6, 0]]
1242
1245
  }
1243
1246
  }
1244
- }, Mt = {
1247
+ }, Et = {
1245
1248
  lookAround: {
1246
1249
  label: "Look around",
1247
1250
  dur: 5.2,
@@ -1487,10 +1490,10 @@ function jn(n, e) {
1487
1490
  if (e >= n[t][0]) return n[t][1];
1488
1491
  let r = 0;
1489
1492
  for (; e > n[r + 1][0]; ) r++;
1490
- const [a, o] = n[r], [i, f] = n[r + 1], m = (u) => u <= 0 || u >= t ? 0 : (n[u + 1][1] - n[u - 1][1]) / (n[u + 1][0] - n[u - 1][0]), g = i - a, p = (e - a) / g, l = m(r) * g, h = m(r + 1) * g, S = p * p, y = S * p;
1491
- return (2 * y - 3 * S + 1) * o + (y - 2 * S + p) * l + (-2 * y + 3 * S) * f + (y - S) * h;
1493
+ const [a, o] = n[r], [i, f] = n[r + 1], m = (u) => u <= 0 || u >= t ? 0 : (n[u + 1][1] - n[u - 1][1]) / (n[u + 1][0] - n[u - 1][0]), g = i - a, p = (e - a) / g, l = m(r) * g, h = m(r + 1) * g, E = p * p, y = E * p;
1494
+ return (2 * y - 3 * E + 1) * o + (y - 2 * E + p) * l + (-2 * y + 3 * E) * f + (y - E) * h;
1492
1495
  }
1493
- const Ce = {
1496
+ const ze = {
1494
1497
  a: { open: 0.9, form: 0, label: "あ" },
1495
1498
  i: { open: 0.5, form: -0.85, label: "い" },
1496
1499
  u: { open: 0.4, form: 0.9, label: "う" },
@@ -1504,15 +1507,15 @@ const Ce = {
1504
1507
  u: "うくすつぬふむゆるぐずづぶぷぅゔ",
1505
1508
  e: "えけせてねへめれげぜでべぺぇ",
1506
1509
  o: "おこそとのほもよろをごぞどぼぽぉ"
1507
- }, Qt = {};
1508
- for (const [n, e] of Object.entries(Xn)) for (const t of e) Qt[t] = n;
1509
- const Cn = /* @__PURE__ */ new Set([..."まみむめもばびぶべぼぱぴぷぺぽ"]), zn = /* @__PURE__ */ new Set([..."あいうえおぁぃぅぇぉ"]), Xt = { ゃ: "a", ゅ: "u", ょ: "o" }, Pn = /* @__PURE__ */ new Set([..."、。,.,.!?!?  …"]), $n = (n) => n.replace(/[ァ-ヶ]/g, (e) => String.fromCharCode(e.charCodeAt(0) - 96));
1510
+ }, en = {};
1511
+ for (const [n, e] of Object.entries(Xn)) for (const t of e) en[t] = n;
1512
+ const $n = /* @__PURE__ */ new Set([..."まみむめもばびぶべぼぱぴぷぺぽ"]), Cn = /* @__PURE__ */ new Set([..."あいうえおぁぃぅぇぉ"]), $t = { ゃ: "a", ゅ: "u", ょ: "o" }, zn = /* @__PURE__ */ new Set([..."、。,.,.!?!?  …"]), Pn = (n) => n.replace(/[ァ-ヶ]/g, (e) => String.fromCharCode(e.charCodeAt(0) - 96));
1510
1513
  function Dn(n, e = 0.14) {
1511
1514
  const t = [];
1512
- for (const r of $n(n)) {
1515
+ for (const r of Pn(n)) {
1513
1516
  const a = t[t.length - 1];
1514
- if (Xt[r] && a) {
1515
- a.vowel = Xt[r];
1517
+ if ($t[r] && a) {
1518
+ a.vowel = $t[r];
1516
1519
  continue;
1517
1520
  }
1518
1521
  if (r === "ー" && a) {
@@ -1527,12 +1530,12 @@ function Dn(n, e = 0.14) {
1527
1530
  t.push({ vowel: "n", dur: e, onset: null });
1528
1531
  continue;
1529
1532
  }
1530
- if (Pn.has(r)) {
1533
+ if (zn.has(r)) {
1531
1534
  t.push({ vowel: "n", dur: e * 2.2, onset: null });
1532
1535
  continue;
1533
1536
  }
1534
- const o = Qt[r];
1535
- o && t.push({ vowel: o, dur: e, onset: Cn.has(r) ? "lips" : zn.has(r) ? null : "consonant" });
1537
+ const o = en[r];
1538
+ o && t.push({ vowel: o, dur: e, onset: $n.has(r) ? "lips" : Cn.has(r) ? null : "consonant" });
1536
1539
  }
1537
1540
  return t;
1538
1541
  }
@@ -1541,7 +1544,7 @@ function Hn(n, e, t = 0.5) {
1541
1544
  let r = 0;
1542
1545
  for (const a of n) {
1543
1546
  if (e < r + a.dur) {
1544
- const o = (e - r) / a.dur, i = Ce[a.vowel], f = a.onset === "lips" ? 0.05 : a.onset === "consonant" ? 0.45 : 1, m = o < 0.35 ? f + (1 - f) * (o / 0.35) : 1;
1547
+ const o = (e - r) / a.dur, i = ze[a.vowel], f = a.onset === "lips" ? 0.05 : a.onset === "consonant" ? 0.45 : 1, m = o < 0.35 ? f + (1 - f) * (o / 0.35) : 1;
1545
1548
  return { open: i.open * m, form: i.form, vowel: a.vowel };
1546
1549
  }
1547
1550
  r += a.dur;
@@ -1554,14 +1557,14 @@ function Zn(n, e, t) {
1554
1557
  for (const f of n) {
1555
1558
  let m = f.vowel;
1556
1559
  if (f.vowel === "n" ? r && f.dur <= 0.2 && i ? m = i : (o = 0, i = null) : ((!i || o >= r) && (i = f.vowel, o = 0), o += f.dur, r && (m = i)), e < a + f.dur) {
1557
- const g = Ce[m], p = f.onset === "lips" ? 0.05 : f.onset === "consonant" ? 0.45 : 1, l = t < 0.5 ? 1 - (1 - p) * t * 2 : p * (2 - t * 2), h = Math.min(f.dur * 0.35, 0.05), S = (e - a) / h;
1558
- return { open: g.open * (S < 1 ? l + (1 - l) * S : 1), form: g.form, vowel: m };
1560
+ const g = ze[m], p = f.onset === "lips" ? 0.05 : f.onset === "consonant" ? 0.45 : 1, l = t < 0.5 ? 1 - (1 - p) * t * 2 : p * (2 - t * 2), h = Math.min(f.dur * 0.35, 0.05), E = (e - a) / h;
1561
+ return { open: g.open * (E < 1 ? l + (1 - l) * E : 1), form: g.form, vowel: m };
1559
1562
  }
1560
1563
  a += f.dur;
1561
1564
  }
1562
1565
  return null;
1563
1566
  }
1564
- const tt = { ...At, ...Mt }, Ct = { amp: 1, stiff: 1.8 }, Wn = /^(angle|bodyAngle|armAngle|handAngle)/, Gn = /* @__PURE__ */ new Set([
1567
+ const nt = { ...Mt, ...Et }, Ct = { amp: 1, stiff: 1.8 }, Wn = /^(angle|bodyAngle|armAngle|handAngle)/, Gn = /* @__PURE__ */ new Set([
1565
1568
  "eyeOpen",
1566
1569
  "eyeOpenL",
1567
1570
  "eyeSmileL",
@@ -1571,7 +1574,7 @@ const tt = { ...At, ...Mt }, Ct = { amp: 1, stiff: 1.8 }, Wn = /^(angle|bodyAngl
1571
1574
  "blush",
1572
1575
  "browY",
1573
1576
  "browAngle"
1574
- ]), Ge = (n, e, t) => {
1577
+ ]), Ve = (n, e, t) => {
1575
1578
  const r = Math.min(1, Math.max(0, (t - n) / (e - n)));
1576
1579
  return r * r * (3 - 2 * r);
1577
1580
  };
@@ -1582,7 +1585,7 @@ function zt(n, e) {
1582
1585
  }, o = r * r * (3 - 2 * r);
1583
1586
  return (a(t) * (1 - o) + a(t + 1) * o) * 2 - 1;
1584
1587
  }
1585
- const we = (n, e) => zt(n, e) * 0.7 + zt(n * 2.3, e + 9) * 0.3, me = (n, e, t) => Math.max(e, Math.min(t, n)), en = {
1588
+ const Me = (n, e) => zt(n, e) * 0.7 + zt(n * 2.3, e + 9) * 0.3, pe = (n, e, t) => Math.max(e, Math.min(t, n)), tn = {
1586
1589
  normal: { label: "Neutral", p: {} },
1587
1590
  smile: { label: "Smile", p: { eyeOpen: 0, eyeSmile: 1, blush: 0.35, browY: 0.2 } },
1588
1591
  shy: { label: "Blush", p: { eyeOpen: 0.78, eyeSmile: 0.5, blush: 1, browAngle: -0.5, browY: -0.1, glance: [0.7, 0.35] } },
@@ -1617,20 +1620,20 @@ const we = (n, e) => zt(n, e) * 0.7 + zt(n * 2.3, e + 9) * 0.3, me = (n, e, t) =
1617
1620
  class qn {
1618
1621
  /** @param {number[]} gazeCenter */
1619
1622
  constructor(e) {
1620
- this.mode = "auto", this.P = Object.fromEntries(Ze.map((t) => [t.id, t.def])), this.manual = { ...this.P }, this.cur = { ...this.P }, this.vel = Object.fromEntries(Ze.map((t) => [t.id, 0])), this.expr = "normal", this.exprMix = {}, this.t = 0, this.blink = { t: 0, start: 1.5, double: !1 }, this.gaze = { x: 0, y: 0, next: 0 }, this.tap = { next: 4, until: -1 }, this.pointer = null, this.faceCenter = [...e], this.lipOpen = null, this.lipForm = 0, this.speaking = !1, this.voice = 0, this.mouth = 0, this.vowel = "a", this.vowelForm = 0, this.lipSync = Nt(), this.lipMotion = jt(this.lipSync), this.syllableArmed = !0, this.voicePeak = 0, this.voiceTrough = 0, this.kana = null, this.lipHold = null, this.emotionUntil = 0, this.talkGain = 1, this.play = null, this.autoMotion = !0, this.nextAuto = 14, this.autoIdle = !0, this.nextIdle = 3, this.lastAuto = null, this.onMotion = null;
1623
+ this.mode = "auto", this.P = Object.fromEntries(We.map((t) => [t.id, t.def])), this.manual = { ...this.P }, this.cur = { ...this.P }, this.vel = Object.fromEntries(We.map((t) => [t.id, 0])), this.expr = "normal", this.exprMix = {}, this.t = 0, this.blink = { t: 0, start: 1.5, double: !1 }, this.gaze = { x: 0, y: 0, next: 0 }, this.tap = { next: 4, until: -1 }, this.pointer = null, this.faceCenter = [...e], this.lipOpen = null, this.lipForm = 0, this.speaking = !1, this.voice = 0, this.mouth = 0, this.vowel = "a", this.vowelForm = 0, this.lipSync = jt(), this.lipMotion = Xt(this.lipSync), this.syllableArmed = !0, this.voicePeak = 0, this.voiceTrough = 0, this.kana = null, this.lipHold = null, this.emotionUntil = 0, this.talkGain = 1, this.play = null, this.autoMotion = !0, this.nextAuto = 14, this.autoIdle = !0, this.nextIdle = 3, this.lastAuto = null, this.onMotion = null;
1621
1624
  }
1622
1625
  setExpression(e) {
1623
1626
  this.expr = e;
1624
1627
  }
1625
1628
  hasMotion(e) {
1626
- return e in tt;
1629
+ return e in nt;
1627
1630
  }
1628
1631
  // ---- speech (driven from outside, e.g. by the TTS audio analyser) ----
1629
1632
  setVoiceLevel(e) {
1630
1633
  this.voice = Math.min(1, Math.max(0, Number(e) || 0));
1631
1634
  }
1632
1635
  setLipSync(e) {
1633
- this.lipSync = Nt(e, this.lipSync), this.lipMotion = jt(this.lipSync);
1636
+ this.lipSync = jt(e, this.lipSync), this.lipMotion = Xt(this.lipSync);
1634
1637
  }
1635
1638
  setSpeaking(e) {
1636
1639
  e !== this.speaking && (this.speaking = !!e, e || (this.emotionUntil = this.t + 1.2, this.voice = 0));
@@ -1644,11 +1647,11 @@ class qn {
1644
1647
  /** @param {string} text @param {{ speed?: number, loop?: boolean }} [options] */
1645
1648
  speakKana(e, { speed: t, loop: r = !1 } = {}) {
1646
1649
  this.lipHold = null;
1647
- const a = Dn(e, t === void 0 ? 0.14 : 1 / me(Number(t) || 7, 4, 12));
1650
+ const a = Dn(e, t === void 0 ? 0.14 : 1 / pe(Number(t) || 7, 4, 12));
1648
1651
  this.kana = a.length ? { moras: a, t: 0, loop: r, duration: a.reduce((o, i) => o + i.dur, 0) } : null;
1649
1652
  }
1650
1653
  holdMouth(e) {
1651
- this.kana = null, this.lipHold = Object.hasOwn(Ce, e) ? e : null;
1654
+ this.kana = null, this.lipHold = Object.hasOwn(ze, e) ? e : null;
1652
1655
  }
1653
1656
  stopLipSync() {
1654
1657
  this.kana = null, this.lipHold = null, this.lipOpen = null, this.mouth = 0;
@@ -1665,10 +1668,10 @@ class qn {
1665
1668
  speechMouth(e) {
1666
1669
  if (this.kana || this.lipHold) {
1667
1670
  let h;
1668
- if (this.lipHold ? h = Ce[this.lipHold] : (this.kana.t += e, this.kana.loop && (this.kana.t %= this.kana.duration), h = Hn(this.kana.moras, this.kana.t, this.lipSync.granularity)), !h)
1671
+ if (this.lipHold ? h = ze[this.lipHold] : (this.kana.t += e, this.kana.loop && (this.kana.t %= this.kana.duration), h = Hn(this.kana.moras, this.kana.t, this.lipSync.granularity)), !h)
1669
1672
  return this.kana = null, this.mouth > 0.01 ? [this.mouth *= this.lipSync.closeSpeed === 0.5 ? 0.6 : Math.exp(-e * this.lipMotion.kanaRelease), this.vowelForm] : null;
1670
- const S = this.lipMotion.openness === 1 ? h.open : Math.min(1, h.open * this.lipMotion.openness), y = S > this.mouth ? 1 - Math.exp(-e * 30) : 1 - Math.exp(-e * this.lipMotion.kanaRelease);
1671
- return this.mouth += (S - this.mouth) * y, h.form !== null && (this.vowelForm = h.form), [this.mouth, this.vowelForm];
1673
+ const E = this.lipMotion.openness === 1 ? h.open : Math.min(1, h.open * this.lipMotion.openness), y = E > this.mouth ? 1 - Math.exp(-e * 30) : 1 - Math.exp(-e * this.lipMotion.kanaRelease);
1674
+ return this.mouth += (E - this.mouth) * y, h.form !== null && (this.vowelForm = h.form), [this.mouth, this.vowelForm];
1672
1675
  }
1673
1676
  const t = this.speaking ? this.voice : 0, r = 1 - Math.exp(-e * this.lipMotion.relax);
1674
1677
  this.voicePeak = t > this.voicePeak ? t : this.voicePeak + (t - this.voicePeak) * r, this.voiceTrough = t < this.voiceTrough ? t : this.voiceTrough + (t - this.voiceTrough) * r;
@@ -1679,7 +1682,7 @@ class qn {
1679
1682
  const h = Math.random();
1680
1683
  this.vowel = h < 0.4 ? "a" : h < 0.58 ? "o" : h < 0.74 ? "e" : h < 0.88 ? "i" : "u";
1681
1684
  }
1682
- const o = this.voicePeak - this.voiceTrough, i = o < a * this.lipMotion.range ? 1 : Math.max(0, (t - this.voiceTrough) / o), f = Ce[this.vowel ?? "a"], m = Math.min(1, Math.pow(t, 0.7) * 1.15) * Math.pow(i, this.lipMotion.risePower), g = this.speaking ? Math.min(0.95, m) * (0.45 + 0.55 * f.open / 0.9) : 0, p = this.lipMotion.openness === 1 ? g : Math.min(1, g * this.lipMotion.openness), l = p > this.mouth ? 1 - Math.exp(-e * 40) : 1 - Math.exp(-e * this.lipMotion.audioRelease);
1685
+ const o = this.voicePeak - this.voiceTrough, i = o < a * this.lipMotion.range ? 1 : Math.max(0, (t - this.voiceTrough) / o), f = ze[this.vowel ?? "a"], m = Math.min(1, Math.pow(t, 0.7) * 1.15) * Math.pow(i, this.lipMotion.risePower), g = this.speaking ? Math.min(0.95, m) * (0.45 + 0.55 * f.open / 0.9) : 0, p = this.lipMotion.openness === 1 ? g : Math.min(1, g * this.lipMotion.openness), l = p > this.mouth ? 1 - Math.exp(-e * 40) : 1 - Math.exp(-e * this.lipMotion.audioRelease);
1683
1686
  return this.mouth += (p - this.mouth) * l, this.speaking && (this.vowelForm = f.form), this.speaking || this.mouth > 0.01 ? [this.mouth, this.vowelForm] : null;
1684
1687
  }
1685
1688
  // Breathing: inhale ~40% of the cycle, a slower exhale, a short pause at the bottom,
@@ -1687,7 +1690,7 @@ class qn {
1687
1690
  breathValue(e) {
1688
1691
  this.breathPhase = (this.breathPhase ?? 0) + e / (this.breathPeriod ?? 3.8), this.breathPhase >= 1 && (this.breathPhase -= 1, this.breathPeriod = 3.2 + Math.random() * 1.4);
1689
1692
  const t = this.breathPhase;
1690
- return t < 0.4 ? Ge(0, 0.4, t) : t < 0.88 ? 1 - Ge(0.4, 0.88, t) : 0;
1693
+ return t < 0.4 ? Ve(0, 0.4, t) : t < 0.88 ? 1 - Ve(0.4, 0.88, t) : 0;
1691
1694
  }
1692
1695
  // pick one at random, never the one that just played
1693
1696
  playRandom(e) {
@@ -1706,41 +1709,41 @@ class qn {
1706
1709
  update(e) {
1707
1710
  this.t += e;
1708
1711
  const t = this.t, r = {};
1709
- for (const y of Ze) r[y.id] = y.def;
1712
+ for (const y of We) r[y.id] = y.def;
1710
1713
  if (this.mode === "manual")
1711
1714
  Object.assign(r, this.manual);
1712
1715
  else if (this.mode === "auto") {
1713
- if (r.angleX = we(t * 0.18, 1) * 10 + this.gaze.x * 11, r.angleY = we(t * 0.15, 2) * 6 - 1 + this.gaze.y * 7, r.angleZ = we(t * 0.12, 3) * 10, r.bodyAngleX = we(t * 0.1, 4) * 5, r.bodyAngleZ = we(t * 0.09, 5) * 4, r.armAngle = we(t * 0.14, 6) * 5, r.handAngle = we(t * 0.21, 7) * 5, t > this.gaze.next) {
1716
+ if (r.angleX = Me(t * 0.18, 1) * 10 + this.gaze.x * 11, r.angleY = Me(t * 0.15, 2) * 6 - 1 + this.gaze.y * 7, r.angleZ = Me(t * 0.12, 3) * 10, r.bodyAngleX = Me(t * 0.1, 4) * 5, r.bodyAngleZ = Me(t * 0.09, 5) * 4, r.armAngle = Me(t * 0.14, 6) * 5, r.handAngle = Me(t * 0.21, 7) * 5, t > this.gaze.next) {
1714
1717
  const y = Math.random();
1715
1718
  this.gaze.x = y < 0.45 ? 0 : (Math.random() * 2 - 1) * 0.8, this.gaze.y = y < 0.45 ? 0 : (Math.random() * 2 - 1) * 0.5, this.gaze.next = t + 0.8 + Math.random() * 2.5;
1716
1719
  }
1717
1720
  if (r.gazeX = this.gaze.x + r.angleX / 60, r.gazeY = this.gaze.y + r.angleY / 60, t > this.tap.next && (this.tap.until = t + 1.1, this.tap.next = t + 5 + Math.random() * 6), this.speaking) {
1718
1721
  this.nextIdle = Math.max(this.nextIdle, t + 2.5), this.nextAuto = Math.max(this.nextAuto, t + 6);
1719
1722
  const y = this.talkGain;
1720
- this.talkNod = (this.talkNod ?? 0) + (this.voice * 7 * y - (this.talkNod ?? 0)) * Math.min(1, e * 6), r.angleY -= this.talkNod, r.angleX += we(t * 0.6, 11) * 5 * y, r.angleZ += we(t * 0.5, 12) * 4 * y;
1723
+ this.talkNod = (this.talkNod ?? 0) + (this.voice * 7 * y - (this.talkNod ?? 0)) * Math.min(1, e * 6), r.angleY -= this.talkNod, r.angleX += Me(t * 0.6, 11) * 5 * y, r.angleZ += Me(t * 0.5, 12) * 4 * y;
1721
1724
  }
1722
- !this.speaking && t > this.emotionUntil && (this.expr = "normal", this.emotionUntil = 1 / 0), this.speaking || (!this.play && this.autoMotion && t > this.nextAuto ? (this.playRandom(Object.keys(At).filter((y) => y !== "surprise")), this.nextAuto = t + 15 + Math.random() * 10, this.nextIdle = Math.max(this.nextIdle, t + 5)) : !this.play && this.autoIdle && t > this.nextIdle && (this.playRandom(Object.keys(Mt)), this.nextIdle = t + 5 + Math.random() * 5));
1725
+ !this.speaking && t > this.emotionUntil && (this.expr = "normal", this.emotionUntil = 1 / 0), this.speaking || (!this.play && this.autoMotion && t > this.nextAuto ? (this.playRandom(Object.keys(Mt).filter((y) => y !== "surprise")), this.nextAuto = t + 15 + Math.random() * 10, this.nextIdle = Math.max(this.nextIdle, t + 5)) : !this.play && this.autoIdle && t > this.nextIdle && (this.playRandom(Object.keys(Et)), this.nextIdle = t + 5 + Math.random() * 5));
1723
1726
  } else if (this.mode === "mouse" && this.pointer) {
1724
1727
  const y = (this.pointer[0] - this.faceCenter[0]) / 500, u = (this.pointer[1] - this.faceCenter[1]) / 500;
1725
- r.angleX = me(y * 30, -30, 30), r.angleY = me(-u * 30, -30, 30), r.angleZ = me(-y * u * 25, -12, 12), r.bodyAngleX = me(y * 10, -10, 10) * 0.6, r.gazeX = me(y * 1.4, -1, 1), r.gazeY = me(-u * 1.4, -1, 1), r.handAngle = me(y * 4, -5, 5);
1728
+ r.angleX = pe(y * 30, -30, 30), r.angleY = pe(-u * 30, -30, 30), r.angleZ = pe(-y * u * 25, -12, 12), r.bodyAngleX = pe(y * 10, -10, 10) * 0.6, r.gazeX = pe(y * 1.4, -1, 1), r.gazeY = pe(-u * 1.4, -1, 1), r.handAngle = pe(y * 4, -5, 5);
1726
1729
  }
1727
1730
  this.mode !== "manual" && (r.breath = this.breathValue(e), t < this.tap.until && (r.fingerTap = Math.max(0, Math.sin((this.tap.until - t) * Math.PI * 3.6)) ** 2));
1728
1731
  let a = null, o = 0;
1729
1732
  if (this.play) {
1730
- const y = tt[this.play.id];
1733
+ const y = nt[this.play.id];
1731
1734
  if (this.play.t += e, this.play.t >= y.dur)
1732
1735
  this.play = null, this.onMotion?.(null);
1733
1736
  else {
1734
1737
  a = {};
1735
- for (const [u, b] of Object.entries(y.tracks))
1736
- a[u] = jn(b, this.play.t) * (y.idle && Wn.test(u) ? Ct.amp : 1);
1737
- o = Ge(0, 0.15, this.play.t) * (1 - Ge(y.dur - 0.25, y.dur, this.play.t));
1738
- for (const [u, b] of Object.entries(a))
1739
- Nn.has(u) ? r[u] += b : u === "breath" ? r[u] += (b - r[u]) * o : Gn.has(u) || (r[u] = Math.max(r[u], Math.max(0, b)));
1738
+ for (const [u, v] of Object.entries(y.tracks))
1739
+ a[u] = jn(v, this.play.t) * (y.idle && Wn.test(u) ? Ct.amp : 1);
1740
+ o = Ve(0, 0.15, this.play.t) * (1 - Ve(y.dur - 0.25, y.dur, this.play.t));
1741
+ for (const [u, v] of Object.entries(a))
1742
+ Nn.has(u) ? r[u] += v : u === "breath" ? r[u] += (v - r[u]) * o : Gn.has(u) || (r[u] = Math.max(r[u], Math.max(0, v)));
1740
1743
  }
1741
1744
  }
1742
1745
  this.mode !== "manual" && (r.angleY += r.breath * 1.6);
1743
- const i = en[this.expr].p, f = ["eyeOpen", "eyeOpenL", "eyeSmileL", "eyeSmile", "mouthOpen", "mouthForm", "blush", "browY", "browAngle", "gx", "gy"], m = {
1746
+ const i = tn[this.expr].p, f = ["eyeOpen", "eyeOpenL", "eyeSmileL", "eyeSmile", "mouthOpen", "mouthForm", "blush", "browY", "browAngle", "gx", "gy"], m = {
1744
1747
  eyeOpen: i.eyeOpen ?? 1,
1745
1748
  eyeOpenL: i.eyeOpenL ?? i.eyeOpen ?? 1,
1746
1749
  eyeSmileL: i.eyeSmileL ?? i.eyeSmile ?? 0,
@@ -1756,31 +1759,31 @@ class qn {
1756
1759
  for (const y of f)
1757
1760
  this.exprMix[y] === void 0 && (this.exprMix[y] = m[y]), this.exprMix[y] += (m[y] - this.exprMix[y]) * g;
1758
1761
  const p = this.exprMix, l = {};
1759
- for (const y of Ze) {
1762
+ for (const y of We) {
1760
1763
  const u = y.id;
1761
1764
  if (this.mode === "manual" && !a) {
1762
1765
  l[u] = r[u], this.cur[u] = r[u], this.vel[u] = 0;
1763
1766
  continue;
1764
1767
  }
1765
- let [b, x] = Vn[u] ?? [120, 0.95];
1766
- a && /^angle|^body/.test(u) && (tt[this.play?.id ?? ""]?.idle ? (b *= Ct.stiff, x = 0.8) : /^angle/.test(u) && (b *= 4.5, x = 0.75));
1767
- const s = 2 * Math.sqrt(b) * x;
1768
- this.vel[u] += (b * (r[u] - this.cur[u]) - s * this.vel[u]) * e, this.cur[u] += this.vel[u] * e, l[u] = this.cur[u];
1768
+ let [v, x] = Vn[u] ?? [120, 0.95];
1769
+ a && /^angle|^body/.test(u) && (nt[this.play?.id ?? ""]?.idle ? (v *= Ct.stiff, x = 0.8) : /^angle/.test(u) && (v *= 4.5, x = 0.75));
1770
+ const s = 2 * Math.sqrt(v) * x;
1771
+ this.vel[u] += (v * (r[u] - this.cur[u]) - s * this.vel[u]) * e, this.cur[u] += this.vel[u] * e, l[u] = this.cur[u];
1769
1772
  }
1770
1773
  let h = 1;
1771
- if (this.mode !== "manual" ? (h = this.blinkValue(e), l.eyeROpen = p.eyeOpen * h, l.eyeLOpen = p.eyeOpenL * h, l.eyeSmile = p.eyeSmile, l.eyeSmileL = p.eyeSmileL, l.mouthOpen = p.mouthOpen, l.mouthForm = p.mouthForm, l.blush = p.blush, l.browY = p.browY + (l.angleY > 0 ? l.angleY / 60 : 0) - (1 - h) * 0.18, l.browAngle = p.browAngle, l.gazeX = me(l.gazeX + p.gx, -1, 1), l.gazeY = me(l.gazeY + p.gy, -1, 1)) : l.eyeSmileL = l.eyeSmile, a) {
1772
- const y = (b, x) => {
1773
- l[b] += (x - l[b]) * o;
1774
- }, u = (b) => Math.min(1.3, Math.max(0, b));
1774
+ if (this.mode !== "manual" ? (h = this.blinkValue(e), l.eyeROpen = p.eyeOpen * h, l.eyeLOpen = p.eyeOpenL * h, l.eyeSmile = p.eyeSmile, l.eyeSmileL = p.eyeSmileL, l.mouthOpen = p.mouthOpen, l.mouthForm = p.mouthForm, l.blush = p.blush, l.browY = p.browY + (l.angleY > 0 ? l.angleY / 60 : 0) - (1 - h) * 0.18, l.browAngle = p.browAngle, l.gazeX = pe(l.gazeX + p.gx, -1, 1), l.gazeY = pe(l.gazeY + p.gy, -1, 1)) : l.eyeSmileL = l.eyeSmile, a) {
1775
+ const y = (v, x) => {
1776
+ l[v] += (x - l[v]) * o;
1777
+ }, u = (v) => Math.min(1.3, Math.max(0, v));
1775
1778
  "eyeOpen" in a && (y("eyeROpen", u(a.eyeOpen) * h), "eyeOpenL" in a || y("eyeLOpen", u(a.eyeOpen) * h)), "eyeOpenL" in a && y("eyeLOpen", u(a.eyeOpenL) * h), "eyeSmile" in a && (y("eyeSmile", a.eyeSmile), "eyeSmileL" in a || y("eyeSmileL", a.eyeSmile)), "eyeSmileL" in a && y("eyeSmileL", a.eyeSmileL);
1776
- for (const b of ["mouthOpen", "mouthForm", "blush", "browY", "browAngle"])
1777
- b in a && y(b, b === "mouthOpen" || b === "blush" ? Math.max(0, a[b]) : a[b]);
1779
+ for (const v of ["mouthOpen", "mouthForm", "blush", "browY", "browAngle"])
1780
+ v in a && y(v, v === "mouthOpen" || v === "blush" ? Math.max(0, a[v]) : a[v]);
1778
1781
  }
1779
- const S = this.speechMouth(e);
1780
- return S ? (this.lipOpen = S[0], this.lipForm = S[1]) : this.lipOpen !== null && !this.speaking && !this.kana && (this.lipOpen = null), this.lipOpen !== null && (l.mouthOpen = Math.max(l.mouthOpen * 0.3, this.lipOpen), l.mouthForm = me(this.lipForm, -1, 1)), this.P = l, l;
1782
+ const E = this.speechMouth(e);
1783
+ return E ? (this.lipOpen = E[0], this.lipForm = E[1]) : this.lipOpen !== null && !this.speaking && !this.kana && (this.lipOpen = null), this.lipOpen !== null && (l.mouthOpen = Math.max(l.mouthOpen * 0.3, this.lipOpen), l.mouthForm = pe(this.lipForm, -1, 1)), this.P = l, l;
1781
1784
  }
1782
1785
  }
1783
- const Et = {
1786
+ const St = {
1784
1787
  neutral: "normal",
1785
1788
  smile: "smile",
1786
1789
  shy: "shy",
@@ -1789,9 +1792,9 @@ const Et = {
1789
1792
  angry: "angryTalk",
1790
1793
  sad: "sadTalk",
1791
1794
  wink: "wink"
1792
- }, Jn = { sad: { pitch: -6, gy: -0.45 } }, Be = (n, e, t) => Math.max(e, Math.min(t, n)), Ue = Object.freeze({ eyeOpen: 1, eyeOpenL: 1, eyeSmile: 0, eyeSmileL: 0, blush: 0, browY: 0, browAngle: 0, mouthOpen: 0, gx: 0, gy: 0, pitch: 0 });
1795
+ }, Jn = { sad: { pitch: -6, gy: -0.45 } }, Ye = (n, e, t) => Math.max(e, Math.min(t, n)), Ie = Object.freeze({ eyeOpen: 1, eyeOpenL: 1, eyeSmile: 0, eyeSmileL: 0, blush: 0, browY: 0, browAngle: 0, mouthOpen: 0, gx: 0, gy: 0, pitch: 0 });
1793
1796
  function Kn(n) {
1794
- const e = en[Et[n]]?.p ?? {}, t = Jn[n] ?? {};
1797
+ const e = tn[St[n]]?.p ?? {}, t = Jn[n] ?? {};
1795
1798
  return {
1796
1799
  eyeOpen: e.eyeOpen ?? 1,
1797
1800
  eyeOpenL: e.eyeOpenL ?? e.eyeOpen ?? 1,
@@ -1808,47 +1811,47 @@ function Kn(n) {
1808
1811
  }
1809
1812
  function Qn(n, e) {
1810
1813
  const t = { ...n };
1811
- return t.eyeROpen = (n.eyeROpen ?? 1) * e.eyeOpen, t.eyeLOpen = (n.eyeLOpen ?? 1) * e.eyeOpenL, t.eyeSmile = Math.max(n.eyeSmile ?? 0, e.eyeSmile), t.eyeSmileL = Math.max(n.eyeSmileL ?? n.eyeSmile ?? 0, e.eyeSmileL), t.blush = Math.max(n.blush ?? 0, e.blush), t.browY = Be((n.browY ?? 0) + e.browY, -1, 1), t.browAngle = Be((n.browAngle ?? 0) + e.browAngle, -1, 1), t.mouthOpen = Math.max(n.mouthOpen ?? 0, e.mouthOpen), t.gazeX = Be((n.gazeX ?? 0) + e.gx, -1, 1), t.gazeY = Be((n.gazeY ?? 0) + e.gy, -1, 1), t.angleY = Be((n.angleY ?? 0) + e.pitch, -30, 30), t;
1814
+ return t.eyeROpen = (n.eyeROpen ?? 1) * e.eyeOpen, t.eyeLOpen = (n.eyeLOpen ?? 1) * e.eyeOpenL, t.eyeSmile = Math.max(n.eyeSmile ?? 0, e.eyeSmile), t.eyeSmileL = Math.max(n.eyeSmileL ?? n.eyeSmile ?? 0, e.eyeSmileL), t.blush = Math.max(n.blush ?? 0, e.blush), t.browY = Ye((n.browY ?? 0) + e.browY, -1, 1), t.browAngle = Ye((n.browAngle ?? 0) + e.browAngle, -1, 1), t.mouthOpen = Math.max(n.mouthOpen ?? 0, e.mouthOpen), t.gazeX = Ye((n.gazeX ?? 0) + e.gx, -1, 1), t.gazeY = Ye((n.gazeY ?? 0) + e.gy, -1, 1), t.angleY = Ye((n.angleY ?? 0) + e.pitch, -30, 30), t;
1812
1815
  }
1813
1816
  class er {
1814
1817
  /** @type {keyof typeof OVERLAY_EXPRESSIONS} */
1815
1818
  name = "neutral";
1816
- mix = { ...Ue };
1819
+ mix = { ...Ie };
1817
1820
  /** @param {string} name */
1818
1821
  set(e) {
1819
- this.name = Object.hasOwn(Et, e) ? (
1822
+ this.name = Object.hasOwn(St, e) ? (
1820
1823
  /** @type {keyof typeof OVERLAY_EXPRESSIONS} */
1821
1824
  e
1822
1825
  ) : "neutral";
1823
1826
  }
1824
1827
  /** True while an expression is shown or still fading out. */
1825
1828
  get active() {
1826
- return this.name !== "neutral" || Object.keys(Ue).some((e) => Math.abs(this.mix[e] - Ue[e]) > 1e-3);
1829
+ return this.name !== "neutral" || Object.keys(Ie).some((e) => Math.abs(this.mix[e] - Ie[e]) > 1e-3);
1827
1830
  }
1828
1831
  apply(e, t) {
1829
1832
  if (!this.active)
1830
- return this.mix = { ...Ue }, e;
1833
+ return this.mix = { ...Ie }, e;
1831
1834
  const r = Kn(this.name), a = 1 - Math.exp(-Math.max(0, t) * 12);
1832
- for (const o of Object.keys(Ue)) this.mix[o] += (r[o] - this.mix[o]) * a;
1835
+ for (const o of Object.keys(Ie)) this.mix[o] += (r[o] - this.mix[o]) * a;
1833
1836
  return Qn(e, this.mix);
1834
1837
  }
1835
1838
  }
1836
- const $t = ["ball", "low", "crease", "lash"], nt = /* @__PURE__ */ new Map(), rt = /* @__PURE__ */ new Map();
1837
- async function Dt(n) {
1838
- return rt.has(n) || rt.set(n, fetch(n).then((e) => {
1839
+ const Dt = ["ball", "low", "crease", "lash"], rt = /* @__PURE__ */ new Map(), at = /* @__PURE__ */ new Map();
1840
+ async function Ht(n) {
1841
+ return at.has(n) || at.set(n, fetch(n).then((e) => {
1839
1842
  if (!e.ok) throw new Error(`failed to load ${n}`);
1840
1843
  return e.json();
1841
- })), rt.get(n);
1844
+ })), at.get(n);
1842
1845
  }
1843
- function Ht(n) {
1844
- if (nt.has(n)) return nt.get(n);
1846
+ function Zt(n) {
1847
+ if (rt.has(n)) return rt.get(n);
1845
1848
  const e = new Promise((t, r) => {
1846
1849
  const a = new Image();
1847
1850
  a.onload = () => t(a), a.onerror = () => r(new Error(`failed to load ${n}`)), a.src = n;
1848
1851
  });
1849
- return nt.set(n, e), e;
1852
+ return rt.set(n, e), e;
1850
1853
  }
1851
- function tn(n, e) {
1854
+ function nn(n, e) {
1852
1855
  const t = document.createElement("canvas");
1853
1856
  t.width = n.width, t.height = n.height;
1854
1857
  const r = t.getContext("2d");
@@ -1857,15 +1860,15 @@ function tn(n, e) {
1857
1860
  for (let i = 0; i < o.length; i++) o[i] = a[i * 4 + e];
1858
1861
  return o;
1859
1862
  }
1860
- const Ye = (n) => tn(n, 3);
1863
+ const Ne = (n) => nn(n, 3);
1861
1864
  function tr(n, e) {
1862
- const [t, r] = n.t.pivot, a = n.dir, o = n.pts, i = (S, y, u) => {
1863
- const b = Math.min(1, Math.max(0, (u - S) / (y - S)));
1864
- return b * b * (3 - 2 * b);
1865
+ const [t, r] = n.t.pivot, a = n.dir, o = n.pts, i = (E, y, u) => {
1866
+ const v = Math.min(1, Math.max(0, (u - E) / (y - E)));
1867
+ return v * v * (3 - 2 * v);
1865
1868
  }, f = Math.cos(n.phi[0]), m = Math.sin(n.phi[0]), g = Math.cos(n.phi[1]), p = Math.sin(n.phi[1]), l = e.rest, h = e.pos;
1866
- for (let S = 0; S < l.length; S += 2) {
1867
- const y = l[S] - t, u = l[S + 1] - r, b = y * a[0] + u * a[1], x = o[0][0] + y * f - u * m, s = o[0][1] + y * m + u * f, c = y - a[0] * n.L1, T = u - a[1] * n.L1, d = o[1][0] + c * g - T * p, w = o[1][1] + c * p + T * g, B = i(n.L1 * 0.55, n.L1 * 1.35, b);
1868
- h[S] = x + (d - x) * B, h[S + 1] = s + (w - s) * B;
1869
+ for (let E = 0; E < l.length; E += 2) {
1870
+ const y = l[E] - t, u = l[E + 1] - r, v = y * a[0] + u * a[1], x = o[0][0] + y * f - u * m, s = o[0][1] + y * m + u * f, c = y - a[0] * n.L1, T = u - a[1] * n.L1, d = o[1][0] + c * g - T * p, w = o[1][1] + c * p + T * g, F = i(n.L1 * 0.55, n.L1 * 1.35, v);
1871
+ h[E] = x + (d - x) * F, h[E + 1] = s + (w - s) * F;
1869
1872
  }
1870
1873
  }
1871
1874
  async function nr(n, e) {
@@ -1881,202 +1884,202 @@ async function nr(n, e) {
1881
1884
  handWeights: p,
1882
1885
  handFrame: l,
1883
1886
  deformHand: h,
1884
- TASSELS: S
1885
- } = r, { Renderer: y, buildGrid: u } = Bn(r, t), { Physics: b } = Un(r, t), { createSprites: x } = Yn(r, t), s = (e.assetsBase ?? "").replace(/\/?$/, "/"), c = (M, L) => {
1887
+ TASSELS: E
1888
+ } = r, { Renderer: y, buildGrid: u } = Bn(r, t), { Physics: v } = Un(r, t), { createSprites: x } = Yn(r, t), s = (e.assetsBase ?? "").replace(/\/?$/, "/"), c = (A, R) => {
1886
1889
  if (e.assets) {
1887
- if (!e.assets[M]) throw new Error(`Missing project asset: ${M}`);
1888
- return e.assets[M];
1889
- }
1890
- return `${s}${M}${L === void 0 ? "" : `?b=${L}`}`;
1891
- }, T = await Dt(c("layers.json")), d = ["base", ...t.hand ? ["hand"] : [], ...S.map((M) => M.name), ...[0, 1].flatMap((M) => $t.map((L) => `eye${M}_${L}`)), "hairmask"], w = Object.fromEntries(await Promise.all(d.map(async (M) => [M, await Ht(c(`${M}.png`, T.build))]))), B = tn(w.hairmask, 0), Y = (M, L) => B[Math.min(a.h - 1, Math.max(0, Math.round(L))) * a.w + Math.min(a.w - 1, Math.max(0, Math.round(M)))] / 255, I = new y(n, { padTop: e.padTop ?? t.view.padTop, padSide: e.padSide ?? t.view.padSide, fit: e.fit }), _ = { base: [0, 0, a.w, a.h], ...T.layers }, U = u(_.base, t.mesh.baseCell, Ye(w.base), w.base.width, t.mesh.fine), O = [];
1892
- for (let M = 0; M < U.rest.length / 2; M++) {
1893
- const L = U.rest[M * 2], W = U.rest[M * 2 + 1];
1894
- O.push(i(L, W, Y(L, W)));
1895
- }
1896
- I.addLayer("base", w.base, U, { face: !0 });
1897
- const C = [];
1898
- o.forEach((M, L) => {
1899
- for (const W of $t) {
1900
- const Q = `eye${L}_${W}`, ne = u(_[Q], W === "ball" ? t.mesh.eyeBallCell : t.mesh.eyeCell, Ye(w[Q]), w[Q].width), ee = [];
1901
- for (let oe = 0; oe < ne.rest.length / 2; oe++) ee.push(i(ne.rest[oe * 2], ne.rest[oe * 2 + 1], 0));
1902
- const ce = I.addLayer(Q, w[Q], ne, { eyeBall: W === "ball" ? L : void 0 });
1903
- C.push({ e: M, eye: L, part: W, mesh: ne, W: ee, layer: ce });
1890
+ if (!e.assets[A]) throw new Error(`Missing project asset: ${A}`);
1891
+ return e.assets[A];
1892
+ }
1893
+ return `${s}${A}${R === void 0 ? "" : `?b=${R}`}`;
1894
+ }, T = await Ht(c("layers.json")), d = ["base", ...t.hand ? ["hand"] : [], ...E.map((A) => A.name), ...[0, 1].flatMap((A) => Dt.map((R) => `eye${A}_${R}`)), "hairmask"], w = Object.fromEntries(await Promise.all(d.map(async (A) => [A, await Zt(c(`${A}.png`, T.build))]))), F = nn(w.hairmask, 0), Y = (A, R) => F[Math.min(a.h - 1, Math.max(0, Math.round(R))) * a.w + Math.min(a.w - 1, Math.max(0, Math.round(A)))] / 255, I = new y(n, { padTop: e.padTop ?? t.view.padTop, padSide: e.padSide ?? t.view.padSide, fit: e.fit }), _ = { base: [0, 0, a.w, a.h], ...T.layers }, B = u(_.base, t.mesh.baseCell, Ne(w.base), w.base.width, t.mesh.fine), O = [];
1895
+ for (let A = 0; A < B.rest.length / 2; A++) {
1896
+ const R = B.rest[A * 2], C = B.rest[A * 2 + 1];
1897
+ O.push(i(R, C, Y(R, C)));
1898
+ }
1899
+ I.addLayer("base", w.base, B, { face: !0 });
1900
+ const z = [];
1901
+ o.forEach((A, R) => {
1902
+ for (const C of Dt) {
1903
+ const Q = `eye${R}_${C}`, te = u(_[Q], C === "ball" ? t.mesh.eyeBallCell : t.mesh.eyeCell, Ne(w[Q]), w[Q].width), ne = [];
1904
+ for (let se = 0; se < te.rest.length / 2; se++) ne.push(i(te.rest[se * 2], te.rest[se * 2 + 1], 0));
1905
+ const ie = I.addLayer(Q, w[Q], te, { eyeBall: C === "ball" ? R : void 0 });
1906
+ z.push({ e: A, eye: R, part: C, mesh: te, W: ne, layer: ie });
1904
1907
  }
1905
1908
  });
1906
- let $ = null;
1909
+ let D = null;
1907
1910
  try {
1908
1911
  {
1909
- const M = await Dt(c("sprites/sprites.json")), L = Object.fromEntries(await Promise.all(Object.keys(M.layers).map(async (W) => [W, await Ht(c(`sprites/${W}.png`, M.build))])));
1910
- $ = x(I, M, L, u, Ye);
1912
+ const A = await Ht(c("sprites/sprites.json")), R = Object.fromEntries(await Promise.all(Object.keys(A.layers).map(async (C) => [C, await Zt(c(`sprites/${C}.png`, A.build))])));
1913
+ D = x(I, A, R, u, Ne);
1911
1914
  }
1912
- } catch (M) {
1913
- console.warn("eye / mouth sprites not loaded:", M);
1915
+ } catch (A) {
1916
+ console.warn("eye / mouth sprites not loaded:", A);
1914
1917
  }
1915
- const V = S.map((M) => {
1916
- const L = u(_[M.name], t.mesh.tasselCell, Ye(w[M.name]), w[M.name].width);
1917
- return I.addLayer(M.name, w[M.name], L);
1918
- }), j = t.hand ? u(_.hand, t.mesh.handCell, Ye(w.hand), w.hand.width) : { rest: [], pos: [] }, D = [];
1919
- for (let M = 0; M < j.rest.length / 2; M++) D.push(p(j.rest[M * 2], j.rest[M * 2 + 1]));
1918
+ const J = E.map((A) => {
1919
+ const R = u(_[A.name], t.mesh.tasselCell, Ne(w[A.name]), w[A.name].width);
1920
+ return I.addLayer(A.name, w[A.name], R);
1921
+ }), j = t.hand ? u(_.hand, t.mesh.handCell, Ne(w.hand), w.hand.width) : { rest: [], pos: [] }, H = [];
1922
+ for (let A = 0; A < j.rest.length / 2; A++) H.push(p(j.rest[A * 2], j.rest[A * 2 + 1]));
1920
1923
  t.hand && I.addLayer("hand", w.hand, j);
1921
- const H = new b(), R = new qn(t.view.gazeCenter ?? [t.head.cx, t.head.cy]);
1922
- e.lipSync !== void 0 && R.setLipSync(e.lipSync);
1923
- const Z = /* @__PURE__ */ new Set();
1924
- R.onMotion = (M) => {
1925
- for (const L of Z) L(M);
1924
+ const Z = new v(), $ = new qn(t.view.gazeCenter ?? [t.head.cx, t.head.cy]);
1925
+ e.lipSync !== void 0 && $.setLipSync(e.lipSync);
1926
+ const q = /* @__PURE__ */ new Set();
1927
+ $.onMotion = (A) => {
1928
+ for (const R of q) R(A);
1926
1929
  };
1927
- let P = {}, G = 1, J = {};
1928
- const q = new er(), v = [0, 0];
1929
- function A(M) {
1930
- const L = { ...R.update(M) };
1931
- for (const [Q, ne] of Object.entries(P)) L[Q] = G === 1 ? ne : (L[Q] ?? 0) + (ne - (L[Q] ?? 0)) * G;
1932
- R.lipOpen !== null && (L.mouthOpen = R.P.mouthOpen, (!e.preserveMouthForm || P.mouthForm === void 0) && (L.mouthForm = R.P.mouthForm));
1933
- const W = q.apply(L, M);
1934
- return J = W, W;
1935
- }
1936
- function E(M) {
1937
- const L = A(M), W = H.step(L, M), Q = U.pos, ne = U.rest;
1930
+ let W = {}, N = 1, G = {};
1931
+ const V = new er(), b = [0, 0];
1932
+ function M(A) {
1933
+ const R = { ...$.update(A) };
1934
+ for (const [Q, te] of Object.entries(W)) R[Q] = N === 1 ? te : (R[Q] ?? 0) + (te - (R[Q] ?? 0)) * N;
1935
+ $.lipOpen !== null && (R.mouthOpen = $.P.mouthOpen, (!e.preserveMouthForm || W.mouthForm === void 0) && (R.mouthForm = $.P.mouthForm));
1936
+ const C = V.apply(R, A);
1937
+ return G = C, C;
1938
+ }
1939
+ function S(A) {
1940
+ const R = M(A), C = Z.step(R, A), Q = B.pos, te = B.rest;
1938
1941
  for (let K = 0; K < O.length; K++)
1939
- f(ne[K * 2], ne[K * 2 + 1], O[K], L, W, v), Q[K * 2] = v[0], Q[K * 2 + 1] = v[1];
1940
- const ee = (K) => $ ? 1 : K;
1941
- for (const K of C) {
1942
- const De = ee(K.eye === 0 ? L.eyeROpen : L.eyeLOpen), Rt = K.eye === 0 ? L.eyeSmile : L.eyeSmileL ?? L.eyeSmile;
1943
- K.layer.alpha = g(K.part, De, Rt);
1944
- const Lt = K.mesh.rest, kt = K.mesh.pos;
1945
- for (let Te = 0; Te < K.W.length; Te++) {
1946
- const _t = Lt[Te * 2], yn = Lt[Te * 2 + 1];
1947
- f(_t, m(K.e, K.part, _t, yn, De, Rt), K.W[Te], L, W, v), kt[Te * 2] = v[0], kt[Te * 2 + 1] = v[1];
1942
+ f(te[K * 2], te[K * 2 + 1], O[K], R, C, b), Q[K * 2] = b[0], Q[K * 2 + 1] = b[1];
1943
+ const ne = (K, ke) => D?.eyesDrawn[ke] ? 1 : K;
1944
+ for (const K of z) {
1945
+ const ke = ne(K.eye === 0 ? R.eyeROpen : R.eyeLOpen, K.eye), Lt = K.eye === 0 ? R.eyeSmile : R.eyeSmileL ?? R.eyeSmile;
1946
+ K.layer.alpha = g(K.part, ke, Lt);
1947
+ const _t = K.mesh.rest, kt = K.mesh.pos;
1948
+ for (let Re = 0; Re < K.W.length; Re++) {
1949
+ const Ft = _t[Re * 2], yn = _t[Re * 2 + 1];
1950
+ f(Ft, m(K.e, K.part, Ft, yn, ke, Lt), K.W[Re], R, C, b), kt[Re * 2] = b[0], kt[Re * 2 + 1] = b[1];
1948
1951
  }
1949
1952
  }
1950
- const ce = $?.update(L, W, M, In(q.name, R.mode === "manual" ? null : R.expr));
1951
- if (ce) for (const K of C) ce.eyes[K.eye] && (K.layer.alpha = 0);
1952
- const oe = j.pos, _e = j.rest, gn = l(L);
1953
- for (let K = 0; K < D.length; K++)
1954
- h(_e[K * 2], _e[K * 2 + 1], D[K], L, gn, v), oe[K * 2] = v[0], oe[K * 2 + 1] = v[1];
1955
- H.chains.forEach((K, De) => tr(K, V[De].mesh));
1956
- const $e = 7;
1953
+ const ie = D?.update(R, C, A, In(V.name, $.mode === "manual" ? null : $.expr));
1954
+ if (ie) for (const K of z) ie.eyes[K.eye] && (K.layer.alpha = 0);
1955
+ const se = j.pos, me = j.rest, He = l(R);
1956
+ for (let K = 0; K < H.length; K++)
1957
+ h(me[K * 2], me[K * 2 + 1], H[K], R, He, b), se[K * 2] = b[0], se[K * 2 + 1] = b[1];
1958
+ Z.chains.forEach((K, ke) => tr(K, J[ke].mesh));
1959
+ const we = 7;
1957
1960
  I.draw({
1958
- angleX: L.angleX,
1959
- angleY: L.angleY,
1960
- angleZ: L.angleZ,
1961
+ angleX: R.angleX,
1962
+ angleY: R.angleY,
1963
+ angleZ: R.angleZ,
1961
1964
  eyes: [
1962
- ee(L.eyeROpen),
1963
- L.eyeSmile,
1964
- L.gazeX * $e,
1965
- -L.gazeY * $e * 0.6,
1966
- ee(L.eyeLOpen),
1967
- L.eyeSmileL ?? L.eyeSmile,
1968
- L.gazeX * $e * 0.85,
1969
- -L.gazeY * $e * 0.6
1965
+ ne(R.eyeROpen, 0),
1966
+ R.eyeSmile,
1967
+ R.gazeX * we,
1968
+ -R.gazeY * we * 0.6,
1969
+ ne(R.eyeLOpen, 1),
1970
+ R.eyeSmileL ?? R.eyeSmile,
1971
+ R.gazeX * we * 0.85,
1972
+ -R.gazeY * we * 0.6
1970
1973
  ],
1971
1974
  // with sprites the drawn mouths replace the shader-painted one
1972
- mouthOpen: $ ? 0 : L.mouthOpen,
1973
- mouthForm: L.mouthForm,
1974
- cheek: L.blush,
1975
+ mouthOpen: ie?.mouthDrawn ? 0 : R.mouthOpen,
1976
+ mouthForm: R.mouthForm,
1977
+ cheek: R.blush,
1975
1978
  showMesh: !1,
1976
1979
  originalAlpha: 0,
1977
1980
  joints: []
1978
1981
  });
1979
1982
  }
1980
- let k = 0, N = performance.now(), z = !1;
1981
- const F = (M) => {
1982
- const L = Math.min(0.05, (M - N) / 1e3);
1983
- N = M, E(L), k = requestAnimationFrame(F);
1983
+ let L = 0, U = performance.now(), X = !1;
1984
+ const k = (A) => {
1985
+ const R = Math.min(0.05, (A - U) / 1e3);
1986
+ U = A, S(R), L = requestAnimationFrame(k);
1984
1987
  };
1985
- return e.manual || (k = requestAnimationFrame(F)), {
1988
+ return e.manual || (L = requestAnimationFrame(k)), {
1986
1989
  motions: [
1987
- ...Object.entries(At).map(([M, L]) => ({ id: M, label: L.label, idle: !1 })),
1988
- ...Object.entries(Mt).map(([M, L]) => ({ id: M, label: L.label, idle: !0 }))
1990
+ ...Object.entries(Mt).map(([A, R]) => ({ id: A, label: R.label, idle: !1 })),
1991
+ ...Object.entries(Et).map(([A, R]) => ({ id: A, label: R.label, idle: !0 }))
1989
1992
  ],
1990
- setParameters(M, L = 1) {
1991
- P = { ...M }, G = Math.min(1, Math.max(0, Number(L) || 0));
1993
+ setParameters(A, R = 1) {
1994
+ W = { ...A }, N = Math.min(1, Math.max(0, Number(R) || 0));
1992
1995
  },
1993
1996
  getParameters() {
1994
- return { ...J };
1997
+ return { ...G };
1995
1998
  },
1996
1999
  /** 0..1 loudness of the voice being played (e.g. normalised RMS). */
1997
- setVoiceLevel(M) {
1998
- R.setVoiceLevel(M);
2000
+ setVoiceLevel(A) {
2001
+ $.setVoiceLevel(A);
1999
2002
  },
2000
2003
  /** Partial mouth-movement settings; omitted fields retain their current values. */
2001
- setLipSync(M) {
2002
- R.setLipSync(M);
2004
+ setLipSync(A) {
2005
+ $.setLipSync(A);
2003
2006
  },
2004
2007
  /** true while TTS audio is playing: idle motions pause and the head nods along. */
2005
- setSpeaking(M) {
2006
- R.setSpeaking(M);
2008
+ setSpeaking(A) {
2009
+ $.setSpeaking(A);
2007
2010
  },
2008
2011
  /** AITuber OnAir emotion tag: happy / sad / angry / surprised / relaxed / neutral (or null). */
2009
- setEmotion(M, L) {
2010
- R.setEmotion(M, L);
2012
+ setEmotion(A, R) {
2013
+ $.setEmotion(A, R);
2011
2014
  },
2012
2015
  /** Live expression layered over tracking (see OVERLAY_EXPRESSIONS); 'neutral' clears it. */
2013
- setExpression(M) {
2014
- q.set(M);
2016
+ setExpression(A) {
2017
+ V.set(A);
2015
2018
  },
2016
2019
  getExpression() {
2017
- return { name: q.name, active: q.active };
2020
+ return { name: V.name, active: V.active };
2018
2021
  },
2019
2022
  /** How much the head moves with the voice while speaking (1 = default, calmer below). */
2020
- setTalkGain(M) {
2021
- R.talkGain = Math.max(0, Number(M) || 0);
2023
+ setTalkGain(A) {
2024
+ $.talkGain = Math.max(0, Number(A) || 0);
2022
2025
  },
2023
2026
  /** Play a motion or idle motion by id (see `motions`). */
2024
- play(M) {
2025
- R.hasMotion(M) && R.playMotion(M);
2027
+ play(A) {
2028
+ $.hasMotion(A) && $.playMotion(A);
2026
2029
  },
2027
2030
  /** Move the mouth through the vowels of kana text (no audio; for previews). */
2028
- speakKana(M, L) {
2029
- R.speakKana(String(M ?? ""), L);
2031
+ speakKana(A, R) {
2032
+ $.speakKana(String(A ?? ""), R);
2030
2033
  },
2031
- holdMouth(M) {
2032
- R.holdMouth(M);
2034
+ holdMouth(A) {
2035
+ $.holdMouth(A);
2033
2036
  },
2034
2037
  stopLipSync() {
2035
- R.stopLipSync();
2038
+ $.stopLipSync();
2036
2039
  },
2037
2040
  getLipSyncState() {
2038
- return R.getLipSyncState();
2041
+ return $.getLipSyncState();
2039
2042
  },
2040
- setAutoIdle(M) {
2041
- R.autoIdle = !!M;
2043
+ setAutoIdle(A) {
2044
+ $.autoIdle = !!A;
2042
2045
  },
2043
- setLighting(M) {
2044
- I.setLighting(M);
2046
+ setLighting(A) {
2047
+ I.setLighting(A);
2045
2048
  },
2046
2049
  getLightingStats() {
2047
2050
  return { ...I.lightingStats };
2048
2051
  },
2049
- setAutoMotion(M) {
2050
- R.autoMotion = !!M;
2052
+ setAutoMotion(A) {
2053
+ $.autoMotion = !!A;
2051
2054
  },
2052
2055
  /** Hair / tassel sway multiplier (1 = default). */
2053
- setSwayGain(M) {
2054
- H.gain = M;
2056
+ setSwayGain(A) {
2057
+ Z.gain = A;
2055
2058
  },
2056
2059
  /** Called with the motion id when a motion starts and with null when it ends. */
2057
- onMotion(M) {
2058
- return Z.add(M), () => Z.delete(M);
2060
+ onMotion(A) {
2061
+ return q.add(A), () => q.delete(A);
2059
2062
  },
2060
2063
  /** Advance the simulation by `sec` and draw (for tests / hidden tabs). */
2061
- advance(M, L = 60) {
2062
- if (!z)
2063
- if (M === 0) E(0);
2064
- else for (let W = 0; W < Math.round(M * L); W++) E(1 / L);
2064
+ advance(A, R = 60) {
2065
+ if (!X)
2066
+ if (A === 0) S(0);
2067
+ else for (let C = 0; C < Math.round(A * R); C++) S(1 / R);
2065
2068
  },
2066
2069
  /** Update motion and lip sync without drawing a hidden preview. */
2067
- advanceParameters(M) {
2068
- z || A(M);
2070
+ advanceParameters(A) {
2071
+ X || M(A);
2069
2072
  },
2070
2073
  destroy() {
2071
- z || (z = !0, cancelAnimationFrame(k), Z.clear(), I.destroy());
2074
+ X || (X = !0, cancelAnimationFrame(L), q.clear(), I.destroy());
2072
2075
  }
2073
2076
  };
2074
2077
  }
2075
- const _r = Object.keys(Et);
2078
+ const kr = Object.keys(St);
2076
2079
  async function rr(n, e) {
2077
- return nr(n, { ...e, rig: xt(e.rig) });
2080
+ return nr(n, { ...e, rig: wt(e.rig) });
2078
2081
  }
2079
- function ke(n) {
2082
+ function Be(n) {
2080
2083
  if (!n || typeof n != "object" || Array.isArray(n))
2081
2084
  throw new Error("avatar.json: expected an object");
2082
2085
  const e = n, t = [];
@@ -2090,7 +2093,7 @@ function ke(n) {
2090
2093
  }
2091
2094
  if (e.lipSync !== void 0)
2092
2095
  try {
2093
- r.lipSync = wt(e.lipSync);
2096
+ r.lipSync = At(e.lipSync);
2094
2097
  } catch (a) {
2095
2098
  t.push(`avatar.json.lipSync: ${a instanceof Error ? a.message : String(a)}`);
2096
2099
  }
@@ -2098,15 +2101,15 @@ function ke(n) {
2098
2101
  `));
2099
2102
  return r;
2100
2103
  }
2101
- function nn(n) {
2102
- return ke({ format: "mesh-avatar", version: 1, name: n });
2103
- }
2104
- const at = (n) => !!n && typeof n == "object" && !Array.isArray(n), Oe = (n, e) => Array.isArray(n) && n.length === e && n.every((t) => typeof t == "number" && Number.isFinite(t)), ot = (n, e) => Object.hasOwn(n, e);
2105
2104
  function rn(n) {
2105
+ return Be({ format: "mesh-avatar", version: 1, name: n });
2106
+ }
2107
+ const ot = (n) => !!n && typeof n == "object" && !Array.isArray(n), Le = (n, e) => Array.isArray(n) && n.length === e && n.every((t) => typeof t == "number" && Number.isFinite(t)), st = (n, e) => Object.hasOwn(n, e);
2108
+ function an(n) {
2106
2109
  const e = [];
2107
- function t(h, S = !0) {
2108
- if (!ot(n, h)) {
2109
- S && e.push(`${h}: missing file`);
2110
+ function t(h, E = !0) {
2111
+ if (!st(n, h)) {
2112
+ E && e.push(`${h}: missing file`);
2110
2113
  return;
2111
2114
  }
2112
2115
  const y = n[h];
@@ -2121,88 +2124,88 @@ function rn(n) {
2121
2124
  e.push(`${h}: invalid UTF-8 JSON`);
2122
2125
  return;
2123
2126
  }
2124
- if (!at(u)) {
2127
+ if (!ot(u)) {
2125
2128
  e.push(`${h}: expected an object`);
2126
2129
  return;
2127
2130
  }
2128
2131
  return u;
2129
2132
  }
2130
- function r(h, S, y = !0) {
2131
- return h.version === 1 || y && h.version === void 0 ? !0 : (e.push(`${S}.version: unsupported version ${JSON.stringify(h.version) ?? "missing"} (expected 1)`), !1);
2133
+ function r(h, E, y = !0) {
2134
+ return h.version === 1 || y && h.version === void 0 ? !0 : (e.push(`${E}.version: unsupported version ${JSON.stringify(h.version) ?? "missing"} (expected 1)`), !1);
2132
2135
  }
2133
2136
  function a(h) {
2134
- if (!ot(n, h)) {
2137
+ if (!st(n, h)) {
2135
2138
  e.push(`${h}: missing file`);
2136
2139
  return;
2137
2140
  }
2138
- const S = n[h], y = S instanceof Uint8Array ? S.byteLength : S?.size;
2141
+ const E = n[h], y = E instanceof Uint8Array ? E.byteLength : E?.size;
2139
2142
  (!Number.isSafeInteger(y) || y <= 0) && e.push(`${h}: expected a non-empty file`);
2140
2143
  }
2141
- function o(h, S, y, u) {
2142
- if (!at(h)) {
2143
- e.push(`${S}.layers: expected a layer rectangle map`);
2144
+ function o(h, E, y, u) {
2145
+ if (!ot(h)) {
2146
+ e.push(`${E}.layers: expected a layer rectangle map`);
2144
2147
  return;
2145
2148
  }
2146
- for (const [b, x] of Object.entries(h)) {
2147
- const s = `${S}.layers.${b}`;
2148
- if (!/^[A-Za-z0-9_-]+$/.test(b)) {
2149
+ for (const [v, x] of Object.entries(h)) {
2150
+ const s = `${E}.layers.${v}`;
2151
+ if (!/^[A-Za-z0-9_-]+$/.test(v)) {
2149
2152
  e.push(`${s}: expected a safe layer name (letters, digits, hyphens or underscores)`);
2150
2153
  continue;
2151
2154
  }
2152
- !Oe(x, 4) || !x.every(Number.isInteger) || x[0] < 0 || x[1] < 0 || x[2] <= 0 || x[3] <= 0 ? e.push(`${s}: expected [x, y, width, height] with non-negative integer origins and positive integer dimensions`) : u && (x[0] + x[2] > u[0] || x[1] + x[3] > u[1]) && e.push(`${s}: rectangle must stay inside the image`), a(`${y}/${b}.png`);
2155
+ !Le(x, 4) || !x.every(Number.isInteger) || x[0] < 0 || x[1] < 0 || x[2] <= 0 || x[3] <= 0 ? e.push(`${s}: expected [x, y, width, height] with non-negative integer origins and positive integer dimensions`) : u && (x[0] + x[2] > u[0] || x[1] + x[3] > u[1]) && e.push(`${s}: rectangle must stay inside the image`), a(`${y}/${v}.png`);
2153
2156
  }
2154
2157
  return h;
2155
2158
  }
2156
- function i(h, S) {
2157
- (typeof h.build != "string" || !h.build.trim()) && e.push(`${S}.build: expected a non-empty string`);
2159
+ function i(h, E) {
2160
+ (typeof h.build != "string" || !h.build.trim()) && e.push(`${E}.build: expected a non-empty string`);
2158
2161
  }
2159
2162
  const f = t("avatar.json", !1);
2160
2163
  if (f)
2161
2164
  try {
2162
- ke(f);
2165
+ Be(f);
2163
2166
  } catch (h) {
2164
2167
  e.push(h.message);
2165
2168
  }
2166
2169
  const m = t("rig.json");
2167
2170
  let g;
2168
2171
  if (m && r(m, "rig.json", !1)) {
2169
- const h = Kt(m);
2170
- e.push(...h.map((S) => `rig.json: ${S}`)), h.length || (g = m);
2172
+ const h = Qt(m);
2173
+ e.push(...h.map((E) => `rig.json: ${E}`)), h.length || (g = m);
2171
2174
  }
2172
2175
  a("built/base.png"), a("built/hairmask.png");
2173
2176
  const p = t("built/layers.json");
2174
2177
  if (p && r(p, "built/layers.json")) {
2175
2178
  i(p, "built/layers.json");
2176
2179
  let h;
2177
- !Oe(p.size, 2) || !p.size.every((y) => Number.isInteger(y) && y > 0) ? e.push("built/layers.json.size: expected [width, height] with positive integer dimensions") : (h = p.size, g && (h[0] !== g.image.width || h[1] !== g.image.height) && e.push("built/layers.json.size: must match rig.json.image"));
2178
- const S = o(p.layers, "built/layers.json", "built", h);
2179
- if (g && S) {
2180
+ !Le(p.size, 2) || !p.size.every((y) => Number.isInteger(y) && y > 0) ? e.push("built/layers.json.size: expected [width, height] with positive integer dimensions") : (h = p.size, g && (h[0] !== g.image.width || h[1] !== g.image.height) && e.push("built/layers.json.size: must match rig.json.image"));
2181
+ const E = o(p.layers, "built/layers.json", "built", h);
2182
+ if (g && E) {
2180
2183
  const y = [
2181
- ...g.eyes.flatMap((u, b) => ["ball", "low", "crease", "lash"].map((x) => `eye${b}_${x}`)),
2184
+ ...g.eyes.flatMap((u, v) => ["ball", "low", "crease", "lash"].map((x) => `eye${v}_${x}`)),
2182
2185
  ...g.hand ? ["hand"] : [],
2183
2186
  ...(g.accessories ?? []).map((u) => u.name)
2184
2187
  ];
2185
- for (const u of y) ot(S, u) || e.push(`built/layers.json.layers.${u}: missing required layer`);
2188
+ for (const u of y) st(E, u) || e.push(`built/layers.json.layers.${u}: missing required layer`);
2186
2189
  }
2187
2190
  !Array.isArray(p.eyes) || p.eyes.length !== 2 ? e.push("built/layers.json.eyes: expected two eye curves") : p.eyes.forEach((y, u) => {
2188
- const b = `built/layers.json.eyes[${u}]`;
2189
- if (!at(y)) {
2190
- e.push(`${b}: expected an object`);
2191
+ const v = `built/layers.json.eyes[${u}]`;
2192
+ if (!ot(y)) {
2193
+ e.push(`${v}: expected an object`);
2191
2194
  return;
2192
2195
  }
2193
- Oe([y.x0, y.x1], 2) && y.x0 < y.x1 || e.push(`${b}: expected finite x0 < x1`);
2196
+ Le([y.x0, y.x1], 2) && y.x0 < y.x1 || e.push(`${v}: expected finite x0 < x1`);
2194
2197
  for (const s of ["top", "bot"])
2195
- Oe(y[s], 24) || e.push(`${b}.${s}: expected 24 finite numbers`);
2196
- if (Oe(y.top, 24) && Oe(y.bot, 24) && y.top.some((s, c) => s > y.bot[c]) && e.push(`${b}.top: must not exceed bottom curve`), g) for (const s of ["x0", "x1", "top", "bot"]) {
2198
+ Le(y[s], 24) || e.push(`${v}.${s}: expected 24 finite numbers`);
2199
+ if (Le(y.top, 24) && Le(y.bot, 24) && y.top.some((s, c) => s > y.bot[c]) && e.push(`${v}.top: must not exceed bottom curve`), g) for (const s of ["x0", "x1", "top", "bot"]) {
2197
2200
  const c = y[s], T = g.eyes[u][s];
2198
- (Array.isArray(T) ? Oe(c, T.length) && c.every((w, B) => w === T[B]) : c === T) || e.push(`${b}.${s}: must match rig.json.eyes[${u}].${s}`);
2201
+ (Array.isArray(T) ? Le(c, T.length) && c.every((w, F) => w === T[F]) : c === T) || e.push(`${v}.${s}: must match rig.json.eyes[${u}].${s}`);
2199
2202
  }
2200
2203
  });
2201
2204
  }
2202
2205
  const l = t("built/sprites/sprites.json", !1);
2203
2206
  return l && r(l, "built/sprites/sprites.json") && (i(l, "built/sprites/sprites.json"), o(l.layers, "built/sprites/sprites.json", "built/sprites", g ? [g.image.width, g.image.height] : void 0)), e;
2204
2207
  }
2205
- var ae = Uint8Array, ue = Uint16Array, St = Int32Array, Je = new ae([
2208
+ var ae = Uint8Array, ue = Uint16Array, Tt = Int32Array, Ke = new ae([
2206
2209
  0,
2207
2210
  0,
2208
2211
  0,
@@ -2237,7 +2240,7 @@ var ae = Uint8Array, ue = Uint16Array, St = Int32Array, Je = new ae([
2237
2240
  0,
2238
2241
  /* impossible */
2239
2242
  0
2240
- ]), Ke = new ae([
2243
+ ]), Qe = new ae([
2241
2244
  0,
2242
2245
  0,
2243
2246
  0,
@@ -2271,21 +2274,21 @@ var ae = Uint8Array, ue = Uint16Array, St = Int32Array, Je = new ae([
2271
2274
  /* unused */
2272
2275
  0,
2273
2276
  0
2274
- ]), ut = new ae([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), an = function(n, e) {
2277
+ ]), ft = new ae([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), on = function(n, e) {
2275
2278
  for (var t = new ue(31), r = 0; r < 31; ++r)
2276
2279
  t[r] = e += 1 << n[r - 1];
2277
- for (var a = new St(t[30]), r = 1; r < 30; ++r)
2280
+ for (var a = new Tt(t[30]), r = 1; r < 30; ++r)
2278
2281
  for (var o = t[r]; o < t[r + 1]; ++o)
2279
2282
  a[o] = o - t[r] << 5 | r;
2280
2283
  return { b: t, r: a };
2281
- }, on = an(Je, 2), sn = on.b, ft = on.r;
2282
- sn[28] = 258, ft[258] = 28;
2283
- var ln = an(Ke, 0), ar = ln.b, Zt = ln.r, mt = new ue(32768);
2284
+ }, sn = on(Ke, 2), ln = sn.b, mt = sn.r;
2285
+ ln[28] = 258, mt[258] = 28;
2286
+ var cn = on(Qe, 0), ar = cn.b, Wt = cn.r, pt = new ue(32768);
2284
2287
  for (var re = 0; re < 32768; ++re) {
2285
- var Ee = (re & 43690) >> 1 | (re & 21845) << 1;
2286
- Ee = (Ee & 52428) >> 2 | (Ee & 13107) << 2, Ee = (Ee & 61680) >> 4 | (Ee & 3855) << 4, mt[re] = ((Ee & 65280) >> 8 | (Ee & 255) << 8) >> 1;
2288
+ var Te = (re & 43690) >> 1 | (re & 21845) << 1;
2289
+ Te = (Te & 52428) >> 2 | (Te & 13107) << 2, Te = (Te & 61680) >> 4 | (Te & 3855) << 4, pt[re] = ((Te & 65280) >> 8 | (Te & 255) << 8) >> 1;
2287
2290
  }
2288
- var be = (function(n, e, t) {
2291
+ var xe = (function(n, e, t) {
2289
2292
  for (var r = n.length, a = 0, o = new ue(e); a < r; ++a)
2290
2293
  n[a] && ++o[n[a] - 1];
2291
2294
  var i = new ue(e);
@@ -2298,36 +2301,36 @@ var be = (function(n, e, t) {
2298
2301
  for (a = 0; a < r; ++a)
2299
2302
  if (n[a])
2300
2303
  for (var g = a << 4 | n[a], p = e - n[a], l = i[n[a] - 1]++ << p, h = l | (1 << p) - 1; l <= h; ++l)
2301
- f[mt[l] >> m] = g;
2304
+ f[pt[l] >> m] = g;
2302
2305
  } else
2303
2306
  for (f = new ue(r), a = 0; a < r; ++a)
2304
- n[a] && (f[a] = mt[i[n[a] - 1]++] >> 15 - n[a]);
2307
+ n[a] && (f[a] = pt[i[n[a] - 1]++] >> 15 - n[a]);
2305
2308
  return f;
2306
- }), Se = new ae(288);
2309
+ }), Oe = new ae(288);
2307
2310
  for (var re = 0; re < 144; ++re)
2308
- Se[re] = 8;
2311
+ Oe[re] = 8;
2309
2312
  for (var re = 144; re < 256; ++re)
2310
- Se[re] = 9;
2313
+ Oe[re] = 9;
2311
2314
  for (var re = 256; re < 280; ++re)
2312
- Se[re] = 7;
2315
+ Oe[re] = 7;
2313
2316
  for (var re = 280; re < 288; ++re)
2314
- Se[re] = 8;
2315
- var ze = new ae(32);
2317
+ Oe[re] = 8;
2318
+ var Pe = new ae(32);
2316
2319
  for (var re = 0; re < 32; ++re)
2317
- ze[re] = 5;
2318
- var or = /* @__PURE__ */ be(Se, 9, 0), sr = /* @__PURE__ */ be(Se, 9, 1), ir = /* @__PURE__ */ be(ze, 5, 0), lr = /* @__PURE__ */ be(ze, 5, 1), st = function(n) {
2320
+ Pe[re] = 5;
2321
+ var or = /* @__PURE__ */ xe(Oe, 9, 0), sr = /* @__PURE__ */ xe(Oe, 9, 1), ir = /* @__PURE__ */ xe(Pe, 5, 0), lr = /* @__PURE__ */ xe(Pe, 5, 1), it = function(n) {
2319
2322
  for (var e = n[0], t = 1; t < n.length; ++t)
2320
2323
  n[t] > e && (e = n[t]);
2321
2324
  return e;
2322
- }, pe = function(n, e, t) {
2325
+ }, de = function(n, e, t) {
2323
2326
  var r = e / 8 | 0;
2324
2327
  return (n[r] | n[r + 1] << 8) >> (e & 7) & t;
2325
- }, it = function(n, e) {
2328
+ }, lt = function(n, e) {
2326
2329
  var t = e / 8 | 0;
2327
2330
  return (n[t] | n[t + 1] << 8 | n[t + 2] << 16) >> (e & 7);
2328
- }, Tt = function(n) {
2331
+ }, Ot = function(n) {
2329
2332
  return (n + 7) / 8 | 0;
2330
- }, Pe = function(n, e, t) {
2333
+ }, De = function(n, e, t) {
2331
2334
  return (e == null || e < 0) && (e = 0), (t == null || t > n.length) && (t = n.length), new ae(n.subarray(e, t));
2332
2335
  }, cr = [
2333
2336
  "unexpected EOF",
@@ -2346,9 +2349,9 @@ var or = /* @__PURE__ */ be(Se, 9, 0), sr = /* @__PURE__ */ be(Se, 9, 1), ir = /
2346
2349
  "stream finishing",
2347
2350
  "invalid zip data"
2348
2351
  // determined by unknown compression method
2349
- ], le = function(n, e, t) {
2352
+ ], ce = function(n, e, t) {
2350
2353
  var r = new Error(e || cr[n]);
2351
- if (r.code = n, Error.captureStackTrace && Error.captureStackTrace(r, le), !t)
2354
+ if (r.code = n, Error.captureStackTrace && Error.captureStackTrace(r, ce), !t)
2352
2355
  throw r;
2353
2356
  return r;
2354
2357
  }, hr = function(n, e, t, r) {
@@ -2357,113 +2360,113 @@ var or = /* @__PURE__ */ be(Se, 9, 0), sr = /* @__PURE__ */ be(Se, 9, 1), ir = /
2357
2360
  return t || new ae(0);
2358
2361
  var i = !t, f = i || e.i != 2, m = e.i;
2359
2362
  i && (t = new ae(a * 3));
2360
- var g = function(F) {
2361
- var X = t.length;
2362
- if (F > X) {
2363
- var M = new ae(Math.max(X * 2, F));
2364
- M.set(t), t = M;
2363
+ var g = function(k) {
2364
+ var P = t.length;
2365
+ if (k > P) {
2366
+ var A = new ae(Math.max(P * 2, k));
2367
+ A.set(t), t = A;
2365
2368
  }
2366
- }, p = e.f || 0, l = e.p || 0, h = e.b || 0, S = e.l, y = e.d, u = e.m, b = e.n, x = a * 8;
2369
+ }, p = e.f || 0, l = e.p || 0, h = e.b || 0, E = e.l, y = e.d, u = e.m, v = e.n, x = a * 8;
2367
2370
  do {
2368
- if (!S) {
2369
- p = pe(n, l, 1);
2370
- var s = pe(n, l + 1, 3);
2371
+ if (!E) {
2372
+ p = de(n, l, 1);
2373
+ var s = de(n, l + 1, 3);
2371
2374
  if (l += 3, s)
2372
2375
  if (s == 1)
2373
- S = sr, y = lr, u = 9, b = 5;
2376
+ E = sr, y = lr, u = 9, v = 5;
2374
2377
  else if (s == 2) {
2375
- var w = pe(n, l, 31) + 257, B = pe(n, l + 10, 15) + 4, Y = w + pe(n, l + 5, 31) + 1;
2378
+ var w = de(n, l, 31) + 257, F = de(n, l + 10, 15) + 4, Y = w + de(n, l + 5, 31) + 1;
2376
2379
  l += 14;
2377
- for (var I = new ae(Y), _ = new ae(19), U = 0; U < B; ++U)
2378
- _[ut[U]] = pe(n, l + U * 3, 7);
2379
- l += B * 3;
2380
- for (var O = st(_), C = (1 << O) - 1, $ = be(_, O, 1), U = 0; U < Y; ) {
2381
- var V = $[pe(n, l, C)];
2382
- l += V & 15;
2383
- var c = V >> 4;
2380
+ for (var I = new ae(Y), _ = new ae(19), B = 0; B < F; ++B)
2381
+ _[ft[B]] = de(n, l + B * 3, 7);
2382
+ l += F * 3;
2383
+ for (var O = it(_), z = (1 << O) - 1, D = xe(_, O, 1), B = 0; B < Y; ) {
2384
+ var J = D[de(n, l, z)];
2385
+ l += J & 15;
2386
+ var c = J >> 4;
2384
2387
  if (c < 16)
2385
- I[U++] = c;
2388
+ I[B++] = c;
2386
2389
  else {
2387
- var j = 0, D = 0;
2388
- for (c == 16 ? (D = 3 + pe(n, l, 3), l += 2, j = I[U - 1]) : c == 17 ? (D = 3 + pe(n, l, 7), l += 3) : c == 18 && (D = 11 + pe(n, l, 127), l += 7); D--; )
2389
- I[U++] = j;
2390
+ var j = 0, H = 0;
2391
+ for (c == 16 ? (H = 3 + de(n, l, 3), l += 2, j = I[B - 1]) : c == 17 ? (H = 3 + de(n, l, 7), l += 3) : c == 18 && (H = 11 + de(n, l, 127), l += 7); H--; )
2392
+ I[B++] = j;
2390
2393
  }
2391
2394
  }
2392
- var H = I.subarray(0, w), R = I.subarray(w);
2393
- u = st(H), b = st(R), S = be(H, u, 1), y = be(R, b, 1);
2395
+ var Z = I.subarray(0, w), $ = I.subarray(w);
2396
+ u = it(Z), v = it($), E = xe(Z, u, 1), y = xe($, v, 1);
2394
2397
  } else
2395
- le(1);
2398
+ ce(1);
2396
2399
  else {
2397
- var c = Tt(l) + 4, T = n[c - 4] | n[c - 3] << 8, d = c + T;
2400
+ var c = Ot(l) + 4, T = n[c - 4] | n[c - 3] << 8, d = c + T;
2398
2401
  if (d > a) {
2399
- m && le(0);
2402
+ m && ce(0);
2400
2403
  break;
2401
2404
  }
2402
2405
  f && g(h + T), t.set(n.subarray(c, d), h), e.b = h += T, e.p = l = d * 8, e.f = p;
2403
2406
  continue;
2404
2407
  }
2405
2408
  if (l > x) {
2406
- m && le(0);
2409
+ m && ce(0);
2407
2410
  break;
2408
2411
  }
2409
2412
  }
2410
2413
  f && g(h + 131072);
2411
- for (var Z = (1 << u) - 1, P = (1 << b) - 1, G = l; ; G = l) {
2412
- var j = S[it(n, l) & Z], J = j >> 4;
2414
+ for (var q = (1 << u) - 1, W = (1 << v) - 1, N = l; ; N = l) {
2415
+ var j = E[lt(n, l) & q], G = j >> 4;
2413
2416
  if (l += j & 15, l > x) {
2414
- m && le(0);
2417
+ m && ce(0);
2415
2418
  break;
2416
2419
  }
2417
- if (j || le(2), J < 256)
2418
- t[h++] = J;
2419
- else if (J == 256) {
2420
- G = l, S = null;
2420
+ if (j || ce(2), G < 256)
2421
+ t[h++] = G;
2422
+ else if (G == 256) {
2423
+ N = l, E = null;
2421
2424
  break;
2422
2425
  } else {
2423
- var q = J - 254;
2424
- if (J > 264) {
2425
- var U = J - 257, v = Je[U];
2426
- q = pe(n, l, (1 << v) - 1) + sn[U], l += v;
2426
+ var V = G - 254;
2427
+ if (G > 264) {
2428
+ var B = G - 257, b = Ke[B];
2429
+ V = de(n, l, (1 << b) - 1) + ln[B], l += b;
2427
2430
  }
2428
- var A = y[it(n, l) & P], E = A >> 4;
2429
- A || le(3), l += A & 15;
2430
- var R = ar[E];
2431
- if (E > 3) {
2432
- var v = Ke[E];
2433
- R += it(n, l) & (1 << v) - 1, l += v;
2431
+ var M = y[lt(n, l) & W], S = M >> 4;
2432
+ M || ce(3), l += M & 15;
2433
+ var $ = ar[S];
2434
+ if (S > 3) {
2435
+ var b = Qe[S];
2436
+ $ += lt(n, l) & (1 << b) - 1, l += b;
2434
2437
  }
2435
2438
  if (l > x) {
2436
- m && le(0);
2439
+ m && ce(0);
2437
2440
  break;
2438
2441
  }
2439
2442
  f && g(h + 131072);
2440
- var k = h + q;
2441
- if (h < R) {
2442
- var N = o - R, z = Math.min(R, k);
2443
- for (N + h < 0 && le(3); h < z; ++h)
2444
- t[h] = r[N + h];
2443
+ var L = h + V;
2444
+ if (h < $) {
2445
+ var U = o - $, X = Math.min($, L);
2446
+ for (U + h < 0 && ce(3); h < X; ++h)
2447
+ t[h] = r[U + h];
2445
2448
  }
2446
- for (; h < k; ++h)
2447
- t[h] = t[h - R];
2449
+ for (; h < L; ++h)
2450
+ t[h] = t[h - $];
2448
2451
  }
2449
2452
  }
2450
- e.l = S, e.p = G, e.b = h, e.f = p, S && (p = 1, e.m = u, e.d = y, e.n = b);
2453
+ e.l = E, e.p = N, e.b = h, e.f = p, E && (p = 1, e.m = u, e.d = y, e.n = v);
2451
2454
  } while (!p);
2452
- return h != t.length && i ? Pe(t, 0, h) : t.subarray(0, h);
2453
- }, Ae = function(n, e, t) {
2455
+ return h != t.length && i ? De(t, 0, h) : t.subarray(0, h);
2456
+ }, Ee = function(n, e, t) {
2454
2457
  t <<= e & 7;
2455
2458
  var r = e / 8 | 0;
2456
2459
  n[r] |= t, n[r + 1] |= t >> 8;
2457
- }, Ie = function(n, e, t) {
2460
+ }, je = function(n, e, t) {
2458
2461
  t <<= e & 7;
2459
2462
  var r = e / 8 | 0;
2460
2463
  n[r] |= t, n[r + 1] |= t >> 8, n[r + 2] |= t >> 16;
2461
- }, lt = function(n, e) {
2464
+ }, ct = function(n, e) {
2462
2465
  for (var t = [], r = 0; r < n.length; ++r)
2463
2466
  n[r] && t.push({ s: r, f: n[r] });
2464
2467
  var a = t.length, o = t.slice();
2465
2468
  if (!a)
2466
- return { t: hn, l: 0 };
2469
+ return { t: un, l: 0 };
2467
2470
  if (a == 1) {
2468
2471
  var i = new ae(t[0].s + 1);
2469
2472
  return i[t[0].s] = 1, { t: i, l: 1 };
@@ -2476,32 +2479,32 @@ var or = /* @__PURE__ */ be(Se, 9, 0), sr = /* @__PURE__ */ be(Se, 9, 1), ir = /
2476
2479
  f = t[t[g].f < t[l].f ? g++ : l++], m = t[g != p && t[g].f < t[l].f ? g++ : l++], t[p++] = { s: -1, f: f.f + m.f, l: f, r: m };
2477
2480
  for (var h = o[0].s, r = 1; r < a; ++r)
2478
2481
  o[r].s > h && (h = o[r].s);
2479
- var S = new ue(h + 1), y = pt(t[p - 1], S, 0);
2482
+ var E = new ue(h + 1), y = dt(t[p - 1], E, 0);
2480
2483
  if (y > e) {
2481
- var r = 0, u = 0, b = y - e, x = 1 << b;
2482
- for (o.sort(function(w, B) {
2483
- return S[B.s] - S[w.s] || w.f - B.f;
2484
+ var r = 0, u = 0, v = y - e, x = 1 << v;
2485
+ for (o.sort(function(w, F) {
2486
+ return E[F.s] - E[w.s] || w.f - F.f;
2484
2487
  }); r < a; ++r) {
2485
2488
  var s = o[r].s;
2486
- if (S[s] > e)
2487
- u += x - (1 << y - S[s]), S[s] = e;
2489
+ if (E[s] > e)
2490
+ u += x - (1 << y - E[s]), E[s] = e;
2488
2491
  else
2489
2492
  break;
2490
2493
  }
2491
- for (u >>= b; u > 0; ) {
2494
+ for (u >>= v; u > 0; ) {
2492
2495
  var c = o[r].s;
2493
- S[c] < e ? u -= 1 << e - S[c]++ - 1 : ++r;
2496
+ E[c] < e ? u -= 1 << e - E[c]++ - 1 : ++r;
2494
2497
  }
2495
2498
  for (; r >= 0 && u; --r) {
2496
2499
  var T = o[r].s;
2497
- S[T] == e && (--S[T], ++u);
2500
+ E[T] == e && (--E[T], ++u);
2498
2501
  }
2499
2502
  y = e;
2500
2503
  }
2501
- return { t: new ae(S), l: y };
2502
- }, pt = function(n, e, t) {
2503
- return n.s == -1 ? Math.max(pt(n.l, e, t + 1), pt(n.r, e, t + 1)) : e[n.s] = t;
2504
- }, Wt = function(n) {
2504
+ return { t: new ae(E), l: y };
2505
+ }, dt = function(n, e, t) {
2506
+ return n.s == -1 ? Math.max(dt(n.l, e, t + 1), dt(n.r, e, t + 1)) : e[n.s] = t;
2507
+ }, Gt = function(n) {
2505
2508
  for (var e = n.length; e && !n[--e]; )
2506
2509
  ;
2507
2510
  for (var t = new ue(++e), r = 0, a = n[0], o = 1, i = function(m) {
@@ -2524,106 +2527,106 @@ var or = /* @__PURE__ */ be(Se, 9, 0), sr = /* @__PURE__ */ be(Se, 9, 1), ir = /
2524
2527
  o = 1, a = n[f];
2525
2528
  }
2526
2529
  return { c: t.subarray(0, r), n: e };
2527
- }, Ne = function(n, e) {
2530
+ }, Xe = function(n, e) {
2528
2531
  for (var t = 0, r = 0; r < e.length; ++r)
2529
2532
  t += n[r] * e[r];
2530
2533
  return t;
2531
- }, cn = function(n, e, t) {
2532
- var r = t.length, a = Tt(e + 2);
2534
+ }, hn = function(n, e, t) {
2535
+ var r = t.length, a = Ot(e + 2);
2533
2536
  n[a] = r & 255, n[a + 1] = r >> 8, n[a + 2] = n[a] ^ 255, n[a + 3] = n[a + 1] ^ 255;
2534
2537
  for (var o = 0; o < r; ++o)
2535
2538
  n[a + o + 4] = t[o];
2536
2539
  return (a + 4 + r) * 8;
2537
- }, Gt = function(n, e, t, r, a, o, i, f, m, g, p) {
2538
- Ae(e, p++, t), ++a[256];
2539
- for (var l = lt(a, 15), h = l.t, S = l.l, y = lt(o, 15), u = y.t, b = y.l, x = Wt(h), s = x.c, c = x.n, T = Wt(u), d = T.c, w = T.n, B = new ue(19), Y = 0; Y < s.length; ++Y)
2540
- ++B[s[Y] & 31];
2540
+ }, Vt = function(n, e, t, r, a, o, i, f, m, g, p) {
2541
+ Ee(e, p++, t), ++a[256];
2542
+ for (var l = ct(a, 15), h = l.t, E = l.l, y = ct(o, 15), u = y.t, v = y.l, x = Gt(h), s = x.c, c = x.n, T = Gt(u), d = T.c, w = T.n, F = new ue(19), Y = 0; Y < s.length; ++Y)
2543
+ ++F[s[Y] & 31];
2541
2544
  for (var Y = 0; Y < d.length; ++Y)
2542
- ++B[d[Y] & 31];
2543
- for (var I = lt(B, 7), _ = I.t, U = I.l, O = 19; O > 4 && !_[ut[O - 1]]; --O)
2545
+ ++F[d[Y] & 31];
2546
+ for (var I = ct(F, 7), _ = I.t, B = I.l, O = 19; O > 4 && !_[ft[O - 1]]; --O)
2544
2547
  ;
2545
- var C = g + 5 << 3, $ = Ne(a, Se) + Ne(o, ze) + i, V = Ne(a, h) + Ne(o, u) + i + 14 + 3 * O + Ne(B, _) + 2 * B[16] + 3 * B[17] + 7 * B[18];
2546
- if (m >= 0 && C <= $ && C <= V)
2547
- return cn(e, p, n.subarray(m, m + g));
2548
- var j, D, H, R;
2549
- if (Ae(e, p, 1 + (V < $)), p += 2, V < $) {
2550
- j = be(h, S, 0), D = h, H = be(u, b, 0), R = u;
2551
- var Z = be(_, U, 0);
2552
- Ae(e, p, c - 257), Ae(e, p + 5, w - 1), Ae(e, p + 10, O - 4), p += 14;
2548
+ var z = g + 5 << 3, D = Xe(a, Oe) + Xe(o, Pe) + i, J = Xe(a, h) + Xe(o, u) + i + 14 + 3 * O + Xe(F, _) + 2 * F[16] + 3 * F[17] + 7 * F[18];
2549
+ if (m >= 0 && z <= D && z <= J)
2550
+ return hn(e, p, n.subarray(m, m + g));
2551
+ var j, H, Z, $;
2552
+ if (Ee(e, p, 1 + (J < D)), p += 2, J < D) {
2553
+ j = xe(h, E, 0), H = h, Z = xe(u, v, 0), $ = u;
2554
+ var q = xe(_, B, 0);
2555
+ Ee(e, p, c - 257), Ee(e, p + 5, w - 1), Ee(e, p + 10, O - 4), p += 14;
2553
2556
  for (var Y = 0; Y < O; ++Y)
2554
- Ae(e, p + 3 * Y, _[ut[Y]]);
2557
+ Ee(e, p + 3 * Y, _[ft[Y]]);
2555
2558
  p += 3 * O;
2556
- for (var P = [s, d], G = 0; G < 2; ++G)
2557
- for (var J = P[G], Y = 0; Y < J.length; ++Y) {
2558
- var q = J[Y] & 31;
2559
- Ae(e, p, Z[q]), p += _[q], q > 15 && (Ae(e, p, J[Y] >> 5 & 127), p += J[Y] >> 12);
2559
+ for (var W = [s, d], N = 0; N < 2; ++N)
2560
+ for (var G = W[N], Y = 0; Y < G.length; ++Y) {
2561
+ var V = G[Y] & 31;
2562
+ Ee(e, p, q[V]), p += _[V], V > 15 && (Ee(e, p, G[Y] >> 5 & 127), p += G[Y] >> 12);
2560
2563
  }
2561
2564
  } else
2562
- j = or, D = Se, H = ir, R = ze;
2565
+ j = or, H = Oe, Z = ir, $ = Pe;
2563
2566
  for (var Y = 0; Y < f; ++Y) {
2564
- var v = r[Y];
2565
- if (v > 255) {
2566
- var q = v >> 18 & 31;
2567
- Ie(e, p, j[q + 257]), p += D[q + 257], q > 7 && (Ae(e, p, v >> 23 & 31), p += Je[q]);
2568
- var A = v & 31;
2569
- Ie(e, p, H[A]), p += R[A], A > 3 && (Ie(e, p, v >> 5 & 8191), p += Ke[A]);
2567
+ var b = r[Y];
2568
+ if (b > 255) {
2569
+ var V = b >> 18 & 31;
2570
+ je(e, p, j[V + 257]), p += H[V + 257], V > 7 && (Ee(e, p, b >> 23 & 31), p += Ke[V]);
2571
+ var M = b & 31;
2572
+ je(e, p, Z[M]), p += $[M], M > 3 && (je(e, p, b >> 5 & 8191), p += Qe[M]);
2570
2573
  } else
2571
- Ie(e, p, j[v]), p += D[v];
2574
+ je(e, p, j[b]), p += H[b];
2572
2575
  }
2573
- return Ie(e, p, j[256]), p + D[256];
2574
- }, ur = /* @__PURE__ */ new St([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]), hn = /* @__PURE__ */ new ae(0), fr = function(n, e, t, r, a, o) {
2576
+ return je(e, p, j[256]), p + H[256];
2577
+ }, ur = /* @__PURE__ */ new Tt([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]), un = /* @__PURE__ */ new ae(0), fr = function(n, e, t, r, a, o) {
2575
2578
  var i = o.z || n.length, f = new ae(r + i + 5 * (1 + Math.ceil(i / 7e3)) + a), m = f.subarray(r, f.length - a), g = o.l, p = (o.r || 0) & 7;
2576
2579
  if (e) {
2577
2580
  p && (m[0] = o.r >> 3);
2578
- for (var l = ur[e - 1], h = l >> 13, S = l & 8191, y = (1 << t) - 1, u = o.p || new ue(32768), b = o.h || new ue(y + 1), x = Math.ceil(t / 3), s = 2 * x, c = function(L) {
2579
- return (n[L] ^ n[L + 1] << x ^ n[L + 2] << s) & y;
2580
- }, T = new St(25e3), d = new ue(288), w = new ue(32), B = 0, Y = 0, I = o.i || 0, _ = 0, U = o.w || 0, O = 0; I + 2 < i; ++I) {
2581
- var C = c(I), $ = I & 32767, V = b[C];
2582
- if (u[$] = V, b[C] = $, U <= I) {
2581
+ for (var l = ur[e - 1], h = l >> 13, E = l & 8191, y = (1 << t) - 1, u = o.p || new ue(32768), v = o.h || new ue(y + 1), x = Math.ceil(t / 3), s = 2 * x, c = function(R) {
2582
+ return (n[R] ^ n[R + 1] << x ^ n[R + 2] << s) & y;
2583
+ }, T = new Tt(25e3), d = new ue(288), w = new ue(32), F = 0, Y = 0, I = o.i || 0, _ = 0, B = o.w || 0, O = 0; I + 2 < i; ++I) {
2584
+ var z = c(I), D = I & 32767, J = v[z];
2585
+ if (u[D] = J, v[z] = D, B <= I) {
2583
2586
  var j = i - I;
2584
- if ((B > 7e3 || _ > 24576) && (j > 423 || !g)) {
2585
- p = Gt(n, m, 0, T, d, w, Y, _, O, I - O, p), _ = B = Y = 0, O = I;
2586
- for (var D = 0; D < 286; ++D)
2587
- d[D] = 0;
2588
- for (var D = 0; D < 30; ++D)
2589
- w[D] = 0;
2587
+ if ((F > 7e3 || _ > 24576) && (j > 423 || !g)) {
2588
+ p = Vt(n, m, 0, T, d, w, Y, _, O, I - O, p), _ = F = Y = 0, O = I;
2589
+ for (var H = 0; H < 286; ++H)
2590
+ d[H] = 0;
2591
+ for (var H = 0; H < 30; ++H)
2592
+ w[H] = 0;
2590
2593
  }
2591
- var H = 2, R = 0, Z = S, P = $ - V & 32767;
2592
- if (j > 2 && C == c(I - P))
2593
- for (var G = Math.min(h, j) - 1, J = Math.min(32767, I), q = Math.min(258, j); P <= J && --Z && $ != V; ) {
2594
- if (n[I + H] == n[I + H - P]) {
2595
- for (var v = 0; v < q && n[I + v] == n[I + v - P]; ++v)
2594
+ var Z = 2, $ = 0, q = E, W = D - J & 32767;
2595
+ if (j > 2 && z == c(I - W))
2596
+ for (var N = Math.min(h, j) - 1, G = Math.min(32767, I), V = Math.min(258, j); W <= G && --q && D != J; ) {
2597
+ if (n[I + Z] == n[I + Z - W]) {
2598
+ for (var b = 0; b < V && n[I + b] == n[I + b - W]; ++b)
2596
2599
  ;
2597
- if (v > H) {
2598
- if (H = v, R = P, v > G)
2600
+ if (b > Z) {
2601
+ if (Z = b, $ = W, b > N)
2599
2602
  break;
2600
- for (var A = Math.min(P, v - 2), E = 0, D = 0; D < A; ++D) {
2601
- var k = I - P + D & 32767, N = u[k], z = k - N & 32767;
2602
- z > E && (E = z, V = k);
2603
+ for (var M = Math.min(W, b - 2), S = 0, H = 0; H < M; ++H) {
2604
+ var L = I - W + H & 32767, U = u[L], X = L - U & 32767;
2605
+ X > S && (S = X, J = L);
2603
2606
  }
2604
2607
  }
2605
2608
  }
2606
- $ = V, V = u[$], P += $ - V & 32767;
2609
+ D = J, J = u[D], W += D - J & 32767;
2607
2610
  }
2608
- if (R) {
2609
- T[_++] = 268435456 | ft[H] << 18 | Zt[R];
2610
- var F = ft[H] & 31, X = Zt[R] & 31;
2611
- Y += Je[F] + Ke[X], ++d[257 + F], ++w[X], U = I + H, ++B;
2611
+ if ($) {
2612
+ T[_++] = 268435456 | mt[Z] << 18 | Wt[$];
2613
+ var k = mt[Z] & 31, P = Wt[$] & 31;
2614
+ Y += Ke[k] + Qe[P], ++d[257 + k], ++w[P], B = I + Z, ++F;
2612
2615
  } else
2613
2616
  T[_++] = n[I], ++d[n[I]];
2614
2617
  }
2615
2618
  }
2616
- for (I = Math.max(I, U); I < i; ++I)
2619
+ for (I = Math.max(I, B); I < i; ++I)
2617
2620
  T[_++] = n[I], ++d[n[I]];
2618
- p = Gt(n, m, g, T, d, w, Y, _, O, I - O, p), g || (o.r = p & 7 | m[p / 8 | 0] << 3, p -= 7, o.h = b, o.p = u, o.i = I, o.w = U);
2621
+ p = Vt(n, m, g, T, d, w, Y, _, O, I - O, p), g || (o.r = p & 7 | m[p / 8 | 0] << 3, p -= 7, o.h = v, o.p = u, o.i = I, o.w = B);
2619
2622
  } else {
2620
2623
  for (var I = o.w || 0; I < i + g; I += 65535) {
2621
- var M = I + 65535;
2622
- M >= i && (m[p / 8 | 0] = g, M = i), p = cn(m, p + 1, n.subarray(I, M));
2624
+ var A = I + 65535;
2625
+ A >= i && (m[p / 8 | 0] = g, A = i), p = hn(m, p + 1, n.subarray(I, A));
2623
2626
  }
2624
2627
  o.i = i;
2625
2628
  }
2626
- return Pe(f, 0, r + Tt(p) + a);
2629
+ return De(f, 0, r + Ot(p) + a);
2627
2630
  }, mr = /* @__PURE__ */ (function() {
2628
2631
  for (var n = new Int32Array(256), e = 0; e < 256; ++e) {
2629
2632
  for (var t = e, r = 9; --r; )
@@ -2649,20 +2652,20 @@ var or = /* @__PURE__ */ be(Se, 9, 0), sr = /* @__PURE__ */ be(Se, 9, 1), ir = /
2649
2652
  i.set(o), i.set(n, o.length), n = i, a.w = o.length;
2650
2653
  }
2651
2654
  return fr(n, e.level == null ? 6 : e.level, e.mem == null ? a.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(n.length))) * 1.5) : 20 : 12 + e.mem, t, r, a);
2652
- }, un = function(n, e) {
2655
+ }, fn = function(n, e) {
2653
2656
  var t = {};
2654
2657
  for (var r in n)
2655
2658
  t[r] = n[r];
2656
2659
  for (var r in e)
2657
2660
  t[r] = e[r];
2658
2661
  return t;
2659
- }, ve = function(n, e) {
2662
+ }, be = function(n, e) {
2660
2663
  return n[e] | n[e + 1] << 8;
2661
2664
  }, fe = function(n, e) {
2662
2665
  return (n[e] | n[e + 1] << 8 | n[e + 2] << 16 | n[e + 3] << 24) >>> 0;
2663
- }, ct = function(n, e) {
2666
+ }, ht = function(n, e) {
2664
2667
  return fe(n, e) + fe(n, e + 4) * 4294967296;
2665
- }, ie = function(n, e, t) {
2668
+ }, le = function(n, e, t) {
2666
2669
  for (; t; ++e)
2667
2670
  n[e] = t, t >>>= 8;
2668
2671
  };
@@ -2672,28 +2675,28 @@ function gr(n, e) {
2672
2675
  function yr(n, e) {
2673
2676
  return hr(n, { i: 2 }, e && e.out, e && e.dictionary);
2674
2677
  }
2675
- var fn = function(n, e, t, r) {
2678
+ var mn = function(n, e, t, r) {
2676
2679
  for (var a in n) {
2677
2680
  var o = n[a], i = e + a, f = r;
2678
- Array.isArray(o) && (f = un(r, o[1]), o = o[0]), ArrayBuffer.isView(o) ? t[i] = [o, f] : (t[i += "/"] = [new ae(0), f], fn(o, i, t, r));
2681
+ Array.isArray(o) && (f = fn(r, o[1]), o = o[0]), ArrayBuffer.isView(o) ? t[i] = [o, f] : (t[i += "/"] = [new ae(0), f], mn(o, i, t, r));
2679
2682
  }
2680
- }, Vt = typeof TextEncoder < "u" && /* @__PURE__ */ new TextEncoder(), dt = typeof TextDecoder < "u" && /* @__PURE__ */ new TextDecoder(), vr = 0;
2683
+ }, qt = typeof TextEncoder < "u" && /* @__PURE__ */ new TextEncoder(), gt = typeof TextDecoder < "u" && /* @__PURE__ */ new TextDecoder(), vr = 0;
2681
2684
  try {
2682
- dt.decode(hn, { stream: !0 }), vr = 1;
2685
+ gt.decode(un, { stream: !0 }), vr = 1;
2683
2686
  } catch {
2684
2687
  }
2685
2688
  var br = function(n) {
2686
2689
  for (var e = "", t = 0; ; ) {
2687
2690
  var r = n[t++], a = (r > 127) + (r > 223) + (r > 239);
2688
2691
  if (t + a > n.length)
2689
- return { s: e, r: Pe(n, t - 1) };
2692
+ return { s: e, r: De(n, t - 1) };
2690
2693
  a ? a == 3 ? (r = ((r & 15) << 18 | (n[t++] & 63) << 12 | (n[t++] & 63) << 6 | n[t++] & 63) - 65536, e += String.fromCharCode(55296 | r >> 10, 56320 | r & 1023)) : a & 1 ? e += String.fromCharCode((r & 31) << 6 | n[t++] & 63) : e += String.fromCharCode((r & 15) << 12 | (n[t++] & 63) << 6 | n[t++] & 63) : e += String.fromCharCode(r);
2691
2694
  }
2692
2695
  };
2693
- function qt(n, e) {
2696
+ function Jt(n, e) {
2694
2697
  var t;
2695
- if (Vt)
2696
- return Vt.encode(n);
2698
+ if (qt)
2699
+ return qt.encode(n);
2697
2700
  for (var r = n.length, a = new ae(n.length + (n.length >> 1)), o = 0, i = function(g) {
2698
2701
  a[o++] = g;
2699
2702
  }, t = 0; t < r; ++t) {
@@ -2704,7 +2707,7 @@ function qt(n, e) {
2704
2707
  var m = n.charCodeAt(t);
2705
2708
  m < 128 || e ? i(m) : m < 2048 ? (i(192 | m >> 6), i(128 | m & 63)) : m > 55295 && m < 57344 ? (m = 65536 + (m & 1047552) | n.charCodeAt(++t) & 1023, i(240 | m >> 18), i(128 | m >> 12 & 63), i(128 | m >> 6 & 63), i(128 | m & 63)) : (i(224 | m >> 12), i(128 | m >> 6 & 63), i(128 | m & 63));
2706
2709
  }
2707
- return Pe(a, 0, o);
2710
+ return De(a, 0, o);
2708
2711
  }
2709
2712
  function xr(n, e) {
2710
2713
  if (e) {
@@ -2712,84 +2715,84 @@ function xr(n, e) {
2712
2715
  t += String.fromCharCode.apply(null, n.subarray(r, r + 16384));
2713
2716
  return t;
2714
2717
  } else {
2715
- if (dt)
2716
- return dt.decode(n);
2718
+ if (gt)
2719
+ return gt.decode(n);
2717
2720
  var a = br(n), o = a.s, t = a.r;
2718
- return t.length && le(8), o;
2721
+ return t.length && ce(8), o;
2719
2722
  }
2720
2723
  }
2721
2724
  var wr = function(n, e) {
2722
- return e + 30 + ve(n, e + 26) + ve(n, e + 28);
2725
+ return e + 30 + be(n, e + 26) + be(n, e + 28);
2723
2726
  }, Ar = function(n, e, t) {
2724
- var r = ve(n, e + 28), a = ve(n, e + 30), o = xr(n.subarray(e + 46, e + 46 + r), !(ve(n, e + 8) & 2048)), i = e + 46 + r, f = Mr(n, i, a, t, fe(n, e + 20), fe(n, e + 24), fe(n, e + 42)), m = f[0], g = f[1], p = f[2];
2725
- return [ve(n, e + 10), m, g, o, i + a + ve(n, e + 32), p];
2727
+ var r = be(n, e + 28), a = be(n, e + 30), o = xr(n.subarray(e + 46, e + 46 + r), !(be(n, e + 8) & 2048)), i = e + 46 + r, f = Mr(n, i, a, t, fe(n, e + 20), fe(n, e + 24), fe(n, e + 42)), m = f[0], g = f[1], p = f[2];
2728
+ return [be(n, e + 10), m, g, o, i + a + be(n, e + 32), p];
2726
2729
  }, Mr = function(n, e, t, r, a, o, i) {
2727
2730
  var f = a == 4294967295, m = o == 4294967295, g = i == 4294967295, p = e + t, l = f + m + g;
2728
2731
  if (r && l) {
2729
- for (; e + 4 < p; e += 4 + ve(n, e + 2))
2730
- if (ve(n, e) == 1)
2732
+ for (; e + 4 < p; e += 4 + be(n, e + 2))
2733
+ if (be(n, e) == 1)
2731
2734
  return [
2732
- f ? ct(n, e + 4 + 8 * m) : a,
2733
- m ? ct(n, e + 4) : o,
2734
- g ? ct(n, e + 4 + 8 * (m + f)) : i,
2735
+ f ? ht(n, e + 4 + 8 * m) : a,
2736
+ m ? ht(n, e + 4) : o,
2737
+ g ? ht(n, e + 4 + 8 * (m + f)) : i,
2735
2738
  1
2736
2739
  ];
2737
- r < 2 && le(13);
2740
+ r < 2 && ce(13);
2738
2741
  }
2739
2742
  return [a, o, i, 0];
2740
- }, gt = function(n) {
2743
+ }, yt = function(n) {
2741
2744
  var e = 0;
2742
2745
  if (n)
2743
2746
  for (var t in n) {
2744
2747
  var r = n[t].length;
2745
- r > 65535 && le(9), e += r + 4;
2748
+ r > 65535 && ce(9), e += r + 4;
2746
2749
  }
2747
2750
  return e;
2748
- }, Jt = function(n, e, t, r, a, o, i, f) {
2749
- var m = r.length, g = t.extra, p = f && f.length, l = gt(g);
2750
- ie(n, e, i != null ? 33639248 : 67324752), e += 4, i != null && (n[e++] = 20, n[e++] = t.os), n[e] = 20, e += 2, n[e++] = t.flag << 1 | (o < 0 && 8), n[e++] = a && 8, n[e++] = t.compression & 255, n[e++] = t.compression >> 8;
2751
- var h = new Date(t.mtime == null ? Date.now() : t.mtime), S = h.getFullYear() - 1980;
2752
- if ((S < 0 || S > 119) && le(10), ie(n, e, S << 25 | h.getMonth() + 1 << 21 | h.getDate() << 16 | h.getHours() << 11 | h.getMinutes() << 5 | h.getSeconds() >> 1), e += 4, o != -1 && (ie(n, e, t.crc), ie(n, e + 4, o < 0 ? -o - 2 : o), ie(n, e + 8, t.size)), ie(n, e + 12, m), ie(n, e + 14, l), e += 16, i != null && (ie(n, e, p), ie(n, e + 6, t.attrs), ie(n, e + 10, i), e += 14), n.set(r, e), e += m, l)
2751
+ }, Kt = function(n, e, t, r, a, o, i, f) {
2752
+ var m = r.length, g = t.extra, p = f && f.length, l = yt(g);
2753
+ le(n, e, i != null ? 33639248 : 67324752), e += 4, i != null && (n[e++] = 20, n[e++] = t.os), n[e] = 20, e += 2, n[e++] = t.flag << 1 | (o < 0 && 8), n[e++] = a && 8, n[e++] = t.compression & 255, n[e++] = t.compression >> 8;
2754
+ var h = new Date(t.mtime == null ? Date.now() : t.mtime), E = h.getFullYear() - 1980;
2755
+ if ((E < 0 || E > 119) && ce(10), le(n, e, E << 25 | h.getMonth() + 1 << 21 | h.getDate() << 16 | h.getHours() << 11 | h.getMinutes() << 5 | h.getSeconds() >> 1), e += 4, o != -1 && (le(n, e, t.crc), le(n, e + 4, o < 0 ? -o - 2 : o), le(n, e + 8, t.size)), le(n, e + 12, m), le(n, e + 14, l), e += 16, i != null && (le(n, e, p), le(n, e + 6, t.attrs), le(n, e + 10, i), e += 14), n.set(r, e), e += m, l)
2753
2756
  for (var y in g) {
2754
- var u = g[y], b = u.length;
2755
- ie(n, e, +y), ie(n, e + 2, b), n.set(u, e + 4), e += 4 + b;
2757
+ var u = g[y], v = u.length;
2758
+ le(n, e, +y), le(n, e + 2, v), n.set(u, e + 4), e += 4 + v;
2756
2759
  }
2757
2760
  return p && (n.set(f, e), e += p), e;
2758
2761
  }, Er = function(n, e, t, r, a) {
2759
- ie(n, e, 101010256), ie(n, e + 8, t), ie(n, e + 10, t), ie(n, e + 12, r), ie(n, e + 16, a);
2762
+ le(n, e, 101010256), le(n, e + 8, t), le(n, e + 10, t), le(n, e + 12, r), le(n, e + 16, a);
2760
2763
  };
2761
2764
  function Sr(n, e) {
2762
2765
  e || (e = {});
2763
2766
  var t = {}, r = [];
2764
- fn(n, "", t, e);
2767
+ mn(n, "", t, e);
2765
2768
  var a = 0, o = 0;
2766
2769
  for (var i in t) {
2767
- var f = t[i], m = f[0], g = f[1], p = g.level == 0 ? 0 : 8, l = qt(i), h = l.length, S = g.comment, y = S && qt(S), u = y && y.length, b = gt(g.extra);
2768
- h > 65535 && le(11);
2770
+ var f = t[i], m = f[0], g = f[1], p = g.level == 0 ? 0 : 8, l = Jt(i), h = l.length, E = g.comment, y = E && Jt(E), u = y && y.length, v = yt(g.extra);
2771
+ h > 65535 && ce(11);
2769
2772
  var x = p ? gr(m, g) : m, s = x.length, c = pr();
2770
- c.p(m), r.push(un(g, {
2773
+ c.p(m), r.push(fn(g, {
2771
2774
  size: m.length,
2772
2775
  crc: c.d(),
2773
2776
  c: x,
2774
2777
  f: l,
2775
2778
  m: y,
2776
- u: h != i.length || y && S.length != u,
2779
+ u: h != i.length || y && E.length != u,
2777
2780
  o: a,
2778
2781
  compression: p
2779
- })), a += 30 + h + b + s, o += 76 + 2 * (h + b) + (u || 0) + s;
2782
+ })), a += 30 + h + v + s, o += 76 + 2 * (h + v) + (u || 0) + s;
2780
2783
  }
2781
- for (var T = new ae(o + 22), d = a, w = o - a, B = 0; B < r.length; ++B) {
2782
- var l = r[B];
2783
- Jt(T, l.o, l, l.f, l.u, l.c.length);
2784
- var Y = 30 + l.f.length + gt(l.extra);
2785
- T.set(l.c, l.o + Y), Jt(T, a, l, l.f, l.u, l.c.length, l.o, l.m), a += 16 + Y + (l.m ? l.m.length : 0);
2784
+ for (var T = new ae(o + 22), d = a, w = o - a, F = 0; F < r.length; ++F) {
2785
+ var l = r[F];
2786
+ Kt(T, l.o, l, l.f, l.u, l.c.length);
2787
+ var Y = 30 + l.f.length + yt(l.extra);
2788
+ T.set(l.c, l.o + Y), Kt(T, a, l, l.f, l.u, l.c.length, l.o, l.m), a += 16 + Y + (l.m ? l.m.length : 0);
2786
2789
  }
2787
2790
  return Er(T, a, r.length, w, d), T;
2788
2791
  }
2789
2792
  function Tr(n, e) {
2790
2793
  for (var t = {}, r = n.length - 22; fe(n, r) != 101010256; --r)
2791
- (!r || n.length - r > 65558) && le(13);
2792
- var a = ve(n, r + 8);
2794
+ (!r || n.length - r > 65558) && ce(13);
2795
+ var a = be(n, r + 8);
2793
2796
  if (!a)
2794
2797
  return {};
2795
2798
  var o = fe(n, r + 16), i = fe(n, r - 20) == 117853008;
@@ -2798,22 +2801,22 @@ function Tr(n, e) {
2798
2801
  i = fe(n, f) == 101075792, i && (a = fe(n, f + 32), o = fe(n, f + 48));
2799
2802
  }
2800
2803
  for (var m = e && e.filter, g = 0; g < a; ++g) {
2801
- var p = Ar(n, o, i), l = p[0], h = p[1], S = p[2], y = p[3], u = p[4], b = p[5], x = wr(n, b);
2804
+ var p = Ar(n, o, i), l = p[0], h = p[1], E = p[2], y = p[3], u = p[4], v = p[5], x = wr(n, v);
2802
2805
  o = u, (!m || m({
2803
2806
  name: y,
2804
2807
  size: h,
2805
- originalSize: S,
2808
+ originalSize: E,
2806
2809
  compression: l
2807
- })) && (l ? l == 8 ? t[y] = yr(n.subarray(x, x + h), { out: new ae(S) }) : le(14, "unknown compression type " + l) : t[y] = Pe(n, x, x + h));
2810
+ })) && (l ? l == 8 ? t[y] = yr(n.subarray(x, x + h), { out: new ae(E) }) : ce(14, "unknown compression type " + l) : t[y] = De(n, x, x + h));
2808
2811
  }
2809
2812
  return t;
2810
2813
  }
2811
- const qe = 200, yt = 64 * 1024 * 1024, vt = new TextDecoder("utf-8", { fatal: !0 });
2812
- function Ot(n) {
2814
+ const Je = 200, vt = 64 * 1024 * 1024, bt = new TextDecoder("utf-8", { fatal: !0 });
2815
+ function Rt(n) {
2813
2816
  if (!n || n.startsWith("/") || /^[A-Za-z]:/.test(n) || n.includes("\\") || n.includes("\0") || n.split("/").includes(".."))
2814
2817
  throw new Error(`ZIP entry ${JSON.stringify(n)}: path must be relative, without .. or backslashes`);
2815
2818
  }
2816
- function bt(n) {
2819
+ function xt(n) {
2817
2820
  const e = new DataView(n.buffer, n.byteOffset, n.byteLength), t = (h = "(archive)") => {
2818
2821
  throw new Error(`ZIP entry ${JSON.stringify(h)}: invalid or truncated ZIP`);
2819
2822
  }, r = (h) => h >= 0 && h + 2 <= n.length ? e.getUint16(h, !0) : t(), a = (h) => h >= 0 && h + 4 <= n.length ? e.getUint32(h, !0) : t();
@@ -2827,36 +2830,36 @@ function bt(n) {
2827
2830
  let l = f;
2828
2831
  for (let h = 0; h < i; h++) {
2829
2832
  (l + 46 > m || a(l) !== 33639248) && t();
2830
- const S = r(l + 28), y = l + 46 + S + r(l + 30) + r(l + 32);
2833
+ const E = r(l + 28), y = l + 46 + E + r(l + 30) + r(l + 32);
2831
2834
  y > m && t();
2832
2835
  let u;
2833
2836
  try {
2834
- u = vt.decode(n.subarray(l + 46, l + 46 + S));
2837
+ u = bt.decode(n.subarray(l + 46, l + 46 + E));
2835
2838
  } catch {
2836
2839
  throw new Error("ZIP entry (invalid UTF-8 name): invalid filename");
2837
2840
  }
2838
- if (Ot(u), h >= qe) throw new Error(`ZIP entry ${JSON.stringify(u)}: more than ${qe} entries`);
2841
+ if (Rt(u), h >= Je) throw new Error(`ZIP entry ${JSON.stringify(u)}: more than ${Je} entries`);
2839
2842
  if (p.has(u)) throw new Error(`ZIP entry ${JSON.stringify(u)}: duplicate entry`);
2840
2843
  p.add(u);
2841
- const b = a(l + 24), x = a(l + 20), s = a(l + 42);
2842
- if (b > yt || x > yt) throw new Error(`ZIP entry ${JSON.stringify(u)}: exceeds 64 MB`);
2844
+ const v = a(l + 24), x = a(l + 20), s = a(l + 42);
2845
+ if (v > vt || x > vt) throw new Error(`ZIP entry ${JSON.stringify(u)}: exceeds 64 MB`);
2843
2846
  if (r(l + 10) !== 0) throw new Error(`ZIP entry ${JSON.stringify(u)}: expected stored compression (method 0)`);
2844
2847
  if (r(l + 8) & 1) throw new Error(`ZIP entry ${JSON.stringify(u)}: encrypted entries are not supported`);
2845
- (x !== b || s + 30 > f || a(s) !== 67324752) && t(u);
2848
+ (x !== v || s + 30 > f || a(s) !== 67324752) && t(u);
2846
2849
  const c = s + 30 + r(s + 26) + r(s + 28);
2847
- (c + b > f || r(s + 8) !== 0 || r(s + 6) !== r(l + 8)) && t(u);
2850
+ (c + v > f || r(s + 8) !== 0 || r(s + 6) !== r(l + 8)) && t(u);
2848
2851
  let T;
2849
2852
  try {
2850
- T = vt.decode(n.subarray(s + 30, s + 30 + r(s + 26)));
2853
+ T = bt.decode(n.subarray(s + 30, s + 30 + r(s + 26)));
2851
2854
  } catch {
2852
2855
  t(u);
2853
2856
  }
2854
- T !== u && t(u), g.push({ name: u, offset: s, start: c, size: b, central: l }), l = y;
2857
+ T !== u && t(u), g.push({ name: u, offset: s, start: c, size: v, central: l }), l = y;
2855
2858
  }
2856
2859
  return l !== m && t(), { files: g };
2857
2860
  }
2858
2861
  function Or(n) {
2859
- const e = n instanceof Uint8Array ? n : new Uint8Array(n), t = bt(e), r = Tr(e, { filter: (o) => o.name !== "__proto__" }), a = /* @__PURE__ */ Object.create(null);
2862
+ const e = n instanceof Uint8Array ? n : new Uint8Array(n), t = xt(e), r = Tr(e, { filter: (o) => o.name !== "__proto__" }), a = /* @__PURE__ */ Object.create(null);
2860
2863
  for (const o of t.files) {
2861
2864
  const i = o.name === "__proto__" ? e.slice(o.start, o.start + o.size) : r[o.name];
2862
2865
  if (!(i instanceof Uint8Array) || i.length !== o.size) throw new Error(`ZIP entry ${JSON.stringify(o.name)}: invalid size`);
@@ -2865,43 +2868,43 @@ function Or(n) {
2865
2868
  return a;
2866
2869
  }
2867
2870
  function Fr(n, e = {}) {
2868
- const t = Object.hasOwn(n, "avatar.json") ? n["avatar.json"] : void 0, r = t ? ke(JSON.parse(vt.decode(t))) : nn("Avatar"), a = t && !e.manifest ? t : new TextEncoder().encode(JSON.stringify(ke({ ...r, ...e.manifest }), null, 2) + `
2871
+ const t = Object.hasOwn(n, "avatar.json") ? n["avatar.json"] : void 0, r = t ? Be(JSON.parse(bt.decode(t))) : rn("Avatar"), a = t && !e.manifest ? t : new TextEncoder().encode(JSON.stringify(Be({ ...r, ...e.manifest }), null, 2) + `
2869
2872
  `), o = /* @__PURE__ */ Object.create(null);
2870
2873
  o["avatar.json"] = a;
2871
- for (const [h, S] of Object.entries(n)) h !== "avatar.json" && (o[h] = S);
2872
- for (const [h, [S, y]] of Object.entries(o).entries()) {
2873
- if (Ot(S), h >= qe) throw new Error(`ZIP entry ${JSON.stringify(S)}: more than ${qe} entries`);
2874
- if (y.byteLength > yt) throw new Error(`ZIP entry ${JSON.stringify(S)}: exceeds 64 MB`);
2874
+ for (const [h, E] of Object.entries(n)) h !== "avatar.json" && (o[h] = E);
2875
+ for (const [h, [E, y]] of Object.entries(o).entries()) {
2876
+ if (Rt(E), h >= Je) throw new Error(`ZIP entry ${JSON.stringify(E)}: more than ${Je} entries`);
2877
+ if (y.byteLength > vt) throw new Error(`ZIP entry ${JSON.stringify(E)}: exceeds 64 MB`);
2875
2878
  }
2876
- const i = rn(o);
2879
+ const i = an(o);
2877
2880
  if (i.length) throw new Error(i.join(`
2878
2881
  `));
2879
2882
  let f = "proto0000";
2880
2883
  for (let h = 0; Object.hasOwn(o, f); h++) f = `proto${String(h + 1).padStart(4, "0")}`;
2881
- const m = Object.fromEntries(Object.entries(o).map(([h, S]) => [h === "__proto__" ? f : h, S])), g = Sr(m, { level: 0 });
2884
+ const m = Object.fromEntries(Object.entries(o).map(([h, E]) => [h === "__proto__" ? f : h, E])), g = Sr(m, { level: 0 });
2882
2885
  if (Object.hasOwn(o, "__proto__")) {
2883
- const h = bt(g).files.find((y) => y.name === f), S = new TextEncoder().encode("__proto__");
2884
- g.set(S, h.offset + 30), g.set(S, h.central + 46);
2886
+ const h = xt(g).files.find((y) => y.name === f), E = new TextEncoder().encode("__proto__");
2887
+ g.set(E, h.offset + 30), g.set(E, h.central + 46);
2885
2888
  }
2886
- const p = bt(g), l = p.files.find((h) => h.name === "avatar.json");
2889
+ const p = xt(g), l = p.files.find((h) => h.name === "avatar.json");
2887
2890
  if (l.offset !== 0) {
2888
- const h = l.start + l.size - l.offset, S = new Uint8Array(g.length);
2889
- S.set(g.subarray(l.offset, l.offset + h)), S.set(g.subarray(0, l.offset), h), S.set(g.subarray(l.offset + h), l.offset + h);
2890
- const y = new DataView(S.buffer);
2891
+ const h = l.start + l.size - l.offset, E = new Uint8Array(g.length);
2892
+ E.set(g.subarray(l.offset, l.offset + h)), E.set(g.subarray(0, l.offset), h), E.set(g.subarray(l.offset + h), l.offset + h);
2893
+ const y = new DataView(E.buffer);
2891
2894
  for (const u of p.files) y.setUint32(u.central + 42, u === l ? 0 : u.offset < l.offset ? u.offset + h : u.offset, !0);
2892
- return S;
2895
+ return E;
2893
2896
  }
2894
2897
  return g;
2895
2898
  }
2896
2899
  const Rr = (n) => JSON.parse(new TextDecoder("utf-8", { fatal: !0 }).decode(n));
2897
- function Xe(n, e) {
2900
+ function Ce(n, e) {
2898
2901
  try {
2899
2902
  return Rr(n);
2900
2903
  } catch {
2901
2904
  throw new Error(`${e}: invalid UTF-8 JSON`);
2902
2905
  }
2903
2906
  }
2904
- function mn(n, e) {
2907
+ function pn(n, e) {
2905
2908
  return [
2906
2909
  "layers.json",
2907
2910
  "base.png",
@@ -2910,21 +2913,21 @@ function mn(n, e) {
2910
2913
  ...e ? ["sprites/sprites.json", ...Object.keys(e.layers ?? {}).map((t) => `sprites/${t}.png`)] : []
2911
2914
  ];
2912
2915
  }
2913
- function pn(n) {
2914
- const e = rn(n);
2916
+ function dn(n) {
2917
+ const e = an(n);
2915
2918
  if (e.length) throw new Error(e.join(`
2916
2919
  `));
2917
2920
  }
2918
- function dn(n) {
2921
+ function gn(n) {
2919
2922
  return !!n && typeof n == "object" && "manifest" in n && "rig" in n && "assets" in n && "release" in n;
2920
2923
  }
2921
- function ht(n) {
2924
+ function ut(n) {
2922
2925
  const e = Or(n);
2923
2926
  if (!Object.hasOwn(e, "avatar.json")) throw new Error("avatar.json: missing file in .mavatar archive");
2924
- pn(e);
2925
- const t = ke(Xe(e["avatar.json"], "avatar.json")), r = xt(Xe(e["rig.json"], "rig.json")), a = mn(
2926
- Xe(e["built/layers.json"], "built/layers.json"),
2927
- e["built/sprites/sprites.json"] ? Xe(e["built/sprites/sprites.json"], "built/sprites/sprites.json") : void 0
2927
+ dn(e);
2928
+ const t = Be(Ce(e["avatar.json"], "avatar.json")), r = wt(Ce(e["rig.json"], "rig.json")), a = pn(
2929
+ Ce(e["built/layers.json"], "built/layers.json"),
2930
+ e["built/sprites/sprites.json"] ? Ce(e["built/sprites/sprites.json"], "built/sprites/sprites.json") : void 0
2928
2931
  ), o = {}, i = [], f = () => {
2929
2932
  i.splice(0).forEach((m) => URL.revokeObjectURL(m));
2930
2933
  };
@@ -2939,52 +2942,52 @@ function ht(n) {
2939
2942
  return { manifest: t, rig: r, assets: o, release: f };
2940
2943
  }
2941
2944
  async function Lr(n, e = {}) {
2942
- if (dn(n)) return n;
2943
- if (n instanceof Blob) return ht(await n.arrayBuffer());
2944
- if (n instanceof ArrayBuffer || n instanceof Uint8Array) return ht(n);
2945
+ if (gn(n)) return n;
2946
+ if (n instanceof Blob) return ut(await n.arrayBuffer());
2947
+ if (n instanceof ArrayBuffer || n instanceof Uint8Array) return ut(n);
2945
2948
  const t = new URL(n, typeof location > "u" ? void 0 : location.href);
2946
2949
  if (/\.mavatar$/i.test(t.pathname)) {
2947
2950
  const u = await fetch(t);
2948
2951
  if (!u.ok) throw new Error(`.mavatar: could not load (${u.status})`);
2949
- return ht(await u.arrayBuffer());
2952
+ return ut(await u.arrayBuffer());
2950
2953
  }
2951
2954
  t.pathname.endsWith("/") || (t.pathname += "/");
2952
2955
  const r = (u) => {
2953
- const b = new URL(t);
2954
- return b.pathname += u.split("/").map(encodeURIComponent).join("/"), e.version !== void 0 && b.searchParams.set("v", String(e.version)), b.href;
2956
+ const v = new URL(t);
2957
+ return v.pathname += u.split("/").map(encodeURIComponent).join("/"), e.version !== void 0 && v.searchParams.set("v", String(e.version)), v.href;
2955
2958
  }, a = {};
2956
- async function o(u, b = !1) {
2959
+ async function o(u, v = !1) {
2957
2960
  const x = await fetch(r(u));
2958
- if (b && (x.status === 404 || x.ok && x.headers.get("content-type")?.includes("text/html"))) return;
2961
+ if (v && (x.status === 404 || x.ok && x.headers.get("content-type")?.includes("text/html"))) return;
2959
2962
  if (!x.ok) throw new Error(`${u}: could not load (${x.status})`);
2960
2963
  const s = new Uint8Array(await x.arrayBuffer());
2961
- return a[u] = s, Xe(s, u);
2964
+ return a[u] = s, Ce(s, u);
2962
2965
  }
2963
2966
  const i = e.rigFile ?? "rig.json";
2964
- Ot(i);
2967
+ Rt(i);
2965
2968
  const [f, m, g, p] = await Promise.all([
2966
2969
  o(i),
2967
2970
  o("built/layers.json"),
2968
2971
  o("avatar.json", !0),
2969
2972
  o("built/sprites/sprites.json", !0)
2970
2973
  ]);
2971
- Array.isArray(f?.eyes) && Array.isArray(m?.eyes) && (f.eyes = f.eyes.map((u, b) => {
2974
+ Array.isArray(f?.eyes) && Array.isArray(m?.eyes) && (f.eyes = f.eyes.map((u, v) => {
2972
2975
  if (!u || typeof u != "object") return u;
2973
2976
  const x = { ...u };
2974
- for (const s of ["x0", "x1", "top", "bot"]) x[s] === void 0 && (x[s] = m.eyes[b]?.[s]);
2977
+ for (const s of ["x0", "x1", "top", "bot"]) x[s] === void 0 && (x[s] = m.eyes[v]?.[s]);
2975
2978
  return x;
2976
2979
  })), a["rig.json"] = new TextEncoder().encode(JSON.stringify(f));
2977
- const l = mn(m, p);
2980
+ const l = pn(m, p);
2978
2981
  for (const u of l) u.endsWith(".png") && (a[`built/${u}`] = { size: 1 });
2979
- pn(a);
2980
- const h = xt(f), S = Object.fromEntries(l.map((u) => [u, r(`built/${u}`)])), y = decodeURIComponent(t.pathname.split("/").filter(Boolean).at(-1) ?? "Avatar");
2981
- return { manifest: g === void 0 ? nn(y) : ke(g), rig: h, assets: S, release() {
2982
+ dn(a);
2983
+ const h = wt(f), E = Object.fromEntries(l.map((u) => [u, r(`built/${u}`)])), y = decodeURIComponent(t.pathname.split("/").filter(Boolean).at(-1) ?? "Avatar");
2984
+ return { manifest: g === void 0 ? rn(y) : Be(g), rig: h, assets: E, release() {
2982
2985
  } };
2983
2986
  }
2984
2987
  async function Br(n, e, t = {}) {
2985
- const r = !dn(e), a = await Lr(e);
2988
+ const r = !gn(e), a = await Lr(e);
2986
2989
  try {
2987
- const o = t.lipSync === void 0 ? a.manifest.lipSync : { ...a.manifest.lipSync, ...wt(t.lipSync) }, i = await rr(n, { ...t, ...o === void 0 ? {} : { lipSync: o }, rig: a.rig, assets: a.assets }), f = i.destroy.bind(i);
2990
+ const o = t.lipSync === void 0 ? a.manifest.lipSync : { ...a.manifest.lipSync, ...At(t.lipSync) }, i = await rr(n, { ...t, ...o === void 0 ? {} : { lipSync: o }, rig: a.rig, assets: a.assets }), f = i.destroy.bind(i);
2988
2991
  let m = !1;
2989
2992
  return Object.assign(i, { package: a, destroy() {
2990
2993
  if (!m) {
@@ -3001,18 +3004,18 @@ async function Br(n, e, t = {}) {
3001
3004
  }
3002
3005
  }
3003
3006
  export {
3004
- Le as DEFAULT_LIGHTING,
3005
- _r as LIVE_EXPRESSIONS,
3006
- Ze as PARAMS,
3007
- kr as colorHex,
3007
+ Fe as DEFAULT_LIGHTING,
3008
+ kr as LIVE_EXPRESSIONS,
3009
+ We as PARAMS,
3010
+ _r as colorHex,
3008
3011
  rr as createMeshAvatar,
3009
3012
  Br as loadMeshAvatar,
3010
3013
  Lr as openAvatar,
3011
3014
  Fr as packAvatar,
3012
3015
  Tn as parseLighting,
3013
- ke as parseManifest,
3014
- xt as parseRig,
3016
+ Be as parseManifest,
3017
+ wt as parseRig,
3015
3018
  Or as unpackAvatar,
3016
- rn as validateAvatarFiles,
3017
- Kt as validateRig
3019
+ an as validateAvatarFiles,
3020
+ Qt as validateRig
3018
3021
  };