[crypto,test] Add a hardcoded test vector for SPHINCS+.
This one-test set is intended for quick smoketests and benchmarking.
Signed-off-by: Jade Philipoom <jadep@google.com>
diff --git a/sw/device/tests/crypto/testvectors/BUILD b/sw/device/tests/crypto/testvectors/BUILD
index b85d1b1..226ffa1 100644
--- a/sw/device/tests/crypto/testvectors/BUILD
+++ b/sw/device/tests/crypto/testvectors/BUILD
@@ -21,6 +21,11 @@
srcs = ["kmac_verify_hardcoded.hjson"],
)
+filegroup(
+ name = "sphincsplus_shake_128s_simple_testvectors_hardcoded",
+ srcs = ["sphincsplus_shake_128s_simple_hardcoded.hjson"],
+)
+
autogen_cryptotest_hjson_external(
name = "rsa_3072_verify_testvectors_wycheproof",
src = "//sw/vendor/wycheproof/testvectors:rsa_signature_3072_sha256_test.json",
diff --git a/sw/device/tests/crypto/testvectors/sphincsplus_shake_128s_simple_hardcoded.hjson b/sw/device/tests/crypto/testvectors/sphincsplus_shake_128s_simple_hardcoded.hjson
new file mode 100644
index 0000000..276c2ca
--- /dev/null
+++ b/sw/device/tests/crypto/testvectors/sphincsplus_shake_128s_simple_hardcoded.hjson
@@ -0,0 +1,19 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+
+[
+ { id: 0
+
+ # Message: 'Test message'.
+ msg_len: 12
+ msg_hex: 54657374206d657373616765
+
+ # Randomly-generated public key.
+ pk_hex: e4c50e9b934508d568af79e17ee2be34e32e08acc64ff2b4c979334cf502a67b
+
+ # Signature generated from the reference implementation.
+ sig_len: 7856
+ sig_hex: 9276a0981317d75cc136defc338267bbbe59cc7dfd0d674fc72616d45665decfd8550b17859f72a1f47ed627e5fa7a1079b0b7701d5dbad5e3c04f6f0118fdd9644419406e1e281807fd437974ed98a0e7ecce9113506579b200e4a2a56390b6e662cf0fecb9e2d887b1438aef528825c794bf2f9e3fa3aadec9dcfe0cbd480a75f0792eba394a804efa0d22e81f9cc2f706fd267ed3e8ca29a0f3cf1814f02fcbde8c599ee0d5e5244e8dac497d9d110d5ddc2f4ab38bd502bddce13b871e79096195363c39ed5b1e8140299d0cbca7e93324c708817edc037de876f92cbf1d5b5b34b6a6ff61df7a31e4f884dbf9def95765d927d5de6e3063dae904444f0bfe9cb1f466f83e5e6a754af8e73d009ed955468f8061fdf2bbc5ccdbb38e19346b4d762329205dac996ce56ad3ad56bd9b85e198c9ae1afb978e02550a6a799e3ff5bce8cc3f4fbb3dd0c947d6cc1aa048778b0e8aab9ca50efc5e99ee980c6b7882e7767e5dcc6bcc7cc9863d0b73153c8c68fbc33f627d07b008d923680eff5f38bd01bf09148255b93547abdf1e24bb8a0a3a7b7278da825e78568deee22787065d57f087ad6dec39d9727faf91df1a97876337fb11fb4ccdf105cf3d740afceb56a9f6f9c8f020798934b4b8fe5bfff1101d4d79a85688173bd094304a9847117e5dc85bad867285ee3de51ba2a510f7c7e132e58a88a3573f78f1fa0d6eb6ef3ad7d6c35b1e33bd2a7adaa2da5aa41465bd0c7c340227dad92781eacb58ec906668f9c3f0d9a34525dacb5ebeea1fccb691af06595bc7481f8f19e19d302b820330579bb458b52ea3fdfd17a36ba38dd655a4fe51961698f9b9bbfde940f33dc874457775f00e9134d14992005fc4f351a8312378416e94982c7ae6477ecdc192fc8a1c8baaa78447a744a536e6a56cdb3acf4b17e93b68142f92a1902c7d355e8d33cf953c74b95931e6def66b881b4b4b7f55b0eb9109bd147ff5091a2ef28327cf0fbdbeaec08a490e9dfcca315db3cd5d5f7236e1869872f31154d3bd1b737e666223477987fcf93d74259672d913414ce5405c5c83b6a12b126d5e324e01f6e08f171f2c43c7c9acad9fd40e985fa417e3fcf14e26f3257fd12f2e42744e73fce7d93759bc54c4eeef474dec5ec457fadc8eb13fe3819ca32c4fde76ec52e00848d345a3033168493aaaee04237a31cbc3e3f48f6c85759cb7cf5a761402c4cada83579bf989e33abe7e99b9f4e2da8c25a8592c29d98ff2685c2af6decd76e07df2281e966e8dddbcd35948931705d39f8a2e8471502f085b72b697bf0ecf0facff1a4a9893302a4a9c1a3e42173f53e21f8e1556689084e36bd426c40a1cde6441203cb23920898e83516ed6bc333f85232a729afcbe4880878181d15d05475c3af460cfb2925f66beb961b4c97bd559014c33029b71b904f0f34c7c10cbd14b9a767e1e3a4294e6df22959f5dbe62c0702e3bf90df973b0ae00c3ab1620857d58b2160aeb53f622643644eb7db4e73ec5b26893da2656316bb88ed406ee63d481c7b1d5a009e2acfb70b1956a55b04d3000515fe85eb2159af6801993d2853a96197db8260f6651ef2fe9cf5549a462239b820ae75cdd84245e34ea7750ca214ac7dd8e3f410f12a916d0dec55e1e81eb7b84341e267e12a969702d9a200643b643bb448263605a197c7b354ebc3009bb7b58e15b369f2713eea77841ba0b7face766901bbaea77a98e7b5e3bedbdbb7e1a4d61bb0735e28994619b2bb7f3db405472fcd22f7d3fe5e421da50a9371e10a36361b12eafd31eca7447dd799abeab052103ba381774403c5f5e4c3a1fe8b97ccc43927faaced473d0436775811ac59f93f8165a99f4e8bdbf38efb28ae5b272f0eafc454f3f8b793b75bf7ca6e0cbb0fd150fb9c6cddc3737ced7989fcf0a070b5d2a62373e920dfada0624cb4f534908a0de785ab5f77bd66f9f0b12182040bfb017190a260df5be53e2a28a5854fc3102dbc0e117978af4f079ba7e87e37dc08fb78e226e56c62edd11198f5e1e968d7bcfa0e55672ac53159c2545959034b94d8f5d624f102b27a69227285e46535707d157d286156f0dff6cbca885fc8e586a17544d2d6fbd4a48c8a7e3bd495e3baa8d6688069a8bed3812d583fe0d0b377e77d2e42888243250ed7a204b033a818b669504c9457f576bec8c40927bc840ee1bf336aa229cf14f5783bc167e584132ebb2f78be5939e40afd7fa831da6e0e3c40e0b4ae7d9c82642b3ac6f41d55afa3ddc60b706bfa7ccea8bef644a6539211e3df4ddac490c3a5fadd1d990f735d0b2690340b6001a0c116b426133332e51fcfbfc0168fe30635a2e6a2f7268d8196daa132ed0d85f58150545e2907692c24163c7ff60ee10f261690301a598cc27f417677ca23d413b940ec5d534f0031cab96ed20cc786360ffbc52166c28f806f4cbe212c41be187c5cefb5a945603729bdb06503cda2a8572d843112b417ebe053858bb42feb12328fe122edcad61cf4150b618517d1a4e24119ffbbf909201f97a16f694c50ec8a1e0a9c036ef95e8c40ce176964de77b16978342430e618491658e16378557c09069cde9b403512a66bae2af7de071461747567e2f24d3af5e58b8a8f508470950e18a712255caec0c7e644d0ccf8864f9db1f408273feea85b4cc0e993fcd91014838666c5e1b68ecb339db14e4bf13c3f0dbd39c4d7b6bcd5053889755e766cf7e9c0a6ebaad8b95a7496de8a7cb3e7be513260da2522f35f23847ed7b5b7db22decaec5b2d166d8f724743703668fc125d7a04b7c7f4f1dcecc2109bd9fbe5b514051165573a8a2738ee6841be4fb00369fd984fe36322d8dd7a3395c35179ebf8fb7e955b9eace3306fe04f05ef66031bb4b3df4ec7b1c4474ff21d78f43797b2f7ff41cfee85408d14a143e14272db6b64852c8add82fa792e92f1b47b6e827d0a9cfd280bd5c627434092f14790346386b8e71f1b98cc5724d266da308d4ddc6ea4c4599eded7b39a31f6e3e098d17f7fc658815f1d18dc75c690146fdff4a5cb99485adb8a71d8240425c3e833f8191af1759008952ea449a78aa4b2fab8e350e3a51ca2d91993a4bd9561fb25efd4b1e8cf526568c99544400d58f0a2a1925d855a44f838385dee7da72bbfa3cd8c0d5436d0d5b376a10286b210516825594cc502a39eff3412cde985a31e0607711b5c79cab6522e1740ccacdc5b479f1bfb156023b454993241e3eb9c24d12c2376ae075c8fc1dda466b14de81006b27a62585651f99a381f9fa7a9061955d10993513fe3641af78d9383ad10d0987271cf26e7ef16d59e9a2115731db03317fa1c24f137e710e343ed9dfc7437f33c846a06f8d741941662eba7b47b13acd41142d2bd32fe3f027ad3fc38b6c486d00e9f97392053b087ba5b98599476d99a7801c3d7764327821ed91705b76bae14c9b9f6503b40486b0cc1fe17e9e254cdc6a067e02602f444a8534c785b770461deb2c04ba5de283d123bc87bdcccbb89ef279184cfc3ab0afc47087e1d513c766c07d64b8abe7b21b46f7afa08c3aba79e20c1fddf0662e7627fc16f4fd5ccec5966c6574205a2e0ce6bb25d7639b68e0a8ca5e0ad570f0da3027d92724cd426e72728d50954abb353c024a8cf7b85c8d89ac5bfef498569cfcbc69f19078f911ba0a66a97e87cef9050e3ca838822430cc2ee86bebd68da4d280c8f8aaea11b729532cd0689799bff209fe395dee7183ae176ed085881722ba1f9959d78b17c2d5655f40fc536bc515c34e84327516d26ffa55bfb96809e55855a03eadcea22d441a9b646e60c5fbb3465719bf0e9ac6154fedd88e782c1fe7d5cbacbfeb092b80c4cedfdad729028650d9046d5392247fc541890f42cc98601ea1ecd15342a9f8548dff2fab812c95d2ec24e9bd00aaf98a623bbbfbc3e7a2eb4e5500ae48058922ea8ae8d6e4fce56bfc8f403bef2ec212a0120adc786cb458af6102779a3fbe4b87f79711dc07139475357c1aa540844152dc7934c9e7ab2ac14afdcb1886edc70e6c2869c8cfc2811de5e73b8e6ce29ddec574e9694299383df8410a6070428862040bf8f90e5f8333f3197035c9692b87d900bf17c46dcbdd82cdd4b3bb1ec15cae468511a35df2a3a9489658aa299489ffdfd416ec42d1932d8b99ccd38204fd5e21ed5ad008659539b4c40665c9a29cbcf521cad2f7038be2b5e25ea8d8370e30faca33bdc0c09f684d07bb221d6aff2271a057e816eeb8fd1f063afd983126a7b838a8ed15f60b4977a2c4d126f69fbb7087fdd059499baf8b3f28685095660b8f87e3c6cc6135590c0338706b07b82a5b84a2c9af12b3329bc5894d03b78c750eeb8ad44915f1141e8ec18fb76d321535b649f210de30e8119141f16cbc759f4d23caab151455f5817d96765690f11d4eb677cbd692fe43941ef5ab30b2bf60d1063647f55d5ccb287d02cf7f16fe80dca234c862d8fb6583f754c7f92e2e58d955b5624da191aaa813742527a912772daa3d58cef64e56983fcc360aeeb82f8affbcdf82dd9582a42150fce80f3a35120a307fba262f6ff99fc88992e43d517f2d7aafd31be3658b941c75e2a9d5f4f3400c892fa14239e3a214bdb6e1d8f753e1e027a7568a50be7a89e7ab658bea7ca059421aef65937f013a5d6fdbc2fe212606491117656f99ae333bf9c100984388daf2b95dead7d9c6ee2b1a204a2ed2cb297f52093486b3be1c6bdf7ce3d2221ae664cb5238c5aed9370113958ccd98f741b28a42effd2d52af150f84936f281f155938bf3c0e3c57b046e0a9abc44e760bcf635baeae5b6c649729c6d296e741b644337f4b9e3fed0feaac53eebb801d2ed4f1b3d109a85a352b91e4f16c97172cc576ee46a0f197b37f76aaeb0cd3a571eaed1b54b287371aab1cd0837a6060606a77d4b851b126fff548818f1b7ca9d1bc5a16382aa29441564abff696d7d813b4b8169fd3f95004171df7d47c68924b606a7c2d24504e691aa2ce2efa002cc49e3175274a93cb3da3846897f325994a26eaf2fe8dda889e1ac0e735332edfbc0bc90baf6b44cb0fdb74282c29796eaa479748e19ee005304ff0689691626feb784aa6f984aee05a4eb74908b1e0c88b3db63cc07eaae5a5e000f59bb7deb003385ce947b6198c5b285a3ac4af6f51783994c145505f8b8201e79a22c44b761212e394fbe138086aff1bf5ecdd97956da85010c7d7d5bd7ae84533b612eaa8089245cf8e39bbb5dcd36f7279b712c394d4736c12faab2db3e1770c7276ddd86fbfb8d009558ecfb9696b91ca221c1824a3800a86dcd541a8a3db7814d133d8e15b1d4e859d758e8ca0c46cb8ca9f843f2f1d0a306fa31ba99e24a04735aad2bf3926ae570605298c838d46d8755ba52dfdccacac002691c9536d34663f5b38dbd4153f205ce4ea39a3f34d8219b4d85f2bb24811b36f67efe0604b336eeec75108f69154329773fdaab3ee85d7ff36b623afc0e2de8978c7a4f1e5346d34d8da64d29772cbb4ea56b8a4dc85ec5aa83800be4b3b5024cb127e7970b83c0613622544850af687030b3a46d1593e03f53564e692bfd18152d075483b165ac9b62e7f7b95571d7e1b04248ec2077b74923acbdbf11fcc31e0c3c09f49308cf1eed82e8096c2742c0d2e030ad7527af30ea3f7d34c1c397cf1672e09a0ea55db668c6fbcb6c359121cb94641060c4d7b99284ce157028fc0b872cf4d86c6e5552d9278906a04a41e2d46f3ad733435bbecbc094f88cb1e307b8822b774d6d153099077d99b000655880b02af30f01880682fc30c423cd4eb2e9a01e589e38617eb13d8371cc9e8b8f5a480ba84e5ff24a65e6a593fbbb6c24f397be6552d56f101b5b3b4eba6d77c154ed8d7c5dbacef40d4d420ad84d235560c13e54dbde524233c90e665d671deea39f221acb3b5b1dfff27c5ca3b245487a5dc049d71ac01e47bdb45fe184f27f4d66b38c02237f04d9312394d5d451aa47e7b49e58d9193b2bcf606fc3502324a096af4e4e48a4e55f8e532362667aef51cb55b768cae711b6913d649420e51afc03d2519fb5ac7ed35b07ae75fd6d11b36b1c0a2bcae656fbf49f5a9ed8ca315e0bba946967c8c35b8174eac0fbb38c59b0ab3d6471af8670e1d3827e3a850f70dd2556e261170699ff95b576573f5f3b4ce945ffef510de0e81706efa5c539a74950f4f2edb4f011c157fb651e68252ae2a4f46c5cfc16f17ee7f7817495aa459bbd89317a45fa68cca6c47a9df212997fd431db8e22505245dc2e241e12ad2b328a4f3d06da0980fafbbbeb140762f5d4af6c4c7538eaa1f8748267bf429d33e968c816d78b2b196a98349c741cc965b9fca64c6574f8a5c98848de324dd49f38f49b75738331c095df0b22b156121320977b5f92e72182927d3ec07dcd45661b2240eef4003a89db06db2b8da36235425fc63e61c5768d71e7edb53f9c06ee8386286f84a3286df80be500e1f79b2acd0fcff2f066862fda2d6fbe4c5c96668bf8781919d820a74e60e236bfce7ea26e0bff4c977219fa4b3d38981af7bf30dc0b79eb8fa17ec39cab80f2e0d8dbc7f3228f72fc1f6658fd6f5631045ab98d7698f68ffca054b7730df919c5f84520f8c6a2113a27ace7f3932dbca5831033ed2a04d725c8d3ac43a9c9bfbdef07020011a49f160cbb6fc768720189ef95dbed9a1efc683494544f41f429604ec8b9ee9bc2e1d7857c08c37e8ad84849a148e90b178583f572b1832d316e17abe3fc211b35b17c9194ae9560ac47416b96fd5c63bbd3c20efe4855b05eb367579478c091b22a123bd014275a245c564471ec412dd4b9c0f4efad665677510c78e380886e5c151b79603b784062d7668e661fb3a6d9ec835d7f53b93484045e0fe7e094efeadf8a18cfc87e5099d65c0896d589e9c45fc4d395f438b970d55798be6676cc0c653c23138fd3ff58f6da40c90bb971df4553d9d2a49755ad0cb064b450b01201ffd9c6319b9554310ee00c49ff8c547caef74e02ed8fbdea42be21162fb7ac9c77d1a8066d7cd7688e181407e3e96ee57119fbaa5b4b0b2494020e639320c1e448941bf222b67895bf9460e884a719d55a9de8616d03527b25c641a09bd15f4f5314a48de5d593e9b8e86051a4faa97afb0df74ef9541faeb30cc8e706d727b6386f865f4d9a319b87b4fc55b123b8aec7deb58a7359be0ea29edc15e5970e6b52ffb8ee9fc4711902bc3282f55a09a7c4709d3f45618b24123f79f286783fd1b081ec69f9a3e820a50792eddd73c679f24a469a787dc702dcca3f8f0d9578deb1c182fd4847a6e5ccfc676a55e044a3738ba8f655931a0b177a1fe50213d284e985bfcab1b26708d033d1fc638170158c8dafb81db5798f6570d8cbc7b614b47a3e6408c90c4d3fdb44a26d7a2a75e0c9c6997a40c29fbe1feb4d1cf47ffa0068b9408f9ad88661c68bd66f473967f8749c67a3c85de6fc42cab9b80fe0a1f1907c3e023749f16350a7625d35a5e2f8b99ad808cc0499eabff226ed2648fdde9c6ccc4cf77efcae7ed1a7e91d418c69211377f920face07b3a8d565db380e3be53aa4c4ddd63e0dbb4b5bd0e8d6b8b98bb0e04af1ba6d9084be637490f5cb272e270bfd570f82369e7daded47c1d2d7bc596df06eb728e336d365a5a6d0efc8da4323b6b32144a6fd6d1aa3082e13cc4a27e03561ae55fae00e33cc78e193bf9070b489cc382df4de480eb9563d235841322df8a99d20b90dcdf58f41618e7c2be96089df0326e78b580cf65ccbe582105e0eb953140d53f087906937b0ab166076a07e9728d244b5e0a68f8939c27d2d4472924ceb0bc1435f56859f29b61e18334c9b04a537032014119c137e854ebdc3e7fa0203335e84f382c056518f0a12ebba862c0bce3a82b9c20e542db5e4881a2657e88471a59e3b7961ddd3a8fcb487e46dcef0564ce6c8a320720d150ce106e08b99c42dc917067c6d8ee399e488809987e782abedf5690c83b0d634dec127c3a9566758a14055ffa019a04a192c82a5ccbcf44901cc6ae6d388ca33dc9ee9c8f7acf569efa30454cd79d9eda69de85557c763d68876c8f4a35ddc143a499205cc211495b1776bb8a06fa265859dcacb389e0212af1341c36961dddce4444d8bd71ae70f22c6fda258b006ba316dddfbc3457d75bf0e3d96be02ca31db40df6e9c7981264111fc5f551d7e82dcfc5c3c38980481170ed07ed6a2addc1eca279e816a81432816cc05ba496bff4fae18775bd05a13ff400394b0f581e3c174b238fe6718ef414e0149229c8b803472e21eaf35d870bdfe2239bdeddbf3d30ea95f7e32ec67caf9a615c898102185d64681e03b571aa19eaed46a36d3a8be623354550b5f2e3d39f6ff701df38be7662f9ca454109765ebbe6662b7cb704b0563bfcb3cdc2f43f148b85b33b7f766a2177f206bbf110ef2988e441af8e05803150291ac1117253c75963d904e7ef6839c0200b285742316835d8f1567d306c8817046425ded6b25456c22140b61fb9fb89089f215ced55ce0e9091521ef178d25eeeb228e87ce2df0713c348b9108dff35e508bc36c4e42cb3ae7e7ae9ab41703954870387d55f997784e88a81d880ab042f7f74631ce832c4832f56a3d4a38f3b8be820e933dd6a9c09a4915fe099fb968bc88021f3a126cff69da659b917138d10b271ad75c71c43a244379ee987f6de85805c754cd1d41183100d00c18c7170d5e132151b177f6a7692c13ff8f45e942628ed3c7bf638128da2139a44b7fe456e02f1e38a2ac5926f879997d020e55ceed354a43c15a0191322ce42da30b180a87826f6c2f230af4dd03b070098a8255dc5112cc193ea7247580dec79da3de3ad4b2daa11b779497addb4ca26a4a7d685307422b4a1799c168edd49e361f2011873bd7a0797f560bcd2bc756a11ac0b3ca51358fdc7d2f2e72d9797297e53d739c0cb4fc7e350b3f157bfae0891d8ddfde013568364f80db1610308f1442810ac3d7fd820cbff91348f3211196fd4516e0734ce503389c4da442490e4bddba989b9d825bb29a7adddcc119cd9e29f4e8d13794641469d8ee9fa3f1fa6400bae925ed20f6bb4b25bf6bbf5fe964dc3ee3e31546477fae61db438aebd4cb739353880abe6925c5a3b2fcf901d69a32a8d389d601fceccce376f1b2494eaedd4fd6f4bda5395cc7afa50f238cb6afec45bf6a5d1f094cf91f116e8eb88c34971eb6a0149dc2f1609a191681867be79788052e49c40353448688fa6e5118cd27a8ed25a82f64b06d831199ef1318544221a6fa8493bfba6bc312ec539b5addc50ebb688843831cdd66a8a0a36dae71c1e3bfcc9d888b7a7c9bc5d8b40b01545e8e69e70b2328523457aee516e428f8773b474ea5f668f5716686ffb4b5033137efe5e4c0a8e4a27f00ff8c180c642c802bc3d47ac4c64c83524781607d33a852ece417f3081028b118a3a75249139f1c69f5440ee43a6e42533a60b3cb4e60802d958d34d0f8b6c2d0d892614e06997e967b100e680b89865127cb0e138d11906fdf1c9ada212a77fb30e5674224b6c8a1d44f3d79225ea59632c398868fee3ef5b75d51a9350d7221c01b0e6228d4e364345e3427f04277c39137faff58ff28acf35cff0b1a225e4a9b98064c4770a7308b8090c3f3dc02770f84ec5c8ef56e34d4da8c63c073a9fb8b2ea0617d278e88425560c97ee31d4922e199f13dfb082d6cb97a95ee26a7f5767d6d1eb8cd1635aa5fa904bff7c4a63d5855d8de3cbf59028307060af7a5781daef3dc798945229893b2222a80809bb30ba8d902affc57c4c5da70c9237434cc58674f6d856c36a812a98a056405efbf4f9c9d74923400576b83723ed8d5f46519e0620215e68ccf926c33602988ebf653e58e9b2e93394f8bb733283c1a53a041c8e72694699546ff88ce1f0453ae527b5b956ab71084b1483011685643a1245486e3749fd0e7fd7154e6f43f703c74024fe41ed71e27b3e33cd00180f1bf502e8c36834eda6531a5ad8b1023145de56a0cad4ce8bd97588a5c64ff0ac43113bf11e7c73078603a574b1737758f6673d38ec908c6184d37472cb8d120b1e18308b50b4df0e2d6367a7a81873af4145058314283472a658c1c2f0f4a7e8d1104b844eb4f3814d535807699fd7d0ef62317049549490462dda8201c333e6118b57671549062b688b1c8914808a9d4ab2656ed93bb5145e01c1fd756e694cb9a169cb3b6b6ecda2f5f150df356c5868552a48a7e56375f2eeba74d0971851d4add3b23602842be635b0c294a232076377dc727df6542a0174d20c3a0cdc43a1582972e9ae1011aa79295f2db9cf9ed4420839d93f8c773e2da0d7e35fee73dca765f4c88e80106c2d15bbd6fe5b67c883a8c2b7654c6db1f440696d6d22b163d50bc43b7fec713f1d4c6a2a4cc4c48039b3c40ab7907c782580d3c4bc80c934d7795e4b0521099f3720c5a418cf0839d8a685876e2fe93445b7eb8fbc4f5c324d4bc39d045e3383e57ea73a0cc54b44fbc7c43ddb97de515f6f6e77355b1356d4d0c126cc2b46a0c20fa699e389f7989ad853a4fe992b1eba7f668d8f6217faa76d66155e9434d64a9ee19b3dc90c0a87177bd2915790ebc5e4772f2ceb91492bc6d7452e81e55342ffb59eac98dc4ba93ab89ca0dc851dba14f16b43ad4bde8c6d91290efc7dc64040de35c39f27d8b07bc55f6bd951d9210a38d52b9d052bcba3881d2456d40df7b004653d451083d19c60bfd71b102765918bc7a8e59e98f227a6d57145e776645b19a03bad37445b2a8b8820f2567ef4041f3a2ac6cfee1c79bc051438a82c7379b7daeb4d1f39bed045c899ff96957ae3b1c62487926f482a76b65c905515b38440a7d954cfafb06fafda3e6a44aba804b31737221506f06145875c0cac967e41a511734c517b02af5aac3881fc91ddc3d55731e9f7c93f83f4c4840369f0c1bd468f85d0bf820c5bb02e4e9469f2955a60a1e5b0fd5fb5a15106b6f2994611858e5acea25b748b55084dab804b16740230735cd401107735bcd62b30bc7f13b1ffc3419acc52b5
+ }
+]