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