textmode.js 0.1.9 → 0.2.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +4 -4
  2. package/dist/textmode.esm.js +1431 -1480
  3. package/dist/textmode.esm.min.js +1491 -1540
  4. package/dist/textmode.umd.js +19 -56
  5. package/dist/textmode.umd.min.js +19 -56
  6. package/dist/types/Textmode.d.ts +10 -38
  7. package/dist/types/export/base/DataExtractor.d.ts +3 -3
  8. package/dist/types/export/image/ImageExporter.d.ts +4 -11
  9. package/dist/types/export/image/types.d.ts +2 -3
  10. package/dist/types/export/svg/SVGExporter.d.ts +1 -1
  11. package/dist/types/export/svg/types.d.ts +1 -0
  12. package/dist/types/export/txt/TXTExporter.d.ts +1 -1
  13. package/dist/types/export/txt/types.d.ts +2 -2
  14. package/dist/types/index.d.ts +1 -7
  15. package/dist/types/rendering/index.d.ts +0 -1
  16. package/dist/types/rendering/webgl/DrawQueue.d.ts +26 -0
  17. package/dist/types/rendering/webgl/Framebuffer.d.ts +41 -40
  18. package/dist/types/rendering/webgl/InstanceBatch.d.ts +91 -0
  19. package/dist/types/rendering/webgl/InstanceData.d.ts +65 -0
  20. package/dist/types/rendering/webgl/RenderPipeline.d.ts +15 -0
  21. package/dist/types/rendering/webgl/RenderState.d.ts +76 -0
  22. package/dist/types/rendering/webgl/Renderer.d.ts +54 -81
  23. package/dist/types/rendering/webgl/Shader.d.ts +11 -16
  24. package/dist/types/rendering/webgl/VAOManager.d.ts +15 -0
  25. package/dist/types/rendering/webgl/geometries/Arc.d.ts +16 -0
  26. package/dist/types/rendering/webgl/geometries/BaseGeometry.d.ts +35 -29
  27. package/dist/types/rendering/webgl/geometries/BezierCurve.d.ts +22 -0
  28. package/dist/types/rendering/webgl/geometries/Ellipse.d.ts +20 -0
  29. package/dist/types/rendering/webgl/geometries/Line.d.ts +13 -4
  30. package/dist/types/rendering/webgl/geometries/Rectangle.d.ts +13 -8
  31. package/dist/types/rendering/webgl/geometries/Triangle.d.ts +20 -0
  32. package/dist/types/rendering/webgl/geometries/index.d.ts +4 -1
  33. package/dist/types/rendering/webgl/index.d.ts +17 -1
  34. package/dist/types/rendering/webgl/types/DrawCommand.d.ts +9 -0
  35. package/dist/types/rendering/webgl/types/GeometryTypes.d.ts +144 -0
  36. package/dist/types/rendering/webgl/types/RenderTypes.d.ts +12 -0
  37. package/dist/types/textmode/AnimationController.d.ts +81 -0
  38. package/dist/types/textmode/Canvas.d.ts +18 -19
  39. package/dist/types/textmode/Grid.d.ts +1 -34
  40. package/dist/types/textmode/Textmodifier.d.ts +36 -277
  41. package/dist/types/textmode/font/CharacterColorMapper.d.ts +3 -3
  42. package/dist/types/textmode/font/TextmodeFont.d.ts +6 -11
  43. package/dist/types/textmode/font/types.d.ts +1 -1
  44. package/dist/types/textmode/font/typr/types.d.ts +1 -1
  45. package/dist/types/textmode/font/utils/index.d.ts +0 -1
  46. package/dist/types/textmode/mixins/AnimationMixin.d.ts +120 -0
  47. package/dist/types/textmode/mixins/ExportMixin.d.ts +4 -6
  48. package/dist/types/textmode/mixins/FontMixin.d.ts +4 -10
  49. package/dist/types/textmode/mixins/RenderingMixin.d.ts +224 -246
  50. package/dist/types/textmode/mixins/TextmodifierMixin.d.ts +13 -4
  51. package/dist/types/textmode/mixins/index.d.ts +2 -2
  52. package/package.json +1 -1
  53. package/dist/types/ColorPalette.d.ts +0 -35
  54. package/dist/types/rendering/core/Framebuffer.d.ts +0 -140
  55. package/dist/types/rendering/core/Shader.d.ts +0 -59
  56. package/dist/types/rendering/core/index.d.ts +0 -2
  57. package/dist/types/textmode/ConversionPipeline.d.ts +0 -110
  58. package/dist/types/textmode/converters/BrightnessConverter.d.ts +0 -58
  59. package/dist/types/textmode/converters/Converter.d.ts +0 -69
  60. package/dist/types/textmode/converters/FeatureConverter.d.ts +0 -128
  61. package/dist/types/textmode/converters/index.d.ts +0 -3
  62. package/dist/types/textmode/font/utils/FontConstants.d.ts +0 -60
  63. package/dist/types/textmode/mixins/ConversionMixin.d.ts +0 -62
