diff --git a/examples/src/fixture_generator/mod.rs b/examples/src/fixture_generator/mod.rs index 5ff7211a..06ff55f5 100644 --- a/examples/src/fixture_generator/mod.rs +++ b/examples/src/fixture_generator/mod.rs @@ -20,7 +20,7 @@ mod examples; mod generator; mod parser; -mod reader; +pub mod reader; pub mod writer; pub(crate) use parser::Args; diff --git a/examples/src/fixture_generator/reader/mod.rs b/examples/src/fixture_generator/reader/mod.rs index 0d995588..938e44f3 100644 --- a/examples/src/fixture_generator/reader/mod.rs +++ b/examples/src/fixture_generator/reader/mod.rs @@ -25,6 +25,10 @@ pub trait Reader { /// Reads a delta object for a given epoch. #[allow(dead_code)] fn read_delta(&mut self, epoch: u32) -> Result; + + /// Reads a String (freeform). + #[allow(dead_code)] + fn read_string(&mut self) -> Result; } #[derive(Debug, PartialEq, Eq)] diff --git a/examples/src/fixture_generator/reader/yaml.rs b/examples/src/fixture_generator/reader/yaml.rs index dfd5d160..48f4fada 100644 --- a/examples/src/fixture_generator/reader/yaml.rs +++ b/examples/src/fixture_generator/reader/yaml.rs @@ -132,4 +132,8 @@ impl Reader for YamlFileReader { fn read_delta(&mut self, epoch: u32) -> Result { self.read_impl(|delta: &Delta| delta.epoch == epoch) } + + fn read_string(&mut self) -> Result { + self.read_impl(|_: &String| true) + } } diff --git a/examples/src/test_vectors/experimental.yaml b/examples/src/test_vectors/experimental.yaml index 378d6193..9931cf8a 100644 --- a/examples/src/test_vectors/experimental.yaml +++ b/examples/src/test_vectors/experimental.yaml @@ -2,13 +2,13 @@ # the test vectors tool with the following command: # # cargo run -p examples -- test-vectors \ -# --out examples/src/test_vectors/ \ +# --out examples/src/test_vectors \ # Metadata --- args: - out: examples/src/test_vectors/ -version: 0.12.0-pre.6 + out: examples/src/test_vectors +version: 0.12.0-pre.7 configuration: experimental domain_label: ExampleLabel @@ -34,8 +34,8 @@ f6ec49c8085f4d4be69db8e248bf11ce288026f5b8c5f6599defe58303d0702d # History Proof (HistoryParams::MostRecent(1)) --- -0a8d080830120531362c343818032250d5fbf6ef8a38a8714fdd132a15cd2aecfbc6e4963396554a7c57f750cb41e4316f5af0791b191bd0df2db173596e1565fafd3e146c97d718aaec1617e42048c1ec7ef6b02e0c858bc5c1b3ecd3f65e022aab030a250a20fe1d2d5acfc3a8f3c683d1feddc0b8d7244430e2de20de99f71dc084579fec081080021220bd83cfbd72e462ae897cbcb738848af92da585f16eaf635ce6d7abe2f0f24ca71a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a018010021220f23d30cb8e3fb4ed7ffbf6b12831690f3f87cdf2b51f18034e4ef6c5eeeb87e218011a340a050a01c0100212290a050a01c01003122064f89d79182c92e9abba7759a5a0c8b77d8a7d2f84ba87197346cb3d74291e1b18011a340a050a01e0100312290a050a01e010041220917dc004ccc90f61586b9f1fffea1823431d22ea049ba35ec12b5f52ca6df72c18011a340a050a01f0100412290a050a01f01005122025e6c5ace7e0f60954b2cf05a616af75bf1fb4086097d71849eed98df691ba1d18011a540a050a01f8100512490a250a20f91861b5faaf124bd305e907b6174a8225dca19e0bf4028b9d0a285c622ec45c108002122005e3ae0bc206546b25eedf669fd6c9bf2c4baaeb2c4b28b8a003d80a9fc1c0a718013250f09ab81edaed3134b6b883063897e67cbbca921a8ec6ae2ba4e89841751145f0d1c7df27ad68555d23e61b6f0f815558e1b945758db36c04c7eff117c4c4371163c4470d793f5b1c5b501872146d3e093a8b030a250a20950ef0037c42b4d384851db37a0b852afe331a7c739dbda1071590a33363bf311080021220ccce9ad412cd47a6444eba697846a61a4c53ba5d67bf1050bac588775182a5de1a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a01c01002122042bdfc3da115eff70b85cc6e6967231873952611747c595d5dabcadac4c9af4018001a340a050a0180100212290a050a01a010031220d5be80aa0216e521bf071a27a7ddb580edb7bb993f2fc629c894480f226f015c18001a340a050a0180100312290a050a018010041220e498cb0d7f1d21d0a4926dcae45048e456c17be4d40137157201a49fc6ff0d6b18011a340a050a0190100412290a050a019810051220f18d6a5d5878439ae2a9a69511eb24d6a9248db6de7e6d4609340adeaf43f0cb18001a340a050a0190100512290a050a019010061220baa9a74d3e3c86c7a4e5b569fc04d1832417fe4b847987b91b3b05efc58328911801422087f6f8afdbf8d5992a082c5769dafcf1cfa646356f60f95b2707226a105f366b12503b2c1bf6a23404d02f83393b3e7464a4f71e47c9582035c145f9b3957154c3de88b109d2beaf2489615d3bd6461c7e59d1147982db70e6573b2c2251c40fa2910cb1d5dcb5c8621ed422087e7437b7051a81040a250a2088b20b6c91228dfa2b6690bbbb0000defcf0c55fb7f771c66c8f5fc7ddfbd5c91080021220b9569226ade5a20a56ae901b1294884b5f63d1b6b2d8cf11aa7ee7a0c31d87ff1a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a01c01002122042bdfc3da115eff70b85cc6e6967231873952611747c595d5dabcadac4c9af4018001a340a050a0180100212290a050a01a010031220d5be80aa0216e521bf071a27a7ddb580edb7bb993f2fc629c894480f226f015c18001a340a050a0180100312290a050a019010041220cbc76a3e4880da0bc22877aef5dc106c2c3b78bcea757756dd785bc752b6e8b118001a340a050a0180100412290a050a0180100512209fcd63f18092d30777cd0eec97e514c3eb909cba62c28ebff75d4389c811a38718011a540a050a0188100512490a250a208e5f0d8304af6561fc526f85a82eec2180e3f99a3ebe7ced997653755abd22201080021220c041ec3e24ac4b81470bcd37c9ced4a3697e890f5dc35e37bab74460b371380e18001a540a050a0188100812490a250a2088582083f0f96c9315a43af85827b35b9e82bb9e49326345fab42af4b01b38a310800212207538b4876be6bbe0fccd26fd644c59a273857ca4056709820f8728015f3f4e5a18012250f3153d14130b5d46dc8a41a31c2a6e370bee2ab23b1c7f10f00148dea11b8efc5b02c5789666c8889d7002cebd2e16f153ceb8fa7dddd93e1bcb6a36d09b518c9cc32dccf84ea96c002619eb9ed827072250669a274087104c89486ebe93847f1d6fe1459cb249bab189ec6c7543d6e05f08d302fe35f864fc13aecbea9bf38be68a202ee37a45e144431e2203bc65be1d66500ca9231fc19d33b3da4cb9c726f8012250afc3efdb5779b36fbafa5c2b25cef1805da2a5012d61c448bb0d3fccf8bb54f0884aaeb97a12ed6aca697fd2b0199e249b8596561c947018cd74f49f0696049e1508818e516fe5bf2508cb3f9936a507225093da19a1a9d756db632f8a9e97f9cc34c3a3b943a76807030785187828b68b9bf0347de692093eacabc7c3737bc476cfdefc2f32bff8fa9a559e0799a5876cc2f050c954308e8eb0e69eaf3f9d13e1062ad8030a250a200e0d6de820d96326e39a80b29c55021b1a20c5176fcb74a1e2c5f6622453e83710800212050a010810051a290a050a0108100612202345fae2736b0fd1df1fb8f68be8baf376721faa22a11649e016a3f613d4f2051a490a250a200c36431bd9e91ce3a322782014e17dcc47f89672f91668400fbbff1d45c3938f10800212209d8a115a07c212692984c8d41f74584876a006ea85b240596d59ed4da956176a22b1020a050a010810051220ce8a13ef03348bc138cabfa46fb7ac7d25b80fe685332b0dda2261d7cacbe4201a330a040a00100012290a050a018010011220f920c02664de2c5ccd22a2c1e1562e454f19a9cf24614f8f4ee443323b5f92d718001a330a040a00100112290a050a014010021220db62ce8d154425eb46b04465d861ef6d7703d02a2f1132b991c5a6d42f2c867a18001a330a040a00100212290a050a0120100312204dce7db904a97d0d697439dda1b9c78f604a263ed3c61253ab47e4138b34a64218001a330a040a00100312290a050a01101004122036ed9f48138919fdadd34d85759195441b1f9161f55b090e93f5ab365ff43ffe18001a320a040a00100412280a040a00100512205fde9ff56521aeac96528e44d9b58aaa7fa75e0523af7638aa9d7f7248694c1c18012adc030a250a208b3434b89ba95564fc17d43a3e2716e942c78d317fb2372befaed151c6f598d010800212050a018810051a290a050a018810081220833d18a839c6fef4df4531b7188f223817ce8d50ee0d9ce33ee150f5e5cfce051a490a250a208e5f0d8304af6561fc526f85a82eec2180e3f99a3ebe7ced997653755abd22201080021220c041ec3e24ac4b81470bcd37c9ced4a3697e890f5dc35e37bab74460b371380e22b5020a050a01881005122032e77938a114795473673912393163f0be648c55622a3836528ee6ff5674a30e1a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a01c01002122042bdfc3da115eff70b85cc6e6967231873952611747c595d5dabcadac4c9af4018001a340a050a0180100212290a050a01a010031220d5be80aa0216e521bf071a27a7ddb580edb7bb993f2fc629c894480f226f015c18001a340a050a0180100312290a050a019010041220cbc76a3e4880da0bc22877aef5dc106c2c3b78bcea757756dd785bc752b6e8b118001a340a050a0180100412290a050a0180100512209fcd63f18092d30777cd0eec97e514c3eb909cba62c28ebff75d4389c811a38718012adc030a250a2096eb4bf7cc4c5462045ff681ae6d0677b983c9d9ec74f44aea37223e43dd038c10800212050a019010051a290a050a019010061220baa9a74d3e3c86c7a4e5b569fc04d1832417fe4b847987b91b3b05efc58328911a490a250a20950ef0037c42b4d384851db37a0b852afe331a7c739dbda1071590a33363bf311080021220ccce9ad412cd47a6444eba697846a61a4c53ba5d67bf1050bac588775182a5de22b5020a050a0190100512202ed1a5c24eca4d7d74db0be732c56c0c6349772ed38bbb7b249f1936342c00441a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a01c01002122042bdfc3da115eff70b85cc6e6967231873952611747c595d5dabcadac4c9af4018001a340a050a0180100212290a050a01a010031220d5be80aa0216e521bf071a27a7ddb580edb7bb993f2fc629c894480f226f015c18001a340a050a0180100312290a050a018010041220e498cb0d7f1d21d0a4926dcae45048e456c17be4d40137157201a49fc6ff0d6b18011a340a050a0190100412290a050a019810051220f18d6a5d5878439ae2a9a69511eb24d6a9248db6de7e6d4609340adeaf43f0cb18002ae7040a250a2076e92bdf1cb2227332e172f3e924d0db282f30cc86e150a1ff206e13c7ce08e110800212050a017610071a490a250a2076a8f4dab3032e24ecacba4cc6f0d8941576cb4de8602bb2dcd92d37a661b3f810800212207deb2f8a58e61e1c0d68b8bcda67c48061d8f7c510147ecec80371352c87cc6c1a490a250a2077b8686275f26fa35773da15f5a8782f39a2906d1d406400861a827ad270b7cc108002122006de0691d0fe557f4159d131db44203d36d553810c7c4fcb39c4d0a7412a470822a0030a050a017610071220e435d82dff8b5b68a0c5794dd2595959d494bf2cf43b45a659f2b20eca5e836e1a330a040a00100012290a050a018010011220f920c02664de2c5ccd22a2c1e1562e454f19a9cf24614f8f4ee443323b5f92d718001a320a040a00100112280a040a0010021220ce826124bb1662619e50f679b2a2ccbe24f6a54600eff19ef0714f93aa83108c18011a340a050a0140100212290a050a0140100312208dab6fd2885e8ad3cd21ea10333032dc11e5d8c74839df32a2371c255e9d545418011a340a050a0160100312290a050a0160100412207ec46fed1200b15a85e4c3736369c18249060a8ee552665cc8b6638125cff75118011a340a050a0170100412290a050a0178100512209333b7e40bb98f126fc1d5f5d700cfbcf712c0dec1f1c05428d76a479c2da9d118001a340a050a0170100512290a050a017210071220c49a8e2f52a22d12b3228eee464f3d3a1ada50f2e4cacea3b7dfc6c9623f176418011a340a050a0174100612290a050a01741007122049dc418d51769054d545fd46a777eeeb2dd436e02308f55f1e285a257bea16df1801 +0a8d080830120531362c343818032250d5fbf6ef8a38a8714fdd132a15cd2aecfbc6e4963396554a7c57f750cb41e4316f5af0791b191bd0df2db173596e1565fafd3e146c97d718aaec1617e42048c1ec7ef6b02e0c858bc5c1b3ecd3f65e022aab030a250a20fe1d2d5acfc3a8f3c683d1feddc0b8d7244430e2de20de99f71dc084579fec081080021220bd83cfbd72e462ae897cbcb738848af92da585f16eaf635ce6d7abe2f0f24ca71a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a018010021220f23d30cb8e3fb4ed7ffbf6b12831690f3f87cdf2b51f18034e4ef6c5eeeb87e218011a340a050a01c0100212290a050a01c01003122064f89d79182c92e9abba7759a5a0c8b77d8a7d2f84ba87197346cb3d74291e1b18011a340a050a01e0100312290a050a01e010041220917dc004ccc90f61586b9f1fffea1823431d22ea049ba35ec12b5f52ca6df72c18011a340a050a01f0100412290a050a01f01005122025e6c5ace7e0f60954b2cf05a616af75bf1fb4086097d71849eed98df691ba1d18011a540a050a01f8100512490a250a20f91861b5faaf124bd305e907b6174a8225dca19e0bf4028b9d0a285c622ec45c108002122005e3ae0bc206546b25eedf669fd6c9bf2c4baaeb2c4b28b8a003d80a9fc1c0a718013250f09ab81edaed3134b6b883063897e67cbbca921a8ec6ae2ba4e89841751145f0d1c7df27ad68555d23e61b6f0f815558e1b945758db36c04c7eff117c4c4371163c4470d793f5b1c5b501872146d3e093a8b030a250a20950ef0037c42b4d384851db37a0b852afe331a7c739dbda1071590a33363bf311080021220ccce9ad412cd47a6444eba697846a61a4c53ba5d67bf1050bac588775182a5de1a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a01c01002122042bdfc3da115eff70b85cc6e6967231873952611747c595d5dabcadac4c9af4018001a340a050a0180100212290a050a01a010031220d5be80aa0216e521bf071a27a7ddb580edb7bb993f2fc629c894480f226f015c18001a340a050a0180100312290a050a018010041220e498cb0d7f1d21d0a4926dcae45048e456c17be4d40137157201a49fc6ff0d6b18011a340a050a0190100412290a050a019810051220f18d6a5d5878439ae2a9a69511eb24d6a9248db6de7e6d4609340adeaf43f0cb18001a340a050a0190100512290a050a019010061220baa9a74d3e3c86c7a4e5b569fc04d1832417fe4b847987b91b3b05efc58328911801422087f6f8afdbf8d5992a082c5769dafcf1cfa646356f60f95b2707226a105f366b12503b2c1bf6a23404d02f83393b3e7464a4f71e47c9582035c145f9b3957154c3de88b109d2beaf2489615d3bd6461c7e59d1147982db70e6573b2c2251c40fa2910cb1d5dcb5c8621ed422087e7437b7051a81040a250a2088b20b6c91228dfa2b6690bbbb0000defcf0c55fb7f771c66c8f5fc7ddfbd5c91080021220b9569226ade5a20a56ae901b1294884b5f63d1b6b2d8cf11aa7ee7a0c31d87ff1a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a01c01002122042bdfc3da115eff70b85cc6e6967231873952611747c595d5dabcadac4c9af4018001a340a050a0180100212290a050a01a010031220d5be80aa0216e521bf071a27a7ddb580edb7bb993f2fc629c894480f226f015c18001a340a050a0180100312290a050a019010041220cbc76a3e4880da0bc22877aef5dc106c2c3b78bcea757756dd785bc752b6e8b118001a340a050a0180100412290a050a0180100512209fcd63f18092d30777cd0eec97e514c3eb909cba62c28ebff75d4389c811a38718011a540a050a0188100512490a250a208e5f0d8304af6561fc526f85a82eec2180e3f99a3ebe7ced997653755abd22201080021220c041ec3e24ac4b81470bcd37c9ced4a3697e890f5dc35e37bab74460b371380e18001a540a050a0188100812490a250a2088582083f0f96c9315a43af85827b35b9e82bb9e49326345fab42af4b01b38a310800212207538b4876be6bbe0fccd26fd644c59a273857ca4056709820f8728015f3f4e5a18012250f3153d14130b5d46dc8a41a31c2a6e370bee2ab23b1c7f10f00148dea11b8efc5b02c5789666c8889d7002cebd2e16f153ceb8fa7dddd93e1bcb6a36d09b518c9cc32dccf84ea96c002619eb9ed827072250afc3efdb5779b36fbafa5c2b25cef1805da2a5012d61c448bb0d3fccf8bb54f0884aaeb97a12ed6aca697fd2b0199e249b8596561c947018cd74f49f0696049e1508818e516fe5bf2508cb3f9936a5072ad8030a250a200e0d6de820d96326e39a80b29c55021b1a20c5176fcb74a1e2c5f6622453e83710800212050a010810051a290a050a0108100612202345fae2736b0fd1df1fb8f68be8baf376721faa22a11649e016a3f613d4f2051a490a250a200c36431bd9e91ce3a322782014e17dcc47f89672f91668400fbbff1d45c3938f10800212209d8a115a07c212692984c8d41f74584876a006ea85b240596d59ed4da956176a22b1020a050a010810051220ce8a13ef03348bc138cabfa46fb7ac7d25b80fe685332b0dda2261d7cacbe4201a330a040a00100012290a050a018010011220f920c02664de2c5ccd22a2c1e1562e454f19a9cf24614f8f4ee443323b5f92d718001a330a040a00100112290a050a014010021220db62ce8d154425eb46b04465d861ef6d7703d02a2f1132b991c5a6d42f2c867a18001a330a040a00100212290a050a0120100312204dce7db904a97d0d697439dda1b9c78f604a263ed3c61253ab47e4138b34a64218001a330a040a00100312290a050a01101004122036ed9f48138919fdadd34d85759195441b1f9161f55b090e93f5ab365ff43ffe18001a320a040a00100412280a040a00100512205fde9ff56521aeac96528e44d9b58aaa7fa75e0523af7638aa9d7f7248694c1c18012adc030a250a2096eb4bf7cc4c5462045ff681ae6d0677b983c9d9ec74f44aea37223e43dd038c10800212050a019010051a290a050a019010061220baa9a74d3e3c86c7a4e5b569fc04d1832417fe4b847987b91b3b05efc58328911a490a250a20950ef0037c42b4d384851db37a0b852afe331a7c739dbda1071590a33363bf311080021220ccce9ad412cd47a6444eba697846a61a4c53ba5d67bf1050bac588775182a5de22b5020a050a0190100512202ed1a5c24eca4d7d74db0be732c56c0c6349772ed38bbb7b249f1936342c00441a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a01c01002122042bdfc3da115eff70b85cc6e6967231873952611747c595d5dabcadac4c9af4018001a340a050a0180100212290a050a01a010031220d5be80aa0216e521bf071a27a7ddb580edb7bb993f2fc629c894480f226f015c18001a340a050a0180100312290a050a018010041220e498cb0d7f1d21d0a4926dcae45048e456c17be4d40137157201a49fc6ff0d6b18011a340a050a0190100412290a050a019810051220f18d6a5d5878439ae2a9a69511eb24d6a9248db6de7e6d4609340adeaf43f0cb1800 # History Proof (HistoryParams::Complete with 3 versions) --- -0a8d080830120531362c343818032250d5fbf6ef8a38a8714fdd132a15cd2aecfbc6e4963396554a7c57f750cb41e4316f5af0791b191bd0df2db173596e1565fafd3e146c97d718aaec1617e42048c1ec7ef6b02e0c858bc5c1b3ecd3f65e022aab030a250a20fe1d2d5acfc3a8f3c683d1feddc0b8d7244430e2de20de99f71dc084579fec081080021220bd83cfbd72e462ae897cbcb738848af92da585f16eaf635ce6d7abe2f0f24ca71a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a018010021220f23d30cb8e3fb4ed7ffbf6b12831690f3f87cdf2b51f18034e4ef6c5eeeb87e218011a340a050a01c0100212290a050a01c01003122064f89d79182c92e9abba7759a5a0c8b77d8a7d2f84ba87197346cb3d74291e1b18011a340a050a01e0100312290a050a01e010041220917dc004ccc90f61586b9f1fffea1823431d22ea049ba35ec12b5f52ca6df72c18011a340a050a01f0100412290a050a01f01005122025e6c5ace7e0f60954b2cf05a616af75bf1fb4086097d71849eed98df691ba1d18011a540a050a01f8100512490a250a20f91861b5faaf124bd305e907b6174a8225dca19e0bf4028b9d0a285c622ec45c108002122005e3ae0bc206546b25eedf669fd6c9bf2c4baaeb2c4b28b8a003d80a9fc1c0a718013250f09ab81edaed3134b6b883063897e67cbbca921a8ec6ae2ba4e89841751145f0d1c7df27ad68555d23e61b6f0f815558e1b945758db36c04c7eff117c4c4371163c4470d793f5b1c5b501872146d3e093a8b030a250a20950ef0037c42b4d384851db37a0b852afe331a7c739dbda1071590a33363bf311080021220ccce9ad412cd47a6444eba697846a61a4c53ba5d67bf1050bac588775182a5de1a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a01c01002122042bdfc3da115eff70b85cc6e6967231873952611747c595d5dabcadac4c9af4018001a340a050a0180100212290a050a01a010031220d5be80aa0216e521bf071a27a7ddb580edb7bb993f2fc629c894480f226f015c18001a340a050a0180100312290a050a018010041220e498cb0d7f1d21d0a4926dcae45048e456c17be4d40137157201a49fc6ff0d6b18011a340a050a0190100412290a050a019810051220f18d6a5d5878439ae2a9a69511eb24d6a9248db6de7e6d4609340adeaf43f0cb18001a340a050a0190100512290a050a019010061220baa9a74d3e3c86c7a4e5b569fc04d1832417fe4b847987b91b3b05efc58328911801422087f6f8afdbf8d5992a082c5769dafcf1cfa646356f60f95b2707226a105f366b0aef090820120531362c3332180222503b2c1bf6a23404d02f83393b3e7464a4f71e47c9582035c145f9b3957154c3de88b109d2beaf2489615d3bd6461c7e59d1147982db70e6573b2c2251c40fa2910cb1d5dcb5c8621ed422087e7437b7052a81040a250a2088b20b6c91228dfa2b6690bbbb0000defcf0c55fb7f771c66c8f5fc7ddfbd5c91080021220b9569226ade5a20a56ae901b1294884b5f63d1b6b2d8cf11aa7ee7a0c31d87ff1a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a01c01002122042bdfc3da115eff70b85cc6e6967231873952611747c595d5dabcadac4c9af4018001a340a050a0180100212290a050a01a010031220d5be80aa0216e521bf071a27a7ddb580edb7bb993f2fc629c894480f226f015c18001a340a050a0180100312290a050a019010041220cbc76a3e4880da0bc22877aef5dc106c2c3b78bcea757756dd785bc752b6e8b118001a340a050a0180100412290a050a0180100512209fcd63f18092d30777cd0eec97e514c3eb909cba62c28ebff75d4389c811a38718011a540a050a0188100512490a250a208e5f0d8304af6561fc526f85a82eec2180e3f99a3ebe7ced997653755abd22201080021220c041ec3e24ac4b81470bcd37c9ced4a3697e890f5dc35e37bab74460b371380e18001a540a050a0188100812490a250a2088582083f0f96c9315a43af85827b35b9e82bb9e49326345fab42af4b01b38a310800212207538b4876be6bbe0fccd26fd644c59a273857ca4056709820f8728015f3f4e5a18013250c684ea0200c7ce879661ef6ad913adc304a983b247063e9e26f8e1ed17ceccac229412da7662c33e43a787ec27970f79ad43c9363af7a4f37c7fd24dd17b40f3471e312e4965b672c8a008bb25a646023a97040a250a204df88ab9a2fc554a1f5983a219cc3f5028f8b830242991efcdda2e161af7ce981080021220436c8ba3074b218c1d31f84869d1015d37316644f0187acc328627dcd990f3f51a330a040a00100012290a050a018010011220f920c02664de2c5ccd22a2c1e1562e454f19a9cf24614f8f4ee443323b5f92d718001a320a040a00100112280a040a0010021220ce826124bb1662619e50f679b2a2ccbe24f6a54600eff19ef0714f93aa83108c18011a340a050a0140100212290a050a0160100312207b1315af9081bd2b622a7805d893bf7fca614840ff807a0f51f899cca95e111f18001a340a050a0140100312290a050a0150100412202f353417dbb07a52259710d973ffd9b743351269e980321b0a48ed3cd9ae3af018001a340a050a0140100412290a050a014010051220c838bbcecf1f28bc8e27b333c51a0c55abef7a8cc8eb6813161dcf363c9ee07618011a340a050a0148100512290a050a014810061220e5486588b84147ec35cddad8c7d96d458e9106da024ad4822ddb4a6f5708f8af18011a340a050a014c100712290a050a014c100912205c838d7502f77a498e444290032c15c405c0ba5fe3bcd1aa9a6b2f6cbf23e73218011a550a060a024dc0100a12490a250a204dc36d1d62462ef9f89b18a0e2084b4175a758e7ef401b7a1532f3c238d300311080021220237744c2ba2700f5704ffe83d6b3cfd0b9b10f1e700272301a4a73011e805ace18014220c79d1bf9f55751cd01f1e6f66a8e678a00730d47e42c771ea44fee99c76143650ab9050810120531362c3136180122501a3722600ad1b64a9020de941d7f872b9402f1160eb991657252db2e4d1a677f09c15097b23242bd8b6c14b2fda64ea95208c46d2a24d16eb7c48564a122ceaf4061ad3cc058159605bcdc0a469b110f2ab7040a250a20b13655aaf384205dd17079da6e49837e011377a7056f26156dd9b1db222783cd1080021220e80c645934dbe7c2d2ad6c53e58854050297accefe7ef3f3df980c5b107663bd1a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a01c01002122042bdfc3da115eff70b85cc6e6967231873952611747c595d5dabcadac4c9af4018001a340a050a0180100212290a050a018010031220435d927615d6e615300ecd6481dcbbae3cc2f995bbb71f47807441b2d937662318011a340a050a01a0100312290a050a01a01004122008e60d908bbf466ca8ab5df9e9e550acaf746ace2d9efe65efe9c5635a068edb18011a340a050a01b0100412290a050a01b810051220186626c960d06dd6ddd285b6c0d5133eea702e728aa8dc4ea78148f59333727e18001a340a050a01b0100512290a050a01b6100712200025f2ed7d8ac7df30935ab6b84144b686664ee81271a974e05b03b7ef578ad818001a540a050a01b0100612490a250a20b325e2beaaa30091d90327ecb2c69408a4efd4bca0c0ae24864f4085b55640b21080021220d6611d1af21dbac8b5d151f06e6dc8140eaab06709788a49fad1f6fc5c13875418001a540a050a01b0100712490a250a20b05a1100c75971b57f2f4eb381ccdf251cf32de7dcb984ffe2e148cd20abfb3a108002122023e1462acea013e577733e8b25979835ec3a4c6bffeb06e76cd35d8b2a633ce31801422062ed56f9d525787b231b5b2658a812d5490a9abe18d0bca315535b4cbff48b872250f3153d14130b5d46dc8a41a31c2a6e370bee2ab23b1c7f10f00148dea11b8efc5b02c5789666c8889d7002cebd2e16f153ceb8fa7dddd93e1bcb6a36d09b518c9cc32dccf84ea96c002619eb9ed827072250669a274087104c89486ebe93847f1d6fe1459cb249bab189ec6c7543d6e05f08d302fe35f864fc13aecbea9bf38be68a202ee37a45e144431e2203bc65be1d66500ca9231fc19d33b3da4cb9c726f8012250afc3efdb5779b36fbafa5c2b25cef1805da2a5012d61c448bb0d3fccf8bb54f0884aaeb97a12ed6aca697fd2b0199e249b8596561c947018cd74f49f0696049e1508818e516fe5bf2508cb3f9936a507225093da19a1a9d756db632f8a9e97f9cc34c3a3b943a76807030785187828b68b9bf0347de692093eacabc7c3737bc476cfdefc2f32bff8fa9a559e0799a5876cc2f050c954308e8eb0e69eaf3f9d13e1062ad8030a250a200e0d6de820d96326e39a80b29c55021b1a20c5176fcb74a1e2c5f6622453e83710800212050a010810051a290a050a0108100612202345fae2736b0fd1df1fb8f68be8baf376721faa22a11649e016a3f613d4f2051a490a250a200c36431bd9e91ce3a322782014e17dcc47f89672f91668400fbbff1d45c3938f10800212209d8a115a07c212692984c8d41f74584876a006ea85b240596d59ed4da956176a22b1020a050a010810051220ce8a13ef03348bc138cabfa46fb7ac7d25b80fe685332b0dda2261d7cacbe4201a330a040a00100012290a050a018010011220f920c02664de2c5ccd22a2c1e1562e454f19a9cf24614f8f4ee443323b5f92d718001a330a040a00100112290a050a014010021220db62ce8d154425eb46b04465d861ef6d7703d02a2f1132b991c5a6d42f2c867a18001a330a040a00100212290a050a0120100312204dce7db904a97d0d697439dda1b9c78f604a263ed3c61253ab47e4138b34a64218001a330a040a00100312290a050a01101004122036ed9f48138919fdadd34d85759195441b1f9161f55b090e93f5ab365ff43ffe18001a320a040a00100412280a040a00100512205fde9ff56521aeac96528e44d9b58aaa7fa75e0523af7638aa9d7f7248694c1c18012adc030a250a208b3434b89ba95564fc17d43a3e2716e942c78d317fb2372befaed151c6f598d010800212050a018810051a290a050a018810081220833d18a839c6fef4df4531b7188f223817ce8d50ee0d9ce33ee150f5e5cfce051a490a250a208e5f0d8304af6561fc526f85a82eec2180e3f99a3ebe7ced997653755abd22201080021220c041ec3e24ac4b81470bcd37c9ced4a3697e890f5dc35e37bab74460b371380e22b5020a050a01881005122032e77938a114795473673912393163f0be648c55622a3836528ee6ff5674a30e1a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a01c01002122042bdfc3da115eff70b85cc6e6967231873952611747c595d5dabcadac4c9af4018001a340a050a0180100212290a050a01a010031220d5be80aa0216e521bf071a27a7ddb580edb7bb993f2fc629c894480f226f015c18001a340a050a0180100312290a050a019010041220cbc76a3e4880da0bc22877aef5dc106c2c3b78bcea757756dd785bc752b6e8b118001a340a050a0180100412290a050a0180100512209fcd63f18092d30777cd0eec97e514c3eb909cba62c28ebff75d4389c811a38718012adc030a250a2096eb4bf7cc4c5462045ff681ae6d0677b983c9d9ec74f44aea37223e43dd038c10800212050a019010051a290a050a019010061220baa9a74d3e3c86c7a4e5b569fc04d1832417fe4b847987b91b3b05efc58328911a490a250a20950ef0037c42b4d384851db37a0b852afe331a7c739dbda1071590a33363bf311080021220ccce9ad412cd47a6444eba697846a61a4c53ba5d67bf1050bac588775182a5de22b5020a050a0190100512202ed1a5c24eca4d7d74db0be732c56c0c6349772ed38bbb7b249f1936342c00441a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a01c01002122042bdfc3da115eff70b85cc6e6967231873952611747c595d5dabcadac4c9af4018001a340a050a0180100212290a050a01a010031220d5be80aa0216e521bf071a27a7ddb580edb7bb993f2fc629c894480f226f015c18001a340a050a0180100312290a050a018010041220e498cb0d7f1d21d0a4926dcae45048e456c17be4d40137157201a49fc6ff0d6b18011a340a050a0190100412290a050a019810051220f18d6a5d5878439ae2a9a69511eb24d6a9248db6de7e6d4609340adeaf43f0cb18002ae7040a250a2076e92bdf1cb2227332e172f3e924d0db282f30cc86e150a1ff206e13c7ce08e110800212050a017610071a490a250a2076a8f4dab3032e24ecacba4cc6f0d8941576cb4de8602bb2dcd92d37a661b3f810800212207deb2f8a58e61e1c0d68b8bcda67c48061d8f7c510147ecec80371352c87cc6c1a490a250a2077b8686275f26fa35773da15f5a8782f39a2906d1d406400861a827ad270b7cc108002122006de0691d0fe557f4159d131db44203d36d553810c7c4fcb39c4d0a7412a470822a0030a050a017610071220e435d82dff8b5b68a0c5794dd2595959d494bf2cf43b45a659f2b20eca5e836e1a330a040a00100012290a050a018010011220f920c02664de2c5ccd22a2c1e1562e454f19a9cf24614f8f4ee443323b5f92d718001a320a040a00100112280a040a0010021220ce826124bb1662619e50f679b2a2ccbe24f6a54600eff19ef0714f93aa83108c18011a340a050a0140100212290a050a0140100312208dab6fd2885e8ad3cd21ea10333032dc11e5d8c74839df32a2371c255e9d545418011a340a050a0160100312290a050a0160100412207ec46fed1200b15a85e4c3736369c18249060a8ee552665cc8b6638125cff75118011a340a050a0170100412290a050a0178100512209333b7e40bb98f126fc1d5f5d700cfbcf712c0dec1f1c05428d76a479c2da9d118001a340a050a0170100512290a050a017210071220c49a8e2f52a22d12b3228eee464f3d3a1ada50f2e4cacea3b7dfc6c9623f176418011a340a050a0174100612290a050a01741007122049dc418d51769054d545fd46a777eeeb2dd436e02308f55f1e285a257bea16df1801 +0a8d080830120531362c343818032250d5fbf6ef8a38a8714fdd132a15cd2aecfbc6e4963396554a7c57f750cb41e4316f5af0791b191bd0df2db173596e1565fafd3e146c97d718aaec1617e42048c1ec7ef6b02e0c858bc5c1b3ecd3f65e022aab030a250a20fe1d2d5acfc3a8f3c683d1feddc0b8d7244430e2de20de99f71dc084579fec081080021220bd83cfbd72e462ae897cbcb738848af92da585f16eaf635ce6d7abe2f0f24ca71a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a018010021220f23d30cb8e3fb4ed7ffbf6b12831690f3f87cdf2b51f18034e4ef6c5eeeb87e218011a340a050a01c0100212290a050a01c01003122064f89d79182c92e9abba7759a5a0c8b77d8a7d2f84ba87197346cb3d74291e1b18011a340a050a01e0100312290a050a01e010041220917dc004ccc90f61586b9f1fffea1823431d22ea049ba35ec12b5f52ca6df72c18011a340a050a01f0100412290a050a01f01005122025e6c5ace7e0f60954b2cf05a616af75bf1fb4086097d71849eed98df691ba1d18011a540a050a01f8100512490a250a20f91861b5faaf124bd305e907b6174a8225dca19e0bf4028b9d0a285c622ec45c108002122005e3ae0bc206546b25eedf669fd6c9bf2c4baaeb2c4b28b8a003d80a9fc1c0a718013250f09ab81edaed3134b6b883063897e67cbbca921a8ec6ae2ba4e89841751145f0d1c7df27ad68555d23e61b6f0f815558e1b945758db36c04c7eff117c4c4371163c4470d793f5b1c5b501872146d3e093a8b030a250a20950ef0037c42b4d384851db37a0b852afe331a7c739dbda1071590a33363bf311080021220ccce9ad412cd47a6444eba697846a61a4c53ba5d67bf1050bac588775182a5de1a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a01c01002122042bdfc3da115eff70b85cc6e6967231873952611747c595d5dabcadac4c9af4018001a340a050a0180100212290a050a01a010031220d5be80aa0216e521bf071a27a7ddb580edb7bb993f2fc629c894480f226f015c18001a340a050a0180100312290a050a018010041220e498cb0d7f1d21d0a4926dcae45048e456c17be4d40137157201a49fc6ff0d6b18011a340a050a0190100412290a050a019810051220f18d6a5d5878439ae2a9a69511eb24d6a9248db6de7e6d4609340adeaf43f0cb18001a340a050a0190100512290a050a019010061220baa9a74d3e3c86c7a4e5b569fc04d1832417fe4b847987b91b3b05efc58328911801422087f6f8afdbf8d5992a082c5769dafcf1cfa646356f60f95b2707226a105f366b0aef090820120531362c3332180222503b2c1bf6a23404d02f83393b3e7464a4f71e47c9582035c145f9b3957154c3de88b109d2beaf2489615d3bd6461c7e59d1147982db70e6573b2c2251c40fa2910cb1d5dcb5c8621ed422087e7437b7052a81040a250a2088b20b6c91228dfa2b6690bbbb0000defcf0c55fb7f771c66c8f5fc7ddfbd5c91080021220b9569226ade5a20a56ae901b1294884b5f63d1b6b2d8cf11aa7ee7a0c31d87ff1a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a01c01002122042bdfc3da115eff70b85cc6e6967231873952611747c595d5dabcadac4c9af4018001a340a050a0180100212290a050a01a010031220d5be80aa0216e521bf071a27a7ddb580edb7bb993f2fc629c894480f226f015c18001a340a050a0180100312290a050a019010041220cbc76a3e4880da0bc22877aef5dc106c2c3b78bcea757756dd785bc752b6e8b118001a340a050a0180100412290a050a0180100512209fcd63f18092d30777cd0eec97e514c3eb909cba62c28ebff75d4389c811a38718011a540a050a0188100512490a250a208e5f0d8304af6561fc526f85a82eec2180e3f99a3ebe7ced997653755abd22201080021220c041ec3e24ac4b81470bcd37c9ced4a3697e890f5dc35e37bab74460b371380e18001a540a050a0188100812490a250a2088582083f0f96c9315a43af85827b35b9e82bb9e49326345fab42af4b01b38a310800212207538b4876be6bbe0fccd26fd644c59a273857ca4056709820f8728015f3f4e5a18013250c684ea0200c7ce879661ef6ad913adc304a983b247063e9e26f8e1ed17ceccac229412da7662c33e43a787ec27970f79ad43c9363af7a4f37c7fd24dd17b40f3471e312e4965b672c8a008bb25a646023a97040a250a204df88ab9a2fc554a1f5983a219cc3f5028f8b830242991efcdda2e161af7ce981080021220436c8ba3074b218c1d31f84869d1015d37316644f0187acc328627dcd990f3f51a330a040a00100012290a050a018010011220f920c02664de2c5ccd22a2c1e1562e454f19a9cf24614f8f4ee443323b5f92d718001a320a040a00100112280a040a0010021220ce826124bb1662619e50f679b2a2ccbe24f6a54600eff19ef0714f93aa83108c18011a340a050a0140100212290a050a0160100312207b1315af9081bd2b622a7805d893bf7fca614840ff807a0f51f899cca95e111f18001a340a050a0140100312290a050a0150100412202f353417dbb07a52259710d973ffd9b743351269e980321b0a48ed3cd9ae3af018001a340a050a0140100412290a050a014010051220c838bbcecf1f28bc8e27b333c51a0c55abef7a8cc8eb6813161dcf363c9ee07618011a340a050a0148100512290a050a014810061220e5486588b84147ec35cddad8c7d96d458e9106da024ad4822ddb4a6f5708f8af18011a340a050a014c100712290a050a014c100912205c838d7502f77a498e444290032c15c405c0ba5fe3bcd1aa9a6b2f6cbf23e73218011a550a060a024dc0100a12490a250a204dc36d1d62462ef9f89b18a0e2084b4175a758e7ef401b7a1532f3c238d300311080021220237744c2ba2700f5704ffe83d6b3cfd0b9b10f1e700272301a4a73011e805ace18014220c79d1bf9f55751cd01f1e6f66a8e678a00730d47e42c771ea44fee99c76143650ab9050810120531362c3136180122501a3722600ad1b64a9020de941d7f872b9402f1160eb991657252db2e4d1a677f09c15097b23242bd8b6c14b2fda64ea95208c46d2a24d16eb7c48564a122ceaf4061ad3cc058159605bcdc0a469b110f2ab7040a250a20b13655aaf384205dd17079da6e49837e011377a7056f26156dd9b1db222783cd1080021220e80c645934dbe7c2d2ad6c53e58854050297accefe7ef3f3df980c5b107663bd1a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a01c01002122042bdfc3da115eff70b85cc6e6967231873952611747c595d5dabcadac4c9af4018001a340a050a0180100212290a050a018010031220435d927615d6e615300ecd6481dcbbae3cc2f995bbb71f47807441b2d937662318011a340a050a01a0100312290a050a01a01004122008e60d908bbf466ca8ab5df9e9e550acaf746ace2d9efe65efe9c5635a068edb18011a340a050a01b0100412290a050a01b810051220186626c960d06dd6ddd285b6c0d5133eea702e728aa8dc4ea78148f59333727e18001a340a050a01b0100512290a050a01b6100712200025f2ed7d8ac7df30935ab6b84144b686664ee81271a974e05b03b7ef578ad818001a540a050a01b0100612490a250a20b325e2beaaa30091d90327ecb2c69408a4efd4bca0c0ae24864f4085b55640b21080021220d6611d1af21dbac8b5d151f06e6dc8140eaab06709788a49fad1f6fc5c13875418001a540a050a01b0100712490a250a20b05a1100c75971b57f2f4eb381ccdf251cf32de7dcb984ffe2e148cd20abfb3a108002122023e1462acea013e577733e8b25979835ec3a4c6bffeb06e76cd35d8b2a633ce31801422062ed56f9d525787b231b5b2658a812d5490a9abe18d0bca315535b4cbff48b872250f3153d14130b5d46dc8a41a31c2a6e370bee2ab23b1c7f10f00148dea11b8efc5b02c5789666c8889d7002cebd2e16f153ceb8fa7dddd93e1bcb6a36d09b518c9cc32dccf84ea96c002619eb9ed827072250afc3efdb5779b36fbafa5c2b25cef1805da2a5012d61c448bb0d3fccf8bb54f0884aaeb97a12ed6aca697fd2b0199e249b8596561c947018cd74f49f0696049e1508818e516fe5bf2508cb3f9936a5072ad8030a250a200e0d6de820d96326e39a80b29c55021b1a20c5176fcb74a1e2c5f6622453e83710800212050a010810051a290a050a0108100612202345fae2736b0fd1df1fb8f68be8baf376721faa22a11649e016a3f613d4f2051a490a250a200c36431bd9e91ce3a322782014e17dcc47f89672f91668400fbbff1d45c3938f10800212209d8a115a07c212692984c8d41f74584876a006ea85b240596d59ed4da956176a22b1020a050a010810051220ce8a13ef03348bc138cabfa46fb7ac7d25b80fe685332b0dda2261d7cacbe4201a330a040a00100012290a050a018010011220f920c02664de2c5ccd22a2c1e1562e454f19a9cf24614f8f4ee443323b5f92d718001a330a040a00100112290a050a014010021220db62ce8d154425eb46b04465d861ef6d7703d02a2f1132b991c5a6d42f2c867a18001a330a040a00100212290a050a0120100312204dce7db904a97d0d697439dda1b9c78f604a263ed3c61253ab47e4138b34a64218001a330a040a00100312290a050a01101004122036ed9f48138919fdadd34d85759195441b1f9161f55b090e93f5ab365ff43ffe18001a320a040a00100412280a040a00100512205fde9ff56521aeac96528e44d9b58aaa7fa75e0523af7638aa9d7f7248694c1c18012adc030a250a2096eb4bf7cc4c5462045ff681ae6d0677b983c9d9ec74f44aea37223e43dd038c10800212050a019010051a290a050a019010061220baa9a74d3e3c86c7a4e5b569fc04d1832417fe4b847987b91b3b05efc58328911a490a250a20950ef0037c42b4d384851db37a0b852afe331a7c739dbda1071590a33363bf311080021220ccce9ad412cd47a6444eba697846a61a4c53ba5d67bf1050bac588775182a5de22b5020a050a0190100512202ed1a5c24eca4d7d74db0be732c56c0c6349772ed38bbb7b249f1936342c00441a320a040a00100012280a040a0010011220b457a5c3cd0a26734501ebec24e052b1822f164f2b0a6776a0653f1cf55e76e518011a340a050a0180100112290a050a01c01002122042bdfc3da115eff70b85cc6e6967231873952611747c595d5dabcadac4c9af4018001a340a050a0180100212290a050a01a010031220d5be80aa0216e521bf071a27a7ddb580edb7bb993f2fc629c894480f226f015c18001a340a050a0180100312290a050a018010041220e498cb0d7f1d21d0a4926dcae45048e456c17be4d40137157201a49fc6ff0d6b18011a340a050a0190100412290a050a019810051220f18d6a5d5878439ae2a9a69511eb24d6a9248db6de7e6d4609340adeaf43f0cb1800 diff --git a/examples/src/test_vectors/mod.rs b/examples/src/test_vectors/mod.rs index 4501366d..167c0fa6 100644 --- a/examples/src/test_vectors/mod.rs +++ b/examples/src/test_vectors/mod.rs @@ -45,6 +45,18 @@ pub struct Metadata { pub domain_label: String, } +#[derive(Debug, PartialEq, Eq)] +struct TestVectorBytes { + vrf_pk: String, + epoch_hash: String, + epoch: u64, + label: String, + lookup_proof: String, + history_proof_recent: String, + history_proof_complete: String, + history_proof_complete_len: usize, +} + #[derive(Parser, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub(crate) struct Args { /// Name of output path. @@ -97,6 +109,39 @@ pub(crate) async fn generate(args: &Args writer.write_comment(&comment); writer.write_object(metadata); + let test_vector_bytes = generate_impl::().await?; + + writer.write_line(); + writer.write_comment("Public Key"); + writer.write_object(test_vector_bytes.vrf_pk); + writer.write_line(); + writer.write_comment("Epoch Hash"); + writer.write_object(test_vector_bytes.epoch_hash); + writer.write_line(); + writer.write_comment("Epoch"); + writer.write_object(test_vector_bytes.epoch); + writer.write_line(); + writer.write_comment("Label"); + writer.write_object(test_vector_bytes.label); + writer.write_line(); + writer.write_comment("Lookup Proof"); + writer.write_object(test_vector_bytes.lookup_proof); + writer.write_line(); + writer.write_comment("History Proof (HistoryParams::MostRecent(1))"); + writer.write_object(test_vector_bytes.history_proof_recent); + writer.write_line(); + writer.write_comment(&format!( + "History Proof (HistoryParams::Complete with {} versions)", + test_vector_bytes.history_proof_complete_len + )); + writer.write_object(test_vector_bytes.history_proof_complete); + + // flush writer and exit + writer.flush(); + Ok(()) +} + +async fn generate_impl() -> Result { let db = AsyncInMemoryDatabase::new(); let storage_manager = StorageManager::new_no_cache(db); let vrf = HardCodedAkdVRF {}; @@ -206,44 +251,65 @@ pub(crate) async fn generate(args: &Args } if (i, epoch) == (label_to_write, epoch_to_write) { - writer.write_line(); - writer.write_comment("Public Key"); - writer.write_object(hex::encode(vrf_pk.as_bytes())); - writer.write_line(); - writer.write_comment("Epoch Hash"); - writer.write_object(hex::encode(epoch_hash.hash())); - writer.write_line(); - writer.write_comment("Epoch"); - writer.write_object(epoch_hash.epoch()); - writer.write_line(); - writer.write_comment("Label"); - writer.write_object(hex::encode(&label.clone().0)); - writer.write_line(); - writer.write_comment("Lookup Proof"); - writer.write_object(hex::encode( - akd_core::proto::specs::types::LookupProof::from(&lookup_proof) - .write_to_bytes()?, - )); - writer.write_line(); - writer.write_comment("History Proof (HistoryParams::MostRecent(1))"); - writer.write_object(hex::encode( - akd_core::proto::specs::types::HistoryProof::from(&history_proof_partial) - .write_to_bytes()?, - )); - writer.write_line(); - writer.write_comment(&format!( - "History Proof (HistoryParams::Complete with {} versions)", - history_results_complete.len() - )); - writer.write_object(hex::encode( - akd_core::proto::specs::types::HistoryProof::from(&history_proof_complete) - .write_to_bytes()?, - )); + return Ok(TestVectorBytes { + vrf_pk: hex::encode(vrf_pk.as_bytes()), + epoch_hash: hex::encode(epoch_hash.hash()), + epoch: epoch_hash.epoch(), + label: hex::encode(&label.clone().0), + lookup_proof: hex::encode( + akd_core::proto::specs::types::LookupProof::from(&lookup_proof) + .write_to_bytes()?, + ), + history_proof_recent: hex::encode( + akd_core::proto::specs::types::HistoryProof::from(&history_proof_partial) + .write_to_bytes()?, + ), + history_proof_complete: hex::encode( + akd_core::proto::specs::types::HistoryProof::from(&history_proof_complete) + .write_to_bytes()?, + ), + history_proof_complete_len: history_results_complete.len(), + }); } } } + panic!("Test vector not found"); +} - // flush writer and exit - writer.flush(); - Ok(()) +#[cfg(test)] +mod tests { + use super::*; + use crate::{ + fixture_generator::reader::{yaml::YamlFileReader, Reader}, + test_config, + }; + + // Path to where the test vector .yaml files are located + const TEST_VECTORS_FILE_PATH: &str = "src/test_vectors"; + + // Ensures that the output of the test vectors matches the expected output + // If this test fails, then this means that the test vectors have changed and the + // expected output needs to be updated by regenerating the test vectors + test_config!(test_output_vectors); + async fn test_output_vectors() { + let mut reader = YamlFileReader::new( + File::open(format!("{}/{}.yaml", TEST_VECTORS_FILE_PATH, TC::name())).unwrap(), + ) + .unwrap(); + + let test_vector_bytes_generated = generate_impl::().await.unwrap(); + + let test_vector_bytes_read = TestVectorBytes { + vrf_pk: reader.read_string().unwrap(), + epoch_hash: reader.read_string().unwrap(), + epoch: reader.read_string().unwrap().parse().unwrap(), + label: reader.read_string().unwrap(), + lookup_proof: reader.read_string().unwrap(), + history_proof_recent: reader.read_string().unwrap(), + history_proof_complete: reader.read_string().unwrap(), + history_proof_complete_len: 3, // This is a bit of a hack and is hard-coded + }; + + assert_eq!(test_vector_bytes_read, test_vector_bytes_generated); + } } diff --git a/examples/src/test_vectors/whatsapp_v1.yaml b/examples/src/test_vectors/whatsapp_v1.yaml index 3f24e05a..2d35b3ef 100644 --- a/examples/src/test_vectors/whatsapp_v1.yaml +++ b/examples/src/test_vectors/whatsapp_v1.yaml @@ -2,13 +2,13 @@ # the test vectors tool with the following command: # # cargo run -p examples -- test-vectors \ -# --out examples/src/test_vectors/ \ +# --out examples/src/test_vectors \ # Metadata --- args: - out: examples/src/test_vectors/ -version: 0.12.0-pre.6 + out: examples/src/test_vectors +version: 0.12.0-pre.7 configuration: whatsapp_v1 domain_label: ExampleLabel @@ -34,8 +34,8 @@ f6ec49c8085f4d4be69db8e248bf11ce288026f5b8c5f6599defe58303d0702d # History Proof (HistoryParams::MostRecent(1)) --- -0ac30a0830120531362c343818032250c8420ebba728c7ef0f89a63eebafab0e1c23bc1431d5c00c43d3f5c2ee0e4ec290f766ddec663283627741e89924ddad64a0a6a610ab895758ba4f835cb7248bad09c7f643936f9733e6d0f2c34002002ab5040a250a201ebcd0ddae05780a3052f0fe1238c1c1bba4323faec7a34e1e166a226790fb8e1080021220394f5a80107e82da7304c4ad7c58d5eba1996cfc7504d2d3c1447fe0a49ebeb41a330a040a00100012290a050a018010011220b61a093e4dbbb8713012c36d61c499251df36938411de551266eebed6e90149f18001a330a040a00100112290a050a0140100212207352c00f45def1d8668b1bf1601e097767bfa424c76f2264e2498b67e929243218001a330a040a00100212290a050a0120100312200c3c792e047815b5a3e10a851dbc0127d26b9d5fb6b5d3aadcf0990bd918a03618001a320a040a00100312280a040a0010041220a5a191fddba3c6589b055b63e078bd153fbf1e29ded81ebeb41e5348259dcb0918011a340a050a0110100412290a050a011010051220d95bc6584da2bb581035b1b3a574eb25354b6df52b5be6bbc45ef21eb44afa5f18011a340a050a0118100512290a050a0118100612208d126dc82633630cff4a768f39a57ebedc43c79be68a97ccf37d81a785d8da1b18011a540a050a011c100612490a250a201c807667d33e4653f79ff38fee84ba33295025b3fba0b9f298aa3c0014d885ab1080021220deabcd07d5c61763f7b56403d7bd5ef45f8b233870334f80ef04b7891c53320918011a550a060a021e80100912490a250a201ed390e74ddc66df0d508c05c77a312b5d9e67033097b183fc14e63ed11d5abe10800212209129a913d13e860407fb3dc59d55740144547723ba5201b02ce9cafa7cb179df180032501fea30c7759f3048e109accbd07dce10bc1fa2dfe71e6ddb200751d6941df53c929afde7bc6221c17cd36af9a930164834f90812c89c28d7b7b3309332b981317d54fc0c9459dd3fb1ec6c260cb993053ab7040a250a2098d5841e64ab676907321d6e54b9272931529e0d94d9acd0724d1f17fc8166b310800212201573e9557fa6094b1fca14cb6bd9a6e18adf38e05c535ee36493e517d10ff90d1a320a040a00100012280a040a001001122045547962d22f8982fe3e846ee64f97743755ba633f0b1be8edb0db4de89e036918011a340a050a0180100112290a050a01c010021220a4359c434a332ee2d53bc675447f4be534ee79267655dd7114223d148463f16218001a340a050a0180100212290a050a01a010031220f503eb8152899830917555c9e6a073c7b2eafcd85e574fff21aa417eb25190c418001a340a050a0180100312290a050a018010041220944ee2e4bf793d67fa35f5ef267262927437f33da9d06c74affcb3abe85897cf18011a340a050a0190100412290a050a0190100512208ebb6c0df98692e4fab8486e4b5158c71113edf3bd69d35063d3032bc2b6746418011a340a050a0198100512290a050a019c1006122066defd89a7e6f2c2e083dfd8f7151f58770c586ede8bcc09d3a34dd3cae642dc18001a540a050a0198100612490a250a209b1351d8bdd43c41b2ef6a5370dbf78ba9e7bb43e10e54fa3aa5da11dfe2ade610800212202c558701c11ebf203a52792bf81aac4714d7aaf3de23fea9d6d18add128b33eb18001a540a050a0198100812490a250a2098598b5544bf17965cdff5e1edd28855483eb01c2af21675b5852dc31f31502a10800212205e97fb41ae681ead896280550ca7a0aa9fe9eaefb32bd0ebcc7db1aee64124d9180142206f6f1f6ccc8adbfd296a004065325af45bbd6ba367bfcbda1f53ded53cfd502e12503f58677513e18b0505ba4411f88cbbca6bc5abc50c9adb0143f1c3bfd8b850ba086018006ab15f1ffe2eeb6ec6e919955e160b0b537eefb3398541830a959c17ac5eb175d56f7476a5a603c18223760a1ae9040a250a200ed5c55fd5a7977da8e832ccc275003a4859dea655c979fdc26ab277b073013d1080021220d0a9e69df6b8800197d55cd9c84dc0d5713d0397fa28ee87ad6f64ab9a1a7d601a330a040a00100012290a050a018010011220b61a093e4dbbb8713012c36d61c499251df36938411de551266eebed6e90149f18001a330a040a00100112290a050a0140100212207352c00f45def1d8668b1bf1601e097767bfa424c76f2264e2498b67e929243218001a330a040a00100212290a050a0120100312200c3c792e047815b5a3e10a851dbc0127d26b9d5fb6b5d3aadcf0990bd918a03618001a330a040a00100312290a050a0110100412207f0160b950a54b18f3afba196b06ec9780e4fccb8339eee0b1daccbf218c648a18001a320a040a00100412280a040a0010051220274cf872f402cd9023779de5569d1199841dc8a8b24d1c66403182d0a171789918011a340a050a0108100512290a050a010810061220cf35f23337ef41495e90c86a4510271df283f01396f9818e9c4634e6f619362b18011a340a050a010c100612290a050a010c10071220b90a1fde0e6d8939b36231620d8650ea27aad2365406ca349a663ba95fcad8cc18011a540a050a010e100712490a250a200f1c03715ea311ef4c6964226e575ff0fa982225c0a47395ba149ca1e6849b55108002122087d8b95bcb27f6943acab2a49f04894eb7e10b213c9f1b823596090e7f1e6c0b18001a540a050a010e100812490a250a200e3d1507156738fdf9957dc0a5a4e5f3b1537fd1d1711303492268285be3b7a010800212204c6e8f4694aa2c2ad858632d53e4ea78437478aa2582235c203a0e06370d3e0e1801225025b7d0acd4b367b3b58fb588b65e1d6fe3902938da34a8e37d1976f46afa9217723b6eb88c76a298cf365d7599946c9199b8f0d5862a0a3545e0673a8a29484646abdf66abc13acc09aa46969cc34c0b2250b5dfbf66632ea76236f24d01b94c3d8e5166e656d25d02722c6431df781db788907072313ab76db54d07be1900b9a9221a8c6cb0aed037d60b9c5b6234e688ef331fc10c09e3589fc60c832a91dc770e2250bf56732a04e9f84433166a381151c08f6a1142d7e895e384d6af730c3b0ebb8fef4f66984f887ca9e777a39af4e3fb4aa89afa8152fe126bf1736b515842290b6e0269cb8bf65f68ace05188b7d11f07225043760a75f11cb424242a7c6942027913071e70558aa70b44be13a7fb7f09b655a9cb71b6c6e1f6f07c69654797efec07cf6428235e360715d078d30ade9cd4d62406723115aeabe6d3d1ec8331c0b6012a92040a250a20d743c6674c5614ac20fd216643f210b3de164d527c73aca00dfebcda94eb629710800212050a01d410061a290a050a01d41007122083dc79ec63f9c2b14430c4911ba713354feab796f288d2509ee0c41fe2deedc71a490a250a20d6d1901ccd9f24c21f73c072f8a8e7078d0057159f19752c9e405d29f0036f4310800212207cf90d33a4d33c0a45a27e096ca7d8f4bba5dd41962400bedc9424216b29ecce22eb020a050a01d410061220b5000972e512b06218c66be7a3ef99a2834299d950bfaa236c59b1d80fc6fe191a320a040a00100012280a040a001001122045547962d22f8982fe3e846ee64f97743755ba633f0b1be8edb0db4de89e036918011a340a050a0180100112290a050a018010021220d94113db5baa18c18ce6382f3268585c5304419801eb31283de1e1aaffc4246918011a340a050a01c0100212290a050a01e010031220efb3813e35d8060369ea4ed7329b8dd9b07730d372da0ae0fcae664eb1ae0a0418001a340a050a01c0100312290a050a01c0100412200a2cc0b06bb240aaa5b14593c26ec9a347b85d3b445a6481f69c413957aa725f18011a340a050a01d0100412290a050a01d81005122049f6334c859557706d2f61ec7005b4f91ad9eeb279556a57936c994a207a3b2b18001a340a050a01d0100512290a050a01d010061220c7a6303f9f72cf3ecdb088231c127abe1487f8e5f937b92eefb166fec6e2404118012ae6040a250a2015b9999e3b7088acdf66539bbece83134e0770dc5763154d000bde7e95a0d88910800212050a011410071a490a250a20144e8c6a3b57b6b115327388870adbc2aa09ce08ea8b3a33fefee29f5e08847f1080021220542f3339afbe69064b843570a4bf95bc4e0298b24267c2a00d0fd65fbd82d6971a2a0a060a0215c0100b1220f16b6ae3af4a348b9340a69d0259bdaf10358fae42f0ddeb0e5d37c3c2c6739b22be030a050a0114100712206918db014b1183194f8ef9cec5739536a9209640f141c7e04b8aea09b43e59a21a330a040a00100012290a050a018010011220b61a093e4dbbb8713012c36d61c499251df36938411de551266eebed6e90149f18001a330a040a00100112290a050a0140100212207352c00f45def1d8668b1bf1601e097767bfa424c76f2264e2498b67e929243218001a330a040a00100212290a050a0120100312200c3c792e047815b5a3e10a851dbc0127d26b9d5fb6b5d3aadcf0990bd918a03618001a320a040a00100312280a040a0010041220a5a191fddba3c6589b055b63e078bd153fbf1e29ded81ebeb41e5348259dcb0918011a340a050a0110100412290a050a011810051220f9390ec9ec86ac4e6896224f5143e2f571c712c667671950d25047598caf64bb18001a340a050a0110100512290a050a0110100612200daf0ca820997695876c7a791929cf81077f81d7110121676fbee44618c1bf3818011a540a050a0114100612490a250a2017e66930963207e6e2d7d279fec57500ce7349bd297977dfdc4347298fc56ff51080021220e1a24e4e3397bf102b51016a146495f67e0f16ca1060799f4fea86c297b0a0c818002a85050a250a2004a1cbcd5179d3199798b939325788f1b2369607726577f0d4eff11d7b3d8d2c10800212050a010410071a2a0a060a0204d0100c12202cfc9e49c81b6d4f78373521439d041b31f56ab1ffd2dddeb8ebae2525db5bc61a490a250a200513c2868e34c8e759e857a63c6f2f0b87be8a1828bfafb790d62b26e404cf1c1080021220886686f3d0bc3b6c318eaae8393f3f230c5d2916a05f37bca11e5a4f7d3896f922dd030a050a010410071220650125dd3667aa5dc43d7ed9f803dfa8842419b7c0892eb0e4a479d3a4450a701a330a040a00100012290a050a018010011220b61a093e4dbbb8713012c36d61c499251df36938411de551266eebed6e90149f18001a330a040a00100112290a050a0140100212207352c00f45def1d8668b1bf1601e097767bfa424c76f2264e2498b67e929243218001a330a040a00100212290a050a0120100312200c3c792e047815b5a3e10a851dbc0127d26b9d5fb6b5d3aadcf0990bd918a03618001a330a040a00100312290a050a0110100412207f0160b950a54b18f3afba196b06ec9780e4fccb8339eee0b1daccbf218c648a18001a330a040a00100412290a050a010810051220af094b53001685196633a24b712e71d32a2330f3c465cb7cddc6c3936af02cbe18001a530a040a00100512490a250a200241a14c30cfee9bb1e8f0d0ea10848f789751fba9f917c856b76357ef13dddc10800212201573e9557fa6094b1fca14cb6bd9a6e18adf38e05c535ee36493e517d10ff90d18011a540a050a0104100612490a250a2006800d436fb76ae146e6257ab27d7a8d9717a3dee5c4afa11a48d182188a192d10800212203391734cae7c3a288f4c8b26587bfbec08a7d8ea1d0b50e60e6d7291301d102518002ab2040a250a20c8a6e76c09c06ba9034f6150bb1b2750ff6d99e5326ea1ff2cb4cff843ed272310800212050a01c810061a490a250a20c91bab31507eedc31ab81376b1e73313bcb1deb353e9b216296e585887f49b86108002122086999e2a82bdab9bb06fa34f435ee0b0083f4a6d71b094c41c8d55f92f21dcae1a490a250a20cbb52fd6307ee73a42c7ae33c86229c2810bcc4a4469a438502bc79c2022d7a2108002122064346f5248862cad808008d360cb767572d442a37271908c3dc53b811b5eb18a22eb020a050a01c810061220c29beb6b771056ebaf2e498be9928d0852b3917ed7cee3f935c82877e9d0d8731a320a040a00100012280a040a001001122045547962d22f8982fe3e846ee64f97743755ba633f0b1be8edb0db4de89e036918011a340a050a0180100112290a050a018010021220d94113db5baa18c18ce6382f3268585c5304419801eb31283de1e1aaffc4246918011a340a050a01c0100212290a050a01e010031220efb3813e35d8060369ea4ed7329b8dd9b07730d372da0ae0fcae664eb1ae0a0418001a340a050a01c0100312290a050a01d010041220b2334caa455b3a136993ba87f11d8db546c5b3b1115a756beec893595c34e6bc18001a340a050a01c0100412290a050a01c010051220217a767f44fc8baab6faafa267d04a32041d5bd9631796afebec88b21aa781f818011a340a050a01c8100512290a050a01cc1006122051d021181467d45411a775a2a37ba770936e7cabff2c213c7a54df846aaebd6f1800 +0ac30a0830120531362c343818032250c8420ebba728c7ef0f89a63eebafab0e1c23bc1431d5c00c43d3f5c2ee0e4ec290f766ddec663283627741e89924ddad64a0a6a610ab895758ba4f835cb7248bad09c7f643936f9733e6d0f2c34002002ab5040a250a201ebcd0ddae05780a3052f0fe1238c1c1bba4323faec7a34e1e166a226790fb8e1080021220394f5a80107e82da7304c4ad7c58d5eba1996cfc7504d2d3c1447fe0a49ebeb41a330a040a00100012290a050a018010011220b61a093e4dbbb8713012c36d61c499251df36938411de551266eebed6e90149f18001a330a040a00100112290a050a0140100212207352c00f45def1d8668b1bf1601e097767bfa424c76f2264e2498b67e929243218001a330a040a00100212290a050a0120100312200c3c792e047815b5a3e10a851dbc0127d26b9d5fb6b5d3aadcf0990bd918a03618001a320a040a00100312280a040a0010041220a5a191fddba3c6589b055b63e078bd153fbf1e29ded81ebeb41e5348259dcb0918011a340a050a0110100412290a050a011010051220d95bc6584da2bb581035b1b3a574eb25354b6df52b5be6bbc45ef21eb44afa5f18011a340a050a0118100512290a050a0118100612208d126dc82633630cff4a768f39a57ebedc43c79be68a97ccf37d81a785d8da1b18011a540a050a011c100612490a250a201c807667d33e4653f79ff38fee84ba33295025b3fba0b9f298aa3c0014d885ab1080021220deabcd07d5c61763f7b56403d7bd5ef45f8b233870334f80ef04b7891c53320918011a550a060a021e80100912490a250a201ed390e74ddc66df0d508c05c77a312b5d9e67033097b183fc14e63ed11d5abe10800212209129a913d13e860407fb3dc59d55740144547723ba5201b02ce9cafa7cb179df180032501fea30c7759f3048e109accbd07dce10bc1fa2dfe71e6ddb200751d6941df53c929afde7bc6221c17cd36af9a930164834f90812c89c28d7b7b3309332b981317d54fc0c9459dd3fb1ec6c260cb993053ab7040a250a2098d5841e64ab676907321d6e54b9272931529e0d94d9acd0724d1f17fc8166b310800212201573e9557fa6094b1fca14cb6bd9a6e18adf38e05c535ee36493e517d10ff90d1a320a040a00100012280a040a001001122045547962d22f8982fe3e846ee64f97743755ba633f0b1be8edb0db4de89e036918011a340a050a0180100112290a050a01c010021220a4359c434a332ee2d53bc675447f4be534ee79267655dd7114223d148463f16218001a340a050a0180100212290a050a01a010031220f503eb8152899830917555c9e6a073c7b2eafcd85e574fff21aa417eb25190c418001a340a050a0180100312290a050a018010041220944ee2e4bf793d67fa35f5ef267262927437f33da9d06c74affcb3abe85897cf18011a340a050a0190100412290a050a0190100512208ebb6c0df98692e4fab8486e4b5158c71113edf3bd69d35063d3032bc2b6746418011a340a050a0198100512290a050a019c1006122066defd89a7e6f2c2e083dfd8f7151f58770c586ede8bcc09d3a34dd3cae642dc18001a540a050a0198100612490a250a209b1351d8bdd43c41b2ef6a5370dbf78ba9e7bb43e10e54fa3aa5da11dfe2ade610800212202c558701c11ebf203a52792bf81aac4714d7aaf3de23fea9d6d18add128b33eb18001a540a050a0198100812490a250a2098598b5544bf17965cdff5e1edd28855483eb01c2af21675b5852dc31f31502a10800212205e97fb41ae681ead896280550ca7a0aa9fe9eaefb32bd0ebcc7db1aee64124d9180142206f6f1f6ccc8adbfd296a004065325af45bbd6ba367bfcbda1f53ded53cfd502e12503f58677513e18b0505ba4411f88cbbca6bc5abc50c9adb0143f1c3bfd8b850ba086018006ab15f1ffe2eeb6ec6e919955e160b0b537eefb3398541830a959c17ac5eb175d56f7476a5a603c18223760a1ae9040a250a200ed5c55fd5a7977da8e832ccc275003a4859dea655c979fdc26ab277b073013d1080021220d0a9e69df6b8800197d55cd9c84dc0d5713d0397fa28ee87ad6f64ab9a1a7d601a330a040a00100012290a050a018010011220b61a093e4dbbb8713012c36d61c499251df36938411de551266eebed6e90149f18001a330a040a00100112290a050a0140100212207352c00f45def1d8668b1bf1601e097767bfa424c76f2264e2498b67e929243218001a330a040a00100212290a050a0120100312200c3c792e047815b5a3e10a851dbc0127d26b9d5fb6b5d3aadcf0990bd918a03618001a330a040a00100312290a050a0110100412207f0160b950a54b18f3afba196b06ec9780e4fccb8339eee0b1daccbf218c648a18001a320a040a00100412280a040a0010051220274cf872f402cd9023779de5569d1199841dc8a8b24d1c66403182d0a171789918011a340a050a0108100512290a050a010810061220cf35f23337ef41495e90c86a4510271df283f01396f9818e9c4634e6f619362b18011a340a050a010c100612290a050a010c10071220b90a1fde0e6d8939b36231620d8650ea27aad2365406ca349a663ba95fcad8cc18011a540a050a010e100712490a250a200f1c03715ea311ef4c6964226e575ff0fa982225c0a47395ba149ca1e6849b55108002122087d8b95bcb27f6943acab2a49f04894eb7e10b213c9f1b823596090e7f1e6c0b18001a540a050a010e100812490a250a200e3d1507156738fdf9957dc0a5a4e5f3b1537fd1d1711303492268285be3b7a010800212204c6e8f4694aa2c2ad858632d53e4ea78437478aa2582235c203a0e06370d3e0e1801225025b7d0acd4b367b3b58fb588b65e1d6fe3902938da34a8e37d1976f46afa9217723b6eb88c76a298cf365d7599946c9199b8f0d5862a0a3545e0673a8a29484646abdf66abc13acc09aa46969cc34c0b2250bf56732a04e9f84433166a381151c08f6a1142d7e895e384d6af730c3b0ebb8fef4f66984f887ca9e777a39af4e3fb4aa89afa8152fe126bf1736b515842290b6e0269cb8bf65f68ace05188b7d11f072a92040a250a20d743c6674c5614ac20fd216643f210b3de164d527c73aca00dfebcda94eb629710800212050a01d410061a290a050a01d41007122083dc79ec63f9c2b14430c4911ba713354feab796f288d2509ee0c41fe2deedc71a490a250a20d6d1901ccd9f24c21f73c072f8a8e7078d0057159f19752c9e405d29f0036f4310800212207cf90d33a4d33c0a45a27e096ca7d8f4bba5dd41962400bedc9424216b29ecce22eb020a050a01d410061220b5000972e512b06218c66be7a3ef99a2834299d950bfaa236c59b1d80fc6fe191a320a040a00100012280a040a001001122045547962d22f8982fe3e846ee64f97743755ba633f0b1be8edb0db4de89e036918011a340a050a0180100112290a050a018010021220d94113db5baa18c18ce6382f3268585c5304419801eb31283de1e1aaffc4246918011a340a050a01c0100212290a050a01e010031220efb3813e35d8060369ea4ed7329b8dd9b07730d372da0ae0fcae664eb1ae0a0418001a340a050a01c0100312290a050a01c0100412200a2cc0b06bb240aaa5b14593c26ec9a347b85d3b445a6481f69c413957aa725f18011a340a050a01d0100412290a050a01d81005122049f6334c859557706d2f61ec7005b4f91ad9eeb279556a57936c994a207a3b2b18001a340a050a01d0100512290a050a01d010061220c7a6303f9f72cf3ecdb088231c127abe1487f8e5f937b92eefb166fec6e2404118012a85050a250a2004a1cbcd5179d3199798b939325788f1b2369607726577f0d4eff11d7b3d8d2c10800212050a010410071a2a0a060a0204d0100c12202cfc9e49c81b6d4f78373521439d041b31f56ab1ffd2dddeb8ebae2525db5bc61a490a250a200513c2868e34c8e759e857a63c6f2f0b87be8a1828bfafb790d62b26e404cf1c1080021220886686f3d0bc3b6c318eaae8393f3f230c5d2916a05f37bca11e5a4f7d3896f922dd030a050a010410071220650125dd3667aa5dc43d7ed9f803dfa8842419b7c0892eb0e4a479d3a4450a701a330a040a00100012290a050a018010011220b61a093e4dbbb8713012c36d61c499251df36938411de551266eebed6e90149f18001a330a040a00100112290a050a0140100212207352c00f45def1d8668b1bf1601e097767bfa424c76f2264e2498b67e929243218001a330a040a00100212290a050a0120100312200c3c792e047815b5a3e10a851dbc0127d26b9d5fb6b5d3aadcf0990bd918a03618001a330a040a00100312290a050a0110100412207f0160b950a54b18f3afba196b06ec9780e4fccb8339eee0b1daccbf218c648a18001a330a040a00100412290a050a010810051220af094b53001685196633a24b712e71d32a2330f3c465cb7cddc6c3936af02cbe18001a530a040a00100512490a250a200241a14c30cfee9bb1e8f0d0ea10848f789751fba9f917c856b76357ef13dddc10800212201573e9557fa6094b1fca14cb6bd9a6e18adf38e05c535ee36493e517d10ff90d18011a540a050a0104100612490a250a2006800d436fb76ae146e6257ab27d7a8d9717a3dee5c4afa11a48d182188a192d10800212203391734cae7c3a288f4c8b26587bfbec08a7d8ea1d0b50e60e6d7291301d10251800 # History Proof (HistoryParams::Complete with 3 versions) --- -0ac30a0830120531362c343818032250c8420ebba728c7ef0f89a63eebafab0e1c23bc1431d5c00c43d3f5c2ee0e4ec290f766ddec663283627741e89924ddad64a0a6a610ab895758ba4f835cb7248bad09c7f643936f9733e6d0f2c34002002ab5040a250a201ebcd0ddae05780a3052f0fe1238c1c1bba4323faec7a34e1e166a226790fb8e1080021220394f5a80107e82da7304c4ad7c58d5eba1996cfc7504d2d3c1447fe0a49ebeb41a330a040a00100012290a050a018010011220b61a093e4dbbb8713012c36d61c499251df36938411de551266eebed6e90149f18001a330a040a00100112290a050a0140100212207352c00f45def1d8668b1bf1601e097767bfa424c76f2264e2498b67e929243218001a330a040a00100212290a050a0120100312200c3c792e047815b5a3e10a851dbc0127d26b9d5fb6b5d3aadcf0990bd918a03618001a320a040a00100312280a040a0010041220a5a191fddba3c6589b055b63e078bd153fbf1e29ded81ebeb41e5348259dcb0918011a340a050a0110100412290a050a011010051220d95bc6584da2bb581035b1b3a574eb25354b6df52b5be6bbc45ef21eb44afa5f18011a340a050a0118100512290a050a0118100612208d126dc82633630cff4a768f39a57ebedc43c79be68a97ccf37d81a785d8da1b18011a540a050a011c100612490a250a201c807667d33e4653f79ff38fee84ba33295025b3fba0b9f298aa3c0014d885ab1080021220deabcd07d5c61763f7b56403d7bd5ef45f8b233870334f80ef04b7891c53320918011a550a060a021e80100912490a250a201ed390e74ddc66df0d508c05c77a312b5d9e67033097b183fc14e63ed11d5abe10800212209129a913d13e860407fb3dc59d55740144547723ba5201b02ce9cafa7cb179df180032501fea30c7759f3048e109accbd07dce10bc1fa2dfe71e6ddb200751d6941df53c929afde7bc6221c17cd36af9a930164834f90812c89c28d7b7b3309332b981317d54fc0c9459dd3fb1ec6c260cb993053ab7040a250a2098d5841e64ab676907321d6e54b9272931529e0d94d9acd0724d1f17fc8166b310800212201573e9557fa6094b1fca14cb6bd9a6e18adf38e05c535ee36493e517d10ff90d1a320a040a00100012280a040a001001122045547962d22f8982fe3e846ee64f97743755ba633f0b1be8edb0db4de89e036918011a340a050a0180100112290a050a01c010021220a4359c434a332ee2d53bc675447f4be534ee79267655dd7114223d148463f16218001a340a050a0180100212290a050a01a010031220f503eb8152899830917555c9e6a073c7b2eafcd85e574fff21aa417eb25190c418001a340a050a0180100312290a050a018010041220944ee2e4bf793d67fa35f5ef267262927437f33da9d06c74affcb3abe85897cf18011a340a050a0190100412290a050a0190100512208ebb6c0df98692e4fab8486e4b5158c71113edf3bd69d35063d3032bc2b6746418011a340a050a0198100512290a050a019c1006122066defd89a7e6f2c2e083dfd8f7151f58770c586ede8bcc09d3a34dd3cae642dc18001a540a050a0198100612490a250a209b1351d8bdd43c41b2ef6a5370dbf78ba9e7bb43e10e54fa3aa5da11dfe2ade610800212202c558701c11ebf203a52792bf81aac4714d7aaf3de23fea9d6d18add128b33eb18001a540a050a0198100812490a250a2098598b5544bf17965cdff5e1edd28855483eb01c2af21675b5852dc31f31502a10800212205e97fb41ae681ead896280550ca7a0aa9fe9eaefb32bd0ebcc7db1aee64124d9180142206f6f1f6ccc8adbfd296a004065325af45bbd6ba367bfcbda1f53ded53cfd502e0aae0b0820120531362c3332180222503f58677513e18b0505ba4411f88cbbca6bc5abc50c9adb0143f1c3bfd8b850ba086018006ab15f1ffe2eeb6ec6e919955e160b0b537eefb3398541830a959c17ac5eb175d56f7476a5a603c18223760a2ae9040a250a200ed5c55fd5a7977da8e832ccc275003a4859dea655c979fdc26ab277b073013d1080021220d0a9e69df6b8800197d55cd9c84dc0d5713d0397fa28ee87ad6f64ab9a1a7d601a330a040a00100012290a050a018010011220b61a093e4dbbb8713012c36d61c499251df36938411de551266eebed6e90149f18001a330a040a00100112290a050a0140100212207352c00f45def1d8668b1bf1601e097767bfa424c76f2264e2498b67e929243218001a330a040a00100212290a050a0120100312200c3c792e047815b5a3e10a851dbc0127d26b9d5fb6b5d3aadcf0990bd918a03618001a330a040a00100312290a050a0110100412207f0160b950a54b18f3afba196b06ec9780e4fccb8339eee0b1daccbf218c648a18001a320a040a00100412280a040a0010051220274cf872f402cd9023779de5569d1199841dc8a8b24d1c66403182d0a171789918011a340a050a0108100512290a050a010810061220cf35f23337ef41495e90c86a4510271df283f01396f9818e9c4634e6f619362b18011a340a050a010c100612290a050a010c10071220b90a1fde0e6d8939b36231620d8650ea27aad2365406ca349a663ba95fcad8cc18011a540a050a010e100712490a250a200f1c03715ea311ef4c6964226e575ff0fa982225c0a47395ba149ca1e6849b55108002122087d8b95bcb27f6943acab2a49f04894eb7e10b213c9f1b823596090e7f1e6c0b18001a540a050a010e100812490a250a200e3d1507156738fdf9957dc0a5a4e5f3b1537fd1d1711303492268285be3b7a010800212204c6e8f4694aa2c2ad858632d53e4ea78437478aa2582235c203a0e06370d3e0e18013250ec97d6063025f9294bf35351880df68184e7e6c321fb42a75da5fd5f925ca3d280e11a362d20354c3ba910f70ab8bfc01f344103dbcfa0ba03b64ca8f09ee86daf989a9a787ec5a7de5bc6699f8bc50d3aee040a250a208fbac983b1257f9e0c8ab6c1e2dafdb45538be9f854eec988f0acc4ab685325b1080021220354bd701fee733065453d92c15d43cab6b8cc00320b969fdbc0b41af298ad1011a320a040a00100012280a040a001001122045547962d22f8982fe3e846ee64f97743755ba633f0b1be8edb0db4de89e036918011a340a050a0180100112290a050a01c010021220a4359c434a332ee2d53bc675447f4be534ee79267655dd7114223d148463f16218001a340a050a0180100212290a050a01a010031220f503eb8152899830917555c9e6a073c7b2eafcd85e574fff21aa417eb25190c418001a340a050a0180100312290a050a019010041220ab563f284dcdccec2b241a1432146c72d967321a1df6cd8752ce876bd28aaf0618001a340a050a0180100412290a050a01801005122025f32ac34a4790b138d986eab8b8398090aed705cd2a6a9f68340fad91a17a4418011a340a050a0188100512290a050a0188100612207c709de785dcec76f36ed520978b197610f667756202007a28769d6f69ca595218011a340a050a018c100612290a050a018c10071220d03d76018aba11044a1d96e826ca1469d06e0013b7e62cd50cb79eb630b55b2b18011a540a050a018e100712490a250a208e2b150a21ce5d901477cabc89ab185e208a1ef96047d87361de81d77dc25c861080021220836d6f101ef04f150a857beb4d7e5360e90bdabc33c4578a2eb48f814e410b1c18011a550a060a028f80100912490a250a208fdca9598d5ae6add2fa2834f6f6015bf90e0c04ddb81cb90e1fa19e64f64a511080021220c7f2cf805016d328fcf35efb4c3eec27377d764156a02247bf22e96ca89b19e218004220e3cda334c1c22799c6b3ea1dd5a117d9288e19e434864b3068f0c6d6c71b05530ae1040810120531362c313618012250d9571c5607ae6900f19189bbdc5ae2a15a728160ab557ff711325255014defa8d045d6f0e6113d3d071dfcd8a6c7739c7af5117f264a2ac64ca919a95d5fc1d1dee2b94b3115587948a2627ff2f845012adf030a250a203a439f284f8a66b1c8ac008a85bddc73b54245a690b0f860a7eef6e2f17413e210800212203e96a70e1e874918fbbd8f3d9744dd3289e706b2f9fd351272a40c91230da60a1a330a040a00100012290a050a018010011220b61a093e4dbbb8713012c36d61c499251df36938411de551266eebed6e90149f18001a330a040a00100112290a050a0140100212207352c00f45def1d8668b1bf1601e097767bfa424c76f2264e2498b67e929243218001a320a040a00100212280a040a0010031220c7e5a53f17abee86a4d2ccfc662f19a746ebb540882b5cb89c5804cd8b1d84e018011a340a050a0120100312290a050a01201004122036acfad944645dd1dacb6ddc20e5869d3d74a5fb67972777eb6cfe18fe8955c618011a340a050a0130100412290a050a013010051220e89028dafc247d128d5d316b7fd65e87e134ef9a4849d062140fddca846180fa18011a340a050a0138100512290a050a013c100612205478f6b68510849b452808e14c1c942d8d3f07da2d40ec9a420a8e2ed92495ef18001a540a050a0138100612490a250a2038589ea0b1483b161e01a83bdc4c3e6af61ec3b98c6c238bba6a41bdbda3fa7610800212202a0e948299226da79ec3ca1de456293b1894dbbf91c2aa38d30fd981052475ff180142208f87031bb0f0f7eaad708ccefff2c879e8500e7c2b20e07f5a942091a2aa5ac4225025b7d0acd4b367b3b58fb588b65e1d6fe3902938da34a8e37d1976f46afa9217723b6eb88c76a298cf365d7599946c9199b8f0d5862a0a3545e0673a8a29484646abdf66abc13acc09aa46969cc34c0b2250b5dfbf66632ea76236f24d01b94c3d8e5166e656d25d02722c6431df781db788907072313ab76db54d07be1900b9a9221a8c6cb0aed037d60b9c5b6234e688ef331fc10c09e3589fc60c832a91dc770e2250bf56732a04e9f84433166a381151c08f6a1142d7e895e384d6af730c3b0ebb8fef4f66984f887ca9e777a39af4e3fb4aa89afa8152fe126bf1736b515842290b6e0269cb8bf65f68ace05188b7d11f07225043760a75f11cb424242a7c6942027913071e70558aa70b44be13a7fb7f09b655a9cb71b6c6e1f6f07c69654797efec07cf6428235e360715d078d30ade9cd4d62406723115aeabe6d3d1ec8331c0b6012a92040a250a20d743c6674c5614ac20fd216643f210b3de164d527c73aca00dfebcda94eb629710800212050a01d410061a290a050a01d41007122083dc79ec63f9c2b14430c4911ba713354feab796f288d2509ee0c41fe2deedc71a490a250a20d6d1901ccd9f24c21f73c072f8a8e7078d0057159f19752c9e405d29f0036f4310800212207cf90d33a4d33c0a45a27e096ca7d8f4bba5dd41962400bedc9424216b29ecce22eb020a050a01d410061220b5000972e512b06218c66be7a3ef99a2834299d950bfaa236c59b1d80fc6fe191a320a040a00100012280a040a001001122045547962d22f8982fe3e846ee64f97743755ba633f0b1be8edb0db4de89e036918011a340a050a0180100112290a050a018010021220d94113db5baa18c18ce6382f3268585c5304419801eb31283de1e1aaffc4246918011a340a050a01c0100212290a050a01e010031220efb3813e35d8060369ea4ed7329b8dd9b07730d372da0ae0fcae664eb1ae0a0418001a340a050a01c0100312290a050a01c0100412200a2cc0b06bb240aaa5b14593c26ec9a347b85d3b445a6481f69c413957aa725f18011a340a050a01d0100412290a050a01d81005122049f6334c859557706d2f61ec7005b4f91ad9eeb279556a57936c994a207a3b2b18001a340a050a01d0100512290a050a01d010061220c7a6303f9f72cf3ecdb088231c127abe1487f8e5f937b92eefb166fec6e2404118012ae6040a250a2015b9999e3b7088acdf66539bbece83134e0770dc5763154d000bde7e95a0d88910800212050a011410071a490a250a20144e8c6a3b57b6b115327388870adbc2aa09ce08ea8b3a33fefee29f5e08847f1080021220542f3339afbe69064b843570a4bf95bc4e0298b24267c2a00d0fd65fbd82d6971a2a0a060a0215c0100b1220f16b6ae3af4a348b9340a69d0259bdaf10358fae42f0ddeb0e5d37c3c2c6739b22be030a050a0114100712206918db014b1183194f8ef9cec5739536a9209640f141c7e04b8aea09b43e59a21a330a040a00100012290a050a018010011220b61a093e4dbbb8713012c36d61c499251df36938411de551266eebed6e90149f18001a330a040a00100112290a050a0140100212207352c00f45def1d8668b1bf1601e097767bfa424c76f2264e2498b67e929243218001a330a040a00100212290a050a0120100312200c3c792e047815b5a3e10a851dbc0127d26b9d5fb6b5d3aadcf0990bd918a03618001a320a040a00100312280a040a0010041220a5a191fddba3c6589b055b63e078bd153fbf1e29ded81ebeb41e5348259dcb0918011a340a050a0110100412290a050a011810051220f9390ec9ec86ac4e6896224f5143e2f571c712c667671950d25047598caf64bb18001a340a050a0110100512290a050a0110100612200daf0ca820997695876c7a791929cf81077f81d7110121676fbee44618c1bf3818011a540a050a0114100612490a250a2017e66930963207e6e2d7d279fec57500ce7349bd297977dfdc4347298fc56ff51080021220e1a24e4e3397bf102b51016a146495f67e0f16ca1060799f4fea86c297b0a0c818002a85050a250a2004a1cbcd5179d3199798b939325788f1b2369607726577f0d4eff11d7b3d8d2c10800212050a010410071a2a0a060a0204d0100c12202cfc9e49c81b6d4f78373521439d041b31f56ab1ffd2dddeb8ebae2525db5bc61a490a250a200513c2868e34c8e759e857a63c6f2f0b87be8a1828bfafb790d62b26e404cf1c1080021220886686f3d0bc3b6c318eaae8393f3f230c5d2916a05f37bca11e5a4f7d3896f922dd030a050a010410071220650125dd3667aa5dc43d7ed9f803dfa8842419b7c0892eb0e4a479d3a4450a701a330a040a00100012290a050a018010011220b61a093e4dbbb8713012c36d61c499251df36938411de551266eebed6e90149f18001a330a040a00100112290a050a0140100212207352c00f45def1d8668b1bf1601e097767bfa424c76f2264e2498b67e929243218001a330a040a00100212290a050a0120100312200c3c792e047815b5a3e10a851dbc0127d26b9d5fb6b5d3aadcf0990bd918a03618001a330a040a00100312290a050a0110100412207f0160b950a54b18f3afba196b06ec9780e4fccb8339eee0b1daccbf218c648a18001a330a040a00100412290a050a010810051220af094b53001685196633a24b712e71d32a2330f3c465cb7cddc6c3936af02cbe18001a530a040a00100512490a250a200241a14c30cfee9bb1e8f0d0ea10848f789751fba9f917c856b76357ef13dddc10800212201573e9557fa6094b1fca14cb6bd9a6e18adf38e05c535ee36493e517d10ff90d18011a540a050a0104100612490a250a2006800d436fb76ae146e6257ab27d7a8d9717a3dee5c4afa11a48d182188a192d10800212203391734cae7c3a288f4c8b26587bfbec08a7d8ea1d0b50e60e6d7291301d102518002ab2040a250a20c8a6e76c09c06ba9034f6150bb1b2750ff6d99e5326ea1ff2cb4cff843ed272310800212050a01c810061a490a250a20c91bab31507eedc31ab81376b1e73313bcb1deb353e9b216296e585887f49b86108002122086999e2a82bdab9bb06fa34f435ee0b0083f4a6d71b094c41c8d55f92f21dcae1a490a250a20cbb52fd6307ee73a42c7ae33c86229c2810bcc4a4469a438502bc79c2022d7a2108002122064346f5248862cad808008d360cb767572d442a37271908c3dc53b811b5eb18a22eb020a050a01c810061220c29beb6b771056ebaf2e498be9928d0852b3917ed7cee3f935c82877e9d0d8731a320a040a00100012280a040a001001122045547962d22f8982fe3e846ee64f97743755ba633f0b1be8edb0db4de89e036918011a340a050a0180100112290a050a018010021220d94113db5baa18c18ce6382f3268585c5304419801eb31283de1e1aaffc4246918011a340a050a01c0100212290a050a01e010031220efb3813e35d8060369ea4ed7329b8dd9b07730d372da0ae0fcae664eb1ae0a0418001a340a050a01c0100312290a050a01d010041220b2334caa455b3a136993ba87f11d8db546c5b3b1115a756beec893595c34e6bc18001a340a050a01c0100412290a050a01c010051220217a767f44fc8baab6faafa267d04a32041d5bd9631796afebec88b21aa781f818011a340a050a01c8100512290a050a01cc1006122051d021181467d45411a775a2a37ba770936e7cabff2c213c7a54df846aaebd6f1800 +0ac30a0830120531362c343818032250c8420ebba728c7ef0f89a63eebafab0e1c23bc1431d5c00c43d3f5c2ee0e4ec290f766ddec663283627741e89924ddad64a0a6a610ab895758ba4f835cb7248bad09c7f643936f9733e6d0f2c34002002ab5040a250a201ebcd0ddae05780a3052f0fe1238c1c1bba4323faec7a34e1e166a226790fb8e1080021220394f5a80107e82da7304c4ad7c58d5eba1996cfc7504d2d3c1447fe0a49ebeb41a330a040a00100012290a050a018010011220b61a093e4dbbb8713012c36d61c499251df36938411de551266eebed6e90149f18001a330a040a00100112290a050a0140100212207352c00f45def1d8668b1bf1601e097767bfa424c76f2264e2498b67e929243218001a330a040a00100212290a050a0120100312200c3c792e047815b5a3e10a851dbc0127d26b9d5fb6b5d3aadcf0990bd918a03618001a320a040a00100312280a040a0010041220a5a191fddba3c6589b055b63e078bd153fbf1e29ded81ebeb41e5348259dcb0918011a340a050a0110100412290a050a011010051220d95bc6584da2bb581035b1b3a574eb25354b6df52b5be6bbc45ef21eb44afa5f18011a340a050a0118100512290a050a0118100612208d126dc82633630cff4a768f39a57ebedc43c79be68a97ccf37d81a785d8da1b18011a540a050a011c100612490a250a201c807667d33e4653f79ff38fee84ba33295025b3fba0b9f298aa3c0014d885ab1080021220deabcd07d5c61763f7b56403d7bd5ef45f8b233870334f80ef04b7891c53320918011a550a060a021e80100912490a250a201ed390e74ddc66df0d508c05c77a312b5d9e67033097b183fc14e63ed11d5abe10800212209129a913d13e860407fb3dc59d55740144547723ba5201b02ce9cafa7cb179df180032501fea30c7759f3048e109accbd07dce10bc1fa2dfe71e6ddb200751d6941df53c929afde7bc6221c17cd36af9a930164834f90812c89c28d7b7b3309332b981317d54fc0c9459dd3fb1ec6c260cb993053ab7040a250a2098d5841e64ab676907321d6e54b9272931529e0d94d9acd0724d1f17fc8166b310800212201573e9557fa6094b1fca14cb6bd9a6e18adf38e05c535ee36493e517d10ff90d1a320a040a00100012280a040a001001122045547962d22f8982fe3e846ee64f97743755ba633f0b1be8edb0db4de89e036918011a340a050a0180100112290a050a01c010021220a4359c434a332ee2d53bc675447f4be534ee79267655dd7114223d148463f16218001a340a050a0180100212290a050a01a010031220f503eb8152899830917555c9e6a073c7b2eafcd85e574fff21aa417eb25190c418001a340a050a0180100312290a050a018010041220944ee2e4bf793d67fa35f5ef267262927437f33da9d06c74affcb3abe85897cf18011a340a050a0190100412290a050a0190100512208ebb6c0df98692e4fab8486e4b5158c71113edf3bd69d35063d3032bc2b6746418011a340a050a0198100512290a050a019c1006122066defd89a7e6f2c2e083dfd8f7151f58770c586ede8bcc09d3a34dd3cae642dc18001a540a050a0198100612490a250a209b1351d8bdd43c41b2ef6a5370dbf78ba9e7bb43e10e54fa3aa5da11dfe2ade610800212202c558701c11ebf203a52792bf81aac4714d7aaf3de23fea9d6d18add128b33eb18001a540a050a0198100812490a250a2098598b5544bf17965cdff5e1edd28855483eb01c2af21675b5852dc31f31502a10800212205e97fb41ae681ead896280550ca7a0aa9fe9eaefb32bd0ebcc7db1aee64124d9180142206f6f1f6ccc8adbfd296a004065325af45bbd6ba367bfcbda1f53ded53cfd502e0aae0b0820120531362c3332180222503f58677513e18b0505ba4411f88cbbca6bc5abc50c9adb0143f1c3bfd8b850ba086018006ab15f1ffe2eeb6ec6e919955e160b0b537eefb3398541830a959c17ac5eb175d56f7476a5a603c18223760a2ae9040a250a200ed5c55fd5a7977da8e832ccc275003a4859dea655c979fdc26ab277b073013d1080021220d0a9e69df6b8800197d55cd9c84dc0d5713d0397fa28ee87ad6f64ab9a1a7d601a330a040a00100012290a050a018010011220b61a093e4dbbb8713012c36d61c499251df36938411de551266eebed6e90149f18001a330a040a00100112290a050a0140100212207352c00f45def1d8668b1bf1601e097767bfa424c76f2264e2498b67e929243218001a330a040a00100212290a050a0120100312200c3c792e047815b5a3e10a851dbc0127d26b9d5fb6b5d3aadcf0990bd918a03618001a330a040a00100312290a050a0110100412207f0160b950a54b18f3afba196b06ec9780e4fccb8339eee0b1daccbf218c648a18001a320a040a00100412280a040a0010051220274cf872f402cd9023779de5569d1199841dc8a8b24d1c66403182d0a171789918011a340a050a0108100512290a050a010810061220cf35f23337ef41495e90c86a4510271df283f01396f9818e9c4634e6f619362b18011a340a050a010c100612290a050a010c10071220b90a1fde0e6d8939b36231620d8650ea27aad2365406ca349a663ba95fcad8cc18011a540a050a010e100712490a250a200f1c03715ea311ef4c6964226e575ff0fa982225c0a47395ba149ca1e6849b55108002122087d8b95bcb27f6943acab2a49f04894eb7e10b213c9f1b823596090e7f1e6c0b18001a540a050a010e100812490a250a200e3d1507156738fdf9957dc0a5a4e5f3b1537fd1d1711303492268285be3b7a010800212204c6e8f4694aa2c2ad858632d53e4ea78437478aa2582235c203a0e06370d3e0e18013250ec97d6063025f9294bf35351880df68184e7e6c321fb42a75da5fd5f925ca3d280e11a362d20354c3ba910f70ab8bfc01f344103dbcfa0ba03b64ca8f09ee86daf989a9a787ec5a7de5bc6699f8bc50d3aee040a250a208fbac983b1257f9e0c8ab6c1e2dafdb45538be9f854eec988f0acc4ab685325b1080021220354bd701fee733065453d92c15d43cab6b8cc00320b969fdbc0b41af298ad1011a320a040a00100012280a040a001001122045547962d22f8982fe3e846ee64f97743755ba633f0b1be8edb0db4de89e036918011a340a050a0180100112290a050a01c010021220a4359c434a332ee2d53bc675447f4be534ee79267655dd7114223d148463f16218001a340a050a0180100212290a050a01a010031220f503eb8152899830917555c9e6a073c7b2eafcd85e574fff21aa417eb25190c418001a340a050a0180100312290a050a019010041220ab563f284dcdccec2b241a1432146c72d967321a1df6cd8752ce876bd28aaf0618001a340a050a0180100412290a050a01801005122025f32ac34a4790b138d986eab8b8398090aed705cd2a6a9f68340fad91a17a4418011a340a050a0188100512290a050a0188100612207c709de785dcec76f36ed520978b197610f667756202007a28769d6f69ca595218011a340a050a018c100612290a050a018c10071220d03d76018aba11044a1d96e826ca1469d06e0013b7e62cd50cb79eb630b55b2b18011a540a050a018e100712490a250a208e2b150a21ce5d901477cabc89ab185e208a1ef96047d87361de81d77dc25c861080021220836d6f101ef04f150a857beb4d7e5360e90bdabc33c4578a2eb48f814e410b1c18011a550a060a028f80100912490a250a208fdca9598d5ae6add2fa2834f6f6015bf90e0c04ddb81cb90e1fa19e64f64a511080021220c7f2cf805016d328fcf35efb4c3eec27377d764156a02247bf22e96ca89b19e218004220e3cda334c1c22799c6b3ea1dd5a117d9288e19e434864b3068f0c6d6c71b05530ae1040810120531362c313618012250d9571c5607ae6900f19189bbdc5ae2a15a728160ab557ff711325255014defa8d045d6f0e6113d3d071dfcd8a6c7739c7af5117f264a2ac64ca919a95d5fc1d1dee2b94b3115587948a2627ff2f845012adf030a250a203a439f284f8a66b1c8ac008a85bddc73b54245a690b0f860a7eef6e2f17413e210800212203e96a70e1e874918fbbd8f3d9744dd3289e706b2f9fd351272a40c91230da60a1a330a040a00100012290a050a018010011220b61a093e4dbbb8713012c36d61c499251df36938411de551266eebed6e90149f18001a330a040a00100112290a050a0140100212207352c00f45def1d8668b1bf1601e097767bfa424c76f2264e2498b67e929243218001a320a040a00100212280a040a0010031220c7e5a53f17abee86a4d2ccfc662f19a746ebb540882b5cb89c5804cd8b1d84e018011a340a050a0120100312290a050a01201004122036acfad944645dd1dacb6ddc20e5869d3d74a5fb67972777eb6cfe18fe8955c618011a340a050a0130100412290a050a013010051220e89028dafc247d128d5d316b7fd65e87e134ef9a4849d062140fddca846180fa18011a340a050a0138100512290a050a013c100612205478f6b68510849b452808e14c1c942d8d3f07da2d40ec9a420a8e2ed92495ef18001a540a050a0138100612490a250a2038589ea0b1483b161e01a83bdc4c3e6af61ec3b98c6c238bba6a41bdbda3fa7610800212202a0e948299226da79ec3ca1de456293b1894dbbf91c2aa38d30fd981052475ff180142208f87031bb0f0f7eaad708ccefff2c879e8500e7c2b20e07f5a942091a2aa5ac4225025b7d0acd4b367b3b58fb588b65e1d6fe3902938da34a8e37d1976f46afa9217723b6eb88c76a298cf365d7599946c9199b8f0d5862a0a3545e0673a8a29484646abdf66abc13acc09aa46969cc34c0b2250bf56732a04e9f84433166a381151c08f6a1142d7e895e384d6af730c3b0ebb8fef4f66984f887ca9e777a39af4e3fb4aa89afa8152fe126bf1736b515842290b6e0269cb8bf65f68ace05188b7d11f072a92040a250a20d743c6674c5614ac20fd216643f210b3de164d527c73aca00dfebcda94eb629710800212050a01d410061a290a050a01d41007122083dc79ec63f9c2b14430c4911ba713354feab796f288d2509ee0c41fe2deedc71a490a250a20d6d1901ccd9f24c21f73c072f8a8e7078d0057159f19752c9e405d29f0036f4310800212207cf90d33a4d33c0a45a27e096ca7d8f4bba5dd41962400bedc9424216b29ecce22eb020a050a01d410061220b5000972e512b06218c66be7a3ef99a2834299d950bfaa236c59b1d80fc6fe191a320a040a00100012280a040a001001122045547962d22f8982fe3e846ee64f97743755ba633f0b1be8edb0db4de89e036918011a340a050a0180100112290a050a018010021220d94113db5baa18c18ce6382f3268585c5304419801eb31283de1e1aaffc4246918011a340a050a01c0100212290a050a01e010031220efb3813e35d8060369ea4ed7329b8dd9b07730d372da0ae0fcae664eb1ae0a0418001a340a050a01c0100312290a050a01c0100412200a2cc0b06bb240aaa5b14593c26ec9a347b85d3b445a6481f69c413957aa725f18011a340a050a01d0100412290a050a01d81005122049f6334c859557706d2f61ec7005b4f91ad9eeb279556a57936c994a207a3b2b18001a340a050a01d0100512290a050a01d010061220c7a6303f9f72cf3ecdb088231c127abe1487f8e5f937b92eefb166fec6e2404118012a85050a250a2004a1cbcd5179d3199798b939325788f1b2369607726577f0d4eff11d7b3d8d2c10800212050a010410071a2a0a060a0204d0100c12202cfc9e49c81b6d4f78373521439d041b31f56ab1ffd2dddeb8ebae2525db5bc61a490a250a200513c2868e34c8e759e857a63c6f2f0b87be8a1828bfafb790d62b26e404cf1c1080021220886686f3d0bc3b6c318eaae8393f3f230c5d2916a05f37bca11e5a4f7d3896f922dd030a050a010410071220650125dd3667aa5dc43d7ed9f803dfa8842419b7c0892eb0e4a479d3a4450a701a330a040a00100012290a050a018010011220b61a093e4dbbb8713012c36d61c499251df36938411de551266eebed6e90149f18001a330a040a00100112290a050a0140100212207352c00f45def1d8668b1bf1601e097767bfa424c76f2264e2498b67e929243218001a330a040a00100212290a050a0120100312200c3c792e047815b5a3e10a851dbc0127d26b9d5fb6b5d3aadcf0990bd918a03618001a330a040a00100312290a050a0110100412207f0160b950a54b18f3afba196b06ec9780e4fccb8339eee0b1daccbf218c648a18001a330a040a00100412290a050a010810051220af094b53001685196633a24b712e71d32a2330f3c465cb7cddc6c3936af02cbe18001a530a040a00100512490a250a200241a14c30cfee9bb1e8f0d0ea10848f789751fba9f917c856b76357ef13dddc10800212201573e9557fa6094b1fca14cb6bd9a6e18adf38e05c535ee36493e517d10ff90d18011a540a050a0104100612490a250a2006800d436fb76ae146e6257ab27d7a8d9717a3dee5c4afa11a48d182188a192d10800212203391734cae7c3a288f4c8b26587bfbec08a7d8ea1d0b50e60e6d7291301d10251800