@esotericsoftware/spine-webgl
Version:
The official Spine Runtimes for the web.
138 lines • 44.9 kB
JavaScript
/******************************************************************************
* Spine Runtimes License Agreement
* Last updated April 5, 2025. Replaces all prior versions.
*
* Copyright (c) 2013-2025, Esoteric Software LLC
*
* Integration of the Spine Runtimes into software or otherwise creating
* derivative works of the Spine Runtimes is permitted under the terms and
* conditions of Section 2 of the Spine Editor License Agreement:
* http://esotericsoftware.com/spine-editor-license
*
* Otherwise, it is permitted to integrate the Spine Runtimes into software
* or otherwise create derivative works of the Spine Runtimes (collectively,
* "Products"), provided that each user of the Products must obtain their own
* Spine Editor license and redistribution of the Products in any form must
* include this license and copyright notice.
*
* THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
* BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
import { BlendMode, Color, TimeKeeper } from "@esotericsoftware/spine-core";
import { GLTexture } from "./GLTexture.js";
import { ResizeMode } from "./SceneRenderer.js";
let spinnerImage;
let logoImage;
let loaded = 0;
const FADE_IN = 1, FADE_OUT = 1;
const logoWidth = 165, logoHeight = 108, spinnerSize = 163;
export class LoadingScreen {
renderer;
logo = null;
spinner = null;
angle = 0;
fadeOut = 0;
fadeIn = 0;
timeKeeper = new TimeKeeper();
backgroundColor = new Color(0.135, 0.135, 0.135, 1);
tempColor = new Color();
constructor(renderer) {
this.renderer = renderer;
this.timeKeeper.maxDelta = 9;
if (!logoImage) {
const isSafari = navigator.userAgent.indexOf("Safari") > -1; // Thank you Apple Inc.
const onload = () => loaded++;
logoImage = new Image();
logoImage.src = SPINE_LOGO_DATA;
if (!isSafari)
logoImage.crossOrigin = "anonymous";
logoImage.onload = onload;
spinnerImage = new Image();
spinnerImage.src = SPINNER_DATA;
if (!isSafari)
spinnerImage.crossOrigin = "anonymous";
spinnerImage.onload = onload;
}
}
dispose() {
this.logo?.dispose();
this.spinner?.dispose();
}
draw(complete = false) {
if (loaded < 2 || (complete && this.fadeOut > FADE_OUT))
return;
this.timeKeeper.update();
let a = Math.abs(Math.sin(this.timeKeeper.totalTime + 0.25));
this.angle -= this.timeKeeper.delta * 200 * (1 + 1.5 * Math.pow(a, 5));
const tempColor = this.tempColor;
const renderer = this.renderer;
const canvas = renderer.canvas;
const gl = renderer.context.gl;
renderer.resize(ResizeMode.Expand);
renderer.camera.position.set(canvas.width / 2, canvas.height / 2, 0);
renderer.batcher.setBlendMode(BlendMode.Normal);
if (complete) {
this.fadeOut += this.timeKeeper.delta * (this.timeKeeper.totalTime < 1 ? 2 : 1);
if (this.fadeOut > FADE_OUT)
return;
tempColor.setFromColor(this.backgroundColor);
a = 1 - this.fadeOut / FADE_OUT;
a = 1 - (a - 1) * (a - 1);
tempColor.a *= a;
if (tempColor.a > 0) {
renderer.camera.zoom = 1;
renderer.begin();
renderer.quad(true, 0, 0, canvas.width, 0, canvas.width, canvas.height, 0, canvas.height, tempColor, tempColor, tempColor, tempColor);
renderer.end();
}
}
else {
this.fadeIn += this.timeKeeper.delta;
if (this.backgroundColor.a > 0) {
gl.clearColor(this.backgroundColor.r, this.backgroundColor.g, this.backgroundColor.b, this.backgroundColor.a);
gl.clear(gl.COLOR_BUFFER_BIT);
}
a = 1;
}
a *= Math.min(this.fadeIn / FADE_IN, 1);
tempColor.set(a, a, a, a);
if (!this.logo) {
this.logo = new GLTexture(renderer.context, logoImage, true);
this.spinner = new GLTexture(renderer.context, spinnerImage, true);
}
renderer.camera.zoom = Math.max(1, spinnerSize / canvas.height);
renderer.begin();
renderer.drawTexture(this.logo, (canvas.width - logoWidth) / 2, (canvas.height - logoHeight) / 2, logoWidth, logoHeight, tempColor);
if (this.spinner)
renderer.drawTextureRotated(this.spinner, (canvas.width - spinnerSize) / 2, (canvas.height - spinnerSize) / 2, spinnerSize, spinnerSize, spinnerSize / 2, spinnerSize / 2, this.angle, tempColor);
renderer.end();
}
drawInCoordinates(x, y) {
if (loaded < 2)
return;
this.timeKeeper.update();
const renderer = this.renderer;
renderer.batcher.setBlendMode(BlendMode.Normal);
if (!this.logo) {
this.logo = new GLTexture(renderer.context, logoImage, true);
this.spinner = new GLTexture(renderer.context, spinnerImage, true);
}
const shiftedX = x - logoWidth / 2;
const shiftedY = y - logoHeight / 2;
renderer.drawTexture(this.logo, shiftedX, shiftedY, logoWidth, logoHeight);
this.angle -= this.timeKeeper.delta * 500;
if (this.spinner)
renderer.drawTextureRotated(this.spinner, shiftedX, shiftedY - 25, spinnerSize, spinnerSize, spinnerSize / 2, spinnerSize / 2, this.angle);
}
}
const SPINNER_DATA = "data:image/png;base64,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";
const SPINE_LOGO_DATA = "data:image/png;base64,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";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZGluZ1NjcmVlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Mb2FkaW5nU2NyZWVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUUvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBbUIsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0YsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQXNCLE1BQU0sb0JBQW9CLENBQUM7QUFFcEUsSUFBSSxZQUE4QixDQUFDO0FBQ25DLElBQUksU0FBMkIsQ0FBQztBQUNoQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFFZixNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNoQyxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUUsVUFBVSxHQUFHLEdBQUcsRUFBRSxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBRTNELE1BQU0sT0FBTyxhQUFhO0lBQ2pCLFFBQVEsQ0FBZ0I7SUFDeEIsSUFBSSxHQUFxQixJQUFJLENBQUM7SUFDOUIsT0FBTyxHQUFxQixJQUFJLENBQUM7SUFDakMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNWLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDWixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7SUFDdEMsZUFBZSxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVDLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBRWhDLFlBQWEsUUFBdUI7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFR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QUFHLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUosQ0FBQztDQUNEO0FBRUQsTUFBTSxZQUFZLEdBQUcsbzBIQUFvMEgsQ0FBQztBQUUxMUgsTUFBTSxlQUFlLEdBQUcsd3ZMQUF3dkwsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHsgQmxlbmRNb2RlLCBDb2xvciwgdHlwZSBEaXNwb3NhYmxlLCBUaW1lS2VlcGVyIH0gZnJvbSBcIkBlc290ZXJpY3NvZnR3YXJlL3NwaW5lLWNvcmVcIjtcbmltcG9ydCB7IEdMVGV4dHVyZSB9IGZyb20gXCIuL0dMVGV4dHVyZS5qc1wiO1xuaW1wb3J0IHsgUmVzaXplTW9kZSwgdHlwZSBTY2VuZVJlbmRlcmVyIH0gZnJvbSBcIi4vU2NlbmVSZW5kZXJlci5qc1wiO1xuXG5sZXQgc3Bpbm5lckltYWdlOiBIVE1MSW1hZ2VFbGVtZW50O1xubGV0IGxvZ29JbWFnZTogSFRNTEltYWdlRWxlbWVudDtcbmxldCBsb2FkZWQgPSAwO1xuXG5jb25zdCBGQURFX0lOID0gMSwgRkFERV9PVVQgPSAxO1xuY29uc3QgbG9nb1dpZHRoID0gMTY1LCBsb2dvSGVpZ2h0ID0gMTA4LCBzcGlubmVyU2l6ZSA9IDE2MztcblxuZXhwb3J0IGNsYXNzIExvYWRpbmdTY3JlZW4gaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcblx0cHJpdmF0ZSByZW5kZXJlcjogU2NlbmVSZW5kZXJlcjtcblx0cHJpdmF0ZSBsb2dvOiBHTFRleHR1cmUgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBzcGlubmVyOiBHTFRleHR1cmUgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBhbmdsZSA9IDA7XG5cdHByaXZhdGUgZmFkZU91dCA9IDA7XG5cdHByaXZhdGUgZmFkZUluID0gMDtcblx0cHJpdmF0ZSB0aW1lS2VlcGVyID0gbmV3IFRpbWVLZWVwZXIoKTtcblx0YmFja2dyb3VuZENvbG9yID0gbmV3IENvbG9yKDAuMTM1LCAwLjEzNSwgMC4xMzUsIDEpO1xuXHRwcml2YXRlIHRlbXBDb2xvciA9IG5ldyBDb2xvcigpO1xuXG5cdGNvbnN0cnVjdG9yIChyZW5kZXJlcjogU2NlbmVSZW5kZXJlcikge1xuXHRcdHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuXHRcdHRoaXMudGltZUtlZXBlci5tYXhEZWx0YSA9IDk7XG5cblx0XHRpZiAoIWxvZ29JbWFnZSkge1xuXHRcdFx0Y29uc3QgaXNTYWZhcmkgPSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJTYWZhcmlcIikgPiAtMTsgLy8gVGhhbmsgeW91IEFwcGxlIEluYy5cblx0XHRcdGNvbnN0IG9ubG9hZCA9ICgpID0+IGxvYWRlZCsrO1xuXG5cdFx0XHRsb2dvSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcblx0XHRcdGxvZ29JbWFnZS5zcmMgPSBTUElORV9MT0dPX0RBVEE7XG5cdFx0XHRpZiAoIWlzU2FmYXJpKSBsb2dvSW1hZ2UuY3Jvc3NPcmlnaW4gPSBcImFub255bW91c1wiO1xuXHRcdFx0bG9nb0ltYWdlLm9ubG9hZCA9IG9ubG9hZDtcblxuXHRcdFx0c3Bpbm5lckltYWdlID0gbmV3IEltYWdlKCk7XG5cdFx0XHRzcGlubmVySW1hZ2Uuc3JjID0gU1BJTk5FUl9EQVRBO1xuXHRcdFx0aWYgKCFpc1NhZmFyaSkgc3Bpbm5lckltYWdlLmNyb3NzT3JpZ2luID0gXCJhbm9ueW1vdXNcIjtcblx0XHRcdHNwaW5uZXJJbWFnZS5vbmxvYWQgPSBvbmxvYWQ7XG5cdFx0fVxuXHR9XG5cdGRpc3Bvc2UgKCk6IHZvaWQge1xuXHRcdHRoaXMubG9nbz8uZGlzcG9zZSgpO1xuXHRcdHRoaXMuc3Bpbm5lcj8uZGlzcG9zZSgpO1xuXHR9XG5cblx0ZHJhdyAoY29tcGxldGUgPSBmYWxzZSkge1xuXHRcdGlmIChsb2FkZWQgPCAyIHx8IChjb21wbGV0ZSAmJiB0aGlzLmZhZGVPdXQgPiBGQURFX09VVCkpIHJldHVybjtcblxuXHRcdHRoaXMudGltZUtlZXBlci51cGRhdGUoKTtcblx0XHRsZXQgYSA9IE1hdGguYWJzKE1hdGguc2luKHRoaXMudGltZUtlZXBlci50b3RhbFRpbWUgKyAwLjI1KSk7XG5cdFx0dGhpcy5hbmdsZSAtPSB0aGlzLnRpbWVLZWVwZXIuZGVsdGEgKiAyMDAgKiAoMSArIDEuNSAqIE1hdGgucG93KGEsIDUpKTtcblxuXHRcdGNvbnN0IHRlbXBDb2xvciA9IHRoaXMudGVtcENvbG9yO1xuXHRcdGNvbnN0IHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcblx0XHRjb25zdCBjYW52YXMgPSByZW5kZXJlci5jYW52YXM7XG5cdFx0Y29uc3QgZ2wgPSByZW5kZXJlci5jb250ZXh0LmdsO1xuXG5cdFx0cmVuZGVyZXIucmVzaXplKFJlc2l6ZU1vZGUuRXhwYW5kKTtcblx0XHRyZW5kZXJlci5jYW1lcmEucG9zaXRpb24uc2V0KGNhbnZhcy53aWR0aCAvIDIsIGNhbnZhcy5oZWlnaHQgLyAyLCAwKTtcblx0XHRyZW5kZXJlci5iYXRjaGVyLnNldEJsZW5kTW9kZShCbGVuZE1vZGUuTm9ybWFsKTtcblxuXHRcdGlmIChjb21wbGV0ZSkge1xuXHRcdFx0dGhpcy5mYWRlT3V0ICs9IHRoaXMudGltZUtlZXBlci5kZWx0YSAqICh0aGlzLnRpbWVLZWVwZXIudG90YWxUaW1lIDwgMSA/IDIgOiAxKTtcblx0XHRcdGlmICh0aGlzLmZhZGVPdXQgPiBGQURFX09VVCkgcmV0dXJuO1xuXHRcdFx0dGVtcENvbG9yLnNldEZyb21Db2xvcih0aGlzLmJhY2tncm91bmRDb2xvcik7XG5cdFx0XHRhID0gMSAtIHRoaXMuZmFkZU91dCAvIEZBREVfT1VUO1xuXHRcdFx0YSA9IDEgLSAoYSAtIDEpICogKGEgLSAxKTtcblx0XHRcdHRlbXBDb2xvci5hICo9IGE7XG5cdFx0XHRpZiAodGVtcENvbG9yLmEgPiAwKSB7XG5cdFx0XHRcdHJlbmRlcmVyLmNhbWVyYS56b29tID0gMTtcblx0XHRcdFx0cmVuZGVyZXIuYmVnaW4oKTtcblx0XHRcdFx0cmVuZGVyZXIucXVhZCh0cnVlLCAwLCAwLCBjYW52YXMud2lkdGgsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCwgMCwgY2FudmFzLmhlaWdodCxcblx0XHRcdFx0XHR0ZW1wQ29sb3IsIHRlbXBDb2xvciwgdGVtcENvbG9yLCB0ZW1wQ29sb3IpO1xuXHRcdFx0XHRyZW5kZXJlci5lbmQoKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mYWRlSW4gKz0gdGhpcy50aW1lS2VlcGVyLmRlbHRhO1xuXHRcdFx0aWYgKHRoaXMuYmFja2dyb3VuZENvbG9yLmEgPiAwKSB7XG5cdFx0XHRcdGdsLmNsZWFyQ29sb3IodGhpcy5iYWNrZ3JvdW5kQ29sb3IuciwgdGhpcy5iYWNrZ3JvdW5kQ29sb3IuZywgdGhpcy5iYWNrZ3JvdW5kQ29sb3IuYiwgdGhpcy5iYWNrZ3JvdW5kQ29sb3IuYSk7XG5cdFx0XHRcdGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xuXHRcdFx0fVxuXHRcdFx0YSA9IDE7XG5cdFx0fVxuXHRcdGEgKj0gTWF0aC5taW4odGhpcy5mYWRlSW4gLyBGQURFX0lOLCAxKTtcblx0XHR0ZW1wQ29sb3Iuc2V0KGEsIGEsIGEsIGEpO1xuXG5cdFx0aWYgKCF0aGlzLmxvZ28pIHtcblx0XHRcdHRoaXMubG9nbyA9IG5ldyBHTFRleHR1cmUocmVuZGVyZXIuY29udGV4dCwgbG9nb0ltYWdlLCB0cnVlKTtcblx0XHRcdHRoaXMuc3Bpbm5lciA9IG5ldyBHTFRleHR1cmUocmVuZGVyZXIuY29udGV4dCwgc3Bpbm5lckltYWdlLCB0cnVlKTtcblx0XHR9XG5cdFx0cmVuZGVyZXIuY2FtZXJhLnpvb20gPSBNYXRoLm1heCgxLCBzcGlubmVyU2l6ZSAvIGNhbnZhcy5oZWlnaHQpO1xuXHRcdHJlbmRlcmVyLmJlZ2luKCk7XG5cdFx0cmVuZGVyZXIuZHJhd1RleHR1cmUodGhpcy5sb2dvLCAoY2FudmFzLndpZHRoIC0gbG9nb1dpZHRoKSAvIDIsIChjYW52YXMuaGVpZ2h0IC0gbG9nb0hlaWdodCkgLyAyLCBsb2dvV2lkdGgsIGxvZ29IZWlnaHQsIHRlbXBDb2xvcik7XG5cdFx0aWYgKHRoaXMuc3Bpbm5lcikgcmVuZGVyZXIuZHJhd1RleHR1cmVSb3RhdGVkKHRoaXMuc3Bpbm5lciwgKGNhbnZhcy53aWR0aCAtIHNwaW5uZXJTaXplKSAvIDIsIChjYW52YXMuaGVpZ2h0IC0gc3Bpbm5lclNpemUpIC8gMiwgc3Bpbm5lclNpemUsIHNwaW5uZXJTaXplLCBzcGlubmVyU2l6ZSAvIDIsIHNwaW5uZXJTaXplIC8gMiwgdGhpcy5hbmdsZSwgdGVtcENvbG9yKTtcblx0XHRyZW5kZXJlci5lbmQoKTtcblx0fVxuXG5cdGRyYXdJbkNvb3JkaW5hdGVzICh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuXHRcdGlmIChsb2FkZWQgPCAyKSByZXR1cm47XG5cblx0XHR0aGlzLnRpbWVLZWVwZXIudXBkYXRlKCk7XG5cdFx0Y29uc3QgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xuXHRcdHJlbmRlcmVyLmJhdGNoZXIuc2V0QmxlbmRNb2RlKEJsZW5kTW9kZS5Ob3JtYWwpO1xuXG5cdFx0aWYgKCF0aGlzLmxvZ28pIHtcblx0XHRcdHRoaXMubG9nbyA9IG5ldyBHTFRleHR1cmUocmVuZGVyZXIuY29udGV4dCwgbG9nb0ltYWdlLCB0cnVlKTtcblx0XHRcdHRoaXMuc3Bpbm5lciA9IG5ldyBHTFRleHR1cmUocmVuZGVyZXIuY29udGV4dCwgc3Bpbm5lckltYWdlLCB0cnVlKTtcblx0XHR9XG5cblx0XHRjb25zdCBzaGlmdGVkWCA9IHggLSBsb2dvV2lkdGggLyAyO1xuXHRcdGNvbnN0IHNoaWZ0ZWRZID0geSAtIGxvZ29IZWlnaHQgLyAyO1xuXHRcdHJlbmRlcmVyLmRyYXdUZXh0dXJlKHRoaXMubG9nbywgc2hpZnRlZFgsIHNoaWZ0ZWRZLCBsb2dvV2lkdGgsIGxvZ29IZWlnaHQpO1xuXG5cdFx0dGhpcy5hbmdsZSAtPSB0aGlzLnRpbWVLZWVwZXIuZGVsdGEgKiA1MDA7XG5cdFx0aWYgKHRoaXMuc3Bpbm5lcikgcmVuZGVyZXIuZHJhd1RleHR1cmVSb3RhdGVkKHRoaXMuc3Bpbm5lciwgc2hpZnRlZFgsIHNoaWZ0ZWRZIC0gMjUsIHNwaW5uZXJTaXplLCBzcGlubmVyU2l6ZSwgc3Bpbm5lclNpemUgLyAyLCBzcGlubmVyU2l6ZSAvIDIsIHRoaXMuYW5nbGUpO1xuXHR9XG59XG5cbmNvbnN0IFNQSU5ORVJfREFUQSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFLTUFBQUNqQ0FZQUFBRG1iSzZBQUFBTEtFbEVRVlI0MnUyZGUyaVc1Ui9HUHp1cWN3Zm5uS2ZObWFmbDV0VE5IV3pxTmkzREVNUXlrY0FvSlNzeVNrc3BqU0lrMGlELzA3S2Y0UitGblZCRFVUc2haR3BXVUVKYWFpV0ZnWmxVRm1YbUllM0hOWHRoeWViZVo3N1A5SDEzZmZCRzhZOEg3dXQ3dmZmOTNOLzdmdTR2R0dQaUZaaWV6L1F0dzlseXRKYWpmemZ3OXovaitlZlBPdjdjVjhXK2xVTlkyYThUL2F5VENSc1dGTEpBNXJ0VU8xTExrVjVwOUxKZUppelFpSGVxbmxPdG1WRnRkVEdyclprSkN4WVhzVGdhSTZyOU1ZNC9VcE5JdFc0bUZEYVhzVGxhTTZxVlpsQnEzVXdvZkZySnAwSE1XSjlEdlhVem9iQ3puSjFCekZqV2xUTHJaa0poL1REV0J6RmpUZ281MXMyRWduS0kwUnJ4K0ZpT1d6TnpWYXltOTFTeXg1cVpzR0JXYjJaRmEwWk42ZGJNaEFXVGNwa1VyUm1YRDJLNU5UTmhnVmJIMFpweGJsL21Xak1URnZSSW8wZTBacHpjbmNuV3pJU0t0dm1pTVdOUko0cXNsd21WWFJYc2FzMkl4OFp3ekZxWnNHRlJFWXRhTStPYWExbGpyVXpZa0o5Ry9vazZUbHpLakpXWlZGb3IweTdjMVp1N1dqTGlxaUdzc2thbVhkSG9weVQ0dkFMbXpTOWsvdDE5dUh0S0hsT1NJTW42eEF0QVJqSVoxc0ZjVVNaMFk0TGErRzZNMThoUzJJbENuNGErV29DMEpOTDBkL2RVdXBkblVqNDBnNkVKMlZFZE1uaHJPRy9wNWYvalVYejhTZ212YUdVNktwTlJOc0xWUVYwT2RYZjI0czYzaC9QMmdXb09yQmpNQ3IyR0pGUW5ueG5JTTNxNVAxUFBtYVl2KzRldjQvQzZVdGJwVjJnelhDa2dMNVc4Qnd0NDhPSWM2dWw2VHArczQrU3lBU3hMaUk0K1BZQ24xYkh6RFp4dmFRVzZ2Wnp0bzdNWW5RSXBOa2Y3a3A1RXVvellVcm9xRWpjTktISGQwVGw5bUJQTjFwaytoRmVpZUdCbkJ0b2c3VVhqc2o5cFdnK202ZHVlY3cyY2F5MU9DL3V4TUM0N0ttUDlPSVlmb3oxWW9DMjBKL3J6Ukc0cXVUWksyRUF5SkdzMjBxd1ViWXcwYU5SbVV4dHZmVVcvdUV0TnpjMU5CMS9YOExWeWQxNWhoODJGNDNBdkQrVmxYY3NTSkVaYTFDUTNlamxlQU83b3hSM1JEUDBYTjkxWDQrTlhZYjhua3Y3VU5Ud1Y3ZTBZVGR1N0kzZzMzdDd0dWFFYk53U1pwcHMyZlN5dnM0TTJUamhvdCtqYjBYemJsdGo4cjVqL3hWdC82WjFPYjkzVTFaWU82OTFFaGh6Y2hjSGVYb3NWamNOWnlzeWV6THc0eFJadDA1UitmVGV1ajh2T2orekt5RzBqMmFaY1ZWczZ2K1FhbG5qck1GWkFTUVlsMm5Cb1N5ejA2ZTNqL1hrOHJnV1ltTXZFSUN1MnBtMUhPVHVjN29rVjhGZ1JqMFh1a3d6YW5odkNjL0YrNzJUam9RamRPYk4xT0Z1RExtaDB4UCtXSHR4aUkxMHVrSmxDcHJiNGd1aXYxZlArYXZaclMxQzdOQWtsaUhaakR0WndNTWdxYnVrQWx0cE1sd3VNeTJGY0VCUHF2ZkxMYXI1VXFpMGhCZEV3cnl5K012NW42emtialRCYStkbE1sd3ZVWkZFVFpLR2lGTTd0dmJoZEozZ1NWUk8wd3pJam54bXZsL0o2YTZKc0dNWUdyYWh0cHNzRmVxYlI4NDFTM21oTjgwT2pPYVNERWRxZDZTamFNS2d6Z3pSSzdxMWliM1BUOXNZeU5vN0pab3lORk52UmNWTVpteTdXT3ZJdXJ5di9admRtZHQ5MCtuWTBiUnAzQXZST29oRndkd1c3ZFRHN1JGbGJ3bHFkcmJPQllnMDA1TkFRbVpVMEhXdDFyWE1CSDFYdzBkUThwbXF6b2FQbWRodW43Ykhaak5WZTlxUDllRlFmTzFWa1VtSGpoQVZVWjFHdG5LRlNianJrclBmeTRpNFVXNXQvNlp4TTU0SjBDcXhGZTgxS3BHc1F5RTRoMjNvWVk0d3h4aGhqakRIR0dHT01NY1lZWTR3eHhoaGpqREhHR0dPTU1jWVlZNHd4eGhoampESEdHR09NTWNZWVk0d3h4aGhqakxuYStiZE95K0lpRnF1SXBHcTE2UGI3OWNOWXYzSUlLL1gvdWd4K1VpNlRWS3ZZVlU5TmM4Z1g4b2Q4SXIvSU4vS1BmQ1EveVZmeWwvNi9wZkp2TENoa1FkRDZ3eXFudHF1Q1hZdUtXSlNmUnI2RDBkRUF4VjN4bHcva2h5RCtrZC9rdS84OGNIbyswOXRTM0xCcE8xSEhDVlVxY0lBNkNxQjRLKzZYNngzNUwvSk0ybG9YdXJsV21VbWxBNVhvZ09JY0s4L0lmNUhuY3JTV283RjZjS0lXUGpUL1JYR09sV2ZrdjhoemFXc040dWFheXNFNldJa09LTTZ4OG96OEYza3VzWHFvMnZ4QzVqdFlpUTRvenJIMFRlUzVxSVpjckI3cWtyd2RBOFU1VnA2Ui95TFBaVjhWKzJMMTRDbDVUSEd3RWgxUW5HUGxHZmt2OGx5VWxJekZRMWNOWVZWSHJjalowVkNjRmU5WStFYitpenkzY2VjbFVsNDNhRk41MkRYWHNzWXBuWTZhNHFGUzhaY1AydUlmK2U3aW5SaDZwZEZyZFRHcm04dWlIeC9MOFQyVjdOR1d6dkpCTEovYmw3bVR1ek81cUJORkRvaUpJRC9JRi9LSGZDSy95RGZ5VDNPN2QvS2JmTmZTODBoTklyVTBnOUw2SE9xMXg1aVRRbzZGTnBlTGZDUS95VmZ5bDN4bVhZd3h4aGhqakRIR0dHT01NY1lZWTR3eHhoaGpqREhHR0dPTU1jWVlZNHd4eGhoampESEdHR09NTWNZWVk0d3h4aGhqakRITms5ejRKd0owU3FLVGRRa2J5RXdoVTM5M1Q2Vjd6elI2cGllUjN0RTFJVGVWWEltaGU2QlhER1pGZFJiVmVhbmsyVEJoY2FFTXIwcndiaXhqNDlJQkxMMi9ML2ZmbU11TkhmcU85dEZaakpZQmQxZXdPM0x4K0ljVmZLaHFuYTVuSFpZUjZYRlBIKzVSM2VlSTV0OWZ4L2Z2amVDOUpkZXc1T0taS3FGUi9SRFZLTDZ2TC9mOVBKYWZteXZIc0wrYS9mZjI0VjZObWpaUWJHY2hWYlk2VU0yQmx1cUh2MXJDcXpWWjFLUWxrWmJvZXBDZFF2YWNQc3o1YmpUZlhhbyt5TUVhRHQ3V2s5dFNJTVZHaWczVGVqQ3RKU00yYlNwa1BqV1BxZDFTNlphbytsT1JTWVdtZ2tPak9SUk53WnFkNWV6TVNpSExSb29OcjVYd1dqUzYvMVhIWDl2TDJUNjdON00xaXlYYTlKQ3JZalZyUzFnYnBKeXc2aEJmc21pTkNZVDBQOS9BK1dqMS82cUdyNVlOWUZsSkJpV0pvZ0V6ZXpMei9aRzgvOXM0Zmd0U3l1dk5ZYnlwMUlPTkZCdHU3c0hOdjQvajl5QXhVSFdyZGFXc0c5K044WEhkK1l4a01wU3krYXlTejg0MWNDNW9YYm1IQ25uSTc0eXhBZ1ozWWJEZUI0UEVRQ09wQnBGTlpXd2EyWldSY2RueExzbDAwY3J0UkIwbjJsTGc4Sk5SZkRLb000TnNvbGdCU213L1VNQURiYTErcXBtcWZ5ZjZ4MXUvMGEvb2czSSthRXVuUDYvaTg2b3NxbXlnY0dhckY0cDU0ZGV4L0JvMExxZnFPZlZ3SVEvSFc1L1JTa3dWMW9OMldMbEhUYzgyVGxqQXdNNE0xTzVMV3dZS1pUamliWVhOUzBONUtjaktUZTEwUGFkZkxPYkZ1SndLNG96cCtVelhEQlRVakwrTTVaY0JuUmtRVjUzZE1Jd05RVHU2YlNUYlZFemJpNWF3dVZCeWQyRS9GZ2FOMFRjMWZLT3pCSEhWMmFBZFZTZHY2czVOTmtwN2NTSC8rK3hBbmcyeXlIeCtDTS9IMjFZaGZkUHArMFUxWDBUYlNablh4OGZhRzlBb3AwTVMwY1RvaDFwK2lMY3BPa0xqOXQvSk9rNWVxb1BIeG5Ec3lmNDg2YW41eXFDREs3WFoxTzRvWjRkV3l5M0ZTWEhVQVlxNDd1eVliTVpvR21ocEczRGxFRmI2dU5pVkJocHlhSGhuQk84b0ptZnFPUk9KanpJaVA0M2hKOFV4SVRxcVg1NlMySHVyMktzT25xM25yRTZQUE5LUFJ3clNLYkFacmpUUU5abXVFN294WVhNWm14V2J3OWR4V0Z1NFc0ZXpWZWRPRTZxekk3b3lZa1krTTdUUGVXc1BiazJVWDFxaW9TTitFM09acU9SMmNSZUtFK3FRUkZOMFBpN3k3M2cvVWF3VTFLemV6SnBYd0x6NWhjelgxdWVVUEtZa05iNkdKUVorajcvYUFmUlpSRXN2K3F1R3NNb2FtWFpCVzJHdDVlVTBhbG9yRXpZc0ttSlJhL200TmRleXhscVpzQ0dhODRES25Wb3JFemJvQzdwb2RpczY5RGZJSm13dWZITWM3ZmFtdnZteFppWXNLT3RLV2JSbTFPY1cxc3lFQmJvU0pGb3pMaC9FY210bXdnSWx1YU0xNC9waHJMZG1KaXhZWE1UaWFNMjRwNUk5MXN5RUJUcGhGT1I3WTJ0bXdnSk52VUZPcit0b3YzVXpvYUF2NDRLWVVhdHY2MlpDb2VtZGh0RzAraHpxclpzSkJSMDhEV0xHMGd4S3JadTUwcXZweG9zM1U1Tkl0VzRtRlBwMW90K2xQbHBxMmxZWHM5cWFtVkJaVU1pQzFveDRwSllqdmxmU3RBdTZHbVRMY0xib010UElWNC82aW01ZkZmdVVpOVFJYXAyTWlXUCtEOTZSMXZQbXNEL2ZBQUFBQUVsRlRrU3VRbUNDXCI7XG5cbmNvbnN0IFNQSU5FX0xPR09fREFUQSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFLVUFBQUJzQ0FZQUFBQUx6SEttQUFBUTdrbEVRVlI0MnUzZGE0eGRWUlVBNEQwemQyWTZuWlk1OURWdFoxcHVTOStsekMwWUFpMlVROEFBUWN6RnBQZ0E5VkllSVFiaXJScUowY0JVQlZHakRyL1FDS1NOUlNNbXB1T0R4QWR4cWhnd3hraEZqZjZTeGgvK1VVTlZOR0pDelI3dVR2YXM3TFhYMnE5enpwM2VtNnkwZ1ROM1p1NzV1dFplNSt5enR4QzlWKy9WZTVYOUVuMVZqZDdKNlNGYkxORjduYVB3K2wyamg3WUhNQldzc3FNSHRsc1JkaW00cXNMdElhd2FQaUhFUU9Mb05yQTlpSWtRRG5SclZBMXFEMkxaOElTb3hZcUtvMTNzUUF0QldCYXlRV1pVQVhHUlFNOUpqQ25nRFZZMFVxSk5EYlFyTWNhR21BcmRVS3BJamJZaVFMc0NaQ3lJTVFCeThRd25pbFI0UTVBdUNweEZZdlJGbUJMYkVpd0t3cHNTYVd5Y1ZRR1pCS01yd0JqQTlCaHhEZTU3dTJMMmhPb0tOQ2JPcmdBWml0RVZZVXhvS1NNRXJRdlN4WUl6Q2tndVJnNUVGNEFVaHFVbGh5L1lVS1N4Y1JhS3Npb1lPUWhENEkweVl4a1IzUGNKQmN1RnlzbWdzWEFXQlRNSnlCQ01JUWg5a0dHeFhJWHZleENRWGJIR0FNckJXVGJNMkNDcE1TTUxJeGVoQzc3bFNKd1hHdGg3TTBGem9WSklYWERXUW5HbWhPa0wwaWM3WWhodFdkR0drQXVQQWpVV0dvRjRmYUNtd0JrYlpteVVxVUN5TXFNTFJBNCtFNklzZFRqaWRVSEtCWXJoOUNucFJjSDB5cEt4c3lPR0VZTklJZVRDT3o5MU9JSjFRWW9CNWVBTXlabytNRk5ueVZUWjBZaVJDOUVHRU1PeUFnc2h4RXJIc0wyWEsxZ09VZ3dvaHRNMWE1WU5NN1JzdTRLMFprY2JSbTRtcFBCUndGWjVoZzllQ3FrclVCK2NzV0dHb2d6TmtxRWdyZG5SaHBHTGtJTnVkYUxnd3ZWQjZvcXpDakNUWkVsYjJZNEIwZ1VqQnRFRzBBUm5EUkxqam9HOUR3Y3NodFFHbElQVGxqVmp3VXlTTFdOa3lSQ1FWSGEwWlVVVFJBd2dGOTFhMzNCRXkwVktBY1Z3d3F3WkMyYnFiT2xVdXJsbE94UWtKek55SU5vQVlxaldoWVlqV2c1U0NpaUcwNVExVThGTWpUSW9TOFlFNllPUmkxQkh0SjRLSWNRRUV0VFhVV0F4cEs0NFlWbFBCZE8xakNkRldUWklFOGJWR0VZTUlSUGNaR0J3NEhLUWNvQmlPRTFaTXpiTWdWUXdVNkpNQWRLRUVjdUlKb2dVdmcxWUNDRTJnc0NPNDJEbElJVkFLWndwWUphU0xWTm5TVTZYallIVW14aFRtWGFGYU1PM0VZa0xxTUMrRnNMbElvVkFLWnpNckVuQmhKZUxmTE5sS01yWVdSSURDYk9rRlNTVkhiSE02QUtSQzYvT0RVZXdOcVErT0xsWmt4cGpVbVY4TUJiTVVKU3h5elkzUTFJZ1RSZ3hpQlJDSGRlbTBLREFVa0JoOXNSd3dqRW5BWE1NZ1RuS2hGbFV0aXdrUzVyR2thNGc5U2FHZ3hGbVJDN0F6VENFRUJjeUEzNmREU3NYcUF0T0xreXNqR013WTVYeFZDaGpaMGt1U0NvN1lsa1JRc1FRWXRERUZzZWdzTG9DeFVwN0twZ3BzMlVzbEZHekpHY2NTWUhVbXhoT1pxd3pFWnFBYmZVTUNpc0hLSVp6Z3NDcGwzTVR6TXdUcGkxYllwMjQ3N2d5RktVeFM3cVdiZGpZMkVCUzJkR0UwUVFSQTdnTkN5SEVkaGpFOFJoVURsQlQ5dHpnbWpXWk1GTmxTeStVcmsxT3pDeUpsVzBYa0s0WU9RaDFjRHRjZ3dCclFtb0RXa2RnYm9CWkU4bVlzSlNIbG5GYkorNWJ3bU9QSjdsWmtpcmJDOGFSc012bWd0VEhqQmhHRTBRYndKMmVnVUUxSVRWbFVDNU9tRFZkWU5yS3VONzB4TTZXb1NoamxXNDQ2NGRidGlGSVdLNng3R2pFU0VIVVVlMGlZbmNuYk1kUVNFMFoxSVRUTk9iMGhSbWpqTHRtUzlkbUoycnAxanR1S2t0eXlyYjZZTEVNQ1VIcTJkR0cwUVFSUTdmNzJremMrY0plY2VybmU4V3Z2N0pOUEhQdmVuRWt6OFNoM1V0RmM5MlF5R3Q5WWtvL0hnT0xBSVVabEl0VHo1b3VNRjNLdUUrMmpGTENRMUQ2bG02ZkxNa0JhY3VPSm93WVJCVVh5Zmp1SGpGM05oZG5zZmp2QWZINkU5dkZ0OVh4S2dpa0VLZ0paeXlZYWx6T0xlTXUyYkxiVUxJNmJoK1FHd21RK3JnUmx1bWRHRVFBYW8rSzU2YkVMMndvVlV3T2lldjByOE9BVWppSnJNbUZDYnZ5a0d4WlJBbVBpdEsxZEhNN2JvaHlNc3V5aS9JOGYwK2U1N2ZKWUlLRVpYcFhvOUU0bU9mNVhUS3lMTHZDQkxFVEY4dVkyU0tlcGtDK2RwWDRUMDJJdmVwcjRIdlpjT1o1Zm1lZTU0ZnlQTCtEbVRVaHpBczZuNG44Yk41ZHI5ZjNZZGtTZzhuc3hHMGxQQlZLVnBOakcwL2FHaHpmTERtUlpkbnVtWm1acDgrYytjZFpQVjU1NWZTcjdYYjdzMGpKM2k1UGN1ZTRNeEtrUFBrdnZYVHF6L0I5MnUzMmwwd1lPekcxZmtoY2QvcHk4UmNieXEvdkZNL0tZMVdBOTVoLzN6elA3MWJmVTZKc05wc2ZnaitQL0ZsYnJkYURHRXhZeXVYdkx6OEgrRHVkT0RINzAwYWpjU00zVzZZdTRhbFExc3BDT1RkMzhqY0tvY1RaYmg5KzlOaXhZOTlYSjhBRVVrY3BvOVc2NHlIMTk3bTVrNytibloxOVFUK0owOU5IbnRRaHdqaS9KZzU4cWk2KytvZkx4SjhnU0ZuZVZ3MkthNFFRRGZoMU9rNGRaYXZWbXRaL25ybTVrNy9WZjU1TzF0Umhib1V3NStaT3ZxeU9sNStSL0Z5T0hqMzJQWVZVL3Rsb05HNUlYY0tyaEpJem5nd3AzZk5qb21hemVhLzY0QnVOeHRzNjQ2ZjUwbFd2MTY5dXR3OS9EbXRxZEpReVpGYVNKVnVWNm5xOWZxTUVvZjUvdlY2L0NZQnFnSkRsZWUreUFiRi8rNGk0WldxWmVOZmFJZkhXem4rSHgwS2NFdVU5K3M4anYzZWowYmhWbFhPWnlkWC9rMGlSTWViOFAwRDVlNnRqOHp5L1hiOVVKSWM1NmgveXFWT25YdWw4bG11WjJiSnNsS21iSEc3WHJicENtQ1hGUkx2ZGZxUUQ2alRTM0ppeTVJNE95a002QURWKzFFdTFEbVY2ZXZvcEJPUmV4ekRpMUwrWC9Ibkd4c2IydzNIbTlQU1JKOVF4V1BPVFpkbWxLaHQyaGkrdzZka294NWJxZmZJOGZ5ZTNoRHRlR3FLYUhWc0hYaWhLbDB0QitoMGNZK2x1dGU1NEFHUktEQ1c4OUxOVFJ5bkhiN0NoVVdWVmpldE9uSmg5RVlCVXlQWmVOQ29PdHNiRlF3ZFhpNC9lc0VMY2QrdHE4Y0NISjhVWHArdml5OWVmTHo3QWdhbWpsS1hjMUFBMW04M0RvSVJEbEZ1YnplYjk2aGhaTFZUbGdKMjRndHR1dHgrT05hNTBiSFpLUmVuYWVUczFPZnBBZm5yNnlPT2RFN0VaZE53bWxLb2NudFhMTmtBNUpUR3E0N0RzK0xmOTRsV3N5Zm5YbGVMZm5Jd0pVTjRET25OWXd1VXhoMkEzTG45WFVMcmZLOHQzSjI3VHUzQlZ3aU9qWEpxb0F5OFVaZWoxeWNsR28zR1RMTitndTN3K3ovUDNZYVdiUXFrM05lMTJlNFpDK2M4cnhXc1l5dGNQaVA5UnBaeENxV0RLbnhPaUJObHlBVXBPbkdzb2g0dEEyUm04WDl4cXRUNm1kNXd5Wm1ZZSswWVJLTCsxUy93WVEzbjh6Y3RCbDVTQlV2NWRqaXZmak1PUGR1SXpjaXplaVlmcjlmb1Z2VXdaRytYQ3V6aWJaS25TY2VaNS92NFFsS3A4eTdFbGhuSmxUZVRQN0JJL2tsbFJZZnpyZnZIcUZ5NFVYMXZhTC9hVmxTbVJPendid2RTMjlUMlVjRXdaRitWOG96TTJsdTFWWTgxMnUvMTVha3lwR2gzVG1GSmVzSmJISEQxNjdJZFV4ejNZSnk1Yk55U3VYMW1idnk1NUNiTUx0elU2dGpHbHNkRnB0VnFmVU1jMEdvMjNGNHd5MWwyZFNuYmZ2cE13VlBlOVdXVkxEc3JPSmFGOU1GdTJXcTFQcW1Oa0djZTY3eGlYaFRqZE53ZGx2VjYvQmd4ZmJQZkJmVkNldHhpNmI5L3JsQ3VwNjVRek00OGRsMk9qTE12MjZDaWJ6ZVo5NnNUSXpFRmRwd1FYejlVMXlydFZscFIvWmxsMkZlYzY1WTZsNHBiYng4WEhIOWtrbnZ6SmxQamxIeThUcDI5ZUtUNW91MGFKb0lUM3czZEJsTER6VnBmQUpFWjFYT2RhSlp4bk9TbHZQTWpQenhGbGpJdm5nOTE0UndlYnNqWU83dWhNeUh1NDZzT2ZuZjNPejJUWERXNnZ2WXhkRm9JWHozV2M4SjV6czluOGlPbjJJcnhUYzJCTTNHbHFkcDdkSTU1M3VhT2p4cmh3Y29iK015dVVwanM2V1paZG9uOE9jaWdqUHg4Vit1K0dUV0ZUU1dFeDNXWWNkSjIyNWpORFNFNHEwR0hDemx1ZUhPeXVqbjZiVVdZZ2ViOVpaVWFRUGUrR3pRK0djOCtvT0doQytjMWQ0Z2ZJMTZuM1hEQWhRNys5cUU5bDAxRTJHbzEzMkdZS3lYRTFOaUZEVGNwb05wdjNMT1lKR1dYTkVySk5XOXNFcDYzcDJSS2lWUE1uMWJTMURneHN5aG9HZEdwbWl6ait4dFhpRFlueDcvdkZtY2UzaVdkVzFjVFZHRVk0aFEyWlcwbk5xOFFtL002WGJYbTNTMTAwbHdHZWRGeWJ1dk5PaWJMSStaUzJjZVU0ZUF4aUV1dkNrZm1VOHljVG9EeEVUZTZGZ0NCUUhlcXlBYkZ2ZkVoY083QndEdVhGQ0ViVFpGODQwWGVISzBqWWNiczJPSUdsZTBtVkovbW1uQ2xFUFFxeHlUWTVJOC96RmhpZjdmU1plZTRibnJQT1U0QXNzblJYSGFWVENUZDE0ZFJEWTNVYlRJaVNlRmhzTi9hTWpnbnF0aEZ4ODgwcnhYM3lBVEw1cDN5NExQWHpPYUJrVXlCalpNbFlwYnRRbElPQkQ0NzVaRXVzak1OU3ZrWGU2VkVvSlZEa2VaMmR6SWZJRnNSelUrSkYyT3lNOU05ZlRDLzZTVVlPeUZRUGpRMm5XaVVqeG5QZnc1RWVIcU1XSXFBZUlGc0FVODQ3bEpNMkpNNnhzZXd0MU9JRExzOTlQN1pGSE5kQi91cFM4WHRQaUQ3UGZMdUNYSk5vbFl5eUZpTkkvWml0NjVJdHJPVmFmRmJIY0ZvaFk3aFBUTjIxVGp6NHVjM2lxZnNueEtkWDFNVGwxT29ZUkZhTXNUb0dCNlRydzJKRlAvT2RaQzJoSlo3WmtyTW9BYmJTR21lbERKOTFoRkt1SmVTN2psQk1rSm5yQXFxSmxnTVVaUy9kQXJQbEdITmRTZzVNM3hYWHR2cXV1RWF0dklZdERSaHB4YlVKdUlncXNVNWxHV3RVcGxvSzBLdUVVOW1TVzhZcG1GUTU1NnhOdVlXN05pVzEzQitGa01pS0hJeStDNmVHZ0J4SnZNUjBvU3Y1aGk2K3o0SEp5Wm9VME0yUlZ2RGxyT1FiY3hWZlg1QWhaYnVxeTB2N1pzdFlNTEhsQVZsTFRGOUFMTGJ2dTlZNVp5bHBuL1hPc2QwaWJJdnhyMktDTEhwcDZTQ1VJZG5TWlNGK1d6Zk9oZW02R0QrMUt3UjNaNGpOanJ0RHBOb1p3bVdkOHlydXBaTjZIeDNmYk1tRlNlMFN3ZHEyWklQanhrMTExMkR1bzhPQkdMckJrdy9Jb25jZEsyWEhzZEM5ZEh6MjA0bTUweGgzdHpGcTF6RnF0ekhYcmZDdzdPZ0RzcXlOblpMc3pWaWpzbVhncm1OY21HdFM3OGxJb01YMmFKejAzZktPMnNESmRkUFFTQ0RQaVExRGZXQnljWTZYdFhzdGMyUFFLdXhnRzJNY21YVFBiOS85dm11SllYS3lKcldqYmVnKzN4UE00TzczbldxdmJ5dzd4Z1paU0piRVVCYTE1N2NOSmpkcjJ2Yis1aUExWVYzSHhZc2NqMzBQRENFSElnY2p0Zm04SzhoU3NtUm90a3dGazVzMVRUZ2hVQW9wQjZ4cmpITUJCa0kwWVlUWjBkWmx4d0xwa2lXRFVMcG15NWd3cWF5WmdaTmtBN29LUVFDeGN0QnlZZzBYSUlFUVF1Uml0R1ZIYmxNVEEyU2hLR1BEcEM2d3UrREVnSnFnMnJER0RCdEFGNFE2UkFvanAxeFhHbVNNYkltVmNSK1lXTlkwNGVRQ3RVRzFvZlVKMi91dmNFVElnVWhoZEFFNUdBbGtLU2hqd0hUTm1oaE9ES2dKcVEyc0MxNHVPZ3lmRDBJYlJGK01sUWFaQWlaV3luMnlKc1RKQVRxR25IUU8ySmhoK3hsc0FDRkNHMFFiUnRkeXpRRlpDWlN4WVBwbVRTN1E1Y2pKSFlOQllJa1pwdTk5SG9VUS9vNFFJWVNJWlVaZmpKNFpNalpJMzJ3WkJETVU1eWh5OHBaVFVMbDRYWVA1ZmFnTXlFVm95NG91cFRwR2R1d25rbG9TbEtFd1krQWNRVTRNaFJURDZvdlhCUndGendXZ0NTRUYwUVZqSlVHbWdFbGxUUzVPTGxDSWxJTjFtUzlteC9jWjVlTERBTHBDVEkyUkFoa1RaUXFZb1RncG9DUEVDYmFCSFEyRVRMM1BVbDk4RUNBWFlpakcwT3lZQW1Rb1RHN1c1T0RrQUYxQ25WZ20ySlF4NG9rUEErZ0NNVGJHc2tCR2dSbWFPYmxBaDVHVE9SSXJmS0Z4NFZINEVJQXhJWEl4bGcyU0JiTXZFQ1kzZTdvQXBiRGFJZ1F1NS8ySG1lRUtFSU5ZaXdTUmk3RVFrTEZndW1aT0N1Z2djdEtHSTRVTFpOL3ZNZVNMajBBWU15dFdFcU1MekZnNGZZRGFvS2FDNnd2T0ZSNEZrSVBRRmFJTHhySkFPc0hzYy96bGZZRFdYRThxRjIyczhQejVLSHhjZ0VWQUxCdGpKWEJTU0VPd0ZoazFaZ3k0aGl0Q1Q0aFZ3K2dGczgvend4cUlCYlVneUs3ZmN5QTBQRDlYWDRpVnhoaUMweGRvZjZTVFdDc29CbUtGNytjVkNXRlhRWXlCTXhScGYrU1RYMWIweDQ1QWhOME9NU3JPR0VpcmhyWS9kZlFBZGp2UzdveStXQ0Y2cjFSSUZ4WFd2bFRSZzFZVnFGV0JteFpiRDk5aWc5cHQwWVBRdzlyRDFuc3RWcmk5VisvVmUzWHJTL3dmaW00UDVmSUZ4TG9BQUFBQVNVVk9SSzVDWUlJPVwiO1xuIl19