diff --git a/Cargo.lock b/Cargo.lock index aeb4cbe..66fbf64 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -251,8 +251,10 @@ dependencies = [ "dash-types", "hex-conservative", "hex-literal", + "json5", "rstest", "serde", + "serde_json", ] [[package]] diff --git a/contrib/lint/lint_javascript.py b/contrib/lint/lint_javascript.py old mode 100644 new mode 100755 diff --git a/docs/guide_rust.md b/docs/guide_rust.md index 6b5f969..283e0c4 100644 --- a/docs/guide_rust.md +++ b/docs/guide_rust.md @@ -244,8 +244,8 @@ Consistent conversion names tell the reader the cost and ownership semantics of | Prefix | Cost | Ownership | Example | | ------- | --------------------- | -------------- | ------------------------- | -| `as_` | Free | `&T` to `&U` | `KeyId::as_byte_array()` | -| `to_` | Allocates or computes | Borrows input | `KeyId::to_byte_array()` | +| `as_` | Free | `&T` to `&U` | `KeyId::as_bytes()` | +| `to_` | Allocates or computes | Borrows input | `Hash256::to_bytes()` | | `into_` | Variable | Consumes input | `String::into_bytes()` | - Implement `From` for infallible conversions; the blanket impl provides `Into` automatically, so we never implement `Into` directly diff --git a/pkgs/num/Cargo.toml b/pkgs/num/Cargo.toml index 862987a..42e3446 100644 --- a/pkgs/num/Cargo.toml +++ b/pkgs/num/Cargo.toml @@ -6,7 +6,7 @@ license = "MIT" [features] default = [] -std = [] +std = ["bitcoin-consensus-encoding/std"] full = ["std", "serde"] serde = ["dep:serde"] _internal = [] diff --git a/pkgs/p2p_core/Cargo.toml b/pkgs/p2p_core/Cargo.toml index 443adfe..0d853ec 100644 --- a/pkgs/p2p_core/Cargo.toml +++ b/pkgs/p2p_core/Cargo.toml @@ -38,7 +38,10 @@ serde = { version = "1", default-features = false, features = [ [dev-dependencies] hex-conservative = "0.3" hex-literal = "0.4" +json5 = "0.4" rstest = "0.25" +serde = { version = "1", features = ["derive"] } +serde_json = "1" [lints] workspace = true diff --git a/pkgs/p2p_core/corpus/mnlistdiff.json5 b/pkgs/p2p_core/corpus/mnlistdiff.json5 new file mode 100644 index 0000000..082c0ea --- /dev/null +++ b/pkgs/p2p_core/corpus/mnlistdiff.json5 @@ -0,0 +1,1686 @@ +{ + "mnlistdiff": { + // Masternode list diff between height 2464000 and 2463000 on mainnet + "000000000000001571c885183cffca87096388f24eb8452f6f22b202b20226c8": { + "raw": "0100aaccd27bf1b66c0ff58caf6281a1a902cae12dd837df82c11200000000000000c82602b202b2226f2f45b84ef288630987caff3c1885c87115000000000000000a000000056e2b2b9bda7063781a5da9d55a57ef9b5e027716a8b27a52bb9edeb107e03d35ec2dfd9f7ef700f9a684539567a62b6a0abb02c37781182808f6c199bfe70f74c3874d6059dad9ae33733d5409b120c27b3e81426f6255cd36f9b0ef9c9820ee8511c009a25ff17a8a0f3af600ec08304a7b9a33cd0c3bc29d13ca4a34391fdaadc518611257943637535e2962c1b90addb07b33ac8984efd950029bf76bf02a021f0003000500010000000000000000000000000000000000000000000000000000000000000000ffffffff270300992504d13ef46908000013b46fcb03000fe4b883e5bda9e7a59ee4bb99e9b1bc04f09f909fb49382b803ef5ea302000000001976a91464d4d4127bbce4b888bb4af080fa4de863b02b3f88acbbb2f70200000000016a106af204000000001976a91461ba0f43e13c1cdf5bc81db6bc46fdaf162f038c88acd0527021af030000992500f2fcaa7264228035bf83d081b8cb330d7bb7b6e331a931a4bf1dff9e18253a4bad7e95c77f968b6b9f9bfcae534a1f5f97581e955e79fff39f4571c8a31c84b200a1e81160c7a2ed123a35bd81e0728855f3a586084edcbc05cf18538e413fc5738eccc34a6ae89e851d5be17a2348a1d4007a974060d8da60e7e51d7807aa976905d2db3f6c5e55d965275ac8f398c3c0b079f745ade640fef865fa104b4dd4c518aab6c93902000000080200c2c255c04f271a2a2525c782cf9e0c966967a84eb5e311ccff9aafd353379b7ac83a94bdd214cefce9af5fbfe69d645b1eab8c609a5b865f0c0000000000000000000000000000000000ffffc0f8bd42270fb60fba0f9c1a76b69619c17c145f8a7ee9eaa13c214219777d56b15efc68c43f04873f8235b738d8e7b806c4f8afbc4a903852cf6c818b2935f110be072b0a0a48cb0b9b0000000200abd2ecc692661b650a0adb8607c1f833e73ab5dfe246bf431958274dd1e5853f661b483ef5e76910bc1ba8c09c2bca9267b67eb647fecb58250000000000000000000000000000000000ffffb9d8b305270f832e090090b5f78ff6be581bd51ddc4511e9ecc5f147cef310ffc2cc452847b4e3f577f1fd84039789e613a41e11ceab8855d6ef13eb70da08097075a51d2ad4953f8e980100000200ccd82a45acf73ece2d585ce9d9696aa174b91b65d94bdb0cab054296f098fd5764bc22f1398551781cbca4c0216c16935f030deeb15b0a46190000000000000000000000000000000000ffff97f4554c270fa0d2cd8b8ff02763ce7ccc19daa78922b79e68e0fe884695680176f4fb7dc96fb77e8bc25f0765b9f9d9ab9e2493ce4bac099cfe8eef1042573fa821537941e3b594c306010000020074cb600df35e840cfb0c2901bfc13ddbe1a05596617d0f0137792a633b567e92644505bb18ad720e71abcc8aeafac9712488e616a6877dc2190000000000000000000000000000000000ffff334f3660270f821c519051c7c590fbbe986a93643b52f66df9a1ed80fa08952e475ec4f1da7f76a78aa0ef8ddf0d2404368ea8e584b68d724c803b333e755fe046c86780baf9b557b165010100bb015d3c77d719ee6c6558c68f59a9770c4ae85506bb0200d77663ba0472eaa146f74eda643d6451c9ab2a0e30f05c4a5b8806c959ef7cc6fd0e720fe7daacef683eeb5c01a8c6ca5e32c1bc540f79cd340000000000000000000000000000000000ffff97f4556d270f802e1e55c506e930327788db0528089a1d48cbc350cfe874514873ac2bcaee483a0f6b225552e6c1b02169d0a7403117bf516c77f67340fac3acee0c439c4748e72b76e60100000200599490c10318369bc13fcc010e51733c7bdfc0f1bc4da5956207d5f5edc275feb8a6ac8bfd799b58eb14491be7c97ff5c28fea0d7e1ecefa180000000000000000000000000000000000ffff9471d161270f917e3809889b89ac65c6cc2b4544a507656cec1a1040a82662be13cf93bfa1d12f2b5205f3b6b0c5c43571a8eb94709b8db7bc2ee991e5c6917fd6627d922f00c958881a0100000200ddc26a56fa80d68061ed275f5900792611290abcf9cfaf46dac4c7d217b9f72f29e54896f5a88c9dc76eee28a82eb78213b03b6c380988a9390000000000000000000000000000000000ffffb9be8f5b270fb4805c1a34826a5b2d6f610437958ceaeb0e870261ffe97f57c384928c26c1b4f7bff6d024d1311fb6c704cd15a74feb5378923253011931f21fb5ae02361baa1918094501000002009f1dd2bd538b2af24295ea9bbdf4133ecf503f9a35a1c99ee28413d2832d6b8e661b483ef5e76910bc1ba8c09c2bca9267b67eb647fecb58250000000000000000000000000000000000ffff4f8fb56c270fb838c7baca69548d9a7e2a98385d300e81cc2d738a6444d0cbfce0120689b9f16252308558ea269198407fc22e29897fccfa4fe906ed265f97987677d929adeb50c15ea50100003c023d8b05704061bfcf881c7f4731e1d3dd461f2755c4359c610a0000000000000002512d38f58fe2fe1ff270efe548f39dd1f3cfb87b63de87331b000000000000000269c5ae4d36bb687c9f669ff78b3e68fcd5f9c02299ebd54e16000000000000000371f56abf52ff7f919821da6ec33065a01d5c17474457863409000000000000000400e978712f9cb71fbe2bd30266fd988bc379d6385b24e70a1100000000000000040d46e0cb6ebd964be92f9267c41431b1b0282f6e933da9d12900000000000000040e0cbf8d353a9195da1a7e5efe7a38397777bb922fa85fb51c000000000000000411abaed74e35a6328a71d40e4d6b2f331a5ae8852804709e310000000000000004204494c31580d328b9d67265b06c2720eae08956df8d2e8103000000000000000422873b8001117b0377da1307230d869e55ba0f181fce20e91d000000000000000422ab384ea8c4a0a1ae78ae733e24d5e6b17a0d5c10098a951700000000000000042cbc21afa203aef9237feea81926222f2fb351a331704f051000000000000000043604632a84adb4ba0096d91d5c7c73d4610d8ca0f2235afa18000000000000000436727528694a9f91bc54347cd4258886fb6624a800376afc2000000000000000043cbe9bc6c038ea06f4e0dbdb8da3c7d51cd627ca94ba92d50c0000000000000004418a0d04f045d1762a6014587817f7150eead5ba4c7d3d2431000000000000000469c5ae4d36bb687c9f669ff78b3e68fcd5f9c02299ebd54e1600000000000000046c6790426cf53fa69daa8c90941524d3c6a5403169131ac50b000000000000000488dc31ff56c7ecc9614a2be2c28ec3431384cbbbc064e89f000000000000000004a6a2b650105b9d581b922ac924ba2866e247379a678e1df0000000000000000004b06ee033f47301b23c4a5a7fe5c249c43e6336d31df9499c0a0000000000000004c0c3160153dbf83576f35d39d839ea58ed17fab5f84380ea350000000000000004c1072de531af0a3bee5ba30d0f1768d5a08d524234e0c77b210000000000000004c623f9b3ef04f963aeffe7bbc59281f8daffe0cd0a68c8330c0000000000000004d8cdcf9836a03122dddbcbb613cf97808dcbe787d0c389ae160000000000000004e0443f007d6193a89bef952a41a66e8ca625e7454cb3793d0f0000000000000004f4f9a6facbb2184d37cadab6a5361fbbc1cd751eb4016937040000000000000004f74f54d5665645594616c808d75071d030f9055260b6b5861c00000000000000050a3245b6791495c18e03e95c469fd11f118cb7c0665bb0ae220000000000000005176f64fa4c6f83cdc1980eaed822fcd1bc71a7132addbc3117000000000000000524b4a37be5466f84f0bdc35670129525a5409ebb3251487a12000000000000000526a6b5a168e06478f17ab70004af7094a4b2f76da4b567532200000000000000052c865ee266d83d620ab686c06596aa4a410129c501450df90700000000000000052ed631004b2faab56f76f06e7662d13aa4f1f9bb764f87f6090000000000000005392309f2fc7ccc7d77f81ad25ee8873e710fa5da0a7984a11400000000000000053bcd14efb198443d6b99af1811e05c452baf7185f4c4fc9b26000000000000000542934db8aaa55b6b18b68e9d886fa585101640fe489e894203000000000000000548766c37dab7cbd0f2faf393188d2090e2668f4f517931e121000000000000000553944cce1a1e683556e3417c1f7d89167e07140f277b30eb0e00000000000000055420cc1e0aadd27b73490f0374d1a072571fbe7d6102134b12000000000000000559647962b41675c386e95561823deb902e60c950c4067d6f1e000000000000000569c5ae4d36bb687c9f669ff78b3e68fcd5f9c02299ebd54e1600000000000000056cf839e84ecf3da3c9fb4c8445084c5bcfd7fdd86b1c98ca1400000000000000057657534f5c6373eefd5dfaf58b7d53d593f65d3bbe572f0f180000000000000005846affc71587ef630c32a699a2e82eae689f869ec0435a6e1100000000000000059122f5b60a9fec9ddecfa0494d058bd08a94ed13ac153a11100000000000000005a49a7073293f665e9656e51fe0c026ef23224515ed2ae522280000000000000005b06ee033f47301b23c4a5a7fe5c249c43e6336d31df9499c0a0000000000000005c5682a3f4c8d56da76464d9a2b6ea71346b53c713960e160130000000000000005c5c6eadacb1aa5c007d2163b3ce46caec9f3a314d62299b4020000000000000005c65d66839760afdc9c23a2381d7ee1cf03c757df555c364d0f0000000000000005c901156d2a7cab4df976d4893c2cbc60cde6dd7a062a2315090000000000000005d30439c97e8b30a2a7e7fd71e94af36ff1c469c42b58c719120000000000000005dbd61787752f04cbd0e831dec2839e5401196f2514b46cab0f0000000000000005dcf310f19d9c701448ab8d8916a23298ae5d517d74ed980b020000000000000005de6f8a3acc342b582e89923a4897fe4faf4449b5e1e81b5f070000000000000005e43d6dc81b32392a1ffea7dfb7666687b7f66a5ebc7d53ad320000000000000005ee01ab8af6b1c3b7d99c8cb4cfb43127d4c53d2c43023d98090000000000000005f5798a7fd46ee7ca1464f499edb9facb392de08b82283ebc050000000000000005fa9e2658c2a49aa8e26b7b666d44ae20a53055a68e172e2f18000000000000003c0300023e6cda4698b1d5bfec802c6d1abd933c4d66d01ebb6f6cdb1900000000000000fd9001ffffffffffffffbffffffffffffffffdbfdffffffffffffffffff7fffffffffffff6fbfdffff7efdffffffff7fffbffffffffd9001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8cdb20ce9adf09c8fd8254720911e116a999c4f7d85474580825676c95ad0a934fb811c0dd88847fe906ea0961b19f8ab61cb1f7712de07e393d24eefa86bc1f6e13f3357cf82481b4d5fc72fe0ddbe48f49fbba7cedb6213f3d776fe537921df2b61588fa10358eea0a4a70af09ab6eae74b6e3f46d5a3beac7dea64b5b1f8d0da370aadaae771b78fb3550941c1966a12460088d2e288b5991e10ce248524562e0e77c06c127e6fc51955f1e99dfa681890cbdb7c1bb2b50d1008b64149dec1324151b60c5a06e9d6083998ecc3ded66b3492982ef835c63faa48e8efbf9591134332b13161506502f7fa1859fc80029b5af3d148658ade23894f71c89cd50393abff1009d53d8e88b0af6dfbee84703000249eba4f43dad9a477dd41c97c31e491f70da458bdf138dc03100000000000000fd9001fbffffeffff7dfffffffffeffffbf7ffbeffffffef7fefeffffbfffffffbffeffdfffffffffeffffffffffebffffffffffbffd9001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80ebca7e63d3a78f30edb614bf82c78b5e446c988b48946698742a0aea951dc851965f710e8f2115e77008cb6f49ad3caf945c0c76b76741983ad7272ccf7dc8083f1e28614171bad0ea52fc963f70899855fcdf5e9e3e1c4fe82fb87c1b0b41c3399c38f58090f9ba1d803d49e1b2af70a2c5155d6c168867dc1bb2303bfd0b11a0c963fdce728d40f3c3b7c707fec55e75e3fd682f482b0285c4c008c111bdaf7a623b9e15319121c9ba0c83ab7f37b0cb230ae4e585ed7b145d7efdb354db39639880605cbe6268bb8b445217e3c0aee7e0133302f29024b115d4db075ede0e3f3aab9c824b579de2b9c1925ebc53a99682aeec88bfa95b248b0a1d05613bdb784000d798581b25b73f554bf2b8a603000299d5051168f54d3ac1d4ab4fa01db2be6057e5ea2051a74b1200000000000000fd9001ff7fffffffffffffffffffffffffffefffffffefffffffffffffdffffffffbffffffffbfffffffffffff7fffffffffffdf7ffd9001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90c54faea536ee4556f5fcfcd395f5c68f9a5a836ca8dc5613735e16f2735e2f03c2c82fee6b38b5061ba4d70056caad7d2699fcb3cfacd2094c6648d023b711e904256786dc7bda07fe8bbfeb160bf1b2458b85b30b9acebb67aafafabac65984fdb33d46c0271ac813cabd6c6203361f6dd456f80238bb841d12ea9681eba707c4db2be023bd8032bb7f7bd5a98343902b1bca9adf0d7f12b80176998344534bdd41ad5ab0ab985b709aaed9d53dc598786975b931d6de202dc26fd6a38ea384da253cf7f6500b7532edee13ee626717cd03ba3e664b2d9db6a4908118902b00efb0372dc1ef2878453831b83c72c35e92c78a8f1365d49e60c5b65e621092f7d036b4e1f8b3c252311bc3a8780da503000349eba4f43dad9a477dd41c97c31e491f70da458bdf138dc03100000000000000fd9001fecffeffedfffdffffbf7ffffffffffff7bfbffffefffff7ffbf7fffffffee7fefffffbfefffffff6ffffffff5fffffffffffd9001fffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffefffffffffffffffffffffffffffffffffffffff901e55a94b143bddceb737771a92b31c1c421a6dfc88db3c7b9d4d49489eef78702c54ea0a885b78a7de4cb1b8e8db78d8cd0eb40649656ede3705a82dc079b9e344513b2e0c2b2150ee0d05e7753ad58e14b47f90339e60d45b83b5d64af345f18970064abee2e026dba741fdcb489ec07593efda1a0e46d1f5198476cd8c560e9036a6dc282645b74b0ff279f129994f56688fb3ef8f396cb459f1e61167f07bf503e6c8755c85581da465d5d33716a1430f18a05a51da7f67063e2643127cd504c3dd63cdc58d9ccd979d520af2a33d7f7c444efbd67b1c8da49e5137dcd110835849c287ee5f443f137e8d38d2f1e3b52ce3f0490086f30dcfaaf419e2a69fdec796692e7242b4fc2c2369776b8e0300040d06d00f3a92d9cf7e5f7765a3df932a3bb46a17ed001f6d220000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0fb177fb8919f2fcdcc59d4485dab282daa1030f44769803ca78413747ad94cca64e303de67eee6362bfb98a7631ba4b63b1de1dee314356f25eca366de712ab9702b078cba07585d06e28cdc1ab4f9aa3a1920899db26269ca54bf06913054c3b838c38807058a8013eb5708cd5e3b6baaa3dd72e71bef4f4a07ea84acfe8bd54082309f3fa96713c626b9790214dfa503d598835d244995b6c1a1f951e9c51ebb534aeb221373c181887838572f594a2ac76d5e1dec139b93f02dd7fb31ea74ce11173079f93fbab378166a8df31ac773487f87c8661bfaaf26774f012ef182a04c301120cc38ebb4e9b03e611b9bb3a8ae8bfc82c7ea1466dad454cdaf62fcbfcd746aaba3e9d4757a6d769d8f5199503000416813b62ca1eea2bc4b6848ad0da3ed3acd33778b6bd1bb3130000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0f8402d65dc6283121911cb44e83734a439c64673b3553a1b29a8d3aaa93d60b788cc91a5d337c473d1a1e79384c9404d99c140ecf5216dedc2db1ce02df8bf82f354604cf20a6bc5a0bfd4a2097ef26e6b37ee7fdf35112d859c69fc83eed13704dcbf13351f0bd00b07dcb6f510f1944a560c577918b464d6f2484a33a1f5c97129742a45c4a2c4501f69abb5c60b1a75409841712e54d0ec91e82c208e120e7b8a6ba1d5cc83ac2fdb466d6a959ef04aaa9f18132bbb213c83c9b7892a15979020f091ad97cda26fe2f28fdcf9b84ea690ec5ab614651ecae9db054f83dc4990cb89580bb8f9ebe73f8d7a83dc38b0bf4721b082bf7086de9d411257f0a4ba1f1c9781315b6031c7b7fd71c85c479ae0300041aef5b120833ba7c52e9328dc642dad8885fc240214f844e2a0000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0f9528b64b96ae0225111f1f8a0a45887482a907bbace9d5818e491ac1eeab62e4902beb1c55e5b1ce4a9ed213a3c15b8da65e55cfce89013a772879569b995c00127de731cd3f9bf419cd5e5969057a9497ebd055f78906213e15836d7f55d23ded4df6bbf6c46da204a26d04a6305d4d724f4159ee9528b102c4bb476d473ee60687da7c7fd718b672a05bca2c4f732a39f10ac47c59eef86debdd1e5185375f09ff1677a5d1ce0acb28a10ff4b61364b52beb19774c825fdfc05c43c2aa0be25a63ec3622edb5fb7d17815dad78f789c61a45b803095157a1259eeaddbaa4c60a23bc4210803a2b0682a14920c3e5e35bfb568fa611966ef5b605587cac43273d282d3fcfc7a121966c9710b887bc9403000427f9c694c337ee4613c251857ec9ce36ad2cd083e3b996f0210000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0f803a6bdb134507ba910b2dbb8ff11f758c5654099612ad84e5acd86317456b1258747c6bf1e62cbb625f3d438950273ec45980fc25523a3aac0ba136134f809ff419c3285cc4df32ccb5e2570bfdbd4d8313f77ca2f2698dfe058e9cb022bc733f74806ee50388324744135db4fc3b2de4bad11227805577ae90a344b475b2a712d7adc48c46680cf3e5e851f7b100d87f40da335baa6767890a9daf4a691ba562c0adc2bf2509fd29a1105328bfe83aa38b2b331a76c4319fa0816589ad54a1b01939944b737492b1b367f5fec3abab1f08fc8d6ecc57c8fea534dda339f3dd0b6effa077bef8f955db98f03271783d47cdb85f90f8ec8665bfd9da09f2ad7ef33732204a9c5fe1fd93e4b65e35c16a0300043e6cda4698b1d5bfec802c6d1abd933c4d66d01ebb6f6cdb190000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0f8c207f6ccb24eb640ae8ee83d315ee49e47593bf52f82b05365a8a92b886cd4b8aa37d2e7cc946a0a34497373d7f778f3e420f9d26edff6ac3e6251551e20e4487d25cd3cdf6221cf832942e52d9cc7eaf370e787d856b9b88ff6d013d8449b29a69c99c7b3f2abef877c448e7f964917b6601da9cc02cf449f0f6c87d60ac7d0e804492b348c246a4a4ac52892d1ed3c932042f536433841161c2bcd15fe825c0be87f2e7e65f9b23a12c8fc79de8dd8e21d084d2273c265b05178e81b1c73069da759c35d4e78d57ca882c8381a1e7b708898f3da9d87efaf3b83355510e77070d0155b0a24f3842e189a21db5e6c1652a758490c68efa1bd3685f98313c4ca7447a9577e974518de634b710a8664603000449eba4f43dad9a477dd41c97c31e491f70da458bdf138dc0310000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0f954002d6531bf556ffe4774a61a6c7ea22cbdfbaf78d9dc92f8a88fa29be01ced3074cad150f59844a00fcf2d65da19b4941382ddc980a3c816d5166df243753419a54274fc1f937d81e772d6b34f098a4ddf2a94813192cf602081e8c509a0501655b871fbb7e8a71bf0126daee19d9d02b9e42a177c1a2c9b87f76c2fc549a1061e73c7126aba3011a40208c1c6e4d868ce2fee76c87d97ba2f67408bdfe8451c903ed723e157e5bdbc264c311514ca64b971fb8c5b460b3be91e0d0b8ac23018c513c62783a386848c6e473220e1ee9cb5fd385ff5284e13ac43c6622645b021702bd0ec9084855b696f6d73792ebecddcc193a23d4946d40a923e97697412e1987925fe2e68e4a66cb824c687ad70300045300180b54bf0e4eef1af5c243be63b66cf57b9c3fc3d1543b0000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0fb6f09ff914872a29b7fb557458aaff9159f4a5f29166fecbbc1f107af8b55ccf479e7d1d7dfe358a35107bb89bac94cf6bd0a068e32980b4faa43504a55ef04cef5f5fa79e72de94d9c2226bdca25a8fb546c08ddd89c7cf7e4b5a344ad433f29461c648bfc012281ff350c55aa113569b764a663c7f28b7c4360b8712df8d3f197fbe4913f07feb1079bea52692c17f002609656a7357646274b7136145843cd2bcc6add894e0ecb5098b9cffc07f3f8a9ce256ef36d8d664a984f992946a520e28944cc59fd9ed0875837b0cb1e658d0dba945a9ab3082e78c4136ffb4b09a0e7f5bdc8cbd95857e037629efc494f73fe199caec69926b221e12b85fe6a334f42a39c2158538f643ba73a68b701f7d030004601e33d4a21eb7482555686eafc5513b95a934088da33aa7160000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0f818d6e984734a971d1f492341f2f3fd1e2466a96676438ce7ad65630940c4f687c69d7eccb4eb1d6de106ed4a46dab3686080155521aebe14ceed169357c2875d8d26ab7911f41b66f0fe962dc870adeb91f770ceedcab63ee77c0934489f34b4c807ce612da2e027e56b1a8db60abf2c14a79191416ba13f4442ddb93214f3c006debfdbdbe2126909aac6e288e4dd9363a68ae77b203669eefea8f90c4fd596e27d071724d5d085afa9e9c72228356a82ca7c8a750232600e9b63615fd164b8bc9f29ed67f036138e4127c55c6a0cf762e65f8a7a9640c145769858492bf4a0726b7a5e5bc9e417e01f71fd5dc026bfd96eb204b428de0f021cf67f791a52e68efb8f616adc78ba853a4c97794a11503000460e77874ff103adf3b027a5739e674d7f2aaf484124d279d2a0000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0fb9cc7bf0cea4053a438d8e43d20896e153421d1ad91bdab64eaf3be8f28049beb78095adcc7628184fb48803ff278036bcdd6a83ccb2067929a963781b0338789e595b88b789ea7a04f590f29f778b7cb8dde4a2b4d7df31be6564fa04f8099a95992773e7c1c66fce222c4e19a04e18f40c0617b344988bcc489570a2d9802f03fc6dcedd9dabdd12f9896d8e670fde8a02b211460a8b19006289d3e9524afe12a85122b1e79c6104cd960da6b9d4819569e09df9fcbc1902d25b38a8d69bdcfc5629f24d73469d3ca79774852568267e802f57a81b67983a0a3b699432cf0d117166610b3fb341bcbd2a9516fdada1e765cd63f49541a7317b0fd24d37a681bcecd46b1bb2eab3ce4e2aa7b0155b5603000461f089e76b2e5669af04b90a1249bb95439fdfa8a8a1975b0a0000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0faebf1ade9063cfea43b7f466a6276fa093d743761f047871be02ece8f32a4f332464f68a245406a61e339af607c1e8d043cc052d76bed5db8fbeb1775150eea55442d802908cf46f0ec331989fc3bd0cb84fbd48ed871f3a871f8bf08416a90decad20feea7543607367b141a5ad668b5120fcc0d7ae83c9f0da8cf36c96fa1f08a8c41fedc9b756875ff8af663da4b1a0d0b550022790b3f5961cf8308dcca9e2cea42f47e4c5c67885f5669a85387c97e4889084b71c8ee0b92894408ea3651f211e495fc84279046701cf28817b47f5ff97e26cd9848a2ba884496e5068cf0c070699bed0b7b55948d69d6d3a100e4c9209246ba8bdac1cf797f90d648375b803fac27a8799de1a18a42b08b12fc803000461f0ac389f61cdd350a992deee82c7ddbbe2e92a2acd097d0e0000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0fa8916cda0bccef7ee15d87160dd30460dea2d717c11db48a42b887ad9cca661ff47f71812a8aa17fd24d00d900c653173c099b0499cee4abbd85a6afeecfa6354c5f120ce6c31b729c410bd0bef6c35b961140a7163c575d1d661fd4eb89f3164be4c0639a5bf10e723a622b30894aca2524ada537b259f7b6f142d69fb2663306628aeec486a653023d853dab3ede338df75909b976deda0e4d41bb75b0ada54f02959375aada0d34395e13f984dd5bb41b933d7564d4719bfc2a1028f70b4ae5314316ba3161627d407fc98b0179087c37b87ffc688362a2c1b946eaa565a40aaa67e54d6978bd91afb11a34e0e73dfa6178d7e4426c150e2523c170cb988df2a9d6dc95d3e981ba92fd31c28ea8790300046b0507b1176a886c9cfb2323913bff40647aee27f657063f130000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0f84fa5ace9bbf560a5131a2260910ee96f1e816b2c7d26e6fc75d896ea98a3b055c8853c4e62a9645757c3dae302556d08b6bfb50de8fa574475833597ea9cbd61fef0a0fa06e4c19a6322dddb8608e428e46d5cc185b603278b12349c0e645566d4de64df97fcc32a79e422dc9aafea1a89172a439fc9cb6a8f6cc1c720090d60d56daf352f26a851fb9449ba325c4375b9a98c6caec38dbc745e24c184aaae2794b8885ecf7c43ce2dbe74f81060957803b2254c8ed8e6863ef282cea20701f59dbcd1dd7417f2ccd2d9e01d01ddfad92d9a7fab0a8296b91c3e975b93d5c2d021964fe7e5f5937f4afc6530414bee2317770c27034d4154c4a00200dd77391cc44d28755327b734840dbd989ecdd5b0300046d5c7cf60a911a30b5aa83df014dc39bbfc08220cb444a122d0000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0fa5d7cc50abe177a4959e51735d2ef11e02c1b38dc8be33ef8d55bef6365a96ed13936e5ca525f7f0bf67d06daa98c3d506aa2b7a21c7247ed94f6bf2e3e622040068b8adac7e8a85fefdce59a7df9e2f8888a360cf9548de984f1182077d4d089ec461b1de1758471b8fbbcea0b93407c6b7259b9899c35990a763a43f93b6800fc31f87adfd78a30c7d542c14087a3e142358aedc0586917c6ef0eeff53481124c92e03956ae278a55a9fb503fdf4bfb43fc741daadfa30c16d3bcd3507bb0fc3aac5a8842f53abf7aae3f85dcb818716642cecd9cb214d985e9fd6526137260250bd2fd5dad0e5243c35d8e90c71316a60fd7ac668c278b5676a782c52bce2749edbde93539af13e47be3769b93e430300046ee733aedf9e87ae0442c8f477a46736a50db99f4cbd3e6b260000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0fa48f9e5fc94adf1b7d8dc6713528e59e55cd2c9569a98805f531deda6f240236fb9e4158904dab2a6f5da578e696ee539ac96a3ec3d47018f9da3744c8ff1e9f238b7fb13a688d7023cc9b13ce0feaab86d9e3af7656fd45ec671a62dfc62373ca40cb55e5faee23b438d598a287a22998a2ed02c03b0e57c24fc1bc572ec3a019de7e12aab34724dc10d7fa5ddd02318dbc38920d0aa8fd89a111db6b3acaba3aa6ab9d208425d9306c2ab281c1e78f8682c475c8ede04195eea76f5bb1ff095b68b32bc71cd5efba03c0261f190601fa1e43750e2243d117ce2ab5a040c68803ff63f089292010d3bfb51e6fde7b5b0187a3160801a9249509738d18bdae61b094b0146bbb8a58682ab7480f76563d030004704d15bf73c5c65fcff76037e0e91f5377507cf4959c8bf9200000000000000064ffffdffdff7ffdf7ffedffff0764ffffffffffffffffffffffff0f8eeb5ac0562e840a9d7c283ce0b91f222ff8ea7af56b986495f3ba6338055b9937b67e45257283e63ae18422f8b7bfc00b56f9e3fd4a20dee7598f13cb02ab5c2d455e1e30cd5a1e8baf26a0d0fd9d588d64ccbaa496eee3ce97d0fe40f57490a2ec72a77af24eb38642c8c9ed7dd1242dc2d3baf75e402b55354f83a72e17e407206c6af5847b1f7e1a0c96ed1ac9ac6db11dae4f365f2cfd6634e6cfb3acae96debfb2665ab4a3e5309afe1133d4688a0d208904aaaba19504064b882ab2b6284806d677b13e60d5d1cbce5cd42478042fdf638d221827df899e396370eeb508b7c9b4bb7ee4268d5d951d2a38a421bde648e4241629b06fd07928db40b72845231f8ec872b104a8c57cbfd7a574a7030004722e638728e6426e7e0ec37f763e650d2abcaba4848e9649270000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0fa37556d5483f6a52d321155897786f44981edb51fc3ed2ec24ba27c1cf81f41b90b90a5c316ed57a43b5114c0b21ee96c00b1e8dab769450bf3bffd4975ed64f48995ad9e194264d51ec8101bc71d96180ccf46dec638c670c5588973e744dd2b9d5dffa157be1985acce8c5ef4edbad60b6cba31d860832e2bc864a3a9123fd02a2423ee240264e2577651fabf6b0c92a21ed96bf6e048fe628f39f2ab4db3d5896154b26d93807659738d76dd24a09b27c23ac25f1f9f15e0057bfdd67e77f13385057fd15996eb72103b93fa12eb2c9eeeb9d2fe001355d1575804d27cad6055be3d5fc4a040e45f7c8796e1be89dd9cc0ca4c8fd75df7dbb320315754015edf1851465a3130908248435f1378bc50300048577e23c8ff449099f51543a7109518ce230ebecd5c4e3f7230000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0f91f6aaa6a0fb82bc1b5fa7d02cdc57d0c7bb60858648fdf16c52e109bc91a1448260d7d846f9a2f05afea46d9d6c48c98d85b3d3bb8aa539e8832fda752115180f50d910b347e5f53b0b0fb14e6eede29423f5097ded4d0ece356193c6206d411042986ca5d85853707c28b0ef80305b4c4f6500fcc7dee87f7c76c68e90e9c41310bb6c886deab2a759f78b12e5f220e924857daa20b9bfd988e2b6f3ed32cb39f8726108c8a353dad06f501700a6568e03ac9414391a58e45e2dda7e90746d666cff559d1de61e0204df88938750d0c69f8ffb9c91a33e7a6fc61cb87ce05f00acec78714a9938df63de3f7105bf1dd4243ac030dbd32abcbba2f295efd08e51d06e889f312dfbea5d6d1ce28582c60300049363a07d308c41610ce08a5d14f56bd0399c019caad645100e0000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0fb40e0ce6f0d1d1f18741c23c3ad5ad0a17ee68aec088252abca90385e6a8385161705ef3089e3baad5c96c016f7f507cdf2c031b0759a195bff32d67795fdaaf644332514cf26c9ec1884e648916886ab4d0fbc922f7626fcd26a023a6868c730997bccddfadc832510b2663142380c98ac001f0e659a9ab3104b39bdd5ee7ff04309f7f8624a723e10e45f0a23245cf24663d7c1f8dcf755af26cd3f7b5f821769bf42dfb4738c9647757aa6786a251a7983bba626fc3243900581cbada1b48e1e948f7fda4218b3fbd06aa6a002719d936342a4ec9e1da73b5c0b43c4089e71753d1da3bcaad4aec37ab542818aa80b872ef7d79c37d28b7050934daf9db74eca06bc4b531ee65aeea8d9fe892e319030004a5cefe80ed1f7d18da3344b662ddfac491cfdc5512a42dc81f0000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0fb36bc91f16a9b25927808d0d7bab730cf5f2d7908bb27e15fa50a67aece2269deed45bd9e9bf011689a52d79da7c3e9ad1cb10306f8cd98c55fe9ef0d6e57336b441eb9ccc50376f16b722cc01d30c30acb333121e9eaeb3ce7ac6b90cd117081caccb11ccb653c1026d32d0f7dd5a58e21a9b427f039c387ab6b0c193c768bd06cec104310951e90187ffae835b37078c0d728e721df6150eda7fb60350975fc44252bf28bf39f274d0200ecb220f4db5aef9a2f4166bf173736509e7e45c6de7155405e0b162cde4ed761a927ad41bf4d903653a5019ff8669c9381d4b663513c3f404944c64fec0af4cdde30bc4137d22322c0d0cf46173f5ff17c0ce91dfdda838e2eecbeac7500707d11de359ce030004a6ae4a8d9de4d78ab6f7efee5aee49c67872b41c375f07182b0000000000000064ffffffffffffff7fffffffff0f64ffffffffffffffffffffffff0f80a6d12eb2f539f6da6c105f7d103d6be7d28a737fdb9b1dcf61e0e17fd7b33a4046c9d962e1597b6bf4fa9280c02ac6a3825878581b6e0b25c5b135c1b3450092e64f8b5d0a351c5c033611f123103ba47ffa51fc6226151bcd308e9e3098ea4dc44fa57edc73ab50509bf3eae6c032161b11f995fcba1ec740af0c942877d90ac4f6a4218e216a9ef18e131411532815d6ab3d8c9188062a3e34a87f777fd450290b6dc37d73169dfea5b28455f56d89a38accfdab297e8a9c325c60a8f30f7c3e01f631e515fc43d020cb2d5b53848fe747cef7df454afb638e93f4b7260f0d62b880dd4f3f2f459a68d36e4194482e341a769cd86e1660c5b4c23fe50f3fd0db8706aef4e25eb558aef127457f82030004b12c89714fd253fb7a4237fb99e651a72aa3360b5c35cde1140000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0fa73f87f4a7ab165fb5f9295d32f225117bafffffeb4d39c502f0f92ff0a8a202446bf9c8295a299e2e8f5e7916ba8f264b197bd11b07953140afd56d8823cd281c83aab3aad475d0b405fe0ac8ae44bb92a4fdee9330f02b2a39708a02f93735e3029ea79b23b419429fc02943b62d973f1721a698370a2dccdc22469fd1f75a1940dd795165b10744727f24384114e314f691cf87c8e438552ffb28047c1bbeb801df7130ea68ca4164719adc999c57ab0bc9186e46a4f93b1108012210c990506d2158f23fec350484a47e913009a001f675734761508ca80d769043127679006de72619bc850bee4a86ba4a3cd01921dd107691b13283f2e18437097e38fb8d6d0035f9887f2ea9781c393417fc4d030004d4627d8cddcbb1c6adda4e785c4875c80f438ae2b8b37e99240000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0fb91a014cec2ba0af19a16edb8a6bac0b5bc632e273960c5f8569a5f6c5e3162c00855cb6746f702e53724a49826b358ae174dddb9d2f4bc3d19825895c39623b503c85110d0cee9f15669e15be9dbf6ab6f52fcfdf1901566e038b733071cd54411ac70f2850c267c22fcb5475b8732531636b53a3689a0c55eb163049b26e4101698e7b016d208a31728ffbc003fa3c9d177f16dc418ee1527a6cbe147a643861b396d77d9103cd74f4acdda6c32901a13480fd771753734712f3692b2e98bb68a75f6c357eab949988f04cc14d9ea1ee6b030646f67aecdad782b4a0e341b018a2ac993435c16d501da0f203d7a3a2c338331455d4d4361dd0602b3e15410b02af94bd5ab77ff0c181358196f90d49030004deaec96a19b80506834dd2f96dda238ed5315ea6de0da5250c0000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0fa01f42bd0b0d5660ee9f7d2065cd006d11c074199a89378f752f20b714e235545c966b78b042636e9482d98883f32073df030090285f7c7254cdd451bd26f94b516c6b96795dbd9c4bdff37bb21290b48db929a3fd17963b8d3a390eccea638e32ca0b66581305e1627f2d0cae361703f8c20e75eaa7ae1691880fa7fab62b980a807fa6ad7279353ede3a50ba84ca0a0fdebe643f2f1e18243acf53ca3fb1896e05ca28ad46c2db7d49f02704ae7c7a9912ad9191545eec44dc5a4eff018d09ced2f77e7c0e28f46d68f44454f506c9477a31519924f5765e40487e9e1ed63809294e0b193b0f5642e20a301877a3ecc9c4ac8fbfc90baf03eea84441d4220a2fbbf45a03eaa763f78cce20de345b48030004ffccca52ebe90ad4084eccd699b06fec67a46d8709f95d362d0000000000000064ffffffffffffffffffffffff0f64ffffffffffffffffffffffff0fad1858c9207cc3754799382b2211d7393e6c5c3f84552b2f4b96474005decdf4ab721beffce6211a70f44cdcb2f46fdacb2714ce08c34123f87fa2b740a5d4b33bb35bf304bbf54a9744f0771fa7e5448028843b29f26c3802459a4213a562d924b3e3e503710bb3d2e8d841011d168c8398f416f204fcf1d85ddc91f1e966dc08a0ad7f9cf2b41c493fb70cf244f5019b495fb4f1a254d20fb61b71ddafdd5c0234db446ed2dbccf45339d6bfede0e7a37468ecbfa5a55d72644ca7071716ab9d613e2eb7748356efaf5318657bfeb991201ffcd1cb35679362f88b06d380b00743db013333a1bca10bb3b9a94cf07796dd95bce1610d12ac2312ba560e3983599f2e743218eedef5e85d23c42b5d6d04000500de65ea21462de2def77c633b1376f8ca9d56790c99f0210e0000000000000006003cfffffffffffffb0f3cffffffffffffff0fafa673a523c1e862f4a2590f3da9e6dd687a5e05262d5f9194c84e923cd8503a5aeafb3d977c910d89d358f329c6ff174756daee1a0e9cd945824aa056fee9a9d70224df97444c9e548a6d1499bb3d99a9be5888f080156b90e122339576d455c835ec8ca9278fae4aa1a4754bd8a75f2c4dbbe77b03d42d92cc4b86c5c7507800a65f251a307b88282c7da8864e7f078f1a35ffe82f0b5bc263f51a1ced8f5069824f269a675ef7dff99b2a5cb1793a83e634fb2019e362ffaee3508ca9072b933ed96e1c90483150113f0ca114fbda1dab626d4e38de24146e69c73b48e57902973b4c5119d857a15bc7b17c432ba38b9a4fa7c7a156972cdb9806e96808b66955baed6f81c30271c0e59a2e89fd8604000509a5e959ce4310a921baa50856a964e4b0053573156666c30c000000000000001e003cfffffefffffffb0f3cffffffffffffff0fb32627a5b0cb1737901a9ee630c42225b33ef1570be7a54ef86c72fa2d151ccc566d567704368dbfb5d508aa8e9a6069bb3f681b73ffdd0e40f10cd1bdb380e8d489eeda80ea036ccd05bc09ffbd517282586ba6cd5f00f01aa3567421640531215fe190729a3436d9d64e11ae6929611a0caccc7c9295c3019e07b472f985550736d289d50b7f6909b272eee1838092450dff70b4d9253d99246934f5fab878b32a70a15c6c46626a729964e77a102eae0b9a635f05869a4c2bec2f4b013516e3e322185993798efbdf8ee2bcda4cdebac8bc9c7d194ce674b0d79f334c03f116cdb58ba1fe52f81d707edff9a14252373dad6ec2584dd19be44ca070c3981d9f0650b00c6f5ebc545ad7048bd96de60400050b15fed0110a0b51fb09ece46a88b571dbdf274d676386be160000000000000019003cfffffffffff7ff0f3cffffffffffffff0fb762dcc52808911d82b9cafc67234686c256939fb5b4bc6d5558817fb5f64f179fec2d4e5aa001ea16c488b902da262eb03a1144d7543dd2e4595e9e6bae99feda08b09859b1cccdcda8d7f2af92b05281f4531404bf8b1e4a93e4cce7d2d20282b64fbb13e430e06983f825127b5b758e44d989de49e692e56a423ab354be611110275e5215ff50cf6a259b84594d1c87e5cebe783cf2e9ffea274c404f11206f06b85e77987b35a88cf7ab2e5729ffa4b184cc7580a11658620357b6ce09a5a1aee50aa5626bc5e0a6628b123ea233dd9908c031ffe7371093fa0f021b04c8133060ba1eae7d8f87d6eda671382d1673088d1484f3a42cb65dbfa814d47c84f7d01a8bb5f68accd46b0460da6a8cdd0400050d1cf4eb47bee3cf406a057bc9657fd38588d7ffe99895ed030000000000000010003cbdfffef77fffff0f3cfdffffffffffff0f982d08b435ada365bb4500163d7f0bd11bd9e257e30c90a71c072c0e83521a93088f74f38e4bfa2d8814e19cc126fcfe24e4fc11042d8f4a4160f8b5ffdbb5067b727ae8a5584c236bc4620d3b15beac877923d4ff925f67cec728c9e30f00513cbad3e7e206340d3ca3e90fb12fd6bfa85288032889b273a41de263b1893647175e81909921a14ca34a056b2a151a14e0c262e2eddc0dfd5068c4333f3f6d2546e634b01530b8e67c149d2abc866d12a60fcb78505aee79a74600a010768882ad10d0f39d7aeae36bf40468ad556abb9b58e549cd92b5f284a68a28c0b9e3711960f6d8cde13516908bfc96629fad6fadf85c0f23b6edc9899bd268a66f2411d6a6195401f816ed216ae2ff5baa9cd9040005100d3b2d04f0eb349e74d02aef0699054488d93c09142103290000000000000013003cffffffffffffff0f3cffffffffffffff0f880b410edb519087e808e0a3af0a7407e7729c06e97a17aac159bd9bf2260219b58a105b1350808c1dfd28e669d023d3a8ead430930c5991735d781a104fae822d1ff21253ba0463561580fffe07e5028d07edf44d615ab828de16e03952ca42adaa66c894006df417743d0a6dba731589a8bd5dfc8ec6964c1b7ba953c25ae80786368c9f8a7e323d3cc8688526d3282514f9944415199c4200047eee15e23ba9d02c754f0c65ed886c80ae66d8a29eaa6d5b3123bca7a001e79de9b6103e3011fc926598305f062e49c9d78f565ce0700026891129d7b7d224fefc0dd9d7a60a3ee2bcce5296636d032e67b04fe195a3a3e44a022d8e9ecd98e4fb3049bb6181c384d89ebda24ea3b97ecd4b811844040005157c0e6484f8154e64eb9ada6fd4051d06a999f7f9da6107100000000000000005003cffbfffffffffff0d3cffffffffffffff0fb7da8bf11f00974f8d7c2b57dcc1f102f064eaf240694aea33b99ffd80f2a3dde5e020363b98046c9307b1abef4210ee35684ca5a45920c27501017591e38e6c3ba363d7126767619fd5448bca8ccd9eb327c3431999f287704f552ce4e570d6061128689dd7099e3cc3752b423c95b2e8ddc47f70ce7f0b657a7443dad60c4d19ca46ecd938f7be8a694f8d536c820892700d054682ed534acb7a92c590b6636847d04d063e09900c3ca4f352e7446c8e41421a7fe84bf15389178d6b4c0a7699a455ed5fd8bc5693c2636b05e426335be302c269e768f72b24c26969053bcf0885a9f809f8c16e9a45f9d22d8a104ebe943139a0911e62d3b351279f31cb024eeb44ade552238d789051cb0b7a0cc00400051ff40e216374dc81bd66b7c6c3328413242d36093ca3df0e250000000000000014003cdfffffffffffff0f3cffffffffffffff0f80c869dfe7618b694110f046ffb21316ee9a70e73c00763fc5797771311f375459d3de2211a83011b696bbc735028e836f3f8e5c5acc221ede5d9b04a6aded9d91335ae23addb9e395576b291ca36521a651db29e85e3d5a5f22e6f6cf007aa632d28fb145a9e4080e495440cae20a848ab925c2884c42c4ad1e69ef3a005c16007b59caf083e51a597082051bb4a29e0719949fabcc554ba979667fab590ccaad18cdbb29d5f6a61ae780d1aff7e3eb85aad0a8813bea079a0cc4ff3ab8d1fd610b2b21b751fbb1e4d5543f62cec10f17ea6b1cfa26044809f9c39e247ff522160fe913868e0c2d440692b14ae9ebf271fd1572436d7c934d78805997f255a276ebd620cc93d97b2c4d2bd6f85e129b04000521589f0f0622bc9c3e0edb75d8577143d7ef6d417581c71b1a000000000000001a003cffffffffffffff0b3cffffffffffffff0f81c789d4b2e5cd9ecf240f5e6705ac057dfc19f1ea0f2e4ca751d9ad7e7ba7cbdc194567351f4153dee957468bc9c277aabbb3d775ea97c2f51133a8b45978b0dfcff4cc3acc72bc8cedc46f42bcb322a7513657f5424ac117082dd317049497c08616e703af6f95618e3653ef2df8e7d2250d2d8adbb5b50a7267d414ebd64805539664f28f02e616a631ded1ba2ab0f3c4ecb702da04afc46d6f552dcb1f45672bae1f698624a18c014b26219ae48788ebbb5b3320a29329f299acead163f3feb27a4956ddcbe423879d64acc59ca788be883b42d4b94cba78466540016f041936e1dd2ad6907d4546dcbd6b420fde4d7faba17f958f74c739f416e588f9ba9861bd1b6c6531f0c9f7642a98f1a4950400053126cb4f89367d35a47141f173b1fdb93be368006d2241e41a0000000000000002003cffffffffffffff073cffffffffffffff0fa4e840c3c22e71c4e23e67c39bb9ce4ff8f63a1dc726926d6925a0c466714e08a98c061339b9d0f8f791d1e8e9cb1a5963ac2a82f7e59b8016565ede6fc26c5e5553881fbb76b3b8e332b853fb44493eb3d3c5fe05f5705e9b4cdecb94b47887da905ef3ee30a91511880aa58e708dd255f6e66ebe4b87c1fa86df79c26d686d10b408eb27238b06870a175bae7185300c720cdeede2cbcd1c65c4ac8d06aa74f6303d987355387056b472c03ab0aceea36ba18300238c0b02176530c11cb3c0256af771d424d58aa2a37bc1a0d60939f0c870105c45c28c59cbe409e4f95b650057b91ed2f3b344a74d523aabe7e9175dedcc0bd491d4d24bede8ac88bd689964ad1f48741ef85bae57aa6d5ebeff0204000535d82d4784ce7a25e10ce498cbb08172318ef78e9be2b4552d0000000000000008003cffffffffffffff0f3cffffffffffffff0fa537698bff1f9ea87801ed04b46e930def80115b4061ccc9bdc998f69afb177e926c78df94de5b93c50e33e8b33f3e9cc33a96e5210e4b3f62f07f8de8d6a4acaf277d49d9a153ddaec3d2f75d049406ab163ca3aa8f02bd4f6016bf19983c847d2c278d84ef41825fd5c94f3e9194327ecac7a2794864064ac05918dfeede7319b12ff5310815f035a7cd1af152ef4367c94e4f4eeca64b24e396571d1f724e8c73d61ce279fb0d3724ba608cadd41eab0c40a5b7d666b95d7799e3498dcd60444cac59e31dee7d5fbd25e948fe5cd9af466ffdf1702b0a88111cfd89e2fcbf12258e2e44c7348dccdbc8a609cb9e7fb3ba507ed07b12bd3af37fa18155c8698a173796f9af873d0d2bf2db390a99f00400053cfe9365f2f39db6ea09a67ed4b33e7efdf300f76863f7b201000000000000001c003cfffeffefffffff0f3cffffffffffffff0f842564048090e61af3903a0191f08cd8f1f24174791a3efadc57e68c9bca1b2f095382e3b09772a87136761056210d89aa8304da7f25bef09cd65cae1fd32fd2ea80bc2cacc686d3b19949f2ba975994b2cb9f53c00a21fd92ba25e2aa9da6f9f5ecef02920f39b7ad59d91da6d1ca7c7b57f9026a67c7e3b41dbd98947be46d1999005fe0e126c95a6dc79b0f5939978479887908d6d34d917a206f7ecf65fec82426990896c8bc39112435d8ffa8f6897f5315593f75a44875f8a81e59c9213cc7710577ba7ad919128983fe49f034c2319c78411625b2f14b48228f6d114416c6b6d5170898bf77139040c76a75ebb2ff14902b4bc218adbbdc6534ea16eec3cfe165d580d67157e2c57796c41c0f0400053e6cda4698b1d5bfec802c6d1abd933c4d66d01ebb6f6cdb190000000000000000003cfffffffdfffffb0f3cffffffffffffff0fac28998b3a8db74569979956e2ff93642e8d0fa5c248e6af72abb0bd231e5e73a58a349a49536d9236e8886bc666aaacc092d7912f98c7f80752f89b82f113612bf1ae3d7f7071af3855ccfe01a51416a81f35a35bcf33f05339e227c51c2f3eb287c0b74cec18eb47eea3f0746ebebe67825250ee42df6a8fe122a0b1a49c86137ab3c552c45230e35572d2e9980b659e9455e80240776eedda27fb846da49ca12502be249fc5024af52ce612642014a44b8460c84e8121658ab61d197264be429200900168fa93750477d515875df7c6cfb93973120029cc752eb9b869bfc519c47d4214d120b8b851c66b29646e1a8c2d96eac3408243ed1879f503b9f21ce715d4693b3e590361f772d912077779040005466122dd2b2aff6313556e1ddd62ae47d7163cb73318c3df20000000000000000f003cffffffffeffbff0f3cffffffffffffff0f8ad9c03598c0f3756e6ab11dff90681fd2aad4adc5af76f73a3604e44f27fdac5692ba46b68324939b28ffa2121002ba68e9a4873422d8a97a911b7c20132e055cffb482625bc8b5a45b4a811ae45ef1a8f236f68a9304fc995d568a33cfc89db7ffdc4cfa38c12cd37f71ea79bff2d6e862c474490a877f2c23d7f69a7a3d6f0387459b8a692db323cbb3f3814864293e628c05b253e0692568b05f417da79b996c14ebfd1bdb313370ece7cb49a4508ac49e24e0123172b78f42cf55b0e8f83606dcaa61050066ddc22e634771178170bcb0b229427c85926e2012676c23d410fe5e8dc5ef91fb820f039b58527c19f5b1447708f88d6ea873af569cb0930c830a8303ad403663a5c512374d7833de04000552641e93fc52c5208cdc2155113646e5c51a0acc3a483e43010000000000000016003cffffffffffffff0f3cffffffffffffff0f931f67f621cb5e2d5cd86c90d60be546cc138d771031c7a93212d8041e3665f0301db43f93f691ced41f7730aee18819cfadcf88f0568cf03d696564e2c3b6bbe248703a0eb5e2b20f42e0e510c46a19ae0b79abfa71bdfc6afdf7543713d359e3cded7651fce584cb12d4473ef1ddb6c9b51b550b96e4475fdac9ee87c315810261574b32d109d4a4b143fcf820b060d989ceb39c0b870a091ef5bd4c75c23b0343e732b017df0d0d9233492b81027ca3dc8f6457d88606da93f21acac65009f476e703919afdb57e2eda5c02594e90f516c24abaaaee425a54cc9b5632844613d7b0882e827975f4247d9fbb801e1fc338b5a16851ac6e1a900840854e2e2552604543a5fed7294499470f88604b6404000556d6751f544019baf222d15abc2b651e4243b6f328324123340000000000000007003cffffffffffffff0f3cffffffffffffff0f8c2b0c2f3a10d23a9d423354bf53a3c863c8286f273112253aad7efa3d3d1e9395052431229cf824dda82d5777041b4fd63432b54fa2c90aa825cf2398dad84398920eed13308c221d638b59ef1331afb21eb2cc0765c9b03f2b9c5d306dbe952df076f1ec311bf98b6e8eb485ac598e059060c42bd7eae00f274f846a5d2e200e5524397b8f8fcd60617d813162ddc98c6d11d4d7b47470135f0c51159fbc86f76f29804d2f12f2c5232a3878dc53a2b51f5b87a432714051e804e9152ad96787c16eb7e182f86c4d6cf17170784429ff690c2b83572cf5952260cd27c9aaca10de1ca542bb2e1b4b9f02cf966c725233aeb16d7334896316654211e12a635811e2e8bab280886d620b70ed32b6e6080400055b025b1d9b541869eeddec4834c53eddfbbff20f240472da1f0000000000000009003cffffffffffffff0f3cffffffffffffff0fa4f5e9252d5be20535f1922f445edddf83c99919daf3fd4aa43c1e18772c7b7a0f07afc94e403ca9c647df6e08cc50b7a30ab6b0f35f897a2333a7d63ab824a3b2f32219e22c15589bfc14dfb86ddf82a999b8be4e5c0b3ff01d84168036953c5d4992e73a0103777f5741cb235db23a6635d290152ae361bc28b813c8f6d3f9164c174acdac8fb524eb0e13c3b0ba9cc86dc6f97ac61c32cf1e65a8708e144085bafbfeb24fa4e8d582775f7e5209e5a63db0a042ceea4bbbf1cc293ff8a70edd9971c178f8d68861100e24a370fe308077900202fcae6e2e62d5c990825d2a05b797b5656f92dde04320109c0f8c7b6fe2f5ee1bb2ee63ff7b52ffe50fba17a84706d885ee3363f19bf0c2159f75550400055c559005ffdd6c3ce2ecfc6c083c5a7eec99c5e419ec2fb808000000000000001b003cfffffffffdffff0f3cffffffffffffff0fa584c470c79f3defac4f0f14b9d549b36f305a36c482d7a16a95053be4fdbea4afbb9be4bff847cf24b929d715886b2120751aee2367c15cfaaabc07dd70a7da5c3587df2ea72e6b315c61b59aaaec05b5b02664f0fa98fd7d17da9ac18fc7f9f61d2ff716111185aadc95a382a8062061e6e40fa5361a9601feed904b8362140a1ac07357e6c026855d640935c03963b626ed92246dea809f351f0e55170a424525139298aca340f4c5b213115b079381af9a41427da443220dc0cee549e18a25eb95b33a04c22df89c7da0f7cd6cf23433e1d393c25f054d89814ee6fcbc7317bdff59ecc371933e42b0fe98126a6e3d024519ba1ac1a04b6cc28262ec0b728cf15bc27f2321457691e8db73390cef0400056520671b199fc0c1adf3a177d8845c6c96a3b10ea6d336562e000000000000001f003cffffffffffbfff0f3cffffffffffffff0fa00585116cc59cbf796970ca1ae932ff82bdbf6d9d6776e4c42eb0e945fddc5e60ae18a1054122eb819e4b485cbfe2742a096bee1c1d27296984c5d136810c39a9ae455b9fd61b5ae9e966f924fc2be289bd80ad9a21b3942d60c16f9c9f8d622da560d82b00cc8e96a6b91512049b84b87864c070dfa47326c2848b3014e97119a09a10cf33751fee21e5b0825e285aacfd3ded4f0a406e81a98cf12591aa9e3c9bcf60e7347c76a88dee074434ba058fcf30eab976e3eaafda3ad2ecc1183f6cad43bd917a3a27203e13256fe4a949fb8bce398a64c70d3fe20e12662e247810ef43ed8d6acfa86fc778902c6abe804dbbb0766a17c99f9ce4de1d8d99e9bd8ac821323a2262ac7bcb1d3af0fbf1100400057c06ea49d4ec15a80c3116d837f706d1d1cf3f66f99236690c0000000000000011003cffffffffffffff0f3cffffffffffffff0fb4a2c7ca3021387a7d9ab6f12b41515e5e551c056f6da1499184ce0e20a5e6227c6bf3510446801a71be4886122f2cb4d8b4190f37ab07e8465d55bccc6c8b1f35c2c2f1cb6f703a21975e8f4fd9188ea74e9a20dc74f47f3fea682266a0b7ca27591cfccd06a98b76acec523973cb5cefeaa2e256cc3f5d6bca3a829b47ebb901fc5171cdda89570eaae72d28aae41e520050f6013d35b035fc11525c3ed9e8b7e017e76298ed679be9b6c7a19b081fb497c776830263d77a7db0a748f75d10fa1fa0f1a738664ce946fc9876a643836c8bd79d7981764b1c535ab3cd24b6e009db7a56e9781fa3ed0b0a0cb29aa3eeaef31f8fd448f6fba7a4cda2589d847ff66b97fdda6d00139ca5583186afd5b504000589deee2aef1a23dec351f3746c74b849827b21fe0792d7de390000000000000003003cffffffffffffff0f3cffffffffffffff0f993ae377f319885b029439390a96d566c8b2647a233752d12ee1023a7abb858cc0b2336e7594a95317588bba1149052fce37787b874e4cbea29b8fede275c412fb7bba00b4d1c4eda4ef0b22d6b6ce6e9998f0e8a069c3f1189d254b9b5449158c014d1a51774c7ebdc630e08ca4c1acea65e8fc9e497d64e76d00bced502a1f0cf57921039e903472e04346a3a8cd40cc59ab532789db41ae4122b372732101a589631d06c85112166b48191ff9078dac5ca1f0dc79eb5bf1dafb227f58b470dc04a8dd13bc5a44aefde233f24ea60e8584731c0539de227e2af85843c57824141ff900f8af3ad49679f48d4a5992508f0547e77c2f5b913ac76b1c1f433c78ff2136643c9167b7b5180c264df4fe1104000591836c18109e712e13fba0aef4f792502c232d0e84154d0a350000000000000004003cffffffffffffff0f3cffffffffffffff0fae5d3ede5f1901902175642042a0028ab54ada9281ed746e5d1605e4ca56af8755f10cd72fe684e508dcaf99931842066c805487e007257550114e3f0d77658b98740f550c3d4dbdaaf3734788d11e0ab68bcb1373978c3c84a4b35a679ceb535bf316db50a3c3184126af38ddfc38b43d8c0434028cd94d3c22c5b81d5cd3af016e4f1d30790748c1269e2c124915f3908701fe4d8f00e6c329709dcde6940a98a349846625ffd90f638c31e054fb5e8b92fce987e5dd0e4a458a47c5a7b88ee2b08cf982c73970cff1bb8c9d58fe7cd954423664b78930b57ce3b17d0bd3b21475418958cef0c3b5498c10ed5ff2f4ea2e684d504ae8e2060b769b7d9f2cfab4dd27a713bafe73a82d00dd2570ead30400059e277fca4dc762e2040ffa896e596b79dfdd805e072707b417000000000000000e003cfffffffeffffff0f3cffffffffffffff0fabfa5a5d2c6a8d28a980232f549d5ccbfaf6e58d90f6c9440aefe5dfad639269a073b2cee5efab76424d9ca0261415f47929fe75cf851cd20ff7d470b546819e4e32749a790c6cfd3cebaaec524283358284927e07d3709a01576cfc90b9d50e56b5a016d3c48e0a0ea96d9d923eb9a041eb5a9c37e8de56342ba643a691c3f309fbd754e9cf0e09d008d32550382b809e938ee76753d3724db184db4e2606b5042795ca9a04a3a2a4b7a48f5517d317ac8474bbfa3471da79f82bdb2c23cdd89a7a83608703fa3269ff9fd7a552f9f4412c64cb7e51a7d7e10d051d8a91fbc910dfff646d18a67497bee9c9ea8d8f355343605a1e461b6286a5ef226748b6249b1ea36d95fe83fc930e3e1d2506e018040005a1236e232aceb693eccbd6b05d15f1aaafbf3ce25007f6ab1b000000000000001d003cfffeffffbfffff0f3cffffffffffffff0fb429a8a28ebe8c3246035758da82affe60c50116b86ffa0169653059dad5c415941dc1f5b24f31a1f0ec636fe09d307dcd27fac1e9108882f53202d12374aad19bd447dc40f9f0505714548bf64365b9ad96d1f53b7a9293f59f72fb1cfe1c242189300b12f9bd0a96b49e2b79e8c16a55fbe279ece5fecfe398ec8b857c381105ad73d4c6861c23f80f6d7072d592ff51af553323189c80025fbf56f4222f68ef2c9876c51ee2dcc8bfdca502cf259bb453dd5ec03d7b3b5dc1c037a6a4e3fdb07fc7f797e4f303e52fe43f2d622bafba3ec4690d7b4af1856a3f7ad2218e2b18bd0e053db113fa29cae2f0e4302d6390bd86c89fad14d45d99d27bfcf1f387416100f5bd77b964b8bfa75cfa866653040005a6ae4a8d9de4d78ab6f7efee5aee49c67872b41c375f07182b0000000000000018003cffffffff7fffff0f3cffffffffffffff0f968eed411796caece939b197689c6b3901287d1e1cd626c73d55b02101e875bdb0108726663fdbfd049606e11cee42793e5fed30498421927b628645d5f00849bf1cd62e2d1f07c0211881eda481a41db1466ed1459a17afdead3f982ef5719b77ea2ac47ab935d35454ae8a2dce3db48cb6bdfe5b8707628b92fddeefd4c3b2143e812adedfc3a9d2b4f003c7a91341efec4f411ab9bc55e7ba9966d71a899dbc517b0dca908b7491beef1628b682acb6d20ce3451e52daaa9bf9bc8bd32772830435762563fe250b41b726481300b6f5f8d005a691f3e4e7757c38075599d0164f6fe48f14aba1c83aa420cc81b6a0413306ab3a31fb48d526e2734a6810d058539fa3c5feeca10c3dc55ffdb19985040005b8fe9418a702020eb901e0485b61839e9757538447023eca26000000000000000a003cffffffffffffff0f3cffffffffffffff0fa51158216d1dcd92d9b20ee670e75ece47048807dde7ee99e4ad379b9b9e86326c81308681577a01e6cdaceb3c88bdadc69ea92bedbfb1fed31428ab3dcf2a788b29a68148d34e6c608e186ec6a9e65299bfff2c9678addcdad89fd832d99cf1070ef9736ef8bbe05b220b28afb7bb5697001512781f9d9c975990042147d46307f1c04cdea8e7cc5c279d8fb71e1bb32452c184c789b5b0ae5b00f9d817880064ce42e3bfb53606fecd4e354166efc8991cf352b1a78b07df0ef78c9e85f581bb4ce939fd2481278c7ad3f1438b12bfa412763d03b96cc95e6bc4350ff962321208df9a1504a3fa21c7e990d3f6711aefa27111387e1b7af0b4d44b2494315b7b33b00f50d33d6166c196acaa6e561b040005b9ab33a08bbc37d9b111d97413a889592428d43d0b92de76000000000000000015003cffffffffdffdff0f3cfffffffffffdff0fa98356416c0da3fab5ab4f0bac53d5d4f3510fe05fdf36c6b346db37cde19115a8bbcfece9cef45a14f81387221e3aa811464ff66051e87b6eaecf9317e12ede1fb436bd7f28c425dc395d3c7d1a0b6080fa66cbd8660d8733a35aacaf5b13c9fd0ca88ed0fad84c9111c2e5ad9f2966f1797787449042d48c5862fdfb2642040e527d56d4dbc3e85c33a87accf6e08cf44b4bc0148b21792e7bba7b9530a821763bfc9d42f26dd38862ccc7cc71a09c8e9938a4179625cf6ea33d390312b857e74e1c377ee150adaf8f711c8ea2dd7cfb82cbc2f028572c2d7bf153f93113f10dc088f3ba4ae5518866c8825cd820bbab20ae689e4e04fd5aca4ada2322efbb93005b4f8ffa2987dc07af46d3087cab040005cc7872dcbc0d65a7b2a0698ab8369792d78ba970d21d28882d0000000000000001003cfefffffffdffff0f3cffffffffffffff0fa13aeb8d9351c6cd195f963397252af0b3f4715a8cdd925a8c534e2690b6ed930589b4a0c638e0fc28fe4670445ebb0e5f28d78ef24dbdbad8720b6a1312e840fce05d96645059ba2bc0df1255c141f3aed74eddbabcd2360e56901b0bf2a39a0279aafd4d6727d7185a209159c5bc4ebecf45d0994dcedf93016735ad62fac10d1c47873c2e8147f0c727be4dbd2cd948e6e0863678d0b36cc26bc0fad76070f23e523c13e226a000fbc82e8594c7efaf7fc6e92e3eec1e8f1d7635f4831a46385f9123c96be8b602a6ee05ee2cfafc2d58201c7142385ef2c3d61964b6acf8180cb906c2fb31665ae681868f3a41b1160299ee4ca576dfc6fa9fee117c98d156e6302906f669f501c1695ceed142c1040005d2309fc6a1e667c61b5f6fbec7edd88cbe09dac24bb7717d39000000000000000c003cffffbffffffbff0f3cfffffffffffbff0fb9eee8c0258c9671fc6ecc985091c2b194820f9c64b6fdea286495eef05646e2f112a70a11df60e8930190a14d95a8880f8487f99255dac41d8997317d5758cd24021216fac050878900bb3a987860f681673f00d5c6c7278de9086332cc1d7cd331f6f11c856f3aecd1049ea4d0e6f1cdbedd289c3225dbe67fd0224efd3adc0f43eb43e338858dbad5df9156ad0164701c3b5e301ab67a865cc58dccf09e83cd528aa5a0956d1104408e920045ef5482d26301307ab24b4875372596074c016677e2aa29af292f9546be19aabf8a0cca6719d3a0bcdafbdfae83c7376b357b0e526d1c47536a8527034d0e2dd02bc7ebc8fd0541cff9e26679b7e185f36d3f4c9e22e8a831d6ca439aa3a0bf0e9451040005d3ba7ce31c99b7b41f19e3d9140689802e26e8fc5797b6f00a000000000000000d003cfffffffffffdff0f3cffffffffffffff0faa48280cc96152a584af056bb95eb1cd6f6d69ac03c91380e67b326940e9d8dd60c2a5499a835d544803eaf08669651e985e8f200f7cb1477d198edbf80904919a4d77ab6daab59373715bed01617a0ea68f57970d9bd4c04f96f9f1e1be9f7f20d95deb3cdab4f0b4af68d8c987475bdb7ca7de8675d3f41896fab5136aa7f30e76adb2e2fcbed735c95dd3313c2207a53ea5d7a6b9bc183ce2c8f16a21a254acac68a02acbea03cefba0a8281f94b9996daf816dfeb80b002241320798e2366038ad07b3e395b7638636fa16d4d10e9509d35bd929c0a17685001c337b19400779736f26ae9d30013a20ab21feebc73bc618e75dd1b795796d21703459c30001a1d53690fd979e5d804178e78d6726040005e46c811660832ef16d402b2cf9e7f4a1b315b77996330d2f2e0000000000000017003cfffffeffffffff0f3cffffffffffffff0f8f3c675a107eee9bef9b3c35c6a8e735ec0fb80cb9011604a3947e519cb125589cbb55e8235824499390507407cb972519bcc836afff9a7aec3a8a3dc1947ac864f3c5ef9561fa1c42369a896307f1c08d6e5f65a80f4f1cb640ca6dd9c3b7fdf8e21e839ffe55f830e75760abef5ef6b526b49e57151fc545e17be158ad075f14d1a1b17f09877b63d4f5c00b11d7cc585e7ea6c8d6dd0cae629c1748d01d392384504fe09621863d8eeee2b16430b6b0bda1101da7c62b12db2135492bd041853d6d5ddbc420f05488760042d9b13db3ccf982f0390e663ff1eb3cb1b8503006ff2443da145229f717b34125a1956e91763ee4353cab1e53b0b5220ee21000861ad4b719a09b21e09b99ee11e26378040005e9c74e30538cba8bcfc1387747573e115ba8b4657979b386230000000000000012003cffffffffffffdf0f3cffffffffffffff0fb1feb0eda50882046b2caf804954d4cb358ca350f26883c0682323b09bac0decf44148936552a94a5e0f2bd1d54b7e14a68a36462fc2c9daa9428d013331a87bbdd8e172de8d1c146e25c5ce7dbb778f83a531602b00eba9a340410143ceda2667d13394073852c3ee1493f4a85501e7905c4f8a00f17f5425b8c144d020532909698948ae638a6485484eaf306281d743786b62626f4bdd4e7ce8e6eda69cb62d83d7f0adc9cbeda7b98c098b9a20b4a2fd916ea493d6c00c844d1342c5932b4ab8cf71f5e80a0e45343994bbb8f2fed3ec2c509fbdd4bf8e9f3feb5a21505b10621b5708541fe138304df1e9b56b4a1bd8a9f60be76d94eaadfec2c978f7bc1c1ea079a375c5231af050b53b2b491b040005eb5d32e73da8a076e514a4dd12a68c204c92de533c2734bb39000000000000000b003cffff7fffffffff0f3cffff7fffffffff0f84ddc232ee98c9bb0fe48ef448ecd91f7991ce592013da0c3fde986d3ee27c397755f7b26c2e25cffdf0b538e2367f036a1f5ce963bc08bac40195c386f570c3ad38262465d78e869dc9aa5668a17cf9973e2515540abb7a0e7654cd8b172488b61e5bca1c5ed09e391086b98f9f0f53bb26a4e6b8526099e27fd89bcfd3dd6a022e9e2e681d8e267d18783b4da1872299d2b9252ec616258dfe983de2ca7928391644d7fe06165376b7e205b437c4d3a5f80d298a741c621dc1d31e38da3cb1bdf7cfbfd1c0fdd3e99e9b9e1b629c9fe9a5c50d429247e2ec93c5097184bbe619f1d2cf9d752a419ee1dc5cd2318773f327c838c686ccc7ec20041afc651854e2071b614aa415850410b946f836375019b6ecf64acd38dee9a71f7d5effe880d7a958cae2b442811c24e24e04169a09f1d2a005b5018a202b6a5860097f8fdd940c27d083ee5b65ee2aca531d7b66f729feee6b2ad05d1b8811b5daed13be6483c521ab2b992e7b1a90ce5bb7595e261c011a0084c628dd70d6bc90a90b05990864f93de1c7c51c9334304534bd9e737fdde0a94fb70b07232b64fafd319288b6495727067752278b42908e474aca1534812952eeceeaac73a08049b6f78c15b8053f97f9590ffc3eb0bf250d408c0aa687a441010a00b6c0141439aca64d921c1aa40f48b517dd7e2100c2d617bc1c507970643fd67ca01f65900ad5ff1ad2fbc2d10303277c18908e691186b20200b7b052ab906161c11d9c58e1552d9d5d4deb079d4317b5714483b258119735638031b6d3578332010600b254486d14b8bc3aa6c1f563bb8dbcc28480152ba5f82fdb89867d85826370c2d2a6abbf3ec5546c9f01c2b833ce70b415df9c9b4a957466237e24bc07325c88f027bacd5ebfd928a10a02755b8c143f10c2850f08e05070e85b4d620b31989e010c00863d03b16e5fe27ae875c038456656181abd4e6ba75119d4fd5635a802c4fd546c1f25adb0ce14edba364da3accfeadc154d8cc2b157a32ee4eb05d5f6caca65cadf61b7f1cc93a4daf8d82ac6a06c36d3dd22a010a62af97316a77cb8888795011200a10acd2009cd2ffc1bfa47a26d93861c51e3fb1785b452493b4a018cf16ef0d9a7265cd304ba4746cc0f8093c8866c76099e528c08f3a8fb8666e5b3104fe6648c39481341885dac258a599a8d059bd373c462c8dc6c52919e039226bdc561fa010f0085e402d8aae97774ab80e2c9be6216fb3ef2225c16f7a5eea15bf1649c59ab7df35667838bc611f6374086825b714338122b3d943d6ad3ad09db5215536fbc0abd8b227a98193e7f3fa44fd2592d131c07e6033c32fa08e7a70e1d06c1ebebf80119009340e39dcc51d8cbd0d140595fa5804e67f9ab1091f25d57576ffb92c11ee34d9c3adce1e183eb308402bb2c821d773f128f4359fc4790626c115310de2d0091106feb2a1db303d6b0f8d1cae1cc2920e43e33cc60fb30fcb5a4b35357b7c1b7011600ae89eedbeb3eabd9427c67e9a295790e8e2d8bac9442f1f1d959fb991528d0b63264b6df9c879bae8279b941ffb5465318086a7fa875e3b7ecf7fea1e622f237736bd88ff318e8708b6542a9ba4ab49de27fbf0c5c0b4384768eec4ef58ccf1b011000b63c90b1bb8c9c4c1d6eae2744cbc67485ba83e823a08258a75da34176874340ec41392dcdafb75f43181c7c863249f8125a13c5fa783f619231131129711e9f40d3766bb88148690f9e5ec742f927738bec03dacaa7d1d07d7bb57f8454068b010e00a2cbe66a7a36ce8a317e27a310d681000c8fe5cae77750e515a841adfadb29619e25ed7998f6baf12fdb13fdc61e2b6d0ad17be496f9590b72cc8599a07d896b60ca02ee7094eab194146a5ff55d669279b54c23a21669a0f98ba59bbd4f31ae010b0091961510df241be8e00c3ae1f099bebcb51e7aff1142687417f1ddc6fe6f3eb1c330fddc16c6f805f85c2f934b96ec0f035e0ca6a98c32aac769f394c8b73334842fff8fb7f5cd987062ce0e41b84c91a8bda11a2f9b0b30941c0014ac33969f011400b6705f94b4898b1a24fd3f4d21f8e190ff65230ed68a57b74f5dfb18d3bc07e5cd2687416a543791a324c79fe5624c7616e6c6b64fd38baea364e0cdf9c348ab51e6525d042476262a84500751e4671689f6c6651a858d06ab81f27e0d3f7682011700a9fc366c670da755e70c3e6e36924a401059f27893e5f48f8b99d8a4e7fb9c4406095136f04d560988669862992fa5f818b6aa0bcad7ecbf2c2271140c1d112b25f4b0cc3af0611bb75d6da35deb5499d8579e98cda0fa437183b184003fd2c2010200838bdec76b08d01441d1ce97da40442cf0e17e8b6d2e305579448dcde9240de463d508c269695053125ad867a84061290bfebb8f3598123575993b85958aedd9f522c123ce8f68b78727f5fee9b72252dd704693d782813e2a5ffe4fe3d2f3ef22000008001c001d001e001f0020002100220023002400250026002700280029002a002b002c002d002e002f0030003100320033003400350036003700380039003a003b0089382786cc3d2fc6a4d334817f96c0ce2de83a1670cc90abb5505b67cd83e3eb999e82d40209f2efc61800847126856515177307e113f458ab71dc84495d2175007f98448b2478641d12708dd229f96398bde5ec67ea3e131befcad42438fe3e011b00a19cf1c85c20132290e00961359cee67f15e23c693f16f763cfb92380297cba99ddea81a1b900311da5585180d4929bf0cc073d33891674a865cb1ac2a46c31878b68c3dce63afd8d4be986e7d92526ab2634a7ce7bbd7570e5cfd8c0fdc98ad010400a9079e891d7372bcadbd4ddff216aca4275fac4e5d60ab1fb3ea2bd4733bdc2faee349c245deea96fafcd12c84c387a3019ef127c2e151f45e28bac4e5846984a4ac7a4cc6a81f57c801643744fd47554399708b6ca5d9e305f66ed2d15fda7c011800b44ffe0b1b232709af832581b4d641a2cc3fab740d77c6e5431a3fdfa7f40e2dce80b4a08389769b0adc85e7e276e8950e86e75bad4dbcfb379f1d9669d58ad3fa7a8d1010462f1a7cb18b7dfbdfaff50235703b83cc052e65f7ee06f2d9858a010500b3fb19d6a4a02eb6bbe34e80aa5f1c22c2be0158f9baa5ae1db0ffad2bae4e083088c4a549228634337b280d7a86f602070dbeadd3316d1db72410520464bafabde1e306dc82e7b61a0b99a9a05175d44643b53d46b7755a63106c05f10af708011300a2709eca63de497171c3a835887862460ce1035c7e006836d57d8b7b672dab6fdbc4fba6410e69f636ecc62a1eb732311573eff74df3509231da739b2a5db320f2c244bda6232fb98146a44292f067d251f28b23df67602a5c8ce478839cdb3e011100adbe2d5ca94d72063afafddfef332df4cdac5c21632124b9bc327dfefe70396078c6088099bb93f034f10da2b25ea7280e44e2dee658634831594bb17e45e53dd913489bb9a0eb620f19e803b7b0f78a667798f742ae1bb87faabc8b5a7399ef030100030009008cdb82a311088b2f32c790130ef659d07daf3858786402b3a8dee86a722e7d434db37b286b3c7e2e0d9ff500f619d33903afedc7c8c2a929e320bb936a4834af4c235f92be5d3516853129e52a5d141cf30c201d5a299d65cb0ca0d2c8e42253011500a78470c047dda739bf4e6bc3f8d0f2dbee7e0a8b907b3ab0955924ae4d6796d757ebbc323b67ce3602bb98eee2495ab8194bd2d528de2cef742d839175f92af73d1c6b1a7f909c40a23816151bc9e91e4dc7d3f9e68982d1377e395ec4086b00010d008e8b666f3e1cab4f8bd4aea63ab06d4c2db58fed7c38735b1205eaf8a0bddddba313edf26513a4374f2146c762676b2c03ef206d3e5e74b32ea3ec55a9eff8183c8719ec37e20e7ad18061c0e6e9210ff2e5f8d66e3fb7f85f0a7fbd9dc17992010700", + "details": { + "version": 1, + "base_block_hash": "0000000000000012c182df37d82de1ca02a9a18162af8cf50f6cb6f17bd2ccaa", + "block_hash": "000000000000001571c885183cffca87096388f24eb8452f6f22b202b20226c8", + "total_transactions": 10, + "merkle_hashes": [ + "353de007b1de9ebb527ab2a81677025e9bef575ad5a95d1a786370da9b2b2b6e", + "740fe7bf99c1f60828188177c302bb0a6a2ba667955384a6f900f77e9ffd2dec", + "ee20989cefb0f936cd55626f42813e7bc220b109543d7333aed9da59604d87c3", + "da1f39344aca139dc23b0ccd339a7b4a3008ec00f63a0f8a7af15fa209c01185", + "2af06bf79b0250d9ef8489ac337bb0dd0ab9c162295e5337369457126118c5ad" + ], + "merkle_flags": "1f00", + "cb_tx": { + "version": 3, + "tx_type": 5, + "inputs": [ + { + "prevout": { + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "index": 4294967295 + }, + "script_sig": "0300992504d13ef46908000013b46fcb03000fe4b883e5bda9e7a59ee4bb99e9b1bc04f09f909f", + "sequence": 3095565236 + } + ], + "outputs": [ + { + "value": 44261103, + "script_pubkey": "76a91464d4d4127bbce4b888bb4af080fa4de863b02b3f88ac" + }, + { + "value": 49787579, + "script_pubkey": "6a" + }, + { + "value": 82995728, + "script_pubkey": "76a91461ba0f43e13c1cdf5bc81db6bc46fdaf162f038c88ac" + } + ], + "lock_time": 561009360, + "extra_payload": "030000992500f2fcaa7264228035bf83d081b8cb330d7bb7b6e331a931a4bf1dff9e18253a4bad7e95c77f968b6b9f9bfcae534a1f5f97581e955e79fff39f4571c8a31c84b200a1e81160c7a2ed123a35bd81e0728855f3a586084edcbc05cf18538e413fc5738eccc34a6ae89e851d5be17a2348a1d4007a974060d8da60e7e51d7807aa976905d2db3f6c5e55d965275ac8f398c3c0b079f745ade640fef865fa104b4dd4c518aab6c939020000" + }, + "deleted_mns": [], + "mn_list": [ + { + "version": 2, + "pro_reg_tx_hash": "7a9b3753d3af9affcc11e3b54ea86769960c9ecf82c725252a1a274fc055c2c2", + "confirmed_hash": "000000000000000c5f865b9a608cab1e5b649de6bf5fafe9fcce14d2bd943ac8", + "service": { + "addr": "00000000000000000000ffffc0f8bd42", + "port": 9999 + }, + "operator_key": "b60fba0f9c1a76b69619c17c145f8a7ee9eaa13c214219777d56b15efc68c43f04873f8235b738d8e7b806c4f8afbc4a", + "voting_key_id": "903852cf6c818b2935f110be072b0a0a48cb0b9b", + "is_valid": false, + "mn_type": 0, + "platform_http_port": null, + "platform_node_id": null + }, + { + "version": 2, + "pro_reg_tx_hash": "3f85e5d14d27581943bf46e2dfb53ae733f8c10786db0a0a651b6692c6ecd2ab", + "confirmed_hash": "000000000000002558cbfe47b67eb66792ca2b9cc0a81bbc1069e7f53e481b66", + "service": { + "addr": "00000000000000000000ffffb9d8b305", + "port": 9999 + }, + "operator_key": "832e090090b5f78ff6be581bd51ddc4511e9ecc5f147cef310ffc2cc452847b4e3f577f1fd84039789e613a41e11ceab", + "voting_key_id": "8855d6ef13eb70da08097075a51d2ad4953f8e98", + "is_valid": true, + "mn_type": 0, + "platform_http_port": null, + "platform_node_id": null + }, + { + "version": 2, + "pro_reg_tx_hash": "57fd98f0964205ab0cdb4bd9651bb974a16a69d9e95c582dce3ef7ac452ad8cc", + "confirmed_hash": "0000000000000019460a5bb1ee0d035f93166c21c0a4bc1c78518539f122bc64", + "service": { + "addr": "00000000000000000000ffff97f4554c", + "port": 9999 + }, + "operator_key": "a0d2cd8b8ff02763ce7ccc19daa78922b79e68e0fe884695680176f4fb7dc96fb77e8bc25f0765b9f9d9ab9e2493ce4b", + "voting_key_id": "ac099cfe8eef1042573fa821537941e3b594c306", + "is_valid": true, + "mn_type": 0, + "platform_http_port": null, + "platform_node_id": null + }, + { + "version": 2, + "pro_reg_tx_hash": "927e563b632a7937010f7d619655a0e1db3dc1bf01290cfb0c845ef30d60cb74", + "confirmed_hash": "0000000000000019c27d87a616e6882471c9faea8accab710e72ad18bb054564", + "service": { + "addr": "00000000000000000000ffff334f3660", + "port": 9999 + }, + "operator_key": "821c519051c7c590fbbe986a93643b52f66df9a1ed80fa08952e475ec4f1da7f76a78aa0ef8ddf0d2404368ea8e584b6", + "voting_key_id": "8d724c803b333e755fe046c86780baf9b557b165", + "is_valid": true, + "mn_type": 1, + "platform_http_port": 443, + "platform_node_id": "5d3c77d719ee6c6558c68f59a9770c4ae85506bb" + }, + { + "version": 2, + "pro_reg_tx_hash": "c67cef59c906885b4a5cf0300e2aabc951643d64da4ef746a1ea7204ba6376d7", + "confirmed_hash": "0000000000000034cd790f54bcc1325ecac6a8015ceb3e68efacdae70f720efd", + "service": { + "addr": "00000000000000000000ffff97f4556d", + "port": 9999 + }, + "operator_key": "802e1e55c506e930327788db0528089a1d48cbc350cfe874514873ac2bcaee483a0f6b225552e6c1b02169d0a7403117", + "voting_key_id": "bf516c77f67340fac3acee0c439c4748e72b76e6", + "is_valid": true, + "mn_type": 0, + "platform_http_port": null, + "platform_node_id": null + }, + { + "version": 2, + "pro_reg_tx_hash": "fe75c2edf5d5076295a54dbcf1c0df7b3c73510e01cc3fc19b361803c1909459", + "confirmed_hash": "0000000000000018face1e7e0dea8fc2f57fc9e71b4914eb589b79fd8baca6b8", + "service": { + "addr": "00000000000000000000ffff9471d161", + "port": 9999 + }, + "operator_key": "917e3809889b89ac65c6cc2b4544a507656cec1a1040a82662be13cf93bfa1d12f2b5205f3b6b0c5c43571a8eb94709b", + "voting_key_id": "8db7bc2ee991e5c6917fd6627d922f00c958881a", + "is_valid": true, + "mn_type": 0, + "platform_http_port": null, + "platform_node_id": null + }, + { + "version": 2, + "pro_reg_tx_hash": "2ff7b917d2c7c4da46afcff9bc0a2911267900595f27ed6180d680fa566ac2dd", + "confirmed_hash": "0000000000000039a98809386c3bb01382b72ea828ee6ec79d8ca8f59648e529", + "service": { + "addr": "00000000000000000000ffffb9be8f5b", + "port": 9999 + }, + "operator_key": "b4805c1a34826a5b2d6f610437958ceaeb0e870261ffe97f57c384928c26c1b4f7bff6d024d1311fb6c704cd15a74feb", + "voting_key_id": "5378923253011931f21fb5ae02361baa19180945", + "is_valid": true, + "mn_type": 0, + "platform_http_port": null, + "platform_node_id": null + }, + { + "version": 2, + "pro_reg_tx_hash": "8e6b2d83d21384e29ec9a1359a3f50cf3e13f4bd9bea9542f22a8b53bdd21d9f", + "confirmed_hash": "000000000000002558cbfe47b67eb66792ca2b9cc0a81bbc1069e7f53e481b66", + "service": { + "addr": "00000000000000000000ffff4f8fb56c", + "port": 9999 + }, + "operator_key": "b838c7baca69548d9a7e2a98385d300e81cc2d738a6444d0cbfce0120689b9f16252308558ea269198407fc22e29897f", + "voting_key_id": "ccfa4fe906ed265f97987677d929adeb50c15ea5", + "is_valid": true, + "mn_type": 0, + "platform_http_port": null, + "platform_node_id": null + } + ], + "deleted_quorums": [ + { + "llmq_type": 2, + "hash": "000000000000000a619c35c455271f46ddd3e131477f1c88cfbf614070058b3d" + }, + { + "llmq_type": 2, + "hash": "000000000000001b3387de637bb8cff3d19df348e5ef70f21ffee28ff5382d51" + }, + { + "llmq_type": 2, + "hash": "00000000000000164ed5eb9922c0f9d5fc683e8bf79f669f7c68bb364daec569" + }, + { + "llmq_type": 3, + "hash": "00000000000000093486574447175c1da06530c36eda2198917fff52bf6af571" + }, + { + "llmq_type": 4, + "hash": "00000000000000110ae7245b38d679c38b98fd6602d32bbe1fb79c2f7178e900" + }, + { + "llmq_type": 4, + "hash": "0000000000000029d1a93d936e2f28b0b13114c467922fe94b96bd6ecbe0460d" + }, + { + "llmq_type": 4, + "hash": "000000000000001cb55fa82f92bb777739387afe5e7e1ada95913a358dbf0c0e" + }, + { + "llmq_type": 4, + "hash": "00000000000000319e70042885e85a1a332f6b4d0ed4718a32a6354ed7aeab11" + }, + { + "llmq_type": 4, + "hash": "0000000000000003812e8ddf5689e0ea20276cb06572d6b928d38015c3944420" + }, + { + "llmq_type": 4, + "hash": "000000000000001de920ce1f180fba559e860d230713da77037b1101803b8722" + }, + { + "llmq_type": 4, + "hash": "0000000000000017958a09105c0d7ab1e6d5243e73ae78aea1a0c4a84e38ab22" + }, + { + "llmq_type": 4, + "hash": "0000000000000010054f7031a351b32f2f222619a8ee7f23f9ae03a2af21bc2c" + }, + { + "llmq_type": 4, + "hash": "0000000000000018fa5a23f2a08c0d61d4737c5c1dd99600bab4ad842a630436" + }, + { + "llmq_type": 4, + "hash": "0000000000000020fc6a3700a82466fb868825d47c3454bc919f4a6928757236" + }, + { + "llmq_type": 4, + "hash": "000000000000000cd592ba94ca27d61cd5c7a38ddbdbe0f406ea38c0c69bbe3c" + }, + { + "llmq_type": 4, + "hash": "0000000000000031243d7d4cbad5ea0e15f717785814602a76d145f0040d8a41" + }, + { + "llmq_type": 4, + "hash": "00000000000000164ed5eb9922c0f9d5fc683e8bf79f669f7c68bb364daec569" + }, + { + "llmq_type": 4, + "hash": "000000000000000bc51a13693140a5c6d3241594908caa9da63ff56c4290676c" + }, + { + "llmq_type": 4, + "hash": "00000000000000009fe864c0bbcb841343c38ec2e22b4a61c9ecc756ff31dc88" + }, + { + "llmq_type": 4, + "hash": "0000000000000000f01d8e679a3747e26628ba24c92a921b589d5b1050b6a2a6" + }, + { + "llmq_type": 4, + "hash": "000000000000000a9c49f91dd336633ec449c2e57f5a4a3cb20173f433e06eb0" + }, + { + "llmq_type": 4, + "hash": "0000000000000035ea8043f8b5fa17ed58ea39d8395df37635f8db530116c3c0" + }, + { + "llmq_type": 4, + "hash": "00000000000000217bc7e03442528da0d568170f0da35bee3b0aaf31e52d07c1" + }, + { + "llmq_type": 4, + "hash": "000000000000000c33c8680acde0ffdaf88192c5bbe7ffae63f904efb3f923c6" + }, + { + "llmq_type": 4, + "hash": "0000000000000016ae89c3d087e7cb8d8097cf13b6cbdbdd2231a03698cfcdd8" + }, + { + "llmq_type": 4, + "hash": "000000000000000f3d79b34c45e725a68c6ea6412a95ef9ba893617d003f44e0" + }, + { + "llmq_type": 4, + "hash": "0000000000000004376901b41e75cdc1bb1f36a5b6daca374d18b2cbfaa6f9f4" + }, + { + "llmq_type": 4, + "hash": "000000000000001c86b5b6605205f930d07150d708c8164659455666d5544ff7" + }, + { + "llmq_type": 5, + "hash": "0000000000000022aeb05b66c0b78c111fd19f465ce9038ec1951479b645320a" + }, + { + "llmq_type": 5, + "hash": "000000000000001731bcdd2a13a771bcd1fc22d8ae0e98c1cd836f4cfa646f17" + }, + { + "llmq_type": 5, + "hash": "00000000000000127a485132bb9e40a52595127056c3bdf0846f46e57ba3b424" + }, + { + "llmq_type": 5, + "hash": "00000000000000225367b5a46df7b2a49470af0400b77af17864e068a1b5a626" + }, + { + "llmq_type": 5, + "hash": "0000000000000007f90d4501c52901414aaa9665c086b60a623dd866e25e862c" + }, + { + "llmq_type": 5, + "hash": "0000000000000009f6874f76bbf9f1a43ad162766ef0766fb5aa2f4b0031d62e" + }, + { + "llmq_type": 5, + "hash": "0000000000000014a184790adaa50f713e87e85ed21af8777dcc7cfcf2092339" + }, + { + "llmq_type": 5, + "hash": "00000000000000269bfcc4f48571af2b455ce01118af996b3d4498b1ef14cd3b" + }, + { + "llmq_type": 5, + "hash": "000000000000000342899e48fe40161085a56f889d8eb6186b5ba5aab84d9342" + }, + { + "llmq_type": 5, + "hash": "0000000000000021e13179514f8f66e290208d1893f3faf2d0cbb7da376c7648" + }, + { + "llmq_type": 5, + "hash": "000000000000000eeb307b270f14077e16897d1f7c41e35635681e1ace4c9453" + }, + { + "llmq_type": 5, + "hash": "00000000000000124b1302617dbe1f5772a0d174030f49737bd2ad0a1ecc2054" + }, + { + "llmq_type": 5, + "hash": "000000000000001e6f7d06c450c9602e90eb3d826155e986c37516b462796459" + }, + { + "llmq_type": 5, + "hash": "00000000000000164ed5eb9922c0f9d5fc683e8bf79f669f7c68bb364daec569" + }, + { + "llmq_type": 5, + "hash": "0000000000000014ca981c6bd8fdd7cf5b4c0845844cfbc9a33dcf4ee839f86c" + }, + { + "llmq_type": 5, + "hash": "00000000000000180f2f57be3b5df693d5537d8bf5fa5dfdee73635c4f535776" + }, + { + "llmq_type": 5, + "hash": "00000000000000116e5a43c09e869f68ae2ee8a299a6320c63ef8715c7ff6a84" + }, + { + "llmq_type": 5, + "hash": "0000000000000010113a15ac13ed948ad08b054d49a0cfde9dec9f0ab6f52291" + }, + { + "llmq_type": 5, + "hash": "000000000000002822e52aed15452223ef26c0e01fe556965e663f2973709aa4" + }, + { + "llmq_type": 5, + "hash": "000000000000000a9c49f91dd336633ec449c2e57f5a4a3cb20173f433e06eb0" + }, + { + "llmq_type": 5, + "hash": "000000000000001360e16039713cb54613a76e2b9a4d4676da568d4c3f2a68c5" + }, + { + "llmq_type": 5, + "hash": "0000000000000002b49922d614a3f3c9ae6ce43c3b16d207c0a51acbdaeac6c5" + }, + { + "llmq_type": 5, + "hash": "000000000000000f4d365c55df57c703cfe17e1d38a2239cdcaf609783665dc6" + }, + { + "llmq_type": 5, + "hash": "000000000000000915232a067adde6cd60bc2c3c89d476f94dab7c2a6d1501c9" + }, + { + "llmq_type": 5, + "hash": "000000000000001219c7582bc469c4f16ff34ae971fde7a7a2308b7ec93904d3" + }, + { + "llmq_type": 5, + "hash": "000000000000000fab6cb414256f1901549e83c2de31e8d0cb042f758717d6db" + }, + { + "llmq_type": 5, + "hash": "00000000000000020b98ed747d515dae9832a216898dab4814709c9df110f3dc" + }, + { + "llmq_type": 5, + "hash": "00000000000000075f1be8e1b54944af4ffe97483a92892e582b34cc3a8a6fde" + }, + { + "llmq_type": 5, + "hash": "0000000000000032ad537dbc5e6af6b7876666b7dfa7fe1f2a39321bc86d3de4" + }, + { + "llmq_type": 5, + "hash": "0000000000000009983d02432c3dc5d42731b4cfb48c9cd9b7c3b1f68aab01ee" + }, + { + "llmq_type": 5, + "hash": "0000000000000005bc3e28828be02d39cbfab9ed99f46414cae76ed47f8a79f5" + }, + { + "llmq_type": 5, + "hash": "00000000000000182f2e178ea65530a520ae446d667b6be2a89aa4c258269efa" + } + ], + "new_quorums": [ + { + "version": 3, + "llmq_type": 2, + "quorum_hash": "0000000000000019db6c6fbb1ed0664d3c93bd1a6d2c80ecbfd5b19846da6c3e", + "quorum_index": null, + "signers": { + "num_bits": 400, + "data": "ffffffffffffffbffffffffffffffffdbfdffffffffffffffffff7fffffffffffff6fbfdffff7efdffffffff7fffbfffffff" + }, + "valid_members": { + "num_bits": 400, + "data": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + "quorum_public_key": "8cdb20ce9adf09c8fd8254720911e116a999c4f7d85474580825676c95ad0a934fb811c0dd88847fe906ea0961b19f8a", + "quorum_vvec_hash": "e4db0dfe72fcd5b48124f87c35f3136e1fbc86faee243d397ee02d71f7b11cb6", + "quorum_sig": "8f49fbba7cedb6213f3d776fe537921df2b61588fa10358eea0a4a70af09ab6eae74b6e3f46d5a3beac7dea64b5b1f8d0da370aadaae771b78fb3550941c1966a12460088d2e288b5991e10ce248524562e0e77c06c127e6fc51955f1e99dfa6", + "members_sig": "81890cbdb7c1bb2b50d1008b64149dec1324151b60c5a06e9d6083998ecc3ded66b3492982ef835c63faa48e8efbf9591134332b13161506502f7fa1859fc80029b5af3d148658ade23894f71c89cd50393abff1009d53d8e88b0af6dfbee847" + }, + { + "version": 3, + "llmq_type": 2, + "quorum_hash": "0000000000000031c08d13df8b45da701f491ec3971cd47d479aad3df4a4eb49", + "quorum_index": null, + "signers": { + "num_bits": 400, + "data": "fbffffeffff7dfffffffffeffffbf7ffbeffffffef7fefeffffbfffffffbffeffdfffffffffeffffffffffebffffffffffbf" + }, + "valid_members": { + "num_bits": 400, + "data": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + "quorum_public_key": "80ebca7e63d3a78f30edb614bf82c78b5e446c988b48946698742a0aea951dc851965f710e8f2115e77008cb6f49ad3c", + "quorum_vvec_hash": "89703f96fc52ead0ba714161281e3f08c87dcf2c27d73a984167b7760c5c94af", + "quorum_sig": "9855fcdf5e9e3e1c4fe82fb87c1b0b41c3399c38f58090f9ba1d803d49e1b2af70a2c5155d6c168867dc1bb2303bfd0b11a0c963fdce728d40f3c3b7c707fec55e75e3fd682f482b0285c4c008c111bdaf7a623b9e15319121c9ba0c83ab7f37", + "members_sig": "b0cb230ae4e585ed7b145d7efdb354db39639880605cbe6268bb8b445217e3c0aee7e0133302f29024b115d4db075ede0e3f3aab9c824b579de2b9c1925ebc53a99682aeec88bfa95b248b0a1d05613bdb784000d798581b25b73f554bf2b8a6" + }, + { + "version": 3, + "llmq_type": 2, + "quorum_hash": "00000000000000124ba75120eae55760beb21da04fabd4c13a4df5681105d599", + "quorum_index": null, + "signers": { + "num_bits": 400, + "data": "ff7fffffffffffffffffffffffffffefffffffefffffffffffffdffffffffbffffffffbfffffffffffff7fffffffffffdf7f" + }, + "valid_members": { + "num_bits": 400, + "data": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + "quorum_public_key": "90c54faea536ee4556f5fcfcd395f5c68f9a5a836ca8dc5613735e16f2735e2f03c2c82fee6b38b5061ba4d70056caad", + "quorum_vvec_hash": "f10b16ebbf8bfe07da7bdc86672504e911b723d048664c09d2accfb3fc99267d", + "quorum_sig": "b2458b85b30b9acebb67aafafabac65984fdb33d46c0271ac813cabd6c6203361f6dd456f80238bb841d12ea9681eba707c4db2be023bd8032bb7f7bd5a98343902b1bca9adf0d7f12b80176998344534bdd41ad5ab0ab985b709aaed9d53dc5", + "members_sig": "98786975b931d6de202dc26fd6a38ea384da253cf7f6500b7532edee13ee626717cd03ba3e664b2d9db6a4908118902b00efb0372dc1ef2878453831b83c72c35e92c78a8f1365d49e60c5b65e621092f7d036b4e1f8b3c252311bc3a8780da5" + }, + { + "version": 3, + "llmq_type": 3, + "quorum_hash": "0000000000000031c08d13df8b45da701f491ec3971cd47d479aad3df4a4eb49", + "quorum_index": null, + "signers": { + "num_bits": 400, + "data": "fecffeffedfffdffffbf7ffffffffffff7bfbffffefffff7ffbf7fffffffee7fefffffbfefffffff6ffffffff5ffffffffff" + }, + "valid_members": { + "num_bits": 400, + "data": "fffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffefffffffffffffffffffffffffffffffffffffff" + }, + "quorum_public_key": "901e55a94b143bddceb737771a92b31c1c421a6dfc88db3c7b9d4d49489eef78702c54ea0a885b78a7de4cb1b8e8db78", + "quorum_vvec_hash": "d53a75e7050dee50212b0c2e3b5144e3b979c02da80537de6e654906b40ecdd8", + "quorum_sig": "8e14b47f90339e60d45b83b5d64af345f18970064abee2e026dba741fdcb489ec07593efda1a0e46d1f5198476cd8c560e9036a6dc282645b74b0ff279f129994f56688fb3ef8f396cb459f1e61167f07bf503e6c8755c85581da465d5d33716", + "members_sig": "a1430f18a05a51da7f67063e2643127cd504c3dd63cdc58d9ccd979d520af2a33d7f7c444efbd67b1c8da49e5137dcd110835849c287ee5f443f137e8d38d2f1e3b52ce3f0490086f30dcfaaf419e2a69fdec796692e7242b4fc2c2369776b8e" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "00000000000000226d1f00ed176ab43b2a93dfa365775f7ecfd9923a0fd0060d", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "b177fb8919f2fcdcc59d4485dab282daa1030f44769803ca78413747ad94cca64e303de67eee6362bfb98a7631ba4b63", + "quorum_vvec_hash": "a39a4fabc1cd286ed08575a0cb78b00297ab12e76d36ca5ef2564331ee1ddeb1", + "quorum_sig": "a1920899db26269ca54bf06913054c3b838c38807058a8013eb5708cd5e3b6baaa3dd72e71bef4f4a07ea84acfe8bd54082309f3fa96713c626b9790214dfa503d598835d244995b6c1a1f951e9c51ebb534aeb221373c181887838572f594a2", + "members_sig": "ac76d5e1dec139b93f02dd7fb31ea74ce11173079f93fbab378166a8df31ac773487f87c8661bfaaf26774f012ef182a04c301120cc38ebb4e9b03e611b9bb3a8ae8bfc82c7ea1466dad454cdaf62fcbfcd746aaba3e9d4757a6d769d8f51995" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "0000000000000013b31bbdb67837d3acd33edad08a84b6c42bea1eca623b8116", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "8402d65dc6283121911cb44e83734a439c64673b3553a1b29a8d3aaa93d60b788cc91a5d337c473d1a1e79384c9404d9", + "quorum_vvec_hash": "e626ef97204afd0b5abca620cf0446352ff88bdf02ceb12ddcde1652cf0e149c", + "quorum_sig": "b37ee7fdf35112d859c69fc83eed13704dcbf13351f0bd00b07dcb6f510f1944a560c577918b464d6f2484a33a1f5c97129742a45c4a2c4501f69abb5c60b1a75409841712e54d0ec91e82c208e120e7b8a6ba1d5cc83ac2fdb466d6a959ef04", + "members_sig": "aaa9f18132bbb213c83c9b7892a15979020f091ad97cda26fe2f28fdcf9b84ea690ec5ab614651ecae9db054f83dc4990cb89580bb8f9ebe73f8d7a83dc38b0bf4721b082bf7086de9d411257f0a4ba1f1c9781315b6031c7b7fd71c85c479ae" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "000000000000002a4e844f2140c25f88d8da42c68d32e9527cba3308125bef1a", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "9528b64b96ae0225111f1f8a0a45887482a907bbace9d5818e491ac1eeab62e4902beb1c55e5b1ce4a9ed213a3c15b8d", + "quorum_vvec_hash": "947a0569595ecd19f49b3fcd31e77d12005c999b567928773a0189cecf555ea6", + "quorum_sig": "97ebd055f78906213e15836d7f55d23ded4df6bbf6c46da204a26d04a6305d4d724f4159ee9528b102c4bb476d473ee60687da7c7fd718b672a05bca2c4f732a39f10ac47c59eef86debdd1e5185375f09ff1677a5d1ce0acb28a10ff4b61364", + "members_sig": "b52beb19774c825fdfc05c43c2aa0be25a63ec3622edb5fb7d17815dad78f789c61a45b803095157a1259eeaddbaa4c60a23bc4210803a2b0682a14920c3e5e35bfb568fa611966ef5b605587cac43273d282d3fcfc7a121966c9710b887bc94" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "0000000000000021f096b9e383d02cad36cec97e8551c21346ee37c394c6f927", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "803a6bdb134507ba910b2dbb8ff11f758c5654099612ad84e5acd86317456b1258747c6bf1e62cbb625f3d438950273e", + "quorum_vvec_hash": "4dbdfd0b57e2b5cc32dfc45c28c319f49f804f1336a10bac3a3a5225fc8059c4", + "quorum_sig": "8313f77ca2f2698dfe058e9cb022bc733f74806ee50388324744135db4fc3b2de4bad11227805577ae90a344b475b2a712d7adc48c46680cf3e5e851f7b100d87f40da335baa6767890a9daf4a691ba562c0adc2bf2509fd29a1105328bfe83a", + "members_sig": "a38b2b331a76c4319fa0816589ad54a1b01939944b737492b1b367f5fec3abab1f08fc8d6ecc57c8fea534dda339f3dd0b6effa077bef8f955db98f03271783d47cdb85f90f8ec8665bfd9da09f2ad7ef33732204a9c5fe1fd93e4b65e35c16a" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "0000000000000019db6c6fbb1ed0664d3c93bd1a6d2c80ecbfd5b19846da6c3e", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "8c207f6ccb24eb640ae8ee83d315ee49e47593bf52f82b05365a8a92b886cd4b8aa37d2e7cc946a0a34497373d7f778f", + "quorum_vvec_hash": "7eccd9522e9432f81c22f6cdd35cd287440ee2511525e6c36affed269d0f423e", + "quorum_sig": "af370e787d856b9b88ff6d013d8449b29a69c99c7b3f2abef877c448e7f964917b6601da9cc02cf449f0f6c87d60ac7d0e804492b348c246a4a4ac52892d1ed3c932042f536433841161c2bcd15fe825c0be87f2e7e65f9b23a12c8fc79de8dd", + "members_sig": "8e21d084d2273c265b05178e81b1c73069da759c35d4e78d57ca882c8381a1e7b708898f3da9d87efaf3b83355510e77070d0155b0a24f3842e189a21db5e6c1652a758490c68efa1bd3685f98313c4ca7447a9577e974518de634b710a86646" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "0000000000000031c08d13df8b45da701f491ec3971cd47d479aad3df4a4eb49", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "954002d6531bf556ffe4774a61a6c7ea22cbdfbaf78d9dc92f8a88fa29be01ced3074cad150f59844a00fcf2d65da19b", + "quorum_vvec_hash": "98f0346b2d771ed837f9c14f27549a41533724df66516d813c0a98dc2d384149", + "quorum_sig": "a4ddf2a94813192cf602081e8c509a0501655b871fbb7e8a71bf0126daee19d9d02b9e42a177c1a2c9b87f76c2fc549a1061e73c7126aba3011a40208c1c6e4d868ce2fee76c87d97ba2f67408bdfe8451c903ed723e157e5bdbc264c311514c", + "members_sig": "a64b971fb8c5b460b3be91e0d0b8ac23018c513c62783a386848c6e473220e1ee9cb5fd385ff5284e13ac43c6622645b021702bd0ec9084855b696f6d73792ebecddcc193a23d4946d40a923e97697412e1987925fe2e68e4a66cb824c687ad7" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "000000000000003b54d1c33f9c7bf56cb663be43c2f51aef4e0ebf540b180053", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "b6f09ff914872a29b7fb557458aaff9159f4a5f29166fecbbc1f107af8b55ccf479e7d1d7dfe358a35107bb89bac94cf", + "quorum_vvec_hash": "8f5aa2dc6b22c2d994de729ea75f5fef4cf05ea50435a4fab48029e368a0d06b", + "quorum_sig": "b546c08ddd89c7cf7e4b5a344ad433f29461c648bfc012281ff350c55aa113569b764a663c7f28b7c4360b8712df8d3f197fbe4913f07feb1079bea52692c17f002609656a7357646274b7136145843cd2bcc6add894e0ecb5098b9cffc07f3f", + "members_sig": "8a9ce256ef36d8d664a984f992946a520e28944cc59fd9ed0875837b0cb1e658d0dba945a9ab3082e78c4136ffb4b09a0e7f5bdc8cbd95857e037629efc494f73fe199caec69926b221e12b85fe6a334f42a39c2158538f643ba73a68b701f7d" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "0000000000000016a73aa38d0834a9953b51c5af6e68552548b71ea2d4331e60", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "818d6e984734a971d1f492341f2f3fd1e2466a96676438ce7ad65630940c4f687c69d7eccb4eb1d6de106ed4a46dab36", + "quorum_vvec_hash": "de0a87dc62e90f6fb6411f91b76ad2d875287c3569d1ee4ce1eb1a5255010886", + "quorum_sig": "b91f770ceedcab63ee77c0934489f34b4c807ce612da2e027e56b1a8db60abf2c14a79191416ba13f4442ddb93214f3c006debfdbdbe2126909aac6e288e4dd9363a68ae77b203669eefea8f90c4fd596e27d071724d5d085afa9e9c72228356", + "members_sig": "a82ca7c8a750232600e9b63615fd164b8bc9f29ed67f036138e4127c55c6a0cf762e65f8a7a9640c145769858492bf4a0726b7a5e5bc9e417e01f71fd5dc026bfd96eb204b428de0f021cf67f791a52e68efb8f616adc78ba853a4c97794a115" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "000000000000002a9d274d1284f4aaf2d774e639577a023bdf3a10ff7478e760", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "b9cc7bf0cea4053a438d8e43d20896e153421d1ad91bdab64eaf3be8f28049beb78095adcc7628184fb48803ff278036", + "quorum_vvec_hash": "7c8b779ff290f5047aea89b7885b599e7838031b7863a9297906b2cc836addbc", + "quorum_sig": "b8dde4a2b4d7df31be6564fa04f8099a95992773e7c1c66fce222c4e19a04e18f40c0617b344988bcc489570a2d9802f03fc6dcedd9dabdd12f9896d8e670fde8a02b211460a8b19006289d3e9524afe12a85122b1e79c6104cd960da6b9d481", + "members_sig": "9569e09df9fcbc1902d25b38a8d69bdcfc5629f24d73469d3ca79774852568267e802f57a81b67983a0a3b699432cf0d117166610b3fb341bcbd2a9516fdada1e765cd63f49541a7317b0fd24d37a681bcecd46b1bb2eab3ce4e2aa7b0155b56" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "000000000000000a5b97a1a8a8df9f4395bb49120ab904af69562e6be789f061", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "aebf1ade9063cfea43b7f466a6276fa093d743761f047871be02ece8f32a4f332464f68a245406a61e339af607c1e8d0", + "quorum_vvec_hash": "0cbdc39f9831c30e6ff48c9002d84254a5ee505177b1be8fdbd5be762d05cc43", + "quorum_sig": "b84fbd48ed871f3a871f8bf08416a90decad20feea7543607367b141a5ad668b5120fcc0d7ae83c9f0da8cf36c96fa1f08a8c41fedc9b756875ff8af663da4b1a0d0b550022790b3f5961cf8308dcca9e2cea42f47e4c5c67885f5669a85387c", + "members_sig": "97e4889084b71c8ee0b92894408ea3651f211e495fc84279046701cf28817b47f5ff97e26cd9848a2ba884496e5068cf0c070699bed0b7b55948d69d6d3a100e4c9209246ba8bdac1cf797f90d648375b803fac27a8799de1a18a42b08b12fc8" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "000000000000000e7d09cd2a2ae9e2bbddc782eede92a950d3cd619f38acf061", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "a8916cda0bccef7ee15d87160dd30460dea2d717c11db48a42b887ad9cca661ff47f71812a8aa17fd24d00d900c65317", + "quorum_vvec_hash": "5bc3f6bed00b419c721bc3e60c125f4c35a6cfeeafa685bdabe4ce99049b093c", + "quorum_sig": "961140a7163c575d1d661fd4eb89f3164be4c0639a5bf10e723a622b30894aca2524ada537b259f7b6f142d69fb2663306628aeec486a653023d853dab3ede338df75909b976deda0e4d41bb75b0ada54f02959375aada0d34395e13f984dd5b", + "members_sig": "b41b933d7564d4719bfc2a1028f70b4ae5314316ba3161627d407fc98b0179087c37b87ffc688362a2c1b946eaa565a40aaa67e54d6978bd91afb11a34e0e73dfa6178d7e4426c150e2523c170cb988df2a9d6dc95d3e981ba92fd31c28ea879" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "00000000000000133f0657f627ee7a6440ff3b912323fb9c6c886a17b107056b", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "84fa5ace9bbf560a5131a2260910ee96f1e816b2c7d26e6fc75d896ea98a3b055c8853c4e62a9645757c3dae302556d0", + "quorum_vvec_hash": "428e60b8dd2d32a6194c6ea00f0aef1fd6cba97e5933584774a58fde50fb6b8b", + "quorum_sig": "8e46d5cc185b603278b12349c0e645566d4de64df97fcc32a79e422dc9aafea1a89172a439fc9cb6a8f6cc1c720090d60d56daf352f26a851fb9449ba325c4375b9a98c6caec38dbc745e24c184aaae2794b8885ecf7c43ce2dbe74f81060957", + "members_sig": "803b2254c8ed8e6863ef282cea20701f59dbcd1dd7417f2ccd2d9e01d01ddfad92d9a7fab0a8296b91c3e975b93d5c2d021964fe7e5f5937f4afc6530414bee2317770c27034d4154c4a00200dd77391cc44d28755327b734840dbd989ecdd5b" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "000000000000002d124a44cb2082c0bf9bc34d01df83aab5301a910af67c5c6d", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "a5d7cc50abe177a4959e51735d2ef11e02c1b38dc8be33ef8d55bef6365a96ed13936e5ca525f7f0bf67d06daa98c3d5", + "quorum_vvec_hash": "2f9edfa759cefdfe858a7eacadb868000422e6e3f26b4fd97e24c7217a2baa06", + "quorum_sig": "8888a360cf9548de984f1182077d4d089ec461b1de1758471b8fbbcea0b93407c6b7259b9899c35990a763a43f93b6800fc31f87adfd78a30c7d542c14087a3e142358aedc0586917c6ef0eeff53481124c92e03956ae278a55a9fb503fdf4bf", + "members_sig": "b43fc741daadfa30c16d3bcd3507bb0fc3aac5a8842f53abf7aae3f85dcb818716642cecd9cb214d985e9fd6526137260250bd2fd5dad0e5243c35d8e90c71316a60fd7ac668c278b5676a782c52bce2749edbde93539af13e47be3769b93e43" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "00000000000000266b3ebd4c9fb90da53667a477f4c84204ae879edfae33e76e", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "a48f9e5fc94adf1b7d8dc6713528e59e55cd2c9569a98805f531deda6f240236fb9e4158904dab2a6f5da578e696ee53", + "quorum_vvec_hash": "abea0fce139bcc23708d683ab17f8b239f1effc84437daf91870d4c33e6ac99a", + "quorum_sig": "86d9e3af7656fd45ec671a62dfc62373ca40cb55e5faee23b438d598a287a22998a2ed02c03b0e57c24fc1bc572ec3a019de7e12aab34724dc10d7fa5ddd02318dbc38920d0aa8fd89a111db6b3acaba3aa6ab9d208425d9306c2ab281c1e78f", + "members_sig": "8682c475c8ede04195eea76f5bb1ff095b68b32bc71cd5efba03c0261f190601fa1e43750e2243d117ce2ab5a040c68803ff63f089292010d3bfb51e6fde7b5b0187a3160801a9249509738d18bdae61b094b0146bbb8a58682ab7480f76563d" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "0000000000000020f98b9c95f47c5077531fe9e03760f7cf5fc6c573bf154d70", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffdffdff7ffdf7ffedffff07" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "8eeb5ac0562e840a9d7c283ce0b91f222ff8ea7af56b986495f3ba6338055b9937b67e45257283e63ae18422f8b7bfc0", + "quorum_vvec_hash": "589dfdd0a026af8b1e5acd301e5e452d5cab02cb138f59e7de204afde3f9560b", + "quorum_sig": "8d64ccbaa496eee3ce97d0fe40f57490a2ec72a77af24eb38642c8c9ed7dd1242dc2d3baf75e402b55354f83a72e17e407206c6af5847b1f7e1a0c96ed1ac9ac6db11dae4f365f2cfd6634e6cfb3acae96debfb2665ab4a3e5309afe1133d468", + "members_sig": "8a0d208904aaaba19504064b882ab2b6284806d677b13e60d5d1cbce5cd42478042fdf638d221827df899e396370eeb508b7c9b4bb7ee4268d5d951d2a38a421bde648e4241629b06fd07928db40b72845231f8ec872b104a8c57cbfd7a574a7" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "000000000000002749968e84a4abbc2a0d653e767fc30e7e6e42e62887632e72", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "a37556d5483f6a52d321155897786f44981edb51fc3ed2ec24ba27c1cf81f41b90b90a5c316ed57a43b5114c0b21ee96", + "quorum_vvec_hash": "61d971bc0181ec514d2694e1d95a99484fd65e97d4ff3bbf509476ab8d1e0bc0", + "quorum_sig": "80ccf46dec638c670c5588973e744dd2b9d5dffa157be1985acce8c5ef4edbad60b6cba31d860832e2bc864a3a9123fd02a2423ee240264e2577651fabf6b0c92a21ed96bf6e048fe628f39f2ab4db3d5896154b26d93807659738d76dd24a09", + "members_sig": "b27c23ac25f1f9f15e0057bfdd67e77f13385057fd15996eb72103b93fa12eb2c9eeeb9d2fe001355d1575804d27cad6055be3d5fc4a040e45f7c8796e1be89dd9cc0ca4c8fd75df7dbb320315754015edf1851465a3130908248435f1378bc5" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "0000000000000023f7e3c4d5eceb30e28c5109713a54519f0949f48f3ce27785", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "91f6aaa6a0fb82bc1b5fa7d02cdc57d0c7bb60858648fdf16c52e109bc91a1448260d7d846f9a2f05afea46d9d6c48c9", + "quorum_vvec_hash": "e2ed6e4eb10f0b3bf5e547b310d9500f18152175da2f83e839a58abbd3b3858d", + "quorum_sig": "9423f5097ded4d0ece356193c6206d411042986ca5d85853707c28b0ef80305b4c4f6500fcc7dee87f7c76c68e90e9c41310bb6c886deab2a759f78b12e5f220e924857daa20b9bfd988e2b6f3ed32cb39f8726108c8a353dad06f501700a656", + "members_sig": "8e03ac9414391a58e45e2dda7e90746d666cff559d1de61e0204df88938750d0c69f8ffb9c91a33e7a6fc61cb87ce05f00acec78714a9938df63de3f7105bf1dd4243ac030dbd32abcbba2f295efd08e51d06e889f312dfbea5d6d1ce28582c6" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "000000000000000e1045d6aa9c019c39d06bf5145d8ae00c61418c307da06393", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "b40e0ce6f0d1d1f18741c23c3ad5ad0a17ee68aec088252abca90385e6a8385161705ef3089e3baad5c96c016f7f507c", + "quorum_vvec_hash": "6a881689644e88c19e6cf24c51324364afda5f79672df3bf95a159071b032cdf", + "quorum_sig": "b4d0fbc922f7626fcd26a023a6868c730997bccddfadc832510b2663142380c98ac001f0e659a9ab3104b39bdd5ee7ff04309f7f8624a723e10e45f0a23245cf24663d7c1f8dcf755af26cd3f7b5f821769bf42dfb4738c9647757aa6786a251", + "members_sig": "a7983bba626fc3243900581cbada1b48e1e948f7fda4218b3fbd06aa6a002719d936342a4ec9e1da73b5c0b43c4089e71753d1da3bcaad4aec37ab542818aa80b872ef7d79c37d28b7050934daf9db74eca06bc4b531ee65aeea8d9fe892e319" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "000000000000001fc82da41255dccf91c4fadd62b64433da187d1fed80fecea5", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "b36bc91f16a9b25927808d0d7bab730cf5f2d7908bb27e15fa50a67aece2269deed45bd9e9bf011689a52d79da7c3e9a", + "quorum_vvec_hash": "300cd301cc22b7166f3750cc9ceb41b43673e5d6f09efe558cd98c6f3010cbd1", + "quorum_sig": "acb333121e9eaeb3ce7ac6b90cd117081caccb11ccb653c1026d32d0f7dd5a58e21a9b427f039c387ab6b0c193c768bd06cec104310951e90187ffae835b37078c0d728e721df6150eda7fb60350975fc44252bf28bf39f274d0200ecb220f4d", + "members_sig": "b5aef9a2f4166bf173736509e7e45c6de7155405e0b162cde4ed761a927ad41bf4d903653a5019ff8669c9381d4b663513c3f404944c64fec0af4cdde30bc4137d22322c0d0cf46173f5ff17c0ce91dfdda838e2eecbeac7500707d11de359ce" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "000000000000002b18075f371cb47278c649ee5aeeeff7b68ad7e49d8d4aaea6", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffff7fffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "80a6d12eb2f539f6da6c105f7d103d6be7d28a737fdb9b1dcf61e0e17fd7b33a4046c9d962e1597b6bf4fa9280c02ac6", + "quorum_vvec_hash": "3b1023f11136035c1c350a5d8b4fe6920045b3c135b1c5250b6e1b58785882a3", + "quorum_sig": "a47ffa51fc6226151bcd308e9e3098ea4dc44fa57edc73ab50509bf3eae6c032161b11f995fcba1ec740af0c942877d90ac4f6a4218e216a9ef18e131411532815d6ab3d8c9188062a3e34a87f777fd450290b6dc37d73169dfea5b28455f56d", + "members_sig": "89a38accfdab297e8a9c325c60a8f30f7c3e01f631e515fc43d020cb2d5b53848fe747cef7df454afb638e93f4b7260f0d62b880dd4f3f2f459a68d36e4194482e341a769cd86e1660c5b4c23fe50f3fd0db8706aef4e25eb558aef127457f82" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "0000000000000014e1cd355c0b36a32aa751e699fb37427afb53d24f71892cb1", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "a73f87f4a7ab165fb5f9295d32f225117bafffffeb4d39c502f0f92ff0a8a202446bf9c8295a299e2e8f5e7916ba8f26", + "quorum_vvec_hash": "bb44aec80afe05b4d075d4aab3aa831c28cd23886dd5af403195071bd17b194b", + "quorum_sig": "92a4fdee9330f02b2a39708a02f93735e3029ea79b23b419429fc02943b62d973f1721a698370a2dccdc22469fd1f75a1940dd795165b10744727f24384114e314f691cf87c8e438552ffb28047c1bbeb801df7130ea68ca4164719adc999c57", + "members_sig": "ab0bc9186e46a4f93b1108012210c990506d2158f23fec350484a47e913009a001f675734761508ca80d769043127679006de72619bc850bee4a86ba4a3cd01921dd107691b13283f2e18437097e38fb8d6d0035f9887f2ea9781c393417fc4d" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "0000000000000024997eb3b8e28a430fc875485c784edaadc6b1cbdd8c7d62d4", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "b91a014cec2ba0af19a16edb8a6bac0b5bc632e273960c5f8569a5f6c5e3162c00855cb6746f702e53724a49826b358a", + "quorum_vvec_hash": "6abf9dbe159e66159fee0c0d11853c503b62395c892598d1c34b2f9ddbdd74e1", + "quorum_sig": "b6f52fcfdf1901566e038b733071cd54411ac70f2850c267c22fcb5475b8732531636b53a3689a0c55eb163049b26e4101698e7b016d208a31728ffbc003fa3c9d177f16dc418ee1527a6cbe147a643861b396d77d9103cd74f4acdda6c32901", + "members_sig": "a13480fd771753734712f3692b2e98bb68a75f6c357eab949988f04cc14d9ea1ee6b030646f67aecdad782b4a0e341b018a2ac993435c16d501da0f203d7a3a2c338331455d4d4361dd0602b3e15410b02af94bd5ab77ff0c181358196f90d49" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "000000000000000c25a50ddea65e31d58e23da6df9d24d830605b8196ac9aede", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "a01f42bd0b0d5660ee9f7d2065cd006d11c074199a89378f752f20b714e235545c966b78b042636e9482d98883f32073", + "quorum_vvec_hash": "b49012b27bf3df4b9cbd5d79966b6c514bf926bd51d4cd54727c5f28900003df", + "quorum_sig": "8db929a3fd17963b8d3a390eccea638e32ca0b66581305e1627f2d0cae361703f8c20e75eaa7ae1691880fa7fab62b980a807fa6ad7279353ede3a50ba84ca0a0fdebe643f2f1e18243acf53ca3fb1896e05ca28ad46c2db7d49f02704ae7c7a", + "members_sig": "9912ad9191545eec44dc5a4eff018d09ced2f77e7c0e28f46d68f44454f506c9477a31519924f5765e40487e9e1ed63809294e0b193b0f5642e20a301877a3ecc9c4ac8fbfc90baf03eea84441d4220a2fbbf45a03eaa763f78cce20de345b48" + }, + { + "version": 3, + "llmq_type": 4, + "quorum_hash": "000000000000002d365df909876da467ec6fb099d6cc4e08d40ae9eb52caccff", + "quorum_index": null, + "signers": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "valid_members": { + "num_bits": 100, + "data": "ffffffffffffffffffffffff0f" + }, + "quorum_public_key": "ad1858c9207cc3754799382b2211d7393e6c5c3f84552b2f4b96474005decdf4ab721beffce6211a70f44cdcb2f46fda", + "quorum_vvec_hash": "44e5a71f77f044974af5bb04f35bb33bb3d4a540b7a27ff82341c308ce1427cb", + "quorum_sig": "8028843b29f26c3802459a4213a562d924b3e3e503710bb3d2e8d841011d168c8398f416f204fcf1d85ddc91f1e966dc08a0ad7f9cf2b41c493fb70cf244f5019b495fb4f1a254d20fb61b71ddafdd5c0234db446ed2dbccf45339d6bfede0e7", + "members_sig": "a37468ecbfa5a55d72644ca7071716ab9d613e2eb7748356efaf5318657bfeb991201ffcd1cb35679362f88b06d380b00743db013333a1bca10bb3b9a94cf07796dd95bce1610d12ac2312ba560e3983599f2e743218eedef5e85d23c42b5d6d" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "000000000000000e21f0990c79569dcaf876133b637cf7dee22d4621ea65de00", + "quorum_index": 6, + "signers": { + "num_bits": 60, + "data": "fffffffffffffb0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "afa673a523c1e862f4a2590f3da9e6dd687a5e05262d5f9194c84e923cd8503a5aeafb3d977c910d89d358f329c6ff17", + "quorum_vvec_hash": "993dbb99146d8a549e4c4497df2402d7a9e9fe56a04a8245d99c0e1aeeda5647", + "quorum_sig": "a9be5888f080156b90e122339576d455c835ec8ca9278fae4aa1a4754bd8a75f2c4dbbe77b03d42d92cc4b86c5c7507800a65f251a307b88282c7da8864e7f078f1a35ffe82f0b5bc263f51a1ced8f5069824f269a675ef7dff99b2a5cb1793a", + "members_sig": "83e634fb2019e362ffaee3508ca9072b933ed96e1c90483150113f0ca114fbda1dab626d4e38de24146e69c73b48e57902973b4c5119d857a15bc7b17c432ba38b9a4fa7c7a156972cdb9806e96808b66955baed6f81c30271c0e59a2e89fd86" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "000000000000000cc3666615733505b0e464a95608a5ba21a91043ce59e9a509", + "quorum_index": 30, + "signers": { + "num_bits": 60, + "data": "fffffefffffffb0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "b32627a5b0cb1737901a9ee630c42225b33ef1570be7a54ef86c72fa2d151ccc566d567704368dbfb5d508aa8e9a6069", + "quorum_vvec_hash": "7251bdff09bc05cd6c03ea80daee89d4e880b3bdd10cf1400eddff731b683fbb", + "quorum_sig": "82586ba6cd5f00f01aa3567421640531215fe190729a3436d9d64e11ae6929611a0caccc7c9295c3019e07b472f985550736d289d50b7f6909b272eee1838092450dff70b4d9253d99246934f5fab878b32a70a15c6c46626a729964e77a102e", + "members_sig": "ae0b9a635f05869a4c2bec2f4b013516e3e322185993798efbdf8ee2bcda4cdebac8bc9c7d194ce674b0d79f334c03f116cdb58ba1fe52f81d707edff9a14252373dad6ec2584dd19be44ca070c3981d9f0650b00c6f5ebc545ad7048bd96de6" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "0000000000000016be8663674d27dfdb71b5886ae4ec09fb510b0a11d0fe150b", + "quorum_index": 25, + "signers": { + "num_bits": 60, + "data": "fffffffffff7ff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "b762dcc52808911d82b9cafc67234686c256939fb5b4bc6d5558817fb5f64f179fec2d4e5aa001ea16c488b902da262e", + "quorum_vvec_hash": "52b092aff2d7a8cdcdccb15998b008dafe99ae6b9e5e59e4d23d54d744113ab0", + "quorum_sig": "81f4531404bf8b1e4a93e4cce7d2d20282b64fbb13e430e06983f825127b5b758e44d989de49e692e56a423ab354be611110275e5215ff50cf6a259b84594d1c87e5cebe783cf2e9ffea274c404f11206f06b85e77987b35a88cf7ab2e5729ff", + "members_sig": "a4b184cc7580a11658620357b6ce09a5a1aee50aa5626bc5e0a6628b123ea233dd9908c031ffe7371093fa0f021b04c8133060ba1eae7d8f87d6eda671382d1673088d1484f3a42cb65dbfa814d47c84f7d01a8bb5f68accd46b0460da6a8cdd" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "0000000000000003ed9598e9ffd78885d37f65c97b056a40cfe3be47ebf41c0d", + "quorum_index": 16, + "signers": { + "num_bits": 60, + "data": "bdfffef77fffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "fdffffffffffff0f" + }, + "quorum_public_key": "982d08b435ada365bb4500163d7f0bd11bd9e257e30c90a71c072c0e83521a93088f74f38e4bfa2d8814e19cc126fcfe", + "quorum_vvec_hash": "acbe153b0d62c46b234c58a5e87a727b06b5dbffb5f860414a8f2d0411fce424", + "quorum_sig": "877923d4ff925f67cec728c9e30f00513cbad3e7e206340d3ca3e90fb12fd6bfa85288032889b273a41de263b1893647175e81909921a14ca34a056b2a151a14e0c262e2eddc0dfd5068c4333f3f6d2546e634b01530b8e67c149d2abc866d12", + "members_sig": "a60fcb78505aee79a74600a010768882ad10d0f39d7aeae36bf40468ad556abb9b58e549cd92b5f284a68a28c0b9e3711960f6d8cde13516908bfc96629fad6fadf85c0f23b6edc9899bd268a66f2411d6a6195401f816ed216ae2ff5baa9cd9" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "0000000000000029032114093cd98844059906ef2ad0749e34ebf0042d3b0d10", + "quorum_index": 19, + "signers": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "880b410edb519087e808e0a3af0a7407e7729c06e97a17aac159bd9bf2260219b58a105b1350808c1dfd28e669d023d3", + "quorum_vvec_hash": "02e507feff8015566304ba5312f21f2d82ae4f101a785d7391590c9330d4eaa8", + "quorum_sig": "8d07edf44d615ab828de16e03952ca42adaa66c894006df417743d0a6dba731589a8bd5dfc8ec6964c1b7ba953c25ae80786368c9f8a7e323d3cc8688526d3282514f9944415199c4200047eee15e23ba9d02c754f0c65ed886c80ae66d8a29e", + "members_sig": "aa6d5b3123bca7a001e79de9b6103e3011fc926598305f062e49c9d78f565ce0700026891129d7b7d224fefc0dd9d7a60a3ee2bcce5296636d032e67b04fe195a3a3e44a022d8e9ecd98e4fb3049bb6181c384d89ebda24ea3b97ecd4b811844" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "00000000000000100761daf9f799a9061d05d46fda9aeb644e15f884640e7c15", + "quorum_index": 5, + "signers": { + "num_bits": 60, + "data": "ffbfffffffffff0d" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "b7da8bf11f00974f8d7c2b57dcc1f102f064eaf240694aea33b99ffd80f2a3dde5e020363b98046c9307b1abef4210ee", + "quorum_vvec_hash": "9ecd8cca8b44d59f61676712d763a33b6c8ee39175010175c22059a4a54c6835", + "quorum_sig": "b327c3431999f287704f552ce4e570d6061128689dd7099e3cc3752b423c95b2e8ddc47f70ce7f0b657a7443dad60c4d19ca46ecd938f7be8a694f8d536c820892700d054682ed534acb7a92c590b6636847d04d063e09900c3ca4f352e7446c", + "members_sig": "8e41421a7fe84bf15389178d6b4c0a7699a455ed5fd8bc5693c2636b05e426335be302c269e768f72b24c26969053bcf0885a9f809f8c16e9a45f9d22d8a104ebe943139a0911e62d3b351279f31cb024eeb44ade552238d789051cb0b7a0cc0" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "00000000000000250edfa33c09362d24138432c3c6b766bd81dc7463210ef41f", + "quorum_index": 20, + "signers": { + "num_bits": 60, + "data": "dfffffffffffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "80c869dfe7618b694110f046ffb21316ee9a70e73c00763fc5797771311f375459d3de2211a83011b696bbc735028e83", + "quorum_vvec_hash": "2165a31c296b5795e3b9dd3ae25a33919dedada6049b5dde1e22cc5a5c8e3f6f", + "quorum_sig": "a651db29e85e3d5a5f22e6f6cf007aa632d28fb145a9e4080e495440cae20a848ab925c2884c42c4ad1e69ef3a005c16007b59caf083e51a597082051bb4a29e0719949fabcc554ba979667fab590ccaad18cdbb29d5f6a61ae780d1aff7e3eb", + "members_sig": "85aad0a8813bea079a0cc4ff3ab8d1fd610b2b21b751fbb1e4d5543f62cec10f17ea6b1cfa26044809f9c39e247ff522160fe913868e0c2d440692b14ae9ebf271fd1572436d7c934d78805997f255a276ebd620cc93d97b2c4d2bd6f85e129b" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "000000000000001a1bc78175416defd7437157d875db0e3e9cbc22060f9f5821", + "quorum_index": 26, + "signers": { + "num_bits": 60, + "data": "ffffffffffffff0b" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "81c789d4b2e5cd9ecf240f5e6705ac057dfc19f1ea0f2e4ca751d9ad7e7ba7cbdc194567351f4153dee957468bc9c277", + "quorum_vvec_hash": "22b3bc426fc4ed8cbc72cc3accf4cfdfb07859b4a83311f5c297ea75d7b3bbaa", + "quorum_sig": "a7513657f5424ac117082dd317049497c08616e703af6f95618e3653ef2df8e7d2250d2d8adbb5b50a7267d414ebd64805539664f28f02e616a631ded1ba2ab0f3c4ecb702da04afc46d6f552dcb1f45672bae1f698624a18c014b26219ae487", + "members_sig": "88ebbb5b3320a29329f299acead163f3feb27a4956ddcbe423879d64acc59ca788be883b42d4b94cba78466540016f041936e1dd2ad6907d4546dcbd6b420fde4d7faba17f958f74c739f416e588f9ba9861bd1b6c6531f0c9f7642a98f1a495" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "000000000000001ae441226d0068e33bb9fdb173f14171a4357d36894fcb2631", + "quorum_index": 2, + "signers": { + "num_bits": 60, + "data": "ffffffffffffff07" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "a4e840c3c22e71c4e23e67c39bb9ce4ff8f63a1dc726926d6925a0c466714e08a98c061339b9d0f8f791d1e8e9cb1a59", + "quorum_vvec_hash": "3e4944fb53b832e3b8b376bb1f8853555e6cc26fde5e5616809be5f7822aac63", + "quorum_sig": "b3d3c5fe05f5705e9b4cdecb94b47887da905ef3ee30a91511880aa58e708dd255f6e66ebe4b87c1fa86df79c26d686d10b408eb27238b06870a175bae7185300c720cdeede2cbcd1c65c4ac8d06aa74f6303d987355387056b472c03ab0acee", + "members_sig": "a36ba18300238c0b02176530c11cb3c0256af771d424d58aa2a37bc1a0d60939f0c870105c45c28c59cbe409e4f95b650057b91ed2f3b344a74d523aabe7e9175dedcc0bd491d4d24bede8ac88bd689964ad1f48741ef85bae57aa6d5ebeff02" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "000000000000002d55b4e29b8ef78e317281b0cb98e40ce1257ace84472dd835", + "quorum_index": 8, + "signers": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "a537698bff1f9ea87801ed04b46e930def80115b4061ccc9bdc998f69afb177e926c78df94de5b93c50e33e8b33f3e9c", + "quorum_vvec_hash": "0694045df7d2c3aedd53a1d9497d27afaca4d6e88d7ff0623f4b0e21e5963ac3", + "quorum_sig": "ab163ca3aa8f02bd4f6016bf19983c847d2c278d84ef41825fd5c94f3e9194327ecac7a2794864064ac05918dfeede7319b12ff5310815f035a7cd1af152ef4367c94e4f4eeca64b24e396571d1f724e8c73d61ce279fb0d3724ba608cadd41e", + "members_sig": "ab0c40a5b7d666b95d7799e3498dcd60444cac59e31dee7d5fbd25e948fe5cd9af466ffdf1702b0a88111cfd89e2fcbf12258e2e44c7348dccdbc8a609cb9e7fb3ba507ed07b12bd3af37fa18155c8698a173796f9af873d0d2bf2db390a99f0" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "0000000000000001b2f76368f700f3fd7e3eb3d47ea609eab69df3f26593fe3c", + "quorum_index": 28, + "signers": { + "num_bits": 60, + "data": "fffeffefffffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "842564048090e61af3903a0191f08cd8f1f24174791a3efadc57e68c9bca1b2f095382e3b09772a87136761056210d89", + "quorum_vvec_hash": "945997baf24999b1d386c6ac2cbc80ead22fd31fae5cd69cf0be257fda0483aa", + "quorum_sig": "b2cb9f53c00a21fd92ba25e2aa9da6f9f5ecef02920f39b7ad59d91da6d1ca7c7b57f9026a67c7e3b41dbd98947be46d1999005fe0e126c95a6dc79b0f5939978479887908d6d34d917a206f7ecf65fec82426990896c8bc39112435d8ffa8f6", + "members_sig": "897f5315593f75a44875f8a81e59c9213cc7710577ba7ad919128983fe49f034c2319c78411625b2f14b48228f6d114416c6b6d5170898bf77139040c76a75ebb2ff14902b4bc218adbbdc6534ea16eec3cfe165d580d67157e2c57796c41c0f" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "0000000000000019db6c6fbb1ed0664d3c93bd1a6d2c80ecbfd5b19846da6c3e", + "quorum_index": 0, + "signers": { + "num_bits": 60, + "data": "fffffffdfffffb0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "ac28998b3a8db74569979956e2ff93642e8d0fa5c248e6af72abb0bd231e5e73a58a349a49536d9236e8886bc666aaac", + "quorum_vvec_hash": "1614a501fecc5538af71707f3daef12b6113f1829bf85207f8c7982f91d792c0", + "quorum_sig": "a81f35a35bcf33f05339e227c51c2f3eb287c0b74cec18eb47eea3f0746ebebe67825250ee42df6a8fe122a0b1a49c86137ab3c552c45230e35572d2e9980b659e9455e80240776eedda27fb846da49ca12502be249fc5024af52ce612642014", + "members_sig": "a44b8460c84e8121658ab61d197264be429200900168fa93750477d515875df7c6cfb93973120029cc752eb9b869bfc519c47d4214d120b8b851c66b29646e1a8c2d96eac3408243ed1879f503b9f21ce715d4693b3e590361f772d912077779" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "0000000000000020dfc31833b73c16d747ae62dd1d6e551363ff2a2bdd226146", + "quorum_index": 15, + "signers": { + "num_bits": 60, + "data": "ffffffffeffbff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "8ad9c03598c0f3756e6ab11dff90681fd2aad4adc5af76f73a3604e44f27fdac5692ba46b68324939b28ffa2121002ba", + "quorum_vvec_hash": "f15ee41a814a5ba4b5c85b6282b4ff5c052e13207c1b917aa9d8223487a4e968", + "quorum_sig": "a8f236f68a9304fc995d568a33cfc89db7ffdc4cfa38c12cd37f71ea79bff2d6e862c474490a877f2c23d7f69a7a3d6f0387459b8a692db323cbb3f3814864293e628c05b253e0692568b05f417da79b996c14ebfd1bdb313370ece7cb49a450", + "members_sig": "8ac49e24e0123172b78f42cf55b0e8f83606dcaa61050066ddc22e634771178170bcb0b229427c85926e2012676c23d410fe5e8dc5ef91fb820f039b58527c19f5b1447708f88d6ea873af569cb0930c830a8303ad403663a5c512374d7833de" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "0000000000000001433e483acc0a1ac5e54636115521dc8c20c552fc931e6452", + "quorum_index": 22, + "signers": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "931f67f621cb5e2d5cd86c90d60be546cc138d771031c7a93212d8041e3665f0301db43f93f691ced41f7730aee18819", + "quorum_vvec_hash": "196ac410e5e0420fb2e2b50e3a7048e2bbb6c3e26465693df08c56f088cfadcf", + "quorum_sig": "ae0b79abfa71bdfc6afdf7543713d359e3cded7651fce584cb12d4473ef1ddb6c9b51b550b96e4475fdac9ee87c315810261574b32d109d4a4b143fcf820b060d989ceb39c0b870a091ef5bd4c75c23b0343e732b017df0d0d9233492b81027c", + "members_sig": "a3dc8f6457d88606da93f21acac65009f476e703919afdb57e2eda5c02594e90f516c24abaaaee425a54cc9b5632844613d7b0882e827975f4247d9fbb801e1fc338b5a16851ac6e1a900840854e2e2552604543a5fed7294499470f88604b64" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "000000000000003423413228f3b643421e652bbc5ad122f2ba1940541f75d656", + "quorum_index": 7, + "signers": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "8c2b0c2f3a10d23a9d423354bf53a3c863c8286f273112253aad7efa3d3d1e9395052431229cf824dda82d5777041b4f", + "quorum_vvec_hash": "af3113ef598b631d228c3013ed0e929843d8da9823cf25a80ac9a24fb53234d6", + "quorum_sig": "b21eb2cc0765c9b03f2b9c5d306dbe952df076f1ec311bf98b6e8eb485ac598e059060c42bd7eae00f274f846a5d2e200e5524397b8f8fcd60617d813162ddc98c6d11d4d7b47470135f0c51159fbc86f76f29804d2f12f2c5232a3878dc53a2", + "members_sig": "b51f5b87a432714051e804e9152ad96787c16eb7e182f86c4d6cf17170784429ff690c2b83572cf5952260cd27c9aaca10de1ca542bb2e1b4b9f02cf966c725233aeb16d7334896316654211e12a635811e2e8bab280886d620b70ed32b6e608" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "000000000000001fda7204240ff2bffbdd3ec53448ecddee6918549b1d5b025b", + "quorum_index": 9, + "signers": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "a4f5e9252d5be20535f1922f445edddf83c99919daf3fd4aa43c1e18772c7b7a0f07afc94e403ca9c647df6e08cc50b7", + "quorum_vvec_hash": "82df6db8df14fc9b58152ce21922f3b2a324b83ad6a733237a895ff3b0b60aa3", + "quorum_sig": "a999b8be4e5c0b3ff01d84168036953c5d4992e73a0103777f5741cb235db23a6635d290152ae361bc28b813c8f6d3f9164c174acdac8fb524eb0e13c3b0ba9cc86dc6f97ac61c32cf1e65a8708e144085bafbfeb24fa4e8d582775f7e5209e5", + "members_sig": "a63db0a042ceea4bbbf1cc293ff8a70edd9971c178f8d68861100e24a370fe308077900202fcae6e2e62d5c990825d2a05b797b5656f92dde04320109c0f8c7b6fe2f5ee1bb2ee63ff7b52ffe50fba17a84706d885ee3363f19bf0c2159f7555" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "0000000000000008b82fec19e4c599ec7e5a3c086cfcece23c6cddff0590555c", + "quorum_index": 27, + "signers": { + "num_bits": 60, + "data": "fffffffffdffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "a584c470c79f3defac4f0f14b9d549b36f305a36c482d7a16a95053be4fdbea4afbb9be4bff847cf24b929d715886b21", + "quorum_vvec_hash": "05ecaa9ab5615c316b2ea72edf87355cdaa770dd07bcaafa5cc16723ee1a7520", + "quorum_sig": "b5b02664f0fa98fd7d17da9ac18fc7f9f61d2ff716111185aadc95a382a8062061e6e40fa5361a9601feed904b8362140a1ac07357e6c026855d640935c03963b626ed92246dea809f351f0e55170a424525139298aca340f4c5b213115b0793", + "members_sig": "81af9a41427da443220dc0cee549e18a25eb95b33a04c22df89c7da0f7cd6cf23433e1d393c25f054d89814ee6fcbc7317bdff59ecc371933e42b0fe98126a6e3d024519ba1ac1a04b6cc28262ec0b728cf15bc27f2321457691e8db73390cef" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "000000000000002e5636d3a60eb1a3966c5c84d877a1f3adc1c09f191b672065", + "quorum_index": 31, + "signers": { + "num_bits": 60, + "data": "ffffffffffbfff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "a00585116cc59cbf796970ca1ae932ff82bdbf6d9d6776e4c42eb0e945fddc5e60ae18a1054122eb819e4b485cbfe274", + "quorum_vvec_hash": "e22bfc24f966e9e95a1bd69f5b45aea9390c8136d1c5846929271d1cee6b092a", + "quorum_sig": "89bd80ad9a21b3942d60c16f9c9f8d622da560d82b00cc8e96a6b91512049b84b87864c070dfa47326c2848b3014e97119a09a10cf33751fee21e5b0825e285aacfd3ded4f0a406e81a98cf12591aa9e3c9bcf60e7347c76a88dee074434ba05", + "members_sig": "8fcf30eab976e3eaafda3ad2ecc1183f6cad43bd917a3a27203e13256fe4a949fb8bce398a64c70d3fe20e12662e247810ef43ed8d6acfa86fc778902c6abe804dbbb0766a17c99f9ce4de1d8d99e9bd8ac821323a2262ac7bcb1d3af0fbf110" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "000000000000000c693692f9663fcfd1d106f737d816310ca815ecd449ea067c", + "quorum_index": 17, + "signers": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "b4a2c7ca3021387a7d9ab6f12b41515e5e551c056f6da1499184ce0e20a5e6227c6bf3510446801a71be4886122f2cb4", + "quorum_vvec_hash": "8e18d94f8f5e97213a706fcbf1c2c2351f8b6cccbc555d46e807ab370f19b4d8", + "quorum_sig": "a74e9a20dc74f47f3fea682266a0b7ca27591cfccd06a98b76acec523973cb5cefeaa2e256cc3f5d6bca3a829b47ebb901fc5171cdda89570eaae72d28aae41e520050f6013d35b035fc11525c3ed9e8b7e017e76298ed679be9b6c7a19b081f", + "members_sig": "b497c776830263d77a7db0a748f75d10fa1fa0f1a738664ce946fc9876a643836c8bd79d7981764b1c535ab3cd24b6e009db7a56e9781fa3ed0b0a0cb29aa3eeaef31f8fd448f6fba7a4cda2589d847ff66b97fdda6d00139ca5583186afd5b5" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "0000000000000039ded79207fe217b8249b8746c74f351c3de231aef2aeede89", + "quorum_index": 3, + "signers": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "993ae377f319885b029439390a96d566c8b2647a233752d12ee1023a7abb858cc0b2336e7594a95317588bba1149052f", + "quorum_vvec_hash": "6eceb6d6220befa4edc4d1b400ba7bfb12c475e2ed8f9ba2be4c4e877b7837ce", + "quorum_sig": "9998f0e8a069c3f1189d254b9b5449158c014d1a51774c7ebdc630e08ca4c1acea65e8fc9e497d64e76d00bced502a1f0cf57921039e903472e04346a3a8cd40cc59ab532789db41ae4122b372732101a589631d06c85112166b48191ff9078d", + "members_sig": "ac5ca1f0dc79eb5bf1dafb227f58b470dc04a8dd13bc5a44aefde233f24ea60e8584731c0539de227e2af85843c57824141ff900f8af3ad49679f48d4a5992508f0547e77c2f5b913ac76b1c1f433c78ff2136643c9167b7b5180c264df4fe11" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "00000000000000350a4d15840e2d232c5092f7f4aea0fb132e719e10186c8391", + "quorum_index": 4, + "signers": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "ae5d3ede5f1901902175642042a0028ab54ada9281ed746e5d1605e4ca56af8755f10cd72fe684e508dcaf9993184206", + "quorum_vvec_hash": "0a1ed1884773f3aabd4d3d0c550f74988b65770d3f4e1150752507e08754806c", + "quorum_sig": "b68bcb1373978c3c84a4b35a679ceb535bf316db50a3c3184126af38ddfc38b43d8c0434028cd94d3c22c5b81d5cd3af016e4f1d30790748c1269e2c124915f3908701fe4d8f00e6c329709dcde6940a98a349846625ffd90f638c31e054fb5e", + "members_sig": "8b92fce987e5dd0e4a458a47c5a7b88ee2b08cf982c73970cff1bb8c9d58fe7cd954423664b78930b57ce3b17d0bd3b21475418958cef0c3b5498c10ed5ff2f4ea2e684d504ae8e2060b769b7d9f2cfab4dd27a713bafe73a82d00dd2570ead3" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "0000000000000017b40727075e80dddf796b596e89fa0f04e262c74dca7f279e", + "quorum_index": 14, + "signers": { + "num_bits": 60, + "data": "fffffffeffffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "abfa5a5d2c6a8d28a980232f549d5ccbfaf6e58d90f6c9440aefe5dfad639269a073b2cee5efab76424d9ca0261415f4", + "quorum_vvec_hash": "35834252ecaaeb3cfd6c0c799a74324e9e8146b570d4f70fd21c85cf75fe2979", + "quorum_sig": "8284927e07d3709a01576cfc90b9d50e56b5a016d3c48e0a0ea96d9d923eb9a041eb5a9c37e8de56342ba643a691c3f309fbd754e9cf0e09d008d32550382b809e938ee76753d3724db184db4e2606b5042795ca9a04a3a2a4b7a48f5517d317", + "members_sig": "ac8474bbfa3471da79f82bdb2c23cdd89a7a83608703fa3269ff9fd7a552f9f4412c64cb7e51a7d7e10d051d8a91fbc910dfff646d18a67497bee9c9ea8d8f355343605a1e461b6286a5ef226748b6249b1ea36d95fe83fc930e3e1d2506e018" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "000000000000001babf60750e23cbfafaaf1155db0d6cbec93b6ce2a236e23a1", + "quorum_index": 29, + "signers": { + "num_bits": 60, + "data": "fffeffffbfffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "b429a8a28ebe8c3246035758da82affe60c50116b86ffa0169653059dad5c415941dc1f5b24f31a1f0ec636fe09d307d", + "quorum_vvec_hash": "b96543f68b54145750f0f940dc47d49bd1aa7423d10232f5828810e9c1fa27cd", + "quorum_sig": "ad96d1f53b7a9293f59f72fb1cfe1c242189300b12f9bd0a96b49e2b79e8c16a55fbe279ece5fecfe398ec8b857c381105ad73d4c6861c23f80f6d7072d592ff51af553323189c80025fbf56f4222f68ef2c9876c51ee2dcc8bfdca502cf259b", + "members_sig": "b453dd5ec03d7b3b5dc1c037a6a4e3fdb07fc7f797e4f303e52fe43f2d622bafba3ec4690d7b4af1856a3f7ad2218e2b18bd0e053db113fa29cae2f0e4302d6390bd86c89fad14d45d99d27bfcf1f387416100f5bd77b964b8bfa75cfa866653" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "000000000000002b18075f371cb47278c649ee5aeeeff7b68ad7e49d8d4aaea6", + "quorum_index": 24, + "signers": { + "num_bits": 60, + "data": "ffffffff7fffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "968eed411796caece939b197689c6b3901287d1e1cd626c73d55b02101e875bdb0108726663fdbfd049606e11cee4279", + "quorum_vvec_hash": "1da481a4ed811821c0071f2d2ed61cbf4908f0d54586627b9221844930ed5f3e", + "quorum_sig": "b1466ed1459a17afdead3f982ef5719b77ea2ac47ab935d35454ae8a2dce3db48cb6bdfe5b8707628b92fddeefd4c3b2143e812adedfc3a9d2b4f003c7a91341efec4f411ab9bc55e7ba9966d71a899dbc517b0dca908b7491beef1628b682ac", + "members_sig": "b6d20ce3451e52daaa9bf9bc8bd32772830435762563fe250b41b726481300b6f5f8d005a691f3e4e7757c38075599d0164f6fe48f14aba1c83aa420cc81b6a0413306ab3a31fb48d526e2734a6810d058539fa3c5feeca10c3dc55ffdb19985" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "0000000000000026ca3e0247845357979e83615b48e001b90e0202a71894feb8", + "quorum_index": 10, + "signers": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "a51158216d1dcd92d9b20ee670e75ece47048807dde7ee99e4ad379b9b9e86326c81308681577a01e6cdaceb3c88bdad", + "quorum_vvec_hash": "52e6a9c66e188e606c4ed34881a6298b782acf3dab2814d3feb1bfed2ba99ec6", + "quorum_sig": "99bfff2c9678addcdad89fd832d99cf1070ef9736ef8bbe05b220b28afb7bb5697001512781f9d9c975990042147d46307f1c04cdea8e7cc5c279d8fb71e1bb32452c184c789b5b0ae5b00f9d817880064ce42e3bfb53606fecd4e354166efc8", + "members_sig": "991cf352b1a78b07df0ef78c9e85f581bb4ce939fd2481278c7ad3f1438b12bfa412763d03b96cc95e6bc4350ff962321208df9a1504a3fa21c7e990d3f6711aefa27111387e1b7af0b4d44b2494315b7b33b00f50d33d6166c196acaa6e561b" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "000000000000000076de920b3dd428245989a81374d911b1d937bc8ba033abb9", + "quorum_index": 21, + "signers": { + "num_bits": 60, + "data": "ffffffffdffdff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "fffffffffffdff0f" + }, + "quorum_public_key": "a98356416c0da3fab5ab4f0bac53d5d4f3510fe05fdf36c6b346db37cde19115a8bbcfece9cef45a14f81387221e3aa8", + "quorum_vvec_hash": "600b1a7d3c5d39dc25c4287fbd36b41fde2ee11793cfae6e7be85160f64f4611", + "quorum_sig": "80fa66cbd8660d8733a35aacaf5b13c9fd0ca88ed0fad84c9111c2e5ad9f2966f1797787449042d48c5862fdfb2642040e527d56d4dbc3e85c33a87accf6e08cf44b4bc0148b21792e7bba7b9530a821763bfc9d42f26dd38862ccc7cc71a09c", + "members_sig": "8e9938a4179625cf6ea33d390312b857e74e1c377ee150adaf8f711c8ea2dd7cfb82cbc2f028572c2d7bf153f93113f10dc088f3ba4ae5518866c8825cd820bbab20ae689e4e04fd5aca4ada2322efbb93005b4f8ffa2987dc07af46d3087cab" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "000000000000002d88281dd270a98bd7929736b88a69a0b2a7650dbcdc7278cc", + "quorum_index": 1, + "signers": { + "num_bits": 60, + "data": "fefffffffdffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "a13aeb8d9351c6cd195f963397252af0b3f4715a8cdd925a8c534e2690b6ed930589b4a0c638e0fc28fe4670445ebb0e", + "quorum_vvec_hash": "f341c15512dfc02bba595064965de0fc40e812136a0b72d8babd4df28ed7285f", + "quorum_sig": "aed74eddbabcd2360e56901b0bf2a39a0279aafd4d6727d7185a209159c5bc4ebecf45d0994dcedf93016735ad62fac10d1c47873c2e8147f0c727be4dbd2cd948e6e0863678d0b36cc26bc0fad76070f23e523c13e226a000fbc82e8594c7ef", + "members_sig": "af7fc6e92e3eec1e8f1d7635f4831a46385f9123c96be8b602a6ee05ee2cfafc2d58201c7142385ef2c3d61964b6acf8180cb906c2fb31665ae681868f3a41b1160299ee4ca576dfc6fa9fee117c98d156e6302906f669f501c1695ceed142c1" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "00000000000000397d71b74bc2da09be8cd8edc7be6f5f1bc667e6a1c69f30d2", + "quorum_index": 12, + "signers": { + "num_bits": 60, + "data": "ffffbffffffbff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "fffffffffffbff0f" + }, + "quorum_public_key": "b9eee8c0258c9671fc6ecc985091c2b194820f9c64b6fdea286495eef05646e2f112a70a11df60e8930190a14d95a888", + "quorum_vvec_hash": "f66078983abb00898750c0fa16120224cd58577d3197891dc4da5592f987840f", + "quorum_sig": "81673f00d5c6c7278de9086332cc1d7cd331f6f11c856f3aecd1049ea4d0e6f1cdbedd289c3225dbe67fd0224efd3adc0f43eb43e338858dbad5df9156ad0164701c3b5e301ab67a865cc58dccf09e83cd528aa5a0956d1104408e920045ef54", + "members_sig": "82d26301307ab24b4875372596074c016677e2aa29af292f9546be19aabf8a0cca6719d3a0bcdafbdfae83c7376b357b0e526d1c47536a8527034d0e2dd02bc7ebc8fd0541cff9e26679b7e185f36d3f4c9e22e8a831d6ca439aa3a0bf0e9451" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "000000000000000af0b69757fce8262e80890614d9e3191fb4b7991ce37cbad3", + "quorum_index": 13, + "signers": { + "num_bits": 60, + "data": "fffffffffffdff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "aa48280cc96152a584af056bb95eb1cd6f6d69ac03c91380e67b326940e9d8dd60c2a5499a835d544803eaf08669651e", + "quorum_vvec_hash": "0e7a6101ed5b717393b5aa6dab774d9a910409f8db8e197d47b17c0f208f5e98", + "quorum_sig": "a68f57970d9bd4c04f96f9f1e1be9f7f20d95deb3cdab4f0b4af68d8c987475bdb7ca7de8675d3f41896fab5136aa7f30e76adb2e2fcbed735c95dd3313c2207a53ea5d7a6b9bc183ce2c8f16a21a254acac68a02acbea03cefba0a8281f94b9", + "members_sig": "996daf816dfeb80b002241320798e2366038ad07b3e395b7638636fa16d4d10e9509d35bd929c0a17685001c337b19400779736f26ae9d30013a20ab21feebc73bc618e75dd1b795796d21703459c30001a1d53690fd979e5d804178e78d6726" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "000000000000002e2f0d339679b715b3a1f4e7f92c2b406df12e836016816ce4", + "quorum_index": 23, + "signers": { + "num_bits": 60, + "data": "fffffeffffffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "8f3c675a107eee9bef9b3c35c6a8e735ec0fb80cb9011604a3947e519cb125589cbb55e8235824499390507407cb9725", + "quorum_vvec_hash": "c0f10763899a36421cfa6195efc5f364c87a94c13d8a3aec7a9affaf36c8bc19", + "quorum_sig": "8d6e5f65a80f4f1cb640ca6dd9c3b7fdf8e21e839ffe55f830e75760abef5ef6b526b49e57151fc545e17be158ad075f14d1a1b17f09877b63d4f5c00b11d7cc585e7ea6c8d6dd0cae629c1748d01d392384504fe09621863d8eeee2b16430b6", + "members_sig": "b0bda1101da7c62b12db2135492bd041853d6d5ddbc420f05488760042d9b13db3ccf982f0390e663ff1eb3cb1b8503006ff2443da145229f717b34125a1956e91763ee4353cab1e53b0b5220ee21000861ad4b719a09b21e09b99ee11e26378" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "000000000000002386b3797965b4a85b113e57477738c1cf8bba8c53304ec7e9", + "quorum_index": 18, + "signers": { + "num_bits": 60, + "data": "ffffffffffffdf0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffffffffffffff0f" + }, + "quorum_public_key": "b1feb0eda50882046b2caf804954d4cb358ca350f26883c0682323b09bac0decf44148936552a94a5e0f2bd1d54b7e14", + "quorum_vvec_hash": "8f77bb7dcec5256e141c8dde72e1d8bd7ba83133018d42a9dac9c22f46368aa6", + "quorum_sig": "83a531602b00eba9a340410143ceda2667d13394073852c3ee1493f4a85501e7905c4f8a00f17f5425b8c144d020532909698948ae638a6485484eaf306281d743786b62626f4bdd4e7ce8e6eda69cb62d83d7f0adc9cbeda7b98c098b9a20b4", + "members_sig": "a2fd916ea493d6c00c844d1342c5932b4ab8cf71f5e80a0e45343994bbb8f2fed3ec2c509fbdd4bf8e9f3feb5a21505b10621b5708541fe138304df1e9b56b4a1bd8a9f60be76d94eaadfec2c978f7bc1c1ea079a375c5231af050b53b2b491b" + }, + { + "version": 4, + "llmq_type": 5, + "quorum_hash": "0000000000000039bb34273c53de924c208ca612dda414e576a0a83de7325deb", + "quorum_index": 11, + "signers": { + "num_bits": 60, + "data": "ffff7fffffffff0f" + }, + "valid_members": { + "num_bits": 60, + "data": "ffff7fffffffff0f" + }, + "quorum_public_key": "84ddc232ee98c9bb0fe48ef448ecd91f7991ce592013da0c3fde986d3ee27c397755f7b26c2e25cffdf0b538e2367f03", + "quorum_vvec_hash": "f97ca16856aac99d868ed765242638adc370f586c39501c4ba08bc63e95c1f6a", + "quorum_sig": "973e2515540abb7a0e7654cd8b172488b61e5bca1c5ed09e391086b98f9f0f53bb26a4e6b8526099e27fd89bcfd3dd6a022e9e2e681d8e267d18783b4da1872299d2b9252ec616258dfe983de2ca7928391644d7fe06165376b7e205b437c4d3", + "members_sig": "a5f80d298a741c621dc1d31e38da3cb1bdf7cfbfd1c0fdd3e99e9b9e1b629c9fe9a5c50d429247e2ec93c5097184bbe619f1d2cf9d752a419ee1dc5cd2318773f327c838c686ccc7ec20041afc651854e2071b614aa415850410b946f8363750" + } + ], + "quorum_cl_sigs": [ + { + "sig": "b6ecf64acd38dee9a71f7d5effe880d7a958cae2b442811c24e24e04169a09f1d2a005b5018a202b6a5860097f8fdd940c27d083ee5b65ee2aca531d7b66f729feee6b2ad05d1b8811b5daed13be6483c521ab2b992e7b1a90ce5bb7595e261c", + "index_set": [ + 26 + ] + }, + { + "sig": "84c628dd70d6bc90a90b05990864f93de1c7c51c9334304534bd9e737fdde0a94fb70b07232b64fafd319288b6495727067752278b42908e474aca1534812952eeceeaac73a08049b6f78c15b8053f97f9590ffc3eb0bf250d408c0aa687a441", + "index_set": [ + 10 + ] + }, + { + "sig": "b6c0141439aca64d921c1aa40f48b517dd7e2100c2d617bc1c507970643fd67ca01f65900ad5ff1ad2fbc2d10303277c18908e691186b20200b7b052ab906161c11d9c58e1552d9d5d4deb079d4317b5714483b258119735638031b6d3578332", + "index_set": [ + 6 + ] + }, + { + "sig": "b254486d14b8bc3aa6c1f563bb8dbcc28480152ba5f82fdb89867d85826370c2d2a6abbf3ec5546c9f01c2b833ce70b415df9c9b4a957466237e24bc07325c88f027bacd5ebfd928a10a02755b8c143f10c2850f08e05070e85b4d620b31989e", + "index_set": [ + 12 + ] + }, + { + "sig": "863d03b16e5fe27ae875c038456656181abd4e6ba75119d4fd5635a802c4fd546c1f25adb0ce14edba364da3accfeadc154d8cc2b157a32ee4eb05d5f6caca65cadf61b7f1cc93a4daf8d82ac6a06c36d3dd22a010a62af97316a77cb8888795", + "index_set": [ + 18 + ] + }, + { + "sig": "a10acd2009cd2ffc1bfa47a26d93861c51e3fb1785b452493b4a018cf16ef0d9a7265cd304ba4746cc0f8093c8866c76099e528c08f3a8fb8666e5b3104fe6648c39481341885dac258a599a8d059bd373c462c8dc6c52919e039226bdc561fa", + "index_set": [ + 15 + ] + }, + { + "sig": "85e402d8aae97774ab80e2c9be6216fb3ef2225c16f7a5eea15bf1649c59ab7df35667838bc611f6374086825b714338122b3d943d6ad3ad09db5215536fbc0abd8b227a98193e7f3fa44fd2592d131c07e6033c32fa08e7a70e1d06c1ebebf8", + "index_set": [ + 25 + ] + }, + { + "sig": "9340e39dcc51d8cbd0d140595fa5804e67f9ab1091f25d57576ffb92c11ee34d9c3adce1e183eb308402bb2c821d773f128f4359fc4790626c115310de2d0091106feb2a1db303d6b0f8d1cae1cc2920e43e33cc60fb30fcb5a4b35357b7c1b7", + "index_set": [ + 22 + ] + }, + { + "sig": "ae89eedbeb3eabd9427c67e9a295790e8e2d8bac9442f1f1d959fb991528d0b63264b6df9c879bae8279b941ffb5465318086a7fa875e3b7ecf7fea1e622f237736bd88ff318e8708b6542a9ba4ab49de27fbf0c5c0b4384768eec4ef58ccf1b", + "index_set": [ + 16 + ] + }, + { + "sig": "b63c90b1bb8c9c4c1d6eae2744cbc67485ba83e823a08258a75da34176874340ec41392dcdafb75f43181c7c863249f8125a13c5fa783f619231131129711e9f40d3766bb88148690f9e5ec742f927738bec03dacaa7d1d07d7bb57f8454068b", + "index_set": [ + 14 + ] + }, + { + "sig": "a2cbe66a7a36ce8a317e27a310d681000c8fe5cae77750e515a841adfadb29619e25ed7998f6baf12fdb13fdc61e2b6d0ad17be496f9590b72cc8599a07d896b60ca02ee7094eab194146a5ff55d669279b54c23a21669a0f98ba59bbd4f31ae", + "index_set": [ + 11 + ] + }, + { + "sig": "91961510df241be8e00c3ae1f099bebcb51e7aff1142687417f1ddc6fe6f3eb1c330fddc16c6f805f85c2f934b96ec0f035e0ca6a98c32aac769f394c8b73334842fff8fb7f5cd987062ce0e41b84c91a8bda11a2f9b0b30941c0014ac33969f", + "index_set": [ + 20 + ] + }, + { + "sig": "b6705f94b4898b1a24fd3f4d21f8e190ff65230ed68a57b74f5dfb18d3bc07e5cd2687416a543791a324c79fe5624c7616e6c6b64fd38baea364e0cdf9c348ab51e6525d042476262a84500751e4671689f6c6651a858d06ab81f27e0d3f7682", + "index_set": [ + 23 + ] + }, + { + "sig": "a9fc366c670da755e70c3e6e36924a401059f27893e5f48f8b99d8a4e7fb9c4406095136f04d560988669862992fa5f818b6aa0bcad7ecbf2c2271140c1d112b25f4b0cc3af0611bb75d6da35deb5499d8579e98cda0fa437183b184003fd2c2", + "index_set": [ + 2 + ] + }, + { + "sig": "838bdec76b08d01441d1ce97da40442cf0e17e8b6d2e305579448dcde9240de463d508c269695053125ad867a84061290bfebb8f3598123575993b85958aedd9f522c123ce8f68b78727f5fee9b72252dd704693d782813e2a5ffe4fe3d2f3ef", + "index_set": [ + 0, + 8, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59 + ] + }, + { + "sig": "89382786cc3d2fc6a4d334817f96c0ce2de83a1670cc90abb5505b67cd83e3eb999e82d40209f2efc61800847126856515177307e113f458ab71dc84495d2175007f98448b2478641d12708dd229f96398bde5ec67ea3e131befcad42438fe3e", + "index_set": [ + 27 + ] + }, + { + "sig": "a19cf1c85c20132290e00961359cee67f15e23c693f16f763cfb92380297cba99ddea81a1b900311da5585180d4929bf0cc073d33891674a865cb1ac2a46c31878b68c3dce63afd8d4be986e7d92526ab2634a7ce7bbd7570e5cfd8c0fdc98ad", + "index_set": [ + 4 + ] + }, + { + "sig": "a9079e891d7372bcadbd4ddff216aca4275fac4e5d60ab1fb3ea2bd4733bdc2faee349c245deea96fafcd12c84c387a3019ef127c2e151f45e28bac4e5846984a4ac7a4cc6a81f57c801643744fd47554399708b6ca5d9e305f66ed2d15fda7c", + "index_set": [ + 24 + ] + }, + { + "sig": "b44ffe0b1b232709af832581b4d641a2cc3fab740d77c6e5431a3fdfa7f40e2dce80b4a08389769b0adc85e7e276e8950e86e75bad4dbcfb379f1d9669d58ad3fa7a8d1010462f1a7cb18b7dfbdfaff50235703b83cc052e65f7ee06f2d9858a", + "index_set": [ + 5 + ] + }, + { + "sig": "b3fb19d6a4a02eb6bbe34e80aa5f1c22c2be0158f9baa5ae1db0ffad2bae4e083088c4a549228634337b280d7a86f602070dbeadd3316d1db72410520464bafabde1e306dc82e7b61a0b99a9a05175d44643b53d46b7755a63106c05f10af708", + "index_set": [ + 19 + ] + }, + { + "sig": "a2709eca63de497171c3a835887862460ce1035c7e006836d57d8b7b672dab6fdbc4fba6410e69f636ecc62a1eb732311573eff74df3509231da739b2a5db320f2c244bda6232fb98146a44292f067d251f28b23df67602a5c8ce478839cdb3e", + "index_set": [ + 17 + ] + }, + { + "sig": "adbe2d5ca94d72063afafddfef332df4cdac5c21632124b9bc327dfefe70396078c6088099bb93f034f10da2b25ea7280e44e2dee658634831594bb17e45e53dd913489bb9a0eb620f19e803b7b0f78a667798f742ae1bb87faabc8b5a7399ef", + "index_set": [ + 1, + 3, + 9 + ] + }, + { + "sig": "8cdb82a311088b2f32c790130ef659d07daf3858786402b3a8dee86a722e7d434db37b286b3c7e2e0d9ff500f619d33903afedc7c8c2a929e320bb936a4834af4c235f92be5d3516853129e52a5d141cf30c201d5a299d65cb0ca0d2c8e42253", + "index_set": [ + 21 + ] + }, + { + "sig": "a78470c047dda739bf4e6bc3f8d0f2dbee7e0a8b907b3ab0955924ae4d6796d757ebbc323b67ce3602bb98eee2495ab8194bd2d528de2cef742d839175f92af73d1c6b1a7f909c40a23816151bc9e91e4dc7d3f9e68982d1377e395ec4086b00", + "index_set": [ + 13 + ] + }, + { + "sig": "8e8b666f3e1cab4f8bd4aea63ab06d4c2db58fed7c38735b1205eaf8a0bddddba313edf26513a4374f2146c762676b2c03ef206d3e5e74b32ea3ec55a9eff8183c8719ec37e20e7ad18061c0e6e9210ff2e5f8d66e3fb7f85f0a7fbd9dc17992", + "index_set": [ + 7 + ] + } + ] + } + } + } +} \ No newline at end of file diff --git a/pkgs/p2p_core/src/encode.rs b/pkgs/p2p_core/src/encode.rs index c5f62cd..26f3ec3 100644 --- a/pkgs/p2p_core/src/encode.rs +++ b/pkgs/p2p_core/src/encode.rs @@ -12,8 +12,8 @@ use core::fmt; pub use dash_primitives::codec::{BufferDecoder, VecEncoder}; -/// Maximum buffered P2P message payload (4 MB). -pub(crate) const MAX_P2P_PAYLOAD: usize = 4_000_000; +/// Maximum buffered P2P message payload (3 MiB). +pub(crate) const MAX_P2P_PAYLOAD: usize = 3_145_728; /// Encodes a `usize` as a Bitcoin-style CompactSize integer. pub(crate) fn encode_compact_size(value: usize, buf: &mut Vec) { diff --git a/pkgs/p2p_core/src/primitives/governance.rs b/pkgs/p2p_core/src/primitives/governance.rs index e84e993..5717c22 100644 --- a/pkgs/p2p_core/src/primitives/governance.rs +++ b/pkgs/p2p_core/src/primitives/governance.rs @@ -156,9 +156,6 @@ impl dash_types::TryFromUint for VoteSignal { } } -/// Maximum governance object data length (16 KiB). -const MAX_GOV_DATA: usize = 16 * 1024; - /// A governance object (proposal or superblock trigger). #[derive(Debug, Clone, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] @@ -193,7 +190,7 @@ impl GovernanceObject { hash: outpoint_hash, index: outpoint_n, }; - let data_len = wire::read_compact_size(sl, MAX_GOV_DATA)?; + let data_len = wire::read_compact_size(sl, MAX_P2P_PAYLOAD)?; let obj_data = wire::read_bytes(sl, data_len)?.to_vec(); let sig = BlsSignatureBytes(wire::read_array(sl)?); Ok(Self { diff --git a/pkgs/p2p_core/src/primitives/mn_list.rs b/pkgs/p2p_core/src/primitives/mn_list.rs index fb650ef..064d9f4 100644 --- a/pkgs/p2p_core/src/primitives/mn_list.rs +++ b/pkgs/p2p_core/src/primitives/mn_list.rs @@ -57,10 +57,9 @@ pub struct SimplifiedMnListEntry { } impl SimplifiedMnListEntry { - /// Decodes an entry using the enclosing diff's version to gate - /// conditional fields. - pub(crate) fn decode_versioned(sl: &mut &[u8], diff_version: u16) -> Result { - let version = if diff_version >= 2 { wire::read_u16_le(sl)? } else { 0 }; + /// Decodes an entry from the wire format. + pub(crate) fn decode(sl: &mut &[u8]) -> Result { + let version = wire::read_u16_le(sl)?; let pro_reg_tx_hash = TxHash::from_bytes(wire::read_array(sl)?); let confirmed_hash = BlockHash::from_bytes(wire::read_array(sl)?); let service = wire::read_cservice(sl)?; @@ -68,7 +67,8 @@ impl SimplifiedMnListEntry { let voting_key_id = KeyId(wire::read_array(sl)?); let is_valid = wire::read_bool(sl)?; - let mn_type = if diff_version >= 2 { + // nType is gated by the entry's version + let mn_type = if version >= 2 { MnType::from_u16(wire::read_u16_le(sl)?) } else { MnType::Regular @@ -96,11 +96,9 @@ impl SimplifiedMnListEntry { }) } - /// Encodes this entry for the given diff version. - pub(crate) fn encode_versioned(&self, diff_version: u16, buf: &mut Vec) { - if diff_version >= 2 { - buf.extend_from_slice(&self.version.to_le_bytes()); - } + /// Encodes this entry to the wire format. + pub(crate) fn encode(&self, buf: &mut Vec) { + buf.extend_from_slice(&self.version.to_le_bytes()); buf.extend_from_slice(&self.pro_reg_tx_hash.to_bytes()); buf.extend_from_slice(&self.confirmed_hash.to_bytes()); buf.extend_from_slice(&self.service.addr); @@ -108,15 +106,12 @@ impl SimplifiedMnListEntry { buf.extend_from_slice(&self.operator_key.0); buf.extend_from_slice(&self.voting_key_id.0); buf.push(u8::from(self.is_valid)); - if diff_version >= 2 { + // nType and platform fields are gated by the entry's version + if self.version >= 2 { buf.extend_from_slice(&self.mn_type.to_u16().to_le_bytes()); - } - if self.mn_type == MnType::Evo { - if let Some(port) = self.platform_http_port { - buf.extend_from_slice(&port.to_le_bytes()); - } - if let Some(ref nid) = self.platform_node_id { - buf.extend_from_slice(&nid.0); + if self.mn_type == MnType::Evo { + buf.extend_from_slice(&self.platform_http_port.unwrap_or(0).to_le_bytes()); + buf.extend_from_slice(self.platform_node_id.as_ref().map_or(&[0u8; 20], |n| &n.0)); } } } @@ -213,7 +208,7 @@ impl MnListDiffPayload { let mn_count = wire::read_compact_size(sl, MAX_MN_LIST)?; let mut mn_list = Vec::with_capacity(mn_count); for _ in 0..mn_count { - mn_list.push(SimplifiedMnListEntry::decode_versioned(sl, version)?); + mn_list.push(SimplifiedMnListEntry::decode(sl)?); } let dq_count = wire::read_compact_size(sl, MAX_QUORUMS)?; @@ -227,8 +222,8 @@ impl MnListDiffPayload { let nq_count = wire::read_compact_size(sl, MAX_QUORUMS)?; let mut new_quorums = Vec::with_capacity(nq_count); for _ in 0..nq_count { - let commitment = encoding::decode_from_slice_unbounded::(sl) - .map_err(|e| WireDecodeError(alloc::format!("commitment decode: {e}")))?; + let commitment = + Commitment::decode_inner(sl).map_err(|e| WireDecodeError(alloc::format!("commitment decode: {e}")))?; new_quorums.push(commitment); } @@ -286,7 +281,7 @@ impl MnListDiffPayload { encode_compact_size(self.mn_list.len(), &mut buf); for entry in &self.mn_list { - entry.encode_versioned(self.version, &mut buf); + entry.encode(&mut buf); } encode_compact_size(self.deleted_quorums.len(), &mut buf); diff --git a/pkgs/p2p_core/tests/mnlistdiff.rs b/pkgs/p2p_core/tests/mnlistdiff.rs new file mode 100644 index 0000000..bbe0bc0 --- /dev/null +++ b/pkgs/p2p_core/tests/mnlistdiff.rs @@ -0,0 +1,59 @@ +// +// Copyright (c) 2026-present, The Dash Core developers +// SPDX-License-Identifier: MIT +// See the accompanying file LICENSE or https://opensource.org/license/MIT +// + +//! KAT tests for MnListDiffPayload. + +#![expect(clippy::unwrap_used, reason = "test code")] + +use dash_p2p_core::primitives::mn_list::MnListDiffPayload; + +use std::collections::BTreeMap; + +use bitcoin_consensus_encoding::{decode_from_slice, encode_to_vec}; +use hex_conservative::FromHex; +use rstest::rstest; +use serde::Deserialize; + +/// A single entry from the mnlistdiff corpus. +#[derive(Debug, Deserialize)] +struct CorpusEntry { + raw: String, + details: MnListDiffPayload, +} + +/// Loads the mnlistdiff corpus file. +fn load_corpus() -> BTreeMap { + let path = format!("{}/corpus/mnlistdiff.json5", env!("CARGO_MANIFEST_DIR")); + let text = std::fs::read_to_string(&path).unwrap(); + let outer: BTreeMap> = json5::from_str(&text).unwrap(); + outer.into_values().next().unwrap() +} + +#[rstest] +fn decode_fields() { + let corpus = load_corpus(); + for (block_hash, entry) in &corpus { + let bytes = Vec::::from_hex(&entry.raw).unwrap(); + let decoded: MnListDiffPayload = decode_from_slice(&bytes).unwrap(); + + assert_eq!(decoded.block_hash.to_string(), *block_hash, "block_hash key mismatch"); + assert_eq!( + decoded, entry.details, + "decoded payload != corpus details for {block_hash}" + ); + } +} + +#[rstest] +fn round_trip() { + let corpus = load_corpus(); + for (block_hash, entry) in &corpus { + let bytes = Vec::::from_hex(&entry.raw).unwrap(); + let decoded: MnListDiffPayload = decode_from_slice(&bytes).unwrap(); + let encoded = encode_to_vec(&decoded); + assert_eq!(encoded, bytes, "round-trip mismatch for {block_hash}"); + } +} diff --git a/pkgs/primitives/src/payload/assetunlock.rs b/pkgs/primitives/src/payload/assetunlock.rs index 3e5caab..241bffc 100644 --- a/pkgs/primitives/src/payload/assetunlock.rs +++ b/pkgs/primitives/src/payload/assetunlock.rs @@ -11,11 +11,10 @@ use crate::validation::DeploymentContext; use crate::wire; use crate::QuorumHash; -use dash_types::BlsSignatureBytes; - use core::fmt; use bitcoin_consensus_encoding as encoding; +use dash_types::BlsSignatureBytes; /// AssetUnlock: Platform-to-L1 (type 9). #[derive(Debug, Clone, PartialEq, Eq, Hash)] diff --git a/pkgs/primitives/src/payload/cbtx.rs b/pkgs/primitives/src/payload/cbtx.rs index b3b5a0d..e9257cc 100644 --- a/pkgs/primitives/src/payload/cbtx.rs +++ b/pkgs/primitives/src/payload/cbtx.rs @@ -11,13 +11,11 @@ use crate::validation::DeploymentContext; use crate::wire; use crate::MerkleRoot; -use dash_types::BlsSignatureBytes; - -use bitcoin_units::BlockHeight; - use core::fmt; use bitcoin_consensus_encoding as encoding; +use bitcoin_units::BlockHeight; +use dash_types::BlsSignatureBytes; /// CoinbaseCommitment -- coinbase commitment payload. /// diff --git a/pkgs/primitives/src/payload/mnhftx.rs b/pkgs/primitives/src/payload/mnhftx.rs index 1e3bdfc..9c80471 100644 --- a/pkgs/primitives/src/payload/mnhftx.rs +++ b/pkgs/primitives/src/payload/mnhftx.rs @@ -11,11 +11,10 @@ use crate::validation::{DeploymentContext, VERSIONBITS_NUM_BITS}; use crate::wire; use crate::QuorumHash; -use dash_types::BlsSignatureBytes; - use core::fmt; use bitcoin_consensus_encoding as encoding; +use dash_types::BlsSignatureBytes; /// MnHardFork -- hard-fork signal (type 7). #[derive(Debug, Clone, PartialEq, Eq, Hash)] diff --git a/pkgs/primitives/src/payload/proregtx.rs b/pkgs/primitives/src/payload/proregtx.rs index 29875f9..72a9e09 100644 --- a/pkgs/primitives/src/payload/proregtx.rs +++ b/pkgs/primitives/src/payload/proregtx.rs @@ -197,7 +197,7 @@ impl ProRegTx { } if let Some(hash) = dash_script::p2pkh_hash160(payout) { - if hash == self.key_id_owner.as_byte_array() || hash == self.key_id_voting.as_byte_array() { + if hash == self.key_id_owner.as_bytes() || hash == self.key_id_voting.as_bytes() { return Err(ProTxInvalid::PayoutKeyReuse); } } diff --git a/pkgs/primitives/src/payload/proupregtx.rs b/pkgs/primitives/src/payload/proupregtx.rs index 147d29b..dc2007d 100644 --- a/pkgs/primitives/src/payload/proupregtx.rs +++ b/pkgs/primitives/src/payload/proupregtx.rs @@ -6,8 +6,6 @@ //! ProUpRegTx registrar-update payload (type 3). -use dash_script::KeyId; - use crate::error::DecodeError; use crate::script::Script; use crate::validation::{ @@ -16,12 +14,12 @@ use crate::validation::{ use crate::wire; use crate::{InputsHash, TxHash}; +use bitcoin_consensus_encoding as encoding; +use dash_script::KeyId; use dash_types::BlsPublicKeyBytes; use core::fmt; -use bitcoin_consensus_encoding as encoding; - /// Maximum owner ECDSA signature size. const MAX_VCH_SIG_SIZE: usize = 256; diff --git a/pkgs/primitives/src/payload/prouprevtx.rs b/pkgs/primitives/src/payload/prouprevtx.rs index c1bf501..a2184fd 100644 --- a/pkgs/primitives/src/payload/prouprevtx.rs +++ b/pkgs/primitives/src/payload/prouprevtx.rs @@ -12,11 +12,10 @@ use crate::validation::{check_protx_version, max_protx_version_no_ext, Deploymen use crate::wire; use crate::{InputsHash, TxHash}; -use dash_types::BlsSignatureBytes; - use core::fmt; use bitcoin_consensus_encoding as encoding; +use dash_types::BlsSignatureBytes; /// ProUpRevTx -- revoke a masternode (type 4). /// diff --git a/pkgs/primitives/src/payload/proupservtx.rs b/pkgs/primitives/src/payload/proupservtx.rs index 8137a7a..ed22bb5 100644 --- a/pkgs/primitives/src/payload/proupservtx.rs +++ b/pkgs/primitives/src/payload/proupservtx.rs @@ -17,11 +17,10 @@ use crate::validation::{ use crate::wire; use crate::{InputsHash, TxHash}; -use dash_types::{BlsSignatureBytes, PlatformNodeId}; - use core::fmt; use bitcoin_consensus_encoding as encoding; +use dash_types::{BlsSignatureBytes, PlatformNodeId}; /// ProUpServTx -- update MN service addr (type 2). /// diff --git a/pkgs/primitives/src/payload/quorum.rs b/pkgs/primitives/src/payload/quorum.rs index 61e91b4..64db4ef 100644 --- a/pkgs/primitives/src/payload/quorum.rs +++ b/pkgs/primitives/src/payload/quorum.rs @@ -12,11 +12,10 @@ use crate::support::{DynBitset, LlmqType}; use crate::wire; use crate::{QuorumHash, QuorumVvecHash}; -use dash_types::{BlsPublicKeyBytes, BlsSignatureBytes}; - use core::fmt; use bitcoin_consensus_encoding as encoding; +use dash_types::{BlsPublicKeyBytes, BlsSignatureBytes}; /// DKG session output for one LLMQ. /// diff --git a/pkgs/primitives/src/script.rs b/pkgs/primitives/src/script.rs index 3600548..1b53f29 100644 --- a/pkgs/primitives/src/script.rs +++ b/pkgs/primitives/src/script.rs @@ -12,8 +12,8 @@ use core::fmt; use bitcoin_consensus_encoding as encoding; -/// Maximum script size in bytes (consensus limit). -const MAX_SCRIPT_SIZE: usize = 10_000; +/// Maximum serialized object size (32 MiB). +const MAX_SIZE: usize = 0x0200_0000; /// A variable-length script, CompactSize-prefixed on the wire. #[derive(Clone, PartialEq, Eq, Hash, Default)] @@ -89,7 +89,7 @@ pub struct ScriptDecoder(encoding::ByteVecDecoder); impl ScriptDecoder { /// Constructs a new decoder with the default script size limit. pub const fn new() -> Self { - Self(encoding::ByteVecDecoder::new_with_limit(MAX_SCRIPT_SIZE)) + Self(encoding::ByteVecDecoder::new_with_limit(MAX_SIZE)) } } diff --git a/pkgs/primitives/src/serialize.rs b/pkgs/primitives/src/serialize.rs index 574e15c..c7ccf1a 100644 --- a/pkgs/primitives/src/serialize.rs +++ b/pkgs/primitives/src/serialize.rs @@ -9,9 +9,8 @@ use crate::support::LlmqType; use crate::tx_types::{MnType, TxType}; -use dash_types::{AsUint, TryFromUint}; - pub use dash_types::serialize::uint; +use dash_types::{AsUint, TryFromUint}; /// Serializes [`Amount`](bitcoin_units::Amount) as a `u64` (satoshis). pub mod amount { diff --git a/pkgs/primitives/src/support.rs b/pkgs/primitives/src/support.rs index 9af23be..c0f5936 100644 --- a/pkgs/primitives/src/support.rs +++ b/pkgs/primitives/src/support.rs @@ -245,6 +245,17 @@ impl<'de> serde::Deserialize<'de> for DynBitset { required, ))); } + let remainder = num_bits % 8; + if remainder != 0 { + let mask = !((1u8 << remainder) - 1); + if raw.data[required - 1] & mask != 0 { + return Err(serde::de::Error::custom(alloc::format!( + "DynBitset padding bits set in last byte: {:#04x} for {1} bits", + raw.data[required - 1], + raw.num_bits, + ))); + } + } Ok(Self { num_bits: raw.num_bits, data: raw.data, diff --git a/pkgs/script/src/key_id.rs b/pkgs/script/src/key_id.rs index be66db2..29c053c 100644 --- a/pkgs/script/src/key_id.rs +++ b/pkgs/script/src/key_id.rs @@ -18,12 +18,12 @@ pub struct KeyId(#[cfg_attr(feature = "serde", serde(with = "dash_types::seriali impl KeyId { /// Returns the inner byte array. - pub const fn to_byte_array(self) -> [u8; 20] { + pub const fn to_bytes(self) -> [u8; 20] { self.0 } - /// Returns a reference to the inner byte array. - pub const fn as_byte_array(&self) -> &[u8; 20] { + /// Borrows the inner byte array. + pub const fn as_bytes(&self) -> &[u8; 20] { &self.0 } diff --git a/pkgs/script/src/lib.rs b/pkgs/script/src/lib.rs index 00b0481..c18e631 100644 --- a/pkgs/script/src/lib.rs +++ b/pkgs/script/src/lib.rs @@ -156,7 +156,7 @@ pub fn encode_p2sh(hash160: &[u8], prefix: u8) -> Option { /// Encode a `KeyId` as a Base58Check P2PKH address. pub fn encode_key_id(key_id: &KeyId, prefix: u8) -> String { - let bytes = key_id.to_byte_array(); + let bytes = key_id.to_bytes(); let mut payload = Vec::with_capacity(HASH160_LEN + 1); payload.push(prefix); payload.extend_from_slice(&bytes); diff --git a/pkgs/types/src/hex.rs b/pkgs/types/src/hex.rs index c3d10d6..2414ca4 100644 --- a/pkgs/types/src/hex.rs +++ b/pkgs/types/src/hex.rs @@ -29,12 +29,12 @@ macro_rules! make_bytes { impl $name { /// Returns the inner byte array. - pub const fn to_byte_array(self) -> [u8; $n] { + pub const fn to_bytes(self) -> [u8; $n] { self.0 } - /// Returns a reference to the inner byte array. - pub const fn as_byte_array(&self) -> &[u8; $n] { + /// Borrows the inner byte array. + pub const fn as_bytes(&self) -> &[u8; $n] { &self.0 } diff --git a/pkgs/types/src/uint.rs b/pkgs/types/src/uint.rs index 5564357..2359202 100644 --- a/pkgs/types/src/uint.rs +++ b/pkgs/types/src/uint.rs @@ -43,7 +43,7 @@ macro_rules! make_uint { } /// Returns the inner integer value. - pub const fn to_inner(self) -> $uint { + pub const fn value(self) -> $uint { self.0 } }