diff --git a/.gitignore b/.gitignore index 9d09279..f6a1430 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,8 @@ !.yarn/sdks build/ build-cjs/ +build-asm/ +build-wasm/ cc-test-reporter coverage/ node_modules/ @@ -21,3 +23,6 @@ yarn-debug.log* yarn-error.log* target/ pkg/ + +binaryen/ +bindgen/ diff --git a/package.json b/package.json index 2766676..e4fe134 100644 --- a/package.json +++ b/package.json @@ -20,11 +20,13 @@ "packages/*" ], "bin": { - "build:wasm": "scripts/build-wasm.js" + "build-wasm": "scripts/build-wasm.js", + "install-build-deps": "scripts/install-build-deps.js" }, "scripts": { "build": "zcloak-dev-build-ts", "build:release": "zcloak-ci-ghact-build", + "build:wasm": "install-build-deps && build-wasm", "clean": "zcloak-dev-clean-build", "lint": "zcloak-dev-run-lint && zcloak-dev-lint-dependencies", "postinstall": "zcloak-dev-yarn-only", @@ -34,7 +36,8 @@ }, "devDependencies": { "@types/jest": "^27.4.0", - "@zcloak/dev": "^0.6.5" + "@zcloak/dev": "^0.6.5", + "fs-extra": "^10.1.0" }, "resolutions": { "typescript": "^4.8.4" diff --git a/packages/crypto/src/initCrypto.ts b/packages/crypto/src/initCrypto.ts index bd03f8e..665a0ea 100644 --- a/packages/crypto/src/initCrypto.ts +++ b/packages/crypto/src/initCrypto.ts @@ -6,5 +6,5 @@ import { initWasm as initPolkadotWasm } from '@polkadot/wasm-crypto/initWasmAsm' import { initWasm } from '@zcloak/wasm'; export function initCrypto() { - return Promise.all([initWasm(), initPolkadotWasm()]); + return Promise.all([initWasm(false), initPolkadotWasm()]); } diff --git a/packages/did/src/did/details.ts b/packages/did/src/did/details.ts index ab71396..213cafe 100644 --- a/packages/did/src/did/details.ts +++ b/packages/did/src/did/details.ts @@ -66,6 +66,9 @@ export abstract class DidDetails extends DidKeyring implements IDidDetails { this.service = service; } + /** + * Get the first key by `key` + */ public getKeyUrl(key: DidKeys): DidUrl { const didUrl = Array.from(this[key] ?? [])[0]; @@ -74,6 +77,9 @@ export abstract class DidDetails extends DidKeyring implements IDidDetails { return didUrl; } + /** + * Get [[KeyRelationship]] by `id` + */ public get(id: DidUrl): KeyRelationship { const method = this.keyRelationship.get(id); diff --git a/packages/wasm/Cargo.lock b/packages/wasm/Cargo.lock index 94ce4cf..f07ae3e 100644 --- a/packages/wasm/Cargo.lock +++ b/packages/wasm/Cargo.lock @@ -112,26 +112,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "console_error_panic_hook" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" -dependencies = [ - "cfg-if 1.0.0", - "wasm-bindgen", -] - -[[package]] -name = "console_log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501a375961cef1a0d44767200e66e4a559283097e91d0730b1d75dfb2f8a1494" -dependencies = [ - "log", - "web-sys", -] - [[package]] name = "constant_time_eq" version = "0.1.5" @@ -275,19 +255,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - [[package]] name = "half" version = "1.8.2" @@ -303,12 +270,6 @@ dependencies = [ "libc", ] -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - [[package]] name = "itertools" version = "0.10.5" @@ -533,16 +494,10 @@ checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] name = "rescue" version = "0.1.0" -source = "git+https://github.com/zCloak-Network/rescue-hash?branch=dev#022cabbb07b7e8d07fcfb8c8e275399c6635353a" +source = "git+https://github.com/zCloak-Network/rescue-hash?branch=main#d424ceb506bf8f6ccfa85de6f1f631051205736e" dependencies = [ - "console_error_panic_hook", - "console_log", - "getrandom", - "hex", - "serde_json", "sp-std", "wasm-bindgen", - "wasm-bindgen-test", "winter-crypto", "winter-math", "winter-utils", @@ -563,12 +518,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.1.0" @@ -696,12 +645,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - [[package]] name = "wasm" version = "0.0.0" @@ -738,18 +681,6 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb6ec270a31b1d3c7e266b999739109abce8b6c87e4b31fcfcd788b65267395" -dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "wasm-bindgen-macro" version = "0.2.83" @@ -779,30 +710,6 @@ version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" -[[package]] -name = "wasm-bindgen-test" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45c8d417d87eefa0087e62e3c75ad086be39433449e2961add9a5d9ce5acc2f1" -dependencies = [ - "console_error_panic_hook", - "js-sys", - "scoped-tls", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test-macro", -] - -[[package]] -name = "wasm-bindgen-test-macro" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0e560d44db5e73b69a9757a15512fe7e1ef93ed2061c928871a4025798293dd" -dependencies = [ - "proc-macro2", - "quote", -] - [[package]] name = "web-sys" version = "0.3.56" @@ -859,7 +766,7 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "winter-crypto" version = "0.4.0" -source = "git+https://github.com/zCloak-Network/rescue-hash?branch=dev#022cabbb07b7e8d07fcfb8c8e275399c6635353a" +source = "git+https://github.com/zCloak-Network/rescue-hash?branch=main#d424ceb506bf8f6ccfa85de6f1f631051205736e" dependencies = [ "blake3", "serde", @@ -871,7 +778,7 @@ dependencies = [ [[package]] name = "winter-math" version = "0.4.0" -source = "git+https://github.com/zCloak-Network/rescue-hash?branch=dev#022cabbb07b7e8d07fcfb8c8e275399c6635353a" +source = "git+https://github.com/zCloak-Network/rescue-hash?branch=main#d424ceb506bf8f6ccfa85de6f1f631051205736e" dependencies = [ "serde", "serde_json", @@ -881,4 +788,4 @@ dependencies = [ [[package]] name = "winter-utils" version = "0.4.0" -source = "git+https://github.com/zCloak-Network/rescue-hash?branch=dev#022cabbb07b7e8d07fcfb8c8e275399c6635353a" +source = "git+https://github.com/zCloak-Network/rescue-hash?branch=main#d424ceb506bf8f6ccfa85de6f1f631051205736e" diff --git a/packages/wasm/Cargo.toml b/packages/wasm/Cargo.toml index 741e433..2f11aed 100644 --- a/packages/wasm/Cargo.toml +++ b/packages/wasm/Cargo.toml @@ -12,7 +12,7 @@ version = "0.0.0" crate-type = ["cdylib"] [dependencies] -rescue = {git = "https://github.com/zCloak-Network/rescue-hash", branch = "dev", default-features = false} +rescue = {git = "https://github.com/zCloak-Network/rescue-hash", branch = "main", default-features = false} wasm-bindgen = "=0.2.83" wee_alloc = "0.4.3" diff --git a/packages/wasm/src/asm.d.ts b/packages/wasm/src/asm.d.ts new file mode 100644 index 0000000..bdaaa33 --- /dev/null +++ b/packages/wasm/src/asm.d.ts @@ -0,0 +1,4 @@ +// Copyright 2021-2022 zcloak authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +export default asm = any; diff --git a/packages/wasm/src/asm.js b/packages/wasm/src/asm.js new file mode 100644 index 0000000..9d7c2a6 --- /dev/null +++ b/packages/wasm/src/asm.js @@ -0,0 +1,3388 @@ +// Copyright 2021-2022 zcloak authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +/* tslint:disable */ +/* eslint-disable */ + + + var bufferView; + var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); + for (var i = 25; i >= 0; --i) { + base64ReverseLookup[48+i] = 52+i; // '0-9' + base64ReverseLookup[65+i] = i; // 'A-Z' + base64ReverseLookup[97+i] = 26+i; // 'a-z' + } + base64ReverseLookup[43] = 62; // '+' + base64ReverseLookup[47] = 63; // '/' + /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ + function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { + var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); + for (; i < bLength; i += 4) { + b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; + b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; + uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; + if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; + if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; + } + } +function initActiveSegments(imports) { + base64DecodeToExistingUint8Array(bufferView, 1048576, "bGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5yc2NhcGFjaXR5IG92ZXJmbG93AAAAHAAQABEAAAAAABAAHAAAAAUCAAAFAAAAaW5kZXggb3V0IG9mIGJvdW5kczogdGhlIGxlbiBpcyAgYnV0IHRoZSBpbmRleCBpcyAAAEgAEAAgAAAAaAAQABIAAAACAAAAAAAAAAEAAAADAAAAMDAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTIwMjEyMjIzMjQyNTI2MjcyODI5MzAzMTMyMzMzNDM1MzYzNzM4Mzk0MDQxNDI0MzQ0NDU0NjQ3NDg0OTUwNTE1MjUzNTQ1NTU2NTc1ODU5NjA2MTYyNjM2NDY1NjY2NzY4Njk3MDcxNzI3Mzc0NzU3Njc3Nzg3OTgwODE4MjgzODQ4NTg2ODc4ODg5OTA5MTkyOTM5NDk1OTY5Nzk4OTlsaWJyYXJ5L2NvcmUvc3JjL3NsaWNlL2luZGV4LnJzc2xpY2UgaW5kZXggc3RhcnRzIGF0ICBidXQgZW5kcyBhdCAAAIMBEAAWAAAAmQEQAA0AAABkARAAHwAAAFwAAAAFAAAAL1VzZXJzL3poYW5nemhpY2hhby8uY2FyZ28vZ2l0L2NoZWNrb3V0cy9yZXNjdWUtaGFzaC0wNmUyOGJhNjM5ZTk2NTg0L2Q0MjRjZWIvc3JjL3V0aWxzL3dpbnRlcmZlbGwtY3J5cHRvL3NyYy9oYXNoL3Jlc2N1ZS9ycDY0XzI1Ni9tb2QucnMAAADIARAAiQAAAOMAAAANAAAAZXhwZWN0ZWQgbGVuIG9mIHZhbHVlc19pbl91NjQgdG8gYmUgW2V4YWN0bHkgOF0gb3IgW292ZXIgOCBidXQgc2hvdWxkIGJlIHNvbWUgbXVsdGlwbGUgb2YgNF0gYnV0IHJlY2VpdmVkIAAAZAIQAGoAAAAvVXNlcnMvemhhbmd6aGljaGFvLy5jYXJnby9naXQvY2hlY2tvdXRzL3Jlc2N1ZS1oYXNoLTA2ZTI4YmE2MzllOTY1ODQvZDQyNGNlYi9zcmMvbGliLnJz2AIQAFgAAAAlAAAABQAAAGNhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWVsaWJyYXJ5L3N0ZC9zcmMvcGFuaWNraW5nLnJzAGsDEAAcAAAARwIAAB4AAACTvAU//hElwVCNvNR3gRPeqztR7TMRpEEHFFTxizWbi/xm9XFbrBGI7VG1bo17a9mfq4/gtiHejGe25speLSC9kFWITVS/PyAV0sf+h4aJCLeF+NTq5Rp7yHFDgD/hMJKydThYmK46yq+EyEKBDRWDtil5rBBqHlt/aPGnyjzMr4ga4/v+ctVjuuwOspLOy6SRslC0lPmB+Clt+kr9lSsR70k33eidyF4lv8ili9myHRlXirBq9IoWfmAZw/wGtQBNHMpWgt4K4tgkHqceD4G4oOU7e1nmjbk5yU4zSZp8CMsRFEvocoqy/2IPQXADRqqIrdnBZeY5cnCG0rI18eK6wJObdz3tO42ddtEdx0F+z0mqPc0CgaJRhRXqroZyifvu2NzK2MFVVPqrV/9jwZ5ni5virgiCdUx4XdGlLRvmy9LpqYIIjSO0AtGa+4no4xIxQhLfzhOSVAf2ytQVge1Gw28bDf7QC3e9MjHKcfo5gTXS0JQzpnDrkAaHlUgPw0/746WWYRbovblaMKHPFUUAzSjYRIK5oeaC+Mx5B3XcA6kgXQdhyVlFtBzrkhNo3ArsG6xZnPHs44o0i+6WG6eKoWHgnaBAjegwHQn4lWoyHRyVp/0y2E3ehyow0wj17Fm5BjFqN6ezwVcyzolEV6eGW4yHu9JQwv7bXkOO8sYKKs3LeBhlARwZH3qd+a2G6KyC1HzWUZxTprx4yHxpL5ey4ftdZBWfP21SNmGVEwtqlFLn4iAxMfl3TASJjEM6vxMIhcZ5HhqF9D0LKCd2VK1V6PC34+aEA9Hny4z3yIuAPk0iDT+OCyGgI6dpTg6oUrHx2hcdcWme9zxk+i0jf4q6DRzB6McrlVIQ1uM9d9d77BVVzn5mAfR5er7gtQecIGcZQo+tGYvfblArXvfFs+V3b+uuYpsADFopRt163geYTP1qcM/iRz8pWwNbArL9xs4GOhSOEMyCxF385308xdhSwI5xjQnd/0bz4OuRr+UyqOyTSe/4GYnx3GNtstPduCWyn+lBndV9Ir1TWieoMEXHQNbqjKzsKy7k04GxuBNLU5+1p288Sb3xl4/ImcYb6KMmnbEW0hZtzSgOK/Kngm8KQR/3T6KnmILqwxnNSzes41Wrllfz0k1fvLpxGtuwCsI9EPgG/2jXkPxSU4V/H7W30gTaH+hnRgkQjJinTBMbISFj+1ivrcU1JlQbJCBKwLN/RR+R/HJhG8PWbeL0GkvCGs4HyI7KjA0uoHaHIqyrdI5Wh3XDm7MER1C+0siRZjre/591pMqzH/QzDNg2AXU+VWFvBArlLTfU4AaY3MIgJBqnIAkjjfBPYGPs3osCaCg6lmQV446S/z0GH8yYXwVi7hl91X7Tu+ZoRunNGNFEAnqo9+QtbO2gk4NdPJTdTym+62SfH7Zq0beMshovFYcwgLi89v9f/3d1DJgZov0jIkL6J00LTb42a9py9k0mI8238Bf4+MOoJwVNFJ0kWwl2gPhIZ5nN6flj9vyh05T+CcUFDNsZUq5hpnCjHkWd0HomZKAIBvPb8Xd35R5FhxcQJqWrcCVbD/mCXotMIOv3VxCfk9fuPNr1nkEfLzkpaTrndSE9r6flqz+X5nUYke2KTUvzO4TDPk09rJCj9H7ArU+nY7WECQJF1a7BOnHPrE3ALS94K7uA/qcjMt+mBJkBCqtxx5iacT0kDF0KwKIjlwIr9hWWs3RiGwIjNvG38GVglSXR8JzXXpwQxe8B/lPC50GF1QWGM92/xkbUbPV8sLr8RD8LR1M5NjYLylfB8WpghSvGwjJEHcsKRNZhFcGbZOvM5eupLCAqfAEMTyr+myvn51Bh9h9vW0lOem4Fx5n9hOAKOiJxNqnV45EwmJ3uqsoCZ1A3HgIQTIrraEX3Y7cvui2nsMT2sDaAiQAAAAB8ylVsXIPALq5sESRGa8NMZ/OEMZs+g2s4/zmyCF6SxCe5A/ODZZRAdgEb+MySYkzHRfkWkzLcLvU26yveuWkXX8trSDbQhXOIEHHkHT729EfakOc2Vg7YtuhoSWcrn0BuCI1fNtmII7JOXoXsR8qVnlvgVlMrqwV5OZarfs3SwK3fOuLLTc33qu0F+188XskxuaKN7u34qD/i96AXr7Wm1pBZW7uTjg0PgRM6YY06LFvpQ1hlQkRAya8RH1FbR/XjutS3XfLUl5DYz0c8yqZ+qKwysQ0ni7pWCnJdpmjpv5IVetKSIa1WD8lKCNbOQyvxCMfBQoVS8cUtKkjoEo8ytJSYwBnwfpEx7aY1H7pvOMH8fbVKUsp6mSFDYZQuhIReVOZyuaNF2X/b0YeBbEwE1KNwi3q7F9/W3ZN+On64Smxqtc9BFovSMXpyuJ81blzOsuCS6r6HW6FZ0aaM1r/Uz46RBR42SyUlV4rbE33C3OM2PzXO0mYmnUAOI7FO6HD5X4mJ4BrUy4pG/Cf0J7pwhFA9HcKT5evAOwQ9Fz9NKJQ69e3dUQSbF0JER/ImnUtpdL+8B/iHhxDCKxZUUHY1u26X3u5cTMpHBEDoh452pqrEtL2W7SxzcOKHZxJQryeHKQtGfQ5KRKL094+Fq625Fq6rlI00+yui/mxa6NOe2kYl+EWQ06IIlOMU9jT1BcNkrN+gcXObRxlUnGLEPwfyAU+0Oxl0BYoAaBObSdtkvSAVAH3zZzQArl+Tpy8KhK6dzXZOWjrLLm4pXU6qU1J7V0NdbS1NkNmhyS8QSEHItynWXcdEdZ2oHD5RPSPI0BPlSCJIs6z6N8tUHpMYPNrML0tS9dy9HJ8gLDsg48QYqMFSXZDXC7LwAIDEX7MuX8u1ucJcaxU+SzwUOBjiqxTF94l/TwIQbElIPib7fWgoDrbK82iMHJzGOFboPu8Jo2w0lXrVkxr2gpyDR0EgjVNPJC6LBAH/INXEGLaJT95VOXhhRoaHR/HouYc5bSTTJ5uxVdmfqMILkae9jsBVV1KomzcRCCB2iJOZJ2DwSc+LXxApE6Uvp8jjMjdQKC5VQ722PNlbSUiAI9Q8q++e2w884DhgWx1wyTrvtleLFk3hHEUS6FwIOGocmrGeShCL3F5kSUxL0J7CTh8p/KDBBLNwfxPX3vMFyYiHo0KDDpE1G/Fukf+gHQrUoZ0Bnwdzyvk5zuZyPj4DASXLK6Wb0YF7yg8mdATKpuv1LA9Mrnn+WJ/UPRPe2CXBMB+FJ1IIZ0wgAE6KnAQyjzMpz2RHr13wVJGL5j80KaDUEjyIBDXmZKr2pJrhT/5B300Yp5g/cR4/Vhtpi5seojnRJ7ZokwZvulhCvJROoF0JodJRL83ep3TOt8Bku0y3VP5NcjpNAE0="); +} +function asmFunc(env) { + var buffer = new ArrayBuffer(1114112); + var HEAP8 = new Int8Array(buffer); + var HEAP16 = new Int16Array(buffer); + var HEAP32 = new Int32Array(buffer); + var HEAPU8 = new Uint8Array(buffer); + var HEAPU16 = new Uint16Array(buffer); + var HEAPU32 = new Uint32Array(buffer); + var HEAPF32 = new Float32Array(buffer); + var HEAPF64 = new Float64Array(buffer); + var Math_imul = Math.imul; + var Math_fround = Math.fround; + var Math_abs = Math.abs; + var Math_clz32 = Math.clz32; + var Math_min = Math.min; + var Math_max = Math.max; + var Math_floor = Math.floor; + var Math_ceil = Math.ceil; + var Math_trunc = Math.trunc; + var Math_sqrt = Math.sqrt; + var abort = env.abort; + var nan = NaN; + var infinity = Infinity; + var global$0 = 1048576; + var i64toi32_i32$HIGH_BITS = 0; + function $0($0_1) { + var $1_1 = 0, $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0, $6_1 = 0, $7_1 = 0, $8_1 = 0, $9_1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; + label$1 : { + label$2 : { + label$3 : { + label$4 : { + label$5 : { + if ($0_1 >>> 0 >= 245) { + if ($0_1 >>> 0 >= 4294901709) { + break label$2 + } + $0_1 = $0_1 + 11 | 0; + $3_1 = $0_1 & -8; + $7_1 = HEAP32[263001]; + if (!$7_1) { + break label$3 + } + $5_1 = 0 - $3_1 | 0; + $2_1 = 0; + label$7 : { + if ($3_1 >>> 0 < 256) { + break label$7 + } + $2_1 = 31; + if ($3_1 >>> 0 > 16777215) { + break label$7 + } + $0_1 = Math_clz32($0_1 >>> 8 | 0); + $2_1 = (($3_1 >>> 6 - $0_1 & 1) - ($0_1 << 1) | 0) + 62 | 0; + } + $0_1 = HEAP32[($2_1 << 2) + 1052272 >> 2]; + if ($0_1) { + $8_1 = $3_1 << (($2_1 | 0) == 31 ? 0 : 25 - ($2_1 >>> 1 | 0) & 31); + while (1) { + label$10 : { + $1_1 = HEAP32[$0_1 + 4 >> 2] & -8; + if ($1_1 >>> 0 < $3_1 >>> 0) { + break label$10 + } + $1_1 = $1_1 - $3_1 | 0; + if ($1_1 >>> 0 >= $5_1 >>> 0) { + break label$10 + } + $4_1 = $0_1; + $5_1 = $1_1; + if ($1_1) { + break label$10 + } + $5_1 = 0; + break label$5; + } + $1_1 = HEAP32[$0_1 + 20 >> 2]; + $0_1 = HEAP32[(($8_1 >>> 29 & 4) + $0_1 | 0) + 16 >> 2]; + $6_1 = $1_1 ? (($1_1 | 0) != ($0_1 | 0) ? $1_1 : $6_1) : $6_1; + $8_1 = $8_1 << 1; + if ($0_1) { + continue + } + break; + }; + if ($6_1) { + $0_1 = $6_1; + break label$5; + } + if ($4_1) { + break label$4 + } + } + $4_1 = 0; + $0_1 = 2 << $2_1; + $0_1 = (0 - $0_1 | $0_1) & $7_1; + if (!$0_1) { + break label$3 + } + $0_1 = HEAP32[(__wasm_ctz_i32($0_1 & 0 - $0_1) << 2) + 1052272 >> 2]; + if ($0_1) { + break label$5 + } + break label$3; + } + label$12 : { + label$13 : { + label$14 : { + label$15 : { + label$16 : { + label$17 : { + $4_1 = HEAP32[263e3]; + $3_1 = $0_1 >>> 0 < 11 ? 16 : $0_1 + 11 & -8; + $0_1 = $3_1 >>> 3 | 0; + $2_1 = $4_1 >>> $0_1 | 0; + if (!($2_1 & 3)) { + if (HEAPU32[263100] >= $3_1 >>> 0) { + break label$3 + } + if ($2_1) { + break label$17 + } + $0_1 = HEAP32[263001]; + if (!$0_1) { + break label$3 + } + $4_1 = HEAP32[(__wasm_ctz_i32($0_1 & 0 - $0_1) << 2) + 1052272 >> 2]; + $6_1 = (HEAP32[$4_1 + 4 >> 2] & -8) - $3_1 | 0; + $0_1 = HEAP32[$4_1 + 16 >> 2]; + if (!$0_1) { + $0_1 = HEAP32[$4_1 + 20 >> 2] + } + if ($0_1) { + while (1) { + $1_1 = (HEAP32[$0_1 + 4 >> 2] & -8) - $3_1 | 0; + $2_1 = $1_1 >>> 0 < $6_1 >>> 0; + $6_1 = $2_1 ? $1_1 : $6_1; + $4_1 = $2_1 ? $0_1 : $4_1; + $1_1 = HEAP32[$0_1 + 16 >> 2]; + if ($1_1) { + $0_1 = $1_1 + } else { + $0_1 = HEAP32[$0_1 + 20 >> 2] + } + if ($0_1) { + continue + } + break; + } + } + $8($4_1); + if ($6_1 >>> 0 < 16) { + break label$13 + } + HEAP32[$4_1 + 4 >> 2] = $3_1 | 3; + $5_1 = $3_1 + $4_1 | 0; + HEAP32[$5_1 + 4 >> 2] = $6_1 | 1; + HEAP32[$5_1 + $6_1 >> 2] = $6_1; + $0_1 = HEAP32[263100]; + if (!$0_1) { + break label$14 + } + $0_1 = $0_1 >>> 3 | 0; + $1_1 = ($0_1 << 3) + 1052008 | 0; + $7_1 = HEAP32[263102]; + $2_1 = HEAP32[263e3]; + $0_1 = 1 << $0_1; + if (!($2_1 & $0_1)) { + break label$16 + } + $0_1 = HEAP32[$1_1 + 8 >> 2]; + break label$15; + } + $6_1 = $0_1 + (($2_1 ^ -1) & 1) | 0; + $0_1 = $6_1 << 3; + $5_1 = HEAP32[$0_1 + 1052016 >> 2]; + $1_1 = $5_1 + 8 | 0; + $2_1 = HEAP32[$1_1 >> 2]; + $0_1 = $0_1 + 1052008 | 0; + label$24 : { + if (($2_1 | 0) != ($0_1 | 0)) { + HEAP32[$2_1 + 12 >> 2] = $0_1; + HEAP32[$0_1 + 8 >> 2] = $2_1; + break label$24; + } + (wasm2js_i32$0 = 1052e3, wasm2js_i32$1 = __wasm_rotl_i32($6_1) & $4_1), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + } + $0_1 = $6_1 << 3; + HEAP32[$5_1 + 4 >> 2] = $0_1 | 3; + $0_1 = $0_1 + $5_1 | 0; + HEAP32[$0_1 + 4 >> 2] = HEAP32[$0_1 + 4 >> 2] | 1; + return $1_1; + } + $1_1 = $0_1 & 31; + $0_1 = 2 << $1_1; + $0_1 = (0 - $0_1 | $0_1) & $2_1 << $1_1; + $2_1 = __wasm_ctz_i32(0 - $0_1 & $0_1); + $0_1 = $2_1 << 3; + $7_1 = HEAP32[$0_1 + 1052016 >> 2]; + $6_1 = $7_1 + 8 | 0; + $1_1 = HEAP32[$6_1 >> 2]; + $0_1 = $0_1 + 1052008 | 0; + label$26 : { + if (($1_1 | 0) != ($0_1 | 0)) { + HEAP32[$1_1 + 12 >> 2] = $0_1; + HEAP32[$0_1 + 8 >> 2] = $1_1; + break label$26; + } + (wasm2js_i32$0 = 1052e3, wasm2js_i32$1 = __wasm_rotl_i32($2_1) & $4_1), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + } + HEAP32[$7_1 + 4 >> 2] = $3_1 | 3; + $5_1 = $3_1 + $7_1 | 0; + $0_1 = $2_1 << 3; + $4_1 = $0_1 - $3_1 | 0; + HEAP32[$5_1 + 4 >> 2] = $4_1 | 1; + HEAP32[$0_1 + $7_1 >> 2] = $4_1; + $0_1 = HEAP32[263100]; + if ($0_1) { + $0_1 = $0_1 >>> 3 | 0; + $1_1 = ($0_1 << 3) + 1052008 | 0; + $7_1 = HEAP32[263102]; + $2_1 = HEAP32[263e3]; + $0_1 = 1 << $0_1; + if ($2_1 & $0_1) { + $0_1 = HEAP32[$1_1 + 8 >> 2] + } else { + HEAP32[263e3] = $0_1 | $2_1; + $0_1 = $1_1; + } + HEAP32[$1_1 + 8 >> 2] = $7_1; + HEAP32[$0_1 + 12 >> 2] = $7_1; + HEAP32[$7_1 + 12 >> 2] = $1_1; + HEAP32[$7_1 + 8 >> 2] = $0_1; + } + HEAP32[263102] = $5_1; + HEAP32[263100] = $4_1; + return $6_1; + } + HEAP32[263e3] = $0_1 | $2_1; + $0_1 = $1_1; + } + HEAP32[$1_1 + 8 >> 2] = $7_1; + HEAP32[$0_1 + 12 >> 2] = $7_1; + HEAP32[$7_1 + 12 >> 2] = $1_1; + HEAP32[$7_1 + 8 >> 2] = $0_1; + } + HEAP32[263102] = $5_1; + HEAP32[263100] = $6_1; + break label$12; + } + $0_1 = $3_1 + $6_1 | 0; + HEAP32[$4_1 + 4 >> 2] = $0_1 | 3; + $0_1 = $0_1 + $4_1 | 0; + HEAP32[$0_1 + 4 >> 2] = HEAP32[$0_1 + 4 >> 2] | 1; + } + break label$1; + } + while (1) { + $1_1 = HEAP32[$0_1 + 4 >> 2] & -8; + $2_1 = $1_1 - $3_1 | 0; + $1_1 = $2_1 >>> 0 < $5_1 >>> 0 & $1_1 >>> 0 >= $3_1 >>> 0; + $4_1 = $1_1 ? $0_1 : $4_1; + $5_1 = $1_1 ? $2_1 : $5_1; + $1_1 = HEAP32[$0_1 + 16 >> 2]; + if ($1_1) { + $0_1 = $1_1 + } else { + $0_1 = HEAP32[$0_1 + 20 >> 2] + } + if ($0_1) { + continue + } + break; + }; + if (!$4_1) { + break label$3 + } + } + $0_1 = HEAP32[263100]; + if ($0_1 >>> 0 >= $3_1 >>> 0 & $0_1 - $3_1 >>> 0 <= $5_1 >>> 0) { + break label$3 + } + $8($4_1); + label$34 : { + if ($5_1 >>> 0 >= 16) { + HEAP32[$4_1 + 4 >> 2] = $3_1 | 3; + $6_1 = $3_1 + $4_1 | 0; + HEAP32[$6_1 + 4 >> 2] = $5_1 | 1; + HEAP32[$5_1 + $6_1 >> 2] = $5_1; + if ($5_1 >>> 0 >= 256) { + $7($6_1, $5_1); + break label$34; + } + $0_1 = $5_1 >>> 3 | 0; + $1_1 = ($0_1 << 3) + 1052008 | 0; + $2_1 = HEAP32[263e3]; + $0_1 = 1 << $0_1; + if ($2_1 & $0_1) { + $0_1 = HEAP32[$1_1 + 8 >> 2] + } else { + HEAP32[263e3] = $0_1 | $2_1; + $0_1 = $1_1; + } + HEAP32[$1_1 + 8 >> 2] = $6_1; + HEAP32[$0_1 + 12 >> 2] = $6_1; + HEAP32[$6_1 + 12 >> 2] = $1_1; + HEAP32[$6_1 + 8 >> 2] = $0_1; + break label$34; + } + $0_1 = $3_1 + $5_1 | 0; + HEAP32[$4_1 + 4 >> 2] = $0_1 | 3; + $0_1 = $0_1 + $4_1 | 0; + HEAP32[$0_1 + 4 >> 2] = HEAP32[$0_1 + 4 >> 2] | 1; + } + break label$1; + } + label$39 : { + label$40 : { + label$41 : { + label$42 : { + label$43 : { + label$44 : { + label$45 : { + label$46 : { + label$47 : { + label$48 : { + $2_1 = HEAP32[263100]; + if ($2_1 >>> 0 < $3_1 >>> 0) { + $0_1 = HEAP32[263101]; + if ($0_1 >>> 0 > $3_1 >>> 0) { + break label$45 + } + $5_1 = 0; + $2_1 = $3_1 + 65583 | 0; + $1_1 = __wasm_memory_grow($2_1 >>> 16 | 0); + $0_1 = ($1_1 | 0) == -1; + if ($0_1) { + break label$2 + } + $4_1 = $1_1 << 16; + if (!$4_1) { + break label$2 + } + $7_1 = $0_1 ? 0 : $2_1 & -65536; + $1_1 = $7_1 + HEAP32[263104] | 0; + HEAP32[263104] = $1_1; + $0_1 = HEAP32[263105]; + HEAP32[263105] = $0_1 >>> 0 > $1_1 >>> 0 ? $0_1 : $1_1; + $9_1 = HEAP32[263103]; + if (!$9_1) { + break label$48 + } + $0_1 = 1052424; + while (1) { + $2_1 = HEAP32[$0_1 >> 2]; + $1_1 = HEAP32[$0_1 + 4 >> 2]; + if (($2_1 + $1_1 | 0) == ($4_1 | 0)) { + break label$47 + } + $0_1 = HEAP32[$0_1 + 8 >> 2]; + if ($0_1) { + continue + } + break; + }; + break label$46; + } + $5_1 = HEAP32[263102]; + $1_1 = $2_1 - $3_1 | 0; + label$51 : { + if ($1_1 >>> 0 <= 15) { + HEAP32[263102] = 0; + HEAP32[263100] = 0; + HEAP32[$5_1 + 4 >> 2] = $2_1 | 3; + $0_1 = $2_1 + $5_1 | 0; + HEAP32[$0_1 + 4 >> 2] = HEAP32[$0_1 + 4 >> 2] | 1; + break label$51; + } + HEAP32[263100] = $1_1; + $0_1 = $3_1 + $5_1 | 0; + HEAP32[263102] = $0_1; + HEAP32[$0_1 + 4 >> 2] = $1_1 | 1; + HEAP32[$2_1 + $5_1 >> 2] = $1_1; + HEAP32[$5_1 + 4 >> 2] = $3_1 | 3; + } + return $5_1 + 8 | 0; + } + $0_1 = HEAP32[263111]; + if (!$0_1 | $0_1 >>> 0 > $4_1 >>> 0) { + break label$44 + } + break label$40; + } + if (HEAP32[$0_1 + 12 >> 2] | $2_1 >>> 0 > $9_1 >>> 0) { + break label$46 + } + if ($4_1 >>> 0 > $9_1 >>> 0) { + break label$43 + } + } + $0_1 = HEAP32[263111]; + HEAP32[263111] = $0_1 >>> 0 < $4_1 >>> 0 ? $0_1 : $4_1; + $6_1 = $4_1 + $7_1 | 0; + $0_1 = 1052424; + label$53 : { + label$54 : { + while (1) { + if (HEAP32[$0_1 >> 2] != ($6_1 | 0)) { + $0_1 = HEAP32[$0_1 + 8 >> 2]; + if ($0_1) { + continue + } + break label$54; + } + break; + }; + if (!HEAP32[$0_1 + 12 >> 2]) { + break label$53 + } + } + $0_1 = 1052424; + while (1) { + label$58 : { + $1_1 = HEAP32[$0_1 >> 2]; + if ($1_1 >>> 0 <= $9_1 >>> 0) { + $6_1 = $1_1 + HEAP32[$0_1 + 4 >> 2] | 0; + if ($6_1 >>> 0 > $9_1 >>> 0) { + break label$58 + } + } + $0_1 = HEAP32[$0_1 + 8 >> 2]; + continue; + } + break; + }; + HEAP32[263103] = $4_1; + $0_1 = $7_1 - 40 | 0; + HEAP32[263101] = $0_1; + HEAP32[$4_1 + 4 >> 2] = $0_1 | 1; + HEAP32[($0_1 + $4_1 | 0) + 4 >> 2] = 40; + HEAP32[263110] = 2097152; + $0_1 = ($6_1 - 32 & -8) - 8 | 0; + $8_1 = $0_1 >>> 0 < $9_1 + 16 >>> 0 ? $9_1 : $0_1; + HEAP32[$8_1 + 4 >> 2] = 27; + $5_1 = HEAP32[263106]; + $2_1 = HEAP32[263107]; + $0_1 = HEAP32[263109]; + $1_1 = $8_1 + 16 | 0; + HEAP32[$1_1 >> 2] = HEAP32[263108]; + HEAP32[$1_1 + 4 >> 2] = $0_1; + HEAP32[$8_1 + 8 >> 2] = $5_1; + HEAP32[$8_1 + 12 >> 2] = $2_1; + HEAP32[263107] = $7_1; + HEAP32[263106] = $4_1; + HEAP32[263108] = $8_1 + 8; + HEAP32[263109] = 0; + $0_1 = $8_1 + 28 | 0; + while (1) { + HEAP32[$0_1 >> 2] = 7; + $0_1 = $0_1 + 4 | 0; + if ($6_1 >>> 0 > $0_1 >>> 0) { + continue + } + break; + }; + if (($8_1 | 0) == ($9_1 | 0)) { + break label$39 + } + HEAP32[$8_1 + 4 >> 2] = HEAP32[$8_1 + 4 >> 2] & -2; + $0_1 = $8_1 - $9_1 | 0; + HEAP32[$9_1 + 4 >> 2] = $0_1 | 1; + HEAP32[$8_1 >> 2] = $0_1; + if ($0_1 >>> 0 >= 256) { + $7($9_1, $0_1); + break label$39; + } + $0_1 = $0_1 >>> 3 | 0; + $1_1 = ($0_1 << 3) + 1052008 | 0; + $2_1 = HEAP32[263e3]; + $0_1 = 1 << $0_1; + if ($2_1 & $0_1) { + $0_1 = HEAP32[$1_1 + 8 >> 2] + } else { + HEAP32[263e3] = $0_1 | $2_1; + $0_1 = $1_1; + } + HEAP32[$1_1 + 8 >> 2] = $9_1; + HEAP32[$0_1 + 12 >> 2] = $9_1; + HEAP32[$9_1 + 12 >> 2] = $1_1; + HEAP32[$9_1 + 8 >> 2] = $0_1; + break label$39; + } + HEAP32[$0_1 >> 2] = $4_1; + HEAP32[$0_1 + 4 >> 2] = $7_1 + HEAP32[$0_1 + 4 >> 2]; + HEAP32[$4_1 + 4 >> 2] = $3_1 | 3; + $7_1 = $3_1 + $4_1 | 0; + $3_1 = $6_1 - $7_1 | 0; + if (HEAP32[263103] != ($6_1 | 0)) { + if (HEAP32[263102] == ($6_1 | 0)) { + break label$42 + } + $5_1 = HEAP32[$6_1 + 4 >> 2]; + if (($5_1 & 3) != 1) { + break label$41 + } + $2_1 = $5_1 & -8; + label$65 : { + if ($2_1 >>> 0 >= 256) { + $8($6_1); + break label$65; + } + $1_1 = HEAP32[$6_1 + 12 >> 2]; + $0_1 = HEAP32[$6_1 + 8 >> 2]; + if (($1_1 | 0) != ($0_1 | 0)) { + HEAP32[$0_1 + 12 >> 2] = $1_1; + HEAP32[$1_1 + 8 >> 2] = $0_1; + break label$65; + } + (wasm2js_i32$0 = 1052e3, wasm2js_i32$1 = HEAP32[263e3] & __wasm_rotl_i32($5_1 >>> 3 | 0)), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + } + $3_1 = $2_1 + $3_1 | 0; + $6_1 = $2_1 + $6_1 | 0; + break label$41; + } + HEAP32[263103] = $7_1; + $0_1 = HEAP32[263101] + $3_1 | 0; + HEAP32[263101] = $0_1; + HEAP32[$7_1 + 4 >> 2] = $0_1 | 1; + break label$1; + } + $1_1 = $0_1 - $3_1 | 0; + HEAP32[263101] = $1_1; + $2_1 = HEAP32[263103]; + $0_1 = $2_1 + $3_1 | 0; + HEAP32[263103] = $0_1; + HEAP32[$0_1 + 4 >> 2] = $1_1 | 1; + HEAP32[$2_1 + 4 >> 2] = $3_1 | 3; + $5_1 = $2_1 + 8 | 0; + break label$2; + } + HEAP32[263111] = $4_1; + break label$40; + } + HEAP32[$0_1 + 4 >> 2] = $1_1 + $7_1; + $5_1 = $7_1 + HEAP32[263101] | 0; + $2_1 = HEAP32[263103]; + $1_1 = $2_1 + 15 & -8; + HEAP32[263103] = $1_1 - 8; + $0_1 = ($5_1 + ($2_1 - $1_1 | 0) | 0) + 8 | 0; + HEAP32[263101] = $0_1; + HEAP32[$1_1 - 4 >> 2] = $0_1 | 1; + HEAP32[($2_1 + $5_1 | 0) + 4 >> 2] = 40; + HEAP32[263110] = 2097152; + break label$39; + } + HEAP32[263102] = $7_1; + $0_1 = HEAP32[263100] + $3_1 | 0; + HEAP32[263100] = $0_1; + HEAP32[$7_1 + 4 >> 2] = $0_1 | 1; + HEAP32[$0_1 + $7_1 >> 2] = $0_1; + break label$1; + } + HEAP32[$6_1 + 4 >> 2] = HEAP32[$6_1 + 4 >> 2] & -2; + HEAP32[$7_1 + 4 >> 2] = $3_1 | 1; + HEAP32[$3_1 + $7_1 >> 2] = $3_1; + if ($3_1 >>> 0 >= 256) { + $7($7_1, $3_1); + break label$1; + } + $0_1 = $3_1 >>> 3 | 0; + $1_1 = ($0_1 << 3) + 1052008 | 0; + $2_1 = HEAP32[263e3]; + $0_1 = 1 << $0_1; + if ($2_1 & $0_1) { + $0_1 = HEAP32[$1_1 + 8 >> 2] + } else { + HEAP32[263e3] = $0_1 | $2_1; + $0_1 = $1_1; + } + HEAP32[$1_1 + 8 >> 2] = $7_1; + HEAP32[$0_1 + 12 >> 2] = $7_1; + HEAP32[$7_1 + 12 >> 2] = $1_1; + HEAP32[$7_1 + 8 >> 2] = $0_1; + break label$1; + } + HEAP32[263112] = 4095; + HEAP32[263107] = $7_1; + HEAP32[263106] = $4_1; + HEAP32[263005] = 1052008; + HEAP32[263007] = 1052016; + HEAP32[263004] = 1052008; + HEAP32[263009] = 1052024; + HEAP32[263006] = 1052016; + HEAP32[263011] = 1052032; + HEAP32[263008] = 1052024; + HEAP32[263013] = 1052040; + HEAP32[263010] = 1052032; + HEAP32[263015] = 1052048; + HEAP32[263012] = 1052040; + HEAP32[263017] = 1052056; + HEAP32[263014] = 1052048; + HEAP32[263019] = 1052064; + HEAP32[263016] = 1052056; + HEAP32[263109] = 0; + HEAP32[263021] = 1052072; + HEAP32[263018] = 1052064; + HEAP32[263020] = 1052072; + HEAP32[263023] = 1052080; + HEAP32[263022] = 1052080; + HEAP32[263025] = 1052088; + HEAP32[263024] = 1052088; + HEAP32[263027] = 1052096; + HEAP32[263026] = 1052096; + HEAP32[263029] = 1052104; + HEAP32[263028] = 1052104; + HEAP32[263031] = 1052112; + HEAP32[263030] = 1052112; + HEAP32[263033] = 1052120; + HEAP32[263032] = 1052120; + HEAP32[263035] = 1052128; + HEAP32[263034] = 1052128; + HEAP32[263037] = 1052136; + HEAP32[263039] = 1052144; + HEAP32[263036] = 1052136; + HEAP32[263041] = 1052152; + HEAP32[263038] = 1052144; + HEAP32[263043] = 1052160; + HEAP32[263040] = 1052152; + HEAP32[263045] = 1052168; + HEAP32[263042] = 1052160; + HEAP32[263047] = 1052176; + HEAP32[263044] = 1052168; + HEAP32[263049] = 1052184; + HEAP32[263046] = 1052176; + HEAP32[263051] = 1052192; + HEAP32[263048] = 1052184; + HEAP32[263053] = 1052200; + HEAP32[263050] = 1052192; + HEAP32[263055] = 1052208; + HEAP32[263052] = 1052200; + HEAP32[263057] = 1052216; + HEAP32[263054] = 1052208; + HEAP32[263059] = 1052224; + HEAP32[263056] = 1052216; + HEAP32[263061] = 1052232; + HEAP32[263058] = 1052224; + HEAP32[263063] = 1052240; + HEAP32[263060] = 1052232; + HEAP32[263065] = 1052248; + HEAP32[263062] = 1052240; + HEAP32[263067] = 1052256; + HEAP32[263064] = 1052248; + HEAP32[263103] = $4_1; + HEAP32[263066] = 1052256; + $0_1 = $7_1 - 40 | 0; + HEAP32[263101] = $0_1; + HEAP32[$4_1 + 4 >> 2] = $0_1 | 1; + HEAP32[($0_1 + $4_1 | 0) + 4 >> 2] = 40; + HEAP32[263110] = 2097152; + } + $5_1 = 0; + $0_1 = HEAP32[263101]; + if ($0_1 >>> 0 <= $3_1 >>> 0) { + break label$2 + } + $1_1 = $0_1 - $3_1 | 0; + HEAP32[263101] = $1_1; + $2_1 = HEAP32[263103]; + $0_1 = $2_1 + $3_1 | 0; + HEAP32[263103] = $0_1; + HEAP32[$0_1 + 4 >> 2] = $1_1 | 1; + HEAP32[$2_1 + 4 >> 2] = $3_1 | 3; + return $2_1 + 8 | 0; + } + return $5_1; + } + return $4_1 + 8 | 0; + } + + function $1($0_1) { + var $1_1 = 0, $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0, $6_1 = 0, $7_1 = 0, $8_1 = 0, $9_1 = 0, $10_1 = 0, $11_1 = 0, $12_1 = 0, $13_1 = 0, $14_1 = 0, $15_1 = 0, $16_1 = 0, $17_1 = 0, $18_1 = 0, $19_1 = 0, $20_1 = 0, $21_1 = 0, $22_1 = 0, $23_1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; + $1_1 = global$0 - 2016 | 0; + global$0 = $1_1; + $13_1 = $0_1 + 96 | 0; + $16_1 = $1_1 + 1788 | 0; + $17_1 = $1_1 + 1892 | 0; + $18_1 = $1_1 + 1896 | 0; + $12_1 = $1_1 + 496 | 0; + $20_1 = $1_1 + 1984 | 0; + $21_1 = $1_1 + 1880 | 0; + $22_1 = $1_1 + 1776 | 0; + $23_1 = $1_1 + 400 | 0; + $14_1 = 1049496; + $15_1 = 1050168; + while (1) { + label$2 : { + if (($19_1 | 0) != 7) { + $2_1 = 0; + while (1) { + if (($2_1 | 0) != 96) { + $5_1 = $0_1 + $2_1 | 0; + $6_1 = $38(HEAP32[$5_1 >> 2], HEAP32[$5_1 + 4 >> 2]); + $4_1 = i64toi32_i32$HIGH_BITS; + $3_1 = $38($6_1, $4_1); + $33($5_1, $14($6_1, $4_1, $3_1, i64toi32_i32$HIGH_BITS), i64toi32_i32$HIGH_BITS); + $2_1 = $2_1 + 8 | 0; + continue; + } + break; + }; + $5_1 = $1_1 + 400 | 0; + $37($5_1, 96); + $36($1_1 + 496 | 0, 1050840, 1152); + HEAP32[$1_1 + 1672 >> 2] = 0; + HEAP32[$1_1 + 1664 >> 2] = 0; + HEAP32[$1_1 + 1668 >> 2] = 0; + HEAP32[$1_1 + 1660 >> 2] = $12_1; + HEAP32[$1_1 + 1648 >> 2] = 0; + HEAP32[$1_1 + 1652 >> 2] = 12; + $19_1 = $19_1 + 1 | 0; + $2_1 = $12_1; + while (1) { + label$7 : { + if (($2_1 | 0) == ($5_1 | 0)) { + break label$7 + } + HEAP32[$1_1 + 1656 >> 2] = $5_1 + 8; + $17($1_1 + 1888 | 0, $1_1 + 496 | 0); + if (!(HEAP32[$1_1 + 1888 >> 2] | HEAP32[$1_1 + 1892 >> 2])) { + break label$7 + } + $4_1 = $1_1 + 1784 | 0; + $36($4_1, $18_1, 96); + $36($17_1, $4_1, 96); + $2_1 = $1_1 + 1680 | 0; + $3_1 = $1_1 + 1888 | 0; + $36($2_1, $3_1, 100); + $36($4_1, $2_1, 100); + $36($3_1, $16_1, 96); + HEAP32[$1_1 + 2008 >> 2] = 0; + HEAP32[$1_1 + 2e3 >> 2] = 0; + HEAP32[$1_1 + 2004 >> 2] = 0; + HEAP32[$1_1 + 1996 >> 2] = $13_1; + HEAP32[$1_1 + 1984 >> 2] = 0; + HEAP32[$1_1 + 1988 >> 2] = 12; + $6_1 = HEAP32[$5_1 >> 2]; + $3_1 = HEAP32[$5_1 + 4 >> 2]; + $2_1 = $0_1; + $4_1 = $13_1; + while (1) { + label$9 : { + if (($2_1 | 0) == ($4_1 | 0)) { + break label$9 + } + HEAP32[$1_1 + 1992 >> 2] = $2_1 + 8; + $18($1_1 + 96 | 0, $1_1 + 1888 | 0); + if (!HEAP32[$1_1 + 96 >> 2]) { + break label$9 + } + $4_1 = $3_1; + $2_1 = $14(HEAP32[$1_1 + 104 >> 2], HEAP32[$1_1 + 108 >> 2], HEAP32[$2_1 >> 2], HEAP32[$2_1 + 4 >> 2]); + $3_1 = i64toi32_i32$HIGH_BITS; + $11_1 = $3_1; + $9_1 = $2_1 - 1 | 0; + $3_1 = ($9_1 | 0) != -1 ? $3_1 + 1 | 0 : $3_1; + $7_1 = $9_1; + $9_1 = ($11_1 | 0) == -1 & ($2_1 | 0) != 0; + $2_1 = $9_1 ? $7_1 : $2_1; + $8_1 = $2_1 + $6_1 | 0; + $7_1 = ($9_1 ? $3_1 : $11_1) + $4_1 | 0; + $7_1 = $2_1 >>> 0 > $8_1 >>> 0 ? $7_1 + 1 | 0 : $7_1; + $2_1 = $8_1; + $3_1 = $7_1; + $2_1 = $2_1 + (($4_1 | 0) == ($3_1 | 0) & $2_1 >>> 0 < $6_1 >>> 0 | $4_1 >>> 0 > $3_1 >>> 0 ? -1 : 0) | 0; + $3_1 = $8_1 >>> 0 > $2_1 >>> 0 ? $3_1 + 1 | 0 : $3_1; + $6_1 = $2_1; + HEAP32[$5_1 >> 2] = $2_1; + HEAP32[$5_1 + 4 >> 2] = $3_1; + $2_1 = HEAP32[$1_1 + 1992 >> 2]; + $4_1 = HEAP32[$1_1 + 1996 >> 2]; + continue; + } + break; + }; + $5_1 = HEAP32[$1_1 + 1656 >> 2]; + $2_1 = HEAP32[$1_1 + 1660 >> 2]; + continue; + } + break; + }; + $9_1 = $36($0_1, $1_1 + 400 | 0, 96); + $2_1 = 0; + while (1) { + if (($2_1 | 0) != 96) { + $4_1 = $2_1 + $9_1 | 0; + $11_1 = HEAP32[$4_1 + 4 >> 2]; + $6_1 = $2_1 + $14_1 | 0; + $3_1 = HEAP32[$6_1 + 4 >> 2]; + $5_1 = HEAP32[$6_1 >> 2]; + $6_1 = $5_1 - 1 | 0; + $7_1 = ($6_1 | 0) != -1 ? $3_1 + 1 | 0 : $3_1; + $8_1 = HEAP32[$4_1 >> 2]; + $10_1 = $5_1; + $5_1 = ($3_1 | 0) == -1 & ($5_1 | 0) != 0; + $6_1 = $5_1 ? $6_1 : $10_1; + $10_1 = $8_1 + $6_1 | 0; + $3_1 = ($5_1 ? $7_1 : $3_1) + $11_1 | 0; + $3_1 = $6_1 >>> 0 > $10_1 >>> 0 ? $3_1 + 1 | 0 : $3_1; + $6_1 = $10_1; + $7_1 = $3_1; + $3_1 = $6_1 + (($3_1 | 0) == ($11_1 | 0) & $6_1 >>> 0 < $8_1 >>> 0 | $3_1 >>> 0 < $11_1 >>> 0 ? -1 : 0) | 0; + $7_1 = $3_1 >>> 0 < $6_1 >>> 0 ? $7_1 + 1 | 0 : $7_1; + HEAP32[$4_1 >> 2] = $3_1; + HEAP32[$4_1 + 4 >> 2] = $7_1; + $2_1 = $2_1 + 8 | 0; + continue; + } + break; + }; + $36($1_1 + 112 | 0, $9_1, 96); + $2_1 = 0; + while (1) { + if (($2_1 | 0) != 96) { + $4_1 = ($1_1 + 112 | 0) + $2_1 | 0; + $3_1 = $38(HEAP32[$4_1 >> 2], HEAP32[$4_1 + 4 >> 2]); + HEAP32[$4_1 >> 2] = $3_1; + HEAP32[$4_1 + 4 >> 2] = i64toi32_i32$HIGH_BITS; + $2_1 = $2_1 + 8 | 0; + continue; + } + break; + }; + $36($1_1 + 208 | 0, $1_1 + 112 | 0, 96); + $2_1 = 0; + while (1) { + if (($2_1 | 0) != 96) { + $4_1 = ($1_1 + 208 | 0) + $2_1 | 0; + $3_1 = $38(HEAP32[$4_1 >> 2], HEAP32[$4_1 + 4 >> 2]); + HEAP32[$4_1 >> 2] = $3_1; + HEAP32[$4_1 + 4 >> 2] = i64toi32_i32$HIGH_BITS; + $2_1 = $2_1 + 8 | 0; + continue; + } + break; + }; + $36($1_1 + 304 | 0, $1_1 + 208 | 0, 96); + $5_1 = 0; + while (1) { + label$17 : { + if (($5_1 | 0) != 3) { + $2_1 = 0; + while (1) { + if (($2_1 | 0) == 96) { + break label$17 + } + $4_1 = ($1_1 + 304 | 0) + $2_1 | 0; + $3_1 = $38(HEAP32[$4_1 >> 2], HEAP32[$4_1 + 4 >> 2]); + HEAP32[$4_1 >> 2] = $3_1; + HEAP32[$4_1 + 4 >> 2] = i64toi32_i32$HIGH_BITS; + $2_1 = $2_1 + 8 | 0; + continue; + }; + } + $36($1_1 + 496 | 0, $1_1 + 208 | 0, 96); + HEAP32[$1_1 + 616 >> 2] = 0; + HEAP32[$1_1 + 608 >> 2] = 0; + HEAP32[$1_1 + 612 >> 2] = 0; + HEAP32[$1_1 + 604 >> 2] = $23_1; + HEAP32[$1_1 + 592 >> 2] = 0; + HEAP32[$1_1 + 596 >> 2] = 12; + HEAP32[$1_1 + 600 >> 2] = $1_1 + 304; + while (1) { + $15($1_1 + 80 | 0, $1_1 + 496 | 0); + $3_1 = HEAP32[$1_1 + 80 >> 2]; + if ($3_1) { + $33($3_1, HEAP32[$1_1 + 88 >> 2], HEAP32[$1_1 + 92 >> 2]); + continue; + } + break; + }; + $36($1_1 + 400 | 0, $1_1 + 304 | 0, 96); + $5_1 = 0; + while (1) { + label$23 : { + if (($5_1 | 0) != 6) { + $2_1 = 0; + while (1) { + if (($2_1 | 0) == 96) { + break label$23 + } + $4_1 = ($1_1 + 400 | 0) + $2_1 | 0; + $3_1 = $38(HEAP32[$4_1 >> 2], HEAP32[$4_1 + 4 >> 2]); + HEAP32[$4_1 >> 2] = $3_1; + HEAP32[$4_1 + 4 >> 2] = i64toi32_i32$HIGH_BITS; + $2_1 = $2_1 + 8 | 0; + continue; + }; + } + $36($1_1 + 496 | 0, $1_1 + 304 | 0, 96); + HEAP32[$1_1 + 616 >> 2] = 0; + HEAP32[$1_1 + 608 >> 2] = 0; + HEAP32[$1_1 + 612 >> 2] = 0; + HEAP32[$1_1 + 604 >> 2] = $12_1; + HEAP32[$1_1 + 592 >> 2] = 0; + HEAP32[$1_1 + 596 >> 2] = 12; + HEAP32[$1_1 + 600 >> 2] = $1_1 + 400; + while (1) { + $15($1_1 - -64 | 0, $1_1 + 496 | 0); + $3_1 = HEAP32[$1_1 + 64 >> 2]; + if ($3_1) { + $33($3_1, HEAP32[$1_1 + 72 >> 2], HEAP32[$1_1 + 76 >> 2]); + continue; + } + break; + }; + $36($1_1 + 1680 | 0, $1_1 + 400 | 0, 96); + $5_1 = 0; + while (1) { + label$29 : { + if (($5_1 | 0) != 12) { + $2_1 = 0; + while (1) { + if (($2_1 | 0) == 96) { + break label$29 + } + $4_1 = ($1_1 + 1680 | 0) + $2_1 | 0; + $3_1 = $38(HEAP32[$4_1 >> 2], HEAP32[$4_1 + 4 >> 2]); + HEAP32[$4_1 >> 2] = $3_1; + HEAP32[$4_1 + 4 >> 2] = i64toi32_i32$HIGH_BITS; + $2_1 = $2_1 + 8 | 0; + continue; + }; + } + $36($1_1 + 496 | 0, $1_1 + 400 | 0, 96); + HEAP32[$1_1 + 616 >> 2] = 0; + HEAP32[$1_1 + 608 >> 2] = 0; + HEAP32[$1_1 + 612 >> 2] = 0; + HEAP32[$1_1 + 604 >> 2] = $22_1; + HEAP32[$1_1 + 592 >> 2] = 0; + HEAP32[$1_1 + 596 >> 2] = 12; + HEAP32[$1_1 + 600 >> 2] = $1_1 + 1680; + while (1) { + $15($1_1 + 48 | 0, $1_1 + 496 | 0); + $3_1 = HEAP32[$1_1 + 48 >> 2]; + if ($3_1) { + $33($3_1, HEAP32[$1_1 + 56 >> 2], HEAP32[$1_1 + 60 >> 2]); + continue; + } + break; + }; + $36($1_1 + 1784 | 0, $1_1 + 1680 | 0, 96); + $5_1 = 0; + while (1) { + label$35 : { + if (($5_1 | 0) != 6) { + $2_1 = 0; + while (1) { + if (($2_1 | 0) == 96) { + break label$35 + } + $4_1 = ($1_1 + 1784 | 0) + $2_1 | 0; + $3_1 = $38(HEAP32[$4_1 >> 2], HEAP32[$4_1 + 4 >> 2]); + HEAP32[$4_1 >> 2] = $3_1; + HEAP32[$4_1 + 4 >> 2] = i64toi32_i32$HIGH_BITS; + $2_1 = $2_1 + 8 | 0; + continue; + }; + } + $36($1_1 + 496 | 0, $1_1 + 304 | 0, 96); + HEAP32[$1_1 + 616 >> 2] = 0; + HEAP32[$1_1 + 608 >> 2] = 0; + HEAP32[$1_1 + 612 >> 2] = 0; + HEAP32[$1_1 + 604 >> 2] = $21_1; + HEAP32[$1_1 + 592 >> 2] = 0; + HEAP32[$1_1 + 596 >> 2] = 12; + HEAP32[$1_1 + 600 >> 2] = $1_1 + 1784; + while (1) { + $15($1_1 + 32 | 0, $1_1 + 496 | 0); + $3_1 = HEAP32[$1_1 + 32 >> 2]; + if ($3_1) { + $33($3_1, HEAP32[$1_1 + 40 >> 2], HEAP32[$1_1 + 44 >> 2]); + continue; + } + break; + }; + $36($1_1 + 1888 | 0, $1_1 + 1784 | 0, 96); + $5_1 = 0; + while (1) { + label$41 : { + if (($5_1 | 0) != 31) { + $2_1 = 0; + while (1) { + if (($2_1 | 0) == 96) { + break label$41 + } + $4_1 = ($1_1 + 1888 | 0) + $2_1 | 0; + $3_1 = $38(HEAP32[$4_1 >> 2], HEAP32[$4_1 + 4 >> 2]); + HEAP32[$4_1 >> 2] = $3_1; + HEAP32[$4_1 + 4 >> 2] = i64toi32_i32$HIGH_BITS; + $2_1 = $2_1 + 8 | 0; + continue; + }; + } + $36($1_1 + 496 | 0, $1_1 + 1784 | 0, 96); + HEAP32[$1_1 + 616 >> 2] = 0; + HEAP32[$1_1 + 608 >> 2] = 0; + HEAP32[$1_1 + 612 >> 2] = 0; + HEAP32[$1_1 + 604 >> 2] = $20_1; + HEAP32[$1_1 + 592 >> 2] = 0; + HEAP32[$1_1 + 596 >> 2] = 12; + HEAP32[$1_1 + 600 >> 2] = $1_1 + 1888; + while (1) { + $15($1_1 + 16 | 0, $1_1 + 496 | 0); + $3_1 = HEAP32[$1_1 + 16 >> 2]; + if ($3_1) { + $33($3_1, HEAP32[$1_1 + 24 >> 2], HEAP32[$1_1 + 28 >> 2]); + continue; + } + break; + }; + $2_1 = 0; + while (1) { + if (($2_1 | 0) != 96) { + $3_1 = ($1_1 + 1888 | 0) + $2_1 | 0; + $7_1 = $38(HEAP32[$3_1 >> 2], HEAP32[$3_1 + 4 >> 2]); + $3_1 = ($1_1 + 1784 | 0) + $2_1 | 0; + $6_1 = $38($38($14($7_1, i64toi32_i32$HIGH_BITS, HEAP32[$3_1 >> 2], HEAP32[$3_1 + 4 >> 2]), i64toi32_i32$HIGH_BITS), i64toi32_i32$HIGH_BITS); + $4_1 = i64toi32_i32$HIGH_BITS; + $3_1 = ($1_1 + 112 | 0) + $2_1 | 0; + $10_1 = HEAP32[$3_1 >> 2]; + $7_1 = HEAP32[$3_1 + 4 >> 2]; + $3_1 = ($1_1 + 208 | 0) + $2_1 | 0; + $5_1 = $2_1 + $9_1 | 0; + $3_1 = $14($14($10_1, $7_1, HEAP32[$3_1 >> 2], HEAP32[$3_1 + 4 >> 2]), i64toi32_i32$HIGH_BITS, HEAP32[$5_1 >> 2], HEAP32[$5_1 + 4 >> 2]); + (wasm2js_i32$0 = $5_1, wasm2js_i32$1 = $14($6_1, $4_1, $3_1, i64toi32_i32$HIGH_BITS)), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + HEAP32[$5_1 + 4 >> 2] = i64toi32_i32$HIGH_BITS; + $2_1 = $2_1 + 8 | 0; + continue; + } + break; + }; + $5_1 = $1_1 + 400 | 0; + $37($5_1, 96); + $36($1_1 + 496 | 0, 1050840, 1152); + HEAP32[$1_1 + 1672 >> 2] = 0; + HEAP32[$1_1 + 1664 >> 2] = 0; + HEAP32[$1_1 + 1668 >> 2] = 0; + HEAP32[$1_1 + 1660 >> 2] = $12_1; + HEAP32[$1_1 + 1648 >> 2] = 0; + HEAP32[$1_1 + 1652 >> 2] = 12; + $2_1 = $12_1; + while (1) { + label$49 : { + if (($2_1 | 0) == ($5_1 | 0)) { + break label$49 + } + HEAP32[$1_1 + 1656 >> 2] = $5_1 + 8; + $17($1_1 + 1888 | 0, $1_1 + 496 | 0); + if (!(HEAP32[$1_1 + 1888 >> 2] | HEAP32[$1_1 + 1892 >> 2])) { + break label$49 + } + $4_1 = $1_1 + 1784 | 0; + $36($4_1, $18_1, 96); + $36($17_1, $4_1, 96); + $2_1 = $1_1 + 1680 | 0; + $3_1 = $1_1 + 1888 | 0; + $36($2_1, $3_1, 100); + $36($4_1, $2_1, 100); + $36($3_1, $16_1, 96); + HEAP32[$1_1 + 2008 >> 2] = 0; + HEAP32[$1_1 + 2e3 >> 2] = 0; + HEAP32[$1_1 + 2004 >> 2] = 0; + HEAP32[$1_1 + 1996 >> 2] = $13_1; + HEAP32[$1_1 + 1984 >> 2] = 0; + HEAP32[$1_1 + 1988 >> 2] = 12; + $6_1 = HEAP32[$5_1 >> 2]; + $3_1 = HEAP32[$5_1 + 4 >> 2]; + $2_1 = $9_1; + $4_1 = $13_1; + while (1) { + label$51 : { + if (($2_1 | 0) == ($4_1 | 0)) { + break label$51 + } + HEAP32[$1_1 + 1992 >> 2] = $2_1 + 8; + $18($1_1, $1_1 + 1888 | 0); + if (!HEAP32[$1_1 >> 2]) { + break label$51 + } + $4_1 = $3_1; + $2_1 = $14(HEAP32[$1_1 + 8 >> 2], HEAP32[$1_1 + 12 >> 2], HEAP32[$2_1 >> 2], HEAP32[$2_1 + 4 >> 2]); + $3_1 = i64toi32_i32$HIGH_BITS; + $10_1 = $3_1; + $8_1 = $2_1 - 1 | 0; + $3_1 = ($8_1 | 0) != -1 ? $3_1 + 1 | 0 : $3_1; + $7_1 = $8_1; + $8_1 = ($10_1 | 0) == -1 & ($2_1 | 0) != 0; + $2_1 = $8_1 ? $7_1 : $2_1; + $11_1 = $2_1 + $6_1 | 0; + $7_1 = ($8_1 ? $3_1 : $10_1) + $4_1 | 0; + $7_1 = $2_1 >>> 0 > $11_1 >>> 0 ? $7_1 + 1 | 0 : $7_1; + $2_1 = $11_1; + $3_1 = $7_1; + $2_1 = $2_1 + (($4_1 | 0) == ($3_1 | 0) & $2_1 >>> 0 < $6_1 >>> 0 | $4_1 >>> 0 > $3_1 >>> 0 ? -1 : 0) | 0; + $3_1 = $11_1 >>> 0 > $2_1 >>> 0 ? $3_1 + 1 | 0 : $3_1; + $6_1 = $2_1; + HEAP32[$5_1 >> 2] = $2_1; + HEAP32[$5_1 + 4 >> 2] = $3_1; + $2_1 = HEAP32[$1_1 + 1992 >> 2]; + $4_1 = HEAP32[$1_1 + 1996 >> 2]; + continue; + } + break; + }; + $5_1 = HEAP32[$1_1 + 1656 >> 2]; + $2_1 = HEAP32[$1_1 + 1660 >> 2]; + continue; + } + break; + }; + $11_1 = $36($9_1, $1_1 + 400 | 0, 96); + $2_1 = 0; + while (1) { + if (($2_1 | 0) == 96) { + break label$2 + } + $3_1 = $2_1 + $11_1 | 0; + $8_1 = HEAP32[$3_1 + 4 >> 2]; + $6_1 = $2_1 + $15_1 | 0; + $4_1 = HEAP32[$6_1 + 4 >> 2]; + $5_1 = HEAP32[$6_1 >> 2]; + $6_1 = $5_1 - 1 | 0; + $7_1 = ($6_1 | 0) != -1 ? $4_1 + 1 | 0 : $4_1; + $9_1 = HEAP32[$3_1 >> 2]; + $10_1 = $5_1; + $5_1 = ($4_1 | 0) == -1 & ($5_1 | 0) != 0; + $6_1 = $5_1 ? $6_1 : $10_1; + $10_1 = $9_1 + $6_1 | 0; + $5_1 = ($5_1 ? $7_1 : $4_1) + $8_1 | 0; + $4_1 = $10_1; + $5_1 = $6_1 >>> 0 > $4_1 >>> 0 ? $5_1 + 1 | 0 : $5_1; + $4_1 = $4_1 + (($5_1 | 0) == ($8_1 | 0) & $4_1 >>> 0 < $9_1 >>> 0 | $5_1 >>> 0 < $8_1 >>> 0 ? -1 : 0) | 0; + $7_1 = $10_1 >>> 0 > $4_1 >>> 0 ? $5_1 + 1 | 0 : $5_1; + HEAP32[$3_1 >> 2] = $4_1; + HEAP32[$3_1 + 4 >> 2] = $7_1; + $2_1 = $2_1 + 8 | 0; + continue; + }; + } + $5_1 = $5_1 + 1 | 0; + continue; + }; + } + $5_1 = $5_1 + 1 | 0; + continue; + }; + } + $5_1 = $5_1 + 1 | 0; + continue; + }; + } + $5_1 = $5_1 + 1 | 0; + continue; + }; + } + $5_1 = $5_1 + 1 | 0; + continue; + }; + } + global$0 = $1_1 + 2016 | 0; + return; + } + $15_1 = $15_1 + 96 | 0; + $14_1 = $14_1 + 96 | 0; + continue; + }; + } + + function $2($0_1, $1_1, $2_1) { + $0_1 = $0_1 | 0; + $1_1 = $1_1 | 0; + $2_1 = $2_1 | 0; + var $3_1 = 0, $4_1 = 0, $5_1 = 0, $6_1 = 0, $7_1 = 0, $8_1 = 0, $9_1 = 0, $10_1 = 0, $11_1 = 0, $12_1 = 0, $13_1 = 0; + $3_1 = global$0 - 160 | 0; + global$0 = $3_1; + HEAP32[$3_1 + 80 >> 2] = $2_1; + HEAP32[$3_1 + 76 >> 2] = $2_1; + HEAP32[$3_1 + 72 >> 2] = $1_1; + $13($3_1 + 16 | 0, $3_1 + 72 | 0); + $2_1 = HEAP32[$3_1 + 16 >> 2]; + $1_1 = HEAP32[$3_1 + 20 >> 2]; + HEAP32[$3_1 + 32 >> 2] = $1_1; + HEAP32[$3_1 + 28 >> 2] = $1_1; + HEAP32[$3_1 + 24 >> 2] = $2_1; + label$1 : { + if ($1_1 >>> 0 <= 7) { + $2_1 = 1; + while (1) { + $24($3_1 + 24 | 0, $2_1); + $2_1 = 0; + $1_1 = HEAP32[$3_1 + 32 >> 2]; + if ($1_1 >>> 0 < 8) { + continue + } + break; + }; + break label$1; + } + label$4 : { + switch ($1_1 & 3) { + case 3: + $24($3_1 + 24 | 0, 1); + $1_1 = HEAP32[$3_1 + 32 >> 2]; + break label$1; + case 0: + break label$1; + default: + break label$4; + }; + } + $2_1 = 1; + while (1) { + $24($3_1 + 24 | 0, $2_1); + $2_1 = 0; + $1_1 = HEAP32[$3_1 + 32 >> 2]; + if ($1_1 & 3) { + continue + } + break; + }; + } + label$7 : { + label$8 : { + label$9 : { + label$10 : { + if (!($1_1 & 3 | $1_1 >>> 0 < 9 ? ($1_1 | 0) != 8 : 0)) { + $7_1 = HEAP32[$3_1 + 24 >> 2]; + $9_1 = HEAP32[$3_1 + 28 >> 2]; + $2_1 = 0; + HEAP32[$3_1 + 80 >> 2] = 0; + HEAP32[$3_1 + 72 >> 2] = 8; + HEAP32[$3_1 + 76 >> 2] = 0; + $10_1 = $7_1; + $11_1 = 8; + while (1) { + if ($1_1) { + $8_1 = HEAP32[$10_1 >> 2]; + $12_1 = $8_1; + $6_1 = HEAP32[$10_1 + 4 >> 2]; + $4_1 = $6_1; + $5_1 = $8_1 - 1 | 0; + $4_1 = ($5_1 | 0) != -1 ? $4_1 + 1 | 0 : $4_1; + $8_1 = !$8_1 & ($6_1 | 0) == -1 | ($6_1 | 0) != -1; + $5_1 = $8_1 ? $12_1 : $5_1; + $6_1 = $8_1 ? $6_1 : $4_1; + if (HEAP32[$3_1 + 76 >> 2] == ($2_1 | 0)) { + $4_1 = global$0 - 16 | 0; + global$0 = $4_1; + $11($4_1 + 8 | 0, $3_1 + 72 | 0, $2_1, 1); + $31(HEAP32[$4_1 + 12 >> 2]); + global$0 = $4_1 + 16 | 0; + $11_1 = HEAP32[$3_1 + 72 >> 2]; + $2_1 = HEAP32[$3_1 + 80 >> 2]; + } + $2_1 = ($2_1 << 3) + $11_1 | 0; + HEAP32[$2_1 >> 2] = $5_1; + HEAP32[$2_1 + 4 >> 2] = $6_1; + $2_1 = HEAP32[$3_1 + 80 >> 2] + 1 | 0; + HEAP32[$3_1 + 80 >> 2] = $2_1; + $1_1 = $1_1 - 1 | 0; + $10_1 = $10_1 + 8 | 0; + continue; + } + break; + }; + HEAP32[$3_1 + 48 >> 2] = HEAP32[$3_1 + 80 >> 2]; + $1_1 = HEAP32[$3_1 + 76 >> 2]; + HEAP32[$3_1 + 40 >> 2] = HEAP32[$3_1 + 72 >> 2]; + HEAP32[$3_1 + 44 >> 2] = $1_1; + if (!(!$9_1 | ($9_1 | 0) != ($9_1 & 536870911))) { + $32($7_1, $9_1 << 3) + } + $1_1 = HEAP32[$3_1 + 48 >> 2]; + if (($1_1 | 0) != 8) { + break label$10 + } + $9($3_1 + 72 | 0, HEAP32[$3_1 + 40 >> 2], 8); + break label$9; + } + HEAP32[$3_1 + 92 >> 2] = 1; + HEAP32[$3_1 + 76 >> 2] = 1; + HEAP32[$3_1 + 80 >> 2] = 0; + HEAP32[$3_1 + 72 >> 2] = 1049296; + HEAP32[$3_1 + 140 >> 2] = 1; + HEAP32[$3_1 + 120 >> 2] = $1_1; + HEAP32[$3_1 + 88 >> 2] = $3_1 + 136; + HEAP32[$3_1 + 136 >> 2] = $3_1 + 120; + $26($3_1 + 72 | 0, 1049392); + abort(); + } + $2_1 = ($1_1 >>> 2 | 0) - 1 | 0; + if (($2_1 | 0) != 1) { + break label$8 + } + $9($3_1 + 72 | 0, HEAP32[$3_1 + 40 >> 2], $1_1); + } + $2_1 = HEAP32[$3_1 + 96 >> 2]; + $4_1 = HEAP32[$3_1 + 100 >> 2]; + $6_1 = HEAP32[$3_1 + 88 >> 2]; + $10_1 = HEAP32[$3_1 + 92 >> 2]; + $7_1 = HEAP32[$3_1 + 80 >> 2]; + $9_1 = HEAP32[$3_1 + 84 >> 2]; + $11_1 = HEAP32[$3_1 + 72 >> 2]; + $8_1 = HEAP32[$3_1 + 76 >> 2]; + break label$7; + } + $4_1 = $3_1 + 72 | 0; + $16($4_1, $3_1 + 40 | 0, $1_1 - 8 | 0); + $10($3_1 + 56 | 0, $4_1); + $9($4_1, HEAP32[$3_1 + 56 >> 2], HEAP32[$3_1 + 64 >> 2]); + $10_1 = ($2_1 >>> 0 > 1 ? $2_1 : 1) - 1 | 0; + while (1) { + if ($10_1) { + $20($3_1 + 8 | 0, 4); + HEAP32[$3_1 + 108 >> 2] = HEAP32[$3_1 + 12 >> 2]; + $1_1 = HEAP32[$3_1 + 8 >> 2]; + HEAP32[$3_1 + 104 >> 2] = $1_1; + $2_1 = $3_1 + 80 | 0; + $9_1 = HEAP32[$2_1 >> 2]; + $2_1 = HEAP32[$2_1 + 4 >> 2]; + $4_1 = $3_1 + 88 | 0; + $7_1 = HEAP32[$4_1 >> 2]; + $11_1 = HEAP32[$4_1 + 4 >> 2]; + $4_1 = $3_1 + 96 | 0; + $6_1 = HEAP32[$4_1 >> 2]; + $8_1 = HEAP32[$4_1 + 4 >> 2]; + $4_1 = HEAP32[$3_1 + 76 >> 2]; + HEAP32[$1_1 >> 2] = HEAP32[$3_1 + 72 >> 2]; + HEAP32[$1_1 + 4 >> 2] = $4_1; + $4_1 = $1_1 + 24 | 0; + HEAP32[$4_1 >> 2] = $6_1; + HEAP32[$4_1 + 4 >> 2] = $8_1; + $6_1 = $1_1 + 16 | 0; + HEAP32[$6_1 >> 2] = $7_1; + HEAP32[$6_1 + 4 >> 2] = $11_1; + $7_1 = $1_1 + 8 | 0; + HEAP32[$7_1 >> 2] = $9_1; + HEAP32[$7_1 + 4 >> 2] = $2_1; + $2_1 = $3_1 + 136 | 0; + $16($2_1, $3_1 + 40 | 0, HEAP32[$3_1 + 48 >> 2] - 4 | 0); + $9_1 = $3_1 + 120 | 0; + $10($9_1, $2_1); + $22($9_1, 4); + $5_1 = HEAP32[$1_1 + 4 >> 2]; + $11_1 = HEAP32[$3_1 + 120 >> 2]; + $8_1 = HEAP32[$3_1 + 128 >> 2]; + $2_1 = $11_1 + ($8_1 << 3) | 0; + HEAP32[$2_1 >> 2] = HEAP32[$1_1 >> 2]; + HEAP32[$2_1 + 4 >> 2] = $5_1; + $5_1 = HEAP32[$7_1 + 4 >> 2]; + $1_1 = $2_1 + 8 | 0; + HEAP32[$1_1 >> 2] = HEAP32[$7_1 >> 2]; + HEAP32[$1_1 + 4 >> 2] = $5_1; + $7_1 = HEAP32[$6_1 + 4 >> 2]; + $1_1 = $2_1 + 16 | 0; + HEAP32[$1_1 >> 2] = HEAP32[$6_1 >> 2]; + HEAP32[$1_1 + 4 >> 2] = $7_1; + $1_1 = $2_1 + 24 | 0; + $2_1 = HEAP32[$4_1 + 4 >> 2]; + HEAP32[$1_1 >> 2] = HEAP32[$4_1 >> 2]; + HEAP32[$1_1 + 4 >> 2] = $2_1; + HEAP32[$3_1 + 112 >> 2] = 0; + $1_1 = $8_1 + 4 | 0; + HEAP32[$3_1 + 128 >> 2] = $1_1; + $9($3_1 + 72 | 0, $11_1, $1_1); + $10_1 = $10_1 - 1 | 0; + $29($9_1); + $29($3_1 + 104 | 0); + continue; + } else { + $2_1 = HEAP32[$3_1 + 96 >> 2]; + $4_1 = HEAP32[$3_1 + 100 >> 2]; + $6_1 = HEAP32[$3_1 + 88 >> 2]; + $10_1 = HEAP32[$3_1 + 92 >> 2]; + $7_1 = HEAP32[$3_1 + 80 >> 2]; + $9_1 = HEAP32[$3_1 + 84 >> 2]; + $11_1 = HEAP32[$3_1 + 72 >> 2]; + $8_1 = HEAP32[$3_1 + 76 >> 2]; + $29($3_1 + 56 | 0); + } + break; + }; + } + $1_1 = $0(32); + if ($1_1) { + $5_1 = $2_1; + $2_1 = $1_1; + $1_1 = $4_1; + $13_1 = $5_1 - 1 | 0; + $1_1 = ($13_1 | 0) != -1 ? $1_1 + 1 | 0 : $1_1; + $12_1 = $5_1; + $5_1 = ($4_1 | 0) == -1 & ($5_1 | 0) != 0; + HEAP32[$2_1 + 24 >> 2] = $5_1 ? $13_1 : $12_1; + HEAP32[$2_1 + 28 >> 2] = $5_1 ? $1_1 : $4_1; + $4_1 = $10_1; + $1_1 = $6_1 - 1 | 0; + $4_1 = ($1_1 | 0) != -1 ? $4_1 + 1 | 0 : $4_1; + $5_1 = $1_1; + $1_1 = ($10_1 | 0) == -1 & ($6_1 | 0) != 0; + HEAP32[$2_1 + 16 >> 2] = $1_1 ? $5_1 : $6_1; + HEAP32[$2_1 + 20 >> 2] = $1_1 ? $4_1 : $10_1; + $1_1 = $9_1; + $4_1 = $7_1 - 1 | 0; + $1_1 = ($4_1 | 0) != -1 ? $1_1 + 1 | 0 : $1_1; + $5_1 = $4_1; + $4_1 = ($9_1 | 0) == -1 & ($7_1 | 0) != 0; + HEAP32[$2_1 + 8 >> 2] = $4_1 ? $5_1 : $7_1; + HEAP32[$2_1 + 12 >> 2] = $4_1 ? $1_1 : $9_1; + $4_1 = $8_1; + $1_1 = $11_1 - 1 | 0; + $4_1 = ($1_1 | 0) != -1 ? $4_1 + 1 | 0 : $4_1; + $5_1 = $1_1; + $1_1 = ($8_1 | 0) == -1 & ($11_1 | 0) != 0; + HEAP32[$2_1 >> 2] = $1_1 ? $5_1 : $11_1; + HEAP32[$2_1 + 4 >> 2] = $1_1 ? $4_1 : $8_1; + $29($3_1 + 40 | 0); + HEAP32[$3_1 + 76 >> 2] = 4; + HEAP32[$3_1 + 80 >> 2] = 4; + HEAP32[$3_1 + 72 >> 2] = $2_1; + $13($3_1, $3_1 + 72 | 0); + $1_1 = HEAP32[$3_1 + 4 >> 2]; + HEAP32[$0_1 >> 2] = HEAP32[$3_1 >> 2]; + HEAP32[$0_1 + 4 >> 2] = $1_1; + global$0 = $3_1 + 160 | 0; + return; + } + abort(); + } + + function $3($0_1, $1_1, $2_1, $3_1) { + var $4_1 = 0, $5_1 = 0, $6_1 = 0, $7_1 = 0, $8_1 = 0, $9_1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; + label$1 : { + label$2 : { + label$3 : { + label$4 : { + label$5 : { + if ($2_1 >>> 0 >= 9) { + $2_1 = $6($3_1, $2_1); + if ($2_1) { + break label$5 + } + return 0; + } + $2_1 = 0; + if ($3_1 >>> 0 > 4294901708) { + break label$3 + } + $1_1 = $3_1 >>> 0 < 11 ? 16 : $3_1 + 11 & -8; + $5_1 = $0_1 - 4 | 0; + $6_1 = HEAP32[$5_1 >> 2]; + $4_1 = $6_1 & -8; + label$7 : { + label$8 : { + label$9 : { + label$10 : { + if ($6_1 & 3) { + $8_1 = $0_1 - 8 | 0; + if ($1_1 >>> 0 <= $4_1 >>> 0) { + break label$10 + } + $7_1 = $4_1 + $8_1 | 0; + if (($7_1 | 0) == HEAP32[263103]) { + break label$9 + } + if (($7_1 | 0) == HEAP32[263102]) { + break label$8 + } + $6_1 = HEAP32[$7_1 + 4 >> 2]; + if ($6_1 & 2) { + break label$4 + } + $9_1 = $6_1 & -8; + $4_1 = $4_1 + $9_1 | 0; + if ($4_1 >>> 0 >= $1_1 >>> 0) { + break label$7 + } + break label$4; + } + if ($1_1 >>> 0 < 256 | $4_1 >>> 0 < ($1_1 | 4) >>> 0 | $4_1 - $1_1 >>> 0 >= 131073) { + break label$4 + } + break label$1; + } + $2_1 = $4_1 - $1_1 | 0; + if ($2_1 >>> 0 < 16) { + break label$1 + } + HEAP32[$5_1 >> 2] = $1_1 | $6_1 & 1 | 2; + break label$2; + } + $4_1 = $4_1 + HEAP32[263101] | 0; + if ($4_1 >>> 0 <= $1_1 >>> 0) { + break label$4 + } + HEAP32[$5_1 >> 2] = $1_1 | $6_1 & 1 | 2; + $2_1 = $1_1 + $8_1 | 0; + $1_1 = $4_1 - $1_1 | 0; + HEAP32[$2_1 + 4 >> 2] = $1_1 | 1; + HEAP32[263101] = $1_1; + HEAP32[263103] = $2_1; + break label$1; + } + $4_1 = $4_1 + HEAP32[263100] | 0; + if ($4_1 >>> 0 < $1_1 >>> 0) { + break label$4 + } + $3_1 = $4_1 - $1_1 | 0; + label$12 : { + if ($3_1 >>> 0 <= 15) { + HEAP32[$5_1 >> 2] = $4_1 | $6_1 & 1 | 2; + $1_1 = $4_1 + $8_1 | 0; + HEAP32[$1_1 + 4 >> 2] = HEAP32[$1_1 + 4 >> 2] | 1; + $3_1 = 0; + break label$12; + } + HEAP32[$5_1 >> 2] = $1_1 | $6_1 & 1 | 2; + $2_1 = $1_1 + $8_1 | 0; + HEAP32[$2_1 + 4 >> 2] = $3_1 | 1; + $1_1 = $2_1 + $3_1 | 0; + HEAP32[$1_1 >> 2] = $3_1; + HEAP32[$1_1 + 4 >> 2] = HEAP32[$1_1 + 4 >> 2] & -2; + } + HEAP32[263102] = $2_1; + HEAP32[263100] = $3_1; + break label$1; + } + $2_1 = $4_1 - $1_1 | 0; + label$14 : { + if ($9_1 >>> 0 >= 256) { + $8($7_1); + break label$14; + } + $3_1 = HEAP32[$7_1 + 12 >> 2]; + $7_1 = HEAP32[$7_1 + 8 >> 2]; + if (($3_1 | 0) != ($7_1 | 0)) { + HEAP32[$7_1 + 12 >> 2] = $3_1; + HEAP32[$3_1 + 8 >> 2] = $7_1; + break label$14; + } + (wasm2js_i32$0 = 1052e3, wasm2js_i32$1 = HEAP32[263e3] & __wasm_rotl_i32($6_1 >>> 3 | 0)), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + } + if ($2_1 >>> 0 >= 16) { + HEAP32[$5_1 >> 2] = $1_1 | HEAP32[$5_1 >> 2] & 1 | 2; + break label$2; + } + HEAP32[$5_1 >> 2] = $4_1 | HEAP32[$5_1 >> 2] & 1 | 2; + $1_1 = $4_1 + $8_1 | 0; + HEAP32[$1_1 + 4 >> 2] = HEAP32[$1_1 + 4 >> 2] | 1; + break label$1; + } + $36($2_1, $0_1, $1_1 >>> 0 > $3_1 >>> 0 ? $3_1 : $1_1); + $4($0_1); + break label$3; + } + $1_1 = $0($3_1); + if (!$1_1) { + break label$3 + } + $2_1 = $1_1; + $1_1 = HEAP32[$5_1 >> 2]; + $1_1 = ($1_1 & 3 ? -4 : -8) + ($1_1 & -8) | 0; + $1_1 = $36($2_1, $0_1, $1_1 >>> 0 > $3_1 >>> 0 ? $3_1 : $1_1); + $4($0_1); + return $1_1; + } + return $2_1; + } + $1_1 = $1_1 + $8_1 | 0; + HEAP32[$1_1 + 4 >> 2] = $2_1 | 3; + $3_1 = $1_1 + $2_1 | 0; + HEAP32[$3_1 + 4 >> 2] = HEAP32[$3_1 + 4 >> 2] | 1; + $5($1_1, $2_1); + } + return $0_1; + } + + function $4($0_1) { + var $1_1 = 0, $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; + $1_1 = $0_1 - 8 | 0; + $3_1 = HEAP32[$0_1 - 4 >> 2]; + $0_1 = $3_1 & -8; + $2_1 = $1_1 + $0_1 | 0; + label$1 : { + label$2 : { + label$3 : { + if ($3_1 & 1) { + break label$3 + } + if (!($3_1 & 3)) { + break label$2 + } + $3_1 = HEAP32[$1_1 >> 2]; + $0_1 = $3_1 + $0_1 | 0; + $1_1 = $1_1 - $3_1 | 0; + if (($1_1 | 0) == HEAP32[263102]) { + if ((HEAP32[$2_1 + 4 >> 2] & 3) != 3) { + break label$3 + } + HEAP32[263100] = $0_1; + HEAP32[$2_1 + 4 >> 2] = HEAP32[$2_1 + 4 >> 2] & -2; + HEAP32[$1_1 + 4 >> 2] = $0_1 | 1; + HEAP32[$0_1 + $1_1 >> 2] = $0_1; + return; + } + if ($3_1 >>> 0 >= 256) { + $8($1_1); + break label$3; + } + $4_1 = HEAP32[$1_1 + 8 >> 2]; + $5_1 = HEAP32[$1_1 + 12 >> 2]; + if (($4_1 | 0) != ($5_1 | 0)) { + HEAP32[$4_1 + 12 >> 2] = $5_1; + HEAP32[$5_1 + 8 >> 2] = $4_1; + break label$3; + } + (wasm2js_i32$0 = 1052e3, wasm2js_i32$1 = HEAP32[263e3] & __wasm_rotl_i32($3_1 >>> 3 | 0)), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + } + label$7 : { + $3_1 = HEAP32[$2_1 + 4 >> 2]; + if ($3_1 & 2) { + HEAP32[$2_1 + 4 >> 2] = $3_1 & -2; + HEAP32[$1_1 + 4 >> 2] = $0_1 | 1; + HEAP32[$0_1 + $1_1 >> 2] = $0_1; + break label$7; + } + label$9 : { + label$10 : { + label$11 : { + if (($2_1 | 0) != HEAP32[263103]) { + if (($2_1 | 0) != HEAP32[263102]) { + break label$11 + } + HEAP32[263102] = $1_1; + $0_1 = HEAP32[263100] + $0_1 | 0; + HEAP32[263100] = $0_1; + HEAP32[$1_1 + 4 >> 2] = $0_1 | 1; + HEAP32[$0_1 + $1_1 >> 2] = $0_1; + return; + } + HEAP32[263103] = $1_1; + $0_1 = HEAP32[263101] + $0_1 | 0; + HEAP32[263101] = $0_1; + HEAP32[$1_1 + 4 >> 2] = $0_1 | 1; + if (HEAP32[263102] == ($1_1 | 0)) { + break label$10 + } + break label$9; + } + $4_1 = $3_1 & -8; + $0_1 = $4_1 + $0_1 | 0; + label$13 : { + if ($4_1 >>> 0 >= 256) { + $8($2_1); + break label$13; + } + $4_1 = HEAP32[$2_1 + 12 >> 2]; + $2_1 = HEAP32[$2_1 + 8 >> 2]; + if (($4_1 | 0) != ($2_1 | 0)) { + HEAP32[$2_1 + 12 >> 2] = $4_1; + HEAP32[$4_1 + 8 >> 2] = $2_1; + break label$13; + } + (wasm2js_i32$0 = 1052e3, wasm2js_i32$1 = HEAP32[263e3] & __wasm_rotl_i32($3_1 >>> 3 | 0)), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + } + HEAP32[$1_1 + 4 >> 2] = $0_1 | 1; + HEAP32[$0_1 + $1_1 >> 2] = $0_1; + if (HEAP32[263102] != ($1_1 | 0)) { + break label$7 + } + HEAP32[263100] = $0_1; + break label$2; + } + HEAP32[263100] = 0; + HEAP32[263102] = 0; + } + if ($0_1 >>> 0 <= HEAPU32[263110]) { + break label$2 + } + $0_1 = HEAP32[263103]; + if (!$0_1) { + break label$2 + } + label$16 : { + if (HEAPU32[263101] < 41) { + break label$16 + } + $1_1 = 1052424; + while (1) { + $2_1 = HEAP32[$1_1 >> 2]; + if ($2_1 >>> 0 <= $0_1 >>> 0 & $0_1 >>> 0 < $2_1 + HEAP32[$1_1 + 4 >> 2] >>> 0) { + break label$16 + } + $1_1 = HEAP32[$1_1 + 8 >> 2]; + if ($1_1) { + continue + } + break; + }; + } + $23(); + if (HEAPU32[263101] <= HEAPU32[263110]) { + break label$2 + } + HEAP32[263110] = -1; + return; + } + if ($0_1 >>> 0 < 256) { + break label$1 + } + $7($1_1, $0_1); + $0_1 = HEAP32[263112] - 1 | 0; + HEAP32[263112] = $0_1; + if ($0_1) { + break label$2 + } + $23(); + return; + } + return; + } + $2_1 = $0_1 >>> 3 | 0; + $0_1 = ($2_1 << 3) + 1052008 | 0; + $3_1 = HEAP32[263e3]; + $2_1 = 1 << $2_1; + if ($3_1 & $2_1) { + $2_1 = HEAP32[$0_1 + 8 >> 2] + } else { + HEAP32[263e3] = $2_1 | $3_1; + $2_1 = $0_1; + } + HEAP32[$0_1 + 8 >> 2] = $1_1; + HEAP32[$2_1 + 12 >> 2] = $1_1; + HEAP32[$1_1 + 12 >> 2] = $0_1; + HEAP32[$1_1 + 8 >> 2] = $2_1; + } + + function $5($0_1, $1_1) { + var $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; + $2_1 = $0_1 + $1_1 | 0; + label$1 : { + $3_1 = HEAP32[$0_1 + 4 >> 2]; + label$2 : { + label$3 : { + if ($3_1 & 1) { + break label$3 + } + if (!($3_1 & 3)) { + break label$2 + } + $3_1 = HEAP32[$0_1 >> 2]; + $1_1 = $3_1 + $1_1 | 0; + $0_1 = $0_1 - $3_1 | 0; + if (($0_1 | 0) == HEAP32[263102]) { + if ((HEAP32[$2_1 + 4 >> 2] & 3) != 3) { + break label$3 + } + HEAP32[263100] = $1_1; + HEAP32[$2_1 + 4 >> 2] = HEAP32[$2_1 + 4 >> 2] & -2; + HEAP32[$0_1 + 4 >> 2] = $1_1 | 1; + HEAP32[$2_1 >> 2] = $1_1; + return; + } + if ($3_1 >>> 0 >= 256) { + $8($0_1); + break label$3; + } + $4_1 = HEAP32[$0_1 + 8 >> 2]; + $5_1 = HEAP32[$0_1 + 12 >> 2]; + if (($4_1 | 0) != ($5_1 | 0)) { + HEAP32[$4_1 + 12 >> 2] = $5_1; + HEAP32[$5_1 + 8 >> 2] = $4_1; + break label$3; + } + (wasm2js_i32$0 = 1052e3, wasm2js_i32$1 = HEAP32[263e3] & __wasm_rotl_i32($3_1 >>> 3 | 0)), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + } + $3_1 = HEAP32[$2_1 + 4 >> 2]; + if ($3_1 & 2) { + HEAP32[$2_1 + 4 >> 2] = $3_1 & -2; + HEAP32[$0_1 + 4 >> 2] = $1_1 | 1; + HEAP32[$0_1 + $1_1 >> 2] = $1_1; + break label$1; + } + label$8 : { + if (($2_1 | 0) != HEAP32[263103]) { + if (($2_1 | 0) != HEAP32[263102]) { + break label$8 + } + HEAP32[263102] = $0_1; + $1_1 = HEAP32[263100] + $1_1 | 0; + HEAP32[263100] = $1_1; + HEAP32[$0_1 + 4 >> 2] = $1_1 | 1; + HEAP32[$0_1 + $1_1 >> 2] = $1_1; + return; + } + HEAP32[263103] = $0_1; + $1_1 = HEAP32[263101] + $1_1 | 0; + HEAP32[263101] = $1_1; + HEAP32[$0_1 + 4 >> 2] = $1_1 | 1; + if (HEAP32[263102] != ($0_1 | 0)) { + break label$2 + } + HEAP32[263100] = 0; + HEAP32[263102] = 0; + return; + } + $4_1 = $3_1 & -8; + $1_1 = $4_1 + $1_1 | 0; + label$10 : { + if ($4_1 >>> 0 >= 256) { + $8($2_1); + break label$10; + } + $4_1 = HEAP32[$2_1 + 12 >> 2]; + $2_1 = HEAP32[$2_1 + 8 >> 2]; + if (($4_1 | 0) != ($2_1 | 0)) { + HEAP32[$2_1 + 12 >> 2] = $4_1; + HEAP32[$4_1 + 8 >> 2] = $2_1; + break label$10; + } + (wasm2js_i32$0 = 1052e3, wasm2js_i32$1 = HEAP32[263e3] & __wasm_rotl_i32($3_1 >>> 3 | 0)), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + } + HEAP32[$0_1 + 4 >> 2] = $1_1 | 1; + HEAP32[$0_1 + $1_1 >> 2] = $1_1; + if (HEAP32[263102] != ($0_1 | 0)) { + break label$1 + } + HEAP32[263100] = $1_1; + } + return; + } + if ($1_1 >>> 0 >= 256) { + $7($0_1, $1_1); + return; + } + $2_1 = $1_1 >>> 3 | 0; + $1_1 = ($2_1 << 3) + 1052008 | 0; + $3_1 = HEAP32[263e3]; + $2_1 = 1 << $2_1; + if ($3_1 & $2_1) { + $2_1 = HEAP32[$1_1 + 8 >> 2] + } else { + HEAP32[263e3] = $2_1 | $3_1; + $2_1 = $1_1; + } + HEAP32[$1_1 + 8 >> 2] = $0_1; + HEAP32[$2_1 + 12 >> 2] = $0_1; + HEAP32[$0_1 + 12 >> 2] = $1_1; + HEAP32[$0_1 + 8 >> 2] = $2_1; + } + + function $6($0_1, $1_1) { + var $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0, $6_1 = 0, $7_1 = 0; + label$1 : { + label$2 : { + if ($1_1 >>> 0 >= 9) { + $1_1 = $1_1 >>> 0 > 16 ? $1_1 : 16; + if (-65587 - $1_1 >>> 0 <= $0_1 >>> 0) { + break label$2 + } + $4_1 = $0_1 >>> 0 < 11 ? 16 : $0_1 + 11 & -8; + $2_1 = $0(($4_1 + $1_1 | 0) + 12 | 0); + if (!$2_1) { + break label$2 + } + $0_1 = $2_1 - 8 | 0; + $3_1 = $1_1 - 1 | 0; + label$4 : { + if (!($3_1 & $2_1)) { + $1_1 = $0_1; + break label$4; + } + $5_1 = $2_1 - 4 | 0; + $6_1 = HEAP32[$5_1 >> 2]; + $7_1 = $1_1; + $1_1 = ($2_1 + $3_1 & 0 - $1_1) - 8 | 0; + $1_1 = ($1_1 - $0_1 >>> 0 > 16 ? 0 : $7_1) + $1_1 | 0; + $2_1 = $1_1 - $0_1 | 0; + $3_1 = ($6_1 & -8) - $2_1 | 0; + if ($6_1 & 3) { + HEAP32[$1_1 + 4 >> 2] = $3_1 | HEAP32[$1_1 + 4 >> 2] & 1 | 2; + $3_1 = $1_1 + $3_1 | 0; + HEAP32[$3_1 + 4 >> 2] = HEAP32[$3_1 + 4 >> 2] | 1; + HEAP32[$5_1 >> 2] = $2_1 | HEAP32[$5_1 >> 2] & 1 | 2; + $3_1 = $0_1 + $2_1 | 0; + HEAP32[$3_1 + 4 >> 2] = HEAP32[$3_1 + 4 >> 2] | 1; + $5($0_1, $2_1); + break label$4; + } + $0_1 = HEAP32[$0_1 >> 2]; + HEAP32[$1_1 + 4 >> 2] = $3_1; + HEAP32[$1_1 >> 2] = $0_1 + $2_1; + } + $0_1 = HEAP32[$1_1 + 4 >> 2]; + if (!($0_1 & 3)) { + break label$1 + } + $2_1 = $0_1 & -8; + if ($2_1 >>> 0 <= $4_1 + 16 >>> 0) { + break label$1 + } + HEAP32[$1_1 + 4 >> 2] = $4_1 | $0_1 & 1 | 2; + $0_1 = $1_1 + $4_1 | 0; + $4_1 = $2_1 - $4_1 | 0; + HEAP32[$0_1 + 4 >> 2] = $4_1 | 3; + $2_1 = $1_1 + $2_1 | 0; + HEAP32[$2_1 + 4 >> 2] = HEAP32[$2_1 + 4 >> 2] | 1; + $5($0_1, $4_1); + break label$1; + } + $3_1 = $0($0_1); + } + return $3_1; + } + return $1_1 + 8 | 0; + } + + function $7($0_1, $1_1) { + var $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0; + $2_1 = 31; + HEAP32[$0_1 + 16 >> 2] = 0; + HEAP32[$0_1 + 20 >> 2] = 0; + if ($1_1 >>> 0 <= 16777215) { + $3_1 = Math_clz32($1_1 >>> 8 | 0); + $2_1 = (($1_1 >>> 6 - $3_1 & 1) - ($3_1 << 1) | 0) + 62 | 0; + } + HEAP32[$0_1 + 28 >> 2] = $2_1; + $4_1 = ($2_1 << 2) + 1052272 | 0; + label$2 : { + label$3 : { + label$4 : { + label$5 : { + $5_1 = HEAP32[263001]; + $3_1 = 1 << $2_1; + if ($5_1 & $3_1) { + $3_1 = HEAP32[$4_1 >> 2]; + if ((HEAP32[$3_1 + 4 >> 2] & -8) != ($1_1 | 0)) { + break label$5 + } + $2_1 = $3_1; + break label$4; + } + HEAP32[263001] = $3_1 | $5_1; + HEAP32[$4_1 >> 2] = $0_1; + HEAP32[$0_1 + 24 >> 2] = $4_1; + break label$2; + } + $4_1 = $1_1 << (($2_1 | 0) == 31 ? 0 : 25 - ($2_1 >>> 1 | 0) & 31); + while (1) { + $5_1 = (($4_1 >>> 29 & 4) + $3_1 | 0) + 16 | 0; + $2_1 = HEAP32[$5_1 >> 2]; + if (!$2_1) { + break label$3 + } + $4_1 = $4_1 << 1; + $3_1 = $2_1; + if ((HEAP32[$2_1 + 4 >> 2] & -8) != ($1_1 | 0)) { + continue + } + break; + }; + } + $1_1 = HEAP32[$2_1 + 8 >> 2]; + HEAP32[$1_1 + 12 >> 2] = $0_1; + HEAP32[$2_1 + 8 >> 2] = $0_1; + HEAP32[$0_1 + 24 >> 2] = 0; + HEAP32[$0_1 + 12 >> 2] = $2_1; + HEAP32[$0_1 + 8 >> 2] = $1_1; + return; + } + HEAP32[$5_1 >> 2] = $0_1; + HEAP32[$0_1 + 24 >> 2] = $3_1; + } + HEAP32[$0_1 + 12 >> 2] = $0_1; + HEAP32[$0_1 + 8 >> 2] = $0_1; + } + + function $8($0_1) { + var $1_1 = 0, $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; + $4_1 = HEAP32[$0_1 + 24 >> 2]; + label$1 : { + label$2 : { + $1_1 = HEAP32[$0_1 + 12 >> 2]; + if (($1_1 | 0) == ($0_1 | 0)) { + $1_1 = $0_1 + 20 | 0; + $3_1 = HEAP32[$1_1 >> 2]; + $2_1 = HEAP32[($3_1 ? 20 : 16) + $0_1 >> 2]; + if ($2_1) { + break label$2 + } + $1_1 = 0; + break label$1; + } + $2_1 = HEAP32[$0_1 + 8 >> 2]; + HEAP32[$2_1 + 12 >> 2] = $1_1; + HEAP32[$1_1 + 8 >> 2] = $2_1; + break label$1; + } + $3_1 = $3_1 ? $1_1 : $0_1 + 16 | 0; + while (1) { + $5_1 = $3_1; + $1_1 = $2_1; + $3_1 = $1_1 + 20 | 0; + $2_1 = HEAP32[$3_1 >> 2]; + if (!$2_1) { + $3_1 = $1_1 + 16 | 0; + $2_1 = HEAP32[$1_1 + 16 >> 2]; + } + if ($2_1) { + continue + } + break; + }; + HEAP32[$5_1 >> 2] = 0; + } + label$6 : { + if (!$4_1) { + break label$6 + } + label$7 : { + $2_1 = (HEAP32[$0_1 + 28 >> 2] << 2) + 1052272 | 0; + if (HEAP32[$2_1 >> 2] != ($0_1 | 0)) { + HEAP32[(HEAP32[$4_1 + 16 >> 2] == ($0_1 | 0) ? 16 : 20) + $4_1 >> 2] = $1_1; + if ($1_1) { + break label$7 + } + break label$6; + } + HEAP32[$2_1 >> 2] = $1_1; + if ($1_1) { + break label$7 + } + (wasm2js_i32$0 = 1052004, wasm2js_i32$1 = HEAP32[263001] & __wasm_rotl_i32(HEAP32[$0_1 + 28 >> 2])), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + return; + } + HEAP32[$1_1 + 24 >> 2] = $4_1; + $2_1 = HEAP32[$0_1 + 16 >> 2]; + if ($2_1) { + HEAP32[$1_1 + 16 >> 2] = $2_1; + HEAP32[$2_1 + 24 >> 2] = $1_1; + } + $0_1 = HEAP32[$0_1 + 20 >> 2]; + if (!$0_1) { + break label$6 + } + HEAP32[$1_1 + 20 >> 2] = $0_1; + HEAP32[$0_1 + 24 >> 2] = $1_1; + } + } + + function $9($0_1, $1_1, $2_1) { + var $3_1 = 0, $4_1 = 0, $5_1 = 0, $6_1 = 0, $7_1 = 0, $8_1 = 0, $9_1 = 0, $10_1 = 0, $11_1 = 0, $12_1 = 0; + $5_1 = global$0 - 96 | 0; + global$0 = $5_1; + $37($5_1 + 8 | 0, 88); + HEAP32[$5_1 >> 2] = $2_1; + HEAP32[$5_1 + 4 >> 2] = 0; + $2_1 = $2_1 << 3; + label$1 : { + while (1) { + if ($2_1) { + $4_1 = $8_1 + 4 | 0; + if ($4_1 >>> 0 >= 12) { + break label$1 + } + $4_1 = ($4_1 << 3) + $5_1 | 0; + $10_1 = HEAP32[$4_1 + 4 >> 2]; + $7_1 = HEAP32[$1_1 + 4 >> 2]; + $11_1 = $7_1; + $3_1 = HEAP32[$1_1 >> 2]; + $6_1 = $3_1 - 1 | 0; + $7_1 = ($6_1 | 0) != -1 ? $7_1 + 1 | 0 : $7_1; + $12_1 = HEAP32[$4_1 >> 2]; + $9_1 = $3_1; + $3_1 = ($11_1 | 0) == -1 & ($3_1 | 0) != 0; + $6_1 = $3_1 ? $6_1 : $9_1; + $9_1 = $12_1 + $6_1 | 0; + $3_1 = ($3_1 ? $7_1 : $11_1) + $10_1 | 0; + $3_1 = $6_1 >>> 0 > $9_1 >>> 0 ? $3_1 + 1 | 0 : $3_1; + $6_1 = $9_1; + $6_1 = $6_1 + (($3_1 | 0) == ($10_1 | 0) & $6_1 >>> 0 < $12_1 >>> 0 | $3_1 >>> 0 < $10_1 >>> 0 ? -1 : 0) | 0; + $7_1 = $9_1 >>> 0 > $6_1 >>> 0 ? $3_1 + 1 | 0 : $3_1; + HEAP32[$4_1 >> 2] = $6_1; + HEAP32[$4_1 + 4 >> 2] = $7_1; + $8_1 = $8_1 + 1 | 0; + if (!($8_1 & 7)) { + $1($5_1); + $8_1 = 0; + } + $1_1 = $1_1 + 8 | 0; + $2_1 = $2_1 - 8 | 0; + continue; + } + break; + }; + if ($8_1) { + $1($5_1) + } + $1_1 = HEAP32[$5_1 + 36 >> 2]; + HEAP32[$0_1 >> 2] = HEAP32[$5_1 + 32 >> 2]; + HEAP32[$0_1 + 4 >> 2] = $1_1; + $2_1 = $5_1 + 56 | 0; + $1_1 = HEAP32[$2_1 + 4 >> 2]; + $4_1 = $0_1 + 24 | 0; + HEAP32[$4_1 >> 2] = HEAP32[$2_1 >> 2]; + HEAP32[$4_1 + 4 >> 2] = $1_1; + $2_1 = $5_1 + 48 | 0; + $1_1 = HEAP32[$2_1 + 4 >> 2]; + $4_1 = $0_1 + 16 | 0; + HEAP32[$4_1 >> 2] = HEAP32[$2_1 >> 2]; + HEAP32[$4_1 + 4 >> 2] = $1_1; + $2_1 = $0_1 + 8 | 0; + $1_1 = $5_1 + 40 | 0; + $0_1 = HEAP32[$1_1 + 4 >> 2]; + HEAP32[$2_1 >> 2] = HEAP32[$1_1 >> 2]; + HEAP32[$2_1 + 4 >> 2] = $0_1; + global$0 = $5_1 + 96 | 0; + return; + } + $0_1 = global$0 - 48 | 0; + global$0 = $0_1; + HEAP32[$0_1 + 4 >> 2] = 12; + HEAP32[$0_1 >> 2] = $4_1; + HEAP32[$0_1 + 28 >> 2] = 2; + HEAP32[$0_1 + 44 >> 2] = 1; + HEAP32[$0_1 + 12 >> 2] = 2; + HEAP32[$0_1 + 16 >> 2] = 0; + HEAP32[$0_1 + 8 >> 2] = 1048700; + HEAP32[$0_1 + 36 >> 2] = 1; + HEAP32[$0_1 + 24 >> 2] = $0_1 + 32; + HEAP32[$0_1 + 40 >> 2] = $0_1; + HEAP32[$0_1 + 32 >> 2] = $0_1 + 4; + $26($0_1 + 8 | 0, 1049172); + abort(); + } + + function $10($0_1, $1_1) { + var $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0, $6_1 = 0, $7_1 = 0, $8_1 = 0, $9_1 = 0, $10_1 = 0, $11_1 = 0, $12_1 = 0, $13_1 = 0; + $8_1 = global$0 - 16 | 0; + global$0 = $8_1; + $11_1 = HEAP32[$1_1 + 16 >> 2]; + $12_1 = HEAP32[$1_1 + 4 >> 2]; + $4_1 = HEAP32[$1_1 >> 2]; + $5_1 = HEAP32[$1_1 + 12 >> 2]; + $1_1 = HEAP32[$1_1 + 8 >> 2]; + $3_1 = $5_1 - $1_1 >>> 3 | 0; + $20($8_1 + 8 | 0, $3_1); + $2_1 = HEAP32[$8_1 + 12 >> 2]; + $6_1 = HEAP32[$8_1 + 8 >> 2]; + HEAP32[$0_1 + 8 >> 2] = 0; + HEAP32[$0_1 >> 2] = $6_1; + HEAP32[$0_1 + 4 >> 2] = $2_1; + $22($0_1, $3_1); + $6_1 = HEAP32[$0_1 + 8 >> 2]; + $2_1 = HEAP32[$0_1 >> 2] + ($6_1 << 3) | 0; + while (1) { + if (($1_1 | 0) != ($5_1 | 0)) { + $9_1 = HEAP32[$1_1 + 4 >> 2]; + HEAP32[$2_1 >> 2] = HEAP32[$1_1 >> 2]; + HEAP32[$2_1 + 4 >> 2] = $9_1; + $2_1 = $2_1 + 8 | 0; + $1_1 = $1_1 + 8 | 0; + continue; + } + break; + }; + HEAP32[$0_1 + 8 >> 2] = $3_1 + $6_1; + if ($12_1) { + $9_1 = HEAP32[$11_1 + 8 >> 2]; + if (($4_1 | 0) != ($9_1 | 0)) { + label$5 : { + label$6 : { + label$7 : { + $5_1 = $12_1 << 3; + $0_1 = HEAP32[$11_1 >> 2]; + $2_1 = $0_1 + ($9_1 << 3) | 0; + $0_1 = $0_1 + ($4_1 << 3) | 0; + if ($5_1 >>> 0 > $2_1 - $0_1 >>> 0) { + $1_1 = $2_1 + $5_1 | 0; + $4_1 = $0_1 + $5_1 | 0; + if ($5_1 >>> 0 <= 15) { + break label$6 + } + $2_1 = $1_1 & -4; + $6_1 = $1_1 & 3; + $10_1 = 0 - $6_1 | 0; + if ($6_1) { + $3_1 = ($0_1 + $5_1 | 0) - 1 | 0; + while (1) { + $1_1 = $1_1 - 1 | 0; + HEAP8[$1_1 | 0] = HEAPU8[$3_1 | 0]; + $3_1 = $3_1 - 1 | 0; + if ($1_1 >>> 0 > $2_1 >>> 0) { + continue + } + break; + }; + } + $6_1 = $5_1 - $6_1 | 0; + $3_1 = $6_1 & -4; + $1_1 = $2_1 - $3_1 | 0; + $5_1 = 0 - $3_1 | 0; + $4_1 = $4_1 + $10_1 | 0; + if ($4_1 & 3) { + if (($5_1 | 0) >= 0) { + break label$7 + } + $3_1 = $4_1 << 3; + $10_1 = $3_1 & 24; + $7_1 = $4_1 & -4; + $0_1 = $7_1 - 4 | 0; + $13_1 = 0 - $3_1 & 24; + $3_1 = HEAP32[$7_1 >> 2]; + while (1) { + $2_1 = $2_1 - 4 | 0; + $7_1 = $3_1 << $13_1; + $3_1 = HEAP32[$0_1 >> 2]; + HEAP32[$2_1 >> 2] = $7_1 | $3_1 >>> $10_1; + $0_1 = $0_1 - 4 | 0; + if ($1_1 >>> 0 < $2_1 >>> 0) { + continue + } + break; + }; + break label$7; + } + if (($5_1 | 0) >= 0) { + break label$7 + } + $0_1 = ($0_1 + $6_1 | 0) - 4 | 0; + while (1) { + $2_1 = $2_1 - 4 | 0; + HEAP32[$2_1 >> 2] = HEAP32[$0_1 >> 2]; + $0_1 = $0_1 - 4 | 0; + if ($1_1 >>> 0 < $2_1 >>> 0) { + continue + } + break; + }; + break label$7; + } + label$14 : { + if ($5_1 >>> 0 <= 15) { + $1_1 = $2_1; + break label$14; + } + $4_1 = 0 - $2_1 & 3; + $3_1 = $4_1 + $2_1 | 0; + if ($4_1) { + $1_1 = $2_1; + $2_1 = $0_1; + while (1) { + HEAP8[$1_1 | 0] = HEAPU8[$2_1 | 0]; + $2_1 = $2_1 + 1 | 0; + $1_1 = $1_1 + 1 | 0; + if ($3_1 >>> 0 > $1_1 >>> 0) { + continue + } + break; + }; + } + $5_1 = $5_1 - $4_1 | 0; + $6_1 = $5_1 & -4; + $1_1 = $6_1 + $3_1 | 0; + $4_1 = $0_1 + $4_1 | 0; + label$18 : { + if ($4_1 & 3) { + if (($6_1 | 0) <= 0) { + break label$18 + } + $2_1 = $4_1 << 3; + $10_1 = $2_1 & 24; + $7_1 = $4_1 & -4; + $0_1 = $7_1 + 4 | 0; + $13_1 = 0 - $2_1 & 24; + $2_1 = HEAP32[$7_1 >> 2]; + while (1) { + $7_1 = $2_1 >>> $10_1 | 0; + $2_1 = HEAP32[$0_1 >> 2]; + HEAP32[$3_1 >> 2] = $7_1 | $2_1 << $13_1; + $0_1 = $0_1 + 4 | 0; + $3_1 = $3_1 + 4 | 0; + if ($3_1 >>> 0 < $1_1 >>> 0) { + continue + } + break; + }; + break label$18; + } + if (($6_1 | 0) <= 0) { + break label$18 + } + $0_1 = $4_1; + while (1) { + HEAP32[$3_1 >> 2] = HEAP32[$0_1 >> 2]; + $0_1 = $0_1 + 4 | 0; + $3_1 = $3_1 + 4 | 0; + if ($3_1 >>> 0 < $1_1 >>> 0) { + continue + } + break; + }; + } + $5_1 = $5_1 & 3; + $0_1 = $4_1 + $6_1 | 0; + } + if (!$5_1) { + break label$5 + } + $2_1 = $1_1 + $5_1 | 0; + while (1) { + HEAP8[$1_1 | 0] = HEAPU8[$0_1 | 0]; + $0_1 = $0_1 + 1 | 0; + $1_1 = $1_1 + 1 | 0; + if ($2_1 >>> 0 > $1_1 >>> 0) { + continue + } + break; + }; + break label$5; + } + $0_1 = $6_1 & 3; + if (!$0_1) { + break label$5 + } + $2_1 = $1_1 - $0_1 | 0; + $4_1 = $5_1 + $4_1 | 0; + } + $0_1 = $4_1 - 1 | 0; + while (1) { + $1_1 = $1_1 - 1 | 0; + HEAP8[$1_1 | 0] = HEAPU8[$0_1 | 0]; + $0_1 = $0_1 - 1 | 0; + if ($1_1 >>> 0 > $2_1 >>> 0) { + continue + } + break; + }; + } + } + HEAP32[$11_1 + 8 >> 2] = $9_1 + $12_1; + } + global$0 = $8_1 + 16 | 0; + } + + function $11($0_1, $1_1, $2_1, $3_1) { + var $4_1 = 0, $5_1 = 0, $6_1 = 0; + $4_1 = global$0 - 32 | 0; + global$0 = $4_1; + $3_1 = $2_1 + $3_1 | 0; + $5_1 = 0; + label$1 : { + if ($3_1 >>> 0 < $2_1 >>> 0) { + break label$1 + } + $2_1 = HEAP32[$1_1 + 4 >> 2]; + $6_1 = $2_1 << 1; + $3_1 = $3_1 >>> 0 < $6_1 >>> 0 ? $6_1 : $3_1; + $3_1 = $3_1 >>> 0 > 4 ? $3_1 : 4; + $6_1 = (($3_1 | 0) == ($3_1 & 536870911)) << 3; + $5_1 = $3_1 << 3; + if ($2_1) { + HEAP32[$4_1 + 20 >> 2] = $2_1 << 3; + HEAP32[$4_1 + 16 >> 2] = HEAP32[$1_1 >> 2]; + $2_1 = 8; + } else { + $2_1 = 0 + } + HEAP32[$4_1 + 24 >> 2] = $2_1; + $12($4_1, $5_1, $6_1, $4_1 + 16 | 0); + if (!HEAP32[$4_1 >> 2]) { + $2_1 = HEAP32[$4_1 + 4 >> 2]; + HEAP32[$1_1 + 4 >> 2] = $3_1; + HEAP32[$1_1 >> 2] = $2_1; + $5_1 = -2147483647; + break label$1; + } + $3_1 = HEAP32[$4_1 + 4 >> 2]; + $5_1 = HEAP32[$4_1 + 8 >> 2]; + } + HEAP32[$0_1 + 4 >> 2] = $5_1; + HEAP32[$0_1 >> 2] = $3_1; + global$0 = $4_1 + 32 | 0; + } + + function $12($0_1, $1_1, $2_1, $3_1) { + var $4_1 = 0, $5_1 = 0, $6_1 = 0; + $4_1 = global$0 - 16 | 0; + global$0 = $4_1; + label$1 : { + label$2 : { + label$3 : { + if ($2_1) { + $6_1 = 1; + if (($1_1 | 0) < 0) { + break label$1 + } + if (HEAP32[$3_1 + 8 >> 2]) { + break label$3 + } + $30($4_1, $1_1, $2_1); + $3_1 = HEAP32[$4_1 >> 2]; + $5_1 = HEAP32[$4_1 + 4 >> 2]; + break label$2; + } + HEAP32[$0_1 + 4 >> 2] = $1_1; + $6_1 = 1; + break label$1; + } + $5_1 = HEAP32[$3_1 + 4 >> 2]; + if (!$5_1) { + $30($4_1 + 8 | 0, $1_1, $2_1); + $3_1 = HEAP32[$4_1 + 8 >> 2]; + $5_1 = HEAP32[$4_1 + 12 >> 2]; + break label$2; + } + $3_1 = $3(HEAP32[$3_1 >> 2], $5_1, $2_1, $1_1); + $5_1 = $1_1; + } + if ($3_1) { + HEAP32[$0_1 + 4 >> 2] = $3_1; + $6_1 = 0; + break label$1; + } + HEAP32[$0_1 + 4 >> 2] = $1_1; + $5_1 = $2_1; + } + HEAP32[$0_1 >> 2] = $6_1; + HEAP32[$0_1 + 8 >> 2] = $5_1; + global$0 = $4_1 + 16 | 0; + } + + function $13($0_1, $1_1) { + var $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0; + label$1 : { + $3_1 = HEAP32[$1_1 + 8 >> 2]; + $2_1 = HEAP32[$1_1 + 4 >> 2]; + if (!($3_1 >>> 0 >= $2_1 >>> 0 | ($2_1 | 0) != ($2_1 & 536870911))) { + $2_1 = $2_1 << 3; + $4_1 = HEAP32[$1_1 >> 2]; + $5_1 = $3_1 << 3; + label$3 : { + if ($5_1) { + $2_1 = $3($4_1, $2_1, 8, $5_1); + if ($2_1) { + break label$3 + } + abort(); + } + $32($4_1, $2_1); + $2_1 = 8; + if (($3_1 & 536870911) != ($3_1 | 0)) { + break label$1 + } + } + HEAP32[$1_1 + 4 >> 2] = $3_1; + HEAP32[$1_1 >> 2] = $2_1; + } + HEAP32[$0_1 + 4 >> 2] = $3_1; + HEAP32[$0_1 >> 2] = HEAP32[$1_1 >> 2]; + return; + } + $25(); + abort(); + } + + function $14($0_1, $1_1, $2_1, $3_1) { + var $4_1 = 0, $5_1 = 0, $6_1 = 0, $7_1 = 0, $8_1 = 0, $9_1 = 0, $10_1 = 0, $11_1 = 0; + $5_1 = global$0 - 16 | 0; + global$0 = $5_1; + $4_1 = $0_1; + $0_1 = __wasm_i64_mul($0_1, 0, $2_1, 0); + $6_1 = i64toi32_i32$HIGH_BITS; + $7_1 = $0_1; + $10_1 = $3_1; + $8_1 = __wasm_i64_mul($4_1, 0, $3_1, 0); + $0_1 = i64toi32_i32$HIGH_BITS; + $9_1 = $0_1; + $11_1 = $1_1; + $3_1 = 0; + $2_1 = __wasm_i64_mul($2_1, 0, $1_1, $3_1); + $1_1 = $2_1 + $8_1 | 0; + $0_1 = i64toi32_i32$HIGH_BITS + $0_1 | 0; + $0_1 = $1_1 >>> 0 < $2_1 >>> 0 ? $0_1 + 1 | 0 : $0_1; + $2_1 = $1_1; + $1_1 = $0_1; + $3_1 = 0 + $7_1 | 0; + $0_1 = $2_1 + $6_1 | 0; + $4_1 = $5_1; + HEAP32[$4_1 >> 2] = $3_1; + HEAP32[$4_1 + 4 >> 2] = $0_1; + $3_1 = ($0_1 | 0) == ($6_1 | 0) & $3_1 >>> 0 < $7_1 >>> 0 | $0_1 >>> 0 < $6_1 >>> 0; + $0_1 = ($1_1 | 0) == ($9_1 | 0) & $2_1 >>> 0 < $8_1 >>> 0 | $1_1 >>> 0 < $9_1 >>> 0; + $4_1 = $1_1; + $2_1 = __wasm_i64_mul($10_1, 0, $11_1, 0) + $1_1 | 0; + $1_1 = $0_1 + i64toi32_i32$HIGH_BITS | 0; + $1_1 = $2_1 >>> 0 < $4_1 >>> 0 ? $1_1 + 1 | 0 : $1_1; + $0_1 = $3_1 + $2_1 | 0; + HEAP32[$5_1 + 8 >> 2] = $0_1; + HEAP32[$5_1 + 12 >> 2] = $0_1 >>> 0 < $2_1 >>> 0 ? $1_1 + 1 | 0 : $1_1; + global$0 = $5_1 + 16 | 0; + $1_1 = HEAP32[$5_1 + 4 >> 2]; + $2_1 = $5_1 + 8 | 0; + $3_1 = HEAP32[$2_1 >> 2]; + $0_1 = HEAP32[$5_1 >> 2]; + $6_1 = HEAP32[$2_1 + 4 >> 2]; + $2_1 = $0_1 - $6_1 | 0; + $4_1 = $1_1 - ($0_1 >>> 0 < $6_1 >>> 0) | 0; + $0_1 = ($4_1 | 0) == ($1_1 | 0) & $0_1 >>> 0 < $2_1 >>> 0 | $1_1 >>> 0 < $4_1 >>> 0; + $1_1 = $2_1 + $0_1 | 0; + $0_1 = $4_1 + ($0_1 ? -1 : 0) | 0; + $4_1 = $1_1; + $2_1 = $1_1 >>> 0 < $2_1 >>> 0 ? $0_1 + 1 | 0 : $0_1; + $5_1 = 0; + $6_1 = $5_1 - $3_1 | 0; + $0_1 = $6_1 + $1_1 | 0; + $1_1 = ($3_1 - (($3_1 | 0) != 0) | 0) + $2_1 | 0; + $3_1 = $0_1; + $1_1 = $0_1 >>> 0 < $6_1 >>> 0 ? $1_1 + 1 | 0 : $1_1; + $0_1 = $1_1; + $1_1 = $3_1 + (($0_1 | 0) == ($2_1 | 0) & $3_1 >>> 0 < $4_1 >>> 0 | $0_1 >>> 0 < $2_1 >>> 0 ? -1 : 0) | 0; + $0_1 = $1_1 >>> 0 < $3_1 >>> 0 ? $0_1 + 1 | 0 : $0_1; + i64toi32_i32$HIGH_BITS = $0_1; + return $1_1; + } + + function $15($0_1, $1_1) { + var $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0; + $2_1 = global$0 - 16 | 0; + global$0 = $2_1; + $3_1 = HEAP32[$1_1 + 104 >> 2]; + if (($3_1 | 0) == HEAP32[$1_1 + 108 >> 2]) { + $1_1 = 0 + } else { + HEAP32[$1_1 + 104 >> 2] = $3_1 + 8; + $18($2_1, $1_1); + $4_1 = HEAP32[$2_1 + 8 >> 2]; + $5_1 = HEAP32[$2_1 + 12 >> 2]; + $1_1 = HEAP32[$2_1 >> 2] ? $3_1 : 0; + } + HEAP32[$0_1 + 8 >> 2] = $4_1; + HEAP32[$0_1 + 12 >> 2] = $5_1; + HEAP32[$0_1 >> 2] = $1_1; + global$0 = $2_1 + 16 | 0; + } + + function $16($0_1, $1_1, $2_1) { + var $3_1 = 0; + $3_1 = HEAP32[$1_1 + 8 >> 2]; + if ($3_1 >>> 0 < $2_1 >>> 0) { + $0_1 = global$0 - 48 | 0; + global$0 = $0_1; + HEAP32[$0_1 + 4 >> 2] = $3_1; + HEAP32[$0_1 >> 2] = $2_1; + HEAP32[$0_1 + 28 >> 2] = 2; + HEAP32[$0_1 + 44 >> 2] = 1; + HEAP32[$0_1 + 12 >> 2] = 2; + HEAP32[$0_1 + 16 >> 2] = 0; + HEAP32[$0_1 + 8 >> 2] = 1049e3; + HEAP32[$0_1 + 36 >> 2] = 1; + HEAP32[$0_1 + 24 >> 2] = $0_1 + 32; + HEAP32[$0_1 + 40 >> 2] = $0_1 + 4; + HEAP32[$0_1 + 32 >> 2] = $0_1; + $26($0_1 + 8 | 0, 1049016); + abort(); + } + HEAP32[$1_1 + 8 >> 2] = $2_1; + HEAP32[$0_1 + 16 >> 2] = $1_1; + HEAP32[$0_1 + 4 >> 2] = 0; + HEAP32[$0_1 >> 2] = $3_1; + $1_1 = HEAP32[$1_1 >> 2]; + HEAP32[$0_1 + 12 >> 2] = $1_1 + ($3_1 << 3); + HEAP32[$0_1 + 8 >> 2] = $1_1 + ($2_1 << 3); + } + + function $17($0_1, $1_1) { + var $2_1 = 0; + $2_1 = global$0 - 16 | 0; + global$0 = $2_1; + $28($2_1 + 8 | 0, $1_1 + 1152 | 0); + if (HEAP32[$2_1 + 8 >> 2]) { + $36($0_1 + 8 | 0, Math_imul(HEAP32[$2_1 + 12 >> 2], 96) + $1_1 | 0, 96); + $1_1 = 1; + } else { + $1_1 = 0 + } + HEAP32[$0_1 >> 2] = $1_1; + HEAP32[$0_1 + 4 >> 2] = 0; + global$0 = $2_1 + 16 | 0; + } + + function $18($0_1, $1_1) { + var $2_1 = 0, $3_1 = 0, $4_1 = 0; + $2_1 = global$0 - 16 | 0; + global$0 = $2_1; + $28($2_1 + 8 | 0, $1_1 + 96 | 0); + if (HEAP32[$2_1 + 8 >> 2]) { + $1_1 = (HEAP32[$2_1 + 12 >> 2] << 3) + $1_1 | 0; + $3_1 = HEAP32[$1_1 >> 2]; + $4_1 = HEAP32[$1_1 + 4 >> 2]; + $1_1 = 1; + } else { + $1_1 = 0 + } + HEAP32[$0_1 + 8 >> 2] = $3_1; + HEAP32[$0_1 + 12 >> 2] = $4_1; + HEAP32[$0_1 >> 2] = $1_1; + HEAP32[$0_1 + 4 >> 2] = 0; + global$0 = $2_1 + 16 | 0; + } + + function $19($0_1) { + var $1_1 = 0, $2_1 = 0; + $2_1 = HEAP32[262999]; + HEAP32[262999] = $2_1 + 1; + $1_1 = HEAP32[263113] + 1 | 0; + HEAP32[263113] = $1_1; + if (!(($2_1 | 0) < 0 | $1_1 >>> 0 > 2 | (!$0_1 | (HEAP32[262998] < 0 | $1_1 >>> 0 > 1)))) { + abort() + } + abort(); + } + + function $20($0_1, $1_1) { + var $2_1 = 0; + label$1 : { + if (!$1_1) { + $2_1 = 8; + break label$1; + } + label$3 : { + if (($1_1 & 536870911) != ($1_1 | 0)) { + break label$3 + } + $2_1 = $1_1 << 3; + if (($2_1 | 0) < 0) { + break label$3 + } + $2_1 = $6($2_1, 8); + if ($2_1) { + break label$1 + } + abort(); + } + $25(); + abort(); + } + HEAP32[$0_1 + 4 >> 2] = $1_1; + HEAP32[$0_1 >> 2] = $2_1; + } + + function $21($0_1, $1_1, $2_1) { + var $3_1 = 0; + label$1 : { + label$2 : { + if (($1_1 | 0) != 1114112) { + $3_1 = 1; + if (FUNCTION_TABLE[HEAP32[HEAP32[$0_1 + 28 >> 2] + 16 >> 2]](HEAP32[$0_1 + 24 >> 2], $1_1) | 0) { + break label$2 + } + } + if ($2_1) { + break label$1 + } + $3_1 = 0; + } + return $3_1; + } + return FUNCTION_TABLE[HEAP32[HEAP32[$0_1 + 28 >> 2] + 12 >> 2]](HEAP32[$0_1 + 24 >> 2], $2_1, 0) | 0; + } + + function $22($0_1, $1_1) { + var $2_1 = 0, $3_1 = 0; + $2_1 = global$0 - 16 | 0; + global$0 = $2_1; + $3_1 = HEAP32[$0_1 + 8 >> 2]; + if (HEAP32[$0_1 + 4 >> 2] - $3_1 >>> 0 < $1_1 >>> 0) { + $11($2_1 + 8 | 0, $0_1, $3_1, $1_1); + $31(HEAP32[$2_1 + 12 >> 2]); + } + global$0 = $2_1 + 16 | 0; + } + + function $23() { + var $0_1 = 0, $1_1 = 0; + $0_1 = HEAP32[263108]; + if ($0_1) { + while (1) { + $1_1 = $1_1 + 1 | 0; + $0_1 = HEAP32[$0_1 + 8 >> 2]; + if ($0_1) { + continue + } + break; + }; + $0_1 = $1_1 >>> 0 > 4095 ? $1_1 : 4095; + } else { + $0_1 = 4095 + } + HEAP32[263112] = $0_1; + } + + function $24($0_1, $1_1) { + var $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0, $6_1 = 0; + $2_1 = HEAP32[$0_1 + 8 >> 2]; + if (($2_1 | 0) == HEAP32[$0_1 + 4 >> 2]) { + $4_1 = global$0 - 32 | 0; + global$0 = $4_1; + $5_1 = $2_1 + 1 | 0; + $3_1 = 0; + label$2 : { + if ($2_1 >>> 0 > $5_1 >>> 0) { + break label$2 + } + $3_1 = HEAP32[$0_1 + 4 >> 2]; + $2_1 = $3_1 << 1; + $2_1 = $2_1 >>> 0 > $5_1 >>> 0 ? $2_1 : $5_1; + $2_1 = $2_1 >>> 0 > 4 ? $2_1 : 4; + $5_1 = (($2_1 | 0) == ($2_1 & 536870911)) << 3; + $6_1 = $2_1 << 3; + if ($3_1) { + HEAP32[$4_1 + 20 >> 2] = $3_1 << 3; + HEAP32[$4_1 + 16 >> 2] = HEAP32[$0_1 >> 2]; + $3_1 = 8; + } else { + $3_1 = 0 + } + HEAP32[$4_1 + 24 >> 2] = $3_1; + $12($4_1, $6_1, $5_1, $4_1 + 16 | 0); + if (!HEAP32[$4_1 >> 2]) { + $5_1 = HEAP32[$4_1 + 4 >> 2]; + HEAP32[$0_1 + 4 >> 2] = $2_1; + HEAP32[$0_1 >> 2] = $5_1; + $3_1 = -2147483647; + break label$2; + } + $3_1 = HEAP32[$4_1 + 8 >> 2]; + } + $31($3_1); + global$0 = $4_1 + 32 | 0; + $2_1 = HEAP32[$0_1 + 8 >> 2]; + } + HEAP32[$0_1 + 8 >> 2] = $2_1 + 1; + $0_1 = HEAP32[$0_1 >> 2] + ($2_1 << 3) | 0; + HEAP32[$0_1 >> 2] = $1_1; + HEAP32[$0_1 + 4 >> 2] = 0; + } + + function $25() { + var $0_1 = 0; + $0_1 = global$0 - 32 | 0; + global$0 = $0_1; + HEAP32[$0_1 + 28 >> 2] = 0; + HEAP32[$0_1 + 24 >> 2] = 1049408; + HEAP32[$0_1 + 12 >> 2] = 1; + HEAP32[$0_1 + 16 >> 2] = 0; + HEAP32[$0_1 + 8 >> 2] = 1048624; + $26($0_1 + 8 | 0, 1048632); + abort(); + } + + function $26($0_1, $1_1) { + var $2_1 = 0; + $2_1 = global$0 - 32 | 0; + global$0 = $2_1; + HEAP8[$2_1 + 24 | 0] = 1; + HEAP32[$2_1 + 20 >> 2] = $1_1; + HEAP32[$2_1 + 16 >> 2] = $0_1; + HEAP32[$2_1 + 12 >> 2] = 1048716; + HEAP32[$2_1 + 8 >> 2] = 1049408; + $0_1 = $2_1 + 8 | 0; + $1_1 = HEAP32[$0_1 + 8 >> 2]; + if (!$1_1) { + $0_1 = global$0 - 32 | 0; + global$0 = $0_1; + HEAP32[$0_1 + 20 >> 2] = 0; + HEAP32[$0_1 + 16 >> 2] = 1049408; + HEAP32[$0_1 + 4 >> 2] = 1; + HEAP32[$0_1 + 8 >> 2] = 0; + HEAP32[$0_1 + 28 >> 2] = 43; + HEAP32[$0_1 + 24 >> 2] = 1049408; + HEAP32[$0_1 >> 2] = $0_1 + 24; + $26($0_1, 1049480); + abort(); + } + $2_1 = HEAP32[$1_1 + 20 >> 2]; + label$2 : { + label$3 : { + switch (HEAP32[$1_1 + 4 >> 2]) { + case 0: + case 1: + break label$3; + default: + break label$2; + }; + } + if ($2_1) { + break label$2 + } + $19(HEAPU8[$0_1 + 16 | 0]); + abort(); + } + $19(HEAPU8[$0_1 + 16 | 0]); + abort(); + } + + function $27($0_1) { + $0_1 = $0_1 | 0; + label$1 : { + if ($0_1 >>> 0 > 4294967292) { + break label$1 + } + if (!$0_1) { + return 4 + } + $0_1 = $6($0_1, ($0_1 >>> 0 < 4294967293) << 2); + if (!$0_1) { + break label$1 + } + return $0_1 | 0; + } + abort(); + } + + function $28($0_1, $1_1) { + var $2_1 = 0, $3_1 = 0; + $2_1 = HEAP32[$1_1 >> 2]; + if ($2_1 >>> 0 < HEAPU32[$1_1 + 4 >> 2]) { + HEAP32[$1_1 >> 2] = $2_1 + 1; + $3_1 = 1; + } + HEAP32[$0_1 + 4 >> 2] = $2_1; + HEAP32[$0_1 >> 2] = $3_1; + } + + function $29($0_1) { + var $1_1 = 0; + $1_1 = HEAP32[$0_1 + 4 >> 2]; + if (!(!$1_1 | ($1_1 & 536870911) != ($1_1 | 0))) { + $32(HEAP32[$0_1 >> 2], $1_1 << 3) + } + } + + function $30($0_1, $1_1, $2_1) { + if ($1_1) { + $2_1 = $6($1_1, $2_1) + } + HEAP32[$0_1 + 4 >> 2] = $1_1; + HEAP32[$0_1 >> 2] = $2_1; + } + + function $31($0_1) { + label$1 : { + if (($0_1 | 0) != -2147483647) { + if (!$0_1) { + break label$1 + } + abort(); + } + return; + } + $25(); + abort(); + } + + function $32($0_1, $1_1) { + $0_1 = $0_1 | 0; + $1_1 = $1_1 | 0; + if ($1_1) { + $4($0_1) + } + } + + function $33($0_1, $1_1, $2_1) { + var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; + (wasm2js_i32$0 = $0_1, wasm2js_i32$1 = $14(HEAP32[$0_1 >> 2], HEAP32[$0_1 + 4 >> 2], $1_1, $2_1)), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + HEAP32[$0_1 + 4 >> 2] = i64toi32_i32$HIGH_BITS; + } + + function $34($0_1) { + $0_1 = $0_1 | 0; + global$0 = global$0 + $0_1 | 0; + return global$0 | 0; + } + + function $35($0_1, $1_1) { + $0_1 = $0_1 | 0; + $1_1 = $1_1 | 0; + var $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0, $6_1 = 0, $7_1 = 0, $8_1 = 0, $9_1 = 0, $10_1 = 0, $11_1 = 0, $12_1 = 0, $13_1 = 0, $14_1 = 0, $15_1 = 0, $16_1 = 0; + $2_1 = HEAP32[$0_1 >> 2]; + $10_1 = global$0 - 48 | 0; + global$0 = $10_1; + $0_1 = 39; + if ($2_1 >>> 0 >= 1e4) { + while (1) { + $16_1 = ($10_1 + 9 | 0) + $0_1 | 0; + $8_1 = $16_1 - 4 | 0; + $6_1 = $2_1; + $5_1 = 0; + $9_1 = 0; + $4_1 = $3_1; + __inlined_func$_ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E : { + if (!$3_1) { + i64toi32_i32$HIGH_BITS = 0; + $2_1 = ($6_1 >>> 0) / 1e4 | 0; + break __inlined_func$_ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E; + } + $11_1 = 51 - Math_clz32($4_1) | 0; + $3_1 = 0 - $11_1 | 0; + $2_1 = $11_1 & 63; + $7_1 = $2_1 & 31; + if ($2_1 >>> 0 >= 32) { + $15_1 = 0; + $14_1 = $4_1 >>> $7_1 | 0; + } else { + $15_1 = $4_1 >>> $7_1 | 0; + $14_1 = ((1 << $7_1) - 1 & $4_1) << 32 - $7_1 | $6_1 >>> $7_1; + } + $2_1 = $3_1 & 63; + $3_1 = $2_1 & 31; + if ($2_1 >>> 0 >= 32) { + $13_1 = $6_1 << $3_1; + $12_1 = 0; + } else { + $13_1 = (1 << $3_1) - 1 & $6_1 >>> 32 - $3_1 | $4_1 << $3_1; + $12_1 = $6_1 << $3_1; + } + if ($11_1) { + while (1) { + $7_1 = $14_1 << 1 | $13_1 >>> 31; + $5_1 = $15_1 << 1 | $14_1 >>> 31; + $3_1 = 0 - ($5_1 + ($7_1 >>> 0 > 9999) | 0) >> 31; + $2_1 = $3_1 & 1e4; + $14_1 = $7_1 - $2_1 | 0; + $15_1 = $5_1 - ($2_1 >>> 0 > $7_1 >>> 0) | 0; + $13_1 = $13_1 << 1 | $12_1 >>> 31; + $12_1 = $9_1 | $12_1 << 1; + $5_1 = $3_1 & 1; + $9_1 = $5_1; + $11_1 = $11_1 - 1 | 0; + if ($11_1) { + continue + } + break; + } + } + i64toi32_i32$HIGH_BITS = $13_1 << 1 | $12_1 >>> 31; + $2_1 = $5_1 | $12_1 << 1; + } + $3_1 = i64toi32_i32$HIGH_BITS; + $9_1 = __wasm_i64_mul($2_1, $3_1, -1e4, -1) + $6_1 | 0; + $7_1 = (($9_1 & 65535) >>> 0) / 100 | 0; + $5_1 = ($7_1 << 1) + 1048732 | 0; + $5_1 = HEAPU8[$5_1 | 0] | HEAPU8[$5_1 + 1 | 0] << 8; + HEAP8[$8_1 | 0] = $5_1; + HEAP8[$8_1 + 1 | 0] = $5_1 >>> 8; + $8_1 = $16_1 - 2 | 0; + $5_1 = (($9_1 + Math_imul($7_1, -100) & 65535) << 1) + 1048732 | 0; + $5_1 = HEAPU8[$5_1 | 0] | HEAPU8[$5_1 + 1 | 0] << 8; + HEAP8[$8_1 | 0] = $5_1; + HEAP8[$8_1 + 1 | 0] = $5_1 >>> 8; + $0_1 = $0_1 - 4 | 0; + if (!$4_1 & $6_1 >>> 0 > 99999999 | $4_1) { + continue + } + break; + } + } + if ($2_1 >>> 0 > 99) { + $0_1 = $0_1 - 2 | 0; + $4_1 = $0_1 + ($10_1 + 9 | 0) | 0; + $3_1 = $2_1; + $2_1 = (($3_1 & 65535) >>> 0) / 100 | 0; + $3_1 = ((Math_imul($2_1, -100) + $3_1 & 65535) << 1) + 1048732 | 0; + $3_1 = HEAPU8[$3_1 | 0] | HEAPU8[$3_1 + 1 | 0] << 8; + HEAP8[$4_1 | 0] = $3_1; + HEAP8[$4_1 + 1 | 0] = $3_1 >>> 8; + } + label$5 : { + if ($2_1 >>> 0 >= 10) { + $0_1 = $0_1 - 2 | 0; + $3_1 = $0_1 + ($10_1 + 9 | 0) | 0; + $2_1 = ($2_1 << 1) + 1048732 | 0; + $2_1 = HEAPU8[$2_1 | 0] | HEAPU8[$2_1 + 1 | 0] << 8; + HEAP8[$3_1 | 0] = $2_1; + HEAP8[$3_1 + 1 | 0] = $2_1 >>> 8; + break label$5; + } + $0_1 = $0_1 - 1 | 0; + HEAP8[$0_1 + ($10_1 + 9 | 0) | 0] = $2_1 + 48; + } + $9_1 = ($10_1 + 9 | 0) + $0_1 | 0; + $7_1 = 39 - $0_1 | 0; + $2_1 = HEAP32[$1_1 >> 2]; + $0_1 = $2_1 & 1; + $6_1 = $7_1 + $0_1 | 0; + $8_1 = $2_1 & 4 ? 1049408 : 0; + $5_1 = $0_1 ? 43 : 1114112; + label$7 : { + label$81 : { + if (!HEAP32[$1_1 + 8 >> 2]) { + break label$81 + } + label$112 : { + label$12 : { + label$13 : { + label$14 : { + $4_1 = HEAP32[$1_1 + 12 >> 2]; + if ($4_1 >>> 0 > $6_1 >>> 0) { + if ($2_1 & 8) { + break label$112 + } + $0_1 = 0; + $3_1 = $4_1 - $6_1 | 0; + $2_1 = $3_1; + $4_1 = HEAPU8[$1_1 + 32 | 0]; + switch (((($4_1 | 0) == 3 ? 1 : $4_1) & 3) - 1 | 0) { + case 1: + break label$13; + case 0: + break label$14; + default: + break label$12; + }; + } + break label$81; + } + $2_1 = 0; + $0_1 = $3_1; + break label$12; + } + $0_1 = $3_1 >>> 1 | 0; + $2_1 = $3_1 + 1 >>> 1 | 0; + } + $0_1 = $0_1 + 1 | 0; + $6_1 = HEAP32[$1_1 + 28 >> 2]; + $4_1 = HEAP32[$1_1 + 4 >> 2]; + $3_1 = HEAP32[$1_1 + 24 >> 2]; + label$16 : { + while (1) { + $0_1 = $0_1 - 1 | 0; + if (!$0_1) { + break label$16 + } + if (!(FUNCTION_TABLE[HEAP32[$6_1 + 16 >> 2]]($3_1, $4_1) | 0)) { + continue + } + break; + }; + $0_1 = 1; + break label$7; + } + $0_1 = 1; + if (($4_1 | 0) == 1114112) { + break label$7 + } + if ($21($1_1, $5_1, $8_1)) { + break label$7 + } + if (FUNCTION_TABLE[HEAP32[$6_1 + 12 >> 2]]($3_1, $9_1, $7_1) | 0) { + break label$7 + } + $0_1 = 0; + label$18 : { + while (1) { + $1_1 = $2_1; + if (($0_1 | 0) == ($2_1 | 0)) { + break label$18 + } + $0_1 = $0_1 + 1 | 0; + if (!(FUNCTION_TABLE[HEAP32[$6_1 + 16 >> 2]]($3_1, $4_1) | 0)) { + continue + } + break; + }; + $1_1 = $0_1 - 1 | 0; + } + $0_1 = $1_1 >>> 0 < $2_1 >>> 0; + break label$7; + } + $3_1 = HEAP32[$1_1 + 4 >> 2]; + HEAP32[$1_1 + 4 >> 2] = 48; + $2_1 = HEAPU8[$1_1 + 32 | 0]; + $0_1 = 1; + HEAP8[$1_1 + 32 | 0] = 1; + if ($21($1_1, $5_1, $8_1)) { + break label$7 + } + $0_1 = ($4_1 - $6_1 | 0) + 1 | 0; + $6_1 = HEAP32[$1_1 + 28 >> 2]; + $4_1 = HEAP32[$1_1 + 24 >> 2]; + label$20 : { + while (1) { + $0_1 = $0_1 - 1 | 0; + if (!$0_1) { + break label$20 + } + if (!(FUNCTION_TABLE[HEAP32[$6_1 + 16 >> 2]]($4_1, 48) | 0)) { + continue + } + break; + }; + $0_1 = 1; + break label$7; + } + $0_1 = 1; + if (FUNCTION_TABLE[HEAP32[$6_1 + 12 >> 2]]($4_1, $9_1, $7_1) | 0) { + break label$7 + } + HEAP8[$1_1 + 32 | 0] = $2_1; + HEAP32[$1_1 + 4 >> 2] = $3_1; + $0_1 = 0; + break label$7; + } + $0_1 = 1; + if ($21($1_1, $5_1, $8_1)) { + break label$7 + } + $0_1 = FUNCTION_TABLE[HEAP32[HEAP32[$1_1 + 28 >> 2] + 12 >> 2]](HEAP32[$1_1 + 24 >> 2], $9_1, $7_1) | 0; + } + global$0 = $10_1 + 48 | 0; + return $0_1 | 0; + } + + function $36($0_1, $1_1, $2_1) { + var $3_1 = 0, $4_1 = 0, $5_1 = 0, $6_1 = 0, $7_1 = 0, $8_1 = 0, $9_1 = 0, $10_1 = 0; + $6_1 = $2_1; + label$1 : { + if ($2_1 >>> 0 <= 15) { + $2_1 = $0_1; + break label$1; + } + $3_1 = 0 - $0_1 & 3; + $4_1 = $3_1 + $0_1 | 0; + if ($3_1) { + $2_1 = $0_1; + $5_1 = $1_1; + while (1) { + HEAP8[$2_1 | 0] = HEAPU8[$5_1 | 0]; + $5_1 = $5_1 + 1 | 0; + $2_1 = $2_1 + 1 | 0; + if ($4_1 >>> 0 > $2_1 >>> 0) { + continue + } + break; + }; + } + $8_1 = $6_1 - $3_1 | 0; + $7_1 = $8_1 & -4; + $2_1 = $7_1 + $4_1 | 0; + $3_1 = $1_1 + $3_1 | 0; + label$5 : { + if ($3_1 & 3) { + if (($7_1 | 0) <= 0) { + break label$5 + } + $6_1 = $3_1 << 3; + $9_1 = $6_1 & 24; + $5_1 = $3_1 & -4; + $1_1 = $5_1 + 4 | 0; + $6_1 = 0 - $6_1 & 24; + $5_1 = HEAP32[$5_1 >> 2]; + while (1) { + $10_1 = $5_1 >>> $9_1 | 0; + $5_1 = HEAP32[$1_1 >> 2]; + HEAP32[$4_1 >> 2] = $10_1 | $5_1 << $6_1; + $1_1 = $1_1 + 4 | 0; + $4_1 = $4_1 + 4 | 0; + if ($4_1 >>> 0 < $2_1 >>> 0) { + continue + } + break; + }; + break label$5; + } + if (($7_1 | 0) <= 0) { + break label$5 + } + $1_1 = $3_1; + while (1) { + HEAP32[$4_1 >> 2] = HEAP32[$1_1 >> 2]; + $1_1 = $1_1 + 4 | 0; + $4_1 = $4_1 + 4 | 0; + if ($4_1 >>> 0 < $2_1 >>> 0) { + continue + } + break; + }; + } + $6_1 = $8_1 & 3; + $1_1 = $3_1 + $7_1 | 0; + } + if ($6_1) { + $3_1 = $2_1 + $6_1 | 0; + while (1) { + HEAP8[$2_1 | 0] = HEAPU8[$1_1 | 0]; + $1_1 = $1_1 + 1 | 0; + $2_1 = $2_1 + 1 | 0; + if ($3_1 >>> 0 > $2_1 >>> 0) { + continue + } + break; + }; + } + return $0_1; + } + + function $37($0_1, $1_1) { + var $2_1 = 0, $3_1 = 0; + if ($1_1 >>> 0 > 15) { + $2_1 = 0 - $0_1 & 3; + $3_1 = $2_1 + $0_1 | 0; + if ($2_1) { + while (1) { + HEAP8[$0_1 | 0] = 0; + $0_1 = $0_1 + 1 | 0; + if ($3_1 >>> 0 > $0_1 >>> 0) { + continue + } + break; + } + } + $1_1 = $1_1 - $2_1 | 0; + $2_1 = $1_1 & -4; + $0_1 = $2_1 + $3_1 | 0; + if (($2_1 | 0) > 0) { + while (1) { + HEAP32[$3_1 >> 2] = 0; + $3_1 = $3_1 + 4 | 0; + if ($3_1 >>> 0 < $0_1 >>> 0) { + continue + } + break; + } + } + $1_1 = $1_1 & 3; + } + if ($1_1) { + $1_1 = $0_1 + $1_1 | 0; + while (1) { + HEAP8[$0_1 | 0] = 0; + $0_1 = $0_1 + 1 | 0; + if ($1_1 >>> 0 > $0_1 >>> 0) { + continue + } + break; + }; + } + } + + function $38($0_1, $1_1) { + $0_1 = $14($0_1, $1_1, $0_1, $1_1); + return $0_1; + } + + function $39($0_1) { + $0_1 = $0_1 | 0; + i64toi32_i32$HIGH_BITS = 1877650200; + return -1325518128; + } + + function $40($0_1) { + $0_1 = $0_1 | 0; + } + + function __wasm_ctz_i32($0_1) { + if ($0_1) { + return 31 - Math_clz32($0_1 - 1 ^ $0_1) | 0 + } + return 32; + } + + function __wasm_i64_mul($0_1, $1_1, $2_1, $3_1) { + var $4_1 = 0, $5_1 = 0, $6_1 = 0, $7_1 = 0, $8_1 = 0, $9_1 = 0; + $4_1 = $2_1 >>> 16 | 0; + $5_1 = $0_1 >>> 16 | 0; + $9_1 = Math_imul($4_1, $5_1); + $6_1 = $2_1 & 65535; + $7_1 = $0_1 & 65535; + $8_1 = Math_imul($6_1, $7_1); + $5_1 = ($8_1 >>> 16 | 0) + Math_imul($5_1, $6_1) | 0; + $4_1 = ($5_1 & 65535) + Math_imul($4_1, $7_1) | 0; + i64toi32_i32$HIGH_BITS = (Math_imul($1_1, $2_1) + $9_1 | 0) + Math_imul($0_1, $3_1) + ($5_1 >>> 16) + ($4_1 >>> 16) | 0; + return $8_1 & 65535 | $4_1 << 16; + } + + function __wasm_rotl_i32($0_1) { + var $1_1 = 0; + $1_1 = $0_1 & 31; + $0_1 = 0 - $0_1 & 31; + return (-1 >>> $1_1 & -2) << $1_1 | (-1 << $0_1 & -2) >>> $0_1; + } + + bufferView = HEAPU8; + initActiveSegments(env); + var FUNCTION_TABLE = [null, $35, $40, $39]; + function __wasm_memory_size() { + return buffer.byteLength / 65536 | 0; + } + + function __wasm_memory_grow(pagesToAdd) { + pagesToAdd = pagesToAdd | 0; + var oldPages = __wasm_memory_size() | 0; + var newPages = oldPages + pagesToAdd | 0; + if ((oldPages < newPages) && (newPages < 65536)) { + var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); + var newHEAP8 = new Int8Array(newBuffer); + newHEAP8.set(HEAP8); + HEAP8 = new Int8Array(newBuffer); + HEAP16 = new Int16Array(newBuffer); + HEAP32 = new Int32Array(newBuffer); + HEAPU8 = new Uint8Array(newBuffer); + HEAPU16 = new Uint16Array(newBuffer); + HEAPU32 = new Uint32Array(newBuffer); + HEAPF32 = new Float32Array(newBuffer); + HEAPF64 = new Float64Array(newBuffer); + buffer = newBuffer; + bufferView = HEAPU8; + } + return oldPages; + } + + return { + "memory": Object.create(Object.prototype, { + "grow": { + "value": __wasm_memory_grow + }, + "buffer": { + "get": function () { + return buffer; + } + + } + }), + "rescue_hash": $2, + "__wbindgen_add_to_stack_pointer": $34, + "__wbindgen_malloc": $27, + "__wbindgen_free": $32 + }; +} + +var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } + }); +export var memory = retasmFunc.memory; +export var rescue_hash = retasmFunc.rescue_hash; +export var __wbindgen_add_to_stack_pointer = retasmFunc.__wbindgen_add_to_stack_pointer; +export var __wbindgen_malloc = retasmFunc.__wbindgen_malloc; +export var __wbindgen_free = retasmFunc.__wbindgen_free; + diff --git a/packages/wasm/src/bundle.ts b/packages/wasm/src/bundle.ts index bd041f6..d127658 100644 --- a/packages/wasm/src/bundle.ts +++ b/packages/wasm/src/bundle.ts @@ -1,10 +1,43 @@ // Copyright 2021-2022 zcloak authors & contributors // SPDX-License-Identifier: Apache-2.0 -/* eslint-disable camelcase */ +import { allocU64a, resultU64a, wasm } from './helper'; +import { WasmInstance } from './types'; -import { rescue_hash } from './wasm'; +type PopFirst = T extends [WasmInstance, ...infer N] ? N : []; -export function rescueHash(values: BigUint64Array): BigUint64Array { - return rescue_hash(values); +/** + * @internal + * @description + * This create an extenal interface function from the signature, all the while checking + * the actual bridge wasm interface to ensure it has been initialized. + * + * This means that we can call it + * + * withWasm(wasm: WasmCryptoInstance, a: number, b: string) => Uint8Array + * + * and in this case it will create an interface function with the signarure + * + * (a: number, b: string) => Uint8Array + */ +function withWasm T>( + fn: F +): (...params: PopFirst>) => ReturnType { + return (...params: PopFirst>): ReturnType => { + if (!wasm) { + throw new Error( + 'The WASM instance has not been initialized. Ensure that you wait for the initialization Promise with initCrypto() from @zcloak/crypto.' + ); + } + + return fn(wasm, ...params) as ReturnType; + }; } + +export const rescueHash = withWasm((wasm, values: BigUint64Array): BigUint64Array => { + const args = allocU64a(values); + + wasm.rescue_hash(...args); + + return resultU64a(args[0]); +}); diff --git a/packages/wasm/src/bytes.js b/packages/wasm/src/bytes.js index 1ce397d..a6127ff 100644 --- a/packages/wasm/src/bytes.js +++ b/packages/wasm/src/bytes.js @@ -2,4 +2,4 @@ // SPDX-License-Identifier: Apache-2.0 export const bytes = - '0x0061736d0100000001bb011c60027f7f0060027f7f017f60037f7f7f017f60037f7f7f0060017f0060017f017f60047f7f7f7f006000017f60000060057f7f7f7f7f0060057f7f7f7f7f017f60047f7f7f7f017f60017f017e60067f7f7f7f7f7f0060027f7e0060017c017f60077f7f7f7f7f7f7f0060077f7f7f7f7f7f7f017f60027e7f017f60037f7e7e0060027e7e017e60027f7f017e60067f7f7f7f7f7f017f60057f7f7c7f7f0060047f7c7f7f0060057f7f7d7f7f0060047f7d7f7f0060017e017e02dc0820037762671a5f5f7762675f6e65775f616264613736653838336261386135660007037762671c5f5f7762675f737461636b5f363538323739666534343534316366360000037762671c5f5f7762675f6572726f725f663835313636376166373162636663360000037762671a5f5f7762696e6467656e5f6f626a6563745f64726f705f726566000403776267155f5f7762696e6467656e5f737472696e675f6765740000037762671b5f5f7762675f73656c665f633461383639663735323164376231380007037762671d5f5f7762675f77696e646f775f66373662666638396162366534633734000703776267215f5f7762675f676c6f62616c546869735f373138323436373265613261646437630007037762671d5f5f7762675f676c6f62616c5f66373835343931313262646230303930000703776267175f5f7762696e6467656e5f69735f756e646566696e6564000503776267205f5f7762675f6e65776e6f617267735f346362636530626138303033636564340001037762671b5f5f7762675f63616c6c5f383735643465613961626265633838660001037762671b5f5f7762675f63616c6c5f31383662326265343630363532663863000203776267105f5f7762696e6467656e5f7468726f77000003776267125f5f7762696e6467656e5f63625f64726f700005037762671b5f5f7762675f7468656e5f383535616539633865376633373163360001037762671e5f5f7762675f7265736f6c76655f313064393135633236356563323332350005037762672f5f5f7762675f7374617469635f6163636573736f725f646f63756d656e745f33616462336437643564373938313735000703776267225f5f7762675f74657874636f6e74656e745f36303039363336653033396366356434000003776267255f5f7762675f73657474657874636f6e74656e745f326531383132303038343338643462620003037762671b5f5f7762675f6e616d655f313134373535386233656636353465310005037762671e5f5f7762675f6d6573736167655f616638373639646164303133646262370005037762671c5f5f7762675f737461636b5f613431373331343934393664333033360005037762671b5f5f7762696e6467656e5f6f626a6563745f636c6f6e655f7265660005037762671b5f5f7762675f73656c665f65396238653235653135633639356662000503776267135f5f7762696e6467656e5f6a7376616c5f65710001037762671a5f5f7762675f6c6f675f363334393837353931393065653763610000037762671c5f5f7762675f737461636b5f66383531663062366362646366316433000003776267255f5f7762675f676574456c656d656e74427949645f31383939623663653336636230393264000203776267155f5f7762696e6467656e5f6e756d6265725f6e6577000f037762671a5f5f7762675f6e65775f373335396232666135616462643261330001037762671e5f5f7762696e6467656e5f636c6f737572655f7772617070657231303736000203fd01fb010503040201080303010001020403020a020003100001010000030105110101030d12060201000100040304030100040300030601010701070604050006060000090003000503000006060003050101030103030304130009000d1401010003010004010100030101010a000001000401030000000000030303020300000004090b00060000030315000300000806000401010e0404000800030001000000000403000004060004030404050404000300061600090a17190b01040006030202040304040000040101010104050001040501040504040203010001000004010e0201020b05010000000008030202000703041b04040804000c0c0c0404050170017d7d05030100110609017f01418080c0000b07e4051a066d656d6f727902000b7265736375655f68617368006b117536345f737472696e675f72657363756500260b753634615f72657363756500730b753634615f746f5f753861004b0b7538615f746f5f75363461003f11737472696e675f746f5f75386172726179002d12737472696e675f746f5f753634617272617900270f696e69745f70616e69635f686f6f6b009402215f5f7762675f7761736d62696e6467656e74657374636f6e746578745f6672656500af011a7761736d62696e6467656e74657374636f6e746578745f6e657700571b7761736d62696e6467656e74657374636f6e746578745f6172677300391a7761736d62696e6467656e74657374636f6e746578745f72756e0030155f5f776267746573745f636f6e736f6c655f6c6f67009a02175f5f776267746573745f636f6e736f6c655f6465627567009a02165f5f776267746573745f636f6e736f6c655f696e666f009a02165f5f776267746573745f636f6e736f6c655f7761726e009a02175f5f776267746573745f636f6e736f6c655f6572726f72009a02115f5f7762696e6467656e5f6d616c6c6f6300ca01125f5f7762696e6467656e5f7265616c6c6f6300dd01135f5f7762696e6467656e5f6578706f72745f3201007c5f64796e5f636f72655f5f6f70735f5f66756e6374696f6e5f5f466e4d75745f5f415f5f5f5f4f75747075745f5f5f525f61735f7761736d5f62696e6467656e5f5f636c6f737572655f5f5761736d436c6f737572655f5f5f64657363726962655f5f696e766f6b655f5f686465313439306366306362666130306500e0011f5f5f7762696e6467656e5f6164645f746f5f737461636b5f706f696e7465720083020f5f5f7762696e6467656e5f6672656500f801145f5f7762696e6467656e5f65786e5f73746f726500fc013f7761736d5f62696e6467656e5f5f636f6e766572745f5f636c6f73757265735f5f696e766f6b65325f6d75745f5f686633333966373162326262373133306100db0109e801020041010b1d84028002f001f9017ced017f7b36d401d10179d301d401de01db01d301db01d301d301d301d301d301d301d301d601d501d301d30100411f0b5ee001bb01e001fd01f901e4019a0299013d8201e8019202ff014c87019a02f501f7018f019a029a0297022b54880181025383019a02e9019a02b1019a0244df015693023a9a0299013e8601e701c301ba01d801b001ea0198029902d9015066b901fb019a029a029502be0145bc01bf01cb01cc01c601249a02c701519a029602960296029a02b501e3019a02e6019a029a029a0299029a028f0269b80190026568219a02359a02280afbb403fb01991f02087f017e02400240024002400240200041f5014f0440200041cdff7b4f0d042000410b6a2200417871210441b8dbc0002802002208450d03410020046b2102027f41002004418002490d001a411f200441ffffff074b0d001a2004410620004108766722006b7641017120004101746b413e6a0b220641027441c4ddc0006a2802002200044020044100411920064101766b411f712006411f461b74210703400240200028020441787122052004490d00200520046b220520024f0d0020002103200522020d00410021020c040b200041146a28020022052001200520002007411d764104716a41106a2802002200471b200120051b21012007410174210720000d000b20010440200121000c030b20030d030b41002103200841022006742200410020006b72712200450d032000410020006b716841027441c4ddc0006a28020022000d010c030b024002400240027f0240024041b4dbc000280200220341102000410b6a4178712000410b491b22044103762201762200410371450440200441c4dec0002802004d0d0920000d0141b8dbc0002802002200450d092000410020006b716841027441c4ddc0006a280200220328020441787120046b210120032802102200450440200341146a28020021000b200004400340200028020441787120046b220520014921022005200120021b21012000200320021b210320002802102202047f200205200041146a2802000b22000d000b0b2003104820014110490d0520032004410372360204200320046a22052001410172360204200120056a200136020041c4dec0002802002200450d042000410376220441037441bcdbc0006a210041ccdec000280200210241b4dbc00028020022064101200474220471450d0220002802080c030b02402000417f7341017120016a2200410374220541c4dbc0006a280200220141086a22042802002202200541bcdbc0006a22054704402002200536020c200520023602080c010b41b4dbc0002003417e200077713602000b200120004103742200410372360204200020016a2200200028020441017236020420040f0b024041022001411f712201742202410020026b722000200174712200410020006b71682201410374220541c4dbc0006a280200220041086a22062802002202200541bcdbc0006a22054704402002200536020c200520023602080c010b41b4dbc0002003417e200177713602000b20002004410372360204200020046a22052001410374220320046b2201410172360204200020036a200136020041c4dec000280200220004402000410376220241037441bcdbc0006a210041ccdec0002802002103027f41b4dbc00028020022044101200274220271044020002802080c010b41b4dbc000200220047236020020000b2102200020033602082002200336020c2003200036020c200320023602080b41ccdec000200536020041c4dec000200136020020060f0b41b4dbc000200420067236020020000b2104200020023602082004200236020c2002200036020c200220043602080b41ccdec000200536020041c4dec00020013602000c010b2003200120046a2200410372360204200020036a220020002802044101723602040b0c040b0340200020032000280204417871220320044f200320046b22012002497122051b21032001200220051b210220002802102201047f200105200041146a2802000b22000d000b2003450d010b200441c4dec00028020022004d2002200020046b4f710d00200310480240200241104f044020032004410372360204200320046a22002002410172360204200020026a200236020020024180024f04402000200210470c020b2002410376220241037441bcdbc0006a2101027f41b4dbc00028020022054101200274220271044020012802080c010b41b4dbc000200220057236020020010b2102200120003602082002200036020c2000200136020c200020023602080c010b2003200220046a2200410372360204200020036a220020002802044101723602040b0c020b0240024002400240024002400240024002400240200441c4dec00028020022034b044041c8dec000280200220020044b0d0441002102200441af80046a220041107640002203417f4622010d0b20034110742203450d0b41d4dec000410020004180807c7120011b220541d4dec0002802006a220036020041d8dec00041d8dec0002802002201200020002001491b36020041d0dec0002802002202450d0141dcdec0002100034020002802002201200028020422066a2003460d03200028020822000d000b0c030b41ccdec00028020021000240200320046b2201410f4d044041ccdec000410036020041c4dec000410036020020002003410372360204200020036a220320032802044101723602040c010b41c4dec000200136020041ccdec000200020046a220236020020022001410172360204200020036a2001360200200020044103723602040b200041086a0f0b41f0dec000280200220045200020034b720d030c070b200028020c200120024b720d0020022003490d030b41f0dec00041f0dec0002802002200200320002003491b360200200320056a210141dcdec000210002400240034020012000280200470440200028020822000d010c020b0b200028020c450d010b41dcdec0002100034002402002200028020022014f0440200120002802046a220620024b0d010b200028020821000c010b0b41d0dec000200336020041c8dec000200541286b220036020020032000410172360204200020036a412836020441ecdec00041808080013602002002200641206b41787141086b22002000200241106a491b2201411b36020441dcdec0002902002109200141106a41e4dec0002902003702002001200937020841e0dec000200536020041dcdec000200336020041e4dec000200141086a36020041e8dec00041003602002001411c6a21000340200041073602002006200041046a22004b0d000b20012002460d0720012001280204417e713602042002200120026b22004101723602042001200036020020004180024f04402002200010470c080b2000410376220341037441bcdbc0006a2100027f41b4dbc00028020022014101200374220371044020002802080c010b41b4dbc000200120037236020020000b2103200020023602082003200236020c2002200036020c200220033602080c070b200020033602002000200028020420056a360204200320044103723602042001200320046a22006b2104200141d0dec00028020047044041ccdec0002802002001460d04200128020422024103714101470d050240200241787122054180024f0440200110480c010b2001410c6a2802002206200141086a28020022074704402007200636020c200620073602080c010b41b4dbc00041b4dbc000280200417e200241037677713602000b200420056a2104200120056a21010c050b41d0dec000200036020041c8dec00041c8dec00028020020046a2201360200200020014101723602040c080b41c8dec000200020046b220336020041d0dec00041d0dec000280200220020046a22013602002001200341017236020420002004410372360204200041086a21020c060b41f0dec00020033602000c030b2000200520066a36020441c8dec00028020020056a210041d0dec00041d0dec0002802002203410f6a417871220141086b36020041c8dec000200320016b20006a41086a2202360200200141046b2002410172360200200020036a412836020441ecdec00041808080013602000c030b41ccdec000200036020041c4dec00041c4dec00028020020046a220136020020002001410172360204200020016a20013602000c040b20012001280204417e7136020420002004410172360204200020046a200436020020044180024f04402000200410470c040b2004410376220241037441bcdbc0006a2101027f41b4dbc00028020022054101200274220271044020012802080c010b41b4dbc000200220057236020020010b2102200120003602082002200036020c2000200136020c200020023602080c030b41f4dec00041ff1f36020041e0dec000200536020041dcdec000200336020041c8dbc00041bcdbc00036020041d0dbc00041c4dbc00036020041c4dbc00041bcdbc00036020041d8dbc00041ccdbc00036020041ccdbc00041c4dbc00036020041e0dbc00041d4dbc00036020041d4dbc00041ccdbc00036020041e8dbc00041dcdbc00036020041dcdbc00041d4dbc00036020041f0dbc00041e4dbc00036020041e4dbc00041dcdbc00036020041f8dbc00041ecdbc00036020041ecdbc00041e4dbc0003602004180dcc00041f4dbc00036020041f4dbc00041ecdbc00036020041e8dec00041003602004188dcc00041fcdbc00036020041fcdbc00041f4dbc0003602004184dcc00041fcdbc0003602004190dcc0004184dcc000360200418cdcc0004184dcc0003602004198dcc000418cdcc0003602004194dcc000418cdcc00036020041a0dcc0004194dcc000360200419cdcc0004194dcc00036020041a8dcc000419cdcc00036020041a4dcc000419cdcc00036020041b0dcc00041a4dcc00036020041acdcc00041a4dcc00036020041b8dcc00041acdcc00036020041b4dcc00041acdcc00036020041c0dcc00041b4dcc00036020041bcdcc00041b4dcc00036020041c8dcc00041bcdcc00036020041d0dcc00041c4dcc00036020041c4dcc00041bcdcc00036020041d8dcc00041ccdcc00036020041ccdcc00041c4dcc00036020041e0dcc00041d4dcc00036020041d4dcc00041ccdcc00036020041e8dcc00041dcdcc00036020041dcdcc00041d4dcc00036020041f0dcc00041e4dcc00036020041e4dcc00041dcdcc00036020041f8dcc00041ecdcc00036020041ecdcc00041e4dcc0003602004180ddc00041f4dcc00036020041f4dcc00041ecdcc0003602004188ddc00041fcdcc00036020041fcdcc00041f4dcc0003602004190ddc0004184ddc0003602004184ddc00041fcdcc0003602004198ddc000418cddc000360200418cddc0004184ddc00036020041a0ddc0004194ddc0003602004194ddc000418cddc00036020041a8ddc000419cddc000360200419cddc0004194ddc00036020041b0ddc00041a4ddc00036020041a4ddc000419cddc00036020041b8ddc00041acddc00036020041acddc00041a4ddc00036020041c0ddc00041b4ddc00036020041b4ddc00041acddc00036020041d0dec000200336020041bcddc00041b4ddc00036020041c8dec000200541286b220036020020032000410172360204200020036a412836020441ecdec00041808080013602000b4100210241c8dec000280200220020044d0d0041c8dec000200020046b220336020041d0dec00041d0dec000280200220020046a22013602002001200341017236020420002004410372360204200041086a0f0b20020f0b200341086a0baf11020f7f017e230041a0016b22032400200341086a220120022802001017220f10141076200341186a2202200f10151076200f10162110200341ec006a4102360200200341d4006a41223602002003420237025c200341e4bec0003602582003412236024c2003200341c8006a3602682003200236025020032001360248200341286a200341d8006a220110612001201010ae0102400240200328025845044020002003290328370200200041086a200341306a2802003602000c010b200341406b200341e0006a2201280200220c360200200320032903582212370338200328022821022012a7210d02400240027f027f024002402003280230220604404101210841002101024020064101460440410121090c010b410121054101210403402004210a024002402006200120076a22044b0440200220056a2d00002205200220046a2d000022044f044020042005460d0241012108200a41016a210441002101200a21070c030b2001200a6a41016a220420076b2108410021010c020b2004200641a08bc000107e000b4100200141016a2204200420084622051b21012004410020051b200a6a21040b200120046a22052006490d000b4101210541012104410021014101210903402004210a0240024020062001200b6a22044b0440200220056a2d00002205200220046a2d000022044d044020042005460d0241012109200a41016a210441002101200a210b0c030b2001200a6a41016a2204200b6b2109410021010c020b2004200641a08bc000107e000b4100200141016a2204200420094622051b21012004410020051b200a6a21040b200120046a22052006490d000b200721010b2001200b2001200b4b22011b220a20064d04402008200920011b2204200a6a220120044f0440200120064d04402002200220046a200a108b020440200a2006200a6b22074b210520064103712104200641016b410349044042002112200221010c070b2006417c7121084200211220022101034042012001310000862012844201200141016a31000086844201200141026a31000086844201200141036a31000086842112200141046a2101200841046b22080d000b0c060b4101210b410021014101210541002108034020062005220720016a220e4b04400240024002402006200620016b2007417f736a22054b044020062001417f736a20086b220920064f0d01200220056a2d00002205200220096a2d000022094f044020052009460d03200741016a2105410021014101210b200721080c040b200e41016a220520086b210b410021010c030b2005200641b08bc000107e000b2009200641c08bc000107e000b4100200141016a22052005200b4622091b21012005410020091b20076a21050b2004200b470d010b0b4101210b410021014101210541002109034020062005220720016a22114b04400240024002402006200620016b2007417f736a22054b044020062001417f736a20096b220e20064f0d01200220056a2d000022052002200e6a2d0000220e4d04402005200e460d03200741016a2105410021014101210b200721090c040b201141016a220520096b210b410021010c030b2005200641b08bc000107e000b200e200641c08bc000107e000b4100200141016a22052005200b46220e1b210120054100200e1b20076a21050b2004200b470d010b0b200420064d0440200620082009200820094b1b6b21074100210b200445044042002112410021040c060b200441037121080240200441016b410349044042002112200221010c010b2004417c7121054200211220022101034042012001310000862012844201200141016a31000086844201200141026a31000086844201200141036a31000086842112200141046a2101200541046b22050d000b0b2008450d05034042012001310000862012842112200141016a2101200841016b22080d000b0c050b20042006108602000b20012006108602000b20042001108702000b200a2006108602000b20034194016a41003602002003418c016a200c360200200341e4006a4181023b01002001200c36020020032002360290012003200d36028801200341003a00662003420037035841010c030b20060c010b20040440034042012001310000862012842112200141016a2101200441016b22040d000b0b200a200720051b41016a2104417f210b200a2107417f0b210120034194016a20063602002003418c016a200c36020020034180016a2001360200200341fc006a2205200b360200200341f8006a200c360200200341f4006a4100360200200341f0006a2004360200200341ec006a2007360200200341e8006a200a360200200341e0006a2201201237030020032002360290012003200d360288012003410136025820060d012012423088a721082012422088a70b2104200c200d6a2107200328025c2102200841ff0171210502400240034020050d0102402002450d002002200c4f04402002200c460d010c080b2002200d6a2c000041bf7f4c0d070b2003200736029c0120032002200d6a3602980120034198016a105a2101200441ff01710d022001418080c40047044041012104027f41012001418001490d001a41022001418010490d001a41034104200141808004491b0b20026a21020c010b0b200341013a00660b200341003602480c020b200341d0006a20023602002003200236024c200341013602480c010b2005280200417f470440200341c8006a2001200d200c20022006410010330c010b200341c8006a2001200d200c20022006410110330b20032802484101470440200341d4006a4122360200200341ec006a41023602002003420237025c200341f8bec0003602582003412236024c2003200341c8006a3602682003200341386a22013602502003200341286a22023602482000200341d8006a1061200110e501200210e5010c010b20002003290338370200200041086a200341406b280200360200200341286a10e5010b201010f101200f10f101200341186a10e501200341086a10e501200341a0016a24000f0b200d200c2002200c10c401000b831302127f027e230041e00f6b22012400200041e0006a2107200141fc0d6a210b200141e40e6a210c200141e80e6a210d200141f0036a2106200141c00f6a210e200141d80e6a210f200141f00d6a211020014190036a211141e0c6c00021084180ccc000210903400240200a4107470440410021020340200241e00046450440200020026a22032903001091022113200320132013109102107a10fe01200241086a21020c010b0b20014190036a220441e000108d02200141f0036a41a0d1c000418009108c021a200141003602880d200142003703800d200120063602fc0c20014280808080c0013703f00c200a41016a210a200621020340024020022004460d002001200441086a3602f80c200141e00e6a200141f0036a10910120012903e00e500d00200141f80d6a2202200d41e000108c021a200c200241e000108c021a200141900d6a2203200141e00e6a220541e400108c021a2002200341e400108c021a2005200b41e000108c021a200141003602d80f200142003703d00f200120073602cc0f20014280808080c0013703c00f2004290300211320002102200721030340024020022003460d002001200241086a3602c80f200141e0006a200141e00e6a1094012001290360a7450d00200442ffffffff0f42002013201320012903682002290300107a221442ffffffff0f7c20142014428080808070561b7c2213561b20137c221337030020012802c80f210220012802cc0f21030c010b0b20012802f80c210420012802fc0c21020c010b0b200020014190036a41e000108c022105410021020340200241e00046450440200220056a220342ffffffff0f420020032903002214200220086a290300221342ffffffff0f7c20132013428080808070561b7c22132014541b20137c370300200241086a21020c010b0b200141f0006a200541e000108c021a410021020340200241e00046450440200141f0006a20026a22032003290300109102370300200241086a21020c010b0b200141d0016a200141f0006a41e000108c021a410021020340200241e00046450440200141d0016a20026a22032003290300109102370300200241086a21020c010b0b200141b0026a200141d0016a41e000108c021a410021040340024020044103470440410021020340200241e000460d02200141b0026a20026a22032003290300109102370300200241086a21020c000b000b200141f0036a200141d0016a41e000108c021a200141003602e804200142003703e004200120113602dc0420014280808080c0013703d0042001200141b0026a3602d8040340200141d0006a200141f0036a108a012001280250220204402002200129035810fe010c010b0b20014190036a200141b0026a41e000108c021a410021040340024020044106470440410021020340200241e000460d0220014190036a20026a22032003290300109102370300200241086a21020c000b000b200141f0036a200141b0026a41e000108c021a200141003602e804200142003703e004200120063602dc0420014280808080c0013703d004200120014190036a3602d8040340200141406b200141f0036a108a012001280240220204402002200129034810fe010c010b0b200141900d6a20014190036a41e000108c021a41002104034002402004410c470440410021020340200241e000460d02200141900d6a20026a22032003290300109102370300200241086a21020c000b000b200141f0036a20014190036a41e000108c021a200141003602e804200142003703e004200120103602dc0420014280808080c0013703d0042001200141900d6a3602d8040340200141306a200141f0036a108a012001280230220204402002200129033810fe010c010b0b200141f80d6a200141900d6a41e000108c021a410021040340024020044106470440410021020340200241e000460d02200141f80d6a20026a22032003290300109102370300200241086a21020c000b000b200141f0036a200141b0026a41e000108c021a200141003602e804200142003703e0042001200f3602dc0420014280808080c0013703d0042001200141f80d6a3602d8040340200141206a200141f0036a108a012001280220220204402002200129032810fe010c010b0b200141e00e6a200141f80d6a41e000108c021a41002104034002402004411f470440410021020340200241e000460d02200141e00e6a20026a22032003290300109102370300200241086a21020c000b000b200141f0036a200141f80d6a41e000108c021a200141003602e804200142003703e0042001200e3602dc0420014280808080c0013703d0042001200141e00e6a3602d8040340200141106a200141f0036a108a012001280210220204402002200129031810fe010c010b0b410021020340200241e00046450440200220056a2203200141e00e6a20026a290300109102200141f80d6a20026a290300107a109102109102200141f0006a20026a290300200141d0016a20026a290300107a2003290300107a107a370300200241086a21020c010b0b20014190036a220441e000108d02200141f0036a41a0d1c000418009108c021a200141003602880d200142003703800d200120063602fc0c20014280808080c0013703f00c200621020340024020022004460d002001200441086a3602f80c200141e00e6a200141f0036a10910120012903e00e500d00200141f80d6a2202200d41e000108c021a200c200241e000108c021a200141900d6a2203200141e00e6a221241e400108c021a2002200341e400108c021a2012200b41e000108c021a200141003602d80f200142003703d00f200120073602cc0f20014280808080c0013703c00f2004290300211320052102200721030340024020022003460d002001200241086a3602c80f2001200141e00e6a1094012001290300a7450d00200442ffffffff0f42002013201320012903082002290300107a221442ffffffff0f7c20142014428080808070561b7c2213561b20137c221337030020012802c80f210220012802cc0f21030c010b0b20012802f80c210420012802fc0c21020c010b0b200520014190036a41e000108c022103410021020340200241e000460d0c200220036a220542ffffffff0f420020052903002214200220096a290300221342ffffffff0f7c20132013428080808070561b7c22132014541b20137c370300200241086a21020c000b000b200441016a21040c000b000b200441016a21040c000b000b200441016a21040c000b000b200441016a21040c000b000b200441016a21040c000b000b200141e00f6a24000f0b200941e0006a2109200841e0006a21080c000b000bdb0e010b7f0240024002400240024020002802082208410147200028021022034101477145044020034101470d03200120026a2107200041146a28020022060d01200121040c020b2000280218200120022000411c6a28020028020c11020021030c030b200121040340200422032007460d02027f200341016a20032c0000220441004e0d001a200341026a20044160490d001a200341036a20044170490d001a200441ff0171411274418080f0007120032d0003413f7120032d0002413f7141067420032d0001413f71410c74727272418080c400460d03200341046a0b2204200520036b6a2105200641016b22060d000b0b20042007460d0020042c0000220341004e200341604972200341704972450440200341ff0171411274418080f0007120042d0003413f7120042d0002413f7141067420042d0001413f71410c74727272418080c400460d010b024002402005450440410021040c010b200220054d044041002103200520022204460d010c020b410021032005220420016a2c00004140480d010b20042105200121030b2005200220031b21022003200120031b21010b2008450d012000410c6a280200210b024002400240200241104f04402002200141036a417c71220320016b220749200741044b720d02200220076b22094104490d022009410371210a410021084100210402402007450d0020074103712105024020032001417f736a4103490440200121030c010b2007417c712106200121030340200420032c000041bf7f4a6a200341016a2c000041bf7f4a6a200341026a2c000041bf7f4a6a200341036a2c000041bf7f4a6a2104200341046a2103200641046b22060d000b0b2005450d000340200420032c000041bf7f4a6a2104200341016a2103200541016b22050d000b0b200120076a21030240200a450d0020032009417c716a22052c000041bf7f4a2108200a4101460d00200820052c000141bf7f4a6a2108200a4102460d00200820052c000241bf7f4a6a21080b20094102762107200420086a21060340200321052007450d04200741c001200741c001491b220841037121092008410274210a0240200841fc0171220c4102742203450440410021040c010b200320056a210d41002104200521030340200420032802002204417f734107762004410676724181828408716a200341046a2802002204417f734107762004410676724181828408716a200341086a2802002204417f734107762004410676724181828408716a2003410c6a2802002204417f734107762004410676724181828408716a2104200341106a2203200d470d000b0b2005200a6a2103200720086b2107200441087641ff81fc0771200441ff81fc07716a418180046c41107620066a21062009450d000b2005200c4102746a2103200941ffffffff036a220741ffffffff0371220441016a2205410371210820044103490440410021040c020b200541fcffffff07712105410021040340200420032802002204417f734107762004410676724181828408716a200341046a2802002204417f734107762004410676724181828408716a200341086a2802002204417f734107762004410676724181828408716a2003410c6a2802002204417f734107762004410676724181828408716a2104200341106a2103200541046b22050d000b0c010b2002450440410021060c030b200241037121040240200241016b410349044041002106200121030c010b2002417c71210541002106200121030340200620032c000041bf7f4a6a200341016a2c000041bf7f4a6a200341026a2c000041bf7f4a6a200341036a2c000041bf7f4a6a2106200341046a2103200541046b22050d000b0b2004450d020340200620032c000041bf7f4a6a2106200341016a2103200441016b22040d000b0c020b20080440200741ffffffff036b21050340200420032802002204417f734107762004410676724181828408716a2104200341046a2103200541016b22050d000b0b200441087641ff81fc0771200441ff81fc07716a418180046c41107620066a21060c010b2002417c71210441002106200121030340200620032c000041bf7f4a6a200341016a2c000041bf7f4a6a200341026a2c000041bf7f4a6a200341036a2c000041bf7f4a6a2106200341046a2103200441046b22040d000b20024103712205450d004100210403402006200320046a2c000041bf7f4a6a21062005200441016a2204470d000b0b2006200b49044041002103200b20066b22042105024002400240410020002d0020220620064103461b41037141016b0e020001020b41002105200421030c010b20044101762103200441016a41017621050b200341016a21032000411c6a2802002104200028020421062000280218210002400340200341016b2203450d01200020062004280210110100450d000b41010f0b410121032006418080c400460d01200020012002200428020c1102000d014100210303402003200546044041000f0b200341016a2103200020062004280210110100450d000b200341016b2005490f0b0c010b20030f0b2000280218200120022000411c6a28020028020c1102000b831402137f027e230041c0016b220224002000027f0240024002400240024002400240024020002d002041016b0e03050201000b200020002902003702142000411c6a200041086a2802003602000b024020002d001c41016b0e03050100020b200028021821080c020b000b2000200028021422083602180b200041146a2113200241386a200841406b41f4bfc00010a601200228023c210e20022802382104200241306a200841306a4184c0c00010a601200841086a210c200041186a21142004280208220541016b2106410020056b2103200541186c410c6b21052002280234210f200228023021090240034020034504400240024002400240034020042802082103034020030d0b20092802082203450440200241003602400c030b2009200341016b22063602082009280200200641186c6a2203280200220a04402003280214210620032902042115200241206a200328020c220b2001200341106a280200221028020c110300200228022022034102470440200228022421052002200636026c200220103602682002200b3602642002201537025c2002200a360258200c200241d8006a2003200510520c030b200428020822032004280204460440230041206b22052400027f41002003200341016a22074b0d001a4104210320042802042211410174220d20072007200d491b22074104200741044b1b220dad42187e22164220885041027421072016a7211202402011450440410021030c010b2005200428020036021020052011ad42187e3e02140b20052003360218200520122007200541106a105d2005280200450440200528020421072004200d360204200420073602004181808080780c010b20052802042107200541086a2802000b21032007200310da01200541206a2400200428020821030b2004280200200341186c6a220320063602142003200b36020c200320153702042003200a360200200341106a20103602002004200428020841016a22033602080c010b0b0b20042802080d092002200636024020060d010b200241186a200841206a41e8c0c000109a01200228021c210720022802182205280208450d01200841d0006a28020041f8c0c000410b200841d4006a28020028020c1103002005280208411c6c2106200528020021030340200604402002410036028801200242013703800120032802142201280208220441ffffffff074f0d042001200441016a36020820024180016a22044190c2c00041052001410c6a280200200141146a280200109f0120044195c2c0004103200141186a280200200141206a280200109f0120044198c2c0004104200141246a2802002001412c6a280200109f012004419cc2c0004104200141306a280200200141386a280200109f01200441a0c2c00041052001413c6a280200200141c4006a280200109f01200441a5c2c00041c3c2c00010c00120024190016a220a2008280250200341186a2008280254280214110300200241d8006a2209200228029001200228029801103220042002280258200228026010f601200910e501200241b0016a220c20022802800120022802880110322002412236024c20024122360244200220033602402002410236026c2002420237025c200241d8c2c0003602582002200c3602482002200241406b360268200241a0016a220b20091061200c10e501200828025020022802a00120022802a801200828025428020c110300200b10e501200a10e5012001200128020841016b3602082006411c6b21062003411c6a2103200410e5010c010b0b20082802504183c1c000410a200828025428020c1103002005280208411c6c21012005280200210303402001450d022008280250200828025421062002410136026c2002420137025c20024194c1c000360258200241223602b4012002200241b0016a360268200220033602b001200241406b2209200241d8006a106120022802402002280248200628020c1103002001411c6b21012003411c6a2103200910e5010c000b000b20024100360258230041206b22002400200041b4c0c0003602042000200241406b360200200041186a200241d8006a220141106a290200370300200041106a200141086a29020037030020002001290200370308200041a0a1c000200041046a41a0a1c000200041086a41b8c0c0001040000b200841d0006a220128020041c0dac0004100200841d4006a220428020028020c11030020012802002004280200210420052802082101200241ec006a4101360200200241e4006a410136020020024106410220011b3602a401200241f0c1c00041bebec00020011b3602a0012002200841186a28020036027c20022001360280012008411c6a2802002101200241f4006a4101360200200241d4006a41043602002002412336025c2002200136029001200241003602482002200241a0016a360258200220024180016a3602682002200241fc006a360260200220024190016a36027020024105360244200241c8c1c0003602402002200241d8006a360250200241b0016a2201200241406b106120022802b00120022802b801200428020c110300200110e5012007200728020041016b360200200241106a200028021841206a41c8c0c000109a012002280210280208210120022802142204200428020041016b360200200f200f28020041016a360200200e200e28020041016a36020020141059200041013a001c4123412220011b210641000c070b41b4bdc0004118200241d8006a41f8bdc0004180c2c0001077000b200620042802082207490440200241286a200428020020056a22072802002001200741046a28020028020c1103002002280228221041024704402004280208220720064d0d03200228022c2111200241d0006a220d200428020020056a220a41046a290200370300200241c8006a2212200a410c6b220b41086a2902003703002002200b290200370340200b200a410c6a200320076a41186c108a022004200741016b360208200241e8006a200d290300370300200241e0006a201229030037030020022002290340370358200c200241d8006a2010201110520b200541186b2105200641016b2106200341016a21030c010b0b200620074194c0c000107e000b230041306b2200240020002007360204200020063602002000411c6a41023602002000412c6a41013602002000420337020c200041f481c000360208200041013602242000200041206a3602182000200041046a36022820002000360220200041086a41a4c0c00010b701000b41b0b9c00041234198b9c00010a901000b41b0b9c00041234190c5c00010a901000b200f200f28020041016a360200200e200e28020041016a360200200041033a001c41020b22014102462204047f410305201310e201200241086a20004110410c20011b6a2802004120200610a201200228020c2002280208044041c0b7c0004115108802000b10f101412010f101200610f101200028020c10f101200028021010f10141010b3a0020200241c0016a240020040bd70e01077f230041306b220024000240024041b8dfc0002802004103460d00200041086a410272210641b8dfc00028020021020340024002400240024002400240024002400240024002400240024002400240024020020e0402000111010b2000412c6a4100360200200041c0dac0003602282000420137021c200041b8abc000360218200041186a41c0bac00010b701000b20024103714102460440034041f8dec0002802000d1241f8dec000417f36020041fcdec000280200220145044041fcdec000105522013602000b20012001280200220341016a36020020034100480d0341f8dec00041f8dec00028020041016a3602002001450d042002210341b8dfc000200641b8dfc0002802002202200220034622041b360200200041003a00102000200136020820002003417c7136020c02402004044020002d0010450d010c100b024020002802082201450d0020012001280200220141016b36020020014101470d002000280208109e010b20024103714102460d010c100b0b034041f8dec0002802000d1241f8dec000417f36020041fcdec000280200220245044041fcdec000105522023602000b20022002280200220141016a36020020014100480d0341f8dec00041f8dec00028020041016a3602002002450d042002410020022802182201200141024622011b3602182001450440200241186a22012d00042103200141013a00042000200341017122033a001420030d06200141046a21034100210441b0dbc00028020041ffffffff07710440108e0241017321040b20032d00010d07200120012802002205410120051b3602002005450d0a20054102470d0820012802002105200141003602002000200536021420054102470d09024020040d0041b0dbc00028020041ffffffff0771450d00108e020d00200341013a00010b200341003a00000b20022002280200220141016b360200200141014604402002109e010b20002d0010450d000b0c0d0b41cdaac00041c00041c0bac00010a901000b41b8dfc00041b8dfc0002802002202410220021b36020020020d0d41b0dbc00028020041ffffffff07710440108e02450d080b41a4dbc00028020041a4dbc000417f3602000d0041acdbc000280200210241acdbc00041d0bac00036020041a8dbc000280200210141a8dbc000410136020041a4dbc000410036020002402002450d00200120022802001104002002280204450d002001102c0b41b8dfc000280200210241b8dfc000410336020020002002410371220136020820014102470d08200241026b2201450d0e034020012802002103200141003602002003450d0a2001280204200141013a0008200328021821012003410236021802400240024020010e03020102000b2000412c6a4100360200200041c0dac0003602282000420137021c2000418cb1c000360218200041186a4194b1c00010b701000b200341186a22012d00042104200141013a00042000200441017122043a000820040d0c200141046a21010240024002402000027f41b0dbc00028020041ffffffff07710440108e02210420012d0001450d0220044101730c010b20012d0001450d0241000b3a001c2000200136021841dca7c000412b200041186a4188a8c00041a4b1c0001077000b2004450d010b41b0dbc00028020041ffffffff0771450d00108e020d00200141013a00010b200141003a00000b20032003280200220141016b360200200141014604402003109e010b22010d000b0c0e0b000b230041106b22012400200141de0036020c200141c3a8c000360208230041206b22022400200241146a410136020020024201370204200241c0dac0003602002002410436021c2002200141086a3602182002200241186a360210200241c0a9c00010b701000b2000412c6a4100360200200041286a41c0dac0003602002000420137021c200041f4aec000360218200041146a200041186a108401000b200020043a001c2000200336021841dca7c000412b200041186a4188a8c00041f8afc0001077000b2000412c6a4100360200200041c0dac0003602282000420137021c200041a0b0c000360218200041186a41a8b0c00010b701000b2000412c6a4100360200200041286a41c0dac0003602002000420137021c200041d8b0c000360218200041146a200041186a41e0b0c000108501000b2000412c6a4100360200200041c0dac0003602282000420137021c20004184aec000360218200041186a41c4aec00010b701000b2000412c6a4100360200200041c0dac0003602282000420137021c200041dcacc000360218200041186a4180adc00010b701000b20004100360218200041086a200041186a41c4abc000108501000b41ccbdc000412b41d4abc00010a901000b2000412c6a4100360200200041286a41c0dac0003602002000420137021c200041f4aec000360218200041086a200041186a108401000b20002802082202450d0020022002280200220241016b36020020024101470d002000280208109e010b41b8dfc00028020021020c000b000b200041306a24000f0b41a4bdc0004110200041186a41cca7c0004198acc0001077000b930902057f017e230041e0016b22032400200341086a20012002109601200341206a200341106a2802002201360200200320032903083703182003410036023020034208370328024002402001450d00200341d8006a412c360200200341d0006a42ac80808010370300200341cc006a2001360200200341c8006a4100360200200341c4006a2001360200200341013b015c200320032802183602402003200136023c20034100360238200341f0006a200341386a103820032802702101200341c0016a2202200328027822041092012002200410930120044103742102200441ffffffff0171210520032802c00120032802c80122064103746a2104034020020440200341386a22072001280200200128020410492004200741eca4c00010a701370300200241086b2102200441086a2104200141086a21010c010b0b200341c8016a2201200520066a360200200341286a10c901200341306a22022001280200360200200320032903c001370328200341f0006a10c901200228020022014108490d000240024020014103710e0403010100010b200341286a420110b201200328023021010c020b420121080340200341286a200810b20142002108200328023022014103710d000b0c010b420121080340200341286a200810b20142002108200328023022014108490d000b0b200141037145200141094f71200141084672450440200341cc006a41013602002003420137023c200341c8a4c000360238200341013602c401200320013602702003200341c0016a3602482003200341f0006a3602c001200341386a41d0a4c00010b701000b200341406b200341306a28020036020020032003290328370338200341e0006a200341386a105b0240200328026822014108460440200341f0006a20032802604108104f0c010b200141027641016b22024101460440200341f0006a20032802602001104f0c010b200341386a2204200341e0006a200141086b10900120034190016a2004105f200341c0016a200328029001200328029801104f20024101200241014b1b41016b2101034020010440200341d0006a200341d8016a290300370300200341c8006a200341d0016a290300370300200341406b200341c8016a290300370300200320032903c001370338200341a0016a2202200341386a2204109c012004200341e0006a200328026841046b109001200341b0016a22052004105f2005200210ab01200341c0016a20032802b00120032802b801104f200141016b2101200510c901200210c9010c010520034188016a200341d8016a29030037030020034180016a200341d0016a290300370300200341f8006a200341c8016a290300370300200320032903c00137037020034190016a10c9010b0b0b200341d0006a20034188016a290300370300200341c8006a20034180016a290300370300200341406b2201200341f8006a29030037030020032003290370370338200341c0016a2202200341386a2204108001200341b0016a2002109b01200341e0006a10c901200341186a10ee012001200341b8016a280200360200200320032903b0013703382003200410a30120002003290300370300200341e0016a24000bc40901087f230041d0016b22032400200341286a20012002109601200341406b200341306a2802002201360200200320032903283703384100210220034100360250200342013703480240024002402001450d00200341a8016a412c360200200341a0016a42ac808080103703002003419c016a200136020020034198016a410036020020034194016a2001360200200341013b01ac0120032003280238360290012003200136028c012003410036028801200341d8006a20034188016a103820032802582107200341106a2003280260220510950120032003280214220236026c2003200328021022083602680240200220054f0d00200241017422012005200120054b1b22014108200141084b1b210120032002047f2003200236028c01200320083602880141010541000b3602900120034188016a210641002102230041106b22042400200341b0016a2209027f200141004e0440027f200628020804402006280204450440200441086a200110cf01200428020c210220042802080c020b2001210220062802002001102a0c010b2004200110cf012004280204210220042802000b220604402009200636020441000c020b20092001360204410121020b41010b360200200941086a2002360200200441106a240020032802b0014504402003200136026c200320032802b40122083602680c010b200341b8016a2802002201418180808078460d0020010440000b10b601000b200720054103746a2106200541ffffffff01712109034002402006200747044020072802042202450440410021050c060b024002400240200728020022012d0000412b6b0e03000401040b200241016b22020d010c060b4101210520024101460d060c020b200141016a21010c010b200341f0006a22042009360200200341c8006a10ee01200341d0006a2201200428020036020020032003290368370348200341d8006a10c901200128020022024120470d022003422037025c2003200328024836025820034188016a2201200341d8006a1034200341e8006a20014194a7c0001072200341a0016a20034180016a29030037030020034198016a200341f8006a29030037030020034190016a220220042903003703002003200329036837038801200341b0016a22042001108001200341186a2004109b01200341c8006a10ee01200341386a10ee012002200341206a2802003602002003200329031837038801200341086a200110a30120002003290308370300200341d0016a24000f0b0240200241034f04404100210403402002450d0220012d000041306b220a41094b0d0541022105200441ff0171410a6c22044108760d06200141016a2101200241016b2102200441ff0171200a41ff01716a220441ff01712004460d000b0c050b4100210403404101210520012d000041306b220a41094b0d05200141016a21012004410a6c200a6a2104200241016b22020d000b0b200820043a0000200841016a2108200741086a21070c000b000b2003419c016a41013602002003420137028c01200341aca6c00036028801200341013602b401200320023602682003200341b0016a360298012003200341e8006a3602b00120034188016a4184a7c00010b701000b410121050b200320053a00880141e0a4c000410a20034188016a41d4a2c00041a4a7c0001077000bc707020d7f017e200028020022002802082103200028020021054101210802402001280218220941222001411c6a280200220a280210220b1101000d00027f02402003450d00200320056a210d410021002005210c2005210402400340027f20042c0000220141004e0440200141ff01712102200441016a0c010b20042d0001413f7121022001411f7121072001415f4d044020074106742002722102200441026a0c010b20042d0002413f7120024106747221022001417049044020022007410c74722102200441036a0c010b2007411274418080f0007120042d0003413f71200241067472722202418080c400460d02200441046a0b21044102210102400240027f024002400240024002400240200241096b0e050204010103000b41302002450d051a2002412246200241dc0046720d040b2002103b450440200210640d060b200241017267410276410773ad4280808080d00084210f4103210120020c040b41f4000c030b41f2000c020b41ee000c010b20020b2107200020064b0d0102402000450d00200020034f044020002003460d010c030b200020056a2c00004140480d020b02402006450d00200320064d044020032006470d030c010b200520066a2c000041bf7f4c0d020b2009200020056a200620006b200a28020c110200044041010f0b03402001210e41dc0021004101210102400240024002400240200e41016b0e03010400020b0240024002400240200f422088a741ff017141016b0e050603000102050b200f42ffffffff8f608342808080802084210f4103210141fb0021000c060b200f42ffffffff8f608342808080803084210f4103210141f50021000c050b200f42ffffffff8f60834280808080c00084210f410321010c040b413041d7002007200fa7220141027476410f712200410a491b20006a21002001450440200f42ffffffff8f608342808080801084210f410321010c040b200f42017d42ffffffff0f83200f4280808080708384210f410321010c030b41002101200721000c020b027f41012002418001490d001a41022002418010490d001a41034104200241808004491b0b20066a21000c030b200f42ffffffff8f6083210f4103210141fd0021000b20092000200b110100450d000b0c060b2006200c6b20046a21062004210c2004200d470d010c020b0b200520032000200610c401000b2000450d000240200020034f0440200320002003460d031a0c010b200020056a2c000041bf7f4c0d0020000c020b200520032000200310c401000b41000b21012009200120056a200320016b200a28020c1102000d0020094122200b11010021080b20080bf80502047f017e230041b0016b22022400200241086a200141086a2802002203360200200220012902003703000240200341074d04404201210603402002200610b20142002106200228020822034108490d000b0c010b0240024020034103710e0402010100010b2002420110b201200228020821030c010b4201210603402002200610b20142002106200228020822034103710d000b0b200341037145200341094f71200341084672450440200241a4016a41013602002002420137029401200241c8a4c0003602900120024101360274200220033602202002200241f0006a3602a0012002200241206a36027020024190016a41fca4c00010b701000b20024198016a200241086a2802003602002002200229030037039001200241106a20024190016a105b0240200228021822014108460440200241206a20022802104108104f0c010b200141027641016b22034101460440200241206a20022802102001104f0c010b20024190016a2204200241106a200141086b109001200241406b2004105f200241f0006a20022802402002280248104f20034101200341014b1b41016b2103034020030440200241a8016a20024188016a290300370300200241a0016a20024180016a29030037030020024198016a200241f8006a2903003703002002200229037037039001200241d0006a220120024190016a2204109c012004200241106a200228021841046b109001200241e0006a22052004105f2005200110ab01200241f0006a20022802602002280268104f200341016b2103200510c901200110c9010c0105200241386a20024188016a290300370300200241306a20024180016a290300370300200241286a200241f8006a29030037030020022002290370370320200241406b10c9010b0b0b200241a8016a200241386a290300370300200241a0016a200241306a29030037030020024198016a200241286a2903003703002002200229032037039001200241f0006a220120024190016a10800120002001109b01200241106a10c901200241b0016a24000bdf0501087f0240200141ccff7b4b0d0041102001410b6a4178712001410b491b2102200041046b22052802002206417871210402400240024002400240024020064103710440200041086b2108200220044d0d01200420086a220741d0dec000280200460d0241ccdec0002802002007460d03200728020422064102710d062006417871220920046a220420024f0d040c060b200241800249200420024104724972200420026b418180084f720d050c040b200420026b22014110490d0320052006410171200272410272360200200220086a22032001410372360204200120036a220220022802044101723602042003200110310c030b41c8dec00028020020046a220420024d0d0320052006410171200272410272360200200220086a2201200420026b220341017236020441c8dec000200336020041d0dec00020013602000c020b41c4dec00028020020046a22042002490d020240200420026b2201410f4d044020052006410171200472410272360200200420086a22012001280204410172360204410021010c010b20052006410171200272410272360200200220086a22032001410172360204200120036a2202200136020020022002280204417e713602040b41ccdec000200336020041c4dec00020013602000c010b200420026b2101024020094180024f0440200710480c010b2007410c6a2802002203200741086a28020022074704402007200336020c200320073602080c010b41b4dbc00041b4dbc000280200417e200641037677713602000b200141104f044020052005280200410171200272410272360200200220086a22032001410372360204200120036a220220022802044101723602042003200110310c010b20052005280200410171200472410272360200200420086a220120012802044101723602040b200021030c010b200110202202450d00200220002001417c4178200528020022034103711b20034178716a220320012003491b108c022000102c0f0b20030bd20501097f024020020440200028020421092000280200210a200028020821070340024020072d0000450d00200a418dc1c0004104200928020c110200450d0041010f0b410021062002210402400240024003400240200120066a21050240024002400240200441084f0440200541036a417c7120056b2200450440200441086b2103410021000c030b20042000200020044b1b2100410021030340200320056a2d0000410a460d05200341016a22032000470d000b0c010b2004450d044100210320052d0000410a460d0320044101460d044101210320052d0001410a460d0320044102460d044102210320052d0002410a460d0320044103460d044103210320052d0003410a460d0320044104460d044104210320052d0004410a460d0320044105460d044105210320052d0005410a460d0320044106460d044106210320052d0006410a470d040c030b2000200441086b22034b0d010b0340200020056a2208280200220b417f73200b418a94a8d0007341818284086b71200841046a2802002208417f732008418a94a8d0007341818284086b717241808182847871450440200041086a220020034d0d010b0b200020044d0d0020002004108502000b20002004460d01200020046b2104200020056a2105410021030340200320056a2d0000410a4704402004200341016a22036a0d010c030b0b200020036a21030b0240200320066a220041016a22062000492002200649720d00200020016a2d0000410a470d00200741013a0000200220064d0d032006220020016a2c000041bf7f4c0d040c050b200220066b2104200220064f0d010b0b200741003a0000200221060b200620022200460d010b200120024100200610c401000b200a20012000200928020c110200044041010f0b0240200020024f044020002002460d010c040b200020016a2c000041bf7f4c0d030b200020016a2101200220006b22020d000b0b41000f0b200120022000200210c401000bbf0601057f200041086b2201200041046b280200220341787122006a210202400240024020034101710d002003410371450d012001280200220320006a2100200120036b220141ccdec00028020046044020022802044103714103470d0141c4dec000200036020020022002280204417e7136020420012000410172360204200020016a20003602000f0b20034180024f0440200110480c010b2001410c6a2802002204200141086a28020022054704402005200436020c200420053602080c010b41b4dbc00041b4dbc000280200417e200341037677713602000b024020022802042203410271044020022003417e7136020420012000410172360204200020016a20003602000c010b024002400240200241d0dec00028020047044041ccdec0002802002002470d0141ccdec000200136020041c4dec00041c4dec00028020020006a220036020020012000410172360204200020016a20003602000f0b41d0dec000200136020041c8dec00041c8dec00028020020006a220036020020012000410172360204200141ccdec000280200460d010c020b2003417871220420006a2100024020044180024f0440200210480c010b2002410c6a2802002204200241086a28020022024704402002200436020c200420023602080c010b41b4dbc00041b4dbc000280200417e200341037677713602000b20012000410172360204200020016a2000360200200141ccdec000280200470d0241c4dec00020003602000c030b41c4dec000410036020041ccdec00041003602000b41ecdec00028020020004f0d0141d0dec0002802002200450d01024041c8dec0002802004129490d0041dcdec000210103402000200128020022024f0440200220012802046a20004b0d020b200128020822010d000b0b10ac0141c8dec00028020041ecdec0002802004d0d0141ecdec000417f3602000f0b2000418002490d0120012000104741f4dec00041f4dec00028020041016b220036020020000d0010ac010f0b0f0b2000410376220241037441bcdbc0006a2100027f41b4dbc00028020022034101200274220271044020002802080c010b41b4dbc000200220037236020020000b2102200020013602082002200136020c2001200036020c200120023602080bf30401057f230041a0016b22032400200341186a20012002109601200341306a200341206a280200220136020020032003290318370328200341003602402003420837033802402001044020034198016a412c36020020034190016a42ac808080103703002003418c016a200136020020034188016a410036020020034184016a2001360200200341013b019c0120032003280228360280012003200136027c20034100360278200341c8006a200341f8006a103820032802482101200341d8006a2202200328025022041092012002200410930120044103742102200441ffffffff017121052003280258200328026022064103746a2104034020020440200341f8006a22072001280200200128020410492004200741f4a6c00010a701370300200241086b2102200441086a2104200141086a21010c010b0b200341e0006a2201200520066a360200200341386a10c901200341406b2202200128020036020020032003290358370338200341c8006a10c901200228020022044104460d010b2003418c016a41013602002003420137027c200341c8a5c0003602782003410136025c200320043602482003200341d8006a360288012003200341c8006a360258200341f8006a41d4a6c00010b701000b20034180016a2204200228020036020020032003290338370378200341c8006a200341f8006a2202105b2001200341d0006a280200360200200320032903483703582002200341d8006a220110672001200241e4a6c000107120022001105e200341086a2002109d01200341286a10ee012004200341106a280200360200200320032903083703782003200210a40120002003290300370300200341a0016a24000bfe04010a7f230041306b22032400200341246a2001360200200341033a00282003428080808080043703082003200036022020034100360218200341003602100240024002402002280208220a450440200241146a2802002204450d012002280200210120022802102100200441016b41ffffffff017141016a220721040340200141046a28020022050440200328022020012802002005200328022428020c1102000d040b2000280200200341086a200041046a2802001101000d03200041086a2100200141086a2101200441016b22040d000b0c010b2002410c6a2802002200450d002000410574210b200041016b41ffffff3f7141016a2107200228020021010340200141046a28020022000440200328022020012802002000200328022428020c1102000d030b20032004200a6a2205411c6a2d00003a00282003200541046a290200422089370308200541186a2802002106200228021021084100210941002100024002400240200541146a28020041016b0e020002010b200641037420086a220c2802044102470d01200c28020028020021060b410121000b2003200636021420032000360210200541106a28020021000240024002402005410c6a28020041016b0e020002010b200041037420086a22062802044102470d01200628020028020021000b410121090b2003200036021c20032009360218200820052802004103746a2200280200200341086a20002802041101000d02200141086a2101200b200441206a2204470d000b0b4100210020072002280204492201450d012003280220200228020020074103746a410020011b22012802002001280204200328022428020c110200450d010b410121000b200341306a240020000bd90401067f20002802002208410171220920046a210702402008410471450440410021010c010b024020024504400c010b2002410371220a450d00200121050340200620052c000041bf7f4a6a2106200541016a2105200a41016b220a0d000b0b200620076a21070b412b418080c40020091b210a024002402000280208450440410121052000200a2001200210a0010d010c020b024002400240024020072000410c6a280200220649044020084108710d0441002105200620076b22062107410120002d0020220820084103461b41037141016b0e020102030b410121052000200a2001200210a0010d040c050b41002107200621050c010b20064101762105200641016a41017621070b200541016a21052000411c6a2802002106200028020421082000280218210902400340200541016b2205450d01200920082006280210110100450d000b41010f0b410121052008418080c400460d012000200a2001200210a0010d01200920032004200628020c1102000d0141002105027f0340200720052007460d011a200541016a2105200920082006280210110100450d000b200541016b0b20074921050c010b200028020421082000413036020420002d0020210941012105200041013a00202000200a2001200210a0010d00200620076b41016a21052000411c6a28020021012000280218210202400340200541016b2205450d01200241302001280210110100450d000b41010f0b41012105200220032004200128020c1102000d00200020093a00202000200836020441000f0b20050f0b2000280218200320042000411c6a28020028020c1102000b8b0501077f230041f0006b22032400200010f4010240024020002802002204417f4704402000200441016a360200200341106a2001200210980120032802142105200328021021012003410441052003280218220241014622041b360224200341b1c4c00041acc4c00020041b3602202000280204220441d0006a2206280200200441d4006a22042802002108200341d4006a4102360200200341346a412336020020034202370244200341c0c4c0003602402003410136022c200320023602582003200341286a3602502003200341206a3602302003200341d8006a360228200341e0006a2209200341406b106120032802602003280268200828020c110300200910e501200628020041c0dac0004100200428020028020c110300200041046a2204b8101d210620032001200241027422026a22073602342003200536022c200320013602280340200245044020032007360230200341286a108e01200428020022012001280200220241016a2204360200200220044b0d03200341003a0048200320013602402003200341406b360228200341286a4198b8c000101e20032d00484104470440200341406b10e2010b200610f1012000200028020041016b360200200341f0006a24000f0b200341086a200128020022084121200610a201200328020c210520032802080d03200510f101412110f101200810f101200241046b2102200141046a21010c000b000b108902000b000b2003200536023c200341e0006a22012004280200220041d0006a2802002003413c6a200041d4006a280200280214110300200341d4006a41013602002003412236025c20034201370244200341f8c4c000360240200320013602582003200341d8006a360250200341406b4180c5c00010b701000b900501047f200020016a2102024002400240200028020422034101710d002003410371450d012000280200220320016a2101200020036b220041ccdec00028020046044020022802044103714103470d0141c4dec000200136020020022002280204417e7136020420002001410172360204200220013602000f0b20034180024f0440200010480c010b2000410c6a2802002204200041086a28020022054704402005200436020c200420053602080c010b41b4dbc00041b4dbc000280200417e200341037677713602000b20022802042203410271044020022003417e7136020420002001410172360204200020016a20013602000c020b0240200241d0dec00028020047044041ccdec0002802002002470d0141ccdec000200036020041c4dec00041c4dec00028020020016a220136020020002001410172360204200020016a20013602000f0b41d0dec000200036020041c8dec00041c8dec00028020020016a220136020020002001410172360204200041ccdec000280200470d0141c4dec000410036020041ccdec00041003602000f0b2003417871220420016a2101024020044180024f0440200210480c010b2002410c6a2802002204200241086a28020022024704402002200436020c200420023602080c010b41b4dbc00041b4dbc000280200417e200341037677713602000b20002001410172360204200020016a2001360200200041ccdec000280200470d0141c4dec00020013602000b0f0b20014180024f04402000200110470f0b2001410376220241037441bcdbc0006a2101027f41b4dbc00028020022034101200274220271044020012802080c010b41b4dbc000200220037236020020010b2102200120003602082002200036020c2000200136020c200020023602080bcb0401067f230041406a220324002000410036020820004201370200200341386a2207410a360200200341306a428a808080103703002003412c6a2002360200200341286a4100360200200341246a2002360200200341003b013c200320013602202003200236021c20034100360218034041002102024020040d0020032802202108027f024002400340200328022c22022003280228220149200220032802244b720d02200328022020016a2105200320032802346a41376a2d000021060240200220016b220141084f0440200341106a200620052001104220032802142102200328021021040c010b4100210441002102037f20012002460440200121020c020b2006200220056a2d000046047f410105200241016a21020c010b0b21040b20044101470d012003200220032802286a41016a2201360228200120032802342202490d00200120032802244b0d002003280220200341086a20022007410410d001200120026b22016a20022003280208200328020c108202450d000b2003280218210220032003280228360218200120026b2101200220086a0c020b2003200328022c3602280b4100210220032d003d0d0120032802182104200328021c210520032d003c45044020042005460d020b200341013a003d200520046b2101200328022020046a0b21022001450440410021010c010b200141016b22042001200220046a2d0000410d461b21010b200204402000418dc1c0004191c1c00010c00120002002200110f601200041f4bec00041f5bec00010c00120032d003d21040c010b0b200341406b24000bcc03020d7f017e41002001280208220a6b210d20052001280210220e6b210f200128021c21072001290300211420012802142108027f03404100200720061b2110200a200a20072007200a491b20061b220c20052005200c491b211102402001027f03402003200520086a220941016b22074d04402001200336021441000c050b2014200220076a3100008842018350450440200220086a2112200c21070240034020072011460440200a21070240024002400340200720104d0440200120093602142006450d020c0b0b200741016b220720054f0d02200720086a220b20034f0d03200420076a2d00002002200b6a2d0000460d000b20012008200e6a220836021420060d07200f0c080b2001410036021c0c080b200720054184bdc000107e000b200b20034194bdc000107e000b200720086a20034f0d01200720126a2113200420076a200741016a21072d000020132d0000460d000b20012008200d6a220920076a220836021420060d02200720096a210841000c030b20032008200c6a220020002003491b200341f4bcc000107e000b200120093602142009210820060d000b41000b220736021c0c010b0b20002008360204200041086a200936020041010b2107200020073602000bdf0202027f047e230041206b22022400200241086a2001108d012000027f0240024002402002280208450440200241106a22032903002104200241086a2001108d0120022802080d0120032903002105200241086a2001108d0120022802080d02200241106a22032903002106200241086a2001108d01200228020845044020032903002107200041186a2006200642ffffffff0f7c2006428180808070541b370300200041106a2005200542ffffffff0f7c2005428180808070541b370300200041086a2004200442ffffffff0f7c2004428180808070541b370300200041206a2007200742ffffffff0f7c2007428180808070541b37030041000c050b200329030021040c030b200241106a29030021040c020b200329030021040c010b200241106a29030021040b200228020c2101200041106a200241186a280200360200200041086a20043702002000200136020441010b360200200241206a24000bbc0302017e047f23004180016b220524002000280200210002400240027f02402001280200220441107145044020044120710d012000290300200110410c020b20002903002102418001210020054180016a21040240024003402000450440410021000c030b200441016b413041d7002002a72203410f712206410a491b20066a3a0000200242105a0440200441026b2204413041d700200341ff0171220341a001491b20034104766a3a0000200041026b210020024280025420024208882102450d010c020b0b200041016b21000b20004181014f0d030b200141d286c0004102200020056a41800120006b102f0c010b20002903002102418001210020054180016a21040240024003402000450440410021000c030b200441016b413041372002a72203410f712206410a491b20066a3a0000200242105a0440200441026b220441304137200341ff0171220341a001491b20034104766a3a0000200041026b210020024280025420024208882102450d010c020b0b200041016b21000b20004181014f0d030b200141d286c0004102200020056a41800120006b102f0b20054180016a24000f0b2000418001108502000b2000418001108502000bab0402017e057f4101210402402001280218220541272001411c6a28020028021022061101000d0041022101413021030240027e0240024002400240024002400240200028020022000e2808010101010101010102040101030101010101010101010101010101010101010101010101010105000b200041dc00460d040b2000103b450d04200041017267410276410773ad4280808080d000840c050b41f40021030c050b41f20021030c040b41ee0021030c030b200021030c020b20001064044041012101200021030c020b200041017267410276410773ad4280808080d000840b210241032101200021030b034020012107410021012003210002400240024002400240200741016b0e03040200010b024002400240024002402002422088a741ff017141016b0e050004010203050b200242ffffffff8f6083210241fd002100410321010c070b200242ffffffff8f608342808080802084210241fb002100410321010c060b200242ffffffff8f608342808080803084210241f5002100410321010c050b200242ffffffff8f60834280808080c00084210241dc002100410321010c040b413041d70020032002a7220141027476410f712200410a491b20006a21002001450d02200242017d42ffffffff0f83200242808080807083842102410321010c030b20054127200611010021040c040b41dc002100410121010c010b200242ffffffff8f6083428080808010842102410321010b200520002006110100450d000b0b20040b9103010f7f230041106b220624000240024020012d00250d002001411c6a2802002205200141206a220f6a41016b2110200141106a2802002103200141146a28020021072001410c6a280200210c2001280208210820054105492109024002400340200320074b2007200c4b720d02200320086a210d20102d0000210e0240200720036b220441084f0440200641086a200e200d20041042200628020c21022006280208210b0c010b4100210b41002102037f20022004460440200421020c020b200e2002200d6a2d000046047f410105200241016a21020c010b0b210b0b200b4101470d012001200220036a41016a220336021020032005492003200c4b720d002009450d042008200320056b22026a2005200f200510d701450d000b2001280200210420012003360200200220046b2102200420086a210a0c020b200120073602100b20012d002445200128020022092001280204220446710d00200141013a0025200420096b2102200820096a210a0b200020023602042000200a360200200641106a24000f0b20054104108602000ba70301097f23004190016b22022400200241206a220320014128108c021a200241186a2003103702402002280218220145044041042105410021010c010b200228021c2104200241106a4120410410ce012002280210220504402005200136020020052004360204200241c8006a200241206a4128108c021a410c21084102210741012101410421040340200241086a200241c8006a103720022802082209450d02200228020c210a200120044604404100210602402001200141016a22034d04402007200320032007491b22044104200441044b1b220441ffffffff017120044641027421032004410374210620022001047f2002200536028001200220014103743602840141040541000b36028801200241f0006a2006200320024180016a105d20022802704504402002280274210541818080807821060c020b20022802782106200228027421030b200121040b2003200610da010b200520086a2203200a360200200341046b2009360200200841086a2108200741026a2107200141016a21010c000b000b000b20002001360208200020043602042000200536020020024190016a24000baf0401077f230041e0006b22032400200010f401200341086a200010cd01200328020c210620032802082100200341106a2001200210980102400240200028020022002802084504402003280218210220032802142104200328021021012000417f360208200320043602242003200136022020032001200241027422026a220736022c2000410c6a2104024003402002450d01200341406b2001280200220810ae012003280240450d03200341386a2209200341c8006a28020022053602002003200329034037033020050440200341012003280230200510d00141b8c3c0004101200328020020032802041082020d050b2004280200450440200141046a2101200410f301200441086a200928020036020020042003290330370200200810f101200241046b21020c010b0b230041106b220024002000419cc4c0003602082000412e360204200041ecc3c000360200200028020021012000280204210220002802082103230041106b220024002000200236020c20002001360208200041086a4190bcc0004100200341011060000b20032007360228200341206a108e012000200028020841016a36020820064100360200200341e0006a24000f0b41a4bdc0004110200341406b4188bec0004198c3c0001077000b41ccbdc000412b41a8c3c00010a901000b200341d4006a410136020020034202370244200341ccc3c0003602402003412236025c2003200341d8006a3602502003200341306a360258200341406b41dcc3c00010b701000ba20301047f230041406a220224002000280208410374210420002802002100200128021841d086c00041012001411c6a28020028020c11020021034101210503400240024002400240200404402002200036020420034101710d020240200128020022034104714504402005450d010c050b2005450d0241012103200128021841f4bec0004101200128021c28020c1102000d05200128020021030c020b41012103200128021841bd86c0004102200128021c28020c110200450d030c040b410121042003410171450440200128021841d186c0004101200128021c28020c11020021040b200241406b240020040f0b200241013a001720022003360218200241a086c00036023420022001290218370308200220012d00203a00382002200128020436021c20022001290210370328200220012902083703202002200241176a3602102002200241086a360230200241046a200241186a108c010d00200228023041bb86c0004102200228023428020c11020021030c020b410121030c010b200241046a2001108c0121030b200041086a2100200441086b2104410021050c000b000be10201057f2000410b742104412021024120210302400340024002402004200241017620016a220241027441cc9ac0006a280200410b7422054d044020042005460d02200221030c010b200241016a21010b200320016b210220012003490d010c020b0b200241016a21010b024002402001411f4d04402001410274210441c30521032001411f470440200441d09ac0006a28020041157621030b410021052001200141016b22024f0440200241204f0d02200241027441cc9ac0006a28020041ffffff007121050b02402003200441cc9ac0006a2802004115762201417f736a450d00200020056b2104200141c305200141c3054b1b2102200341016b210041002103034020012002460d042003200141cc9bc0006a2d00006a220320044b0d012000200141016a2201470d000b200021010b20014101710f0b2001412041d899c000107e000b2002412041f899c000107e000b200241c30541e899c000107e000bcb0201067f200120024101746a210920004180fe0371410876210a200041ff0171210c0240024002400340200141026a210b200720012d000122026a2108200a20012d000022014704402001200a4b0d0320082107200b22012009470d010c030b200720084d044020042008490d02200320076a2101024003402002450d01200241016b210220012d0000200141016a2101200c470d000b410021020c050b20082107200b22012009470d010c030b0b20072008108702000b20082004108602000b200041ffff03712107200520066a21034101210203400240200541016a210020052d00002201411874411875220441004e047f20000520002003460d0120052d0001200441ff0071410874722101200541026a0b2105200720016b22074100480d022002410173210220032005470d010c020b0b41ccbdc000412b41b48ec00010a901000b20024101710bdd0201037f230041106b22022400200028020021000240027f0240024020014180014f04402002410036020c2001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b20002802082203200041046a280200460440200020031063200028020821030b2000200341016a360208200028020020036a20013a00000c030b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d41040b21012001200041046a280200200041086a220428020022036b4b04402000200320011062200428020021030b200028020020036a2002410c6a2001108c021a2004200120036a3602000b200241106a240041000bdb0201037f230041106b22022400200028020021000240027f024020014180014f04402002410036020c20014180104f0d0120022001413f71418001723a000d2002200141067641c001723a000c41020c020b20002802082203200041046a280200460440200020031063200028020821030b2000200341016a360208200028020020036a20013a00000c020b2001418080044f044020022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d41040c010b20022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030b21012001200041046a280200200041086a220428020022036b4b04402000200320011062200428020021030b200028020020036a2002410c6a2001108c021a2004200120036a3602000b200241106a240041000bcf0201027f230041b0016b22032400200341186a20012002109601200341306a200341206a28020022013602002003200329031837032820014120470440200341fc006a41013602002003420137026c200341aca6c000360268200341013602940120032001360248200320034190016a3602782003200341c8006a36029001200341e8006a41b4a6c00010b701000b2003422037023c20032003280228360238200341e8006a2202200341386a1034200341c8006a200241c4a6c000107220034180016a200341e0006a290300370300200341f8006a200341d8006a290300370300200341f0006a2201200341d0006a2903003703002003200329034837036820034190016a22042002108001200341086a2004109b01200341286a10ee012001200341106a280200360200200320032903083703682003200210a30120002003290300370300200341b0016a24000bb80201017f230041f0006b220624002006200136020c2006200036020820062003360214200620023602102006410236021c200641a085c00036021802402004280200450440200641cc006a4103360200200641c4006a4103360200200641ec006a41033602002006420437025c2006418086c0003602582006410436023c2006200641386a3602680c010b200641306a200441106a290200370300200641286a200441086a29020037030020062004290200370320200641ec006a4104360200200641d4006a4107360200200641cc006a4103360200200641c4006a41033602002006420437025c200641dc85c0003602582006410436023c2006200641386a3602682006200641206a3602500b2006200641106a3602482006200641086a3602402006200641186a360238200641d8006a200510b701000bbe0202057f017e230041306b2204240041272102024020004290ce00540440200021070c010b0340200441096a20026a220341046b20004290ce0080220742f0b17f7e20007ca7220541ffff037141e4006e220641017441d486c0006a2f00003b0000200341026b2006419c7f6c20056a41ffff037141017441d486c0006a2f00003b0000200241046b2102200042ffc1d72f56200721000d000b0b2007a7220341e3004b0440200241026b2202200441096a6a2007a7220541ffff037141e4006e2203419c7f6c20056a41ffff037141017441d486c0006a2f00003b00000b02402003410a4f0440200241026b2202200441096a6a200341017441d486c0006a2f00003b00000c010b200241016b2202200441096a6a200341306a3a00000b200141c0dac0004100200441096a20026a412720026b102f200441306a24000bb90201057f024002400240200241036a417c7120026b2204450440200341086b21060c010b2003200420032004491b210541002104200141ff01712107410121060340200220046a2d00002007460d032005200441016a2204470d000b2005200341086b22064b0d010b200141ff017141818284086c21040340200220056a22072802002004732208417f73200841818284086b71200741046a2802002004732207417f73200741818284086b717241808182847871450440200541086a220520064d0d010b0b200320054f0d0020052003108502000b024020032005460d00200520036b2103200220056a210241002104200141ff0171210103402001200220046a2d00004704402003200441016a22046a0d010c020b0b200420056a2104410121060c010b410021060b20002004360204200020063602000bda0202047f027e230041406a220324002000027f20002d000804402000280204210541010c010b200028020421052000280200220428020022064104714504404101200428021841bd86c00041ce86c00020051b4102410120051b2004411c6a28020028020c1102000d011a20012004200228020c1101000c010b2005450440200428021841cc86c00041022004411c6a28020028020c11020004404100210541010c020b200428020021060b200341013a0017200341346a41a086c000360200200341106a200341176a36020020032006360218200320042902183703082004290208210720042902102108200320042d00203a00382003200428020436021c20032008370328200320073703202003200341086a36023041012001200341186a200228020c1101000d001a200328023041bb86c0004102200328023428020c1102000b3a00082000200541016a360204200341406b240020000bdf0201067f230041406a220224004101210502402001280218220341959ac000410d2001411c6a280200220628020c22041102000d0020012802002207410471450440200341bf86c000410320041102000d01200341889ac000410420041102000d01200341e0bec000410220041102000d0120002d0000200110700d01200341ca86c0004102200411020021050c010b200341b886c000410320041102000d00200241013a0017200241346a41a086c0003602002002200636020c20022003360208200241106a200241176a36020020022007360218200220012d00203a00382002200128020436021c20022001290210370328200220012902083703202002200241086a2201360230200141889ac0004104102b0d00200241086a41e0bec0004102102b0d0020002d0000200241186a10700d00200241086a41bb86c0004102102b0d00200341c286c0004101200411020021050b200241406b240020050bc20201067f230041206b220224002000280200220541086a210603400240200241086a200641e4b5c00010a501200228020c21002002280208220328020022042003280204460d002003200328020c41016b200441016a71360200200328020820044102746a2802002203450d00200220033602102000200028020041016a36020020022002280210220441086a41b0b7c00010a501200228020421030240200228020022002802002207450d002004411c6a41003a000020022000410020071b220441086a3602142004280200200241146a200428020428020c1101000d00200010b40120004100360200200020022902143702042000410c6a2002411c6a2802003602000b2003200328020041016a360200200241106a10b3010c010b0b2000200028020041016a3602002005411c6a41003a0000200110f101200241206a24000ba10201037f23004180016b2204240002400240024002402001280200220241107145044020024120710d012000ad2001104121000c040b410021020340200220046a41ff006a413041d7002000410f712203410a491b20036a3a0000200241016b21022000410f4b200041047621000d000b20024180016a22004181014f0d01200141d286c0004102200220046a4180016a410020026b102f21000c030b410021020340200220046a41ff006a413041372000410f712203410a491b20036a3a0000200241016b21022000410f4b200041047621000d000b20024180016a22004181014f0d01200141d286c0004102200220046a4180016a410020026b102f21000c020b2000418001108502000b2000418001108502000b20044180016a240020000bb00201047f411f210220004200370210200141ffffff074d04402001410620014108766722036b7641017120034101746b413e6a21020b2000200236021c200241027441c4ddc0006a2104024002400240024041b8dbc000280200220541012002742203710440200428020022032802044178712001470d01200321020c020b41b8dbc000200320057236020020042000360200200020043602180c030b20014100411920024101766b411f712002411f461b742104034020032004411d764104716a41106a22052802002202450d02200441017421042002210320022802044178712001470d000b0b20022802082201200036020c20022000360208200041003602182000200236020c200020013602080f0b20052000360200200020033602180b2000200036020c200020003602080bb30201057f20002802182104024002402000200028020c2201460440200041144110200041146a220128020022031b6a28020022020d01410021010c020b20002802082202200136020c200120023602080c010b2001200041106a20031b21030340200321052002220141146a22032802002202450440200141106a2103200128021021020b20020d000b200541003602000b02402004450d0002402000200028021c41027441c4ddc0006a220228020047044020044110411420042802102000461b6a200136020020010d010c020b2002200136020020010d0041b8dbc00041b8dbc000280200417e200028021c77713602000f0b2001200436021820002802102202044020012002360210200220013602180b200041146a2802002200450d00200141146a2000360200200020013602180b0b950202027e027f230041106b220524002000027f024002402002450440200041003a00010c010b02400240024020012d0000412b6b0e03010200020b20024101470d010c030b200241016b2202450d02200141016a21010b024002400240200241114f0440034020052003420a107520012d000041306b220641094b0d0620052903084200520d04200529030022042006ad7c22032004540d03200141016a2101200241016b22020d000b0c010b034020012d000041306b220641094b0d05200141016a21012006ad2003420a7e7c2103200241016b22020d000b0b200041086a200337030041000c040b200041023a00010c010b200041023a00010b41010c010b200041013a000141010b3a0000200541106a24000bac0201067f230041106b2201240020002802002200200028020041016b22023602000240024020020d00200041186a2802002103200041146a2802002105027f200041106a28020022022000410c6a2802002204490440200120052003200410ad012001410c6a280200210320012802082104200120012802002001280204200210ad012001280200210620012802040c010b200120052003410010ad0120022001410c6a28020022034b0d0220012802002106200220046b2103200128020820044102746a210420012802040b21052004200310c5012006200510c5012000280218220245200241ffffffff0371200247724504402000280214200241027410f8010b2000200028020441016b220236020420020d002000102c0b200141106a24000f0b20022003108602000b8e0202017f017e23004180016b22032400200341186a20012002109701200328022022014104470440200341ec006a41013602002003420137025c200341c8a5c0003602582003410136023c200320013602282003200341386a3602682003200341286a360238200341d8006a41d0a5c00010b701000b200329031821042003410436026020032004370358200341286a200341d8006a2201105b200341406b200341306a280200360200200320032903283703382001200341386a220210672002200141e0a5c000107120012002105e200341086a2001109d01200341e0006a200341106a280200360200200320032903083703582003200110a4012000200329030037030020034180016a24000b950201027f230041106b22022400024020002002410c6a027f0240024020014180014f04402002410036020c2001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b2000280208220320002802044604402000200310c101200028020821030b2000200341016a360208200028020020036a20013a00000c030b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d41040b10f6010b200241106a240041000b8f0201027f230041106b220224000240200141ff004d04402000280208220320002802044604402000200310c101200028020821030b2000200341016a360208200028020020036a20013a00000c010b2002410036020c20002002410c6a027f20014180104f044020014180800449044020022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c020b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d41040c010b20022001413f71418001723a000d2002200141067641c001723a000c41020b10f6010b200241106a24000b9707020b7f027e230041106b2206240020002802002207411c6a22002d00002101200041013a000002400240024020014101710d00027f230041206b22012400024041a4dfc000280200450440412010ef012202450d01412010eb01220041003a001c20004108360218200020023602142000410036021020004200370208200042818080801037020041201010210320002000280200220241016a2204360200200220044b0d01410410eb012202200036020020024184b6c000411e101f2104412010f10141a4dfc000290200210c41a4dfc000200036020041a8dfc000200336020041acdfc000290200210d41acdfc000200436020041b0dfc000200236020041b4dfc000280200210041b4dfc0004184b6c000360200200141186a2000360200200141106a200d3703002001200c3703080240200141086a2200280200450d002000104a200028020410f101200041086a280200100e450d002000410c6a10e1010b0b200141206a240041a4dfc0000c010b000b2204450d0220072007280200220041016a2201360200200020014b0d0120062004280200220b41086a41f4b5c00010a501200628020421082006280200220228020c2200200041016b22002002280204220120022802006b716b410146044041002100230041206b2203240002402002410c6a2802002201450d000240200120016a22002001490d0020034104360218200320014102743602142003200228020836021020032000410274200041ffffffff0371200046410274200341106a105d2003280200450440200328020421052002200036020c200220053602080c020b20012100200341086a2802002205418180808078460d012005450d00000b10b601000b024020014101742000460440024020022802002209200228020422054d0d00200120096b220a20054d0440200228020822012000200a6b22004102746a200120094102746a200a410274108c021a200220003602000c010b2002280208220020014102746a20002005410274108c021a2002200120056a3602040b200341206a24000c010b41c2b3c000412b41f0b3c00010a901000b20022802042101200228020c41016b21000b20022000200141016a71360204200228020820014102746a20073602002008200828020041016a360200200b411c6a22002d0000200041013a00004101710d0020042802042004280208100f10f1010b200641106a24000f0b000b41e8bac00041c600200641086a41d4b2c0004180bcc0001077000bff0102037f027e230041e0006b22032400200341086a41d800108d0220032002ad370300200241037421020240034020020440200441046a2205410c4f0d02200320054103746a220542ffffffff0f4200200529030022072001290300220642ffffffff0f7c20062006428080808070561b7c22062007541b20067c370300200441016a220441077145044020031022410021040b200141086a2101200241086b21020c010b0b20040440200310220b20002003290320370300200041186a200341386a290300370300200041106a200341306a290300370300200041086a200341286a290300370300200341e0006a24000f0b2005410c41c4a2c000107e000b810202047f017e230041306b22022400200141046a2104200128020445044020012802002103200241106a22054100360200200242013703082002200241086a360214200241286a200341106a290200370300200241206a200341086a29020037030020022003290200370318200241146a41b4a7c000200241186a102e1a200441086a2005280200360200200420022903083702000b200241206a2203200441086a2802003602002001410c6a4100360200200429020021062001420137020420022006370318410c10202201450440000b20012002290318370200200141086a2003280200360200200041a0adc00036020420002001360200200241306a24000ba20202037f017e230041106b22032400200028020022002d00082104200041043a00082004410446044041c0b7c0004115108802000b200029020021062003410a6a22052000410b6a2d00003a0000200320002f00093b0108412410f201220020043a000820002006370200200041003a0020200020023602102000200136020c200020032f01083b00092000410b6a20052d00003a0000412010eb01220141003a001c2001420037020820014282808080103702002003200136020c2003200141086a22044190b7c00010a501200328020421022003280200220110b401200141a0b7c00036020c2001200436020820014188b8c000360204200120003602002002200228020041016a3602002003410c6a2200104e200010b301200341106a24000bdf0302077f017e230041106b2205240020052003360204200520023602002000280248200128020020012802082005200041cc006a2802002802101106000240024020052802004504402000200028021041016a360210200110740c010b20002802180d01200528020421092000417f360218200041246a2802002202200041206a2802004604402000411c6a2106230041206b22032400027f41002002200241016a22044b0d001a41042102200628020422084101742207200420042007491b22044104200441044b1b2207ad421c7e220b422088504102742104200ba7210a02402008450440410021020c010b2003200628020036021020032008ad421c7e3e02140b200320023602182003200a2004200341106a105d20032802004504402003280204210420062007360204200620043602004181808080780c010b20032802042104200341086a2802000b21022004200210da01200341206a2400200028022421020b200028021c2002411c6c6a2202200129020037020020022009360218200241106a200141106a290200370200200241086a200141086a2902003702002000200028021841016a3602182000200028022441016a3602240b200541106a24000f0b41a4bdc0004110200541086a4188bec00041d8c0c0001077000be60101017f230041106b2202240020002802002002410036020c2002410c6a027f0240024020014180014f04402001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b200220013a000c41010c020b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d41040b102b200241106a24000be30101017f230041106b220224002002410036020c20002002410c6a027f0240024020014180014f04402001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b200220013a000c41010c020b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d41040b102b200241106a24000b990202037f017e230041206b220024000240412010202201044020014100360210200142818080801037030041a0dbc0002d0000210241a0dbc00041013a0000200020023a000720020d0102404190dbc0002903002203427f5204404190dbc000200342017c37030020034200520d0141ccbdc000412b41a0aac00010a901000b41a0dbc00041003a00002000411c6a4100360200200041c0dac0003602182000420137020c20004188aac000360208200041086a4190aac00010b701000b200142003703182001200337030841a0dbc00041003a0000200041206a240020010f0b000b2000411c6a4100360200200041186a41c0dac0003602002000420137020c200041f4aec000360208200041076a200041086a108401000b870201017f230041106b22022400027f0240024002400240200028020041016b0e03010203000b200220012802184180dbc000410c2001411c6a28020028020c1102003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41d4dac0001043106c0c030b200128021841f3dac000410d2001411c6a28020028020c1102000c020b200128021841e4dac000410f2001411c6a28020028020c1102000c010b2002200128021841c8dac000410c2001411c6a28020028020c1102003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41d4dac0001043106c0b200241106a24000baa0502087f017e230041106b220624001025027f230041106b22072400230041306b220124004198dbc00028020045044010052102200141286a10c801200221000240024002402001280228450d00200128022c10062102200141206a10c801200128022421032001280220210410f101200221002004450d0010072102200141186a10c801200128021c2001280218200310f10120022100450d0010082100200141106a10c801200128021421022001280210210310f1012002200020031b21024100210420030d010b41012104200010094101470d01200010f1010b41b0a1c000410b100a22034120100b2100200141086a10c801200128020c2000200128020822051b210020050440200010f101412021000b412010f101200310f10120040d00200210f1010b4198dbc0002903002108419cdbc00020003602004198dbc00041013602002008a72008422088a710fa010b200141306a2400419cdbc000220045044041e8bac00041c600200741086a4190a1c0004180bcc0001077000b2000280200101722001018220241201019412010f101200210f101200010f101200741106a240004404101210241e8c2c0000c010b41c0dfc0002802004504401011210041c0dfc000290300210841c4dfc000200036020041c0dfc00041013602002008a72008422088a710fa010b41c4dfc00028020041b8bec0004106101c220041c0dac00041001013410410f201220220003602004180c3c0000b210141d80010f20122004200370208200042818080801037020020002001360254200020023602502000410036024c200042043702442000420037023c200042043702342000420037022c20004204370224200041106a4200370200200041186a4200370200200041206a4100360200410810f2012202200036020420024100360200200641106a240020020f0bcd0101037f230041206b220424002000027f4100200220036a22032002490d001a200128020422024101742205200320032005491b22034104200341044b1b220341ffffffff017120034641037421052003410374210620042002047f200420024103743602142004200128020036021041080541000b360218200420062005200441106a105d20042802004504402004280204210220012003360204200120023602004181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000be00102027f017e20002802002201200128020041016b2200360200024020000d002001410c6a10f3012001412c6a280200411c6c2102200141246a280200210003402002044020001074200028021810f1012002411c6b21022000411c6a21000c010b0b0240200141286a2802002200450d002000ad421c7e2203422088a70d0020012802242003a710f8010b200141306a108101200141406b108101200141d0006a2200280200200141d4006a22022802002802001104002000280200200228020028020410f8012001200128020441016b220036020420000d002001102c0b0bb70101047f200028020022012000280204460440418080c4000f0b2000200141016a36020020012d00002203411874411875410048047f2000200141026a36020020012d0001413f7121022003411f712104200341df014d044020044106742002720f0b2000200141036a36020020012d0002413f712002410674722102200341f00149044020022004410c74720f0b2000200141046a3602002004411274418080f0007120012d0003413f71200241067472720520030b0bc30102057f017e230041106b2202240020024100360208200242083703002001280208210541082106034020050440200128020020046a2903002207200742ffffffff0f7c2007428180808070541b21072002280204200346047f2002200310c2012002280200210620022802080520030b41037420066a20073703002002200228020841016a2203360208200541016b2105200441086a21040c010b0b20002002290300370200200041086a200241086a280200360200200110c901200241106a24000bb40101027f230041206b220424002000027f4100200220036a22032002490d001a200128020422024101742205200320032005491b22034108200341084b1b210320042002047f200420023602142004200128020036021041010541000b360218200420034101200441106a105d20042802004504402004280204210220012003360204200120023602004181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000bb60101037f230041106b220424000240027f0240200204404101210620014100480d0320032802080d0120042001200210dc012004280204210520042802000c020b20002001360204410121060c020b2003280204450440200441086a2001200210dc01200428020c210520042802080c010b2001210520032802002001102a0b2203044020002003360204410021060c010b20002001360204200221050b20002006360200200041086a2005360200200441106a24000bcb0102017e047f230041106b2203240020004200370000200041106a22054200370000200041086a2206420037000020032001290300220242ffffffff0f7c20022002428080808070561b3703082000200341086a220410d20120032001290308220242ffffffff0f7c20022002428080808070561b3703082006200410d20120032001290310220242ffffffff0f7c20022002428080808070561b3703082005200410d20120002001290318220242ffffffff0f7c20022002428080808070561b370018200341106a24000bb60101077f20012802102102200128020421032001280200210520002001410c6a2802002207200128020822016b410376220610782000200610aa012000280200200028020822084103746a21040340200120074645044020042001290300370300200441086a2104200141086a21010c010b0b2000200620086a360208200304402002280208220020054704402002280200220120004103746a200120054103746a2003410374108a020b2002200020036a3602080b0bd80101037f230041206b2205240041b0dbc00041b0dbc000280200220741016a3602004180dfc0004180dfc00028020041016a2206360200024002402007410048200641024b720d00200520043a0018200520033602142005200236021041a4dbc00028020022024100480d0041a4dbc000200241016a220236020041a4dbc00041acdbc0002802002203047f41a8dbc00028020020052000200128021011000020052005290300370308200541086a200328021411000041a4dbc0002802000520020b41016b360200200641014b0d0020040d010b000b000b980501097f230041206b22032400200141146a280200210202400240027f0240024020012802040e020001030b20020d024100210141c0dac0000c010b20020d0120012802002202280204210120022802000b21022003200110950120032802042106200328020020022001108c0221022000200136020820002006360204200020023602000c010b200341186a200141106a290200370300200341106a200141086a2902003703002003200129020037030841002101230041206b22042400200341086a220541146a2802002106200528020021070240200541046a2802002209410374450d00200941016b41ffffffff0171220241016a22014107712108027f200241074904404100210120070c010b2007413c6a2102200141f8ffffff0371210a4100210103402002280200200241086b280200200241106b280200200241186b280200200241206b280200200241286b280200200241306b280200200241386b28020020016a6a6a6a6a6a6a6a2101200241406b2102200a41086b220a0d000b2002413c6b0b2008450d0041046a21020340200228020020016a2101200241086a2102200841016b22080d000b0b0240024002402006450440200121020c010b02402009450d0020072802040d0020014110490d020b200120016a22022001490d010b2002450d000240200241004e0440200210202201450d010c030b10b601000b000b41012101410021020b20004100360208200020023602042000200136020020042000360204200441186a200541106a290200370300200441106a200541086a290200370300200420052902003703080240200441046a418080c000200441086a102e450440200441206a24000c010b41f080c0004133200441086a419880c00041bc81c0001077000b0b200341206a24000bad0101037f230041206b2203240002402001200120026a22014b0d0041012102200041046a28020022044101742205200120012005491b22014108200141084b1b210102402004450440410021020c010b20032004360214200320002802003602100b2003200236021820032001200341106a106f20032802000440200341086a280200450d01000b20032802042102200041046a200136020020002002360200200341206a24000f0b10b601000ba20101037f230041206b2202240002402001200141016a22014b0d00200041046a28020022034101742204200120012004491b22014108200141084b1b210120022003047f200220033602142002200028020036021041010541000b36021820022001200241106a106f20022802000440200241086a280200450d01000b20022802042103200041046a200136020020002003360200200241206a24000f0b10b601000bc601000240027f410020004120490d001a4101200041ff00490d001a200041808004490d012000418080084f0440200041e0ffff007141e0cd0a47200041b9ee0a6b41064b71200041feffff0071419ef00a4771200041b09d0b6b4172497120004180f00b6b41e167497120004180800c6b419e7449712000418082386b41cba4544971200041f0833849710f0b200041e393c000412a41b794c00041c00141f795c00041b603103c0b0f0b200041c48ec000412841948fc00041a00241b491c00041af02103c0bb50101027f230041206b220324002003200028020022001012200341086a2204200328020020032802041096012004200241036a41027641016a10a801200320013602182003200120026a36021c0340200341186a105a2201418080c40046450440200341086a2001104d0c010b0b410a21024100210103402001410171450440200341086a2002104d418080c4002102410121010c010b0b2000200328020820032802101013200341086a10e501200341206a24000bac0101037f230041306b22022400200141046a2103200128020445044020012802002101200241106a22044100360200200242013703082002200241086a360214200241286a200141106a290200370300200241206a200141086a29020037030020022001290200370318200241146a41b4a7c000200241186a102e1a200341086a2004280200360200200320022903083702000b200041a0adc00036020420002003360200200241306a24000bad0101037f230041106b22022400200241086a200141086a22032802002204360200200220012902003703002000027f20044104460440200041086a20022802002201290300370300200041106a200141086a290300370300200041186a200141106a290300370300200041206a200141186a29030037030020024100360208200210c90141000c010b200020012902003702042000410c6a200328020036020041010b360200200241106a24000bb30101017f230041d0006b220424002004200236020c20042001360208200441044102200328020022011b360214200441c0bec00041bebec00020011b3602102004413c6a4102360200200441cc006a41233602002004420237022c200441d0bec000360228200441233602442004200441406b3602382004200441106a3602482004200441086a360240200441186a2201200441286a10612000200428021820042802201065200110e501200441d0006a24000baf0100230041d0006b220024002000200236020c20002001360208200041044102200328020022011b360214200041c0bec00041bebec00020011b3602102000413c6a4102360200200041cc006a41233602002000420237022c200041d0bec000360228200041233602442000200041406b3602382000200041106a3602482000200041086a360240200041186a2201200041286a106120002802182000280220101a200110e501200041d0006a24000ba60101057f200020012802042202200128020822034b047f41818080807821050240200241ffffffff01712002470d00200128020021060240024020034103742204044020062004102a22020d010c020b2006200241037410f80141082102200341ffffffff01712003460d00410021040c010b20012003360204200120023602000c010b410821050b2004200510da0120012802080520030b360204200020012802003602000b8b0101027f230041306b22032400200320023602282003200236022420032001360220200341086a200341206a2204106a200328020821012003200328020c22023602282003200236022420032001360220200341106a20041029200341286a200341186a2802003602002003200329031037032020032004106a20002003290300370300200341306a24000b930101027f20002d00082101200028020422020440200141ff017121012000027f410120010d001a20002802002101024020024101470d0020002d0009450d0020012d00004104710d004101200128021841cf86c00041012001411c6a28020028020c1102000d011a0b200128021841ec83c00041012001411c6a28020028020c1102000b22013a00080b200141ff01714100470b7e01037f23004180016b220324000340200220036a41ff006a413041d7002000410f712204410a491b20046a3a0000200241016b21022000410f4b200041047621000d000b20024180016a22004181014f04402000418001108502000b200141d286c0004102200220036a4180016a410020026b102f20034180016a24000b7d01037f23004180016b220324000340200220036a41ff006a413041372000410f712204410a491b20046a3a0000200241016b21022000410f4b200041047621000d000b20024180016a22004181014f04402000418001108502000b200141d286c0004102200220036a4180016a410020026b102f20034180016a24000b8101002000027f200141004804404100210141010c010b02400240027f024020022802080440200228020445044020010d02410121020c040b20022802002001102a0c020b20010d00410121020c020b200110200b2202450d010b2000200236020441000c010b200020013602044101210141010b360200200041086a20013602000ba7010002400240024002400240200041ff017141016b0e0401020304000b2001280218418c9ac00041052001411c6a28020028020c1102000f0b200128021841b89ac000410c2001411c6a28020028020c1102000f0b200128021841ad9ac000410b2001411c6a28020028020c1102000f0b200128021841a29ac000410b2001411c6a28020028020c1102000f0b200128021841919ac00041042001411c6a28020028020c1102000b880101017f230041106b220324002001280200450440200041186a200141206a290300370300200041106a200141186a290300370300200041086a200141106a2903003703002000200141086a290300370300200341106a24000f0b200341086a2001410c6a2802003602002003200129020437030041dca7c000412b200341f4a2c00020021077000b880101017f230041106b220324002001280200450440200041186a200141206a290300370300200041106a200141186a290300370300200041086a200141106a2903003703002000200141086a290300370300200341106a24000f0b200341086a2001410c6a2902003703002003200129020437030041dca7c000412b200341e4a2c00020021077000b7501017f230041406a22032400200341206a20012002109701200341386a2201200341286a28020036020020032003290320370330200341106a200341306a220210292001200341186a28020036020020032003290310370330200341086a200210a30120002003290308370300200341406b24000b880101017f200010e501200028020c200041106a2201280200280200110400200028020c200128020028020410f80120002802142200200028020041016b2201360200024020010d002000410c6a10e501200041186a10e501200041246a10e501200041306a10e5012000413c6a10e5012000200028020441016b220136020420010d002000102c0b0b6201047e2000200242ffffffff0f832203200142ffffffff0f8322047e22052003200142208822067e22032004200242208822027e7c22014220867c220437030020002004200554ad200220067e2001200354ad4220862001422088847c7c3703080b830101037f230041206b22022400200241086a200110040240200228020822040440200228020c21032002200436021020022003360218200220033602142002200241106a10a101200228020022030d010b41c0b7c0004115108802000b2000200228020422043602082000200436020420002003360200200110f101200241206a24000b7e01017f230041406a220524002005200136020c2005200036020820052003360214200520023602102005412c6a41023602002005413c6a41033602002005420237021c200541e4bec000360218200541043602342005200541306a3602282005200541106a3602382005200541086a360230200541186a200410b701000b7401027f230041106b220324000240024002402001450440410821020c010b200141ffffffff01712001470d01200141037422024100480d01200341086a2002410810ce0120032802082202450d020b200041003602082000200136020420002002360200200341106a24000f0b10b601000b000b6b01017f230041306b22062400200145044041d5b7c0004130108802000b200641106a20012003200420052002280210110900200641286a200641186a28020036020020062006290310370320200641086a200641206a108b0120002006290308370300200641306a24000b6901017f230041106b220224002002200120001075200241086a290300210020022903002101200241106a240042ffffffff0f420042818080807042002001200120004220887d2201541b20017c22012000422086200042ffffffff0f837d7c22002001541b20007c0b7201047f230041206b220224004101210302402000280200200110460d002001411c6a280200210420012802182002411c6a4100360200200241c0dac0003602182002420137020c200241f083c0003602082004200241086a102e0d0020002802042001104621030b200241206a240020030b5b01027f230041206b220224002001411c6a28020021032001280218200241186a2000280200220041106a290200370300200241106a200041086a290200370300200220002902003703082003200241086a102e200241206a24000b6b01037f20012802042204200128020822024b0440200128020021032002027f02402002044020032002102a22030d0141010c020b2003200410f801410121030b20012002360204200120033602004181808080780b10da010b20002002360204200020012802003602000b6d01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41013602002003420237020c200341c484c000360208200341013602242003200341206a360218200320033602282003200341046a360220200341086a200210b701000b5601027f230041206b220224002001411c6a28020021032001280218200241186a200041106a290200370300200241106a200041086a290200370300200220002902003703082003200241086a102e200241206a24000b800101017e20002001290300220242ffffffff0f7c20022002428080808070561b37030020002001290308220242ffffffff0f7c20022002428080808070561b37030820002001290310220242ffffffff0f7c20022002428080808070561b37031020002001290318220242ffffffff0f7c20022002428080808070561b3703180b5f02027f017e2000410c6a28020041186c210120002802042102034020010440200141186b210120021074200241186a21020c010b0b0240200041086a2802002201450d002001ad42187e2203422088a70d0020002802042003a710f8010b0b5901017f230041206b2202240020022000280200360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a418080c000200241086a102e200241206a24000b5901017f230041206b2202240020022000280200360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a419c88c000200241086a102e200241206a24000b6601017f230041206b22022400200241b0aac00036020420022000360200200241186a200141106a290200370300200241106a200141086a2902003703002002200129020037030820024198a8c000200241046a4198a8c000200241086a41b4afc0001040000b6301017f230041206b22032400200341c0abc00036020420032000360200200341186a200141106a290200370300200341106a200141086a29020037030020032001290200370308200341a8a8c000200341046a41a8a8c000200341086a20021040000b5901017f230041206b2202240020022000280200360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a41b4a7c000200241086a102e200241206a24000b5601017f230041206b2202240020022000360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a41b883c000200241086a102e200241206a24000b5601017f230041206b2202240020022000360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a419c88c000200241086a102e200241206a24000b5d01017f230041106b22052400024020030440024020022004470440200541086a200310ec01200528020822040d01410021040c030b20002003102a21040c020b200420002003108c021a0b2000200110f8010b200541106a240020040b5f02027f017e230041106b2202240020012802682203200141ec006a28020046047f4100052001200341086a36026820022001109401200229030821042003410020022802001b0b21012000200437030820002001360200200241106a24000b6301027f024020012802042202200128020822034d200241ffffffff037120024772450440200128020020024102744104200341027441041089012202450d0120012003360204200120023602000b20002003360204200020012802003602000f0b000b6601017f230041106b22022400200028020021002002200128021841a0dac000410b2001411c6a28020028020c1102003a000820022001360200200241003a0009200241003602042002200036020c20022002410c6a41acdac0001043106c200241106a24000b5a01027f2000027f02402001280208220241086a220320012802044d044020024178490d0120022003108702000b2000410136020441010c010b20012003360208200041086a200128020020026a29000037030041000b3602000b5c01027f200028020c200028020822016b417c712102034020020440200128020010f101200241046b2102200141046a21010c010b0b2000280204220145200141ffffffff0371200147724504402000280200200141027410f8010b0b4b01017f230041206b220224002000280200200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241086a108701200241206a24000b5701017f2002200128020822034b044020022003108702000b200120023602082000200136021020004100360204200020033602002000410c6a2001280200220120034103746a3602002000200120024103746a3602080b4c01017f230041106b22022400200241086a20014180096a10bd0120002002280208047e200041086a2001200228020c41e0006c6a41e000108c021a42010542000b370300200241106a24000b5701017f0240024002402001450440410821020c010b200141ffffffff01712001470d01200141037422024100480d01200210202202450d020b2000410036020820002001360204200020023602000f0b10b601000b000b5401027f230041106b22022400024002402000280204200028020822036b20014f0d00200241086a2000200320011058200228020c2200418180808078460d002000450d01000b200241106a24000f0b10b601000b5102017f027e230041106b22022400200241086a200141e0006a10bd012002280208047e2001200228020c4103746a290300210342010542000b21042000200337030820002004370300200241106a24000b5101027f230041106b2202240002402001450440410121030c010b200141004e0440200241086a200110ec01200228020822030d01000b10b601000b2000200136020420002003360200200241106a24000b5701017f230041206b22032400200320023602182003200236021420032001360210200341086a200341106a10a101200328020821012000200328020c22023602082000200236020420002001360200200341206a24000b5601017f230041206b22032400200320023602182003200236021420032001360210200341086a200341106a106a200328020821012000200328020c22023602082000200236020420002001360200200341206a24000b5701017f230041206b22032400200320023602182003200236021420032001360210200341086a200341106a108b01200328020821012000200328020c22023602082000200236020420002001360200200341206a24000b4f01027f20022000280200220341046a280200200341086a220428020022006b4b04402003200020021062200428020021000b200328020020006a20012002108c021a2004200020026a36020041000b5601027f230041106b220324002001280200220441ffffffff074f044041b4bdc0004118200341086a41f8bdc00020021077000b2001200441016a360200200020013602042000200141046a360200200341106a24000b4f002000410410920120004104360208200028020022002001290300370300200041086a200141086a290300370300200041106a200141106a290300370300200041186a200141186a2903003703000b4e0020004104107820004104360208200028020022002001290300370300200041086a200141086a290300370300200041106a200141106a290300370300200041186a200141186a2903003703000b7b02017f017e230041106b22022400200241086a4120109501200229030821032000410036020820002003370200200241106a240020004120360208200028020022002001290000370000200041086a200141086a290000370000200041106a200141106a290000370000200041186a200141186a2900003700000b4e01017f024020002802102201450d00200141003a0000200041146a280200450d002000280210102c0b02402000417f460d0020002000280204220141016b36020420014101470d002000102c0b0b5301017f230041106b220524002004044020002001200210f601200041f6c1c00041ffc1c00010c001200520032004103220002005280200200528020810f601200510e5012000410a104d0b200541106a24000b4b000240027f2001418080c4004704404101200028021820012000411c6a2802002802101101000d011a0b20020d0141000b0f0b2000280218200220032000411c6a28020028020c1102000b4f01027f024020012802042202200128020822034b0440200128020020024101200341011089012202450d0120012003360204200120023602000b20002003360204200020012802003602000f0b000b4801017f230041106b22042400200120022003100c2101200441086a10c801200428020c210220002004280208220341004736020020002002200120031b360204200441106a24000b4401017f230041206b22022400200241186a200141086a28020036020020022001290200370310200241086a200241106a106a20002002290308370300200241206a24000b4501017f230041206b22022400200241186a200141086a28020036020020022001290200370310200241086a200241106a10a10120002002290308370300200241206a24000b4a01017f230041106b220324002001280200044041a4bdc0004110200341086a41c4b2c00020021077000b2001417f360200200020013602042000200141046a360200200341106a24000b4a01017f230041106b220324002001280200044041a4bdc0004110200341086a4188bec00020021077000b2001417f360200200020013602042000200141046a360200200341106a24000b4802017f017e230041106b2202240020002d0000450440200041086a290300200241106a24000f0b200220002d00013a000f41e0a4c000410a2002410f6a41d4a2c00020011077000b4101027f230041106b2202240020012000280204200028020822036b4b0440200241086a200020032001105c2002280208200228020c10da010b200241106a24000b4801017f230041206b22032400200341146a4100360200200341c0dac000360210200342013702042003200136021c200320003602182003200341186a3602002003200210b701000b4101027f230041106b2202240020012000280204200028020822036b4b0440200241086a20002003200110582002280208200228020c10da010b200241106a24000b4301037f2001280200210320002001280208220210aa012000280200200028020822044103746a20032002410374108c021a200141003602082000200220046a3602080b3c01027f41f4dec00041e4dec0002802002201047f0340200041016a2100200128020822010d000b200041ff1f200041ff1f4b1b0541ff1f0b3602000b420020022003490440419eb2c000412341e8b4c00010a901000b20002003360204200020013602002000410c6a200220036b3602002000200120034102746a3602080b3f01017f230041106b22022400200241086a20011004024020022802082201044020002001200228020c1096010c010b200041003602000b200241106a24000b4301027f230041106b22012400200010f4012001200010cd0120012802044100360200200028020421022000102c2001200236020c2001410c6a1059200141106a24000b3f01017f200028020021002001280200220241107145044020024120714504402000350200200110410f0b20002802002001106e0f0b20002802002001106d0b3d01017f20002802002100200128020022024110714504402002412071450440200020011084020f0b20002802002001106e0f0b20002802002001106d0b3c01017f2000280208220220002802044604402000200210c201200028020821020b2000200241016a360208200028020020024103746a20013703000b3e01017f20002802002200200028020041016b2201360200024020010d002000410c6a10b4012000200028020441016b220136020420010d002000102c0b0b4101017f200028020022010440200120002802042802001104002000280200200028020428020410f801200041086a2802002000410c6a28020028020c1104000b0b4401027f20012802002102200141003602002002450440000b20012802042103410810f2012201200336020420012002360200200041a8bec000360204200020013602000b4001017f230041206b220024002000411c6a4100360200200041c0dac0003602182000420137020c200041d880c000360208200041086a41e080c00010b701000bfb0101037f230041206b22022400200241013a00182002200136021420022000360210200241f084c00036020c200241c0dac000360208200241086a220028020c21012000280208220245044041ccbdc000412b4190adc00010a901000b20022103230041106b22022400200341146a28020021040240027f02400240200341046a2802000e020001030b20040d024100210341c0dac0000c010b20040d0120032802002204280204210320042802000b21042002200336020420022004360200200241d4adc0002000280208200120002d00101060000b2002410036020420022003360200200241c0adc0002000280208200120002d00101060000b3600230041106b22012400200141086a200228020010172202101b20002001280208200128020c109601200210f101200141106a24000b3c01027f2001280204210220012802002103410810202201450440000b2001200236020420012003360200200041b0adc000360204200020013602000b3a01017f410121002001280218220241e4abc000410b2001411c6a28020028020c2201110200047f200005200241c386c000410720011102000b0b2f01017f230041106b22022400200004402002200136020c20022000360208200241086a10e1010b200241106a24000b3401027f200141086b22022002280200220241016a2203360200200220034b0440000b200041a0b7c000360204200020013602000b3001027f2001280200220320012802044904402001200341016a360200410121020b20002003360204200020023602000b2d01017f230041106b220224002002200028020036020c2002410c6a2200200110452000104a200241106a24000b2c01017f230041106b220124002001200041086b36020c2001410c6a2200104e200010b301200141106a24000b2f01017f2000200220016b220210a8012000280208220320002802006a20012002108c021a2000200220036a3602080b2e01017f230041106b22022400200241086a200020014101105c2002280208200228020c10da01200241106a24000b2e01017f230041106b22022400200241086a20002001410110582002280208200228020c10da01200241106a24000b3a01017f20002802002101024020002d00040d0041b0dbc00028020041ffffffff0771450d00108e020d00200141013a00010b200141003a00000bbe0901057f230041106b220424002004200336020c200420023602082004200136020420042000360200200428020021052004280204210120042802082100200428020c2102230041f0006b220324002003200236020c20032000360208027f20014181024f04402003027f41800220052c00800241bf7f4a0d001a41ff0120052c00ff0141bf7f4a0d001a41fe0120052c00fe0141bf7f4a0d001a41fd010b360214200320053602104105210641eb8bc0000c010b200320013602142003200536021041c0dac0000b21042003200636021c20032004360218024002400240200020014b2206200120024972450440200020024d0440024002402000450d00200020014f044020002001460d010c020b200020056a2c00004140480d010b200221000b20032000360220200020012202490440200041016a22064100200041036b220220002002491b2202490d03024020022006460d00200520066a200220056a22076b2106200020056a22082c000041bf7f4a0440200641016b21040c010b20002002460d00200841016b22002c000041bf7f4a0440200641026b21040c010b20002007460d00200841026b22002c000041bf7f4a0440200641036b21040c010b20002007460d00200841036b22002c000041bf7f4a0440200641046b21040c010b20002007460d00200641056b21040b200220046a21020b02402002450d00200120024d044020012002460d010c060b200220056a2c000041bf7f4c0d050b20012002460d03027f02400240200220056a22012c00002200410048044020012d0001413f7121042000411f7121052000415f4b0d01200541067420047221000c020b2003200041ff017136022441010c020b20012d0002413f7120044106747221042000417049044020042005410c747221000c010b2005411274418080f0007120012d0003413f71200441067472722200418080c400460d050b2003200036022441012000418001490d001a41022000418010490d001a41034104200041808004491b0b2100200320023602282003200020026a36022c200341c4006a4105360200200341ec006a4104360200200341e4006a4104360200200341dc006a4108360200200341d4006a410936020020034205370234200341d48dc0003602302003410136024c2003200341c8006a3602402003200341186a3602682003200341106a3602602003200341286a3602582003200341246a3602502003200341206a360248200341306a41fc8dc00010b701000b200341e4006a4104360200200341dc006a4104360200200341d4006a4101360200200341c4006a410436020020034204370234200341e08cc0003602302003410136024c2003200341c8006a3602402003200341186a3602602003200341106a36025820032003410c6a3602502003200341086a360248200341306a41808dc00010b701000b20032000200220061b360228200341c4006a4103360200200341dc006a4104360200200341d4006a410436020020034203370234200341948cc0003602302003410136024c2003200341c8006a3602402003200341186a3602582003200341106a3602502003200341286a360248200341306a41ac8cc00010b701000b20022006108702000b41ccbdc000412b41908dc00010a901000b200520012002200110c401000b260020014102742101034020010440200141046b2101200010b301200041046a21000c010b0b0b3900024002400240024020002d00200e0401030300030b200041146a10e2010c010b200010e2010b200028020c10f101200028021010f1010b0b2901017f230041106b220324002003200028020036020c2003410c6a200120021051200341106a24000b3a01027f4184dfc0002d000021014184dfc00041003a00004188dfc00028020021024188dfc000410036020020002002360204200020013602000b2a01017f2000280204220145200141ffffffff0171200147724504402000280200200141037410f8010b0b220002402000417c4b0d00200045044041040f0b200010202200450d0020000f0b000b2501017f230041106b220124002001200041086b36020c2001410c6a104e200141106a24000b2601017f230041106b220124002001200041086b36020c2001410c6a10b301200141106a24000b280020012802004504402001417f360200200020013602042000200141046a3602000f0b108902000b250002402001450440410021010c010b2001102021020b20002001360204200020023602000b2001017f2001047f200110200541010b210220002001360204200020023602000b2100200120034d044020002001360204200020023602000f0b20012003108602000b2500200045044041d5b7c0004130108802000b200020022003200420052001280210110a000b0c00200020012900003700000b2300200045044041d5b7c0004130108802000b200020022003200420012802101106000b2300200045044041d5b7c0004130108802000b20002002200320042001280210110b000b2300200045044041d5b7c0004130108802000b200020022003200420012802101118000b2300200045044041d5b7c0004130108802000b20002002200320042001280210111a000b1901017f2001200346047f200020022001108b02450520040b0b250020002802002d0000450440200141b888c000410510230f0b200141b488c000410410230b2001017f024020002802042201450d00200041086a280200450d002001102c0b0b1c00024020014181808080784704402001450d01000b0f0b10b601000b2100200045044041d5b7c0004130108802000b20002002200320012802101103000b1b00200104402001102021020b20002001360204200020023602000b1a0002402001417c4d044020002002102a22000d010b000b20000b1f00200045044041d5b7c0004130108802000b2000200220012802101101000b1800200028020041016b41024f0440200041046a10ee010b0b1f00200045044041d5b7c0004130108802000b2000200220012802101100000b2200200028020020002802042802001104002000280200200028020428020410f8010b220002400240024020002d00080e0401020200020b200041046a21000b200010590b0b1d002001280200450440000b200041a8bec000360204200020013602000b1d00200045044041d5b7c0004130108802000b200020012802101104000b1801017f2000280204220104402000280200200110f8010b0b1c00200128021841f883c000410b2001411c6a28020028020c1102000b1c002001280218418384c000410e2001411c6a28020028020c1102000b1c00200128021841c49ac00041052001411c6a28020028020c1102000b1c00200128021841b8a8c000410b2001411c6a28020028020c1102000b1400200041046a28020004402000280200102c0b0b1000200010ef012200044020000f0b000b1801017f20011020210220002001360204200020023602000b1500200120002802002200280200200028020410230b1100200028020404402000280200102c0b0b0e002000047f200010200541040b0b140020002802002001200028020428020c1101000b0e00200041244f0440200010030b0b0f00200010202200450440000b20000b0f0020002802000440200010e5010b0b1300200004400f0b41b4b1c000411b108802000b100020002802002001200210f60141000b0e0020002001200120026a10c0010b0e0020002802002001104c1a41000b0b00200104402000102c0b0b100020012000280200200028020410230b0c0020000440200110f1010b0b1300200041b0adc000360204200020013602000b16004188dfc00020003602004184dfc00041013a00000b100020012000280200200028020810230b1000200020002903002001107a3703000b0d0020002001200210f60141000b0e0020002802001a03400c000b000b0d00200028020020012002102b0b0d00200020012002200310d7010b0b00200023006a240023000b0b002000350200200110410b7001017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420237020c200241f488c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a41a489c00010b701000b7001017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420237020c200241c489c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a41d489c00010b701000b7001017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420237020c200241888ac000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a41988ac00010b701000b090020002001100d000b0e0041cfb1c00041cf00108802000b9a0501077f0240027f024020022203200020016b4b0440200120036a2105200020036a210220002003410f4d0d021a2002417c7121004100200241037122066b210720060440200120036a41016b21040340200241016b220220042d00003a0000200441016b210420002002490d000b0b2000200320066b2206417c7122036b2102410020036b2103200520076a22054103710440200341004e0d022005410374220441187121072005417c71220841046b2101410020046b4118712109200828020021040340200041046b220020042009742001280200220420077672360200200141046b2101200020024b0d000b0c020b200341004e0d01200120066a41046b21010340200041046b22002001280200360200200141046b2101200020024b0d000b0c010b02402003410f4d0440200021020c010b2000410020006b41037122056a21042005044020002102200121000340200220002d00003a0000200041016a2100200241016a22022004490d000b0b2004200320056b2203417c7122066a21020240200120056a22054103710440200641004c0d012005410374220041187121072005417c71220841046a2101410020006b4118712109200828020021000340200420002007762001280200220020097472360200200141046a2101200441046a22042002490d000b0c010b200641004c0d0020052101034020042001280200360200200141046a2101200441046a22042002490d000b0b20034103712103200520066a21010b2003450d02200220036a21000340200220012d00003a0000200141016a2101200241016a22022000490d000b0c020b20064103712200450d01200320056a2105200220006b0b2100200541016b21010340200241016b220220012d00003a0000200141016b210120002002490d000b0b0b4301037f02402002450d00034020002d0000220420012d00002205460440200041016a2100200141016a2101200241016b22020d010c020b0b200420056b21030b20030bb80201077f024020022204410f4d0440200021020c010b2000410020006b41037122036a21052003044020002102200121060340200220062d00003a0000200641016a2106200241016a22022005490d000b0b2005200420036b2208417c7122076a21020240200120036a22034103710440200741004c0d012003410374220441187121092003417c71220641046a2101410020046b4118712104200628020021060340200520062009762001280200220620047472360200200141046a2101200541046a22052002490d000b0c010b200741004c0d0020032101034020052001280200360200200141046a2101200541046a22052002490d000b0b20084103712104200320076a21010b20040440200220046a21030340200220012d00003a0000200141016a2101200241016a22022003490d000b0b20000b8e0101027f2001410f4b04402000410020006b41037122036a2102200304400340200041003a0000200041016a22002002490d000b0b2002200120036b2201417c7122036a2100200341004a0440034020024100360200200241046a22022000490d000b0b200141037121010b20010440200020016a21010340200041003a0000200041016a22002001490d000b0b0b0b004180dfc000280200450b080020012002101a0b0a00200028020010f1010b080020002000107a0b0700200010e5010b0700200010c9010b040010250b06002000104a0bed0401047f0240230041e0006b2200240020004100360228200042013703200240200041206a418085c000410c10ff010d0002402001280208220204402000200236022c2000410536023420002000412c6a360230200041dc006a41013602002000420237024c2000419085c0003602482000200041306a360258200041206a418c82c000200041c8006a102e450d010c020b20012802002202200128020428020c110c00428be4e795f2b88fd7b87f520d002000200236022c2000410636023420002000412c6a360230200041dc006a41013602002000420237024c2000419085c0003602482000200041306a360258200041206a418c82c000200041c8006a102e0d010b200128020c2101200041c4006a41013602002000413c6a410136020020002001410c6a3602402000200141086a3602382000410436023420002001360230200041dc006a41033602002000420337024c200041d884c0003602482000200041306a360258200041206a418c82c000200041c8006a102e0d00200041206a220141e083c00041ea83c00010c001200041186a100022021001200028021821032000200028021c22043602502000200436024c20002003360248200041106a200041c8006a2204107d2000200028021422033602382000200336023420002000280210220536023020012005200310f601200141ea83c00041ec83c00010c001200041d0006a200041286a28020036020020002000290320370348200041086a2004107d2000280208200028020c1002200041306a10e501200241244f0440200210030b200041e0006a24000c010b41a482c0004137200041c8006a41d083c00041a883c0001077000b0b0d0042d0e5f8878be3aaf5ef000b0c0042d0cff8e186dcd8c56d0b0d00428be4e795f2b88fd7b87f0b0300010b0b9d5b0300418080c0000ba539250000000400000004000000260000002700000028000000250000000000000001000000290000006c6962726172792f616c6c6f632f7372632f7261775f7665632e72736361706163697479206f766572666c6f770000004400100011000000280010001c00000005020000050000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f726c6962726172792f616c6c6f632f7372632f666d742e727300a3001000180000006402000020000000292073686f756c64206265203c206c656e202869732072656d6f76616c20696e6465782028697320e200100012000000cc00100016000000ec011000010000002a0000000c000000040000002b0000002c0000002d0000006120446973706c617920696d706c656d656e746174696f6e2072657475726e656420616e206572726f7220756e65787065637465646c792f72757374632f346239316136656137323538613934376535396336353232636435383938653763306136613838662f6c6962726172792f616c6c6f632f7372632f737472696e672e727300005b0110004b000000ba0900000e0000002e00000004000000040000002f0000003000000031000000320000000000000001000000290000000a0a537461636b3a0a0a0a0a292e2e00ed01100002000000426f72726f774572726f72426f72726f774d75744572726f72696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e6465782069732000110210002000000031021000120000003a000000402d100000000000540210000100000054021000010000003300000000000000010000003400000070616e69636b65642061742027272c208c021000010000008d021000030000003d3d617373657274696f6e206661696c65643a2060286c6566742020726967687429600a20206c6566743a2060602c0a2072696768743a2060603a20a202100019000000bb02100012000000cd0210000c000000d90210000300000060000000a202100019000000bb02100012000000cd0210000c000000fc02100001000000330000000c00000004000000350000003600000037000000207b0a2c0a2c20207b207d207b202e2e207d207d280a282c5b5d3078303030313032303330343035303630373038303931303131313231333134313531363137313831393230323132323233323432353236323732383239333033313332333333343335333633373338333934303431343234333434343534363437343834393530353135323533353435353536353735383539363036313632363336343635363636373638363937303731373237333734373537363737373837393830383138323833383438353836383738383839393039313932393339343935393639373938393933000000040000000400000038000000390000003a0000007472756566616c736572616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e677468200000003d041000120000004f041000220000006c6962726172792f636f72652f7372632f736c6963652f696e6465782e727300840410001f000000340000000500000072616e676520656e6420696e64657820b4041000100000004f04100022000000840410001f0000004900000005000000736c69636520696e64657820737461727473206174202062757420656e64732061742000e404100016000000fa0410000d000000840410001f0000005c00000005000000736f7572636520736c696365206c656e67746820282920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e677468202828051000150000003d0510002b000000ec011000010000006c6962726172792f636f72652f7372632f7374722f7061747465726e2e727300800510001f0000001a06000015000000800510001f0000004806000015000000800510001f00000049060000150000006c6962726172792f636f72652f7372632f7374722f6d6f642e72735b2e2e2e5d6279746520696e64657820206973206f7574206f6620626f756e6473206f662060000000f00510000b000000fb05100016000000fc02100001000000d00510001b0000006b00000009000000626567696e203c3d20656e642028203c3d2029207768656e20736c6963696e67206000003c0610000e0000004a061000040000004e06100010000000fc02100001000000d00510001b0000006f00000005000000d00510001b0000007d0000002d000000206973206e6f742061206368617220626f756e646172793b20697420697320696e7369646520202862797465732029206f662060f00510000b000000a006100026000000c606100008000000ce06100006000000fc02100001000000d00510001b0000007f000000050000006c6962726172792f636f72652f7372632f756e69636f64652f7072696e7461626c652e72730000000c071000250000001a0000003600000000010305050606020706080709110a1c0b190c1a0d100e0d0f0410031212130916011704180119031a071b011c021f1620032b032d0b2e01300331023201a702a902aa04ab08fa02fb05fd02fe03ff09ad78798b8da23057588b8c901cdd0e0f4b4cfbfc2e2f3f5c5d5fe2848d8e9192a9b1babbc5c6c9cadee4e5ff00041112293134373a3b3d494a5d848e92a9b1b4babbc6cacecfe4e500040d0e11122931343a3b4546494a5e646584919b9dc9cecf0d11293a3b4549575b5c5e5f64658d91a9b4babbc5c9dfe4e5f00d11454964658084b2bcbebfd5d7f0f183858ba4a6bebfc5c7cecfdadb4898bdcdc6cecf494e4f57595e5f898e8fb1b6b7bfc1c6c7d71116175b5cf6f7feff806d71dedf0e1f6e6f1c1d5f7d7eaeaf7fbbbc16171e1f46474e4f585a5c5e7e7fb5c5d4d5dcf0f1f572738f747596262e2fa7afb7bfc7cfd7df9a409798308f1fd2d4ceff4e4f5a5b07080f10272feeef6e6f373d3f42459091536775c8c9d0d1d8d9e7feff00205f2282df048244081b04061181ac0e80ab051f09811b03190801042f043404070301070607110a500f1207550703041c0a090308030703020303030c0405030b06010e15054e071b0757070206160d500443032d03010411060f0c3a041d255f206d046a2580c80582b0031a0682fd03590716091809140c140c6a060a061a0659072b05460a2c040c040103310b2c041a060b0380ac060a062f314d0380a4083c030f033c0738082b0582ff1118082f112d03210f210f808c048297190b158894052f053b07020e180980be22740c80d61a0c0580ff0580df0cf29d033709815c1480b80880cb050a183b030a06380846080c06740b1e035a0459098083181c0a16094c04808a06aba40c170431a10481da26070c050580a61081f50701202a064c04808d0480be031b030f0d000601010301040205070702080809020a050b020e041001110212051311140115021702190d1c051d0824016a046b02af03bc02cf02d102d40cd509d602d702da01e005e102e704e802ee20f004f802fa02fb010c273b3e4e4f8f9e9e9f7b8b9396a2b2ba86b1060709363d3e56f3d0d1041418363756577faaaeafbd35e01287898e9e040d0e11122931343a4546494a4e4f64655cb6b71b1c07080a0b141736393aa8a9d8d909379091a8070a3b3e66698f926f5fbfeeef5a62f4fcff9a9b2e2f2728559da0a1a3a4a7a8adbabcc4060b0c151d3a3f4551a6a7cccda007191a22253e3fe7ecefffc5c604202325262833383a484a4c50535556585a5c5e606365666b73787d7f8aa4aaafb0c0d0aeaf6e6f935e227b0503042d036603012f2e80821d03310f1c0424091e052b0544040e2a80aa06240424042808340b4e43813709160a08183b45390363080930160521031b05014038044b052f040a070907402027040c0936033a051a07040c07504937330d33072e080a8126524e28082a161a261c1417094e042409440d19070a0648082709750b3f412a063b050a0651060105100305808b621e48080a80a65e22450b0a060d133a060a362c041780b93c64530c48090a46451b4808530d498107460a1d03474937030e080a0639070a81361980b7010f320d839b66750b80c48a4c630d842f8fd18247a1b98239072a045c06260a460a28051382b05b654b0439071140050b020e97f80884d62a09a2e781332d03110408818c89046b050d0309071092604709743c80f60a7308701546809a140c570919808781470385420f1584501f80e12b80d52d031a040281401f113a050184e080f7294c040a04028311444c3d80c23c06010455051b3402810e2c04640c560a80ae381d0d2c040907020e06809a83d80510030d03740c59070c04010f0c0438080a062808224e81540c1503050307091d030b05060a0a060808070980cb250a84066c6962726172792f636f72652f7372632f756e69636f64652f756e69636f64655f646174612e7273000000ad0c1000280000004b00000028000000ad0c1000280000005700000016000000ad0c100028000000520000003e0000006b696e64456d7074795a65726f5061727365496e744572726f724e65674f766572666c6f77506f734f766572666c6f77496e76616c696444696769744572726f720000000003000083042000910560005d13a0001217201f0c20601fef2ca02b2a30202c6fa6e02c02a8602d1efb602e00fe20369eff6036fd01e136010a2137240de137ab0e61392f18a139301ce147f31e214cf06ae14f4f6f21509dbca15000cf615165d1a15100da215200e0e15330e16155aee2a156d0e8e15620006e57f001ff5700700007002d0101010201020101480b30151001650702060202010423011e1b5b0b3a09090118040109010301052b033c082a180120370101010408040103070a021d013a0101010204080109010a021a010202390104020402020303011e0203010b0239010405010204011402160601013a0101020104080107030a021e013b0101010c01090128010301370101030503010407020b021d013a01020102010301050207020b021c02390201010204080109010a021d0148010401020301010801510102070c08620102090b064a021b0101010101370e01050102050b0124090166040106010202021902040310040d01020206010f01000300031d021e021e02400201070801020b09012d030101750222017603040209010603db0202013a010107010101010208060a0201301f310430070101050128090c0220040202010338010102030101033a0802029803010d0107040106010302c6400001c32100038d016020000669020004010a200250020001030104011902050197021a120d012608190b2e0330010204020227014306020202020c0108012f01330101030202050201012a020801ee010201040100010010101000020001e201950500030102050428030401a50200040002990b31047b01360f290102020a033104020207013d03240501083e010c0234090a0402015f03020101020601a0010308150239020101010116010e070305c308020301011701510102060101020101020102eb010204060201021b025508020101026a0101010206010165030204010500090102f5010a0201010401900402020401200a280602040801090602032e0d010200070106010152160207010201027a060301010201070101480203010101000200053b0700013f0451010002002e0217000101030405080802071e0494030037043208010e011605010f00070111020701020105000700013d0400076d07006080f000003b00000000000000010000003c0000003d00000004000000040000003e00000072657475726e20746869732f55736572732f7a68616e677a68696368616f2f2e636172676f2f6769742f636865636b6f7574732f7265736375652d686173682d303665323862613633396539363538342f303232636162622f7372632f7574696c732f77696e74657266656c6c2d63727970746f2f7372632f686173682f7265736375652f727036345f3235362f6d6f642e7273bb10100089000000e30000000d0000003f00000001000000010000004000000041000000100000000400000042000000430000000c00000004000000440000002f55736572732f7a68616e677a68696368616f2f2e636172676f2f6769742f636865636b6f7574732f7265736375652d686173682d303665323862613633396539363538342f303232636162622f7372632f6c69622e72736578706563746564206c656e206f662076616c7565735f696e5f75363420746f206265205b65786163746c7920385d206f72205b6f7665722038206275742073686f756c6420626520736f6d65206d756c7469706c65206f6620345d20627574207265636569766564200000dc1110006a00000084111000580000003d000000050000007061727365206661696c000084111000580000002b0000003500000084111000580000006f000000050000006578706563746564206c656e206f662076616c7565735f696e5f75363420746f2062652065786163746c7920342062757420726563656976656420008c1210003b0000008411100058000000ad000000050000008411100058000000b7000000330000006578706563746564206c656e206f662076616c7565735f696e5f753820746f2062652065786163746c79203332206275742072656365697665642000f01210003b0000008411100058000000c2000000050000008411100058000000c9000000400000008411100058000000da000000050000008411100058000000e4000000330000008411100058000000d7000000350000008411100058000000f7000000050000008411100058000000fe000000400000008411100058000000f4000000340000004500000004000000040000004600000047000000480000004500000000000000010000004900000063616c6c65642060526573756c743a3a756e77726170282960206f6e20616e2060457272602076616c7565004a00000008000000040000004b0000004500000004000000040000004c0000004500000004000000040000004d0000004163636573734572726f72757365206f66207374643a3a7468726561643a3a63757272656e742829206973206e6f7420706f737369626c6520616674657220746865207468726561642773206c6f63616c206461746120686173206265656e2064657374726f7965646c6962726172792f7374642f7372632f7468726561642f6d6f642e72730000a11410001d000000a9020000230000006661696c656420746f2067656e657261746520756e69717565207468726561642049443a2062697473706163652065786861757374656400d014100037000000a11410001d0000001704000011000000a11410001d0000001d0400002a000000006c6962726172792f7374642f7372632f73796e632f6f6e63652e7273617373657274696f6e206661696c65643a2073746174655f616e645f71756575652e61646472282920262053544154455f4d41534b203d3d2052554e4e494e474f6e636520696e7374616e6365206861732070726576696f75736c79206265656e20706f69736f6e6564008d1510002a00000002000000311510001c000000ff01000009000000311510001c0000000c02000035000000506f69736f6e4572726f726c6962726172792f7374642f7372632f7379735f636f6d6d6f6e2f7468726561645f696e666f2e7273ef15100029000000160000003300000063616e6e6f74206d6f64696679207468652070616e696320686f6f6b2066726f6d20612070616e69636b696e672074687265616428161000340000006c6962726172792f7374642f7372632f70616e69636b696e672e7273641610001c0000007d00000009000000641610001c000000470200001e0000004e0000000c000000040000004f0000004500000008000000040000005000000051000000100000000400000052000000530000004500000008000000040000005400000055000000636f6e647661722077616974206e6f7420737570706f727465640000e81610001a0000006c6962726172792f7374642f7372632f7379732f7761736d2f2e2e2f756e737570706f727465642f6c6f636b732f636f6e647661722e72730c17100038000000150000000900000063616e6e6f74207265637572736976656c792061637175697265206d7574657854171000200000006c6962726172792f7374642f7372632f7379732f7761736d2f2e2e2f756e737570706f727465642f6c6f636b732f6d757465782e727300007c1710003600000018000000090000006c6962726172792f7374642f7372632f7379735f636f6d6d6f6e2f7468726561645f7061726b65722f67656e657269632e727300c4171000330000002700000026000000696e636f6e73697374656e74207061726b207374617465000818100017000000c41710003300000035000000170000007061726b207374617465206368616e67656420756e65787065637465646c7900381810001f000000c4171000330000003200000011000000696e636f6e73697374656e7420737461746520696e20756e7061726b701810001c000000c4171000330000006c00000012000000c4171000330000007a0000001f0000006e756c6c20706f696e7465722070617373656420746f207275737472656375727369766520757365206f6620616e206f626a65637420646574656374656420776869636820776f756c64206c65616420746f20756e7361666520616c696173696e6720696e2072757374617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e2829000000560000000000000001000000490000005700000000000000010000003c0000002f72757374632f346239316136656137323538613934376535396336353232636435383938653763306136613838662f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f7665635f64657175652f6d6f642e7273617373657274696f6e206661696c65643a2073656c662e6361702829203d3d206f6c645f636170202a2032000000641910005e000000dd080000090000002f72757374632f346239316136656137323538613934376535396336353232636435383938653763306136613838662f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f7665635f64657175652f72696e675f736c696365732e72730000001a10006600000023000000110000002f55736572732f7a68616e677a68696368616f2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7761736d2d62696e6467656e2d667574757265732d302e342e32392f7372632f71756575652e7273781a10006c0000001c00000029000000781a10006c000000310000001a000000580000000400000004000000590000005a0000002f55736572732f7a68616e677a68696368616f2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7761736d2d62696e6467656e2d667574757265732d302e342e32392f7372632f7461736b2f73696e676c657468726561642e7273181b10007800000021000000150000005b0000005c0000005d0000005e000000181b100078000000550000002500000060756e777261705f7468726f7760206661696c6564636c6f7375726520696e766f6b6564207265637572736976656c79206f722064657374726f79656420616c72656164790000005f00000024000000040000006000000061000000040000000400000062000000630000002f55736572732f7a68616e677a68696368616f2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7761736d2d62696e6467656e2d667574757265732d302e342e32392f7372632f6c69622e727300002c1c10006a000000da000000200041b0b9c0000bdc21606173796e6320666e6020726573756d656420616674657220636f6d706c6574696f6e2f55736572732f7a68616e677a68696368616f2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f636f6e736f6c655f6572726f725f70616e69635f686f6f6b2d302e312e372f7372632f6c69622e7273d31c10006d000000950000000e00000064000000000000000100000065000000660000006700000063616e6e6f7420616363657373206120546872656164204c6f63616c2053746f726167652076616c756520647572696e67206f72206166746572206465737472756374696f6e2f72757374632f346239316136656137323538613934376535396336353232636435383938653763306136613838662f6c6962726172792f7374642f7372632f7468726561642f6c6f63616c2e7273000000ae1d10004f000000a50100001a000000680000000800000004000000690000006a0000002f72757374632f346239316136656137323538613934376535396336353232636435383938653763306136613838662f6c6962726172792f636f72652f7372632f7374722f7061747465726e2e727300241e10004f0000008c05000021000000241e10004f0000009805000014000000241e10004f0000009805000021000000616c726561647920626f72726f776564616c7265616479206d757461626c7920626f72726f77656463616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c7565006b00000000000000010000006c0000006d0000000000000001000000490000006e00000000000000010000003c0000006f0000000800000004000000700000006f75747075746f6b4641494c7465737420202e2e2e200000441f100005000000491f1000050000003a200000402d100000000000601f1000020000000a000000402d100000000000741f1000010000002f55736572732f7a68616e677a68696368616f2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7761736d2d62696e6467656e2d746573742d302e332e32392f7372632f72742f6d6f642e72732000881f10006a000000980100002a000000881f10006a000000990100002e000000881f10006a0000009e01000020000000881f10006a000000a20100002000000000000000881f10006a000000c101000009000000881f10006a000000c40100002a000000881f10006a000000d201000025000000881f10006a000000d7010000260000000a6661696c757265733a0a6661696c757265733a0a202020200000008d201000040000007465737420726573756c743a202e20207061737365643b20206661696c65643b202069676e6f7265640a00009c2010000d000000a920100002000000ab20100009000000b420100009000000bd201000090000004641494c4544206f75747075743a0a00881f10006a000000fb0100002200000064656275676c6f67696e666f7761726e6572726f724a5320657863657074696f6e207468617420776173207468726f776e3a0a2d2d2d2d20206f7574707574202d2d2d2d0a0000004321100005000000482110000d000000710000000000000001000000720000007300000074000000750000000400000004000000760000007700000078000000881f10006a000000f10000002c000000881f10006a000000f3000000270000002d666c616720206e6f7420737570706f72746564b921100005000000be2110000e000000881f10006a000000f5000000110000006d6f7265207468616e206f6e652066696c74657220617267756d656e742063616e6e6f74206265207061737365640000881f10006a000000f70000001100000074657374737465737472756e6e696e67200000003522100008000000f21f100001000000657863657074696f6e207468726f776e207768696c65206372656174696e67206120746573743a205022100028000000881f10006a0000001601000015000000881f10006a00000022010000210000002f55736572732f7a68616e677a68696368616f2f2e636172676f2f6769742f636865636b6f7574732f7265736375652d686173682d303665323862613633396539363538342f303232636162622f7372632f7574696c732f77696e74657266656c6c2d63727970746f2f7372632f686173682f7265736375652f727036345f3235362f6469676573742e7273a02210008c0000002600000015000000a02210008c0000002700000017000000a02210008c00000028000000180000000000000093bc053ffe1125c1508dbcd4778113deab3b51ed3311a441071454f18b359b8bfc66f5715bac1188ed51b56e8d7b6bd99fab8fe0b621de8c67b6e6ca5e2d20bd9055884d54bf3f2015d2c7fe87868908b785f8d4eae51a7bc87143803fe13092b275385898ae3acaaf84c842810d1583b62979ac106a1e5b7f68f1a7ca3cccaf881ae3fbfe72d563baec0eb292cecba491b250b494f981f8296dfa4afd952b11ef4937dde89dc85e25bfc8a58bd9b21d19578ab06af48a167e6019c3fc06b5004d1cca5682de0ae2d8241ea71e0f81b8a0e53b7b59e68db939c94e33499a7c08cb11144be8728ab2ff620f41700346aa88add9c165e639727086d2b235f1e2bac0939b773ded3b8d9d76d11dc7417ecf49aa3dcd0281a2518515eaae867289fbeed8dccad8c15554faab57ff63c19e678b9be2ae0882754c785dd1a52d1be6cbd2e9a982088d23b402d19afb89e8e312314212dfce13925407f6cad41581ed46c36f1b0dfed00b77bd3231ca71fa398135d2d09433a670eb90068795480fc34ffbe3a5966116e8bdb95a30a1cf154500cd28d84482b9a1e682f8cc790775dc03a9205d0761c95945b41ceb921368dc0aec1bac599cf1ece38a348bee961ba78aa161e09da0408de8301d09f8956a321d1c95a7fd32d84dde872a30d308f5ec59b906316a37a7b3c15732ce894457a7865b8c87bbd250c2fedb5e438ef2c60a2acdcb781865011c191f7a9df9ad86e8ac82d47cd6519c53a6bc78c87c692f97b2e1fb5d64159f3f6d52366195130b6a9452e7e2203131f9774c04898c433abf130885c6791e1a85f43d0b28277654ad55e8f0b7e3e68403d1e7cb8cf7c88b803e4d220d3f8e0b21a023a7694e0ea852b1f1da171d71699ef73c64fa2d237f8aba0d1cc1e8c72b955210d6e33d77d77bec1555ce7e6601f4797abee0b5079c206719428fad198bdf6e502b5ef7c5b3e5776febae629b000c5a2946dd7ade07984cfd6a70cfe2473f295b035b02b2fdc6ce063a148e10cc82c45dfce77d3cc5d852c08e718d09ddff46f3e0eb91afe532a8ec9349eff81989f1dc636db2d3ddb825b29fe9419dd57d22bd535a27a83045c740d6ea8cacec2b2ee4d381b1b8134b539fb5a76f3c49bdf1978fc899c61be8a3269db116d2166dcd280e2bf2a7826f0a411ff74fa2a79882eac319cd4b37ace355ab9657f3d24d5fbcba711adbb00ac23d10f806ff68d790fc5253857f1fb5b7d204da1fe8674609108c98a74c131b212163fb58afadc53526541b24204ac0b37f451f91fc72611bc3d66de2f41a4bc21ace07c88eca8c0d2ea0768722acab748e568775c39bb3044750bed2c891663adeff9f75a4cab31ff4330cd83601753e55616f040ae52d37d4e00698dcc220241aa72009238df04f6063ecde8b0268283a966415e38e92ff3d061fcc985f0562ee197dd57ed3bbe66846e9cd18d144027aa8f7e42d6ceda093835d3c94dd4f29beeb649f1fb66ad1b78cb21a2f15873080b8bcf6ff5fff77750c9819a2fd232242fa274d0b4dbe366bda72f64d2623cdb7f017f8f8c3a827054d149d245b097680f8486799cde9f963f6fca1d394fe09c5050cdb1952ae61a670a31e459dd07a2664a00806f3dbf17777e51e4587171026a5ab70255b0ff9825e8b4c20ebf757109f93d7ee3cdaf59e411f2f3929693ae775213dafa7e5ab3f97e6751891ed8a4d4bf33b84c33e4d3dac90a3f47ec0ad4fa763b584090245d5aec13a71cfac4dc02d2f782bbb80fea72332dfa60499010aab71c7989a713d240c5d0ac0a22397022bf61596b374621b022336f1b7f065609525d1f09cd75e9c10c5ef01fe53c2e74185d5058633ddbfc646d46cf57cb0bafc443f0b47533936360bca57c1f16a60852bc6c232441dcb0a44d66115c19b64ebcce5eba92c202a7c010c4f2afe9b2be7e75061f61f6f5b494e7a6e05c799fd84e00a3a227136a9d5e39130989deeaaca026750371e02104c8aeb6845f763b72fba2da7b0c4f6b0368089000000007cca556c5c83c02eae6c1124466bc34c67f384319b3e836b38ff39b2085e92c427b903f38365944076011bf8cc92624cc745f9169332dc2ef536eb2bdeb969175fcb6b4836d08573881071e41d3ef6f447da90e736560ed8b6e86849672b9f406e088d5f36d98823b24e5e85ec47ca959e5be056532bab05793996ab7ecdd2c0addf3ae2cb4dcdf7aaed05fb5f3c5ec931b9a28deeedf8a83fe2f7a017afb5a6d690595bbb938e0d0f81133a618d3a2c5be9435865424440c9af111f515b47f5e3bad4b75df2d49790d8cf473ccaa67ea8ac32b10d278bba560a725da668e9bf92157ad29221ad560fc94a08d6ce432bf108c7c1428552f1c52d2a48e8128f32b49498c019f07e9131eda6351fba6f38c1fc7db54a52ca7a99214361942e84845e54e672b9a345d97fdbd187816c4c04d4a3708b7abb17dfd6dd937e3a7eb84a6c6ab5cf41168bd2317a72b89f356e5cceb2e092eabe875ba159d1a68cd6bfd4cf8e91051e364b2525578adb137dc2dce3363f35ced266269d400e23b14ee870f95f8989e01ad4cb8a46fc27f427ba7084503d1dc293e5ebc03b043d173f4d28943af5eddd51049b17424447f2269d4b6974bfbc07f8878710c22b1654507635bb6e97deee5c4cca470440e8878e76a6aac4b4bd96ed2c7370e287671250af2787290b467d0e4a44a2f4f78f85abadb916aeab948d34fb2ba2fe6c5ae8d39eda4625f84590d3a20894e314f634f505c364acdfa071739b4719549c62c43f07f2014fb43b1974058a0068139b49db64bd2015007df3673400ae5f93a72f0a84ae9dcd764e5a3acb2e6e295d4eaa53527b57435d6d2d4d90d9a1c92f104841c8b729d65dc744759da81c3e513d23c8d013e5482248b3acfa37cb541e93183cdacc2f4b52f5dcbd1c9f202c3b20e3c418a8c1525d90d70bb2f00080c45fb32e5fcbb5b9c25c6b153e4b3c143818e2ab14c5f7897f4f02106c49483e26fb7d68280eb6caf3688c1c9cc63856e83eef09a36c34957ad5931af6829c834741208d534f242e8b0401ff20d5c418b6894fde5539786146868747f1e8b987396d24d3279bb155d99fa8c20b91a7bd8ec0555752a89b37110820768893992760f049cf8b5f102913a52fa7c8e3323750282e5543bdb63cd95b49488023d43cabef9edb0f3ce038605b1d70c93aefb6578b164de11c4512e85c08386a1c9ab19e4a108bdc5e64494c4bd09ec24e1f29fca0c104b3707f13d7def305c98887a342830e91351bf16e91ffa01d0ad4a19d019f0773caf939cee6723e3e030125cb2ba59bd1817bca0f267404caa6ebf52c0f4cae79fe589fd43d13ded825c1301f85275208674c20004e8a9c04328f3329cf6447af5df054918be63f3429a0d4123c880435e664aaf6a49ae14ffe41df4d18a7983f711e3f561b698b9b1ea239d127b66893066fba5842bc944ea05d09a1d2512fcddea774ceb7c064bb4cb754fe4d723a4d004d42617365456c656d656e74007900000004000000040000007a00000000000000402d100000000000556e6b6e6f776e4572726f727b00000004000000040000007c000000556e636f6e73756d65644279746573556e6578706563746564454f46496e76616c696456616c7565004190dbc0000b0101007b0970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d6279030572757374631d312e36332e30202834623931613665613720323032322d30382d3038290677616c72757306302e31392e300c7761736d2d62696e6467656e12302e322e3833202865626136393166333829'; + '0x0061736d0100000001490d60027f7f0060017f0060027f7f017f60037f7f7f017f60037f7f7f0060017f017f60047f7f7f7f0060000060027f7e0060047f7f7f7f017f60027e7e017e60017e017e60017f017e032a2905010409010002000104000606000a00040000010003000708070005000104000008050203000b0c010405017001040405030100110609017f01418080c0000b076005066d656d6f727902000b7265736375655f6861736800021f5f5f7762696e6467656e5f6164645f746f5f737461636b5f706f696e7465720022115f5f7762696e6467656e5f6d616c6c6f63001b0f5f5f7762696e6467656e5f6672656500200909010041010b032328270a987a29991f02087f017e02400240024002400240200041f5014f0440200041cdff7b4f0d042000410b6a2200417871210441e49ac0002802002208450d03410020046b2102027f41002004418002490d001a411f200441ffffff074b0d001a2004410620004108766722006b7641017120004101746b413e6a0b220641027441f09cc0006a2802002200044020044100411920064101766b411f712006411f461b74210703400240200028020441787122052004490d00200520046b220520024f0d0020002103200522020d00410021020c040b200041146a28020022052001200520002007411d764104716a41106a2802002200471b200120051b21012007410174210720000d000b20010440200121000c030b20030d030b41002103200841022006742200410020006b72712200450d032000410020006b716841027441f09cc0006a28020022000d010c030b024002400240027f0240024041e09ac000280200220341102000410b6a4178712000410b491b22044103762201762200410371450440200441f09dc0002802004d0d0920000d0141e49ac0002802002200450d092000410020006b716841027441f09cc0006a280200220328020441787120046b210120032802102200450440200341146a28020021000b200004400340200028020441787120046b220520014921022005200120021b21012000200320021b210320002802102202047f200205200041146a2802000b22000d000b0b2003100820014110490d0520032004410372360204200320046a22052001410172360204200120056a200136020041f09dc0002802002200450d042000410376220441037441e89ac0006a210041f89dc000280200210241e09ac00028020022064101200474220471450d0220002802080c030b02402000417f7341017120016a2200410374220541f09ac0006a280200220141086a22042802002202200541e89ac0006a22054704402002200536020c200520023602080c010b41e09ac0002003417e200077713602000b200120004103742200410372360204200020016a2200200028020441017236020420040f0b024041022001411f712201742202410020026b722000200174712200410020006b71682201410374220541f09ac0006a280200220041086a22062802002202200541e89ac0006a22054704402002200536020c200520023602080c010b41e09ac0002003417e200177713602000b20002004410372360204200020046a22052001410374220320046b2201410172360204200020036a200136020041f09dc000280200220004402000410376220241037441e89ac0006a210041f89dc0002802002103027f41e09ac00028020022044101200274220271044020002802080c010b41e09ac000200220047236020020000b2102200020033602082002200336020c2003200036020c200320023602080b41f89dc000200536020041f09dc000200136020020060f0b41e09ac000200420067236020020000b2104200020023602082004200236020c2002200036020c200220043602080b41f89dc000200536020041f09dc00020013602000c010b2003200120046a2200410372360204200020036a220020002802044101723602040b0c040b0340200020032000280204417871220320044f200320046b22012002497122051b21032001200220051b210220002802102201047f200105200041146a2802000b22000d000b2003450d010b200441f09dc00028020022004d2002200020046b4f710d00200310080240200241104f044020032004410372360204200320046a22002002410172360204200020026a200236020020024180024f04402000200210070c020b2002410376220241037441e89ac0006a2101027f41e09ac00028020022054101200274220271044020012802080c010b41e09ac000200220057236020020010b2102200120003602082002200036020c2000200136020c200020023602080c010b2003200220046a2200410372360204200020036a220020002802044101723602040b0c020b0240024002400240024002400240024002400240200441f09dc00028020022034b044041f49dc000280200220020044b0d0441002102200441af80046a220041107640002203417f4622010d0b20034110742203450d0b41809ec000410020004180807c7120011b220541809ec0002802006a220036020041849ec00041849ec0002802002201200020002001491b36020041fc9dc0002802002202450d0141889ec0002100034020002802002201200028020422066a2003460d03200028020822000d000b0c030b41f89dc00028020021000240200320046b2201410f4d044041f89dc000410036020041f09dc000410036020020002003410372360204200020036a220320032802044101723602040c010b41f09dc000200136020041f89dc000200020046a220236020020022001410172360204200020036a2001360200200020044103723602040b200041086a0f0b419c9ec000280200220045200020034b720d030c070b200028020c200120024b720d0020022003490d030b419c9ec000419c9ec0002802002200200320002003491b360200200320056a210141889ec000210002400240034020012000280200470440200028020822000d010c020b0b200028020c450d010b41889ec0002100034002402002200028020022014f0440200120002802046a220620024b0d010b200028020821000c010b0b41fc9dc000200336020041f49dc000200541286b220036020020032000410172360204200020036a412836020441989ec00041808080013602002002200641206b41787141086b22002000200241106a491b2201411b36020441889ec0002902002109200141106a41909ec00029020037020020012009370208418c9ec000200536020041889ec000200336020041909ec000200141086a36020041949ec00041003602002001411c6a21000340200041073602002006200041046a22004b0d000b20012002460d0720012001280204417e713602042002200120026b22004101723602042001200036020020004180024f04402002200010070c080b2000410376220341037441e89ac0006a2100027f41e09ac00028020022014101200374220371044020002802080c010b41e09ac000200120037236020020000b2103200020023602082003200236020c2002200036020c200220033602080c070b200020033602002000200028020420056a360204200320044103723602042001200320046a22006b2104200141fc9dc00028020047044041f89dc0002802002001460d04200128020422024103714101470d050240200241787122054180024f0440200110080c010b2001410c6a2802002206200141086a28020022074704402007200636020c200620073602080c010b41e09ac00041e09ac000280200417e200241037677713602000b200420056a2104200120056a21010c050b41fc9dc000200036020041f49dc00041f49dc00028020020046a2201360200200020014101723602040c080b41f49dc000200020046b220336020041fc9dc00041fc9dc000280200220020046a22013602002001200341017236020420002004410372360204200041086a21020c060b419c9ec00020033602000c030b2000200520066a36020441f49dc00028020020056a210041fc9dc00041fc9dc0002802002203410f6a417871220141086b36020041f49dc000200320016b20006a41086a2202360200200141046b2002410172360200200020036a412836020441989ec00041808080013602000c030b41f89dc000200036020041f09dc00041f09dc00028020020046a220136020020002001410172360204200020016a20013602000c040b20012001280204417e7136020420002004410172360204200020046a200436020020044180024f04402000200410070c040b2004410376220241037441e89ac0006a2101027f41e09ac00028020022054101200274220271044020012802080c010b41e09ac000200220057236020020010b2102200120003602082002200036020c2000200136020c200020023602080c030b41a09ec00041ff1f360200418c9ec000200536020041889ec000200336020041f49ac00041e89ac00036020041fc9ac00041f09ac00036020041f09ac00041e89ac00036020041849bc00041f89ac00036020041f89ac00041f09ac000360200418c9bc00041809bc00036020041809bc00041f89ac00036020041949bc00041889bc00036020041889bc00041809bc000360200419c9bc00041909bc00036020041909bc00041889bc00036020041a49bc00041989bc00036020041989bc00041909bc00036020041ac9bc00041a09bc00036020041a09bc00041989bc00036020041949ec000410036020041b49bc00041a89bc00036020041a89bc00041a09bc00036020041b09bc00041a89bc00036020041bc9bc00041b09bc00036020041b89bc00041b09bc00036020041c49bc00041b89bc00036020041c09bc00041b89bc00036020041cc9bc00041c09bc00036020041c89bc00041c09bc00036020041d49bc00041c89bc00036020041d09bc00041c89bc00036020041dc9bc00041d09bc00036020041d89bc00041d09bc00036020041e49bc00041d89bc00036020041e09bc00041d89bc00036020041ec9bc00041e09bc00036020041e89bc00041e09bc00036020041f49bc00041e89bc00036020041fc9bc00041f09bc00036020041f09bc00041e89bc00036020041849cc00041f89bc00036020041f89bc00041f09bc000360200418c9cc00041809cc00036020041809cc00041f89bc00036020041949cc00041889cc00036020041889cc00041809cc000360200419c9cc00041909cc00036020041909cc00041889cc00036020041a49cc00041989cc00036020041989cc00041909cc00036020041ac9cc00041a09cc00036020041a09cc00041989cc00036020041b49cc00041a89cc00036020041a89cc00041a09cc00036020041bc9cc00041b09cc00036020041b09cc00041a89cc00036020041c49cc00041b89cc00036020041b89cc00041b09cc00036020041cc9cc00041c09cc00036020041c09cc00041b89cc00036020041d49cc00041c89cc00036020041c89cc00041c09cc00036020041dc9cc00041d09cc00036020041d09cc00041c89cc00036020041e49cc00041d89cc00036020041d89cc00041d09cc00036020041ec9cc00041e09cc00036020041e09cc00041d89cc00036020041fc9dc000200336020041e89cc00041e09cc00036020041f49dc000200541286b220036020020032000410172360204200020036a412836020441989ec00041808080013602000b4100210241f49dc000280200220020044d0d0041f49dc000200020046b220336020041fc9dc00041fc9dc000280200220020046a22013602002001200341017236020420002004410372360204200041086a0f0b20020f0b200341086a0bcc1202127f027e230041e00f6b22012400200041e0006a2107200141fc0d6a210b200141e40e6a210c200141e80e6a210d200141f0036a2106200141c00f6a210e200141d80e6a210f200141f00d6a211020014190036a2111419887c000210841b88cc000210903400240200a4107470440410021020340200241e00046450440200020026a2203290300102621132003201320131026100e1021200241086a21020c010b0b20014190036a220441e0001025200141f0036a41d891c00041800910241a200141003602880d200142003703800d200120063602fc0c20014280808080c0013703f00c200a41016a210a200621020340024020022004460d002001200441086a3602f80c200141e00e6a200141f0036a101120012903e00e500d00200141f80d6a2202200d41e00010241a200c200241e00010241a200141900d6a2203200141e00e6a220541e40010241a2002200341e40010241a2005200b41e00010241a200141003602d80f200142003703d00f200120073602cc0f20014280808080c0013703c00f2004290300211320002102200721030340024020022003460d002001200241086a3602c80f200141e0006a200141e00e6a10122001290360a7450d00200442ffffffff0f42002013201320012903682002290300100e221442ffffffff0f7c20142014428080808070561b7c2213561b20137c221337030020012802c80f210220012802cc0f21030c010b0b20012802f80c210420012802fc0c21020c010b0b200020014190036a41e00010242105410021020340200241e00046450440200220056a220342ffffffff0f420020032903002214200220086a290300221342ffffffff0f7c20132013428080808070561b7c22132014541b20137c370300200241086a21020c010b0b200141f0006a200541e00010241a410021020340200241e00046450440200141f0006a20026a220320032903001026370300200241086a21020c010b0b200141d0016a200141f0006a41e00010241a410021020340200241e00046450440200141d0016a20026a220320032903001026370300200241086a21020c010b0b200141b0026a200141d0016a41e00010241a410021040340024020044103470440410021020340200241e000460d02200141b0026a20026a220320032903001026370300200241086a21020c000b000b200141f0036a200141d0016a41e00010241a200141003602e804200142003703e004200120113602dc0420014280808080c0013703d0042001200141b0026a3602d8040340200141d0006a200141f0036a100f2001280250220204402002200129035810210c010b0b20014190036a200141b0026a41e00010241a410021040340024020044106470440410021020340200241e000460d0220014190036a20026a220320032903001026370300200241086a21020c000b000b200141f0036a200141b0026a41e00010241a200141003602e804200142003703e004200120063602dc0420014280808080c0013703d004200120014190036a3602d8040340200141406b200141f0036a100f2001280240220204402002200129034810210c010b0b200141900d6a20014190036a41e00010241a41002104034002402004410c470440410021020340200241e000460d02200141900d6a20026a220320032903001026370300200241086a21020c000b000b200141f0036a20014190036a41e00010241a200141003602e804200142003703e004200120103602dc0420014280808080c0013703d0042001200141900d6a3602d8040340200141306a200141f0036a100f2001280230220204402002200129033810210c010b0b200141f80d6a200141900d6a41e00010241a410021040340024020044106470440410021020340200241e000460d02200141f80d6a20026a220320032903001026370300200241086a21020c000b000b200141f0036a200141b0026a41e00010241a200141003602e804200142003703e0042001200f3602dc0420014280808080c0013703d0042001200141f80d6a3602d8040340200141206a200141f0036a100f2001280220220204402002200129032810210c010b0b200141e00e6a200141f80d6a41e00010241a41002104034002402004411f470440410021020340200241e000460d02200141e00e6a20026a220320032903001026370300200241086a21020c000b000b200141f0036a200141f80d6a41e00010241a200141003602e804200142003703e0042001200e3602dc0420014280808080c0013703d0042001200141e00e6a3602d8040340200141106a200141f0036a100f2001280210220204402002200129031810210c010b0b410021020340200241e00046450440200220056a2203200141e00e6a20026a2903001026200141f80d6a20026a290300100e10261026200141f0006a20026a290300200141d0016a20026a290300100e2003290300100e100e370300200241086a21020c010b0b20014190036a220441e0001025200141f0036a41d891c00041800910241a200141003602880d200142003703800d200120063602fc0c20014280808080c0013703f00c200621020340024020022004460d002001200441086a3602f80c200141e00e6a200141f0036a101120012903e00e500d00200141f80d6a2202200d41e00010241a200c200241e00010241a200141900d6a2203200141e00e6a221241e40010241a2002200341e40010241a2012200b41e00010241a200141003602d80f200142003703d00f200120073602cc0f20014280808080c0013703c00f2004290300211320052102200721030340024020022003460d002001200241086a3602c80f2001200141e00e6a10122001290300a7450d00200442ffffffff0f42002013201320012903082002290300100e221442ffffffff0f7c20142014428080808070561b7c2213561b20137c221337030020012802c80f210220012802cc0f21030c010b0b20012802f80c210420012802fc0c21020c010b0b200520014190036a41e00010242103410021020340200241e000460d0c200220036a220542ffffffff0f420020052903002214200220096a290300221342ffffffff0f7c20132013428080808070561b7c22132014541b20137c370300200241086a21020c000b000b200441016a21040c000b000b200441016a21040c000b000b200441016a21040c000b000b200441016a21040c000b000b200441016a21040c000b000b200141e00f6a24000f0b200941e0006a2109200841e0006a21080c000b000ba40902087f047e230041a0016b22032400200320023602502003200236024c20032001360248200341106a200341c8006a100d200328021021022003200328021422013602202003200136021c200320023602180240200141074d04404201210b0340200341186a200b10184200210b200328022022014108490d000b0c010b0240024020014103710e0402010100010b200341186a42011018200328022021010c010b4201210b0340200341186a200b10184200210b200328022022014103710d000b0b02400240024002402001410847410020014103712001410949721b45044020032802182107200328021c210641002102200341003602502003420837034820072104410821050340200104402004290300220b200b42ffffffff0f7c200b428180808070541b210b200328024c200246047f230041106b22052400200541086a200341c8006a20024101100b2005280208200528020c101f200541106a24002003280248210520032802500520020b41037420056a200b3703002003200328025041016a2202360250200141016b2101200441086a21040c010b0b200341306a200341d0006a28020036020020032003290348370328200645200641ffffffff0171200647724504402007200641037410200b200328023022014108470d01200341c8006a2003280228410810090c020b200341dc006a41013602002003420137024c200341d085c0003602482003410136028c0120032001360278200320034188016a3602582003200341f8006a36028801200341c8006a41b086c000101a000b200141027641016b22024101470d01200341c8006a2003280228200110090b2003290360210b2003290358210c2003290350210d2003290348210e0c010b200341c8006a2204200341286a200141086b1010200341386a2004100a200420032802382003280240100920024101200241014b1b41016b2104034020040440200341086a410410142003200328020c36026c200320032802082201360268200341d0006a290300210b200341d8006a290300210c200341e0006a290300210d20012003290348370300200141186a2206200d370300200141106a2205200c370300200141086a2208200b37030020034188016a2202200341286a200328023041046b1010200341f8006a22072002100a20074104101620032802782209200328028001220a4103746a22022001290300370300200241086a2008290300370300200241106a2005290300370300200241186a2006290300370300200341003602702003200a41046a220136028001200341c8006a200920011009200441016b21042007101d200341e8006a101d0c01052003290360210b2003290358210c2003290350210d2003290348210e200341386a101d0b0b0b41201000220104402001200b42ffffffff0f7c200b200b428080808070561b3703182001200c42ffffffff0f7c200c200c428080808070561b3703102001200d42ffffffff0f7c200d200d428080808070561b3703082001200e42ffffffff0f7c200e200e428080808070561b370300200341286a101d20034284808080c00037024c200320013602482003200341c8006a100d20002003290300370300200341a0016a24000f0b000bec0501067f02400240024002400240200241094f044020032002100622020d0141000f0b41002102200341ccff7b4b0d0241102003410b6a4178712003410b491b2101200041046b220528020022064178712104024002400240024020064103710440200041086b2108200120044d0d01200420086a220741fc9dc000280200460d0241f89dc0002802002007460d03200728020422064102710d062006417871220920046a220420014f0d040c060b200141800249200420014104724972200420016b418180084f720d050c080b200420016b22024110490d07200520064101712001724102723602000c060b41f49dc00028020020046a220420014d0d0320052006410171200172410272360200200120086a2202200420016b220141017236020441f49dc000200136020041fc9dc00020023602000c060b41f09dc00028020020046a22042001490d020240200420016b2203410f4d044020052006410171200472410272360200200420086a22012001280204410172360204410021030c010b20052006410171200172410272360200200120086a22022003410172360204200220036a2201200336020020012001280204417e713602040b41f89dc000200236020041f09dc00020033602000c050b200420016b2102024020094180024f0440200710080c010b2007410c6a2802002203200741086a28020022074704402007200336020c200320073602080c010b41e09ac00041e09ac000280200417e200641037677713602000b200241104f0440200520052802004101712001724102723602000c040b20052005280200410171200472410272360200200420086a220120012802044101723602040c040b2002200020032001200120034b1b10241a200010040c010b200310002201450d00200120002003417c4178200528020022014103711b20014178716a2201200120034b1b1024200010040f0b20020f0b200120086a22012002410372360204200120026a220320032802044101723602042001200210050b20000bbd0601057f200041086b2201200041046b280200220341787122006a210202400240024020034101710d002003410371450d012001280200220320006a2100200120036b220141f89dc00028020046044020022802044103714103470d0141f09dc000200036020020022002280204417e7136020420012000410172360204200020016a20003602000f0b20034180024f0440200110080c010b2001410c6a2802002204200141086a28020022054704402005200436020c200420053602080c010b41e09ac00041e09ac000280200417e200341037677713602000b024020022802042203410271044020022003417e7136020420012000410172360204200020016a20003602000c010b024002400240200241fc9dc00028020047044041f89dc0002802002002470d0141f89dc000200136020041f09dc00041f09dc00028020020006a220036020020012000410172360204200020016a20003602000f0b41fc9dc000200136020041f49dc00041f49dc00028020020006a220036020020012000410172360204200141f89dc000280200460d010c020b2003417871220420006a2100024020044180024f0440200210080c010b2002410c6a2802002204200241086a28020022024704402002200436020c200420023602080c010b41e09ac00041e09ac000280200417e200341037677713602000b20012000410172360204200020016a2000360200200141f89dc000280200470d0241f09dc00020003602000c030b41f09dc000410036020041f89dc00041003602000b41989ec00028020020004f0d0141fc9dc0002802002200450d01024041f49dc0002802004129490d0041889ec000210103402000200128020022024f0440200220012802046a20004b0d020b200128020822010d000b0b101741f49dc00028020041989ec0002802004d0d0141989ec000417f3602000f0b2000418002490d0120012000100741a09ec00041a09ec00028020041016b220036020020000d0010170f0b0f0b2000410376220241037441e89ac0006a2100027f41e09ac00028020022034101200274220271044020002802080c010b41e09ac000200220037236020020000b2102200020013602082002200136020c2001200036020c200120023602080b900501047f200020016a2102024002400240200028020422034101710d002003410371450d012000280200220320016a2101200020036b220041f89dc00028020046044020022802044103714103470d0141f09dc000200136020020022002280204417e7136020420002001410172360204200220013602000f0b20034180024f0440200010080c010b2000410c6a2802002204200041086a28020022054704402005200436020c200420053602080c010b41e09ac00041e09ac000280200417e200341037677713602000b20022802042203410271044020022003417e7136020420002001410172360204200020016a20013602000c020b0240200241fc9dc00028020047044041f89dc0002802002002470d0141f89dc000200036020041f09dc00041f09dc00028020020016a220136020020002001410172360204200020016a20013602000f0b41fc9dc000200036020041f49dc00041f49dc00028020020016a220136020020002001410172360204200041f89dc000280200470d0141f09dc000410036020041f89dc00041003602000f0b2003417871220420016a2101024020044180024f0440200210080c010b2002410c6a2802002204200241086a28020022024704402002200436020c200420023602080c010b41e09ac00041e09ac000280200417e200341037677713602000b20002001410172360204200020016a2001360200200041f89dc000280200470d0141f09dc00020013602000b0f0b20014180024f04402000200110070f0b2001410376220241037441e89ac0006a2101027f41e09ac00028020022034101200274220271044020012802080c010b41e09ac000200220037236020020010b2102200120003602082002200036020c2000200136020c200020023602080bf60201057f02400240200141094f044041cdff7b20014110200141104b1b22016b20004d0d01200141102000410b6a4178712000410b491b22046a410c6a10002202450d01200241086b21000240200141016b2203200271450440200021010c010b200241046b22052802002206417871200220036a410020016b7141086b220241002001200220006b41104b1b6a220120006b22026b21032006410371044020012001280204410171200372410272360204200120036a2203200328020441017236020420052005280200410171200272410272360200200020026a220320032802044101723602042000200210050c010b20002802002100200120033602042001200020026a3602000b20012802042200410371450d0220004178712202200441106a4d0d0220012000410171200472410272360204200120046a2200200220046b2204410372360204200120026a220220022802044101723602042000200410050c020b2000100021030b20030f0b200141086a0bb00201047f411f210220004200370210200141ffffff074d04402001410620014108766722036b7641017120034101746b413e6a21020b2000200236021c200241027441f09cc0006a2104024002400240024041e49ac000280200220541012002742203710440200428020022032802044178712001470d01200321020c020b41e49ac000200320057236020020042000360200200020043602180c030b20014100411920024101766b411f712002411f461b742104034020032004411d764104716a41106a22052802002202450d02200441017421042002210320022802044178712001470d000b0b20022802082201200036020c20022000360208200041003602182000200236020c200020013602080f0b20052000360200200020033602180b2000200036020c200020003602080bb30201057f20002802182104024002402000200028020c2201460440200041144110200041146a220128020022031b6a28020022020d01410021010c020b20002802082202200136020c200120023602080c010b2001200041106a20031b21030340200321052002220141146a22032802002202450440200141106a2103200128021021020b20020d000b200541003602000b02402004450d0002402000200028021c41027441f09cc0006a220228020047044020044110411420042802102000461b6a200136020020010d010c020b2002200136020020010d0041e49ac00041e49ac000280200417e200028021c77713602000f0b2001200436021820002802102202044020012002360210200220013602180b200041146a2802002200450d00200141146a2000360200200020013602180b0bdd0202037f027e230041e0006b22032400200341086a41d800102520032002ad370300200241037421020240034020020440200441046a2205410c4f0d02200320054103746a220542ffffffff0f4200200529030022072001290300220642ffffffff0f7c20062006428080808070561b7c22062007541b20067c370300200441016a220441077145044020031001410021040b200141086a2101200241086b21020c010b0b20040440200310010b20002003290320370300200041186a200341386a290300370300200041106a200341306a290300370300200041086a200341286a290300370300200341e0006a24000f0b230041306b220024002000410c360204200020053602002000411c6a41023602002000412c6a41013602002000420237020c200041fc80c000360208200041013602242000200041206a360218200020003602282000200041046a360220200041086a41d484c000101a000bef06020c7f017e230041106b22082400200128021021092001280204210a20012802002104200841086a2001410c6a2802002205200128020822016b410376220310142008290308210e200041003602082000200e3702002000200310162000280200200028020822064103746a210203402001200547044020022001290300370300200241086a2102200141086a21010c010b0b2000200320066a360208200a04402009280208220d20044704400240027f0240200a410374220520092802002200200d4103746a2202200020044103746a22006b4b0440200020056a2104200220056a210120022005410f4d0d021a2001417c7121024100200141037122066b210720060440200020056a41016b21030340200141016b220120032d00003a0000200341016b2103200120024b0d000b0b2002200520066b2206417c7122036b2101410020036b2105200420076a22044103710440200541004e0d022004410374220341187121072004417c71220b41046b2100410020036b411871210c200b28020021030340200241046b22022003200c742000280200220320077672360200200041046b210020012002490d000b0c020b200541004e0d01200020066a41046b21000340200241046b22022000280200360200200041046b210020012002490d000b0c010b02402005410f4d0440200221010c010b2002410020026b41037122046a21032004044020022101200021020340200120022d00003a0000200241016a2102200141016a22012003490d000b0b2003200520046b2205417c7122066a21010240200020046a22044103710440200641004c0d012004410374220241187121072004417c71220b41046a2100410020026b411871210c200b280200210203402003200220077620002802002202200c7472360200200041046a2100200341046a22032001490d000b0c010b200641004c0d0020042100034020032000280200360200200041046a2100200341046a22032001490d000b0b20054103712105200420066a21000b2005450d02200120056a21020340200120002d00003a0000200041016a2100200141016a22012002490d000b0c020b20064103712200450d01200420056a2104200120006b0b2102200441016b21000340200141016b220120002d00003a0000200041016b2100200120024b0d000b0b0b2009200a200d6a3602080b200841106a24000bcd0101037f230041206b220424002000027f4100200220036a22032002490d001a200128020422024101742205200320032005491b22034104200341044b1b220341ffffffff017120034641037421052003410374210620042002047f200420024103743602142004200128020036021041080541000b360218200420062005200441106a100c20042802004504402004280204210220012003360204200120023602004181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000bbc0101037f230041106b220424000240027f0240200204404101210620014100480d0320032802080d01200420012002101e2004280200210320042802040c020b20002001360204410121060c020b20032802042205450440200441086a20012002101e20042802082103200428020c0c010b20032802002005200220011003210320010b21052003044020002003360204410021060c010b20002001360204200221050b20002006360200200041086a2005360200200441106a24000b8c0101047f024020012802042202200128020822034d200241ffffffff017120024772450440200241037421022001280200210402402003410374220504402004200241082005100322020d01000b20042002102041082102200341ffffffff01712003470d020b20012003360204200120023602000b20002003360204200020012802003602000f0b1019000bc10102017f047e230041106b220224002002200042ffffffff0f832203200142ffffffff0f8322047e22052003200142208822017e22032004200042208822067e7c22004220867c220437030020022004200554ad200120067e2000200354ad4220862000422088847c7c370308200241086a290300210020022903002101200241106a240042ffffffff0f420042818080807042002001200120004220887d2203541b20037c22012000422086200042ffffffff0f837d7c22002001541b20007c0b5e02027f017e230041106b2202240020012802682203200141ec006a28020046047f4100052001200341086a360268200220011012200229030821042003410020022802001b0b21012000200437030820002001360200200241106a24000bba0101017f2002200128020822034b0440230041306b2200240020002003360204200020023602002000411c6a41023602002000412c6a41013602002000420237020c200041a883c000360208200041013602242000200041206a3602182000200041046a36022820002000360220200041086a41b883c000101a000b200120023602082000200136021020004100360204200020033602002000410c6a2001280200220120034103746a3602002000200120024103746a3602080b4a01017f230041106b22022400200241086a20014180096a101c20002002280208047e200041086a2001200228020c41e0006c6a41e00010241a42010542000b370300200241106a24000b5002017f027e230041106b22022400200241086a200141e0006a101c2002280208047e2001200228020c4103746a290300210342010542000b21042000200337030820002004370300200241106a24000b5701027f41dc9ac00041dc9ac000280200220241016a36020041a49ec00041a49ec00028020041016a220136020002402002410048200141024b720d0020004541d89ac000280200410048200141014b72720d00000b000b4c01017f02402001450440410821020c010b0240200141ffffffff01712001470d00200141037422024100480d0020024108100622020d01000b1019000b20002001360204200020023602000b4b000240027f2001418080c4004704404101200028021820012000411c6a2802002802101102000d011a0b20020d0141000b0f0b2000280218200241002000411c6a28020028020c1103000b4001027f230041106b2202240020012000280204200028020822036b4b0440200241086a200020032001100b2002280208200228020c101f0b200241106a24000b3c01027f41a09ec00041909ec0002802002201047f0340200041016a2100200128020822010d000b200041ff1f200041ff1f4b1b0541ff1f0b3602000bfa0101057f200028020822022000280204460440230041206b22032400027f41002002200241016a22024b0d001a200028020422044101742205200220022005491b22024104200241044b1b220241ffffffff017120024641037421052002410374210620032004047f200320044103743602142003200028020036021041080541000b360218200320062005200341106a100c20032802004504402003280204210420002002360204200020043602004181808080780c010b20032802042102200341086a2802000b210420022004101f200341206a2400200028020821020b2000200241016a360208200028020020024103746a20013703000b3f01017f230041206b220024002000411c6a4100360200200041c086c0003602182000420137020c200041b080c000360208200041086a41b880c000101a000bc00101017f230041206b22022400200241013a001820022001360214200220003602102002418c81c00036020c200241c086c000360208200241086a22002802082201450440230041206b22002400200041146a4100360200200041c086c000360210200042013702042000412b36021c200041c086c0003602182000200041186a3602002000418887c000101a000b200141146a280200210202400240200141046a2802000e020000010b20020d0020002d00101013000b20002d00101013000b2a0002402000417c4b0d00200045044041040f0b20002000417d4941027410062200450d0020000f0b000b3001027f2001280200220320012802044904402001200341016a360200410121020b20002003360204200020023602000b2901017f2000280204220145200141ffffffff0171200147724504402000280200200141037410200b0b1d002001044020012002100621020b20002001360204200020023602000b1b00024020014181808080784704402001450d01000b0f0b1019000b0b0020010440200010040b0b1000200020002903002001100e3703000b0b00200023006a240023000bc80602097f027e2000350200210b230041306b22052400412721000240200b4290ce00540440200b210c0c010b0340200541096a20006a220241046b200b4290ce0080220c42f0b17f7e200b7ca7220341ffff037141e4006e2206410174419c81c0006a2f00003b0000200241026b2006419c7f6c20036a41ffff0371410174419c81c0006a2f00003b0000200041046b2100200b42ffc1d72f56200c210b0d000b0b200ca7220241e3004b0440200041026b2200200541096a6a200ca7220341ffff037141e4006e2202419c7f6c20036a41ffff0371410174419c81c0006a2f00003b00000b02402002410a4f0440200041026b2200200541096a6a2002410174419c81c0006a2f00003b00000c010b200041016b2200200541096a6a200241306a3a00000b027f200541096a20006a2109412720006b220a2001280200220041017122036a210241c086c000410020004104711b2106412b418080c40020031b21080240024020012802084504404101210020012008200610150d010c020b024002400240024020022001410c6a280200220349044020004108710d0441002100200320026b22022103410120012d0020220420044103461b41037141016b0e020102030b4101210020012008200610150d040c050b41002103200221000c010b20024101762100200241016a41017621030b200041016a21002001411c6a2802002102200128020421042001280218210702400340200041016b2200450d01200720042002280210110200450d000b41010c040b410121002004418080c400460d0120012008200610150d0120072009200a200228020c1103000d0141002100027f0340200320002003460d011a200041016a2100200720042002280210110200450d000b200041016b0b20034921000c010b200128020421042001413036020420012d0020210741012100200141013a002020012008200610150d00200320026b41016a21002001411c6a28020021022001280218210302400340200041016b2200450d01200341302002280210110200450d000b41010c030b4101210020032009200a200228020c1103000d00200120073a00202001200436020441000c020b20000c010b20012802182009200a2001411c6a28020028020c1103000b200541306a24000bb80201077f024020022204410f4d0440200021020c010b2000410020006b41037122036a21052003044020002102200121060340200220062d00003a0000200641016a2106200241016a22022005490d000b0b2005200420036b2208417c7122076a21020240200120036a22034103710440200741004c0d012003410374220441187121092003417c71220641046a2101410020046b4118712104200628020021060340200520062009762001280200220620047472360200200141046a2101200541046a22052002490d000b0c010b200741004c0d0020032101034020052001280200360200200141046a2101200541046a22052002490d000b0b20084103712104200320076a21010b20040440200220046a21030340200220012d00003a0000200141016a2101200241016a22022003490d000b0b20000b8e0101027f2001410f4b04402000410020006b41037122036a2102200304400340200041003a0000200041016a22002002490d000b0b2002200120036b2201417c7122036a2100200341004a0440034020024100360200200241046a22022000490d000b0b200141037121010b20010440200020016a21010340200041003a0000200041016a22002001490d000b0b0b080020002000100e0b0d0042d0e5f8878be3aaf5ef000b0300010b0be21a0100418080c0000bd81a6c6962726172792f616c6c6f632f7372632f7261775f7665632e72736361706163697479206f766572666c6f770000001c00100011000000000010001c0000000502000005000000696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e646578206973200000480010002000000068001000120000000200000000000000010000000300000030303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839396c6962726172792f636f72652f7372632f736c6963652f696e6465782e7273736c69636520696e64657820737461727473206174202062757420656e64732061742000008301100016000000990110000d000000640110001f0000005c000000050000002f55736572732f7a68616e677a68696368616f2f2e636172676f2f6769742f636865636b6f7574732f7265736375652d686173682d303665323862613633396539363538342f643432346365622f7372632f7574696c732f77696e74657266656c6c2d63727970746f2f7372632f686173682f7265736375652f727036345f3235362f6d6f642e7273000000c801100089000000e30000000d0000006578706563746564206c656e206f662076616c7565735f696e5f75363420746f206265205b65786163746c7920385d206f72205b6f7665722038206275742073686f756c6420626520736f6d65206d756c7469706c65206f6620345d20627574207265636569766564200000640210006a0000002f55736572732f7a68616e677a68696368616f2f2e636172676f2f6769742f636865636b6f7574732f7265736375652d686173682d303665323862613633396539363538342f643432346365622f7372632f6c69622e7273d802100058000000250000000500000063616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c75656c6962726172792f7374642f7372632f70616e69636b696e672e7273006b0310001c000000470200001e00000093bc053ffe1125c1508dbcd4778113deab3b51ed3311a441071454f18b359b8bfc66f5715bac1188ed51b56e8d7b6bd99fab8fe0b621de8c67b6e6ca5e2d20bd9055884d54bf3f2015d2c7fe87868908b785f8d4eae51a7bc87143803fe13092b275385898ae3acaaf84c842810d1583b62979ac106a1e5b7f68f1a7ca3cccaf881ae3fbfe72d563baec0eb292cecba491b250b494f981f8296dfa4afd952b11ef4937dde89dc85e25bfc8a58bd9b21d19578ab06af48a167e6019c3fc06b5004d1cca5682de0ae2d8241ea71e0f81b8a0e53b7b59e68db939c94e33499a7c08cb11144be8728ab2ff620f41700346aa88add9c165e639727086d2b235f1e2bac0939b773ded3b8d9d76d11dc7417ecf49aa3dcd0281a2518515eaae867289fbeed8dccad8c15554faab57ff63c19e678b9be2ae0882754c785dd1a52d1be6cbd2e9a982088d23b402d19afb89e8e312314212dfce13925407f6cad41581ed46c36f1b0dfed00b77bd3231ca71fa398135d2d09433a670eb90068795480fc34ffbe3a5966116e8bdb95a30a1cf154500cd28d84482b9a1e682f8cc790775dc03a9205d0761c95945b41ceb921368dc0aec1bac599cf1ece38a348bee961ba78aa161e09da0408de8301d09f8956a321d1c95a7fd32d84dde872a30d308f5ec59b906316a37a7b3c15732ce894457a7865b8c87bbd250c2fedb5e438ef2c60a2acdcb781865011c191f7a9df9ad86e8ac82d47cd6519c53a6bc78c87c692f97b2e1fb5d64159f3f6d52366195130b6a9452e7e2203131f9774c04898c433abf130885c6791e1a85f43d0b28277654ad55e8f0b7e3e68403d1e7cb8cf7c88b803e4d220d3f8e0b21a023a7694e0ea852b1f1da171d71699ef73c64fa2d237f8aba0d1cc1e8c72b955210d6e33d77d77bec1555ce7e6601f4797abee0b5079c206719428fad198bdf6e502b5ef7c5b3e5776febae629b000c5a2946dd7ade07984cfd6a70cfe2473f295b035b02b2fdc6ce063a148e10cc82c45dfce77d3cc5d852c08e718d09ddff46f3e0eb91afe532a8ec9349eff81989f1dc636db2d3ddb825b29fe9419dd57d22bd535a27a83045c740d6ea8cacec2b2ee4d381b1b8134b539fb5a76f3c49bdf1978fc899c61be8a3269db116d2166dcd280e2bf2a7826f0a411ff74fa2a79882eac319cd4b37ace355ab9657f3d24d5fbcba711adbb00ac23d10f806ff68d790fc5253857f1fb5b7d204da1fe8674609108c98a74c131b212163fb58afadc53526541b24204ac0b37f451f91fc72611bc3d66de2f41a4bc21ace07c88eca8c0d2ea0768722acab748e568775c39bb3044750bed2c891663adeff9f75a4cab31ff4330cd83601753e55616f040ae52d37d4e00698dcc220241aa72009238df04f6063ecde8b0268283a966415e38e92ff3d061fcc985f0562ee197dd57ed3bbe66846e9cd18d144027aa8f7e42d6ceda093835d3c94dd4f29beeb649f1fb66ad1b78cb21a2f15873080b8bcf6ff5fff77750c9819a2fd232242fa274d0b4dbe366bda72f64d2623cdb7f017f8f8c3a827054d149d245b097680f8486799cde9f963f6fca1d394fe09c5050cdb1952ae61a670a31e459dd07a2664a00806f3dbf17777e51e4587171026a5ab70255b0ff9825e8b4c20ebf757109f93d7ee3cdaf59e411f2f3929693ae775213dafa7e5ab3f97e6751891ed8a4d4bf33b84c33e4d3dac90a3f47ec0ad4fa763b584090245d5aec13a71cfac4dc02d2f782bbb80fea72332dfa60499010aab71c7989a713d240c5d0ac0a22397022bf61596b374621b022336f1b7f065609525d1f09cd75e9c10c5ef01fe53c2e74185d5058633ddbfc646d46cf57cb0bafc443f0b47533936360bca57c1f16a60852bc6c232441dcb0a44d66115c19b64ebcce5eba92c202a7c010c4f2afe9b2be7e75061f61f6f5b494e7a6e05c799fd84e00a3a227136a9d5e39130989deeaaca026750371e02104c8aeb6845f763b72fba2da7b0c4f6b0368089000000007cca556c5c83c02eae6c1124466bc34c67f384319b3e836b38ff39b2085e92c427b903f38365944076011bf8cc92624cc745f9169332dc2ef536eb2bdeb969175fcb6b4836d08573881071e41d3ef6f447da90e736560ed8b6e86849672b9f406e088d5f36d98823b24e5e85ec47ca959e5be056532bab05793996ab7ecdd2c0addf3ae2cb4dcdf7aaed05fb5f3c5ec931b9a28deeedf8a83fe2f7a017afb5a6d690595bbb938e0d0f81133a618d3a2c5be9435865424440c9af111f515b47f5e3bad4b75df2d49790d8cf473ccaa67ea8ac32b10d278bba560a725da668e9bf92157ad29221ad560fc94a08d6ce432bf108c7c1428552f1c52d2a48e8128f32b49498c019f07e9131eda6351fba6f38c1fc7db54a52ca7a99214361942e84845e54e672b9a345d97fdbd187816c4c04d4a3708b7abb17dfd6dd937e3a7eb84a6c6ab5cf41168bd2317a72b89f356e5cceb2e092eabe875ba159d1a68cd6bfd4cf8e91051e364b2525578adb137dc2dce3363f35ced266269d400e23b14ee870f95f8989e01ad4cb8a46fc27f427ba7084503d1dc293e5ebc03b043d173f4d28943af5eddd51049b17424447f2269d4b6974bfbc07f8878710c22b1654507635bb6e97deee5c4cca470440e8878e76a6aac4b4bd96ed2c7370e287671250af2787290b467d0e4a44a2f4f78f85abadb916aeab948d34fb2ba2fe6c5ae8d39eda4625f84590d3a20894e314f634f505c364acdfa071739b4719549c62c43f07f2014fb43b1974058a0068139b49db64bd2015007df3673400ae5f93a72f0a84ae9dcd764e5a3acb2e6e295d4eaa53527b57435d6d2d4d90d9a1c92f104841c8b729d65dc744759da81c3e513d23c8d013e5482248b3acfa37cb541e93183cdacc2f4b52f5dcbd1c9f202c3b20e3c418a8c1525d90d70bb2f00080c45fb32e5fcbb5b9c25c6b153e4b3c143818e2ab14c5f7897f4f02106c49483e26fb7d68280eb6caf3688c1c9cc63856e83eef09a36c34957ad5931af6829c834741208d534f242e8b0401ff20d5c418b6894fde5539786146868747f1e8b987396d24d3279bb155d99fa8c20b91a7bd8ec0555752a89b37110820768893992760f049cf8b5f102913a52fa7c8e3323750282e5543bdb63cd95b49488023d43cabef9edb0f3ce038605b1d70c93aefb6578b164de11c4512e85c08386a1c9ab19e4a108bdc5e64494c4bd09ec24e1f29fca0c104b3707f13d7def305c98887a342830e91351bf16e91ffa01d0ad4a19d019f0773caf939cee6723e3e030125cb2ba59bd1817bca0f267404caa6ebf52c0f4cae79fe589fd43d13ded825c1301f85275208674c20004e8a9c04328f3329cf6447af5df054918be63f3429a0d4123c880435e664aaf6a49ae14ffe41df4d18a7983f711e3f561b698b9b1ea239d127b66893066fba5842bc944ea05d09a1d2512fcddea774ceb7c064bb4cb754fe4d723a4d004d007b0970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d6279030572757374631d312e36332e30202834623931613665613720323032322d30382d3038290677616c72757306302e31392e300c7761736d2d62696e6467656e12302e322e3833202865626136393166333829'; diff --git a/packages/wasm/src/helper.ts b/packages/wasm/src/helper.ts new file mode 100644 index 0000000..82a073c --- /dev/null +++ b/packages/wasm/src/helper.ts @@ -0,0 +1,68 @@ +// Copyright 2021-2022 zcloak authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { WasmInstance } from './types'; + +import { hexToU8a } from '@polkadot/util'; + +import * as asm from './asm'; +import { bytes } from './bytes'; + +export let wasm: WasmInstance; +let cachedBigUint64 = new BigUint64Array(); +let cachedInt32 = new Int32Array(); + +export async function initWasm(onlyAsm = false) { + if (wasm) return; + + if (onlyAsm) { + wasm = asm as unknown as WasmInstance; + } else { + try { + const source = await WebAssembly.instantiate(hexToU8a(bytes)); + + wasm = source.instance.exports as unknown as WasmInstance; + } catch { + wasm = asm as unknown as WasmInstance; + } + } +} + +function getUint64(): BigUint64Array { + if (cachedBigUint64.byteLength === 0) { + cachedBigUint64 = new BigUint64Array(wasm.memory.buffer); + } + + return cachedBigUint64; +} + +function getInt32(): Int32Array { + if (cachedInt32.byteLength === 0) { + cachedInt32 = new Int32Array(wasm.memory.buffer); + } + + return cachedInt32; +} + +function getU64a(ptr: number, len: number): BigUint64Array { + return getUint64().subarray(ptr / 8, ptr / 8 + len); +} + +export function allocU64a(value: BigUint64Array): [number, number, number] { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr = wasm.__wbindgen_malloc(value.length * 8); + + getUint64().set(value, ptr / 8); + + return [retptr, ptr, value.length]; +} + +export function resultU64a(retptr: number): BigUint64Array { + const r0 = getInt32()[retptr / 4 + 0]; + const r1 = getInt32()[retptr / 4 + 1]; + const v1 = getU64a(r0, r1).slice(); + + wasm.__wbindgen_free(r0, r1 * 8); + + return v1; +} diff --git a/packages/wasm/src/index.spec.ts b/packages/wasm/src/index.spec.ts new file mode 100644 index 0000000..1b70d80 --- /dev/null +++ b/packages/wasm/src/index.spec.ts @@ -0,0 +1,12 @@ +// Copyright 2021-2022 zcloak authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import { rescueHash } from './bundle'; +import { initWasm } from './helper'; + +describe('wasm', (): void => { + it('initWasm', async (): Promise => { + await initWasm(); + console.log(rescueHash(new BigUint64Array([1n, 1n, 1n, 1n, 1n, 1n, 1n, 1n]))); + }); +}); diff --git a/packages/wasm/src/index.ts b/packages/wasm/src/index.ts index d39ba54..3d712d0 100644 --- a/packages/wasm/src/index.ts +++ b/packages/wasm/src/index.ts @@ -1,13 +1,6 @@ // Copyright 2021-2022 zcloak authors & contributors // SPDX-License-Identifier: Apache-2.0 -import { hexToU8a } from '@polkadot/util'; - -import { bytes } from './bytes'; -import init from './wasm'; - -export function initWasm() { - return init(hexToU8a(bytes)); -} - export * from './bundle'; + +export { initWasm } from './helper'; diff --git a/packages/wasm/src/types.ts b/packages/wasm/src/types.ts new file mode 100644 index 0000000..181345e --- /dev/null +++ b/packages/wasm/src/types.ts @@ -0,0 +1,12 @@ +// Copyright 2021-2022 zcloak authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +export interface WasmInstance { + memory: WebAssembly.Memory; + + rescue_hash(a: number, b: number, c: number): void; + + __wbindgen_add_to_stack_pointer(a: number): number; + __wbindgen_malloc(a: number): number; + __wbindgen_free(a: number, b: number): void; +} diff --git a/packages/wasm/src/wasm.d.ts b/packages/wasm/src/wasm.d.ts deleted file mode 100644 index 9fb4a4d..0000000 --- a/packages/wasm/src/wasm.d.ts +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2021-2022 zcloak authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -/* tslint:disable */ -/* eslint-disable */ -/** -* @param {BigUint64Array} values -* @returns {BigUint64Array} -*/ -export function rescue_hash(values: BigUint64Array): BigUint64Array; -/** -* Executes the `rescue` fucntion and returns the rescue hash result. -* IF the input is [A,B,C,D] -- [a_0,a_1,a_2,a_3, b_0,b_1,b_2,b_3, c_0,c_1,c_2,c_3, d_0,d_1,d_2,d_3] -* The input in the VM should be : [d_3,d_2,d_1,d_0, c_3,c_2,c_1,c_0, b_3,b_2,b_1,b_0, a_3,a_2,a_1,a_0,], in the VM the rescue sequense should be : -* Hash(A,B,(C,D)) -* -* * `inputs` specifies the rescue input, the inputs should be a u64 array string, like: "12331231203,123949053121,39018241409...." -* * Return the hash result Vec -* @param {string} values -* @returns {BigUint64Array} -*/ -export function u64_string_rescue(values: string): BigUint64Array; -/** -* Executes the `rescue` fucntion and returns the rescue hash result. -* The inputs should be a u64vec(BigUint64Array) -* @param {BigUint64Array} values -* @returns {BigUint64Array} -*/ -export function u64a_rescue(values: BigUint64Array): BigUint64Array; -/** -* convert a [u64;4] hash result(BigUint64Array) to [u8;32](Uint8Array) -* @param {BigUint64Array} values -* @returns {Uint8Array} -*/ -export function u64a_to_u8a(values: BigUint64Array): Uint8Array; -/** -* convert a [u8;32](Uint8Array) hash result to [u64;4](BigUint64Array) -* @param {Uint8Array} values -* @returns {BigUint64Array} -*/ -export function u8a_to_u64a(values: Uint8Array): BigUint64Array; -/** -* convert a [u64;4] string hash result to [u8;32](Uint8Array) -* @param {string} values -* @returns {Uint8Array} -*/ -export function string_to_u8array(values: string): Uint8Array; -/** -* convert a [u8;32](Uint8Array) string hash result to [u64;4](BigUint64Array) -* @param {string} values -* @returns {BigUint64Array} -*/ -export function string_to_u64array(values: string): BigUint64Array; -/** -*/ -export function init_panic_hook(): void; -/** -* Handler for `console.log` invocations. -* -* If a test is currently running it takes the `args` array and stringifies -* it and appends it to the current output of the test. Otherwise it passes -* the arguments to the original `console.log` function, psased as -* `original`. -* @param {Array} args -*/ -export function __wbgtest_console_log(args: Array): void; -/** -* Handler for `console.debug` invocations. See above. -* @param {Array} args -*/ -export function __wbgtest_console_debug(args: Array): void; -/** -* Handler for `console.info` invocations. See above. -* @param {Array} args -*/ -export function __wbgtest_console_info(args: Array): void; -/** -* Handler for `console.warn` invocations. See above. -* @param {Array} args -*/ -export function __wbgtest_console_warn(args: Array): void; -/** -* Handler for `console.error` invocations. See above. -* @param {Array} args -*/ -export function __wbgtest_console_error(args: Array): void; -/** -* Runtime test harness support instantiated in JS. -* -* The node.js entry script instantiates a `Context` here which is used to -* drive test execution. -*/ -export class WasmBindgenTestContext { - free(): void; -/** -* Creates a new context ready to run tests. -* -* A `Context` is the main structure through which test execution is -* coordinated, and this will collect output and results for all executed -* tests. -*/ - constructor(); -/** -* Inform this context about runtime arguments passed to the test -* harness. -* -* Eventually this will be used to support flags, but for now it's just -* used to support test filters. -* @param {any[]} args -*/ - args(args: any[]): void; -/** -* Executes a list of tests, returning a promise representing their -* eventual completion. -* -* This is the main entry point for executing tests. All the tests passed -* in are the JS `Function` object that was plucked off the -* `WebAssembly.Instance` exports list. -* -* The promise returned resolves to either `true` if all tests passed or -* `false` if at least one test failed. -* @param {any[]} tests -* @returns {Promise} -*/ - run(tests: any[]): Promise; -} - -export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; - -export interface InitOutput { - readonly memory: WebAssembly.Memory; - readonly rescue_hash: (a: number, b: number, c: number) => void; - readonly u64_string_rescue: (a: number, b: number, c: number) => void; - readonly u64a_rescue: (a: number, b: number, c: number) => void; - readonly u64a_to_u8a: (a: number, b: number, c: number) => void; - readonly u8a_to_u64a: (a: number, b: number, c: number) => void; - readonly string_to_u8array: (a: number, b: number, c: number) => void; - readonly string_to_u64array: (a: number, b: number, c: number) => void; - readonly init_panic_hook: () => void; - readonly __wbg_wasmbindgentestcontext_free: (a: number) => void; - readonly wasmbindgentestcontext_new: () => number; - readonly wasmbindgentestcontext_args: (a: number, b: number, c: number) => void; - readonly wasmbindgentestcontext_run: (a: number, b: number, c: number) => number; - readonly __wbgtest_console_log: (a: number) => void; - readonly __wbgtest_console_debug: (a: number) => void; - readonly __wbgtest_console_info: (a: number) => void; - readonly __wbgtest_console_warn: (a: number) => void; - readonly __wbgtest_console_error: (a: number) => void; - readonly __wbindgen_malloc: (a: number) => number; - readonly __wbindgen_realloc: (a: number, b: number, c: number) => number; - readonly __wbindgen_export_2: WebAssembly.Table; - readonly _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hde1490cf0cbfa00e: (a: number, b: number, c: number) => void; - readonly __wbindgen_add_to_stack_pointer: (a: number) => number; - readonly __wbindgen_free: (a: number, b: number) => void; - readonly __wbindgen_exn_store: (a: number) => void; - readonly wasm_bindgen__convert__closures__invoke2_mut__hf339f71b2bb7130a: (a: number, b: number, c: number, d: number) => void; -} - -export type SyncInitInput = BufferSource | WebAssembly.Module; -/** -* Instantiates the given `module`, which can either be bytes or -* a precompiled `WebAssembly.Module`. -* -* @param {SyncInitInput} module -* -* @returns {InitOutput} -*/ -export function initSync(module: SyncInitInput): InitOutput; - -/** -* If `module_or_path` is {RequestInfo} or {URL}, makes a request and -* for everything else, calls `WebAssembly.instantiate` directly. -* -* @param {InitInput | Promise} module_or_path -* -* @returns {Promise} -*/ -export default function init (module_or_path?: InitInput | Promise): Promise; - diff --git a/packages/wasm/src/wasm.js b/packages/wasm/src/wasm.js deleted file mode 100644 index 689e2c6..0000000 --- a/packages/wasm/src/wasm.js +++ /dev/null @@ -1,757 +0,0 @@ -// Copyright 2021-2022 zcloak authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -/* tslint:disable */ -/* eslint-disable */ - -let wasm; - -const heap = new Array(32).fill(undefined); - -heap.push(undefined, null, true, false); - -function getObject(idx) { return heap[idx]; } - -let heap_next = heap.length; - -function dropObject(idx) { - if (idx < 36) return; - heap[idx] = heap_next; - heap_next = idx; -} - -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} - -let WASM_VECTOR_LEN = 0; - -let cachedUint8Memory0 = new Uint8Array(); - -function getUint8Memory0() { - if (cachedUint8Memory0.byteLength === 0) { - cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachedUint8Memory0; -} - -const cachedTextEncoder = new TextEncoder('utf-8'); - -const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' - ? function (arg, view) { - return cachedTextEncoder.encodeInto(arg, view); -} - : function (arg, view) { - const buf = cachedTextEncoder.encode(arg); - view.set(buf); - return { - read: arg.length, - written: buf.length - }; -}); - -function passStringToWasm0(arg, malloc, realloc) { - - if (realloc === undefined) { - const buf = cachedTextEncoder.encode(arg); - const ptr = malloc(buf.length); - getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); - WASM_VECTOR_LEN = buf.length; - return ptr; - } - - let len = arg.length; - let ptr = malloc(len); - - const mem = getUint8Memory0(); - - let offset = 0; - - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7F) break; - mem[ptr + offset] = code; - } - - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, len = offset + arg.length * 3); - const view = getUint8Memory0().subarray(ptr + offset, ptr + len); - const ret = encodeString(arg, view); - - offset += ret.written; - } - - WASM_VECTOR_LEN = offset; - return ptr; -} - -function isLikeNone(x) { - return x === undefined || x === null; -} - -let cachedInt32Memory0 = new Int32Array(); - -function getInt32Memory0() { - if (cachedInt32Memory0.byteLength === 0) { - cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachedInt32Memory0; -} - -const cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); - -cachedTextDecoder.decode(); - -function getStringFromWasm0(ptr, len) { - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); -} - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -function makeMutClosure(arg0, arg1, dtor, f) { - const state = { a: arg0, b: arg1, cnt: 1, dtor }; - const real = (...args) => { - // First up with a closure we increment the internal reference - // count. This ensures that the Rust closure environment won't - // be deallocated while we're invoking it. - state.cnt++; - const a = state.a; - state.a = 0; - try { - return f(a, state.b, ...args); - } finally { - if (--state.cnt === 0) { - wasm.__wbindgen_export_2.get(state.dtor)(a, state.b); - - } else { - state.a = a; - } - } - }; - real.original = state; - - return real; -} -function __wbg_adapter_18(arg0, arg1, arg2) { - wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hde1490cf0cbfa00e(arg0, arg1, addHeapObject(arg2)); -} - -let cachedBigUint64Memory0 = new BigUint64Array(); - -function getBigUint64Memory0() { - if (cachedBigUint64Memory0.byteLength === 0) { - cachedBigUint64Memory0 = new BigUint64Array(wasm.memory.buffer); - } - return cachedBigUint64Memory0; -} - -function passArray64ToWasm0(arg, malloc) { - const ptr = malloc(arg.length * 8); - getBigUint64Memory0().set(arg, ptr / 8); - WASM_VECTOR_LEN = arg.length; - return ptr; -} - -function getArrayU64FromWasm0(ptr, len) { - return getBigUint64Memory0().subarray(ptr / 8, ptr / 8 + len); -} -/** -* @param {BigUint64Array} values -* @returns {BigUint64Array} -*/ -export function rescue_hash(values) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray64ToWasm0(values, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - wasm.rescue_hash(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var v1 = getArrayU64FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 8); - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } -} - -function handleError(f, args) { - try { - return f.apply(this, args); - } catch (e) { - wasm.__wbindgen_exn_store(addHeapObject(e)); - } -} -function __wbg_adapter_36(arg0, arg1, arg2, arg3) { - wasm.wasm_bindgen__convert__closures__invoke2_mut__hf339f71b2bb7130a(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3)); -} - -/** -* Executes the `rescue` fucntion and returns the rescue hash result. -* IF the input is [A,B,C,D] -- [a_0,a_1,a_2,a_3, b_0,b_1,b_2,b_3, c_0,c_1,c_2,c_3, d_0,d_1,d_2,d_3] -* The input in the VM should be : [d_3,d_2,d_1,d_0, c_3,c_2,c_1,c_0, b_3,b_2,b_1,b_0, a_3,a_2,a_1,a_0,], in the VM the rescue sequense should be : -* Hash(A,B,(C,D)) -* -* * `inputs` specifies the rescue input, the inputs should be a u64 array string, like: "12331231203,123949053121,39018241409...." -* * Return the hash result Vec -* @param {string} values -* @returns {BigUint64Array} -*/ -export function u64_string_rescue(values) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0(values, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - wasm.u64_string_rescue(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var v1 = getArrayU64FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 8); - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } -} - -/** -* Executes the `rescue` fucntion and returns the rescue hash result. -* The inputs should be a u64vec(BigUint64Array) -* @param {BigUint64Array} values -* @returns {BigUint64Array} -*/ -export function u64a_rescue(values) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray64ToWasm0(values, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - wasm.u64a_rescue(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var v1 = getArrayU64FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 8); - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } -} - -function getArrayU8FromWasm0(ptr, len) { - return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); -} -/** -* convert a [u64;4] hash result(BigUint64Array) to [u8;32](Uint8Array) -* @param {BigUint64Array} values -* @returns {Uint8Array} -*/ -export function u64a_to_u8a(values) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray64ToWasm0(values, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - wasm.u64a_to_u8a(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var v1 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1); - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } -} - -function passArray8ToWasm0(arg, malloc) { - const ptr = malloc(arg.length * 1); - getUint8Memory0().set(arg, ptr / 1); - WASM_VECTOR_LEN = arg.length; - return ptr; -} -/** -* convert a [u8;32](Uint8Array) hash result to [u64;4](BigUint64Array) -* @param {Uint8Array} values -* @returns {BigUint64Array} -*/ -export function u8a_to_u64a(values) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray8ToWasm0(values, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - wasm.u8a_to_u64a(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var v1 = getArrayU64FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 8); - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } -} - -/** -* convert a [u64;4] string hash result to [u8;32](Uint8Array) -* @param {string} values -* @returns {Uint8Array} -*/ -export function string_to_u8array(values) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0(values, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - wasm.string_to_u8array(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var v1 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1); - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } -} - -/** -* convert a [u8;32](Uint8Array) string hash result to [u64;4](BigUint64Array) -* @param {string} values -* @returns {BigUint64Array} -*/ -export function string_to_u64array(values) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0(values, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - wasm.string_to_u64array(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var v1 = getArrayU64FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 8); - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } -} - -/** -*/ -export function init_panic_hook() { - wasm.init_panic_hook(); -} - -let cachedUint32Memory0 = new Uint32Array(); - -function getUint32Memory0() { - if (cachedUint32Memory0.byteLength === 0) { - cachedUint32Memory0 = new Uint32Array(wasm.memory.buffer); - } - return cachedUint32Memory0; -} - -function passArrayJsValueToWasm0(array, malloc) { - const ptr = malloc(array.length * 4); - const mem = getUint32Memory0(); - for (let i = 0; i < array.length; i++) { - mem[ptr / 4 + i] = addHeapObject(array[i]); - } - WASM_VECTOR_LEN = array.length; - return ptr; -} - -let stack_pointer = 32; - -function addBorrowedObject(obj) { - if (stack_pointer == 1) throw new Error('out of js stack'); - heap[--stack_pointer] = obj; - return stack_pointer; -} -/** -* Handler for `console.log` invocations. -* -* If a test is currently running it takes the `args` array and stringifies -* it and appends it to the current output of the test. Otherwise it passes -* the arguments to the original `console.log` function, psased as -* `original`. -* @param {Array} args -*/ -export function __wbgtest_console_log(args) { - try { - wasm.__wbgtest_console_log(addBorrowedObject(args)); - } finally { - heap[stack_pointer++] = undefined; - } -} - -/** -* Handler for `console.debug` invocations. See above. -* @param {Array} args -*/ -export function __wbgtest_console_debug(args) { - try { - wasm.__wbgtest_console_debug(addBorrowedObject(args)); - } finally { - heap[stack_pointer++] = undefined; - } -} - -/** -* Handler for `console.info` invocations. See above. -* @param {Array} args -*/ -export function __wbgtest_console_info(args) { - try { - wasm.__wbgtest_console_info(addBorrowedObject(args)); - } finally { - heap[stack_pointer++] = undefined; - } -} - -/** -* Handler for `console.warn` invocations. See above. -* @param {Array} args -*/ -export function __wbgtest_console_warn(args) { - try { - wasm.__wbgtest_console_warn(addBorrowedObject(args)); - } finally { - heap[stack_pointer++] = undefined; - } -} - -/** -* Handler for `console.error` invocations. See above. -* @param {Array} args -*/ -export function __wbgtest_console_error(args) { - try { - wasm.__wbgtest_console_error(addBorrowedObject(args)); - } finally { - heap[stack_pointer++] = undefined; - } -} - -/** -* Runtime test harness support instantiated in JS. -* -* The node.js entry script instantiates a `Context` here which is used to -* drive test execution. -*/ -export class WasmBindgenTestContext { - - static __wrap(ptr) { - const obj = Object.create(WasmBindgenTestContext.prototype); - obj.ptr = ptr; - - return obj; - } - - __destroy_into_raw() { - const ptr = this.ptr; - this.ptr = 0; - - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_wasmbindgentestcontext_free(ptr); - } - /** - * Creates a new context ready to run tests. - * - * A `Context` is the main structure through which test execution is - * coordinated, and this will collect output and results for all executed - * tests. - */ - constructor() { - const ret = wasm.wasmbindgentestcontext_new(); - return WasmBindgenTestContext.__wrap(ret); - } - /** - * Inform this context about runtime arguments passed to the test - * harness. - * - * Eventually this will be used to support flags, but for now it's just - * used to support test filters. - * @param {any[]} args - */ - args(args) { - const ptr0 = passArrayJsValueToWasm0(args, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - wasm.wasmbindgentestcontext_args(this.ptr, ptr0, len0); - } - /** - * Executes a list of tests, returning a promise representing their - * eventual completion. - * - * This is the main entry point for executing tests. All the tests passed - * in are the JS `Function` object that was plucked off the - * `WebAssembly.Instance` exports list. - * - * The promise returned resolves to either `true` if all tests passed or - * `false` if at least one test failed. - * @param {any[]} tests - * @returns {Promise} - */ - run(tests) { - const ptr0 = passArrayJsValueToWasm0(tests, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.wasmbindgentestcontext_run(this.ptr, ptr0, len0); - return takeObject(ret); - } -} - -async function load(module, imports) { - if (typeof Response === 'function' && module instanceof Response) { - if (typeof WebAssembly.instantiateStreaming === 'function') { - try { - return await WebAssembly.instantiateStreaming(module, imports); - - } catch (e) { - if (module.headers.get('Content-Type') != 'application/wasm') { - console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); - - } else { - throw e; - } - } - } - - const bytes = await module.arrayBuffer(); - return await WebAssembly.instantiate(bytes, imports); - - } else { - const instance = await WebAssembly.instantiate(module, imports); - - if (instance instanceof WebAssembly.Instance) { - return { instance, module }; - - } else { - return instance; - } - } -} - -function getImports() { - const imports = {}; - imports.wbg = {}; - imports.wbg.__wbg_new_abda76e883ba8a5f = function() { - const ret = new Error(); - return addHeapObject(ret); - }; - imports.wbg.__wbg_stack_658279fe44541cf6 = function(arg0, arg1) { - const ret = getObject(arg1).stack; - const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len0; - getInt32Memory0()[arg0 / 4 + 0] = ptr0; - }; - imports.wbg.__wbg_error_f851667af71bcfc6 = function(arg0, arg1) { - try { - console.error(getStringFromWasm0(arg0, arg1)); - } finally { - wasm.__wbindgen_free(arg0, arg1); - } - }; - imports.wbg.__wbindgen_object_drop_ref = function(arg0) { - takeObject(arg0); - }; - imports.wbg.__wbindgen_string_get = function(arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof(obj) === 'string' ? obj : undefined; - var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len0; - getInt32Memory0()[arg0 / 4 + 0] = ptr0; - }; - imports.wbg.__wbg_self_c4a869f7521d7b18 = function() { return handleError(function () { - const ret = self.self; - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_window_f76bff89ab6e4c74 = function() { return handleError(function () { - const ret = window.window; - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_globalThis_71824672ea2add7c = function() { return handleError(function () { - const ret = globalThis.globalThis; - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_global_f78549112bdb0090 = function() { return handleError(function () { - const ret = global.global; - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbindgen_is_undefined = function(arg0) { - const ret = getObject(arg0) === undefined; - return ret; - }; - imports.wbg.__wbg_newnoargs_4cbce0ba8003ced4 = function(arg0, arg1) { - const ret = new Function(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_call_875d4ea9abbec88f = function() { return handleError(function (arg0, arg1) { - const ret = getObject(arg0).call(getObject(arg1)); - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_call_186b2be460652f8c = function() { return handleError(function (arg0, arg1, arg2) { - const ret = getObject(arg0).call(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbindgen_throw = function(arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); - }; - imports.wbg.__wbindgen_cb_drop = function(arg0) { - const obj = takeObject(arg0).original; - if (obj.cnt-- == 1) { - obj.a = 0; - return true; - } - const ret = false; - return ret; - }; - imports.wbg.__wbg_then_855ae9c8e7f371c6 = function(arg0, arg1) { - const ret = getObject(arg0).then(getObject(arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_resolve_10d915c265ec2325 = function(arg0) { - const ret = Promise.resolve(getObject(arg0)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_static_accessor_document_3adb3d7d5d798175 = function() { - const ret = document; - return addHeapObject(ret); - }; - imports.wbg.__wbg_textcontent_6009636e039cf5d4 = function(arg0, arg1) { - const ret = getObject(arg1).textContent; - const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len0; - getInt32Memory0()[arg0 / 4 + 0] = ptr0; - }; - imports.wbg.__wbg_settextcontent_2e1812008438d4bb = function(arg0, arg1, arg2) { - getObject(arg0).textContent = getStringFromWasm0(arg1, arg2); - }; - imports.wbg.__wbg_name_1147558b3ef654e1 = function(arg0) { - const ret = getObject(arg0).name; - return addHeapObject(ret); - }; - imports.wbg.__wbg_message_af8769dad013dbb7 = function(arg0) { - const ret = getObject(arg0).message; - return addHeapObject(ret); - }; - imports.wbg.__wbg_stack_a4173149496d3036 = function(arg0) { - const ret = getObject(arg0).stack; - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_object_clone_ref = function(arg0) { - const ret = getObject(arg0); - return addHeapObject(ret); - }; - imports.wbg.__wbg_self_e9b8e25e15c695fb = function(arg0) { - const ret = getObject(arg0).self; - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_jsval_eq = function(arg0, arg1) { - const ret = getObject(arg0) === getObject(arg1); - return ret; - }; - imports.wbg.__wbg_log_63498759190ee7ca = function(arg0, arg1) { - console.log(getStringFromWasm0(arg0, arg1)); - }; - imports.wbg.__wbg_stack_f851f0b6cbdcf1d3 = function(arg0, arg1) { - const ret = getObject(arg1).stack; - const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len0; - getInt32Memory0()[arg0 / 4 + 0] = ptr0; - }; - imports.wbg.__wbg_getElementById_1899b6ce36cb092d = function(arg0, arg1, arg2) { - const ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2)); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_number_new = function(arg0) { - const ret = arg0; - return addHeapObject(ret); - }; - imports.wbg.__wbg_new_7359b2fa5adbd2a3 = function(arg0, arg1) { - try { - var state0 = {a: arg0, b: arg1}; - var cb0 = (arg0, arg1) => { - const a = state0.a; - state0.a = 0; - try { - return __wbg_adapter_36(a, state0.b, arg0, arg1); - } finally { - state0.a = a; - } - }; - const ret = new Promise(cb0); - return addHeapObject(ret); - } finally { - state0.a = state0.b = 0; - } - }; - imports.wbg.__wbindgen_closure_wrapper1076 = function(arg0, arg1, arg2) { - const ret = makeMutClosure(arg0, arg1, 32, __wbg_adapter_18); - return addHeapObject(ret); - }; - - return imports; -} - -function initMemory(imports, maybe_memory) { - -} - -function finalizeInit(instance, module) { - wasm = instance.exports; - init.__wbindgen_wasm_module = module; - cachedBigUint64Memory0 = new BigUint64Array(); - cachedInt32Memory0 = new Int32Array(); - cachedUint32Memory0 = new Uint32Array(); - cachedUint8Memory0 = new Uint8Array(); - - - return wasm; -} - -function initSync(module) { - const imports = getImports(); - - initMemory(imports); - - if (!(module instanceof WebAssembly.Module)) { - module = new WebAssembly.Module(module); - } - - const instance = new WebAssembly.Instance(module, imports); - - return finalizeInit(instance, module); -} - -async function init(input) { - if (typeof input === 'undefined') { - throw new Error('input is undefined') - } - const imports = getImports(); - - if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { - input = fetch(input); - } - - initMemory(imports); - - const { instance, module } = await load(await input, imports); - - return finalizeInit(instance, module); -} - -export { initSync } -export default init; - diff --git a/scripts/build-wasm.js b/scripts/build-wasm.js index 6bbad0a..6ec9b64 100755 --- a/scripts/build-wasm.js +++ b/scripts/build-wasm.js @@ -3,7 +3,7 @@ import { u8aToHex } from '@polkadot/util'; import { execSync } from 'child_process'; -import fs from 'fs'; +import fs from 'fs-extra'; const COPYRIGHT = `// Copyright 2021-2022 zcloak authors & contributors // SPDX-License-Identifier: Apache-2.0 @@ -11,9 +11,29 @@ const COPYRIGHT = `// Copyright 2021-2022 zcloak authors & contributors process.chdir('packages/wasm'); -execSync('wasm-pack build --target web', { stdio: 'inherit' }); +console.log('### Build Rust sources'); +execSync('cargo build --target wasm32-unknown-unknown --release', { stdio: 'inherit' }); -const wasm = fs.readFileSync('pkg/wasm_bg.wasm'); +console.log('### Converting to WASM'); +execSync( + '../../bindgen/wasm-bindgen target/wasm32-unknown-unknown/release/wasm.wasm --out-dir build-wasm --target web', + { stdio: 'inherit' } +); + +// optimise +console.log('Optimising WASM output'); +execSync('../../binaryen/bin/wasm-opt build-wasm/wasm_bg.wasm -Oz -o build-wasm/wasm_opt.wasm', { + stdio: 'inherit' +}); + +// build asmjs version from the input (optimised) WASM +console.log('### Building asm.js version'); +fs.createFileSync('build-asm/asm.js'); +execSync('../../binaryen/bin/wasm2js -Oz --output build-asm/asm.js build-wasm/wasm_opt.wasm', { + stdio: 'inherit' +}); + +const wasm = fs.readFileSync('build-wasm/wasm_opt.wasm'); const bytes = Uint8Array.from(wasm); @@ -22,34 +42,23 @@ const hex = u8aToHex(bytes); console.log('Write wasm bytes'); fs.writeFileSync( 'src/bytes.js', - `// Copyright 2021-2022 zcloak authors & contributors -// SPDX-License-Identifier: Apache-2.0 - + `${COPYRIGHT} export const bytes = '${hex}'; ` ); -const wasmTs = fs.readFileSync('pkg/wasm.d.ts', { encoding: 'utf-8' }).toString(); -const wasmJs = fs.readFileSync('pkg/wasm.js', { encoding: 'utf-8' }).toString(); - +console.log('Write asm file'); fs.writeFileSync( - 'src/wasm.d.ts', - `${COPYRIGHT} -${wasmTs} -` -); -fs.writeFileSync( - 'src/wasm.js', + 'src/asm.js', `${COPYRIGHT} /* tslint:disable */ /* eslint-disable */ -${wasmJs} + +${fs.readFileSync('build-asm/asm.js', 'utf-8').toString()} ` ); -fs.rmdirSync('pkg', { recursive: true }); - process.chdir('../..'); execSync('yarn zcloak-dev-run-lint', { stdio: 'inherit' }); diff --git a/scripts/install-build-deps.js b/scripts/install-build-deps.js new file mode 100755 index 0000000..bebbc35 --- /dev/null +++ b/scripts/install-build-deps.js @@ -0,0 +1,44 @@ +// Copyright 2021-2022 zcloak authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import { execSync } from 'child_process'; +import fs from 'fs-extra'; + +const BINDGEN_REPO = 'https://github.com/rustwasm/wasm-bindgen'; +const BINDGEN_VER = '0.2.83'; + +const BINARYEN_REPO = 'https://github.com/WebAssembly/binaryen'; +const BINARYEN_VER = 'version_110'; + +let bindgen_zip; +let binaryen_zip; +if (process.platform === 'darwin') { + console.log('### Detected Mac'); + bindgen_zip = `wasm-bindgen-${BINDGEN_VER}-x86_64-apple-darwin`; + binaryen_zip = `binaryen-${BINARYEN_VER}-x86_64-macos`; +} else if (process.platform === 'linux') { + bindgen_zip = `wasm-bindgen-${BINDGEN_VER}-x86_64-unknown-linux-musl`; + binaryen_zip = `binaryen-${BINARYEN_VER}-x86_64-linux`; + console.log('### Detected Linux'); +} else { + console.log(`*** Unknown platform ${process.platform}, unable to install wasm helper binaries`); + process.exit(-1); +} + +if (!fs.existsSync('binaryen')) { + console.log('### Downloading binaryen'); + execSync( + `curl -L ${BINARYEN_REPO}/releases/download/${BINARYEN_VER}/${binaryen_zip}.tar.gz | tar xz`, + { stdio: 'inherit' } + ); + fs.moveSync(`binaryen-${BINARYEN_VER}`, 'binaryen'); +} + +if (!fs.existsSync('bindgen')) { + console.log('### Downloading bindgen'); + execSync( + `curl -L ${BINDGEN_REPO}/releases/download/${BINDGEN_VER}/${bindgen_zip}.tar.gz | tar xz`, + { stdio: 'inherit' } + ); + fs.moveSync(`${bindgen_zip}`, 'bindgen'); +} diff --git a/yarn.lock b/yarn.lock index b7b29bc..6055020 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11225,8 +11225,10 @@ __metadata: dependencies: "@types/jest": ^27.4.0 "@zcloak/dev": ^0.6.5 + fs-extra: ^10.1.0 bin: - "build:wasm": scripts/build-wasm.js + build-wasm: scripts/build-wasm.js + install-build-deps: scripts/install-build-deps.js languageName: unknown linkType: soft