textmode.js 0.2.0-beta.2 → 0.2.0-beta.4

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