From 3d6e70e1dc0eb9dc8008e8a0b627c9e592bafb9e Mon Sep 17 00:00:00 2001 From: mattstam Date: Wed, 14 Feb 2024 12:50:59 -0800 Subject: [PATCH 1/3] feat: is_prime example --- examples/is_prime/program/Cargo.lock | 463 ++++ examples/is_prime/program/Cargo.toml | 8 + .../program/elf/riscv32im-succinct-zkvm-elf | Bin 0 -> 116288 bytes examples/is_prime/program/src/main.rs | 32 + examples/is_prime/script/Cargo.lock | 1891 +++++++++++++++++ examples/is_prime/script/Cargo.toml | 8 + examples/is_prime/script/rust-toolchain | 3 + examples/is_prime/script/src/main.rs | 28 + 8 files changed, 2433 insertions(+) create mode 100644 examples/is_prime/program/Cargo.lock create mode 100644 examples/is_prime/program/Cargo.toml create mode 100755 examples/is_prime/program/elf/riscv32im-succinct-zkvm-elf create mode 100644 examples/is_prime/program/src/main.rs create mode 100644 examples/is_prime/script/Cargo.lock create mode 100644 examples/is_prime/script/Cargo.toml create mode 100644 examples/is_prime/script/rust-toolchain create mode 100644 examples/is_prime/script/src/main.rs diff --git a/examples/is_prime/program/Cargo.lock b/examples/is_prime/program/Cargo.lock new file mode 100644 index 0000000000..76facb02cb --- /dev/null +++ b/examples/is_prime/program/Cargo.lock @@ -0,0 +1,463 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "der" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "tap", + "zeroize", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "rand_core", + "subtle", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "is_prime-program" +version = "0.1.0" +dependencies = [ + "sp1-zkvm", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2", + "signature", +] + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "serde" +version = "1.0.196" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.196" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "sp1-zkvm" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/sp1.git#54b64b646d18cabef3307bb90167d23470736dc3" +dependencies = [ + "anyhow", + "bincode", + "cfg-if", + "getrandom", + "k256", + "rand", + "serde", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" diff --git a/examples/is_prime/program/Cargo.toml b/examples/is_prime/program/Cargo.toml new file mode 100644 index 0000000000..aae8b3ea09 --- /dev/null +++ b/examples/is_prime/program/Cargo.toml @@ -0,0 +1,8 @@ +[workspace] +[package] +version = "0.1.0" +name = "is_prime-program" +edition = "2021" + +[dependencies] +sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git" } \ No newline at end of file diff --git a/examples/is_prime/program/elf/riscv32im-succinct-zkvm-elf b/examples/is_prime/program/elf/riscv32im-succinct-zkvm-elf new file mode 100755 index 0000000000000000000000000000000000000000..32fe459e994f8d60021884d3976517d573d445c0 GIT binary patch literal 116288 zcmeFa3w%`7y+6A4b0#5#$R+`i!iGsgK!m`M1gQ2*gh8-YQ4H4B7Q)T|sgPhEJUr*L z6DAWtsjn?UJst~%fLLv{V~DlwX(CL}o*r9k0o(eokCDgm__y&9K#b&me{1bMc>#j< z-ut=#TiWfOz4v$g_E7rbt^BuUKuC$kS3J*~+w*;L#Y?HAvsGLz{nkEO9x z+!_Bi6(#9v!82W|b9J{yza;h%{!15qXBqSc|GadW{F-wwV{~cs-uXUn3uE(koBVnP zfY8;mzWQ4{ziaX<57k!UBDkpjjYn$A=x5)5{CnS*|9Jif2L6G8e_-Gr82ASU{(p#p zp$cP5*}f@;Bz5{GULyM@)XBc__shP#(TXp3vf|4wR(xY_RD5Qs;+uGfgzpl*OTN7A zlA&tM+MuV~^*S?BbY^eVm@y#0iW*I3rw0Go9+1I|w0zl4%V)+wlU1@7$<|t!p$C|u zr81~^b}StDuGOHX8d@E*qbc~7!t4f>ZGj%gw|`Tvtz*{6??_5cE3>?s*LrVfnm=U^ zi`DN8RJQ-H(`xyuVr8Yu^nFV{ucH~Y9fK?uRVrCnr}s)Qin>t=&zcgvpIO7AS|aP= zkCpMQERu6AQ*u&Sq)|hE8h&4kcR`leq$iCm)NU@iDOo z+EH@qn9tnFd}D5wB4(?iWY;MX;7%DQDUorlvNFC-j*KssmCGeLa(Szy0FRLg#gcM` zBmwv8(lBGqz?;z!U1LWvei$^z!YvP0XRsE0@ABnd!hG52W6b^NXEeusBpdL?Rc31) zU537rStsJa13fc|a11yY;9!7*0S<+;$3==WXUtL>>rq$CWhDzpk;Yjpu}(Wh?+rb}DHmQ;**@wd`u!B}%Ya`7 z{4&vv&wLtVk(jM!U|bkeuEc!fapeI{tqyd8yDmw#9(LMl2`E8&A7IvyCXBOKisazC z%1{@0&wd857NgwwUi)@(_#QdPi!c2XF#QZ=F>!)VGD z&%?CAmREeYGPJ??#*C&}%o?s`7#%}cbJOFG8x4(*`y2MlcC_j7*xqMke?uFK>A35M zSo4CC5@Y>>5~CoKS!qXEtl%i~hnhs&jN@ZqEc%RWG%P8JHO0HXjnGn){SMJmMZXV9 z)=14ua2nb?z{#YT)+ooCo?+Gln%7RzP(Meq(zG-Kv}$XBy8(O)-rWK`9Ses;)HnDw z)o2*U`~`(lOy7e#hX5PiIdw$Ymc_iRjQ*nKfV)8Qr~I77v>e4>*od+1#qYf=5ssdU z6+FXf%t&$Ri``~`e);^W;0aBVZLJlwk9kPaV9U>xAiW3O3~TaYUi(~3Tw=>aaw4rxf@%0!BAERiiWk0o5v={yA zZTH#@8s-CXSc6P%(3!*U{$_l)8`|zQJoMfv6NSvyJx-Z@(}0IF&;j6;I`ATRGHp0OR)r*B|&yF$WG!t`FuPG7|*JwxQ?ptt)uMJ0Q6J_vj^nM z&`-=xJC|+>4>_xD;_$Lup_{%TbQ9CkthaZj_tH&)zPc&=Z$dZKl5R@v)=jmfn^J^s zs!d5`-F1<=iKX_`O~7G48b6o*Nz%S%f_`^8^Qt{W@)5l73Bd>%3Rw*qYd(W_3r};J zZV1|3Pc7m+FkaBJ=F;0ZhwcuGd*oGdpZVvZezG?rXD(#S-#a)wpxEm!=wu9cU zKiOq?=di?9PbX|Qnd(wK;$y-AWEe9#_ILTUUEo{jV91ayzzb}V0lqO0^8U&G0gWYX z3(T2BaFY#XcmONmJxVf$WR27An8Qxp-5k$n9cOkBwhE1raXs(M{a-9ulYNK|`NnL9 zoQ$5e?_`|-r-RJCxHNR=_#oQO%wa+n>W}%ggDjGZcYt+i7D z$59q?xz4pgUvOciIa6}L<9-hF5|>wD*Kxa)&mHLp;M1{RchKCq`o1sC44p~sD4@Tj zy}SJa%BP>dy~yg%hAZ&!XZI5s+znS?>jjh_etx)=DvrAdjd|ZD1$3w6%!Xav0KMGJ zD}o-Bcv0vZ*@hPXpXQvKR@u?`(}a7vNVh{iksZbP&DsEb!`5-+>>etE@%Pi?3g@eK z59x1fc@yl8db9&Q{ct1r4fqdm9)Co2UQ8SE6VMsa_PL>X4nKJjgni|t>^Ply?p9JH8wv3 zS#^-g3=(zT#&eH4J=&mpZW}vz8v*z^VqAVLr`TGw89o4wB?s~Z{6>By@N+E8e(l$O z0AAfmvZkNS0sIMD19&0Zh1cWw32&wLE8AZ`jWXP)p*dA{1*OO?4YtyD@IkBWGhddK z#yH+XR_%gJYlQ6LK1eHc#>=p)p5{8t)}qfE1eY#JTNZJ-^$K{Tr@zr}9?2e~x$HSk zo9r_9-qzxH_jqAT^%(C{=Nm8CSmz#dV51oG4{6LCo+7e~wcxMGMm03}Z!~UGa`p0a zhz)RGj>_3u{MWF{9r_A?$n~!zeFA?_h1^i#52`+MwC0*3Lzz!SKjbH-t$!Z0mu_!_UP;B6LCZp4$M-jDENtJ^(dDl#A-eNMa<7$l445n# z8e$fJvnYpP)*dBT1^n?Ave!BMW40siApzDplHX*H!&a|DUD&Qs74)LRUsIEP@jfy% zmHPIjY0qQMRM@O)B)eFJ&8h;Q3hXTf{=Nd7X~dHvo)LbXbU19N6VCHr6C<_L)Q$~2 z?nrBTo@k3;ad2EsF#5*S$^{+&I^anWw z+yZw=KO4B~N&DOe5;j11s56#+{6M$^Ew1f^GWVn4QQ9>eOn{*{Rr1iL4T34+J0qhaK8~9 z%3_5b%&#A2R!s+fA7$1*uE?m1fRdVC-34(~tWIzwWr_a!J>rwCn^{Z*mL5@q-Lz)`N ziSn^U8X*I-XK~xoHwJz#=H2m~zoul@bAPh?9s3&Dkkl4%{zt?k5Jy8@k}+eX9(BWW z`_~Q3?XDaD1IZm8Pb42x#1oe}W9wyK^Kk`92j??uL=*UU7G(A;zz+Jv-0-*{o-t;Y zjD_KwppC#3(lKr<40F`WE*|<}R~KxY{J!rUJ)MMu%XH{k3$Yrqbt5_ZMPH}V!4wiGhk1DonG59ZO!dC2gr@3Pmg zM~u^RhIq(&XV)12#$5p`EoF$2SpZ($MYg?UJ@BUy@ZAFzOBrHQ+>3PTi0O!1&t|cK z4@pKe4fq}iovyK1N+INI6n#foVwiR&(g>Ra^Z=VFU@a*aq&$u}OH0Kfo*6 z0O(`Hym?%g75P)YAsK0#AVX#$F8E7@)7tp!m~wdofB$sLF>fhXU15xOmt*_$?X83VtMaym;qkamXd91j(HQf)qd z#MItNosF@9zSID08|YjoK231KCVb0)E+_lLk&#o#_fUd$hy`zk zuLNCUCgU_md}ByQwCMDm*7mwlM;&7f^nt z;E!%u2Raiz^-S`yW^N_eB01oB9^VggIqJyc!w%fsHZr^(rtHR??baoV!}@YTcVphf zT)i(x8Zn2v8t6N0c^z|w?-THS{F|8TmzkiA_z@d(X6wMAN0JN==tuDDe4-O27y1wD zC&qfRF);6-BZK0u7KigF@Ysuvl-a-^>DHIp(yc5#OM%|;jo&WlSdae?=mWafbZ{H~ zsi2#Z<8+7qdzZeGOt$r6$Qxp~gG**06R=ih7%C+%I@MmTayx7tfoIi~i6Sr{R{Tc^|sy!v>B;-IiZF z_dkJOV7moD15wz~+Z~%dJ|Dk<(>m}!-RCia#g_H?{H|w-x$x>Y@n`Rn`G&p-utGMN zC=VX8qp~~Zhs6AFn(xnt&b$fQ3mkD|R6m=Ud`KVS>(IB7jdfcC{2|(9kO9zrh}+vF z*M-gTq)j%5w@K$btral)8##arI*EU0PmrHx4cr+5@}hiRRkf8`0)I zf`zUK%J!F``_|DnjPIQEMS38zC(3Q;ShS$naQ$}380+{!m26nQRsdN;v;%tMa~o*% zN5^4ap>KYaEs;Ip3-3JV9HW0eza(Sa`~l$yw)|^E#A-f9nSMSn;tj}U01u465xESd zh~3;F@)^Q=D2x2Rx%GJd15`>>YY-|h=< zA-m76uZMh?D_NUr6u#d6IP~<7$$oU~K8iaKPRQ;vIlbS(+lB2zFcIBzyfBWJUj8#^ zUjpq*pnVB8mIND%=18nxqg`&V@itp-M;xMq?4&O=k4Mink1ZSAdHnoy7%mlaIO?=b zbikTiSU*PmNcUye>999+pE=s&$}i!=w)`Hx`!u3k8lSbS$&J4(rS-QR8ssYIMab=N z2y2!TV59YT*RnW*_#MeR^8Jcd?cQkUv-ic~aaNQI9?=_~@CThWbntGh;6CQ>XoSz9 zsXf~LHnl-;@iuaAT7~u5r+FJo5Zl$;{>N>@U$BkY1w)ws2--+Tf5h)v@C4aou|m8}R5;oAw(dzZlVE%d=P`8xzR}944-b z_sfv?X-d4F*|nrcp9U^aryenvN3~(pHelg#I%6Zn>5xBwJO?|v-_h^E(*|^;XggrK z<$1Zm+F)P3h`$*W2UMf`edhgW--U%e1^Z+e&9~3oOyg6nb+DO%BSVLeNIvqmIM)9U z0vD3%=(P+(rS*(f3Ar%H7im#_6WzF49C(7Qq19;)JVU8pUKX}Er>h31T@&qYrFL5# zTZw_ETa_5*G*%109B`bYyyECj%1O}SC+VGb^w(a_oP)G{zJLVXu} z{GKQq{y|~{*?)*70`KsZ-gRi{Z(N5o#5*YuLFmGkN4cIgC6&HG-dDr+RY3<%949yp z^aUSX63@M3jhd}X0{`3wX!$C&MLsOWBz)U2?qSg$xNiAaz;RBUrU{tXv(yg8f8H1Y z*&7Pxn#<{W=ordd%H1ezt{mbWtp?*j4jbrvJnj=(WfA|y7$>@RSrqc0cph@a@e^sz zmB(kn?%yuksritzH!64s8bY2C!Zf#*%=A7v1yQk%T6 zkJ6fnuiCUY=d}%u`>o-KH}d(6dXwYNcIa9Q{taW6iO$LQg)M=$+;Pzu(eCgj&|)#x z99vLEe5d{?&fxG(eG-Nt+|LAkUx1&<@euAx;sN~%JOs{w{?8dFFeFLD1Nzt*#1oGE zPNDTEL0>_K&b3rd=UmSPRuWB-Ebo@hE!tV?q;%I|D>!e!ZujNZK^DTN1s#a-w>;#~ zXws%2Sjg^&Jo74u+xbih^9GrNSSQ8PZNwoF!y?*%&HXgV1BqmC1hSd@Ns5zFej3q^ zZ#=~hAjcrvX-vJ=hyo;c1Cx~;*tW=ZQ*zO6HtZzC|9s|t)T_sP%tfw>_5eHDf*i*; z&=7|QWwYrwbP4F*p~EA{MFT8#l9CI1D7y)Eumm{c+_$x(+5n$|6QCg^ISL)IMfEv-1i$ppS()aW#n&S9iS(EUa?dSGGViek2K#H*tC7(yd=#X z*TAr@;LCk%zxBLFb>p9c76Vt)`i7wWbIDdo7dB*IF`uK&Ly;2#UyS5UMUx{dAQwQ7 z0@ip2(I{XN`M+M00TN^=zSn{tqroiDEWLyMg;+ktuvi_@xuZw4OvoMRjqNIU260@v zgBK64@*nRydl4Ts`2P%b_6(;yLiCy`(?wyAaC+%svzA zd+jBeXaoJjb`kvpUPn)9!3@${yidR&aKq&u>39C@zySNkg@JVf1{r*yTK7cLM7|(k z7}k^q7%oP>J>65jK|Vu{qn!sEy%*OGds4|M<~giReZ=#M1#jnoj$zl3O-cS!FMWe= zj=tH0`oLEU@SNoH-8BDnk!^)~Z9a+tP%OX;o%Ry)ouaVY#x%9T_H2ucBfm|BpOM1* zqF4mz0=8TVa<#FZEA-Jdq=N*GwXu9YXs${3nvz3Lz&+Q)l1oR-p`+O(`#2rJUgPta zR>$X2&|&mLq9Z=%|EdO#3oA_rEs1qtVPmy;IUiBmTN~e@ zwl6~e-AlG1;^aq(el4a7`@264j{v-{oSnY4OOaFk2gu=WAIO;-J}*M{{0wt|v9^*P zk&8ln+%J$VB<3ofO*W3u379Ls_AM#kXCB|hSHs+K!l`X<>9I>bD2UZdFeh0O_XC$Ng<#BFN}f5&QFUV%&(@r6FR!e@>~ z?m6)w?23Ag=X29<8}x6z(MbLTk83%y_wMAk(~aOgly4w=BnY@!D%s8O`(XRiJJeVA zc&(8sm>);S3OH|vzlEG^*aqZpWg|C->J3AkDEOYwdrQ5~q`Yhua6wK$K2Thh^uMLX z0UPP4xz4*6LEk^8{(HdL5_VxoWb8Rb{#B%ho>Rs_ZcEPEp$i-DH_UwreCrnrO4{n@ z!V!2&#KYLybK@v5h~gx)uCG8xa~!4bOtVI+z!3uvL&k}DyVYV^I@x0!N4Yszzd$|0 zQL>+KmCuYa>mJ}}7p_Lg&_?*I+(!hSuy#h{CR{1G^}us0?z4a^y2GvlJ_Jtp$| z=W@o&@y^zBS@ebQ9xgpM-di#_{!}g9h0jXenJ)0&lQzS}(BIv7&psR8**7`f>s1wc zh2x#<2a;31ZNU2m#DOsfRzqAqHx64J9JUPMIKq5%)3`eyFJs?C7PI$eV!y#bv=5z? zAz}eGVgbHw$mbmv#~izDv5d3K$2@nuiQzl3rpfu>9P{DeA%n;1DxCR9uItl!7?%^- z&^O>oip`LW@R?15f8o0b*##cvZG`9a`c8BO8a*dYqO%;Fgp)Fi%LC32;XK|ar~hR8 zR}*ja029eBARmBi0t3D+>~!3@o$jpTk)2NK zh=|GM^LXFfNU#pM3fx8}y)EJeLT_Wedltv{d2Lgn$9ly8`snS8Xs6{g^fq7+I2H0g z{4wYn`oB&EP4m1v!ih7!Zro6uw8_N#__&^UApFpn`{N=w0qp_1i|SGx+a}CLW7~uY_EkjP0^G3Ol}A}5)C>uyf6 z=Hw(p{!>meecK%D&Pnc3&qr$nx|@^S)SZ*e>m2FMN$%4Iujls7+X#TpXzrl@g-rev z#=+$;@aN`X^|zaJj5U|W8fQMl;hp(OH4f2Ob=f$Cu`bb(f8EM#^k*NT{A()bjP($W zmC9kPOLXL4w=&})jCH{-3C}3oUC-yCdd^rM!dMp^qB6+8raBmFk2*cu@Oir1*umQf zun6fn>?I}J)X#IUqpHY($^oyUJso;z9+xLa{TgDnJ9h#<=h3fGiYa5=it2Iw7-*sP zDGvzv<1x6;pMM=JAUlBKyUzOXC!p<~IjCQ-{di%Y_B(pEzckFwx_(ObnDKx9{I`A1 z`QO%K{<)p?e}-IOThAgF1pR>?K0l53rNO{|^`yZh4}GCN`tlJw(6bMVK@K^#CCNe| z2iZoH;r=9z`&_(0@hRd5h2#p>^T}Q!xk76{=iKukv=smjp9_c{*;>|H^Wh9-EM_qep< zLw`KK5aTekhA!iwLMJ94oMxr#fCaivi$ZobbR{;ZXCj~**q89XAZI~$d>u{TtMs$> zGWMX!Bn}CG)+XeJpe=WA;}+2#_MyYZW;>I96<~ICd#~I+(2t0#Q+%D)7pcvAboii7 zPBYfVMNTvFVi1qLpq%D+cMXo!?+RFVscCLbGv6Qc@KlZ`%FV($beb|w;0JljT?uar z#}CH~<=%)nzJcJdb%vbZsmLjIV9;?!2J(UZ9_(va^xv?N5sSa;F65p!psWXZ#i__E z_VD~8>`P4(dBx9RufGDJ3g}Y-efB$p19PJieL42#Ov=Y};%DC? zd$apJYz~v;LEtueFZzgI3!edag|7s^i|kSH9_!__=7#+;^bA}5s|MM8oUYlM-1lWj{rOjx$UXv?v69lWI_yjrIXe&jeqo}+`eq})|{#bZ-gVz|}` zySQJz8_5ym?|BJs(xvtgJfGT(^_VcTPU9Z`sLMFiLFak!wJutVrkn^)<5(vkzmUdF zxGRioOfYk z3-j|6`q44X7kJ`x>g(gmXY1>u;KL+6p?_CrCF4v)GsG{%7Y+}-1zPU&F8rp5Pa>8D zIwAh_nVi3R#bS!$;6*L?fQY$p`AO@2ax>mzkMky4W2W2`8?hF?9$icCgR`;j=#&ZG zLvqoE{O7q1kiA%!qP1ys;}bXngyB-8m4 z{zBxKKqkZ*_6A~m@r;;}H3D`tB{K`y^slUZy18JJ4x+S89k=VNVw1sGi}qz8i|MRTy=5^!O)(O8Y zl3!_J_Sb12*#~ULpbrIZ&m6^^d4b%Meuw2GvI9^ z{1UBzW(5DXfoAmCPttm1k^4KhmDcyUEabX6jd&Zf?+xw~e&3lRp)aAwNsfZAkr(O6 z0M~xyG9dV*Yrj$(WIs82_mtC)uu&mDXibf1AF`x7w*WaGHtLC754`7XMt@3elD+Qc zSfUJXfN0d*j3VflylBS4!3NG{GCVKCA3cC^Yl@HUCRsj&{K2B3%`Y3CEw#;Kp@-Ic?kE}t z9`ZhWjqMHS&CkQ0SofoChJt;2i4M(SBwSS-Cmj-~&#*!W?(WGtK{ z`3DVB?1iK7dyr&&?{D9W-8)K&-E*ecesrW{|219m-}{yn8?=upvj#C`&?pwW=MPe( zek6;$l+JwX{-*4xyI1x_ekku)_d4>F+PV_&?EBczSMl*A?%e%>F;tU`TgFPwLkZUA zYy2LJ^_HQM?Fr~H{Pt@d0V6XL>k}xaAMI*B0QlGM-sX?)W)V*&w+#(1@Zfy`XFHuj z{NXX+1AaL0l&CoJF6u&N9PKJXJ;Q@~+HR&e^=#lTw*COy5kAIz;oYc5_=Ihvt(0S) zxU0*aBVU!`0gj&fDdbktuQnV%nxCr#eNTGNIrl4}ke^m^qBu4idOf-;V9dsxEjS_d zI_pNEeM&RmAp45!g&y@^cVu5Lzu4C&cH%Qj`<+P&*@S&OfEhLu-@h{exE+Y#!T2cb zB=UcPM9+@To_P%XfOFu&*sr|}=fIIK#uUG{7q~?pm=@}yy;(l?IO-wRl}q@cd^oh9 zG7zy1I-Bv+K{zWh-C9$o*#ogx?fdZia8`&_zcF12BJP6y{K>j{fY*;8H;>vt{WO2W zjADwlBp#aau>l(eI{V|q^0H6-dRcL-p-i&YtirlJ*5u%C`lAFF>?#)3$frvT+k1xU zkPNj_H{(n>2HwUvFlSCa{aaT0X84<7$S$cX{WWp%^2q|a1I{YSra|wkM87c zCk979CVUwK2Vfin@Gg}lGPIA7v({k@fWO*fjEVa;@>~^Rn`ZR#>6LNPXP$c+xuTWy zo9fKdzmjy^?Bc?$Au5i8)a zGVFnjj8oyuZxDG0 z1Xm(UJ3(#H?;Qh5p$k$F!=DS!CWdJ53Ame{ zqwj`}*gKc`Ex!SL?<%=30uHS4!)K>8YwR6)CxSI~&@0X}a>sQL<1+cUKsz4MUgj?% z7z^L~u&WL0i@Dw79Sp1JRTASzX3L50DPeK zAHHeyi1i3sD8ZhkSwsh*anJ+K9U&hG`Ur>K!pZ5P2#J3DS z9-q7u_#yr9RMOu<|NVSq#37JpF}l|oMgq1d<*Z>JstOw8vSkQACmFISGH#ZjHGH#c z0p}x-fqREDE1b%8xS+Kb#oC&x_s3T)ho8$3T~qB;@T+J)UChts-t*%z;eQjma54Oq#ik-qHNzxvz-$O2f_N24Yo`Lgned;WfAI@V74zKh0LL|HRoaZj}q!-K+ z>W=37Jh@LFtVdp?=CzUg0Q~Eb;Ddk-avw53hB^1wVyzwWMWMM00yi{I*ejMiCpk$^ zjhtqv9cNC+KIHZKmu*VYm#xy69t7WFO{)iuVLZKjdUp)4Z=C#xc<=m&zBvIZ_4?S}Nc%38NIRSmz@WC%g_RZS}kc@F{%?Rv=WULkA z`uywbTpq`NnOt8N>qlK^KN&ZqId;yz`DYi0+}8O2G9KG`?sLUi@rdz$u65$G; zD=K)C+TpxOa;9IIZk{B$ZEHz>loTfi7vtyow~-vQkMSux-0>YePU8cvdY8q1dcN;o zD`3XzcvlSa*Lv?D^W!WXyC}$vXBRMI&M+2RdJ6W12R;?-voK(z^LcQ_ti4O`wA*k; zEQ-!4O+2WbAv?*g#rX>!lvNMNe$UYWo&Or~;;bX@FlImI?X+JQ23sHJkgXpoC5Cv; z#B}6Z;cx9AE-M?W;$3uRxZ)9g7-K!1#x>XvM16RV^FHjGa##_`Wlv^Ck=6xVbPU2X zU_w5vb_#MWpx6)O;hdlaEVgcFv3+V9i&e*%F+almxcilAT>E5Wz9RXx9hf_BYNB5L z$X+iK9BK9j8F4{bLR>A){@{f{#?~>+zd@G__yQ<*+Fpn8>_FL)7jL#HgxS;vxBC z*cTtb*TFf?hY81NM|BPK3IyKIu4)gKv%5c zRphgII{haR^E}kRVjVcQJbDBd&gD9&Nfgs`?A)`(QJt6vWTz(s`>$RGjyhDs+x|(+ z+rc6m&?nCAO?+cmmvy39_T!y`Ik)lMdd)k?mkplEeV>tkXl%IVKWxuDZrfOocBB!l zi0?Ra@&$bN&iN0-G9>@AaTa?P^tfyo&Omq{u@$dsy&Z=irb9??R>O3ss6}t92?%zhy4%Z(69y3Ed#B<{;vL3#)mvtr%c|M_hvzU$;fu{qs ze>ecVcKW?>F%J#!ZS@mfi8-gv*mOShJ@CiQ>{b0JuYjLz59aCB11g=PMfRw`Q}j0? zW{tjuOpntTh}RVzGN|^%AZw0}_zAkdXI&0RQlV#HNF%X`D1hVb8O_P~FHi z@b^!2NT8d6_Q{iqRrRc@%*g@$E@j4=Qwn%)Q0$mTvfj;9lpy3t<{`;O?xgV$zSnjr z{t$fiP!ns`E@6rErjO94WMnSEyAGO5oSoc;GYWQ#wHD}5g3DTjIJn;aJzF!Gb>}Yl z{D@V+ezLUyXumN4d55`w8FnDi1mabF=m7d##IT|?$MI^4VR70cdf;&_?HFuDL3@bD zC20gPIZh*{h-nF&YIGJQ`k6=ZKfbnvGB|7QY2cCfFWZQZIQV|ti9d0Ev>|_utS0bO zhU~02|IzRuj_+w7WZ)g_W69XyWijuw0qcaO*{?!&Z@~H54?q^KTfibeg3PjihIls4 z%2~3H#jeIRWgbg3ywz!Ud@#s*xC3$)bx=R?mi8%d%b!66TvR)>e$l_3zUu+Q2&VI{57C%lYdHS; zT8wuHx1C^P@U^)%@PyuwO0ifPzb|*RBx3*i0KTsq>vhOob?v4bP#^ns>Lt5Yljv`t z7`4FRaKhm%fkWUAbBcX-b>2vJu@^BKz9!|^$h!p&X8oOTd4cU*2rk#eNhX{hmq|Rb z5Z^P6INjOCN;?sv@v1W-_-FagL%FZCxlhH=*e(^UosD14S+Hc{p53*P3{44BV!Wn5B$rt7J zHTHUNoi1dd_AKZfF%O(QF%Dy<^Ij-s5=Jh~dDf>9v&34*WT|&s!M%{bM0<{o(gs4` zL!M&&rbpbLVDgQhjF`5>_YRW1?9lL7PH#BZ!sdB+@Ka%%BxN?WjhI)`rl9pFI!h1n zE8gcp%!|g?sJZ<>ecEJmIOlkrr9acgen=WG=DJ@jz;O0};C?ontIv8C`oUO}u<^bD zo6|R!X^N~XN$x6@=B3oNj5ELRcEk6T5-=u{G=6oW>h|h zwEvmt6!9zgRXTW$#}jd$P(Abs@-ZJ;0Gl3HeHP9I3o`rC5{em1HezMmMi~$dD!JHa zN;#;A?J7BS;KLWYBD>mLpL3X!a~EIpQ?%cp@9l^o(cc|Y#W^6kzv+tPV6C75dXH?? z2Nx*z<^mSen#iArf4v0jKUf=p4T3xr;0H917^Tnwh#}`*i~4tUU37iUdvxwdDr|}Z zE?+T6d=5a@Jnm`@!I{@78htal@pJow8Q@P07sNB275%6XrHXWQz7t#i|~{( z8+9NXhZjIjo(DHWpr3XjHs1Im_Juip4%bxb(@4Fm%ig#V>kp}&bgqi^4&^8^)mBN? z;`ub4gN(j6PepvQsR!T!k#Y&V>FOEJXDSaa$n6nDh>%2RSIEehNFs}v`Oj>9>`oqOnxSU?JLC1~FZ{x;ot zVgj%u6>8T`8-n(J51s#2isPR)5EJG)1Mv>v3_cjnbVPfO?Rz4Ywi&Tj=oA@nUGXCP zl_wOV_HJ5}N{KxPxE&_hRHXV*M5GAB_*T(>P5IiCm8P8#fo_ zux6wIW}I7R18!qI`r|ws9>v#c(3gR8kioynHAL7T7qw2L_+AwKL}Bv@d*<`CMfyAE zMe;p}CX~q6um(fpn1D5!iF^1Oj*pcqVoYgg8B<^|@-06goY*PwcQ$_9W!;sMrsSqU z2QXfbuc@fo8TgLvHun7z9*Ku>UMc(})Oigyw$rCF?nSH>;r)P5x-2#TvMEh+@#(fh zIKc3@RU6te<;mXH;PG?%YMQ3FDzl=4;_Sb2hrdPbs=j@wk_5gO`4XnG-{tdF# zEOr9xUn#IfQb0dCmzlKg!s+i34f_^VS=oVkr|;eKE-5|s$4ADsQe0UkyNvjUbi`S| zhgmYG#@A<0hcCOBpNZ--OC@n`K@>6taCs0PD|!QQ9-K8^)Xw~?Pht#!zaFq>ct(|;(<{t5ZdiV!fjE|LkaroV|_kjD;N*2Y00<%q(Vq_<>}6_d~^6`E^y9nahlk70jsqQ1Mq(Fzda+O62N7_?@pv z#{3wwjS6Oe@PQJ0Yd(v;wHPwwgET{#O*Hedq2$6>webFV%+IJ(h5|YL0DRQN-=^;; zt<*zak~7wyb=5v`Vi5erbnES-@FUqE>y4wTa!nTYcB22)Cl!h)jA;b?3?PbQ$ z13bpyKXwf3rY98tk^?-KuUUtjOUJ%b#2&5oC~|diRs#C4b=GNp;}FIV8XT^3yd)lu zo*^7rB_jQOZlN@_6uG9J%Y-pXYH>|=jlFeah?vNZYuN7C;`7gx15Df`i%uV6LIVUWrsK`*5z+n zZ%}r_rrRACHeIgPZPV?FVof`UHEj(xMzDuX_de#tvFU_AUq*0n{zYF3)^3f=CgiHzuD^j@$FTY{(zyym8)7BLweQ&?0mz*IAGy6el~zkZ-lE9yvKX*^YJG2R>WQ zbFaK|pE(-2B{&=!x)ndCD8tGu1F=`E-D90QnST%6EJLnJpod=P$tsYWm;;4;-M(`Hyh+5rz2*b5 zp8Moc@L!KPv73fq{x-rMh7K`P*bepQM32e2LI2dg>qDPapU`?uWGvb(Sxd+Z+ zchR}l$HJI{rc2QWaIbDB9{_z|U6bP&xCM>{-ouzb!ebrz*ge*q?nha7&8hhR@iixm zpa1_?(S%-d(?-GFY+`nMh;VW4mwt+T6P!7qw-2<|?A4UE36KF-!Z!(V zoftb3Cp|RCdiTG^E3?7#nFk@y5X0^9J@&sF`FO1jPv#qUU&j*PZ9WMbOfv39TbUsi zThYW4HO)Aiwnek0VJQIdu@@{`ch`LH8?tYaUTX6q(P=m$FutY`2&U0M$O z4&a;STKm0+<1-WIt(81MYY=$H6kFeh^_qkDy%P0Nj_W=0DNc7$|5#UmoQ2)c{`$!x z?Qd8geS#%^^W#(2$XcZ+4fI034$37)-qnGz^RrxSZJr0^KeAIze18hRN8xt>zgsA; z|3ji-^zF6Y_!WQ$q`&LpkN%)ImJ-6a zilxM`AO9J6$~2+_9oZ7N6EQL9BRq>Wre}~(*U9xc{D8z=Po6f8e2JgQNNX>4Ne*9w zu}gx^J?h*wiM|^_#3SH4D2Ow}IxtT-cU;M>!&$>|_!Ov%JFPYH`k>uNPBGrmU81tc zb8VE2Yiluw10gphIq}i0{|h)8Xr#WO6HO;NZ~Y6N(~MM;(>T7<^8h0g>xH0C(BJQX zyH{!cTw1}nIqeZm7+7QDG?S(Mhbt=-(8=eP50Ej5O{u4>_S5k7iEc|c-C}+|vHsAg z#@63b4Bz9V^~f!XKYB~CeHUcDhjPUhp5VOhiBF<>HrDvKU)lhlRK(}TQk=>uli#}x z)`)nSFh66T)=`8%BJ2t0Z-`t8*?Q6O0gC4+J3-_=#E+o6K;yEJf{SEoZYj4FEbJw8 zWa>rvwtz<^ogCQ-J9^m@%JIyM}2CfyrF|upzBSK+YaQT*EoXM1ZehR z=(~vip1HoD#HI0O$aXu5|EvNJa5`@SJ?~1=c{Aia@)+8Q)|(;kv6hvQr1!bC7%ym3 zpU0ZjzjZ;DOB_D3y`f9&0jAIkY4Pzk@_@OV+Xx$MAm*FPxmG?ehCUGMWAL31rbt%V z<3i5eEaY6mTl;CZjEiy^2YrS4b!FT*=0CV6DdViN&F~e4d^3=u+s44Dqy5Qa{4SqTA`ekE`!G9dOf1vJo(yXCD{$Qv$zs$3=YB95*3ToPAtE zrmW?$?_BUWbR4Z2@pU5nj=(RX*edr+qS(94|1R9VlfbJJ8^?F-_a>W1!QYO;IyUZY zkO_2efW5UHZNMgL)L_rTCd);vxiJWvmhg!+K;g6A3;2?L)YsYGYfODIM9Ymf3_VJw}yMcKO z%q=}Pd%DgbPvvh#8^U43>-9E!!G{}$WyHKgmDsvQ*pV{x&om@^=7(K=bcuW&&?(U_{Ow(CE_r;4fxl5r_JNOlcYQm9Yr$o&t(EwNF4m?RS{-QmDa;Ra z&+jSUF?@!;K?fIzGI5;SL}l*7JR@(AmkD$#!I$B~wf6Ck5tsQp!A?3Hzrk(C8oI*vHrsX@?%lE2^;$^R1g>nkIfzalOfQ7_K(N>?K< zf&X911fAv}M1VnUTfch-^zEVgi3j4H z7V~;zQIBLCk|l0Cw87rl(t!O%>x+#ILz#6g*+t0p&<_Qyn{})Sw8$2FR*$qH|8Mb~s~)_=$JXy1wJTAox$L9rAj5{L3^pp06Wh>*Z7je1Sb-kk!C1mt#8qrZxE8S_Pbf&*>fg z&3ojGy8FtnqMQj^Z@Ze`J$r99bm&b_`z6Se8Z3P0nQy~B=~1U~si>2?LeyEZ7HjgT z6G$_><_O2%e$y@~VMST!PhT}Z7C(qsLndop@M)Lbuw+wA$MfDLEOrF<1(~d9sRaFU zvL)7b6z>rOKC+iJ7gE`ynWF4b@h*$rVc!($BVVW0zqgIWLVH<}j`w=*w?$dpss4#h zlwI(j;@tvK|0uoFVI!3)m+R1NIzbRv5O62W@Ns?8v9|g|YW;{ZQom4P%Mp$Ic*MkMn}P z8v5}R)?@XP*k^@2$p!7YF>D%Q?eQ+sX)!ND9_$9mUUxOmUG>k0UVGG#{8k0@^HR*g zHQ0A}H8UdcWfmO<-?jiBh~o?+J`AYVx7!5_d4Rzj3cvCi%F|?tWrqPn2jT~Xd~KQM z?yiUa4}*rFhk3r%@iv|pY$3*GrFwK51ZkxnRsGX2=agIgutzn%u1m3^z#O<%4XRm#1J@#qOVb(|Z&A;X0Zx|oP-gz(SRIeYoqSRjEF3)KL`NXz| zV&>sXXuaI}mqUY%SE-K|L?0Wd5B%=g$D$X8B>QN`Z?}(?FANcVv>0?J7!q$BKV=^S z4qnXzzUVjP)7OVF|Fq*GXZkG<=1D$dy#Sd8SYlgF0G1XhHuM%|yzqf!zY3ZAs#l_1 z$Jo{dz$Ij{lEGqw=M&8MjvQ(Gq!c^8jM;~QlRpe*{#d3IQ%(esUmQpT6yQA*XBs2l zxG=$t*=TRs*ZF=hF2nbNH{Ewci&)1&Y~eKFgnrZC(D0d>!)N<3L@?WzT}nxdnJ$dXo8%C*f`P4+SqB zI3*dFi`Xrvm>=I`Te6Uw3fhq|7h4C@zC?-Re=z3a80PL4%mw9D{;UHzF6g*hCc0mA?sZ!J#3;g6ND7~trpi4p+^=Gd8Y4hP^l$((q%JuF<$JDJ@?fDl=;;&DB-qH6e5LvdZNlb8+pGC84UVC_4gWhT^hHms7b# zH-)Nem)FdgQCqRPs&r-ExJ71Vg;`o*E(%svEizY?F0T!-ohc?$QHQSUGEC;cx}vnE zrn;td#iWT=Y1PuoNlVLXCRxiu*6o$G0K9tT z6Q~SOvZA!Sf)KLlF_U45nGMH9_1%AfHMC-74Iu_Yw`!M{0y#CyLS|Kns+NVS%+=*J z%gj=gxjrv>6-wD@QQFd3$0nXyxc0UF;|vWlw1FI^t>XpqOxi&^*#7;lYI+)PIUTC zGfXxC*LAp-gmE5H!tWjB{D4ORfz;ORGX=CGd@wCzw^W6@md5-BdFF=7m=m&;07mHxX2Gzpfb>exEzkeS+#5}wC zNt0cQ^0~0XsolQw3wVT7oj7q)ZAG<9u|lY#d>Hkwz&#z8fvdD^RcQrBO?f59QmEQo z99mlm1VAd5SDDK>Q?M4)8;kO8{|Hg=IqxQ+{(6S}q+8E?G{WTaf@sv7YqI*8_!cx7 zCY1CC#4ZZc~l#CSzA$2x*}Be71S~FO#D}jb3ewp^IDS)`zmPc29ue%FTz#-HIrqd zoI9ofe!ori#zRix^5R-K(qvbTHrX7&LUzH&xUzAXd5hQ9fF5RnLzY)sw}WqHSJqaP z-Hfr6-B4TO2#K*{h2Xy(I4P|$$Bvy~GS-Q8z( zp-U5K`0b2IpdSNTy$m*qxw5K~=AI-7|1!}mg}|tx=|SJWN8eM>cF+0vDA#1E$yQ32 z5QX!{88b?kuP%ku;4S2ho6xH%_7Uix{*8FrRgUG-Mn00QC?F{>VShhK@hI#(x_Eg72;MKN!8FKC}(R~73fq* zOjvznGc6`csh&Yngk*?WUJZk*0@Dsl%c@1;RiWjWMC*>)a>)M`wKbtNzXcp7;HX+n z)MnCuFlG|@BwH|Ie7pH)LjDPhzyv2&T7o~(rzz-FjDxW?C`&x{ecT7)?!xby&%83= zegfZd%nvI8Bc|Zqs~OC%+s+?RE*;-{Yo-ge$olp!2#FNM_?YPbL$o~@*S|n6lKkN^ zXpYH#Iokwbo4wv|!gCnq9=XP3#au9P>FA)il)nLs+${9?bwJW`bAC-_7383>=FPI& zDk36MsGK^>Le-F`7Kt?U{pwuwiGL)U%C7CNlLUQDBJ3|GZFd}FApY8g3S=Ai9c@n? zHtd-%ro(2T{^!wQ^{7WW%aebxNfD>1aK84>qug2WW>aWAprfwZZcqAOs zMY>4XqC(fvH+P;-K_8V=fRsZ^E306EmfZlxse+KbVaeCH@mo>>GdpC#ND5XiDe2bi zbIAdys$Gc>#Z^nWw|HH7bPAxceHX9b(E#!QD1MZUp$SmkX=jYstm9;hVp&momhiX<=R^3jW%qguX6Cj8# zuB)tEc@xyn4He7R(s%K87DR>xVkVpg2k1G$?M`(8x?n7{;;Q9c(cNEv3alL@+ZG3+Y_n+YUA+Alh>Ts>XRgUZ1 zxNgOD9j?@~T5F8`*Rw*8{1$iO<5KVqlz%b~F~ht)1XWgT)>eaa&CyqxUk%>6aDMRm zn->&chw>kx9?2_rzPaAv3bd+p^}pO!y;a{lDWlc!AfPo6rtU~=K) zqRG=HPoI)MW%86MQ~Xn=PAQmDIHhRHv?a?lT3-Svl7fdPe7fdZEC@3r_DwtL*G<{nBw8_(^O!H5hI;~(@;k2S@)22%9k#y8Mi3aghjNZW`?oR-z2iCpGj(z(xNa#5<4;GygethB+a1f@%J<`LE``=B4IM7`OGdZvB&Y zm&tlQzgA|lX$^_K#k#i6C; z6(;;Oa;x)TgX2BPjkU0KN&jsF-;;cD%TxPgD3+QCXjKVI5@F9Tn+P%CQ+Y*od0EID z$9r}AycuogqK((U? z=f1EE8jl#}SCCgIKMxn(-RIlzlW;|o8&OSmzqW{d%h<*S4>d=nnTtmKZNj$8$LE_9 zDtEmxL4It}6(c`cG?AS#3m@%TRQRd%W}%cix+r_#n?*lPFP%PV*!Jo9BTDCdICA@S zfvKhQ+P|~?#v3X}-}LXl+9!`xRnUY64^E}SKbR%QJC1xXq&d!_dXZ4#J0BO?RsExjde#yHXZlN4TW|We=17Nxc#8*+h9L0}gQ9npgIW zR3B7WkvhdIrAt|wGzhI;!dukJq;05kl?n`aR(RN=a66kg5$v_2MaaRcd7STSwKd#b z>UPlGxW#W!4y?`o6L+vA6Y)SqG^-$cctp?@ec}swr`!!DX(VE0<{PL>vik$v$Kd{Z zN4~kwqP%F0w~QDlv;%1wNJ##`rnU+hdM)k)(Z>D=;+xU)UsF-W+t6KRSdZVIRrf-_ z|C0Iu9MkF%Tf)_j>up?}xZd4hGV?PohVR$)D06d<-=9_Yi+s;OKW}dYe7Kh3YQgne zT(9Cwzxy=$ z!~G6icPU=l?!VsKf1eH2M_ta$+%~@5QK#CJ-_8Gf&B}k4FQo0i94QC zEvR0NI!B^Kkqw#0BZ3X}T_Zbgw7nlGG6cE=?OgFe5!}keZLr86O`cjb_;PUe+-tvG7OKDh-~Ro@ zmwq?!l5u!7_m*$o_U(mbq3_?n2UX%PzW(-+_JNlK=az-S^*{UNfBgF3;r90<(Ytr< z`j2175B%=Wf0?uOSO3-a((mS8f5R=eetY4@d+vRDZ}YEP+YTJQBx~q5Z#!}FOjmft z9e;g2eN;u|h%YVt*YE!1r{DXu>n_H*Wj(cfZ#Z|Kq{e+TZV}s=l|T z_MzN~lXm~K`PT=2clh;(16#J{-#h9Le|)Ly`WwFSO^k{jH+1=&FCZI(Xmx z^Ox4X@Z#@Ze)Uhs&U7(z;h1%=tLtWYFH`kP>Yhjs|5zK9Qg@khsaH}bsZ&*tB6)Pr zC8_fU4fd3H6m>*uisDr~3bd<|rfSLnT}sc?uJ>H#xdmE#Xxcn=rUE^tUZM|5o1uOw zXQ8=5{Z3B!1#R6^%Kz2d`@q>%mG|Cfl1VZN0|bl^Fz7*}q!17L-`RT~h?qbUf<%ZA zAZqI5oU`{yMkX`k%!DL}I)PZDqU356tkh!Ps8OTF7Aq?C#+FvBy!W-e)M9U5Z`zyM zv^Td>n^tbiZQk#**IwuBv*yg4GZT6DhcM^2p0%I#f30Ud>simfbngBCXZBm?T{M63 z{6)Qsdfz#B!Q4ydzIEPJbJi|c-rdV;ZlANf`_j4R%pN}s>1zAUv&RqiteAcN>=pCE zo~!2Ef98V4Jy&1w`q`JCfBE_24|d=G@FnNGeBXgNS2JbLI&bm(@$bHRtatp!m-fyX zKQm|izxV#)w`K?P_iSD?{zT9C59cgceC_N7bHkpsJ-u_s&UxkRw{^dD{`donmn^tw z{`&6m56%7Z!QP9z?ay}a`K#B>>zy-a{PPR<{L8$q{FQT|ex!T+yR%<0`}}irtRoa| z)|`3sX7%*UpS57lIkV2|UdTdl;hdLUu&C?hvo4->$+=7BT-NiduBBb??7n-}*Jgix z)|0dTpILu4>)GDFnE&Hhe>v-~x{lBJ>sf!-eR9@6=AZ9=Vb;IR{`aolE3UonmRleC z%x8Z4-5>t=Cx7R6zx^9upF3~9|Ay=C{O2G2S@)vFesJeq@B7kMzxD^k;}?G5gCG4& zy)#N*yyey?-u(ODe8rM^JqylRbg^H$=Fk_P`^o%Z|9?6(Z^5Fbs(x_JIAB(VD2OXe+@yRPSo`8&?J z{<NV#qn0xNau9>^QU*3K3__tO>xA(4_ zzhLc}SFG!~{oI@8Eg1jTwF@qredA5R?DKjS%q`7Zu*bh--nFxr+}U-$bM6D5uI)Hy z{HYJEub#WtT6obzU%LOs&wlIv(!49XH_v_Dg0%~l&3W1VN8TRa++CV?!Aj{855Lf} z_s3Vx|DC_vWsy zOU6I2=f>IZzyAD}@7?gKxpT+=;;K2il`*KYZqW&`rY({yv)MM->%Hx z_2u1czY+l^**8g?u6u9Gb=}w1^@`qEN!Vh-o?Lt8Opg$GWPi1se@Be4m4qEM!Zs52 zh!M7pu){Z>IU{?0d4%76{F5+QH|3GA{rr2Bu%!~fBkRgR{z<$@3bFdU{DwVU`(}M` z_Q&Ks;rA5(o?j20ztFAKd%BYMjsaJ^`OF#NDerC6?_q=}@4d*s!_e2Iba^k&??t3@ zjPL=K-iFPM_YTbc#Jq%e2yN-DXU;sK-nGm;ZG!$J^rXD2&s(VTG)(vtgr~fl$|7am z554;>XU<68&9X|H9D#lm`aVTpxL)NgIe&Nt+Vb1ZoEcAP>x9N{dG92&{m{k?nzU&* zkxoK;Mk231Z_8M7c|Y0n@cc&>eCnLv?EUn)2``U$d+(rcz?1kZvw2`ok{iDB%$Y~h zbTm!cb^zKbXwq)-NZ2@G#|V?M%Omx5fUpyUNuPm#(w-9cFyY=^XU^m$oJY!al(3bA zZRT$_FL~fG!p7f98>oEd&2|)?BBT$$t+`(=O2dSQJQ8miVfPWQHwjT;D+n7i!Zr{# zKv+JFC*_F<+eO$G2}}Ee@Vt-kqlD|SOW1zGo;Jb`680m)lD0X&mG?`N?m}wl_gb`L`G*>)uY@RNYxoHqIyJNuNmav66TzHaF&pJnwEK z%p&YDez)Q;`QJsH!^F|`DRscL&fG!5B+tAzoE=knf(}EEwonhMt+$x%DgEI`#MxMB zjCtMvgmwzr)6mlXU}eWg&m8Khdgja#;*oX}Z7H;kQGI@?k2xvFN@$Nl)8)t$wvn&{ zgsmq%c#U@%8I`>3BF>ZB=;Nw>hjm_r=K*Lv?`+hm)XgEnUhHRHRPh&P>qh8LL(koP z=FG0NubcFf&^HZGFD>YjAIx%dPj9c!XZ11)jceGsXs|VHr6|dU8uLoFzBfbLGzo1N zv?I_SRQcJU%b$#YX!&=YIkODb)L$}pN;U`;!A12(}nbym?#+vdJ;j0NhAQ>{&ImzD%=ubf3--0gr=D z+ttih%DRN`kZ@gAX#*>byHD||_Y>i>9@+uohbc|gJmC`&{y5?MNgm;|3vh_AF$tlK zb-$7L2PER|=JxS(08i`|a-g z(tLv@e~SrQM%a3OoB8vgZGxu9ywveJ!Zr~0L>fOk{)FE)=qI5cQ*=w0S7>{o9ePh| z+GEhRy|?vx|0J|$p&eH|o5s*{&>nf;nKQy)@~`EO=hN_K)9`FQr41LdnO{HNEE7ri zGQ#g8Tz+eQ@_QxWyNqzD(@lhr5w81=#2p|kB5WVObF(%jnUe6mgg;C85eZ*?-u^B! zE8&k4KCowE_~V3k-#;<@8Nwem!X+;!2=^Xn&dUpgEhTIvbkfXA{YaV%Ie=JC_&OC{ zACt=nzmM>3Dtx7mzmo802v6tTVI97S@a69(JQH8qVwms;34f|ZKYS3H_kreh{;@P{ zx$xnU@;px1dL!P`X_&5WiGPf+6~sH0rZtsZx0Lw3bm$lMF%P8cYt&-Rmoj(~??a6~ znH`H8phX`(bLNmrv!(1jMx2umQU~yozGU{n1JED*$eAf1l!UrBcbLLT1=li=dl_6Y<@~dVx9u~m^{RbWPBo^a9=8yG?6b5l zza_nFJxaRc(4U9yDSr7@=}P$y5%0x=jrNtYJW1FKgk{Sjai1l8#pfDvCF~?&VJ1xa z{ELKngl*)v^hw?4mjM^^(g3tnZnCzS^&xvg;z=1-6L;6=>uugNo`oJkKMK7&9b4Ht zki6~Xe+R!n9q?Nospm%sdy25tBGvBRqEz z_5xwqzWE?wCxvHbju5^F2|x99=H*Pjgx8aVzxca#nWjEx$ve*puivZd8It)%(tV!r z72jYE6<$0Nx0}PJeZS9~B?0W`Wp0wVO9($jc(#ldVW$ZTRorCVl(_2%U-Zr9@wb_< z9>R`GTpo!xOxUx8jZ1&eJiXWD6ZBO2cjFtHarj2;6eVb+f3$i}u1n5Gx);tFxyN<- zonfnQJO9gxU0Tegmi6mb=j~#_Dg?x8e$rwmf!(=(I&*o3EO?cHD+YeRzy}TdIT-Zx zNmpDH-|$V12hs=zk2>_qPOZTT35;zx3IJ&R_jVef&%V{t6bm z1^o!V!oW8g_)GAQ7UXkJ^OBTrt3m$&Sne~)BgeGfD#rgg)E{G3;{TlYk3h$)CduFV zH8F)cv9+CR`#(L%$_$?ED)aNh3r@^}ZOK+zCfZv|dUv0d9je);QeD746zgcr~ zSKPul_>!_e68`<*VX)@^Ww5?uCiL43e(yB!`wjee^wFd4pu;|(JBk$vG zul@*r%)s9;@DB|9Qv?6Pz+A_!Kf?bN2EN+BHyHRX0}mK@+`ykO@D~mIT?7A_flnCt z1q1ias~0Dk|MLd+47|?3n+-f<;QI~C@k;%X`a5Lc?-=;M82GOZeA>Y0_SD%Y<+;MZ zD-HZM1CJW`K?8rzz~43SF$4c^179@1Ie)H!*BdxC@Our6n!f%>eSXEje`MgF82IM~ z#;tn&5q_5$*fa3W2Cf)*mw|B~S$~B8K?8r=z<+Mwzc;WLl#vshuS1CKLbs|WcD zEO&s_)0MjwJoe>0E0J1{?gj4xC-Xa@p99N%VIBV~;0@5lc3sx5=fF`W{%jU*xm&E` zp98)s6W<4~%)~E)yKhnMfcd@5l)R1oy!`?K4(2w28eg*m?go*sKl=yN#TH}k^&+A9x=QmM* zFK_U>+Mwe`BPVya^SmVdZZzn^OYZflN6AzA4zH9*9uv#GT=jJ2-VQ&(O9_zvCQp_w zSngJd88%^o2 zQA+kVwSCO@@YCs?0{80v!24HkQT;)e_dVe5IzRjqgO3tl%l}uFnJ+VV zJ9r88t?5U=+V6qn_ZQ$lAitui5L~RFqv8EuOYslE+4_8yFiIbp@8oB;{RF>|X-~o3 zm*wRTPgnB)``X}fgTBweFSfzCSLTy+bb37omiyxBQTZ|Pm_a|3!7k-r@>MmzOaFWa zcv#mj_=Dh+;G{o*9|w!i0eK|;Pr=V;;^WdZcO-))-ipif@`p#|&%`S)&kK=9(br#| z7r>+N>R0CzB-n$$_IV)b_kpz!1;HNzYu^ZhzX8^M4+I}!;7R-LBUt+Tnzy3gq5j8H zJPwxj7)$YYz*3)L%OmkmgC+lR?kV^+jNfI{pB}F@@CIF<^uI5HwGRd9kH;lH>7)Bw zwtPZbmnpB{jRqD!4C+z!V`A}{kfodWMT2hQ+-sWO@6O=U@Bmo0%|f?^ncp(>5%34WIzNwtrT)ZbN6P;{ zz}fO%`>tku(7>;{kc84l`mbx?8x1T`v-K}ne0``#^%oN_Gw3Gv47!O|8gvtH$On-xnNZ_zB)-;G=EuF@tVmxr?rzuAI%qP$`duNc+8a z2lEfOH^qMf?#a;4yGPZ(UT-&orM`6h&w$raK4}T=E9L$fEcw;_{idDthYVgT8?*G0 z_J6B^g_O;&VDaOjp03=McPqNi&w%m%`@j-Ep(nX&eqZ=#zaHc`VQXUXDWaaP+#kbF za8jN$ewHrrR%YT~NWy{-60YUVEM4NS&cqkI*}x|<_=E5hEN4)fUzRTKpUlJ;-1}>J z`NN~im%B2bAi=mePkhD5daU_n=@Li-b~Kc2zQ!f)}Bd`{kw z{G9=B(Bp|&c?*KUKIqb3dc8bkNo;u(e-j@z=uc$uhvD}a{B-_*AG|+#4lEspNTgZ^i2j9KU&%MO`LO^>Ae};dkOQAkstBNmE~vR0fTPh zVT1l)1_z|q`}IcsR=^uF_#@zMux`&Mz{9`Wz$d^@W$5Q$O8aE6yPeg^z3`8h9ndsgnMH>v!{`Y7Y);TrP? z{ZZ^I1)u0=zN0;!Na?S7C*=W;rFigOF#S#J+$H{Du#AtTDgFnr^f&$fYZJ}C@BsrS{@8>-2|o@$!N)sY+&(Sr=G6d|Kg|M0|e;uX6X`deA0Zvf-i6etPp22&lkK>Ow_Lqmj9$2sUe+fPe?jZrGuUW5Vf19Dd9z2%8 zk`M9msvcEeCf;Yz4;Wbd5@z4e;!UKt_nY}dKOy<~Bk-~(8d%;F-?Qpb>6`dzgZ`|6 z#b0gqeG@Oq(4E(?|E2s|UjKEl_6I5X+XvQu9tHm%So?4k{8O;_dOMc{1us~dOZ>mh zNwE(WpK#}-xB~9a#Q!K*e8*|}x5461PUD|}#mC&s()TZXZ7%UUcYcbm1B)-Z-W0zR z{B5w7pFRl|zjYU;^gjguRVMyFf`695m%a`^GhoyJNqN?S#Sfm&&j?t2<7xaEu=vZH zpT_@Fu=vr_^nV45Z#|vAS6`7!{Ow(o#=iwDKKOKg?*)rrKAqpsgT+_h1!??02aEqc z&F??J;?qyp|CP(AAMk=S{+-}2X6W~W#UG%ie-$h~0(E}>3M{?@b$RCg8uBPur{{ph z$Dq#7JHX<1Q0MnUVDUw$+voSe;-66CzX6NSLjC@A5%#L|zeK)ae!o3t{6g=M{DU6` zXXpQ)fF0;EGK79vjqwZC^560?_II?O#=~F>JU5O1I5?}n|0OsNUB|y>2fkXsbJF+& zyOBScZ{#kWtS_GfKg9gIHl?2gKL^(DUxhr~qvsRy_t)=H^NBuhx^|rP=uHjzdKfJ8 zsgzgv_v|4*;FT$U=mGfO)Yw1YxL2(|`%?P#?{9wpUhpFFpR^b0{{i?U`9lm!>MQpf z$S2T~_JDo^So_bE`uqS``@|D=Iuk&$fvM!~W^>inH|B?+gGUQe_0kC5`2 z`AD#3;Ah+5=M4G@10UIt7q&cVJ~i><2K}gkAACzbd0XDUuF80T|1m;Uej2~+ zoyZ^1^?vH|7Uj?K6UO^9`~^R1;6=CPC74I$-^7azdfvdNGr0GI%%||z?ei(H_~A^r z)82oTVm-c=d4!QPb#>*RmB{j>QI!V8)F z34YPQy|?EjmQ$20iwhjTf3|5@Tmd%n})zt6y5Fz}xk_-_q7 z`zpzSdZhf98~BX|mYCW62|kg@ui%pgUbZnW!8~2LO%F1jX|DuP|Gx>|oN2#f;0UbS z@0A}>@llH;?YRZ4{iI6!Z8Y-NZ(vC$o4(-XnfwU047{QZUTM%*8(8~bmGZvN$j>JX z{AIAj?q$TOELXMd>c3v9+0d^q#I;3FA)1Mfd$ynif1 z-ws{-iIwyo2J1)q%V7h5&%hEl%TMs}41d8V4E*37c?srG^NES~8}tJPUU6qWd0W44 z;*|z{wSiBy!Ot7?(+1Z5WF`HzAH~ntjEx$<%Iryu=cep z_%Dq5{Cflc2Uya}_MdF}QW1|qSC6Vs6CX6_hcfuU>se38pFGn3-%W8cKGXhoJQH8y znfQc3KWX4)oAUA+kIJ8kmm72|gHMv57sy{WKl?Lu;cDUo2K|u?epw-xJO4Xrdr-dX zz!zk2KX?qBPjWkpvpw1mJTJxn8N4AwCpg#hw!Hk|QROpnuR&j!!T$iiN8pz&-*|@p z@~as?-)_jaE5X`du(a3RVC`F2@F&6A$FShBWzgfD(7r)r*L4Qen!HGPb_TMaB;+@LG7yP_|#mBaKun)A+SAZh| zboyDk#CtjuU+^;q7GI(2QT1!$-Tm=g?rRx-UjfVbo1OCeIrz&Nx_uy*`$`6ng1?@L{|)dr zGxT4AzXjI$D}4g}DR^PZ|J`8eZ_lOq`6^iY&z2Pbcd*o#_>qwOUh&E1{J+=0pQgR^ zBlF)80}Cx%pMr<`^YVvBwU3F%4Einu?`?zk8T1D;_>alo3F>1`lKQON^Wfem8{^>> z4*CpmKBcb(KMzjoj~@9h@FB34Hy;I$gO{c8`GYh3eDX(^&&1sZy~n`AgN^sU4}b0B zUB>G#z}mmO;LBX(Dbi2c8@vvz{mTn|6sqmP`-T_%1F-h#E_m4^s(z#Z(!YNj z9R5M0|NISjSq8uMQ|v#$d(-%z06zo%OQsfi|KGsc*Sp};q^BS0FFhXhc{JUxlD-2z z0+vVeBTu$I1dnCvNAO+)%Qp+uBeg>N8d$z#ryfPm;>~IL=Mh1tzru)b;`IjI#2XE| zi8mW`6GsN!#M=z|eHr`#%JW_7Q|5Ci&+meN1YVda--(etNS?0T{|jCF3YYlvin-jM z5?^Xcumje`8$@O3ttl-H|Qra_&xA@9-PgeVD+f{nfSCpe<6dv z2ft03s#RRuZcGs z^kD;^Zi8Pi=!@UooZhncPK`r@ZsHXNeWig9w7~}rx``h*=q7%`pg(2cp7%AE&&0h3 z-81mY@#gnUyxO2|H1MG|_^?4gYT(0rn$tJ&af5E+69#?p{SAKqOn*H6J&kAO{ttLt z2G0u_&ktxietE$1tp)XT=Ng{8GJ5SzCoemUkpB+ zN$+xS{(}wrRbcskgpOYXpUB`hf{$kKO{@|fVi{3QLK`WL#$ z%NIYK%f08TYX2yB6Zn_V=cM%GV5zU=RGqy4S>!Lt|K^n6{{%~Um!x>-rx|~&M?ES2 zQ?RU$-6{52SoC*1B)xmUS^BTje)>t|Ik1#3c|Yy{+44%<7oe+0wXca^H0Zepo8!xO zLG=5-b`A0wSbT};^)E}8c#AXf1urr1ijU?cm`CNu#48Q@`V8Jj`pX&r^OLu+uK*Xp z=cM?j;FX#AVg9w~KQr+?@a7C%a`q_w}RY zpX~cWTbJP{czp(s^8Nt)uOeLJtIvR+(dmJI0Ddxq<^3c3^YVvB)t8AEek`9*g?^g% z^>HD*PJD2<9_w%_wOyj?5MVb}<==#a#PpFGB`4zm_zzXG`t+Q34|@)P{@$Mf=srz>~KV~Tzp zB>m+r#`~iN{)BB>D#dr11@vsHROG2Z`o17CKXdQ<){<$I%n z%LabHz@Ibl_YHi~zzg2koZfN+-y*n2&F2?Vp4-9u7pnPQ@Y}&Jf~CC#-wi&U!S{fl z1?N-xIJo-)r7w{99|FsLsr@PaQSd_O<0*dGO40+%{4ep}55Dihd~QpMtE*T)GU;7( zJ@XOtbM- z+CSVvVjTc?pUy+2p2+p*!E)ZN%kxw4VfZhDF8O)I&CoZg{kPyd!E!z)_XPxh3@rPV zjcNQJg5|tKd>jkCXFc=57G)nIcr94u&&6r{kAh{tDt=*w{_Z!^9;1!?{I6T6pFR1U z_$d{-dn@xB<&|e)Zf-6FA0YjOV4;tJ<^1?aik}6`eoNCAZeYF2(1*ct9;M6wU%}b; zi*IR;|1dZk|3$Ezmmf*fd;4wJ!`#up-v+PF@LzH}=TmQLwBHz5_D|hueSRA(_8N4P zq&)u&mi_C(6fdKqWq-Ok#lH@g{hrt>OZg9i#XdAl>A5>7&qqlwrN0Awcn|vXl>P;9 zmVfu1N*OSuAl>VLjXb4ML#UO0s&{j6d>N$JP;!jJJ2ruc`y(Hwv2haqgw=Z4ethQJ~ZZb|V!g5^9%_utDO zr2lLMr}NM6e1!7QA2t1dfJNTY{pabAHjnph4>gbXp8d$jJM%g5UoG`9`{U|7`c#_! zryhp?2l6@bnJo1FN9a%F=e{(4t}qtw8p{<%hUCMvxk9|HuQtM$;d6yi6);*E9nBSz z|0S+^3+1t~k$%2S853L`+P*y=yCoehHkf`w`I_lgVQbvw_OCUU4&wr2<@`aE(h&0P|Wqc?H1cNo5EYS zX4M8e*cOK6F!pMG*^8{W=Gtr8WY=#)58BYfHuO@?9=T`d*1;V+EpKFZi79b(*zUXc z?t8Wuik9uW^s5o&Ipuq@raan%hs_iemYYQna> zS`hJN^3b{Id zCMSiHlcr!;%-!u2{X)em*P^%^ zVT-U*ZnS^vV0moENL+Bs70+@4D=9Y(-kM-dMsRXNgVngN8V?KSM7oyd4AcCRX3mr6T-q4VKS;FM6_Fl(MKmlZ1pl#F(IB!#Z3romF-rE zw0hTWl?tO}LLxF0Cj_<%v+Z0Ij}+|Ka^jk!y16wms6{ODGU3fu+{ntrcy5a@uSHmK zVpt1yEx5H{)`FKmk$o^RD4ZBn%2kI3N5}ex`lCWM_MB1>>;63%!J6!qNeR^EB+QDF z5rWAG;ba6#GO~MkY^bl&zm=~f7fNo)aw4m$Mk_g(oa#+Q^rs@~*?NeXCa8tA3Qv-t zlg`x>2=-)z;$#Gd{f^4m00~q|mB~9b9Y~?6nN_TZRTLLrb|z|6p|}ikU>6l52Zut6QzZgVw<%kvBZ~ zUbs6vHsS=)$k1?K|6t$nK)D((UB7YZ(%aT9-4QOmapO{?kD_1kN@c%PaqO^Gb;@gy zT;8F1S%v$1waZqs!ZqRwuFy-!a z{))&~9cIK&xx1aeGL5KS%3c0;m?0^qROU3wAobrNcWENwF2(Nb6{nQG(s`3Py2<2k zhp7m6$(W?p;VYfjkmI-R|90!(Nd^%zLF++>P%*}0!q7k__x1Ff9a@1kVQ9&yD-?!? z$NCvCgdz@;j1%NG6SP=x@Y zPur-CnWt@350Py`yVl2AEevhj@mv=PqUe;IvRAHDt+E%o>{H#ST(Ila-9BnP|LvpJ zdwtue)5vOlI%vz3L6A0J`>4~%K)tQobFI&%?V}>FPiVk;{^MdfE|(%d3d+SWs94Av zrKsY&L8)q4Rof{b0Ze?o)mTR|nUGAP(~tq=jqV<-1|#uyR8qT~Vs*#J2r8+*v27!9 zIqKUn*#E8_D4)hg>`g&m-`04nf2`Qock`OJisHkLOSM{T`Cd7$#T6D@<`m)S^bZyJ z(?4W;x8AXF!yOy@ZdkQp;~lrHnZUxW)XKI~E609Na;=czm$Jx=Yg>)z>d=nCF*{g) z>kX^c_ib2p%S|`*-Eiw2w``oivsARIwK$5Ml3y#9%gjI%i$5`_MJ2gOX8b;x_BJlv z;aE${qsbpNHzIx&3abWp%fuIq?H-Q%`XdoTDt5&yGQ!G5w``SFt<;4W&zUgOPCBE? z^c0uvQZ+6W!-{1Wtzx}?q>B5u4-bq6UXnlgo#ai*TIe4t6z&@7A7ic~*R`P$m3uXH z-xD)`-x*h>SO`xyEM29i@8V8*hh!r!MmvE}dK>=oc?Zx$OYm-h@1aF*0GfRN=qSr$JxZN+_xH=?v2BHd>N$xnkQvt!jHO zb+gw7c8qQ#+1T@)V$6Ezguahjv%VOj5UUm~zZ6!>b`+PZ4)qaMtA14Ty{cpT1+P9q zwvAe>&v5Od*5}gpQT-M(hl7}3-Z3!Nw{2+X?zWAdvC`l8o9 zpLH>{ZB)ONkTabk*=ujQ?e>jouB3HKHLDUuPBnBq8rm(b;rJk3E8FL#^G5SKuMEHQ z_Vw!`K>NIQUd2J@H4t>(!~Oaup>1Am7V%EoAn3dbg3c>8?7RvPI6KWN0(!?$JFhLQ zLp$Z_cb->&8ZBFwncKE((0L66oe!>{^TB0{O4pS8S_FA|;w&bDh_~+6TW@Bz@Z1nt zv*y*xB_|52mdqBZY^EYQo}OKk_xj?Ik)e@frj?bXRH=HgUn&)2+Y2HDh_vCNYAJx^ zIYrAusEx~E;3R9ETMRfgDixf1y|s;M*9Ut0sP&%HK5D&++efXB$o5g|J*RC{r$r;x z#dXAy>fK`_=)X$W>t8`USgs7jQLyHgRoAayvzq$1XgGuxD=JmJz_J5ry$PM6p8IN< z&0<8vxXQv{TcK5T5xN4;uUc_2h#Lz<+nA1YlDf2OTN4!vqO)VO(Lz`)6qF29+dhV1 z9hHa2;*pHX!H`>1l|!m_C^?k1WO*T53BOoW!dlTvWaDg#cPU9YE5|3v-IYko@U$(J z3C;mWs7SlWHq5C8WgGQiNEJ)@eg%Aswb1sRYRyNk3Xtz-%r})ADTFjTW6O#hBv;P~ zLPv?sGs$fe*Rm57tBFkHhQj!4^NQ|>ygIh+N2qN5h+T$VRC|oG$gAS&Sv5LB%?qnu zSVXteV)NISHR8ysmCMXgrBcbU%P6DlqH9@2yH>M<5-O7V2#MN74I1OSZPdmL*EVWn zE@~Tf8hMrVW^`x&San+gV-pTC=+nNFjFtNKF`3Q_g*7s(-`qbKO)_p)$CVvhWemEi z2ikE|i7mDTUcjE!PSk(@e}j;cG$tlg z2-C>#G}^+RMq41#bleusH0sxx#<;*0K<9awMq6-r(>dR1v_*1CrA|)T_TS_Xti!nO zG}^+Q#<*~&(QfWE+RdFtTe#C`i)pMCcIIfRZCkk07#EElb^CdpE%gKm9!msshgZre zb$PimG%{B3L*I6znyn7~CMRJXv14?s+84#!%Y$2y2x?I=z;Gwlwi8oOnP{hanfY=` zGG-Q2FrS)=wZ|0ihB>8L4~xaBZAYpSu%<}V;7x(pQnUzc9g1;8i@3=Kt-kMZ-3eNL z*@P@zzX6j4{>eTAEpJdlQVrrt6jbe+D45fU#IHGC$*pp>;#F&9H;#i^$*FRp5F=d$ zUb#>oK5b*xC%v{Y>r;Q*n3#M_tO4v!CI-6L262oWxy5S5jl9(MWn!3^Bbo8gj5Tc~ zZEr%Is&g2QEJg~2vf3|>77Dc;qnuo?<^QsIRB`k<_DzFhLpP<{N=1=<9%AljwLBcx zg;{B!w2_LHa?P%VQ7JaG!lk0?SAtqGq_HEr5<9h8E%3dlf>mcJc4DrYr_I?mW_`wJ z8?zxKw2j(WN83lO_ouc|8>>g#s0~d{`>37QRb!cH%N0}1PFtWM9JJ+%%bJe4)|aF9 zT36F7uN3<1IuX@SnmSWTG0>fvg`VGsa6dwt6T}JDhFX!#l=_(i>^e+bJjcc zl4XZ7wBnLovan2e zMHTsF*W(I-6Gfq2t-4+qxK6oH&r{o&^}g0NW@97WHfrN+w|&&kGf?lq?U_y^s#rRk zGDjKlj$`)cL>fxZ#Z&sNZ2lw+$J z_)*33!%|)1bKO$4QVpz9XggsLp^taM(67d}Q?e^XFOa!GOG8ab1}e#z%PXxCEOVOe zxmFn?atjNacp3?YtrJwKr-==XV1S<~pT((>>lZm-wqlMHm?hKsq;2^c1FvmVuinV* zqt?em`>6FvqHRkUb|DTz2Ah}IEVr!m_p;!yM5I9s@6Vgy??cjTAv)+M{TtN)TIhG+HR3c z0@y><{MdKgn(J0L2e0|X3Su#r1nc>48?_-rqqHqCit08zP&v1W(LSr5^t>r^$^_pohP3{aJP^j(#b}!f zL_`+?dAT#T%VH9a-+LP`x2E^-%iAs(F9}P91q@; z{7kf{$**L^P85xO>W0CN!JWujvQ&i1z(C)KE)=%KZBKO0rd?Jn*Dggxxq(9T zKG7kg`A+g7)tj2I+j2`RF&|A#;p1K9s>txABG=1`rIKfdm5Lp!wO3ocCuSr~ro48Q znV8#VyjHbbxet?^(_l33R=M5D)i|ugF+62ju9mBq(?*UH*} zUDiafY1;MplW(-7OJFk|V8HBol?ry-S?LI=F0dyEbu;UMq~vk!p@dQh>mxQ<6?@Ip z1<|93N*t{9Z?(PEs)H#pa?~A+cfyp-pD-)c;;@AI7A7p6)uJ~=;+=6Qo;8PH3J!Yz z>W{>u7-ico^XN!uXHj?WPLOxV~Z`VR9PriK;2QubvA-m!fsiu&3VJ%3IS1VqtvKjz+_<4sOk@Q{ZZ+^MuUe^< z%IL{iJCns_tCBKgo!Q!0WdyLS$eP<>sivwISrF7cpoSSW z4?J1$C=W_1%MCHuWtplvVx*Wf06U?YRm0Pb8@M!0$eLB-w31C@xf+BhtMuCC+d9< z$U;6y1rpUaQlPs^mZmMP)lFB`zlMgkH@)8+r*CxI(2jvfU6BoO0E(E55Q8HL`Dq%JiYaO~Ggs zXFhTDZW)zaLyobrm79vSVnrsL2_?5n93E7K`6rnCNR?1k-Mx5lKE2%mb(bOzm#q8gY(LYy<-1f%I*2RJWBlT)2 zt_8KYpv4u81+8Mp;kx5cVoZ%OsOpS^UXEtYK?^*sIOtB&BzSt0soSO15IJj{%lK8h z*Llzjx5EYSl@&4>?yv3-1N&H%bm}tSTshiY33Gg|nG+&~nnuIcQm} z6$h#DbVEHhX*V_OjVqzerl=~4Xm(E_2ONEzh15s5F-nVSlnxB-MCY|F76rU5>by9P zOQBb?0yn!^pqD4ARJYY;7h<8XUKp*5cO|Q-zGl0_buzlt3NC2Skrt8XBbSDmbOuTD zwqtm>o;OsGw%k7TV(x=t*WUbYo4nm2jHb?;7rST(IoK~&i*X>v+Pc$Ay$OF8O~zEJ z_!~1GBI)c1vy3y>?Un{QccE1>=tutQ#Bchgk=VGfU_JgCXuo-hiFPjot2nvDXss5sXy&Af>`6z`>Q+4| zn?k9~g*0(tQ7OBXQo1GSa4l&kG_fQebT+CR3tZwNJ6jY){a!*0fA!^AmFj9f5TO5`LX z%BYe$jgs1qOt*1_iimqQH8mJsvdbe>hOfqz8cwo7)GEO{#%f`5Jte!B$&NZ>sjzAs zmQ{<6TZvsC4>YO*)Z|_n8dB~PnmjxtbG+`E4UxT4j8M#$OE#Vi%N%(pjEZW1o=Lxc z1UyOp>guMs&RB0JE)0aq=flEd&uW5^x- zUs1MH@A0kBmA>tA=o>pxW)5tUj~pc*DN}@obpW~ZMQ@7f6rKdil}LAVC6$V8Yzqe) zs``yq3^0V{3@*akmw50>W#j4diBJzRAr`rNhB#`aykt&?)5k-zb)0(^_lLby85bC+$h|&??WvXvXKhI*}P%UGF zhTkKX<$0!je7uv?P<>)3$hzWZcL*q2@v>(6YpZJ-lD>a7_dP?j{-H>2NLP4AscOwD z*UlUyVy0j=UO1cLReYAQ~A-Pq2mk;M1OMycIWlE+as8C%s#7*|VP4ZRb(4>cKg z_9`Y4SZN29nuC`^tR<2vZ8{aO!<}-+R7C!)rxUk^?25BlbVg{VQ+F{pM&5BXCiirmGoFTnI+?yj4CSk3T>|5*;JxE{Il%{#`_Iz)eB zl)BYw=#i%i-f3N{gr5y{k~2wKGclw!OkQpJj$>hV#UZ~_bIUJ5icOu+!-5To52Xkj z=MwYBufBv$YhsK~B6dJ7eV&7~sMsbw89lZo+w1hO%1*sm^$*r?N!9G)iUzAVVvk$K z`mW~0m`ilpiS&4wq+ul+zDhaVn7GrrDUu_eQoL(hnIp&K%maHrbSB*Fs320YjhU)w zopo(nD>YhWt3wuAv(k!%4AV(U79(g)3%UGhjm{J6W8=fgh(477~;mwLxv8pDett?VYxHqbYgb?Mol_?sy!BC zQ8dA5JL?6aCUBWnV+ku_?N5F94R=@BcCnj=lD%==ZEIGo?z`!hwYN@i!-jCoZ0glq z-}kL@JY`#T)-5?%n7rs6ve5dcRz15j7R9O7j?P$|eK~BcJ)LO0>2=C@90eSExB5v3fiIK+5)$Zo4yR*Mtwa%G)#Bu5{u ze2mgf*@j~Q&uNp*+KPQ%n<>E9gO_eA@4Pck#lO_^oh=8_@yI>w>TzH*tX!cXMq($z z@mG=V>!nsO9WcX_V#3R@qahCX6kqwYfI1SP0OTs5+F zhkP7F*=%&OEe)fhhY}+!SKPQ#6z^@SH@3U6irJrbtvync|3Wj!YUP6`KQy#!aqza&bR;`F+8oOvIO1O(_`0i^QG}%o)9m5;f-+Fzs zQ%7OrV^_g4f}9^9->4m@%x;sh5hs54#v?<0BF%HgH6||YIBu%>913HCgR--VT;5rw zAZ1TcE1mJs2Z*iewKEPZ5@($YteB_Zp@rQ{rMgW=Vboz!PV1v6ibIavLrbZfGBQAs zCAvJ|42{~(&GBwg$R%4V7i&7+<^-sM2G}i^0uG4~PU`}8dTws1Q#%pPN*lzR?@jy) zw#TER<*nk3(nkdzd$!AN2X9evx?7c@G8F@kEX#xVFBMZgn0RGQW*qF2swjW(?NZ;L zH45%ni6NNE4c<|p4o)hCoCSwePMtXiEltgwgPU&t z&VoZKSI(S+lWrep&cRJJS7*T?m2F#bNcWC)lW_z?UtO$V#^Jtyk#iFKDY~|gbJ5Hc z$-WSad{f;j`$CpM8ArTc#l$>BW5!)pOh>UHn{s5Uxmwh?#g=@P@HWQh6;b5u7%9uQ zF4BY|2bUhzDtk5VO(B7Hnvg#sA#;*QRK@{tgr>jAX#Un0s zOBjN?QJ9|KPoEDv1iOsoUXerda+pq)(>@_%(~b=&YG!5_Ox;o&ubB)H8&NUzD+ult zzS@&+nzZo5EXU_QO3k19=)2?g#2YcngTO^}tzx%>MXh)vR<&Mo!$3a#VN*&QAFS|} z@zcz7l5dE}YJj_eVufqD+ylV=RLgl&aBb}Nn^jPge^x}+EL;k6qX^4YJB+zCmd?qhU{#HY zuRcpp&$zAMNJNYT@KM5@4Y7}nGe#}VMpiDq5~%PHhgu>hVDOD1k;8rI6oJ}0sWm%Q zYlz}WeV}T6`fHLsVGAQ3yXx_U4Zfs|BW6BCm879Np4ttzKCt&Npu)7)LMeqhEI_l} z*=)s~zR72r4p~g4sqKtK;}E~KvR7(gf+nJsT2G9_V@zh*@FFIqE(kh)+bfqaB&u=; zv&L2}WA!j0?Fp)kB6s3SZotP!DlQJ{RbOhE@Pt=!3T2@PF0y2b@0=Oi&s2*w?woqK zZNk(8Ys7lr$xJUzAL^h_qd4Sv%`3CbFL5DPuD^1zipdnW9!Xzl`-uX5P&{)ET9jzTA)Ut?RieKvAeW0}?yO*Xg&jNR z0}Z`vLwb@^qKV&1Qlno!S%t^Hv7zn#{9Tp&y+cnqGGSY6B=`;_VqqL|1!JnJk~Lnq zimn8Gfw}#dJi!fYN>FuYeLALl2dpwNB;uR56|SAQTmwr7{uH$&`iErFY0@V-9#(GL zp`x>u1LWv>KT8$gCAL+KGh8m8>>dz>c^F{GP~^HrrCM{jYL~p06mlwsd8j8-I7pYm zuG&T6&xhlx9dZbUl@=NX7>9EB7ldK0gj@dfu1_+%j*JD>fw(-lV>q~B{hC#`+#w$h zuZAx6S{Mb1jNmnDjBC%_ec&2{*b$(r=2%M02TiBa>8#P097Ocp9q%sPKE}dOtH^FeG}zb>dgzr^V!wjI z=4lqdM8#q$ zz?%!MQCPOHPSHBJh>s=IqR_{D*2AJHM&Dbr9V`o(K`LA+b@W`x^y>3Lt`fH%i(+6{ zN^avz&rZjdcl)|q?^wTDfANkq9S5Vmn&rmi}=O5gM zlJWBr9~toZ2yvf78{=jVRdQnq;MCXtyuAALiM7sx**+VTSsk%7P1QA?G zoz!kGk6>dVo*M?mZ^(pT>~>^@Nmm)MK(7?b+>REVKePN4;$^)(SmgMekD2Y}d1bOQ zmn7Dt(^Mm4KE~%^N$y%=QRkJ~Wz5gq;ZW9cg+elqv$AtcI6A7U$@u&t{Y31fn?FAh z%jM=GzJNW}i{!gQ6g^pY^a9)ZTYoG)++D6zOA#l{wHiB)&cx|Z55$?PAe^(;rG#hC zf;nx9{?l1yU;{n{4;rHF5`jfYc9CuFm(uTxdWopGHN0_Qx?6IQsQv8KHTpOom6^1U zX9r((5{9*0aAd=J$tw;Pi6!o37@ zg*0(vuBeuAAy;z6nhW8jTz8<-t|s_gmD#{*YE`~P(!MlU)mH2)lKH%lXE#J!Gel1^&N9e$5PaLB>#)^XvqjCG1 zYrBPXiJUnDH$AzVIR|aWbQT=WJ`bs|aTa+Sy@xsnZE>;6v4Z#u)LL2*&@c(a;T1l+9fkt&)BtG9p|0eg zF^Bq+GGh)}(w%uJ>PusbJka~pHbed2ZsGeP#L_xxMw)^vOWa>AR`@uX+$c@APFd^E zRDM+Elw2`S>@24v1K}e~>`;nGGnE=mo3^%7wot=jg~ughJ_=GPb0~mg3U1T!Z3cXa z7IY~s+S|vQG`bn?gmXGoO7%(Y7-(6j1p_@sMctcdttU6LXss8|UIoSq8GQ(rM>yD! z-<=jvcZ9RcUu&&;Hh&I7x>mDd52bg7OER72PfKxa@|QV`Z1ycI`VExpG+hN7=?b5t zQ1in~4tpZJ)8TF<#3^;aUDVX}Y5Ip)?4B()C?(u0a2Q<2+~`*39d{JL`JTcX?Xnq28J4a4mIM7^U;oAB&Hwb3o4^ z$_QiiSDJKKC}tUOc+~cN8{c>7Dd_a)R2FYOSL#Nk$U^*V^5h@`Z{n3zQA_PeRw(KD z_}}v7);G=z@CTwNw<)VY*s7b-{eykDiK-@_RuZ-%Vy0u7S;DW$rwdRfbDbGIXL8=z zigD7<+q#ucJ86**#BjA0AE@*-=ByxXu+q1FfeXQ#(~f zO~*lw6-HHDzG^25)9(QI8FV+`zuHG)TKB=bMGX&@d-VBYfVE-?zyh(T>~{?ULb})w*StS+fI&C7&HQ zHvpWN&mk34bCj9Lmz?-XEy%awaV4XT182gi$X>_75ig&una=l{NLM#~4c z@S-MPJ;z-d{!qQlH_WNCu(o5cDn=&$+QC}~aW*Pm3j2omMT2r^6k}4rff%QkxC%@g zbdm`}YF3U8yw-DR^C3YZ=hPcOIuCbdB0T$XXcXZrPai9{NUO8yHC@45ysrn8%3(^G=DIO^OS~5*PLXg!sFs5k$tBrs`?&@^iP-pgwfL$n*HCbPhYO^-W7zgA z(n+Kx3tebEi!^jUMeRwFGj)_8A^yg&FsKGvTZ#TgyzmLZWwYb5-BEq8?I#@S!*}K! z^t?E84*GJy%sHez=`89&8^zB&59w}i(mb^N9)@PnVmjz>LeYh2!GX?&ro#MQgDXA= zN~6PZRk=ux`l9}OxHY`pws&w=q55T{UygQ#KrOKywG z_&-Ndq zEaELEo(I;C(Byd?|8%@4ji>V@bj|N7ev{^~gvlfPE>}O3|4W|ac?19Cw$?*+RSxcja>D5HM?wN>}o63;(37`Z@BNuG|(4_^Z?1#P4jpg-g3~ Lw?5X0sN?;ALOe3J literal 0 HcmV?d00001 diff --git a/examples/is_prime/program/src/main.rs b/examples/is_prime/program/src/main.rs new file mode 100644 index 0000000000..e9e0b78165 --- /dev/null +++ b/examples/is_prime/program/src/main.rs @@ -0,0 +1,32 @@ +#![no_main] +sp1_zkvm::entrypoint!(main); + +pub fn main() { + let n = sp1_zkvm::io::read::(); + + let is_prime = is_prime(n); + + sp1_zkvm::io::write(&is_prime); +} + +// Returns if divisible via immediate checks than 6k ± 1. +// Source: https://en.wikipedia.org/wiki/Primality_test#Rust +fn is_prime(n: u64) -> bool { + if n <= 1 { + return false; + } + if n <= 3 { + return true; + } + if n % 2 == 0 || n % 3 == 0 { + return false; + } + let mut i = 5; + while i * i <= n { + if n % i == 0 || n % (i + 2) == 0 { + return false; + } + i += 6; + } + true +} diff --git a/examples/is_prime/script/Cargo.lock b/examples/is_prime/script/Cargo.lock new file mode 100644 index 0000000000..2132f15039 --- /dev/null +++ b/examples/is_prime/script/Cargo.lock @@ -0,0 +1,1891 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "anstream" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" + +[[package]] +name = "anstyle-parse" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +dependencies = [ + "anstyle", + "windows-sys", +] + +[[package]] +name = "anyhow" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" + +[[package]] +name = "blake3" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "rayon", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "clap" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80c21025abd42669a92efc996ef13cfb2c5c627858421ea58d5c3b331a6c134f" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "458bf1f341769dfcf849846f65dffdf9146daa56bcd2a47cb4e1de9915567c99" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "clap_lex" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "curve25519-dalek" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f711ade317dd348950a9910f81c5947e3d8907ebd2b83f76203ff1807e6a2bc2" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "fiat-crypto", + "platforms", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "der" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" + +[[package]] +name = "elf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "indexmap" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "is_prime-script" +version = "0.1.0" +dependencies = [ + "sp1-core", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2", + "signature", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p3-air" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "p3-field", + "p3-matrix", +] + +[[package]] +name = "p3-baby-bear" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "p3-field", + "rand", + "serde", +] + +[[package]] +name = "p3-blake3" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "blake3", + "p3-symmetric", +] + +[[package]] +name = "p3-challenger" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "p3-field", + "p3-maybe-rayon", + "p3-symmetric", + "tracing", +] + +[[package]] +name = "p3-commit" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "p3-challenger", + "p3-field", + "p3-matrix", + "serde", +] + +[[package]] +name = "p3-dft" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", +] + +[[package]] +name = "p3-field" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "itertools", + "p3-util", + "rand", + "serde", +] + +[[package]] +name = "p3-fri" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "itertools", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-interpolation", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-goldilocks" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "p3-field", + "p3-util", + "rand", + "serde", +] + +[[package]] +name = "p3-interpolation" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-util", +] + +[[package]] +name = "p3-keccak" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "p3-symmetric", + "tiny-keccak", +] + +[[package]] +name = "p3-keccak-air" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "p3-air", + "p3-field", + "p3-matrix", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-matrix" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "p3-field", + "p3-maybe-rayon", + "p3-util", + "rand", + "serde", +] + +[[package]] +name = "p3-maybe-rayon" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "rayon", +] + +[[package]] +name = "p3-mds" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "p3-baby-bear", + "p3-dft", + "p3-field", + "p3-goldilocks", + "p3-matrix", + "p3-mersenne-31", + "p3-symmetric", + "p3-util", + "rand", +] + +[[package]] +name = "p3-merkle-tree" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "itertools", + "p3-commit", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-mersenne-31" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "itertools", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "rand", + "serde", +] + +[[package]] +name = "p3-poseidon2" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "p3-baby-bear", + "p3-field", + "p3-goldilocks", + "p3-mds", + "p3-mersenne-31", + "p3-symmetric", + "rand", +] + +[[package]] +name = "p3-symmetric" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "itertools", + "p3-field", +] + +[[package]] +name = "p3-uni-stark" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "itertools", + "p3-air", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-util" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git#cfbf9583a02d16f9523051e0ae9840ab9d228aac" +dependencies = [ + "serde", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "platforms" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rayon" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "regex" +version = "1.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.5", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "git+https://github.com/GregAC/rrs.git#b23afc16b4e6a1fb5c4a73eb1e337e9400816507" +dependencies = [ + "downcast-rs", + "num_enum", + "paste", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +dependencies = [ + "bitflags 2.4.2", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "ryu" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "semver" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" + +[[package]] +name = "serde" +version = "1.0.196" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.196" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "serde_json" +version = "1.0.113" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serial_test" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ad9342b3aaca7cb43c45c097dd008d4907070394bd0751a0aa8817e5a018d" +dependencies = [ + "dashmap", + "futures", + "lazy_static", + "log", + "parking_lot", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93fb4adc70021ac1b47f7d45e8cc4169baaa7ea58483bc5b721d19a26202212" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "size" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fed904c7fb2856d868b92464fc8fa597fce366edea1a9cbfaa8cb5fe080bd6d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "sp1-core" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/sp1.git#54b64b646d18cabef3307bb90167d23470736dc3" +dependencies = [ + "anyhow", + "bincode", + "clap", + "curve25519-dalek", + "elf", + "elliptic-curve", + "flate2", + "hex", + "itertools", + "k256", + "lazy_static", + "log", + "nohash-hasher", + "num", + "p3-air", + "p3-baby-bear", + "p3-blake3", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-goldilocks", + "p3-keccak", + "p3-keccak-air", + "p3-matrix", + "p3-maybe-rayon", + "p3-mds", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "p3-uni-stark", + "p3-util", + "rrs-lib", + "serde", + "serde_json", + "serial_test", + "size", + "sp1-derive", + "tempfile", + "tracing", + "tracing-forest", + "tracing-log", + "tracing-subscriber", +] + +[[package]] +name = "sp1-derive" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/sp1.git#54b64b646d18cabef3307bb90167d23470736dc3" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "strsim" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67" +dependencies = [ + "cfg-if", + "fastrand", + "rustix", + "windows-sys", +] + +[[package]] +name = "thiserror" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "thread_local" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-forest" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee40835db14ddd1e3ba414292272eddde9dad04d3d4b65509656414d1c42592f" +dependencies = [ + "ansi_term", + "smallvec", + "thiserror", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" diff --git a/examples/is_prime/script/Cargo.toml b/examples/is_prime/script/Cargo.toml new file mode 100644 index 0000000000..1e17736314 --- /dev/null +++ b/examples/is_prime/script/Cargo.toml @@ -0,0 +1,8 @@ +[workspace] +[package] +version = "0.1.0" +name = "is_prime-script" +edition = "2021" + +[dependencies] +sp1-core = { git = "https://github.com/succinctlabs/sp1.git" } diff --git a/examples/is_prime/script/rust-toolchain b/examples/is_prime/script/rust-toolchain new file mode 100644 index 0000000000..f7ee87eaf9 --- /dev/null +++ b/examples/is_prime/script/rust-toolchain @@ -0,0 +1,3 @@ +[toolchain] +channel = "nightly-2024-01-25" +components = ["llvm-tools", "rustc-dev"] \ No newline at end of file diff --git a/examples/is_prime/script/src/main.rs b/examples/is_prime/script/src/main.rs new file mode 100644 index 0000000000..5823f27db2 --- /dev/null +++ b/examples/is_prime/script/src/main.rs @@ -0,0 +1,28 @@ +use sp1_core::{utils, SP1Prover, SP1Stdin, SP1Verifier}; + +const ELF: &[u8] = include_bytes!("../../program/elf/riscv32im-succinct-zkvm-elf"); + +fn main() { + // Setup a tracer for logging. + utils::setup_tracer(); + + let mut stdin = SP1Stdin::new(); + + // Create an input stream and write '29' to it + let n = 29u64; + stdin.write(&n); + + // Generate and verify the proof + let mut proof = SP1Prover::prove(ELF, stdin).expect("proving failed"); + let is_prime = proof.stdout.read::(); + println!("Is 29 prime? {}", is_prime); + + SP1Verifier::verify(ELF, &proof).expect("verification failed"); + + // Save the proof + proof + .save("proof-with-is-prime.json") + .expect("saving proof failed"); + + println!("succesfully generated and verified proof for the program!") +} From f7d81bb35c314f9948fc5c9a8894297e648b79b1 Mon Sep 17 00:00:00 2001 From: mattstam Date: Wed, 14 Feb 2024 13:10:56 -0800 Subject: [PATCH 2/3] description --- examples/{is_prime => is-prime}/program/Cargo.lock | 0 examples/{is_prime => is-prime}/program/Cargo.toml | 0 .../program/elf/riscv32im-succinct-zkvm-elf | Bin examples/{is_prime => is-prime}/program/src/main.rs | 0 examples/{is_prime => is-prime}/script/Cargo.lock | 0 examples/{is_prime => is-prime}/script/Cargo.toml | 0 .../{is_prime => is-prime}/script/rust-toolchain | 0 examples/{is_prime => is-prime}/script/src/main.rs | 1 + 8 files changed, 1 insertion(+) rename examples/{is_prime => is-prime}/program/Cargo.lock (100%) rename examples/{is_prime => is-prime}/program/Cargo.toml (100%) rename examples/{is_prime => is-prime}/program/elf/riscv32im-succinct-zkvm-elf (100%) rename examples/{is_prime => is-prime}/program/src/main.rs (100%) rename examples/{is_prime => is-prime}/script/Cargo.lock (100%) rename examples/{is_prime => is-prime}/script/Cargo.toml (100%) rename examples/{is_prime => is-prime}/script/rust-toolchain (100%) rename examples/{is_prime => is-prime}/script/src/main.rs (90%) diff --git a/examples/is_prime/program/Cargo.lock b/examples/is-prime/program/Cargo.lock similarity index 100% rename from examples/is_prime/program/Cargo.lock rename to examples/is-prime/program/Cargo.lock diff --git a/examples/is_prime/program/Cargo.toml b/examples/is-prime/program/Cargo.toml similarity index 100% rename from examples/is_prime/program/Cargo.toml rename to examples/is-prime/program/Cargo.toml diff --git a/examples/is_prime/program/elf/riscv32im-succinct-zkvm-elf b/examples/is-prime/program/elf/riscv32im-succinct-zkvm-elf similarity index 100% rename from examples/is_prime/program/elf/riscv32im-succinct-zkvm-elf rename to examples/is-prime/program/elf/riscv32im-succinct-zkvm-elf diff --git a/examples/is_prime/program/src/main.rs b/examples/is-prime/program/src/main.rs similarity index 100% rename from examples/is_prime/program/src/main.rs rename to examples/is-prime/program/src/main.rs diff --git a/examples/is_prime/script/Cargo.lock b/examples/is-prime/script/Cargo.lock similarity index 100% rename from examples/is_prime/script/Cargo.lock rename to examples/is-prime/script/Cargo.lock diff --git a/examples/is_prime/script/Cargo.toml b/examples/is-prime/script/Cargo.toml similarity index 100% rename from examples/is_prime/script/Cargo.toml rename to examples/is-prime/script/Cargo.toml diff --git a/examples/is_prime/script/rust-toolchain b/examples/is-prime/script/rust-toolchain similarity index 100% rename from examples/is_prime/script/rust-toolchain rename to examples/is-prime/script/rust-toolchain diff --git a/examples/is_prime/script/src/main.rs b/examples/is-prime/script/src/main.rs similarity index 90% rename from examples/is_prime/script/src/main.rs rename to examples/is-prime/script/src/main.rs index 5823f27db2..a9661ac131 100644 --- a/examples/is_prime/script/src/main.rs +++ b/examples/is-prime/script/src/main.rs @@ -1,3 +1,4 @@ +//! A program that takes a number `n` as input, and writes if `n` is prime as an output. use sp1_core::{utils, SP1Prover, SP1Stdin, SP1Verifier}; const ELF: &[u8] = include_bytes!("../../program/elf/riscv32im-succinct-zkvm-elf"); From 6d98a9fad8f36b4b18bd8c3369108318a5d9a92a Mon Sep 17 00:00:00 2001 From: mattstam Date: Wed, 14 Feb 2024 13:15:52 -0800 Subject: [PATCH 3/3] rebuild --- examples/is-prime/program/Cargo.lock | 2 +- examples/is-prime/program/Cargo.toml | 2 +- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 116288 -> 116268 bytes examples/is-prime/script/Cargo.lock | 2 +- examples/is-prime/script/Cargo.toml | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/is-prime/program/Cargo.lock b/examples/is-prime/program/Cargo.lock index 76facb02cb..f114e95c9d 100644 --- a/examples/is-prime/program/Cargo.lock +++ b/examples/is-prime/program/Cargo.lock @@ -209,7 +209,7 @@ dependencies = [ ] [[package]] -name = "is_prime-program" +name = "is-prime-program" version = "0.1.0" dependencies = [ "sp1-zkvm", diff --git a/examples/is-prime/program/Cargo.toml b/examples/is-prime/program/Cargo.toml index aae8b3ea09..25f550f2da 100644 --- a/examples/is-prime/program/Cargo.toml +++ b/examples/is-prime/program/Cargo.toml @@ -1,7 +1,7 @@ [workspace] [package] version = "0.1.0" -name = "is_prime-program" +name = "is-prime-program" edition = "2021" [dependencies] diff --git a/examples/is-prime/program/elf/riscv32im-succinct-zkvm-elf b/examples/is-prime/program/elf/riscv32im-succinct-zkvm-elf index 32fe459e994f8d60021884d3976517d573d445c0..3caa822310dc5edb7889af5da1a966783515aec3 100755 GIT binary patch delta 16934 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 delta 16965 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 diff --git a/examples/is-prime/script/Cargo.lock b/examples/is-prime/script/Cargo.lock index 2132f15039..472e51901e 100644 --- a/examples/is-prime/script/Cargo.lock +++ b/examples/is-prime/script/Cargo.lock @@ -607,7 +607,7 @@ dependencies = [ ] [[package]] -name = "is_prime-script" +name = "is-prime-script" version = "0.1.0" dependencies = [ "sp1-core", diff --git a/examples/is-prime/script/Cargo.toml b/examples/is-prime/script/Cargo.toml index 1e17736314..7c2c364db7 100644 --- a/examples/is-prime/script/Cargo.toml +++ b/examples/is-prime/script/Cargo.toml @@ -1,7 +1,7 @@ [workspace] [package] version = "0.1.0" -name = "is_prime-script" +name = "is-prime-script" edition = "2021" [dependencies]