起因

在使用 PixiJS 进行富文本渲染开发过程中,遭遇 HTMLText 组件处理中文字体加载时出现显著卡顿现象。针对此问题,在开源社区提交 issue 并附上相关技术细节与运行表现,期望获得解决方案。

提issues
提issues

从 issue 反馈内容来看,项目维护者提出两种建议:

其一,针对中日韩(CJK)语言场景,推荐使用 Text 组件替代 HTMLText 组件;

其二,若使用 HTMLText 组件,则建议避免使用自定义字体,转而采用内置网络字体。维护者进一步解释,由于 HTMLText 组件的渲染机制依赖字体内嵌,在当前架构下暂无其他有效解决方案。

维护者意思是不想支持中日韩字体(摆烂), 基于维护者对新纹理方案支持意愿较低的情况,决定深入研究 HTMLText 组件的内部实现机制。在剖析源码过程中,不仅探寻解决当前卡顿问题的线索,更对其模块设计理念进行深度挖掘,从中获得诸多可复用的设计思路与技术启发。

还是想吐槽,不支持中日韩字体,难道是因为CJK字体文件太大么,就不去优化处理么?或因开发者群体使用场景倾向,导致该场景在项目优先级中较低?

纹理生成流程

图一 纹理生成流程
图一 纹理生成流程

在技术实现层面,HTMLText 组件在渲染富文本时,因需将字体资源内嵌至渲染流程,导致中文字体加载时资源消耗激增,进而引发卡顿。结合现有纹理生成流程(见图 1),虽可尝试通过优化纹理生成逻辑来缓解性能瓶颈,但需突破组件原有设计限制。

从图中可以看到PixiJS采用的方案是 SVG + foreignObject 实现富文本渲染转纹理。

前端通常处理富文本渲染的方式: 你可以选择以下路径之一:

  1. HTML → Canvas → 纹理 将富文本绘制到 canvas 上,然后将其内容生成 WebGL 纹理。

  2. HTML → SVG → Canvas → 纹理 先将富文本封装成 SVG,再绘制到 Canvas,再转纹理,适用于需要保留更多字体样式的情况。

  3. HTML → dom-to-image / html2canvas → 图片 → 纹理 直接截屏 DOM 元素,生成图片纹理。

优势对比:

HTMLTextSystem

HTMLTextSystem 类负责生成 HTMLText 所需的纹理,并对这些纹理进行管理和清理操作。

核心方法还是_buildTexturePromise,源码如下:

