textmode.js 0.2.1-beta.3 → 0.2.1-beta.4
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 +1107 -1069
- package/dist/textmode.esm.min.js +1356 -1318
- package/dist/textmode.umd.js +7 -7
- package/dist/textmode.umd.min.js +7 -7
- package/dist/types/rendering/webgl/Shader.d.ts +17 -1
- package/dist/types/textmode/mixins/AnimationMixin.d.ts +2 -0
- package/package.json +1 -1
package/dist/textmode.esm.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
var q = Object.defineProperty;
|
|
2
2
|
var AA = (E, A, t) => A in E ? q(E, A, { enumerable: !0, configurable: !0, writable: !0, value: t }) : E[A] = t;
|
|
3
|
-
var
|
|
4
|
-
class
|
|
3
|
+
var n = (E, A, t) => AA(E, typeof A != "symbol" ? A + "" : A, t);
|
|
4
|
+
class f extends Error {
|
|
5
5
|
constructor(A, t = {}) {
|
|
6
|
-
super(
|
|
6
|
+
super(f.A(A, t)), this.name = "TextmodeError";
|
|
7
7
|
}
|
|
8
8
|
static A(A, t) {
|
|
9
9
|
return `${A}${t && Object.keys(t).length > 0 ? `
|
|
10
10
|
|
|
11
11
|
📋 Context:` + Object.entries(t).map(([e, s]) => `
|
|
12
|
-
- ${e}: ${
|
|
12
|
+
- ${e}: ${f.C(s)}`).join("") : ""}
|
|
13
13
|
|
|
14
14
|
${"↓".repeat(24)}
|
|
15
15
|
`;
|
|
@@ -19,21 +19,21 @@ ${"↓".repeat(24)}
|
|
|
19
19
|
if (A === void 0) return "undefined";
|
|
20
20
|
if (typeof A == "string") return `"${A}"`;
|
|
21
21
|
if (typeof A == "number" || typeof A == "boolean") return A + "";
|
|
22
|
-
if (Array.isArray(A)) return A.length === 0 ? "[]" : A.length <= 5 ? `[${A.map((t) =>
|
|
22
|
+
if (Array.isArray(A)) return A.length === 0 ? "[]" : A.length <= 5 ? `[${A.map((t) => f.C(t)).join(", ")}]` : `[${A.slice(0, 3).map((t) => f.C(t)).join(", ")}, ... +${A.length - 3} more]`;
|
|
23
23
|
if (typeof A == "object") {
|
|
24
24
|
const t = Object.keys(A);
|
|
25
|
-
return t.length === 0 ? "{}" : t.length <= 3 ? `{ ${t.map((e) => `${e}: ${
|
|
25
|
+
return t.length === 0 ? "{}" : t.length <= 3 ? `{ ${t.map((e) => `${e}: ${f.C(A[e])}`).join(", ")} }` : `{ ${t.slice(0, 2).map((e) => `${e}: ${f.C(A[e])}`).join(", ")}, ... +${t.length - 2} more }`;
|
|
26
26
|
}
|
|
27
27
|
return A + "";
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
var tA = ((E) => (E[E.SILENT = 0] = "SILENT", E[E.WARNING = 1] = "WARNING", E[E.ERROR = 2] = "ERROR", E[E.THROW = 3] = "THROW", E))(tA || {});
|
|
31
|
-
const
|
|
31
|
+
const v = class v {
|
|
32
32
|
constructor() {
|
|
33
|
-
|
|
33
|
+
n(this, "P", { globalLevel: 3 });
|
|
34
34
|
}
|
|
35
35
|
static u() {
|
|
36
|
-
return
|
|
36
|
+
return v.D || (v.D = new v()), v.D;
|
|
37
37
|
}
|
|
38
38
|
I(A, t) {
|
|
39
39
|
const e = "%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.", s = "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";
|
|
@@ -41,11 +41,11 @@ const y = class y {
|
|
|
41
41
|
case 0:
|
|
42
42
|
return !1;
|
|
43
43
|
case 1:
|
|
44
|
-
return console.group(e, s), console.warn(
|
|
44
|
+
return console.group(e, s), console.warn(f.A(A, t)), console.groupEnd(), !1;
|
|
45
45
|
case 2:
|
|
46
|
-
return console.group(e, s), console.error(
|
|
46
|
+
return console.group(e, s), console.error(f.A(A, t)), console.groupEnd(), !1;
|
|
47
47
|
default:
|
|
48
|
-
throw new
|
|
48
|
+
throw new f(A, t);
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
_(A, t, e) {
|
|
@@ -55,30 +55,30 @@ const y = class y {
|
|
|
55
55
|
this.P.globalLevel = A;
|
|
56
56
|
}
|
|
57
57
|
};
|
|
58
|
-
|
|
59
|
-
let
|
|
60
|
-
const M =
|
|
58
|
+
n(v, "D", null);
|
|
59
|
+
let Y = v;
|
|
60
|
+
const M = Y.u(), X = /* @__PURE__ */ new WeakMap();
|
|
61
61
|
function F(E, A) {
|
|
62
|
-
|
|
62
|
+
X.set(E, A);
|
|
63
63
|
}
|
|
64
64
|
function G(E) {
|
|
65
|
-
return
|
|
65
|
+
return X.get(E);
|
|
66
66
|
}
|
|
67
|
-
class
|
|
67
|
+
class J {
|
|
68
68
|
constructor() {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
69
|
+
n(this, "$", 1);
|
|
70
|
+
n(this, "G", 0);
|
|
71
|
+
n(this, "M", 0);
|
|
72
|
+
n(this, "Y", 0);
|
|
73
|
+
n(this, "F", [0, 0, 0]);
|
|
74
|
+
n(this, "R", [1, 1, 1, 1]);
|
|
75
|
+
n(this, "S", [0, 0, 0, 1]);
|
|
76
|
+
n(this, "L", !1);
|
|
77
|
+
n(this, "O", !1);
|
|
78
|
+
n(this, "U", !1);
|
|
79
|
+
n(this, "W", [0, 0]);
|
|
80
|
+
n(this, "H", [0, 0, 0, 1]);
|
|
81
|
+
n(this, "K", []);
|
|
82
82
|
}
|
|
83
83
|
J() {
|
|
84
84
|
this.K.push({ V: this.$, Z: this.G, N: this.M, X: this.Y, W: [...this.W], L: this.L, O: this.O, U: this.U, AA: [...this.F], tA: [...this.R], eA: [...this.S] });
|
|
@@ -111,10 +111,10 @@ class X {
|
|
|
111
111
|
nA(A) {
|
|
112
112
|
this.Y = A;
|
|
113
113
|
}
|
|
114
|
-
|
|
114
|
+
oA(A) {
|
|
115
115
|
this.F = A;
|
|
116
116
|
}
|
|
117
|
-
|
|
117
|
+
gA(A, t, e, s = 255) {
|
|
118
118
|
this.R = [A / 255, t / 255, e / 255, s / 255];
|
|
119
119
|
}
|
|
120
120
|
aA(A, t, e, s = 255) {
|
|
@@ -126,10 +126,10 @@ class X {
|
|
|
126
126
|
cA(A) {
|
|
127
127
|
this.O = A;
|
|
128
128
|
}
|
|
129
|
-
|
|
129
|
+
lA(A) {
|
|
130
130
|
this.U = A;
|
|
131
131
|
}
|
|
132
|
-
|
|
132
|
+
CA(A) {
|
|
133
133
|
const t = 255 * A / 360, e = Math.floor(t) / 255, s = Math.round(t - Math.floor(t));
|
|
134
134
|
this.W = [e, s];
|
|
135
135
|
}
|
|
@@ -139,26 +139,26 @@ class X {
|
|
|
139
139
|
}
|
|
140
140
|
class U {
|
|
141
141
|
constructor(A, t, e = t, s = 1, i = {}, B = null, r = !1) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
this.PA = t, this.uA = e, this.P = { filter: "nearest", wrap: "clamp", format: "rgba", type: "unsigned_byte", ...i }, this.wA = A, this.
|
|
156
|
-
const
|
|
157
|
-
this.
|
|
142
|
+
n(this, "PA");
|
|
143
|
+
n(this, "uA");
|
|
144
|
+
n(this, "P");
|
|
145
|
+
n(this, "IA", null);
|
|
146
|
+
n(this, "wA");
|
|
147
|
+
n(this, "fA");
|
|
148
|
+
n(this, "dA", []);
|
|
149
|
+
n(this, "pA");
|
|
150
|
+
n(this, "_A", null);
|
|
151
|
+
n(this, "mA", []);
|
|
152
|
+
n(this, "vA", null);
|
|
153
|
+
n(this, "yA", !1);
|
|
154
|
+
n(this, "bA", null);
|
|
155
|
+
this.PA = t, this.uA = e, this.P = { filter: "nearest", wrap: "clamp", format: "rgba", type: "unsigned_byte", ...i }, this.wA = A, this.pA = Math.min(Math.max(1, s), 8), this.vA = B, this.yA = !!r, this.bA = this.yA ? new J() : null;
|
|
156
|
+
const Q = A.getParameter(A.MAX_DRAW_BUFFERS), o = A.getParameter(A.MAX_COLOR_ATTACHMENTS);
|
|
157
|
+
this.pA = Math.min(this.pA, Q, o), this.fA = A.createFramebuffer(), this.$A(), this.GA(), this.mA = Array(this.pA).fill(null);
|
|
158
158
|
}
|
|
159
159
|
$A() {
|
|
160
160
|
const A = this.wA, t = this.P.filter === "linear" ? A.LINEAR : A.NEAREST, e = this.P.wrap === "repeat" ? A.REPEAT : A.CLAMP_TO_EDGE, s = this.P.type === "float" ? A.FLOAT : A.UNSIGNED_BYTE;
|
|
161
|
-
for (let i = 0; i < this.
|
|
161
|
+
for (let i = 0; i < this.pA; i++) {
|
|
162
162
|
const B = A.createTexture();
|
|
163
163
|
A.bindTexture(A.TEXTURE_2D, B), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MIN_FILTER, t), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MAG_FILTER, t), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_S, e), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_T, e), A.texImage2D(A.TEXTURE_2D, 0, A.RGBA, this.PA, this.uA, 0, A.RGBA, s, null), this.dA.push(B);
|
|
164
164
|
}
|
|
@@ -166,10 +166,10 @@ class U {
|
|
|
166
166
|
}
|
|
167
167
|
GA() {
|
|
168
168
|
const A = this.wA;
|
|
169
|
-
if (A.bindFramebuffer(A.FRAMEBUFFER, this.fA), this.
|
|
169
|
+
if (A.bindFramebuffer(A.FRAMEBUFFER, this.fA), this.pA === 1) A.framebufferTexture2D(A.FRAMEBUFFER, A.COLOR_ATTACHMENT0, A.TEXTURE_2D, this.dA[0], 0);
|
|
170
170
|
else {
|
|
171
171
|
const e = [];
|
|
172
|
-
for (let s = 0; s < this.
|
|
172
|
+
for (let s = 0; s < this.pA; s++) {
|
|
173
173
|
const i = A.COLOR_ATTACHMENT0 + s;
|
|
174
174
|
A.framebufferTexture2D(A.FRAMEBUFFER, i, A.TEXTURE_2D, this.dA[s], 0), e.push(i);
|
|
175
175
|
}
|
|
@@ -178,25 +178,25 @@ class U {
|
|
|
178
178
|
const t = A.checkFramebufferStatus(A.FRAMEBUFFER);
|
|
179
179
|
t !== A.FRAMEBUFFER_COMPLETE && console.error("GLFramebuffer is not complete:", t), A.bindFramebuffer(A.FRAMEBUFFER, null);
|
|
180
180
|
}
|
|
181
|
-
|
|
181
|
+
xA(A) {
|
|
182
182
|
const t = this.wA;
|
|
183
183
|
t.bindTexture(t.TEXTURE_2D, this.dA[0]), t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL, 1), t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, t.RGBA, t.UNSIGNED_BYTE, A), t.bindTexture(t.TEXTURE_2D, null);
|
|
184
184
|
}
|
|
185
185
|
resize(A, t) {
|
|
186
|
-
this.PA = A, this.uA = t, this.IA = null, this.mA = Array(this.
|
|
186
|
+
this.PA = A, this.uA = t, this.IA = null, this.mA = Array(this.pA).fill(null);
|
|
187
187
|
const e = this.wA, s = this.P.type === "float" ? e.FLOAT : e.UNSIGNED_BYTE;
|
|
188
188
|
for (const i of this.dA) e.bindTexture(e.TEXTURE_2D, i), e.texImage2D(e.TEXTURE_2D, 0, e.RGBA, this.PA, this.uA, 0, e.RGBA, s, null);
|
|
189
189
|
e.bindTexture(e.TEXTURE_2D, null);
|
|
190
190
|
}
|
|
191
|
-
|
|
191
|
+
MA(A) {
|
|
192
192
|
const t = this.wA, e = this.mA[A];
|
|
193
193
|
if (e) return e;
|
|
194
194
|
const s = this.PA, i = this.uA, B = new Uint8Array(s * i * 4), r = t.getParameter(t.READ_FRAMEBUFFER_BINDING);
|
|
195
195
|
t.bindFramebuffer(t.READ_FRAMEBUFFER, this.fA), t.readBuffer(t.COLOR_ATTACHMENT0 + A), t.readPixels(0, 0, s, i, t.RGBA, t.UNSIGNED_BYTE, B), t.bindFramebuffer(t.READ_FRAMEBUFFER, r);
|
|
196
|
-
const
|
|
197
|
-
for (let
|
|
198
|
-
const
|
|
199
|
-
o.set(B.subarray(
|
|
196
|
+
const Q = 4 * s, o = new Uint8Array(B.length);
|
|
197
|
+
for (let g = 0; g < i; g++) {
|
|
198
|
+
const a = (i - 1 - g) * Q, h = g * Q;
|
|
199
|
+
o.set(B.subarray(a, a + Q), h);
|
|
200
200
|
}
|
|
201
201
|
return this.mA[A] = o, o;
|
|
202
202
|
}
|
|
@@ -207,19 +207,19 @@ class U {
|
|
|
207
207
|
const B = ((e = (t = this.vA).YA) == null ? void 0 : e.call(t)) ?? null;
|
|
208
208
|
B && this.vA.FA(B), this.yA && this.bA && ((i = (s = this.vA).RA) == null || i.call(s, this.bA));
|
|
209
209
|
}
|
|
210
|
-
this.
|
|
211
|
-
for (let B = 0; B < this.
|
|
210
|
+
this._A = { framebuffer: A.getParameter(A.FRAMEBUFFER_BINDING), viewport: A.getParameter(A.VIEWPORT) }, A.bindFramebuffer(A.FRAMEBUFFER, this.fA), this.mA = Array(this.pA).fill(null);
|
|
211
|
+
for (let B = 0; B < this.pA; B++) A.clearBufferfv(A.COLOR, B, new Float32Array([0, 0, 0, 0]));
|
|
212
212
|
A.viewport(0, 0, this.PA, this.uA), F(A, [0, 0, this.PA, this.uA]);
|
|
213
213
|
}
|
|
214
214
|
end() {
|
|
215
215
|
var t, e, s, i;
|
|
216
|
-
if (!this.
|
|
216
|
+
if (!this._A) return;
|
|
217
217
|
const A = this.wA;
|
|
218
218
|
if (this.vA) {
|
|
219
219
|
const B = ((e = (t = this.vA).YA) == null ? void 0 : e.call(t)) ?? null;
|
|
220
220
|
B && this.vA.FA(B);
|
|
221
221
|
}
|
|
222
|
-
A.bindFramebuffer(A.FRAMEBUFFER, this.
|
|
222
|
+
A.bindFramebuffer(A.FRAMEBUFFER, this._A.framebuffer), A.viewport(...this._A.viewport), F(A, this._A.viewport), this._A = null, this.vA && this.yA && this.bA && ((i = (s = this.vA).SA) == null || i.call(s));
|
|
223
223
|
}
|
|
224
224
|
kA() {
|
|
225
225
|
const A = this.wA;
|
|
@@ -236,36 +236,40 @@ class U {
|
|
|
236
236
|
return [...this.dA];
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
|
-
function
|
|
239
|
+
function N(E) {
|
|
240
240
|
return typeof E == "string" ? E : E.sourceCode;
|
|
241
241
|
}
|
|
242
242
|
class T {
|
|
243
243
|
constructor(A, t, e) {
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
this
|
|
249
|
-
|
|
250
|
-
|
|
244
|
+
n(this, "wA");
|
|
245
|
+
n(this, "zA");
|
|
246
|
+
n(this, "LA", /* @__PURE__ */ new Map());
|
|
247
|
+
n(this, "OA", /* @__PURE__ */ new Map());
|
|
248
|
+
n(this, "TA", 0);
|
|
249
|
+
this.wA = A, this.zA = this.UA(N(t), N(e)), this.WA();
|
|
250
|
+
}
|
|
251
|
+
WA() {
|
|
251
252
|
const A = this.wA.getProgramParameter(this.zA, this.wA.ACTIVE_UNIFORMS);
|
|
252
253
|
for (let t = 0; t < A; t++) {
|
|
253
254
|
const e = this.wA.getActiveUniform(this.zA, t);
|
|
254
255
|
if (e) {
|
|
255
256
|
const s = this.wA.getUniformLocation(this.zA, e.name);
|
|
256
|
-
s && this.LA.set(e.name, s)
|
|
257
|
+
if (s && (this.LA.set(e.name, s), this.OA.set(e.name, { type: e.type, size: e.size }), e.size > 1)) {
|
|
258
|
+
const i = e.name.replace(/\[.*\]$/, "");
|
|
259
|
+
this.LA.has(i) || (this.LA.set(i, s), this.OA.set(i, { type: e.type, size: e.size }));
|
|
260
|
+
}
|
|
257
261
|
}
|
|
258
262
|
}
|
|
259
263
|
}
|
|
260
|
-
|
|
261
|
-
const e = this.
|
|
264
|
+
UA(A, t) {
|
|
265
|
+
const e = this.HA(this.wA.VERTEX_SHADER, A), s = this.HA(this.wA.FRAGMENT_SHADER, t), i = this.wA.createProgram();
|
|
262
266
|
if (this.wA.attachShader(i, e), this.wA.attachShader(i, s), this.wA.linkProgram(i), !this.wA.getProgramParameter(i, this.wA.LINK_STATUS)) {
|
|
263
267
|
const B = this.wA.getProgramInfoLog(i);
|
|
264
268
|
throw Error("Shader program link error: " + B);
|
|
265
269
|
}
|
|
266
270
|
return this.wA.deleteShader(e), this.wA.deleteShader(s), i;
|
|
267
271
|
}
|
|
268
|
-
|
|
272
|
+
HA(A, t) {
|
|
269
273
|
const e = this.wA.createShader(A);
|
|
270
274
|
if (this.wA.shaderSource(e, t), this.wA.compileShader(e), !this.wA.getShaderParameter(e, this.wA.COMPILE_STATUS)) {
|
|
271
275
|
const s = this.wA.getShaderInfoLog(e);
|
|
@@ -273,209 +277,237 @@ class T {
|
|
|
273
277
|
}
|
|
274
278
|
return e;
|
|
275
279
|
}
|
|
276
|
-
HA() {
|
|
277
|
-
this.wA.useProgram(this.zA), this.KA();
|
|
278
|
-
}
|
|
279
280
|
KA() {
|
|
280
|
-
this.
|
|
281
|
+
this.wA.useProgram(this.zA), this.JA();
|
|
281
282
|
}
|
|
282
|
-
JA(
|
|
283
|
-
|
|
283
|
+
JA() {
|
|
284
|
+
this.TA = 0;
|
|
284
285
|
}
|
|
285
|
-
|
|
286
|
+
VA(A) {
|
|
287
|
+
for (const [t, e] of Object.entries(A)) this.ZA(t, e);
|
|
288
|
+
}
|
|
289
|
+
NA(A) {
|
|
286
290
|
return this.LA.has(A);
|
|
287
291
|
}
|
|
288
|
-
|
|
289
|
-
|
|
292
|
+
XA(A) {
|
|
293
|
+
return this.OA.get(A) || null;
|
|
294
|
+
}
|
|
295
|
+
jA() {
|
|
296
|
+
const A = [];
|
|
297
|
+
for (const [t, e] of this.OA.entries()) A.push({ name: t, ...e });
|
|
298
|
+
return A;
|
|
299
|
+
}
|
|
300
|
+
ZA(A, t) {
|
|
301
|
+
var Q;
|
|
290
302
|
const e = this.LA.get(A);
|
|
291
|
-
if (e)
|
|
292
|
-
|
|
303
|
+
if (!e) return;
|
|
304
|
+
const s = this.OA.get(A);
|
|
305
|
+
if (!s) return void console.warn(`No type information found for uniform '${A}'`);
|
|
306
|
+
const { type: i, size: B } = s, r = this.wA;
|
|
307
|
+
if (typeof t == "number") switch (i) {
|
|
308
|
+
case r.INT:
|
|
309
|
+
case r.BOOL:
|
|
310
|
+
r.uniform1i(e, t);
|
|
311
|
+
break;
|
|
312
|
+
case r.FLOAT:
|
|
313
|
+
r.uniform1f(e, t);
|
|
314
|
+
break;
|
|
315
|
+
default:
|
|
316
|
+
console.warn(`Unexpected uniform type for scalar '${A}': ${i}`), r.uniform1f(e, t);
|
|
317
|
+
}
|
|
318
|
+
else if (typeof t == "boolean") r.uniform1i(e, t ? 1 : 0);
|
|
293
319
|
else if (Array.isArray(t)) if (Array.isArray(t[0])) {
|
|
294
|
-
const
|
|
295
|
-
switch (
|
|
296
|
-
case
|
|
297
|
-
|
|
320
|
+
const o = t, g = ((Q = o[0]) == null ? void 0 : Q.length) || 0, a = o.flat();
|
|
321
|
+
switch (i) {
|
|
322
|
+
case r.FLOAT_VEC2:
|
|
323
|
+
g === 2 ? r.uniform2fv(e, a) : console.warn(`Vector length mismatch for '${A}': expected 2, got ${g}`);
|
|
298
324
|
break;
|
|
299
|
-
case
|
|
300
|
-
|
|
325
|
+
case r.FLOAT_VEC3:
|
|
326
|
+
g === 3 ? r.uniform3fv(e, a) : console.warn(`Vector length mismatch for '${A}': expected 3, got ${g}`);
|
|
301
327
|
break;
|
|
302
|
-
case
|
|
303
|
-
|
|
328
|
+
case r.FLOAT_VEC4:
|
|
329
|
+
g === 4 ? r.uniform4fv(e, a) : console.warn(`Vector length mismatch for '${A}': expected 4, got ${g}`);
|
|
304
330
|
break;
|
|
305
331
|
default:
|
|
306
|
-
|
|
332
|
+
console.warn(`Unsupported uniform type for vector array '${A}': ${i}`);
|
|
307
333
|
}
|
|
308
|
-
} else switch (
|
|
309
|
-
case
|
|
310
|
-
|
|
334
|
+
} else switch (i) {
|
|
335
|
+
case r.FLOAT_VEC2:
|
|
336
|
+
t.length === 2 ? r.uniform2f(e, t[0], t[1]) : console.warn(`Vector length mismatch for '${A}': expected 2, got ${t.length}`);
|
|
311
337
|
break;
|
|
312
|
-
case
|
|
313
|
-
|
|
338
|
+
case r.FLOAT_VEC3:
|
|
339
|
+
t.length === 3 ? r.uniform3f(e, t[0], t[1], t[2]) : console.warn(`Vector length mismatch for '${A}': expected 3, got ${t.length}`);
|
|
314
340
|
break;
|
|
315
|
-
case
|
|
316
|
-
|
|
341
|
+
case r.FLOAT_VEC4:
|
|
342
|
+
t.length === 4 ? r.uniform4f(e, t[0], t[1], t[2], t[3]) : console.warn(`Vector length mismatch for '${A}': expected 4, got ${t.length}`);
|
|
343
|
+
break;
|
|
344
|
+
case r.INT:
|
|
345
|
+
B > 1 ? r.uniform1iv(e, t) : console.warn(`Array provided for scalar uniform '${A}'`);
|
|
346
|
+
break;
|
|
347
|
+
case r.FLOAT:
|
|
348
|
+
B > 1 ? r.uniform1fv(e, t) : console.warn(`Array provided for scalar uniform '${A}'`);
|
|
317
349
|
break;
|
|
318
350
|
default:
|
|
319
|
-
|
|
351
|
+
console.warn(`Unsupported uniform type for array '${A}': ${i}`);
|
|
320
352
|
}
|
|
321
353
|
else if (t instanceof WebGLTexture) {
|
|
322
|
-
const
|
|
323
|
-
|
|
354
|
+
const o = this.qA();
|
|
355
|
+
r.uniform1i(e, o), r.activeTexture(r.TEXTURE0 + o), r.bindTexture(r.TEXTURE_2D, t);
|
|
324
356
|
} else if (t instanceof U) {
|
|
325
|
-
const
|
|
326
|
-
|
|
357
|
+
const o = this.qA();
|
|
358
|
+
r.uniform1i(e, o), r.activeTexture(r.TEXTURE0 + o), r.bindTexture(r.TEXTURE_2D, t.textures[0]);
|
|
327
359
|
} else console.warn(`Unsupported uniform type for '${A}':`, typeof t);
|
|
328
360
|
}
|
|
329
|
-
|
|
330
|
-
return this.
|
|
361
|
+
qA() {
|
|
362
|
+
return this.TA++;
|
|
331
363
|
}
|
|
332
|
-
get
|
|
364
|
+
get At() {
|
|
333
365
|
return this.zA;
|
|
334
366
|
}
|
|
335
367
|
kA() {
|
|
336
368
|
this.wA.deleteProgram(this.zA);
|
|
337
369
|
}
|
|
338
370
|
}
|
|
339
|
-
const
|
|
371
|
+
const L = `#version 300 es
|
|
340
372
|
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 vec3 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 k;uniform vec2 t;out vec2 v_uv;out vec3 v_character;out vec4 v_primaryColor;out vec4 v_secondaryColor;out vec2 v_rotation;out vec3 v_transform;mat3 A(float B){float C=sin(B),D=cos(B);return mat3(1,0,0,0,D,-C,0,C,D);}mat3 E(float B){float C=sin(B),D=cos(B);return mat3(D,0,C,0,1,0,-C,0,D);}mat3 F(float B){float C=sin(B),D=cos(B);return mat3(D,-C,0,C,D,0,0,0,1);}vec2 G(float t,vec2 H,vec2 I,vec2 J,vec2 K){float L=1.-t,M=L*L,N=t*t;return M*L*H+3.*M*t*I+3.*L*N*J+N*t*K;}vec2 O(float t,vec2 H,vec2 I,vec2 J,vec2 K){float L=1.-t,M=L*L,N=t*t;return-3.*M*H+3.*M*I-6.*L*t*I+6.*L*t*J-3.*N*J+3.*N*K;}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 P;bool Q=length(a_instanceBezierCP1)+length(a_instanceBezierCP2)+length(a_instanceBezierStart)+length(a_instanceBezierEnd)>0.;bool R=a_instanceArcAngles.x!=0.||a_instanceArcAngles.y!=0.;if(Q){float t=a_position.x;vec2 S=G(t,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);vec2 T=O(t,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);float U=length(T);T=U>0.?T/U:vec2(1,0);P=S+vec2(-T.y,T.x)*a_position.y*a_instanceSize.y;}else if(R){float C=a_instanceArcAngles.x,V=a_instanceArcAngles.y;C=mod(C,6.28318530718);if(C<0.)C+=6.28318530718;V=mod(V,6.28318530718);if(V<0.)V+=6.28318530718;float W=C-V;if(W<=0.)W+=6.28318530718;float X=C-a_position.x*W;vec2 Y=vec2(cos(X),sin(X))*a_position.y;P=Y*a_instanceSize*.5+a_instanceSize*.5+a_instancePosition;}else{P=a_position*a_instanceSize+a_instancePosition;}vec2 Z=(P/t)*2.-1.;Z.y=-Z.y;if(length(a_instanceGlobalRotation)>0.){vec3 a=vec3(Z-a_instanceRotationCenter,0);a.x*=k;if(a_instanceGlobalRotation.x!=0.)a=A(-a_instanceGlobalRotation.x)*a;if(a_instanceGlobalRotation.y!=0.)a=E(-a_instanceGlobalRotation.y)*a;if(a_instanceGlobalRotation.z!=0.)a=F(-a_instanceGlobalRotation.z)*a;a.x/=k;Z=a.xy+a_instanceRotationCenter;}gl_Position=vec4(Z,0,1);}`;
|
|
341
373
|
class eA {
|
|
342
374
|
constructor(A) {
|
|
343
|
-
|
|
344
|
-
|
|
375
|
+
n(this, "tt", /* @__PURE__ */ new Map());
|
|
376
|
+
n(this, "wA");
|
|
345
377
|
this.wA = A;
|
|
346
378
|
}
|
|
347
|
-
|
|
348
|
-
if (!this.
|
|
379
|
+
et(A, t) {
|
|
380
|
+
if (!this.tt.has(A)) {
|
|
349
381
|
const e = t();
|
|
350
|
-
this.
|
|
382
|
+
this.tt.set(A, e);
|
|
351
383
|
}
|
|
352
|
-
return this.
|
|
384
|
+
return this.tt.get(A);
|
|
353
385
|
}
|
|
354
|
-
|
|
355
|
-
return this.
|
|
386
|
+
st() {
|
|
387
|
+
return this.et("mrt-copy", () => new T(this.wA, L, `#version 300 es
|
|
356
388
|
precision highp float;in vec2 v_uv;uniform sampler2D l;uniform sampler2D m;uniform sampler2D n;uniform sampler2D o;uniform sampler2D p;uniform vec2 q;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(){vec2 A=vec2(v_uv.x,1.-v_uv.y);vec2 B=A*q;vec2 C=(floor(B)+0.5f)/q;vec4 D=texture(l,C);vec4 E=texture(m,C);if(E.a==0.){discard;}vec4 F=texture(n,C);vec4 G=texture(o,C);vec4 H=texture(p,C);o_character=D;o_primaryColor=E;o_secondaryColor=F;o_rotation=G;o_transform=H;}`));
|
|
357
389
|
}
|
|
358
390
|
YA() {
|
|
359
|
-
return this.
|
|
391
|
+
return this.et("mrt-draw", () => new T(this.wA, L, `#version 300 es
|
|
360
392
|
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.);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.,1.);o_transform=vec4(v_transform,1.);}`));
|
|
361
393
|
}
|
|
362
|
-
|
|
363
|
-
return this.
|
|
394
|
+
it() {
|
|
395
|
+
return this.et("ascii-conversion", () => new T(this.wA, "attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.,1.);}", "precision mediump float;uniform sampler2D a;uniform vec2 b;uniform sampler2D d;uniform sampler2D e;uniform sampler2D f;uniform sampler2D c;uniform sampler2D g;uniform vec2 h;uniform vec2 i;uniform vec2 j;mat2 A(float B){float C=sin(B);float c=cos(B);return mat2(c,-C,C,c);}void main(){vec2 D=(gl_FragCoord.xy-j)/i;vec2 E=D*h;vec2 F=floor(E);vec2 G=(F+0.5)/h;vec4 H=texture2D(d,G);vec4 I=texture2D(e,G);vec4 J=texture2D(f,G);bool K=J.r>0.5;bool L=J.g>0.5;bool M=J.b>0.5;vec4 N=texture2D(c,G);int O=int(N.r*255.+0.5)+int(N.g*255.+0.5)*256;int P=int(mod(float(O),b.x));int Q=O/int(b.x);float R=(b.y-1.)-float(Q);vec2 S=vec2(float(P),R)/b;vec4 T=texture2D(g,G);float U=T.r*255.+T.g;float V=-(U*360./255.)*0.017453292;vec2 W=fract(E)-0.5;if(L)W.x=-W.x;if(M)W.y=-W.y;W=A(V)*W+0.5;vec2 X=1./b;vec2 Y=S+W*X;vec2 Z=S+X;if(any(lessThan(Y,S))||any(greaterThan(Y,Z))){gl_FragColor=K?H:I;return;}vec4 a=texture2D(a,Y);if(K)a.rgb=1.-a.rgb;gl_FragColor=mix(I,H,a);}"));
|
|
364
396
|
}
|
|
365
|
-
|
|
366
|
-
return new T(this.wA,
|
|
397
|
+
Bt(A) {
|
|
398
|
+
return new T(this.wA, L, A);
|
|
367
399
|
}
|
|
368
|
-
|
|
400
|
+
Qt(A, t) {
|
|
369
401
|
return new T(this.wA, A, t);
|
|
370
402
|
}
|
|
371
403
|
kA() {
|
|
372
|
-
for (const A of this.
|
|
373
|
-
this.
|
|
404
|
+
for (const A of this.tt.values()) A.kA();
|
|
405
|
+
this.tt.clear();
|
|
374
406
|
}
|
|
375
407
|
}
|
|
376
408
|
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 || {});
|
|
377
409
|
class sA {
|
|
378
410
|
constructor(A) {
|
|
379
|
-
|
|
380
|
-
|
|
411
|
+
n(this, "wA");
|
|
412
|
+
n(this, "Et", /* @__PURE__ */ new Map());
|
|
381
413
|
this.wA = A;
|
|
382
414
|
}
|
|
383
|
-
|
|
415
|
+
rt(A, t, e, s) {
|
|
384
416
|
const i = this.wA;
|
|
385
|
-
let B = this.
|
|
386
|
-
B || (B = /* @__PURE__ */ new Map(), this.
|
|
417
|
+
let B = this.Et.get(A);
|
|
418
|
+
B || (B = /* @__PURE__ */ new Map(), this.Et.set(A, B));
|
|
387
419
|
let r = B.get(t) || null;
|
|
388
420
|
if (!r) {
|
|
389
421
|
r = i.createVertexArray(), B.set(t, r), i.bindVertexArray(r), i.bindBuffer(i.ARRAY_BUFFER, s);
|
|
390
|
-
const
|
|
391
|
-
|
|
422
|
+
const Q = i.getAttribLocation(A, "a_position");
|
|
423
|
+
Q !== -1 && (i.enableVertexAttribArray(Q), i.vertexAttribPointer(Q, e.ot.nt.size, i.FLOAT, !1, e.gt, e.ot.nt.offset), i.vertexAttribDivisor(Q, 0));
|
|
392
424
|
const o = i.getAttribLocation(A, "a_texCoord");
|
|
393
|
-
o !== -1 && (i.enableVertexAttribArray(o), i.vertexAttribPointer(o, e.
|
|
425
|
+
o !== -1 && (i.enableVertexAttribArray(o), i.vertexAttribPointer(o, e.ot.ht.size, i.FLOAT, !1, e.gt, e.ot.ht.offset), i.vertexAttribDivisor(o, 0));
|
|
394
426
|
}
|
|
395
427
|
i.bindVertexArray(r);
|
|
396
428
|
}
|
|
397
|
-
|
|
429
|
+
ct() {
|
|
398
430
|
this.wA.bindVertexArray(null);
|
|
399
431
|
}
|
|
400
432
|
kA() {
|
|
401
433
|
const A = this.wA;
|
|
402
|
-
for (const [, t] of this.
|
|
403
|
-
this.
|
|
434
|
+
for (const [, t] of this.Et) for (const [, e] of t) e && A.deleteVertexArray(e);
|
|
435
|
+
this.Et.clear();
|
|
404
436
|
}
|
|
405
437
|
}
|
|
406
438
|
class iA {
|
|
407
439
|
constructor(A, t) {
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
this.wA = A, this.
|
|
414
|
-
}
|
|
415
|
-
|
|
440
|
+
n(this, "lt");
|
|
441
|
+
n(this, "wA");
|
|
442
|
+
n(this, "vA");
|
|
443
|
+
n(this, "Ct", null);
|
|
444
|
+
n(this, "Dt", null);
|
|
445
|
+
this.wA = A, this.lt = new sA(A), this.vA = t;
|
|
446
|
+
}
|
|
447
|
+
Pt(A, t, e) {
|
|
416
448
|
const { shader: s } = A, i = G(this.wA) || this.wA.getParameter(this.wA.VIEWPORT);
|
|
417
|
-
s.
|
|
449
|
+
s.VA({ k: i[2] / i[3], t: [i[2], i[3]] });
|
|
418
450
|
const B = (o) => {
|
|
419
|
-
if (!o || !o.
|
|
420
|
-
const
|
|
451
|
+
if (!o || !o.ut()) return;
|
|
452
|
+
const g = o.unitGeometry, a = o.unitBuffer;
|
|
421
453
|
try {
|
|
422
|
-
this.
|
|
454
|
+
this.lt.rt(s.At, o.type + "", g, a), o.batch.It(s), o.batch.wt(g.ft, g.dt);
|
|
423
455
|
} finally {
|
|
424
|
-
o.batch.
|
|
456
|
+
o.batch._t(s), this.lt.ct(), o.vt();
|
|
425
457
|
}
|
|
426
458
|
};
|
|
427
|
-
let r = null,
|
|
459
|
+
let r = null, Q = null;
|
|
428
460
|
for (const o of t) {
|
|
429
461
|
if (o.type === D.CUSTOM) {
|
|
430
|
-
|
|
462
|
+
Q && (B(Q), r = null, Q = null), this.yt(A, o.params, o.state, e.get(D.RECTANGLE));
|
|
431
463
|
continue;
|
|
432
464
|
}
|
|
433
|
-
r !== null && o.type !== r && (B(
|
|
434
|
-
let
|
|
435
|
-
|
|
465
|
+
r !== null && o.type !== r && (B(Q), r = null, Q = null);
|
|
466
|
+
let g = Q;
|
|
467
|
+
g && o.type === r || (g = e.get(o.type) || null, Q = g, r = o.type), g && g.bt(o.params, o.state);
|
|
436
468
|
}
|
|
437
|
-
B(
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
const { x: i, y: B, width: r, height:
|
|
441
|
-
if (o === this
|
|
442
|
-
const
|
|
443
|
-
|
|
444
|
-
const h = this
|
|
445
|
-
this.
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
t.
|
|
469
|
+
B(Q);
|
|
470
|
+
}
|
|
471
|
+
yt(A, t, e, s) {
|
|
472
|
+
const { x: i, y: B, width: r, height: Q, shader: o, uniforms: g } = t;
|
|
473
|
+
if (o === this.$t()) return this.Gt(s, o, g, Math.floor(i), Math.floor(B), Math.max(1, Math.floor(r)), Math.max(1, Math.floor(Q)), e), void A.shader.KA();
|
|
474
|
+
const a = this.xt(Math.max(1, Math.floor(r)), Math.max(1, Math.floor(Q)));
|
|
475
|
+
a.begin(), this.Gt(s, o, g, 0, 0, a.width, a.height, {}), a.end();
|
|
476
|
+
const h = this.$t(), c = { l: a.textures[0], m: a.textures[1], n: a.textures[2], o: a.textures[3], p: a.textures[4], q: [a.width, a.height] };
|
|
477
|
+
this.Gt(s, h, c, Math.floor(i), Math.floor(B), Math.max(1, Math.floor(r)), Math.max(1, Math.floor(Q)), e), A.shader.KA();
|
|
478
|
+
}
|
|
479
|
+
Gt(A, t, e, s, i, B, r, Q) {
|
|
480
|
+
t.KA(), t.VA(e);
|
|
449
481
|
const o = this.wA.getParameter(this.wA.VIEWPORT);
|
|
450
|
-
if (t.
|
|
451
|
-
const
|
|
482
|
+
if (t.VA({ k: o[2] / o[3], t: [o[2], o[3]] }), A.vt(), A.bt({ x: s, y: i, width: B, height: r }, Q), A.ut()) {
|
|
483
|
+
const g = A.unitGeometry, a = A.unitBuffer;
|
|
452
484
|
try {
|
|
453
|
-
this.
|
|
485
|
+
this.lt.rt(t.At, A.type + "", g, a), A.batch.It(t), A.batch.wt(g.ft, g.dt);
|
|
454
486
|
} finally {
|
|
455
|
-
A.batch.
|
|
487
|
+
A.batch._t(t), this.lt.ct(), A.vt();
|
|
456
488
|
}
|
|
457
489
|
}
|
|
458
490
|
}
|
|
459
|
-
|
|
460
|
-
return this.vA.
|
|
491
|
+
$t() {
|
|
492
|
+
return this.vA.st();
|
|
461
493
|
}
|
|
462
|
-
|
|
463
|
-
return this.
|
|
494
|
+
xt(A, t) {
|
|
495
|
+
return this.Ct && this.Dt && this.Dt.w === A && this.Dt.h === t || (this.Ct && this.Ct.kA(), this.Ct = new U(this.wA, A, t, 5), this.Dt = { w: A, h: t }), this.Ct;
|
|
464
496
|
}
|
|
465
497
|
}
|
|
466
498
|
class BA {
|
|
467
499
|
constructor() {
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
if (this.
|
|
474
|
-
const e = { id: this.
|
|
475
|
-
this
|
|
500
|
+
n(this, "Mt", []);
|
|
501
|
+
n(this, "Yt", 1);
|
|
502
|
+
n(this, "Ft", 0);
|
|
503
|
+
}
|
|
504
|
+
Rt(A) {
|
|
505
|
+
if (this.Ft >= this.Mt.length) {
|
|
506
|
+
const e = { id: this.Yt++, type: A, params: {}, state: { V: 1, Z: 0, N: 0, X: 0, character: [0, 0, 0], charColor: [1, 1, 1, 1], bgColor: [0, 0, 0, 1], flipHorizontally: !1, flipVertically: !1, invert: !1, charRotation: [0, 0] } };
|
|
507
|
+
this.Mt.push(e);
|
|
476
508
|
}
|
|
477
|
-
const t = this
|
|
478
|
-
switch (t.id = this.
|
|
509
|
+
const t = this.Mt[this.Ft];
|
|
510
|
+
switch (t.id = this.Yt++, t.type = A, A) {
|
|
479
511
|
case D.RECTANGLE:
|
|
480
512
|
case D.ELLIPSE:
|
|
481
513
|
t.params && "width" in t.params || (t.params = { x: 0, y: 0, width: 0, height: 0 });
|
|
@@ -498,403 +530,403 @@ class BA {
|
|
|
498
530
|
default:
|
|
499
531
|
t.params || (t.params = {});
|
|
500
532
|
}
|
|
501
|
-
return this.
|
|
533
|
+
return this.Ft++, t;
|
|
502
534
|
}
|
|
503
|
-
|
|
504
|
-
const B = this.
|
|
535
|
+
St(A, t, e, s, i) {
|
|
536
|
+
const B = this.Rt(D.RECTANGLE);
|
|
505
537
|
return B.params.x = A, B.params.y = t, B.params.width = e, B.params.height = s, i.BA(B.state), B.id;
|
|
506
538
|
}
|
|
507
|
-
|
|
508
|
-
const
|
|
509
|
-
return
|
|
539
|
+
kt(A, t, e, s, i, B, r) {
|
|
540
|
+
const Q = this.Rt(D.CUSTOM);
|
|
541
|
+
return Q.params.x = A, Q.params.y = t, Q.params.width = e, Q.params.height = s, Q.params.shader = i, Q.params.uniforms = B, r.BA(Q.state), Q.id;
|
|
510
542
|
}
|
|
511
|
-
|
|
512
|
-
const r = this.
|
|
543
|
+
zt(A, t, e, s, i, B) {
|
|
544
|
+
const r = this.Rt(D.LINE);
|
|
513
545
|
return r.params.x1 = A, r.params.y1 = t, r.params.x2 = e, r.params.y2 = s, r.params.thickness = i, B.BA(r.state), r.id;
|
|
514
546
|
}
|
|
515
|
-
|
|
516
|
-
const B = this.
|
|
547
|
+
Lt(A, t, e, s, i) {
|
|
548
|
+
const B = this.Rt(D.ELLIPSE);
|
|
517
549
|
return B.params.x = A, B.params.y = t, B.params.width = e, B.params.height = s, i.BA(B.state), B.id;
|
|
518
550
|
}
|
|
519
|
-
|
|
520
|
-
const
|
|
521
|
-
return
|
|
551
|
+
Ot(A, t, e, s, i, B, r) {
|
|
552
|
+
const Q = this.Rt(D.ARC);
|
|
553
|
+
return Q.params.x = A, Q.params.y = t, Q.params.width = e, Q.params.height = s, Q.params.start = i, Q.params.stop = B, r.BA(Q.state), Q.id;
|
|
522
554
|
}
|
|
523
|
-
|
|
524
|
-
const
|
|
525
|
-
return
|
|
555
|
+
Tt(A, t, e, s, i, B, r) {
|
|
556
|
+
const Q = this.Rt(D.TRIANGLE);
|
|
557
|
+
return Q.params.x1 = A, Q.params.y1 = t, Q.params.x2 = e, Q.params.y2 = s, Q.params.x3 = i, Q.params.y3 = B, r.BA(Q.state), Q.id;
|
|
526
558
|
}
|
|
527
|
-
|
|
528
|
-
const
|
|
529
|
-
return
|
|
559
|
+
Ut(A, t, e, s, i, B, r, Q, o, g) {
|
|
560
|
+
const a = this.Rt(D.BEZIER_CURVE);
|
|
561
|
+
return a.params.x1 = A, a.params.y1 = t, a.params.cp1x = e, a.params.cp1y = s, a.params.cp2x = i, a.params.cp2y = B, a.params.x2 = r, a.params.y2 = Q, a.params.thickness = o, g.BA(a.state), a.id;
|
|
530
562
|
}
|
|
531
563
|
get length() {
|
|
532
|
-
return this.
|
|
564
|
+
return this.Ft;
|
|
533
565
|
}
|
|
534
566
|
get isEmpty() {
|
|
535
|
-
return this.
|
|
567
|
+
return this.Ft === 0;
|
|
536
568
|
}
|
|
537
|
-
|
|
538
|
-
this.
|
|
569
|
+
Wt() {
|
|
570
|
+
this.Ft = 0;
|
|
539
571
|
}
|
|
540
572
|
[Symbol.iterator]() {
|
|
541
573
|
let A = 0;
|
|
542
|
-
const t = this.
|
|
574
|
+
const t = this.Ft, e = this.Mt;
|
|
543
575
|
return { next: () => A < t ? { value: e[A++], done: !1 } : { value: void 0, done: !0 } };
|
|
544
576
|
}
|
|
545
577
|
}
|
|
546
|
-
const
|
|
547
|
-
static
|
|
548
|
-
var B, r,
|
|
549
|
-
const s = t || new Float32Array(
|
|
578
|
+
const y = class y {
|
|
579
|
+
static Ht(A, t, e = 0) {
|
|
580
|
+
var B, r, Q, o, g, a, h, c, l, C;
|
|
581
|
+
const s = t || new Float32Array(y.FLOATS_PER_INSTANCE);
|
|
550
582
|
let i = e;
|
|
551
|
-
return s[i++] = A.position[0], s[i++] = A.position[1], s[i++] = A.size[0], s[i++] = A.size[1], s[i++] = A.AA[0], s[i++] = A.AA[1], s[i++] = A.AA[2], s[i++] = A.primaryColor[0], s[i++] = A.primaryColor[1], s[i++] = A.primaryColor[2], s[i++] = A.primaryColor[3], s[i++] = A.secondaryColor[0], s[i++] = A.secondaryColor[1], s[i++] = A.secondaryColor[2], s[i++] = A.secondaryColor[3], s[i++] = A.rotation[0], s[i++] = A.rotation[1], s[i++] = A.transform[0], s[i++] = A.transform[1], s[i++] = A.transform[2], s[i++] = A.globalRotationX, s[i++] = A.globalRotationY, s[i++] = A.globalRotationZ, s[i++] = A.rotationCenter[0], s[i++] = A.rotationCenter[1], s[i++] = ((B = A.arcAngles) == null ? void 0 : B[0]) || 0, s[i++] = ((r = A.arcAngles) == null ? void 0 : r[1]) || 0, s[i++] = ((
|
|
583
|
+
return s[i++] = A.position[0], s[i++] = A.position[1], s[i++] = A.size[0], s[i++] = A.size[1], s[i++] = A.AA[0], s[i++] = A.AA[1], s[i++] = A.AA[2], s[i++] = A.primaryColor[0], s[i++] = A.primaryColor[1], s[i++] = A.primaryColor[2], s[i++] = A.primaryColor[3], s[i++] = A.secondaryColor[0], s[i++] = A.secondaryColor[1], s[i++] = A.secondaryColor[2], s[i++] = A.secondaryColor[3], s[i++] = A.rotation[0], s[i++] = A.rotation[1], s[i++] = A.transform[0], s[i++] = A.transform[1], s[i++] = A.transform[2], s[i++] = A.globalRotationX, s[i++] = A.globalRotationY, s[i++] = A.globalRotationZ, s[i++] = A.rotationCenter[0], s[i++] = A.rotationCenter[1], s[i++] = ((B = A.arcAngles) == null ? void 0 : B[0]) || 0, s[i++] = ((r = A.arcAngles) == null ? void 0 : r[1]) || 0, s[i++] = ((Q = A.bezierControlPoint1) == null ? void 0 : Q[0]) || 0, s[i++] = ((o = A.bezierControlPoint1) == null ? void 0 : o[1]) || 0, s[i++] = ((g = A.bezierControlPoint2) == null ? void 0 : g[0]) || 0, s[i++] = ((a = A.bezierControlPoint2) == null ? void 0 : a[1]) || 0, s[i++] = ((h = A.bezierStartPoint) == null ? void 0 : h[0]) || 0, s[i++] = ((c = A.bezierStartPoint) == null ? void 0 : c[1]) || 0, s[i++] = ((l = A.bezierEndPoint) == null ? void 0 : l[0]) || 0, s[i++] = ((C = A.bezierEndPoint) == null ? void 0 : C[1]) || 0, s;
|
|
552
584
|
}
|
|
553
|
-
static
|
|
554
|
-
const t = A.length *
|
|
585
|
+
static Kt(A) {
|
|
586
|
+
const t = A.length * y.FLOATS_PER_INSTANCE, e = new Float32Array(t);
|
|
555
587
|
for (let s = 0; s < A.length; s++) {
|
|
556
|
-
const i = s *
|
|
557
|
-
|
|
588
|
+
const i = s * y.FLOATS_PER_INSTANCE;
|
|
589
|
+
y.Ht(A[s], e, i);
|
|
558
590
|
}
|
|
559
591
|
return e;
|
|
560
592
|
}
|
|
561
593
|
};
|
|
562
|
-
|
|
563
|
-
let
|
|
594
|
+
n(y, "BYTES_PER_INSTANCE", 140), n(y, "FLOATS_PER_INSTANCE", 35);
|
|
595
|
+
let R = y;
|
|
564
596
|
const P = class P {
|
|
565
597
|
};
|
|
566
|
-
|
|
567
|
-
let
|
|
598
|
+
n(P, "STRIDE", R.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: 3, 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: 92, divisor: 1 }, a_instanceArcAngles: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 100, divisor: 1 }, a_instanceBezierCP1: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 108, divisor: 1 }, a_instanceBezierCP2: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 116, divisor: 1 }, a_instanceBezierStart: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 124, divisor: 1 }, a_instanceBezierEnd: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 132, divisor: 1 } });
|
|
599
|
+
let S = P;
|
|
568
600
|
class rA {
|
|
569
601
|
constructor(A, t = 1e3, e = 1.5) {
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
this.wA = A, this.
|
|
580
|
-
}
|
|
581
|
-
|
|
582
|
-
const t = this.
|
|
583
|
-
return this.
|
|
602
|
+
n(this, "wA");
|
|
603
|
+
n(this, "Jt", []);
|
|
604
|
+
n(this, "Vt");
|
|
605
|
+
n(this, "Zt");
|
|
606
|
+
n(this, "Nt", null);
|
|
607
|
+
n(this, "Xt", !0);
|
|
608
|
+
n(this, "jt", 0);
|
|
609
|
+
n(this, "qt", /* @__PURE__ */ new Map());
|
|
610
|
+
n(this, "Ae", null);
|
|
611
|
+
this.wA = A, this.Vt = t, this.Zt = e, this.te();
|
|
612
|
+
}
|
|
613
|
+
bt(A) {
|
|
614
|
+
const t = this.Jt.length;
|
|
615
|
+
return this.Jt.push(A), this.Xt = !0, t;
|
|
584
616
|
}
|
|
585
617
|
get count() {
|
|
586
|
-
return this.
|
|
618
|
+
return this.Jt.length;
|
|
587
619
|
}
|
|
588
620
|
get isEmpty() {
|
|
589
|
-
return this.
|
|
621
|
+
return this.Jt.length === 0;
|
|
590
622
|
}
|
|
591
623
|
clear() {
|
|
592
|
-
this.
|
|
624
|
+
this.Jt.length = 0, this.Xt = !0;
|
|
593
625
|
}
|
|
594
|
-
|
|
595
|
-
if (A <= this.
|
|
596
|
-
const t = Math.ceil(A * this.
|
|
597
|
-
this.
|
|
626
|
+
ee(A) {
|
|
627
|
+
if (A <= this.Vt) return;
|
|
628
|
+
const t = Math.ceil(A * this.Zt);
|
|
629
|
+
this.Vt = t, this.te();
|
|
598
630
|
}
|
|
599
|
-
|
|
631
|
+
te() {
|
|
600
632
|
const A = this.wA;
|
|
601
|
-
this.
|
|
602
|
-
const t = this.
|
|
603
|
-
A.bindBuffer(A.ARRAY_BUFFER, this.
|
|
604
|
-
}
|
|
605
|
-
|
|
606
|
-
if (!this.
|
|
607
|
-
const A = this.wA, t = this.
|
|
608
|
-
this.
|
|
609
|
-
const e =
|
|
610
|
-
A.bindBuffer(A.ARRAY_BUFFER, this.
|
|
611
|
-
}
|
|
612
|
-
|
|
613
|
-
let t = this.
|
|
633
|
+
this.Nt && A.deleteBuffer(this.Nt), this.Nt = A.createBuffer();
|
|
634
|
+
const t = this.Vt * R.BYTES_PER_INSTANCE;
|
|
635
|
+
A.bindBuffer(A.ARRAY_BUFFER, this.Nt), A.bufferData(A.ARRAY_BUFFER, t, A.DYNAMIC_DRAW), A.bindBuffer(A.ARRAY_BUFFER, null), this.Xt = !0, this.jt = 0;
|
|
636
|
+
}
|
|
637
|
+
se() {
|
|
638
|
+
if (!this.Xt || this.Jt.length === 0) return;
|
|
639
|
+
const A = this.wA, t = this.Jt.length;
|
|
640
|
+
this.ee(t), (!this.Ae || this.Ae.length < t * R.FLOATS_PER_INSTANCE) && (this.Ae = new Float32Array(t * R.FLOATS_PER_INSTANCE));
|
|
641
|
+
const e = R.Kt(this.Jt);
|
|
642
|
+
A.bindBuffer(A.ARRAY_BUFFER, this.Nt), t <= this.jt ? A.bufferSubData(A.ARRAY_BUFFER, 0, e) : A.bufferData(A.ARRAY_BUFFER, e, A.DYNAMIC_DRAW), A.bindBuffer(A.ARRAY_BUFFER, null), this.Xt = !1, this.jt = t;
|
|
643
|
+
}
|
|
644
|
+
ie(A) {
|
|
645
|
+
let t = this.qt.get(A);
|
|
614
646
|
if (!t) {
|
|
615
647
|
t = /* @__PURE__ */ new Map();
|
|
616
648
|
const e = this.wA;
|
|
617
|
-
for (const s in
|
|
649
|
+
for (const s in S.ATTRIBUTES) {
|
|
618
650
|
const i = e.getAttribLocation(A, s);
|
|
619
651
|
i !== -1 && t.set(s, i);
|
|
620
652
|
}
|
|
621
|
-
this.
|
|
653
|
+
this.qt.set(A, t);
|
|
622
654
|
}
|
|
623
655
|
return t;
|
|
624
656
|
}
|
|
625
|
-
|
|
626
|
-
if (!this.
|
|
627
|
-
const t = this.wA, e = A.
|
|
628
|
-
this.
|
|
629
|
-
const s = this.
|
|
630
|
-
t.bindBuffer(t.ARRAY_BUFFER, this.
|
|
657
|
+
It(A) {
|
|
658
|
+
if (!this.Nt || this.Jt.length === 0) return;
|
|
659
|
+
const t = this.wA, e = A.At;
|
|
660
|
+
this.se();
|
|
661
|
+
const s = this.ie(e);
|
|
662
|
+
t.bindBuffer(t.ARRAY_BUFFER, this.Nt);
|
|
631
663
|
for (const [i, B] of s) {
|
|
632
|
-
const r =
|
|
664
|
+
const r = S.ATTRIBUTES[i];
|
|
633
665
|
r && (t.enableVertexAttribArray(B), t.vertexAttribPointer(B, r.size, r.type, r.normalized, r.stride, r.offset), t.vertexAttribDivisor(B, r.divisor));
|
|
634
666
|
}
|
|
635
667
|
}
|
|
636
|
-
|
|
637
|
-
const t = this.wA, e = this.
|
|
668
|
+
_t(A) {
|
|
669
|
+
const t = this.wA, e = this.ie(A.At);
|
|
638
670
|
for (const [, s] of e) t.disableVertexAttribArray(s), t.vertexAttribDivisor(s, 0);
|
|
639
671
|
}
|
|
640
|
-
|
|
641
|
-
this.
|
|
672
|
+
wt(A, t) {
|
|
673
|
+
this.Jt.length !== 0 && this.wA.drawArraysInstanced(A, 0, t, this.Jt.length);
|
|
642
674
|
}
|
|
643
675
|
kA() {
|
|
644
676
|
const A = this.wA;
|
|
645
|
-
this.
|
|
677
|
+
this.Nt && (A.deleteBuffer(this.Nt), this.Nt = null), this.Jt.length = 0, this.qt.clear(), this.Ae = null;
|
|
646
678
|
}
|
|
647
679
|
}
|
|
648
680
|
class b {
|
|
649
681
|
constructor(A, t, e, s) {
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
this.wA = A, this.
|
|
682
|
+
n(this, "wA");
|
|
683
|
+
n(this, "Be");
|
|
684
|
+
n(this, "Qe");
|
|
685
|
+
n(this, "Ee");
|
|
686
|
+
n(this, "re", null);
|
|
687
|
+
this.wA = A, this.Be = t, this.Qe = e, this.Ee = s;
|
|
656
688
|
const i = this.wA.createBuffer();
|
|
657
689
|
if (!i) throw Error("Failed to create unit geometry buffer");
|
|
658
|
-
this.wA.bindBuffer(this.wA.ARRAY_BUFFER, i), this.wA.bufferData(this.wA.ARRAY_BUFFER, this.
|
|
690
|
+
this.wA.bindBuffer(this.wA.ARRAY_BUFFER, i), this.wA.bufferData(this.wA.ARRAY_BUFFER, this.Ee.ne, this.wA.STATIC_DRAW), this.wA.bindBuffer(this.wA.ARRAY_BUFFER, null), this.re = i;
|
|
659
691
|
}
|
|
660
692
|
get type() {
|
|
661
|
-
return this.
|
|
693
|
+
return this.Qe;
|
|
662
694
|
}
|
|
663
695
|
get unitGeometry() {
|
|
664
|
-
return this.
|
|
696
|
+
return this.Ee;
|
|
665
697
|
}
|
|
666
698
|
get unitBuffer() {
|
|
667
|
-
return this.
|
|
699
|
+
return this.re;
|
|
668
700
|
}
|
|
669
701
|
get batch() {
|
|
670
|
-
return this.
|
|
702
|
+
return this.Be;
|
|
671
703
|
}
|
|
672
|
-
|
|
673
|
-
this.
|
|
704
|
+
vt() {
|
|
705
|
+
this.Be.clear();
|
|
674
706
|
}
|
|
675
|
-
|
|
676
|
-
return !this.
|
|
707
|
+
ut() {
|
|
708
|
+
return !this.Be.isEmpty;
|
|
677
709
|
}
|
|
678
710
|
kA() {
|
|
679
|
-
this.
|
|
711
|
+
this.Be.kA(), this.re && (this.wA.deleteBuffer(this.re), this.re = null);
|
|
680
712
|
}
|
|
681
|
-
|
|
682
|
-
const B = this.
|
|
713
|
+
oe(A, t, e, s, i) {
|
|
714
|
+
const B = this.ge(A, t, e, s, i.rotationX || 0, i.rotationY || 0, i.rotationZ || 0);
|
|
683
715
|
return { position: [A, t], size: [e, s], AA: i.character || [0, 0, 0], primaryColor: i.charColor || [1, 1, 1, 1], secondaryColor: i.bgColor || [0, 0, 0, 1], rotation: i.charRotation || [0, 0], transform: [i.invert ? 1 : 0, i.flipHorizontally ? 1 : 0, i.flipVertically ? 1 : 0], globalRotationX: B.radiansX, globalRotationY: B.radiansY, globalRotationZ: B.radiansZ, rotationCenter: [B.centerX, B.centerY] };
|
|
684
716
|
}
|
|
685
|
-
|
|
717
|
+
ae(A, t) {
|
|
686
718
|
const e = G(this.wA) || [0, 0, this.wA.canvas.width, this.wA.canvas.height];
|
|
687
719
|
return { nx: A / e[2] * 2 - 1, ny: 1 - t / e[3] * 2 };
|
|
688
720
|
}
|
|
689
|
-
|
|
690
|
-
const s = this.
|
|
721
|
+
he(A, t, e) {
|
|
722
|
+
const s = this.ae(t, e);
|
|
691
723
|
A.rotationCenter = [s.nx, s.ny];
|
|
692
724
|
}
|
|
693
|
-
|
|
694
|
-
const
|
|
695
|
-
return { centerX: (A + e / 2) / o * 2 - 1, centerY: 1 - (t + s / 2) /
|
|
725
|
+
ge(A, t, e, s, i, B, r) {
|
|
726
|
+
const Q = G(this.wA) || [0, 0, this.wA.canvas.width, this.wA.canvas.height], o = Q[2], g = Q[3];
|
|
727
|
+
return { centerX: (A + e / 2) / o * 2 - 1, centerY: 1 - (t + s / 2) / g * 2, radiansX: -i * Math.PI / 180, radiansY: -B * Math.PI / 180, radiansZ: -r * Math.PI / 180, aspectRatio: o / g };
|
|
696
728
|
}
|
|
697
729
|
}
|
|
698
|
-
const EA = {
|
|
730
|
+
const EA = { ne: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1]), dt: 6, ft: WebGL2RenderingContext.TRIANGLES, gt: 16, ot: { nt: { size: 2, offset: 0 }, ht: { size: 2, offset: 8 } } };
|
|
699
731
|
class QA extends b {
|
|
700
732
|
constructor(A, t) {
|
|
701
733
|
super(A, t, D.RECTANGLE, EA);
|
|
702
734
|
}
|
|
703
|
-
|
|
704
|
-
const e = this.
|
|
705
|
-
return this.
|
|
735
|
+
bt(A, t) {
|
|
736
|
+
const e = this.oe(A.x, A.y, A.width, A.height, t);
|
|
737
|
+
return this.Be.bt(e);
|
|
706
738
|
}
|
|
707
739
|
}
|
|
708
|
-
const nA = {
|
|
740
|
+
const nA = { ne: 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]), dt: 6, ft: WebGL2RenderingContext.TRIANGLES, gt: 16, ot: { nt: { size: 2, offset: 0 }, ht: { size: 2, offset: 8 } } };
|
|
709
741
|
class oA extends b {
|
|
710
742
|
constructor(A, t) {
|
|
711
743
|
super(A, t, D.LINE, nA);
|
|
712
744
|
}
|
|
713
|
-
|
|
714
|
-
const e = A.x2 - A.x1, s = A.y2 - A.y1, i = Math.hypot(e, s), B = Math.atan2(s, e), r = A.thickness || t.lineWeight || 1,
|
|
715
|
-
return this.
|
|
745
|
+
bt(A, t) {
|
|
746
|
+
const e = A.x2 - A.x1, s = A.y2 - A.y1, i = Math.hypot(e, s), B = Math.atan2(s, e), r = A.thickness || t.lineWeight || 1, Q = A.x1 + e / 2, o = A.y1 + s / 2, g = Q - i / 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, rotationX: t.rotationX || 0, rotationY: t.rotationY || 0, rotationZ: (t.rotationZ || 0) + 180 * B / Math.PI, lineWeight: r }, c = this.oe(g, a, i, r, h);
|
|
747
|
+
return this.he(c, Q, o), this.Be.bt(c);
|
|
716
748
|
}
|
|
717
749
|
}
|
|
718
|
-
const gA = {
|
|
750
|
+
const gA = { ne: function(E = 32) {
|
|
719
751
|
const A = [], t = 2 * Math.PI / E;
|
|
720
752
|
for (let e = 0; e < E; e++) {
|
|
721
|
-
const s = e * t, i = (e + 1) % E * t, B = Math.cos(s), r = Math.sin(s),
|
|
722
|
-
A.push(0, 0, 0.5, 0.5, B, r,
|
|
753
|
+
const s = e * t, i = (e + 1) % E * t, B = Math.cos(s), r = Math.sin(s), Q = 0.5 * (B + 1), o = 0.5 * (r + 1), g = Math.cos(i), a = Math.sin(i), h = 0.5 * (g + 1), c = 0.5 * (a + 1);
|
|
754
|
+
A.push(0, 0, 0.5, 0.5, B, r, Q, o, g, a, h, c);
|
|
723
755
|
}
|
|
724
756
|
return new Float32Array(A);
|
|
725
|
-
}(32),
|
|
757
|
+
}(32), dt: 96, ft: WebGL2RenderingContext.TRIANGLES, gt: 16, ot: { nt: { size: 2, offset: 0 }, ht: { size: 2, offset: 8 } } };
|
|
726
758
|
class aA extends b {
|
|
727
759
|
constructor(A, t) {
|
|
728
760
|
super(A, t, D.ELLIPSE, gA);
|
|
729
761
|
}
|
|
730
|
-
|
|
731
|
-
const e = this.
|
|
732
|
-
return this.
|
|
762
|
+
bt(A, t) {
|
|
763
|
+
const e = this.oe(A.x, A.y, A.width, A.height, t);
|
|
764
|
+
return this.he(e, A.x, A.y), this.Be.bt(e);
|
|
733
765
|
}
|
|
734
766
|
}
|
|
735
|
-
let hA = {
|
|
767
|
+
let hA = { ne: function(E) {
|
|
736
768
|
const A = [];
|
|
737
769
|
for (let t = 0; t < E; t++) {
|
|
738
770
|
const e = t / E, s = (t + 1) / E;
|
|
739
771
|
A.push(e, 0, e, 0, e, 1, e, 1, s, 1, s, 1);
|
|
740
772
|
}
|
|
741
773
|
return new Float32Array(A);
|
|
742
|
-
}(32),
|
|
774
|
+
}(32), dt: 96, ft: WebGL2RenderingContext.TRIANGLES, gt: 16, ot: { nt: { size: 2, offset: 0 }, ht: { size: 2, offset: 8 } } };
|
|
743
775
|
class cA extends b {
|
|
744
776
|
constructor(A, t) {
|
|
745
777
|
super(A, t, D.ARC, hA);
|
|
746
778
|
}
|
|
747
|
-
|
|
748
|
-
const e = A.x - A.width / 2, s = A.y - A.height / 2, i = A.start * Math.PI / 180, B = A.stop * Math.PI / 180, r = this.
|
|
749
|
-
return this.
|
|
779
|
+
bt(A, t) {
|
|
780
|
+
const e = A.x - A.width / 2, s = A.y - A.height / 2, i = A.start * Math.PI / 180, B = A.stop * Math.PI / 180, r = this.oe(e, s, A.width, A.height, t);
|
|
781
|
+
return this.he(r, A.x, A.y), r.arcAngles = [i, B], this.Be.bt(r);
|
|
750
782
|
}
|
|
751
783
|
}
|
|
752
|
-
const lA = {
|
|
784
|
+
const lA = { ne: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0.5, 1, 0.5, 1]), dt: 3, ft: WebGL2RenderingContext.TRIANGLES, gt: 16, ot: { nt: { size: 2, offset: 0 }, ht: { size: 2, offset: 8 } } };
|
|
753
785
|
class CA extends b {
|
|
754
786
|
constructor(A, t) {
|
|
755
787
|
super(A, t, D.TRIANGLE, lA);
|
|
756
788
|
}
|
|
757
|
-
|
|
758
|
-
const e = Math.min(A.x1, A.x2, A.x3), s = Math.max(A.x1, A.x2, A.x3), i = Math.min(A.y1, A.y2, A.y3), B = s - e, r = Math.max(A.y1, A.y2, A.y3) - i,
|
|
759
|
-
return this.
|
|
789
|
+
bt(A, t) {
|
|
790
|
+
const e = Math.min(A.x1, A.x2, A.x3), s = Math.max(A.x1, A.x2, A.x3), i = Math.min(A.y1, A.y2, A.y3), B = s - e, r = Math.max(A.y1, A.y2, A.y3) - i, Q = this.oe(e, i, B, r, t), o = e + 0.5 * B, g = i + r * (1 / 3);
|
|
791
|
+
return this.he(Q, o, g), this.Be.bt(Q);
|
|
760
792
|
}
|
|
761
793
|
}
|
|
762
|
-
function
|
|
794
|
+
function W(E, A, t, e, s) {
|
|
763
795
|
const i = 1 - E, B = i * i, r = E * E;
|
|
764
796
|
return B * i * A + 3 * B * E * t + 3 * i * r * e + r * E * s;
|
|
765
797
|
}
|
|
766
|
-
const DA = {
|
|
798
|
+
const DA = { ne: function(E = 16) {
|
|
767
799
|
const A = [];
|
|
768
800
|
for (let t = 0; t < E; t++) {
|
|
769
801
|
const e = t / E, s = (t + 1) / E;
|
|
770
802
|
A.push(e, -0.5, e, 0), A.push(s, -0.5, s, 0), A.push(e, 0.5, e, 1), A.push(e, 0.5, e, 1), A.push(s, -0.5, s, 0), A.push(s, 0.5, s, 1);
|
|
771
803
|
}
|
|
772
804
|
return new Float32Array(A);
|
|
773
|
-
}(16),
|
|
805
|
+
}(16), dt: 96, ft: WebGL2RenderingContext.TRIANGLES, gt: 16, ot: { nt: { size: 2, offset: 0 }, ht: { size: 2, offset: 8 } } };
|
|
774
806
|
class PA extends b {
|
|
775
807
|
constructor(A, t) {
|
|
776
808
|
super(A, t, D.BEZIER_CURVE, DA);
|
|
777
809
|
}
|
|
778
|
-
|
|
779
|
-
const e = t.lineWeight || 1, s =
|
|
780
|
-
return this.
|
|
810
|
+
bt(A, t) {
|
|
811
|
+
const e = t.lineWeight || 1, s = W(0.5, A.x1, A.cp1x, A.cp2x, A.x2), i = W(0.5, A.y1, A.cp1y, A.cp2y, A.y2), B = { character: t.character, charColor: t.charColor, bgColor: t.bgColor, charRotation: t.charRotation, flipHorizontally: t.flipHorizontally, flipVertically: t.flipVertically, invert: t.invert, rotationX: t.rotationX || 0, rotationY: t.rotationY || 0, rotationZ: t.rotationZ || 0, lineWeight: e }, r = this.oe(0, 0, 1, e, B);
|
|
812
|
+
return this.he(r, s, i), r.bezierStartPoint = [A.x1, A.y1], r.bezierControlPoint1 = [A.cp1x, A.cp1y], r.bezierControlPoint2 = [A.cp2x, A.cp2y], r.bezierEndPoint = [A.x2, A.y2], this.Be.bt(r);
|
|
781
813
|
}
|
|
782
814
|
}
|
|
783
815
|
class uA {
|
|
784
816
|
constructor(A) {
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
this.wA = A, this.
|
|
797
|
-
}
|
|
798
|
-
|
|
799
|
-
let t = this.
|
|
817
|
+
n(this, "wA");
|
|
818
|
+
n(this, "ce", null);
|
|
819
|
+
n(this, "le");
|
|
820
|
+
n(this, "Ce", null);
|
|
821
|
+
n(this, "De", {});
|
|
822
|
+
n(this, "Pe", null);
|
|
823
|
+
n(this, "ue", /* @__PURE__ */ new Map());
|
|
824
|
+
n(this, "Ie");
|
|
825
|
+
n(this, "we");
|
|
826
|
+
n(this, "fe");
|
|
827
|
+
n(this, "K", []);
|
|
828
|
+
this.wA = A, this.le = new eA(A), this.fe = new J(), this.Ie = new iA(A, this), this.we = new BA(), this.Pe = A.createBuffer(), F(this.wA, [0, 0, this.wA.canvas.width, this.wA.canvas.height]);
|
|
829
|
+
}
|
|
830
|
+
de(A) {
|
|
831
|
+
let t = this.ue.get(A);
|
|
800
832
|
if (t) return t;
|
|
801
833
|
const e = new rA(this.wA);
|
|
802
|
-
return t = (0, { [D.RECTANGLE]: () => new QA(this.wA, e), [D.LINE]: () => new oA(this.wA, e), [D.ELLIPSE]: () => new aA(this.wA, e), [D.ARC]: () => new cA(this.wA, e), [D.TRIANGLE]: () => new CA(this.wA, e), [D.BEZIER_CURVE]: () => new PA(this.wA, e) }[A])(), this.
|
|
834
|
+
return t = (0, { [D.RECTANGLE]: () => new QA(this.wA, e), [D.LINE]: () => new oA(this.wA, e), [D.ELLIPSE]: () => new aA(this.wA, e), [D.ARC]: () => new cA(this.wA, e), [D.TRIANGLE]: () => new CA(this.wA, e), [D.BEZIER_CURVE]: () => new PA(this.wA, e) }[A])(), this.ue.set(A, t), t;
|
|
803
835
|
}
|
|
804
|
-
|
|
805
|
-
this.
|
|
836
|
+
pe(A) {
|
|
837
|
+
this.ce !== A && (this.ce = A, A.KA());
|
|
806
838
|
}
|
|
807
|
-
|
|
808
|
-
return this.
|
|
839
|
+
_e(A, t) {
|
|
840
|
+
return this.le.Qt(A, t);
|
|
809
841
|
}
|
|
810
|
-
|
|
811
|
-
return this.
|
|
842
|
+
st() {
|
|
843
|
+
return this.le.st();
|
|
812
844
|
}
|
|
813
845
|
YA() {
|
|
814
|
-
return this.
|
|
846
|
+
return this.le.YA();
|
|
815
847
|
}
|
|
816
|
-
|
|
817
|
-
return this.
|
|
848
|
+
it() {
|
|
849
|
+
return this.le.it();
|
|
818
850
|
}
|
|
819
|
-
|
|
820
|
-
this.
|
|
851
|
+
me(A) {
|
|
852
|
+
this.Ce = A, A && (this.De = {});
|
|
821
853
|
}
|
|
822
|
-
|
|
823
|
-
this.
|
|
854
|
+
ZA(A, t) {
|
|
855
|
+
this.De[A] = t;
|
|
824
856
|
}
|
|
825
|
-
|
|
826
|
-
Object.assign(this.
|
|
857
|
+
ve(A) {
|
|
858
|
+
Object.assign(this.De, A);
|
|
827
859
|
}
|
|
828
|
-
|
|
829
|
-
return this.
|
|
860
|
+
Bt(A) {
|
|
861
|
+
return this.le.Bt(A);
|
|
830
862
|
}
|
|
831
|
-
|
|
832
|
-
const B = this.
|
|
833
|
-
this.
|
|
863
|
+
ye(A, t, e, s, i) {
|
|
864
|
+
const B = this.st(), r = { l: A.textures[0], m: A.textures[1], n: A.textures[2], o: A.textures[3], p: A.textures[4], q: [A.width, A.height] };
|
|
865
|
+
this.we.kt(t, e, s, i, B, r, this.fe);
|
|
834
866
|
}
|
|
835
|
-
|
|
867
|
+
be(A, t, e, s) {
|
|
836
868
|
var C;
|
|
837
|
-
const i = this.wA, B = i.canvas.width, r = i.canvas.height,
|
|
838
|
-
i.bindBuffer(i.ARRAY_BUFFER, this.
|
|
839
|
-
const c = ((C = this.
|
|
869
|
+
const i = this.wA, B = i.canvas.width, r = i.canvas.height, Q = A / B * 2 - 1, o = (A + e) / B * 2 - 1, g = 1 - t / r * 2, a = 1 - (t + s) / r * 2, h = new Float32Array([Q, a, o, a, Q, g, o, a, o, g, Q, g]);
|
|
870
|
+
i.bindBuffer(i.ARRAY_BUFFER, this.Pe), i.bufferData(i.ARRAY_BUFFER, h, i.DYNAMIC_DRAW);
|
|
871
|
+
const c = ((C = this.ce) == null ? void 0 : C.At) || i.getParameter(i.CURRENT_PROGRAM), l = c ? i.getAttribLocation(c, "a_position") : -1;
|
|
840
872
|
l !== -1 && (i.enableVertexAttribArray(l), i.vertexAttribPointer(l, 2, i.FLOAT, !1, 8, 0)), i.drawArrays(i.TRIANGLES, 0, 6), l !== -1 && i.disableVertexAttribArray(l);
|
|
841
873
|
}
|
|
842
|
-
|
|
843
|
-
this.
|
|
874
|
+
$e(A, t, e, s) {
|
|
875
|
+
this.Ce ? (this.we.kt(A, t, e, s, this.Ce, { ...this.De }, this.fe), this.Ce = null, this.De = {}) : this.we.St(A, t, e, s, this.fe);
|
|
844
876
|
}
|
|
845
|
-
|
|
846
|
-
this.
|
|
877
|
+
Ge(A, t, e, s) {
|
|
878
|
+
this.we.zt(A, t, e, s, this.fe.lineWeight, this.fe);
|
|
847
879
|
}
|
|
848
|
-
|
|
849
|
-
this.
|
|
880
|
+
xe(A, t, e, s) {
|
|
881
|
+
this.we.Lt(A, t, e, s, this.fe);
|
|
850
882
|
}
|
|
851
|
-
|
|
852
|
-
this.
|
|
883
|
+
Me(A, t, e, s, i, B) {
|
|
884
|
+
this.we.Tt(A, t, e, s, i, B, this.fe);
|
|
853
885
|
}
|
|
854
|
-
|
|
855
|
-
const o = this.
|
|
856
|
-
this.
|
|
886
|
+
Ye(A, t, e, s, i, B, r, Q) {
|
|
887
|
+
const o = this.fe.lineWeight;
|
|
888
|
+
this.we.Ut(A, t, e, s, i, B, r, Q, o, this.fe);
|
|
857
889
|
}
|
|
858
|
-
|
|
890
|
+
Fe(A, t, e = 1, s = {}) {
|
|
859
891
|
return new U(this.wA, A, t, e, s, this, !0);
|
|
860
892
|
}
|
|
861
|
-
|
|
862
|
-
this.
|
|
893
|
+
Re(A, t, e, s, i, B) {
|
|
894
|
+
this.we.Ot(A, t, e, s, i, B, this.fe);
|
|
863
895
|
}
|
|
864
|
-
|
|
865
|
-
this.state.DA(A, t, e, s), this.
|
|
896
|
+
Se(A, t = A, e = A, s = 255) {
|
|
897
|
+
this.state.DA(A, t, e, s), this.Wt(A / 255, t / 255, e / 255, s / 255);
|
|
866
898
|
}
|
|
867
|
-
|
|
899
|
+
Wt(A = 0, t = 0, e = 0, s = 0) {
|
|
868
900
|
this.wA.clearColor(A, t, e, s), this.wA.clear(this.wA.COLOR_BUFFER_BIT);
|
|
869
901
|
}
|
|
870
|
-
|
|
902
|
+
ke() {
|
|
871
903
|
this.wA.viewport(0, 0, this.wA.canvas.width, this.wA.canvas.height), F(this.wA, [0, 0, this.wA.canvas.width, this.wA.canvas.height]);
|
|
872
904
|
}
|
|
873
905
|
get context() {
|
|
874
906
|
return this.wA;
|
|
875
907
|
}
|
|
876
908
|
get state() {
|
|
877
|
-
return this.
|
|
909
|
+
return this.fe;
|
|
878
910
|
}
|
|
879
911
|
RA(A) {
|
|
880
|
-
this.K.push(this.
|
|
912
|
+
this.K.push(this.fe), this.fe = A;
|
|
881
913
|
}
|
|
882
914
|
SA() {
|
|
883
915
|
const A = this.K.pop();
|
|
884
|
-
A && (this.
|
|
916
|
+
A && (this.fe = A);
|
|
885
917
|
}
|
|
886
918
|
FA(A) {
|
|
887
919
|
const t = A, e = G(this.wA) ?? this.wA.getParameter(this.wA.VIEWPORT), s = { shader: t, gl: this.wA, viewport: e };
|
|
888
|
-
this.
|
|
920
|
+
this.pe(t);
|
|
889
921
|
const i = /* @__PURE__ */ new Set();
|
|
890
|
-
for (const B of this.
|
|
891
|
-
for (const B of i) B !== D.CUSTOM && this.
|
|
892
|
-
this.
|
|
922
|
+
for (const B of this.we) B.type === D.CUSTOM ? i.add(D.RECTANGLE) : i.add(B.type);
|
|
923
|
+
for (const B of i) B !== D.CUSTOM && this.de(B);
|
|
924
|
+
this.Ie.Pt(s, this.we, this.ue), this.we.Wt();
|
|
893
925
|
}
|
|
894
926
|
kA() {
|
|
895
|
-
this.wA.deleteBuffer(this.
|
|
896
|
-
for (const A of this.
|
|
897
|
-
this.
|
|
927
|
+
this.wA.deleteBuffer(this.Pe), this.we.Wt();
|
|
928
|
+
for (const A of this.ue.values()) A.kA();
|
|
929
|
+
this.le.kA();
|
|
898
930
|
}
|
|
899
931
|
}
|
|
900
932
|
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) {
|
|
@@ -917,18 +949,18 @@ const u = { readShort: (E, A) => (u.t.uint16[0] = E[A] << 8 | E[A + 1], u.t.int1
|
|
|
917
949
|
const s = u, i = s.readUshort, B = i(E, A += 2);
|
|
918
950
|
A += 2;
|
|
919
951
|
const r = [];
|
|
920
|
-
for (let
|
|
921
|
-
const o = i(E, A),
|
|
952
|
+
for (let Q = 0; Q < B; Q++) {
|
|
953
|
+
const o = i(E, A), g = i(E, A += 2);
|
|
922
954
|
A += 2;
|
|
923
|
-
const
|
|
955
|
+
const a = s.readUint(E, A);
|
|
924
956
|
A += 4;
|
|
925
|
-
const h = `p${o}e${
|
|
926
|
-
let c = r.indexOf(
|
|
957
|
+
const h = `p${o}e${g}`;
|
|
958
|
+
let c = r.indexOf(a);
|
|
927
959
|
if (c === -1) {
|
|
928
960
|
let l;
|
|
929
|
-
c = e.tables.length, r.push(
|
|
930
|
-
const C = i(E,
|
|
931
|
-
l = C === 4 ? this.parse4(E,
|
|
961
|
+
c = e.tables.length, r.push(a);
|
|
962
|
+
const C = i(E, a);
|
|
963
|
+
l = C === 4 ? this.parse4(E, a) : C === 12 ? this.parse12(E, a) : { format: C }, e.tables.push(l);
|
|
932
964
|
}
|
|
933
965
|
e.ids[h] = c;
|
|
934
966
|
}
|
|
@@ -936,10 +968,10 @@ const u = { readShort: (E, A) => (u.t.uint16[0] = E[A] << 8 | E[A + 1], u.t.int1
|
|
|
936
968
|
}, parse4(E, A) {
|
|
937
969
|
const t = u, e = t.readUshort, s = t.readUshorts, i = A, B = e(E, A += 2);
|
|
938
970
|
A += 2;
|
|
939
|
-
const r = e(E, A += 2) >>> 1,
|
|
940
|
-
A += 2,
|
|
941
|
-
for (let o = 0; o < r; o++)
|
|
942
|
-
return
|
|
971
|
+
const r = e(E, A += 2) >>> 1, Q = { format: 4, searchRange: e(E, A += 2), entrySelector: 0, rangeShift: 0, endCount: [], startCount: [], idDelta: [], idRangeOffset: [], glyphIdArray: [] };
|
|
972
|
+
A += 2, Q.entrySelector = e(E, A), A += 2, Q.rangeShift = e(E, A), A += 2, Q.endCount = s(E, A, r), A += 2 * r, A += 2, Q.startCount = s(E, A, r), A += 2 * r;
|
|
973
|
+
for (let o = 0; o < r; o++) Q.idDelta.push(t.readShort(E, A)), A += 2;
|
|
974
|
+
return Q.idRangeOffset = s(E, A, r), A += 2 * r, Q.glyphIdArray = s(E, A, i + B - A >> 1), Q;
|
|
943
975
|
}, parse12(E, A) {
|
|
944
976
|
const t = u.readUint;
|
|
945
977
|
t(E, A += 4), t(E, A += 4);
|
|
@@ -948,7 +980,7 @@ const u = { readShort: (E, A) => (u.t.uint16[0] = E[A] << 8 | E[A + 1], u.t.int1
|
|
|
948
980
|
const s = new Uint32Array(3 * e);
|
|
949
981
|
for (let i = 0; i < 3 * e; i += 3) s[i] = t(E, A + (i << 2)), s[i + 1] = t(E, A + (i << 2) + 4), s[i + 2] = t(E, A + (i << 2) + 8);
|
|
950
982
|
return { format: 12, groups: s };
|
|
951
|
-
} },
|
|
983
|
+
} }, fA = { parseTab(E, A, t) {
|
|
952
984
|
const e = u;
|
|
953
985
|
A += 18;
|
|
954
986
|
const s = e.readUshort(E, A);
|
|
@@ -959,39 +991,39 @@ const u = { readShort: (E, A) => (u.t.uint16[0] = E[A] << 8 | E[A + 1], u.t.int1
|
|
|
959
991
|
A += 2;
|
|
960
992
|
const r = e.readShort(E, A);
|
|
961
993
|
A += 2;
|
|
962
|
-
const
|
|
963
|
-
return A += 2, A += 6, { unitsPerEm: s, xMin: i, yMin: B, xMax: r, yMax:
|
|
964
|
-
} },
|
|
994
|
+
const Q = e.readShort(E, A);
|
|
995
|
+
return A += 2, A += 6, { unitsPerEm: s, xMin: i, yMin: B, xMax: r, yMax: Q, indexToLocFormat: e.readShort(E, A) };
|
|
996
|
+
} }, IA = { parseTab(E, A, t) {
|
|
965
997
|
const e = u;
|
|
966
998
|
A += 4;
|
|
967
999
|
const s = ["ascender", "descender", "lineGap", "advanceWidthMax", "minLeftSideBearing", "minRightSideBearing", "xMaxExtent", "caretSlopeRise", "caretSlopeRun", "caretOffset", "res0", "res1", "res2", "res3", "metricDataFormat", "numberOfHMetrics"], i = {};
|
|
968
1000
|
for (let B = 0; B < s.length; B++) {
|
|
969
|
-
const r = s[B],
|
|
970
|
-
i[r] =
|
|
1001
|
+
const r = s[B], Q = r === "advanceWidthMax" || r === "numberOfHMetrics" ? e.readUshort : e.readShort;
|
|
1002
|
+
i[r] = Q(E, A + 2 * B);
|
|
971
1003
|
}
|
|
972
1004
|
return i;
|
|
973
1005
|
} }, dA = { parseTab(E, A, t, e) {
|
|
974
|
-
const s = u, i = [], B = [], r = e.maxp.numGlyphs,
|
|
975
|
-
let o = 0,
|
|
976
|
-
for (;
|
|
977
|
-
for (;
|
|
1006
|
+
const s = u, i = [], B = [], r = e.maxp.numGlyphs, Q = e.hhea.numberOfHMetrics;
|
|
1007
|
+
let o = 0, g = 0, a = 0;
|
|
1008
|
+
for (; a < Q; ) o = s.readUshort(E, A + (a << 2)), g = s.readShort(E, A + (a << 2) + 2), i.push(o), B.push(g), a++;
|
|
1009
|
+
for (; a < r; ) i.push(o), B.push(g), a++;
|
|
978
1010
|
return { aWidth: i, lsBearing: B };
|
|
979
|
-
} },
|
|
1011
|
+
} }, V = { cmap: wA, head: fA, hhea: IA, maxp: { parseTab(E, A, t) {
|
|
980
1012
|
const e = u;
|
|
981
1013
|
return e.readUint(E, A), A += 4, { numGlyphs: e.readUshort(E, A) };
|
|
982
1014
|
} }, hmtx: dA, loca: { parseTab(E, A, t, e) {
|
|
983
1015
|
const s = u, i = [], B = e.head.indexToLocFormat, r = e.maxp.numGlyphs + 1;
|
|
984
|
-
if (B === 0) for (let
|
|
985
|
-
else if (B === 1) for (let
|
|
1016
|
+
if (B === 0) for (let Q = 0; Q < r; Q++) i.push(s.readUshort(E, A + (Q << 1)) << 1);
|
|
1017
|
+
else if (B === 1) for (let Q = 0; Q < r; Q++) i.push(s.readUint(E, A + (Q << 2)));
|
|
986
1018
|
return i;
|
|
987
1019
|
} }, glyf: { parseTab(E, A, t, e) {
|
|
988
1020
|
const s = [], i = e.maxp.numGlyphs;
|
|
989
1021
|
for (let B = 0; B < i; B++) s.push(null);
|
|
990
1022
|
return s;
|
|
991
|
-
},
|
|
992
|
-
const t = u, e = E.
|
|
1023
|
+
}, ze(E, A) {
|
|
1024
|
+
const t = u, e = E.Le, s = E.loca;
|
|
993
1025
|
if (s[A] === s[A + 1]) return null;
|
|
994
|
-
const i = m.findTable(e, "glyf", E.
|
|
1026
|
+
const i = m.findTable(e, "glyf", E.Oe);
|
|
995
1027
|
if (!i) return null;
|
|
996
1028
|
let B = i[0] + s[A];
|
|
997
1029
|
const r = {};
|
|
@@ -999,9 +1031,9 @@ const u = { readShort: (E, A) => (u.t.uint16[0] = E[A] << 8 | E[A + 1], u.t.int1
|
|
|
999
1031
|
if (r.noc > 0) {
|
|
1000
1032
|
r.endPts = [];
|
|
1001
1033
|
for (let h = 0; h < r.noc; h++) r.endPts.push(t.readUshort(e, B)), B += 2;
|
|
1002
|
-
const
|
|
1003
|
-
if (B += 2, e.length - B <
|
|
1004
|
-
B +=
|
|
1034
|
+
const Q = t.readUshort(e, B);
|
|
1035
|
+
if (B += 2, e.length - B < Q) return null;
|
|
1036
|
+
B += Q;
|
|
1005
1037
|
const o = r.endPts[r.noc - 1] + 1;
|
|
1006
1038
|
r.flags = [];
|
|
1007
1039
|
for (let h = 0; h < o; h++) {
|
|
@@ -1022,18 +1054,18 @@ const u = { readShort: (E, A) => (u.t.uint16[0] = E[A] << 8 | E[A + 1], u.t.int1
|
|
|
1022
1054
|
const c = r.flags[h], l = !!(32 & c);
|
|
1023
1055
|
4 & c ? (r.ys.push(l ? e[B] : -e[B]), B++) : l ? r.ys.push(0) : (r.ys.push(t.readShort(e, B)), B += 2);
|
|
1024
1056
|
}
|
|
1025
|
-
let
|
|
1026
|
-
for (let h = 0; h < o; h++)
|
|
1057
|
+
let g = 0, a = 0;
|
|
1058
|
+
for (let h = 0; h < o; h++) g += r.xs[h], a += r.ys[h], r.xs[h] = g, r.ys[h] = a;
|
|
1027
1059
|
} else r.parts = [], r.endPts = [], r.flags = [], r.xs = [], r.ys = [];
|
|
1028
1060
|
return r;
|
|
1029
1061
|
} } }, m = { parse: (E) => [((A, t, e, s) => {
|
|
1030
|
-
const i =
|
|
1062
|
+
const i = V, B = { Le: A, Te: t, Oe: e };
|
|
1031
1063
|
for (const r in i) {
|
|
1032
|
-
const
|
|
1064
|
+
const Q = r, o = m.findTable(A, Q, e);
|
|
1033
1065
|
if (o) {
|
|
1034
|
-
const [
|
|
1035
|
-
let h = s[
|
|
1036
|
-
h == null && (h = i[
|
|
1066
|
+
const [g, a] = o;
|
|
1067
|
+
let h = s[g];
|
|
1068
|
+
h == null && (h = i[Q].parseTab(A, g, a, B), s[g] = h), B[Q] = h;
|
|
1037
1069
|
}
|
|
1038
1070
|
}
|
|
1039
1071
|
return B;
|
|
@@ -1043,45 +1075,45 @@ const u = { readShort: (E, A) => (u.t.uint16[0] = E[A] << 8 | E[A + 1], u.t.int1
|
|
|
1043
1075
|
for (let B = 0; B < s; B++) {
|
|
1044
1076
|
const r = e.readASCII(E, i, 4);
|
|
1045
1077
|
e.readUint(E, i + 4);
|
|
1046
|
-
const
|
|
1047
|
-
if (r === A) return [
|
|
1078
|
+
const Q = e.readUint(E, i + 8), o = e.readUint(E, i + 12);
|
|
1079
|
+
if (r === A) return [Q, o];
|
|
1048
1080
|
i += 16;
|
|
1049
1081
|
}
|
|
1050
1082
|
return null;
|
|
1051
|
-
}, T:
|
|
1083
|
+
}, T: V, B: u };
|
|
1052
1084
|
class _ {
|
|
1053
1085
|
constructor() {
|
|
1054
|
-
|
|
1055
|
-
|
|
1086
|
+
n(this, "Ue", /* @__PURE__ */ new Map());
|
|
1087
|
+
n(this, "We", /* @__PURE__ */ new Map());
|
|
1056
1088
|
}
|
|
1057
|
-
|
|
1058
|
-
const e = `${this.
|
|
1059
|
-
if (this.
|
|
1089
|
+
He(A, t) {
|
|
1090
|
+
const e = `${this.Ke(A)}_${t}`;
|
|
1091
|
+
if (this.Ue.has(e)) return this.Ue.get(e);
|
|
1060
1092
|
const s = A.cmap;
|
|
1061
|
-
if (!s || !s.tables) return this.
|
|
1093
|
+
if (!s || !s.tables) return this.Ue.set(e, 0), 0;
|
|
1062
1094
|
let i = 0;
|
|
1063
|
-
for (const B of s.tables) if (B.format === 4 ? i = this.
|
|
1064
|
-
return this.
|
|
1095
|
+
for (const B of s.tables) if (B.format === 4 ? i = this.Je(t, B) : B.format === 12 && (i = this.Ve(t, B)), i > 0) break;
|
|
1096
|
+
return this.Ue.set(e, i), i;
|
|
1065
1097
|
}
|
|
1066
|
-
|
|
1098
|
+
Ze(A, t) {
|
|
1067
1099
|
const e = t.codePointAt(0);
|
|
1068
|
-
return e === void 0 ? 0 : this.
|
|
1100
|
+
return e === void 0 ? 0 : this.He(A, e);
|
|
1069
1101
|
}
|
|
1070
|
-
|
|
1102
|
+
Ne(A, t) {
|
|
1071
1103
|
const e = A.hmtx;
|
|
1072
1104
|
return e && e.aWidth && e.aWidth.length !== 0 ? t < e.aWidth.length ? e.aWidth[t] : e.aWidth[e.aWidth.length - 1] : 0;
|
|
1073
1105
|
}
|
|
1074
|
-
|
|
1106
|
+
Xe(A, t) {
|
|
1075
1107
|
const e = t / A.head.unitsPerEm, s = A.hhea.ascender * e, i = A.hhea.descender * e, B = A.hhea.lineGap * e;
|
|
1076
1108
|
return { ascender: s, descender: i, lineGap: B, lineHeight: s - i + B, unitsPerEm: A.head.unitsPerEm, scale: e };
|
|
1077
1109
|
}
|
|
1078
|
-
|
|
1079
|
-
this.
|
|
1110
|
+
je() {
|
|
1111
|
+
this.Ue.clear(), this.We.clear();
|
|
1080
1112
|
}
|
|
1081
|
-
|
|
1082
|
-
return `${A.
|
|
1113
|
+
Ke(A) {
|
|
1114
|
+
return `${A.Oe}_${A.Le.length}`;
|
|
1083
1115
|
}
|
|
1084
|
-
|
|
1116
|
+
Je(A, t) {
|
|
1085
1117
|
const e = t.endCount.length;
|
|
1086
1118
|
let s = -1;
|
|
1087
1119
|
for (let i = 0; i < e; i++) if (A <= t.endCount[i]) {
|
|
@@ -1099,7 +1131,7 @@ class _ {
|
|
|
1099
1131
|
}
|
|
1100
1132
|
return 0;
|
|
1101
1133
|
}
|
|
1102
|
-
|
|
1134
|
+
Ve(A, t) {
|
|
1103
1135
|
const e = t.groups.length / 3;
|
|
1104
1136
|
for (let s = 0; s < e; s++) {
|
|
1105
1137
|
const i = t.groups[3 * s], B = t.groups[3 * s + 1], r = t.groups[3 * s + 2];
|
|
@@ -1110,43 +1142,43 @@ class _ {
|
|
|
1110
1142
|
}
|
|
1111
1143
|
class pA {
|
|
1112
1144
|
constructor(A) {
|
|
1113
|
-
|
|
1114
|
-
this.
|
|
1145
|
+
n(this, "qe");
|
|
1146
|
+
this.qe = A;
|
|
1115
1147
|
}
|
|
1116
|
-
|
|
1148
|
+
As(A) {
|
|
1117
1149
|
var e;
|
|
1118
1150
|
const t = [];
|
|
1119
1151
|
return (e = A.cmap) != null && e.tables ? (A.cmap.tables.forEach((s) => {
|
|
1120
1152
|
if (s.format === 4) {
|
|
1121
|
-
const i = this.
|
|
1153
|
+
const i = this.ts(s);
|
|
1122
1154
|
t.push(...i);
|
|
1123
1155
|
} else if (s.format === 12) {
|
|
1124
|
-
const i = this.
|
|
1156
|
+
const i = this.es(s);
|
|
1125
1157
|
t.push(...i);
|
|
1126
1158
|
}
|
|
1127
1159
|
}), [...new Set(t)]) : [];
|
|
1128
1160
|
}
|
|
1129
|
-
|
|
1130
|
-
return this.
|
|
1161
|
+
ss(A, t) {
|
|
1162
|
+
return this.qe.Ze(A, t) > 0;
|
|
1131
1163
|
}
|
|
1132
|
-
|
|
1133
|
-
for (const e of t) if (!this.
|
|
1164
|
+
Bs(A, t) {
|
|
1165
|
+
for (const e of t) if (!this.ss(A, e)) return !1;
|
|
1134
1166
|
return !0;
|
|
1135
1167
|
}
|
|
1136
|
-
|
|
1137
|
-
return t.filter((e) => this.
|
|
1168
|
+
Qs(A, t) {
|
|
1169
|
+
return t.filter((e) => this.ss(A, e));
|
|
1138
1170
|
}
|
|
1139
|
-
|
|
1140
|
-
return A.filter((t) => this.
|
|
1171
|
+
Es(A) {
|
|
1172
|
+
return A.filter((t) => this.rs(t));
|
|
1141
1173
|
}
|
|
1142
|
-
|
|
1174
|
+
ts(A) {
|
|
1143
1175
|
const t = [];
|
|
1144
1176
|
if (!(A.startCount && A.endCount && A.idRangeOffset && A.idDelta)) return t;
|
|
1145
1177
|
for (let e = 0; e < A.startCount.length; e++) {
|
|
1146
1178
|
const s = A.startCount[e], i = A.endCount[e];
|
|
1147
1179
|
if (s !== 65535 || i !== 65535) {
|
|
1148
1180
|
for (let B = s; B <= i; B++)
|
|
1149
|
-
if (this.
|
|
1181
|
+
if (this.ns(A, B, e) > 0) try {
|
|
1150
1182
|
const r = String.fromCodePoint(B);
|
|
1151
1183
|
t.push(r);
|
|
1152
1184
|
} catch {
|
|
@@ -1155,21 +1187,21 @@ class pA {
|
|
|
1155
1187
|
}
|
|
1156
1188
|
return t;
|
|
1157
1189
|
}
|
|
1158
|
-
|
|
1190
|
+
es(A) {
|
|
1159
1191
|
const t = [];
|
|
1160
1192
|
if (!A.groups) return t;
|
|
1161
1193
|
for (let e = 0; e < A.groups.length; e += 3) {
|
|
1162
1194
|
const s = A.groups[e], i = A.groups[e + 1], B = A.groups[e + 2];
|
|
1163
1195
|
for (let r = s; r <= i; r++)
|
|
1164
1196
|
if (B + (r - s) > 0) try {
|
|
1165
|
-
const
|
|
1166
|
-
t.push(
|
|
1197
|
+
const Q = String.fromCodePoint(r);
|
|
1198
|
+
t.push(Q);
|
|
1167
1199
|
} catch {
|
|
1168
1200
|
}
|
|
1169
1201
|
}
|
|
1170
1202
|
return t;
|
|
1171
1203
|
}
|
|
1172
|
-
|
|
1204
|
+
ns(A, t, e) {
|
|
1173
1205
|
if (A.idRangeOffset[e] === 0) return t + A.idDelta[e] & 65535;
|
|
1174
1206
|
{
|
|
1175
1207
|
const s = A.idRangeOffset[e] / 2 + (t - A.startCount[e]) - (A.startCount.length - e);
|
|
@@ -1180,278 +1212,278 @@ class pA {
|
|
|
1180
1212
|
}
|
|
1181
1213
|
return 0;
|
|
1182
1214
|
}
|
|
1183
|
-
|
|
1215
|
+
rs(A) {
|
|
1184
1216
|
const t = A.codePointAt(0) || 0;
|
|
1185
1217
|
return !(t >= 0 && t <= 31 && t !== 9 && t !== 10 && t !== 13 || t >= 127 && t <= 159);
|
|
1186
1218
|
}
|
|
1187
1219
|
}
|
|
1188
1220
|
class mA {
|
|
1189
1221
|
constructor() {
|
|
1190
|
-
|
|
1222
|
+
n(this, "gs");
|
|
1191
1223
|
const A = new _();
|
|
1192
|
-
this.
|
|
1224
|
+
this.gs = new pA(A);
|
|
1193
1225
|
}
|
|
1194
1226
|
extractCharacters(A) {
|
|
1195
|
-
return this.
|
|
1227
|
+
return this.gs.As(A);
|
|
1196
1228
|
}
|
|
1197
1229
|
filterProblematicCharacters(A) {
|
|
1198
|
-
return this.Es
|
|
1230
|
+
return this.gs.Es(A);
|
|
1199
1231
|
}
|
|
1200
1232
|
characterExists(A, t) {
|
|
1201
|
-
return this.
|
|
1233
|
+
return this.gs.ss(A, t);
|
|
1202
1234
|
}
|
|
1203
1235
|
allCharactersExist(A, t) {
|
|
1204
|
-
return this.
|
|
1236
|
+
return this.gs.Bs(A, t);
|
|
1205
1237
|
}
|
|
1206
1238
|
}
|
|
1207
|
-
class
|
|
1239
|
+
class yA {
|
|
1208
1240
|
constructor(A) {
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
this.vA = A, this.
|
|
1241
|
+
n(this, "hs");
|
|
1242
|
+
n(this, "cs");
|
|
1243
|
+
n(this, "vA");
|
|
1244
|
+
n(this, "ls");
|
|
1245
|
+
this.vA = A, this.ls = new _(), this.hs = document.createElement("canvas"), this.cs = this.hs.getContext("2d", { willReadFrequently: !0, alpha: !1 });
|
|
1214
1246
|
}
|
|
1215
1247
|
createTextureAtlas(A, t, e, s) {
|
|
1216
|
-
const i = A.length, B = Math.ceil(Math.sqrt(i)), r = Math.ceil(i / B),
|
|
1217
|
-
this.
|
|
1218
|
-
const
|
|
1219
|
-
return
|
|
1248
|
+
const i = A.length, B = Math.ceil(Math.sqrt(i)), r = Math.ceil(i / B), Q = t.width * B, o = t.height * r, g = typeof s == "object" ? s : null;
|
|
1249
|
+
this.Cs(Q, o), this.Ds(A, t, B, e, g);
|
|
1250
|
+
const a = this.vA.Fe(Q, o, 1, { filter: "nearest" });
|
|
1251
|
+
return a.xA(this.hs), { framebuffer: a, columns: B, rows: r };
|
|
1220
1252
|
}
|
|
1221
|
-
|
|
1222
|
-
this.
|
|
1253
|
+
Cs(A, t) {
|
|
1254
|
+
this.hs.width = A, this.hs.height = t, this.hs.style.width = A + "px", this.hs.style.height = A + "px", this.cs.imageSmoothingEnabled = !1, this.hs.style.imageRendering = "pixelated", this.cs.fillStyle = "black", this.cs.fillRect(0, 0, A, t), this.cs.textBaseline = "top", this.cs.textAlign = "left", this.cs.fillStyle = "white";
|
|
1223
1255
|
}
|
|
1224
|
-
|
|
1256
|
+
Ds(A, t, e, s, i) {
|
|
1225
1257
|
const B = s / i.head.unitsPerEm;
|
|
1226
1258
|
for (let r = 0; r < A.length; r++) {
|
|
1227
|
-
const
|
|
1228
|
-
if (!
|
|
1229
|
-
const h =
|
|
1230
|
-
this.
|
|
1259
|
+
const Q = r % e, o = Math.floor(r / e), g = A[r].character, a = this.Ps(i, g);
|
|
1260
|
+
if (!a) continue;
|
|
1261
|
+
const h = g.codePointAt(0) || 0, c = this.ls.He(i, h), l = this.us(i, c) * B, C = Q * t.width, I = o * t.height, w = C + 0.5 * t.width, d = I + 0.5 * t.height, p = Math.round(w - 0.5 * t.width), x = Math.round(d - 0.5 * s), Z = p + 0.5 * (t.width - l), j = x + i.hhea.ascender * B;
|
|
1262
|
+
this.Is(a, Z, j, B);
|
|
1231
1263
|
}
|
|
1232
1264
|
}
|
|
1233
|
-
|
|
1234
|
-
const e = t.codePointAt(0) || 0, s = this.
|
|
1265
|
+
Ps(A, t) {
|
|
1266
|
+
const e = t.codePointAt(0) || 0, s = this.ls.He(A, e);
|
|
1235
1267
|
if (s === 0) return null;
|
|
1236
1268
|
if (A.glyf && A.glyf[s] !== null) return A.glyf[s];
|
|
1237
1269
|
if (m && m.T && m.T.glyf) {
|
|
1238
|
-
const i = m.T.glyf.
|
|
1270
|
+
const i = m.T.glyf.ze(A, s);
|
|
1239
1271
|
return A.glyf && i && (A.glyf[s] = i), i;
|
|
1240
1272
|
}
|
|
1241
1273
|
return null;
|
|
1242
1274
|
}
|
|
1243
|
-
|
|
1275
|
+
us(A, t) {
|
|
1244
1276
|
const e = A.hmtx;
|
|
1245
1277
|
return e && e.aWidth ? t < e.aWidth.length ? e.aWidth[t] : e.aWidth[e.aWidth.length - 1] : 0;
|
|
1246
1278
|
}
|
|
1247
|
-
|
|
1279
|
+
Is(A, t, e, s) {
|
|
1248
1280
|
if (!A || !A.xs || A.noc === 0) return;
|
|
1249
|
-
const { xs: i, ys: B, endPts: r, flags:
|
|
1250
|
-
if (!(i && B && r &&
|
|
1251
|
-
this.
|
|
1281
|
+
const { xs: i, ys: B, endPts: r, flags: Q } = A;
|
|
1282
|
+
if (!(i && B && r && Q)) return;
|
|
1283
|
+
this.cs.beginPath();
|
|
1252
1284
|
let o = 0;
|
|
1253
|
-
for (let
|
|
1254
|
-
const
|
|
1255
|
-
if (!(
|
|
1256
|
-
if (
|
|
1285
|
+
for (let g = 0; g < r.length; g++) {
|
|
1286
|
+
const a = r[g];
|
|
1287
|
+
if (!(a < o)) {
|
|
1288
|
+
if (a >= o) {
|
|
1257
1289
|
const h = t + i[o] * s, c = e - B[o] * s;
|
|
1258
|
-
this.
|
|
1290
|
+
this.cs.moveTo(h, c);
|
|
1259
1291
|
let l = o + 1;
|
|
1260
|
-
for (; l <=
|
|
1261
|
-
if (1 &
|
|
1262
|
-
const C = t + i[l] * s,
|
|
1263
|
-
this.
|
|
1292
|
+
for (; l <= a; )
|
|
1293
|
+
if (1 & Q[l]) {
|
|
1294
|
+
const C = t + i[l] * s, I = e - B[l] * s;
|
|
1295
|
+
this.cs.lineTo(C, I), l++;
|
|
1264
1296
|
} else {
|
|
1265
|
-
const C = t + i[l] * s,
|
|
1266
|
-
let w = l + 1 >
|
|
1267
|
-
if (1 &
|
|
1297
|
+
const C = t + i[l] * s, I = e - B[l] * s;
|
|
1298
|
+
let w = l + 1 > a ? o : l + 1;
|
|
1299
|
+
if (1 & Q[w]) {
|
|
1268
1300
|
const d = t + i[w] * s, p = e - B[w] * s;
|
|
1269
|
-
this.
|
|
1301
|
+
this.cs.quadraticCurveTo(C, I, d, p), l = w + 1;
|
|
1270
1302
|
} else {
|
|
1271
|
-
const d = (C + (t + i[w] * s)) / 2, p = (
|
|
1272
|
-
this.
|
|
1303
|
+
const d = (C + (t + i[w] * s)) / 2, p = (I + (e - B[w] * s)) / 2;
|
|
1304
|
+
this.cs.quadraticCurveTo(C, I, d, p), l = w;
|
|
1273
1305
|
}
|
|
1274
1306
|
}
|
|
1275
|
-
this.
|
|
1307
|
+
this.cs.closePath();
|
|
1276
1308
|
}
|
|
1277
|
-
o =
|
|
1309
|
+
o = a + 1;
|
|
1278
1310
|
}
|
|
1279
1311
|
}
|
|
1280
|
-
this.
|
|
1312
|
+
this.cs.fill();
|
|
1281
1313
|
}
|
|
1282
1314
|
}
|
|
1283
|
-
class
|
|
1315
|
+
class vA {
|
|
1284
1316
|
constructor() {
|
|
1285
|
-
|
|
1286
|
-
this.
|
|
1317
|
+
n(this, "qe");
|
|
1318
|
+
this.qe = new _();
|
|
1287
1319
|
}
|
|
1288
1320
|
calculateMaxGlyphDimensions(A, t, e) {
|
|
1289
1321
|
let s = 0;
|
|
1290
|
-
const i = this.
|
|
1322
|
+
const i = this.qe.Xe(e, t), B = i.lineHeight;
|
|
1291
1323
|
for (const r of A) {
|
|
1292
|
-
const
|
|
1293
|
-
if (
|
|
1294
|
-
const o = this.Ne
|
|
1324
|
+
const Q = this.qe.Ze(e, r);
|
|
1325
|
+
if (Q === 0) continue;
|
|
1326
|
+
const o = this.qe.Ne(e, Q) * i.scale;
|
|
1295
1327
|
s = Math.max(s, o);
|
|
1296
1328
|
}
|
|
1297
1329
|
return { width: Math.ceil(s), height: Math.ceil(B) };
|
|
1298
1330
|
}
|
|
1299
1331
|
getCharacterAdvanceWidth(A, t, e) {
|
|
1300
|
-
const s = this.
|
|
1301
|
-
return this.Ne
|
|
1332
|
+
const s = this.qe.Xe(e, t), i = this.qe.Ze(e, A);
|
|
1333
|
+
return this.qe.Ne(e, i) * s.scale;
|
|
1302
1334
|
}
|
|
1303
1335
|
getFontMetrics(A, t) {
|
|
1304
|
-
return this.
|
|
1336
|
+
return this.qe.Xe(t, A);
|
|
1305
1337
|
}
|
|
1306
|
-
|
|
1307
|
-
this.
|
|
1338
|
+
je() {
|
|
1339
|
+
this.qe.je();
|
|
1308
1340
|
}
|
|
1309
1341
|
}
|
|
1310
|
-
class
|
|
1342
|
+
class RA {
|
|
1311
1343
|
constructor() {
|
|
1312
|
-
|
|
1313
|
-
this.
|
|
1344
|
+
n(this, "ls");
|
|
1345
|
+
this.ls = new _();
|
|
1314
1346
|
}
|
|
1315
1347
|
createCharacterObjects(A, t) {
|
|
1316
1348
|
return A.map((e, s) => {
|
|
1317
|
-
const i = e.codePointAt(0) || 0, B = this.
|
|
1349
|
+
const i = e.codePointAt(0) || 0, B = this.ws(s);
|
|
1318
1350
|
let r = 0;
|
|
1319
1351
|
if (t.hmtx && t.hmtx.aWidth) {
|
|
1320
|
-
const
|
|
1321
|
-
|
|
1352
|
+
const Q = this.ls.He(t, i);
|
|
1353
|
+
Q > 0 && t.hmtx.aWidth[Q] !== void 0 && (r = t.hmtx.aWidth[Q]);
|
|
1322
1354
|
}
|
|
1323
1355
|
return { character: e, unicode: i, color: B, advanceWidth: r };
|
|
1324
1356
|
});
|
|
1325
1357
|
}
|
|
1326
|
-
|
|
1358
|
+
ws(A) {
|
|
1327
1359
|
return [A % 256 / 255, Math.floor(A / 256) % 256 / 255, Math.floor(A / 65536) % 256 / 255];
|
|
1328
1360
|
}
|
|
1329
|
-
|
|
1361
|
+
fs(A, t) {
|
|
1330
1362
|
if (!M._(typeof A == "string", "Character must be a string.", { method: "getCharacterColor", providedValue: A })) return [0, 0, 0];
|
|
1331
1363
|
const e = t.find((s) => s.character === A);
|
|
1332
1364
|
return e ? e.color : [0, 0, 0];
|
|
1333
1365
|
}
|
|
1334
|
-
|
|
1335
|
-
return M._(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.
|
|
1366
|
+
ds(A, t) {
|
|
1367
|
+
return M._(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.fs(e, t) || [0, 0, 0]) : [[0, 0, 0]];
|
|
1336
1368
|
}
|
|
1337
1369
|
}
|
|
1338
1370
|
class bA {
|
|
1339
1371
|
constructor(A, t = 16) {
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
this.
|
|
1353
|
-
}
|
|
1354
|
-
async
|
|
1372
|
+
n(this, "ps");
|
|
1373
|
+
n(this, "_s", []);
|
|
1374
|
+
n(this, "vs");
|
|
1375
|
+
n(this, "bs", 16);
|
|
1376
|
+
n(this, "$s", 0);
|
|
1377
|
+
n(this, "Gs", 0);
|
|
1378
|
+
n(this, "Ms", { width: 0, height: 0 });
|
|
1379
|
+
n(this, "Ys");
|
|
1380
|
+
n(this, "Fs");
|
|
1381
|
+
n(this, "Rs");
|
|
1382
|
+
n(this, "Ss");
|
|
1383
|
+
n(this, "ks");
|
|
1384
|
+
this.bs = t, this.Fs = new mA(), this.Rs = new yA(A), this.Ss = new vA(), this.ks = new RA();
|
|
1385
|
+
}
|
|
1386
|
+
async zs(A) {
|
|
1355
1387
|
let t;
|
|
1356
1388
|
if (A) {
|
|
1357
1389
|
const e = await fetch(A);
|
|
1358
|
-
if (!e.ok) throw new
|
|
1390
|
+
if (!e.ok) throw new f(`Failed to load font file: ${e.status} ${e.statusText}`);
|
|
1359
1391
|
t = await e.arrayBuffer();
|
|
1360
1392
|
} else
|
|
1361
1393
|
t = await (await fetch(`data:font/truetype;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMs+QEyQAAAEoAAAAYGNtYXAg7yVJAAAFjAAACSBnbHlmuHLTdAAAErQAAGi0aGVhZFvXdUwAAACsAAAANmhoZWELAQUCAAAA5AAAACRobXR4BACDgAAAAYgAAAQEbG9jYQAy54AAAA6sAAAECG1heHABIgCCAAABCAAAACBuYW1lVs/OSgAAe2gAAAOicG9zdABpADQAAH8MAAAAIAABAAAAAQAAzOWHqV8PPPUAAAQAAAAAAHxiGCcAAAAAfGIYJwAAAAAEAAQAAAAACAACAAEAAAAAAAEAAAQAAAAAAAQAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAEBAAEAAAEBAIAAIAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAgQAAZAABQAEAgACAAAAAAACAAIAAAACAAAzAMwAAAAABAAAAAAAAACAAACLAABw4wAAAAAAAAAAWUFMLgBAACAmawQAAAAAAAQAAAAAAAFRAAAAAAMABAAAAAAgAAAEAAAABAAAAAQAAAAEAAGABAABAAQAAIAEAACABAAAgAQAAIAEAAGABAABAAQAAQAEAACABAABAAQAAIAEAACABAABAAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAAGABAAAgAQAAIAEAAGABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABgAQAAQAEAACABAAAAAQAAgAEAACABAAAgAQAAIAEAACABAACAAQAAAAEAAIABAABgAQAAgAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAAABAAAAAQAAAAEAAIABAADAAQAAAAEAAAABAAAgAQAAYAEAAAABAAAAAQAAIAEAAAABAAAgAQAAIAEAACABAAAAAQAAIAEAAAABAAAAAQAAIAEAAGABAAAAAQAAAAEAAAABAAAAAQAAIAEAACABAAAAAQAAIAEAACABAAAAAQAAIAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAEABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAACAAQAAIAEAAAABAAAAAQAAAAEAACABAABAAQAAQAEAAEABAABAAQAAIAEAACABAAAAAQAAAAEAAAABAABAAQAAAAEAACABAAAAAQAAAAEAAIABAAAgAQAAAAEAAAABAAAAAQAAAAEAAAABAABgAQAAAAEAAAABAABgAQAAAAEAAGABAABgAQAAYAEAAAABAAAAAQAAAAEAAAABAABgAQAAYAEAAAABAAAAAQAAAAEAAAABAABgAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAABgAQAAAAEAAGABAABgAQAAAAEAAAABAABgAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAYAEAAAABAAAAAQAAQAEAACABAAAAAQAAAAEAAAABAAAgAQAAIAEAACABAAAgAQAAIAEAAAABAABAAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAAAAAIAAAADAAAAFAADAAEAAASaAAQEhgAAAJ4AgAAGAB4AfgCjAKUApwCsALIAtwC9AL8AxwDJANEA1gDcAOIA7wD0APcA/AD/AZIDkwOYA6MDpgOpA7EDtQPAA8QDxiAiIDwgfyCnIZUhqCIaIh8iKSJIImEiZSMCIxAjISUAJQIlDCUQJRQlGCUcJSQlLCU0JTwlbCWAJYQliCWMJZMloSWsJbIluiW8JcQlyyXZJjwmQCZCJmAmYyZmJmv//wAAACAAoQClAKcAqgCwALUAugC/AMQAyQDRANYA3ADfAOQA8QD2APkA/wGSA5MDmAOjA6YDqQOxA7QDwAPDA8YgIiA8IH8gpyGQIagiGSIeIikiSCJhImQjAiMQIyAlACUCJQwlECUUJRglHCUkJSwlNCU8JVAlgCWEJYgljCWQJaAlrCWyJbolvCXEJcsl2CY6JkAmQiZgJmMmZSZq////4v/A/7//vv+8/7n/t/+1/7T/sP+v/6j/pP+f/53/nP+b/5r/mf+X/wX9Bf0B/Pf89fzz/Oz86vzg/N783eCC4GngJ+AA3xjfBt6W3pPeit5s3lTeUt223andmtu827vbstuv26zbqdum25/bmNuR24rbd9tk22HbXttb21jbTNtC2z3bNts12y7bKNsc2rzaudq42pvamdqY2pUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEhgAAAJ4AgAAGAB4AfgCjAKUApwCsALIAtwC9AL8AxwDJANEA1gDcAOIA7wD0APcA/AD/AZIDkwOYA6MDpgOpA7EDtQPAA8QDxiAiIDwgfyCnIZUhqCIaIh8iKSJIImEiZSMCIxAjISUAJQIlDCUQJRQlGCUcJSQlLCU0JTwlbCWAJYQliCWMJZMloSWsJbIluiW8JcQlyyXZJjwmQCZCJmAmYyZmJmv//wAAACAAoQClAKcAqgCwALUAugC/AMQAyQDRANYA3ADfAOQA8QD2APkA/wGSA5MDmAOjA6YDqQOxA7QDwAPDA8YgIiA8IH8gpyGQIagiGSIeIikiSCJhImQjAiMQIyAlACUCJQwlECUUJRglHCUkJSwlNCU8JVAlgCWEJYgljCWQJaAlrCWyJbolvCXEJcsl2CY6JkAmQiZgJmMmZSZq////4v/A/7//vv+8/7n/t/+1/7T/sP+v/6j/pP+f/53/nP+b/5r/mf+X/wX9Bf0B/Pf89fzz/Oz86vzg/N783eCC4GngJ+AA3xjfBt6W3pPeit5s3lTeUt223andmtu827vbstuv26zbqdum25/bmNuR24rbd9tk22HbXttb21jbTNtC2z3bNts12y7bKNsc2rzaudq42pvamdqY2pUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAABwAAABIAAAAegAAALwAAADuAAAA9wAAARQAAAExAAABWgAAAW0AAAF7AAABhAAAAY0AAAGvAAAB0gAAAecAAAIOAAACNQAAAk8AAAJsAAACjgAAAqYAAALOAAAC5gAAAvQAAAMHAAADLgAAAzwAAANjAAADhQAAA6UAAAPCAAAD4AAAA/0AAAQaAAAEPAAABEwAAARrAAAEfgAABJEAAASpAAAE0AAABNsAAAT4AAAFFQAABS0AAAVDAAAFZQAABYcAAAWuAAAFvAAABc8AAAXnAAAGBAAABisAAAZDAAAGZQAABnMAAAaVAAAGowAABsUAAAbOAAAG3gAABvYAAAcMAAAHKQAABz8AAAdaAAAHbQAAB4oAAAedAAAHqwAAB8MAAAfgAAAH7gAACAsAAAgjAAAIOwAACFEAAAhsAAAIfAAACJkAAAi2AAAIzgAACOYAAAkDAAAJKgAACUIAAAlfAAAJfAAACYUAAAmiAAAJugAACdcAAAngAAAKBwAACi4AAApgAAAKeQAACokAAAq4AAAKwQAACs8AAArYAAAK8QAACw4AAAshAAALSAAAC1gAAAt1AAALjQAAC5sAAAu0AAALzQAAC9YAAAvhAAAL6gAAC/4AAAwRAAAMJAAADDQAAAxHAAAMUgAADGoAAAyCAAAMlwAADKUAAAy/AAAM0gAADN0AAAz8AAANDwAADSkAAA0yAAANTAAADVUAAA1jAAANfAAADYcAAA2VAAANqQAADcIAAA3mAAAN7wAADg4AAA4XAAAOQQAADloAAA5qAAAOcwAADoYAAA6PAAAOogAADrIAAA7FAAAPCwAADxsAAA8uAAAPRwAAD1AAAA+HAAAPoAAAD6kAAA/CAAAP3wAAD/wAABAZAAAQNgAAEE4AABBfAAAQlQAAEJ4AABCxAAAQugAAEOEAABEnAAARUwAAEWYAABF+AAARlgAAEbgAABJrAAASfgAAEpEAABKpAAASwQAAEswAABLcAAATCAAAExMAABMrAAATQwAAE1sAABNzAAATmgAAE8YAABPeAAAT5wAAE/AAABQSAAAUKgAAFEIAABRaAAAUYwAAFGwAABSOAAAUngAAFLsAABTYAAAU/wAAFSEAABVNAAAVZQAAFX0AABWVAAAVngAAFacAABXTAAAWBAAAFg0AABYvAAAWOgAAFkUAABZxAAAWhAAAFpIAABagAAAWrgAAFrwAABbVAAAW7QAAFxkAABd0AAAXzwAAF/wAABgUAAAYJQAAGC4AABhBAAAYXgAAGHEAABiYAAAYvAAAGOAAABkYAAAZPwAAGWYAABmNAAAZtAAAGdYAABn9AAAaEAAAGi0AAIBgACAAoAEAAADAAcAAAEBAQEBAQEBAYABAAAA/wAAAAEAAAD/AAQAAAD+AAAA/4AAAP8AAAAAAgEAAoADgAQAAAMABwAAAQEBAQEBAQEBAAEAAAD/AAGAAQAAAP8ABAAAAP6AAAABgAAA/oAAAAACAIAAgAQAA4AAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQAAAACAAAABAAAAAIAAAP+AAAAAgAAA/4AAAP8AAAD/gAAA/wAAAP+AAAAAgAAA/4AAAACAAQAAAACAAAADgAAA/4AAAACAAAD/gAAA/4AAAP8AAAD/gAAA/4AAAACAAAD/gAAAAIAAAACAAAABAAAAAIAAAP+A/wAAAAEAAAMAgACABAAEAAAbAB8AIwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAQAAAP8AAAABAAAAAIAAAP+AAAD/AAAA/4AAAP8AAAABAAAA/wAAAP+AAAAAgAAAAQD/gAAAAIAAAACAAAAAgAAABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/gP+AAAAAgP8A/4AAAACAAAAABQCAAIAEAAOAAAUAHQAjACkALwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAA/4AAAP+AAgABAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACA/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
|
|
1362
1394
|
`)).arrayBuffer();
|
|
1363
|
-
await this.
|
|
1395
|
+
await this.Ls(t), this.ps = m.parse(t)[0], await this.Os();
|
|
1364
1396
|
}
|
|
1365
|
-
|
|
1366
|
-
if (A === void 0) return this.
|
|
1367
|
-
this.
|
|
1368
|
-
const t = this.
|
|
1369
|
-
this.
|
|
1397
|
+
Ts(A) {
|
|
1398
|
+
if (A === void 0) return this.bs;
|
|
1399
|
+
this.bs = A, this.Ms = this.Ss.calculateMaxGlyphDimensions(this._s.map((e) => e.character), this.bs, this.ps);
|
|
1400
|
+
const t = this.Rs.createTextureAtlas(this._s, this.Ms, this.bs, this.ps);
|
|
1401
|
+
this.vs = t.framebuffer, this.$s = t.columns, this.Gs = t.rows;
|
|
1370
1402
|
}
|
|
1371
|
-
async
|
|
1403
|
+
async Us(A) {
|
|
1372
1404
|
try {
|
|
1373
1405
|
const t = await fetch(A);
|
|
1374
|
-
if (!t.ok) throw new
|
|
1406
|
+
if (!t.ok) throw new f(`Failed to load font file: ${t.status} ${t.statusText}`);
|
|
1375
1407
|
const e = await t.arrayBuffer();
|
|
1376
|
-
await this.
|
|
1408
|
+
await this.Ls(e);
|
|
1377
1409
|
const s = m.parse(e);
|
|
1378
1410
|
if (!s || s.length === 0) throw Error("Failed to parse font file");
|
|
1379
|
-
this.
|
|
1411
|
+
this.ps = s[0], await this.Os();
|
|
1380
1412
|
} catch (t) {
|
|
1381
|
-
throw new
|
|
1413
|
+
throw new f("Failed to load font: " + (t instanceof Error ? t.message : "Unknown error"), t);
|
|
1382
1414
|
}
|
|
1383
1415
|
}
|
|
1384
|
-
async
|
|
1416
|
+
async Ls(A) {
|
|
1385
1417
|
const t = Date.now();
|
|
1386
|
-
this
|
|
1418
|
+
this.Ys = new FontFace("CustomFont_" + t, A), await this.Ys.load(), document.fonts.add(this.Ys);
|
|
1387
1419
|
}
|
|
1388
|
-
async
|
|
1389
|
-
const A = this.
|
|
1390
|
-
this.
|
|
1391
|
-
const e = this.
|
|
1392
|
-
this.
|
|
1420
|
+
async Os() {
|
|
1421
|
+
const A = this.Fs.extractCharacters(this.ps), t = this.Fs.filterProblematicCharacters(A);
|
|
1422
|
+
this._s = this.ks.createCharacterObjects(t, this.ps), this.Ms = this.Ss.calculateMaxGlyphDimensions(t, this.bs, this.ps);
|
|
1423
|
+
const e = this.Rs.createTextureAtlas(this._s, this.Ms, this.bs, this.ps);
|
|
1424
|
+
this.vs = e.framebuffer, this.$s = e.columns, this.Gs = e.rows;
|
|
1393
1425
|
}
|
|
1394
|
-
|
|
1395
|
-
return this.
|
|
1426
|
+
fs(A) {
|
|
1427
|
+
return this.ks.fs(A, this._s);
|
|
1396
1428
|
}
|
|
1397
|
-
|
|
1398
|
-
return this.
|
|
1429
|
+
ds(A) {
|
|
1430
|
+
return this.ks.ds(A, this._s);
|
|
1399
1431
|
}
|
|
1400
1432
|
kA() {
|
|
1401
|
-
this.
|
|
1433
|
+
this.vs.kA(), document.fonts.delete(this.Ys);
|
|
1402
1434
|
}
|
|
1403
1435
|
get fontFramebuffer() {
|
|
1404
|
-
return this.
|
|
1436
|
+
return this.vs;
|
|
1405
1437
|
}
|
|
1406
1438
|
get characters() {
|
|
1407
|
-
return this.
|
|
1439
|
+
return this._s;
|
|
1408
1440
|
}
|
|
1409
1441
|
get textureColumns() {
|
|
1410
|
-
return this
|
|
1442
|
+
return this.$s;
|
|
1411
1443
|
}
|
|
1412
1444
|
get textureRows() {
|
|
1413
|
-
return this.
|
|
1445
|
+
return this.Gs;
|
|
1414
1446
|
}
|
|
1415
1447
|
get maxGlyphDimensions() {
|
|
1416
|
-
return this.
|
|
1448
|
+
return this.Ms;
|
|
1417
1449
|
}
|
|
1418
1450
|
get fontSize() {
|
|
1419
|
-
return this.
|
|
1451
|
+
return this.bs;
|
|
1420
1452
|
}
|
|
1421
1453
|
get font() {
|
|
1422
|
-
return this.
|
|
1454
|
+
return this.ps;
|
|
1423
1455
|
}
|
|
1424
1456
|
}
|
|
1425
|
-
class
|
|
1457
|
+
class xA {
|
|
1426
1458
|
constructor(A, t, e) {
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
this.
|
|
1459
|
+
n(this, "Ws");
|
|
1460
|
+
n(this, "Hs");
|
|
1461
|
+
n(this, "PA");
|
|
1462
|
+
n(this, "uA");
|
|
1463
|
+
n(this, "Ks");
|
|
1464
|
+
n(this, "Js");
|
|
1465
|
+
n(this, "Vs");
|
|
1466
|
+
n(this, "Zs");
|
|
1467
|
+
n(this, "Ns");
|
|
1468
|
+
this.Vs = A, this.Zs = t, this.Ns = e, this.iA();
|
|
1437
1469
|
}
|
|
1438
1470
|
iA() {
|
|
1439
|
-
this.
|
|
1471
|
+
this.Ws = Math.floor(this.Vs.width / this.Zs), this.Hs = Math.floor(this.Vs.height / this.Ns), this.PA = this.Ws * this.Zs, this.uA = this.Hs * this.Ns, this.Ks = Math.floor((this.Vs.width - this.PA) / 2), this.Js = Math.floor((this.Vs.height - this.uA) / 2);
|
|
1440
1472
|
}
|
|
1441
|
-
|
|
1442
|
-
this.
|
|
1473
|
+
Xs(A, t) {
|
|
1474
|
+
this.Zs = A, this.Ns = t, this.iA();
|
|
1443
1475
|
}
|
|
1444
1476
|
get cellWidth() {
|
|
1445
|
-
return this.
|
|
1477
|
+
return this.Zs;
|
|
1446
1478
|
}
|
|
1447
1479
|
get cellHeight() {
|
|
1448
|
-
return this.
|
|
1480
|
+
return this.Ns;
|
|
1449
1481
|
}
|
|
1450
1482
|
get cols() {
|
|
1451
|
-
return this.
|
|
1483
|
+
return this.Ws;
|
|
1452
1484
|
}
|
|
1453
1485
|
get rows() {
|
|
1454
|
-
return this.
|
|
1486
|
+
return this.Hs;
|
|
1455
1487
|
}
|
|
1456
1488
|
get width() {
|
|
1457
1489
|
return this.PA;
|
|
@@ -1460,302 +1492,302 @@ class RA {
|
|
|
1460
1492
|
return this.uA;
|
|
1461
1493
|
}
|
|
1462
1494
|
get offsetX() {
|
|
1463
|
-
return this.
|
|
1495
|
+
return this.Ks;
|
|
1464
1496
|
}
|
|
1465
1497
|
get offsetY() {
|
|
1466
|
-
return this.
|
|
1498
|
+
return this.Js;
|
|
1467
1499
|
}
|
|
1468
1500
|
}
|
|
1469
1501
|
class TA {
|
|
1470
1502
|
constructor(A = {}) {
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
A.canvas ? (this.
|
|
1503
|
+
n(this, "Vs");
|
|
1504
|
+
n(this, "js");
|
|
1505
|
+
n(this, "qs");
|
|
1506
|
+
A.canvas ? (this.Vs = A.canvas, this.qs = !1) : (this.Vs = this.Ai(A.width, A.height), this.qs = !0), this.Vs.style.imageRendering = "pixelated";
|
|
1475
1507
|
}
|
|
1476
|
-
|
|
1508
|
+
Ai(A, t) {
|
|
1477
1509
|
const e = document.createElement("canvas");
|
|
1478
1510
|
return e.className = "textmodeCanvas", e.style.imageRendering = "pixelated", e.width = A || 800, e.height = t || 600, document.body.appendChild(e), e;
|
|
1479
1511
|
}
|
|
1480
|
-
|
|
1481
|
-
this.
|
|
1512
|
+
ti(A, t) {
|
|
1513
|
+
this.Vs.width = A ?? this.Vs.width, this.Vs.height = t ?? this.Vs.height;
|
|
1482
1514
|
}
|
|
1483
|
-
|
|
1484
|
-
const A = this.
|
|
1485
|
-
if (!A) throw new
|
|
1515
|
+
ei() {
|
|
1516
|
+
const A = this.Vs.getContext("webgl2", { alpha: !0, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" });
|
|
1517
|
+
if (!A) throw new f("`textmode.js` requires WebGL2 support.");
|
|
1486
1518
|
return A;
|
|
1487
1519
|
}
|
|
1488
1520
|
kA() {
|
|
1489
|
-
this.
|
|
1490
|
-
const A = this.
|
|
1521
|
+
this.js && this.js.disconnect();
|
|
1522
|
+
const A = this.Vs.getContext("webgl") || this.Vs.getContext("webgl2");
|
|
1491
1523
|
if (A) {
|
|
1492
1524
|
const t = A.getExtension("WEBGL_lose_context");
|
|
1493
1525
|
t && t.loseContext();
|
|
1494
1526
|
}
|
|
1495
|
-
this.
|
|
1527
|
+
this.qs && this.Vs.parentNode && this.Vs.parentNode.removeChild(this.Vs);
|
|
1496
1528
|
}
|
|
1497
1529
|
get canvas() {
|
|
1498
|
-
return this.
|
|
1530
|
+
return this.Vs;
|
|
1499
1531
|
}
|
|
1500
1532
|
get width() {
|
|
1501
|
-
return this.
|
|
1533
|
+
return this.Vs.width;
|
|
1502
1534
|
}
|
|
1503
1535
|
get height() {
|
|
1504
|
-
return this.
|
|
1536
|
+
return this.Vs.height;
|
|
1505
1537
|
}
|
|
1506
1538
|
}
|
|
1507
1539
|
class MA {
|
|
1508
1540
|
constructor(A = 60) {
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
this.
|
|
1541
|
+
n(this, "si");
|
|
1542
|
+
n(this, "ii");
|
|
1543
|
+
n(this, "Bi", null);
|
|
1544
|
+
n(this, "Qi", 0);
|
|
1545
|
+
n(this, "Ei", !0);
|
|
1546
|
+
n(this, "ri", 0);
|
|
1547
|
+
n(this, "ni", 0);
|
|
1548
|
+
n(this, "oi", []);
|
|
1549
|
+
n(this, "gi", 10);
|
|
1550
|
+
n(this, "ai", 0);
|
|
1551
|
+
this.si = A, this.ii = 1e3 / A;
|
|
1520
1552
|
}
|
|
1521
1553
|
start(A) {
|
|
1522
|
-
if (!this.
|
|
1523
|
-
this.
|
|
1554
|
+
if (!this.Ei) return;
|
|
1555
|
+
this.Qi = performance.now();
|
|
1524
1556
|
const t = (e) => {
|
|
1525
|
-
if (!this.
|
|
1526
|
-
const s = e - this.
|
|
1527
|
-
s >= this.
|
|
1557
|
+
if (!this.Ei) return void (this.Bi = null);
|
|
1558
|
+
const s = e - this.Qi;
|
|
1559
|
+
s >= this.ii && (A(), this.Qi = e - s % this.ii), this.Ei && (this.Bi = requestAnimationFrame(t));
|
|
1528
1560
|
};
|
|
1529
|
-
this.
|
|
1561
|
+
this.Bi = requestAnimationFrame(t);
|
|
1530
1562
|
}
|
|
1531
1563
|
stop() {
|
|
1532
|
-
this.
|
|
1564
|
+
this.Bi && (cancelAnimationFrame(this.Bi), this.Bi = null);
|
|
1533
1565
|
}
|
|
1534
1566
|
pause() {
|
|
1535
|
-
this.
|
|
1567
|
+
this.Ei && (this.Ei = !1, this.stop());
|
|
1536
1568
|
}
|
|
1537
1569
|
resume(A) {
|
|
1538
|
-
this.
|
|
1570
|
+
this.Ei || (this.Ei = !0, this.start(A));
|
|
1539
1571
|
}
|
|
1540
1572
|
frameRate(A, t) {
|
|
1541
|
-
if (A === void 0) return this.
|
|
1542
|
-
this.
|
|
1573
|
+
if (A === void 0) return this.ri;
|
|
1574
|
+
this.si = A, this.ii = 1e3 / A, this.Ei && t && (this.stop(), this.start(t));
|
|
1543
1575
|
}
|
|
1544
1576
|
measureFrameRate() {
|
|
1545
1577
|
const A = performance.now();
|
|
1546
|
-
if (this.
|
|
1547
|
-
const t = A - this.
|
|
1548
|
-
this.
|
|
1549
|
-
const e = this.
|
|
1550
|
-
this.
|
|
1578
|
+
if (this.ni > 0) {
|
|
1579
|
+
const t = A - this.ni;
|
|
1580
|
+
this.oi.push(t), this.oi.length > this.gi && this.oi.shift();
|
|
1581
|
+
const e = this.oi.reduce((s, i) => s + i, 0) / this.oi.length;
|
|
1582
|
+
this.ri = 1e3 / e;
|
|
1551
1583
|
}
|
|
1552
|
-
this.
|
|
1584
|
+
this.ni = A;
|
|
1553
1585
|
}
|
|
1554
1586
|
get isLooping() {
|
|
1555
|
-
return this.
|
|
1587
|
+
return this.Ei;
|
|
1556
1588
|
}
|
|
1557
1589
|
get frameRateLimit() {
|
|
1558
|
-
return this.
|
|
1590
|
+
return this.si;
|
|
1559
1591
|
}
|
|
1560
1592
|
get currentFrameRate() {
|
|
1561
|
-
return this.
|
|
1593
|
+
return this.ri;
|
|
1562
1594
|
}
|
|
1563
1595
|
get frameCount() {
|
|
1564
|
-
return this.
|
|
1596
|
+
return this.ai;
|
|
1565
1597
|
}
|
|
1566
1598
|
set frameCount(A) {
|
|
1567
|
-
this.
|
|
1599
|
+
this.ai = A;
|
|
1568
1600
|
}
|
|
1569
1601
|
incrementFrame() {
|
|
1570
|
-
this.
|
|
1602
|
+
this.ai++;
|
|
1571
1603
|
}
|
|
1572
1604
|
resetFrameCount() {
|
|
1573
|
-
this.
|
|
1605
|
+
this.ai = 0;
|
|
1574
1606
|
}
|
|
1575
1607
|
}
|
|
1576
1608
|
class FA {
|
|
1577
1609
|
constructor() {
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
}
|
|
1588
|
-
ui() {
|
|
1589
|
-
this.Ci || (this.hi = (A) => {
|
|
1590
|
-
this.Ii(A);
|
|
1591
|
-
}, this.ci = (A) => {
|
|
1592
|
-
this.wi(A);
|
|
1593
|
-
}, window.addEventListener("keydown", this.hi, { passive: !1 }), window.addEventListener("keyup", this.ci, { passive: !1 }), this.Ci = !0);
|
|
1610
|
+
n(this, "hi", /* @__PURE__ */ new Map());
|
|
1611
|
+
n(this, "ci", null);
|
|
1612
|
+
n(this, "li", null);
|
|
1613
|
+
n(this, "Ci");
|
|
1614
|
+
n(this, "Di");
|
|
1615
|
+
n(this, "Pi", !1);
|
|
1616
|
+
n(this, "ui");
|
|
1617
|
+
n(this, "Ii");
|
|
1618
|
+
n(this, "wi", { ArrowUp: "UP_ARROW", ArrowDown: "DOWN_ARROW", ArrowLeft: "LEFT_ARROW", ArrowRight: "RIGHT_ARROW", F1: "F1", F2: "F2", F3: "F3", F4: "F4", F5: "F5", F6: "F6", F7: "F7", F8: "F8", F9: "F9", F10: "F10", F11: "F11", F12: "F12", Enter: "ENTER", Return: "RETURN", Tab: "TAB", Escape: "ESCAPE", Backspace: "BACKSPACE", Delete: "DELETE", Insert: "INSERT", Home: "HOME", End: "END", PageUp: "PAGE_UP", PageDown: "PAGE_DOWN", Shift: "SHIFT", Control: "CONTROL", Alt: "ALT", Meta: "META", " ": "SPACE" });
|
|
1594
1619
|
}
|
|
1595
1620
|
fi() {
|
|
1596
|
-
this.
|
|
1621
|
+
this.Pi || (this.Ci = (A) => {
|
|
1622
|
+
this.di(A);
|
|
1623
|
+
}, this.Di = (A) => {
|
|
1624
|
+
this.pi(A);
|
|
1625
|
+
}, window.addEventListener("keydown", this.Ci, { passive: !1 }), window.addEventListener("keyup", this.Di, { passive: !1 }), this.Pi = !0);
|
|
1597
1626
|
}
|
|
1598
|
-
|
|
1599
|
-
this.li =
|
|
1627
|
+
_i() {
|
|
1628
|
+
this.Pi && (window.removeEventListener("keydown", this.Ci), window.removeEventListener("keyup", this.Di), this.Pi = !1, this.hi.clear(), this.ci = null, this.li = null);
|
|
1600
1629
|
}
|
|
1601
|
-
|
|
1602
|
-
this.
|
|
1630
|
+
mi(A) {
|
|
1631
|
+
this.ui = A;
|
|
1603
1632
|
}
|
|
1604
|
-
|
|
1605
|
-
|
|
1633
|
+
yi(A) {
|
|
1634
|
+
this.Ii = A;
|
|
1635
|
+
}
|
|
1636
|
+
bi(A) {
|
|
1637
|
+
const t = this.$i(A), e = this.hi.get(A) || this.hi.get(t);
|
|
1606
1638
|
return (e == null ? void 0 : e.isPressed) || !1;
|
|
1607
1639
|
}
|
|
1608
|
-
|
|
1609
|
-
return this.
|
|
1640
|
+
Gi() {
|
|
1641
|
+
return this.ci;
|
|
1610
1642
|
}
|
|
1611
|
-
|
|
1612
|
-
return this.
|
|
1643
|
+
xi() {
|
|
1644
|
+
return this.li;
|
|
1613
1645
|
}
|
|
1614
|
-
|
|
1646
|
+
Mi() {
|
|
1615
1647
|
const A = [];
|
|
1616
|
-
for (const [t, e] of this.
|
|
1648
|
+
for (const [t, e] of this.hi) e.isPressed && A.push(t);
|
|
1617
1649
|
return A;
|
|
1618
1650
|
}
|
|
1619
|
-
|
|
1620
|
-
return { ctrl: this.
|
|
1651
|
+
Yi() {
|
|
1652
|
+
return { ctrl: this.bi("Control"), shift: this.bi("Shift"), alt: this.bi("Alt"), meta: this.bi("Meta") };
|
|
1621
1653
|
}
|
|
1622
|
-
|
|
1623
|
-
this.
|
|
1654
|
+
Fi() {
|
|
1655
|
+
this.hi.clear(), this.ci = null, this.li = null;
|
|
1624
1656
|
}
|
|
1625
|
-
|
|
1657
|
+
di(A) {
|
|
1626
1658
|
const t = A.key, e = Date.now();
|
|
1627
|
-
this.
|
|
1628
|
-
const s = this.
|
|
1629
|
-
if (!s.isPressed && (s.isPressed = !0, s.lastPressTime = e, this.
|
|
1659
|
+
this.hi.has(t) || this.hi.set(t, { isPressed: !1, lastPressTime: 0, lastReleaseTime: 0 });
|
|
1660
|
+
const s = this.hi.get(t);
|
|
1661
|
+
if (!s.isPressed && (s.isPressed = !0, s.lastPressTime = e, this.ci = t, this.ui)) {
|
|
1630
1662
|
const i = { key: t, keyCode: A.keyCode, ctrlKey: A.ctrlKey, shiftKey: A.shiftKey, altKey: A.altKey, metaKey: A.metaKey, isPressed: !0, originalEvent: A };
|
|
1631
|
-
this.
|
|
1663
|
+
this.ui(i);
|
|
1632
1664
|
}
|
|
1633
1665
|
}
|
|
1634
|
-
|
|
1666
|
+
pi(A) {
|
|
1635
1667
|
const t = A.key, e = Date.now();
|
|
1636
|
-
this.
|
|
1637
|
-
const s = this.
|
|
1638
|
-
if (s.isPressed = !1, s.lastReleaseTime = e, this.
|
|
1668
|
+
this.hi.has(t) || this.hi.set(t, { isPressed: !1, lastPressTime: 0, lastReleaseTime: 0 });
|
|
1669
|
+
const s = this.hi.get(t);
|
|
1670
|
+
if (s.isPressed = !1, s.lastReleaseTime = e, this.li = t, this.Ii) {
|
|
1639
1671
|
const i = { key: t, keyCode: A.keyCode, ctrlKey: A.ctrlKey, shiftKey: A.shiftKey, altKey: A.altKey, metaKey: A.metaKey, isPressed: !1, originalEvent: A };
|
|
1640
|
-
this.
|
|
1672
|
+
this.Ii(i);
|
|
1641
1673
|
}
|
|
1642
1674
|
}
|
|
1643
|
-
|
|
1644
|
-
return this.
|
|
1675
|
+
$i(A) {
|
|
1676
|
+
return this.wi[A] || A.toLowerCase();
|
|
1645
1677
|
}
|
|
1646
1678
|
}
|
|
1647
1679
|
class GA {
|
|
1648
1680
|
constructor(A) {
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
this.
|
|
1667
|
-
}
|
|
1668
|
-
|
|
1669
|
-
this.
|
|
1670
|
-
}
|
|
1671
|
-
ui() {
|
|
1672
|
-
if (this.Ci) return;
|
|
1673
|
-
const A = this.Hs.canvas;
|
|
1674
|
-
this.Si = (t) => {
|
|
1675
|
-
this.Zi(t), this.Ni(t);
|
|
1676
|
-
}, this.ki = () => {
|
|
1677
|
-
this.Fi = { ...this.Yi }, this.Yi.x = -1, this.Yi.y = -1, this.Ri = null;
|
|
1678
|
-
}, this.zi = (t) => {
|
|
1679
|
-
this.Zi(t), this.Xi(t);
|
|
1680
|
-
}, this.Li = (t) => {
|
|
1681
|
-
this.Zi(t), this.ji(t);
|
|
1682
|
-
}, this.Oi = (t) => {
|
|
1683
|
-
this.Zi(t), this.qi(t);
|
|
1684
|
-
}, this.Ti = (t) => {
|
|
1685
|
-
this.Zi(t), this.AB(t);
|
|
1686
|
-
}, A.addEventListener("mousemove", this.Si, { passive: !0 }), A.addEventListener("mouseleave", this.ki, { passive: !0 }), A.addEventListener("mousedown", this.zi, { passive: !0 }), A.addEventListener("mouseup", this.Li, { passive: !0 }), A.addEventListener("click", this.Oi, { passive: !0 }), A.addEventListener("wheel", this.Ti, { passive: !1 }), this.Ci = !0;
|
|
1681
|
+
n(this, "Vs");
|
|
1682
|
+
n(this, "Ri");
|
|
1683
|
+
n(this, "Si", { x: -1, y: -1 });
|
|
1684
|
+
n(this, "ki", { x: -1, y: -1 });
|
|
1685
|
+
n(this, "zi", null);
|
|
1686
|
+
n(this, "Li");
|
|
1687
|
+
n(this, "Oi");
|
|
1688
|
+
n(this, "Ti");
|
|
1689
|
+
n(this, "Ui");
|
|
1690
|
+
n(this, "Wi");
|
|
1691
|
+
n(this, "Hi");
|
|
1692
|
+
n(this, "Pi", !1);
|
|
1693
|
+
n(this, "Ki");
|
|
1694
|
+
n(this, "Ji");
|
|
1695
|
+
n(this, "Vi");
|
|
1696
|
+
n(this, "Zi");
|
|
1697
|
+
n(this, "Ni");
|
|
1698
|
+
this.Vs = A;
|
|
1699
|
+
}
|
|
1700
|
+
zs(A) {
|
|
1701
|
+
this.Ri = A, this.Xi();
|
|
1687
1702
|
}
|
|
1688
1703
|
fi() {
|
|
1689
|
-
if (
|
|
1690
|
-
const A = this.
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1704
|
+
if (this.Pi) return;
|
|
1705
|
+
const A = this.Vs.canvas;
|
|
1706
|
+
this.Li = (t) => {
|
|
1707
|
+
this.ji(t), this.qi(t);
|
|
1708
|
+
}, this.Oi = () => {
|
|
1709
|
+
this.ki = { ...this.Si }, this.Si.x = -1, this.Si.y = -1, this.zi = null;
|
|
1710
|
+
}, this.Ti = (t) => {
|
|
1711
|
+
this.ji(t), this.AB(t);
|
|
1712
|
+
}, this.Ui = (t) => {
|
|
1713
|
+
this.ji(t), this.tB(t);
|
|
1714
|
+
}, this.Wi = (t) => {
|
|
1715
|
+
this.ji(t), this.eB(t);
|
|
1716
|
+
}, this.Hi = (t) => {
|
|
1717
|
+
this.ji(t), this.sB(t);
|
|
1718
|
+
}, A.addEventListener("mousemove", this.Li, { passive: !0 }), A.addEventListener("mouseleave", this.Oi, { passive: !0 }), A.addEventListener("mousedown", this.Ti, { passive: !0 }), A.addEventListener("mouseup", this.Ui, { passive: !0 }), A.addEventListener("click", this.Wi, { passive: !0 }), A.addEventListener("wheel", this.Hi, { passive: !1 }), this.Pi = !0;
|
|
1719
|
+
}
|
|
1720
|
+
_i() {
|
|
1721
|
+
if (!this.Pi) return;
|
|
1722
|
+
const A = this.Vs.canvas;
|
|
1723
|
+
A.removeEventListener("mousemove", this.Li), A.removeEventListener("mouseleave", this.Oi), A.removeEventListener("mousedown", this.Ti), A.removeEventListener("mouseup", this.Ui), A.removeEventListener("click", this.Wi), A.removeEventListener("wheel", this.Hi), this.Pi = !1;
|
|
1724
|
+
}
|
|
1725
|
+
Xi() {
|
|
1726
|
+
if (this.Pi) try {
|
|
1727
|
+
if (this.zi) {
|
|
1728
|
+
const A = new MouseEvent("mousemove", { clientX: this.zi.x, clientY: this.zi.y, bubbles: !1, cancelable: !1 });
|
|
1729
|
+
this.ji(A);
|
|
1730
|
+
} else this.Si.x !== -1 && this.Si.y !== -1 && (this.Si.x >= this.Ri.cols || this.Si.y >= this.Ri.rows) && (this.Si.x = -1, this.Si.y = -1);
|
|
1699
1731
|
} catch {
|
|
1700
|
-
this.
|
|
1732
|
+
this.Si.x = -1, this.Si.y = -1;
|
|
1701
1733
|
}
|
|
1702
1734
|
}
|
|
1703
|
-
|
|
1704
|
-
this.Ui = A;
|
|
1705
|
-
}
|
|
1706
|
-
di(A) {
|
|
1707
|
-
this.Wi = A;
|
|
1708
|
-
}
|
|
1709
|
-
_i(A) {
|
|
1710
|
-
this.Hi = A;
|
|
1711
|
-
}
|
|
1712
|
-
eB(A) {
|
|
1735
|
+
iB(A) {
|
|
1713
1736
|
this.Ki = A;
|
|
1714
1737
|
}
|
|
1715
|
-
|
|
1738
|
+
mi(A) {
|
|
1716
1739
|
this.Ji = A;
|
|
1717
1740
|
}
|
|
1718
|
-
|
|
1719
|
-
|
|
1741
|
+
yi(A) {
|
|
1742
|
+
this.Vi = A;
|
|
1720
1743
|
}
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
const t = { position: { ...this.Yi }, previousPosition: { ...this.Fi }, originalEvent: A };
|
|
1724
|
-
this.Ki(t);
|
|
1725
|
-
}
|
|
1744
|
+
BB(A) {
|
|
1745
|
+
this.Zi = A;
|
|
1726
1746
|
}
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
const t = { position: { ...this.Yi }, previousPosition: { ...this.Fi }, button: A.button, originalEvent: A };
|
|
1730
|
-
this.Wi(t);
|
|
1731
|
-
}
|
|
1747
|
+
QB(A) {
|
|
1748
|
+
this.Ni = A;
|
|
1732
1749
|
}
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
const t = { position: { ...this.Yi }, previousPosition: { ...this.Fi }, button: A.button, originalEvent: A };
|
|
1736
|
-
this.Hi(t);
|
|
1737
|
-
}
|
|
1750
|
+
EB() {
|
|
1751
|
+
return { x: this.Si.x, y: this.Si.y };
|
|
1738
1752
|
}
|
|
1739
1753
|
qi(A) {
|
|
1740
|
-
if (this.
|
|
1741
|
-
const t = { position: { ...this.
|
|
1742
|
-
this.
|
|
1754
|
+
if (this.Zi) {
|
|
1755
|
+
const t = { position: { ...this.Si }, previousPosition: { ...this.ki }, originalEvent: A };
|
|
1756
|
+
this.Zi(t);
|
|
1743
1757
|
}
|
|
1744
1758
|
}
|
|
1745
1759
|
AB(A) {
|
|
1746
1760
|
if (this.Ji) {
|
|
1747
|
-
const t = { position: { ...this.
|
|
1761
|
+
const t = { position: { ...this.Si }, previousPosition: { ...this.ki }, button: A.button, originalEvent: A };
|
|
1748
1762
|
this.Ji(t);
|
|
1749
1763
|
}
|
|
1750
1764
|
}
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1765
|
+
tB(A) {
|
|
1766
|
+
if (this.Vi) {
|
|
1767
|
+
const t = { position: { ...this.Si }, previousPosition: { ...this.ki }, button: A.button, originalEvent: A };
|
|
1768
|
+
this.Vi(t);
|
|
1769
|
+
}
|
|
1770
|
+
}
|
|
1771
|
+
eB(A) {
|
|
1772
|
+
if (this.Ki) {
|
|
1773
|
+
const t = { position: { ...this.Si }, previousPosition: { ...this.ki }, button: A.button, originalEvent: A };
|
|
1774
|
+
this.Ki(t);
|
|
1775
|
+
}
|
|
1776
|
+
}
|
|
1777
|
+
sB(A) {
|
|
1778
|
+
if (this.Ni) {
|
|
1779
|
+
const t = { position: { ...this.Si }, previousPosition: { ...this.ki }, delta: { x: A.deltaX, y: A.deltaY }, originalEvent: A };
|
|
1780
|
+
this.Ni(t);
|
|
1781
|
+
}
|
|
1782
|
+
}
|
|
1783
|
+
ji(A) {
|
|
1784
|
+
const t = this.Vs.canvas;
|
|
1785
|
+
this.ki = { ...this.Si }, this.zi = { x: A.clientX, y: A.clientY };
|
|
1786
|
+
const e = t.getBoundingClientRect(), s = A.clientX - e.left, i = A.clientY - e.top, B = t.width / e.width, r = i * (t.height / e.height), Q = s * B - this.Ri.offsetX, o = r - this.Ri.offsetY, g = Math.floor(Q / this.Ri.cellWidth), a = Math.floor(o / this.Ri.cellHeight);
|
|
1787
|
+
g >= 0 && g < this.Ri.cols && a >= 0 && a < this.Ri.rows ? (this.Si.x = g, this.Si.y = a) : (this.Si.x = -1, this.Si.y = -1);
|
|
1756
1788
|
}
|
|
1757
1789
|
}
|
|
1758
|
-
const
|
|
1790
|
+
const SA = (E) => class extends E {
|
|
1759
1791
|
rotate(A = 0, t = 0, e = 0) {
|
|
1760
1792
|
this.vA.state.EA(A), this.vA.state.rA(t), this.vA.state.nA(e);
|
|
1761
1793
|
}
|
|
@@ -1775,25 +1807,25 @@ const YA = (E) => class extends E {
|
|
|
1775
1807
|
this.vA.state.sA();
|
|
1776
1808
|
}
|
|
1777
1809
|
rect(A, t, e = 1, s = 1) {
|
|
1778
|
-
this.vA
|
|
1810
|
+
this.vA.$e(A, t, e, s);
|
|
1779
1811
|
}
|
|
1780
1812
|
point(A, t) {
|
|
1781
|
-
this.vA
|
|
1813
|
+
this.vA.$e(A, t, 1, 1);
|
|
1782
1814
|
}
|
|
1783
1815
|
line(A, t, e, s) {
|
|
1784
|
-
this.vA.
|
|
1816
|
+
this.vA.Ge(A, t, e, s);
|
|
1785
1817
|
}
|
|
1786
1818
|
lineWeight(A) {
|
|
1787
1819
|
this.vA.state.QA(A);
|
|
1788
1820
|
}
|
|
1789
1821
|
background(A, t = A, e = A, s = 255) {
|
|
1790
|
-
this.vA.
|
|
1822
|
+
this.vA.Se(A, t, e, s);
|
|
1791
1823
|
}
|
|
1792
1824
|
char(A) {
|
|
1793
|
-
this.vA.state.
|
|
1825
|
+
this.vA.state.oA(this.ps.fs(A));
|
|
1794
1826
|
}
|
|
1795
1827
|
charColor(A, t, e) {
|
|
1796
|
-
this.vA.state.
|
|
1828
|
+
this.vA.state.gA(A, t, e);
|
|
1797
1829
|
}
|
|
1798
1830
|
cellColor(A, t, e) {
|
|
1799
1831
|
this.vA.state.aA(A, t, e);
|
|
@@ -1805,110 +1837,110 @@ const YA = (E) => class extends E {
|
|
|
1805
1837
|
this.vA.state.cA(A);
|
|
1806
1838
|
}
|
|
1807
1839
|
charRotation(A) {
|
|
1808
|
-
this.vA.state.
|
|
1840
|
+
this.vA.state.CA(A);
|
|
1809
1841
|
}
|
|
1810
1842
|
invert(A) {
|
|
1811
|
-
this.vA.state.
|
|
1843
|
+
this.vA.state.lA(A);
|
|
1812
1844
|
}
|
|
1813
1845
|
clear() {
|
|
1814
|
-
this.vA.
|
|
1846
|
+
this.vA.Se(0, 0, 0, 0);
|
|
1815
1847
|
}
|
|
1816
1848
|
ellipse(A, t, e, s) {
|
|
1817
|
-
this.vA.
|
|
1849
|
+
this.vA.xe(A, t, e / 2, s / 2);
|
|
1818
1850
|
}
|
|
1819
1851
|
triangle(A, t, e, s, i, B) {
|
|
1820
|
-
this.vA
|
|
1852
|
+
this.vA.Me(A, t, e, s, i, B);
|
|
1821
1853
|
}
|
|
1822
|
-
bezierCurve(A, t, e, s, i, B, r,
|
|
1823
|
-
this.vA.
|
|
1854
|
+
bezierCurve(A, t, e, s, i, B, r, Q) {
|
|
1855
|
+
this.vA.Ye(A, t, e, s, i, B, r, Q);
|
|
1824
1856
|
}
|
|
1825
1857
|
arc(A, t, e, s, i, B) {
|
|
1826
|
-
this.vA.
|
|
1858
|
+
this.vA.Re(A, t, e, s, i, B);
|
|
1827
1859
|
}
|
|
1828
1860
|
shader(A) {
|
|
1829
|
-
this.vA.
|
|
1861
|
+
this.vA.me(A);
|
|
1830
1862
|
}
|
|
1831
1863
|
setUniform(A, t) {
|
|
1832
|
-
this.vA.
|
|
1864
|
+
this.vA.ZA(A, t);
|
|
1833
1865
|
}
|
|
1834
1866
|
setUniforms(A) {
|
|
1835
|
-
this.vA.
|
|
1867
|
+
this.vA.ve(A);
|
|
1836
1868
|
}
|
|
1837
1869
|
createFilterShader(A) {
|
|
1838
|
-
return this.vA.
|
|
1870
|
+
return this.vA.Bt(A);
|
|
1839
1871
|
}
|
|
1840
1872
|
createFramebuffer(A) {
|
|
1841
|
-
return this.vA.
|
|
1873
|
+
return this.vA.Fe(A.width, A.height, 5, { filter: "nearest", wrap: "clamp", format: "rgba", type: "unsigned_byte" });
|
|
1842
1874
|
}
|
|
1843
1875
|
image(A, t, e, s, i) {
|
|
1844
|
-
this.vA.
|
|
1876
|
+
this.vA.ye(A, t, e, s ?? A.width, i ?? A.height);
|
|
1845
1877
|
}
|
|
1846
1878
|
};
|
|
1847
1879
|
class O {
|
|
1848
|
-
|
|
1849
|
-
const t = A.
|
|
1850
|
-
return { characterPixels: t, primaryColorPixels: e, secondaryColorPixels: s, transformPixels: A.
|
|
1880
|
+
rB(A) {
|
|
1881
|
+
const t = A.MA(0), e = A.MA(1), s = A.MA(2), i = A.MA(3);
|
|
1882
|
+
return { characterPixels: t, primaryColorPixels: e, secondaryColorPixels: s, transformPixels: A.MA(4), rotationPixels: i };
|
|
1851
1883
|
}
|
|
1852
|
-
|
|
1884
|
+
nB(A, t) {
|
|
1853
1885
|
return A[t] + (A[t + 1] << 8);
|
|
1854
1886
|
}
|
|
1855
|
-
|
|
1887
|
+
oB(A, t) {
|
|
1856
1888
|
return { r: A[t], g: A[t + 1], b: A[t + 2], a: A[t + 3] };
|
|
1857
1889
|
}
|
|
1858
1890
|
}
|
|
1859
|
-
class
|
|
1860
|
-
|
|
1891
|
+
class z {
|
|
1892
|
+
gB(A, t) {
|
|
1861
1893
|
return new Blob([A], { type: t });
|
|
1862
1894
|
}
|
|
1863
|
-
|
|
1895
|
+
aB(A, t, e) {
|
|
1864
1896
|
try {
|
|
1865
|
-
const s = this.
|
|
1897
|
+
const s = this.gB(A, e), i = URL.createObjectURL(s), B = document.createElement("a");
|
|
1866
1898
|
B.href = i, B.download = t, B.style.display = "none", B.rel = "noopener", document.body.appendChild(B), B.click(), document.body.removeChild(B), URL.revokeObjectURL(i);
|
|
1867
1899
|
} catch (s) {
|
|
1868
1900
|
throw console.error("Failed to download file:", s), Error("File download failed: " + (s instanceof Error ? s.message : "Unknown error"));
|
|
1869
1901
|
}
|
|
1870
1902
|
}
|
|
1871
|
-
|
|
1903
|
+
hB() {
|
|
1872
1904
|
return (/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-");
|
|
1873
1905
|
}
|
|
1874
|
-
|
|
1906
|
+
cB() {
|
|
1875
1907
|
const A = /* @__PURE__ */ new Date();
|
|
1876
1908
|
return { date: A.toISOString().split("T")[0], time: A.toTimeString().split(" ")[0].replace(/:/g, "-") };
|
|
1877
1909
|
}
|
|
1878
|
-
|
|
1910
|
+
lB(A) {
|
|
1879
1911
|
return A.replace(/[<>:"/\\|?*]/g, "_").replace(/\s+/g, "_").replace(/_{2,}/g, "_").replace(/^_+|_+$/g, "").substring(0, 255);
|
|
1880
1912
|
}
|
|
1881
|
-
|
|
1882
|
-
return "textmode-export-" + this.
|
|
1913
|
+
CB() {
|
|
1914
|
+
return "textmode-export-" + this.hB();
|
|
1883
1915
|
}
|
|
1884
1916
|
}
|
|
1885
1917
|
class _A extends O {
|
|
1886
|
-
|
|
1887
|
-
const s = A[e] === 255, i = A[e + 1] === 255, B = A[e + 2] === 255, r = t[e],
|
|
1888
|
-
return { isInverted: s, flipHorizontal: i, flipVertical: B, rotation: Math.round(360 * (r +
|
|
1918
|
+
DB(A, t, e) {
|
|
1919
|
+
const s = A[e] === 255, i = A[e + 1] === 255, B = A[e + 2] === 255, r = t[e], Q = t[e + 1];
|
|
1920
|
+
return { isInverted: s, flipHorizontal: i, flipVertical: B, rotation: Math.round(360 * (r + Q / 255) / 255 * 100) / 100 };
|
|
1889
1921
|
}
|
|
1890
|
-
|
|
1922
|
+
PB(A, t, e) {
|
|
1891
1923
|
return { x: A, y: t, cellX: A * e.cellWidth, cellY: t * e.cellHeight };
|
|
1892
1924
|
}
|
|
1893
|
-
|
|
1925
|
+
uB(A, t) {
|
|
1894
1926
|
const e = [];
|
|
1895
1927
|
let s = 0;
|
|
1896
1928
|
for (let i = 0; i < t.rows; i++) for (let B = 0; B < t.cols; B++) {
|
|
1897
|
-
const r = 4 * s,
|
|
1898
|
-
let o = this.
|
|
1899
|
-
const
|
|
1900
|
-
if (
|
|
1929
|
+
const r = 4 * s, Q = this.nB(A.characterPixels, r);
|
|
1930
|
+
let o = this.oB(A.primaryColorPixels, r), g = this.oB(A.secondaryColorPixels, r);
|
|
1931
|
+
const a = this.DB(A.transformPixels, A.rotationPixels, r);
|
|
1932
|
+
if (a.isInverted) {
|
|
1901
1933
|
const c = o;
|
|
1902
|
-
o =
|
|
1934
|
+
o = g, g = c;
|
|
1903
1935
|
}
|
|
1904
|
-
const h = this.
|
|
1905
|
-
e.push({ charIndex:
|
|
1936
|
+
const h = this.PB(B, i, t);
|
|
1937
|
+
e.push({ charIndex: Q, primaryColor: o, secondaryColor: g, transform: a, position: h }), s++;
|
|
1906
1938
|
}
|
|
1907
1939
|
return e;
|
|
1908
1940
|
}
|
|
1909
1941
|
}
|
|
1910
|
-
class
|
|
1911
|
-
|
|
1942
|
+
class LA {
|
|
1943
|
+
IB(A, t) {
|
|
1912
1944
|
const e = A.cmap;
|
|
1913
1945
|
for (const s of e.tables) if (s.format === 4) {
|
|
1914
1946
|
const i = s;
|
|
@@ -1917,165 +1949,165 @@ class SA {
|
|
|
1917
1949
|
{
|
|
1918
1950
|
const r = i.idRangeOffset[B] / 2 + (t - i.startCount[B]) - (i.startCount.length - B);
|
|
1919
1951
|
if (r >= 0 && r < i.glyphIdArray.length) {
|
|
1920
|
-
const
|
|
1921
|
-
if (
|
|
1952
|
+
const Q = i.glyphIdArray[r];
|
|
1953
|
+
if (Q !== 0) return Q + i.idDelta[B] & 65535;
|
|
1922
1954
|
}
|
|
1923
1955
|
}
|
|
1924
1956
|
}
|
|
1925
1957
|
} else if (s.format === 12) {
|
|
1926
1958
|
const i = s;
|
|
1927
1959
|
for (let B = 0; B < i.groups.length; B += 3) {
|
|
1928
|
-
const r = i.groups[B],
|
|
1929
|
-
if (t >= r && t <=
|
|
1960
|
+
const r = i.groups[B], Q = i.groups[B + 1], o = i.groups[B + 2];
|
|
1961
|
+
if (t >= r && t <= Q) return o + (t - r);
|
|
1930
1962
|
}
|
|
1931
1963
|
}
|
|
1932
1964
|
return 0;
|
|
1933
1965
|
}
|
|
1934
|
-
|
|
1966
|
+
wB(A, t, e, s, i) {
|
|
1935
1967
|
const B = i / A.head.unitsPerEm;
|
|
1936
|
-
return { getBoundingBox: () => ({ x1: e + t.xMin * B, y1: s + -t.yMax * B, x2: e + t.xMax * B, y2: s + -t.yMin * B }), toSVG: () => this.
|
|
1968
|
+
return { getBoundingBox: () => ({ x1: e + t.xMin * B, y1: s + -t.yMax * B, x2: e + t.xMax * B, y2: s + -t.yMin * B }), toSVG: () => this.fB(t, e, s, B) };
|
|
1937
1969
|
}
|
|
1938
|
-
|
|
1970
|
+
fB(A, t, e, s) {
|
|
1939
1971
|
if (!A || !A.xs) return "";
|
|
1940
|
-
const { xs: i, ys: B, endPts: r, flags:
|
|
1941
|
-
if (!(i && B && r &&
|
|
1942
|
-
let o = "",
|
|
1943
|
-
for (let
|
|
1944
|
-
const h = r[
|
|
1945
|
-
if (!(h <
|
|
1946
|
-
if (h >=
|
|
1947
|
-
const c = t + i[
|
|
1972
|
+
const { xs: i, ys: B, endPts: r, flags: Q } = A;
|
|
1973
|
+
if (!(i && B && r && Q)) return "";
|
|
1974
|
+
let o = "", g = 0;
|
|
1975
|
+
for (let a = 0; a < r.length; a++) {
|
|
1976
|
+
const h = r[a];
|
|
1977
|
+
if (!(h < g)) {
|
|
1978
|
+
if (h >= g) {
|
|
1979
|
+
const c = t + i[g] * s, l = e - B[g] * s;
|
|
1948
1980
|
o += `M${c.toFixed(2)},${l.toFixed(2)}`;
|
|
1949
|
-
let C =
|
|
1981
|
+
let C = g + 1;
|
|
1950
1982
|
for (; C <= h; )
|
|
1951
|
-
if (1 &
|
|
1952
|
-
const
|
|
1953
|
-
o += `L${
|
|
1983
|
+
if (1 & Q[C]) {
|
|
1984
|
+
const I = t + i[C] * s, w = e - B[C] * s;
|
|
1985
|
+
o += `L${I.toFixed(2)},${w.toFixed(2)}`, C++;
|
|
1954
1986
|
} else {
|
|
1955
|
-
const
|
|
1956
|
-
let d = C + 1 > h ?
|
|
1957
|
-
if (1 &
|
|
1958
|
-
const p = t + i[d] * s,
|
|
1959
|
-
o += `Q${
|
|
1987
|
+
const I = t + i[C] * s, w = e - B[C] * s;
|
|
1988
|
+
let d = C + 1 > h ? g : C + 1;
|
|
1989
|
+
if (1 & Q[d]) {
|
|
1990
|
+
const p = t + i[d] * s, x = e - B[d] * s;
|
|
1991
|
+
o += `Q${I.toFixed(2)},${w.toFixed(2)} ${p.toFixed(2)},${x.toFixed(2)}`, C = d + 1;
|
|
1960
1992
|
} else {
|
|
1961
|
-
const p = (
|
|
1962
|
-
o += `Q${
|
|
1993
|
+
const p = (I + (t + i[d] * s)) / 2, x = (w + (e - B[d] * s)) / 2;
|
|
1994
|
+
o += `Q${I.toFixed(2)},${w.toFixed(2)} ${p.toFixed(2)},${x.toFixed(2)}`, C = d;
|
|
1963
1995
|
}
|
|
1964
1996
|
}
|
|
1965
1997
|
o += "Z";
|
|
1966
1998
|
}
|
|
1967
|
-
|
|
1999
|
+
g = h + 1;
|
|
1968
2000
|
}
|
|
1969
2001
|
}
|
|
1970
2002
|
return o;
|
|
1971
2003
|
}
|
|
1972
|
-
|
|
1973
|
-
const B = A.codePointAt(0) || 0, r = this.
|
|
1974
|
-
let
|
|
1975
|
-
return t.glyf && t.glyf[r] !== null ?
|
|
2004
|
+
dB(A, t, e, s, i) {
|
|
2005
|
+
const B = A.codePointAt(0) || 0, r = this.IB(t, B);
|
|
2006
|
+
let Q = null;
|
|
2007
|
+
return t.glyf && t.glyf[r] !== null ? Q = t.glyf[r] : (Q = m.T.glyf.ze(t, r), t.glyf[r] = Q), this.wB(t, Q, e, s, i);
|
|
1976
2008
|
}
|
|
1977
|
-
|
|
1978
|
-
const o = e + (i -
|
|
1979
|
-
return this.
|
|
2009
|
+
pB(A, t, e, s, i, B, r, Q) {
|
|
2010
|
+
const o = e + (i - Q * (r / t.head.unitsPerEm)) / 2, g = s + (B + 0.7 * r) / 2;
|
|
2011
|
+
return this.dB(A, t, o, g, r).toSVG() || null;
|
|
1980
2012
|
}
|
|
1981
2013
|
}
|
|
1982
|
-
class
|
|
2014
|
+
class YA {
|
|
1983
2015
|
constructor() {
|
|
1984
|
-
|
|
1985
|
-
this.
|
|
2016
|
+
n(this, "_B");
|
|
2017
|
+
this._B = new LA();
|
|
1986
2018
|
}
|
|
1987
|
-
|
|
2019
|
+
mB(A) {
|
|
1988
2020
|
const { width: t, height: e } = A;
|
|
1989
2021
|
return `<?xml version="1.0" encoding="UTF-8"?><svg width="${t}" height="${e}" viewBox="0 0 ${t} ${e}" xmlns="http://www.w3.org/2000/svg"><title>textmode.js sketch</title>`;
|
|
1990
2022
|
}
|
|
1991
|
-
|
|
2023
|
+
vB() {
|
|
1992
2024
|
return "</g></svg>";
|
|
1993
2025
|
}
|
|
1994
|
-
|
|
2026
|
+
yB(A, t) {
|
|
1995
2027
|
if (!t.includeBackgroundRectangles) return "";
|
|
1996
2028
|
const [e, s, i, B] = t.backgroundColor;
|
|
1997
2029
|
return `<rect width="${A.width}" height="${A.height}" fill="rgba(${e},${s},${i},${B / 255})"/>`;
|
|
1998
2030
|
}
|
|
1999
|
-
|
|
2031
|
+
bB(A, t) {
|
|
2000
2032
|
const { transform: e, position: s } = A;
|
|
2001
2033
|
if (!e.flipHorizontal && !e.flipVertical && !e.rotation) return "";
|
|
2002
2034
|
const i = s.cellX + t.cellWidth / 2, B = s.cellY + t.cellHeight / 2, r = [];
|
|
2003
2035
|
if (e.flipHorizontal || e.flipVertical) {
|
|
2004
|
-
const
|
|
2005
|
-
r.push(`translate(${i} ${B})scale(${
|
|
2036
|
+
const Q = e.flipHorizontal ? -1 : 1, o = e.flipVertical ? -1 : 1;
|
|
2037
|
+
r.push(`translate(${i} ${B})scale(${Q} ${o})translate(${-i} ${-B})`);
|
|
2006
2038
|
}
|
|
2007
2039
|
return e.rotation && r.push(`rotate(${e.rotation} ${i} ${B})`), ` transform="${r.join(" ")}"`;
|
|
2008
2040
|
}
|
|
2009
|
-
|
|
2041
|
+
$B(A, t, e) {
|
|
2010
2042
|
if (!e.includeBackgroundRectangles || A.secondaryColor.a === 0) return "";
|
|
2011
|
-
const { position: s } = A, { r: i, g: B, b: r, a:
|
|
2043
|
+
const { position: s } = A, { r: i, g: B, b: r, a: Q } = A.secondaryColor, o = `rgba(${i},${B},${r},${Q / 255})`;
|
|
2012
2044
|
return e.drawMode === "stroke" ? `<rect x="${s.cellX}" y="${s.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" stroke="${o}" fill="none" stroke-width="${e.strokeWidth}"/>` : `<rect x="${s.cellX}" y="${s.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" fill="${o}"/>`;
|
|
2013
2045
|
}
|
|
2014
|
-
|
|
2046
|
+
dB(A, t, e, s) {
|
|
2015
2047
|
const i = e.characters[A.charIndex];
|
|
2016
2048
|
if (!i) return "";
|
|
2017
|
-
const B = this.
|
|
2049
|
+
const B = this._B.pB(i.character, e.font, A.position.cellX, A.position.cellY, t.cellWidth, t.cellHeight, e.fontSize, i.advanceWidth);
|
|
2018
2050
|
if (!B) return "";
|
|
2019
|
-
const { r, g:
|
|
2020
|
-
return s.drawMode === "stroke" ? `<path d="${B}" stroke="${
|
|
2051
|
+
const { r, g: Q, b: o, a: g } = A.primaryColor, a = `rgba(${r},${Q},${o},${g / 255})`;
|
|
2052
|
+
return s.drawMode === "stroke" ? `<path d="${B}" stroke="${a}" stroke-width="${s.strokeWidth}" fill="none"/>` : `<path d="${B}" fill="${a}"/>`;
|
|
2021
2053
|
}
|
|
2022
|
-
|
|
2023
|
-
const i = [], B = this
|
|
2054
|
+
GB(A, t, e, s) {
|
|
2055
|
+
const i = [], B = this.$B(A, t, s);
|
|
2024
2056
|
B && i.push(B);
|
|
2025
|
-
const r = this.
|
|
2057
|
+
const r = this.dB(A, t, e, s);
|
|
2026
2058
|
if (r) {
|
|
2027
|
-
const
|
|
2028
|
-
i.push(
|
|
2059
|
+
const Q = this.bB(A, t);
|
|
2060
|
+
i.push(Q ? `<g${Q}>${r}</g>` : r);
|
|
2029
2061
|
}
|
|
2030
2062
|
return i.join("");
|
|
2031
2063
|
}
|
|
2032
|
-
|
|
2033
|
-
const i = [this.
|
|
2034
|
-
for (const B of A) i.push(this.
|
|
2035
|
-
return i.push(this.
|
|
2064
|
+
xB(A, t, e, s) {
|
|
2065
|
+
const i = [this.mB(t), this.yB(t, s), '<g id="ascii-cells">'];
|
|
2066
|
+
for (const B of A) i.push(this.GB(B, t, e, s));
|
|
2067
|
+
return i.push(this.vB()), i.join("");
|
|
2036
2068
|
}
|
|
2037
|
-
|
|
2069
|
+
MB(A) {
|
|
2038
2070
|
return A.replace(/<path[^>]*d=""[^>]*\/>/g, "").replace(/\s+/g, " ").replace(/> </g, "><");
|
|
2039
2071
|
}
|
|
2040
2072
|
}
|
|
2041
|
-
class UA extends
|
|
2042
|
-
|
|
2043
|
-
return this.
|
|
2073
|
+
class UA extends z {
|
|
2074
|
+
YB(A) {
|
|
2075
|
+
return this.gB(A, "image/svg+xml;charset=utf-8");
|
|
2044
2076
|
}
|
|
2045
|
-
|
|
2046
|
-
this.
|
|
2077
|
+
FB(A, t) {
|
|
2078
|
+
this.aB(A, this.lB(t) + ".svg", "image/svg+xml;charset=utf-8");
|
|
2047
2079
|
}
|
|
2048
|
-
|
|
2049
|
-
this.
|
|
2080
|
+
RB(A, t) {
|
|
2081
|
+
this.FB(A, t || this.CB());
|
|
2050
2082
|
}
|
|
2051
2083
|
}
|
|
2052
|
-
class
|
|
2084
|
+
class $ {
|
|
2053
2085
|
constructor() {
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
this.
|
|
2086
|
+
n(this, "SB");
|
|
2087
|
+
n(this, "kB");
|
|
2088
|
+
n(this, "zB");
|
|
2089
|
+
this.SB = new _A(), this.kB = new YA(), this.zB = new UA();
|
|
2058
2090
|
}
|
|
2059
|
-
|
|
2060
|
-
return { includeBackgroundRectangles: A.includeBackgroundRectangles ?? !0, drawMode: A.drawMode ?? "fill", strokeWidth: A.strokeWidth ?? 1, backgroundColor: A.backgroundColor ?? [0, 0, 0, 0], filename: A.filename || this.
|
|
2091
|
+
LB(A) {
|
|
2092
|
+
return { includeBackgroundRectangles: A.includeBackgroundRectangles ?? !0, drawMode: A.drawMode ?? "fill", strokeWidth: A.strokeWidth ?? 1, backgroundColor: A.backgroundColor ?? [0, 0, 0, 0], filename: A.filename || this.zB.CB() };
|
|
2061
2093
|
}
|
|
2062
|
-
|
|
2063
|
-
const e = this.
|
|
2064
|
-
return this.
|
|
2094
|
+
OB(A, t = {}) {
|
|
2095
|
+
const e = this.SB.uB(this.SB.rB(A.pipeline), A.grid), s = this.kB.xB(e, A.grid, A.font, this.LB(t));
|
|
2096
|
+
return this.kB.MB(s);
|
|
2065
2097
|
}
|
|
2066
|
-
|
|
2067
|
-
this.RB
|
|
2098
|
+
RB(A, t = {}) {
|
|
2099
|
+
this.zB.RB(this.OB(A, t), t.filename);
|
|
2068
2100
|
}
|
|
2069
2101
|
}
|
|
2070
2102
|
class OA extends O {
|
|
2071
|
-
|
|
2103
|
+
TB(A, t, e, s = " ") {
|
|
2072
2104
|
var r;
|
|
2073
2105
|
const i = [];
|
|
2074
2106
|
let B = 0;
|
|
2075
|
-
for (let
|
|
2107
|
+
for (let Q = 0; Q < t.rows; Q++) {
|
|
2076
2108
|
const o = [];
|
|
2077
|
-
for (let
|
|
2078
|
-
const
|
|
2109
|
+
for (let g = 0; g < t.cols; g++) {
|
|
2110
|
+
const a = 4 * B, h = this.nB(A.characterPixels, a), c = ((r = e.characters[h]) == null ? void 0 : r.character) || s;
|
|
2079
2111
|
o.push(c), B++;
|
|
2080
2112
|
}
|
|
2081
2113
|
i.push(o);
|
|
@@ -2083,8 +2115,8 @@ class OA extends O {
|
|
|
2083
2115
|
return i;
|
|
2084
2116
|
}
|
|
2085
2117
|
}
|
|
2086
|
-
class
|
|
2087
|
-
|
|
2118
|
+
class zA {
|
|
2119
|
+
UB(A, t) {
|
|
2088
2120
|
const e = [];
|
|
2089
2121
|
for (const i of A) {
|
|
2090
2122
|
let B = i.join("");
|
|
@@ -2096,56 +2128,56 @@ class WA {
|
|
|
2096
2128
|
return e.join(s);
|
|
2097
2129
|
}
|
|
2098
2130
|
}
|
|
2099
|
-
class
|
|
2100
|
-
|
|
2101
|
-
const e = this.
|
|
2102
|
-
this.
|
|
2131
|
+
class kA extends z {
|
|
2132
|
+
WB(A, t) {
|
|
2133
|
+
const e = this.HB(t);
|
|
2134
|
+
this.aB(A, e, "text/plain;charset=utf-8");
|
|
2103
2135
|
}
|
|
2104
|
-
|
|
2105
|
-
let t = this.
|
|
2106
|
-
return t === ".txt" || t.length <= 4 ? this.
|
|
2136
|
+
HB(A) {
|
|
2137
|
+
let t = this.lB(A);
|
|
2138
|
+
return t === ".txt" || t.length <= 4 ? this.CB() : t;
|
|
2107
2139
|
}
|
|
2108
2140
|
}
|
|
2109
|
-
class
|
|
2141
|
+
class H {
|
|
2110
2142
|
constructor() {
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
this.
|
|
2143
|
+
n(this, "SB");
|
|
2144
|
+
n(this, "kB");
|
|
2145
|
+
n(this, "zB");
|
|
2146
|
+
this.SB = new OA(), this.kB = new zA(), this.zB = new kA();
|
|
2115
2147
|
}
|
|
2116
|
-
|
|
2117
|
-
return { preserveTrailingSpaces: A.preserveTrailingSpaces ?? !1, lineEnding: A.lineEnding ?? "lf", emptyCharacter: A.emptyCharacter ?? " ", filename: A.filename || this.
|
|
2148
|
+
LB(A) {
|
|
2149
|
+
return { preserveTrailingSpaces: A.preserveTrailingSpaces ?? !1, lineEnding: A.lineEnding ?? "lf", emptyCharacter: A.emptyCharacter ?? " ", filename: A.filename || this.zB.CB() };
|
|
2118
2150
|
}
|
|
2119
|
-
|
|
2120
|
-
const e = this.
|
|
2121
|
-
return this.
|
|
2151
|
+
KB(A, t = {}) {
|
|
2152
|
+
const e = this.LB(t), s = this.SB.TB(this.SB.rB(A.pipeline), A.grid, A.font, e.emptyCharacter);
|
|
2153
|
+
return this.kB.UB(s, e);
|
|
2122
2154
|
}
|
|
2123
|
-
|
|
2124
|
-
this.
|
|
2155
|
+
WB(A, t = {}) {
|
|
2156
|
+
this.zB.WB(this.KB(A, t), t.filename);
|
|
2125
2157
|
}
|
|
2126
2158
|
}
|
|
2127
|
-
class
|
|
2128
|
-
|
|
2159
|
+
class NA extends O {
|
|
2160
|
+
JB(A, t = 1, e = "transparent") {
|
|
2129
2161
|
const s = A.canvas;
|
|
2130
2162
|
if (t === 1 && e === "transparent") return s;
|
|
2131
|
-
const i = document.createElement("canvas"), B = i.getContext("2d"), r = Math.round(s.width * t),
|
|
2132
|
-
return i.width = r, i.height =
|
|
2163
|
+
const i = document.createElement("canvas"), B = i.getContext("2d"), r = Math.round(s.width * t), Q = Math.round(s.height * t);
|
|
2164
|
+
return i.width = r, i.height = Q, e !== "transparent" && (B.fillStyle = e, B.fillRect(0, 0, r, Q)), B.imageSmoothingEnabled = !1, B.drawImage(s, 0, 0, s.width, s.height, 0, 0, r, Q), i;
|
|
2133
2165
|
}
|
|
2134
2166
|
}
|
|
2135
|
-
class
|
|
2136
|
-
|
|
2137
|
-
const e = this.
|
|
2167
|
+
class WA {
|
|
2168
|
+
VB(A, t) {
|
|
2169
|
+
const e = this.ZB(t.format);
|
|
2138
2170
|
return t.format === "png" ? A.toDataURL(e) : A.toDataURL(e, t.quality);
|
|
2139
2171
|
}
|
|
2140
|
-
async
|
|
2172
|
+
async NB(A, t) {
|
|
2141
2173
|
return new Promise((e, s) => {
|
|
2142
|
-
const i = this.
|
|
2174
|
+
const i = this.ZB(t.format), B = (r) => {
|
|
2143
2175
|
r ? e(r) : s(Error(`Failed to generate ${t.format.toUpperCase()} blob`));
|
|
2144
2176
|
};
|
|
2145
2177
|
t.format === "png" ? A.toBlob(B, i) : A.toBlob(B, i, t.quality);
|
|
2146
2178
|
});
|
|
2147
2179
|
}
|
|
2148
|
-
|
|
2180
|
+
ZB(A) {
|
|
2149
2181
|
switch (A) {
|
|
2150
2182
|
case "png":
|
|
2151
2183
|
return "image/png";
|
|
@@ -2158,12 +2190,12 @@ class HA {
|
|
|
2158
2190
|
}
|
|
2159
2191
|
}
|
|
2160
2192
|
}
|
|
2161
|
-
const
|
|
2162
|
-
class
|
|
2163
|
-
|
|
2164
|
-
this.
|
|
2193
|
+
const VA = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" }, K = { png: ".png", jpg: ".jpg", webp: ".webp" };
|
|
2194
|
+
class $A extends z {
|
|
2195
|
+
XB(A, t, e) {
|
|
2196
|
+
this.jB(A, this.lB(t) + K[e]);
|
|
2165
2197
|
}
|
|
2166
|
-
|
|
2198
|
+
jB(A, t) {
|
|
2167
2199
|
const e = URL.createObjectURL(A);
|
|
2168
2200
|
try {
|
|
2169
2201
|
const s = document.createElement("a");
|
|
@@ -2172,227 +2204,233 @@ class JA extends W {
|
|
|
2172
2204
|
URL.revokeObjectURL(e);
|
|
2173
2205
|
}
|
|
2174
2206
|
}
|
|
2175
|
-
|
|
2176
|
-
return A in
|
|
2207
|
+
qB(A) {
|
|
2208
|
+
return A in VA && A in K;
|
|
2177
2209
|
}
|
|
2178
2210
|
}
|
|
2179
|
-
class
|
|
2211
|
+
class HA {
|
|
2180
2212
|
constructor() {
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
this.
|
|
2213
|
+
n(this, "SB");
|
|
2214
|
+
n(this, "kB");
|
|
2215
|
+
n(this, "zB");
|
|
2216
|
+
this.SB = new NA(), this.kB = new WA(), this.zB = new $A();
|
|
2185
2217
|
}
|
|
2186
|
-
|
|
2187
|
-
return { format: A.format ?? "png", quality: A.quality ?? 1, scale: A.scale ?? 1, backgroundColor: A.backgroundColor ?? "transparent", filename: A.filename || this.
|
|
2218
|
+
LB(A) {
|
|
2219
|
+
return { format: A.format ?? "png", quality: A.quality ?? 1, scale: A.scale ?? 1, backgroundColor: A.backgroundColor ?? "transparent", filename: A.filename || this.zB.CB() };
|
|
2188
2220
|
}
|
|
2189
|
-
|
|
2190
|
-
if (!this.
|
|
2221
|
+
AQ(A) {
|
|
2222
|
+
if (!this.zB.qB(A.format)) throw Error(`Saving '${A.format}' files is not supported`);
|
|
2191
2223
|
if (A.quality < 0 || A.quality > 1) throw Error("Image quality must be between 0.0 and 1.0");
|
|
2192
2224
|
if (A.scale <= 0) throw Error("Scale factor must be greater than 0");
|
|
2193
2225
|
A.format === "jpg" && A.backgroundColor === "transparent" && (A.backgroundColor = "black");
|
|
2194
2226
|
}
|
|
2195
|
-
async
|
|
2196
|
-
if (t.scale === 1 && t.backgroundColor === "transparent") return await this.
|
|
2197
|
-
const e = this.
|
|
2198
|
-
return await this.
|
|
2227
|
+
async NB(A, t) {
|
|
2228
|
+
if (t.scale === 1 && t.backgroundColor === "transparent") return await this.kB.NB(A.canvas, t);
|
|
2229
|
+
const e = this.SB.JB(A, t.scale, t.backgroundColor);
|
|
2230
|
+
return await this.kB.NB(e, t);
|
|
2199
2231
|
}
|
|
2200
|
-
async
|
|
2201
|
-
const e = this.
|
|
2202
|
-
this.
|
|
2203
|
-
const s = await this.
|
|
2204
|
-
this.
|
|
2232
|
+
async XB(A, t = {}) {
|
|
2233
|
+
const e = this.LB(t);
|
|
2234
|
+
this.AQ(e);
|
|
2235
|
+
const s = await this.NB(A, e);
|
|
2236
|
+
this.zB.XB(s, e.filename, e.format);
|
|
2205
2237
|
}
|
|
2206
2238
|
}
|
|
2207
|
-
const
|
|
2208
|
-
|
|
2209
|
-
this.vA.FA(this.
|
|
2239
|
+
const KA = (E) => class extends E {
|
|
2240
|
+
tQ() {
|
|
2241
|
+
this.vA.FA(this.eQ);
|
|
2210
2242
|
}
|
|
2211
2243
|
toString(A = {}) {
|
|
2212
|
-
return this.
|
|
2244
|
+
return this.tQ(), new H().KB({ pipeline: this.sQ, grid: this.Ri, font: this.ps }, A);
|
|
2213
2245
|
}
|
|
2214
2246
|
saveStrings(A = {}) {
|
|
2215
|
-
this.
|
|
2247
|
+
this.tQ(), new H().WB({ pipeline: this.sQ, grid: this.Ri, font: this.ps }, A);
|
|
2216
2248
|
}
|
|
2217
2249
|
toSVG(A = {}) {
|
|
2218
|
-
return this.
|
|
2250
|
+
return this.tQ(), new $().OB({ pipeline: this.sQ, grid: this.Ri, font: this.ps }, A);
|
|
2219
2251
|
}
|
|
2220
2252
|
saveSVG(A = {}) {
|
|
2221
|
-
this.
|
|
2253
|
+
this.tQ(), new $().RB({ pipeline: this.sQ, grid: this.Ri, font: this.ps }, A);
|
|
2222
2254
|
}
|
|
2223
2255
|
async saveCanvas(A = {}) {
|
|
2224
|
-
await new
|
|
2256
|
+
await new HA().XB(this.Vs, A);
|
|
2225
2257
|
}
|
|
2226
|
-
},
|
|
2258
|
+
}, XA = (E) => class extends E {
|
|
2227
2259
|
async loadFont(A) {
|
|
2228
|
-
return this.
|
|
2229
|
-
const t = this.
|
|
2230
|
-
this.
|
|
2260
|
+
return this.ps.Us(A).then(() => {
|
|
2261
|
+
const t = this.ps.maxGlyphDimensions;
|
|
2262
|
+
this.Ri.Xs(t.width, t.height), this.sQ.resize(this.Ri.cols, this.Ri.rows), this.vA.ke(), this.iQ.Xi();
|
|
2231
2263
|
});
|
|
2232
2264
|
}
|
|
2233
2265
|
fontSize(A) {
|
|
2234
|
-
if (!M._(typeof A == "number" && A > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: A }) || this.
|
|
2235
|
-
this.
|
|
2236
|
-
const t = this.
|
|
2237
|
-
this.
|
|
2266
|
+
if (!M._(typeof A == "number" && A > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: A }) || this.ps.fontSize === A) return;
|
|
2267
|
+
this.ps.Ts(A);
|
|
2268
|
+
const t = this.ps.maxGlyphDimensions;
|
|
2269
|
+
this.Ri.Xs(t.width, t.height), this.sQ.resize(this.Ri.cols, this.Ri.rows), this.vA.ke(), this.iQ.Xi();
|
|
2238
2270
|
}
|
|
2239
|
-
|
|
2271
|
+
glyphColor(A) {
|
|
2272
|
+
return this.ps.fs(A);
|
|
2273
|
+
}
|
|
2274
|
+
glyphColors(A) {
|
|
2275
|
+
return this.ps.ds(A);
|
|
2276
|
+
}
|
|
2277
|
+
}, JA = (E) => class extends E {
|
|
2240
2278
|
get frameCount() {
|
|
2241
|
-
return this.
|
|
2279
|
+
return this.BQ.frameCount;
|
|
2242
2280
|
}
|
|
2243
2281
|
set frameCount(A) {
|
|
2244
|
-
this.
|
|
2282
|
+
this.BQ.frameCount = A;
|
|
2245
2283
|
}
|
|
2246
2284
|
frameRate(A) {
|
|
2247
|
-
return A === void 0 ? this.
|
|
2285
|
+
return A === void 0 ? this.BQ.currentFrameRate : this.BQ.frameRate(A, () => this.QQ());
|
|
2248
2286
|
}
|
|
2249
2287
|
noLoop() {
|
|
2250
|
-
this.
|
|
2288
|
+
this.BQ.pause();
|
|
2251
2289
|
}
|
|
2252
2290
|
loop() {
|
|
2253
|
-
this.
|
|
2291
|
+
this.BQ.resume(() => this.QQ());
|
|
2254
2292
|
}
|
|
2255
2293
|
redraw(A = 1) {
|
|
2256
|
-
if (M._(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.
|
|
2294
|
+
if (M._(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.QQ();
|
|
2257
2295
|
}
|
|
2258
2296
|
isLooping() {
|
|
2259
|
-
return this.
|
|
2297
|
+
return this.BQ.isLooping;
|
|
2260
2298
|
}
|
|
2261
2299
|
}, ZA = (E) => class extends E {
|
|
2262
2300
|
constructor(...A) {
|
|
2263
2301
|
super(...A);
|
|
2264
2302
|
}
|
|
2265
2303
|
mouseClicked(A) {
|
|
2266
|
-
this.
|
|
2304
|
+
this.iQ.iB(A);
|
|
2267
2305
|
}
|
|
2268
2306
|
mousePressed(A) {
|
|
2269
|
-
this.
|
|
2307
|
+
this.iQ.mi(A);
|
|
2270
2308
|
}
|
|
2271
2309
|
mouseReleased(A) {
|
|
2272
|
-
this.
|
|
2310
|
+
this.iQ.yi(A);
|
|
2273
2311
|
}
|
|
2274
2312
|
mouseMoved(A) {
|
|
2275
|
-
this.
|
|
2313
|
+
this.iQ.BB(A);
|
|
2276
2314
|
}
|
|
2277
2315
|
mouseScrolled(A) {
|
|
2278
|
-
this.
|
|
2316
|
+
this.iQ.QB(A);
|
|
2279
2317
|
}
|
|
2280
2318
|
get mouse() {
|
|
2281
|
-
return this.
|
|
2319
|
+
return this.iQ.EB();
|
|
2282
2320
|
}
|
|
2283
2321
|
}, jA = (E) => class extends E {
|
|
2284
2322
|
constructor(...A) {
|
|
2285
2323
|
super(...A);
|
|
2286
2324
|
}
|
|
2287
2325
|
keyPressed(A) {
|
|
2288
|
-
this.
|
|
2326
|
+
this.EQ.mi(A);
|
|
2289
2327
|
}
|
|
2290
2328
|
keyReleased(A) {
|
|
2291
|
-
this.
|
|
2329
|
+
this.EQ.yi(A);
|
|
2292
2330
|
}
|
|
2293
2331
|
isKeyPressed(A) {
|
|
2294
|
-
return this.
|
|
2332
|
+
return this.EQ.bi(A);
|
|
2295
2333
|
}
|
|
2296
2334
|
get lastKeyPressed() {
|
|
2297
|
-
return this.
|
|
2335
|
+
return this.EQ.Gi();
|
|
2298
2336
|
}
|
|
2299
2337
|
get lastKeyReleased() {
|
|
2300
|
-
return this.
|
|
2338
|
+
return this.EQ.xi();
|
|
2301
2339
|
}
|
|
2302
2340
|
get pressedKeys() {
|
|
2303
|
-
return this.
|
|
2341
|
+
return this.EQ.Mi();
|
|
2304
2342
|
}
|
|
2305
2343
|
get modifierState() {
|
|
2306
|
-
return this.
|
|
2344
|
+
return this.EQ.Yi();
|
|
2307
2345
|
}
|
|
2308
2346
|
};
|
|
2309
2347
|
class qA {
|
|
2310
2348
|
constructor() {
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
}
|
|
2322
|
-
|
|
2349
|
+
n(this, "vA");
|
|
2350
|
+
n(this, "ps");
|
|
2351
|
+
n(this, "Vs");
|
|
2352
|
+
n(this, "Ri");
|
|
2353
|
+
n(this, "BQ");
|
|
2354
|
+
n(this, "iQ");
|
|
2355
|
+
n(this, "EQ");
|
|
2356
|
+
n(this, "eQ");
|
|
2357
|
+
n(this, "sQ");
|
|
2358
|
+
n(this, "rQ");
|
|
2359
|
+
}
|
|
2360
|
+
QQ() {
|
|
2323
2361
|
}
|
|
2324
2362
|
}
|
|
2325
2363
|
class At extends function(t, ...e) {
|
|
2326
2364
|
return e.reduce((s, i) => i(s), t);
|
|
2327
|
-
}(qA,
|
|
2365
|
+
}(qA, SA, KA, XA, JA, ZA, jA) {
|
|
2328
2366
|
constructor(t = {}) {
|
|
2329
2367
|
super();
|
|
2330
|
-
|
|
2331
|
-
|
|
2368
|
+
n(this, "nQ", !1);
|
|
2369
|
+
n(this, "oQ", () => {
|
|
2332
2370
|
});
|
|
2333
|
-
|
|
2371
|
+
n(this, "gQ", () => {
|
|
2334
2372
|
});
|
|
2335
|
-
|
|
2373
|
+
n(this, "aQ", () => {
|
|
2336
2374
|
});
|
|
2337
|
-
|
|
2338
|
-
this.
|
|
2339
|
-
}
|
|
2340
|
-
async
|
|
2341
|
-
await this.
|
|
2342
|
-
const e = this.
|
|
2343
|
-
this.
|
|
2344
|
-
}
|
|
2345
|
-
|
|
2346
|
-
this.
|
|
2347
|
-
this.
|
|
2348
|
-
}, window.addEventListener("resize", this.
|
|
2349
|
-
this.
|
|
2375
|
+
n(this, "hQ");
|
|
2376
|
+
this.Vs = new TA(t), this.vA = new uA(this.Vs.ei()), this.ps = new bA(this.vA, t.fontSize ?? 16), this.BQ = new MA(t.frameRate ?? 60), this.iQ = new GA(this.Vs), this.EQ = new FA(), this.eQ = this.vA.YA(), this.rQ = this.vA.it(), this.cQ(t);
|
|
2377
|
+
}
|
|
2378
|
+
async cQ(t) {
|
|
2379
|
+
await this.ps.zs(t.fontSource);
|
|
2380
|
+
const e = this.ps.maxGlyphDimensions;
|
|
2381
|
+
this.Ri = new xA(this.Vs.canvas, e.width, e.height), this.iQ.zs(this.Ri), this.sQ = this.vA.Fe(this.Ri.cols, this.Ri.rows, 5), this.lQ(), this.oQ(), this.BQ.start(() => this.QQ());
|
|
2382
|
+
}
|
|
2383
|
+
lQ() {
|
|
2384
|
+
this.hQ = () => {
|
|
2385
|
+
this.aQ();
|
|
2386
|
+
}, window.addEventListener("resize", this.hQ), this.iQ.fi(), this.EQ.fi(), window.addEventListener("blur", () => {
|
|
2387
|
+
this.EQ.Fi();
|
|
2350
2388
|
});
|
|
2351
2389
|
}
|
|
2352
|
-
|
|
2353
|
-
if (this.
|
|
2354
|
-
this.
|
|
2390
|
+
QQ() {
|
|
2391
|
+
if (this.BQ.measureFrameRate(), this.BQ.incrementFrame(), this.nQ) return;
|
|
2392
|
+
this.sQ.begin(), this.vA.pe(this.eQ), this.gQ(), this.vA.FA(this.eQ), this.sQ.end();
|
|
2355
2393
|
const t = this.vA.state.canvasBackgroundColor;
|
|
2356
|
-
this.vA.
|
|
2394
|
+
this.vA.Wt(t[0], t[1], t[2], t[3]), this.vA.pe(this.rQ), this.rQ.VA({ a: this.ps.fontFramebuffer, b: [this.ps.textureColumns, this.ps.textureRows], c: this.sQ.textures[0], d: this.sQ.textures[1], e: this.sQ.textures[2], f: this.sQ.textures[4], g: this.sQ.textures[3], h: [this.Ri.cols, this.Ri.rows], i: [this.Ri.width, this.Ri.height], j: [this.Ri.offsetX, this.Ri.offsetY], k: this.Ri.width / this.Ri.height }), this.vA.be(this.Ri.offsetX, this.Ri.offsetY, this.Ri.width, this.Ri.height);
|
|
2357
2395
|
}
|
|
2358
2396
|
setup(t) {
|
|
2359
|
-
this.
|
|
2397
|
+
this.oQ = t;
|
|
2360
2398
|
}
|
|
2361
2399
|
draw(t) {
|
|
2362
|
-
this.
|
|
2400
|
+
this.gQ = t;
|
|
2363
2401
|
}
|
|
2364
2402
|
windowResized(t) {
|
|
2365
|
-
this.
|
|
2403
|
+
this.aQ = t;
|
|
2366
2404
|
}
|
|
2367
2405
|
resizeCanvas(t, e) {
|
|
2368
|
-
this.
|
|
2406
|
+
this.Vs.ti(t, e), this.Ri.iA(), this.sQ.resize(this.Ri.cols, this.Ri.rows), this.vA.ke(), this.iQ.Xi(), this.QQ();
|
|
2369
2407
|
}
|
|
2370
2408
|
destroy() {
|
|
2371
|
-
this.
|
|
2409
|
+
this.nQ || (this.BQ.stop(), window.removeEventListener("resize", this.hQ), this.iQ._i(), this.EQ._i(), this.ps.kA(), this.vA.kA(), this.nQ = !0);
|
|
2372
2410
|
}
|
|
2373
2411
|
get grid() {
|
|
2374
|
-
return this.
|
|
2412
|
+
return this.Ri;
|
|
2375
2413
|
}
|
|
2376
2414
|
get font() {
|
|
2377
|
-
return this.
|
|
2415
|
+
return this.ps;
|
|
2378
2416
|
}
|
|
2379
2417
|
get width() {
|
|
2380
|
-
return this.
|
|
2418
|
+
return this.Vs.width;
|
|
2381
2419
|
}
|
|
2382
2420
|
get height() {
|
|
2383
|
-
return this.
|
|
2421
|
+
return this.Vs.height;
|
|
2384
2422
|
}
|
|
2385
2423
|
get canvas() {
|
|
2386
|
-
return this.
|
|
2424
|
+
return this.Vs.canvas;
|
|
2387
2425
|
}
|
|
2388
2426
|
get isDisposed() {
|
|
2389
|
-
return this.
|
|
2427
|
+
return this.nQ;
|
|
2390
2428
|
}
|
|
2391
2429
|
get drawFramebuffer() {
|
|
2392
|
-
return this.
|
|
2430
|
+
return this.sQ;
|
|
2393
2431
|
}
|
|
2394
2432
|
}
|
|
2395
|
-
class
|
|
2433
|
+
class k {
|
|
2396
2434
|
constructor() {
|
|
2397
2435
|
}
|
|
2398
2436
|
static create(A = {}) {
|
|
@@ -2402,20 +2440,20 @@ class z {
|
|
|
2402
2440
|
M.v(A);
|
|
2403
2441
|
}
|
|
2404
2442
|
static get version() {
|
|
2405
|
-
return "0.2.1-beta.
|
|
2443
|
+
return "0.2.1-beta.4";
|
|
2406
2444
|
}
|
|
2407
2445
|
}
|
|
2408
|
-
const et = Object.freeze(Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })), st =
|
|
2446
|
+
const et = Object.freeze(Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })), st = k.create, it = k.setErrorLevel, Bt = k.version;
|
|
2409
2447
|
export {
|
|
2410
2448
|
TA as TextmodeCanvas,
|
|
2411
2449
|
tA as TextmodeErrorLevel,
|
|
2412
2450
|
bA as TextmodeFont,
|
|
2413
2451
|
U as TextmodeFramebuffer,
|
|
2414
|
-
|
|
2452
|
+
xA as TextmodeGrid,
|
|
2415
2453
|
At as Textmodifier,
|
|
2416
2454
|
st as create,
|
|
2417
2455
|
et as export,
|
|
2418
2456
|
it as setErrorLevel,
|
|
2419
|
-
|
|
2457
|
+
k as textmode,
|
|
2420
2458
|
Bt as version
|
|
2421
2459
|
};
|