@@ -1,65 +1,28 @@
1
- var ZA=Object.defineProperty;var jA=(d,P,M)=>P in d?ZA(d,P,{enumerable:!0,configurable:!0,writable:!0,value:M}):d[P]=M;var n=(d,P,M)=>jA(d,typeof P!="symbol"?P+"":P,M);var A,t;A=this,t=function(d){class P extends Error{constructor(e,s={}){super(P.A(e,s)),this.name="TextmodeError"}static A(e,s){let r=e;if(s&&Object.keys(s).length>0){r+=`
1
+ var qA=Object.defineProperty;var At=(d,I,R)=>I in d?qA(d,I,{enumerable:!0,configurable:!0,writable:!0,value:R}):d[I]=R;var g=(d,I,R)=>At(d,typeof I!="symbol"?I+"":I,R);var A,t;A=this,t=function(d){class I extends Error{constructor(e,B={}){super(I.A(e,B)),this.name="TextmodeError"}static A(e,B){let r=e;if(B&&Object.keys(B).length>0){r+=`
2
2
 
3
- 📋 Context:`;for(const[i,B]of Object.entries(s))r+=`
4
- - ${i}: ${P.i(B)}`}return r+=`
3
+ 📋 Context:`;for(const[i,s]of Object.entries(B))r+=`
4
+ - ${i}: ${I.i(s)}`}return r+=`
5
5
 
6
6
  `,r+="↓".repeat(24)+`
7
- `,r}static i(e){if(e===null)return"null";if(e===void 0)return"undefined";if(typeof e=="string")return`"${e}"`;if(typeof e=="number"||typeof e=="boolean")return e+"";if(Array.isArray(e))return e.length===0?"[]":e.length<=5?`[${e.map(s=>P.i(s)).join(", ")}]`:`[${e.slice(0,3).map(s=>P.i(s)).join(", ")}, ... +${e.length-3} more]`;if(typeof e=="object"){const s=Object.keys(e);return s.length===0?"{}":s.length<=3?`{ ${s.map(r=>`${r}: ${P.i(e[r])}`).join(", ")} }`:`{ ${s.slice(0,2).map(r=>`${r}: ${P.i(e[r])}`).join(", ")}, ... +${s.length-2} more }`}return e+""}}var M=(Q=>(Q[Q.SILENT=0]="SILENT",Q[Q.WARNING=1]="WARNING",Q[Q.ERROR=2]="ERROR",Q[Q.THROW=3]="THROW",Q))(M||{});const T=class T{constructor(){n(this,"h",{globalLevel:3})}static l(){return T.o||(T.o=new T),T.o}D(e,s){const r="%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.",i="color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";switch(this.h.globalLevel){case 0:return!1;case 1:return console.group(r,i),console.warn(P.A(e,s)),console.groupEnd(),!1;case 2:return console.group(r,i),console.error(P.A(e,s)),console.groupEnd(),!1;default:throw new P(e,s)}}C(e,s,r){return!!e||(this.D(s,r),!1)}u(e){this.h.globalLevel=e}};n(T,"o",null);let H=T;const I=H.l(),j=new WeakMap;function O(Q,e){j.set(Q,e)}function W(Q){return j.get(Q)}class J{constructor(e,s=e,r={}){n(this,"P");n(this,"I");n(this,"h");n(this,"m",null);this.P=e,this.I=s,this.h={filter:"nearest",wrap:"clamp",format:"rgba",type:"unsigned_byte",...r}}get width(){return this.P}get height(){return this.I}get pixels(){return this.m}get options(){return{...this.h}}validateCoordinates(e,s,r=!0){return(e<0||s<0||e>=this.P||s>=this.I)&&r&&console.warn("The x and y values passed to Framebuffer.get are outside of its range and will be clamped."),[Math.max(0,Math.min(e,this.P-1)),Math.max(0,Math.min(s,this.I-1))]}validateRegion(e,s,r,i){return[e=Math.max(0,Math.min(e,this.P-1)),s=Math.max(0,Math.min(s,this.I-1)),r=Math.max(1,Math.min(r,this.P-e)),i=Math.max(1,Math.min(i,this.I-s))]}updateDimensions(e,s){this.P=e,this.I=s,this.m=null}}class X extends J{constructor(s,r,i=r,B={}){super(r,i,B);n(this,"p");n(this,"_");n(this,"v");n(this,"M",null);this.p=s,this.v=this.G(),this._=s.createFramebuffer(),this.F()}$(s){const{p:r}=this,i=r.getParameter(r.FRAMEBUFFER_BINDING);r.bindFramebuffer(r.FRAMEBUFFER,this._);try{return s()}finally{r.bindFramebuffer(r.FRAMEBUFFER,i)}}G(){const{p:s}=this,r=s.createTexture();s.bindTexture(s.TEXTURE_2D,r);const i=this.h.filter==="linear"?s.LINEAR:s.NEAREST,B=this.h.wrap==="repeat"?s.REPEAT:s.CLAMP_TO_EDGE;return s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,i),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,i),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,B),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,B),this.Y(),r}Y(){const{p:s}=this,r=this.h.type==="float"?s.FLOAT:s.UNSIGNED_BYTE;s.texImage2D(s.TEXTURE_2D,0,s.RGBA,this.P,this.I,0,s.RGBA,r,null)}F(){const{p:s}=this;s.bindFramebuffer(s.FRAMEBUFFER,this._),s.framebufferTexture2D(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,this.v,0),s.bindFramebuffer(s.FRAMEBUFFER,null)}S(s){const{p:r}=this;r.bindTexture(r.TEXTURE_2D,this.v),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,1),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,s),r.bindTexture(r.TEXTURE_2D,null)}updatePixels(s,r,i){const{p:B}=this;B.bindTexture(B.TEXTURE_2D,this.v),B.texImage2D(B.TEXTURE_2D,0,B.RGBA,r,i,0,B.RGBA,B.UNSIGNED_BYTE,s),B.bindTexture(B.TEXTURE_2D,null)}resize(s,r){const{p:i}=this;this.updateDimensions(s,r),i.bindTexture(i.TEXTURE_2D,this.v),this.Y(),i.bindTexture(i.TEXTURE_2D,null)}begin(){const{p:s}=this;this.M={framebuffer:s.getParameter(s.FRAMEBUFFER_BINDING),viewport:s.getParameter(s.VIEWPORT)},s.bindFramebuffer(s.FRAMEBUFFER,this._),s.viewport(0,0,this.P,this.I),O(s,[0,0,this.P,this.I])}end(){if(!this.M)return;const{p:s}=this;s.bindFramebuffer(s.FRAMEBUFFER,this.M.framebuffer),s.viewport(...this.M.viewport),O(s,this.M.viewport),this.M=null}loadPixels(){const{p:s}=this;this.m||(this.m=new Uint8Array(this.P*this.I*4)),this.$(()=>{s.readPixels(0,0,this.P,this.I,s.RGBA,s.UNSIGNED_BYTE,this.m)})}get(s,r,i,B){const{p:o}=this;if(s===void 0&&r===void 0){const E=new Uint8Array(this.P*this.I*4);return this.$(()=>(o.readPixels(0,0,this.P,this.I,o.RGBA,o.UNSIGNED_BYTE,E),E))}if(i===void 0&&B===void 0){const[E,g]=this.validateCoordinates(s,r),h=new Uint8Array(4);return this.$(()=>(o.readPixels(E,g,1,1,o.RGBA,o.UNSIGNED_BYTE,h),[h[0],h[1],h[2],h[3]]))}{const[E,g,h,a]=this.validateRegion(s,r,i,B),c=new Uint8Array(h*a*4);return this.$(()=>(o.readPixels(E,g,h,a,o.RGBA,o.UNSIGNED_BYTE,c),c))}}O(){this._&&this.p.deleteFramebuffer(this._),this.v&&this.p.deleteTexture(this.v)}get framebuffer(){return this._}get texture(){return this.v}}class K{constructor(){n(this,"U",!1)}get isReady(){return this.U}setUniforms(e){for(const[s,r]of Object.entries(e))this.setUniform(s,r)}}class x extends K{constructor(s,r,i){super();n(this,"p");n(this,"R");n(this,"k",new Map);n(this,"V",new Map);n(this,"H",0);n(this,"L");this.p=s,this.R=this.J(r,i),this.L=s.getParameter(s.MAX_TEXTURE_IMAGE_UNITS),this.j(),this.U=!0}static fromSource(s,r){return new x(s,r.vertex,r.fragment)}j(){const s=this.p.getProgramParameter(this.R,this.p.ACTIVE_UNIFORMS);for(let r=0;r<s;r++){const i=this.p.getActiveUniform(this.R,r);if(i){const B=this.p.getUniformLocation(this.R,i.name);B&&(this.k.set(i.name,B),this.V.set(i.name,i.type))}}}J(s,r){const i=this.K(this.p.VERTEX_SHADER,s),B=this.K(this.p.FRAGMENT_SHADER,r),o=this.p.createProgram();if(this.p.attachShader(o,i),this.p.attachShader(o,B),this.p.linkProgram(o),!this.p.getProgramParameter(o,this.p.LINK_STATUS)){const E=this.p.getProgramInfoLog(o);throw Error("Shader program link error: "+E)}return this.p.deleteShader(i),this.p.deleteShader(B),o}K(s,r){const i=this.p.createShader(s);if(this.p.shaderSource(i,r),this.p.compileShader(i),!this.p.getShaderParameter(i,this.p.COMPILE_STATUS)){const B=this.p.getShaderInfoLog(i);throw this.p.deleteShader(i),Error("Shader compilation error: "+B)}return i}W(){this.p.useProgram(this.R),this.N()}N(){this.H=0}setUniform(s,r){const i=this.k.get(s);if(i)if(typeof r=="number")this.Z(s)?this.p.uniform1i(i,Math.floor(r)):this.p.uniform1f(i,r);else if(typeof r=="boolean")this.p.uniform1i(i,r?1:0);else if(Array.isArray(r))switch(r.length){case 2:this.p.uniform2f(i,r[0],r[1]);break;case 3:this.p.uniform3f(i,r[0],r[1],r[2]);break;case 4:this.p.uniform4f(i,r[0],r[1],r[2],r[3]);break;default:console.warn(`Unsupported array length ${r.length} for uniform '${s}'`)}else if(r instanceof WebGLTexture){const B=this.X();this.p.uniform1i(i,B),this.p.activeTexture(this.p.TEXTURE0+B),this.p.bindTexture(this.p.TEXTURE_2D,r)}else if(r instanceof X){const B=this.X();this.p.uniform1i(i,B),this.p.activeTexture(this.p.TEXTURE0+B),this.p.bindTexture(this.p.TEXTURE_2D,r.texture)}else if(typeof r=="object"&&"texture"in r){const B=this.X();this.p.uniform1i(i,B),this.p.activeTexture(this.p.TEXTURE0+B),this.p.bindTexture(this.p.TEXTURE_2D,r.texture)}else console.warn(`Unsupported uniform type for '${s}':`,typeof r)}X(){return this.H>=this.L&&console.warn(`Exceeded maximum texture units (${this.L}). Texture may not render correctly.`),this.H++}Z(s){const r=this.V.get(s);return!!r&&(r===this.p.INT||r===this.p.INT_VEC2||r===this.p.INT_VEC3||r===this.p.INT_VEC4||r===this.p.SAMPLER_2D||r===this.p.SAMPLER_CUBE)}get glProgram(){return this.R}O(){this.p.deleteProgram(this.R)}}class q{constructor(e){n(this,"p");n(this,"q",null);n(this,"AA",16);n(this,"tA",new Map);this.p=e}eA(){if(this.q)return;const e=this.p;this.q=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,this.q)}sA(){const e=this.p,s=e.getParameter(e.CURRENT_PROGRAM);let r=this.tA.get(s);return r||(r={a_position:e.getAttribLocation(s,"a_position"),a_texCoord:e.getAttribLocation(s,"a_texCoord")},this.tA.set(s,r)),e.enableVertexAttribArray(r.a_position),e.vertexAttribPointer(r.a_position,2,e.FLOAT,!1,this.AA,0),e.enableVertexAttribArray(r.a_texCoord),e.vertexAttribPointer(r.a_texCoord,2,e.FLOAT,!1,this.AA,8),{positionLoc:r.a_position,texLoc:r.a_texCoord}}rA(e,s){const r=this.p;r.disableVertexAttribArray(e),r.disableVertexAttribArray(s)}BA(e,s){const r=this.p,i=W(r)||[0,0,r.canvas.width,r.canvas.height];return{nx:e/i[2]*2-1,ny:1-s/i[3]*2}}iA(e,s,r,i){const B=this.p;this.eA(),B.bindBuffer(B.ARRAY_BUFFER,this.q);const o=new Float32Array([e,i,0,0,r,i,1,0,e,s,0,1,e,s,0,1,r,i,1,0,r,s,1,1]);B.bufferData(B.ARRAY_BUFFER,o,B.DYNAMIC_DRAW)}O(){this.q&&this.p.deleteBuffer(this.q)}}class gA extends q{constructor(e){super(e)}QA(e,s,r,i){const B=this.BA(e,s),o=this.BA(e+r,s+i);this.iA(B.nx,B.ny,o.nx,o.ny);const E=this.sA();this.p.drawArrays(this.p.TRIANGLES,0,6),this.rA(E.positionLoc,E.texLoc)}EA(e,s,r,i,B){this.QA(e,s,r,B),this.QA(e+r-B,s,B,i),this.QA(e,s+i-B,r,B),this.QA(e,s,B,i)}}class hA extends q{constructor(e){super(e)}oA(e,s,r,i,B){const o=r-e,E=i-s,g=Math.hypot(o,E);if(g===0){const a=B/2,c=this.BA(e-a,s-a),l=this.BA(e+a,s+a);this.iA(c.nx,c.ny,l.nx,l.ny)}else{const a=-E/g,c=o/g,l=B/2,D=e+a*l,C=s+c*l,u=e-a*l,p=s-c*l,f=r+a*l,w=i+c*l,b=r-a*l,y=i-c*l,Y=this.BA(D,C),_=this.BA(u,p),F=this.BA(f,w),nA=this.BA(b,y),U=this.p;this.eA(),U.bindBuffer(U.ARRAY_BUFFER,this.q);const zA=new Float32Array([Y.nx,Y.ny,0,0,_.nx,_.ny,0,1,F.nx,F.ny,1,0,_.nx,_.ny,0,1,nA.nx,nA.ny,1,1,F.nx,F.ny,1,0]);U.bufferData(U.ARRAY_BUFFER,zA,U.DYNAMIC_DRAW)}const h=this.sA();this.p.drawArrays(this.p.TRIANGLES,0,6),this.rA(h.positionLoc,h.texLoc)}}var S="attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;uniform float u_rotation;uniform vec2 u_center;uniform float u_aspectRatio;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){v_uv=a_texCoord;vec2 pos=a_position;pos-=u_center;pos.x*=u_aspectRatio;pos=rotate2D(-u_rotation)*pos;pos.x/=u_aspectRatio;pos+=u_center;gl_Position=vec4(pos,0.0,1.0);}";class aA{constructor(e){n(this,"p");n(this,"gA");n(this,"nA");n(this,"aA",null);n(this,"hA");n(this,"lA");n(this,"cA",[1,1,1,1]);n(this,"DA",!0);n(this,"CA",[0,0,0,1]);n(this,"uA",1);n(this,"PA",!0);n(this,"IA",0);n(this,"fA",[]);this.p=e,this.gA=new x(this.p,S,"precision lowp float;uniform sampler2D u_texture;varying vec2 v_uv;void main(){gl_FragColor=texture2D(u_texture,v_uv);}"),this.nA=new x(this.p,S,"precision lowp float;uniform vec4 u_color;void main(){gl_FragColor=u_color;}"),this.hA=new gA(this.p),this.lA=new hA(this.p),this.p.enable(this.p.BLEND),this.p.blendEquation(this.p.FUNC_ADD),this.p.blendFunc(this.p.ONE,this.p.ONE_MINUS_SRC_ALPHA),O(this.p,[0,0,this.p.canvas.width,this.p.canvas.height])}wA(e){this.aA!==e&&(this.aA=e,e.W())}dA(e,s,r,i){if(this.DA=!0,s===void 0&&r===void 0&&i===void 0){const B=e/255;this.cA=[B,B,B,1]}else if(r!==void 0&&i===void 0)this.cA=[e/255,s/255,r/255,1];else{if(r===void 0||i===void 0)throw Error("Invalid fill parameters. Use fill(gray), fill(r,g,b), or fill(r,g,b,a)");this.cA=[e/255,s/255,r/255,i/255]}}mA(e,s,r,i){if(this.PA=!0,s===void 0&&r===void 0&&i===void 0){const B=e/255;this.CA=[B,B,B,1]}else if(r!==void 0&&i===void 0)this.CA=[e/255,s/255,r/255,1];else{if(r===void 0||i===void 0)throw Error("Invalid stroke parameters. Use stroke(gray), stroke(r,g,b), or stroke(r,g,b,a)");this.CA=[e/255,s/255,r/255,i/255]}}pA(e){if(e<0)throw Error("Stroke weight must be non-negative");this.uA=e}_A(){this.PA=!1}vA(){this.DA=!1}bA(e){this.IA=e}xA(){this.fA.push({fillColor:[...this.cA],fillMode:this.DA,strokeColor:[...this.CA],strokeWeight:this.uA,strokeMode:this.PA,rotation:this.IA})}yA(){const e=this.fA.pop();e?(this.cA=e.fillColor,this.DA=e.fillMode,this.CA=e.strokeColor,this.uA=e.strokeWeight,this.PA=e.strokeMode,this.IA=e.rotation):console.warn("pop() called without matching push()")}MA(){this.aA=null,this.fA=[],this.IA=0}GA(e){const s=e.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/.*$/gm,"").trim().match(/^#version\s+(\d+)\s+(es)?/i);return!!s&&parseInt(s[1],10)>=300}FA(e,s){return new x(this.p,e,s)}$A(e){const s=this.GA(e)?`#version 300 es
8
- in vec2 a_position;in vec2 a_texCoord;out vec2 v_uv;uniform float u_rotation;uniform vec2 u_center;uniform float u_aspectRatio;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){v_uv=a_texCoord;vec2 pos=a_position;pos-=u_center;pos.x*=u_aspectRatio;pos=rotate2D(-u_rotation)*pos;pos.x/=u_aspectRatio;pos+=u_center;gl_Position=vec4(pos,0.0,1.0);}`:S;return new x(this.p,s,e)}YA(e,s){this.aA.setUniform(e,s)}TA(e,s,r,i){if(this.aA!==null){const{centerX:c,centerY:l,radians:D,aspectRatio:C}=this.SA(e,s,r,i);return this.YA("u_rotation",D),this.YA("u_center",[c,l]),this.YA("u_aspectRatio",C),this.hA.QA(e,s,r,i),void(this.aA=null)}const B=this.nA;let o=0,E=0,g=0,h=1;const a=this.SA(e,s,r,i);o=a.centerX,E=a.centerY,g=a.radians,h=a.aspectRatio,this.DA&&(this.wA(B),this.YA("u_color",this.cA),this.YA("u_rotation",g),this.YA("u_center",[o,E]),this.YA("u_aspectRatio",h),this.hA.QA(e,s,r,i)),this.PA&&this.uA>0&&(this.wA(B),this.YA("u_color",this.CA),this.YA("u_rotation",g),this.YA("u_center",[o,E]),this.YA("u_aspectRatio",h),this.hA.EA(e,s,r,i,this.uA)),this.aA=null}OA(e,s,r,i){if(this.aA!==null){const u=(e+r)/2,p=(s+i)/2,f=Math.abs(r-e)||1,w=Math.abs(i-s)||1,{centerX:b,centerY:y,radians:Y,aspectRatio:_}=this.SA(u-f/2,p-w/2,f,w);this.YA("u_rotation",Y),this.YA("u_center",[b,y]),this.YA("u_aspectRatio",_);const F=this.uA>0?this.uA:1;return this.lA.oA(e,s,r,i,F),void(this.aA=null)}if(!this.PA||this.uA<=0)return;const B=this.nA,o=(e+r)/2,E=(s+i)/2,g=Math.abs(r-e)||1,h=Math.abs(i-s)||1,a=this.IA!==0;let c=0,l=0,D=0,C=1;if(a){const u=this.SA(o-g/2,E-h/2,g,h);c=u.centerX,l=u.centerY,D=u.radians,C=u.aspectRatio}this.wA(B),this.YA("u_color",this.CA),a&&(this.YA("u_rotation",D),this.YA("u_center",[c,l]),this.YA("u_aspectRatio",C)),this.lA.oA(e,s,r,i,this.uA)}SA(e,s,r,i){const B=W(this.p)||[0,0,this.p.canvas.width,this.p.canvas.height],o=B[2],E=B[3],g=o/E;return{centerX:(e+r/2)/o*2-1,centerY:1-(s+i/2)/E*2,radians:this.IA*Math.PI/180,aspectRatio:g}}UA(e,s,r={}){return new X(this.p,e,s,r)}RA(e,s=e,r=e,i=255){this.kA(e/255,s/255,r/255,i/255)}kA(e=0,s=0,r=0,i=0){this.p.clearColor(e,s,r,i),this.p.clear(this.p.COLOR_BUFFER_BIT)}VA(){this.p.viewport(0,0,this.p.canvas.width,this.p.canvas.height),O(this.p,[0,0,this.p.canvas.width,this.p.canvas.height])}get context(){return this.p}O(){this.gA.O(),this.nA.O(),this.hA.O(),this.lA.O()}HA(e,s,r,i,B){const o=this.p,E=i??e.width,g=B??e.height;this.wA(this.gA),this.YA("u_texture",e);const h=this.SA(s,r,E,g);this.YA("u_rotation",h.radians),this.YA("u_center",[h.centerX,h.centerY]),this.YA("u_aspectRatio",h.aspectRatio),this.hA.QA(s,r,E,g),o.bindTexture(o.TEXTURE_2D,null),this.aA=null}}const m={readShort:(Q,e)=>(m.t.uint16[0]=Q[e]<<8|Q[e+1],m.t.int16[0]),readUshort:(Q,e)=>Q[e]<<8|Q[e+1],readUshorts(Q,e,s){const r=[];for(let i=0;i<s;i++)r.push(m.readUshort(Q,e+2*i));return r},readUint(Q,e){const s=m.t.uint8;return s[3]=Q[e],s[2]=Q[e+1],s[1]=Q[e+2],s[0]=Q[e+3],m.t.uint32[0]},readASCII(Q,e,s){let r="";for(let i=0;i<s;i++)r+=String.fromCharCode(Q[e+i]);return r},t:(()=>{const Q=new ArrayBuffer(8);return{uint8:new Uint8Array(Q),int16:new Int16Array(Q),uint16:new Uint16Array(Q),uint32:new Uint32Array(Q)}})()},lA={parseTab(Q,e,s){const r={tables:[],ids:{},off:e};Q=new Uint8Array(Q.buffer,e,s),e=0;const i=m,B=i.readUshort,o=B(Q,e+=2);e+=2;const E=[];for(let g=0;g<o;g++){const h=B(Q,e),a=B(Q,e+=2);e+=2;const c=i.readUint(Q,e);e+=4;const l=`p${h}e${a}`;let D=E.indexOf(c);if(D===-1){let C;D=r.tables.length,E.push(c);const u=B(Q,c);C=u===4?this.parse4(Q,c):u===12?this.parse12(Q,c):{format:u},r.tables.push(C)}r.ids[l]!=null&&console.warn("Multiple tables for one platform+encoding: "+l),r.ids[l]=D}return r},parse4(Q,e){const s=m,r=s.readUshort,i=s.readUshorts,B=e,o=r(Q,e+=2);e+=2;const E=r(Q,e+=2)>>>1,g={format:4,searchRange:r(Q,e+=2),entrySelector:0,rangeShift:0,endCount:[],startCount:[],idDelta:[],idRangeOffset:[],glyphIdArray:[]};e+=2,g.entrySelector=r(Q,e),e+=2,g.rangeShift=r(Q,e),e+=2,g.endCount=i(Q,e,E),e+=2*E,e+=2,g.startCount=i(Q,e,E),e+=2*E;for(let h=0;h<E;h++)g.idDelta.push(s.readShort(Q,e)),e+=2;return g.idRangeOffset=i(Q,e,E),e+=2*E,g.glyphIdArray=i(Q,e,B+o-e>>1),g},parse12(Q,e){const s=m.readUint;s(Q,e+=4),s(Q,e+=4);const r=s(Q,e+=4);e+=4;const i=new Uint32Array(3*r);for(let B=0;B<3*r;B+=3)i[B]=s(Q,e+(B<<2)),i[B+1]=s(Q,e+(B<<2)+4),i[B+2]=s(Q,e+(B<<2)+8);return{format:12,groups:i}}},cA={parseTab(Q,e,s){const r=m;e+=18;const i=r.readUshort(Q,e);e+=2,e+=16;const B=r.readShort(Q,e);e+=2;const o=r.readShort(Q,e);e+=2;const E=r.readShort(Q,e);e+=2;const g=r.readShort(Q,e);return e+=2,e+=6,{unitsPerEm:i,xMin:B,yMin:o,xMax:E,yMax:g,indexToLocFormat:r.readShort(Q,e)}}},uA={parseTab(Q,e,s){const r=m;e+=4;const i=["ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","res0","res1","res2","res3","metricDataFormat","numberOfHMetrics"],B={};for(let o=0;o<i.length;o++){const E=i[o],g=E==="advanceWidthMax"||E==="numberOfHMetrics"?r.readUshort:r.readShort;B[E]=g(Q,e+2*o)}return B}},CA={parseTab(Q,e,s,r){if(!r)throw Error("Font object required for hmtx parsing");const i=m,B=[],o=[],E=r.maxp.numGlyphs,g=r.hhea.numberOfHMetrics;let h=0,a=0,c=0;for(;c<g;)h=i.readUshort(Q,e+(c<<2)),a=i.readShort(Q,e+(c<<2)+2),B.push(h),o.push(a),c++;for(;c<E;)B.push(h),o.push(a),c++;return{aWidth:B,lsBearing:o}}},AA={cmap:lA,head:cA,hhea:uA,maxp:{parseTab(Q,e,s){const r=m;return r.readUint(Q,e),e+=4,{numGlyphs:r.readUshort(Q,e)}}},hmtx:CA,loca:{parseTab(Q,e,s,r){if(!r)throw Error("Font object required for loca parsing");const i=m,B=[],o=r.head.indexToLocFormat,E=r.maxp.numGlyphs+1;if(o===0)for(let g=0;g<E;g++)B.push(i.readUshort(Q,e+(g<<1))<<1);else if(o===1)for(let g=0;g<E;g++)B.push(i.readUint(Q,e+(g<<2)));return B}},glyf:{parseTab(Q,e,s,r){if(!r)throw Error("Font object required for glyf parsing");const i=[],B=r.maxp.numGlyphs;for(let o=0;o<B;o++)i.push(null);return i},zA(Q,e){const s=m,r=Q.LA,i=Q.loca;if(i[e]===i[e+1])return null;const B=v.findTable(r,"glyf",Q.JA);if(!B)return null;let o=B[0]+i[e];const E={};if(E.noc=s.readShort(r,o),o+=2,E.xMin=s.readShort(r,o),o+=2,E.yMin=s.readShort(r,o),o+=2,E.xMax=s.readShort(r,o),o+=2,E.yMax=s.readShort(r,o),o+=2,E.xMin>=E.xMax||E.yMin>=E.yMax)return null;if(E.noc>0){E.endPts=[];for(let l=0;l<E.noc;l++)E.endPts.push(s.readUshort(r,o)),o+=2;const g=s.readUshort(r,o);if(o+=2,r.length-o<g)return null;o+=g;const h=E.endPts[E.noc-1]+1;E.flags=[];for(let l=0;l<h;l++){const D=r[o];if(o++,E.flags.push(D),8&D){const C=r[o];o++;for(let u=0;u<C;u++)E.flags.push(D),l++}}E.xs=[];for(let l=0;l<h;l++){const D=E.flags[l],C=!!(16&D);2&D?(E.xs.push(C?r[o]:-r[o]),o++):C?E.xs.push(0):(E.xs.push(s.readShort(r,o)),o+=2)}E.ys=[];for(let l=0;l<h;l++){const D=E.flags[l],C=!!(32&D);4&D?(E.ys.push(C?r[o]:-r[o]),o++):C?E.ys.push(0):(E.ys.push(s.readShort(r,o)),o+=2)}let a=0,c=0;for(let l=0;l<h;l++)a+=E.xs[l],c+=E.ys[l],E.xs[l]=a,E.ys[l]=c}else E.parts=[],E.endPts=[],E.flags=[],E.xs=[],E.ys=[];return E}}},v={parse:Q=>[((e,s,r,i)=>{const B=AA,o={LA:e,jA:s,JA:r};for(const E in B){const g=E,h=v.findTable(e,g,r);if(h){const[a,c]=h;let l=i[a];l==null&&(l=B[g].parseTab(e,a,c,o),i[a]=l),o[g]=l}}return o})(new Uint8Array(Q),0,0,{})],findTable(Q,e,s){const r=m,i=r.readUshort(Q,s+4);let B=s+12;for(let o=0;o<i;o++){const E=r.readASCII(Q,B,4);r.readUint(Q,B+4);const g=r.readUint(Q,B+8),h=r.readUint(Q,B+12);if(E===e)return[g,h];B+=16}return null},T:AA,B:m};class k{constructor(){n(this,"KA",new Map);n(this,"WA",new Map)}NA(e,s){const r=`${this.ZA(e)}_${s}`;if(this.KA.has(r))return this.KA.get(r);const i=e.cmap;if(!i||!i.tables)return this.KA.set(r,0),0;let B=0;for(const o of i.tables)if(o.format===4?B=this.XA(s,o):o.format===12&&(B=this.qA(s,o)),B>0)break;return this.KA.set(r,B),B}At(e,s){const r=s.codePointAt(0);return r===void 0?0:this.NA(e,r)}tt(e,s){const r=e.hmtx;return r&&r.aWidth&&r.aWidth.length!==0?s<r.aWidth.length?r.aWidth[s]:r.aWidth[r.aWidth.length-1]:0}et(e,s){const r=s/e.head.unitsPerEm,i=e.hhea.ascender*r,B=e.hhea.descender*r,o=e.hhea.lineGap*r;return{ascender:i,descender:B,lineGap:o,lineHeight:i-B+o,unitsPerEm:e.head.unitsPerEm,scale:r}}st(){this.KA.clear(),this.WA.clear()}ZA(e){return`${e.JA}_${e.LA.length}`}XA(e,s){const r=s.endCount.length;let i=-1;for(let B=0;B<r;B++)if(e<=s.endCount[B]){i=B;break}if(i===-1||e<s.startCount[i])return 0;if(s.idRangeOffset[i]===0)return e+s.idDelta[i]&65535;{const B=s.idRangeOffset[i]/2+(e-s.startCount[i])-(r-i);if(B>=0&&B<s.glyphIdArray.length){const o=s.glyphIdArray[B];return o===0?0:o+s.idDelta[i]&65535}}return 0}qA(e,s){const r=s.groups.length/3;for(let i=0;i<r;i++){const B=s.groups[3*i],o=s.groups[3*i+1],E=s.groups[3*i+2];if(e>=B&&e<=o)return E+(e-B)}return 0}}class DA{constructor(e){n(this,"rt");this.rt=e}Bt(e){var r;const s=[];return(r=e==null?void 0:e.cmap)!=null&&r.tables?(e.cmap.tables.forEach(i=>{if(i.format===4){const B=this.it(i);s.push(...B)}else if(i.format===12){const B=this.Qt(i);s.push(...B)}}),[...new Set(s)]):[]}Et(e,s){return this.rt.At(e,s)>0}ot(e,s){for(const r of s)if(!this.Et(e,r))return!1;return!0}gt(e,s){return s.filter(r=>this.Et(e,r))}nt(e){return e.filter(s=>this.ht(s))}it(e){const s=[];if(!(e.startCount&&e.endCount&&e.idRangeOffset&&e.idDelta))return s;for(let r=0;r<e.startCount.length;r++){const i=e.startCount[r],B=e.endCount[r];if(i!==65535||B!==65535){for(let o=i;o<=B;o++)if(this.lt(e,o,r)>0)try{const E=String.fromCodePoint(o);s.push(E)}catch{}}}return s}Qt(e){const s=[];if(!e.groups)return s;for(let r=0;r<e.groups.length;r+=3){const i=e.groups[r],B=e.groups[r+1],o=e.groups[r+2];for(let E=i;E<=B;E++)if(o+(E-i)>0)try{const g=String.fromCodePoint(E);s.push(g)}catch{}}return s}lt(e,s,r){if(e.idRangeOffset[r]===0)return s+e.idDelta[r]&65535;{const i=e.idRangeOffset[r]/2+(s-e.startCount[r])-(e.startCount.length-r);if(i>=0&&e.glyphIdArray&&i<e.glyphIdArray.length){const B=e.glyphIdArray[i];if(B!==0)return B+e.idDelta[r]&65535}}return 0}ht(e){const s=e.codePointAt(0)||0;return!(s>=0&&s<=31&&s!==9&&s!==10&&s!==13||s>=127&&s<=159)}}class PA{constructor(){n(this,"ct");const e=new k;this.ct=new DA(e)}extractCharacters(e){return this.ct.Bt(e)}filterProblematicCharacters(e){return this.ct.nt(e)}characterExists(e,s){return this.ct.Et(e,s)}allCharactersExist(e,s){return this.ct.ot(e,s)}}class dA{constructor(e){n(this,"Dt");n(this,"Ct");n(this,"ut");n(this,"Pt");this.ut=e,this.Pt=new k,this.Dt=document.createElement("canvas"),this.Ct=this.Dt.getContext("2d",{willReadFrequently:!0,alpha:!1})}createTextureAtlas(e,s,r,i){const B=e.length,o=Math.ceil(Math.sqrt(B)),E=Math.ceil(B/o),g=s.width*o,h=s.height*E,a=typeof i=="object"?i:null;this.It(g,h),this.ft(e,s,o,r,a);const c=this.ut.UA(g,h,{filter:"nearest"});return c.S(this.Dt),{framebuffer:c,columns:o,rows:E}}It(e,s){this.Dt.width=e,this.Dt.height=s,this.Dt.style.width=e+"px",this.Dt.style.height=e+"px",this.Ct.imageSmoothingEnabled=!1,this.Dt.style.imageRendering="pixelated",this.Ct.fillStyle="black",this.Ct.fillRect(0,0,e,s),this.Ct.textBaseline="top",this.Ct.textAlign="left",this.Ct.fillStyle="white"}ft(e,s,r,i,B){const o=i/B.head.unitsPerEm;for(let E=0;E<e.length;E++){const g=E%r,h=Math.floor(E/r),a=e[E].character,c=this.wt(B,a);if(!c)continue;const l=a.codePointAt(0)||0,D=this.Pt.NA(B,l),C=this.dt(B,D)*o,u=g*s.width,p=h*s.height,f=u+.5*s.width,w=p+.5*s.height,b=Math.round(f-.5*s.width),y=Math.round(w-.5*i),Y=b+.5*(s.width-C),_=y+B.hhea.ascender*o;this._t(c,Y,_,o)}}wt(e,s){const r=s.codePointAt(0)||0,i=this.Pt.NA(e,r);if(i===0)return null;if(e.glyf&&e.glyf[i]!==null)return e.glyf[i];if(v&&v.T&&v.T.glyf){const B=v.T.glyf.zA(e,i);return e.glyf&&B&&(e.glyf[i]=B),B}return null}dt(e,s){const r=e.hmtx;return r&&r.aWidth?s<r.aWidth.length?r.aWidth[s]:r.aWidth[r.aWidth.length-1]:0}_t(e,s,r,i){if(!e||!e.xs||e.noc===0)return;const{xs:B,ys:o,endPts:E,flags:g}=e;if(!(B&&o&&E&&g))return;this.Ct.beginPath();let h=0;for(let a=0;a<E.length;a++){const c=E[a];if(!(c<h)){if(c>=h){const l=s+B[h]*i,D=r-o[h]*i;this.Ct.moveTo(l,D);let C=h+1;for(;C<=c;)if(1&g[C]){const u=s+B[C]*i,p=r-o[C]*i;this.Ct.lineTo(u,p),C++}else{const u=s+B[C]*i,p=r-o[C]*i;let f=C+1>c?h:C+1;if(1&g[f]){const w=s+B[f]*i,b=r-o[f]*i;this.Ct.quadraticCurveTo(u,p,w,b),C=f+1}else{const w=(u+(s+B[f]*i))/2,b=(p+(r-o[f]*i))/2;this.Ct.quadraticCurveTo(u,p,w,b),C=f}}this.Ct.closePath()}h=c+1}}this.Ct.fill()}}class IA{constructor(){n(this,"rt");this.rt=new k}calculateMaxGlyphDimensions(e,s,r){let i=0;const B=this.rt.et(r,s),o=B.lineHeight;for(const E of e){const g=this.rt.At(r,E);if(g===0)continue;const h=this.rt.tt(r,g)*B.scale;i=Math.max(i,h)}return{width:Math.ceil(i),height:Math.ceil(o)}}getCharacterAdvanceWidth(e,s,r){const i=this.rt.et(r,s),B=this.rt.At(r,e);return this.rt.tt(r,B)*i.scale}getFontMetrics(e,s){return this.rt.et(s,e)}st(){this.rt.st()}}class fA{constructor(){n(this,"Pt");this.Pt=new k}createCharacterObjects(e,s){return e.map((r,i)=>{const B=r.codePointAt(0)||0,o=this.vt(i);let E=0;if(s.hmtx&&s.hmtx.aWidth){const g=this.Pt.NA(s,B);g>0&&s.hmtx.aWidth[g]!==void 0&&(E=s.hmtx.aWidth[g])}return{character:r,unicode:B,color:o,advanceWidth:E}})}vt(e){return[e%256,Math.floor(e/256)%256,Math.floor(e/65536)%256]}getCharacterColor(e,s){if(!I.C(typeof e=="string","Character must be a string.",{method:"getCharacterColor",providedValue:e}))return[0,0,0];const r=s.find(i=>i.character===e);return r?r.color:[0,0,0]}getCharacterColors(e,s){return I.C(typeof e=="string"&&e.length>0,"Characters must be a string with at least one character.",{method:"getCharacterColors",providedValue:e})?Array.from(e).map(r=>this.getCharacterColor(r,s)||[0,0,0]):[[0,0,0]]}}class tA{constructor(e,s=16){n(this,"bt");n(this,"xt",[]);n(this,"yt");n(this,"Mt",16);n(this,"Gt",0);n(this,"Ft",0);n(this,"$t",{width:0,height:0});n(this,"Yt");n(this,"Tt","UrsaFont");n(this,"St");n(this,"Ot");n(this,"Ut");n(this,"Rt");this.Mt=s,this.St=new PA,this.Ot=new dA(e),this.Ut=new IA,this.Rt=new fA}async kt(e){let s;if(e){const r=await fetch(e);if(!r.ok)throw new P(`Failed to load font file: ${r.status} ${r.statusText}`);s=await r.arrayBuffer()}else s=await(await fetch(`data:font/truetype;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMs+QEyQAAAEoAAAAYGNtYXAg7yVJAAAFjAAACSBnbHlmuHLTdAAAErQAAGi0aGVhZFvXdUwAAACsAAAANmhoZWELAQUCAAAA5AAAACRobXR4BACDgAAAAYgAAAQEbG9jYQAy54AAAA6sAAAECG1heHABIgCCAAABCAAAACBuYW1lVs/OSgAAe2gAAAOicG9zdABpADQAAH8MAAAAIAABAAAAAQAAzOWHqV8PPPUAAAQAAAAAAHxiGCcAAAAAfGIYJwAAAAAEAAQAAAAACAACAAEAAAAAAAEAAAQAAAAAAAQAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAEBAAEAAAEBAIAAIAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAgQAAZAABQAEAgACAAAAAAACAAIAAAACAAAzAMwAAAAABAAAAAAAAACAAACLAABw4wAAAAAAAAAAWUFMLgBAACAmawQAAAAAAAQAAAAAAAFRAAAAAAMABAAAAAAgAAAEAAAABAAAAAQAAAAEAAGABAABAAQAAIAEAACABAAAgAQAAIAEAAGABAABAAQAAQAEAACABAABAAQAAIAEAACABAABAAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAAGABAAAgAQAAIAEAAGABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABgAQAAQAEAACABAAAAAQAAgAEAACABAAAgAQAAIAEAACABAACAAQAAAAEAAIABAABgAQAAgAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAAABAAAAAQAAAAEAAIABAADAAQAAAAEAAAABAAAgAQAAYAEAAAABAAAAAQAAIAEAAAA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AIAAAACA/YAAgAAAAIAAAP8AAoABAAAA/4AAAP+A/4AAgAAAAIAAAP8AA4AAAP8AAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAP+AAAD/gAAAAAAAAP8AAAAAgAAAAAAAAP+AAAD/gAAAAAAAAwCAAIAEAAQAABcAHQAjAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAACAAAAAgAAA/4AAAACAAAD9AAAA/4AAAACAAAD/gAAAAIAAgAAAAIAAAACAAAD/AAAAAQAAAP+AAAAEAAAA/4AAAP8AAAD/gAAAAIAAAP8AAAD/gAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAP+AAAD/gAAAAQD+gP8AAAAAgAAAAIAAAAABAYACgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAP6AAAAAAAABAQAAgAMABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/oAAAP+AAAD/gAAAAIAAAACAAAABgAAAAIAAAAAAAAEBAACAAwAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAAAgAAAAIAAAAGAAAAAgAAAAAAABQCAAYADgAQAAAMABwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAIAAAP+AAYAAgAAA/4D/AAEAAAABAAAA/wAAAP8AAAD/AAAAAQD/gACAAAD/gAGAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP+AAAAAAAABAQAAgAOAAwAACwAAAQEBAQEBAQEBAQEBAgAAgAAAAQAAAP8AAAD/gAAA/wAAAAEAAwAAAP8AAAD/gAAA/wAAAAEAAAAAgAAAAAAAAQCAAAACAAGAAAcAAAEBAQEBAQEBAQABAAAA/4AAAP8AAAAAgAGAAAD/AAAA/4AAAACAAAAAAAABAIABgAOAAgAAAwAAAQEBAQCAAwAAAP0AAgAAAP+AAAAAAAABAQAAgAIAAYAAAwAAAQEBAQEAAQAAAP8AAYAAAP8AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAwCAAIADgAQAAAsAEQAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAD/gAAAAIAAgAAAAIAAAACAAAD/gAAA/4AAAAEAAAAEAAAA/4AAAP2AAAD/gAAAAIAAAAKAAAAAAP8AAAAAgAAAAID/AP+AAAD/AAAAAYAAAAABAIAAgAOABAAADQAAAQEBAQEBAQEBAQEBAQEBgAEAAAABAAAA/QAAAAEAAAD/AAAAAIAAAACABAAAAP0AAAD/gAAAAIAAAAGAAAAAgAAAAIAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAAAIAAAACAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAA/wAAAAEAAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/wAAAAEAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAA/4AAAACAAAAAAAABAIAAgAOABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAP+AAAABAAAAAQAAAP8AAAD+AAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAAEAAAD9gAAAAQAAAAGAAAAAgAAAAAEAgACAA4AEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP4AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/gAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAP+AAAABAAAAAAAAAgCAAIADgAQAABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAYAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAoAAAP6A/wAAAAEAAAEAgACAA4AEAAAPAAABAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AEAAAA/oAAAP+AAAD+gAAAAYAAAACAAAABAAAA/4AAAAAAAAMAgACAA4AEAAATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAACAAAD/gAAAAIAAgAAAAQAAAP8AAAABAAAABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAA/wAAAAEA/oD/AAAAAQAAAAACAIAAgAOABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD+gAAA/4AAAACAAIAAAAEAAAAEAAAA/4AAAP0AAAABAAAAAIAAAAGAAAAAAP6AAAABgAACAQABAAIAA4AAAwAHAAABAQEBAQEBAQEAAQAAAP8AAAABAAAA/wADgAAA/wAAAP+AAAD/AAAAAAIAgACAAgADgAADAAsAAAEBAQEBAQEBAQEBAQEAAQAAAP8AAAABAAAA/4AAAP8AAAAAgAOAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAABAQAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQKAAQAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAACAIABgAOAAwAAAwAHAAABAQEBAQEBAQCAAwAAAP0AAAADAAAA/QADAAAA/4AAAP+AAAD/gAAAAAEAgACAAwAEAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAIAgACAA4AEAAATABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP8AAAD/AAAAAIAAgAEAAAD/AAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAA/4AAAACAAAD+AAAA/wAAAAACAIAAgAOABAAAEQAVAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP6AAAAAgAAA/wAAAAGAAAD+AAAA/4AAAACAAgAAgAAA/4AEAAAA/4AAAP6AAAABAAAAAIAAAP2AAAD/gAAAAIAAAAKAAAD+AAAA/4AAAAAAAAIAgACAA4AEAAAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAAAIAAAACAAAD/AAAA/wAAAP8AAAAAgAAAAIAAAAAAAQAAAAQAAAD/gAAA/4AAAP2AAAABAAAA/wAAAAKAAAAAgAAA/4D/AAAAAQAAAwCAAIADgAQAAAsADwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAAAIAAAP+AAAD9gAEAAAABAAAA/wAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAADAP8AAAABAP6A/wAAAAEAAAAAAQCAAIADgAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAQAAAAEAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAACAIAAgAOABAAACwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAEAAAAAgAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAADAP2AAAAAgAAAAYAAAACAAAEAgACAA4AEAAAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/wAAAAEAAAABAAAA/4AAAP4AAAD/gAAAAIAEAAAA/4AAAP+AAAAAgAAA/wAAAP+AAAD/AAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAABAIAAgAOABAAACQAAAQEBAQEBAQEBAQCAAwAAAP4AAAABAAAA/wAAAP8ABAAAAP+AAAD/AAAA/4AAAP6AAAAAAQCAAIADgAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/4AAAAGAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAQAAAACAAAD+gAAA/4AAAACAAAACgAAAAAEAgACAA4AEAAALAAABAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP8AAAD/AAAA/wAEAAAA/gAAAAIAAAD8gAAAAQAAAP8AAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIADAAAA/wAAAAEAAAD9AAAAAQAAAP8ABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAAAAQCAAIAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAMAAAD/gAAA/4AAAP4AAAD/gAAAAQAAAAEAAAD+gAQAAAD/gAAA/YAAAP+AAAAAgAAAAQAAAP8AAAACgAAAAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAAEAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAQAAAD/AAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAAAAAQCAAIADgAQAAAUAAAEBAQEBAQCAAQAAAAIAAAD9AAQAAAD9AAAA/4AAAAABAIAAgAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8ABAAAAP+AAAD/gAAAAIAAAACAAAD8gAAAAgAAAP+AAAAAgAAA/gAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAEAAAA/4AAAP+AAAD/gAAAAYAAAPyAAAABAAAAAIAAAACAAAD+AAAAAAAAAgCAAIADgAQAAAsADwAAAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAD9gAAAAoAAAgCAAIADgAQAAAkADQAAAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP6AAAD/AAEAAAABAAAABAAAAP+AAAD+gAAA/4AAAP8AAAADAP6AAAABgAAAAAIAgACABAAEAAAPABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAD/gAAAAIAAAAQAAAD/gAAA/gAAAP8AAAAAgAAA/4AAAACAAAACgAAAAAD9gAAAAIAAAACAAAABgAACAIAAgAOABAAAEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AAQAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAwD/AAAAAQAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/oAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAAAAAAAQCAAIADgAQAAAcAAAEBAQEBAQEBAIADAAAA/wAAAP8AAAD/AAQAAAD/gAAA/QAAAAMAAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAP+ABAAAAP0AAAADAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIADgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAD/gAAA/wAAAP+AAAD/gAQAAAD+AAAAAgAAAP4AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAIAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAQAAAP8AAAD/gAAA/4AAAP+AAAD/AAQAAAD+AAAAAIAAAP+AAAACAAAA/IAAAACAAAAAgAAA/4AAAP+AAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/AAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP8AAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAA/wAAAAEAAAAAgAAAAIAAAACAAAAAAAABAIAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAACAAAAAAAABAIAAgAOABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/gAAA/4AAAAIAAAD9AAAAAIAAAACAAAAAgAAAAIAAAP4ABAAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/wAAAAEAAAD+AAQAAAD/gAAA/YAAAP+AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/gAAAAEAAAD/AAQAAAD8gAAAAIAAAAKAAAAAAAABAIACAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAEAAAMAAAEBAQEAgAMAAAD9AAEAAAD/gAAAAAAAAQEAAoACgAQAAAkAAAEBAQEBAQEBAQEBAAEAAAAAgAAA/4AAAP+AAAD/gAQAAAD/gAAA/wAAAACAAAAAgAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQACgAAA/4AAAP+AAAD/AAAAAQAAAP6AAAD/gAAAAIADAAAA/YAAAACAAAABgAAA/oAAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/gAAA/YABAAAAAQAAAAQAAAD/AAAA/4AAAP6AAAD/gAAAAgD+gAAAAYAAAAABAIAAgAOAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAAAQAAAP+AAAD+AAAA/4AAAACAAwAAAP+AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAoABAAAA/YAAAP+AAAAAgAAAAYD/AAAAAQAAAAQAAAD8gAAAAIAAAAGAAAAAgAAA/4D+gAAAAYAAAAACAIAAgAOAAwAADQARAAABAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/gAAAAGAAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP8AAAD/gAAA/4AAAACAAAABgAAAAAD/gAAAAIAAAAABAQAAgAOAA4AACwAAAQEBAQEBAQEBAQEBAYACAAAA/oAAAAEAAAD/AAAA/wAAAACAA4AAAP+AAAD/AAAA/4AAAP8AAAACgAAAAAAAAgCAAIADgAOAAA8AEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAABgAAA/oAAAP+AAAAAgACAAAABAAAAA4AAAP+AAAD+AAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAAP8AAAABAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/AAAA/wAAAP8ABAAAAP8AAAD/gAAA/gAAAAIAAAD+AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP+AAAD/gAAA/YAAAAACAIAAgAOABAAAAwAPAAABAQEBAQEBAQEBAQEBAQEBAoABAAAA/wAAAAEAAAD/gAAA/gAAAP+AAAABAAAAAQAEAAAA/4AAAP+AAAD+AAAA/4AAAACAAAABAAAA/wAAAAABAIAAgAOAA4AAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAQAAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AA4AAAP8AAAAAgAAA/4AAAP8AAAD/gAAA/4AAAACAAAAAgAAA/wAAAAAAAAEBgACAAwAEAAAHAAABAQEBAQEBAQGAAQAAAACAAAD/AAAA/4AEAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIAEAAMAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAMAAAD/gAAAAIAAAP+AAAD+AAAAAYAAAP+AAAAAgAAA/oAAAAIAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAABAAAAAIAAAP8AAAD/gAAA/4AAAP8AAwAAAP+AAAAAgAAA/4AAAP4AAAABgAAA/4AAAP8AAAAAAAACAIAAgAOAAwAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP6AAAD/gAAAAIAAAAGAAAAAAP6AAAABgAACAIAAgAOAAwAACQANAAABAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAA/oAAAP8AAQAAAAEAAAADAAAA/4AAAP+AAAD/gAAA/wAAAAIA/4AAAACAAAAAAgCAAIAEAAMAAA0AEQAAAQEBAQEBAQEBAQEBAQEBAQEBAQACgAAAAIAAAP+AAAD/AAAA/oAAAP+AAAAAgACAAAABAAAAAwAAAP6AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAA/4AAAACAAAAAAQEAAIADgAMAAAkAAAEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP+AAAD/AAMAAAD/gAAA/wAAAAEAAAD+AAAAAAEAgACABAADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP6AAAABgAAAAIAAAP+AAAD9AAAAAgAAAP6AAAD/gAAAAIADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAP8AAAAAgAAAAQAAAP+AAAD+gAAA/4AAAP+AAAAAgAOAAAD/gAAA/4AAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAQAAAP+AAAD/gAAA/oAAAP+AAwAAAP4AAAAAgAAAAYAAAP2AAAAAgAAA/4AAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+AAwAAAP6AAAABgAAA/oAAAP+AAAD/gAAAAIAAAACAAAAAAAABAIAAgAQAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/4AAAP8AAAD/gAAA/wAAAP+AAwAAAP6AAAAAgAAA/4AAAAGAAAD+AAAA/4AAAACAAAD/gAAAAIAAAAAAAAEAgACAA4ADAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP8AAAD/AAAAAIAAAACAAAD/gAAA/4ADAAAA/4AAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAD/gAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAAGAAAD+gAAA/4ADAAAA/wAAAAEAAAD+AAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP+AAAD/gAAA/4AAAAGAAAD9AAAAAIAAAACAAAAAgAAA/oADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAA/wAAAP+AAAAAgAAAAQAAAP6AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAAABAYAAgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPyAAAAAAAABAQAAgAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAGAAAAAgAAAAIAAAP+AAAD/gAAA/oAAAAEAAAAAgAAA/4AAAP8ABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAAAAEAgAGAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAACAAAD/gAAA/wAAAP8AAAD/gAAAAIADAAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAYAAAAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAAA/wAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAABAAAAAQAAAACAAAAAgAAAAAAAAQIAAAAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD8AAAAAAAAAgCAAIADgAQAABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP8AAAABAAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAA/wAAAACAAAAAgAGAAIAAAP+ABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAAAAAAAP+AAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAAAgAAA/wAAAAEAAAD/AAAA/wAAAP8AAAABAAAA/wAAAACAAAD/gAQAAAD+gAAAAYAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABACAAIAEAAQAABcAGwAfACMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP4AAAABgAAAAIAAAACAAAD/gAAA/YAAAAIAAAD+gAAA/4AAAP+AAAAAgAEAAAAAgAAAAQAAgAAA/4D9AACAAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAACAAAAAgAAAAQAAAP8A/4AAAACAAQAAAP+AAAD+gAAA/4AAAAAEAIAAgAQAA4AAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAQIAAAAEAAQAAAkAAAEBAQEBAQEBAQEDgACAAAD+AAAAAIAAAACAAAAAgAQAAAD8AAAAAQAAAAEAAAABAAAAAAgAAAAABAAEAAADAAcACwAPABMAFwAbAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAA/wACAAEAAAD/AP8AAQAAAP8AAgABAAAA/wD9AAEAAAD/AAIAAQAAAP8A/wABAAAA/wACAAEAAAD/AAQAAAD/AAAAAQAAAP8AAAAAAAAA/wAAAAEAAAD/AAAAAAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQIAAAADAAQAAAMAAAEBAQECAAEAAAD/AAQAAAD8AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP6AAAD/gAAA/oAAAAABAgAAAAQAAgAAAwAAAQEBAQIAAgAAAP4AAgAAAP4AAAAAAAAEAIAAAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+ABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAAABAAAAPwAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAoABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAD/gAOAAAD+AAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAA/wAAAAEAAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAAAEAAAA/gAAAP+AAAD/gAAA/4AAAP+ABAAAAPwAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIAEAAOAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAOAAAD/gAAAAIAAAP8AAAABAAAA/oAAAAGAAAD9AAAAAIAAAP+AAAABAAAA/wAAAAGAAAD+gAAAAAAAAQAAAAACAAQAAAkAAAEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD+AAQAAAD/AAAA/wAAAP8AAAD/AAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQKAAYAAAP8AAAD/AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAEAAAA/wAAAP+AAAD/gAAA/wAAAP8AAAABgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD8AAAAAIAAAACAAAAAgAIAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgAAAAAEAAQAAAMABwAAAQEBAQEBAQEAAAIAAAD+AAIAAgAAAP4ABAAAAP4AAAAAAAAA/gAAAAAEAAACAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8ABAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAABAIAAAAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQECAAEAAAD/AAEAAQAAAP8A/wABAAAA/wABAAEAAAD/AAQAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAEDAAAABAAEAAADAAABAQEBAwABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD9AAAA/wAEAAAA/wAAAP0AAAAAAQAAAAABAAQAAAMAAAEBAQEAAAEAAAD/AAQAAAD8AAAAAAAAAwCAAIADAAOAAAMABwALAAABAQEBAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AAQAAgAAA/4ADgAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAAABAYABgAQABAAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAAEAAAD+gAAA/4AAAP+ABAAAAP8AAAD/gAAA/wAAAACAAAAAgAAAAAAAAQAAAYACgAQAAAsAAAEBAQEBAQEBAQEBAQGAAQAAAP+AAAD/gAAA/oAAAAEAAAAAgAQAAAD+gAAA/4AAAP+AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAwABAAAA/AAAAAEAAAABAAAAAQAEAAAA/AAAAAKAAAAAgAAAAIAAAAABAIAAgAMABAAACwAAAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP0AAAD/gAAAAIAAAAEAAAAAgAAAAAAAAQAAAAAEAAQAAAUAAAEBAQEBAQAAAQAAAAMAAAD8AAQAAAD9AAAA/wAAAAACAIAAgAMAAoAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQABgAAAAIAAAP+AAAD+gAAAAQAAAP8A/4AAgAAA/4ACgAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAMABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAABAAAA/wAAAAEA/oAAgAAA/4AEAAAA/QAAAP+AAAAAgAAAAQAAAACAAAD/gAAA/wAAAAABAIAAgAQABAAADQAAAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP+AAAD9gAAA/4AAAACAAAABAAAAAIAAAAACAAAAAAQABAAAAwAHAAABAQEBAQEBAQAABAAAAPwAAQAAAAIAAAAEAAAA/AAAAAMA/gAAAAIAAAEAgACABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAD/gAAA/oAAAP+AAAAAgAAAAQAEAAAA/4AAAP+AAAD/gAAA/oAAAP+AAAAAgAAAAQAAAACAAAAAAQAAAAACgAKAAAsAAAEBAQEBAQEBAQEBAQAAAYAAAACAAAAAgAAA/wAAAP+AAAD/AAKAAAD/gAAA/4AAAP6AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD/AAAA/QAEAAAA/AAAAAMAAAAAAQCAAIAEAAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAABAAAA/wAAAP+AAAD+gAAA/4AAAACAAAABAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAAEAAAAAgAAAAAEBgAAABAACgAALAAABAQEBAQEBAQEBAQECgAGAAAD/AAAA/4AAAP8AAAAAgAAAAIACgAAA/wAAAP+AAAD/AAAAAYAAAACAAAAAAAABAAAAAAQABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAPwABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAABAAADAAABAQEBAAAEAAAA/AABAAAA/wAAAAAAAAEAAAAABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQEDgACAAAD8AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAEAAAA/AAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAQAAAgAEAAQAAAMAAAEBAQEAAAQAAAD8AAQAAAD+AAAAAAAAAgCAAIACAAOAAAMABwAAAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAAEAIAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAABAAAAPyAAAADAP+AAAAAgP8A/4AAAACA/wD/gAAAAIAAAQAAAAAEAAQAAAUAAAEBAQEBAQMAAQAAAPwAAAADAAQAAAD8AAAAAQAAAAACAIAAgAQABAAAAwAHAAABAQEBAQEBAQCAA4AAAPyAAYAAAACAAAAEAAAA/IAAAAIA/4AAAACAAAMAgACABAAEAAADAAcACwAAAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgP4A/4AAAACAAAAABAAAAIAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD8AAAABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAYAgACABAAEAAADAAcACwAPABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/oAAAACAAAD+gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAID/AP+AAAAAgAAA/4AAAACAAAEAgACAAQADgAADAAABAQEBAIAAgAAA/4ADgAAA/QAAAAAAAAUAgACABAAEAAADAAcACwAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/YAAAACAAAABgAAAAIAAAAQAAAD8gAAAAwD/gAAAAIAAAP+AAAAAgP4A/4AAAACAAAD/gAAAAIAAAAABAAADAAQABAAAAwAAAQEBAQAABAAAAPwABAAAAP8AAAAAAAAHAIAAgAQABAAAAwAHAAsADwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAABgAAAAIAAAP2AAAAAgAAAAYAAAACAAAD9gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAIAAAP+AAAAAgP8A/4AAAACAAAD/gAAAAIAAAAAEAAAAAAQAAgAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8AAgAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQAAAAAEAAQAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAQAAAD/gAAA/4AAAP+AAAD9gAAAAAEBAAAAAgAEAAADAAABAQEBAQABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQECgAGAAAD8AAAAAIAAAACAAAAAgAAAAQAEAAAA/AAAAAGAAAABAAAAAIAAAACAAAAAAAABAAABAAQAAgAAAwAAAQEBAQAABAAAAPwAAgAAAP8AAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAgACAAAA/AAAAACAAAAAgAAAAIAAAACABAAAAPwAAAACAAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEDAAEAAAD8AAAAAQAAAAEAAAABAAIAAAD+AAAAAIAAAACAAAAAgAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAIAAAAAgAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/4AAAP4AAAAAAAADAAAAAAQABAAAGwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAIAAYAAAACAAAD/gAAA/4AAAP+AAAD/gP4AAIAAAACAAAAAgAAAAIAAAP6AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAQAAAP+AAAD+gAAAAIAAAACAAAAAgAAA/oAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAIAAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAGAAAABAAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAAAAAAEAAAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAYAAAP6AAgABgAAA/oD9gAGAAAD+gAIAAYAAAP6ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAP6AAAAAAQIAAgAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD+AAAAAAAABACAAIAEAAQAAAMABwAjACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAD/AAGAAQAAAP8A/gAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4ABgACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAAAAA/wAAAP+AAAD/gAAAAIAAAACAAAABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAGAAAD/gAAAAAQAAAAABAAEAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ADgACAAAD/gPyAAIAAAP+AA4AAgAAA/4AEAAAA/4AAAACAAAD/gAAA/QAAAP+AAAAAgAAA/4AAAAABAAAAAAIAAgAAAwAAAQEBAQAAAgAAAP4AAgAAAP4AAAAAAAAEAAAAAAIABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAQABAAAA/wD/AAEAAAD/AAEAAQAAAP8ABAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAQCAAQADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAAGAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAOAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAAAABAQABAAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAACAAAD+gAAAAYAAAP+AAAABAAAAAIAAAAAAAAEBAAEABAADgAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQIAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAP6AAAABgAAA/4ADgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAOAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAAAAQAAAP+AAAAAAAABAQAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAA/4AAAP6AAAD/gAAAAIAAAACABAAAAP8AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAAAACAIAAgAOAA4AAAwAJAAABAQEBAQEBAQEBAIADAAAA/QAAgAAAAgAAAP8AAAADgAAA/QAAAAKA/gAAAAEAAAABAAAAAAIAgACABAAEAAAbACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAD/gAAAAIAAAACAAAAAgAAA/4AAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4D/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAEAAAIABAADAAADAAABAQEBAAAEAAAA/AADAAAA/wAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/gAEAAAA/gAAAP+AAAD/gAAA/4AAAP+AAAAAAAABAAACAAIABAAAAwAAAQEBAQAAAgAAAP4ABAAAAP4AAAAAAAACAQAAgAOAA4AAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP8AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAACAAAAAgAAA/wAAAACAAIAAAACAAAADgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgP+AAAAAgAADAAAAAAQABAAACwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAGAAAD/gAAA/4AAAP+AAAD/gAAAAIACgAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgACAAIAAAP+AAAD+gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAAAYAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAA/oAAAP6AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgCAAIADgAQAAA8AHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAABAAAAAIAAAP+AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAgAAA/4AAAP8AAAD/AAAA/4AAAACABAAAAP+AAAAAgAAA/wAAAP+AAAAAgAAA/4AAAAEAAAD+gAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAABAAAAAAQAA4AACwAAAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD8AAAAAIAAAACAA4AAAP+AAAD/gAAA/YAAAAKAAAAAgAAAAAAAAQAAAAACAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAAAAAQIAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDgACAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQCAAIAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/oAAAAEAAAD/AAAAAYAAAACAAAAAgAAAAIAAAAAAACAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AEMARwBLAE8AUwBXAFsAXwBjAGcAawBvAHMAdwB7AH8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gPyAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/YAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D8gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gP2AAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/IAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAQAAAAAEAAQAAAsAAAEBAQEBAQEBAQEBAQAABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/oAEAAAA/oAAAP8AAAD/gAAA/4AAAP+AAAAAAAABAAABgAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAAAAAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP2AAAACAAAAAIAAAACAAAAAAAABAYAAAAQAAoAABQAAAQEBAQEBAYACgAAA/oAAAP8AAoAAAP8AAAD+gAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAAACgAAAAIAAAACAAAAAgAAA/AAEAAAA/wAAAP8AAAD/AAAA/wAAAAACAAAAAAQABAAAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAAAEAAAAEAAAA/4AAAP+AAAD/gAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAgAAAAIAAAP8A/wAAAAEAAAEBgAGABAAEAAAFAAABAQEBAQEBgAEAAAABgAAA/YAEAAAA/oAAAP8AAAAAAQAAAAACgAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD+AAAAAoAAAACAAAAAgAAAAAAAAQGAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQGAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAQAAAACAAAAAAAABAAABgAQABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAgAAAP2AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAABgAQAAoAAAwAAAQEBAQAABAAAAPwAAoAAAP8AAAAAAAABAYAAAAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPwAAAAAAAABAYAAAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAKAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD+AAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD9gAAAAgAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAgAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQAAAYACgAKAAAMAAAEBAQEAAAKAAAD9gAKAAAD/AAAAAAAAAQGAAAACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD9gAAAAAAAAQAAAYAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAABAAAAAIAAAAEAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAYACgAAA/AAAAACAAAAAgAAAAIAEAAAA/AAAAAEAAAABAAAAAQAAAAABAAAAAAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAA/oAAAAEAAAABAAAAAIAAAACABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAQAAAAEAAAD+gAAA/wAAAP+AAAD/gAAA/4AEAAAA/wAAAP8AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAABAAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAACgAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAABAAAAAIAAAAAAAAEAAAAABAAEAAAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQAAAAACgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD9gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAQAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAKAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAYACgAQAAAMAAAEBAQEBgAEAAAD/AAQAAAD9gAAAAAAAAQGAAYAEAAKAAAMAAAEBAQEBgAKAAAD9gAKAAAD/AAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAABAAAAAAQABAAAIwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQGAAYACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD/AAAAAAAAAQAAAAAEAAKAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAAAAEAAAGAAoAEAAAFAAABAQEBAQEBgAEAAAD9gAAAAYAEAAAA/YAAAAEAAAAAAQAAAAACgAKAAAUAAAEBAQEBAQAAAoAAAP8AAAD+gAKAAAD9gAAAAYAAAAABAAAAAAQABAAAHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAQAAAACAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEBgAEAAAABgAAA/oAAAP8AAAD+gAAAAYAEAAAA/oAAAP8AAAD+gAAAAYAAAAEAAAAAAAABAAAAAAQAAoAABwAAAQEBAQEBAQEAAAQAAAD+gAAA/wAAAP6AAoAAAP8AAAD+gAAAAYAAAAAAAAEBgAAABAAEAAAHAAABAQEBAQEBAQGAAQAAAAGAAAD+gAAA/wAEAAAA/oAAAP8AAAD+gAAAAAAAAQAAAAACgAQAAAcAAAEBAQEBAQEBAYABAAAA/wAAAP6AAAABgAQAAAD8AAAAAYAAAAEAAAAAAAABAAABgAQABAAABwAAAQEBAQEBAQEBgAEAAAABgAAA/AAAAAGABAAAAP6AAAD/AAAAAQAAAAAAAAQBAAEAAwADAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAYABAAAA/wD/gACAAAD/gAGAAIAAAP+A/wABAAAA/wADAAAA/4AAAAAAAAD/AAAAAQAAAP8AAAAAAAAA/4AAAAACAIAAgAOAA4AACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADgAAA/4AAAP4AAAD/gAAAAIAAAAIAAAD/gP8AAAABAAACAAAAAAQABAAAEwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAgAAA/4AAAACAAAABAAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAAAIAAAAAgAAA/4D/gAAA/wAAAP+AAAAAgAAAAQAAAACAABAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP+AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4AEAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAQAAAAAAQABAAAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwA3ADsAPwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D8gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAwCAAIADgAQAABcAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAAEAAAD/AAAAAIAAAP+AAAABAAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAP+AAAAAgAAA/4AAAACAAAAEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAYAAAACAAAD/gP+AAAAAgP8A/4AAAACAAAAAAQCAAIADgAOAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP+AAAD/AAAA/4AAAP+AAAAAgAOAAAD/gAAA/wAAAP+AAAD/AAAAAQAAAACAAAABAAAAAAAAAgCAAIADgAOAAAMACQAAAQEBAQEBAQEBAQCAAwAAAP0AAYAAAP8AAAACAAAAA4AAAP0AAAACgP8AAAD/AAAAAgAAAAABAIAAgAOAA4AAAwAAAQEBAQCAAwAAAP0AA4AAAP0AAAAAAAACAIAAgAOAA4AAAwALAAABAQEBAQEBAQEBAQEAgAMAAAD9AACAAAACAAAA/4AAAP8AAAADgAAA/QAAAAKA/gAAAAIAAAD/AAAAAQAAAQAAAAAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAAAAgAAAACAAAAAAAABAQABAAMAAwAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAP+AAAD/AAAA/4AAAACAAwAAAP+AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAQAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAACAAAD/gAAA/4AAAAEAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+AAAAAIAAAAGAAAAAgAAA/gAAAAGAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgAAA/4AAAACA/4D/gAAAAIAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+gAAAAYAAAP4AAAAAgAAAAYAAAACAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgP+A/4AAAACAAAD/gAAAAIAABgCAAIAEAAQAABMAFwAbAB8AIwAnAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAAAAEAAAAAgAAAAAAAgAAA/oAAgAAA/4ACAACAAAD/gP4AAIAAAP+AAgAAgAAA/4AEAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAAAIAAAACAAAAAgAAA/4D/gAAAAIABAAAA/4AAAACAAAD/gAAA/oAAAP+AAAAAgAAA/4AAAAACAQAAgAOABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP+AAAD/gAAAAIAAAP+AAAD/gAAA/4AAAACAAAD/gAAAAQAAAP8A/4AAgAAA/4AEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAQABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYACgAAA/4AAAP+AAAD/gAAAAIAAAP+AAAD+gAAAAQAAAP8AAAABAAAAAIAAAP8A/wAAgAAA/4AEAAAA/gAAAAEAAAD/gAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAIAAAACAAAD+gAAA/wAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABAAAAAIAAAACAAAAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP+AAAAAgAAAAQAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAABAAAAAIAAAP+ABAAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABgAAA/4AAAACAAAAAAAABAIAAgAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACABAAAAP+AAAAAgAAA/4AAAP6AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAABgAAAAAAAAQCAAIAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAQAAAsAAAEBAQEBAQEBAQEBAQIAAYAAAP8AAAD/gAAA/wAAAACAAAAAgAQAAAD/AAAA/gAAAP+AAAABAAAAAIAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQGAAoAAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AAAP8AAAAAgAAAAIAEAAAA/QAAAP+AAAABAAAAAIAAAAEAAAD+AAAA/4AAAAEAAAAAgAAAAAAAAAAYASYAAQAAAAAAAAAIAAAAAQAAAAAAAQAIAAgAAQAAAAAAAgAHABAAAQAAAAAAAwAIABcAAQAAAAAABAAQAB8AAQAAAAAABQALAC8AAQAAAAAABgAIADoAAQAAAAAACQAJAEIAAQAAAAAACgA6AEsAAQAAAAAADQARAIUAAQAAAAAADgAyAJYAAQAAAAAAEwAMAMgAAwABBAkAAAAQANQAAwABBAkAAQAQAOQAAwABBAkAAgAOAPQAAwABBAkAAwAQAQIAAwABBAkABAAgARIAAwABBAkABQAWATIAAwABBAkABgAQAUgAAwABBAkACQASAVgAAwABBAkACgB0AWoAAwABBAkADQAiAd4AAwABBAkADgBkAgAAAwABBAkAEwAYAmQoYykgMjAyMlVyc2FGb250UmVndWxhclVyc2FGb250VXJzYUZvbnQgUmVndWxhclZlcnNpb24gMS4wVXJzYUZvbnRVcnNhRnJhbmtBbiBvcGVuIGxpY2VuY2UgZ2VuZXJhbCBwdXJwb3NlIHRleHRtb2RlIGZvbnQgYnkgVXJzYUZyYW5rQ0MwIDEuMCBVbml2ZXJzYWxodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wL0hlbGxvIFdvcmxkIQAoAGMAKQAgADIAMAAyADIAVQByAHMAYQBGAG8AbgB0AFIAZQBnAHUAbABhAHIAVQByAHMAYQBGAG8AbgB0AFUAcgBzAGEARgBvAG4AdAAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwAFUAcgBzAGEARgBvAG4AdABVAHIAcwBhAEYAcgBhAG4AawBBAG4AIABvAHAAZQBuACAAbABpAGMAZQBuAGMAZQAgAGcAZQBuAGUAcgBhAGwAIABwAHUAcgBwAG8AcwBlACAAdABlAHgAdABtAG8AZABlACAAZgBvAG4AdAAgAGIAeQAgAFUAcgBzAGEARgByAGEAbgBrAEMAQwAwACAAMQAuADAAIABVAG4AaQB2AGUAcgBzAGEAbABoAHQAdABwAHMAOgAvAC8AYwByAGUAYQB0AGkAdgBlAGMAbwBtAG0AbwBuAHMALgBvAHIAZwAvAHAAdQBiAGwAaQBjAGQAbwBtAGEAaQBuAC8AegBlAHIAbwAvADEALgAwAC8ASABlAGwAbABvACAAVwBvAHIAbABkACEAAAADAAAAAAAAAGYAMwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\r
9
- `)).arrayBuffer();await this.Vt(s),this.bt=v.parse(s)[0],await this.Ht()}zt(e){if(e===void 0)return this.Mt;this.Mt=e,this.$t=this.Ut.calculateMaxGlyphDimensions(this.xt.map(r=>r.character),this.Mt,this.bt);const s=this.Ot.createTextureAtlas(this.xt,this.$t,this.Mt,this.bt);this.yt=s.framebuffer,this.Gt=s.columns,this.Ft=s.rows}async Lt(e){try{const s=await fetch(e);if(!s.ok)throw new P(`Failed to load font file: ${s.status} ${s.statusText}`);const r=await s.arrayBuffer();await this.Vt(r);const i=v.parse(r);if(!i||i.length===0)throw Error("Failed to parse font file");this.bt=i[0],await this.Ht()}catch(s){throw new P("Failed to load font: "+(s instanceof Error?s.message:"Unknown error"),s)}}async Vt(e){const s=Date.now();this.Tt=this.Tt==="UrsaFont"?"UrsaFont":"CustomFont_"+s,this.Yt=new FontFace(this.Tt,e),await this.Yt.load(),document.fonts.add(this.Yt)}async Ht(){const e=this.St.extractCharacters(this.bt),s=this.St.filterProblematicCharacters(e);this.xt=this.Rt.createCharacterObjects(s,this.bt),this.$t=this.Ut.calculateMaxGlyphDimensions(s,this.Mt,this.bt);const r=this.Ot.createTextureAtlas(this.xt,this.$t,this.Mt,this.bt);this.yt=r.framebuffer,this.Gt=r.columns,this.Ft=r.rows}getCharacterColor(e){return this.Rt.getCharacterColor(e,this.xt)}getCharacterColors(e){return this.Rt.getCharacterColors(e,this.xt)}hasAllCharacters(e){if(typeof e!="string"||e.length===0)return!1;const s=new Set(this.xt.map(r=>r.character));for(const r of e)if(!s.has(r))return!1;return!0}O(){this.yt.O(),document.fonts.delete(this.Yt)}get fontFramebuffer(){return this.yt}get characters(){return this.xt}get textureColumns(){return this.Gt}get textureRows(){return this.Ft}get maxGlyphDimensions(){return this.$t}get fontSize(){return this.Mt}get font(){return this.bt}}class eA{constructor(e,s,r){n(this,"Jt");n(this,"jt");n(this,"P");n(this,"I");n(this,"Kt");n(this,"Wt");n(this,"Nt",!1);n(this,"Zt");n(this,"Xt");n(this,"qt");this.Zt=e,this.Xt=s,this.qt=r,this.MA()}MA(){this.Nt||(this.Jt=Math.floor(this.Zt.width/this.Xt),this.jt=Math.floor(this.Zt.height/this.qt)),this.Ae()}Ae(){this.P=this.Jt*this.Xt,this.I=this.jt*this.qt,this.Kt=Math.floor((this.Zt.width-this.P)/2),this.Wt=Math.floor((this.Zt.height-this.I)/2)}te(e,s){this.Xt=e,this.qt=s,this.MA()}ee(e,s){this.Nt=!0,this.Jt=e,this.jt=s,this.Ae()}se(){this.Nt=!1,this.MA()}re(){this.Nt?this.Ae():this.MA()}Be(e){if(e===void 0)return this.Nt;this.Nt=e}get cellWidth(){return this.Xt}get cellHeight(){return this.qt}get cols(){return this.Jt}get rows(){return this.jt}get width(){return this.P}get height(){return this.I}get offsetX(){return this.Kt}get offsetY(){return this.Wt}}class sA{constructor(e,s=!1,r={}){n(this,"Zt");n(this,"ie");n(this,"Qe");n(this,"Ee");n(this,"onTransformChange");this.ie=e,this.Qe=s,this.Zt=this.oe(r.width,r.height),s&&this.setupTransformObserver()}oe(e,s){var i;const r=document.createElement("canvas");if(r.className="textmodeCanvas",r.style.imageRendering="pixelated",this.Qe)r.width=e||800,r.height=s||600,document.body.appendChild(r);else{const B=this.ie.getBoundingClientRect();let o=Math.round(B.width),E=Math.round(B.height);if(this.ie instanceof HTMLVideoElement){const a=this.ie;(o===0||E===0)&&a.videoWidth>0&&a.videoHeight>0&&(o=a.videoWidth,E=a.videoHeight)}r.width=o,r.height=E,r.style.position="absolute",r.style.pointerEvents="none";const g=window.getComputedStyle(this.ie);let h=parseInt(g.zIndex||"0",10);isNaN(h)&&(h=0),r.style.zIndex=""+(h+1),this.ge(r),(i=this.ie.parentNode)==null||i.insertBefore(r,this.ie.nextSibling)}return r}ge(e){const s=this.ie.getBoundingClientRect();let r=this.ie.offsetParent;if(r&&r!==document.body){const i=r.getBoundingClientRect();e.style.top=s.top-i.top+"px",e.style.left=s.left-i.left+"px"}else e.style.top=s.top+window.scrollY+"px",e.style.left=s.left+window.scrollX+"px"}re(e,s){if(this.Qe)this.Zt.width=e??this.Zt.width,this.Zt.height=s??this.Zt.height;else{const r=this.ie.getBoundingClientRect();let i=Math.round(r.width),B=Math.round(r.height);if(this.ie instanceof HTMLVideoElement){const o=this.ie;(i===0||B===0)&&o.videoWidth>0&&o.videoHeight>0&&(i=o.videoWidth,B=o.videoHeight)}this.Zt.width=i,this.Zt.height=B,this.ge(this.Zt)}}ne(){const e={alpha:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!0,antialias:!1,depth:!1,stencil:!1,powerPreference:"high-performance"},s=this.Zt.getContext("webgl2",e)||this.Zt.getContext("webgl",e);if(!s)throw new P("WebGL context could not be created. Ensure your browser supports WebGL.");return s}setupTransformObserver(){this.Ee=new ResizeObserver(e=>{for(const s of e){const r=s.contentRect;!this.onTransformChange||Math.round(r.width)===this.Zt.width&&Math.round(r.height)===this.Zt.height||this.onTransformChange()}}),this.Ee.observe(this.Zt)}O(){this.Ee&&this.Ee.disconnect();const e=this.Zt.getContext("webgl")||this.Zt.getContext("webgl2");if(e){const s=e.getExtension("WEBGL_lose_context");s&&s.loseContext()}this.Zt.parentNode&&this.Zt.parentNode.removeChild(this.Zt)}get canvas(){return this.Zt}get width(){return this.Zt.width}get height(){return this.Zt.height}}class R{constructor(e,s,r,i={}){n(this,"ut");n(this,"ae");n(this,"he");n(this,"le");n(this,"ce");n(this,"De");n(this,"Ce");n(this,"ue");n(this,"h");this.ut=e,this.ae=s,this.he=r,this.h={enabled:!0,...i};const B=this.he.cols,o=this.he.rows;this.le=this.ut.UA(B,o),this.ce=this.ut.UA(B,o),this.De=this.ut.UA(B,o),this.Ce=this.ut.UA(B,o),this.ue=this.ut.UA(B,o)}re(){const e=this.he.cols,s=this.he.rows;this.le.resize(e,s),this.ce.resize(e,s),this.De.resize(e,s),this.Ce.resize(e,s),this.ue.resize(e,s)}enabled(e){I.C(typeof e=="boolean"||typeof e=="number"&&Number.isInteger(e),"Enabled must be a boolean value or an integer (0 for false, any other number for true).",{method:"enabled",providedValue:e})&&(this.h.enabled=!!e)}enable(){this.enabled(!0)}disable(){this.enabled(!1)}O(){this.le.O(),this.ce.O(),this.De.O(),this.Ce.O(),this.ue.O()}get characterFramebuffer(){return this.le}get primaryColorFramebuffer(){return this.ce}get secondaryColorFramebuffer(){return this.De}get rotationFramebuffer(){return this.Ce}get transformFramebuffer(){return this.ue}get options(){return this.h}}class rA{constructor(e,s){n(this,"_");n(this,"ut");n(this,"Pe");this.ut=e,this.Pe=s;const r=Math.max(this.Pe.length,1);this._=this.ut.UA(r,1),this.Ie()}Ie(){const e=this.Pe.length;this._.width!==e&&this._.resize(e,1);const s=new Uint8Array(1*e*4);for(let r=0;r<e;r++){const i=this.Pe[r],B=4*r;s[B]=i[0],s[B+1]=i[1],s[B+2]=i[2],s[B+3]=255}this._.updatePixels(s,e,1)}setColors(e){this.Pe=e,this.Ie()}get colors(){return this.Pe}get framebuffer(){return this._}}class V extends R{constructor(s,r,i,B={}){super(s,r,i,{enabled:!0,characters:" .:-=+*%@#",characterColor:[1,1,1,1],characterColorMode:"sampled",cellColor:[0,0,0,1],cellColorMode:"fixed",invert:!1,rotation:[0,0,0,1],flipHorizontally:!1,flipVertically:!1,...B});n(this,"fe");this.fe=new rA(this.ut,this.ae.getCharacterColors(" .:-=+*%@#"))}characters(s){I.C(this.ae.hasAllCharacters(s),"One or more characters do not exist in the current font.",{method:"characters",providedValue:s})&&(this.h.characters=s,this.fe.setColors(this.ae.getCharacterColors(s)))}characterColor(s,r,i,B=255){const o=this.we(s,"characterColor",r,i,B);o&&(this.h.characterColor=o)}characterColorMode(s){this.de(s,"characterColorMode")}cellColor(s,r,i,B=255){const o=this.we(s,"cellColor",r,i,B);o&&(this.h.cellColor=o)}cellColorMode(s){this.de(s,"cellColorMode")}invert(s){this.me(s,"invert","Invert")}rotation(s){if(!I.C(typeof s=="number","Rotation angle must be a number.",{method:"rotation",providedValue:s}))return;(s%=360)<0&&(s+=360);const r=255*s/360,i=Math.floor(r)/255,B=Math.round(r-i);this.h.rotation=[i,B,0,1]}flipHorizontally(s){this.me(s,"flipHorizontally","Flip horizontally")}flipVertically(s){this.me(s,"flipVertically","Flip vertically")}we(s,r,i,B,o=255){let E,g,h,a;if(typeof s=="string"){const c=this.pe(s);if(!c)return I.C(!1,"Invalid hex color format. Use '#FF0000', '#F00', 'FF0000', or 'F00'.",{method:r,providedValue:s}),null;[E,g,h,a]=c}else if(E=s,g=i!==void 0?i:s,h=B!==void 0?B:s,a=o,!I.C([E,g,h,a].every(c=>c>=0&&c<=255),r.charAt(0).toUpperCase()+r.slice(1)+" color values must be between 0 and 255",{method:r,providedValues:{r:E,g,b:h,a}}))return null;return[E/255,g/255,h/255,a/255]}de(s,r){I.C(["sampled","fixed"].includes(s),"Invalid color mode. Must be 'sampled' or 'fixed'.",{method:r,providedValue:s})&&(this.h[r]=s)}me(s,r,i){I.C(typeof s=="boolean"||typeof s=="number"&&Number.isInteger(s),i+" must be a boolean value or an integer (0 for false, any other number for true).",{method:r,providedValue:s})&&(this.h[r]=!!s)}pe(s){return s=s.replace(/^#/,""),/^[0-9A-Fa-f]{3}$|^[0-9A-Fa-f]{6}$/.test(s)?(s.length===3&&(s=s.split("").map(r=>r+r).join("")),[parseInt(s.slice(0,2),16),parseInt(s.slice(2,4),16),parseInt(s.slice(4,6),16),255]):null}}const G=`attribute vec2 a_position;\r
10
- attribute vec2 a_texCoord;\r
11
- varying vec2 v_uv;\r
12
- \r
13
- uniform float u_rotation; // rotation angle in radians\r
14
- uniform vec2 u_center; // rotation center in normalized coordinates\r
15
- uniform float u_aspectRatio; // canvas width / canvas height\r
16
- \r
17
- mat2 rotate2D(float angle) {\r
18
- float s = sin(angle);\r
19
- float c = cos(angle);\r
20
- return mat2(c, -s, s, c);\r
21
- }\r
22
- \r
23
- void main() {\r
24
- v_uv = a_texCoord;\r
25
- \r
26
- // Use the position directly (it's already in normalized device coordinates)\r
27
- vec2 pos = a_position;\r
28
- \r
29
- // Translate to origin for rotation\r
30
- pos -= u_center;\r
31
- \r
32
- // Correct for aspect ratio: scale X coordinate to make space square\r
33
- pos.x *= u_aspectRatio;\r
34
- \r
35
- // Rotate in corrected space\r
36
- // Negate rotation to make positive values rotate clockwise (like p5.js)\r
37
- pos = rotate2D(-u_rotation) * pos;\r
38
- \r
39
- // Restore aspect ratio: scale X coordinate back\r
40
- pos.x /= u_aspectRatio;\r
41
- \r
42
- // Translate back from origin\r
43
- pos += u_center;\r
44
- \r
45
- gl_Position = vec4(pos, 0.0, 1.0);\r
46
- }\r
47
- `,iA={enabled:!0,characters:" .:-=+*%@#",characterColor:[1,1,1,1],characterColorMode:"sampled",cellColor:[0,0,0,1],cellColorMode:"fixed",invert:!1,rotation:[0,0,0,255],flipHorizontally:!1,flipVertically:!1,brightnessRange:[0,255]};class N extends V{constructor(s,r,i){super(s,r,i,iA);n(this,"_e");n(this,"ve");n(this,"be");n(this,"xe");n(this,"ye");n(this,"Me");this._e=new x(s.context,G,"precision lowp float;uniform sampler2D u_sketchTexture;uniform vec2 u_gridCellDimensions;uniform vec2 u_brightnessRange;varying vec2 v_uv;void main(){vec2 cellCenter=(floor(v_uv*u_gridCellDimensions)+vec2(0.5))/u_gridCellDimensions;vec4 color=texture2D(u_sketchTexture,cellCenter);float brightness=dot(color.rgb,vec3(0.299,0.587,0.114));float brightnessValue=brightness*255.0;if(brightnessValue>=u_brightnessRange.x&&brightnessValue<=u_brightnessRange.y){gl_FragColor=color;}else{gl_FragColor=vec4(0.0);}}"),this.ve=new x(s.context,G,"precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_fillColor;uniform bool u_useFixedColor;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){if(u_useFixedColor){gl_FragColor=u_fillColor;}else{gl_FragColor=sampleColor;}}else{gl_FragColor=vec4(0.0);}}"),this.xe=new x(s.context,G,"precision lowp float;uniform sampler2D u_sampleTexture;uniform bool u_invert;uniform bool u_flipHorizontally;uniform bool u_flipVertically;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){float invertValue=u_invert ? 1.0 : 0.0;float flipHValue=u_flipHorizontally ? 1.0 : 0.0;float flipVValue=u_flipVertically ? 1.0 : 0.0;gl_FragColor=vec4(invertValue,flipHValue,flipVValue,1.0);}else{gl_FragColor=vec4(0.0);}}"),this.ye=new x(s.context,G,"precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_rotationColor;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){gl_FragColor=u_rotationColor;}else{gl_FragColor=vec4(0.0);}}"),this.be=new x(s.context,G,"precision lowp float;uniform sampler2D u_colorSampleFramebuffer;uniform sampler2D u_charPaletteTexture;uniform vec2 u_charPaletteSize;uniform vec2 u_brightnessRange;varying vec2 v_uv;void main(){vec4 color=texture2D(u_colorSampleFramebuffer,v_uv);if(color.a==0.0){gl_FragColor=vec4(0.0);return;}float brightness=dot(color.rgb,vec3(0.299,0.587,0.114))*255.0;vec2 range=u_brightnessRange;if(brightness<range.x||brightness>range.y){gl_FragColor=vec4(0.0);return;}float t=(brightness-range.x)/(range.y-range.x);float idx=clamp(floor(t*u_charPaletteSize.x),0.0,u_charPaletteSize.x-1.0);vec3 charColor=texture2D(u_charPaletteTexture,vec2((idx+0.5)/u_charPaletteSize.x,0.0)).rgb;gl_FragColor=vec4(charColor,1.0);}"),this.Me=this.ut.UA(this.he.cols,this.he.rows)}Ge(s){const r=this.he.cols,i=this.he.rows;this.Me.begin(),this.ut.kA(),this.ut.wA(this._e),this.ut.YA("u_sketchTexture",s),this.ut.YA("u_gridCellDimensions",[r,i]),this.ut.YA("u_brightnessRange",this.h.brightnessRange),this.ut.TA(0,0,r,i),this.Me.end(),this.ce.begin(),this.ut.kA(),this.ut.wA(this.ve),this.ut.YA("u_sampleTexture",this.Me),this.ut.YA("u_fillColor",this.h.characterColor),this.ut.YA("u_useFixedColor",this.h.characterColorMode==="fixed"),this.ut.TA(0,0,r,i),this.ce.end(),this.De.begin(),this.ut.kA(),this.ut.wA(this.ve),this.ut.YA("u_sampleTexture",this.Me),this.ut.YA("u_fillColor",this.h.cellColor),this.ut.YA("u_useFixedColor",this.h.cellColorMode==="fixed"),this.ut.TA(0,0,r,i),this.De.end(),this.ue.begin(),this.ut.kA(),this.ut.wA(this.xe),this.ut.YA("u_sampleTexture",this.Me),this.ut.YA("u_invert",this.h.invert),this.ut.YA("u_flipHorizontally",this.h.flipHorizontally),this.ut.YA("u_flipVertically",this.h.flipVertically),this.ut.TA(0,0,r,i),this.ue.end(),this.Ce.begin(),this.ut.kA(),this.ut.wA(this.ye),this.ut.YA("u_sampleTexture",this.Me),this.ut.YA("u_rotationColor",this.h.rotation),this.ut.TA(0,0,r,i),this.Ce.end(),this.le.begin(),this.ut.kA(),this.ut.wA(this.be),this.ut.YA("u_colorSampleFramebuffer",this.Me),this.ut.YA("u_charPaletteTexture",this.fe.framebuffer),this.ut.YA("u_charPaletteSize",[this.fe.colors.length,1]),this.ut.YA("u_brightnessRange",this.h.brightnessRange),this.ut.TA(0,0,r,i),this.le.end()}re(){super.re(),this.Me.resize(this.he.cols,this.he.rows)}brightnessRange(s){I.C(Array.isArray(s)&&s.length===2&&s.every(r=>typeof r=="number"&&r>=0&&r<=255),"Brightness range must be an array of two numbers between 0 and 255.",{method:"brightnessRange",providedValue:s})&&(this.h.brightnessRange=s)}}const wA=Object.freeze(Object.defineProperty({__proto__:null,BRIGHTNESS_DEFAULT_OPTIONS:iA,TextmodeBrightnessConverter:N,TextmodeConverter:R,TextmodeFeatureConverter:V},Symbol.toStringTag,{value:"Module"}));class BA{constructor(e,s,r){n(this,"ut");n(this,"bt");n(this,"he");n(this,"Fe");n(this,"$e");n(this,"Ye");n(this,"Te");n(this,"Se");n(this,"le");n(this,"ce");n(this,"De");n(this,"Ce");n(this,"ue");this.ut=e,this.bt=s,this.he=r,this.Se=this.ut.FA(S,"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 sampler2D u_captureTexture;uniform vec2 u_captureDimensions;uniform int u_backgroundMode;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;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_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);if(encodedIndexVec.a<0.01){gl_FragColor=(u_backgroundMode==0)? vec4(0.0):texture2D(u_captureTexture,gl_FragCoord.xy/u_captureDimensions);return;}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.$e=new N(e,s,r),this.Ye=new R(e,s,r),this.Fe=[this.$e,this.Ye],this.le=this.ut.UA(r.cols,r.rows),this.ce=this.ut.UA(r.cols,r.rows),this.De=this.ut.UA(r.cols,r.rows),this.Ce=this.ut.UA(r.cols,r.rows),this.ue=this.ut.UA(r.cols,r.rows),this.Te=this.ut.UA(this.he.width,this.he.height)}Oe(e){for(const r of this.Fe)r.options.enabled&&r instanceof V&&r.Ge(e);const s=(r,i)=>{r.begin(),this.ut.kA();for(const B of this.Fe)B.options.enabled&&this.ut.HA(i(B),0,0);r.end()};s(this.le,r=>r.characterFramebuffer),s(this.ce,r=>r.primaryColorFramebuffer),s(this.De,r=>r.secondaryColorFramebuffer),s(this.Ce,r=>r.rotationFramebuffer),s(this.ue,r=>r.transformFramebuffer),this.Te.begin(),this.ut.kA(),this.ut.wA(this.Se),this.ut.YA("u_characterTexture",this.bt.fontFramebuffer),this.ut.YA("u_charsetDimensions",[this.bt.textureColumns,this.bt.textureRows]),this.ut.YA("u_asciiCharacterTexture",this.le),this.ut.YA("u_primaryColorTexture",this.ce),this.ut.YA("u_secondaryColorTexture",this.De),this.ut.YA("u_transformTexture",this.ue),this.ut.YA("u_rotationTexture",this.Ce),this.ut.YA("u_captureTexture",e),this.ut.YA("u_backgroundMode",!1),this.ut.YA("u_captureDimensions",[e.width,e.height]),this.ut.YA("u_gridCellDimensions",[this.he.cols,this.he.rows]),this.ut.YA("u_gridPixelDimensions",[this.he.width,this.he.height]),this.ut.TA(0,0,this.Te.width,this.Te.height),this.Te.end()}add(e){if(!I.C(e==="brightness"||e==="custom",'Converter type must be either "brightness" or "custom".',{method:"add",providedValue:e}))return;let s;return s=e==="brightness"?new N(this.ut,this.bt,this.he):new R(this.ut,this.bt,this.he),this.Fe.push(s),s}remove(e){if(!I.C(e instanceof R,"Parameter must be a TextmodeConverter instance.",{method:"remove",providedValue:e}))return;const s=this.Fe.indexOf(e);I.C(s!==-1,"Converter instance not found in pipeline.",{method:"remove",providedValue:e,convertersCount:this.Fe.length})&&this.Fe.splice(s,1)}swap(e,s){const r=(E,g)=>{if(typeof E=="number")return I.C(Number.isInteger(E)&&E>=0&&E<this.Fe.length,g+" index must be a valid integer within the converter array bounds.",{method:"swap",providedValue:E,convertersCount:this.Fe.length})?E:null;if(E instanceof R){const h=this.Fe.indexOf(E);return I.C(h!==-1,g+" converter instance not found in pipeline.",{method:"swap",providedValue:E,convertersCount:this.Fe.length})?h:null}return I.C(!1,g+" parameter must be either an integer index or a TextmodeConverter instance.",{method:"swap",providedValue:E}),null},i=r(e,"First"),B=r(s,"Second");if(i===null||B===null||!I.C(i!==B,"Cannot swap a converter with itself.",{method:"swap",firstIndex:i,secondIndex:B}))return;const o=this.Fe[i];this.Fe[i]=this.Fe[B],this.Fe[B]=o}re(){this.Te.resize(this.he.width,this.he.height);const e=this.he.cols,s=this.he.rows;this.le.resize(e,s),this.ce.resize(e,s),this.De.resize(e,s),this.Ce.resize(e,s),this.ue.resize(e,s);for(const r of this.Fe)r.re()}hasEnabledConverters(){return this.Fe.some(e=>e.options.enabled)}disable(){for(const e of this.Fe)e.disable()}enable(){for(const e of this.Fe)e.enable()}O(){for(const e of this.Fe)e.O();this.le.O(),this.ce.O(),this.De.O(),this.Ce.O(),this.ue.O(),this.Te.O(),this.Se.O()}get texture(){return this.Te}get characterFramebuffer(){return this.le}get primaryColorFramebuffer(){return this.ce}get secondaryColorFramebuffer(){return this.De}get rotationFramebuffer(){return this.Ce}get transformFramebuffer(){return this.ue}get brightness(){return this.$e}get custom(){return this.Ye}}const pA=Q=>class extends Q{fill(e,s,r,i){this.ut.dA(e,s,r,i)}stroke(e,s,r,i){this.ut.mA(e,s,r,i)}strokeWeight(e){this.ut.pA(e)}noStroke(){this.ut._A()}noFill(){this.ut.vA()}rotate(e){this.ut.bA(e)}push(){this.ut.xA()}pop(){this.ut.yA()}rect(e,s,r=1,i=1){this.ut.TA(e,s,r,i)}line(e,s,r,i){this.ut.OA(e,s,r,i)}background(e,s=e,r=e,i=255){this.ut.RA(e,s,r,i)}createShader(e,s){return this.ut.FA(e,s)}createFilterShader(e){return this.ut.$A(e)}shader(e){this.ut.wA(e)}setUniform(e,s){this.ut.YA(e,s)}image(e,s,r,i,B){this.ut.HA(e,s,r,i,B)}clear(){this.ut.kA()}createFramebuffer(e,s,r={}){return this.ut.UA(e,s,r)}};class ${Ue(e){const s=e.characterFramebuffer,r=e.primaryColorFramebuffer,i=e.secondaryColorFramebuffer,B=e.transformFramebuffer,o=e.rotationFramebuffer;return s==null||s.loadPixels(),r==null||r.loadPixels(),i==null||i.loadPixels(),B==null||B.loadPixels(),o==null||o.loadPixels(),{characterPixels:(s==null?void 0:s.pixels)||new Uint8Array(0),primaryColorPixels:(r==null?void 0:r.pixels)||new Uint8Array(0),secondaryColorPixels:(i==null?void 0:i.pixels)||new Uint8Array(0),transformPixels:(B==null?void 0:B.pixels)||new Uint8Array(0),rotationPixels:(o==null?void 0:o.pixels)||new Uint8Array(0)}}Re(e,s){return e[s]+(e[s+1]<<8)}ke(e,s){return{r:e[s],g:e[s+1],b:e[s+2],a:e[s+3]}}}class z{Ve(e,s){return new Blob([e],{type:s})}He(e,s,r){try{const i=this.Ve(e,r),B=URL.createObjectURL(i),o=document.createElement("a");o.href=B,o.download=s,o.style.display="none",o.rel="noopener",document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(B)}catch(i){throw console.error("Failed to download file:",i),Error("File download failed: "+(i instanceof Error?i.message:"Unknown error"))}}ze(){return new Date().toISOString().slice(0,19).replace(/:/g,"-")}Le(){const e=new Date;return{date:e.toISOString().split("T")[0],time:e.toTimeString().split(" ")[0].replace(/:/g,"-")}}Je(e){return e.replace(/[<>:"/\\|?*]/g,"_").replace(/\s+/g,"_").replace(/_{2,}/g,"_").replace(/^_+|_+$/g,"").substring(0,255)}je(){return"'textmode-export'-"+this.ze()}}class mA extends ${Ke(e,s,r){const i=e[r]===255,B=e[r+1]===255,o=e[r+2]===255,E=s[r],g=s[r+1];return{isInverted:i,flipHorizontal:B,flipVertical:o,rotation:Math.round(360*(E+g/255)/255*100)/100}}We(e,s,r){return{x:e,y:s,cellX:e*r.cellWidth,cellY:s*r.cellHeight}}Ne(e,s){const r=[];let i=0;for(let B=0;B<s.rows;B++)for(let o=0;o<s.cols;o++){const E=4*i,g=this.Re(e.characterPixels,E);let h=this.ke(e.primaryColorPixels,E),a=this.ke(e.secondaryColorPixels,E);const c=this.Ke(e.transformPixels,e.rotationPixels,E);if(c.isInverted){const D=h;h=a,a=D}const l=this.We(o,B,s);r.push({charIndex:g,primaryColor:h,secondaryColor:a,transform:c,position:l}),i++}return r}}class bA{Ze(e,s){const r=e.cmap;for(const i of r.tables)if(i.format===4){const B=i;for(let o=0;o<B.startCount.length;o++)if(s>=B.startCount[o]&&s<=B.endCount[o]){if(B.idRangeOffset[o]===0)return s+B.idDelta[o]&65535;{const E=B.idRangeOffset[o]/2+(s-B.startCount[o])-(B.startCount.length-o);if(E>=0&&E<B.glyphIdArray.length){const g=B.glyphIdArray[E];if(g!==0)return g+B.idDelta[o]&65535}}}}else if(i.format===12){const B=i;for(let o=0;o<B.groups.length;o+=3){const E=B.groups[o],g=B.groups[o+1],h=B.groups[o+2];if(s>=E&&s<=g)return h+(s-E)}}return 0}Xe(e,s,r,i,B){const o=B/e.head.unitsPerEm;return{getBoundingBox:()=>({x1:r+s.xMin*o,y1:i+-s.yMax*o,x2:r+s.xMax*o,y2:i+-s.yMin*o}),toSVG:()=>this.qe(s,r,i,o)}}qe(e,s,r,i){if(!e||!e.xs)return"";const{xs:B,ys:o,endPts:E,flags:g}=e;if(!(B&&o&&E&&g))return"";let h="",a=0;for(let c=0;c<E.length;c++){const l=E[c];if(!(l<a)){if(l>=a){const D=s+B[a]*i,C=r-o[a]*i;h+=`M${D.toFixed(2)},${C.toFixed(2)}`;let u=a+1;for(;u<=l;)if(1&g[u]){const p=s+B[u]*i,f=r-o[u]*i;h+=`L${p.toFixed(2)},${f.toFixed(2)}`,u++}else{const p=s+B[u]*i,f=r-o[u]*i;let w=u+1>l?a:u+1;if(1&g[w]){const b=s+B[w]*i,y=r-o[w]*i;h+=`Q${p.toFixed(2)},${f.toFixed(2)} ${b.toFixed(2)},${y.toFixed(2)}`,u=w+1}else{const b=(p+(s+B[w]*i))/2,y=(f+(r-o[w]*i))/2;h+=`Q${p.toFixed(2)},${f.toFixed(2)} ${b.toFixed(2)},${y.toFixed(2)}`,u=w}}h+="Z"}a=l+1}}return h}As(e,s,r,i,B){const o=e.codePointAt(0)||0,E=this.Ze(s,o);let g=null;return s.glyf&&s.glyf[E]!==null?g=s.glyf[E]:(g=v.T.glyf.zA(s,E),s.glyf[E]=g),this.Xe(s,g,r,i,B)}ts(e,s,r,i,B,o,E,g){const h=r+(B-g*(E/s.head.unitsPerEm))/2,a=i+(o+.7*E)/2;return this.As(e,s,h,a,E).toSVG()||null}}class xA{constructor(){n(this,"es");this.es=new bA}ss(e){return`<?xml version="1.0" encoding="UTF-8" standalone="no"?>
7
+ `,r}static i(e){if(e===null)return"null";if(e===void 0)return"undefined";if(typeof e=="string")return`"${e}"`;if(typeof e=="number"||typeof e=="boolean")return e+"";if(Array.isArray(e))return e.length===0?"[]":e.length<=5?`[${e.map(B=>I.i(B)).join(", ")}]`:`[${e.slice(0,3).map(B=>I.i(B)).join(", ")}, ... +${e.length-3} more]`;if(typeof e=="object"){const B=Object.keys(e);return B.length===0?"{}":B.length<=3?`{ ${B.map(r=>`${r}: ${I.i(e[r])}`).join(", ")} }`:`{ ${B.slice(0,2).map(r=>`${r}: ${I.i(e[r])}`).join(", ")}, ... +${B.length-2} more }`}return e+""}}var R=(n=>(n[n.SILENT=0]="SILENT",n[n.WARNING=1]="WARNING",n[n.ERROR=2]="ERROR",n[n.THROW=3]="THROW",n))(R||{});const _=class _{constructor(){g(this,"h",{globalLevel:3})}static C(){return _.o||(_.o=new _),_.o}D(e,B){const r="%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.",i="color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";switch(this.h.globalLevel){case 0:return!1;case 1:return console.group(r,i),console.warn(I.A(e,B)),console.groupEnd(),!1;case 2:return console.group(r,i),console.error(I.A(e,B)),console.groupEnd(),!1;default:throw new I(e,B)}}l(e,B,r){return!!e||(this.D(B,r),!1)}P(e){this.h.globalLevel=e}};g(_,"o",null);let z=_;const M=z.C(),k=new WeakMap;function S(n,e){k.set(n,e)}function U(n){return k.get(n)}class J{constructor(e,B,r=B,i=1,s={}){g(this,"I");g(this,"u");g(this,"h");g(this,"p",null);g(this,"m");g(this,"_");g(this,"v",[]);g(this,"G");g(this,"$",null);g(this,"M",[]);this.I=B,this.u=r,this.h={filter:"nearest",wrap:"clamp",format:"rgba",type:"unsigned_byte",...s},this.m=e,this.G=Math.min(Math.max(1,i),8);const E=e.getParameter(e.MAX_DRAW_BUFFERS),Q=e.getParameter(e.MAX_COLOR_ATTACHMENTS);this.G=Math.min(this.G,E,Q),this._=e.createFramebuffer(),this.Y(),this.F(),this.M=Array(this.G).fill(null)}Y(){const e=this.m,B=this.h.filter==="linear"?e.LINEAR:e.NEAREST,r=this.h.wrap==="repeat"?e.REPEAT:e.CLAMP_TO_EDGE,i=this.h.type==="float"?e.FLOAT:e.UNSIGNED_BYTE;for(let s=0;s<this.G;s++){const E=e.createTexture();e.bindTexture(e.TEXTURE_2D,E),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,B),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,B),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,r),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,r),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,this.I,this.u,0,e.RGBA,i,null),this.v.push(E)}e.bindTexture(e.TEXTURE_2D,null)}F(){const e=this.m;if(e.bindFramebuffer(e.FRAMEBUFFER,this._),this.G===1)e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.v[0],0);else{const r=[];for(let i=0;i<this.G;i++){const s=e.COLOR_ATTACHMENT0+i;e.framebufferTexture2D(e.FRAMEBUFFER,s,e.TEXTURE_2D,this.v[i],0),r.push(s)}e.drawBuffers(r)}const B=e.checkFramebufferStatus(e.FRAMEBUFFER);B!==e.FRAMEBUFFER_COMPLETE&&console.error("GLFramebuffer is not complete:",B),e.bindFramebuffer(e.FRAMEBUFFER,null)}R(e){const B=this.m;B.bindTexture(B.TEXTURE_2D,this.v[0]),B.pixelStorei(B.UNPACK_FLIP_Y_WEBGL,1),B.texImage2D(B.TEXTURE_2D,0,B.RGBA,B.RGBA,B.UNSIGNED_BYTE,e),B.bindTexture(B.TEXTURE_2D,null)}S(e,B){this.I=e,this.u=B,this.p=null,this.M=Array(this.G).fill(null);const r=this.m,i=this.h.type==="float"?r.FLOAT:r.UNSIGNED_BYTE;for(const s of this.v)r.bindTexture(r.TEXTURE_2D,s),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,this.I,this.u,0,r.RGBA,i,null);r.bindTexture(r.TEXTURE_2D,null)}O(e){const B=this.m;if(e<0||e>=this.G)throw Error(`GLFramebuffer: attachment index ${e} out of range (count=${this.G})`);const r=this.M[e];if(r)return r;const i=this.I,s=this.u,E=new Uint8Array(i*s*4),Q=B.getParameter(B.READ_FRAMEBUFFER_BINDING);B.bindFramebuffer(B.READ_FRAMEBUFFER,this._),B.readBuffer(B.COLOR_ATTACHMENT0+e),B.readPixels(0,0,i,s,B.RGBA,B.UNSIGNED_BYTE,E),B.bindFramebuffer(B.READ_FRAMEBUFFER,Q);const o=4*i,a=new Uint8Array(E.length);for(let h=0;h<s;h++){const c=(s-1-h)*o,l=h*o;a.set(E.subarray(c,c+o),l)}return this.M[e]=a,a}L(){for(let e=0;e<this.G;e++)this.O(e)}U(){const e=this.m;this.$={framebuffer:e.getParameter(e.FRAMEBUFFER_BINDING),viewport:e.getParameter(e.VIEWPORT)},e.bindFramebuffer(e.FRAMEBUFFER,this._),this.M=Array(this.G).fill(null);for(let B=0;B<this.G;B++)e.clearBufferfv(e.COLOR,B,new Float32Array([0,0,0,0]));e.viewport(0,0,this.I,this.u),S(e,[0,0,this.I,this.u])}k(){if(!this.$)return;const e=this.m;e.bindFramebuffer(e.FRAMEBUFFER,this.$.framebuffer),e.viewport(...this.$.viewport),S(e,this.$.viewport),this.$=null}W(){const e=this.m;this._&&e.deleteFramebuffer(this._);for(const B of this.v)e.deleteTexture(B);this.v=[],this.M=[]}get width(){return this.I}get height(){return this.u}get pixels(){return this.p}get options(){return{...this.h}}get framebuffer(){return this._}get texture(){return this.v[0]}get textures(){return[...this.v]}get attachmentCount(){return this.G}getAttachmentPixels(e){return this.M[e]??null}}class tA{constructor(e,B,r){g(this,"m");g(this,"H");g(this,"J",new Map);g(this,"V",new Map);g(this,"K",0);g(this,"j");this.m=e,this.H=this.Z(B,r),this.j=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),this.N()}N(){const e=this.m.getProgramParameter(this.H,this.m.ACTIVE_UNIFORMS);for(let B=0;B<e;B++){const r=this.m.getActiveUniform(this.H,B);if(r){const i=this.m.getUniformLocation(this.H,r.name);i&&(this.J.set(r.name,i),this.V.set(r.name,r.type))}}}Z(e,B){const r=this.X(this.m.VERTEX_SHADER,e),i=this.X(this.m.FRAGMENT_SHADER,B),s=this.m.createProgram();if(this.m.attachShader(s,r),this.m.attachShader(s,i),this.m.linkProgram(s),!this.m.getProgramParameter(s,this.m.LINK_STATUS)){const E=this.m.getProgramInfoLog(s);throw Error("Shader program link error: "+E)}return this.m.deleteShader(r),this.m.deleteShader(i),s}X(e,B){const r=this.m.createShader(e);if(this.m.shaderSource(r,B),this.m.compileShader(r),!this.m.getShaderParameter(r,this.m.COMPILE_STATUS)){const i=this.m.getShaderInfoLog(r);throw this.m.deleteShader(r),Error("Shader compilation error: "+i)}return r}q(){this.m.useProgram(this.H),this.AA()}AA(){this.K=0}tA(e){for(const[B,r]of Object.entries(e))this.eA(B,r)}eA(e,B){const r=this.J.get(e);if(r)if(typeof B=="number")this.m.uniform1f(r,B);else if(typeof B=="boolean")this.m.uniform1i(r,B?1:0);else if(Array.isArray(B))switch(B.length){case 2:this.m.uniform2f(r,B[0],B[1]);break;case 3:this.m.uniform3f(r,B[0],B[1],B[2]);break;case 4:this.m.uniform4f(r,B[0],B[1],B[2],B[3]);break;default:console.warn(`Unsupported array length ${B.length} for uniform '${e}'`)}else if(B instanceof WebGLTexture){const i=this.BA();this.m.uniform1i(r,i),this.m.activeTexture(this.m.TEXTURE0+i),this.m.bindTexture(this.m.TEXTURE_2D,B)}else if(B instanceof J){const i=this.BA();this.m.uniform1i(r,i),this.m.activeTexture(this.m.TEXTURE0+i),this.m.bindTexture(this.m.TEXTURE_2D,B.texture)}else if(typeof B=="object"&&"texture"in B){const i=this.BA();this.m.uniform1i(r,i),this.m.activeTexture(this.m.TEXTURE0+i),this.m.bindTexture(this.m.TEXTURE_2D,B.texture)}else console.warn(`Unsupported uniform type for '${e}':`,typeof B)}BA(){return this.K>=this.j&&console.warn(`Exceeded maximum texture units (${this.j}). Texture may not render correctly.`),this.K++}get QA(){return this.H}W(){this.m.deleteProgram(this.H)}}class eA{constructor(){g(this,"sA",1);g(this,"iA",0);g(this,"EA",[0,0,0]);g(this,"rA",[1,1,1,1]);g(this,"nA",[0,0,0,1]);g(this,"gA",!1);g(this,"oA",!1);g(this,"aA",!1);g(this,"hA",[0,0]);g(this,"cA",[])}CA(){this.cA.push({lineWeight:this.sA,rotation:this.iA,charRotation:[...this.hA],flipHorizontally:this.gA,flipVertically:this.oA,invert:this.aA,character:[...this.EA],charColor:[...this.rA],cellColor:[...this.nA]})}DA(){const e=this.cA.pop();e?(this.sA=e.lineWeight,this.iA=e.rotation,this.hA=e.charRotation,this.gA=e.flipHorizontally,this.oA=e.flipVertically,this.aA=e.invert,this.EA=e.character,this.rA=e.charColor,this.nA=e.cellColor):console.warn("pop() called without matching push()")}lA(){this.cA=[],this.iA=0}PA(e){e.lineWeight=this.sA,e.rotation=this.iA,e.character[0]=this.EA[0],e.character[1]=this.EA[1],e.character[2]=this.EA[2],e.charColor[0]=this.rA[0],e.charColor[1]=this.rA[1],e.charColor[2]=this.rA[2],e.charColor[3]=this.rA[3],e.bgColor[0]=this.nA[0],e.bgColor[1]=this.nA[1],e.bgColor[2]=this.nA[2],e.bgColor[3]=this.nA[3],e.flipHorizontally=this.gA,e.flipVertically=this.oA,e.invert=this.aA,e.charRotation[0]=this.hA[0],e.charRotation[1]=this.hA[1]}get lineWeight(){return this.sA}get rotation(){return this.iA}get character(){return this.EA}get charColor(){return this.rA}get bgColor(){return this.nA}get flipHorizontally(){return this.gA}get flipVertically(){return this.oA}get invert(){return this.aA}get charRotation(){return this.hA}IA(e){this.sA=Math.abs(e)}uA(e){this.iA=e}wA(e){this.EA=e}fA(e,B,r,i=255){this.rA=[e/255,B/255,r/255,i/255]}dA(e,B,r,i=255){this.nA=[e/255,B/255,r/255,i/255]}pA(e){this.gA=e}mA(e){this.oA=e}_A(e){this.aA=e}vA(e){const B=255*e/360,r=Math.floor(B)/255,i=Math.round(B-Math.floor(B));this.hA=[r,i]}}var u=(n=>(n.RECTANGLE="rectangle",n.LINE="line",n.ELLIPSE="ellipse",n.ARC="arc",n.TRIANGLE="triangle",n.BEZIER_CURVE="bezier_curve",n.CUSTOM="custom",n))(u||{});class BA{constructor(e){g(this,"m");g(this,"xA",new Map);this.m=e}yA(e,B,r,i){const s=this.m;let E=this.xA.get(e);E||(E=new Map,this.xA.set(e,E));let Q=E.get(B)||null;if(!Q){Q=s.createVertexArray(),E.set(B,Q),s.bindVertexArray(Q),s.bindBuffer(s.ARRAY_BUFFER,i);const o=s.getAttribLocation(e,"a_position");o!==-1&&(s.enableVertexAttribArray(o),s.vertexAttribPointer(o,r.attributes.position.size,s.FLOAT,!1,r.stride,r.attributes.position.offset),s.vertexAttribDivisor(o,0));const a=s.getAttribLocation(e,"a_texCoord");a!==-1&&(s.enableVertexAttribArray(a),s.vertexAttribPointer(a,r.attributes.texCoord.size,s.FLOAT,!1,r.stride,r.attributes.texCoord.offset),s.vertexAttribDivisor(a,0))}s.bindVertexArray(Q)}bA(){this.m.bindVertexArray(null)}W(){const e=this.m;for(const[,B]of this.xA)for(const[,r]of B)r&&e.deleteVertexArray(r);this.xA.clear()}}class rA{constructor(e){g(this,"GA");g(this,"m");this.m=e,this.GA=new BA(e)}$A(e,B,r){const{shader:i}=e,s=U(this.m)||this.m.getParameter(this.m.VIEWPORT);i.tA({u_aspectRatio:s[2]/s[3],u_viewportSize:[s[2],s[3]]});const E=a=>{if(!a||!a.MA())return;const h=a.unitGeometry,c=a.unitBuffer;try{this.GA.yA(i.QA,a.type+"",h,c),a.batch.YA(i),a.batch.TA(h.primitiveType,h.vertexCount)}finally{a.batch.zA(i),this.GA.bA(),a.FA()}};let Q=null,o=null;for(const a of B){Q!==null&&a.type!==Q&&(E(o),Q=null,o=null);let h=o;h&&a.type===Q||(h=r.get(a.type)||null,o=h,Q=a.type),h&&h.RA(a.params,a.state)}E(o)}}class iA{constructor(){g(this,"SA",[]);g(this,"OA",1);g(this,"LA",0)}UA(e){if(this.LA>=this.SA.length){const r={id:this.OA++,type:e,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]}};this.SA.push(r)}const B=this.SA[this.LA];switch(B.id=this.OA++,B.type=e,e){case u.RECTANGLE:case u.ELLIPSE:B.params&&"width"in B.params||(B.params={x:0,y:0,width:0,height:0});break;case u.ARC:B.params&&"start"in B.params||(B.params={x:0,y:0,width:0,height:0,start:0,stop:0});break;case u.LINE:B.params&&"x2"in B.params||(B.params={x1:0,y1:0,x2:0,y2:0,thickness:void 0});break;case u.TRIANGLE:B.params&&"x3"in B.params||(B.params={x1:0,y1:0,x2:0,y2:0,x3:0,y3:0});break;case u.BEZIER_CURVE:B.params&&"cp2y"in B.params||(B.params={x1:0,y1:0,cp1x:0,cp1y:0,cp2x:0,cp2y:0,x2:0,y2:0,thickness:void 0});break;default:B.params||(B.params={})}return this.LA++,B}kA(e,B,r,i,s){const E=this.UA(u.RECTANGLE);return E.params.x=e,E.params.y=B,E.params.width=r,E.params.height=i,s.PA(E.state),E.id}WA(e,B,r,i,s,E){const Q=this.UA(u.LINE);return Q.params.x1=e,Q.params.y1=B,Q.params.x2=r,Q.params.y2=i,Q.params.thickness=s,E.PA(Q.state),Q.id}HA(e,B,r,i,s){const E=this.UA(u.ELLIPSE);return E.params.x=e,E.params.y=B,E.params.width=r,E.params.height=i,s.PA(E.state),E.id}JA(e,B,r,i,s,E,Q){const o=this.UA(u.ARC);return o.params.x=e,o.params.y=B,o.params.width=r,o.params.height=i,o.params.start=s,o.params.stop=E,Q.PA(o.state),o.id}VA(e,B,r,i,s,E,Q){const o=this.UA(u.TRIANGLE);return o.params.x1=e,o.params.y1=B,o.params.x2=r,o.params.y2=i,o.params.x3=s,o.params.y3=E,Q.PA(o.state),o.id}KA(e,B,r,i,s,E,Q,o,a,h){const c=this.UA(u.BEZIER_CURVE);return c.params.x1=e,c.params.y1=B,c.params.cp1x=r,c.params.cp1y=i,c.params.cp2x=s,c.params.cp2y=E,c.params.x2=Q,c.params.y2=o,c.params.thickness=a,h.PA(c.state),c.id}get length(){return this.LA}get isEmpty(){return this.LA===0}jA(){this.LA=0}[Symbol.iterator](){let e=0;const B=this.LA,r=this.SA;return{next:()=>e<B?{value:r[e++],done:!1}:{value:void 0,done:!0}}}}const b=class b{static ZA(e,B,r=0){var E,Q,o,a,h,c,l,D,C,P;const i=B||new Float32Array(b.FLOATS_PER_INSTANCE);let s=r;return i[s++]=e.position[0],i[s++]=e.position[1],i[s++]=e.size[0],i[s++]=e.size[1],i[s++]=e.character[0],i[s++]=e.character[1],i[s++]=e.character[2],i[s++]=e.primaryColor[0],i[s++]=e.primaryColor[1],i[s++]=e.primaryColor[2],i[s++]=e.primaryColor[3],i[s++]=e.secondaryColor[0],i[s++]=e.secondaryColor[1],i[s++]=e.secondaryColor[2],i[s++]=e.secondaryColor[3],i[s++]=e.rotation[0],i[s++]=e.rotation[1],i[s++]=e.transform[0],i[s++]=e.transform[1],i[s++]=e.transform[2],i[s++]=e.globalRotation,i[s++]=e.rotationCenter[0],i[s++]=e.rotationCenter[1],i[s++]=((E=e.arcAngles)==null?void 0:E[0])||0,i[s++]=((Q=e.arcAngles)==null?void 0:Q[1])||0,i[s++]=((o=e.bezierControlPoint1)==null?void 0:o[0])||0,i[s++]=((a=e.bezierControlPoint1)==null?void 0:a[1])||0,i[s++]=((h=e.bezierControlPoint2)==null?void 0:h[0])||0,i[s++]=((c=e.bezierControlPoint2)==null?void 0:c[1])||0,i[s++]=((l=e.bezierStartPoint)==null?void 0:l[0])||0,i[s++]=((D=e.bezierStartPoint)==null?void 0:D[1])||0,i[s++]=((C=e.bezierEndPoint)==null?void 0:C[0])||0,i[s++]=((P=e.bezierEndPoint)==null?void 0:P[1])||0,i}static NA(e){const B=e.length*b.FLOATS_PER_INSTANCE,r=new Float32Array(B);for(let i=0;i<e.length;i++){const s=i*b.FLOATS_PER_INSTANCE;b.ZA(e[i],r,s)}return r}};g(b,"BYTES_PER_INSTANCE",132),g(b,"FLOATS_PER_INSTANCE",33);let T=b;const f=class f{};g(f,"STRIDE",T.BYTES_PER_INSTANCE),g(f,"ATTRIBUTES",{a_instancePosition:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:0,divisor:1},a_instanceSize:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:8,divisor:1},a_instanceCharacter:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:16,divisor:1},a_instancePrimaryColor:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:28,divisor:1},a_instanceSecondaryColor:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:44,divisor:1},a_instanceRotation:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:60,divisor:1},a_instanceTransform:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:68,divisor:1},a_instanceGlobalRotation:{location:-1,size:1,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:80,divisor:1},a_instanceRotationCenter:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:84,divisor:1},a_instanceArcAngles:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:92,divisor:1},a_instanceBezierCP1:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:100,divisor:1},a_instanceBezierCP2:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:108,divisor:1},a_instanceBezierStart:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:116,divisor:1},a_instanceBezierEnd:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:124,divisor:1}});let Y=f;class sA{constructor(e,B=1e3,r=1.5){g(this,"m");g(this,"XA",[]);g(this,"qA");g(this,"At");g(this,"tt",null);g(this,"et",!0);g(this,"Bt",0);g(this,"Qt",new Map);g(this,"st",null);this.m=e,this.qA=B,this.At=r,this.it()}RA(e){const B=this.XA.length;return this.XA.push(e),this.et=!0,B}get count(){return this.XA.length}get isEmpty(){return this.XA.length===0}clear(){this.XA.length=0,this.et=!0}Et(e){if(e<=this.qA)return;const B=Math.ceil(e*this.At);this.qA=B,this.it(),console.log(`InstanceBatch: Grew buffer capacity to ${B} instances`)}it(){const e=this.m;if(this.tt&&e.deleteBuffer(this.tt),this.tt=e.createBuffer(),!this.tt)throw Error("Failed to create instance buffer");const B=this.qA*T.BYTES_PER_INSTANCE;e.bindBuffer(e.ARRAY_BUFFER,this.tt),e.bufferData(e.ARRAY_BUFFER,B,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),this.et=!0,this.Bt=0}rt(){if(!this.et||this.XA.length===0)return;const e=this.m,B=this.XA.length;this.Et(B),(!this.st||this.st.length<B*T.FLOATS_PER_INSTANCE)&&(this.st=new Float32Array(B*T.FLOATS_PER_INSTANCE));const r=T.NA(this.XA);e.bindBuffer(e.ARRAY_BUFFER,this.tt),B<=this.Bt?e.bufferSubData(e.ARRAY_BUFFER,0,r):e.bufferData(e.ARRAY_BUFFER,r,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),this.et=!1,this.Bt=B}nt(e){let B=this.Qt.get(e);if(!B){B=new Map;const r=this.m;for(const i in Y.ATTRIBUTES){const s=r.getAttribLocation(e,i);s!==-1&&B.set(i,s)}this.Qt.set(e,B)}return B}YA(e){if(!this.tt||this.XA.length===0)return;const B=this.m,r=e.QA;if(!r)return void console.warn("InstanceBatch: Cannot bind attributes - invalid shader program");this.rt();const i=this.nt(r);B.bindBuffer(B.ARRAY_BUFFER,this.tt);for(const[s,E]of i){const Q=Y.ATTRIBUTES[s];Q&&(B.enableVertexAttribArray(E),B.vertexAttribPointer(E,Q.size,Q.type,Q.normalized,Q.stride,Q.offset),B.vertexAttribDivisor(E,Q.divisor))}}zA(e){const B=this.m,r=this.nt(e.QA);for(const[,i]of r)B.disableVertexAttribArray(i),B.vertexAttribDivisor(i,0)}TA(e,B){this.XA.length!==0&&this.m.drawArraysInstanced(e,0,B,this.XA.length)}W(){const e=this.m;this.tt&&(e.deleteBuffer(this.tt),this.tt=null),this.XA.length=0,this.Qt.clear(),this.st=null}}class G{constructor(e,B,r,i){g(this,"m");g(this,"gt");g(this,"ot");g(this,"ht");g(this,"ct",null);this.m=e,this.gt=B,this.ot=r,this.ht=i;const s=this.m.createBuffer();if(!s)throw Error("Failed to create unit geometry buffer");this.m.bindBuffer(this.m.ARRAY_BUFFER,s),this.m.bufferData(this.m.ARRAY_BUFFER,this.ht.vertices,this.m.STATIC_DRAW),this.m.bindBuffer(this.m.ARRAY_BUFFER,null),this.ct=s}get type(){return this.ot}get unitGeometry(){return this.ht}get unitBuffer(){return this.ct}get batch(){return this.gt}FA(){this.gt.clear()}MA(){return!this.gt.isEmpty}W(){this.gt.W(),this.ct&&(this.m.deleteBuffer(this.ct),this.ct=null)}Ct(e,B,r,i,s){const E=this.Dt(e,B,r,i,s.rotation||0);return{position:[e,B],size:[r,i],character:s.character||[0,0,0],primaryColor:s.charColor||[1,1,1,1],secondaryColor:s.bgColor||[0,0,0,1],rotation:s.charRotation||[0,0],transform:[s.invert?1:0,s.flipHorizontally?1:0,s.flipVertically?1:0],globalRotation:E.radians,rotationCenter:[E.centerX,E.centerY]}}lt(e,B){const r=U(this.m)||[0,0,this.m.canvas.width,this.m.canvas.height];return{nx:e/r[2]*2-1,ny:1-B/r[3]*2}}Pt(e,B,r){const i=this.lt(B,r);e.rotationCenter=[i.nx,i.ny]}Dt(e,B,r,i,s){const E=U(this.m)||[0,0,this.m.canvas.width,this.m.canvas.height],Q=E[2],o=E[3];return{centerX:(e+r/2)/Q*2-1,centerY:1-(B+i/2)/o*2,radians:-s*Math.PI/180,aspectRatio:Q/o}}}const EA={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}}};class QA extends G{constructor(e,B){super(e,B,u.RECTANGLE,EA)}RA(e,B){const r=this.Ct(e.x,e.y,e.width,e.height,B);return this.gt.RA(r)}}const nA={vertices:new Float32Array([0,-.5,0,0,1,-.5,1,0,0,.5,0,1,0,.5,0,1,1,-.5,1,0,1,.5,1,1]),vertexCount:6,primitiveType:WebGL2RenderingContext.TRIANGLES,stride:16,attributes:{position:{size:2,offset:0},texCoord:{size:2,offset:8}}};class oA extends G{constructor(e,B){super(e,B,u.LINE,nA)}RA(e,B){const r=e.x2-e.x1,i=e.y2-e.y1,s=Math.hypot(r,i),E=Math.atan2(i,r),Q=e.thickness||B.lineWeight||1,o=e.x1+r/2,a=e.y1+i/2,h=o-s/2,c=a,l={character:B.character,charColor:B.charColor,bgColor:B.bgColor,charRotation:B.charRotation,flipHorizontally:B.flipHorizontally,flipVertically:B.flipVertically,invert:B.invert,rotation:(B.rotation||0)+180*E/Math.PI,lineWeight:Q},D=this.Ct(h,c,s,Q,l);return this.Pt(D,o,a),this.gt.RA(D)}}const gA={vertices:function(n=32){const e=[],B=2*Math.PI/n;for(let r=0;r<n;r++){const i=r*B,s=(r+1)%n*B,E=Math.cos(i),Q=Math.sin(i),o=.5*(E+1),a=.5*(Q+1),h=Math.cos(s),c=Math.sin(s),l=.5*(h+1),D=.5*(c+1);e.push(0,0,.5,.5,E,Q,o,a,h,c,l,D)}return new Float32Array(e)}(32),vertexCount:96,primitiveType:WebGL2RenderingContext.TRIANGLES,stride:16,attributes:{position:{size:2,offset:0},texCoord:{size:2,offset:8}}};class aA extends G{constructor(e,B){super(e,B,u.ELLIPSE,gA)}RA(e,B){const r=this.Ct(e.x,e.y,e.width,e.height,B);return this.Pt(r,e.x,e.y),this.gt.RA(r)}}let hA={vertices:function(n){const e=[];for(let B=0;B<n;B++){const r=B/n,i=(B+1)/n;e.push(r,0,r,0,r,1,r,1,i,1,i,1)}return new Float32Array(e)}(32),vertexCount:96,primitiveType:WebGL2RenderingContext.TRIANGLES,stride:16,attributes:{position:{size:2,offset:0},texCoord:{size:2,offset:8}}};class cA extends G{constructor(e,B){super(e,B,u.ARC,hA)}RA(e,B){const r=e.x-e.width/2,i=e.y-e.height/2,s=e.start*Math.PI/180,E=e.stop*Math.PI/180,Q=this.Ct(r,i,e.width,e.height,B);return this.Pt(Q,e.x,e.y),Q.arcAngles=[s,E],this.gt.RA(Q)}}const lA={vertices:new Float32Array([0,0,0,0,1,0,1,0,.5,1,.5,1]),vertexCount:3,primitiveType:WebGL2RenderingContext.TRIANGLES,stride:16,attributes:{position:{size:2,offset:0},texCoord:{size:2,offset:8}}};class CA extends G{constructor(e,B){super(e,B,u.TRIANGLE,lA)}RA(e,B){const r=Math.min(e.x1,e.x2,e.x3),i=Math.max(e.x1,e.x2,e.x3),s=Math.min(e.y1,e.y2,e.y3),E=i-r,Q=Math.max(e.y1,e.y2,e.y3)-s,o=this.Ct(r,s,E,Q,B),a=r+.5*E,h=s+Q*(1/3);return this.Pt(o,a,h),this.gt.RA(o)}}function H(n,e,B,r,i){const s=1-n,E=s*s,Q=n*n;return E*s*e+3*E*n*B+3*s*Q*r+Q*n*i}const DA={vertices:function(n=16){const e=[];for(let B=0;B<n;B++){const r=B/n,i=(B+1)/n;e.push(r,-.5,r,0),e.push(i,-.5,i,0),e.push(r,.5,r,1),e.push(r,.5,r,1),e.push(i,-.5,i,0),e.push(i,.5,i,1)}return new Float32Array(e)}(16),vertexCount:96,primitiveType:WebGL2RenderingContext.TRIANGLES,stride:16,attributes:{position:{size:2,offset:0},texCoord:{size:2,offset:8}}};class PA extends G{constructor(e,B){super(e,B,u.BEZIER_CURVE,DA)}RA(e,B){const r=B.lineWeight||1,i=H(.5,e.x1,e.cp1x,e.cp2x,e.x2),s=H(.5,e.y1,e.cp1y,e.cp2y,e.y2),E={character:B.character,charColor:B.charColor,bgColor:B.bgColor,charRotation:B.charRotation,flipHorizontally:B.flipHorizontally,flipVertically:B.flipVertically,invert:B.invert,rotation:B.rotation||0,lineWeight:r},Q=this.Ct(0,0,1,r,E);return this.Pt(Q,i,s),Q.bezierStartPoint=[e.x1,e.y1],Q.bezierControlPoint1=[e.cp1x,e.cp1y],Q.bezierControlPoint2=[e.cp2x,e.cp2y],Q.bezierEndPoint=[e.x2,e.y2],this.gt.RA(Q)}}class uA{constructor(e){g(this,"m");g(this,"It",null);g(this,"ut",null);g(this,"wt",null);g(this,"ft",new Map);g(this,"dt");g(this,"_t");g(this,"vt");this.m=e,this.vt=new eA,this.dt=new rA(e),this._t=new iA,this.ut=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,this.ut),e.bufferData(e.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]),e.STATIC_DRAW),this.wt=e.createBuffer(),this.m.enable(this.m.BLEND),this.m.blendEquation(this.m.FUNC_ADD),this.m.blendFunc(this.m.ONE,this.m.ONE_MINUS_SRC_ALPHA),S(this.m,[0,0,this.m.canvas.width,this.m.canvas.height])}xt(e){let B=this.ft.get(e);if(B)return B;const r=new sA(this.m);return B=(0,{[u.RECTANGLE]:()=>new QA(this.m,r),[u.LINE]:()=>new oA(this.m,r),[u.ELLIPSE]:()=>new aA(this.m,r),[u.ARC]:()=>new cA(this.m,r),[u.TRIANGLE]:()=>new CA(this.m,r),[u.BEZIER_CURVE]:()=>new PA(this.m,r)}[e])(),this.ft.set(e,B),B}yt(e){this.It!==e&&(this.It=e,e.q())}bt(e,B){return new tA(this.m,e,B)}Gt(e,B,r,i){var P;const s=this.m,E=s.canvas.width,Q=s.canvas.height,o=e/E*2-1,a=(e+r)/E*2-1,h=1-B/Q*2,c=1-(B+i)/Q*2,l=new Float32Array([o,c,a,c,o,h,a,c,a,h,o,h]);s.bindBuffer(s.ARRAY_BUFFER,this.wt),s.bufferData(s.ARRAY_BUFFER,l,s.DYNAMIC_DRAW);const D=((P=this.It)==null?void 0:P.QA)||s.getParameter(s.CURRENT_PROGRAM),C=D?s.getAttribLocation(D,"a_position"):-1;C!==-1&&(s.enableVertexAttribArray(C),s.vertexAttribPointer(C,2,s.FLOAT,!1,8,0)),s.drawArrays(s.TRIANGLES,0,6),C!==-1&&s.disableVertexAttribArray(C)}$t(e,B,r,i){this._t.kA(e,B,r,i,this.vt)}Mt(e,B,r,i){this._t.WA(e,B,r,i,this.vt.lineWeight,this.vt)}Yt(e,B,r,i){this._t.HA(e,B,r,i,this.vt)}Tt(e,B,r,i,s,E){this._t.VA(e,B,r,i,s,E,this.vt)}zt(e,B,r,i,s,E,Q,o){const a=this.vt.lineWeight;this._t.KA(e,B,r,i,s,E,Q,o,a,this.vt)}Ft(e,B,r=1,i={}){return new J(this.m,e,B,r,i)}Rt(e,B,r,i,s,E){this._t.JA(e,B,r,i,s,E,this.vt)}St(e,B=e,r=e,i=255){this.jA(e/255,B/255,r/255,i/255)}jA(e=0,B=0,r=0,i=0){this.m.clearColor(e,B,r,i),this.m.clear(this.m.COLOR_BUFFER_BIT)}Ot(){this.m.viewport(0,0,this.m.canvas.width,this.m.canvas.height),S(this.m,[0,0,this.m.canvas.width,this.m.canvas.height])}get context(){return this.m}get state(){return this.vt}Lt(e){const B=U(this.m)??this.m.getParameter(this.m.VIEWPORT),r={shader:e,gl:this.m,viewport:B},i=new Set;for(const s of this._t)i.add(s.type);for(const s of i)this.xt(s);this.dt.$A(r,this._t,this.ft),this._t.jA()}W(){this.m.deleteBuffer(this.ut),this.m.deleteBuffer(this.wt),this._t.jA();for(const e of this.ft.values())e.W()}}const w={readShort:(n,e)=>(w.t.uint16[0]=n[e]<<8|n[e+1],w.t.int16[0]),readUshort:(n,e)=>n[e]<<8|n[e+1],readUshorts(n,e,B){const r=[];for(let i=0;i<B;i++)r.push(w.readUshort(n,e+2*i));return r},readUint(n,e){const B=w.t.uint8;return B[3]=n[e],B[2]=n[e+1],B[1]=n[e+2],B[0]=n[e+3],w.t.uint32[0]},readASCII(n,e,B){let r="";for(let i=0;i<B;i++)r+=String.fromCharCode(n[e+i]);return r},t:(()=>{const n=new ArrayBuffer(8);return{uint8:new Uint8Array(n),int16:new Int16Array(n),uint16:new Uint16Array(n),uint32:new Uint32Array(n)}})()},IA={parseTab(n,e,B){const r={tables:[],ids:{},off:e};n=new Uint8Array(n.buffer,e,B),e=0;const i=w,s=i.readUshort,E=s(n,e+=2);e+=2;const Q=[];for(let o=0;o<E;o++){const a=s(n,e),h=s(n,e+=2);e+=2;const c=i.readUint(n,e);e+=4;const l=`p${a}e${h}`;let D=Q.indexOf(c);if(D===-1){let C;D=r.tables.length,Q.push(c);const P=s(n,c);C=P===4?this.parse4(n,c):P===12?this.parse12(n,c):{format:P},r.tables.push(C)}r.ids[l]!=null&&console.warn("Multiple tables for one platform+encoding: "+l),r.ids[l]=D}return r},parse4(n,e){const B=w,r=B.readUshort,i=B.readUshorts,s=e,E=r(n,e+=2);e+=2;const Q=r(n,e+=2)>>>1,o={format:4,searchRange:r(n,e+=2),entrySelector:0,rangeShift:0,endCount:[],startCount:[],idDelta:[],idRangeOffset:[],glyphIdArray:[]};e+=2,o.entrySelector=r(n,e),e+=2,o.rangeShift=r(n,e),e+=2,o.endCount=i(n,e,Q),e+=2*Q,e+=2,o.startCount=i(n,e,Q),e+=2*Q;for(let a=0;a<Q;a++)o.idDelta.push(B.readShort(n,e)),e+=2;return o.idRangeOffset=i(n,e,Q),e+=2*Q,o.glyphIdArray=i(n,e,s+E-e>>1),o},parse12(n,e){const B=w.readUint;B(n,e+=4),B(n,e+=4);const r=B(n,e+=4);e+=4;const i=new Uint32Array(3*r);for(let s=0;s<3*r;s+=3)i[s]=B(n,e+(s<<2)),i[s+1]=B(n,e+(s<<2)+4),i[s+2]=B(n,e+(s<<2)+8);return{format:12,groups:i}}},fA={parseTab(n,e,B){const r=w;e+=18;const i=r.readUshort(n,e);e+=2,e+=16;const s=r.readShort(n,e);e+=2;const E=r.readShort(n,e);e+=2;const Q=r.readShort(n,e);e+=2;const o=r.readShort(n,e);return e+=2,e+=6,{unitsPerEm:i,xMin:s,yMin:E,xMax:Q,yMax:o,indexToLocFormat:r.readShort(n,e)}}},dA={parseTab(n,e,B){const r=w;e+=4;const i=["ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","res0","res1","res2","res3","metricDataFormat","numberOfHMetrics"],s={};for(let E=0;E<i.length;E++){const Q=i[E],o=Q==="advanceWidthMax"||Q==="numberOfHMetrics"?r.readUshort:r.readShort;s[Q]=o(n,e+2*E)}return s}},wA={parseTab(n,e,B,r){const i=w,s=[],E=[],Q=r.maxp.numGlyphs,o=r.hhea.numberOfHMetrics;let a=0,h=0,c=0;for(;c<o;)a=i.readUshort(n,e+(c<<2)),h=i.readShort(n,e+(c<<2)+2),s.push(a),E.push(h),c++;for(;c<Q;)s.push(a),E.push(h),c++;return{aWidth:s,lsBearing:E}}},$={cmap:IA,head:fA,hhea:dA,maxp:{parseTab(n,e,B){const r=w;return r.readUint(n,e),e+=4,{numGlyphs:r.readUshort(n,e)}}},hmtx:wA,loca:{parseTab(n,e,B,r){const i=w,s=[],E=r.head.indexToLocFormat,Q=r.maxp.numGlyphs+1;if(E===0)for(let o=0;o<Q;o++)s.push(i.readUshort(n,e+(o<<1))<<1);else if(E===1)for(let o=0;o<Q;o++)s.push(i.readUint(n,e+(o<<2)));return s}},glyf:{parseTab(n,e,B,r){const i=[],s=r.maxp.numGlyphs;for(let E=0;E<s;E++)i.push(null);return i},Ut(n,e){const B=w,r=n.kt,i=n.loca;if(i[e]===i[e+1])return null;const s=x.findTable(r,"glyf",n.Wt);if(!s)return null;let E=s[0]+i[e];const Q={};if(Q.noc=B.readShort(r,E),E+=2,Q.xMin=B.readShort(r,E),E+=2,Q.yMin=B.readShort(r,E),E+=2,Q.xMax=B.readShort(r,E),E+=2,Q.yMax=B.readShort(r,E),E+=2,Q.xMin>=Q.xMax||Q.yMin>=Q.yMax)return null;if(Q.noc>0){Q.endPts=[];for(let l=0;l<Q.noc;l++)Q.endPts.push(B.readUshort(r,E)),E+=2;const o=B.readUshort(r,E);if(E+=2,r.length-E<o)return null;E+=o;const a=Q.endPts[Q.noc-1]+1;Q.flags=[];for(let l=0;l<a;l++){const D=r[E];if(E++,Q.flags.push(D),8&D){const C=r[E];E++;for(let P=0;P<C;P++)Q.flags.push(D),l++}}Q.xs=[];for(let l=0;l<a;l++){const D=Q.flags[l],C=!!(16&D);2&D?(Q.xs.push(C?r[E]:-r[E]),E++):C?Q.xs.push(0):(Q.xs.push(B.readShort(r,E)),E+=2)}Q.ys=[];for(let l=0;l<a;l++){const D=Q.flags[l],C=!!(32&D);4&D?(Q.ys.push(C?r[E]:-r[E]),E++):C?Q.ys.push(0):(Q.ys.push(B.readShort(r,E)),E+=2)}let h=0,c=0;for(let l=0;l<a;l++)h+=Q.xs[l],c+=Q.ys[l],Q.xs[l]=h,Q.ys[l]=c}else Q.parts=[],Q.endPts=[],Q.flags=[],Q.xs=[],Q.ys=[];return Q}}},x={parse:n=>[((e,B,r,i)=>{const s=$,E={kt:e,Ht:B,Wt:r};for(const Q in s){const o=Q,a=x.findTable(e,o,r);if(a){const[h,c]=a;let l=i[h];l==null&&(l=s[o].parseTab(e,h,c,E),i[h]=l),E[o]=l}}return E})(new Uint8Array(n),0,0,{})],findTable(n,e,B){const r=w,i=r.readUshort(n,B+4);let s=B+12;for(let E=0;E<i;E++){const Q=r.readASCII(n,s,4);r.readUint(n,s+4);const o=r.readUint(n,s+8),a=r.readUint(n,s+12);if(Q===e)return[o,a];s+=16}return null},T:$,B:w};class O{constructor(){g(this,"Jt",new Map);g(this,"Vt",new Map)}Kt(e,B){const r=`${this.jt(e)}_${B}`;if(this.Jt.has(r))return this.Jt.get(r);const i=e.cmap;if(!i||!i.tables)return this.Jt.set(r,0),0;let s=0;for(const E of i.tables)if(E.format===4?s=this.Zt(B,E):E.format===12&&(s=this.Nt(B,E)),s>0)break;return this.Jt.set(r,s),s}Xt(e,B){const r=B.codePointAt(0);return r===void 0?0:this.Kt(e,r)}qt(e,B){const r=e.hmtx;return r&&r.aWidth&&r.aWidth.length!==0?B<r.aWidth.length?r.aWidth[B]:r.aWidth[r.aWidth.length-1]:0}Ae(e,B){const r=B/e.head.unitsPerEm,i=e.hhea.ascender*r,s=e.hhea.descender*r,E=e.hhea.lineGap*r;return{ascender:i,descender:s,lineGap:E,lineHeight:i-s+E,unitsPerEm:e.head.unitsPerEm,scale:r}}te(){this.Jt.clear(),this.Vt.clear()}jt(e){return`${e.Wt}_${e.kt.length}`}Zt(e,B){const r=B.endCount.length;let i=-1;for(let s=0;s<r;s++)if(e<=B.endCount[s]){i=s;break}if(i===-1||e<B.startCount[i])return 0;if(B.idRangeOffset[i]===0)return e+B.idDelta[i]&65535;{const s=B.idRangeOffset[i]/2+(e-B.startCount[i])-(r-i);if(s>=0&&s<B.glyphIdArray.length){const E=B.glyphIdArray[s];return E===0?0:E+B.idDelta[i]&65535}}return 0}Nt(e,B){const r=B.groups.length/3;for(let i=0;i<r;i++){const s=B.groups[3*i],E=B.groups[3*i+1],Q=B.groups[3*i+2];if(e>=s&&e<=E)return Q+(e-s)}return 0}}class mA{constructor(e){g(this,"ee");this.ee=e}Be(e){var r;const B=[];return(r=e.cmap)!=null&&r.tables?(e.cmap.tables.forEach(i=>{if(i.format===4){const s=this.Qe(i);B.push(...s)}else if(i.format===12){const s=this.se(i);B.push(...s)}}),[...new Set(B)]):[]}ie(e,B){return this.ee.Xt(e,B)>0}Ee(e,B){for(const r of B)if(!this.ie(e,r))return!1;return!0}re(e,B){return B.filter(r=>this.ie(e,r))}ne(e){return e.filter(B=>this.ge(B))}Qe(e){const B=[];if(!(e.startCount&&e.endCount&&e.idRangeOffset&&e.idDelta))return B;for(let r=0;r<e.startCount.length;r++){const i=e.startCount[r],s=e.endCount[r];if(i!==65535||s!==65535){for(let E=i;E<=s;E++)if(this.oe(e,E,r)>0)try{const Q=String.fromCodePoint(E);B.push(Q)}catch{}}}return B}se(e){const B=[];if(!e.groups)return B;for(let r=0;r<e.groups.length;r+=3){const i=e.groups[r],s=e.groups[r+1],E=e.groups[r+2];for(let Q=i;Q<=s;Q++)if(E+(Q-i)>0)try{const o=String.fromCodePoint(Q);B.push(o)}catch{}}return B}oe(e,B,r){if(e.idRangeOffset[r]===0)return B+e.idDelta[r]&65535;{const i=e.idRangeOffset[r]/2+(B-e.startCount[r])-(e.startCount.length-r);if(i>=0&&e.glyphIdArray&&i<e.glyphIdArray.length){const s=e.glyphIdArray[i];if(s!==0)return s+e.idDelta[r]&65535}}return 0}ge(e){const B=e.codePointAt(0)||0;return!(B>=0&&B<=31&&B!==9&&B!==10&&B!==13||B>=127&&B<=159)}}class pA{constructor(){g(this,"ae");const e=new O;this.ae=new mA(e)}extractCharacters(e){return this.ae.Be(e)}filterProblematicCharacters(e){return this.ae.ne(e)}characterExists(e,B){return this.ae.ie(e,B)}allCharactersExist(e,B){return this.ae.Ee(e,B)}}class yA{constructor(e){g(this,"he");g(this,"ce");g(this,"Ce");g(this,"De");this.Ce=e,this.De=new O,this.he=document.createElement("canvas"),this.ce=this.he.getContext("2d",{willReadFrequently:!0,alpha:!1})}createTextureAtlas(e,B,r,i){const s=e.length,E=Math.ceil(Math.sqrt(s)),Q=Math.ceil(s/E),o=B.width*E,a=B.height*Q,h=typeof i=="object"?i:null;this.le(o,a),this.Pe(e,B,E,r,h);const c=this.Ce.Ft(o,a,1,{filter:"nearest"});return c.R(this.he),{framebuffer:c,columns:E,rows:Q}}le(e,B){this.he.width=e,this.he.height=B,this.he.style.width=e+"px",this.he.style.height=e+"px",this.ce.imageSmoothingEnabled=!1,this.he.style.imageRendering="pixelated",this.ce.fillStyle="black",this.ce.fillRect(0,0,e,B),this.ce.textBaseline="top",this.ce.textAlign="left",this.ce.fillStyle="white"}Pe(e,B,r,i,s){const E=i/s.head.unitsPerEm;for(let Q=0;Q<e.length;Q++){const o=Q%r,a=Math.floor(Q/r),h=e[Q].character,c=this.Ie(s,h);if(!c)continue;const l=h.codePointAt(0)||0,D=this.De.Kt(s,l),C=this.ue(s,D)*E,P=o*B.width,p=a*B.height,m=P+.5*B.width,y=p+.5*B.height,v=Math.round(m-.5*B.width),F=Math.round(y-.5*i),KA=v+.5*(B.width-C),ZA=F+s.hhea.ascender*E;this.we(c,KA,ZA,E)}}Ie(e,B){const r=B.codePointAt(0)||0,i=this.De.Kt(e,r);if(i===0)return null;if(e.glyf&&e.glyf[i]!==null)return e.glyf[i];if(x&&x.T&&x.T.glyf){const s=x.T.glyf.Ut(e,i);return e.glyf&&s&&(e.glyf[i]=s),s}return null}ue(e,B){const r=e.hmtx;return r&&r.aWidth?B<r.aWidth.length?r.aWidth[B]:r.aWidth[r.aWidth.length-1]:0}we(e,B,r,i){if(!e||!e.xs||e.noc===0)return;const{xs:s,ys:E,endPts:Q,flags:o}=e;if(!(s&&E&&Q&&o))return;this.ce.beginPath();let a=0;for(let h=0;h<Q.length;h++){const c=Q[h];if(!(c<a)){if(c>=a){const l=B+s[a]*i,D=r-E[a]*i;this.ce.moveTo(l,D);let C=a+1;for(;C<=c;)if(1&o[C]){const P=B+s[C]*i,p=r-E[C]*i;this.ce.lineTo(P,p),C++}else{const P=B+s[C]*i,p=r-E[C]*i;let m=C+1>c?a:C+1;if(1&o[m]){const y=B+s[m]*i,v=r-E[m]*i;this.ce.quadraticCurveTo(P,p,y,v),C=m+1}else{const y=(P+(B+s[m]*i))/2,v=(p+(r-E[m]*i))/2;this.ce.quadraticCurveTo(P,p,y,v),C=m}}this.ce.closePath()}a=c+1}}this.ce.fill()}}class xA{constructor(){g(this,"ee");this.ee=new O}calculateMaxGlyphDimensions(e,B,r){let i=0;const s=this.ee.Ae(r,B),E=s.lineHeight;for(const Q of e){const o=this.ee.Xt(r,Q);if(o===0)continue;const a=this.ee.qt(r,o)*s.scale;i=Math.max(i,a)}return{width:Math.ceil(i),height:Math.ceil(E)}}getCharacterAdvanceWidth(e,B,r){const i=this.ee.Ae(r,B),s=this.ee.Xt(r,e);return this.ee.qt(r,s)*i.scale}getFontMetrics(e,B){return this.ee.Ae(B,e)}te(){this.ee.te()}}class vA{constructor(){g(this,"De");this.De=new O}createCharacterObjects(e,B){return e.map((r,i)=>{const s=r.codePointAt(0)||0,E=this.fe(i);let Q=0;if(B.hmtx&&B.hmtx.aWidth){const o=this.De.Kt(B,s);o>0&&B.hmtx.aWidth[o]!==void 0&&(Q=B.hmtx.aWidth[o])}return{character:r,unicode:s,color:E,advanceWidth:Q}})}fe(e){return[e%256/255,Math.floor(e/256)%256/255,Math.floor(e/65536)%256/255]}de(e,B){if(!M.l(typeof e=="string","Character must be a string.",{method:"getCharacterColor",providedValue:e}))return[0,0,0];const r=B.find(i=>i.character===e);return r?r.color:[0,0,0]}pe(e,B){return M.l(typeof e=="string"&&e.length>0,"Characters must be a string with at least one character.",{method:"getCharacterColors",providedValue:e})?Array.from(e).map(r=>this.de(r,B)||[0,0,0]):[[0,0,0]]}}class V{constructor(e,B=16){g(this,"me");g(this,"_e",[]);g(this,"ve");g(this,"xe",16);g(this,"ye",0);g(this,"be",0);g(this,"Ge",{width:0,height:0});g(this,"$e");g(this,"Me");g(this,"Ye");g(this,"Te");g(this,"ze");this.xe=B,this.Me=new pA,this.Ye=new yA(e),this.Te=new xA,this.ze=new vA}async Fe(e){let B;if(e){const r=await fetch(e);if(!r.ok)throw new I(`Failed to load font file: ${r.status} ${r.statusText}`);B=await r.arrayBuffer()}else B=await(await fetch(`data:font/truetype;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMs+QEyQAAAEoAAAAYGNtYXAg7yVJAAAFjAAACSBnbHlmuHLTdAAAErQAAGi0aGVhZFvXdUwAAACsAAAANmhoZWELAQUCAAAA5AAAACRobXR4BACDgAAAAYgAAAQEbG9jYQAy54AAAA6sAAAECG1heHABIgCCAAABCAAAACBuYW1lVs/OSgAAe2gAAAOicG9zdABpADQAAH8MAAAAIAABAAAAAQAAzOWHqV8PPPUAAAQAAAAAAHxiGCcAAAAAfGIYJwAAAAAEAAQAAAAACAACAAEAAAAAAAEAAAQAAAAAAAQAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAEBAAEAAAEBAIAAIAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAgQAAZAABQAEAgACAAAAAAACAAIAAAACAAAzAMwAAAAABAAAAAAAAACAAACLAABw4wAAAAAAAAAAWUFMLgBAACAmawQAAAAAAAQAAAAAAAFRAAAAAAMABAAAAAAgAAAEAAAABAAAAAQAAAAEAAGABAABAAQAAIAEAACABAAAgAQAAIAEAAGABAABAAQAAQAEAACABAABAAQAAIAEAACABAABAAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAAGABAAAgAQAAIAEAAGABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABgAQAAQAEAACABAAAAAQAAgAEAACABAAAgAQAAIAEAACABAACAAQAAAAEAAIABAABgAQAAgAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAAABAAAAAQAAAAEAAIABAADAAQAAAAEAAAABAAAgAQAAYAEAAAABAAAAAQAAIAEAAAA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AIAAAACA/YAAgAAAAIAAAP8AAoABAAAA/4AAAP+A/4AAgAAAAIAAAP8AA4AAAP8AAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAP+AAAD/gAAAAAAAAP8AAAAAgAAAAAAAAP+AAAD/gAAAAAAAAwCAAIAEAAQAABcAHQAjAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAACAAAAAgAAA/4AAAACAAAD9AAAA/4AAAACAAAD/gAAAAIAAgAAAAIAAAACAAAD/AAAAAQAAAP+AAAAEAAAA/4AAAP8AAAD/gAAAAIAAAP8AAAD/gAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAP+AAAD/gAAAAQD+gP8AAAAAgAAAAIAAAAABAYACgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAP6AAAAAAAABAQAAgAMABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/oAAAP+AAAD/gAAAAIAAAACAAAABgAAAAIAAAAAAAAEBAACAAwAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAAAgAAAAIAAAAGAAAAAgAAAAAAABQCAAYADgAQAAAMABwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAIAAAP+AAYAAgAAA/4D/AAEAAAABAAAA/wAAAP8AAAD/AAAAAQD/gACAAAD/gAGAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP+AAAAAAAABAQAAgAOAAwAACwAAAQEBAQEBAQEBAQEBAgAAgAAAAQAAAP8AAAD/gAAA/wAAAAEAAwAAAP8AAAD/gAAA/wAAAAEAAAAAgAAAAAAAAQCAAAACAAGAAAcAAAEBAQEBAQEBAQABAAAA/4AAAP8AAAAAgAGAAAD/AAAA/4AAAACAAAAAAAABAIABgAOAAgAAAwAAAQEBAQCAAwAAAP0AAgAAAP+AAAAAAAABAQAAgAIAAYAAAwAAAQEBAQEAAQAAAP8AAYAAAP8AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAwCAAIADgAQAAAsAEQAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAD/gAAAAIAAgAAAAIAAAACAAAD/gAAA/4AAAAEAAAAEAAAA/4AAAP2AAAD/gAAAAIAAAAKAAAAAAP8AAAAAgAAAAID/AP+AAAD/AAAAAYAAAAABAIAAgAOABAAADQAAAQEBAQEBAQEBAQEBAQEBgAEAAAABAAAA/QAAAAEAAAD/AAAAAIAAAACABAAAAP0AAAD/gAAAAIAAAAGAAAAAgAAAAIAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAAAIAAAACAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAA/wAAAAEAAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/wAAAAEAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAA/4AAAACAAAAAAAABAIAAgAOABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAP+AAAABAAAAAQAAAP8AAAD+AAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAAEAAAD9gAAAAQAAAAGAAAAAgAAAAAEAgACAA4AEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP4AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/gAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAP+AAAABAAAAAAAAAgCAAIADgAQAABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAYAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAoAAAP6A/wAAAAEAAAEAgACAA4AEAAAPAAABAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AEAAAA/oAAAP+AAAD+gAAAAYAAAACAAAABAAAA/4AAAAAAAAMAgACAA4AEAAATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAACAAAD/gAAAAIAAgAAAAQAAAP8AAAABAAAABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAA/wAAAAEA/oD/AAAAAQAAAAACAIAAgAOABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD+gAAA/4AAAACAAIAAAAEAAAAEAAAA/4AAAP0AAAABAAAAAIAAAAGAAAAAAP6AAAABgAACAQABAAIAA4AAAwAHAAABAQEBAQEBAQEAAQAAAP8AAAABAAAA/wADgAAA/wAAAP+AAAD/AAAAAAIAgACAAgADgAADAAsAAAEBAQEBAQEBAQEBAQEAAQAAAP8AAAABAAAA/4AAAP8AAAAAgAOAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAABAQAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQKAAQAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAACAIABgAOAAwAAAwAHAAABAQEBAQEBAQCAAwAAAP0AAAADAAAA/QADAAAA/4AAAP+AAAD/gAAAAAEAgACAAwAEAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAIAgACAA4AEAAATABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP8AAAD/AAAAAIAAgAEAAAD/AAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAA/4AAAACAAAD+AAAA/wAAAAACAIAAgAOABAAAEQAVAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP6AAAAAgAAA/wAAAAGAAAD+AAAA/4AAAACAAgAAgAAA/4AEAAAA/4AAAP6AAAABAAAAAIAAAP2AAAD/gAAAAIAAAAKAAAD+AAAA/4AAAAAAAAIAgACAA4AEAAAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAAAIAAAACAAAD/AAAA/wAAAP8AAAAAgAAAAIAAAAAAAQAAAAQAAAD/gAAA/4AAAP2AAAABAAAA/wAAAAKAAAAAgAAA/4D/AAAAAQAAAwCAAIADgAQAAAsADwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAAAIAAAP+AAAD9gAEAAAABAAAA/wAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAADAP8AAAABAP6A/wAAAAEAAAAAAQCAAIADgAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAQAAAAEAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAACAIAAgAOABAAACwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAEAAAAAgAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAADAP2AAAAAgAAAAYAAAACAAAEAgACAA4AEAAAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/wAAAAEAAAABAAAA/4AAAP4AAAD/gAAAAIAEAAAA/4AAAP+AAAAAgAAA/wAAAP+AAAD/AAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAABAIAAgAOABAAACQAAAQEBAQEBAQEBAQCAAwAAAP4AAAABAAAA/wAAAP8ABAAAAP+AAAD/AAAA/4AAAP6AAAAAAQCAAIADgAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/4AAAAGAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAQAAAACAAAD+gAAA/4AAAACAAAACgAAAAAEAgACAA4AEAAALAAABAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP8AAAD/AAAA/wAEAAAA/gAAAAIAAAD8gAAAAQAAAP8AAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIADAAAA/wAAAAEAAAD9AAAAAQAAAP8ABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAAAAQCAAIAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAMAAAD/gAAA/4AAAP4AAAD/gAAAAQAAAAEAAAD+gAQAAAD/gAAA/YAAAP+AAAAAgAAAAQAAAP8AAAACgAAAAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAAEAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAQAAAD/AAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAAAAAQCAAIADgAQAAAUAAAEBAQEBAQCAAQAAAAIAAAD9AAQAAAD9AAAA/4AAAAABAIAAgAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8ABAAAAP+AAAD/gAAAAIAAAACAAAD8gAAAAgAAAP+AAAAAgAAA/gAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAEAAAA/4AAAP+AAAD/gAAAAYAAAPyAAAABAAAAAIAAAACAAAD+AAAAAAAAAgCAAIADgAQAAAsADwAAAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAD9gAAAAoAAAgCAAIADgAQAAAkADQAAAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP6AAAD/AAEAAAABAAAABAAAAP+AAAD+gAAA/4AAAP8AAAADAP6AAAABgAAAAAIAgACABAAEAAAPABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAD/gAAAAIAAAAQAAAD/gAAA/gAAAP8AAAAAgAAA/4AAAACAAAACgAAAAAD9gAAAAIAAAACAAAABgAACAIAAgAOABAAAEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AAQAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAwD/AAAAAQAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/oAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAAAAAAAQCAAIADgAQAAAcAAAEBAQEBAQEBAIADAAAA/wAAAP8AAAD/AAQAAAD/gAAA/QAAAAMAAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAP+ABAAAAP0AAAADAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIADgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAD/gAAA/wAAAP+AAAD/gAQAAAD+AAAAAgAAAP4AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAIAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAQAAAP8AAAD/gAAA/4AAAP+AAAD/AAQAAAD+AAAAAIAAAP+AAAACAAAA/IAAAACAAAAAgAAA/4AAAP+AAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/AAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP8AAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAA/wAAAAEAAAAAgAAAAIAAAACAAAAAAAABAIAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAACAAAAAAAABAIAAgAOABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/gAAA/4AAAAIAAAD9AAAAAIAAAACAAAAAgAAAAIAAAP4ABAAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/wAAAAEAAAD+AAQAAAD/gAAA/YAAAP+AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/gAAAAEAAAD/AAQAAAD8gAAAAIAAAAKAAAAAAAABAIACAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAEAAAMAAAEBAQEAgAMAAAD9AAEAAAD/gAAAAAAAAQEAAoACgAQAAAkAAAEBAQEBAQEBAQEBAAEAAAAAgAAA/4AAAP+AAAD/gAQAAAD/gAAA/wAAAACAAAAAgAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQACgAAA/4AAAP+AAAD/AAAAAQAAAP6AAAD/gAAAAIADAAAA/YAAAACAAAABgAAA/oAAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/gAAA/YABAAAAAQAAAAQAAAD/AAAA/4AAAP6AAAD/gAAAAgD+gAAAAYAAAAABAIAAgAOAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAAAQAAAP+AAAD+AAAA/4AAAACAAwAAAP+AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAoABAAAA/YAAAP+AAAAAgAAAAYD/AAAAAQAAAAQAAAD8gAAAAIAAAAGAAAAAgAAA/4D+gAAAAYAAAAACAIAAgAOAAwAADQARAAABAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/gAAAAGAAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP8AAAD/gAAA/4AAAACAAAABgAAAAAD/gAAAAIAAAAABAQAAgAOAA4AACwAAAQEBAQEBAQEBAQEBAYACAAAA/oAAAAEAAAD/AAAA/wAAAACAA4AAAP+AAAD/AAAA/4AAAP8AAAACgAAAAAAAAgCAAIADgAOAAA8AEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAABgAAA/oAAAP+AAAAAgACAAAABAAAAA4AAAP+AAAD+AAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAAP8AAAABAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/AAAA/wAAAP8ABAAAAP8AAAD/gAAA/gAAAAIAAAD+AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP+AAAD/gAAA/YAAAAACAIAAgAOABAAAAwAPAAABAQEBAQEBAQEBAQEBAQEBAoABAAAA/wAAAAEAAAD/gAAA/gAAAP+AAAABAAAAAQAEAAAA/4AAAP+AAAD+AAAA/4AAAACAAAABAAAA/wAAAAABAIAAgAOAA4AAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAQAAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AA4AAAP8AAAAAgAAA/4AAAP8AAAD/gAAA/4AAAACAAAAAgAAA/wAAAAAAAAEBgACAAwAEAAAHAAABAQEBAQEBAQGAAQAAAACAAAD/AAAA/4AEAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIAEAAMAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAMAAAD/gAAAAIAAAP+AAAD+AAAAAYAAAP+AAAAAgAAA/oAAAAIAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAABAAAAAIAAAP8AAAD/gAAA/4AAAP8AAwAAAP+AAAAAgAAA/4AAAP4AAAABgAAA/4AAAP8AAAAAAAACAIAAgAOAAwAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP6AAAD/gAAAAIAAAAGAAAAAAP6AAAABgAACAIAAgAOAAwAACQANAAABAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAA/oAAAP8AAQAAAAEAAAADAAAA/4AAAP+AAAD/gAAA/wAAAAIA/4AAAACAAAAAAgCAAIAEAAMAAA0AEQAAAQEBAQEBAQEBAQEBAQEBAQEBAQACgAAAAIAAAP+AAAD/AAAA/oAAAP+AAAAAgACAAAABAAAAAwAAAP6AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAA/4AAAACAAAAAAQEAAIADgAMAAAkAAAEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP+AAAD/AAMAAAD/gAAA/wAAAAEAAAD+AAAAAAEAgACABAADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP6AAAABgAAAAIAAAP+AAAD9AAAAAgAAAP6AAAD/gAAAAIADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAP8AAAAAgAAAAQAAAP+AAAD+gAAA/4AAAP+AAAAAgAOAAAD/gAAA/4AAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAQAAAP+AAAD/gAAA/oAAAP+AAwAAAP4AAAAAgAAAAYAAAP2AAAAAgAAA/4AAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+AAwAAAP6AAAABgAAA/oAAAP+AAAD/gAAAAIAAAACAAAAAAAABAIAAgAQAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/4AAAP8AAAD/gAAA/wAAAP+AAwAAAP6AAAAAgAAA/4AAAAGAAAD+AAAA/4AAAACAAAD/gAAAAIAAAAAAAAEAgACAA4ADAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP8AAAD/AAAAAIAAAACAAAD/gAAA/4ADAAAA/4AAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAD/gAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAAGAAAD+gAAA/4ADAAAA/wAAAAEAAAD+AAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP+AAAD/gAAA/4AAAAGAAAD9AAAAAIAAAACAAAAAgAAA/oADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAA/wAAAP+AAAAAgAAAAQAAAP6AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAAABAYAAgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPyAAAAAAAABAQAAgAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAGAAAAAgAAAAIAAAP+AAAD/gAAA/oAAAAEAAAAAgAAA/4AAAP8ABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAAAAEAgAGAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAACAAAD/gAAA/wAAAP8AAAD/gAAAAIADAAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAYAAAAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAAA/wAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAABAAAAAQAAAACAAAAAgAAAAAAAAQIAAAAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD8AAAAAAAAAgCAAIADgAQAABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP8AAAABAAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAA/wAAAACAAAAAgAGAAIAAAP+ABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAAAAAAAP+AAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAAAgAAA/wAAAAEAAAD/AAAA/wAAAP8AAAABAAAA/wAAAACAAAD/gAQAAAD+gAAAAYAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABACAAIAEAAQAABcAGwAfACMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP4AAAABgAAAAIAAAACAAAD/gAAA/YAAAAIAAAD+gAAA/4AAAP+AAAAAgAEAAAAAgAAAAQAAgAAA/4D9AACAAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAACAAAAAgAAAAQAAAP8A/4AAAACAAQAAAP+AAAD+gAAA/4AAAAAEAIAAgAQAA4AAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAQIAAAAEAAQAAAkAAAEBAQEBAQEBAQEDgACAAAD+AAAAAIAAAACAAAAAgAQAAAD8AAAAAQAAAAEAAAABAAAAAAgAAAAABAAEAAADAAcACwAPABMAFwAbAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAA/wACAAEAAAD/AP8AAQAAAP8AAgABAAAA/wD9AAEAAAD/AAIAAQAAAP8A/wABAAAA/wACAAEAAAD/AAQAAAD/AAAAAQAAAP8AAAAAAAAA/wAAAAEAAAD/AAAAAAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQIAAAADAAQAAAMAAAEBAQECAAEAAAD/AAQAAAD8AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP6AAAD/gAAA/oAAAAABAgAAAAQAAgAAAwAAAQEBAQIAAgAAAP4AAgAAAP4AAAAAAAAEAIAAAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+ABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAAABAAAAPwAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAoABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAD/gAOAAAD+AAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAA/wAAAAEAAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAAAEAAAA/gAAAP+AAAD/gAAA/4AAAP+ABAAAAPwAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIAEAAOAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAOAAAD/gAAAAIAAAP8AAAABAAAA/oAAAAGAAAD9AAAAAIAAAP+AAAABAAAA/wAAAAGAAAD+gAAAAAAAAQAAAAACAAQAAAkAAAEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD+AAQAAAD/AAAA/wAAAP8AAAD/AAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQKAAYAAAP8AAAD/AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAEAAAA/wAAAP+AAAD/gAAA/wAAAP8AAAABgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD8AAAAAIAAAACAAAAAgAIAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgAAAAAEAAQAAAMABwAAAQEBAQEBAQEAAAIAAAD+AAIAAgAAAP4ABAAAAP4AAAAAAAAA/gAAAAAEAAACAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8ABAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAABAIAAAAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQECAAEAAAD/AAEAAQAAAP8A/wABAAAA/wABAAEAAAD/AAQAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAEDAAAABAAEAAADAAABAQEBAwABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD9AAAA/wAEAAAA/wAAAP0AAAAAAQAAAAABAAQAAAMAAAEBAQEAAAEAAAD/AAQAAAD8AAAAAAAAAwCAAIADAAOAAAMABwALAAABAQEBAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AAQAAgAAA/4ADgAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAAABAYABgAQABAAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAAEAAAD+gAAA/4AAAP+ABAAAAP8AAAD/gAAA/wAAAACAAAAAgAAAAAAAAQAAAYACgAQAAAsAAAEBAQEBAQEBAQEBAQGAAQAAAP+AAAD/gAAA/oAAAAEAAAAAgAQAAAD+gAAA/4AAAP+AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAwABAAAA/AAAAAEAAAABAAAAAQAEAAAA/AAAAAKAAAAAgAAAAIAAAAABAIAAgAMABAAACwAAAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP0AAAD/gAAAAIAAAAEAAAAAgAAAAAAAAQAAAAAEAAQAAAUAAAEBAQEBAQAAAQAAAAMAAAD8AAQAAAD9AAAA/wAAAAACAIAAgAMAAoAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQABgAAAAIAAAP+AAAD+gAAAAQAAAP8A/4AAgAAA/4ACgAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAMABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAABAAAA/wAAAAEA/oAAgAAA/4AEAAAA/QAAAP+AAAAAgAAAAQAAAACAAAD/gAAA/wAAAAABAIAAgAQABAAADQAAAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP+AAAD9gAAA/4AAAACAAAABAAAAAIAAAAACAAAAAAQABAAAAwAHAAABAQEBAQEBAQAABAAAAPwAAQAAAAIAAAAEAAAA/AAAAAMA/gAAAAIAAAEAgACABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAD/gAAA/oAAAP+AAAAAgAAAAQAEAAAA/4AAAP+AAAD/gAAA/oAAAP+AAAAAgAAAAQAAAACAAAAAAQAAAAACgAKAAAsAAAEBAQEBAQEBAQEBAQAAAYAAAACAAAAAgAAA/wAAAP+AAAD/AAKAAAD/gAAA/4AAAP6AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD/AAAA/QAEAAAA/AAAAAMAAAAAAQCAAIAEAAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAABAAAA/wAAAP+AAAD+gAAA/4AAAACAAAABAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAAEAAAAAgAAAAAEBgAAABAACgAALAAABAQEBAQEBAQEBAQECgAGAAAD/AAAA/4AAAP8AAAAAgAAAAIACgAAA/wAAAP+AAAD/AAAAAYAAAACAAAAAAAABAAAAAAQABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAPwABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAABAAADAAABAQEBAAAEAAAA/AABAAAA/wAAAAAAAAEAAAAABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQEDgACAAAD8AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAEAAAA/AAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAQAAAgAEAAQAAAMAAAEBAQEAAAQAAAD8AAQAAAD+AAAAAAAAAgCAAIACAAOAAAMABwAAAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAAEAIAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAABAAAAPyAAAADAP+AAAAAgP8A/4AAAACA/wD/gAAAAIAAAQAAAAAEAAQAAAUAAAEBAQEBAQMAAQAAAPwAAAADAAQAAAD8AAAAAQAAAAACAIAAgAQABAAAAwAHAAABAQEBAQEBAQCAA4AAAPyAAYAAAACAAAAEAAAA/IAAAAIA/4AAAACAAAMAgACABAAEAAADAAcACwAAAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgP4A/4AAAACAAAAABAAAAIAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD8AAAABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAYAgACABAAEAAADAAcACwAPABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/oAAAACAAAD+gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAID/AP+AAAAAgAAA/4AAAACAAAEAgACAAQADgAADAAABAQEBAIAAgAAA/4ADgAAA/QAAAAAAAAUAgACABAAEAAADAAcACwAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/YAAAACAAAABgAAAAIAAAAQAAAD8gAAAAwD/gAAAAIAAAP+AAAAAgP4A/4AAAACAAAD/gAAAAIAAAAABAAADAAQABAAAAwAAAQEBAQAABAAAAPwABAAAAP8AAAAAAAAHAIAAgAQABAAAAwAHAAsADwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAABgAAAAIAAAP2AAAAAgAAAAYAAAACAAAD9gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAIAAAP+AAAAAgP8A/4AAAACAAAD/gAAAAIAAAAAEAAAAAAQAAgAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8AAgAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQAAAAAEAAQAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAQAAAD/gAAA/4AAAP+AAAD9gAAAAAEBAAAAAgAEAAADAAABAQEBAQABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQECgAGAAAD8AAAAAIAAAACAAAAAgAAAAQAEAAAA/AAAAAGAAAABAAAAAIAAAACAAAAAAAABAAABAAQAAgAAAwAAAQEBAQAABAAAAPwAAgAAAP8AAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAgACAAAA/AAAAACAAAAAgAAAAIAAAACABAAAAPwAAAACAAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEDAAEAAAD8AAAAAQAAAAEAAAABAAIAAAD+AAAAAIAAAACAAAAAgAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAIAAAAAgAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/4AAAP4AAAAAAAADAAAAAAQABAAAGwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAIAAYAAAACAAAD/gAAA/4AAAP+AAAD/gP4AAIAAAACAAAAAgAAAAIAAAP6AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAQAAAP+AAAD+gAAAAIAAAACAAAAAgAAA/oAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAIAAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAGAAAABAAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAAAAAAEAAAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAYAAAP6AAgABgAAA/oD9gAGAAAD+gAIAAYAAAP6ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAP6AAAAAAQIAAgAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD+AAAAAAAABACAAIAEAAQAAAMABwAjACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAD/AAGAAQAAAP8A/gAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4ABgACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAAAAA/wAAAP+AAAD/gAAAAIAAAACAAAABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAGAAAD/gAAAAAQAAAAABAAEAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ADgACAAAD/gPyAAIAAAP+AA4AAgAAA/4AEAAAA/4AAAACAAAD/gAAA/QAAAP+AAAAAgAAA/4AAAAABAAAAAAIAAgAAAwAAAQEBAQAAAgAAAP4AAgAAAP4AAAAAAAAEAAAAAAIABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAQABAAAA/wD/AAEAAAD/AAEAAQAAAP8ABAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAQCAAQADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAAGAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAOAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAAAABAQABAAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAACAAAD+gAAAAYAAAP+AAAABAAAAAIAAAAAAAAEBAAEABAADgAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQIAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAP6AAAABgAAA/4ADgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAOAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAAAAQAAAP+AAAAAAAABAQAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAA/4AAAP6AAAD/gAAAAIAAAACABAAAAP8AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAAAACAIAAgAOAA4AAAwAJAAABAQEBAQEBAQEBAIADAAAA/QAAgAAAAgAAAP8AAAADgAAA/QAAAAKA/gAAAAEAAAABAAAAAAIAgACABAAEAAAbACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAD/gAAAAIAAAACAAAAAgAAA/4AAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4D/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAEAAAIABAADAAADAAABAQEBAAAEAAAA/AADAAAA/wAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/gAEAAAA/gAAAP+AAAD/gAAA/4AAAP+AAAAAAAABAAACAAIABAAAAwAAAQEBAQAAAgAAAP4ABAAAAP4AAAAAAAACAQAAgAOAA4AAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP8AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAACAAAAAgAAA/wAAAACAAIAAAACAAAADgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgP+AAAAAgAADAAAAAAQABAAACwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAGAAAD/gAAA/4AAAP+AAAD/gAAAAIACgAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgACAAIAAAP+AAAD+gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAAAYAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAA/oAAAP6AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgCAAIADgAQAAA8AHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAABAAAAAIAAAP+AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAgAAA/4AAAP8AAAD/AAAA/4AAAACABAAAAP+AAAAAgAAA/wAAAP+AAAAAgAAA/4AAAAEAAAD+gAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAABAAAAAAQAA4AACwAAAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD8AAAAAIAAAACAA4AAAP+AAAD/gAAA/YAAAAKAAAAAgAAAAAAAAQAAAAACAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAAAAAQIAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDgACAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQCAAIAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/oAAAAEAAAD/AAAAAYAAAACAAAAAgAAAAIAAAAAAACAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AEMARwBLAE8AUwBXAFsAXwBjAGcAawBvAHMAdwB7AH8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gPyAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/YAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D8gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gP2AAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/IAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAQAAAAAEAAQAAAsAAAEBAQEBAQEBAQEBAQAABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/oAEAAAA/oAAAP8AAAD/gAAA/4AAAP+AAAAAAAABAAABgAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAAAAAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP2AAAACAAAAAIAAAACAAAAAAAABAYAAAAQAAoAABQAAAQEBAQEBAYACgAAA/oAAAP8AAoAAAP8AAAD+gAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAAACgAAAAIAAAACAAAAAgAAA/AAEAAAA/wAAAP8AAAD/AAAA/wAAAAACAAAAAAQABAAAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAAAEAAAAEAAAA/4AAAP+AAAD/gAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAgAAAAIAAAP8A/wAAAAEAAAEBgAGABAAEAAAFAAABAQEBAQEBgAEAAAABgAAA/YAEAAAA/oAAAP8AAAAAAQAAAAACgAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD+AAAAAoAAAACAAAAAgAAAAAAAAQGAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQGAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAQAAAACAAAAAAAABAAABgAQABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAgAAAP2AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAABgAQAAoAAAwAAAQEBAQAABAAAAPwAAoAAAP8AAAAAAAABAYAAAAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPwAAAAAAAABAYAAAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAKAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD+AAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD9gAAAAgAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAgAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQAAAYACgAKAAAMAAAEBAQEAAAKAAAD9gAKAAAD/AAAAAAAAAQGAAAACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD9gAAAAAAAAQAAAYAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAABAAAAAIAAAAEAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAYACgAAA/AAAAACAAAAAgAAAAIAEAAAA/AAAAAEAAAABAAAAAQAAAAABAAAAAAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAA/oAAAAEAAAABAAAAAIAAAACABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAQAAAAEAAAD+gAAA/wAAAP+AAAD/gAAA/4AEAAAA/wAAAP8AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAABAAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAACgAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAABAAAAAIAAAAAAAAEAAAAABAAEAAAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQAAAAACgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD9gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAQAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAKAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAYACgAQAAAMAAAEBAQEBgAEAAAD/AAQAAAD9gAAAAAAAAQGAAYAEAAKAAAMAAAEBAQEBgAKAAAD9gAKAAAD/AAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAABAAAAAAQABAAAIwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQGAAYACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD/AAAAAAAAAQAAAAAEAAKAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAAAAEAAAGAAoAEAAAFAAABAQEBAQEBgAEAAAD9gAAAAYAEAAAA/YAAAAEAAAAAAQAAAAACgAKAAAUAAAEBAQEBAQAAAoAAAP8AAAD+gAKAAAD9gAAAAYAAAAABAAAAAAQABAAAHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAQAAAACAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEBgAEAAAABgAAA/oAAAP8AAAD+gAAAAYAEAAAA/oAAAP8AAAD+gAAAAYAAAAEAAAAAAAABAAAAAAQAAoAABwAAAQEBAQEBAQEAAAQAAAD+gAAA/wAAAP6AAoAAAP8AAAD+gAAAAYAAAAAAAAEBgAAABAAEAAAHAAABAQEBAQEBAQGAAQAAAAGAAAD+gAAA/wAEAAAA/oAAAP8AAAD+gAAAAAAAAQAAAAACgAQAAAcAAAEBAQEBAQEBAYABAAAA/wAAAP6AAAABgAQAAAD8AAAAAYAAAAEAAAAAAAABAAABgAQABAAABwAAAQEBAQEBAQEBgAEAAAABgAAA/AAAAAGABAAAAP6AAAD/AAAAAQAAAAAAAAQBAAEAAwADAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAYABAAAA/wD/gACAAAD/gAGAAIAAAP+A/wABAAAA/wADAAAA/4AAAAAAAAD/AAAAAQAAAP8AAAAAAAAA/4AAAAACAIAAgAOAA4AACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADgAAA/4AAAP4AAAD/gAAAAIAAAAIAAAD/gP8AAAABAAACAAAAAAQABAAAEwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAgAAA/4AAAACAAAABAAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAAAIAAAAAgAAA/4D/gAAA/wAAAP+AAAAAgAAAAQAAAACAABAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP+AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4AEAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAQAAAAAAQABAAAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwA3ADsAPwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D8gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAwCAAIADgAQAABcAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAAEAAAD/AAAAAIAAAP+AAAABAAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAP+AAAAAgAAA/4AAAACAAAAEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAYAAAACAAAD/gP+AAAAAgP8A/4AAAACAAAAAAQCAAIADgAOAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP+AAAD/AAAA/4AAAP+AAAAAgAOAAAD/gAAA/wAAAP+AAAD/AAAAAQAAAACAAAABAAAAAAAAAgCAAIADgAOAAAMACQAAAQEBAQEBAQEBAQCAAwAAAP0AAYAAAP8AAAACAAAAA4AAAP0AAAACgP8AAAD/AAAAAgAAAAABAIAAgAOAA4AAAwAAAQEBAQCAAwAAAP0AA4AAAP0AAAAAAAACAIAAgAOAA4AAAwALAAABAQEBAQEBAQEBAQEAgAMAAAD9AACAAAACAAAA/4AAAP8AAAADgAAA/QAAAAKA/gAAAAIAAAD/AAAAAQAAAQAAAAAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAAAAgAAAACAAAAAAAABAQABAAMAAwAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAP+AAAD/AAAA/4AAAACAAwAAAP+AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAQAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAACAAAD/gAAA/4AAAAEAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+AAAAAIAAAAGAAAAAgAAA/gAAAAGAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgAAA/4AAAACA/4D/gAAAAIAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+gAAAAYAAAP4AAAAAgAAAAYAAAACAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgP+A/4AAAACAAAD/gAAAAIAABgCAAIAEAAQAABMAFwAbAB8AIwAnAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAAAAEAAAAAgAAAAAAAgAAA/oAAgAAA/4ACAACAAAD/gP4AAIAAAP+AAgAAgAAA/4AEAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAAAIAAAACAAAAAgAAA/4D/gAAAAIABAAAA/4AAAACAAAD/gAAA/oAAAP+AAAAAgAAA/4AAAAACAQAAgAOABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP+AAAD/gAAAAIAAAP+AAAD/gAAA/4AAAACAAAD/gAAAAQAAAP8A/4AAgAAA/4AEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAQABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYACgAAA/4AAAP+AAAD/gAAAAIAAAP+AAAD+gAAAAQAAAP8AAAABAAAAAIAAAP8A/wAAgAAA/4AEAAAA/gAAAAEAAAD/gAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAIAAAACAAAD+gAAA/wAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABAAAAAIAAAACAAAAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP+AAAAAgAAAAQAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAABAAAAAIAAAP+ABAAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABgAAA/4AAAACAAAAAAAABAIAAgAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACABAAAAP+AAAAAgAAA/4AAAP6AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAABgAAAAAAAAQCAAIAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAQAAAsAAAEBAQEBAQEBAQEBAQIAAYAAAP8AAAD/gAAA/wAAAACAAAAAgAQAAAD/AAAA/gAAAP+AAAABAAAAAIAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQGAAoAAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AAAP8AAAAAgAAAAIAEAAAA/QAAAP+AAAABAAAAAIAAAAEAAAD+AAAA/4AAAAEAAAAAgAAAAAAAAAAYASYAAQAAAAAAAAAIAAAAAQAAAAAAAQAIAAgAAQAAAAAAAgAHABAAAQAAAAAAAwAIABcAAQAAAAAABAAQAB8AAQAAAAAABQALAC8AAQAAAAAABgAIADoAAQAAAAAACQAJAEIAAQAAAAAACgA6AEsAAQAAAAAADQARAIUAAQAAAAAADgAyAJYAAQAAAAAAEwAMAMgAAwABBAkAAAAQANQAAwABBAkAAQAQAOQAAwABBAkAAgAOAPQAAwABBAkAAwAQAQIAAwABBAkABAAgARIAAwABBAkABQAWATIAAwABBAkABgAQAUgAAwABBAkACQASAVgAAwABBAkACgB0AWoAAwABBAkADQAiAd4AAwABBAkADgBkAgAAAwABBAkAEwAYAmQoYykgMjAyMlVyc2FGb250UmVndWxhclVyc2FGb250VXJzYUZvbnQgUmVndWxhclZlcnNpb24gMS4wVXJzYUZvbnRVcnNhRnJhbmtBbiBvcGVuIGxpY2VuY2UgZ2VuZXJhbCBwdXJwb3NlIHRleHRtb2RlIGZvbnQgYnkgVXJzYUZyYW5rQ0MwIDEuMCBVbml2ZXJzYWxodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wL0hlbGxvIFdvcmxkIQAoAGMAKQAgADIAMAAyADIAVQByAHMAYQBGAG8AbgB0AFIAZQBnAHUAbABhAHIAVQByAHMAYQBGAG8AbgB0AFUAcgBzAGEARgBvAG4AdAAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwAFUAcgBzAGEARgBvAG4AdABVAHIAcwBhAEYAcgBhAG4AawBBAG4AIABvAHAAZQBuACAAbABpAGMAZQBuAGMAZQAgAGcAZQBuAGUAcgBhAGwAIABwAHUAcgBwAG8AcwBlACAAdABlAHgAdABtAG8AZABlACAAZgBvAG4AdAAgAGIAeQAgAFUAcgBzAGEARgByAGEAbgBrAEMAQwAwACAAMQAuADAAIABVAG4AaQB2AGUAcgBzAGEAbABoAHQAdABwAHMAOgAvAC8AYwByAGUAYQB0AGkAdgBlAGMAbwBtAG0AbwBuAHMALgBvAHIAZwAvAHAAdQBiAGwAaQBjAGQAbwBtAGEAaQBuAC8AegBlAHIAbwAvADEALgAwAC8ASABlAGwAbABvACAAVwBvAHIAbABkACEAAAADAAAAAAAAAGYAMwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\r
8
+ `)).arrayBuffer();await this.Re(B),this.me=x.parse(B)[0],await this.Se()}Oe(e){if(e===void 0)return this.xe;this.xe=e,this.Ge=this.Te.calculateMaxGlyphDimensions(this._e.map(r=>r.character),this.xe,this.me);const B=this.Ye.createTextureAtlas(this._e,this.Ge,this.xe,this.me);this.ve=B.framebuffer,this.ye=B.columns,this.be=B.rows}async Le(e){try{const B=await fetch(e);if(!B.ok)throw new I(`Failed to load font file: ${B.status} ${B.statusText}`);const r=await B.arrayBuffer();await this.Re(r);const i=x.parse(r);if(!i||i.length===0)throw Error("Failed to parse font file");this.me=i[0],await this.Se()}catch(B){throw new I("Failed to load font: "+(B instanceof Error?B.message:"Unknown error"),B)}}async Re(e){const B=Date.now();this.$e=new FontFace("CustomFont_"+B,e),await this.$e.load(),document.fonts.add(this.$e)}async Se(){const e=this.Me.extractCharacters(this.me),B=this.Me.filterProblematicCharacters(e);this._e=this.ze.createCharacterObjects(B,this.me),this.Ge=this.Te.calculateMaxGlyphDimensions(B,this.xe,this.me);const r=this.Ye.createTextureAtlas(this._e,this.Ge,this.xe,this.me);this.ve=r.framebuffer,this.ye=r.columns,this.be=r.rows}de(e){return this.ze.de(e,this._e)}pe(e){return this.ze.pe(e,this._e)}W(){this.ve.W(),document.fonts.delete(this.$e)}get fontFramebuffer(){return this.ve}get characters(){return this._e}get textureColumns(){return this.ye}get textureRows(){return this.be}get maxGlyphDimensions(){return this.Ge}get fontSize(){return this.xe}get font(){return this.me}}class X{constructor(e,B,r){g(this,"Ue");g(this,"ke");g(this,"I");g(this,"u");g(this,"We");g(this,"He");g(this,"Je");g(this,"Ve");g(this,"Ke");this.Je=e,this.Ve=B,this.Ke=r,this.lA()}lA(){this.Ue=Math.floor(this.Je.width/this.Ve),this.ke=Math.floor(this.Je.height/this.Ke),this.I=this.Ue*this.Ve,this.u=this.ke*this.Ke,this.We=Math.floor((this.Je.width-this.I)/2),this.He=Math.floor((this.Je.height-this.u)/2)}je(e,B){this.Ve=e,this.Ke=B,this.lA()}get cellWidth(){return this.Ve}get cellHeight(){return this.Ke}get cols(){return this.Ue}get rows(){return this.ke}get width(){return this.I}get height(){return this.u}get offsetX(){return this.We}get offsetY(){return this.He}}class j{constructor(e={}){g(this,"Je");g(this,"Ze");g(this,"Ne");e.canvas?(this.Je=e.canvas,this.Ne=!1):(this.Je=this.Xe(e.width,e.height),this.Ne=!0),this.Je.style.imageRendering="pixelated"}Xe(e,B){const r=document.createElement("canvas");return r.className="textmodeCanvas",r.style.imageRendering="pixelated",r.width=e||800,r.height=B||600,document.body.appendChild(r),r}S(e,B){this.Je.width=e??this.Je.width,this.Je.height=B??this.Je.height}qe(){const e=this.Je.getContext("webgl2",{alpha:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!0,antialias:!1,depth:!1,stencil:!1,powerPreference:"high-performance"});if(!e)throw new I("`textmode.js` requires WebGL2 support.");return e}W(){this.Ze&&this.Ze.disconnect();const e=this.Je.getContext("webgl")||this.Je.getContext("webgl2");if(e){const B=e.getExtension("WEBGL_lose_context");B&&B.loseContext()}this.Ne&&this.Je.parentNode&&this.Je.parentNode.removeChild(this.Je)}get canvas(){return this.Je}get width(){return this.Je.width}get height(){return this.Je.height}}class bA{constructor(e=60){g(this,"AB");g(this,"tB");g(this,"eB",null);g(this,"BB",0);g(this,"QB",!0);g(this,"sB",0);g(this,"iB",0);g(this,"EB",[]);g(this,"rB",10);g(this,"nB",0);this.AB=e,this.tB=1e3/e}start(e){if(!this.QB)return;this.BB=performance.now();const B=r=>{if(!this.QB)return void(this.eB=null);const i=r-this.BB;i>=this.tB&&(e(),this.BB=r-i%this.tB),this.QB&&(this.eB=requestAnimationFrame(B))};this.eB=requestAnimationFrame(B)}stop(){this.eB&&(cancelAnimationFrame(this.eB),this.eB=null)}pause(){this.QB&&(this.QB=!1,this.stop())}resume(e){this.QB||(this.QB=!0,this.start(e))}frameRate(e,B){if(e===void 0)return this.sB;this.AB=e,this.tB=1e3/e,this.QB&&B&&(this.stop(),this.start(B))}measureFrameRate(){const e=performance.now();if(this.iB>0){const B=e-this.iB;this.EB.push(B),this.EB.length>this.rB&&this.EB.shift();const r=this.EB.reduce((i,s)=>i+s,0)/this.EB.length;this.sB=1e3/r}this.iB=e}get isLooping(){return this.QB}get frameRateLimit(){return this.AB}get currentFrameRate(){return this.sB}get frameCount(){return this.nB}set frameCount(e){this.nB=e}incrementFrame(){this.nB++}resetFrameCount(){this.nB=0}}const RA=n=>class extends n{rotate(e){this.Ce.state.uA(e)}push(){this.Ce.state.CA()}pop(){this.Ce.state.DA()}rect(e,B,r=1,i=1){this.Ce.$t(e,B,r,i)}line(e,B,r,i){this.Ce.Mt(e,B,r,i)}lineWeight(e){this.Ce.state.IA(e)}background(e,B=e,r=e,i=255){this.Ce.St(e,B,r,i)}char(e){this.Ce.state.wA(this.me.de(e))}charColor(e,B,r,i){this.Ce.state.fA(e,B,r,i)}cellColor(e,B,r,i){this.Ce.state.dA(e,B,r,i)}flipHorizontally(e){this.Ce.state.pA(e)}flipVertically(e){this.Ce.state.mA(e)}charRotation(e){this.Ce.state.vA(e)}invert(e){this.Ce.state._A(e)}clear(){this.Ce.jA()}ellipse(e,B,r,i){this.Ce.Yt(e,B,r/2,i/2)}triangle(e,B,r,i,s,E){this.Ce.Tt(e,B,r,i,s,E)}bezierCurve(e,B,r,i,s,E,Q,o){this.Ce.zt(e,B,r,i,s,E,Q,o)}arc(e,B,r,i,s,E){this.Ce.Rt(e,B,r,i,s,E)}};class W{gB(e){const B=e.O(0),r=e.O(1),i=e.O(2),s=e.O(3);return{characterPixels:B,primaryColorPixels:r,secondaryColorPixels:i,transformPixels:e.O(4),rotationPixels:s}}oB(e,B){return e[B]+(e[B+1]<<8)}aB(e,B){return{r:e[B],g:e[B+1],b:e[B+2],a:e[B+3]}}}class N{hB(e,B){return new Blob([e],{type:B})}cB(e,B,r){try{const i=this.hB(e,r),s=URL.createObjectURL(i),E=document.createElement("a");E.href=s,E.download=B,E.style.display="none",E.rel="noopener",document.body.appendChild(E),E.click(),document.body.removeChild(E),URL.revokeObjectURL(s)}catch(i){throw console.error("Failed to download file:",i),Error("File download failed: "+(i instanceof Error?i.message:"Unknown error"))}}CB(){return new Date().toISOString().slice(0,19).replace(/:/g,"-")}DB(){const e=new Date;return{date:e.toISOString().split("T")[0],time:e.toTimeString().split(" ")[0].replace(/:/g,"-")}}lB(e){return e.replace(/[<>:"/\\|?*]/g,"_").replace(/\s+/g,"_").replace(/_{2,}/g,"_").replace(/^_+|_+$/g,"").substring(0,255)}PB(){return"'textmode-export'-"+this.CB()}}class TA extends W{IB(e,B,r){const i=e[r]===255,s=e[r+1]===255,E=e[r+2]===255,Q=B[r],o=B[r+1];return{isInverted:i,flipHorizontal:s,flipVertical:E,rotation:Math.round(360*(Q+o/255)/255*100)/100}}uB(e,B,r){return{x:e,y:B,cellX:e*r.cellWidth,cellY:B*r.cellHeight}}wB(e,B){const r=[];let i=0;for(let s=0;s<B.rows;s++)for(let E=0;E<B.cols;E++){const Q=4*i,o=this.oB(e.characterPixels,Q);let a=this.aB(e.primaryColorPixels,Q),h=this.aB(e.secondaryColorPixels,Q);const c=this.IB(e.transformPixels,e.rotationPixels,Q);if(c.isInverted){const D=a;a=h,h=D}const l=this.uB(E,s,B);r.push({charIndex:o,primaryColor:a,secondaryColor:h,transform:c,position:l}),i++}return r}}class _A{fB(e,B){const r=e.cmap;for(const i of r.tables)if(i.format===4){const s=i;for(let E=0;E<s.startCount.length;E++)if(B>=s.startCount[E]&&B<=s.endCount[E]){if(s.idRangeOffset[E]===0)return B+s.idDelta[E]&65535;{const Q=s.idRangeOffset[E]/2+(B-s.startCount[E])-(s.startCount.length-E);if(Q>=0&&Q<s.glyphIdArray.length){const o=s.glyphIdArray[Q];if(o!==0)return o+s.idDelta[E]&65535}}}}else if(i.format===12){const s=i;for(let E=0;E<s.groups.length;E+=3){const Q=s.groups[E],o=s.groups[E+1],a=s.groups[E+2];if(B>=Q&&B<=o)return a+(B-Q)}}return 0}dB(e,B,r,i,s){const E=s/e.head.unitsPerEm;return{getBoundingBox:()=>({x1:r+B.xMin*E,y1:i+-B.yMax*E,x2:r+B.xMax*E,y2:i+-B.yMin*E}),toSVG:()=>this.pB(B,r,i,E)}}pB(e,B,r,i){if(!e||!e.xs)return"";const{xs:s,ys:E,endPts:Q,flags:o}=e;if(!(s&&E&&Q&&o))return"";let a="",h=0;for(let c=0;c<Q.length;c++){const l=Q[c];if(!(l<h)){if(l>=h){const D=B+s[h]*i,C=r-E[h]*i;a+=`M${D.toFixed(2)},${C.toFixed(2)}`;let P=h+1;for(;P<=l;)if(1&o[P]){const p=B+s[P]*i,m=r-E[P]*i;a+=`L${p.toFixed(2)},${m.toFixed(2)}`,P++}else{const p=B+s[P]*i,m=r-E[P]*i;let y=P+1>l?h:P+1;if(1&o[y]){const v=B+s[y]*i,F=r-E[y]*i;a+=`Q${p.toFixed(2)},${m.toFixed(2)} ${v.toFixed(2)},${F.toFixed(2)}`,P=y+1}else{const v=(p+(B+s[y]*i))/2,F=(m+(r-E[y]*i))/2;a+=`Q${p.toFixed(2)},${m.toFixed(2)} ${v.toFixed(2)},${F.toFixed(2)}`,P=y}}a+="Z"}h=l+1}}return a}mB(e,B,r,i,s){const E=e.codePointAt(0)||0,Q=this.fB(B,E);let o=null;return B.glyf&&B.glyf[Q]!==null?o=B.glyf[Q]:(o=x.T.glyf.Ut(B,Q),B.glyf[Q]=o),this.dB(B,o,r,i,s)}_B(e,B,r,i,s,E,Q,o){const a=r+(s-o*(Q/B.head.unitsPerEm))/2,h=i+(E+.7*Q)/2;return this.mB(e,B,a,h,Q).toSVG()||null}}class GA{constructor(){g(this,"vB");this.vB=new _A}xB(e){return`<?xml version="1.0" encoding="UTF-8" standalone="no"?>
48
9
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
49
10
  <svg width="${e.width}" height="${e.height}" viewBox="0 0 ${e.width} ${e.height}"
50
11
  xmlns="http://www.w3.org/2000/svg" version="1.1">
51
12
  <title>textmode art generated via textmode.js</title>
52
- <desc>textmode art visualization generated by textmode.js library</desc>`}rs(){return`
13
+ <desc>textmode art visualization generated by textmode.js library</desc>`}yB(){return`
53
14
  </g>
54
- </svg>`}Bs(e,s){if(!s.includeBackgroundRectangles)return"";const r=s.backgroundColor,i=`rgba(${r[0]},${r[1]},${r[2]},${r[3]/255})`;return`
55
- <rect width="${e.width}" height="${e.height}" fill="${i}" />`}Qs(e){return`rgba(${e.r},${e.g},${e.b},${e.a/255})`}Es(e,s){const{transform:r,position:i}=e,B=i.cellX+s.cellWidth/2,o=i.cellY+s.cellHeight/2,E=[];if(r.flipHorizontal||r.flipVertical){const g=r.flipHorizontal?-1:1,h=r.flipVertical?-1:1;E.push(`translate(${B} ${o})`),E.push(`scale(${g} ${h})`),E.push(`translate(${-B} ${-o})`)}return r.rotation&&E.push(`rotate(${r.rotation} ${B} ${o})`),E.length?` transform="${E.join(" ")}"`:""}gs(e,s,r){if(!r.includeBackgroundRectangles||e.secondaryColor.a===0)return"";const{position:i}=e,B=this.Qs(e.secondaryColor);return r.drawMode==="stroke"?`
56
- <rect x="${i.cellX}" y="${i.cellY}" width="${s.cellWidth}" height="${s.cellHeight}" stroke="${B}" fill="none" stroke-width="${r.strokeWidth}" />`:`
57
- <rect x="${i.cellX}" y="${i.cellY}" width="${s.cellWidth}" height="${s.cellHeight}" fill="${B}" />`}As(e,s,r,i){const B=r.characters[e.charIndex];if(!B)return"";const o=this.es.ts(B.character,r.font,e.position.cellX,e.position.cellY,s.cellWidth,s.cellHeight,r.fontSize,B.advanceWidth);if(!o)return"";const E=this.Qs(e.primaryColor);return i.drawMode==="stroke"?`
58
- <path id="${`path-${e.charIndex}-${e.position.cellX}-${e.position.cellY}`.replace(/\./g,"-")}" d="${o}" stroke="${E}" stroke-width="${i.strokeWidth}" fill="none" />`:`
59
- <path d="${o}" fill="${E}" />`}ns(e,s,r,i){let B="";B+=this.gs(e,s,i);const o=this.Es(e,s),E=this.As(e,s,r,i);return E&&(o?(B+=`
60
- <g${o}>`,B+=E,B+=`
61
- </g>`):B+=E),B}hs(e,s,r,i){let B=this.ss(s);B+=this.Bs(s,i),B+=`
62
- <g id="ascii-cells">`;for(const o of e)B+=this.ns(o,s,r,i);return B+=this.rs(),B}ls(e){return e.replace(/<path[^>]*d=""[^>]*\/>/g,"").replace(/\n\s*\n/g,`
63
- `).replace(/[ \t]+$/gm,"")}}class vA extends z{cs(e){return this.Ve(e,"image/svg+xml;charset=utf-8")}Ds(e,s){this.He(e,this.Je(s)+".svg","image/svg+xml;charset=utf-8")}Cs(e,s){this.Ds(e,s||this.je())}}class oA{constructor(){n(this,"us");n(this,"Ps");n(this,"Is");this.us=new mA,this.Ps=new xA,this.Is=new vA}fs(e){return{includeBackgroundRectangles:e.includeBackgroundRectangles??!0,drawMode:e.drawMode??"fill",strokeWidth:e.strokeWidth??1,backgroundColor:e.backgroundColor??[0,0,0,0]}}ws(e,s={}){const r=this.fs(s),i=this.us.Ue(e.pipeline),B=this.us.Ne(i,e.grid),o=this.Ps.hs(B,e.grid,e.font,r);return this.Ps.ls(o)}Cs(e,s={}){const r=this.ws(e,s),i=s.filename||this.Is.je();this.Is.Cs(r,i)}}class yA extends ${ds(e,s,r,i=" "){var E;const B=[];let o=0;for(let g=0;g<s.rows;g++){const h=[];for(let a=0;a<s.cols;a++){const c=4*o,l=this.Re(e.characterPixels,c),D=((E=r.characters[l])==null?void 0:E.character)||i;h.push(D),o++}B.push(h)}return B}}class _A{ps(e,s){const r=[];for(const B of e){let o=B.join("");s.preserveTrailingSpaces||(o=o.replace(/\s+$/,"")),r.push(o)}const i=s.lineEnding==="crlf"?`\r
15
+ </svg>`}bB(e,B){if(!B.includeBackgroundRectangles)return"";const r=B.backgroundColor,i=`rgba(${r[0]},${r[1]},${r[2]},${r[3]/255})`;return`
16
+ <rect width="${e.width}" height="${e.height}" fill="${i}" />`}GB(e){return`rgba(${e.r},${e.g},${e.b},${e.a/255})`}$B(e,B){const{transform:r,position:i}=e,s=i.cellX+B.cellWidth/2,E=i.cellY+B.cellHeight/2,Q=[];if(r.flipHorizontal||r.flipVertical){const o=r.flipHorizontal?-1:1,a=r.flipVertical?-1:1;Q.push(`translate(${s} ${E})`),Q.push(`scale(${o} ${a})`),Q.push(`translate(${-s} ${-E})`)}return r.rotation&&Q.push(`rotate(${r.rotation} ${s} ${E})`),Q.length?` transform="${Q.join(" ")}"`:""}MB(e,B,r){if(!r.includeBackgroundRectangles||e.secondaryColor.a===0)return"";const{position:i}=e,s=this.GB(e.secondaryColor);return r.drawMode==="stroke"?`
17
+ <rect x="${i.cellX}" y="${i.cellY}" width="${B.cellWidth}" height="${B.cellHeight}" stroke="${s}" fill="none" stroke-width="${r.strokeWidth}" />`:`
18
+ <rect x="${i.cellX}" y="${i.cellY}" width="${B.cellWidth}" height="${B.cellHeight}" fill="${s}" />`}mB(e,B,r,i){const s=r.characters[e.charIndex];if(!s)return"";const E=this.vB._B(s.character,r.font,e.position.cellX,e.position.cellY,B.cellWidth,B.cellHeight,r.fontSize,s.advanceWidth);if(!E)return"";const Q=this.GB(e.primaryColor);return i.drawMode==="stroke"?`
19
+ <path id="${`path-${e.charIndex}-${e.position.cellX}-${e.position.cellY}`.replace(/\./g,"-")}" d="${E}" stroke="${Q}" stroke-width="${i.strokeWidth}" fill="none" />`:`
20
+ <path d="${E}" fill="${Q}" />`}YB(e,B,r,i){let s="";s+=this.MB(e,B,i);const E=this.$B(e,B),Q=this.mB(e,B,r,i);return Q&&(E?(s+=`
21
+ <g${E}>`,s+=Q,s+=`
22
+ </g>`):s+=Q),s}TB(e,B,r,i){let s=this.xB(B);s+=this.bB(B,i),s+=`
23
+ <g id="ascii-cells">`;for(const E of e)s+=this.YB(E,B,r,i);return s+=this.yB(),s}zB(e){return e.replace(/<path[^>]*d=""[^>]*\/>/g,"").replace(/\n\s*\n/g,`
24
+ `).replace(/[ \t]+$/gm,"")}}class MA extends N{FB(e){return this.hB(e,"image/svg+xml;charset=utf-8")}RB(e,B){this.cB(e,this.lB(B)+".svg","image/svg+xml;charset=utf-8")}SB(e,B){this.RB(e,B||this.PB())}}class K{constructor(){g(this,"OB");g(this,"LB");g(this,"UB");this.OB=new TA,this.LB=new GA,this.UB=new MA}kB(e){return{includeBackgroundRectangles:e.includeBackgroundRectangles??!0,drawMode:e.drawMode??"fill",strokeWidth:e.strokeWidth??1,backgroundColor:e.backgroundColor??[0,0,0,0],filename:e.filename||this.UB.PB()}}WB(e,B={}){const r=this.OB.wB(this.OB.gB(e.pipeline),e.grid),i=this.LB.TB(r,e.grid,e.font,this.kB(B));return this.LB.zB(i)}SB(e,B={}){this.UB.SB(this.WB(e,B),B.filename)}}class FA extends W{HB(e,B,r,i=" "){var Q;const s=[];let E=0;for(let o=0;o<B.rows;o++){const a=[];for(let h=0;h<B.cols;h++){const c=4*E,l=this.oB(e.characterPixels,c),D=((Q=r.characters[l])==null?void 0:Q.character)||i;a.push(D),E++}s.push(a)}return s}}class SA{JB(e,B){const r=[];for(const s of e){let E=s.join("");B.preserveTrailingSpaces||(E=E.replace(/\s+$/,"")),r.push(E)}const i=B.lineEnding==="crlf"?`\r
64
25
  `:`
65
- `;return r.join(i)}}class MA extends z{_s(e,s){const r=this.vs(s);this.He(e,r,"text/plain;charset=utf-8")}vs(e){let s=this.Je(e);return s===".txt"||s.length<=4?this.je():s}}class EA{constructor(){n(this,"us");n(this,"Ps");n(this,"Is");this.us=new yA,this.Ps=new _A,this.Is=new MA}fs(e){return{preserveTrailingSpaces:e.preserveTrailingSpaces??!1,lineEnding:e.lineEnding??"lf",emptyCharacter:e.emptyCharacter??" "}}bs(e,s={}){const r=this.fs(s),i=this.us.Ue(e.pipeline),B=this.us.ds(i,e.grid,e.font,r.emptyCharacter);return this.Ps.ps(B,r)}_s(e,s={}){const r=this.bs(e,s),i=s.filename||this.Is.je();this.Is._s(r,i)}}class TA extends ${Ms(e,s=1,r="transparent"){const i=e.canvas;if(s===1&&r==="transparent")return i;const B=document.createElement("canvas"),o=B.getContext("2d"),E=Math.round(i.width*s),g=Math.round(i.height*s);return B.width=E,B.height=g,r!=="transparent"&&(o.fillStyle=r,o.fillRect(0,0,E,g)),o.imageSmoothingEnabled=!1,o.drawImage(i,0,0,i.width,i.height,0,0,E,g),B}}class RA{Gs(e,s){const r=this.Fs(s.format);return s.format==="png"?e.toDataURL(r):e.toDataURL(r,s.quality)}async $s(e,s){return new Promise((r,i)=>{const B=this.Fs(s.format),o=E=>{E?r(E):i(Error(`Failed to generate ${s.format.toUpperCase()} blob`))};s.format==="png"?e.toBlob(o,B):e.toBlob(o,B,s.quality)})}Fs(e){switch(e){case"png":return"image/png";case"jpg":return"image/jpeg";case"webp":return"image/webp";default:throw Error("Unsupported image format: "+e)}}}const YA={png:"image/png",jpg:"image/jpeg",webp:"image/webp"},QA={png:".png",jpg:".jpg",webp:".webp"};class FA extends z{Ys(e,s,r){this.Ts(e,this.Je(s)+QA[r])}Ts(e,s){const r=URL.createObjectURL(e);try{const i=document.createElement("a");i.href=r,i.download=s,i.style.display="none",i.rel="noopener",document.body.appendChild(i),i.click(),document.body.removeChild(i)}finally{URL.revokeObjectURL(r)}}Ss(e){return e in YA&&e in QA}}class GA{constructor(){n(this,"us");n(this,"Ps");n(this,"Is");this.us=new TA,this.Ps=new RA,this.Is=new FA}fs(e){return{format:e.format??"png",quality:e.quality??1,scale:e.scale??1,backgroundColor:e.backgroundColor??"transparent"}}Os(e){if(console.log("Validating image export options:",e),!this.Is.Ss(e.format))throw Error(`Saving '${e.format}' files is not supported`);if(e.quality<0||e.quality>1)throw Error("Image quality must be between 0.0 and 1.0");if(e.scale<=0)throw Error("Scale factor must be greater than 0");e.scale>10&&console.warn("Large scale factors may result in very large files and slow performance"),e.format==="jpg"&&e.backgroundColor==="transparent"&&(e.backgroundColor="black")}Us(e,s={}){const r=this.fs(s);if(this.Os(r),r.scale===1&&r.backgroundColor==="transparent")return this.Ps.Gs(e.canvas,r);const i=this.us.Ms(e,r.scale,r.backgroundColor);return this.Ps.Gs(i,r)}async $s(e,s={}){const r=this.fs(s);if(this.Os(r),r.scale===1&&r.backgroundColor==="transparent")return await this.Ps.$s(e.canvas,r);const i=this.us.Ms(e,r.scale,r.backgroundColor);return await this.Ps.$s(i,r)}async Ys(e,s={}){const r=await this.$s(e,s),i=s.format??"png",B=s.filename||this.Is.je();this.Is.Ys(r,B,i)}}const UA=Q=>class extends Q{toString(e={}){return new EA().bs({pipeline:this.Rs,grid:this.he,font:this.bt},e)}saveStrings(e={}){new EA()._s({pipeline:this.Rs,grid:this.he,font:this.bt},e)}toSVG(e={}){return new oA().ws(this,e)}saveSVG(e={}){new oA().Cs(this,e)}async saveCanvas(e,s="png",r={}){await new GA().Ys(this.Zt,{...r,filename:e,format:s})}},OA=Q=>class extends Q{async loadFont(e){return this.bt.Lt(e).then(()=>{const s=this.bt.maxGlyphDimensions;this.he.te(s.width,s.height),this.Rs.re()})}fontSize(e){if(!I.C(typeof e=="number"&&e>0,"Font size must be a positive number greater than 0.",{method:"fontSize",providedValue:e})||this.bt.fontSize===e)return;this.bt.zt(e);const s=this.bt.maxGlyphDimensions;this.he.te(s.width,s.height),this.Rs.re(),this.ut.VA()}},SA=Q=>class extends Q{addConverter(e){return this.Rs.add(e)}removeConverter(e){this.Rs.remove(e)}};class kA{constructor(){n(this,"ut");n(this,"bt");n(this,"Rs");n(this,"Zt");n(this,"he")}}class Z extends function(s,...r){return r.reduce((i,B)=>B(i),s)}(kA,pA,UA,OA,SA){constructor(s=null,r={}){super();n(this,"ie");n(this,"ks");n(this,"Ee");n(this,"Vs");n(this,"Hs");n(this,"zs",null);n(this,"Ls",0);n(this,"Js");n(this,"js",!0);n(this,"Ks",0);n(this,"Ws",0);n(this,"Ns",0);n(this,"Zs",[]);n(this,"Xs",10);n(this,"qs",!1);n(this,"Ar",!1);n(this,"tr",()=>{});n(this,"er",()=>{});n(this,"sr");this.ie=s,this.Ar=s===null,this.Vs=r.renderMode??"auto",this.Hs=r.frameRate??60,this.Js=1e3/this.Hs}static async create(s=null,r={}){const i=new this(s,r),B=i.Ar?r:void 0;let o,E;i.Zt=new sA(i.ie,i.Ar,B),i.ut=new aA(i.Zt.ne()),i.Ar?(o=r.width||800,E=r.height||600):(o=i.Zt.width||800,E=i.Zt.height||600),i.ks=i.ut.UA(o,E),i.bt=new tA(i.ut,r.fontSize??16),await i.bt.kt(r.fontSource);const g=i.bt.maxGlyphDimensions;return i.he=new eA(i.Zt.canvas,g.width,g.height),i.Rs=new BA(i.ut,i.bt,i.he),i.rr(),i.Br(),i}rr(){this.sr=()=>{this.Ar?this.er():this.ir()},window.addEventListener("resize",this.sr),window.ResizeObserver&&this.ie&&!this.Ar&&(this.Ee=new ResizeObserver(()=>{this.ir()}),this.Ee.observe(this.ie))}render(){this.Qr(),this.Ns++,this.qs?console.warn("Cannot render: Required resources have been disposed"):(this.Ar?(this.ks.begin(),this.tr(),this.ks.end()):this.ks.S(this.ie),this.Rs.hasEnabledConverters()?(this.Rs.Oe(this.ks),this.ut.RA(0),this.ut.HA(this.Rs.texture,this.he.offsetX,this.he.offsetY,this.Rs.texture.width,this.Rs.texture.height)):(this.ut.kA(),this.ut.HA(this.ks,this.he.offsetX,this.he.offsetY,this.ks.width,this.ks.height)))}ir(){this.Zt.re(),this.ks.resize(this.Zt.width,this.Zt.height),this.he.re(),this.Rs.re(),this.ut.VA(),this.Vs!=="manual"&&this.render()}Br(){if(this.Vs!=="auto"||!this.js)return;this.Ls=performance.now();const s=r=>{if(!this.js)return void(this.zs=null);const i=r-this.Ls;i>=this.Js&&(this.render(),this.Ls=r-i%this.Js),this.js&&(this.zs=requestAnimationFrame(s))};this.zs=requestAnimationFrame(s)}Qr(){const s=performance.now();if(this.Ws>0){const r=s-this.Ws;this.Zs.push(r),this.Zs.length>this.Xs&&this.Zs.shift();const i=this.Zs.reduce((B,o)=>B+o,0)/this.Zs.length;this.Ks=1e3/i}this.Ws=s}Er(){this.zs&&(cancelAnimationFrame(this.zs),this.zs=null)}renderMode(s){this.Vs!==s&&(this.Er(),this.Vs=s,s==="auto"&&this.js&&this.Br())}frameRate(s){if(s===void 0)return this.Ks;this.Hs=s,this.Js=1e3/s,this.Vs==="auto"&&this.js&&(this.Er(),this.Br())}noLoop(){this.js&&(this.js=!1,this.zs&&(cancelAnimationFrame(this.zs),this.zs=null))}loop(){this.js||(this.js=!0,this.Vs==="auto"&&this.Br())}redraw(s=1){if(I.C(typeof s=="number"&&s>0&&Number.isInteger(s),"Redraw count must be a positive integer.",{method:"redraw",providedValue:s}))for(let r=0;r<s;r++)this.render()}isLooping(){return this.Vs==="auto"&&this.js}draw(s){this.tr=s}windowResized(s){this.er=s}resizeCanvas(s,r){this.Ar&&(this.Zt.re(s,r),this.ks.resize(this.Zt.width,this.Zt.height),this.he.re(),this.Rs.re(),this.ut.VA(),this.Vs!=="manual"&&this.render())}destroy(){this.qs||(this.Er(),window.removeEventListener("resize",this.sr),this.Ee&&this.Ee.disconnect(),this.Rs.O(),this.bt.O(),this.ks.O(),this.ut.O(),this.qs=!0)}get grid(){return this.he}get font(){return this.bt}get mode(){return this.Vs}get pipeline(){return this.Rs}get frameCount(){return this.Ns}get renderer(){return this.ut}set frameCount(s){this.Ns=s}get width(){return this.Zt.width}get height(){return this.Zt.height}get canvas(){return this.Zt}get isDisposed(){return this.qs}}class L{constructor(){throw new P("Textmode is a static class and cannot be instantiated.")}static async create(e,s={}){if(!(e==null||e instanceof HTMLCanvasElement||e instanceof HTMLVideoElement||typeof e=="object"))throw new P("First parameter must be HTMLCanvasElement, HTMLVideoElement, or options object.");if(typeof s!="object")throw new P("Second parameter must be an options object.");if(e instanceof HTMLCanvasElement||e instanceof HTMLVideoElement)return Z.create(e,s);{const r=e||{};return Z.create(null,r)}}static setErrorLevel(e){I.u(e)}static get version(){return"0.1.9"}}const LA=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),HA=Object.freeze(Object.defineProperty({__proto__:null,DEFAULT_FRAMEBUFFER_OPTIONS:{filter:"nearest",wrap:"clamp",format:"rgba",type:"unsigned_byte"},Framebuffer:J,Shader:K},Symbol.toStringTag,{value:"Module"})),VA=L.create,NA=L.setErrorLevel,$A=L.version;d.TextmodeCanvas=sA,d.TextmodeColorPalette=rA,d.TextmodeConversionPipeline=BA,d.TextmodeErrorLevel=M,d.TextmodeFont=tA,d.TextmodeGrid=eA,d.Textmodifier=Z,d.converters=wA,d.create=VA,d.export=LA,d.rendering=HA,d.setErrorLevel=NA,d.textmode=L,d.version=$A,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})},typeof exports=="object"&&typeof module<"u"?t(exports):typeof define=="function"&&define.amd?define(["exports"],t):t((A=typeof globalThis<"u"?globalThis:A||self).textmode={});
26
+ `;return r.join(i)}}class UA extends N{VB(e,B){const r=this.KB(B);this.cB(e,r,"text/plain;charset=utf-8")}KB(e){let B=this.lB(e);return B===".txt"||B.length<=4?this.PB():B}}class Z{constructor(){g(this,"OB");g(this,"LB");g(this,"UB");this.OB=new FA,this.LB=new SA,this.UB=new UA}kB(e){return{preserveTrailingSpaces:e.preserveTrailingSpaces??!1,lineEnding:e.lineEnding??"lf",emptyCharacter:e.emptyCharacter??" ",filename:e.filename||this.UB.PB()}}jB(e,B={}){const r=this.kB(B),i=this.OB.HB(this.OB.gB(e.pipeline),e.grid,e.font,r.emptyCharacter);return this.LB.JB(i,r)}VB(e,B={}){this.UB.VB(this.jB(e,B),B.filename)}}class YA extends W{ZB(e,B=1,r="transparent"){const i=e.canvas;if(B===1&&r==="transparent")return i;const s=document.createElement("canvas"),E=s.getContext("2d"),Q=Math.round(i.width*B),o=Math.round(i.height*B);return s.width=Q,s.height=o,r!=="transparent"&&(E.fillStyle=r,E.fillRect(0,0,Q,o)),E.imageSmoothingEnabled=!1,E.drawImage(i,0,0,i.width,i.height,0,0,Q,o),s}}class OA{NB(e,B){const r=this.XB(B.format);return B.format==="png"?e.toDataURL(r):e.toDataURL(r,B.quality)}async qB(e,B){return new Promise((r,i)=>{const s=this.XB(B.format),E=Q=>{Q?r(Q):i(Error(`Failed to generate ${B.format.toUpperCase()} blob`))};B.format==="png"?e.toBlob(E,s):e.toBlob(E,s,B.quality)})}XB(e){switch(e){case"png":return"image/png";case"jpg":return"image/jpeg";case"webp":return"image/webp";default:throw Error("Unsupported image format: "+e)}}}const LA={png:"image/png",jpg:"image/jpeg",webp:"image/webp"},q={png:".png",jpg:".jpg",webp:".webp"};class zA extends N{AQ(e,B,r){this.tQ(e,this.lB(B)+q[r])}tQ(e,B){const r=URL.createObjectURL(e);try{const i=document.createElement("a");i.href=r,i.download=B,i.style.display="none",i.rel="noopener",document.body.appendChild(i),i.click(),document.body.removeChild(i)}finally{URL.revokeObjectURL(r)}}eQ(e){return e in LA&&e in q}}class WA{constructor(){g(this,"OB");g(this,"LB");g(this,"UB");this.OB=new YA,this.LB=new OA,this.UB=new zA}kB(e){return{format:e.format??"png",quality:e.quality??1,scale:e.scale??1,backgroundColor:e.backgroundColor??"transparent",filename:e.filename||this.UB.PB()}}BQ(e){if(!this.UB.eQ(e.format))throw Error(`Saving '${e.format}' files is not supported`);if(e.quality<0||e.quality>1)throw Error("Image quality must be between 0.0 and 1.0");if(e.scale<=0)throw Error("Scale factor must be greater than 0");e.format==="jpg"&&e.backgroundColor==="transparent"&&(e.backgroundColor="black")}async qB(e,B){if(B.scale===1&&B.backgroundColor==="transparent")return await this.LB.qB(e.canvas,B);const r=this.OB.ZB(e,B.scale,B.backgroundColor);return await this.LB.qB(r,B)}async AQ(e,B={}){const r=this.kB(B);this.BQ(r);const i=await this.qB(e,r);this.UB.AQ(i,r.filename,r.format)}}const NA=n=>class extends n{QQ(){this.Ce.Lt(this.sQ)}toString(e={}){return this.QQ(),new Z().jB({pipeline:this.iQ,grid:this.EQ,font:this.me},e)}saveStrings(e={}){this.QQ(),new Z().VB({pipeline:this.iQ,grid:this.EQ,font:this.me},e)}toSVG(e={}){return this.QQ(),new K().WB(this,e)}saveSVG(e={}){this.QQ(),new K().SB(this,e)}async saveCanvas(e={}){await new WA().AQ(this.Je,e)}},kA=n=>class extends n{async loadFont(e){return this.me.Le(e).then(()=>{const B=this.me.maxGlyphDimensions;this.EQ.je(B.width,B.height),this.Ce.Ot()})}fontSize(e){if(!M.l(typeof e=="number"&&e>0,"Font size must be a positive number greater than 0.",{method:"fontSize",providedValue:e})||this.me.fontSize===e)return;this.me.Oe(e);const B=this.me.maxGlyphDimensions;this.EQ.je(B.width,B.height),this.Ce.Ot()}},JA=n=>class extends n{get frameCount(){return this.rQ.frameCount}set frameCount(e){this.rQ.frameCount=e}frameRate(e){return e===void 0?this.rQ.currentFrameRate:this.rQ.frameRate(e,()=>this.nQ())}noLoop(){this.rQ.pause()}loop(){this.rQ.resume(()=>this.nQ())}redraw(e=1){if(M.l(typeof e=="number"&&e>0&&Number.isInteger(e),"Redraw count must be a positive integer.",{method:"redraw",providedValue:e}))for(let B=0;B<e;B++)this.nQ()}isLooping(){return this.rQ.isLooping}};class HA{constructor(){g(this,"Ce");g(this,"me");g(this,"Je");g(this,"EQ");g(this,"rQ");g(this,"sQ");g(this,"iQ");g(this,"gQ")}nQ(){}}class AA extends function(B,...r){return r.reduce((i,s)=>s(i),B)}(HA,RA,NA,kA,JA){constructor(B={}){super();g(this,"oQ",!1);g(this,"aQ",()=>{});g(this,"hQ",()=>{});g(this,"cQ");this.Je=new j(B),this.Ce=new uA(this.Je.qe()),this.me=new V(this.Ce,B.fontSize??16),this.rQ=new bA(B.frameRate??60),this.sQ=this.Ce.bt(`#version 300 es
27
+ 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
28
+ 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.gQ=this.Ce.bt("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);}")}static async create(B={}){const r=new this(B);await r.me.Fe(B.fontSource);const i=r.me.maxGlyphDimensions;return r.EQ=new X(r.Je.canvas,i.width,i.height),r.iQ=r.Ce.Ft(r.EQ.cols,r.EQ.rows,5),r.CQ(),r.rQ.start(()=>r.nQ()),r}CQ(){this.cQ=()=>{this.hQ()},window.addEventListener("resize",this.cQ)}nQ(){this.rQ.measureFrameRate(),this.rQ.incrementFrame(),this.oQ||(this.iQ.U(),this.Ce.yt(this.sQ),this.aQ(),this.Ce.Lt(this.sQ),this.iQ.k(),this.Ce.St(0),this.Ce.yt(this.gQ),this.gQ.tA({u_characterTexture:this.me.fontFramebuffer,u_charsetDimensions:[this.me.textureColumns,this.me.textureRows],u_asciiCharacterTexture:this.iQ.textures[0],u_primaryColorTexture:this.iQ.textures[1],u_secondaryColorTexture:this.iQ.textures[2],u_transformTexture:this.iQ.textures[4],u_rotationTexture:this.iQ.textures[3],u_gridCellDimensions:[this.EQ.cols,this.EQ.rows],u_gridPixelDimensions:[this.EQ.width,this.EQ.height],u_gridOffsetPixels:[this.EQ.offsetX,this.EQ.offsetY],u_aspectRatio:this.EQ.width/this.EQ.height}),this.Ce.Gt(this.EQ.offsetX,this.EQ.offsetY,this.EQ.width,this.EQ.height))}draw(B){this.aQ=B}windowResized(B){this.hQ=B}resizeCanvas(B,r){this.Je.S(B,r),this.EQ.lA(),this.iQ.S(this.EQ.cols,this.EQ.rows),this.Ce.Ot(),this.nQ()}destroy(){this.oQ||(this.rQ.stop(),window.removeEventListener("resize",this.cQ),this.me.W(),this.Ce.W(),this.oQ=!0)}get grid(){return this.EQ}get font(){return this.me}get width(){return this.Je.width}get height(){return this.Je.height}get canvas(){return this.Je.canvas}get isDisposed(){return this.oQ}get drawFramebuffer(){return this.iQ}}class L{constructor(){throw new I("Textmode is a static class and cannot be instantiated.")}static async create(e){return AA.create(e)}static setErrorLevel(e){M.P(e)}static get version(){return"0.2.0-beta.1"}}const $A=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),VA=L.create,XA=L.setErrorLevel,jA=L.version;d.TextmodeCanvas=j,d.TextmodeErrorLevel=R,d.TextmodeFont=V,d.TextmodeGrid=X,d.Textmodifier=AA,d.create=VA,d.export=$A,d.setErrorLevel=XA,d.textmode=L,d.version=jA,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})},typeof exports=="object"&&typeof module<"u"?t(exports):typeof define=="function"&&define.amd?define(["exports"],t):t((A=typeof globalThis<"u"?globalThis:A||self).textmode={});