textmode.js 0.2.0-beta.1 → 0.2.0-beta.2
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/textmode.esm.js +622 -636
- package/dist/textmode.esm.min.js +1001 -1015
- package/dist/textmode.umd.js +12 -12
- package/dist/textmode.umd.min.js +18 -18
- package/dist/types/rendering/webgl/RenderState.d.ts +4 -9
- package/dist/types/textmode/mixins/RenderingMixin.d.ts +2 -2
- package/package.json +1 -1
package/dist/textmode.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var n = (E, A, t) =>
|
|
1
|
+
var J = Object.defineProperty;
|
|
2
|
+
var X = (E, A, t) => A in E ? J(E, A, { enumerable: !0, configurable: !0, writable: !0, value: t }) : E[A] = t;
|
|
3
|
+
var n = (E, A, t) => X(E, typeof A != "symbol" ? A + "" : A, t);
|
|
4
4
|
class f extends Error {
|
|
5
5
|
constructor(A, t = {}) {
|
|
6
6
|
super(f.A(A, t)), this.name = "TextmodeError";
|
|
@@ -33,13 +33,13 @@ class f extends Error {
|
|
|
33
33
|
return A + "";
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
-
var
|
|
37
|
-
const
|
|
36
|
+
var j = ((E) => (E[E.SILENT = 0] = "SILENT", E[E.WARNING = 1] = "WARNING", E[E.ERROR = 2] = "ERROR", E[E.THROW = 3] = "THROW", E))(j || {});
|
|
37
|
+
const x = class x {
|
|
38
38
|
constructor() {
|
|
39
39
|
n(this, "h", { globalLevel: 3 });
|
|
40
40
|
}
|
|
41
41
|
static C() {
|
|
42
|
-
return
|
|
42
|
+
return x.o || (x.o = new x()), x.o;
|
|
43
43
|
}
|
|
44
44
|
D(A, t) {
|
|
45
45
|
const e = "%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.", B = "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";
|
|
@@ -61,16 +61,16 @@ const y = class y {
|
|
|
61
61
|
this.h.globalLevel = A;
|
|
62
62
|
}
|
|
63
63
|
};
|
|
64
|
-
n(
|
|
65
|
-
let S =
|
|
66
|
-
const T = S.C(),
|
|
67
|
-
function
|
|
68
|
-
|
|
64
|
+
n(x, "o", null);
|
|
65
|
+
let S = x;
|
|
66
|
+
const T = S.C(), H = /* @__PURE__ */ new WeakMap();
|
|
67
|
+
function M(E, A) {
|
|
68
|
+
H.set(E, A);
|
|
69
69
|
}
|
|
70
70
|
function G(E) {
|
|
71
|
-
return
|
|
71
|
+
return H.get(E);
|
|
72
72
|
}
|
|
73
|
-
class
|
|
73
|
+
class K {
|
|
74
74
|
constructor(A, t, e = t, B = 1, r = {}) {
|
|
75
75
|
n(this, "I");
|
|
76
76
|
n(this, "u");
|
|
@@ -139,12 +139,12 @@ class H {
|
|
|
139
139
|
const A = this.m;
|
|
140
140
|
this.$ = { framebuffer: A.getParameter(A.FRAMEBUFFER_BINDING), viewport: A.getParameter(A.VIEWPORT) }, A.bindFramebuffer(A.FRAMEBUFFER, this._), this.M = Array(this.G).fill(null);
|
|
141
141
|
for (let t = 0; t < this.G; t++) A.clearBufferfv(A.COLOR, t, new Float32Array([0, 0, 0, 0]));
|
|
142
|
-
A.viewport(0, 0, this.I, this.u),
|
|
142
|
+
A.viewport(0, 0, this.I, this.u), M(A, [0, 0, this.I, this.u]);
|
|
143
143
|
}
|
|
144
144
|
k() {
|
|
145
145
|
if (!this.$) return;
|
|
146
146
|
const A = this.m;
|
|
147
|
-
A.bindFramebuffer(A.FRAMEBUFFER, this.$.framebuffer), A.viewport(...this.$.viewport),
|
|
147
|
+
A.bindFramebuffer(A.FRAMEBUFFER, this.$.framebuffer), A.viewport(...this.$.viewport), M(A, this.$.viewport), this.$ = null;
|
|
148
148
|
}
|
|
149
149
|
W() {
|
|
150
150
|
const A = this.m;
|
|
@@ -245,7 +245,7 @@ class Z {
|
|
|
245
245
|
else if (t instanceof WebGLTexture) {
|
|
246
246
|
const B = this.BA();
|
|
247
247
|
this.m.uniform1i(e, B), this.m.activeTexture(this.m.TEXTURE0 + B), this.m.bindTexture(this.m.TEXTURE_2D, t);
|
|
248
|
-
} else if (t instanceof
|
|
248
|
+
} else if (t instanceof K) {
|
|
249
249
|
const B = this.BA();
|
|
250
250
|
this.m.uniform1i(e, B), this.m.activeTexture(this.m.TEXTURE0 + B), this.m.bindTexture(this.m.TEXTURE_2D, t.texture);
|
|
251
251
|
} else if (typeof t == "object" && "texture" in t) {
|
|
@@ -273,89 +273,72 @@ class q {
|
|
|
273
273
|
n(this, "gA", !1);
|
|
274
274
|
n(this, "oA", !1);
|
|
275
275
|
n(this, "aA", !1);
|
|
276
|
-
n(this, "
|
|
277
|
-
n(this, "
|
|
278
|
-
|
|
279
|
-
CA() {
|
|
280
|
-
this.cA.push({ lineWeight: this.sA, rotation: this.EA, charRotation: [...this.hA], flipHorizontally: this.gA, flipVertically: this.oA, invert: this.aA, character: [...this.iA], charColor: [...this.rA], cellColor: [...this.nA] });
|
|
276
|
+
n(this, "cA", [0, 0]);
|
|
277
|
+
n(this, "hA", [0, 0, 0, 1]);
|
|
278
|
+
n(this, "CA", []);
|
|
281
279
|
}
|
|
282
280
|
DA() {
|
|
283
|
-
|
|
284
|
-
A ? (this.sA = A.lineWeight, this.EA = A.rotation, this.hA = A.charRotation, this.gA = A.flipHorizontally, this.oA = A.flipVertically, this.aA = A.invert, this.iA = A.character, this.rA = A.charColor, this.nA = A.cellColor) : console.warn("pop() called without matching push()");
|
|
281
|
+
this.CA.push({ lineWeight: this.sA, rotation: this.EA, charRotation: [...this.cA], flipHorizontally: this.gA, flipVertically: this.oA, invert: this.aA, character: [...this.iA], charColor: [...this.rA], cellColor: [...this.nA] });
|
|
285
282
|
}
|
|
286
283
|
lA() {
|
|
287
|
-
|
|
284
|
+
const A = this.CA.pop();
|
|
285
|
+
A ? (this.sA = A.lineWeight, this.EA = A.rotation, this.cA = A.charRotation, this.gA = A.flipHorizontally, this.oA = A.flipVertically, this.aA = A.invert, this.iA = A.character, this.rA = A.charColor, this.nA = A.cellColor) : console.warn("pop() called without matching push()");
|
|
286
|
+
}
|
|
287
|
+
PA() {
|
|
288
|
+
this.CA = [], this.EA = 0;
|
|
288
289
|
}
|
|
289
|
-
|
|
290
|
-
A.lineWeight = this.sA, A.rotation = this.EA, A.character[0] = this.iA[0], A.character[1] = this.iA[1], A.character[2] = this.iA[2], A.charColor[0] = this.rA[0], A.charColor[1] = this.rA[1], A.charColor[2] = this.rA[2], A.charColor[3] = this.rA[3], A.bgColor[0] = this.nA[0], A.bgColor[1] = this.nA[1], A.bgColor[2] = this.nA[2], A.bgColor[3] = this.nA[3], A.flipHorizontally = this.gA, A.flipVertically = this.oA, A.invert = this.aA, A.charRotation[0] = this.
|
|
290
|
+
IA(A) {
|
|
291
|
+
A.lineWeight = this.sA, A.rotation = this.EA, A.character[0] = this.iA[0], A.character[1] = this.iA[1], A.character[2] = this.iA[2], A.charColor[0] = this.rA[0], A.charColor[1] = this.rA[1], A.charColor[2] = this.rA[2], A.charColor[3] = this.rA[3], A.bgColor[0] = this.nA[0], A.bgColor[1] = this.nA[1], A.bgColor[2] = this.nA[2], A.bgColor[3] = this.nA[3], A.flipHorizontally = this.gA, A.flipVertically = this.oA, A.invert = this.aA, A.charRotation[0] = this.cA[0], A.charRotation[1] = this.cA[1];
|
|
291
292
|
}
|
|
292
293
|
get lineWeight() {
|
|
293
294
|
return this.sA;
|
|
294
295
|
}
|
|
295
|
-
get
|
|
296
|
-
return this.EA;
|
|
297
|
-
}
|
|
298
|
-
get character() {
|
|
299
|
-
return this.iA;
|
|
300
|
-
}
|
|
301
|
-
get charColor() {
|
|
302
|
-
return this.rA;
|
|
303
|
-
}
|
|
304
|
-
get bgColor() {
|
|
305
|
-
return this.nA;
|
|
306
|
-
}
|
|
307
|
-
get flipHorizontally() {
|
|
308
|
-
return this.gA;
|
|
309
|
-
}
|
|
310
|
-
get flipVertically() {
|
|
311
|
-
return this.oA;
|
|
312
|
-
}
|
|
313
|
-
get invert() {
|
|
314
|
-
return this.aA;
|
|
315
|
-
}
|
|
316
|
-
get charRotation() {
|
|
296
|
+
get canvasBackgroundColor() {
|
|
317
297
|
return this.hA;
|
|
318
298
|
}
|
|
319
|
-
|
|
299
|
+
uA(A) {
|
|
320
300
|
this.sA = Math.abs(A);
|
|
321
301
|
}
|
|
322
|
-
|
|
302
|
+
wA(A) {
|
|
323
303
|
this.EA = A;
|
|
324
304
|
}
|
|
325
|
-
|
|
305
|
+
fA(A) {
|
|
326
306
|
this.iA = A;
|
|
327
307
|
}
|
|
328
|
-
|
|
308
|
+
dA(A, t, e, B = 255) {
|
|
329
309
|
this.rA = [A / 255, t / 255, e / 255, B / 255];
|
|
330
310
|
}
|
|
331
|
-
|
|
311
|
+
pA(A, t, e, B = 255) {
|
|
332
312
|
this.nA = [A / 255, t / 255, e / 255, B / 255];
|
|
333
313
|
}
|
|
334
|
-
|
|
314
|
+
mA(A) {
|
|
335
315
|
this.gA = A;
|
|
336
316
|
}
|
|
337
|
-
|
|
317
|
+
_A(A) {
|
|
338
318
|
this.oA = A;
|
|
339
319
|
}
|
|
340
|
-
|
|
320
|
+
vA(A) {
|
|
341
321
|
this.aA = A;
|
|
342
322
|
}
|
|
343
|
-
|
|
323
|
+
xA(A) {
|
|
344
324
|
const t = 255 * A / 360, e = Math.floor(t) / 255, B = Math.round(t - Math.floor(t));
|
|
345
|
-
this.
|
|
325
|
+
this.cA = [e, B];
|
|
326
|
+
}
|
|
327
|
+
yA(A, t, e, B) {
|
|
328
|
+
this.hA = [A / 255, t / 255, e / 255, B / 255];
|
|
346
329
|
}
|
|
347
330
|
}
|
|
348
331
|
var D = ((E) => (E.RECTANGLE = "rectangle", E.LINE = "line", E.ELLIPSE = "ellipse", E.ARC = "arc", E.TRIANGLE = "triangle", E.BEZIER_CURVE = "bezier_curve", E.CUSTOM = "custom", E))(D || {});
|
|
349
332
|
class AA {
|
|
350
333
|
constructor(A) {
|
|
351
334
|
n(this, "m");
|
|
352
|
-
n(this, "
|
|
335
|
+
n(this, "bA", /* @__PURE__ */ new Map());
|
|
353
336
|
this.m = A;
|
|
354
337
|
}
|
|
355
|
-
|
|
338
|
+
GA(A, t, e, B) {
|
|
356
339
|
const r = this.m;
|
|
357
|
-
let i = this.
|
|
358
|
-
i || (i = /* @__PURE__ */ new Map(), this.
|
|
340
|
+
let i = this.bA.get(A);
|
|
341
|
+
i || (i = /* @__PURE__ */ new Map(), this.bA.set(A, i));
|
|
359
342
|
let s = i.get(t) || null;
|
|
360
343
|
if (!s) {
|
|
361
344
|
s = r.createVertexArray(), i.set(t, s), r.bindVertexArray(s), r.bindBuffer(r.ARRAY_BUFFER, B);
|
|
@@ -366,55 +349,55 @@ class AA {
|
|
|
366
349
|
}
|
|
367
350
|
r.bindVertexArray(s);
|
|
368
351
|
}
|
|
369
|
-
|
|
352
|
+
$A() {
|
|
370
353
|
this.m.bindVertexArray(null);
|
|
371
354
|
}
|
|
372
355
|
W() {
|
|
373
356
|
const A = this.m;
|
|
374
|
-
for (const [, t] of this.
|
|
375
|
-
this.
|
|
357
|
+
for (const [, t] of this.bA) for (const [, e] of t) e && A.deleteVertexArray(e);
|
|
358
|
+
this.bA.clear();
|
|
376
359
|
}
|
|
377
360
|
}
|
|
378
361
|
class tA {
|
|
379
362
|
constructor(A) {
|
|
380
|
-
n(this, "
|
|
363
|
+
n(this, "MA");
|
|
381
364
|
n(this, "m");
|
|
382
|
-
this.m = A, this.
|
|
365
|
+
this.m = A, this.MA = new AA(A);
|
|
383
366
|
}
|
|
384
|
-
|
|
367
|
+
YA(A, t, e) {
|
|
385
368
|
const { shader: B } = A, r = G(this.m) || this.m.getParameter(this.m.VIEWPORT);
|
|
386
369
|
B.tA({ u_aspectRatio: r[2] / r[3], u_viewportSize: [r[2], r[3]] });
|
|
387
370
|
const i = (o) => {
|
|
388
|
-
if (!o || !o.
|
|
371
|
+
if (!o || !o.TA()) return;
|
|
389
372
|
const g = o.unitGeometry, a = o.unitBuffer;
|
|
390
373
|
try {
|
|
391
|
-
this.GA
|
|
374
|
+
this.MA.GA(B.QA, o.type + "", g, a), o.batch.zA(B), o.batch.FA(g.primitiveType, g.vertexCount);
|
|
392
375
|
} finally {
|
|
393
|
-
o.batch.
|
|
376
|
+
o.batch.RA(B), this.MA.$A(), o.SA();
|
|
394
377
|
}
|
|
395
378
|
};
|
|
396
379
|
let s = null, Q = null;
|
|
397
380
|
for (const o of t) {
|
|
398
381
|
s !== null && o.type !== s && (i(Q), s = null, Q = null);
|
|
399
382
|
let g = Q;
|
|
400
|
-
g && o.type === s || (g = e.get(o.type) || null, Q = g, s = o.type), g && g.
|
|
383
|
+
g && o.type === s || (g = e.get(o.type) || null, Q = g, s = o.type), g && g.OA(o.params, o.state);
|
|
401
384
|
}
|
|
402
385
|
i(Q);
|
|
403
386
|
}
|
|
404
387
|
}
|
|
405
388
|
class eA {
|
|
406
389
|
constructor() {
|
|
407
|
-
n(this, "
|
|
408
|
-
n(this, "
|
|
409
|
-
n(this, "
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
if (this.
|
|
413
|
-
const e = { id: this.
|
|
414
|
-
this.
|
|
390
|
+
n(this, "LA", []);
|
|
391
|
+
n(this, "UA", 1);
|
|
392
|
+
n(this, "kA", 0);
|
|
393
|
+
}
|
|
394
|
+
WA(A) {
|
|
395
|
+
if (this.kA >= this.LA.length) {
|
|
396
|
+
const e = { id: this.UA++, type: A, params: {}, state: { lineWeight: 1, rotation: 0, character: [0, 0, 0], charColor: [1, 1, 1, 1], bgColor: [0, 0, 0, 1], flipHorizontally: !1, flipVertically: !1, invert: !1, charRotation: [0, 0] } };
|
|
397
|
+
this.LA.push(e);
|
|
415
398
|
}
|
|
416
|
-
const t = this.
|
|
417
|
-
switch (t.id = this.
|
|
399
|
+
const t = this.LA[this.kA];
|
|
400
|
+
switch (t.id = this.UA++, t.type = A, A) {
|
|
418
401
|
case D.RECTANGLE:
|
|
419
402
|
case D.ELLIPSE:
|
|
420
403
|
t.params && "width" in t.params || (t.params = { x: 0, y: 0, width: 0, height: 0 });
|
|
@@ -434,196 +417,196 @@ class eA {
|
|
|
434
417
|
default:
|
|
435
418
|
t.params || (t.params = {});
|
|
436
419
|
}
|
|
437
|
-
return this.
|
|
420
|
+
return this.kA++, t;
|
|
438
421
|
}
|
|
439
|
-
|
|
440
|
-
const i = this.
|
|
441
|
-
return i.params.x = A, i.params.y = t, i.params.width = e, i.params.height = B, r.
|
|
422
|
+
HA(A, t, e, B, r) {
|
|
423
|
+
const i = this.WA(D.RECTANGLE);
|
|
424
|
+
return i.params.x = A, i.params.y = t, i.params.width = e, i.params.height = B, r.IA(i.state), i.id;
|
|
442
425
|
}
|
|
443
|
-
|
|
444
|
-
const s = this.
|
|
445
|
-
return s.params.x1 = A, s.params.y1 = t, s.params.x2 = e, s.params.y2 = B, s.params.thickness = r, i.
|
|
426
|
+
JA(A, t, e, B, r, i) {
|
|
427
|
+
const s = this.WA(D.LINE);
|
|
428
|
+
return s.params.x1 = A, s.params.y1 = t, s.params.x2 = e, s.params.y2 = B, s.params.thickness = r, i.IA(s.state), s.id;
|
|
446
429
|
}
|
|
447
|
-
|
|
448
|
-
const i = this.
|
|
449
|
-
return i.params.x = A, i.params.y = t, i.params.width = e, i.params.height = B, r.
|
|
430
|
+
VA(A, t, e, B, r) {
|
|
431
|
+
const i = this.WA(D.ELLIPSE);
|
|
432
|
+
return i.params.x = A, i.params.y = t, i.params.width = e, i.params.height = B, r.IA(i.state), i.id;
|
|
450
433
|
}
|
|
451
|
-
|
|
452
|
-
const Q = this.
|
|
453
|
-
return Q.params.x = A, Q.params.y = t, Q.params.width = e, Q.params.height = B, Q.params.start = r, Q.params.stop = i, s.
|
|
434
|
+
KA(A, t, e, B, r, i, s) {
|
|
435
|
+
const Q = this.WA(D.ARC);
|
|
436
|
+
return Q.params.x = A, Q.params.y = t, Q.params.width = e, Q.params.height = B, Q.params.start = r, Q.params.stop = i, s.IA(Q.state), Q.id;
|
|
454
437
|
}
|
|
455
|
-
|
|
456
|
-
const Q = this.
|
|
457
|
-
return Q.params.x1 = A, Q.params.y1 = t, Q.params.x2 = e, Q.params.y2 = B, Q.params.x3 = r, Q.params.y3 = i, s.
|
|
438
|
+
jA(A, t, e, B, r, i, s) {
|
|
439
|
+
const Q = this.WA(D.TRIANGLE);
|
|
440
|
+
return Q.params.x1 = A, Q.params.y1 = t, Q.params.x2 = e, Q.params.y2 = B, Q.params.x3 = r, Q.params.y3 = i, s.IA(Q.state), Q.id;
|
|
458
441
|
}
|
|
459
|
-
|
|
460
|
-
const a = this.
|
|
461
|
-
return a.params.x1 = A, a.params.y1 = t, a.params.cp1x = e, a.params.cp1y = B, a.params.cp2x = r, a.params.cp2y = i, a.params.x2 = s, a.params.y2 = Q, a.params.thickness = o, g.
|
|
442
|
+
ZA(A, t, e, B, r, i, s, Q, o, g) {
|
|
443
|
+
const a = this.WA(D.BEZIER_CURVE);
|
|
444
|
+
return a.params.x1 = A, a.params.y1 = t, a.params.cp1x = e, a.params.cp1y = B, a.params.cp2x = r, a.params.cp2y = i, a.params.x2 = s, a.params.y2 = Q, a.params.thickness = o, g.IA(a.state), a.id;
|
|
462
445
|
}
|
|
463
446
|
get length() {
|
|
464
|
-
return this.
|
|
447
|
+
return this.kA;
|
|
465
448
|
}
|
|
466
449
|
get isEmpty() {
|
|
467
|
-
return this.
|
|
450
|
+
return this.kA === 0;
|
|
468
451
|
}
|
|
469
|
-
|
|
470
|
-
this.
|
|
452
|
+
NA() {
|
|
453
|
+
this.kA = 0;
|
|
471
454
|
}
|
|
472
455
|
[Symbol.iterator]() {
|
|
473
456
|
let A = 0;
|
|
474
|
-
const t = this.
|
|
457
|
+
const t = this.kA, e = this.LA;
|
|
475
458
|
return { next: () => A < t ? { value: e[A++], done: !1 } : { value: void 0, done: !0 } };
|
|
476
459
|
}
|
|
477
460
|
}
|
|
478
|
-
const
|
|
479
|
-
static
|
|
461
|
+
const y = class y {
|
|
462
|
+
static XA(A, t, e = 0) {
|
|
480
463
|
var i, s, Q, o, g, a, h, l, c, C;
|
|
481
|
-
const B = t || new Float32Array(
|
|
464
|
+
const B = t || new Float32Array(y.FLOATS_PER_INSTANCE);
|
|
482
465
|
let r = e;
|
|
483
466
|
return B[r++] = A.position[0], B[r++] = A.position[1], B[r++] = A.size[0], B[r++] = A.size[1], B[r++] = A.character[0], B[r++] = A.character[1], B[r++] = A.character[2], B[r++] = A.primaryColor[0], B[r++] = A.primaryColor[1], B[r++] = A.primaryColor[2], B[r++] = A.primaryColor[3], B[r++] = A.secondaryColor[0], B[r++] = A.secondaryColor[1], B[r++] = A.secondaryColor[2], B[r++] = A.secondaryColor[3], B[r++] = A.rotation[0], B[r++] = A.rotation[1], B[r++] = A.transform[0], B[r++] = A.transform[1], B[r++] = A.transform[2], B[r++] = A.globalRotation, B[r++] = A.rotationCenter[0], B[r++] = A.rotationCenter[1], B[r++] = ((i = A.arcAngles) == null ? void 0 : i[0]) || 0, B[r++] = ((s = A.arcAngles) == null ? void 0 : s[1]) || 0, B[r++] = ((Q = A.bezierControlPoint1) == null ? void 0 : Q[0]) || 0, B[r++] = ((o = A.bezierControlPoint1) == null ? void 0 : o[1]) || 0, B[r++] = ((g = A.bezierControlPoint2) == null ? void 0 : g[0]) || 0, B[r++] = ((a = A.bezierControlPoint2) == null ? void 0 : a[1]) || 0, B[r++] = ((h = A.bezierStartPoint) == null ? void 0 : h[0]) || 0, B[r++] = ((l = A.bezierStartPoint) == null ? void 0 : l[1]) || 0, B[r++] = ((c = A.bezierEndPoint) == null ? void 0 : c[0]) || 0, B[r++] = ((C = A.bezierEndPoint) == null ? void 0 : C[1]) || 0, B;
|
|
484
467
|
}
|
|
485
|
-
static
|
|
486
|
-
const t = A.length *
|
|
468
|
+
static qA(A) {
|
|
469
|
+
const t = A.length * y.FLOATS_PER_INSTANCE, e = new Float32Array(t);
|
|
487
470
|
for (let B = 0; B < A.length; B++) {
|
|
488
|
-
const r = B *
|
|
489
|
-
|
|
471
|
+
const r = B * y.FLOATS_PER_INSTANCE;
|
|
472
|
+
y.XA(A[B], e, r);
|
|
490
473
|
}
|
|
491
474
|
return e;
|
|
492
475
|
}
|
|
493
476
|
};
|
|
494
|
-
n(
|
|
495
|
-
let v =
|
|
477
|
+
n(y, "BYTES_PER_INSTANCE", 132), n(y, "FLOATS_PER_INSTANCE", 33);
|
|
478
|
+
let v = y;
|
|
496
479
|
const P = class P {
|
|
497
480
|
};
|
|
498
481
|
n(P, "STRIDE", v.BYTES_PER_INSTANCE), n(P, "ATTRIBUTES", { a_instancePosition: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 0, divisor: 1 }, a_instanceSize: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 8, divisor: 1 }, a_instanceCharacter: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 16, divisor: 1 }, a_instancePrimaryColor: { location: -1, size: 4, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 28, divisor: 1 }, a_instanceSecondaryColor: { location: -1, size: 4, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 44, divisor: 1 }, a_instanceRotation: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 60, divisor: 1 }, a_instanceTransform: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 68, divisor: 1 }, a_instanceGlobalRotation: { location: -1, size: 1, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 80, divisor: 1 }, a_instanceRotationCenter: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 84, divisor: 1 }, a_instanceArcAngles: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 92, divisor: 1 }, a_instanceBezierCP1: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 100, divisor: 1 }, a_instanceBezierCP2: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 108, divisor: 1 }, a_instanceBezierStart: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 116, divisor: 1 }, a_instanceBezierEnd: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 124, divisor: 1 } });
|
|
499
|
-
let
|
|
482
|
+
let _ = P;
|
|
500
483
|
class BA {
|
|
501
484
|
constructor(A, t = 1e3, e = 1.5) {
|
|
502
485
|
n(this, "m");
|
|
503
|
-
n(this, "
|
|
504
|
-
n(this, "
|
|
505
|
-
n(this, "
|
|
506
|
-
n(this, "
|
|
507
|
-
n(this, "
|
|
508
|
-
n(this, "
|
|
509
|
-
n(this, "
|
|
510
|
-
n(this, "
|
|
511
|
-
this.m = A, this.
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
const t = this.
|
|
515
|
-
return this.
|
|
486
|
+
n(this, "At", []);
|
|
487
|
+
n(this, "tt");
|
|
488
|
+
n(this, "et");
|
|
489
|
+
n(this, "Bt", null);
|
|
490
|
+
n(this, "Qt", !0);
|
|
491
|
+
n(this, "st", 0);
|
|
492
|
+
n(this, "Et", /* @__PURE__ */ new Map());
|
|
493
|
+
n(this, "it", null);
|
|
494
|
+
this.m = A, this.tt = t, this.et = e, this.rt();
|
|
495
|
+
}
|
|
496
|
+
OA(A) {
|
|
497
|
+
const t = this.At.length;
|
|
498
|
+
return this.At.push(A), this.Qt = !0, t;
|
|
516
499
|
}
|
|
517
500
|
get count() {
|
|
518
|
-
return this.
|
|
501
|
+
return this.At.length;
|
|
519
502
|
}
|
|
520
503
|
get isEmpty() {
|
|
521
|
-
return this.
|
|
504
|
+
return this.At.length === 0;
|
|
522
505
|
}
|
|
523
506
|
clear() {
|
|
524
|
-
this.
|
|
525
|
-
}
|
|
526
|
-
it(A) {
|
|
527
|
-
if (A <= this.qA) return;
|
|
528
|
-
const t = Math.ceil(A * this.At);
|
|
529
|
-
this.qA = t, this.Et(), console.log(`InstanceBatch: Grew buffer capacity to ${t} instances`);
|
|
507
|
+
this.At.length = 0, this.Qt = !0;
|
|
530
508
|
}
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
A.bindBuffer(A.ARRAY_BUFFER, this.tt), A.bufferData(A.ARRAY_BUFFER, t, A.DYNAMIC_DRAW), A.bindBuffer(A.ARRAY_BUFFER, null), this.et = !0, this.Bt = 0;
|
|
509
|
+
nt(A) {
|
|
510
|
+
if (A <= this.tt) return;
|
|
511
|
+
const t = Math.ceil(A * this.et);
|
|
512
|
+
this.tt = t, this.rt(), console.log(`InstanceBatch: Grew buffer capacity to ${t} instances`);
|
|
536
513
|
}
|
|
537
514
|
rt() {
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
515
|
+
const A = this.m;
|
|
516
|
+
if (this.Bt && A.deleteBuffer(this.Bt), this.Bt = A.createBuffer(), !this.Bt) throw Error("Failed to create instance buffer");
|
|
517
|
+
const t = this.tt * v.BYTES_PER_INSTANCE;
|
|
518
|
+
A.bindBuffer(A.ARRAY_BUFFER, this.Bt), A.bufferData(A.ARRAY_BUFFER, t, A.DYNAMIC_DRAW), A.bindBuffer(A.ARRAY_BUFFER, null), this.Qt = !0, this.st = 0;
|
|
519
|
+
}
|
|
520
|
+
gt() {
|
|
521
|
+
if (!this.Qt || this.At.length === 0) return;
|
|
522
|
+
const A = this.m, t = this.At.length;
|
|
523
|
+
this.nt(t), (!this.it || this.it.length < t * v.FLOATS_PER_INSTANCE) && (this.it = new Float32Array(t * v.FLOATS_PER_INSTANCE));
|
|
524
|
+
const e = v.qA(this.At);
|
|
525
|
+
A.bindBuffer(A.ARRAY_BUFFER, this.Bt), t <= this.st ? A.bufferSubData(A.ARRAY_BUFFER, 0, e) : A.bufferData(A.ARRAY_BUFFER, e, A.DYNAMIC_DRAW), A.bindBuffer(A.ARRAY_BUFFER, null), this.Qt = !1, this.st = t;
|
|
526
|
+
}
|
|
527
|
+
ot(A) {
|
|
528
|
+
let t = this.Et.get(A);
|
|
546
529
|
if (!t) {
|
|
547
530
|
t = /* @__PURE__ */ new Map();
|
|
548
531
|
const e = this.m;
|
|
549
|
-
for (const B in
|
|
532
|
+
for (const B in _.ATTRIBUTES) {
|
|
550
533
|
const r = e.getAttribLocation(A, B);
|
|
551
534
|
r !== -1 && t.set(B, r);
|
|
552
535
|
}
|
|
553
|
-
this.
|
|
536
|
+
this.Et.set(A, t);
|
|
554
537
|
}
|
|
555
538
|
return t;
|
|
556
539
|
}
|
|
557
|
-
|
|
558
|
-
if (!this.
|
|
540
|
+
zA(A) {
|
|
541
|
+
if (!this.Bt || this.At.length === 0) return;
|
|
559
542
|
const t = this.m, e = A.QA;
|
|
560
543
|
if (!e) return void console.warn("InstanceBatch: Cannot bind attributes - invalid shader program");
|
|
561
|
-
this.
|
|
562
|
-
const B = this.
|
|
563
|
-
t.bindBuffer(t.ARRAY_BUFFER, this.
|
|
544
|
+
this.gt();
|
|
545
|
+
const B = this.ot(e);
|
|
546
|
+
t.bindBuffer(t.ARRAY_BUFFER, this.Bt);
|
|
564
547
|
for (const [r, i] of B) {
|
|
565
|
-
const s =
|
|
548
|
+
const s = _.ATTRIBUTES[r];
|
|
566
549
|
s && (t.enableVertexAttribArray(i), t.vertexAttribPointer(i, s.size, s.type, s.normalized, s.stride, s.offset), t.vertexAttribDivisor(i, s.divisor));
|
|
567
550
|
}
|
|
568
551
|
}
|
|
569
|
-
|
|
570
|
-
const t = this.m, e = this.
|
|
552
|
+
RA(A) {
|
|
553
|
+
const t = this.m, e = this.ot(A.QA);
|
|
571
554
|
for (const [, B] of e) t.disableVertexAttribArray(B), t.vertexAttribDivisor(B, 0);
|
|
572
555
|
}
|
|
573
|
-
|
|
574
|
-
this.
|
|
556
|
+
FA(A, t) {
|
|
557
|
+
this.At.length !== 0 && this.m.drawArraysInstanced(A, 0, t, this.At.length);
|
|
575
558
|
}
|
|
576
559
|
W() {
|
|
577
560
|
const A = this.m;
|
|
578
|
-
this.
|
|
561
|
+
this.Bt && (A.deleteBuffer(this.Bt), this.Bt = null), this.At.length = 0, this.Et.clear(), this.it = null;
|
|
579
562
|
}
|
|
580
563
|
}
|
|
581
564
|
class b {
|
|
582
565
|
constructor(A, t, e, B) {
|
|
583
566
|
n(this, "m");
|
|
584
|
-
n(this, "
|
|
585
|
-
n(this, "ot");
|
|
567
|
+
n(this, "ct");
|
|
586
568
|
n(this, "ht");
|
|
587
|
-
n(this, "
|
|
588
|
-
this
|
|
569
|
+
n(this, "Ct");
|
|
570
|
+
n(this, "Dt", null);
|
|
571
|
+
this.m = A, this.ct = t, this.ht = e, this.Ct = B;
|
|
589
572
|
const r = this.m.createBuffer();
|
|
590
573
|
if (!r) throw Error("Failed to create unit geometry buffer");
|
|
591
|
-
this.m.bindBuffer(this.m.ARRAY_BUFFER, r), this.m.bufferData(this.m.ARRAY_BUFFER, this.
|
|
574
|
+
this.m.bindBuffer(this.m.ARRAY_BUFFER, r), this.m.bufferData(this.m.ARRAY_BUFFER, this.Ct.vertices, this.m.STATIC_DRAW), this.m.bindBuffer(this.m.ARRAY_BUFFER, null), this.Dt = r;
|
|
592
575
|
}
|
|
593
576
|
get type() {
|
|
594
|
-
return this.
|
|
577
|
+
return this.ht;
|
|
595
578
|
}
|
|
596
579
|
get unitGeometry() {
|
|
597
|
-
return this.
|
|
580
|
+
return this.Ct;
|
|
598
581
|
}
|
|
599
582
|
get unitBuffer() {
|
|
600
|
-
return this.
|
|
583
|
+
return this.Dt;
|
|
601
584
|
}
|
|
602
585
|
get batch() {
|
|
603
|
-
return this.
|
|
586
|
+
return this.ct;
|
|
604
587
|
}
|
|
605
|
-
|
|
606
|
-
this.
|
|
588
|
+
SA() {
|
|
589
|
+
this.ct.clear();
|
|
607
590
|
}
|
|
608
|
-
|
|
609
|
-
return !this.
|
|
591
|
+
TA() {
|
|
592
|
+
return !this.ct.isEmpty;
|
|
610
593
|
}
|
|
611
594
|
W() {
|
|
612
|
-
this.
|
|
595
|
+
this.ct.W(), this.Dt && (this.m.deleteBuffer(this.Dt), this.Dt = null);
|
|
613
596
|
}
|
|
614
|
-
|
|
615
|
-
const i = this.
|
|
597
|
+
lt(A, t, e, B, r) {
|
|
598
|
+
const i = this.Pt(A, t, e, B, r.rotation || 0);
|
|
616
599
|
return { position: [A, t], size: [e, B], character: r.character || [0, 0, 0], primaryColor: r.charColor || [1, 1, 1, 1], secondaryColor: r.bgColor || [0, 0, 0, 1], rotation: r.charRotation || [0, 0], transform: [r.invert ? 1 : 0, r.flipHorizontally ? 1 : 0, r.flipVertically ? 1 : 0], globalRotation: i.radians, rotationCenter: [i.centerX, i.centerY] };
|
|
617
600
|
}
|
|
618
|
-
|
|
601
|
+
It(A, t) {
|
|
619
602
|
const e = G(this.m) || [0, 0, this.m.canvas.width, this.m.canvas.height];
|
|
620
603
|
return { nx: A / e[2] * 2 - 1, ny: 1 - t / e[3] * 2 };
|
|
621
604
|
}
|
|
622
|
-
|
|
623
|
-
const B = this.
|
|
605
|
+
ut(A, t, e) {
|
|
606
|
+
const B = this.It(t, e);
|
|
624
607
|
A.rotationCenter = [B.nx, B.ny];
|
|
625
608
|
}
|
|
626
|
-
|
|
609
|
+
Pt(A, t, e, B, r) {
|
|
627
610
|
const i = G(this.m) || [0, 0, this.m.canvas.width, this.m.canvas.height], s = i[2], Q = i[3];
|
|
628
611
|
return { centerX: (A + e / 2) / s * 2 - 1, centerY: 1 - (t + B / 2) / Q * 2, radians: -r * Math.PI / 180, aspectRatio: s / Q };
|
|
629
612
|
}
|
|
@@ -633,9 +616,9 @@ class iA extends b {
|
|
|
633
616
|
constructor(A, t) {
|
|
634
617
|
super(A, t, D.RECTANGLE, rA);
|
|
635
618
|
}
|
|
636
|
-
|
|
637
|
-
const e = this.
|
|
638
|
-
return this.
|
|
619
|
+
OA(A, t) {
|
|
620
|
+
const e = this.lt(A.x, A.y, A.width, A.height, t);
|
|
621
|
+
return this.ct.OA(e);
|
|
639
622
|
}
|
|
640
623
|
}
|
|
641
624
|
const sA = { vertices: new Float32Array([0, -0.5, 0, 0, 1, -0.5, 1, 0, 0, 0.5, 0, 1, 0, 0.5, 0, 1, 1, -0.5, 1, 0, 1, 0.5, 1, 1]), vertexCount: 6, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
|
|
@@ -643,9 +626,9 @@ class EA extends b {
|
|
|
643
626
|
constructor(A, t) {
|
|
644
627
|
super(A, t, D.LINE, sA);
|
|
645
628
|
}
|
|
646
|
-
|
|
647
|
-
const e = A.x2 - A.x1, B = A.y2 - A.y1, r = Math.hypot(e, B), i = Math.atan2(B, e), s = A.thickness || t.lineWeight || 1, Q = A.x1 + e / 2, o = A.y1 + B / 2, g = Q - r / 2, a = o, h = { character: t.character, charColor: t.charColor, bgColor: t.bgColor, charRotation: t.charRotation, flipHorizontally: t.flipHorizontally, flipVertically: t.flipVertically, invert: t.invert, rotation: (t.rotation || 0) + 180 * i / Math.PI, lineWeight: s }, l = this.
|
|
648
|
-
return this.
|
|
629
|
+
OA(A, t) {
|
|
630
|
+
const e = A.x2 - A.x1, B = A.y2 - A.y1, r = Math.hypot(e, B), i = Math.atan2(B, e), s = A.thickness || t.lineWeight || 1, Q = A.x1 + e / 2, o = A.y1 + B / 2, g = Q - r / 2, a = o, h = { character: t.character, charColor: t.charColor, bgColor: t.bgColor, charRotation: t.charRotation, flipHorizontally: t.flipHorizontally, flipVertically: t.flipVertically, invert: t.invert, rotation: (t.rotation || 0) + 180 * i / Math.PI, lineWeight: s }, l = this.lt(g, a, r, s, h);
|
|
631
|
+
return this.ut(l, Q, o), this.ct.OA(l);
|
|
649
632
|
}
|
|
650
633
|
}
|
|
651
634
|
const QA = { vertices: function(E = 32) {
|
|
@@ -660,9 +643,9 @@ class nA extends b {
|
|
|
660
643
|
constructor(A, t) {
|
|
661
644
|
super(A, t, D.ELLIPSE, QA);
|
|
662
645
|
}
|
|
663
|
-
|
|
664
|
-
const e = this.
|
|
665
|
-
return this.
|
|
646
|
+
OA(A, t) {
|
|
647
|
+
const e = this.lt(A.x, A.y, A.width, A.height, t);
|
|
648
|
+
return this.ut(e, A.x, A.y), this.ct.OA(e);
|
|
666
649
|
}
|
|
667
650
|
}
|
|
668
651
|
let oA = { vertices: function(E) {
|
|
@@ -677,9 +660,9 @@ class gA extends b {
|
|
|
677
660
|
constructor(A, t) {
|
|
678
661
|
super(A, t, D.ARC, oA);
|
|
679
662
|
}
|
|
680
|
-
|
|
681
|
-
const e = A.x - A.width / 2, B = A.y - A.height / 2, r = A.start * Math.PI / 180, i = A.stop * Math.PI / 180, s = this.
|
|
682
|
-
return this.
|
|
663
|
+
OA(A, t) {
|
|
664
|
+
const e = A.x - A.width / 2, B = A.y - A.height / 2, r = A.start * Math.PI / 180, i = A.stop * Math.PI / 180, s = this.lt(e, B, A.width, A.height, t);
|
|
665
|
+
return this.ut(s, A.x, A.y), s.arcAngles = [r, i], this.ct.OA(s);
|
|
683
666
|
}
|
|
684
667
|
}
|
|
685
668
|
const aA = { vertices: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0.5, 1, 0.5, 1]), vertexCount: 3, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
|
|
@@ -687,9 +670,9 @@ class hA extends b {
|
|
|
687
670
|
constructor(A, t) {
|
|
688
671
|
super(A, t, D.TRIANGLE, aA);
|
|
689
672
|
}
|
|
690
|
-
|
|
691
|
-
const e = Math.min(A.x1, A.x2, A.x3), B = Math.max(A.x1, A.x2, A.x3), r = Math.min(A.y1, A.y2, A.y3), i = B - e, s = Math.max(A.y1, A.y2, A.y3) - r, Q = this.
|
|
692
|
-
return this.
|
|
673
|
+
OA(A, t) {
|
|
674
|
+
const e = Math.min(A.x1, A.x2, A.x3), B = Math.max(A.x1, A.x2, A.x3), r = Math.min(A.y1, A.y2, A.y3), i = B - e, s = Math.max(A.y1, A.y2, A.y3) - r, Q = this.lt(e, r, i, s, t), o = e + 0.5 * i, g = r + s * (1 / 3);
|
|
675
|
+
return this.ut(Q, o, g), this.ct.OA(Q);
|
|
693
676
|
}
|
|
694
677
|
}
|
|
695
678
|
function L(E, A, t, e, B) {
|
|
@@ -708,88 +691,88 @@ class lA extends b {
|
|
|
708
691
|
constructor(A, t) {
|
|
709
692
|
super(A, t, D.BEZIER_CURVE, cA);
|
|
710
693
|
}
|
|
711
|
-
|
|
712
|
-
const e = t.lineWeight || 1, B = L(0.5, A.x1, A.cp1x, A.cp2x, A.x2), r = L(0.5, A.y1, A.cp1y, A.cp2y, A.y2), i = { character: t.character, charColor: t.charColor, bgColor: t.bgColor, charRotation: t.charRotation, flipHorizontally: t.flipHorizontally, flipVertically: t.flipVertically, invert: t.invert, rotation: t.rotation || 0, lineWeight: e }, s = this.
|
|
713
|
-
return this.
|
|
694
|
+
OA(A, t) {
|
|
695
|
+
const e = t.lineWeight || 1, B = L(0.5, A.x1, A.cp1x, A.cp2x, A.x2), r = L(0.5, A.y1, A.cp1y, A.cp2y, A.y2), i = { character: t.character, charColor: t.charColor, bgColor: t.bgColor, charRotation: t.charRotation, flipHorizontally: t.flipHorizontally, flipVertically: t.flipVertically, invert: t.invert, rotation: t.rotation || 0, lineWeight: e }, s = this.lt(0, 0, 1, e, i);
|
|
696
|
+
return this.ut(s, B, r), s.bezierStartPoint = [A.x1, A.y1], s.bezierControlPoint1 = [A.cp1x, A.cp1y], s.bezierControlPoint2 = [A.cp2x, A.cp2y], s.bezierEndPoint = [A.x2, A.y2], this.ct.OA(s);
|
|
714
697
|
}
|
|
715
698
|
}
|
|
716
699
|
class CA {
|
|
717
700
|
constructor(A) {
|
|
718
701
|
n(this, "m");
|
|
719
|
-
n(this, "It", null);
|
|
720
|
-
n(this, "ut", null);
|
|
721
702
|
n(this, "wt", null);
|
|
722
|
-
n(this, "ft",
|
|
723
|
-
n(this, "dt");
|
|
724
|
-
n(this, "_t");
|
|
703
|
+
n(this, "ft", null);
|
|
704
|
+
n(this, "dt", null);
|
|
705
|
+
n(this, "_t", /* @__PURE__ */ new Map());
|
|
725
706
|
n(this, "vt");
|
|
726
|
-
|
|
707
|
+
n(this, "xt");
|
|
708
|
+
n(this, "yt");
|
|
709
|
+
this.m = A, this.yt = new q(), this.vt = new tA(A), this.xt = new eA(), this.ft = A.createBuffer(), A.bindBuffer(A.ARRAY_BUFFER, this.ft), A.bufferData(A.ARRAY_BUFFER, new Float32Array([-1, -1, 0, 0, 1, -1, 1, 0, -1, 1, 0, 1, 1, -1, 1, 0, 1, 1, 1, 1, -1, 1, 0, 1]), A.STATIC_DRAW), this.dt = A.createBuffer(), M(this.m, [0, 0, this.m.canvas.width, this.m.canvas.height]);
|
|
727
710
|
}
|
|
728
|
-
|
|
729
|
-
let t = this.
|
|
711
|
+
bt(A) {
|
|
712
|
+
let t = this._t.get(A);
|
|
730
713
|
if (t) return t;
|
|
731
714
|
const e = new BA(this.m);
|
|
732
|
-
return t = (0, { [D.RECTANGLE]: () => new iA(this.m, e), [D.LINE]: () => new EA(this.m, e), [D.ELLIPSE]: () => new nA(this.m, e), [D.ARC]: () => new gA(this.m, e), [D.TRIANGLE]: () => new hA(this.m, e), [D.BEZIER_CURVE]: () => new lA(this.m, e) }[A])(), this.
|
|
715
|
+
return t = (0, { [D.RECTANGLE]: () => new iA(this.m, e), [D.LINE]: () => new EA(this.m, e), [D.ELLIPSE]: () => new nA(this.m, e), [D.ARC]: () => new gA(this.m, e), [D.TRIANGLE]: () => new hA(this.m, e), [D.BEZIER_CURVE]: () => new lA(this.m, e) }[A])(), this._t.set(A, t), t;
|
|
733
716
|
}
|
|
734
|
-
|
|
735
|
-
this.
|
|
717
|
+
Gt(A) {
|
|
718
|
+
this.wt !== A && (this.wt = A, A.q());
|
|
736
719
|
}
|
|
737
|
-
|
|
720
|
+
$t(A, t) {
|
|
738
721
|
return new Z(this.m, A, t);
|
|
739
722
|
}
|
|
740
|
-
|
|
723
|
+
Mt(A, t, e, B) {
|
|
741
724
|
var C;
|
|
742
725
|
const r = this.m, i = r.canvas.width, s = r.canvas.height, Q = A / i * 2 - 1, o = (A + e) / i * 2 - 1, g = 1 - t / s * 2, a = 1 - (t + B) / s * 2, h = new Float32Array([Q, a, o, a, Q, g, o, a, o, g, Q, g]);
|
|
743
|
-
r.bindBuffer(r.ARRAY_BUFFER, this.
|
|
744
|
-
const l = ((C = this.
|
|
726
|
+
r.bindBuffer(r.ARRAY_BUFFER, this.dt), r.bufferData(r.ARRAY_BUFFER, h, r.DYNAMIC_DRAW);
|
|
727
|
+
const l = ((C = this.wt) == null ? void 0 : C.QA) || r.getParameter(r.CURRENT_PROGRAM), c = l ? r.getAttribLocation(l, "a_position") : -1;
|
|
745
728
|
c !== -1 && (r.enableVertexAttribArray(c), r.vertexAttribPointer(c, 2, r.FLOAT, !1, 8, 0)), r.drawArrays(r.TRIANGLES, 0, 6), c !== -1 && r.disableVertexAttribArray(c);
|
|
746
729
|
}
|
|
747
|
-
|
|
748
|
-
this.
|
|
730
|
+
Yt(A, t, e, B) {
|
|
731
|
+
this.xt.HA(A, t, e, B, this.yt);
|
|
749
732
|
}
|
|
750
|
-
|
|
751
|
-
this.
|
|
733
|
+
Tt(A, t, e, B) {
|
|
734
|
+
this.xt.JA(A, t, e, B, this.yt.lineWeight, this.yt);
|
|
752
735
|
}
|
|
753
|
-
|
|
754
|
-
this.
|
|
736
|
+
zt(A, t, e, B) {
|
|
737
|
+
this.xt.VA(A, t, e, B, this.yt);
|
|
755
738
|
}
|
|
756
|
-
|
|
757
|
-
this.
|
|
739
|
+
Ft(A, t, e, B, r, i) {
|
|
740
|
+
this.xt.jA(A, t, e, B, r, i, this.yt);
|
|
758
741
|
}
|
|
759
|
-
|
|
760
|
-
const o = this.
|
|
761
|
-
this.
|
|
742
|
+
Rt(A, t, e, B, r, i, s, Q) {
|
|
743
|
+
const o = this.yt.lineWeight;
|
|
744
|
+
this.xt.ZA(A, t, e, B, r, i, s, Q, o, this.yt);
|
|
762
745
|
}
|
|
763
|
-
|
|
764
|
-
return new
|
|
746
|
+
St(A, t, e = 1, B = {}) {
|
|
747
|
+
return new K(this.m, A, t, e, B);
|
|
765
748
|
}
|
|
766
|
-
|
|
767
|
-
this.
|
|
749
|
+
Ot(A, t, e, B, r, i) {
|
|
750
|
+
this.xt.KA(A, t, e, B, r, i, this.yt);
|
|
768
751
|
}
|
|
769
|
-
|
|
770
|
-
this.
|
|
752
|
+
Lt(A, t = A, e = A, B = 255) {
|
|
753
|
+
this.state.yA(A, t, e, B), this.NA(A / 255, t / 255, e / 255, B / 255);
|
|
771
754
|
}
|
|
772
|
-
|
|
755
|
+
NA(A = 0, t = 0, e = 0, B = 0) {
|
|
773
756
|
this.m.clearColor(A, t, e, B), this.m.clear(this.m.COLOR_BUFFER_BIT);
|
|
774
757
|
}
|
|
775
|
-
|
|
776
|
-
this.m.viewport(0, 0, this.m.canvas.width, this.m.canvas.height),
|
|
758
|
+
Ut() {
|
|
759
|
+
this.m.viewport(0, 0, this.m.canvas.width, this.m.canvas.height), M(this.m, [0, 0, this.m.canvas.width, this.m.canvas.height]);
|
|
777
760
|
}
|
|
778
761
|
get context() {
|
|
779
762
|
return this.m;
|
|
780
763
|
}
|
|
781
764
|
get state() {
|
|
782
|
-
return this.
|
|
765
|
+
return this.yt;
|
|
783
766
|
}
|
|
784
|
-
|
|
767
|
+
kt(A) {
|
|
785
768
|
const t = G(this.m) ?? this.m.getParameter(this.m.VIEWPORT), e = { shader: A, gl: this.m, viewport: t }, B = /* @__PURE__ */ new Set();
|
|
786
|
-
for (const r of this.
|
|
787
|
-
for (const r of B) this.
|
|
788
|
-
this.
|
|
769
|
+
for (const r of this.xt) B.add(r.type);
|
|
770
|
+
for (const r of B) this.bt(r);
|
|
771
|
+
this.vt.YA(e, this.xt, this._t), this.xt.NA();
|
|
789
772
|
}
|
|
790
773
|
W() {
|
|
791
|
-
this.m.deleteBuffer(this.
|
|
792
|
-
for (const A of this.
|
|
774
|
+
this.m.deleteBuffer(this.ft), this.m.deleteBuffer(this.dt), this.xt.NA();
|
|
775
|
+
for (const A of this._t.values()) A.W();
|
|
793
776
|
}
|
|
794
777
|
}
|
|
795
778
|
const u = { readShort: (E, A) => (u.t.uint16[0] = E[A] << 8 | E[A + 1], u.t.int16[0]), readUshort: (E, A) => E[A] << 8 | E[A + 1], readUshorts(E, A, t) {
|
|
@@ -883,10 +866,10 @@ const u = { readShort: (E, A) => (u.t.uint16[0] = E[A] << 8 | E[A + 1], u.t.int1
|
|
|
883
866
|
const B = [], r = e.maxp.numGlyphs;
|
|
884
867
|
for (let i = 0; i < r; i++) B.push(null);
|
|
885
868
|
return B;
|
|
886
|
-
},
|
|
887
|
-
const t = u, e = E.
|
|
869
|
+
}, Wt(E, A) {
|
|
870
|
+
const t = u, e = E.Ht, B = E.loca;
|
|
888
871
|
if (B[A] === B[A + 1]) return null;
|
|
889
|
-
const r = p.findTable(e, "glyf", E.
|
|
872
|
+
const r = p.findTable(e, "glyf", E.Jt);
|
|
890
873
|
if (!r) return null;
|
|
891
874
|
let i = r[0] + B[A];
|
|
892
875
|
const s = {};
|
|
@@ -922,7 +905,7 @@ const u = { readShort: (E, A) => (u.t.uint16[0] = E[A] << 8 | E[A + 1], u.t.int1
|
|
|
922
905
|
} else s.parts = [], s.endPts = [], s.flags = [], s.xs = [], s.ys = [];
|
|
923
906
|
return s;
|
|
924
907
|
} } }, p = { parse: (E) => [((A, t, e, B) => {
|
|
925
|
-
const r = z, i = {
|
|
908
|
+
const r = z, i = { Ht: A, Vt: t, Jt: e };
|
|
926
909
|
for (const s in r) {
|
|
927
910
|
const Q = s, o = p.findTable(A, Q, e);
|
|
928
911
|
if (o) {
|
|
@@ -946,37 +929,37 @@ const u = { readShort: (E, A) => (u.t.uint16[0] = E[A] << 8 | E[A + 1], u.t.int1
|
|
|
946
929
|
}, T: z, B: u };
|
|
947
930
|
class F {
|
|
948
931
|
constructor() {
|
|
949
|
-
n(this, "
|
|
950
|
-
n(this, "
|
|
932
|
+
n(this, "Kt", /* @__PURE__ */ new Map());
|
|
933
|
+
n(this, "jt", /* @__PURE__ */ new Map());
|
|
951
934
|
}
|
|
952
|
-
|
|
953
|
-
const e = `${this.
|
|
954
|
-
if (this.
|
|
935
|
+
Zt(A, t) {
|
|
936
|
+
const e = `${this.Nt(A)}_${t}`;
|
|
937
|
+
if (this.Kt.has(e)) return this.Kt.get(e);
|
|
955
938
|
const B = A.cmap;
|
|
956
|
-
if (!B || !B.tables) return this.
|
|
939
|
+
if (!B || !B.tables) return this.Kt.set(e, 0), 0;
|
|
957
940
|
let r = 0;
|
|
958
|
-
for (const i of B.tables) if (i.format === 4 ? r = this.
|
|
959
|
-
return this.
|
|
941
|
+
for (const i of B.tables) if (i.format === 4 ? r = this.Xt(t, i) : i.format === 12 && (r = this.qt(t, i)), r > 0) break;
|
|
942
|
+
return this.Kt.set(e, r), r;
|
|
960
943
|
}
|
|
961
|
-
|
|
944
|
+
Ae(A, t) {
|
|
962
945
|
const e = t.codePointAt(0);
|
|
963
|
-
return e === void 0 ? 0 : this.
|
|
946
|
+
return e === void 0 ? 0 : this.Zt(A, e);
|
|
964
947
|
}
|
|
965
|
-
|
|
948
|
+
te(A, t) {
|
|
966
949
|
const e = A.hmtx;
|
|
967
950
|
return e && e.aWidth && e.aWidth.length !== 0 ? t < e.aWidth.length ? e.aWidth[t] : e.aWidth[e.aWidth.length - 1] : 0;
|
|
968
951
|
}
|
|
969
|
-
|
|
952
|
+
ee(A, t) {
|
|
970
953
|
const e = t / A.head.unitsPerEm, B = A.hhea.ascender * e, r = A.hhea.descender * e, i = A.hhea.lineGap * e;
|
|
971
954
|
return { ascender: B, descender: r, lineGap: i, lineHeight: B - r + i, unitsPerEm: A.head.unitsPerEm, scale: e };
|
|
972
955
|
}
|
|
973
|
-
|
|
974
|
-
this.
|
|
956
|
+
Be() {
|
|
957
|
+
this.Kt.clear(), this.jt.clear();
|
|
975
958
|
}
|
|
976
|
-
|
|
977
|
-
return `${A.
|
|
959
|
+
Nt(A) {
|
|
960
|
+
return `${A.Jt}_${A.Ht.length}`;
|
|
978
961
|
}
|
|
979
|
-
|
|
962
|
+
Xt(A, t) {
|
|
980
963
|
const e = t.endCount.length;
|
|
981
964
|
let B = -1;
|
|
982
965
|
for (let r = 0; r < e; r++) if (A <= t.endCount[r]) {
|
|
@@ -994,7 +977,7 @@ class F {
|
|
|
994
977
|
}
|
|
995
978
|
return 0;
|
|
996
979
|
}
|
|
997
|
-
|
|
980
|
+
qt(A, t) {
|
|
998
981
|
const e = t.groups.length / 3;
|
|
999
982
|
for (let B = 0; B < e; B++) {
|
|
1000
983
|
const r = t.groups[3 * B], i = t.groups[3 * B + 1], s = t.groups[3 * B + 2];
|
|
@@ -1005,43 +988,43 @@ class F {
|
|
|
1005
988
|
}
|
|
1006
989
|
class fA {
|
|
1007
990
|
constructor(A) {
|
|
1008
|
-
n(this, "
|
|
1009
|
-
this.
|
|
991
|
+
n(this, "Qe");
|
|
992
|
+
this.Qe = A;
|
|
1010
993
|
}
|
|
1011
|
-
|
|
994
|
+
se(A) {
|
|
1012
995
|
var e;
|
|
1013
996
|
const t = [];
|
|
1014
997
|
return (e = A.cmap) != null && e.tables ? (A.cmap.tables.forEach((B) => {
|
|
1015
998
|
if (B.format === 4) {
|
|
1016
|
-
const r = this.
|
|
999
|
+
const r = this.Ee(B);
|
|
1017
1000
|
t.push(...r);
|
|
1018
1001
|
} else if (B.format === 12) {
|
|
1019
|
-
const r = this.
|
|
1002
|
+
const r = this.ie(B);
|
|
1020
1003
|
t.push(...r);
|
|
1021
1004
|
}
|
|
1022
1005
|
}), [...new Set(t)]) : [];
|
|
1023
1006
|
}
|
|
1024
|
-
|
|
1025
|
-
return this.
|
|
1007
|
+
re(A, t) {
|
|
1008
|
+
return this.Qe.Ae(A, t) > 0;
|
|
1026
1009
|
}
|
|
1027
|
-
|
|
1028
|
-
for (const e of t) if (!this.
|
|
1010
|
+
ne(A, t) {
|
|
1011
|
+
for (const e of t) if (!this.re(A, e)) return !1;
|
|
1029
1012
|
return !0;
|
|
1030
1013
|
}
|
|
1031
|
-
|
|
1032
|
-
return t.filter((e) => this.
|
|
1014
|
+
ge(A, t) {
|
|
1015
|
+
return t.filter((e) => this.re(A, e));
|
|
1033
1016
|
}
|
|
1034
|
-
|
|
1035
|
-
return A.filter((t) => this.
|
|
1017
|
+
oe(A) {
|
|
1018
|
+
return A.filter((t) => this.ae(t));
|
|
1036
1019
|
}
|
|
1037
|
-
|
|
1020
|
+
Ee(A) {
|
|
1038
1021
|
const t = [];
|
|
1039
1022
|
if (!(A.startCount && A.endCount && A.idRangeOffset && A.idDelta)) return t;
|
|
1040
1023
|
for (let e = 0; e < A.startCount.length; e++) {
|
|
1041
1024
|
const B = A.startCount[e], r = A.endCount[e];
|
|
1042
1025
|
if (B !== 65535 || r !== 65535) {
|
|
1043
1026
|
for (let i = B; i <= r; i++)
|
|
1044
|
-
if (this.
|
|
1027
|
+
if (this.ce(A, i, e) > 0) try {
|
|
1045
1028
|
const s = String.fromCodePoint(i);
|
|
1046
1029
|
t.push(s);
|
|
1047
1030
|
} catch {
|
|
@@ -1050,7 +1033,7 @@ class fA {
|
|
|
1050
1033
|
}
|
|
1051
1034
|
return t;
|
|
1052
1035
|
}
|
|
1053
|
-
|
|
1036
|
+
ie(A) {
|
|
1054
1037
|
const t = [];
|
|
1055
1038
|
if (!A.groups) return t;
|
|
1056
1039
|
for (let e = 0; e < A.groups.length; e += 3) {
|
|
@@ -1064,7 +1047,7 @@ class fA {
|
|
|
1064
1047
|
}
|
|
1065
1048
|
return t;
|
|
1066
1049
|
}
|
|
1067
|
-
|
|
1050
|
+
ce(A, t, e) {
|
|
1068
1051
|
if (A.idRangeOffset[e] === 0) return t + A.idDelta[e] & 65535;
|
|
1069
1052
|
{
|
|
1070
1053
|
const B = A.idRangeOffset[e] / 2 + (t - A.startCount[e]) - (A.startCount.length - e);
|
|
@@ -1075,178 +1058,178 @@ class fA {
|
|
|
1075
1058
|
}
|
|
1076
1059
|
return 0;
|
|
1077
1060
|
}
|
|
1078
|
-
|
|
1061
|
+
ae(A) {
|
|
1079
1062
|
const t = A.codePointAt(0) || 0;
|
|
1080
1063
|
return !(t >= 0 && t <= 31 && t !== 9 && t !== 10 && t !== 13 || t >= 127 && t <= 159);
|
|
1081
1064
|
}
|
|
1082
1065
|
}
|
|
1083
1066
|
class dA {
|
|
1084
1067
|
constructor() {
|
|
1085
|
-
n(this, "
|
|
1068
|
+
n(this, "he");
|
|
1086
1069
|
const A = new F();
|
|
1087
|
-
this.
|
|
1070
|
+
this.he = new fA(A);
|
|
1088
1071
|
}
|
|
1089
1072
|
extractCharacters(A) {
|
|
1090
|
-
return this.
|
|
1073
|
+
return this.he.se(A);
|
|
1091
1074
|
}
|
|
1092
1075
|
filterProblematicCharacters(A) {
|
|
1093
|
-
return this.
|
|
1076
|
+
return this.he.oe(A);
|
|
1094
1077
|
}
|
|
1095
1078
|
characterExists(A, t) {
|
|
1096
|
-
return this.
|
|
1079
|
+
return this.he.re(A, t);
|
|
1097
1080
|
}
|
|
1098
1081
|
allCharactersExist(A, t) {
|
|
1099
|
-
return this.
|
|
1082
|
+
return this.he.ne(A, t);
|
|
1100
1083
|
}
|
|
1101
1084
|
}
|
|
1102
1085
|
class wA {
|
|
1103
1086
|
constructor(A) {
|
|
1104
|
-
n(this, "he");
|
|
1105
|
-
n(this, "ce");
|
|
1106
1087
|
n(this, "Ce");
|
|
1107
1088
|
n(this, "De");
|
|
1108
|
-
|
|
1089
|
+
n(this, "le");
|
|
1090
|
+
n(this, "Pe");
|
|
1091
|
+
this.le = A, this.Pe = new F(), this.Ce = document.createElement("canvas"), this.De = this.Ce.getContext("2d", { willReadFrequently: !0, alpha: !1 });
|
|
1109
1092
|
}
|
|
1110
1093
|
createTextureAtlas(A, t, e, B) {
|
|
1111
1094
|
const r = A.length, i = Math.ceil(Math.sqrt(r)), s = Math.ceil(r / i), Q = t.width * i, o = t.height * s, g = typeof B == "object" ? B : null;
|
|
1112
|
-
this.
|
|
1113
|
-
const a = this.
|
|
1114
|
-
return a.R(this.
|
|
1095
|
+
this.Ie(Q, o), this.ue(A, t, i, e, g);
|
|
1096
|
+
const a = this.le.St(Q, o, 1, { filter: "nearest" });
|
|
1097
|
+
return a.R(this.Ce), { framebuffer: a, columns: i, rows: s };
|
|
1115
1098
|
}
|
|
1116
|
-
|
|
1117
|
-
this.
|
|
1099
|
+
Ie(A, t) {
|
|
1100
|
+
this.Ce.width = A, this.Ce.height = t, this.Ce.style.width = A + "px", this.Ce.style.height = A + "px", this.De.imageSmoothingEnabled = !1, this.Ce.style.imageRendering = "pixelated", this.De.fillStyle = "black", this.De.fillRect(0, 0, A, t), this.De.textBaseline = "top", this.De.textAlign = "left", this.De.fillStyle = "white";
|
|
1118
1101
|
}
|
|
1119
|
-
|
|
1102
|
+
ue(A, t, e, B, r) {
|
|
1120
1103
|
const i = B / r.head.unitsPerEm;
|
|
1121
1104
|
for (let s = 0; s < A.length; s++) {
|
|
1122
|
-
const Q = s % e, o = Math.floor(s / e), g = A[s].character, a = this.
|
|
1105
|
+
const Q = s % e, o = Math.floor(s / e), g = A[s].character, a = this.we(r, g);
|
|
1123
1106
|
if (!a) continue;
|
|
1124
|
-
const h = g.codePointAt(0) || 0, l = this.
|
|
1125
|
-
this.
|
|
1107
|
+
const h = g.codePointAt(0) || 0, l = this.Pe.Zt(r, h), c = this.fe(r, l) * i, C = Q * t.width, d = o * t.height, I = C + 0.5 * t.width, w = d + 0.5 * t.height, m = Math.round(I - 0.5 * t.width), R = Math.round(w - 0.5 * B), $ = m + 0.5 * (t.width - c), V = R + r.hhea.ascender * i;
|
|
1108
|
+
this.de(a, $, V, i);
|
|
1126
1109
|
}
|
|
1127
1110
|
}
|
|
1128
|
-
|
|
1129
|
-
const e = t.codePointAt(0) || 0, B = this.
|
|
1111
|
+
we(A, t) {
|
|
1112
|
+
const e = t.codePointAt(0) || 0, B = this.Pe.Zt(A, e);
|
|
1130
1113
|
if (B === 0) return null;
|
|
1131
1114
|
if (A.glyf && A.glyf[B] !== null) return A.glyf[B];
|
|
1132
1115
|
if (p && p.T && p.T.glyf) {
|
|
1133
|
-
const r = p.T.glyf.
|
|
1116
|
+
const r = p.T.glyf.Wt(A, B);
|
|
1134
1117
|
return A.glyf && r && (A.glyf[B] = r), r;
|
|
1135
1118
|
}
|
|
1136
1119
|
return null;
|
|
1137
1120
|
}
|
|
1138
|
-
|
|
1121
|
+
fe(A, t) {
|
|
1139
1122
|
const e = A.hmtx;
|
|
1140
1123
|
return e && e.aWidth ? t < e.aWidth.length ? e.aWidth[t] : e.aWidth[e.aWidth.length - 1] : 0;
|
|
1141
1124
|
}
|
|
1142
|
-
|
|
1125
|
+
de(A, t, e, B) {
|
|
1143
1126
|
if (!A || !A.xs || A.noc === 0) return;
|
|
1144
1127
|
const { xs: r, ys: i, endPts: s, flags: Q } = A;
|
|
1145
1128
|
if (!(r && i && s && Q)) return;
|
|
1146
|
-
this.
|
|
1129
|
+
this.De.beginPath();
|
|
1147
1130
|
let o = 0;
|
|
1148
1131
|
for (let g = 0; g < s.length; g++) {
|
|
1149
1132
|
const a = s[g];
|
|
1150
1133
|
if (!(a < o)) {
|
|
1151
1134
|
if (a >= o) {
|
|
1152
1135
|
const h = t + r[o] * B, l = e - i[o] * B;
|
|
1153
|
-
this.
|
|
1136
|
+
this.De.moveTo(h, l);
|
|
1154
1137
|
let c = o + 1;
|
|
1155
1138
|
for (; c <= a; )
|
|
1156
1139
|
if (1 & Q[c]) {
|
|
1157
1140
|
const C = t + r[c] * B, d = e - i[c] * B;
|
|
1158
|
-
this.
|
|
1141
|
+
this.De.lineTo(C, d), c++;
|
|
1159
1142
|
} else {
|
|
1160
1143
|
const C = t + r[c] * B, d = e - i[c] * B;
|
|
1161
1144
|
let I = c + 1 > a ? o : c + 1;
|
|
1162
1145
|
if (1 & Q[I]) {
|
|
1163
1146
|
const w = t + r[I] * B, m = e - i[I] * B;
|
|
1164
|
-
this.
|
|
1147
|
+
this.De.quadraticCurveTo(C, d, w, m), c = I + 1;
|
|
1165
1148
|
} else {
|
|
1166
1149
|
const w = (C + (t + r[I] * B)) / 2, m = (d + (e - i[I] * B)) / 2;
|
|
1167
|
-
this.
|
|
1150
|
+
this.De.quadraticCurveTo(C, d, w, m), c = I;
|
|
1168
1151
|
}
|
|
1169
1152
|
}
|
|
1170
|
-
this.
|
|
1153
|
+
this.De.closePath();
|
|
1171
1154
|
}
|
|
1172
1155
|
o = a + 1;
|
|
1173
1156
|
}
|
|
1174
1157
|
}
|
|
1175
|
-
this.
|
|
1158
|
+
this.De.fill();
|
|
1176
1159
|
}
|
|
1177
1160
|
}
|
|
1178
1161
|
class mA {
|
|
1179
1162
|
constructor() {
|
|
1180
|
-
n(this, "
|
|
1181
|
-
this.
|
|
1163
|
+
n(this, "Qe");
|
|
1164
|
+
this.Qe = new F();
|
|
1182
1165
|
}
|
|
1183
1166
|
calculateMaxGlyphDimensions(A, t, e) {
|
|
1184
1167
|
let B = 0;
|
|
1185
|
-
const r = this.ee
|
|
1168
|
+
const r = this.Qe.ee(e, t), i = r.lineHeight;
|
|
1186
1169
|
for (const s of A) {
|
|
1187
|
-
const Q = this.
|
|
1170
|
+
const Q = this.Qe.Ae(e, s);
|
|
1188
1171
|
if (Q === 0) continue;
|
|
1189
|
-
const o = this.
|
|
1172
|
+
const o = this.Qe.te(e, Q) * r.scale;
|
|
1190
1173
|
B = Math.max(B, o);
|
|
1191
1174
|
}
|
|
1192
1175
|
return { width: Math.ceil(B), height: Math.ceil(i) };
|
|
1193
1176
|
}
|
|
1194
1177
|
getCharacterAdvanceWidth(A, t, e) {
|
|
1195
|
-
const B = this.ee
|
|
1196
|
-
return this.
|
|
1178
|
+
const B = this.Qe.ee(e, t), r = this.Qe.Ae(e, A);
|
|
1179
|
+
return this.Qe.te(e, r) * B.scale;
|
|
1197
1180
|
}
|
|
1198
1181
|
getFontMetrics(A, t) {
|
|
1199
|
-
return this.ee
|
|
1182
|
+
return this.Qe.ee(t, A);
|
|
1200
1183
|
}
|
|
1201
|
-
|
|
1202
|
-
this.
|
|
1184
|
+
Be() {
|
|
1185
|
+
this.Qe.Be();
|
|
1203
1186
|
}
|
|
1204
1187
|
}
|
|
1205
1188
|
class pA {
|
|
1206
1189
|
constructor() {
|
|
1207
|
-
n(this, "
|
|
1208
|
-
this.
|
|
1190
|
+
n(this, "Pe");
|
|
1191
|
+
this.Pe = new F();
|
|
1209
1192
|
}
|
|
1210
1193
|
createCharacterObjects(A, t) {
|
|
1211
1194
|
return A.map((e, B) => {
|
|
1212
|
-
const r = e.codePointAt(0) || 0, i = this.
|
|
1195
|
+
const r = e.codePointAt(0) || 0, i = this.pe(B);
|
|
1213
1196
|
let s = 0;
|
|
1214
1197
|
if (t.hmtx && t.hmtx.aWidth) {
|
|
1215
|
-
const Q = this.
|
|
1198
|
+
const Q = this.Pe.Zt(t, r);
|
|
1216
1199
|
Q > 0 && t.hmtx.aWidth[Q] !== void 0 && (s = t.hmtx.aWidth[Q]);
|
|
1217
1200
|
}
|
|
1218
1201
|
return { character: e, unicode: r, color: i, advanceWidth: s };
|
|
1219
1202
|
});
|
|
1220
1203
|
}
|
|
1221
|
-
|
|
1204
|
+
pe(A) {
|
|
1222
1205
|
return [A % 256 / 255, Math.floor(A / 256) % 256 / 255, Math.floor(A / 65536) % 256 / 255];
|
|
1223
1206
|
}
|
|
1224
|
-
|
|
1207
|
+
me(A, t) {
|
|
1225
1208
|
if (!T.l(typeof A == "string", "Character must be a string.", { method: "getCharacterColor", providedValue: A })) return [0, 0, 0];
|
|
1226
1209
|
const e = t.find((B) => B.character === A);
|
|
1227
1210
|
return e ? e.color : [0, 0, 0];
|
|
1228
1211
|
}
|
|
1229
|
-
|
|
1230
|
-
return T.l(typeof A == "string" && A.length > 0, "Characters must be a string with at least one character.", { method: "getCharacterColors", providedValue: A }) ? Array.from(A).map((e) => this.
|
|
1212
|
+
_e(A, t) {
|
|
1213
|
+
return T.l(typeof A == "string" && A.length > 0, "Characters must be a string with at least one character.", { method: "getCharacterColors", providedValue: A }) ? Array.from(A).map((e) => this.me(e, t) || [0, 0, 0]) : [[0, 0, 0]];
|
|
1231
1214
|
}
|
|
1232
1215
|
}
|
|
1233
|
-
class
|
|
1216
|
+
class yA {
|
|
1234
1217
|
constructor(A, t = 16) {
|
|
1235
|
-
n(this, "me");
|
|
1236
|
-
n(this, "_e", []);
|
|
1237
1218
|
n(this, "ve");
|
|
1238
|
-
n(this, "xe",
|
|
1239
|
-
n(this, "ye"
|
|
1240
|
-
n(this, "be",
|
|
1241
|
-
n(this, "Ge",
|
|
1242
|
-
n(this, "$e");
|
|
1243
|
-
n(this, "Me");
|
|
1219
|
+
n(this, "xe", []);
|
|
1220
|
+
n(this, "ye");
|
|
1221
|
+
n(this, "be", 16);
|
|
1222
|
+
n(this, "Ge", 0);
|
|
1223
|
+
n(this, "$e", 0);
|
|
1224
|
+
n(this, "Me", { width: 0, height: 0 });
|
|
1244
1225
|
n(this, "Ye");
|
|
1245
1226
|
n(this, "Te");
|
|
1246
1227
|
n(this, "ze");
|
|
1247
|
-
|
|
1228
|
+
n(this, "Fe");
|
|
1229
|
+
n(this, "Re");
|
|
1230
|
+
this.be = t, this.Te = new dA(), this.ze = new wA(A), this.Fe = new mA(), this.Re = new pA();
|
|
1248
1231
|
}
|
|
1249
|
-
async
|
|
1232
|
+
async Se(A) {
|
|
1250
1233
|
let t;
|
|
1251
1234
|
if (A) {
|
|
1252
1235
|
const e = await fetch(A);
|
|
@@ -1255,98 +1238,98 @@ class xA {
|
|
|
1255
1238
|
} else
|
|
1256
1239
|
t = await (await fetch(`data:font/truetype;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMs+QEyQAAAEoAAAAYGNtYXAg7yVJAAAFjAAACSBnbHlmuHLTdAAAErQAAGi0aGVhZFvXdUwAAACsAAAANmhoZWELAQUCAAAA5AAAACRobXR4BACDgAAAAYgAAAQEbG9jYQAy54AAAA6sAAAECG1heHABIgCCAAABCAAAACBuYW1lVs/OSgAAe2gAAAOicG9zdABpADQAAH8MAAAAIAABAAAAAQAAzOWHqV8PPPUAAAQAAAAAAHxiGCcAAAAAfGIYJwAAAAAEAAQAAAAACAACAAEAAAAAAAEAAAQAAAAAAAQAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAEBAAEAAAEBAIAAIAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAgQAAZAABQAEAgACAAAAAAACAAIAAAACAAAzAMwAAAAABAAAAAAAAACAAACLAABw4wAAAAAAAAAAWUFMLgBAACAmawQAAAAAAAQAAAAAAAFRAAAAAAMABAAAAAAgAAAEAAAABAAAAAQAAAAEAAGABAABAAQAAIAEAACABAAAgAQAAIAEAAGABAABAAQAAQAEAACABAABAAQAAIAEAACABAABAAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAAGABAAAgAQAAIAEAAGABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABgAQAAQAEAACABAAAAAQAAgAEAACABAAAgAQAAIAEAACABAACAAQAAAAEAAIABAABgAQAAgAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAAABAAAAAQAAAAEAAIABAADAAQAAAAEAAAABAAAgAQAAYAEAAAABAAAAAQAAIAEAAAA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AIAAAACA/YAAgAAAAIAAAP8AAoABAAAA/4AAAP+A/4AAgAAAAIAAAP8AA4AAAP8AAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAP+AAAD/gAAAAAAAAP8AAAAAgAAAAAAAAP+AAAD/gAAAAAAAAwCAAIAEAAQAABcAHQAjAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAACAAAAAgAAA/4AAAACAAAD9AAAA/4AAAACAAAD/gAAAAIAAgAAAAIAAAACAAAD/AAAAAQAAAP+AAAAEAAAA/4AAAP8AAAD/gAAAAIAAAP8AAAD/gAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAP+AAAD/gAAAAQD+gP8AAAAAgAAAAIAAAAABAYACgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAP6AAAAAAAABAQAAgAMABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/oAAAP+AAAD/gAAAAIAAAACAAAABgAAAAIAAAAAAAAEBAACAAwAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAAAgAAAAIAAAAGAAAAAgAAAAAAABQCAAYADgAQAAAMABwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAIAAAP+AAYAAgAAA/4D/AAEAAAABAAAA/wAAAP8AAAD/AAAAAQD/gACAAAD/gAGAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP+AAAAAAAABAQAAgAOAAwAACwAAAQEBAQEBAQEBAQEBAgAAgAAAAQAAAP8AAAD/gAAA/wAAAAEAAwAAAP8AAAD/gAAA/wAAAAEAAAAAgAAAAAAAAQCAAAACAAGAAAcAAAEBAQEBAQEBAQABAAAA/4AAAP8AAAAAgAGAAAD/AAAA/4AAAACAAAAAAAABAIABgAOAAgAAAwAAAQEBAQCAAwAAAP0AAgAAAP+AAAAAAAABAQAAgAIAAYAAAwAAAQEBAQEAAQAAAP8AAYAAAP8AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAwCAAIADgAQAAAsAEQAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAD/gAAAAIAAgAAAAIAAAACAAAD/gAAA/4AAAAEAAAAEAAAA/4AAAP2AAAD/gAAAAIAAAAKAAAAAAP8AAAAAgAAAAID/AP+AAAD/AAAAAYAAAAABAIAAgAOABAAADQAAAQEBAQEBAQEBAQEBAQEBgAEAAAABAAAA/QAAAAEAAAD/AAAAAIAAAACABAAAAP0AAAD/gAAAAIAAAAGAAAAAgAAAAIAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAAAIAAAACAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAA/wAAAAEAAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/wAAAAEAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAA/4AAAACAAAAAAAABAIAAgAOABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAP+AAAABAAAAAQAAAP8AAAD+AAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAAEAAAD9gAAAAQAAAAGAAAAAgAAAAAEAgACAA4AEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP4AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/gAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAP+AAAABAAAAAAAAAgCAAIADgAQAABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAYAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAoAAAP6A/wAAAAEAAAEAgACAA4AEAAAPAAABAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AEAAAA/oAAAP+AAAD+gAAAAYAAAACAAAABAAAA/4AAAAAAAAMAgACAA4AEAAATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAACAAAD/gAAAAIAAgAAAAQAAAP8AAAABAAAABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAA/wAAAAEA/oD/AAAAAQAAAAACAIAAgAOABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD+gAAA/4AAAACAAIAAAAEAAAAEAAAA/4AAAP0AAAABAAAAAIAAAAGAAAAAAP6AAAABgAACAQABAAIAA4AAAwAHAAABAQEBAQEBAQEAAQAAAP8AAAABAAAA/wADgAAA/wAAAP+AAAD/AAAAAAIAgACAAgADgAADAAsAAAEBAQEBAQEBAQEBAQEAAQAAAP8AAAABAAAA/4AAAP8AAAAAgAOAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAABAQAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQKAAQAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAACAIABgAOAAwAAAwAHAAABAQEBAQEBAQCAAwAAAP0AAAADAAAA/QADAAAA/4AAAP+AAAD/gAAAAAEAgACAAwAEAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAIAgACAA4AEAAATABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP8AAAD/AAAAAIAAgAEAAAD/AAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAA/4AAAACAAAD+AAAA/wAAAAACAIAAgAOABAAAEQAVAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP6AAAAAgAAA/wAAAAGAAAD+AAAA/4AAAACAAgAAgAAA/4AEAAAA/4AAAP6AAAABAAAAAIAAAP2AAAD/gAAAAIAAAAKAAAD+AAAA/4AAAAAAAAIAgACAA4AEAAAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAAAIAAAACAAAD/AAAA/wAAAP8AAAAAgAAAAIAAAAAAAQAAAAQAAAD/gAAA/4AAAP2AAAABAAAA/wAAAAKAAAAAgAAA/4D/AAAAAQAAAwCAAIADgAQAAAsADwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAAAIAAAP+AAAD9gAEAAAABAAAA/wAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAADAP8AAAABAP6A/wAAAAEAAAAAAQCAAIADgAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAQAAAAEAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAACAIAAgAOABAAACwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAEAAAAAgAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAADAP2AAAAAgAAAAYAAAACAAAEAgACAA4AEAAAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/wAAAAEAAAABAAAA/4AAAP4AAAD/gAAAAIAEAAAA/4AAAP+AAAAAgAAA/wAAAP+AAAD/AAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAABAIAAgAOABAAACQAAAQEBAQEBAQEBAQCAAwAAAP4AAAABAAAA/wAAAP8ABAAAAP+AAAD/AAAA/4AAAP6AAAAAAQCAAIADgAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/4AAAAGAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAQAAAACAAAD+gAAA/4AAAACAAAACgAAAAAEAgACAA4AEAAALAAABAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP8AAAD/AAAA/wAEAAAA/gAAAAIAAAD8gAAAAQAAAP8AAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIADAAAA/wAAAAEAAAD9AAAAAQAAAP8ABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAAAAQCAAIAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAMAAAD/gAAA/4AAAP4AAAD/gAAAAQAAAAEAAAD+gAQAAAD/gAAA/YAAAP+AAAAAgAAAAQAAAP8AAAACgAAAAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAAEAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAQAAAD/AAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAAAAAQCAAIADgAQAAAUAAAEBAQEBAQCAAQAAAAIAAAD9AAQAAAD9AAAA/4AAAAABAIAAgAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8ABAAAAP+AAAD/gAAAAIAAAACAAAD8gAAAAgAAAP+AAAAAgAAA/gAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAEAAAA/4AAAP+AAAD/gAAAAYAAAPyAAAABAAAAAIAAAACAAAD+AAAAAAAAAgCAAIADgAQAAAsADwAAAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAD9gAAAAoAAAgCAAIADgAQAAAkADQAAAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP6AAAD/AAEAAAABAAAABAAAAP+AAAD+gAAA/4AAAP8AAAADAP6AAAABgAAAAAIAgACABAAEAAAPABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAD/gAAAAIAAAAQAAAD/gAAA/gAAAP8AAAAAgAAA/4AAAACAAAACgAAAAAD9gAAAAIAAAACAAAABgAACAIAAgAOABAAAEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AAQAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAwD/AAAAAQAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/oAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAAAAAAAQCAAIADgAQAAAcAAAEBAQEBAQEBAIADAAAA/wAAAP8AAAD/AAQAAAD/gAAA/QAAAAMAAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAP+ABAAAAP0AAAADAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIADgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAD/gAAA/wAAAP+AAAD/gAQAAAD+AAAAAgAAAP4AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAIAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAQAAAP8AAAD/gAAA/4AAAP+AAAD/AAQAAAD+AAAAAIAAAP+AAAACAAAA/IAAAACAAAAAgAAA/4AAAP+AAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/AAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP8AAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAA/wAAAAEAAAAAgAAAAIAAAACAAAAAAAABAIAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAACAAAAAAAABAIAAgAOABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/gAAA/4AAAAIAAAD9AAAAAIAAAACAAAAAgAAAAIAAAP4ABAAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/wAAAAEAAAD+AAQAAAD/gAAA/YAAAP+AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/gAAAAEAAAD/AAQAAAD8gAAAAIAAAAKAAAAAAAABAIACAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAEAAAMAAAEBAQEAgAMAAAD9AAEAAAD/gAAAAAAAAQEAAoACgAQAAAkAAAEBAQEBAQEBAQEBAAEAAAAAgAAA/4AAAP+AAAD/gAQAAAD/gAAA/wAAAACAAAAAgAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQACgAAA/4AAAP+AAAD/AAAAAQAAAP6AAAD/gAAAAIADAAAA/YAAAACAAAABgAAA/oAAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/gAAA/YABAAAAAQAAAAQAAAD/AAAA/4AAAP6AAAD/gAAAAgD+gAAAAYAAAAABAIAAgAOAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAAAQAAAP+AAAD+AAAA/4AAAACAAwAAAP+AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAoABAAAA/YAAAP+AAAAAgAAAAYD/AAAAAQAAAAQAAAD8gAAAAIAAAAGAAAAAgAAA/4D+gAAAAYAAAAACAIAAgAOAAwAADQARAAABAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/gAAAAGAAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP8AAAD/gAAA/4AAAACAAAABgAAAAAD/gAAAAIAAAAABAQAAgAOAA4AACwAAAQEBAQEBAQEBAQEBAYACAAAA/oAAAAEAAAD/AAAA/wAAAACAA4AAAP+AAAD/AAAA/4AAAP8AAAACgAAAAAAAAgCAAIADgAOAAA8AEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAABgAAA/oAAAP+AAAAAgACAAAABAAAAA4AAAP+AAAD+AAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAAP8AAAABAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/AAAA/wAAAP8ABAAAAP8AAAD/gAAA/gAAAAIAAAD+AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP+AAAD/gAAA/YAAAAACAIAAgAOABAAAAwAPAAABAQEBAQEBAQEBAQEBAQEBAoABAAAA/wAAAAEAAAD/gAAA/gAAAP+AAAABAAAAAQAEAAAA/4AAAP+AAAD+AAAA/4AAAACAAAABAAAA/wAAAAABAIAAgAOAA4AAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAQAAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AA4AAAP8AAAAAgAAA/4AAAP8AAAD/gAAA/4AAAACAAAAAgAAA/wAAAAAAAAEBgACAAwAEAAAHAAABAQEBAQEBAQGAAQAAAACAAAD/AAAA/4AEAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIAEAAMAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAMAAAD/gAAAAIAAAP+AAAD+AAAAAYAAAP+AAAAAgAAA/oAAAAIAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAABAAAAAIAAAP8AAAD/gAAA/4AAAP8AAwAAAP+AAAAAgAAA/4AAAP4AAAABgAAA/4AAAP8AAAAAAAACAIAAgAOAAwAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP6AAAD/gAAAAIAAAAGAAAAAAP6AAAABgAACAIAAgAOAAwAACQANAAABAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAA/oAAAP8AAQAAAAEAAAADAAAA/4AAAP+AAAD/gAAA/wAAAAIA/4AAAACAAAAAAgCAAIAEAAMAAA0AEQAAAQEBAQEBAQEBAQEBAQEBAQEBAQACgAAAAIAAAP+AAAD/AAAA/oAAAP+AAAAAgACAAAABAAAAAwAAAP6AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAA/4AAAACAAAAAAQEAAIADgAMAAAkAAAEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP+AAAD/AAMAAAD/gAAA/wAAAAEAAAD+AAAAAAEAgACABAADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP6AAAABgAAAAIAAAP+AAAD9AAAAAgAAAP6AAAD/gAAAAIADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAP8AAAAAgAAAAQAAAP+AAAD+gAAA/4AAAP+AAAAAgAOAAAD/gAAA/4AAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAQAAAP+AAAD/gAAA/oAAAP+AAwAAAP4AAAAAgAAAAYAAAP2AAAAAgAAA/4AAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+AAwAAAP6AAAABgAAA/oAAAP+AAAD/gAAAAIAAAACAAAAAAAABAIAAgAQAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/4AAAP8AAAD/gAAA/wAAAP+AAwAAAP6AAAAAgAAA/4AAAAGAAAD+AAAA/4AAAACAAAD/gAAAAIAAAAAAAAEAgACAA4ADAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP8AAAD/AAAAAIAAAACAAAD/gAAA/4ADAAAA/4AAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAD/gAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAAGAAAD+gAAA/4ADAAAA/wAAAAEAAAD+AAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP+AAAD/gAAA/4AAAAGAAAD9AAAAAIAAAACAAAAAgAAA/oADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAA/wAAAP+AAAAAgAAAAQAAAP6AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAAABAYAAgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPyAAAAAAAABAQAAgAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAGAAAAAgAAAAIAAAP+AAAD/gAAA/oAAAAEAAAAAgAAA/4AAAP8ABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAAAAEAgAGAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAACAAAD/gAAA/wAAAP8AAAD/gAAAAIADAAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAYAAAAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAAA/wAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAABAAAAAQAAAACAAAAAgAAAAAAAAQIAAAAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD8AAAAAAAAAgCAAIADgAQAABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP8AAAABAAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAA/wAAAACAAAAAgAGAAIAAAP+ABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAAAAAAAP+AAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAAAgAAA/wAAAAEAAAD/AAAA/wAAAP8AAAABAAAA/wAAAACAAAD/gAQAAAD+gAAAAYAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABACAAIAEAAQAABcAGwAfACMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP4AAAABgAAAAIAAAACAAAD/gAAA/YAAAAIAAAD+gAAA/4AAAP+AAAAAgAEAAAAAgAAAAQAAgAAA/4D9AACAAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAACAAAAAgAAAAQAAAP8A/4AAAACAAQAAAP+AAAD+gAAA/4AAAAAEAIAAgAQAA4AAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAQIAAAAEAAQAAAkAAAEBAQEBAQEBAQEDgACAAAD+AAAAAIAAAACAAAAAgAQAAAD8AAAAAQAAAAEAAAABAAAAAAgAAAAABAAEAAADAAcACwAPABMAFwAbAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAA/wACAAEAAAD/AP8AAQAAAP8AAgABAAAA/wD9AAEAAAD/AAIAAQAAAP8A/wABAAAA/wACAAEAAAD/AAQAAAD/AAAAAQAAAP8AAAAAAAAA/wAAAAEAAAD/AAAAAAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQIAAAADAAQAAAMAAAEBAQECAAEAAAD/AAQAAAD8AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP6AAAD/gAAA/oAAAAABAgAAAAQAAgAAAwAAAQEBAQIAAgAAAP4AAgAAAP4AAAAAAAAEAIAAAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+ABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAAABAAAAPwAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAoABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAD/gAOAAAD+AAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAA/wAAAAEAAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAAAEAAAA/gAAAP+AAAD/gAAA/4AAAP+ABAAAAPwAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIAEAAOAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAOAAAD/gAAAAIAAAP8AAAABAAAA/oAAAAGAAAD9AAAAAIAAAP+AAAABAAAA/wAAAAGAAAD+gAAAAAAAAQAAAAACAAQAAAkAAAEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD+AAQAAAD/AAAA/wAAAP8AAAD/AAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQKAAYAAAP8AAAD/AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAEAAAA/wAAAP+AAAD/gAAA/wAAAP8AAAABgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD8AAAAAIAAAACAAAAAgAIAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgAAAAAEAAQAAAMABwAAAQEBAQEBAQEAAAIAAAD+AAIAAgAAAP4ABAAAAP4AAAAAAAAA/gAAAAAEAAACAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8ABAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAABAIAAAAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQECAAEAAAD/AAEAAQAAAP8A/wABAAAA/wABAAEAAAD/AAQAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAEDAAAABAAEAAADAAABAQEBAwABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD9AAAA/wAEAAAA/wAAAP0AAAAAAQAAAAABAAQAAAMAAAEBAQEAAAEAAAD/AAQAAAD8AAAAAAAAAwCAAIADAAOAAAMABwALAAABAQEBAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AAQAAgAAA/4ADgAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAAABAYABgAQABAAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAAEAAAD+gAAA/4AAAP+ABAAAAP8AAAD/gAAA/wAAAACAAAAAgAAAAAAAAQAAAYACgAQAAAsAAAEBAQEBAQEBAQEBAQGAAQAAAP+AAAD/gAAA/oAAAAEAAAAAgAQAAAD+gAAA/4AAAP+AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAwABAAAA/AAAAAEAAAABAAAAAQAEAAAA/AAAAAKAAAAAgAAAAIAAAAABAIAAgAMABAAACwAAAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP0AAAD/gAAAAIAAAAEAAAAAgAAAAAAAAQAAAAAEAAQAAAUAAAEBAQEBAQAAAQAAAAMAAAD8AAQAAAD9AAAA/wAAAAACAIAAgAMAAoAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQABgAAAAIAAAP+AAAD+gAAAAQAAAP8A/4AAgAAA/4ACgAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAMABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAABAAAA/wAAAAEA/oAAgAAA/4AEAAAA/QAAAP+AAAAAgAAAAQAAAACAAAD/gAAA/wAAAAABAIAAgAQABAAADQAAAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP+AAAD9gAAA/4AAAACAAAABAAAAAIAAAAACAAAAAAQABAAAAwAHAAABAQEBAQEBAQAABAAAAPwAAQAAAAIAAAAEAAAA/AAAAAMA/gAAAAIAAAEAgACABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAD/gAAA/oAAAP+AAAAAgAAAAQAEAAAA/4AAAP+AAAD/gAAA/oAAAP+AAAAAgAAAAQAAAACAAAAAAQAAAAACgAKAAAsAAAEBAQEBAQEBAQEBAQAAAYAAAACAAAAAgAAA/wAAAP+AAAD/AAKAAAD/gAAA/4AAAP6AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD/AAAA/QAEAAAA/AAAAAMAAAAAAQCAAIAEAAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAABAAAA/wAAAP+AAAD+gAAA/4AAAACAAAABAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAAEAAAAAgAAAAAEBgAAABAACgAALAAABAQEBAQEBAQEBAQECgAGAAAD/AAAA/4AAAP8AAAAAgAAAAIACgAAA/wAAAP+AAAD/AAAAAYAAAACAAAAAAAABAAAAAAQABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAPwABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAABAAADAAABAQEBAAAEAAAA/AABAAAA/wAAAAAAAAEAAAAABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQEDgACAAAD8AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAEAAAA/AAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAQAAAgAEAAQAAAMAAAEBAQEAAAQAAAD8AAQAAAD+AAAAAAAAAgCAAIACAAOAAAMABwAAAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAAEAIAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAABAAAAPyAAAADAP+AAAAAgP8A/4AAAACA/wD/gAAAAIAAAQAAAAAEAAQAAAUAAAEBAQEBAQMAAQAAAPwAAAADAAQAAAD8AAAAAQAAAAACAIAAgAQABAAAAwAHAAABAQEBAQEBAQCAA4AAAPyAAYAAAACAAAAEAAAA/IAAAAIA/4AAAACAAAMAgACABAAEAAADAAcACwAAAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgP4A/4AAAACAAAAABAAAAIAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD8AAAABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAYAgACABAAEAAADAAcACwAPABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/oAAAACAAAD+gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAID/AP+AAAAAgAAA/4AAAACAAAEAgACAAQADgAADAAABAQEBAIAAgAAA/4ADgAAA/QAAAAAAAAUAgACABAAEAAADAAcACwAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/YAAAACAAAABgAAAAIAAAAQAAAD8gAAAAwD/gAAAAIAAAP+AAAAAgP4A/4AAAACAAAD/gAAAAIAAAAABAAADAAQABAAAAwAAAQEBAQAABAAAAPwABAAAAP8AAAAAAAAHAIAAgAQABAAAAwAHAAsADwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAABgAAAAIAAAP2AAAAAgAAAAYAAAACAAAD9gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAIAAAP+AAAAAgP8A/4AAAACAAAD/gAAAAIAAAAAEAAAAAAQAAgAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8AAgAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQAAAAAEAAQAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAQAAAD/gAAA/4AAAP+AAAD9gAAAAAEBAAAAAgAEAAADAAABAQEBAQABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQECgAGAAAD8AAAAAIAAAACAAAAAgAAAAQAEAAAA/AAAAAGAAAABAAAAAIAAAACAAAAAAAABAAABAAQAAgAAAwAAAQEBAQAABAAAAPwAAgAAAP8AAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAgACAAAA/AAAAACAAAAAgAAAAIAAAACABAAAAPwAAAACAAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEDAAEAAAD8AAAAAQAAAAEAAAABAAIAAAD+AAAAAIAAAACAAAAAgAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAIAAAAAgAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/4AAAP4AAAAAAAADAAAAAAQABAAAGwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAIAAYAAAACAAAD/gAAA/4AAAP+AAAD/gP4AAIAAAACAAAAAgAAAAIAAAP6AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAQAAAP+AAAD+gAAAAIAAAACAAAAAgAAA/oAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAIAAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAGAAAABAAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAAAAAAEAAAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAYAAAP6AAgABgAAA/oD9gAGAAAD+gAIAAYAAAP6ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAP6AAAAAAQIAAgAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD+AAAAAAAABACAAIAEAAQAAAMABwAjACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAD/AAGAAQAAAP8A/gAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4ABgACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAAAAA/wAAAP+AAAD/gAAAAIAAAACAAAABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAGAAAD/gAAAAAQAAAAABAAEAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ADgACAAAD/gPyAAIAAAP+AA4AAgAAA/4AEAAAA/4AAAACAAAD/gAAA/QAAAP+AAAAAgAAA/4AAAAABAAAAAAIAAgAAAwAAAQEBAQAAAgAAAP4AAgAAAP4AAAAAAAAEAAAAAAIABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAQABAAAA/wD/AAEAAAD/AAEAAQAAAP8ABAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAQCAAQADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAAGAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAOAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAAAABAQABAAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAACAAAD+gAAAAYAAAP+AAAABAAAAAIAAAAAAAAEBAAEABAADgAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQIAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAP6AAAABgAAA/4ADgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAOAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAAAAQAAAP+AAAAAAAABAQAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAA/4AAAP6AAAD/gAAAAIAAAACABAAAAP8AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAAAACAIAAgAOAA4AAAwAJAAABAQEBAQEBAQEBAIADAAAA/QAAgAAAAgAAAP8AAAADgAAA/QAAAAKA/gAAAAEAAAABAAAAAAIAgACABAAEAAAbACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAD/gAAAAIAAAACAAAAAgAAA/4AAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4D/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAEAAAIABAADAAADAAABAQEBAAAEAAAA/AADAAAA/wAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/gAEAAAA/gAAAP+AAAD/gAAA/4AAAP+AAAAAAAABAAACAAIABAAAAwAAAQEBAQAAAgAAAP4ABAAAAP4AAAAAAAACAQAAgAOAA4AAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP8AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAACAAAAAgAAA/wAAAACAAIAAAACAAAADgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgP+AAAAAgAADAAAAAAQABAAACwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAGAAAD/gAAA/4AAAP+AAAD/gAAAAIACgAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgACAAIAAAP+AAAD+gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAAAYAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAA/oAAAP6AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgCAAIADgAQAAA8AHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAABAAAAAIAAAP+AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAgAAA/4AAAP8AAAD/AAAA/4AAAACABAAAAP+AAAAAgAAA/wAAAP+AAAAAgAAA/4AAAAEAAAD+gAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAABAAAAAAQAA4AACwAAAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD8AAAAAIAAAACAA4AAAP+AAAD/gAAA/YAAAAKAAAAAgAAAAAAAAQAAAAACAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAAAAAQIAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDgACAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQCAAIAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/oAAAAEAAAD/AAAAAYAAAACAAAAAgAAAAIAAAAAAACAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AEMARwBLAE8AUwBXAFsAXwBjAGcAawBvAHMAdwB7AH8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gPyAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/YAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D8gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gP2AAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/IAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAQAAAAAEAAQAAAsAAAEBAQEBAQEBAQEBAQAABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/oAEAAAA/oAAAP8AAAD/gAAA/4AAAP+AAAAAAAABAAABgAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAAAAAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP2AAAACAAAAAIAAAACAAAAAAAABAYAAAAQAAoAABQAAAQEBAQEBAYACgAAA/oAAAP8AAoAAAP8AAAD+gAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAAACgAAAAIAAAACAAAAAgAAA/AAEAAAA/wAAAP8AAAD/AAAA/wAAAAACAAAAAAQABAAAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAAAEAAAAEAAAA/4AAAP+AAAD/gAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAgAAAAIAAAP8A/wAAAAEAAAEBgAGABAAEAAAFAAABAQEBAQEBgAEAAAABgAAA/YAEAAAA/oAAAP8AAAAAAQAAAAACgAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD+AAAAAoAAAACAAAAAgAAAAAAAAQGAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQGAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAQAAAACAAAAAAAABAAABgAQABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAgAAAP2AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAABgAQAAoAAAwAAAQEBAQAABAAAAPwAAoAAAP8AAAAAAAABAYAAAAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPwAAAAAAAABAYAAAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAKAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD+AAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD9gAAAAgAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAgAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQAAAYACgAKAAAMAAAEBAQEAAAKAAAD9gAKAAAD/AAAAAAAAAQGAAAACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD9gAAAAAAAAQAAAYAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAABAAAAAIAAAAEAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAYACgAAA/AAAAACAAAAAgAAAAIAEAAAA/AAAAAEAAAABAAAAAQAAAAABAAAAAAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAA/oAAAAEAAAABAAAAAIAAAACABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAQAAAAEAAAD+gAAA/wAAAP+AAAD/gAAA/4AEAAAA/wAAAP8AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAABAAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAACgAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAABAAAAAIAAAAAAAAEAAAAABAAEAAAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQAAAAACgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD9gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAQAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAKAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAYACgAQAAAMAAAEBAQEBgAEAAAD/AAQAAAD9gAAAAAAAAQGAAYAEAAKAAAMAAAEBAQEBgAKAAAD9gAKAAAD/AAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAABAAAAAAQABAAAIwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQGAAYACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD/AAAAAAAAAQAAAAAEAAKAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAAAAEAAAGAAoAEAAAFAAABAQEBAQEBgAEAAAD9gAAAAYAEAAAA/YAAAAEAAAAAAQAAAAACgAKAAAUAAAEBAQEBAQAAAoAAAP8AAAD+gAKAAAD9gAAAAYAAAAABAAAAAAQABAAAHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAQAAAACAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEBgAEAAAABgAAA/oAAAP8AAAD+gAAAAYAEAAAA/oAAAP8AAAD+gAAAAYAAAAEAAAAAAAABAAAAAAQAAoAABwAAAQEBAQEBAQEAAAQAAAD+gAAA/wAAAP6AAoAAAP8AAAD+gAAAAYAAAAAAAAEBgAAABAAEAAAHAAABAQEBAQEBAQGAAQAAAAGAAAD+gAAA/wAEAAAA/oAAAP8AAAD+gAAAAAAAAQAAAAACgAQAAAcAAAEBAQEBAQEBAYABAAAA/wAAAP6AAAABgAQAAAD8AAAAAYAAAAEAAAAAAAABAAABgAQABAAABwAAAQEBAQEBAQEBgAEAAAABgAAA/AAAAAGABAAAAP6AAAD/AAAAAQAAAAAAAAQBAAEAAwADAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAYABAAAA/wD/gACAAAD/gAGAAIAAAP+A/wABAAAA/wADAAAA/4AAAAAAAAD/AAAAAQAAAP8AAAAAAAAA/4AAAAACAIAAgAOAA4AACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADgAAA/4AAAP4AAAD/gAAAAIAAAAIAAAD/gP8AAAABAAACAAAAAAQABAAAEwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAgAAA/4AAAACAAAABAAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAAAIAAAAAgAAA/4D/gAAA/wAAAP+AAAAAgAAAAQAAAACAABAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP+AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4AEAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAQAAAAAAQABAAAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwA3ADsAPwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D8gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAwCAAIADgAQAABcAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAAEAAAD/AAAAAIAAAP+AAAABAAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAP+AAAAAgAAA/4AAAACAAAAEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAYAAAACAAAD/gP+AAAAAgP8A/4AAAACAAAAAAQCAAIADgAOAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP+AAAD/AAAA/4AAAP+AAAAAgAOAAAD/gAAA/wAAAP+AAAD/AAAAAQAAAACAAAABAAAAAAAAAgCAAIADgAOAAAMACQAAAQEBAQEBAQEBAQCAAwAAAP0AAYAAAP8AAAACAAAAA4AAAP0AAAACgP8AAAD/AAAAAgAAAAABAIAAgAOAA4AAAwAAAQEBAQCAAwAAAP0AA4AAAP0AAAAAAAACAIAAgAOAA4AAAwALAAABAQEBAQEBAQEBAQEAgAMAAAD9AACAAAACAAAA/4AAAP8AAAADgAAA/QAAAAKA/gAAAAIAAAD/AAAAAQAAAQAAAAAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAAAAgAAAACAAAAAAAABAQABAAMAAwAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAP+AAAD/AAAA/4AAAACAAwAAAP+AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAQAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAACAAAD/gAAA/4AAAAEAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+AAAAAIAAAAGAAAAAgAAA/gAAAAGAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgAAA/4AAAACA/4D/gAAAAIAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+gAAAAYAAAP4AAAAAgAAAAYAAAACAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgP+A/4AAAACAAAD/gAAAAIAABgCAAIAEAAQAABMAFwAbAB8AIwAnAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAAAAEAAAAAgAAAAAAAgAAA/oAAgAAA/4ACAACAAAD/gP4AAIAAAP+AAgAAgAAA/4AEAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAAAIAAAACAAAAAgAAA/4D/gAAAAIABAAAA/4AAAACAAAD/gAAA/oAAAP+AAAAAgAAA/4AAAAACAQAAgAOABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP+AAAD/gAAAAIAAAP+AAAD/gAAA/4AAAACAAAD/gAAAAQAAAP8A/4AAgAAA/4AEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAQABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYACgAAA/4AAAP+AAAD/gAAAAIAAAP+AAAD+gAAAAQAAAP8AAAABAAAAAIAAAP8A/wAAgAAA/4AEAAAA/gAAAAEAAAD/gAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAIAAAACAAAD+gAAA/wAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABAAAAAIAAAACAAAAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP+AAAAAgAAAAQAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAABAAAAAIAAAP+ABAAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABgAAA/4AAAACAAAAAAAABAIAAgAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACABAAAAP+AAAAAgAAA/4AAAP6AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAABgAAAAAAAAQCAAIAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAQAAAsAAAEBAQEBAQEBAQEBAQIAAYAAAP8AAAD/gAAA/wAAAACAAAAAgAQAAAD/AAAA/gAAAP+AAAABAAAAAIAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQGAAoAAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AAAP8AAAAAgAAAAIAEAAAA/QAAAP+AAAABAAAAAIAAAAEAAAD+AAAA/4AAAAEAAAAAgAAAAAAAAAAYASYAAQAAAAAAAAAIAAAAAQAAAAAAAQAIAAgAAQAAAAAAAgAHABAAAQAAAAAAAwAIABcAAQAAAAAABAAQAB8AAQAAAAAABQALAC8AAQAAAAAABgAIADoAAQAAAAAACQAJAEIAAQAAAAAACgA6AEsAAQAAAAAADQARAIUAAQAAAAAADgAyAJYAAQAAAAAAEwAMAMgAAwABBAkAAAAQANQAAwABBAkAAQAQAOQAAwABBAkAAgAOAPQAAwABBAkAAwAQAQIAAwABBAkABAAgARIAAwABBAkABQAWATIAAwABBAkABgAQAUgAAwABBAkACQASAVgAAwABBAkACgB0AWoAAwABBAkADQAiAd4AAwABBAkADgBkAgAAAwABBAkAEwAYAmQoYykgMjAyMlVyc2FGb250UmVndWxhclVyc2FGb250VXJzYUZvbnQgUmVndWxhclZlcnNpb24gMS4wVXJzYUZvbnRVcnNhRnJhbmtBbiBvcGVuIGxpY2VuY2UgZ2VuZXJhbCBwdXJwb3NlIHRleHRtb2RlIGZvbnQgYnkgVXJzYUZyYW5rQ0MwIDEuMCBVbml2ZXJzYWxodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wL0hlbGxvIFdvcmxkIQAoAGMAKQAgADIAMAAyADIAVQByAHMAYQBGAG8AbgB0AFIAZQBnAHUAbABhAHIAVQByAHMAYQBGAG8AbgB0AFUAcgBzAGEARgBvAG4AdAAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwAFUAcgBzAGEARgBvAG4AdABVAHIAcwBhAEYAcgBhAG4AawBBAG4AIABvAHAAZQBuACAAbABpAGMAZQBuAGMAZQAgAGcAZQBuAGUAcgBhAGwAIABwAHUAcgBwAG8AcwBlACAAdABlAHgAdABtAG8AZABlACAAZgBvAG4AdAAgAGIAeQAgAFUAcgBzAGEARgByAGEAbgBrAEMAQwAwACAAMQAuADAAIABVAG4AaQB2AGUAcgBzAGEAbABoAHQAdABwAHMAOgAvAC8AYwByAGUAYQB0AGkAdgBlAGMAbwBtAG0AbwBuAHMALgBvAHIAZwAvAHAAdQBiAGwAaQBjAGQAbwBtAGEAaQBuAC8AegBlAHIAbwAvADEALgAwAC8ASABlAGwAbABvACAAVwBvAHIAbABkACEAAAADAAAAAAAAAGYAMwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\r
|
|
1257
1240
|
`)).arrayBuffer();
|
|
1258
|
-
await this.
|
|
1241
|
+
await this.Oe(t), this.ve = p.parse(t)[0], await this.Le();
|
|
1259
1242
|
}
|
|
1260
|
-
|
|
1261
|
-
if (A === void 0) return this.
|
|
1262
|
-
this.
|
|
1263
|
-
const t = this.
|
|
1264
|
-
this.
|
|
1243
|
+
Ue(A) {
|
|
1244
|
+
if (A === void 0) return this.be;
|
|
1245
|
+
this.be = A, this.Me = this.Fe.calculateMaxGlyphDimensions(this.xe.map((e) => e.character), this.be, this.ve);
|
|
1246
|
+
const t = this.ze.createTextureAtlas(this.xe, this.Me, this.be, this.ve);
|
|
1247
|
+
this.ye = t.framebuffer, this.Ge = t.columns, this.$e = t.rows;
|
|
1265
1248
|
}
|
|
1266
|
-
async
|
|
1249
|
+
async ke(A) {
|
|
1267
1250
|
try {
|
|
1268
1251
|
const t = await fetch(A);
|
|
1269
1252
|
if (!t.ok) throw new f(`Failed to load font file: ${t.status} ${t.statusText}`);
|
|
1270
1253
|
const e = await t.arrayBuffer();
|
|
1271
|
-
await this.
|
|
1254
|
+
await this.Oe(e);
|
|
1272
1255
|
const B = p.parse(e);
|
|
1273
1256
|
if (!B || B.length === 0) throw Error("Failed to parse font file");
|
|
1274
|
-
this.
|
|
1257
|
+
this.ve = B[0], await this.Le();
|
|
1275
1258
|
} catch (t) {
|
|
1276
1259
|
throw new f("Failed to load font: " + (t instanceof Error ? t.message : "Unknown error"), t);
|
|
1277
1260
|
}
|
|
1278
1261
|
}
|
|
1279
|
-
async
|
|
1262
|
+
async Oe(A) {
|
|
1280
1263
|
const t = Date.now();
|
|
1281
|
-
this
|
|
1264
|
+
this.Ye = new FontFace("CustomFont_" + t, A), await this.Ye.load(), document.fonts.add(this.Ye);
|
|
1282
1265
|
}
|
|
1283
|
-
async
|
|
1284
|
-
const A = this.
|
|
1285
|
-
this.
|
|
1286
|
-
const e = this.
|
|
1287
|
-
this.
|
|
1266
|
+
async Le() {
|
|
1267
|
+
const A = this.Te.extractCharacters(this.ve), t = this.Te.filterProblematicCharacters(A);
|
|
1268
|
+
this.xe = this.Re.createCharacterObjects(t, this.ve), this.Me = this.Fe.calculateMaxGlyphDimensions(t, this.be, this.ve);
|
|
1269
|
+
const e = this.ze.createTextureAtlas(this.xe, this.Me, this.be, this.ve);
|
|
1270
|
+
this.ye = e.framebuffer, this.Ge = e.columns, this.$e = e.rows;
|
|
1288
1271
|
}
|
|
1289
|
-
|
|
1290
|
-
return this.
|
|
1272
|
+
me(A) {
|
|
1273
|
+
return this.Re.me(A, this.xe);
|
|
1291
1274
|
}
|
|
1292
|
-
|
|
1293
|
-
return this.
|
|
1275
|
+
_e(A) {
|
|
1276
|
+
return this.Re._e(A, this.xe);
|
|
1294
1277
|
}
|
|
1295
1278
|
W() {
|
|
1296
|
-
this.
|
|
1279
|
+
this.ye.W(), document.fonts.delete(this.Ye);
|
|
1297
1280
|
}
|
|
1298
1281
|
get fontFramebuffer() {
|
|
1299
|
-
return this.
|
|
1282
|
+
return this.ye;
|
|
1300
1283
|
}
|
|
1301
1284
|
get characters() {
|
|
1302
|
-
return this.
|
|
1285
|
+
return this.xe;
|
|
1303
1286
|
}
|
|
1304
1287
|
get textureColumns() {
|
|
1305
|
-
return this.
|
|
1288
|
+
return this.Ge;
|
|
1306
1289
|
}
|
|
1307
1290
|
get textureRows() {
|
|
1308
|
-
return this
|
|
1291
|
+
return this.$e;
|
|
1309
1292
|
}
|
|
1310
1293
|
get maxGlyphDimensions() {
|
|
1311
|
-
return this.
|
|
1294
|
+
return this.Me;
|
|
1312
1295
|
}
|
|
1313
1296
|
get fontSize() {
|
|
1314
|
-
return this.
|
|
1297
|
+
return this.be;
|
|
1315
1298
|
}
|
|
1316
1299
|
get font() {
|
|
1317
|
-
return this.
|
|
1300
|
+
return this.ve;
|
|
1318
1301
|
}
|
|
1319
1302
|
}
|
|
1320
|
-
class
|
|
1303
|
+
class xA {
|
|
1321
1304
|
constructor(A, t, e) {
|
|
1322
|
-
n(this, "Ue");
|
|
1323
|
-
n(this, "ke");
|
|
1324
|
-
n(this, "I");
|
|
1325
|
-
n(this, "u");
|
|
1326
1305
|
n(this, "We");
|
|
1327
1306
|
n(this, "He");
|
|
1307
|
+
n(this, "I");
|
|
1308
|
+
n(this, "u");
|
|
1328
1309
|
n(this, "Je");
|
|
1329
1310
|
n(this, "Ve");
|
|
1330
1311
|
n(this, "Ke");
|
|
1331
|
-
this
|
|
1312
|
+
n(this, "je");
|
|
1313
|
+
n(this, "Ze");
|
|
1314
|
+
this.Ke = A, this.je = t, this.Ze = e, this.PA();
|
|
1332
1315
|
}
|
|
1333
|
-
|
|
1334
|
-
this.
|
|
1316
|
+
PA() {
|
|
1317
|
+
this.We = Math.floor(this.Ke.width / this.je), this.He = Math.floor(this.Ke.height / this.Ze), this.I = this.We * this.je, this.u = this.He * this.Ze, this.Je = Math.floor((this.Ke.width - this.I) / 2), this.Ve = Math.floor((this.Ke.height - this.u) / 2);
|
|
1335
1318
|
}
|
|
1336
|
-
|
|
1337
|
-
this.
|
|
1319
|
+
Ne(A, t) {
|
|
1320
|
+
this.je = A, this.Ze = t, this.PA();
|
|
1338
1321
|
}
|
|
1339
1322
|
get cellWidth() {
|
|
1340
|
-
return this.
|
|
1323
|
+
return this.je;
|
|
1341
1324
|
}
|
|
1342
1325
|
get cellHeight() {
|
|
1343
|
-
return this.
|
|
1326
|
+
return this.Ze;
|
|
1344
1327
|
}
|
|
1345
1328
|
get cols() {
|
|
1346
|
-
return this.
|
|
1329
|
+
return this.We;
|
|
1347
1330
|
}
|
|
1348
1331
|
get rows() {
|
|
1349
|
-
return this.
|
|
1332
|
+
return this.He;
|
|
1350
1333
|
}
|
|
1351
1334
|
get width() {
|
|
1352
1335
|
return this.I;
|
|
@@ -1355,243 +1338,243 @@ class yA {
|
|
|
1355
1338
|
return this.u;
|
|
1356
1339
|
}
|
|
1357
1340
|
get offsetX() {
|
|
1358
|
-
return this.
|
|
1341
|
+
return this.Je;
|
|
1359
1342
|
}
|
|
1360
1343
|
get offsetY() {
|
|
1361
|
-
return this.
|
|
1344
|
+
return this.Ve;
|
|
1362
1345
|
}
|
|
1363
1346
|
}
|
|
1364
1347
|
class vA {
|
|
1365
1348
|
constructor(A = {}) {
|
|
1366
|
-
n(this, "
|
|
1367
|
-
n(this, "
|
|
1368
|
-
n(this, "
|
|
1369
|
-
A.canvas ? (this.
|
|
1349
|
+
n(this, "Ke");
|
|
1350
|
+
n(this, "Xe");
|
|
1351
|
+
n(this, "qe");
|
|
1352
|
+
A.canvas ? (this.Ke = A.canvas, this.qe = !1) : (this.Ke = this.AB(A.width, A.height), this.qe = !0), this.Ke.style.imageRendering = "pixelated";
|
|
1370
1353
|
}
|
|
1371
|
-
|
|
1354
|
+
AB(A, t) {
|
|
1372
1355
|
const e = document.createElement("canvas");
|
|
1373
1356
|
return e.className = "textmodeCanvas", e.style.imageRendering = "pixelated", e.width = A || 800, e.height = t || 600, document.body.appendChild(e), e;
|
|
1374
1357
|
}
|
|
1375
1358
|
S(A, t) {
|
|
1376
|
-
this.
|
|
1359
|
+
this.Ke.width = A ?? this.Ke.width, this.Ke.height = t ?? this.Ke.height;
|
|
1377
1360
|
}
|
|
1378
|
-
|
|
1379
|
-
const A = this.
|
|
1361
|
+
tB() {
|
|
1362
|
+
const A = this.Ke.getContext("webgl2", { alpha: !0, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" });
|
|
1380
1363
|
if (!A) throw new f("`textmode.js` requires WebGL2 support.");
|
|
1381
1364
|
return A;
|
|
1382
1365
|
}
|
|
1383
1366
|
W() {
|
|
1384
|
-
this.
|
|
1385
|
-
const A = this.
|
|
1367
|
+
this.Xe && this.Xe.disconnect();
|
|
1368
|
+
const A = this.Ke.getContext("webgl") || this.Ke.getContext("webgl2");
|
|
1386
1369
|
if (A) {
|
|
1387
1370
|
const t = A.getExtension("WEBGL_lose_context");
|
|
1388
1371
|
t && t.loseContext();
|
|
1389
1372
|
}
|
|
1390
|
-
this.
|
|
1373
|
+
this.qe && this.Ke.parentNode && this.Ke.parentNode.removeChild(this.Ke);
|
|
1391
1374
|
}
|
|
1392
1375
|
get canvas() {
|
|
1393
|
-
return this.
|
|
1376
|
+
return this.Ke;
|
|
1394
1377
|
}
|
|
1395
1378
|
get width() {
|
|
1396
|
-
return this.
|
|
1379
|
+
return this.Ke.width;
|
|
1397
1380
|
}
|
|
1398
1381
|
get height() {
|
|
1399
|
-
return this.
|
|
1382
|
+
return this.Ke.height;
|
|
1400
1383
|
}
|
|
1401
1384
|
}
|
|
1402
1385
|
class bA {
|
|
1403
1386
|
constructor(A = 60) {
|
|
1404
|
-
n(this, "
|
|
1405
|
-
n(this, "
|
|
1406
|
-
n(this, "
|
|
1407
|
-
n(this, "BB", 0);
|
|
1408
|
-
n(this, "QB", !0);
|
|
1387
|
+
n(this, "eB");
|
|
1388
|
+
n(this, "BB");
|
|
1389
|
+
n(this, "QB", null);
|
|
1409
1390
|
n(this, "sB", 0);
|
|
1410
|
-
n(this, "EB", 0);
|
|
1411
|
-
n(this, "iB",
|
|
1412
|
-
n(this, "rB",
|
|
1413
|
-
n(this, "nB",
|
|
1414
|
-
this
|
|
1391
|
+
n(this, "EB", !0);
|
|
1392
|
+
n(this, "iB", 0);
|
|
1393
|
+
n(this, "rB", 0);
|
|
1394
|
+
n(this, "nB", []);
|
|
1395
|
+
n(this, "gB", 10);
|
|
1396
|
+
n(this, "oB", 0);
|
|
1397
|
+
this.eB = A, this.BB = 1e3 / A;
|
|
1415
1398
|
}
|
|
1416
1399
|
start(A) {
|
|
1417
|
-
if (!this.
|
|
1418
|
-
this.
|
|
1400
|
+
if (!this.EB) return;
|
|
1401
|
+
this.sB = performance.now();
|
|
1419
1402
|
const t = (e) => {
|
|
1420
|
-
if (!this.
|
|
1421
|
-
const B = e - this.
|
|
1422
|
-
B >= this.
|
|
1403
|
+
if (!this.EB) return void (this.QB = null);
|
|
1404
|
+
const B = e - this.sB;
|
|
1405
|
+
B >= this.BB && (A(), this.sB = e - B % this.BB), this.EB && (this.QB = requestAnimationFrame(t));
|
|
1423
1406
|
};
|
|
1424
|
-
this.
|
|
1407
|
+
this.QB = requestAnimationFrame(t);
|
|
1425
1408
|
}
|
|
1426
1409
|
stop() {
|
|
1427
|
-
this.
|
|
1410
|
+
this.QB && (cancelAnimationFrame(this.QB), this.QB = null);
|
|
1428
1411
|
}
|
|
1429
1412
|
pause() {
|
|
1430
|
-
this.
|
|
1413
|
+
this.EB && (this.EB = !1, this.stop());
|
|
1431
1414
|
}
|
|
1432
1415
|
resume(A) {
|
|
1433
|
-
this.
|
|
1416
|
+
this.EB || (this.EB = !0, this.start(A));
|
|
1434
1417
|
}
|
|
1435
1418
|
frameRate(A, t) {
|
|
1436
|
-
if (A === void 0) return this.
|
|
1437
|
-
this.
|
|
1419
|
+
if (A === void 0) return this.iB;
|
|
1420
|
+
this.eB = A, this.BB = 1e3 / A, this.EB && t && (this.stop(), this.start(t));
|
|
1438
1421
|
}
|
|
1439
1422
|
measureFrameRate() {
|
|
1440
1423
|
const A = performance.now();
|
|
1441
|
-
if (this.
|
|
1442
|
-
const t = A - this.
|
|
1443
|
-
this.
|
|
1444
|
-
const e = this.
|
|
1445
|
-
this.
|
|
1424
|
+
if (this.rB > 0) {
|
|
1425
|
+
const t = A - this.rB;
|
|
1426
|
+
this.nB.push(t), this.nB.length > this.gB && this.nB.shift();
|
|
1427
|
+
const e = this.nB.reduce((B, r) => B + r, 0) / this.nB.length;
|
|
1428
|
+
this.iB = 1e3 / e;
|
|
1446
1429
|
}
|
|
1447
|
-
this.
|
|
1430
|
+
this.rB = A;
|
|
1448
1431
|
}
|
|
1449
1432
|
get isLooping() {
|
|
1450
|
-
return this.
|
|
1433
|
+
return this.EB;
|
|
1451
1434
|
}
|
|
1452
1435
|
get frameRateLimit() {
|
|
1453
|
-
return this.
|
|
1436
|
+
return this.eB;
|
|
1454
1437
|
}
|
|
1455
1438
|
get currentFrameRate() {
|
|
1456
|
-
return this.
|
|
1439
|
+
return this.iB;
|
|
1457
1440
|
}
|
|
1458
1441
|
get frameCount() {
|
|
1459
|
-
return this.
|
|
1442
|
+
return this.oB;
|
|
1460
1443
|
}
|
|
1461
1444
|
set frameCount(A) {
|
|
1462
|
-
this.
|
|
1445
|
+
this.oB = A;
|
|
1463
1446
|
}
|
|
1464
1447
|
incrementFrame() {
|
|
1465
|
-
this.
|
|
1448
|
+
this.oB++;
|
|
1466
1449
|
}
|
|
1467
1450
|
resetFrameCount() {
|
|
1468
|
-
this.
|
|
1451
|
+
this.oB = 0;
|
|
1469
1452
|
}
|
|
1470
1453
|
}
|
|
1471
1454
|
const RA = (E) => class extends E {
|
|
1472
1455
|
rotate(A) {
|
|
1473
|
-
this.
|
|
1456
|
+
this.le.state.wA(A);
|
|
1474
1457
|
}
|
|
1475
1458
|
push() {
|
|
1476
|
-
this.
|
|
1459
|
+
this.le.state.DA();
|
|
1477
1460
|
}
|
|
1478
1461
|
pop() {
|
|
1479
|
-
this.
|
|
1462
|
+
this.le.state.lA();
|
|
1480
1463
|
}
|
|
1481
1464
|
rect(A, t, e = 1, B = 1) {
|
|
1482
|
-
this.
|
|
1465
|
+
this.le.Yt(A, t, e, B);
|
|
1483
1466
|
}
|
|
1484
1467
|
line(A, t, e, B) {
|
|
1485
|
-
this.
|
|
1468
|
+
this.le.Tt(A, t, e, B);
|
|
1486
1469
|
}
|
|
1487
1470
|
lineWeight(A) {
|
|
1488
|
-
this.
|
|
1471
|
+
this.le.state.uA(A);
|
|
1489
1472
|
}
|
|
1490
1473
|
background(A, t = A, e = A, B = 255) {
|
|
1491
|
-
this.
|
|
1474
|
+
this.le.Lt(A, t, e, B);
|
|
1492
1475
|
}
|
|
1493
1476
|
char(A) {
|
|
1494
|
-
this.
|
|
1477
|
+
this.le.state.fA(this.ve.me(A));
|
|
1495
1478
|
}
|
|
1496
|
-
charColor(A, t, e
|
|
1497
|
-
this.
|
|
1479
|
+
charColor(A, t, e) {
|
|
1480
|
+
this.le.state.dA(A, t, e);
|
|
1498
1481
|
}
|
|
1499
|
-
cellColor(A, t, e
|
|
1500
|
-
this.
|
|
1482
|
+
cellColor(A, t, e) {
|
|
1483
|
+
this.le.state.pA(A, t, e);
|
|
1501
1484
|
}
|
|
1502
1485
|
flipHorizontally(A) {
|
|
1503
|
-
this.
|
|
1486
|
+
this.le.state.mA(A);
|
|
1504
1487
|
}
|
|
1505
1488
|
flipVertically(A) {
|
|
1506
|
-
this.
|
|
1489
|
+
this.le.state._A(A);
|
|
1507
1490
|
}
|
|
1508
1491
|
charRotation(A) {
|
|
1509
|
-
this.
|
|
1492
|
+
this.le.state.xA(A);
|
|
1510
1493
|
}
|
|
1511
1494
|
invert(A) {
|
|
1512
|
-
this.
|
|
1495
|
+
this.le.state.vA(A);
|
|
1513
1496
|
}
|
|
1514
1497
|
clear() {
|
|
1515
|
-
this.
|
|
1498
|
+
this.le.Lt(0, 0, 0, 0);
|
|
1516
1499
|
}
|
|
1517
1500
|
ellipse(A, t, e, B) {
|
|
1518
|
-
this.
|
|
1501
|
+
this.le.zt(A, t, e / 2, B / 2);
|
|
1519
1502
|
}
|
|
1520
1503
|
triangle(A, t, e, B, r, i) {
|
|
1521
|
-
this.
|
|
1504
|
+
this.le.Ft(A, t, e, B, r, i);
|
|
1522
1505
|
}
|
|
1523
1506
|
bezierCurve(A, t, e, B, r, i, s, Q) {
|
|
1524
|
-
this.
|
|
1507
|
+
this.le.Rt(A, t, e, B, r, i, s, Q);
|
|
1525
1508
|
}
|
|
1526
1509
|
arc(A, t, e, B, r, i) {
|
|
1527
|
-
this.
|
|
1510
|
+
this.le.Ot(A, t, e, B, r, i);
|
|
1528
1511
|
}
|
|
1529
1512
|
};
|
|
1530
1513
|
class U {
|
|
1531
|
-
|
|
1514
|
+
aB(A) {
|
|
1532
1515
|
const t = A.O(0), e = A.O(1), B = A.O(2), r = A.O(3);
|
|
1533
1516
|
return { characterPixels: t, primaryColorPixels: e, secondaryColorPixels: B, transformPixels: A.O(4), rotationPixels: r };
|
|
1534
1517
|
}
|
|
1535
|
-
|
|
1518
|
+
cB(A, t) {
|
|
1536
1519
|
return A[t] + (A[t + 1] << 8);
|
|
1537
1520
|
}
|
|
1538
|
-
|
|
1521
|
+
hB(A, t) {
|
|
1539
1522
|
return { r: A[t], g: A[t + 1], b: A[t + 2], a: A[t + 3] };
|
|
1540
1523
|
}
|
|
1541
1524
|
}
|
|
1542
1525
|
class Y {
|
|
1543
|
-
|
|
1526
|
+
CB(A, t) {
|
|
1544
1527
|
return new Blob([A], { type: t });
|
|
1545
1528
|
}
|
|
1546
|
-
|
|
1529
|
+
DB(A, t, e) {
|
|
1547
1530
|
try {
|
|
1548
|
-
const B = this.
|
|
1531
|
+
const B = this.CB(A, e), r = URL.createObjectURL(B), i = document.createElement("a");
|
|
1549
1532
|
i.href = r, i.download = t, i.style.display = "none", i.rel = "noopener", document.body.appendChild(i), i.click(), document.body.removeChild(i), URL.revokeObjectURL(r);
|
|
1550
1533
|
} catch (B) {
|
|
1551
1534
|
throw console.error("Failed to download file:", B), Error("File download failed: " + (B instanceof Error ? B.message : "Unknown error"));
|
|
1552
1535
|
}
|
|
1553
1536
|
}
|
|
1554
|
-
|
|
1537
|
+
lB() {
|
|
1555
1538
|
return (/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-");
|
|
1556
1539
|
}
|
|
1557
|
-
|
|
1540
|
+
PB() {
|
|
1558
1541
|
const A = /* @__PURE__ */ new Date();
|
|
1559
1542
|
return { date: A.toISOString().split("T")[0], time: A.toTimeString().split(" ")[0].replace(/:/g, "-") };
|
|
1560
1543
|
}
|
|
1561
|
-
|
|
1544
|
+
IB(A) {
|
|
1562
1545
|
return A.replace(/[<>:"/\\|?*]/g, "_").replace(/\s+/g, "_").replace(/_{2,}/g, "_").replace(/^_+|_+$/g, "").substring(0, 255);
|
|
1563
1546
|
}
|
|
1564
|
-
|
|
1565
|
-
return "'textmode-export'-" + this.
|
|
1547
|
+
uB() {
|
|
1548
|
+
return "'textmode-export'-" + this.lB();
|
|
1566
1549
|
}
|
|
1567
1550
|
}
|
|
1568
1551
|
class TA extends U {
|
|
1569
|
-
|
|
1552
|
+
wB(A, t, e) {
|
|
1570
1553
|
const B = A[e] === 255, r = A[e + 1] === 255, i = A[e + 2] === 255, s = t[e], Q = t[e + 1];
|
|
1571
1554
|
return { isInverted: B, flipHorizontal: r, flipVertical: i, rotation: Math.round(360 * (s + Q / 255) / 255 * 100) / 100 };
|
|
1572
1555
|
}
|
|
1573
|
-
|
|
1556
|
+
fB(A, t, e) {
|
|
1574
1557
|
return { x: A, y: t, cellX: A * e.cellWidth, cellY: t * e.cellHeight };
|
|
1575
1558
|
}
|
|
1576
|
-
|
|
1559
|
+
dB(A, t) {
|
|
1577
1560
|
const e = [];
|
|
1578
1561
|
let B = 0;
|
|
1579
1562
|
for (let r = 0; r < t.rows; r++) for (let i = 0; i < t.cols; i++) {
|
|
1580
|
-
const s = 4 * B, Q = this.
|
|
1581
|
-
let o = this.
|
|
1582
|
-
const a = this.
|
|
1563
|
+
const s = 4 * B, Q = this.cB(A.characterPixels, s);
|
|
1564
|
+
let o = this.hB(A.primaryColorPixels, s), g = this.hB(A.secondaryColorPixels, s);
|
|
1565
|
+
const a = this.wB(A.transformPixels, A.rotationPixels, s);
|
|
1583
1566
|
if (a.isInverted) {
|
|
1584
1567
|
const l = o;
|
|
1585
1568
|
o = g, g = l;
|
|
1586
1569
|
}
|
|
1587
|
-
const h = this.
|
|
1570
|
+
const h = this.fB(i, r, t);
|
|
1588
1571
|
e.push({ charIndex: Q, primaryColor: o, secondaryColor: g, transform: a, position: h }), B++;
|
|
1589
1572
|
}
|
|
1590
1573
|
return e;
|
|
1591
1574
|
}
|
|
1592
1575
|
}
|
|
1593
|
-
class
|
|
1594
|
-
|
|
1576
|
+
class MA {
|
|
1577
|
+
pB(A, t) {
|
|
1595
1578
|
const e = A.cmap;
|
|
1596
1579
|
for (const B of e.tables) if (B.format === 4) {
|
|
1597
1580
|
const r = B;
|
|
@@ -1614,11 +1597,11 @@ class _A {
|
|
|
1614
1597
|
}
|
|
1615
1598
|
return 0;
|
|
1616
1599
|
}
|
|
1617
|
-
|
|
1600
|
+
mB(A, t, e, B, r) {
|
|
1618
1601
|
const i = r / A.head.unitsPerEm;
|
|
1619
|
-
return { getBoundingBox: () => ({ x1: e + t.xMin * i, y1: B + -t.yMax * i, x2: e + t.xMax * i, y2: B + -t.yMin * i }), toSVG: () => this.
|
|
1602
|
+
return { getBoundingBox: () => ({ x1: e + t.xMin * i, y1: B + -t.yMax * i, x2: e + t.xMax * i, y2: B + -t.yMin * i }), toSVG: () => this._B(t, e, B, i) };
|
|
1620
1603
|
}
|
|
1621
|
-
|
|
1604
|
+
_B(A, t, e, B) {
|
|
1622
1605
|
if (!A || !A.xs) return "";
|
|
1623
1606
|
const { xs: r, ys: i, endPts: s, flags: Q } = A;
|
|
1624
1607
|
if (!(r && i && s && Q)) return "";
|
|
@@ -1652,22 +1635,22 @@ class _A {
|
|
|
1652
1635
|
}
|
|
1653
1636
|
return o;
|
|
1654
1637
|
}
|
|
1655
|
-
|
|
1656
|
-
const i = A.codePointAt(0) || 0, s = this.
|
|
1638
|
+
vB(A, t, e, B, r) {
|
|
1639
|
+
const i = A.codePointAt(0) || 0, s = this.pB(t, i);
|
|
1657
1640
|
let Q = null;
|
|
1658
|
-
return t.glyf && t.glyf[s] !== null ? Q = t.glyf[s] : (Q = p.T.glyf.
|
|
1641
|
+
return t.glyf && t.glyf[s] !== null ? Q = t.glyf[s] : (Q = p.T.glyf.Wt(t, s), t.glyf[s] = Q), this.mB(t, Q, e, B, r);
|
|
1659
1642
|
}
|
|
1660
|
-
|
|
1643
|
+
xB(A, t, e, B, r, i, s, Q) {
|
|
1661
1644
|
const o = e + (r - Q * (s / t.head.unitsPerEm)) / 2, g = B + (i + 0.7 * s) / 2;
|
|
1662
|
-
return this.
|
|
1645
|
+
return this.vB(A, t, o, g, s).toSVG() || null;
|
|
1663
1646
|
}
|
|
1664
1647
|
}
|
|
1665
1648
|
class GA {
|
|
1666
1649
|
constructor() {
|
|
1667
|
-
n(this, "
|
|
1668
|
-
this.
|
|
1650
|
+
n(this, "yB");
|
|
1651
|
+
this.yB = new MA();
|
|
1669
1652
|
}
|
|
1670
|
-
|
|
1653
|
+
bB(A) {
|
|
1671
1654
|
return `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
1672
1655
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
1673
1656
|
<svg width="${A.width}" height="${A.height}" viewBox="0 0 ${A.width} ${A.height}"
|
|
@@ -1675,21 +1658,21 @@ class GA {
|
|
|
1675
1658
|
<title>textmode art generated via textmode.js</title>
|
|
1676
1659
|
<desc>textmode art visualization generated by textmode.js library</desc>`;
|
|
1677
1660
|
}
|
|
1678
|
-
|
|
1661
|
+
GB() {
|
|
1679
1662
|
return `
|
|
1680
1663
|
</g>
|
|
1681
1664
|
</svg>`;
|
|
1682
1665
|
}
|
|
1683
|
-
|
|
1666
|
+
$B(A, t) {
|
|
1684
1667
|
if (!t.includeBackgroundRectangles) return "";
|
|
1685
1668
|
const e = t.backgroundColor, B = `rgba(${e[0]},${e[1]},${e[2]},${e[3] / 255})`;
|
|
1686
1669
|
return `
|
|
1687
1670
|
<rect width="${A.width}" height="${A.height}" fill="${B}" />`;
|
|
1688
1671
|
}
|
|
1689
|
-
|
|
1672
|
+
MB(A) {
|
|
1690
1673
|
return `rgba(${A.r},${A.g},${A.b},${A.a / 255})`;
|
|
1691
1674
|
}
|
|
1692
|
-
|
|
1675
|
+
YB(A, t) {
|
|
1693
1676
|
const { transform: e, position: B } = A, r = B.cellX + t.cellWidth / 2, i = B.cellY + t.cellHeight / 2, s = [];
|
|
1694
1677
|
if (e.flipHorizontal || e.flipVertical) {
|
|
1695
1678
|
const Q = e.flipHorizontal ? -1 : 1, o = e.flipVertical ? -1 : 1;
|
|
@@ -1697,81 +1680,81 @@ class GA {
|
|
|
1697
1680
|
}
|
|
1698
1681
|
return e.rotation && s.push(`rotate(${e.rotation} ${r} ${i})`), s.length ? ` transform="${s.join(" ")}"` : "";
|
|
1699
1682
|
}
|
|
1700
|
-
|
|
1683
|
+
TB(A, t, e) {
|
|
1701
1684
|
if (!e.includeBackgroundRectangles || A.secondaryColor.a === 0) return "";
|
|
1702
|
-
const { position: B } = A, r = this.
|
|
1685
|
+
const { position: B } = A, r = this.MB(A.secondaryColor);
|
|
1703
1686
|
return e.drawMode === "stroke" ? `
|
|
1704
1687
|
<rect x="${B.cellX}" y="${B.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" stroke="${r}" fill="none" stroke-width="${e.strokeWidth}" />` : `
|
|
1705
1688
|
<rect x="${B.cellX}" y="${B.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" fill="${r}" />`;
|
|
1706
1689
|
}
|
|
1707
|
-
|
|
1690
|
+
vB(A, t, e, B) {
|
|
1708
1691
|
const r = e.characters[A.charIndex];
|
|
1709
1692
|
if (!r) return "";
|
|
1710
|
-
const i = this.
|
|
1693
|
+
const i = this.yB.xB(r.character, e.font, A.position.cellX, A.position.cellY, t.cellWidth, t.cellHeight, e.fontSize, r.advanceWidth);
|
|
1711
1694
|
if (!i) return "";
|
|
1712
|
-
const s = this.
|
|
1695
|
+
const s = this.MB(A.primaryColor);
|
|
1713
1696
|
return B.drawMode === "stroke" ? `
|
|
1714
1697
|
<path id="${`path-${A.charIndex}-${A.position.cellX}-${A.position.cellY}`.replace(/\./g, "-")}" d="${i}" stroke="${s}" stroke-width="${B.strokeWidth}" fill="none" />` : `
|
|
1715
1698
|
<path d="${i}" fill="${s}" />`;
|
|
1716
1699
|
}
|
|
1717
|
-
|
|
1700
|
+
zB(A, t, e, B) {
|
|
1718
1701
|
let r = "";
|
|
1719
|
-
r += this.
|
|
1720
|
-
const i = this
|
|
1702
|
+
r += this.TB(A, t, B);
|
|
1703
|
+
const i = this.YB(A, t), s = this.vB(A, t, e, B);
|
|
1721
1704
|
return s && (i ? (r += `
|
|
1722
1705
|
<g${i}>`, r += s, r += `
|
|
1723
1706
|
</g>`) : r += s), r;
|
|
1724
1707
|
}
|
|
1725
|
-
|
|
1726
|
-
let r = this.
|
|
1727
|
-
r += this
|
|
1708
|
+
FB(A, t, e, B) {
|
|
1709
|
+
let r = this.bB(t);
|
|
1710
|
+
r += this.$B(t, B), r += `
|
|
1728
1711
|
<g id="ascii-cells">`;
|
|
1729
|
-
for (const i of A) r += this.
|
|
1730
|
-
return r += this.
|
|
1712
|
+
for (const i of A) r += this.zB(i, t, e, B);
|
|
1713
|
+
return r += this.GB(), r;
|
|
1731
1714
|
}
|
|
1732
|
-
|
|
1715
|
+
RB(A) {
|
|
1733
1716
|
return A.replace(/<path[^>]*d=""[^>]*\/>/g, "").replace(/\n\s*\n/g, `
|
|
1734
1717
|
`).replace(/[ \t]+$/gm, "");
|
|
1735
1718
|
}
|
|
1736
1719
|
}
|
|
1737
|
-
class
|
|
1738
|
-
|
|
1739
|
-
return this.
|
|
1720
|
+
class _A extends Y {
|
|
1721
|
+
SB(A) {
|
|
1722
|
+
return this.CB(A, "image/svg+xml;charset=utf-8");
|
|
1740
1723
|
}
|
|
1741
|
-
|
|
1742
|
-
this.
|
|
1724
|
+
OB(A, t) {
|
|
1725
|
+
this.DB(A, this.IB(t) + ".svg", "image/svg+xml;charset=utf-8");
|
|
1743
1726
|
}
|
|
1744
|
-
|
|
1745
|
-
this.
|
|
1727
|
+
LB(A, t) {
|
|
1728
|
+
this.OB(A, t || this.uB());
|
|
1746
1729
|
}
|
|
1747
1730
|
}
|
|
1748
1731
|
class W {
|
|
1749
1732
|
constructor() {
|
|
1750
|
-
n(this, "OB");
|
|
1751
|
-
n(this, "LB");
|
|
1752
1733
|
n(this, "UB");
|
|
1753
|
-
|
|
1734
|
+
n(this, "kB");
|
|
1735
|
+
n(this, "WB");
|
|
1736
|
+
this.UB = new TA(), this.kB = new GA(), this.WB = new _A();
|
|
1754
1737
|
}
|
|
1755
|
-
|
|
1756
|
-
return { includeBackgroundRectangles: A.includeBackgroundRectangles ?? !0, drawMode: A.drawMode ?? "fill", strokeWidth: A.strokeWidth ?? 1, backgroundColor: A.backgroundColor ?? [0, 0, 0, 0], filename: A.filename || this.
|
|
1738
|
+
HB(A) {
|
|
1739
|
+
return { includeBackgroundRectangles: A.includeBackgroundRectangles ?? !0, drawMode: A.drawMode ?? "fill", strokeWidth: A.strokeWidth ?? 1, backgroundColor: A.backgroundColor ?? [0, 0, 0, 0], filename: A.filename || this.WB.uB() };
|
|
1757
1740
|
}
|
|
1758
|
-
|
|
1759
|
-
const e = this.
|
|
1760
|
-
return this.
|
|
1741
|
+
JB(A, t = {}) {
|
|
1742
|
+
const e = this.UB.dB(this.UB.aB(A.pipeline), A.grid), B = this.kB.FB(e, A.grid, A.font, this.HB(t));
|
|
1743
|
+
return this.kB.RB(B);
|
|
1761
1744
|
}
|
|
1762
|
-
|
|
1763
|
-
this.
|
|
1745
|
+
LB(A, t = {}) {
|
|
1746
|
+
this.WB.LB(this.JB(A, t), t.filename);
|
|
1764
1747
|
}
|
|
1765
1748
|
}
|
|
1766
1749
|
class FA extends U {
|
|
1767
|
-
|
|
1750
|
+
VB(A, t, e, B = " ") {
|
|
1768
1751
|
var s;
|
|
1769
1752
|
const r = [];
|
|
1770
1753
|
let i = 0;
|
|
1771
1754
|
for (let Q = 0; Q < t.rows; Q++) {
|
|
1772
1755
|
const o = [];
|
|
1773
1756
|
for (let g = 0; g < t.cols; g++) {
|
|
1774
|
-
const a = 4 * i, h = this.
|
|
1757
|
+
const a = 4 * i, h = this.cB(A.characterPixels, a), l = ((s = e.characters[h]) == null ? void 0 : s.character) || B;
|
|
1775
1758
|
o.push(l), i++;
|
|
1776
1759
|
}
|
|
1777
1760
|
r.push(o);
|
|
@@ -1780,7 +1763,7 @@ class FA extends U {
|
|
|
1780
1763
|
}
|
|
1781
1764
|
}
|
|
1782
1765
|
class SA {
|
|
1783
|
-
|
|
1766
|
+
KB(A, t) {
|
|
1784
1767
|
const e = [];
|
|
1785
1768
|
for (const r of A) {
|
|
1786
1769
|
let i = r.join("");
|
|
@@ -1793,35 +1776,35 @@ class SA {
|
|
|
1793
1776
|
}
|
|
1794
1777
|
}
|
|
1795
1778
|
class UA extends Y {
|
|
1796
|
-
|
|
1797
|
-
const e = this.
|
|
1798
|
-
this.
|
|
1779
|
+
jB(A, t) {
|
|
1780
|
+
const e = this.ZB(t);
|
|
1781
|
+
this.DB(A, e, "text/plain;charset=utf-8");
|
|
1799
1782
|
}
|
|
1800
|
-
|
|
1801
|
-
let t = this.
|
|
1802
|
-
return t === ".txt" || t.length <= 4 ? this.
|
|
1783
|
+
ZB(A) {
|
|
1784
|
+
let t = this.IB(A);
|
|
1785
|
+
return t === ".txt" || t.length <= 4 ? this.uB() : t;
|
|
1803
1786
|
}
|
|
1804
1787
|
}
|
|
1805
|
-
class
|
|
1788
|
+
class k {
|
|
1806
1789
|
constructor() {
|
|
1807
|
-
n(this, "OB");
|
|
1808
|
-
n(this, "LB");
|
|
1809
1790
|
n(this, "UB");
|
|
1810
|
-
|
|
1791
|
+
n(this, "kB");
|
|
1792
|
+
n(this, "WB");
|
|
1793
|
+
this.UB = new FA(), this.kB = new SA(), this.WB = new UA();
|
|
1811
1794
|
}
|
|
1812
|
-
|
|
1813
|
-
return { preserveTrailingSpaces: A.preserveTrailingSpaces ?? !1, lineEnding: A.lineEnding ?? "lf", emptyCharacter: A.emptyCharacter ?? " ", filename: A.filename || this.
|
|
1795
|
+
HB(A) {
|
|
1796
|
+
return { preserveTrailingSpaces: A.preserveTrailingSpaces ?? !1, lineEnding: A.lineEnding ?? "lf", emptyCharacter: A.emptyCharacter ?? " ", filename: A.filename || this.WB.uB() };
|
|
1814
1797
|
}
|
|
1815
|
-
|
|
1816
|
-
const e = this.
|
|
1817
|
-
return this.
|
|
1798
|
+
NB(A, t = {}) {
|
|
1799
|
+
const e = this.HB(t), B = this.UB.VB(this.UB.aB(A.pipeline), A.grid, A.font, e.emptyCharacter);
|
|
1800
|
+
return this.kB.KB(B, e);
|
|
1818
1801
|
}
|
|
1819
|
-
|
|
1820
|
-
this.
|
|
1802
|
+
jB(A, t = {}) {
|
|
1803
|
+
this.WB.jB(this.NB(A, t), t.filename);
|
|
1821
1804
|
}
|
|
1822
1805
|
}
|
|
1823
1806
|
class YA extends U {
|
|
1824
|
-
|
|
1807
|
+
XB(A, t = 1, e = "transparent") {
|
|
1825
1808
|
const B = A.canvas;
|
|
1826
1809
|
if (t === 1 && e === "transparent") return B;
|
|
1827
1810
|
const r = document.createElement("canvas"), i = r.getContext("2d"), s = Math.round(B.width * t), Q = Math.round(B.height * t);
|
|
@@ -1829,19 +1812,19 @@ class YA extends U {
|
|
|
1829
1812
|
}
|
|
1830
1813
|
}
|
|
1831
1814
|
class OA {
|
|
1832
|
-
|
|
1833
|
-
const e = this.
|
|
1815
|
+
qB(A, t) {
|
|
1816
|
+
const e = this.AQ(t.format);
|
|
1834
1817
|
return t.format === "png" ? A.toDataURL(e) : A.toDataURL(e, t.quality);
|
|
1835
1818
|
}
|
|
1836
|
-
async
|
|
1819
|
+
async tQ(A, t) {
|
|
1837
1820
|
return new Promise((e, B) => {
|
|
1838
|
-
const r = this.
|
|
1821
|
+
const r = this.AQ(t.format), i = (s) => {
|
|
1839
1822
|
s ? e(s) : B(Error(`Failed to generate ${t.format.toUpperCase()} blob`));
|
|
1840
1823
|
};
|
|
1841
1824
|
t.format === "png" ? A.toBlob(i, r) : A.toBlob(i, r, t.quality);
|
|
1842
1825
|
});
|
|
1843
1826
|
}
|
|
1844
|
-
|
|
1827
|
+
AQ(A) {
|
|
1845
1828
|
switch (A) {
|
|
1846
1829
|
case "png":
|
|
1847
1830
|
return "image/png";
|
|
@@ -1854,12 +1837,12 @@ class OA {
|
|
|
1854
1837
|
}
|
|
1855
1838
|
}
|
|
1856
1839
|
}
|
|
1857
|
-
const LA = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" },
|
|
1840
|
+
const LA = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" }, N = { png: ".png", jpg: ".jpg", webp: ".webp" };
|
|
1858
1841
|
class zA extends Y {
|
|
1859
|
-
|
|
1860
|
-
this.
|
|
1842
|
+
eQ(A, t, e) {
|
|
1843
|
+
this.BQ(A, this.IB(t) + N[e]);
|
|
1861
1844
|
}
|
|
1862
|
-
|
|
1845
|
+
BQ(A, t) {
|
|
1863
1846
|
const e = URL.createObjectURL(A);
|
|
1864
1847
|
try {
|
|
1865
1848
|
const B = document.createElement("a");
|
|
@@ -1868,168 +1851,171 @@ class zA extends Y {
|
|
|
1868
1851
|
URL.revokeObjectURL(e);
|
|
1869
1852
|
}
|
|
1870
1853
|
}
|
|
1871
|
-
|
|
1872
|
-
return A in LA && A in
|
|
1854
|
+
QQ(A) {
|
|
1855
|
+
return A in LA && A in N;
|
|
1873
1856
|
}
|
|
1874
1857
|
}
|
|
1875
1858
|
class WA {
|
|
1876
1859
|
constructor() {
|
|
1877
|
-
n(this, "OB");
|
|
1878
|
-
n(this, "LB");
|
|
1879
1860
|
n(this, "UB");
|
|
1880
|
-
|
|
1861
|
+
n(this, "kB");
|
|
1862
|
+
n(this, "WB");
|
|
1863
|
+
this.UB = new YA(), this.kB = new OA(), this.WB = new zA();
|
|
1881
1864
|
}
|
|
1882
|
-
|
|
1883
|
-
return { format: A.format ?? "png", quality: A.quality ?? 1, scale: A.scale ?? 1, backgroundColor: A.backgroundColor ?? "transparent", filename: A.filename || this.
|
|
1865
|
+
HB(A) {
|
|
1866
|
+
return { format: A.format ?? "png", quality: A.quality ?? 1, scale: A.scale ?? 1, backgroundColor: A.backgroundColor ?? "transparent", filename: A.filename || this.WB.uB() };
|
|
1884
1867
|
}
|
|
1885
|
-
|
|
1886
|
-
if (!this.
|
|
1868
|
+
sQ(A) {
|
|
1869
|
+
if (!this.WB.QQ(A.format)) throw Error(`Saving '${A.format}' files is not supported`);
|
|
1887
1870
|
if (A.quality < 0 || A.quality > 1) throw Error("Image quality must be between 0.0 and 1.0");
|
|
1888
1871
|
if (A.scale <= 0) throw Error("Scale factor must be greater than 0");
|
|
1889
1872
|
A.format === "jpg" && A.backgroundColor === "transparent" && (A.backgroundColor = "black");
|
|
1890
1873
|
}
|
|
1891
|
-
async
|
|
1892
|
-
if (t.scale === 1 && t.backgroundColor === "transparent") return await this.
|
|
1893
|
-
const e = this.
|
|
1894
|
-
return await this.
|
|
1874
|
+
async tQ(A, t) {
|
|
1875
|
+
if (t.scale === 1 && t.backgroundColor === "transparent") return await this.kB.tQ(A.canvas, t);
|
|
1876
|
+
const e = this.UB.XB(A, t.scale, t.backgroundColor);
|
|
1877
|
+
return await this.kB.tQ(e, t);
|
|
1895
1878
|
}
|
|
1896
|
-
async
|
|
1897
|
-
const e = this.
|
|
1898
|
-
this.
|
|
1899
|
-
const B = await this.
|
|
1900
|
-
this.
|
|
1879
|
+
async eQ(A, t = {}) {
|
|
1880
|
+
const e = this.HB(t);
|
|
1881
|
+
this.sQ(e);
|
|
1882
|
+
const B = await this.tQ(A, e);
|
|
1883
|
+
this.WB.eQ(B, e.filename, e.format);
|
|
1901
1884
|
}
|
|
1902
1885
|
}
|
|
1903
|
-
const
|
|
1904
|
-
|
|
1905
|
-
this.
|
|
1886
|
+
const kA = (E) => class extends E {
|
|
1887
|
+
EQ() {
|
|
1888
|
+
this.le.kt(this.iQ);
|
|
1906
1889
|
}
|
|
1907
1890
|
toString(A = {}) {
|
|
1908
|
-
return this.
|
|
1891
|
+
return this.EQ(), new k().NB({ pipeline: this.rQ, grid: this.nQ, font: this.ve }, A);
|
|
1909
1892
|
}
|
|
1910
1893
|
saveStrings(A = {}) {
|
|
1911
|
-
this.
|
|
1894
|
+
this.EQ(), new k().jB({ pipeline: this.rQ, grid: this.nQ, font: this.ve }, A);
|
|
1912
1895
|
}
|
|
1913
1896
|
toSVG(A = {}) {
|
|
1914
|
-
return this.
|
|
1897
|
+
return this.EQ(), new W().JB(this, A);
|
|
1915
1898
|
}
|
|
1916
1899
|
saveSVG(A = {}) {
|
|
1917
|
-
this.
|
|
1900
|
+
this.EQ(), new W().LB(this, A);
|
|
1918
1901
|
}
|
|
1919
1902
|
async saveCanvas(A = {}) {
|
|
1920
|
-
await new WA().
|
|
1903
|
+
await new WA().eQ(this.Ke, A);
|
|
1921
1904
|
}
|
|
1922
|
-
},
|
|
1905
|
+
}, NA = (E) => class extends E {
|
|
1923
1906
|
async loadFont(A) {
|
|
1924
|
-
return this.
|
|
1925
|
-
const t = this.
|
|
1926
|
-
this.
|
|
1907
|
+
return this.ve.ke(A).then(() => {
|
|
1908
|
+
const t = this.ve.maxGlyphDimensions;
|
|
1909
|
+
this.nQ.Ne(t.width, t.height), this.le.Ut();
|
|
1927
1910
|
});
|
|
1928
1911
|
}
|
|
1929
1912
|
fontSize(A) {
|
|
1930
|
-
if (!T.l(typeof A == "number" && A > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: A }) || this.
|
|
1931
|
-
this.
|
|
1932
|
-
const t = this.
|
|
1933
|
-
this.
|
|
1913
|
+
if (!T.l(typeof A == "number" && A > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: A }) || this.ve.fontSize === A) return;
|
|
1914
|
+
this.ve.Ue(A);
|
|
1915
|
+
const t = this.ve.maxGlyphDimensions;
|
|
1916
|
+
this.nQ.Ne(t.width, t.height), this.le.Ut();
|
|
1934
1917
|
}
|
|
1935
|
-
},
|
|
1918
|
+
}, HA = (E) => class extends E {
|
|
1936
1919
|
get frameCount() {
|
|
1937
|
-
return this.
|
|
1920
|
+
return this.gQ.frameCount;
|
|
1938
1921
|
}
|
|
1939
1922
|
set frameCount(A) {
|
|
1940
|
-
this.
|
|
1923
|
+
this.gQ.frameCount = A;
|
|
1941
1924
|
}
|
|
1942
1925
|
frameRate(A) {
|
|
1943
|
-
return A === void 0 ? this.
|
|
1926
|
+
return A === void 0 ? this.gQ.currentFrameRate : this.gQ.frameRate(A, () => this.oQ());
|
|
1944
1927
|
}
|
|
1945
1928
|
noLoop() {
|
|
1946
|
-
this.
|
|
1929
|
+
this.gQ.pause();
|
|
1947
1930
|
}
|
|
1948
1931
|
loop() {
|
|
1949
|
-
this.
|
|
1932
|
+
this.gQ.resume(() => this.oQ());
|
|
1950
1933
|
}
|
|
1951
1934
|
redraw(A = 1) {
|
|
1952
|
-
if (T.l(typeof A == "number" && A > 0 && Number.isInteger(A), "Redraw count must be a positive integer.", { method: "redraw", providedValue: A })) for (let t = 0; t < A; t++) this.
|
|
1935
|
+
if (T.l(typeof A == "number" && A > 0 && Number.isInteger(A), "Redraw count must be a positive integer.", { method: "redraw", providedValue: A })) for (let t = 0; t < A; t++) this.oQ();
|
|
1953
1936
|
}
|
|
1954
1937
|
isLooping() {
|
|
1955
|
-
return this.
|
|
1938
|
+
return this.gQ.isLooping;
|
|
1956
1939
|
}
|
|
1957
1940
|
};
|
|
1958
|
-
class
|
|
1941
|
+
class KA {
|
|
1959
1942
|
constructor() {
|
|
1960
|
-
n(this, "
|
|
1961
|
-
n(this, "
|
|
1962
|
-
n(this, "
|
|
1943
|
+
n(this, "le");
|
|
1944
|
+
n(this, "ve");
|
|
1945
|
+
n(this, "Ke");
|
|
1946
|
+
n(this, "nQ");
|
|
1947
|
+
n(this, "gQ");
|
|
1963
1948
|
n(this, "iQ");
|
|
1964
1949
|
n(this, "rQ");
|
|
1965
|
-
n(this, "
|
|
1966
|
-
n(this, "EQ");
|
|
1967
|
-
n(this, "gQ");
|
|
1950
|
+
n(this, "aQ");
|
|
1968
1951
|
}
|
|
1969
|
-
|
|
1952
|
+
oQ() {
|
|
1970
1953
|
}
|
|
1971
1954
|
}
|
|
1972
1955
|
class $A extends function(t, ...e) {
|
|
1973
1956
|
return e.reduce((B, r) => r(B), t);
|
|
1974
|
-
}(
|
|
1957
|
+
}(KA, RA, kA, NA, HA) {
|
|
1975
1958
|
constructor(t = {}) {
|
|
1976
1959
|
super();
|
|
1977
|
-
n(this, "
|
|
1978
|
-
n(this, "aQ", () => {
|
|
1979
|
-
});
|
|
1960
|
+
n(this, "cQ", !1);
|
|
1980
1961
|
n(this, "hQ", () => {
|
|
1981
1962
|
});
|
|
1982
|
-
n(this, "
|
|
1983
|
-
|
|
1963
|
+
n(this, "CQ", () => {
|
|
1964
|
+
});
|
|
1965
|
+
n(this, "DQ");
|
|
1966
|
+
this.Ke = new vA(t), this.le = new CA(this.Ke.tB()), this.ve = new yA(this.le, t.fontSize ?? 16), this.gQ = new bA(t.frameRate ?? 60), this.iQ = this.le.$t(`#version 300 es
|
|
1984
1967
|
in vec2 a_position;in vec2 a_texCoord;in vec2 a_instancePosition;in vec2 a_instanceSize;in vec3 a_instanceCharacter;in vec4 a_instancePrimaryColor;in vec4 a_instanceSecondaryColor;in vec2 a_instanceRotation;in vec3 a_instanceTransform;in float a_instanceGlobalRotation;in vec2 a_instanceRotationCenter;in vec2 a_instanceBezierCP1;in vec2 a_instanceBezierCP2;in vec2 a_instanceBezierStart;in vec2 a_instanceBezierEnd;in vec2 a_instanceArcAngles;uniform float u_aspectRatio;uniform vec2 u_viewportSize;out vec2 v_uv;out vec3 v_character;out vec4 v_primaryColor;out vec4 v_secondaryColor;out vec2 v_rotation;out vec3 v_transform;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}vec2 evaluateBezier(float t,vec2 p0,vec2 p1,vec2 p2,vec2 p3){float oneMinusT=1.0-t;float oneMinusT2=oneMinusT*oneMinusT;float oneMinusT3=oneMinusT2*oneMinusT;float t2=t*t;float t3=t2*t;return oneMinusT3*p0+3.0*oneMinusT2*t*p1+3.0*oneMinusT*t2*p2+t3*p3;}vec2 evaluateBezierDerivative(float t,vec2 p0,vec2 p1,vec2 p2,vec2 p3){float oneMinusT=1.0-t;float oneMinusT2=oneMinusT*oneMinusT;float t2=t*t;return-3.0*oneMinusT2*p0+3.0*oneMinusT2*p1-6.0*oneMinusT*t*p1+6.0*oneMinusT*t*p2-3.0*t2*p2+3.0*t2*p3;}void main(){v_uv=a_texCoord;v_character=a_instanceCharacter;v_primaryColor=a_instancePrimaryColor;v_secondaryColor=a_instanceSecondaryColor;v_rotation=a_instanceRotation;v_transform=a_instanceTransform;vec2 worldPosition;bool isBezierCurve=length(a_instanceBezierCP1)>0.0||length(a_instanceBezierCP2)>0.0||length(a_instanceBezierStart)>0.0||length(a_instanceBezierEnd)>0.0;bool isArc=a_instanceArcAngles.x!=0.0||a_instanceArcAngles.y!=0.0;if(isBezierCurve){float t=a_position.x;float thicknessOffset=a_position.y;vec2 curvePoint=evaluateBezier(t,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);vec2 tangent=evaluateBezierDerivative(t,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);float tangentLength=length(tangent);if(tangentLength>0.0){tangent=tangent/tangentLength;}else{tangent=vec2(1.0,0.0);}vec2 normal=vec2(-tangent.y,tangent.x);float thickness=a_instanceSize.y;vec2 thicknessVector=normal*thicknessOffset*thickness;worldPosition=curvePoint+thicknessVector;}else if(isArc){float startA=a_instanceArcAngles.x;float stopA=a_instanceArcAngles.y;float TWO_PI=6.28318530718;startA=mod(startA,TWO_PI);if(startA<0.0)startA+=TWO_PI;stopA=mod(stopA,TWO_PI);if(stopA<0.0)stopA+=TWO_PI;float cwDelta=startA-stopA;if(cwDelta<=0.0)cwDelta+=TWO_PI;float angle=startA-a_position.x*cwDelta;float r=a_position.y;vec2 local=vec2(cos(angle),sin(angle))*r;vec2 scaledPosition=local*a_instanceSize*0.5+vec2(a_instanceSize.x*0.5,a_instanceSize.y*0.5);worldPosition=scaledPosition+a_instancePosition;}else{vec2 scaledPosition=a_position*a_instanceSize;worldPosition=scaledPosition+a_instancePosition;}vec2 ndc=(worldPosition/u_viewportSize)*2.0-1.0;ndc.y=-ndc.y;if(a_instanceGlobalRotation!=0.0){ndc-=a_instanceRotationCenter;ndc.x*=u_aspectRatio;ndc=rotate2D(-a_instanceGlobalRotation)*ndc;ndc.x/=u_aspectRatio;ndc+=a_instanceRotationCenter;}gl_Position=vec4(ndc,0.0,1.0);}`, `#version 300 es
|
|
1985
|
-
precision highp float;in vec2 v_uv;in vec3 v_character;in vec4 v_primaryColor;in vec4 v_secondaryColor;in vec2 v_rotation;in vec3 v_transform;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){o_character=vec4(v_character,1.0);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.0,1.0);o_transform=vec4(v_transform,1.0);}`), this.
|
|
1968
|
+
precision highp float;in vec2 v_uv;in vec3 v_character;in vec4 v_primaryColor;in vec4 v_secondaryColor;in vec2 v_rotation;in vec3 v_transform;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){o_character=vec4(v_character,1.0);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.0,1.0);o_transform=vec4(v_transform,1.0);}`), this.aQ = this.le.$t("attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.0,1.0);}", "precision mediump float;uniform sampler2D u_characterTexture;uniform vec2 u_charsetDimensions;uniform sampler2D u_primaryColorTexture;uniform sampler2D u_secondaryColorTexture;uniform sampler2D u_transformTexture;uniform sampler2D u_asciiCharacterTexture;uniform sampler2D u_rotationTexture;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;uniform vec2 u_gridOffsetPixels;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){vec2 adjustedCoord=(gl_FragCoord.xy-u_gridOffsetPixels)/u_gridPixelDimensions;vec2 gridCoord=adjustedCoord*u_gridCellDimensions;vec2 cellCoord=floor(gridCoord);vec2 charIndexTexCoord=(cellCoord+0.5)/u_gridCellDimensions;vec4 primaryColor=texture2D(u_primaryColorTexture,charIndexTexCoord);vec4 secondaryColor=texture2D(u_secondaryColorTexture,charIndexTexCoord);vec4 transformColor=texture2D(u_transformTexture,charIndexTexCoord);bool isInverted=transformColor.r>0.5;bool flipHorizontal=transformColor.g>0.5;bool flipVertical=transformColor.b>0.5;vec4 encodedIndexVec=texture2D(u_asciiCharacterTexture,charIndexTexCoord);int charIndex=int(encodedIndexVec.r*255.0+0.5)+int(encodedIndexVec.g*255.0+0.5)*256;int charCol=int(mod(float(charIndex),u_charsetDimensions.x));int charRow=charIndex/int(u_charsetDimensions.x);float flippedRow=(u_charsetDimensions.y-1.0)-float(charRow);vec2 charCoord=vec2(float(charCol),flippedRow)/u_charsetDimensions;vec4 rotationColor=texture2D(u_rotationTexture,charIndexTexCoord);float scaledAngle=rotationColor.r*255.0+rotationColor.g;float rotationAngle=-(scaledAngle*360.0/255.0)*0.017453292;vec2 fractionalPart=fract(gridCoord)-0.5;if(flipHorizontal)fractionalPart.x=-fractionalPart.x;if(flipVertical)fractionalPart.y=-fractionalPart.y;fractionalPart=rotate2D(rotationAngle)*fractionalPart+0.5;vec2 cellSize=1.0/u_charsetDimensions;vec2 texCoord=charCoord+fractionalPart*cellSize;vec2 cellMax=charCoord+cellSize;if(any(lessThan(texCoord,charCoord))||any(greaterThan(texCoord,cellMax))){gl_FragColor=isInverted ? primaryColor : secondaryColor;return;}vec4 charTexel=texture2D(u_characterTexture,texCoord);if(isInverted)charTexel.rgb=1.0-charTexel.rgb;gl_FragColor=mix(secondaryColor,primaryColor,charTexel);}");
|
|
1986
1969
|
}
|
|
1987
1970
|
static async create(t = {}) {
|
|
1988
1971
|
const e = new this(t);
|
|
1989
|
-
await e.
|
|
1990
|
-
const B = e.
|
|
1991
|
-
return e.
|
|
1972
|
+
await e.ve.Se(t.fontSource);
|
|
1973
|
+
const B = e.ve.maxGlyphDimensions;
|
|
1974
|
+
return e.nQ = new xA(e.Ke.canvas, B.width, B.height), e.rQ = e.le.St(e.nQ.cols, e.nQ.rows, 5), e.lQ(), e.gQ.start(() => e.oQ()), e;
|
|
1992
1975
|
}
|
|
1993
|
-
|
|
1994
|
-
this.
|
|
1995
|
-
this.
|
|
1996
|
-
}, window.addEventListener("resize", this.
|
|
1976
|
+
lQ() {
|
|
1977
|
+
this.DQ = () => {
|
|
1978
|
+
this.CQ();
|
|
1979
|
+
}, window.addEventListener("resize", this.DQ);
|
|
1997
1980
|
}
|
|
1998
|
-
|
|
1999
|
-
this.
|
|
1981
|
+
oQ() {
|
|
1982
|
+
if (this.gQ.measureFrameRate(), this.gQ.incrementFrame(), this.cQ) return;
|
|
1983
|
+
this.rQ.U(), this.le.Gt(this.iQ), this.hQ(), this.le.kt(this.iQ), this.rQ.k();
|
|
1984
|
+
const t = this.le.state.canvasBackgroundColor;
|
|
1985
|
+
this.le.NA(t[0], t[1], t[2], t[3]), this.le.Gt(this.aQ), this.aQ.tA({ u_characterTexture: this.ve.fontFramebuffer, u_charsetDimensions: [this.ve.textureColumns, this.ve.textureRows], u_asciiCharacterTexture: this.rQ.textures[0], u_primaryColorTexture: this.rQ.textures[1], u_secondaryColorTexture: this.rQ.textures[2], u_transformTexture: this.rQ.textures[4], u_rotationTexture: this.rQ.textures[3], u_gridCellDimensions: [this.nQ.cols, this.nQ.rows], u_gridPixelDimensions: [this.nQ.width, this.nQ.height], u_gridOffsetPixels: [this.nQ.offsetX, this.nQ.offsetY], u_aspectRatio: this.nQ.width / this.nQ.height }), this.le.Mt(this.nQ.offsetX, this.nQ.offsetY, this.nQ.width, this.nQ.height);
|
|
2000
1986
|
}
|
|
2001
1987
|
draw(t) {
|
|
2002
|
-
this.
|
|
1988
|
+
this.hQ = t;
|
|
2003
1989
|
}
|
|
2004
1990
|
windowResized(t) {
|
|
2005
|
-
this.
|
|
1991
|
+
this.CQ = t;
|
|
2006
1992
|
}
|
|
2007
1993
|
resizeCanvas(t, e) {
|
|
2008
|
-
this.
|
|
1994
|
+
this.Ke.S(t, e), this.nQ.PA(), this.rQ.S(this.nQ.cols, this.nQ.rows), this.le.Ut(), this.oQ();
|
|
2009
1995
|
}
|
|
2010
1996
|
destroy() {
|
|
2011
|
-
this.
|
|
1997
|
+
this.cQ || (this.gQ.stop(), window.removeEventListener("resize", this.DQ), this.ve.W(), this.le.W(), this.cQ = !0);
|
|
2012
1998
|
}
|
|
2013
1999
|
get grid() {
|
|
2014
|
-
return this.
|
|
2000
|
+
return this.nQ;
|
|
2015
2001
|
}
|
|
2016
2002
|
get font() {
|
|
2017
|
-
return this.
|
|
2003
|
+
return this.ve;
|
|
2018
2004
|
}
|
|
2019
2005
|
get width() {
|
|
2020
|
-
return this.
|
|
2006
|
+
return this.Ke.width;
|
|
2021
2007
|
}
|
|
2022
2008
|
get height() {
|
|
2023
|
-
return this.
|
|
2009
|
+
return this.Ke.height;
|
|
2024
2010
|
}
|
|
2025
2011
|
get canvas() {
|
|
2026
|
-
return this.
|
|
2012
|
+
return this.Ke.canvas;
|
|
2027
2013
|
}
|
|
2028
2014
|
get isDisposed() {
|
|
2029
|
-
return this.
|
|
2015
|
+
return this.cQ;
|
|
2030
2016
|
}
|
|
2031
2017
|
get drawFramebuffer() {
|
|
2032
|
-
return this.
|
|
2018
|
+
return this.rQ;
|
|
2033
2019
|
}
|
|
2034
2020
|
}
|
|
2035
2021
|
class O {
|
|
@@ -2043,19 +2029,19 @@ class O {
|
|
|
2043
2029
|
T.P(A);
|
|
2044
2030
|
}
|
|
2045
2031
|
static get version() {
|
|
2046
|
-
return "0.2.0-beta.
|
|
2032
|
+
return "0.2.0-beta.2";
|
|
2047
2033
|
}
|
|
2048
2034
|
}
|
|
2049
|
-
const
|
|
2035
|
+
const JA = Object.freeze(Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })), XA = O.create, jA = O.setErrorLevel, ZA = O.version;
|
|
2050
2036
|
export {
|
|
2051
2037
|
vA as TextmodeCanvas,
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2038
|
+
j as TextmodeErrorLevel,
|
|
2039
|
+
yA as TextmodeFont,
|
|
2040
|
+
xA as TextmodeGrid,
|
|
2055
2041
|
$A as Textmodifier,
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2042
|
+
XA as create,
|
|
2043
|
+
JA as export,
|
|
2044
|
+
jA as setErrorLevel,
|
|
2059
2045
|
O as textmode,
|
|
2060
2046
|
ZA as version
|
|
2061
2047
|
};
|