mesh-avatar 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -21,115 +21,115 @@ 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 Q = (n, e, t) => {
24
+ const te = (n, e, t) => {
25
25
  (typeof n != "number" || !Number.isFinite(n)) && t.push(`${e}: expected a finite number`);
26
26
  }, Oe = (n, e, t) => {
27
- Q(n, e, t), typeof n == "number" && n <= 0 && t.push(`${e}: must be positive`);
27
+ te(n, e, t), typeof n == "number" && n <= 0 && t.push(`${e}: must be positive`);
28
28
  }, xe = (n, e, t) => {
29
29
  Oe(n, e, t), typeof n == "number" && !Number.isInteger(n) && t.push(`${e}: expected an integer`);
30
30
  }, _e = (n, e, t) => {
31
- Q(n, e, t), typeof n == "number" && !Number.isInteger(n) && t.push(`${e}: expected an integer`);
31
+ te(n, e, t), typeof n == "number" && !Number.isInteger(n) && t.push(`${e}: expected an integer`);
32
32
  }, kt = (n, e, t) => {
33
33
  (typeof n != "string" || !n.trim()) && t.push(`${e}: expected a non-empty string`);
34
- }, pe = (n, e = 0, t = 1 / 0) => (r, a, s) => {
34
+ }, de = (n, e = 0, t = 1 / 0) => (r, a, s) => {
35
35
  if (!Array.isArray(r)) {
36
36
  s.push(`${a}: expected an array`);
37
37
  return;
38
38
  }
39
- (r.length < e || r.length > t) && s.push(`${a}: expected ${e}..${t} items`), r.forEach((h, f) => n(h, `${a}[${f}]`, s));
40
- }, de = pe(Q, 2, 2), he = (n, e, t) => {
41
- de(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) => {
39
+ (r.length < e || r.length > t) && s.push(`${a}: expected ${e}..${t} items`), r.forEach((l, m) => n(l, `${a}[${m}]`, s));
40
+ }, ge = de(te, 2, 2), ce = (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) => {
43
43
  if (!t || typeof t != "object" || Array.isArray(t)) {
44
44
  a.push(`${r}: expected an object`);
45
45
  return;
46
46
  }
47
47
  const s = t;
48
- for (const [h, f] of Object.entries(n))
49
- s[h] === void 0 && e.includes(h) || f(s[h], `${r}.${h}`, a);
50
- }, Ne = { cx: Q, cy: Q, rx: Oe, ry: Oe }, ye = oe(Ne), $e = pe(de, 3), _t = pe(de, 2), Ke = (n, e, t) => {
51
- Q(n, e, t), typeof n == "number" && (n < 0 || n > 1) && t.push(`${e}: must be between 0 and 1`);
52
- }, mn = (n) => oe({
48
+ for (const [l, m] of Object.entries(n))
49
+ s[l] === void 0 && e.includes(l) || m(s[l], `${r}.${l}`, a);
50
+ }, Ne = { cx: te, cy: te, rx: Oe, ry: Oe }, ye = se(Ne), $e = de(ge, 3), _t = de(ge, 2), Ke = (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
+ }, pn = (n) => se({
53
53
  version: (e, t, r) => {
54
54
  e !== 1 && r.push(`${t}: only version 1 is supported`);
55
55
  },
56
- image: oe({ width: xe, height: xe }),
57
- head: oe({
56
+ image: se({ width: xe, height: xe }),
57
+ head: se({
58
58
  ...Ne,
59
- shiftX: Q,
60
- shiftY: Q,
61
- pivotX: Q,
62
- pivotY: Q,
63
- maxRoll: Q,
64
- weightBand: he,
65
- turnBand: he
59
+ shiftX: te,
60
+ shiftY: te,
61
+ pivotX: te,
62
+ pivotY: te,
63
+ maxRoll: te,
64
+ weightBand: ce,
65
+ turnBand: ce
66
66
  }),
67
- body: oe({
68
- pivotX: Q,
69
- pivotY: Q,
70
- maxRoll: Q,
71
- breathBand: he,
72
- rollBand: he,
67
+ body: se({
68
+ pivotX: te,
69
+ pivotY: te,
70
+ maxRoll: te,
71
+ breathBand: ce,
72
+ rollBand: ce,
73
73
  chest: ye,
74
- shoulders: pe(ye)
74
+ shoulders: de(ye)
75
75
  }),
76
- face: oe({
76
+ face: se({
77
77
  nose: ye,
78
78
  mouth: ye,
79
79
  eyeA: ye,
80
80
  eyeB: ye,
81
81
  earL: ye,
82
82
  earR: ye,
83
- brow: oe({ ...Ne, band: he }),
84
- jaw: oe({ ...Ne, band: he })
83
+ brow: se({ ...Ne, band: ce }),
84
+ jaw: se({ ...Ne, band: ce })
85
85
  }),
86
- buns: oe({ bunL: ye, bunR: ye }, ["bunL", "bunR"]),
87
- eyes: pe(oe({
86
+ buns: se({ bunL: ye, bunR: ye }, ["bunL", "bunR"]),
87
+ eyes: de(se({
88
88
  opening: $e,
89
89
  roi: $e,
90
- x0: Q,
91
- x1: Q,
92
- top: pe(Q, 24, 24),
93
- bot: pe(Q, 24, 24)
90
+ x0: te,
91
+ x1: te,
92
+ top: de(te, 24, 24),
93
+ bot: de(te, 24, 24)
94
94
  }, n ? ["x0", "x1", "top", "bot"] : []), 2, 2),
95
- mouth: oe({
96
- cx: Q,
97
- cy: Q,
98
- angle: Q,
95
+ mouth: se({
96
+ cx: te,
97
+ cy: te,
98
+ angle: te,
99
99
  halfLen: Oe,
100
- bow: Q,
101
- area: oe({ ...Ne, angle: Q })
100
+ bow: te,
101
+ area: se({ ...Ne, angle: te })
102
102
  }),
103
- cheeks: pe(de, 2, 2),
104
- strands: pe(oe({ name: kt, nodes: _t, sigma: Oe, k: Oe, max: Oe })),
105
- accessories: pe(oe({
103
+ cheeks: de(ge, 2, 2),
104
+ strands: de(se({ name: kt, nodes: _t, sigma: Oe, k: Oe, max: Oe })),
105
+ accessories: de(se({
106
106
  name: kt,
107
- pivot: de,
108
- tip: de,
107
+ pivot: ge,
108
+ tip: ge,
109
109
  split: Ke,
110
- box: pe(_e, 4, 4),
111
- color: oe({ redness: Ke, minRed: Q })
110
+ box: de(_e, 4, 4),
111
+ color: se({ redness: Ke, minRed: te })
112
112
  })),
113
- hand: oe({
113
+ hand: se({
114
114
  outline: $e,
115
115
  jaw: _t,
116
- jawRange: he,
116
+ jawRange: ce,
117
117
  background: $e,
118
- elbow: de,
119
- wrist: de,
120
- knuckle: de,
121
- contact: de,
118
+ elbow: ge,
119
+ wrist: ge,
120
+ knuckle: ge,
121
+ contact: ge,
122
122
  forearmShare: Ke,
123
- armBand: he,
124
- wristBand: he,
125
- handBand: he,
126
- fingerXBand: he,
127
- fingerYBand: he,
128
- pinBand: he
123
+ armBand: ce,
124
+ wristBand: ce,
125
+ handBand: ce,
126
+ fingerXBand: ce,
127
+ fingerYBand: ce,
128
+ pinBand: ce
129
129
  }),
130
- mesh: oe({
130
+ mesh: se({
131
131
  baseCell: xe,
132
- fine: oe({
132
+ fine: se({
133
133
  x0: _e,
134
134
  x1: _e,
135
135
  y0: _e,
@@ -142,30 +142,30 @@ const Q = (n, e, t) => {
142
142
  eyeCell: xe,
143
143
  spriteCell: xe
144
144
  }),
145
- view: oe({ padTop: Q, padSide: Q, gazeCenter: de }, ["gazeCenter"])
145
+ view: se({ padTop: te, padSide: te, gazeCenter: ge }, ["gazeCenter"])
146
146
  }, ["buns", "strands", "accessories", "hand"]);
147
- function Wt(n, e = {}) {
147
+ function Gt(n, e = {}) {
148
148
  const t = [];
149
- if (mn(e.draft ?? !1)(n, "rig", t), t.length) return t;
149
+ if (pn(e.draft ?? !1)(n, "rig", t), t.length) return t;
150
150
  const r = n;
151
151
  r.eyes.forEach((a, s) => {
152
- const h = ["x0", "x1", "top", "bot"];
153
- if (!(e.draft && h.every((f) => a[f] === void 0))) {
154
- if (h.some((f) => a[f] === void 0)) {
152
+ const l = ["x0", "x1", "top", "bot"];
153
+ if (!(e.draft && l.every((m) => a[m] === void 0))) {
154
+ if (l.some((m) => a[m] === void 0)) {
155
155
  t.push(`rig.eyes[${s}]: supply all x0/x1/top/bot fields or omit all in a draft`);
156
156
  return;
157
157
  }
158
- a.x0 >= a.x1 && t.push(`rig.eyes[${s}].x1: must exceed x0`), a.top.some((f, v) => f > a.bot[v]) && t.push(`rig.eyes[${s}].top: must not exceed bottom curve`);
158
+ a.x0 >= a.x1 && t.push(`rig.eyes[${s}].x1: must exceed x0`), a.top.some((m, b) => m > a.bot[b]) && t.push(`rig.eyes[${s}].top: must not exceed bottom curve`);
159
159
  }
160
160
  }), (r.mesh.fine.x0 >= r.mesh.fine.x1 || r.mesh.fine.y0 >= r.mesh.fine.y1) && t.push("rig.mesh.fine: rectangle must have positive area"), (r.view.padTop <= -1 || r.view.padTop >= 1 || r.view.padSide <= -0.5) && t.push("rig.view: margins must leave a positive viewport");
161
161
  for (const [a, s] of (r.strands ?? []).entries())
162
- s.nodes.some((h, f) => f > 0 && h[0] === s.nodes[f - 1][0] && h[1] === s.nodes[f - 1][1]) && t.push(`rig.strands[${a}].nodes: consecutive nodes must differ`);
162
+ s.nodes.some((l, m) => m > 0 && l[0] === s.nodes[m - 1][0] && l[1] === s.nodes[m - 1][1]) && t.push(`rig.strands[${a}].nodes: consecutive nodes must differ`);
163
163
  for (const [a, s] of (r.accessories ?? []).entries())
164
- (s.box[0] < 0 || s.box[1] < 0 || s.box[2] > r.image.width || s.box[3] > r.image.height) && t.push(`rig.accessories[${a}].box: rectangle must stay inside the image`), (s.split <= 0 || s.split >= 1) && t.push(`rig.accessories[${a}].split: must be strictly between 0 and 1`), s.pivot.every((h, f) => h === s.tip[f]) && t.push(`rig.accessories[${a}].tip: must differ from pivot`), (s.box[0] >= s.box[2] || s.box[1] >= s.box[3]) && t.push(`rig.accessories[${a}].box: rectangle must have positive area`);
164
+ (s.box[0] < 0 || s.box[1] < 0 || s.box[2] > r.image.width || s.box[3] > r.image.height) && t.push(`rig.accessories[${a}].box: rectangle must stay inside the image`), (s.split <= 0 || s.split >= 1) && t.push(`rig.accessories[${a}].split: must be strictly between 0 and 1`), s.pivot.every((l, m) => l === s.tip[m]) && t.push(`rig.accessories[${a}].tip: must differ from pivot`), (s.box[0] >= s.box[2] || s.box[1] >= s.box[3]) && t.push(`rig.accessories[${a}].box: rectangle must have positive area`);
165
165
  return t;
166
166
  }
167
167
  function bt(n) {
168
- const e = Wt(n);
168
+ const e = Gt(n);
169
169
  if (e.length) throw new Error(`Invalid rig:
170
170
  ${e.join(`
171
171
  `)}`);
@@ -192,183 +192,183 @@ const De = [
192
192
  { id: "handAngle", label: "Wrist angle", min: -10, max: 10, def: 0, group: "Hand" },
193
193
  { id: "fingerTap", label: "Finger tap", min: 0, max: 1, def: 0, group: "Hand" }
194
194
  ];
195
- function pn(n) {
196
- const e = { w: n.image.width, h: n.image.height }, t = (b, w, T) => T ? Math.exp(-(((b - T.cx) / T.rx) ** 2 + ((w - T.cy) / T.ry) ** 2)) : 0, r = 24, a = n.eyes;
197
- function s(b, w) {
198
- const T = Math.min(1, Math.max(0, w)) * (r - 1), _ = Math.min(Math.floor(T), r - 2), N = T - _;
199
- return b[_] + (b[_ + 1] - b[_]) * N;
200
- }
201
- function h(b, w, T, _) {
202
- w = Math.min(1, Math.max(0, w));
203
- const N = s(b.top, w), H = s(b.bot, w), L = 1 - T, G = 4 * w * (1 - w), M = s(b.bot, 0.5) - s(b.top, 0.5), R = b.top[0] + (b.top[r - 1] - b.top[0]) * w - 0.3 * M * G, V = Math.max(N, H + 1 + (R - H - 1) * _);
204
- return [(V - N) * Math.max(L, -0.07), L > 0 ? (V - H) * L * _ : 0];
205
- }
206
- const f = [[-2, 1], [-1, 2], [0, 3], [1, 2], [2, 1]], v = 5;
207
- function p(b, w, T, _) {
208
- let N = 0, H = 0;
209
- for (const [R, V] of f) {
210
- const [te, ne] = h(b, (w + R * v - b.x0) / (b.x1 - b.x0), T, _);
211
- N += te * V / 9, H += ne * V / 9;
212
- }
213
- const L = Math.min(1, Math.max(0, (w - b.x0) / (b.x1 - b.x0))), G = s(b.top, L), M = s(b.bot, L);
214
- return { top: G, bot: M, b: 1 - T, lid: G + N, bc: M + H };
215
- }
216
- function m(b, w, T, _, N, H) {
217
- const L = p(b, T, N, H);
218
- return w === "lash" ? L.lid - (L.top - _) * (1 - 0.3 * Math.min(1, Math.max(0, L.b))) : w === "low" ? _ + (L.bc - L.bot) : w === "crease" ? _ + (L.lid - L.top) * 0.22 : _;
219
- }
220
- function l(b, w, T) {
221
- const _ = Math.min(1, Math.max(0, 1 - w));
222
- return b === "low" ? 1 - Math.min(1, _ * T * 1.2) : b === "crease" ? 1 - 0.45 * _ : 1;
223
- }
224
- const u = n.mouth, S = n.cheeks, d = n.head, c = n.body, g = (b, w, T) => {
225
- const _ = Math.min(1, Math.max(0, (T - b) / (w - b)));
226
- return _ * _ * (3 - 2 * _);
195
+ function dn(n) {
196
+ const e = { w: n.image.width, h: n.image.height }, t = (g, A, E) => E ? Math.exp(-(((g - E.cx) / E.rx) ** 2 + ((A - E.cy) / E.ry) ** 2)) : 0, r = 24, a = n.eyes;
197
+ function s(g, 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 g[k] + (g[k + 1] - g[k]) * N;
200
+ }
201
+ function l(g, A, E, k) {
202
+ A = Math.min(1, Math.max(0, A));
203
+ const N = s(g.top, A), z = s(g.bot, A), F = 1 - E, j = 4 * A * (1 - A), M = s(g.bot, 0.5) - s(g.top, 0.5), R = g.top[0] + (g.top[r - 1] - g.top[0]) * A - 0.3 * M * j, W = Math.max(N, z + 1 + (R - z - 1) * k);
204
+ return [(W - N) * Math.max(F, -0.07), F > 0 ? (W - z) * F * k : 0];
205
+ }
206
+ const m = [[-2, 1], [-1, 2], [0, 3], [1, 2], [2, 1]], b = 5;
207
+ function d(g, A, E, k) {
208
+ let N = 0, z = 0;
209
+ for (const [R, W] of m) {
210
+ const [Q, ne] = l(g, (A + R * b - g.x0) / (g.x1 - g.x0), E, k);
211
+ N += Q * W / 9, z += ne * W / 9;
212
+ }
213
+ const F = Math.min(1, Math.max(0, (A - g.x0) / (g.x1 - g.x0))), j = s(g.top, F), M = s(g.bot, F);
214
+ return { top: j, bot: M, b: 1 - E, lid: j + N, bc: M + z };
215
+ }
216
+ function p(g, A, E, k, N, z) {
217
+ const F = d(g, 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 i(g, A, E) {
221
+ const k = Math.min(1, Math.max(0, 1 - A));
222
+ return g === "low" ? 1 - Math.min(1, k * E * 1.2) : g === "crease" ? 1 - 0.45 * k : 1;
223
+ }
224
+ const u = n.mouth, S = n.cheeks, y = n.head, c = n.body, v = (g, A, E) => {
225
+ const k = Math.min(1, Math.max(0, (E - g) / (A - g)));
226
+ return k * k * (3 - 2 * k);
227
227
  };
228
- function x(b, w) {
229
- return 1 - g(...d.weightBand, w);
228
+ function x(g, A) {
229
+ return 1 - v(...y.weightBand, A);
230
230
  }
231
- function o(b, w) {
232
- return 1 - g(...d.turnBand, w);
231
+ function o(g, A) {
232
+ return 1 - v(...y.turnBand, A);
233
233
  }
234
- const i = n.strands ?? [];
235
- function E(b, w, T) {
236
- let _ = 1 / 0, N = 0;
237
- const H = T.length - 1;
238
- for (let L = 0; L < H; L++) {
239
- const [G, M] = T[L], [R, V] = T[L + 1], te = R - G, ne = V - M, re = Math.min(1, Math.max(0, ((b - G) * te + (w - M) * ne) / (te * te + ne * ne))), ge = Math.hypot(b - G - te * re, w - M - ne * re);
240
- ge < _ && (_ = ge, N = (L + re) / H);
234
+ const h = n.strands ?? [];
235
+ function T(g, 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 [j, M] = E[F], [R, W] = E[F + 1], Q = R - j, ne = W - M, ee = Math.min(1, Math.max(0, ((g - j) * Q + (A - M) * ne) / (Q * Q + ne * ne))), he = Math.hypot(g - j - Q * ee, A - M - ne * ee);
240
+ he < k && (k = he, N = (F + ee) / z);
241
241
  }
242
- return [_, N];
242
+ return [k, N];
243
243
  }
244
- function y(b, w, T) {
245
- if (T < 0.02) return [];
246
- const _ = [];
244
+ function f(g, A, E) {
245
+ if (E < 0.02) return [];
246
+ const k = [];
247
247
  let N = 0;
248
- i.forEach((L, G) => {
249
- const [M, R] = E(b, w, L.nodes), V = Math.exp(-((M / L.sigma) ** 2));
250
- V < 0.02 || (_.push([G, V, R]), N += V);
248
+ h.forEach((F, j) => {
249
+ const [M, R] = T(g, A, F.nodes), W = Math.exp(-((M / F.sigma) ** 2));
250
+ W < 0.02 || (k.push([j, W, R]), N += W);
251
251
  });
252
- const H = Math.max(1, N);
253
- return _.map(([L, G, M]) => [L, T * G / H * g(0.04, 0.55, M), M]);
252
+ const z = Math.max(1, N);
253
+ return k.map(([F, j, M]) => [F, E * j / z * v(0.04, 0.55, M), M]);
254
254
  }
255
- function A(b, w, T = 1) {
255
+ function w(g, A, E = 1) {
256
256
  return {
257
- head: x(b, w),
258
- turn: o(b, w),
259
- strands: y(b, w, T),
260
- bunL: t(b, w, n.buns?.bunL),
261
- bunR: t(b, w, n.buns?.bunR),
262
- brow: t(b, w, n.face.brow) * (1 - g(...n.face.brow.band, w)),
257
+ head: x(g, A),
258
+ turn: o(g, A),
259
+ strands: f(g, A, E),
260
+ bunL: t(g, A, n.buns?.bunL),
261
+ bunR: t(g, A, n.buns?.bunR),
262
+ brow: t(g, A, n.face.brow) * (1 - v(...n.face.brow.band, A)),
263
263
  // chin below the mouth line drops a little when the mouth opens
264
- jaw: t(b, w, n.face.jaw) * g(...n.face.jaw.band, w),
264
+ jaw: t(g, A, n.face.jaw) * v(...n.face.jaw.band, A),
265
265
  // per-feature depth for head turns (nose sticks out most, ears sit at the back)
266
- nose: t(b, w, n.face.nose),
267
- mouth: t(b, w, n.face.mouth),
268
- eyeA: t(b, w, n.face.eyeA),
269
- eyeB: t(b, w, n.face.eyeB),
270
- earR: t(b, w, n.face.earR),
271
- earL: t(b, w, n.face.earL),
272
- chest: t(b, w, c.chest),
273
- breath: 1 - g(...c.breathBand, w),
274
- shoulder: c.shoulders.reduce((_, N) => _ + t(b, w, N), 0)
266
+ nose: t(g, A, n.face.nose),
267
+ mouth: t(g, A, n.face.mouth),
268
+ eyeA: t(g, A, n.face.eyeA),
269
+ eyeB: t(g, A, n.face.eyeB),
270
+ earR: t(g, A, n.face.earR),
271
+ earL: t(g, A, n.face.earL),
272
+ chest: t(g, A, c.chest),
273
+ breath: 1 - v(...c.breathBand, A),
274
+ shoulder: c.shoulders.reduce((k, N) => k + t(g, A, N), 0)
275
275
  };
276
276
  }
277
- function U(b, w, T, _) {
278
- const N = (b - d.cx) / d.rx, H = (w - d.cy) / d.ry, L = 1 - N * N - H * H;
279
- if (L <= 0) return [0, 0];
280
- const G = g(0, 0.84, L);
281
- return [T * d.shiftX * G, -_ * d.shiftY * G];
282
- }
283
- function F(b, w, T, _) {
284
- const N = Math.cos(_), H = Math.sin(_), L = b[0] - w, G = b[1] - T;
285
- b[0] = w + L * N - G * H, b[1] = T + L * H + G * N;
286
- }
287
- function k(b, w, T, _ = w) {
288
- const N = U(b[0], b[1], T.angleX / 30, T.angleY / 30);
289
- b[0] += N[0] * _, b[1] += N[1] * _, !(w <= 0) && F(b, d.pivotX, d.pivotY, -T.angleZ / 30 * d.maxRoll * w);
290
- }
291
- function B(b, w, T, _ = 0, N = 1, H = 0) {
292
- const L = T.breath;
293
- b[1] -= L * (5 * N + 4 * H), b[0] += (b[0] - c.chest.cx) * 0.012 * L * _, b[0] += T.bodyAngleX / 10 * (7 + 9 * _), F(b, c.pivotX, c.pivotY, -T.bodyAngleZ / 10 * c.maxRoll * (1 - g(...c.rollBand, w)));
294
- }
295
- function Y(b, w, T, _, N, H) {
296
- const L = H;
297
- L[0] = b, L[1] = w;
298
- const G = N.gain;
299
- for (const [V, te, ne] of T.strands) {
300
- const re = N.strands?.[V];
301
- if (!re) continue;
302
- const ge = ne * 3, le = Math.min(2, Math.floor(ge)), ke = ge - le;
303
- L[0] += (re[le][0] + (re[le + 1][0] - re[le][0]) * ke) * te * G, L[1] += (re[le][1] + (re[le + 1][1] - re[le][1]) * ke) * te * G;
304
- }
305
- if (L[0] += (N.bunL[0] * T.bunL + N.bunR[0] * T.bunR) * G, L[1] += (N.bunL[1] * T.bunL + N.bunR[1] * T.bunR) * G, L[1] -= _.browY * 7 * T.brow, T.brow > 0.01) {
306
- const V = _.browAngle * 0.12 * T.brow;
307
- L[1] += (b - n.face.brow.cx) * Math.sin(V);
308
- }
309
- L[1] += _.mouthOpen * 3.5 * T.jaw;
310
- const M = _.angleX / 30, R = _.angleY / 30;
311
- return L[0] += M * (8 * T.nose + 5 * T.mouth) + (b - n.face.eyeA.cx) * 0.12 * M * T.eyeA - (b - n.face.eyeB.cx) * 0.12 * M * T.eyeB - M * 9 * T.earR + M * 4 * T.earL - M * 10 * (T.bunL + T.bunR), L[1] -= R * (6 * T.nose + 3 * T.mouth), L[1] += (w - n.face.eyeA.cy) * -0.06 * Math.abs(R) * T.eyeA + (w - n.face.eyeB.cy) * -0.06 * Math.abs(R) * T.eyeB, k(L, T.head, _, T.turn), B(L, w, _, T.chest, T.breath, T.shoulder), L;
312
- }
313
- const O = n.hand, z = O?.elbow ?? [0, 0], D = O?.wrist ?? [0, 0], X = O?.knuckle ?? [0, 0], I = O?.contact ?? [0, 0], C = O?.forearmShare ?? 0;
314
- function $(b, w) {
277
+ function B(g, A, E, k) {
278
+ const N = (g - 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 j = v(0, 0.84, F);
281
+ return [E * y.shiftX * j, -k * y.shiftY * j];
282
+ }
283
+ function Y(g, A, E, k) {
284
+ const N = Math.cos(k), z = Math.sin(k), F = g[0] - A, j = g[1] - E;
285
+ g[0] = A + F * N - j * z, g[1] = E + F * z + j * N;
286
+ }
287
+ function I(g, A, E, k = A) {
288
+ const N = B(g[0], g[1], E.angleX / 30, E.angleY / 30);
289
+ g[0] += N[0] * k, g[1] += N[1] * k, !(A <= 0) && Y(g, y.pivotX, y.pivotY, -E.angleZ / 30 * y.maxRoll * A);
290
+ }
291
+ function _(g, A, E, k = 0, N = 1, z = 0) {
292
+ const F = E.breath;
293
+ g[1] -= F * (5 * N + 4 * z), g[0] += (g[0] - c.chest.cx) * 0.012 * F * k, g[0] += E.bodyAngleX / 10 * (7 + 9 * k), Y(g, c.pivotX, c.pivotY, -E.bodyAngleZ / 10 * c.maxRoll * (1 - v(...c.rollBand, A)));
294
+ }
295
+ function U(g, A, E, k, N, z) {
296
+ const F = z;
297
+ F[0] = g, F[1] = A;
298
+ const j = N.gain;
299
+ for (const [W, Q, ne] of E.strands) {
300
+ const ee = N.strands?.[W];
301
+ if (!ee) continue;
302
+ const he = ne * 3, oe = Math.min(2, Math.floor(he)), ke = he - oe;
303
+ F[0] += (ee[oe][0] + (ee[oe + 1][0] - ee[oe][0]) * ke) * Q * j, F[1] += (ee[oe][1] + (ee[oe + 1][1] - ee[oe][1]) * ke) * Q * j;
304
+ }
305
+ if (F[0] += (N.bunL[0] * E.bunL + N.bunR[0] * E.bunR) * j, F[1] += (N.bunL[1] * E.bunL + N.bunR[1] * E.bunR) * j, F[1] -= k.browY * 7 * E.brow, E.brow > 0.01) {
306
+ const W = k.browAngle * 0.12 * E.brow;
307
+ F[1] += (g - n.face.brow.cx) * Math.sin(W);
308
+ }
309
+ F[1] += k.mouthOpen * 3.5 * E.jaw;
310
+ const M = k.angleX / 30, R = k.angleY / 30;
311
+ return F[0] += M * (8 * E.nose + 5 * E.mouth) + (g - n.face.eyeA.cx) * 0.12 * M * E.eyeA - (g - 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] -= R * (6 * E.nose + 3 * E.mouth), F[1] += (A - n.face.eyeA.cy) * -0.06 * Math.abs(R) * E.eyeA + (A - n.face.eyeB.cy) * -0.06 * Math.abs(R) * 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], X = O?.contact ?? [0, 0], D = O?.forearmShare ?? 0;
314
+ function H(g, A) {
315
315
  return O ? {
316
- arm: 1 - g(...O.armBand, w),
317
- wrist: 1 - g(...O.wristBand, w),
318
- hand: 1 - g(...O.handBand, w),
319
- finger: g(...O.fingerXBand, b) * (1 - g(...O.fingerYBand, w)),
320
- pinBottom: g(...O.pinBand, w)
316
+ arm: 1 - v(...O.armBand, A),
317
+ wrist: 1 - v(...O.wristBand, A),
318
+ hand: 1 - v(...O.handBand, A),
319
+ finger: v(...O.fingerXBand, g) * (1 - v(...O.fingerYBand, A)),
320
+ pinBottom: v(...O.pinBand, A)
321
321
  } : { arm: 0, wrist: 0, hand: 0, finger: 0, pinBottom: 0 };
322
322
  }
323
- const j = (b, w, T, _) => {
324
- const N = b[0] - w[0], H = b[1] - w[1];
325
- return [w[0] + N * T - H * _, w[1] + N * _ + H * T];
326
- }, Z = (b) => Math.atan2(b[1], b[0]);
327
- function P(b) {
328
- const w = [...I];
329
- k(w, x(...I), b, o(...I)), B(w, I[1], b, 0, 1, 0);
330
- const T = [...z];
331
- B(T, z[1], b, 0, 0, 0);
332
- const N = (Z([w[0] - T[0], w[1] - T[1]]) - Z([I[0] - z[0], I[1] - z[1]])) * C, H = Math.cos(N), L = Math.sin(N), G = (ne) => {
333
- const re = j(ne, z, H, L);
334
- return [re[0] + T[0] - z[0], re[1] + T[1] - z[1]];
335
- }, M = G(D), R = G(I), V = Z([w[0] - M[0], w[1] - M[1]]) - Z([R[0] - M[0], R[1] - M[1]]), te = Math.min(1.03, Math.max(0.97, Math.hypot(w[0] - M[0], w[1] - M[1]) / Math.hypot(R[0] - M[0], R[1] - M[1])));
336
- return { tr: G, w: M, b: V, k: te };
337
- }
338
- function W(b, w, T, _, N, H) {
339
- let L = [b, w];
340
- L = j(L, X, Math.cos(_.fingerTap * 0.07 * T.finger), Math.sin(_.fingerTap * 0.07 * T.finger));
341
- const G = -_.handAngle / 10 * 0.045 * T.wrist, M = -_.armAngle / 10 * 0.015 * T.arm;
342
- L = j(L, D, Math.cos(G), Math.sin(G)), L = j(L, z, Math.cos(M), Math.sin(M)), L = N.tr(L);
343
- const R = N.b * T.hand, V = 1 + (N.k - 1) * T.hand;
344
- return L = j(L, N.w, Math.cos(R) * V, Math.sin(R) * V), L[1] += (w - L[1]) * T.pinBottom, H[0] = L[0], H[1] = L[1], H;
345
- }
346
- const q = n.accessories ?? [];
347
- function J(b, w, T, _) {
348
- const N = A(b.pivot[0], b.pivot[1]);
349
- return Y(b.pivot[0], b.pivot[1], N, w, T, _);
350
- }
351
- return { IMG: e, EYES: a, MOUTH: u, CHEEKS: S, STRANDS: i, TASSELS: q, headWeight: x, turnWeight: o, baseWeights: A, deformBase: Y, applyHead: k, applyBody: B, handWeights: $, handFrame: P, deformHand: W, eyePartY: m, eyePartAlpha: l, tasselAnchor: J };
323
+ const L = (g, A, E, k) => {
324
+ const N = g[0] - A[0], z = g[1] - A[1];
325
+ return [A[0] + N * E - z * k, A[1] + N * k + z * E];
326
+ }, Z = (g) => Math.atan2(g[1], g[0]);
327
+ function P(g) {
328
+ const A = [...X];
329
+ I(A, x(...X), g, o(...X)), _(A, X[1], g, 0, 1, 0);
330
+ const E = [...C];
331
+ _(E, C[1], g, 0, 0, 0);
332
+ const N = (Z([A[0] - E[0], A[1] - E[1]]) - Z([X[0] - C[0], X[1] - C[1]])) * D, z = Math.cos(N), F = Math.sin(N), j = (ne) => {
333
+ const ee = L(ne, C, z, F);
334
+ return [ee[0] + E[0] - C[0], ee[1] + E[1] - C[1]];
335
+ }, M = j($), R = j(X), W = Z([A[0] - M[0], A[1] - M[1]]) - Z([R[0] - M[0], R[1] - M[1]]), Q = Math.min(1.03, Math.max(0.97, Math.hypot(A[0] - M[0], A[1] - M[1]) / Math.hypot(R[0] - M[0], R[1] - M[1])));
336
+ return { tr: j, w: M, b: W, k: Q };
337
+ }
338
+ function G(g, A, E, k, N, z) {
339
+ let F = [g, A];
340
+ F = L(F, V, Math.cos(k.fingerTap * 0.07 * E.finger), Math.sin(k.fingerTap * 0.07 * E.finger));
341
+ const j = -k.handAngle / 10 * 0.045 * E.wrist, M = -k.armAngle / 10 * 0.015 * E.arm;
342
+ F = L(F, $, Math.cos(j), Math.sin(j)), F = L(F, C, Math.cos(M), Math.sin(M)), F = N.tr(F);
343
+ const R = N.b * E.hand, W = 1 + (N.k - 1) * E.hand;
344
+ return F = L(F, N.w, Math.cos(R) * W, Math.sin(R) * 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(g, A, E, k) {
348
+ const N = w(g.pivot[0], g.pivot[1]);
349
+ return U(g.pivot[0], g.pivot[1], N, A, E, k);
350
+ }
351
+ return { IMG: e, EYES: a, MOUTH: u, CHEEKS: S, STRANDS: h, TASSELS: J, headWeight: x, turnWeight: o, baseWeights: w, deformBase: U, applyHead: I, applyBody: _, handWeights: H, handFrame: P, deformHand: G, eyePartY: p, eyePartAlpha: i, tasselAnchor: q };
352
352
  }
353
- function dn(n, e, t, r = !1) {
354
- const a = r ? Math.max(e, t) * 2 : 1, s = new Float32Array(n.length), h = Math.SQRT2;
355
- for (let f = 0; f < t; f++) for (let v = 0; v < e; v++) {
356
- const p = f * e + v;
357
- n[p] <= 3 || (s[p] = Math.min(
358
- v ? s[p - 1] + 1 : a,
359
- f ? s[p - e] + 1 : a,
360
- v && f ? s[p - e - 1] + h : a,
361
- f && v + 1 < e ? s[p - e + 1] + h : a
353
+ function gn(n, e, t, r = !1) {
354
+ const a = r ? Math.max(e, t) * 2 : 1, s = new Float32Array(n.length), l = Math.SQRT2;
355
+ for (let m = 0; m < t; m++) for (let b = 0; b < e; b++) {
356
+ const d = m * e + b;
357
+ n[d] <= 3 || (s[d] = Math.min(
358
+ b ? s[d - 1] + 1 : a,
359
+ m ? s[d - e] + 1 : a,
360
+ b && m ? s[d - e - 1] + l : a,
361
+ m && b + 1 < e ? s[d - e + 1] + l : a
362
362
  ));
363
363
  }
364
- for (let f = t - 1; f >= 0; f--) for (let v = e - 1; v >= 0; v--) {
365
- const p = f * e + v;
366
- !n[p] || n[p] <= 3 || (s[p] = Math.min(
367
- s[p],
368
- v + 1 < e ? s[p + 1] + 1 : a,
369
- f + 1 < t ? s[p + e] + 1 : a,
370
- v && f + 1 < t ? s[p + e - 1] + h : a,
371
- v + 1 < e && f + 1 < t ? s[p + e + 1] + h : a
364
+ for (let m = t - 1; m >= 0; m--) for (let b = e - 1; b >= 0; b--) {
365
+ const d = m * e + b;
366
+ !n[d] || n[d] <= 3 || (s[d] = Math.min(
367
+ s[d],
368
+ b + 1 < e ? s[d + 1] + 1 : a,
369
+ m + 1 < t ? s[d + e] + 1 : a,
370
+ b && m + 1 < t ? s[d + e - 1] + l : a,
371
+ b + 1 < e && m + 1 < t ? s[d + e + 1] + l : a
372
372
  ));
373
373
  }
374
374
  return s;
@@ -376,67 +376,67 @@ function dn(n, e, t, r = !1) {
376
376
  function Qe(n, e, t) {
377
377
  return Math.exp(-(((n - t.cx) / t.rx) ** 2 + ((e - t.cy) / t.ry) ** 2));
378
378
  }
379
- function gn(n, e, t) {
379
+ function yn(n, e, t) {
380
380
  const r = ((n - t.head.cx) / t.head.rx) ** 2 + ((e - t.head.cy) / t.head.ry) ** 2;
381
381
  let a = t.head.rx * 0.8 * Math.sqrt(Math.max(0, 1 - r)) + t.body.chest.rx * 0.23 * Qe(n, e, t.body.chest);
382
382
  a += t.face.nose.rx * 0.2 * Qe(n, e, t.face.nose);
383
- for (const [s, h] of t.cheeks) a += t.head.rx * 0.012 * Qe(n, e, { cx: s, cy: h, rx: t.head.rx * 0.3, ry: t.head.ry * 0.16 });
383
+ for (const [s, l] of t.cheeks) a += t.head.rx * 0.012 * Qe(n, e, { cx: s, cy: l, rx: t.head.rx * 0.3, ry: t.head.ry * 0.16 });
384
384
  return a;
385
385
  }
386
386
  function Ge(n, e, t, r) {
387
- const a = new Float32Array(n.length), s = new Float32Array(n.length), h = (f, v, p, m, l, u) => {
388
- for (let S = 0; S < m; S++) {
389
- const d = S * u;
390
- let c = 0, g = 0;
391
- for (let x = 0; x < Math.min(r, p - 1) + 1; x++)
392
- c += f[d + x * l], g++;
393
- for (let x = 0; x < p; x++) {
394
- v[d + x * l] = c / g;
395
- const o = x + r + 1, i = x - r;
396
- o < p && (c += f[d + o * l], g++), i >= 0 && (c -= f[d + i * l], g--);
387
+ const a = new Float32Array(n.length), s = new Float32Array(n.length), l = (m, b, d, p, i, u) => {
388
+ for (let S = 0; S < p; S++) {
389
+ const y = S * u;
390
+ let c = 0, v = 0;
391
+ for (let x = 0; x < Math.min(r, d - 1) + 1; x++)
392
+ c += m[y + x * i], v++;
393
+ for (let x = 0; x < d; x++) {
394
+ b[y + x * i] = c / v;
395
+ const o = x + r + 1, h = x - r;
396
+ o < d && (c += m[y + o * i], v++), h >= 0 && (c -= m[y + h * i], v--);
397
397
  }
398
398
  }
399
399
  };
400
- return h(n, a, e, t, 1, e), h(a, s, t, e, e, 1), s;
400
+ return l(n, a, e, t, 1, e), l(a, s, t, e, e, 1), s;
401
401
  }
402
- function yn(n, e, t, r) {
403
- const a = Ge(n, t, r, 1), s = Ge(n, t, r, 6), h = new Float32Array(n.length);
404
- for (let p = 0; p < h.length; p++) h[p] = e[p] > 128 ? a[p] - s[p] : 0;
405
- const f = new Float32Array(n.length * 2), v = (p, m) => h[Math.max(0, Math.min(r - 1, m)) * t + Math.max(0, Math.min(t - 1, p))];
406
- for (let p = 0; p < r; p++) for (let m = 0; m < t; m++) {
407
- const l = p * t + m;
408
- e[l] <= 128 || (f[2 * l] = Math.max(-1, Math.min(1, -(v(m + 1, p) - v(m - 1, p)) * 4)), f[2 * l + 1] = Math.max(-1, Math.min(1, -(v(m, p + 1) - v(m, p - 1)) * 4)));
409
- }
410
- return f;
402
+ function vn(n, e, t, r) {
403
+ const a = Ge(n, t, r, 1), s = Ge(n, t, r, 6), l = new Float32Array(n.length);
404
+ for (let d = 0; d < l.length; d++) l[d] = e[d] > 128 ? a[d] - s[d] : 0;
405
+ const m = new Float32Array(n.length * 2), b = (d, p) => l[Math.max(0, Math.min(r - 1, p)) * t + Math.max(0, Math.min(t - 1, d))];
406
+ for (let d = 0; d < r; d++) for (let p = 0; p < t; p++) {
407
+ const i = d * t + p;
408
+ e[i] <= 128 || (m[2 * i] = Math.max(-1, Math.min(1, -(b(p + 1, d) - b(p - 1, d)) * 4)), m[2 * i + 1] = Math.max(-1, Math.min(1, -(b(p, d + 1) - b(p, d - 1)) * 4)));
409
+ }
410
+ return m;
411
411
  }
412
- function vn(n, e, t, r, a, s = !0, h) {
413
- const f = !!a && r[0] === 0 && r[1] === 0 && r[2] === a.image.width && r[3] === a.image.height, v = dn(n, e, t, f), p = new Float32Array(n.length), m = r[2] / e, l = r[3] / t, u = Math.min(m, l), S = Math.min(r[2], r[3]) * 0.08;
414
- for (let o = 0; o < t; o++) for (let i = 0; i < e; i++) {
415
- const E = o * e + i;
416
- p[E] = (s ? Math.sqrt(v[E] * u * S) * 0.55 : 0) + (a ? gn(r[0] + (i + 0.5) * m, r[1] + (o + 0.5) * l, a) : 0);
417
- }
418
- const d = Math.max(1, Math.round(Math.min(e, t) * 0.02));
419
- p.set(Ge(Ge(p, e, t, d), e, t, d));
420
- const c = h ? yn(h, n, e, t) : null, g = new Uint8Array(e * t * 4), x = (o, i) => p[Math.max(0, Math.min(t - 1, i)) * e + Math.max(0, Math.min(e - 1, o))];
421
- for (let o = 0; o < t; o++) for (let i = 0; i < e; i++) {
422
- const E = -(x(i + 2, o) - x(i - 2, o)) / (4 * m), y = -(x(i, o + 2) - x(i, o - 2)) / (4 * l), A = Math.hypot(E, y, 1), U = (o * e + i) * 4, F = o * e + i;
423
- g[U] = Math.round((E / A * 0.5 + 0.5) * 255), g[U + 1] = Math.round((y / A * 0.5 + 0.5) * 255), g[U + 2] = Math.round(((c?.[2 * F] ?? 0) * 0.5 + 0.5) * 255), g[U + 3] = Math.round(((c?.[2 * F + 1] ?? 0) * 0.5 + 0.5) * 255);
424
- }
425
- return g;
412
+ function bn(n, e, t, r, a, s = !0, l) {
413
+ const m = !!a && r[0] === 0 && r[1] === 0 && r[2] === a.image.width && r[3] === a.image.height, b = gn(n, e, t, m), d = new Float32Array(n.length), p = r[2] / e, i = r[3] / t, u = Math.min(p, i), S = Math.min(r[2], r[3]) * 0.08;
414
+ for (let o = 0; o < t; o++) for (let h = 0; h < e; h++) {
415
+ const T = o * e + h;
416
+ d[T] = (s ? Math.sqrt(b[T] * u * S) * 0.55 : 0) + (a ? yn(r[0] + (h + 0.5) * p, r[1] + (o + 0.5) * i, a) : 0);
417
+ }
418
+ const y = Math.max(1, Math.round(Math.min(e, t) * 0.02));
419
+ d.set(Ge(Ge(d, e, t, y), e, t, y));
420
+ const c = l ? vn(l, n, e, t) : null, v = new Uint8Array(e * t * 4), x = (o, h) => d[Math.max(0, Math.min(t - 1, h)) * e + Math.max(0, Math.min(e - 1, o))];
421
+ for (let o = 0; o < t; o++) for (let h = 0; h < e; h++) {
422
+ const T = -(x(h + 2, o) - x(h - 2, o)) / (4 * p), f = -(x(h, o + 2) - x(h, o - 2)) / (4 * i), w = Math.hypot(T, f, 1), B = (o * e + h) * 4, Y = o * e + h;
423
+ v[B] = Math.round((T / w * 0.5 + 0.5) * 255), v[B + 1] = Math.round((f / w * 0.5 + 0.5) * 255), v[B + 2] = Math.round(((c?.[2 * Y] ?? 0) * 0.5 + 0.5) * 255), v[B + 3] = Math.round(((c?.[2 * Y + 1] ?? 0) * 0.5 + 0.5) * 255);
424
+ }
425
+ return v;
426
426
  }
427
427
  const Ft = /* @__PURE__ */ new WeakMap();
428
- function bn(n, e, t, r) {
428
+ function xn(n, e, t, r) {
429
429
  const a = JSON.stringify([e, t.head, t.body.chest, t.face.nose, t.cheeks, r]), s = Ft.get(n);
430
430
  if (s?.key === a) return { ...s, computed: !1, ms: 0 };
431
- const h = performance.now(), f = Math.min(1, 512 / Math.max(n.width, n.height)), v = Math.max(1, Math.round(n.width * f)), p = Math.max(1, Math.round(n.height * f)), m = document.createElement("canvas");
432
- m.width = v, m.height = p;
433
- const l = m.getContext("2d", { willReadFrequently: !0 });
434
- l.drawImage(n, 0, 0, v, p);
435
- const u = l.getImageData(0, 0, v, p).data, S = new Uint8Array(v * p), d = new Float32Array(v * p);
436
- for (let g = 0; g < S.length; g++)
437
- S[g] = u[4 * g + 3], d[g] = (0.2126 * u[4 * g] + 0.7152 * u[4 * g + 1] + 0.0722 * u[4 * g + 2]) / 255;
438
- const c = { key: a, data: vn(S, v, p, e, t, r, r ? d : void 0), width: v, height: p };
439
- return Ft.set(n, c), { ...c, computed: !0, ms: performance.now() - h };
431
+ const l = performance.now(), m = Math.min(1, 512 / Math.max(n.width, n.height)), b = Math.max(1, Math.round(n.width * m)), d = Math.max(1, Math.round(n.height * m)), p = document.createElement("canvas");
432
+ p.width = b, p.height = d;
433
+ const i = p.getContext("2d", { willReadFrequently: !0 });
434
+ i.drawImage(n, 0, 0, b, d);
435
+ const u = i.getImageData(0, 0, b, d).data, S = new Uint8Array(b * d), y = new Float32Array(b * d);
436
+ for (let v = 0; v < S.length; v++)
437
+ S[v] = u[4 * v + 3], y[v] = (0.2126 * u[4 * v] + 0.7152 * u[4 * v + 1] + 0.0722 * u[4 * v + 2]) / 255;
438
+ const c = { key: a, data: bn(S, b, d, e, t, r, r ? y : void 0), width: b, height: d };
439
+ return Ft.set(n, c), { ...c, computed: !0, ms: performance.now() - l };
440
440
  }
441
441
  const Re = Object.freeze({
442
442
  enabled: !1,
@@ -469,41 +469,41 @@ const Re = Object.freeze({
469
469
  specular: [0, 1],
470
470
  rim: [0, 1],
471
471
  detail: [0, 1]
472
- }, xn = /* @__PURE__ */ new Set(["color", "ambientColor"]);
473
- function wn(n) {
472
+ }, wn = /* @__PURE__ */ new Set(["color", "ambientColor"]);
473
+ function An(n) {
474
474
  if (!n || typeof n != "object" || Array.isArray(n)) return null;
475
475
  const e = n;
476
476
  if (Object.keys(e).length !== Object.keys(Re).length || Object.keys(e).some((r) => !(r in Re)) || ![!0, !1].includes(e.enabled) || ![!0, !1].includes(e.shadow) || !["soft", "cel"].includes(e.mode)) return null;
477
477
  const t = { ...Re, enabled: e.enabled, shadow: e.shadow, mode: e.mode };
478
478
  for (const r of Object.keys(Bt)) {
479
- const a = e[r], [s, h] = Bt[r];
480
- if (typeof a != "number" || !Number.isFinite(a) || xn.has(r) && !Number.isInteger(a)) return null;
481
- t[r] = Math.max(s, Math.min(h, a));
479
+ const a = e[r], [s, l] = Bt[r];
480
+ if (typeof a != "number" || !Number.isFinite(a) || wn.has(r) && !Number.isInteger(a)) return null;
481
+ t[r] = Math.max(s, Math.min(l, a));
482
482
  }
483
483
  return t;
484
484
  }
485
- function Mr(n) {
485
+ function Sr(n) {
486
486
  return `#${n.toString(16).padStart(6, "0")}`;
487
487
  }
488
- const He = -0.1, An = 0.9, Mn = 1, En = 1.06;
489
- function Sn(n, e) {
488
+ const He = -0.1, Mn = 0.9, En = 1, Sn = 1.06;
489
+ function Tn(n, e) {
490
490
  return [(0.5 - n) * 0.12, (0.5 - e) * 0.12];
491
491
  }
492
- function Tn(n, e, t, r) {
493
- const a = n * Math.PI / 180, s = e * Math.PI / 180, h = -t / 30 * r, f = Math.cos(a), v = Math.sin(a), p = Math.cos(s), m = Math.sin(s), l = Math.cos(h), u = Math.sin(h);
492
+ function On(n, e, t, r) {
493
+ const a = n * Math.PI / 180, s = e * Math.PI / 180, l = -t / 30 * r, m = Math.cos(a), b = Math.sin(a), d = Math.cos(s), p = Math.sin(s), i = Math.cos(l), u = Math.sin(l);
494
494
  return [
495
- l * f,
496
- u * f,
497
- -v,
498
- l * v * m - u * p,
499
- u * v * m + l * p,
500
- f * m,
501
- l * v * p + u * m,
502
- u * v * p - l * m,
503
- f * p
495
+ i * m,
496
+ u * m,
497
+ -b,
498
+ i * b * p - u * d,
499
+ u * b * p + i * d,
500
+ m * p,
501
+ i * b * d + u * p,
502
+ u * b * d - i * p,
503
+ m * d
504
504
  ];
505
505
  }
506
- class On {
506
+ class Rn {
507
507
  constructor(e, t) {
508
508
  this.gl = e, this.program = t(e, `#version 300 es
509
509
  out vec2 vUv;
@@ -530,10 +530,10 @@ class On {
530
530
  (this.width !== e || this.height !== t) && (this.clearTargets(), this.width = e, this.height = t, this.targets = [this.target(e, t), this.target(Math.ceil(e / 2), Math.ceil(t / 2))]), r.bindFramebuffer(r.FRAMEBUFFER, this.targets[0].framebuffer), r.viewport(0, 0, e, t), r.clearColor(0, 0, 0, 0), r.clear(r.COLOR_BUFFER_BIT);
531
531
  }
532
532
  composite(e) {
533
- const t = this.gl, { prog: r, u: a } = this.program, s = this.width, h = this.height;
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(s / 2), Math.ceil(h / 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 / s, 0), t.drawArrays(t.TRIANGLES, 0, 3), t.bindFramebuffer(t.FRAMEBUFFER, null), t.viewport(0, 0, s, h), 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 = Sn(e.x, e.y);
536
- t.uniform1i(a.uPass, 1), t.uniform2f(a.uShift, f[0], -f[1]), t.uniform2f(a.uStep, 0, 3 / h), 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);
533
+ const t = this.gl, { prog: r, u: a } = this.program, s = this.width, l = this.height;
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(s / 2), Math.ceil(l / 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 / s, 0), t.drawArrays(t.TRIANGLES, 0, 3), t.bindFramebuffer(t.FRAMEBUFFER, null), t.viewport(0, 0, s, l), 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 m = Tn(e.x, e.y);
536
+ t.uniform1i(a.uPass, 1), t.uniform2f(a.uShift, m[0], -m[1]), t.uniform2f(a.uStep, 0, 3 / l), 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() {
539
539
  for (const e of this.targets)
@@ -544,12 +544,12 @@ class On {
544
544
  this.clearTargets(), this.gl.deleteProgram(this.program.prog), this.gl.deleteVertexArray(this.vao);
545
545
  }
546
546
  }
547
- function Rn(n, e) {
548
- const { IMG: t, EYES: r, MOUTH: a, CHEEKS: s } = n, h = `#version 300 es
547
+ function Ln(n, e) {
548
+ const { IMG: t, EYES: r, MOUTH: a, CHEEKS: s } = n, l = `#version 300 es
549
549
  in vec2 aPos; in vec2 aUv;
550
550
  uniform vec2 uScale; uniform vec2 uOffset;
551
551
  out vec2 vUv;
552
- void main() { vUv = aUv; gl_Position = vec4(aPos * uScale + uOffset, 0.0, 1.0); }`, f = `#version 300 es
552
+ void main() { vUv = aUv; gl_Position = vec4(aPos * uScale + uOffset, 0.0, 1.0); }`, m = `#version 300 es
553
553
  precision highp float;
554
554
  in vec2 vUv; out vec4 outColor;
555
555
  uniform sampler2D uTex;
@@ -657,7 +657,7 @@ function Rn(n, e) {
657
657
  c = texAt(p);
658
658
  }
659
659
  outColor = c * uAlpha;
660
- }`, v = h.replace("out vec2 vUv;", "in float aHeadWeight; out float vHeadWeight; out vec2 vScreen; out vec2 vUv;").replace("vUv = aUv;", "vHeadWeight = aHeadWeight; vScreen = vec2((aPos.x * uScale.x + uOffset.x + 1.0) * 0.5, (1.0 - aPos.y * uScale.y - uOffset.y) * 0.5); vUv = aUv;"), p = f.replace("uniform sampler2D uTex;", `uniform sampler2D uTex;
660
+ }`, b = l.replace("out vec2 vUv;", "in float aHeadWeight; out float vHeadWeight; out vec2 vScreen; out vec2 vUv;").replace("vUv = aUv;", "vHeadWeight = aHeadWeight; vScreen = vec2((aPos.x * uScale.x + uOffset.x + 1.0) * 0.5, (1.0 - aPos.y * uScale.y - uOffset.y) * 0.5); vUv = aUv;"), d = m.replace("uniform sampler2D uTex;", `uniform sampler2D uTex;
661
661
  uniform sampler2D uNormal; in float vHeadWeight; in vec2 vScreen;
662
662
  uniform mat3 uHeadRotation; uniform vec3 uLight; uniform vec3 uLightColor; uniform vec3 uAmbientColor;
663
663
  uniform vec4 uLighting; uniform vec4 uSurface; uniform float uAspect; uniform int uCel;`).replace("outColor = c * uAlpha;", `
@@ -665,7 +665,7 @@ function Rn(n, e) {
665
665
  vec4 encoded = texture(uNormal, vUv);
666
666
  vec2 base = encoded.rg * 2.0 - 1.0;
667
667
  vec3 n = vec3(base, sqrt(max(0.0, 1.0 - dot(base, base))));
668
- n = normalize(n + vec3((encoded.ba * 2.0 - 1.0) * uSurface.w * ${An.toFixed(3)}, 0.0));
668
+ n = normalize(n + vec3((encoded.ba * 2.0 - 1.0) * uSurface.w * ${Mn.toFixed(3)}, 0.0));
669
669
  n = normalize(mix(n, uHeadRotation * n, vHeadWeight));
670
670
  vec2 toLight = (uLight.xy - vScreen) * vec2(uAspect, 1.0);
671
671
  vec3 light = normalize(vec3(toLight, uLight.z));
@@ -682,12 +682,12 @@ function Rn(n, e) {
682
682
  float attenuation = 1.0 / (1.0 + reach);
683
683
  vec3 radiance = uLightColor * uLighting.y * attenuation;
684
684
  // A light close to the surface may brighten a little, but must not bleach painted colours.
685
- vec3 irradiance = min(uAmbientColor * uLighting.z + radiance * diffuse, vec3(${En.toFixed(3)}));
685
+ vec3 irradiance = min(uAmbientColor * uLighting.z + radiance * diffuse, vec3(${Sn.toFixed(3)}));
686
686
  // Painted shadows are deeper versions of the base colour, not grey: multiply by the colour
687
687
  // itself as the surface turns away from the light.
688
688
  vec3 albedo = c.rgb / max(c.a, 1e-4);
689
689
  float dark = 1.0 - clamp(dot(irradiance, vec3(0.3333)), 0.0, 1.0);
690
- vec3 shaded = c.rgb * mix(vec3(1.0), albedo, dark * ${Mn.toFixed(3)}) * irradiance;
690
+ vec3 shaded = c.rgb * mix(vec3(1.0), albedo, dark * ${En.toFixed(3)}) * irradiance;
691
691
  float specular = pow(max(dot(n, normalize(light + vec3(0.0, 0.0, 1.0))), 0.0), 60.0) * uSurface.y;
692
692
  if (uCel == 1) specular = smoothstep(0.3, 0.35, specular) * uSurface.y;
693
693
  vec2 side = length(n.xy) > 0.001 ? normalize(n.xy) : vec2(0.0);
@@ -695,346 +695,352 @@ function Rn(n, e) {
695
695
  shaded += radiance * (specular * max(0.0, ndl) + rim) * c.a;
696
696
  // Strength blends between the original painting and the relit result; alpha is unchanged.
697
697
  c.rgb = clamp(mix(c.rgb, shaded, uLighting.x), vec3(0.0), vec3(c.a));
698
- outColor = c * uAlpha;`), m = `#version 300 es
698
+ outColor = c * uAlpha;`), p = `#version 300 es
699
699
  in vec2 aPos; uniform vec2 uScale; uniform vec2 uOffset;
700
- void main() { gl_Position = vec4(aPos * uScale + uOffset, 0.0, 1.0); gl_PointSize = 7.0; }`, l = `#version 300 es
700
+ void main() { gl_Position = vec4(aPos * uScale + uOffset, 0.0, 1.0); gl_PointSize = 7.0; }`, i = `#version 300 es
701
701
  precision mediump float; uniform vec4 uColor; out vec4 o; void main() { o = uColor; }`;
702
- function u(g, x, o) {
703
- const i = g.createProgram();
704
- for (const [A, U] of [[g.VERTEX_SHADER, x], [g.FRAGMENT_SHADER, o]]) {
705
- const F = g.createShader(A);
706
- if (g.shaderSource(F, U), g.compileShader(F), !g.getShaderParameter(F, g.COMPILE_STATUS)) throw new Error(g.getShaderInfoLog(F));
707
- g.attachShader(i, F), g.deleteShader(F);
708
- }
709
- if (g.bindAttribLocation(i, 0, "aPos"), g.bindAttribLocation(i, 1, "aUv"), g.bindAttribLocation(i, 2, "aHeadWeight"), g.linkProgram(i), !g.getProgramParameter(i, g.LINK_STATUS)) throw new Error(g.getProgramInfoLog(i));
710
- const E = {}, y = g.getProgramParameter(i, g.ACTIVE_UNIFORMS);
711
- for (let A = 0; A < y; A++) {
712
- const U = g.getActiveUniform(i, A).name.replace("[0]", "");
713
- E[U] = g.getUniformLocation(i, U);
714
- }
715
- return { prog: i, u: E };
716
- }
717
- function S(g, x, o, i) {
718
- const E = [g];
719
- let y = g;
720
- for (; y < g + x - 0.5; ) {
721
- const A = i && y >= i.from && y < i.to ? i.cell : o;
722
- y = Math.min(g + x, y + A), E.push(y);
723
- }
724
- return E;
725
- }
726
- function d(g, x, o, i, E = null) {
727
- const [y, A, U, F] = g, k = S(y, U, x, E && { from: E.x0, to: E.x1, cell: E.cell }), B = S(A, F, x, E && { from: E.y0, to: E.y1, cell: E.cell }), Y = k.length - 1, O = B.length - 1, z = (Y + 1) * (O + 1), D = new Float32Array(z * 2), X = new Float32Array(z * 2);
728
- for (let Z = 0; Z <= O; Z++) for (let P = 0; P <= Y; P++) {
729
- const W = Z * (Y + 1) + P;
730
- D[W * 2] = k[P], D[W * 2 + 1] = B[Z], X[W * 2] = (k[P] - y) / U, X[W * 2 + 1] = (B[Z] - A) / F;
731
- }
732
- const I = [], C = [], $ = o.length / i, j = i === 1 ? 0 : 1;
733
- for (let Z = 0; Z < O; Z++) for (let P = 0; P < Y; P++) {
734
- const W = Math.floor(k[P] - y) * j - 2, q = Math.ceil(k[P + 1] - y) * j + 2, J = Math.floor(B[Z] - A) * j - 2, b = Math.ceil(B[Z + 1] - A) * j + 2;
735
- let w = !1;
736
- for (let L = Math.max(0, J); L < Math.min($, b) && !w; L += 1)
737
- for (let G = Math.max(0, W); G < Math.min(i, q); G += 1)
738
- if (o[L * i + G] > 3) {
739
- w = !0;
702
+ function u(v, x, o) {
703
+ const h = v.createProgram();
704
+ for (const [w, B] of [[v.VERTEX_SHADER, x], [v.FRAGMENT_SHADER, o]]) {
705
+ const Y = v.createShader(w);
706
+ if (v.shaderSource(Y, B), v.compileShader(Y), !v.getShaderParameter(Y, v.COMPILE_STATUS)) throw new Error(v.getShaderInfoLog(Y));
707
+ v.attachShader(h, Y), v.deleteShader(Y);
708
+ }
709
+ if (v.bindAttribLocation(h, 0, "aPos"), v.bindAttribLocation(h, 1, "aUv"), v.bindAttribLocation(h, 2, "aHeadWeight"), v.linkProgram(h), !v.getProgramParameter(h, v.LINK_STATUS)) throw new Error(v.getProgramInfoLog(h));
710
+ const T = {}, f = v.getProgramParameter(h, v.ACTIVE_UNIFORMS);
711
+ for (let w = 0; w < f; w++) {
712
+ const B = v.getActiveUniform(h, w).name.replace("[0]", "");
713
+ T[B] = v.getUniformLocation(h, B);
714
+ }
715
+ return { prog: h, u: T };
716
+ }
717
+ function S(v, x, o, h) {
718
+ const T = [v];
719
+ let f = v;
720
+ for (; f < v + x - 0.5; ) {
721
+ const w = h && f >= h.from && f < h.to ? h.cell : o;
722
+ f = Math.min(v + x, f + w), T.push(f);
723
+ }
724
+ return T;
725
+ }
726
+ function y(v, x, o, h, T = null) {
727
+ const [f, w, B, Y] = v, I = S(f, 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] - f) / B, V[G * 2 + 1] = (_[Z] - w) / Y;
731
+ }
732
+ const X = [], D = [], H = o.length / h, L = h === 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] - f) * L - 2, J = Math.ceil(I[P + 1] - f) * L + 2, q = Math.floor(_[Z] - w) * L - 2, g = Math.ceil(_[Z + 1] - w) * L + 2;
735
+ let A = !1;
736
+ for (let F = Math.max(0, q); F < Math.min(H, g) && !A; F += 1)
737
+ for (let j = Math.max(0, G); j < Math.min(h, J); j += 1)
738
+ if (o[F * h + j] > 3) {
739
+ A = !0;
740
740
  break;
741
741
  }
742
- if (!w) continue;
743
- const T = Z * (Y + 1) + P, _ = T + 1, N = T + Y + 1, H = N + 1;
744
- I.push(T, _, N, _, H, N), C.push(T, _, T, N, _, N), P === Y - 1 && C.push(_, H), Z === O - 1 && C.push(N, H);
742
+ if (!A) continue;
743
+ const E = Z * (U + 1) + P, k = E + 1, N = E + U + 1, z = N + 1;
744
+ X.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);
745
745
  }
746
- return { rect: g, cols: Y, rows: O, rest: D, uv: X, pos: new Float32Array(D), tris: new Uint32Array(I), lines: new Uint32Array(C) };
746
+ return { rect: v, cols: U, rows: O, rest: $, uv: V, pos: new Float32Array($), tris: new Uint32Array(X), lines: new Uint32Array(D) };
747
747
  }
748
748
  class c {
749
749
  // padTop / padSide: margin around the image, as a share of its height / width. A negative
750
750
  // padTop pushes the top of the image above the canvas (hides a cut-off top edge).
751
- constructor(x, { padTop: o = 0, padSide: i = 0, fit: E = "contain" } = {}) {
752
- this.pad = { top: o, side: i }, this.fit = E;
753
- const y = x.getContext("webgl2", { premultipliedAlpha: !0, antialias: !0, alpha: !0, preserveDrawingBuffer: !0 });
754
- if (!y) throw new Error("WebGL2 is not available");
755
- this.gl = y, this.canvas = x, this.main = u(y, h, f), this.line = u(y, m, l), this.layers = [], this.lighting = Re, this.lightingStats = { normalMs: 0, computedLayers: 0, cachedLayers: 0 }, y.enable(y.BLEND), y.blendFunc(y.ONE, y.ONE_MINUS_SRC_ALPHA);
751
+ constructor(x, { padTop: o = 0, padSide: h = 0, fit: T = "contain" } = {}) {
752
+ this.pad = { top: o, side: h }, this.fit = T;
753
+ const f = x.getContext("webgl2", { premultipliedAlpha: !0, antialias: !0, alpha: !0, preserveDrawingBuffer: !0 });
754
+ if (!f) throw new Error("WebGL2 is not available");
755
+ this.gl = f, this.canvas = x, this.main = u(f, l, m), this.line = u(f, p, i), this.layers = [], this.lighting = Re, this.lightingStats = { normalMs: 0, computedLayers: 0, cachedLayers: 0 }, f.enable(f.BLEND), f.blendFunc(f.ONE, f.ONE_MINUS_SRC_ALPHA);
756
756
  }
757
757
  texture(x) {
758
- const o = this.gl, i = o.createTexture();
759
- return o.bindTexture(o.TEXTURE_2D, i), o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !0), o.texImage2D(o.TEXTURE_2D, 0, o.RGBA, o.RGBA, o.UNSIGNED_BYTE, x), o.generateMipmap(o.TEXTURE_2D), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MIN_FILTER, o.LINEAR_MIPMAP_LINEAR), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MAG_FILTER, o.LINEAR), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_WRAP_S, o.CLAMP_TO_EDGE), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_WRAP_T, o.CLAMP_TO_EDGE), i;
760
- }
761
- addLayer(x, o, i, E = {}) {
762
- const y = this.gl, A = y.createVertexArray();
763
- y.bindVertexArray(A);
764
- const U = y.createBuffer();
765
- y.bindBuffer(y.ARRAY_BUFFER, U), y.bufferData(y.ARRAY_BUFFER, i.pos, y.DYNAMIC_DRAW);
766
- for (const z of [this.main, this.line]) {
767
- const D = y.getAttribLocation(z.prog, "aPos");
768
- y.enableVertexAttribArray(D), y.vertexAttribPointer(D, 2, y.FLOAT, !1, 0, 0);
758
+ const o = this.gl, h = o.createTexture();
759
+ return o.bindTexture(o.TEXTURE_2D, h), o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !0), o.texImage2D(o.TEXTURE_2D, 0, o.RGBA, o.RGBA, o.UNSIGNED_BYTE, x), o.generateMipmap(o.TEXTURE_2D), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MIN_FILTER, o.LINEAR_MIPMAP_LINEAR), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MAG_FILTER, o.LINEAR), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_WRAP_S, o.CLAMP_TO_EDGE), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_WRAP_T, o.CLAMP_TO_EDGE), h;
760
+ }
761
+ addLayer(x, o, h, T = {}) {
762
+ const f = this.gl, w = f.createVertexArray();
763
+ f.bindVertexArray(w);
764
+ const B = f.createBuffer();
765
+ f.bindBuffer(f.ARRAY_BUFFER, B), f.bufferData(f.ARRAY_BUFFER, h.pos, f.DYNAMIC_DRAW);
766
+ for (const C of [this.main, this.line]) {
767
+ const $ = f.getAttribLocation(C.prog, "aPos");
768
+ f.enableVertexAttribArray($), f.vertexAttribPointer($, 2, f.FLOAT, !1, 0, 0);
769
769
  }
770
- const F = y.createBuffer();
771
- y.bindBuffer(y.ARRAY_BUFFER, F), y.bufferData(y.ARRAY_BUFFER, i.uv, y.STATIC_DRAW);
772
- const k = y.getAttribLocation(this.main.prog, "aUv");
773
- y.enableVertexAttribArray(k), y.vertexAttribPointer(k, 2, y.FLOAT, !1, 0, 0);
774
- const B = y.createBuffer();
775
- y.bindBuffer(y.ELEMENT_ARRAY_BUFFER, B), y.bufferData(y.ELEMENT_ARRAY_BUFFER, i.tris, y.STATIC_DRAW), y.bindVertexArray(null);
776
- const Y = y.createBuffer();
777
- y.bindBuffer(y.ELEMENT_ARRAY_BUFFER, Y), y.bufferData(y.ELEMENT_ARRAY_BUFFER, i.lines, y.STATIC_DRAW);
778
- const O = { name: x, image: o, mesh: i, tex: this.texture(o), vao: A, posBuf: U, uvBuf: F, triBuf: B, lineBuf: Y, visible: !0, face: !!E.face, eyeBall: E.eyeBall, color: E.color || [1, 1, 1, 1] };
770
+ const Y = f.createBuffer();
771
+ f.bindBuffer(f.ARRAY_BUFFER, Y), f.bufferData(f.ARRAY_BUFFER, h.uv, f.STATIC_DRAW);
772
+ const I = f.getAttribLocation(this.main.prog, "aUv");
773
+ f.enableVertexAttribArray(I), f.vertexAttribPointer(I, 2, f.FLOAT, !1, 0, 0);
774
+ const _ = f.createBuffer();
775
+ f.bindBuffer(f.ELEMENT_ARRAY_BUFFER, _), f.bufferData(f.ELEMENT_ARRAY_BUFFER, h.tris, f.STATIC_DRAW), f.bindVertexArray(null);
776
+ const U = f.createBuffer();
777
+ f.bindBuffer(f.ELEMENT_ARRAY_BUFFER, U), f.bufferData(f.ELEMENT_ARRAY_BUFFER, h.lines, f.STATIC_DRAW);
778
+ const O = { name: x, image: o, mesh: h, tex: this.texture(o), vao: w, posBuf: B, uvBuf: Y, triBuf: _, lineBuf: U, 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() {
782
782
  const x = this.gl;
783
783
  for (const o of this.layers) {
784
784
  x.deleteTexture(o.tex), o.normal && x.deleteTexture(o.normal), o.headBuf && x.deleteBuffer(o.headBuf), x.deleteVertexArray(o.vao);
785
- for (const i of [o.posBuf, o.uvBuf, o.triBuf, o.lineBuf]) x.deleteBuffer(i);
785
+ for (const h of [o.posBuf, o.uvBuf, o.triBuf, o.lineBuf]) x.deleteBuffer(h);
786
786
  }
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 = wn({ ...Re, ...x }) ?? Re, !this.lighting.enabled) return;
790
+ if (this.lighting = An({ ...Re, ...x }) ?? Re, !this.lighting.enabled) return;
791
791
  const o = this.gl;
792
- this.lit || (this.lit = u(o, v, p));
793
- for (const i of this.layers) {
794
- if (i.normal || i.overlay) continue;
795
- const E = bn(i.image, i.mesh.rect, e, !/^(eye|mouth)/.test(i.name));
796
- this.lightingStats.normalMs += E.ms, this.lightingStats[E.computed ? "computedLayers" : "cachedLayers"]++, i.normal = o.createTexture(), o.activeTexture(o.TEXTURE0), o.bindTexture(o.TEXTURE_2D, i.normal), o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !1), o.texImage2D(o.TEXTURE_2D, 0, o.RGBA, E.width, E.height, 0, o.RGBA, o.UNSIGNED_BYTE, E.data), o.generateMipmap(o.TEXTURE_2D), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MIN_FILTER, o.LINEAR_MIPMAP_LINEAR), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MAG_FILTER, o.LINEAR), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_WRAP_S, o.CLAMP_TO_EDGE), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_WRAP_T, o.CLAMP_TO_EDGE);
797
- const y = new Float32Array(i.mesh.rest.length / 2);
798
- for (let A = 0; A < y.length; A++) y[A] = n.headWeight(i.mesh.rest[A * 2], i.mesh.rest[A * 2 + 1]);
799
- i.headBuf = o.createBuffer(), o.bindVertexArray(i.vao), o.bindBuffer(o.ARRAY_BUFFER, i.headBuf), o.bufferData(o.ARRAY_BUFFER, y, o.STATIC_DRAW), o.enableVertexAttribArray(2), o.vertexAttribPointer(2, 1, o.FLOAT, !1, 0, 0);
792
+ this.lit || (this.lit = u(o, b, d));
793
+ for (const h of this.layers) {
794
+ if (h.normal || h.overlay) continue;
795
+ const T = xn(h.image, h.mesh.rect, e, !/^(eye|mouth)/.test(h.name));
796
+ this.lightingStats.normalMs += T.ms, this.lightingStats[T.computed ? "computedLayers" : "cachedLayers"]++, h.normal = o.createTexture(), o.activeTexture(o.TEXTURE0), o.bindTexture(o.TEXTURE_2D, h.normal), o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !1), o.texImage2D(o.TEXTURE_2D, 0, o.RGBA, T.width, T.height, 0, o.RGBA, o.UNSIGNED_BYTE, T.data), o.generateMipmap(o.TEXTURE_2D), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MIN_FILTER, o.LINEAR_MIPMAP_LINEAR), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MAG_FILTER, o.LINEAR), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_WRAP_S, o.CLAMP_TO_EDGE), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_WRAP_T, o.CLAMP_TO_EDGE);
797
+ const f = new Float32Array(h.mesh.rest.length / 2);
798
+ for (let w = 0; w < f.length; w++) f[w] = n.headWeight(h.mesh.rest[w * 2], h.mesh.rest[w * 2 + 1]);
799
+ h.headBuf = o.createBuffer(), o.bindVertexArray(h.vao), o.bindBuffer(o.ARRAY_BUFFER, h.headBuf), o.bufferData(o.ARRAY_BUFFER, f, o.STATIC_DRAW), o.enableVertexAttribArray(2), o.vertexAttribPointer(2, 1, o.FLOAT, !1, 0, 0);
800
800
  }
801
- o.bindVertexArray(null), this.lighting.shadow && !this.shadow && (this.shadow = new On(o, u));
801
+ o.bindVertexArray(null), this.lighting.shadow && !this.shadow && (this.shadow = new Rn(o, u));
802
802
  }
803
803
  resize() {
804
- const x = this.canvas, o = Math.min(window.devicePixelRatio || 1, 2), i = Math.round(x.clientWidth * o), E = Math.round(x.clientHeight * o);
805
- (x.width !== i || x.height !== E) && (x.width = i, x.height = E);
806
- const y = (this.fit === "cover" ? Math.max : Math.min)(i / (t.w * (1 + 2 * this.pad.side)), E / (t.h * (1 + this.pad.top))), A = (i - t.w * y) / 2, U = (E - t.h * y) / (this.fit === "cover" ? 2 : 1);
807
- this.scale = [2 * y / i, -2 * y / E], this.offset = [-1 + 2 * A / i, 1 - 2 * U / E], this.pxScale = y, this.pxOff = [A, U];
804
+ const x = this.canvas, o = Math.min(window.devicePixelRatio || 1, 2), h = Math.round(x.clientWidth * o), T = Math.round(x.clientHeight * o);
805
+ (x.width !== h || x.height !== T) && (x.width = h, x.height = T);
806
+ const f = (this.fit === "cover" ? Math.max : Math.min)(h / (t.w * (1 + 2 * this.pad.side)), T / (t.h * (1 + this.pad.top))), w = (h - t.w * f) / 2, B = (T - t.h * f) / (this.fit === "cover" ? 2 : 1);
807
+ this.scale = [2 * f / h, -2 * f / T], this.offset = [-1 + 2 * w / h, 1 - 2 * B / T], this.pxScale = f, this.pxOff = [w, B];
808
808
  }
809
809
  draw(x) {
810
810
  const o = this.gl;
811
811
  this.resize(), o.viewport(0, 0, this.canvas.width, this.canvas.height), o.clearColor(0, 0, 0, 0), o.clear(o.COLOR_BUFFER_BIT);
812
- const i = this.lighting.enabled, E = i && this.lighting.shadow;
813
- E && this.shadow.begin(this.canvas.width, this.canvas.height);
814
- const y = i ? this.lit : this.main;
815
- if (this.current = y, o.useProgram(y.prog), i) {
816
- const A = this.lighting;
817
- o.uniform1i(y.u.uNormal, 1), o.uniform3f(y.u.uLight, A.x, A.y, A.z), o.uniform3f(y.u.uLightColor, (A.color >> 16 & 255) / 255, (A.color >> 8 & 255) / 255, (A.color & 255) / 255), o.uniform3f(y.u.uAmbientColor, (A.ambientColor >> 16 & 255) / 255, (A.ambientColor >> 8 & 255) / 255, (A.ambientColor & 255) / 255), o.uniform4f(y.u.uLighting, A.strength, A.intensity, A.ambient, A.reach), o.uniform4f(y.u.uSurface, A.softness, A.specular, A.rim, A.detail), o.uniform1f(y.u.uAspect, this.canvas.width / this.canvas.height), o.uniform1i(y.u.uCel, A.mode === "cel" ? 1 : 0), o.uniformMatrix3fv(y.u.uHeadRotation, !1, Tn(x.angleX ?? 0, x.angleY ?? 0, x.angleZ ?? 0, e.head.maxRoll));
812
+ const h = this.lighting.enabled, T = h && this.lighting.shadow;
813
+ T && this.shadow.begin(this.canvas.width, this.canvas.height);
814
+ const f = h ? this.lit : this.main;
815
+ if (this.current = f, o.useProgram(f.prog), h) {
816
+ const w = this.lighting;
817
+ o.uniform1i(f.u.uNormal, 1), o.uniform3f(f.u.uLight, w.x, w.y, w.z), o.uniform3f(f.u.uLightColor, (w.color >> 16 & 255) / 255, (w.color >> 8 & 255) / 255, (w.color & 255) / 255), o.uniform3f(f.u.uAmbientColor, (w.ambientColor >> 16 & 255) / 255, (w.ambientColor >> 8 & 255) / 255, (w.ambientColor & 255) / 255), o.uniform4f(f.u.uLighting, w.strength, w.intensity, w.ambient, w.reach), o.uniform4f(f.u.uSurface, w.softness, w.specular, w.rim, w.detail), o.uniform1f(f.u.uAspect, this.canvas.width / this.canvas.height), o.uniform1i(f.u.uCel, w.mode === "cel" ? 1 : 0), o.uniformMatrix3fv(f.u.uHeadRotation, !1, On(x.angleX ?? 0, x.angleY ?? 0, x.angleZ ?? 0, e.head.maxRoll));
818
818
  }
819
- o.uniform2fv(y.u.uScale, this.scale), o.uniform2fv(y.u.uOffset, this.offset), o.uniform1i(y.u.uTex, 0), o.uniform4fv(y.u.uEyeBox, r.flatMap((A) => [A.x0, A.x1, 0, 0])), o.uniform1fv(y.u.uEyeTop, r.flatMap((A) => A.top)), o.uniform1fv(y.u.uEyeBot, r.flatMap((A) => A.bot)), o.uniform4fv(y.u.uEyeState, x.eyes), o.uniform4f(y.u.uMouth, a.cx, a.cy, a.angle, a.halfLen), o.uniform4f(y.u.uMouthState, x.mouthOpen, x.mouthForm, a.bow, 0), o.uniform4f(y.u.uCheeks, s[0][0], s[0][1], s[1][0], s[1][1]), o.uniform1f(y.u.uCheek, x.cheek), o.activeTexture(o.TEXTURE0);
820
- for (const A of this.layers)
821
- !A.visible || A.overlay || this.drawLayer(A, A.alpha ?? 1);
822
- if (this.original && x.originalAlpha > 0 && this.drawLayer(this.original, x.originalAlpha), E && this.shadow.composite(this.lighting), x.showMesh) {
823
- const A = this.line;
824
- o.useProgram(A.prog), o.uniform2fv(A.u.uScale, this.scale), o.uniform2fv(A.u.uOffset, this.offset);
825
- for (const U of this.layers)
826
- !U.visible || U.overlay || (o.bindVertexArray(U.vao), o.bindBuffer(o.ELEMENT_ARRAY_BUFFER, U.lineBuf), o.uniform4fv(A.u.uColor, U.color), o.drawElements(o.LINES, U.mesh.lines.length, o.UNSIGNED_INT, 0), o.bindBuffer(o.ELEMENT_ARRAY_BUFFER, U.triBuf));
819
+ o.uniform2fv(f.u.uScale, this.scale), o.uniform2fv(f.u.uOffset, this.offset), o.uniform1i(f.u.uTex, 0), o.uniform4fv(f.u.uEyeBox, r.flatMap((w) => [w.x0, w.x1, 0, 0])), o.uniform1fv(f.u.uEyeTop, r.flatMap((w) => w.top)), o.uniform1fv(f.u.uEyeBot, r.flatMap((w) => w.bot)), o.uniform4fv(f.u.uEyeState, x.eyes), o.uniform4f(f.u.uMouth, a.cx, a.cy, a.angle, a.halfLen), o.uniform4f(f.u.uMouthState, x.mouthOpen, x.mouthForm, a.bow, 0), o.uniform4f(f.u.uCheeks, s[0][0], s[0][1], s[1][0], s[1][1]), o.uniform1f(f.u.uCheek, x.cheek), o.activeTexture(o.TEXTURE0);
820
+ for (const w of this.layers)
821
+ !w.visible || w.overlay || this.drawLayer(w, w.alpha ?? 1);
822
+ if (this.original && x.originalAlpha > 0 && this.drawLayer(this.original, x.originalAlpha), T && this.shadow.composite(this.lighting), x.showMesh) {
823
+ const w = this.line;
824
+ o.useProgram(w.prog), o.uniform2fv(w.u.uScale, this.scale), o.uniform2fv(w.u.uOffset, this.offset);
825
+ for (const B of this.layers)
826
+ !B.visible || B.overlay || (o.bindVertexArray(B.vao), o.bindBuffer(o.ELEMENT_ARRAY_BUFFER, B.lineBuf), o.uniform4fv(w.u.uColor, B.color), o.drawElements(o.LINES, B.mesh.lines.length, o.UNSIGNED_INT, 0), o.bindBuffer(o.ELEMENT_ARRAY_BUFFER, B.triBuf));
827
827
  x.joints?.length && this.drawPoints(x.joints), o.bindVertexArray(null);
828
828
  }
829
829
  }
830
830
  drawLayer(x, o) {
831
- const i = this.gl, E = this.current;
832
- i.useProgram(E.prog), i.bindVertexArray(x.vao), i.bindBuffer(i.ARRAY_BUFFER, x.posBuf), i.bufferSubData(i.ARRAY_BUFFER, 0, x.mesh.pos), this.lighting.enabled && (i.activeTexture(i.TEXTURE1), i.bindTexture(i.TEXTURE_2D, x.normal), i.activeTexture(i.TEXTURE0)), i.bindTexture(i.TEXTURE_2D, x.tex), i.uniform4fv(E.u.uRect, x.mesh.rect), i.uniform1i(E.u.uFace, x.eyeBall !== void 0 ? 2 + x.eyeBall : x.face ? 1 : 0), i.uniform1f(E.u.uAlpha, o), i.drawElements(i.TRIANGLES, x.mesh.tris.length, i.UNSIGNED_INT, 0);
831
+ const h = this.gl, T = this.current;
832
+ h.useProgram(T.prog), h.bindVertexArray(x.vao), h.bindBuffer(h.ARRAY_BUFFER, x.posBuf), h.bufferSubData(h.ARRAY_BUFFER, 0, x.mesh.pos), this.lighting.enabled && (h.activeTexture(h.TEXTURE1), h.bindTexture(h.TEXTURE_2D, x.normal), h.activeTexture(h.TEXTURE0)), h.bindTexture(h.TEXTURE_2D, x.tex), h.uniform4fv(T.u.uRect, x.mesh.rect), h.uniform1i(T.u.uFace, x.eyeBall !== void 0 ? 2 + x.eyeBall : x.face ? 1 : 0), h.uniform1f(T.u.uAlpha, o), h.drawElements(h.TRIANGLES, x.mesh.tris.length, h.UNSIGNED_INT, 0);
833
833
  }
834
834
  drawPoints(x) {
835
- const o = this.gl, i = this.line;
835
+ const o = this.gl, h = this.line;
836
836
  if (!this.pointBuf) {
837
837
  this.pointBuf = o.createBuffer(), this.pointVao = o.createVertexArray(), o.bindVertexArray(this.pointVao), o.bindBuffer(o.ARRAY_BUFFER, this.pointBuf);
838
- const E = o.getAttribLocation(i.prog, "aPos");
839
- o.enableVertexAttribArray(E), o.vertexAttribPointer(E, 2, o.FLOAT, !1, 0, 0);
838
+ const T = o.getAttribLocation(h.prog, "aPos");
839
+ o.enableVertexAttribArray(T), o.vertexAttribPointer(T, 2, o.FLOAT, !1, 0, 0);
840
840
  }
841
- o.bindVertexArray(this.pointVao), o.bindBuffer(o.ARRAY_BUFFER, this.pointBuf), o.bufferData(o.ARRAY_BUFFER, new Float32Array(x.flat()), o.DYNAMIC_DRAW), o.uniform4f(i.u.uColor, 1, 0.85, 0.2, 1), o.drawArrays(o.POINTS, 0, x.length);
841
+ o.bindVertexArray(this.pointVao), o.bindBuffer(o.ARRAY_BUFFER, this.pointBuf), o.bufferData(o.ARRAY_BUFFER, new Float32Array(x.flat()), o.DYNAMIC_DRAW), o.uniform4f(h.u.uColor, 1, 0.85, 0.2, 1), o.drawArrays(o.POINTS, 0, x.length);
842
842
  }
843
843
  // canvas CSS px -> source image px
844
844
  toImage(x, o) {
845
845
  if (!this.pxOff) return null;
846
- const i = this.canvas.width / this.canvas.clientWidth;
847
- return [(x * i - this.pxOff[0]) / this.pxScale, (o * i - this.pxOff[1]) / this.pxScale];
846
+ const h = this.canvas.width / this.canvas.clientWidth;
847
+ return [(x * h - this.pxOff[0]) / this.pxScale, (o * h - this.pxOff[1]) / this.pxScale];
848
848
  }
849
849
  }
850
- return { Renderer: c, buildGrid: d };
850
+ return { Renderer: c, buildGrid: y };
851
851
  }
852
- function Ln(n, e) {
853
- const { applyHead: t, applyBody: r, TASSELS: a, tasselAnchor: s } = n, h = (e.strands ?? []).map((o) => {
852
+ function kn(n, e) {
853
+ const { applyHead: t, applyBody: r, TASSELS: a, tasselAnchor: s } = n, l = (e.strands ?? []).map((o) => {
854
854
  if (o.nodes.length === 4) return o;
855
- const i = Array.from({ length: 4 }, (E, y) => {
856
- const A = y / 3 * (o.nodes.length - 1), U = Math.min(o.nodes.length - 2, Math.floor(A)), F = A - U;
857
- return [0, 1].map((k) => o.nodes[U][k] + (o.nodes[U + 1][k] - o.nodes[U][k]) * F);
855
+ const h = Array.from({ length: 4 }, (T, f) => {
856
+ const w = f / 3 * (o.nodes.length - 1), B = Math.min(o.nodes.length - 2, Math.floor(w)), Y = w - B;
857
+ return [0, 1].map((I) => o.nodes[B][I] + (o.nodes[B + 1][I] - o.nodes[B][I]) * Y);
858
858
  });
859
- return { ...o, nodes: i };
860
- }), f = [0, 300, 200, 140], v = 0.9, p = 7, m = { stiff: 1.7, damp: 1.6, couple: 0.85, reach: 0.9, bind: 4 }, l = Math.min(6, h.filter((o) => o.name.startsWith("bang")).length), u = { freq: 0.7, zeta: 0.22, hang: 0.85, inertia: 0.32, wind: 0.03, max: 0.55, smooth: 6 }, S = (o, i) => [o[0] * Math.cos(i) - o[1] * Math.sin(i), o[0] * Math.sin(i) + o[1] * Math.cos(i)], d = (o, i) => {
861
- const E = Math.hypot(o[0], o[1]);
862
- if (E < 1e-6) return o;
863
- const y = i * Math.tanh(E / i) / E;
864
- return [o[0] * y, o[1] * y];
865
- }, c = Object.fromEntries(Object.entries(e.buns ?? {}).map(([o, i]) => [o, { at: [i.cx, i.cy], k: 260, c: 11, hang: 3, max: 4 }])), g = (o, i) => {
866
- const E = Math.hypot(o[0], o[1]);
867
- E > i && (o[0] *= i / E, o[1] *= i / E);
859
+ return { ...o, nodes: h };
860
+ }), m = [0, 300, 200, 140], b = 0.9, d = 7, p = { stiff: 1.7, damp: 1.6, couple: 0.85, reach: 0.9, bind: 4 }, i = Math.min(6, l.filter((o) => o.name.startsWith("bang")).length), u = { freq: 0.7, zeta: 0.22, hang: 0.85, inertia: 0.32, wind: 0.03, max: 0.55, smooth: 6 }, S = (o, h) => [o[0] * Math.cos(h) - o[1] * Math.sin(h), o[0] * Math.sin(h) + o[1] * Math.cos(h)], y = (o, h) => {
861
+ const T = Math.hypot(o[0], o[1]);
862
+ if (T < 1e-6) return o;
863
+ const f = h * Math.tanh(T / h) / T;
864
+ return [o[0] * f, o[1] * f];
865
+ }, c = Object.fromEntries(Object.entries(e.buns ?? {}).map(([o, h]) => [o, { at: [h.cx, h.cy], k: 260, c: 11, hang: 3, max: 4 }])), v = (o, h) => {
866
+ const T = Math.hypot(o[0], o[1]);
867
+ T > h && (o[0] *= h / T, o[1] *= h / T);
868
868
  };
869
869
  class x {
870
870
  constructor() {
871
871
  this.gain = 1, this.out = { gain: 1, bunL: [0, 0], bunR: [0, 0] }, this.hair = {};
872
- for (const i of Object.keys(c))
873
- this.hair[i] = { p: null, v: [0, 0] }, this.out[i] = [0, 0];
874
- this.strands = h.map(() => ({ p: null, v: [[0, 0], [0, 0], [0, 0], [0, 0]] })), this.out.strands = h.map(() => [[0, 0], [0, 0], [0, 0], [0, 0]]), this.chains = a.map((i) => {
875
- const E = i.tip[0] - i.pivot[0], y = i.tip[1] - i.pivot[1], A = Math.hypot(E, y), U = [E / A, y / A];
876
- return { t: i, dir: U, L1: A * i.split, L2: A * (1 - i.split), pts: null, prev: null, phi: [0, 0], anchor: [0, 0] };
872
+ for (const h of Object.keys(c))
873
+ this.hair[h] = { p: null, v: [0, 0] }, this.out[h] = [0, 0];
874
+ this.strands = l.map(() => ({ p: null, v: [[0, 0], [0, 0], [0, 0], [0, 0]] })), this.out.strands = l.map(() => [[0, 0], [0, 0], [0, 0], [0, 0]]), this.chains = a.map((h) => {
875
+ const T = h.tip[0] - h.pivot[0], f = h.tip[1] - h.pivot[1], w = Math.hypot(T, f), B = [T / w, f / w];
876
+ return { t: h, dir: B, L1: w * h.split, L2: w * (1 - h.split), pts: null, prev: null, phi: [0, 0], anchor: [0, 0] };
877
877
  }), this.time = 0;
878
878
  }
879
- hairAnchor(i, E) {
880
- const y = [i[0], i[1]];
881
- return t(y, 1, E), r(y, i[1], E), y;
882
- }
883
- step(i, E) {
884
- const y = Math.max(1, Math.ceil(E / 0.004166666666666667)), A = Math.min(E, 0.05) / y, U = -i.angleZ / 30 * e.head.maxRoll - i.bodyAngleZ / 10 * e.body.maxRoll, F = this.gain;
885
- h.forEach((B, Y) => {
886
- const O = this.strands[Y], z = this.out.strands[Y], D = B.nodes.map((I) => this.hairAnchor(I, i));
887
- O.p || (O.p = D.map((I) => [...I]));
888
- const X = Y * 1.7;
889
- for (let I = 0; I < y; I++) {
890
- const C = this.time + I * A;
891
- for (let $ = 1; $ < 4; $++) {
892
- const j = Math.hypot(B.nodes[$][0] - B.nodes[0][0], B.nodes[$][1] - B.nodes[0][1]), Z = (Math.sin(C * 1.3) * 0.5 + Math.sin(C * 3.1) * 0.3 + Math.sin(C * 4.7 + X) * 0.2) * B.max * 0.1 * $ / 3, P = [O.p[$ - 1][0] - D[$ - 1][0], O.p[$ - 1][1] - D[$ - 1][1]], W = D[$][0] + P[0] * v * m.couple - Math.sin(U) * j * 0.12 + Z, q = D[$][1] + P[1] * v * m.couple, J = f[$] * B.k * m.stiff / Math.max(0.35, F), b = p * m.damp * Math.sqrt(m.stiff) / Math.max(0.5, Math.sqrt(F)), w = O.v[$], T = O.p[$];
893
- w[0] += (J * (W - T[0]) - b * w[0]) * A, w[1] += (J * (q - T[1]) - b * w[1]) * A, T[0] += w[0] * A, T[1] += w[1] * A;
879
+ hairAnchor(h, T) {
880
+ const f = [h[0], h[1]];
881
+ return t(f, 1, T), r(f, h[1], T), f;
882
+ }
883
+ step(h, T) {
884
+ const f = Math.max(1, Math.ceil(T / 0.004166666666666667)), w = Math.min(T, 0.05) / f, B = -h.angleZ / 30 * e.head.maxRoll - h.bodyAngleZ / 10 * e.body.maxRoll, Y = this.gain;
885
+ l.forEach((_, U) => {
886
+ const O = this.strands[U], C = this.out.strands[U], $ = _.nodes.map((X) => this.hairAnchor(X, h));
887
+ O.p || (O.p = $.map((X) => [...X]));
888
+ const V = U * 1.7;
889
+ for (let X = 0; X < f; X++) {
890
+ const D = this.time + X * w;
891
+ for (let H = 1; H < 4; H++) {
892
+ const L = 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] * b * p.couple - Math.sin(B) * L * 0.12 + Z, J = $[H][1] + P[1] * b * p.couple, q = m[H] * _.k * p.stiff / Math.max(0.35, Y), g = d * 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]) - g * A[0]) * w, A[1] += (q * (J - E[1]) - g * A[1]) * w, E[0] += A[0] * w, E[1] += A[1] * w;
894
894
  }
895
- O.p[0] = [...D[0]];
895
+ O.p[0] = [...$[0]];
896
896
  }
897
- for (let I = 0; I < 4; I++) {
898
- const C = [O.p[I][0] - D[I][0], O.p[I][1] - D[I][1]];
899
- z[I] = d(C, Math.max(0.5, B.max * m.reach * Math.max(1, F) * I / 3));
897
+ for (let X = 0; X < 4; X++) {
898
+ const D = [O.p[X][0] - $[X][0], O.p[X][1] - $[X][1]];
899
+ C[X] = y(D, Math.max(0.5, _.max * p.reach * Math.max(1, Y) * X / 3));
900
900
  }
901
901
  });
902
- for (const [B, Y] of Object.entries(c)) {
903
- const O = this.hair[B], z = this.hairAnchor(Y.at, i), D = Math.sin(this.time * 1.3 + Y.at[0] * 0.01) * 0.6 + Math.sin(this.time * 2.9 + Y.at[1] * 0.02) * 0.4, X = z[0] - Math.sin(U) * Y.hang + D * Y.max * 0.12, I = z[1];
904
- O.p || (O.p = [X, I]);
905
- const C = Y.k / Math.max(0.35, F), $ = Y.c / Math.max(0.5, Math.sqrt(F));
906
- for (let Z = 0; Z < y; Z++)
907
- O.v[0] += (C * (X - O.p[0]) - $ * O.v[0]) * A, O.v[1] += (C * (I - O.p[1]) - $ * O.v[1]) * A, O.p[0] += O.v[0] * A, O.p[1] += O.v[1] * A;
908
- const j = [O.p[0] - z[0], O.p[1] - z[1]];
909
- g(j, Y.max * Math.max(1, F)), this.out[B] = j;
902
+ for (const [_, U] of Object.entries(c)) {
903
+ const O = this.hair[_], C = this.hairAnchor(U.at, h), $ = 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, X = C[1];
904
+ O.p || (O.p = [V, X]);
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 < f; Z++)
907
+ O.v[0] += (D * (V - O.p[0]) - H * O.v[0]) * w, O.v[1] += (D * (X - O.p[1]) - H * O.v[1]) * w, O.p[0] += O.v[0] * w, O.p[1] += O.v[1] * w;
908
+ const L = [O.p[0] - C[0], O.p[1] - C[1]];
909
+ v(L, U.max * Math.max(1, Y)), this.out[_] = L;
910
910
  }
911
911
  this.out.gain = 1;
912
- const k = this.out.strands;
913
- for (let B = 0; B < m.bind; B++) for (let Y = 1; Y < 4; Y++) {
914
- const O = k.slice(0, l).map((z) => [...z[Y]]);
915
- for (let z = 0; z < l; z++) {
916
- const D = O[Math.max(0, z - 1)], X = O[Math.min(l - 1, z + 1)];
917
- for (const I of [0, 1]) k[z][Y][I] = O[z][I] * 0.5 + (D[I] + X[I]) * 0.25;
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, i).map((C) => [...C[U]]);
915
+ for (let C = 0; C < i; C++) {
916
+ const $ = O[Math.max(0, C - 1)], V = O[Math.min(i - 1, C + 1)];
917
+ for (const X of [0, 1]) I[C][U][X] = O[C][X] * 0.5 + ($[X] + V[X]) * 0.25;
918
918
  }
919
919
  }
920
- for (const B of this.chains) {
921
- const Y = s(B.t, i, this.out, [0, 0]);
922
- B.st || (B.st = { th: [0, 0], w: [0, 0], pos: [...Y], vel: [0, 0], acc: [0, 0] });
923
- const O = B.st, z = u, D = [(Y[0] - O.pos[0]) / Math.max(E, 1e-3), (Y[1] - O.pos[1]) / Math.max(E, 1e-3)], X = 1 - Math.exp(-E * z.smooth), I = [(D[0] - O.vel[0]) / Math.max(E, 1e-3), (D[1] - O.vel[1]) / Math.max(E, 1e-3)];
924
- O.acc = [O.acc[0] + (I[0] - O.acc[0]) * X, O.acc[1] + (I[1] - O.acc[1]) * X], O.vel = [O.vel[0] + (D[0] - O.vel[0]) * X, O.vel[1] + (D[1] - O.vel[1]) * X], O.pos = [...Y];
925
- const C = [-B.dir[1], B.dir[0]], $ = -(O.acc[0] * C[0] + O.acc[1] * C[1]) / (B.L1 + B.L2) * z.inertia, j = (Math.sin(this.time * 0.9 + B.t.pivot[0]) * 0.6 + Math.sin(this.time * 0.37 + B.t.pivot[1]) * 0.4) * z.wind, Z = -U * z.hang + j, P = 2 * Math.PI * z.freq / Math.sqrt(Math.max(0.4, F)), W = P * 1.35;
926
- for (let w = 0; w < y; w++) {
927
- const T = -P * P * (O.th[0] - Z) - 2 * z.zeta * P * O.w[0] + $;
928
- O.w[0] += T * A, O.th[0] += O.w[0] * A;
929
- const _ = -W * W * (O.th[1] - O.th[0]) - 2 * z.zeta * W * O.w[1] + $ * 0.4 + T * 0.5;
930
- O.w[1] += _ * A, O.th[1] += O.w[1] * A;
920
+ for (const _ of this.chains) {
921
+ const U = s(_.t, h, 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 = u, $ = [(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), X = [($[0] - O.vel[0]) / Math.max(T, 1e-3), ($[1] - O.vel[1]) / Math.max(T, 1e-3)];
924
+ O.acc = [O.acc[0] + (X[0] - O.acc[0]) * V, O.acc[1] + (X[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, L = (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 + L, P = 2 * Math.PI * C.freq / Math.sqrt(Math.max(0.4, Y)), G = P * 1.35;
926
+ for (let A = 0; A < f; 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;
931
931
  }
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])), B.phi = [O.th[0], O.th[1]];
933
- const q = S(B.dir, O.th[0]), J = S(B.dir, O.th[1]), b = [Y[0] + q[0] * B.L1, Y[1] + q[1] * B.L1];
934
- B.pts = [[...Y], b, [b[0] + J[0] * B.L2, b[1] + J[1] * B.L2]], B.anchor = Y;
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]), g = [U[0] + J[0] * _.L1, U[1] + J[1] * _.L1];
934
+ _.pts = [[...U], g, [g[0] + q[0] * _.L2, g[1] + q[1] * _.L2]], _.anchor = U;
935
935
  }
936
- return this.time += E, this.out;
936
+ return this.time += T, this.out;
937
937
  }
938
938
  }
939
939
  return { Physics: x };
940
940
  }
941
- function kn(n, e) {
942
- const { baseWeights: t, deformBase: r, MOUTH: a } = n, s = (i, E, y) => {
943
- const A = Math.min(1, Math.max(0, (y - i) / (E - i)));
944
- return A * A * (3 - 2 * A);
945
- }, h = e.mouth.area, f = {
941
+ function _n(n, e) {
942
+ const { baseWeights: t, deformBase: r, MOUTH: a } = n, s = (f, w, B) => {
943
+ const Y = Math.min(1, Math.max(0, (B - f) / (w - f)));
944
+ return Y * Y * (3 - 2 * Y);
945
+ }, l = e.mouth.area, m = {
946
946
  a: { sprite: "mouth_a", ref: 0.9, width: 1 },
947
947
  aHalf: { sprite: "mouth_a_half", ref: 0.55, width: 1 },
948
948
  i: { sprite: "mouth_i", ref: 0.55, width: 1 },
949
949
  e: { sprite: "mouth_a_half", ref: 0.65, width: 1.06 },
950
950
  o: { sprite: "mouth_o", ref: 0.75, width: 1 },
951
951
  u: { sprite: "mouth_o", ref: 0.75, width: 0.78 }
952
- }, v = 0.16;
953
- function p(i, E) {
954
- const A = (k, B, Y) => k >= B - (E ? 0.07 : 0) && k < Y + (E ? 0.07 : 0), U = [["i", -9, -0.55], ["e", -0.55, -0.2], ["a", -0.2, 0.35], ["o", 0.35, 0.75], ["u", 0.75, 9]], F = E && U.find((k) => k[0] === E || E === "aHalf" && k[0] === "a");
955
- return F && A(i, F[1], F[2]) ? F[0] : U.find((k) => i >= k[1] && i < k[2])[0];
956
- }
957
- const m = 0.75, l = 0.3, u = 0.06;
958
- function S(i, E) {
959
- return i >= m ? null : i < l ? E >= 0.5 ? "eyes_smile" : "eyes_closed" : "eyes_half";
960
- }
961
- function d(i, E, y = null) {
962
- if (i < v) return null;
963
- const A = p(E, y);
964
- return A === "a" ? i >= 0.6 ? "a" : "aHalf" : A;
965
- }
966
- function c(i) {
967
- return a.cy + (i - a.cx) * Math.tan(a.angle);
968
- }
969
- function g() {
970
- return h.cx;
971
- }
972
- function x(i, E) {
973
- const y = Math.cos(-h.angle), A = Math.sin(-h.angle), U = i - h.cx, F = E - h.cy, k = (U * y - F * A) / h.rx, B = (U * A + F * y) / h.ry;
974
- return 1 - s(0.55, 0.95, Math.hypot(k, B));
975
- }
976
- function o(i, E, y, A, U) {
977
- const F = {}, k = (X) => X.startsWith("eyes_half") ? 0 : X.startsWith("eyes_") ? 1 : 2, B = Object.entries(E.layers).sort((X, I) => k(X[0]) - k(I[0]));
978
- for (const [X, I] of B) {
979
- const C = A(I, e.mesh.spriteCell, U(y[X]), y[X].width), $ = [], j = [];
980
- for (let P = 0; P < C.rest.length / 2; P++) {
981
- const W = C.rest[P * 2], q = C.rest[P * 2 + 1];
982
- $.push(t(W, q, 0)), j.push(X.startsWith("mouth") ? x(W, q) : 0);
952
+ }, b = 0.16, d = ["angry", "sad"];
953
+ function p(f, 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(f, _[1], _[2]) ? _[0] : I.find((U) => f >= U[1] && f < U[2])[0];
956
+ }
957
+ const i = 0.75, u = 0.3, S = 0.06, y = ["sad", "surprise"];
958
+ function c(f, w, B = null) {
959
+ return B && f >= u ? B : f >= i ? null : f < u ? w >= 0.5 ? "eyes_smile" : "eyes_closed" : "eyes_half";
960
+ }
961
+ function v(f, w, B = null) {
962
+ if (f < b) return null;
963
+ const Y = p(w, B);
964
+ return Y === "a" ? f >= 0.6 ? "a" : "aHalf" : Y;
965
+ }
966
+ function x(f) {
967
+ return a.cy + (f - a.cx) * Math.tan(a.angle);
968
+ }
969
+ function o() {
970
+ return l.cx;
971
+ }
972
+ function h(f, w) {
973
+ const B = Math.cos(-l.angle), Y = Math.sin(-l.angle), I = f - l.cx, _ = w - l.cy, U = (I * B - _ * Y) / l.rx, O = (I * Y + _ * B) / l.ry;
974
+ return 1 - s(0.55, 0.95, Math.hypot(U, O));
975
+ }
976
+ function T(f, w, B, Y, I) {
977
+ const _ = {}, U = (L) => L.startsWith("eyes_closed") || L.startsWith("eyes_smile"), O = (L) => d.some((Z) => L === `mouth_${Z}`), C = (L) => U(L) ? 1 : L.startsWith("eyes_") ? 0 : O(L) ? 2 : 3, $ = Object.entries(w.layers).sort((L, Z) => C(L[0]) - C(Z[0]));
978
+ for (const [L, Z] of $) {
979
+ const P = Y(Z, e.mesh.spriteCell, I(B[L]), B[L].width), G = [], J = [];
980
+ for (let g = 0; g < P.rest.length / 2; g++) {
981
+ const A = P.rest[g * 2], E = P.rest[g * 2 + 1];
982
+ G.push(t(A, E, 0)), J.push(L.startsWith("mouth") ? h(A, E) : 0);
983
983
  }
984
- const Z = i.addLayer(X, y[X], C, { color: [0.4, 1, 0.8, 0.6] });
985
- Z.visible = !1, F[X] = { mesh: C, W: $, inner: j, layer: Z };
986
- }
987
- const Y = [0, 0];
988
- let O = null;
989
- const z = [0, 1].map(() => ({ cur: "open", prev: "open", t: 1 }));
990
- function D(X, I, C, $, j = 1) {
991
- const Z = X.mesh.rest, P = X.mesh.pos;
992
- for (let W = 0; W < X.W.length; W++) {
993
- let q = Z[W * 2], J = Z[W * 2 + 1];
994
- const b = X.inner[W];
995
- if (b > 0) {
996
- const w = c(q);
997
- J = w + (J - w) * (1 + ($ - 1) * b), q = g() + (q - g()) * (1 + (j - 1) * b);
984
+ const q = f.addLayer(L, B[L], P, { color: [0.4, 1, 0.8, 0.6] });
985
+ q.visible = !1, _[L] = { mesh: P, W: G, inner: J, layer: q };
986
+ }
987
+ const V = [0, 0];
988
+ let X = null;
989
+ const D = [0, 1].map(() => ({ cur: "open", prev: "open", t: 1 }));
990
+ function H(L, Z, P, G, J = 1) {
991
+ const q = L.mesh.rest, g = L.mesh.pos;
992
+ for (let A = 0; A < L.W.length; A++) {
993
+ let E = q[A * 2], k = q[A * 2 + 1];
994
+ const N = L.inner[A];
995
+ if (N > 0) {
996
+ const z = x(E);
997
+ k = z + (k - z) * (1 + (G - 1) * N), E = o() + (E - o()) * (1 + (J - 1) * N);
998
998
  }
999
- r(q, J, X.W[W], I, C, Y), P[W * 2] = Y[0], P[W * 2 + 1] = Y[1];
999
+ r(E, k, L.W[A], Z, P, V), g[A * 2] = V[0], g[A * 2 + 1] = V[1];
1000
1000
  }
1001
1001
  }
1002
1002
  return {
1003
1003
  /**
1004
1004
  * Show / hide and deform the sprites for this frame.
1005
1005
  * Returns which eyes are covered by a sprite, so the layered eye parts can be hidden.
1006
+ * `mood` (angry / sad / surprise) picks drawn expression eyes (sad, surprise) and closed
1007
+ * mouths (angry, sad) when the avatar has them.
1006
1008
  */
1007
- update(X, I, C = 1 / 60) {
1008
- for (const q of Object.values(F)) q.layer.visible = !1;
1009
- const $ = [!1, !1];
1009
+ update(L, Z, P = 1 / 60, G = null) {
1010
+ for (const N of Object.values(_)) N.layer.visible = !1;
1011
+ const J = [!1, !1];
1010
1012
  [
1011
- [X.eyeROpen, X.eyeSmile],
1012
- [X.eyeLOpen, X.eyeSmileL ?? X.eyeSmile]
1013
- ].forEach(([q, J], b) => {
1014
- const w = z[b], T = S(q, J) ?? "open";
1015
- T !== w.cur && (w.prev = w.cur, w.cur = T, w.t = 0), w.t = C > 0 ? Math.min(1, w.t + C / u) : 1;
1016
- const _ = s(0, 1, w.t), N = (L, G) => {
1017
- if (L === "open" || G <= 1e-3) return;
1018
- const M = F[`${L}_${b}`];
1019
- M && (M.layer.visible = !0, M.layer.alpha = G, D(M, X, I, 1));
1020
- }, H = (L) => L === "open" ? -1 : L === "eyes_half" ? 0 : 1;
1021
- w.t >= 1 ? N(w.cur, 1) : H(w.cur) > H(w.prev) ? (N(w.prev, 1), N(w.cur, _)) : (N(w.cur, 1), N(w.prev, 1 - _)), $[b] = w.cur !== "open" && _ >= 0.999;
1013
+ [L.eyeROpen, L.eyeSmile],
1014
+ [L.eyeLOpen, L.eyeSmileL ?? L.eyeSmile]
1015
+ ].forEach(([N, z], F) => {
1016
+ const j = D[F], M = y.includes(G) && _[`eyes_${G}_${F}`] ? `eyes_${G}` : null, R = c(N, z, M) ?? "open";
1017
+ R !== j.cur && (j.prev = j.cur, j.cur = R, j.t = 0), j.t = P > 0 ? Math.min(1, j.t + P / S) : 1;
1018
+ const W = s(0, 1, j.t), Q = (ee, he) => {
1019
+ if (ee === "open" || he <= 1e-3) return;
1020
+ const oe = _[`${ee}_${F}`];
1021
+ oe && (oe.layer.visible = !0, oe.layer.alpha = he, H(oe, L, Z, 1));
1022
+ }, ne = (ee) => ee === "open" ? -1 : U(ee) ? 1 : 0;
1023
+ j.t >= 1 ? Q(j.cur, 1) : ne(j.cur) > ne(j.prev) ? (Q(j.prev, 1), Q(j.cur, W)) : (Q(j.cur, 1), Q(j.prev, 1 - W)), J[F] = j.cur !== "open" && W >= 0.999;
1022
1024
  });
1023
- const Z = d(X.mouthOpen, X.mouthForm, O);
1024
- O = Z;
1025
- const P = Z && f[Z], W = P && F[P.sprite];
1026
- if (W) {
1027
- W.layer.visible = !0, W.layer.alpha = s(v, v + 0.04, X.mouthOpen);
1028
- const q = Math.min(1.1, Math.max(0.5, X.mouthOpen / P.ref));
1029
- D(W, X, I, q, P.width);
1025
+ const g = v(L.mouthOpen, L.mouthForm, X);
1026
+ X = g;
1027
+ const A = g && m[g], E = A && _[A.sprite], k = d.includes(G) && _[`mouth_${G}`];
1028
+ if (k && (!E || L.mouthOpen < b + 0.04) && (k.layer.visible = !0, k.layer.alpha = 1, H(k, L, Z, 1)), E) {
1029
+ E.layer.visible = !0, E.layer.alpha = s(b, b + 0.04, L.mouthOpen);
1030
+ const N = Math.min(1.1, Math.max(0.5, L.mouthOpen / A.ref));
1031
+ H(E, L, Z, N, A.width);
1030
1032
  }
1031
- return { eyes: $, mouth: Z };
1033
+ return { eyes: J, mouth: g };
1032
1034
  }
1033
1035
  };
1034
1036
  }
1035
- return { createSprites: o, mouthShape: d, eyeSprite: S };
1037
+ return { createSprites: T, mouthShape: v, eyeSprite: c };
1036
1038
  }
1037
- const _n = /* @__PURE__ */ new Set([
1039
+ const Ut = { angry: "angry", angryTalk: "angry", sad: "sad", sadTalk: "sad", surprise: "surprise", surprisedTalk: "surprise" };
1040
+ function Fn(n, e) {
1041
+ return n && n !== "neutral" ? Ut[n] ?? null : (e && Ut[e]) ?? null;
1042
+ }
1043
+ const Bn = /* @__PURE__ */ new Set([
1038
1044
  "angleX",
1039
1045
  "angleY",
1040
1046
  "angleZ",
@@ -1432,14 +1438,14 @@ const _n = /* @__PURE__ */ new Set([
1432
1438
  }
1433
1439
  }
1434
1440
  };
1435
- function Fn(n, e) {
1441
+ function Un(n, e) {
1436
1442
  if (e <= n[0][0]) return n[0][1];
1437
1443
  const t = n.length - 1;
1438
1444
  if (e >= n[t][0]) return n[t][1];
1439
1445
  let r = 0;
1440
1446
  for (; e > n[r + 1][0]; ) r++;
1441
- const [a, s] = n[r], [h, f] = n[r + 1], v = (c) => c <= 0 || c >= t ? 0 : (n[c + 1][1] - n[c - 1][1]) / (n[c + 1][0] - n[c - 1][0]), p = h - a, m = (e - a) / p, l = v(r) * p, u = v(r + 1) * p, S = m * m, d = S * m;
1442
- return (2 * d - 3 * S + 1) * s + (d - 2 * S + m) * l + (-2 * d + 3 * S) * f + (d - S) * u;
1447
+ const [a, s] = n[r], [l, m] = n[r + 1], b = (c) => c <= 0 || c >= t ? 0 : (n[c + 1][1] - n[c - 1][1]) / (n[c + 1][0] - n[c - 1][0]), d = l - a, p = (e - a) / d, i = b(r) * d, u = b(r + 1) * d, S = p * p, y = S * p;
1448
+ return (2 * y - 3 * S + 1) * s + (y - 2 * S + p) * i + (-2 * y + 3 * S) * m + (y - S) * u;
1443
1449
  }
1444
1450
  const We = {
1445
1451
  a: { open: 0.9, form: 0, label: "あ" },
@@ -1449,21 +1455,21 @@ const We = {
1449
1455
  o: { open: 0.75, form: 0.6, label: "お" },
1450
1456
  n: { open: 0, form: null, label: "ん" }
1451
1457
  // closes with the previous shape
1452
- }, Bn = {
1458
+ }, Yn = {
1453
1459
  a: "あかさたなはまやらわがざだばぱぁ",
1454
1460
  i: "いきしちにひみりぎじぢびぴぃ",
1455
1461
  u: "うくすつぬふむゆるぐずづぶぷぅゔ",
1456
1462
  e: "えけせてねへめれげぜでべぺぇ",
1457
1463
  o: "おこそとのほもよろをごぞどぼぽぉ"
1458
- }, Gt = {};
1459
- for (const [n, e] of Object.entries(Bn)) for (const t of e) Gt[t] = n;
1460
- const Un = /* @__PURE__ */ new Set([..."まみむめもばびぶべぼぱぴぷぺぽ"]), Yn = /* @__PURE__ */ new Set([..."あいうえおぁぃぅぇぉ"]), Ut = { ゃ: "a", ゅ: "u", ょ: "o" }, In = /* @__PURE__ */ new Set([..."、。,.,.!?!?  …"]), Nn = (n) => n.replace(/[ァ-ヶ]/g, (e) => String.fromCharCode(e.charCodeAt(0) - 96));
1461
- function Xn(n, e = 0.14) {
1464
+ }, Vt = {};
1465
+ for (const [n, e] of Object.entries(Yn)) for (const t of e) Vt[t] = n;
1466
+ const In = /* @__PURE__ */ new Set([..."まみむめもばびぶべぼぱぴぷぺぽ"]), Nn = /* @__PURE__ */ new Set([..."あいうえおぁぃぅぇぉ"]), Yt = { ゃ: "a", ゅ: "u", ょ: "o" }, Xn = /* @__PURE__ */ new Set([..."、。,.,.!?!?  …"]), jn = (n) => n.replace(/[ァ-ヶ]/g, (e) => String.fromCharCode(e.charCodeAt(0) - 96));
1467
+ function Cn(n, e = 0.14) {
1462
1468
  const t = [];
1463
- for (const r of Nn(n)) {
1469
+ for (const r of jn(n)) {
1464
1470
  const a = t[t.length - 1];
1465
- if (Ut[r] && a) {
1466
- a.vowel = Ut[r];
1471
+ if (Yt[r] && a) {
1472
+ a.vowel = Yt[r];
1467
1473
  continue;
1468
1474
  }
1469
1475
  if (r === "ー" && a) {
@@ -1478,27 +1484,27 @@ function Xn(n, e = 0.14) {
1478
1484
  t.push({ vowel: "n", dur: e, onset: null });
1479
1485
  continue;
1480
1486
  }
1481
- if (In.has(r)) {
1487
+ if (Xn.has(r)) {
1482
1488
  t.push({ vowel: "n", dur: e * 2.2, onset: null });
1483
1489
  continue;
1484
1490
  }
1485
- const s = Gt[r];
1486
- s && t.push({ vowel: s, dur: e, onset: Un.has(r) ? "lips" : Yn.has(r) ? null : "consonant" });
1491
+ const s = Vt[r];
1492
+ s && t.push({ vowel: s, dur: e, onset: In.has(r) ? "lips" : Nn.has(r) ? null : "consonant" });
1487
1493
  }
1488
1494
  return t;
1489
1495
  }
1490
- function jn(n, e) {
1496
+ function zn(n, e) {
1491
1497
  let t = 0;
1492
1498
  for (const r of n) {
1493
1499
  if (e < t + r.dur) {
1494
- const a = (e - t) / r.dur, s = We[r.vowel], h = r.onset === "lips" ? 0.05 : r.onset === "consonant" ? 0.45 : 1, f = a < 0.35 ? h + (1 - h) * (a / 0.35) : 1;
1495
- return { open: s.open * f, form: s.form, vowel: r.vowel };
1500
+ const a = (e - t) / r.dur, s = We[r.vowel], l = r.onset === "lips" ? 0.05 : r.onset === "consonant" ? 0.45 : 1, m = a < 0.35 ? l + (1 - l) * (a / 0.35) : 1;
1501
+ return { open: s.open * m, form: s.form, vowel: r.vowel };
1496
1502
  }
1497
1503
  t += r.dur;
1498
1504
  }
1499
1505
  return null;
1500
1506
  }
1501
- const et = { ...xt, ...wt }, Yt = { amp: 1, stiff: 1.8 }, Cn = /^(angle|bodyAngle|armAngle|handAngle)/, zn = /* @__PURE__ */ new Set([
1507
+ const et = { ...xt, ...wt }, It = { amp: 1, stiff: 1.8 }, Pn = /^(angle|bodyAngle|armAngle|handAngle)/, $n = /* @__PURE__ */ new Set([
1502
1508
  "eyeOpen",
1503
1509
  "eyeOpenL",
1504
1510
  "eyeSmileL",
@@ -1512,14 +1518,14 @@ const et = { ...xt, ...wt }, Yt = { amp: 1, stiff: 1.8 }, Cn = /^(angle|bodyAngl
1512
1518
  const r = Math.min(1, Math.max(0, (t - n) / (e - n)));
1513
1519
  return r * r * (3 - 2 * r);
1514
1520
  };
1515
- function It(n, e) {
1516
- const t = Math.floor(n), r = n - t, a = (h) => {
1517
- const f = Math.sin((h + e * 57.3) * 127.1) * 43758.5453;
1518
- return f - Math.floor(f);
1521
+ function Nt(n, e) {
1522
+ const t = Math.floor(n), r = n - t, a = (l) => {
1523
+ const m = Math.sin((l + e * 57.3) * 127.1) * 43758.5453;
1524
+ return m - Math.floor(m);
1519
1525
  }, s = r * r * (3 - 2 * r);
1520
1526
  return (a(t) * (1 - s) + a(t + 1) * s) * 2 - 1;
1521
1527
  }
1522
- const we = (n, e) => It(n, e) * 0.7 + It(n * 2.3, e + 9) * 0.3, fe = (n, e, t) => Math.max(e, Math.min(t, n)), Vt = {
1528
+ const we = (n, e) => Nt(n, e) * 0.7 + Nt(n * 2.3, e + 9) * 0.3, me = (n, e, t) => Math.max(e, Math.min(t, n)), qt = {
1523
1529
  normal: { label: "Neutral", p: {} },
1524
1530
  smile: { label: "Smile", p: { eyeOpen: 0, eyeSmile: 1, blush: 0.35, browY: 0.2 } },
1525
1531
  shy: { label: "Blush", p: { eyeOpen: 0.78, eyeSmile: 0.5, blush: 1, browAngle: -0.5, browY: -0.1, glance: [0.7, 0.35] } },
@@ -1533,14 +1539,14 @@ const we = (n, e) => It(n, e) * 0.7 + It(n * 2.3, e + 9) * 0.3, fe = (n, e, t) =
1533
1539
  angryTalk: { label: "angry", p: { eyeOpen: 0.72, browAngle: 0.85, browY: -0.55, mouthForm: 0.2 } },
1534
1540
  surprisedTalk: { label: "surprised", p: { eyeOpen: 1.18, browY: 0.9, mouthForm: 0.9 } },
1535
1541
  relaxedTalk: { label: "relaxed", p: { eyeOpen: 0.82, eyeSmile: 0.35, blush: 0.15, browY: 0.1 } }
1536
- }, Nt = {
1542
+ }, Xt = {
1537
1543
  happy: ["happyTalk", "nod"],
1538
1544
  sad: ["sadTalk", "sigh"],
1539
1545
  angry: ["angryTalk", "no"],
1540
1546
  surprised: ["surprisedTalk", "surprise"],
1541
1547
  relaxed: ["relaxedTalk", "sway"],
1542
1548
  neutral: ["normal", null]
1543
- }, Pn = {
1549
+ }, Dn = {
1544
1550
  gazeX: [260, 0.9],
1545
1551
  gazeY: [260, 0.9],
1546
1552
  angleX: [55, 0.72],
@@ -1551,7 +1557,7 @@ const we = (n, e) => It(n, e) * 0.7 + It(n * 2.3, e + 9) * 0.3, fe = (n, e, t) =
1551
1557
  armAngle: [20, 0.85],
1552
1558
  handAngle: [30, 0.8]
1553
1559
  };
1554
- class $n {
1560
+ class Hn {
1555
1561
  /** @param {number[]} gazeCenter */
1556
1562
  constructor(e) {
1557
1563
  this.mode = "auto", this.P = Object.fromEntries(De.map((t) => [t.id, t.def])), this.manual = { ...this.P }, this.cur = { ...this.P }, this.vel = Object.fromEntries(De.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.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;
@@ -1571,15 +1577,15 @@ class $n {
1571
1577
  }
1572
1578
  /** `playMotion: false` changes only the face (a caller that picks motions itself). */
1573
1579
  setEmotion(e, { playMotion: t = !0 } = {}) {
1574
- const r = Nt[e] ?? Nt.neutral;
1580
+ const r = Xt[e] ?? Xt.neutral;
1575
1581
  this.expr = r[0], this.emotionUntil = 1 / 0, r[1] && t && this.playMotion(r[1]);
1576
1582
  }
1577
1583
  /** Mouth shapes from kana text, without audio (preview / tuning). */
1578
1584
  /** @param {string} text @param {{ speed?: number, loop?: boolean }} [options] */
1579
1585
  speakKana(e, { speed: t, loop: r = !1 } = {}) {
1580
1586
  this.lipHold = null;
1581
- const a = Xn(e, t === void 0 ? 0.14 : 1 / fe(Number(t) || 7, 4, 12));
1582
- this.kana = a.length ? { moras: a, t: 0, loop: r, duration: a.reduce((s, h) => s + h.dur, 0) } : null;
1587
+ const a = Cn(e, t === void 0 ? 0.14 : 1 / me(Number(t) || 7, 4, 12));
1588
+ this.kana = a.length ? { moras: a, t: 0, loop: r, duration: a.reduce((s, l) => s + l.dur, 0) } : null;
1583
1589
  }
1584
1590
  holdMouth(e) {
1585
1591
  this.kana = null, this.lipHold = Object.hasOwn(We, e) ? e : null;
@@ -1598,11 +1604,11 @@ class $n {
1598
1604
  // the dip before each mora even when a loud voice never gets quiet.
1599
1605
  speechMouth(e) {
1600
1606
  if (this.kana || this.lipHold) {
1601
- let l;
1602
- if (this.lipHold ? l = We[this.lipHold] : (this.kana.t += e, this.kana.loop && (this.kana.t %= this.kana.duration), l = jn(this.kana.moras, this.kana.t)), !l)
1607
+ let i;
1608
+ if (this.lipHold ? i = We[this.lipHold] : (this.kana.t += e, this.kana.loop && (this.kana.t %= this.kana.duration), i = zn(this.kana.moras, this.kana.t)), !i)
1603
1609
  return this.kana = null, this.mouth > 0.01 ? [this.mouth *= 0.6, this.vowelForm] : null;
1604
- const u = l.open > this.mouth ? 1 - Math.exp(-e * 30) : 1 - Math.exp(-e * 22);
1605
- return this.mouth += (l.open - this.mouth) * u, l.form !== null && (this.vowelForm = l.form), [this.mouth, this.vowelForm];
1610
+ const u = i.open > this.mouth ? 1 - Math.exp(-e * 30) : 1 - Math.exp(-e * 22);
1611
+ return this.mouth += (i.open - this.mouth) * u, i.form !== null && (this.vowelForm = i.form), [this.mouth, this.vowelForm];
1606
1612
  }
1607
1613
  const t = this.speaking ? this.voice : 0, r = 1 - Math.exp(-e * 5);
1608
1614
  this.voicePeak = t > this.voicePeak ? t : this.voicePeak + (t - this.voicePeak) * r, this.voiceTrough = t < this.voiceTrough ? t : this.voiceTrough + (t - this.voiceTrough) * r;
@@ -1610,11 +1616,11 @@ class $n {
1610
1616
  if (t < a * 0.6) this.syllableArmed = !0;
1611
1617
  else if (this.syllableArmed && t > a * 0.8 && t > 0.1) {
1612
1618
  this.syllableArmed = !1;
1613
- const l = Math.random();
1614
- this.vowel = l < 0.4 ? "a" : l < 0.58 ? "o" : l < 0.74 ? "e" : l < 0.88 ? "i" : "u";
1619
+ const i = Math.random();
1620
+ this.vowel = i < 0.4 ? "a" : i < 0.58 ? "o" : i < 0.74 ? "e" : i < 0.88 ? "i" : "u";
1615
1621
  }
1616
- const s = this.voicePeak - this.voiceTrough, h = s < a * 0.3 ? 1 : Math.max(0, (t - this.voiceTrough) / s), f = We[this.vowel ?? "a"], v = Math.min(1, Math.pow(t, 0.7) * 1.15) * Math.pow(h, 0.3), p = this.speaking ? Math.min(0.95, v) * (0.45 + 0.55 * f.open / 0.9) : 0, m = p > this.mouth ? 1 - Math.exp(-e * 40) : 1 - Math.exp(-e * 32);
1617
- return this.mouth += (p - this.mouth) * m, this.speaking && (this.vowelForm = f.form), this.speaking || this.mouth > 0.01 ? [this.mouth, this.vowelForm] : null;
1622
+ const s = this.voicePeak - this.voiceTrough, l = s < a * 0.3 ? 1 : Math.max(0, (t - this.voiceTrough) / s), m = We[this.vowel ?? "a"], b = Math.min(1, Math.pow(t, 0.7) * 1.15) * Math.pow(l, 0.3), d = this.speaking ? Math.min(0.95, b) * (0.45 + 0.55 * m.open / 0.9) : 0, p = d > this.mouth ? 1 - Math.exp(-e * 40) : 1 - Math.exp(-e * 32);
1623
+ return this.mouth += (d - this.mouth) * p, this.speaking && (this.vowelForm = m.form), this.speaking || this.mouth > 0.01 ? [this.mouth, this.vowelForm] : null;
1618
1624
  }
1619
1625
  // Breathing: inhale ~40% of the cycle, a slower exhale, a short pause at the bottom,
1620
1626
  // and a period that drifts between ~3.2 and 4.6 s so it never looks metronomic.
@@ -1640,78 +1646,78 @@ class $n {
1640
1646
  update(e) {
1641
1647
  this.t += e;
1642
1648
  const t = this.t, r = {};
1643
- for (const d of De) r[d.id] = d.def;
1649
+ for (const y of De) r[y.id] = y.def;
1644
1650
  if (this.mode === "manual")
1645
1651
  Object.assign(r, this.manual);
1646
1652
  else if (this.mode === "auto") {
1647
1653
  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) {
1648
- const d = Math.random();
1649
- this.gaze.x = d < 0.45 ? 0 : (Math.random() * 2 - 1) * 0.8, this.gaze.y = d < 0.45 ? 0 : (Math.random() * 2 - 1) * 0.5, this.gaze.next = t + 0.8 + Math.random() * 2.5;
1654
+ const y = Math.random();
1655
+ 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;
1650
1656
  }
1651
1657
  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) {
1652
1658
  this.nextIdle = Math.max(this.nextIdle, t + 2.5), this.nextAuto = Math.max(this.nextAuto, t + 6);
1653
- const d = this.talkGain;
1654
- this.talkNod = (this.talkNod ?? 0) + (this.voice * 7 * d - (this.talkNod ?? 0)) * Math.min(1, e * 6), r.angleY -= this.talkNod, r.angleX += we(t * 0.6, 11) * 5 * d, r.angleZ += we(t * 0.5, 12) * 4 * d;
1659
+ const y = this.talkGain;
1660
+ 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;
1655
1661
  }
1656
- !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(xt).filter((d) => d !== "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(wt)), this.nextIdle = t + 5 + Math.random() * 5));
1662
+ !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(xt).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(wt)), this.nextIdle = t + 5 + Math.random() * 5));
1657
1663
  } else if (this.mode === "mouse" && this.pointer) {
1658
- const d = (this.pointer[0] - this.faceCenter[0]) / 500, c = (this.pointer[1] - this.faceCenter[1]) / 500;
1659
- r.angleX = fe(d * 30, -30, 30), r.angleY = fe(-c * 30, -30, 30), r.angleZ = fe(-d * c * 25, -12, 12), r.bodyAngleX = fe(d * 10, -10, 10) * 0.6, r.gazeX = fe(d * 1.4, -1, 1), r.gazeY = fe(-c * 1.4, -1, 1), r.handAngle = fe(d * 4, -5, 5);
1664
+ const y = (this.pointer[0] - this.faceCenter[0]) / 500, c = (this.pointer[1] - this.faceCenter[1]) / 500;
1665
+ r.angleX = me(y * 30, -30, 30), r.angleY = me(-c * 30, -30, 30), r.angleZ = me(-y * c * 25, -12, 12), r.bodyAngleX = me(y * 10, -10, 10) * 0.6, r.gazeX = me(y * 1.4, -1, 1), r.gazeY = me(-c * 1.4, -1, 1), r.handAngle = me(y * 4, -5, 5);
1660
1666
  }
1661
1667
  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));
1662
1668
  let a = null, s = 0;
1663
1669
  if (this.play) {
1664
- const d = et[this.play.id];
1665
- if (this.play.t += e, this.play.t >= d.dur)
1670
+ const y = et[this.play.id];
1671
+ if (this.play.t += e, this.play.t >= y.dur)
1666
1672
  this.play = null, this.onMotion?.(null);
1667
1673
  else {
1668
1674
  a = {};
1669
- for (const [c, g] of Object.entries(d.tracks))
1670
- a[c] = Fn(g, this.play.t) * (d.idle && Cn.test(c) ? Yt.amp : 1);
1671
- s = Ze(0, 0.15, this.play.t) * (1 - Ze(d.dur - 0.25, d.dur, this.play.t));
1672
- for (const [c, g] of Object.entries(a))
1673
- _n.has(c) ? r[c] += g : c === "breath" ? r[c] += (g - r[c]) * s : zn.has(c) || (r[c] = Math.max(r[c], Math.max(0, g)));
1675
+ for (const [c, v] of Object.entries(y.tracks))
1676
+ a[c] = Un(v, this.play.t) * (y.idle && Pn.test(c) ? It.amp : 1);
1677
+ s = Ze(0, 0.15, this.play.t) * (1 - Ze(y.dur - 0.25, y.dur, this.play.t));
1678
+ for (const [c, v] of Object.entries(a))
1679
+ Bn.has(c) ? r[c] += v : c === "breath" ? r[c] += (v - r[c]) * s : $n.has(c) || (r[c] = Math.max(r[c], Math.max(0, v)));
1674
1680
  }
1675
1681
  }
1676
1682
  this.mode !== "manual" && (r.angleY += r.breath * 1.6);
1677
- const h = Vt[this.expr].p, f = ["eyeOpen", "eyeOpenL", "eyeSmileL", "eyeSmile", "mouthOpen", "mouthForm", "blush", "browY", "browAngle", "gx", "gy"], v = {
1678
- eyeOpen: h.eyeOpen ?? 1,
1679
- eyeOpenL: h.eyeOpenL ?? h.eyeOpen ?? 1,
1680
- eyeSmileL: h.eyeSmileL ?? h.eyeSmile ?? 0,
1681
- eyeSmile: h.eyeSmile ?? 0,
1682
- mouthOpen: h.mouthOpen ?? 0,
1683
- mouthForm: h.mouthForm ?? 0,
1684
- blush: h.blush ?? 0,
1685
- browY: h.browY ?? 0,
1686
- browAngle: h.browAngle ?? 0,
1687
- gx: h.glance?.[0] ?? 0,
1688
- gy: h.glance?.[1] ?? 0
1689
- }, p = 1 - Math.exp(-e * 9);
1690
- for (const d of f)
1691
- this.exprMix[d] === void 0 && (this.exprMix[d] = v[d]), this.exprMix[d] += (v[d] - this.exprMix[d]) * p;
1692
- const m = this.exprMix, l = {};
1693
- for (const d of De) {
1694
- const c = d.id;
1683
+ const l = qt[this.expr].p, m = ["eyeOpen", "eyeOpenL", "eyeSmileL", "eyeSmile", "mouthOpen", "mouthForm", "blush", "browY", "browAngle", "gx", "gy"], b = {
1684
+ eyeOpen: l.eyeOpen ?? 1,
1685
+ eyeOpenL: l.eyeOpenL ?? l.eyeOpen ?? 1,
1686
+ eyeSmileL: l.eyeSmileL ?? l.eyeSmile ?? 0,
1687
+ eyeSmile: l.eyeSmile ?? 0,
1688
+ mouthOpen: l.mouthOpen ?? 0,
1689
+ mouthForm: l.mouthForm ?? 0,
1690
+ blush: l.blush ?? 0,
1691
+ browY: l.browY ?? 0,
1692
+ browAngle: l.browAngle ?? 0,
1693
+ gx: l.glance?.[0] ?? 0,
1694
+ gy: l.glance?.[1] ?? 0
1695
+ }, d = 1 - Math.exp(-e * 9);
1696
+ for (const y of m)
1697
+ this.exprMix[y] === void 0 && (this.exprMix[y] = b[y]), this.exprMix[y] += (b[y] - this.exprMix[y]) * d;
1698
+ const p = this.exprMix, i = {};
1699
+ for (const y of De) {
1700
+ const c = y.id;
1695
1701
  if (this.mode === "manual" && !a) {
1696
- l[c] = r[c], this.cur[c] = r[c], this.vel[c] = 0;
1702
+ i[c] = r[c], this.cur[c] = r[c], this.vel[c] = 0;
1697
1703
  continue;
1698
1704
  }
1699
- let [g, x] = Pn[c] ?? [120, 0.95];
1700
- a && /^angle|^body/.test(c) && (et[this.play?.id ?? ""]?.idle ? (g *= Yt.stiff, x = 0.8) : /^angle/.test(c) && (g *= 4.5, x = 0.75));
1701
- const o = 2 * Math.sqrt(g) * x;
1702
- this.vel[c] += (g * (r[c] - this.cur[c]) - o * this.vel[c]) * e, this.cur[c] += this.vel[c] * e, l[c] = this.cur[c];
1705
+ let [v, x] = Dn[c] ?? [120, 0.95];
1706
+ a && /^angle|^body/.test(c) && (et[this.play?.id ?? ""]?.idle ? (v *= It.stiff, x = 0.8) : /^angle/.test(c) && (v *= 4.5, x = 0.75));
1707
+ const o = 2 * Math.sqrt(v) * x;
1708
+ this.vel[c] += (v * (r[c] - this.cur[c]) - o * this.vel[c]) * e, this.cur[c] += this.vel[c] * e, i[c] = this.cur[c];
1703
1709
  }
1704
1710
  let u = 1;
1705
- if (this.mode !== "manual" ? (u = this.blinkValue(e), l.eyeROpen = m.eyeOpen * u, l.eyeLOpen = m.eyeOpenL * u, l.eyeSmile = m.eyeSmile, l.eyeSmileL = m.eyeSmileL, l.mouthOpen = m.mouthOpen, l.mouthForm = m.mouthForm, l.blush = m.blush, l.browY = m.browY + (l.angleY > 0 ? l.angleY / 60 : 0) - (1 - u) * 0.18, l.browAngle = m.browAngle, l.gazeX = fe(l.gazeX + m.gx, -1, 1), l.gazeY = fe(l.gazeY + m.gy, -1, 1)) : l.eyeSmileL = l.eyeSmile, a) {
1706
- const d = (g, x) => {
1707
- l[g] += (x - l[g]) * s;
1708
- }, c = (g) => Math.min(1.3, Math.max(0, g));
1709
- "eyeOpen" in a && (d("eyeROpen", c(a.eyeOpen) * u), "eyeOpenL" in a || d("eyeLOpen", c(a.eyeOpen) * u)), "eyeOpenL" in a && d("eyeLOpen", c(a.eyeOpenL) * u), "eyeSmile" in a && (d("eyeSmile", a.eyeSmile), "eyeSmileL" in a || d("eyeSmileL", a.eyeSmile)), "eyeSmileL" in a && d("eyeSmileL", a.eyeSmileL);
1710
- for (const g of ["mouthOpen", "mouthForm", "blush", "browY", "browAngle"])
1711
- g in a && d(g, g === "mouthOpen" || g === "blush" ? Math.max(0, a[g]) : a[g]);
1711
+ if (this.mode !== "manual" ? (u = this.blinkValue(e), i.eyeROpen = p.eyeOpen * u, i.eyeLOpen = p.eyeOpenL * u, i.eyeSmile = p.eyeSmile, i.eyeSmileL = p.eyeSmileL, i.mouthOpen = p.mouthOpen, i.mouthForm = p.mouthForm, i.blush = p.blush, i.browY = p.browY + (i.angleY > 0 ? i.angleY / 60 : 0) - (1 - u) * 0.18, i.browAngle = p.browAngle, i.gazeX = me(i.gazeX + p.gx, -1, 1), i.gazeY = me(i.gazeY + p.gy, -1, 1)) : i.eyeSmileL = i.eyeSmile, a) {
1712
+ const y = (v, x) => {
1713
+ i[v] += (x - i[v]) * s;
1714
+ }, c = (v) => Math.min(1.3, Math.max(0, v));
1715
+ "eyeOpen" in a && (y("eyeROpen", c(a.eyeOpen) * u), "eyeOpenL" in a || y("eyeLOpen", c(a.eyeOpen) * u)), "eyeOpenL" in a && y("eyeLOpen", c(a.eyeOpenL) * u), "eyeSmile" in a && (y("eyeSmile", a.eyeSmile), "eyeSmileL" in a || y("eyeSmileL", a.eyeSmile)), "eyeSmileL" in a && y("eyeSmileL", a.eyeSmileL);
1716
+ for (const v of ["mouthOpen", "mouthForm", "blush", "browY", "browAngle"])
1717
+ v in a && y(v, v === "mouthOpen" || v === "blush" ? Math.max(0, a[v]) : a[v]);
1712
1718
  }
1713
1719
  const S = this.speechMouth(e);
1714
- 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 = fe(this.lipForm, -1, 1)), this.P = l, l;
1720
+ return S ? (this.lipOpen = S[0], this.lipForm = S[1]) : this.lipOpen !== null && !this.speaking && !this.kana && (this.lipOpen = null), this.lipOpen !== null && (i.mouthOpen = Math.max(i.mouthOpen * 0.3, this.lipOpen), i.mouthForm = me(this.lipForm, -1, 1)), this.P = i, i;
1715
1721
  }
1716
1722
  }
1717
1723
  const At = {
@@ -1723,9 +1729,9 @@ const At = {
1723
1729
  angry: "angryTalk",
1724
1730
  sad: "sadTalk",
1725
1731
  wink: "wink"
1726
- }, Dn = { sad: { pitch: -6, gy: -0.45 } }, Fe = (n, e, t) => Math.max(e, Math.min(t, n)), Be = Object.freeze({ eyeOpen: 1, eyeOpenL: 1, eyeSmile: 0, eyeSmileL: 0, blush: 0, browY: 0, browAngle: 0, mouthOpen: 0, gx: 0, gy: 0, pitch: 0 });
1727
- function Hn(n) {
1728
- const e = Vt[At[n]]?.p ?? {}, t = Dn[n] ?? {};
1732
+ }, Zn = { sad: { pitch: -6, gy: -0.45 } }, Fe = (n, e, t) => Math.max(e, Math.min(t, n)), Be = Object.freeze({ eyeOpen: 1, eyeOpenL: 1, eyeSmile: 0, eyeSmileL: 0, blush: 0, browY: 0, browAngle: 0, mouthOpen: 0, gx: 0, gy: 0, pitch: 0 });
1733
+ function Wn(n) {
1734
+ const e = qt[At[n]]?.p ?? {}, t = Zn[n] ?? {};
1729
1735
  return {
1730
1736
  eyeOpen: e.eyeOpen ?? 1,
1731
1737
  eyeOpenL: e.eyeOpenL ?? e.eyeOpen ?? 1,
@@ -1740,11 +1746,11 @@ function Hn(n) {
1740
1746
  pitch: t.pitch ?? 0
1741
1747
  };
1742
1748
  }
1743
- function Zn(n, e) {
1749
+ function Gn(n, e) {
1744
1750
  const t = { ...n };
1745
1751
  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 = Fe((n.browY ?? 0) + e.browY, -1, 1), t.browAngle = Fe((n.browAngle ?? 0) + e.browAngle, -1, 1), t.mouthOpen = Math.max(n.mouthOpen ?? 0, e.mouthOpen), t.gazeX = Fe((n.gazeX ?? 0) + e.gx, -1, 1), t.gazeY = Fe((n.gazeY ?? 0) + e.gy, -1, 1), t.angleY = Fe((n.angleY ?? 0) + e.pitch, -30, 30), t;
1746
1752
  }
1747
- class Wn {
1753
+ class Vn {
1748
1754
  /** @type {keyof typeof OVERLAY_EXPRESSIONS} */
1749
1755
  name = "neutral";
1750
1756
  mix = { ...Be };
@@ -1762,19 +1768,19 @@ class Wn {
1762
1768
  apply(e, t) {
1763
1769
  if (!this.active)
1764
1770
  return this.mix = { ...Be }, e;
1765
- const r = Hn(this.name), a = 1 - Math.exp(-Math.max(0, t) * 12);
1771
+ const r = Wn(this.name), a = 1 - Math.exp(-Math.max(0, t) * 12);
1766
1772
  for (const s of Object.keys(Be)) this.mix[s] += (r[s] - this.mix[s]) * a;
1767
- return Zn(e, this.mix);
1773
+ return Gn(e, this.mix);
1768
1774
  }
1769
1775
  }
1770
- const Xt = ["ball", "low", "crease", "lash"], tt = /* @__PURE__ */ new Map(), nt = /* @__PURE__ */ new Map();
1771
- async function jt(n) {
1776
+ const jt = ["ball", "low", "crease", "lash"], tt = /* @__PURE__ */ new Map(), nt = /* @__PURE__ */ new Map();
1777
+ async function Ct(n) {
1772
1778
  return nt.has(n) || nt.set(n, fetch(n).then((e) => {
1773
1779
  if (!e.ok) throw new Error(`failed to load ${n}`);
1774
1780
  return e.json();
1775
1781
  })), nt.get(n);
1776
1782
  }
1777
- function Ct(n) {
1783
+ function zt(n) {
1778
1784
  if (tt.has(n)) return tt.get(n);
1779
1785
  const e = new Promise((t, r) => {
1780
1786
  const a = new Image();
@@ -1782,126 +1788,126 @@ function Ct(n) {
1782
1788
  });
1783
1789
  return tt.set(n, e), e;
1784
1790
  }
1785
- function qt(n, e) {
1791
+ function Jt(n, e) {
1786
1792
  const t = document.createElement("canvas");
1787
1793
  t.width = n.width, t.height = n.height;
1788
1794
  const r = t.getContext("2d");
1789
1795
  r.drawImage(n, 0, 0);
1790
1796
  const a = r.getImageData(0, 0, t.width, t.height).data, s = new Uint8Array(t.width * t.height);
1791
- for (let h = 0; h < s.length; h++) s[h] = a[h * 4 + e];
1797
+ for (let l = 0; l < s.length; l++) s[l] = a[l * 4 + e];
1792
1798
  return s;
1793
1799
  }
1794
- const Ue = (n) => qt(n, 3);
1795
- function Gn(n, e) {
1796
- const [t, r] = n.t.pivot, a = n.dir, s = n.pts, h = (S, d, c) => {
1797
- const g = Math.min(1, Math.max(0, (c - S) / (d - S)));
1798
- return g * g * (3 - 2 * g);
1799
- }, f = Math.cos(n.phi[0]), v = Math.sin(n.phi[0]), p = Math.cos(n.phi[1]), m = Math.sin(n.phi[1]), l = e.rest, u = e.pos;
1800
- for (let S = 0; S < l.length; S += 2) {
1801
- const d = l[S] - t, c = l[S + 1] - r, g = d * a[0] + c * a[1], x = s[0][0] + d * f - c * v, o = s[0][1] + d * v + c * f, i = d - a[0] * n.L1, E = c - a[1] * n.L1, y = s[1][0] + i * p - E * m, A = s[1][1] + i * m + E * p, U = h(n.L1 * 0.55, n.L1 * 1.35, g);
1802
- u[S] = x + (y - x) * U, u[S + 1] = o + (A - o) * U;
1800
+ const Ue = (n) => Jt(n, 3);
1801
+ function qn(n, e) {
1802
+ const [t, r] = n.t.pivot, a = n.dir, s = n.pts, l = (S, y, c) => {
1803
+ const v = Math.min(1, Math.max(0, (c - S) / (y - S)));
1804
+ return v * v * (3 - 2 * v);
1805
+ }, m = Math.cos(n.phi[0]), b = Math.sin(n.phi[0]), d = Math.cos(n.phi[1]), p = Math.sin(n.phi[1]), i = e.rest, u = e.pos;
1806
+ for (let S = 0; S < i.length; S += 2) {
1807
+ const y = i[S] - t, c = i[S + 1] - r, v = y * a[0] + c * a[1], x = s[0][0] + y * m - c * b, o = s[0][1] + y * b + c * m, h = y - a[0] * n.L1, T = c - a[1] * n.L1, f = s[1][0] + h * d - T * p, w = s[1][1] + h * p + T * d, B = l(n.L1 * 0.55, n.L1 * 1.35, v);
1808
+ u[S] = x + (f - x) * B, u[S + 1] = o + (w - o) * B;
1803
1809
  }
1804
1810
  }
1805
- async function Vn(n, e) {
1811
+ async function Jn(n, e) {
1806
1812
  if (!e.assets && e.assetsBase === void 0)
1807
1813
  throw new Error("createMeshAvatar requires assets or assetsBase.");
1808
- const t = e.rig, r = pn(t), {
1814
+ const t = e.rig, r = dn(t), {
1809
1815
  IMG: a,
1810
1816
  EYES: s,
1811
- baseWeights: h,
1812
- deformBase: f,
1813
- eyePartY: v,
1814
- eyePartAlpha: p,
1815
- handWeights: m,
1816
- handFrame: l,
1817
+ baseWeights: l,
1818
+ deformBase: m,
1819
+ eyePartY: b,
1820
+ eyePartAlpha: d,
1821
+ handWeights: p,
1822
+ handFrame: i,
1817
1823
  deformHand: u,
1818
1824
  TASSELS: S
1819
- } = r, { Renderer: d, buildGrid: c } = Rn(r, t), { Physics: g } = Ln(r, t), { createSprites: x } = kn(r, t), o = (e.assetsBase ?? "").replace(/\/?$/, "/"), i = (M, R) => {
1825
+ } = r, { Renderer: y, buildGrid: c } = Ln(r, t), { Physics: v } = kn(r, t), { createSprites: x } = _n(r, t), o = (e.assetsBase ?? "").replace(/\/?$/, "/"), h = (M, R) => {
1820
1826
  if (e.assets) {
1821
1827
  if (!e.assets[M]) throw new Error(`Missing project asset: ${M}`);
1822
1828
  return e.assets[M];
1823
1829
  }
1824
1830
  return `${o}${M}${R === void 0 ? "" : `?b=${R}`}`;
1825
- }, E = await jt(i("layers.json")), y = ["base", ...t.hand ? ["hand"] : [], ...S.map((M) => M.name), ...[0, 1].flatMap((M) => Xt.map((R) => `eye${M}_${R}`)), "hairmask"], A = Object.fromEntries(await Promise.all(y.map(async (M) => [M, await Ct(i(`${M}.png`, E.build))]))), U = qt(A.hairmask, 0), F = (M, R) => U[Math.min(a.h - 1, Math.max(0, Math.round(R))) * a.w + Math.min(a.w - 1, Math.max(0, Math.round(M)))] / 255, k = new d(n, { padTop: e.padTop ?? t.view.padTop, padSide: e.padSide ?? t.view.padSide, fit: e.fit }), B = { base: [0, 0, a.w, a.h], ...E.layers }, Y = c(B.base, t.mesh.baseCell, Ue(A.base), A.base.width, t.mesh.fine), O = [];
1826
- for (let M = 0; M < Y.rest.length / 2; M++) {
1827
- const R = Y.rest[M * 2], V = Y.rest[M * 2 + 1];
1828
- O.push(h(R, V, F(R, V)));
1831
+ }, T = await Ct(h("layers.json")), f = ["base", ...t.hand ? ["hand"] : [], ...S.map((M) => M.name), ...[0, 1].flatMap((M) => jt.map((R) => `eye${M}_${R}`)), "hairmask"], w = Object.fromEntries(await Promise.all(f.map(async (M) => [M, await zt(h(`${M}.png`, T.build))]))), B = Jt(w.hairmask, 0), Y = (M, R) => B[Math.min(a.h - 1, Math.max(0, Math.round(R))) * 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 = c(_.base, t.mesh.baseCell, Ue(w.base), w.base.width, t.mesh.fine), O = [];
1832
+ for (let M = 0; M < U.rest.length / 2; M++) {
1833
+ const R = U.rest[M * 2], W = U.rest[M * 2 + 1];
1834
+ O.push(l(R, W, Y(R, W)));
1829
1835
  }
1830
- k.addLayer("base", A.base, Y, { face: !0 });
1831
- const z = [];
1836
+ I.addLayer("base", w.base, U, { face: !0 });
1837
+ const C = [];
1832
1838
  s.forEach((M, R) => {
1833
- for (const V of Xt) {
1834
- const te = `eye${R}_${V}`, ne = c(B[te], V === "ball" ? t.mesh.eyeBallCell : t.mesh.eyeCell, Ue(A[te]), A[te].width), re = [];
1835
- for (let le = 0; le < ne.rest.length / 2; le++) re.push(h(ne.rest[le * 2], ne.rest[le * 2 + 1], 0));
1836
- const ge = k.addLayer(te, A[te], ne, { eyeBall: V === "ball" ? R : void 0 });
1837
- z.push({ e: M, eye: R, part: V, mesh: ne, W: re, layer: ge });
1839
+ for (const W of jt) {
1840
+ const Q = `eye${R}_${W}`, ne = c(_[Q], W === "ball" ? t.mesh.eyeBallCell : t.mesh.eyeCell, Ue(w[Q]), w[Q].width), ee = [];
1841
+ for (let oe = 0; oe < ne.rest.length / 2; oe++) ee.push(l(ne.rest[oe * 2], ne.rest[oe * 2 + 1], 0));
1842
+ const he = I.addLayer(Q, w[Q], ne, { eyeBall: W === "ball" ? R : void 0 });
1843
+ C.push({ e: M, eye: R, part: W, mesh: ne, W: ee, layer: he });
1838
1844
  }
1839
1845
  });
1840
- let D = null;
1846
+ let $ = null;
1841
1847
  try {
1842
1848
  {
1843
- const M = await jt(i("sprites/sprites.json")), R = Object.fromEntries(await Promise.all(Object.keys(M.layers).map(async (V) => [V, await Ct(i(`sprites/${V}.png`, M.build))])));
1844
- D = x(k, M, R, c, Ue);
1849
+ const M = await Ct(h("sprites/sprites.json")), R = Object.fromEntries(await Promise.all(Object.keys(M.layers).map(async (W) => [W, await zt(h(`sprites/${W}.png`, M.build))])));
1850
+ $ = x(I, M, R, c, Ue);
1845
1851
  }
1846
1852
  } catch (M) {
1847
1853
  console.warn("eye / mouth sprites not loaded:", M);
1848
1854
  }
1849
- const X = S.map((M) => {
1850
- const R = c(B[M.name], t.mesh.tasselCell, Ue(A[M.name]), A[M.name].width);
1851
- return k.addLayer(M.name, A[M.name], R);
1852
- }), I = t.hand ? c(B.hand, t.mesh.handCell, Ue(A.hand), A.hand.width) : { rest: [], pos: [] }, C = [];
1853
- for (let M = 0; M < I.rest.length / 2; M++) C.push(m(I.rest[M * 2], I.rest[M * 2 + 1]));
1854
- t.hand && k.addLayer("hand", A.hand, I);
1855
- const $ = new g(), j = new $n(t.view.gazeCenter ?? [t.head.cx, t.head.cy]), Z = /* @__PURE__ */ new Set();
1856
- j.onMotion = (M) => {
1855
+ const V = S.map((M) => {
1856
+ const R = c(_[M.name], t.mesh.tasselCell, Ue(w[M.name]), w[M.name].width);
1857
+ return I.addLayer(M.name, w[M.name], R);
1858
+ }), X = t.hand ? c(_.hand, t.mesh.handCell, Ue(w.hand), w.hand.width) : { rest: [], pos: [] }, D = [];
1859
+ for (let M = 0; M < X.rest.length / 2; M++) D.push(p(X.rest[M * 2], X.rest[M * 2 + 1]));
1860
+ t.hand && I.addLayer("hand", w.hand, X);
1861
+ const H = new v(), L = new Hn(t.view.gazeCenter ?? [t.head.cx, t.head.cy]), Z = /* @__PURE__ */ new Set();
1862
+ L.onMotion = (M) => {
1857
1863
  for (const R of Z) R(M);
1858
1864
  };
1859
- let P = {}, W = 1, q = {};
1860
- const J = new Wn(), b = [0, 0];
1861
- function w(M) {
1862
- const R = { ...j.update(M) };
1863
- for (const [te, ne] of Object.entries(P)) R[te] = W === 1 ? ne : (R[te] ?? 0) + (ne - (R[te] ?? 0)) * W;
1864
- j.lipOpen !== null && (R.mouthOpen = j.P.mouthOpen, (!e.preserveMouthForm || P.mouthForm === void 0) && (R.mouthForm = j.P.mouthForm));
1865
- const V = J.apply(R, M);
1866
- return q = V, V;
1867
- }
1868
- function T(M) {
1869
- const R = w(M), V = $.step(R, M), te = Y.pos, ne = Y.rest;
1865
+ let P = {}, G = 1, J = {};
1866
+ const q = new Vn(), g = [0, 0];
1867
+ function A(M) {
1868
+ const R = { ...L.update(M) };
1869
+ for (const [Q, ne] of Object.entries(P)) R[Q] = G === 1 ? ne : (R[Q] ?? 0) + (ne - (R[Q] ?? 0)) * G;
1870
+ L.lipOpen !== null && (R.mouthOpen = L.P.mouthOpen, (!e.preserveMouthForm || P.mouthForm === void 0) && (R.mouthForm = L.P.mouthForm));
1871
+ const W = q.apply(R, M);
1872
+ return J = W, W;
1873
+ }
1874
+ function E(M) {
1875
+ const R = A(M), W = H.step(R, M), Q = U.pos, ne = U.rest;
1870
1876
  for (let K = 0; K < O.length; K++)
1871
- f(ne[K * 2], ne[K * 2 + 1], O[K], R, V, b), te[K * 2] = b[0], te[K * 2 + 1] = b[1];
1872
- const re = (K) => D ? 1 : K;
1873
- for (const K of z) {
1874
- const Pe = re(K.eye === 0 ? R.eyeROpen : R.eyeLOpen), Tt = K.eye === 0 ? R.eyeSmile : R.eyeSmileL ?? R.eyeSmile;
1875
- K.layer.alpha = p(K.part, Pe, Tt);
1877
+ m(ne[K * 2], ne[K * 2 + 1], O[K], R, W, g), Q[K * 2] = g[0], Q[K * 2 + 1] = g[1];
1878
+ const ee = (K) => $ ? 1 : K;
1879
+ for (const K of C) {
1880
+ const Pe = ee(K.eye === 0 ? R.eyeROpen : R.eyeLOpen), Tt = K.eye === 0 ? R.eyeSmile : R.eyeSmileL ?? R.eyeSmile;
1881
+ K.layer.alpha = d(K.part, Pe, Tt);
1876
1882
  const Ot = K.mesh.rest, Rt = K.mesh.pos;
1877
1883
  for (let Se = 0; Se < K.W.length; Se++) {
1878
- const Lt = Ot[Se * 2], fn = Ot[Se * 2 + 1];
1879
- f(Lt, v(K.e, K.part, Lt, fn, Pe, Tt), K.W[Se], R, V, b), Rt[Se * 2] = b[0], Rt[Se * 2 + 1] = b[1];
1884
+ const Lt = Ot[Se * 2], mn = Ot[Se * 2 + 1];
1885
+ m(Lt, b(K.e, K.part, Lt, mn, Pe, Tt), K.W[Se], R, W, g), Rt[Se * 2] = g[0], Rt[Se * 2 + 1] = g[1];
1880
1886
  }
1881
1887
  }
1882
- const ge = D?.update(R, V, M);
1883
- if (ge) for (const K of z) ge.eyes[K.eye] && (K.layer.alpha = 0);
1884
- const le = I.pos, ke = I.rest, un = l(R);
1885
- for (let K = 0; K < C.length; K++)
1886
- u(ke[K * 2], ke[K * 2 + 1], C[K], R, un, b), le[K * 2] = b[0], le[K * 2 + 1] = b[1];
1887
- $.chains.forEach((K, Pe) => Gn(K, X[Pe].mesh));
1888
+ const he = $?.update(R, W, M, Fn(q.name, L.mode === "manual" ? null : L.expr));
1889
+ if (he) for (const K of C) he.eyes[K.eye] && (K.layer.alpha = 0);
1890
+ const oe = X.pos, ke = X.rest, fn = i(R);
1891
+ for (let K = 0; K < D.length; K++)
1892
+ u(ke[K * 2], ke[K * 2 + 1], D[K], R, fn, g), oe[K * 2] = g[0], oe[K * 2 + 1] = g[1];
1893
+ H.chains.forEach((K, Pe) => qn(K, V[Pe].mesh));
1888
1894
  const ze = 7;
1889
- k.draw({
1895
+ I.draw({
1890
1896
  angleX: R.angleX,
1891
1897
  angleY: R.angleY,
1892
1898
  angleZ: R.angleZ,
1893
1899
  eyes: [
1894
- re(R.eyeROpen),
1900
+ ee(R.eyeROpen),
1895
1901
  R.eyeSmile,
1896
1902
  R.gazeX * ze,
1897
1903
  -R.gazeY * ze * 0.6,
1898
- re(R.eyeLOpen),
1904
+ ee(R.eyeLOpen),
1899
1905
  R.eyeSmileL ?? R.eyeSmile,
1900
1906
  R.gazeX * ze * 0.85,
1901
1907
  -R.gazeY * ze * 0.6
1902
1908
  ],
1903
1909
  // with sprites the drawn mouths replace the shader-painted one
1904
- mouthOpen: D ? 0 : R.mouthOpen,
1910
+ mouthOpen: $ ? 0 : R.mouthOpen,
1905
1911
  mouthForm: R.mouthForm,
1906
1912
  cheek: R.blush,
1907
1913
  showMesh: !1,
@@ -1909,77 +1915,77 @@ async function Vn(n, e) {
1909
1915
  joints: []
1910
1916
  });
1911
1917
  }
1912
- let _ = 0, N = performance.now(), H = !1;
1913
- const L = (M) => {
1918
+ let k = 0, N = performance.now(), z = !1;
1919
+ const F = (M) => {
1914
1920
  const R = Math.min(0.05, (M - N) / 1e3);
1915
- N = M, T(R), _ = requestAnimationFrame(L);
1921
+ N = M, E(R), k = requestAnimationFrame(F);
1916
1922
  };
1917
- return e.manual || (_ = requestAnimationFrame(L)), {
1923
+ return e.manual || (k = requestAnimationFrame(F)), {
1918
1924
  motions: [
1919
1925
  ...Object.entries(xt).map(([M, R]) => ({ id: M, label: R.label, idle: !1 })),
1920
1926
  ...Object.entries(wt).map(([M, R]) => ({ id: M, label: R.label, idle: !0 }))
1921
1927
  ],
1922
1928
  setParameters(M, R = 1) {
1923
- P = { ...M }, W = Math.min(1, Math.max(0, Number(R) || 0));
1929
+ P = { ...M }, G = Math.min(1, Math.max(0, Number(R) || 0));
1924
1930
  },
1925
1931
  getParameters() {
1926
- return { ...q };
1932
+ return { ...J };
1927
1933
  },
1928
1934
  /** 0..1 loudness of the voice being played (e.g. normalised RMS). */
1929
1935
  setVoiceLevel(M) {
1930
- j.setVoiceLevel(M);
1936
+ L.setVoiceLevel(M);
1931
1937
  },
1932
1938
  /** true while TTS audio is playing: idle motions pause and the head nods along. */
1933
1939
  setSpeaking(M) {
1934
- j.setSpeaking(M);
1940
+ L.setSpeaking(M);
1935
1941
  },
1936
1942
  /** AITuber OnAir emotion tag: happy / sad / angry / surprised / relaxed / neutral (or null). */
1937
1943
  setEmotion(M, R) {
1938
- j.setEmotion(M, R);
1944
+ L.setEmotion(M, R);
1939
1945
  },
1940
1946
  /** Live expression layered over tracking (see OVERLAY_EXPRESSIONS); 'neutral' clears it. */
1941
1947
  setExpression(M) {
1942
- J.set(M);
1948
+ q.set(M);
1943
1949
  },
1944
1950
  getExpression() {
1945
- return { name: J.name, active: J.active };
1951
+ return { name: q.name, active: q.active };
1946
1952
  },
1947
1953
  /** How much the head moves with the voice while speaking (1 = default, calmer below). */
1948
1954
  setTalkGain(M) {
1949
- j.talkGain = Math.max(0, Number(M) || 0);
1955
+ L.talkGain = Math.max(0, Number(M) || 0);
1950
1956
  },
1951
1957
  /** Play a motion or idle motion by id (see `motions`). */
1952
1958
  play(M) {
1953
- j.hasMotion(M) && j.playMotion(M);
1959
+ L.hasMotion(M) && L.playMotion(M);
1954
1960
  },
1955
1961
  /** Move the mouth through the vowels of kana text (no audio; for previews). */
1956
1962
  speakKana(M, R) {
1957
- j.speakKana(String(M ?? ""), R);
1963
+ L.speakKana(String(M ?? ""), R);
1958
1964
  },
1959
1965
  holdMouth(M) {
1960
- j.holdMouth(M);
1966
+ L.holdMouth(M);
1961
1967
  },
1962
1968
  stopLipSync() {
1963
- j.stopLipSync();
1969
+ L.stopLipSync();
1964
1970
  },
1965
1971
  getLipSyncState() {
1966
- return j.getLipSyncState();
1972
+ return L.getLipSyncState();
1967
1973
  },
1968
1974
  setAutoIdle(M) {
1969
- j.autoIdle = !!M;
1975
+ L.autoIdle = !!M;
1970
1976
  },
1971
1977
  setLighting(M) {
1972
- k.setLighting(M);
1978
+ I.setLighting(M);
1973
1979
  },
1974
1980
  getLightingStats() {
1975
- return { ...k.lightingStats };
1981
+ return { ...I.lightingStats };
1976
1982
  },
1977
1983
  setAutoMotion(M) {
1978
- j.autoMotion = !!M;
1984
+ L.autoMotion = !!M;
1979
1985
  },
1980
1986
  /** Hair / tassel sway multiplier (1 = default). */
1981
1987
  setSwayGain(M) {
1982
- $.gain = M;
1988
+ H.gain = M;
1983
1989
  },
1984
1990
  /** Called with the motion id when a motion starts and with null when it ends. */
1985
1991
  onMotion(M) {
@@ -1987,22 +1993,22 @@ async function Vn(n, e) {
1987
1993
  },
1988
1994
  /** Advance the simulation by `sec` and draw (for tests / hidden tabs). */
1989
1995
  advance(M, R = 60) {
1990
- if (!H)
1991
- if (M === 0) T(0);
1992
- else for (let V = 0; V < Math.round(M * R); V++) T(1 / R);
1996
+ if (!z)
1997
+ if (M === 0) E(0);
1998
+ else for (let W = 0; W < Math.round(M * R); W++) E(1 / R);
1993
1999
  },
1994
2000
  /** Update motion and lip sync without drawing a hidden preview. */
1995
2001
  advanceParameters(M) {
1996
- H || w(M);
2002
+ z || A(M);
1997
2003
  },
1998
2004
  destroy() {
1999
- H || (H = !0, cancelAnimationFrame(_), Z.clear(), k.destroy());
2005
+ z || (z = !0, cancelAnimationFrame(k), Z.clear(), I.destroy());
2000
2006
  }
2001
2007
  };
2002
2008
  }
2003
- const Er = Object.keys(At);
2004
- async function qn(n, e) {
2005
- return Vn(n, { ...e, rig: bt(e.rig) });
2009
+ const Tr = Object.keys(At);
2010
+ async function Kn(n, e) {
2011
+ return Jn(n, { ...e, rig: bt(e.rig) });
2006
2012
  }
2007
2013
  function Le(n) {
2008
2014
  if (!n || typeof n != "object" || Array.isArray(n))
@@ -2020,25 +2026,25 @@ function Le(n) {
2020
2026
  `));
2021
2027
  return r;
2022
2028
  }
2023
- function Jt(n) {
2029
+ function Kt(n) {
2024
2030
  return Le({ format: "mesh-avatar", version: 1, name: n });
2025
2031
  }
2026
2032
  const rt = (n) => !!n && typeof n == "object" && !Array.isArray(n), Te = (n, e) => Array.isArray(n) && n.length === e && n.every((t) => typeof t == "number" && Number.isFinite(t)), at = (n, e) => Object.hasOwn(n, e);
2027
- function Kt(n) {
2033
+ function Qt(n) {
2028
2034
  const e = [];
2029
2035
  function t(u, S = !0) {
2030
2036
  if (!at(n, u)) {
2031
2037
  S && e.push(`${u}: missing file`);
2032
2038
  return;
2033
2039
  }
2034
- const d = n[u];
2035
- if (!(d instanceof Uint8Array)) {
2040
+ const y = n[u];
2041
+ if (!(y instanceof Uint8Array)) {
2036
2042
  e.push(`${u}: JSON bytes are required`);
2037
2043
  return;
2038
2044
  }
2039
2045
  let c;
2040
2046
  try {
2041
- c = JSON.parse(new TextDecoder("utf-8", { fatal: !0 }).decode(d));
2047
+ c = JSON.parse(new TextDecoder("utf-8", { fatal: !0 }).decode(y));
2042
2048
  } catch {
2043
2049
  e.push(`${u}: invalid UTF-8 JSON`);
2044
2050
  return;
@@ -2049,82 +2055,82 @@ function Kt(n) {
2049
2055
  }
2050
2056
  return c;
2051
2057
  }
2052
- function r(u, S, d = !0) {
2053
- return u.version === 1 || d && u.version === void 0 ? !0 : (e.push(`${S}.version: unsupported version ${JSON.stringify(u.version) ?? "missing"} (expected 1)`), !1);
2058
+ function r(u, S, y = !0) {
2059
+ return u.version === 1 || y && u.version === void 0 ? !0 : (e.push(`${S}.version: unsupported version ${JSON.stringify(u.version) ?? "missing"} (expected 1)`), !1);
2054
2060
  }
2055
2061
  function a(u) {
2056
2062
  if (!at(n, u)) {
2057
2063
  e.push(`${u}: missing file`);
2058
2064
  return;
2059
2065
  }
2060
- const S = n[u], d = S instanceof Uint8Array ? S.byteLength : S?.size;
2061
- (!Number.isSafeInteger(d) || d <= 0) && e.push(`${u}: expected a non-empty file`);
2066
+ const S = n[u], y = S instanceof Uint8Array ? S.byteLength : S?.size;
2067
+ (!Number.isSafeInteger(y) || y <= 0) && e.push(`${u}: expected a non-empty file`);
2062
2068
  }
2063
- function s(u, S, d, c) {
2069
+ function s(u, S, y, c) {
2064
2070
  if (!rt(u)) {
2065
2071
  e.push(`${S}.layers: expected a layer rectangle map`);
2066
2072
  return;
2067
2073
  }
2068
- for (const [g, x] of Object.entries(u)) {
2069
- const o = `${S}.layers.${g}`;
2070
- if (!/^[A-Za-z0-9_-]+$/.test(g)) {
2074
+ for (const [v, x] of Object.entries(u)) {
2075
+ const o = `${S}.layers.${v}`;
2076
+ if (!/^[A-Za-z0-9_-]+$/.test(v)) {
2071
2077
  e.push(`${o}: expected a safe layer name (letters, digits, hyphens or underscores)`);
2072
2078
  continue;
2073
2079
  }
2074
- !Te(x, 4) || !x.every(Number.isInteger) || x[0] < 0 || x[1] < 0 || x[2] <= 0 || x[3] <= 0 ? e.push(`${o}: expected [x, y, width, height] with non-negative integer origins and positive integer dimensions`) : c && (x[0] + x[2] > c[0] || x[1] + x[3] > c[1]) && e.push(`${o}: rectangle must stay inside the image`), a(`${d}/${g}.png`);
2080
+ !Te(x, 4) || !x.every(Number.isInteger) || x[0] < 0 || x[1] < 0 || x[2] <= 0 || x[3] <= 0 ? e.push(`${o}: expected [x, y, width, height] with non-negative integer origins and positive integer dimensions`) : c && (x[0] + x[2] > c[0] || x[1] + x[3] > c[1]) && e.push(`${o}: rectangle must stay inside the image`), a(`${y}/${v}.png`);
2075
2081
  }
2076
2082
  return u;
2077
2083
  }
2078
- function h(u, S) {
2084
+ function l(u, S) {
2079
2085
  (typeof u.build != "string" || !u.build.trim()) && e.push(`${S}.build: expected a non-empty string`);
2080
2086
  }
2081
- const f = t("avatar.json", !1);
2082
- if (f)
2087
+ const m = t("avatar.json", !1);
2088
+ if (m)
2083
2089
  try {
2084
- Le(f);
2090
+ Le(m);
2085
2091
  } catch (u) {
2086
2092
  e.push(u.message);
2087
2093
  }
2088
- const v = t("rig.json");
2089
- let p;
2090
- if (v && r(v, "rig.json", !1)) {
2091
- const u = Wt(v);
2092
- e.push(...u.map((S) => `rig.json: ${S}`)), u.length || (p = v);
2094
+ const b = t("rig.json");
2095
+ let d;
2096
+ if (b && r(b, "rig.json", !1)) {
2097
+ const u = Gt(b);
2098
+ e.push(...u.map((S) => `rig.json: ${S}`)), u.length || (d = b);
2093
2099
  }
2094
2100
  a("built/base.png"), a("built/hairmask.png");
2095
- const m = t("built/layers.json");
2096
- if (m && r(m, "built/layers.json")) {
2097
- h(m, "built/layers.json");
2101
+ const p = t("built/layers.json");
2102
+ if (p && r(p, "built/layers.json")) {
2103
+ l(p, "built/layers.json");
2098
2104
  let u;
2099
- !Te(m.size, 2) || !m.size.every((d) => Number.isInteger(d) && d > 0) ? e.push("built/layers.json.size: expected [width, height] with positive integer dimensions") : (u = m.size, p && (u[0] !== p.image.width || u[1] !== p.image.height) && e.push("built/layers.json.size: must match rig.json.image"));
2100
- const S = s(m.layers, "built/layers.json", "built", u);
2101
- if (p && S) {
2102
- const d = [
2103
- ...p.eyes.flatMap((c, g) => ["ball", "low", "crease", "lash"].map((x) => `eye${g}_${x}`)),
2104
- ...p.hand ? ["hand"] : [],
2105
- ...(p.accessories ?? []).map((c) => c.name)
2105
+ !Te(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") : (u = p.size, d && (u[0] !== d.image.width || u[1] !== d.image.height) && e.push("built/layers.json.size: must match rig.json.image"));
2106
+ const S = s(p.layers, "built/layers.json", "built", u);
2107
+ if (d && S) {
2108
+ const y = [
2109
+ ...d.eyes.flatMap((c, v) => ["ball", "low", "crease", "lash"].map((x) => `eye${v}_${x}`)),
2110
+ ...d.hand ? ["hand"] : [],
2111
+ ...(d.accessories ?? []).map((c) => c.name)
2106
2112
  ];
2107
- for (const c of d) at(S, c) || e.push(`built/layers.json.layers.${c}: missing required layer`);
2113
+ for (const c of y) at(S, c) || e.push(`built/layers.json.layers.${c}: missing required layer`);
2108
2114
  }
2109
- !Array.isArray(m.eyes) || m.eyes.length !== 2 ? e.push("built/layers.json.eyes: expected two eye curves") : m.eyes.forEach((d, c) => {
2110
- const g = `built/layers.json.eyes[${c}]`;
2111
- if (!rt(d)) {
2112
- e.push(`${g}: expected an object`);
2115
+ !Array.isArray(p.eyes) || p.eyes.length !== 2 ? e.push("built/layers.json.eyes: expected two eye curves") : p.eyes.forEach((y, c) => {
2116
+ const v = `built/layers.json.eyes[${c}]`;
2117
+ if (!rt(y)) {
2118
+ e.push(`${v}: expected an object`);
2113
2119
  return;
2114
2120
  }
2115
- Te([d.x0, d.x1], 2) && d.x0 < d.x1 || e.push(`${g}: expected finite x0 < x1`);
2121
+ Te([y.x0, y.x1], 2) && y.x0 < y.x1 || e.push(`${v}: expected finite x0 < x1`);
2116
2122
  for (const o of ["top", "bot"])
2117
- Te(d[o], 24) || e.push(`${g}.${o}: expected 24 finite numbers`);
2118
- if (Te(d.top, 24) && Te(d.bot, 24) && d.top.some((o, i) => o > d.bot[i]) && e.push(`${g}.top: must not exceed bottom curve`), p) for (const o of ["x0", "x1", "top", "bot"]) {
2119
- const i = d[o], E = p.eyes[c][o];
2120
- (Array.isArray(E) ? Te(i, E.length) && i.every((A, U) => A === E[U]) : i === E) || e.push(`${g}.${o}: must match rig.json.eyes[${c}].${o}`);
2123
+ Te(y[o], 24) || e.push(`${v}.${o}: expected 24 finite numbers`);
2124
+ if (Te(y.top, 24) && Te(y.bot, 24) && y.top.some((o, h) => o > y.bot[h]) && e.push(`${v}.top: must not exceed bottom curve`), d) for (const o of ["x0", "x1", "top", "bot"]) {
2125
+ const h = y[o], T = d.eyes[c][o];
2126
+ (Array.isArray(T) ? Te(h, T.length) && h.every((w, B) => w === T[B]) : h === T) || e.push(`${v}.${o}: must match rig.json.eyes[${c}].${o}`);
2121
2127
  }
2122
2128
  });
2123
2129
  }
2124
- const l = t("built/sprites/sprites.json", !1);
2125
- return l && r(l, "built/sprites/sprites.json") && (h(l, "built/sprites/sprites.json"), s(l.layers, "built/sprites/sprites.json", "built/sprites", p ? [p.image.width, p.image.height] : void 0)), e;
2130
+ const i = t("built/sprites/sprites.json", !1);
2131
+ return i && r(i, "built/sprites/sprites.json") && (l(i, "built/sprites/sprites.json"), s(i.layers, "built/sprites/sprites.json", "built/sprites", d ? [d.image.width, d.image.height] : void 0)), e;
2126
2132
  }
2127
- var ae = Uint8Array, ce = Uint16Array, Mt = Int32Array, qe = new ae([
2133
+ var ae = Uint8Array, ue = Uint16Array, Mt = Int32Array, qe = new ae([
2128
2134
  0,
2129
2135
  0,
2130
2136
  0,
@@ -2193,55 +2199,55 @@ var ae = Uint8Array, ce = Uint16Array, Mt = Int32Array, qe = new ae([
2193
2199
  /* unused */
2194
2200
  0,
2195
2201
  0
2196
- ]), ct = new ae([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), Qt = function(n, e) {
2197
- for (var t = new ce(31), r = 0; r < 31; ++r)
2202
+ ]), ct = new ae([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), en = function(n, e) {
2203
+ for (var t = new ue(31), r = 0; r < 31; ++r)
2198
2204
  t[r] = e += 1 << n[r - 1];
2199
2205
  for (var a = new Mt(t[30]), r = 1; r < 30; ++r)
2200
2206
  for (var s = t[r]; s < t[r + 1]; ++s)
2201
2207
  a[s] = s - t[r] << 5 | r;
2202
2208
  return { b: t, r: a };
2203
- }, en = Qt(qe, 2), tn = en.b, ut = en.r;
2204
- tn[28] = 258, ut[258] = 28;
2205
- var nn = Qt(Je, 0), Jn = nn.b, zt = nn.r, ft = new ce(32768);
2206
- for (var ee = 0; ee < 32768; ++ee) {
2207
- var Me = (ee & 43690) >> 1 | (ee & 21845) << 1;
2208
- Me = (Me & 52428) >> 2 | (Me & 13107) << 2, Me = (Me & 61680) >> 4 | (Me & 3855) << 4, ft[ee] = ((Me & 65280) >> 8 | (Me & 255) << 8) >> 1;
2209
+ }, tn = en(qe, 2), nn = tn.b, ut = tn.r;
2210
+ nn[28] = 258, ut[258] = 28;
2211
+ var rn = en(Je, 0), Qn = rn.b, Pt = rn.r, ft = new ue(32768);
2212
+ for (var re = 0; re < 32768; ++re) {
2213
+ var Me = (re & 43690) >> 1 | (re & 21845) << 1;
2214
+ Me = (Me & 52428) >> 2 | (Me & 13107) << 2, Me = (Me & 61680) >> 4 | (Me & 3855) << 4, ft[re] = ((Me & 65280) >> 8 | (Me & 255) << 8) >> 1;
2209
2215
  }
2210
2216
  var be = (function(n, e, t) {
2211
- for (var r = n.length, a = 0, s = new ce(e); a < r; ++a)
2217
+ for (var r = n.length, a = 0, s = new ue(e); a < r; ++a)
2212
2218
  n[a] && ++s[n[a] - 1];
2213
- var h = new ce(e);
2219
+ var l = new ue(e);
2214
2220
  for (a = 1; a < e; ++a)
2215
- h[a] = h[a - 1] + s[a - 1] << 1;
2216
- var f;
2221
+ l[a] = l[a - 1] + s[a - 1] << 1;
2222
+ var m;
2217
2223
  if (t) {
2218
- f = new ce(1 << e);
2219
- var v = 15 - e;
2224
+ m = new ue(1 << e);
2225
+ var b = 15 - e;
2220
2226
  for (a = 0; a < r; ++a)
2221
2227
  if (n[a])
2222
- for (var p = a << 4 | n[a], m = e - n[a], l = h[n[a] - 1]++ << m, u = l | (1 << m) - 1; l <= u; ++l)
2223
- f[ft[l] >> v] = p;
2228
+ for (var d = a << 4 | n[a], p = e - n[a], i = l[n[a] - 1]++ << p, u = i | (1 << p) - 1; i <= u; ++i)
2229
+ m[ft[i] >> b] = d;
2224
2230
  } else
2225
- for (f = new ce(r), a = 0; a < r; ++a)
2226
- n[a] && (f[a] = ft[h[n[a] - 1]++] >> 15 - n[a]);
2227
- return f;
2231
+ for (m = new ue(r), a = 0; a < r; ++a)
2232
+ n[a] && (m[a] = ft[l[n[a] - 1]++] >> 15 - n[a]);
2233
+ return m;
2228
2234
  }), Ee = new ae(288);
2229
- for (var ee = 0; ee < 144; ++ee)
2230
- Ee[ee] = 8;
2231
- for (var ee = 144; ee < 256; ++ee)
2232
- Ee[ee] = 9;
2233
- for (var ee = 256; ee < 280; ++ee)
2234
- Ee[ee] = 7;
2235
- for (var ee = 280; ee < 288; ++ee)
2236
- Ee[ee] = 8;
2235
+ for (var re = 0; re < 144; ++re)
2236
+ Ee[re] = 8;
2237
+ for (var re = 144; re < 256; ++re)
2238
+ Ee[re] = 9;
2239
+ for (var re = 256; re < 280; ++re)
2240
+ Ee[re] = 7;
2241
+ for (var re = 280; re < 288; ++re)
2242
+ Ee[re] = 8;
2237
2243
  var je = new ae(32);
2238
- for (var ee = 0; ee < 32; ++ee)
2239
- je[ee] = 5;
2240
- var Kn = /* @__PURE__ */ be(Ee, 9, 0), Qn = /* @__PURE__ */ be(Ee, 9, 1), er = /* @__PURE__ */ be(je, 5, 0), tr = /* @__PURE__ */ be(je, 5, 1), ot = function(n) {
2244
+ for (var re = 0; re < 32; ++re)
2245
+ je[re] = 5;
2246
+ var er = /* @__PURE__ */ be(Ee, 9, 0), tr = /* @__PURE__ */ be(Ee, 9, 1), nr = /* @__PURE__ */ be(je, 5, 0), rr = /* @__PURE__ */ be(je, 5, 1), ot = function(n) {
2241
2247
  for (var e = n[0], t = 1; t < n.length; ++t)
2242
2248
  n[t] > e && (e = n[t]);
2243
2249
  return e;
2244
- }, me = function(n, e, t) {
2250
+ }, pe = function(n, e, t) {
2245
2251
  var r = e / 8 | 0;
2246
2252
  return (n[r] | n[r + 1] << 8) >> (e & 7) & t;
2247
2253
  }, st = function(n, e) {
@@ -2251,7 +2257,7 @@ var Kn = /* @__PURE__ */ be(Ee, 9, 0), Qn = /* @__PURE__ */ be(Ee, 9, 1), er = /
2251
2257
  return (n + 7) / 8 | 0;
2252
2258
  }, Ce = function(n, e, t) {
2253
2259
  return (e == null || e < 0) && (e = 0), (t == null || t > n.length) && (t = n.length), new ae(n.subarray(e, t));
2254
- }, nr = [
2260
+ }, ar = [
2255
2261
  "unexpected EOF",
2256
2262
  "invalid block type",
2257
2263
  "invalid length/literal",
@@ -2268,110 +2274,110 @@ var Kn = /* @__PURE__ */ be(Ee, 9, 0), Qn = /* @__PURE__ */ be(Ee, 9, 1), er = /
2268
2274
  "stream finishing",
2269
2275
  "invalid zip data"
2270
2276
  // determined by unknown compression method
2271
- ], ie = function(n, e, t) {
2272
- var r = new Error(e || nr[n]);
2273
- if (r.code = n, Error.captureStackTrace && Error.captureStackTrace(r, ie), !t)
2277
+ ], le = function(n, e, t) {
2278
+ var r = new Error(e || ar[n]);
2279
+ if (r.code = n, Error.captureStackTrace && Error.captureStackTrace(r, le), !t)
2274
2280
  throw r;
2275
2281
  return r;
2276
- }, rr = function(n, e, t, r) {
2282
+ }, or = function(n, e, t, r) {
2277
2283
  var a = n.length, s = r ? r.length : 0;
2278
2284
  if (!a || e.f && !e.l)
2279
2285
  return t || new ae(0);
2280
- var h = !t, f = h || e.i != 2, v = e.i;
2281
- h && (t = new ae(a * 3));
2282
- var p = function(L) {
2283
- var G = t.length;
2284
- if (L > G) {
2285
- var M = new ae(Math.max(G * 2, L));
2286
+ var l = !t, m = l || e.i != 2, b = e.i;
2287
+ l && (t = new ae(a * 3));
2288
+ var d = function(F) {
2289
+ var j = t.length;
2290
+ if (F > j) {
2291
+ var M = new ae(Math.max(j * 2, F));
2286
2292
  M.set(t), t = M;
2287
2293
  }
2288
- }, m = e.f || 0, l = e.p || 0, u = e.b || 0, S = e.l, d = e.d, c = e.m, g = e.n, x = a * 8;
2294
+ }, p = e.f || 0, i = e.p || 0, u = e.b || 0, S = e.l, y = e.d, c = e.m, v = e.n, x = a * 8;
2289
2295
  do {
2290
2296
  if (!S) {
2291
- m = me(n, l, 1);
2292
- var o = me(n, l + 1, 3);
2293
- if (l += 3, o)
2297
+ p = pe(n, i, 1);
2298
+ var o = pe(n, i + 1, 3);
2299
+ if (i += 3, o)
2294
2300
  if (o == 1)
2295
- S = Qn, d = tr, c = 9, g = 5;
2301
+ S = tr, y = rr, c = 9, v = 5;
2296
2302
  else if (o == 2) {
2297
- var A = me(n, l, 31) + 257, U = me(n, l + 10, 15) + 4, F = A + me(n, l + 5, 31) + 1;
2298
- l += 14;
2299
- for (var k = new ae(F), B = new ae(19), Y = 0; Y < U; ++Y)
2300
- B[ct[Y]] = me(n, l + Y * 3, 7);
2301
- l += U * 3;
2302
- for (var O = ot(B), z = (1 << O) - 1, D = be(B, O, 1), Y = 0; Y < F; ) {
2303
- var X = D[me(n, l, z)];
2304
- l += X & 15;
2305
- var i = X >> 4;
2306
- if (i < 16)
2307
- k[Y++] = i;
2303
+ var w = pe(n, i, 31) + 257, B = pe(n, i + 10, 15) + 4, Y = w + pe(n, i + 5, 31) + 1;
2304
+ i += 14;
2305
+ for (var I = new ae(Y), _ = new ae(19), U = 0; U < B; ++U)
2306
+ _[ct[U]] = pe(n, i + U * 3, 7);
2307
+ i += B * 3;
2308
+ for (var O = ot(_), C = (1 << O) - 1, $ = be(_, O, 1), U = 0; U < Y; ) {
2309
+ var V = $[pe(n, i, C)];
2310
+ i += V & 15;
2311
+ var h = V >> 4;
2312
+ if (h < 16)
2313
+ I[U++] = h;
2308
2314
  else {
2309
- var I = 0, C = 0;
2310
- for (i == 16 ? (C = 3 + me(n, l, 3), l += 2, I = k[Y - 1]) : i == 17 ? (C = 3 + me(n, l, 7), l += 3) : i == 18 && (C = 11 + me(n, l, 127), l += 7); C--; )
2311
- k[Y++] = I;
2315
+ var X = 0, D = 0;
2316
+ for (h == 16 ? (D = 3 + pe(n, i, 3), i += 2, X = I[U - 1]) : h == 17 ? (D = 3 + pe(n, i, 7), i += 3) : h == 18 && (D = 11 + pe(n, i, 127), i += 7); D--; )
2317
+ I[U++] = X;
2312
2318
  }
2313
2319
  }
2314
- var $ = k.subarray(0, A), j = k.subarray(A);
2315
- c = ot($), g = ot(j), S = be($, c, 1), d = be(j, g, 1);
2320
+ var H = I.subarray(0, w), L = I.subarray(w);
2321
+ c = ot(H), v = ot(L), S = be(H, c, 1), y = be(L, v, 1);
2316
2322
  } else
2317
- ie(1);
2323
+ le(1);
2318
2324
  else {
2319
- var i = Et(l) + 4, E = n[i - 4] | n[i - 3] << 8, y = i + E;
2320
- if (y > a) {
2321
- v && ie(0);
2325
+ var h = Et(i) + 4, T = n[h - 4] | n[h - 3] << 8, f = h + T;
2326
+ if (f > a) {
2327
+ b && le(0);
2322
2328
  break;
2323
2329
  }
2324
- f && p(u + E), t.set(n.subarray(i, y), u), e.b = u += E, e.p = l = y * 8, e.f = m;
2330
+ m && d(u + T), t.set(n.subarray(h, f), u), e.b = u += T, e.p = i = f * 8, e.f = p;
2325
2331
  continue;
2326
2332
  }
2327
- if (l > x) {
2328
- v && ie(0);
2333
+ if (i > x) {
2334
+ b && le(0);
2329
2335
  break;
2330
2336
  }
2331
2337
  }
2332
- f && p(u + 131072);
2333
- for (var Z = (1 << c) - 1, P = (1 << g) - 1, W = l; ; W = l) {
2334
- var I = S[st(n, l) & Z], q = I >> 4;
2335
- if (l += I & 15, l > x) {
2336
- v && ie(0);
2338
+ m && d(u + 131072);
2339
+ for (var Z = (1 << c) - 1, P = (1 << v) - 1, G = i; ; G = i) {
2340
+ var X = S[st(n, i) & Z], J = X >> 4;
2341
+ if (i += X & 15, i > x) {
2342
+ b && le(0);
2337
2343
  break;
2338
2344
  }
2339
- if (I || ie(2), q < 256)
2340
- t[u++] = q;
2341
- else if (q == 256) {
2342
- W = l, S = null;
2345
+ if (X || le(2), J < 256)
2346
+ t[u++] = J;
2347
+ else if (J == 256) {
2348
+ G = i, S = null;
2343
2349
  break;
2344
2350
  } else {
2345
- var J = q - 254;
2346
- if (q > 264) {
2347
- var Y = q - 257, b = qe[Y];
2348
- J = me(n, l, (1 << b) - 1) + tn[Y], l += b;
2351
+ var q = J - 254;
2352
+ if (J > 264) {
2353
+ var U = J - 257, g = qe[U];
2354
+ q = pe(n, i, (1 << g) - 1) + nn[U], i += g;
2349
2355
  }
2350
- var w = d[st(n, l) & P], T = w >> 4;
2351
- w || ie(3), l += w & 15;
2352
- var j = Jn[T];
2353
- if (T > 3) {
2354
- var b = Je[T];
2355
- j += st(n, l) & (1 << b) - 1, l += b;
2356
+ var A = y[st(n, i) & P], E = A >> 4;
2357
+ A || le(3), i += A & 15;
2358
+ var L = Qn[E];
2359
+ if (E > 3) {
2360
+ var g = Je[E];
2361
+ L += st(n, i) & (1 << g) - 1, i += g;
2356
2362
  }
2357
- if (l > x) {
2358
- v && ie(0);
2363
+ if (i > x) {
2364
+ b && le(0);
2359
2365
  break;
2360
2366
  }
2361
- f && p(u + 131072);
2362
- var _ = u + J;
2363
- if (u < j) {
2364
- var N = s - j, H = Math.min(j, _);
2365
- for (N + u < 0 && ie(3); u < H; ++u)
2367
+ m && d(u + 131072);
2368
+ var k = u + q;
2369
+ if (u < L) {
2370
+ var N = s - L, z = Math.min(L, k);
2371
+ for (N + u < 0 && le(3); u < z; ++u)
2366
2372
  t[u] = r[N + u];
2367
2373
  }
2368
- for (; u < _; ++u)
2369
- t[u] = t[u - j];
2374
+ for (; u < k; ++u)
2375
+ t[u] = t[u - L];
2370
2376
  }
2371
2377
  }
2372
- e.l = S, e.p = W, e.b = u, e.f = m, S && (m = 1, e.m = c, e.d = d, e.n = g);
2373
- } while (!m);
2374
- return u != t.length && h ? Ce(t, 0, u) : t.subarray(0, u);
2378
+ e.l = S, e.p = G, e.b = u, e.f = p, S && (p = 1, e.m = c, e.d = y, e.n = v);
2379
+ } while (!p);
2380
+ return u != t.length && l ? Ce(t, 0, u) : t.subarray(0, u);
2375
2381
  }, Ae = function(n, e, t) {
2376
2382
  t <<= e & 7;
2377
2383
  var r = e / 8 | 0;
@@ -2385,193 +2391,193 @@ var Kn = /* @__PURE__ */ be(Ee, 9, 0), Qn = /* @__PURE__ */ be(Ee, 9, 1), er = /
2385
2391
  n[r] && t.push({ s: r, f: n[r] });
2386
2392
  var a = t.length, s = t.slice();
2387
2393
  if (!a)
2388
- return { t: an, l: 0 };
2394
+ return { t: on, l: 0 };
2389
2395
  if (a == 1) {
2390
- var h = new ae(t[0].s + 1);
2391
- return h[t[0].s] = 1, { t: h, l: 1 };
2396
+ var l = new ae(t[0].s + 1);
2397
+ return l[t[0].s] = 1, { t: l, l: 1 };
2392
2398
  }
2393
- t.sort(function(y, A) {
2394
- return y.f - A.f;
2399
+ t.sort(function(f, w) {
2400
+ return f.f - w.f;
2395
2401
  }), t.push({ s: -1, f: 25001 });
2396
- var f = t[0], v = t[1], p = 0, m = 1, l = 2;
2397
- for (t[0] = { s: -1, f: f.f + v.f, l: f, r: v }; m != a - 1; )
2398
- f = t[t[p].f < t[l].f ? p++ : l++], v = t[p != m && t[p].f < t[l].f ? p++ : l++], t[m++] = { s: -1, f: f.f + v.f, l: f, r: v };
2402
+ var m = t[0], b = t[1], d = 0, p = 1, i = 2;
2403
+ for (t[0] = { s: -1, f: m.f + b.f, l: m, r: b }; p != a - 1; )
2404
+ m = t[t[d].f < t[i].f ? d++ : i++], b = t[d != p && t[d].f < t[i].f ? d++ : i++], t[p++] = { s: -1, f: m.f + b.f, l: m, r: b };
2399
2405
  for (var u = s[0].s, r = 1; r < a; ++r)
2400
2406
  s[r].s > u && (u = s[r].s);
2401
- var S = new ce(u + 1), d = mt(t[m - 1], S, 0);
2402
- if (d > e) {
2403
- var r = 0, c = 0, g = d - e, x = 1 << g;
2404
- for (s.sort(function(A, U) {
2405
- return S[U.s] - S[A.s] || A.f - U.f;
2407
+ var S = new ue(u + 1), y = mt(t[p - 1], S, 0);
2408
+ if (y > e) {
2409
+ var r = 0, c = 0, v = y - e, x = 1 << v;
2410
+ for (s.sort(function(w, B) {
2411
+ return S[B.s] - S[w.s] || w.f - B.f;
2406
2412
  }); r < a; ++r) {
2407
2413
  var o = s[r].s;
2408
2414
  if (S[o] > e)
2409
- c += x - (1 << d - S[o]), S[o] = e;
2415
+ c += x - (1 << y - S[o]), S[o] = e;
2410
2416
  else
2411
2417
  break;
2412
2418
  }
2413
- for (c >>= g; c > 0; ) {
2414
- var i = s[r].s;
2415
- S[i] < e ? c -= 1 << e - S[i]++ - 1 : ++r;
2419
+ for (c >>= v; c > 0; ) {
2420
+ var h = s[r].s;
2421
+ S[h] < e ? c -= 1 << e - S[h]++ - 1 : ++r;
2416
2422
  }
2417
2423
  for (; r >= 0 && c; --r) {
2418
- var E = s[r].s;
2419
- S[E] == e && (--S[E], ++c);
2424
+ var T = s[r].s;
2425
+ S[T] == e && (--S[T], ++c);
2420
2426
  }
2421
- d = e;
2427
+ y = e;
2422
2428
  }
2423
- return { t: new ae(S), l: d };
2429
+ return { t: new ae(S), l: y };
2424
2430
  }, mt = function(n, e, t) {
2425
2431
  return n.s == -1 ? Math.max(mt(n.l, e, t + 1), mt(n.r, e, t + 1)) : e[n.s] = t;
2426
- }, Pt = function(n) {
2432
+ }, $t = function(n) {
2427
2433
  for (var e = n.length; e && !n[--e]; )
2428
2434
  ;
2429
- for (var t = new ce(++e), r = 0, a = n[0], s = 1, h = function(v) {
2430
- t[r++] = v;
2431
- }, f = 1; f <= e; ++f)
2432
- if (n[f] == a && f != e)
2435
+ for (var t = new ue(++e), r = 0, a = n[0], s = 1, l = function(b) {
2436
+ t[r++] = b;
2437
+ }, m = 1; m <= e; ++m)
2438
+ if (n[m] == a && m != e)
2433
2439
  ++s;
2434
2440
  else {
2435
2441
  if (!a && s > 2) {
2436
2442
  for (; s > 138; s -= 138)
2437
- h(32754);
2438
- s > 2 && (h(s > 10 ? s - 11 << 5 | 28690 : s - 3 << 5 | 12305), s = 0);
2443
+ l(32754);
2444
+ s > 2 && (l(s > 10 ? s - 11 << 5 | 28690 : s - 3 << 5 | 12305), s = 0);
2439
2445
  } else if (s > 3) {
2440
- for (h(a), --s; s > 6; s -= 6)
2441
- h(8304);
2442
- s > 2 && (h(s - 3 << 5 | 8208), s = 0);
2446
+ for (l(a), --s; s > 6; s -= 6)
2447
+ l(8304);
2448
+ s > 2 && (l(s - 3 << 5 | 8208), s = 0);
2443
2449
  }
2444
2450
  for (; s--; )
2445
- h(a);
2446
- s = 1, a = n[f];
2451
+ l(a);
2452
+ s = 1, a = n[m];
2447
2453
  }
2448
2454
  return { c: t.subarray(0, r), n: e };
2449
2455
  }, Ie = function(n, e) {
2450
2456
  for (var t = 0, r = 0; r < e.length; ++r)
2451
2457
  t += n[r] * e[r];
2452
2458
  return t;
2453
- }, rn = function(n, e, t) {
2459
+ }, an = function(n, e, t) {
2454
2460
  var r = t.length, a = Et(e + 2);
2455
2461
  n[a] = r & 255, n[a + 1] = r >> 8, n[a + 2] = n[a] ^ 255, n[a + 3] = n[a + 1] ^ 255;
2456
2462
  for (var s = 0; s < r; ++s)
2457
2463
  n[a + s + 4] = t[s];
2458
2464
  return (a + 4 + r) * 8;
2459
- }, $t = function(n, e, t, r, a, s, h, f, v, p, m) {
2460
- Ae(e, m++, t), ++a[256];
2461
- for (var l = it(a, 15), u = l.t, S = l.l, d = it(s, 15), c = d.t, g = d.l, x = Pt(u), o = x.c, i = x.n, E = Pt(c), y = E.c, A = E.n, U = new ce(19), F = 0; F < o.length; ++F)
2462
- ++U[o[F] & 31];
2463
- for (var F = 0; F < y.length; ++F)
2464
- ++U[y[F] & 31];
2465
- for (var k = it(U, 7), B = k.t, Y = k.l, O = 19; O > 4 && !B[ct[O - 1]]; --O)
2465
+ }, Dt = function(n, e, t, r, a, s, l, m, b, d, p) {
2466
+ Ae(e, p++, t), ++a[256];
2467
+ for (var i = it(a, 15), u = i.t, S = i.l, y = it(s, 15), c = y.t, v = y.l, x = $t(u), o = x.c, h = x.n, T = $t(c), f = T.c, w = T.n, B = new ue(19), Y = 0; Y < o.length; ++Y)
2468
+ ++B[o[Y] & 31];
2469
+ for (var Y = 0; Y < f.length; ++Y)
2470
+ ++B[f[Y] & 31];
2471
+ for (var I = it(B, 7), _ = I.t, U = I.l, O = 19; O > 4 && !_[ct[O - 1]]; --O)
2466
2472
  ;
2467
- var z = p + 5 << 3, D = Ie(a, Ee) + Ie(s, je) + h, X = Ie(a, u) + Ie(s, c) + h + 14 + 3 * O + Ie(U, B) + 2 * U[16] + 3 * U[17] + 7 * U[18];
2468
- if (v >= 0 && z <= D && z <= X)
2469
- return rn(e, m, n.subarray(v, v + p));
2470
- var I, C, $, j;
2471
- if (Ae(e, m, 1 + (X < D)), m += 2, X < D) {
2472
- I = be(u, S, 0), C = u, $ = be(c, g, 0), j = c;
2473
- var Z = be(B, Y, 0);
2474
- Ae(e, m, i - 257), Ae(e, m + 5, A - 1), Ae(e, m + 10, O - 4), m += 14;
2475
- for (var F = 0; F < O; ++F)
2476
- Ae(e, m + 3 * F, B[ct[F]]);
2477
- m += 3 * O;
2478
- for (var P = [o, y], W = 0; W < 2; ++W)
2479
- for (var q = P[W], F = 0; F < q.length; ++F) {
2480
- var J = q[F] & 31;
2481
- Ae(e, m, Z[J]), m += B[J], J > 15 && (Ae(e, m, q[F] >> 5 & 127), m += q[F] >> 12);
2473
+ var C = d + 5 << 3, $ = Ie(a, Ee) + Ie(s, je) + l, V = Ie(a, u) + Ie(s, c) + l + 14 + 3 * O + Ie(B, _) + 2 * B[16] + 3 * B[17] + 7 * B[18];
2474
+ if (b >= 0 && C <= $ && C <= V)
2475
+ return an(e, p, n.subarray(b, b + d));
2476
+ var X, D, H, L;
2477
+ if (Ae(e, p, 1 + (V < $)), p += 2, V < $) {
2478
+ X = be(u, S, 0), D = u, H = be(c, v, 0), L = c;
2479
+ var Z = be(_, U, 0);
2480
+ Ae(e, p, h - 257), Ae(e, p + 5, w - 1), Ae(e, p + 10, O - 4), p += 14;
2481
+ for (var Y = 0; Y < O; ++Y)
2482
+ Ae(e, p + 3 * Y, _[ct[Y]]);
2483
+ p += 3 * O;
2484
+ for (var P = [o, f], G = 0; G < 2; ++G)
2485
+ for (var J = P[G], Y = 0; Y < J.length; ++Y) {
2486
+ var q = J[Y] & 31;
2487
+ Ae(e, p, Z[q]), p += _[q], q > 15 && (Ae(e, p, J[Y] >> 5 & 127), p += J[Y] >> 12);
2482
2488
  }
2483
2489
  } else
2484
- I = Kn, C = Ee, $ = er, j = je;
2485
- for (var F = 0; F < f; ++F) {
2486
- var b = r[F];
2487
- if (b > 255) {
2488
- var J = b >> 18 & 31;
2489
- Ye(e, m, I[J + 257]), m += C[J + 257], J > 7 && (Ae(e, m, b >> 23 & 31), m += qe[J]);
2490
- var w = b & 31;
2491
- Ye(e, m, $[w]), m += j[w], w > 3 && (Ye(e, m, b >> 5 & 8191), m += Je[w]);
2490
+ X = er, D = Ee, H = nr, L = je;
2491
+ for (var Y = 0; Y < m; ++Y) {
2492
+ var g = r[Y];
2493
+ if (g > 255) {
2494
+ var q = g >> 18 & 31;
2495
+ Ye(e, p, X[q + 257]), p += D[q + 257], q > 7 && (Ae(e, p, g >> 23 & 31), p += qe[q]);
2496
+ var A = g & 31;
2497
+ Ye(e, p, H[A]), p += L[A], A > 3 && (Ye(e, p, g >> 5 & 8191), p += Je[A]);
2492
2498
  } else
2493
- Ye(e, m, I[b]), m += C[b];
2499
+ Ye(e, p, X[g]), p += D[g];
2494
2500
  }
2495
- return Ye(e, m, I[256]), m + C[256];
2496
- }, ar = /* @__PURE__ */ new Mt([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]), an = /* @__PURE__ */ new ae(0), or = function(n, e, t, r, a, s) {
2497
- var h = s.z || n.length, f = new ae(r + h + 5 * (1 + Math.ceil(h / 7e3)) + a), v = f.subarray(r, f.length - a), p = s.l, m = (s.r || 0) & 7;
2501
+ return Ye(e, p, X[256]), p + D[256];
2502
+ }, sr = /* @__PURE__ */ new Mt([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]), on = /* @__PURE__ */ new ae(0), ir = function(n, e, t, r, a, s) {
2503
+ var l = s.z || n.length, m = new ae(r + l + 5 * (1 + Math.ceil(l / 7e3)) + a), b = m.subarray(r, m.length - a), d = s.l, p = (s.r || 0) & 7;
2498
2504
  if (e) {
2499
- m && (v[0] = s.r >> 3);
2500
- for (var l = ar[e - 1], u = l >> 13, S = l & 8191, d = (1 << t) - 1, c = s.p || new ce(32768), g = s.h || new ce(d + 1), x = Math.ceil(t / 3), o = 2 * x, i = function(R) {
2501
- return (n[R] ^ n[R + 1] << x ^ n[R + 2] << o) & d;
2502
- }, E = new Mt(25e3), y = new ce(288), A = new ce(32), U = 0, F = 0, k = s.i || 0, B = 0, Y = s.w || 0, O = 0; k + 2 < h; ++k) {
2503
- var z = i(k), D = k & 32767, X = g[z];
2504
- if (c[D] = X, g[z] = D, Y <= k) {
2505
- var I = h - k;
2506
- if ((U > 7e3 || B > 24576) && (I > 423 || !p)) {
2507
- m = $t(n, v, 0, E, y, A, F, B, O, k - O, m), B = U = F = 0, O = k;
2508
- for (var C = 0; C < 286; ++C)
2509
- y[C] = 0;
2510
- for (var C = 0; C < 30; ++C)
2511
- A[C] = 0;
2505
+ p && (b[0] = s.r >> 3);
2506
+ for (var i = sr[e - 1], u = i >> 13, S = i & 8191, y = (1 << t) - 1, c = s.p || new ue(32768), v = s.h || new ue(y + 1), x = Math.ceil(t / 3), o = 2 * x, h = function(R) {
2507
+ return (n[R] ^ n[R + 1] << x ^ n[R + 2] << o) & y;
2508
+ }, T = new Mt(25e3), f = new ue(288), w = new ue(32), B = 0, Y = 0, I = s.i || 0, _ = 0, U = s.w || 0, O = 0; I + 2 < l; ++I) {
2509
+ var C = h(I), $ = I & 32767, V = v[C];
2510
+ if (c[$] = V, v[C] = $, U <= I) {
2511
+ var X = l - I;
2512
+ if ((B > 7e3 || _ > 24576) && (X > 423 || !d)) {
2513
+ p = Dt(n, b, 0, T, f, w, Y, _, O, I - O, p), _ = B = Y = 0, O = I;
2514
+ for (var D = 0; D < 286; ++D)
2515
+ f[D] = 0;
2516
+ for (var D = 0; D < 30; ++D)
2517
+ w[D] = 0;
2512
2518
  }
2513
- var $ = 2, j = 0, Z = S, P = D - X & 32767;
2514
- if (I > 2 && z == i(k - P))
2515
- for (var W = Math.min(u, I) - 1, q = Math.min(32767, k), J = Math.min(258, I); P <= q && --Z && D != X; ) {
2516
- if (n[k + $] == n[k + $ - P]) {
2517
- for (var b = 0; b < J && n[k + b] == n[k + b - P]; ++b)
2519
+ var H = 2, L = 0, Z = S, P = $ - V & 32767;
2520
+ if (X > 2 && C == h(I - P))
2521
+ for (var G = Math.min(u, X) - 1, J = Math.min(32767, I), q = Math.min(258, X); P <= J && --Z && $ != V; ) {
2522
+ if (n[I + H] == n[I + H - P]) {
2523
+ for (var g = 0; g < q && n[I + g] == n[I + g - P]; ++g)
2518
2524
  ;
2519
- if (b > $) {
2520
- if ($ = b, j = P, b > W)
2525
+ if (g > H) {
2526
+ if (H = g, L = P, g > G)
2521
2527
  break;
2522
- for (var w = Math.min(P, b - 2), T = 0, C = 0; C < w; ++C) {
2523
- var _ = k - P + C & 32767, N = c[_], H = _ - N & 32767;
2524
- H > T && (T = H, X = _);
2528
+ for (var A = Math.min(P, g - 2), E = 0, D = 0; D < A; ++D) {
2529
+ var k = I - P + D & 32767, N = c[k], z = k - N & 32767;
2530
+ z > E && (E = z, V = k);
2525
2531
  }
2526
2532
  }
2527
2533
  }
2528
- D = X, X = c[D], P += D - X & 32767;
2534
+ $ = V, V = c[$], P += $ - V & 32767;
2529
2535
  }
2530
- if (j) {
2531
- E[B++] = 268435456 | ut[$] << 18 | zt[j];
2532
- var L = ut[$] & 31, G = zt[j] & 31;
2533
- F += qe[L] + Je[G], ++y[257 + L], ++A[G], Y = k + $, ++U;
2536
+ if (L) {
2537
+ T[_++] = 268435456 | ut[H] << 18 | Pt[L];
2538
+ var F = ut[H] & 31, j = Pt[L] & 31;
2539
+ Y += qe[F] + Je[j], ++f[257 + F], ++w[j], U = I + H, ++B;
2534
2540
  } else
2535
- E[B++] = n[k], ++y[n[k]];
2541
+ T[_++] = n[I], ++f[n[I]];
2536
2542
  }
2537
2543
  }
2538
- for (k = Math.max(k, Y); k < h; ++k)
2539
- E[B++] = n[k], ++y[n[k]];
2540
- m = $t(n, v, p, E, y, A, F, B, O, k - O, m), p || (s.r = m & 7 | v[m / 8 | 0] << 3, m -= 7, s.h = g, s.p = c, s.i = k, s.w = Y);
2544
+ for (I = Math.max(I, U); I < l; ++I)
2545
+ T[_++] = n[I], ++f[n[I]];
2546
+ p = Dt(n, b, d, T, f, w, Y, _, O, I - O, p), d || (s.r = p & 7 | b[p / 8 | 0] << 3, p -= 7, s.h = v, s.p = c, s.i = I, s.w = U);
2541
2547
  } else {
2542
- for (var k = s.w || 0; k < h + p; k += 65535) {
2543
- var M = k + 65535;
2544
- M >= h && (v[m / 8 | 0] = p, M = h), m = rn(v, m + 1, n.subarray(k, M));
2548
+ for (var I = s.w || 0; I < l + d; I += 65535) {
2549
+ var M = I + 65535;
2550
+ M >= l && (b[p / 8 | 0] = d, M = l), p = an(b, p + 1, n.subarray(I, M));
2545
2551
  }
2546
- s.i = h;
2552
+ s.i = l;
2547
2553
  }
2548
- return Ce(f, 0, r + Et(m) + a);
2549
- }, sr = /* @__PURE__ */ (function() {
2554
+ return Ce(m, 0, r + Et(p) + a);
2555
+ }, lr = /* @__PURE__ */ (function() {
2550
2556
  for (var n = new Int32Array(256), e = 0; e < 256; ++e) {
2551
2557
  for (var t = e, r = 9; --r; )
2552
2558
  t = (t & 1 && -306674912) ^ t >>> 1;
2553
2559
  n[e] = t;
2554
2560
  }
2555
2561
  return n;
2556
- })(), ir = function() {
2562
+ })(), hr = function() {
2557
2563
  var n = -1;
2558
2564
  return {
2559
2565
  p: function(e) {
2560
2566
  for (var t = n, r = 0; r < e.length; ++r)
2561
- t = sr[t & 255 ^ e[r]] ^ t >>> 8;
2567
+ t = lr[t & 255 ^ e[r]] ^ t >>> 8;
2562
2568
  n = t;
2563
2569
  },
2564
2570
  d: function() {
2565
2571
  return ~n;
2566
2572
  }
2567
2573
  };
2568
- }, lr = function(n, e, t, r, a) {
2574
+ }, cr = function(n, e, t, r, a) {
2569
2575
  if (!a && (a = { l: 1 }, e.dictionary)) {
2570
- var s = e.dictionary.subarray(-32768), h = new ae(s.length + n.length);
2571
- h.set(s), h.set(n, s.length), n = h, a.w = s.length;
2576
+ var s = e.dictionary.subarray(-32768), l = new ae(s.length + n.length);
2577
+ l.set(s), l.set(n, s.length), n = l, a.w = s.length;
2572
2578
  }
2573
- return or(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);
2574
- }, on = function(n, e) {
2579
+ return ir(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);
2580
+ }, sn = function(n, e) {
2575
2581
  var t = {};
2576
2582
  for (var r in n)
2577
2583
  t[r] = n[r];
@@ -2580,31 +2586,31 @@ var Kn = /* @__PURE__ */ be(Ee, 9, 0), Qn = /* @__PURE__ */ be(Ee, 9, 1), er = /
2580
2586
  return t;
2581
2587
  }, ve = function(n, e) {
2582
2588
  return n[e] | n[e + 1] << 8;
2583
- }, ue = function(n, e) {
2589
+ }, fe = function(n, e) {
2584
2590
  return (n[e] | n[e + 1] << 8 | n[e + 2] << 16 | n[e + 3] << 24) >>> 0;
2585
2591
  }, lt = function(n, e) {
2586
- return ue(n, e) + ue(n, e + 4) * 4294967296;
2587
- }, se = function(n, e, t) {
2592
+ return fe(n, e) + fe(n, e + 4) * 4294967296;
2593
+ }, ie = function(n, e, t) {
2588
2594
  for (; t; ++e)
2589
2595
  n[e] = t, t >>>= 8;
2590
2596
  };
2591
- function hr(n, e) {
2592
- return lr(n, e || {}, 0, 0);
2597
+ function ur(n, e) {
2598
+ return cr(n, e || {}, 0, 0);
2593
2599
  }
2594
- function cr(n, e) {
2595
- return rr(n, { i: 2 }, e && e.out, e && e.dictionary);
2600
+ function fr(n, e) {
2601
+ return or(n, { i: 2 }, e && e.out, e && e.dictionary);
2596
2602
  }
2597
- var sn = function(n, e, t, r) {
2603
+ var ln = function(n, e, t, r) {
2598
2604
  for (var a in n) {
2599
- var s = n[a], h = e + a, f = r;
2600
- Array.isArray(s) && (f = on(r, s[1]), s = s[0]), ArrayBuffer.isView(s) ? t[h] = [s, f] : (t[h += "/"] = [new ae(0), f], sn(s, h, t, r));
2605
+ var s = n[a], l = e + a, m = r;
2606
+ Array.isArray(s) && (m = sn(r, s[1]), s = s[0]), ArrayBuffer.isView(s) ? t[l] = [s, m] : (t[l += "/"] = [new ae(0), m], ln(s, l, t, r));
2601
2607
  }
2602
- }, Dt = typeof TextEncoder < "u" && /* @__PURE__ */ new TextEncoder(), pt = typeof TextDecoder < "u" && /* @__PURE__ */ new TextDecoder(), ur = 0;
2608
+ }, Ht = typeof TextEncoder < "u" && /* @__PURE__ */ new TextEncoder(), pt = typeof TextDecoder < "u" && /* @__PURE__ */ new TextDecoder(), mr = 0;
2603
2609
  try {
2604
- pt.decode(an, { stream: !0 }), ur = 1;
2610
+ pt.decode(on, { stream: !0 }), mr = 1;
2605
2611
  } catch {
2606
2612
  }
2607
- var fr = function(n) {
2613
+ var pr = function(n) {
2608
2614
  for (var e = "", t = 0; ; ) {
2609
2615
  var r = n[t++], a = (r > 127) + (r > 223) + (r > 239);
2610
2616
  if (t + a > n.length)
@@ -2612,23 +2618,23 @@ var fr = function(n) {
2612
2618
  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);
2613
2619
  }
2614
2620
  };
2615
- function Ht(n, e) {
2621
+ function Zt(n, e) {
2616
2622
  var t;
2617
- if (Dt)
2618
- return Dt.encode(n);
2619
- for (var r = n.length, a = new ae(n.length + (n.length >> 1)), s = 0, h = function(p) {
2620
- a[s++] = p;
2623
+ if (Ht)
2624
+ return Ht.encode(n);
2625
+ for (var r = n.length, a = new ae(n.length + (n.length >> 1)), s = 0, l = function(d) {
2626
+ a[s++] = d;
2621
2627
  }, t = 0; t < r; ++t) {
2622
2628
  if (s + 5 > a.length) {
2623
- var f = new ae(s + 8 + (r - t << 1));
2624
- f.set(a), a = f;
2629
+ var m = new ae(s + 8 + (r - t << 1));
2630
+ m.set(a), a = m;
2625
2631
  }
2626
- var v = n.charCodeAt(t);
2627
- v < 128 || e ? h(v) : v < 2048 ? (h(192 | v >> 6), h(128 | v & 63)) : v > 55295 && v < 57344 ? (v = 65536 + (v & 1047552) | n.charCodeAt(++t) & 1023, h(240 | v >> 18), h(128 | v >> 12 & 63), h(128 | v >> 6 & 63), h(128 | v & 63)) : (h(224 | v >> 12), h(128 | v >> 6 & 63), h(128 | v & 63));
2632
+ var b = n.charCodeAt(t);
2633
+ b < 128 || e ? l(b) : b < 2048 ? (l(192 | b >> 6), l(128 | b & 63)) : b > 55295 && b < 57344 ? (b = 65536 + (b & 1047552) | n.charCodeAt(++t) & 1023, l(240 | b >> 18), l(128 | b >> 12 & 63), l(128 | b >> 6 & 63), l(128 | b & 63)) : (l(224 | b >> 12), l(128 | b >> 6 & 63), l(128 | b & 63));
2628
2634
  }
2629
2635
  return Ce(a, 0, s);
2630
2636
  }
2631
- function mr(n, e) {
2637
+ function dr(n, e) {
2632
2638
  if (e) {
2633
2639
  for (var t = "", r = 0; r < n.length; r += 16384)
2634
2640
  t += String.fromCharCode.apply(null, n.subarray(r, r + 16384));
@@ -2636,97 +2642,97 @@ function mr(n, e) {
2636
2642
  } else {
2637
2643
  if (pt)
2638
2644
  return pt.decode(n);
2639
- var a = fr(n), s = a.s, t = a.r;
2640
- return t.length && ie(8), s;
2645
+ var a = pr(n), s = a.s, t = a.r;
2646
+ return t.length && le(8), s;
2641
2647
  }
2642
2648
  }
2643
- var pr = function(n, e) {
2649
+ var gr = function(n, e) {
2644
2650
  return e + 30 + ve(n, e + 26) + ve(n, e + 28);
2645
- }, dr = function(n, e, t) {
2646
- var r = ve(n, e + 28), a = ve(n, e + 30), s = mr(n.subarray(e + 46, e + 46 + r), !(ve(n, e + 8) & 2048)), h = e + 46 + r, f = gr(n, h, a, t, ue(n, e + 20), ue(n, e + 24), ue(n, e + 42)), v = f[0], p = f[1], m = f[2];
2647
- return [ve(n, e + 10), v, p, s, h + a + ve(n, e + 32), m];
2648
- }, gr = function(n, e, t, r, a, s, h) {
2649
- var f = a == 4294967295, v = s == 4294967295, p = h == 4294967295, m = e + t, l = f + v + p;
2650
- if (r && l) {
2651
- for (; e + 4 < m; e += 4 + ve(n, e + 2))
2651
+ }, yr = function(n, e, t) {
2652
+ var r = ve(n, e + 28), a = ve(n, e + 30), s = dr(n.subarray(e + 46, e + 46 + r), !(ve(n, e + 8) & 2048)), l = e + 46 + r, m = vr(n, l, a, t, fe(n, e + 20), fe(n, e + 24), fe(n, e + 42)), b = m[0], d = m[1], p = m[2];
2653
+ return [ve(n, e + 10), b, d, s, l + a + ve(n, e + 32), p];
2654
+ }, vr = function(n, e, t, r, a, s, l) {
2655
+ var m = a == 4294967295, b = s == 4294967295, d = l == 4294967295, p = e + t, i = m + b + d;
2656
+ if (r && i) {
2657
+ for (; e + 4 < p; e += 4 + ve(n, e + 2))
2652
2658
  if (ve(n, e) == 1)
2653
2659
  return [
2654
- f ? lt(n, e + 4 + 8 * v) : a,
2655
- v ? lt(n, e + 4) : s,
2656
- p ? lt(n, e + 4 + 8 * (v + f)) : h,
2660
+ m ? lt(n, e + 4 + 8 * b) : a,
2661
+ b ? lt(n, e + 4) : s,
2662
+ d ? lt(n, e + 4 + 8 * (b + m)) : l,
2657
2663
  1
2658
2664
  ];
2659
- r < 2 && ie(13);
2665
+ r < 2 && le(13);
2660
2666
  }
2661
- return [a, s, h, 0];
2667
+ return [a, s, l, 0];
2662
2668
  }, dt = function(n) {
2663
2669
  var e = 0;
2664
2670
  if (n)
2665
2671
  for (var t in n) {
2666
2672
  var r = n[t].length;
2667
- r > 65535 && ie(9), e += r + 4;
2673
+ r > 65535 && le(9), e += r + 4;
2668
2674
  }
2669
2675
  return e;
2670
- }, Zt = function(n, e, t, r, a, s, h, f) {
2671
- var v = r.length, p = t.extra, m = f && f.length, l = dt(p);
2672
- se(n, e, h != null ? 33639248 : 67324752), e += 4, h != null && (n[e++] = 20, n[e++] = t.os), n[e] = 20, e += 2, n[e++] = t.flag << 1 | (s < 0 && 8), n[e++] = a && 8, n[e++] = t.compression & 255, n[e++] = t.compression >> 8;
2676
+ }, Wt = function(n, e, t, r, a, s, l, m) {
2677
+ var b = r.length, d = t.extra, p = m && m.length, i = dt(d);
2678
+ ie(n, e, l != null ? 33639248 : 67324752), e += 4, l != null && (n[e++] = 20, n[e++] = t.os), n[e] = 20, e += 2, n[e++] = t.flag << 1 | (s < 0 && 8), n[e++] = a && 8, n[e++] = t.compression & 255, n[e++] = t.compression >> 8;
2673
2679
  var u = new Date(t.mtime == null ? Date.now() : t.mtime), S = u.getFullYear() - 1980;
2674
- if ((S < 0 || S > 119) && ie(10), se(n, e, S << 25 | u.getMonth() + 1 << 21 | u.getDate() << 16 | u.getHours() << 11 | u.getMinutes() << 5 | u.getSeconds() >> 1), e += 4, s != -1 && (se(n, e, t.crc), se(n, e + 4, s < 0 ? -s - 2 : s), se(n, e + 8, t.size)), se(n, e + 12, v), se(n, e + 14, l), e += 16, h != null && (se(n, e, m), se(n, e + 6, t.attrs), se(n, e + 10, h), e += 14), n.set(r, e), e += v, l)
2675
- for (var d in p) {
2676
- var c = p[d], g = c.length;
2677
- se(n, e, +d), se(n, e + 2, g), n.set(c, e + 4), e += 4 + g;
2678
- }
2679
- return m && (n.set(f, e), e += m), e;
2680
- }, yr = function(n, e, t, r, a) {
2681
- se(n, e, 101010256), se(n, e + 8, t), se(n, e + 10, t), se(n, e + 12, r), se(n, e + 16, a);
2680
+ if ((S < 0 || S > 119) && le(10), ie(n, e, S << 25 | u.getMonth() + 1 << 21 | u.getDate() << 16 | u.getHours() << 11 | u.getMinutes() << 5 | u.getSeconds() >> 1), e += 4, s != -1 && (ie(n, e, t.crc), ie(n, e + 4, s < 0 ? -s - 2 : s), ie(n, e + 8, t.size)), ie(n, e + 12, b), ie(n, e + 14, i), e += 16, l != null && (ie(n, e, p), ie(n, e + 6, t.attrs), ie(n, e + 10, l), e += 14), n.set(r, e), e += b, i)
2681
+ for (var y in d) {
2682
+ var c = d[y], v = c.length;
2683
+ ie(n, e, +y), ie(n, e + 2, v), n.set(c, e + 4), e += 4 + v;
2684
+ }
2685
+ return p && (n.set(m, e), e += p), e;
2686
+ }, br = function(n, e, t, r, a) {
2687
+ ie(n, e, 101010256), ie(n, e + 8, t), ie(n, e + 10, t), ie(n, e + 12, r), ie(n, e + 16, a);
2682
2688
  };
2683
- function vr(n, e) {
2689
+ function xr(n, e) {
2684
2690
  e || (e = {});
2685
2691
  var t = {}, r = [];
2686
- sn(n, "", t, e);
2692
+ ln(n, "", t, e);
2687
2693
  var a = 0, s = 0;
2688
- for (var h in t) {
2689
- var f = t[h], v = f[0], p = f[1], m = p.level == 0 ? 0 : 8, l = Ht(h), u = l.length, S = p.comment, d = S && Ht(S), c = d && d.length, g = dt(p.extra);
2690
- u > 65535 && ie(11);
2691
- var x = m ? hr(v, p) : v, o = x.length, i = ir();
2692
- i.p(v), r.push(on(p, {
2693
- size: v.length,
2694
- crc: i.d(),
2694
+ for (var l in t) {
2695
+ var m = t[l], b = m[0], d = m[1], p = d.level == 0 ? 0 : 8, i = Zt(l), u = i.length, S = d.comment, y = S && Zt(S), c = y && y.length, v = dt(d.extra);
2696
+ u > 65535 && le(11);
2697
+ var x = p ? ur(b, d) : b, o = x.length, h = hr();
2698
+ h.p(b), r.push(sn(d, {
2699
+ size: b.length,
2700
+ crc: h.d(),
2695
2701
  c: x,
2696
- f: l,
2697
- m: d,
2698
- u: u != h.length || d && S.length != c,
2702
+ f: i,
2703
+ m: y,
2704
+ u: u != l.length || y && S.length != c,
2699
2705
  o: a,
2700
- compression: m
2701
- })), a += 30 + u + g + o, s += 76 + 2 * (u + g) + (c || 0) + o;
2706
+ compression: p
2707
+ })), a += 30 + u + v + o, s += 76 + 2 * (u + v) + (c || 0) + o;
2702
2708
  }
2703
- for (var E = new ae(s + 22), y = a, A = s - a, U = 0; U < r.length; ++U) {
2704
- var l = r[U];
2705
- Zt(E, l.o, l, l.f, l.u, l.c.length);
2706
- var F = 30 + l.f.length + dt(l.extra);
2707
- E.set(l.c, l.o + F), Zt(E, a, l, l.f, l.u, l.c.length, l.o, l.m), a += 16 + F + (l.m ? l.m.length : 0);
2709
+ for (var T = new ae(s + 22), f = a, w = s - a, B = 0; B < r.length; ++B) {
2710
+ var i = r[B];
2711
+ Wt(T, i.o, i, i.f, i.u, i.c.length);
2712
+ var Y = 30 + i.f.length + dt(i.extra);
2713
+ T.set(i.c, i.o + Y), Wt(T, a, i, i.f, i.u, i.c.length, i.o, i.m), a += 16 + Y + (i.m ? i.m.length : 0);
2708
2714
  }
2709
- return yr(E, a, r.length, A, y), E;
2715
+ return br(T, a, r.length, w, f), T;
2710
2716
  }
2711
- function br(n, e) {
2712
- for (var t = {}, r = n.length - 22; ue(n, r) != 101010256; --r)
2713
- (!r || n.length - r > 65558) && ie(13);
2717
+ function wr(n, e) {
2718
+ for (var t = {}, r = n.length - 22; fe(n, r) != 101010256; --r)
2719
+ (!r || n.length - r > 65558) && le(13);
2714
2720
  var a = ve(n, r + 8);
2715
2721
  if (!a)
2716
2722
  return {};
2717
- var s = ue(n, r + 16), h = ue(n, r - 20) == 117853008;
2718
- if (h) {
2719
- var f = ue(n, r - 12);
2720
- h = ue(n, f) == 101075792, h && (a = ue(n, f + 32), s = ue(n, f + 48));
2721
- }
2722
- for (var v = e && e.filter, p = 0; p < a; ++p) {
2723
- var m = dr(n, s, h), l = m[0], u = m[1], S = m[2], d = m[3], c = m[4], g = m[5], x = pr(n, g);
2724
- s = c, (!v || v({
2725
- name: d,
2723
+ var s = fe(n, r + 16), l = fe(n, r - 20) == 117853008;
2724
+ if (l) {
2725
+ var m = fe(n, r - 12);
2726
+ l = fe(n, m) == 101075792, l && (a = fe(n, m + 32), s = fe(n, m + 48));
2727
+ }
2728
+ for (var b = e && e.filter, d = 0; d < a; ++d) {
2729
+ var p = yr(n, s, l), i = p[0], u = p[1], S = p[2], y = p[3], c = p[4], v = p[5], x = gr(n, v);
2730
+ s = c, (!b || b({
2731
+ name: y,
2726
2732
  size: u,
2727
2733
  originalSize: S,
2728
- compression: l
2729
- })) && (l ? l == 8 ? t[d] = cr(n.subarray(x, x + u), { out: new ae(S) }) : ie(14, "unknown compression type " + l) : t[d] = Ce(n, x, x + u));
2734
+ compression: i
2735
+ })) && (i ? i == 8 ? t[y] = fr(n.subarray(x, x + u), { out: new ae(S) }) : le(14, "unknown compression type " + i) : t[y] = Ce(n, x, x + u));
2730
2736
  }
2731
2737
  return t;
2732
2738
  }
@@ -2743,87 +2749,87 @@ function vt(n) {
2743
2749
  for (; s >= Math.max(0, n.length - 65557) && !(a(s) === 101010256 && s + 22 + r(s + 20) === n.length); s--)
2744
2750
  ;
2745
2751
  (s < 0 || s < n.length - 65557) && t(), (r(s + 4) || r(s + 6) || r(s + 8) !== r(s + 10)) && t();
2746
- const h = r(s + 10), f = a(s + 16), v = f + a(s + 12);
2747
- v !== s && t();
2748
- const p = [], m = /* @__PURE__ */ new Set();
2749
- let l = f;
2750
- for (let u = 0; u < h; u++) {
2751
- (l + 46 > v || a(l) !== 33639248) && t();
2752
- const S = r(l + 28), d = l + 46 + S + r(l + 30) + r(l + 32);
2753
- d > v && t();
2752
+ const l = r(s + 10), m = a(s + 16), b = m + a(s + 12);
2753
+ b !== s && t();
2754
+ const d = [], p = /* @__PURE__ */ new Set();
2755
+ let i = m;
2756
+ for (let u = 0; u < l; u++) {
2757
+ (i + 46 > b || a(i) !== 33639248) && t();
2758
+ const S = r(i + 28), y = i + 46 + S + r(i + 30) + r(i + 32);
2759
+ y > b && t();
2754
2760
  let c;
2755
2761
  try {
2756
- c = yt.decode(n.subarray(l + 46, l + 46 + S));
2762
+ c = yt.decode(n.subarray(i + 46, i + 46 + S));
2757
2763
  } catch {
2758
2764
  throw new Error("ZIP entry (invalid UTF-8 name): invalid filename");
2759
2765
  }
2760
2766
  if (St(c), u >= Ve) throw new Error(`ZIP entry ${JSON.stringify(c)}: more than ${Ve} entries`);
2761
- if (m.has(c)) throw new Error(`ZIP entry ${JSON.stringify(c)}: duplicate entry`);
2762
- m.add(c);
2763
- const g = a(l + 24), x = a(l + 20), o = a(l + 42);
2764
- if (g > gt || x > gt) throw new Error(`ZIP entry ${JSON.stringify(c)}: exceeds 64 MB`);
2765
- if (r(l + 10) !== 0) throw new Error(`ZIP entry ${JSON.stringify(c)}: expected stored compression (method 0)`);
2766
- if (r(l + 8) & 1) throw new Error(`ZIP entry ${JSON.stringify(c)}: encrypted entries are not supported`);
2767
- (x !== g || o + 30 > f || a(o) !== 67324752) && t(c);
2768
- const i = o + 30 + r(o + 26) + r(o + 28);
2769
- (i + g > f || r(o + 8) !== 0 || r(o + 6) !== r(l + 8)) && t(c);
2770
- let E;
2767
+ if (p.has(c)) throw new Error(`ZIP entry ${JSON.stringify(c)}: duplicate entry`);
2768
+ p.add(c);
2769
+ const v = a(i + 24), x = a(i + 20), o = a(i + 42);
2770
+ if (v > gt || x > gt) throw new Error(`ZIP entry ${JSON.stringify(c)}: exceeds 64 MB`);
2771
+ if (r(i + 10) !== 0) throw new Error(`ZIP entry ${JSON.stringify(c)}: expected stored compression (method 0)`);
2772
+ if (r(i + 8) & 1) throw new Error(`ZIP entry ${JSON.stringify(c)}: encrypted entries are not supported`);
2773
+ (x !== v || o + 30 > m || a(o) !== 67324752) && t(c);
2774
+ const h = o + 30 + r(o + 26) + r(o + 28);
2775
+ (h + v > m || r(o + 8) !== 0 || r(o + 6) !== r(i + 8)) && t(c);
2776
+ let T;
2771
2777
  try {
2772
- E = yt.decode(n.subarray(o + 30, o + 30 + r(o + 26)));
2778
+ T = yt.decode(n.subarray(o + 30, o + 30 + r(o + 26)));
2773
2779
  } catch {
2774
2780
  t(c);
2775
2781
  }
2776
- E !== c && t(c), p.push({ name: c, offset: o, start: i, size: g, central: l }), l = d;
2782
+ T !== c && t(c), d.push({ name: c, offset: o, start: h, size: v, central: i }), i = y;
2777
2783
  }
2778
- return l !== v && t(), { files: p };
2784
+ return i !== b && t(), { files: d };
2779
2785
  }
2780
- function xr(n) {
2781
- const e = n instanceof Uint8Array ? n : new Uint8Array(n), t = vt(e), r = br(e, { filter: (s) => s.name !== "__proto__" }), a = /* @__PURE__ */ Object.create(null);
2786
+ function Ar(n) {
2787
+ const e = n instanceof Uint8Array ? n : new Uint8Array(n), t = vt(e), r = wr(e, { filter: (s) => s.name !== "__proto__" }), a = /* @__PURE__ */ Object.create(null);
2782
2788
  for (const s of t.files) {
2783
- const h = s.name === "__proto__" ? e.slice(s.start, s.start + s.size) : r[s.name];
2784
- if (!(h instanceof Uint8Array) || h.length !== s.size) throw new Error(`ZIP entry ${JSON.stringify(s.name)}: invalid size`);
2785
- a[s.name] = h;
2789
+ const l = s.name === "__proto__" ? e.slice(s.start, s.start + s.size) : r[s.name];
2790
+ if (!(l instanceof Uint8Array) || l.length !== s.size) throw new Error(`ZIP entry ${JSON.stringify(s.name)}: invalid size`);
2791
+ a[s.name] = l;
2786
2792
  }
2787
2793
  return a;
2788
2794
  }
2789
- function Sr(n, e = {}) {
2790
- const t = Object.hasOwn(n, "avatar.json") ? n["avatar.json"] : void 0, r = t ? Le(JSON.parse(yt.decode(t))) : Jt("Avatar"), a = t && !e.manifest ? t : new TextEncoder().encode(JSON.stringify(Le({ ...r, ...e.manifest }), null, 2) + `
2795
+ function Or(n, e = {}) {
2796
+ const t = Object.hasOwn(n, "avatar.json") ? n["avatar.json"] : void 0, r = t ? Le(JSON.parse(yt.decode(t))) : Kt("Avatar"), a = t && !e.manifest ? t : new TextEncoder().encode(JSON.stringify(Le({ ...r, ...e.manifest }), null, 2) + `
2791
2797
  `), s = /* @__PURE__ */ Object.create(null);
2792
2798
  s["avatar.json"] = a;
2793
2799
  for (const [u, S] of Object.entries(n)) u !== "avatar.json" && (s[u] = S);
2794
- for (const [u, [S, d]] of Object.entries(s).entries()) {
2800
+ for (const [u, [S, y]] of Object.entries(s).entries()) {
2795
2801
  if (St(S), u >= Ve) throw new Error(`ZIP entry ${JSON.stringify(S)}: more than ${Ve} entries`);
2796
- if (d.byteLength > gt) throw new Error(`ZIP entry ${JSON.stringify(S)}: exceeds 64 MB`);
2802
+ if (y.byteLength > gt) throw new Error(`ZIP entry ${JSON.stringify(S)}: exceeds 64 MB`);
2797
2803
  }
2798
- const h = Kt(s);
2799
- if (h.length) throw new Error(h.join(`
2804
+ const l = Qt(s);
2805
+ if (l.length) throw new Error(l.join(`
2800
2806
  `));
2801
- let f = "proto0000";
2802
- for (let u = 0; Object.hasOwn(s, f); u++) f = `proto${String(u + 1).padStart(4, "0")}`;
2803
- const v = Object.fromEntries(Object.entries(s).map(([u, S]) => [u === "__proto__" ? f : u, S])), p = vr(v, { level: 0 });
2807
+ let m = "proto0000";
2808
+ for (let u = 0; Object.hasOwn(s, m); u++) m = `proto${String(u + 1).padStart(4, "0")}`;
2809
+ const b = Object.fromEntries(Object.entries(s).map(([u, S]) => [u === "__proto__" ? m : u, S])), d = xr(b, { level: 0 });
2804
2810
  if (Object.hasOwn(s, "__proto__")) {
2805
- const u = vt(p).files.find((d) => d.name === f), S = new TextEncoder().encode("__proto__");
2806
- p.set(S, u.offset + 30), p.set(S, u.central + 46);
2807
- }
2808
- const m = vt(p), l = m.files.find((u) => u.name === "avatar.json");
2809
- if (l.offset !== 0) {
2810
- const u = l.start + l.size - l.offset, S = new Uint8Array(p.length);
2811
- S.set(p.subarray(l.offset, l.offset + u)), S.set(p.subarray(0, l.offset), u), S.set(p.subarray(l.offset + u), l.offset + u);
2812
- const d = new DataView(S.buffer);
2813
- for (const c of m.files) d.setUint32(c.central + 42, c === l ? 0 : c.offset < l.offset ? c.offset + u : c.offset, !0);
2811
+ const u = vt(d).files.find((y) => y.name === m), S = new TextEncoder().encode("__proto__");
2812
+ d.set(S, u.offset + 30), d.set(S, u.central + 46);
2813
+ }
2814
+ const p = vt(d), i = p.files.find((u) => u.name === "avatar.json");
2815
+ if (i.offset !== 0) {
2816
+ const u = i.start + i.size - i.offset, S = new Uint8Array(d.length);
2817
+ S.set(d.subarray(i.offset, i.offset + u)), S.set(d.subarray(0, i.offset), u), S.set(d.subarray(i.offset + u), i.offset + u);
2818
+ const y = new DataView(S.buffer);
2819
+ for (const c of p.files) y.setUint32(c.central + 42, c === i ? 0 : c.offset < i.offset ? c.offset + u : c.offset, !0);
2814
2820
  return S;
2815
2821
  }
2816
- return p;
2822
+ return d;
2817
2823
  }
2818
- const wr = (n) => JSON.parse(new TextDecoder("utf-8", { fatal: !0 }).decode(n));
2824
+ const Mr = (n) => JSON.parse(new TextDecoder("utf-8", { fatal: !0 }).decode(n));
2819
2825
  function Xe(n, e) {
2820
2826
  try {
2821
- return wr(n);
2827
+ return Mr(n);
2822
2828
  } catch {
2823
2829
  throw new Error(`${e}: invalid UTF-8 JSON`);
2824
2830
  }
2825
2831
  }
2826
- function ln(n, e) {
2832
+ function hn(n, e) {
2827
2833
  return [
2828
2834
  "layers.json",
2829
2835
  "base.png",
@@ -2832,36 +2838,36 @@ function ln(n, e) {
2832
2838
  ...e ? ["sprites/sprites.json", ...Object.keys(e.layers ?? {}).map((t) => `sprites/${t}.png`)] : []
2833
2839
  ];
2834
2840
  }
2835
- function hn(n) {
2836
- const e = Kt(n);
2841
+ function cn(n) {
2842
+ const e = Qt(n);
2837
2843
  if (e.length) throw new Error(e.join(`
2838
2844
  `));
2839
2845
  }
2840
- function cn(n) {
2846
+ function un(n) {
2841
2847
  return !!n && typeof n == "object" && "manifest" in n && "rig" in n && "assets" in n && "release" in n;
2842
2848
  }
2843
2849
  function ht(n) {
2844
- const e = xr(n);
2850
+ const e = Ar(n);
2845
2851
  if (!Object.hasOwn(e, "avatar.json")) throw new Error("avatar.json: missing file in .mavatar archive");
2846
- hn(e);
2847
- const t = Le(Xe(e["avatar.json"], "avatar.json")), r = bt(Xe(e["rig.json"], "rig.json")), a = ln(
2852
+ cn(e);
2853
+ const t = Le(Xe(e["avatar.json"], "avatar.json")), r = bt(Xe(e["rig.json"], "rig.json")), a = hn(
2848
2854
  Xe(e["built/layers.json"], "built/layers.json"),
2849
2855
  e["built/sprites/sprites.json"] ? Xe(e["built/sprites/sprites.json"], "built/sprites/sprites.json") : void 0
2850
- ), s = {}, h = [], f = () => {
2851
- h.splice(0).forEach((v) => URL.revokeObjectURL(v));
2856
+ ), s = {}, l = [], m = () => {
2857
+ l.splice(0).forEach((b) => URL.revokeObjectURL(b));
2852
2858
  };
2853
2859
  try {
2854
- for (const v of new Set(a)) {
2855
- const p = URL.createObjectURL(new Blob([new Uint8Array(e[`built/${v}`])], { type: v.endsWith(".json") ? "application/json" : "image/png" }));
2856
- h.push(p), s[v] = p;
2860
+ for (const b of new Set(a)) {
2861
+ const d = URL.createObjectURL(new Blob([new Uint8Array(e[`built/${b}`])], { type: b.endsWith(".json") ? "application/json" : "image/png" }));
2862
+ l.push(d), s[b] = d;
2857
2863
  }
2858
- } catch (v) {
2859
- throw f(), v;
2864
+ } catch (b) {
2865
+ throw m(), b;
2860
2866
  }
2861
- return { manifest: t, rig: r, assets: s, release: f };
2867
+ return { manifest: t, rig: r, assets: s, release: m };
2862
2868
  }
2863
- async function Ar(n, e = {}) {
2864
- if (cn(n)) return n;
2869
+ async function Er(n, e = {}) {
2870
+ if (un(n)) return n;
2865
2871
  if (n instanceof Blob) return ht(await n.arrayBuffer());
2866
2872
  if (n instanceof ArrayBuffer || n instanceof Uint8Array) return ht(n);
2867
2873
  const t = new URL(n, typeof location > "u" ? void 0 : location.href);
@@ -2872,47 +2878,47 @@ async function Ar(n, e = {}) {
2872
2878
  }
2873
2879
  t.pathname.endsWith("/") || (t.pathname += "/");
2874
2880
  const r = (c) => {
2875
- const g = new URL(t);
2876
- return g.pathname += c.split("/").map(encodeURIComponent).join("/"), e.version !== void 0 && g.searchParams.set("v", String(e.version)), g.href;
2881
+ const v = new URL(t);
2882
+ return v.pathname += c.split("/").map(encodeURIComponent).join("/"), e.version !== void 0 && v.searchParams.set("v", String(e.version)), v.href;
2877
2883
  }, a = {};
2878
- async function s(c, g = !1) {
2884
+ async function s(c, v = !1) {
2879
2885
  const x = await fetch(r(c));
2880
- if (g && (x.status === 404 || x.ok && x.headers.get("content-type")?.includes("text/html"))) return;
2886
+ if (v && (x.status === 404 || x.ok && x.headers.get("content-type")?.includes("text/html"))) return;
2881
2887
  if (!x.ok) throw new Error(`${c}: could not load (${x.status})`);
2882
2888
  const o = new Uint8Array(await x.arrayBuffer());
2883
2889
  return a[c] = o, Xe(o, c);
2884
2890
  }
2885
- const h = e.rigFile ?? "rig.json";
2886
- St(h);
2887
- const [f, v, p, m] = await Promise.all([
2888
- s(h),
2891
+ const l = e.rigFile ?? "rig.json";
2892
+ St(l);
2893
+ const [m, b, d, p] = await Promise.all([
2894
+ s(l),
2889
2895
  s("built/layers.json"),
2890
2896
  s("avatar.json", !0),
2891
2897
  s("built/sprites/sprites.json", !0)
2892
2898
  ]);
2893
- Array.isArray(f?.eyes) && Array.isArray(v?.eyes) && (f.eyes = f.eyes.map((c, g) => {
2899
+ Array.isArray(m?.eyes) && Array.isArray(b?.eyes) && (m.eyes = m.eyes.map((c, v) => {
2894
2900
  if (!c || typeof c != "object") return c;
2895
2901
  const x = { ...c };
2896
- for (const o of ["x0", "x1", "top", "bot"]) x[o] === void 0 && (x[o] = v.eyes[g]?.[o]);
2902
+ for (const o of ["x0", "x1", "top", "bot"]) x[o] === void 0 && (x[o] = b.eyes[v]?.[o]);
2897
2903
  return x;
2898
- })), a["rig.json"] = new TextEncoder().encode(JSON.stringify(f));
2899
- const l = ln(v, m);
2900
- for (const c of l) c.endsWith(".png") && (a[`built/${c}`] = { size: 1 });
2901
- hn(a);
2902
- const u = bt(f), S = Object.fromEntries(l.map((c) => [c, r(`built/${c}`)])), d = decodeURIComponent(t.pathname.split("/").filter(Boolean).at(-1) ?? "Avatar");
2903
- return { manifest: p === void 0 ? Jt(d) : Le(p), rig: u, assets: S, release() {
2904
+ })), a["rig.json"] = new TextEncoder().encode(JSON.stringify(m));
2905
+ const i = hn(b, p);
2906
+ for (const c of i) c.endsWith(".png") && (a[`built/${c}`] = { size: 1 });
2907
+ cn(a);
2908
+ const u = bt(m), S = Object.fromEntries(i.map((c) => [c, r(`built/${c}`)])), y = decodeURIComponent(t.pathname.split("/").filter(Boolean).at(-1) ?? "Avatar");
2909
+ return { manifest: d === void 0 ? Kt(y) : Le(d), rig: u, assets: S, release() {
2904
2910
  } };
2905
2911
  }
2906
- async function Tr(n, e, t = {}) {
2907
- const r = !cn(e), a = await Ar(e);
2912
+ async function Rr(n, e, t = {}) {
2913
+ const r = !un(e), a = await Er(e);
2908
2914
  try {
2909
- const s = await qn(n, { ...t, rig: a.rig, assets: a.assets }), h = s.destroy.bind(s);
2910
- let f = !1;
2915
+ const s = await Kn(n, { ...t, rig: a.rig, assets: a.assets }), l = s.destroy.bind(s);
2916
+ let m = !1;
2911
2917
  return Object.assign(s, { package: a, destroy() {
2912
- if (!f) {
2913
- f = !0;
2918
+ if (!m) {
2919
+ m = !0;
2914
2920
  try {
2915
- h();
2921
+ l();
2916
2922
  } finally {
2917
2923
  r && a.release();
2918
2924
  }
@@ -2924,17 +2930,17 @@ async function Tr(n, e, t = {}) {
2924
2930
  }
2925
2931
  export {
2926
2932
  Re as DEFAULT_LIGHTING,
2927
- Er as LIVE_EXPRESSIONS,
2933
+ Tr as LIVE_EXPRESSIONS,
2928
2934
  De as PARAMS,
2929
- Mr as colorHex,
2930
- qn as createMeshAvatar,
2931
- Tr as loadMeshAvatar,
2932
- Ar as openAvatar,
2933
- Sr as packAvatar,
2934
- wn as parseLighting,
2935
+ Sr as colorHex,
2936
+ Kn as createMeshAvatar,
2937
+ Rr as loadMeshAvatar,
2938
+ Er as openAvatar,
2939
+ Or as packAvatar,
2940
+ An as parseLighting,
2935
2941
  Le as parseManifest,
2936
2942
  bt as parseRig,
2937
- xr as unpackAvatar,
2938
- Kt as validateAvatarFiles,
2939
- Wt as validateRig
2943
+ Ar as unpackAvatar,
2944
+ Qt as validateAvatarFiles,
2945
+ Gt as validateRig
2940
2946
  };