From 7c8279ec83d5c0246568b75de44a305e14ad6b0c Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 3 Feb 2026 16:08:46 -0500 Subject: [PATCH 1/2] use buffers for uint32 WASM params (#6291) --- src/test/app/HostFuncImpl_test.cpp | 32 - src/test/app/TestHostFunctions.h | 38 +- src/test/app/Wasm_test.cpp | 25 +- .../all_host_functions/Cargo.lock | 4 +- .../all_host_functions/Cargo.toml | 2 +- .../all_host_functions/src/lib.rs | 23 +- .../app/wasm_fixtures/all_keylets/Cargo.lock | 4 +- .../app/wasm_fixtures/all_keylets/Cargo.toml | 2 +- src/test/app/wasm_fixtures/bad_align.c | 48 +- .../wasm_fixtures/codecov_tests/Cargo.lock | 4 +- .../wasm_fixtures/codecov_tests/Cargo.toml | 2 +- .../wasm_fixtures/codecov_tests/src/lib.rs | 376 +++- src/test/app/wasm_fixtures/copyFixtures.py | 14 +- src/test/app/wasm_fixtures/fixtures.cpp | 1543 ++++++++--------- src/test/app/wasm_fixtures/fixtures.h | 2 +- .../app/wasm_fixtures/float_tests/Cargo.lock | 4 +- .../app/wasm_fixtures/float_tests/Cargo.toml | 2 +- src/test/app/wasm_fixtures/ledgerSqn.c | 23 +- src/xrpld/app/wasm/HostFunc.h | 6 +- src/xrpld/app/wasm/HostFuncImpl.h | 6 +- src/xrpld/app/wasm/HostFuncWrapper.h | 27 +- .../wasm/detail/HostFuncImplLedgerHeader.cpp | 21 +- src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 85 +- 23 files changed, 1244 insertions(+), 1049 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 811166c013..d786c4498a 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -117,16 +117,6 @@ struct HostFuncImpl_test : public beast::unit_test::suite if (BEAST_EXPECT(result.has_value())) BEAST_EXPECT(result.value() == env.current()->parentCloseTime().time_since_epoch().count()); } - - env.close(env.now() + std::chrono::seconds(std::numeric_limits::max() - 1)); - { - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); - auto const result = hfs.getParentLedgerTime(); - if (BEAST_EXPECTS(!result.has_value(), std::to_string(result.value()))) - BEAST_EXPECT(result.error() == HostFunctionError::INTERNAL); - } } void @@ -163,28 +153,6 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const result = hfs.getBaseFee(); if (BEAST_EXPECT(result.has_value())) BEAST_EXPECT(result.value() == env.current()->fees().base.drops()); - - { - Env env2( - *this, - envconfig([](std::unique_ptr cfg) { - cfg->FEES.reference_fee = static_cast(std::numeric_limits::max()) + 1; - return cfg; - }), - testable_amendments()); - // Run past the flag ledger so that a Fee change vote occurs and - // updates FeeSettings. (It also activates all supported - // amendments.) - for (auto i = env.current()->seq(); i <= 257; ++i) - env.close(); - - OpenView ov2{*env2.current()}; - ApplyContext ac2 = createApplyContext(env2, ov2); - WasmHostFunctionsImpl hfs2(ac2, dummyEscrow); - auto const result2 = hfs2.getBaseFee(); - if (BEAST_EXPECT(!result2.has_value())) - BEAST_EXPECT(result2.error() == HostFunctionError::INTERNAL); - } } void diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 85f8049e94..68cf42b362 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -35,7 +35,7 @@ public: return rt_; } - Expected + Expected getLedgerSqn() override { return env_.current()->seq(); @@ -70,13 +70,13 @@ public: return rt_; } - Expected + Expected getLedgerSqn() override { return 12345; } - Expected + Expected getParentLedgerTime() override { return 67890; @@ -88,7 +88,7 @@ public: return env_.current()->header().parentHash; } - Expected + Expected getBaseFee() override { return 10; @@ -298,6 +298,15 @@ public: return Bytes{keylet.key.begin(), keylet.key.end()}; } + Expected + checkKeylet(AccountID const& account, std::uint32_t seq) override + { + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::check(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + Expected credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) override { @@ -538,22 +547,16 @@ struct PerfHostFunctions : public TestHostFunctions { } - Expected + Expected getLedgerSqn() override { - auto seq = env_.current()->seq(); - if (seq > std::numeric_limits::max()) - return Unexpected(HostFunctionError::INTERNAL); // LCOV_EXCL_LINE - return static_cast(seq); + return env_.current()->seq(); } - Expected + Expected getParentLedgerTime() override { - auto time = env_.current()->parentCloseTime().time_since_epoch().count(); - if (time > std::numeric_limits::max()) - return Unexpected(HostFunctionError::INTERNAL); - return static_cast(time); + return env_.current()->parentCloseTime().time_since_epoch().count(); } Expected @@ -562,13 +565,10 @@ struct PerfHostFunctions : public TestHostFunctions return env_.current()->header().parentHash; } - Expected + Expected getBaseFee() override { - auto fee = env_.current()->fees().base.drops(); - if (fee > std::numeric_limits::max()) - return Unexpected(HostFunctionError::INTERNAL); - return static_cast(fee); + return env_.current()->fees().base.drops(); } Expected diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 3305ca03b8..c4ca26250c 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -182,7 +182,7 @@ struct Wasm_test : public beast::unit_test::suite auto re = engine.run(ledgerSqnWasm, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); - checkResult(re, 0, 151); + checkResult(re, 0, 440); env.close(); env.close(); @@ -190,7 +190,7 @@ struct Wasm_test : public beast::unit_test::suite // empty module - run the same instance re = engine.run({}, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); - checkResult(re, 5, 190); + checkResult(re, 5, 488); } void @@ -257,7 +257,7 @@ struct Wasm_test : public beast::unit_test::suite auto re = engine.run(allHostFuncWasm, ESCROW_FUNCTION_NAME, {}, imp, hfs, 1'000'000, env.journal); - checkResult(re, 1, 25'503); + checkResult(re, 1, 27'080); env.close(); } @@ -278,7 +278,7 @@ struct Wasm_test : public beast::unit_test::suite auto re = engine.run(allHostFuncWasm, ESCROW_FUNCTION_NAME, {}, imp, hfs, 1'000'000, env.journal); - checkResult(re, 1, 64'763); + checkResult(re, 1, 66'340); env.close(); } @@ -315,14 +315,14 @@ struct Wasm_test : public beast::unit_test::suite { std::shared_ptr hfs(new TestHostFunctions(env, 0)); auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); - checkResult(re, 1, 64'763); + checkResult(re, 1, 66'340); } { // max() gas std::shared_ptr hfs(new TestHostFunctions(env, 0)); auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, -1); - checkResult(re, 1, 64'763); + checkResult(re, 1, 66'340); } { // fail because trying to access nonexistent field @@ -340,7 +340,7 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr hfs(new BadTestHostFunctions(env)); auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); - checkResult(re, -201, 28'148); + checkResult(re, -201, 28'965); } { // fail because trying to allocate more than MAX_PAGES memory @@ -358,7 +358,7 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr hfs(new BadTestHostFunctions(env)); auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); - checkResult(re, -201, 28'148); + checkResult(re, -201, 28'965); } { // fail because recursion too deep @@ -574,7 +574,7 @@ struct Wasm_test : public beast::unit_test::suite auto const codecovWasm = hexToBytes(codecovTestsWasmHex); std::shared_ptr hfs(new TestHostFunctions(env, 0)); - auto const allowance = 187'131; + auto const allowance = 201'503; auto re = runEscrowWasm(codecovWasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); checkResult(re, 1, allowance); @@ -794,7 +794,7 @@ struct Wasm_test : public beast::unit_test::suite testcase("Wasm Bad Align"); // bad_align.c - auto const badAlignWasm = hexToBytes(badAlignHex); + auto const badAlignWasm = hexToBytes(badAlignWasmHex); using namespace test::jtx; @@ -807,7 +807,10 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); auto re = engine.run(badAlignWasm, "test", {}, imports, hfs, 1'000'000, env.journal); - BEAST_EXPECT(re && re->result == 0xbab88d46); + if (BEAST_EXPECTS(re, transToken(re.error()))) + { + BEAST_EXPECTS(re->result == 0x684f7941, std::to_string(re->result)); + } } env.close(); diff --git a/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock b/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock index 25ea64bbd2..dc4aa73edb 100644 --- a/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock +++ b/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock @@ -154,7 +154,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "xrpl-address-macro" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" dependencies = [ "bs58", "quote", @@ -165,7 +165,7 @@ dependencies = [ [[package]] name = "xrpl-wasm-stdlib" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" dependencies = [ "xrpl-address-macro", ] diff --git a/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml b/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml index 82f6ce05a3..102eb32cc0 100644 --- a/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml +++ b/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml @@ -10,7 +10,7 @@ edition = "2024" crate-type = ["cdylib"] [dependencies] -xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib" } +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", branch = "u32-buffer" } [profile.dev] panic = "abort" diff --git a/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs b/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs index 942e1c67c6..444fcaddfa 100644 --- a/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs +++ b/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs @@ -97,22 +97,27 @@ fn test_ledger_header_functions() -> i32 { let _ = trace("--- Category 1: Ledger Header Functions ---"); // Test 1.1: get_ledger_sqn() - should return current ledger sequence number - let sqn_result = unsafe { host::get_ledger_sqn() }; + let mut sqn_buffer = [0u8; 4]; + let sqn_result = unsafe { host::get_ledger_sqn(sqn_buffer.as_mut_ptr(), sqn_buffer.len()) }; if sqn_result <= 0 { let _ = trace_num("ERROR: get_ledger_sqn failed:", sqn_result as i64); return -101; // Ledger sequence number test failed } - let _ = trace_num("Ledger sequence number:", sqn_result as i64); + let ledger_sqn = u32::from_be_bytes(sqn_buffer); + let _ = trace_num("Ledger sequence number:", ledger_sqn as i64); // Test 1.2: get_parent_ledger_time() - should return parent ledger timestamp - let time_result = unsafe { host::get_parent_ledger_time() }; + let mut time_buffer = [0u8; 4]; + let time_result = + unsafe { host::get_parent_ledger_time(time_buffer.as_mut_ptr(), time_buffer.len()) }; if time_result <= 0 { let _ = trace_num("ERROR: get_parent_ledger_time failed:", time_result as i64); return -102; // Parent ledger time test failed } - let _ = trace_num("Parent ledger time:", time_result as i64); + let parent_ledger_time = u32::from_be_bytes(time_buffer); + let _ = trace_num("Parent ledger time:", parent_ledger_time as i64); // Test 1.3: get_parent_ledger_hash() - should return parent ledger hash (32 bytes) let mut hash_buffer = [0u8; 32]; @@ -616,11 +621,14 @@ fn test_keylet_generation_functions() -> i32 { // Test 5.3: escrow_keylet() - Generate keylet for escrow let mut escrow_keylet_buffer = [0u8; 32]; + let sequence_number: i32 = 1000; + let sequence_number_bytes = sequence_number.to_be_bytes(); let escrow_keylet_result = unsafe { host::escrow_keylet( account_id.0.as_ptr(), account_id.0.len(), - 1000, // Sequence number + sequence_number_bytes.as_ptr(), + sequence_number_bytes.len(), escrow_keylet_buffer.as_mut_ptr(), escrow_keylet_buffer.len(), ) @@ -634,11 +642,14 @@ fn test_keylet_generation_functions() -> i32 { // Test 5.4: oracle_keylet() - Generate keylet for oracle let mut oracle_keylet_buffer = [0u8; 32]; + let document_id: i32 = 42; + let document_id_bytes = document_id.to_be_bytes(); let oracle_keylet_result = unsafe { host::oracle_keylet( account_id.0.as_ptr(), account_id.0.len(), - 42, // Document ID + document_id_bytes.as_ptr(), + document_id_bytes.len(), oracle_keylet_buffer.as_mut_ptr(), oracle_keylet_buffer.len(), ) diff --git a/src/test/app/wasm_fixtures/all_keylets/Cargo.lock b/src/test/app/wasm_fixtures/all_keylets/Cargo.lock index 88a6e34459..d45ec0df78 100644 --- a/src/test/app/wasm_fixtures/all_keylets/Cargo.lock +++ b/src/test/app/wasm_fixtures/all_keylets/Cargo.lock @@ -154,7 +154,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "xrpl-address-macro" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" dependencies = [ "bs58", "quote", @@ -165,7 +165,7 @@ dependencies = [ [[package]] name = "xrpl-wasm-stdlib" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" dependencies = [ "xrpl-address-macro", ] diff --git a/src/test/app/wasm_fixtures/all_keylets/Cargo.toml b/src/test/app/wasm_fixtures/all_keylets/Cargo.toml index 823de4127d..abd232e636 100644 --- a/src/test/app/wasm_fixtures/all_keylets/Cargo.toml +++ b/src/test/app/wasm_fixtures/all_keylets/Cargo.toml @@ -15,7 +15,7 @@ opt-level = 's' panic = "abort" [dependencies] -xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib" } +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", branch = "u32-buffer" } [profile.dev] panic = "abort" diff --git a/src/test/app/wasm_fixtures/bad_align.c b/src/test/app/wasm_fixtures/bad_align.c index ff29456c2a..edb045560d 100644 --- a/src/test/app/wasm_fixtures/bad_align.c +++ b/src/test/app/wasm_fixtures/bad_align.c @@ -3,21 +3,45 @@ int32_t float_from_uint(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); int32_t -get_tx_nested_field(uint8_t const*, int32_t, uint8_t*, int32_t); +check_keylet(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -uint8_t e_data[32 * 1024]; +uint8_t e_data1[32 * 1024]; +uint8_t e_data2[32 * 1024]; + +int32_t +test1() +{ + e_data1[1] = 0xFF; + e_data1[2] = 0xFF; + e_data1[3] = 0xFF; + e_data1[4] = 0xFF; + e_data1[5] = 0xFF; + e_data1[6] = 0xFF; + e_data1[7] = 0xFF; + e_data1[8] = 0xFF; + int32_t result = float_from_uint(&e_data1[1], 8, &e_data1[35], 12, 0); + return result >= 0 ? *((int32_t*)(&e_data1[36])) : result; +} + +int32_t +test2() +{ + // Set up misaligned uint32 (seq) at offset 1 + e_data2[1] = 0xFF; + e_data2[2] = 0xFF; + e_data2[3] = 0xFF; + e_data2[4] = 0xFF; + // Set up valid non-zero AccountID (20 bytes) at offset 10 + for (int i = 0; i < 20; i++) + e_data2[10 + i] = i + 1; + // Call check_keylet with misaligned uint32 at &e_data2[1] to hit line 72 in HostFuncWrapper.cpp + int32_t result = check_keylet(&e_data2[10], 20, &e_data2[1], 4, &e_data2[35], 32); + // Return the misaligned value directly to validate it was read correctly (-1 if all 0xFF) + return result >= 0 ? *((int32_t*)(&e_data2[36])) : result; +} int32_t test() { - e_data[1] = 0xFF; - e_data[2] = 0xFF; - e_data[3] = 0xFF; - e_data[4] = 0xFF; - e_data[5] = 0xFF; - e_data[6] = 0xFF; - e_data[7] = 0xFF; - e_data[8] = 0xFF; - float_from_uint(&e_data[1], 8, &e_data[35], 12, 0); - return *((int32_t*)(&e_data[36])); + return test1() + test2(); } diff --git a/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock index e44fd14755..4a4b71bdcc 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock +++ b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock @@ -154,7 +154,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "xrpl-address-macro" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" dependencies = [ "bs58", "quote", @@ -165,7 +165,7 @@ dependencies = [ [[package]] name = "xrpl-wasm-stdlib" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" dependencies = [ "xrpl-address-macro", ] diff --git a/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml index 5031bcb566..81a682bb37 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml +++ b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml @@ -15,4 +15,4 @@ opt-level = 's' panic = "abort" [dependencies] -xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib" } +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", branch = "u32-buffer" } diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index aa05eec9d9..5e58d13ecd 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -55,12 +55,20 @@ pub extern "C" fn finish() -> i32 { // that's in a separate test file (all_keylets). // The float tests are also in a separate file (float_tests). // ######################################## - check_result(unsafe { host::get_ledger_sqn() }, 12345, "get_ledger_sqn"); - check_result( - unsafe { host::get_parent_ledger_time() }, - 67890, - "get_parent_ledger_time", - ); + with_buffer::<4, _, _>(|ptr, len| { + check_result( + unsafe { host::get_ledger_sqn(ptr, len) }, + 4, + "get_ledger_sqn", + ); + }); + with_buffer::<4, _, _>(|ptr, len| { + check_result( + unsafe { host::get_parent_ledger_time(ptr, len) }, + 4, + "get_parent_ledger_time", + ); + }); with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { host::get_parent_ledger_hash(ptr, len) }, @@ -68,7 +76,9 @@ pub extern "C" fn finish() -> i32 { "get_parent_ledger_hash", ); }); - check_result(unsafe { host::get_base_fee() }, 10, "get_base_fee"); + with_buffer::<4, _, _>(|ptr, len| { + check_result(unsafe { host::get_base_fee(ptr, len) }, 4, "get_base_fee"); + }); let amendment_name: &[u8] = b"test_amendment"; let amendment_id: [u8; 32] = [1; 32]; check_result( @@ -312,38 +322,6 @@ pub extern "C" fn finish() -> i32 { // Step #3: Test getData[Type] edge cases // ######################################## - // uint64 - with_buffer::<32, _, _>(|ptr, len| { - check_result( - unsafe { - host::float_from_uint( - locator.as_ptr().wrapping_add(1_000_000_000), - 8, - ptr, - len, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }, - error_codes::POINTER_OUT_OF_BOUNDS, - "float_from_uint_len_oob", - ) - }); - with_buffer::<32, _, _>(|ptr, len| { - check_result( - unsafe { - host::float_from_uint( - locator.as_ptr(), - locator.len(), - ptr, - len, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }, - error_codes::INVALID_PARAMS, - "float_from_uint_wrong_len", - ) - }); - // SField check_result( unsafe { host::get_tx_array_len(2) }, // not a valid SField value @@ -381,6 +359,72 @@ pub extern "C" fn finish() -> i32 { "get_tx_nested_array_len_ptr_oob", ); + // uint32 + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::check_keylet( + account.0.as_ptr(), + account.0.len(), + locator.as_ptr().wrapping_add(1_000_000_000), + 8, + ptr, + len, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "check_keylet_oob_len_u32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::check_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "check_keylet_wrong_len_u32", + ) + }); + + // uint64 + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_from_uint( + locator.as_ptr().wrapping_add(1_000_000_000), + 8, + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_from_uint_len_oob", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_from_uint( + locator.as_ptr(), + locator.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::INVALID_PARAMS, + "float_from_uint_wrong_len_uint64", + ) + }); + // uint256 check_result( unsafe { @@ -1011,6 +1055,155 @@ pub extern "C" fn finish() -> i32 { ) }); + // invalid UInt32 + + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::escrow_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "escrow_keylet_wrong_size_uint32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::mpt_issuance_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "mpt_issuance_keylet_wrong_size_uint32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::nft_offer_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "nft_offer_keylet_wrong_size_uint32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::offer_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "offer_keylet_wrong_size_uint32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::oracle_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "oracle_keylet_wrong_size_uint32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::paychan_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "paychan_keylet_wrong_size_uint32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::permissioned_domain_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "permissioned_domain_keylet_wrong_size_uint32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::ticket_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "ticket_keylet_wrong_size_uint32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::vault_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "vault_keylet_wrong_size_uint32", + ) + }); + // invalid UInt256 check_result( @@ -1075,9 +1268,20 @@ pub extern "C" fn finish() -> i32 { "account_keylet_wrong_size_accountid", ) }); + let seq: i32 = 1; + let seq_bytes = seq.to_be_bytes(); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::check_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + unsafe { + host::check_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) + }, error_codes::INVALID_PARAMS, "check_keylet_wrong_size_accountid", ) @@ -1191,7 +1395,16 @@ pub extern "C" fn finish() -> i32 { }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::escrow_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + unsafe { + host::escrow_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) + }, error_codes::INVALID_PARAMS, "escrow_keylet_wrong_size_accountid", ) @@ -1234,7 +1447,16 @@ pub extern "C" fn finish() -> i32 { }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::mpt_issuance_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + unsafe { + host::mpt_issuance_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) + }, error_codes::INVALID_PARAMS, "mpt_issuance_keylet_wrong_size_accountid", ) @@ -1257,21 +1479,48 @@ pub extern "C" fn finish() -> i32 { }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::nft_offer_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + unsafe { + host::nft_offer_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) + }, error_codes::INVALID_PARAMS, "nft_offer_keylet_wrong_size_accountid", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::offer_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + unsafe { + host::offer_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) + }, error_codes::INVALID_PARAMS, "offer_keylet_wrong_size_accountid", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::oracle_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + unsafe { + host::oracle_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) + }, error_codes::INVALID_PARAMS, "oracle_keylet_wrong_size_accountid", ) @@ -1284,7 +1533,8 @@ pub extern "C" fn finish() -> i32 { locator.len(), account.0.as_ptr(), account.0.len(), - 1, + seq_bytes.as_ptr(), + seq_bytes.len(), ptr, len, ) @@ -1301,7 +1551,8 @@ pub extern "C" fn finish() -> i32 { account.0.len(), locator.as_ptr(), // invalid AccountID size locator.len(), - 1, + seq_bytes.as_ptr(), + seq_bytes.len(), ptr, len, ) @@ -1313,7 +1564,14 @@ pub extern "C" fn finish() -> i32 { with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::permissioned_domain_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) + host::permissioned_domain_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) }, error_codes::INVALID_PARAMS, "permissioned_domain_keylet_wrong_size_accountid", @@ -1328,14 +1586,32 @@ pub extern "C" fn finish() -> i32 { }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::ticket_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + unsafe { + host::ticket_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) + }, error_codes::INVALID_PARAMS, "ticket_keylet_wrong_size_accountid", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::vault_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + unsafe { + host::vault_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) + }, error_codes::INVALID_PARAMS, "vault_keylet_wrong_size_accountid", ) diff --git a/src/test/app/wasm_fixtures/copyFixtures.py b/src/test/app/wasm_fixtures/copyFixtures.py index cd53184b5e..2c0abc560d 100644 --- a/src/test/app/wasm_fixtures/copyFixtures.py +++ b/src/test/app/wasm_fixtures/copyFixtures.py @@ -54,12 +54,7 @@ def process_rust(project_name): ")" ) try: - result = subprocess.run( - build_cmd, shell=True, check=True, capture_output=True, text=True - ) - print(f"stdout: {result.stdout}") - if result.stderr: - print(f"stderr: {result.stderr}") + subprocess.run(build_cmd, shell=True, check=True) print(f"WASM file for {project_name} has been built and optimized.") except subprocess.CalledProcessError as e: print(f"exec error: {e}") @@ -91,12 +86,7 @@ def process_c(project_name): f"&& wasm-opt {wasm_path} {OPT} -o {wasm_path}" ) try: - result = subprocess.run( - build_cmd, shell=True, check=True, capture_output=True, text=True - ) - print(f"stdout: {result.stdout}") - if result.stderr: - print(f"stderr: {result.stderr}") + subprocess.run(build_cmd, shell=True, check=True) print( f"WASM file for {project_name} has been built with WASI support using clang." ) diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 6bff452705..9df5201e9f 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -104,238 +104,239 @@ extern std::string const sha512PureWasmHex = "7065732b0a6d756c746976616c7565"; extern std::string const ledgerSqnWasmHex = - "0061736d010000000108026000017f60000002160103656e760e6765745f6c65646765725f" - "73716e000003030201000503010002063e0a7f004180080b7f004180080b7f004180100b7f" - "004180100b7f00418090040b7f004180080b7f00418090040b7f00418080080b7f0041000b" - "7f0041010b07b0010d066d656d6f72790200115f5f7761736d5f63616c6c5f63746f727300" - "010666696e69736800020362756603000c5f5f64736f5f68616e646c6503010a5f5f646174" - "615f656e6403020b5f5f737461636b5f6c6f7703030c5f5f737461636b5f6869676803040d" - "5f5f676c6f62616c5f6261736503050b5f5f686561705f6261736503060a5f5f686561705f" - "656e6403070d5f5f6d656d6f72795f6261736503080c5f5f7461626c655f6261736503090a" - "150202000b1001017f100022004100200041044b1b0b007f0970726f647563657273010c70" - "726f6365737365642d62790105636c616e675f31392e312e352d776173692d73646b202868" - "747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a6563742061" - "62346235613264623538323935386166316565333038613739306366646234326264323437" - "32302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f6261" - "6c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976" - "616c7565"; + "0061736d01000000010e0360027f7f017f6000006000017f02160103656e760e6765745f6c65646765725f73716e0000030302010205030100" + "02063f0a7f01418088040b7f004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00418080080b7f" + "0041000b7f0041010b07aa010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f727300010666696e69736800020c5f5f64736f" + "5f68616e646c6503010a5f5f646174615f656e6403020b5f5f737461636b5f6c6f7703030c5f5f737461636b5f6869676803040d5f5f676c6f" + "62616c5f6261736503050b5f5f686561705f6261736503060a5f5f686561705f656e6403070d5f5f6d656d6f72795f6261736503080c5f5f74" + "61626c655f6261736503090a3d0202000b3801037f230041106b220024002000410c6a410410002101200028020c2102200041106a24002001" + "41054100200241054f1b20014100481b0b007f0970726f647563657273010c70726f6365737365642d62790105636c616e675f31392e312e35" + "2d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a65637420616234623561326462" + "353832393538616631656533303861373930636664623432626432343732302900490f7461726765745f6665617475726573042b0f6d757461" + "626c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; extern std::string const allHostFunctionsWasmHex = - "0061736d0100000001540c60047f7f7f7f017f60027f7f017f60037f7f7f017f60057f7f7f" - "7f7f017f6000017f60017f017f60037f7f7f0060037f7f7e017f60087f7f7f7f7f7f7f7f01" - "7f60067f7f7f7f7f7f017f60017f0060027f7f0002ae061a08686f73745f6c69620c676574" - "5f74785f6669656c64000208686f73745f6c69620974726163655f6e756d000708686f7374" - "5f6c6962057472616365000308686f73745f6c69620e6765745f6c65646765725f73716e00" - "0408686f73745f6c6962166765745f706172656e745f6c65646765725f74696d6500040868" - "6f73745f6c6962166765745f706172656e745f6c65646765725f68617368000108686f7374" - "5f6c69620d74726163655f6163636f756e74000008686f73745f6c6962136765745f74785f" - "6e65737465645f6669656c64000008686f73745f6c6962106765745f74785f61727261795f" - "6c656e000508686f73745f6c6962176765745f74785f6e65737465645f61727261795f6c65" - "6e000108686f73745f6c69621c6765745f63757272656e745f6c65646765725f6f626a5f66" - "69656c64000208686f73745f6c6962236765745f63757272656e745f6c65646765725f6f62" - "6a5f6e65737465645f6669656c64000008686f73745f6c6962206765745f63757272656e74" - "5f6c65646765725f6f626a5f61727261795f6c656e000508686f73745f6c6962276765745f" - "63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e0001" - "08686f73745f6c69620e6163636f756e745f6b65796c6574000008686f73745f6c69621063" - "616368655f6c65646765725f6f626a000208686f73745f6c6962146765745f6c6564676572" - "5f6f626a5f6669656c64000008686f73745f6c69621b6765745f6c65646765725f6f626a5f" - "6e65737465645f6669656c64000308686f73745f6c6962186765745f6c65646765725f6f62" - "6a5f61727261795f6c656e000108686f73745f6c69621f6765745f6c65646765725f6f626a" - "5f6e65737465645f61727261795f6c656e000208686f73745f6c69621163726564656e7469" - "616c5f6b65796c6574000808686f73745f6c69620d657363726f775f6b65796c6574000308" - "686f73745f6c69620d6f7261636c655f6b65796c6574000308686f73745f6c696213636f6d" - "707574655f7368613531325f68616c66000008686f73745f6c6962076765745f6e66740009" - "08686f73745f6c69620b7570646174655f6461746100010306050a0b060604050301001106" - "19037f01418080c0000b7f0041af99c0000b7f0041b099c0000b072e04066d656d6f727902" - "000666696e697368001e0a5f5f646174615f656e6403010b5f5f686561705f626173650302" - "0ae61b057c01027f230041206b220124002000027f418180202001410c6a41141000220241" - "14470440024020024100480440200020023602040c010b2000417f3602040b41010c010b20" - "00200129000c370001200041116a2001411c6a280000360000200041096a200141146a2900" - "0037000041000b3a0000200141206a24000b450020012d0000450440200020012900013700" - "00200041106a200141116a280000360000200041086a200141096a2900003700000f0b4180" - "80c000410b20013402041001000b1900200241214f0440000b200020023602042000200136" - "02000b1900200241094f0440000b20002002360204200020013602000bec1901097f230041" - "b0036b22002400418b80c000411b41004100410010021a41a680c000411941004100410010" - "021a41e780c000412b41004100410010021a027f0240024002400240024002400240100322" - "0141004a0440419281c00041172001ad10011a1004220141004c0d0141a981c00041132001" - "ad10011a200041c8016a22034200370300200041c0016a22054200370300200041b8016a22" - "044200370300200042003703b001200041b0016a22064120100522014120470d0241bc81c0" - "00411320064120410110021a41cf81c000412041004100410010021a41dc82c000412e4100" - "4100410010021a200041a0016a410036020020004198016a42003703002000420037039001" - "4181802020004190016a22024114100022014114470d03418a83c00041142002411410061a" - "2000420037037041888018200041f0006a22024108100022014108470d04419e83c0004117" - "420810011a41b583c000412820024108410110021a2000410036025041848008200041d000" - "6a22024104100022014104470d0541dd83c000411520024104410110021a200041013b003c" - "200342003703002005420037030020044200370300200042003703b00102402000413c6a41" - "02200641201007220141004e044041f283c00041142001ad10011a200041306a2006200110" - "1c418684c000410d20002802302000280234410110021a0c010b419384c00041292001ac10" - "011a0b41bc84c00041154183803c1008ac10011a41d184c00041134189803c1008ac10011a" - "02402000413c6a41021009220141004e044041e484c00041142001ad10011a0c010b41f884" - "c000412d2001ac10011a0b41a585c000412341004100410010021a41de86c0004133410041" - "00410010021a2000420037037041828018200041f0006a22014108100a220241004c0d0620" - "024108460440419187c000412b420810011a41bc87c000412f20014108410110021a0c080b" - "41eb87c000412f2002ad10011a200041286a200041f0006a2002101d419a88c00041172000" - "280228200028022c410110021a0c070b41bf82c000411d2001ac10011a419b7f0c070b419a" - "82c00041252001ac10011a419a7f0c060b41ef81c000412b2001ac10011a41997f0c050b41" - "b486c000412a2001ac10011a41b77e0c040b41f385c00041c1002001ac10011a41b67e0c03" - "0b41c885c000412b2001ac10011a41b57e0c020b41b188c00041c5002002ac10011a0b2000" - "41a0016a410036020020004198016a42003703002000420037039001024041818020200041" - "90016a22024114100a220141004a044041f688c000411e2002411410061a0c010b419489c0" - "0041332001ac10011a0b200041013b0050200041c8016a4200370300200041c0016a420037" - "0300200041b8016a4200370300200042003703b0010240200041d0006a4102200041b0016a" - "22014120100b220241004e044041c789c000411c2002ad10011a200041206a20012002101c" - "41e389c000411520002802202000280224410110021a0c010b41f889c00041392002ac1001" - "1a0b41b18ac00041244183803c100cac10011a0240200041d0006a4102100d220141004e04" - "4041d58ac000411c2001ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc00041" - "2841004100410010021a41d68bc000412f41004100410010021a200041b0016a2202101a20" - "0041f0006a22012002101b200041a8016a4200370300200041a0016a420037030020004198" - "016a42003703002000420037039001024002400240024002402001411420004190016a2202" - "4120100e22014120460440200241204100100f220441004a044041858cc00041232004ad10" - "011a20004200370350200441828018200041d0006a220141081010220241004c0d02200241" - "0846044041a88cc000412a420810011a41d28cc000412e20014108410110021a0c060b4180" - "8dc000412e2002ad10011a200041186a200041d0006a2002101d41ae8dc000411620002802" - "18200028021c410110021a0c050b41e68fc000413c2004ac10011a200041c8016a42003703" - "00200041c0016a4200370300200041b8016a4200370300200042003703b001410141828018" - "200041b0016a4120101022014100480d020c030b41ba92c000412e2001ac10011a41ef7c0c" - "050b41c48dc000412b2002ac10011a0c020b41a290c00041c1002001ac10011a0b20004101" - "3b00504101200041d0006a4102200041b0016a412010112201410048044041e390c0004135" - "2001ac10011a0b41014183803c101222014100480440419891c00041322001ac10011a0b41" - "01200041d0006a410210132201410048044041ca91c00041392001ac10011a0b418392c000" - "413741004100410010021a0c010b200041013b003c200041c8016a4200370300200041c001" - "6a4200370300200041b8016a4200370300200042003703b001024020042000413c6a410220" - "0041b0016a220141201011220241004e044041ef8dc000411b2002ad10011a200041106a20" - "012002101c418a8ec000411420002802102000280214410110021a0c010b419e8ec0004131" - "2002ac10011a0b41cf8ec000412320044183803c1012ac10011a024020042000413c6a4102" - "1013220141004e044041f28ec000411b2001ad10011a0c010b418d8fc00041352001ac1001" - "1a0b41c28fc000412441004100410010021a0b41e892c000412f41004100410010021a2000" - "41b0016a2201101a2000413c6a22042001101b200041e8006a4200370300200041e0006a42" - "00370300200041d8006a420037030020004200370350024002400240024002400240200441" - "14200041d0006a22024120100e22014120460440419793c000410f20024120410110021a20" - "004188016a420037030020004180016a4200370300200041f8006a42003703002000420037" - "03700240200441142004411441a693c0004109200041f0006a220141201014220241004a04" - "40200041086a20012002101c41ae93c00041122000280208200028020c410110021a0c010b" - "41c093c000413c2002ac10011a0b200041a8016a22084200370300200041a0016a22034200" - "37030020004198016a2205420037030020004200370390012000413c6a2202411441e80720" - "004190016a22074120101522014120470d0141fc93c000410e20074120410110021a200041" - "c8016a4200370300200041c0016a4200370300200041b8016a4200370300200042003703b0" - "0120024114412a200041b0016a22044120101622014120470d02418a94c000410e20044120" - "410110021a419894c000412441004100410010021a419195c000412541004100410010021a" - "20004188016a420037030020004180016a4200370300200041f8006a420037030020004200" - "37037041b695c0004117200041f0006a22024120101722014120470d0341cd95c000410b41" - "b695c0004117410110021a41d895c000411120024120410110021a2004101a200041d0006a" - "22062004101b20084200370300200342003703002005420037030020004200370390010240" - "200422032003410020036b41037122026a22054f0d0020020440200221010340200341003a" - "0000200341016a2103200141016b22010d000b0b200241016b4107490d000340200341003a" - "0000200341076a41003a0000200341066a41003a0000200341056a41003a0000200341046a" - "41003a0000200341036a41003a0000200341026a41003a0000200341016a41003a00002003" - "41086a22032005470d000b0b200541800220026b2201417c716a220320054b044003402005" - "4100360200200541046a22052003490d000b0b024020032001410371220120036a22024f0d" - "002001220504400340200341003a0000200341016a2103200541016b22050d000b0b200141" - "016b4107490d000340200341003a0000200341076a41003a0000200341066a41003a000020" - "0341056a41003a0000200341046a41003a0000200341036a41003a0000200341026a41003a" - "0000200341016a41003a0000200341086a22032002470d000b0b0240200641142007412020" - "044180021018220141004a044041e995c00041102001ad10011a20014181024f0d0641f995" - "c000410920042001410110021a0c010b418296c000412e2001ac10011a0b41b096c0004112" - "41c296c00041074101100222014100480d0541c996c000411d2001ad10011a41e696c00041" - "11422a10014100480d0641f796c000411c420010011a419397c000411a4100410041001002" - "1a41ff97c000412941004100410010021a41a898c000412810192201412846044041d098c0" - "00412741a898c0004128410110021a41f798c000411e41004100410010021a41bf80c00041" - "2841004100410010021a41010c080b419599c000411a2001ac10011a41c37a0c070b41f494" - "c000411d2001ac10011a418b7c0c060b41d894c000411c2001ac10011a41897c0c050b41bc" - "94c000411c2001ac10011a41887c0c040b41dd97c00041222001ac10011a41a77b0c030b00" - "0b41c797c00041162001ac10011a41a57b0c010b41ad97c000411a42a47b10011a41a47b0b" - "200041b0036a24000b0bb9190100418080c0000baf196572726f725f636f64653d3d3d3d20" - "484f53542046554e4354494f4e532054455354203d3d3d54657374696e6720323620686f73" - "742066756e6374696f6e73535543434553533a20416c6c20686f73742066756e6374696f6e" - "20746573747320706173736564212d2d2d2043617465676f727920313a204c656467657220" - "4865616465722046756e6374696f6e73202d2d2d4c65646765722073657175656e6365206e" - "756d6265723a506172656e74206c65646765722074696d653a506172656e74206c65646765" - "7220686173683a535543434553533a204c6564676572206865616465722066756e6374696f" - "6e734552524f523a206765745f706172656e745f6c65646765725f686173682077726f6e67" - "206c656e6774683a4552524f523a206765745f706172656e745f6c65646765725f74696d65" - "206661696c65643a4552524f523a206765745f6c65646765725f73716e206661696c65643a" - "2d2d2d2043617465676f727920323a205472616e73616374696f6e20446174612046756e63" - "74696f6e73202d2d2d5472616e73616374696f6e204163636f756e743a5472616e73616374" - "696f6e20466565206c656e6774683a5472616e73616374696f6e2046656520287365726961" - "6c697a65642058525020616d6f756e74293a5472616e73616374696f6e2053657175656e63" - "653a4e6573746564206669656c64206c656e6774683a4e6573746564206669656c643a494e" - "464f3a206765745f74785f6e65737465645f6669656c64206e6f74206170706c696361626c" - "653a5369676e657273206172726179206c656e6774683a4d656d6f73206172726179206c65" - "6e6774683a4e6573746564206172726179206c656e6774683a494e464f3a206765745f7478" - "5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a53554343" - "4553533a205472616e73616374696f6e20646174612066756e6374696f6e734552524f523a" - "206765745f74785f6669656c642853657175656e6365292077726f6e67206c656e6774683a" - "4552524f523a206765745f74785f6669656c6428466565292077726f6e67206c656e677468" - "20286578706563746564203820627974657320666f7220585250293a4552524f523a206765" - "745f74785f6669656c64284163636f756e74292077726f6e67206c656e6774683a2d2d2d20" - "43617465676f727920333a2043757272656e74204c6564676572204f626a6563742046756e" - "6374696f6e73202d2d2d43757272656e74206f626a6563742062616c616e6365206c656e67" - "7468202858525020616d6f756e74293a43757272656e74206f626a6563742062616c616e63" - "65202873657269616c697a65642058525020616d6f756e74293a43757272656e74206f626a" - "6563742062616c616e6365206c656e67746820286e6f6e2d58525020616d6f756e74293a43" - "757272656e74206f626a6563742062616c616e63653a494e464f3a206765745f6375727265" - "6e745f6c65646765725f6f626a5f6669656c642842616c616e636529206661696c65642028" - "6d6179206265206578706563746564293a43757272656e74206c6564676572206f626a6563" - "74206163636f756e743a494e464f3a206765745f63757272656e745f6c65646765725f6f62" - "6a5f6669656c64284163636f756e7429206661696c65643a43757272656e74206e65737465" - "64206669656c64206c656e6774683a43757272656e74206e6573746564206669656c643a49" - "4e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669" - "656c64206e6f74206170706c696361626c653a43757272656e74206f626a65637420536967" - "6e657273206172726179206c656e6774683a43757272656e74206e65737465642061727261" - "79206c656e6774683a494e464f3a206765745f63757272656e745f6c65646765725f6f626a" - "5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a53554343" - "4553533a2043757272656e74206c6564676572206f626a6563742066756e6374696f6e732d" - "2d2d2043617465676f727920343a20416e79204c6564676572204f626a6563742046756e63" - "74696f6e73202d2d2d5375636365737366756c6c7920636163686564206f626a6563742069" - "6e20736c6f743a436163686564206f626a6563742062616c616e6365206c656e6774682028" - "58525020616d6f756e74293a436163686564206f626a6563742062616c616e636520287365" - "7269616c697a65642058525020616d6f756e74293a436163686564206f626a656374206261" - "6c616e6365206c656e67746820286e6f6e2d58525020616d6f756e74293a43616368656420" - "6f626a6563742062616c616e63653a494e464f3a206765745f6c65646765725f6f626a5f66" - "69656c642842616c616e636529206661696c65643a436163686564206e6573746564206669" - "656c64206c656e6774683a436163686564206e6573746564206669656c643a494e464f3a20" - "6765745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f74206170706c69" - "6361626c653a436163686564206f626a656374205369676e657273206172726179206c656e" - "6774683a436163686564206e6573746564206172726179206c656e6774683a494e464f3a20" - "6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e206e6f742061" - "70706c696361626c653a535543434553533a20416e79206c6564676572206f626a65637420" - "66756e6374696f6e73494e464f3a2063616368655f6c65646765725f6f626a206661696c65" - "642028657870656374656420776974682074657374206669787475726573293a494e464f3a" - "206765745f6c65646765725f6f626a5f6669656c64206661696c6564206173206578706563" - "74656420286e6f20636163686564206f626a656374293a494e464f3a206765745f6c656467" - "65725f6f626a5f6e65737465645f6669656c64206661696c65642061732065787065637465" - "643a494e464f3a206765745f6c65646765725f6f626a5f61727261795f6c656e206661696c" - "65642061732065787065637465643a494e464f3a206765745f6c65646765725f6f626a5f6e" - "65737465645f61727261795f6c656e206661696c65642061732065787065637465643a5355" - "43434553533a20416e79206c6564676572206f626a6563742066756e6374696f6e73202869" - "6e7465726661636520746573746564294552524f523a206163636f756e745f6b65796c6574" - "206661696c656420666f722063616368696e6720746573743a2d2d2d2043617465676f7279" - "20353a204b65796c65742047656e65726174696f6e2046756e6374696f6e73202d2d2d4163" - "636f756e74206b65796c65743a546573745479706543726564656e7469616c206b65796c65" - "743a494e464f3a2063726564656e7469616c5f6b65796c6574206661696c65642028657870" - "6563746564202d20696e74657266616365206973737565293a457363726f77206b65796c65" - "743a4f7261636c65206b65796c65743a535543434553533a204b65796c65742067656e6572" - "6174696f6e2066756e6374696f6e734552524f523a206f7261636c655f6b65796c65742066" - "61696c65643a4552524f523a20657363726f775f6b65796c6574206661696c65643a455252" - "4f523a206163636f756e745f6b65796c6574206661696c65643a2d2d2d2043617465676f72" - "7920363a205574696c6974792046756e6374696f6e73202d2d2d48656c6c6f2c205852504c" - "205741534d20776f726c6421496e70757420646174613a5348413531322068616c66206861" - "73683a4e46542064617461206c656e6774683a4e465420646174613a494e464f3a20676574" - "5f6e6674206661696c656420286578706563746564202d206e6f2073756368204e4654293a" - "54657374207472616365206d6573736167657061796c6f616454726163652066756e637469" - "6f6e206279746573207772697474656e3a54657374206e756d626572207472616365547261" - "63655f6e756d2066756e6374696f6e20737563636565646564535543434553533a20557469" - "6c6974792066756e6374696f6e734552524f523a2074726163655f6e756d2829206661696c" - "65643a4552524f523a2074726163652829206661696c65643a4552524f523a20636f6d7075" - "74655f7368613531325f68616c66206661696c65643a2d2d2d2043617465676f727920373a" - "2044617461205570646174652046756e6374696f6e73202d2d2d55706461746564206c6564" - "67657220656e74727920646174612066726f6d205741534d20746573745375636365737366" - "756c6c792075706461746564206c656467657220656e74727920776974683a535543434553" - "533a2044617461207570646174652066756e6374696f6e734552524f523a20757064617465" - "5f64617461206661696c65643a004d0970726f64756365727302086c616e67756167650104" - "52757374000c70726f6365737365642d6279010572757374631d312e38352e312028346562" - "31363132353020323032352d30332d313529002c0f7461726765745f666561747572657302" - "2b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; + "0061736d0100000001540c60027f7f017f60037f7f7f017f60047f7f7f7f017f60017f017f" + "60067f7f7f7f7f7f017f60037f7f7f0060057f7f7f7f7f017f60037f7f7e017f60087f7f7f" + "7f7f7f7f7f017f60017f0060027f7f006000017f02ae061a08686f73745f6c69620c676574" + "5f74785f6669656c64000108686f73745f6c69620974726163655f6e756d000708686f7374" + "5f6c6962057472616365000608686f73745f6c69620e6765745f6c65646765725f73716e00" + "0008686f73745f6c6962166765745f706172656e745f6c65646765725f74696d6500000868" + "6f73745f6c6962166765745f706172656e745f6c65646765725f68617368000008686f7374" + "5f6c6962136765745f74785f6e65737465645f6669656c64000208686f73745f6c69621067" + "65745f74785f61727261795f6c656e000308686f73745f6c6962176765745f74785f6e6573" + "7465645f61727261795f6c656e000008686f73745f6c69621c6765745f63757272656e745f" + "6c65646765725f6f626a5f6669656c64000108686f73745f6c6962236765745f6375727265" + "6e745f6c65646765725f6f626a5f6e65737465645f6669656c64000208686f73745f6c6962" + "206765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e00030868" + "6f73745f6c6962276765745f63757272656e745f6c65646765725f6f626a5f6e6573746564" + "5f61727261795f6c656e000008686f73745f6c69621063616368655f6c65646765725f6f62" + "6a000108686f73745f6c69621163726564656e7469616c5f6b65796c6574000808686f7374" + "5f6c69620d657363726f775f6b65796c6574000408686f73745f6c69620d6f7261636c655f" + "6b65796c6574000408686f73745f6c696213636f6d707574655f7368613531325f68616c66" + "000208686f73745f6c6962076765745f6e6674000408686f73745f6c69620b757064617465" + "5f64617461000008686f73745f6c6962146765745f6c65646765725f6f626a5f6669656c64" + "000208686f73745f6c69621b6765745f6c65646765725f6f626a5f6e65737465645f666965" + "6c64000608686f73745f6c6962186765745f6c65646765725f6f626a5f61727261795f6c65" + "6e000008686f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f6172" + "7261795f6c656e000108686f73745f6c69620e6163636f756e745f6b65796c657400020868" + "6f73745f6c69620d74726163655f6163636f756e740002030c0b090a05050b050001010300" + "05030100110619037f01418080c0000b7f0041af99c0000b7f0041b099c0000b072e04066d" + "656d6f727902000666696e697368001e0a5f5f646174615f656e6403010b5f5f686561705f" + "6261736503020ac61d0b990101027f230041306b220124002000027f418180202001411c6a" + "4114100022024114470440417f20022002417f4e1b210241010c010b200020012f001c3b00" + "01200041036a2001411e6a2d00003a0000200120012900233703082001200141286a290000" + "37000d200128001f21022000410d6a200129000d3700002000200129030837020841000b3a" + "000020002002360204200141306a24000b460020012d00004101460440418080c000410b20" + "013402041001000b20002001290001370000200041106a200141116a280000360000200041" + "086a200141096a2900003700000b1900200241214f0440000b200020023602042000200136" + "02000b1900200241094f0440000b20002002360204200020013602000bde1a01097f230041" + "b0036b22002400418b80c000411b41014100410010021a41a680c000411941014100410010" + "021a41e780c000412b41014100410010021a20004100360270024002400240024002400240" + "02400240200041f0006a220741041003220141004a0440419281c000411720002802702201" + "41187420014180fe03714108747220014108764180fe037120014118767272ad10011a2000" + "41003602900120004190016a220341041004220141004c0d0141a981c00041132000280290" + "01220141187420014180fe03714108747220014108764180fe037120014118767272ad1001" + "1a200041c8016a22024200370300200041c0016a22054200370300200041b8016a22044200" + "370300200042003703b001200041b0016a22064120100522014120470d0241bc81c0004113" + "20064120410110021a41cf81c000412041014100410010021a41dc82c000412e4101410041" + "0010021a200041a0016a410036020020004198016a42003703002000420037039001418180" + "2020034114100022014114470d03418a83c00041142003101f200042003703704188801820" + "074108100022014108470d04419e83c0004117420810011a41b583c0004128200741084101" + "10021a2000410036024841848008200041c8006a22034104100022014104470d0541dd83c0" + "00411520034104410110021a200041013b0034200242003703002005420037030020044200" + "370300200042003703b0010240200041346a4102200641201006220141004e044041f283c0" + "0041142001ad10011a200041286a20062001101c418684c000410d2000280228200028022c" + "410110021a0c010b419384c00041292001ac10011a0b41bc84c00041154183803c1007ac10" + "011a41d184c00041134189803c1007ac10011a0240200041346a41021008220141004e0440" + "41e484c00041142001ad10011a0c010b41f884c000412d2001ac10011a0b41a585c0004123" + "41014100410010021a41de86c000413341014100410010021a200042003703704182801820" + "0041f0006a220141081009220341004c0d0620034108460440419187c000412b420810011a" + "41bc87c000412f20014108410110021a0c080b41eb87c000412f2003ad10011a200041206a" + "200041f0006a2003101d419a88c000411720002802202000280224410110021a0c070b41bf" + "82c000411d2001ac10011a419b7f21020c070b419a82c00041252001ac10011a419a7f2102" + "0c060b41ef81c000412b2001ac10011a41997f21020c050b41b486c000412a2001ac10011a" + "41b77e21020c040b41f385c00041c1002001ac10011a41b67e21020c030b41c885c000412b" + "2001ac10011a41b57e21020c020b41b188c00041c5002003ac10011a0b200041a0016a4100" + "36020020004198016a4200370300200042003703900102404181802020004190016a220341" + "141009220141004a044041f688c000411e2003101f0c010b419489c00041332001ac10011a" + "0b200041013b0048200041c8016a4200370300200041c0016a4200370300200041b8016a42" + "00370300200042003703b0010240200041c8006a4102200041b0016a22014120100a220341" + "004e044041c789c000411c2003ad10011a200041186a20012003101c41e389c00041152000" + "280218200028021c410110021a0c010b41f889c00041392003ac10011a0b41b18ac0004124" + "4183803c100bac10011a0240200041c8006a4102100c220141004e044041d58ac000411c20" + "01ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc00041284101410041001002" + "1a41d68bc000412f41014100410010021a200041b0016a2203101a200041f0006a22012003" + "101b200041a8016a4200370300200041a0016a420037030020004198016a42003703002000" + "42003703900102400240024002400240200120004190016a22031020220141204604402003" + "41204100100d220441004a044041858cc00041232004ad10011a2000420037034820042000" + "41c8006a220141081021220341004c0d022003410846044041a88cc000412a420810011a41" + "d28cc000412e20014108410110021a0c060b41808dc000412e2003ad10011a200041106a20" + "0041c8006a2003101d41ae8dc000411620002802102000280214410110021a0c050b41e68f" + "c000413c2004ac10011a200041c8016a4200370300200041c0016a4200370300200041b801" + "6a4200370300200042003703b0014101200041b0016a4120102122014100480d020c030b41" + "ba92c000412e2001ac10011a41ef7c21020c050b41c48dc000412b2003ac10011a0c020b41" + "a290c00041c1002001ac10011a0b200041013b00484101200041c8006a200041b0016a1022" + "2201410048044041e390c00041352001ac10011a0b4101102322014100480440419891c000" + "41322001ac10011a0b4101200041c8006a10242201410048044041ca91c00041392001ac10" + "011a0b418392c000413741014100410010021a0c010b200041013b0034200041c8016a4200" + "370300200041c0016a4200370300200041b8016a4200370300200042003703b00102402004" + "200041346a200041b0016a22011022220341004e044041ef8dc000411b2003ad10011a2000" + "41086a20012003101c418a8ec00041142000280208200028020c410110021a0c010b419e8e" + "c00041312003ac10011a0b41cf8ec000412320041023ac10011a02402004200041346a1024" + "220141004e044041f28ec000411b2001ad10011a0c010b418d8fc00041352001ac10011a0b" + "41c28fc000412441014100410010021a0b41e892c000412f41014100410010021a200041b0" + "016a2201101a200041346a22042001101b200041e0006a4200370300200041d8006a420037" + "0300200041d0006a420037030020004200370348024002400240024002402004200041c800" + "6a2203102022014120460440419793c000410f20034120410110021a20004188016a420037" + "030020004180016a4200370300200041f8006a420037030020004200370370024020044114" + "2004411441a693c0004109200041f0006a22014120100e220341004a044020002001200310" + "1c41ae93c000411220002802002000280204410110021a0c010b41c093c000413c2003ac10" + "011a0b200041a8016a22064200370300200041a0016a2202420037030020004198016a2205" + "4200370300200042003703900120004180808cc07e360268200041346a22034114200041e8" + "006a410420004190016a22084120100f22014120470d0141fc93c000410e20084120410110" + "021a200041c8016a4200370300200041c0016a4200370300200041b8016a42003703002000" + "42003703b001200041808080d00236026c20034114200041ec006a4104200041b0016a2204" + "4120101022014120470d02418a94c000410e20044120410110021a419894c0004124410141" + "00410010021a419195c000412541014100410010021a20004188016a420037030020004180" + "016a4200370300200041f8006a42003703002000420037037041b695c0004117200041f000" + "6a22034120101122014120470d0341cd95c000410b41b695c0004117410110021a41d895c0" + "00411120034120410110021a2004101a200041c8006a22072004101b200642003703002002" + "420037030020054200370300200042003703900102404100200422026b410371220320026a" + "220520024d0d0020030440200321010340200241003a0000200241016a2102200141016b22" + "010d000b0b200341016b4107490d000340200241003a0000200241076a41003a0000200241" + "066a41003a0000200241056a41003a0000200241046a41003a0000200241036a41003a0000" + "200241026a41003a0000200241016a41003a0000200241086a22022005470d000b0b200541" + "800220036b2201417c716a220220054b0440034020054100360200200541046a2205200249" + "0d000b0b024020022001410371220120026a22034f0d002001220504400340200241003a00" + "00200241016a2102200541016b22050d000b0b200141016b4107490d000340200241003a00" + "00200241076a41003a0000200241066a41003a0000200241056a41003a0000200241046a41" + "003a0000200241036a41003a0000200241026a41003a0000200241016a41003a0000200241" + "086a22022003470d000b0b0240200741142008412020044180021012220141004a044041e9" + "95c00041102001ad10011a20014181024f0d0641f995c000410920042001410110021a0c01" + "0b418296c000412e2001ac10011a0b41b096c000411241c296c00041074101100222014100" + "480d0541c996c000411d2001ad10011a41e696c0004111422a1001410048044041ad97c000" + "411a42a47b10011a41a47b21020c070b41f796c000411c420010011a41012102419397c000" + "411a41014100410010021a41ff97c000412941014100410010021a41a898c0004128101322" + "01412846044041d098c000412741a898c0004128410110021a41f798c000411e4101410041" + "0010021a41bf80c000412841014100410010021a0c070b419599c000411a2001ac10011a41" + "c37a21020c060b41f494c000411d2001ac10011a418b7c21020c050b41d894c000411c2001" + "ac10011a41897c21020c040b41bc94c000411c2001ac10011a41887c21020c030b41dd97c0" + "0041222001ac10011a41a77b21020c020b000b41c797c00041162001ac10011a41a57b2102" + "0b200041b0036a240020020b0d00200020012002411410191a0b0c00200041142001412010" + "180b0e002000418280182001200210140b0e002000200141022002412010150b0a00200041" + "83803c10160b0a0020002001410210170b0bb9190100418080c0000baf196572726f725f63" + "6f64653d3d3d3d20484f53542046554e4354494f4e532054455354203d3d3d54657374696e" + "6720323620686f73742066756e6374696f6e73535543434553533a20416c6c20686f737420" + "66756e6374696f6e20746573747320706173736564212d2d2d2043617465676f727920313a" + "204c6564676572204865616465722046756e6374696f6e73202d2d2d4c6564676572207365" + "7175656e6365206e756d6265723a506172656e74206c65646765722074696d653a50617265" + "6e74206c656467657220686173683a535543434553533a204c656467657220686561646572" + "2066756e6374696f6e734552524f523a206765745f706172656e745f6c65646765725f6861" + "73682077726f6e67206c656e6774683a4552524f523a206765745f706172656e745f6c6564" + "6765725f74696d65206661696c65643a4552524f523a206765745f6c65646765725f73716e" + "206661696c65643a2d2d2d2043617465676f727920323a205472616e73616374696f6e2044" + "6174612046756e6374696f6e73202d2d2d5472616e73616374696f6e204163636f756e743a" + "5472616e73616374696f6e20466565206c656e6774683a5472616e73616374696f6e204665" + "65202873657269616c697a65642058525020616d6f756e74293a5472616e73616374696f6e" + "2053657175656e63653a4e6573746564206669656c64206c656e6774683a4e657374656420" + "6669656c643a494e464f3a206765745f74785f6e65737465645f6669656c64206e6f742061" + "70706c696361626c653a5369676e657273206172726179206c656e6774683a4d656d6f7320" + "6172726179206c656e6774683a4e6573746564206172726179206c656e6774683a494e464f" + "3a206765745f74785f6e65737465645f61727261795f6c656e206e6f74206170706c696361" + "626c653a535543434553533a205472616e73616374696f6e20646174612066756e6374696f" + "6e734552524f523a206765745f74785f6669656c642853657175656e6365292077726f6e67" + "206c656e6774683a4552524f523a206765745f74785f6669656c6428466565292077726f6e" + "67206c656e67746820286578706563746564203820627974657320666f7220585250293a45" + "52524f523a206765745f74785f6669656c64284163636f756e74292077726f6e67206c656e" + "6774683a2d2d2d2043617465676f727920333a2043757272656e74204c6564676572204f62" + "6a6563742046756e6374696f6e73202d2d2d43757272656e74206f626a6563742062616c61" + "6e6365206c656e677468202858525020616d6f756e74293a43757272656e74206f626a6563" + "742062616c616e6365202873657269616c697a65642058525020616d6f756e74293a437572" + "72656e74206f626a6563742062616c616e6365206c656e67746820286e6f6e2d5852502061" + "6d6f756e74293a43757272656e74206f626a6563742062616c616e63653a494e464f3a2067" + "65745f63757272656e745f6c65646765725f6f626a5f6669656c642842616c616e63652920" + "6661696c656420286d6179206265206578706563746564293a43757272656e74206c656467" + "6572206f626a656374206163636f756e743a494e464f3a206765745f63757272656e745f6c" + "65646765725f6f626a5f6669656c64284163636f756e7429206661696c65643a4375727265" + "6e74206e6573746564206669656c64206c656e6774683a43757272656e74206e6573746564" + "206669656c643a494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e" + "65737465645f6669656c64206e6f74206170706c696361626c653a43757272656e74206f62" + "6a656374205369676e657273206172726179206c656e6774683a43757272656e74206e6573" + "746564206172726179206c656e6774683a494e464f3a206765745f63757272656e745f6c65" + "646765725f6f626a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361" + "626c653a535543434553533a2043757272656e74206c6564676572206f626a656374206675" + "6e6374696f6e732d2d2d2043617465676f727920343a20416e79204c6564676572204f626a" + "6563742046756e6374696f6e73202d2d2d5375636365737366756c6c792063616368656420" + "6f626a65637420696e20736c6f743a436163686564206f626a6563742062616c616e636520" + "6c656e677468202858525020616d6f756e74293a436163686564206f626a6563742062616c" + "616e6365202873657269616c697a65642058525020616d6f756e74293a436163686564206f" + "626a6563742062616c616e6365206c656e67746820286e6f6e2d58525020616d6f756e7429" + "3a436163686564206f626a6563742062616c616e63653a494e464f3a206765745f6c656467" + "65725f6f626a5f6669656c642842616c616e636529206661696c65643a436163686564206e" + "6573746564206669656c64206c656e6774683a436163686564206e6573746564206669656c" + "643a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f6669656c64206e" + "6f74206170706c696361626c653a436163686564206f626a656374205369676e6572732061" + "72726179206c656e6774683a436163686564206e6573746564206172726179206c656e6774" + "683a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c" + "656e206e6f74206170706c696361626c653a535543434553533a20416e79206c6564676572" + "206f626a6563742066756e6374696f6e73494e464f3a2063616368655f6c65646765725f6f" + "626a206661696c656420286578706563746564207769746820746573742066697874757265" + "73293a494e464f3a206765745f6c65646765725f6f626a5f6669656c64206661696c656420" + "617320657870656374656420286e6f20636163686564206f626a656374293a494e464f3a20" + "6765745f6c65646765725f6f626a5f6e65737465645f6669656c64206661696c6564206173" + "2065787065637465643a494e464f3a206765745f6c65646765725f6f626a5f61727261795f" + "6c656e206661696c65642061732065787065637465643a494e464f3a206765745f6c656467" + "65725f6f626a5f6e65737465645f61727261795f6c656e206661696c656420617320657870" + "65637465643a535543434553533a20416e79206c6564676572206f626a6563742066756e63" + "74696f6e732028696e7465726661636520746573746564294552524f523a206163636f756e" + "745f6b65796c6574206661696c656420666f722063616368696e6720746573743a2d2d2d20" + "43617465676f727920353a204b65796c65742047656e65726174696f6e2046756e6374696f" + "6e73202d2d2d4163636f756e74206b65796c65743a546573745479706543726564656e7469" + "616c206b65796c65743a494e464f3a2063726564656e7469616c5f6b65796c657420666169" + "6c656420286578706563746564202d20696e74657266616365206973737565293a45736372" + "6f77206b65796c65743a4f7261636c65206b65796c65743a535543434553533a204b65796c" + "65742067656e65726174696f6e2066756e6374696f6e734552524f523a206f7261636c655f" + "6b65796c6574206661696c65643a4552524f523a20657363726f775f6b65796c6574206661" + "696c65643a4552524f523a206163636f756e745f6b65796c6574206661696c65643a2d2d2d" + "2043617465676f727920363a205574696c6974792046756e6374696f6e73202d2d2d48656c" + "6c6f2c205852504c205741534d20776f726c6421496e70757420646174613a534841353132" + "2068616c6620686173683a4e46542064617461206c656e6774683a4e465420646174613a49" + "4e464f3a206765745f6e6674206661696c656420286578706563746564202d206e6f207375" + "6368204e4654293a54657374207472616365206d6573736167657061796c6f616454726163" + "652066756e6374696f6e206279746573207772697474656e3a54657374206e756d62657220" + "747261636554726163655f6e756d2066756e6374696f6e2073756363656564656453554343" + "4553533a205574696c6974792066756e6374696f6e734552524f523a2074726163655f6e75" + "6d2829206661696c65643a4552524f523a2074726163652829206661696c65643a4552524f" + "523a20636f6d707574655f7368613531325f68616c66206661696c65643a2d2d2d20436174" + "65676f727920373a2044617461205570646174652046756e6374696f6e73202d2d2d557064" + "61746564206c656467657220656e74727920646174612066726f6d205741534d2074657374" + "5375636365737366756c6c792075706461746564206c656467657220656e74727920776974" + "683a535543434553533a2044617461207570646174652066756e6374696f6e734552524f52" + "3a207570646174655f64617461206661696c65643a004d0970726f64756365727302086c61" + "6e6775616765010452757374000c70726f6365737365642d6279010572757374631d312e38" + "372e30202831373036376539616320323032352d30352d303929002c0f7461726765745f66" + "65617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const deepRecursionHex = "0061736d010000000105016000017f030201000608017f0141c0843d0b070a010666696e69" @@ -376,535 +377,460 @@ extern std::string const hfPerfTest = "0a6d756c746976616c7565"; extern std::string const allKeyletsWasmHex = - "0061736d0100000001530a60057f7f7f7f7f017f60047f7f7f7f017f60067f7f7f7f7f7f01" - "7f60037f7f7f017f60087f7f7f7f7f7f7f7f017f60037f7f7e017f60077f7f7f7f7f7f7f01" - "7f60057f7f7f7f7f006000017f60037f7f7f000284051808686f73745f6c69620574726163" - "65000008686f73745f6c69621063616368655f6c65646765725f6f626a000308686f73745f" - "6c69620974726163655f6e756d000508686f73745f6c6962146765745f6c65646765725f6f" - "626a5f6669656c64000108686f73745f6c69621c6765745f63757272656e745f6c65646765" - "725f6f626a5f6669656c64000308686f73745f6c69620d74726163655f6163636f756e7400" - "0108686f73745f6c69620e6163636f756e745f6b65796c6574000108686f73745f6c69620b" - "6c696e655f6b65796c6574000408686f73745f6c69620a616d6d5f6b65796c657400020868" - "6f73745f6c69620c636865636b5f6b65796c6574000008686f73745f6c6962116372656465" - "6e7469616c5f6b65796c6574000408686f73745f6c69620f64656c65676174655f6b65796c" - "6574000208686f73745f6c6962166465706f7369745f707265617574685f6b65796c657400" - "0208686f73745f6c69620a6469645f6b65796c6574000108686f73745f6c69620d65736372" - "6f775f6b65796c6574000008686f73745f6c6962136d70745f69737375616e63655f6b6579" - "6c6574000008686f73745f6c69620e6d70746f6b656e5f6b65796c6574000208686f73745f" - "6c6962106e66745f6f666665725f6b65796c6574000008686f73745f6c69620c6f66666572" - "5f6b65796c6574000008686f73745f6c69620e7061796368616e5f6b65796c657400060868" - "6f73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c6574000008" - "686f73745f6c69620e7369676e6572735f6b65796c6574000108686f73745f6c69620d7469" - "636b65745f6b65796c6574000008686f73745f6c69620c7661756c745f6b65796c65740000" - "03040307080905030100110619037f01418080c0000b7f0041ad8ac0000b7f0041b08ac000" - "0b073e05066d656d6f727902000d6f626a6563745f65786973747300180666696e69736800" - "190a5f5f646174615f656e6403010b5f5f686561705f6261736503020ad53103fb0402017f" - "027e23004180016b2205240002400240024020012d0000450440200541186a200141196a29" - "0000370300200541106a200141116a290000370300200541086a200141096a290000370300" - "200520012900013703002002200320054120410110001a2005412041001001220141004c0d" - "01024002402004450440418b80c000410f4285801410021a200141858014200541e0006a41" - "20100322014120460d0141a680c0004115417f20012001417f4e1b2201ac10021a20004101" - "3a0000200020013602040c060b418b80c000410f2004ac10021a20012004200541e0006a41" - "14100322014114460d0141a680c0004115417f20012001417f4e1b2201ac10021a20004101" - "3a0000200020013602040c050b200541c2006a200541e2006a2d00003a0000200541286a20" - "0541ef006a2900002206370300200541306a200541f7006a2900002207370300200541386a" - "200541ff006a2d000022013a0000200541cf006a2006370000200541d7006a200737000020" - "0541df006a20013a0000200520052f00603b01402005200529006722063703202005200528" - "006336004320052006370047419a80c000410c200541406b4120410110001a0c030b200541" - "c2006a200541e2006a2d00003a0000200520052900673703202005200541ec006a29000037" - "0025200541cc006a2005290025370000200520052f00603b01402005200528006336004320" - "052005290320370047419a80c000410c200541406b4114410110001a0c020b41c280c00041" - "1620012802042201ac10021a200041013a0000200020013602040c020b41bb80c000410720" - "01ac10021a200041013a0000200020013602040c010b20004180023b01000b20054180016a" - "24000bd627020a7f027e23004180076b2200240041d880c000412341004100410010001a02" - "402000027f02404181802020004188016a22034114100422044114460440200041066a2000" - "418a016a22012d00003a00002000200029008f013703e001200020004194016a2202290000" - "3700e501200041106a20002900e501370000200020002f0088013b01042000200028008b01" - "360007200020002903e00137000b41fb80c0004108200041046a2205411410051a41838020" - "20034114100422044114470d032000411a6a20012d00003a00002000200029008f013703e0" - "01200020022900003700e501200041246a20002900e501370000200020002f0088013b0118" - "2000200028008b0136001b200020002903e00137001f418381c000410c200041186a411410" - "051a200041a0016a2201420037030020004198016a2202420037030020004190016a420037" - "030020004200370388012005411420034120100622044120460d0102402004410048044020" - "0020043602300c010b2000417f3602300b41010c020b0c020b200041c5006a200129030037" - "00002000413d6a2002290300370000200041356a20004190016a2903003700002000200029" - "03880137002d41000b3a002c20004188016a22032000412c6a418f81c00041074181802010" - "180240024020002d00880145044041002104419681c000413541004100410010001a200041" - "de006a41c4003a0000200041d8006a4100360200200041e3006a41003a0000200041d5a601" - "3b015c200042003703502000410036005f200041a0016a2201420037030020004198016a22" - "02420037030020004190016a220542003703002000420037038801200041046a4114200041" - "186a4114200041d0006a411420034120100722034120470440024020034100480440200020" - "033602680c010b2000417f3602680b410121040c020b200041fd006a200129030037000020" - "0041f5006a2002290300370000200041ed006a200529030037000020002000290388013700" - "650c010b200028028c01210441878ac0004112420510021a0c010b200020043a0064200041" - "88016a200041e4006a41cb81c000410941001018024020002d00880145044041d481c00041" - "3741004100410010001a200041f0016a200041286a2201280100360200200041e8016a2000" - "41206a2202290100370300200041fc016a200041d8006a290300220a37020020004184026a" - "200041e0006a2802002203360200200020002901183703e00120002000290350220b3702f4" - "01200041e8066a22042003360200200041e0066a2203200a3703002000200b3703d8062000" - "41f4066a2002290100370200200041fc066a2001280100360200200020002901183702ec06" - "20004188026a200041d8066a22014128101a2000418c016a200041e0016a41d000101a2000" - "410136028801200041f0066a22024200370300200442003703002003420037030020004200" - "3703d80641998ac0004114200041b4016a4128200141201008220141204704400240200141" - "00480440200020013602e4010c010b2000417f3602e4010b410121040c020b200041f9016a" - "2002290300370000200041f1016a2004290300370000200041e9016a200329030037000020" - "0020002903d8063700e101410021040c010b200028028c01210441878ac000411242051002" - "1a0c010b200020043a00e001200041b4026a200041e0016a2203418b82c000410341818020" - "1018024020002d00b40245044041002104418e82c000413141004100410010001a200041f8" - "016a22014200370300200041f0016a22024200370300200041e8016a220542003703002000" - "42003703e001200041046a4114410620034120100922034120470440024020034100480440" - "200020033602c0020c010b2000417f3602c0020b410121040c020b200041d5026a20012903" - "00370000200041cd026a2002290300370000200041c5026a20052903003700002000200029" - "03e0013700bd020c010b20002802b802210441878ac0004112420610021a0c010b20002004" - "3a00bc02200041e0016a2203200041bc026a41bf82c0004105418180201018024020002d00" - "e0014504404100210441c482c000413341004100410010001a200041f8016a220142003703" - "00200041f0016a22024200370300200041e8016a22054200370300200042003703e0012000" - "41046a220941142009411441f782c000411220034120100a22034120470440024020034100" - "480440200020033602e4020c010b2000417f3602e4020b410121040c020b200041f9026a20" - "01290300370000200041f1026a2002290300370000200041e9026a20052903003700002000" - "20002903e0013700e1020c010b20002802e401210441878ac0004112420610021a0c010b20" - "0020043a00e002200041e0016a2203200041e0026a418983c000410a419880201018024020" - "002d00e00145044041002104419383c000413841004100410010001a200041f8016a220142" - "00370300200041f0016a22024200370300200041e8016a22054200370300200042003703e0" - "01200041046a4114200041186a411420034120100b22034120470440024020034100480440" - "20002003360288030c010b2000417f360288030b410121040c020b2000419d036a20012903" - "0037000020004195036a20022903003700002000418d036a20052903003700002000200029" - "03e001370085030c010b20002802e401210441878ac0004112420710021a0c010b20002004" - "3a008403200041e0016a220520004184036a41cb83c0004108418180201018024002400240" - "0240024002400240024002400240024020002d00e00145044041d383c00041364100410041" - "0010001a230041206b22032400200341186a22064200370300200341106a22074200370300" - "200341086a2208420037030020034200370300200041a8036a2201027f200041046a220441" - "14200041186a2209411420034120100c220241204704400240200241004804402001200236" - "02040c010b2001417f3602040b41010c010b20012003290300370001200141196a20062903" - "00370000200141116a2007290300370000200141096a200829030037000041000b3a000020" - "0341206a240020052001418984c000410e41818020101820002d00e0010d01419784c00041" - "3c41004100410010001a230041206b22032400200341186a22064200370300200341106a22" - "074200370300200341086a2208420037030020034200370300200041cc036a2201027f2004" - "411420034120100d22024120470440024020024100480440200120023602040c010b200141" - "7f3602040b41010c010b20012003290300370001200141196a200629030037000020014111" - "6a2007290300370000200141096a200829030037000041000b3a0000200341206a24002005" - "200141d384c000410341818020101820002d00e0010d0241d684c000413141004100410010" - "001a230041206b22032400200341186a22064200370300200341106a220742003703002003" - "41086a2208420037030020034200370300200041f0036a2201027f20044114410b20034120" - "100e22024120470440024020024100480440200120023602040c010b2001417f3602040b41" - "010c010b20012003290300370001200141196a2006290300370000200141116a2007290300" - "370000200141096a200829030037000041000b3a0000200341206a240020052001418785c0" - "00410641818020101820002d00e0010d03418d85c000413441004100410010001a23004120" - "6b22032400200341186a22064200370300200341106a22074200370300200341086a220842" - "003703002003420037030020004194046a2201027f20044114410c20034120100f22024120" - "470440024020024100480440200120023602040c010b2001417f3602040b41010c010b2001" - "2003290300370001200141196a2006290300370000200141116a2007290300370000200141" - "096a200829030037000041000b3a0000200341206a2400200041f4016a200041146a280100" - "360200200041ec016a2000410c6a290100370200200020002901043702e401200041808080" - "e0003602e001200041d8066a2203200141c185c000410b41848020101820002d00d8060d04" - "41cc85c000413941004100410010001a230041206b22012400200141186a22064200370300" - "200141106a22074200370300200141086a2208420037030020014200370300200041b8046a" - "2202027f200541182009411420014120101022054120470440024020054100480440200220" - "053602040c010b2002417f3602040b41010c010b20022001290300370001200241196a2006" - "290300370000200241116a2007290300370000200241096a200829030037000041000b3a00" - "00200141206a240020032002418586c000410741818020101820002d00d8060d05418c86c0" - "00413541004100410010001a230041206b22012400200141186a2206420037030020014110" - "6a22074200370300200141086a2208420037030020014200370300200041dc046a2202027f" - "20094114410620014120101122054120470440024020054100480440200220053602040c01" - "0b2002417f3602040b41010c010b20022001290300370001200241196a2006290300370000" - "200241116a2007290300370000200241096a200829030037000041000b3a0000200141206a" - "24002003200241c186c000410c41828020101820002d00d8060d0641cd86c000413a410041" - "00410010001a230041206b22012400200141186a22064200370300200141106a2207420037" - "0300200141086a220842003703002001420037030020004180056a2202027f20044114410d" - "20014120101222054120470440024020054100480440200220053602040c010b2002417f36" - "02040b41010c010b20022001290300370001200241196a2006290300370000200241116a20" - "07290300370000200241096a200829030037000041000b3a0000200141206a240020032002" - "418787c000410541818020101820002d00d8060d07418c87c000413341004100410010001a" - "230041206b22012400200141186a22064200370300200141106a2207420037030020014108" - "6a2208420037030020014200370300200041a4056a2202027f2004411420094114410e2001" - "4120101322054120470440024020054100480440200220053602040c010b2002417f360204" - "0b41010c010b20022001290300370001200241196a2006290300370000200241116a200729" - "0300370000200241096a200829030037000041000b3a0000200141206a24002003200241bf" - "87c000410a41818020101820002d00d8060d0841c987c000413841004100410010001a2300" - "41206b22012400200141186a22094200370300200141106a22064200370300200141086a22" - "07420037030020014200370300200041c8056a2202027f20044114410f2001412010142205" - "4120470440024020054100480440200220053602040c010b2002417f3602040b41010c010b" - "20022001290300370001200241196a2009290300370000200241116a200629030037000020" - "0241096a200729030037000041000b3a0000200141206a240020032002418188c000411241" - "828020101820002d00d8060d09419388c00041c00041004100410010001a230041206b2201" - "2400200141186a22094200370300200141106a22064200370300200141086a220742003703" - "0020014200370300200041ec056a2202027f20044114200141201015220541204704400240" - "20054100480440200220053602040c010b2002417f3602040b41010c010b20022001290300" - "370001200241196a2009290300370000200241116a2006290300370000200241096a200729" - "030037000041000b3a0000200141206a24002003200241d388c000410a4100101820002d00" - "d8060d0a41dd88c000413841004100410010001a230041206b22012400200141186a220942" - "00370300200141106a22064200370300200141086a22074200370300200142003703002000" - "4190066a2202027f2004411441122001412010162205412047044002402005410048044020" - "0220053602040c010b2002417f3602040b41010c010b20022001290300370001200241196a" - "2009290300370000200241116a2006290300370000200241096a200729030037000041000b" - "3a0000200141206a240020032002419589c000410641818020101820002d00d8060d0b419b" - "89c000413441004100410010001a230041206b22012400200141186a220542003703002001" - "41106a22094200370300200141086a2206420037030020014200370300200041b4066a2202" - "027f2004411441132001412010172204412047044002402004410048044020022004360204" - "0c010b2002417f3602040b41010c010b20022001290300370001200241196a200529030037" - "0000200241116a2009290300370000200241096a200629030037000041000b3a0000200141" - "206a24002003200241cf89c000410541818020101820002d00d80645044041d489c0004133" - "41004100410010001a410121040c0d0b20002802dc06210441878ac0004112421310021a0c" - "0c0b20002802e401210441878ac0004112420810021a0c0b0b20002802e401210441878ac0" - "004112420910021a0c0a0b20002802e401210441878ac0004112420a10021a0c090b200028" - "02e401210441878ac0004112420b10021a0c080b20002802dc06210441878ac0004112420c" - "10021a0c070b20002802dc06210441878ac0004112420d10021a0c060b20002802dc062104" - "41878ac0004112420d10021a0c050b20002802dc06210441878ac0004112420d10021a0c04" - "0b20002802dc06210441878ac0004112420e10021a0c030b20002802dc06210441878ac000" - "4112420f10021a0c020b20002802dc06210441878ac0004112421010021a0c010b20002802" - "dc06210441878ac0004112421210021a0b20004180076a240020040f0b418080c000410b41" - "7f20042004417f4e1bac1002000bfd0401067f200241104f044002402000410020006b4103" - "7122056a220420004d0d002001210320050440200521060340200020032d00003a00002003" - "41016a2103200041016a2100200641016b22060d000b0b200541016b4107490d0003402000" - "20032d00003a0000200041016a200341016a2d00003a0000200041026a200341026a2d0000" - "3a0000200041036a200341036a2d00003a0000200041046a200341046a2d00003a00002000" - "41056a200341056a2d00003a0000200041066a200341066a2d00003a0000200041076a2003" - "41076a2d00003a0000200341086a2103200041086a22002004470d000b0b2004200220056b" - "2207417c7122086a21000240200120056a2206410371450440200020044d0d012006210103" - "4020042001280200360200200141046a2101200441046a22042000490d000b0c010b200020" - "044d0d002006410374220541187121032006417c71220241046a2101410020056b41187121" - "05200228020021020340200420022003762001280200220220057472360200200141046a21" - "01200441046a22042000490d000b0b20074103712102200620086a21010b02402000200020" - "026a22064f0d002002410771220304400340200020012d00003a0000200141016a21012000" - "41016a2100200341016b22030d000b0b200241016b4107490d000340200020012d00003a00" - "00200041016a200141016a2d00003a0000200041026a200141026a2d00003a000020004103" - "6a200141036a2d00003a0000200041046a200141046a2d00003a0000200041056a20014105" - "6a2d00003a0000200041066a200141066a2d00003a0000200041076a200141076a2d00003a" - "0000200141086a2101200041086a22002006470d000b0b0b0ba30a0100418080c0000b990a" - "6572726f725f636f64653d47657474696e67206669656c643a204669656c6420646174613a" - "204572726f722067657474696e67206669656c643a204572726f723a204572726f72206765" - "7474696e67206b65796c65743a202424242424205354415254494e47205741534d20455845" - "435554494f4e2024242424244163636f756e743a44657374696e6174696f6e3a4163636f75" - "6e744163636f756e74206f626a656374206578697374732c2070726f63656564696e672077" - "69746820657363726f772066696e6973682e54727573746c696e6554727573746c696e6520" - "6f626a656374206578697374732c2070726f63656564696e67207769746820657363726f77" - "2066696e6973682e414d4d414d4d206f626a656374206578697374732c2070726f63656564" - "696e67207769746820657363726f772066696e6973682e436865636b436865636b206f626a" - "656374206578697374732c2070726f63656564696e67207769746820657363726f77206669" - "6e6973682e7465726d73616e64636f6e646974696f6e7343726564656e7469616c43726564" - "656e7469616c206f626a656374206578697374732c2070726f63656564696e672077697468" - "20657363726f772066696e6973682e44656c656761746544656c6567617465206f626a6563" - "74206578697374732c2070726f63656564696e67207769746820657363726f772066696e69" - "73682e4465706f736974507265617574684465706f73697450726561757468206f626a6563" - "74206578697374732c2070726f63656564696e67207769746820657363726f772066696e69" - "73682e444944444944206f626a656374206578697374732c2070726f63656564696e672077" - "69746820657363726f772066696e6973682e457363726f77457363726f77206f626a656374" + "0061736d0100000001480960067f7f7f7f7f7f017f60047f7f7f7f017f60087f7f7f7f7f7f" + "7f7f017f60037f7f7f017f60037f7f7e017f60057f7f7f7f7f017f60057f7f7f7f7f006000" + "017f60037f7f7f000284051808686f73745f6c69620974726163655f6e756d000408686f73" + "745f6c6962057472616365000508686f73745f6c69621063616368655f6c65646765725f6f" + "626a000308686f73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000108" + "686f73745f6c69621c6765745f63757272656e745f6c65646765725f6f626a5f6669656c64" + "000308686f73745f6c69620d74726163655f6163636f756e74000108686f73745f6c69620e" + "6163636f756e745f6b65796c6574000108686f73745f6c69620b6c696e655f6b65796c6574" + "000208686f73745f6c69620a616d6d5f6b65796c6574000008686f73745f6c69620c636865" + "636b5f6b65796c6574000008686f73745f6c69621163726564656e7469616c5f6b65796c65" + "74000208686f73745f6c69620f64656c65676174655f6b65796c6574000008686f73745f6c" + "6962166465706f7369745f707265617574685f6b65796c6574000008686f73745f6c69620a" + "6469645f6b65796c6574000108686f73745f6c69620d657363726f775f6b65796c65740000" + "08686f73745f6c6962136d70745f69737375616e63655f6b65796c6574000008686f73745f" + "6c69620e6d70746f6b656e5f6b65796c6574000008686f73745f6c6962106e66745f6f6666" + "65725f6b65796c6574000008686f73745f6c69620c6f666665725f6b65796c657400000868" + "6f73745f6c69620e7061796368616e5f6b65796c6574000208686f73745f6c69621a706572" + "6d697373696f6e65645f646f6d61696e5f6b65796c6574000008686f73745f6c69620e7369" + "676e6572735f6b65796c6574000108686f73745f6c69620d7469636b65745f6b65796c6574" + "000008686f73745f6c69620c7661756c745f6b65796c657400000304030607080503010011" + "0619037f01418080c0000b7f0041ad8ac0000b7f0041b08ac0000b073e05066d656d6f7279" + "02000d6f626a6563745f65786973747300180666696e69736800190a5f5f646174615f656e" + "6403010b5f5f686561705f6261736503020ab73403a80502017f017e230041a0016b220524" + "00024020012d0000410146044041c280c000411620012802042201ac10001a200041013a00" + "00200020013602040c010b200541186a200141196a290000370300200541106a200141116a" + "290000370300200541086a200141096a290000370300200520012900013703002002200320" + "054120410110011a02402005412041001002220141004a04402004450440418b80c000410f" + "4285801410001a20014185801420054180016a412010032201412047044041a680c0004115" + "417f20012001417f4e1b2201ac10001a200041013a0000200020013602040c040b200541c2" + "006a20054182016a2d00003a0000200541f0006a20054197016a2900002206370300200541" + "286a22012005418f016a290000370300200541306a22022006370300200541386a22032005" + "419f016a2d00003a0000200520052f0080013b014020052005290087013703202005200528" + "008301360043200541df006a20032d00003a0000200541d7006a2002290300370000200541" + "cf006a200129030037000020052005290320370047419a80c000410c200541406b41204101" + "10011a0c020b418b80c000410f2004ac10001a2001200420054180016a4114100322014114" + "47044041a680c0004115417f20012001417f4e1b2201ac10001a200041013a000020002001" + "3602040c030b200541c2006a20054182016a2d00003a000020052005290087013703602005" + "2005418c016a290000370065200520052f0080013b01402005200529036037032020052005" + "2900653700252005200528008301360043200541cc006a2005290025370000200520052903" + "20370047419a80c000410c200541406b4114410110011a0c010b41bb80c00041072001ac10" + "001a200041013a0000200020013602040c010b20004180023b01000b200541a0016a24000b" + "8b2a02087f027e23004180076b2200240041d880c000412341014100410010011a02402000" + "027f02404181802020004188016a22024114100422014114460440200041066a2000418a01" + "6a22032d00003a00002000200029008f013703e001200020004194016a22042900003700e5" + "01200020002f0088013b0104200020002903e0013703d806200020002900e5013700dd0620" + "00200028008b01360007200041106a20002900dd06370000200020002903d80637000b41fb" + "80c0004108200041046a2205411410051a4183802020024114100422014114470d03200041" + "1a6a20032d00003a00002000200029008f013703e001200020042900003700e50120002000" + "2f0088013b0118200020002903e0013703d806200020002900e5013700dd06200020002800" + "8b0136001b200041246a20002900dd06370000200020002903d80637001f418381c000410c" + "200041186a411410051a200041a0016a2203420037030020004198016a2204420037030020" + "004190016a420037030020004200370388012005411420024120100622014120460d010240" + "20014100480440200020013602300c010b2000417f3602300b41010c020b0c020b200041c5" + "006a20032903003700002000413d6a2004290300370000200041356a20004190016a290300" + "370000200020002903880137002d41000b3a002c20004188016a2000412c6a418f81c00041" + "07418180201018024020002d0088014101460440200028028c01210141878ac00041124205" + "10001a0c010b41002101419681c000413541014100410010011a200041de006a41c4003a00" + "00200041d8006a4100360200200041e3006a41003a0000200041d5a6013b015c2000420037" + "03502000410036005f200041a0016a2203420037030020004198016a220442003703002000" + "4190016a2205420037030020004200370388010240200041046a4114200041186a41142000" + "41d0006a411420004188016a41201007220241204704400240200241004804402000200236" + "02680c010b2000417f3602680b410121010c010b200041fd006a2003290300370000200041" + "f5006a2004290300370000200041ed006a200529030037000020002000290388013700650b" + "200020013a006420004188016a200041e4006a41cb81c00041094100101820002d00880141" + "01460440200028028c01210141878ac0004112420510001a0c010b41d481c0004137410141" + "00410010011a200041f0016a200041286a2203280100360200200041e8016a200041206a22" + "04290100370300200041fc016a200041d8006a290300220837020020004184026a200041e0" + "006a2802002202360200200020002901183703e0012000200029035022093702f401200041" + "e8066a22012002360200200041e0066a22022008370300200020093703d806200041f4066a" + "2004290100370200200041fc066a2003280100360200200020002901183702ec0620004188" + "026a200041d8066a22034128101a2000418c016a200041e0016a41d000101a200041013602" + "8801200041f0066a220442003703002001420037030020024200370300200042003703d806" + "2000027f41998ac0004114200041b4016a4128200341201008220341204704400240200341" + "00480440200020033602e4010c010b2000417f3602e4010b41010c010b200041f9016a2004" + "290300370000200041f1016a2001290300370000200041e9016a2002290300370000200020" + "002903d8063700e10141000b3a00e001200041b4026a200041e0016a418b82c00041034181" + "8020101820002d00b402410146044020002802b802210141878ac0004112420610001a0c01" + "0b41002101418e82c000413141014100410010011a200041808080303602d806200041f801" + "6a22034200370300200041f0016a22044200370300200041e8016a22054200370300200042" + "003703e0010240200041046a4114200041d8066a4104200041e0016a412010092202412047" + "0440024020024100480440200020023602c0020c010b2000417f3602c0020b410121010c01" + "0b200041d5026a2003290300370000200041cd026a2004290300370000200041c5026a2005" + "290300370000200020002903e0013700bd020b200020013a00bc02200041e0016a200041bc" + "026a41bf82c000410541818020101820002d00e001410146044020002802e401210141878a" + "c0004112420610001a0c010b4100210141c482c000413341014100410010011a200041f801" + "6a22034200370300200041f0016a22044200370300200041e8016a22054200370300200042" + "003703e0010240200041046a220241142002411441f782c0004112200041e0016a4120100a" + "22024120470440024020024100480440200020023602e4020c010b2000417f3602e4020b41" + "0121010c010b200041f9026a2003290300370000200041f1026a2004290300370000200041" + "e9026a2005290300370000200020002903e0013700e1020b200020013a00e002200041e001" + "6a200041e0026a418983c000410a41988020101820002d00e001410146044020002802e401" + "210141878ac0004112420710001a0c010b41002101419383c000413841014100410010011a" + "200041f8016a22034200370300200041f0016a22044200370300200041e8016a2205420037" + "0300200042003703e0010240200041046a4114200041186a4114200041e0016a4120100b22" + "02412047044002402002410048044020002002360288030c010b2000417f360288030b4101" + "21010c010b2000419d036a200329030037000020004195036a20042903003700002000418d" + "036a2005290300370000200020002903e001370085030b200020013a008403200041e0016a" + "20004184036a41cb83c000410841818020101820002d00e001410146044020002802e40121" + "0141878ac0004112420810001a0c010b41d383c000413641014100410010011a230041206b" + "22012400200141186a22044200370300200141106a22054200370300200141086a22064200" + "37030020014200370300200041a8036a2202027f200041046a4114200041186a4114200141" + "20100c22034120470440024020034100480440200220033602040c010b2002417f3602040b" + "41010c010b20022001290300370001200241196a2004290300370000200241116a20052903" + "00370000200241096a200629030037000041000b3a0000200141206a2400200041e0016a20" + "02418984c000410e41818020101820002d00e001410146044020002802e401210141878ac0" + "004112420910001a0c010b419784c000413c41014100410010011a230041206b2201240020" + "0141186a22044200370300200141106a22054200370300200141086a220642003703002001" + "4200370300200041cc036a2202027f200041046a411420014120100d220341204704400240" + "20034100480440200220033602040c010b2002417f3602040b41010c010b20022001290300" + "370001200241196a2004290300370000200241116a2005290300370000200241096a200629" + "030037000041000b3a0000200141206a2400200041e0016a200241d384c000410341818020" + "101820002d00e001410146044020002802e401210141878ac0004112420a10001a0c010b41" + "d684c000413141014100410010011a230041306b22012400200141808080d80036020c2001" + "41286a22044200370300200141206a22054200370300200141186a22064200370300200142" + "00370310200041f0036a2202027f200041046a41142001410c6a4104200141106a4120100e" + "22034120470440024020034100480440200220033602040c010b2002417f3602040b41010c" + "010b20022001290310370001200241196a2004290300370000200241116a20052903003700" + "00200241096a200629030037000041000b3a0000200141306a2400200041e0016a20024187" + "85c000410641818020101820002d00e001410146044020002802e401210141878ac0004112" + "420b10001a0c010b418d85c000413441014100410010011a230041306b2201240020014180" + "8080e00036020c200141286a22044200370300200141206a22054200370300200141186a22" + "0642003703002001420037031020004194046a2202027f200041046a41142001410c6a4104" + "200141106a4120100f22034120470440024020034100480440200220033602040c010b2002" + "417f3602040b41010c010b20022001290310370001200241196a2004290300370000200241" + "116a2005290300370000200241096a200629030037000041000b3a0000200141306a240020" + "0041f4016a200041146a280100360200200041ec016a2000410c6a29010037020020002000" + "2901043702e401200041808080e0003602e001200041d8066a200241c185c000410b418480" + "20101820002d00d806410146044020002802dc06210141878ac0004112420c10001a0c010b" + "41cc85c000413941014100410010011a230041206b22012400200141186a22044200370300" + "200141106a22054200370300200141086a2206420037030020014200370300200041b8046a" + "2202027f200041e0016a4118200041186a4114200141201010220341204704400240200341" + "00480440200220033602040c010b2002417f3602040b41010c010b20022001290300370001" + "200241196a2004290300370000200241116a2005290300370000200241096a200629030037" + "000041000b3a0000200141206a2400200041d8066a2002418586c000410741818020101820" + "002d00d806410146044020002802dc06210141878ac0004112420d10001a0c010b418c86c0" + "00413541014100410010011a230041306b220124002001418080803036020c200141286a22" + "044200370300200141206a22054200370300200141186a2206420037030020014200370310" + "200041dc046a2202027f200041186a41142001410c6a4104200141106a4120101122034120" + "470440024020034100480440200220033602040c010b2002417f3602040b41010c010b2002" + "2001290310370001200241196a2004290300370000200241116a2005290300370000200241" + "096a200629030037000041000b3a0000200141306a2400200041d8066a200241c186c00041" + "0c41828020101820002d00d806410146044020002802dc06210141878ac0004112420d1000" + "1a0c010b41cd86c000413a41014100410010011a230041306b22012400200141808080e800" + "36020c200141286a22044200370300200141206a22054200370300200141186a2206420037" + "03002001420037031020004180056a2202027f200041046a41142001410c6a410420014110" + "6a4120101222034120470440024020034100480440200220033602040c010b2002417f3602" + "040b41010c010b20022001290310370001200241196a2004290300370000200241116a2005" + "290300370000200241096a200629030037000041000b3a0000200141306a2400200041d806" + "6a2002418787c000410541818020101820002d00d806410146044020002802dc0621014187" + "8ac0004112420d10001a0c010b418c87c000413341014100410010011a230041306b220124" + "00200141808080f00036020c200141286a22044200370300200141206a2205420037030020" + "0141186a2206420037030020014200370310200041a4056a2202027f200041046a41142000" + "41186a41142001410c6a4104200141106a4120101322034120470440024020034100480440" + "200220033602040c010b2002417f3602040b41010c010b2002200129031037000120024119" + "6a2004290300370000200241116a2005290300370000200241096a20062903003700004100" + "0b3a0000200141306a2400200041d8066a200241bf87c000410a41818020101820002d00d8" + "06410146044020002802dc06210141878ac0004112420e10001a0c010b41c987c000413841" + "014100410010011a230041306b22012400200141808080f80036020c200141286a22044200" + "370300200141206a22054200370300200141186a2206420037030020014200370310200041" + "c8056a2202027f200041046a41142001410c6a4104200141106a4120101422034120470440" + "024020034100480440200220033602040c010b2002417f3602040b41010c010b2002200129" + "0310370001200241196a2004290300370000200241116a2005290300370000200241096a20" + "0629030037000041000b3a0000200141306a2400200041d8066a2002418188c00041124182" + "8020101820002d00d806410146044020002802dc06210141878ac0004112420f10001a0c01" + "0b419388c00041c00041014100410010011a230041206b22012400200141186a2204420037" + "0300200141106a22054200370300200141086a2206420037030020014200370300200041ec" + "056a2202027f200041046a4114200141201015220341204704400240200341004804402002" + "20033602040c010b2002417f3602040b41010c010b20022001290300370001200241196a20" + "04290300370000200241116a2005290300370000200241096a200629030037000041000b3a" + "0000200141206a2400200041d8066a200241d388c000410a4100101820002d00d806410146" + "044020002802dc06210141878ac0004112421010001a0c010b41dd88c00041384101410041" + "0010011a230041306b22012400200141808080900136020c200141286a2204420037030020" + "0141206a22054200370300200141186a220642003703002001420037031020004190066a22" + "02027f200041046a41142001410c6a4104200141106a412010162203412047044002402003" + "4100480440200220033602040c010b2002417f3602040b41010c010b200220012903103700" + "01200241196a2004290300370000200241116a2005290300370000200241096a2006290300" + "37000041000b3a0000200141306a2400200041d8066a2002419589c0004106418180201018" + "20002d00d806410146044020002802dc06210141878ac0004112421210001a0c010b410121" + "01419b89c000413441014100410010011a230041306b22022400200241808080980136020c" + "200241286a22054200370300200241206a22064200370300200241186a2207420037030020" + "024200370310200041b4066a2203027f200041046a41142002410c6a4104200241106a4120" + "101722044120470440024020044100480440200320043602040c010b2003417f3602040b41" + "010c010b20032002290310370001200341196a2005290300370000200341116a2006290300" + "370000200341096a200729030037000041000b3a0000200241306a2400200041d8066a2003" + "41cf89c000410541818020101820002d00d806410146044020002802dc06210141878ac000" + "4112421310001a0c010b41d489c000413341014100410010011a0b20004180076a24002001" + "0f0b418080c000410b417f20012001417f4e1bac1000000bfd0401067f200241104f044002" + "4020002000410020006b41037122056a22044f0d0020012103200504402005210603402000" + "20032d00003a0000200341016a2103200041016a2100200641016b22060d000b0b20054101" + "6b4107490d000340200020032d00003a0000200041016a200341016a2d00003a0000200041" + "026a200341026a2d00003a0000200041036a200341036a2d00003a0000200041046a200341" + "046a2d00003a0000200041056a200341056a2d00003a0000200041066a200341066a2d0000" + "3a0000200041076a200341076a2d00003a0000200341086a2103200041086a22002004470d" + "000b0b2004200220056b2207417c7122086a21000240200120056a22064103714504402000" + "20044d0d0120062101034020042001280200360200200141046a2101200441046a22042000" + "490d000b0c010b200020044d0d002006410374220541187121032006417c71220241046a21" + "01410020056b41187121052002280200210203402004200220037620012802002202200574" + "72360200200141046a2101200441046a22042000490d000b0b20074103712102200620086a" + "21010b02402000200020026a22064f0d002002410771220304400340200020012d00003a00" + "00200141016a2101200041016a2100200341016b22030d000b0b200241016b4107490d0003" + "40200020012d00003a0000200041016a200141016a2d00003a0000200041026a200141026a" + "2d00003a0000200041036a200141036a2d00003a0000200041046a200141046a2d00003a00" + "00200041056a200141056a2d00003a0000200041066a200141066a2d00003a000020004107" + "6a200141076a2d00003a0000200141086a2101200041086a22002006470d000b0b0b0ba30a" + "0100418080c0000b990a6572726f725f636f64653d47657474696e67206669656c643a2046" + "69656c6420646174613a204572726f722067657474696e67206669656c643a204572726f72" + "3a204572726f722067657474696e67206b65796c65743a202424242424205354415254494e" + "47205741534d20455845435554494f4e2024242424244163636f756e743a44657374696e61" + "74696f6e3a4163636f756e744163636f756e74206f626a656374206578697374732c207072" + "6f63656564696e67207769746820657363726f772066696e6973682e54727573746c696e65" + "54727573746c696e65206f626a656374206578697374732c2070726f63656564696e672077" + "69746820657363726f772066696e6973682e414d4d414d4d206f626a656374206578697374" + "732c2070726f63656564696e67207769746820657363726f772066696e6973682e43686563" + "6b436865636b206f626a656374206578697374732c2070726f63656564696e672077697468" + "20657363726f772066696e6973682e7465726d73616e64636f6e646974696f6e7343726564" + "656e7469616c43726564656e7469616c206f626a656374206578697374732c2070726f6365" + "6564696e67207769746820657363726f772066696e6973682e44656c656761746544656c65" + "67617465206f626a656374206578697374732c2070726f63656564696e6720776974682065" + "7363726f772066696e6973682e4465706f736974507265617574684465706f736974507265" + "61757468206f626a656374206578697374732c2070726f63656564696e6720776974682065" + "7363726f772066696e6973682e444944444944206f626a656374206578697374732c207072" + "6f63656564696e67207769746820657363726f772066696e6973682e457363726f77457363" + "726f77206f626a656374206578697374732c2070726f63656564696e672077697468206573" + "63726f772066696e6973682e4d505449737375616e63654d505449737375616e6365206f62" + "6a656374206578697374732c2070726f63656564696e67207769746820657363726f772066" + "696e6973682e4d50546f6b656e4d50546f6b656e206f626a656374206578697374732c2070" + "726f63656564696e67207769746820657363726f772066696e6973682e4e46546f6b656e4f" + "666665724e46546f6b656e4f66666572206f626a656374206578697374732c2070726f6365" + "6564696e67207769746820657363726f772066696e6973682e4f666665724f66666572206f" + "626a656374206578697374732c2070726f63656564696e67207769746820657363726f7720" + "66696e6973682e5061794368616e6e656c5061794368616e6e656c206f626a656374206578" + "697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e50" + "65726d697373696f6e6564446f6d61696e5065726d697373696f6e6564446f6d61696e206f" + "626a656374206578697374732c2070726f63656564696e67207769746820657363726f7720" + "66696e6973682e5369676e65724c6973745369676e65724c697374206f626a656374206578" + "697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e54" + "69636b65745469636b6574206f626a656374206578697374732c2070726f63656564696e67" + "207769746820657363726f772066696e6973682e5661756c745661756c74206f626a656374" "206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973" - "682e4d505449737375616e63654d505449737375616e6365206f626a656374206578697374" - "732c2070726f63656564696e67207769746820657363726f772066696e6973682e4d50546f" - "6b656e4d50546f6b656e206f626a656374206578697374732c2070726f63656564696e6720" - "7769746820657363726f772066696e6973682e4e46546f6b656e4f666665724e46546f6b65" - "6e4f66666572206f626a656374206578697374732c2070726f63656564696e672077697468" - "20657363726f772066696e6973682e4f666665724f66666572206f626a6563742065786973" - "74732c2070726f63656564696e67207769746820657363726f772066696e6973682e506179" - "4368616e6e656c5061794368616e6e656c206f626a656374206578697374732c2070726f63" - "656564696e67207769746820657363726f772066696e6973682e5065726d697373696f6e65" - "64446f6d61696e5065726d697373696f6e6564446f6d61696e206f626a6563742065786973" - "74732c2070726f63656564696e67207769746820657363726f772066696e6973682e536967" - "6e65724c6973745369676e65724c697374206f626a656374206578697374732c2070726f63" - "656564696e67207769746820657363726f772066696e6973682e5469636b65745469636b65" - "74206f626a656374206578697374732c2070726f63656564696e6720776974682065736372" - "6f772066696e6973682e5661756c745661756c74206f626a656374206578697374732c2070" - "726f63656564696e67207769746820657363726f772066696e6973682e43757272656e7420" - "7365712076616c75653a004d0970726f64756365727302086c616e67756167650104527573" - "74000c70726f6365737365642d6279010572757374631d312e38352e312028346562313631" - "32353020323032352d30332d313529002c0f7461726765745f6665617475726573022b0f6d" - "757461626c652d676c6f62616c732b087369676e2d657874"; + "682e43757272656e74207365712076616c75653a004d0970726f64756365727302086c616e" + "6775616765010452757374000c70726f6365737365642d6279010572757374631d312e3837" + "2e30202831373036376539616320323032352d30352d303929002c0f7461726765745f6665" + "617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const codecovTestsWasmHex = - "0061736d0100000001570b60047f7f7f7f017f60057f7f7f7f7f017f60027f7f017f60067f" - "7f7f7f7f7f017f60077f7f7f7f7f7f7f017f6000017f60037f7f7f017f60017f017f60087f" - "7f7f7f7f7f7f7f017f60037f7f7e017f60047f7f7f7f0002990d3c08686f73745f6c696205" - "7472616365000108686f73745f6c69620974726163655f6e756d000908686f73745f6c6962" - "0e6765745f6c65646765725f73716e000508686f73745f6c6962166765745f706172656e74" - "5f6c65646765725f74696d65000508686f73745f6c6962166765745f706172656e745f6c65" - "646765725f68617368000208686f73745f6c69620c6765745f626173655f66656500050868" - "6f73745f6c696211616d656e646d656e745f656e61626c6564000208686f73745f6c69620c" - "6765745f74785f6669656c64000608686f73745f6c69620e6163636f756e745f6b65796c65" - "74000008686f73745f6c69621063616368655f6c65646765725f6f626a000608686f73745f" - "6c69621c6765745f63757272656e745f6c65646765725f6f626a5f6669656c64000608686f" - "73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000008686f73745f6c69" - "62136765745f74785f6e65737465645f6669656c64000008686f73745f6c6962236765745f" - "63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64000008686f73" - "745f6c69621b6765745f6c65646765725f6f626a5f6e65737465645f6669656c6400010868" - "6f73745f6c6962106765745f74785f61727261795f6c656e000708686f73745f6c69622067" - "65745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e000708686f73" - "745f6c6962186765745f6c65646765725f6f626a5f61727261795f6c656e000208686f7374" - "5f6c6962176765745f74785f6e65737465645f61727261795f6c656e000208686f73745f6c" - "6962276765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261" - "795f6c656e000208686f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465" - "645f61727261795f6c656e000608686f73745f6c69620b7570646174655f64617461000208" - "686f73745f6c696213636f6d707574655f7368613531325f68616c66000008686f73745f6c" - "696209636865636b5f736967000308686f73745f6c6962076765745f6e6674000308686f73" - "745f6c69620e6765745f6e66745f697373756572000008686f73745f6c69620d6765745f6e" - "66745f7461786f6e000008686f73745f6c69620d6765745f6e66745f666c61677300020868" - "6f73745f6c6962146765745f6e66745f7472616e736665725f666565000208686f73745f6c" - "69620e6765745f6e66745f73657269616c000008686f73745f6c69620d74726163655f6163" - "636f756e74000008686f73745f6c69620c74726163655f616d6f756e74000008686f73745f" - "6c69620f666c6f61745f66726f6d5f75696e74000108686f73745f6c69620b6c696e655f6b" - "65796c6574000808686f73745f6c69620a616d6d5f6b65796c6574000308686f73745f6c69" - "621163726564656e7469616c5f6b65796c6574000808686f73745f6c69620e6d70746f6b65" - "6e5f6b65796c6574000308686f73745f6c69621274726163655f6f70617175655f666c6f61" - "74000008686f73745f6c69620d666c6f61745f636f6d70617265000008686f73745f6c6962" - "09666c6f61745f616464000408686f73745f6c69620e666c6f61745f737562747261637400" - "0408686f73745f6c69620e666c6f61745f6d756c7469706c79000408686f73745f6c69620c" - "666c6f61745f646976696465000408686f73745f6c69620a666c6f61745f726f6f74000308" - "686f73745f6c696209666c6f61745f706f77000308686f73745f6c696209666c6f61745f6c" - "6f67000108686f73745f6c69620c636865636b5f6b65796c6574000108686f73745f6c6962" - "0f64656c65676174655f6b65796c6574000308686f73745f6c6962166465706f7369745f70" - "7265617574685f6b65796c6574000308686f73745f6c69620a6469645f6b65796c65740000" - "08686f73745f6c69620d657363726f775f6b65796c6574000108686f73745f6c6962136d70" - "745f69737375616e63655f6b65796c6574000108686f73745f6c6962106e66745f6f666665" - "725f6b65796c6574000108686f73745f6c69620c6f666665725f6b65796c6574000108686f" - "73745f6c69620d6f7261636c655f6b65796c6574000108686f73745f6c69620e7061796368" - "616e5f6b65796c6574000408686f73745f6c69621a7065726d697373696f6e65645f646f6d" - "61696e5f6b65796c6574000108686f73745f6c69620e7369676e6572735f6b65796c657400" - "0008686f73745f6c69620d7469636b65745f6b65796c6574000108686f73745f6c69620c76" - "61756c745f6b65796c657400010303020a0505030100110619037f01418080c0000b7f0041" - "a99ec0000b7f0041b09ec0000b072e04066d656d6f727902000666696e697368003d0a5f5f" - "646174615f656e6403010b5f5f686561705f6261736503020aeb2602460002402000200147" - "04402002200341004100410010001a20004100480d01418b80c000410b2000ad1001000b20" - "0220032000ac10011a0f0b418b80c000410b2000ac1001000ba126020a7f017e230041f001" - "6b22002400419680c000412341004100410010001a100241b9e00041b980c000410e103c10" - "0341b2920441c780c0004116103c200041f0006a22054200370300200041e8006a22064200" - "370300200041e0006a2203420037030020004200370358200041d8006a2201412010044120" - "41d88cc0004116103c1005410a41dd80c000410c103c200041186a2207428182848890a0c0" - "8001370300200041106a2208428182848890a0c08001370300200041086a22094281828488" - "90a0c080013703002000428182848890a0c0800137030041e980c000410e1006410141f780" - "c0004111103c200041201006410141f780c0004111103c4181802020014114100722024114" - "4604400240200041266a200041da006a2d00003a00002000200029005f3703c80120002000" - "41e4006a2900003700cd01200041306a20002900cd01370000200020002f00583b01242000" - "200028005b360027200020002903c80137002b200542003703002006420037030020034200" - "37030020004200370358200041246a2205411420014120100822024120470d002000413a6a" - "20002d005a3a0000200041d0016a2202200041e7006a290000220a370300200041c7006a20" - "0a370000200041cf006a200041ef006a290000370000200041d7006a200041f7006a2d0000" - "3a0000200020002f01583b01382000200028005b36003b2000200029005f37003f20004138" - "6a4120410010094101418881c0004110103c20064100360200200342003703002000420037" - "03584181802020014114100a411441ee8cc000411c103c2006410036020020034200370300" - "2000420037035841014181802020014114100b4114418a8dc0004114103c20004104360298" - "01200041818020360258200041d8016a2203410036020020024200370300200042003703c8" - "0120014104200041c8016a22064114100c4114419e8dc0004113103c200341003602002002" - "4200370300200042003703c801200120002802980120064114100d411441b18dc000412310" - "3c2003410036020020024200370300200042003703c8014101200120002802980120064114" - "100e411441d48dc000411b103c4189803c100f4120419881c0004110103c4189803c101041" - "2041a881c0004120103c41014189803c1011412041c881c0004118103c2001200028029801" - "1012412041e081c0004117103c20012000280298011013412041f781c0004127103c410120" - "0120002802980110144120419e82c000411f103c200541141015411441bd82c000410b103c" - "200041e0016a220442003703002003420037030020024200370300200042003703c8012001" - "200028029801200641201016412041ef8dc0004113103c41c882c000410c41d482c000410b" - "41df82c000410e1017410141ed82c0004109103c200041b8016a2007290300370300200041" - "b0016a2008290300370300200041a8016a2009290300370300200020002903003703a00120" - "0341003b010020024200370300200042003703c80120054114200041a0016a220741202006" - "41121018411241828ec0004107103c2003410036020020024200370300200042003703c801" - "20074120200641141019411441898ec000410e103c200041003602c8012007412020064104" - "101a410441978ec000410d103c20074120101b410841f682c000410d103c20074120101c41" - "0a418383c0004114103c200041003602c8012007412020064104101d410441a48ec000410e" - "103c419783c000410d20054114101e410041a483c000410d103c419783c000410d41b183c0" - "004108101f410041b983c000410c103c419783c000410d41c583c0004108101f410041cd83" - "c0004111103c417f41041004417141de83c000411e103c200041003602c8012006417f1004" - "417141b28ec000411e103c200041ca016a41003a0000200041003b01c80120064103100441" - "7d41d08ec0004124103c200041003602c8012006418094ebdc031004417341f48ec0004123" - "103c200442003703002003420037030020024200370300200042003703c801200041d894eb" - "dc036a220741082006412041001020417341978fc0004117103c2004420037030020034200" - "37030020024200370300200042003703c80120012000280298012006412041001020417141" - "ae8fc0004119103c4102100f416f41fc83c000411f103c417f20002802980110124171419b" - "84c000411f103c2001417f1012417141ba84c000411f103c20014181201012417441d984c0" - "004120103c20072000280298011012417341f984c000411f103c2007200028029801410110" - "094173419885c0004118103c200120002802980141011009417141b085c000411a103c2004" - "42003703002003420037030020024200370300200042003703c80120072000280298012006" - "41201008417341c78fc0004116103c20044200370300200342003703002002420037030020" - "0042003703c8012001200028029801200641201008417141dd8fc0004118103c2004420037" - "03002003420037030020024200370300200042003703c80120054114200541142007200028" - "029801200641201021417341f58fc000411c103c2004420037030020034200370300200242" - "00370300200042003703c80120054114200541142001200028029801200641201021417141" - "9190c000411e103c200442003703002003420037030020024200370300200042003703c801" - "41959ec00041142007200028029801200641201022417341af90c0004119103c2004420037" - "03002003420037030020024200370300200042003703c80141959ec0004114200120002802" - "9801200641201022417141c890c000411f103c200442003703002003420037030020024200" - "370300200042003703c80141959ec000411441ca85c0004114200641201022417141e790c0" - "004129103c200442003703002003420037030020024200370300200042003703c80141de85" - "c000412841959ec00041142006412010224171419091c0004125103c200041dc016a200041" - "346a280100360200200041d4016a2000412c6a290100370200200020002901243702cc0120" - "0041808080083602c801200041003b01c0012006411841959ec0004114200041c0016a2203" - "41021022417141b591c000410e103c2007200028029801422a10014173418686c000411110" - "3c200041003b01c0014102200341021007416f41c391c000411b103c200041003b01c00141" - "0220034102100a416f41de91c000412b103c200041003b01c0014101410220034102100b41" - "6f418992c0004123103c4102100f416f41fc83c000411f103c41021010416f419786c00041" - "2f103c410141021011416f41c686c0004127103c41e980c0004181201006417441ed86c000" - "411f103c41e980c00041c10010064174418c87c000411a103c200041003b01c00120014181" - "2020034102100c417441ac92c0004121103c200041003b01c001200141812020034102100d" - "417441cd92c0004131103c200041003b01c0014101200141812020034102100e417441fe92" - "c0004129103c20014181201012417441a687c0004125103c20014181201013417441cb87c0" - "004135103c4101200141812010144174418088c000412d103c20014181201015417441ad88" - "c0004119103c419783c00041812041d482c000410b41df82c000410e1017417441ed82c000" - "4109103c419783c000410d41d482c00041812041df82c000410e1017417441ed82c0004109" - "103c419783c000410d41d482c000410b41df82c0004181201017417441ed82c0004109103c" - "200041003b01c0012001418120200341021016417441a793c0004121103c200041003b01c0" - "0141959ec00041812041959ec0004114200341021022417441c893c0004118103c20004100" - "3b01c00120054114200541142001418120200341021023417441e093c000411f103c200041" - "003b01c001200641812020054114200341021024417441ff93c0004122103c419783c00041" - "0d200720002802980141001000417341c688c000410f103c200042d487b6f4c7d4b1c00037" - "00c001419783c000410d200041c095ebdc036a220441081025417341d588c000411c103c41" - "9783c000410d2007200028029801101f417341f188c0004116103c20044108200341081026" - "4173418789c0004118103c200341082004410810264173419f89c0004118103c200041003b" - "01ec012004410820034108200041ec016a2202410241001027417341a194c0004114103c20" - "0041003b01ec0120034108200441082002410241001027417341b594c0004114103c200041" - "003b01ec0120044108200341082002410241001028417341c994c0004119103c200041003b" - "01ec0120034108200441082002410241001028417341e294c0004119103c200041003b01ec" - "0120044108200341082002410241001029417341fb94c0004119103c200041003b01ec0120" - "0341082004410820024102410010294173419495c0004119103c200041003b01ec01200441" - "0820034108200241024100102a417341ad95c0004117103c200041003b01ec012003410820" - "044108200241024100102a417341c495c0004117103c200041003b01ec0120044108410320" - "0241024100102b417341db95c0004114103c200041003b01ec012004410841032002410241" - "00102c417341ef95c0004113103c200041003b01ec0120044108200241024100102d417341" - "8296c0004113103c200120002802980141001009417141b789c0004123103c200041003b01" - "ec012005411420012000280298012002410210184171419596c000411a103c200041003b01" - "ec012001200028029801200241021019417141af96c0004121103c200041003b01ec012001" - "20002802980120024102101a417141d096c0004120103c2001200028029801101b417141da" - "89c0004120103c2001200028029801101c417141fa89c0004127103c200041003602ec0120" - "0120002802980120024104101d417141f096c0004121103c200041003b01ec012001200028" - "0298012002410210084171419197c0004123103c200041003b01ec01200120002802980141" - "0120024102102e417141b497c0004121103c200041003b01ec012001200028029801220420" - "05411420012004200241021023417141d597c0004127103c200041003b01ec012005411420" - "01200028029801220420012004200241021023417141fc97c0004127103c200041003b01ec" - "0120012000280298012005411420024102102f417141a398c0004125103c200041003b01ec" - "0120054114200120002802980120024102102f417141c898c0004125103c200041003b01ec" - "01200120002802980120054114200241021030417141ed98c000412c103c200041003b01ec" - "012005411420012000280298012002410210304171419999c000412c103c200041003b01ec" - "012001200028029801200241021031417141c599c000411f103c200041003b01ec01200120" - "00280298014101200241021032417141e499c0004122103c200041003b01ec012001200028" - "0298012005411441ca85c0004114200241021021417141869ac0004121103c200041003b01" - "ec0120054114200120002802980141ca85c0004114200241021021417141a79ac000412110" - "3c200041003b01ec0120012000280298014101200241021033417141c89ac0004128103c20" - "0041003b01ec01200641182001200028029801200241021024417141f09ac0004123103c20" - "0041003b01ec0120012000280298014101200241021034417141939bc0004125103c200041" - "003b01ec0120012000280298014101200241021035417141b89bc0004121103c200041003b" - "01ec0120012000280298014101200241021036417141d99bc0004122103c200041003b01ec" - "012001200028029801200541144101200241021037417141fb9bc0004124103c200041003b" - "01ec0120054114200120002802980141012002410210374171419f9cc0004124103c200041" - "003b01ec0120012000280298014101200241021038417141c39cc000412f103c200041003b" - "01ec012001200028029801200241021039417141f29cc0004123103c200041003b01ec0120" - "01200028029801410120024102103a417141959dc0004122103c200041003b01ec01200120" - "0028029801410120024102103b417141b79dc0004121103c200041003b01ec012001200028" - "02980141a18ac0004120200241021018417141d89dc000411c103c419783c000410d200120" - "0028029801101e417141c18ac0004122103c419797abdd03410d41a18ac000412041001000" - "417341e38ac0004110103c419797abdd03410d200341081025417341f38ac000411d103c41" - "9797abdd03410d20054114101e417341908bc0004118103c419797abdd03410d41c583c000" - "4108101f417341a88bc0004117103c2001200028029801200141812041001000417441bf8b" - "c000410e103c200141812042011001417441cd8bc0004112103c419783c000418120200341" - "081025417441df8bc000411b103c419783c00041812020054114101e417441fa8bc0004116" - "103c419783c00041812041c583c0004108101f417441908cc0004115103c419783c000410d" - "2001200028029801101f417141a58cc0004119103c200041003b01ec012001200028029801" - "20054114200241021024417141f49dc0004121103c4101410020054114101e410041be8cc0" - "00411a103c200041f0016a240041010f0b0b418080c000410b417f20022002417f4e1bac10" - "01000b0b801e0200418080c0000bde056572726f725f636f64653d54455354204641494c45" - "442424242424205354415254494e47205741534d20455845435554494f4e20242424242467" - "65745f6c65646765725f73716e6765745f706172656e745f6c65646765725f74696d656765" - "745f626173655f666565746573745f616d656e646d656e74616d656e646d656e745f656e61" - "626c656463616368655f6c65646765725f6f626a6765745f74785f61727261795f6c656e67" - "65745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e6765745f6c65" - "646765725f6f626a5f61727261795f6c656e6765745f74785f6e65737465645f6172726179" - "5f6c656e6765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f617272" - "61795f6c656e6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e" - "7570646174655f6461746174657374206d65737361676574657374207075626b6579746573" - "74207369676e6174757265636865636b5f7369676765745f6e66745f666c6167736765745f" - "6e66745f7472616e736665725f66656574657374696e6720747261636574726163655f6163" - "636f756e74400000000000005f74726163655f616d6f756e74400000000000000074726163" - "655f616d6f756e745f7a65726f6765745f706172656e745f6c65646765725f686173685f6e" - "65675f7074726765745f74785f61727261795f6c656e5f696e76616c69645f736669656c64" - "6765745f74785f6e65737465645f61727261795f6c656e5f6e65675f7074726765745f7478" - "5f6e65737465645f61727261795f6c656e5f6e65675f6c656e6765745f74785f6e65737465" - "645f61727261795f6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f617272" - "61795f6c656e5f7074725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f6f" - "6263616368655f6c65646765725f6f626a5f77726f6e675f6c656e55534430303030303030" - "3030303030303030303000418686c0000b8f1874726163655f6e756d5f6f6f625f73747267" - "65745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c" - "69645f736669656c646765745f6c65646765725f6f626a5f61727261795f6c656e5f696e76" - "616c69645f736669656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f" - "736c696365616d656e646d656e745f656e61626c65645f746f6f5f6c6f6e676765745f7478" - "5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6375" - "7272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f" - "5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f6172726179" - "5f6c656e5f746f6f5f6269675f736c6963657570646174655f646174615f746f6f5f626967" - "5f736c69636574726163655f6f6f625f736c69636574726163655f6f70617175655f666c6f" - "61745f6f6f625f736c69636574726163655f616d6f756e745f6f6f625f736c696365666c6f" - "61745f636f6d706172655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f6f" - "625f736c6963653263616368655f6c65646765725f6f626a5f77726f6e675f73697a655f75" - "696e743235366765745f6e66745f666c6167735f77726f6e675f73697a655f75696e743235" - "366765745f6e66745f7472616e736665725f6665655f77726f6e675f73697a655f75696e74" - "32353630303030303030303030303030303030303030303030303030303030303030317472" - "6163655f6163636f756e745f77726f6e675f73697a655f6163636f756e7469647472616365" - "5f6f6f625f737472696e6774726163655f6f70617175655f666c6f61745f6f6f625f737472" - "696e6774726163655f6163636f756e745f6f6f625f737472696e6774726163655f616d6f75" - "6e745f6f6f625f737472696e6774726163655f746f6f5f6c6f6e6774726163655f6e756d5f" - "746f6f5f6c6f6e6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e677472" - "6163655f6163636f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f746f6f5f" - "6c6f6e6774726163655f616d6f756e745f77726f6e675f6c656e67746874726163655f6163" - "636f756e745f636865636b5f646573796e636765745f706172656e745f6c65646765725f68" - "6173686765745f63757272656e745f6c65646765725f6f626a5f6669656c646765745f6c65" - "646765725f6f626a5f6669656c646765745f74785f6e65737465645f6669656c646765745f" - "63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c646765745f6c65" - "646765725f6f626a5f6e65737465645f6669656c64636f6d707574655f7368613531325f68" - "616c666765745f6e66746765745f6e66745f6973737565726765745f6e66745f7461786f6e" - "6765745f6e66745f73657269616c6765745f706172656e745f6c65646765725f686173685f" - "6e65675f6c656e6765745f706172656e745f6c65646765725f686173685f6275665f746f6f" - "5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c656e5f746f6f5f" - "6c6f6e67666c6f61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d" - "5f75696e745f77726f6e675f6c656e6163636f756e745f6b65796c65745f6c656e5f6f6f62" - "6163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c65745f6c" - "656e5f6f6f625f63757272656e63796c696e655f6b65796c65745f77726f6e675f6c656e5f" - "63757272656e6379616d6d5f6b65796c65745f6c656e5f6f6f625f617373657432616d6d5f" - "6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65796c6574" - "5f6c656e5f77726f6e675f6e6f6e5f7872705f63757272656e63795f6c656e616d6d5f6b65" - "796c65745f6c656e5f77726f6e675f7872705f63757272656e63795f6c656e616d6d5f6b65" - "796c65745f6d70746765745f74785f6669656c645f696e76616c69645f736669656c646765" - "745f63757272656e745f6c65646765725f6f626a5f6669656c645f696e76616c69645f7366" - "69656c646765745f6c65646765725f6f626a5f6669656c645f696e76616c69645f73666965" - "6c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765" - "745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c645f746f6f" - "5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f6669656c64" - "5f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68616c665f746f6f" - "5f6269675f736c696365616d6d5f6b65796c65745f746f6f5f6269675f736c696365637265" - "64656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70746f6b656e5f6b" - "65796c65745f746f6f5f6269675f736c6963655f6d70746964666c6f61745f6164645f6f6f" - "625f736c69636531666c6f61745f6164645f6f6f625f736c69636532666c6f61745f737562" - "74726163745f6f6f625f736c69636531666c6f61745f73756274726163745f6f6f625f736c" - "69636532666c6f61745f6d756c7469706c795f6f6f625f736c69636531666c6f61745f6d75" - "6c7469706c795f6f6f625f736c69636532666c6f61745f6469766964655f6f6f625f736c69" - "636531666c6f61745f6469766964655f6f6f625f736c69636532666c6f61745f726f6f745f" - "6f6f625f736c696365666c6f61745f706f775f6f6f625f736c696365666c6f61745f6c6f67" - "5f6f6f625f736c6963656765745f6e66745f77726f6e675f73697a655f75696e7432353667" - "65745f6e66745f6973737565725f77726f6e675f73697a655f75696e743235366765745f6e" - "66745f7461786f6e5f77726f6e675f73697a655f75696e743235366765745f6e66745f7365" - "7269616c5f77726f6e675f73697a655f75696e743235366163636f756e745f6b65796c6574" - "5f77726f6e675f73697a655f6163636f756e746964636865636b5f6b65796c65745f77726f" - "6e675f73697a655f6163636f756e74696463726564656e7469616c5f6b65796c65745f7772" - "6f6e675f73697a655f6163636f756e7469643163726564656e7469616c5f6b65796c65745f" - "77726f6e675f73697a655f6163636f756e7469643264656c65676174655f6b65796c65745f" - "77726f6e675f73697a655f6163636f756e7469643164656c65676174655f6b65796c65745f" - "77726f6e675f73697a655f6163636f756e746964326465706f7369745f707265617574685f" - "6b65796c65745f77726f6e675f73697a655f6163636f756e746964316465706f7369745f70" - "7265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326469" - "645f6b65796c65745f77726f6e675f73697a655f6163636f756e746964657363726f775f6b" - "65796c65745f77726f6e675f73697a655f6163636f756e7469646c696e655f6b65796c6574" - "5f77726f6e675f73697a655f6163636f756e746964316c696e655f6b65796c65745f77726f" - "6e675f73697a655f6163636f756e746964326d70745f69737375616e63655f6b65796c6574" - "5f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f77" - "726f6e675f73697a655f6163636f756e7469646e66745f6f666665725f6b65796c65745f77" - "726f6e675f73697a655f6163636f756e7469646f666665725f6b65796c65745f77726f6e67" - "5f73697a655f6163636f756e7469646f7261636c655f6b65796c65745f77726f6e675f7369" - "7a655f6163636f756e7469647061796368616e5f6b65796c65745f77726f6e675f73697a65" - "5f6163636f756e746964317061796368616e5f6b65796c65745f77726f6e675f73697a655f" - "6163636f756e746964327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f" - "77726f6e675f73697a655f6163636f756e7469647369676e6572735f6b65796c65745f7772" - "6f6e675f73697a655f6163636f756e7469647469636b65745f6b65796c65745f77726f6e67" - "5f73697a655f6163636f756e7469647661756c745f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e7469646765745f6e66745f77726f6e675f73697a655f6163636f756e74" - "69646d70746f6b656e5f6b65796c65745f6d707469645f77726f6e675f6c656e677468004d" - "0970726f64756365727302086c616e6775616765010452757374000c70726f636573736564" - "2d6279010572757374631d312e38372e30202831373036376539616320323032352d30352d" - "303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f6261" - "6c732b087369676e2d657874"; + "0061736d0100000001570b60067f7f7f7f7f7f017f60047f7f7f7f017f60027f7f017f60057f7f7f7f7f017f60037f7f7f017f60077f7f7f7f" + "7f7f7f017f60087f7f7f7f7f7f7f7f017f60017f017f60037f7f7e017f60047f7f7f7f006000017f02990d3c08686f73745f6c696205747261" + "6365000308686f73745f6c69620974726163655f6e756d000808686f73745f6c69620e6765745f6c65646765725f73716e000208686f73745f" + "6c6962166765745f706172656e745f6c65646765725f74696d65000208686f73745f6c6962166765745f706172656e745f6c65646765725f68" + "617368000208686f73745f6c69620c6765745f626173655f666565000208686f73745f6c696211616d656e646d656e745f656e61626c656400" + "0208686f73745f6c69620c6765745f74785f6669656c64000408686f73745f6c69620e6163636f756e745f6b65796c6574000108686f73745f" + "6c69621063616368655f6c65646765725f6f626a000408686f73745f6c69621c6765745f63757272656e745f6c65646765725f6f626a5f6669" + "656c64000408686f73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000108686f73745f6c6962136765745f74785f6e6573" + "7465645f6669656c64000108686f73745f6c6962236765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c6400" + "0108686f73745f6c69621b6765745f6c65646765725f6f626a5f6e65737465645f6669656c64000308686f73745f6c6962106765745f74785f" + "61727261795f6c656e000708686f73745f6c6962206765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e00070868" + "6f73745f6c6962186765745f6c65646765725f6f626a5f61727261795f6c656e000208686f73745f6c6962176765745f74785f6e6573746564" + "5f61727261795f6c656e000208686f73745f6c6962276765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6172726179" + "5f6c656e000208686f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e000408686f73745f6c69" + "620b7570646174655f64617461000208686f73745f6c696213636f6d707574655f7368613531325f68616c66000108686f73745f6c69620963" + "6865636b5f736967000008686f73745f6c6962076765745f6e6674000008686f73745f6c69620e6765745f6e66745f69737375657200010868" + "6f73745f6c69620d6765745f6e66745f7461786f6e000108686f73745f6c69620d6765745f6e66745f666c616773000208686f73745f6c6962" + "146765745f6e66745f7472616e736665725f666565000208686f73745f6c69620e6765745f6e66745f73657269616c000108686f73745f6c69" + "620d74726163655f6163636f756e74000108686f73745f6c69620c74726163655f616d6f756e74000108686f73745f6c69620c636865636b5f" + "6b65796c6574000008686f73745f6c69620f666c6f61745f66726f6d5f75696e74000308686f73745f6c69620b6c696e655f6b65796c657400" + "0608686f73745f6c69620a616d6d5f6b65796c6574000008686f73745f6c69621163726564656e7469616c5f6b65796c6574000608686f7374" + "5f6c69620e6d70746f6b656e5f6b65796c6574000008686f73745f6c69621274726163655f6f70617175655f666c6f6174000108686f73745f" + "6c69620d666c6f61745f636f6d70617265000108686f73745f6c696209666c6f61745f616464000508686f73745f6c69620e666c6f61745f73" + "75627472616374000508686f73745f6c69620e666c6f61745f6d756c7469706c79000508686f73745f6c69620c666c6f61745f646976696465" + "000508686f73745f6c69620a666c6f61745f726f6f74000008686f73745f6c696209666c6f61745f706f77000008686f73745f6c696209666c" + "6f61745f6c6f67000308686f73745f6c69620d657363726f775f6b65796c6574000008686f73745f6c6962136d70745f69737375616e63655f" + "6b65796c6574000008686f73745f6c6962106e66745f6f666665725f6b65796c6574000008686f73745f6c69620c6f666665725f6b65796c65" + "74000008686f73745f6c69620d6f7261636c655f6b65796c6574000008686f73745f6c69620e7061796368616e5f6b65796c6574000608686f" + "73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c6574000008686f73745f6c69620d7469636b65745f6b65796c65" + "74000008686f73745f6c69620c7661756c745f6b65796c6574000008686f73745f6c69620f64656c65676174655f6b65796c6574000008686f" + "73745f6c6962166465706f7369745f707265617574685f6b65796c6574000008686f73745f6c69620a6469645f6b65796c6574000108686f73" + "745f6c69620e7369676e6572735f6b65796c65740001030302090a05030100110619037f01418080c0000b7f00418ea1c0000b7f004190a1c0" + "000b072e04066d656d6f727902000666696e697368003d0a5f5f646174615f656e6403010b5f5f686561705f6261736503020aa12c02460002" + "40200020014704402002200341014100410010001a20004100480d01418b80c000410b2000ad1001000b200220032000ac10011a0f0b418b80" + "c000410b2000ac1001000bd72b020a7f017e23004190026b22002400419680c000412341014100410010001a20004100360260200041e0006a" + "220241041002410441a88cc000410e103c20004100360260200241041003410441b68cc0004116103c200041f8006a22044200370300200041" + "f0006a22014200370300200041e8006a2205420037030020004200370360200241201004412041cc8cc0004116103c20004100360260200241" + "041005410441e28cc000410c103c200041106a2207428182848890a0c08001370300200041186a2206428182848890a0c08001370300200041" + "206a2209428182848890a0c080013703002000428182848890a0c0800137030841b980c000410e1006410141c780c0004111103c200041086a" + "41201006410141c780c0004111103c418180202002411410072203411446044002402000412e6a200041e2006a2d00003a0000200020002900" + "673703e8012000200041ec006a2900003700ed01200020002f00603b012c200020002903e8013703a801200020002900ed013700ad01200020" + "0028006336002f200041386a20002900ad01370000200020002903a80137003320044200370300200142003703002005420037030020004200" + "3703602000412c6a2204411420024120100822034120470d00200041c2006a20002d00623a0000200041f0016a2203200041ef006a29000022" + "0a370300200041cf006a200a370000200041d7006a200041f7006a290000370000200041df006a200041ff006a2d00003a0000200020002f01" + "603b01402000200028006336004320002000290067370047200041406b412041001009410141d880c0004110103c2001410036020020054200" + "370300200042003703604181802020024114100a411441ee8cc000411c103c2001410036020020054200370300200042003703604101418180" + "2020024114100b4114418a8dc0004114103c200041043602a001200041818020360260200041f8016a22054100360200200342003703002000" + "42003703e80120024104200041e8016a22014114100c4114419e8dc0004113103c2005410036020020034200370300200042003703e8012002" + "20002802a00120014114100d411441b18dc0004123103c2005410036020020034200370300200042003703e8014101200220002802a0012001" + "4114100e411441d48dc000411b103c4189803c100f412041e880c0004110103c4189803c1010412041f880c0004120103c41014189803c1011" + "4120419881c0004118103c200220002802a0011012412041b081c0004117103c200220002802a0011013412041c781c0004127103c41012002" + "20002802a0011014412041ee81c000411f103c2004411410154114418d82c000410b103c20004180026a220842003703002005420037030020" + "034200370300200042003703e801200220002802a001200141201016412041ef8dc0004113103c419882c000410c41a482c000410b41af82c0" + "00410e1017410141bd82c0004109103c200041c0016a2009290300370300200041b8016a2006290300370300200041b0016a20072903003703" + "00200020002903083703a801200541003b010020034200370300200042003703e80120044114200041a8016a22074120200141121018411241" + "828ec0004107103c2005410036020020034200370300200042003703e80120074120200141141019411441898ec000410e103c200041003602" + "e8012007412020014104101a410441978ec000410d103c20074120101b410841c682c000410d103c20074120101c410a41d382c0004114103c" + "200041003602e8012007412020014104101d410441a48ec000410e103c41e782c000410d20044114101e410041f482c000410d103c41e782c0" + "00410d418183c0004108101f4100418983c000410c103c41e782c000410d419583c0004108101f4100419d83c0004111103c417f4104100441" + "7141ae83c000411e103c200041003602e8012001417f1004417141b28ec000411e103c200041ea016a41003a0000200041003b01e801200141" + "031004417d41d08ec0004124103c200041003602e8012001418094ebdc031004417341f48ec0004123103c4102100f416f41cc83c000411f10" + "3c417f20002802a0011012417141eb83c000411f103c2002417f10124171418a84c000411f103c20024181201012417441a984c0004120103c" + "200041e094ebdc036a220620002802a0011012417341c984c000411f103c200842003703002005420037030020034200370300200042003703" + "e8012004411420064108200141201020417341978fc0004118103c200842003703002005420037030020034200370300200042003703e80120" + "04411420044114200141201020417141af8fc000411a103c200842003703002005420037030020034200370300200042003703e80120064108" + "2001412041001021417341c98fc0004117103c200842003703002005420037030020034200370300200042003703e801200220002802a00120" + "01412041001021417141e08fc0004120103c200620002802a00141011009417341e884c0004118103c200220002802a0014101100941714180" + "85c000411a103c200842003703002005420037030020034200370300200042003703e801200620002802a0012001412010084173418090c000" + "4116103c200842003703002005420037030020034200370300200042003703e801200220002802a0012001412010084171419690c000411810" + "3c200842003703002005420037030020034200370300200042003703e8012004411420044114200620002802a001200141201022417341ae90" + "c000411c103c200842003703002005420037030020034200370300200042003703e8012004411420044114200220002802a001200141201022" + "417141ca90c000411e103c200842003703002005420037030020034200370300200042003703e80141faa0c0004114200620002802a0012001" + "41201023417341e890c0004119103c200842003703002005420037030020034200370300200042003703e80141faa0c0004114200220002802" + "a0012001412010234171418191c000411f103c200842003703002005420037030020034200370300200042003703e80141faa0c0004114419a" + "85c0004114200141201023417141a091c0004129103c200842003703002005420037030020034200370300200042003703e80141ae85c00041" + "2841faa0c0004114200141201023417141c991c0004125103c200041dc016a2000413c6a280100360200200041d4016a200041346a29010037" + "02002000200029012c3702cc01200041808080083602c801200041003b01e801200041c8016a2209411841faa0c00041142001410210234171" + "41ee91c000410e103c200620002802a001422a1001417341d685c0004111103c200041003b01e8014102200141021007416f41fc91c000411b" + "103c200041003b01e801410220014102100a416f419792c000412b103c200041003b01e8014101410220014102100b416f41c292c000412310" + "3c4102100f416f41cc83c000411f103c41021010416f41e785c000412f103c410141021011416f419686c0004127103c41b980c00041812010" + "06417441bd86c000411f103c41b980c00041c1001006417441dc86c000411a103c200041003b01e801200241812020014102100c417441e592" + "c0004121103c200041003b01e801200241812020014102100d4174418693c0004131103c200041003b01e8014101200241812020014102100e" + "417441b793c0004129103c20024181201012417441f686c0004125103c200241812010134174419b87c0004135103c41012002418120101441" + "7441d087c000412d103c20024181201015417441fd87c0004119103c41e782c00041812041a482c000410b41af82c000410e1017417441bd82" + "c0004109103c41e782c000410d41a482c00041812041af82c000410e1017417441bd82c0004109103c41e782c000410d41a482c000410b41af" + "82c0004181201017417441bd82c0004109103c200041003b01e8012002418120200141021016417441e093c0004121103c200041003b01e801" + "41faa0c00041812041faa0c00041142001410210234174418194c0004118103c200041003b01e8012004411420044114200241812020014102" + "10244174419994c000411f103c200041003b01e801200941812020044114200141021025417441b894c0004122103c41e782c000410d200620" + "002802a001410010004173419688c000410f103c200042d487b6f4c7d4b1c0003700e00141e782c000410d200041e095ebdc036a2207410810" + "26417341a588c000411c103c41e782c000410d200620002802a001101f417341c188c0004116103c20074108200041e0016a22064108102741" + "7341d788c0004118103c20064108200741081027417341ef88c0004118103c200041003b01e801200741082006410820014102410010284173" + "41da94c0004114103c200041003b01e80120064108200741082001410241001028417341ee94c0004114103c200041003b01e8012007410820" + "06410820014102410010294173418295c0004119103c200041003b01e801200641082007410820014102410010294173419b95c0004119103c" + "200041003b01e8012007410820064108200141024100102a417341b495c0004119103c200041003b01e8012006410820074108200141024100" + "102a417341cd95c0004119103c200041003b01e8012007410820064108200141024100102b417341e695c0004117103c200041003b01e80120" + "06410820074108200141024100102b417341fd95c0004117103c200041003b01e801200741084103200141024100102c4173419496c0004114" + "103c200041003b01e801200741084103200141024100102d417341a896c0004113103c200041003b01e80120074108200141024100102e4173" + "41bb96c0004113103c200842003703002005420037030020034200370300200042003703e801200441142004411420014120102f417141ce96" + "c000411f103c200842003703002005420037030020034200370300200042003703e8012004411420044114200141201030417141ed96c00041" + "25103c200842003703002005420037030020034200370300200042003703e80120044114200441142001412010314171419297c0004122103c" + "200842003703002005420037030020034200370300200042003703e8012004411420044114200141201032417141b497c000411e103c200842" + "003703002005420037030020034200370300200042003703e8012004411420044114200141201033417141d297c000411f103c200842003703" + "002005420037030020034200370300200042003703e801200441142004411420044114200141201034417141f197c0004120103c2008420037" + "03002005420037030020034200370300200042003703e80120044114200441142001412010354171419198c000412c103c2008420037030020" + "05420037030020034200370300200042003703e8012004411420044114200141201036417141bd98c000411f103c2008420037030020054200" + "37030020034200370300200042003703e8012004411420044114200141201037417141dc98c000411e103c200220002802a001410010094171" + "418789c0004123103c200041003b01e80120044114200220002802a001200141021018417141fa98c000411a103c200041003b01e801200220" + "002802a0012001410210194171419499c0004121103c200041003b01e801200220002802a00120014102101a417141b599c0004120103c2002" + "20002802a001101b417141aa89c0004120103c200220002802a001101c417141ca89c0004127103c200041003602e801200220002802a00120" + "014104101d417141d599c0004121103c200041003b01e801200220002802a001200141021008417141f699c0004123103c2000418080800836" + "02e801200041003b018e02200220002802a001200141042000418e026a220341021020417141999ac0004121103c200041003b018e02200220" + "002802a00122052004411420022005200341021024417141ba9ac0004127103c200041003b018e0220044114200220002802a0012205200220" + "05200341021024417141e19ac0004127103c200041003b018e02200220002802a00120044114200341021038417141889bc0004125103c2000" + "41003b018e0220044114200220002802a001200341021038417141ad9bc0004125103c200041003b018e02200220002802a001200441142003" + "41021039417141d29bc000412c103c200041003b018e0220044114200220002802a001200341021039417141fe9bc000412c103c200041003b" + "018e02200220002802a00120034102103a417141aa9cc000411f103c200041003b018e02200220002802a0012001410420034102102f417141" + "c99cc0004122103c200041003b018e02200220002802a00120044114419a85c0004114200341021022417141eb9cc0004121103c200041003b" + "018e0220044114200220002802a001419a85c00041142003410210224171418c9dc0004121103c200041003b018e02200220002802a0012001" + "4104200341021030417141ad9dc0004128103c200041003b018e0220094118200220002802a001200341021025417141d59dc0004123103c20" + "0041003b018e02200220002802a00120014104200341021031417141f89dc0004125103c200041003b018e02200220002802a0012001410420" + "03410210324171419d9ec0004121103c200041003b018e02200220002802a00120014104200341021033417141be9ec0004122103c20004100" + "3b018e02200220002802a0012004411420014104200341021034417141e09ec0004124103c200041003b018e0220044114200220002802a001" + "20014104200341021034417141849fc0004124103c200041003b018e02200220002802a00120014104200341021035417141a89fc000412f10" + "3c200041003b018e02200220002802a00120034102103b417141d79fc0004123103c200041003b018e02200220002802a00120014104200341" + "021036417141fa9fc0004122103c200041003b018e02200220002802a001200141042003410210374171419ca0c0004121103c200041003b01" + "8e02200220002802a00141f189c0004120200341021018417141bda0c000411c103c41e782c000410d200220002802a001101e417141918ac0" + "004122103c41e796abdd03410d41f189c000412041001000417341b38ac0004110103c41e796abdd03410d200641081026417341c38ac00041" + "1d103c41e796abdd03410d20044114101e417341e08ac0004118103c41e796abdd03410d419583c0004108101f417341f88ac0004117103c20" + "0220002802a0012002418120410010004174418f8bc000410e103c2002418120420110014174419d8bc0004112103c41e782c0004181202006" + "41081026417441af8bc000411b103c41e782c00041812020044114101e417441ca8bc0004116103c41e782c000418120419583c0004108101f" + "417441e08bc0004115103c41e782c000410d200220002802a001101f417141f58bc0004119103c200041003b018e02200220002802a0012004" + "4114200341021025417141d9a0c0004121103c4101410020044114101e4100418e8cc000411a103c20004190026a240041010f0b0b418080c0" + "00410b417f20032003417f4e1bac1001000b0be5200200418080c0000bae056572726f725f636f64653d54455354204641494c454424242424" + "24205354415254494e47205741534d20455845435554494f4e202424242424746573745f616d656e646d656e74616d656e646d656e745f656e" + "61626c656463616368655f6c65646765725f6f626a6765745f74785f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f" + "626a5f61727261795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e6765745f74785f6e65737465645f61727261795f6c" + "656e6765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e" + "65737465645f61727261795f6c656e7570646174655f6461746174657374206d65737361676574657374207075626b65797465737420736967" + "6e6174757265636865636b5f7369676765745f6e66745f666c6167736765745f6e66745f7472616e736665725f66656574657374696e672074" + "7261636574726163655f6163636f756e74400000000000005f74726163655f616d6f756e74400000000000000074726163655f616d6f756e74" + "5f7a65726f6765745f706172656e745f6c65646765725f686173685f6e65675f7074726765745f74785f61727261795f6c656e5f696e76616c" + "69645f736669656c646765745f74785f6e65737465645f61727261795f6c656e5f6e65675f7074726765745f74785f6e65737465645f617272" + "61795f6c656e5f6e65675f6c656e6765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6c6f6e676765745f74785f6e657374" + "65645f61727261795f6c656e5f7074725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f" + "6f626a5f77726f6e675f6c656e55534430303030303030303030303030303030300041d685c0000ba41b74726163655f6e756d5f6f6f625f73" + "74726765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f736669656c646765745f6c656467" + "65725f6f626a5f61727261795f6c656e5f696e76616c69645f736669656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f" + "736c696365616d656e646d656e745f656e61626c65645f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f746f" + "6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269" + "675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963657570646174" + "655f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f736c69636574726163655f6f70617175655f666c6f61745f6f6f62" + "5f736c69636574726163655f616d6f756e745f6f6f625f736c696365666c6f61745f636f6d706172655f6f6f625f736c69636531666c6f6174" + "5f636f6d706172655f6f6f625f736c6963653263616368655f6c65646765725f6f626a5f77726f6e675f73697a655f75696e74323536676574" + "5f6e66745f666c6167735f77726f6e675f73697a655f75696e743235366765745f6e66745f7472616e736665725f6665655f77726f6e675f73" + "697a655f75696e74323536303030303030303030303030303030303030303030303030303030303030303174726163655f6163636f756e745f" + "77726f6e675f73697a655f6163636f756e74696474726163655f6f6f625f737472696e6774726163655f6f70617175655f666c6f61745f6f6f" + "625f737472696e6774726163655f6163636f756e745f6f6f625f737472696e6774726163655f616d6f756e745f6f6f625f737472696e677472" + "6163655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e67" + "74726163655f6163636f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77" + "726f6e675f6c656e67746874726163655f6163636f756e745f636865636b5f646573796e636765745f6c65646765725f73716e6765745f7061" + "72656e745f6c65646765725f74696d656765745f706172656e745f6c65646765725f686173686765745f626173655f6665656765745f637572" + "72656e745f6c65646765725f6f626a5f6669656c646765745f6c65646765725f6f626a5f6669656c646765745f74785f6e65737465645f6669" + "656c646765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f626a5f6e657374" + "65645f6669656c64636f6d707574655f7368613531325f68616c666765745f6e66746765745f6e66745f6973737565726765745f6e66745f74" + "61786f6e6765745f6e66745f73657269616c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e6765745f706172656e" + "745f6c65646765725f686173685f6275665f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c656e5f746f6f" + "5f6c6f6e67636865636b5f6b65796c65745f6f6f625f6c656e5f753332636865636b5f6b65796c65745f77726f6e675f6c656e5f753332666c" + "6f61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d5f75696e745f77726f6e675f6c656e5f75696e7436346163636f" + "756e745f6b65796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c65745f6c656e" + "5f6f6f625f63757272656e63796c696e655f6b65796c65745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e" + "5f6f6f625f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65796c65745f6c656e5f" + "77726f6e675f6e6f6e5f7872705f63757272656e63795f6c656e616d6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272656e" + "63795f6c656e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76616c69645f736669656c646765745f63757272656e" + "745f6c65646765725f6f626a5f6669656c645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c645f696e76" + "616c69645f736669656c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f63757272656e745f6c" + "65646765725f6f626a5f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e6573746564" + "5f6669656c645f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68616c665f746f6f5f6269675f736c696365616d6d5f" + "6b65796c65745f746f6f5f6269675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70746f6b65" + "6e5f6b65796c65745f746f6f5f6269675f736c6963655f6d70746964666c6f61745f6164645f6f6f625f736c69636531666c6f61745f616464" + "5f6f6f625f736c69636532666c6f61745f73756274726163745f6f6f625f736c69636531666c6f61745f73756274726163745f6f6f625f736c" + "69636532666c6f61745f6d756c7469706c795f6f6f625f736c69636531666c6f61745f6d756c7469706c795f6f6f625f736c69636532666c6f" + "61745f6469766964655f6f6f625f736c69636531666c6f61745f6469766964655f6f6f625f736c69636532666c6f61745f726f6f745f6f6f62" + "5f736c696365666c6f61745f706f775f6f6f625f736c696365666c6f61745f6c6f675f6f6f625f736c696365657363726f775f6b65796c6574" + "5f77726f6e675f73697a655f75696e7433326d70745f69737375616e63655f6b65796c65745f77726f6e675f73697a655f75696e7433326e66" + "745f6f666665725f6b65796c65745f77726f6e675f73697a655f75696e7433326f666665725f6b65796c65745f77726f6e675f73697a655f75" + "696e7433326f7261636c655f6b65796c65745f77726f6e675f73697a655f75696e7433327061796368616e5f6b65796c65745f77726f6e675f" + "73697a655f75696e7433327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f75696e7433327469" + "636b65745f6b65796c65745f77726f6e675f73697a655f75696e7433327661756c745f6b65796c65745f77726f6e675f73697a655f75696e74" + "33326765745f6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f6973737565725f77726f6e675f73697a655f75696e" + "743235366765745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e743235366765745f6e66745f73657269616c5f77726f6e675f" + "73697a655f75696e743235366163636f756e745f6b65796c65745f77726f6e675f73697a655f6163636f756e746964636865636b5f6b65796c" + "65745f77726f6e675f73697a655f6163636f756e74696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f75" + "6e7469643163726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469643264656c65676174655f6b65796c" + "65745f77726f6e675f73697a655f6163636f756e7469643164656c65676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e" + "746964326465706f7369745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316465706f7369745f70" + "7265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326469645f6b65796c65745f77726f6e675f73697a655f" + "6163636f756e746964657363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646c696e655f6b65796c65745f7772" + "6f6e675f73697a655f6163636f756e746964316c696e655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326d70745f69" + "737375616e63655f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f77726f6e675f73" + "697a655f6163636f756e7469646e66745f6f666665725f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646f666665725f6b" + "65796c65745f77726f6e675f73697a655f6163636f756e7469646f7261636c655f6b65796c65745f77726f6e675f73697a655f6163636f756e" + "7469647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964317061796368616e5f6b65796c65745f77726f" + "6e675f73697a655f6163636f756e746964327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f61" + "63636f756e7469647369676e6572735f6b65796c65745f77726f6e675f73697a655f6163636f756e7469647469636b65745f6b65796c65745f" + "77726f6e675f73697a655f6163636f756e7469647661756c745f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646765745f" + "6e66745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f6d707469645f77726f6e675f6c656e677468" + "004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d6279010572757374631d312e38372e3020" + "2831373036376539616320323032352d30352d303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c" + "732b087369676e2d657874"; extern std::string const floatTestsWasmHex = "0061736d0100000001430860077f7f7f7f7f7f7f017f60057f7f7f7f7f017f60047f7f7f7f" @@ -921,57 +847,57 @@ extern std::string const floatTestsWasmHex = "00010302010705030100110619037f01418080c0000b7f0041d28ac0000b7f0041e08ac000" "0b072e04066d656d6f727902000666696e697368000e0a5f5f646174615f656e6403010b5f" "5f686561705f6261736503020af20e01ef0e01047f230041206b22012400418080c000411d" - "41004100410010001a200142003703100240428ce000200141106a22004108410010014108" + "41014100410010001a200142003703100240428ce000200141106a22004108410010014108" "460440419d80c00041172000410810021a41b480c000411e20004108410110001a0c010b41" - "d280c000411e41004100410010001a0b2001428ce0003703180240200141186a4108200141" + "d280c000411e41014100410010001a0b2001428ce0003703180240200141186a4108200141" "106a2200410841001003410846044041f080c00041172000410810021a0c010b418781c000" - "411e41004100410010001a0b0240410242fb00200141106a22004108410010044108460440" - "41a581c00041212000410810021a0c010b41c681c000412641004100410010001a0b41ec81" - "c0004115418182c000410810021a418982c0004116419f82c000410810021a41a782c00041" - "1b41004100410010001a2001420037031802404201200141186a2200410841001001410846" - "044041c282c000410f2000410810021a0c010b41d182c000411641004100410010001a0b02" - "40200141186a4108418182c0004108100545044041e782c000411b41004100410010001a0c" - "010b418283c000411b41004100410010001a0b0240200141186a4108419f82c00041081005" - "4101460440419d83c000412341004100410010001a0c010b41c083c0004124410041004100" - "10001a0b0240419f82c0004108200141186a41081005410246044041e483c0004123410041" - "00410010001a0c010b418784c000412441004100410010001a0b41ab84c000412041004100" + "411e41014100410010001a0b0240410242fb00200141106a22004108410010044108460440" + "41a581c00041212000410810021a0c010b41c681c000412641014100410010001a0b41ec81" + "c0004115418182c000410810021a419182c0004116418982c000410810021a41a782c00041" + "1b41014100410010001a2001420037031802404201200141186a2200410841001001410846" + "044041c282c000410f2000410810021a0c010b41d182c000411641014100410010001a0b02" + "40200141186a4108418182c0004108100545044041e782c000411b41014100410010001a0c" + "010b418283c000411b41014100410010001a0b0240200141186a4108418982c00041081005" + "4101460440419d83c000412341014100410010001a0c010b41c083c0004124410141004100" + "10001a0b0240418982c0004108200141186a41081005410246044041e483c0004123410141" + "00410010001a0c010b418784c000412441014100410010001a0b41ab84c000412041014100" "410010001a200142d487b6f4c7d4b1c000370310410921000340200141106a220241084181" "82c000410820024108410010061a200041016b22000d000b20014200370318420a20014118" - "6a22004108410010011a02402000410820024108100545044041cb84c00041144100410041" - "0010001a0c010b41df84c000411341004100410010001a0b410b21000340200141106a2202" - "4108418182c000410820024108410010071a200041016b22000d000b024020024108419f82" - "c0004108100545044041f284c000411941004100410010001a0c010b418b85c00041184100" - "4100410010001a0b41a385c000412341004100410010001a20014200370300420a20014108" + "6a22004108410010011a02402000410820024108100545044041cb84c00041144101410041" + "0010001a0c010b41df84c000411341014100410010001a0b410b21000340200141106a2202" + "4108418182c000410820024108410010071a200041016b22000d000b024020024108418982" + "c0004108100545044041f284c000411941014100410010001a0c010b418b85c00041184101" + "4100410010001a0b41a385c000412341014100410010001a20014200370300420a20014108" "410010011a200142d487b6f4c7d4b1c000370308410621000340200141086a220241082001" "410820024108410010081a200041016b22000d000b2001420037031042c0843d200141106a" - "22004108410010011a02402000410820024108100545044041c685c0004119410041004100" - "10001a0c010b41df85c000411841004100410010001a0b410721000340200141086a220241" + "22004108410010011a02402000410820024108100545044041c685c0004119410141004100" + "10001a0c010b41df85c000411841014100410010001a0b410721000340200141086a220241" "082001410820024108410010091a200041016b22000d000b20014200370318417f42012001" - "41186a22004108410010041a02402002410820004108100545044041f785c0004117410041" - "00410010001a0c010b418e86c000411641004100410010001a0b41a486c000411741004100" + "41186a22004108410010041a02402002410820004108100545044041f785c0004117410141" + "00410010001a0c010b418e86c000411641014100410010001a0b41a486c000411741014100" "410010001a20014200370308418182c00041084103200141086a220041084100100a1a41bb" - "86c00041122000410810021a419f82c00041084106200041084100100a1a41cd86c0004118" + "86c00041122000410810021a418982c00041084106200041084100100a1a41cd86c0004118" "2000410810021a200142003703104209200141106a22024108410010011a20024108410220" "0041084100100a1a41e586c00041142000410810021a200241084100200041084100100a1a" "41f986c00041172000410810021a200142003703184200200141186a22034108410010011a" "200341084102200041084100100a1a419087c00041142000410810021a41a487c000413820" - "0341084100200041084100100aac100b1a41dc87c000411841004100410010001a20014200" + "0341084100200041084100100aac100b1a41dc87c000411841014100410010001a20014200" "370308420920004108410010011a20014200370310200041084102200241084100100c1a41" "f487c00041122002410810021a200041084103200241084100100c1a418688c00041122002" "410810021a2001420037031842c0843d20034108410010011a200341084103200241084100" "100c1a419888c00041182002410810021a200341084106200241084100100c1a41b088c000" - "411c2002410810021a41cc88c000411741004100410010001a2001420037031042c0843d20" + "411c2002410810021a41cc88c000411741014100410010001a2001420037031042c0843d20" "024108410010011a2001420037031820024108200341084100100d1a41e388c00041142003" - "410810021a41f788c000411a41004100410010001a20014200370318418182c0004108419f" - "82c000410820034108410010081a0240419f82c0004108200341081005450440419189c000" - "411641004100410010001a0c010b41a789c000411541004100410010001a0b419f82c00041" - "08419f82c0004108200141186a22004108410010081a0240418182c0004108200041081005" - "45044041bc89c000411741004100410010001a0c010b41d389c00041164100410041001000" - "1a0b41e989c000411a41004100410010001a2001420037031020014200370318420a200141" + "410810021a41f788c000411a41014100410010001a20014200370318418182c00041084189" + "82c000410820034108410010081a0240418982c0004108200341081005450440419189c000" + "411641014100410010001a0c010b41a789c000411541014100410010001a0b418982c00041" + "08418982c0004108200141186a22004108410010081a0240418182c0004108200041081005" + "45044041bc89c000411741014100410010001a0c010b41d389c00041164101410041001000" + "1a0b41e989c000411a41014100410010001a2001420037031020014200370318420a200141" "186a22024108410010011a418182c000410820024108200141106a22004108410010091a41" "838ac00041192000410810021a418182c00041082000410820004108410010091a419c8ac0" - "00410f2000410810021a02402002410820004108100545044041ab8ac00041144100410041" - "0010001a0c010b41bf8ac000411341004100410010001a0b200141206a240041010b0bdc0a" + "00410f2000410810021a02402002410820004108100545044041ab8ac00041144101410041" + "0010001a0c010b41bf8ac000411341014100410010001a0b200141206a240041010b0bdc0a" "0100418080c0000bd20a0a24242420746573745f666c6f61745f66726f6d5f7761736d2024" "24242020666c6f61742066726f6d206936342031323330303a2020666c6f61742066726f6d" "20693634203132333030206173204845583a2020666c6f61742066726f6d20693634203132" @@ -979,8 +905,8 @@ extern std::string const floatTestsWasmHex = "6c6f61742066726f6d207536342031323330303a206661696c65642020666c6f6174206672" "6f6d2065787020322c206d616e7469737361203132333a2020666c6f61742066726f6d2065" "787020322c206d616e746973736120333a206661696c65642020666c6f61742066726f6d20" - "636f6e737420313ad4838d7ea4c680002020666c6f61742066726f6d20636f6e7374202d31" - "3a94838d7ea4c680000a24242420746573745f666c6f61745f636f6d706172652024242420" + "636f6e737420313ad4838d7ea4c6800094838d7ea4c680002020666c6f61742066726f6d20" + "636f6e7374202d313a0a24242420746573745f666c6f61745f636f6d706172652024242420" "20666c6f61742066726f6d20313a2020666c6f61742066726f6d20313a206661696c656420" "20666c6f61742066726f6d2031203d3d20464c4f41545f4f4e452020666c6f61742066726f" "6d203120213d20464c4f41545f4f4e452020666c6f61742066726f6d2031203e20464c4f41" @@ -1010,8 +936,8 @@ extern std::string const floatTestsWasmHex = "696e76657274206120666c6f61742066726f6d2031303a2020696e7665727420616761696e" "3a2020696e766572742074776963653a20676f6f642020696e766572742074776963653a20" "626164004d0970726f64756365727302086c616e6775616765010452757374000c70726f63" - "65737365642d6279010572757374631d312e38352e31202834656231363132353020323032" - "352d30332d313529002c0f7461726765745f6665617475726573022b0f6d757461626c652d" + "65737365642d6279010572757374631d312e38372e30202831373036376539616320323032" + "352d30352d303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d" "676c6f62616c732b087369676e2d657874"; extern std::string const float0Hex = @@ -1375,19 +1301,20 @@ extern std::string const badAllocHex = "616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c7469" "76616c7565"; -extern std::string const badAlignHex = - "0061736d0100000001110360057f7f7f7f7f017f6000006000017f02170103656e760f666c" - "6f61745f66726f6d5f75696e7400000303020102050301000206400a7f004180080b7f0041" - "80080b7f00418088020b7f00418088020b7f00418088060b7f004180080b7f00418088060b" - "7f00418080080b7f0041000b7f0041010b07b1010d066d656d6f72790200115f5f7761736d" - "5f63616c6c5f63746f727300010474657374000206655f6461746103000c5f5f64736f5f68" - "616e646c6503010a5f5f646174615f656e6403020b5f5f737461636b5f6c6f7703030c5f5f" - "737461636b5f6869676803040d5f5f676c6f62616c5f6261736503050b5f5f686561705f62" - "61736503060a5f5f686561705f656e6403070d5f5f6d656d6f72795f6261736503080c5f5f" - "7461626c655f6261736503090a240202000b1f00418108427f370000418108410841a30841" - "0c410010001a41a4082802000b007f0970726f647563657273010c70726f6365737365642d" - "62790105636c616e675f31392e312e352d776173692d73646b202868747470733a2f2f6769" - "746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a6563742061623462356132646235" - "3832393538616631656533303861373930636664623432626432343732302900490f746172" - "6765745f6665617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d" - "6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; +extern std::string const badAlignWasmHex = + "0061736d01000000011b046000017f60057f7f7f7f7f017f60067f7f7f7f7f7f017f600000022a0203656e760f666c6f61745f66726f6d5f75" + "696e74000103656e760c636865636b5f6b65796c6574000203050403000000050301000306470b7f004180080b7f00418088020b7f00418008" + "0b7f00418088040b7f00418088040b7f00418088080b7f004180080b7f00418088080b7f004180800c0b7f0041000b7f0041010b07cc011006" + "6d656d6f72790200115f5f7761736d5f63616c6c5f63746f72730002057465737431000307655f64617461310300057465737432000407655f" + "64617461320301047465737400050c5f5f64736f5f68616e646c6503020a5f5f646174615f656e6403030b5f5f737461636b5f6c6f7703040c" + "5f5f737461636b5f6869676803050d5f5f676c6f62616c5f6261736503060b5f5f686561705f6261736503070a5f5f686561705f656e640308" + "0d5f5f6d656d6f72795f6261736503090c5f5f7461626c655f62617365030a0a99020402000b2801017f418108427f370000418108410841a3" + "08410c41001000220041a40828020020004100481b0b5f01017f419a88024191a4cca00136010041928802428994ace0d0c1c3871037010041" + "8a88024281848ca0d0c0c1830837010041818802417f360000418a8802411441818802410441a3880241201001220041a48802280200200041" + "00481b0b8a0101037f418108427f370000418108410841a308410c410010002100419a88024191a4cca00136010041928802428994ace0d0c1" + "c38710370100418a88024281848ca0d0c0c1830837010041818802417f36000041a4082802002101418a8802411441818802410441a3880241" + "201001220241a4880228020020024100481b2000200120004100481b6a0b007f0970726f647563657273010c70726f6365737365642d627901" + "05636c616e675f31392e312e352d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a" + "65637420616234623561326462353832393538616631656533303861373930636664623432626432343732302900490f7461726765745f6665" + "617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c74" + "6976616c7565"; diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index ff72711000..12f7b2ee6c 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -84,4 +84,4 @@ extern std::string const infiniteLoopWasmHex; extern std::string const startLoopHex; extern std::string const badAllocHex; -extern std::string const badAlignHex; +extern std::string const badAlignWasmHex; diff --git a/src/test/app/wasm_fixtures/float_tests/Cargo.lock b/src/test/app/wasm_fixtures/float_tests/Cargo.lock index 175adf0254..efad3253e7 100644 --- a/src/test/app/wasm_fixtures/float_tests/Cargo.lock +++ b/src/test/app/wasm_fixtures/float_tests/Cargo.lock @@ -154,7 +154,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "xrpl-address-macro" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" dependencies = [ "bs58", "quote", @@ -165,7 +165,7 @@ dependencies = [ [[package]] name = "xrpl-wasm-stdlib" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" dependencies = [ "xrpl-address-macro", ] diff --git a/src/test/app/wasm_fixtures/float_tests/Cargo.toml b/src/test/app/wasm_fixtures/float_tests/Cargo.toml index b369cac501..a115dc006f 100644 --- a/src/test/app/wasm_fixtures/float_tests/Cargo.toml +++ b/src/test/app/wasm_fixtures/float_tests/Cargo.toml @@ -15,7 +15,7 @@ opt-level = 's' panic = "abort" [dependencies] -xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib" } +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", branch = "u32-buffer" } [profile.dev] panic = "abort" diff --git a/src/test/app/wasm_fixtures/ledgerSqn.c b/src/test/app/wasm_fixtures/ledgerSqn.c index 3458b02872..020fafc78f 100644 --- a/src/test/app/wasm_fixtures/ledgerSqn.c +++ b/src/test/app/wasm_fixtures/ledgerSqn.c @@ -1,27 +1,16 @@ #include int32_t -get_ledger_sqn(); -// int32_t trace(uint8_t const*, int32_t, uint8_t const*, int32_t, int32_t); -// int32_t trace_num(uint8_t const*, int32_t, int64_t); - -// uint8_t buf[1024]; - -// char const test_res[] = "sqn: "; -// char const test_name[] = "TEST get_ledger_sqn"; +get_ledger_sqn(uint8_t*, int32_t); int finish() { - // trace((uint8_t const *)test_name, sizeof(test_name) - 1, 0, 0, 0); + uint32_t sqn; + int32_t result = get_ledger_sqn((uint8_t*)&sqn, sizeof(sqn)); - // memset(buf, 0, sizeof(buf)); - // for(int i = 0; i < sizeof(buf); ++i) buf[i] = 0; + if (result < 0) + return result; - int x = get_ledger_sqn(); - // if (x >= 0) - // x = *((int32_t*)buf); - // trace_num((uint8_t const *)test`_res, sizeof(test_res) - 1, x); - - return x < 0 ? x : (x >= 5 ? x : 0); + return sqn >= 5 ? 5 : 0; } diff --git a/src/xrpld/app/wasm/HostFunc.h b/src/xrpld/app/wasm/HostFunc.h index c49e58eb38..f3ed5ad6f9 100644 --- a/src/xrpld/app/wasm/HostFunc.h +++ b/src/xrpld/app/wasm/HostFunc.h @@ -122,13 +122,13 @@ struct HostFunctions return j_; } - virtual Expected + virtual Expected getLedgerSqn() { return Unexpected(HostFunctionError::INTERNAL); } - virtual Expected + virtual Expected getParentLedgerTime() { return Unexpected(HostFunctionError::INTERNAL); @@ -140,7 +140,7 @@ struct HostFunctions return Unexpected(HostFunctionError::INTERNAL); } - virtual Expected + virtual Expected getBaseFee() { return Unexpected(HostFunctionError::INTERNAL); diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/src/xrpld/app/wasm/HostFuncImpl.h index b5ce367004..d8e080a8ef 100644 --- a/src/xrpld/app/wasm/HostFuncImpl.h +++ b/src/xrpld/app/wasm/HostFuncImpl.h @@ -82,16 +82,16 @@ public: return data_; } - Expected + Expected getLedgerSqn() override; - Expected + Expected getParentLedgerTime() override; Expected getParentLedgerHash() override; - Expected + Expected getBaseFee() override; Expected diff --git a/src/xrpld/app/wasm/HostFuncWrapper.h b/src/xrpld/app/wasm/HostFuncWrapper.h index 8555fd69a1..601e9372dd 100644 --- a/src/xrpld/app/wasm/HostFuncWrapper.h +++ b/src/xrpld/app/wasm/HostFuncWrapper.h @@ -4,11 +4,11 @@ namespace xrpl { -using getLedgerSqn_proto = int32_t(); +using getLedgerSqn_proto = int32_t(uint8_t*, int32_t); wasm_trap_t* getLedgerSqn_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using getParentLedgerTime_proto = int32_t(); +using getParentLedgerTime_proto = int32_t(uint8_t*, int32_t); wasm_trap_t* getParentLedgerTime_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -16,7 +16,7 @@ using getParentLedgerHash_proto = int32_t(uint8_t*, int32_t); wasm_trap_t* getParentLedgerHash_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using getBaseFee_proto = int32_t(); +using getBaseFee_proto = int32_t(uint8_t*, int32_t); wasm_trap_t* getBaseFee_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -96,7 +96,7 @@ using ammKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t wasm_trap_t* ammKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using checkKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using checkKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* checkKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -117,7 +117,7 @@ using didKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* didKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using escrowKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using escrowKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* escrowKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -126,7 +126,7 @@ using lineKeylet_proto = wasm_trap_t* lineKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using mptIssuanceKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using mptIssuanceKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* mptIssuanceKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -134,23 +134,24 @@ using mptokenKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int wasm_trap_t* mptokenKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using nftOfferKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using nftOfferKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* nftOfferKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using offerKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using offerKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* offerKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using oracleKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using oracleKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* oracleKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using paychanKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using paychanKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* paychanKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using permissionedDomainKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using permissionedDomainKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* permissionedDomainKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -158,11 +159,11 @@ using signersKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* signersKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using ticketKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using ticketKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* ticketKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using vaultKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using vaultKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* vaultKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); diff --git a/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp b/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp index 1889341ebe..57ef79e11a 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp @@ -9,22 +9,16 @@ namespace xrpl { // SECTION: LEDGER HEADER FUNCTIONS // ========================================================= -Expected +Expected WasmHostFunctionsImpl::getLedgerSqn() { - auto seq = ctx.view().seq(); - if (seq > std::numeric_limits::max()) - return Unexpected(HostFunctionError::INTERNAL); // LCOV_EXCL_LINE - return static_cast(seq); + return ctx.view().seq(); } -Expected +Expected WasmHostFunctionsImpl::getParentLedgerTime() { - auto time = ctx.view().parentCloseTime().time_since_epoch().count(); - if (time > std::numeric_limits::max()) - return Unexpected(HostFunctionError::INTERNAL); - return static_cast(time); + return ctx.view().parentCloseTime().time_since_epoch().count(); } Expected @@ -33,13 +27,10 @@ WasmHostFunctionsImpl::getParentLedgerHash() return ctx.view().header().parentHash; } -Expected +Expected WasmHostFunctionsImpl::getBaseFee() { - auto fee = ctx.view().fees().base.drops(); - if (fee > std::numeric_limits::max()) - return Unexpected(HostFunctionError::INTERNAL); - return static_cast(fee); + return ctx.view().fees().base.drops(); } Expected diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index ffae4de7ed..34cfac416e 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -56,25 +56,40 @@ getDataInt64(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) return result; } +template +Expected +getDataUnsigned(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +{ + static_assert(std::is_unsigned_v); + auto const r = getDataSlice(runtime, params, i); + if (!r) + return Unexpected(r.error()); + if (r->size() != sizeof(T)) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + T x; + uintptr_t p = reinterpret_cast(r->data()); + if (p & (alignof(T) - 1)) // unaligned + memcpy(&x, r->data(), sizeof(T)); + else + x = *reinterpret_cast(r->data()); + x = adjustWasmEndianess(x); + + return x; +} + +template +Expected +getDataUInt32(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +{ + return getDataUnsigned(runtime, params, i); +} + template Expected getDataUInt64(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) { - auto const r = getDataSlice(runtime, params, i); - if (!r) - return Unexpected(r.error()); - if (r->size() != sizeof(uint64_t)) - return Unexpected(HostFunctionError::INVALID_PARAMS); - - uint64_t x; - uintptr_t p = reinterpret_cast(r->data()); - if (p & (alignof(uint64_t) - 1)) // unaligned - memcpy(&x, r->data(), sizeof(uint64_t)); - else - x = *reinterpret_cast(r->data()); - x = adjustWasmEndianess(x); - - return x; + return getDataUnsigned(runtime, params, i); } template @@ -791,10 +806,10 @@ checkKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result return hfResult(results, acc.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->checkKeylet(acc.value(), *seq), index); @@ -911,10 +926,10 @@ escrowKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul return hfResult(results, acc.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->escrowKeylet(*acc, *seq), index); @@ -965,10 +980,10 @@ mptIssuanceKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* return hfResult(results, acc.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->mptIssuanceKeylet(acc.value(), seq.value()), index); @@ -1019,10 +1034,10 @@ nftOfferKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res return hfResult(results, acc.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->nftOfferKeylet(acc.value(), seq.value()), index); @@ -1043,10 +1058,10 @@ offerKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result return hfResult(results, acc.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->offerKeylet(acc.value(), seq.value()), index); @@ -1067,10 +1082,10 @@ oracleKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul return hfResult(results, acc.error()); } - auto const documentId = getDataInt32(runtime, params, index); + auto const documentId = getDataUInt32(runtime, params, index); if (!documentId) { - return hfResult(results, documentId.error()); // LCOV_EXCL_LINE + return hfResult(results, documentId.error()); } return returnResult(runtime, params, results, hf->oracleKeylet(*acc, *documentId), index); } @@ -1096,10 +1111,10 @@ paychanKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu return hfResult(results, dest.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->paychanKeylet(acc.value(), dest.value(), seq.value()), index); @@ -1120,10 +1135,10 @@ permissionedDomainKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_ return hfResult(results, acc.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->permissionedDomainKeylet(acc.value(), seq.value()), index); @@ -1162,10 +1177,10 @@ ticketKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul return hfResult(results, acc.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->ticketKeylet(acc.value(), seq.value()), index); @@ -1186,10 +1201,10 @@ vaultKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result return hfResult(results, acc.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->vaultKeylet(acc.value(), seq.value()), index); From ba03a8a9d29a0f4bcd9f351832239cef50bb398b Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Tue, 3 Feb 2026 17:43:54 -0500 Subject: [PATCH 2/2] Fix negation of int64_t (#6296) --- src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp index 36231ec37d..abff96a08d 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp @@ -93,7 +93,7 @@ public: makeNumber(int64_t mantissa, int32_t exponent) { if (mantissa < 0) - return Number(true, -mantissa, exponent, Number::normalized()); + return Number(true, -static_cast(mantissa), exponent, Number::normalized()); return Number(false, mantissa, exponent, Number::normalized()); }