From d40e5cec93cd47e1bb26f0038cb051a0c9060186 Mon Sep 17 00:00:00 2001 From: Aditya Bisht <44467788+Bisht13@users.noreply.github.com> Date: Thu, 4 Apr 2024 14:07:28 +0530 Subject: [PATCH] feat: Add Relayer (#3) * Add ECDSAOwnedDKIMRegistry. * Update dev-setup.ts that generates Groth16Verifier.sol. * Implement verifyEmailProof function. * [WIP] Add implementations regarding authEmail function till step 7. * Add isValidSignature function. * Add EmailAccountRecovery. * Move usedNullifiers from Verifier to EmailAuth. * Tweak variable name. * Update correct timestamp validation condition. * Update isValidSignature function. * Add unit test functions. * Add testAuthEmail. * Remove comment. * Delete unused mock directory. * Add testIsValidSignature. * Format solidity files. * Add deploy script. * Modify ECSDSAOwnedDKIMRegistry to be independent of the chain id. * Refactor EmailAuth contracts. * Refactor EmailAccountRecovery. * Add simple wallet to be recovered with emails. * Fix EmailAuth.t.sol. * Add DeploymentHelper. * Add create SimpleWallet instance in setUp function. * Add test EmailAccountRecovery. * Fix EmailAccountRecovery.t.sol. * Fix parameter decoding in recoverWallet method. * Rename recoverWallet to processRecovery and add completeRecovery. * Add recipient's email address commitment to the circuit. * Add script to generate circuit inputs. * Add prover. * Add relayer. * Update utils and relayer. * Fix database. * Remove unused code. * Update database and web_server * Fix config.rs * Add ECDSAOwnedDKIMRegistry. * Implement verifyEmailProof function. * [WIP] Add implementations regarding authEmail function till step 7. * Add isValidSignature function. * Add EmailAccountRecovery. * Move usedNullifiers from Verifier to EmailAuth. * Tweak variable name. * Update correct timestamp validation condition. * Update isValidSignature function. * Add unit test functions. * Add testAuthEmail. * Remove comment. * Delete unused mock directory. * Add testIsValidSignature. * Format solidity files. * Add deploy script. * Modify ECSDSAOwnedDKIMRegistry to be independent of the chain id. * Refactor EmailAuth contracts. * Refactor EmailAccountRecovery. * Add simple wallet to be recovered with emails. * Fix EmailAuth.t.sol. * Add DeploymentHelper. * Add create SimpleWallet instance in setUp function. * Add test EmailAccountRecovery. * Fix EmailAccountRecovery.t.sol. * Fix parameter decoding in recoverWallet method. * Rename recoverWallet to processRecovery and add completeRecovery. * Add recipient's email address commitment to the circuit. * Add relayer. * Update deployment helper. * Fix unit testing * Create Integration.t.sol. * Add integration test for acceptance. * Add integration test for recovery. * Update README.md * Call handleAcceptance and handleRecovery. * Add require conditions and check the simpleWallet owner change. * Add blank line. * Fix database. * Remove unused code. * Update database and web_server * Fix config.rs * feat: relayer init * feat: basic changes * feat: changes * feat: partial accept api * feat: rebase * feat: fixes * feat: finish accept api before handling email * feat: handle email stub * feat: clean up * feat: add all apis * chore: refactor * feat: add email templates * feat: handle email * Fix contract deployment scripts. * Add github workflow. * Add ETHERSCAN_API_KEY to env.sample. * Add unit test functions. * Add deploy script. * Refactor EmailAuth contracts. * feat: rebase * feat: fixes * Fix modal server name. * feat: fixes * feat: fixes * Fix typo of EmailAccountRecoery.t.sol. * feat: complete flow * feat: fixes and refactoring * chore: update .env.example * Update utils package. * feat: fixes * feat: add k8s manifests (cherry picked from commit 6f154f50b911c43fd03cd30b4741b456b65983e1) * chore: fix Dockerfile * Update the version of zk-regex-utils --------- Co-authored-by: wshino Co-authored-by: SoraSuegami --- .gitignore | 1 + Cargo.lock | 156 +- Relayer.Dockerfile | 2 +- kubernetes/db.yml | 79 + kubernetes/ingress.yml | 20 + kubernetes/managed-cert.yml | 8 + kubernetes/relayer.yml | 111 + packages/circuits/helpers/email_auth.ts | 40 +- packages/circuits/helpers/recipient.ts | 10 +- packages/circuits/tests/email_auth.test.ts | 107 +- .../tests/invitation_code_regex.test.ts | 26 +- .../circuits/tests/recipient_enabled.test.ts | 80 +- packages/contracts/script/DeployCommons.s.sol | 22 +- ...coery.t.sol => EmailAccountRecovery.t.sol} | 0 packages/prover/modal_server.py | 1 + packages/relayer/.env.example | 26 + packages/relayer/Cargo.toml | 5 +- packages/relayer/build.rs | 31 + .../eml_templates/acceptance_request.html | 418 +++ .../eml_templates/acceptance_success.html | 415 +++ .../relayer/eml_templates/assets/css/main.css | 491 ++++ .../assets/font/Regola Pro Bold Oblique.otf | Bin 0 -> 137764 bytes .../assets/font/Regola Pro Bold.otf | Bin 0 -> 134728 bytes .../assets/font/Regola Pro Book Oblique.otf | Bin 0 -> 137368 bytes .../assets/font/Regola Pro Book.otf | Bin 0 -> 133800 bytes .../assets/font/Regola Pro Medium Oblique.otf | Bin 0 -> 138104 bytes .../assets/font/Regola Pro Medium.otf | Bin 0 -> 134780 bytes .../font/Regola Pro Regular Oblique.otf | Bin 0 -> 137828 bytes .../assets/font/Regola Pro Regular.otf | Bin 0 -> 134172 bytes .../eml_templates/assets/img/discord.png | Bin 0 -> 10725 bytes .../eml_templates/assets/img/github.png | Bin 0 -> 9819 bytes .../relayer/eml_templates/assets/img/logo.png | Bin 0 -> 26973 bytes .../eml_templates/assets/img/telegram.png | Bin 0 -> 36770 bytes .../relayer/eml_templates/assets/img/x.png | Bin 0 -> 50422 bytes .../eml_templates/credential_not_present.html | 418 +++ packages/relayer/eml_templates/error.html | 415 +++ .../guardian_already_exists.html | 415 +++ .../eml_templates/guardian_not_set.html | 413 +++ .../eml_templates/recovery_request.html | 418 +++ .../eml_templates/recovery_success.html | 415 +++ packages/relayer/input_files/.gitkeep | 0 packages/relayer/scripts/startup.sh | 38 + .../src/abis/ecdsa_owned_dkim_registry.rs | 846 ++++++ .../src/abis/email_account_recovery.rs | 1258 +++++++++ packages/relayer/src/abis/email_auth.rs | 2444 +++++++++++++++++ packages/relayer/src/abis/mod.rs | 7 + packages/relayer/src/chain.rs | 178 ++ packages/relayer/src/config.rs | 141 +- packages/relayer/src/core.rs | 474 ++++ packages/relayer/src/database.rs | 461 ++-- packages/relayer/src/dkim_oracle.rs | 62 - packages/relayer/src/lib.rs | 354 ++- packages/relayer/src/main.rs | 9 + packages/relayer/src/modules/dkim.rs | 126 + .../{ => modules/email_client}/imap_client.rs | 40 +- .../relayer/src/modules/email_client/mail.rs | 318 +++ .../relayer/src/modules/email_client/mod.rs | 9 + .../{ => modules/email_client}/smtp_client.rs | 85 +- .../relayer/src/modules/email_client/utils.rs | 24 + .../relayer/src/{ => modules}/emails_pool.rs | 11 +- packages/relayer/src/modules/mod.rs | 9 + .../relayer/src/modules/web_server/mod.rs | 5 + .../src/modules/web_server/rest_api.rs | 399 +++ .../relayer/src/modules/web_server/server.rs | 171 ++ .../relayer/src/regex_json/request_def.json | 16 + .../src/{ => regex_json}/selector_def.json | 0 packages/relayer/src/utils.rs | 193 -- packages/relayer/src/{ => utils}/logger.rs | 6 +- packages/relayer/src/utils/mod.rs | 9 + packages/relayer/src/utils/strings.rs | 45 + .../src/{ => utils}/subject_templates.rs | 86 +- packages/relayer/src/utils/utils.rs | 85 + packages/relayer/src/web_server.rs | 190 -- packages/utils/Cargo.toml | 6 +- packages/utils/README.md | 119 - packages/utils/package.json | 2 +- packages/utils/src/circuit.rs | 183 ++ packages/utils/src/converters.rs | 92 +- packages/utils/src/cryptos.rs | 102 +- packages/utils/src/lib.rs | 18 +- packages/utils/src/parse_email.rs | 58 +- packages/utils/src/statics.rs | 2 +- 82 files changed, 11922 insertions(+), 1302 deletions(-) create mode 100644 kubernetes/db.yml create mode 100644 kubernetes/ingress.yml create mode 100644 kubernetes/managed-cert.yml create mode 100644 kubernetes/relayer.yml rename packages/contracts/test/{EmailAccountRecoery.t.sol => EmailAccountRecovery.t.sol} (100%) create mode 100644 packages/relayer/.env.example create mode 100644 packages/relayer/build.rs create mode 100644 packages/relayer/eml_templates/acceptance_request.html create mode 100644 packages/relayer/eml_templates/acceptance_success.html create mode 100644 packages/relayer/eml_templates/assets/css/main.css create mode 100644 packages/relayer/eml_templates/assets/font/Regola Pro Bold Oblique.otf create mode 100644 packages/relayer/eml_templates/assets/font/Regola Pro Bold.otf create mode 100644 packages/relayer/eml_templates/assets/font/Regola Pro Book Oblique.otf create mode 100644 packages/relayer/eml_templates/assets/font/Regola Pro Book.otf create mode 100644 packages/relayer/eml_templates/assets/font/Regola Pro Medium Oblique.otf create mode 100644 packages/relayer/eml_templates/assets/font/Regola Pro Medium.otf create mode 100644 packages/relayer/eml_templates/assets/font/Regola Pro Regular Oblique.otf create mode 100644 packages/relayer/eml_templates/assets/font/Regola Pro Regular.otf create mode 100644 packages/relayer/eml_templates/assets/img/discord.png create mode 100644 packages/relayer/eml_templates/assets/img/github.png create mode 100644 packages/relayer/eml_templates/assets/img/logo.png create mode 100644 packages/relayer/eml_templates/assets/img/telegram.png create mode 100644 packages/relayer/eml_templates/assets/img/x.png create mode 100644 packages/relayer/eml_templates/credential_not_present.html create mode 100644 packages/relayer/eml_templates/error.html create mode 100644 packages/relayer/eml_templates/guardian_already_exists.html create mode 100644 packages/relayer/eml_templates/guardian_not_set.html create mode 100644 packages/relayer/eml_templates/recovery_request.html create mode 100644 packages/relayer/eml_templates/recovery_success.html create mode 100644 packages/relayer/input_files/.gitkeep create mode 100755 packages/relayer/scripts/startup.sh create mode 100644 packages/relayer/src/abis/ecdsa_owned_dkim_registry.rs create mode 100644 packages/relayer/src/abis/email_account_recovery.rs create mode 100644 packages/relayer/src/abis/email_auth.rs create mode 100644 packages/relayer/src/abis/mod.rs create mode 100644 packages/relayer/src/chain.rs create mode 100644 packages/relayer/src/core.rs delete mode 100644 packages/relayer/src/dkim_oracle.rs create mode 100644 packages/relayer/src/modules/dkim.rs rename packages/relayer/src/{ => modules/email_client}/imap_client.rs (85%) create mode 100644 packages/relayer/src/modules/email_client/mail.rs create mode 100644 packages/relayer/src/modules/email_client/mod.rs rename packages/relayer/src/{ => modules/email_client}/smtp_client.rs (67%) create mode 100644 packages/relayer/src/modules/email_client/utils.rs rename packages/relayer/src/{ => modules}/emails_pool.rs (88%) create mode 100644 packages/relayer/src/modules/mod.rs create mode 100644 packages/relayer/src/modules/web_server/mod.rs create mode 100644 packages/relayer/src/modules/web_server/rest_api.rs create mode 100644 packages/relayer/src/modules/web_server/server.rs create mode 100644 packages/relayer/src/regex_json/request_def.json rename packages/relayer/src/{ => regex_json}/selector_def.json (100%) delete mode 100644 packages/relayer/src/utils.rs rename packages/relayer/src/{ => utils}/logger.rs (86%) create mode 100644 packages/relayer/src/utils/mod.rs create mode 100644 packages/relayer/src/utils/strings.rs rename packages/relayer/src/{ => utils}/subject_templates.rs (78%) create mode 100644 packages/relayer/src/utils/utils.rs delete mode 100644 packages/relayer/src/web_server.rs delete mode 100644 packages/utils/README.md create mode 100644 packages/utils/src/circuit.rs diff --git a/.gitignore b/.gitignore index 40b5cd39..65ce2569 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ packages/circuits/*.ptau *.sym *.wasm *.c +*.zkey # Contracts packages/contracts/broadcast diff --git a/Cargo.lock b/Cargo.lock index 6b1e80a1..c019e904 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -192,7 +192,7 @@ checksum = "a507401cad91ec6a857ed5513a2073c82a9b9048762b885bb98655b306964681" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -233,7 +233,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -253,7 +253,7 @@ dependencies = [ "bitflags 1.3.2", "bytes", "futures-util", - "http", + "http 0.2.12", "http-body", "hyper", "itoa", @@ -283,7 +283,7 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http", + "http 0.2.12", "http-body", "mime", "rustversion", @@ -577,7 +577,7 @@ dependencies = [ "lazy_static", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -987,7 +987,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -1313,7 +1313,7 @@ dependencies = [ "sha2 0.10.8", "sha3", "thiserror", - "uuid", + "uuid 0.8.2", ] [[package]] @@ -1348,32 +1348,6 @@ dependencies = [ "tiny-keccak", ] -[[package]] -name = "ether-email-auth-utils" -version = "0.1.0" -dependencies = [ - "anyhow", - "base64 0.21.7", - "cfdkim", - "fancy-regex", - "halo2curves 0.4.0", - "hex", - "itertools 0.10.5", - "neon", - "num-bigint", - "num-traits", - "once_cell", - "poseidon-rs", - "rand_core", - "rsa", - "serde", - "serde_json", - "serde_regex", - "slog", - "tokio", - "zk-regex-apis", -] - [[package]] name = "ethereum-types" version = "0.14.1" @@ -1456,7 +1430,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "syn 2.0.57", + "syn 2.0.58", "toml", "walkdir", ] @@ -1474,7 +1448,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -1500,7 +1474,7 @@ dependencies = [ "serde", "serde_json", "strum 0.26.2", - "syn 2.0.57", + "syn 2.0.58", "tempfile", "thiserror", "tiny-keccak", @@ -1567,7 +1541,7 @@ dependencies = [ "futures-timer", "futures-util", "hashers", - "http", + "http 0.2.12", "instant", "jsonwebtoken", "once_cell", @@ -1920,7 +1894,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -2112,7 +2086,7 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", + "http 0.2.12", "indexmap 2.2.6", "slab", "tokio", @@ -2287,6 +2261,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http-body" version = "0.4.6" @@ -2294,7 +2279,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http", + "http 0.2.12", "pin-project-lite", ] @@ -2321,7 +2306,7 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http", + "http 0.2.12", "http-body", "httparse", "httpdate", @@ -2341,7 +2326,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", - "http", + "http 0.2.12", "hyper", "rustls", "tokio", @@ -2396,7 +2381,7 @@ dependencies = [ "ed25519-consensus", "futures-util", "hex", - "http", + "http 0.2.12", "http-body", "ic-certification", "ic-transport-types", @@ -3188,7 +3173,7 @@ dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -3200,7 +3185,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -3212,7 +3197,7 @@ dependencies = [ "base64 0.13.1", "chrono", "getrandom", - "http", + "http 0.2.12", "rand", "reqwest", "serde", @@ -3301,7 +3286,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -3551,7 +3536,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -3615,7 +3600,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -3653,7 +3638,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -3749,7 +3734,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d3928fb5db768cb86f891ff014f0144589297e3c6a1aba6ed7cecfdace270c7" dependencies = [ "proc-macro2", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -4005,10 +3990,10 @@ dependencies = [ "async-native-tls", "async-trait", "axum", + "base64 0.21.7", "candid", "chrono", "dotenv", - "ether-email-auth-utils", "ethers", "ff 0.13.0", "file-rotate", @@ -4017,6 +4002,7 @@ dependencies = [ "graphql_client", "handlebars", "hex", + "http 1.1.0", "ic-agent", "ic-utils", "lazy_static", @@ -4026,6 +4012,7 @@ dependencies = [ "oauth2", "rand", "regex", + "relayer-utils", "reqwest", "serde", "serde_json", @@ -4038,9 +4025,38 @@ dependencies = [ "tiny_http", "tokio", "tower-http", + "uuid 1.8.0", "webbrowser", ] +[[package]] +name = "relayer-utils" +version = "0.1.0" +dependencies = [ + "anyhow", + "base64 0.21.7", + "cfdkim", + "ethers", + "fancy-regex", + "halo2curves 0.4.0", + "hex", + "itertools 0.10.5", + "neon", + "num-bigint", + "num-traits", + "once_cell", + "poseidon-rs", + "rand_core", + "rsa", + "serde", + "serde_json", + "serde_regex", + "sha2 0.10.8", + "slog", + "tokio", + "zk-regex-apis", +] + [[package]] name = "reqwest" version = "0.11.27" @@ -4053,7 +4069,7 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http", + "http 0.2.12", "http-body", "hyper", "hyper-rustls", @@ -4478,7 +4494,7 @@ checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -4520,7 +4536,7 @@ checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -5071,7 +5087,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -5119,9 +5135,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.57" +version = "2.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11a6ae1e52eb25aab8f3fb9fca13be982a373b8f1157ca14b897a825ba4a2d35" +checksum = "44cfb93f38070beee36b3fef7d4f5a16f27751d94b187b666a5cc5e9b0d30687" dependencies = [ "proc-macro2", "quote", @@ -5227,7 +5243,7 @@ checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -5334,7 +5350,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -5489,7 +5505,7 @@ dependencies = [ "bytes", "futures-core", "futures-util", - "http", + "http 0.2.12", "http-body", "pin-project-lite", "tower-layer", @@ -5528,7 +5544,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -5610,7 +5626,7 @@ dependencies = [ "byteorder", "bytes", "data-encoding", - "http", + "http 0.2.12", "httparse", "log", "rand", @@ -5767,6 +5783,12 @@ dependencies = [ "serde", ] +[[package]] +name = "uuid" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" + [[package]] name = "vcpkg" version = "0.2.15" @@ -5839,7 +5861,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", "wasm-bindgen-shared", ] @@ -5873,7 +5895,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5906,7 +5928,7 @@ checksum = "b7f89739351a2e03cb94beb799d47fb2cac01759b40ec441f7de39b00cbf7ef0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -6288,7 +6310,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] diff --git a/Relayer.Dockerfile b/Relayer.Dockerfile index 569f6b8b..4063e359 100644 --- a/Relayer.Dockerfile +++ b/Relayer.Dockerfile @@ -29,7 +29,7 @@ WORKDIR /relayer/packages/contracts RUN bash -i -c "foundryup" RUN bash -i -c "forge build" -WORKDIR /relayer/packages/nft_relayer +WORKDIR /relayer/packages/relayer RUN --mount=type=cache,target=/var/cache/cargo \ cargo build \ && rm -rf /var/lib/cargo/lists/* diff --git a/kubernetes/db.yml b/kubernetes/db.yml new file mode 100644 index 00000000..52a38136 --- /dev/null +++ b/kubernetes/db.yml @@ -0,0 +1,79 @@ +apiVersion: v1 +kind: Secret +metadata: + name: postgres-secret-email-auth + namespace: email-auth + labels: + app: postgres-email-auth +type: Opaque +data: + POSTGRES_DB: + POSTGRES_USER: + POSTGRES_PASSWORD: + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: postgres-pvc-email-auth + namespace: email-auth + labels: + app: postgres-email-auth +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + storageClassName: standard + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgres-email-auth + namespace: email-auth +spec: + replicas: 1 + selector: + matchLabels: + app: postgres-email-auth + template: + metadata: + labels: + app: postgres-email-auth + spec: + containers: + - name: postgres-email-auth + image: postgres:latest + imagePullPolicy: "IfNotPresent" + ports: + - containerPort: 5432 + envFrom: + - secretRef: + name: postgres-secret-email-auth + volumeMounts: + - mountPath: /var/lib/postgresql/data + name: postgredb + subPath: data + volumes: + - name: postgredb + persistentVolumeClaim: + claimName: postgres-pvc-email-auth + +--- +apiVersion: v1 +kind: Service +metadata: + name: postgres-email-auth + namespace: email-auth + labels: + app: postgres-email-auth +spec: + type: ClusterIP + ports: + - protocol: TCP + port: 5432 + targetPort: 5432 + selector: + app: postgres-email-auth diff --git a/kubernetes/ingress.yml b/kubernetes/ingress.yml new file mode 100644 index 00000000..0c9b5e60 --- /dev/null +++ b/kubernetes/ingress.yml @@ -0,0 +1,20 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: managed-cert-ingress-email-auth + annotations: + kubernetes.io/ingress.global-static-ip-name: k8s-email-auth-ip + networking.gke.io/managed-certificates: managed-cert-email-auth + ingressClassName: "gce" +spec: + rules: + - host: auth.prove.email + http: + paths: + - pathType: Prefix + path: / + backend: + service: + name: relayer-svc-email-auth + port: + number: 443 diff --git a/kubernetes/managed-cert.yml b/kubernetes/managed-cert.yml new file mode 100644 index 00000000..63ed8208 --- /dev/null +++ b/kubernetes/managed-cert.yml @@ -0,0 +1,8 @@ +apiVersion: networking.gke.io/v1 +kind: ManagedCertificate +metadata: + name: managed-cert-email-auth + namespace: email-auth +spec: + domains: + - auth.prove.email diff --git a/kubernetes/relayer.yml b/kubernetes/relayer.yml new file mode 100644 index 00000000..c2ec69e8 --- /dev/null +++ b/kubernetes/relayer.yml @@ -0,0 +1,111 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: relayer-config-email-auth + labels: + app: relayer-email-auth +data: + EMAIL_ACCOUNT_RECOVERY_VERSION_ID: "" + CHAIN_RPC_PROVIDER: "" + CHAIN_RPC_EXPLORER: "" + CHAIN_ID: "" + WEB_SERVER_ADDRESS: "" + CIRCUITS_DIR_PATH: "" + EMAIL_TEMPLATES_PATH: "" + CANISTER_ID: "" + IC_REPLICA_URL: "" + JSON_LOGGER: "" + PEM_PATH: "" + +--- +apiVersion: v1 +kind: Secret +metadata: + name: relayer-secret-email-auth + labels: + app: relayer-email-auth +type: Opaque +data: + PRIVATE_KEY: + DATABASE_URL: + IMAP_DOMAIN_NAME: + IMAP_PORT: + AUTH_TYPE: + SMTP_DOMAIN_NAME: + LOGIN_ID: + LOGIN_PASSWORD: + PROVER_ADDRESS: + ICPEM: + +--- +apiVersion: apps/v1 +kind: ReplicaSet +metadata: + name: relayer-email-auth + labels: + app: relayer-email-auth +spec: + replicas: 1 # Number of initial replicas + selector: + matchLabels: + app: relayer-email-auth + template: + metadata: + labels: + app: relayer-email-auth + spec: + containers: + - name: relayer-container-email-auth + image: bisht13/relayer:latest + ports: + - containerPort: 4500 + envFrom: + - configMapRef: + name: relayer-config-email-auth + - secretRef: + name: relayer-secret-email-auth + resources: + requests: + memory: "8Gi" + cpu: "4" + limits: + memory: "16Gi" + cpu: "8" + livenessProbe: + httpGet: + path: /api/echo + port: 4500 + initialDelaySeconds: 60 + periodSeconds: 30 + readinessProbe: + httpGet: + path: /api/echo + port: 4500 + initialDelaySeconds: 60 + periodSeconds: 30 + volumeMounts: + - name: pem-volume + mountPath: "/relayer/packages/relayer/.ic.pem" + subPath: ".ic.pem" + command: ["/bin/sh", "-c", "sleep infinity"] + volumes: + - name: pem-volume + secret: + secretName: relayer-secret-email-auth + items: + - key: ICPEM + path: ".ic.pem" + +--- +apiVersion: v1 +kind: Service +metadata: + name: relayer-svc-email-auth +spec: + selector: + app: relayer-email-auth + ports: + - protocol: TCP + port: 443 + targetPort: 4500 + type: ClusterIP diff --git a/packages/circuits/helpers/email_auth.ts b/packages/circuits/helpers/email_auth.ts index 136ac94c..aeeed0ae 100644 --- a/packages/circuits/helpers/email_auth.ts +++ b/packages/circuits/helpers/email_auth.ts @@ -1,7 +1,7 @@ import fs from "fs"; import { promisify } from "util"; -import { generateCircuitInputs } from "@zk-email/helpers/dist/input-helpers"; -const emailWalletUtils = require("../../utils"); +// import { generateCircuitInputs } from "@zk-email/helpers/dist/input-helpers"; +const relayerUtils = require("../../utils"); export async function genEmailAuthInput(emailFilePath: string, accountCode: string): @@ -18,38 +18,6 @@ export async function genEmailAuthInput(emailFilePath: string, accountCode: stri code_idx: number }> { const emailRaw = await promisify(fs.readFile)(emailFilePath, "utf8"); - const parsedEmail = await emailWalletUtils.parseEmail(emailRaw); - const emailCircuitInputs = generateCircuitInputs({ - body: Buffer.from(""), - message: Buffer.from(parsedEmail.canonicalizedHeader), - bodyHash: "", - rsaSignature: BigInt(parsedEmail.signature), - rsaPublicKey: BigInt(parsedEmail.publicKey), - maxMessageLength: 1024, - maxBodyLength: 64, - ignoreBodyHashCheck: true - }); - const from_addr_idxes = emailWalletUtils.extractFromAddrIdxes(parsedEmail.canonicalizedHeader)[0]; - const fromEmailAddrPart = parsedEmail.canonicalizedHeader.slice(from_addr_idxes[0], from_addr_idxes[1]); - const subject_idx = emailWalletUtils.extractSubjectAllIdxes(parsedEmail.canonicalizedHeader)[0][0]; - const domainIdx = emailWalletUtils.extractEmailDomainIdxes(fromEmailAddrPart)[0][0]; - const timestampIdx = emailWalletUtils.extractTimestampIdxes(parsedEmail.canonicalizedHeader)[0][0]; - let codeIdx = 0; - try { - codeIdx = emailWalletUtils.extractInvitationCodeIdxes(parsedEmail.canonicalizedHeader)[0][0]; - } catch (e) { - console.log("No invitation code in header"); - } - return { - padded_header: emailCircuitInputs.in_padded, - public_key: emailCircuitInputs.pubkey, - signature: emailCircuitInputs.signature, - padded_header_len: emailCircuitInputs.in_len_padded_bytes, - account_code: accountCode, - from_addr_idx: from_addr_idxes[0], - subject_idx: subject_idx, - domain_idx: domainIdx, - timestamp_idx: timestampIdx, - code_idx: codeIdx, - }; + const jsonStr = await relayerUtils.genEmailAuthInput(emailRaw, accountCode); + return JSON.parse(jsonStr); } diff --git a/packages/circuits/helpers/recipient.ts b/packages/circuits/helpers/recipient.ts index b727ab0f..5604e55d 100644 --- a/packages/circuits/helpers/recipient.ts +++ b/packages/circuits/helpers/recipient.ts @@ -1,7 +1,7 @@ import fs from "fs"; import { promisify } from "util"; import { generateCircuitInputs } from "@zk-email/helpers/dist/input-helpers"; -const emailWalletUtils = require("../../utils"); +const relayerUtils = require("../../utils"); export async function genRecipientInput(emailFilePath: string): @@ -10,17 +10,17 @@ export async function genRecipientInput(emailFilePath: string): rand: string }> { const emailRaw = await promisify(fs.readFile)(emailFilePath, "utf8"); - const parsedEmail = await emailWalletUtils.parseEmail(emailRaw); - const subjectEmailIdxes = emailWalletUtils.extractSubjectAllIdxes(parsedEmail.canonicalizedHeader)[0]; + const parsedEmail = await relayerUtils.parseEmail(emailRaw); + const subjectEmailIdxes = relayerUtils.extractSubjectAllIdxes(parsedEmail.canonicalizedHeader)[0]; const subject = parsedEmail.canonicalizedHeader.slice(subjectEmailIdxes[0], subjectEmailIdxes[1]); let subjectEmailAddrIdx = 0; try { - subjectEmailAddrIdx = emailWalletUtils.extractEmailAddrIdxes(subject)[0][0]; + subjectEmailAddrIdx = relayerUtils.extractEmailAddrIdxes(subject)[0][0]; } catch (e) { console.log("No email address in subject"); subjectEmailAddrIdx = 0; } - const rand = emailWalletUtils.extractRandFromSignature(parsedEmail.signature); + const rand = relayerUtils.extractRandFromSignature(parsedEmail.signature); return { subject_email_addr_idx: subjectEmailAddrIdx, rand: rand diff --git a/packages/circuits/tests/email_auth.test.ts b/packages/circuits/tests/email_auth.test.ts index ff9850b7..cea7d8fe 100644 --- a/packages/circuits/tests/email_auth.test.ts +++ b/packages/circuits/tests/email_auth.test.ts @@ -6,7 +6,7 @@ const wasm_tester = circom_tester.wasm; import * as path from "path"; const p = "21888242871839275222246405745257275088548364400416034343698204186575808495617"; const field = new ff.F1Field(p); -const emailWalletUtils = require("../../utils"); +const relayerUtils = require("../../utils"); const option = { include: path.join(__dirname, "../../../node_modules") }; @@ -18,33 +18,34 @@ describe("Email Auth", () => { it("Verify a sent email whose subject has an email address", async () => { const emailFilePath = path.join(__dirname, "./emails/email_auth_test1.eml"); const emailRaw = readFileSync(emailFilePath, "utf8"); - const parsedEmail = await emailWalletUtils.parseEmail(emailRaw); + const parsedEmail = await relayerUtils.parseEmail(emailRaw); console.log(parsedEmail.canonicalizedHeader); - const accountCode = await emailWalletUtils.genAccountCode(); + const accountCode = await relayerUtils.genAccountCode(); const circuitInputs = await genEmailAuthInput(emailFilePath, accountCode); + console.log(circuitInputs); const circuit = await wasm_tester(path.join(__dirname, "../src/email_auth.circom"), option); const witness = await circuit.calculateWitness(circuitInputs); await circuit.checkConstraints(witness); const domainName = "gmail.com"; - const paddedDomain = emailWalletUtils.padString(domainName, 255); - const domainFields = emailWalletUtils.bytes2Fields(paddedDomain); + const paddedDomain = relayerUtils.padString(domainName, 255); + const domainFields = relayerUtils.bytes2Fields(paddedDomain); for (let idx = 0; idx < domainFields.length; ++idx) { expect(BigInt(domainFields[idx])).toEqual(witness[1 + idx]); } - const expectedPubKeyHash = emailWalletUtils.publicKeyHash(parsedEmail.publicKey); + const expectedPubKeyHash = relayerUtils.publicKeyHash(parsedEmail.publicKey); expect(BigInt(expectedPubKeyHash)).toEqual(witness[1 + domainFields.length]); - const expectedEmailNullifier = emailWalletUtils.emailNullifier(parsedEmail.signature); + const expectedEmailNullifier = relayerUtils.emailNullifier(parsedEmail.signature); expect(BigInt(expectedEmailNullifier)).toEqual(witness[1 + domainFields.length + 1]); const timestamp = 1694989812n; expect(timestamp).toEqual(witness[1 + domainFields.length + 2]); const maskedSubject = "Send 0.1 ETH to "; - const paddedMaskedSubject = emailWalletUtils.padString(maskedSubject, 605); - const maskedSubjectFields = emailWalletUtils.bytes2Fields(paddedMaskedSubject); + const paddedMaskedSubject = relayerUtils.padString(maskedSubject, 605); + const maskedSubjectFields = relayerUtils.bytes2Fields(paddedMaskedSubject); for (let idx = 0; idx < maskedSubjectFields.length; ++idx) { expect(BigInt(maskedSubjectFields[idx])).toEqual(witness[1 + domainFields.length + 3 + idx]); } const fromAddr = "suegamisora@gmail.com"; - const accountSalt = emailWalletUtils.accountSalt(fromAddr, accountCode); + const accountSalt = relayerUtils.accountSalt(fromAddr, accountCode); expect(BigInt(accountSalt)).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length]); expect(0n).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 1]); }); @@ -52,33 +53,33 @@ describe("Email Auth", () => { it("Verify a sent email whose subject does not have an email address", async () => { const emailFilePath = path.join(__dirname, "./emails/email_auth_test2.eml"); const emailRaw = readFileSync(emailFilePath, "utf8"); - const parsedEmail = await emailWalletUtils.parseEmail(emailRaw); + const parsedEmail = await relayerUtils.parseEmail(emailRaw); console.log(parsedEmail.canonicalizedHeader); - const accountCode = await emailWalletUtils.genAccountCode(); + const accountCode = await relayerUtils.genAccountCode(); const circuitInputs = await genEmailAuthInput(emailFilePath, accountCode); const circuit = await wasm_tester(path.join(__dirname, "../src/email_auth.circom"), option); const witness = await circuit.calculateWitness(circuitInputs); await circuit.checkConstraints(witness); const domainName = "gmail.com"; - const paddedDomain = emailWalletUtils.padString(domainName, 255); - const domainFields = emailWalletUtils.bytes2Fields(paddedDomain); + const paddedDomain = relayerUtils.padString(domainName, 255); + const domainFields = relayerUtils.bytes2Fields(paddedDomain); for (let idx = 0; idx < domainFields.length; ++idx) { expect(BigInt(domainFields[idx])).toEqual(witness[1 + idx]); } - const expectedPubKeyHash = emailWalletUtils.publicKeyHash(parsedEmail.publicKey); + const expectedPubKeyHash = relayerUtils.publicKeyHash(parsedEmail.publicKey); expect(BigInt(expectedPubKeyHash)).toEqual(witness[1 + domainFields.length]); - const expectedEmailNullifier = emailWalletUtils.emailNullifier(parsedEmail.signature); + const expectedEmailNullifier = relayerUtils.emailNullifier(parsedEmail.signature); expect(BigInt(expectedEmailNullifier)).toEqual(witness[1 + domainFields.length + 1]); const timestamp = 1696964295n; expect(timestamp).toEqual(witness[1 + domainFields.length + 2]); const maskedSubject = "Swap 1 ETH to DAI"; - const paddedMaskedSubject = emailWalletUtils.padString(maskedSubject, 605); - const maskedSubjectFields = emailWalletUtils.bytes2Fields(paddedMaskedSubject); + const paddedMaskedSubject = relayerUtils.padString(maskedSubject, 605); + const maskedSubjectFields = relayerUtils.bytes2Fields(paddedMaskedSubject); for (let idx = 0; idx < maskedSubjectFields.length; ++idx) { expect(BigInt(maskedSubjectFields[idx])).toEqual(witness[1 + domainFields.length + 3 + idx]); } const fromAddr = "suegamisora@gmail.com"; - const accountSalt = emailWalletUtils.accountSalt(fromAddr, accountCode); + const accountSalt = relayerUtils.accountSalt(fromAddr, accountCode); expect(BigInt(accountSalt)).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length]); expect(0n).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 1]); }); @@ -86,33 +87,33 @@ describe("Email Auth", () => { it("Verify a sent email whose from field has a dummy email address name", async () => { const emailFilePath = path.join(__dirname, "./emails/email_auth_test3.eml"); const emailRaw = readFileSync(emailFilePath, "utf8"); - const parsedEmail = await emailWalletUtils.parseEmail(emailRaw); + const parsedEmail = await relayerUtils.parseEmail(emailRaw); console.log(parsedEmail.canonicalizedHeader); - const accountCode = await emailWalletUtils.genAccountCode(); + const accountCode = await relayerUtils.genAccountCode(); const circuitInputs = await genEmailAuthInput(emailFilePath, accountCode); const circuit = await wasm_tester(path.join(__dirname, "../src/email_auth.circom"), option); const witness = await circuit.calculateWitness(circuitInputs); await circuit.checkConstraints(witness); const domainName = "gmail.com"; - const paddedDomain = emailWalletUtils.padString(domainName, 255); - const domainFields = emailWalletUtils.bytes2Fields(paddedDomain); + const paddedDomain = relayerUtils.padString(domainName, 255); + const domainFields = relayerUtils.bytes2Fields(paddedDomain); for (let idx = 0; idx < domainFields.length; ++idx) { expect(BigInt(domainFields[idx])).toEqual(witness[1 + idx]); } - const expectedPubKeyHash = emailWalletUtils.publicKeyHash(parsedEmail.publicKey); + const expectedPubKeyHash = relayerUtils.publicKeyHash(parsedEmail.publicKey); expect(BigInt(expectedPubKeyHash)).toEqual(witness[1 + domainFields.length]); - const expectedEmailNullifier = emailWalletUtils.emailNullifier(parsedEmail.signature); + const expectedEmailNullifier = relayerUtils.emailNullifier(parsedEmail.signature); expect(BigInt(expectedEmailNullifier)).toEqual(witness[1 + domainFields.length + 1]); const timestamp = 1696965932n; expect(timestamp).toEqual(witness[1 + domainFields.length + 2]); const maskedSubject = "Send 1 ETH to "; - const paddedMaskedSubject = emailWalletUtils.padString(maskedSubject, 605); - const maskedSubjectFields = emailWalletUtils.bytes2Fields(paddedMaskedSubject); + const paddedMaskedSubject = relayerUtils.padString(maskedSubject, 605); + const maskedSubjectFields = relayerUtils.bytes2Fields(paddedMaskedSubject); for (let idx = 0; idx < maskedSubjectFields.length; ++idx) { expect(BigInt(maskedSubjectFields[idx])).toEqual(witness[1 + domainFields.length + 3 + idx]); } const fromAddr = "suegamisora@gmail.com"; - const accountSalt = emailWalletUtils.accountSalt(fromAddr, accountCode); + const accountSalt = relayerUtils.accountSalt(fromAddr, accountCode); expect(BigInt(accountSalt)).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length]); expect(0n).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 1]); }); @@ -120,33 +121,33 @@ describe("Email Auth", () => { it("Verify a sent email whose from field has a non-English name", async () => { const emailFilePath = path.join(__dirname, "./emails/email_auth_test4.eml"); const emailRaw = readFileSync(emailFilePath, "utf8"); - const parsedEmail = await emailWalletUtils.parseEmail(emailRaw); + const parsedEmail = await relayerUtils.parseEmail(emailRaw); console.log(parsedEmail.canonicalizedHeader); - const accountCode = await emailWalletUtils.genAccountCode(); + const accountCode = await relayerUtils.genAccountCode(); const circuitInputs = await genEmailAuthInput(emailFilePath, accountCode); const circuit = await wasm_tester(path.join(__dirname, "../src/email_auth.circom"), option); const witness = await circuit.calculateWitness(circuitInputs); await circuit.checkConstraints(witness); const domainName = "gmail.com"; - const paddedDomain = emailWalletUtils.padString(domainName, 255); - const domainFields = emailWalletUtils.bytes2Fields(paddedDomain); + const paddedDomain = relayerUtils.padString(domainName, 255); + const domainFields = relayerUtils.bytes2Fields(paddedDomain); for (let idx = 0; idx < domainFields.length; ++idx) { expect(BigInt(domainFields[idx])).toEqual(witness[1 + idx]); } - const expectedPubKeyHash = emailWalletUtils.publicKeyHash(parsedEmail.publicKey); + const expectedPubKeyHash = relayerUtils.publicKeyHash(parsedEmail.publicKey); expect(BigInt(expectedPubKeyHash)).toEqual(witness[1 + domainFields.length]); - const expectedEmailNullifier = emailWalletUtils.emailNullifier(parsedEmail.signature); + const expectedEmailNullifier = relayerUtils.emailNullifier(parsedEmail.signature); expect(BigInt(expectedEmailNullifier)).toEqual(witness[1 + domainFields.length + 1]); const timestamp = 1696967028n; expect(timestamp).toEqual(witness[1 + domainFields.length + 2]); const maskedSubject = "Send 1 ETH to "; - const paddedMaskedSubject = emailWalletUtils.padString(maskedSubject, 605); - const maskedSubjectFields = emailWalletUtils.bytes2Fields(paddedMaskedSubject); + const paddedMaskedSubject = relayerUtils.padString(maskedSubject, 605); + const maskedSubjectFields = relayerUtils.bytes2Fields(paddedMaskedSubject); for (let idx = 0; idx < maskedSubjectFields.length; ++idx) { expect(BigInt(maskedSubjectFields[idx])).toEqual(witness[1 + domainFields.length + 3 + idx]); } const fromAddr = "suegamisora@gmail.com"; - const accountSalt = emailWalletUtils.accountSalt(fromAddr, accountCode); + const accountSalt = relayerUtils.accountSalt(fromAddr, accountCode); expect(BigInt(accountSalt)).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length]); expect(0n).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 1]); }); @@ -154,7 +155,7 @@ describe("Email Auth", () => { it("Verify a sent email whose subject has an email address and an invitation code", async () => { const emailFilePath = path.join(__dirname, "./emails/email_auth_test5.eml"); const emailRaw = readFileSync(emailFilePath, "utf8"); - const parsedEmail = await emailWalletUtils.parseEmail(emailRaw); + const parsedEmail = await relayerUtils.parseEmail(emailRaw); console.log(parsedEmail.canonicalizedHeader); const accountCode = "0x01eb9b204cc24c3baee11accc37d253a9c53e92b1a2cc07763475c135d575b76"; const circuitInputs = await genEmailAuthInput(emailFilePath, accountCode); @@ -162,25 +163,25 @@ describe("Email Auth", () => { const witness = await circuit.calculateWitness(circuitInputs); await circuit.checkConstraints(witness); const domainName = "gmail.com"; - const paddedDomain = emailWalletUtils.padString(domainName, 255); - const domainFields = emailWalletUtils.bytes2Fields(paddedDomain); + const paddedDomain = relayerUtils.padString(domainName, 255); + const domainFields = relayerUtils.bytes2Fields(paddedDomain); for (let idx = 0; idx < domainFields.length; ++idx) { expect(BigInt(domainFields[idx])).toEqual(witness[1 + idx]); } - const expectedPubKeyHash = emailWalletUtils.publicKeyHash(parsedEmail.publicKey); + const expectedPubKeyHash = relayerUtils.publicKeyHash(parsedEmail.publicKey); expect(BigInt(expectedPubKeyHash)).toEqual(witness[1 + domainFields.length]); - const expectedEmailNullifier = emailWalletUtils.emailNullifier(parsedEmail.signature); + const expectedEmailNullifier = relayerUtils.emailNullifier(parsedEmail.signature); expect(BigInt(expectedEmailNullifier)).toEqual(witness[1 + domainFields.length + 1]); const timestamp = 1707866192n; expect(timestamp).toEqual(witness[1 + domainFields.length + 2]); const maskedSubject = "Send 0.12 ETH to "; - const paddedMaskedSubject = emailWalletUtils.padString(maskedSubject, 605); - const maskedSubjectFields = emailWalletUtils.bytes2Fields(paddedMaskedSubject); + const paddedMaskedSubject = relayerUtils.padString(maskedSubject, 605); + const maskedSubjectFields = relayerUtils.bytes2Fields(paddedMaskedSubject); for (let idx = 0; idx < maskedSubjectFields.length; ++idx) { expect(BigInt(maskedSubjectFields[idx])).toEqual(witness[1 + domainFields.length + 3 + idx]); } const fromAddr = "suegamisora@gmail.com"; - const accountSalt = emailWalletUtils.accountSalt(fromAddr, accountCode); + const accountSalt = relayerUtils.accountSalt(fromAddr, accountCode); expect(BigInt(accountSalt)).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length]); expect(1n).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 1]); }); @@ -188,32 +189,32 @@ describe("Email Auth", () => { it("Verify a sent email whose subject has an invitation code", async () => { const emailFilePath = path.join(__dirname, "./emails/email_auth_test6.eml"); const emailRaw = readFileSync(emailFilePath, "utf8"); - const parsedEmail = await emailWalletUtils.parseEmail(emailRaw); + const parsedEmail = await relayerUtils.parseEmail(emailRaw); const accountCode = "0x01eb9b204cc24c3baee11accc37d253a9c53e92b1a2cc07763475c135d575b76"; const circuitInputs = await genEmailAuthInput(emailFilePath, accountCode); const circuit = await wasm_tester(path.join(__dirname, "../src/email_auth.circom"), option); const witness = await circuit.calculateWitness(circuitInputs); await circuit.checkConstraints(witness); const domainName = "gmail.com"; - const paddedDomain = emailWalletUtils.padString(domainName, 255); - const domainFields = emailWalletUtils.bytes2Fields(paddedDomain); + const paddedDomain = relayerUtils.padString(domainName, 255); + const domainFields = relayerUtils.bytes2Fields(paddedDomain); for (let idx = 0; idx < domainFields.length; ++idx) { expect(BigInt(domainFields[idx])).toEqual(witness[1 + idx]); } - const expectedPubKeyHash = emailWalletUtils.publicKeyHash(parsedEmail.publicKey); + const expectedPubKeyHash = relayerUtils.publicKeyHash(parsedEmail.publicKey); expect(BigInt(expectedPubKeyHash)).toEqual(witness[1 + domainFields.length]); - const expectedEmailNullifier = emailWalletUtils.emailNullifier(parsedEmail.signature); + const expectedEmailNullifier = relayerUtils.emailNullifier(parsedEmail.signature); expect(BigInt(expectedEmailNullifier)).toEqual(witness[1 + domainFields.length + 1]); const timestamp = 1711992080n; expect(timestamp).toEqual(witness[1 + domainFields.length + 2]); const maskedSubject = "Re: Accept guardian request for 0x04884491560f38342C56E26BDD0fEAbb68E2d2FC"; - const paddedMaskedSubject = emailWalletUtils.padString(maskedSubject, 605); - const maskedSubjectFields = emailWalletUtils.bytes2Fields(paddedMaskedSubject); + const paddedMaskedSubject = relayerUtils.padString(maskedSubject, 605); + const maskedSubjectFields = relayerUtils.bytes2Fields(paddedMaskedSubject); for (let idx = 0; idx < maskedSubjectFields.length; ++idx) { expect(BigInt(maskedSubjectFields[idx])).toEqual(witness[1 + domainFields.length + 3 + idx]); } const fromAddr = "suegamisora@gmail.com"; - const accountSalt = emailWalletUtils.accountSalt(fromAddr, accountCode); + const accountSalt = relayerUtils.accountSalt(fromAddr, accountCode); expect(BigInt(accountSalt)).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length]); expect(1n).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 1]); }); diff --git a/packages/circuits/tests/invitation_code_regex.test.ts b/packages/circuits/tests/invitation_code_regex.test.ts index de0f6673..69d0387b 100644 --- a/packages/circuits/tests/invitation_code_regex.test.ts +++ b/packages/circuits/tests/invitation_code_regex.test.ts @@ -1,7 +1,7 @@ const circom_tester = require("circom_tester"); const wasm_tester = circom_tester.wasm; import * as path from "path"; -const emailWalletUtils = require("../../utils"); +const relayerUtils = require("../../utils"); const option = { include: path.join(__dirname, "../../../node_modules") }; @@ -14,7 +14,7 @@ describe("Invitation Code Regex", () => { const codeStr = "Code 123abc"; // const prefixLen = "ACCOUNTKEY.0x".length; // const revealed = "123abc"; - const paddedStr = emailWalletUtils.padString(codeStr, 256); + const paddedStr = relayerUtils.padString(codeStr, 256); const circuitInputs = { msg: paddedStr, }; @@ -23,7 +23,7 @@ describe("Invitation Code Regex", () => { await circuit.checkConstraints(witness); // console.log(witness); expect(1n).toEqual(witness[1]); - const prefixIdxes = emailWalletUtils.extractInvitationCodeIdxes(codeStr)[0]; + const prefixIdxes = relayerUtils.extractInvitationCodeIdxes(codeStr)[0]; for (let idx = 0; idx < 256; ++idx) { if (idx >= prefixIdxes[0] && idx < prefixIdxes[1]) { expect(BigInt(paddedStr[idx])).toEqual(witness[2 + idx]); @@ -37,7 +37,7 @@ describe("Invitation Code Regex", () => { const codeStr = "Swap 0.1 ETH to DAI code 123abc"; // const prefixLen = "sepolia+ACCOUNTKEY.0x".length; // const revealed = "123abc"; - const paddedStr = emailWalletUtils.padString(codeStr, 256); + const paddedStr = relayerUtils.padString(codeStr, 256); const circuitInputs = { msg: paddedStr, }; @@ -46,7 +46,7 @@ describe("Invitation Code Regex", () => { await circuit.checkConstraints(witness); // console.log(witness); expect(1n).toEqual(witness[1]); - const prefixIdxes = emailWalletUtils.extractInvitationCodeIdxes(codeStr)[0]; + const prefixIdxes = relayerUtils.extractInvitationCodeIdxes(codeStr)[0]; // const revealedStartIdx = emailWalletUtils.extractSubstrIdxes(codeStr, readFileSync(path.join(__dirname, "../src/regexes/invitation_code.json"), "utf8"))[0][0]; // console.log(emailWalletUtils.extractSubstrIdxes(codeStr, readFileSync(path.join(__dirname, "../src/regexes/invitation_code.json"), "utf8"))); for (let idx = 0; idx < 256; ++idx) { @@ -62,7 +62,7 @@ describe("Invitation Code Regex", () => { const codeStr = "Send 0.1 ETH to alice@gmail.com code 123abc"; // const prefixLen = "sepolia+ACCOUNTKEY.0x".length; // const revealed = "123abc"; - const paddedStr = emailWalletUtils.padString(codeStr, 256); + const paddedStr = relayerUtils.padString(codeStr, 256); const circuitInputs = { msg: paddedStr, }; @@ -71,7 +71,7 @@ describe("Invitation Code Regex", () => { await circuit.checkConstraints(witness); // console.log(witness); expect(1n).toEqual(witness[1]); - const prefixIdxes = emailWalletUtils.extractInvitationCodeIdxes(codeStr)[0]; + const prefixIdxes = relayerUtils.extractInvitationCodeIdxes(codeStr)[0]; // const revealedStartIdx = emailWalletUtils.extractSubstrIdxes(codeStr, readFileSync(path.join(__dirname, "../src/regexes/invitation_code.json"), "utf8"))[0][0]; // console.log(emailWalletUtils.extractSubstrIdxes(codeStr, readFileSync(path.join(__dirname, "../src/regexes/invitation_code.json"), "utf8"))); for (let idx = 0; idx < 256; ++idx) { @@ -87,7 +87,7 @@ describe("Invitation Code Regex", () => { const codeStr = "sepolia+code123456@sendeth.org"; // const prefixLen = "sepolia+ACCOUNTKEY.0x".length; // const revealed = "123abc"; - const paddedStr = emailWalletUtils.padString(codeStr, 256); + const paddedStr = relayerUtils.padString(codeStr, 256); const circuitInputs = { msg: paddedStr, }; @@ -96,7 +96,7 @@ describe("Invitation Code Regex", () => { await circuit.checkConstraints(witness); // console.log(witness); expect(1n).toEqual(witness[1]); - const prefixIdxes = emailWalletUtils.extractInvitationCodeIdxes(codeStr)[0]; + const prefixIdxes = relayerUtils.extractInvitationCodeIdxes(codeStr)[0]; // const revealedStartIdx = emailWalletUtils.extractSubstrIdxes(codeStr, readFileSync(path.join(__dirname, "../src/regexes/invitation_code.json"), "utf8"))[0][0]; // console.log(emailWalletUtils.extractSubstrIdxes(codeStr, readFileSync(path.join(__dirname, "../src/regexes/invitation_code.json"), "utf8"))); for (let idx = 0; idx < 256; ++idx) { @@ -112,7 +112,7 @@ describe("Invitation Code Regex", () => { const codeStr = "Swap 0.1 ETH to DAI code 123abc"; // const prefixLen = "sepolia+ACCOUNTKEY.0x".length; // const revealed = "123abc"; - const paddedStr = emailWalletUtils.padString(codeStr, 256); + const paddedStr = relayerUtils.padString(codeStr, 256); const circuitInputs = { msg: paddedStr, }; @@ -121,7 +121,7 @@ describe("Invitation Code Regex", () => { await circuit.checkConstraints(witness); // console.log(witness); expect(1n).toEqual(witness[1]); - const prefixIdxes = emailWalletUtils.extractInvitationCodeWithPrefixIdxes(codeStr)[0]; + const prefixIdxes = relayerUtils.extractInvitationCodeWithPrefixIdxes(codeStr)[0]; // const revealedStartIdx = emailWalletUtils.extractSubstrIdxes(codeStr, readFileSync(path.join(__dirname, "../src/regexes/invitation_code.json"), "utf8"))[0][0]; // console.log(emailWalletUtils.extractSubstrIdxes(codeStr, readFileSync(path.join(__dirname, "../src/regexes/invitation_code.json"), "utf8"))); for (let idx = 0; idx < 256; ++idx) { @@ -137,7 +137,7 @@ describe("Invitation Code Regex", () => { const codeStr = "Re: Accept guardian request for 0x04884491560f38342C56E26BDD0fEAbb68E2d2FC Code 01eb9b204cc24c3baee11accc37d253a9c53e92b1a2cc07763475c135d575b76"; // const prefixLen = "sepolia+ACCOUNTKEY.0x".length; // const revealed = "123abc"; - const paddedStr = emailWalletUtils.padString(codeStr, 256); + const paddedStr = relayerUtils.padString(codeStr, 256); const circuitInputs = { msg: paddedStr, }; @@ -146,7 +146,7 @@ describe("Invitation Code Regex", () => { await circuit.checkConstraints(witness); // console.log(witness); expect(1n).toEqual(witness[1]); - const prefixIdxes = emailWalletUtils.extractInvitationCodeWithPrefixIdxes(codeStr)[0]; + const prefixIdxes = relayerUtils.extractInvitationCodeWithPrefixIdxes(codeStr)[0]; // const revealedStartIdx = emailWalletUtils.extractSubstrIdxes(codeStr, readFileSync(path.join(__dirname, "../src/regexes/invitation_code.json"), "utf8"))[0][0]; // console.log(emailWalletUtils.extractSubstrIdxes(codeStr, readFileSync(path.join(__dirname, "../src/regexes/invitation_code.json"), "utf8"))); for (let idx = 0; idx < 256; ++idx) { diff --git a/packages/circuits/tests/recipient_enabled.test.ts b/packages/circuits/tests/recipient_enabled.test.ts index 70c3a7a3..8329f07c 100644 --- a/packages/circuits/tests/recipient_enabled.test.ts +++ b/packages/circuits/tests/recipient_enabled.test.ts @@ -6,7 +6,7 @@ const wasm_tester = circom_tester.wasm; import * as path from "path"; const p = "21888242871839275222246405745257275088548364400416034343698204186575808495617"; const field = new ff.F1Field(p); -const emailWalletUtils = require("../../utils"); +const relayerUtils = require("../../utils"); const option = { include: path.join(__dirname, "../../../node_modules") }; @@ -19,9 +19,9 @@ describe("Email Auth", () => { it("Verify a sent email whose subject has an email address", async () => { const emailFilePath = path.join(__dirname, "./emails/email_auth_test1.eml"); const emailRaw = readFileSync(emailFilePath, "utf8"); - const parsedEmail = await emailWalletUtils.parseEmail(emailRaw); + const parsedEmail = await relayerUtils.parseEmail(emailRaw); console.log(parsedEmail.canonicalizedHeader); - const accountCode = await emailWalletUtils.genAccountCode(); + const accountCode = await relayerUtils.genAccountCode(); const emailAuthInput = await genEmailAuthInput(emailFilePath, accountCode); const recipientInput = await genRecipientInput(emailFilePath); const circuitInputs = { @@ -32,30 +32,30 @@ describe("Email Auth", () => { const witness = await circuit.calculateWitness(circuitInputs); await circuit.checkConstraints(witness); const domainName = "gmail.com"; - const paddedDomain = emailWalletUtils.padString(domainName, 255); - const domainFields = emailWalletUtils.bytes2Fields(paddedDomain); + const paddedDomain = relayerUtils.padString(domainName, 255); + const domainFields = relayerUtils.bytes2Fields(paddedDomain); for (let idx = 0; idx < domainFields.length; ++idx) { expect(BigInt(domainFields[idx])).toEqual(witness[1 + idx]); } - const expectedPubKeyHash = emailWalletUtils.publicKeyHash(parsedEmail.publicKey); + const expectedPubKeyHash = relayerUtils.publicKeyHash(parsedEmail.publicKey); expect(BigInt(expectedPubKeyHash)).toEqual(witness[1 + domainFields.length]); - const expectedEmailNullifier = emailWalletUtils.emailNullifier(parsedEmail.signature); + const expectedEmailNullifier = relayerUtils.emailNullifier(parsedEmail.signature); expect(BigInt(expectedEmailNullifier)).toEqual(witness[1 + domainFields.length + 1]); const timestamp = 1694989812n; expect(timestamp).toEqual(witness[1 + domainFields.length + 2]); const maskedSubject = "Send 0.1 ETH to "; - const paddedMaskedSubject = emailWalletUtils.padString(maskedSubject, 605); - const maskedSubjectFields = emailWalletUtils.bytes2Fields(paddedMaskedSubject); + const paddedMaskedSubject = relayerUtils.padString(maskedSubject, 605); + const maskedSubjectFields = relayerUtils.bytes2Fields(paddedMaskedSubject); for (let idx = 0; idx < maskedSubjectFields.length; ++idx) { expect(BigInt(maskedSubjectFields[idx])).toEqual(witness[1 + domainFields.length + 3 + idx]); } const fromAddr = "suegamisora@gmail.com"; - const accountSalt = emailWalletUtils.accountSalt(fromAddr, accountCode); + const accountSalt = relayerUtils.accountSalt(fromAddr, accountCode); expect(BigInt(accountSalt)).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length]); expect(0n).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 1]); expect(1n).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 2]); const recipientEmailAddr = "alice@gmail.com"; - const emailAddrCommit = emailWalletUtils.emailAddrCommitWithSignature(recipientEmailAddr, parsedEmail.signature); + const emailAddrCommit = relayerUtils.emailAddrCommitWithSignature(recipientEmailAddr, parsedEmail.signature); expect(BigInt(emailAddrCommit)).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 3]); }); @@ -63,9 +63,9 @@ describe("Email Auth", () => { it("Verify a sent email whose from field has a dummy email address name", async () => { const emailFilePath = path.join(__dirname, "./emails/email_auth_test3.eml"); const emailRaw = readFileSync(emailFilePath, "utf8"); - const parsedEmail = await emailWalletUtils.parseEmail(emailRaw); + const parsedEmail = await relayerUtils.parseEmail(emailRaw); console.log(parsedEmail.canonicalizedHeader); - const accountCode = await emailWalletUtils.genAccountCode(); + const accountCode = await relayerUtils.genAccountCode(); const emailAuthInput = await genEmailAuthInput(emailFilePath, accountCode); const recipientInput = await genRecipientInput(emailFilePath); const circuitInputs = { @@ -76,39 +76,39 @@ describe("Email Auth", () => { const witness = await circuit.calculateWitness(circuitInputs); await circuit.checkConstraints(witness); const domainName = "gmail.com"; - const paddedDomain = emailWalletUtils.padString(domainName, 255); - const domainFields = emailWalletUtils.bytes2Fields(paddedDomain); + const paddedDomain = relayerUtils.padString(domainName, 255); + const domainFields = relayerUtils.bytes2Fields(paddedDomain); for (let idx = 0; idx < domainFields.length; ++idx) { expect(BigInt(domainFields[idx])).toEqual(witness[1 + idx]); } - const expectedPubKeyHash = emailWalletUtils.publicKeyHash(parsedEmail.publicKey); + const expectedPubKeyHash = relayerUtils.publicKeyHash(parsedEmail.publicKey); expect(BigInt(expectedPubKeyHash)).toEqual(witness[1 + domainFields.length]); - const expectedEmailNullifier = emailWalletUtils.emailNullifier(parsedEmail.signature); + const expectedEmailNullifier = relayerUtils.emailNullifier(parsedEmail.signature); expect(BigInt(expectedEmailNullifier)).toEqual(witness[1 + domainFields.length + 1]); const timestamp = 1696965932n; expect(timestamp).toEqual(witness[1 + domainFields.length + 2]); const maskedSubject = "Send 1 ETH to "; - const paddedMaskedSubject = emailWalletUtils.padString(maskedSubject, 605); - const maskedSubjectFields = emailWalletUtils.bytes2Fields(paddedMaskedSubject); + const paddedMaskedSubject = relayerUtils.padString(maskedSubject, 605); + const maskedSubjectFields = relayerUtils.bytes2Fields(paddedMaskedSubject); for (let idx = 0; idx < maskedSubjectFields.length; ++idx) { expect(BigInt(maskedSubjectFields[idx])).toEqual(witness[1 + domainFields.length + 3 + idx]); } const fromAddr = "suegamisora@gmail.com"; - const accountSalt = emailWalletUtils.accountSalt(fromAddr, accountCode); + const accountSalt = relayerUtils.accountSalt(fromAddr, accountCode); expect(BigInt(accountSalt)).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length]); expect(0n).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 1]); expect(1n).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 2]); const recipientEmailAddr = "bob@example.com"; - const emailAddrCommit = emailWalletUtils.emailAddrCommitWithSignature(recipientEmailAddr, parsedEmail.signature); + const emailAddrCommit = relayerUtils.emailAddrCommitWithSignature(recipientEmailAddr, parsedEmail.signature); expect(BigInt(emailAddrCommit)).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 3]); }); it("Verify a sent email whose from field has a non-English name", async () => { const emailFilePath = path.join(__dirname, "./emails/email_auth_test4.eml"); const emailRaw = readFileSync(emailFilePath, "utf8"); - const parsedEmail = await emailWalletUtils.parseEmail(emailRaw); + const parsedEmail = await relayerUtils.parseEmail(emailRaw); console.log(parsedEmail.canonicalizedHeader); - const accountCode = await emailWalletUtils.genAccountCode(); + const accountCode = await relayerUtils.genAccountCode(); const emailAuthInput = await genEmailAuthInput(emailFilePath, accountCode); const recipientInput = await genRecipientInput(emailFilePath); const circuitInputs = { @@ -119,37 +119,37 @@ describe("Email Auth", () => { const witness = await circuit.calculateWitness(circuitInputs); await circuit.checkConstraints(witness); const domainName = "gmail.com"; - const paddedDomain = emailWalletUtils.padString(domainName, 255); - const domainFields = emailWalletUtils.bytes2Fields(paddedDomain); + const paddedDomain = relayerUtils.padString(domainName, 255); + const domainFields = relayerUtils.bytes2Fields(paddedDomain); for (let idx = 0; idx < domainFields.length; ++idx) { expect(BigInt(domainFields[idx])).toEqual(witness[1 + idx]); } - const expectedPubKeyHash = emailWalletUtils.publicKeyHash(parsedEmail.publicKey); + const expectedPubKeyHash = relayerUtils.publicKeyHash(parsedEmail.publicKey); expect(BigInt(expectedPubKeyHash)).toEqual(witness[1 + domainFields.length]); - const expectedEmailNullifier = emailWalletUtils.emailNullifier(parsedEmail.signature); + const expectedEmailNullifier = relayerUtils.emailNullifier(parsedEmail.signature); expect(BigInt(expectedEmailNullifier)).toEqual(witness[1 + domainFields.length + 1]); const timestamp = 1696967028n; expect(timestamp).toEqual(witness[1 + domainFields.length + 2]); const maskedSubject = "Send 1 ETH to "; - const paddedMaskedSubject = emailWalletUtils.padString(maskedSubject, 605); - const maskedSubjectFields = emailWalletUtils.bytes2Fields(paddedMaskedSubject); + const paddedMaskedSubject = relayerUtils.padString(maskedSubject, 605); + const maskedSubjectFields = relayerUtils.bytes2Fields(paddedMaskedSubject); for (let idx = 0; idx < maskedSubjectFields.length; ++idx) { expect(BigInt(maskedSubjectFields[idx])).toEqual(witness[1 + domainFields.length + 3 + idx]); } const fromAddr = "suegamisora@gmail.com"; - const accountSalt = emailWalletUtils.accountSalt(fromAddr, accountCode); + const accountSalt = relayerUtils.accountSalt(fromAddr, accountCode); expect(BigInt(accountSalt)).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length]); expect(0n).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 1]); expect(1n).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 2]); const recipientEmailAddr = "bob@example.com"; - const emailAddrCommit = emailWalletUtils.emailAddrCommitWithSignature(recipientEmailAddr, parsedEmail.signature); + const emailAddrCommit = relayerUtils.emailAddrCommitWithSignature(recipientEmailAddr, parsedEmail.signature); expect(BigInt(emailAddrCommit)).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 3]); }); it("Verify a sent email whose subject has an invitation code", async () => { const emailFilePath = path.join(__dirname, "./emails/email_auth_test5.eml"); const emailRaw = readFileSync(emailFilePath, "utf8"); - const parsedEmail = await emailWalletUtils.parseEmail(emailRaw); + const parsedEmail = await relayerUtils.parseEmail(emailRaw); console.log(parsedEmail.canonicalizedHeader); const accountCode = "0x01eb9b204cc24c3baee11accc37d253a9c53e92b1a2cc07763475c135d575b76"; const emailAuthInput = await genEmailAuthInput(emailFilePath, accountCode); @@ -162,30 +162,30 @@ describe("Email Auth", () => { const witness = await circuit.calculateWitness(circuitInputs); await circuit.checkConstraints(witness); const domainName = "gmail.com"; - const paddedDomain = emailWalletUtils.padString(domainName, 255); - const domainFields = emailWalletUtils.bytes2Fields(paddedDomain); + const paddedDomain = relayerUtils.padString(domainName, 255); + const domainFields = relayerUtils.bytes2Fields(paddedDomain); for (let idx = 0; idx < domainFields.length; ++idx) { expect(BigInt(domainFields[idx])).toEqual(witness[1 + idx]); } - const expectedPubKeyHash = emailWalletUtils.publicKeyHash(parsedEmail.publicKey); + const expectedPubKeyHash = relayerUtils.publicKeyHash(parsedEmail.publicKey); expect(BigInt(expectedPubKeyHash)).toEqual(witness[1 + domainFields.length]); - const expectedEmailNullifier = emailWalletUtils.emailNullifier(parsedEmail.signature); + const expectedEmailNullifier = relayerUtils.emailNullifier(parsedEmail.signature); expect(BigInt(expectedEmailNullifier)).toEqual(witness[1 + domainFields.length + 1]); const timestamp = 1707866192n; expect(timestamp).toEqual(witness[1 + domainFields.length + 2]); const maskedSubject = "Send 0.12 ETH to "; - const paddedMaskedSubject = emailWalletUtils.padString(maskedSubject, 605); - const maskedSubjectFields = emailWalletUtils.bytes2Fields(paddedMaskedSubject); + const paddedMaskedSubject = relayerUtils.padString(maskedSubject, 605); + const maskedSubjectFields = relayerUtils.bytes2Fields(paddedMaskedSubject); for (let idx = 0; idx < maskedSubjectFields.length; ++idx) { expect(BigInt(maskedSubjectFields[idx])).toEqual(witness[1 + domainFields.length + 3 + idx]); } const fromAddr = "suegamisora@gmail.com"; - const accountSalt = emailWalletUtils.accountSalt(fromAddr, accountCode); + const accountSalt = relayerUtils.accountSalt(fromAddr, accountCode); expect(BigInt(accountSalt)).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length]); expect(1n).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 1]); expect(1n).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 2]); const recipientEmailAddr = "alice@gmail.com"; - const emailAddrCommit = emailWalletUtils.emailAddrCommitWithSignature(recipientEmailAddr, parsedEmail.signature); + const emailAddrCommit = relayerUtils.emailAddrCommitWithSignature(recipientEmailAddr, parsedEmail.signature); expect(BigInt(emailAddrCommit)).toEqual(witness[1 + domainFields.length + 3 + maskedSubjectFields.length + 3]); }); }); \ No newline at end of file diff --git a/packages/contracts/script/DeployCommons.s.sol b/packages/contracts/script/DeployCommons.s.sol index 9c5ac50f..240d0f6e 100644 --- a/packages/contracts/script/DeployCommons.s.sol +++ b/packages/contracts/script/DeployCommons.s.sol @@ -9,7 +9,6 @@ import "../src/utils/Verifier.sol"; import "../src/utils/ECDSAOwnedDKIMRegistry.sol"; import "../src/EmailAuth.sol"; - contract Deploy is Script { using ECDSA for *; @@ -33,29 +32,36 @@ contract Deploy is Script { vm.startBroadcast(deployerPrivateKey); // Deploy DKIM registry - dkim = new ECDSAOwnedDKIMRegistry( - signer - ); + dkim = new ECDSAOwnedDKIMRegistry(signer); console.log("ECDSAOwnedDKIMRegistry deployed at: %s", address(dkim)); vm.setEnv("DKIM", vm.toString(address(dkim))); // Deploy Verifier verifier = new Verifier(); - console.log("ECDSAOwnedDKIMRegistry deployed at: %s", address(verifier)); + console.log("Verifier deployed at: %s", address(verifier)); vm.setEnv("VERIFIER", vm.toString(address(verifier))); // Deploy EmailAuth Implementation { emailAuthImpl = new EmailAuth(); - console.log("EmailAuth implementation deployed at: %s", address(emailAuthImpl)); + console.log( + "EmailAuth implementation deployed at: %s", + address(emailAuthImpl) + ); vm.setEnv("EMAIL_AUTH_IMPL", vm.toString(address(emailAuthImpl))); } // Deploy SimpleWallet Implementation { simpleWalletImpl = new SimpleWallet(); - console.log("SimpleWallet implementation deployed at: %s", address(simpleWalletImpl)); - vm.setEnv("SIMPLE_WALLET_IMPL", vm.toString(address(simpleWalletImpl))); + console.log( + "SimpleWallet implementation deployed at: %s", + address(simpleWalletImpl) + ); + vm.setEnv( + "SIMPLE_WALLET_IMPL", + vm.toString(address(simpleWalletImpl)) + ); } vm.stopBroadcast(); } diff --git a/packages/contracts/test/EmailAccountRecoery.t.sol b/packages/contracts/test/EmailAccountRecovery.t.sol similarity index 100% rename from packages/contracts/test/EmailAccountRecoery.t.sol rename to packages/contracts/test/EmailAccountRecovery.t.sol diff --git a/packages/prover/modal_server.py b/packages/prover/modal_server.py index a107fbf8..c15f5668 100644 --- a/packages/prover/modal_server.py +++ b/packages/prover/modal_server.py @@ -37,4 +37,5 @@ def prove_email_auth(): ) proof = gen_email_auth_proof(str(nonce), False, input) return jsonify(proof) + return app diff --git a/packages/relayer/.env.example b/packages/relayer/.env.example new file mode 100644 index 00000000..637009d5 --- /dev/null +++ b/packages/relayer/.env.example @@ -0,0 +1,26 @@ +EMAIL_ACCOUNT_RECOVERY_VERSION_ID= # Version ID of the email account recovery. +PRIVATE_KEY= # Private key for Relayer's account. +CHAIN_RPC_PROVIDER=http://127.0.0.1:8545 +CHAIN_RPC_EXPLORER= +CHAIN_ID=11155111 # Chain ID of the testnet. + +# IMAP + SMTP (Settings will be provided by your email provider) +IMAP_DOMAIN_NAME=imap.gmail.com +IMAP_PORT=993 +AUTH_TYPE=password +SMTP_DOMAIN_NAME=smtp.gmail.com +LOGIN_ID= # IMAP login id - usually your email address. +LOGIN_PASSWORD="" # IMAP password - usually your email password. + +PROVER_ADDRESS="https://zkemail--email-wallet-relayer-v1-1-flask-app-dev.modal.run" + +DATABASE_URL= "postgres://test@localhost/emailauth_test" +WEB_SERVER_ADDRESS="127.0.0.1:4500" +CIRCUITS_DIR_PATH= #Path to email-wallet/packages/circuits +EMAIL_TEMPLATES_PATH= #Path to email templates, e.g. ./packages/relayer/eml_templates/ + +CANISTER_ID="q7eci-dyaaa-aaaak-qdbia-cai" +PEM_PATH="./.ic.pem" +IC_REPLICA_URL="https://a4gq6-oaaaa-aaaab-qaa4q-cai.raw.icp0.io/?id=q7eci-dyaaa-aaaak-qdbia-cai" + +JSON_LOGGER=false \ No newline at end of file diff --git a/packages/relayer/Cargo.toml b/packages/relayer/Cargo.toml index 1a07ed1b..b7f7935b 100644 --- a/packages/relayer/Cargo.toml +++ b/packages/relayer/Cargo.toml @@ -24,7 +24,7 @@ serde_json = "1.0.68" tiny_http = "0.12.0" lettre = { version = "0.10.4", features = ["tokio1", "tokio1-native-tls"] } ethers = { version = "2.0.10", features = ["abigen"] } -ether-email-auth-utils = { path = "../utils" } +relayer-utils = { path = "../utils" } futures = "0.3.28" sqlx = { version = "=0.7.3", features = ["postgres", "runtime-tokio"] } regex = "1.10.2" @@ -52,6 +52,9 @@ slog-term = "2.9.0" slog-json = "2.6.1" file-rotate = "0.7.5" function_name = "0.3.0" +base64 = "0.21.7" +uuid = "1.8.0" +http = "1.1.0" [build-dependencies] ethers = "2.0.10" diff --git a/packages/relayer/build.rs b/packages/relayer/build.rs new file mode 100644 index 00000000..28907c0e --- /dev/null +++ b/packages/relayer/build.rs @@ -0,0 +1,31 @@ +use ethers::contract::Abigen; + +fn main() { + Abigen::new( + "EmailAuth", + "../contracts/artifacts/EmailAuth.sol/EmailAuth.json", + ) + .unwrap() + .generate() + .unwrap() + .write_to_file("./src/abis/email_auth.rs") + .unwrap(); + Abigen::new( + "ECDSAOwnedDKIMRegistry", + "../contracts/artifacts/ECDSAOwnedDKIMRegistry.sol/ECDSAOwnedDKIMRegistry.json", + ) + .unwrap() + .generate() + .unwrap() + .write_to_file("./src/abis/ecdsa_owned_dkim_registry.rs") + .unwrap(); + Abigen::new( + "EmailAccountRecovery", + "../contracts/artifacts/EmailAccountRecovery.sol/EmailAccountRecovery.json", + ) + .unwrap() + .generate() + .unwrap() + .write_to_file("./src/abis/email_account_recovery.rs") + .unwrap(); +} diff --git a/packages/relayer/eml_templates/acceptance_request.html b/packages/relayer/eml_templates/acceptance_request.html new file mode 100644 index 00000000..f350817a --- /dev/null +++ b/packages/relayer/eml_templates/acceptance_request.html @@ -0,0 +1,418 @@ + + + + + + Email Auth + + + Set Your Guardian Email + + + + + + + + + diff --git a/packages/relayer/eml_templates/acceptance_success.html b/packages/relayer/eml_templates/acceptance_success.html new file mode 100644 index 00000000..4e45a5b4 --- /dev/null +++ b/packages/relayer/eml_templates/acceptance_success.html @@ -0,0 +1,415 @@ + + + + + + Email Auth + + + Guardian Email Set! + + + + + + + + + diff --git a/packages/relayer/eml_templates/assets/css/main.css b/packages/relayer/eml_templates/assets/css/main.css new file mode 100644 index 00000000..83f7b115 --- /dev/null +++ b/packages/relayer/eml_templates/assets/css/main.css @@ -0,0 +1,491 @@ + /* ------------------------------------- + GLOBAL RESETS + ------------------------------------- */ + + /*All the styling goes here*/ + /* :root {color-scheme: light dark;} */ + + @font-face { + font-family: "Regola"; + src: url("https://storage.googleapis.com/eml-templates-assets/Regola_Pro/Regola%20Pro%20Regular.otf") format("opentype"); + } + + @font-face { + font-family: "Regola"; + src: url("https://storage.googleapis.com/eml-templates-assets/Regola_Pro/Regola%20Pro%20Bold.otf") format("opentype"); + font-weight: bold; + } + + @font-face { + font-family: "Regola"; + src: url("https://storage.googleapis.com/eml-templates-assets/Regola_Pro/Regola%20Pro%20Medium.otf") format("opentype"); + font-weight: 500; + } + + @font-face { + font-family: "Regola"; + src: url("https://storage.googleapis.com/eml-templates-assets/Regola_Pro/Regola%20Pro%20Book.otf") format("opentype"); + font-weight: 300; + } + + img { + border: none; + -ms-interpolation-mode: bicubic; + max-width: 100%; + } + + body { + background-color: #f6f6f6; + -webkit-font-smoothing: antialiased; + font-size: 14px; + line-height: 1.4; + margin: 0; + padding: 0; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + } + + table { + border-collapse: separate; + mso-table-lspace: 0pt; + mso-table-rspace: 0pt; + width: 100%; + } + + table td { + font-family: "Regola", sans-serif; + font-size: 14px; + vertical-align: top; + } + + /* ------------------------------------- + BODY & CONTAINER + ------------------------------------- */ + + .body { + background-color: #f6f6f6; + width: 100%; + } + + /* Set a max-width, and make it display as block so it will automatically stretch to that width, but will also shrink down on a phone or something */ + .container { + display: block; + margin: 0 auto !important; + /* makes it centered */ + max-width: 580px; + padding: 10px; + width: 580px; + } + + /* This should also be a block element, so that it will fill 100% of the .container */ + .content { + box-sizing: border-box; + display: block; + margin: 0 auto; + max-width: 580px; + padding: 10px; + } + + /* Bold text */ + .bold { + font-weight: bold; + } + + /* ------------------------------------- + HEADER, FOOTER, MAIN + ------------------------------------- */ + .main { + background: #ffffff; + border-radius: 3px; + width: 100%; + } + + .banner { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + background-image: linear-gradient(45deg, #844aff, #5e2bff); + margin-bottom: 1rem; + border-radius: 0.4rem; + padding: 10px; + } + + .wrapper { + box-sizing: border-box; + padding: 20px; + } + + .content-block { + padding-bottom: 10px; + padding-top: 10px; + } + + .footer { + clear: both; + margin-top: 1rem; + text-align: center; + width: 100%; + } + + .logo { + margin-top: -0.5rem; + } + + .footer td, + .footer p, + .footer span, + .footer a { + color: #999999; + font-size: 1rem; + text-align: center; + } + + .social-icons { + margin-top: 1rem; + width: 100%; + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + } + + .social-icons a { + width: auto; + } + + .social-icons img { + height: 2rem; + width: auto; + } + + .powered-by { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + + .powered-by img { + width: 100%; + height: auto; + } + + /* ------------------------------------- + TYPOGRAPHY + ------------------------------------- */ + h1, + h2, + h3, + h4 { + color: #000000; + font-family: "Regola", sans-serif; + font-weight: 400; + line-height: 1.4; + margin: 0; + margin-bottom: 30px; + } + + h1 { + font-size: 35px; + font-weight: 300; + text-align: center; + text-transform: capitalize; + } + + p, + ul, + ol { + font-family: "Regola", sans-serif; + font-size: 14px; + font-weight: normal; + margin: 0; + margin-bottom: 15px; + } + + p li, + ul li, + ol li { + list-style-position: inside; + margin-left: 5px; + } + + a { + color: #3498db; + text-decoration: underline; + } + + .info-link { + color: #0000ff; + opacity: 0.7; + text-decoration: underline; + } + + /* ------------------------------------- + BUTTONS + ------------------------------------- */ + .btn { + box-sizing: border-box; + width: 100%; + } + + .btn > tbody > tr > td { + padding-bottom: 15px; + } + + .btn table { + width: auto; + } + + .btn table td { + background-color: #ffffff; + border-radius: 5px; + text-align: center; + } + + .btn a { + background-color: #ffffff; + border: solid 1px #3498db; + border-radius: 5px; + box-sizing: border-box; + color: #3498db; + cursor: pointer; + display: inline-block; + font-size: 14px; + font-weight: bold; + margin: 0; + padding: 12px 25px; + text-decoration: none; + text-transform: capitalize; + } + + .btn-primary table td { + background-color: #3498db; + } + + .btn-primary a { + background-color: #3498db; + border-color: #3498db; + color: #ffffff; + } + + /* ------------------------------------- + OTHER STYLES THAT MIGHT BE USEFUL + ------------------------------------- */ + .last { + margin-bottom: 0; + } + + .first { + margin-top: 0; + } + + .align-center { + text-align: center; + } + + .align-right { + text-align: right; + } + + .align-left { + text-align: left; + } + + .clear { + clear: both; + } + + .mt0 { + margin-top: 0; + } + + .mb0 { + margin-bottom: 0; + } + + .preheader { + color: transparent; + display: none; + height: 0; + max-height: 0; + max-width: 0; + opacity: 0; + overflow: hidden; + mso-hide: all; + visibility: hidden; + width: 0; + } + + .powered-by span { + text-decoration: none; + margin-top: -1rem; + font-size: medium; + } + + hr { + border: 0; + border-bottom: 1px solid #f6f6f6; + margin: 20px 0; + } + + /* ------------------------------------- + RESPONSIVE AND MOBILE FRIENDLY STYLES + ------------------------------------- */ + @media only screen and (max-width: 620px) { + table.body h1 { + font-size: 28px !important; + margin-bottom: 10px !important; + } + + table.body p, + table.body ul, + table.body ol, + table.body td, + table.body span, + table.body a { + font-size: 16px !important; + } + + table.body .wrapper, + table.body .article { + padding: 10px !important; + } + + table.body .content { + padding: 0 !important; + } + + table.body .container { + padding: 0 !important; + width: 100% !important; + } + + table.body .main { + border-left-width: 0 !important; + border-radius: 0 !important; + border-right-width: 0 !important; + } + + table.body .btn table { + width: 100% !important; + } + + table.body .btn a { + width: 100% !important; + } + + table.body .img-responsive { + height: auto !important; + max-width: 100% !important; + width: auto !important; + } + } + + /* ------------------------------------- + PRESERVE THESE STYLES IN THE HEAD + ------------------------------------- */ + @media all { + .ExternalClass { + width: 100%; + } + + .ExternalClass, + .ExternalClass p, + .ExternalClass span, + .ExternalClass font, + .ExternalClass td, + .ExternalClass div { + line-height: 100%; + } + + .apple-link a { + color: inherit !important; + font-family: inherit !important; + font-size: inherit !important; + font-weight: inherit !important; + line-height: inherit !important; + text-decoration: none !important; + } + + #MessageViewBody a { + color: inherit; + text-decoration: none; + font-size: inherit; + font-family: inherit; + font-weight: inherit; + line-height: inherit; + } + + .btn-primary table td:hover { + background-color: #34495e !important; + } + + .btn-primary a:hover { + background-color: #34495e !important; + border-color: #34495e !important; + } + } + + /* ------------------------------------- + Dark Mode + ------------------------------------- */ + /* @media (prefers-color-scheme: dark) { + body { + background-color: #1e1e1e; + color: #ffffff; + } + + .container { + background-color: #1e1e1e; + } + + .main { + background-color: #2a2a2a; + border-radius: 8px; + } + + .banner { + background-image: linear-gradient(45deg, #844aff, #5e2bff); + border-radius: 0.4rem; + border: 1px solid #ffffff; + padding: 10px; + } + + .wrapper { + padding: 20px; + } + + p, + li { + color: #ffffff; + } + + .info-link { + color: #ffffff; + opacity: 0.7; + } + + .footer { + background-color: #1e1e1e; + } + + .powered-by, + .footer td, + .footer p, + .footer span, + .footer a { + color: #999999; + } + + hr { + border-color: #666666; + } + + .social-icons img { + background-color: #ffffff; + border-radius: 50%; + padding: 0.1rem; + } + + } */ \ No newline at end of file diff --git a/packages/relayer/eml_templates/assets/font/Regola Pro Bold Oblique.otf b/packages/relayer/eml_templates/assets/font/Regola Pro Bold Oblique.otf new file mode 100644 index 0000000000000000000000000000000000000000..23f0663f920b227b2a97f195c8476e1963d93d18 GIT binary patch literal 137764 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�>Am18uo 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 z zZ16PvLwPx~)z*iVBrYp)7R$FuV!8$w%eBcSU89TklShWOGXh8wx?3Eu>>~E9!?vj{ z0owJB_w%8+y*^*@qwd9!a{~?_>EyMZJYoT>X@(p7UiuTq z7~^&(S8L9M!AYZ6hgy=y3C6u;I<;-XTufzdHYcC^7d9R`3b4NY?FIUlYhfAz&=YqL z6~^SQ%|8my4qdzYo5{HMdE?9)X5;o4=A>+07dftH=i!4UT4pbuw`4}LOLWql)rqFe zeVYMNw6`V{ydPLqp~ui}Gl%+g4c&Awb6fV^y%s|o$WY5%)ZNiW;&R}96+p=>Rb;w4 z4VhDeoURWoJH%EtlW-M*%&a`ZogoQ>=4=gs{pS2ENqaw6dOR{`$`Gl=&#hN(lAeq_ zJ>{zEkKadB8XkQiFNdz>u>>3Bv>7R@N8)W+?zoR|Khe4i0F%r5RrNi z;a>{0TySP>7-lFkHG+ke3Y7;BRjncucRf~F8%rFOQ|k7-^5kju<%dU(hPF?(xC9BeG(}24=4zW9MORygg#;)wjFP_P}3~d6w%!v%WoQjUx&rRv>itqf6YL8 zoZ6gq&+xA|>GiZ0M%%A%-+ukN@ohi9#*O{_Za02yA-(gkF1*Wlhdq5avb4&WJH}*x&he`p!kkJI%>t z6sClXofhOXbb9iJ#oW{v;q9bNOIEI4)8KBU#rc62IM05m;m%xvaj{j_}`Hcv3tmDXx0Ddh45@L2z= z>^SBtup-#Pif|L;%POSgB{#$f3`M&4O76*yf`}>lWk{bGly_?HX}7V!IE@u4^7!cp)R1IF(MmM7ak9_ z-?s0#GyXRYXZ)u;9_k54Jk;r}gwm69YT4P={V!~5NopK;7IhcJc@V%rPwAi4MA%gQAtqnPpiAuQ!##G7sWndTelv}$UL`u-I&qy7R-&E z2O!xPVPQgCLW1eH`q!9_Dc{y$F5Odyq=y1ux@?c$Z7Q0W^V=4fZe>5@k$Hoe-;pkh zY;-lH$IJn(YWVaTwk7M*rQBzh=a>frwdU!+Z#}$qN4oB9`ju^mxBrr^r)+KCm#G0>n{ zs2~|^dhI6EZAG|Nl-Aq*W>XxfNC7}aD(nJmd4u${r4#T4?Ctzb>#L{0f4X+_mHy!s zaM$Uwo{9`ZCyujWFRRcnuc;6UQ-C*n} zYEL-C%Nxy^6N*NC@qbDAi~mc&U9{dyy9n&M_w=p)y&e6YRkZ>hN(a{Ah%jIe9Z(qP z;%kHf1B|xr0!j+|uN_OO1Z@MBR2xUfOK{+*Dh@2EI7dv@ zjE)2U8TJ(;=Ezf?hekO07vNO`J8W;@@4S79166|`9?>{&ZGfIa$D*~JtSPvdeM2@q zeKQkH+G4HGX;1EU;>TO-+lg;Yxy^S&2kjHS0Qjc-1wK8%4xetYdA79r>f&g;o{DLY zaO3#w3yCfuslaggyLWiE9O^;qRu|_c~W| z?&RFZd6;vE^El^4&L0I=K@my{LBez)L0BVP6dnk#AXIP?okef4jOZ(N5hsbU;*Fvf z1f|Qn6aaLJ*iPrP#J&`-){1 zJ6Y^pF(%0fQ1^q>QJN{mN?B62bX|HUo8=mEW4VRgRURsjmBZyVG9quvujP00XIH`1 z&9%7e_pU8mJGxGAo#{Hyb-QbZ>vh*Vt`A&4xqahS$E~~DAh!^=DQ?T%Ho2X2%X53- z_Q8$0{o7zN)H2jF{AdU=j535978#Na>kV5CyA7udxrSd2j|^}eb}!~`bT8pv)xEiU zPxoN=G4A2+k?!-|7rHNVPjX-9p6b5SeZPB_`*HU(?zi0UxxaD$!`My&vy*2(&*7dSo)bNzJZB@!-V)E{p6fifd+zr}ER`kCH)K9BZol2%qZ&<7vNnVS_vzQQMc=S3 zY1vuFbK&n%(H5rk7`=7>FK16)JH90(plzqF@b|FZ`A-;vG7kpJ*`~~9+YPRMK$&u2+CdS8Xba8$}Hgo8MqAEjkYE6J(w%US4?y z+q4@%%Eko51GmXmQ|UQ;$C1kyuH4E_5ANNhRr_WZ!+%GZWu>0gz==@Kze>^(h=n!^ zvOSjc-*;wN>DP7qun}+t+C#M*UP<-Einhw+K26Bnl)dek&zUVjz3R2|uh$~%;Nduj zhm;}ad3ElUR0~J3;)sf6Xm*=npZ*V+YIWcS_BZG>S?D9lm8F9`XuYc-!|3$?X6bG> zbGH}z)mf=dn*!Gk zhOzwQigl!^En0W%(DHVh62{0qX~#BX`53eA{Pg2nxQ#Ddw9=AD24POr)cI3bKkxddj{Dd-j{|96EYEYuD&r9RDubZ1_(IOUx;^ z4X%tHAAX@?a-a&kCk`MZw+*x0?klWWz9D6!k6g!&V=0RxRQVrTTWV@+*^BLgdiE&o zk(CWpO4z()#o8@Ci+{n4YdR#f)pW}Qcyou&nI0M9Gq{xz}e3>sD?AmFzAP!$%DbnZ9yUtVNzWY36uyQ*lN;L{`6-nR(J8?*<+j zM-+~ZkZVhJz(A}&xzJv8k(?3;wg8!@KxIS-5r;#B6fDT#c;&?p%hW$a8QAc%5Wigk zZ2b3F%Y!J^L>-%x%b<(q+U zuRdX$;1ky6zxjkA%mRGEn*JA`FeN`mco^3s2S&G*>a*H_F)eno^#>|)`yuJ?^*&a= z|IqQnIM7ArvV(8#_-t4eITEgx65FDT4Bx=7ZAa7AhK=qwpnqSBLAe_vTTy!^}aOM?%#2p$q1GTA&|jNi5AMo#RSxTNUC<6Zn%s4^}tYE_CUEp6wX zO^K5tMg$KZ5^FZt(Y>x~-ywLpL6i{~5^+Mf6=b7M1AnY+Dt{HW4pb^XkBnQ*%x9U< zZEF93AANdF*u3+^<}F9}S#F=(ot|`S`NcK4|`?u}t?{6`zA1K77tV~UckC|^C9flG>KgisJY1Y5()Aj@I7*b>Xb(S zR?Igaz+!U5tk8)gd}IV4=*Wa|GSt`DaCq_~_X9K`;>L6ms_9gE!#$nW95{~2w-QjlR7QP&Z0Mk8!O=k7( zKtfm@Mhs;@%`mF>9l5dU7FkcefLh<_0E6YsVl3P})3JA+`udTif_;VFSt(AsI6^*05MvD7eFgbh$ zSNCCTIRw1RVKgC98%FGmO(zgM5`t(sMteE0hqWb5Fcj*Z3UyHy%y_zt$$uF*vob(N z=@1o{p(O*jpbdh9tc|J+?Q&_ma|84_b70WYUbXMyFCZ*?VP~fwB4hv&b1UTBS?a;P zdtrmT6VMEuVd@Q=@1z%8Za1kK?7%rl(0_5?;Law{gcxLPj-gK6P$m`qyU0 z>a23u;)tbF%*L}JK~wwnG?lp@NcvzbS{Fff03JGU6J+I2u&U-sT8o@LDq%Z-4}Y} zARI0<7UdriWU`J9|LEisrYjfs=b4S?F6gH2?I-R%mnI^paxjy^P> z-k?M{4=IKrK4~|kIw{K0kGh4^;YTeW(bz{`xiEKlzK7d9$W$F3%mpDsWscEaN0OiP zethn6>!(w~Lg1$5=t@Li5j3(X-^i^)A%*f~?dRS;bb7e&mte7OKE^qT#JXf#+5E zCj7o%W1$Uu*(_WRP!VP|mj^e+1+6nigUA28Bll9d(}Z02-nrpb1olik@U&$wLBj8Ss)fb^9*gXE3_6Y zSY`-_DX$|>!C#f(2!Pdeoa&S#r#TT`j%{hE9pI^b zUvky0QtR!vo~P=*e_dT&l845}hs;{@LK8E?S6qE{{wHg$n>5zUmBzd)e$ACvU48ob zr|&Y>_F-ep>#i9d8f)Bf=p_06pNx6V{nw0LclmwWzWS)KhTdV!rgsgEU9fv(je<|Om-)%BFQ(7b7NJ#9`i zf4jP#kueXgu4nC&%=cE;b0%m1a&>);$;Ir|^|f{@wsv*>6q8N7WOe;i6HnYJ`__tQ zr1qJ_>sQw;vpH$6uG{9MWPWu$W_Blct**z-rsVCb>j~4F3|7~Z^7wtL>nU@4@++(B zX>)e!($)2h*_66zbv+y3l&Y_;=gj)t@p{(C`Uh4YUmJfs_nFo8Q_Q+k?pa+w)ud1P z+!gZ+%ZtChtwpxJ!9wzA-m5FS9!N>U@5AzP6a3nx9>$Rb5?~t4>VMdwr#Q`MSGxUe|C;4W5|wKn~sKJ8E0Ukfr~x-Oe`m!|zW znR(G&(A_A{cJc?^MOQZRJ3Bo;G3UsBpOh)*^8@pXZY@8t^h{0XZ=A2?4^GJZ3$?|m zgL1qa*;RA%bLYFwshQf6Zh2;U%AH$s^NoYkQwQ_@;>28aNxP-c)dMS=smYMzrT@0$ zUHSbqJU3sJn(`C=qU+8|?b6_4eraN+)9G)A=jG9fx#j%A{9;uPwCs)P>Mn}psj>mt zfxojA-KBCYq;}a8$A2oj@Ay7@$_(@31os(dkzJ&1HRfwGvKOR`d6`QO<*LJF{@DpR zxYH9eyBdwguIl-X`CZf16IRFN(DiqAmmJ_F*^$zAt$J{Nae76bEqiIHHo3Y#&&w~# z@jov==&?p!&Fj#OHoz&tYj z?7TDWP0Lfpmls@bVoHLk6JK>*e?=XR{ZypFi0AA8Pi=Nmlo|D~E8I*`et*QW(=YU1`13onKmBJ1sDDYSo;PzcQ)l+P31q!tJaay^ zFUWUS${y+TzlXhWk?4taKYivCfA(Zg)6#jKE~_&0gjDC6S^2tX4$I^7vcvnJXxQSpJ<(qY`r0s%*fYH zt&TiemGAO${O3(gs>z!vS(_EF)Z`~xU+0lIX4F1(PTjlepe0%JWUWEZy8WuuF~QF| z`$oUl$Mu;ypE}5uZB%9cPK67y4fUpOtBMah`|bEMSGN}5P7jMRZi&%4$26YP&h%03 ze2#h4qppnVjCNPIt=(!h`e>(N z^;x>7G&6bj_M+?+eMDWM+tcjK$;dfzt!tX{(;0b|cG-E(jI2$`Pv&@r`dfXbbL3?| zs2g>UYh9gV+c`G6wWsE{(~Zu2{P^kD-+zpi1p8%XJ*GOl)~Mg<_EdG-uKYhsZTb_P zOMSE?Kh>lEznfiCqhob8WzquQ>yhpxy5kM?x7KldPd>TT6CL<82g&%~^=qexPA)q8 zz2k|eJ$Kc8PxsmHuR$}VOmL+W-3L#b?-^_9xaj!NYDmXQ$&ME~dqekh$HARcK9%U5 z`jtPO{LH1&sOp(Z97{T7xyaDJQ=MiJ+b1e%yqJVD>A3<)2wW_ zlc3+9cHLvgf2w=wIO`_Z&#pP~=bcv~rGiJr$HzRG!{gcNxKlGRC-ZkYQSL92y5q0< z|7ZL8|0^#XKRze!$3N`RXFBr#r$_dgDtW5c)iIhv<=63JyChlB^8)>u=0?9BpQ-ce z_$2f6=+4Tb=TFK)eRW-aii4isc@`(-WmfgDrd#v$WFpnS>cna0JMR6bzRn)6M)$C; zpGe`lJhOAgb)3ZNxZ~$*$Gxs+Rr;#iVe^!1Pkp65YXa1@T7|ya&&t~Iz3^lj8dR>Y zUmdS&KPSHKb$sgmwzefXr_$GP|Ag6eYfCb>*01}x)1!y0J6qJg9H~u@kk9C6K4U$8 zzNy!hVx7faw|b>!lV0(VYftM;(vs_SCS!hS$914Qw)(a6-S1O7Zhgx7taZPgw$Hc6 ztiQC5T3@sNtKDsV()zLWY3u*7uClJSuCcDQ_FH|{^R0esz#6nZVf~eTmc7Z|Y<#O!{ z)?eET<|XD&&Fjrw<{jqG%!kc?HTRgmG=FVAXFhNK!F<^~YQAIs$$Zy5X8z4GmSrWa zw6)gyl6{l)W&3RDDj_|eW;U8@&476ArRJ4#mFyMfPIHG`A$zBJzj=>&ula~8W$9|4=rQKtdtg>~vT=#p}`U~qmd%JzEowc{gWxk(TKez6cs*)yW z#>AJ8SU<9UX#LXqmG$q|6ZRk3{Z`II)|>2%^$Y9Y^qAPUTK8E0VLfi|lIwwI%B9E6 z;)-4Jeqpz{#PkWBjTsbg9Tt~-+@7^-_M&~rp0}&^jD5sjvJabhT&}g67nv8zHf?i( z*=r)%i}%P8Yg@0j?v!Ko1?w^Em~8tp>GXft565=IUKjgd?EctiH~-(8U%vV0`E~h? z`OW#Q`5pNS^M(BL@|WkY%#Y+3^2_-s|I+-c@*m!E`j)L*Zrw7!Q+*l+RPc-Vp#}-^uI?RMels{H;?}J zN25m<9=-0-rAN|i@Z{{5H=W+$)v*x+x zGm_#@%I5@sVJB&a2jx1)H_Y?RSLF)ELrNfdZ}QLPX7jJ|8Oy)OCkx**x0@fD+sqHlt>*jk zD)@7G<@uSs4*gVKr;f?1)PI^o=9lJ(`Hj4u{fE4U{@T>7mo%m zI@$ch{IPYaB>i4FZ+wk>8udE4YVl2ZCHs-QmiHzq7o{ zTxLJpUGglJd}mDToo2Hx_KNg; zwLJDr%ZfZ+Gd(h98_TeKeU^*Wko|MJjDPx4k?rl1n&qn`>@qpm+1FW)ebYR4?5|dr z|0R$0$ogMeKh`nFj#?)jdxGyzJNCC$`q+cV7kji$|V`*eR;e=I$8mb`r3YCR#3J;P#OY4%y;W}WpqbF%Ii zzUsOx_VZ+}XS-ZtQn4F z=DWdclI>q3ORp@K$+AY4OJq4$mffPD_`F#J>4hE zyJVa1k?-sB_{-(1uFuIa`HAeu0a<^6jG2(-Mj3azeBB|B56k1a{%prR%k4_W4#j%p zSUx6flJ_~fE}q*Eo0J}YAdjy#yJPYxM*Lz~=4Jit&ez0?OTV4NqIj`9) zOIEVjBg@rtFT_4sdaNOqb${^Z|0u^smj|Wp2gSEHm=CNjACs@TyjvIDPx5uQb%*qP z!n$1-Zr5d7at0+!56AnX@>Lc&yAWm4-q zOiz55@3pjKI?AT|KE_~DvR}T@z@g`*&M^ zBlZ4wbCEo@Tlm}~uMM5$&*h9-pL?m`y#V|PhC4(g&F>Z1pb9hIL>qleJL=nOiG&Y|<@0(t~pM3;_L zWrpf8z5l0%*3kyqL|cpr&=8H#Hu_@fd<^|5`ZM(B=r2^|Z1w@YfOG6VQ5%h+aWsLZ z8IwV?XbxS2vbU|BtoJbf9M*f8|8n$dlznU6#QGu{pnrnifqq7xYsb-yK4Kq0+4Hs| z>o!iXae{5s3ARxu*hZaT8+C$h)CsoH+H9jvu#GywHtGc1s1t0XPOyzS!8Ymy+o%(4 zqfW4mR%;t|f^F0Zwoxb8Mx9_At;aU%1ly<+Y@A>lb%Jfw3ARxu*hZaT;{@BN6KtbS zu#GywHtGc1s1t0XPOyzS!8Ymy+o%(4qfW4Kf{hbwqfU_bZKyiIHtGc1s1t0XPOyzS z!8Ymy+o%(4dBs#!C)h@vU>kLUZPW=iPOx!;jT3B3onTw)1lv+4*m5rWfT%jbw$ur> zrB1Ldb%JfNw{e1PsS|8VonTw)1lv+4*p@oMw%E5g!M4;1wxv$6Ep>uzsS|8VonYex z+g2yoIKj5r^Eg4yu;lR=PKe=z7*2@cgcweU;e;4Yh~b17PKe=z7*2@cgcweU;e;4Y zh~WgepOdYq6Jj_ah7)2qA%+uTI3b1;VmKj&6Jj_ah7)2qA%+uTI3b1;VmKj&6Jj_a zh7)2qA%+uTI3b1;VmKj&6Jj_ah7)2&oe;wbF`OV*2;}I;a6$|x#Bf3kC&X|<3@5~J zLJTLwa6$|x#Bf3kC&X|<3@5~JLJTLwa6$|x#Bf3kC&X|<3@5~JLJTLwa6$|x#Bf3k zC&X|<3@5~JLJTLwa6$|x#Bf3kC&X|<3@6C_nR0aEI3bP`;y59W6XG}_juYZIA&wK` zI6=SaP-ASB~#0g29ki-c|oRGu`Nt}?x2}zug#0g29ki-c|oRGu`Nt}>`2}zug z#0g29ki-c|oRGu`Nt}?v2`QYA!U-vykirQmoRGo^DV&hP2`QYA!U-vykirQmoRGo^ zDV&hP2`QYA!U-vykirQmoRGo^DV&hP2`QYA!U-vykirQmoRGo^DV&hP2`QYA!U-vy zkirQmoRGo^DV&hP2`QYA!U-vykirQmoRGo^DV&hP2`QW)p907^LkcIPa6$?vq;NtC zC!}yf3MZs+LJB9Oa6$?vq;NtCC!}yf3MZs+LJB9Oa6$?vq;NtCC!}yf3MZs+LJB9O za6$?vq;NtCC!}yf3MZs+LJB9Oa6$?vq;NtSC!}#g8YjqaY6w-*I3bM_i zAV)TX6EZj76EZjPRQYe98SpLgd9%D z;e;Gc$l-(>PRQYe98SpLgd9$gyONk$uPo(oLJlY7a6%3zPRQYe98SpLgd9%D;e;Gc$l-(>PRQYe98SpLgd9%D;e;Gc$l-(>PRQYe z98SpLgd9%D;e;Gc$l-(>PRQYe98SpLgd9%D;e;Gc$l-)Fa<9iexqIba^i$}4=>77E z%o@2HM1T5O^vlP-E$d%FkD^~gzm7hHegl0N{U-V?^bzzss@6L640Ju(jpos<=y~X6 zXc^rv8DC?Kp|_wlw2i(LeXXjU)bVx-)p^#^<63%LD|goHlSj12wRE?Z?$%m5|61l> zYw7%JEuDX@rSq?~bpExL&VQ2lL^VJ|G(vUcN!BOj9l^;m=3&tQ4bcc~t1{*k#+<^K zQ^ao%%RM|g<`nUpC}U1#%&Ckyl`*F>=2XU<%9zs_a~fk#W6WucIgK%=G3Io}oX(ij z8FM;gPG`*Nj9JH+b&OfZn01U<$C!1DIm1|z+%t@g#?UyLK$B<+O{01}^9++kbLbj$ zEjo4VLHVhJx~PZx=#uP*GbFRBHMEX4&?dT!uAnWR6`&y+p>0*GqFc1?kz;g5rx)v9 z);}$}p1#)8*LtIUtvA}&dZT@>FqkXM6+ShuceXXaj^+x+zZ?v!VM*CVXG<#4~ z`&utFQ`NrK3(Zuuul4k`p1#%#i}VrgYrU{YRr^|Rw6FDYT=ZGm*LpcFs@m6jIWD5~ zwVuA#)7N_XT5oAzUG&vOUtRRoMPFU?)kR-j^wmXQUG&vOUtRRoMPFU?)kR-j^wmXQ zUG&vOUtRRoMPFU?)kR-j^wmXQUG&vOUtRRoMPFU?)kR-j^wmXQUG&vOUtRRoMPJ?Y z)lFaB^wmvY-SpK>U)}W8O<&#g)lFaB^wmvY-SpK>U)}W8O<&#g)lFaB^wmvY-SpK> zU)}W8O<&#g)lFaB^wmvY-SpK>U)}W8O<&#gC3iUsE4t~co4z(cstu581EksjsWw2W z4UlRBq}l+fHdsok4UlRBq}l+fHbAP4%(ju)HZt2rX4}YY8<}k*vu$Lyjm)-@*)}rU zMrPZ{Y@3*E6SHk%woS~oiP<(W+a_k)#B7_GZ4 zwlkUSOlCWi+0JCPGnws7W;>JF&SbXD%(j`?HZ$91X4}kco0)Ahvu$R!&CIr$*)}uV zW@g*WY-cgsS3$txuwk^!Ih1s?++ZJZq!facZZ40w)VYV&IwuRZY zFxysU+sbTPnQbexZDqEt%(j);wldpRX4}eaTbXSuvu$OzZIa5nuqwMsH%&4sE;nm9Rl0T>m>`@%p1@*qHjXqjJ^fE z3wQ>GcS3D?c zqcJp&CeS3BLgg+(8JR(|XbxS2u0>n&3VXKDRW(E-w5=+1l^NjbcDB2n?QWOXhzI4K zXWj00d5uuj?QWOX2vyzgcDB1+UL$l}x4T_lBUE*}+lA_%7uD@^l>bkDm-OhHm zvt9YSFfx7z+ugx-cd%W#LyX6DyF1wK4z|04?e1W^JJ{|Hw!4Gv?qIt+*zOLtyMyiS zV7oim?hdxQlkM(gyF1zLPPV&~?e3)Coosg}+ug}_ce34`Y z6R76peAz#$X*7do(Hy!4U5hGD&X?_~>U){<;mP^3-5yz2o}4e+6_tG@bIQItD!-4Q z`)U`}?xNaVRJ)66cTw#ws?~e{hvnWV-K!Tc@&ZO)z{m?2c>yCYV&p}Pyoiw(G4dit zUc|_Y7`dB~yBWEgk-HhWn~}R2xtoy}GxB0aUd+gg8F?`yFJ|P$jJ$-AmoV}YMqa|m zOBi_xBQIg(a~b(uMn0F3&t>Fu8L7YTFf70Ipgy^jk(V;^Qbu0N$V(Y{DI+gsmSUslQDzEWeAUM}H4Te~+X?*Y)V{k#wl)(ci<--^0=0Bk9mb^yu%A zbg1gl-y`Wz)uX>hwyUZ~e~)ZeRgeB2*{-hZ(ci<--^0=0OAULeVJ|i8rG~xKu$LP4 zQo~+q*h>w2sbMcQ?4^di)UcNt_EN)MYS>E+d#PbBHSDE^z0|Om8VX!-DsaWAz!j$g zSDXr5aVl`dslXMd0#}?0TyZLJ#Yyfl6vh^~;#A;@Q-Lc^1+F+1xZ+gcic^6rP6e(w z6}aM5;EGd$YmWu4I2FtbnC%wyR`fRXc60*O`<)70^C@s%Q80R5Q80R5Q80R5Q80R5 zQ80R5Q80R5Q80R5Q80R5Q80R5Q80R5A-|1=>Ul-M=y^rK=y^rK=y^rK=y^rK=y^rK z=y^rK=y^rKd>Ga9ih|Meih|Meih|MeiULQWz)>i06bc-L0uC&26bc-L0_PP4xo)G+ z(({Uf(esLe(esLe(esLe(esLe(esLe(esLe(esLe(esLe(esLeT-}m=B3HL`U1?U3 zt6Qq-=Ym|_Qq_0I1-ZJVs_*&>a&=2p-yIh?GbwOpQn2*Qq+scpNx{-HlY*sZCIw6H zUMpBVte?ZWo<$TaJy$7MdahF7I#@x@Rdl3YQ7l*-O*t>sb$vxH$a$&iYtbLd8B4+X z5&C2FC+K77Ptjk)#yw~I!-T{PMX-Y(+pBHk|I z?IPYT;_V{dF5>MX-Y(+pBHk|I?IPYT;_V{dF5>MX-Y(+pBHk|I?IPYT;_V{dF5>MX z-Y(+pBHk|I?IPYT;_V{dF5>MX-Y(+pBHk|I?V_dLE?VmCBHk|I?IPYT;_V{dF5>MX z-Y(+pBHk|I?V_dLF5>N?rQR-D>g}SX-Y#0|?V_dLF5>MX-Y(+pBHk|I?IPYT;_V{d zF5+$dZPFfjJ(2rKMde;XQMr#yRPG@XmHS6T<=z2N`P^7kJ~I@R&x=ImvjWjI=vwq- z>35$bMfFtlH1u>--?{9Qq^NF3cc42_Wx_s5ifSL)j}D-N=ny)Lj-aEcUN_z+Nm0EX zokXW(|Ll`1KdLV3p+35F?9b%!s_eaea^*+0jyBLH+LCuY`{aC8HAEw{jlP(zJcj-h z{Tcdm^cSjpYOqhd_jy^@E35m&d#ZW`Qhu`n)%#5L@u|T+J~i0Krw04@)L@^*z7luo z7=5kWC+^bqUgodpo)=%~w%B{Tm)|G8(ns_v_deds?-O6?x?bhp$7cuoaLzvQi9BMn z55*z6&OQ`}9F^Y%RfqKAkX{_pi$i*GNG}fQ#UZ^oq!)+u;*ee((u+fS<$Ao%qYmlC zA-y=HS6Hf#oQ|qPdT~fE4(Sz^>LcoqUSX-K_SlOX2Sx zsj7C@i$i*GNUv~GA5n+&;*ee((ks^n^$~SQuTh8e;*ee((u+fS<=Wr_^0+#rSKiUQ zL{uHpi$i+l9gVK5Lwbe7x)pUuuY9hgst)Ou&y`fwA-y=H7l-uXkX{_pi$i*GNUzXI zwuM7_aY!!?>BS+vIHVVc^x}|S9MX$JdM$NGFAnL&A-y=H7l-uXkX{_pi$i*GNG}fQ z#UZ^oq!)+u;*ee((u+e%IHZI_N;ss1LrOTLghNU=q=Z9CIHZI_N;ss1LrOTLghNU= zq=Z9CIHZI_O7d!ZRDMTU8B)R_B^*-1AtfAA!XYIbQo(h8Hbc{NEwHeaYz}5lyOKIhm>(h8Hbc{NEwHeaYz}5lyOKIhm>(h z8Hbc{NEwHeaYz}5lyOKIhm>(h8Hbc{NEwHeaYz}5lyOKIhm>(h8Hbc{NEwHeaYz}5 zlyOKIhm>(h8Hbc{NEwHeaYz}5lyOKIhm>(h8Hbc{NEwHeaYz}5lyOKIhm>(h8Hbc{ zNEwHeaYz}5lyOKIhm>(h8Hbc{NEwI7UnP;;m2pTJhm>(h8Hbc{NEwHeaYz}5lyOKI zhm>(h8Hbc{NEwGza7YD*RB%WIhg5J#1&35{NCk&fa7YD*RB%WIhg5J#1&35{NCk&f za7YD*RB%WIhg5J#1&35{h_F(6tl*Fe4yoXf3J$5@kO~f|;E)Oqso;I*PyCb z`7Y;O!{zd>LD%(~%oU8hf{|A+@(M;?!N@BZc?Bb{WaO2MypoYuGV)4BUdhNS8F>{W zuVUm?jJ%4GS26M`Mqb6ps~LGUBd=!U)r`EFkykVFYDQke$ZHsR4I{5%)h-%gAdPc`YNaW#qMtyq1yst>Z7kd`s$;vKKkmTuRi+fqpv>t>Z7kd`s$;vKKkmTuRh7+gYvgrw68w;>Z7kd z`s$;vKKkmTuRi+fqpv>t>Z7kd`s$;vKKkmTuRi+fqpv>t>Z33DEB4ZLKYjJnS3iCA z(^o%z_0v~Bef85CVzShz96!fF1|vaey8N=y8A^ z2k3Et9tY@gfF1|vaey8N=y8A^2k3Et9tY@gfF1|vaey8N=y8A^2k3Et9tY@gfF1|v zaey8N=y8A^2k3Et9tY@gfF1|vaey8N=y8A^2kCK;9tY`hkRAu=agZJd>2Z)A2kCK; z9tY`hkRAu=agZJd>2Z)A2kCK;9tY`hkRAu=agZJd>2Z)A2kCK;9tY`hkRAu=agZJd z>2Z)A2kCK;9tY`hkRAu=agZK|=y8Z1hv;#L9*5|0h#rUNaflv==y8Z1hv;#L9_3$` z5YG?M;}AU#(c=(34$Jr2|3Fg*^_<1jrA)8jBb4%6c>Jr2|3Fg*^_ z<1jrA)8jBb4%6c>Jr2|3Fg*^_<1jrA)8jBb4%6c>Jr2|3Fg*^_<1jrA)8jBb4%6c> zJr2|3Fg=dY;|M*D(BlX_j?m)>J&w@h2tAI_;|M*D(BlX_j?m)>J&w@h2tAI_;|M*D z(BlX_j?m)>J&w@h2tAI_;|M*D(BlX_j?m)>J&w@h2tAI_;|M*D(BlX_j?m)>J<8t= zlp{DwkE8TBN{^%TI7*MB^f*e7qx3jRkE8TBN{^%TI7*MB^f*e7qx3jRkE8TBN{^%T zI7*MB^f*e7qx3jRkE8TBN{^%TI7*MB^f*e7qx3jRkE8TBN{^%TI7*LW^f*S3WAr#i zk7M*WMvr6kI7W|S^f*S3WAr#ik7M*WMvr6kI7W|S^f*S3WAr#ik7M*WMvr6kI7W|S z^f*S3WAr#ik7M*WMvr6kI7W|S^f*S3WAr#ik7M*WMvvoi1^e6bcgEg;z7c&B`eyVk z=w0Yr(YK**N8f?I6MZ-O9`wEF`_T8JA3#5dehB?A`VsV_=*Q5zQT?25T+YW-^>ey$ zIUiHiyK2Yfd`#E%bGmW4g01!IUA5zK1zS~L6UXHWwyNG$J1$qSRrRjgak+x6s(01O zUspr*uG(?#svVc>&$_O6)sD;cXVpBach!ztdN=I2rFYei%hhI8y;e4E>9wzMORoox za~?j>)3DCvB$1sk6kCOkgZGQ_lfGAD%VNns(Po&byB&i-l=k(RIYlD z&Mf{>y%+to=mEMoKoVAT^x{fsA?AnBps^S#Q{l&s&;XJ zE)LMe0lGLq7YFF#09_oQivx6VfG!Tu#R0lFKo8Pv+XoyB=Tl5C0r$_W&^i$}4=x5N+s!AoF7u8SGZjee;_0zN)q!LyAH0=hd zKr{o$W?uyOG&$WVRcb?M7z1k=br!wwsvkCT6>d*=}OC zo0#n;X1j^mZeq5ZnC&KJyNTIuVz!%@?PmE+fp5!S8=OWDp@-2KbQYaM=g|f92)c;2 z&;Sk52yLU<`^{8)Gu7TqwKr4k%~X3c)!t0CH&gA+RC_bk-b}SOQ?2|}TAA|&LR3{3 z^-v$xN?stxR8=c^fe=zvE4hW|-okTl;kma6jrDPT?k(a6RekO)Jogr!dkfFKmFM2d zb8qFjxANRudG4(|_g0>JE6=@^=ibV5Z{xYQ@!Z>Z?rl8xHlBMM&%KT3-o|rpvq z6Fhf<=T7ik`Pa$Bx0AdMPVzc9$?M=GuY;4k4o>nqILYhaB(H;$ybezCIylMe;3Thu zlTyipGMm2Vm462T)%S*zQi-a*=bhwraFW--NnQshc^#bObx{7YK4bLm?n&udpQZ14 zC#7;#ea|~7m5cHUILRyEB(H#zyaG=03OFTw-6en7Sns!-lD<^+e#jc!MGpgYkXbkDIn<+*#& z{XEi#_M-#nAUcE&qa)}jI);v;*Q1l@l>GgtDY^es)kQtjN2`*`Df!#hs`6L7MCI>@ zi8j#}Gs8=S(o^Q8=*!TTqpv_;iM|SbHF^j78uU)|wdm{6*R#jofW8rZ6Z&TKE$Ch7 zThX_nZ%5yOz7u^n`X2PX==;$3qaQ#&h<*tDF!~Ynqv*%byHULYHYIdY)hl3ALMPSx zQN02-C5%%2yj(w-GXH>n0sTkxi|B*sm(VXW^H*0-|0jrFscVF&B_`R0_RSDvS==b-1H z=c4EFtjo|6&nmO7_w-K56<0~LyeeruW9Tht4Q-?3LSB`0%suEQ&`+ZGqMt^8Og(x> z!IYd6%KUOpsH%7EPRYFlx=xDa3avguiscIJgOXn5l>@IFc;&z=2VObw%7Ir7ymH`` z1Fsx-<-jWkUODi}fmaT^a^xDmZbf&-zuIH;NuN=9aud2L~e}4(pP93?Pud1Coay?&FdF9Ces>&%^+cD+gXV@XCQ#4!m;YTD{JoymH``W0Y5pQC>MldF2@8m1C4wj!|AYMtS8J<&|TU zSB}x6=@{jeBkz)Q&nvGSqr7tDJ|9)(l_U50s4A}d{mWJj@;*?s=RXK zJ|9)(l_U50s4A}^2#yFE5|6W9HYE)jPlAc z$}7hxuN@IFc;&z=2VObw%7Ir7 zymI8znWOS7<&^`k9C+oxD+gXV@>hHHr^+h_UOATX%CVGJ4!m;Ul>@IFc^4`B!BSp1 zmh#Gxca-{w^2)K4SB|B;axCSQV=1p3OL^tMD+gXVmh#H6lvj?WlyKyIsH*bHk$0oI zuDo*Kl>@IFc;#5iD@V?vRh3tcoJFhRaCqfd$}30CkyMpej+`T@Dz6+qKXTxe1Fsx- z<-jWkUODi}fmaT^a^aN=uUvTL!YdbEx$w$`S1!DA;gt)oTzKWeD;Hk5@XCc(F1&K# zl?$(2c;&(?7hbvW%7s@hymH}{3$I*w<-#i$Ub*nfg;y@Ta^aN=uUvTL%IA*{3Xham zF1&K#mHx{lyX6t(mHwMms>&<<_v=)ZSNbn}sp|Qa3$OHFCDC=|l?$(2c;&(?7hbvW z%7s@hymH}{3$I*w<-#i$Ub*nfg;y@Ta^aN=uUvTL!YdbEx$w$`S1!DA;gt)oTzKWe zD;Hk5@XCc(F1&K#l?$(2c;&(?7hbvW%7s@hymH}{3$I*w<-#i$Ub*nfg;y@Ta^aN= zuUvTL!YdbEx$w$`S1!DA;gt)oTzKWeD;Hk5@XCc(F1&K#l?$(2c;&(?7hbvW%7s@h zymH}{3$I*w<-#i$Ub*nfg;y@Ta^aN=uUvTL!YdbEx$w$`S1!DA;gt)oTzKWeD;Hk5 z@XCc(F1&K#l?$(2c;&(?7hbvW%7s@hymH}{3$I*w<-#i$Ub*nfg;y@Ta^aN=uUvTL z!YdbEx$w$`S1!DA;gt)oTzKWeD;Hk5@XCc(F1&K#l?$(2c;&(?7hbvW%7s@hymH}{ z3$I*w<-#i$Ub*nfg;y@Ta^aN=uUvTL!YdbEx$w$`S023b;FSljJb2~7D-T|I@XCW% z9=!74l?Sgpc;&$>4_ z4_4_4_4_4_^83%7<4z zyz=3d53hW9<-;oY(uIsQjCidgbt-@Jdy$93B*2sp^%(gTgCSeJ6fUc%`aW4i5^iRQ1Z?LE)9E ze%5(V+^(vh5g!z{tLpD^9u&9hx_(A{Q1*k2mtKy_zs09DOjE-&HB3{(G&M|9!!$Ka zQ^PbhOjE-&HB3{(G&M|9!!$KaQ^PbhOjE-&HB3{(G&M|9!y#%oL=A_i;Se<(qJ~4% zaEKZXQNtl>I7AJHsNoPb9HNFp)NqIz4pGA)YB)pLdK!(nPTObv&r;V?BEriR1RaF`knQ^R3uI7|&Q z)G$L0Gt@9c4Kvg*Lk%<3FhdP9)G$L0Gt@9c4Kvg*Lk%<3FhdP9)G$L0Gt@9c4Kvg* zLk+XkFiQ=y)G$j8v(zw44YSlROAWKsApZiH?5kO7n5BkUYM7;lS!$T2hFNNurG{B* zn5BkUYM7;lIck`rhB<1OqlP(Zn4^X{YM7&jIck`rhB<1OqlP(Zn4^X{YM7&jIck`r zhB<1OqlP(Zn4^YyYM7^nd1{!ahIwk3r-pfIn5Tw$YM7^nd1{!ahIwk3r-pfIn5Tw$ zYM7^nd1{!ahIwk3r-lV;SfGXlYFMC#1!`EJh6QR^poRr%SfGXlYFMC#1!`EJh6QR^ zpoRr%SfGXlYFMC#1!`EJh9lH)gc^=e!x3sYLJdc#;RrPxp@t*WaD*C;P{R>wI6@6a zsNo1T9HE9I)Nq6vj!?r9YB)j-N2p`p|xK03Ae!&|!209Yx2` zarAn05`8hMpBF62`QZbiFGF9Bz5;zE`YQC*=pE>5&^yuBqOU_=FL%x?nK!WhM)XbS zo6)zRccE`Z--f;&eFyqZ^xf!t(D$P6L*I{n0R15PA@sxON6?R=A4Bg(_49%yae}IT zzPTh$P}R>jm&6IG`gy^UoF5(){Ri|5=s%)gL?1-IgnpTszk(h`zlMGteF*&q`Y`%U z^jqj7=%dW@9oGMe^?yeH1^rj_yZrQf==aedpg%-^q$+1zs_W1*(Di6Hx>@IuGcMIU zk8ELmE9=`>Kb!UQ(96&gT1G4CWI3A>56jt<9A7z`Qq{YsmgHmRn22n-s`Dq9;@beK%DXvLO>0%&&8ccytMYD6 zRnuCPcXO(m)~dXlQ`NLq<=vdBrnM^X=2SJURe3k3s%fo~)+%YOlGZ9|t&-L%X|2k8 zG##%Qtjc>dRn1^k-lM5%2CMQOO;s~kmG@|>n!&2PM^n}GRpnjSQPJd%~aJooAK)Bs=PN*)ihP*y@_f?eMp+BlBUngy52ii zl{Bg9y>nGbld9f3SCurW>Sya!a#STpRdQ4%M^$oEB}Y|qR3%4Mc@H9TR(BS&&|mFH@XYUHTK>spN*)yPqe9M#BCjU3g;QH>nc$We_P)yPqe9M#BC zjU3g;QH>nc$We_P)yPqe9M#BCjU3g;QH>nc)yPqe9M#BCjU3g;QH>nc$We_P)yPqe9M#BCjU3g;QH>nc$We_P)yPqe9M#BC zjU3g;QH>nc$We_P)yPqe9M#BCjU3g;QH>nc$We_P)yPqe9M#BCjU3g;QH>nc$We_P z)yPqe9M#BCjU3hFYQ|C7dzzz~T+L9`9M#BCjU3g;QH>nc$We_P)yPqe9Mvq%QH>nc z$We_P)yPqe9M#BCjU3g;QH>nc$We_P)yPqe9M#BCjU3g;QH>nc$We_P)yPqe9M#BC zjU3gs*|HSIjWPRIytJ7qdGaNlOy@J zB_%0!a#SZrb#hcENAh_pKh+%7$x)pg)yYwv9M#EDogCH4QJoys$x)pg)yYwv9M#ED zogCH4QJoys$x)pg)yYwv9M#EDogCH4QJoys$x)pg)yYwv9M#EDogCH4QJoys$x)pg z)yYwv9M#EDogCH4QJoys$x)pg)yYwv9M#EDogCH4QJoys$x)pg)yYwv9M#EDogCH4 zQJoys$x)pg)yYwv9M#EDogCH4QJoys$x)pg)yYwv9M#EDogCH4QJoys$x)pg)yYwv z9M#EDogCH4QJoys$x)pg)yYwv9M#EDogCH4QJoys$x)pg)yYwv9M#EDogCH4QJoys z$x)pg)yYwv9M#EDogCH4QJoys$x)pg)yYwv9M#EDogCH4QJoys$x)pg)yYwV95u*M zgB&%;QG*;c$WenFHONte95u*MgB&%;QG*=Gzr-wAXpo}@Ickuj203bwqXs!@kfR1U zYLFwj>as6mbz>as6mbz>as6mbz>as6mbz>as6mbz>as6mbz>as6mbz>a zs6mbz>as6mbz>as6mbz>as6mbz>as6mbz>as6mbz z>as6mbz>as7a2Rt&AhGRJzEJ+@4b%eG!&Sf@s{j8RlWDJC3{a*?-g&!-cx;v zTp4Z&@l;=iz8rl8`bzXw=&R8?(AS`MqOV0?hwA;_Eg_z&-tXNK;;HKW-Yp@Xs^0J2 z65^@q{oXAho~qvO-4f!d>iym=A)cz<@7)sOsp|dSEg_z&-tXNK;;HKW-Yp@Xs^0J2 z65^@q{oXAc(!wDv9MZxeEgaIqAuSxz;`99$pYON$e80u#`z=1-Z}Itli_iC4!bY80 z@AqyA8&&mw@0PGpRqyw12^&@Qe(#pBQC08vZV4Mz^?vV`5K`Cme(x5a@3;7Tzs2YK zEg|RK^0?mb-4b%D>iym=A*ZU|@7?0B>$LdmIxYUXPK&>;)8en|wB*x&9rHN)OY~Rh zzoSo}|AGD|`fKzz=rL73{cl!c<0R@J+> zTYPHY;#2#UkX#?pySQ7zb6wxYy57azvh*(swyYhj>%H79>l{??+-?c&RrRk6wuJe* zuJ>=Zg!z&+Nw@e}n6LBb@0+xQ`Ko&Vc1xJAs`qcVg!!ua`?)Ra6KwsHtlx`%8r8pV z+2Ze8w&b&W-JX?{yyBV-+r?&ZbnAErFa(sVZ9nIh#^dwgj*xfGq)R31CYATLRb; zz?J~E1h6H5Edgu^U`qg70@xD3mH@T{uqA*k0c;6iO8{E}*b=~&0Ja3MC4emfYzbgX z09yjs62O)Kwgj*xfGq)R31CYATLRb;z?J~E1h6H5Edgu^U`qg70@xD3mH@T{uqA*k z0c;6iO8{E}*b=~&0Ja3MC4emfYzbgX09yjs62O)Kwgj*xfGq)R3FOYAyXCkjTLQVW zNLASq$el&1%9cRxEK*gr1afDQC~OH}O8{E}*b=~&0Ja3MC4emfYzbgX09yjs62O)K zwgj*xfGq)R3FM4Xx20?eU`t>rTLRb;$eE-#3bq8WC4emfYzbgX09yjs62O)Kwgj*x zfGq)R31CYATLRb;$XTV%uWSkAtWs6k62O)Kwgj*xfGq)R31CYATLRb;z?J~E1h6H5 zEdgu^VM_>GLf8_*mJqgtuqA{oA#4d@O9)#+*b>5)5VnM{C4?;@YzbjY2wOtf62g`c zwuG=Hge@U#31LeJTSC|p!j=%Wgs>%qEg@_PVM_>GLf8_*mJqgtuqA{oA#4d@O9)#+ z*b>5)5VnM{C4?;@YzbjY2wOtf62g`cwuG=Hge@U#31LeJTSC|p!j=%Wgs>%qEg@_P zVM_>GLf8_*mJqgtuqA{oA#4d@O9)#+*b>5)5VnM{C4?;@YzbjY2wOtf62g`cwuG=H zge@U#31LeJTSC|p!j=%Wgs>%qEg@_PVM_>GLf8_*mJqgtuqA{oA#4d@O9)#+*b>5) z5VnM{C4?;@YzbjY2wOtf62g`cwuG=Hge@U#31LeJTSC|p!j=%Wgs>%qEg@_PVM_>G zLf8_*mJqgtuqA{oA#4d@O9)#+*b>5)5VnM{C4?;@YzbjY2wOtf62g`cwuG=Hge@U# z31LeJTSC|p!j=%Wgs>%qEg@_PVM_>GLf8_*mJqgtuqA{oA#4d@O9)#+*b>5)5VnM{ zC4?;@YzbjY2wOtf62g`cwuG=Hge@U#31LeJTO!yJ!IlWNM6e}-EfH*qU`qsBBG?ka zmI$^)uqA>m5p0QIO9WdY*b>2(2)0D9C4wyxY>8k?1Y08562X=TwnVTcf-MnjiC{|v zTO!yJ!IlWNM6e}-EfH*qU`qsBBG?kamI$^)uqA>m5p0QIO9WdY*b>2(2)0D9C4wyx zY>8k?1Y08562X=TwnVTcf-MnjiC{|vTO!yJ!IlWNM6e}-EfH*qU`qsBBG?kamI$^) zuqA>m5p0QIO9WdY*b>2(2)0D9C4wyxY>8k?1Y08562X=TwnVTcf-MnjiC{|vTO!yJ z!IlWNM6e}-EfH*qU`qsBBG?kamI$^)uqA>m5p0QIO9WdY*b>2(2)0D9C4wyxY>8k? z1Y08562X=TwnVTcf-MnjiC{|vTO!yJ!IlWNM6e}-EfH*qU`qsBBG?kamI$^)uqA>m z5p0QIO9WdY*b>2(2)0D9C4wyxY>8k?1Y08562X=TwnVTcf-MnjiC{|vTO!yJ!IlWN zM6e}-EfH*qU`qsBBG?kamI$^)uqA>m5p0QIO9WdY*b>2(2)0D9C4wyxY>8k?1Y085 z62X=>Y-z)mHf(9bmNsl@! zMnu4{2$-_Cpmmp^mH+emPC!&_eSP15=5wF9x%bR-e&?L${LZ=eoO>?5r3Bwnf^R9o zx0K*pO7JZu_?8lUO9{TE1m9AEZz;jIl;B%R@GT|ymJ)nR3BIKS-%^5aDZ#gt;9E-Y zEhYGt5`0SuzNG};Qi5+O!MBv)TT1XPCHR&Sd`k(wr3Bwnf^R9ox0K*pO7JZu_?8lU zO9{TE1m9AEZz;jIl;B%R@GT|ymJ)o+Ky)||9S%f?1JU6?>9CtO5FHLghYu3+K|(%A z$Oj4eAR!+lCD}A136( zgnXEg4-@iXLOx8$N8~N5y+`CN4ed#gN8~LH?MaYFJ%ik%;7H+MEE$X?gSBc_m5!JtgSBdwp;WH6Qt#*)F#EE%k~q8pkegPmD21WSfs$q+0V zf+a(+WC)fF!IB|ZG6YM8V95|H8G|Ff18{CBv{}7?upf zl3`df3`>S#$uKM#h9$$WWEhqV$CBY#G8{{WW65wV8IC2xv1B-w49Ak;STY<-hGWTa zEE$d^!?9#ImJG*|;aD;pONL{~a4Z>)CBv~~1eT1zk`Y)k0!v0<$p|bNfh8lbWCWIs zz>*PIG6G9RV95w98G$7uuw(?5jKGo+STX`jMqtSZEE$0%Be7&8mW;%bkytVkOGaYJ zNGutNB_pw9B$kZCl95<45=%y6$w(|2i6tYkWF(f1#FCL%G7?KhV#!D>8HFXIuw)dL zjKY#pSTYJrMq$Y)EE$C*qp)NYmW;xZQCKnxOGaVIC@dL;C8Mxp6qby_l2KSP3QI;| ziB`Om2OEtgqp@T(mW;-d(O5DXOGabKXe=3xC8M!KBZ~51qp@T(mW;-d(O5DXOGabK zXe=3xC8M!qG?t9UlE-DqO7C%5Vt74x19&57KK5}ec^pd~$CAgfCd1 z@Bz@C3m60c82HD)KSn8CspG~!hLnzhe+>L%;2#7382HD)KL-9WN~v)g{}`pT%zHwu zYK_nb17HvgfmvWS7zT5|2$&1zf%%~2#uHfk1lB%*wNGH}6SB5SXRXC~0&AbZ+9$B~ z39NlW>ol4@_k#E7j`0(++;9N+09XRPPnZwD55bSXj}6tkGdv4C8(ajYz%*#9{w9^f z)xsk1dhiDDM$k$yDVr_iUEtl|Jzz0tHYc$;Np2^}?IgLKB)5~~_E_Q?OI%}>Kh@q? z<&UAoHI~vGOI%}#Ypn98M#n9#vC1Dqi)$=#jU}$J#5I<<#uC?9;u=R>~#5Iw)CKA^~ z;+jZY6NzggaZMzyiNrOLxF!g!;$Q+y3Mb1aR0(ap{mJTS8`}FyCab4y zXzweTte&=^y{}}ldfJBezLLr6X&c)6N+zqPZD?z^PF5Zo+S;v?m4}8mg4Uy+tUNTd z_mxam9va>Q+WSf-D-R8A?bgZ48T+lR-8xx$XlQGO((AD#5J9`W)Rm5;+jER zGl**jam^sE8N@Y%xMmR74C0zWTr=RG0sjp6XTU!L{+aO4gnuUdGvS{J|4jI2!ao!K znefkqeVKH;hzovZ1`uxKO6oz@XvvN4*YZA zp9B9K_~*bs2mU$m&w+mq{Bz)+1OFWO=fFP){<-kag?}#mbK##0|6KUz!ao=Ox$w`0 ze=huU;hzitT=?h0KNtRa@Xv#P9{ls*p9lXu_~*et5B_=Z&x3y+{PWnY6_|0M58-Pf%W zb^&eG!6!8n*w9wRc~Uch4Q+S zPsx%h;r-wM@Bz@C%lj*5|H|3F%1%3CXa6cYtGuT<`!r{t=Iqm)eVVh+aP}F_KEv5( zIQtA|HK$1on&|)<^8(H;;Ow)?;VSQ0<*=dM33*mIY-o2vo>dN)3C*)TOAbFv4nIo{ zKT8fjEB*yKYj;APRqTd#C*)c2FYp$^zYzX~@GpdaA^Z#BUkLv~_!q*z5dMYmFNA*~ z{0re<2>(L(pM(E7_@9ISIryK0|2g=dga0}BpM(E7_@9ISIryK0|2g=dga0}B7tsbS zq77Q4kTu>Sg*3F*aFIe9THj+4ZO|gxphdJni)e!u(FQG|4O&DSw1_rn5pB>S+Mq?W zL5paE7SRSRq77O^8?=ZvXfc*7#*)QYvKUJiW65GHS&Su%v1BopEXI<>Sh5&P7Gud` zELn^ti?L)emMq4S#aOZ!OBQ3vVk}vVCC}@cqrLaMO4x8A_#C(hTnsJ+)8I1j@8FBz zDsVOU61WCj3)UFAhF}x0DOdXlUz>E@54)C9I3Jgwk0;=`7LAN;|9hbVAL1 z5o(NDsL>>EiR-0%r%T-V>K!dnZg&!1!jV24xr+U(*^hCyKS%E5NHIt5=g0#biF4#p zjtt^Rf+Hh2GMXbvj_lWw6nT{*uTtbyio8mZS1Ix;MP8*m%d3>uurai}N@@E14GNJ6nT{*uTtbyio8mZS1Ix;MP8-Is}y;aBCk^9Rf@by zkyk15Dn(wUoaI%@Sze`_uS&_QQu3;lyecKHO3ABI@~V`)DkZN<$*WTG zs+7DcC9g`!t5Wi+l)Ne>uS&_QQu3;lyecKHO3ABI@~V`)DkZN<$*WTGs+7DcC9g`! zt5Wi+l)Ne>uS&_QQu3;lyecKHO3ABI@~V`)DkZN<$*WTGs+7DcC9g`!t1|McjJzr% zugb`)GV-d7yecEF%E+rS@~VuyDkHDT$g48)s*JoUBd^NHE3N$?MU|0PW#m;Ec~wSU zm62CvnrxUX_toW#m;Ec~wSUm62CvQ`BM3e z7T!|TBtyHxT8bxMiYH%+Ctr#uUy3JRiYH%+Cts>`wfC0d$(Q2Em*UBn;>nlFp7vs~ z)gj6$wQ@?WoKh>N)XFKfa!Re7QY)v_$|<#SO0AqyE2q@TDYbG+t(;OTr_{N)XFKfa&n`b+$g8i%29YZrB+UY3rM8Sx zTSloZqtupBYRf3KWt7@7N^KdXwv19+MyV~M)Rs|d%P6&Fl-e>%Z5gGuj8dzh)G8>o z3QDblQmdfUDk!xIO09xYtDw{>D76Yot%6dkpwucTwF*kDf>NuX)G8>o3QDblQmdfU zDk!xIa-)LWsG!s;D76Yot%6dkpwucTwF*kDf>NuX)G8>o3QDblQmdfUDk!xIO09xY ztDw{>D76Yot%6dkpwucTwF*kDf>NuX)G8>o<=D9#JC{>x%PF@`EvM9$Q)%6E4B=(hr zUrG3tgkMScm4shO_`j=PUG4o{{c1zIANzOps}1db?2DXzk+Uyy_C?OV$k|n#UB%f| zoL$A)Rh(UoC9APyHI}T#lGRwU8cSAV$!aWliSREG{w2b{MEI8o{}SO}BK%8)uk`B4 zr&W5#fd%04U}Mnwla-$JCo4VcPgZ)?pRAN`HEapC0$YP^z!Sie!4BY$z>eUL!BfDW zfIkB}fj z;FaK2;BP^De^I42LtAUVQa;4c)`hK<54lA6C-5flX7Cp9R`53PcCa7#XRtqL?R6zS zq!J%ei4Up7hg9N2Dpj%;*S(;%*OmB?N_3bcwVP_4D2T2sXpXcbqWRa}8qaRpi>Z?HgT?Fza|-oVhV zpsVB!7I-hi|1$h9!~Zh;FT?*b{4c}*GW;*Y|1$h9!~Zh;FT?*b{4c}*GW_e{UkCp> z_}9U|4*qrUuY-Rb{OjOf2md)~Gy|9be>!@nN>_3*EUe?9!`;a?B`didAFzaIYe z@UMq|J^XrWknV)&9XO!fA$b-4SK)sZ{#W6D75-P@e--{$;n$O1Dn~u(1zP#O3jeF{ zZ-9RT{2Q=;1N)gU2hb> zq20UQDE=y;>2o9e8{yvw|3>&Xihq*M+C8+5;y1K=XdA^p$=d|~CipkOzX|?L@Na^D z6a1Ut-vs|A_&3473I0v+Z-Rdl{F~s{JEml(-qQk_{nhYS!>@JVWWQF@lKol-2()|e z)$mutuc!26r=IKq&HifmtKr`a|7Q3%WB+FOH^aXf{>|`jhJQ2mZ-##}{F~w54F6{A z-wgj|__x5n1^zAYZ-IXc{9EAP0{<5Hx4^#z{w?rtfqx79Tj1XU{}%YS!oL;%t?+M! ze=Gc3;ol1XR`|EVzZL$i@Nb2GEBssG-wOX$__x8o4gPKLZ-aju{M+E)2LCqrx52*+ z{%!DYgMSUx)v7_+N)#Yxt>rwceP@RBMBQR=!%71+=l1*WrI1 z{@3Au9sbwh-wywF__xEq9scd`Z-;+7{M+H*j{V!=-;Vv;;olDbcKEl$za9P^@b7?s z2mCwW-vR#)_;?{5#;^0sjv8cfh{`{+;megnuXeJK^66|4#8&dpqIZ z3I9&`cf!9D{+;44Qy3d>+9`fR8*kbv{xa_k_}_s44fx-H{|)%x!2UPje*^wE;C}=D zH{gE*``^I+H?aQ=?0*CMYv8YezXtvq_-o*=fxia+8u)AAuYtb?{u=me;IDzd2L2lO z|KTlHEB_Dm0Ss3fs`YR0?P6BsE@nmUVpilXjn!7`xXp^(#jMC(%!=H_tjJx=irmGl z$X(2e+{LWOUCfHyrICUK`jxHFxXb&edKbIg@nC1L3)mGr1MCK#3EDi#U5pFtVnkpU zBLcgza5on2#=_lLxEl+1W8rQr+>M31v2ZsQ?#9C1ShyPtcVpphEZmKSyRmS$GYfY+ zvv9XF3wJxSaJMrHcRRCiH#0eRW8rQr+>M2Muy79+?!m%6ShxoZ_h8{3EZl>Id$4d1 z7Vg2qJy^I03-@5*9xU90g?q4Y4;Jph!aZ2H2MhOL;T|m9gN1vra1R#l!NR>*xEBle zV&Psa+>3>Kv2ZUI?#05rShyDp_hR8*EZmEQd$DjY7VgEuy;!&x3-@B-UM$>;g?q7Z zFBa~_!o66y7Yp}d;hX6HP4xdJ`hOGszlr|el>S$GZ%W|{gw{iNQwle<9^ji&_yX@O z7~X>6Eg0T{;Vl^6g5fO~-h$yR7~X>6Eg0U0;cXb+hT&}(-iG0A7~Y2AZ5ZB$;cXb+ zhT$C;-htsA7~X;59T?t$;T;&>f#Dq(-htsA81})i4~Bg(?1Nz+4Etc%2g5!X_Q9|Z zhJ7%+3&XoGybHs-FuV)HyD+>9!@DrN3&XoGybHs7I$Q0%r?ZAOKlweKHMIH3?=d6d zpL%+tT4g^L90!gECx8>dN#JB~3OE&<22KZOfHT2a;B0UXI2W7;&Ig|Y{|Y`0J_9ZQ zH-ekMYH%~S1>6d5178QXgFC>T;6FfHmGqx_mch_gQ~al%WiYhW6#uDb8H9R*!0{gAUCarPt5e#F_2IQtQ2Kj!Smoc)-yA9MC&&VIsG-X~n;eZp1VCtT%y z!d2cUT;+YjRo*9D<$X%{PYM4i;Xft(r-c8M@ShU?Q^J2n_|FLc8R0)8{AYy!jPRck z{xibwC;WcG?ie!}l3{C>jM626x3wS=!Fd@bQ?313V2TEZV7`~kurAp8Ns zA0Yez!XF^~0m6Sy_|FOdIpIGi{O5%KobaC${&T{ALHI8S{{`W{Ap94E|AO#e5dI6o z|BLYdBK*Gy|1ZM-i}3#<{J#kQFT#IG_%8|nCE>p${Fj9PlJH*={!79iB>X|bA0+%i z!XG63LBby-{6P!vJhdY$g+3SngJ1~E0<*y|m;*+@TrdyJ2RnmZK=~Xo%jXE?bA<9a zLirr$snt-tHe0~y>tK~ov&)2R;Ce-XQ zp=OskCuT!q_F?v6_F?v6_F?v6_F?v6_F?v6_F?v6_F?v6_F)dd9Dq3ha{%T5%mJ7K zFb7}`z#M=%0CNE50L%fH126|+4#FISIS6wQ<{->Ln1e6}VGhC^ggFRv5auAvL6}1@ zhhPrD9D+Fna|q@T%psUVFo$3c!5o4)1ak=H5X@O#*lXdkyc{qB=7M=(KB!p)3Zq#B zLd_x&Y8HV|vj|+4J6mD0JqP+=01Sd5Fbm8EEyiqO3@cqLU0CTdG!2K9E<@9BSm`n} z4TqI3L(_0r=`u78hm|fv({NaQAw$z}*nFwbG#p05VKf{@!(rus!jJnsFr5j3c40XN9`n7wURnsOx>GPdu&JB>rll#!!SBLlNEp zY79mDmeNLIC==@1T&Qbvp{~t^x;A&mSt};I*U(xqq2?zGi$UEF*M0)DR;+*&6_BC= zQdB^S3P@1_F&2=b0#Z~!iV8?k0VyiLo&xMCz@7r^DZrlNRpM2;BGP<0q2|j8HD6As z`Eo+dmlJBfoKW-Sgeg$-<+QK)azf3Q6KcMkQ1j*7@pi=|w07!vyKWL{zMN|;OR9vL zw_-2G} zM)*RsQHVAQ(MBQKD3txxt~qSYVQUUsbJ&{0)*QCxur-IR1-a3J+-N~=v>-QHkQ*(? zjTYoa3v#0cxzU2$XhCkYAU9f&8!gC<7UV_?a-${uE#Yqoe@pmV!rv19mhiWPza{)F z;cp3lOZZ#D-xB_o@VA7&mH1b>R^m6bn%GMGhE@|>iN8u{rP&JpR`9oizZLwg#6L-A zttPe-zoFH{R^p%JTFbxH2=&a4P|xfL^~{b?&+G{G%#Kjc>#R<*{e)>zdVt6F1KYpiOGRjskAb;c@MtJbtrt!bxPJI%m%Z7BUV zlztmA*b(b3v=M`$^%mNQ!BF!kX5b4o17D~a_(ILV7itE+P&4pd8x++B zMYTauZBSGj6x9YrouHPY+MS@5!Y}~p?wR&=_e`j(JfW`ggnFh}sAr0WdZt*YXNrY+ zpq?q#zV4n0b@xoDyJzkM)qcaypzcj+U-zbjx;G`%y(yvYO$l}POlV%>1pLDZ_=mQX zPFqT+Ev3_z(rHWSv{mV>bZt>xTU6H;)wM-+ZBgBcI$P~d)LBF8nV+b$hSoDbiBdR; zQaFhmJBb`Si5xqL96N~|JBb`?N88$twzVB?YdhN3cC@YSXj|LSwzi{fZAaVMj<&TO zZEHK))^@b5?Py!u(YCh3&UV<@4m;anXFKd{N88#C|JhzPRJr!D!O*TC+RFw*yMkyh z8w~9VqP=V|v@3}Avcb@d~*MZb^Aaxx`T?bOvfz)*%bsb1u2U6F8)O8?r9Y|dVZ0JadbfiQ&QX(BGk&cu| zM@pn4CDM@+Ii2vQ6aI9(*KIu9I|Zty^bWx6ZU~ooU@Vqub8d-x>9GM!j9ItqZnw!L}~g)&<+TU|Sb# z>w;}v3E!3QT?yZn@LdVtmGE5&-<9xZ5dI9ppF#LD2!96Q&mjC6gg=Au-3Z@}@ZAXC zjqu$F-;MCy2;YtHXHsfsQfg;XYG+bvXHsfsarP|Ep2gX-IC~anyVII&U%2|=>c}92iTn+ zV0U_e-RS{#rw7;rAJPLK(gPpT10T`@AJPL4-vdi}U`Y=w>47CZu%w49ndExN5<_cu zddLz(Yj@7p$}?5MW58p<24F+55!e%VfW_c_gt;Fa06qYgfRAD4```!Qhu}xx$A(%9Wu?%mk9W4-JZl&LgJ1}>E8MfS zQi`En;hwFPQVi`1_iRUQyLRliCwvF?&w{@v*b5|Yr6P;BKWIJDv!x=#kzl#~*0*cz zv$gh!j%(EsLvr4?E1jNr=AL-wo_OY-c;=pX=AL-wo_OY-c;=pX=AL-wo_OY-c;=pX z=AP2+tK!s?gF-zyDAbdKLOnSs)RTikJvk`UlY>G%IVjYVgF-zyDAbdKLOnSs)RTik zJvk`UlY>G%IVjYVgRUp7Ku`IxYVGTpL1BvhwD27K#yR+nbMPDI;5W{}Z=8eQI0wIR z4t}GT)2t+gbE>Dkl^ccuFbIagEHE1kgE?RX%mwqne6aJu+2ZK}4w8kvwUUzI5K!+j z(|!WfJD9YucQ6U{E;FItWhT_S%!GQEnNaUC6Y5=NLX8Co$AaTPjRok4#sY*B!Aam` zP-6i)uCV~2#sY*I3lM57K&Y_*p~eD)v%xu_#sYLiV*x^q1qh!4H5Q(g89jvcqFs@_@|$wF$pKv)fGyg>UJFA#18w}G#N8ZXdsjTZ!p5LR1hlUa0io{p3r`32ZZhp_L_m19m62wFs@%0M z&?KRrdJta1kxMzEnQ1!mJN7k`U;BERKzJ8NiaDaW+&W@@wYPL-VIJj(Rw>uMX7US1 zazyI`YhN?@g<8*9sMS`5T5VOB244VIftBDIaIK+@VhF8&+gs}hRl7^jZ4})`(QOpn zMpcU!=$z>`s#Oz;+o)=>q3JfN{>E&f={Bkrz*Y)Pw^4K()e2y? zZ@P_Y1u#R?Z4})`(QOpnM$v5)-A2)E6x~MAZPYW}MzsQ%q3Je?ZlhWO%=S&UQLO-G zXu6G}+bFt?qT49CjiTEqx{YcDFbiqAjiTEqx{adSs8#^8P)v$ zXS$6#(`^*pM$v5)-Cm_!X)nvn-^S2w4Bf`iZ4BMU&}|Ie#?WmH-Nw*u4Bf`iZ4BMU z&}|Ie#?WmH-Nw*u4Bf`iZ4BMU&}|Ie#?WmH-Nw*u4Bf`iZ4BMU&}|Ie#?WmH-Nw*u z4Bf`iZ4BMU&}|Ie#?WmH-Nw*u4Bf`iZ4BMU&}|Ie#?WmH-Nw*u4Bf`iZ4BMU&}|Ie z#?WmH-Nw*u4Bf`iZ4BMU&}|Ie#?WmH-Nw*u4Bf`iZ4BMU&}|Ie#?WmH-Nw*u4Bf`i zZ4BMU&}|Ie#?WmH-Nw*u4Bf`iZ4BMU&}|Ie#?WmH-Nw*u4Bf`iZ4BMU&}|Ie#?WmH z-Nw*u4Bf`iZ4BMU&}|Ie#?WmH-Nw*u4Bf`iZ4BMU&}|Ie#?WmH-Nw*u4BhrexAqpx z8h5AcG}Ia+Lc8x_Z?QCdTzI!VSs>ICVM09%Ce-s^LOt^()N@`!J=>*JSuL=)8W~!z z!`^CSXx`i2YGi2M+umwqXx`i2YGi2M+umwqXx`i2Ni&Oc=k#Tddj6hIfPa zfW_c{f%k&&X;Tv+S)ywr?$hy>-aYdNTIbAwz2s?5#tF)*=*Bv+S)ywr@Qdd+U&) z^yV-KWQz3+sik)z_#C(hTnt)2$KFX~ zXjj?xP9nploK1t)=PCA+JFZo9gw|RWQ|s+rNOt@|j$2==n7VIoN3!EXIc_aiF&@C) zmt@DE;JCG4_UrLUFuM94{2d3&rt5alB9*FBHcM#qmOMyigo36vqq2@j`LDP#iB5#|y>rLUFuM zT+dvzkOwy}6xa2dp?RUWp4&1sFBI1^7lvkS94{2d3&rt5aa#5`UMNn>9>)vCY1!j= zp*Ssj94{27Wsl>9;TJ|{pCyxJ#K}#PJewyhNOqJ&u2f;~C<3hB%%fj%SF|vd8fN zaXdgA4-m%##PI-eJV2bfAE)lesr7MceVke!r)7^*-{Z9GacX*;njWW)$Eo9S>Udn~ zQyQt=acXy*mOW0rj#IDWwCr(ebetL;r$)!A(Q#^YoEjacM#rhqacXp&8Xc!b$Enee zQcn}qf&{f7K`ls73lh|V1hpVREl5xc64ZhOwID$)NKgwB)Pe-HAVDoipxXqxO`zKZ zx=oP3=zk)-#Mq;@2!9Z9@;lKxDRI+Dbl#z9gwHN&I}0{!fxx zlcd%p@%Bl2L`mvSlDd<`=O^hSC6%w8lospDC8HfCu-woaa7K1iIWNY;p+6a-Y)njNQM2l2AES9n0IB+~T0h|a<0w;r0z^ULga5^{x zoC(eXXM=OVx!^o-KKK;)SMX`@8E^r(5!?h;gEk*vku+?$72F2C4sHi`fIGo|fbWw7 zAAlc%AAuhmYV<^G8a*-8>ZU@iZYm6dHdA7e)|ofV0d01~B8{FH+U$r$su70Afdyb= zuoc(_JdwECvELr-0CogV2hSo*5B7Umxu_PHg_p2@Df?Hk|2y{kvrma@EYHH1aQspB z2eUtt{l{%z3Y48vprOU9wRdz}>+OJ7fi`Zngpt7|?oswf3R5Uh>*R<{>*Ro@K&_Jl zngX@T4QTeHP@q=1Vc!&}m2C)Vc4}oC&=iOA)rsSUuO@S%-XG2q9O8(i<6qu5KHZ%pMqfhqZCLsMW%{@KtJ zn35MYGzF&QMGZ}XDHNEJ7qxv;U`k%p&=i=G7d12mrtED9LQ`PM-i9DF1*Yt62rh*J zQz$Tn0#hh3g#uH~6qrJRDHNE}_?;aw1*TA73I(Q6U`jsOj++8g^1X(pz?3rurkp7- z*wz9~?v46$zt)cQi~Q{pHvg#xvv5XVh{ zT1|+3Q(y`OrchuC1*Xwe8eOH)Razr=3tSpqr9IPC8eOIFY-x0rMptP@oYUwkjb}@v zt2CZ1jjqz@Dvhqv=qin_(&#FUuF~i#jjqz@Dvhqv=qin_(&#FUuF~i#jjqz@Dvhqv z=qin_(&#FUuF~i#jjqz@Dvhqv=qin_(&#FUuF~i#jjqz@Dvhqv=qin_(&#FUuF~i# zjjqz@Dvhqv=qin_(&#FUuF~i#jjqz@Dvhqv=qin_(&#FUuF~i#jjqz@Dvhqv=qin_ z(&#FUuF~i#jjqz@Dvhqv=qin_(&#FUuF`7LRm$ipt=8Q3O;>5P;I?lbBaN=o=qjz2 z+K!v9(rTTxkFL__DvhpQaOX+GFVKs4!Tp+j>sP=Pgsddw8bYoiYgqywApxx!$?41Cf40Zs21lrxd&EAi}Q^22qKLa~~KL<|*e*vBb+C9U~ zURUr8up4MzZnM`Nw0nu0J)2Xv+3N|O1D*?>2U;t++507UK6p781+M_F1g#C-?EMye z5R8Klfe(Z48Txs`&(#0#Ce*t{gnGA#Q12EI>fI|sy<0@6cZ<0FgxpWa{e;|4$o+)b zp9!OW=}Na>{nBco%^cpZeyQOK9jWC?t(GgbTCUV;xl*g;O0AYFwOX#!YPnLYtK~|qRyvs^&Mx2}_^npf>PpRUD3}0;fy2QOp!Fzfb){xF8njwmt1C6b zBsdlv2aX3PfOcoTmMgVdd2HLC0!{^|fp%xUmMgVduGDJfvF*rg(C*CFa-~-5&12v0 z%-3?IR?C%IEmvx_T&dN{W82w{;3lvd+zf63?cR7T*Hg7zPt|fgRm=5ME!R`ETuIgH z-ANYmE%0sd9dIA`uA#2B3>$$~%WApKs+I4xeXBdQTu;@yw(MISspYDwR##QFZ>p~4 zs;X9XzfAj=g1-ar0&PZpt?Itv%mFlW0L>ggGY8Pj0W@;} z%^W~82hhv`G;;vW96&P%(98iebHHr#v()-m3yZ+(!5hFE!8<@b5uh-7B0#7o0)%=Z zKq&kDY%#19YNoVMGo^)^DJ|4YX`yCH3-1(9w)G!`cZ2tU#h_-a>9}UB2?v0hv8H|9 zSMlvBo7aW+g9E?^z!F2%wUt^`XNh--Fa?%^WuR)Yj+e7vA?&F9tP*NIs!;P$g_@5l z)O=K-=A#NVA62ONs6x%25^6rGQ1elRnvW{fd{m)kJqb1INvK&*Ld|*-YSxobvz~;S z^(54+C!uCN2{r3Us98@!&3Y1Q){{`Po`jn9B-E@Yp=Lb^HS5XmsPa;b@-WpxOLa$i z7~4+^FZG;Kda37w0Wb)Lz$`Eu41+mf1k45Vz|3N=em zsJUuF%@P!vN-ssFmnxra-&A_3^4ai@;Ge*oK+O`=@ms)K!P~&w!G7SM!TzAB^irES zCcGEaoIvesPM}b80)?6rDAb%lq2>e%-v>1(Q2Uw_DEtW2oIw9ln-eJ1oIs)G1PV1L zP^dY9Ld^*jYEGa~a{`5$6DZW2K%wRY3dvjb>ug_h0)?6rDAb%l;n`MFdb^qJYi6L3 z{8TT__BAt5sF{I6%?uQd1T{0zztm<13QgOW+RQ*9x$SFapl@@E46TmXoFYT3BQ~eV z(CUcIDKfM=VsnZNt&Z57B15YqHmAtY>PVD25~YqrsUuP9NR&DfrH(|YBT?!|lsXcn zjzp;=QR+yPIufOhM5!ZD>PVD2Vl!kEBXz`Ps;tz$)e)PiQtkI8U42PcU((f=boC`& zeMwhe($$xA^(9?>NmpOe)t7YjC0%_NmpOe)t7YjC0%_ux{63w5$P%-T}7m;h;$W^t|HP^M7oMdR}twd zB3(tKtB7KBEpz5f=z?ClWl z^4=A`?;Z5?n6f)o*wLNlIX_Eno%6%Ko@e!M^#ADT8DrTJ@mBj+dH%V*dSB+%yXBfY zZ_|o>K{N8;L4~mMjl5I6@Yz?L*UIa0&e@l>@_L`sM|j1r&b~@d7G3n~-mScTeSUqB zo)Nmt&JMb)&#zj^`pob3{IpgK%h{B41Fx`dKgVn6>F)4#{qE@JJrDj3Tmh~ItH2H57H}uH2i$k__5E-2 zJ_HXKIvdIHt&`O#}Kz` zsON_*bi*E=D;VPG$#Ln=6^!I)KzcY$>qqA}yC%15ak~b$Yh$}Iw(DZM-nQ#(U0+M} zR_lD##A>^4@%)0zjHPi=lVikLPx|@%;0Frv-G3p~(4+m;Ke$ha8y(!ISibdlutsMa z*g2Im-PKpt&Q7H^CRx} zG}FNwE>AE)9&EP!SDCz2mAAp$q7}0C_~-f;`j_}o|7!nQ{}%slf1p3aALCE(r}?w} zr~LJPwZGlp<-hH}?|Nz_0wb4WyOSF+h8%MNJL>oi25kwn5w9!KwJG7BQ8#nYc-`#uS;ODv;UFnV0Hcs1k zZ4=bwr3U3 zLT%4!TcmBVwx!zA+LmeiyS5j#t`ahI>ZXOcr#L-|HqH*iAL1n`&1#PggXau4m*K z<=3?7N=7YaH+j!)Y9YJX6@y(bs0U-KGuqmWnUxvuREqA>cDJ^Bv=wVpzu$WO)}!|H z&_1=%m#0%2lxv4-jDPHVcILRJ3$kQMt}HvcKWd?0eEYAHyuobs5co(5x)e$|cRq{3~wK|@DuW!7^w<9_F5!qAU&X~6n z^9S0hkMwbeekBk1y?GDrM!t$aL%w6_W?oVY#X)i&rb(GfcbUlpUuo;ILHp=wk*N9X+B z`DyejG;mS`qG4b_#>pP_52?>%`T-@I@J%Y zwQZ5Hl>Dj^&!JYDaEJ0UlT#Me!Lp<1p}opciqyH9gHP&wqfEY24l5NGn%9r5e|yw4 zsYZMw|7GJ|OP$^{=Si9NdDX1=_TLfq)aAxkv3&g(s=>75b-88=*oP7pG&GIP`yA{$|eBg*oDv-@R)+EY)(wUYFv--ggDhh1Dlh^S&AWa2_6==g6bVrO}j1Cmprb&aIry>U}ED>dYq- zUOB%&n!kiT+5&|*wAIxwh1U`Llh2%_vfd{y6Xn3SIjgYqb4!7kW#1vou+CJPsbf|@zHTQuS(mG(b*Wu{7H%JQ zw#dY0IrOc+j6HYOZa^;ImNnje)`ag2`|T6T(=y9b zJEPqApsrOtD&wJ=_-&TMM~;5=b@+7M&NoBZ>Z|SRKHj000nLB&mtXzgO?hTD_lQ5G zvibAqXazS&{1;ph_i=x=}8~{@8~<$C(r!VY4#AeYMkl2 zuC8WUuR}o(eP_ZP{?BynLZ^o8O406?+TA_f163*7J>xd|6zV?t0Kb7SX<^+dw(ovs z``U!TPeWOUf9?4RUHy&rruoAIr+sT1qhq#B_>OIwjvsBCt>Z^-PwD@oZ3}h$8=H=# z{s&vR!rHd-JGM$4|32F~h5P2VNyom=woT#K{2J}q_U3nN@A)75N7)qm!1vw6?H#!V zvI2QW-5LZ=3w(1sEznp;zwg#UVZXVx)iK+S#?e8?zq$QX$G+EgNUs^~Y6i7w_cX90 zcoTRYh?=!hl!a-IzL$X+t+!>riJ?~vKEV-y&K2Iv{PxO>bE(i0t{ z+-S{7_vQIB{-)6TiTuvbbme=Bcb0ddEbHw(;{8&oe@yQTnygP;t9!raJw%>7tWl*L z?@>QjvlIsT9W~ZJL}Rg+dPDuoHC~zUi!=r|LhQM^BW%~6Q}j0Oq{c|*amF>-yeOir_T-EF+_nGCW z)BF<8XH3h!voylxYh1`i*gQtqLX5EGGs33TDV4X)8DVR~2-{B>VfzImY~2}QJ6Bef zE5$a#b`c|N7c;_kDI;uGGQxHfBW!mv!uBvDY)?pWy*%>%8)Ykje5<^Ve$4dtU4P$~ zkdfE>Yci!M&i;T;)~?E8SY*e%1GYw5Hi^3U{pQrTla5 z0(XHzU!rG9oV(O%=8C&YPm?(JJNG;7_jmoZf0w&U`}fP|IalIJwEw7{6mf2_8?612 zdOF0p$KB)FU!)-U=-F7OnyqJHRksIe-=5*}Rl`SX-<~}&k7oD9^YyKD*%Z$m`UK@~^vu5Q zBi}1E+$Ud?O)UxQN%tqD4n4UfHO$aEz9ZC?h@LWEtm8{Gvg1^jmuf$)PY$)m>3O4N z+P6C7)~cit z*Tgl|kwQHMl;c{tRyxwgwGnodhlt2SoG$FHHOj)ShrET>2G$*LAD@wf&xqiWv`Vq} zW0i5fQd>_SCtqj1s^c{FY<=dYI$o&$RlqwzpCH~Ng(Nb{l#e|aSSDKEG3~;c~ue(y@B4tVtz!QY`kzDUO0jmc3L}1Yg#e3U(e5x zFZSh&bG>?go;-3^CjIiom+MGW9yx+Xwj8lp2Brebkpglgs2pjk{X*qJW|l%wx$qP1 zTgnUS^wL#nE>N1!7g}nAO0A8rS~?3zXOMIjkj@b443f^QBhncrojIgaD?Tfoxk~3i z<rmiU`eW2$V1Dx09n zW~j1><|VICOTAK`Rw%R?3T?(HWjl0Qh)xUjHlH`VcBr)(YAsY7uvbUkR9n@YGAPh^ z(m!R%``*XO%TF}>qP|*a&pSpfL`eQ3ORI@DP>Y?XBl+%FuOWJGiQb!`_d>Pe$9wsx zz7W+nbNYC#(0()5!nO3;Q3DEHYu8%)Ru2l@3GM{#w{>m3=I%syqCCb)?j*(D&b3oq z?Ol7tezH4Rv3GDCbmT|wM~dBQPa(CZP`!pT74KQ@EdADMQcG%5VO>o!Z3U@M&D7gD z&ud%f`+n(usXmW+z{Yr|lijb~uXQ%#4S(Z)qqF7{8@nsrl{%jBjK6ii)p7HWjqzP4 z(|2l1->I$oPJdR&jNiP&+3FwWJsacMPImXX`*b$rNe8$AI&1#4F~06(_lSE$XEVO_ zG546xnul$S_dD5*a3gd!<84Q|Q95frw=w?kWIS(c_q=;v<7d_aXvJiCVXYo3FWlOd zyK=9QdK;U)6Wu=df!D@;>^}BR@Poc;3qGchx)-AE1*vrf)Vf0YK|$(Xh`JY~?pYi1 zOYd>jKOar!(i3s&9ZixKnc__qPLsd&rSf^g`TFFd^#EEAO6$+bS1-Z?Kkq#+-(Y?? zyUq_=|0Vkf51ftGbI^K@w7yC${%U-3rQY+{sLnIn=zIv>=SufG6yr{Pd}+T%`{t$d z(0x9-uZQ9zD84?5&-o9EH{YHst=p*Taaw;n#}&xW`{+J^?t{|3?q6sP=w|r*LV5M( zcz#oVNb1*m!stE+-RGnGdg#7By3hF@y3axPIj*zDegm$HvpFSaO8xcGeeU75!{$q6 ztJkU3<<&Bpr#uEv*%}|&8Xwsj@7Nme*c$J6tlEWcUTeH#Ydm6We4*AoR?jnl|I^yh z`W)HfYNdDizbrgoYrI_plo7_;)x+D>Ljes@Ks~%&m{M;9NN;o-t~xNJOJ7~fWp(yd3i9#6UEP_B(B*9iVB7k}0S ze-^=?<>SxlQLgn=u4l@_nLo?HpEaOd>*3Fip>)GX_^?8HSk3Wd_3QdsU-_^?`drQN zWc82mVTJU+n&Zjp*Y(1_@>_-U$eQE5>euzlzVcgz^wFB*z3SKX)V}gth4k8*kWO?4|3EDpPoU0IuWE!gjz$WH4n9B zq0?-18b+bnXfuR1L#Q$fRUV5f^_~;;SC6Ud!Pzx#rWJ|MisVyPAzG2h*ZOYiTBsj) ze?9f`kC?m3+%4U6JZLj2mD8DVjZX4My_D0}dbj9)!a#3`+MOx7mR_j*deK{_8CkoO z2Zv^P-oz}=zc9;li_P+M4Q!UDyU=ENy132qbY(Wn(|uSMQ)ZTDODW*z-kECGu9T;{ zRrf6(^oGiZO;ro_oV?O1?-g&WXYbH6`5%*z23S0UwVV_FmJ3{%_r3=E>r9F zs@`F_*R%N|7GGwbX&d$EPt#q73%x$-o8F+gYWJ$IIouoP{Y6T8UaF~7E4W?C$fQoK zkrdxVz2P6L|9iIgEA{GsCqMpYY4Z`?)fg`o{#EK*E^oR~ZRT6vM|JUK=C8KZbwg)e z7g+!J_xS$%y+^%~niV(Gds@$Wtk5;lCbhC}tKXQhGc(uqMD@A5sODXy+VTgzG5QYO z|9Q+Cr5VAqyl3>})(i65uc>8zN1izIyUe`UlXQ2ftKMUMvFcb%bMfxfU86zXX!R>* ztB+i!nqcpBt?~AGHr8nQl9@x>PBr%o?>z6?+fDOQ=*V*wlU`OyYum^Y{cp3P6@Q+}B z@c!$rx#Rk*N5KR*8XN~s0cV2q!3E&+;NOaF`O}SAE5OxY6}SQ10`3I&fcwA?!Tm+I z-F|D6bl0r!C)g8RWQ4Z}e&0v>bA?bqEBE&vO` zHeh@36!28AE7(H>{lmS$-e4c_3h?(}5qJ~W54;<^|8{+aji*5^-gDb&Ga2>b_+y>TwZ-VcEADa>31BN*sm<8s64Zy}=3$QKN0sQG5(s0gc zU^lQQcs_VBco}#V7z1wrZ@J@7x80D_A1nqR03Qa2fFr>qI0^gZ)iurqiTcrJJ$ zcnKHpcrQ2*d=yN8qrq{)Uqq&WGr{@b0`Ph8Z{P}WHCP315S|v< z0`3I&fcwA?!TsQuhPgp70v>b6UDw``TL2b6Dd4GKSFi`z3+#QzUH$IJ?E_u` z{vIp>Zvy*)cZ2tXad6O`Qe*CLa11yBoCeMYp8^+xDX<(|dGGc8Z_lj+*MXbBZD0-f zCiousF?hg`TcE!B3)ZLjzxod7UfK!j8G5?n`Tw=&)PFFme;8U1$j1*Pc_WZfW~rsL^-*_J?5(zs+bU%zg+Ag7!R--nR&5gC;$_UGWEDX1wo* z;jzT{!>}R0{b8tQn3UchhI(E~zx`oY$ZvlbHs`lL3~fe)-nsaLuqD6xVc3e_{xEFK zZ+{rtEFir(^ar7hPT7^z4?&xU<8-z6L(t}zWJZ1eXLz!%Xs+gp?QUITJgRFbt#+rY zjHh)KRj%tw8_nIRtEdCc*C=%Z-P3EM>tQ`-p=;d>bywvocdffg_j>PjLv&ALg8Pe` zFFRyQmfl@q-`RTqk-mL*vBuar<8G<@*0`F5aCTSDzVEL4)+iYNA3EQ!?*H5BzK7I( zKVA3zRNZ%7%x-R7jI(w3*W%7{6>h!T@2a|QjXLuC%DV5>bv%_=777jzP75vyz8I{|91m{G ze22Sc!iO~`X}=HORQElFT=m0~!hg}xNgO?~?%0^{a2>PJAkRC|^TUsd>l$6 zNqDM`1oVBD9kCQ@JBcIRbfnYQjzkE5M40UTI@00DFxh)_q*dJ!y6 z9O)%Be(|*<%H{004?s|8F zyV3p8{YiD{W_OG0=lGg{-FDs*Ql1>u5<5sr)YfV66TRy>MnDa zYZSV#yTaY(R=bxpM!w2zbFaJYZin0H-f;hP@4FA&7w%u~OLx%!ncvC(xqqtv3;#4d z?e|~)z5adv{r&*|0l!4g{XOW%{fEfSdcybA1C6NPsP`JHf7D1%Wcl7A-J$or)w-+e z>n@Pq-mE*j>}6NzJ0d+~DQtn-nYOx{^iyXe+E40NUHM+EyZpZQKSaI z?zjql%>r7Z|NE#;*>lf!2gp*iRA)+cq=oKJb>{xf6}o@(N8O()_6F(>&PZ>ZTOfbb z%f{gJc}>rjh3fu$O;4DGq`A!T`C_wBuerZ!&yK$4rt8jbFMa<--@nxN41J%k@0t3( zK;N_UeWAW*>-$&wo}=&H`kt%ri}XED-xs^r%u@dxjV`xf@0YUqJ>{_r%A;hBuB#1t zL!RbyJ{laUV*`&k=Cb6ivu^p?k$yUI)e%Shtc$ZQ)3NgpA9MQO%J>wqa)--3N%|}` zPqC-;_`jBY&pLSr*>^Gfx}%-d#_Oli%tyROT@T$mlRrCZi8j=|-QzS8b-eEGHqpIZ z%`~vFR@d6KaVNO8-n$x8{n(wP`?~Gbe*MVq<4Py@X&lmKP?c!?@dtGe{~`AiZf4x3_y~bOOw3>dMMhkE7uUDszjtcf0QAe(CBd9jEAy^SLT(y%$Ke_6p{I70F-RCLevbt@ke5A5{xHoHlrhwZa-t zC|9jsuNu8azT-Xjq5D*00bk1LG>|W9;kTD%om7{*%6IfsZg*GfuGMI~rLL(I(ZjV8 zo~(8g@`_d9o~{=Zx8#SrEBALXAe)BpFV^%$xW_>;WV<@&!^ZHZPf zmN$%PmQ1$Vp0RG2O6O*IGOdfD6pvF{AC{-Q)?Fbx&y#nvxlm4{+0NNan+vpEsO?wU zdTUcnb{7*;YW*G|1McgGwl_q#q8>LQtdp$ z|GBW6uO5is$Uja#{ulcHEMIM?-&k7{ZB4c5nN+_}TN~A2D?b}APz{nl)m$X@*0SdZ z3z!+uLnYngXv)`btG#AY!Po1OMsW|$3}$pS#3zn_N=T~ z@(10ae@A!J?d&4OV)HF8R>N$oqeZM;^zzgy7MgE8d~Uh7@wnkd0VGr7wCSzU8@b!7>3oXX=+oR(!KCSy4U}A*;=JL;v01b{vR4W zc~kAuCuY1xLBksTwA}QSA3u_3R0!m1(ij8aZNFCstk zidy15?j7$Kwc8=DK)#}(cf88Ehu1>>;0E<~GztTF12o!+Z&`| zMW_8I>ss{ljBK(# za!_7tlY7r^X=hv(=WU*a%jC8G52%mznryb;Y_b}p*44p#fmlszgXKquYV>KCu4YEa zqmGg#UoZWy%KlKvzoQg|KdQo2C ztG?Pk_b#6HBh4-OM5Pw`Mj!C&t%bD>)<*Qv$e`xfDz9%)PT%C;ten2hzuoWW|Jm

gjLFIH=sYRb^@Yo)akD6Dik|&|gPNv=b$Iy7YIJa?8r1 z8+BFvHPwt#Gx=^Ss&> ze(j1t?F+%rAI=Nx&I^8i<>&VnW?grnEL3>nne_|X-+Sz9y7w^rg9dJ%)y-_x_2ayj zssSA}Z`ei~FVcwIm5h<~)0pD`*<+)df6=JiGtB0FQ6pux>cno11b*iIOLM04<)@m+ z54Bh8c!sVfu{ls1F68u zKxJTk;Pt>;f%gI*2KEOI2D5^B!6w00!FIup!A`->!E=JWgMETm28)6>1^Wf>4L%rr zEI2IqcyN4hYH(KY$>6iWCBby?h2TrUmxCLFTZ3-|_Xgh$eiWJqvj)Hif(=r*m*@^I+!(3H@;&{LsjL(hjwLw^e`3#|yf6j~R0EwnjQ6M8%J zVd#sjP*%OHf~;0q9kPC&bw*attP8UGWL=eYZPuT%`e)sj^-$K3tdUvCtSMQuvYyIX zm{pdwBI~8B^;tW!-p#7b_Oi3H>t!F8U6_4Bc8BbrWp~c*o_&7yCD~VGUz>e%_MO@H zXFr-fGJAaXU$W;33HJ#9 zGJJ9P^6=H+>%upM{~Rt3mxLb;4-1b8PYnMhJTJT;yd+#6UKQRL-WC2Nd@!e8PUD_};3Rb*3SPvo=6!Q4P@B=@-77P%+po|4-ow|j1{+>3HA%l&Qc zb-B0a7Uw>cJ2dz4+=;n=$$c_+VQxBiW$v2X4Y}KM-^u+{(~s-rHO=dg_p`h%dFSR` zly`aFHF-DZ{a4<=yvOoJ<&Ddmo;Nq|*}PQV^1RBtb$PGlZO_}Cw=eIbyaV|zKb&7b zzgd2p{GaA`&%Yr5lKkK17vl>e8 zm>KNBQ5o9+_RN?C6Ce^4Bcgx-RLn}wSu$qKS$EAjV?xY|3a)F;IqjOWs~C1yt!8W3 z`~9j1kiGZ5@BjOr|D)4gUE$QJQ>RWoM${gP28obRl^pf)Q`VOjBcyeN5s2NzV%0fP2p{YLK zGx_@YO64+=VjZ2ldiqx8^ECtaH3Roek4=b(^!r|}cNO4$q^9(duDrZY5kPBQi2$6eoCzh|6XZ$WknHEQiQ}lkrKp6DJHTqN2IxiNOKJmP1<`z zOIf48LyWFM&*;jsF(7Ho_e`-;DXDEe9Al;9Y?!me#>JYeh&5LcD^XIasGXaXxu;{? zcOdaqYKo6ejf_l62u+HJ4Ns7onjm4HP$f?Sut}2AlBBexDru2P(a91{$yIwd*^Ex| zclLrM0fr=OAutM4tCUZZ;?v66EA2ayX;m^MBqv3urGpabQhBLGuI;4uId#u4lcZ|( z8RqIU$_dW8G(#dumQ-8T_gblAg)ZGevrimY%87GfjG?OV14HnJGQ9 zq-VDD%#ogBq-Q8&aVJP6klh@V=wuFlZ=dBkA{0l}aQs zn^Pn-q+nEV6#fUtvPXjS#xp%VIGxe4orjC`>gFN6x_hO>vXk95%=85UU3#ZynZMIx zz^zhDRB}eDIS`v^j!BEnmLk$HB_v6q$k^zZbSab+TMkHqoSYWL0OQ5rvX=xF0SPL5 zGoW}gnCvBiM8FIY0SO@961;Q?T)G4ePYGDM85Uj)RJsHSPYFw>`Nd={BH5_Gi;)zs_U4zX`Nc#5BHhg|4+$7E^kKwc zZ$=I2EwzA!Bzi~z)(RG26p`LiOIXNE6Bd$)!U7Ux*aKj!N48;a23dMbkXcBAECm>3 z7GRL2w*;Am%#c|~g3JOE>Tay%j*i_WhH>mJ%`%SN%`JB`x7^L#ayN6!-OMd_Gq>E0 zm2-A-mFVZ>D$&nLnyU~gL2+`Gpg6foP@G&PC{C^t6em{+ij!+Olx}8V-OVpA^Q(vX zW~R-C98Qc#&NB1x=#0p;^w{L2$_R6A#vb28 zY>>H{KUpX|83GeLCrMDeLAbC;&^MYzrbMR3CPy%ij7*HJ$SEP{ZpO@A!rIZz{N;uf zQD}H%LS&SABuQVXl>>`?#z&_ABN^Y{Go*y3VtT14Eq#4Y{0^Gg2vq@H@mT@7%D1_6 zMT8l#^r~ge9~C7lzs%*({z`<(!xagUi4j-}nfoBAG8mJS5>qZtqBF1picC!Y-rCBT z?@eM+KrR|N%PCeF^F33QcEjSPYP-unE3jv#H7vQ3q%0yW1s#G8^v+04X6si3!!uGr z=I|T@Ba*R9OD#{vD=Hxw!Ww}zOuq?CY^O)%phXo@MB-RSH}lI~Vq-_Q?n%k%k)tz0 z6R=y7!GmXeT>CXqfdHmM?%k&qsnl8_@sN5p2vMwsQi zRIe1t3VqKH#+InTh6cjvG07QeSk_eLM2pRt@vZ<3a+v``B(vrs&v&5GSScrPRee?%bBJnyp<^V))i%q68z zBv4#sF*~l8rrLjoo8Ws*SN*LV{7sk!Hl!A~H1-Bnga(G)BZm$EJrS z7^7mr>_*mw3CW=mkrBr9WMd9i97c%L6t<2Rj4_}Z z>iLgG7{S|U2LwBC>zkY!nPCh~GX}=QCdC_vB&Wt3{llb&wJ{D$&M?Mc=VVODNDYrc z`y-5@#-!w=){&TMGSXPh39;bwv`AxCOl)|J5#5oLp2iw1;aW~8RFi=$tZDyfbQ`0u z)Mkhb;A9MC8;V5Wj$Elm*p2>Mb|Yd#lX8qH$q)s}NsJ(|>1HIQqNo5g{Eu1~RnZ;5 z9h9g@HB+#HZ2tg~Y)ogOt1|2NJ_40k%d(O)5Zl&8KBB&?{zd)N%Fe2xRST$$JfSl3g}P`q)Iyi6u2+*+vxYLL zL$$bSBqDmRB)$gSmeb0?t) zy2(A_o^gL@bWi~~LjmNi@zeCvBx)vTR%^Csc54bX=QX#W@F}%cTi3L%XWh`+9x9(+ z)zmfEt$(xrYE7$as~f5}tL|RCv!vJwtDaVUa`i>kH&)+T zJ->QU^~=?Ng<|Ko>c3Yn#T{Oiwz}3%Yp-?JcGmXR255t{3EDB*nc5}VP1>#6UD|!x zL)s$kdF>tTL+uOgJMAa!pIWhoWsRCOY-=>D;asCbjjlDkYxJoxq()ec#2T43#`45P zO=`7#OzYEnZTzTmnx52D75#W<$0@s0KPUJZQq*(W%oKjybGpD7XuH4V75_4I2K|nKQR;^*`g~ z)xW=&*O~se46iIRa-IqJ$K_-o-F@Jdj~`E6d3?GkuGcyPseyX9#J2Zn4LjPFT0Y{4 zCAA=JNsTx62)Erpk=`q7c-#OxEp1`ipq!R#<*@%5MQIWK=2qmelBCW*r z%6WL1*0WDdUxB35X(VV$AM#iIe-zw_rII?U+^OY{f~Jv4!vNZd8YPvfXif8{CHu5h z5g${YlGvz-H7O<5v{XrIs5JMylwVa;Mj9z;3%qF~d}?@rC!=`MnAYCiWQV@}7SC0; zZBG{Nd2s(kXt()#qE!)Ldehgmg&l3()ScE0T^zS6#V|H`a%{9MZSXFH)DF{siM^H` zU^{qNv~$OS#V@AoX+0HnSV&~eiL)JXBeEw%cOZ9X&St}!?Mrs;wKW+@Eq=kA`EwWO z^Cs?`lt0PJ3}E`48MCMB<5t8hiCIu$7{O;T!`t3tWNj5S+l z8JerwEj-`Cn}yTMzBuw=KlSCpjeCpa}>bACof+Vq7G8kfNU0Is`E|rX*+R9G_$aBhDxUf%n^*m?S7lQR z(A5~^hYd$HdzB%7qg}^73mY=WImF(TVa{D3M zUwfT*a_ZI3GjwhI?j-$8weFALgsk}Cw(YO?{qW)X`R8->vyWxvhwiY_l{6xb{H`sj z@d=|-V`E2e-m!Db=3NHeAM{tt@WgGqcW>Xe|G>87sOZF`aL`^?;>PLz7|!h;w=HRt zURTluU!6IgM3ZQsqM|WB2s9dFTBZ5Rksllq?kea?4lIv5Z}-!o{p~s3!>|eY{p>Ww zeU(4_ux#NnyB(X-;^WiPfk=XzCS?_*R>D!swP#3zymM$R(Tv4v$O_g0$9ODyZ2E3*6bp+r`>F6w?5Rqbu+#8 z;NHCl4@B(?35kjb3*8%e(4aYccvV}@bqH-@NTVKm)Kxy6sO;55fp|<5G<3$3>BN-mbZNZD|Cr;eS^>8{hYos~zRK+e0|FzuAh^_;lsk$B%ukwi*$Z8I@s} zr8<`P+r6zDvf~!%`_V0YSlq4y2X^KkJh(G1EG#ZI3@p>ZHk&67|07?TaTRu}|Oq(GQTCIC<4J12S)zzG=*A{p!^VH*K)h z?us3<8}lP11*RPtrX9WJrFzPQtZ8HHQgT*q)MRqvRHD`J84J@^kI|1AGd(Q>0vk1q zP1N^RKiI$fih0TE3C|_+79T~gER8%z(9Fo6edxU{wbt;DF8Mk*^!D}e=zXQ6@F2Y zbXjFE?WE)RQL%Z44({G?V1eQAf~WK5*ruub#`bTEQCVAc@o=KQe{fI;tr>M;of!xHDyp!Hk5?>YlCMuMgOffG@Lv2XJ2hQEUvLmznusmLHQTd55Ys>*!Q0G(?L+zO`qQ{8Q8~5kvwbN>F%ZbwUJb6p3=v%C4e!8$Pf z1N$$WKQPK$Pi&SbNnOY1n4$$oH)^9%Z%B>WFx1YzmnT(I^)=5AnoA`53W>fXzx1&7 zQ;p5`SERu!B4bYt`JGy;H8h6AXq4|%nu%G;wL!y{2HMeh+Jd@)>8y(zJ@zq#^->ZG zpysWj@_|Zs^_wF~dhWRzL{b&cFUUV@cWO^eKSPpwPODjivD8*h^9^ift9dDqW;Fe! zpd~Zskhato{VP8TavTM*YzG|~b^XAuMax#|b;m~t8aC#4Y};~vok8=8)Ok#luWYuL zwEIA;KeYRxlj;5-CpE;6j#m;F6`f7?fV5rcblQzENCV1&_0b9Mz)G{ZVsWOTSd);8 z4t-24z@(+qB?c9}KDHoojkq?KZ>2JAD2w<}m@jtZ*(wHO&x$kvD`yjHdBGcw^aa`X zxD$+{ZuExot%~#~ACy}8VXz4XxkB^UX7j7AWM$_Unm5Gl{kfMm1s~mCkhTod5;9i9 zf4Nh1dxyd8*qzAV?1dP`i~=+UupTSg-e(=?~_BwL=SwKq93 znbbo6kl@@aWYz_uzCdbTk?+4ke6MJl30U9BRQ@zwN$ROI-h-nfQZ;-~OiWO4L3CkZ z!S2IsQ-cLQIsJg1R?!qob3jWJoruClqg%EA%!{>WqkfLLIsT^=R=TkoQun-|(1_`D zl#+0d6~o|3<#OgmizYAVv-U!1%4B(b(~u@xeE>7G1FtT`4ZpM6ch7soyx~E4leqGyQ2m zCh71{lfjXrq^2fp!bYr|?g+#(48z-sjGN7o>BLGw{(?NsK!K$q2FEG4ud&0iur%{e0!b&S-xCY<1};tu@a3ypvP>G%!&-ik`p5ei7L%Vp;(j7 z5zN`d1~r6%?q1yG)0~D*Tc0T>zOw~#PE(r6w^a3`E>i#U#M(jZt|2m;FF@k2COmb5 zFsO;bHkh*3Y}l|y>ZdWprS?;DQA2B~#dLy>tf|&~63&ryC3Y~Z`#OHT^Oda20@JVK zO{}Xaa=c{y3b4;e!ZW$X<{W}g1u?2v&`iXPc8*kAl4Ya0Os!3M7!W`@_xbzhWF#Io z8XnbHnbNVOCNh;qj$4y3j)NZ~Sw8dQ24g1qY#FZb!$M6yM+RFh7?r^q5oTq$u>p4i zu&aep6nr|sfL69&E?+EzQU!)gxF;ZArhsn-m^8sUUcN?#`#JKpa@k?Ie7y{w1mqhm z;7b9f;IOEIAvpXT$nzAifrG)ne1`%q17O7t2LP})mlavSA_~TF^1U)RSb&WjoCd%{ zfXrDg-)8|g4)TLC*$J8akOHn5K2Mbu47i?hVFusHh zDBKmmI{}Pkp+bT&CTweE*X8oZGB}KoKY@cKx%{~T25PX|g1ZOU^1&eltZikt<#OEI zfFbRB1>8BvKUu&z1MC-JNGAWHV5W!t;O z7Pzkpqxa`B3tZ-VA%jUSJXpY#6?UW+wrya42-8CgUxlnzHH*H!aHRpC4=`whp9y(a zg~hTO%pK8I8BE{cFAnY<*lj{wM9pDltg;Z9#Wv|LzraniQ3e+ku%^T%0{Cgcl~arD zGFexd#SZ3t4!$U0#0Sf9xX7_6tOdhIc+g;Gv==SlGy-=HWbtzN3W4JZ*wn%81#Iu( z62jt&8ag`*^g^f%w}aps!{V+C&Ntv$1Q)?9?s4oYXPykMMd0-VR~amx%V4Sp4`~)J zm~ShKS2Eb?!9|C~YZbf1G)89e0hXdN81=!w1c>OZX1Rz|DAR`abkS)H+ZQ%zB=akXC60;+{q8(-~wwI|g+!DDzWt_zpV&C^)I zWXxGI3MYu9r(Kg0*y6tw`Gqxr>SG#_8!|jsn7TE2ud(fa( zgBA@sG)QhRslmPmj~keTnnFuqq%cv~CY%@U3Zh=CZ>;aEPt^acf2jYL!C>faNHyde z4jWDxo*P>ldl>zVF~*4vt2Nxz@M@#TM(Z2hZp<~V*VwtSf8&V8*^Pf}oZqBr6Tc>r zO|CWh*3_!0U(@)eSDU_RYHC)anR~O?W<|}eHT%?D*1UW3q~@ENUvB;a-tQW>@M;m# zBC*Bn7Ry@fXmP5=-4<_Ke6_c-ceeMnpKAZ7Lq~^+4qF^Z%T_HHv^?GNK`U*mPOS#C z+T7}Xt6y6iTMubHz4g;J`ZoRBWVI=1^SZ4~Tlcm@+fHb^r|m<>nvQOck&dSvO-?#)DW z#SZs6{NB;BWBrZ+9cOgB<7w^5dp7lK?b+Wm*fYj+v}dm8Y|kG(S9$L6Jn8wmQ|(SJ zojP^$?=-a2*iO?rE$y_Y)16LVJJ;!K?CjXNL+8NGL7kI2XLsJ-xv2Bm&euCX?fkCu zmoAzv{kkma^1f@AuB*EK-ECmElx{zCJJRis?yb7_?w;0tWA~3DzN;�bjdKUCN+w(@x54}{qn)mA1Yf!Ja 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 Iq`vU~05*0J-2eap literal 0 HcmV?d00001 diff --git a/packages/relayer/eml_templates/assets/font/Regola Pro Book Oblique.otf b/packages/relayer/eml_templates/assets/font/Regola Pro Book Oblique.otf new file mode 100644 index 0000000000000000000000000000000000000000..73516f54ce50658db1812f090d6108ac576d3816 GIT binary patch literal 137368 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

E{+ifnYMNx&L0gPF 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 literal 0 HcmV?d00001 diff --git a/packages/relayer/eml_templates/assets/font/Regola Pro Book.otf b/packages/relayer/eml_templates/assets/font/Regola Pro Book.otf new file mode 100644 index 0000000000000000000000000000000000000000..0c4f2d1a497136e8d48862656513ad95263d7e44 GIT binary patch literal 133800 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 E4_`=h>;M1& literal 0 HcmV?d00001 diff --git a/packages/relayer/eml_templates/assets/font/Regola Pro Medium.otf b/packages/relayer/eml_templates/assets/font/Regola Pro Medium.otf new file mode 100644 index 0000000000000000000000000000000000000000..ebd82315e0b42f87f62869056d36cdeeec4b153c GIT binary patch literal 134780 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 C57>zS literal 0 HcmV?d00001 diff --git a/packages/relayer/eml_templates/assets/font/Regola Pro Regular.otf b/packages/relayer/eml_templates/assets/font/Regola Pro Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..72bbbc878d730e8a023430f29450eb9ba5334f2a GIT binary patch literal 134172 zcmd44d6*n$d9MFe_1-NROSUy*Bg-w>k_IpGiY;|3)7`ebXqbIudBe-h)S{7Q(@b|) z&vaEa$?u%Q7Qifl0A>q2hs8NzaeN>l=Qw*pNDM?^jBSz-0%l)B0y^(|_Xx{Ng0JiR z{y6qk&(!pM{nh(cJG{Z^T&-j{d8k88xOgY&c^JQhU8~omgUMr@<8sqjC^m&&&_#< z=IX7RFY(Sd=DB^wDnqT^BI)_bIrlBUcmI3j z`?njjad~lJxqkdgbDfO8L4ID8=g5zYdC>op{GHF)`y-P`d|e(fUs!!bkAD68{@kg@ zM~+{V`bP3h`8Hu}eN_IF=Ol{9cbh*;ZLb z_1}K^tSjaF?hKa6n=9AWZJD{cww^GX&Gl>RNwd*RudS!dIi|6;o;DlI>(uOPB7t@M&Oi|yi zr$6-MrVbo(i_VNcQ=gnIdNZ@`a?x1`=4TgVR;O5BD6T9tmWtC0bBm3-t1I*M$(i}0 zCtr)p3tl~#Tyl%`LzDHQR8yC^X6Ebe?5sOoZ^(p;OACwcQhh~h(;w>7ev5s#C?jT? zvT1jD#-Ep&m)u3&rSfd2c*tFHWg|~J0L969M~=aiOu0}TT3B)$#mVJoYPxvKLZf(S zQs!T5EKMJhW9P`OnqQc|$Zbu}HkNhEvoq7~{IXjN4$Vv-D*8*4^YvxzmO|GKvTUXy zLr#?b%Z_&y_tWtFLS1SqPWnr(J14bEgGKfbOAqCm z+hzW_NjbPPle4>mAlOyEC|KAvQ$K0-fE>EP?(UKUyevCX+HTYjEiBEf%CluJEjOmt z_UDDgWjX#A7H3^KR?_#ZD|`Q!)&Fvr?2^Ow43o~zE(F~fPwe;W)M>JXY3rGBeNOj_CZyc;irFpINNr(MHzMWiF*G*2%y4~+3MDxp@ zyQGhB40Sij2AB0Dh87)Pu_T54yPD*ras%yl>8 zh1XcZozCRkr0*_2ov!8@vtSm@idix<#y5vdU0y&hlb5$k%~i5CB|j<3tM-g>WyFH4 z@00bSxmtA6EX$+2cze^1PF0e&!Je>0nvvUNG}AYj;aU6UusEJaZA%FUoiO zWS?~Rz;5=#rJ}!j{*yP@`(F2Nckk_bR-^v2GEWPMhCqIEj5^*}0_m9O1e9eK1a z-xb9N3vw#7Bx}>MHYc8G$WOGs?j!TesD0?1x{uXK%d+OlT0qab{kqgK$PlI#_IL|viVQ&-K)$a(RuYg+QtS$URr*?rEetWC>L=6Qy?Tz#f<6lFiC8+DIs zUEO2bJvO?vCs?3A?RKLxpE!Q{^*=twN`(FLtP}3n8udHfo~mx!mH+3cO@E?usgIWB zr+W1Nv)MH@I#y>>HZAhK9_enbyWUWLYaJ){!oF> zdrG!^vOh1R<8J*`*kv+%d~C})4x1+ z+Ph{^kG&?R$^Jc&!fy3*@@yrq(zd&m1L9s~nkS<*r6*T>t+`S5Z%yXZeVUi;b`$g; zr(O5hiJ$6TI>EY0_OokF{(1M6NU7ja@rf}{nBsV zDbMVl*PS4-I_|_7+zGGixs|@^cG)~F+f!d@&zb;rtyZD0_H(j!VlOT9Zf#lS*7|iHcYE}3b$5%}mm{_55%L-RY|dQeI!&Ux z*r%^u(b=q5M&!EG=_YOcRDPB-Ke3bYRsK8iwfo(Fq;}H!ee2WKC+)0#kv(Dkk#)@a zqV>CWuk{J*+t#P7|7~4sU1wcy-C*sv2CNrYgVvBWY<=ANU-minW_yeE2llvZ{}l5a zbA~z7oNLZA&l3>rHYKxHPT;SR7wH@26#HiLLQV>Fr>vN^d6D%6>-Vg`x9_z6*j_X* zF~4PAZ|*T~H~-yy(EP6XsQDxF$L7z>XUyNoRj^^aB!+vbd4+ko`Azd0bGLb;d53wgd6!&8`?&d}`F(T0`JDNJ z`I0$izGxmXKQ=!zKQ;eq-)`Sxr{%idjn>EP1LoWIP4+?iW_!k-x6d}~%$U8?-ezyL zi}pI%qZiue+t0K1*?m^Us#;geHNl6iKeX<*x7!!kdHYs!|2)=#XTTK{VO%zmytXcbIsz0uBDKeT?N$HczF`l$79){pI7CTY%=%aU8f8oT7J z!)4|QGa!gIW>^e%M6B{Ld(LjyOZH)V!LHl0_ECG;K4OwdxejZ7!@NkgX`7499uv!6 z{HPqUj`b?*HFB&zYkk)`F5A9JI{j1o;lz%_>k{uzd@}LrE&p}P%eVZXczW@y;+EpJ z;*R1a#ZvLtidPr+6~~H;#g$@Qd};BO#Sd;hZR@tJcWhnQ`o?Ycw$!%gY}>f)tZiGi zU9jzjZFg;R&->%;@7VsAJJLH(+j++E<5Eje-prI_-+$PATs)&Se9ZbAso`gKFE#v$ zee9$fUbN+9TfSdBt=L=KTr5(2owdei#q{qIk>ragOmAU?ZCc}~+&0oe|XWwSuD7iZ* z>H5B8>L&5}E%r9+)z)hyj|Z%e+OyW(lDi*RZ?@iK-DCYBj!#O`lmY960!87#*^;0u z))KTys4z^5Cd`n1mKozE?TBz9GzZPMg%vLqTD(ShakpgojY5lez>7}`F_af?5n_Bv zm~l*a@kRT&=3!yRkChr$&U{spoH4Hy{=Up)&8y6*<_+dF^Cok;d9z%_|83J_-fDWy z+ssz;KJ#4jJ93r(J!YGEzkCYtPP0R@vE6*g^qG6jPV*6Sf%!dizWE<=Ipovk`Q{HK z#h;MR5dP3yZayZb%b$`=KOmPV{>1#L`8D(Breglm^qaqsPZs`4PT>ApUhqCEFP492 zt~GxvpD;Wq7d^ggUSR%SE^Iuc1d=x>|732H&kSxgUo*Fxe=&EN$IYGQo8}Jl4S6a2 zfxP^DUtWy9CofjV<)!N1&0+HsbJYAoUex|gUPym#npVO@R$jRB>((je|FcdtzhOPc ze8>D3Yl9^HJ~?@OwR}?bI=O)H6?r-Pmb{?-P)K!TjZ@3QtfQu7rA))JO<*O>s+BPv zYuzu&_+w%49YWtr>>m3J>r2){_Qm!l`*iE?tOxDu?V5d!eXYIU9*qbJn-b23_pBJWrQX zpK;lon3Tu=>M6^gcfU`ZVRk&*C3&tn-`*q78#4P6Md{@xSwDF>Dvv$GlGq`SUvD-( zZFz$!+0S-)i^(Rw_4LK|XGkgvMG9CMBC4{P4+TU#!WuiLHf$Yam2 z*d=p~H6+LCm1d(A$f94@7W-0DdDhF>CYQM8>5KJalhZ}c;-0oxpOfvLygVY`M`pA2 zNmH_3%h%1;+vID~th0VszP?5F_XEPZW5>T^{f4anfp~gO#{P~h_pUwflk)XB^1Zwf zu(IO6HUTV=m(Ufbt8tar=z4cV8!E?;$hUS2&PH(6^?)^Cw4x48T(0Dj?3}-rab<**(1K+WB*u|f08qTpUC&u%PYQomDlpk_Mfe- z%lGmwZ-@O}VSui0l=Y3~Vk?w)T93){J=vF|vM*k2uC(uzIesWUnCgzTelF|sGy7rF zCyO4JZ^-hGvSioRAC@_{%d)}pWKPcvS=UHDuaWg3mghe0=X>SndrjXjfBqM8Y;^f^ z^L$x0%e?olEyv{RM`XEAmbWB!N$s*9thY+u2S8XUP8b%wGN8e!uL?e)-xjkJZHAHTix-_h9 z+L-l~@5;Nk=Ny-Nsm!V926Q8O8hSc<9=aXff$l{6(EaEDI*1OT!{`V)ijJY<=mdHI zy$PK{r;pzw^*E@DdZ>>ck~0Cz%%F$SBj_wTht8u5=puR)T|$?S*JXzK@t24;&?Xw7 zEws&;5RK3n?VvBF&hMh%L%)yy0R5q=WsX0f7jTZ>FKVL+G>N9rEMszL9xb5jQ1-U9 zll4BvpU-+f^Iwf#hq7<2TUlR1L-fC)ccXux&$W|iP9L!kqU?Fwk#!p<*f_y9>IB=U z6KtbSu#GywHtGc1Xl=GpC)h@vU>kLUZPW?2Q770&onRYvf^F0Zwoxb8Mys`rI>9#T z1ly<+Y@<%Fjn-oub%Jfw2{ul!jXJ?L>IB=U6KtbSuyKNI)CsmxC)h@vU>kLUZPW?2 zQ770&onRYvf^F0Zwoxb8IKjpVwoxa@`!-aaU>kLUZPW?2Q770&onRYvf^F0Zwoxb8 zMx9_Ab%Jfw3ARxu*f_z)2{ul!Ep>uzsS|8VonTw)1lv+4*p@oMw$ur>rB1Ld_BKwi zEp>uzsS|8VonTw)1lv+4*cSU1C)k!c!M4;1wxv$6Ep>uzsS|9RVB6{h8z570y+8#oRGi?37n9?2??B#zzGSQkiZEEoRGi?37n9? z2??B#zzGSQkiZEEoRGi?37n9?2??B#zzGSQkiZEEoRGi?37n9?2??B#zzGSQkiZEE zoRGi?37n9?2??B#zzIp5ki-c|oFI2|%27+=gd|Q#;)EnlNaBPfPDtW}Bu+@;gd|Q# z;)EnlNaBPfPDtW}Bu+@;gd|Q#;)EnlNaBPfPDtW}Bu+@;gd|Q#;)EnlNaBPfPDtW} zBu+@;gd|Q#;)EnlNaBPfPDtW}Bu+@;gd|Q#;)EnlNaBPfPDtW}Bu+@;gd|Q#;)Enl zNaBPfPDtW}Bu+@;gd|Q#;)EnlNaBPfPDtW}Bu+@;gd|Q#;)EnlNaBPfPDtW}Bu+@; zgd|Q#;)EnlNaBPfPDtW}Bu+@;gd|Q#;)E1VNa2JOPDtT|6i!ItgcMFl;e-@UNa2JO zPDtT|6i!ItgcMFl;e-@UNa2JOPDtT|6i!ItgcMFl;e-@UNa2JOPDtT|6i!ItgcMFl z;e-@UNa2JOPDtT|6i!ItgcMFl;e-@UNZ|yznkNKE;e-@UNa2JOPDtT|6i!ItgcMFl z;e-@UNa2JOPDtT|6i!ItgcMFl;e-@UNa2JOPDtT|6i!ItgcMFl;e-@UNa2JOPDtT| z6i!ItgcMFl;e-@UNa2JOPDtT|6i!ItgcMFl;e-@UNa2JOPDtZ~G)|CvxP=C3oRG!| zX`GP832B^=#tCVhkj4pVoRG!|X`GP832B^=#tCVhkj4pVoRG!|X`GP832B^=#tCVh zkj4pVoRG!|X`GP832B^=#tCVhkj4pVoRG!|X`GP832B^=#tCVhkj4pVoRG!|X`GP8 z32B^=#tCVhkj4pVoRG!|X`GP832B^=#tCVhkj4pVoRG!|X`GP83G!*6ymqH?LK-Ke zaY7m=q;WzTC!}#g8YiT2LK-KeaY7m=q;WzTC!}#g8YiT2LK-KeaY7m=q;WzTC!}#g z1}9{2LIx*fa6$$rWN<yj%2d7O~P33;55#|d)dAV1aX33;55#|e3ykjDvmoRG%}d7O~P z33;55#|e3ykjDw~Nwd5zmVHpgPZbdR$MB>*daxz4D0mxSsCT)7^SY=U>nK>n)vsy`}T7w{-sX zmd?N4()mvjpQwgtgvO|jJjMEiyd!vyjCoizL?bjtJF1L1l`*F>=2Y?9!*UOgjyYBQ zCd!x%jM>1L4UE~qm<^2Cz?hAU*~plUjM>PTjf~mIn9~?@8e>jl%xR1{jWMS&=5)rK z&Y05~b2?*AXUyr0Im1|z+%t@gCeS3BLeppl&7yie^9++m3+Os@Jvx2-LHVhJx~PZx z=(6mGGbFRB4YY{{XbW9ISJ5`l3egCS(T=KB(=A#bm1A^9w-@U^);}e>iM}?`*CwNV zZ8F-|CZm0AGTPTBqkU~M+SewdeQlzzO-B3LWVEkMM*G?%G<#4~``RQlQ`NpU3C&cs zuTAu|iM}=oi}VrgYm=}@Rr}gxw69HaT=ZGm*CshGs@m5kIWD5~wTZqq(bp#W+GJ^8 zJ@nN>Up@5ILtj1g)k9xB^wmROJ@nN>Up@5ILtj1g)k9xB^wmROJ@nN>Up@5ILtj1g z)k9xB^wmROJ@nN>Up@5ILtj1g)k9xB^wmROJ@nN>Up@5ILtnl0)k|N!^wmpWz4X;f zU%m9zOJBY8)k|N!^wmpWz4X;fU%m9zOJBY8)k|N!^wmpWz4X;fU%m9zOJBY8)k|N! z^wmpWz4X;fU%m9zOJBY8C3iUsD|+dxm%h$~RA)k}Ga=QPkm^iGbta@b6H=WCsm`>N zRA)k}Ga=QPkm^iGbr!Ro#cXFW+gZ$Z7PFnjY-cgsShN&Sti=neA+5 zJDb_gX124L?QCW{o7uK7+ZJZq!facZZ40w)VYV&IwuRZYFxwVp+rn&Hm~9KQox^PB zFxxrIb`GB$`6gXa>!qIW&(J z&~@l~bocRC=GlWz%j@;Ia-XQGi^|;)vhJgD$AqlEUV1#&yaD}f^o{77&^M#^pl?Cn zioOkfJNgdvo#?yJccbq?-;2HveLwmE^n>V!&<~>@LGMNN{OVlx@VV^abJ@e^%I^f| z<9dE|F8ldhxz9)I{{ngp{UZ7$^da=i=)>q&&_~cmQN1hgTsgl|JpUOsa)juPu+uhD~w+q#EUAMcP?QUngJJ{|H zw!4Gv?qIt+*zOLtyMyiSV7oiywdp~#gYE8MyF1wK4z|04?e1W^JJ{|Hw!4Gv?qIt+ z*zQiYyOZtiWV<`r?oPJ5lkM(gyF1zLPPV&~?e1i|JK63|w!4$Tt}YI$nzO_0V6M9 zGV(%3UL^bHnA}lhqX{&LrclkxMY4ZX zvuF;@qXl#wx*k=YTqN67)%P+N!IO(*yM3~*Jh@1=D=Pa+=9GPP%NeF!BmUUct!c zGxGV2d_E(e&&cO9Qh(oJRPGs6pIphvD;aquBd=uSm5jWSkykSEDn?$#$g3E66(g@= z!C9XJ?xZ+geic^UzP9?55mAK+m z;)+v=D^4Y@IF-2KB=;B!V@q6dDsjcB#1*F!SDZ>*aVl}esl*kh5?7o`TyZLK#i_)# z#}ZeZO6G;kb~}0pdMA1pI*IE2P9?7SlsK;_89lEk89lEk89lEk89lEk89lEk89lEk z89lEk89lEk89lEk89lF%-$q0AyrN|EyrN|EyrN|EyrN|EyrN|EyrN|EyrN|EyrN`2 zi0XMo$>@1S$>@1S$>@1SiK9^BD3mw~C5}P~2kJfIdu5C|p~QJbiSvq*+(WL<)$@vy z(esLu(esLu(esLu(esLu(esLu(esLu(esM#-To!Hx+VKWu5QUAa&=2p{ali(TdL~k zl3d-=G5YSfBv-do_1$qvu5PL7nMsK=lai%pCM8SHOiGrXnUpL&Gbvem_gcy7WBq*A z^(>-f>A6bD(sPv(*TG71uA(FLieky)Xv%r1uInpuNzO}EUyD92XDlV_Tj;mZ@1WmB zzlZ)%-iwtudns}DQnKlV>t-d+WJ>mpIvdx}N?b!LaSg4Ex663DjJL~pyNtKXc)N_Z z%Xqttx663DjJL~pyNtKXc)N_Z%Xqttx663DjJM?v#z-Y)ye)r5hIPGLtcZIb{TJ%@pc(+m+^KPZI zb{TJ%@pc(+m+^KPZIb{TJ%`AwEG-Y(g}?n-Y(g_V#E?esDvZdZGTk7qyrQR-E>g_V#F5~So-Y(!p{U$PCMx$3iOT&WqH^zmsC;fLDxVpO%I8I*@>zlCI&?ky9O-wjBt>-t zx)D7MRX*&Mq^NF3cc42_Wx`%bis}G5hz_B{=m8#5`hD~V=nqx- z)L^f8?=!NlS626m_f+)?YTme6M4jDABsbCoqZ?{ zIVQggst)PLA^kX{ABXhgkbWG}k3;%#NIwqg$07YVq#uX$%k_AjM;+3SL;7(@zpzvv zISo~Z^y3iuEeF=sA^pNqRdq-|4(Z1s{lZdxL>)gk@DQdRA)ABXhg zkbdE$KB5lk$07YVq+hNL>LcoqexnZQ$07YVq#uX$%eBD=Ep4kTIHZb0syL*IL#jBWibJY6 zq>4kTIHZb0YB;2ZLuxprhC^yNq=rLkIHZO{YB;2ZLuxprhC^yNq=rLkIHZO{YB;2Z zLuxprhC^yNM1I3g`l{g&VI}MON?OAqH5^jIAvGLQ!yz>sQo|uN98$v}H5^jIAvGLQ z!yz>sQo|uN98$v}H5^jIAvGLQ!yz>sQo|uN98$v}H5^jIAvGLQ!yz>sQo|uN98$v} zH5^jIAvGLQ!yz>sQo|uN98$v}H5^jIAvGLQ!yz>sQo|uN98$v}H5^jIAvGLQ!yz>s zQo|uN98$v}H5^jIAvGLQ!yz>sQo|uN98$v}H5_uaylWVhzxtzBuCA7M4XS#T?`qyP zTrKY!bX~8>T*Js~7)UxuVv)5jJ%eS z*D~^2MqbOvYZ-YRBd=rRb&R}@k=HTuI!0c{$m^PFVB`&qyn&H7Fmk_K3;K-wT_iov+%MOHRP{V_ztQu|{cT{- z-TV3EbU&Y*?iUa1v-Feh{o-L&{iJ)pcvw`fCdn502Z`EN9l2t9!KeMlpaUvag-iM>2Z`E zN9l2t9!KeMlpaUvag-iM>2Z`EN9l2t9!KeMlpaUvag-iM>2Z`EN9l2t9!KeMlpaUv zaf}|v=y8l5$LMj49>?f$j2_46af}|v=y8l5$LMj49>?f$j2_46af}|v=y8l5$LMj4 z9>?f$j2_46af}|v=y8l5$LMj49>?f$j2_46af}|v=y8l5$LMj49>?fW{%)Wg!Et&V zr^j)69H+-|dK{<6ae5r5$8mZbr^j)69H+-|dK{<6ae5r5$8mZbr^j)69H+-|dK{<6 zae5r5$8mZbr^j)69H+-|dK{<6ae5r5$8mZbr^j)69H+-|dYqug33{BM#|e6zpvMV% zoS?@EdYqug33{BM#|e6zpvMV%oS?@EdYqug33{BM#|e6zpvMV%oS?@EdYqug33{BM z#|e6zpvMV%oS?@EdYqug33{BM#|e6zpvMV%JRn!Fzbb!c><#E|qi;mtguWTQ2Yn0r zR`hM?+tGKR??m5)z8ifH`d;*X==;$RpdUm(gnk(P2zoE7pVJ+X^D$NZobG^}kE!Zi zwFl&UOxN|(nFDeKTkF@mY7fX2Y*l?tJRn!FRrRjg19AmhRqv`jAXl(e^{!g^>uRXp zReONDY7fZuXIbsZ&mR|chVCnV11DuB+ z;5_^Q=ivu94?nV4>^L=V!%LAp37>9|)O(Jl^3I#jibgOUza?c$)MLsh#tDCtnuE)GgMRJDtPba7D5 z#`ns)9{q!KagZ(!(#1i#I7k-<>Ea+=9Hfhbba9X_4${Rzx;RJ|2kGJZfTp zOC_I?zvrj3-NJ0QNO!ufv)v-ysp@REFxxH6b_=uJ!fdxN+bzs?3$xwIY_~Got;}{S zv)#&Uw=&zU%yuiY-O6mYGTW`pb}O^p%51mEZwh=>{@UOSdKf)|&Z2YZJi34`qDRps zw2g*ngvMwG)!uKT+S{o1HmbdiYHy?3+o<+7s=bYBZ=>4VsP;Chy^U(+uhPn#FBGDx zx~PZxs8;eqIi{*w$qR*$s#?kIJok2vL}xKd9<+Z|AwU^W58c?j1b$ z4xW1l&%J}^-obP4;JJ73+&g&g9X$6Ao_i)P)m z&z);fxgHyZ?PVqW8 zC6zpArlb;8ea|~3m8j}_Uil|2B#%?P4o>kpIK}JW6t9C*ybj8r*Jq60-905;>$CJd z@03)os_%KHq;gSS0jGEcoZ=O5idVoXUIC}2uY1h2^rfozTTV+~s(QcWwDhH__ghX& zU#fb)<+Svrs`pz?OJAybzvZ-C6MInfRCEKn5j_n(9X$`-j_yErqJ8M@>L_dUn82t!(FRE9-riD(bdIfA+=%o5dRIh+d3!_v& zBiB!+&EKG(MgJE4JM=;HbLi)p`3vYV^o!`1(1*}3qYtBBK_5XMMIU3He_;I|S^p>W zYv@0tUuUoW3;GT8o9N@{x6mIk^2g{;(4V6JivA4!H}v1ppQFD(kE_ZR&SRo_2g|fv z;Z)T-Sf=F)r>fq;GHs>N44Ost)6Z$S+Nr8{WKGM}PSy43DX4yGIc=SaZa_C`&2m;I z$&#}&)lFzGx`leqL5n=HmGy0`pUe7r%&>!X{q$*x$v}{6UzK@PN=GP zu};gq1iDU&@IFc;&z=2VObw z%7IsoT*KG-l~;~j!&g;aIYxQq$TfUb<&`7X@Ku#pj-0c-MpSv_$R|Gfi1Nyj>-nn6 zD@U&9t17P?xt_18ymI7vzN&WW$n|_x?bMO$`Krn*NB&n;UODo&j#ZUcj{F_^K2hbB zBmbC&s`AQ_zZ9;jymE~4%7IsoQC>MldF2@8m1C4wj!|AYMtS8J<&|TUSB_C$IYy7B zW0Y5pyi3wOue@@M^2(9>d{mWJj@;*?s=RWH^2#yFD@X40QB__!a-WZ?^2(9>d{mWJ zj@;*?s=RXKJ|9)(l_U50s4A}#;FV*PSB_C$IYxQq80D2?lvj?tpVFC?SB|`&QdM3#@_tHHdF9CaDOKf_Bk!kF zl~<0upHfv`IdWf+t}Cw`qr7sA^2#yFE5|6W9HYE)jPlAc$}30yX0odC%8|c^t0R?H zj!|AYMtS8J<&`6UJy%tEMldF8+>2VObw%7Ir7ymH``1FsxQdF9Bb zGpfof2VObw%7Ir7ymBn%m18Nd9C+ne$}7iGUODi}fmaT^a^zj4><3GEbmmEfmaT^ za^RI?DX$zki&j-$IdT@Qio@ZRV=1p3IY&}eUO94(q^i7f`25I$R}Q>#;FSZf9C+ox zD+gXV@XCc(F1&K#l?$(2c;&(?7hbvW%7s@hymH}{3$I*w<-#i$Ub*nfg;y@Ta^aN= zuUvTL!YdbEx$w$`S1!DA;gt)oTzKWeD;Hk5@XCc(F1&K#l?$(2c;&(?7hdT z4_4_4_4_A71(J%7<4z zyz=3d53hW9<-;oLdK z!(nPTObv&r;V?BEriR1RaF`knQ^R3uI7|(Pso^j+9HxfD)Nq&@4pYNnYB)>{N2uWl zH5{P^`L_sV&m5tKBh(=O?hTLVu{c5vN2uWlH5{RaBh+w&8jeuI5o$O>4M(Wq2sIp` zh9lH)gc@e4VU`+ZsbQ8HW~pJ88fK|smi;hG4YSlROAWKsFiQ=y)G$j8v(zw44YSlR zOAWKsFiQ=y)G$X4bJQ?L4Rh2mM-6k-Fh>n@)G$X4bJQ?L4Rh2mM-6k-Fh>n@)G$X4 zbJQ?L4Rh2mM-6k-Fi#Eh)G$vC^VBd;4fE76PYv_bFi#Eh)G$vC^VBd;4fE76PYv_b zFi#Eh)G$vC^VBd;4fE8nKn)Ajus{t9)UZGe3)HYc4GYw;Kn)Ajus{t9)FA&ho493x z8WyNwff^R5VSySJs9}K`7N}u?8WyQxks21MVUZdZsbP^C7O7#88WyQxks21MVUZdZ zsbP^C7O7#88WyQxks21MVUZdZsbP^Cj#9%>YB)*_N2%c`H5{deqttMe8je!KQEE6! z4M(ZrC^a0VhNIMQlp2mw!%=EDN)1P;;V3m6rG_PHSfYj{YFMI%C2Clrh9zoPqJ|}E zSfYj{YFMI%C2Clrh9zoPqJ|}ESfYj{YFMI%C2ClrhGnTi|LJ!dO`u6Mg{ILAnniPH z9xb5j(DmqZx?A3HFUz^5>V6&>KnKwwbQm2$ zN6|5K9GyT9pf{mY=!;SPykJ?*4<8VH8TxYcH_=z1uS8#k-i^K*eGU3r^mXX#<<6O9 z^9I&`8+{}CCiKndJ?LA|x1w)D-;TZmeJA=Z^xf!t(D$P6L*I{n0R15PA@sxON6>pw z{k&jVoS>?oZ!U`yRQ2=CWpRS4eqOLF=ZD8c{|5am`nTxcp%0>;LqE^VUqFwcUqruz zK7@W5eHi@;`Uv_c`WW;41MC0D`ahvxL;o55IzRmv^c(0m(Z|tmsmd9b>gnhi=q9um z-JWI3A>56jt<9A7z`Qq{YsmgQ_pRqvi! zma{2Uy?bhzv#Dh{o6_y-)%9i0rj|LIT9z{?saejTRC7ABoI&aOLDq4poI5=%?{F;n zZAbYRTF?ZVL{n%Q&7fH{hvv}&x(;2BY98z4u}&WA@?K9L(LC1Wy`HM(u`ciRR5g!v zxi+P$d92HOy?aIXpqj_Jyw_9JJl5sCo~q`tF7NeJHIH?9ucxYctjl{nRn22v-s`Dq z9_#X6uTNAyV-%Gu_o8w=OjO=wifUTx@^0<{QB7-|wASU_oUZ>Ss%fpuyE#=&YhB*W zscKs5@@`I5(^{8zbE>aLHLZ1dH>av;t;@SPRZVMM-p#3MTI=#|PF2%dmv?ijn%26! zn^V=a*5%!ts;0Fr@8(oBt#x@fr>beK%ey&MO>14=&8ccy>+)_+RnuB0t##5`C#`kT zS|_b_(ps1IXgXdqSeN%`s+z&Nyhl^j4A$j6nyO~7F7MG)HG_3|kEW{WtINBvW1|0p zegpj``Z)S6RZ>V9^=)|b$M^1s%fgrdlS`~`j9l$ zB~71^b-j14E@@KLd*|wsCRM$6t}ba()z8-Jg1?Sj_Ty7PLAs2s7{XR@*YGy zLyj8cs6mbz^4j_mxoV&}YRGG=s^+L6udS+@qlUb;s%nlJ^4hAZIg)?Z5Y-$t$WenF zHONte95u*MgB&%;k^HNPjMp5=)m2n;)F4L>a zs6mbz>as6mbzy)F4L>as6mbz>a zs6mbz>as6mbz>as6mbz>as6mbzu-qRd4>as6mbz z>as6mbz>as6mbz>a zs6mbz)%a^+-NXyS<(@ZqktR* z`6oM*%qs$WcI!0&*0PqktR*`6o zM*%qs$WcI!0&*0PqktR*`6oM*%qs$WcI!0&*0PqktR*`6oM*%qs z$WcI!0&*0PqktR*qZT=8k)swlYLTNBIckxk7CCB> zqZT=8k)swlYLTNBIckxk7CCB>qZT=8k)swlYLTNBIg)#NBu6cyIckxk7CCB>qZT=8 zk)swlYLTNBIckxk7CCB>qZT=8k)swlYLTNBIckxk7CCB>qZT=8k)swlYLTNBIckxk z7CCB>qZT=8k)swlYLTNBIckxk7CCB>qZT=8k)swlYLTNBIckxk7CCB>qZT=8k)swl zYLTNBIckxk7CCB>qZT=8k)swlYLTNBIckxk7CCB>qZT=8k)swlYLTNBIckxk7CCB> zqZT=8k)swlYLTNBIckxk7CCB>qZT=8k)swlYLTNBIckxk7CCB>qZT=8k)swlYLTNB zIckxk7CCB>qZT=8k)swlYLTNBIckxk7CCB>qZT=8k)swlYLTNBIckxk7CCB>qZT=8 zk)swlYLTNBIckxk7CCB>qZORLg7a5!{tC`t!TBpVe+B2S;QSSwzk>5uaQ+HzU%~Aw zxP1k;ui*9-+`fX_S8)3ZZePLeE4Y0Hx3A##75u!yv0mX=uW+naIMyp1>lKdm3deed zJ+?xRE4E%?SfR%idR(E$ReD^d$5nbozT&2fVdR(Q)ReD^d$5nbozT&2fV zdR(Q)ReD^d$5nbozT&2fVdR(Q)ReD^d$5nbozT&2fVdR(Q)ReD^d$5nb< zrN>ozT&2gh@UU*$!b4TPe%lrvs_OOIw(w9@uiv(XhpKx0wk@wV(eRlQfdEqhN@?-g&$-cx;vTp4Z)@l;=iz8w8c z^cCnU(O02&qpwC^gT5Ah9jfggRw}p7BdcSvDh^MOed$)yns(Qb7TZpHs_j|W-NE?T= zaY!47v~frqhqQ4>o6q;#e7@i2^ZhoT@3;AUzs=|SZ9d;`3mbK2z2CbnY*f|zz1zY@ zRlVQ4Eo@ZP`@P%3MpeDvyDe-~)%(5MLP%ZL`@P$IzTf8a{WhQPw}qVd%Hw*!cU#D* zs`q=hg`BE-zjvFzuG8kP>$LgnI&J>CPMg23)0R*Fb5)5VnM{C4?;@YzbjY2wOtf62g`cwuG=Hge@U#31LeJTSC|p!j=%W zgs>%qEg@_PVM_>GLf8_*mJqgtuqA{oA#4d@O9)#+*b>5)5VnM{C6u$Ndt^T-TS7UT zQdPEuayF%^YzgITN>$ks%Gs2vvL%$WDOF`l2wOtf62g`cwuG=Hge@U#31LeJTSC|p z!j=%Wgs>%qEg@_PVM_>GLf8_*mJqgtuqA{oA#4d@O9)#+*b>5)5VnM{C4?;@YzbjY z2wOtf62g`cwuG=Hge@U#31LeJTSC|p!j=%Wgs>%qEg@_PVM_>GLf8_*mJqgtuqA{o zA#4d@O9)#+*b>5)5VnM{C4?;@YzbjY2wOtf62g{H?ku`jj*GG-lsk)5l`Wy%S){6L z3FXcrRb@*kcNU4lmJqgtuqA{oA#4d@O9)#+*b>5)5VnM{C4?;@YzbjY2wOtf62g{H z&KPxD%9aqegqE@;ge@U#31LeJTSC|p!j=%Wgs>%qEg@_PVM_>GLf8_*mJqgtuqA{o zp`2BUW96(;RoN2qw{t_-62g`cwuG=Hge@U#31LeJTSC|p!j=%Wgs>%qEfH*qU`qsB zBG?kamI$^)uqA>m5p0QIO9WdY*b>2(2)0D9C4wyxY>8k?1Y08562X=TwnVTcf-Mnj ziC{|vTO!yJ!IlWNM6e}-EfH*qU`qsBBG?kamI$^)uqA>m5p0QIO9WdY*b>2(2)0D9 zC4wyxY>8k?1Y08562X=TwnVTcf-MnjiC{|vTO!yJ!IlWNM6e}-EfH*qU`qsBBG?ka zmI$^)uqA>m5p0QIO9WdY*b>2(2)0D9C4wyxY>8k?1Y08562X=TwnVTcf-MnjiC{|v zTO!yJ!IlWNM6e}-EfH*qU`qsBBG?kamI$^)uqA>m5p0QIO9WdY*b>2(2)0D9C4wyx zY>8k?1Y08562X=TwnVTcf-MnjiC{|vTO!yJ!IlWNM6e}-EfH*qU`qsBBG?kamI$^) zuqA>m5p0QIO9WdY*b>2(2)0D9C4wyxY>8k?1Y08562X=TwnVTcf-MnjiC{|vTO!yJ z!IlWNM6e}-EfH*qU`qsBBG?kamI$^)uqA>m5p0QIO9WdY*b>2(2)0D9C4wyxY>8k? z1Y08562X=TwnVTcf-MnjiC{|%TVmJ}!HxpOAK3L*b>8*7`DW)C5A0AY>8n@3|nH@62q1lw#2X{hAlB{iD63&TVmJ}!HxpOAK3L*b>8*7`DW)C5A0AY>8n@3|nH@ z62q1lw#2X{hAlB{iD63&TVmJ}!Hxp zOAK3L*b>8*7`DW)C5A0AY>8n@3|nH@62q1lw#2X{hAlB{iD63&TVmJ}!HxpOAK3L*b>8*7`DW)C5A0AY>8n@3|nH@62q1l zw#2X{hAlB{iD63&TVmJ}!HxpOAK3L z*b>8*7`DW)C5A0AY>8n@3|nH@62q1lw#2X{hAlB{iD63&TVmJ}!HxpOAK3L*b>8*7`DW)C5A0AY>8n@3|nH@(t#}<*wTS5 z9oW)=Egjg>fh`@_(t#}<*wTS59oW)=Egjg>fh`@_(t#}<*wTS59oW)=Egjg>fh`@_ z(t#}<*wTS59oW)=Egjg>fh`@_(t#}<*wTS59oW)=Egjg>fh`@_(t#}<*wTS59oW)= zEgjg>fh`@_(t#}<*wTS59oW)=Egjg>fh`@_(t#}<*wTS59oW)=Egjg>fh`@_(t#}< z*wTS59oW)=Egjg>fh`@_(t#}<*wTS59oW)=Egjg>fh`@_(t#}<*wTS59oW)=Egjg> zfh`@_(t#}<*wTS59oW)=Egjg>fh`@_(t#}<*wTS59oW)=Egjg>fh`@_(t#}<*wTS5 z9oW)=Egjg>fh`@_@_%SM6F4b~yZv|d%BXypI=zB?c)CceJ! zf9KQB^mf-g^{c9#Bv@*zS#M94TH)LM6Y^m~K1|4m3HdM~A136(gnXEgj}Y<^LOw#s zM+o@{As->+BZPcZ-m=PjRNm6io&B8QRKk1GQFFrLYjZ4!j<`0lbqicY*dEkbzpO%J5#W2)tj{>;uJb*dKfl zwEK7iT`voxcaa-j3HAfco`LQ$aD;FWmJGs@L0UDdQb){^L0UD-&@36GRkIAul0jH9 z2ulWO)hs(=mJGs@L0B?KDYYYJ$sjBlge8NpWRNpU2I;NnhGxkiXO;}clEGLq7)u6Y z$zUuQj3tAyWH6Qt#*)EUG8jt+W65AF8H^=^v1Blo491edSTYz(24l%!EE$X?gRx`? zmJGp?Ay_g5ONL;{5G)yjB}1@e2$l@Nk|9_!1WSfs$q+0Vf+a(+WC)fF!IB|ZG6YM8 zV95|H8G)-(B(NlbB?&A^U`YZ? z5?GSJk_46{uw*Ef48@Y6STYn#hGNN3EE$R=L$PEimJG#`p;$5$ONL^}P%IgWB}1`f zD3%PxlA%~K6ibF;$xtjAiY3FaWEhqV!;)cGG7L+GVaYHo8HOdpuw)pP48xLPSTYPt zhGEGtEE$F+!?0u+mJGv^VOTN@ONL>|Ff194CBv~~IF<~@lHph~97~2{$#5(gjwQpf zWH^=#$CBY#G8{{WW65wV8IC2xv1B-w49Ak;STY<-hGWSHEE$0%Bd}xymW;rX5m+(; zOGaSH2rL*PIG6G9RV#!D>8Hpt$ zv1BBcjKq?WSTYhzMq@n=vGz%clQ#8ACE!!yCNz=dE6OoO)SZ&Ep2 zB`gH51Fr{f0IdX*ve`o34c-IZ3l@Q9a}t}A64zMb8cSSbiEAuzjU}$J#5I<<#u3*z;u=R>U^|TG`eI=9B(>ApCl}u7k+tA)uGD$scLtDFblJd~d)^44oJT$xkv>x>&<)NXy zuVj+)(C}W+-d8e7d1z>Bw@y;d*l%s^)=A1kLtDFbl5)myfYLZgJ$A*bYpyEcVtJ%V zy4te+G-$PcGPymO+@4HsPbRk~i_^|pZciq+CzIQg$?eIyQfRK@mfMqcjbLcGJ=wF| zp6pp}PxdUgCzIQgo#pmqa(l9~+@4HsPj;5ulbz-E6fBv7B~!3u3YJX4k||g+1xu!2 z$rLP^f+bV1WD1r{!ICLhG6hSfV969LnSv!#uw)9BOu>>VSTY4mrmCbWys0WFLu<>X zs-z69t(l72r>dl?v~Sl7Q&m!icI7fvYBx0RG!?Z^Ra#25Z|&Mt)IL>dv3+ZIrV-aP z;+jTW(}-&taZMwxX~Z>+xTX=;G~${@T+@ha8gWe{u4%+Ijku-}*EHgqPF&N8YdUdF zC$8zlHJ!Mo6W4U&noeBPiEBD>O^1Iv{L|r|4*zucXTU!L{u%JkfPV)3GvJ>A{|xwN zz&`{28Su}5e+K+B;GY5i4ESflKNJ3$@Xv&QCj2wup9%j=_-DdD6aJa-&xC&_{4?R7 z3I9y^XTd)U{#o$Pf`1nLv*4cv|19`t!9NTBS@6$-e-`|+;GYHmEcj=`KO6qp@Xv;S zHvF^UpAG+P_-DgE8~)kw&xU_C{IlVo4gYNT=fFP){yFf^fqxGCbKsu?{~Y+|z&{86 zIq=Vce-8X};GYBk9QfzLKNtSF@Xv*RF8p)hp9}w7_~*hu7yh~M&xL<3{Bz--3;$gB z=fOV@{(11vgMS|U^Tc22&4Yg){PWJho9YABA&)NB$eL*=~>Aj#FHnck-FDQo%?Rwz_<#4IcJlhN8@C)Sd3*_(% zdiEu;-vNE@_}HfSMj&_ddvg|tBnX@eHh1}&rwT1XqT zkTz%`ZO}s6poO$S3u%KEVaXyaS%f8vuw)UIEW(mSSh5I97GcREELnsli?C!7mMp@O zMOd;3OBP|tA}m>iC5y0R5tb~%l0{hZlCC-0doQVk4Htkff(yY#;1VzmE(QMvz5=cQ zSAwsCtHCv3wV`VOHU^u31z$=ToyC;SV$H0yvzkvQ)XW#5 z#;AoFP4X7IUb=U>*qx`|(PHIxC*j2$>BEsL*}sbY7-#!&`U%D&;J%Qc|)VvAjw-%d3=BZAUDx zQqJ-!C577&%c~Ods)W2MA+Jivs}l06guE&tuS&?P67s5qyec8DO314c@~VWqDj}~* z$g2|as)W2MA+Jivs}l06guE&tuS&?P67s5qyec8DO314c@~VWqDj}~*$g2|as)W2M zA+Jivs}l06guE&tuS&?P67s5qyec8DO314c@~VWqDj}~*$g2|as)W2MC9g`!t5Wi+ zl)Ne>uS&_QQu3;lyecKHO3ABI@~V`)DkZN<$*WTGs+7Fa+7D7xDS1^&UX_wprQ}s9 zc~weYm6BJQhf8>?gQetEDS1^&UX_wprQ}s9c~weYm6BJb$|$umO0A4iE2GrPD77+5t&CDDqtwbM zwK7Vrj8ZEjH_FJ3GD@usg_lukWt3VOrB+6%l~HPClv)|3Rz|6nQEFwBS{bEQMyZui zYGssK8KqW6sg+S`Wt3VOrB+6%l~HPClv)|3Rz|5U#m=SJxs*~{N~tZS)Rt0eODVOb zl-g2CZ7HR;lu}ztsV$|{mQrd%?Ev3|!Qff;nwQ@?WoKh>N z)XFKfa!Re7QY)v_$|<#SO0AqyE2q@TDYbG+t(;OTr_{N)XFKfa!Re7 zQY$An%E^s#O0AqyE2q@TDYbG+t(;OTr_{N)XFKfa!Re7QY)v_$|<#S zO0AqyE2q@TDYbG+t(;OTr_{r;Eu++yQEJO5wPlpr zGD>Y3rM8SxTSloZqtupBYRf3KWt7@7N^KdXwv19+MyV~M)Rs|d%duoRmMq7TT5Wa%&6@>qr`qfq5-_)-*wEMAtQ@`5K?#I5u*;hFG3TI#8>?@pI!Pym@UBTHE zoL#}$l~}S8OIBjZN-SB4B`dLHC6=tjl2-};D&b!x{Huh2mGG|;{#C-iO88Y?UHP_)cs$q$wEpBO&-#B9(WlT1uqA$ z0Ivjp58C^SR%tV|wf0xZhZx$ru&d-lE*Aa;yb-(!ycxU&ycN6+ydAs)><3zVy$T<) z3LmlxAF>J`vI-xvN+oM?-3MBGy$T<)3LmlxAF>J`vdVjivvxmrmG?0C2)InWwN>77 zumXJFj=QF|@8@ZMHTqeNepaKO)#zt6`dN*BR->QQ=w}V#*ARXU;nxs;4dK@iehuN* z5WbQt&`PdAE4c!#_bc zg07S|nD4y?|7-BS2LEgDzXtzn@V^HCYw*7Y|7-BS2LEgDzXtzn@V^HCYw)jye=YoL z;a>~?TKLz(zZU+r@UMk`E&OZYUkm?Q_}9X}7XG#HzYhQF@V^fK>+ru0|LgF-4*%=$ zzYhQF@V^fK>+ru0|LgF-4*%=$uY-Rb{OjOf2md)>Ap|2p{B z!M_gvb@1!0LAn#7ci@0_heYedgLa4H4fx-H{|)%xfd38n-+*6FdZ`@sq!(!A`v&}P zz`q{;_3*F9{`K&$$Nu&3uZMp<{OjRg5C3}j*TcUa{`J_u9{%<4ZxDZlw?X`dcJF$F z_zmse^#<`*3QeCI;NJlM2KYC?zd`&Hb=K~oZ4keq-9y_T{)yg3_&3785&n(vZ-jp% z{2Srl2>(X-H^RRW{*CZ&gnuLa8{yvwzuqw=JN2Fx(Cn{*zY2b>11I~nl9ue(IzXV^ zd#{4O3VuDMCp-0I4`}vR!CwXcCipkOzX|&{!M_RqP4I7me-r$huzwT$o8aFB|0ei1 zVgDxhH^ILd{>|`jhJQ2so8jLK|7Q3%!@n8+&G2uAe>41>;ol7ZX81S5zXkp+@Na>C z3;bK)-va*@__x5n1^zAYZ-IXc{9EAP0{<5Hx4^#@{;lwDg?}sjTjAdd|5o_7!oL;% zt?+M!e=Gc3;ol1XR`|EV|0euz!v7}xZ^Hj3{940L<*W6^RHjSwZ(;vi*k28QHT>1^SHoWoe>MEo@K?iM4SzNK)$mutUk!gX{MGPR z!~YL&nOgaOs1IORVW`%>y|ncm`Id$4d17Vg2qJy^I03-@5*9xU90g?q4Y4;Jph z!aZ2H2MhOL;T|m9gN1LS|F_Zq+vxvo^#3;ce_Q&m@ZOff=L@Ze@U|3gXg$EUrSSRQ zJ21Qh!#gm%1H(HoyaU5KFuVi9J21Qh!#gnSg<&rYdtulM!(JHn!mt;Hy)f*BVJ{4O zVR#pYcVT!JhIe6j7lwCXco&9uVR#pYcVT!JhJ7&XgJB;G`(W4y!#)`H!LSd8eK72U zVIK_d!SEgo@4@gM4DZ449t`in@E#2B!SEgo@4@iC&Q^Kv>#U*8Pkvu#4Q+n%`^<>= zr=FguQrV9I$AaU)@!$k-A~*@03{C;3g44k1;0$mkI18K&&H?9w^T21oXTj&d=fU~l z25=)-1#SX2gImC@;G5t!a67mI{0C^OlKxZAG8o!wivQHJ42HIv;y?8)gHTTp7#;`a zgN?wJU~8}q*bzJp>|v;R_=ee_o&A73|A0LIfIRce#qGmIr|Z3 zKjQ31oc)NiA940$&VJ0XFulbC!GC+v!8JG6V86Z*-yF3`;@D^Pr1tbl&ic? zxyt*LtGrLS%KMb7yw3>#8R0)8{AYy!jPRck{xiaVM)=PO|2g45C;aDx|D5oj6aI6; ze@^)Qgx^p2{e<67`2B?6Px$?W-%t1&!q*VKhVV6nuOWO5;cEzAL-+%PKS1~cgg-#| z1B5?7_ydGLK=>~R{{`W{Ap94E|AO#e5dI6oe?j;!3I8SGza;#Zg#VK8UlRUH!hcEl ze-Zv)g#Q=e|3&zJ5&mC<{}{}tiCBK%i`|BCQm5&kQ}e?|C%gg;35gM>dw z_=AK$Nce+R;Ce-XQp=Or}HM>lx*=0h_E)!~YnNYLKgqmF@ z)a)|n#B6BHKFmJMKFmJMKFmJMKFmJMKFmJMKFmJMKFmJMKFk4_126|*4!|6MIRJA2 z<^aqAm;*2eU=F|>fH?qj0OlafL70Ou2VoAv9E3Rta}eer%t4rgFb81{!W@J-2y+PL z5X>Q%LokP64#6CPIRtYE<`B#wm_sm!U=G0?f;r0zd(B;zmjgz?Trdx;18Nq5!e|zO zP_qbxnnfVgECQG1&Qh3c&w)M|0E1u%%mTAPi!qxR!%A0$3oBiQrs1&CWoQ}>D_w@B z;jq$WXc`VHU52LNu+n8{8V;*3WM~==n=cibhQnw$jE2K#IIJ8{7;+#78*;EA2ODy* zAqN|BuptK8*;EA2ODy*AqN|BuptK8*;EA2ODy*AqN|B)cdM-IklFk z4`%ymVFarpSQWvl2v$X~DuPuJtcqY&1gj!g6~U?qRzjZ$ieOa)t0Gtx!Kw&W zMX)M@J-OJBiw(Khkc$nu*pQ12x!9144Y}Bmiw(Khkc$nu*pQ12x!9144Y}Bmiw(Kh zkc$nu*pQ12dDxJL4SCp*hYfkykcSO<*pP<}dDxJL4SCp*hYfkykcSO<*pP<}dDxJL z4SCp*hYfkykcSQR)r+fi_0@|r)crJ}?xzWLKTW9XS)s1?g}UAs>Uv*zFR1H%?W?ye zRBu_R-m*}=Wubb@uDe(xyskgp8p&-<=SDIg_KN`<;M7wXzvsB3efuFc(X)`|)5GqhGrsQJmlB2f3kwVwd370V|@`J^bH z6y=kmd{UH8jQOM}pA_YjqI^=6Pm1!fCm(zAu_qsU^0DW5m3XDDh%{eLsQGe2&6g8u zzMN3=<%F6qC)9j7VG7iIIqhq{oKW-SgqklW)OX{v(p4k!VnH`~?*%9iQ9ig7t5$c&8p;^@mt6E`I zE39gTRjsh96;`#vs#aLl3aeUSRV%D&g;lMvsufnXsUawn*zFbsgYd!~KeJrn9GPpGRrp`Ixg>X~Apo+%dUnPOoc zsAr0`ue)bL-8~cP?wLD5wcoHasC!e|*S#sB?oA1GZ%U|pQ$pQ66PlMe0sn9U{-F(} z(}vP%L+P}kblOllZB#lHt_`YdgX-F#x;Ch;4XQg)XRF+aI%{Y>^AmN}(0b-=DTTI_ zLR)gIEjiYf9BWICwI#>el4I>?TiemLwxexrN88$twzVB?YdhN3cC@YSXj|LSwzi{f zZAaVMj<&TOZEHK))^^z04m;anXFKd{hn?+cTifA3+slSZ*IqUl+7(25*N=3R4y3LFsp~-MI*_^!q^<+0 z>px(=kS1F7pk>N=3R4y3LFsq26Z9VwBHlt@QPq$4HLkrL@h ziFBkyI#MF15&ks7pGNr82!9&kPb2(kgg=e&ooU@V)4Fx0b?Z#))|u9=Gp$=^TDQ)$ zZk=h}I;-Awl8&u)>rCs`nbxf{ty^bw+Zp>iqu$P_w+ps)!L}~g)&<+TU|Sb#>w;}v zu&pcMyAr-D;ky#PE8)8mzANFo68?0;pHBGG34c1_Pbd88gg>3|rxU&#;kyyO8{xYV zz8m4Y5xyJYyAl2jO6?3v?F>ro3`*?`O6^R}p2^uWIeR8&&*W@(T9fXyCf#XGy3?9; zr#0!Wnp@?%<5#=mSG(g^yW>~8<5#7r)S153oBu!0z+_yVC>g zP7km47CZu%ri;^pGVJT@P7eXzfl9 zSz>7I&RJS{rc!tecq~{SYydU{+khv6ZNYY6d+>bl0zW4}G&JFtHy{5`>5AbBelS-kx~>ye%%6&a2I%j~zlU2C7E zwMTSZtBx3w^S)i_^u#mw#54EAGxx+Z_rx>z#54EAGxx+Z_rx>z#54EAGxx+Z_rx>z zly2V;r=A=X>d8T&o*WeF$w8r>92DxwL7|=;6za)Ap`IKR>d8T&o*WeF$w8r>92Dxw zL7|=;6za)Ap`ILcJ!u7c%8ylPU(XB*Q|zaOXX7`{#&4XB-#8n;aW;PAZ2ZRA_>Hsi z8@-%nB`KU!J?*XBFbse}Fa&0S*F5oDFI$Ku0tdAkTbXAG*Is*)4oOoglAb9X%?u;UF!l( z6zZu5;l&)egd>`nrXzn~Uo-i&ucrxwcXOnOBbv*tBj#6oOIH@=F^*`Ja_ws-zi*wAzvRV_9&-A2{lm?bpbMzsQ1h0t^xMYmC{0A~B9 z+o)CmGc?^s(QOpnM$v5)-A2)E6x~MAZ4})`J=1MeD}WiAZlmZnsujR&-*g+*3Sfq& z+bFt?qT49CjiTEqx{adSs8#^8kfz%xx{adSD7uYm1u#2qx{adSD7uZJ+bFt?qT49C zjiTEqx{adSD7uZJ+o)FbG9J@y6x~L(qL=NPZlhY!%g}TiMYmCO8%4KKbQ?vtQFI$c zw^6NsrSRxBif*ImHmdckl*8yYif*ImHi~Ye=r)ROqt0|2b*9@Wx{b>3b<)1+Hi~Ye z@_}~5bQ?vtQFI$cw^6NvWeld8~-a2Ia)|0Wf4jEcc z#@;$)Xf1-hb;!_qGWOOXL+i=dTZas-MXLj z$k5svdy|o&wKeu8BSY&W6?xV0SWl^lnp>oM|B9XZYi}&FUa@#yvSX~aciOM zJx3PuPaLs!s)+h-Z$7f)T17`_tyK}V-rj{|#~Tl;12PO>A`@3MC%8Ct)q2tQDSA1J~P6yXPo@B{W{C8ZQUP=p`2&z&dE`&=LJ zDo`s9>4@D0z0VBrYzxV|jnrLUFuM94{2d3&rt5alB9*FBHcM#qmOMyigo36vqq2@j`LDP#iB5#|y>v z%tdo~aPvZOU9TCM7mDk-EkpA{aXoWkXx7H@LUFuM94{27Wsl>9;yilB$J&qTO z)3V3$LUCI5I9@1D%O0m?kK=#h_@6lbCyxJ#K}#A(^%_=h;2A&zH=;~C<3hBz&I91jr3 z1H|zFaXdgA4-m%##Hssn>VBMBAE(yGsr7MM_Bi!DPRkyrrpKx2aq4)SIv%Hv$CW;% zk=h-ncE@SiTBrv<@fx)=nkRt=8n^h_z4&bgT6_Ibv;70^Mq@PL5cs zlt8yyx055*9wpFi0^KIiZ35jU&}{fzD<&vlBA|2@$gA{J4xzGlKPUw&nM~sB&jt? zYE2SvpQJ~Wr0yiCJ4t+gl0H&W`PxZovA$fA8kD34C8&U}th2t{So(5f>C26E)|XqT``hz{h2VAI_23PljSwwlTxOx} zZ`=Mo;JsiGXd^_nR*#{L5ZPKihBiX9P_@Hi83T?5$ARO)3E)I<5;z&00!{^|fz!bm z;7o89I2)V;&IRXz&w$T@&w4=;VGy*L5(~A?ykQP#vm+L2^u*9+M=Vs0Fgy;-2OEJc z!Pel3#MO@d_FxCFBX}BkCSiK8-^$oW}CI4(_3QWmA8=3-B z^3R5*z?A&6p(!vW|7>UqOvyhRngUbu&xWSJl>D=yDKI7fY-kEh$v+#K0#owOhNi%j zyr`imFeNW)XbMcBz?8hG?VAEq@}h>Oz?8hGp(!wBZ$l880#o)j1feM~Wp6`pDHNDO zfhiQ2LV+n1m~y7T6bekCz?8=C?1(8ag#uG3FognB^2v7G6qu6lH8cgLoGCEnOo1t9 z3QRduU`jsO&=i=mw-^Xbfm&^rFS7~&WMptQcl}1--bd^R|X>^rFS7~&WMptQcl}1--bd^R| zX>^rFS7~&WMptQcl}1--bd^R|X>^rFS7~&WMptQcl}1--bd^R|X>^rFS7~&WMptQc zl}1--bd^R|X>^rFS7~&WMptQcl}1--bd^R|X>^rFS7~&WMptQcl}1--bd^R|X>^rF zS7~&WMptQcl}1--bd^R|X>^rFS7~&WR-3L;MptRI=C*ITN~;C8ee)P;bd^R|X|>dL z+;o*z>#Tirl}1--boH`3R~mkqUc}4px9nTL`ekOTt&#$gj`L?)r4G4$kl{gO~}=RTtmn;gj_?&HH2J4 z$TfsqL&z%iz^h!9dfj|C>o&%l>S}VE9`!#qTco`T4F9)vxtqtAe{T_S> zjDrt@kAUwR`gy|7)&K7%)VoE5dbfyB?-mj2-77-9TSTaLi@5!S+)v2;gxpWa{e;fso`=Rso_ekhAXuiuGDI{Qmf%gt%fVL8m`o8xKgX(O09+~ zwHmI}YPeFX;YzJWI+-ZWF5p1;tyb3PO3iQxm;i@@!@%L7^(bm|rDiw^v|3!FD>cI; zI0hUGjswSoc4xkZE43PVY}=mt3W#8`1 z*Knm)!Hv_L#|M2XyyQ#Ie=ykpqT?`<^Y;GV7B>LYW=H(h2VAI_23QQouHlwP#8TCAk-59LOl^6 zl>L6T7%GICDJ|4YX`yCH3pG<(sF~8jyTp@i{RiPa;JsiGs2OWIt{H2>{-9>8Xq)3tPeRRl5^C0yP_v$dn)M{qtS6ynJ^39~UW!p3rb=k3?kEpq z`)T1No>NLM@q91<2Eh=R1!jX`Fb9l)xnLex2h=Pe%H78K0If23tK+Or%zUBl9KL#}?(7(jy1PV1LP^dY9Ld^*j zYEGa~a{`5$6DZW2K%wRY3Ncyi+t-{xq2>e%H78JbmX(y=Zf5(M87L$_ z)r+%z%?uQ3W}r|r1BD|%%?$J}v6+EF)Al7cGf+rw`PVD25~YsV3>n2p9kH1z723BtVl!2${Jx~CFX`$_y84o?zND)! z>FP_m`jW1`q^mFK>Px!%lCHj_t1s#5OS<}!uD+zJFX`$_y84o?zND)!>FP_m`jW1` zq^mFK>Px!%lCHj_t1s#5OS<}!uD+zJFX`$_y84o?Lef=8x(Z2GA?Ye4U4^8pkaQK2 zu0qmPNV*D1S0U*tBwdB1ORKP{)Cx&gA?Ye4U4^8pkaQK2u0qmPNV*D1S0U*tBwdB1 ztB`aRlCDD1RYO4IMtu0TR{rO(L*T&OR1zuP0EaBPS zdBV%RtA*EUCcM*I*hUL=KUp}{n=5?An=f3X9-UK5P$n$b$EjESig2a(-@@0t?ZTbj zd%_RAgPtB!cE<`kx>G&pXQ{1oe%ROZto{xDpFKTeEL$SpO8-jFKc`pkOTD@`UwzlD zTCp!^Mjkw<5O%(ycZwH2>&kOmdOglQ>(Z89@3Z>|FaOP1SL(^43xC_YrFVOu-(IL^ zgf6wS1266Ko0hV^_V;>zS}O+D?(11+rMq@t&n0`uXZC|yS+G%NKjhW(8fW&iykop3 znf+|u$9 z-~mJDgAuSk*aU11b^tqpU2nO%-%YM3cmdc4yb`?(8F{2BRoAhF8#TDjRomwKzcY;>qqA}yC%15ak~b$Yh$}Iw(DZM-nQ#(U0+M} zR_lD##45XP@%;QNjiu3zjq}A>SNi$l;D-wF{eL0V(4+m;JGf7W8y?)JSibXjuv%vu z+F?R{^Sm9m`t*H&db0iCX9qu1m?Qr5|KY#yaJD}p&Hg?90DrJQ+8^&v^=J9d z`0M;Cf1AJ4-|K(if98J~@B`sM-9W=YlR!&(uS;b8{{{p0=2N}*RDBWUz&HPMI$k05 z93A`GXrhfJ+DM{}BibmUjUn0yqKzNg=%I}r+Q^}e8+w}W?mc<%3tf#?cw@AU)izGs zcx@B3P1H6?+hlE1v`y7EP1|&BGqlarHcQ)VZF98E)izJtGuocj_MEoowawS|g5p`A z?L}=1wJp-NL|aB0z(zZ$4W^G%vZPoUswr$$B zYull%TH*hpI|4R`y}`jRbcI==dwUhSy43T<+8XOv6Kw_BnrUmPW39Dy)OMOSn|;+o z{hBOo+1hlRlCUyW&HWzq?M=0u`=NW*Qd%qfw&~>v%+WhVI`O=uJuTT;TNiEioTNP^ zY0pU7>Rrx-RagH59vQ=t;cJh(=d5P9=Y>sWK{xrmZt`Q@R8zXCc6IY~MdRsuMxIfA zO`EP{)M9p%_w1$?vYTBo*!6;XFt$3Qt<6}wGUHuJ(cRka(RQ!4B5msTTd&`G)Sj!K zMQ!xu>68ZL+MycbANz@&Ic{OTRw__j@?_e+``28*`0igPd4pN%A@GqBbT7{Hk6mkw z`Oh6+F0Kyp5S4hxN_j}ld_1V9mefnTOUL#ctdzH@(CT>ly}t1t-;LzxM`TYuJ7eBT z%pYp2I?~4-`jtH359U3%hhNqEn&;q~(su1%bET%?Az%E%Icu#uWX-?-R_=9EUTEC! zsJVUk$I8bC3DHf5+GleAXyxN6q`g&G;l%A3ueO1QiH_Jg_=Xr&_Ot=j3RSJrIXdSL z&QGIPDc6>i*7-P;dq+fjcvtb-`#G8)KJYy|mX7cJt0zs^hd)BvTF?KH)9g}erBnUT zTHEHemXcqU;yKhx6Yfxc*5;H&b+Gg(dT6h5lp=Mm`ry+#->^2{DTfNhh355R>)#$V zO{x*!%759o$5N*^&3RI$ecmuDzWaBCJ(=A2I+kz#LN%CnJd8vAO130 z(mo*!t24jlSZyfK^6${E-qaE0#G(H)`CEH76Xu9te*doZuvE(xdnUz)ziVsl;kv01 zl`3`pW$e^Cgh!`6)YCC03#(6U&HHxv!+Cggo+FPcmqt-4opjVzJGXK+tM{oqt7<>B z;g$3ArTL5Lqs>={LtCbPDZGx@pM2&-mGwSx8K->?W4C_p#wROzu$2aXHCo{QfT9?}OXW{l? zXY<%zxe#cS{z)-FH*PqI?R!xUmkE8$OJ4Z7bspZ&b?U2&< ztt)`<{OFqp8mq5j`P^7}8q#;B{;KXA^63o~qLX4WUt%@$d;e6AzFiZ(H|%#$C{If* zPwk9yg(|7%+9w%+3Kt9Gav6z%Yf#;{mZZa@1{JnntQ~b z((!ezIMj~SV>!a3&Bdj^JYZ@bOzf*?P z)1%d?T0dlJpJ*i_Yif0h#*Rp1#>*aQ$&qIdS@6wVI(+nhw3Ep*>C|G7J=LZfDFUyX zX~}B+%XfIKPU{!78q3tV?*z&m`1fha)C0TU)L1ds`YDSwbja6I7iy1xGm683XQX zESIlG6{d|NYtT_R59!oGdc6+)ca(rf96CyF9&z^YEvbsTq3_x-hyOEOyHMAVRy5#lsomYvJy4aR-7{{jPl4`}KkVD8cQY)kYis-N z6x-J(41O8PJN#?UPw47zlsDBM7U=e!ZM2TrHvW6IsXBhNZI+H7xjm!*kG3t)@o#N9 zlKLNPWeRIs#rJHhbo_^GYZdO>+eRJxA=_4kWAm%EXWQG~v%T+s;vZ#G=mS4=6SsHd z7RU`q|6KKfn?)@r>C`^^o#JHP}->R5O^t7V)mYLVkVC(J8g4PicKe=TA1 z2{Vf$U$B2H`|q&-6ZREQHOlJZ<03yxD|kGv{eWh2ZPJVyt@-NCb=T<3E$$Z0RKLyL z=CyElxUstbt?>`drd_Pri)n>k;a0iTZjENrXcmq4b8T8RR((^gjViCFbwlO7b9Kl3 zbd3UO)XKYFV?lT7xwE@bF(snS;}Gk9eckL+=uK&pThMWq0)c^n>2T)sw!Y@E$woGrvSTOG#Pv__@!wi)AWtr=(g8RKlfVw|lz<80^1 zsxqb6#@Q}pob4jU*)Cz6?Fz=(Ze*P8F2>m&VVvzrsjrtu-hZoXC6Mow_tB4;-oEee zhjRR|aAqr7mIiHn#@5)?imi%V`aXP2tN(uI*r9OWXQv%MlH*YL|IM*~7uWZlvpbxg z?xog#+y2*kUysP<*$K6{_R+e{sh?hG+ml?rYWOJa+Y>0}(d_Pc9erzcHpO$NK0)~# zJ-M&D$@fVO_siF0Q%k~n-u+3bL(eZs4b%0e?+A4zqG!z)>G)!e?>N=vCE8ExlSA!s zdg^GY_N@*%`K(v9zgo3CM{haWD26I;hp<|o9KB`aA6~@OclEunYoKR@a$G~Lyc%(h zv^HtPHFiyOq(ILC<+zrvrH-_At%V)sAtLe+rwO~OMG3ne@)lYlSogtwd`1pFBZ5cL zTE*T^RmOFc+PeBU`8w-c9j6g!>p3^k@dEX-0^SMw1o0jr?<7xis`R^`Dlbl!Pt1}} zJWXi1mW{u*`}cMS|4fbN=je@c=jrVE@|Y3%k4uD?>J#uT^E9)>>#I+mywLAu#Z?;f zuj^f-PXv!tPj86pCr&GgV(%x10=0)vD+M-3q5wTMMURcqV^htU_^VQ5s%(lX z8>7mmsIswUCofk^U7=4)6xtMpHf5}`9Xc&Qrv-Ya&s$zQ)Y=ra7N`x_qa$ytt!hRY z`_I__An0eWwN-kYNL0=44D zdv#EK0jh86^zmAv{id$D`Zn#T0R^s=Yo&dw2LW(awjSF4z7ca{KWl4v0Lpap!O7~*Kmg7J=2}3-&##-K}{;i)FjhZkoweA zy`6KtHW}adYxisQdCUVg!aJShe(Qd#v$fvvckXvOYd*1&yTVK@hE zTHpG(dt7JD!#2YEo#ckQ;W}IEZAZG1I%__+5&rNbJZ~%al6y&`Xx0K~-DG)TtsyHf z+{%@?GOwX}8=Jfn-9GoB*V=vJKJiZQgT87DKBj=W7ozS3sdf3(x&rz^LF!(Jx)-GG zSsU_e?+MjEA5G`d6LIPtO_Udz>`f6)mB00+^0~r!`sAYZ09p@9>o3YzFT?}C-{ zV176|v|p`# z^U`_fz7D#ti{c|Fz8;Ft`45UW-<~V2+t})HT7^5u<;&0e=stk%gVMe3VrV7kruh5< zdG%&^ep7!)>es5m=spMC*FpDn(S1F1pYsEBpM&mmTxX2{2V56tGfU2p`s<(quTyKxt7SA#c?_Pi6+W^RKC%_wu@&C272fe!wF}+6R(Qu&c*IutLalzRo@W66 zrxm32IkLsodhhaoS$Muyc)R*2BaFAJi?^$b0ve!zx_G-VrQVQI5995Q!`p@Nb`4QL z7;o1Q1!SXuY`k5VQV(nX*ni9aS*u(ZZ&w#T7pA=HQqsrc;aXAN4Jhv%%DWNe9l^up z;^7+O;UajrI(WGHc(^bgt}Z3rfRe6@hYRE3vhi?Xd|O>gw=U&+Jms20xi+F)Blxpi z{8?lCSpX!JwqPO{84kmmw+iTyHN$(=%k;~>_FDz?(VF4C>ScOrU;C{BdTq_{ zUiC74x3B$H0sXjUc&~c3y*a#BK7OkSek&ipm5;}2LC>`*UaGb~&8)S({aP!H-* z59%E56J4tQj`b4i&`XG9dP86LgX}u~PQ__`(ExQKNS&xdKOjQQIF>pQqE3XU4I%15 zU1~r*v|kt1*G2WYs6H2shtPNkb%#)Q9_p@bxwBAoHi{0T}g zj=kco)y%A&%7sI-J#S>T=Tpq~+-$QwU45JF=`OI@o-S^)Jzc5I_H-X*Vyd0(*+Lrl zrFVu}wkzc8Zqc2KhrA*3VpG(Hy(qu5!h7A@;@P|O%)Z7dWt$h;QZq+RK_wS^SL*J^ zttxq~iK8-}s#b5IN^_;R&fDtkmglMcUF{swR^Cs%UwPf7tlz0eeVyLD{$F~N@lbD! z+RdlcE-qF3_J-bNxyQ44BNkuneACwI)1RvQ3>SEP)H}UibJp%tZ*!P8)_Y1?dP%xj zrFL+ev{9QnwMWu?WA%rBsvhuJ-fz^e|ARdF9a86`y00-#I(%08TPAh(MGkid)0HSwX=54>xt@hcTwHD zQ1#_cdUN!hx&!pMH&Qc$XL`@;39gsrxBsrT`Ca+q+TYdAk8P{_OI`Io>x)#&Vw#h8 zm+l)4^hT*?F-yJVQq=`}ziYL(&$BT{%a_`@wCz-PPxsFCeyf^!wcc=lx7wpY>Z45Z zW~;4PqBi3-Za56XpoCnSaUjqMHc=KOw$XX7r1S`Sy;AU_K zxEtIDegy6>y!EzQvc59R4uTQz7%(3!09%9Y!IQyLuJ3pCwb@<4bHIzh%fV~Fo56d) z0pMV8v`oG_donl!oCnSaUjqLME(ceFmEiiDZ@v4L?9Jc~a5uOQ{0Q6+eq|UAf)VhT zn{T`J=5Rh(0Ja9(gC~QhfL*~JBIp@y;9tSz z;7YI(TrWH|vKia~?gsaPAA$S9uMBg8U<5qo&bzOKP@!(W&7WfRf08D{pV8wmc^}8*1 z6}T4M2yO+d!MDNp!B4;ghTH`8)nBka#sAfJKzGwlP~Xtz@BjbWbLu~s)jtlchveud z{m-#>%<0FV-G8j7D@n_j|6hAft-7V{$Du~y_1hnZIsCR(Lt*wqp!G^^1i&y0%mz(* zdduRELOoxk-~Ko}mf!w3Y`|}S95&^*KMwWWl+yd-uz=tGIBdpme;nG(2)%ppMXHq-v`#-~zbVYL&S8Vs_ z8sjltLuu7JU1dC{tEe(vSK4^)4qZhZaK6T=>+7ywYh4lRc?(_bUZDFbSGsH5jk?== zpBt>Z8sptlZl3IrEm?Ypg?(r1JxKcY-9;K@=Zw2K^R1CJ3*qd(oPFPu`PMiX{~tPk zd*=UJGv9+V-_K>fpUHe@Vs>*fG0xKcUyD1-mAiFrr~6EIc$?IQJ^X!g=KuRL->+o8 zH`jg#PT^YI1v+KEFV7qwpZT7e`A%iN*Ji#eGv69_w6p|PWxiKtcvfLqC^#%QHMlVN zO0cT-cyMd&cerb9_^?JL?f2muGvAZRRX;p2{FIJPm}sONKakpYLnbEgaSTx#7ASZ}SeGaHHLmx|21=jn%-U^L;!`FO+g`QF>czgyyK{ zH0H3_{Z;qtmb>+CgWKr-u6uHuG_s&OK{l(xkJzjVzmebAZ{j!g3;fppPyLhq%f#u6 z^IBKvu5;JB8{D7WUsRWFayPr%-G94E_nKSlUU$3Q9{09;$L)3R`XRrLU)QhaALAeE z*Y_LvUHq>8>3%o=4F62OyWhjV-t)7y=7vUVu4JCbAKV|^pLA#QYSq%)bnbocWR37# z%uJF?+@ z?ih`A^W~3v*(jVof7df+q0E1O*OO);X|DG8Jh54*zq@C(XGj0;rs>{pFMU6y?_cYC zy1viT_Y8fXukV@qzChoz^!*!s&(?Queb3SNh5DYW?~B~u%~JntjW0K6@7J>VedVzW z%A;hB%G3tEDNpk{9}AAqu>nUMb6N7%SvP;<$n83E@59x~HAh+PhujnU8vpxgNTACVzI+5^bQnyT@rP z>UiDXZLGVynrmRAt*(`8?M`rQy!SM!`iX0+JG<@Ge*MJmiZf3rS*v&LJEw3>dc#tX0auT!nL?EC6XR!iMI z)r#U$h*qFg>szLlcbo3#e&y;a9VhFa^EoPOy&p)m_Ht%`70O@SDj$81t@|$9A5#lF zj5c_(wZa-vC{wLory9LmzT{R9DD*+~Q>`))9*D0eP+~HE$+c?ZimULhCO-_Ir&P zXKUnSltw@vlvle-vt6<^hVq2QLW7>D(kwru8wD;;~BWBl48jxXWedx$}8lO(8)<8-t%){0o9Y*6Ypoh=(WWJwMp^!u`ywN zRvHqsJu_>T{7HA{-_;#;JG)S^*o@1I)G*sBX%TA|y*#yw1?F21pId+U+%cT1uXC>U zcksUqj^pT~ZkRlcoxk5bg3r;uysgu*^L0PpY39g4jbT{LnyNPC8QlwCsC)f?ldYAy zBfdd*;Qyh~leg6_eQL&Q95k%)Ps>eT`SBCkYIBs7+dA1DRPO5B70ev9IiofcC#)JG z&nV^G?nUHBURO)J+r8@@qjo#w<;zzz@QznG_wbs_A6&2gjz&*1d113pBj#!J8}%jB zGA(z@)eEzHIEGmY`RY&P>GzG4Q_a3XJnK0k%RJD8{PYU3p?YoIBzp8Ty0+K|A6{ff0xbnn~he3)Vex&&ljs{ZIJxv z5RE!dDM}zstxkY7Z{hkvj-4iL-w&<@TCEAG+ zJx%&MQ@Lej(T%#Q{+epZKySm*QftL)F3-98eXhIVwwtfMxZiC*)!yAVU#+V%J-V>} z7_X+>)hx^NYL@#oF9&KWf?qt67kE7{_{F(j+)xnOd*Inn!HLOw1?}HB_6^;B7~ZhH zn`hNCTh;wI-56*qF?C|V@j?yCUBNKf?HYFMFOzJ5^C=C?J4h5Nze0`BO=^%HRFRETvob-A;avB;3QPi1v%W#jc(=N? zpSmyAJy(_VoB3`04syCZ{9gWr{-ypO)l}c4tbf3N%uo2E{IULIe~$mW|B|2fU-m2g z&05;xZU1AxCg25f0=b&V-#E}B&^GYXKOw26L>%HQDA@IU@$9~7i=7C8EhBq80-}696USNJJ=_9MX)e< zWAOIieZhx!A70Rlcm7mozt3%c=vrf}#@b%DyZ6f$Yb!M`Vx7ekyxj_JZucX8$d_GJ9k8j_keJA7>xXIDI%=FPtB47H$*% zNw`zEOSnh)*Wru8mxZqiUmLzLd`Gw_TpWHZJTyEyJR$s4cy4%pcyYKaydu0Iyfgf1 z_+U=moJKhyCvs-wEXY}w^IFcfocD7MMsg#K zB5fnTikua>C~`%lFmhYup~&dStVl^@MPy@ScjWWP!Q4P@B=@-7=D8>4o}Akyw|j1{ z+zWFr&Ha7uwYj(D7Ue#iJ0$ms+zGi)2;R|CKi&@A15md1LdY<;}@^;s3GrCU8+4&BO36%g*R5EQZZ^ zu$f&%R76D}atNLX2#TNrqJjc)3j%V8S5!2{1C1uesELXiZxQbk?^_hS@V@X$RzvWJ zv1Zdt@>b7+lINf2eZTknz8}fXOdr+N)z#J2)zzid0jm>Mt5Eu)`P60trM;DtqZM-te039TbEjwSzoZeZvD*qm9?n0P;+Wq zb#rw~b!fBE&GMQ}ZT4lK(K$)ullqK}Psqv2?30y}m6?>@Cnqg4B|afPFR4#}^yq8; zO^C-beG}4h67t6;XCzJNo0ydspOBE0nddKM`6G<@yZ{MefRqyOp+tbWg#dF4{iHJe zK7#6(kTrH}yct-(50!#O$L9onEEL>7SgMzwnda)&H!%1^xnMK!U^DRGytItOr2Zf4 z4QK>BMCwY2gk4DEbOaVE<%LRlp^fqaGE>5&hQm_xkuW*=V>9CO^TN!HhUI3&=cYGk50}!z6Ot0sGBV=BKOz?1sF2ht@4yJ`a)bmyO7L{24|lgdkrD!tjS+}6 zBM@osbtE0MNU7^lQhQM!+lfj{OUg;gP0Ni+$%!AIgdp7ly!#CQSYWu6K0>ND;saSF z4E#L$yWrWFdn0;E--GGz=kXF+@n%fo&6vc0V4wIT31WizSL#*5$3_!AG?XZ1B}(j* zBtcA)Qj$KDNHVvOWNtyCiAT2-sc6bah$)Tenew4-Dv~tyW1%#umeeNHaH)CQ(vq=yNZraG>j$k3iBJwUnNcla!R15ucfumXINJHABKaqfwa*#3ob9 z%armm8|5WsresMtWi=k%EHgS;AK44t32;iHLj=ykoJRF?rS#l-_R9T;WNxEE8CjVr zxp_#5JgL6aBhSyJ{<-<(n@Q5R`FwNp`Sk>+Lz*vX{AlSnLHbRUev_o%Wa&3W`c0L7)1==q(r>!-n<4#=lV z)>V4+=_Wn=`evum<6Rf(|AGQtdgc|Fzw=U&Tcwobto$7FOWJsIN^aT&DIph^giPrz zDJ>;6PkPHts|O@O&dN=ufbl`$(uV{VUnHpXNrB>%!lVxgB)*s-;)?_jpAx)030$58 z4SywId1hGnprG<3NcbxO%BzQyX9kmJhC)F};G`eg`;T7@ElDYP$w(-7S8rGI!_EAl zvKABRtiT5)DLy>R4^Q)hiULgZHb1&az^JzmB?f&`YDiD12lP#%hx9^wL0>3Eq^Hyq z`evpHeUpenUnI!r6o7L*$%Q^CWa%kErf(8t>4ie3FBG!$lpxbLGi3TEL8dPf>Rzl?q%+|m$~O&=AL`edhTwX68+pfCHlEZYZWF+P~1Ev zC~lq-6gN)^ikqhd#m!TK;^tWorH>hypZU?({O~tF0?dy<`f%-P9-+^rJXa4lNjAEm zOU{QEGt*8$IXpHotH8{|G}M;9K4yLdO&x_Afo}M00Nv=@T)QE`j96ady5^6DnjgN*^|1dR z5UPJ~$VeKSh`Nw@3^G5wrcTUGtrsUL`KSRUjm`Sl+Yc!pyF`-^xfCo}Pq7av9}6|= zH@e+4?sxrX1NPLvhGu^tDNV@D#sR?r49L&PqWUYoCgkTJnG+`BYho6vX*u=T_(;yk zLScQQWqFK&M?MjKX(#P`1*b+79 z)WG+=)U5nmRBJwz#2%XqQvHLf4$6lr+i(Nr^Pm zBR4654vm=;Tt9cGZO{jWCFxo8<%4EG$@-53%rvk2G{>x4&^L2U>FvW_t9}U0YP|WQ zVe=(@nH3INr?D0%Wz{PnG*8kw=!;p$pl{e^_xi58(PwC62*&&Eo0UCL8V`GSS2r*F z(G%?l;T9sx-apOWFAZzC*!RiEu$M~Y+T+$DDQ7&ABqBA*J~1sNEiXR9J~<7U-JT9% zMpk@cQlfocmiY;DUo!LJ(=zRG>Cdyz&BC=G<%&HHX`X#rEIdDk~@5K5VqqF&F#cS^4&F&1&hQaSeMJo+ES?J+ezbE18A7K(zbOiGZnJTsC~Rcruh_&-{qRK?*y z+>sIuxn>GBknJBpvh4Gy==xCf;}{{8XwM3=@-vVShzU+aX+Z0l2Ae>ch1`bXz-$7v zM;oAhy$$eVN@x~_NzRb%rMA69GzcG-5xD~%50&E4$a{1Nu*1XSK#OR!s?9^Y8L#kF ztW#W2ytnLN*~@a6=Hhj8U#t8k99m7bXj>P6wFN%vI(N`zfnqomfvc zf{kOBuq)Ur7z_LJCV@=`H<{FAQ3taa*{{Tn+bz`$N@S)mr7G>V!6(QK}SGhHAd*d(~>y7S$frLDd``lVy&{QW?2ax{Mt9w>&td-VHt##I)TL)T?u+FreWWB(8 zwe@c6!`7A7x2%7${>}P#>%Y)Sqg8iOcUOm~W7HYy@#?ASS?VJ759&?o?drqo)9Op= zyJ~~_z4~t(l}$^Vwl=OdUN${#`r3rqMBBvLq}vqO%(Pi(v(%>8W~0qEo82}?Z7$eU z**vm&Y4ghFPaZN^P<6XcS`pqOr1dOa4RdVK!QI!iS5L(I>&LQ1ZRdr|(Gi=k1`Kq! zbG{i2@-yYd<%e_&nDGnJ7Zm7zX6CG&xATOZ3w**CupN32?=di8)6ufhO}7^6&MvI} zy2wt=yM$kPR;U*{F%Z@Pl*Dzuj&xYyK$;R)JL2|^u;2nr^{ICyI_Kre=t-mE{Is(~ z760^D@BT~laPrIPL30<8+4jHEEh$W-qolKDoQ3nqo zGKYY(pwWquPNoqo=>-Z0@B&Xzyn|jkb&uk{-<-4CyKmE}id`wu3w5uUH#54PCybWJ zJ%ind{6%(kf&S*ib6-T+jT)IZIB4{iGhgc3Ab1!5xy-2%5$l4r#IX~xAWo$HOJV_z z6(`r8I;>wXim@N+-!5R#j%x)v=P#5*zU5gU*lMBut6J!zCtvU5JBHr*#c=-4uP@K{ zaOo1-qmy3EcL=-t{*QC_ek(tj+IzLWW|cQoh6{EjB&*!GxfchK1+^A z-_};0JaGGay^1GYOm51#4Cy4gVfPqFHWj;*7$r6chm0vobpTi@Ned>BSRyK_xIzQ0 zE!b)R&*!!~Yv9r=jZAZ2>@Ke0-!fo1!TSzrswKhhqz4&9G7Y3H1VEc#YeB2mm_Xn8 zC26VC-1q4lJtRXvmjR3Y;0Dc4?@tI@t|Oc&nC}r%eg{k5Ex&N*PWiy@ShhzQzg0PL#>8p)S`}Y;{6t0N(BnZtLx%iN2PWd)^io0@29Izj-ye_MLO=(LR3xU?;Mc5mCdPp^4P{%V z+sDMs*T>FFNsrd5c~h|gjYYSc1sUySQQ@}F=kATeh%{kBq-sQ z!PJ4tGDJ63it-8N}^y? z*Y~Xo6LJ^jYn^*W6G0#E>|J9DF^D0m{mV0vt~<9J`#~RELg_knyjGPaKyx$0WadrD zn3vilVE(CLx3srT9lcsQc}wP6q^ToAELT130Zp|K{0w@)Ajouqws;Wafb&^P^e;O> z%X`<$PH)jKV2DK=aU;!##O^*fMF%P|n5RQa$CZvY9cr906}Q0_y227WSVHh6__i)+ zi1N1g&%}kq*pV1l;?mPwr-oU`p70sYoOp;Q_$0~t*>x;WbgD>!j)jMcx!RoDr zy7MrB-!*SbW`bQ}Mn+;{`qrJhwr<`vU#B)E@+$rcQ#oze;UI1M!Cg=`@)vx5y?_4H z-MfR&^o&c)O_`vd$DG@EvvTw5@##x+14#j&n6YX1t}R=3?b@22l$bs?5s`s$Y+3Qz zBf5tyv5M{Cp(k<@4=-3-rpMyjXOyLG)Rk`hu57!V z`j_&DzyK5SunUfL%97}9S-P~W!srw`GLDU=aJ*Tt+JEP<9^$c`pN{AZ6wYBi#IcWK z?+`1@KT@0*tyc#NNm*l4k~U`U)T{n%!J`=Yov4&g85OP!+cP&OsrdXwxhp2=CQbS( zH{Xu5V>4$=9;=IFZu9J-DzZlS=|Hck_3XGxh3jg%6;6 z6|}jniY6TH??i$>>GAUJ*GsTtBz<*lzuT zJ_c3UiWRfJT%oIGznP-qH>|sTZQqV2r;n}Me$>v;|6&KH;9%$Zy4%c=IlK2A(H`BN zJYsZ4-q095=|$X?z2WgSRxQqXW}3sO1|B`C%-DZo!Wr$^lf@+m^v5GFT!=iW+`NC~ ziPLsuH3{Y&dp)Rqb?e^S*LQr|x9jcO1_#JsTE$X9u6)bffPqTLBLhVb1Gxs{;Clo4 z90`XWEn90`a6&xy>sQt z(H^Lbjp*x-O(bPzCZ%i|yK~2;&D(coZc5gxOr<<=7E8gIQOz%WA#S?N8AtG>J5tAu zB$N2xi4*jO9`C^sk|4efc#__F6$ytG5C%(?#DXC_2_>IEsFE~cU@%!m29qC^V8K8O z7y=qHM5&HVJAC_g$>9V0w~gr8bIgcQdR6L#lFge}m6VpQ8Z&n6gfXdl6>a&2eE%Cb z|3(4FDF(PGwju>2{yFIaKH&Nadz}rbZs0_G^eVsoSL186VEv%{w{`js%awyCMrDL( zJ;E*-rt3wgc}f`A1z6J6J18|`G*0F&Azs9qSeJYK@=N(6umk3qBzii7)>7fN#hE@FCJ)Ilf^Yrk7t- zqDIlHd#}67?#v4m>0r&gq>6-!7rj^6t6yLn(#npsy3*!WKV8{gW&g9`22j|k6;Nr+Y+$N1lK4CEG&7YO zq(NdmQ^6S?;@wF+8SM_E$>?V=8seX^ra7kW{88>e0k=~nzg(;0ul0xWUMyKit}6$^ zB4T+HEZN@Ic;d#O+7PW&XOrYd;P?byJW-VvzBJktsImlwiX34*BM0~djo$xU2bWyP z9hNk&>;a1MQya>5=oa*+vZt|B|Wot%#9XeHl<8|AToBeJ=7yLox?Jew46<&iy*P`i9VS(*W zoQhfcOxb~10b1qpZ?|kbu3btK)K>yQZL2b1uf%T)c`wFPjPk3RSt@qq>Ac6K!Zg`M zY{HO7rr#wMqIz(3ee9d;}y^yOg;1;4^1No{e zP<+L<1Xht1Rlr@x#M^+{;m%DPckaM7COLC#a?+-(9eOnkDy)FH7l6G0%_`)(DDw&nr)2AhMTjg5ALRV9%k}Ppm@jEte-cdSsOLB5%Mr!h=u{-pL_B@>NX#{0Y zONK0g5*+o0#&EeyPTH7-%bo4U8=>%B$aR&$c4w`7Elk57N^Y^Ws+{upB^)&r$f$2b zC=r~7L|_j!g^M`V389G7t6pJ<2QTny4>Hx9!k@*HKOX_hazO>1FkJ<`pck>ky=w;* z94)->^BCN2`rQCsbhiOQTi14--ZbmG2l8>00y{-c_rr!ykDU*s5Z`SQnvH z9ooMB;zHf=g*CWmoXDyMiQ$j2HP|0B#@=io?n09dFg!EW_)KL{~)P}o|;l#onJBHeAj3lveX)cCD`5{$$kwM&I zP-Rd2ah>WJ3@?y_i$MWK74BiW->tX{o(8$0s^nZ=(k!n+NvU&HqV~2{Y zFs=qm`5{<~JnK>T(({6N^<|%ns>%mL9^mc=o$TJigSQHmTx?&f5TB_I{R)}Cs>%&8 z+n}o1&0g5Oreu@ufXcuxU|0SK8n9M%Pl@RnnYQ8N1fA-(_RikO@QD2E1l8>J&xj*# zhC6$!NW^$S)u0uiq9n)bm}q3d5J|EU8X^u|q~!Bt7#jdx-{eIybOJ+fHFR@Ce>J=c zf^iDaVHaJkFjxe7=E`=<<=@HBrwZMp@B)H-sRDyOpraJJ-OE?X@Zyhrm0Y%8E?+If z5C!rz78s-feaz8M3q8y+fP#F30-fvdCV_m50%H-Ndpt%KKu31jVGH!LLa#gdP8mjS zK<7J*Mu4FQWbShLE(?qgA>S*L9hb@XDKO@P{Ez}~gP;?p{HRQJ(n5aBQsyO>pH@)! z!1FZZqwI`KenCe6eYA2J#xy{8dyG9HzhsF~7^vIYRhjI91^U=x;05%mMb9ww^F!BK zSzmOnm7`ZDI+tP`1PptCUbq-G1HC-aX;*edE`KP)NEGr%7`sU>f1*IoH}nR>I1=b2 zh><4HRwb*F%kfGGdg%VDz&H`|R~9n#AAT#B4V1~>DX33lC`J-gVAuwXh>s4la=cM; z#{%z2V3-B@-!cqxfo^LU&H^3RWJBcWl!+ItEbu1O0~z`Qq8lPc2a(aM9|{cZfF9oH z(kXjnVPS14i;`Q|D$oJW0x!a%H~kZt1>O>TDnnmi42^+4vgn{{VdsL5jp);85v-7X z($r#LFvjS>U=rvihXE|)y%iQqZD^#UjWTqo!%%b>Hv(N>(RUETY9J!AIGM#J89Lr3}auQn{De{Q)2 zMx(&X46<}N1|h+S7U-#m@ifq>A7f2eRIq6Lv%pb^m*KS|jJaWPQ-)DJFk}gu1TAiH z=mUyZ%P?jMh7-X%5*ANn^k$$Svv^9wW?4L!q4yug{;>F&p|_(Z$t-?D7gQO#3S!_4 z^y|b>A{aLVgLPnZ5DecTTP;)I72Iq&1`ttv(gZyQF;)q6lAI;Ot85rYL^eZ)F<0?Y zn{2uauMS{@5DbT*u=~Vf4mDDiB2PR+2f}vfMP4NT3GauA=xIC}|23<{7NWuu|FtS7 z#azYrip`2siZhB|&}Hv;bk=K*j(Xnco|lb|d5bKMTHdz&RcVP1cRtEkbh5jF|4g5X zabx;2;Y=#?1+$ph!0cv@GcVasSZ8#H3uQ;J$?R-2Uv6j5vCzb|N#7=MO{O$iiq34m zHF@8(Y139s6YE{p_B4IYwLv$vt=uz}qiUXNnQEu%yj3$aNRB{vvdw6QthJ7}PO)BS zz0>+Bx`Y|kR_f2x;p$xVO!Z>*PwJm-EN$#;0&IrbjI$}SDYZFk^LMje%?6>f*cZ(X zG&|R^j{vBmg%n+V-Ec zk7>WE{WYg{PSH*mJIFe8>@dE=x()}ORnEPf`#68$e9`&Oju9OfcRbs%rc;|vBRYN6 zsif2XPUkxrI{n?bWoPHkzMYFZALx9)v(aUc%VL+>F1@-;?y|1S-Y!>M{apiHGh8pY z{*5Q@gWZzdO5OIkRk+=Ed+7Fy`xy5e_vP-}KDYQh{__Q&8@dkcn%eb-hmXg2k0OsM zj|U!aJuN*MPaDrEo?m(vdmi?(^osJz@tW)Pm$%;g2k*bSb?r93+hrf6kJ?A))6OTs zXPnO@pP4?3eOCCa^V#Ne+UJsw=*#%p__p+Q@^$m|@%8tO@lEz!?E91NHsAfe=X|gF z-t&F#`-kt}-FtN((mkeoa`*Awr+1&%eQgi6M@Ww!dv@+Q1w#z__loT`wbzDT4|?17 z?$Uc`?^(UC_G!__w@+H1C4No(Li`r_?eY7oZ>zp-`UdnJ-Z#4M#J(H)?(19UZ|&d0 zKf*uRf2#jn|1JI}@wyWq;1&=N5E+mXFfCwt!1jQ10gnP|15AO=f!zXw1ET_y0&@cw z1+EU<5qLcCYT)C*H-Ufmv+1Yr*QK9NKmUFa{gV1^?N{5+6vPF!3UUha4GIVv7Bn`f zAZUKjnxOqb=Y#G9nSz@II|jQ4`v&(24i6p^JSF(+;2(n52k#3$AAB+RQvc5VNA@=i z=rbUHz`YQskU1gy2SyCsI`BbgVCc7@YeRR3o)3Kx`Z}~O%qpx)m`~W0u(@GN!?uT= z54%0cVUX{j@IjXbcN@HLaLM3%L#&648M150uR}< zAHHY!-4O{R-bZ(e&W_$3eI)u$Ot+YUG2>!Z#hj0M5c6te?#L&j29CNh>iMWYVl85I zu^nUk#pcD%iv2$Jr`RL07h@mB*2Xo7YZ=!e&L=J;E;?>>+_<=TaX-dwjVp`05O*)` z?|4mo`*`R0&g4@PbEV`^$y)sXT**(T)@)l_vZG|fw(Z;2JGX>xB|Gsmc=HSBJ*rrJZ75kv{cFEVLTKw~u+nl!WtR(%FC*=)jNG=&iHig*m0}2Q5$%#?~e_?rG>(}6}0$0ur!zNAi$w|2++zFLZH=+F9gkD zScrgjNc+YQ>Y*M+H_sQqu5QJ@8|UvgM$W;wnhymPHKbDu7;G~)a_^ah`eLJzCl&5c z!Q7+i_ekVrKrQky$cqYW#YGS4mPUN)#TRk9mH#{jxJCvl=P?}xs^aQRO8AS{7+kSC z0}bNkayd-R;1o!_o#+BxpSBWIwlo<*9uQakxeZCy=PyrwC#MnX%Y+u(mK6S39Go>C z;x$#>1kJP9FE&PKHC5kmnoH>%?5sOP`>d(@pGOjxTsc@+WcbCf{aZmUy4Na<*Ntqr z@FDFS>hV(YC~3IHkP9)cBE zcpb}JqF=yj-Yr>p|L7Y#P`KSBa@`kQ_=^4Up`nR!{(9085*TnLM|h3+aDP<4ezC*6 z^~4osGV1rE1o=+%#Me}}p#xrikeK|rF6tehv+p$WTiM(iS;X~HQwBbrDv0u~^i z?Kwzj?jUGPWG~5(Ktii5;rJ2({*Zcs#zHCC-1wRx0gbSorKX-C;O3LL9poz)E|@a= zCk7bzt&k;v^FxKW)X4JF1bD=D6xIpr4CFN$MfVuU9yE%oJ)!bj0c&Hwcz8WcsD(-? zk5T_5T;z;VVsqZaxWd}6n06c{9jv;@iNzf`2r(`DM+R=DF$byty-CN@@@zZqF^e1U z>D-}3+bP13 zS`07oVkak4C-yaQiUSSE*@Z>WOf(=AabvCGvY&vK zYjO4h7P3sU@jwQ$#o5XQrr9`lXvJP;GSCy@<)T5Uemb99Bp5$KMmC+A%XH^nGc*Z% zwnz}IC{KU`>4%5(|H!mlB)|cbNq12uVGfJcjEPv0Qmf!Uz?m#*KdZ@zXU40TCm!?@ z%vBbqF;Tgzxs3}b(_)*_XrlcPSBFD%L`!f)SKx@2;D}x_k7xGg>GRM15gv zZZsA6`0i#F_kXpfNe8PiWh-*A{a=o)Iq*2ci3@Q_(4$Nq&XaWFfClwA5{Di1f%G5_ zMv~UhgQV;0T3M2gj-ZCl(D^MsI)d|CqQ=9S&i43dhlWOvliVW|l+fzoTLt|2QC5$aG`)dd3Fj^fAyiV9-;48Lbi=D_tYMQiT7U^@+0Y>^lp`CS*4-i&6& z1WuFj!#ZW&q2treYJ)hvrUa~pgUsWyPO~ByE1=Mo>S#*E-E^hZtO9@1tiE<8)-L@= z?NuLYmj+|=hqeo}L3lKnyZBej)|}Y4@P(HoqrG0(?tLwGp{B+0e@;XxY%qnfn$mIX z+EK%nMQHIHsUsdp#FALRCnTRdx@_$My=MG4G0Z@ILqUGWK<+>`)*uT^yLs|?J6zaZ z!SyvhK0kYO;@CZUQw%$HbkxMbTJ<0}Z-DWJLJp8$NfAA3IS)<@=nS`khh|+L5J&xd za-Am~U_5kS?v;)1+b?#MmtLKSc0Q~KE(Nr%SkB|gmWw2TUH-TAJO~{?wl5uR5N|z=S+=4wdBF2lkdRF4!NW)a!IPLvn4qF zL2M{np#9qht9Nh!8_F~9@X$x@p`E<$eju4;)_gB@R)~g$A&#H0(?n%?VdEF2`mDBytq8kL5jdOm8X$JqFnW-E? zLWSxabU{ltZEV1u%e1-gNR!7M!D(_#OiQXL{q&O(IxYP55vc6c2<`%|VwNV`e+P#v zH8qR>H_VCA)X|-TK(zHv_!*|56&@^!r7;s3*C4i|BkD-n^(Aeh^&rbvKHl{33~*Y| zy=zNatw1+{I!lHWp;f*c6haoX$J5qvI*kEhNIU3BvUPP@OI*FQj(Gm`g(KoUC0qoXpiUMtu%_CkbX4jRuyJvpn}wj^fwo=#3I#5 z_sL3Exe%_s|R!Nob+@Q_7s7YSW_ThY_wM__7h+u z9&f#2U?X~6p%V>BHPz5XF-5FVs%K$L??1B@e@;NTWWhLbn1IBU(!>=KeQR-1{Fr5F z&YIUj5C?|wP8{SQP^@%oh5*$_Hq`u+K9UV?6Prer>)}oe!tDX7bW(d?%;)5b#g_{4 zEn?7=A^pi#5(rzVvlq-Ggv=v#N@&VJe<*=KQbJFD$y}&Ys=qkKA+Mp1ejazUxP3hu z&i`N4$DA6p90s>KUm1 z;pslzRKxm49d3>twr5B<0ZQU{S&8d@6Y<8r&$SfDpk}-8P?NoY*+YF|TtoXUOQ>i{K zoWhZqgk<>}v2qaba5iZ)S5Rbt+-HzusBa3nP^ynUAUR5s=njZ-0GZSP3J>LSl`#Do z>CWIDVWLt^gu-9NohSnyBMH)Yhu7Sk{g;)Try)Zz?6r@kM=_Kqny`d?WiUe9@zM!cU-TZ{!jOP6mPE*@i zxN6Sd&e2TRU~J24Oq~SSX-fG2&13Z)|F7< z5b9P`{TczT>kV7~3`Zk})}-Y%b<_U|zOJ_!eBJba1OIn#Gx!0*1wk6&L{A)cH$n4$ z2eJZeG(EEyHVL*neub~!peW5L#{xLzDD#;h+nH&Lf8w3WM&yeSP-f8@;-e zLv~QW!CUQxQVyA20WX~dRLxs{_2IZ;6C zkH(*xrBxR;{n6^9n{O$%ood&I=yZAANw`UyD&;ECx=>?48B}NNf-1lgm>IgKl z6wt=6<%5cRR;HKJC__el=^xbEtX-Qwr7>*zWrc?x2b; zc0s?UbL*AY&;^#*42@qGQ#@jMtH1#}3U^G~Hl@|@d}RO&>SL#p_YYqk)N1Zr<&M8hg_o-p#M-@h??ZoHwilrdolVybo6e%HBK`wqjcJqkVv0aY2$~he2HZOZ-vA5h9xSi8`BFz=oO|p6 z?IkEUBVQYR`5}y^=DZ85xgScLu`3?nOxnz4Lk02qX@;CPE#=p74bb%J5EN&x6maB5 zYas+h8NM2DbiM2B=r??_}cPPecIt#?koGlf9=gn1^=F`&9tlX9shXZt^ z#7@F}b2^ngJ6}yU%bvxK9Pu_iCWn)mHu~euTsV5|+pLj@#@W1uyZ}Wu6pv6R8?D&F|iNez# zE}q!<)OmT!|L)vBvalL-cc9B-Y7;&7y8?EK;e7RlAx=y5Ca3vIGW<6Og@=;-&v`SUtEZ8L$x5H2Knp7#RNj(~`N$6KSoEE@E33Fjr z!=f}Zg7=@x{=fG17vov-waN2e{QbuXXQ3UPqZB*YX%1ooY5UTAM(yrb^f~!M8bx%P zbZjRKK$jUhsnKU<9%fw=H}iu-Gow>bR_$;>Uokks#BzaH$UF~dG3?}le-spOE2p{r zm~=p6A)OhwLkHuV#~IUe>VqE3)we-ySM|+YH2&6bo8TfT{+AX_YOxmi`V6#+<}}A+ zx`%V7wnbvG96MDh7Spe<1bhb%oK5LuI86{=7726!;$V?90IP8}#o=rkXwEj5ADkkP zk#&i@K`eG*)L7{zIE0kj(t4|*Pnux9oS=!jbyulbE!|omBTY9y7N0PUwfu!a z@dBNnOsCigv@S|%#_$3TlOaQ*;2b`JbNP@X(eMS*@Cw9ypy3Wm!z&Fm{L@?kH@y?$ zP~Wt~UE$6+F3dF5os$OkGIHxoY?7cCTMS7^Zgmm2PdYFd8yD zq8foF;ChcnEGWK!Hkh~f>{MYdX@e$AlLKwWT$?oetG_!(*1#b&U{=sH6r59WpJp1u z?=XAkB`2A^^LFahCf?kt0;Y*&e4imonCC*Sv0*VvSN7Z?C3$2J+p{-LqnF$aoEr!X zaH>o&e41^v!Wqyi54zo{= zUHtg@D+`u^ciQUI)Q^qAL@&0>VsTeNy-R?nPJ*c=8E*b~<;~TM;-#A$4WN(Ub*TS& z*#lvrX=eUEpq15)bLWE4#3>$cNQYZ=-qVXA{|4?k8#Qh<2d~ZdN6hF+US||V6l&v; z!44pU-9`pGfLtDeNak?V7ZpwyI&hN&c!$%pM_r}^mxHH8!c=8s%M*z!ele?sZhuKM6f*OVJmz#0-AxQDq;reomjHT#=fvBu?9asOR=xXGiGMhbgNV zO~&^tl#@#L6z1Zf4%d&7P%Hg@rE=o--G%!bp|d%it-unu>AM_ju2kM19*tBC2n+e1s*qabC8n_hF6xZysWf%Z>s?WsJZ z(@Y57e4TT+ECT&pBsGyvwd<&OKP}|zwe`^SVF~)VRW5bW2KZqC6Sez% z`ZetoF$VSa2XEe-eSmuVWK@R33Q$PHHLUsstF}f(zja@%nuv?%T9?0^4X_UD?mC}- zT|1f99gKC)(7LEr)@#vFg1Z#+EfDg9!5Ho0H<$UhnJRGBk0-+_KP2dLUS!J56>I)>NNtCISG4ARsSXPoHwps+xUN0`$o{K z@rDI8zqS$iySC`2s=qV;S7e!YAKUrX`RX8$7mgg+QX^7Z;<|N8&AZo&ub+Kvr!MEH zCVWXiAyHH>BtZRNnnAPdU2Nok(+RxU^4^^rT=X2)Jb{RxZ7Y9+VXxD1|EPIa+59(g zDN}u5=SiJLJh>-vQ0V9}!}W<>PcWKycPoZ@c?S>cu8(v(Pp_QFpW!V@-uXo2kJKkX zEL&T0u)^+v|1ZRr*!Jy4n&{M|tU;}`GAPzIsFl~YaCwXJjtXSbS5M&2hjP#wJn*pZ z8~hql{ZRV;=Pf;NqVxo1$Nzd&?=^f8TO7rs;-8IU^5En$8{jh}o;l32$E;8iky395-U0hitRN&yD$A^cs0Nlm}-~cWF{tX3gm)p_; zu!W8;?nq&H1fM6Ma>S^m`c$mT%wl~OiuKnB+DmF?qL0waR4u(u`%kfcv;lhQ0|~QF zP_Q?ti$atn+shMMbaDCo;e6cVh0W#`qPY(>sytyX+R{4;QnS<0LIUp8R|U4D;9`Rw@D}jE%4JTm=8IIo)O0<(`N;RVdlOix(d^tmSE1?0? z9l0sQ;bYxAw284;rj%MwyDG#1VrT+>oGjqzCv0;Pc91QNQx1A_P#nQa_mh~$_mkiN zh)Q*-a2rwgMbwX*H#mBdpCFJ9cyFNjGiX)a&&3E5QBhb(;_%~=}r017vvjnf>#w{&GnuNgF%P{wf{7e-j-BO^dmp?x&AulBxmz0ryrXQ+~ zE?`nN>>htq`|8qddM&d5?e_Y~q>>MbKYXKV@8RCx*l6O^F}bnY*-*qE z+mR80xA;de`xck%JEK*bEJai0<4XCRD#cRK#8;5hRdD*Z$_|^D-78n@Ub<|~m&{kpI5?!%TWckICe=@I05g&C1X#16q;>H)00<>)H((9 za^)6I)E3O>=RQvw&4QNWuO*dH*NcQq!v4<=4 znwm@d%g&wKAKf2sg$Kut2u1mxZj@c7!{&iZ@&yiCV)BISae5d;M-7tMv)gwaD_fTy zq9bWlc-Hny)Hz?B+T?F6sI@J_lb_#=1^mXKk!&DTKkzkWfLb(N|^k`!fy+8 z0j%cA>?NzdT7l#G6fccM zjPV+eoe_Uv)n6JhsO_2S(4h)CT>ms%j5G%DBjWOtGW9$2Q`W?36Vs=R8K>Xd7mGy#*00>LcSC;aeBB+UY7U*JJqAS&@Vz|#%vAlUsat1c*yWC!oDh?{ zdiNZiFVkbe*_fBwN2m5z;MP?JXDeZL1#kuOdx*~0bjmmb$NJ5{kP1P;l_Z$;+#CB~ z#fpWCmg2nm@{6f+rfCxL zI2Q}`Ae+0uW@RAbMmBfD7jFh^u=G9V3HgUooPhn=)J;=ea295QBDb8GtYBRi9oB4rm zQXiT2H)`N(TqDQS7k%&mTWmLy6P-=Bu!y9$JQXdU(9P8RhqIrfIYCf>iJg|+qdOPh}G!cYj~=VyFfpwqm=lOYj(L}U3*fp_2i ze&ycF7gv1SI0Sa@tfyVZBOKhS?9br#Jy*c76b`;IEs^jupY43itCo&+yi8hm;X@f} zB*0F8fqKz>+zHm8ec(P^H$ArJNIz+vyE;^o%_;Prj{*a5?cz-B+3ZX=g*NB6BM z-JqX8Wq!_r=}oROngg>}&D(g;js#>#>kgfS^-GU535Vk(+(dP3hiYoNg<)t>dSvX( zOE>HF^kzM3+FIvcQqT!9>?rFkz%VKD1hjrgTH|Hoy{pPFti#MB9M(l|>raUVnzRlX zOQ>0@>?nizVZwifF$zK9p+Jn$g5SPz<96J!mS$~A!Dz^-xJ0CE%-W8i3#2VTwO2LX zY&D|@!{-ae{&B=)1#%d}XBRgDbs1z^psz)HI1JN&p;<-me zMNYyK`(;Mv_DG7%28zsq((Fws$=MW{+bJ8ecIechW?W{NF+nuM4j<4sFh-CXxlJ3{ zJ)>Hbp+UTQCO1Y1MRTAzVJ1g61=E$p3j=tBaxk1`p(Hqa@lE+J7jVTLa06WEn)?oF zQDypa#r$QEVD~8Wq${4-bO|5XW1jv7vuo4ZgNHX~jnYkEr-aX&o1)je^PV#z0d=Mm z(Kiq7T(NC~ZvK=76LI`!K_@$piItc&T;Dzf!gs*gZHB=W*?A;(8MzKDd!*0E^gBEXoMbne@n~tP~V_0vW zF*-5|(x0>HxEar=DPSe?+z&VmF610DaAcp3-D6MP)k42*ilGx!sk)y@EFtQacx$4l+irmsDpnED&U{xm&c^l33R5sb^Pef8^?zC88|wrcR%D5 zycFA%DC~>u+KI8~{1aHXkrSQ#xryLrxF~=dZ*UWbwqc3MG)n22Dhw%n0ej8}VzQ^O z{N-5ARd5i0KO`6jeJwbl-_yj$u?4W5-aq!Jg^BostZ`8M3`AbD?{LYE6Ibn^Y5RL< z?qS;dlBNMWBFo0mh&Tr$Gh>JJwj-K9dSL(st3Pgm=GLfFk(+dyn?wUY^5sWk`wtj4 zGGxH8gBLFy-G5Q9xntU589Z>$jcXV7RaBgh^Y0TnI#{ocE8M_AP(mv=9=m|Y5k&czENl(%RMtZVWdN>g=hisx#3&(4nt)Af@YkQlM-n zrXo$FDA8_1puzu|t=J1;qF-0J7>Qs}5=O%arN(g06yX9V=CWuW9D3eQ`R(^Bzg??+ zdP<77G{)O$hf6!N{5K4AgI;6r-+~tOZ5|M%UOf>44C2rN9Ib$Vj1~r62&hF> zsd3PSNQ%k}@G!_P8ej_^f-a@T+kBLybEw=BPR2h#z%?H6_#NOn2{qVA+og({eaOzAPrI! z57{ozj`SrCPR>L}TAPCu9X=%mDbmCf3{n&sxBcWK9W=pFz#v7wzUClB_wGqSiZTlg zqE2ez2E8d>$Zy1*F3uhm`UCYsqXXW}*BdN52T8GWu0H(v=PTY+sSWZ*lP3xZ@pL_R zi>HyhBapj^FS57hg&eLRynY6LK0E)#(}PF!n>UmneQx)z=M~&8%en^;**x7F=IH$G zC5N>~O4Ei#Vi^B4y{k{_Hbr(_#imqB5a*2?tUxib3Z=xVf3O`23F7<$a>hS7gI1xB zaw6rBAf7hMi3v|3bG3kOMmS8RrDd0?Sa=`}Q#aBy2!|;ZhiPaZDiL~0!*m-oHxrIE z4AU|krnuk%k)v>!4qU7_u}>N%Ng`BTzpxjFDZa0tSt1bU4czYTLNt}8E}_qn@%oXWanN zi9g*>xpd{4g~i&trw8@!J!DY#9>Y#vo+V9lc1f)ZXtZGW<~R5hnst1P(;PkLBVeTR znkmo)cF#rsdN+(9&=UQ;Zqy5DN0!u?;*{R0f_aY92m_%w&gE2CFZ*>Yhx4N$klMi- zxJc#DeX(zSAhn5JQXsXUMuF7)|2>e}SSgU2G*$l}1X2@!H^@(mlN91^;~?HN$wg%A z!*yV^x1WtNr5drK>|n6HL4#IIZ3tQsP|qFPB<^r}fQwX<_Ga!VL+(gw;0`NXFU;IA zRGP%CU>Se$IC96(Q3D1HMeaEMfjdI?R9!#6x1#b~19ucY$AAn_YLFj%CC%X;5QGLZ zV!85>6lg4{QJ^t@(x#&nXzT?_zWW$xY%^-tjRK8*p~IcbzXckL5;|M%-ZmwBBZlrX zwNOslQ+TZ0PFm7+rcIWKW0tPX*28@9Q{{@dC6OU^(h{#zH>_Z<;rCY=2x0H`$zu`1 zw(jVuw_Ep59<-aB2laSG5))up?0KaU~7AwI^8TgcD#lvTbzZ&}vxG1i!eb;4XaYiQ5b%-vRU1NML*svukM2)>mRP0>= z3-*FtQDbk3*h>^Eii)D5BG||ISg!bBxu0O+q*Tr05&HIGP>0yQ?gat1X!-FrNBNH4zQCUpYV3XP=@yd?3S z(1bHAqY2Qy5CQlFvmNUwSPzcCg5zncGj-;n^e$V{O%!v(tk>Bx63zmZSHd&Afy4$> z-YwDAh7wy&k1|ZF36D9`D@ICeZsmCzeOpsQj%evfLyfJSa|Dy)UYhI6h5FZ~w^$Z8 z)xU-t&}5CJXF_ovU${z3Yb&vRb2#?PFWk1B3z(+msx|F-u5f}yHlu%8zNv*bc}?j` z-^BJSpn+qarGp!U>2_W@ zN?0N3mw4?cVYj9~;?;A?1=Vu~^6F8-N=aYL>qiN@G`$)s*p$x2OU{#gSe-|Kc47>x z^C%xyx^e{ZZhT+~Hl${!>GSlCX9`BvnoVQ%zxV_w(->WAUjF#zk1obG`@`7k0qJxJ zg&X6m2k-%=b1OCH7kq^2+-}KPix07LRKXBCkMbd=bMrJknU67@izxnU<}WJr^+E&D=WQk>0Mus#jDdVnlc(==2Da5)%UosEO#N#v4Ehk)Q9!pP z9NxCo^U#4`_8zv~=#IPQ4vFrDi-&Nb5ln%|zCPEfzXZCrgDi^>?xg%*vJi^E4`% zMw?TA(daE-QU7&Dvi|B8!4_2BQmckw{i~+rpgk1TR=eohqoOEFK~YtB;RxjOt|0Of z6>2m$?awPO(~6_z_pdj<{#Rym-tgD@QKR8q(Qvfe!XE;Q)1wMJ&bDn{y<@j6rNfD) z3+zohbZt3w^@wfb99HKC;Ks9EZy3Oh4(sc^Q-IxQM|H?s-4z9M=h$&!VdFOM*s*!@ zE?mO4cnlg76}@Zg<~@71jtd($X6zsYGL7anI-fQojVACmE?$bwm_pVU%Xl-F{k@$p zmhpzh@rJ%e2#EDw-+mHu`fKgpA(2Z=R#k zETP4+b6u|cSYKSYeKGllgOX@-TkWw?iCA8V3%nAsyb>2siNfw)rtxXT_4fSMR_AYY zQZ+!PP8+yW76W%mAE}pZt3Bn#{Do4SDC94c;T#|_&o*$&d|{?@&LS%L=D5ntmh>_? z%ooC2(l|xFFU-!4Dbjn}Y{_ZE8GWy%VrNa!KQB0q93|?!Yn>wfyZCJBU2%67_IqcI z7V&%?+;@1l1Q~*mAt;Bf04kLZRI2kF$M2GX<44n6omF_u+w{%?wpSFY*hV_*tYkjh zNb`g5hyh}?#?M(Phee9U#lPhMgvk#UJy&P$Y0s}S?&Vzh!tB1+I*s28^%Y&?TSd3(O}c#|T1$(pazzVtZi&hmbEE6J$uyG8}sjCO$z4q4x|M^<6KJL|tg+*#et zo1fpjb7k!C;*(zIJpiMNCP=bp>e#; z;oN&2j`9Xdn^(^Ja6g1REP=%y1&eG6y~Lc+eYt_{#;SQ3kXwLKGs;o)IcUH|biygr zXdW)MERo*L%Wq|&37TtLl;)gfr+x1x;H70(QS>=D>3zK!dD9Wh*LZA7%WD3~!Tw3ubx_Z{^TS_1dp|DKrvS zmG2Mfxp!8t4ZMmSI(E1Jmyc!P$W^tm0xoT>ko}z6Tw+%}noG)D?ZJ$h*zqs* zl1lxK9nsHbsNGauZY%YqjLn{ZtGTIMP|XuadG*7C+mIFG5wxdch!ZF~CLx}|CdPM>&ggSmx6?xMC8*}!#@ zzP*8F-PwC!r!G}&3R|Qvq+zC%+>3D%peTm{)NK_F8!oxZyVK*)L|D3LIQ5;WT|{q{ zFnZF@RZqQBfL0i~(D{RDzrM<>Cpv#ntBS6A?|(o~DJ+8Oa4|4ZT?kE%(^Cz(ma#PAqvWP2BfgFdW88bGpTw+mMa29mf&0R$8=w_{uwvv zK7_YGrbv(Y-u^_GrH<*V&Bwg&b6nYh*wEm^lT$D}&Y=S(CeK(WIftSHa`QVN)ENx7 zeRt)9-IWjKmH)#T&!z7xvr}-!tFC+RZ(r@9-*es;ls|Bv%la#`)31@%GQqX?edN{d zSdVcz!yfxIzQ@k{NaNB5pAru6NE4{6nI;$zkC)sKkNE?rgPdK7sXk zH_~)0$4s+W4}U5Dn7ZVcpR*p{;kNWsK{fQ#yc))_yB_*!UJqs+Ur>`UUK8WkU6(M_ zZ4LjCo{|^_2`2ij&GuGDj-3M)95*1F*ywL#;7C?!|YW6!#rVZSHLhQZTtws?1l4P zC*;F0N4Q~_S8y0+l(GP&0DyV#2>YN90L;7u4#0dQAAot|mLvc$qXahqb8j~QbJ9i* zz|4n%!qC_-V<7m^5!k&|XB3*w`<>e4nDwGY#~X*YF%DySzf-$RyjBCvXDLi|24=qx z6qTtIb`hlkqm>Q8Njhnqq?6g~Bwk_dC@tIMz9Q}86=}F4&A7riZCsP4=3g^9LH9Rp z*S8^rfmVMj&7ncxN{W$qj3=%{qNdkoq2EGuCmVSQ`?f~j{DfmX!N{jDJO>nNilsDj ztnox7Qz(3W$N`5>4k;NrTw=pdXgE!Q&JlYw3Z;R2P_U79R71XjZs`k}_}Kh)Sr&9CzNPpa(B?XEL&qt5P}?n)!4;;K(exO_QHT)z14RHumx z82$7?!kllpgykm~B8C*n<)bL={G9>ZyjwWSOt-RBy|5)Q;^3h5ZSz)_98RYC7b>ju zyc*EN!mQ(f9qq8O(g04gjpzDZ6JprT0%w$xrEBwpo9EUTS-xb7vu@&vC77yAxf7p}i*r1=<2P2JP-` z@6zQ`2W?)&Gp8+_hh&?x$gxfOaq;X$KQ8j5X_m~Xhr2|!^91+96q0H@WZvsMF9x)= zu#!{jR;vI5@S9#_9${ybEUnh|KN6AY3F?PP=5ePgImUao$^wL5#h-HTlVo!>p@-_( zP%N*?PSPUt*)*r?7v)5PgD zgca}>N|#^Z8E96ul&w)qYz7SNEK}^T7J!bCNu%>TT9c zoUvZ$dtubx)3)o!k6pi>5EQRfugR2Fdpqre=J<|OF-G&W9zPR$W$Kx=o-ZucDFY|= z_^Hn}Ph}>x%zBkYF?chs#*EB}(EUeDE#f|71XeD9I*LdAh4CyRfFfAS7u1p>vRK3> z%h5Xmb{O|*B&I%oNHb^3)Je^i2KbqF2YdzvTfMlIE6hcj+$u)7Lb8gA&D@yw>U zB`ex3S(ndC?F`B4eOznTE(wy=XF?|~S)CwRUAtcFph2)og>MQk9`}ZXEcy}D}@HYG8r2*Gpn$NU))ymsg$+x}8!;rNW zYx^CExbBHq<47jltxBcGd$#7XR{rN__o;}@)tIu?Gl{X6R&ZHswXw&x6s$R1UAU~> zn0R4q6I;8$;QBw>l{4BOkhH;&w3uCUB6c`_wL}gNTRN0WnvF|ZFGrVEQdod+7m{{3 zU($B(S{k_%IU`1d%^BjuJ}Z#4-B|(~4@oNuNz0eBS9%$A1ev$I+yX5?i4Md`QrbAt9dpf!9ncaNb{~6)9{5u8P+u=O^lu3lgVh zO0*W5>J;8m*{uHz4YtBM{8jaazp4&tm812(rdYj?neNf*5N#?Zy*b%WF(I0V3DG6p z!KYVC5a03xqSoQSgelY1*V*L2JM8`#=_LP|jY%EmXx`33YRd%H2sR;hxCVubzRV#o z?;2M{pvLsR+MOB`#PLBkwv+S7AyC6?#O*6VEA_dUdX6=poiDi$VsW6anJFnBY(#q`CRGz-OS+Kd|08DOV&LjUg3zf@iGYUtHiK(?qHn*NMj&rBDdku%5a z^wg)RZ7w!yB*gUQSk16=D?mS~h-W#bx1&jui*3`>g`x4M!IuC~jiMY1PFVvy}KhOZ?|K^c9Af7`^=a9vQG4R!x9y4By=`!xEsj28Mhzb7Lv3!W@msd-iSda;YM)Vq2Mj^3 zF?pvYG_whIlUfpH-=2i%J3Mumb|}^ z>l{Uy??+*=Q2w#g_80=Q#H=Utb3q~|`#L5%x)7utz7jz2- zt!CU7iAnTQ8-Oo9mv%Bik zjONv9H*Q?LdgF{o&oZt)g@vKEfh$ixrJJ@Ot|!ph73>VgmguEA&zfrb&$HYh@_`13 zysCBsJktWzuOLfKQ;ps9=qf4tqEE`X@_#O=uEc)fdV|WRVs=FSi*d|VhWl8byjYsb zr=7D2)Xhxz1?k))^Tap)#nq zp)>SGW2C7I-47|061~*})EOG}|G;!WwdZ5!qLB6GjAY3gKjW;1Uk2-n-MVkaVt#Zh zpG$)$a6Sz?()8+M|7$1B*RB}G*_#hhTDd~Jw1@enRpq657y4LQ)%?;3v}|!qy(#Vd}NMjMtpOLD9N3mior;%We(| z{Jsnh3anvsvvUeoqI&7|yu(_!JM8LuO>yhhM17t)k?Yw4#fB=;i(y(s1{Kesp8T_T zayk`C59c4yaPO(D-gl&w;n7_q0>vO_MHA;xX*sWF5 zrira?#O_+RWwT?Kv@`<0D+LknV^)?$#+e9vAbry zxZYM>z^1d+w7N|jS_{`t7}@XE6JTM$O0L$d{7TYQs-)^d4HpUm=%v5}3$L(I7{Lkk ztK>VI#uq<#2V=2GAE1|0+g?T$*P^NxfByxrqMceKSo>ySV!258q@MR-cyNge(BuFV zDYC&R690KUahm`^7e#mT&)qTW0|{IZ>(FAFDf-_Lz%#dqoxH=l!(vpNuRDk0&FO4w z)(`4KRjeD(0sgKMi>MyD)Bx@=`Z<)lrU3jTK=)n%&Ks0~oT0p1YS(bKD;SgmDmX^q zP#?;9v=%_w8RKF_M^fEII7F(u`DSzp`d0tKqWpoq-R`-j1bF>Gi5Es#S`!#hzXtOe z_^{|})&zfLVEb)~{W*M76L^WR&;Ip_ic|5|ukZr={8c#~v{bGf`y8*C@~{K#)@viS z-W%px7sG$}+X6e&MffiOK+L6LQaQ6U&HRgI!lbFfEuvX20@Ltmb~eGxkLLcS*2#S||3q~kD=d&G`nA}@OjT2>w%9`^zf_*0M4}S0 zda_xci?_&F*E*)rGohSF?cmaY_s32r{Cy8Z>FKbHT{Ali={wcdSJ)W*jixcJThVA> zpyKZ`e$g00`emG@(b#Kf&O&lpJ-c_0{4=R6NWXH5Cp@EX;Z2)Mt)6jZc;aMd$vXWc zi?VbXIG}5n0dXhn^vFVTJ%jtuzfBp=eVDZD5a&Kj0{3Ba4;zVPZU_AF_IB1EcChQ9WZJ;OXej#y9zL$^YQ-kqzWbqn%(3Hpw`VM~pI>s1 zvmnOLe5#*+1pnTUU+J6YknCKb+6;q_Y_)F#%Qub<-7&c;ayGgXFIMoE?#D=>U%E7dd$SD95DXGlzu2-1~9>eHM(q8I&rW%A0FP zoK(4`zxz^cAFA^bh1BBd%)(ZLYf-6X!+vh_C1s0rXHT=iOV)f#%&Cq zl?Ta`nf!pWto)j$w@ESUmGN8*pxSt2^Z~^ZzS#i$)rN-RV1f9i0ge<8_<|~gh$8&) z?-uw2QW7%xV-~5g7LG-Ti>%!_J^Sg&Ymbsn3~#;8k+wp3G3NUt)qPm;x|P`H?DKn- zsQAa74Oztua7)NU~DwRxizLUtVo79vZCmY*=wB|}7uM^@;_63Z+^)O98 zvSCMjqKyTeRZpi$okZo1-sU8=I$|QfMEWw3`X`#{G@ge!y?h*Zc6Y z6fSgQF^SYb%wi3M1Tl*m2&_RO#bEu>N>?6J(`v%dvqIkFd^~4{=|g1;BGwz^oQxrRoQtk9Daf3%Yfnj_mtdsQxK6-kVe&!Sk+ZF z7oqze#<#+{M`Y_49-DGD*FaB`qgY zgxQvgXPS{IX6Le%+wCtblSYl673R}v%$^hnP4OUqOWek-J9lgx(?4WN*x2Fl>X@K6 zJFUSwo~XIfbFucuf(CvC^|PrllAEd7i5h(CI1>v)VBaMwj3o~>wkUm^Y8GIuWA&f$ zH1*Zv^|C7KPnm+Ri1E)9{t^+LSCM`M+t-f*AE$E3ROvfumktN*%Ekyi5;GD`rSLIx zOk_>f=482=CMh%wa3Q|1C*orm42qAq5mH~7ZCa>fMY_^M&&zh@AthhoaIgJ*Z6oE; zxg2Wf);2S^wwVEK6F7KC*Dix%&f5`dXL#{<;a>b@sv2JWxiD^&$v9o;L{^eR6=$ts%ZhiAjzu;E>Hum|S z)v+B=>dz4u#gd{Fd8dtdKL+_i77DQ<82?!=hO zd(G5SZ=^oS$awOkaYoIWjT_gjnbG)(W3NZEj;F7sojH?s?R3XxO*?gJ>WFx)?rkUR z69-%p7F#y|v>__WwrBX}!S*if``s7BT^@;BENfOpOqn)g`V_pZLZ3P38xV|K<6Ows zIMH0=?5wwrYn=Fx8mAOAj%VMSoFSQ5eeyQLofv4c?>+TwK(gS4>uv6N z7KYc1IRJnS#?D0rSbPU?+>&(K&E=5*pa(d!eB=^^jh&+%qf2H4oFe0M9=ChlMBgA{ z_bVQ;3v|WyVy7S;f;%=J#{{`i&L(o|H`Kq;ty(`InkcL#kI6jcj>&9a7JFZS3Yn=L zgVDi_Uh=Vm4eH^(Wl#zIOEdZWBczrOEl^4lA@zy9P=_}NNHHY>=Vy$!A3)%@;?gAj zN|1jU@mPAGfy|KFz+&F znBRkjrk=-Kk0_5^p(?0nqJ#wao!1q|i!;TAVzT&5d@25AsbXnuX>aLonQU2VS!Fq3 zNwmE5EaK_oSq045Z9F@9_V%3axxzEnGuiX5=j$S#MXDERUZhQtpdyot{8A(uEZQfF zoGtRK$U8}pib^Gilh15nGD$SGDNL#?CeN;LjodYz%H7QT}kL)RbCabcKTwQJ{ z_mum~A@XE-p1cgiHNVJ*z^eT~{-dZz(NaaL6#c$v$D$!1u~}4f0~ocB6ungRdeM7D zbBn(9^6*l<%6irEYU0(&tEbmMuc2O}y~4fbctv_`@rw0I^19-c<(2F8+KUtq<#R<- zN-O0QU*#L6zS2tRtn^WaD&fj>Wv;SRS*2`HqLe+#5#@}Ms@ztxmFMdJF%rvQ#YW&3 z`)R;`3B^)BLO%Z!chT|d|AGLm!b}!Q1LXgejbJpWc`Hy)tQ=r6v>$YQT39-w#p$Sxo%&{_0_cnx&db;ZsdgU$%`K;l@E9`Q<-V2=>A*n?7p z{|RTA9d!PGAj^uHB_>go;Zl5%u;i!ZOCo&^Y#%vr;K-2!Lq={pIN$O8Y@yN83mtFx z+`5o_Lk392y8A)}a7cC*s*0hkv%pG!dQeE5Qiu1<7&tP1#ee@P_5}iIu6URx2{7<| zJa{Rty$`nVE!{`3p7udD>8eEf0KVqe6Y@np3o)zlf_k)eHr;U2%P}N)a?JdpjqNnGJE2y+U1bqm>(G~3}n zOQ^N-TH9Qo-)`Q_MJW7lZ89s_74^3Ga9aD*b$wW|HVixltX5iOl3%8#<-KTqwMysi z!~2W|S@exPuOIG@9@#I_{vAtD3mB^l7_1#iO6OBxP!DR^Cn|W)cstwozGcI}Y zYul)>p`%747-{S7UE8+paUMv%_Yt1Eq91%jP*-Cat%xU%zb2W_T@ia<(3=l!^fRD(2ZTnh9pa#9y`ONZ>#m01+VWWhAfKJ#r|EX= zH2gL7;x*y->GtE~9L_EAOn@~-UYMir%`tHfYr_%x@PUoo5jrTTen5wg^_JQ*#n?GJ zcJ1@ov-N``^h3x>fg?2AU}5%Kz4AHeA6jNlnlzVl&~He0&<=U$&iyjkMXK=>E0RjA zQgwU*=#x*bZeVhiipkXtOs;a=^b0rSddZ<}atBl$u&>SCBWWn`>xj z^ss%Pqvk6^88gOW`tLxc+ZhYaSOb+VggZpZD)a;ApU@fBnD?;8l%_Iq2LO3z7D=)A?>@guk8wlzxxN?p56#>j~g^O--{c{c!9l1 z#{w^IS$$-{O&XN-4#I zOhE*W#>B=(?~JumeQ%I~2Zs(D9vmD!Vjt(Nwac}*OE?rhKrNu~;S$ajzN}xV0lrxu zCd6TTT~m2G{IugRAx) z{e&xlXR0z#L|+*yY`~jhvyXg<#7nXfyQuwTgf5nQ!%8|77|)cSSFKvQ#^=<*&@SEj z4+!eke}B@Cjt0g?+E8Jix38{H9f!w95HQ1ehRrRVwDB_91ESAXOTg}^yw4{yd6r+ zw&=^7Waq$e8K5wQ$=rgO!R-v2k2#ghFf+qjn+3sRn-%qwuQ$&`2*Y*I>xSmglIL=- z;9;Go;(7gC&7WSSF%Kbs$_27tPL)7&yxqJ92Dt(Hm;K(DR*GzrtFG`sq-lCX@K969 zYpJOP(F0g~=TQqe?JpiU5pB5hzo8|v2zQHAal!Nj)2G{j{;?>+9xBRiypc_Ayb+6m zHzJqEAZ@$dhD<(hU-Ll%?~$yw2l{bSp#i{=F9@#6*DXq}9tnTXV=oGPcWJY%a_CB~ zB=+xs(ijmP?2xZbXkwc_KVn{lJ$OT()%{m_`eHH^pNh9T3-X}&6#P&sf|iHAe=Nvj zyG@?DWTCyJAp2EqFufsy}e0(w`2n@*}zJc zVRCr@4;YYf$OWNu`Qfj%(dX_6MdK5g#*P9?s1$N?baA2el=1ilJ6R=Oh_A>&nQvM=U4&HU!hy*FCxl@cKy4ITghgeuDNuK@rJ^%D)i!9rb3-OKGz7Yq+s6*~eU}Xkd==X6M#XbrYk?kRc-8#+1@>p3>$X*qBNAjwQXXCCUWPF!WKeO-={~-=|%~ZtV!B#@o!Vdq%P`9ea6D+qdykGQI z&G5qWgTKUeMN9ZR^9+>v$!Ua8^b6L28*F|N^VGv#I0k7Y#OCIDBfCX>oh9WK5-#?= z&V=qPF;k zjV`fAWf4)>w*nMHYPmuR8T9=}^WtwE>`bg2?R6#wh|Egc*B%>0qb8?Wzz?bV{AAis|j!ndJI zgmtgU--)kMv_md``sn*h#k$!-!xy_*lLYD6DxJ}`!?r4ted6j0L_mESTMZwPPf6|e zb;j!0M^meJ1hj4NVRjU$P_6+M5db@T%m#DUSDVj;w!bEiy$6+Sh5sTlq9lR5oq*a( zB34gVvr4E#nm1MhJ32(#0-zb#lirxZn9dlp4&OCbx>-+Yma>UREf!j?KIcr*%(z(@Kvh4*RkmGnlHn9 zA(wi{O4Ov4Ae`GD!w}xP;bC_#>pSV0R(~E1ns_hs_ZFlvuk^m=utuj{%H*r3Yi;x8 z-Kh`v&HrD-NL@qQMfIH&E1&)JSUS4~HYYTR7sxA1xaE)`Y0tT?DYI9QQ!I2?#iLR6 zBGXo(gs8D^mkAr$p<4)`8kEsvcqNwO{=TW(Q9^A(_1)K)0mqu*H@-A}$0lf`>qFJ2 zx;ia+*8kG%Fx>j7Yv#2Ecv6xz>>E@w+&$R7UUlCz&U&UWrO2aY2x& zb5_&4aSt#y7o;y~vkt4 ztX+RnrMvG33Z0EVVOBi&FtAOtwOq(5I=Q-i1J7FGy>O2Iy0wEK{S%7@Za~Avi^}vj zcbrIWf1~J`y5ggwQl!_^%Tv-Skbp}y!&XnaoezsAH%@Y|2Q!J1sthS0(2_to`X4ZMRCCn~&g{p716=o6J4_u>{%CK@ ze+Yx^Z06S5Hi{YHE`&3GdZD4`Pkvw)G#K}?!@cCC%51&hU}VGq*Yi2gPlxiCFvrT- zVU9Vn^|-Vd^q1|OoE7P)Cr(vf!F;Rkh^}QX5owF5n5mzhHUthC0z;sVH8Yol;yhI) zIO-J|!vs^}qEr>239T9#5~MxU!%)8=%KfE_ajj6UP4UowT~%9uCeM*<3l6Sy{}5pO zPJkZcv3vbf)(cwtwmr{Hp1Fv1Qzu|G*4!Z zqlE0}b@uX0VeDH9McO_(4JKC7)EE}hL5o9msG&2qQz|ZZ(e=WmP9=oJacg*yP2!pR z*n!4`yXoNo!(Cd7S9IFYTPe?Po6|HPmmTh_`_-%SOJg4gnVh&m*&q2^~cCV z8=v`9e;y}%Joc35vM%%Y5g!Q)m@9r^K16+4wl~T>nX#9>msJU$v3iSHVAXxdBAsYm zcWt8Yy`qQou;LYG7-2s_%>`NiLpZ9{nPhr}c0_go(#n%k746@2T!RVxX{;s_c>Ebj zW#y@Ru7euQ=L)Gm`ws^jRpW6i>Ri%fC|VM&MOVZWWfVf}A@s376Kzw=uOQ>IrJMQv zy9IB{P%DOrug#J;5WzJ~gx9n+U2alM6r&H2B?@5{HX0t7=vy!y%OFhJ>!S{^U5#53 zJX0bYxNnU0Nf!KVr>C2xz@B}`V|QnrwHV#inp#7NNETEQakOV`3X`p90Dw6Zr$nwlLZv(9&e1CC~~Lj7-G zFpl&YsO_HtnU6M}_H)Rl1OYN64mbh$AetfYCrpkUU7WaGYTgcA zX6hSwk(+sdYVFunK)lVl&W3v&KOMW9RJ|JMM*rk}3#TG}(Mu6Z!~fQgLc4VNr8P&@ zv3D@$MslSYhnnAF!LyeLgiv=0oIMnWS~PfWakeqBO@8(YO0Q5_m?cMFu2_LZR7@PI=&wIL#uQZyq^BDjTTF<#~?q= z0(1G@lsx^ez1YjOsu!#Z?P=imuJ$SG=El<7E^@*CzebERD+9LHT+t~(9>Vt-N6Rcn z;HIX1iNI`*Ei%iug14L@dOy7|PB~jz5|B-HXid=k^3bN59Hx;cYhnd&lkFbADd(O> zlR0#e`@(>xo?noE(!^7G?t1&29nRanL~;4YMR1w7qKA*Q(C!^gRo69NGK40$7{0#< z(Z?prN=ib0aVVK%0b~%VDTiNsRZ~|xao=SLS(poe;lUPmRzme=!5SO~XCvCzT1@DW zwPKSTwJYoqhrbldJ;&dwz5bA2PxP|WQyJHx)n=wmhteTE!*rtm=BA9D>mc#g)KIk> zut5IpXUbR5c%0X3XeoQbq3w&=+%-^iG!a%WC_GX0w(2U_AUFuk6}MW~$0Yn&zkMn? zV>28Zh8>>AJyt$T-!yXh*qL2A|Jdw@UOu4m%g_Jvsbqg1_ zZdLkE9A#MRJSoK*Tew+xgI9L0!6EpNf7@|N8H6;vl~j-y^bGf|x~;F$`Z!5~r_g`W zz+8i1bH>`#ZJ!VYPTnuf_mN(HLw@bVJdM~VZl{tbK!_Tb9jq$uFZF_A<;a&``tmGsouqMK~d-ENkqC8bT=Y%xIikX7w4R zNT#(f{wmW0_TQL?M}f}74?PIf$QdEAn`Oel_Smcph0ssWewzUjl$^fFv_Ac6f>)_P8;bdfXN}i+Eoo*x9{R{$wr+oI3NgNU}SKIqX@9UZ3)eI)I1l~Ce8=T>tw=HuUQKt&p^ zoRwSkfhCJ=DTk_~N|!VRnE#YGUa6ZRUmJ!W4=^?Oo@Zp`>o+_z#W2P!BCG!7Y@`$u zSz;)a<#ila&%{*hM;@TZO;Ny?fTXs{CCy%AuzsV$=H_5eeTzd^G}5MR5hQRgPtOC7 z{;GiY`B)nok2NJ&?Sp6+ndrGz-N*6wQf&FqCGOgW39}fVbFg6J`k>n}V!~6UzE!_5 zn$2G|Y3cn7cM|B0?DAgD2Pr$d-q(zA32Q{wtIFLl)v`eo3AojF4_CW*{zE1kU5&eO zOtb23Jdm^BBNE!Ek;g0271fyLOHVm!1j^M21x;6rj( z&q8vW-P?GV0T$e{83K3TUj1nZ5p}426U>IHqHy8D;YArHtm=nZFiT8YxnWrP;;eh} z4z<1mjrrFjNV@vgP&(|d4|&VfJ*y-yfEyWYc5jkWF^*gz8_pQBN`Qi!#o)-kgk3g~Rch-xa!Hjy32oOqP~BAr=%zV{bW=ZJ!BlS_$-6b_ z|JMT4EKTvv-*Yo+;+)9;+cPJEz+;=l6|fKNnnF z_fVPSEAZGg3u<$vG^Iu8;k&eBfwBv9*Wo*KH$PszI*{zbB56DO+mdi9{I7heMyA5; z@2dBWqmj3im@u_n0qfS?I@ms^gYTdxQI+e?yw;}Ol=!LV+Bw&<{z|~60h#5utA$Ntf46}q5n0e|JUbD z`}>cBU&n6RzMs<93g$91ngk8Gask3lo=k3Ux1;f{WQWE+%avoNSPIBw}WGEoyPtS|l>r@F}iQgMoz z2mi%L`=hAQ$j|(73)im09-1?@HLPB0%VC6p4d&S{6-wmE==0sHGC%gDd_BGHHgsPN{WvY@q4uSWy7SUdyf(SJXBn0>=d@`=?1=8$t^qw=v+h6 z&?PU9H#n|~=^sqq7r2$}5QtNYHYs9DyyEr)tR*xw>00`NxEZF)etJgGDI+5N7f7w1 zO{uuocY4tiXA)T%bsQ(I;aZmN&^>pb@B3;?H6`v|4|{iQ)gQhUOw9Kfvy=1k)Uny3D4d0Yi0oQqgh;HJ ztDAe|Z1>pb9u&PCLA(4GtH(t`-kXj(>BS?u6K)`IU>$9W`6Ht0#{oIK4KfuR`t!~m z>Uf*Ar z#+#<62*Q5Sl%^2vE=sb_dD$amNK?re_RzX_idDN|fV^7=EDV@FU- zeEXH)wvu9Z;{=VL1IA5P36_6yf;A{TI2Z_S~mwMsYq(t@*FSTFk2V z3zT^oqUOJvU-hS@utHfp)gJAa%Xb0g?)f_e;cv4FB9qoWL-dV5$cxKpzgj>I1^U}M z4ir%#!glctB#djf-IZS~HUDY)m3M1=aBl|D1U)!H3`PVE^|X-_CGCw2g2vB>BT ztJ?8uf_ir7a_32ANMU;`&rkDqNIH(Wo)$*5>FMD7wc>o*lX^#V$Z}%%eb(eLBN{&n zD@E%o70h_XxZohvm4;F!KP^Lqk{^A871chb&JTrJpjOfPW~=Rwa=r=4s(*y3h6+NGq-L@e&xtO6 z1;;Xc2e_H951tc{N|#-qnYh(GYiqf4zP9k@SJ;(+{J9$>wQbp9GMVrJLlW-s@&xIA zok;)K`mI01n-)Yn_K7MyD08e{9DC*cbo4yViw!+Mf;!;0$^CJ<1_F;bRD_9_j>Zya3sAS5LTfPz=z*4{vwJo7sNDTvO;Eb1Sp5S z`_f{^^1=)7By&$b>lqa=2B;l269xP!^shM00Dy1 z8g?Kh2|WOOLDS)Ow%^)^rTE_eL!e2SmM5BqhEnnyDa)>Ch8j@SeBuk6=n+>BjD^J$4rDBXj*Mzx(q0dnXP*Wy({^>QySa*EJMBj$r1Kn}O)giWF4Y1BIfH`Tvh|8;==fWmChCx;eHSYyoh&8L9ZygRsz7Z1{AsLy=zGo`O_LlO3L{{BY- za`@TL4}P}!o^Ri`7HQAh4mQRh=0Dg~@+|#1YUKoe49CJZaPHMFT#O0@+Vcw$t&E3@ z6p+?~Yi`Tk;AD5Xdt-gECwK9tlKuid;Go4n{B4}Tim3yb_nJAuT-yYw{$c+HgUQX+ zo;caXj}SN(^q^t-U0G}!-mi>y+$Gj>)C@!+q?pc?&~+c; z)4m8=BeEnqpcM-HEn|BkPI%0={pnjV&-t_ZO2LXV+Db3ar9h5f^4bpNvy<^Exyj1M zzt6c2J5XE#+_Toy7S6a{>rt||E;DhqbQ{5S{{@E~GrhuZ!^7=B)`&(wDBKZ+ha7J^ zW)4m6r||LS2#4HkDCUk5ixF(QA2N9?43Lqq2b24=*ub%lAo^l~UPxW_ZG|0~< zKK)9KLy^oy6~;k7)7HK8>>3Wf64%%LI$irt6Mx71Cfv&ElKps(&V1^*LTN=7lEV+1 zyh;hdys-F!6UFC^fy-Ia7bV~_79dBwYBsworMNYZ5BWv%y9iuRGDOv#Iupc;XFxRMrjVl9f&z{0 zV0AFkx^*eCxIGMiFAF)6XOR{Pjh4_AzN6*X^QxEPkP1UQ+uK6K2;7d&m6D%N{p8W1 z=phuB`B4o@ta4A}|9&*DTs)rfk1e9>2|H$8@FpF(*w~Q>-dkLIjhacZ)D3e`cCU7L z&BDV)c*WD?b)DtqheeJp?pZ>WTwXWTBX{toT(F0uj(c)&&)JWR>17f}?N=;Uvh|aA zVSXn!9?&>!RTs}SRxiU$t?1Vk0yOj7<7~6&bM|DWlov!r#8@<4o7RJT;nyFHX?{d>S_1*lp zbt};BI)M(p{)_kXvb&AZon|Hx!lXU4FokK#wMSv>{aY2)eZu#m$EONcF_X)7UsUOJ z^~Y8?P{*B@Vkwu;+1ie5rw|miHRWq*3D3D7yP#My{?_B5$09`pLX`4Gy6I^-v6|+X z|JeGHWZQ5!^w?kySFycuGPN;KD^YaJ@K(+sC$&S;_a%DKA?PUs-xvE`+ZxKa#>+Q{tQQGq~ zdcpkYdn=p&GPp46y(#@QWxN>V75o4r3cK5`#KE2sMKoDm{-iZ8C33@l%??k*y#e`B z<<+VUGv9PGr!Vqm;}qdMUopl}2?9gE2&a@1syy}TNquHlw&JhHSjtG9nUuiN1yrbiOyL3im6~H@hXJhlZd4^24Ef153XinB!{>jhw`XKt z8u1LX3EwE4y8%0hk88Sg*fYwArKP$;RZ}D7EGL(nZv|x{(EsNJfTP&j><$G4g9-|bm10lJ>Tlx(6>j{^j2~9c)XL}|_3Y_3$o?Q)ED>5Ir0ZmhJ2GwkJC#voJ+(I5qX>!FN*3Fae z>v4E{f2UBRZ{fJky&yd;!x1MPS}^kd!l9#g;_B+-Mb<#c7&_Z|YwoA#b#4l+A&W5q z@dXvC<8#|f67gWYu}Vz@VgG(#)ihePdk?1Ri-&RcjM62u^fdk}XtX&MB!X*MZJ~`K zamF~1UZ3kbmlJZ=TD{`HM{L`uSV!*H!M%FOeeB8Ipe?yq*DOI9zNzwUcVxSRUL^V+ z)zCjiz91HoU8RZO=8!pZk&GZ9Z+|kC2qv8QXe*bBb&u=z<@vQAlKfpnRj6})q4AZI z>Ms9+P&f0j&W7(X`uBZQtVfFjET`o75xBm?#gC7JZ%Jzz&Bx5X7{!%vR;<2`I_G*S z=q_uf`e3-7{alm&N-!by@+oE&?)KJ7L7VW%F%z3Q=4Jd_<=r;SKyqC_(&I{;xwek) zW8OHssPHE1OBp?mH>k~a+_^Xse3J(qr7r8TH+uy}s)w7!rjA2&_FfA~Mn!(;0~C}b}4BXXbf%FLVuWN6;9$AfczdU1-klu?aVPX;^92{9mf*2FgcI`p<+ zJL=F;O&{#P=oP1LT27N4es_AqFhYkNI42R)`{6@uWua;>H=JK1Y!AK1I6cW_wj=-P zYlJ@WFGIaoSUu`HuiDJ_@UYF6c*=|ja3|VM41;5RHDT;MaRlqjlOEI+9 zv6qZ>wZah6TdFHIjyty(rP9JAn9pydg5If0fzd+uX}X9hcd>P z0>JK+JNC%vf0|~Do1B^PJN^&P6!-xk)5{+lIsBgjdhF>dE<;dUJONb^W%GKL!oGj! zgV>!7nnu>wi+&@t#Q?O@lY(N7y_gyo15DDadf>xWhY|F~Xh6BfaDJFFALl!x0o>`C zvM1AK#j?Br;1W3nP~17Up~O@GSMaa4JY5nv+ zeoQ^w#3v?i3#aDgHspTt_4B{85qWN;G-&>v-Kr27V2|Om8 z+t(Pgx$!3jqjOTlRiP39Q1Ht!#o-^R`H3R%b$ZeeZyN2-r&G7zcj5Xw47{O|}C9CJam2S(Y%K{4)(my#bF^YpRr7MaKD~ z0dK2+)G;rC&QZROM)&%csX9gORdtdL8~`v?bX43hbS=02n{&? zjo7V5P^WaEOc~Wg-f0F}4yP48vi-XhmL4%9=Z=BZs^n`~V>TBml_SWX+Uh&bRo7xs zE@<=R6~>9$NaFM0gTfjd?b)clVbpPV$TMXnDgf1cy5jsK3~w&~F;B`WO&?XW90?(pcV_%Idc?EYui2+>c%1Qw3SP!yZen)^P5b(O%QaOnQJ zdhDLwLtctA+WcFTQndk#$BE1uv+f`H)zkM#hiXU|8cLy~Vv4aphSJ_sjRrZwJxHa6 zatC9&y&jv2bce90-mgVU3xMXAP`FgM$`qT!#}!c5REyk z9##Q#YDbAgFfO-3rfGJXi8?l}Nj^6~YbL13J9Thi@SBTUA1#1?@hV)?l5Uv z;=}Z5D!rOH($OPP79vdLYwY9Xe_LS#p||c&&;%|Dug9F=#KUl=e5=iU%~RB_9({93 z{vER%)^7eku$TzE^w%|R5iS4gM+?;|L zuzuUEe?TGg|GUn@VAtXAP%&LU}&_BjJe32FR)b_0~}Ou__^6?G~} zt6>~453y9VMw##kd{VRAxaXDp6`APD>&sw=Fa{W3#IG-y)h`SSk1LC%_V5vnyxp6; zpX1h@^@*L)qQp^{>U=R_`Dq_RkAQmE*Ii-xFlJC_05wlNi`L3X+5s9>A%QIk09WF0 zXd{@L}Oo;s`#- z;2LJWU_0l(4_<54^9}G%7Q{nSgn^eM!r#`%0r25yJBWJuIA!fAvH}1X z@I+nJFd%z(;Z-)wA*c6nw6fWWH{%w~EfqqC$oK$cxr(~n{2lJZ-$S?G@sN`T*uX8t z%gSzNa4~TSGg#S5hAPb9I6gBDxufkh;Yzk6Y`rkEVzAi>k7Y^Mz$02)Uo?x&aAMj zS0Y}KA^u5f9|Wzr!*KdJ`;_@&b#t5u)U zIB*yO0QC(&XwWbmjlCNpC1*KFGVF;M&;3cb)oVZ%|;Cjys2dS~bj+#>|&wK2= z+wOS$SX6I~R(t5PvLmBqPMwWXy|_sDMSkbAU2OQ#48Cr`-fZir-v#kNsp0-=bII&& zcoF7|$tj=%kOrb4CPxxwor;pI_)&mTm%w->>M3b)`e%babqu9vK!g*puu4BTt1>RV$2BCg4yU-Gu4f_#}Hb|`%@i1m}xsvbmqzHBi8 z;e+@J!q43}+Q1|8Lg(*mxC+K~p0D1@CEJ03mSfGEMVw@Kp^j5Ew|e74%Mtg{qvS3A z5cD>Oipg8-k@vOpvyieE0}|Yd6SG73SiLL56eZ+@1#b^YBg1(eI1Z?8g>TQ{TDMR@ zH-e$k$P#Zevs+>tPE^$ZHX6NB#Zm0C7-vCNiqHZ;DNEPt>ei!k{~aX9AZJAfYTsjJ z-qq|lUyxkI^Rq<`!ITPl=MW<5En;GV;)Pvk1o+KZ)-wwI|KLZ3K>1cuqot{vqys<{n- z=I63wMw0lK=_7V#g{C}XKT>gcSk)-n$Sh>e7uc5pc2GUHjTfr@w{WZ^`zPj)VnELD z5JQ^qOH~~qdEOPcn$z27nGnfTT_)s+<8#6af}Si;)E!rbk9-RQ7Fg9s^gr?ApB}h` zLT4uZ%Qw-z4zHRs40K3Xp74Wqg2K{<;7w$JJ)ltp%KMt|%q^}?vIPTVM^NyzP1;mF zTFWYY^y`Vwhb^u-awEJ=SDdVoG5$$$t!XMXF*Md|bj(e@&-kMNfI2%5te(Cy_G6>5 zeQ7QxlMcbZB>*gZf$a&(6zsf^k9Hu+=S*8oENfgq(5w>WD|{!hz(H&Z#<^0V+v(! zdmoDNnZZ407%Bc>K@~L7buA(!%y8dg!{?!(!@9-Y8tl1J&|_Qx{bhZ5mEKy{xe_94 z#(!A`uO(CNA&x0@Z=!}pFkL}td-SZ-y`&$R!oK3u{}I@HW#BN`PzvQ z#Y?R_fcTk)DqV=U-PS>uHy)V2By)`jWk4E|^Ho})+E%^H>@zaUHqiOTe2`DT#DWf; zGsMn1)rjahsEhAC`$Y)#@>{c@8Sh4dOV>(=6z+`rMef|ZP>T)w_KJY*@6XW6{dwy3b6TAIg=%A6Tbi=hF&`K}Zn#@d ze0shfzgMcyRfByb`UsVk?MpZA<}lujl>1HTzPuQF-^V`a=D#h%vH+$`GeWtmw`@#C*($>iYF~(1qpPU4+}D}) zM(mvZ3ex#z%YB+i%Z$u2m1Ecxk?Ch ziL{d0c}1Ns^*xgN8et+>cV~L^Q|$eF0Sj;tDePX2(4Dg$Kq}`N>TkKLT$qWDpxCF6 zTc?MargDQ=oDZ6JHA^KMlm@+8-LY8E^9Q@mfjIpA-{pFh{4%#|hkpAqX*~~kY-L86 z{lRh&<7Q4Mnn3&`+TsVmbgyYe7$^COWvreG|At2m_<}x=cwDSGzP}6 zPED{o2Tz2=a(mCOKeRp#`26_>TgMAga*?~xWIOrHF)S3Kgq<)T^n&3qyI#thB6}+}X2JgEdierF8&<=amwfHu`RiHA98xXt;fF zJwhk~cVy7BC(;JY6JM#K97w5I2gijK6gy$#6fYY#vleia* zpC*Q~MY|&r6efj1Q;1l-Rt8R+=S4DvLL4NzGMHDaE8s>h(_&fbHBaHsTsb0oWa8CL zho;g#g@4PRuYe0d8XC?HKFxkw6F_L?319gyOeyc@4qx6K)e{ZUUbe?1ccdL*&RDZ# zzh%>AhS09j9t%0fxW-wq?_wGRT|O0XsQ61^Edt&jSP9{Ab@bbsCsDm~)abwk|7seJ z)3dTo^>pyExF!pb%)s5pzN(*|>~J!?DB6PAGrwPx%TEl|g`NNw4rFwD;5fs-WsZnv z*BdF4Dmu$Yko9v+sRTR|M{Q_3@jqx|`^+X=I!`0|U3rE%RvH;?bo`;Ln>FN+=}Bt_=MdjkKI z7A$ft(QI2s@mW2$c0A%OUQn)7Cl5Kyc%&`4<~0BbYRTTE?4M0q5}X~ApilWY|2AIG zsWXv6#g=)6Z*Vr_mR`xSu`G+FV#94s?i~K$(zYLOR3aYU@v=8oED=ckf~GHxbbn}S zx_$2s6ggtn%9L)j{Zw0v-NR|OTGPO^TuPr4M(*3}blk3AFHj1+Klq^EKo*wcA7^~0 z;lXl(hLwC&mXoRg8$+<9Ki>>HS#Q7}{Sz;kFRa<2O(%#wFmpt=7~4X>W3?m0WCkbeu6@Jmo~>}i4A=!0!WKq{{@O_bMNM0Ve`{quM4k3_L71I1Tvu2$Y^ zzoP{KFU)7=OTUpZI$KUGOS$v7GpAJGgom(adWd%#5c@_biBJ_61}^h>0qd^)BLUC9 z(GnCY8}7yVLnVrdssjitZMico_nRTuT!ziJ>UNhM4wYOnrjuaYJrOVwE><%g|Cf+p z0(CY@;z_gbP04(CZTH!chUvW3DPbsK#xYi$y(8+KDLrQqd1??nE_!-|?e7NjSD=eE zRA>Yi@W2Mr1o-Q9{I`M(H0sp9UmL- zb(HDprxdAR4VJ&MKd_}hK5`rRMoV^OZkRSxGvsF7FGYUiC?CP}=yhFFrxJ36aZzlb zF!a+=0>98)&5%S+XH+{vYOvJiB&SL@!e#Ca*WL_)t|M`3pK>K+z3?w_A(W$u*_z1e zUQVI@%3c6Vl^R|=>C-<=O3;!0#?UnFjViQSucp~gmLrBmU)8Q2;2Ff-18*cyGVH=4(vcb0#AhcI^j^lZf0I))W0dN=1g z+H=JxVT&?ljFtk)B?#jP;NDl9$i*@K(`>v+bTy8Mt?4Hv%J=2P=ARQ0bv#Pm|A}ii zrcpm{-=c)h*!OFnF8#@pp+I(NTASTfpMvalNrPtj)%FL)m1gpW&IZ59{Zr#-H(&7c zVeY(7*9a@NOh=GgFk_GOH=JRD3D=m5u_^0TGk^ginN;NS>O2Jm6%TLQCQy2S?{Jt$ z9zM*OOQV}1S3zb_3AD7YMerddH~GgIi&s_t|5A+Tl10EU#Kr5{EY!dd_Z%xRQ0KJW z__633hMcjvtNa(w4#EQZ-p||W{!vY)3%X($JQ}{5=^Jz6dp?z0G{zpT?kiTzA@vJm zLgm4YCmfi&VR{36^9u8dPN~rFN-?J-!8hVLg|Jw0Xgwp~V4Y+;P(1G`|JGS@v z&Zk6@XmJ~F$4yl8f?-b_Tu~3f1SR4Kauq=o!H&JG_A9%DH_CHSjRB%H*p0sgZ)N9) ztyIFc?mG0XO&`Dcw^km5jJYU{5oL*r|73X;4oj?VC`MoYPLN{nM0=p@#S=Nz^?TbP zko|k?pM*u9WyIQ;5xtRM&xd*D2E(Ad84!Jlcfd~s@gP1;K+nGciTB?sP(wnkq;kI3 za5eW95G29I--~AK){G+v2L<1+SC{OptK6kPYO3G-_<}B^6#**L8v$9`zgi9G_?qvC za376Nfj~WAdg~V5IKFNpS!2=`*BVW=FJOw};wqL(R{Pi=+8_pHfTF>Jg^d{iPMDF6 z+Z^a(1cYvL2MJFps2?i<@b_8ZPytT_g-RH~IAta4?nCV_+qd-o(ugo1HQq5fFkxAQ zDO7IP^x6f#2m~tVXTKrJ2KaZ}<<&B_*}1&rAIiB?W5^Ty(;>RW*=l$Bq*THqL98@Z zH4Fs8AnLyQRH%ONHzQIoFarea?|r9$?&&@D?=^sWfhADTjNVg7aE5%ZL-&nIF!wK( z@Do6)77_81AGE$cI)2Do_8Kv2M@Ji+T+#9R@iG-wbztq+>?ne`tfzZs2@y_S?#nQh z@l>xO{mAN{{j9sHr%kfejHnix1M?*nF3v_teH>xj<-RmlGVGr$xLg0P>%&GS^ng6c zdCL|TRCWddl&!Pd$*atUGqERsE%r6E(RAf)$%NQW7I#!PRBpi>e9it-`9y)7h}Uad0ge13{T%8h0;#RZ>zTeB|dfk93<*b^=F7%j^&Xe zNn>%R;qv>UNaxtDngSu|xYx^Ytejx{-0G|A_3Ru63R=s>#(eKE`ooHJsNBilAVO!! zoI?E3;cs4>4qRM6wLDrhqyLF4eQUob2B;CK6gIVA+*{9t*i2^26%!afc(JLrByh#M zO=RPG=B^+(M*awA8ofiR0-!#B)CDZgYiDIs1~)EZ{s|dV%)6KKQGex#l!08uGKOTh zr!*V01s>mKmR!uBH0n4*tb||@%6AdZ6l5!q(=oj0`Suh4V~Kxwllt^P;{BB(LnUvZ zDM9N=Wa&Xwlj34ur-`;x6*^lS+>@v+bEOccENk@}Nfp^!Da)21AWRA@3@q{=Yj2dK zQyKusOG@>_=a!TslI$I5eNiXc@szsyI~{H2Z~i*s#WVY7M6Qa^w%b|L*0-i+4yrF} zW93?xo9CNOro9-E-AanFM^PCXxj*kPu4aL*IeF)PU&H%7I-9xIO~I36%)rbkor+#~ zV2t`vI;oTYu17`j*b7a8yNb2i83tw$!buRN!xCuRGEEpjL3+!H6k(Dd@$RO zfQa?I+&G`3KpwSlb)IWp1j*a-QB({1s!~MYTi?y;6e16vyT0}y;+pQV#Pq1pU-YUr zzL@>Jx%Bnxkj60A9)DWRUlIqzm!-d`hFk#iQrWcEhZw1V|KV3vcz$dz>cg}Xc3p&na#Xv8vOnu)BW=<}mpp@T=&)xpNCZBIj{#$%2~*}{v&0W+R+2kNG0tJ37zB(zP7IR zxo6iBS7(f1PWnS6J0cM+yU^$PXj9|#=v!y7H^@d`x06Jm#SNAjY|wFLQHRZ#O2a0_ zj4z4(hCH`ZIwBW_$4Ng^WUI*DhdodYKdra=@i5q{nuyB}7TC3_NOB($nquOU6<`9A z?a>RLYEufk9d5y4>t4F|c{|nwE!zCX9}aRZ3~T%13{hCZQ;8hD@Ox`^J6MnskG@zh zpa4{wGx7-X#H41Nt%gr(ogQ;G>C5aqg?}PfHk6%+uqe`B4nf7Jcu5Za?Q9G4fQm`S z{b@c48u}oimF&12Tr7o}e{)AFsA63sNdYqH(S$xATQULO+3<+d(srLPTGEA z_*S=afV$xI5kZ~P#ny^6D{kTS0s8@H^rq=L_X?>YJ z)8R4+TgX8s_3YI|nnFx>v0A{L=`Q@Lu%e(9^1753?^#ge2;nydoRou%Zsud(0dJ5w zHr{@hGh9bn-gSliXxEAdOCCBf!K$_zGGmUpPK)zCGhDYQ8C(lbr+i7KUsYrdY^{EL zpN7d(XIS7bt##l#tK`8e(lu$lc1sUFWy}iYvl4g$I8sNNwN_2mk`kZ}Bqbck2p+h!s3MvrtW%$(4>?kkmwcL8Cq?#m#L5PlxGXx|yV+lzq`I!kN=q%Yax$dVwz2Z=J;4J^ z=LbDBsth7ZtI{Zz1pHb~jb0?^4kNCd=L9+KvUBrC2R2azfb5TkzNl8k%FD{k<8lD# zvbm)u)AV08>Y!iM-}s`2;{#p`<3 z+b_YD$QzQhzJ-cp3+uq56jr5+cseO`XSq^Yk0kwu&I)a<$yIQiXOzl6IU+Il{n#}3 zLA}m_?~W<79xJVS)JQZ+w_TZz8<d}TZ52as<{TIKKZBFlF1VjkjLm7A~4FN^_Tg&>EZKGl(q}4>agnyKy}YIg!Uj(9 z<2QM#Y>tU2{qGEb%^|s!cS;kbU((-t-=_qe3C=0}UKE(qKb8)AE6`TD2?&7@0Bks3 z@W5H|TBZ39J{Z3Bzi8tu3pxo4)!}0zBG1;7eT+}<4C1EaIp;t?SS2O>irVP$mw48` z$99QR`9XXcWY;MN7zzMW$NLj$wd8+$2+T9I+V^_}wH9Q}0dh%{FE{)VIp)b=|HdCV zGky>DTA%kvg%zn9qLlh4#J=?a>3rUQ8&btnp?5($kpDBoH6R@R?Yy<@k&*G|xYdRG zpeVhZHo}0HG|$0S8$o0>K2Rk)xCC`vy}6wbNdLL_J}YI~_jj41KxJt>f2*uh%s4(U zwm6u_UIYz#bNhGPt2O^pN8Za;&N2<}2C$0x=&_5({@Q497_%4vMAy!L95`IQ%swaS z#+{BB7ykj@Vn1^i59b zsF);+F%}O|e9(mg$QSR*)X#;l&j^8$_tXc5PEr*5QUkAtr_n0qFZb|%(YDW|u4!Ub z>zSItnN1B!Q&O=&3P^VZ55fX?-heS}`$xECyF7nWb0$9^w>eL;zK;8foY~9f zEDpbn$oQGA=ZWjuVns$P77BT32UAR6A<4O?ByM-7R7DjKn19mm^`!`TT(k%7A&$Iub6vAjC1A#fAR)w~b zGSp`yGxDNJGG+rst zCzz~?*!Gbm{X!Baw-o@4?5qp*jPOSZDF!ZjfTWzzb`vs-O{+#2Tdc za;MbsKT_OS-##*=ELb3`P$66*(lrttI`NI!id1Z+>kkAv1?HJFUh+0}(^lvfNZbhs zS0)lljpKQW7&wXEKI#TTk`BqCzR_=>elmBhA?ySMEjMi^fhdFE8{&t9kJp{7bHb>N z=K86PCJ1JXao$7ymLk6ef~Xz%uo;h5G%E&YD`p3Fw)l#-BU1CK2v&gFaFKIDbT&iXLVU=L9&EFWp_%X*ORfscT z3XVsrN^O&bxo8T3ly@g_x|Wkved*Y_zl9J=OWIHj7qhj~eM)7G-^C7_)}~eowRVd^ z^`|J>-&WO_aL1cL!_DB1{%<*(J5VZG`FO5PBsS~3%U*YS8h#odkq}%$ax%pLbCHoF z{;{7K%Sqf80F1FOcHyT85F6cymjZ-dTBaSNy~Us10fjxaolIp@Fh373LudLZz&cd?2^guu{=ry-r`62pCiMNm9{vqvV)DI!Zk|mg* za4%d`9zAIkT;rK_d!g%d+w=7^j+Tv@0 zW2N#SXe_1mlunb~Gg{$Np(FzyS~e~sc~<~wnqk$+Dz~r?>kMDUns(q(+Q=!OIJPi= zs~8Llr`OtqUU^mI*@G~?F=;4|4w;*}x2 za~NE>bID#0Wj#R!pX$hZXH19oW8xST4Lh;mh7XV~C6fG6ZxXcX^#hZ(KU~K~QszKV zqI|59o%cHaC0?NXfc$c$=vA?j`6Pv1>X+J-(nKfG4rQ*Lw}a1Nx&7VeI=v@~Uh>w` zHAI*i*Yq|rXEW&`Mqm(a3v!gkRN&2_8rPW{0`*+&!4fCIu?z@(Fz_^82t{!4Bh=y4&=bE;)Kk&b<$_fu8eoZ#@p*R!`=*+G zGujI{{)+l}u3ChI7=T6J?wNnw4tAS`D6O} z!Mz6AB(c%~xEK;1)+8jr{(Rf}be2_aebfix&x$bObE0RJ@8$C~zpAc@692t9=H`_7 zj9FE#R8$*$qr~QwGu$BW2~BU}jY&Y$*EiZBv<)Z)Y;--S?mq=lEZEHWF9h;i|Zzc(tTO;80M6SWzsqO6w}bM``az~VgEHi zDIE4rbm-N?&6ak0?A>QpWfNC_>pPzfs^ryZBYw&L?!GLcH6j*kGgOMO8$&6X&c4ZF zRx1O{R&9rmD1;0L(8nOlB@a?hiHEaynfEnP$&yt%`MXO!^w*$0{Qdlj8crd{x<^dZ z0-M%Ee2mVHNSCk?BY!KvaM5y_ICqNrzavw^0yX|JPxd z`~d*nq@qYnaoK=%np~PP0)5a5?PAFiJO{j8ZNA}9uv?V z9Wg4RIO|L)qcun$LIHnHC9uXNb0?>O?$*nZFr!+8PCbLYFcPjpGl5DFqi__5Im8lW z<>i_3#!)kke zqNg9XFS}NUh{^+#3bGmUK=hLvRWS6}FJLsaHFxy-o!H9K zGvR<37P}WIByd>z3 z8!ne+ZQiq#Jj^Eg{CfMb>l0-IgM;uyc6!W+T2=Nb@=4T6$1DX7W5m#cpdI_Gwfi52 zq+W{fMO1*hjnd+9ngSJg=eIA05S3k#CK$tiNqO!rj2@UNiAc(qv~4zU628*N)cVrs z>3sW+N~XLu!I1JKtWuD;8qi#;_%eAwzQ- z6{#K2!-n$_Q(6jHycjJyspsQaNO2Oic)-mgiV`roxgZ)qrzRFiok5MJQW<8Sgs2eB z)0SYs_liJI{g>n}b-)n+=UcbFT9+Rh&;k!TKt14@?*O&WorL-FFr7)s&$DTkNn~u~ zg>w)Kd`!`uC0t-XR{VE<*Z~K^#-K`u5)@kG*4i;<;)}; zdhm_56S`R`0YRC-uibt)Y7*?nT-N}RKJYAn*o?ixqZb`=*qG8ad~O+1dc@2ue!_yU zL>hQ&h-q^XzI-FTlzSOuk9qv<25$H?nPFT0H!V+t5k#FWouwiZM3lu(Uc$8@7Ob3M z*mhW|P7_VkOq@s)U3eJq+m;tih~p$Y$Nx8 z@20uyesOlcoS#C z6#0)Zu!fQ#ra6X&Fd#?g=*P2@LT=)wz6WExn>oQ znm`yf08(=jAO0d&vz*s8%TvzHz8LDqza7cP#n*2iY@I3Pq;M%|T@ORKcZMSrO6iZE z-&8I>eP#u@W7y4CY%i+y5ot6CVSM?zR9vaN#IZjAIJ_t-Cxy0uiVB9wig}@nABCIm zP5#$k3LRW(B4NMV`vim>hmIjtG}{hRV(h&$ z(o~OaDfFJ&j|1;eV31a zK7OJ>_y%#@M(s7sM~@&=r9e%_WbA=j86s4BF{!uR=FsHtrk~!%iD&NqYp6X0;oDQ# za2AMTvy9_d13|=B9<%VrRuA4JJ>kBp|I|=L@O-&2AcP6W!#Z{nn&X*n!OSQP+--;d zAZKymIUP;RWRRsud8df6fvDji1i^4{d^$d;@n8X4)7-a-$@GXVtuFIWYZ0@hkrg{4 zH%10OeXvxqgTy4L5D>Q*lMpXX5}1g@*@rxofF6oFD%${DzK5E?jm{c_rXj{ldvTc^ zPBh&EfmMa7h4_(3(8CyV3kD2S%)SzKSgL{ew;^8W#(J ziy6IDY;nVmuo&oE;+T~DQMHqqfC1v^pSu34I?ufl5bav(0zroqKpk#cJc$fEnK-@B8v-5hX0W%}oLANPgJw3vp`fjJ4 z4px5s)gXHZ)amitZJrR@C)0W?Z+6%OHf@4iP3EQQT}}#f95pnGNl48Uhx2x&BDO8# z_2y=jmN-f7whM8k=J@6dhtbDd3&R~=U;g)hevFGZa%kzq#nX(JpLzLR(#Fd&b_b>u zzmVr!&3GAxPuxCaqqn`b(#GRnHt&|l6Zs}`UgcfzF-K4r5Y7?NrRftyY$($|KM3%< z@Az{*W8dlJDm^wj?9fba`s1lM>6yby77r%8D%)Ae`OsIp@^;f_nOpIpgKV2_JJ$I6 zwUWc+Sc9`+qijqxVng2A*FjcecN5R1LL3(Ow4GW)i^O9WR|2`voxOu$PoVmKjoz&~0e>|xW1G^NhuMD^N%5}c`C$)rgawfd-09PacheEx)K3K) ztA9Iz-1O?JPjS`63Ht*RE?XbguArX0To{wuNa*4GwL>-_qj^1j;GQVKeXW-(BW&HZFGD+-0a}S8URNGhoo_^^l5_tk z@ln7#00`YXcIIUEcq}s-g)vr^khRWW4Y#AuYEOSAeQ^pXBkP1=HjGTz1xJqemUfii zB6#_Z2uGEQI2EYVQc5d>f-HI7M!a{z1w=s(=ObD$f$vTHaZg*r&dyM7P^7(E7(*7y zc*=h{xXzIqc%+=QL$FXOojtP12KM&C7fbx*w8oaiYx%;j0!e4)4kVE=iuJLM0%TXg z^~C`Oqm*ZySaP&=fqwjfLEyaSAuYEeYmUrf@zWJj-6)%hu#e*Tvs(jIz?RaH8!b4Ckc<+X>j-7gNNzPYZ*F|muaUXy8U_;64 zZQ_xbZ$gkDszM?AfvBk97<&4|kSKieqbi-7CxP&&?K5&V(O0Wntv{d!`Mgf2@83u% z(Gwv76pbaEp`A9TS0O}@d9dRtYv}#SEF}_0-u1!>5oH9b$WS#~9y=|4s44Qsn1dx8 z#5Zbp>K<^PKXyabqC#w%fil}>?DXW*kUH3JO(K|K8Y!x!?5(b$(o_U!UG(G8Pg_dv zf8-(^S+VdBwHoP4sj71pv+ zegBqdJvN&K)b$9k!_~oGn%%F5ja2YO=;1VxIMsaO@5ADKqx3BEgY(w{Bv-TC&x>a| z#>>?xp2q|qn)Re)Yazd)uc6Rw5KN~P8jKzL@d%sHlOP-s{^v{^Ad@i5a8~6U$&wzDM913C?(IJFv1a^5<0mQu5gw!B;wy7gbN@usP9wf@z5z8`&wwE{BCEXr2C2U-+O}^ z3L_WY)+%4(&OGFmNle&>p7H+Zbl{oRl@n*jXOCO=e#Y)Vh=Q1lf9j!o>Kj{-&U>kX zJ@n92N4jaZ4p6bqJOLZRJx}r!m&Zfe#Wn;<3xg!rP4KXBmEA?WAIU}eR?!Z7pYQ|* z3m2DH+S$JxtJ>yhm;Kg7D8`I4*SoSCYqosQTn;3pZBaE)X5aIj;54K`!33y zUET>KvnH$9s2>fQ$;huoP2tQ58&Dv`H}6veX8++K~$JLaFxp;;fLbpaL{Qz zntKq?42A!IFcpbh)D)!_WS5pQaWmiW1Q39VN2|TuU$}tR-2Z5w>3CrZfu1LOEC(!2 z5>&bx#K~OyYF!R)UNBW6LBjstKc@G?gf|UR)+OO{kDoP95j_>SOC;ty&7T@^)2`d` zzZTFj1zPKgD&z6#A1dirgSY1373WN{af>k}0azOta6c3wJ9fK~dnf_soS`S3gVpKi zbFO?vXBhA7@9p zZZ4+O_m0cAhbqj+5tcv16G`xzrbk;Qm}?@pg3KS|f7_XU{A(ZX))#lr!7C`ci#0lh zXNswt);>CMGKwt^Xw!9nlbA73MHMHAI%!NS)r7)47IO{8_y{CF@Z_(EXUaT#Q12iQ zwg1tQk&bH{6&}9PM`!yx9Y-ffFYASa?;SpcIMVk$17RplYvNNVNem{_2_HM{U|VMf z^n#}}t{>!wJJ5Z^6D}wzr&Ut$xUhe^S`v!!U4o+X*UE%UiV@*5dy`md`nIw28;mTfBXyIZ$v?f&C%js(H92kiK|7rO2|rn~hs-+76R zpeIPn`lriJ^7s*|F1Dm@XLG3ni_SiNmd(RlAa|FJtF5&vPt0L_JF+ZpzlEboJ4f8| zF@t4g5v1nx(#*$<07_-qgMw6@g*usob~%xpB1R~m;yWWMaapb#HyIx%1D|Nre_w4E zmfeWz-Iv|0v!pqprR-i-5P~4v^60Z-C<^Y=?iFw>ngF*(`&iav1#M|1{s;@>fC!VT zO#I%cdg9%{V_oy}B|H2z6JhswqY9~a6E{pU-QMdGl5Ui3s_!|l9*fg})P6;Y*)jGo zH9Y3T)!2>;Si)gojZ5rj1}g$Ty5Km(6V))U!7jWU&#OG}5^>DkkyO2#4^iOpB!ow&I1XFsj9Ote61d{z@KF#CvI&)001T(wVGa{+9Pn@n zA)0K^%4K`$Y;TLOJ;^d@T-ey+tq+Ff&?L|_qc=uIY7z1-?1tiiQGC;lfix|q!j`0~ z$h zpG2D4k=Id`HVHSt)Gs&Tj?+HD)$dA9BEl4#Z(2r;1aMF~dCI96Vxz}+&RZ)vTRvN` z34#JkdFF&&kXUcEKn?UBD>M5%3g-rVY8tp*`B$PM7I%r6&pPtT6HxCrhKFPl8pw9U zY>^?ADvK@9t|NPUl zRp~>1sX-Up7HWnNSXK#Grn%WbBxibF9tgn|GRrOd#y## z-N$Hy^7jO>cA$`tP>?G?GXp4X8ENex>0YV*+EpXO;-JK7&C(&69ivT}Bey`WMd+&d zqdhEF&w5Ju^ASqDgfWL#*2D#fNTe0!Y|TOYT#Z>sy<{lhqjyDrVgN==<}D%am^G#{ z8}dQKTBqU6&?L0tbTgiwT56~Uq$sCLt;*0^CPZ>$4zh_AFW4D9milX^7+apW9AtH~q><6$l_MT}DX+UQ$i zv*@G+dL!cP$W|MA;*}n`CB{jyKN$ANb3Vz47>{GZ4wqA^;c>iqmyh^E?!19P4VcCf z_mz5+Wjn+rR}9S+h8#JAD8n?LXP@X-@8ryTKAfdHs>A|vQ4G_KM2!BOKIY#m=_BS!TWmN&Z*qhkIxAV z!sBp-tRhY~V$ArqR<{@2m1V?S=Q!HI$f3RkDK3_xYV~KrSvHB9AR9!E3KHWBqIfTyi172u!6*7QW{r)5dE0QVUAs*G&LJ)-gDj&O%Aa)GYjH4E ztY}_?JWy*pbcTSbjs%bbStmlLVK#<0IqGc?p5ULTlVe%RJQ!k%)6sJv$bbl~55$u5 zQl&7G5I`RBQEhF*$*J2tYH;mtN1T07mbD~7{ZBT%FVEZfykn6!``*YxfvZMoR5rHv z<}y4h_f!r!$oWE;Ex-WcZH<$TO|oNOajx$VL!=ykAju5@k~dV)Aelfi7{VE>`*b z>SJB!?|(PO<8<5Viw8zkbP|QGoaNH5U^bSWOAlGAvaEu_I`OY>$~IelZIKV`M4DQOCTE2nuO| zDkbu_tj=K8%q#PQJeEhd(iAw2-^zZQq##I8{GZB(u{@nmSSR6re7XWvU`~*)kdP5h zxNW;_7JgM_1$sh^k1@g}s5j21+*Bw!IGN z@OHzlYTEykj4HtIOck4)oLb!ITFsL~983rFIZ$IOM)_iEO#h-n^0=aON+-_pJB?4G z=9<-L9uBnQFbVyRC!em3`dqAbhbG1bpduAVvoo>+-ev$H{C`ylFT5<6n#$Llm+P|= z&QE~O7L}Wq20c~vCO;Kg+muGuubphI&-gWxjO4067VH3;WRMsWo1+URkVUxYGCb6B z;t;8KU_q5(vjIQ2r=J0Ek4}5he;s=IQZ5E9j;jYzXaak8iHD&c9O&J<*vD?h z0*LIK=T|79Ghww3Gjq>I3aYmNWrNXFdC1d8#LEQEMdgPiyMraO6f^Ejx;U+>q{g>; zxJOA%jAKnXNO3E<-rV>ylATzH6!dCZ@0`TL$x;xx`4>Zvl@XC0>xbSMF$~HHZ`CDy zeG5<>wEu}(>8Qu_9JWWe(5VN>!Q>srn^l_7GN+wQ{`y4Ptok7(WAn{9O+BNSS2#D{ z5_!x%B6IErct21Tk2)Xd#*0l2${jAJW1vC-!JM*EsfCt_-@S0^t{+8>^IJ*W57D90 zcM@)Wa8G_&wn?OTrr?t)RIa=)U^$6?NLgIej8ITbGy`AXrja;L>-Re69m3;7VaAbj zyzdx>3Aj_EU3PK{*$kI@pHgR0E+-RLWY*TScN5K*x2HV4s7vv*VDa<&D)micBG?x*fD~;Uc#Pva-MOY z*f7!cZfAiO#d!X`)z|4Efxrq8UbPUdk~X;X+rNp7SFOj zu@1=*Qb%82mBbYb3PZIe!4?_ zB-r5)W|cxClCi|Y6=LEeM4-sePM^c!MnTAXTmb*qAKLr+d=&z=yNR6gMf6-bY|gf~ zN2cc;+fL?KjsGSve=`G=QO{T7tED(7-X1#*GW<6|s5+#x2r-rSC{yT|@j1?|F~%Z$)VyhNcuSkAbj ztmw{>u9$`a>5^*Z7X=<|rw^ALei?qx%)65Amo7qz5#-@DCWQW+ZWwI9wC5qv_8fCo zO2#AYK&Dk_-`-kc5uDzTOF`=8VFF7R%A=8nLKC?Lk+mCaiq793FUvU%C0LVgOgptag>Q)5bpWMUmQej zxLi&kA&WZjB7>))8sD#2bl;cMbG@&dyiFzGWj;E3qc9sP;-I zJG6*n?AGGFoHCY2ZqaNb`(D+S-62i1xGcxs#y&8WwTB%5FCKoexU>@e^Xnk!cJhtL zd5QqbdD6>LB88t?3Mv(Aj1OjqUzI5VQo|5xZQ~!{6SF0#l*%W(OfnPjb}^#(c;d!{ z!9_`Sb!Hz_aS?~uaMQeWIfI~5tLw*d3gmAW+V8$VYhc-K?`Q`z;dZcvOP-%Nz{7Ni zwl$vzP3_NgyUfXrR%>AJd6*C+7^=z_`1x?+HdKnUx*4y9)8~l}fuCn!jX%vE#DiTPd!pf?f;*Y9`N1OYLa=(glkRCHNtZd>>>Ej9C;~E?X-K22=dK5ya7m?|+jv*Xz zIHk4T0uE3C64ks4nY956wE>wDfDb?tDyBjN?%&u-HOVKJVE&1LBD--Kv+yzU119UK zGi)u8f;LJj#BWi1zouZ{AFeA7)nNjkQ^9IHjLV){3faq#p$J3dc#7fKoW8+KofYIG zA#2;nT&q$`CQGMgtEMeaylo#8cb}s)7e6o?!cq%^*iiY!F`o;oK97jV^xkeCDt;O9 zdnuQbOJqb$N|_8&dl_kukp@@{=(UJS&kH*Q4!2efh5nwey>1eDeZU}S+%iG`XNr+* zP7ebv>bMM9H9|`;`3(JZ9Fd%$nm$t>2Gsw}71J+SD_%D8_;5 zQ2L=Ry_(CYhUki_42+rxC7L*n@Yaq5s11;EB?r_1x6I0`m8N#?1h4Zgb^|j$fI?Wg zoOcl*CfX71Jya~clI6ewI0$~g*m;~@zFU7Y8q)vr#>2r8@xLiIJD6U$%oUp~qTc! z2Ay8-H@g;ET)81R5JG|(UTQS@lsH-kui?Ad&i8)CFbyo_if~X8G!yPqB=vh!GXk5o+IBww za!p|pjZP2UC8?5WdxgBKD!b};6oeXmQ(g7l1Y_z1*R-SB;83Bop$fUjG2)V3MC~@9 z3BZ)?#(@LodUrQw`SSwu{VFJb_ymo|dcOa>XlNZsj$mK8`(<#X^&?O3+`KhTKIIzW zxmw45uiZ&q?yiH@$W&t)zwA95%x3nHX_y!UcRs5?>i>e$+}SYChVCq@nN_BL;zmY_tqI14g_U zjAb{5#4p0{CE(wxBS@u$BWD?RN;|ji$0JKz!l)v)nFS_MBW7`Ir>;ygcyjA)pvRc} z)W_~AaWVK+R7|Y_X#tIC=3LE@i)yRmt2o21hUzSLaJGgoQm&lqz9`ZAI^t(tYdcn! zK^kI)o6tP|FPsIIKPv&1`snvp}0L6S=s^y8~Krx zjdf3?t_B?OZq>~t^{i*JuM!>t#a-RDpx;2TgH$=Qm}$=|>v@XyGX~k8WN(E(ZbE`8 zJ3zUU4RRs>>4uTU=c95S1lh!dYrLcOIJY_KZZzm`5b!i|TANB*H9vEvLYIaQ zYHU-6Oja2RtT3s?xvS1-;}b>=G6dq3aWp-BX;wmKfRfIV$N>inSYEv&nnnG3ryhQ+aI_ZA zZW-bu7-EEwv(~t|UccUfJ3i8V_eJ&j$A5~qu0h*PH*>=q)DRYEc+x8B>lE&c_a0z5 zPpi#k9dzoy^(cR18jF!)g7rus`&3YnZvGK>my{0!5X*vmLT#;W<7hZO7-4or6L zPUTF!Yd)i+vEJmv1*mWW1GD@kZH4it=?%68JY);gs|viPbWzN)vY%X!(h8N^n(MT|vpx0=Cu!dhkU!oK3yol*C@=8GZUWFjz>5pUhd;>C(N_uTi z*y2uG4Z25KH{=_1-DE2_P9`-(VR+IFC1=qhPq#@mKi)8TzE)uyGaT^8%sBRA-=+z} zCwA;WoTU&)xyXcqG1E+t>F7Aa@cD5)XZNZuwY_%|J6N#J#Mzk6$Dy`S;2 z)WDj05ki?6#^#%_s_eWN35^S5Yi<74qbeQ-scPlG#J*Jdsh88@dF|zsn8ggl9BJ62Y>Fl>^^; z+o}cMn*6_0IQCq)zJGq=-5oyC=4u~Ebx8tez7^<1NYW&Qx#XUfdAoQ~87*ll&Z{P0 z8UNujrbFUjWuI;^$<&wXvDr|Lz>I_y1t&$=h{j6MyHlE2tqeAw;Cr@4uO3@~=mhqucSIG`C(miM1#$DqQ_uHAx;LQH6M1Wm)!3gRc+(OFTZ0r;>H^(;Lf z9g}1$x_*nf zYonZ~+=;UpPs0`#3Xor6i+5yT3|poj}*$! zJle{IOSrJhW{2z4pfH1>@eI1qWoAju?3|vy92xd}1CaW=jH%~(OmQwRf`q=xpb7-B~L?;N}k;z555e@?zQT zKmGhmI8B-hsG_!7)WY)m{K%?HHS%too4X>|NG)yX`>>!R*oLVVW6gyxvBW}GDudf( z!1JWx=`_F`OJD)9@D{`iHuxdy_y!A&TnQsy1>{3V7#Hg^HI1KW2Iy}G!-Ys4o4+ir zNash_DEuln=rgRE#>AEjO-FwYS2D|rA|$3G@q@;lAxQAv85s`J1t#uohuHN8K%W!{ zfp8W5#`WdoEpj;FwZgOmsWUlS<`0%0dP{$T=DxM`;z9Tlk?-nYXcttc35&3s;-wu( z@HGdp!a*^_jUi88xm=3dy%o;>%*CN+dxTYl$0k zpoLy~GEobvX33ki(|_>3Rd{^<_O1`l0V1NO_vA-%bIXGfX-Ltcf7>B3sWEY|n9cXx zjaw%=-0C)Nv}tq;Thz6-`MuYpQi<*?cI z?p-G#6rr9vL}@NHV!>hZXg738%PI!Tar@R-t_@ghmqymK?pvc6TKu1bSE0N(={PH= z7<*a}{Jffr$kiHgTjQ5*d|D5?OmOgTNKItE{*hyFcy}C^ ztaqsMz`D*!0=!4qs>w^fvj#EE<-jprjl5bWu0hjD94smdWu&r%u@JzInk!;ufA~ep z{eE;>@B>AXE@iul=ig^Ma)ScHN-NT7I!=(CW;!n~aqNp-@%@;E;L|%jBRH)ur-O?Q z=C|?dzgRF6-Gp8$kj(FchSMpFL)fW&TFHO%00V|OMs)(-VSA<7VRHM8hh@7lXuDi? zeE+edbp_2cZ?wmA&&}0klxRF|>gU&7`xefPeNA8M%8l^VGw?{}>PUXFkRPYYS{BdO z>k1Ezz|>eTEV!WY56+vhI6@1174dpQ$8Yeph#*eaG)Eyy~WmkE}1{ zeKdJe(0Dr>U6Q!==jJyPRaoOVx&3A4TR%U$&n{1)9e1|3?uU%mcQ*EJhY94bgP{0m z?rx?Y=X6AN_f-#ZLiU|aqWfL;`b+jsm16M;OXo2QM&KJx5<^(44zAu_wZDrmJ$qP8 zOiZDWad`cx3cX?0$Mm;Mg8E6 z4n6Pka-89cU*J75mccQVn!7hqHYx4$xPs67|H1CC%8J)?Gm@L{aRWn+n;j4gEnk>6 zr#Q+7D{^=mN^VF~PtJhdObI1H;EX}~n;qN^0cVnO-Ck6cm5!BcxV%tg;fHUBO3RcR zH-$8llb`l7vFR3R1JS_rewm|hKy-8xPj+1?REnc?tA%0iozDA~1C6{hUZp@S@smX{5=BL{k@%TEMk+&Htechv*jXB80BfBhbO`EjU=sfxT0T zfi?QK-!9gLfMkK<+-WKW_T&j0!0%G~{8Z{W$4JzRW293z1 zV==QI=?&f86wW)&qT4$Q;>skV?_DoapQ-bF<)+Kci8aln0RhX^X?1y`)<`mFdMvej z&+16!h*g4rFV8IK-Y<$c3)q;JEvd5&cnL%dckL%J;{~~wAcrn;33soSNRbFwFTu|#>)wXJ`b2WKi8I3 zb&nuSa3KRx{#qrD$S^%o;Bz$=k4h+Pv?3YQbT`^TZ`!73`JUl=?*tR9nYfP)Qo$mt z_U_@1Do`W{I_X8_zS|4kF2H$z4IA>^PpH2?kJFiL*9-Ixlq1S0(zjftZ7$0<+6K_9 zIiZ-o5@c+_^j{5?Fj;cJ^8@XZhbWsrL{;hxu*xAw6KMxp{~hm9Q+Ew5)XcNOSs0VB zIAo6zZ>TL(|LiIh3L49-9TOesr~2xfIw|OD>akRtk^N&60AOZgYM{bKATb{gu<@q| z{pI~mHBX}9J591q<~E!~mtmBzPmM=wcR=kH#(|V;`j(E{|2y?WH(kc}R|LxC zMI3k;mBguo@Y&6S*e;Y-Ia?6ZuSVeR&%UnED=~qbR+UcOH0N*u51nM+q^Eq6m7oXc@abj`!d5ZWR`sFM+%48oZslu zIcPT@82tLGeWC#q13B}$2Cx`9U#ooHo!%b3FJD_0-7tK+Hx?D1xe@)lQG66s-{9nZ zTPS#~a8#&O>o1k#H7%D)+U38vl8j1I-~V*q-*`E3;sZm<7;fLgXimxQ@q-qj{k3%c z=bq2K%=QJ|m)%Q0tJ(Y7F89^I<~l*Ok;Z=ppSz)$^X}6~E1ZI^wxZ9Hp+Gk&$p;6z zgi7yQHak&%BlyN+Ba%|V_>LMka1;KI3qo{dM`fCK7DeK9xtzc zM2rQ=%NyKu9vPEzSF@jw%L;d&8q>~y4e=-h=Tn7LOAfjnJEVk6O&_*M&||{?uh&Bf1FydCHL+Cj?6?<#|k!&pvN?Exf&06>jyNLoSOPD}XIf{;Q!}~O$3}up`zTz z4IX@7WWDJ1@k#DOae3|NU?kDcF=Ok~)^l_4QzTod;djz~NlciS?Pg)3Gvnv6f6w)L zUp*{@PdR=1O>!~SLq|1ynsS#{R^Yq2RzA0mweHi=Y_e!m1{0(k)*g%XWyz?YcHz3?Ubt`AQ(+k}^!@8K z+J^wI%}d&>UGNvO`(1T4u-BvveH0qhNUq34P-+IPY0`dL8D#S8h@A2w`^q2C^PNu| zb(#I{QW&k!avRqm=ycR6rrFX-Ly0Q?b=Qv%9NLwX1+=)aALZxgXf}l` z08*>kig$S1wzQDu37=sXw@1nr!8XIl5Sc`w1HY=B4}ME0Oec`!F$x^YEANGx4PBbR z6A+TVjSKjnT8(dyf)hl*-@W|!hBj^s4Y>MC#JdhvX0}Rh3^OCd2<$~I{ z^f>L@+AM@`P3tz+wqA~3+uQfopofWIds5bmEDF>CuWal2oXHK_n+8^A_}6M_JH`f1 ze1nN!`p&A1+Vr?+7!7VWdsFFg1_Mk_wcwa|n-T;6yeEPTV59d!~V{ zYZtl}v1Pc_kd~{=6XpGv4FWu2tO~<`^>aAXI=2J=aX?B$Ef@Zd3&BbJcBkzZzSmbmI{)rMz}k1Bd5rz0mP9tlbE{&8n6gFIRgn{z|;K;rlYv6m4Kn>t!2JebzH+MhT+Debi(s zhgpsG+H>`AQCY!H(*YsWAER5kEnmCwgFX7gBv?95+g~|;1DsWS2Qr=Pk=&6CbBJ3wd3su{-C5c3eTvQTG;)_8ZN%FOGYy8P zn}rOm1xc9W;)Kpn?Up_DJlS5c?lJkYz!D1C^f&kv5N^UO7;Q&I2HsLB=5phX8+N1r zc=WFPQ67-{Lx@BTV|=V5{V?o_=KwBtE}~j(8%c|gnP_~LEaFLYBZj0rB83>}69}0o zf0+qq!FBfd8`?#Z92;zn2&Kh>tv}3o0*k-JjMbJUvg7%QJ>fWO1d;j681`r~lE=Qh zEPv zK%z?v3|ekJkqLDHe=$QnBl$IL4JQMu=WZ2d+g>+HXn%L01MAAsFB$@lmV2Che8FTQ z8@un07H*w)4-XG0<4O~n_mDrN&5#OuTll*_+p2+XMtf>*Y&uP}Vrf{Gr&gj1TXG3` z`M6?i!b7;;<}#9shn=1qjw`)7sZK`L%OmN1w>%yQ%cO*OqoK zOvgrO#*oNe!Aq$N>boE5)q5g z9cX_m2rFJtV5eAzG$9rgKtV1L#M~dS{x83HGrwhF4(Tf^;D4OOnWsIhSjI|GO(!L1 zMT`dpl8w#f!$yvy1Pz9{$jpPxI(8#>dhN}BVWTe63I`7EQ4{d_{qu7oL~n9dAC;dW zPj?Km*MoEte!@VAeZDuma)^aXt#a|cva^9!QOKop$74b_tdX2a%J0i!}{o`%%_9@u%#qf3T`d8Y~=kM~?LqkJd)m6~W zmeOK`AD4IFfbCnEzFoIMkeQj1pTyTrW1}WQ9OK+H?)T39t=$8SuF3sP^<7pb%xRD6 zgkn%`JJxty<}}S&>&NPBu7{QZDK@ll4I#Vin(9EGm@g5*AHU7gJ_tXO@e?mmkZ4dK z+uXo!SIwDBc$qbC_RURBL?q+8Wwzq37Ltsw6A}D01&X7*J|`r8AJWb~4tz7`uB$vt z<80#Ul=s6o!6f)g~jySx0~6PzbFw^MU9 z)l*Y5)jeIi_^<0sfaBufbmH{fzU>pPvUlFo)#cj1v`kN{_nwEhmWL1M%t0<=DoF@q zAdefZTvuS5l6w*;RYe%tR%-i~e^oncVDIllc;im{m8Eq2o`%1KzJD;SW)ol$g^Ga9 z_WzDJ(8*4>KgZPMyy}_HmE-02s4(A?8}fb~M9UL0>=Vl4HhmqqaC)boh-UDwu~t3~ zJon9B(eD23xX45*lsRf~a9^jlwxQ)b-)4=WKhs_2ZQ~Yg?IFSXOr9Tswdi)KD>%QsC$oNZXOZ0pUHge=<|Ar^IWivnol>gGVz zPp&*9?J)9a1cRq1aG#NND3Ptn(9#W&lM^Y363qfw2_&6KLY?kGB)$_cDXGhSL^UR* zyAnu)Ha{Ayif|8PQRXXXmemgX6U>KApGX76U3%ns#}rI=-Ff#XlCSP>0z+FG5EqIg zm>wc58aQTk;!e|K;f}Z=6!>vC2p}dSV+B96!(_wrb94c-;f%ryqkyOBpkGS_J|7#t zs6A`TuU8pVi}3h)`ri$o^vvHg5-kU9EM#3W7kV80bRDK-k&G z%zroVSJ1_Ov1E)~85?hO)%?RBEBDYeZ9?zq3_Roe7`XSpWODH0(H)EYRM;b6HUMEut&!8hvpM)R4#VMGkmZy|LP#l=wX*bENW{ z;%+MSPrTQSP?fEY55KVG_%%44KcWPN620{X+sSOMozL^^oC_Cybq7Y-HeAxWnAKe* zopqnk$+g$Ua7z*KI&bd-*&1i*xyIS_VgO-;t?+PgAim^uAYKST;_SMBKZ5Z^S?lX; zafxAA^$h*Pn>nC03&n&NXMRt7{#bpj^gDQo)owO2sojz@QVXQ7y?Y)p}=P9pZ(w!TmR^3Dv?32UCEVBNRF7#0}mGz z@j>5;Xa*Yxm*&KoI=6bq{PNmF#P7m2lq=^BI&SS_`Y7|Zh`E~dAL1FA-~Sw+ zH}f$)ocY!k&aJjJbe)7M2eN_~9L`WYhXRoL)e8TSul)KiT>Rj95xCZS3J-xIh6jj_d1)pmq0jwamq$qYk;FZ8?{rw&*x=HQ;eDP@zT7vT>bn3J zTg^Kk5}53UT`e`(3jFQ7$BN-ULhvrLa`F{#WYn?EPtgYE3&IE^P>n2pxlXBmd?9)q zoUZ&2@E_$p?6aqxJG0Tpj998&lk*n032HNms}l zAOhOWToXY@U@8bYL-&Oxhcj4HZ1LbtERi4NVs^9ZHs-Vz` zvccVaDP_lW8%0$ zMbJxn+6;7CEjyC-$I#*?4)YBWA6;BWqG0s|E&btI7mERNJOJoKf4UB|Gej~WY`pmK zWYlVpcXJe4nI~X5aT%}*ZkeCR^iYqOv)$JY?EG{82mebXa+1*_vTe^pyO3t8xy;_J zx7?uqN%qy?>8kU}6Lc%gI1kS31goo5Q*G8ls-~(GUSXf5SBj&qzqi4BFJMQK6sVC) zV-mKm$4PzKmCo~GeCpL=n3&=ug|kf?=f*E1>nIEI11L2P_FoY zh`xmywLle{G@?4WV@pL*nw#V+rMD24fuh8fvHI)OXSU7zaGPR`CuX!EZ^s?qj=5AxeW+Ob6j39 zXtuO2j-H)BpAQx5m)02psqigd{lOD-y(2O3IrHXy4>1n%K-U-nZAi;B1Rjtvx1T+< zUjJ<);I)eR?afH5Nk>df_?d+HSX-0>X(Xrx$nHGWmT}$T5hA0?V(AoCX8R zlRuj*N%3Sr%+m@>{IRZ;xuq!EL&!Ovqr5FlmkUvF%#Yn}RAb zOxr~pPY;Ctw~4@WI2vF~@&yLbTc6 z%(nT|@_NN75`azV!4><>(-}y7j&K9X-T-Q8+IqtQg=%;s!c4fo zqk;}ijtACEp>#fI&}`G*GUrMMs-1%C{qy|a zRLSmtYn*1*Dw_*t@}HZjpPyKu_Z*z(cNlc&H8JVSQ_To;@ctFQ3_=LTm|R?|A8)=t zzW!-(nM=~&EUyllWRrAVpc|o7ulBy6u72P2Uu%B^InyQ2GO>A2u8$-Z6+<~g>#<&l z*1UEjKhaOMY`v*;^d6O-Q5J+iR9Qo05iXGsPS0XCpVGUBwR-sES7H#ugPJ~-&yT?q z1fkMcY84j51mXNgYDp6$Cd=|6-Dft0Y*(VD+%iEuR78TTtyy{*db$XT16(?DG#MN& z<*`aCS-8>EushIGB&W)~G`oi^j;@hQ)iKb~60d=L+7|ll{i(z)P52WT>i7)Ip`*ts zja-z6l71cCp+}2TBu#oTLT83Ela7IhFbYDiytgP~mDjm4DwUPp9v*Y+nI9dN9ly)G zB!g?roP+;Z?Y6=)j~v={*m6n`IIcHA>uQfKmgZ)O?j4u@;yoRBX4l1&ALJ?tuvtC^ zRS~l8xRs5M%1%)i*{OU&3@fKU+RpWD-f1rFiI~xX<*w7VDUrPxS(txT!AiwwQIuIAdmR7ls~Z#@JecAJEh0jPrZqE z*{k2taP!EIPVAUG^&Na~g%!xcF3mt_1Sg&E19y#TsLSd9)#_^}GS@&v-!$ChsB^?se2|usI6Tzx4abkS0)1OG-$w`oW@H^mth_$9opg^ zW;hC(K#QG%XWxvLHs#b90FD*{U_Nef-|X3N-_F=!8mJZg+6nfEu6LE0O9aV@05x}) z^r_uf=VJNQ!r*Xa5LKcLi5hNtySh|TMSsQQ{J2Iw}C9U-Ix8t zXxeAC?aXgp#9*$w7`Ai?%u=-?uqD+v{J3@{-A{BGI7&gGi?6yh=vKmB)VFc2hs-W2 zshz_BHL^heM>c0}oZ7YD z%YsAEMe|OqM6iBpWM9i@MnS39e*>>h1A-eT{$hS z?tR}_+g$g2ovzGE&wqQ4+dFAq>n{DZvvX^{f7E7bX|OJ3ZTQ9VCh1XoLDMXugtcsy zDy4Vsd^m}a$7Fhh-$2ll@%HJhkR!G7FCkK*Gs4tb0FRvv)<9;uaau0P;lg4LVK80L z<~lslRY4$1bgFSv=%@ZoUf8XKAm;=bP7-Rsk6sPcT+9oNIp*$} z{cVRbiF&^>NutbH^n{{A1*kaUAhKz|pwmbu45se8FL-p(dwkI;f9CYzK@Su$&>n)` zu=+LAXXx-FkFb)^`IU<$(5-BQ#>PEc(Ffl;iPp!{5!VUVPd9TFe|vcF0bEH@|x`BdbsLHOAAN z&_6Q4fbp}(AxnI-i7*tD2&*LGTT#t-MM?O^LS>j-dNT{Ih%BPEV^e!dR0J;qcYa$I zg_v363zU9))8x@~P31O=Mg#Nqmg5)g1oSUTQ91x;Tt1hR>r$`VcKzvvwHOX-gD<5c zIRYo@e)s!OFT210GP(~RSeKYh$^mTeg5}lXQCq6wT}4#+6KOw-O3cpAAcyIlZT|xL zY~e?3amGWYx|@#z`MWxGSfbX3lA|PZg~uRa>P7GaM6qyFtm|jK;%9ZQd#kffSsjim zdw1P$@aL~s!=|(&d^<>avpvJFwx(Dd_wNeOk11nqN5jsh&80 zTyb-_l_1B5qk;QCQ#mP{xX(1YoPItggoIN9reX$Vc!Tcl{O|~qN@NPsNtKS94MYUt z8A%S3Baj1vQAG=5C0afg0Sd6aCYY2_x-F^2>z3j5gv*+za7j_5(IT?*0tlx5eBc;$ zzfc;uLJgdysg*l7HJ75V8+KO&Sl<#6opA-k$`k6@!ZM!msl`ucWD(n?QX^s$tJ}YH z2xJIYV~A=YUI6J?jC}P1-+wuEkW>jf4Jmw_LoiRQG4#Ih!;#H6#-}gqZ%p_#wR~T+ z&Q(f3eR$>}8_5+(;k8Go0P_x$`YVDI2$$ZUM&m&7fsg-Ae=6tiHeH7yIFj$O5O~ey@WqCsElKb8ng?3zuUY06r8WqHFl>!x^PZXdX{RycU#5!Ub zXx2Y;=njzd0u%wtVt=fDfzt0TVZoZ$`(LzSS|E<{nTZ$j9I>5jbu_%bL$7W5F@w4eN_OItjh+{i4OODE9f{%vJEaLy{DePMGpIRd<3BH<26$&A70 zo`1<9?`qnk4=k(qQ1@Prb^PACX3M=Atwi^>c=u(M-}W~Dqt>bYVKc6J)(!hTV6V>ntg3G7XW4~>*dNuyi6I7C>V}AiyUHf72bOU*>n;EKgM+eVVq}##`yDF^ zQ6Qou6`MXav*k%h;T23ULTIE|hG~f~Ia`Q3I3jgOf(`5~!tRq<8gm^Hr`)t3d2Qr9 z#+u>tLelwix>5g_CBV8flf8MW6PeZb#`Y4~QU4h3>wI)t#pSb%71mSy=2=)o4w!H$?QO))9mmc{jdihXz61MQw!Gl=*&#W4+oDX=GS=r9 z-q}Vuvxf2Hd&71T^mWpr74i__Fx*^C-BQIPho$VMXYf-=mTL7`A?cD<;o1Zhk*RBS zW5cH##@7h=mK0D?kC9Olp_c6P6t+}s!$8xyXoKl1X;Z`AbB=nX7p8-C`JF(@9j}@( zLOV1mDfp)EjX%7OX383lZn!e8Pk!|s?|lbK7^-VK$!E}k1%Y8wNYO_B5IYE4uWuO} zic+>hLE9e}jw&x{`_1{E_?%lE5^`f}YG5#*=zJ@POef3PLif*n>%I1s9vAM?O(&ME zC7c)$2M#qj-Bo1p$-4HyIUINDF~U~}M_hN959AUt%*Eld#Yx9A^T$$&<3U~`qzwOl z6b1oXJofkxhm_&7vQ}xgijoo)#0G>2?PwFq(S0tfWS>LOOB8{UM|)gm{k)nOgh8MG zLvpQC^Jafr`hfa0)*SvCMC-y2BID$b;D%=a9~T|8MLo)kqQuzQ5GV!4o10{kNmPgj zt3cY{avq1I>so7=F1O>`yCP6TRt=cBhP6KF3vYAt z^?Ch-4LpX(symj-=`pmdz(52(8w&m9)aw+$qdjBxgZJhVQgMwbkgrA49$gBqI;*`d zGgv;?kD6(*C0bzZ9ExSO0}hB4S$DN0!FeIU{KaLYd7e@&KxP6R)hkZ#qiZg2F!_1yp=ulopx%I}&EFWTdg8buXm0-#jEDgwdIh-zkaIgm`x z;YfF@u^_Jx0?L6%rat5QLe4a?&-1gNP+pWGZ)nsNAb`-wfi>tykO+$|1nTI6@ay88 ze8~>ke6WE!(Q_l#>naZFJjzv8R8&jfFb0h_lJ)4+m97XP{G~(iKIhb#c&B6-?*r$b z%@+<92FqUx-TTX()-&|a7NK6_(Rg4&^6rKo_59s{pUYVG$Y^FDKF=9>ej2RW#_*O zMH`#)69#@9c|9&{0p52AnhT%GG(F>Mlzp>`w|lxTH9CT2BFBmR_L9Tne2k~eBX*6* zkzSbr>V}&nB5S6`uT{l%xg-cXI>f6AJdWpfHfYEq?lMnElp_LFxy}68_9SQUO(6uO zU|19uW?HY4r}UZ5BZ0Mcdp1SyJ$1YsqL~8xI*|`J@WpzxK$ZAP_8g2zvdre=mKPgKba;6 za0f$YJ@y3P<9%?Pn7jga%q%Y<8SC)$zh^K)$0NJ>k$jR-v}MSy(Q@nYc}-afHTRNt zS6@!r=B^T%$UO}o0FG@=L}SwE;$jVGZh7sXsr5(R$)01$lv_7i&BcsNt)1B$>$q_& zDK9#|3x!q14xd+z4*y`IahSLH$59k^m!;k#8T{n{o@V;^CmRiOIgOye$v-c~?~UEG z3&n*g1lgJzTxAKL-8RTs~Tm(Y*7gvC<+()=n8s-jscfq z-aDWqUmnaFwpxlwAR8PNQvJ!Qp_l!z0s4hg?}GK;-mOg&Hr2yBN!JQgb+R;yg^$Qg z#zOjdQP!x+M&L?E$K{&FMZX2h@E@Lh#Ij!?=i71qeIvP~-&r^!v3MM)RbvUp>R~p# zaFj%;ve-`g7-_I9T7l>iSYI226Zg@|UAKNqH@Ua5WgqF)FN>dB z14gL`9Ik~Uy>w{V=24t>xL>axuuSH6SM&8_irqDbx z`wjfQR?w4)!GgLepvdl5>O}OIzt}Yw&Y>ywK^GZ0pFoM5u*cw@wIg>&J zabKJxLWggOwljaST3gT6T+|^?0iK8Xu-Qyad_j3{ToDx}IN}pE9eQ6r{yWZ7tspL5 zR>O8I3#in&?yYv=bu8Rphx_HNjyy{s@bNOahGK_tytc>B;_mk_Ui|sqpSvDMSIRm78IeYyKD+n!hk%(ln?i=O3d^J zeGT1=D#Dhi>a&n^6g_PJ79hqd*>y(qC~wI8a%O-n@JXGyb05j8A>Ye>!!p#2}hYINF6^SZumZQgidY*Z>n$wF%n*6cs^yd?Gb z_yc;{j2;kLTk(vU;4nI=M0rLn(X7Os!RYUz_!FJj&-KVBe*>cP&V(S+sbqm6^oGf@ zk-ycVKmY=w_}CGsrMnMq3NM?-GYpBF0cm+3oPR(QBOeVPRnv>Up)3`#8aqHT6-nSY zef}kL4vb#eN}8XSV4M~&@_vWH-0DRq9a|f;EU%_{D*9bPXQCuhiGXjF@_lXk00HG{ z#>6we%)u#Wt*NwOuV92Sm^BGBTHl+8q3^sOvkdemhtwHGarZpLPhI85i$KZqe6cYZ z${3FTu_#re_TnFf64)F9YGqv5ZB7)}seVtIuxf*%gpg|?HA-pCF?%IDI~umtVd0@; z-W>1~uA;DIkUB2ELu?Ue;%6L=B?jvJ2sPISRLS&ky7&Ay*r3lKF%PMG=??aZuW-V$;h|CM_)05Fow{-xdN)+v|+jD87)VJ zKW+ssBczzUPK6J3OWicGuoD?xGn*YM18Uee9BiJ%wU7G(#-Ju_3_9Hp%^S9hw;+SovJ`?l&ev^ugj(8e0*m ziEEL{W)(d{ugrUcQ2lJ5o$_guzMcXYDSlcU1&KiQuQjW=dGK3Y>&17!$*cilBB0BL zMWJVX6Qcj>NyVuCdN9Cp*=x+AB`oGcDP3tN&i*PQ`=Z>;>d{`s8(m&$B`dE!mH5gy zDrkt87+Ym6mz`gJ{k<_h*CIwJT7qJ$Kq){vfoKDv#GiyMIQ@)z&&MW7HH8jsgq9`s z=aP|&*6;Rt*mxGmB$ym&9?$e9T$&`@zGWav__Hj})JywQ9{JiumT4x83PFYg3A!}t zdq)7%Se3lVjFhOqA%hgcu5|@osAkk4Vk&SpTB^t|zVch@&`I8~adM~1H8W#b?0B1I z6qY>qZ$fEI0K0t=6N}nBOVPw|W6Vs6=+A`|`LueSM$=L}05hPG2S>gP2Kyky?v)*- zyjMYMnU)7hF7aVkh_cdG!q<3ce%?wq#045Vw8Ev&=4yko?qm3%xw9%FgI{sJ_5r3Q#ZyKjJ4hqBZrLBycN;{(#{4dd2rxzQnE|bSo9UH zjm496j^HwI>F+i&N4dJB>C61|lBJzY+0gOr|NL6B!|@F=C5qG9t+tvouarF0U)p zG^EzbR!DK&EbJcGHtYC;Y89`PQ>C-^PDjZ(cbe9rIfyi8-!w6~lGw46u;Jy`N+l)c zIU`!xn^%H|0MA9vo)NuA9tD(tkoc+#Qm{z}!coW0_8->2{oqg*Ks8(XfB^Z--cdBQG3VK;KW8Sv?Ke1T@#4*yo`hD(x z*oUx7#PNm%0p$suFFLPbNqO3FNqi_Ccasp0ei3Oh$y_7yks6KdCftWYg#>9DzCrY? zRI{jJM|mJ-g4V8KbYpiA#<&VZRz2EWt4ha8w;9gd_)4lHngEO|I~EkmPdLLp_lE0xP7*QK*t`J#4$QLo?e7%ZiC)iliDs*nZOAqL%7fPRn+ z@V_6_rbU~7YnJ=+*iC`!kK_FG`f)T^c-!JQfx1@_`H#eEa70M5ka`+Lg8uR9gi7us zhH?~KX?e<2(!>XChA93-M1_PLt)zJ=0Hvw;e-0Cp00{)Xe1%G#qT&?Sf|TL{A4{2L z0FXf=+*DRF(M)XyQ%Zc{R+cj}S-w^Ff+0jM=`0n2!4#bnnk(oiULq)L_IkV5viN> zC^^ZvVJ#K-^egBgn2FPVRO+A0Z4TU#6eJJXvd+TO@+F-EDB|ej#YuExgwDA>gg4rP zfH*dcs{O+X3#zm|p>h+ck$_fuc@Xok1cg?H6TTQfLt#Lo{M4c>;WkhV4HlQ(

2V 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 + + + + + Email Auth + + + Credential Not Present + + + + + + + + + diff --git a/packages/relayer/eml_templates/error.html b/packages/relayer/eml_templates/error.html new file mode 100644 index 00000000..aef12c26 --- /dev/null +++ b/packages/relayer/eml_templates/error.html @@ -0,0 +1,415 @@ + + + + + + Email Auth + + + Error + + + + + + + + + diff --git a/packages/relayer/eml_templates/guardian_already_exists.html b/packages/relayer/eml_templates/guardian_already_exists.html new file mode 100644 index 00000000..8d52d462 --- /dev/null +++ b/packages/relayer/eml_templates/guardian_already_exists.html @@ -0,0 +1,415 @@ + + + + + + Email Auth + + + Guardian Already Set + + + + + + + + + diff --git a/packages/relayer/eml_templates/guardian_not_set.html b/packages/relayer/eml_templates/guardian_not_set.html new file mode 100644 index 00000000..853bb3d6 --- /dev/null +++ b/packages/relayer/eml_templates/guardian_not_set.html @@ -0,0 +1,413 @@ + + + + + + Email Auth + + + Guardian Not Set + + + + + + + + + diff --git a/packages/relayer/eml_templates/recovery_request.html b/packages/relayer/eml_templates/recovery_request.html new file mode 100644 index 00000000..efb9d9ae --- /dev/null +++ b/packages/relayer/eml_templates/recovery_request.html @@ -0,0 +1,418 @@ + + + + + + Email Auth + + + Recovery Request + + + + + + + + + diff --git a/packages/relayer/eml_templates/recovery_success.html b/packages/relayer/eml_templates/recovery_success.html new file mode 100644 index 00000000..d067c2f6 --- /dev/null +++ b/packages/relayer/eml_templates/recovery_success.html @@ -0,0 +1,415 @@ + + + + + + Email Auth + + + Recovery Successful + + + + + + + + + diff --git a/packages/relayer/input_files/.gitkeep b/packages/relayer/input_files/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/packages/relayer/scripts/startup.sh b/packages/relayer/scripts/startup.sh new file mode 100755 index 00000000..4fcda970 --- /dev/null +++ b/packages/relayer/scripts/startup.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +cd ../ + +if cd prover; then + nohup modal serve modal_server.py & + + if [ $? -ne 0 ]; then + echo "Error: Failed to start the modal_server" + exit 1 + fi +else + echo "Error: Directory ../prover/ does not exist" + exit 1 +fi + +cd ../ + +if cd relayer; then + if [ "$SETUP" = "true" ]; then + cargo run --release -- setup + + if [ $? -ne 0 ]; then + echo "Error: Failed to run cargo run --release -- setup" + exit 1 + fi + fi + + cargo run --release >> output.log + + if [ $? -ne 0 ]; then + echo "Error: Failed to run cargo run --release >> output.log" + exit 1 + fi +else + echo "Error: Directory ../relayer/ does not exist" + exit 1 +fi diff --git a/packages/relayer/src/abis/ecdsa_owned_dkim_registry.rs b/packages/relayer/src/abis/ecdsa_owned_dkim_registry.rs new file mode 100644 index 00000000..9b7230aa --- /dev/null +++ b/packages/relayer/src/abis/ecdsa_owned_dkim_registry.rs @@ -0,0 +1,846 @@ +pub use ecdsa_owned_dkim_registry::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types, +)] +pub mod ecdsa_owned_dkim_registry { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::Some(::ethers::core::abi::ethabi::Constructor { + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_signer"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + }), + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("REVOKE_PREFIX"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("REVOKE_PREFIX"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("SET_PREFIX"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("SET_PREFIX"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("computeSignedMsg"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("computeSignedMsg"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("prefix"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("selector"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("domainName"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("publicKeyHash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Pure, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("dkimRegistry"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("dkimRegistry"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("contract DKIMRegistry"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("isDKIMPublicKeyHashValid"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "isDKIMPublicKeyHashValid", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("domainName"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("publicKeyHash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("revokeDKIMPublicKeyHash"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "revokeDKIMPublicKeyHash", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("selector"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("domainName"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("publicKeyHash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("signature"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("setDKIMPublicKeyHash"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "setDKIMPublicKeyHash", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("selector"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("domainName"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("publicKeyHash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("signature"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("signer"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("signer"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ]), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static ECDSAOWNEDDKIMREGISTRY_ABI: ::ethers::contract::Lazy< + ::ethers::core::abi::Abi, + > = ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15b\0\0\x11W`\0\x80\xFD[P`@Qb\0\"\x958\x03\x80b\0\"\x95\x839\x81\x01`@\x81\x90Rb\0\x004\x91b\0\0\xA3V[`@Qb\0\0B\x90b\0\0\x95V[`@Q\x80\x91\x03\x90`\0\xF0\x80\x15\x80\x15b\0\0_W=`\0\x80>=`\0\xFD[P`\0\x80T`\x01`\x01`\xA0\x1B\x03\x92\x83\x16`\x01`\x01`\xA0\x1B\x03\x19\x91\x82\x16\x17\x90\x91U`\x01\x80T\x93\x90\x92\x16\x92\x16\x91\x90\x91\x17\x90Ub\0\0\xD5V[a\t\x9B\x80b\0\x18\xFA\x839\x01\x90V[`\0` \x82\x84\x03\x12\x15b\0\0\xB6W`\0\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14b\0\0\xCEW`\0\x80\xFD[\x93\x92PPPV[a\x18\x15\x80b\0\0\xE5`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\x88W`\x005`\xE0\x1C\x80c\xAE\xC7\x93a\x11a\0[W\x80c\xAE\xC7\x93a\x14a\x01YW\x80c\xD5\x07\xC3 \x14a\x01lW\x80c\xE7\xA7\x97z\x14a\x01\xA8W\x80c\xF6\xB4\x93D\x14a\x01\xCBW`\0\x80\xFD[\x80c\x07\xF1\xEA\xF5\x14a\0\x8DW\x80c#\x8A\xC93\x14a\0\xDFW\x80cd#\xF1\xE2\x14a\x01$W\x80c\x97\x17\x0F+\x14a\x01DW[`\0\x80\xFD[a\0\xC9`@Q\x80`@\x01`@R\x80`\x04\x81R` \x01\x7FSET:\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RP\x81V[`@Qa\0\xD6\x91\x90a\x12\xE3V[`@Q\x80\x91\x03\x90\xF3[`\x01Ta\0\xFF\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81V[`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01a\0\xD6V[`\0Ta\0\xFF\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81V[a\x01Wa\x01R6`\x04a\x13\xD9V[a\x01\xDEV[\0[a\0\xC9a\x01g6`\x04a\x14\x7FV[a\x06\x03V[a\0\xC9`@Q\x80`@\x01`@R\x80`\x07\x81R` \x01\x7FREVOKE:\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RP\x81V[a\x01\xBBa\x01\xB66`\x04a\x15\x0FV[a\x06=V[`@Q\x90\x15\x15\x81R` \x01a\0\xD6V[a\x01Wa\x01\xD96`\x04a\x13\xD9V[a\x06\xE0V[\x83Q`\0\x03a\x02NW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FInvalid selector\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[\x82Q`\0\x03a\x02\xB9W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x13`$\x82\x01R\x7FInvalid domain name\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[\x81a\x03 W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FInvalid public key hash\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[a\x03*\x83\x83a\x06=V[\x15a\x03\x91W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FpublicKeyHash is already set\0\0\0\0`D\x82\x01R`d\x01a\x02EV[`\0T`@Q\x7FB\xD7\xCB\x98\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x81\x01\x84\x90Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x90cB\xD7\xCB\x98\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04\0W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04$\x91\x90a\x15TV[\x15a\x04\x8BW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FpublicKeyHash is revoked\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[`\0a\x04\xCE`@Q\x80`@\x01`@R\x80`\x04\x81R` \x01\x7FSET:\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RP\x86\x86\x86a\x06\x03V[\x90P`\0a\x04\xDB\x82a\n\xC8V[\x90P`\0a\x04\xE9\x82\x85a\x0B\x03V[`\x01T\x90\x91Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x83\x16\x91\x16\x14a\x05pW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x11`$\x82\x01R\x7FInvalid signature\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[`\0T`@Q\x7F\xC1\\\xFF\xAB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x90c\xC1\\\xFF\xAB\x90a\x05\xC8\x90\x89\x90\x89\x90`\x04\x01a\x15vV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x05\xE2W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x05\xF6W=`\0\x80>=`\0\xFD[PPPPPPPPPPPV[``\x84\x84\x84a\x06\x11\x85a\x0B'V[`@Q` \x01a\x06$\x94\x93\x92\x91\x90a\x15\x98V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x94\x93PPPPV[`\0\x80T`@Q\x7F\xE7\xA7\x97z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x90c\xE7\xA7\x97z\x90a\x06\x96\x90\x86\x90\x86\x90`\x04\x01a\x15vV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x06\xB3W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06\xD7\x91\x90a\x15TV[\x90P[\x92\x91PPV[\x83Q`\0\x03a\x07KW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FInvalid selector\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[\x82Q`\0\x03a\x07\xB6W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x13`$\x82\x01R\x7FInvalid domain name\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[\x81a\x08\x1DW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FInvalid public key hash\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[a\x08'\x83\x83a\x06=V[\x15\x15`\x01\x14a\x08\x92W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FpublicKeyHash is not set\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[`\0T`@Q\x7FB\xD7\xCB\x98\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x81\x01\x84\x90Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x90cB\xD7\xCB\x98\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\t\x01W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\t%\x91\x90a\x15TV[\x15a\t\x8CW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FpublicKeyHash is already revoked`D\x82\x01R`d\x01a\x02EV[`\0a\t\xCF`@Q\x80`@\x01`@R\x80`\x07\x81R` \x01\x7FREVOKE:\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RP\x86\x86\x86a\x06\x03V[\x90P`\0a\t\xDC\x82a\n\xC8V[\x90P`\0a\t\xEA\x82\x85a\x0B\x03V[`\x01T\x90\x91Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x83\x16\x91\x16\x14a\nqW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x11`$\x82\x01R\x7FInvalid signature\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[`\0T`@Q\x7F\x15\xD2Q.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x81\x01\x87\x90Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x90c\x15\xD2Q.\x90`$\x01a\x05\xC8V[`\0a\n\xD4\x82Qa\x0B>V[\x82`@Q` \x01a\n\xE6\x92\x91\x90a\x16\x98V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\0\x80`\0a\x0B\x12\x85\x85a\x0B\xFCV[\x91P\x91Pa\x0B\x1F\x81a\x0CAV[P\x93\x92PPPV[``a\x06\xDA\x82a\x0B6\x84a\r\xF7V[`\x01\x01a\x0EaV[```\0a\x0BK\x83a\x10\xA4V[`\x01\x01\x90P`\0\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0BkWa\x0Bka\x12\xF6V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0B\x95W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x01\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x0B\x9FWP\x93\x92PPPV[`\0\x80\x82Q`A\x03a\x0C2W` \x83\x01Q`@\x84\x01Q``\x85\x01Q`\0\x1Aa\x0C&\x87\x82\x85\x85a\x11\x86V[\x94P\x94PPPPa\x0C:V[P`\0\x90P`\x02[\x92P\x92\x90PV[`\0\x81`\x04\x81\x11\x15a\x0CUWa\x0CUa\x16\xF3V[\x03a\x0C]WPV[`\x01\x81`\x04\x81\x11\x15a\x0CqWa\x0Cqa\x16\xF3V[\x03a\x0C\xD8W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FECDSA: invalid signature\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[`\x02\x81`\x04\x81\x11\x15a\x0C\xECWa\x0C\xECa\x16\xF3V[\x03a\rSW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1F`$\x82\x01R\x7FECDSA: invalid signature length\0`D\x82\x01R`d\x01a\x02EV[`\x03\x81`\x04\x81\x11\x15a\rgWa\rga\x16\xF3V[\x03a\r\xF4W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FECDSA: invalid signature 's' val`D\x82\x01R\x7Fue\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x02EV[PV[`\0\x80`\x80\x83\x90\x1C\x15a\x0E\x0FW`\x80\x92\x90\x92\x1C\x91`\x10\x01[`@\x83\x90\x1C\x15a\x0E$W`@\x92\x90\x92\x1C\x91`\x08\x01[` \x83\x90\x1C\x15a\x0E9W` \x92\x90\x92\x1C\x91`\x04\x01[`\x10\x83\x90\x1C\x15a\x0ENW`\x10\x92\x90\x92\x1C\x91`\x02\x01[`\x08\x83\x90\x1C\x15a\x06\xDAW`\x01\x01\x92\x91PPV[```\0a\x0Ep\x83`\x02a\x17QV[a\x0E{\x90`\x02a\x17hV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0E\x93Wa\x0E\x93a\x12\xF6V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0E\xBDW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x7F0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81`\0\x81Q\x81\x10a\x0E\xF4Wa\x0E\xF4a\x17{V[` \x01\x01\x90~\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16\x90\x81`\0\x1A\x90SP\x7Fx\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81`\x01\x81Q\x81\x10a\x0FWWa\x0FWa\x17{V[` \x01\x01\x90~\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x0F\x93\x84`\x02a\x17QV[a\x0F\x9E\x90`\x01a\x17hV[\x90P[`\x01\x81\x11\x15a\x10;W\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85`\x0F\x16`\x10\x81\x10a\x0F\xDFWa\x0F\xDFa\x17{V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\x0F\xF5Wa\x0F\xF5a\x17{V[` \x01\x01\x90~\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\x104\x81a\x17\xAAV[\x90Pa\x0F\xA1V[P\x83\x15a\x06\xD7W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x02EV[`\0\x80z\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a\x10\xEDWz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x04\x92P`@\x01[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x11\x19Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x117Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x11OWc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x11cWa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x11uW`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\x06\xDAW`\x01\x01\x92\x91PPV[`\0\x80\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF]WnsW\xA4P\x1D\xDF\xE9/Fh\x1B \xA0\x83\x11\x15a\x11\xBDWP`\0\x90P`\x03a\x12lV[`@\x80Q`\0\x80\x82R` \x82\x01\x80\x84R\x89\x90R`\xFF\x88\x16\x92\x82\x01\x92\x90\x92R``\x81\x01\x86\x90R`\x80\x81\x01\x85\x90R`\x01\x90`\xA0\x01` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a\x12\x11W=`\0\x80>=`\0\xFD[PP`@Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x01Q\x91PPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16a\x12eW`\0`\x01\x92P\x92PPa\x12lV[\x91P`\0\x90P[\x94P\x94\x92PPPV[`\0[\x83\x81\x10\x15a\x12\x90W\x81\x81\x01Q\x83\x82\x01R` \x01a\x12xV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra\x12\xB1\x81` \x86\x01` \x86\x01a\x12uV[`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16\x92\x90\x92\x01` \x01\x92\x91PPV[` \x81R`\0a\x06\xD7` \x83\x01\x84a\x12\x99V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[`\0g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x84\x11\x15a\x13@Wa\x13@a\x12\xF6V[`@Q`\x1F\x85\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x90\x81\x16`?\x01\x16\x81\x01\x90\x82\x82\x11\x81\x83\x10\x17\x15a\x13\x86Wa\x13\x86a\x12\xF6V[\x81`@R\x80\x93P\x85\x81R\x86\x86\x86\x01\x11\x15a\x13\x9FW`\0\x80\xFD[\x85\x85` \x83\x017`\0` \x87\x83\x01\x01RPPP\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a\x13\xCAW`\0\x80\xFD[a\x06\xD7\x83\x835` \x85\x01a\x13%V[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15a\x13\xEFW`\0\x80\xFD[\x845g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x14\x07W`\0\x80\xFD[a\x14\x13\x88\x83\x89\x01a\x13\xB9V[\x95P` \x87\x015\x91P\x80\x82\x11\x15a\x14)W`\0\x80\xFD[a\x145\x88\x83\x89\x01a\x13\xB9V[\x94P`@\x87\x015\x93P``\x87\x015\x91P\x80\x82\x11\x15a\x14RW`\0\x80\xFD[P\x85\x01`\x1F\x81\x01\x87\x13a\x14dW`\0\x80\xFD[a\x14s\x87\x825` \x84\x01a\x13%V[\x91PP\x92\x95\x91\x94P\x92PV[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15a\x14\x95W`\0\x80\xFD[\x845g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x14\xADW`\0\x80\xFD[a\x14\xB9\x88\x83\x89\x01a\x13\xB9V[\x95P` \x87\x015\x91P\x80\x82\x11\x15a\x14\xCFW`\0\x80\xFD[a\x14\xDB\x88\x83\x89\x01a\x13\xB9V[\x94P`@\x87\x015\x91P\x80\x82\x11\x15a\x14\xF1W`\0\x80\xFD[Pa\x14\xFE\x87\x82\x88\x01a\x13\xB9V[\x94\x97\x93\x96P\x93\x94``\x015\x93PPPV[`\0\x80`@\x83\x85\x03\x12\x15a\x15\"W`\0\x80\xFD[\x825g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x159W`\0\x80\xFD[a\x15E\x85\x82\x86\x01a\x13\xB9V[\x95` \x94\x90\x94\x015\x94PPPPV[`\0` \x82\x84\x03\x12\x15a\x15fW`\0\x80\xFD[\x81Q\x80\x15\x15\x81\x14a\x06\xD7W`\0\x80\xFD[`@\x81R`\0a\x15\x89`@\x83\x01\x85a\x12\x99V[\x90P\x82` \x83\x01R\x93\x92PPPV[`\0\x85Qa\x15\xAA\x81\x84` \x8A\x01a\x12uV[\x7Fselector=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90\x83\x01\x90\x81R\x85Qa\x15\xE4\x81`\t\x84\x01` \x8A\x01a\x12uV[\x7F;domain=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\t\x92\x90\x91\x01\x91\x82\x01R\x84Qa\x16\"\x81`\x11\x84\x01` \x89\x01a\x12uV[\x7F;public_key_hash=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x11\x92\x90\x91\x01\x91\x82\x01R\x83Qa\x16`\x81`\"\x84\x01` \x88\x01a\x12uV[\x7F;\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\"\x92\x90\x91\x01\x91\x82\x01R`#\x01\x96\x95PPPPPPV[\x7F\x19Ethereum Signed Message:\n\0\0\0\0\0\0\x81R`\0\x83Qa\x16\xD0\x81`\x1A\x85\x01` \x88\x01a\x12uV[\x83Q\x90\x83\x01\x90a\x16\xE7\x81`\x1A\x84\x01` \x88\x01a\x12uV[\x01`\x1A\x01\x94\x93PPPPV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`!`\x04R`$`\0\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x06\xDAWa\x06\xDAa\x17\"V[\x80\x82\x01\x80\x82\x11\x15a\x06\xDAWa\x06\xDAa\x17\"V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`2`\x04R`$`\0\xFD[`\0\x81a\x17\xB9Wa\x17\xB9a\x17\"V[P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x01\x90V\xFE\xA2dipfsX\"\x12 \x8C\xC9=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04$\x91\x90a\x15TV[\x15a\x04\x8BW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FpublicKeyHash is revoked\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[`\0a\x04\xCE`@Q\x80`@\x01`@R\x80`\x04\x81R` \x01\x7FSET:\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RP\x86\x86\x86a\x06\x03V[\x90P`\0a\x04\xDB\x82a\n\xC8V[\x90P`\0a\x04\xE9\x82\x85a\x0B\x03V[`\x01T\x90\x91Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x83\x16\x91\x16\x14a\x05pW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x11`$\x82\x01R\x7FInvalid signature\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[`\0T`@Q\x7F\xC1\\\xFF\xAB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x90c\xC1\\\xFF\xAB\x90a\x05\xC8\x90\x89\x90\x89\x90`\x04\x01a\x15vV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x05\xE2W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x05\xF6W=`\0\x80>=`\0\xFD[PPPPPPPPPPPV[``\x84\x84\x84a\x06\x11\x85a\x0B'V[`@Q` \x01a\x06$\x94\x93\x92\x91\x90a\x15\x98V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x94\x93PPPPV[`\0\x80T`@Q\x7F\xE7\xA7\x97z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x90c\xE7\xA7\x97z\x90a\x06\x96\x90\x86\x90\x86\x90`\x04\x01a\x15vV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x06\xB3W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06\xD7\x91\x90a\x15TV[\x90P[\x92\x91PPV[\x83Q`\0\x03a\x07KW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FInvalid selector\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[\x82Q`\0\x03a\x07\xB6W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x13`$\x82\x01R\x7FInvalid domain name\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[\x81a\x08\x1DW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FInvalid public key hash\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[a\x08'\x83\x83a\x06=V[\x15\x15`\x01\x14a\x08\x92W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FpublicKeyHash is not set\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[`\0T`@Q\x7FB\xD7\xCB\x98\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x81\x01\x84\x90Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x90cB\xD7\xCB\x98\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\t\x01W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\t%\x91\x90a\x15TV[\x15a\t\x8CW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FpublicKeyHash is already revoked`D\x82\x01R`d\x01a\x02EV[`\0a\t\xCF`@Q\x80`@\x01`@R\x80`\x07\x81R` \x01\x7FREVOKE:\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RP\x86\x86\x86a\x06\x03V[\x90P`\0a\t\xDC\x82a\n\xC8V[\x90P`\0a\t\xEA\x82\x85a\x0B\x03V[`\x01T\x90\x91Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x83\x16\x91\x16\x14a\nqW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x11`$\x82\x01R\x7FInvalid signature\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[`\0T`@Q\x7F\x15\xD2Q.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x81\x01\x87\x90Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x90c\x15\xD2Q.\x90`$\x01a\x05\xC8V[`\0a\n\xD4\x82Qa\x0B>V[\x82`@Q` \x01a\n\xE6\x92\x91\x90a\x16\x98V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\0\x80`\0a\x0B\x12\x85\x85a\x0B\xFCV[\x91P\x91Pa\x0B\x1F\x81a\x0CAV[P\x93\x92PPPV[``a\x06\xDA\x82a\x0B6\x84a\r\xF7V[`\x01\x01a\x0EaV[```\0a\x0BK\x83a\x10\xA4V[`\x01\x01\x90P`\0\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0BkWa\x0Bka\x12\xF6V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0B\x95W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x01\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x0B\x9FWP\x93\x92PPPV[`\0\x80\x82Q`A\x03a\x0C2W` \x83\x01Q`@\x84\x01Q``\x85\x01Q`\0\x1Aa\x0C&\x87\x82\x85\x85a\x11\x86V[\x94P\x94PPPPa\x0C:V[P`\0\x90P`\x02[\x92P\x92\x90PV[`\0\x81`\x04\x81\x11\x15a\x0CUWa\x0CUa\x16\xF3V[\x03a\x0C]WPV[`\x01\x81`\x04\x81\x11\x15a\x0CqWa\x0Cqa\x16\xF3V[\x03a\x0C\xD8W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FECDSA: invalid signature\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02EV[`\x02\x81`\x04\x81\x11\x15a\x0C\xECWa\x0C\xECa\x16\xF3V[\x03a\rSW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1F`$\x82\x01R\x7FECDSA: invalid signature length\0`D\x82\x01R`d\x01a\x02EV[`\x03\x81`\x04\x81\x11\x15a\rgWa\rga\x16\xF3V[\x03a\r\xF4W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FECDSA: invalid signature 's' val`D\x82\x01R\x7Fue\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x02EV[PV[`\0\x80`\x80\x83\x90\x1C\x15a\x0E\x0FW`\x80\x92\x90\x92\x1C\x91`\x10\x01[`@\x83\x90\x1C\x15a\x0E$W`@\x92\x90\x92\x1C\x91`\x08\x01[` \x83\x90\x1C\x15a\x0E9W` \x92\x90\x92\x1C\x91`\x04\x01[`\x10\x83\x90\x1C\x15a\x0ENW`\x10\x92\x90\x92\x1C\x91`\x02\x01[`\x08\x83\x90\x1C\x15a\x06\xDAW`\x01\x01\x92\x91PPV[```\0a\x0Ep\x83`\x02a\x17QV[a\x0E{\x90`\x02a\x17hV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0E\x93Wa\x0E\x93a\x12\xF6V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0E\xBDW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x7F0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81`\0\x81Q\x81\x10a\x0E\xF4Wa\x0E\xF4a\x17{V[` \x01\x01\x90~\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16\x90\x81`\0\x1A\x90SP\x7Fx\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81`\x01\x81Q\x81\x10a\x0FWWa\x0FWa\x17{V[` \x01\x01\x90~\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x0F\x93\x84`\x02a\x17QV[a\x0F\x9E\x90`\x01a\x17hV[\x90P[`\x01\x81\x11\x15a\x10;W\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85`\x0F\x16`\x10\x81\x10a\x0F\xDFWa\x0F\xDFa\x17{V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\x0F\xF5Wa\x0F\xF5a\x17{V[` \x01\x01\x90~\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\x104\x81a\x17\xAAV[\x90Pa\x0F\xA1V[P\x83\x15a\x06\xD7W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x02EV[`\0\x80z\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a\x10\xEDWz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x04\x92P`@\x01[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x11\x19Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x117Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x11OWc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x11cWa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x11uW`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\x06\xDAW`\x01\x01\x92\x91PPV[`\0\x80\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF]WnsW\xA4P\x1D\xDF\xE9/Fh\x1B \xA0\x83\x11\x15a\x11\xBDWP`\0\x90P`\x03a\x12lV[`@\x80Q`\0\x80\x82R` \x82\x01\x80\x84R\x89\x90R`\xFF\x88\x16\x92\x82\x01\x92\x90\x92R``\x81\x01\x86\x90R`\x80\x81\x01\x85\x90R`\x01\x90`\xA0\x01` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a\x12\x11W=`\0\x80>=`\0\xFD[PP`@Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x01Q\x91PPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16a\x12eW`\0`\x01\x92P\x92PPa\x12lV[\x91P`\0\x90P[\x94P\x94\x92PPPV[`\0[\x83\x81\x10\x15a\x12\x90W\x81\x81\x01Q\x83\x82\x01R` \x01a\x12xV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra\x12\xB1\x81` \x86\x01` \x86\x01a\x12uV[`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16\x92\x90\x92\x01` \x01\x92\x91PPV[` \x81R`\0a\x06\xD7` \x83\x01\x84a\x12\x99V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[`\0g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x84\x11\x15a\x13@Wa\x13@a\x12\xF6V[`@Q`\x1F\x85\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x90\x81\x16`?\x01\x16\x81\x01\x90\x82\x82\x11\x81\x83\x10\x17\x15a\x13\x86Wa\x13\x86a\x12\xF6V[\x81`@R\x80\x93P\x85\x81R\x86\x86\x86\x01\x11\x15a\x13\x9FW`\0\x80\xFD[\x85\x85` \x83\x017`\0` \x87\x83\x01\x01RPPP\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a\x13\xCAW`\0\x80\xFD[a\x06\xD7\x83\x835` \x85\x01a\x13%V[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15a\x13\xEFW`\0\x80\xFD[\x845g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x14\x07W`\0\x80\xFD[a\x14\x13\x88\x83\x89\x01a\x13\xB9V[\x95P` \x87\x015\x91P\x80\x82\x11\x15a\x14)W`\0\x80\xFD[a\x145\x88\x83\x89\x01a\x13\xB9V[\x94P`@\x87\x015\x93P``\x87\x015\x91P\x80\x82\x11\x15a\x14RW`\0\x80\xFD[P\x85\x01`\x1F\x81\x01\x87\x13a\x14dW`\0\x80\xFD[a\x14s\x87\x825` \x84\x01a\x13%V[\x91PP\x92\x95\x91\x94P\x92PV[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15a\x14\x95W`\0\x80\xFD[\x845g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x14\xADW`\0\x80\xFD[a\x14\xB9\x88\x83\x89\x01a\x13\xB9V[\x95P` \x87\x015\x91P\x80\x82\x11\x15a\x14\xCFW`\0\x80\xFD[a\x14\xDB\x88\x83\x89\x01a\x13\xB9V[\x94P`@\x87\x015\x91P\x80\x82\x11\x15a\x14\xF1W`\0\x80\xFD[Pa\x14\xFE\x87\x82\x88\x01a\x13\xB9V[\x94\x97\x93\x96P\x93\x94``\x015\x93PPPV[`\0\x80`@\x83\x85\x03\x12\x15a\x15\"W`\0\x80\xFD[\x825g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x159W`\0\x80\xFD[a\x15E\x85\x82\x86\x01a\x13\xB9V[\x95` \x94\x90\x94\x015\x94PPPPV[`\0` \x82\x84\x03\x12\x15a\x15fW`\0\x80\xFD[\x81Q\x80\x15\x15\x81\x14a\x06\xD7W`\0\x80\xFD[`@\x81R`\0a\x15\x89`@\x83\x01\x85a\x12\x99V[\x90P\x82` \x83\x01R\x93\x92PPPV[`\0\x85Qa\x15\xAA\x81\x84` \x8A\x01a\x12uV[\x7Fselector=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90\x83\x01\x90\x81R\x85Qa\x15\xE4\x81`\t\x84\x01` \x8A\x01a\x12uV[\x7F;domain=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\t\x92\x90\x91\x01\x91\x82\x01R\x84Qa\x16\"\x81`\x11\x84\x01` \x89\x01a\x12uV[\x7F;public_key_hash=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x11\x92\x90\x91\x01\x91\x82\x01R\x83Qa\x16`\x81`\"\x84\x01` \x88\x01a\x12uV[\x7F;\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\"\x92\x90\x91\x01\x91\x82\x01R`#\x01\x96\x95PPPPPPV[\x7F\x19Ethereum Signed Message:\n\0\0\0\0\0\0\x81R`\0\x83Qa\x16\xD0\x81`\x1A\x85\x01` \x88\x01a\x12uV[\x83Q\x90\x83\x01\x90a\x16\xE7\x81`\x1A\x84\x01` \x88\x01a\x12uV[\x01`\x1A\x01\x94\x93PPPPV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`!`\x04R`$`\0\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x06\xDAWa\x06\xDAa\x17\"V[\x80\x82\x01\x80\x82\x11\x15a\x06\xDAWa\x06\xDAa\x17\"V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`2`\x04R`$`\0\xFD[`\0\x81a\x17\xB9Wa\x17\xB9a\x17\"V[P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x01\x90V\xFE\xA2dipfsX\"\x12 \x8C\xC9(::ethers::contract::Contract); + impl ::core::clone::Clone for ECDSAOwnedDKIMRegistry { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for ECDSAOwnedDKIMRegistry { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for ECDSAOwnedDKIMRegistry { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for ECDSAOwnedDKIMRegistry { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(ECDSAOwnedDKIMRegistry)) + .field(&self.address()) + .finish() + } + } + impl ECDSAOwnedDKIMRegistry { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self( + ::ethers::contract::Contract::new( + address.into(), + ECDSAOWNEDDKIMREGISTRY_ABI.clone(), + client, + ), + ) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + ECDSAOWNEDDKIMREGISTRY_ABI.clone(), + ECDSAOWNEDDKIMREGISTRY_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + ///Calls the contract's `REVOKE_PREFIX` (0xd507c320) function + pub fn revoke_prefix( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([213, 7, 195, 32], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `SET_PREFIX` (0x07f1eaf5) function + pub fn set_prefix( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([7, 241, 234, 245], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `computeSignedMsg` (0xaec79361) function + pub fn compute_signed_msg( + &self, + prefix: ::std::string::String, + selector: ::std::string::String, + domain_name: ::std::string::String, + public_key_hash: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash( + [174, 199, 147, 97], + (prefix, selector, domain_name, public_key_hash), + ) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `dkimRegistry` (0x6423f1e2) function + pub fn dkim_registry( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ::ethers::core::types::Address, + > { + self.0 + .method_hash([100, 35, 241, 226], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isDKIMPublicKeyHashValid` (0xe7a7977a) function + pub fn is_dkim_public_key_hash_valid( + &self, + domain_name: ::std::string::String, + public_key_hash: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([231, 167, 151, 122], (domain_name, public_key_hash)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `revokeDKIMPublicKeyHash` (0xf6b49344) function + pub fn revoke_dkim_public_key_hash( + &self, + selector: ::std::string::String, + domain_name: ::std::string::String, + public_key_hash: [u8; 32], + signature: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash( + [246, 180, 147, 68], + (selector, domain_name, public_key_hash, signature), + ) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `setDKIMPublicKeyHash` (0x97170f2b) function + pub fn set_dkim_public_key_hash( + &self, + selector: ::std::string::String, + domain_name: ::std::string::String, + public_key_hash: [u8; 32], + signature: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash( + [151, 23, 15, 43], + (selector, domain_name, public_key_hash, signature), + ) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `signer` (0x238ac933) function + pub fn signer( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ::ethers::core::types::Address, + > { + self.0 + .method_hash([35, 138, 201, 51], ()) + .expect("method not found (this should never happen)") + } + } + impl From<::ethers::contract::Contract> + for ECDSAOwnedDKIMRegistry { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Container type for all input parameters for the `REVOKE_PREFIX` function with signature `REVOKE_PREFIX()` and selector `0xd507c320` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "REVOKE_PREFIX", abi = "REVOKE_PREFIX()")] + pub struct RevokePrefixCall; + ///Container type for all input parameters for the `SET_PREFIX` function with signature `SET_PREFIX()` and selector `0x07f1eaf5` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "SET_PREFIX", abi = "SET_PREFIX()")] + pub struct SetPrefixCall; + ///Container type for all input parameters for the `computeSignedMsg` function with signature `computeSignedMsg(string,string,string,bytes32)` and selector `0xaec79361` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall( + name = "computeSignedMsg", + abi = "computeSignedMsg(string,string,string,bytes32)" + )] + pub struct ComputeSignedMsgCall { + pub prefix: ::std::string::String, + pub selector: ::std::string::String, + pub domain_name: ::std::string::String, + pub public_key_hash: [u8; 32], + } + ///Container type for all input parameters for the `dkimRegistry` function with signature `dkimRegistry()` and selector `0x6423f1e2` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "dkimRegistry", abi = "dkimRegistry()")] + pub struct DkimRegistryCall; + ///Container type for all input parameters for the `isDKIMPublicKeyHashValid` function with signature `isDKIMPublicKeyHashValid(string,bytes32)` and selector `0xe7a7977a` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall( + name = "isDKIMPublicKeyHashValid", + abi = "isDKIMPublicKeyHashValid(string,bytes32)" + )] + pub struct IsDKIMPublicKeyHashValidCall { + pub domain_name: ::std::string::String, + pub public_key_hash: [u8; 32], + } + ///Container type for all input parameters for the `revokeDKIMPublicKeyHash` function with signature `revokeDKIMPublicKeyHash(string,string,bytes32,bytes)` and selector `0xf6b49344` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall( + name = "revokeDKIMPublicKeyHash", + abi = "revokeDKIMPublicKeyHash(string,string,bytes32,bytes)" + )] + pub struct RevokeDKIMPublicKeyHashCall { + pub selector: ::std::string::String, + pub domain_name: ::std::string::String, + pub public_key_hash: [u8; 32], + pub signature: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `setDKIMPublicKeyHash` function with signature `setDKIMPublicKeyHash(string,string,bytes32,bytes)` and selector `0x97170f2b` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall( + name = "setDKIMPublicKeyHash", + abi = "setDKIMPublicKeyHash(string,string,bytes32,bytes)" + )] + pub struct SetDKIMPublicKeyHashCall { + pub selector: ::std::string::String, + pub domain_name: ::std::string::String, + pub public_key_hash: [u8; 32], + pub signature: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `signer` function with signature `signer()` and selector `0x238ac933` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "signer", abi = "signer()")] + pub struct SignerCall; + ///Container type for all of the contract's call + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum ECDSAOwnedDKIMRegistryCalls { + RevokePrefix(RevokePrefixCall), + SetPrefix(SetPrefixCall), + ComputeSignedMsg(ComputeSignedMsgCall), + DkimRegistry(DkimRegistryCall), + IsDKIMPublicKeyHashValid(IsDKIMPublicKeyHashValidCall), + RevokeDKIMPublicKeyHash(RevokeDKIMPublicKeyHashCall), + SetDKIMPublicKeyHash(SetDKIMPublicKeyHashCall), + Signer(SignerCall), + } + impl ::ethers::core::abi::AbiDecode for ECDSAOwnedDKIMRegistryCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::RevokePrefix(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::SetPrefix(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::ComputeSignedMsg(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::DkimRegistry(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::IsDKIMPublicKeyHashValid(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::RevokeDKIMPublicKeyHash(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::SetDKIMPublicKeyHash(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::Signer(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for ECDSAOwnedDKIMRegistryCalls { + fn encode(self) -> Vec { + match self { + Self::RevokePrefix(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::SetPrefix(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ComputeSignedMsg(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::DkimRegistry(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::IsDKIMPublicKeyHashValid(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::RevokeDKIMPublicKeyHash(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::SetDKIMPublicKeyHash(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::Signer(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for ECDSAOwnedDKIMRegistryCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::RevokePrefix(element) => ::core::fmt::Display::fmt(element, f), + Self::SetPrefix(element) => ::core::fmt::Display::fmt(element, f), + Self::ComputeSignedMsg(element) => ::core::fmt::Display::fmt(element, f), + Self::DkimRegistry(element) => ::core::fmt::Display::fmt(element, f), + Self::IsDKIMPublicKeyHashValid(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::RevokeDKIMPublicKeyHash(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::SetDKIMPublicKeyHash(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::Signer(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for ECDSAOwnedDKIMRegistryCalls { + fn from(value: RevokePrefixCall) -> Self { + Self::RevokePrefix(value) + } + } + impl ::core::convert::From for ECDSAOwnedDKIMRegistryCalls { + fn from(value: SetPrefixCall) -> Self { + Self::SetPrefix(value) + } + } + impl ::core::convert::From for ECDSAOwnedDKIMRegistryCalls { + fn from(value: ComputeSignedMsgCall) -> Self { + Self::ComputeSignedMsg(value) + } + } + impl ::core::convert::From for ECDSAOwnedDKIMRegistryCalls { + fn from(value: DkimRegistryCall) -> Self { + Self::DkimRegistry(value) + } + } + impl ::core::convert::From + for ECDSAOwnedDKIMRegistryCalls { + fn from(value: IsDKIMPublicKeyHashValidCall) -> Self { + Self::IsDKIMPublicKeyHashValid(value) + } + } + impl ::core::convert::From + for ECDSAOwnedDKIMRegistryCalls { + fn from(value: RevokeDKIMPublicKeyHashCall) -> Self { + Self::RevokeDKIMPublicKeyHash(value) + } + } + impl ::core::convert::From + for ECDSAOwnedDKIMRegistryCalls { + fn from(value: SetDKIMPublicKeyHashCall) -> Self { + Self::SetDKIMPublicKeyHash(value) + } + } + impl ::core::convert::From for ECDSAOwnedDKIMRegistryCalls { + fn from(value: SignerCall) -> Self { + Self::Signer(value) + } + } + ///Container type for all return fields from the `REVOKE_PREFIX` function with signature `REVOKE_PREFIX()` and selector `0xd507c320` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct RevokePrefixReturn(pub ::std::string::String); + ///Container type for all return fields from the `SET_PREFIX` function with signature `SET_PREFIX()` and selector `0x07f1eaf5` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct SetPrefixReturn(pub ::std::string::String); + ///Container type for all return fields from the `computeSignedMsg` function with signature `computeSignedMsg(string,string,string,bytes32)` and selector `0xaec79361` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct ComputeSignedMsgReturn(pub ::std::string::String); + ///Container type for all return fields from the `dkimRegistry` function with signature `dkimRegistry()` and selector `0x6423f1e2` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct DkimRegistryReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `isDKIMPublicKeyHashValid` function with signature `isDKIMPublicKeyHashValid(string,bytes32)` and selector `0xe7a7977a` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct IsDKIMPublicKeyHashValidReturn(pub bool); + ///Container type for all return fields from the `signer` function with signature `signer()` and selector `0x238ac933` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct SignerReturn(pub ::ethers::core::types::Address); +} diff --git a/packages/relayer/src/abis/email_account_recovery.rs b/packages/relayer/src/abis/email_account_recovery.rs new file mode 100644 index 00000000..bf129a11 --- /dev/null +++ b/packages/relayer/src/abis/email_account_recovery.rs @@ -0,0 +1,1258 @@ +pub use email_account_recovery::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types, +)] +pub mod email_account_recovery { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("acceptanceSubjectTemplates"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "acceptanceSubjectTemplates", + ), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::String, + ), + ), + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string[][]"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("completeRecovery"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("completeRecovery"), + inputs: ::std::vec![], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("computeAcceptanceTemplateId"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "computeAcceptanceTemplateId", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("templateIdx"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Pure, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("computeEmailAuthAddress"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "computeEmailAuthAddress", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("accountSalt"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("computeRecoveryTemplateId"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "computeRecoveryTemplateId", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("templateIdx"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Pure, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("dkim"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("dkim"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("dkimAddr"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("dkimAddr"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("emailAuthImplementation"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "emailAuthImplementation", + ), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("emailAuthImplementationAddr"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "emailAuthImplementationAddr", + ), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("handleAcceptance"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("handleAcceptance"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("emailAuthMsg"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Bytes, + ), + ), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize), + ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize), + ::ethers::core::abi::ethabi::ParamType::Bool, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ], + ), + ], + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct EmailAuthMsg"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("templateIdx"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("handleRecovery"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("handleRecovery"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("emailAuthMsg"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Bytes, + ), + ), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize), + ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize), + ::ethers::core::abi::ethabi::ParamType::Bool, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ], + ), + ], + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct EmailAuthMsg"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("templateIdx"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("recoverySubjectTemplates"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "recoverySubjectTemplates", + ), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::String, + ), + ), + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string[][]"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("verifier"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("verifier"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("verifierAddr"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("verifierAddr"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ]), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static EMAILACCOUNTRECOVERY_ABI: ::ethers::contract::Lazy< + ::ethers::core::abi::Abi, + > = ::ethers::contract::Lazy::new(__abi); + pub struct EmailAccountRecovery(::ethers::contract::Contract); + impl ::core::clone::Clone for EmailAccountRecovery { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for EmailAccountRecovery { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for EmailAccountRecovery { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for EmailAccountRecovery { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(EmailAccountRecovery)) + .field(&self.address()) + .finish() + } + } + impl EmailAccountRecovery { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self( + ::ethers::contract::Contract::new( + address.into(), + EMAILACCOUNTRECOVERY_ABI.clone(), + client, + ), + ) + } + ///Calls the contract's `acceptanceSubjectTemplates` (0x5bafadda) function + pub fn acceptance_subject_templates( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ::std::vec::Vec<::std::vec::Vec<::std::string::String>>, + > { + self.0 + .method_hash([91, 175, 173, 218], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `completeRecovery` (0x6b0c717e) function + pub fn complete_recovery( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([107, 12, 113, 126], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `computeAcceptanceTemplateId` (0x32ccc2f2) function + pub fn compute_acceptance_template_id( + &self, + template_idx: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([50, 204, 194, 242], template_idx) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `computeEmailAuthAddress` (0x81520782) function + pub fn compute_email_auth_address( + &self, + account_salt: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall< + M, + ::ethers::core::types::Address, + > { + self.0 + .method_hash([129, 82, 7, 130], account_salt) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `computeRecoveryTemplateId` (0x6da99515) function + pub fn compute_recovery_template_id( + &self, + template_idx: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([109, 169, 149, 21], template_idx) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `dkim` (0x400ad5ce) function + pub fn dkim( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ::ethers::core::types::Address, + > { + self.0 + .method_hash([64, 10, 213, 206], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `dkimAddr` (0x73357f85) function + pub fn dkim_addr( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ::ethers::core::types::Address, + > { + self.0 + .method_hash([115, 53, 127, 133], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `emailAuthImplementation` (0xb6201692) function + pub fn email_auth_implementation( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ::ethers::core::types::Address, + > { + self.0 + .method_hash([182, 32, 22, 146], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `emailAuthImplementationAddr` (0x1098e02e) function + pub fn email_auth_implementation_addr( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ::ethers::core::types::Address, + > { + self.0 + .method_hash([16, 152, 224, 46], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `handleAcceptance` (0x0481af67) function + pub fn handle_acceptance( + &self, + email_auth_msg: EmailAuthMsg, + template_idx: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([4, 129, 175, 103], (email_auth_msg, template_idx)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `handleRecovery` (0xb68126fa) function + pub fn handle_recovery( + &self, + email_auth_msg: EmailAuthMsg, + template_idx: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([182, 129, 38, 250], (email_auth_msg, template_idx)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `recoverySubjectTemplates` (0x3e91cdcd) function + pub fn recovery_subject_templates( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ::std::vec::Vec<::std::vec::Vec<::std::string::String>>, + > { + self.0 + .method_hash([62, 145, 205, 205], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `verifier` (0x2b7ac3f3) function + pub fn verifier( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ::ethers::core::types::Address, + > { + self.0 + .method_hash([43, 122, 195, 243], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `verifierAddr` (0x663ea2e2) function + pub fn verifier_addr( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ::ethers::core::types::Address, + > { + self.0 + .method_hash([102, 62, 162, 226], ()) + .expect("method not found (this should never happen)") + } + } + impl From<::ethers::contract::Contract> + for EmailAccountRecovery { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Container type for all input parameters for the `acceptanceSubjectTemplates` function with signature `acceptanceSubjectTemplates()` and selector `0x5bafadda` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "acceptanceSubjectTemplates", abi = "acceptanceSubjectTemplates()")] + pub struct AcceptanceSubjectTemplatesCall; + ///Container type for all input parameters for the `completeRecovery` function with signature `completeRecovery()` and selector `0x6b0c717e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "completeRecovery", abi = "completeRecovery()")] + pub struct CompleteRecoveryCall; + ///Container type for all input parameters for the `computeAcceptanceTemplateId` function with signature `computeAcceptanceTemplateId(uint256)` and selector `0x32ccc2f2` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall( + name = "computeAcceptanceTemplateId", + abi = "computeAcceptanceTemplateId(uint256)" + )] + pub struct ComputeAcceptanceTemplateIdCall { + pub template_idx: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `computeEmailAuthAddress` function with signature `computeEmailAuthAddress(bytes32)` and selector `0x81520782` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall( + name = "computeEmailAuthAddress", + abi = "computeEmailAuthAddress(bytes32)" + )] + pub struct ComputeEmailAuthAddressCall { + pub account_salt: [u8; 32], + } + ///Container type for all input parameters for the `computeRecoveryTemplateId` function with signature `computeRecoveryTemplateId(uint256)` and selector `0x6da99515` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall( + name = "computeRecoveryTemplateId", + abi = "computeRecoveryTemplateId(uint256)" + )] + pub struct ComputeRecoveryTemplateIdCall { + pub template_idx: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `dkim` function with signature `dkim()` and selector `0x400ad5ce` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "dkim", abi = "dkim()")] + pub struct DkimCall; + ///Container type for all input parameters for the `dkimAddr` function with signature `dkimAddr()` and selector `0x73357f85` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "dkimAddr", abi = "dkimAddr()")] + pub struct DkimAddrCall; + ///Container type for all input parameters for the `emailAuthImplementation` function with signature `emailAuthImplementation()` and selector `0xb6201692` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "emailAuthImplementation", abi = "emailAuthImplementation()")] + pub struct EmailAuthImplementationCall; + ///Container type for all input parameters for the `emailAuthImplementationAddr` function with signature `emailAuthImplementationAddr()` and selector `0x1098e02e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall( + name = "emailAuthImplementationAddr", + abi = "emailAuthImplementationAddr()" + )] + pub struct EmailAuthImplementationAddrCall; + ///Container type for all input parameters for the `handleAcceptance` function with signature `handleAcceptance((uint256,bytes[],uint256,(string,bytes32,uint256,string,bytes32,bytes32,bool,bytes)),uint256)` and selector `0x0481af67` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall( + name = "handleAcceptance", + abi = "handleAcceptance((uint256,bytes[],uint256,(string,bytes32,uint256,string,bytes32,bytes32,bool,bytes)),uint256)" + )] + pub struct HandleAcceptanceCall { + pub email_auth_msg: EmailAuthMsg, + pub template_idx: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `handleRecovery` function with signature `handleRecovery((uint256,bytes[],uint256,(string,bytes32,uint256,string,bytes32,bytes32,bool,bytes)),uint256)` and selector `0xb68126fa` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall( + name = "handleRecovery", + abi = "handleRecovery((uint256,bytes[],uint256,(string,bytes32,uint256,string,bytes32,bytes32,bool,bytes)),uint256)" + )] + pub struct HandleRecoveryCall { + pub email_auth_msg: EmailAuthMsg, + pub template_idx: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `recoverySubjectTemplates` function with signature `recoverySubjectTemplates()` and selector `0x3e91cdcd` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "recoverySubjectTemplates", abi = "recoverySubjectTemplates()")] + pub struct RecoverySubjectTemplatesCall; + ///Container type for all input parameters for the `verifier` function with signature `verifier()` and selector `0x2b7ac3f3` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "verifier", abi = "verifier()")] + pub struct VerifierCall; + ///Container type for all input parameters for the `verifierAddr` function with signature `verifierAddr()` and selector `0x663ea2e2` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "verifierAddr", abi = "verifierAddr()")] + pub struct VerifierAddrCall; + ///Container type for all of the contract's call + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum EmailAccountRecoveryCalls { + AcceptanceSubjectTemplates(AcceptanceSubjectTemplatesCall), + CompleteRecovery(CompleteRecoveryCall), + ComputeAcceptanceTemplateId(ComputeAcceptanceTemplateIdCall), + ComputeEmailAuthAddress(ComputeEmailAuthAddressCall), + ComputeRecoveryTemplateId(ComputeRecoveryTemplateIdCall), + Dkim(DkimCall), + DkimAddr(DkimAddrCall), + EmailAuthImplementation(EmailAuthImplementationCall), + EmailAuthImplementationAddr(EmailAuthImplementationAddrCall), + HandleAcceptance(HandleAcceptanceCall), + HandleRecovery(HandleRecoveryCall), + RecoverySubjectTemplates(RecoverySubjectTemplatesCall), + Verifier(VerifierCall), + VerifierAddr(VerifierAddrCall), + } + impl ::ethers::core::abi::AbiDecode for EmailAccountRecoveryCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::AcceptanceSubjectTemplates(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::CompleteRecovery(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::ComputeAcceptanceTemplateId(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::ComputeEmailAuthAddress(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::ComputeRecoveryTemplateId(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::Dkim(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::DkimAddr(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::EmailAuthImplementation(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::EmailAuthImplementationAddr(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::HandleAcceptance(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::HandleRecovery(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::RecoverySubjectTemplates(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::Verifier(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::VerifierAddr(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for EmailAccountRecoveryCalls { + fn encode(self) -> Vec { + match self { + Self::AcceptanceSubjectTemplates(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::CompleteRecovery(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ComputeAcceptanceTemplateId(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ComputeEmailAuthAddress(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ComputeRecoveryTemplateId(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::Dkim(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::DkimAddr(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::EmailAuthImplementation(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::EmailAuthImplementationAddr(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::HandleAcceptance(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::HandleRecovery(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::RecoverySubjectTemplates(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::Verifier(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::VerifierAddr(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + } + } + } + impl ::core::fmt::Display for EmailAccountRecoveryCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AcceptanceSubjectTemplates(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::CompleteRecovery(element) => ::core::fmt::Display::fmt(element, f), + Self::ComputeAcceptanceTemplateId(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::ComputeEmailAuthAddress(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::ComputeRecoveryTemplateId(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::Dkim(element) => ::core::fmt::Display::fmt(element, f), + Self::DkimAddr(element) => ::core::fmt::Display::fmt(element, f), + Self::EmailAuthImplementation(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::EmailAuthImplementationAddr(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::HandleAcceptance(element) => ::core::fmt::Display::fmt(element, f), + Self::HandleRecovery(element) => ::core::fmt::Display::fmt(element, f), + Self::RecoverySubjectTemplates(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::Verifier(element) => ::core::fmt::Display::fmt(element, f), + Self::VerifierAddr(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From + for EmailAccountRecoveryCalls { + fn from(value: AcceptanceSubjectTemplatesCall) -> Self { + Self::AcceptanceSubjectTemplates(value) + } + } + impl ::core::convert::From for EmailAccountRecoveryCalls { + fn from(value: CompleteRecoveryCall) -> Self { + Self::CompleteRecovery(value) + } + } + impl ::core::convert::From + for EmailAccountRecoveryCalls { + fn from(value: ComputeAcceptanceTemplateIdCall) -> Self { + Self::ComputeAcceptanceTemplateId(value) + } + } + impl ::core::convert::From + for EmailAccountRecoveryCalls { + fn from(value: ComputeEmailAuthAddressCall) -> Self { + Self::ComputeEmailAuthAddress(value) + } + } + impl ::core::convert::From + for EmailAccountRecoveryCalls { + fn from(value: ComputeRecoveryTemplateIdCall) -> Self { + Self::ComputeRecoveryTemplateId(value) + } + } + impl ::core::convert::From for EmailAccountRecoveryCalls { + fn from(value: DkimCall) -> Self { + Self::Dkim(value) + } + } + impl ::core::convert::From for EmailAccountRecoveryCalls { + fn from(value: DkimAddrCall) -> Self { + Self::DkimAddr(value) + } + } + impl ::core::convert::From + for EmailAccountRecoveryCalls { + fn from(value: EmailAuthImplementationCall) -> Self { + Self::EmailAuthImplementation(value) + } + } + impl ::core::convert::From + for EmailAccountRecoveryCalls { + fn from(value: EmailAuthImplementationAddrCall) -> Self { + Self::EmailAuthImplementationAddr(value) + } + } + impl ::core::convert::From for EmailAccountRecoveryCalls { + fn from(value: HandleAcceptanceCall) -> Self { + Self::HandleAcceptance(value) + } + } + impl ::core::convert::From for EmailAccountRecoveryCalls { + fn from(value: HandleRecoveryCall) -> Self { + Self::HandleRecovery(value) + } + } + impl ::core::convert::From + for EmailAccountRecoveryCalls { + fn from(value: RecoverySubjectTemplatesCall) -> Self { + Self::RecoverySubjectTemplates(value) + } + } + impl ::core::convert::From for EmailAccountRecoveryCalls { + fn from(value: VerifierCall) -> Self { + Self::Verifier(value) + } + } + impl ::core::convert::From for EmailAccountRecoveryCalls { + fn from(value: VerifierAddrCall) -> Self { + Self::VerifierAddr(value) + } + } + ///Container type for all return fields from the `acceptanceSubjectTemplates` function with signature `acceptanceSubjectTemplates()` and selector `0x5bafadda` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct AcceptanceSubjectTemplatesReturn( + pub ::std::vec::Vec<::std::vec::Vec<::std::string::String>>, + ); + ///Container type for all return fields from the `computeAcceptanceTemplateId` function with signature `computeAcceptanceTemplateId(uint256)` and selector `0x32ccc2f2` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct ComputeAcceptanceTemplateIdReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `computeEmailAuthAddress` function with signature `computeEmailAuthAddress(bytes32)` and selector `0x81520782` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct ComputeEmailAuthAddressReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `computeRecoveryTemplateId` function with signature `computeRecoveryTemplateId(uint256)` and selector `0x6da99515` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct ComputeRecoveryTemplateIdReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `dkim` function with signature `dkim()` and selector `0x400ad5ce` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct DkimReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `dkimAddr` function with signature `dkimAddr()` and selector `0x73357f85` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct DkimAddrReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `emailAuthImplementation` function with signature `emailAuthImplementation()` and selector `0xb6201692` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct EmailAuthImplementationReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `emailAuthImplementationAddr` function with signature `emailAuthImplementationAddr()` and selector `0x1098e02e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct EmailAuthImplementationAddrReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `recoverySubjectTemplates` function with signature `recoverySubjectTemplates()` and selector `0x3e91cdcd` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct RecoverySubjectTemplatesReturn( + pub ::std::vec::Vec<::std::vec::Vec<::std::string::String>>, + ); + ///Container type for all return fields from the `verifier` function with signature `verifier()` and selector `0x2b7ac3f3` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct VerifierReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `verifierAddr` function with signature `verifierAddr()` and selector `0x663ea2e2` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct VerifierAddrReturn(pub ::ethers::core::types::Address); + ///`EmailAuthMsg(uint256,bytes[],uint256,(string,bytes32,uint256,string,bytes32,bytes32,bool,bytes))` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct EmailAuthMsg { + pub template_id: ::ethers::core::types::U256, + pub subject_params: ::std::vec::Vec<::ethers::core::types::Bytes>, + pub skiped_subject_prefix: ::ethers::core::types::U256, + pub proof: EmailProof, + } + ///`EmailProof(string,bytes32,uint256,string,bytes32,bytes32,bool,bytes)` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct EmailProof { + pub domain_name: ::std::string::String, + pub public_key_hash: [u8; 32], + pub timestamp: ::ethers::core::types::U256, + pub masked_subject: ::std::string::String, + pub email_nullifier: [u8; 32], + pub account_salt: [u8; 32], + pub is_code_exist: bool, + pub proof: ::ethers::core::types::Bytes, + } +} diff --git a/packages/relayer/src/abis/email_auth.rs b/packages/relayer/src/abis/email_auth.rs new file mode 100644 index 00000000..754a5339 --- /dev/null +++ b/packages/relayer/src/abis/email_auth.rs @@ -0,0 +1,2444 @@ +pub use email_auth::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types, +)] +pub mod email_auth { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::Some(::ethers::core::abi::ethabi::Constructor { + inputs: ::std::vec![], + }), + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("accountSalt"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("accountSalt"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("authEmail"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("authEmail"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("emailAuthMsg"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Bytes, + ), + ), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize), + ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize), + ::ethers::core::abi::ethabi::ParamType::Bool, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ], + ), + ], + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct EmailAuthMsg"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("authedHash"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("authedHash"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("computeMsgHash"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("computeMsgHash"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_accountSalt"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_isCodeExist"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_templateId"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_subjectParams"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Bytes, + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes[]"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Pure, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("deleteSubjectTemplate"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "deleteSubjectTemplate", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_templateId"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("dkim"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("dkim"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "contract ECDSAOwnedDKIMRegistry", + ), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("dkimRegistryAddr"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("dkimRegistryAddr"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("getSubjectTemplate"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getSubjectTemplate"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_templateId"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::String, + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string[]"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("initialize"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("initialize"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_accountSalt"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("insertSubjectTemplate"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "insertSubjectTemplate", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_templateId"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_subjectTemplate"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::String, + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string[]"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("isValidSignature"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isValidSignature"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_hash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_signature"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 4usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes4"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("lastTimestamp"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("lastTimestamp"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("owner"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("owner"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("proxiableUUID"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("proxiableUUID"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("renounceOwnership"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("renounceOwnership"), + inputs: ::std::vec![], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("setTimestampCheckEnabled"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "setTimestampCheckEnabled", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_enabled"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("subjectTemplates"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("subjectTemplates"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("timestampCheckEnabled"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "timestampCheckEnabled", + ), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("transferOwnership"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("transferOwnership"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("newOwner"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("updateDKIMRegistry"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("updateDKIMRegistry"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_dkimRegistryAddr"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("updateSubjectTemplate"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "updateSubjectTemplate", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_templateId"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_subjectTemplate"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::String, + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string[]"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("updateVerifier"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("updateVerifier"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_verifierAddr"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("upgradeTo"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("upgradeTo"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("newImplementation"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("upgradeToAndCall"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("upgradeToAndCall"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("newImplementation"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("data"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("usedNullifiers"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("usedNullifiers"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("verifier"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("verifier"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("contract Verifier"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("verifierAddr"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("verifierAddr"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ]), + events: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("AdminChanged"), + ::std::vec![ + ::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("AdminChanged"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("previousAdmin"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("newAdmin"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: false, + }, + ], + anonymous: false, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("BeaconUpgraded"), + ::std::vec![ + ::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("BeaconUpgraded"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("beacon"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ], + anonymous: false, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("Initialized"), + ::std::vec![ + ::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("Initialized"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("version"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + indexed: false, + }, + ], + anonymous: false, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("OwnershipTransferred"), + ::std::vec![ + ::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned( + "OwnershipTransferred", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("previousOwner"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("newOwner"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ], + anonymous: false, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("Upgraded"), + ::std::vec![ + ::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("Upgraded"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("implementation"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ], + anonymous: false, + }, + ], + ), + ]), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static EMAILAUTH_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = ::ethers::contract::Lazy::new( + __abi, + ); + pub struct EmailAuth(::ethers::contract::Contract); + impl ::core::clone::Clone for EmailAuth { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for EmailAuth { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for EmailAuth { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for EmailAuth { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(EmailAuth)).field(&self.address()).finish() + } + } + impl EmailAuth { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self( + ::ethers::contract::Contract::new( + address.into(), + EMAILAUTH_ABI.clone(), + client, + ), + ) + } + ///Calls the contract's `accountSalt` (0x6c74921e) function + pub fn account_salt( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([108, 116, 146, 30], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `authEmail` (0xad3f5f9b) function + pub fn auth_email( + &self, + email_auth_msg: EmailAuthMsg, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([173, 63, 95, 155], (email_auth_msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `authedHash` (0x805811ec) function + pub fn authed_hash( + &self, + p0: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([128, 88, 17, 236], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `computeMsgHash` (0x2bde033d) function + pub fn compute_msg_hash( + &self, + account_salt: [u8; 32], + is_code_exist: bool, + template_id: ::ethers::core::types::U256, + subject_params: ::std::vec::Vec<::ethers::core::types::Bytes>, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash( + [43, 222, 3, 61], + (account_salt, is_code_exist, template_id, subject_params), + ) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `deleteSubjectTemplate` (0x519e50d1) function + pub fn delete_subject_template( + &self, + template_id: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([81, 158, 80, 209], template_id) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `dkim` (0x400ad5ce) function + pub fn dkim( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ::ethers::core::types::Address, + > { + self.0 + .method_hash([64, 10, 213, 206], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `dkimRegistryAddr` (0x1bc01b83) function + pub fn dkim_registry_addr( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ::ethers::core::types::Address, + > { + self.0 + .method_hash([27, 192, 27, 131], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `getSubjectTemplate` (0x1e05a028) function + pub fn get_subject_template( + &self, + template_id: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall< + M, + ::std::vec::Vec<::std::string::String>, + > { + self.0 + .method_hash([30, 5, 160, 40], template_id) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `initialize` (0x9498bd71) function + pub fn initialize( + &self, + account_salt: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([148, 152, 189, 113], account_salt) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `insertSubjectTemplate` (0xc4b84df4) function + pub fn insert_subject_template( + &self, + template_id: ::ethers::core::types::U256, + subject_template: ::std::vec::Vec<::std::string::String>, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([196, 184, 77, 244], (template_id, subject_template)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isValidSignature` (0x1626ba7e) function + pub fn is_valid_signature( + &self, + hash: [u8; 32], + signature: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([22, 38, 186, 126], (hash, signature)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `lastTimestamp` (0x19d8ac61) function + pub fn last_timestamp( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([25, 216, 172, 97], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `owner` (0x8da5cb5b) function + pub fn owner( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ::ethers::core::types::Address, + > { + self.0 + .method_hash([141, 165, 203, 91], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `proxiableUUID` (0x52d1902d) function + pub fn proxiable_uuid( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([82, 209, 144, 45], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `renounceOwnership` (0x715018a6) function + pub fn renounce_ownership( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([113, 80, 24, 166], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `setTimestampCheckEnabled` (0xe453c0f3) function + pub fn set_timestamp_check_enabled( + &self, + enabled: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([228, 83, 192, 243], enabled) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `subjectTemplates` (0x4bd07760) function + pub fn subject_templates( + &self, + p0: ::ethers::core::types::U256, + p1: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([75, 208, 119, 96], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `timestampCheckEnabled` (0x3e56f529) function + pub fn timestamp_check_enabled( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([62, 86, 245, 41], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `transferOwnership` (0xf2fde38b) function + pub fn transfer_ownership( + &self, + new_owner: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([242, 253, 227, 139], new_owner) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `updateDKIMRegistry` (0xa500125c) function + pub fn update_dkim_registry( + &self, + dkim_registry_addr: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([165, 0, 18, 92], dkim_registry_addr) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `updateSubjectTemplate` (0x4dbb82f1) function + pub fn update_subject_template( + &self, + template_id: ::ethers::core::types::U256, + subject_template: ::std::vec::Vec<::std::string::String>, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([77, 187, 130, 241], (template_id, subject_template)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `updateVerifier` (0x97fc007c) function + pub fn update_verifier( + &self, + verifier_addr: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([151, 252, 0, 124], verifier_addr) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `upgradeTo` (0x3659cfe6) function + pub fn upgrade_to( + &self, + new_implementation: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([54, 89, 207, 230], new_implementation) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `upgradeToAndCall` (0x4f1ef286) function + pub fn upgrade_to_and_call( + &self, + new_implementation: ::ethers::core::types::Address, + data: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([79, 30, 242, 134], (new_implementation, data)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `usedNullifiers` (0x206137aa) function + pub fn used_nullifiers( + &self, + p0: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([32, 97, 55, 170], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `verifier` (0x2b7ac3f3) function + pub fn verifier( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ::ethers::core::types::Address, + > { + self.0 + .method_hash([43, 122, 195, 243], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `verifierAddr` (0x663ea2e2) function + pub fn verifier_addr( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ::ethers::core::types::Address, + > { + self.0 + .method_hash([102, 62, 162, 226], ()) + .expect("method not found (this should never happen)") + } + ///Gets the contract's `AdminChanged` event + pub fn admin_changed_filter( + &self, + ) -> ::ethers::contract::builders::Event< + ::std::sync::Arc, + M, + AdminChangedFilter, + > { + self.0.event() + } + ///Gets the contract's `BeaconUpgraded` event + pub fn beacon_upgraded_filter( + &self, + ) -> ::ethers::contract::builders::Event< + ::std::sync::Arc, + M, + BeaconUpgradedFilter, + > { + self.0.event() + } + ///Gets the contract's `Initialized` event + pub fn initialized_filter( + &self, + ) -> ::ethers::contract::builders::Event< + ::std::sync::Arc, + M, + InitializedFilter, + > { + self.0.event() + } + ///Gets the contract's `OwnershipTransferred` event + pub fn ownership_transferred_filter( + &self, + ) -> ::ethers::contract::builders::Event< + ::std::sync::Arc, + M, + OwnershipTransferredFilter, + > { + self.0.event() + } + ///Gets the contract's `Upgraded` event + pub fn upgraded_filter( + &self, + ) -> ::ethers::contract::builders::Event< + ::std::sync::Arc, + M, + UpgradedFilter, + > { + self.0.event() + } + /// Returns an `Event` builder for all the events of this contract. + pub fn events( + &self, + ) -> ::ethers::contract::builders::Event< + ::std::sync::Arc, + M, + EmailAuthEvents, + > { + self.0.event_with_filter(::core::default::Default::default()) + } + } + impl From<::ethers::contract::Contract> + for EmailAuth { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethevent(name = "AdminChanged", abi = "AdminChanged(address,address)")] + pub struct AdminChangedFilter { + pub previous_admin: ::ethers::core::types::Address, + pub new_admin: ::ethers::core::types::Address, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethevent(name = "BeaconUpgraded", abi = "BeaconUpgraded(address)")] + pub struct BeaconUpgradedFilter { + #[ethevent(indexed)] + pub beacon: ::ethers::core::types::Address, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethevent(name = "Initialized", abi = "Initialized(uint8)")] + pub struct InitializedFilter { + pub version: u8, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethevent( + name = "OwnershipTransferred", + abi = "OwnershipTransferred(address,address)" + )] + pub struct OwnershipTransferredFilter { + #[ethevent(indexed)] + pub previous_owner: ::ethers::core::types::Address, + #[ethevent(indexed)] + pub new_owner: ::ethers::core::types::Address, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethevent(name = "Upgraded", abi = "Upgraded(address)")] + pub struct UpgradedFilter { + #[ethevent(indexed)] + pub implementation: ::ethers::core::types::Address, + } + ///Container type for all of the contract's events + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum EmailAuthEvents { + AdminChangedFilter(AdminChangedFilter), + BeaconUpgradedFilter(BeaconUpgradedFilter), + InitializedFilter(InitializedFilter), + OwnershipTransferredFilter(OwnershipTransferredFilter), + UpgradedFilter(UpgradedFilter), + } + impl ::ethers::contract::EthLogDecode for EmailAuthEvents { + fn decode_log( + log: &::ethers::core::abi::RawLog, + ) -> ::core::result::Result { + if let Ok(decoded) = AdminChangedFilter::decode_log(log) { + return Ok(EmailAuthEvents::AdminChangedFilter(decoded)); + } + if let Ok(decoded) = BeaconUpgradedFilter::decode_log(log) { + return Ok(EmailAuthEvents::BeaconUpgradedFilter(decoded)); + } + if let Ok(decoded) = InitializedFilter::decode_log(log) { + return Ok(EmailAuthEvents::InitializedFilter(decoded)); + } + if let Ok(decoded) = OwnershipTransferredFilter::decode_log(log) { + return Ok(EmailAuthEvents::OwnershipTransferredFilter(decoded)); + } + if let Ok(decoded) = UpgradedFilter::decode_log(log) { + return Ok(EmailAuthEvents::UpgradedFilter(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData) + } + } + impl ::core::fmt::Display for EmailAuthEvents { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AdminChangedFilter(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::BeaconUpgradedFilter(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::InitializedFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::OwnershipTransferredFilter(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::UpgradedFilter(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for EmailAuthEvents { + fn from(value: AdminChangedFilter) -> Self { + Self::AdminChangedFilter(value) + } + } + impl ::core::convert::From for EmailAuthEvents { + fn from(value: BeaconUpgradedFilter) -> Self { + Self::BeaconUpgradedFilter(value) + } + } + impl ::core::convert::From for EmailAuthEvents { + fn from(value: InitializedFilter) -> Self { + Self::InitializedFilter(value) + } + } + impl ::core::convert::From for EmailAuthEvents { + fn from(value: OwnershipTransferredFilter) -> Self { + Self::OwnershipTransferredFilter(value) + } + } + impl ::core::convert::From for EmailAuthEvents { + fn from(value: UpgradedFilter) -> Self { + Self::UpgradedFilter(value) + } + } + ///Container type for all input parameters for the `accountSalt` function with signature `accountSalt()` and selector `0x6c74921e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "accountSalt", abi = "accountSalt()")] + pub struct AccountSaltCall; + ///Container type for all input parameters for the `authEmail` function with signature `authEmail((uint256,bytes[],uint256,(string,bytes32,uint256,string,bytes32,bytes32,bool,bytes)))` and selector `0xad3f5f9b` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall( + name = "authEmail", + abi = "authEmail((uint256,bytes[],uint256,(string,bytes32,uint256,string,bytes32,bytes32,bool,bytes)))" + )] + pub struct AuthEmailCall { + pub email_auth_msg: EmailAuthMsg, + } + ///Container type for all input parameters for the `authedHash` function with signature `authedHash(bytes32)` and selector `0x805811ec` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "authedHash", abi = "authedHash(bytes32)")] + pub struct AuthedHashCall(pub [u8; 32]); + ///Container type for all input parameters for the `computeMsgHash` function with signature `computeMsgHash(bytes32,bool,uint256,bytes[])` and selector `0x2bde033d` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall( + name = "computeMsgHash", + abi = "computeMsgHash(bytes32,bool,uint256,bytes[])" + )] + pub struct ComputeMsgHashCall { + pub account_salt: [u8; 32], + pub is_code_exist: bool, + pub template_id: ::ethers::core::types::U256, + pub subject_params: ::std::vec::Vec<::ethers::core::types::Bytes>, + } + ///Container type for all input parameters for the `deleteSubjectTemplate` function with signature `deleteSubjectTemplate(uint256)` and selector `0x519e50d1` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "deleteSubjectTemplate", abi = "deleteSubjectTemplate(uint256)")] + pub struct DeleteSubjectTemplateCall { + pub template_id: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `dkim` function with signature `dkim()` and selector `0x400ad5ce` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "dkim", abi = "dkim()")] + pub struct DkimCall; + ///Container type for all input parameters for the `dkimRegistryAddr` function with signature `dkimRegistryAddr()` and selector `0x1bc01b83` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "dkimRegistryAddr", abi = "dkimRegistryAddr()")] + pub struct DkimRegistryAddrCall; + ///Container type for all input parameters for the `getSubjectTemplate` function with signature `getSubjectTemplate(uint256)` and selector `0x1e05a028` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "getSubjectTemplate", abi = "getSubjectTemplate(uint256)")] + pub struct GetSubjectTemplateCall { + pub template_id: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `initialize` function with signature `initialize(bytes32)` and selector `0x9498bd71` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "initialize", abi = "initialize(bytes32)")] + pub struct InitializeCall { + pub account_salt: [u8; 32], + } + ///Container type for all input parameters for the `insertSubjectTemplate` function with signature `insertSubjectTemplate(uint256,string[])` and selector `0xc4b84df4` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall( + name = "insertSubjectTemplate", + abi = "insertSubjectTemplate(uint256,string[])" + )] + pub struct InsertSubjectTemplateCall { + pub template_id: ::ethers::core::types::U256, + pub subject_template: ::std::vec::Vec<::std::string::String>, + } + ///Container type for all input parameters for the `isValidSignature` function with signature `isValidSignature(bytes32,bytes)` and selector `0x1626ba7e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "isValidSignature", abi = "isValidSignature(bytes32,bytes)")] + pub struct IsValidSignatureCall { + pub hash: [u8; 32], + pub signature: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `lastTimestamp` function with signature `lastTimestamp()` and selector `0x19d8ac61` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "lastTimestamp", abi = "lastTimestamp()")] + pub struct LastTimestampCall; + ///Container type for all input parameters for the `owner` function with signature `owner()` and selector `0x8da5cb5b` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "owner", abi = "owner()")] + pub struct OwnerCall; + ///Container type for all input parameters for the `proxiableUUID` function with signature `proxiableUUID()` and selector `0x52d1902d` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "proxiableUUID", abi = "proxiableUUID()")] + pub struct ProxiableUUIDCall; + ///Container type for all input parameters for the `renounceOwnership` function with signature `renounceOwnership()` and selector `0x715018a6` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "renounceOwnership", abi = "renounceOwnership()")] + pub struct RenounceOwnershipCall; + ///Container type for all input parameters for the `setTimestampCheckEnabled` function with signature `setTimestampCheckEnabled(bool)` and selector `0xe453c0f3` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "setTimestampCheckEnabled", abi = "setTimestampCheckEnabled(bool)")] + pub struct SetTimestampCheckEnabledCall { + pub enabled: bool, + } + ///Container type for all input parameters for the `subjectTemplates` function with signature `subjectTemplates(uint256,uint256)` and selector `0x4bd07760` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "subjectTemplates", abi = "subjectTemplates(uint256,uint256)")] + pub struct SubjectTemplatesCall( + pub ::ethers::core::types::U256, + pub ::ethers::core::types::U256, + ); + ///Container type for all input parameters for the `timestampCheckEnabled` function with signature `timestampCheckEnabled()` and selector `0x3e56f529` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "timestampCheckEnabled", abi = "timestampCheckEnabled()")] + pub struct TimestampCheckEnabledCall; + ///Container type for all input parameters for the `transferOwnership` function with signature `transferOwnership(address)` and selector `0xf2fde38b` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "transferOwnership", abi = "transferOwnership(address)")] + pub struct TransferOwnershipCall { + pub new_owner: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `updateDKIMRegistry` function with signature `updateDKIMRegistry(address)` and selector `0xa500125c` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "updateDKIMRegistry", abi = "updateDKIMRegistry(address)")] + pub struct UpdateDKIMRegistryCall { + pub dkim_registry_addr: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `updateSubjectTemplate` function with signature `updateSubjectTemplate(uint256,string[])` and selector `0x4dbb82f1` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall( + name = "updateSubjectTemplate", + abi = "updateSubjectTemplate(uint256,string[])" + )] + pub struct UpdateSubjectTemplateCall { + pub template_id: ::ethers::core::types::U256, + pub subject_template: ::std::vec::Vec<::std::string::String>, + } + ///Container type for all input parameters for the `updateVerifier` function with signature `updateVerifier(address)` and selector `0x97fc007c` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "updateVerifier", abi = "updateVerifier(address)")] + pub struct UpdateVerifierCall { + pub verifier_addr: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `upgradeTo` function with signature `upgradeTo(address)` and selector `0x3659cfe6` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "upgradeTo", abi = "upgradeTo(address)")] + pub struct UpgradeToCall { + pub new_implementation: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `upgradeToAndCall` function with signature `upgradeToAndCall(address,bytes)` and selector `0x4f1ef286` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "upgradeToAndCall", abi = "upgradeToAndCall(address,bytes)")] + pub struct UpgradeToAndCallCall { + pub new_implementation: ::ethers::core::types::Address, + pub data: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `usedNullifiers` function with signature `usedNullifiers(bytes32)` and selector `0x206137aa` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "usedNullifiers", abi = "usedNullifiers(bytes32)")] + pub struct UsedNullifiersCall(pub [u8; 32]); + ///Container type for all input parameters for the `verifier` function with signature `verifier()` and selector `0x2b7ac3f3` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "verifier", abi = "verifier()")] + pub struct VerifierCall; + ///Container type for all input parameters for the `verifierAddr` function with signature `verifierAddr()` and selector `0x663ea2e2` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall(name = "verifierAddr", abi = "verifierAddr()")] + pub struct VerifierAddrCall; + ///Container type for all of the contract's call + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum EmailAuthCalls { + AccountSalt(AccountSaltCall), + AuthEmail(AuthEmailCall), + AuthedHash(AuthedHashCall), + ComputeMsgHash(ComputeMsgHashCall), + DeleteSubjectTemplate(DeleteSubjectTemplateCall), + Dkim(DkimCall), + DkimRegistryAddr(DkimRegistryAddrCall), + GetSubjectTemplate(GetSubjectTemplateCall), + Initialize(InitializeCall), + InsertSubjectTemplate(InsertSubjectTemplateCall), + IsValidSignature(IsValidSignatureCall), + LastTimestamp(LastTimestampCall), + Owner(OwnerCall), + ProxiableUUID(ProxiableUUIDCall), + RenounceOwnership(RenounceOwnershipCall), + SetTimestampCheckEnabled(SetTimestampCheckEnabledCall), + SubjectTemplates(SubjectTemplatesCall), + TimestampCheckEnabled(TimestampCheckEnabledCall), + TransferOwnership(TransferOwnershipCall), + UpdateDKIMRegistry(UpdateDKIMRegistryCall), + UpdateSubjectTemplate(UpdateSubjectTemplateCall), + UpdateVerifier(UpdateVerifierCall), + UpgradeTo(UpgradeToCall), + UpgradeToAndCall(UpgradeToAndCallCall), + UsedNullifiers(UsedNullifiersCall), + Verifier(VerifierCall), + VerifierAddr(VerifierAddrCall), + } + impl ::ethers::core::abi::AbiDecode for EmailAuthCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::AccountSalt(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::AuthEmail(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::AuthedHash(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::ComputeMsgHash(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::DeleteSubjectTemplate(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::Dkim(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::DkimRegistryAddr(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::GetSubjectTemplate(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::Initialize(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::InsertSubjectTemplate(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::IsValidSignature(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::LastTimestamp(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::Owner(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::ProxiableUUID(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::RenounceOwnership(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::SetTimestampCheckEnabled(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::SubjectTemplates(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::TimestampCheckEnabled(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::TransferOwnership(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::UpdateDKIMRegistry(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::UpdateSubjectTemplate(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::UpdateVerifier(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::UpgradeTo(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::UpgradeToAndCall(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::UsedNullifiers(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::Verifier(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::VerifierAddr(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for EmailAuthCalls { + fn encode(self) -> Vec { + match self { + Self::AccountSalt(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::AuthEmail(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::AuthedHash(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ComputeMsgHash(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::DeleteSubjectTemplate(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::Dkim(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::DkimRegistryAddr(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::GetSubjectTemplate(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::Initialize(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::InsertSubjectTemplate(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::IsValidSignature(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::LastTimestamp(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::Owner(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ProxiableUUID(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::RenounceOwnership(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::SetTimestampCheckEnabled(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::SubjectTemplates(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::TimestampCheckEnabled(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::TransferOwnership(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::UpdateDKIMRegistry(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::UpdateSubjectTemplate(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::UpdateVerifier(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::UpgradeTo(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::UpgradeToAndCall(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::UsedNullifiers(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::Verifier(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::VerifierAddr(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + } + } + } + impl ::core::fmt::Display for EmailAuthCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AccountSalt(element) => ::core::fmt::Display::fmt(element, f), + Self::AuthEmail(element) => ::core::fmt::Display::fmt(element, f), + Self::AuthedHash(element) => ::core::fmt::Display::fmt(element, f), + Self::ComputeMsgHash(element) => ::core::fmt::Display::fmt(element, f), + Self::DeleteSubjectTemplate(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::Dkim(element) => ::core::fmt::Display::fmt(element, f), + Self::DkimRegistryAddr(element) => ::core::fmt::Display::fmt(element, f), + Self::GetSubjectTemplate(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::Initialize(element) => ::core::fmt::Display::fmt(element, f), + Self::InsertSubjectTemplate(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::IsValidSignature(element) => ::core::fmt::Display::fmt(element, f), + Self::LastTimestamp(element) => ::core::fmt::Display::fmt(element, f), + Self::Owner(element) => ::core::fmt::Display::fmt(element, f), + Self::ProxiableUUID(element) => ::core::fmt::Display::fmt(element, f), + Self::RenounceOwnership(element) => ::core::fmt::Display::fmt(element, f), + Self::SetTimestampCheckEnabled(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::SubjectTemplates(element) => ::core::fmt::Display::fmt(element, f), + Self::TimestampCheckEnabled(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::TransferOwnership(element) => ::core::fmt::Display::fmt(element, f), + Self::UpdateDKIMRegistry(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::UpdateSubjectTemplate(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::UpdateVerifier(element) => ::core::fmt::Display::fmt(element, f), + Self::UpgradeTo(element) => ::core::fmt::Display::fmt(element, f), + Self::UpgradeToAndCall(element) => ::core::fmt::Display::fmt(element, f), + Self::UsedNullifiers(element) => ::core::fmt::Display::fmt(element, f), + Self::Verifier(element) => ::core::fmt::Display::fmt(element, f), + Self::VerifierAddr(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: AccountSaltCall) -> Self { + Self::AccountSalt(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: AuthEmailCall) -> Self { + Self::AuthEmail(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: AuthedHashCall) -> Self { + Self::AuthedHash(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: ComputeMsgHashCall) -> Self { + Self::ComputeMsgHash(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: DeleteSubjectTemplateCall) -> Self { + Self::DeleteSubjectTemplate(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: DkimCall) -> Self { + Self::Dkim(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: DkimRegistryAddrCall) -> Self { + Self::DkimRegistryAddr(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: GetSubjectTemplateCall) -> Self { + Self::GetSubjectTemplate(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: InitializeCall) -> Self { + Self::Initialize(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: InsertSubjectTemplateCall) -> Self { + Self::InsertSubjectTemplate(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: IsValidSignatureCall) -> Self { + Self::IsValidSignature(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: LastTimestampCall) -> Self { + Self::LastTimestamp(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: OwnerCall) -> Self { + Self::Owner(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: ProxiableUUIDCall) -> Self { + Self::ProxiableUUID(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: RenounceOwnershipCall) -> Self { + Self::RenounceOwnership(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: SetTimestampCheckEnabledCall) -> Self { + Self::SetTimestampCheckEnabled(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: SubjectTemplatesCall) -> Self { + Self::SubjectTemplates(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: TimestampCheckEnabledCall) -> Self { + Self::TimestampCheckEnabled(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: TransferOwnershipCall) -> Self { + Self::TransferOwnership(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: UpdateDKIMRegistryCall) -> Self { + Self::UpdateDKIMRegistry(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: UpdateSubjectTemplateCall) -> Self { + Self::UpdateSubjectTemplate(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: UpdateVerifierCall) -> Self { + Self::UpdateVerifier(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: UpgradeToCall) -> Self { + Self::UpgradeTo(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: UpgradeToAndCallCall) -> Self { + Self::UpgradeToAndCall(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: UsedNullifiersCall) -> Self { + Self::UsedNullifiers(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: VerifierCall) -> Self { + Self::Verifier(value) + } + } + impl ::core::convert::From for EmailAuthCalls { + fn from(value: VerifierAddrCall) -> Self { + Self::VerifierAddr(value) + } + } + ///Container type for all return fields from the `accountSalt` function with signature `accountSalt()` and selector `0x6c74921e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct AccountSaltReturn(pub [u8; 32]); + ///Container type for all return fields from the `authEmail` function with signature `authEmail((uint256,bytes[],uint256,(string,bytes32,uint256,string,bytes32,bytes32,bool,bytes)))` and selector `0xad3f5f9b` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct AuthEmailReturn(pub [u8; 32]); + ///Container type for all return fields from the `authedHash` function with signature `authedHash(bytes32)` and selector `0x805811ec` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct AuthedHashReturn(pub [u8; 32]); + ///Container type for all return fields from the `computeMsgHash` function with signature `computeMsgHash(bytes32,bool,uint256,bytes[])` and selector `0x2bde033d` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct ComputeMsgHashReturn(pub [u8; 32]); + ///Container type for all return fields from the `dkim` function with signature `dkim()` and selector `0x400ad5ce` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct DkimReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `dkimRegistryAddr` function with signature `dkimRegistryAddr()` and selector `0x1bc01b83` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct DkimRegistryAddrReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `getSubjectTemplate` function with signature `getSubjectTemplate(uint256)` and selector `0x1e05a028` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct GetSubjectTemplateReturn(pub ::std::vec::Vec<::std::string::String>); + ///Container type for all return fields from the `isValidSignature` function with signature `isValidSignature(bytes32,bytes)` and selector `0x1626ba7e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct IsValidSignatureReturn(pub [u8; 4]); + ///Container type for all return fields from the `lastTimestamp` function with signature `lastTimestamp()` and selector `0x19d8ac61` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct LastTimestampReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `owner` function with signature `owner()` and selector `0x8da5cb5b` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct OwnerReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `proxiableUUID` function with signature `proxiableUUID()` and selector `0x52d1902d` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct ProxiableUUIDReturn(pub [u8; 32]); + ///Container type for all return fields from the `subjectTemplates` function with signature `subjectTemplates(uint256,uint256)` and selector `0x4bd07760` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct SubjectTemplatesReturn(pub ::std::string::String); + ///Container type for all return fields from the `timestampCheckEnabled` function with signature `timestampCheckEnabled()` and selector `0x3e56f529` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct TimestampCheckEnabledReturn(pub bool); + ///Container type for all return fields from the `usedNullifiers` function with signature `usedNullifiers(bytes32)` and selector `0x206137aa` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct UsedNullifiersReturn(pub bool); + ///Container type for all return fields from the `verifier` function with signature `verifier()` and selector `0x2b7ac3f3` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct VerifierReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `verifierAddr` function with signature `verifierAddr()` and selector `0x663ea2e2` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct VerifierAddrReturn(pub ::ethers::core::types::Address); + ///`EmailAuthMsg(uint256,bytes[],uint256,(string,bytes32,uint256,string,bytes32,bytes32,bool,bytes))` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct EmailAuthMsg { + pub template_id: ::ethers::core::types::U256, + pub subject_params: ::std::vec::Vec<::ethers::core::types::Bytes>, + pub skiped_subject_prefix: ::ethers::core::types::U256, + pub proof: EmailProof, + } + ///`EmailProof(string,bytes32,uint256,string,bytes32,bytes32,bool,bytes)` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct EmailProof { + pub domain_name: ::std::string::String, + pub public_key_hash: [u8; 32], + pub timestamp: ::ethers::core::types::U256, + pub masked_subject: ::std::string::String, + pub email_nullifier: [u8; 32], + pub account_salt: [u8; 32], + pub is_code_exist: bool, + pub proof: ::ethers::core::types::Bytes, + } +} diff --git a/packages/relayer/src/abis/mod.rs b/packages/relayer/src/abis/mod.rs new file mode 100644 index 00000000..c9a06ccb --- /dev/null +++ b/packages/relayer/src/abis/mod.rs @@ -0,0 +1,7 @@ +pub mod ecdsa_owned_dkim_registry; +pub mod email_account_recovery; +pub mod email_auth; + +pub use ecdsa_owned_dkim_registry::*; +pub use email_account_recovery::*; +pub use email_auth::*; diff --git a/packages/relayer/src/chain.rs b/packages/relayer/src/chain.rs new file mode 100644 index 00000000..90dd8582 --- /dev/null +++ b/packages/relayer/src/chain.rs @@ -0,0 +1,178 @@ +use crate::*; +use ethers::middleware::Middleware; +use ethers::prelude::*; +use ethers::signers::Signer; + +const CONFIRMATIONS: usize = 1; + +type SignerM = SignerMiddleware, LocalWallet>; + +#[derive(Debug, Clone)] +pub struct ChainClient { + pub client: Arc, +} + +impl ChainClient { + pub async fn setup() -> Result { + let wallet: LocalWallet = PRIVATE_KEY.get().unwrap().parse()?; + let provider = Provider::::try_from(CHAIN_RPC_PROVIDER.get().unwrap())?; + + let client = Arc::new(SignerMiddleware::new( + provider, + wallet.with_chain_id(*CHAIN_ID.get().unwrap()), + )); + + Ok(Self { client }) + } + + pub async fn set_dkim_public_key_hash( + &self, + selector: String, + domain_name: String, + public_key_hash: [u8; 32], + signature: Bytes, + dkim: ECDSAOwnedDKIMRegistry, + ) -> Result { + // Mutex is used to prevent nonce conflicts. + let mut mutex = SHARED_MUTEX.lock().await; + *mutex += 1; + + let call = dkim.set_dkim_public_key_hash(selector, domain_name, public_key_hash, signature); + let tx = call.send().await?; + let receipt = tx + .log() + .confirmations(CONFIRMATIONS) + .await? + .ok_or(anyhow!("No receipt"))?; + let tx_hash = receipt.transaction_hash; + let tx_hash = format!("0x{}", hex::encode(tx_hash.as_bytes())); + Ok(tx_hash) + } + + pub async fn check_if_dkim_public_key_hash_valid( + &self, + domain_name: ::std::string::String, + public_key_hash: [u8; 32], + dkim: ECDSAOwnedDKIMRegistry, + ) -> Result { + let is_valid = dkim + .is_dkim_public_key_hash_valid(domain_name, public_key_hash) + .call() + .await?; + Ok(is_valid) + } + + pub async fn get_dkim_from_wallet( + &self, + wallet_addr: &String, + ) -> Result, anyhow::Error> { + let wallet_address: H160 = wallet_addr.parse()?; + let contract = EmailAccountRecovery::new(wallet_address, self.client.clone()); + let dkim = contract.dkim().call().await?; + + Ok(ECDSAOwnedDKIMRegistry::new(dkim, self.client.clone())) + } + + pub async fn is_wallet_deployed(&self, wallet_addr_str: &String) -> bool { + let wallet_addr: H160 = wallet_addr_str.parse().unwrap(); + match self.client.get_code(wallet_addr, None).await { + Ok(code) => !code.is_empty(), + Err(e) => { + // Log the error or handle it as needed + error!(LOG, "Error querying contract code: {:?}", e); + false + } + } + } + + pub async fn get_acceptance_subject_templates( + &self, + wallet_addr: &String, + template_idx: u64, + ) -> Result, anyhow::Error> { + let wallet_address: H160 = wallet_addr.parse()?; + let contract = EmailAccountRecovery::new(wallet_address, self.client.clone()); + let templates = contract + .acceptance_subject_templates() + .call() + .await + .map_err(|e| anyhow::Error::from(e))?; + Ok(templates[template_idx as usize].clone()) + } + + pub async fn get_recovery_subject_templates( + &self, + wallet_addr: &String, + template_idx: u64, + ) -> Result, anyhow::Error> { + let wallet_address: H160 = wallet_addr.parse()?; + let contract = EmailAccountRecovery::new(wallet_address, self.client.clone()); + let templates = contract + .recovery_subject_templates() + .call() + .await + .map_err(|e| anyhow::Error::from(e))?; + Ok(templates[template_idx as usize].clone()) + } + + pub async fn complete_recovery(&self, wallet_addr: &String) -> Result { + let wallet_address: H160 = wallet_addr.parse()?; + let contract = EmailAccountRecovery::new(wallet_address, self.client.clone()); + let call = contract.complete_recovery(); + let tx = call.send().await?; + // If the transaction is successful, the function will return true and false otherwise. + let receipt = tx + .log() + .confirmations(CONFIRMATIONS) + .await? + .ok_or(anyhow!("No receipt"))?; + Ok(receipt + .status + .map(|status| status == U64::from(1)) + .unwrap_or(false)) + } + + pub async fn handle_acceptance( + &self, + wallet_addr: &String, + email_auth_msg: EmailAuthMsg, + template_idx: u64, + ) -> Result { + let wallet_address: H160 = wallet_addr.parse()?; + let contract = EmailAccountRecovery::new(wallet_address, self.client.clone()); + let call = contract.handle_acceptance(email_auth_msg, template_idx.into()); + let tx = call.send().await?; + // If the transaction is successful, the function will return true and false otherwise. + let receipt = tx + .log() + .confirmations(CONFIRMATIONS) + .await? + .ok_or(anyhow!("No receipt"))?; + Ok(receipt + .status + .map(|status| status == U64::from(1)) + .unwrap_or(false)) + } + + pub async fn handle_recovery( + &self, + wallet_addr: &String, + email_auth_msg: EmailAuthMsg, + template_idx: u64, + ) -> Result { + let wallet_address: H160 = wallet_addr.parse()?; + let contract = EmailAccountRecovery::new(wallet_address, self.client.clone()); + let call = contract.handle_recovery(email_auth_msg, template_idx.into()); + let tx = call.send().await?; + // If the transaction is successful, the function will return true and false otherwise. + let receipt = tx + .log() + .confirmations(CONFIRMATIONS) + .await? + .ok_or(anyhow!("No receipt"))?; + Ok(receipt + .status + .map(|status| status == U64::from(1)) + .unwrap_or(false)) + } +} diff --git a/packages/relayer/src/config.rs b/packages/relayer/src/config.rs index 5e2c7032..6f43b0de 100644 --- a/packages/relayer/src/config.rs +++ b/packages/relayer/src/config.rs @@ -1,78 +1,81 @@ use crate::*; -use ethers::types::U256; -use std::sync::OnceLock; - -pub static CIRCUITS_DIR_PATH: OnceLock = OnceLock::new(); -pub static WEB_SERVER_ADDRESS: OnceLock = OnceLock::new(); -pub static RELAYER_RAND: OnceLock = OnceLock::new(); -pub static PROVER_ADDRESS: OnceLock = OnceLock::new(); -pub static PRIVATE_KEY: OnceLock = OnceLock::new(); -pub static CHAIN_ID: OnceLock = OnceLock::new(); -pub static CHAIN_RPC_PROVIDER: OnceLock = OnceLock::new(); -pub static CHAIN_RPC_EXPLORER: OnceLock = OnceLock::new(); -pub static CORE_CONTRACT_ADDRESS: OnceLock = OnceLock::new(); -pub static FEE_PER_GAS: OnceLock = OnceLock::new(); -pub static INPUT_FILES_DIR: OnceLock = OnceLock::new(); -pub static RECEIVED_EMAILS_DIR: OnceLock = OnceLock::new(); -pub static EMAIL_TEMPLATES: OnceLock = OnceLock::new(); -pub static RELAYER_EMAIL_ADDRESS: OnceLock = OnceLock::new(); -pub static CANISTER_ID: OnceLock = OnceLock::new(); -pub static IC_PEM_PATH: OnceLock = OnceLock::new(); -pub static IC_REPLICA_URL: OnceLock = OnceLock::new(); use std::{env, path::PathBuf}; -use anyhow::{anyhow, Result}; use dotenv::dotenv; -pub fn setup_configs() -> Result<()> { - let relayer_rand = env::var("RELAYER_RAND").unwrap(); - RELAYER_RAND.set(relayer_rand); - - let web_server_address = env::var("WEB_SERVER_ADDRESS").unwrap(); - WEB_SERVER_ADDRESS.set(web_server_address); - - let prover_address = env::var("PROVER_ADDRESS").unwrap(); - PROVER_ADDRESS.set(prover_address); - - let private_key = env::var("PRIVATE_KEY").unwrap(); - PRIVATE_KEY.set(private_key); - - let chain_id = env::var("CHAIN_ID").unwrap().parse().unwrap(); - CHAIN_ID.set(chain_id); - - let chain_rpc_provider = env::var("CHAIN_RPC_PROVIDER").unwrap(); - CHAIN_RPC_PROVIDER.set(chain_rpc_provider); - - let chain_rpc_explorer = env::var("CHAIN_RPC_EXPLORER").unwrap(); - CHAIN_RPC_EXPLORER.set(chain_rpc_explorer); - - let core_contract_address = env::var("CORE_CONTRACT_ADDRESS").unwrap(); - CORE_CONTRACT_ADDRESS.set(core_contract_address); - - let fee_per_gas = env::var("FEE_PER_GAS").unwrap(); - let fee_per_gas = U256::from_dec_str(&fee_per_gas).unwrap(); - FEE_PER_GAS.set(fee_per_gas); - - let input_files_dir = env::var("INPUT_FILES_DIR").unwrap(); - INPUT_FILES_DIR.set(input_files_dir); - - let received_emails_dir = env::var("RECEIVED_EMAILS_DIR").unwrap(); - RECEIVED_EMAILS_DIR.set(received_emails_dir); - - let email_templates = env::var("EMAIL_TEMPLATES").unwrap(); - EMAIL_TEMPLATES.set(email_templates); - - let relayer_email_address = env::var("RELAYER_EMAIL_ADDRESS").unwrap(); - RELAYER_EMAIL_ADDRESS.set(relayer_email_address); - - let canister_id = env::var("CANISTER_ID").unwrap(); - CANISTER_ID.set(canister_id); +#[derive(Clone)] +pub struct RelayerConfig { + pub imap_config: ImapConfig, + pub smtp_config: SmtpConfig, + pub db_path: String, + pub web_server_address: String, + pub circuits_dir_path: PathBuf, + pub prover_address: String, + pub chain_rpc_provider: String, + pub chain_rpc_explorer: String, + pub chain_id: u32, + pub private_key: String, + pub email_account_recovery_version_id: u8, + pub email_templates: String, +} - let ic_pem_path = env::var("IC_PEM_PATH").unwrap(); - IC_PEM_PATH.set(ic_pem_path); +impl RelayerConfig { + pub fn new() -> Self { + dotenv().ok(); + + let imap_auth = env::var(IMAP_AUTH_TYPE_KEY).unwrap(); + let imap_auth = match &*imap_auth { + "password" => ImapAuth::Password { + user_id: env::var(LOGIN_ID_KEY).unwrap(), + password: env::var(LOGIN_PASSWORD_KEY).unwrap(), + }, + "oauth" => ImapAuth::Oauth { + user_id: env::var(LOGIN_ID_KEY).unwrap(), + client_id: env::var(IMAP_CLIENT_ID_KEY).unwrap(), + client_secret: env::var(IMAP_CLIENT_SECRET_KEY).unwrap(), + auth_url: env::var(IMAP_AUTH_URL_KEY).unwrap(), + token_url: env::var(IMAP_TOKEN_URL_KEY).unwrap(), + redirect_url: IMAP_REDIRECT_URL_KEY.to_string(), + }, + _ => panic!("{WRONG_AUTH_METHOD}"), + }; + + let imap_config = ImapConfig { + domain_name: env::var(IMAP_DOMAIN_NAME_KEY).unwrap(), + port: env::var(IMAP_PORT_KEY).unwrap().parse().unwrap(), + auth: imap_auth, + initially_checked: false, + }; + + let smtp_config = SmtpConfig { + domain_name: env::var(SMTP_DOMAIN_NAME_KEY).unwrap(), + id: env::var(LOGIN_ID_KEY).unwrap(), + password: env::var(LOGIN_PASSWORD_KEY).unwrap(), + }; + + Self { + imap_config, + smtp_config, + db_path: env::var(DATABASE_PATH_KEY).unwrap(), + web_server_address: env::var(WEB_SERVER_ADDRESS_KEY).unwrap(), + circuits_dir_path: env::var(CIRCUITS_DIR_PATH_KEY).unwrap().into(), + prover_address: env::var(PROVER_ADDRESS_KEY).unwrap(), + chain_rpc_provider: env::var(CHAIN_RPC_PROVIDER_KEY).unwrap(), + chain_rpc_explorer: env::var(CHAIN_RPC_EXPLORER_KEY).unwrap(), + chain_id: env::var(CHAIN_ID_KEY).unwrap().parse().unwrap(), + private_key: env::var(PRIVATE_KEY_KEY).unwrap(), + email_account_recovery_version_id: env::var(EMAIL_ACCOUNT_RECOVERY_VERSION_ID_KEY) + .unwrap() + .parse() + .unwrap(), + email_templates: env::var(EMAIL_TEMPLATES_PATH_KEY).unwrap(), + } + } +} - let ic_replica_url = env::var("IC_REPLICA_URL").unwrap(); - IC_REPLICA_URL.set(ic_replica_url); - Ok(()) +impl Default for RelayerConfig { + fn default() -> Self { + Self::new() + } } diff --git a/packages/relayer/src/core.rs b/packages/relayer/src/core.rs new file mode 100644 index 00000000..054ba0a2 --- /dev/null +++ b/packages/relayer/src/core.rs @@ -0,0 +1,474 @@ +#![allow(clippy::upper_case_acronyms)] +#![allow(clippy::identity_op)] + +use crate::abis::email_account_recovery::{EmailAuthMsg, EmailProof}; +use crate::*; + +use ethers::{ + abi::{encode, Token}, + utils::keccak256, +}; +use relayer_utils::{extract_substr_idxes, generate_email_auth_input}; + +const DOMAIN_FIELDS: usize = 9; +const SUBJECT_FIELDS: usize = 20; +const EMAIL_ADDR_FIELDS: usize = 9; + +#[named] +pub async fn handle_email( + email: String, + db: Arc, + chain_client: Arc, + emails_pool: P, +) -> Result { + let parsed_email = ParsedEmail::new_from_raw_email(&email).await?; + trace!(LOG, "email: {}", email; "func" => function_name!()); + let guardian_email_addr = parsed_email.get_from_addr()?; + let padded_from_addr = PaddedEmailAddr::from_email_addr(&guardian_email_addr); + trace!(LOG, "From address: {}", guardian_email_addr; "func" => function_name!()); + let subject = parsed_email.get_subject_all()?; + + let account_code_str = db + .get_invitation_code_from_email_addr(&guardian_email_addr) + .await? + .ok_or(anyhow!( + "The user of email address {} is not registered.", + guardian_email_addr + ))?; + + let request_decomposed_def = + serde_json::from_str(include_str!("./regex_json/request_def.json"))?; + let request_idxes = extract_substr_idxes(&email, &request_decomposed_def)?; + if request_idxes.is_empty() { + bail!(WRONG_SUBJECT_FORMAT); + } + info!(LOG, "Request idxes: {:?}", request_idxes; "func" => function_name!()); + let request_id = &email[request_idxes[0].0..request_idxes[0].1]; + let request_id_u64 = request_id + .parse::() + .map_err(|e| anyhow!("Failed to parse request_id to u64: {}", e))?; + let request_record = db.get_request(request_id_u64).await?; + if request_record.is_none() { + return Ok(EmailAuthEvent::Error { + email_addr: guardian_email_addr, + error: format!("Request {} not found", request_id), + }); + } + let request = request_record.unwrap(); + check_and_update_dkim( + &email, + &parsed_email, + &chain_client, + &request.wallet_eth_addr, + ) + .await?; + + if let Ok(invitation_code) = parsed_email.get_invitation_code() { + trace!(LOG, "Email with account code"; "func" => function_name!()); + + if account_code_str != invitation_code { + return Err(anyhow!( + "Stored account code is not equal to one in the email. Stored: {}, Email: {}", + account_code_str, + invitation_code + )); + } + + if !request.is_for_recovery { + let subject_template = chain_client + .get_acceptance_subject_templates(&request.wallet_eth_addr, request.template_idx) + .await?; + + let result = extract_template_vals_and_skipped_subject_idx(&subject, subject_template); + let (subject_params, skipped_subject_prefix) = match result { + Ok((subject_params, skipped_subject_prefix)) => { + (subject_params, skipped_subject_prefix) + } + Err(e) => { + return Ok(EmailAuthEvent::Error { + email_addr: guardian_email_addr, + error: format!("Invalid Subject, {}", e), + }); + } + }; + + let subject_params_encoded: Vec = subject_params + .iter() + .map(|param| param.abi_encode(None).unwrap()) + .collect(); + + let tokens = vec![ + Token::Uint((*EMAIL_ACCOUNT_RECOVERY_VERSION_ID.get().unwrap()).into()), + Token::String("ACCEPTANCE".to_string()), + Token::Uint(request.template_idx.into()), + ]; + + let template_id = keccak256(encode(&tokens)); + + let circuit_input = generate_email_auth_input( + &email, + &AccountCode::from(hex2field(&format!("0x{}", &account_code_str))?), + ) + .await?; + + let (proof, public_signals) = + generate_proof(&circuit_input, "email_auth", PROVER_ADDRESS.get().unwrap()).await?; + + let account_salt = u256_to_bytes32(&public_signals[SUBJECT_FIELDS + DOMAIN_FIELDS + 3]); + let is_code_exist = public_signals[SUBJECT_FIELDS + DOMAIN_FIELDS + 4] == 1u8.into(); + let masked_subject = get_masked_subject(public_signals.clone(), DOMAIN_FIELDS + 3)?; + + let email_proof = EmailProof { + proof: proof, + domain_name: parsed_email.get_email_domain()?, + public_key_hash: u256_to_bytes32(&public_signals[DOMAIN_FIELDS + 0]), + timestamp: u256_to_bytes32(&public_signals[DOMAIN_FIELDS + 2]).into(), + masked_subject, + email_nullifier: u256_to_bytes32(&public_signals[DOMAIN_FIELDS + 1]), + account_salt, + is_code_exist, + }; + + let email_auth_msg = EmailAuthMsg { + template_id: template_id.into(), + subject_params: subject_params_encoded, + skiped_subject_prefix: skipped_subject_prefix.into(), + proof: email_proof.clone(), + }; + + info!(LOG, "Email Auth Msg: {:?}", email_auth_msg; "func" => function_name!()); + info!(LOG, "Request: {:?}", request; "func" => function_name!()); + + match chain_client + .handle_acceptance( + &request.wallet_eth_addr, + email_auth_msg, + request.template_idx, + ) + .await + { + Ok(true) => { + let creds = Credentials { + account_code: invitation_code, + wallet_eth_addr: request.wallet_eth_addr.clone(), + guardian_email_addr: guardian_email_addr.clone(), + is_set: true, + }; + + db.update_credentials(&creds).await?; + + let updated_request = Request { + wallet_eth_addr: request.wallet_eth_addr.clone(), + guardian_email_addr: guardian_email_addr.clone(), + template_idx: request.template_idx, + is_for_recovery: request.is_for_recovery, + is_processed: true, + request_id: request.request_id, + is_success: Some(true), + email_nullifier: Some(field2hex( + &bytes32_to_fr(&email_proof.email_nullifier).unwrap(), + )), + account_salt: Some(bytes32_to_hex(&account_salt)), + }; + + db.update_request(&updated_request).await?; + + Ok(EmailAuthEvent::AcceptanceSuccess { + wallet_eth_addr: request.wallet_eth_addr, + guardian_email_addr, + request_id: request_id_u64, + }) + } + Ok(false) => { + let updated_request = Request { + wallet_eth_addr: request.wallet_eth_addr.clone(), + guardian_email_addr: guardian_email_addr.clone(), + template_idx: request.template_idx, + is_for_recovery: request.is_for_recovery, + is_processed: true, + request_id: request.request_id, + is_success: Some(false), + email_nullifier: Some(field2hex( + &bytes32_to_fr(&email_proof.email_nullifier).unwrap(), + )), + account_salt: Some(bytes32_to_hex(&account_salt)), + }; + + db.update_request(&updated_request).await?; + + Ok(EmailAuthEvent::Error { + email_addr: guardian_email_addr, + error: "Failed to handle acceptance".to_string(), + }) + } + Err(e) => Err(anyhow!("Failed to handle acceptance: {}", e)), + } + } else { + let subject_template = chain_client + .get_recovery_subject_templates(&request.wallet_eth_addr, request.template_idx) + .await?; + + let result = extract_template_vals_and_skipped_subject_idx(&subject, subject_template); + let (subject_params, skipped_subject_prefix) = match result { + Ok((subject_params, skipped_subject_prefix)) => { + (subject_params, skipped_subject_prefix) + } + Err(e) => { + return Ok(EmailAuthEvent::Error { + email_addr: guardian_email_addr, + error: format!("Invalid Subject, {}", e), + }); + } + }; + + let subject_params_encoded: Vec = subject_params + .iter() + .map(|param| param.abi_encode(None).unwrap()) + .collect(); + + let tokens = vec![ + Token::Uint((*EMAIL_ACCOUNT_RECOVERY_VERSION_ID.get().unwrap()).into()), + Token::String("RECOVERY".to_string()), + Token::Uint(request.template_idx.into()), + ]; + + let template_id = keccak256(encode(&tokens)); + + let circuit_input = generate_email_auth_input( + &email, + &AccountCode::from(hex2field(&format!("0x{}", &account_code_str))?), + ) + .await?; + + let (proof, public_signals) = + generate_proof(&circuit_input, "email_auth", PROVER_ADDRESS.get().unwrap()).await?; + + let account_salt = u256_to_bytes32(&public_signals[SUBJECT_FIELDS + DOMAIN_FIELDS + 3]); + let is_code_exist = public_signals[SUBJECT_FIELDS + DOMAIN_FIELDS + 4] == 1u8.into(); + let masked_subject = get_masked_subject(public_signals.clone(), DOMAIN_FIELDS + 3)?; + + let email_proof = EmailProof { + proof: proof, + domain_name: parsed_email.get_email_domain()?, + public_key_hash: u256_to_bytes32(&public_signals[DOMAIN_FIELDS + 0]), + timestamp: u256_to_bytes32(&public_signals[DOMAIN_FIELDS + 2]).into(), + masked_subject, + email_nullifier: u256_to_bytes32(&public_signals[DOMAIN_FIELDS + 1]), + account_salt, + is_code_exist, + }; + + let email_auth_msg = EmailAuthMsg { + template_id: template_id.into(), + subject_params: subject_params_encoded, + skiped_subject_prefix: skipped_subject_prefix.into(), + proof: email_proof.clone(), + }; + + info!(LOG, "Email Auth Msg: {:?}", email_auth_msg; "func" => function_name!()); + info!(LOG, "Request: {:?}", request; "func" => function_name!()); + + match chain_client + .handle_recovery( + &request.wallet_eth_addr, + email_auth_msg, + request.template_idx, + ) + .await + { + Ok(true) => { + let updated_request = Request { + wallet_eth_addr: request.wallet_eth_addr.clone(), + guardian_email_addr: guardian_email_addr.clone(), + template_idx: request.template_idx, + is_for_recovery: request.is_for_recovery, + is_processed: true, + request_id: request.request_id, + is_success: Some(true), + email_nullifier: Some(field2hex( + &bytes32_to_fr(&email_proof.email_nullifier).unwrap(), + )), + account_salt: Some(bytes32_to_hex(&account_salt)), + }; + + db.update_request(&updated_request).await?; + + Ok(EmailAuthEvent::RecoverySuccess { + wallet_eth_addr: request.wallet_eth_addr, + guardian_email_addr, + request_id: request_id_u64, + }) + } + Ok(false) => { + let updated_request = Request { + wallet_eth_addr: request.wallet_eth_addr.clone(), + guardian_email_addr: guardian_email_addr.clone(), + template_idx: request.template_idx, + is_for_recovery: request.is_for_recovery, + is_processed: true, + request_id: request.request_id, + is_success: Some(false), + email_nullifier: Some(field2hex( + &bytes32_to_fr(&email_proof.email_nullifier).unwrap(), + )), + account_salt: Some(bytes32_to_hex(&account_salt)), + }; + + db.update_request(&updated_request).await?; + + Ok(EmailAuthEvent::Error { + email_addr: guardian_email_addr, + error: "Failed to handle recovery".to_string(), + }) + } + Err(e) => Err(anyhow!("Failed to handle recovery: {}", e)), + } + } + } else { + if request.is_for_recovery { + let subject_template = chain_client + .get_recovery_subject_templates(&request.wallet_eth_addr, request.template_idx) + .await?; + + let result = extract_template_vals_and_skipped_subject_idx(&subject, subject_template); + let (subject_params, skipped_subject_prefix) = match result { + Ok((subject_params, skipped_subject_prefix)) => { + (subject_params, skipped_subject_prefix) + } + Err(e) => { + return Ok(EmailAuthEvent::Error { + email_addr: guardian_email_addr, + error: format!("Invalid Subject, {}", e), + }); + } + }; + + let subject_params_encoded: Vec = subject_params + .iter() + .map(|param| param.abi_encode(None).unwrap()) + .collect(); + + let tokens = vec![ + Token::Uint((*EMAIL_ACCOUNT_RECOVERY_VERSION_ID.get().unwrap()).into()), + Token::String("RECOVERY".to_string()), + Token::Uint(request.template_idx.into()), + ]; + + let template_id = keccak256(encode(&tokens)); + + let circuit_input = generate_email_auth_input( + &email, + &AccountCode::from(hex2field(&format!("0x{}", &account_code_str))?), + ) + .await?; + + let (proof, public_signals) = + generate_proof(&circuit_input, "email_auth", PROVER_ADDRESS.get().unwrap()).await?; + + let account_salt = u256_to_bytes32(&public_signals[SUBJECT_FIELDS + DOMAIN_FIELDS + 3]); + let is_code_exist = public_signals[SUBJECT_FIELDS + DOMAIN_FIELDS + 4] == 1u8.into(); + let masked_subject = get_masked_subject(public_signals.clone(), DOMAIN_FIELDS + 3)?; + + let email_proof = EmailProof { + proof: proof, + domain_name: parsed_email.get_email_domain()?, + public_key_hash: u256_to_bytes32(&public_signals[DOMAIN_FIELDS + 0]), + timestamp: u256_to_bytes32(&public_signals[DOMAIN_FIELDS + 2]).into(), + masked_subject, + email_nullifier: u256_to_bytes32(&public_signals[DOMAIN_FIELDS + 1]), + account_salt, + is_code_exist, + }; + + let email_auth_msg = EmailAuthMsg { + template_id: template_id.into(), + subject_params: subject_params_encoded, + skiped_subject_prefix: skipped_subject_prefix.into(), + proof: email_proof.clone(), + }; + + info!(LOG, "Email Auth Msg: {:?}", email_auth_msg; "func" => function_name!()); + info!(LOG, "Request: {:?}", request; "func" => function_name!()); + + match chain_client + .handle_recovery( + &request.wallet_eth_addr, + email_auth_msg, + request.template_idx, + ) + .await + { + Ok(true) => { + let updated_request = Request { + wallet_eth_addr: request.wallet_eth_addr.clone(), + guardian_email_addr: guardian_email_addr.clone(), + template_idx: request.template_idx, + is_for_recovery: request.is_for_recovery, + is_processed: true, + request_id: request.request_id, + is_success: Some(true), + email_nullifier: Some(field2hex( + &bytes32_to_fr(&email_proof.email_nullifier).unwrap(), + )), + account_salt: Some(bytes32_to_hex(&account_salt)), + }; + + db.update_request(&updated_request).await?; + + Ok(EmailAuthEvent::RecoverySuccess { + wallet_eth_addr: request.wallet_eth_addr, + guardian_email_addr, + request_id: request_id_u64, + }) + } + Ok(false) => { + let updated_request = Request { + wallet_eth_addr: request.wallet_eth_addr.clone(), + guardian_email_addr: guardian_email_addr.clone(), + template_idx: request.template_idx, + is_for_recovery: request.is_for_recovery, + is_processed: true, + request_id: request.request_id, + is_success: Some(false), + email_nullifier: Some(field2hex( + &bytes32_to_fr(&email_proof.email_nullifier).unwrap(), + )), + account_salt: Some(bytes32_to_hex(&account_salt)), + }; + + db.update_request(&updated_request).await?; + + Ok(EmailAuthEvent::Error { + email_addr: guardian_email_addr, + error: "Failed to handle recovery".to_string(), + }) + } + Err(e) => Err(anyhow!("Failed to handle recovery: {}", e)), + } + } else { + return Ok(EmailAuthEvent::Error { + email_addr: guardian_email_addr, + error: "No account code found".to_string(), + }); + } + } +} + +pub fn get_masked_subject(public_signals: Vec, start_idx: usize) -> Result { + // Gather signals from start_idx to start_idx + SUBJECT_FIELDS + let mut subject_bytes = Vec::new(); + for i in start_idx..start_idx + SUBJECT_FIELDS { + let signal = public_signals[i as usize]; + if signal == U256::zero() { + break; + } + let bytes = u256_to_bytes32_little(&signal); + subject_bytes.extend_from_slice(&bytes); + } + + // Bytes to string, removing null bytes + let subject = String::from_utf8(subject_bytes.into_iter().filter(|&b| b != 0u8).collect()) + .map_err(|e| anyhow!("Failed to convert bytes to string: {}", e))?; + + Ok(subject) +} diff --git a/packages/relayer/src/database.rs b/packages/relayer/src/database.rs index e4bd1f43..d1663312 100644 --- a/packages/relayer/src/database.rs +++ b/packages/relayer/src/database.rs @@ -2,12 +2,33 @@ use crate::*; use sqlx::{postgres::PgPool, Row}; +#[derive(Debug, Clone)] +pub struct Credentials { + pub account_code: String, + pub wallet_eth_addr: String, + pub guardian_email_addr: String, + pub is_set: bool, +} + +#[derive(Debug, Clone)] +pub struct Request { + pub request_id: u64, + pub wallet_eth_addr: String, + pub guardian_email_addr: String, + pub is_for_recovery: bool, + pub template_idx: u64, + pub is_processed: bool, + pub is_success: Option, + pub email_nullifier: Option, + pub account_salt: Option, +} + pub struct Database { db: PgPool, } impl Database { - pub(crate) async fn open(path: &str) -> Result { + pub async fn open(path: &str) -> Result { let res = Self { db: PgPool::connect(path) .await @@ -19,342 +40,212 @@ impl Database { Ok(res) } - pub(crate) async fn setup_database(&self) -> Result<()> { + pub async fn setup_database(&self) -> Result<()> { sqlx::query( - "CREATE TABLE IF NOT EXISTS users ( - email_address TEXT PRIMARY KEY, - account_key TEXT NOT NULL, - tx_hash TEXT NOT NULL, - is_onborded BOOLEAN NOT NULL DEFAULT FALSE + "CREATE TABLE IF NOT EXISTS credentials ( + account_code TEXT PRIMARY KEY, + wallet_eth_addr TEXT NOT NULL, + guardian_email_addr TEXT NOT NULL, + is_set BOOLEAN NOT NULL DEFAULT FALSE );", ) .execute(&self.db) .await?; sqlx::query( - "CREATE TABLE IF NOT EXISTS claims ( - id TEXT PRIMARY KEY, - email_address TEXT NOT NULL, - random TEXT NOT NULL, - email_addr_commit TEXT NOT NULL, - expiry_time BIGINT NOT NULL, - is_fund BOOLEAN NOT NULL, - is_announced BOOLEAN NOT NULL, - is_deleted BOOLEAN NOT NULL DEFAULT FALSE, - is_seen BOOLEAN NOT NULL DEFAULT FALSE + "CREATE TABLE IF NOT EXISTS requests ( + request_id BIGINT PRIMARY KEY, + wallet_eth_addr TEXT NOT NULL, + guardian_email_addr TEXT NOT NULL, + is_for_recovery BOOLEAN NOT NULL DEFAULT FALSE, + template_idx INT NOT NULL, + is_processed BOOLEAN NOT NULL DEFAULT FALSE, + is_success BOOLEAN, + email_nullifier TEXT, + account_salt TEXT );", ) .execute(&self.db) .await?; - Ok(()) } - // pub(crate) async fn get_unhandled_emails(&self) -> Result> { - // let mut vec = Vec::new(); - - // let rows = sqlx::query("SELECT email FROM emails") - // .fetch_all(&self.db) - // .await?; - - // for row in rows { - // let email: String = row.get("email"); - // vec.push(email) - // } - - // Ok(vec) - // } - - // pub(crate) async fn insert_email(&self, email_hash: &str, email: &str) -> Result<()> { - // info!("email_hash {}", email_hash); - // let row = sqlx::query( - // "INSERT INTO emails (email_hash, email) VALUES ($1 $2) REtURNING (email_hash)", - // ) - // .bind(email_hash) - // .bind(email) - // .fetch_one(&self.db) - // .await?; - // info!("inserted row: {}", row.get::("email_hash")); - // Ok(()) - // } - - // pub(crate) async fn delete_email(&self, email_hash: &str) -> Result<()> { - // let row_affected = sqlx::query("DELETE FROM emails WHERE email_hash = $1") - // .bind(email_hash) - // .execute(&self.db) - // .await? - // .rows_affected(); - // info!("deleted {} rows", row_affected); + #[named] + pub(crate) async fn get_credentials(&self, account_code: &str) -> Result> { + let row = sqlx::query("SELECT * FROM credentials WHERE account_code = $1") + .bind(account_code) + .fetch_optional(&self.db) + .await?; - // Ok(()) - // } + match row { + Some(row) => { + let account_code: String = row.get("account_code"); + let wallet_eth_addr: String = row.get("wallet_eth_addr"); + let guardian_email_addr: String = row.get("guardian_email_addr"); + let is_set: bool = row.get("is_set"); + let codes_row = Credentials { + account_code, + wallet_eth_addr, + guardian_email_addr, + is_set, + }; + info!(LOG, "row {:?}", codes_row; "func" => function_name!()); + Ok(Some(codes_row)) + } + None => Ok(None), + } + } - // // Result is bad - fix later (possible solution: to output Result - // // where, ReturnStatus is some Enum ... - // pub(crate) async fn contains_email(&self, email_hash: &str) -> Result { - // let result = sqlx::query("SELECT 1 FROM emails WHERE email_hash = $1") - // .bind(email_hash) - // .fetch_optional(&self.db) - // .await?; + pub(crate) async fn is_email_registered(&self, email_addr: &str) -> bool { + let row = sqlx::query("SELECT * FROM credentials WHERE guardian_email_addr = $1") + .bind(email_addr) + .fetch_optional(&self.db) + .await + .unwrap(); - // Ok(result.is_some()) - // } + match row { + Some(_) => true, + None => false, + } + } - #[named] - pub(crate) async fn insert_user( - &self, - email_address: &str, - account_key: &str, - tx_hash: &str, - is_onborded: bool, - ) -> Result<()> { - let row = sqlx::query( - "INSERT INTO users (email_address, account_key, tx_hash, is_onborded) VALUES ($1, $2, $3, $4) RETURNING *", - ) - .bind(email_address) - .bind(account_key) - .bind(tx_hash) - .bind(is_onborded) - .fetch_one(&self.db) - .await?; - info!( - LOG, - "inserted row: {}", - row.get::("email_address"); "func" => function_name!() - ); + pub(crate) async fn update_credentials(&self, row: &Credentials) -> Result<()> { + let res = sqlx::query("UPDATE credentials SET wallet_eth_addr = $1, guardian_email_addr = $2, is_set = $3 WHERE account_code = $4") + .bind(&row.wallet_eth_addr) + .bind(&row.guardian_email_addr) + .bind(row.is_set) + .bind(&row.account_code) + .execute(&self.db) + .await?; Ok(()) } #[named] - pub async fn user_onborded(&self, email_address: &str, tx_hash: &str) -> Result<()> { - info!(LOG, "email_address {}", email_address; "func" => function_name!()); - let res = sqlx::query( - "UPDATE users SET is_onborded = TRUE, tx_hash = $1 WHERE email_address = $2", + pub(crate) async fn insert_credentials(&self, row: &Credentials) -> Result<()> { + info!(LOG, "insert row {:?}", row; "func" => function_name!()); + let row = sqlx::query( + "INSERT INTO credentials (account_code, wallet_eth_addr, guardian_email_addr, is_set) VALUES ($1, $2, $3, $4) RETURNING *", ) - .bind(tx_hash) - .bind(email_address) - .execute(&self.db) + .bind(&row.account_code) + .bind(&row.wallet_eth_addr) + .bind(&row.guardian_email_addr) + .bind(row.is_set) + .fetch_one(&self.db) .await?; info!( LOG, - "updated result: {:?}", - res; "func" => function_name!() + "{} row inserted", + row.len(); "func" => function_name!() ); Ok(()) } - pub async fn get_claims_by_id(&self, id: &U256) -> Result> { - let mut vec = Vec::new(); - - let rows = sqlx::query("SELECT * FROM claims WHERE id = $1 AND is_deleted = FALSE") - .bind(u256_to_hex(id)) - .fetch_all(&self.db) - .await?; + pub async fn is_guardian_set(&self, wallet_eth_addr: &str, guardian_email_addr: &str) -> bool { + let row = sqlx::query("SELECT * FROM credentials WHERE wallet_eth_addr = $1 AND guardian_email_addr = $2 AND is_set = TRUE") + .bind(wallet_eth_addr) + .bind(guardian_email_addr) + .fetch_optional(&self.db) + .await + .unwrap(); - for row in rows { - let commit: String = row.get("email_addr_commit"); - let email_address: String = row.get("email_address"); - let random: String = row.get("random"); - let expiry_time: i64 = row.get("expiry_time"); - let is_fund: bool = row.get("is_fund"); - let is_announced: bool = row.get("is_announced"); - let is_seen: bool = row.get("is_seen"); - vec.push(Claim { - id: *id, - email_address, - random, - commit, - expiry_time, - is_fund, - is_announced, - is_seen, - }) + match row { + Some(_) => true, + None => false, } - Ok(vec) } - pub async fn get_claims_by_email_addr(&self, email_addr: &str) -> Result> { - let mut vec = Vec::new(); - - let rows = - sqlx::query("SELECT * FROM claims WHERE email_address = $1 AND is_deleted = FALSE") - .bind(email_addr) - .fetch_all(&self.db) - .await?; + #[named] + pub(crate) async fn get_request(&self, request_id: u64) -> Result> { + let row = sqlx::query("SELECT * FROM requests WHERE request_id = $1") + .bind(request_id as i64) + .fetch_optional(&self.db) + .await?; - for row in rows { - let id: String = row.get("id"); - let commit: String = row.get("email_addr_commit"); - let email_address: String = row.get("email_address"); - let random: String = row.get("random"); - let expiry_time: i64 = row.get("expiry_time"); - let is_fund: bool = row.get("is_fund"); - let is_announced: bool = row.get("is_announced"); - let is_seen: bool = row.get("is_seen"); - vec.push(Claim { - id: hex_to_u256(&id)?, - email_address, - random, - commit, - expiry_time, - is_fund, - is_announced, - is_seen, - }) + match row { + Some(row) => { + let request_id: i64 = row.get("request_id"); + let wallet_eth_addr: String = row.get("wallet_eth_addr"); + let guardian_email_addr: String = row.get("guardian_email_addr"); + let is_for_recovery: bool = row.get("is_for_recovery"); + let template_idx: i32 = row.get("template_idx"); + let is_processed: bool = row.get("is_processed"); + let is_success: Option = row.get("is_success"); + let email_nullifier: Option = row.get("email_nullifier"); + let account_salt: Option = row.get("account_salt"); + let requests_row = Request { + request_id: request_id as u64, + wallet_eth_addr, + guardian_email_addr, + is_for_recovery, + template_idx: template_idx as u64, + is_processed, + is_success, + email_nullifier, + account_salt, + }; + info!(LOG, "row {:?}", requests_row; "func" => function_name!()); + Ok(Some(requests_row)) + } + None => Ok(None), } - Ok(vec) } - #[named] - pub async fn get_claims_unexpired(&self, now: i64) -> Result> { - let mut vec = Vec::new(); - info!(LOG, "now {}", now; "func" => function_name!()); - let rows = - sqlx::query("SELECT * FROM claims WHERE expiry_time > $1 AND is_deleted = FALSE") - .bind(now) - .fetch_all(&self.db) - .await?; - - for row in rows { - let id: String = row.get("id"); - let commit: String = row.get("email_addr_commit"); - let email_address: String = row.get("email_address"); - let random: String = row.get("random"); - let expiry_time: i64 = row.get("expiry_time"); - let is_fund: bool = row.get("is_fund"); - let is_announced: bool = row.get("is_announced"); - let is_seen: bool = row.get("is_seen"); - vec.push(Claim { - id: hex_to_u256(&id)?, - email_address, - random, - commit, - expiry_time, - is_fund, - is_announced, - is_seen, - }) - } - Ok(vec) + pub(crate) async fn update_request(&self, row: &Request) -> Result<()> { + let res = sqlx::query("UPDATE requests SET wallet_eth_addr = $1, guardian_email_addr = $2, is_for_recovery = $3, template_idx = $4, is_processed = $5, is_success = $6, email_nullifier = $7, account_salt = $8 WHERE request_id = $9") + .bind(&row.wallet_eth_addr) + .bind(&row.guardian_email_addr) + .bind(row.is_for_recovery) + .bind(row.template_idx as i64) + .bind(row.is_processed) + .bind(row.is_success) + .bind(&row.email_nullifier) + .bind(&row.account_salt) + .bind(row.request_id as i64) + .execute(&self.db) + .await?; + Ok(()) } - #[named] - pub async fn get_claims_expired(&self, now: i64) -> Result> { - let mut vec = Vec::new(); - info!(LOG, "now {}", now; "func" => function_name!()); - let rows = - sqlx::query("SELECT * FROM claims WHERE expiry_time < $1 AND is_deleted = FALSE") - .bind(now) - .fetch_all(&self.db) - .await?; + pub(crate) async fn get_invitation_code_from_email_addr( + &self, + email_addr: &str, + ) -> Result> { + let row = sqlx::query("SELECT * FROM credentials WHERE guardian_email_addr = $1") + .bind(email_addr) + .fetch_optional(&self.db) + .await?; - for row in rows { - let id: String = row.get("id"); - let commit: String = row.get("email_addr_commit"); - let email_address: String = row.get("email_address"); - let random: String = row.get("random"); - let expiry_time: i64 = row.get("expiry_time"); - let is_fund: bool = row.get("is_fund"); - let is_announced: bool = row.get("is_announced"); - let is_seen: bool = row.get("is_seen"); - vec.push(Claim { - id: hex_to_u256(&id)?, - email_address, - random, - commit, - expiry_time, - is_fund, - is_announced, - is_seen, - }) + match row { + Some(row) => { + let account_code: String = row.get("account_code"); + Ok(Some(account_code)) + } + None => Ok(None), } - Ok(vec) } #[named] - pub(crate) async fn insert_claim(&self, claim: &Claim) -> Result<()> { - info!(LOG, "expiry_time {}", claim.expiry_time; "func" => function_name!()); + pub(crate) async fn insert_request(&self, row: &Request) -> Result<()> { + info!(LOG, "insert row {:?}", row; "func" => function_name!()); let row = sqlx::query( - "INSERT INTO claims (id, email_address, random, email_addr_commit, expiry_time, is_fund, is_announced, is_seen) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING *", + "INSERT INTO requests (request_id, wallet_eth_addr, guardian_email_addr, is_for_recovery, template_idx, is_processed, is_success, email_nullifier, account_salt) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING *", ) - .bind(u256_to_hex(&claim.id)) - .bind(claim.email_address.clone()) - .bind(claim.random.clone()) - .bind(claim.commit.clone()) - .bind(claim.expiry_time) - .bind(claim.is_fund) - .bind(claim.is_announced) - .bind(claim.is_seen) + .bind(row.request_id as i64) + .bind(&row.wallet_eth_addr) + .bind(&row.guardian_email_addr) + .bind(row.is_for_recovery) + .bind(row.template_idx as i64) + .bind(row.is_processed) + .bind(row.is_success) + .bind(&row.email_nullifier) + .bind(&row.account_salt) .fetch_one(&self.db) .await?; info!( LOG, - "inserted row: {}", - row.get::("email_addr_commit"); "func" => function_name!() + "{} row inserted", + row.len(); "func" => function_name!() ); Ok(()) } - - pub(crate) async fn delete_claim(&self, id: &U256, is_fund: bool) -> Result<()> { - sqlx::query("UPDATE claims SET is_deleted=TRUE WHERE id = $1 AND is_fund = $2 AND is_deleted = FALSE") - .bind(u256_to_hex(id)) - .bind(is_fund) - .execute(&self.db) - .await?; - // sqlx::query("DELETE FROM claims WHERE id = $1 AND is_fund = $2") - // .bind(u256_to_hex(id)) - // .bind(is_fund) - // .execute(&self.db) - // .await?; - Ok(()) - } - - pub async fn contains_user(&self, email_address: &str) -> Result { - let result = sqlx::query("SELECT 1 FROM users WHERE email_address = $1") - .bind(email_address) - .fetch_optional(&self.db) - .await?; - - Ok(result.is_some()) - } - - pub async fn is_user_onborded(&self, email_address: &str) -> Result { - let result = sqlx::query("SELECT is_onborded FROM users WHERE email_address = $1") - .bind(email_address) - .fetch_one(&self.db) - .await?; - Ok(result.get("is_onborded")) - } - - pub async fn get_account_key(&self, email_address: &str) -> Result> { - let row_result = sqlx::query("SELECT account_key FROM users WHERE email_address = $1") - .bind(email_address) - .fetch_one(&self.db) - .await; - - match row_result { - Ok(row) => { - let account_key: String = row.get("account_key"); - Ok(Some(account_key)) - } - Err(sqlx::error::Error::RowNotFound) => Ok(None), - Err(e) => Err(e).map_err(|e| anyhow::anyhow!(e))?, - } - } - - pub async fn get_creation_tx_hash(&self, email_address: &str) -> Result> { - let row_result = sqlx::query("SELECT tx_hash FROM users WHERE email_address = $1") - .bind(email_address) - .fetch_one(&self.db) - .await; - - match row_result { - Ok(row) => { - let tx_hash: String = row.get("tx_hash"); - Ok(Some(tx_hash)) - } - Err(sqlx::error::Error::RowNotFound) => Ok(None), - Err(e) => Err(e).map_err(|e| anyhow::anyhow!(e))?, - } - } } diff --git a/packages/relayer/src/dkim_oracle.rs b/packages/relayer/src/dkim_oracle.rs deleted file mode 100644 index d5c25253..00000000 --- a/packages/relayer/src/dkim_oracle.rs +++ /dev/null @@ -1,62 +0,0 @@ -use anyhow::anyhow; - -use candid::CandidType; -use ic_agent::agent::http_transport::ReqwestTransport; -use ic_agent::agent::*; -use ic_agent::identity::*; -use ic_utils::canister::*; - -use serde::Deserialize; - -#[derive(Debug, Clone)] -pub struct DkimOracleClient<'a> { - pub(crate) canister: Canister<'a>, -} - -#[derive(Default, CandidType, Deserialize, Debug, Clone)] -pub struct SignedDkimPublicKey { - pub selector: String, - pub domain: String, - pub signature: String, - pub public_key: String, - pub public_key_hash: String, -} - -impl<'a> DkimOracleClient<'a> { - pub fn gen_agent(pem_path: &str, replica_url: &str) -> anyhow::Result { - let identity = Secp256k1Identity::from_pem_file(pem_path)?; - let transport = ReqwestTransport::create(replica_url)?; - let agent = AgentBuilder::default() - .with_identity(identity) - .with_transport(transport) - .build()?; - Ok(agent) - } - - pub fn new(canister_id: &str, agent: &'a Agent) -> anyhow::Result { - let canister = CanisterBuilder::new() - .with_canister_id(canister_id) - .with_agent(&agent) - .build()?; - Ok(Self { canister }) - } - - pub async fn request_signature( - &self, - selector: &str, - domain: &str, - ) -> anyhow::Result { - let request = self - .canister - .update("sign_dkim_public_key") - .with_args((selector, domain)) - .build::<(Result,)>(); - let response = request - .call_and_wait_one::>() - .await? - .map_err(|e| anyhow!(format!("Error from canister: {:?}", e)))?; - - // let result = Decode!(&response, String)?; - Ok(response) - } -} diff --git a/packages/relayer/src/lib.rs b/packages/relayer/src/lib.rs index 15617bea..b2d96848 100644 --- a/packages/relayer/src/lib.rs +++ b/packages/relayer/src/lib.rs @@ -1,25 +1,329 @@ -pub(crate) mod config; -pub(crate) mod database; -pub(crate) mod dkim_oracle; -pub(crate) mod emails_pool; -pub(crate) mod imap_client; -pub(crate) mod logger; -pub(crate) mod smtp_client; -pub(crate) mod subject_templates; -pub(crate) mod utils; -pub(crate) mod web_server; -use anyhow::{anyhow, Result}; -pub(crate) use config::*; -pub(crate) use database::*; -pub(crate) use dkim_oracle::*; -pub(crate) use emails_pool::*; -pub(crate) use ether_email_auth_utils::*; -pub(crate) use ethers::types::*; -pub(crate) use function_name::named; -pub(crate) use imap_client::*; -pub(crate) use logger::*; -pub(crate) use slog::*; -pub(crate) use smtp_client::*; -pub(crate) use subject_templates::*; -pub(crate) use utils::*; -pub(crate) use web_server::*; +#![allow(dead_code)] +#![allow(unused_variables)] +#![allow(unreachable_code)] + +pub mod abis; +pub mod chain; +pub mod config; +pub mod core; +pub mod database; +pub mod modules; +pub mod utils; + +pub use abis::*; +pub use chain::*; +pub use config::*; +pub use core::*; +pub use database::*; +pub use modules::*; +pub use utils::*; + +use ::function_name::named; +use futures::TryFutureExt; +use tokio::sync::Mutex; + +use anyhow::{anyhow, bail, Result}; +use dotenv::dotenv; +use ethers::prelude::*; +use lazy_static::lazy_static; +use relayer_utils::{converters::*, cryptos::*, parse_email::ParsedEmail}; +use slog::{error, info, trace}; +use std::env; +use std::future::Future; +use std::path::PathBuf; +use std::pin::Pin; +use std::sync::{Arc, OnceLock}; +use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender}; +use tokio::time::{sleep, Duration}; + +pub static CIRCUITS_DIR_PATH: OnceLock = OnceLock::new(); +pub static WEB_SERVER_ADDRESS: OnceLock = OnceLock::new(); +pub static PROVER_ADDRESS: OnceLock = OnceLock::new(); +pub static PRIVATE_KEY: OnceLock = OnceLock::new(); +pub static CHAIN_ID: OnceLock = OnceLock::new(); +pub static EMAIL_ACCOUNT_RECOVERY_VERSION_ID: OnceLock = OnceLock::new(); +pub static CHAIN_RPC_PROVIDER: OnceLock = OnceLock::new(); +pub static CHAIN_RPC_EXPLORER: OnceLock = OnceLock::new(); +pub static EMAIL_TEMPLATES: OnceLock = OnceLock::new(); +pub static RELAYER_EMAIL_ADDRESS: OnceLock = OnceLock::new(); + +lazy_static! { + pub static ref DB: Arc = { + dotenv().ok(); + let db = tokio::task::block_in_place(|| { + tokio::runtime::Runtime::new() + .unwrap() + .block_on(Database::open(&env::var(DATABASE_PATH_KEY).unwrap())) + }) + .unwrap(); + Arc::new(db) + }; + pub static ref CLIENT: Arc = { + dotenv().ok(); + let client = tokio::task::block_in_place(|| { + tokio::runtime::Runtime::new() + .unwrap() + .block_on(ChainClient::setup()) + }) + .unwrap(); + Arc::new(client) + }; + pub static ref SHARED_MUTEX: Arc> = Arc::new(Mutex::new(0)); +} + +pub type EventConsumer = + fn(EmailAuthEvent, EmailForwardSender) -> Pin + Send>>; + +#[named] +pub async fn run( + config: RelayerConfig, + mut event_consumer: EventConsumer, + email_forward_sender: EmailForwardSender, + mut email_forward_rx: UnboundedReceiver, +) -> Result<()> { + info!(LOG, "Starting relayer"; "func" => function_name!()); + + CIRCUITS_DIR_PATH.set(config.circuits_dir_path).unwrap(); + WEB_SERVER_ADDRESS.set(config.web_server_address).unwrap(); + PROVER_ADDRESS.set(config.prover_address).unwrap(); + PRIVATE_KEY.set(config.private_key).unwrap(); + CHAIN_ID.set(config.chain_id).unwrap(); + CHAIN_RPC_PROVIDER.set(config.chain_rpc_provider).unwrap(); + CHAIN_RPC_EXPLORER.set(config.chain_rpc_explorer).unwrap(); + EMAIL_ACCOUNT_RECOVERY_VERSION_ID + .set(config.email_account_recovery_version_id) + .unwrap(); + EMAIL_TEMPLATES.set(config.email_templates).unwrap(); + RELAYER_EMAIL_ADDRESS + .set(config.smtp_config.id.clone()) + .unwrap(); + + let (tx_handler, mut rx_handler) = tokio::sync::mpsc::unbounded_channel::(); + let (tx_sender, mut rx_sender) = tokio::sync::mpsc::unbounded_channel::(); + let (tx_event_consumer, mut rx_event_consumer) = tokio::sync::mpsc::unbounded_channel(); + let db = DB.clone(); + let client = CLIENT.clone(); + + let email_sender = email_forward_sender.clone(); + let event_consumer_task = tokio::task::spawn(async move { + loop { + match event_consumer_fn( + &mut event_consumer, + &mut rx_event_consumer, + email_sender.clone(), + ) + .await + { + Ok(()) => {} + Err(e) => { + error!(LOG, "Error at event_consumer: {}", e; "func" => function_name!()) + } + } + } + anyhow::Ok(()) + }); + + let tx_handler_for_fetcher_task = tx_handler.clone(); + let emails_pool_fetcher_task = tokio::task::spawn(async move { + loop { + match emails_pool_fetcher_fn(&tx_handler_for_fetcher_task).await { + Ok(()) => {} + Err(e) => { + error!(LOG, "Error at emails_pool_fetcher: {}", e; "func" => function_name!()) + } + } + } + anyhow::Ok(()) + }); + let db_clone_receiver = Arc::clone(&db); + let mut email_receiver = ImapClient::new(config.imap_config).await?; + let tx_handler_for_receiver_task = tx_handler.clone(); + let email_receiver_task = tokio::task::spawn(async move { + loop { + match email_receiver_fn(&mut email_receiver, &tx_handler_for_receiver_task).await { + Ok(new_email_receiver) => {} + Err(e) => { + error!(LOG, "Error at email_receiver: {}", e; "func" => function_name!()) + } + } + } + anyhow::Ok(()) + }); + + let tx_event_consumer_for_email_task = tx_event_consumer.clone(); + let db_clone = Arc::clone(&db); + let client_clone = Arc::clone(&client); + let email_handler_task = tokio::task::spawn(async move { + loop { + match email_handler_fn( + &mut rx_handler, + Arc::clone(&db_clone), + Arc::clone(&client_clone), + tx_event_consumer_for_email_task.clone(), + ) + .await + { + Ok(()) => {} + Err(e) => { + error!(LOG, "Error at email_handler: {}", e; "func" => function_name!()) + } + } + } + + anyhow::Ok(()) + }); + + let tx_event_consumer_for_api_server = tx_event_consumer.clone(); + let api_server_task = tokio::task::spawn( + run_server( + WEB_SERVER_ADDRESS.get().unwrap(), + Arc::clone(&db), + Arc::clone(&client), + email_forward_sender.clone(), + tx_event_consumer_for_api_server, + ) + .map_err(|err| error!(LOG, "Error api server: {}", err; "func" => function_name!())), + ); + + let email_sender = SmtpClient::new(config.smtp_config)?; + let email_sender_task = tokio::task::spawn(async move { + loop { + match email_sender_fn(&mut rx_sender, &email_sender).await { + Ok(()) => {} + Err(e) => { + error!(LOG, "Error at email_sender: {}", e; "func" => function_name!()) + } + } + } + + anyhow::Ok(()) + }); + + let tx_sender_for_forward_task = tx_sender.clone(); + let email_forward_task = tokio::task::spawn(async move { + loop { + match email_forward_rx.recv().await { + Some(email) => { + tx_sender_for_forward_task.send(email)?; + } + None => { + error!(LOG, "Error at email_forward: no email"; "func" => function_name!()) + } + } + } + anyhow::Ok(()) + }); + + let _ = tokio::join!( + event_consumer_task, + email_receiver_task, + email_handler_task, + api_server_task, + email_sender_task, + ); + + Ok(()) +} + +#[named] +async fn emails_pool_fetcher_fn( + tx_handler_for_fetcher_task: &UnboundedSender, +) -> Result<()> { + let emails_pool = FileEmailsPool::new(); + let unhandled_emails = emails_pool.get_unhandled_emails().await?; + for (email_hash, _) in unhandled_emails { + info!(LOG, "unhandled email {}", email_hash; "func" => function_name!()); + tx_handler_for_fetcher_task.send(email_hash)?; + } + sleep(Duration::from_secs(30)).await; + anyhow::Ok(()) +} + +#[named] +async fn email_receiver_fn( + email_receiver: &mut ImapClient, + tx_handler_for_receiver_task: &UnboundedSender, +) -> Result<()> { + let fetches = email_receiver.retrieve_new_emails().await?; + info!(LOG, "Fetched {} emails", fetches.len(); "func" => function_name!()); + for fetch in fetches { + for email in fetch.iter() { + if let Some(body) = email.body() { + let body = String::from_utf8(body.to_vec())?; + info!(LOG, "Received email {}", body; "func" => function_name!()); + let email_hash = calculate_default_hash(&body); + let emails_pool = FileEmailsPool::new(); + if !emails_pool.contains_email(&email_hash).await? { + emails_pool.insert_email(&email_hash, &body).await?; + tx_handler_for_receiver_task.send(email_hash)?; + } + } + } + } + sleep(Duration::from_secs(5)).await; + Ok(()) +} + +#[named] +async fn email_handler_fn( + rx_handler: &mut UnboundedReceiver, + db_clone: Arc, + client_clone: Arc, + event_consumer: UnboundedSender, + // tx_creator_for_email_task: &UnboundedSender<(String, Option)>, +) -> Result<()> { + let email_hash = rx_handler + .recv() + .await + .ok_or(anyhow!(CANNOT_GET_EMAIL_FROM_QUEUE))?; + let emails_pool = FileEmailsPool::new(); + let email = emails_pool.get_email_by_hash(&email_hash).await?; + let emails_pool = FileEmailsPool::new(); + emails_pool.delete_email(&email_hash).await?; + let parsed_email = ParsedEmail::new_from_raw_email(&email).await?; + let email_addr = parsed_email.get_from_addr().unwrap(); + let event = match handle_email( + email.clone(), + Arc::clone(&db_clone), + Arc::clone(&client_clone), + emails_pool, + ) + .await + { + Ok(event) => event, + Err(err) => { + let error = err.to_string(); + error!(LOG, "Error handling email: {}", error; "func" => function_name!()); + EmailAuthEvent::Error { email_addr, error } + } + }; + event_consumer.send(event)?; + anyhow::Ok(()) +} + +#[named] +async fn event_consumer_fn( + consumer: &mut EventConsumer, + rx: &mut UnboundedReceiver, + email_sender: EmailForwardSender, +) -> Result<()> { + let event = rx.recv().await.ok_or(anyhow!("No event"))?; + info!(LOG, "Event: {:?}", event; "func" => function_name!()); + (consumer)(event, email_sender).await; + Ok(()) +} + +#[named] +async fn email_sender_fn( + rx_sender: &mut UnboundedReceiver, + email_sender: &SmtpClient, +) -> Result<()> { + let email = rx_sender + .recv() + .await + .ok_or(anyhow!(CANNOT_GET_EMAIL_FROM_QUEUE))?; + info!(LOG, "Sending email: {:?}", email; "func" => function_name!()); + // info!(LOG, "Email arg: {:?}", email.email_args; "func" => function_name!()); + email_sender.send_new_email(email).await?; + Ok(()) +} diff --git a/packages/relayer/src/main.rs b/packages/relayer/src/main.rs index 09345041..3d0a42e9 100644 --- a/packages/relayer/src/main.rs +++ b/packages/relayer/src/main.rs @@ -1 +1,10 @@ +use anyhow::Result; use relayer::*; + +#[tokio::main] +async fn main() -> Result<()> { + let (sender, rx) = EmailForwardSender::new(); + run(RelayerConfig::new(), event_consumer, sender, rx).await?; + + Ok(()) +} diff --git a/packages/relayer/src/modules/dkim.rs b/packages/relayer/src/modules/dkim.rs new file mode 100644 index 00000000..a228e6b8 --- /dev/null +++ b/packages/relayer/src/modules/dkim.rs @@ -0,0 +1,126 @@ +use anyhow::anyhow; +use relayer_utils::extract_substr_idxes; + +use crate::*; +use candid::CandidType; +use ethers::types::Bytes; +use ethers::utils::hex::FromHex; +use ic_agent::agent::http_transport::ReqwestTransport; +use ic_agent::agent::*; +use ic_agent::identity::*; +use ic_utils::canister::*; + +use serde::Deserialize; + +#[derive(Debug, Clone)] +pub struct DkimOracleClient<'a> { + pub canister: Canister<'a>, +} + +#[derive(Default, CandidType, Deserialize, Debug, Clone)] +pub struct SignedDkimPublicKey { + pub selector: String, + pub domain: String, + pub signature: String, + pub public_key: String, + pub public_key_hash: String, +} + +impl<'a> DkimOracleClient<'a> { + pub fn gen_agent(pem_path: &str, replica_url: &str) -> anyhow::Result { + let identity = Secp256k1Identity::from_pem_file(pem_path)?; + let transport = ReqwestTransport::create(replica_url)?; + let agent = AgentBuilder::default() + .with_identity(identity) + .with_transport(transport) + .build()?; + Ok(agent) + } + + pub fn new(canister_id: &str, agent: &'a Agent) -> anyhow::Result { + let canister = CanisterBuilder::new() + .with_canister_id(canister_id) + .with_agent(&agent) + .build()?; + Ok(Self { canister }) + } + + pub async fn request_signature( + &self, + selector: &str, + domain: &str, + ) -> anyhow::Result { + let request = self + .canister + .update("sign_dkim_public_key") + .with_args((selector, domain)) + .build::<(Result,)>(); + let response = request + .call_and_wait_one::>() + .await? + .map_err(|e| anyhow!(format!("Error from canister: {:?}", e)))?; + + Ok(response) + } +} + +#[named] +pub async fn check_and_update_dkim( + email: &str, + parsed_email: &ParsedEmail, + chain_client: &Arc, + wallet_addr: &str, +) -> Result<()> { + let mut public_key_n = parsed_email.public_key.clone(); + public_key_n.reverse(); + let public_key_hash = public_key_hash(&public_key_n)?; + info!(LOG, "public_key_hash {:?}", public_key_hash; "func" => function_name!()); + let domain = parsed_email.get_email_domain()?; + info!(LOG, "domain {:?}", domain; "func" => function_name!()); + let dkim = chain_client + .get_dkim_from_wallet(&wallet_addr.to_string()) + .await?; + info!(LOG, "dkim {:?}", dkim; "func" => function_name!()); + if chain_client + .check_if_dkim_public_key_hash_valid( + domain.clone(), + fr_to_bytes32(&public_key_hash)?, + dkim.clone(), + ) + .await? + { + info!(LOG, "public key registered"; "func" => function_name!()); + return Ok(()); + } + let selector_decomposed_def = + serde_json::from_str(include_str!("../regex_json/selector_def.json")).unwrap(); + let selector = { + let idxes = + extract_substr_idxes(&parsed_email.canonicalized_header, &selector_decomposed_def)?[0]; + let str = parsed_email.canonicalized_header[idxes.0..idxes.1].to_string(); + str + }; + info!(LOG, "selector {}", selector; "func" => function_name!()); + let ic_agent = DkimOracleClient::gen_agent( + &env::var(PEM_PATH_KEY).unwrap(), + &env::var(IC_REPLICA_URL_KEY).unwrap(), + )?; + let oracle_client = DkimOracleClient::new(&env::var(CANISTER_ID_KEY).unwrap(), &ic_agent)?; + let oracle_result = oracle_client.request_signature(&selector, &domain).await?; + info!(LOG, "DKIM oracle result {:?}", oracle_result; "func" => function_name!()); + let public_key_hash = hex::decode(&oracle_result.public_key_hash[2..])?; + info!(LOG, "public_key_hash from oracle {:?}", public_key_hash; "func" => function_name!()); + let signature = Bytes::from_hex(&oracle_result.signature[2..])?; + info!(LOG, "signature {:?}", signature; "func" => function_name!()); + let tx_hash = chain_client + .set_dkim_public_key_hash( + selector, + domain, + TryInto::<[u8; 32]>::try_into(public_key_hash).unwrap(), + signature, + dkim, + ) + .await?; + info!(LOG, "DKIM registry updated {:?}", tx_hash; "func" => function_name!()); + Ok(()) +} diff --git a/packages/relayer/src/imap_client.rs b/packages/relayer/src/modules/email_client/imap_client.rs similarity index 85% rename from packages/relayer/src/imap_client.rs rename to packages/relayer/src/modules/email_client/imap_client.rs index 6a595714..941267c6 100644 --- a/packages/relayer/src/imap_client.rs +++ b/packages/relayer/src/modules/email_client/imap_client.rs @@ -14,7 +14,7 @@ use oauth2::{ use tokio::net::TcpStream; #[derive(Clone)] -pub(crate) enum ImapAuth { +pub enum ImapAuth { Password { user_id: String, password: String, @@ -30,11 +30,11 @@ pub(crate) enum ImapAuth { } #[derive(Clone)] -pub(crate) struct ImapConfig { - pub(crate) domain_name: String, - pub(crate) port: u16, - pub(crate) auth: ImapAuth, - pub(crate) initially_checked: bool, +pub struct ImapConfig { + pub domain_name: String, + pub port: u16, + pub auth: ImapAuth, + pub initially_checked: bool, } struct OAuth2 { @@ -53,14 +53,14 @@ impl async_imap::Authenticator for &OAuth2 { } } -pub(crate) struct ImapClient { +pub struct ImapClient { session: Session>, config: ImapConfig, } impl ImapClient { #[named] - pub(crate) async fn new(config: ImapConfig) -> Result { + pub async fn new(config: ImapConfig) -> Result { let tcp_stream = TcpStream::connect((&*config.domain_name, config.port)).await?; let tls = async_native_tls::TlsConnector::new(); let tls_stream = tls.connect(&*config.domain_name, tcp_stream).await?; @@ -134,7 +134,7 @@ impl ImapClient { } #[named] - pub(crate) async fn retrieve_new_emails(&mut self) -> Result>> { + pub async fn retrieve_new_emails(&mut self) -> Result>> { if !self.config.initially_checked { self.config.initially_checked = true; let result = @@ -179,28 +179,6 @@ impl ImapClient { } } - // async fn wait_new_email(mut self) -> Result { - // loop { - // let mut idle = self.session.idle(); - // idle.init().await?; - // let result = idle.wait_with_timeout(Duration::from_secs(29 * 60)).0.await; - // let is_new_data = matches!(result, Ok(NewData(_))); - - // let session_result = idle.done().await; - - // self = match session_result { - // Ok(session) => Self { session, ..self }, - // Err(_) => Self::new(self.config).await.unwrap(), - // }; - - // if is_new_data { - // return Ok(self); - // } else { - // self.reconnect().await?; - // } - // } - // } - async fn reconnect(&mut self) -> Result<()> { const MAX_RETRIES: u32 = 5; let mut retry_count = 0; diff --git a/packages/relayer/src/modules/email_client/mail.rs b/packages/relayer/src/modules/email_client/mail.rs new file mode 100644 index 00000000..b0bafa50 --- /dev/null +++ b/packages/relayer/src/modules/email_client/mail.rs @@ -0,0 +1,318 @@ +use crate::{ + error, render_html, EmailForwardSender, + EmailMessage, Future, Result, LOG, +}; + +use std::pin::Pin; + +#[derive(Debug, Clone)] +pub enum EmailAuthEvent { + AcceptanceRequest { + wallet_eth_addr: String, + guardian_email_addr: String, + request_id: u64, + subject: String, + account_code: String, + }, + GuardianAlreadyExists { + wallet_eth_addr: String, + guardian_email_addr: String, + }, + Error { + email_addr: String, + error: String, + }, + RecoveryRequest { + wallet_eth_addr: String, + guardian_email_addr: String, + request_id: u64, + subject: String, + }, + AcceptanceSuccess { + wallet_eth_addr: String, + guardian_email_addr: String, + request_id: u64, + }, + RecoverySuccess { + wallet_eth_addr: String, + guardian_email_addr: String, + request_id: u64, + }, + GuardianNotSet { + wallet_eth_addr: String, + guardian_email_addr: String, + }, + GuardianNotRegistered { + wallet_eth_addr: String, + guardian_email_addr: String, + subject: String, + request_id: u64, + }, +} + +pub fn event_consumer( + event: EmailAuthEvent, + sender: EmailForwardSender, +) -> Pin + Send>> { + Box::pin(async { + match event_consumer_fn(event, sender).await { + Ok(_) => {} + Err(err) => { + error!(LOG, "Failed to accept event: {}", err); + } + } + }) +} + +async fn event_consumer_fn(event: EmailAuthEvent, sender: EmailForwardSender) -> Result<()> { + match event { + EmailAuthEvent::AcceptanceRequest { + wallet_eth_addr, + guardian_email_addr, + request_id, + subject, + account_code, + } => { + let subject = format!("{} Code {}", subject, account_code); + + let body_plain = format!( + "You have received an guardian request from the wallet address {}. \ + Reply \"Confirm\" to this email to accept the request. \ + Your request ID is #{}. \ + If you did not initiate this request, please contact us immediately.", + wallet_eth_addr, request_id + ); + + let render_data = serde_json::json!({ + "userEmailAddr": guardian_email_addr, + "walletAddress": wallet_eth_addr, + "requestId": request_id, + }); + let body_html = render_html("acceptance_request.html", render_data).await?; + + let email = EmailMessage { + to: guardian_email_addr, + subject, + reference: None, + reply_to: None, + body_plain, + body_html, + body_attachments: None, + }; + + sender.send(email)?; + } + EmailAuthEvent::Error { email_addr, error } => { + let subject = "Error"; + let body_plain = format!( + "An error occurred while processing your request. \ + Error: {}", + error + ); + + let render_data = serde_json::json!({ + "error": error, + "userEmailAddr": email_addr, + }); + let body_html = render_html("error.html", render_data).await?; + + let email = EmailMessage { + to: email_addr, + subject: subject.to_string(), + reference: None, + reply_to: None, + body_plain, + body_html, + body_attachments: None, + }; + + sender.send(email)?; + } + EmailAuthEvent::GuardianAlreadyExists { + wallet_eth_addr, + guardian_email_addr, + } => { + let subject = "Guardian Already Exists"; + let body_plain = format!( + "The guardian email address {} is already associated with the wallet address {}. \ + If you did not initiate this request, please contact us immediately.", + guardian_email_addr, wallet_eth_addr + ); + + let render_data = serde_json::json!({ + "walletAddress": wallet_eth_addr, + "userEmailAddr": guardian_email_addr, + }); + let body_html = render_html("guardian_already_exists.html", render_data).await?; + + let email = EmailMessage { + to: guardian_email_addr, + subject: subject.to_string(), + reference: None, + reply_to: None, + body_plain, + body_html, + body_attachments: None, + }; + + sender.send(email)?; + } + EmailAuthEvent::RecoveryRequest { + wallet_eth_addr, + guardian_email_addr, + request_id, + subject, + } => { + let body_plain = format!( + "You have received a recovery request from the wallet address {}. \ + Reply \"Confirm\" to this email to accept the request. \ + Your request ID is #{}. \ + If you did not initiate this request, please contact us immediately.", + wallet_eth_addr, request_id + ); + + let render_data = serde_json::json!({ + "userEmailAddr": guardian_email_addr, + "walletAddress": wallet_eth_addr, + "requestId": request_id, + }); + let body_html = render_html("recovery_request.html", render_data).await?; + + let email = EmailMessage { + to: guardian_email_addr, + subject, + reference: None, + reply_to: None, + body_plain, + body_html, + body_attachments: None, + }; + + sender.send(email)?; + } + EmailAuthEvent::AcceptanceSuccess { + wallet_eth_addr, + guardian_email_addr, + request_id, + } => { + let subject = "Acceptance Success"; + let body_plain = format!( + "Your guardian request for the wallet address {} has been set. \ + Your request ID is #{} is now complete.", + wallet_eth_addr, request_id + ); + + let render_data = serde_json::json!({ + "walletAddress": wallet_eth_addr, + "userEmailAddr": guardian_email_addr, + "requestId": request_id, + }); + let body_html = render_html("acceptance_success.html", render_data).await?; + + let email = EmailMessage { + to: guardian_email_addr, + subject: subject.to_string(), + reference: None, + reply_to: None, + body_plain, + body_html, + body_attachments: None, + }; + + sender.send(email)?; + } + EmailAuthEvent::RecoverySuccess { + wallet_eth_addr, + guardian_email_addr, + request_id, + } => { + let subject = "Recovery Success"; + let body_plain = format!( + "Your recovery request for the wallet address {} is successful. \ + Your request ID is #{}.", + wallet_eth_addr, request_id + ); + + let render_data = serde_json::json!({ + "walletAddress": wallet_eth_addr, + "userEmailAddr": guardian_email_addr, + "requestId": request_id, + }); + let body_html = render_html("recovery_success.html", render_data).await?; + + let email = EmailMessage { + to: guardian_email_addr, + subject: subject.to_string(), + reference: None, + reply_to: None, + body_plain, + body_html, + body_attachments: None, + }; + + sender.send(email)?; + } + EmailAuthEvent::GuardianNotSet { + wallet_eth_addr, + guardian_email_addr, + } => { + let subject = "Guardian Not Set"; + let body_plain = format!("Guardian not set for wallet address {}", wallet_eth_addr); + + let render_data = serde_json::json!({ + "walletAddress": wallet_eth_addr, + "userEmailAddr": guardian_email_addr, + }); + let body_html = render_html("guardian_not_set.html", render_data).await?; + + let email = EmailMessage { + to: guardian_email_addr, + subject: subject.to_string(), + reference: None, + reply_to: None, + body_plain, + body_html, + body_attachments: None, + }; + + sender.send(email)?; + } + EmailAuthEvent::GuardianNotRegistered { + wallet_eth_addr, + guardian_email_addr, + subject, + request_id, + } => { + let subject = format!("{} Code ", subject); + + let body_plain = format!( + "You have received an guardian request from the wallet address {}. \ + Add the guardian's account code in the subject and reply to this email. \ + Your request ID is #{}. \ + If you did not initiate this request, please contact us immediately.", + wallet_eth_addr, request_id + ); + + let render_data = serde_json::json!({ + "userEmailAddr": guardian_email_addr, + "walletAddress": wallet_eth_addr, + "requestId": request_id, + }); + let body_html = render_html("credential_not_present.html", render_data).await?; + + let email = EmailMessage { + to: guardian_email_addr, + subject, + reference: None, + reply_to: None, + body_plain, + body_html, + body_attachments: None, + }; + + sender.send(email)?; + } + } + + Ok(()) +} diff --git a/packages/relayer/src/modules/email_client/mod.rs b/packages/relayer/src/modules/email_client/mod.rs new file mode 100644 index 00000000..578ef15d --- /dev/null +++ b/packages/relayer/src/modules/email_client/mod.rs @@ -0,0 +1,9 @@ +pub mod imap_client; +pub mod mail; +pub mod smtp_client; +pub mod utils; + +pub use imap_client::*; +pub use mail::*; +pub use smtp_client::*; +pub use utils::*; diff --git a/packages/relayer/src/smtp_client.rs b/packages/relayer/src/modules/email_client/smtp_client.rs similarity index 67% rename from packages/relayer/src/smtp_client.rs rename to packages/relayer/src/modules/email_client/smtp_client.rs index 1412d9f2..5d515e29 100644 --- a/packages/relayer/src/smtp_client.rs +++ b/packages/relayer/src/modules/email_client/smtp_client.rs @@ -1,7 +1,5 @@ #![allow(unused_imports)] -use std::path::PathBuf; - use crate::*; use anyhow::anyhow; @@ -20,6 +18,23 @@ use lettre::{ use serde_json::Value; use tokio::fs::read_to_string; +#[derive(Debug, Clone)] +pub struct EmailForwardSender(UnboundedSender); + +impl EmailForwardSender { + pub fn new() -> (Self, UnboundedReceiver) { + let (tx, rx) = tokio::sync::mpsc::unbounded_channel(); + (Self(tx), rx) + } + + pub fn send(&self, email: EmailMessage) -> Result<()> { + match self.0.send(email) { + Ok(_) => Ok(()), + Err(e) => Err(anyhow!(e)), + } + } +} + #[derive(Debug, Clone)] pub struct EmailMessage { pub to: String, @@ -39,19 +54,19 @@ pub struct EmailAttachment { } #[derive(Clone)] -pub(crate) struct SmtpConfig { - pub(crate) domain_name: String, - pub(crate) id: String, - pub(crate) password: String, +pub struct SmtpConfig { + pub domain_name: String, + pub id: String, + pub password: String, } -pub(crate) struct SmtpClient { +pub struct SmtpClient { config: SmtpConfig, transport: AsyncSmtpTransport, } impl SmtpClient { - pub(crate) fn new(config: SmtpConfig) -> Result { + pub fn new(config: SmtpConfig) -> Result { let creds = Credentials::new(config.id.clone(), config.password.clone()); let transport = AsyncSmtpTransport::::relay(&config.domain_name)? .credentials(creds) @@ -60,29 +75,15 @@ impl SmtpClient { Ok(Self { config, transport }) } - pub(crate) async fn send_new_email(&self, email: EmailMessage) -> Result<()> { - self.send_inner( - email.to, - email.subject, - email.reference, - email.reply_to, - email.body_plain, - email.body_html, - email.body_attachments, - ) - .await - } + pub async fn send_new_email(&self, email: EmailMessage) -> Result<()> { + let to = email.to; + let subject = email.subject; + let reference = email.reference; + let reply_to = email.reply_to; + let body_plain = email.body_plain; + let body_html = email.body_html; + let body_attachments = email.body_attachments; - async fn send_inner( - &self, - to: String, - subject: String, - reference: Option, - reply_to: Option, - body_plain: String, - body_html: String, - body_attachments: Option>, - ) -> Result<()> { let from_mbox = Mailbox::new(None, self.config.id.parse::

()?); let to_mbox = Mailbox::new(None, to.parse::
()?); @@ -144,5 +145,29 @@ pub async fn render_html(template_name: &str, render_data: Value) -> Result Result> { + let mut error = error; + if error.contains("Contract call reverted with data: ") { + let revert_data = error + .replace("Contract call reverted with data: ", "") + .split_at(10) + .1 + .to_string(); + let revert_bytes = hex::decode(revert_data) + .unwrap() + .into_iter() + .filter(|&b| b >= 0x20 && b <= 0x7E) + .collect(); + error = String::from_utf8(revert_bytes).unwrap().trim().to_string(); + } + + match error.as_str() { + "Account is already created" => Ok(Some(error)), + "insufficient balance" => Ok(Some("You don't have sufficient balance".to_string())), + _ => Ok(None), + } +} diff --git a/packages/relayer/src/modules/email_client/utils.rs b/packages/relayer/src/modules/email_client/utils.rs new file mode 100644 index 00000000..6efeb6a4 --- /dev/null +++ b/packages/relayer/src/modules/email_client/utils.rs @@ -0,0 +1,24 @@ +pub const DOMAINS_SIGN_REPLY_TO: &[&str] = &["gmail.com", "outlook.com", "yahoo.com", "icloud.com"]; + +pub const DOMAINS_DO_NOT_SIGN_REPLY_TO: &[&str] = &["hotmail.com"]; + +pub fn check_domain_sign_reply_to(email: &str) -> bool { + if let Some(at_pos) = email.find('@') { + let domain = &email[at_pos + 1..]; + if DOMAINS_SIGN_REPLY_TO.contains(&domain) { + return true; + } else if DOMAINS_DO_NOT_SIGN_REPLY_TO.contains(&domain) { + return false; + } + } + false +} + +pub fn split_email_address(email: &str) -> Option<(&str, &str)> { + let parts: Vec<&str> = email.split('@').collect(); + if parts.len() == 2 { + Some((parts[0], parts[1])) + } else { + None + } +} diff --git a/packages/relayer/src/emails_pool.rs b/packages/relayer/src/modules/emails_pool.rs similarity index 88% rename from packages/relayer/src/emails_pool.rs rename to packages/relayer/src/modules/emails_pool.rs index 174a03f5..25037c5b 100644 --- a/packages/relayer/src/emails_pool.rs +++ b/packages/relayer/src/modules/emails_pool.rs @@ -5,7 +5,7 @@ use std::fs; use std::path::PathBuf; #[async_trait] -pub(crate) trait EmailsPool { +pub trait EmailsPool { async fn get_unhandled_emails(&self) -> Result>; async fn get_email_by_hash(&self, email_hash: &str) -> Result; @@ -31,7 +31,7 @@ impl EmailsPool for FileEmailsPool { for path in dir.into_iter() { let path = path?.path(); let email = fs::read_to_string(path)?; - emails.push((calculate_email_hash(&email), email)); + emails.push((calculate_default_hash(&email), email)); } Ok(emails) } @@ -63,7 +63,12 @@ impl EmailsPool for FileEmailsPool { impl FileEmailsPool { #[named] pub fn new() -> Self { - let dir_path = RECEIVED_EMAILS_DIR.get().unwrap().to_string(); + let dir_path = PathBuf::new() + .join(env!("CARGO_MANIFEST_DIR")) + .join("received_emails") + .to_str() + .unwrap() + .to_string(); info!(LOG, "dir_path: {}", dir_path; "func" => function_name!()); fs::create_dir_all(&dir_path).unwrap(); Self { dir_path } diff --git a/packages/relayer/src/modules/mod.rs b/packages/relayer/src/modules/mod.rs new file mode 100644 index 00000000..cdba8905 --- /dev/null +++ b/packages/relayer/src/modules/mod.rs @@ -0,0 +1,9 @@ +pub mod dkim; +pub mod email_client; +pub mod emails_pool; +pub mod web_server; + +pub use dkim::*; +pub use email_client::*; +pub use emails_pool::*; +pub use web_server::*; diff --git a/packages/relayer/src/modules/web_server/mod.rs b/packages/relayer/src/modules/web_server/mod.rs new file mode 100644 index 00000000..7dffbb07 --- /dev/null +++ b/packages/relayer/src/modules/web_server/mod.rs @@ -0,0 +1,5 @@ +pub mod rest_api; +pub mod server; + +pub use rest_api::*; +pub use server::*; diff --git a/packages/relayer/src/modules/web_server/rest_api.rs b/packages/relayer/src/modules/web_server/rest_api.rs new file mode 100644 index 00000000..a2de5d83 --- /dev/null +++ b/packages/relayer/src/modules/web_server/rest_api.rs @@ -0,0 +1,399 @@ +use crate::*; +use anyhow::Result; +use axum::{body::Body, response::Response}; +use hex::decode; +use rand::Rng; +use reqwest::StatusCode; +use serde::{Deserialize, Serialize}; +use std::str; + +#[derive(Serialize, Deserialize)] +pub struct RequestStatusRequest { + pub request_id: u64, +} + +#[derive(Serialize, Deserialize)] +pub enum RequestStatus { + NotExist = 0, + Pending = 1, + Processed = 2, +} + +#[derive(Serialize, Deserialize)] +pub struct RequestStatusResponse { + pub request_id: u64, + pub status: RequestStatus, + pub is_success: bool, + pub email_nullifier: Option, + pub account_salt: Option, +} + +#[derive(Serialize, Deserialize)] +pub struct AcceptanceRequest { + pub wallet_eth_addr: String, + pub guardian_email_addr: String, + pub account_code: String, + pub template_idx: u64, + pub subject: String, +} + +#[derive(Serialize, Deserialize)] +pub struct AcceptanceResponse { + pub request_id: u64, + pub subject_params: Vec, +} + +#[derive(Serialize, Deserialize)] +pub struct RecoveryRequest { + pub wallet_eth_addr: String, + pub guardian_email_addr: String, + pub template_idx: u64, + pub subject: String, +} + +#[derive(Serialize, Deserialize)] +pub struct RecoveryResponse { + pub request_id: u64, + pub subject_params: Vec, +} + +#[derive(Serialize, Deserialize)] +pub struct CompleteRecoveryRequest { + pub wallet_eth_addr: String, +} + +// Create request status API +pub async fn request_status_api(payload: RequestStatusRequest) -> Result { + let row = DB.get_request(payload.request_id).await?; + let status = if let Some(ref row) = row { + if row.is_processed { + RequestStatus::Processed + } else { + RequestStatus::Pending + } + } else { + RequestStatus::NotExist + }; + Ok(RequestStatusResponse { + request_id: payload.request_id, + status, + is_success: row + .as_ref() + .map_or(false, |r| r.is_success.unwrap_or(false)), + email_nullifier: row.clone().and_then(|r| r.email_nullifier), + account_salt: row.clone().and_then(|r| r.account_salt), + }) +} + +pub async fn handle_acceptance_request( + payload: AcceptanceRequest, + db: Arc, + email_sender: EmailForwardSender, + chain_client: Arc, + tx_event_consumer: UnboundedSender, +) -> Response { + if !chain_client + .is_wallet_deployed(&payload.wallet_eth_addr) + .await + { + return Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::from("Wallet not deployed")) + .unwrap(); + } + + let subject_template = chain_client + .get_acceptance_subject_templates(&payload.wallet_eth_addr, payload.template_idx) + .await + .unwrap(); + + let subject_params = extract_template_vals(&payload.subject, subject_template); + + if subject_params.is_err() { + return Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::from("Invalid subject")) + .unwrap(); + } + + if let Ok(Some(creds)) = db.get_credentials(&payload.account_code).await { + return Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::from("Account code already used")) + .unwrap(); + } + + let mut request_id = rand::thread_rng().gen::(); + while let Ok(Some(request)) = db.get_request(request_id).await { + request_id = rand::thread_rng().gen::(); + } + + if db + .is_guardian_set(&payload.wallet_eth_addr, &payload.guardian_email_addr) + .await + { + db.insert_request(&Request { + request_id: request_id.clone(), + wallet_eth_addr: payload.wallet_eth_addr.clone(), + guardian_email_addr: payload.guardian_email_addr.clone(), + is_for_recovery: false, + template_idx: payload.template_idx, + is_processed: false, + is_success: None, + email_nullifier: None, + account_salt: None, + }) + .await + .expect("Failed to insert request"); + + tx_event_consumer + .send(EmailAuthEvent::GuardianAlreadyExists { + wallet_eth_addr: payload.wallet_eth_addr.clone(), + guardian_email_addr: payload.guardian_email_addr.clone(), + }) + .expect("Failed to send GuardianAlreadyExists event"); + } else { + db.insert_credentials(&Credentials { + account_code: payload.account_code.clone(), + wallet_eth_addr: payload.wallet_eth_addr.clone(), + guardian_email_addr: payload.guardian_email_addr.clone(), + is_set: false, + }) + .await + .expect("Failed to insert credentials"); + + db.insert_request(&Request { + request_id: request_id.clone(), + wallet_eth_addr: payload.wallet_eth_addr.clone(), + guardian_email_addr: payload.guardian_email_addr.clone(), + is_for_recovery: false, + template_idx: payload.template_idx, + is_processed: false, + is_success: None, + email_nullifier: None, + account_salt: None, + }) + .await + .expect("Failed to insert request"); + + tx_event_consumer + .send(EmailAuthEvent::AcceptanceRequest { + wallet_eth_addr: payload.wallet_eth_addr.clone(), + guardian_email_addr: payload.guardian_email_addr.clone(), + request_id, + subject: payload.subject.clone(), + account_code: payload.account_code.clone(), + }) + .expect("Failed to send Acceptance event"); + } + + Response::builder() + .status(StatusCode::OK) + .body(Body::from( + serde_json::to_string(&AcceptanceResponse { + request_id, + subject_params: subject_params.unwrap(), + }) + .unwrap(), + )) + .unwrap() +} + +pub async fn handle_recovery_request( + payload: RecoveryRequest, + db: Arc, + email_sender: EmailForwardSender, + chain_client: Arc, + tx_event_consumer: UnboundedSender, +) -> Response { + if !chain_client + .is_wallet_deployed(&payload.wallet_eth_addr) + .await + { + return Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::from("Wallet not deployed")) + .unwrap(); + } + + let subject_template = chain_client + .get_recovery_subject_templates(&payload.wallet_eth_addr, payload.template_idx) + .await + .unwrap(); + + let subject_params = extract_template_vals(&payload.subject, subject_template); + + if subject_params.is_err() { + return Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::from("Invalid subject")) + .unwrap(); + } + + let mut request_id = rand::thread_rng().gen::(); + while let Ok(Some(request)) = db.get_request(request_id).await { + request_id = rand::thread_rng().gen::(); + } + + if !db.is_email_registered(&payload.guardian_email_addr).await { + db.insert_request(&Request { + request_id: request_id.clone(), + wallet_eth_addr: payload.wallet_eth_addr.clone(), + guardian_email_addr: payload.guardian_email_addr.clone(), + is_for_recovery: true, + template_idx: payload.template_idx, + is_processed: false, + is_success: None, + email_nullifier: None, + account_salt: None, + }) + .await + .expect("Failed to insert request"); + + tx_event_consumer + .send(EmailAuthEvent::GuardianNotRegistered { + wallet_eth_addr: payload.wallet_eth_addr.clone(), + guardian_email_addr: payload.guardian_email_addr.clone(), + subject: payload.subject.clone(), + request_id, + }) + .expect("Failed to send GuardianNotRegistered event"); + + return Response::builder() + .status(StatusCode::OK) + .body(Body::from( + serde_json::to_string(&RecoveryResponse { + request_id, + subject_params: subject_params.unwrap(), + }) + .unwrap(), + )) + .unwrap(); + } + + if db + .is_guardian_set(&payload.wallet_eth_addr, &payload.guardian_email_addr) + .await + { + db.insert_request(&Request { + request_id: request_id.clone(), + wallet_eth_addr: payload.wallet_eth_addr.clone(), + guardian_email_addr: payload.guardian_email_addr.clone(), + is_for_recovery: true, + template_idx: payload.template_idx, + is_processed: false, + is_success: None, + email_nullifier: None, + account_salt: None, + }) + .await + .expect("Failed to insert request"); + + tx_event_consumer + .send(EmailAuthEvent::RecoveryRequest { + wallet_eth_addr: payload.wallet_eth_addr.clone(), + guardian_email_addr: payload.guardian_email_addr.clone(), + request_id, + subject: payload.subject.clone(), + }) + .expect("Failed to send Recovery event"); + } else { + db.insert_request(&Request { + request_id: request_id.clone(), + wallet_eth_addr: payload.wallet_eth_addr.clone(), + guardian_email_addr: payload.guardian_email_addr.clone(), + is_for_recovery: true, + template_idx: payload.template_idx, + is_processed: false, + is_success: None, + email_nullifier: None, + account_salt: None, + }) + .await + .expect("Failed to insert request"); + + tx_event_consumer + .send(EmailAuthEvent::RecoveryRequest { + wallet_eth_addr: payload.wallet_eth_addr.clone(), + guardian_email_addr: payload.guardian_email_addr.clone(), + request_id, + subject: payload.subject.clone(), + }) + .expect("Failed to send Recovery event"); + } + + Response::builder() + .status(StatusCode::OK) + .body(Body::from( + serde_json::to_string(&RecoveryResponse { + request_id, + subject_params: subject_params.unwrap(), + }) + .unwrap(), + )) + .unwrap() +} + +pub async fn handle_complete_recovery_request( + payload: CompleteRecoveryRequest, + db: Arc, + chain_client: Arc, +) -> Response { + if !chain_client + .is_wallet_deployed(&payload.wallet_eth_addr) + .await + { + return Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::from("Wallet not deployed")) + .unwrap(); + } + + match chain_client + .complete_recovery(&payload.wallet_eth_addr) + .await + { + Ok(true) => Response::builder() + .status(StatusCode::OK) + .body(Body::from("Recovery completed")) + .unwrap(), + Ok(false) => Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::from("Recovery failed")) + .unwrap(), + Err(e) => { + // Parse the error message if it follows the known format + let error_message = if e + .to_string() + .starts_with("Contract call reverted with data:") + { + parse_error_message(e.to_string()) + } else { + "Internal server error".to_string() + }; + // Remove all non printable characters + let error_message = error_message + .chars() + .filter(|c| c.is_ascii()) + .collect::(); + Response::builder() + .status(StatusCode::INTERNAL_SERVER_ERROR) + .body(Body::from(error_message)) + .unwrap() + } + } +} + +fn parse_error_message(error_data: String) -> String { + // Attempt to extract and decode the error message + if let Some(hex_error) = error_data.split(" ").last() { + if hex_error.len() > 138 { + // Check if the length is sufficient for a message + let error_bytes = decode(&hex_error[138..]).unwrap_or_else(|_| vec![]); + if let Ok(message) = str::from_utf8(&error_bytes) { + return message.to_string(); + } + } + } + "Failed to parse contract error".to_string() +} diff --git a/packages/relayer/src/modules/web_server/server.rs b/packages/relayer/src/modules/web_server/server.rs new file mode 100644 index 00000000..8cd6ceb1 --- /dev/null +++ b/packages/relayer/src/modules/web_server/server.rs @@ -0,0 +1,171 @@ +use crate::*; +use axum::Router; +use tower_http::cors::{AllowHeaders, AllowMethods, Any, CorsLayer}; + +#[named] +pub async fn run_server( + addr: &str, + db: Arc, + chain_client: Arc, + email_sender: EmailForwardSender, + tx_event_consumer: UnboundedSender, +) -> Result<()> { + let db_acceptance = Arc::clone(&db); + let db_recovery = Arc::clone(&db); + let db_complete_recovery = Arc::clone(&db); + let chain_client_acceptance = Arc::clone(&chain_client); + let chain_client_recovery = Arc::clone(&chain_client); + let chain_client_complete_recovery = Arc::clone(&chain_client); + let email_sender_acceptance = email_sender.clone(); + let email_sender_recovery = email_sender.clone(); + let tx_event_consumer_acceptance = tx_event_consumer.clone(); + let tx_event_consumer_recovery = tx_event_consumer.clone(); + + let mut app = Router::new() + .route( + "/api/echo", + axum::routing::get(move || async move { "Hello, world!" }), + ) + .route( + "/api/requestStatus", + axum::routing::get(move |payload: String| async move { + let payload: Result = + serde_json::from_str(&payload).map_err(|e| anyhow::Error::from(e)); + match payload { + Ok(payload) => { + let response = request_status_api(payload).await; + match response { + Ok(response) => { + let body = serde_json::to_string(&response) + .map_err(|e| axum::http::StatusCode::INTERNAL_SERVER_ERROR) + .unwrap(); + Ok::<_, axum::response::Response>( + axum::http::Response::builder() + .status(axum::http::StatusCode::OK) + .body(axum::body::Body::from(body)) + .unwrap(), + ) + } + Err(e) => { + let error_message = serde_json::to_string(&e.to_string()) + .map_err(|_| axum::http::StatusCode::INTERNAL_SERVER_ERROR) + .unwrap(); + Ok(axum::http::Response::builder() + .status(axum::http::StatusCode::INTERNAL_SERVER_ERROR) + .body(serde_json::to_string(&e.to_string()).unwrap().into()) + .unwrap()) + } + } + } + Err(e) => { + let error_message = serde_json::to_string(&e.to_string()) + .map_err(|_| axum::http::StatusCode::INTERNAL_SERVER_ERROR) + .unwrap(); + Ok(axum::http::Response::builder() + .status(axum::http::StatusCode::INTERNAL_SERVER_ERROR) + .body(serde_json::to_string(&e.to_string()).unwrap().into()) + .unwrap()) + } + } + }), + ) + .route( + "/api/acceptanceRequest", + axum::routing::post(move |payload: String| async move { + let payload: Result = + serde_json::from_str(&payload).map_err(|e| anyhow::Error::from(e)); + match payload { + Ok(payload) => { + let acceptance_response = handle_acceptance_request( + payload, + db_acceptance, + email_sender_acceptance, + chain_client_acceptance, + tx_event_consumer_acceptance, + ) + .await; + Ok::<_, axum::response::Response>(acceptance_response) + } + Err(e) => { + let error_message = serde_json::to_string(&e.to_string()) + .map_err(|_| axum::http::StatusCode::INTERNAL_SERVER_ERROR) + .unwrap(); + Ok(axum::http::Response::builder() + .status(axum::http::StatusCode::INTERNAL_SERVER_ERROR) + .body(serde_json::to_string(&e.to_string()).unwrap().into()) + .unwrap()) + } + } + }), + ) + .route( + "/api/recoveryRequest", + axum::routing::post(move |payload: String| async move { + let payload: Result = + serde_json::from_str(&payload).map_err(|e| anyhow::Error::from(e)); + match payload { + Ok(payload) => { + let recovery_response = handle_recovery_request( + payload, + db_recovery, + email_sender_recovery, + chain_client_recovery, + tx_event_consumer_recovery, + ) + .await; + Ok::<_, axum::response::Response>(recovery_response) + } + Err(e) => { + let error_message = serde_json::to_string(&e.to_string()) + .map_err(|_| axum::http::StatusCode::INTERNAL_SERVER_ERROR) + .unwrap(); + Ok(axum::http::Response::builder() + .status(axum::http::StatusCode::INTERNAL_SERVER_ERROR) + .body(serde_json::to_string(&e.to_string()).unwrap().into()) + .unwrap()) + } + } + }), + ) + .route( + "/api/completeRecovery", + axum::routing::post(move |payload: String| async move { + let payload: Result = + serde_json::from_str(&payload).map_err(|e| anyhow::Error::from(e)); + match payload { + Ok(payload) => { + let recovery_response = handle_complete_recovery_request( + payload, + db_complete_recovery, + chain_client_complete_recovery, + ) + .await; + Ok::<_, axum::response::Response>(recovery_response) + } + Err(e) => { + let error_message = serde_json::to_string(&e.to_string()) + .map_err(|_| axum::http::StatusCode::INTERNAL_SERVER_ERROR) + .unwrap(); + Ok(axum::http::Response::builder() + .status(axum::http::StatusCode::INTERNAL_SERVER_ERROR) + .body(serde_json::to_string(&e.to_string()).unwrap().into()) + .unwrap()) + } + } + }), + ); + + app = app.layer( + CorsLayer::new() + .allow_methods(AllowMethods::any()) + .allow_headers(AllowHeaders::any()) + .allow_origin(Any), + ); + + trace!(LOG, "Listening API at {}", addr; "func" => function_name!()); + axum::Server::bind(&addr.parse()?) + .serve(app.into_make_service()) + .await?; + + Ok(()) +} diff --git a/packages/relayer/src/regex_json/request_def.json b/packages/relayer/src/regex_json/request_def.json new file mode 100644 index 00000000..a80ca582 --- /dev/null +++ b/packages/relayer/src/regex_json/request_def.json @@ -0,0 +1,16 @@ +{ + "parts": [ + { + "is_public": false, + "regex_def": "Your request ID is #" + }, + { + "is_public": true, + "regex_def": "[0-9]+" + }, + { + "is_public": false, + "regex_def": "." + } + ] +} diff --git a/packages/relayer/src/selector_def.json b/packages/relayer/src/regex_json/selector_def.json similarity index 100% rename from packages/relayer/src/selector_def.json rename to packages/relayer/src/regex_json/selector_def.json diff --git a/packages/relayer/src/utils.rs b/packages/relayer/src/utils.rs deleted file mode 100644 index baeb340d..00000000 --- a/packages/relayer/src/utils.rs +++ /dev/null @@ -1,193 +0,0 @@ -#![allow(clippy::upper_case_acronyms)] -#![allow(clippy::identity_op)] - -use crate::*; -use chrono::{DateTime, Local}; -use ethers::abi::{self, Token}; -use ethers::types::{Bytes, U256}; -use serde::Deserialize; -use std::hash::{Hash,Hasher}; - -use std::collections::hash_map::DefaultHasher; -use std::path::{Path, PathBuf}; - -use tokio::{ - fs::{read_to_string, remove_file, File}, - io::AsyncWriteExt, -}; - -use lazy_static::lazy_static; -use std::sync::Arc; -use tokio::sync::Mutex; - -lazy_static! { - pub static ref SHARED_MUTEX: Arc> = Arc::new(Mutex::new(0)); -} - -// Error strings -pub const WRONG_AUTH_METHOD: &str = "Not supported auth type"; -pub const IMAP_RECONNECT_ERROR: &str = "Failed to reconnect"; -pub const SMTP_RECONNECT_ERROR: &str = "Failed to reconnect"; -pub const CANNOT_GET_EMAIL_FROM_QUEUE: &str = "Cannot get email from mpsc in handle email task"; -pub const NOT_MY_SENDER: &str = "NOT_MY_SENDER"; -pub const WRONG_SUBJECT_FORMAT: &str = "Wrong subject format"; -pub const INSUFFICIENT_BALANCE: &str = "Insufficient balance"; - -// Core REGEX'es -// pub(crate) const AMOUNT_REGEX: &str = "[0-9]+(\\.[0-9]+)?"; -// pub(crate) const TOKEN_NAME_REGEX: &str = "[A-Z]+"; -// pub(crate) const STRING_RGEX: &str = ".+"; -// pub(crate) const UINT_REGEX: &str = "[0-9]+"; -// pub(crate) const INT_REGEX: &str = "-?[0-9]+"; -// pub(crate) const ETH_ADDR_REGEX: &str = "0x[0-9a-fA-F]{40}"; -// pub(crate) const EMAIL_ADDR_REGEX: &str = -// "[a-zA-Z0-9!#$%&'\\*\\+-/=\\?^_`{\\|}~\\.]+@[a-zA-Z0-9]+\\.[a-zA-Z0-9\\.-]+"; - -pub(crate) const DOMAIN_FIELDS: usize = 9; -pub(crate) const SUBJECT_FIELDS: usize = 17; -pub(crate) const EMAIL_ADDR_FIELDS: usize = 9; - -#[derive(Debug, Clone, Deserialize)] -pub struct ProverRes { - proof: ProofJson, - pub_signals: Vec, -} - -#[derive(Debug, Clone, Deserialize)] -pub struct ProofJson { - pi_a: Vec, - pi_b: Vec>, - pi_c: Vec, -} - -impl ProofJson { - pub fn to_eth_bytes(&self) -> Result { - let pi_a = Token::FixedArray(vec![ - Token::Uint(U256::from_dec_str(self.pi_a[0].as_str())?), - Token::Uint(U256::from_dec_str(self.pi_a[1].as_str())?), - ]); - let pi_b = Token::FixedArray(vec![ - Token::FixedArray(vec![ - Token::Uint(U256::from_dec_str(self.pi_b[0][1].as_str())?), - Token::Uint(U256::from_dec_str(self.pi_b[0][0].as_str())?), - ]), - Token::FixedArray(vec![ - Token::Uint(U256::from_dec_str(self.pi_b[1][1].as_str())?), - Token::Uint(U256::from_dec_str(self.pi_b[1][0].as_str())?), - ]), - ]); - let pi_c = Token::FixedArray(vec![ - Token::Uint(U256::from_dec_str(self.pi_c[0].as_str())?), - Token::Uint(U256::from_dec_str(self.pi_c[1].as_str())?), - ]); - Ok(Bytes::from(abi::encode(&[pi_a, pi_b, pi_c]))) - } -} - -pub(crate) async fn generate_email_auth_input( - circuits_dir_path: &Path, - email: &str, - account_code: &str, -) -> Result { - let email_hash = calculate_email_hash(email); - let email_file_name = PathBuf::new() - .join(INPUT_FILES_DIR.get().unwrap()) - .join(email_hash.to_string() + ".email"); - let input_file_name = PathBuf::new() - .join(INPUT_FILES_DIR.get().unwrap()) - .join(email_hash.to_string() + ".json"); - - let mut email_file = File::create(&email_file_name).await?; - email_file.write_all(email.as_bytes()).await?; - - let command_str = format!( - "--cwd {} gen-input --email-file {} --account-code {} --input-file {}", - circuits_dir_path.to_str().unwrap(), - email_file_name.to_str().unwrap(), - account_code, - input_file_name.to_str().unwrap() - ); - - let mut proc = tokio::process::Command::new("yarn") - .args(command_str.split_whitespace()) - .spawn()?; - - let status = proc.wait().await?; - assert!(status.success()); - - let result = read_to_string(&input_file_name).await?; - - remove_file(email_file_name).await?; - remove_file(input_file_name).await?; - - Ok(result) -} - -#[named] -pub(crate) async fn generate_proof( - input: &str, - request: &str, - address: &str, -) -> Result<(Bytes, Vec)> { - let client = reqwest::Client::new(); - info!(LOG, "prover input {}", input; "func" => function_name!()); - let res = client - .post(format!("{}/prove/{}", address, request)) - .json(&serde_json::json!({ "input": input })) - .send() - .await? - .error_for_status()?; - let res_json = res.json::().await?; - info!(LOG, "prover response {:?}", res_json; "func" => function_name!()); - let proof = res_json.proof.to_eth_bytes()?; - let pub_signals = res_json - .pub_signals - .into_iter() - .map(|str| U256::from_dec_str(&str).expect("pub signal should be u256")) - .collect(); - Ok((proof, pub_signals)) -} - -pub(crate) fn u256_to_bytes32(x: &U256) -> [u8; 32] { - let mut bytes = [0u8; 32]; - x.to_big_endian(&mut bytes); - bytes -} - -pub(crate) fn u256_to_hex(x: &U256) -> String { - "0x".to_string() + &hex::encode(u256_to_bytes32(x)) -} - -pub(crate) fn hex_to_u256(hex: &str) -> Result { - let bytes: Vec = hex::decode(&hex[2..])?; - let mut array = [0u8; 32]; - array.copy_from_slice(&bytes); - Ok(U256::from_big_endian(&array)) -} - -pub(crate) fn fr_to_bytes32(fr: &Fr) -> Result<[u8; 32]> { - let hex = field2hex(fr); - let bytes = hex::decode(&hex[2..])?; - let mut result = [0u8; 32]; - result.copy_from_slice(&bytes); - Ok(result) -} - -pub(crate) fn bytes32_to_fr(bytes32: &[u8; 32]) -> Result { - let hex: String = "0x".to_string() + &hex::encode(bytes32); - let field = hex2field(&hex)?; - Ok(field) -} - -pub(crate) fn now() -> i64 { - let dt: DateTime = Local::now(); - dt.timestamp() -} - -pub(crate) fn calculate_email_hash(input: &str) -> String { - let mut hasher = DefaultHasher::new(); - input.hash(&mut hasher); - let hash_code = hasher.finish(); - - hash_code.to_string() -} diff --git a/packages/relayer/src/logger.rs b/packages/relayer/src/utils/logger.rs similarity index 86% rename from packages/relayer/src/logger.rs rename to packages/relayer/src/utils/logger.rs index b13b4bed..1d3cb057 100644 --- a/packages/relayer/src/logger.rs +++ b/packages/relayer/src/utils/logger.rs @@ -10,6 +10,8 @@ use slog_json; use slog_term; use std::env; +use crate::strings::JSON_LOGGER_KEY; + lazy_static! { pub static ref LOG: slog::Logger = init_logger(); } @@ -28,7 +30,7 @@ fn init_logger() -> slog::Logger { let log_file_drain = slog_json::Json::default(file_rotate).fuse(); // Check if LOGGER env var is set and true or True or TRUE, if not, set false - let terminal_json_output = match env::var("JSON_LOGGER") { + let terminal_json_output = match env::var(JSON_LOGGER_KEY) { Ok(val) => val.eq_ignore_ascii_case("true"), Err(_) => false, }; @@ -48,6 +50,8 @@ fn init_logger() -> slog::Logger { } let log_drain = slog_async::Async::new(slog::Duplicate(log_terminal_drain, log_file_drain).fuse()) + .chan_size(10_000) // Increase the channel size + .overflow_strategy(slog_async::OverflowStrategy::Block) // Change overflow strategy to block .build() .fuse(); slog::Logger::root(log_drain, o!("version" => env!("CARGO_PKG_VERSION"))) diff --git a/packages/relayer/src/utils/mod.rs b/packages/relayer/src/utils/mod.rs new file mode 100644 index 00000000..661a213c --- /dev/null +++ b/packages/relayer/src/utils/mod.rs @@ -0,0 +1,9 @@ +pub mod logger; +pub mod strings; +pub mod subject_templates; +pub mod utils; + +pub use logger::*; +pub use strings::*; +pub use subject_templates::*; +pub use utils::*; diff --git a/packages/relayer/src/utils/strings.rs b/packages/relayer/src/utils/strings.rs new file mode 100644 index 00000000..041744f7 --- /dev/null +++ b/packages/relayer/src/utils/strings.rs @@ -0,0 +1,45 @@ +// Config strings +pub const IMAP_DOMAIN_NAME_KEY: &str = "IMAP_DOMAIN_NAME"; +pub const IMAP_PORT_KEY: &str = "IMAP_PORT"; +pub const IMAP_AUTH_TYPE_KEY: &str = "AUTH_TYPE"; +pub const IMAP_CLIENT_ID_KEY: &str = "IMAP_CLIENT_ID"; +pub const IMAP_CLIENT_SECRET_KEY: &str = "IMAP_CLIENT_SECRET"; +pub const IMAP_AUTH_URL_KEY: &str = "IMAP_AUTH_URL"; +pub const IMAP_TOKEN_URL_KEY: &str = "IMAP_TOKEN_URL"; +pub const IMAP_REDIRECT_URL_KEY: &str = "http://127.0.0.1:8000/"; +pub const SMTP_DOMAIN_NAME_KEY: &str = "SMTP_DOMAIN_NAME"; +pub const LOGIN_ID_KEY: &str = "LOGIN_ID"; +pub const LOGIN_PASSWORD_KEY: &str = "LOGIN_PASSWORD"; +pub const DATABASE_PATH_KEY: &str = "DATABASE_URL"; +pub const WEB_SERVER_ADDRESS_KEY: &str = "WEB_SERVER_ADDRESS"; +pub const CIRCUITS_DIR_PATH_KEY: &str = "CIRCUITS_DIR_PATH"; +pub const PROVER_ADDRESS_KEY: &str = "PROVER_ADDRESS"; +pub const CHAIN_RPC_PROVIDER_KEY: &str = "CHAIN_RPC_PROVIDER"; +pub const CHAIN_RPC_EXPLORER_KEY: &str = "CHAIN_RPC_EXPLORER"; +pub const PRIVATE_KEY_KEY: &str = "PRIVATE_KEY"; +pub const CHAIN_ID_KEY: &str = "CHAIN_ID"; +pub const EMAIL_ACCOUNT_RECOVERY_VERSION_ID_KEY: &str = "EMAIL_ACCOUNT_RECOVERY_VERSION_ID"; +pub const EMAIL_TEMPLATES_PATH_KEY: &str = "EMAIL_TEMPLATES_PATH"; + +// Log strings +pub const JSON_LOGGER_KEY: &str = "JSON_LOGGER"; + +// Error strings +pub const WRONG_AUTH_METHOD: &str = "Not supported auth type"; +pub const IMAP_RECONNECT_ERROR: &str = "Failed to reconnect"; +pub const SMTP_RECONNECT_ERROR: &str = "Failed to reconnect"; +pub const CANNOT_GET_EMAIL_FROM_QUEUE: &str = "Cannot get email from mpsc in handle email task"; +pub const NOT_MY_SENDER: &str = "NOT_MY_SENDER"; +pub const WRONG_SUBJECT_FORMAT: &str = "Wrong subject format"; + +// Core REGEX'es and Commands +pub const STRING_REGEX: &str = r"\S+"; +pub const UINT_REGEX: &str = r"\d+"; +pub const INT_REGEX: &str = r"-?\d+"; +pub const ETH_ADDR_REGEX: &str = r"0x[a-fA-F0-9]{40}"; +pub const DECIMALS_REGEX: &str = r"\d+\.\d+"; + +// DKIM ORACLE ARGS +pub const CANISTER_ID_KEY: &str = "CANISTER_ID"; +pub const PEM_PATH_KEY: &str = "PEM_PATH"; +pub const IC_REPLICA_URL_KEY: &str = "IC_REPLICA_URL"; diff --git a/packages/relayer/src/subject_templates.rs b/packages/relayer/src/utils/subject_templates.rs similarity index 78% rename from packages/relayer/src/subject_templates.rs rename to packages/relayer/src/utils/subject_templates.rs index 52ea66b1..621bb408 100644 --- a/packages/relayer/src/subject_templates.rs +++ b/packages/relayer/src/utils/subject_templates.rs @@ -5,8 +5,9 @@ use crate::*; use ethers::abi::{self, Token}; use ethers::types::{Address, Bytes, I256, U256}; use regex::Regex; +use serde::{Deserialize, Serialize}; -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub enum TemplateValue { String(String), Uint(U256), @@ -16,16 +17,7 @@ pub enum TemplateValue { Fixed(String), } -pub(crate) const STRING_RGEX: &str = ".+"; -pub(crate) const UINT_REGEX: &str = "[0-9]+"; -pub(crate) const INT_REGEX: &str = "-?[0-9]+"; -pub(crate) const DECIMALS_REGEX: &str = "[0-9]+(\\.[0-9]+)?"; -pub(crate) const ETH_ADDR_REGEX: &str = "0x[0-9a-fA-F]{40}"; -// pub(crate) const EMAIL_ADDR_REGEX: &str = -// "[a-zA-Z0-9!#$%&'\\*\\+-/=\\?^_`{\\|}~\\.]+@[a-zA-Z0-9]+\\.[a-zA-Z0-9\\.-]+"; - impl TemplateValue { - #[named] pub fn abi_encode(&self, decimal_size: Option) -> Result { match self { Self::String(string) => Ok(Bytes::from(abi::encode(&[Token::String(string.clone())]))), @@ -57,32 +49,56 @@ impl TemplateValue { } } -pub fn extract_template_vals_and_idx( +pub fn extract_template_vals_and_skipped_subject_idx( input: &str, - templates_array: Vec>, -) -> Result<(Option, Vec)> { - for (idx, templates) in templates_array.into_iter().enumerate() { - let template_vals = extract_template_vals(input, templates); - match template_vals { - Ok(vals) => { - return Ok((Some(idx), vals)); - } - Err(_) => { - continue; - } + templates: Vec, +) -> Result<(Vec, usize), anyhow::Error> { + // Convert the template to a regex pattern, escaping necessary characters and replacing placeholders + let pattern = templates + .iter() + .map(|template| match template.as_str() { + "{string}" => STRING_REGEX.to_string(), + "{uint}" => UINT_REGEX.to_string(), + "{int}" => INT_REGEX.to_string(), + "{decimals}" => DECIMALS_REGEX.to_string(), + "{ethAddr}" => ETH_ADDR_REGEX.to_string(), + _ => regex::escape(template), + }) + .collect::>() + .join("\\s+"); + + let regex = Regex::new(&pattern).map_err(|e| anyhow!("Regex compilation failed: {}", e))?; + + // Attempt to find the pattern in the input + if let Some(matched) = regex.find(input) { + // Calculate the number of bytes to skip before the match + let skipped_bytes = matched.start(); + + // Extract the values based on the matched pattern + let current_input = &input[skipped_bytes..]; + match extract_template_vals(current_input, templates) { + Ok(vals) => Ok((vals, skipped_bytes)), + Err(e) => Err(e), } + } else { + // If there's no match, return an error indicating no match was found + Err(anyhow!("Unable to match templates with input")) } - Ok((None, Vec::new())) } pub fn extract_template_vals(input: &str, templates: Vec) -> Result> { - let input_decomposed: Vec<&str> = input.split(' ').collect(); + let input_decomposed: Vec<&str> = input.split_whitespace().collect(); let mut template_vals = Vec::new(); let mut input_idx = 0; + for template in templates.iter() { + if input_idx >= input_decomposed.len() { + break; // Prevents index out of bounds if input is shorter than template + } + match template.as_str() { "{string}" => { - let string_match = Regex::new(STRING_RGEX) + let string_match = Regex::new(STRING_REGEX) .unwrap() .find(input_decomposed[input_idx]) .ok_or(anyhow!("No string found"))?; @@ -93,7 +109,6 @@ pub fn extract_template_vals(input: &str, templates: Vec) -> Result { let uint_match = Regex::new(UINT_REGEX) @@ -106,7 +121,6 @@ pub fn extract_template_vals(input: &str, templates: Vec) -> Result { let int_match = Regex::new(INT_REGEX) @@ -116,24 +130,21 @@ pub fn extract_template_vals(input: &str, templates: Vec) -> Result { let decimals_match = Regex::new(DECIMALS_REGEX) .unwrap() .find(input_decomposed[input_idx]) - .ok_or(anyhow!("No amount found"))?; + .ok_or(anyhow!("No decimals found"))?; if decimals_match.start() != 0 || decimals_match.end() != input_decomposed[input_idx].len() { - return Err(anyhow!("Amount must be the whole word")); + return Err(anyhow!("Decimals must be the whole word")); } let decimals = decimals_match.as_str().to_string(); template_vals.push(TemplateValue::Decimals(decimals)); - input_idx += 1; } "{ethAddr}" => { let address_match = Regex::new(ETH_ADDR_REGEX) @@ -147,16 +158,13 @@ pub fn extract_template_vals(input: &str, templates: Vec) -> Result().unwrap(); template_vals.push(TemplateValue::EthAddr(address)); - input_idx += 1; - } - _ => { - input_idx += 1; } + _ => {} // Skip unknown placeholders } + + input_idx += 1; // Move to the next piece of input } - if input_idx != input_decomposed.len() { - return Err(anyhow!("Input is not fully consumed")); - } + Ok(template_vals) } diff --git a/packages/relayer/src/utils/utils.rs b/packages/relayer/src/utils/utils.rs new file mode 100644 index 00000000..efacb698 --- /dev/null +++ b/packages/relayer/src/utils/utils.rs @@ -0,0 +1,85 @@ +#![allow(clippy::upper_case_acronyms)] +#![allow(clippy::identity_op)] + +use crate::*; +use ethers::abi::Token; +use ethers::types::{Bytes, U256}; + +use ::serde::Deserialize; + +use std::collections::hash_map::DefaultHasher; +use std::hash::{Hash, Hasher}; + +const DOMAIN_FIELDS: usize = 9; +const SUBJECT_FIELDS: usize = 17; +const EMAIL_ADDR_FIELDS: usize = 9; + +#[derive(Debug, Clone, Deserialize)] +pub struct ProverRes { + proof: ProofJson, + pub_signals: Vec, +} + +#[derive(Debug, Clone, Deserialize)] +pub struct ProofJson { + pi_a: Vec, + pi_b: Vec>, + pi_c: Vec, +} + +impl ProofJson { + pub fn to_eth_bytes(&self) -> Result { + let pi_a = Token::FixedArray(vec![ + Token::Uint(U256::from_dec_str(self.pi_a[0].as_str())?), + Token::Uint(U256::from_dec_str(self.pi_a[1].as_str())?), + ]); + let pi_b = Token::FixedArray(vec![ + Token::FixedArray(vec![ + Token::Uint(U256::from_dec_str(self.pi_b[0][1].as_str())?), + Token::Uint(U256::from_dec_str(self.pi_b[0][0].as_str())?), + ]), + Token::FixedArray(vec![ + Token::Uint(U256::from_dec_str(self.pi_b[1][1].as_str())?), + Token::Uint(U256::from_dec_str(self.pi_b[1][0].as_str())?), + ]), + ]); + let pi_c = Token::FixedArray(vec![ + Token::Uint(U256::from_dec_str(self.pi_c[0].as_str())?), + Token::Uint(U256::from_dec_str(self.pi_c[1].as_str())?), + ]); + Ok(Bytes::from(abi::encode(&[pi_a, pi_b, pi_c]))) + } +} + +#[named] +pub async fn generate_proof( + input: &str, + request: &str, + address: &str, +) -> Result<(Bytes, Vec)> { + let client = reqwest::Client::new(); + info!(LOG, "prover input {}", input; "func" => function_name!()); + let res = client + .post(format!("{}/prove/{}", address, request)) + .json(&serde_json::json!({ "input": input })) + .send() + .await? + .error_for_status()?; + let res_json = res.json::().await?; + info!(LOG, "prover response {:?}", res_json; "func" => function_name!()); + let proof = res_json.proof.to_eth_bytes()?; + let pub_signals = res_json + .pub_signals + .into_iter() + .map(|str| U256::from_dec_str(&str).expect("pub signal should be u256")) + .collect(); + Ok((proof, pub_signals)) +} + +pub fn calculate_default_hash(input: &str) -> String { + let mut hasher = DefaultHasher::new(); + input.hash(&mut hasher); + let hash_code = hasher.finish(); + + hash_code.to_string() +} diff --git a/packages/relayer/src/web_server.rs b/packages/relayer/src/web_server.rs deleted file mode 100644 index d13040b1..00000000 --- a/packages/relayer/src/web_server.rs +++ /dev/null @@ -1,190 +0,0 @@ -use crate::*; - -use std::sync::atomic::Ordering; - -use axum::{routing::MethodRouter, Router}; -use serde::{Deserialize, Serialize}; -use tokio::sync::mpsc::UnboundedSender; -use tower_http::cors::{AllowHeaders, AllowMethods, Any, CorsLayer}; - -#[derive(Serialize, Deserialize)] -pub struct EmailAddrCommitRequest { - pub email_address: String, - pub random: String, -} - -#[derive(Serialize, Deserialize)] -pub struct UnclaimRequest { - pub email_address: String, - pub random: String, - pub expiry_time: i64, - pub is_fund: bool, - pub tx_hash: String, -} - -#[derive(Serialize, Deserialize)] -pub struct AccountRegistrationRequest { - pub email_address: String, - pub account_key: String, -} - -#[derive(Serialize, Deserialize)] -pub struct AccountRegistrationResponse { - pub account_key: String, - pub wallet_addr: String, - pub tx_hash: String, -} - -#[derive(Serialize, Deserialize)] -pub struct StatResponse { - pub onboarding_tokens_distributed: u32, - pub onboarding_tokens_left: u32, -} - -#[named] -async fn unclaim( - payload: UnclaimRequest, - db: Arc, - chain_client: Arc, - tx_claimer: UnboundedSender, -) -> Result { - let padded_email_addr = PaddedEmailAddr::from_email_addr(&payload.email_address); - info!( - LOG, - "padded email address fields: {:?}", - padded_email_addr.to_email_addr_fields(); "func" => function_name!() - ); - let commit = padded_email_addr.to_commitment(&hex2field(&payload.random)?)?; - info!(LOG, "commit {:?}", commit; "func" => function_name!()); - let id = chain_client - .get_unclaim_id_from_tx_hash(&payload.tx_hash, payload.is_fund) - .await?; - info!(LOG, "id {:?}", id; "func" => function_name!()); - // let psi_client = PSIClient::new( - // Arc::clone(&chain_client), - // payload.email_address.clone(), - // id, - // payload.is_fund, - // ) - // .await?; - // psi_client - // .check_and_reveal(db.clone(), chain_client.clone(), &payload.email_address) - // .await?; - let claim = Claim { - id, - email_address: payload.email_address.clone(), - random: payload.random.clone(), - commit: field2hex(&commit), - expiry_time: payload.expiry_time, - is_fund: payload.is_fund, - is_announced: false, - is_seen: false, - }; - tx_claimer.send(claim)?; - trace!(LOG, "claim sent to tx_claimer"; "func" => function_name!()); - - Ok(format!( - "Unclaimed {} for {} is accepted", - if payload.is_fund { "fund" } else { "state" }, - payload.email_address - )) -} - -#[named] -pub(crate) async fn run_server( - addr: &str, - routes: Vec<(String, MethodRouter)>, - db: Arc, - chain_client: Arc, - tx_claimer: UnboundedSender, -) -> Result<()> { - let chain_client_check_clone = Arc::clone(&chain_client); - let chain_client_reveal_clone = Arc::clone(&chain_client); - let tx_claimer_reveal_clone = tx_claimer.clone(); - - let mut app = Router::new() - .route( - "/api/emailAddrCommit", - axum::routing::post(move |payload: String| async move { - info!(LOG, "/emailAddrCommit Received payload: {}", payload; "func" => function_name!()); - let json = serde_json::from_str::(&payload) - .map_err(|_| "Invalid payload json".to_string()) - .unwrap(); - let padded_email_addr = PaddedEmailAddr::from_email_addr(&json.email_address); - let commit = padded_email_addr - .to_commitment(&hex2field(&json.random).unwrap()) - .unwrap(); - info!(LOG, "commit {:?}", commit; "func" => function_name!()); - field2hex(&commit) - }), - ) - .route( - "/api/unclaim", - axum::routing::post(move |payload: String| async move { - info!(LOG, "/unclaim Received payload: {}", payload; "func" => function_name!()); - let json = serde_json::from_str::(&payload) - .map_err(|_| "Invalid payload json".to_string())?; - unclaim(json, db, chain_client, tx_claimer) - .await - .map_err(|err| { - error!(LOG, "Failed to accept unclaim: {}", err; "func" => function_name!()); - err.to_string() - }) - }), - ) - .route( - "/api/stats", - axum::routing::get(move || async move { - let stats = StatResponse { - onboarding_tokens_distributed: ONBOARDING_COUNTER.load(Ordering::SeqCst), - onboarding_tokens_left: *ONBOARDING_TOKEN_DISTRIBUTION_LIMIT.get().unwrap() - - ONBOARDING_COUNTER.load(Ordering::SeqCst), - }; - axum::Json(stats) - }), - ) - .route( - "/api/serveCheck/", - axum::routing::post(move |payload: String| async move { - info!(LOG, "/serveCheck Received payload: {}", payload; "func" => function_name!()); - let json = serde_json::from_str::(&payload) - .map_err(|_| "Invalid payload json".to_string())?; - serve_check_request(json, chain_client_check_clone) - .await - .map_err(|err| { - error!(LOG, "Failed PSI check serve: {}", err; "func" => function_name!()); - err.to_string() - }) - }), - ) - .route( - "/api/serveReveal/", - axum::routing::post(move |payload: String| async move { - info!(LOG, "/serveCheck Received payload: {}", payload; "func" => function_name!()); - let json = serde_json::from_str::(&payload) - .map_err(|_| "Invalid payload json".to_string())?; - serve_reveal_request(json, chain_client_reveal_clone, tx_claimer_reveal_clone) - .await - .map_err(|err| { - error!(LOG, "Failed PSI reveal serve: {}", err; "func" => function_name!()); - err.to_string() - }) - }), - ); - for (path, router) in routes { - app = app.route(&path, router); - } - app = app.layer( - CorsLayer::new() - .allow_methods(AllowMethods::any()) - .allow_headers(AllowHeaders::any()) - .allow_origin(Any), - ); - - trace!(LOG, "Listening API at {}", addr; "func" => function_name!()); - axum::Server::bind(&addr.parse()?) - .serve(app.into_make_service()) - .await?; - - Ok(()) -} diff --git a/packages/utils/Cargo.toml b/packages/utils/Cargo.toml index 07cc53be..872e6fa7 100644 --- a/packages/utils/Cargo.toml +++ b/packages/utils/Cargo.toml @@ -1,7 +1,7 @@ [package] -name = "ether-email-auth-utils" +name = "relayer-utils" version = "0.1.0" -authors = ["Sora Suegami"] +authors = ["Sora Suegami", "Aditya Bisht"] license = "MIT" edition = "2018" exclude = ["index.node"] @@ -40,6 +40,8 @@ rsa = { version = "0.9.6", features = ["serde"] } num-traits = "0.2.15" cfdkim = { version = "0.3.0", git = "https://github.com/SoraSuegami/dkim.git" } slog = "2.7.0" +sha2 = "0.10.8" +ethers = "2.0.14" # wasm-bindgen = { version = "0.2.90", default-features = false } [dependencies.neon] diff --git a/packages/utils/README.md b/packages/utils/README.md deleted file mode 100644 index 908e0bc3..00000000 --- a/packages/utils/README.md +++ /dev/null @@ -1,119 +0,0 @@ -# email-wallet-utils - -This project was bootstrapped by [create-neon](https://www.npmjs.com/package/create-neon). - -## Installing email-wallet-utils - -Installing email-wallet-utils requires a [supported version of Node and Rust](https://github.com/neon-bindings/neon#platform-support). - -You can install the project with npm. In the project directory, run: - -```sh -$ npm install -``` - -This fully installs the project, including installing any dependencies and running the build. - -## Building email-wallet-utils - -If you have already installed the project and only want to run the build, run: - -```sh -$ npm run build -``` - -This command uses the [cargo-cp-artifact](https://github.com/neon-bindings/cargo-cp-artifact) utility to run the Rust build and copy the built library into `./index.node`. - -## Exploring email-wallet-utils - -After building email-wallet-utils, you can explore its exports at the Node REPL: - -```sh -$ npm install -$ node -> require('.').hello() -"hello node" -``` - -## Available Scripts - -In the project directory, you can run: - -### `npm install` - -Installs the project, including running `npm run build`. - -### `npm build` - -Builds the Node addon (`index.node`) from source. - -Additional [`cargo build`](https://doc.rust-lang.org/cargo/commands/cargo-build.html) arguments may be passed to `npm build` and `npm build-*` commands. For example, to enable a [cargo feature](https://doc.rust-lang.org/cargo/reference/features.html): - -``` -npm run build -- --feature=beetle -``` - -#### `npm build-debug` - -Alias for `npm build`. - -#### `npm build-release` - -Same as [`npm build`](#npm-build) but, builds the module with the [`release`](https://doc.rust-lang.org/cargo/reference/profiles.html#release) profile. Release builds will compile slower, but run faster. - -### `npm test` - -Runs the unit tests by calling `cargo test`. You can learn more about [adding tests to your Rust code](https://doc.rust-lang.org/book/ch11-01-writing-tests.html) from the [Rust book](https://doc.rust-lang.org/book/). - -## Project Layout - -The directory structure of this project is: - -``` -email-wallet-utils/ -├── Cargo.toml -├── README.md -├── index.node -├── package.json -├── src/ -| └── lib.rs -└── target/ -``` - -### Cargo.toml - -The Cargo [manifest file](https://doc.rust-lang.org/cargo/reference/manifest.html), which informs the `cargo` command. - -### README.md - -This file. - -### index.node - -The Node addon—i.e., a binary Node module—generated by building the project. This is the main module for this package, as dictated by the `"main"` key in `package.json`. - -Under the hood, a [Node addon](https://nodejs.org/api/addons.html) is a [dynamically-linked shared object](https://en.wikipedia.org/wiki/Library_(computing)#Shared_libraries). The `"build"` script produces this file by copying it from within the `target/` directory, which is where the Rust build produces the shared object. - -### package.json - -The npm [manifest file](https://docs.npmjs.com/cli/v7/configuring-npm/package-json), which informs the `npm` command. - -### src/ - -The directory tree containing the Rust source code for the project. - -### src/lib.rs - -The Rust library's main module. - -### target/ - -Binary artifacts generated by the Rust build. - -## Learn More - -To learn more about Neon, see the [Neon documentation](https://neon-bindings.com). - -To learn more about Rust, see the [Rust documentation](https://www.rust-lang.org). - -To learn more about Node, see the [Node documentation](https://nodejs.org). diff --git a/packages/utils/package.json b/packages/utils/package.json index 87e7c67c..64f01d0a 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,5 +1,5 @@ { - "name": "ether-email-auth-utils", + "name": "relayer-utils", "version": "0.1.0", "description": "", "main": "index.node", diff --git a/packages/utils/src/circuit.rs b/packages/utils/src/circuit.rs new file mode 100644 index 00000000..b57a83d7 --- /dev/null +++ b/packages/utils/src/circuit.rs @@ -0,0 +1,183 @@ +use std::cmp; + +use crate::*; +use anyhow::Result; +use num_bigint::BigInt; +use serde::{Deserialize, Serialize}; + +pub const MAX_HEADER_PADDED_BYTES: usize = 1024; +pub const MAX_BODY_PADDED_BYTES: usize = 1536; +pub const CIRCOM_BIGINT_N: usize = 121; +pub const CIRCOM_BIGINT_K: usize = 17; + +#[derive(Serialize, Deserialize)] +pub struct EmailAuthInput { + padded_header: Vec, + public_key: Vec, + signature: Vec, + padded_header_len: String, + account_code: String, + from_addr_idx: usize, + subject_idx: usize, + domain_idx: usize, + timestamp_idx: usize, + code_idx: usize, +} + +pub struct CircuitInput { + pub in_padded: Vec, + pub pubkey: Vec, + pub signature: Vec, + pub in_len_padded_bytes: String, + pub precomputed_sha: Option>, + pub in_body_padded: Option>, + pub in_body_len_padded_bytes: Option, + pub body_hash_idx: Option, +} + +pub struct CircuitInputParams { + body: Vec, + message: Vec, + body_hash: String, + rsa_signature: BigInt, + rsa_public_key: BigInt, + sha_precompute_selector: Option, + max_message_length: usize, + max_body_length: usize, + ignore_body_hash_check: bool, +} + +impl CircuitInputParams { + // Provides default values for optional parameters + pub fn new( + body: Vec, + message: Vec, + body_hash: String, + rsa_signature: BigInt, + rsa_public_key: BigInt, + sha_precompute_selector: Option, + max_message_length: Option, + max_body_length: Option, + ignore_body_hash_check: Option, + ) -> Self { + CircuitInputParams { + body, + message, + body_hash, + rsa_signature, + rsa_public_key, + sha_precompute_selector, + max_message_length: max_message_length.unwrap_or(MAX_HEADER_PADDED_BYTES), + max_body_length: max_body_length.unwrap_or(MAX_BODY_PADDED_BYTES), + ignore_body_hash_check: ignore_body_hash_check.unwrap_or(false), + } + } +} + +pub fn generate_circuit_inputs(params: CircuitInputParams) -> CircuitInput { + let (message_padded, message_padded_len) = + sha256_pad(params.message.clone(), params.max_message_length); + let body_sha_length = ((params.body.len() + 63 + 65) / 64) * 64; + let (body_padded, body_padded_len) = sha256_pad( + params.body, + cmp::max(params.max_body_length, body_sha_length), + ); + + let result = generate_partial_sha( + body_padded, + body_padded_len, + params.sha_precompute_selector, + params.max_body_length, + ); + + let (precomputed_sha, body_remaining, body_remaining_length) = match result { + Ok((sha, remaining, len)) => (sha, remaining, len), + Err(e) => panic!("Failed to generate partial SHA: {:?}", e), + }; + + let mut circuit_input = CircuitInput { + in_padded: uint8_array_to_char_array(message_padded), + pubkey: to_circom_bigint_bytes(params.rsa_public_key), + signature: to_circom_bigint_bytes(params.rsa_signature), + in_len_padded_bytes: message_padded_len.to_string(), + precomputed_sha: None, + in_body_padded: None, + in_body_len_padded_bytes: None, + body_hash_idx: None, + }; + + if !params.ignore_body_hash_check { + circuit_input.precomputed_sha = Some(uint8_array_to_char_array(precomputed_sha)); + // Convert message into a string + let message_string = String::from_utf8(params.message).expect("Found invalid UTF-8"); + let body_hash_idx = message_string + .find(¶ms.body_hash) + .unwrap_or_else(|| panic!("Body hash not found in message")); + circuit_input.body_hash_idx = Some(body_hash_idx.to_string()); + circuit_input.in_body_padded = Some(uint8_array_to_char_array(body_remaining)); + circuit_input.in_body_len_padded_bytes = Some(body_remaining_length.to_string()); + } + circuit_input +} + +pub async fn generate_email_auth_input(email: &str, account_code: &AccountCode) -> Result { + let parsed_email = ParsedEmail::new_from_raw_email(&email).await?; + let circuit_input_params = circuit::CircuitInputParams::new( + vec![], + parsed_email.canonicalized_header.as_bytes().to_vec(), + "".to_string(), + vec_u8_to_bigint(parsed_email.clone().signature), + vec_u8_to_bigint(parsed_email.clone().public_key), + None, + Some(1024), + Some(64), + Some(true), + ); + let email_circuit_inputs = circuit::generate_circuit_inputs(circuit_input_params); + + let from_addr_idx = parsed_email.get_from_addr_idxes().unwrap().0; + let domain_idx = parsed_email.get_email_domain_idxes().unwrap().0; + let subject_idx = parsed_email.get_subject_all_idxes().unwrap().0; + let code_idx = match parsed_email.get_invitation_code_idxes() { + Ok(indexes) => indexes.0, + Err(_) => 0, + }; + let timestamp_idx = parsed_email.get_timestamp_idxes().unwrap().0; + + let email_auth_input = EmailAuthInput { + padded_header: email_circuit_inputs.in_padded, + public_key: email_circuit_inputs.pubkey, + signature: email_circuit_inputs.signature, + padded_header_len: email_circuit_inputs.in_len_padded_bytes, + account_code: field2hex(&account_code.0), + from_addr_idx: from_addr_idx, + subject_idx: subject_idx, + domain_idx: domain_idx, + timestamp_idx: timestamp_idx, + code_idx, + }; + + Ok(serde_json::to_string(&email_auth_input)?) +} + +pub fn generate_email_auth_input_node(mut cx: FunctionContext) -> JsResult { + let email = cx.argument::(0)?.value(&mut cx); + let account_code = cx.argument::(1)?.value(&mut cx); + let account_code = AccountCode::from(hex2field_node(&mut cx, &account_code)?); + let channel = cx.channel(); + let (deferred, promise) = cx.promise(); + let rt = runtime(&mut cx)?; + + rt.spawn(async move { + let email_auth_input = generate_email_auth_input(&email, &account_code).await; + deferred.settle_with(&channel, move |mut cx| match email_auth_input { + Ok(email_auth_input) => { + let email_auth_input = cx.string(email_auth_input); + Ok(email_auth_input) + } + Err(err) => cx.throw_error(format!("Could not generate email auth input: {}", err)), + }); + }); + + Ok(promise) +} diff --git a/packages/utils/src/converters.rs b/packages/utils/src/converters.rs index 6b2f0918..ca25eb59 100644 --- a/packages/utils/src/converters.rs +++ b/packages/utils/src/converters.rs @@ -1,13 +1,17 @@ use std::convert::TryInto; use anyhow; +use ethers::types::U256; use halo2curves::ff::PrimeField; use itertools::Itertools; use neon::prelude::*; +use num_bigint::BigInt; use poseidon_rs::*; pub use zk_regex_apis::padding::pad_string; +use crate::circuit::{CIRCOM_BIGINT_K, CIRCOM_BIGINT_N}; + pub fn hex2field(input_hex: &str) -> anyhow::Result { if &input_hex[0..2] != "0x" { return Err(anyhow::anyhow!(format!( @@ -103,7 +107,93 @@ pub fn bytes_chunk_fields(bytes: &[u8], chunk_size: usize, num_chunk_in_field: u fields } -pub(crate) fn hex2field_node(cx: &mut FunctionContext, input_strs: &str) -> NeonResult { +/// Converts a 64-bit integer to an array of 8 bytes in big-endian format. +pub fn int64_to_bytes(num: u64) -> Vec { + num.to_be_bytes().to_vec() +} + +/// Converts an 8-bit integer to a Vec with a single element. +pub fn int8_to_bytes(num: u8) -> Vec { + vec![num] +} + +/// Merges two Vec into a single Vec. +pub fn merge_u8_arrays(a: Vec, b: Vec) -> Vec { + [a, b].concat() +} + +pub fn uint8_array_to_char_array(bytes: Vec) -> Vec { + bytes.iter().map(|&b| b.to_string()).collect() +} + +fn big_int_to_chunked_bytes(num: BigInt, bits_per_chunk: usize, num_chunks: usize) -> Vec { + let mut chunks = Vec::new(); + let mut remainder = num; + let two = BigInt::from(2); + let chunk_size = two.pow(bits_per_chunk as u32); + + // Divide the number into chunks and convert each to a decimal string + for _ in 0..num_chunks { + let chunk = &remainder % &chunk_size; + remainder = remainder >> bits_per_chunk; + // Convert chunk to decimal string + chunks.push(chunk.to_string()); + } + + chunks +} + +pub fn to_circom_bigint_bytes(num: BigInt) -> Vec { + big_int_to_chunked_bytes(num, CIRCOM_BIGINT_N, CIRCOM_BIGINT_K) +} + +pub fn vec_u8_to_bigint(bytes: Vec) -> BigInt { + bytes + .iter() + .fold(BigInt::from(0), |acc, &b| (acc << 8) | BigInt::from(b)) +} + +pub fn fr_to_bytes32(fr: &Fr) -> Result<[u8; 32], hex::FromHexError> { + let hex = field2hex(fr); + let bytes = hex::decode(&hex[2..])?; + let mut result = [0u8; 32]; + result.copy_from_slice(&bytes); + Ok(result) +} + +pub fn bytes32_to_fr(bytes32: &[u8; 32]) -> Result { + let hex: String = "0x".to_string() + &hex::encode(bytes32); + hex2field(&hex).map_err(|_e| hex::FromHexError::InvalidStringLength) +} + +pub fn u256_to_bytes32(x: &U256) -> [u8; 32] { + let mut bytes = [0u8; 32]; + x.to_big_endian(&mut bytes); + bytes +} + +pub fn u256_to_bytes32_little(x: &U256) -> [u8; 32] { + let mut bytes = [0u8; 32]; + x.to_little_endian(&mut bytes); + bytes +} + +pub fn u256_to_hex(x: &U256) -> String { + "0x".to_string() + &hex::encode(u256_to_bytes32(x)) +} + +pub fn bytes32_to_hex(bytes: &[u8; 32]) -> String { + "0x".to_string() + &hex::encode(bytes) +} + +pub fn hex_to_u256(hex: &str) -> Result { + let bytes: Vec = hex::decode(&hex[2..])?; + let mut array = [0u8; 32]; + array.copy_from_slice(&bytes); + Ok(U256::from_big_endian(&array)) +} + +pub fn hex2field_node(cx: &mut FunctionContext, input_strs: &str) -> NeonResult { match hex2field(input_strs) { Ok(field) => Ok(field), Err(e) => cx.throw_error(e.to_string()), diff --git a/packages/utils/src/cryptos.rs b/packages/utils/src/cryptos.rs index 5d5c682b..e4bcdb41 100644 --- a/packages/utils/src/cryptos.rs +++ b/packages/utils/src/cryptos.rs @@ -1,9 +1,12 @@ +use std::error::Error; + use crate::converters::*; use halo2curves::ff::Field; use neon::prelude::*; use poseidon_rs::*; use rand_core::{OsRng, RngCore}; +use rsa::sha2::{Digest, Sha256}; pub use zk_regex_apis::padding::pad_string; pub const MAX_EMAIL_ADDR_BYTES: usize = 256; @@ -17,8 +20,6 @@ pub struct PaddedEmailAddr { impl PaddedEmailAddr { pub fn from_email_addr(email_addr: &str) -> Self { let email_addr_len = email_addr.as_bytes().len(); - // let mut padded_bytes = email_addr.as_bytes().to_vec(); - // padded_bytes.append(&mut vec![0; MAX_EMAIL_ADDR_BYTES - email_addr_len]); let padded_bytes = pad_string(email_addr, MAX_EMAIL_ADDR_BYTES).to_vec(); Self { padded_bytes, @@ -198,3 +199,100 @@ pub fn extract_rand_from_signature_node(mut cx: FunctionContext) -> JsResult, max_sha_bytes: usize) -> (Vec, usize) { + let length_bits = data.len() * 8; // Convert length from bytes to bits + let length_in_bytes = int64_to_bytes(length_bits as u64); + + // Add the bit '1' to the end of the data + data = merge_u8_arrays(data, int8_to_bytes(0x80)); + + while (data.len() * 8 + length_in_bytes.len() * 8) % 512 != 0 { + data = merge_u8_arrays(data, int8_to_bytes(0)); + } + + // Append the original length in bits at the end of the data + data = merge_u8_arrays(data, length_in_bytes); + + assert!( + (data.len() * 8) % 512 == 0, + "Padding did not complete properly!" + ); + + let message_len = data.len(); + + // Pad the data to the specified maximum length with zeros + while data.len() < max_sha_bytes { + data = merge_u8_arrays(data, int64_to_bytes(0)); + } + + assert!( + data.len() == max_sha_bytes, + "Padding to max length did not complete properly! Your padded message is {} long but max is {}!", + data.len(), + max_sha_bytes + ); + + (data, message_len) +} + +pub fn partial_sha(msg: &[u8], msg_len: usize) -> Vec { + let mut hasher = Sha256::new(); + // Assuming msg_len is used to specify how much of msg to hash. + // This example simply hashes the entire msg for simplicity. + hasher.update(&msg[..msg_len]); + let result = hasher.finalize(); + result.to_vec() +} + +pub fn generate_partial_sha( + body: Vec, + body_length: usize, + selector_string: Option, + max_remaining_body_length: usize, +) -> Result<(Vec, Vec, usize), Box> { + let selector_index = 0; + + if let Some(selector_str) = selector_string { + let selector = selector_str.as_bytes(); + // Find selector in body and return the starting index + let body_slice = &body[..body_length]; + let _selector_index = match body_slice + .windows(selector.len()) + .position(|window| window == selector) + { + Some(index) => index, + None => return Err("Selector not found in body".into()), + }; + } + + let sha_cutoff_index = (selector_index / 64) * 64; + let precompute_text = &body[..sha_cutoff_index]; + let mut body_remaining = body[sha_cutoff_index..].to_vec(); + + let body_remaining_length = body_length - precompute_text.len(); + + if body_remaining_length > max_remaining_body_length { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + format!( + "Remaining body {} after the selector is longer than max ({})", + body_remaining_length, max_remaining_body_length + ), + ))); + } + + if body_remaining.len() % 64 != 0 { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + "Remaining body was not padded correctly with int64s", + ))); + } + + while body_remaining.len() < max_remaining_body_length { + body_remaining.push(0); + } + + let precomputed_sha = partial_sha(precompute_text, sha_cutoff_index); + Ok((precomputed_sha, body_remaining, body_remaining_length)) +} diff --git a/packages/utils/src/lib.rs b/packages/utils/src/lib.rs index e0450504..fc9bd13f 100644 --- a/packages/utils/src/lib.rs +++ b/packages/utils/src/lib.rs @@ -1,19 +1,23 @@ -use neon::prelude::*; +pub mod circuit; pub mod converters; pub mod cryptos; pub mod parse_email; -mod regex; -mod statics; -pub use converters::*; -pub use cryptos::*; -pub use parse_email::*; +pub mod regex; +pub mod statics; +pub use circuit::*; +pub(crate) use converters::*; +pub(crate) use cryptos::*; +pub(crate) use neon::prelude::*; +pub(crate) use parse_email::*; pub use poseidon_rs::*; -use regex::*; +pub(crate) use regex::*; +pub(crate) use statics::*; pub use zk_regex_apis::extract_substrs::*; pub use zk_regex_apis::padding::*; #[neon::main] fn main(mut cx: ModuleContext) -> NeonResult<()> { + cx.export_function("genEmailAuthInput", generate_email_auth_input_node)?; cx.export_function("parseEmail", parse_email_node)?; cx.export_function("padString", pad_string_node)?; cx.export_function("bytes2Fields", bytes2fields_node)?; diff --git a/packages/utils/src/parse_email.rs b/packages/utils/src/parse_email.rs index 59b7d798..ef06dc48 100644 --- a/packages/utils/src/parse_email.rs +++ b/packages/utils/src/parse_email.rs @@ -1,25 +1,15 @@ use itertools::Itertools; -// use cfdkim::*; -// use mail_auth::common::verify::VerifySignature; -// use mail_auth::trust_dns_resolver::proto::rr::dnssec::public_key; -// use trust_dns_resolver::error::ResolveError; -// use mail_auth::Error; -use crate::statics::*; use anyhow::Result; use hex; -// use mail_auth::{AuthenticatedMessage, DkimOutput, DkimResult, Resolver}; use cfdkim::{canonicalize_signed_email, resolve_public_key}; use neon::prelude::*; use rsa::traits::PublicKeyParts; - use serde::{Deserialize, Serialize}; use zk_regex_apis::extract_substrs::*; -// use trust_dns_resolver::config::{ResolverConfig, ResolverOpts}; -// use trust_dns_resolver::proto::rr::{RData, RecordType}; -// use trust_dns_resolver::AsyncResolver; +use crate::runtime; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ParsedEmail { pub canonicalized_header: String, @@ -63,6 +53,11 @@ impl ParsedEmail { Ok(str) } + pub fn get_from_addr_idxes(&self) -> Result<(usize, usize)> { + let idxes = extract_from_addr_idxes(&self.canonicalized_header)?[0]; + Ok(idxes) + } + pub fn get_to_addr(&self) -> Result { let idxes = extract_to_addr_idxes(&self.canonicalized_header)?[0]; let str = self.canonicalized_header[idxes.0..idxes.1].to_string(); @@ -77,18 +72,35 @@ impl ParsedEmail { Ok(str) } + pub fn get_email_domain_idxes(&self) -> Result<(usize, usize)> { + let idxes = extract_from_addr_idxes(&self.canonicalized_header)?[0]; + let str = self.canonicalized_header[idxes.0..idxes.1].to_string(); + let idxes = extract_email_domain_idxes(&str)?[0]; + Ok(idxes) + } + pub fn get_subject_all(&self) -> Result { let idxes = extract_subject_all_idxes(&self.canonicalized_header)?[0]; let str = self.canonicalized_header[idxes.0..idxes.1].to_string(); Ok(str) } + pub fn get_subject_all_idxes(&self) -> Result<(usize, usize)> { + let idxes = extract_subject_all_idxes(&self.canonicalized_header)?[0]; + Ok(idxes) + } + pub fn get_timestamp(&self) -> Result { let idxes = extract_timestamp_idxes(&self.canonicalized_header)?[0]; let str = &self.canonicalized_header[idxes.0..idxes.1]; Ok(str.parse()?) } + pub fn get_timestamp_idxes(&self) -> Result<(usize, usize)> { + let idxes = extract_timestamp_idxes(&self.canonicalized_header)?[0]; + Ok(idxes) + } + pub fn get_invitation_code(&self) -> Result { let regex_config = serde_json::from_str(include_str!( "../../circuits/src/regexes/invitation_code.json" @@ -99,6 +111,15 @@ impl ParsedEmail { Ok(str) } + pub fn get_invitation_code_idxes(&self) -> Result<(usize, usize)> { + let regex_config = serde_json::from_str(include_str!( + "../../circuits/src/regexes/invitation_code.json" + )) + .unwrap(); + let idxes = extract_substr_idxes(&self.canonicalized_header, ®ex_config)?[0]; + Ok(idxes) + } + pub fn get_email_addr_in_subject(&self) -> Result { let idxes = extract_subject_all_idxes(&self.canonicalized_header)?[0]; let subject = self.canonicalized_header[idxes.0..idxes.1].to_string(); @@ -107,6 +128,13 @@ impl ParsedEmail { Ok(str) } + pub fn get_email_addr_in_subject_idxes(&self) -> Result<(usize, usize)> { + let idxes = extract_subject_all_idxes(&self.canonicalized_header)?[0]; + let subject = self.canonicalized_header[idxes.0..idxes.1].to_string(); + let idxes = extract_email_addr_idxes(&subject)?[0]; + Ok(idxes) + } + pub fn get_message_id(&self) -> Result { let idxes = extract_message_id_idxes(&self.canonicalized_header)?[0]; let str = self.canonicalized_header[idxes.0..idxes.1].to_string(); @@ -131,17 +159,13 @@ pub fn parse_email_node(mut cx: FunctionContext) -> JsResult { let obj = cx.empty_object(); let canonicalized_header = cx.string(parsed_email.canonicalized_header); obj.set(&mut cx, "canonicalizedHeader", canonicalized_header)?; - // let signed_header = cx.string( - // "0x".to_string() + hex::encode(parsed_email.signed_header).as_str(), - // ); - // obj.set(&mut cx, "signedHeader", signed_header)?; + let signature = cx.string(&signature_str); obj.set(&mut cx, "signature", signature)?; let public_key = cx.string(&public_key_str); obj.set(&mut cx, "publicKey", public_key)?; - // let dkim_domain = cx.string(&parsed_email.dkim_domain); - // obj.set(&mut cx, "dkimDomain", dkim_domain)?; + Ok(obj) } diff --git a/packages/utils/src/statics.rs b/packages/utils/src/statics.rs index ae6e9a16..fe6c6a02 100644 --- a/packages/utils/src/statics.rs +++ b/packages/utils/src/statics.rs @@ -2,7 +2,7 @@ use neon::prelude::*; use once_cell::sync::OnceCell; use tokio::runtime::Runtime; -pub(crate) fn runtime<'a, C: Context<'a>>(cx: &mut C) -> NeonResult<&'static Runtime> { +pub fn runtime<'a, C: Context<'a>>(cx: &mut C) -> NeonResult<&'static Runtime> { static RUNTIME: OnceCell = OnceCell::new(); RUNTIME.get_or_try_init(|| Runtime::new().or_else(|err| cx.throw_error(err.to_string())))