UNPKG

@esotericsoftware/spine-webgl

Version:
138 lines 44.8 kB
/****************************************************************************** * 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) { let isSafari = navigator.userAgent.indexOf("Safari") > -1; // Thank you Apple Inc. let 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)); let tempColor = this.tempColor; let renderer = this.renderer; let canvas = renderer.canvas; let gl = renderer.context.gl; renderer.resize(ResizeMode.Expand); renderer.camera.position.set(canvas.width / 2, canvas.height / 2, 0); renderer.batcher.setBlendMode(BlendMode.Normal, true); 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); this.spinner = new GLTexture(renderer.context, spinnerImage); } 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(); let renderer = this.renderer; renderer.batcher.setBlendMode(BlendMode.Normal, true); if (!this.logo) { this.logo = new GLTexture(renderer.context, logoImage); this.spinner = new GLTexture(renderer.context, spinnerImage); } 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); } } let SPINNER_DATA = "data:image/png;base64,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"; let SPINE_LOGO_DATA = "data:image/png;base64,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"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZGluZ1NjcmVlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Mb2FkaW5nU2NyZWVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUUvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYyxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBaUIsTUFBTSxvQkFBb0IsQ0FBQztBQUUvRCxJQUFJLFlBQThCLENBQUM7QUFDbkMsSUFBSSxTQUEyQixDQUFDO0FBQ2hDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUVmLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRSxVQUFVLEdBQUcsR0FBRyxFQUFFLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFFM0QsTUFBTSxPQUFPLGFBQWE7SUFDakIsUUFBUSxDQUFnQjtJQUN4QixJQUFJLEdBQXFCLElBQUksQ0FBQztJQUM5QixPQUFPLEdBQXFCLElBQUksQ0FBQztJQUNqQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNaLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDWCxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUN0QyxlQUFlLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFFaEMsWUFBYSxRQUF1QjtRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUV6QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEs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QUMsS0FBSyxDQUFDLENBQUM7SUFDOUosQ0FBQztDQUNEO0FBRUQsSUFBSSxZQUFZLEdBQUcsbzBIQUFvMEgsQ0FBQztBQUV4MUgsSUFBSSxlQUFlLEdBQUcsd3ZMQUF3dkwsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHsgQmxlbmRNb2RlLCBDb2xvciwgRGlzcG9zYWJsZSwgVGltZUtlZXBlciB9IGZyb20gXCJAZXNvdGVyaWNzb2Z0d2FyZS9zcGluZS1jb3JlXCI7XG5pbXBvcnQgeyBHTFRleHR1cmUgfSBmcm9tIFwiLi9HTFRleHR1cmUuanNcIjtcbmltcG9ydCB7IFJlc2l6ZU1vZGUsIFNjZW5lUmVuZGVyZXIgfSBmcm9tIFwiLi9TY2VuZVJlbmRlcmVyLmpzXCI7XG5cbmxldCBzcGlubmVySW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQ7XG5sZXQgbG9nb0ltYWdlOiBIVE1MSW1hZ2VFbGVtZW50O1xubGV0IGxvYWRlZCA9IDA7XG5cbmNvbnN0IEZBREVfSU4gPSAxLCBGQURFX09VVCA9IDE7XG5jb25zdCBsb2dvV2lkdGggPSAxNjUsIGxvZ29IZWlnaHQgPSAxMDgsIHNwaW5uZXJTaXplID0gMTYzO1xuXG5leHBvcnQgY2xhc3MgTG9hZGluZ1NjcmVlbiBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuXHRwcml2YXRlIHJlbmRlcmVyOiBTY2VuZVJlbmRlcmVyO1xuXHRwcml2YXRlIGxvZ286IEdMVGV4dHVyZSB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIHNwaW5uZXI6IEdMVGV4dHVyZSB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIGFuZ2xlID0gMDtcblx0cHJpdmF0ZSBmYWRlT3V0ID0gMDtcblx0cHJpdmF0ZSBmYWRlSW4gPSAwO1xuXHRwcml2YXRlIHRpbWVLZWVwZXIgPSBuZXcgVGltZUtlZXBlcigpO1xuXHRiYWNrZ3JvdW5kQ29sb3IgPSBuZXcgQ29sb3IoMC4xMzUsIDAuMTM1LCAwLjEzNSwgMSk7XG5cdHByaXZhdGUgdGVtcENvbG9yID0gbmV3IENvbG9yKCk7XG5cblx0Y29uc3RydWN0b3IgKHJlbmRlcmVyOiBTY2VuZVJlbmRlcmVyKSB7XG5cdFx0dGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG5cdFx0dGhpcy50aW1lS2VlcGVyLm1heERlbHRhID0gOTtcblxuXHRcdGlmICghbG9nb0ltYWdlKSB7XG5cdFx0XHRsZXQgaXNTYWZhcmkgPSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJTYWZhcmlcIikgPiAtMTsgLy8gVGhhbmsgeW91IEFwcGxlIEluYy5cblx0XHRcdGxldCBvbmxvYWQgPSAoKSA9PiBsb2FkZWQrKztcblxuXHRcdFx0bG9nb0ltYWdlID0gbmV3IEltYWdlKCk7XG5cdFx0XHRsb2dvSW1hZ2Uuc3JjID0gU1BJTkVfTE9HT19EQVRBO1xuXHRcdFx0aWYgKCFpc1NhZmFyaSkgbG9nb0ltYWdlLmNyb3NzT3JpZ2luID0gXCJhbm9ueW1vdXNcIjtcblx0XHRcdGxvZ29JbWFnZS5vbmxvYWQgPSBvbmxvYWQ7XG5cblx0XHRcdHNwaW5uZXJJbWFnZSA9IG5ldyBJbWFnZSgpO1xuXHRcdFx0c3Bpbm5lckltYWdlLnNyYyA9IFNQSU5ORVJfREFUQTtcblx0XHRcdGlmICghaXNTYWZhcmkpIHNwaW5uZXJJbWFnZS5jcm9zc09yaWdpbiA9IFwiYW5vbnltb3VzXCI7XG5cdFx0XHRzcGlubmVySW1hZ2Uub25sb2FkID0gb25sb2FkO1xuXHRcdH1cblx0fVxuXHRkaXNwb3NlICgpOiB2b2lkIHtcblx0XHR0aGlzLmxvZ28/LmRpc3Bvc2UoKTtcblx0XHR0aGlzLnNwaW5uZXI/LmRpc3Bvc2UoKTtcblx0fVxuXG5cdGRyYXcgKGNvbXBsZXRlID0gZmFsc2UpIHtcblx0XHRpZiAobG9hZGVkIDwgMiB8fCAoY29tcGxldGUgJiYgdGhpcy5mYWRlT3V0ID4gRkFERV9PVVQpKSByZXR1cm47XG5cblx0XHR0aGlzLnRpbWVLZWVwZXIudXBkYXRlKCk7XG5cdFx0bGV0IGEgPSBNYXRoLmFicyhNYXRoLnNpbih0aGlzLnRpbWVLZWVwZXIudG90YWxUaW1lICsgMC4yNSkpO1xuXHRcdHRoaXMuYW5nbGUgLT0gdGhpcy50aW1lS2VlcGVyLmRlbHRhICogMjAwICogKDEgKyAxLjUgKiBNYXRoLnBvdyhhLCA1KSk7XG5cblx0XHRsZXQgdGVtcENvbG9yID0gdGhpcy50ZW1wQ29sb3I7XG5cdFx0bGV0IHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcblx0XHRsZXQgY2FudmFzID0gcmVuZGVyZXIuY2FudmFzO1xuXHRcdGxldCBnbCA9IHJlbmRlcmVyLmNvbnRleHQuZ2w7XG5cblx0XHRyZW5kZXJlci5yZXNpemUoUmVzaXplTW9kZS5FeHBhbmQpO1xuXHRcdHJlbmRlcmVyLmNhbWVyYS5wb3NpdGlvbi5zZXQoY2FudmFzLndpZHRoIC8gMiwgY2FudmFzLmhlaWdodCAvIDIsIDApO1xuXHRcdHJlbmRlcmVyLmJhdGNoZXIuc2V0QmxlbmRNb2RlKEJsZW5kTW9kZS5Ob3JtYWwsIHRydWUpO1xuXG5cdFx0aWYgKGNvbXBsZXRlKSB7XG5cdFx0XHR0aGlzLmZhZGVPdXQgKz0gdGhpcy50aW1lS2VlcGVyLmRlbHRhICogKHRoaXMudGltZUtlZXBlci50b3RhbFRpbWUgPCAxID8gMiA6IDEpO1xuXHRcdFx0aWYgKHRoaXMuZmFkZU91dCA+IEZBREVfT1VUKSByZXR1cm47XG5cdFx0XHR0ZW1wQ29sb3Iuc2V0RnJvbUNvbG9yKHRoaXMuYmFja2dyb3VuZENvbG9yKTtcblx0XHRcdGEgPSAxIC0gdGhpcy5mYWRlT3V0IC8gRkFERV9PVVQ7XG5cdFx0XHRhID0gMSAtIChhIC0gMSkgKiAoYSAtIDEpO1xuXHRcdFx0dGVtcENvbG9yLmEgKj0gYTtcblx0XHRcdGlmICh0ZW1wQ29sb3IuYSA+IDApIHtcblx0XHRcdFx0cmVuZGVyZXIuY2FtZXJhLnpvb20gPSAxO1xuXHRcdFx0XHRyZW5kZXJlci5iZWdpbigpO1xuXHRcdFx0XHRyZW5kZXJlci5xdWFkKHRydWUsIDAsIDAsIGNhbnZhcy53aWR0aCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0LCAwLCBjYW52YXMuaGVpZ2h0LFxuXHRcdFx0XHRcdHRlbXBDb2xvciwgdGVtcENvbG9yLCB0ZW1wQ29sb3IsIHRlbXBDb2xvcik7XG5cdFx0XHRcdHJlbmRlcmVyLmVuZCgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZhZGVJbiArPSB0aGlzLnRpbWVLZWVwZXIuZGVsdGE7XG5cdFx0XHRpZiAodGhpcy5iYWNrZ3JvdW5kQ29sb3IuYSA+IDApIHtcblx0XHRcdFx0Z2wuY2xlYXJDb2xvcih0aGlzLmJhY2tncm91bmRDb2xvci5yLCB0aGlzLmJhY2tncm91bmRDb2xvci5nLCB0aGlzLmJhY2tncm91bmRDb2xvci5iLCB0aGlzLmJhY2tncm91bmRDb2xvci5hKTtcblx0XHRcdFx0Z2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG5cdFx0XHR9XG5cdFx0XHRhID0gMTtcblx0XHR9XG5cdFx0YSAqPSBNYXRoLm1pbih0aGlzLmZhZGVJbiAvIEZBREVfSU4sIDEpO1xuXHRcdHRlbXBDb2xvci5zZXQoYSwgYSwgYSwgYSk7XG5cblx0XHRpZiAoIXRoaXMubG9nbykge1xuXHRcdFx0dGhpcy5sb2dvID0gbmV3IEdMVGV4dHVyZShyZW5kZXJlci5jb250ZXh0LCBsb2dvSW1hZ2UpO1xuXHRcdFx0dGhpcy5zcGlubmVyID0gbmV3IEdMVGV4dHVyZShyZW5kZXJlci5jb250ZXh0LCBzcGlubmVySW1hZ2UpO1xuXHRcdH1cblx0XHRyZW5kZXJlci5jYW1lcmEuem9vbSA9IE1hdGgubWF4KDEsIHNwaW5uZXJTaXplIC8gY2FudmFzLmhlaWdodCk7XG5cdFx0cmVuZGVyZXIuYmVnaW4oKTtcblx0XHRyZW5kZXJlci5kcmF3VGV4dHVyZSh0aGlzLmxvZ28sIChjYW52YXMud2lkdGggLSBsb2dvV2lkdGgpIC8gMiwgKGNhbnZhcy5oZWlnaHQgLSBsb2dvSGVpZ2h0KSAvIDIsIGxvZ29XaWR0aCwgbG9nb0hlaWdodCwgdGVtcENvbG9yKTtcblx0XHRpZiAodGhpcy5zcGlubmVyKSByZW5kZXJlci5kcmF3VGV4dHVyZVJvdGF0ZWQodGhpcy5zcGlubmVyLCAoY2FudmFzLndpZHRoIC0gc3Bpbm5lclNpemUpIC8gMiwgKGNhbnZhcy5oZWlnaHQgLSBzcGlubmVyU2l6ZSkgLyAyLCBzcGlubmVyU2l6ZSwgc3Bpbm5lclNpemUsIHNwaW5uZXJTaXplIC8gMiwgc3Bpbm5lclNpemUgLyAyLCB0aGlzLmFuZ2xlLCB0ZW1wQ29sb3IpO1xuXHRcdHJlbmRlcmVyLmVuZCgpO1xuXHR9XG5cblx0ZHJhd0luQ29vcmRpbmF0ZXMgKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG5cdFx0aWYgKGxvYWRlZCA8IDIpIHJldHVybjtcblxuXHRcdHRoaXMudGltZUtlZXBlci51cGRhdGUoKTtcblx0XHRsZXQgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xuXHRcdHJlbmRlcmVyLmJhdGNoZXIuc2V0QmxlbmRNb2RlKEJsZW5kTW9kZS5Ob3JtYWwsIHRydWUpO1xuXG5cdFx0aWYgKCF0aGlzLmxvZ28pIHtcblx0XHRcdHRoaXMubG9nbyA9IG5ldyBHTFRleHR1cmUocmVuZGVyZXIuY29udGV4dCwgbG9nb0ltYWdlKTtcblx0XHRcdHRoaXMuc3Bpbm5lciA9IG5ldyBHTFRleHR1cmUocmVuZGVyZXIuY29udGV4dCwgc3Bpbm5lckltYWdlKTtcblx0XHR9XG5cblx0XHRjb25zdCBzaGlmdGVkWCA9IHggLSBsb2dvV2lkdGggLyAyO1xuXHRcdGNvbnN0IHNoaWZ0ZWRZID0geSAtIGxvZ29IZWlnaHQgLyAyO1xuXHRcdHJlbmRlcmVyLmRyYXdUZXh0dXJlKHRoaXMubG9nbywgc2hpZnRlZFgsIHNoaWZ0ZWRZLCBsb2dvV2lkdGgsIGxvZ29IZWlnaHQpO1xuXG5cdFx0dGhpcy5hbmdsZSAtPSB0aGlzLnRpbWVLZWVwZXIuZGVsdGEgKiA1MDA7XG5cdFx0aWYgKHRoaXMuc3Bpbm5lcikgcmVuZGVyZXIuZHJhd1RleHR1cmVSb3RhdGVkKHRoaXMuc3Bpbm5lciwgc2hpZnRlZFgsIHNoaWZ0ZWRZIC0gMjUsIHNwaW5uZXJTaXplLCBzcGlubmVyU2l6ZSwgc3Bpbm5lclNpemUgLyAyLCBzcGlubmVyU2l6ZSAvIDIsIHRoaXMuYW5nbGUpO1xuXHR9XG59XG5cbmxldCBTUElOTkVSX0RBVEEgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBS01BQUFDakNBWUFBQURtYks2QUFBQUxLRWxFUVZSNDJ1MmRlMmlXNVIvR1B6dXFjd2ZubktmTm1hZmw1dFROSFd6cU5pM0RFTVF5a2NBb0pTc3lTa3NwalNJazBpRC8wN0tmNFIrRm5WQkRVVHNoWkdwV1VFSmFhaVdGZ1psVUZtWG1JZTNITlh0aHllYmVaNzdQOUgxM2ZmQkc4WThIN3V0N3ZmZjkzTi83ZnU0dkdHUGlGWmllei9RdHc5bHl0SmFqZnpmdzl6L2orZWZQT3Y3Y1Y4VytsVU5ZMmE4VC9heVRDUnNXRkxKQTVydFVPMUxMa1Y1cDlMSmVKaXpRaUhlcW5sT3RtVkZ0ZFRHcnJaa0pDeFlYc1RnYUk2cjlNWTQvVXBOSXRXNG1GRGFYc1RsYU02cVZabEJxM1V3b2ZGckpwMEhNV0o5RHZYVXpvYkN6bkoxQnpGaldsVExyWmtKaC9URFdCekZqVGdvNTFzMkVnbktJMFJyeCtGaU9Xek56VmF5bTkxU3l4NXFac0dCV2IyWkZhMFpONmRiTWhBV1RjcGtVclJtWEQySzVOVE5oZ1ZiSDBacHhibC9tV2pNVEZ2UklvMGUwWnB6Y25jbld6SVNLdHZtaU1XTlJKNHFzbHdtVlhSWHNhczJJeDhad3pGcVpzR0ZSRVl0YU0rT2FhMWxqclV6WWtKOUcvb2s2VGx6S2pKV1pWRm9yMHk3YzFadTdXakxpcWlHc3NrYW1YZEhvcHlUNHZBTG16UzlrL3QxOXVIdEtIbE9TSU1uNnhBdEFSaklaMXNGY1VTWjBZNExhK0c2TTE4aFMySWxDbjRhK1dvQzBKTkwwZC9kVXVwZG5VajQwZzZFSjJWRWRNbmhyT0cvcDVmL2pVWHo4U2dtdmFHVTZLcE5STnNMVlFWME9kWGYyNHM2M2gvUDJnV29PckJqTUNyMkdKRlFubnhuSU0zcTVQMVBQbWFZdis0ZXY0L0M2VXRicFYyZ3pYQ2tnTDVXOEJ3dDQ4T0ljNnVsNlRwK3M0K1N5QVN4TGlJNCtQWUNuMWJIekRaeHZhUVc2dlp6dG83TVluUUlwTmtmN2twNUV1b3pZVXJvcUVqY05LSEhkMFRsOW1CUE4xcGsraEZlaWVHQm5CdG9nN1VYanNqOXBXZyttNmR1ZWN3MmNheTFPQy91eE1DNDdLbVA5T0lZZm96MVlvQzIwSi9yelJHNHF1VFpLMkVBeUpHczIwcXdVYll3MGFOUm1VeHR2ZlVXL3VFdE56YzFOQjEvWDhMVnlkMTVoaDgyRjQzQXZEK1ZsWGNzU0pFWmExQ1EzZWpsZUFPN294UjNSRFAwWE45MVg0K05YWWI4bmt2N1VOVHdWN2UwWVRkdTdJM2czM3Q3dHVhRWJOd1NacHBzMmZTeXZzNE0yVGpob3QramIwWHpibHRqOHI1ai94VnQvNloxT2I5M1UxWllPNjkxRWhoemNoY0hlWG9zVmpjTlp5c3llekx3NHhSWnQwNVIrZlRldWo4dk9qK3pLeUcwajJhWmNWVnM2ditRYWxuanJNRlpBU1FZbDJuQm9TeXowNmUzai9YazhyZ1dZbU12RUlDdTJwbTFIT1R1Yzdva1Y4RmdSajBYdWt3emFuaHZDYy9GKzcyVGpvUWpkT2JOMU9GdURMbWgweFArV0h0eGlJMTB1a0psQ3ByYjRndWl2MWZQK2F2WnJTMUM3TkFrbGlIWmpEdFp3TU1ncWJ1a0FsdHBNbHd1TXkyRmNFQlBxdmZMTGFyNVVxaTBoQmRFd3J5eStNdjVuNnprYmpUQmErZGxNbHd2VVpGRVRaS0dpRk03dHZiaGRKM2dTVlJPMHd6SWpueG12bC9KNmE2SnNHTVlHcmFodHBzc0ZlcWJSODQxUzNtaE44ME9qT2FTREVkcWQ2U2phTUtnemd6Uks3cTFpYjNQVDlzWXlObzdKWm95TkZOdlJjVk1abXk3V092SXVyeXYvWnZkbWR0OTArblkwYlJwM0F2Uk9vaEZ3ZHdXN2RURzdSRmxid2xxZHJiT0JZZzAwNU5BUW1aVTBIV3QxclhNQkgxWHcwZFE4cG1xem9hUG1kaHVuN2JIWmpOVmU5cVA5ZUZRZk8xVmtVbUhqaEFWVVoxR3RuS0ZTYmpya3JQZnk0aTRVVzV0LzZaeE01NEowQ3F4RmU4MUtwR3NReUU0aDIzb1lZNHd4eGhoampESEdHR09NTWNZWVk0d3h4aGhqakRIR0dHT01NY1lZWTR3eHhoaGpqREhHR0dPTU1jWVlZNHd4eGhoampMbmErYmRPeStJaUZxdUlwR3ExNlBiNzljTll2M0lJSy9YL3VneCtVaTZUVkt2WVZVOU5jOGdYOG9kOElyL0lOL0tQZkNRL3lWZnlsLzYvcGZKdkxDaGtRZEQ2d3lxbnRxdUNYWXVLV0pTZlJyNkQwZEVBeFYzeGx3L2toeUQra2Qva3UvODhjSG8rMDl0UzNMQnBPMUhIQ1ZVcWNJQTZDcUI0Sys2WDZ4MzVML0pNMmxvWHVybFdtVW1sQTVYb2dPSWNLOC9JZjVIbmNyU1dvN0Y2Y0tJV1BqVC9SWEdPbFdma3Y4aHphV3NONHVhYXlzRTZXSWtPS002eDhvejhGM2t1c1hxbzJ2eEM1anRZaVE0b3pySDBUZVM1cUlaY3JCN3FrcndkQThVNVZwNlIveUxQWlY4VisyTDE0Q2w1VEhHd0VoMVFuR1BsR2ZrdjhseVVsSXpGUTFjTllWVkhyY2paMFZDY0ZlOVkrRWIraXp5M2NlY2xVbDQzYUZONTJEWFhzc1lwblk2YTRxRlM4WmNQMnVJZitlN2luUmg2cGRGcmRUR3JtOHVpSHgvTDhUMlY3TkdXenZKQkxKL2JsN21UdXpPNXFCTkZEb2lKSUQvSUYvS0hmQ0sveURmeVQzTzdkL0tiZk5mUzgwaE5JclUwZzlMNkhPcTF4NWlUUW82Rk5wZUxmQ1EveVZmeWwzeG1YWXd4eGhoampESEdHR09NTWNZWVk0d3h4aGhqakRIR0dHT01NY1lZWTR3eHhoaGpqREhHR0dPTU1jWVlZNHd4eGhoampESE5rOXo0SndKMFNxS1RkUWtieUV3aFUzOTNUNlY3enpSNnBpZVIzdEUxSVRlVlhJbWhlNkJYREdaRmRSYlZlYW5rMlRCaGNhRU1yMHJ3Yml4ajQ5SUJMTDIvTC9mZm1NdU5IZnFPOXRGWmpKWUJkMWV3TzNMeCtJY1ZmS2hxbmE1bkhaWVI2WEZQSCs1UjNlZUk1dDlmeC9mdmplQzlKZGV3NU9LWktxRlIvUkRWS0w2dkwvZjlQSmFmbXl2SHNMK2EvZmYyNFY2Tm1qWlFiR2NoVmJZNlVNMkJsdXFIdjFyQ3F6VloxS1Fsa1pib2VwQ2RRdmFjUHN6NWJqVGZYYW8reU1FYUR0N1drOXRTSU1WR2lnM1RlakN0SlNNMmJTcGtQaldQcWQxUzZaYW8rbE9SU1lXbWdrT2pPUlJOd1pxZDVlek1TaUhMUm9vTnI1WHdXalM2LzFYSFg5dkwyVDY3TjdNMWl5WGE5SkNyWWpWclMxZ2JwSnl3NmhCZnNtaU5DWVQwUDkvQStXajEvNnFHcjVZTllGbEpCaVdKb2dFemV6THovWkc4LzlzNGZndFN5dXZOWWJ5cDFJT05GQnR1N3NITnY0L2o5eUF4VUhXcmRhV3NHOStOOFhIZCtZeGtNcFN5K2F5U3o4NDFjQzVvWGJtSENubkk3NHl4QWdaM1liRGVCNFBFUUNPcEJwRk5aV3dhMlpXUmNkbnhMc2wwMGNydFJCMG4ybExnOEpOUmZES29NNE5zb2xnQlNtdy9VTUFEYmExK3FwbXFmeWY2eDF1LzBhL29nM0krYUV1blA2L2k4Nm9zcW15Z2NHYXJGNHA1NGRleC9CbzBMcWZxT2ZWd0lRL0hXNS9SU2t3VjFvTjJXTGxIVGM4MlRsakF3TTRNMU81TFd3WUtaVGppYllYTlMwTjVLY2pLVGUxMFBhZGZMT2JGdUp3SzRvenArVXpYREJUVWpMK001WmNCblJrUVY1M2RNSXdOUVR1NmJTVGJWRXpiaTVhd3VWQnlkMkUvRmdhTjBUYzFmS096QkhIVjJhQWRWU2R2NnM1Tk5rcDdjU0gvKyt4QW5nMnl5SHgrQ00vSDIxWWhmZFBwKzBVMVgwVGJTWm5YeDhmYUc5QW9wME1TMGNUb2gxcCtpTGNwT2tMajl0L0pPazVlcW9QSHhuRHN5ZjQ4NmFuNXlxQ0RLN1haMU80b1o0ZFd5eTNGU1hIVUFZcTQ3dXlZYk1ab0dtaHBHM0RsRUZiNnVOaVZCaHB5YUhobkJPOG9KbWZxT1JPSmp6SWlQNDNoSjhVeElUcXFYNTZTMkh1cjJLc09ucTNuckU2UFBOS1BSd3JTS2JBWnJqVFFOWm11RTdveFlYTVpteFdidzlkeFdGdTRXNGV6VmVkT0U2cXpJN295WWtZK003VFBlV3NQYmsyVVgxcWlvU04rRTNPWnFPUjJjUmVLRStxUVJGTjBQaTd5NzNnL1Vhd1UxS3plekpwWHdMejVoY3pYMXVlVVBLWWtOYjZHSlFaK2o3L2FBZlJaUkVzditxdUdzTW9hbVhaQlcyR3Q1ZVUwYWxvckV6WXNLbUpSYS9tNE5kZXl4bHFac0NHYTg0REtuVm9yRXpib0M3cG9kaXM2OURmSUptd3VmSE1jN2ZhbXZ2bXhaaVlzS090S1diUm0xT2NXMXN5RUJib1NKRm96TGgvRWNtdG13Z0lsdWFNMTQvcGhyTGRtSml4WVhNVGlhTTI0cDVJOTFzeUVCVHBoRk9SN1kydG13Z0pOdlVGT3IrdG92M1V6b2FBdjQ0S1lVYXR2NjJaQ29lbWRodEcwK2h6cXJac0pCUjA4RFdMRzBneEtyWnU1MHF2cHhvczNVNU5JdFc0bUZQcDFvdCtsUGxwcTJsWVhzOXFhbVZCWlVNaUMxb3g0cEpZanZsZlN0QXU2R21UTGNMYm9NdFBJVjQvNmltNWZGZnVVaTlRSWFwMk1pV1ArRDk2UjF2UG1zRC9mQUFBQUFFbEZUa1N1UW1DQ1wiO1xuXG5sZXQgU1BJTkVfTE9HT19EQVRBID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUtVQUFBQnNDQVlBQUFBTHpIS21BQUFRN2tsRVFWUjQydTNkYTR4ZFZSVUE0RDB6ZDJZNm5aWTU5RFZ0WjFwdVM5K2x6QzBZQWkyVVE4QUFRY3pGcFBnQTlWSWVJUWJpclJxSjBjQlVCVkdqRHIvUUNLU05SU01tcHVPRHhBZHhxaGd3eGtoRmpmNlN4aC8rVVVOVk5HSkN6Ujd1VHZhczdMWFgycTl6enAzZW02eTBnVE4zWnU3NXV0WmU1K3l6dHhDOVYrL1ZlNVg5RW4xVmpkN0o2U0ZiTE5GN25hUHcrbDJqaDdZSE1CV3NzcU1IdGxzUmRpbTRxc0x0SWF3YVBpSEVRT0xvTnJBOWlJa1FEblJyVkExcUQyTFo4SVNveFlxS28xM3NRQXRCV0JheVFXWlVBWEdSUU05SmpDbmdEVlkwVXFKTkRiUXJNY2FHbUFyZFVLcElqYllpUUxzQ1pDeUlNUUJ5OFF3bmlsUjRRNUF1Q3B4Rll2UkZtQkxiRWl3S3dwc1NhV3ljVlFHWkJLTXJ3QmpBOUJoeERlNTd1MkwyaE9vS05DYk9yZ0FaaXRFVllVeG9LU01FclF2U3hZSXpDa2d1Umc1RUY0QVVocVVsaHkvWVVLU3hjUmFLc2lvWU9RaEQ0STB5WXhrUjNQY0pCY3VGeXNtZ3NYQVdCVE1KeUJDTUlRaDlrR0d4WElYdmV4Q1FYYkhHQU1yQldUYk0yQ0NwTVNNTEl4ZWhDNzdsU0p3WEd0aDdNMEZ6b1ZKSVhYRFdRbkdtaE9rTDBpYzdZaGh0V2RHR2tBdVBBalVXR29GNGZhQ213QmtiWm15VXFVQ3lNcU1MUkE0K0U2SXNkVGppZFVIS0JZcmg5Q25wUmNIMHlwS3hzeU9HRVlOSUllVENPejkxT0lKMVFZb0I1ZUFNeVpvK01GTm55VlRaMFlpUkM5RUdFTU95QWdzaHhFckhzTDJYSzFnT1Vnd29odE0xYTVZTk03UnN1NEswWmtjYlJtNG1wUEJSd0ZaNWhnOWVDcWtyVUIrY3NXR0dvZ3pOa3FFZ3JkblJocEdMa0lOdWRhTGd3dlZCNm9xekNqQ1RaRWxiMlk0QjBnVWpCdEVHMEFSbkRSTGpqb0c5RHdjc2h0UUdsSVBUbGpWandVeVNMV05reVJDUVZIYTBaVVVUUkF3Z0Y5MWEzM0JFeTBWS0FjVnd3cXdaQzJicWJPbFV1cmxsT3hRa0p6TnlJTm9BWXFqV2hZWWpXZzVTQ2lpRzA1UTFVOEZNalRJb1M4WUU2WU9SaTFCSHRKNEtJY1FFRXRUWFVXQXhwSzQ0WVZsUEJkTzFqQ2RGV1RaSUU4YlZHRVlNSVJQY1pHQnc0SEtRY29CaU9FMVpNemJNZ1ZRd1U2Sk1BZEtFRWN1SUpvZ1V2ZzFZQ0NFMmdzQ080MkRsSUlWQUtad3BZSmFTTFZOblNVNlhqWUhVbXhoVG1YYUZhTU8zRVlrTHFNQytGc0xsSW9WQUtaek1yRW5CaEplTGZMTmxLTXJZV1JJRENiT2tGU1NWSGJITTZBS1JDNi9PRFVld05xUStPTGxaa3hwalVtVjhNQmJNVUpTeHl6WTNRMUlnVFJneGlCUkNIZGVtMEtEQVVrQmg5c1J3d2pFbkFYTU1nVG5LaEZsVXRpd2tTNXJHa2E0ZzlTYUdneEZtUkM3QXpUQ0VFQmN5QTM2ZERTc1hxQXRPTGt5c2pHTXdZNVh4VkNoalowa3VTQ283WWxrUlFzUVFZdERFRnNlZ3NMb0N4VXA3S3BncHMyVXNsRkd6SkdjY1NZSFVteGhPWnF3ekVacUFiZlVNQ2lzSEtJWnpnc0NwbDNNVHpNd1RwaTFiWXAyNDc3Z3lGS1V4UzdxV2JkalkyRUJTMmRHRTBRUVJBN2dOQ3lIRWRoakU4UmhVRGxCVDl0emdtaldaTUZObFN5K1VyazFPekN5SmxXMFhrSzRZT1FoMWNEdGNnd0JyUW1vRFdrZGdib0JaRThtWXNKU0hsbkZiSis1YndtT1BKN2xaa2lyYkM4YVJzTXZtZ3RUSGpCaEdFMFFid0oyZWdVRTFJVFZsVUM1T21EVmRZTnJLdU43MHhNNldvU2hqbFc0NDY0ZGJ0aUZJV0s2eDdHakVTRUhVVWUwaVluY25iTWRRU0UwWjFJVFROT2IwaFJtampMdG1TOWRtSjJycDFqdHVLa3R5eXJiNllMRU1DVUhxMmRHRzBRUVJRN2Y3Mmt6YytjSmVjZXJuZThXdnY3Sk5QSFB2ZW5Fa3o4U2gzVXRGYzkyUXlHdDlZa28vSGdPTEFJVVpsSXRUejVvdU1GM0t1RSsyakZMQ1ExRDZsbTZmTE1rQmFjdU9Kb3dZUkJVWHlmanVIakYzTmhkbnNmanZBZkg2RTl2RnQ5WHhLZ2lrRUtnSlp5eVlhbHpPTGVNdTJiTGJVTEk2YmgrUUd3bVErcmdSbHVtZEdFUUFhbytLNTZiRUwyd29WVXdPaWV2MHI4T0FVamlKck1tRkNidnlrR3haUkFtUGl0SzFkSE03Ym9oeU1zdXlpL0k4ZjArZTU3ZkpZSUtFWlhwWG85RTRtT2Y1WFRLeUxMdkNCTEVURjh1WTJTS2Vwa0MrZHBYNFQwMkl2ZXByNEh2WmNPWjVmbWVlNTRmeVBMK0RtVFVoekFzNm40bjhiTjVkcjlmM1lka1NnOG5zeEcwbFBCVktWcE5qRzAvYUdoemZMRG1SWmRudW1abVpwOCtjK2NkWlBWNTU1ZlNyN1hiN3MwakozaTVQY3VlNE14S2tQUGt2dlhUcXovQjkydTMybDB3WU96RzFma2hjZC9weThSY2J5cS92Rk0vS1kxV0E5NWgvM3p6UDcxYmZVNkpzTnBzZmdqK1AvRmxicmRhREdFeFl5dVh2THo4SCtEdWRPREg3MDBhamNTTTNXNll1NGFsUTFzcENPVGQzOGpjS29jVFpiaDkrOU5peFk5OVhKOEFFVWtjcG85VzY0eUgxOTdtNWs3K2JuWjE5UVQrSjA5TkhudFFod2ppL0pnNThxaTYrK29mTHhKOGdTRm5lVncyS2E0UVFEZmgxT2s0ZFphdlZtdFovbnJtNWs3L1ZmNTVPMXRSaGJvVXc1K1pPdnF5T2w1K1IvRnlPSGozMlBZVlUvdGxvTkc1SVhjS3JoSkl6bmd3cDNmTmpvbWF6ZWEvNjRCdU54dHM2NDZmNTBsV3YxNjl1dHc5L0RtdHFkSlF5WkZhU0pWdVY2bnE5ZnFNRW9mNS92VjYvQ1lCcWdKRGxlZSt5QWJGLys0aTRaV3FaZU5mYUlmSFd6bitIeDBLY0V1VTkrczhqdjNlajBiaFZsWE9aeWRYL2swaVJNZWI4UDBENWU2dGo4enkvWGI5VUpJYzU2aC95cVZPblh1bDhsbXVaMmJKc2xLbWJIRzdYcmJwQ21DWEZSTHZkZnFRRDZqVFMzSml5NUk0T3lrTTZBRFYrMUV1MURtVjZldm9wQk9SZXh6RGkxTCtYL0huR3hzYjJ3M0htOVBTUko5UXhXUE9UWmRtbEtodDJoaSt3NmRrb3g1YnFmZkk4ZnllM2hEdGVHcUthSFZzSFhpaEtsMHRCK2gwY1krbHV0ZTU0QUdSS0RDVzg5TE5UUnluSGI3Q2hVV1ZWamV0T25KaDlFWUJVeVBaZU5Db090c2JGUXdkWGk0L2VzRUxjZCt0cThjQ0hKOFVYcCt2aXk5ZWZMejdBZ2FtamxLWGMxQUExbTgzRG9JUkRsRnViemViOTZoaFpMVlRsZ0oyNGd0dHV0eCtPTmE1MGJIWktSZW5hZVRzMU9mcEFmbnI2eU9PZEU3RVpkTndtbEtvY250WExOa0E1SlRHcTQ3RHMrTGY5NGxXc3lmblhsZUxmbkl3SlVONERPbk5Zd3VVeGgyQTNMbjlYVUxyZks4dDNKMjdUdTNCVndpT2pYSnFvQXk4VVplajF5Y2xHbzNHVExOK2d1M3crei9QM1lhV2JRcWszTmUxMmU0WkMrYzhyeFdzWXl0Y1BpUDlScFp4Q3FXREtueE9pQk5seUFVcE9uR3NvaDR0QTJSbThYOXhxdFQ2bWQ1d3labVllKzBZUktMKzFTL3dZUTNuOHpjdEJsNVNCVXY1ZGppdmZqTU9QZHVJemNpemVpWWZyOWZvVnZVd1pHK1hDdXppYlpLblNjZVo1L3Y0UWxLcDh5N0VsaG5KbFRlVFA3Qkkva2xsUllmenJmdkhxRnk0VVgxdmFML2FWbFNtUk96d2J3ZFMyOVQyVWNFd1pGK1Y4b3pNMmx1MVZZODEydS8xNWFreXBHaDNUbUZKZXNKYkhIRDE2N0lkVXh6M1lKeTViTnlTdVgxbWJ2eTU1Q2JNTHR6VTZ0akdsc2RGcHRWcWZVTWMwR28yM0Y0d3kxbDJkU25iZnZwTXdWUGU5V1dWTERzck9KYUY5TUZ1MldxMVBxbU5rR2NlNjd4aVhoVGpkTndkbHZWNi9CZ3hmYlBmQmZWQ2V0eGk2YjkvcmxDdXA2NVF6TTQ4ZGwyT2pMTXYyNkNpYnplWjk2c1RJekVGZHB3UVh6OVUxeXJ0VmxwUi9abGwyRmVjNjVZNmw0cGJieDhYSEg5a2tudnpKbFBqbEh5OFRwMjllS1Q1b3UwYUpvSVQzdzNkQmxMRHpWcGZBSkVaMVhPZGFKWnhuT1NsdlBNalB6eEZsakl2bmc5MTRSd2Vic2pZTzd1aE15SHU0NnNPZm5mM096MlRYRFc2dnZZeGRGb0lYejNXYzhKNXpzOW44aU9uMklyeFRjMkJNM0dscWRwN2RJNTUzdWFPanhyaHdjb2IrTXl1VXBqczZXWlpkb244T2NpZ2pQeDhWK3UrR1RXRlRTV0V4M1dZY2RKMjI1ak5EU0U0cTBHSEN6bHVlSE95dWpuNmJVV1lnZWI5WlpVYVFQZStHelErR2M4K29PR2hDK2MxZDRnZkkxNm4zWERBaFE3KzlxRTlsMDFFMkdvMTMyR1lLeVhFMU5pRkRUY3BvTnB2M0xPWUpHV1hORXJKTlc5c0VwNjNwMlJLaVZQTW4xYlMxRGd4c3lob0dkR3BtaXpqK3h0WGlEWW54Ny92Rm1jZTNpV2RXMWNUVkdFWTRoUTJaVzBuTnE4UW0vTTZYYlhtM1MxMDBsd0dlZEZ5YnV2Tk9pYkxJK1pTMmNlVTRlQXhpRXV2Q2tmbVU4eWNUb0R4RVRlNkZnQ0JRSGVxeUFiRnZmRWhjTzdCd0R1WEZDRWJUWkY4NDBYZUhLMGpZY2JzMk9JR2xlMG1WSi9tbW5DbEVQUXF4eVRZNUk4L3pGaGlmN2ZTWmVlNGJuclBPVTRBc3NuUlhIYVZUQ1RkMTRkUkRZM1ViVElpU2VGaHNOL2FNamducXRoRng4ODByeFgzeUFUTDVwM3k0TFBYek9hQmtVeUJqWk1sWXBidFFsSU9CRDQ3NVpFdXNqTU5TdmtYZTZWRW9KVkRrZVoyZHpJZklGc1J6VStKRjJPeU05TTlmVEMvNlNVWU95RlFQalEybldpVWp4blBmdzVFZUhxTVdJcUFlSUZzQVU4NDdsSk0ySk02eHNld3QxT0lETHM5OVA3WkZITmRCL3VwUzhYdFBpRDdQZkx1Q1hKTm9sWXl5RmlOSS9aaXQ2NUl0ck9WYWZGYkhjRm9oWTdoUFROMjFUano0dWMzaXFmc254S2RYMU1UbDFPb1lSRmFNc1RvR0I2VHJ3MkpGUC9PZFpDMmhKWjdaa3JNb0FiYlNHbWVsREo5MWhGS3VKZVM3amxCTWtKbnJBcXFKbGdNVVpTL2RBclBsR0hOZFNnNU0zeFhYdHZxdXVFYXR2SVl0RFJocHhiVUp1SWdxc1U1bEdXdFVwbG9LMEt1RVU5bVNXOFlwbUZRNTU2eE51WVc3TmlXMTNCK0ZrTWlLSEl5K0M2ZUdnQnhKdk1SMG9TdjVoaTYrejRISnlab1UwTTJSVnZEbHJPUWJjeFZmWDVBaFpidXF5MHY3WnN0WU1MSGxBVmxMVEY5QUxMYnZ1OVk1WnlscG4vWE9zZDBpYkl2eHIyS0NMSHBwNlNDVUlkblNaU0YrV3pmT2hlbTZHRCsxS3dSM1o0ak5qcnREcE5vWndtV2Q4eXJ1cFpONkh4M2ZiTW1GU2UwU3dkcTJaSVBqeGsxMTEyRHVvOE9CR0xyQmt3L0lvbmNkSzJYSHNkQzlkSHoyMDRtNTB4aDN0ekZxMXpGcXR6SFhyZkN3N09nRHNxeU5uWkxzelZpanNtWGdybU5jbUd0Uzc4bElvTVgyYUp6MDNmS08yc0RKZGRQUVNDRFBpUTFEZldCeWNZNlh0WHN0YzJQUUt1eGdHMk1jbVhUUGI5Lzl2bXVKWVhLeUpyV2piZWcrM3hQTTRPNzNuV3F2Ynl3N3hnWlpTSmJFVUJhMTU3Y05KamRyMnZiKzVpQTFZVjNIeFlzY2ozMFBEQ0VISWdjanRmbThLOGhTc21Sb3Rrd0ZrNXMxVFRnaFVBb3BCNnhyakhNQkJrSTBZWVRaMGRabHh3THBraVdEVUxwbXk1Z3dxYXlaZ1pOa0E3b0tRUUN4Y3RCeVlnMFhJSUVRUXVSaXRHVkhibE1UQTJTaEtHUERwQzZ3dStERWdKcWcyckRHREJ0QUY0UTZSQW9qcDF4WEdtU01iSW1WY1IrWVdOWTA0ZVFDdFVHMW9mVUoyL3V2Y0VUSWdVaGhkQUU1R0Fsa0tTaGp3SFRObWhoT0RLZ0pxUTJzQzE0dU9neWZEMEliUkYrTWxRYVpBaVpXeW4yeUpzVEpBVHFHbkhRTzJKaGgreGxzQUNGQ0cwUWJSdGR5elFGWkNaU3hZUHBtVFM3UTVjakpIWU5CWUlrWnB1OTlIb1VRL280UUlZU0laVVpmako0Wk1qWkkzMndaQkRNVTV5aHk4cFpUVUxsNFhZUDVmYWdNeUVWb3k0b3VwVHBHZHV3bmtsb1NsS0V3WStBY1FVNE1oUlRENm92WEJSd0Z6d1dnQ1NFRjBRVmpKVUdtZ0VsbFRTNU9MbENJbElOMW1TOW14L2NaNWVMREFMcENUSTJSQWhrVFpRcVlvVGdwb0NQRUNiYUJIUTJFVEwzUFVsOThFQ0FYWWlqRzBPeVlBbVFvVEc3VzVPRGtBRjFDblZnbTJKUXg0b2tQQStnQ01UYkdza0JHZ1JtYU9ibEFoNUdUT1JJcmZLRng0Vkg0RUlBeElYSXhsZzJTQmJNdkVDWTNlN29BcGJEYUlnUXU1LzJIbWVFS0VJTllpd1NSaTdFUWtMRmd1bVpPQ3VnZ2N0S0dJNFVMWk4vdk1lU0xqMEFZTXl0V0VxTUx6Rmc0ZllEYW9LYUM2d3ZPRlI0RmtJUFFGYUlMeHJKQU9zSHNjL3psZllEV1hFOHFGMjJzOFB6NUtIeGNnRVZBTEJ0akpYQlNTRU93RmhrMVpneTRoaXRDVDRoVncrZ0ZzOC96d3hxSUJiVWd5SzdmY3lBMFBEOVhYNGlWeGhpQzB4ZG9mNlNUV0Nzb0JtS0Y3K2NWQ1dGWFFZeUJNeFJwZitTVFgxYjB4NDVBaE4wT01Tck9HRWlyaHJZL2RmUUFkanZTN295K1dDRjZyMVJJRnhYV3ZsVFJnMVlWcUZXQm14WmJEOTlpZzlwdDBZUFF3OXJEMW5zdFZyaTlWKy9WZTNYclMvd2ZpbTRQNWZJRnhMb0FBQUFBU1VWT1JLNUNZSUk9XCI7XG4iXX0=