private async _buildTexturePromise(options: HTMLTextOptions){// 解构出所需的属性,包括文本内容 text、样式 style、分辨率 resolution 以及可选的纹理样式 textureStyle。const { text, style, resolution, textureStyle } = options as {text: string,style: HTMLTextStyle,resolution: number,textureStyle?: TextureStyle,};// 获取 HTMLTextRenderData 实例,从 BigPool 中获取一个 HTMLTextRenderData 实例,用于存储和处理 HTML 文本的渲染数据。const htmlTextData = BigPool.get(HTMLTextRenderData);// 提取字体家族并生成字体 CSS// extractFontFamilies 函数用于从文本和样式中提取使用的字体家族。const fontFamilies = extractFontFamilies(text, style);// getFontCss 函数根据提取的字体家族、样式和默认文本样式生成字体相关的 CSS 字符串const fontCSS = await getFontCss(fontFamilies,style,HTMLTextStyle.defaultTextStyle as {fontWeight: string, fontStyle: string});// 测量 HTML 文本const measured = measureHtmlText(text, style, fontCSS, htmlTextData);// 计算纹理的宽度和高度const width = Math.ceil(Math.ceil((Math.max(1, measured.width) + (style.padding * 2))) * resolution);const height = Math.ceil(Math.ceil((Math.max(1, measured.height) + (style.padding * 2))) * resolution);// 设置图像的宽度和高度const image = htmlTextData.image;const uvSafeOffset = 2;image.width = (width | 0) + uvSafeOffset;image.height = (height | 0) + uvSafeOffset;// 生成 SVG URL 并加载图像const svgURL = getSVGUrl(text, style, resolution, fontCSS, htmlTextData);await loadSVGImage(image, svgURL, isSafari() && fontFamilies.length > 0);// 处理 WebGPU 的兼容性问题const resource: HTMLImageElement | HTMLCanvasElement = image;let canvasAndContext: CanvasAndContext;if (this._createCanvas){// silly webGPU workaround..canvasAndContext = getTemporaryCanvasFromImage(image, resolution);}// 生成纹理const texture = getPo2TextureFromSource(canvasAndContext ? canvasAndContext.canvas : resource,image.width - uvSafeOffset,image.height - uvSafeOffset,resolution);// 应用纹理样式if (textureStyle) texture.source.style = textureStyle;// 处理 WebGPU 的兼容性问题if (this._createCanvas){this._renderer.texture.initSource(texture.source);CanvasPool.returnCanvasAndContext(canvasAndContext);}// 返回 HTMLTextRenderData 实例并返回纹理BigPool.return(htmlTextData as PoolItem);return texture;}

其中对于svg转纹理的逻辑,涉及到几个关键的函数

getFontCss

getFontCss 核心功能是动态加载多个字体的 CSS,并做缓存处理以避免重复请求。以下是源码部分:

import { Cache } from'../../../assets/cache/Cache';
import { loadFontCSS } from'./loadFontCSS';importtype { FontCSSStyleOptions } from'./loadFontCSS';
exportconst FontStylePromiseCache = new Map<string, Promise<string>>();
exportasyncfunction getFontCss(fontFamilies: string[],style: FontCSSStyleOptions,defaultOptions: {fontWeight: string, fontStyle: string}
)
{const fontPromises = fontFamilies// 过滤出 Cache 中存在对应字体 URL 的字体家族。.filter((fontFamily) => Cache.has(`${fontFamily}-and-url`)).map((fontFamily, i) =>{// 检查 FontStylePromiseCache 中是否已经存在该字体家族的 Promise。if (!FontStylePromiseCache.has(fontFamily)){const { url } = Cache.get(`${fontFamily}-and-url`);if (i === 0){FontStylePromiseCache.set(fontFamily, loadFontCSS({fontWeight: style.fontWeight,fontStyle: style.fontStyle,fontFamily,}, url));}else{FontStylePromiseCache.set(fontFamily, loadFontCSS({fontWeight: defaultOptions.fontWeight,fontStyle: defaultOptions.fontStyle,fontFamily,}, url));}}return FontStylePromiseCache.get(fontFamily);});return (awaitPromise.all(fontPromises)).join('\n');
}

函数 getFontCss 旨在:

  • 根据传入的字体列表和样式,加载字体的 CSS;

  • 只加载 Cache 中有记录的字体;

  • 使用缓存(FontStylePromiseCache)避免重复加载相同字体;

  • 返回一个合并后的 CSS 字符串(所有字体的样式表拼接在一起)。

中间穿插一下 loadFontCss 函数

loadFontCSS
loadFontCSS

loadFontCSS会把字体文件的 URL 编码为 Base64 格式。

开始认为PixiJS这么做是缓存字体文件数据到内存,避免字体文件的多次请求,后面问了GPT,才知道 SVG → Canvas → Texture 这种转纹理的方案:SVG 本身是一个独立的文档环境,无法自动使用你在 HTML 页面中通过 link 或 @font-face 加载的字体。

如果不处理字体嵌入,SVG 渲染时可能会回退为默认字体,导致样式错乱或排版异常。

这也解释文章开头提及作者回复的方案,CJK这种字体太大,转base64无法很好的解决。结合现有方案的设计,只能避免使用CJK字体,或者使用Text节点。

GPT还给出了SVG转纹理的注意事项:

注意点
注意点

分析到这,其实知道getFontCss会返回两种结果:

第一种web fonts,通过如下方式注册:

Assets.addBundle('fonts', [{ alias: 'Lineal2', src: 'https://pixijs.com/assets/webfont-loader/Lineal.otf' },]);

通过getFontCss处理后,会返回

网络字体转base64结果
网络字体转base64结果

第二种,不注册web fonts,在项目里面用css fonts方案加载,比如引入一个font.css文件:

@font-face {font-family: 'Lineal';src: url('https://pixijs.com/assets/webfont-loader/Lineal.otf');font-weight: normal;font-style: normal;
}

返回的如下截图:

未通过Assets.addBundle注册
未通过Assets.addBundle注册

这种方式加载到document.fonts里面后, 可以通过:

分析到这,接下来就是看getSVGUrl是如何处理的

getSVGUrl
export function getSVGUrl(text: string,style: HTMLTextStyle,resolution: number,fontCSS: string,htmlTextData: HTMLTextRenderData
)
{const { domElement, styleElement, svgRoot } = htmlTextData;domElement.innerHTML = `<style>${style.cssStyle}</style><div style='padding:0;'>${text}</div>`;domElement.setAttribute('style', `transform: scale(${resolution});transform-origin: top left; display: inline-block`);styleElement.textContent = fontCSS;const { width, height } = htmlTextData.image;svgRoot.setAttribute('width', width.toString());svgRoot.setAttribute('height', height.toString());returnnew XMLSerializer().serializeToString(svgRoot);
}

该函数用于生成一个渲染了 HTML + 字体样式的 SVG 字符串:

  • 实现文字转 SVG 图像的功能

  • 保持样式、字体、缩放一致

  • 可用于导出富文本图像、预览编辑内容等

getSVGUrl函数存在两种情况,如何fontCss存在,即web Font加载的字体(系统不支持的字体),比如Lineal字体族,转换后的svg内容:

<svg xmlns="http://www.w3.org/2000/svg" width="331" height="157"><foreignObject width="10000" height="10000" style="overflow: hidden;"><style xmlns="http://www.w3.org/1999/xhtml">@font-face {font-family: "Lineal";src: url('data:application/x-font-otf;basesrc: url('data:application/x-font-otf;base64,T1RUTwARAQAABAxx.....');
font-weight: normal;font-style: normal;}</style><div xmlns="http://www.w3.org/1999/xhtml" style="transform: scale(1.5);transform-origin: top left; display: inline-block"><style>div { color: #1a1a1a;font-size: 36px;font-family: Sourcehansanssc Normal;font-weight: normal;font-style: normal;font-variant: normal;letter-spacing: 0px;text-align: center;padding: 0px;white-space: pre-wrap;line-height: 36px;word-wrap: break-word;max-width: 218.67921982473445px } * { padding: 0px } p { line-height: 51.42857142857143px } a { color: #4c84ff }</style><div style="padding:0;"><p style="margin:0; padding: 0">柴门闻犬吠,风雪夜归人。</p></div></div></foreignObject></svg>

如果fontCss不存在,返回的svgURL内容如下:

<svg xmlns="http://www.w3.org/2000/svg" width="323" height="80"><foreignObject width="10000" height="10000" style="overflow: hidden;"><style xmlns="http://www.w3.org/1999/xhtml"></style><div xmlns="http://www.w3.org/1999/xhtml" style="transform: scale(1.5);transform-origin: top left; display: inline-block"><style>div { color: #1a1a1a;font-size: 36px;font-family: Comic Sans MS;font-weight: normal;font-style: normal;font-variant: normal;letter-spacing: 0px;text-align: center;padding: 0px;white-space: pre-wrap;line-height: 36px;word-wrap: break-word;max-width: 296.6889602439261px } * { padding: 0px } p { line-height: 51.42857142857143px } a { color: #4c84ff }</style><div style="padding:0;"><p style="margin:0; padding: 0">1234567890</p></div></div></foreignObject></svg>

两者的区别在于没有@font-face加载的字体信息。

如果是中文字体,通过web fonts加载的话,PixiJS会将字体转换成base64存起来,数据会很大,截图看下Texture纹理的数据:

Texture纹理数据
Texture纹理数据

哪怕PixiJS内部对资源数据做了Cache缓存,但是大文件字体,每次通过loadImage形式,耗时是很大的:

图二
图二

交互表现来说,体验上会卡顿,因为从纹理计算到最后更新耗时远大于一帧的时间,从图二的截图可以看出。

卡顿的会很明显。当时有个疑问的点,哪怕是GPT说,SVG转纹理,需要将字体转为 Base64 并内嵌到 SVG 中。 为了验证这个结论,我尝试做了个demo。

demo验证

在线网站:https://codepen.io/daydaylee1227/pen/ogXPLOK

情况一

直接用css @font-face加载字体。通过分析代码,直接给出getSVGUrl函数生成的svgURL:

<svg xmlns="http://www.w3.org/2000/svg" width="248" height="80"><foreignObject width="100" height="100" style="overflow: hidden;"><style xmlns="http://www.w3.org/1999/xhtml"></style><div xmlns="http://www.w3.org/1999/xhtml" style="transform: scale(1.5);transform-origin: top left; display: inline-block"><style>div { color: #1a1a1a;font-size: 36px;font-family: Lineal;font-weight: normal;font-style: normal;font-variant: normal;letter-spacing: 0px;text-align: center;padding: 0px;white-space: pre-wrap;line-height: 36px;word-wrap: break-word;max-width: 292.02037419639566px } * { padding: 0px } p { line-height: 51.42857142857143px } a { color: #4c84ff }</style><div style="padding:0;"><p style="margin:0; padding: 0">abcdefghijkl</p></div></div></foreignObject></svg>

将上面的svgURL贴进上面的在线平台,查看渲染结果:

svg未带上字体信息
svg未带上字体信息
情况二

通过PixiJS预定义一组字体资源,注册字体资源:

Assets.addBundle('fonts', [{ alias: 'Lineal2', src: 'https://pixijs.com/assets/webfont-loader/Lineal.otf' },]);

通过分析代码,直接给出getSVGUrl函数生成的svgURL:

<svg xmlns="http://www.w3.org/2000/svg" width="259" height="80"><foreignObject width="100" height="100" style="overflow: hidden;"><style xmlns="http://www.w3.org/1999/xhtml">@font-face {font-family: "Lineal";src: url('data:font/otf;base64,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AKYArQC0ALoAwADKANQA2wDiAOgA7gD5AQQBCgEQARoBJAEwATwBRwFSAVYBWgFgAWYBbQF0AXoBgAGHAY4BmAGaAZwBpwGyAb4BygHWAdwB4gHuAfoCAAIGAgoCDgIUAhoCJgIyAjgCPgJJAkwCTwJWAl0CYwJpAnYCgwKJAo8CmwKnAq0CswK5Ar8CygLVAt0C5QLxAv0DAwMJAw0DEQMXAx0DJAMrAzEDNwM8A0EDTgNbA2IDaQN0A38DigOVA5sDoQOrA7UDugPBA8gDzwPWA90D5APrA/ID+QQABAcEDgQVBBwEIwQqBDEEOAQ/BEYETQRUBFsEYgRpBHAEdwR+BIUEjASTBJgEnQSkBKsEsgS5BMAExwTOBNUE3ATjBOoE8QT4BP0FAgUJBRAFFwUeBSUFLAUzBToFQQVIBU8FVgVdBWQFawVyBXkFgAWHBY4FlQWcBaMFqgWxBbgFvwXGBc0F1AXbBeIF6QXwBfcF/gYFBgwGEwYaBiEGKAYvBjYGPQZEBksGUgZZBmAGZwZuBnUGewaBBogGjwaWBp0GpAarBrIGuQbABscGzgbVBtwG4wbqBvEG+Ab/BwkHEwcaByEHLAc3Bz4HRQdMB1MHWgdhB2gHbwd2B30HhAeLB5IHmQegB6cHrge1B7wHwwfKB9EH2AffB+sH9wf+CAUIDAgTCBoIIQgoCC8INgg9CEQISwhSCFkIYAhnCG4IdQh8CIMIigiRCJgInwimCK0ItAi7CMIIyQjQCNcI3gjlCOwI8wj6CQEJCAkPCRYJHQkkCSsJMgk5CUAJRwlOCVUJXAljCWoJcQl4CX8JhgmNCZQJmwmiCakJsAm3Cb4JxQnMCdMJ2gnhCegJ7wn2Cf0KBAoLChIKGQogCicKLgo1CjwKQwpKClEKWApfCmYKbQp0CnsKggqJCpAKlwqeCqUKrAqzCroKwQrICs8K1grdCuQK6wryCvkLAAsHCw4LFQscCyMLKgsxCzgLPwtGC00LVAtbC2ILaQtwC3cLfguFC4wLkwuaC6ELqAuvC7YLvQvEC8sL0gvZC+AL5wvuC/UL/AxSDFgMXnVuaTAwQUR1bmkwMEIydW5pMDBCM3VuaTAwQjV1bmkwMEI5QW1hY3JvbmFtYWNyb25BYnJldmVhYnJldmVBb2dvbmVrYW9nb25la0NhY3V0ZWNhY3V0ZUNjaXJjdW1mbGV4Y2NpcmN1bWZsZXhDZG90YWNjZW50Y2RvdGFjY2VudENjYXJvbmNjYXJvbkRjYXJvbmRjYXJvbkRjcm9hdGRjcm9hdEVtYWNyb25lbWFjcm9uRWJyZXZlZWJyZXZlRWRvdGFjY2VudGVkb3RhY2NlbnRFb2dvbmVrZW9nb25la0VjYXJvbmVjYXJvbkdjaXJjdW1mbGV4Z2NpcmN1bWZsZXhHYnJldmVnYnJldmVHZG90YWNjZW50Z2RvdGFjY2VudEdjb21tYWFjY2VudGdjb21tYWFjY2VudEhjaXJjdW1mbGV4aGNpcmN1bWZsZXhIYmFyaGJhckl0aWxkZWl0aWxkZUltYWNyb25pbWFjcm9uSWJyZXZlaWJyZXZlSW9nb25la2lvZ29uZWtJZG90YWNjZW50SUppakpjaXJjdW1mbGV4amNpcmN1bWZsZXhLY29tbWFhY2NlbnRrY29tbWFhY2NlbnRrZ3JlZW5sYW5kaWNMYWN1dGVsYWN1dGVMY29tbWFhY2NlbnRsY29tbWFhY2NlbnRMY2Fyb25sY2Fyb25MZG90bGRvdE5hY3V0ZW5hY3V0ZU5jb21tYWFjY2VudG5jb21tYWFjY2VudE5jYXJvbm5jYXJvbm5hcG9zdHJvcGhlRW5nZW5nT21hY3Jvbm9tYWNyb25PYnJldmVvYnJldmVPaHVuZ2FydW1sYXV0b2h1bmdhcnVtbGF1dFJhY3V0ZXJhY3V0ZVJjb21tYWFjY2VudHJjb21tYWFjY2VudFJjYXJvbnJjYXJvblNhY3V0ZXNhY3V0ZVNjaXJjdW1mbGV4c2NpcmN1bWZsZXhTY2VkaWxsYXNjZWRpbGxhVGNvbW1hYWNjZW50dGNvbW1hYWNjZW50VGNhcm9udGNhcm9uVGJhcnRiYXJVdGlsZGV1dGlsZGVVbWFjcm9udW1hY3JvblVicmV2ZXVicmV2ZVVyaW5ndXJpbmdVaHVuZ2FydW1sYXV0dWh1bmdhcnVtbGF1dFVvZ29uZWt1b2dvbmVrV2NpcmN1bWZsZXh3Y2lyY3VtZmxleFljaXJjdW1mbGV4eWNpcmN1bWZsZXhaYWN1dGV6YWN1dGVaZG90YWNjZW50emRvdGFjY2VudGxvbmdzdW5pMDE4MHVuaTAxODF1bmkwMTgydW5pMDE4M3VuaTAxODR1bmkwMTg1dW5pMDE4NnVuaTAxODd1bmkwMTg4dW5pMDE4OXVuaTAxOEF1bmkwMThCdW5pMDE4Q3VuaTAxOER1bmkwMThFdW5pMDE4RnVuaTAxOTB1bmkwMTkxdW5pMDE5M3VuaTAxOTR1bmkwMTk1dW5pMDE5NnVuaTAxOTd1bmkwMTk4dW5pMDE5OXVuaTAxOUF1bmkwMTlCdW5pMDE5Q3VuaTAxOUR1bmkwMTlFdW5pMDE5Rk9ob3Jub2hvcm51bmkwMUEydW5pMDFBM3VuaTAxQTR1bmkwMUE1dW5pMDFBNnVuaTAxQTd1bmkwMUE4dW5pMDFBOXVuaTAxQUF1bmkwMUFCdW5pMDFBQ3VuaTAxQUR1bmkwMUFFVWhvcm51aG9ybnVuaTAxQjF1bmkwMUIydW5pMDFCM3VuaTAxQjR1bmkwMUI1dW5pMDFCNnVuaTAxQjd1bmkwMUI4dW5pMDFCOXVuaTAxQkF1bmkwMUJCdW5pMDFCQ3VuaTAxQkR1bmkwMUJFdW5pMDFCRnVuaTAxQzB1bmkwMUMxdW5pMDFDMnVuaTAxQzN1bmkwMUM0dW5pMDFDNXVuaTAxQzZ1bmkwMUM3dW5pMDFDOHVuaTAxQzl1bmkwMUNBdW5pMDFDQnVuaTAxQ0N1bmkwMUNEdW5pMDFDRXVuaTAxQ0Z1bmkwMUQwdW5pMDFEMXVuaTAxRDJ1bmkwMUQzdW5pMDFENHVuaTAxRDV1bmkwMUQ2dW5pMDFEN3VuaTAxRDh1bmkwMUQ5dW5pMDFEQXVuaTAxREJ1bmkwMURDdW5pMDFERHVuaTAxREV1bmkwMURGdW5pMDFFMHVuaTAxRTF1bmkwMUUydW5pMDFFM3VuaTAxRTR1bmkwMUU1R2Nhcm9uZ2Nhcm9udW5pMDFFOHVuaTAxRTl1bmkwMUVBdW5pMDFFQnVuaTAxRUN1bmkwMUVEdW5pMDFFRXVuaTAxRUZ1bmkwMUYwdW5pMDFGMXVuaTAxRjJ1bmkwMUYzdW5pMDFGNHVuaTAxRjV1bmkwMUY2dW5pMDFGN3VuaTAxRjh1bmkwMUY5QXJpbmdhY3V0ZWFyaW5nYWN1dGVBRWFjdXRlYWVhY3V0ZU9zbGFzaGFjdXRlb3NsYXNoYWN1dGV1bmkwMjAwdW5pMDIwMXVuaTAyMDJ1bmkwMjAzdW5pMDIwNHVuaTAyMDV1bmkwMjA2dW5pMDIwN3VuaTAyMDh1bmkwMjA5dW5pMDIwQXVuaTAyMEJ1bmkwMjBDdW5pMDIwRHVuaTAyMEV1bmkwMjBGdW5pMDIxMHVuaTAyMTF1bmkwMjEydW5pMDIxM3VuaTAyMTR1bmkwMjE1dW5pMDIxNnVuaTAyMTdTY29tbWFhY2NlbnRzY29tbWFhY2NlbnR1bmkwMjFBdW5pMDIxQnVuaTAyMUN1bmkwMjFEdW5pMDIxRXVuaTAyMUZ1bmkwMjIwdW5pMDIyMXVuaTAyMjJ1bmkwMjIzdW5pMDIyNHVuaTAyMjV1bmkwMjI2dW5pMDIyN3VuaTAyMjh1bmkwMjI5dW5pMDIyQXVuaTAyMkJ1bmkwMjJDdW5pMDIyRHVuaTAyMkV1bmkwMjJGdW5pMDIzMHVuaTAyMzF1bmkwMjMydW5pMDIzM3VuaTAyMzR1bmkwMjM1dW5pMDIzNnVuaTAyMzd1bmkwMjM4dW5pMDIzOXVuaTAyM0F1bmkwMjNCdW5pMDIzQ3VuaTAyM0R1bmkwMjNFdW5pMDIzRnVuaTAyNDB1bmkwMjQxdW5pMDI0MnVuaTAyNDN1bmkwMjQ0dW5pMDI0NXVuaTAyNDZ1bmkwMjQ3dW5pMDI0OHVuaTAyNDl1bmkwMjRBdW5pMDI0QnVuaTAyNEN1bmkwMjREdW5pMDI0RXVuaTAyNEZ1bmkwMjUwdW5pMDI1MXVuaTAyNTJ1bmkwMjUzdW5pMDI1NHVuaTAyNTV1bmkwMjU2dW5pMDI1N3VuaTAyNTh1bmkwMjU5dW5pMDI1QXVuaTAyNUJ1bmkwMjVDdW5pMDI1RHVuaTAyNUV1bmkwMjVGdW5pMDI2MHVuaTAyNjF1bmkwMjYydW5pMDI2M3VuaTAyNjR1bmkwMjY1dW5pMDI2NnVuaTAyNjd1bmkwMjY4dW5pMDI2OXVuaTAyNkF1bmkwMjZCdW5pMDI2Q3VuaTAyNkR1bmkwMjZFdW5pMDI2RnVuaTAyNzB1bmkwMjcxdW5pMDI3MnVuaTAyNzN1bmkwMjc0dW5pMDI3NXVuaTAyNzZ1bmkwMjc3dW5pMDI3OHVuaTAyNzl1bmkwMjdBdW5pMDI3QnVuaTAyN0N1bmkwMjdEdW5pMDI3RXVuaTAyN0Z1bmkwMjgwdW5pMDI4MXVuaTAyODJ1bmkwMjgzdW5pMDI4NHVuaTAyODV1bmkwMjg2dW5pMDI4N3VuaTAyODh1bmkwMjg5dW5pMDI4QXVuaTAyOEJ1bmkwMjhDdW5pMDI4RHVuaTAyOEV1bmkwMjhGdW5pMDI5MHVuaTAyOTF1bmkwMjkydW5pMDI5M3VuaTAyOTR1bmkwMjk1dW5pMDI5NnVuaTAyOTd1bmkwMjk4dW5pMDI5OXVuaTAyOUF1bmkwMjlCdW5pMDI5Q3VuaTAyOUR1bmkwMjlFdW5pMDI5RnVuaTAyQTB1bmkwMkExdW5pMDJBMnVuaTAyQTN1bmkwMkE0dW5pMDJBNXVuaTAyQTZ1bmkwMkE3dW5pMDJBOHVuaTAyQTl1bmkwMkFBdW5pMDJBQnVuaTAyQUNDcmVhdGVkIGJ5IEZyYW5rIEFERUJJQVlFIHdpdGggRm9udEZvcmdlIDIuMCAoaHR0cDovL2ZvbnRmb3JnZS5zZi5uZXQpCkxpY2VuY2UgT0ZMIDEuMUxpbmVhbExpbmVhbAAAAAABAAIAAwAEAAUABgAHAGgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAHwAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAZwBkAKAAZgCDAKoAiwBqAJcBhwClAIAAoQCcAYgBiQB9AYoAcwByAIUBiwCPAHgAngCbAKMAewCuAKsArACwAK0ArwCKALEAtQCyALMAtAC5ALYAtwC4AJoAugC+ALsAvAC/AL0AqACNAMQAwQDCAMMAxQCdAJUAywDIAMkAzQDKAMwAkADOANIAzwDQANEA1gDTANQA1QCnANcA2wDYANkA3ADaAJ8AkwDhAN4A3wDgAOIAogDjAYwBjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwAkQG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcoBywCMAJIBzAHNAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAdoAjgCUAdsB3AHdAd4B3wHgAeEB4gHjAeQB5QHmAMAA3QHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gHzAfQB9QH2AfcB+AH5AfoB+wH8AMYB/QH+Af8CAADHAOQCAQICAgMCBAIFAgYCBwIIAgkCCgILAgwCDQIOAg8CEAIRAhICEwBlAhQCFQIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIlAiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AjgCOQI6AjsCPAI9Aj4CPwJAAkECQgJDAkQCRQJGAkcCSAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAAgCbQIAAQAjACYAPwBYApUCrgTSBOsFDgVUBW4FhwZRBnQGjQizCTUKDApwC68NGw4ID10QmhEwEtgUIBTfFkgYhhn8HBcd7R8OH9sgIyBOIJAg6CEVIUYheyGkIdQh/CKUIscjmSPTJCIkYCSnJN4lBSUuJckmuibSJvonFyddJ8Un3yf6KBUoMChMKJQovykBKVkphim3KewqFSpFKm0rlCvHLKIs3C0rLWktsC3nLg4uNy7mL/gw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ABUhCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO+GuL1v8AQgKA/wBL+wD/AEICgP8AS/rA/wDQAsDWAf8AOYAA/wBMBQD/APL4QP8ATALAqf8ATAUA/wBB+sD/AEwCwP8AQkAA/wBLvYAD/wHigAD/ANj9gBWL///9gACL//+5BQCL///9gAD/AAKAAIv/AIt/wIuL//91fYCL///9gAD/AAKAAIv/ACQCwIuui/8AAoAAi4v/AAKAAIv/AIqCgP8Ai32Ai/8AAoAAiwWL/wACgACL/wBG+wCL/wACgAD///2AAIv//3SCgIv//7P9QIv//3SAQIsF/wCyAoD38hX/ADqrgP8ALRSA///SOED//8VKQP//xUpA///S9cD//9MwgP//xUpA///FSkD//9I4QP8ALNnA/wA6q4D/ADq1wP8ALcfA/wAtx8D/ADq1wB///e6CgBb/AIp6wP///sAA/wBofYD//5WrgIv//3UXAIv//3YcQP//l4KA//+VrgD//3WFQP///rXACPic/wI2/YAV//+ea4D///tjwP//to+A//+0LgCL//+c8MAI//+atcD/AE4/wP//scpA/wBmQsD/AGVKQP8ATjNA/wBONcD/AGVKQP8AZkKA//+xwoD/AE07AP//msAAHv/9on2AFov///2AgIv//YMCAIv///2AAP8AAoAAi/8AJAUAi66LBf8AtkUA/wCLNgD/AIs4QP8AtUfA/wC2RUD//3TKAP8AizhA//9JuwAf//+4+wAGDm7/ABVIAHagdvkWd593Ev8AOcuA/wEb/YATqP8BDsQA/wKCSAAViYAA///9gAD/AAD4AP//K0KA//2CyAD/AAJFAP///0AAiYAA/wBG+wCLi/8AAoAA/wACgAD///84AP8A1TMA/wJ8wsD///1PgP8AAQVAi/8AAoAABQ7ki9b/ATn7AP8ATAUAAf8AGgKA/wBL+wD/AToFAP8AS/sAA/8BAoKA/wGE+wAV/wBZuwD/AEPFAP//vDrA//+nSkD//6dKQP//vDsA//+7NcD//6ZFAP//p0qA//+8MID/AETKQP8AWLXA/wBYtcD/AEPPgP8AQ8VA/wBYtYAf/wBMBQAE//98tgD//5rKAP//mspA//98tcD//3y1wP8AZTYA//+aykD/AINKAP8AhEVA/wBlNcD/AGU1wP8Ag0pA/wCDSkD//5rKQP8AZTXA//97usAfDvukoHagdhL/ACh9gP8ATAUAE6D/ACh9gP8B0fhAFYv///2AAIv//jMHwIv///2AAP8AAoAAi/8AJAUAi66L/wACgACLi/8AAoAAi/8BzPhAi/8AAoAA///9gACL//+4+wCLBQ7ai/8ATAVA/wCI/YD/AEwFAPeq/wBL+wAB/wApgAD/AEb6gP8BGYWA1gP/AP6CgP8CgwLAFf//hbsA//+iwoD//6LCwP//hbqAH/8AAoAA///9gAD/AEb6gP8AAoAA/wACgAAG/wBPuwD/ADzIAP8AO8zA/wBOwAD/AE61wP8APMfA///EM0D//7BFAP//sUpA///DOED//8Q9gP//sUpAHv//uPsAiYAAi4v///49wP//coUA//7keoD/AAH9gP///sAAiYAA/wBp+oCL/wCOCACL/wCw/YCL/wACgACLi/8AAoAAi/8ARwVAi/8AAoAA///9gACL//7FPYCLBf8ARD0A/wCI/YD/ACKIAIsF/wB5QAD/AF09gP8AXT1A/wB5QAD/AHpFgP//osKA/wBdPUD//4bAAB8Oi/8ASvXA/wDzAsD/AEwCgP8Aq/2A/wBL+sAB/wArPYD/AEtFAP8A8wMA/wBL+oAD/wAqgAD/AoHzQBWL///9gACL//+5BUCL///9gAD/AAKAAIv3NIv/AFmHwIv//7X4QP//VAKA//+XgoCL///9gACLiYAAi///uP2AiYAA/wACgACL/wBHBUCL/wA0+ECLBf8ARMAA/wA0xYD//8wzAP//u0pA//+6RUD//8swQP//yzrA//+7SkD//7pFgP//zD0A/wA0xUD/AEW6wB+L/wAz/YCL/wACgAD///2AAIv//7j9gIv///49gIuL//+0BUAF/wAKHsD//5qFAP8AUa4A//+1goD/AGj1wIv/AG9KQIv/AFY1wP8AVTDAi/8AcEUAi/8AXJSA///EZAD/AEpzQP//q9wA/wAWdcAI/wBsgsD/APuFQP///b1A/wAA+sCL/wACgAD//9wFgIv//sD6gIsFDq6gdqB2/wCN/YD/AEwFQPg9d593Ev8Bc+FA1hO0/wELY8D/AoMCwBWL///9gAD///34gP8AAPrA//8HwoD//hAFQP8AAkKA///++sCL///9gAD/AER7AIv/AAKAAIv/ALEHgIv/AGh9gIuL//90goCL///9gAD/AAKAAIuui66L/wACgACLBYv/AAKAAIv/AIt9gIv/AAKAAIv/AEcFQIv/AAKAAIv/APV4QIv/AAKAAP///YAAi0WL///9gACLiYAAi///CofA//8OPYCL/wDSgoD/AaVAAP///b2A/wABQAAF/wACgAAHDuaL/wBL+sD/ARcFQNb/AIj9gP8ATAUAAf8ALv6A/wBHAwD/ARl9AP8ATAMAA/8ALv6A/wKDAoAViTgA///9gAD///8IAP8Ajf2A//7mPYCL///9gAD/AAKAAIv/AEcCgIv/AAKAAIsF/wBNeID///61wP8AO4eA///DpkCL//+yJoAI//+xSkD//8M4gP//wy4A//+xR4D//7FKgP//wziA/wA80gD/AE61wB7///2AAP8AAoAA//+4/QD///2AAP///YAABv//hbsA/wBdPYD//6LCgP8AekKA/wB5SoD/AF44gP8AXTNA/wB6T0Aei/8AeG4A//+jB4D/AFzFQP//h/WA/wABSkAI///9gACL///efYCL//+7QAD/AIj9gP8BO0WAi/8AAoAAi4v/AAKAAIv/AEa9AIv/AALIAP///YAAi///Tf0Ai///cv2AiwUO5ov/AEwFAP8BOfsA/wBMBQD/ALD9gHefdxL/ABsCgP8AS/sA/wE6BQD/AEv7ABPs/wDPhQD/AoMCgBWL///9gAD///29gP8AAUAA//94QAD//vA9gAX//+UXAP//2hHA///waQD//9DuQIv//8yFAAj//3u7AP8AZThA//+awAD/AIRCwP8Ag0oA/wBlNgD/AGVAAP8AhEUA/wCDSkD//5rKAP8AZTXA//98tgAecov//+hUQP///HsA///psMD///k9gAj/AFt9gP8At4UA///9gAD/AAFAAIv/AAKAAAX//+39gP//Av2AFf8AWMAA/wBDxQD//7w6wP//p0pA//+mRUD//7w7AP//vDrA//+nQAD//6ZFAP//vDsA/wBDxUD/AFm6wP8AWLXA/wBDxQD/AEPFQP8AWbsAHw59oHagdv8CNwfA/wBL+wASE6D/ABwgAP8CgwLAFYv///2AAIv//7kFAIv///2AAP8AAoAAi/8Anv2Ai/8AWFHAi///BjDA//3MfYD/AAKAAP///vrAiYAA0YuL/wACgAD/AAKAAP///wVA/wEbwAD/An4CgP///b2A/wAA+wCL/wACgAAF///cBQCL//7B/YCLBQ6Ti/8ATAKA/wDQAoD/AEv7AP8AzweA/wBL+wAB/wAnAoD/AEv7AP8AzweA/wBL+IAD/wDagAD/AoMCgBX//5q1wP//sczA//+xykD//5q1wB+L///Fo8D/ABohgP//zWvA/wApXoD//991gP//1qGA///fioD//+XegP//zUzAi///xaPACP//mbrA/wBOM0D//7HCwP8AZUpA/wBmRQD/AE04gP8ATj1A/wBmRUAei/8AOlxA///mQoD/ADKzQP//1sAA/wAgdYD/AClAAP8AIIqA/wAZvYD/ADKUQIv/ADpcQAj/AGVAAP//sseA/wBOQAD//5m7AB7//7QFAAT/ADq1wP8ALM9A///TMwD//8VIAP//xUpA///TMMD//9MzQP//xUpA///FSkD//9MzQP8ALMzA/wA6tcD/ADq4AP8ALMzA/wAszQD/ADq1wB///uT9gAT/ADq1wP8ALM9A///TM0D//8VKQP//xUpA///TMMD//9I1wP//xUpA///FSkD//9MzQP8ALcpA/wA6tcD/ADq1wP8ALMzA/wAszMD/ADq1wB8O56B2oHb/ALICgP8ATAKA/wE5/YD/AEwCgBL/ABuCgP8AS/sA/wE6BQD/AEv7ABO8/wEE/YD/AoQFABX//3u7AP//msoA//+awAD//3u9gP//fLXA/wBlNgD//5rKQP8AhEUAH/8AGfrAi/8AGLhA/wAEI8D/ABcNAP8AB1dACP//o0KA//9GBQCN///+/YCL///9gAD/AEcCgIuL/wACgAD/AAI7AP///wUA/wCOQoD/ARq9gP///nsA/wAAvYAF/wAWgAD/ACPwgP8ADQKA/wAqz4CL/wAuwoAI/wCEQoD//5rKQP8AZUAA//98tcAe//+z/YAE/wBYtcD/AEPPQP//vDhA//+mR8D//6dHgP//vDDA//+8OwD//6dKQP//pkUA//+8OwD/AEPFAP8AWLiA/wBZuED/AEPFAP8AQ8fA/wBZuwAfDvuQi/8AS/sA/wCI/YD/AEwFAAH/ADKCgP8AS/sAA/8AMoKA/wEg/YAViYAAi///uPsAiYAA/wACgACLrov/ACP7AIv/AAKAAIuL/wACgACL/wBHBQCL/wACgAD///2AAIv//7kFAIsF///9gAD//yr9gBWL///9gACL//+5BQCL///9gAD/AAKAAIuui/8AI/sAi/8AAoAAi4v/AAKAAIv/AEb7AIv/AAKAAP///YAAi///uQUAiwUO+M+gdqB2/wEbApD/AEwCjv8A0AJO/wBL+yQS/wCzAUj/AEwE3f8Azv2z/wBL+qD/AEIC0P8ATATcE77/ALMBSP8CgwKQFYv///2AAIv//YH9cIv///2AAP8AAoAAi66L/wAkBN2L/wACgACLi/8AAoAAi/8BGIKQ/wBneJOL/wBnhSCLi//+531wiYAA/wACgACL/wAj+p6LBf8AIwACi/8AAoAAi4v/AAKAAIv/AjSHbP8AQgLQi4v//ct4lIv///2AAP8AAoAAi66L/wAkBNyL/wACgACLi/8AAoAAi/8CNIds/wCKeJSL/wACgACLBYv/AAKAAIv/AEb7JIv/AAKAAP///YAAi///dYdsi///s/ski///LX1wiYAAi4v///2AAIv//7kE3Iv///2AAP8AAoAAi/8ARIUgi4v//y/9sv//MQJNiwWL/wEZfXKL/wACgAD///2AAIv//7j7I4sFDvc/oHagdv8CgwKAd593EhMg/wAzgAD/AoMCgBWL///9gAD///29gP///0AA/wBqwoD//sD6wP8AAoAA/wAAx8CL///9gAD/AEcCgIuL/wACgAD/AAKAAP///zhA/wBEAoD/AMzFQP8ARD2A//8zOsD/AAI7AP8AAMfAiYAA/wBHAoCLi/8AAoAA/wACgAD///84QAX/AGrCgP8BPwVA///9vYD/AADAAIv/AAKAAP//uQUAi4v///2AAP///YAA/wABAoD//7tAAP//Mn2A//+7uID/AM2CgP///YAA///+/YCL/wACgAD//7kFAIuL///9gAD///2AAP8AAQKA//+7woD//zJ9gP//uvsA/wDNgoAF///9xQD///79gIv/AAKAAAX//7j7AP/+wQKAFYv///2AAP///b2AOED/AGrCgP/+wQVA/wACgAD/AAC9gAUTgP///YAA/wBHAoD/AAKAAAf/AAKAAP///0KA/wBEAoD/AMzCgP8ARD2A//8zPYD/AAI7AP8AAL2AiYAA/wBHAoCLi/8AAoAA/wACgAD///9CgP8AasKA/wE++sD///29gP8AAMfAi/8AAoAA//+5BQCLiYAA///9gAD/AAC9gP//u0AA//8ygAAF//+7uID/AM2AAP///YAAQoCL/wACgAD//7kFAIuL///9gAD///2AAP8AAL2A//+7woD//zKAAP//uvsA/wDNgAD///3FAP///0KAi/8AAoAABQ75LaB2oHb/ANP9gP8ATAUA/wEW+wD/AEwFAP8AaH2AdxL/AOF+gP8ATAWAEzz/AveGgP8CDgKAFf8AT32A+4L//2ECgIsF/wBNvYD/Act9gBX//9v6gP//k9SA//9RSAD//fRpAP//ajsA/wHDQAD/ACvAAIv/AAKAAIuL/wACgACL/wBHBQCL/wACgAD///2AAIv794v///2AAIuL///9gACL//+4+wCL///9gAD/AAKAAIsF/wCLfQD//cuCgAYTvP///YAA/wACgAAHrov/ACQFgIv/AAKAAIuL/wACgACL/wI0fYD/ABN9gIv/ALyFAP/9ysUA/wACgAD/AAC9gIv///2AANGLi/8AAoAA/wACOAD///9CgP8ARkgA/wDSOwD/AGmAAIv/AGg4AIsF/wBGSAD//y3FAP8AAoAA/wAAvYCL///9gAD/AEb4AIuL/wACgAD/AAKAAP8AAL2A//8ICAD/AuhCgP///YAA///++wAFDvc/oHagdv8CpYVAdhITIP8BKV6A/wMOQsAV///cBUD//5SAAP//u/2A//8z+sD//7v9gP8AzcfA///9gAD///79gIv/AAKAAP//uP1Ai4v///2AAP///cVAQAD/AGn6wP/+wPrA/wACQsD/AADHwIv///2AAP8ARwUAi4v/AAKAAP8AAjrAOED/AEQ9gP8AzYKABf8ARQVA//8yfYD/AAKAAP8AAMfAiYAA0YuL/wACgAD/AAKAAP///zhA/wBq/YD/AT8FQP///YAA/wAAwACL/wACgAD//7j9QIuL///9gAD///3FQP8AAQKA//+7QAD//zE1wP//mEAA/wE4h8D///29QP///0KABf///YAA//6euEAV///cBUD//5SAAP//u/2A//80BUD//7v9gP8AzYAA///9gAD///9CgIv/AAKAAP//uP1Ai4v///2AAP///cVAOED/AGn6wP/+wQVA/wACQsD/AAC9QAUToP///YAA/wBHBQD/AAKAAAf/AAI6wP///0LA/wBEPYD/AM2AAP8ARQVA//8ygAD/AAKAAP8AAL1AiYAA0YuL/wACgAD/AAKAAP///0LA/wBq/YD/AT76wP///YAA/wAAx8CL/wACgAD//7j9QIuL///9gAD///3FQP8AAL2A//+7QAD//zHAAAX//5hAAP8BODrA///9vUD///9CgAUO9z+L/wBMBUD/ANF9QP8ARwVA/wBneED/AEwFQP8AHwUA/wBL+EAS/wC/hQD/AEv7AP8AZQUA/wBL+ID//9cHgP8AS/iAE/z/AiQCgP8BZwfAFf//mrYA//+xzID//7HCgP//msAA//+atcD/AE4zgP//scAA/wBlSgAf/wACgAD/AAKAAP8ARwVA///9gAD/AAKAAAf//8VKgP//0zCA/wAsxQD/ADrAAP8AOrXA/wAsz4D/ACzCgP8AOrWAH/8AAoAA/wACgAD/AEcFQP///YAAB///KYKA/wCzfYAViYAAi///uPrAiYAA/wACgACLBRP6/wBDgAD//5iHwAb///2AAP8AAoAAB/8AI/iAi66L/wACgACLi/8AAoAAi/8AZ3hA/wBEhQCL/wACgACLi/8AAoAAi/8ARwVAi/8AAoAA///9gACL//8sAoCLBf/+4XiA/wBq/UAViYAAi///uQfAiYAA/wACgACL/wCLh4CLi//9y3XAiYAA/wACgACLrov/ACP7AIv/AAKAAIuL/wACgACL/wI0ikD/AIqFAIv/AAKAAIsFi/8AAoAAi/8ARvhAi/8AAoAA///9gACL//6d+ICLBQ731aB2oHb/ANP9gP8ATAVA/wEW+sD/AEwFQP8AaEAAdxL/Ad8BQP8ATALAE7z/AS4+wP8C60LAFf//3AVA//+UgAD//yu9QP/9g3rA/wACgAD///9CgIv///2AAP8ARwLAi4v/AAKAAP8AAoAAQsD/AEW6wP8A0jrA/wBoh8CL/wBousCL0f//LcVAij1A/wACgACLrov/ACQCwIsF/wACgAD/AAKAAAb/AjR9gP8AinrAB/8AAoAA/wACgAAGi/8ARwVAi/8AAoAA///9gACL//6gR8CL///dOwD/AGhAAP///UUAQoAF/wA+uwD//0x4QBX/AG//wP/+sEKABv//UUVA/wEmwsAV/wBPOED7gv//YYVAiwUO9aB2oHb/ANUCgP8ATAKA/wHLQoB3EhOw/wEJRoD/AuxHgBX//we4QP19/wACgAD///84gIv///2AANGLi/8AAoAA/wACQoD///9CgP8ARoLA/wDTQAD/AGk6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S/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDvjPi/8AS/rA/wDzArD/AEwCkP8Aq/0w/wBMBWAS5f8AS/iT/wHrBNz/AP0CkP//Av1w/wBL+yQT9P8Bm3ri/wKDApAVdgoT+HcKE/R4ChP4eQoT9HoKE/h7ChP0fAoT+H0KE/R+Cv//s/qgBBP4fwoO+M+L/wBL+sD/APMCsP8ATAKQ/wCr/TD/AEwFYBLl/wBL+JP/AesE3P8A/QKQ//8C/XD/AEv7JBP0/wGbeuL/AoMCkBV2ChP4dwoT9HgKE/h5ChP0egoT+HsKE/R8ChP4fQoT9H4K//+z+qAEE/h/Cg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg7/AI4HwP8AS/rAAf8AynsA/wCOB8AVIAoO/wCOB8D/AEv6wAH/AMp7AP8AjgfAFSAKDv8AjgfA/wBL+sAB/wDKewD/AI4HwBUgCg77jf8Bp8AA/wDYQAAB/wA2fsD/AEcCgAP/ADZ+wPkUFSEKDvh0FPhBFYmNi4v5E48GjAwK1gqQzIyOjIyu9AwM1gvRjI6MjPchr6kMDRwALhMAYAIAAQBdAJgAwADUAPMBCwE2Ac8CYQKXAs0DTwO5A+8EPwRTBHIEigSpBMEE5gWfBk0G9Ac6B/IItAmQCeIKNApqCngK3QuFDDUM+Q0vDpUPGA/EEKkRRhHlEfcSlxLREwsTHRO9FEsUYxSCFJoU7xULFR0V9BZAFlQWcxaLFqMW3RcqFz4XVhd1F4oXrxfpGCMYaRigGOYZOBmKGcQaFhpoGqIbYBuaHE4ciB0hHVsdpx3HHdsd+h4SHjEeSR6GHqgfCP8ATAUAi/8AioKAi/8AAoAAi4v/AAKAAIv/AEb6wIv/AAKAAP///YAAi///dX2Ai///s/sAi///dHgAiYqAi4v///2AAIv//7kFQIv///2AAP8AAnWAiwUL///9gAD///2AAP//Kv2A/wACgAAH/wACgAD///9CgP8ARwKA/wDUxUD///2AAP8AAPrAi/8AAoAABQuL///9gACL//2B/UCL///9gAD/AAKAAIuui/8AIXsAi/8AAoAAiwUL/wACgACL/wBEgoCL/wBG+oCLBQv/AAKAAP8AAoAABov/AEcFQIv/AAKAAP///YAAiwUL//90gwD/Aer6wP8ARIKABv8ARvqAiwUL/wACgAD/AAKAAAaL/wBHAsCL/wACgAD///2AAIv//3IDAIv//7kFAIsFC4v///2AAIv//YH9QIv///2AAP///YAAi2iL///ehQCL///9gACL///9gACL//+7fYCL//+5BYCL///9gACLi/8AAoAAi/8ARwVAi/8AAoAA/wACgACLBf8Ai30A/wHq+sD//7t9gAb//7kFgIv///2AAIuL/wACgACL/wBHAsCL/wACgAD/AAKAAIv/AI39AIv/AEb7AIsFC4v///2AAIv//YH9gIv///2AAP8AAoAAi/8AJAUAi66L/wACgACLBf8AZQzA/wABQAD/AEvwwP8ATc9Ai/8AZHhAi/8AOwVA///mLgD/ADK1wP//1o9A/wAgQoD/AClwwP8AIFnA/wAZ0gD/ADKUQIv/ADsPgAj/AGVAAP//ssUA/wBOQAD//5m9gB7//7j7AAYL/wA5gAD///7AAP8ALH2A///Tl0CL///GI8CL///GJoD//9OCgP//0qZA///GgAD///61wAgL/wA5gAD///61gP8ALH2A///SpsCL///GJkCL///GHED//9OCgP//057A///GgAD///7AAAgL//9JusD//3THwP//dL2A//9JuoD//0m9wP8AizhA//90x8D/ALZFQB//AAKAAP8AAoAA/wBG+AD///2AAP8AAoAAB///dEVA//+WQoD/AGnKgP8Ai7gA/wCLuwD/AGm9gP8AacfA/wCLusAf/wACgAD/AAKAAP8ARwVA///9gAAHC4v///2AAIv//YH9gIv///2AAP8AAoAAi66L/wAkBQCL/wACgACLBf8AtQKA/wABSkD/AIn4gP8AispAi/8AtXCAi/8AtXNA//92B4D/AIrKQP//Sv2A/wABQAAI///9gACL//+4+wCLBQv/AImAAP///rYA/wBpgoD//5amQIv//3UhQIv//3UZwP//ln2A//+Wo8D//3aAAP///sAACAuL///9gACL//+4+sCL///9gACL//9UAsCL///9gACL//+4+oCL///9gACL//8NCACL///9gACL//+4/YCL///9gAD/AAKAAIv/ACP6wIsFC/8AJYAAi/8AM4VAi/8AewKAiwUL/wACgAD/AAKAAAaL/wBHAoCL/wACgAD///2AAIsFC///UXhA/wDy+AD/ADOFQAb/AHsCgIsFC/8AAoAA/wACgAAGi/8ARwWAi/8AAoAA///9gACLBQv//1F4QP8Aq/1A/wAzhUAG/wB7AoCLBQv/AAKAAP8AAoAABov/AEcFQIv/AAKAAP///YAAi///B/2AiwULiYAAi///uP2AiYAAi///VAKAiYAAi///uPqAiYAAi//+w4WAiYAA/wACgACLrouui/8AAoAAi4v/AAKAAIv/ATx6gAX/ADOFAIv/AHv7AIv/AAKAAIuL/wACgACL/wBHBYCL/wACgAD///2AAIv//1CAAIuL/wCr/YD/ADOFAIv/AHv7AIv/AAKAAIuL/wACgACL/wBHAoCL/wACgAAF///9gACL+4yLBQv//0q1gP//c8UA//90x8D//0m9gP//SrXA/wCMOwD//3THwP8AtUqAH/8AI/qAi66L/wACgACLi/8AAoAAi/8BYfqAi/8AAoAA///9gACL//+5BYCL///9gACLiYAAi//+5oWABf//doAA/wABQAD//5Z9QP8Aal6Ai/8AieQACP8Ai7CA/wBqwsD/AGnHgP8AisAAHv8AAoAA/wACgAD/AEcCwP///YAABwuL///9gACL//2DAoCL///9gAD/AAKAAIv/ACP4QIuui/8AAoAAi4v/AAKAAIv/ARiAAP8AZ4VAi/8AaH2Ai4v//ueAAIv///2AAP8AAoAAi66LBa6L/wACgACLi/8AAoAAi/8CfP2Ai/8AAoAA///9gACLRYv///2AAIuL///9gACL//7nfQD//y/9QIuL/wEYgwCL/wACgAD///2AAIv//7kHwIsFC4v///2AAIv//YL4QIv///2AAP8AAoAAi/8AJAKAi66L/wACgACLi/8AAoAAi/8CfQfAi/8AAoAA///9gACL//+4/YCLBQuL///9gACL//4iCoAF///ORQD//9o4gP//2zNA///PSkD//89AAP//20AA/wAkwoD/ADHFQB6L/wAz/YCL/wACgAD///2AAIv//7j6wIv///5HwIuL//+z+sAFlf//r2uA/wBCuED//8SUgP8AVAVAi/8AVUeAi/8AQb2A/wA748D/AAmcQP8AUSGA/wAEQoD/AK5CgP///bCA/wCwQADrwP8AlnWACP///iFAi///uFwAiwULiYAAi//9gf2AiYAA/wACgACLrov/ACOzAIv/AALHgIuL/wACgAD/AEQ9gP8AzAeA/wBEwAD//zM7AP8AAoAA/wAAvYCL///9gAD/AEa9gIuL/wACgAD/AALHgP8AAMAABf//lYMA99L/AGp9AP8BPkAA///9OID/AAECgIv/AAKAAP//uUKAi4v///2AAP///YAA/wABBQD//3cCgP/+ZTiAi/8BmcKAi/8AAoAA///9OICL//+5TQCLBQuL///9gACL///++sCL//2DAsCL///9gAD/AAKAAIv/AEcFAIv/AAKAAIuL/wACgACL/wGY/UD/AKv9gP/9/EAA/wACgAD/AADAAP8AAjsAQAD/ACQCgP8Aa4AA/wCIQAD/AZhAAIv//mcCwAX///2AAP8AAoAAB/8ARwUAi/8AAoAAi4v/AAKAAIv/An4CgIv/AAKAAP///YAAi2iL///b+wCL///9gACLinrA//9RgoD//fOAAP//UYKA/wIMgACL/wABhUD///2AAItoiwX//9v7AAYL/wCLuoD/AGnIAP//ljgA//90RUD//3VAAP//ljgA//+VPUD//3RFgP//dUoA//+VM4D/AGrNAP8AirXA/wCLusD/AGrMgP8AacgA/wCKtgAfC///Sb0A//90yAD//3THgP//SbsA//9KtcD/AIs4AP//dMeA/wC2QwD/ALZFAP8AizgA/wCLOID/ALVKQP8AtkUA//90yAD/AIs4gP//SbsAHwv/ADl1gP///rWA/wArgsD//9OhQIv//8YjwIv//8YmgP//1H1A///ToUD//8aKgP///rXACAuL///9gACL//2C/8AFCYAA/wACgAAHrov/ACQFQIv/AAKAAIuL/wACgACL/wEYgsAF/wBkCgD/AAFKQP8ATPNA/wBNxQCL/wBkbgCL/wBlaQD//7MCwP8ATM0AJ/8AAUpACP///YAAi///uPrAiwUL//9JvYD//3THwP//dL1A//9JuwD//0m9QP8AizhA//90x8D/ALZCgB//AC9FQIv/ACxzAP8ACThA/wAnz4D/ABEHwAj/AAg9gP//54LA/wACOED/AAC9QIv///2AAP8ARwVAi4v/AAKAAP8AAoAA/wAAvYB3xwX/AE11gP8AOc9A/wAwj4D/AFyzQIv/AGu7AAj/ALZFAP//dL2A/wCLQsD//0m6wB4L/wCLusD/AGnIAP//ljhA//90RUAfi///txxA///jFwD//8BUgP//0KkA///T0cAI///DQoD/ALXCgP///YAA///++wCL/wACgAD//7j6wIuL///9gAD///2AAP///0KA/wBKfYD//yI9gAX//+ACgP//8T1A///b1ID///fAAP//2SuAiwj//3RHwP//ljXA/wBpyoD/AIu4QP8Ai7rA/wBpykD/AGnHwP8Ai7hAHwuL///9gACL//2C+ACL///9gAD/AAJrgIv/ACMUgIuui/8AAoAAi4v/AAKAAIv/ARiAQAX/AA5XAP8AADNA/wAN8MD/AAGuAP8ADTWA/wADHsAI/wBfvYD//uHAAP8AAkLA/wAAv8CL///9gAD/AEcFAIuL/wACgAD/AAKAAP8AAMgA//+WusD/ATu9QAX/ACsAQP8AIHXA/wAbRQD/ADN7AIv/ADuKAAj/AGZNAP//scKA/wBNOwD//5m7AB7//7nrgAYL/wA6esD///7AAP8AK4LA///ToUCL///GHACL///GJAD//9R9QP//06FA///FhUD///7AAAgL//+awAD//7HCgP//ssfA//+ZsID//5rAAP8ATj2A//+xwoD/AGVAAP8AOsAA/wAtx4D//9MzQP//xVIA///FSkD//9IuAP//0i4A///FSoAf///GMICL///TlID/ACyHwP///sAA/wA5gAD4QP8AANSA/wAAB8D/AADRwIv/AADZwAiLrov/AAKAAP///YAAi///uP2AiYAAi4v///2AAItoiYAABf8AAUpA//+a/YD/AE3FAP//s/rA/wBkbkCLCP8AZkUA/wBNQoD/AE1FQP8AZkKA/wBlQAD//7LHwP8ATkAA//+ZsMD//8VKAP//0zsA/wAswoD/ADq1wP8AOsAA/wAsxQD/ACzFQP8AOrYA/wA6wAD/AC3HgP//0zCA///FSkAfi2iL///9gAD/AAKAAIuui66L/wACgACLi/8AAoAAi64F/wBmRUD//7K9gP8ATUKA//+ZuwAeC4v///2AAIv//7j9gIv///2AAP8AAoAAi/8Ai4fAi4v//cuAAIv///2AAP8AAoAAi66L/wAj+sCL/wACgACLi/8AAoAAi/8CNIAA/wCLfYCL/wACgACLBYv/AAKAAIv/AEcCgIv/AAKAAP///YAAi///dIKAi///tAVAi///dHhAiwULiYAAi/xgiYAABf8AAUfA//+bB8D/AEzXAP//s/sA/wBlaUCL/wBkbcCL/wBNxQD/AEv6wP8AAUpA/wBlAoAIi/8AAoAAi/hgi/8AAoAA///9gACL//+4+wCL///9gACLiYAAi/xgBf//xUpA///TM0D//9I4gP//xVTA///FSgD//9IuAP8ALdHA/wA6q4Aei/hgi/8AAoAA///9gACLRYsFC4v///2AAP///bsA///+6QD/AI2FAP/+whyA//9yewD//sH9QP8AAkUA///+/UCL///9gAD/AEcDAIuL/wACgAD/AAKAAP///0AA/wBn/QD/AOnAAP8AaEAA//8WQAD/AAI7AP8AAMAAiYAA/wBHBQCLi/8AAoAABf8AAoAA/wABAsD//3KDAP8BPgLA/wCNfQD/AT3jgP///YAA/wABFwCL/wACgAD//7j7AIuL///9gAD///3FAP8AAMAA//+XwAD//xaFgP//mAMA/wDpeoD///2AAP///0AAi/8AAoAABQuL///9gAD///27AP///wUA/wCMx8D//sEXQIv//sHrgIv///2AAP8AAoAAi/8AI/rAi66L/wACgACLi/8AAoAAi/8BPngA/wCN/YD/AT6FQP///YAA/wAA+wCL/wACgAD//7kFAIsFiYAA///9vYD/AAECgP//l72A//8WQAD//5jCgP8A6cAA///9xUD///79gIv/AAKAAAULiYAAi///uP2AiYAA/wACgACL/wCfBQCL/wBYwACL//8FuwD//cx7AP8AAoAAB4CL///9gAD/ACCAAIv/ACaCgIv/AHv9gIv/AJ8FAIv/AAKAAIuL/wACgAAFi/8ARviAi/8AAoAA///9gACL//8IOwCL/wD6RQD/AjN6wP///YAA/wABDMCL/wACgABoi//+wPsAiwUL//+xQAD//xM9QP8AncgAiwULiYAA/wACgAD/AAC9gPdp//2COsD///2AAP///wVAiYAA//+4/YCLi/8AAoAA///9uoD///9CgP//uYgA/wDTQAD//5d4AIv//5fIAIv//7m6gP//LMAA///9xYD/AAC9gIv///2AAP//uP2AiwWL/wACgAD///26gP8AAPrA/wDTwoD/An3FQP8AAoAAQoCL/wACgAAFC/8A1T2A//+4/UD///76gP///YAAiYAA//8rCACLi/8AAoAA///9gACLi/8ARwLA/wACgACLBQv//yrCgP//uP1A/wABBYD///2AAIv///2AAP8A1PgAi4v/AAKAAP8AAoAAi4v/AEcCwP///YAAiwUL/wBOwAD//xM9QP//YjgAiwULiYAA///9gAD/AAC9gPtp//2COsD/AAKAAP///wVAiYAA/wBHAoCLi/8AAoAA/wACRYD///9CgP8ARngA/wDTQAD/AGiIAIv/AGg4AIv/AEZFgP//LMAA/wACOoD/AAC9gIv///2AAP8ARwKAiwWL/wACgAD/AAJFgP8AAPrA//8sPYD/An3FQP///YAAQoCL/wACgAAFC///B9cA//0YAoD/AAKwgP///v2AiYAA/wBHBQCLi/8AAoAA/wACgAD///9AAP8ARoAA/wDTQAD/AGf9gIv/AGhCgIv/AEY7AP//LMAAikAA/wACgACL/wAkBQCL/wBY+wCL/wB7AoCLBf8AAoAA/wACgAAGi/8ARwKAi/8AAoAA///9gACLBQv//1GCgP8A8viA/wAzewAG/wB7AoCLBQv/AAKAAP8AAoAABov/AEcFAIv/AAKAAP///YAAiwUL//9RgoD/AKv9gP8AM3sABv8AewKAiwUL/wACgAD/AAKAAAaL/wBHAoCL/wACgAD///2AAIv//wf9gIv///2AAIuL///9gACL//+4/YCL///9gACL//9UAoCL///9gACL//+4+wCL///9gAAFC4v//6hFAP//U8UA/wIEQAD///29gP///vsABQv/AE8FgP//Ez2A//9iOoCLBQv//0m9gP//dL2A//90x8D//0m6wB+L//9qq4D/AF2CgP//h4fA/wCF/YD//9lKQAj//82HgP//aIKA/wACgAD///79gIv///2AAP8ARvsAi4v/AAKAAP8AAoAAi4v/AJJAAAX/ABXzQP//+4pA/wAW+ED///2zQP8AF5cAiwj/AAKAAP8AAoAA/wBHAoD///2AAP8AAoAAB///dEfA//+WNcD/AGnHwP8Ai7rA/wCLuwD/AGnKQP8AacfA/wCLuEAf/wACgAD/AAKAAP8ARvrA///9gAAHC4v///2AAIv//7j6wIv///2AAIv//1QCwIv///2AAIv//7j7AIv///2AAIv//wz9QIv///2AAIv//7kHwIv///2AAP8AAoAAi66LBQv/ACWAAIv/ADN9gIv/AHwFAIsFC/8AAoAA/wACgAAGi/8ARvhAi/8AAoAA///9gACLBQv//1B9gP8A8wLA/wAzfYAG/wB8BQCLBQv//1B9gP8Aq/1A/wAzfYAG/wB8BQCLBQv///84gP///YAA///9gACLi///uPsA/wACgACLiYAA/wD4AoCLi/8AAoAA/wAAvYD/AAKAAAULiYAAi///uP3AiYAAi/tAiYAAi///uP1AiYAAi///DQfAiYAAi///uPsAiYAA/wACgACL/wAkBQCLBQv/ACWAAIv/ADJ1wIv/AHwHwIsFC///UYKA/wDy+ED/ADJ1wAb/AHwHwIsFC/8AAoAA/wACgAAGi/8ARwLAi/8AAoAA///9gACLBQv//1GCgPdA/wAydcAG/wB8B8CLBQv/AAKAAP8AAoAABov/AEcCQIv/AAKAAP///YAAi///B/2AiwUL//8IOID//7j9QP8AAIKA///9gACL///9gAD/APgCgIuL/wACgAD/AAKAAIuL/wBHAsD///2AAIsFC0KA///9gAD///2AAIuL//+4+wD/AAKAAIuL///9gAD/ANP9gIuL/wACgAD/AAD6gP8AAoAABQuL///9gACL//2CB8CL///9gAD/AAKAAIuui/8AJALAi/8AAoAAi4v/AAKAAIv/An34QIv/AAKAAP///YAAi///uP1AiwUL//8rQoD//7kHgP8AAMAA///9gACL///9gAD3aYuL/wACgAD/AAKAAIuL/wBG+ID///2AAIsFC4v///2AAIv//YH9gIv///2AAP8AAoAAi/8AI/sAi66L/wACgACLi/8AAoAAi/8CfgKAi/8AAoAA///9gACL//+5BQCLBQv/ALZPgP8AizhA//90x4D//0m7AP//Sb2A//90x8D//3S9gP//SbCA//9JvYD//3THwP8Ai0KA/wC2QoD/ALZFAP8AizhA/wCLOID/ALZCgB8L//90R8D//5ZCwP//ljiA//90RQD//3RHwP8Aab1A//+WOED/AIu4QP8AisAA/wBqwsD/AGnHwP8Ai7hA/wCLuwD//5U9QP8AaceA//91QAAfC/8BYcAA//+5BQDFQP///kAAiMAA//6d+ECLi/8AAoAA///9gACLi/8ARvsA/wACgACLBQv//0mwgP//dMfA//90x4D//0m7AP//Sb2A/wCLOED//3S9gP8Atk+A/wC2QoD/AIs4QP8Ai0KA/wC2QoD/ALZFAP//dMfA/wCLOID//0m9gB8L/wCLuED/AGm9QP//ljiA//90RQD//3RHwP//lkLA//+WOED//3RHwP//dUAA//+VPUD/AGnHwP8Ai7hA/wCLuwD/AGrCwP8AaceA/wCKwAAfC//+nkAA//+5BQD/AAA6wP///kAAiMAA/wFiB8CLi/8AAoAA/wACgACLi/8ARvsA///9gACLBQuL///9gACL//4zCACL///9gAAF/wABSkD//5v1gP8ATcVA//+zCoD/AGRuAIsI/wBlSkD/AE41wP8ATjWA/wBlSoAfi/8BzPgAi/8AAoAA///9gACL//+4+sCL///9gACLiYAAi//+MwgABf//xUAA///TPYD//9M6wP//xUfAHv//xhxAi///06uA/wArhUD///61wP8AOYAACIv/AAKAAIv/Acz4AIv/AAKAAP///YAAi///uQUAiwULwoD///2AAP///YAAi4v//7j9QP8AAoAAi4v///2AAP8BYf2Ai4v/AAKAAP8AAIAA/wACgAAFC4v///2AAIv//jL7AIv///2AAAX/AAFKQP//m/WA/wBNxUD//7MNAP8AZG4Ai/8AZWkAi/8ATMzA/wBM/YD/AAFHwO8Ii/8AAoAAi/8BzQUAi/8AAoAA///9gACLRYv///2AAIuL///9gACL//4y+wAF///FVID//9I4QP//0zMA///FSkD//8VKQP//0zNA/wAswoD/ADq2AB6L/wHNBQCL/wACgAD///2AAIv//7kFAIsFC//+ngKA//+5B4D/AACCgP///YAAiYAA/wFh+wCLi/8AAoAA/wACgACLi/8ARviA///9gACLBQuL///9gAD///27AP///wUA/wCNwoD//sD7AIv//sIHgIv///2AAP8AAoAAi66L/wAkBQCL/wACgACLi/8AAoAAi/8BPniA/wCM+ID/AT6FAP///YAA/wAA+wCL/wACgABFiwWL///9gAD///3HgP8AAQKA//+XvYD//xYFAP//l72A/wDp+wD///29gP///v2Ai/8AAoAABQv//p29gP//uPsA/wAAgoD///2AAIv///2AAP8BYfsAi4v/AAKAAP8AAoAAi4v/AEcFAP///YAAiwUL//9JvbH//3THbf//dL1w//9JvXD//0m6oP8AiziT//90x/D/ALZCTx//AGQUvIv/AFcwYv8AKfWB/wA6PXD/AEQKfwiL///d+sAFC4v///2AAIv//7kFQIv///2AAP8AAoAAi/8AI/skiwUL/wAlgACL/wAygACL/wB8B2yLBQv/AAKAAP8AAoAABov/AEb6wIv/AAKAAP///YAAiwUL//9ReJT/APMCsP8AMoAABv8AfAdsiwUL/wACgAD/AAKAAAaL/wBHApCL/wACgAD///2AAIsFC///UXiU/wCr/TD/ADKAAAb/AHwHbIsFC/8AAoAA/wACgAAGi/8ARwVgi/8AAoAA///9gACL//8H/XCL///9gACLiYAAi///uPqgiYAABQv//94FYAf//8XCkP8ARAKQ//+oz57/ACn9cP//m+tEiwgL/wCLuuL/AGnHrP//ljhS//90R+4f///9gAAH///+wAD//3WFH///lqao//+XeDH//3UWyosI//91Sn7//5UzM/8AacfP/wCLuuH/AIu4Ev8AaszN/wBpx67/AIq1gh8LAAH0AAAAlgAAAeAAPAHgADwDIAArAeAAPAK8AEAB4AA8ALQAMwGQAFsBkABbAeAAPAHgADwAtAAzAeAAPAOEADkBkAA3AgYAGgCdACgB/AAnAeAAKgHQABECCAAsAggAGwGfABwBtQAnAgkAGwCxADID6ACzAlgAMQRGAFMCWAAxAlgAMQLuADYCFwAQAVkALQF9ABwB2gAnAWEAMQFWACwByAAeAcsAMgCxADIBfwAdAXgAKwFUACsCWgAyAtkABwKzABgBSgAmArQAGAF4ACsBtwAnAY0AEgHHAC8CGQARAu0AEQGsACIBiAAQAbIAJQGQAFsBkAA3AZAAWwPoAUAD6AFAA+gBQAIWABABWQAtAX0AHAHaACcBYQAxAVYALAHIAB4BywAyALEAMgF/AB0BeAArAcMALQJaADIBhQAyArMAGAFKACYCtAAYAXgAKwG3ACcBjQASAccALwIYABEC7AARAawAIgGIABABsgAlAeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAFCACIB4AA8Au4ANQHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAFCACIB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwCFwARAhcAEQHgADwB4AA8AeAAPAHgADwDFgA3AX0AHAFhADEBYQAxAeAAPAHgADwAsf/tALH/7QHgADwB4AA8AeAAPAHgADwCswAXArMAFwHgADwB4AA8AeAAPAHgADwB4AA8AccAMAHHADAB4AA8AeAAPAGIABAB4AA8AeAAPAIXABECFwARAeAAPAHgADwB4AA8AeAAPAMWADcBfQAcAWEAMQFhADEB4AA8AeAAPACx/+0Asf/tAeAAPAHgADwB4AA8AeAAPAKzABcCswAXAeAAPAHgADwB4AA8AeAAPAHgADwBxwAwAccAMAHgADwB4AA8A+gBQAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAPoAFoD6ABaAeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8AeAAPAHgADwB4AA8ALQAMwAAAAEAAAAAxcmyNAAAAADI7kQHAAAAAMjvk+0=');font-weight: normal;font-style: normal;}</style><div xmlns="http://www.w3.org/1999/xhtml" style="transform: scale(1.5);transform-origin: top left; display: inline-block"><style>div { color: #1a1a1a;font-size: 36px;font-family: Lineal;font-weight: normal;font-style: normal;font-variant: normal;letter-spacing: 0px;text-align: center;padding: 0px;white-space: pre-wrap;line-height: 36px;word-wrap: break-word;max-width: 274.26368140781403px } * { padding: 0px } p { line-height: 51.42857142857143px } a { color: #4c84ff }</style><div style="padding:0;"><p style="margin:0; padding: 0">abcdefghijkl</p></div></div></foreignObject></svg>

将svgURL贴进上面的在线平台,查看渲染结果:

svg内容带上字体base64信息
svg内容带上字体base64信息

直接将svgString插入到document文档流中,可以渲染相应字体,而放在img中加载不会继承样式。 我们可以得出一个结论:

SVG 被当作图片加载时(如放在  或用于 Canvas 绘制)是脱离 HTML 文档上下文的,它不会继承页面里的 CSS、link 或 style 样式。

解决方案

现有的 PixiJS 中HTMLText渲染富文本的方式,处理纹理更新是采用svg + foreignobject方案。字体文件大(中文常上 MB 级),导致加载缓慢,甚至阻塞渲染。为了让字体样式不丢失,需要将字体数据转 Base64, 嵌入会让 SVG 体积暴涨。

✅ 方法一:字体子集化(最推荐)

仅保留所需字符,极大减小字体体积

工具推荐:
  • Fontmin(Node.js 工具)

  • [Glyphhanger](https://github.com/filamentgroup/glyphhanger)

  • 在线:FontSubsetter

步骤:
  1. 提取文本,例如 "你好世界"

  2. 使用 Fontmin 等工具生成仅包含这些字符的字体子集(.woff2 等)

  3. 将字体嵌入 SVG,或远程引用

SVG 中嵌入子集字体示例
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="100"><foreignObject width="100%" height="100%"><style>@font-face {font-family: 'MySubsetFont';src: url(data:font/woff2;base64,...subset font base64...) format('woff2');}div {font-family: 'MySubsetFont';font-size: 24px;}</style><div xmlns="http://www.w3.org/1999/xhtml">你好,世界!</div></foreignObject>
</svg>
优点:
  • 几 KB 的字体即可完整显示中文

  • 可嵌入 <foreignObject> 作为富文本渲染

✅ 方法二:将文字转为路径(Path)

将文字转为 SVG 中的 path 元素,避免字体依赖

工具:
  • Illustrator / Inkscape / svg-text-to-path 工具

优点:
  • 不依赖字体文件

  • 100% 可视、跨平台一致渲染

缺点:
  • 文本无法被选中或编辑

  • 文件体积可能因路径复杂度而增大

✅ 方法三:使用系统字体(不推荐用于中文)

使用用户本地安装的字体,例如 SimSunArial

缺点:
  • 样式不可控,在未安装字体的设备上显示不一致

  • 离线或导出使用时易失效

  • 不推荐,本身就需要字体不丢失,并且支持该功能

总结对比表

方案

优点

缺点

子集字体

最推荐,字体小,兼容性好

需要构建工具,流程稍复杂

转路径

稳定,无依赖

不可编辑,体积可能增大

系统字体

简单,无需额外处理

显示不一致,离线不可靠

在当前项目中,尝试采用 GPT 提供的方案均未能适配实际需求。若不改变 HTMLText 纹理更新方案,可选择的方式极为有限。

曾设想继续使用 HTMLText 节点渲染富文本内容,并期望 PixiJS 内部能暴露接口,允许外部将更新后的纹理直接传入进行渲染。然而,与作者沟通后此提议被否决,作者建议自行绘制 canvas 内容,再将其作为 Sprite texture 更新。但该方式存在明显弊端,背离了使用现有库简化开发的初衷,有本末倒置之嫌。

此外,就 “为何 PixiJS 内部采用 SVG 方案而非其他纹理更新方式” 与作者展开探讨,最终作者仍坚持现有方案。至此,使用 PixiJS 的 HTMLText 节点渲染富文本时,在涉及中文字体的场景下,卡顿问题始终难以攻克。

若转而采用原生 canvas 处理富文本渲染,虽可解决卡顿问题,但面临更多复杂挑战:

  1. 文本分行处理:需设计分行逻辑,逐行检测宽度,精准定位需切分的 segment 片段;

  2. segment 切分规则:涉及软切分与硬切分,针对中文字符、英文字符、半角符号等不同词性,制定差异化切分规则;

  3. 字符尺寸测量与缓存:需测量 segment 宽度和高度,同时为提升性能,需对对应字符进行缓存处理。

方案对比与困境

最初选择 PixiJS 的 HTMLText 进行富文本渲染,正是为避免原生 canvas 方案过高的实现成本。但从当前情况来看,两种方案均存在难以逾越的技术瓶颈。在开发效率与性能优化之间,如何权衡取舍,成为解决的关键问题。 如果是你,你会怎么选择呢?

模块设计

PixiJS 能高效支持游戏开发,归根到底是它在底层架构设计中,融合了多个经典的软件设计模式和图形学结构。这些模式为 灵活的扩展性、对象管理、渲染流程、事件处理等 提供了可靠支撑。

在翻阅HTMLText源码中实现的过程,就发现一些经典的模式,比如对象池:

BigPool对象池
BigPool对象池

对象池(Object Pool)是 PixiJS 或任何性能敏感场景(如游戏、粒子系统、动画系统)中非常常见的优化技术,尤其适用于频繁创建和销毁对象的场景。

对象池技术的核心价值在于减少创建和销毁对象的开销,适用于以下场景:

  • 频繁创建 / 销毁对象(如临时计算、事件处理)。

  • 资源密集型对象(如数据库连接、网络套接字)。

  • 需要严格控制内存使用(如嵌入式系统、移动应用)。

对象池在PixiJS中,由Pool和PoolGroup一起实现。

Pool(泛型类)
// 泛型参数 T 限制为实现了 PoolItem 类型的对象(即可能包含 init() 和 reset() 方法的对象)。exportclass Pool<T extends PoolItem>
{/** @internal */public readonly _classType: PoolItemConstructor<T>;private readonly _pool: T[] = []; // 实际的对象池数组,存放可复用的对象。// 累计创建过的对象总数。private _count = 0; // 当前池中可用对象的数量(即 _pool 中“有效”的长度)。private _index = 0;constructor(ClassType: PoolItemConstructor<T>, initialSize?: number){this._classType = ClassType;// 如果传入 initialSize,就预先创建这么多对象并放入池中。if (initialSize){this.prepopulate(initialSize);}}// 预填充方法// 调用构造器创建指定数量的对象,存入池中。public prepopulate(total: number): void{for (let i = 0; i < total; i++){this._pool[this._index++] = newthis._classType();}this._count += total;}publicget(data?: unknown): T{let item;if (this._index > 0){item = this._pool[--this._index];}else{item = newthis._classType();}item.init?.(data);return item;}publicreturn(item: T): void{item.reset?.();this._pool[this._index++] = item;}get totalSize(): number{returnthis._count;}get totalFree(): number{returnthis._index;}get totalUsed(): number{returnthis._count - this._index;}// 将池清空public clear(){this._pool.length = 0;this._index = 0;}
}// 可拓展性好:通过 init() / reset() 实现状态初始化与清理。
exporttype PoolItem = {init?: (data?: any) =>void;reset?: () =>void;[key: string]: any;
};// PoolItemConstructor 是一个构造器类型约束,确保能用 new 来构造。
exporttype PoolItemConstructor<K extends PoolItem> = new () => K;

对象池也支持更多高级特性(如 async 初始化、生命周期跟踪、懒回收等),在PixiJS中并未实现,可能暂时没有用到的场景。

PoolGroupClass(对象池管理器)

在前面对象池 Pool 基础上构建的一个对象池管理器,用于统一管理多个不同类型的对象池。

import { Pool } from'./Pool';importtype { PoolItem, PoolItemConstructor } from'./Pool';exporttype PoolConstructor<T extends PoolItem> = new () => Pool<T>;exportclass PoolGroupClass
{private readonly _poolsByClass: Map<PoolItemConstructor<PoolItem>, Pool<PoolItem>> = new Map();// 预先向某个类的对象池中添加一定数量的对象,用于初始化缓存。public prepopulate<T extends PoolItem>(Class: PoolItemConstructor<T>, total: number): void{const classPool = this.getPool(Class);classPool.prepopulate(total);}// 从指定类型的池中获取一个对象:// 如果池中有可用对象,就复用, 否则创建新的。// 自动调用 init(data) 初始化(由 Pool 内部处理)publicget<T extends PoolItem>(Class: PoolItemConstructor<T>, data?: unknown): T{const pool = this.getPool(Class);return pool.get(data) as T;}// 将对象归还池中。通过 item.constructor 找到对应的池,调用 pool.return(item) 复用它。// 使用者不需要关心具体归还到哪个池// 支持任意类型的对象publicreturn(item: PoolItem): void{const pool = this.getPool(item.constructor as PoolItemConstructor<PoolItem>);pool.return(item);}public getPool<T extends PoolItem>(ClassType: PoolItemConstructor<T>): Pool<T>{if (!this._poolsByClass.has(ClassType)){this._poolsByClass.set(ClassType, new Pool(ClassType));}returnthis._poolsByClass.get(ClassType) as Pool<T>;}// 统计当前所有池的使用情况:public stats(): Record<string, {free: number; used: number; size: number}>{const stats = {} as Record<string, {free: number; used: number; size: number}>;this._poolsByClass.forEach((pool) =>{const name = stats[pool._classType.name]? pool._classType.name + (pool._classType asany).ID : pool._classType.name;stats[name] = {free: pool.totalFree,used: pool.totalUsed,size: pool.totalSize,};});return stats;}
}// 单例导出 BigPool
// 全局可用,便于跨模块共享统一的池系统。
exportconst BigPool = new PoolGroupClass();

实现了如下功能:

  • 自动按类型管理对象池

  • 动态获取/创建池

  • 预填充池对象

  • 对象归还

  • 获取使用统计

其中核心结构:

// key 是构造函数(类型)
// value 是该类对应的对象池 Pool<PoolItem>
// 借助构造函数作为 key,可以区分不同类型的对象(例如 Bullet, Enemy, Particle 各自有独立的池)。
private readonly _poolsByClass: Map<PoolItemConstructor<PoolItem>, Pool<PoolItem>>;

再比如不用关心什么时候归还到哪个池中:

// 将对象归还池中。通过 item.constructor 找到对应的池,调用 pool.return(item) 复用它。// 使用者不需要关心具体归还到哪个池// 支持任意类型的对象public return(item: PoolItem): void{const pool = this.getPool(item.constructor as PoolItemConstructor<PoolItem>);pool.return(item);}

设计的优势:比如类型安全,使用泛型和构造函数精确绑定类型。首次会帮你自动注册,同时也避免了频繁的new和GC。

使用起来很方便,比如在HTMLTextSystem中需要获取htmlTextData数据的时候,通过简单的get就行:

例子
例子

当然PoolGroupClass可以继续拓展,比如:

  • 支持设置池容量上限,防止无限增长。

  • LRU 或闲置回收机制,防止冷对象堆积。

  • 异步对象初始化支持,适合需要加载资源的对象。

在HTMLTextSystem中,还涉及到了资源缓存类:CacheClass。它设计了一个功能齐全、可扩展的 资源缓存管理系统,支持资源存取、别名、多 key 映射、自动解析器支持等,服务于 PixiJS 的资源系统(如 Assets 模块)。

源码如下,部分注释:

import { warn } from'../../utils/logging/warn';
import { convertToList } from'../utils/convertToList';
importtype { CacheParser } from'./CacheParser';class CacheClass
{// 自定义缓存解析器列表,可用于分解资源private readonly _parsers: CacheParser[] = [];// 核心缓存 Map:key 对应资源本体。private readonly _cache: Map<any, any> = new Map();// key → 关联的多个别名、解析出的缓存 key 的映射。主要用于清理时能还原关系。private readonly _cacheMap: Map<string, {keys: string[],cacheKeys: string[],}> = new Map();// 清空整个缓存和映射关系。public reset(): void{this._cacheMap.clear();this._cache.clear();}public has(key: any): boolean{returnthis._cache.has(key);}publicget<T = any>(key: any): T{const result = this._cache.get(key);if (!result){// #if _DEBUGwarn(`[Assets] Asset id ${key} was not found in the Cache`);// #endif}return result as T;}// 这是核心的缓存设置函数,处理逻辑较复杂:// 支持多 key(别名)绑定publicset(key: any | any[], value: unknown): void{// // 统一处理为数组const keys = convertToList<string>(key);let cacheableAssets: Record<string, any>;// 支持自动解析资源(例如纹理图集可能拆成多个子纹理):for (let i = 0; i < this.parsers.length; i++){const parser = this.parsers[i];if (parser.test(value)){cacheableAssets = parser.getCacheableAssets(keys, value);break;}}const cacheableMap = new Map(Object.entries(cacheableAssets || {}));if (!cacheableAssets){keys.forEach((key) =>{cacheableMap.set(key, value);});}const cacheKeys = [...cacheableMap.keys()];const cachedAssets = {cacheKeys,keys};keys.forEach((key) =>{this._cacheMap.set(key, cachedAssets asany);});cacheKeys.forEach((key) =>{const val = cacheableAssets ? cacheableAssets[key] : value;if (this._cache.has(key) && this._cache.get(key) !== val){// #if _DEBUGwarn('[Cache] already has key:', key);// #endif}// 存入缓存 _cache 中,同时进行冲突检查this._cache.set(key, cacheableMap.get(key));});}public remove(key: any): void{if (!this._cacheMap.has(key)){warn(`[Assets] Asset id ${key} was not found in the Cache`);return;}const cacheMap = this._cacheMap.get(key);const cacheKeys = cacheMap.cacheKeys;cacheKeys.forEach((key) =>{this._cache.delete(key);});cacheMap.keys.forEach((key: string) =>{this._cacheMap.delete(key);});}// 对外暴露解析器数组,用于注册自定义 CacheParserpublicget parsers(): CacheParser[]{returnthis._parsers;}
}// 全局唯一单例
exportconst Cache = new CacheClass();

多key支持,自定义解析器,清理机制的处理等,都值得我们借鉴,其中解析器定义是可自动处理复杂资源(如图集、字体)

比如内置的cacheTextureArray,用于解析一类特定的资源类型:Texture 数组。它遵循 CacheParser 接口结构,并提供了将 Texture[]拆解为可缓存资产的能力。如下源码:

export const cacheTextureArray: CacheParser<Texture[]> = {extension: {type: ExtensionType.CacheParser,name: 'cacheTextureArray',},test: (asset: any[]) =>Array.isArray(asset) && asset.every((t) => t instanceof Texture),// 用户调用 set 时自动启用,无需关注解析细节getCacheableAssets: (keys: string[], asset: Texture[]) =>{const out: Record<string, Texture> = {};keys.forEach((key: string) =>{// 将原始资源分解成可以单独缓存的部分asset.forEach((item: Texture, i: number) =>{out[key + (i === 0 ? '' : i + 1)] = item;});});return out;}
};

甚至你可以设计一个适配你项目自定义格式(比如 Spine、DragonBones 动画资源)的 CacheParser,适配你的需求。

小结尾

PixiJS 作为高性能 2D WebGL 渲染引擎,其架构设计有诸多亮点值得深入研究。精妙的分层架构、高效的渲染策略、灵活的插件机制和清晰的抽象接口等等....实现了复杂图形渲染与极致性能的平衡。

下次有时间再研究一下其他模块的代码实现....

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87887.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87887.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/87887.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五、Redis的IO模型

简介 在谈及Redis为什么快的时候&#xff0c;很多人都只能回答redis是基于内存&#xff0c;所以快。但他们往往不知道&#xff0c;决定redis快的因素&#xff0c;还有它的IO模型-Reactor模型。谈及Redis的IO模型之前&#xff0c;先补充一下IO模型的基础知识。 IO模型演化 1.堵塞…

Cesium、ThreeWebGL详解(二)渲染引擎向GPU传数据、性能优化、引擎对比

下面从 API 定位、坐标体系、性能表现、面试常问点几个维度详细对比 Cesium、Three.js 与原生 WebGL 的绘制差异。 &#x1f9ed; 1. API 定位与典型应用 Cesium 聚焦全地球 GIS 场景&#xff0c;支持地形、影像、时空动态等地理信息功能&#xff0c;是专业级地图应用首选。 T…

单点登录(SSO)系统

设计一个 Java 单点登录&#xff08;SSO&#xff09;系统需要解决跨系统认证和会话共享问题。以下是核心设计和实现方案&#xff0c;包含关键组件和代码示例&#xff1a; 一、核心概念 认证中心 (Auth Center)&#xff1a;中央身份验证服务令牌 (Token)&#xff1a;用户身份凭…

《信息技术》科技核心期刊推荐

【科研必看】《信息技术》——科技核心期刊&#xff0c;助力你发表高影响力论文&#xff01; 如果你是一位科研工作者、学者或者在校学生&#xff0c;正在为发表论文而努力&#xff0c;那么《信息技术》期刊无疑是你不可错过的选择&#xff01;这本期刊以其卓越的学术影响力&am…

界面组件DevExpress WPF中文教程:Grid - 如何遍历节点?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

2D写实交互数字人:让AI形象拥有“真人温度“的技术革命

在人工智能技术日新月异的今天&#xff0c;数字人已不再是科幻电影中的概念&#xff0c;而是逐步渗透到我们日常生活的各个领域。然而&#xff0c;市场上大多数数字人产品仍停留在"能说会动"的初级阶段&#xff0c;缺乏真正的情感交互能力&#xff0c;这种"机械…

2025 年拓客系统排行榜

在数字化营销时代&#xff0c;拓客系统成为企业获取客户资源、提升销售效率的关键工具。以下为您盘点 2025 年表现出色的中文名字拓客系统&#xff0c;其中 微拓客 凭借强大功能脱颖而出&#xff0c;成为众多从业者的首选。 一、微拓客&#xff1a;精准拓客的全能王者 微拓客堪…

TikTok 矩阵如何快速涨粉

在社交媒体的广袤天地里&#xff0c;TikTok 以其强大的影响力和庞大的用户基础&#xff0c;成为众多创作者和品牌竞相角逐的舞台。构建 TikTok 矩阵&#xff0c;是扩大影响力、实现快速涨粉的有效策略。那么&#xff0c;究竟如何让 TikTok 矩阵快速涨粉呢&#xff1f;下面将为您…

基于微信小程序和云开发的企业绿色融资平台的设计与实现

文章目录 摘要前言绪论1. 课题背景2. 国内外现状与趋势2.1 国内研究现状2.2 国外研究现状2.3 发展趋势3. 课题内容相关技术与方法介绍1. 微信小程序开发技术2. 腾讯云开发平台3. 绿色项目评估模型4. 智能匹配算法5. 碳核算方法系统分析1. 需求分析1.1 用户需求1.2 功能需求1.3 …

如何自建服务器并开启公网IP:本地内网网址让外网访问详细教学

本地内网环境自建服务器后&#xff0c;如何让外网访问&#xff0c;提供互联网连接服务呢&#xff1f;有不少方法都可以实现&#xff0c;常见的有如公网IP、DDNS动态域名、nat123内网穿透等&#xff0c;下面详细教学。 一、申请开公网IP-----------------公网IP篇-------------…

企业公用电脑登录安全管控的终极方案:ASP操作系统安全登录管控方案

一、引言&#xff1a;公用电脑——企业安全管理的“灰色地带” 在企业办公场景中&#xff0c;公用电脑&#xff08;如会议室电脑、生产线终端、客服工位&#xff09;因多用户共用、权限复杂&#xff0c;往往成为安全管理的薄弱环节。员工随意登录、弱密码泛滥、敏感数据泄露事…

HarmonyOS-ArkTS开发指南:从基础到实战

目录 一、基础语法 二、声明式 UI 开发 基本组件结构 三、状态管理 四、生命周期钩子 五、组件化开发 1. 创建自定义组件 2. 组件嵌套 六、事件处理 七、布局系统 八、样式设置 九、条件渲染与列表渲染 十、异步操作 十一、路由导航 开发建议 一、基础语法 ArkT…

算法-Day04

今天还是给大家分享几道题目&#xff0c;希望大家可以好好理解。 第一题 问题描述 小蓝有一天误入了一个混境之地。 好消息是&#xff1a;他误打误撞拿到了一张地图&#xff0c;并从中获取到以下信息&#xff1a; 混境之地是一个 n⋅m大小的矩阵&#xff0c;这个地图中一共…

Git版本控制详细资料

Git安装基本配置 下载安装(一路next) 打开bash终端&#xff08;git专用&#xff09; 命令: git -v(查看版本号) 配置: 用户名和邮箱,应用在每次提交代码版本时表明自己身份 命令: git config --global user.name "FT" git config --global user.email "F…

利用井云平台把Coze工作流接入小程序/网站封装变现 | 详细步骤→

今天来看看怎么把Coze工作流接入井云生成你的专属网站/小程序&#xff01; 当前已支持三大模块接入&#xff1a;✅ 工作流 ✅ 智能体 ✅ 外部网页 本文所用工具 1、扣子&#xff1a;www.coze.cn 2、井云智能体&#xff1a;jingyun.center 为什么选择井云平台&#xff1f; …

linux weston flutter remote desktop

参考:Outputs — weston 14.0.90 documentation Weston 14.0: DRM-backend, color management, and output mirroring Weston 14.0: DRM-backend, color management, and output mirroring 🖥️ 3. DRM 输出可镜像至远程输出(RDP、VNC、PipeWire) 这次更新还带来了一个…

GitHub Copilot 是什么,怎么使用

GitHub Copilot 是一个由 GitHub 和 OpenAI 联合开发的 AI 编程助手&#xff0c;它可以在你写代码的时候自动给出建议、补全代码&#xff0c;甚至生成整个函数或算法。它就像一个“聪明的副驾驶”&#xff0c;时刻在你旁边协助你写代码。 简单解释&#xff1a; GitHub Copilot …

Android系统及应用QUIC协议支持详解

QUIC协议在Android中的全面支持与实践指南 本文深入探讨QUIC协议在Android中的实现细节&#xff0c;涵盖基础原理、开发技巧、性能优化及前沿扩展&#xff0c;提供完整的Kotlin代码示例和工程实践指南。 1. QUIC协议核心优势 QUIC&#xff08;Quick UDP Internet Connections&…

.NET基于类名约定的自动依赖注入完整指南

&#x1f680; .NET基于类名约定的自动依赖注入完整指南 基于类名约定的自动依赖注入可大幅减少手动注册服务的工作量&#xff0c;本文将通过清晰的结构、美观的排版和丰富的示例&#xff0c;帮助你快速掌握这一实用技术。 &#x1f308; 核心特性概览 特性说明类名约定自动…

Redis各数据结构的详细使用和使用场景

Redis各数据结构的详细使用 大家好&#xff01;今天我们来聊聊Redis这个强大的内存数据库。就像我们生活中的工具箱一样&#xff0c;Redis提供了多种"工具"&#xff08;数据结构&#xff09;来帮助我们解决不同的问题。有些工具像螺丝刀&#xff08;字符串&#xff…